<?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>107931</bug_id>
          
          <creation_ts>2013-01-25 02:55:06 -0800</creation_ts>
          <short_desc>[EFL][WK2] Introduce a WebView class as counterpart for WKViewRef</short_desc>
          <delta_ts>2013-02-11 07:51:30 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit EFL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>109438</dependson>
          <blocked>107657</blocked>
    
    <blocked>107662</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Rohde Christiansen">kenneth</reporter>
          <assigned_to name="Kenneth Rohde Christiansen">kenneth</assigned_to>
          <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kling</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>mikhail.pozdnyakov</cc>
    
    <cc>rakuco</cc>
    
    <cc>rniwa</cc>
    
    <cc>tmpsantos</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>816427</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-01-25 02:55:06 -0800</bug_when>
    <thetext>This is part of the transition of putting the EFL API entirely on top of the WK C API + a few EFL extensions (WKView...).

Next steps:
- Add C API for more WebView methods.
- Move non-evas code from EwkView into WebView
- Move smart object related code from ewk_view into EwkView
- Clean ups...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816428</commentid>
    <comment_count>1</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-01-25 02:55:50 -0800</bug_when>
    <thetext>I will upload my WIP patch as it has to be rebased on top of Mikhail&apos;s renaming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816429</commentid>
    <comment_count>2</comment_count>
      <attachid>184711</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-01-25 02:56:28 -0800</bug_when>
    <thetext>Created attachment 184711
Patch (work in progress)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816532</commentid>
    <comment_count>3</comment_count>
      <attachid>184737</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-01-25 06:18:11 -0800</bug_when>
    <thetext>Created attachment 184737
Patch (work in progress)

Feel free to review informally and test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816537</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-25 06:25:08 -0800</bug_when>
    <thetext>Attachment 184737 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/UIProcess/API/C/efl/WKAPICastEfl.h&apos;, u&apos;Source/WebKit2/UIProcess/API/C/efl/WKView.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/C/efl/WKView.h&apos;, u&apos;Source/WebKit2/UIProcess/API/efl/EwkView.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/efl/EwkView.h&apos;, u&apos;Source/WebKit2/UIProcess/API/efl/ewk_view.cpp&apos;, u&apos;Source/WebKit2/UIProcess/API/efl/ewk_view_private.h&apos;, u&apos;Source/WebKit2/UIProcess/efl/WebInspectorProxyEfl.cpp&apos;, u&apos;Tools/TestWebKitAPI/PlatformWebView.h&apos;, u&apos;Tools/TestWebKitAPI/efl/PlatformWebView.cpp&apos;, u&apos;Tools/WebKitTestRunner/PlatformWebView.h&apos;, u&apos;Tools/WebKitTestRunner/efl/EventSenderProxyEfl.cpp&apos;, u&apos;Tools/WebKitTestRunner/efl/PlatformWebViewEfl.cpp&apos;]&quot; exit_code: 1
Source/WebKit2/UIProcess/API/efl/EwkView.cpp:38:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit2/UIProcess/API/efl/EwkView.cpp:43:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit2/UIProcess/API/efl/EwkView.cpp:116:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 3 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816544</commentid>
    <comment_count>5</comment_count>
      <attachid>184737</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-01-25 06:38:45 -0800</bug_when>
    <thetext>Comment on attachment 184737
Patch (work in progress)

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

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:118
&gt; +WebView::WebView(WebContext* context, PageClient* pageClient, WebPageGroup* pageGroup, Evas_Object* evas)

We should really call it evasObject, not evas since evas is the name we use for the canvas.

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:142
&gt; +    m_webPageProxy-&gt;setThemePath(toImpl(theme)-&gt;string().utf8().data());

You&apos;re using WebString here but we are trying to avoid C++ classes usage.

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:580
&gt; +        WKRetainPtr&lt;WKStringRef&gt; wkTheme = WKStringCreateWithUTF8CString(theme);

Needs to be adopted.

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:587
&gt; +    WKStringRef customEncoding = WKPageCopyCustomTextEncodingName(wkPage());

We should probably use a WKRetainPtr and adopt to avoid leaking on early return (the WKStringIsEmpty() if check).

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:591
&gt; +    m_customEncoding = WKEinaSharedString(AdoptWK, customEncoding);

No longer needs to be adopted if you use a WKRetainPtr earlier.

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:598
&gt; +    WKPageSetCustomTextEncodingName(wkPage(), WKStringCreateWithUTF8CString(encoding.utf8().data()));

Value returned by WKStringCreateWithUTF8CString() needs to be adopted.

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:922
&gt; +    WKRetainPtr&lt;WKURLRef&gt; wkActiveURL = WKPageCopyActiveURL(wkPage());

Needs to be adopted.

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:923
&gt; +    WKStringRef wkURLString = WKURLCopyString(wkActiveURL.get());

I would prefer if we use WKRetainPtr and adopt rather than having to call WKRelease() manually.

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:930
&gt; +    m_url = WKEinaSharedString(AdoptWK, wkURLString);

No longer needs to be adopted if you use WKRetainPtr earlier.

&gt; Tools/WebKitTestRunner/efl/PlatformWebViewEfl.cpp:76
&gt; +    evas_object_del(WKViewGetEvasObject(m_view));

This does not look right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816626</commentid>
    <comment_count>6</comment_count>
      <attachid>184760</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-01-25 08:36:53 -0800</bug_when>
    <thetext>Created attachment 184760
Patch (work in progress)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816637</commentid>
    <comment_count>7</comment_count>
      <attachid>184760</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-01-25 09:05:05 -0800</bug_when>
    <thetext>Comment on attachment 184760
Patch (work in progress)

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

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:131
&gt; +    m_webPageProxy-&gt;close();

So we don&apos;t free m_evasObject here?

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:922
&gt; +    WKRetainPtr&lt;WKURLRef&gt; wkActiveURL = WKPageCopyActiveURL(wkPage());

Needs to be adopted.

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:923
&gt; +    WKRetainPtr&lt;WKStringRef&gt; wkURLString = WKURLCopyString(wkActiveURL.get());

Ditto.

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.h:106
&gt; +class WebView {

Shouldn&apos;t this be RefCounted?

&gt; Tools/WebKitTestRunner/efl/PlatformWebViewEfl.cpp:78
&gt; +    evas_object_del(WKViewGetEvasObject(m_view));

Shouldn&apos;t we WKRelease(m_view)? If the WebView destructor frees the evasObject and if it is RefCounted, it should work, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816643</commentid>
    <comment_count>8</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-01-25 09:10:11 -0800</bug_when>
    <thetext>
&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:131
&gt; &gt; +    m_webPageProxy-&gt;close();
&gt; 
&gt; So we don&apos;t free m_evasObject here?

I tried :-) but gave up for now, we end up double freeing

&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.h:106
&gt; &gt; +class WebView {
&gt; 
&gt; Shouldn&apos;t this be RefCounted?

Could be, but maybe it should be an APIObject instead as it is supposed to be used with the C API.

&gt; &gt; Tools/WebKitTestRunner/efl/PlatformWebViewEfl.cpp:78
&gt; &gt; +    evas_object_del(WKViewGetEvasObject(m_view));
&gt; 
&gt; Shouldn&apos;t we WKRelease(m_view)? If the WebView destructor frees the evasObject and if it is RefCounted, it should work, right?

That won&apos;t work yet, as said above, I tried and gave up. If you want to give it a try, feel free, but it can also be done later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817578</commentid>
    <comment_count>9</comment_count>
      <attachid>184760</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-01-28 00:56:33 -0800</bug_when>
    <thetext>Comment on attachment 184760
Patch (work in progress)

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

&gt;&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:131
&gt;&gt; +    m_webPageProxy-&gt;close();
&gt; 
&gt; So we don&apos;t free m_evasObject here?

No, for reasons discussed on IRC

&gt;&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:922
&gt;&gt; +    WKRetainPtr&lt;WKURLRef&gt; wkActiveURL = WKPageCopyActiveURL(wkPage());
&gt; 
&gt; Needs to be adopted.

Fixed locally

&gt;&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:923
&gt;&gt; +    WKRetainPtr&lt;WKStringRef&gt; wkURLString = WKURLCopyString(wkActiveURL.get());
&gt; 
&gt; Ditto.

Fixed locally

&gt;&gt; Source/WebKit2/UIProcess/API/efl/EwkView.h:106
&gt;&gt; +class WebView {
&gt; 
&gt; Shouldn&apos;t this be RefCounted?

We should probably move it to APIObject in another patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817623</commentid>
    <comment_count>10</comment_count>
      <attachid>184956</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-01-28 02:02:47 -0800</bug_when>
    <thetext>Created attachment 184956
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817649</commentid>
    <comment_count>11</comment_count>
      <attachid>184956</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-01-28 02:35:32 -0800</bug_when>
    <thetext>Comment on attachment 184956
Patch

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

LGTM

&gt; Source/WebKit2/UIProcess/API/C/efl/WKView.cpp:65
&gt; +Evas_Object* WKViewGetEvasObject(WKViewRef viewRef)

could we have a comment, saying it is temporary?

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.h:105
&gt; +class WebView {

guess should be inherited from APIObject (but maybe not necessary within the current patch).

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.h:112
&gt; +    WKPageRef pageRef() { return toAPI(m_webPageProxy.get()); }

const method?

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.h:118
&gt; +    // FIXME: Remove when possible.

right</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817658</commentid>
    <comment_count>12</comment_count>
      <attachid>184962</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-01-28 03:05:36 -0800</bug_when>
    <thetext>Created attachment 184962
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817688</commentid>
    <comment_count>13</comment_count>
      <attachid>184962</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-01-28 04:36:40 -0800</bug_when>
    <thetext>Comment on attachment 184962
Patch

LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817727</commentid>
    <comment_count>14</comment_count>
      <attachid>184962</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-01-28 06:52:45 -0800</bug_when>
    <thetext>Comment on attachment 184962
Patch

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

&gt; Source/WebKit2/UIProcess/API/C/efl/WKView.cpp:32
&gt; +    return ewk_view_base_add(canvas, contextRef, pageGroupRef, EwkView::LegacyBehavior)-&gt;wkView();

This looks like it is leaking, isn&apos;t it? ewk_view_base_add() creates a EwkView and then we return a member. When is the EwkView destroyed?

&gt; Source/WebKit2/UIProcess/API/C/efl/WKView.cpp:37
&gt; +    return ewk_view_base_add(canvas, contextRef, pageGroupRef, EwkView::DefaultBehavior)-&gt;wkView();

Ditto.

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.h:283
&gt; +    OwnPtr&lt;WebKit::WebView&gt; m_webView;

Why isn&apos;t this a RefPtr? WebView is refcounted, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817728</commentid>
    <comment_count>15</comment_count>
      <attachid>184962</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-01-28 07:02:26 -0800</bug_when>
    <thetext>Comment on attachment 184962
Patch

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

&gt; Tools/TestWebKitAPI/efl/PlatformWebView.cpp:-76
&gt; -    evas_object_del(m_view);

Shouldn&apos;t we call WKRelease(m_view) here?

&gt; Tools/TestWebKitAPI/efl/PlatformWebView.cpp:76
&gt; +    evas_object_del(WKViewGetEvasObject(m_view));

This frees the Evas_Object inside the EwkView but I don&apos;t see where the EwkView is actually freed. And why doesn&apos;t the EwkView free the Evas_Object itself (it should own it, right?).

&gt; Tools/WebKitTestRunner/efl/PlatformWebViewEfl.cpp:-76
&gt; -    evas_object_del(m_view);

Shouldn&apos;t we call WKRelease(m_view) here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817729</commentid>
    <comment_count>16</comment_count>
      <attachid>184962</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-01-28 07:08:22 -0800</bug_when>
    <thetext>Comment on attachment 184962
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/API/C/efl/WKView.cpp:32
&gt;&gt; +    return ewk_view_base_add(canvas, contextRef, pageGroupRef, EwkView::LegacyBehavior)-&gt;wkView();
&gt; 
&gt; This looks like it is leaking, isn&apos;t it? ewk_view_base_add() creates a EwkView and then we return a member. When is the EwkView destroyed?

It is being deleted by the smart object: Source/WebKit2/UIProcess/API/efl/ewk_view.cpp: delete smartData-&gt;priv;

&gt;&gt; Source/WebKit2/UIProcess/API/efl/EwkView.h:283
&gt;&gt; +    OwnPtr&lt;WebKit::WebView&gt; m_webView;
&gt; 
&gt; Why isn&apos;t this a RefPtr? WebView is refcounted, right?

Sure, will fix

&gt;&gt; Tools/TestWebKitAPI/efl/PlatformWebView.cpp:-76
&gt;&gt; -    evas_object_del(m_view);
&gt; 
&gt; Shouldn&apos;t we call WKRelease(m_view) here?

Because so far we free from the smart object, which frees the EwkView which frees the WebView.

&gt;&gt; Tools/TestWebKitAPI/efl/PlatformWebView.cpp:76
&gt;&gt; +    evas_object_del(WKViewGetEvasObject(m_view));
&gt; 
&gt; This frees the Evas_Object inside the EwkView but I don&apos;t see where the EwkView is actually freed. And why doesn&apos;t the EwkView free the Evas_Object itself (it should own it, right?).

Because we haven&apos;t consolidated the smart object code and the EwkView yet; that is what Mikhail is working on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817738</commentid>
    <comment_count>17</comment_count>
      <attachid>184980</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-01-28 07:29:21 -0800</bug_when>
    <thetext>Created attachment 184980
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817756</commentid>
    <comment_count>18</comment_count>
      <attachid>184980</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-01-28 07:49:15 -0800</bug_when>
    <thetext>Comment on attachment 184980
Patch

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

&gt; Source/WebKit2/UIProcess/API/C/efl/WKView.cpp:32
&gt; +    return ewk_view_base_add(canvas, contextRef, pageGroupRef, EwkView::LegacyBehavior)-&gt;wkView();

I believe WKRetain() should be called here. The convention is that a Create function in the C API returns an object that needs to be unref&apos;d by the caller.

&gt; Source/WebKit2/UIProcess/API/C/efl/WKView.cpp:37
&gt; +    return ewk_view_base_add(canvas, contextRef, pageGroupRef, EwkView::DefaultBehavior)-&gt;wkView();

Ditto.

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.h:105
&gt; +class WebView : public APIObject {

Why are we adding this class to EwkView.h/cpp? Could we move it to its own file to avoid cluttering the existing code? EwkView file is already fairly big on its own.

&gt; Tools/TestWebKitAPI/efl/PlatformWebView.cpp:-76
&gt; -    evas_object_del(m_view);

I believe WKRelease(m_view) will be needed here.

&gt; Tools/WebKitTestRunner/efl/PlatformWebViewEfl.cpp:-76
&gt; -    evas_object_del(m_view);

I believe WKRelease() will be needed here once the Create function calls WKRetain().

&gt; Tools/WebKitTestRunner/efl/PlatformWebViewEfl.cpp:78
&gt; +    evas_object_del(WKViewGetEvasObject(m_view));

Since the patch is likely going to land with this workaround. Would it be possible to share how it is supposed to look like in the end? What approach have you chosen to cleanly handle the Evas_object memory handling?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817765</commentid>
    <comment_count>19</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-01-28 08:21:43 -0800</bug_when>
    <thetext>
&gt; I believe WKRetain() should be called here. The convention is that a Create function in the C API returns an object that needs to be unref&apos;d by the caller.

Very good point; fixed.

&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.h:105
&gt; &gt; +class WebView : public APIObject {
&gt; 
&gt; Why are we adding this class to EwkView.h/cpp? Could we move it to its own file to avoid cluttering the existing code? EwkView file is already fairly big on its own.

Yes, I could probably do that. Let me discuss with Mikhail

&gt; Since the patch is likely going to land with this workaround. Would it be possible to share how it is supposed to look like in the end? What approach have you chosen to cleanly handle the Evas_object memory handling?

Let&apos;s discuss this on IRC</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817766</commentid>
    <comment_count>20</comment_count>
      <attachid>184987</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-01-28 08:23:02 -0800</bug_when>
    <thetext>Created attachment 184987
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817790</commentid>
    <comment_count>21</comment_count>
      <attachid>184992</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-01-28 09:04:34 -0800</bug_when>
    <thetext>Created attachment 184992
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817797</commentid>
    <comment_count>22</comment_count>
      <attachid>184992</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-01-28 09:10:33 -0800</bug_when>
    <thetext>Comment on attachment 184992
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.h:105
&gt; +class WebView : public APIObject {

Why is this still in EwkView.h?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817802</commentid>
    <comment_count>23</comment_count>
      <attachid>184997</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-01-28 09:16:25 -0800</bug_when>
    <thetext>Created attachment 184997
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817804</commentid>
    <comment_count>24</comment_count>
      <attachid>184997</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-01-28 09:20:56 -0800</bug_when>
    <thetext>Comment on attachment 184997
Patch

LGTM. I think this is a good first step since we need to go incrementally. Thanks for the hard work Kenneth.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817919</commentid>
    <comment_count>25</comment_count>
      <attachid>184997</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-01-28 11:37:24 -0800</bug_when>
    <thetext>Comment on attachment 184997
Patch

Looks great! now need to get it landed :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818359</commentid>
    <comment_count>26</comment_count>
      <attachid>184997</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-28 18:28:13 -0800</bug_when>
    <thetext>Comment on attachment 184997
Patch

Attachment 184997 did not pass mac-wk2-ews (mac-wk2):
Output: http://queues.webkit.org/results/16163885

New failing tests:
fast/workers/worker-lifecycle.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818695</commentid>
    <comment_count>27</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-01-29 01:09:54 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; (From update of attachment 184997 [details])
&gt; Attachment 184997 [details] did not pass mac-wk2-ews (mac-wk2):
&gt; Output: http://queues.webkit.org/results/16163885
&gt; 
&gt; New failing tests:
&gt; fast/workers/worker-lifecycle.html

has to be unrelated: only efl-specific code was touched.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818704</commentid>
    <comment_count>28</comment_count>
      <attachid>185195</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-01-29 01:24:31 -0800</bug_when>
    <thetext>Created attachment 185195
Patch

Re-upload previous patch to verify ews.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818882</commentid>
    <comment_count>29</comment_count>
      <attachid>185231</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-01-29 06:05:28 -0800</bug_when>
    <thetext>Created attachment 185231
rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819294</commentid>
    <comment_count>30</comment_count>
      <attachid>185231</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-01-29 13:39:45 -0800</bug_when>
    <thetext>Comment on attachment 185231
rebased

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

&gt; Source/WebKit2/UIProcess/API/C/efl/WKView.cpp:32
&gt; +    WKViewRef viewRef = ewk_view_base_add(canvas, contextRef, pageGroupRef, EwkView::LegacyBehavior)-&gt;wkView();

ouch! one more problem :( ewk_view_base_add can return &apos;0&apos;, so the result should be checked first before invoking wkView()..

&gt; Source/WebKit2/UIProcess/API/C/efl/WKView.cpp:39
&gt; +    WKViewRef viewRef = ewk_view_base_add(canvas, contextRef, pageGroupRef, EwkView::DefaultBehavior)-&gt;wkView();

ditto.

&gt; Source/WebKit2/UIProcess/efl/WebInspectorProxyEfl.cpp:102
&gt; +    m_inspectorView = ewk_view_base_add(ecore_evas_get(m_inspectorWindow), toAPI(page()-&gt;process()-&gt;context()), toAPI(inspectorPageGroup()), EwkView::LegacyBehavior)-&gt;view();

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820161</commentid>
    <comment_count>31</comment_count>
      <attachid>185493</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-01-30 06:39:11 -0800</bug_when>
    <thetext>Created attachment 185493
Patch

Fixed mine comments above. Also fixed possible regressions in unit tests (problem with WebView deletion inside PlatformView dtor).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820162</commentid>
    <comment_count>32</comment_count>
      <attachid>185493</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-01-30 06:41:48 -0800</bug_when>
    <thetext>Comment on attachment 185493
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:556
&gt; +    WKRetainPtr&lt;WKStringRef&gt; wkEncoding = adoptWK(WKStringCreateWithUTF8CString(encoding.utf8().data()));

We could use adoptWK(toCopiedAPI(encoding)) here. It is a bit shorter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820163</commentid>
    <comment_count>33</comment_count>
      <attachid>185493</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-01-30 06:42:32 -0800</bug_when>
    <thetext>Comment on attachment 185493
Patch

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

&gt; Tools/TestWebKitAPI/efl/PlatformWebView.cpp:81
&gt; +    WKRelease(m_view);
&gt; +
&gt; +    // FIXME: The C WKView API currently creates the Evas_Object, so we have to destruct it
&gt; +    // (and its dependencies EwkView and WebKit::WebView) this way, until this get fixed.
&gt; +    evas_object_del(WKViewGetEvasObject(m_view));

shouldn&apos;t you get the evas object first? This looks wrong</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820165</commentid>
    <comment_count>34</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-01-30 06:45:09 -0800</bug_when>
    <thetext>(In reply to comment #33)
&gt; (From update of attachment 185493 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=185493&amp;action=review
&gt; 
&gt; &gt; Tools/TestWebKitAPI/efl/PlatformWebView.cpp:81
&gt; &gt; +    WKRelease(m_view);
&gt; &gt; +
&gt; &gt; +    // FIXME: The C WKView API currently creates the Evas_Object, so we have to destruct it
&gt; &gt; +    // (and its dependencies EwkView and WebKit::WebView) this way, until this get fixed.
&gt; &gt; +    evas_object_del(WKViewGetEvasObject(m_view));
&gt; 
&gt; shouldn&apos;t you get the evas object first? This looks wrong

well yeah, would look better, even though technically it does not matter</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820171</commentid>
    <comment_count>35</comment_count>
      <attachid>185495</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-01-30 06:54:10 -0800</bug_when>
    <thetext>Created attachment 185495
Patch

Took comments from Kenneth and Chris into consideration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820601</commentid>
    <comment_count>36</comment_count>
      <attachid>185495</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-01-30 14:41:31 -0800</bug_when>
    <thetext>Comment on attachment 185495
Patch

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

I am a bit confused with what you are doing.

WebPage is the WebKit abstraction to a page, it is the window to the content. The other platforms have a view that is the native View for the WebPage.
If you look at Mac&apos;s WKView for example, it is dead simple. It simply map the native &quot;things&quot; to the WebKit &quot;things&quot;.

In your case, can you explain what are the responsibilities of the WK C layer? Why does it exists?
Then what is the relations between the WKView, EwkView and ewk_view? Why is there 3 abstractions for the exact same thing?

&gt; Source/WebKit2/ChangeLog:58
&gt; +            object construction has been solves.

solves -&gt; solved.

&gt; Source/WebKit2/UIProcess/API/C/efl/WKView.cpp:36
&gt; +    // Retain as the contract with *Create functions is that returned objects much to be released after use.

Not sure about EFL convention, but if that is the common pattern, you don&apos;t need that comment.

CoreFoundation has similar convention. Anything with Create and Copy return a +1 ref-ed object.

&gt; Source/WebKit2/UIProcess/API/C/efl/WKView.cpp:46
&gt; +    // Retain as the contract with *Create functions is that returned objects much to be released after use.

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821181</commentid>
    <comment_count>37</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-01-31 00:19:54 -0800</bug_when>
    <thetext>(In reply to comment #36)
&gt; (From update of attachment 185495 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=185495&amp;action=review
&gt; 
&gt; I am a bit confused with what you are doing.
&gt; 
&gt; WebPage is the WebKit abstraction to a page, it is the window to the content. The other platforms have a view that is the native View for the WebPage.
&gt; If you look at Mac&apos;s WKView for example, it is dead simple. It simply map the native &quot;things&quot; to the WebKit &quot;things&quot;.
&gt; 
&gt; In your case, can you explain what are the responsibilities of the WK C layer? Why does it exists?
&gt; Then what is the relations between the WKView, EwkView and ewk_view? Why is there 3 abstractions for the exact same thing?

That was the plan :)
1) Existing EwkViewImpl class code and Ewk_view smart object code will be
distributed between two new classes: WebView and EwkView 

2) WebView class is intended to be minimal and just expose the WK2 internals we need; it will be EFL-agnostic meaning we avoid Evas constructs in it.

3) WebView class will not be exported, instead it will have exported wrapping C WKView API(api/c/efl), including client API to be used by EwkView.

4) EwkView class will include the glue code between EFL (Evas) and WebView. Besides EwkView will support WebView client interface.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821214</commentid>
    <comment_count>38</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-01-31 00:36:36 -0800</bug_when>
    <thetext>(In reply to comment #37)
&gt; (In reply to comment #36)
&gt; &gt; (From update of attachment 185495 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=185495&amp;action=review
&gt; &gt; 
&gt; &gt; I am a bit confused with what you are doing.
&gt; &gt; 
&gt; &gt; WebPage is the WebKit abstraction to a page, it is the window to the content. The other platforms have a view that is the native View for the WebPage.
&gt; &gt; If you look at Mac&apos;s WKView for example, it is dead simple. It simply map the native &quot;things&quot; to the WebKit &quot;things&quot;.
&gt; &gt; 
&gt; &gt; In your case, can you explain what are the responsibilities of the WK C layer? Why does it exists?
&gt; &gt; Then what is the relations between the WKView, EwkView and ewk_view? Why is there 3 abstractions for the exact same thing?
&gt; 
&gt; That was the plan :)
&gt; 1) Existing EwkViewImpl class code and Ewk_view smart object code will be
&gt; distributed between two new classes: WebView and EwkView 
&gt; 
&gt; 2) WebView class is intended to be minimal and just expose the WK2 internals we need; it will be EFL-agnostic meaning we avoid Evas constructs in it.
&gt; 
&gt; 3) WebView class will not be exported, instead it will have exported wrapping C WKView API(api/c/efl), including client API to be used by EwkView.
&gt; 
&gt; 4) EwkView class will include the glue code between EFL (Evas) and WebView. Besides EwkView will support WebView client interface.

Kenneth, you might want to add something to this explanation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821246</commentid>
    <comment_count>39</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-01-31 01:32:22 -0800</bug_when>
    <thetext>&gt; In your case, can you explain what are the responsibilities of the WK C layer? Why does it exists?
&gt; Then what is the relations between the WKView, EwkView and ewk_view? Why is there 3 abstractions for the exact same thing?

A few extra comments to what Mikhail already said.

ewk_view will go away, or be merged with EwkView. EwkView is basically the private class for the public EFL API.

We want the ability to use our port without requiring Evas_Object/smart classes/X11 etc, with a simple lower-level C API allowing us to draw to an opengl context (we are not there yet). The specialized Evas_Object based API will be based on top of this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821299</commentid>
    <comment_count>40</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2013-01-31 02:47:57 -0800</bug_when>
    <thetext>(In reply to comment #39)
&gt;&gt; ewk_view will go away, or be merged with EwkView. EwkView is basically the private class for the public EFL API.

&gt; We want the ability to use our port without requiring Evas_Object/smart classes/X11 etc, with a simple lower-level C API allowing us to draw to an opengl context (we are not there yet). The specialized Evas_Object based API will be based on top of this.

I have ambiguous thing. I understand that you guys&apos;re suggesting the plan as below, right ?

WK C-API &lt;-&gt; WebView &lt;-&gt; EwkView &lt;-&gt; ewk_XXX 
(Each role was explained by comment #37)

Basically, I agree to move to this plan in order to be placed top of WK C-APIs. But, it looks you guys want to hide smart classes to private EwkView or replace smart class function with smart callback eventually. If so, frankly I&apos;m not sure if this change can replace all existing functions of smart class, or satisfies all requirements from EFL applications. So, I would suggest that you guys talk with EFL community when you guys start to hide smart class as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821308</commentid>
    <comment_count>41</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-01-31 02:59:58 -0800</bug_when>
    <thetext>(In reply to comment #40)
&gt; (In reply to comment #39)
&gt; &gt;&gt; ewk_view will go away, or be merged with EwkView. EwkView is basically the private class for the public EFL API.
&gt; 
&gt; &gt; We want the ability to use our port without requiring Evas_Object/smart classes/X11 etc, with a simple lower-level C API allowing us to draw to an opengl context (we are not there yet). The specialized Evas_Object based API will be based on top of this.
&gt; 
&gt; I have ambiguous thing. I understand that you guys&apos;re suggesting the plan as below, right ?
&gt; 
&gt; WK C-API &lt;-&gt; WebView &lt;-&gt; EwkView &lt;-&gt; ewk_XXX 
&gt; (Each role was explained by comment #37)
&gt; 
&gt; Basically, I agree to move to this plan in order to be placed top of WK C-APIs. But, it looks you guys want to hide smart classes to private EwkView or replace smart class function with smart callback eventually. If so, frankly I&apos;m not sure if this change can replace all existing functions of smart class, or satisfies all requirements from EFL applications. So, I would suggest that you guys talk with EFL community when you guys start to hide smart class as well.

There is NO changes to the current external API planned as part of this.

This is just refactoring (re-organization) of the current implementation.
Please take a look at WIP patch at bug#108062 for details.
(Moreover we can consider bug#108062 as a continuation of work for converting  efl objects to c++ classes.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821325</commentid>
    <comment_count>42</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2013-01-31 03:26:28 -0800</bug_when>
    <thetext>(In reply to comment #41)

&gt; There is NO changes to the current external API planned as part of this.
&gt; 
&gt; This is just refactoring (re-organization) of the current implementation.
&gt; Please take a look at WIP patch at bug#108062 for details.
&gt; (Moreover we can consider bug#108062 as a continuation of work for converting  efl objects to c++ classes.)

Ok, I see. There was misunderstanding to me. Looks fine. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>821424</commentid>
    <comment_count>43</comment_count>
      <attachid>185758</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-01-31 05:22:26 -0800</bug_when>
    <thetext>Created attachment 185758
patch

Made corrections due to Benjamin&apos;s comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822742</commentid>
    <comment_count>44</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-02-01 07:17:05 -0800</bug_when>
    <thetext>Any chance for a review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824214</commentid>
    <comment_count>45</comment_count>
      <attachid>185758</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2013-02-04 03:49:05 -0800</bug_when>
    <thetext>Comment on attachment 185758
patch

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

I wonder if it&apos;s possible to break down this patch into smaller pieces. A few comments below.

&gt; Source/WebKit2/UIProcess/API/C/efl/WKView.cpp:36
&gt; -    return toAPI(ewk_view_base_add(canvas, contextRef, pageGroupRef, EwkView::LegacyBehavior));
&gt; +    EwkView* ewkView = ewk_view_base_add(canvas, contextRef, pageGroupRef, EwkView::LegacyBehavior);
&gt; +    if (!ewkView)
&gt; +        return 0;
&gt; +
&gt; +    return static_cast&lt;WKViewRef&gt;(WKRetain(ewkView-&gt;wkView()));

So in the long run this function would change signature to just take a WKContextRef and pagegroupref and not instantiate the EwkView anymore?

&gt; Source/WebKit2/UIProcess/API/C/efl/WKView.h:48
&gt; +WK_EXPORT void WKViewSuspendActiveDOMObjectsAndAnimations(WKViewRef);
&gt; +WK_EXPORT void WKViewResumeActiveDOMObjectsAndAnimations(WKViewRef);

This doesn&apos;t look like something that is specific to the ELF port nor to the view, especially given that the implementation is in WebPageProxy. Should this be a function of WKPage? (WKPagePrivate.h?)

&gt; Source/WebKit2/UIProcess/API/C/efl/WKView.h:53
&gt; +WK_EXPORT WKImageRef WKViewCreateSnapshot(WKViewRef);

How does that compare to the existing WKPageCreateSnapshotOfVisibleContent ?

&gt; Source/WebKit2/UIProcess/efl/WebView.cpp:65
&gt; +void WebView::setThemePath(WKStringRef theme)
&gt; +{
&gt; +    m_webPageProxy-&gt;setThemePath(toWTFString(theme).utf8().data());
&gt; +}

Is this something that should go into preferences instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824255</commentid>
    <comment_count>46</comment_count>
      <attachid>185758</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-02-04 04:48:33 -0800</bug_when>
    <thetext>Comment on attachment 185758
patch

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

&gt;&gt; Source/WebKit2/UIProcess/API/C/efl/WKView.h:53
&gt;&gt; +WK_EXPORT WKImageRef WKViewCreateSnapshot(WKViewRef);
&gt; 
&gt; How does that compare to the existing WKPageCreateSnapshotOfVisibleContent ?

Hmm. I did not know about that one. However, WKPageCreateSnapshotOfVisibleContent() is unimplemented and marked for removal (Bug 66979). BTW, this is not a new function, this patch merely removes the argument name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824324</commentid>
    <comment_count>47</comment_count>
      <attachid>185758</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-02-04 07:00:02 -0800</bug_when>
    <thetext>Comment on attachment 185758
patch

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

&gt;&gt; Source/WebKit2/UIProcess/API/C/efl/WKView.cpp:36
&gt;&gt; +    return static_cast&lt;WKViewRef&gt;(WKRetain(ewkView-&gt;wkView()));
&gt; 
&gt; So in the long run this function would change signature to just take a WKContextRef and pagegroupref and not instantiate the EwkView anymore?

Yes that is correct

&gt;&gt; Source/WebKit2/UIProcess/API/C/efl/WKView.h:48
&gt;&gt; +WK_EXPORT void WKViewResumeActiveDOMObjectsAndAnimations(WKViewRef);
&gt; 
&gt; This doesn&apos;t look like something that is specific to the ELF port nor to the view, especially given that the implementation is in WebPageProxy. Should this be a function of WKPage? (WKPagePrivate.h?)

That could be done if other ports find that useful

&gt;&gt; Source/WebKit2/UIProcess/efl/WebView.cpp:65
&gt;&gt; +}
&gt; 
&gt; Is this something that should go into preferences instead?

In the long run we want to get rid of the Edje theming and just use one nice default theme like Chrome does</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824416</commentid>
    <comment_count>48</comment_count>
      <attachid>186393</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-02-04 09:04:30 -0800</bug_when>
    <thetext>Created attachment 186393
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824844</commentid>
    <comment_count>49</comment_count>
      <attachid>186393</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-04 15:50:07 -0800</bug_when>
    <thetext>Comment on attachment 186393
Patch

Rejecting attachment 186393 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=gce-cq-03&apos;, &apos;apply-attachment&apos;, &apos;--no-update&apos;, &apos;--non-interactive&apos;, 186393, &apos;--port=chromium-xvfb&apos;]&quot; exit_code: 2 cwd: /mnt/git/webkit-commit-queue

Last 500 characters of output:
Log
Hunk #1 succeeded at 1 with fuzz 3.
patching file Tools/TestWebKitAPI/PlatformWebView.h
patching file Tools/TestWebKitAPI/efl/PlatformWebView.cpp
patching file Tools/WebKitTestRunner/PlatformWebView.h
patching file Tools/WebKitTestRunner/efl/EventSenderProxyEfl.cpp
patching file Tools/WebKitTestRunner/efl/PlatformWebViewEfl.cpp

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

Full output: http://queues.webkit.org/results/16368419</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824861</commentid>
    <comment_count>50</comment_count>
      <attachid>186488</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-02-04 16:05:28 -0800</bug_when>
    <thetext>Created attachment 186488
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824936</commentid>
    <comment_count>51</comment_count>
      <attachid>186488</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-04 17:21:45 -0800</bug_when>
    <thetext>Comment on attachment 186488
Patch for landing

Clearing flags on attachment: 186488

Committed r141836: &lt;http://trac.webkit.org/changeset/141836&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824937</commentid>
    <comment_count>52</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-04 17:21:53 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184711</attachid>
            <date>2013-01-25 02:56:28 -0800</date>
            <delta_ts>2013-01-25 06:18:11 -0800</delta_ts>
            <desc>Patch (work in progress)</desc>
            <filename>wip.diff</filename>
            <type>text/plain</type>
            <size>26875</size>
            <attacher name="Kenneth Rohde Christiansen">kenneth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tBUElDYXN0
RWZsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLQVBJQ2FzdEVmbC5o
CmluZGV4IGIwMTNhMGEuLjE4ODlmYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQy9lZmwvV0tBUElDYXN0RWZsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9DL2VmbC9XS0FQSUNhc3RFZmwuaApAQCAtMjQsMTUgKzI0LDExIEBACiAjZXJyb3Ig
IlBsZWFzZSAjaW5jbHVkZSBcIldLQVBJQ2FzdC5oXCIgaW5zdGVhZCBvZiB0aGlzIGZpbGUgZGly
ZWN0bHkuIgogI2VuZGlmCiAKLSNpZiBVU0UoRU8pCi10eXBlZGVmIHN0cnVjdCBfRW8gRXZhc19P
YmplY3Q7Ci0jZWxzZQotdHlwZWRlZiBzdHJ1Y3QgX0V2YXNfT2JqZWN0IEV2YXNfT2JqZWN0Owot
I2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJLaXQgewogCi1XS19BRERfQVBJX01BUFBJTkcoV0tWaWV3
UmVmLCBFdmFzX09iamVjdCkKK2NsYXNzIFdlYlZpZXc7CisKK1dLX0FERF9BUElfTUFQUElORyhX
S1ZpZXdSZWYsIFdlYlZpZXcpCiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9DL2VmbC9XS1ZpZXcuY3BwCmluZGV4IGEwNjIwNTIuLmFmODBlYWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5jcHAKQEAgLTI5LDI0ICsyOSwyNiBA
QCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCiBXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlKEV2YXMq
IGNhbnZhcywgV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91
cFJlZikKIHsKLSAgICByZXR1cm4gdG9BUEkoZXdrX3ZpZXdfYmFzZV9hZGQoY2FudmFzLCBjb250
ZXh0UmVmLCBwYWdlR3JvdXBSZWYsIEV3a1ZpZXdJbXBsOjpMZWdhY3lCZWhhdmlvcikpOworICAg
IHJldHVybiB0b0FQSShld2tfdmlld19iYXNlX2FkZChjYW52YXMsIGNvbnRleHRSZWYsIHBhZ2VH
cm91cFJlZiwgRXdrVmlld0ltcGw6OkxlZ2FjeUJlaGF2aW9yKS0+d2ViVmlldygpKTsKIH0KIAog
V0tWaWV3UmVmIFdLVmlld0NyZWF0ZVdpdGhGaXhlZExheW91dChFdmFzKiBjYW52YXMsIFdLQ29u
dGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCiB7Ci0gICAg
cmV0dXJuIHRvQVBJKGV3a192aWV3X2Jhc2VfYWRkKGNhbnZhcywgY29udGV4dFJlZiwgcGFnZUdy
b3VwUmVmLCBFd2tWaWV3SW1wbDo6RGVmYXVsdEJlaGF2aW9yKSk7CisgICAgcmV0dXJuIHRvQVBJ
KGV3a192aWV3X2Jhc2VfYWRkKGNhbnZhcywgY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmLCBFd2tW
aWV3SW1wbDo6RGVmYXVsdEJlaGF2aW9yKS0+d2ViVmlldygpKTsKIH0KIAogV0tQYWdlUmVmIFdL
Vmlld0dldFBhZ2UoV0tWaWV3UmVmIHZpZXdSZWYpCiB7Ci0gICAgRXdrVmlld0ltcGwqIHZpZXdJ
bXBsID0gRXdrVmlld0ltcGw6OmZyb21FdmFzT2JqZWN0KHRvSW1wbCh2aWV3UmVmKSk7CisgICAg
cmV0dXJuIHRvSW1wbCh2aWV3UmVmKS0+cGFnZVJlZigpOworfQogCi0gICAgcmV0dXJuIHZpZXdJ
bXBsLT53a1BhZ2UoKTsKK0V2YXNfT2JqZWN0KiBXS1ZpZXdHZXRFdmFzT2JqZWN0KFdLVmlld1Jl
ZiB2aWV3UmVmKQoreworICAgIHJldHVybiB0b0ltcGwodmlld1JlZiktPmV2YXNPYmplY3QoKTsK
IH0KIAogV0tJbWFnZVJlZiBXS1ZpZXdDcmVhdGVTbmFwc2hvdChXS1ZpZXdSZWYgdmlld1JlZikK
IHsKLSAgICBFd2tWaWV3SW1wbCogdmlld0ltcGwgPSBFd2tWaWV3SW1wbDo6ZnJvbUV2YXNPYmpl
Y3QodG9JbXBsKHZpZXdSZWYpKTsKLQorICAgIEV3a1ZpZXdJbXBsKiB2aWV3SW1wbCA9IEV3a1Zp
ZXdJbXBsOjpmcm9tRXZhc09iamVjdCh0b0ltcGwodmlld1JlZiktPmV2YXNPYmplY3QoKSk7CiAg
ICAgcmV0dXJuIFdLSW1hZ2VDcmVhdGVGcm9tQ2Fpcm9TdXJmYWNlKHZpZXdJbXBsLT50YWtlU25h
cHNob3QoKS5nZXQoKSwgMCAvKiBvcHRpb25zICovKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5oCmluZGV4IGNjNzMwN2MuLjQyYTg4NzMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaApAQCAtMjQsOCArMjQsMTAg
QEAKIAogI2lmIFVTRShFTykKIHR5cGVkZWYgc3RydWN0IF9FbyBFdmFzOwordHlwZWRlZiBzdHJ1
Y3QgX0VvIEV2YXNfT2JqZWN0OwogI2Vsc2UKIHR5cGVkZWYgc3RydWN0IF9FdmFzIEV2YXM7Cit0
eXBlZGVmIHN0cnVjdCBfRXZhc19PYmplY3QgRXZhc19PYmplY3Q7CiAjZW5kaWYKIAogI2lmZGVm
IF9fY3BsdXNwbHVzCkBAIC0zNiw5ICszOCwxMSBAQCBXS19FWFBPUlQgV0tWaWV3UmVmIFdLVmll
d0NyZWF0ZShFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91cAog
CiBXS19FWFBPUlQgV0tWaWV3UmVmIFdLVmlld0NyZWF0ZVdpdGhGaXhlZExheW91dChFdmFzKiBj
YW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXApOwog
Ci1XS19FWFBPUlQgV0tQYWdlUmVmIFdLVmlld0dldFBhZ2UoV0tWaWV3UmVmIHZpZXcpOworV0tf
RVhQT1JUIFdLUGFnZVJlZiBXS1ZpZXdHZXRQYWdlKFdLVmlld1JlZik7CiAKLVdLX0VYUE9SVCBX
S0ltYWdlUmVmIFdLVmlld0NyZWF0ZVNuYXBzaG90KFdLVmlld1JlZiB2aWV3UmVmKTsKK1dLX0VY
UE9SVCBFdmFzX09iamVjdCogV0tWaWV3R2V0RXZhc09iamVjdChXS1ZpZXdSZWYpOworCitXS19F
WFBPUlQgV0tJbWFnZVJlZiBXS1ZpZXdDcmVhdGVTbmFwc2hvdChXS1ZpZXdSZWYpOwogCiAjaWZk
ZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL0V3a1ZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L0V3a1ZpZXdJbXBsLmNwcAppbmRleCBjNjNiOWE0Li40ZjMxYWE3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3SW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0ltcGwuY3BwCkBAIC0zOSw2ICszOSw3
IEBACiAjaW5jbHVkZSAiV0tHZW9tZXRyeS5oIgogI2luY2x1ZGUgIldLTnVtYmVyLmgiCiAjaW5j
bHVkZSAiV0tTdHJpbmcuaCIKKyNpbmNsdWRlICJXS1BhZ2VHcm91cC5oIgogI2luY2x1ZGUgIldl
YkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJJbWFnZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VHcm91
cC5oIgpAQCAtMTEwLDE0ICsxMTEsMTQgQEAgY29uc3QgRXZhc19PYmplY3QqIEV3a1ZpZXdJbXBs
Ojp2aWV3RnJvbVBhZ2VWaWV3TWFwKGNvbnN0IFdLUGFnZVJlZiBwYWdlKQogICAgIHJldHVybiBw
YWdlVmlld01hcCgpLmdldChwYWdlKTsKIH0KIAotRXdrVmlld0ltcGw6OkV3a1ZpZXdJbXBsKEV2
YXNfT2JqZWN0KiB2aWV3LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFBhc3NSZWZQ
dHI8V2ViUGFnZUdyb3VwPiBwYWdlR3JvdXAsIFZpZXdCZWhhdmlvciBiZWhhdmlvcikKK0V3a1Zp
ZXdJbXBsOjpFd2tWaWV3SW1wbChFdmFzX09iamVjdCogdmlldywgUGFzc1JlZlB0cjxFd2tDb250
ZXh0PiBjb250ZXh0LCBXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCwgVmlld0JlaGF2aW9yIGJlaGF2
aW9yKQogICAgIDogbV92aWV3KHZpZXcpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKICNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgLCBtX3BlbmRpbmdTdXJmYWNlUmVzaXpl
KGZhbHNlKQogI2VuZGlmCiAgICAgLCBtX3BhZ2VDbGllbnQoYmVoYXZpb3IgPT0gRGVmYXVsdEJl
aGF2aW9yID8gUGFnZUNsaWVudERlZmF1bHRJbXBsOjpjcmVhdGUodGhpcykgOiBQYWdlQ2xpZW50
TGVnYWN5SW1wbDo6Y3JlYXRlKHRoaXMpKQotICAgICwgbV9wYWdlUHJveHkobV9jb250ZXh0LT53
ZWJDb250ZXh0KCktPmNyZWF0ZVdlYlBhZ2UobV9wYWdlQ2xpZW50LmdldCgpLCBwYWdlR3JvdXAu
Z2V0KCkpKQorICAgICwgbV93ZWJWaWV3KGFkb3B0UHRyKG5ldyBXZWJWaWV3KG1fY29udGV4dC0+
d2ViQ29udGV4dCgpLmdldCgpLCBtX3BhZ2VDbGllbnQuZ2V0KCksIHBhZ2VHcm91cCwgdmlldykp
KQogICAgICwgbV9wYWdlTG9hZENsaWVudChQYWdlTG9hZENsaWVudEVmbDo6Y3JlYXRlKHRoaXMp
KQogICAgICwgbV9wYWdlUG9saWN5Q2xpZW50KFBhZ2VQb2xpY3lDbGllbnRFZmw6OmNyZWF0ZSh0
aGlzKSkKICAgICAsIG1fcGFnZVVJQ2xpZW50KFBhZ2VVSUNsaWVudEVmbDo6Y3JlYXRlKHRoaXMp
KQpAQCAtMTI3LDcgKzEyOCw3IEBAIEV3a1ZpZXdJbXBsOjpFd2tWaWV3SW1wbChFdmFzX09iamVj
dCogdmlldywgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBQYXNzCiAjaWYgRU5BQkxF
KFZJQlJBVElPTikKICAgICAsIG1fdmlicmF0aW9uQ2xpZW50KFZpYnJhdGlvbkNsaWVudEVmbDo6
Y3JlYXRlKHRoaXMpKQogI2VuZGlmCi0gICAgLCBtX2JhY2tGb3J3YXJkTGlzdChFd2tCYWNrRm9y
d2FyZExpc3Q6OmNyZWF0ZSh0b0FQSShtX3BhZ2VQcm94eS0+YmFja0ZvcndhcmRMaXN0KCkpKSkK
KyAgICAsIG1fYmFja0ZvcndhcmRMaXN0KEV3a0JhY2tGb3J3YXJkTGlzdDo6Y3JlYXRlKFdLUGFn
ZUdldEJhY2tGb3J3YXJkTGlzdCh3a1BhZ2UoKSkpKQogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NU
T1JFKQogICAgICwgbV9wYWdlU2NhbGVGYWN0b3IoMSkKICNlbmRpZgpAQCAtMTQ0LDI5ICsxNDUs
MjIgQEAgRXdrVmlld0ltcGw6OkV3a1ZpZXdJbXBsKEV2YXNfT2JqZWN0KiB2aWV3LCBQYXNzUmVm
UHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFBhc3MKIHsKICAgICBBU1NFUlQobV92aWV3KTsKICAg
ICBBU1NFUlQobV9jb250ZXh0KTsKLSAgICBBU1NFUlQobV9wYWdlUHJveHkpOwogCi0jaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIG1fcGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJl
ZmVyZW5jZXMoKS0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQodHJ1ZSk7Ci0gICAg
bV9wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRGb3JjZUNvbXBvc2l0
aW5nTW9kZSh0cnVlKTsKLSNpZiBFTkFCTEUoV0VCR0wpCi0gICAgbV9wYWdlUHJveHktPnBhZ2VH
cm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRXZWJHTEVuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKLSAg
ICBpZiAoYmVoYXZpb3IgPT0gRGVmYXVsdEJlaGF2aW9yKQotICAgICAgICBtX3BhZ2VQcm94eS0+
c2V0VXNlRml4ZWRMYXlvdXQodHJ1ZSk7Ci0jZW5kaWYKKyAgICBtX3dlYlZpZXctPmluaXRpYWxp
emUoKTsKIAotICAgIG1fcGFnZVByb3h5LT5pbml0aWFsaXplV2ViUGFnZSgpOworICAgIFdLUGFn
ZVNldFVzZUZpeGVkTGF5b3V0KHdrUGFnZSgpLCBiZWhhdmlvciA9PSBEZWZhdWx0QmVoYXZpb3Ip
OwogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIG1fcGFnZVByb3h5LT5mdWxsU2Ny
ZWVuTWFuYWdlcigpLT5zZXRXZWJWaWV3KG1fdmlldyk7Ci0gICAgbV9wYWdlUHJveHktPnBhZ2VH
cm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRGdWxsU2NyZWVuRW5hYmxlZCh0cnVlKTsKLSNlbmRp
ZgotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0gICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5w
cmVmZXJlbmNlcygpLT5zZXRXZWJBdWRpb0VuYWJsZWQodHJ1ZSk7CisgICAgLy9tX3BhZ2VQcm94
eS0+ZnVsbFNjcmVlbk1hbmFnZXIoKS0+c2V0V2ViVmlldyhtX3ZpZXcpOwogI2VuZGlmCiAKLSAg
ICBtX3BhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldE9mZmxpbmVXZWJB
cHBsaWNhdGlvbkNhY2hlRW5hYmxlZCh0cnVlKTsKKyAgICBXS1BhZ2VHcm91cFJlZiB3a1BhZ2VH
cm91cCA9IFdLUGFnZUdldFBhZ2VHcm91cCh3a1BhZ2UoKSk7CisgICAgV0tQcmVmZXJlbmNlc1Jl
ZiB3a1ByZWZlcmVuY2VzID0gV0tQYWdlR3JvdXBHZXRQcmVmZXJlbmNlcyh3a1BhZ2VHcm91cCk7
CisKKyAgICBXS1ByZWZlcmVuY2VzU2V0V2ViR0xFbmFibGVkKHdrUHJlZmVyZW5jZXMsIHRydWUp
OworICAgIFdLUHJlZmVyZW5jZXNTZXRGdWxsU2NyZWVuRW5hYmxlZCh3a1ByZWZlcmVuY2VzLCB0
cnVlKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0V2ViQXVkaW9FbmFibGVkKHdrUHJlZmVyZW5jZXMs
IHRydWUpOworICAgIFdLUHJlZmVyZW5jZXNTZXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVu
YWJsZWQod2tQcmVmZXJlbmNlcywgdHJ1ZSk7CiAKICAgICAvLyBFbmFibGUgbW91c2UgZXZlbnRz
IGJ5IGRlZmF1bHQKICAgICBzZXRNb3VzZUV2ZW50c0VuYWJsZWQodHJ1ZSk7CkBAIC0xODIsOCAr
MTc2LDYgQEAgRXdrVmlld0ltcGw6OkV3a1ZpZXdJbXBsKEV2YXNfT2JqZWN0KiB2aWV3LCBQYXNz
UmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFBhc3MKIAogRXdrVmlld0ltcGw6On5Fd2tWaWV3
SW1wbCgpCiB7Ci0gICAgbV9wYWdlUHJveHktPmNsb3NlKCk7Ci0KICAgICAvLyBVbnJlZ2lzdGVy
IGljb24gY2hhbmdlIGNhbGxiYWNrLgogICAgIEV3a0Zhdmljb25EYXRhYmFzZSogaWNvbkRhdGFi
YXNlID0gbV9jb250ZXh0LT5mYXZpY29uRGF0YWJhc2UoKTsKICAgICBBU1NFUlQoaWNvbkRhdGFi
YXNlKTsKQEAgLTIxMSw5ICsyMDMsOSBAQCBFd2tWaWV3SW1wbCogRXdrVmlld0ltcGw6OmZyb21F
dmFzT2JqZWN0KGNvbnN0IEV2YXNfT2JqZWN0KiB2aWV3KQogICogQGludGVybmFsCiAgKiBSZXRy
aWV2ZXMgdGhlIGludGVybmFsIFdLUGFnZSBmb3IgdGhpcyB2aWV3LgogICovCi1XS1BhZ2VSZWYg
RXdrVmlld0ltcGw6OndrUGFnZSgpCitXS1BhZ2VSZWYgRXdrVmlld0ltcGw6OndrUGFnZSgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIHRvQVBJKG1fcGFnZVByb3h5LmdldCgpKTsKKyAgICByZXR1cm4g
bV93ZWJWaWV3LT5wYWdlUmVmKCk7CiB9CiAKIHZvaWQgRXdrVmlld0ltcGw6OnNldEN1cnNvcihj
b25zdCBDdXJzb3ImIGN1cnNvcikKQEAgLTI5Nyw3ICsyODksNyBAQCB2b2lkIEV3a1ZpZXdJbXBs
OjpzZXREZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZSkKIAogZmxvYXQgRXdrVmlld0ltcGw6
OmRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9wYWdlUHJveHktPmRl
dmljZVNjYWxlRmFjdG9yKCk7CisgICAgcmV0dXJuIFdLUGFnZUdldEJhY2tpbmdTY2FsZUZhY3Rv
cih3a1BhZ2UoKSk7CiB9CiAKIEFmZmluZVRyYW5zZm9ybSBFd2tWaWV3SW1wbDo6dHJhbnNmb3Jt
RnJvbVNjZW5lKCkgY29uc3QKQEAgLTUyMyw3ICs1MTUsNyBAQCBib29sIEV3a1ZpZXdJbXBsOjpp
c1Zpc2libGUoKSBjb25zdAogCiBjb25zdCBjaGFyKiBFd2tWaWV3SW1wbDo6dGl0bGUoKSBjb25z
dAogewotICAgIG1fdGl0bGUgPSBtX3BhZ2VQcm94eS0+cGFnZVRpdGxlKCkudXRmOCgpLmRhdGEo
KTsKKyAgICBtX3RpdGxlID0gV0tFaW5hU2hhcmVkU3RyaW5nKEFkb3B0V0ssIFdLUGFnZUNvcHlU
aXRsZSh3a1BhZ2UoKSkpOwogCiAgICAgcmV0dXJuIG1fdGl0bGU7CiB9CkBAIC01NDYsMjQgKzUz
OCwyNCBAQCB2b2lkIEV3a1ZpZXdJbXBsOjpzZXRUaGVtZVBhdGgoY29uc3QgY2hhciogdGhlbWUp
CiB7CiAgICAgaWYgKG1fdGhlbWUgIT0gdGhlbWUpIHsKICAgICAgICAgbV90aGVtZSA9IHRoZW1l
OwotICAgICAgICBtX3BhZ2VQcm94eS0+c2V0VGhlbWVQYXRoKHRoZW1lKTsKKyAgICAgICAgbV93
ZWJWaWV3LT5zZXRUaGVtZVBhdGgodGhlbWUpOwogICAgIH0KIH0KIAogY29uc3QgY2hhciogRXdr
Vmlld0ltcGw6OmN1c3RvbVRleHRFbmNvZGluZ05hbWUoKSBjb25zdAogewotICAgIFN0cmluZyBj
dXN0b21FbmNvZGluZyA9IG1fcGFnZVByb3h5LT5jdXN0b21UZXh0RW5jb2RpbmdOYW1lKCk7Ci0g
ICAgaWYgKGN1c3RvbUVuY29kaW5nLmlzRW1wdHkoKSkKKyAgICBXS1N0cmluZ1JlZiBjdXN0b21F
bmNvZGluZyA9IFdLUGFnZUNvcHlDdXN0b21UZXh0RW5jb2RpbmdOYW1lKHdrUGFnZSgpKTsKKyAg
ICBpZiAoV0tTdHJpbmdJc0VtcHR5KGN1c3RvbUVuY29kaW5nKSkKICAgICAgICAgcmV0dXJuIDA7
CiAKLSAgICBtX2N1c3RvbUVuY29kaW5nID0gY3VzdG9tRW5jb2RpbmcudXRmOCgpLmRhdGEoKTsK
KyAgICBtX2N1c3RvbUVuY29kaW5nID0gV0tFaW5hU2hhcmVkU3RyaW5nKEFkb3B0V0ssIGN1c3Rv
bUVuY29kaW5nKTsKIAogICAgIHJldHVybiBtX2N1c3RvbUVuY29kaW5nOwogfQogCiB2b2lkIEV3
a1ZpZXdJbXBsOjpzZXRDdXN0b21UZXh0RW5jb2RpbmdOYW1lKGNvbnN0IFN0cmluZyYgZW5jb2Rp
bmcpCiB7Ci0gICAgbV9wYWdlUHJveHktPnNldEN1c3RvbVRleHRFbmNvZGluZ05hbWUoZW5jb2Rp
bmcpOworICAgIFdLUGFnZVNldEN1c3RvbVRleHRFbmNvZGluZ05hbWUod2tQYWdlKCksIFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGVuY29kaW5nLnV0ZjgoKS5kYXRhKCkpKTsKIH0KIAog
dm9pZCBFd2tWaWV3SW1wbDo6c2V0TW91c2VFdmVudHNFbmFibGVkKGJvb2wgZW5hYmxlZCkKQEAg
LTY0NSw5ICs2MzcsNiBAQCBib29sIEV3a1ZpZXdJbXBsOjpjcmVhdGVHTFN1cmZhY2UoY29uc3Qg
SW50U2l6ZSYgdmlld1NpemUpCiAgICAgICAgIGlmICghbV9ldmFzR0wpIHsKICAgICAgICAgICAg
IFdBUk4oIkZhaWxlZCB0byBjcmVhdGUgRXZhc19HTCwgZmFsbGluZyBiYWNrIHRvIHNvZnR3YXJl
IG1vZGUuIik7CiAgICAgICAgICAgICBtX2lzSGFyZHdhcmVBY2NlbGVyYXRlZCA9IGZhbHNlOwot
I2lmIEVOQUJMRShXRUJHTCkKLSAgICAgICAgICAgIG1fcGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+
cHJlZmVyZW5jZXMoKS0+c2V0V2ViR0xFbmFibGVkKGZhbHNlKTsKLSNlbmRpZgogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtODkwLDE1ICs4NzksMTUgQEAg
dW5zaWduZWQgbG9uZyBsb25nIEV3a1ZpZXdJbXBsOjppbmZvcm1EYXRhYmFzZVF1b3RhUmVhY2hl
ZChjb25zdCBTdHJpbmcmIGRhdGFiYXMKICAqLwogdm9pZCBFd2tWaWV3SW1wbDo6aW5mb3JtVVJM
Q2hhbmdlKCkKIHsKLSAgICBTdHJpbmcgYWN0aXZlVVJMID0gbV9wYWdlUHJveHktPmFjdGl2ZVVS
TCgpOwotICAgIGlmIChhY3RpdmVVUkwuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47CisgICAg
V0tSZXRhaW5QdHI8V0tVUkxSZWY+IHdrQWN0aXZlVVJMID0gV0tQYWdlQ29weUFjdGl2ZVVSTCh3
a1BhZ2UoKSk7CisgICAgV0tTdHJpbmdSZWYgd2tVUkxTdHJpbmcgPSBXS1VSTENvcHlTdHJpbmco
d2tBY3RpdmVVUkwuZ2V0KCkpOwogCi0gICAgQ1N0cmluZyByYXdBY3RpdmVVUkwgPSBhY3RpdmVV
UkwudXRmOCgpOwotICAgIGlmIChtX3VybCA9PSByYXdBY3RpdmVVUkwuZGF0YSgpKQorICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHdrVVJMU3RyaW5nLCBtX3VybCkpIHsKKyAg
ICAgICAgV0tSZWxlYXNlKHdrVVJMU3RyaW5nKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAot
ICAgIG1fdXJsID0gcmF3QWN0aXZlVVJMLmRhdGEoKTsKKyAgICBtX3VybCA9IFdLRWluYVNoYXJl
ZFN0cmluZyhBZG9wdFdLLCB3a1VSTFN0cmluZyk7CiAgICAgc21hcnRDYWxsYmFjazxVUkxDaGFu
Z2VkPigpLmNhbGwobV91cmwpOwogCiAgICAgLy8gVXBkYXRlIHRoZSB2aWV3J3MgZmF2aWNvbi4K
QEAgLTEwMzAsNyArMTAxOSw3IEBAIHZvaWQgRXdrVmlld0ltcGw6Om9uRmF2aWNvbkNoYW5nZWQo
Y29uc3QgY2hhciogcGFnZVVSTCwgdm9pZCogZXZlbnRJbmZvKQogUGFzc1JlZlB0cjxjYWlyb19z
dXJmYWNlX3Q+IEV3a1ZpZXdJbXBsOjp0YWtlU25hcHNob3QoKQogewogICAgIC8vIFN1c3BlbmQg
YWxsIGFuaW1hdGlvbnMgYmVmb3JlIHRha2luZyB0aGUgc25hcHNob3QuCi0gICAgbV9wYWdlUHJv
eHktPnN1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworICAgIG1fd2ViVmll
dy0+c3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7CiAKICAgICAvLyBXYWl0
IGZvciB0aGUgcGVuZGluZyByZXBhaW50IGV2ZW50cyB0byBiZSBwcm9jZXNzZWQuCiAgICAgd2hp
bGUgKG1fZGlzcGxheVRpbWVyLmlzQWN0aXZlKCkpCkBAIC0xMDQyLDcgKzEwMzEsNyBAQCBQYXNz
UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gRXdrVmlld0ltcGw6OnRha2VTbmFwc2hvdCgpCiAjZW5k
aWYKICAgICAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc25hcHNob3QgPSBjcmVhdGVTdXJm
YWNlRm9ySW1hZ2Uoc2QtPmltYWdlKTsKICAgICAgICAgLy8gUmVzdW1lIGFsbCBhbmltYXRpb25z
LgotICAgICAgICBtX3BhZ2VQcm94eS0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlv
bnMoKTsKKyAgICAgICAgbV93ZWJWaWV3LT5yZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0
aW9ucygpOwogCiAgICAgICAgIHJldHVybiBzbmFwc2hvdC5yZWxlYXNlKCk7CiAjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtMTA1MCw3ICsxMDM5LDcgQEAgUGFzc1JlZlB0cjxj
YWlyb19zdXJmYWNlX3Q+IEV3a1ZpZXdJbXBsOjp0YWtlU25hcHNob3QoKQogCiAgICAgUmVmUHRy
PGNhaXJvX3N1cmZhY2VfdD4gc25hcHNob3QgPSBnZXRJbWFnZVN1cmZhY2VGcm9tRnJhbWVCdWZm
ZXIoMCwgMCwgc2QtPnZpZXcudywgc2QtPnZpZXcuaCk7CiAgICAgLy8gUmVzdW1lIGFsbCBhbmlt
YXRpb25zLgotICAgIG1fcGFnZVByb3h5LT5yZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0
aW9ucygpOworICAgIG1fd2ViVmlldy0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlv
bnMoKTsKIAogICAgIHJldHVybiBzbmFwc2hvdC5yZWxlYXNlKCk7CiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdJbXBsLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3SW1wbC5oCmluZGV4IDhhZGVhOTAu
LjM2YmQ0OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3
a1ZpZXdJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmll
d0ltcGwuaApAQCAtNDksNiArNDksMTAgQEAKICNpbmNsdWRlICJFdmFzR0xTdXJmYWNlLmgiCiAj
ZW5kaWYKIAorI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJQYWdlR3JvdXAu
aCIKKyNpbmNsdWRlICJXZWJQcmVmZXJlbmNlcy5oIgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIGNs
YXNzIENvbnRleHRNZW51Q2xpZW50RWZsOwogY2xhc3MgRmluZENsaWVudEVmbDsKQEAgLTk2LDYg
KzEwMCw1MiBAQCB0eXBlZGVmIHN0cnVjdCBfRXZhc19HTF9TdXJmYWNlIEV2YXNfR0xfU3VyZmFj
ZTsKIAogdHlwZWRlZiBzdHJ1Y3QgRXdrX1ZpZXdfU21hcnRfRGF0YSBFd2tfVmlld19TbWFydF9E
YXRhOwogCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gUExFQVNFIExJQ0VOU0UgVEhJUyBDTEFT
UyBBUyBCU0QhCitjbGFzcyBXZWJWaWV3IHsKK3B1YmxpYzoKKyAgICBXZWJWaWV3KFdlYkNvbnRl
eHQqIGNvbnRleHQsIFBhZ2VDbGllbnQqIHBhZ2VDbGllbnQsIFdlYlBhZ2VHcm91cCogcGFnZUdy
b3VwLCBFdmFzX09iamVjdCogZXZhcykKKyAgICAgICAgOiBtX3dlYlBhZ2VQcm94eShjb250ZXh0
LT5jcmVhdGVXZWJQYWdlKHBhZ2VDbGllbnQsIHBhZ2VHcm91cCkpCisgICAgICAgICwgbV9ldmFz
T2JqZWN0KGV2YXMpCisgICAgeworICAgICAgICBtX3dlYlBhZ2VQcm94eS0+cGFnZUdyb3VwKCkt
PnByZWZlcmVuY2VzKCktPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKHRydWUpOwor
ICAgICAgICBtX3dlYlBhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldEZv
cmNlQ29tcG9zaXRpbmdNb2RlKHRydWUpOworICAgIH0KKyAgICB2aXJ0dWFsIH5XZWJWaWV3KCkg
eyBtX3dlYlBhZ2VQcm94eS0+Y2xvc2UoKTsgfQorCisgICAgdm9pZCBpbml0aWFsaXplKCkgeyBt
X3dlYlBhZ2VQcm94eS0+aW5pdGlhbGl6ZVdlYlBhZ2UoKTsgfQorCisgICAgV0tQYWdlUmVmIHBh
Z2VSZWYoKSB7IHJldHVybiB0b0FQSShtX3dlYlBhZ2VQcm94eS5nZXQoKSk7IH0KKworICAgIC8v
IEZJWE1FOiBDb252ZXJ0IHRvIHVzZSBXS1N0cmluZ1JlZgorICAgIHZvaWQgc2V0VGhlbWVQYXRo
KGNvbnN0IGNoYXIqIHRoZW1lKQorICAgIHsKKyAgICAgICAgbV93ZWJQYWdlUHJveHktPnNldFRo
ZW1lUGF0aCh0aGVtZSk7CisgICAgfQorCisgICAgdm9pZCBzdXNwZW5kQWN0aXZlRE9NT2JqZWN0
c0FuZEFuaW1hdGlvbnMoKQorICAgIHsKKyAgICAgICAgbV93ZWJQYWdlUHJveHktPnN1c3BlbmRB
Y3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworICAgIH0KKworICAgIHZvaWQgcmVzdW1l
QWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKQorICAgIHsKKyAgICAgICAgbV93ZWJQYWdl
UHJveHktPnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7CisgICAgfQorCisg
ICAgLy8gRklYTUU6IFJlbW92ZSB3aGVuIHBvc3NpYmxlLgorICAgIEV2YXNfT2JqZWN0KiBldmFz
T2JqZWN0KCkgeyByZXR1cm4gbV9ldmFzT2JqZWN0OyB9CisKKyAgICBXZWJQYWdlUHJveHkqIHBh
Z2UoKSB7IHJldHVybiBtX3dlYlBhZ2VQcm94eS5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIFdU
Rjo6UmVmUHRyPFdlYlBhZ2VQcm94eT4gbV93ZWJQYWdlUHJveHk7CisgICAgRXZhc19PYmplY3Qq
IG1fZXZhc09iamVjdDsKK307CisKK30KKwogY2xhc3MgRXdrVmlld0ltcGwgewogcHVibGljOgog
CkBAIC0xMDMsMTQgKzE1MywxNSBAQCBwdWJsaWM6CiAgICAgICAgIExlZ2FjeUJlaGF2aW9yLAog
ICAgICAgICBEZWZhdWx0QmVoYXZpb3IKICAgICB9OwotICAgIEV3a1ZpZXdJbXBsKEV2YXNfT2Jq
ZWN0KiB2aWV3LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFBhc3NSZWZQdHI8V2Vi
S2l0OjpXZWJQYWdlR3JvdXA+IHBhZ2VHcm91cCwgVmlld0JlaGF2aW9yKTsKKyAgICBFd2tWaWV3
SW1wbChFdmFzX09iamVjdCogdmlldywgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBX
ZWJLaXQ6OldlYlBhZ2VHcm91cCogcGFnZUdyb3VwLCBWaWV3QmVoYXZpb3IpOwogICAgIH5Fd2tW
aWV3SW1wbCgpOwogCiAgICAgc3RhdGljIEV3a1ZpZXdJbXBsKiBmcm9tRXZhc09iamVjdChjb25z
dCBFdmFzX09iamVjdCogdmlldyk7CiAgICAgRXZhc19PYmplY3QqIHZpZXcoKSB7IHJldHVybiBt
X3ZpZXc7IH0KKyAgICBXZWJLaXQ6OldlYlZpZXcqIHdlYlZpZXcoKSB7IHJldHVybiBtX3dlYlZp
ZXcuZ2V0KCk7IH0KIAotICAgIFdLUGFnZVJlZiB3a1BhZ2UoKTsKLSAgICBXZWJLaXQ6OldlYlBh
Z2VQcm94eSogcGFnZSgpIHsgcmV0dXJuIG1fcGFnZVByb3h5LmdldCgpOyB9CisgICAgV0tQYWdl
UmVmIHdrUGFnZSgpIGNvbnN0OworICAgIFdlYktpdDo6V2ViUGFnZVByb3h5KiBwYWdlKCkgeyBy
ZXR1cm4gbV93ZWJWaWV3LT5wYWdlKCk7IH0KICAgICBFd2tDb250ZXh0KiBld2tDb250ZXh0KCkg
eyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CiAgICAgRXdrU2V0dGluZ3MqIHNldHRpbmdzKCkg
eyByZXR1cm4gbV9zZXR0aW5ncy5nZXQoKTsgfQogICAgIEV3a0JhY2tGb3J3YXJkTGlzdCogYmFj
a0ZvcndhcmRMaXN0KCkgeyByZXR1cm4gbV9iYWNrRm9yd2FyZExpc3QuZ2V0KCk7IH0KQEAgLTI0
NSw3ICsyOTYsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9wZW5kaW5nU3VyZmFjZVJlc2l6ZTsK
ICNlbmRpZgogICAgIE93blB0cjxXZWJLaXQ6OlBhZ2VDbGllbnRCYXNlPiBtX3BhZ2VDbGllbnQ7
Ci0gICAgUmVmUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5PiBtX3BhZ2VQcm94eTsKKyAgICBPd25Q
dHI8V2ViS2l0OjpXZWJWaWV3PiBtX3dlYlZpZXc7CiAgICAgT3duUHRyPFdlYktpdDo6UGFnZUxv
YWRDbGllbnRFZmw+IG1fcGFnZUxvYWRDbGllbnQ7CiAgICAgT3duUHRyPFdlYktpdDo6UGFnZVBv
bGljeUNsaWVudEVmbD4gbV9wYWdlUG9saWN5Q2xpZW50OwogICAgIE93blB0cjxXZWJLaXQ6OlBh
Z2VVSUNsaWVudEVmbD4gbV9wYWdlVUlDbGllbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKaW5kZXggNGJiZTRlNy4uZDIwY2FhNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcApAQCAtNTA1LDcgKzUw
NSw3IEBAIHN0YXRpYyBpbmxpbmUgRXZhc19TbWFydCogY3JlYXRlRXdrVmlld1NtYXJ0Q2xhc3Mo
dm9pZCkKICAgICByZXR1cm4gc21hcnQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRXZhc19PYmplY3Qq
IGNyZWF0ZUV3a1ZpZXcoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgUGFzc1JlZlB0
cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYgPSAwLCBF
d2tWaWV3SW1wbDo6Vmlld0JlaGF2aW9yIGJlaGF2aW9yID0gRXdrVmlld0ltcGw6OkRlZmF1bHRC
ZWhhdmlvcikKK3N0YXRpYyBpbmxpbmUgRXdrVmlld0ltcGwqIGNyZWF0ZUV3a1ZpZXcoRXZhcyog
Y2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0
LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYgPSAwLCBFd2tWaWV3SW1wbDo6Vmlld0JlaGF2
aW9yIGJlaGF2aW9yID0gRXdrVmlld0ltcGw6OkRlZmF1bHRCZWhhdmlvcikKIHsKICAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY2FudmFzLCAwKTsKICAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoc21hcnQsIDApOwpAQCAtNTI1LDIxICs1MjUsMjEgQEAgc3RhdGlj
IGlubGluZSBFdmFzX09iamVjdCogY3JlYXRlRXdrVmlldyhFdmFzKiBjYW52YXMsIEV2YXNfU21h
cnQqIHNtYXJ0LCBQYXNzUmUKICAgICAvLyBEZWZhdWx0IFdlYlBhZ2VHcm91cCBpcyBjcmVhdGVk
IGluIFdlYkNvbnRleHQgY29uc3RydWN0b3IgaWYgdGhlIHBhZ2VHcm91cFJlZiBpcyAwLAogICAg
IC8vIHNvIHdlIGRvIG5vdCBuZWVkIHRvIGNyZWF0ZSBpdCBoZXJlLgogICAgIHNtYXJ0RGF0YS0+
cHJpdiA9IG5ldyBFd2tWaWV3SW1wbChld2tWaWV3LCBjb250ZXh0LCB0b0ltcGwocGFnZUdyb3Vw
UmVmKSwgYmVoYXZpb3IpOwotICAgIHJldHVybiBld2tWaWV3OworICAgIHJldHVybiBzbWFydERh
dGEtPnByaXY7CiB9CiAKIC8qKgogICogQGludGVybmFsCiAgKiBDb25zdHJ1Y3RzIGEgZXdrX3Zp
ZXcgRXZhc19PYmplY3Qgd2l0aCBXS1R5cGUgcGFyYW1ldGVycy4KICAqLwotRXZhc19PYmplY3Qq
IGV3a192aWV3X2Jhc2VfYWRkKEV2YXMqIGNhbnZhcywgV0tDb250ZXh0UmVmIGNvbnRleHRSZWYs
IFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwgRXdrVmlld0ltcGw6OlZpZXdCZWhhdmlvciBi
ZWhhdmlvcikKK0V3a1ZpZXdJbXBsKiBld2tfdmlld19iYXNlX2FkZChFdmFzKiBjYW52YXMsIFdL
Q29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIEV3a1Zp
ZXdJbXBsOjpWaWV3QmVoYXZpb3IgYmVoYXZpb3IpCiB7CiAgICAgcmV0dXJuIGNyZWF0ZUV3a1Zp
ZXcoY2FudmFzLCBjcmVhdGVFd2tWaWV3U21hcnRDbGFzcygpLCBjb250ZXh0UmVmID8gRXdrQ29u
dGV4dDo6Y3JlYXRlKHRvSW1wbChjb250ZXh0UmVmKSkgOiBFd2tDb250ZXh0OjpkZWZhdWx0Q29u
dGV4dCgpLCBwYWdlR3JvdXBSZWYsIGJlaGF2aW9yKTsKIH0KIAogRXZhc19PYmplY3QqIGV3a192
aWV3X3NtYXJ0X2FkZChFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBFd2tfQ29udGV4
dCogY29udGV4dCkKIHsKLSAgICByZXR1cm4gY3JlYXRlRXdrVmlldyhjYW52YXMsIHNtYXJ0LCBl
d2tfb2JqZWN0X2Nhc3Q8RXdrQ29udGV4dCo+KGNvbnRleHQpKTsKKyAgICByZXR1cm4gY3JlYXRl
RXdrVmlldyhjYW52YXMsIHNtYXJ0LCBld2tfb2JqZWN0X2Nhc3Q8RXdrQ29udGV4dCo+KGNvbnRl
eHQpKS0+dmlldygpOwogfQogCiBFdmFzX09iamVjdCogZXdrX3ZpZXdfYWRkX3dpdGhfY29udGV4
dChFdmFzKiBjYW52YXMsIEV3a19Db250ZXh0KiBjb250ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oCmluZGV4IDlhNTFlZjIu
LmZlZmUyNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a192aWV3X3ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfdmlld19wcml2YXRlLmgKQEAgLTI1LDYgKzI1LDYgQEAKICNpbmNsdWRlIDxFdmFzLmg+CiAj
aW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KIAotRXZhc19PYmplY3QqIGV3a192aWV3X2Jhc2Vf
YWRkKEV2YXMqIGNhbnZhcywgV0tDb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiwgRXdrVmlld0lt
cGw6OlZpZXdCZWhhdmlvcik7CitFd2tWaWV3SW1wbCogZXdrX3ZpZXdfYmFzZV9hZGQoRXZhcyog
Y2FudmFzLCBXS0NvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmLCBFd2tWaWV3SW1wbDo6Vmlld0Jl
aGF2aW9yKTsKIAogI2VuZGlmIC8vIGV3a192aWV3X3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkluc3BlY3RvclByb3h5RWZsLmNwcAppbmRleCBm
OTgxODY5Li5hMjg3NjllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZs
L1dlYkluc3BlY3RvclByb3h5RWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
ZWZsL1dlYkluc3BlY3RvclByb3h5RWZsLmNwcApAQCAtOTgsNyArOTgsNyBAQCBXZWJQYWdlUHJv
eHkqIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUluc3BlY3RvclBhZ2UoKQogICAg
IGlmICghbV9pbnNwZWN0b3JXaW5kb3cpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgbV9pbnNw
ZWN0b3JWaWV3ID0gZXdrX3ZpZXdfYmFzZV9hZGQoZWNvcmVfZXZhc19nZXQobV9pbnNwZWN0b3JX
aW5kb3cpLCB0b0FQSShwYWdlKCktPnByb2Nlc3MoKS0+Y29udGV4dCgpKSwgdG9BUEkoaW5zcGVj
dG9yUGFnZUdyb3VwKCkpLCBFd2tWaWV3SW1wbDo6TGVnYWN5QmVoYXZpb3IpOworICAgIG1faW5z
cGVjdG9yVmlldyA9IGV3a192aWV3X2Jhc2VfYWRkKGVjb3JlX2V2YXNfZ2V0KG1faW5zcGVjdG9y
V2luZG93KSwgdG9BUEkocGFnZSgpLT5wcm9jZXNzKCktPmNvbnRleHQoKSksIHRvQVBJKGluc3Bl
Y3RvclBhZ2VHcm91cCgpKSwgRXdrVmlld0ltcGw6OkxlZ2FjeUJlaGF2aW9yKS0+dmlldygpOwog
ICAgIEV3a1ZpZXdJbXBsKiBpbnNwZWN0b3JWaWV3SW1wbCA9IEV3a1ZpZXdJbXBsOjpmcm9tRXZh
c09iamVjdChtX2luc3BlY3RvclZpZXcpOwogICAgIGluc3BlY3RvclZpZXdJbXBsLT5zZXRUaGVt
ZVBhdGgoVEVTVF9USEVNRV9ESVIgIi9kZWZhdWx0LmVkaiIpOwogCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2ViVmlldy5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9Q
bGF0Zm9ybVdlYlZpZXcuaAppbmRleCA1YWQxZWVkLi5kY2FmNDQ4IDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2ViVmlldy5oCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvUGxhdGZvcm1XZWJWaWV3LmgKQEAgLTQ3LDEzICs0Nyw4IEBAIHR5cGVkZWYgSFdORCBQbGF0
Zm9ybVdpbmRvdzsKIHR5cGVkZWYgV0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlwZWRlZiBH
dGtXaWRnZXQgKlBsYXRmb3JtV2luZG93OwogI2VsaWYgUExBVEZPUk0oRUZMKQotI2lmIFVTRShF
TykKLXR5cGVkZWYgc3RydWN0IF9FbyBFdmFzX09iamVjdDsKLSNlbHNlCi10eXBlZGVmIHN0cnVj
dCBfRXZhc19PYmplY3QgRXZhc19PYmplY3Q7Ci0jZW5kaWYKIHR5cGVkZWYgc3RydWN0IF9FY29y
ZV9FdmFzIEVjb3JlX0V2YXM7Ci10eXBlZGVmIEV2YXNfT2JqZWN0KiBQbGF0Zm9ybVdLVmlldzsK
K3R5cGVkZWYgV0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlwZWRlZiBFY29yZV9FdmFzKiBQ
bGF0Zm9ybVdpbmRvdzsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L2VmbC9QbGF0Zm9ybVdlYlZpZXcuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwvUGxhdGZv
cm1XZWJWaWV3LmNwcAppbmRleCBkNTQ0OWViLi5iODJhNzA3IDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL2VmbC9QbGF0Zm9ybVdlYlZpZXcuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvZWZsL1BsYXRmb3JtV2ViVmlldy5jcHAKQEAgLTY1LDMzICs2NSwzMyBAQCBQbGF0Zm9y
bVdlYlZpZXc6OlBsYXRmb3JtV2ViVmlldyhXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdl
R3JvdXBSZWYgcGFnZUdybwogewogICAgIG1fd2luZG93ID0gaW5pdEVjb3JlRXZhcygpOwogICAg
IEV2YXMqIGV2YXMgPSBlY29yZV9ldmFzX2dldChtX3dpbmRvdyk7Ci0gICAgbV92aWV3ID0gdG9J
bXBsKFdLVmlld0NyZWF0ZShldmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYpKTsKLSAgICBl
d2tfdmlld190aGVtZV9zZXQobV92aWV3LCBUSEVNRV9ESVIiL2RlZmF1bHQuZWRqIik7Ci0gICAg
ZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKG1fdmlldywgIndlYnByb2Nlc3MsY3Jhc2hl
ZCIsIG9uV2ViUHJvY2Vzc0NyYXNoZWQsIDApOworICAgIG1fdmlldyA9IFdLVmlld0NyZWF0ZShl
dmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYpOworICAgIGV3a192aWV3X3RoZW1lX3NldChX
S1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIFRIRU1FX0RJUiIvZGVmYXVsdC5lZGoiKTsKKyAg
ICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQoV0tWaWV3R2V0RXZhc09iamVjdChtX3Zp
ZXcpLCAid2VicHJvY2VzcyxjcmFzaGVkIiwgb25XZWJQcm9jZXNzQ3Jhc2hlZCwgMCk7CiAgICAg
cmVzaXplVG8oNjAwLCA4MDApOwogfQogCiBQbGF0Zm9ybVdlYlZpZXc6On5QbGF0Zm9ybVdlYlZp
ZXcoKQogewotICAgIGV2YXNfb2JqZWN0X2RlbChtX3ZpZXcpOworICAgIGV2YXNfb2JqZWN0X2Rl
bChXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldykpOwogICAgIGVjb3JlX2V2YXNfZnJlZShtX3dp
bmRvdyk7CiAgICAgZWNvcmVfZXZhc19zaHV0ZG93bigpOwogfQogCiB2b2lkIFBsYXRmb3JtV2Vi
Vmlldzo6cmVzaXplVG8odW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKIHsKLSAgICBl
dmFzX29iamVjdF9yZXNpemUobV92aWV3LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBldmFzX29iamVj
dF9yZXNpemUoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCB3aWR0aCwgaGVpZ2h0KTsKIH0K
IAogV0tQYWdlUmVmIFBsYXRmb3JtV2ViVmlldzo6cGFnZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IFdLVmlld0dldFBhZ2UodG9BUEkobV92aWV3KSk7CisgICAgcmV0dXJuIFdLVmlld0dldFBhZ2Uo
bV92aWV3KTsKIH0KIAogdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnNpbXVsYXRlU3BhY2ViYXJLZXlQ
cmVzcygpCiB7CiAgICAgRXZhcyogZXZhcyA9IGVjb3JlX2V2YXNfZ2V0KG1fd2luZG93KTsKLSAg
ICBldmFzX29iamVjdF9mb2N1c19zZXQobV92aWV3LCB0cnVlKTsKKyAgICBldmFzX29iamVjdF9m
b2N1c19zZXQoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCB0cnVlKTsKICAgICBldmFzX2V2
ZW50X2ZlZWRfa2V5X2Rvd24oZXZhcywgInNwYWNlIiwgInNwYWNlIiwgIiAiLCAwLCAwLCAwKTsK
ICAgICBldmFzX2V2ZW50X2ZlZWRfa2V5X3VwKGV2YXMsICJzcGFjZSIsICJzcGFjZSIsICIgIiwg
MCwgMSwgMCk7CiB9CkBAIC05OSwxNCArOTksMTQgQEAgdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnNp
bXVsYXRlU3BhY2ViYXJLZXlQcmVzcygpCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6c2ltdWxhdGVN
b3VzZU1vdmUodW5zaWduZWQgeCwgdW5zaWduZWQgeSkKIHsKICAgICBFdmFzKiBldmFzID0gZWNv
cmVfZXZhc19nZXQobV93aW5kb3cpOwotICAgIGV2YXNfb2JqZWN0X3Nob3cobV92aWV3KTsKKyAg
ICBldmFzX29iamVjdF9zaG93KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSk7CiAgICAgZXZh
c19ldmVudF9mZWVkX21vdXNlX21vdmUoZXZhcywgeCwgeSwgMCwgMCk7CiB9CiAKIHZvaWQgUGxh
dGZvcm1XZWJWaWV3OjpzaW11bGF0ZVJpZ2h0Q2xpY2sodW5zaWduZWQgeCwgdW5zaWduZWQgeSkK
IHsKICAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwotICAgIGV2YXNf
b2JqZWN0X3Nob3cobV92aWV3KTsKKyAgICBldmFzX29iamVjdF9zaG93KFdLVmlld0dldEV2YXNP
YmplY3QobV92aWV3KSk7CiAgICAgZXZhc19ldmVudF9mZWVkX21vdXNlX21vdmUoZXZhcywgeCwg
eSwgMCwgMCk7CiAgICAgZXZhc19ldmVudF9mZWVkX21vdXNlX2Rvd24oZXZhcywgMywgRVZBU19C
VVRUT05fTk9ORSwgMCwgMCk7CiAgICAgZXZhc19ldmVudF9mZWVkX21vdXNlX3VwKGV2YXMsIDMs
IEVWQVNfQlVUVE9OX05PTkUsIDAsIDApOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9QbGF0Zm9ybVdlYlZpZXcuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1X
ZWJWaWV3LmgKaW5kZXggOGY5ZGNkYi4uNTFjNGJjYyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L1BsYXRmb3JtV2ViVmlldy5oCkBAIC01NCwxMyArNTQsOCBAQCB0eXBlZGVmIHN0cnVjdCBfR3Rr
V2lkZ2V0IEd0a1dpZGdldDsKIHR5cGVkZWYgV0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlw
ZWRlZiBHdGtXaWRnZXQqIFBsYXRmb3JtV2luZG93OwogI2VsaWYgUExBVEZPUk0oRUZMKQotI2lm
IFVTRShFTykKLXR5cGVkZWYgc3RydWN0IF9FbyBFdmFzX09iamVjdDsKLSNlbHNlCi10eXBlZGVm
IHN0cnVjdCBfRXZhc19PYmplY3QgRXZhc19PYmplY3Q7Ci0jZW5kaWYKIHR5cGVkZWYgc3RydWN0
IF9FY29yZV9FdmFzIEVjb3JlX0V2YXM7Ci10eXBlZGVmIEV2YXNfT2JqZWN0KiBQbGF0Zm9ybVdL
VmlldzsKK3R5cGVkZWYgV0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlwZWRlZiBFY29yZV9F
dmFzKiBQbGF0Zm9ybVdpbmRvdzsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL2VmbC9FdmVudFNlbmRlclByb3h5RWZsLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwCmluZGV4IGYyODI5YTkuLjEzOTIwZWMg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlF
ZmwuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlF
ZmwuY3BwCkBAIC00MzgsNyArNDM4LDcgQEAgdm9pZCBFdmVudFNlbmRlclByb3h5OjpzZW5kVG91
Y2hFdmVudChFd2tfVG91Y2hfRXZlbnRfVHlwZSBldmVudFR5cGUpCiB7CiAgICAgQVNTRVJUKG1f
dG91Y2hQb2ludHMpOwogCi0gICAgRXZhc19PYmplY3QqIGV3a1ZpZXcgPSBtX3Rlc3RDb250cm9s
bGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKTsKKyAgICBFdmFzX09iamVjdCogZXdr
VmlldyA9IFdLVmlld0dldEV2YXNPYmplY3QobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXco
KS0+cGxhdGZvcm1WaWV3KCkpOwogICAgIGV3a192aWV3X2ZlZWRfdG91Y2hfZXZlbnQoZXdrVmll
dywgZXZlbnRUeXBlLCBtX3RvdWNoUG9pbnRzLCBldmFzX2tleV9tb2RpZmllcl9nZXQoZXZhc19v
YmplY3RfZXZhc19nZXQoZXdrVmlldykpKTsKIAogICAgIEVpbmFfTGlzdCogbGlzdDsKQEAgLTQ5
MCwxMiArNDkwLDE0IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6dXBkYXRlVG91Y2hQb2ludChp
bnQgaW5kZXgsIGludCB4LCBpbnQgeSkKIAogdm9pZCBFdmVudFNlbmRlclByb3h5OjpzZXRUb3Vj
aE1vZGlmaWVyKFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXIsIGJvb2wgZW5hYmxlKQogeworICAg
IEV2YXNfT2JqZWN0KiBld2tWaWV3ID0gV0tWaWV3R2V0RXZhc09iamVjdChtX3Rlc3RDb250cm9s
bGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKSk7CisKICAgICBmb3IgKHVuc2lnbmVk
IGluZGV4ID0gMDsgaW5kZXggPCAoc2l6ZW9mKG1vZGlmaWVyTmFtZXMpIC8gc2l6ZW9mKGNoYXIq
KSk7ICsraW5kZXgpIHsKICAgICAgICAgaWYgKG1vZGlmaWVyICYgKDEgPDwgaW5kZXgpKSB7CiAg
ICAgICAgICAgICBpZiAoZW5hYmxlKQotICAgICAgICAgICAgICAgIGV2YXNfa2V5X21vZGlmaWVy
X29uKGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCkt
PnBsYXRmb3JtVmlldygpKSwgbW9kaWZpZXJOYW1lc1tpbmRleF0pOworICAgICAgICAgICAgICAg
IGV2YXNfa2V5X21vZGlmaWVyX29uKGV2YXNfb2JqZWN0X2V2YXNfZ2V0KGV3a1ZpZXcpLCBtb2Rp
Zmllck5hbWVzW2luZGV4XSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZXZh
c19rZXlfbW9kaWZpZXJfb2ZmKGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXIt
Pm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpKSwgbW9kaWZpZXJOYW1lc1tpbmRleF0pOwor
ICAgICAgICAgICAgICAgIGV2YXNfa2V5X21vZGlmaWVyX29mZihldmFzX29iamVjdF9ldmFzX2dl
dChld2tWaWV3KSwgbW9kaWZpZXJOYW1lc1tpbmRleF0pOwogICAgICAgICB9CiAgICAgfQogfQpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZs
LmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5jcHAK
aW5kZXggMWNjYzBiZC4uYjhhMzNlZCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L2VmbC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3BwCkBAIC02MSw1NiArNjEsNTMgQEAgUGxhdGZvcm1X
ZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLUGFnZUdyb3Vw
UmVmIHBhZ2VHcm91cCwKICAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cp
OwogCiAgICAgaWYgKG1fdXNpbmdGaXhlZExheW91dCkgewotICAgICAgICBtX3ZpZXcgPSB0b0lt
cGwoV0tWaWV3Q3JlYXRlV2l0aEZpeGVkTGF5b3V0KGV2YXMsIGNvbnRleHQsIHBhZ2VHcm91cCkp
OwotICAgICAgICBldmFzX29iamVjdF9yZXNpemUobV92aWV3LCA4MDAsIDYwMCk7CisgICAgICAg
IG1fdmlldyA9IFdLVmlld0NyZWF0ZVdpdGhGaXhlZExheW91dChldmFzLCBjb250ZXh0LCBwYWdl
R3JvdXApOworICAgICAgICBldmFzX29iamVjdF9yZXNpemUoV0tWaWV3R2V0RXZhc09iamVjdCht
X3ZpZXcpLCA4MDAsIDYwMCk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1fdmlldyA9IHRvSW1wbChX
S1ZpZXdDcmVhdGUoZXZhcywgY29udGV4dCwgcGFnZUdyb3VwKSk7CisgICAgICAgIG1fdmlldyA9
IFdLVmlld0NyZWF0ZShldmFzLCBjb250ZXh0LCBwYWdlR3JvdXApOwogCi0gICAgZXdrX3ZpZXdf
dGhlbWVfc2V0KG1fdmlldywgVEhFTUVfRElSIi9kZWZhdWx0LmVkaiIpOworICAgIGV3a192aWV3
X3RoZW1lX3NldChXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIFRIRU1FX0RJUiIvZGVmYXVs
dC5lZGoiKTsKICAgICBtX3dpbmRvd0lzS2V5ID0gZmFsc2U7Ci0gICAgZXZhc19vYmplY3Rfc2hv
dyhtX3ZpZXcpOworICAgIGV2YXNfb2JqZWN0X3Nob3coV0tWaWV3R2V0RXZhc09iamVjdChtX3Zp
ZXcpKTsKIH0KIAogUGxhdGZvcm1XZWJWaWV3Ojp+UGxhdGZvcm1XZWJWaWV3KCkKIHsKLSAgICBl
dmFzX29iamVjdF9kZWwobV92aWV3KTsKKyAgICBldmFzX29iamVjdF9kZWwoV0tWaWV3R2V0RXZh
c09iamVjdChtX3ZpZXcpKTsKICAgICBlY29yZV9ldmFzX2ZyZWUobV93aW5kb3cpOwogfQogCiB2
b2lkIFBsYXRmb3JtV2ViVmlldzo6cmVzaXplVG8odW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhl
aWdodCkKIHsKLSAgICBldmFzX29iamVjdF9yZXNpemUobV92aWV3LCB3aWR0aCwgaGVpZ2h0KTsK
KyAgICBldmFzX29iamVjdF9yZXNpemUoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCB3aWR0
aCwgaGVpZ2h0KTsKIH0KIAogV0tQYWdlUmVmIFBsYXRmb3JtV2ViVmlldzo6cGFnZSgpCiB7Ci0g
ICAgcmV0dXJuIFdLVmlld0dldFBhZ2UodG9BUEkobV92aWV3KSk7CisgICAgcmV0dXJuIFdLVmll
d0dldFBhZ2UobV92aWV3KTsKIH0KIAogdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OmZvY3VzKCkKIHsK
KyAgICBFdmFzX09iamVjdCogZXZhc09iamVjdCA9IFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3
KTsKICAgICAvLyBJbiBhIGZldyBjYXNlcywgYW4gaWZyYW1lIG1pZ2h0IHJlY2VpdmUgZm9jdXMg
ZnJvbSBKYXZhU2NyaXB0IGFuZCBFdmFzIGlzIG5vdCBhd2FyZSBvZiBpdCBhdCBhbGwKICAgICAv
LyAoV2ViQ29yZVN1cHBvcnQ6OmZvY3VzZWRGcmFtZUNoYW5nZWQoKSBkb2VzIG5vdCBlbWl0IGFu
eSBub3RpZmljYXRpb24pLiBXZSB0aGVuIG1hbnVhbGx5IHJlbW92ZSB0aGUKICAgICAvLyBmb2N1
cyBmcm9tIHRoZSB2aWV3IHRvIG1ha2UgdGhlIGNhbGwgZ2l2ZSBmb2N1cyB0byBldmFzX29iamVj
dF9mb2N1c19zZXQoLi4uLCB0cnVlKSB0byBiZSBlZmZlY3RmdWwuCi0gICAgaWYgKFdLUGFnZUdl
dEZvY3VzZWRGcmFtZShwYWdlKCkpICE9IFdLUGFnZUdldE1haW5GcmFtZShwYWdlKCkpKQotICAg
ICAgICBldmFzX29iamVjdF9mb2N1c19zZXQobV92aWV3LCBmYWxzZSk7Ci0gICAgZXZhc19vYmpl
Y3RfZm9jdXNfc2V0KG1fdmlldywgdHJ1ZSk7CisgICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KFdL
Vmlld0dldEV2YXNPYmplY3QobV92aWV3KSwgV0tQYWdlR2V0Rm9jdXNlZEZyYW1lKHBhZ2UoKSkg
PT0gV0tQYWdlR2V0TWFpbkZyYW1lKHBhZ2UoKSkpOwogfQogCiBXS1JlY3QgUGxhdGZvcm1XZWJW
aWV3Ojp3aW5kb3dGcmFtZSgpCiB7CiAgICAgaW50IHgsIHksIHdpZHRoLCBoZWlnaHQ7CiAKLSAg
ICBFY29yZV9FdmFzKiBlZSA9IGVjb3JlX2V2YXNfZWNvcmVfZXZhc19nZXQoZXZhc19vYmplY3Rf
ZXZhc19nZXQobV92aWV3KSk7Ci0gICAgZWNvcmVfZXZhc19yZXF1ZXN0X2dlb21ldHJ5X2dldChl
ZSwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQpOworICAgIGVjb3JlX2V2YXNfcmVxdWVzdF9nZW9t
ZXRyeV9nZXQobV93aW5kb3csICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0KTsKIAogICAgIHJldHVy
biBXS1JlY3RNYWtlKHgsIHksIHdpZHRoLCBoZWlnaHQpOwogfQogCiB2b2lkIFBsYXRmb3JtV2Vi
Vmlldzo6c2V0V2luZG93RnJhbWUoV0tSZWN0IGZyYW1lKQogewotICAgIEVjb3JlX0V2YXMqIGVl
ID0gZWNvcmVfZXZhc19lY29yZV9ldmFzX2dldChldmFzX29iamVjdF9ldmFzX2dldChtX3ZpZXcp
KTsKLSAgICBlY29yZV9ldmFzX21vdmVfcmVzaXplKGVlLCBmcmFtZS5vcmlnaW4ueCwgZnJhbWUu
b3JpZ2luLnksIGZyYW1lLnNpemUud2lkdGgsIGZyYW1lLnNpemUuaGVpZ2h0KTsKKyAgICBlY29y
ZV9ldmFzX21vdmVfcmVzaXplKG1fd2luZG93LCBmcmFtZS5vcmlnaW4ueCwgZnJhbWUub3JpZ2lu
LnksIGZyYW1lLnNpemUud2lkdGgsIGZyYW1lLnNpemUuaGVpZ2h0KTsKIH0KIAogdm9pZCBQbGF0
Zm9ybVdlYlZpZXc6OmFkZENocm9tZUlucHV0RmllbGQoKQpAQCAtMTI3LDE1ICsxMjQsMTIgQEAg
dm9pZCBQbGF0Zm9ybVdlYlZpZXc6Om1ha2VXZWJWaWV3Rmlyc3RSZXNwb25kZXIoKQogCiBXS1Jl
dGFpblB0cjxXS0ltYWdlUmVmPiBQbGF0Zm9ybVdlYlZpZXc6OndpbmRvd1NuYXBzaG90SW1hZ2Uo
KQogewotICAgIEVjb3JlX0V2YXMqIGVlID0gZWNvcmVfZXZhc19lY29yZV9ldmFzX2dldChldmFz
X29iamVjdF9ldmFzX2dldChtX3ZpZXcpKTsKLSAgICBBU1NFUlQoZWUpOwotCiAgICAgaW50IHdp
ZHRoOwogICAgIGludCBoZWlnaHQ7Ci0gICAgZWNvcmVfZXZhc19nZW9tZXRyeV9nZXQoZWUsIDAs
IDAsICZ3aWR0aCwgJmhlaWdodCk7CisgICAgZWNvcmVfZXZhc19nZW9tZXRyeV9nZXQobV93aW5k
b3csIDAsIDAsICZ3aWR0aCwgJmhlaWdodCk7CiAgICAgQVNTRVJUKHdpZHRoID4gMCAmJiBoZWln
aHQgPiAwKTsKIAotICAgIHJldHVybiBhZG9wdFdLKFdLVmlld0NyZWF0ZVNuYXBzaG90KHRvQVBJ
KG1fdmlldykpKTsKKyAgICByZXR1cm4gYWRvcHRXSyhXS1ZpZXdDcmVhdGVTbmFwc2hvdChtX3Zp
ZXcpKTsKIH0KIAogYm9vbCBQbGF0Zm9ybVdlYlZpZXc6OnZpZXdTdXBwb3J0c09wdGlvbnMoV0tE
aWN0aW9uYXJ5UmVmIG9wdGlvbnMpIGNvbnN0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184737</attachid>
            <date>2013-01-25 06:18:11 -0800</date>
            <delta_ts>2013-01-25 08:36:53 -0800</delta_ts>
            <desc>Patch (work in progress)</desc>
            <filename>0001-WIP.patch</filename>
            <type>text/plain</type>
            <size>29679</size>
            <attacher name="Kenneth Rohde Christiansen">kenneth</attacher>
            
              <data encoding="base64">RnJvbSBlYmJiMzJiNDVmNmVmMjE1YzhlNTRlY2ExMTNiZjM3NDM5N2MwOGVjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiA8a2VubmV0aEB3
ZWJraXQub3JnPgpEYXRlOiBGcmksIDI1IEphbiAyMDEzIDExOjUzOjQ2ICswMTAwClN1YmplY3Q6
IFtQQVRDSF0gV0lQCgotLS0KIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tB
UElDYXN0RWZsLmggIHwgICAxMCArLQogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2Vm
bC9XS1ZpZXcuY3BwICAgICAgfCAgIDM2ICsrKystLQogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9DL2VmbC9XS1ZpZXcuaCAgICAgICAgfCAgIDE1ICsrLQogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAgICAgICAgfCAgMTIxICsrKysrKysrKysrKy0tLS0t
LS0tCiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmggICAgICAgICB8
ICAgNDEgKysrKysrLQogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcu
Y3BwICAgICAgfCAgICA5ICstCiAuLi4vV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmll
d19wcml2YXRlLmggICB8ICAgIDIgKy0KIC4uLi9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5z
cGVjdG9yUHJveHlFZmwuY3BwIHwgICAxMSArLQogVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9y
bVdlYlZpZXcuaCAgICAgICAgICAgICAgfCAgICA3ICstCiBUb29scy9UZXN0V2ViS2l0QVBJL2Vm
bC9QbGF0Zm9ybVdlYlZpZXcuY3BwICAgICAgICB8ICAgMTggKy0tCiBUb29scy9XZWJLaXRUZXN0
UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oICAgICAgICAgICB8ICAgIDcgKy0KIFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwIHwgICAgOCArLQogVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNwcCAgfCAgIDM0ICsrKy0t
LQogMTMgZmlsZXMgY2hhbmdlZCwgMTk5IGluc2VydGlvbnMoKyksIDEyMCBkZWxldGlvbnMoLSkK
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLQVBJQ2Fz
dEVmbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS0FQSUNhc3RFZmwu
aAppbmRleCBiMDEzYTBhLi4xODg5ZmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvZWZsL1dLQVBJQ2FzdEVmbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQy9lZmwvV0tBUElDYXN0RWZsLmgKQEAgLTI0LDE1ICsyNCwxMSBAQAogI2Vycm9y
ICJQbGVhc2UgI2luY2x1ZGUgXCJXS0FQSUNhc3QuaFwiIGluc3RlYWQgb2YgdGhpcyBmaWxlIGRp
cmVjdGx5LiIKICNlbmRpZgogCi0jaWYgVVNFKEVPKQotdHlwZWRlZiBzdHJ1Y3QgX0VvIEV2YXNf
T2JqZWN0OwotI2Vsc2UKLXR5cGVkZWYgc3RydWN0IF9FdmFzX09iamVjdCBFdmFzX09iamVjdDsK
LSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotV0tfQUREX0FQSV9NQVBQSU5HKFdLVmll
d1JlZiwgRXZhc19PYmplY3QpCitjbGFzcyBXZWJWaWV3OworCitXS19BRERfQVBJX01BUFBJTkco
V0tWaWV3UmVmLCBXZWJWaWV3KQogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9lZmwvV0tWaWV3LmNwcAppbmRleCAzMmI5ZDhmLi44MTY3Y2MyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwCkBAIC0yOSwyNCArMjksNDYg
QEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogV0tWaWV3UmVmIFdLVmlld0NyZWF0ZShFdmFz
KiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3Jv
dXBSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKGV3a192aWV3X2Jhc2VfYWRkKGNhbnZhcywgY29u
dGV4dFJlZiwgcGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlvcikpOworICAgIHJl
dHVybiBld2tfdmlld19iYXNlX2FkZChjYW52YXMsIGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZiwg
RXdrVmlldzo6TGVnYWN5QmVoYXZpb3IpLT53a1ZpZXcoKTsKIH0KIAogV0tWaWV3UmVmIFdLVmll
d0NyZWF0ZVdpdGhGaXhlZExheW91dChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0
UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKGV3
a192aWV3X2Jhc2VfYWRkKGNhbnZhcywgY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmLCBFd2tWaWV3
OjpEZWZhdWx0QmVoYXZpb3IpKTsKKyAgICByZXR1cm4gZXdrX3ZpZXdfYmFzZV9hZGQoY2FudmFz
LCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OkRlZmF1bHRCZWhhdmlvciktPndr
VmlldygpOworfQorCit2b2lkIFdLVmlld0luaXRpYWxpemUoV0tWaWV3UmVmIHZpZXdSZWYpCit7
CisgICAgdG9JbXBsKHZpZXdSZWYpLT5pbml0aWFsaXplKCk7CiB9CiAKIFdLUGFnZVJlZiBXS1Zp
ZXdHZXRQYWdlKFdLVmlld1JlZiB2aWV3UmVmKQogewotICAgIEV3a1ZpZXcqIHZpZXcgPSBFd2tW
aWV3Ojpmcm9tRXZhc09iamVjdCh0b0ltcGwodmlld1JlZikpOworICAgIHJldHVybiB0b0ltcGwo
dmlld1JlZiktPnBhZ2VSZWYoKTsKK30KIAotICAgIHJldHVybiB2aWV3LT53a1BhZ2UoKTsKK3Zv
aWQgV0tWaWV3U2V0VGhlbWVQYXRoKFdLVmlld1JlZiB2aWV3UmVmLCBXS1N0cmluZ1JlZiB0aGVt
ZSkKK3sKKyAgICB0b0ltcGwodmlld1JlZiktPnNldFRoZW1lUGF0aCh0aGVtZSk7CiB9CiAKLVdL
SW1hZ2VSZWYgV0tWaWV3Q3JlYXRlU25hcHNob3QoV0tWaWV3UmVmIHZpZXdSZWYpCit2b2lkIFdL
Vmlld1N1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyhXS1ZpZXdSZWYgdmlld1Jl
ZikKIHsKLSAgICBFd2tWaWV3KiB2aWV3ID0gRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QodG9JbXBs
KHZpZXdSZWYpKTsKKyAgICB0b0ltcGwodmlld1JlZiktPnN1c3BlbmRBY3RpdmVET01PYmplY3Rz
QW5kQW5pbWF0aW9ucygpOworfQogCi0gICAgcmV0dXJuIFdLSW1hZ2VDcmVhdGVGcm9tQ2Fpcm9T
dXJmYWNlKHZpZXctPnRha2VTbmFwc2hvdCgpLmdldCgpLCAwIC8qIG9wdGlvbnMgKi8pOwordm9p
ZCBXS1ZpZXdSZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyhXS1ZpZXdSZWYgdmll
d1JlZikKK3sKKyAgICB0b0ltcGwodmlld1JlZiktPnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRB
bmltYXRpb25zKCk7Cit9CisKK0V2YXNfT2JqZWN0KiBXS1ZpZXdHZXRFdmFzT2JqZWN0KFdLVmll
d1JlZiB2aWV3UmVmKQoreworICAgIHJldHVybiB0b0ltcGwodmlld1JlZiktPmV2YXNPYmplY3Qo
KTsKK30KKworV0tJbWFnZVJlZiBXS1ZpZXdDcmVhdGVTbmFwc2hvdChXS1ZpZXdSZWYgdmlld1Jl
ZikKK3sKKyAgICBFd2tWaWV3KiBld2tWaWV3ID0gRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QodG9J
bXBsKHZpZXdSZWYpLT5ldmFzT2JqZWN0KCkpOworICAgIHJldHVybiBXS0ltYWdlQ3JlYXRlRnJv
bUNhaXJvU3VyZmFjZShld2tWaWV3LT50YWtlU25hcHNob3QoKS5nZXQoKSwgMCAvKiBvcHRpb25z
ICovKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwv
V0tWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5oCmlu
ZGV4IGNjNzMwN2MuLjIwYzMzMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9lZmwvV0tWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
L2VmbC9XS1ZpZXcuaApAQCAtMjQsOCArMjQsMTAgQEAKIAogI2lmIFVTRShFTykKIHR5cGVkZWYg
c3RydWN0IF9FbyBFdmFzOwordHlwZWRlZiBzdHJ1Y3QgX0VvIEV2YXNfT2JqZWN0OwogI2Vsc2UK
IHR5cGVkZWYgc3RydWN0IF9FdmFzIEV2YXM7Cit0eXBlZGVmIHN0cnVjdCBfRXZhc19PYmplY3Qg
RXZhc19PYmplY3Q7CiAjZW5kaWYKIAogI2lmZGVmIF9fY3BsdXNwbHVzCkBAIC0zNiw5ICszOCwx
OCBAQCBXS19FWFBPUlQgV0tWaWV3UmVmIFdLVmlld0NyZWF0ZShFdmFzKiBjYW52YXMsIFdLQ29u
dGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91cAogCiBXS19FWFBPUlQgV0tWaWV3UmVmIFdLVmll
d0NyZWF0ZVdpdGhGaXhlZExheW91dChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0
LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXApOwogCi1XS19FWFBPUlQgV0tQYWdlUmVmIFdLVmll
d0dldFBhZ2UoV0tWaWV3UmVmIHZpZXcpOworV0tfRVhQT1JUIHZvaWQgV0tWaWV3SW5pdGlhbGl6
ZShXS1ZpZXdSZWYpOwogCi1XS19FWFBPUlQgV0tJbWFnZVJlZiBXS1ZpZXdDcmVhdGVTbmFwc2hv
dChXS1ZpZXdSZWYgdmlld1JlZik7CitXS19FWFBPUlQgV0tQYWdlUmVmIFdLVmlld0dldFBhZ2Uo
V0tWaWV3UmVmKTsKKworV0tfRVhQT1JUIHZvaWQgV0tWaWV3U2V0VGhlbWVQYXRoKFdLVmlld1Jl
ZiwgV0tTdHJpbmdSZWYpOworCitXS19FWFBPUlQgdm9pZCBXS1ZpZXdTdXNwZW5kQWN0aXZlRE9N
T2JqZWN0c0FuZEFuaW1hdGlvbnMoV0tWaWV3UmVmKTsKK1dLX0VYUE9SVCB2b2lkIFdLVmlld1Jl
c3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKFdLVmlld1JlZik7CisKK1dLX0VYUE9S
VCBFdmFzX09iamVjdCogV0tWaWV3R2V0RXZhc09iamVjdChXS1ZpZXdSZWYpOworCitXS19FWFBP
UlQgV0tJbWFnZVJlZiBXS1ZpZXdDcmVhdGVTbmFwc2hvdChXS1ZpZXdSZWYpOwogCiAjaWZkZWYg
X19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL0V3a1ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmll
dy5jcHAKaW5kZXggMTMzYTE1Zi4uYjM0OTgyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAKQEAgLTM1LDEwICszNSwxMiBAQAogI2luY2x1ZGUgIlBh
Z2VQb2xpY3lDbGllbnRFZmwuaCIKICNpbmNsdWRlICJQYWdlVUlDbGllbnRFZmwuaCIKICNpbmNs
dWRlICJTbmFwc2hvdEltYWdlR0wuaCIKKyNpbmNsdWRlICJXS1ZpZXcuaCIKICNpbmNsdWRlICJX
S0RpY3Rpb25hcnkuaCIKICNpbmNsdWRlICJXS0dlb21ldHJ5LmgiCiAjaW5jbHVkZSAiV0tOdW1i
ZXIuaCIKICNpbmNsdWRlICJXS1N0cmluZy5oIgorI2luY2x1ZGUgIldLUGFnZUdyb3VwLmgiCiAj
aW5jbHVkZSAiV2ViQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkltYWdlLmgiCiAjaW5jbHVkZSAi
V2ViUGFnZUdyb3VwLmgiCkBAIC0xMTAsMTQgKzExMiw1NiBAQCBjb25zdCBFdmFzX09iamVjdCog
RXdrVmlldzo6dmlld0Zyb21QYWdlVmlld01hcChjb25zdCBXS1BhZ2VSZWYgcGFnZSkKICAgICBy
ZXR1cm4gcGFnZVZpZXdNYXAoKS5nZXQocGFnZSk7CiB9CiAKLUV3a1ZpZXc6OkV3a1ZpZXcoRXZh
c19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgUGFz
c1JlZlB0cjxXZWJQYWdlR3JvdXA+IHBhZ2VHcm91cCwgVmlld0JlaGF2aW9yIGJlaGF2aW9yKQot
ICAgIDogbV9ldmFzT2JqZWN0KGV2YXNPYmplY3QpCituYW1lc3BhY2UgV2ViS2l0Cit7CisKK1dl
YlZpZXc6OldlYlZpZXcoV2ViQ29udGV4dCogY29udGV4dCwgUGFnZUNsaWVudCogcGFnZUNsaWVu
dCwgV2ViUGFnZUdyb3VwKiBwYWdlR3JvdXAsIEV2YXNfT2JqZWN0KiBldmFzKQorICAgIDogbV93
ZWJQYWdlUHJveHkoY29udGV4dC0+Y3JlYXRlV2ViUGFnZShwYWdlQ2xpZW50LCBwYWdlR3JvdXAp
KQorICAgICwgbV9ldmFzT2JqZWN0KGV2YXMpCit7CisgICAgbV93ZWJQYWdlUHJveHktPnBhZ2VH
cm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCh0
cnVlKTsKKyAgICBtX3dlYlBhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNl
dEZvcmNlQ29tcG9zaXRpbmdNb2RlKHRydWUpOworCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJ
KQorICAgIG1fd2ViUGFnZVByb3h5LT5mdWxsU2NyZWVuTWFuYWdlcigpLT5zZXRXZWJWaWV3KG1f
ZXZhc09iamVjdCk7CisjZW5kaWYKK30KKworV2ViVmlldzo6fldlYlZpZXcoKQoreworICAgIG1f
d2ViUGFnZVByb3h5LT5jbG9zZSgpOworfQorCit2b2lkIFdlYlZpZXc6OmluaXRpYWxpemUoKQor
eworICAgIG1fd2ViUGFnZVByb3h5LT5pbml0aWFsaXplV2ViUGFnZSgpOworfQorCit2b2lkIFdl
YlZpZXc6OnNldFRoZW1lUGF0aChXS1N0cmluZ1JlZiB0aGVtZSkKK3sKKyAgICBtX3dlYlBhZ2VQ
cm94eS0+c2V0VGhlbWVQYXRoKHRvSW1wbCh0aGVtZSktPnN0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OworfQorCit2b2lkIFdlYlZpZXc6OnN1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9u
cygpCit7CisgICAgbV93ZWJQYWdlUHJveHktPnN1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5p
bWF0aW9ucygpOworfQorCit2b2lkIFdlYlZpZXc6OnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRB
bmltYXRpb25zKCkKK3sKKyAgICBtX3dlYlBhZ2VQcm94eS0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0
c0FuZEFuaW1hdGlvbnMoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0V3a1ZpZXc6
OkV3a1ZpZXcoRXZhc19PYmplY3QqIHZpZXcsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4
dCwgV2ViUGFnZUdyb3VwKiBwYWdlR3JvdXAsIFZpZXdCZWhhdmlvciBiZWhhdmlvcikKKyAgICA6
IG1fZXZhc09iamVjdCh2aWV3KQogICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiAjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgICwgbV9wZW5kaW5nU3VyZmFjZVJlc2l6ZShmYWxz
ZSkKICNlbmRpZgogICAgICwgbV9wYWdlQ2xpZW50KGJlaGF2aW9yID09IERlZmF1bHRCZWhhdmlv
ciA/IFBhZ2VDbGllbnREZWZhdWx0SW1wbDo6Y3JlYXRlKHRoaXMpIDogUGFnZUNsaWVudExlZ2Fj
eUltcGw6OmNyZWF0ZSh0aGlzKSkKLSAgICAsIG1fcGFnZVByb3h5KG1fY29udGV4dC0+d2ViQ29u
dGV4dCgpLT5jcmVhdGVXZWJQYWdlKG1fcGFnZUNsaWVudC5nZXQoKSwgcGFnZUdyb3VwLmdldCgp
KSkKKyAgICAsIG1fd2ViVmlldyhhZG9wdFB0cihuZXcgV2ViVmlldyhtX2NvbnRleHQtPndlYkNv
bnRleHQoKS5nZXQoKSwgbV9wYWdlQ2xpZW50LmdldCgpLCBwYWdlR3JvdXAsIHZpZXcpKSkKICAg
ICAsIG1fcGFnZUxvYWRDbGllbnQoUGFnZUxvYWRDbGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKICAg
ICAsIG1fcGFnZVBvbGljeUNsaWVudChQYWdlUG9saWN5Q2xpZW50RWZsOjpjcmVhdGUodGhpcykp
CiAgICAgLCBtX3BhZ2VVSUNsaWVudChQYWdlVUlDbGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKQEAg
LTEyNyw3ICsxNzEsNyBAQCBFd2tWaWV3OjpFd2tWaWV3KEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0
LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFBhc3NSZQogI2lmIEVOQUJMRShWSUJS
QVRJT04pCiAgICAgLCBtX3ZpYnJhdGlvbkNsaWVudChWaWJyYXRpb25DbGllbnRFZmw6OmNyZWF0
ZSh0aGlzKSkKICNlbmRpZgotICAgICwgbV9iYWNrRm9yd2FyZExpc3QoRXdrQmFja0ZvcndhcmRM
aXN0OjpjcmVhdGUodG9BUEkobV9wYWdlUHJveHktPmJhY2tGb3J3YXJkTGlzdCgpKSkpCisgICAg
LCBtX2JhY2tGb3J3YXJkTGlzdChFd2tCYWNrRm9yd2FyZExpc3Q6OmNyZWF0ZShXS1BhZ2VHZXRC
YWNrRm9yd2FyZExpc3Qod2tQYWdlKCkpKSkKICNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkK
ICAgICAsIG1fcGFnZVNjYWxlRmFjdG9yKDEpCiAjZW5kaWYKQEAgLTE0NCwyOSArMTg4LDE4IEBA
IEV3a1ZpZXc6OkV3a1ZpZXcoRXZhc19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdr
Q29udGV4dD4gY29udGV4dCwgUGFzc1JlCiB7CiAgICAgQVNTRVJUKG1fZXZhc09iamVjdCk7CiAg
ICAgQVNTRVJUKG1fY29udGV4dCk7Ci0gICAgQVNTRVJUKG1fcGFnZVByb3h5KTsKIAotI2lmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBtX3BhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnBy
ZWZlcmVuY2VzKCktPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKHRydWUpOwotICAg
IG1fcGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0Rm9yY2VDb21wb3Np
dGluZ01vZGUodHJ1ZSk7Ci0jaWYgRU5BQkxFKFdFQkdMKQotICAgIG1fcGFnZVByb3h5LT5wYWdl
R3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0V2ViR0xFbmFibGVkKHRydWUpOwotI2VuZGlmCi0g
ICAgaWYgKGJlaGF2aW9yID09IERlZmF1bHRCZWhhdmlvcikKLSAgICAgICAgbV9wYWdlUHJveHkt
PnNldFVzZUZpeGVkTGF5b3V0KHRydWUpOwotI2VuZGlmCisgICAgV0tWaWV3SW5pdGlhbGl6ZSh3
a1ZpZXcoKSk7CiAKLSAgICBtX3BhZ2VQcm94eS0+aW5pdGlhbGl6ZVdlYlBhZ2UoKTsKKyAgICBX
S1BhZ2VTZXRVc2VGaXhlZExheW91dCh3a1BhZ2UoKSwgYmVoYXZpb3IgPT0gRGVmYXVsdEJlaGF2
aW9yKTsKIAotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICBtX3BhZ2VQcm94eS0+ZnVs
bFNjcmVlbk1hbmFnZXIoKS0+c2V0V2ViVmlldyhtX2V2YXNPYmplY3QpOwotICAgIG1fcGFnZVBy
b3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0RnVsbFNjcmVlbkVuYWJsZWQodHJ1
ZSk7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoV0VCX0FVRElPKQotICAgIG1fcGFnZVByb3h5LT5wYWdl
R3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0V2ViQXVkaW9FbmFibGVkKHRydWUpOwotI2VuZGlm
CisgICAgV0tQYWdlR3JvdXBSZWYgd2tQYWdlR3JvdXAgPSBXS1BhZ2VHZXRQYWdlR3JvdXAod2tQ
YWdlKCkpOworICAgIFdLUHJlZmVyZW5jZXNSZWYgd2tQcmVmZXJlbmNlcyA9IFdLUGFnZUdyb3Vw
R2V0UHJlZmVyZW5jZXMod2tQYWdlR3JvdXApOwogCi0gICAgbV9wYWdlUHJveHktPnBhZ2VHcm91
cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQo
dHJ1ZSk7CisgICAgV0tQcmVmZXJlbmNlc1NldFdlYkdMRW5hYmxlZCh3a1ByZWZlcmVuY2VzLCB0
cnVlKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0RnVsbFNjcmVlbkVuYWJsZWQod2tQcmVmZXJlbmNl
cywgdHJ1ZSk7CisgICAgV0tQcmVmZXJlbmNlc1NldFdlYkF1ZGlvRW5hYmxlZCh3a1ByZWZlcmVu
Y2VzLCB0cnVlKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2Fj
aGVFbmFibGVkKHdrUHJlZmVyZW5jZXMsIHRydWUpOwogCiAgICAgLy8gRW5hYmxlIG1vdXNlIGV2
ZW50cyBieSBkZWZhdWx0CiAgICAgc2V0TW91c2VFdmVudHNFbmFibGVkKHRydWUpOwpAQCAtMTgy
LDggKzIxNSw2IEBAIEV3a1ZpZXc6OkV3a1ZpZXcoRXZhc19PYmplY3QqIGV2YXNPYmplY3QsIFBh
c3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgUGFzc1JlCiAKIEV3a1ZpZXc6On5Fd2tWaWV3
KCkKIHsKLSAgICBtX3BhZ2VQcm94eS0+Y2xvc2UoKTsKLQogICAgIC8vIFVucmVnaXN0ZXIgaWNv
biBjaGFuZ2UgY2FsbGJhY2suCiAgICAgRXdrRmF2aWNvbkRhdGFiYXNlKiBpY29uRGF0YWJhc2Ug
PSBtX2NvbnRleHQtPmZhdmljb25EYXRhYmFzZSgpOwogICAgIEFTU0VSVChpY29uRGF0YWJhc2Up
OwpAQCAtMjExLDkgKzI0Miw5IEBAIEV3a1ZpZXcqIEV3a1ZpZXc6OmZyb21FdmFzT2JqZWN0KGNv
bnN0IEV2YXNfT2JqZWN0KiB2aWV3KQogICogQGludGVybmFsCiAgKiBSZXRyaWV2ZXMgdGhlIGlu
dGVybmFsIFdLUGFnZSBmb3IgdGhpcyB2aWV3LgogICovCi1XS1BhZ2VSZWYgRXdrVmlldzo6d2tQ
YWdlKCkKK1dLUGFnZVJlZiBFd2tWaWV3Ojp3a1BhZ2UoKSBjb25zdAogewotICAgIHJldHVybiB0
b0FQSShtX3BhZ2VQcm94eS5nZXQoKSk7CisgICAgcmV0dXJuIFdLVmlld0dldFBhZ2Uod2tWaWV3
KCkpOwogfQogCiB2b2lkIEV3a1ZpZXc6OnNldEN1cnNvcihjb25zdCBDdXJzb3ImIGN1cnNvcikK
QEAgLTI5Nyw3ICszMjgsNyBAQCB2b2lkIEV3a1ZpZXc6OnNldERldmljZVNjYWxlRmFjdG9yKGZs
b2F0IHNjYWxlKQogCiBmbG9hdCBFd2tWaWV3OjpkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1fcGFnZVByb3h5LT5kZXZpY2VTY2FsZUZhY3RvcigpOworICAgIHJldHVy
biBXS1BhZ2VHZXRCYWNraW5nU2NhbGVGYWN0b3Iod2tQYWdlKCkpOwogfQogCiBBZmZpbmVUcmFu
c2Zvcm0gRXdrVmlldzo6dHJhbnNmb3JtRnJvbVNjZW5lKCkgY29uc3QKQEAgLTUyMyw3ICs1NTQs
NyBAQCBib29sIEV3a1ZpZXc6OmlzVmlzaWJsZSgpIGNvbnN0CiAKIGNvbnN0IGNoYXIqIEV3a1Zp
ZXc6OnRpdGxlKCkgY29uc3QKIHsKLSAgICBtX3RpdGxlID0gbV9wYWdlUHJveHktPnBhZ2VUaXRs
ZSgpLnV0ZjgoKS5kYXRhKCk7CisgICAgbV90aXRsZSA9IFdLRWluYVNoYXJlZFN0cmluZyhBZG9w
dFdLLCBXS1BhZ2VDb3B5VGl0bGUod2tQYWdlKCkpKTsKIAogICAgIHJldHVybiBtX3RpdGxlOwog
fQpAQCAtNTQ2LDI0ICs1NzcsMjUgQEAgdm9pZCBFd2tWaWV3OjpzZXRUaGVtZVBhdGgoY29uc3Qg
Y2hhciogdGhlbWUpCiB7CiAgICAgaWYgKG1fdGhlbWUgIT0gdGhlbWUpIHsKICAgICAgICAgbV90
aGVtZSA9IHRoZW1lOwotICAgICAgICBtX3BhZ2VQcm94eS0+c2V0VGhlbWVQYXRoKHRoZW1lKTsK
KyAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrVGhlbWUgPSBXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZyh0aGVtZSk7CisgICAgICAgIFdLVmlld1NldFRoZW1lUGF0aCh3a1Zp
ZXcoKSwgd2tUaGVtZS5nZXQoKSk7CiAgICAgfQogfQogCiBjb25zdCBjaGFyKiBFd2tWaWV3Ojpj
dXN0b21UZXh0RW5jb2RpbmdOYW1lKCkgY29uc3QKIHsKLSAgICBTdHJpbmcgY3VzdG9tRW5jb2Rp
bmcgPSBtX3BhZ2VQcm94eS0+Y3VzdG9tVGV4dEVuY29kaW5nTmFtZSgpOwotICAgIGlmIChjdXN0
b21FbmNvZGluZy5pc0VtcHR5KCkpCisgICAgV0tTdHJpbmdSZWYgY3VzdG9tRW5jb2RpbmcgPSBX
S1BhZ2VDb3B5Q3VzdG9tVGV4dEVuY29kaW5nTmFtZSh3a1BhZ2UoKSk7CisgICAgaWYgKFdLU3Ry
aW5nSXNFbXB0eShjdXN0b21FbmNvZGluZykpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgbV9j
dXN0b21FbmNvZGluZyA9IGN1c3RvbUVuY29kaW5nLnV0ZjgoKS5kYXRhKCk7CisgICAgbV9jdXN0
b21FbmNvZGluZyA9IFdLRWluYVNoYXJlZFN0cmluZyhBZG9wdFdLLCBjdXN0b21FbmNvZGluZyk7
CiAKICAgICByZXR1cm4gbV9jdXN0b21FbmNvZGluZzsKIH0KIAogdm9pZCBFd2tWaWV3OjpzZXRD
dXN0b21UZXh0RW5jb2RpbmdOYW1lKGNvbnN0IFN0cmluZyYgZW5jb2RpbmcpCiB7Ci0gICAgbV9w
YWdlUHJveHktPnNldEN1c3RvbVRleHRFbmNvZGluZ05hbWUoZW5jb2RpbmcpOworICAgIFdLUGFn
ZVNldEN1c3RvbVRleHRFbmNvZGluZ05hbWUod2tQYWdlKCksIFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKGVuY29kaW5nLnV0ZjgoKS5kYXRhKCkpKTsKIH0KIAogdm9pZCBFd2tWaWV3Ojpz
ZXRNb3VzZUV2ZW50c0VuYWJsZWQoYm9vbCBlbmFibGVkKQpAQCAtNjQ1LDkgKzY3Nyw2IEBAIGJv
b2wgRXdrVmlldzo6Y3JlYXRlR0xTdXJmYWNlKGNvbnN0IEludFNpemUmIHZpZXdTaXplKQogICAg
ICAgICBpZiAoIW1fZXZhc0dMKSB7CiAgICAgICAgICAgICBXQVJOKCJGYWlsZWQgdG8gY3JlYXRl
IEV2YXNfR0wsIGZhbGxpbmcgYmFjayB0byBzb2Z0d2FyZSBtb2RlLiIpOwogICAgICAgICAgICAg
bV9pc0hhcmR3YXJlQWNjZWxlcmF0ZWQgPSBmYWxzZTsKLSNpZiBFTkFCTEUoV0VCR0wpCi0gICAg
ICAgICAgICBtX3BhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldFdlYkdM
RW5hYmxlZChmYWxzZSk7Ci0jZW5kaWYKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQogICAgIH0KQEAgLTg5MCwxNSArOTE5LDE1IEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBFd2tW
aWV3OjppbmZvcm1EYXRhYmFzZVF1b3RhUmVhY2hlZChjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFt
CiAgKi8KIHZvaWQgRXdrVmlldzo6aW5mb3JtVVJMQ2hhbmdlKCkKIHsKLSAgICBTdHJpbmcgYWN0
aXZlVVJMID0gbV9wYWdlUHJveHktPmFjdGl2ZVVSTCgpOwotICAgIGlmIChhY3RpdmVVUkwuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm47CisgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHdrQWN0
aXZlVVJMID0gV0tQYWdlQ29weUFjdGl2ZVVSTCh3a1BhZ2UoKSk7CisgICAgV0tTdHJpbmdSZWYg
d2tVUkxTdHJpbmcgPSBXS1VSTENvcHlTdHJpbmcod2tBY3RpdmVVUkwuZ2V0KCkpOwogCi0gICAg
Q1N0cmluZyByYXdBY3RpdmVVUkwgPSBhY3RpdmVVUkwudXRmOCgpOwotICAgIGlmIChtX3VybCA9
PSByYXdBY3RpdmVVUkwuZGF0YSgpKQorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKHdrVVJMU3RyaW5nLCBtX3VybCkpIHsKKyAgICAgICAgV0tSZWxlYXNlKHdrVVJMU3RyaW5n
KTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIG1fdXJsID0gcmF3QWN0aXZlVVJMLmRh
dGEoKTsKKyAgICBtX3VybCA9IFdLRWluYVNoYXJlZFN0cmluZyhBZG9wdFdLLCB3a1VSTFN0cmlu
Zyk7CiAgICAgc21hcnRDYWxsYmFjazxVUkxDaGFuZ2VkPigpLmNhbGwobV91cmwpOwogCiAgICAg
Ly8gVXBkYXRlIHRoZSB2aWV3J3MgZmF2aWNvbi4KQEAgLTEwMzAsNyArMTA1OSw3IEBAIHZvaWQg
RXdrVmlldzo6b25GYXZpY29uQ2hhbmdlZChjb25zdCBjaGFyKiBwYWdlVVJMLCB2b2lkKiBldmVu
dEluZm8pCiBQYXNzUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gRXdrVmlldzo6dGFrZVNuYXBzaG90
KCkKIHsKICAgICAvLyBTdXNwZW5kIGFsbCBhbmltYXRpb25zIGJlZm9yZSB0YWtpbmcgdGhlIHNu
YXBzaG90LgotICAgIG1fcGFnZVByb3h5LT5zdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1h
dGlvbnMoKTsKKyAgICBXS1ZpZXdTdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMo
d2tWaWV3KCkpOwogCiAgICAgLy8gV2FpdCBmb3IgdGhlIHBlbmRpbmcgcmVwYWludCBldmVudHMg
dG8gYmUgcHJvY2Vzc2VkLgogICAgIHdoaWxlIChtX2Rpc3BsYXlUaW1lci5pc0FjdGl2ZSgpKQpA
QCAtMTA0Miw3ICsxMDcxLDcgQEAgUGFzc1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IEV3a1ZpZXc6
OnRha2VTbmFwc2hvdCgpCiAjZW5kaWYKICAgICAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4g
c25hcHNob3QgPSBjcmVhdGVTdXJmYWNlRm9ySW1hZ2Uoc2QtPmltYWdlKTsKICAgICAgICAgLy8g
UmVzdW1lIGFsbCBhbmltYXRpb25zLgotICAgICAgICBtX3BhZ2VQcm94eS0+cmVzdW1lQWN0aXZl
RE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKKyAgICAgICAgV0tWaWV3UmVzdW1lQWN0aXZlRE9N
T2JqZWN0c0FuZEFuaW1hdGlvbnMod2tWaWV3KCkpOwogCiAgICAgICAgIHJldHVybiBzbmFwc2hv
dC5yZWxlYXNlKCk7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtMTA1MCw3
ICsxMDc5LDcgQEAgUGFzc1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IEV3a1ZpZXc6OnRha2VTbmFw
c2hvdCgpCiAKICAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzbmFwc2hvdCA9IGdldEltYWdl
U3VyZmFjZUZyb21GcmFtZUJ1ZmZlcigwLCAwLCBzZC0+dmlldy53LCBzZC0+dmlldy5oKTsKICAg
ICAvLyBSZXN1bWUgYWxsIGFuaW1hdGlvbnMuCi0gICAgbV9wYWdlUHJveHktPnJlc3VtZUFjdGl2
ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7CisgICAgV0tWaWV3UmVzdW1lQWN0aXZlRE9NT2Jq
ZWN0c0FuZEFuaW1hdGlvbnMod2tWaWV3KCkpOwogCiAgICAgcmV0dXJuIHNuYXBzaG90LnJlbGVh
c2UoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvRXdrVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5o
CmluZGV4IGEyMTNmOTcuLjBlNjA1N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9Fd2tWaWV3LmgKQEAgLTQ5LDYgKzQ5LDEwIEBACiAjaW5jbHVkZSAiRXZhc0dMU3VyZmFj
ZS5oIgogI2VuZGlmCiAKKyNpbmNsdWRlICJXZWJDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViUGFn
ZUdyb3VwLmgiCisjaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIKKwogbmFtZXNwYWNlIFdlYktp
dCB7CiBjbGFzcyBDb250ZXh0TWVudUNsaWVudEVmbDsKIGNsYXNzIEZpbmRDbGllbnRFZmw7CkBA
IC05Niw2ICsxMDAsMzMgQEAgdHlwZWRlZiBzdHJ1Y3QgX0V2YXNfR0xfU3VyZmFjZSBFdmFzX0dM
X1N1cmZhY2U7CiAKIHR5cGVkZWYgc3RydWN0IEV3a19WaWV3X1NtYXJ0X0RhdGEgRXdrX1ZpZXdf
U21hcnRfRGF0YTsKIAorbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIFBMRUFTRSBMSUNFTlNFIFRI
SVMgQ0xBU1MgQVMgQlNEIQorY2xhc3MgV2ViVmlldyB7CitwdWJsaWM6CisgICAgV2ViVmlldyhX
ZWJDb250ZXh0KiwgUGFnZUNsaWVudCosIFdlYlBhZ2VHcm91cCosIEV2YXNfT2JqZWN0Kik7Cisg
ICAgdmlydHVhbCB+V2ViVmlldygpOworCisgICAgdm9pZCBpbml0aWFsaXplKCk7CisKKyAgICBX
S1BhZ2VSZWYgcGFnZVJlZigpIHsgcmV0dXJuIHRvQVBJKG1fd2ViUGFnZVByb3h5LmdldCgpKTsg
fQorCisgICAgdm9pZCBzZXRUaGVtZVBhdGgoV0tTdHJpbmdSZWYpOworICAgIHZvaWQgc3VzcGVu
ZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7CisgICAgdm9pZCByZXN1bWVBY3RpdmVE
T01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworCisgICAgLy8gRklYTUU6IFJlbW92ZSB3aGVuIHBv
c3NpYmxlLgorICAgIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0KCkgeyByZXR1cm4gbV9ldmFzT2Jq
ZWN0OyB9CisgICAgV2ViUGFnZVByb3h5KiBwYWdlKCkgeyByZXR1cm4gbV93ZWJQYWdlUHJveHku
Z2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBXVEY6OlJlZlB0cjxXZWJQYWdlUHJveHk+IG1fd2Vi
UGFnZVByb3h5OworICAgIEV2YXNfT2JqZWN0KiBtX2V2YXNPYmplY3Q7Cit9OworCit9CisKIGNs
YXNzIEV3a1ZpZXcgewogcHVibGljOgogCkBAIC0xMDMsMTQgKzEzNCwxNiBAQCBwdWJsaWM6CiAg
ICAgICAgIExlZ2FjeUJlaGF2aW9yLAogICAgICAgICBEZWZhdWx0QmVoYXZpb3IKICAgICB9Owot
ICAgIEV3a1ZpZXcoRXZhc19PYmplY3QqIHZpZXcsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29u
dGV4dCwgUGFzc1JlZlB0cjxXZWJLaXQ6OldlYlBhZ2VHcm91cD4gcGFnZUdyb3VwLCBWaWV3QmVo
YXZpb3IpOworICAgIEV3a1ZpZXcoRXZhc19PYmplY3QqIHZpZXcsIFBhc3NSZWZQdHI8RXdrQ29u
dGV4dD4gY29udGV4dCwgV2ViS2l0OjpXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCwgVmlld0JlaGF2
aW9yKTsKICAgICB+RXdrVmlldygpOwogCiAgICAgc3RhdGljIEV3a1ZpZXcqIGZyb21FdmFzT2Jq
ZWN0KGNvbnN0IEV2YXNfT2JqZWN0KiB2aWV3KTsKICAgICBFdmFzX09iamVjdCogdmlldygpIHsg
cmV0dXJuIG1fZXZhc09iamVjdDsgfQogCi0gICAgV0tQYWdlUmVmIHdrUGFnZSgpOwotICAgIFdl
YktpdDo6V2ViUGFnZVByb3h5KiBwYWdlKCkgeyByZXR1cm4gbV9wYWdlUHJveHkuZ2V0KCk7IH0K
KyAgICBXS1ZpZXdSZWYgd2tWaWV3KCkgY29uc3QgeyByZXR1cm4gdG9BUEkobV93ZWJWaWV3Lmdl
dCgpKTsgfQorICAgIFdLUGFnZVJlZiB3a1BhZ2UoKSBjb25zdDsKKworICAgIFdlYktpdDo6V2Vi
UGFnZVByb3h5KiBwYWdlKCkgeyByZXR1cm4gbV93ZWJWaWV3LT5wYWdlKCk7IH0KICAgICBFd2tD
b250ZXh0KiBld2tDb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CiAgICAgRXdr
U2V0dGluZ3MqIHNldHRpbmdzKCkgeyByZXR1cm4gbV9zZXR0aW5ncy5nZXQoKTsgfQogICAgIEV3
a0JhY2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRMaXN0KCkgeyByZXR1cm4gbV9iYWNrRm9yd2Fy
ZExpc3QuZ2V0KCk7IH0KQEAgLTI0NSw3ICsyNzgsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9w
ZW5kaW5nU3VyZmFjZVJlc2l6ZTsKICNlbmRpZgogICAgIE93blB0cjxXZWJLaXQ6OlBhZ2VDbGll
bnRCYXNlPiBtX3BhZ2VDbGllbnQ7Ci0gICAgUmVmUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5PiBt
X3BhZ2VQcm94eTsKKyAgICBPd25QdHI8V2ViS2l0OjpXZWJWaWV3PiBtX3dlYlZpZXc7CiAgICAg
T3duUHRyPFdlYktpdDo6UGFnZUxvYWRDbGllbnRFZmw+IG1fcGFnZUxvYWRDbGllbnQ7CiAgICAg
T3duUHRyPFdlYktpdDo6UGFnZVBvbGljeUNsaWVudEVmbD4gbV9wYWdlUG9saWN5Q2xpZW50Owog
ICAgIE93blB0cjxXZWJLaXQ6OlBhZ2VVSUNsaWVudEVmbD4gbV9wYWdlVUlDbGllbnQ7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKaW5kZXggNzJhNmFm
YS4uY2FlMDQyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192
aWV3LmNwcApAQCAtNTA1LDcgKzUwNSw3IEBAIHN0YXRpYyBpbmxpbmUgRXZhc19TbWFydCogY3Jl
YXRlRXdrVmlld1NtYXJ0Q2xhc3Modm9pZCkKICAgICByZXR1cm4gc21hcnQ7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgRXZhc19PYmplY3QqIGNyZWF0ZUV3a1ZpZXcoRXZhcyogY2FudmFzLCBFdmFzX1Nt
YXJ0KiBzbWFydCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJl
ZiBwYWdlR3JvdXBSZWYgPSAwLCBFd2tWaWV3OjpWaWV3QmVoYXZpb3IgYmVoYXZpb3IgPSBFd2tW
aWV3OjpEZWZhdWx0QmVoYXZpb3IpCitzdGF0aWMgaW5saW5lIEV3a1ZpZXcqIGNyZWF0ZUV3a1Zp
ZXcoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0
PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYgPSAwLCBFd2tWaWV3OjpWaWV3
QmVoYXZpb3IgYmVoYXZpb3IgPSBFd2tWaWV3OjpEZWZhdWx0QmVoYXZpb3IpCiB7CiAgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGNhbnZhcywgMCk7CiAgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0LCAwKTsKQEAgLTUyNSwyMSArNTI1LDIyIEBAIHN0YXRp
YyBpbmxpbmUgRXZhc19PYmplY3QqIGNyZWF0ZUV3a1ZpZXcoRXZhcyogY2FudmFzLCBFdmFzX1Nt
YXJ0KiBzbWFydCwgUGFzc1JlCiAgICAgLy8gRGVmYXVsdCBXZWJQYWdlR3JvdXAgaXMgY3JlYXRl
ZCBpbiBXZWJDb250ZXh0IGNvbnN0cnVjdG9yIGlmIHRoZSBwYWdlR3JvdXBSZWYgaXMgMCwKICAg
ICAvLyBzbyB3ZSBkbyBub3QgbmVlZCB0byBjcmVhdGUgaXQgaGVyZS4KICAgICBzbWFydERhdGEt
PnByaXYgPSBuZXcgRXdrVmlldyhld2tWaWV3LCBjb250ZXh0LCB0b0ltcGwocGFnZUdyb3VwUmVm
KSwgYmVoYXZpb3IpOwotICAgIHJldHVybiBld2tWaWV3OworCisgICAgcmV0dXJuIHNtYXJ0RGF0
YS0+cHJpdjsKIH0KIAogLyoqCiAgKiBAaW50ZXJuYWwKICAqIENvbnN0cnVjdHMgYSBld2tfdmll
dyBFdmFzX09iamVjdCB3aXRoIFdLVHlwZSBwYXJhbWV0ZXJzLgogICovCi1FdmFzX09iamVjdCog
ZXdrX3ZpZXdfYmFzZV9hZGQoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwg
V0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpWaWV3QmVoYXZpb3IgYmVoYXZp
b3IpCitFd2tWaWV3KiBld2tfdmlld19iYXNlX2FkZChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJl
ZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OlZpZXdC
ZWhhdmlvciBiZWhhdmlvcikKIHsKICAgICByZXR1cm4gY3JlYXRlRXdrVmlldyhjYW52YXMsIGNy
ZWF0ZUV3a1ZpZXdTbWFydENsYXNzKCksIGNvbnRleHRSZWYgPyBFd2tDb250ZXh0OjpjcmVhdGUo
dG9JbXBsKGNvbnRleHRSZWYpKSA6IEV3a0NvbnRleHQ6OmRlZmF1bHRDb250ZXh0KCksIHBhZ2VH
cm91cFJlZiwgYmVoYXZpb3IpOwogfQogCiBFdmFzX09iamVjdCogZXdrX3ZpZXdfc21hcnRfYWRk
KEV2YXMqIGNhbnZhcywgRXZhc19TbWFydCogc21hcnQsIEV3a19Db250ZXh0KiBjb250ZXh0KQog
ewotICAgIHJldHVybiBjcmVhdGVFd2tWaWV3KGNhbnZhcywgc21hcnQsIGV3a19vYmplY3RfY2Fz
dDxFd2tDb250ZXh0Kj4oY29udGV4dCkpOworICAgIHJldHVybiBjcmVhdGVFd2tWaWV3KGNhbnZh
cywgc21hcnQsIGV3a19vYmplY3RfY2FzdDxFd2tDb250ZXh0Kj4oY29udGV4dCkpLT52aWV3KCk7
CiB9CiAKIEV2YXNfT2JqZWN0KiBld2tfdmlld19hZGRfd2l0aF9jb250ZXh0KEV2YXMqIGNhbnZh
cywgRXdrX0NvbnRleHQqIGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfdmlld19wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfdmlld19wcml2YXRlLmgKaW5kZXggODNiNGM5Ny4uYzQ5MTJmZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZh
dGUuaApAQCAtMjUsNiArMjUsNiBAQAogI2luY2x1ZGUgPEV2YXMuaD4KICNpbmNsdWRlIDxXZWJL
aXQyL1dLQmFzZS5oPgogCi1FdmFzX09iamVjdCogZXdrX3ZpZXdfYmFzZV9hZGQoRXZhcyogY2Fu
dmFzLCBXS0NvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpWaWV3QmVoYXZpb3Ip
OworRXdrVmlldyogZXdrX3ZpZXdfYmFzZV9hZGQoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYs
IFdLUGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpWaWV3QmVoYXZpb3IpOwogCiAjZW5kaWYgLy8gZXdr
X3ZpZXdfcHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZs
L1dlYkluc3BlY3RvclByb3h5RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwv
V2ViSW5zcGVjdG9yUHJveHlFZmwuY3BwCmluZGV4IDQ2MmIyNmQuLjMxNzQ0OWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwu
Y3BwCkBAIC05OCwxNCArOTgsMTUgQEAgV2ViUGFnZVByb3h5KiBXZWJJbnNwZWN0b3JQcm94eTo6
cGxhdGZvcm1DcmVhdGVJbnNwZWN0b3JQYWdlKCkKICAgICBpZiAoIW1faW5zcGVjdG9yV2luZG93
KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIG1faW5zcGVjdG9yVmlldyA9IGV3a192aWV3X2Jh
c2VfYWRkKGVjb3JlX2V2YXNfZ2V0KG1faW5zcGVjdG9yV2luZG93KSwgdG9BUEkocGFnZSgpLT5w
cm9jZXNzKCktPmNvbnRleHQoKSksIHRvQVBJKGluc3BlY3RvclBhZ2VHcm91cCgpKSwgRXdrVmll
dzo6TGVnYWN5QmVoYXZpb3IpOwotICAgIEV3a1ZpZXcqIGluc3BlY3RvclZpZXdJbXBsID0gRXdr
Vmlldzo6ZnJvbUV2YXNPYmplY3QobV9pbnNwZWN0b3JWaWV3KTsKLSAgICBpbnNwZWN0b3JWaWV3
SW1wbC0+c2V0VGhlbWVQYXRoKFRFU1RfVEhFTUVfRElSICIvZGVmYXVsdC5lZGoiKTsKKyAgICAv
LyBGSVhNRTogUmVmYWN0b3IgdG8gdXNlIFdLVmlld1JlZi4KKyAgICBtX2luc3BlY3RvclZpZXcg
PSBld2tfdmlld19iYXNlX2FkZChlY29yZV9ldmFzX2dldChtX2luc3BlY3RvcldpbmRvdyksIHRv
QVBJKHBhZ2UoKS0+cHJvY2VzcygpLT5jb250ZXh0KCkpLCB0b0FQSShpbnNwZWN0b3JQYWdlR3Jv
dXAoKSksIEV3a1ZpZXc6OkxlZ2FjeUJlaGF2aW9yKS0+dmlldygpOworICAgIEV3a1ZpZXcqIGlu
c3BlY3RvclZpZXcgPSBFd2tWaWV3Ojpmcm9tRXZhc09iamVjdChtX2luc3BlY3RvclZpZXcpOwor
ICAgIGluc3BlY3RvclZpZXctPnNldFRoZW1lUGF0aChURVNUX1RIRU1FX0RJUiAiL2RlZmF1bHQu
ZWRqIik7CiAKLSAgICBFd2tfU2V0dGluZ3MqIHNldHRpbmdzID0gaW5zcGVjdG9yVmlld0ltcGwt
PnNldHRpbmdzKCk7CisgICAgRXdrX1NldHRpbmdzKiBzZXR0aW5ncyA9IGluc3BlY3RvclZpZXct
PnNldHRpbmdzKCk7CiAgICAgZXdrX3NldHRpbmdzX2ZpbGVfYWNjZXNzX2Zyb21fZmlsZV91cmxz
X2FsbG93ZWRfc2V0KHNldHRpbmdzLCB0cnVlKTsKIAotICAgIHJldHVybiBpbnNwZWN0b3JWaWV3
SW1wbC0+cGFnZSgpOworICAgIHJldHVybiBpbnNwZWN0b3JWaWV3LT5wYWdlKCk7CiB9CiAKIHZv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtT3BlbigpCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2ViVmlldy5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0
Zm9ybVdlYlZpZXcuaAppbmRleCA1YWQxZWVkLi5kY2FmNDQ4IDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2ViVmlldy5oCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
UGxhdGZvcm1XZWJWaWV3LmgKQEAgLTQ3LDEzICs0Nyw4IEBAIHR5cGVkZWYgSFdORCBQbGF0Zm9y
bVdpbmRvdzsKIHR5cGVkZWYgV0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlwZWRlZiBHdGtX
aWRnZXQgKlBsYXRmb3JtV2luZG93OwogI2VsaWYgUExBVEZPUk0oRUZMKQotI2lmIFVTRShFTykK
LXR5cGVkZWYgc3RydWN0IF9FbyBFdmFzX09iamVjdDsKLSNlbHNlCi10eXBlZGVmIHN0cnVjdCBf
RXZhc19PYmplY3QgRXZhc19PYmplY3Q7Ci0jZW5kaWYKIHR5cGVkZWYgc3RydWN0IF9FY29yZV9F
dmFzIEVjb3JlX0V2YXM7Ci10eXBlZGVmIEV2YXNfT2JqZWN0KiBQbGF0Zm9ybVdLVmlldzsKK3R5
cGVkZWYgV0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlwZWRlZiBFY29yZV9FdmFzKiBQbGF0
Zm9ybVdpbmRvdzsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2Vm
bC9QbGF0Zm9ybVdlYlZpZXcuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwvUGxhdGZvcm1X
ZWJWaWV3LmNwcAppbmRleCBkNTQ0OWViLi5iODJhNzA3IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL2VmbC9QbGF0Zm9ybVdlYlZpZXcuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvZWZsL1BsYXRmb3JtV2ViVmlldy5jcHAKQEAgLTY1LDMzICs2NSwzMyBAQCBQbGF0Zm9ybVdl
YlZpZXc6OlBsYXRmb3JtV2ViVmlldyhXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3Jv
dXBSZWYgcGFnZUdybwogewogICAgIG1fd2luZG93ID0gaW5pdEVjb3JlRXZhcygpOwogICAgIEV2
YXMqIGV2YXMgPSBlY29yZV9ldmFzX2dldChtX3dpbmRvdyk7Ci0gICAgbV92aWV3ID0gdG9JbXBs
KFdLVmlld0NyZWF0ZShldmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYpKTsKLSAgICBld2tf
dmlld190aGVtZV9zZXQobV92aWV3LCBUSEVNRV9ESVIiL2RlZmF1bHQuZWRqIik7Ci0gICAgZXZh
c19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKG1fdmlldywgIndlYnByb2Nlc3MsY3Jhc2hlZCIs
IG9uV2ViUHJvY2Vzc0NyYXNoZWQsIDApOworICAgIG1fdmlldyA9IFdLVmlld0NyZWF0ZShldmFz
LCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYpOworICAgIGV3a192aWV3X3RoZW1lX3NldChXS1Zp
ZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIFRIRU1FX0RJUiIvZGVmYXVsdC5lZGoiKTsKKyAgICBl
dmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcp
LCAid2VicHJvY2VzcyxjcmFzaGVkIiwgb25XZWJQcm9jZXNzQ3Jhc2hlZCwgMCk7CiAgICAgcmVz
aXplVG8oNjAwLCA4MDApOwogfQogCiBQbGF0Zm9ybVdlYlZpZXc6On5QbGF0Zm9ybVdlYlZpZXco
KQogewotICAgIGV2YXNfb2JqZWN0X2RlbChtX3ZpZXcpOworICAgIGV2YXNfb2JqZWN0X2RlbChX
S1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldykpOwogICAgIGVjb3JlX2V2YXNfZnJlZShtX3dpbmRv
dyk7CiAgICAgZWNvcmVfZXZhc19zaHV0ZG93bigpOwogfQogCiB2b2lkIFBsYXRmb3JtV2ViVmll
dzo6cmVzaXplVG8odW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKIHsKLSAgICBldmFz
X29iamVjdF9yZXNpemUobV92aWV3LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBldmFzX29iamVjdF9y
ZXNpemUoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAog
V0tQYWdlUmVmIFBsYXRmb3JtV2ViVmlldzo6cGFnZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdL
Vmlld0dldFBhZ2UodG9BUEkobV92aWV3KSk7CisgICAgcmV0dXJuIFdLVmlld0dldFBhZ2UobV92
aWV3KTsKIH0KIAogdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnNpbXVsYXRlU3BhY2ViYXJLZXlQcmVz
cygpCiB7CiAgICAgRXZhcyogZXZhcyA9IGVjb3JlX2V2YXNfZ2V0KG1fd2luZG93KTsKLSAgICBl
dmFzX29iamVjdF9mb2N1c19zZXQobV92aWV3LCB0cnVlKTsKKyAgICBldmFzX29iamVjdF9mb2N1
c19zZXQoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCB0cnVlKTsKICAgICBldmFzX2V2ZW50
X2ZlZWRfa2V5X2Rvd24oZXZhcywgInNwYWNlIiwgInNwYWNlIiwgIiAiLCAwLCAwLCAwKTsKICAg
ICBldmFzX2V2ZW50X2ZlZWRfa2V5X3VwKGV2YXMsICJzcGFjZSIsICJzcGFjZSIsICIgIiwgMCwg
MSwgMCk7CiB9CkBAIC05OSwxNCArOTksMTQgQEAgdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnNpbXVs
YXRlU3BhY2ViYXJLZXlQcmVzcygpCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6c2ltdWxhdGVNb3Vz
ZU1vdmUodW5zaWduZWQgeCwgdW5zaWduZWQgeSkKIHsKICAgICBFdmFzKiBldmFzID0gZWNvcmVf
ZXZhc19nZXQobV93aW5kb3cpOwotICAgIGV2YXNfb2JqZWN0X3Nob3cobV92aWV3KTsKKyAgICBl
dmFzX29iamVjdF9zaG93KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSk7CiAgICAgZXZhc19l
dmVudF9mZWVkX21vdXNlX21vdmUoZXZhcywgeCwgeSwgMCwgMCk7CiB9CiAKIHZvaWQgUGxhdGZv
cm1XZWJWaWV3OjpzaW11bGF0ZVJpZ2h0Q2xpY2sodW5zaWduZWQgeCwgdW5zaWduZWQgeSkKIHsK
ICAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwotICAgIGV2YXNfb2Jq
ZWN0X3Nob3cobV92aWV3KTsKKyAgICBldmFzX29iamVjdF9zaG93KFdLVmlld0dldEV2YXNPYmpl
Y3QobV92aWV3KSk7CiAgICAgZXZhc19ldmVudF9mZWVkX21vdXNlX21vdmUoZXZhcywgeCwgeSwg
MCwgMCk7CiAgICAgZXZhc19ldmVudF9mZWVkX21vdXNlX2Rvd24oZXZhcywgMywgRVZBU19CVVRU
T05fTk9ORSwgMCwgMCk7CiAgICAgZXZhc19ldmVudF9mZWVkX21vdXNlX3VwKGV2YXMsIDMsIEVW
QVNfQlVUVE9OX05PTkUsIDAsIDApOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9QbGF0Zm9ybVdlYlZpZXcuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJW
aWV3LmgKaW5kZXggOGY5ZGNkYi4uNTFjNGJjYyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Bs
YXRmb3JtV2ViVmlldy5oCkBAIC01NCwxMyArNTQsOCBAQCB0eXBlZGVmIHN0cnVjdCBfR3RrV2lk
Z2V0IEd0a1dpZGdldDsKIHR5cGVkZWYgV0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlwZWRl
ZiBHdGtXaWRnZXQqIFBsYXRmb3JtV2luZG93OwogI2VsaWYgUExBVEZPUk0oRUZMKQotI2lmIFVT
RShFTykKLXR5cGVkZWYgc3RydWN0IF9FbyBFdmFzX09iamVjdDsKLSNlbHNlCi10eXBlZGVmIHN0
cnVjdCBfRXZhc19PYmplY3QgRXZhc19PYmplY3Q7Ci0jZW5kaWYKIHR5cGVkZWYgc3RydWN0IF9F
Y29yZV9FdmFzIEVjb3JlX0V2YXM7Ci10eXBlZGVmIEV2YXNfT2JqZWN0KiBQbGF0Zm9ybVdLVmll
dzsKK3R5cGVkZWYgV0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlwZWRlZiBFY29yZV9FdmFz
KiBQbGF0Zm9ybVdpbmRvdzsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL2VmbC9FdmVudFNlbmRlclByb3h5RWZsLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwCmluZGV4IGYyODI5YTkuLjEzOTIwZWMgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwu
Y3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwu
Y3BwCkBAIC00MzgsNyArNDM4LDcgQEAgdm9pZCBFdmVudFNlbmRlclByb3h5OjpzZW5kVG91Y2hF
dmVudChFd2tfVG91Y2hfRXZlbnRfVHlwZSBldmVudFR5cGUpCiB7CiAgICAgQVNTRVJUKG1fdG91
Y2hQb2ludHMpOwogCi0gICAgRXZhc19PYmplY3QqIGV3a1ZpZXcgPSBtX3Rlc3RDb250cm9sbGVy
LT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKTsKKyAgICBFdmFzX09iamVjdCogZXdrVmll
dyA9IFdLVmlld0dldEV2YXNPYmplY3QobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+
cGxhdGZvcm1WaWV3KCkpOwogICAgIGV3a192aWV3X2ZlZWRfdG91Y2hfZXZlbnQoZXdrVmlldywg
ZXZlbnRUeXBlLCBtX3RvdWNoUG9pbnRzLCBldmFzX2tleV9tb2RpZmllcl9nZXQoZXZhc19vYmpl
Y3RfZXZhc19nZXQoZXdrVmlldykpKTsKIAogICAgIEVpbmFfTGlzdCogbGlzdDsKQEAgLTQ5MCwx
MiArNDkwLDE0IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6dXBkYXRlVG91Y2hQb2ludChpbnQg
aW5kZXgsIGludCB4LCBpbnQgeSkKIAogdm9pZCBFdmVudFNlbmRlclByb3h5OjpzZXRUb3VjaE1v
ZGlmaWVyKFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXIsIGJvb2wgZW5hYmxlKQogeworICAgIEV2
YXNfT2JqZWN0KiBld2tWaWV3ID0gV0tWaWV3R2V0RXZhc09iamVjdChtX3Rlc3RDb250cm9sbGVy
LT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKSk7CisKICAgICBmb3IgKHVuc2lnbmVkIGlu
ZGV4ID0gMDsgaW5kZXggPCAoc2l6ZW9mKG1vZGlmaWVyTmFtZXMpIC8gc2l6ZW9mKGNoYXIqKSk7
ICsraW5kZXgpIHsKICAgICAgICAgaWYgKG1vZGlmaWVyICYgKDEgPDwgaW5kZXgpKSB7CiAgICAg
ICAgICAgICBpZiAoZW5hYmxlKQotICAgICAgICAgICAgICAgIGV2YXNfa2V5X21vZGlmaWVyX29u
KGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBs
YXRmb3JtVmlldygpKSwgbW9kaWZpZXJOYW1lc1tpbmRleF0pOworICAgICAgICAgICAgICAgIGV2
YXNfa2V5X21vZGlmaWVyX29uKGV2YXNfb2JqZWN0X2V2YXNfZ2V0KGV3a1ZpZXcpLCBtb2RpZmll
ck5hbWVzW2luZGV4XSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZXZhc19r
ZXlfbW9kaWZpZXJfb2ZmKGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1h
aW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpKSwgbW9kaWZpZXJOYW1lc1tpbmRleF0pOworICAg
ICAgICAgICAgICAgIGV2YXNfa2V5X21vZGlmaWVyX29mZihldmFzX29iamVjdF9ldmFzX2dldChl
d2tWaWV3KSwgbW9kaWZpZXJOYW1lc1tpbmRleF0pOwogICAgICAgICB9CiAgICAgfQogfQpkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNw
cCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5jcHAKaW5k
ZXggMWNjYzBiZC4uYjhhMzNlZCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9l
ZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2Vm
bC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3BwCkBAIC02MSw1NiArNjEsNTMgQEAgUGxhdGZvcm1XZWJW
aWV3OjpQbGF0Zm9ybVdlYlZpZXcoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLUGFnZUdyb3VwUmVm
IHBhZ2VHcm91cCwKICAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwog
CiAgICAgaWYgKG1fdXNpbmdGaXhlZExheW91dCkgewotICAgICAgICBtX3ZpZXcgPSB0b0ltcGwo
V0tWaWV3Q3JlYXRlV2l0aEZpeGVkTGF5b3V0KGV2YXMsIGNvbnRleHQsIHBhZ2VHcm91cCkpOwot
ICAgICAgICBldmFzX29iamVjdF9yZXNpemUobV92aWV3LCA4MDAsIDYwMCk7CisgICAgICAgIG1f
dmlldyA9IFdLVmlld0NyZWF0ZVdpdGhGaXhlZExheW91dChldmFzLCBjb250ZXh0LCBwYWdlR3Jv
dXApOworICAgICAgICBldmFzX29iamVjdF9yZXNpemUoV0tWaWV3R2V0RXZhc09iamVjdChtX3Zp
ZXcpLCA4MDAsIDYwMCk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1fdmlldyA9IHRvSW1wbChXS1Zp
ZXdDcmVhdGUoZXZhcywgY29udGV4dCwgcGFnZUdyb3VwKSk7CisgICAgICAgIG1fdmlldyA9IFdL
Vmlld0NyZWF0ZShldmFzLCBjb250ZXh0LCBwYWdlR3JvdXApOwogCi0gICAgZXdrX3ZpZXdfdGhl
bWVfc2V0KG1fdmlldywgVEhFTUVfRElSIi9kZWZhdWx0LmVkaiIpOworICAgIGV3a192aWV3X3Ro
ZW1lX3NldChXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIFRIRU1FX0RJUiIvZGVmYXVsdC5l
ZGoiKTsKICAgICBtX3dpbmRvd0lzS2V5ID0gZmFsc2U7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyht
X3ZpZXcpOworICAgIGV2YXNfb2JqZWN0X3Nob3coV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcp
KTsKIH0KIAogUGxhdGZvcm1XZWJWaWV3Ojp+UGxhdGZvcm1XZWJWaWV3KCkKIHsKLSAgICBldmFz
X29iamVjdF9kZWwobV92aWV3KTsKKyAgICBldmFzX29iamVjdF9kZWwoV0tWaWV3R2V0RXZhc09i
amVjdChtX3ZpZXcpKTsKICAgICBlY29yZV9ldmFzX2ZyZWUobV93aW5kb3cpOwogfQogCiB2b2lk
IFBsYXRmb3JtV2ViVmlldzo6cmVzaXplVG8odW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdo
dCkKIHsKLSAgICBldmFzX29iamVjdF9yZXNpemUobV92aWV3LCB3aWR0aCwgaGVpZ2h0KTsKKyAg
ICBldmFzX29iamVjdF9yZXNpemUoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCB3aWR0aCwg
aGVpZ2h0KTsKIH0KIAogV0tQYWdlUmVmIFBsYXRmb3JtV2ViVmlldzo6cGFnZSgpCiB7Ci0gICAg
cmV0dXJuIFdLVmlld0dldFBhZ2UodG9BUEkobV92aWV3KSk7CisgICAgcmV0dXJuIFdLVmlld0dl
dFBhZ2UobV92aWV3KTsKIH0KIAogdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OmZvY3VzKCkKIHsKKyAg
ICBFdmFzX09iamVjdCogZXZhc09iamVjdCA9IFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KTsK
ICAgICAvLyBJbiBhIGZldyBjYXNlcywgYW4gaWZyYW1lIG1pZ2h0IHJlY2VpdmUgZm9jdXMgZnJv
bSBKYXZhU2NyaXB0IGFuZCBFdmFzIGlzIG5vdCBhd2FyZSBvZiBpdCBhdCBhbGwKICAgICAvLyAo
V2ViQ29yZVN1cHBvcnQ6OmZvY3VzZWRGcmFtZUNoYW5nZWQoKSBkb2VzIG5vdCBlbWl0IGFueSBu
b3RpZmljYXRpb24pLiBXZSB0aGVuIG1hbnVhbGx5IHJlbW92ZSB0aGUKICAgICAvLyBmb2N1cyBm
cm9tIHRoZSB2aWV3IHRvIG1ha2UgdGhlIGNhbGwgZ2l2ZSBmb2N1cyB0byBldmFzX29iamVjdF9m
b2N1c19zZXQoLi4uLCB0cnVlKSB0byBiZSBlZmZlY3RmdWwuCi0gICAgaWYgKFdLUGFnZUdldEZv
Y3VzZWRGcmFtZShwYWdlKCkpICE9IFdLUGFnZUdldE1haW5GcmFtZShwYWdlKCkpKQotICAgICAg
ICBldmFzX29iamVjdF9mb2N1c19zZXQobV92aWV3LCBmYWxzZSk7Ci0gICAgZXZhc19vYmplY3Rf
Zm9jdXNfc2V0KG1fdmlldywgdHJ1ZSk7CisgICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KFdLVmll
d0dldEV2YXNPYmplY3QobV92aWV3KSwgV0tQYWdlR2V0Rm9jdXNlZEZyYW1lKHBhZ2UoKSkgPT0g
V0tQYWdlR2V0TWFpbkZyYW1lKHBhZ2UoKSkpOwogfQogCiBXS1JlY3QgUGxhdGZvcm1XZWJWaWV3
Ojp3aW5kb3dGcmFtZSgpCiB7CiAgICAgaW50IHgsIHksIHdpZHRoLCBoZWlnaHQ7CiAKLSAgICBF
Y29yZV9FdmFzKiBlZSA9IGVjb3JlX2V2YXNfZWNvcmVfZXZhc19nZXQoZXZhc19vYmplY3RfZXZh
c19nZXQobV92aWV3KSk7Ci0gICAgZWNvcmVfZXZhc19yZXF1ZXN0X2dlb21ldHJ5X2dldChlZSwg
JngsICZ5LCAmd2lkdGgsICZoZWlnaHQpOworICAgIGVjb3JlX2V2YXNfcmVxdWVzdF9nZW9tZXRy
eV9nZXQobV93aW5kb3csICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0KTsKIAogICAgIHJldHVybiBX
S1JlY3RNYWtlKHgsIHksIHdpZHRoLCBoZWlnaHQpOwogfQogCiB2b2lkIFBsYXRmb3JtV2ViVmll
dzo6c2V0V2luZG93RnJhbWUoV0tSZWN0IGZyYW1lKQogewotICAgIEVjb3JlX0V2YXMqIGVlID0g
ZWNvcmVfZXZhc19lY29yZV9ldmFzX2dldChldmFzX29iamVjdF9ldmFzX2dldChtX3ZpZXcpKTsK
LSAgICBlY29yZV9ldmFzX21vdmVfcmVzaXplKGVlLCBmcmFtZS5vcmlnaW4ueCwgZnJhbWUub3Jp
Z2luLnksIGZyYW1lLnNpemUud2lkdGgsIGZyYW1lLnNpemUuaGVpZ2h0KTsKKyAgICBlY29yZV9l
dmFzX21vdmVfcmVzaXplKG1fd2luZG93LCBmcmFtZS5vcmlnaW4ueCwgZnJhbWUub3JpZ2luLnks
IGZyYW1lLnNpemUud2lkdGgsIGZyYW1lLnNpemUuaGVpZ2h0KTsKIH0KIAogdm9pZCBQbGF0Zm9y
bVdlYlZpZXc6OmFkZENocm9tZUlucHV0RmllbGQoKQpAQCAtMTI3LDE1ICsxMjQsMTIgQEAgdm9p
ZCBQbGF0Zm9ybVdlYlZpZXc6Om1ha2VXZWJWaWV3Rmlyc3RSZXNwb25kZXIoKQogCiBXS1JldGFp
blB0cjxXS0ltYWdlUmVmPiBQbGF0Zm9ybVdlYlZpZXc6OndpbmRvd1NuYXBzaG90SW1hZ2UoKQog
ewotICAgIEVjb3JlX0V2YXMqIGVlID0gZWNvcmVfZXZhc19lY29yZV9ldmFzX2dldChldmFzX29i
amVjdF9ldmFzX2dldChtX3ZpZXcpKTsKLSAgICBBU1NFUlQoZWUpOwotCiAgICAgaW50IHdpZHRo
OwogICAgIGludCBoZWlnaHQ7Ci0gICAgZWNvcmVfZXZhc19nZW9tZXRyeV9nZXQoZWUsIDAsIDAs
ICZ3aWR0aCwgJmhlaWdodCk7CisgICAgZWNvcmVfZXZhc19nZW9tZXRyeV9nZXQobV93aW5kb3cs
IDAsIDAsICZ3aWR0aCwgJmhlaWdodCk7CiAgICAgQVNTRVJUKHdpZHRoID4gMCAmJiBoZWlnaHQg
PiAwKTsKIAotICAgIHJldHVybiBhZG9wdFdLKFdLVmlld0NyZWF0ZVNuYXBzaG90KHRvQVBJKG1f
dmlldykpKTsKKyAgICByZXR1cm4gYWRvcHRXSyhXS1ZpZXdDcmVhdGVTbmFwc2hvdChtX3ZpZXcp
KTsKIH0KIAogYm9vbCBQbGF0Zm9ybVdlYlZpZXc6OnZpZXdTdXBwb3J0c09wdGlvbnMoV0tEaWN0
aW9uYXJ5UmVmIG9wdGlvbnMpIGNvbnN0Ci0tIAoxLjcuMTAuNAoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184760</attachid>
            <date>2013-01-25 08:36:53 -0800</date>
            <delta_ts>2013-01-28 02:02:47 -0800</delta_ts>
            <desc>Patch (work in progress)</desc>
            <filename>0001-WIP.patch</filename>
            <type>text/plain</type>
            <size>29862</size>
            <attacher name="Kenneth Rohde Christiansen">kenneth</attacher>
            
              <data encoding="base64">RnJvbSA2YzIxMzg0NDk2NmRjNTQyNzUxN2JiNmZiYWYwYzMwYjRlNmNjODQ2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiA8a2VubmV0aEB3
ZWJraXQub3JnPgpEYXRlOiBGcmksIDI1IEphbiAyMDEzIDExOjUzOjQ2ICswMTAwClN1YmplY3Q6
IFtQQVRDSF0gV0lQCgotLS0KIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tB
UElDYXN0RWZsLmggIHwgICAxMCArLQogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2Vm
bC9XS1ZpZXcuY3BwICAgICAgfCAgIDM2ICsrKystLQogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9DL2VmbC9XS1ZpZXcuaCAgICAgICAgfCAgIDE1ICsrLQogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAgICAgICAgfCAgMTE5ICsrKysrKysrKysrKy0tLS0t
LS0tCiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmggICAgICAgICB8
ICAgNDIgKysrKysrLQogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcu
Y3BwICAgICAgfCAgICA5ICstCiAuLi4vV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmll
d19wcml2YXRlLmggICB8ICAgIDIgKy0KIC4uLi9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5z
cGVjdG9yUHJveHlFZmwuY3BwIHwgICAxMSArLQogVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9y
bVdlYlZpZXcuaCAgICAgICAgICAgICAgfCAgICA3ICstCiBUb29scy9UZXN0V2ViS2l0QVBJL2Vm
bC9QbGF0Zm9ybVdlYlZpZXcuY3BwICAgICAgICB8ICAgMTggKy0tCiBUb29scy9XZWJLaXRUZXN0
UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oICAgICAgICAgICB8ICAgIDcgKy0KIFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwIHwgICAgOCArLQogVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNwcCAgfCAgIDM2ICsrKy0t
LQogMTMgZmlsZXMgY2hhbmdlZCwgMTk5IGluc2VydGlvbnMoKyksIDEyMSBkZWxldGlvbnMoLSkK
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLQVBJQ2Fz
dEVmbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS0FQSUNhc3RFZmwu
aAppbmRleCBiMDEzYTBhLi4xODg5ZmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvZWZsL1dLQVBJQ2FzdEVmbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQy9lZmwvV0tBUElDYXN0RWZsLmgKQEAgLTI0LDE1ICsyNCwxMSBAQAogI2Vycm9y
ICJQbGVhc2UgI2luY2x1ZGUgXCJXS0FQSUNhc3QuaFwiIGluc3RlYWQgb2YgdGhpcyBmaWxlIGRp
cmVjdGx5LiIKICNlbmRpZgogCi0jaWYgVVNFKEVPKQotdHlwZWRlZiBzdHJ1Y3QgX0VvIEV2YXNf
T2JqZWN0OwotI2Vsc2UKLXR5cGVkZWYgc3RydWN0IF9FdmFzX09iamVjdCBFdmFzX09iamVjdDsK
LSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotV0tfQUREX0FQSV9NQVBQSU5HKFdLVmll
d1JlZiwgRXZhc19PYmplY3QpCitjbGFzcyBXZWJWaWV3OworCitXS19BRERfQVBJX01BUFBJTkco
V0tWaWV3UmVmLCBXZWJWaWV3KQogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9lZmwvV0tWaWV3LmNwcAppbmRleCAzMmI5ZDhmLi44MTY3Y2MyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwCkBAIC0yOSwyNCArMjksNDYg
QEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogV0tWaWV3UmVmIFdLVmlld0NyZWF0ZShFdmFz
KiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3Jv
dXBSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKGV3a192aWV3X2Jhc2VfYWRkKGNhbnZhcywgY29u
dGV4dFJlZiwgcGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlvcikpOworICAgIHJl
dHVybiBld2tfdmlld19iYXNlX2FkZChjYW52YXMsIGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZiwg
RXdrVmlldzo6TGVnYWN5QmVoYXZpb3IpLT53a1ZpZXcoKTsKIH0KIAogV0tWaWV3UmVmIFdLVmll
d0NyZWF0ZVdpdGhGaXhlZExheW91dChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0
UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKGV3
a192aWV3X2Jhc2VfYWRkKGNhbnZhcywgY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmLCBFd2tWaWV3
OjpEZWZhdWx0QmVoYXZpb3IpKTsKKyAgICByZXR1cm4gZXdrX3ZpZXdfYmFzZV9hZGQoY2FudmFz
LCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OkRlZmF1bHRCZWhhdmlvciktPndr
VmlldygpOworfQorCit2b2lkIFdLVmlld0luaXRpYWxpemUoV0tWaWV3UmVmIHZpZXdSZWYpCit7
CisgICAgdG9JbXBsKHZpZXdSZWYpLT5pbml0aWFsaXplKCk7CiB9CiAKIFdLUGFnZVJlZiBXS1Zp
ZXdHZXRQYWdlKFdLVmlld1JlZiB2aWV3UmVmKQogewotICAgIEV3a1ZpZXcqIHZpZXcgPSBFd2tW
aWV3Ojpmcm9tRXZhc09iamVjdCh0b0ltcGwodmlld1JlZikpOworICAgIHJldHVybiB0b0ltcGwo
dmlld1JlZiktPnBhZ2VSZWYoKTsKK30KIAotICAgIHJldHVybiB2aWV3LT53a1BhZ2UoKTsKK3Zv
aWQgV0tWaWV3U2V0VGhlbWVQYXRoKFdLVmlld1JlZiB2aWV3UmVmLCBXS1N0cmluZ1JlZiB0aGVt
ZSkKK3sKKyAgICB0b0ltcGwodmlld1JlZiktPnNldFRoZW1lUGF0aCh0aGVtZSk7CiB9CiAKLVdL
SW1hZ2VSZWYgV0tWaWV3Q3JlYXRlU25hcHNob3QoV0tWaWV3UmVmIHZpZXdSZWYpCit2b2lkIFdL
Vmlld1N1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyhXS1ZpZXdSZWYgdmlld1Jl
ZikKIHsKLSAgICBFd2tWaWV3KiB2aWV3ID0gRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QodG9JbXBs
KHZpZXdSZWYpKTsKKyAgICB0b0ltcGwodmlld1JlZiktPnN1c3BlbmRBY3RpdmVET01PYmplY3Rz
QW5kQW5pbWF0aW9ucygpOworfQogCi0gICAgcmV0dXJuIFdLSW1hZ2VDcmVhdGVGcm9tQ2Fpcm9T
dXJmYWNlKHZpZXctPnRha2VTbmFwc2hvdCgpLmdldCgpLCAwIC8qIG9wdGlvbnMgKi8pOwordm9p
ZCBXS1ZpZXdSZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyhXS1ZpZXdSZWYgdmll
d1JlZikKK3sKKyAgICB0b0ltcGwodmlld1JlZiktPnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRB
bmltYXRpb25zKCk7Cit9CisKK0V2YXNfT2JqZWN0KiBXS1ZpZXdHZXRFdmFzT2JqZWN0KFdLVmll
d1JlZiB2aWV3UmVmKQoreworICAgIHJldHVybiB0b0ltcGwodmlld1JlZiktPmV2YXNPYmplY3Qo
KTsKK30KKworV0tJbWFnZVJlZiBXS1ZpZXdDcmVhdGVTbmFwc2hvdChXS1ZpZXdSZWYgdmlld1Jl
ZikKK3sKKyAgICBFd2tWaWV3KiBld2tWaWV3ID0gRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QodG9J
bXBsKHZpZXdSZWYpLT5ldmFzT2JqZWN0KCkpOworICAgIHJldHVybiBXS0ltYWdlQ3JlYXRlRnJv
bUNhaXJvU3VyZmFjZShld2tWaWV3LT50YWtlU25hcHNob3QoKS5nZXQoKSwgMCAvKiBvcHRpb25z
ICovKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwv
V0tWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5oCmlu
ZGV4IGNjNzMwN2MuLjIwYzMzMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9lZmwvV0tWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
L2VmbC9XS1ZpZXcuaApAQCAtMjQsOCArMjQsMTAgQEAKIAogI2lmIFVTRShFTykKIHR5cGVkZWYg
c3RydWN0IF9FbyBFdmFzOwordHlwZWRlZiBzdHJ1Y3QgX0VvIEV2YXNfT2JqZWN0OwogI2Vsc2UK
IHR5cGVkZWYgc3RydWN0IF9FdmFzIEV2YXM7Cit0eXBlZGVmIHN0cnVjdCBfRXZhc19PYmplY3Qg
RXZhc19PYmplY3Q7CiAjZW5kaWYKIAogI2lmZGVmIF9fY3BsdXNwbHVzCkBAIC0zNiw5ICszOCwx
OCBAQCBXS19FWFBPUlQgV0tWaWV3UmVmIFdLVmlld0NyZWF0ZShFdmFzKiBjYW52YXMsIFdLQ29u
dGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91cAogCiBXS19FWFBPUlQgV0tWaWV3UmVmIFdLVmll
d0NyZWF0ZVdpdGhGaXhlZExheW91dChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0
LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXApOwogCi1XS19FWFBPUlQgV0tQYWdlUmVmIFdLVmll
d0dldFBhZ2UoV0tWaWV3UmVmIHZpZXcpOworV0tfRVhQT1JUIHZvaWQgV0tWaWV3SW5pdGlhbGl6
ZShXS1ZpZXdSZWYpOwogCi1XS19FWFBPUlQgV0tJbWFnZVJlZiBXS1ZpZXdDcmVhdGVTbmFwc2hv
dChXS1ZpZXdSZWYgdmlld1JlZik7CitXS19FWFBPUlQgV0tQYWdlUmVmIFdLVmlld0dldFBhZ2Uo
V0tWaWV3UmVmKTsKKworV0tfRVhQT1JUIHZvaWQgV0tWaWV3U2V0VGhlbWVQYXRoKFdLVmlld1Jl
ZiwgV0tTdHJpbmdSZWYpOworCitXS19FWFBPUlQgdm9pZCBXS1ZpZXdTdXNwZW5kQWN0aXZlRE9N
T2JqZWN0c0FuZEFuaW1hdGlvbnMoV0tWaWV3UmVmKTsKK1dLX0VYUE9SVCB2b2lkIFdLVmlld1Jl
c3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKFdLVmlld1JlZik7CisKK1dLX0VYUE9S
VCBFdmFzX09iamVjdCogV0tWaWV3R2V0RXZhc09iamVjdChXS1ZpZXdSZWYpOworCitXS19FWFBP
UlQgV0tJbWFnZVJlZiBXS1ZpZXdDcmVhdGVTbmFwc2hvdChXS1ZpZXdSZWYpOwogCiAjaWZkZWYg
X19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL0V3a1ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmll
dy5jcHAKaW5kZXggMTMzYTE1Zi4uM2QxODBlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAKQEAgLTM4LDcgKzM4LDkgQEAKICNpbmNsdWRlICJXS0Rp
Y3Rpb25hcnkuaCIKICNpbmNsdWRlICJXS0dlb21ldHJ5LmgiCiAjaW5jbHVkZSAiV0tOdW1iZXIu
aCIKKyNpbmNsdWRlICJXS1BhZ2VHcm91cC5oIgogI2luY2x1ZGUgIldLU3RyaW5nLmgiCisjaW5j
bHVkZSAiV0tWaWV3LmgiCiAjaW5jbHVkZSAiV2ViQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYklt
YWdlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCkBAIC0xMTAsMTQgKzExMiw1NSBAQCBj
b25zdCBFdmFzX09iamVjdCogRXdrVmlldzo6dmlld0Zyb21QYWdlVmlld01hcChjb25zdCBXS1Bh
Z2VSZWYgcGFnZSkKICAgICByZXR1cm4gcGFnZVZpZXdNYXAoKS5nZXQocGFnZSk7CiB9CiAKLUV3
a1ZpZXc6OkV3a1ZpZXcoRXZhc19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdrQ29u
dGV4dD4gY29udGV4dCwgUGFzc1JlZlB0cjxXZWJQYWdlR3JvdXA+IHBhZ2VHcm91cCwgVmlld0Jl
aGF2aW9yIGJlaGF2aW9yKQotICAgIDogbV9ldmFzT2JqZWN0KGV2YXNPYmplY3QpCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworV2ViVmlldzo6V2ViVmlldyhXZWJDb250ZXh0KiBjb250ZXh0LCBQYWdl
Q2xpZW50KiBwYWdlQ2xpZW50LCBXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCwgRXZhc19PYmplY3Qq
IGV2YXNPYmplY3QpCisgICAgOiBtX3dlYlBhZ2VQcm94eShjb250ZXh0LT5jcmVhdGVXZWJQYWdl
KHBhZ2VDbGllbnQsIHBhZ2VHcm91cCkpCisgICAgLCBtX2V2YXNPYmplY3QoZXZhc09iamVjdCkK
K3sKKyAgICBtX3dlYlBhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKHRydWUpOworICAgIG1fd2ViUGFnZVByb3h5LT5w
YWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0Rm9yY2VDb21wb3NpdGluZ01vZGUodHJ1ZSk7
CisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgbV93ZWJQYWdlUHJveHktPmZ1bGxT
Y3JlZW5NYW5hZ2VyKCktPnNldFdlYlZpZXcobV9ldmFzT2JqZWN0KTsKKyNlbmRpZgorfQorCitX
ZWJWaWV3Ojp+V2ViVmlldygpCit7CisgICAgbV93ZWJQYWdlUHJveHktPmNsb3NlKCk7Cit9CisK
K3ZvaWQgV2ViVmlldzo6aW5pdGlhbGl6ZSgpCit7CisgICAgbV93ZWJQYWdlUHJveHktPmluaXRp
YWxpemVXZWJQYWdlKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6c2V0VGhlbWVQYXRoKFdLU3RyaW5n
UmVmIHRoZW1lKQoreworICAgIG1fd2ViUGFnZVByb3h5LT5zZXRUaGVtZVBhdGgodG9XVEZTdHJp
bmcodGhlbWUpLnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIFdlYlZpZXc6OnN1c3BlbmRBY3Rp
dmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpCit7CisgICAgbV93ZWJQYWdlUHJveHktPnN1c3Bl
bmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworfQorCit2b2lkIFdlYlZpZXc6OnJl
c3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCkKK3sKKyAgICBtX3dlYlBhZ2VQcm94
eS0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKK0V3a1ZpZXc6OkV3a1ZpZXcoRXZhc19PYmplY3QqIHZpZXcsIFBhc3NS
ZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgV2ViUGFnZUdyb3VwKiBwYWdlR3JvdXAsIFZpZXdC
ZWhhdmlvciBiZWhhdmlvcikKKyAgICA6IG1fZXZhc09iamVjdCh2aWV3KQogICAgICwgbV9jb250
ZXh0KGNvbnRleHQpCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgICwgbV9w
ZW5kaW5nU3VyZmFjZVJlc2l6ZShmYWxzZSkKICNlbmRpZgogICAgICwgbV9wYWdlQ2xpZW50KGJl
aGF2aW9yID09IERlZmF1bHRCZWhhdmlvciA/IFBhZ2VDbGllbnREZWZhdWx0SW1wbDo6Y3JlYXRl
KHRoaXMpIDogUGFnZUNsaWVudExlZ2FjeUltcGw6OmNyZWF0ZSh0aGlzKSkKLSAgICAsIG1fcGFn
ZVByb3h5KG1fY29udGV4dC0+d2ViQ29udGV4dCgpLT5jcmVhdGVXZWJQYWdlKG1fcGFnZUNsaWVu
dC5nZXQoKSwgcGFnZUdyb3VwLmdldCgpKSkKKyAgICAsIG1fd2ViVmlldyhhZG9wdFB0cihuZXcg
V2ViVmlldyhtX2NvbnRleHQtPndlYkNvbnRleHQoKS5nZXQoKSwgbV9wYWdlQ2xpZW50LmdldCgp
LCBwYWdlR3JvdXAsIHZpZXcpKSkKICAgICAsIG1fcGFnZUxvYWRDbGllbnQoUGFnZUxvYWRDbGll
bnRFZmw6OmNyZWF0ZSh0aGlzKSkKICAgICAsIG1fcGFnZVBvbGljeUNsaWVudChQYWdlUG9saWN5
Q2xpZW50RWZsOjpjcmVhdGUodGhpcykpCiAgICAgLCBtX3BhZ2VVSUNsaWVudChQYWdlVUlDbGll
bnRFZmw6OmNyZWF0ZSh0aGlzKSkKQEAgLTEyNyw3ICsxNzAsNyBAQCBFd2tWaWV3OjpFd2tWaWV3
KEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQs
IFBhc3NSZQogI2lmIEVOQUJMRShWSUJSQVRJT04pCiAgICAgLCBtX3ZpYnJhdGlvbkNsaWVudChW
aWJyYXRpb25DbGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKICNlbmRpZgotICAgICwgbV9iYWNrRm9y
d2FyZExpc3QoRXdrQmFja0ZvcndhcmRMaXN0OjpjcmVhdGUodG9BUEkobV9wYWdlUHJveHktPmJh
Y2tGb3J3YXJkTGlzdCgpKSkpCisgICAgLCBtX2JhY2tGb3J3YXJkTGlzdChFd2tCYWNrRm9yd2Fy
ZExpc3Q6OmNyZWF0ZShXS1BhZ2VHZXRCYWNrRm9yd2FyZExpc3Qod2tQYWdlKCkpKSkKICNpZiBV
U0UoVElMRURfQkFDS0lOR19TVE9SRSkKICAgICAsIG1fcGFnZVNjYWxlRmFjdG9yKDEpCiAjZW5k
aWYKQEAgLTE0NCwyOSArMTg3LDE4IEBAIEV3a1ZpZXc6OkV3a1ZpZXcoRXZhc19PYmplY3QqIGV2
YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgUGFzc1JlCiB7CiAgICAg
QVNTRVJUKG1fZXZhc09iamVjdCk7CiAgICAgQVNTRVJUKG1fY29udGV4dCk7Ci0gICAgQVNTRVJU
KG1fcGFnZVByb3h5KTsKIAotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBtX3Bh
Z2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdFbmFibGVkKHRydWUpOwotICAgIG1fcGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVy
ZW5jZXMoKS0+c2V0Rm9yY2VDb21wb3NpdGluZ01vZGUodHJ1ZSk7Ci0jaWYgRU5BQkxFKFdFQkdM
KQotICAgIG1fcGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0V2ViR0xF
bmFibGVkKHRydWUpOwotI2VuZGlmCi0gICAgaWYgKGJlaGF2aW9yID09IERlZmF1bHRCZWhhdmlv
cikKLSAgICAgICAgbV9wYWdlUHJveHktPnNldFVzZUZpeGVkTGF5b3V0KHRydWUpOwotI2VuZGlm
CisgICAgV0tWaWV3SW5pdGlhbGl6ZSh3a1ZpZXcoKSk7CiAKLSAgICBtX3BhZ2VQcm94eS0+aW5p
dGlhbGl6ZVdlYlBhZ2UoKTsKKyAgICBXS1BhZ2VTZXRVc2VGaXhlZExheW91dCh3a1BhZ2UoKSwg
YmVoYXZpb3IgPT0gRGVmYXVsdEJlaGF2aW9yKTsKIAotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQ
SSkKLSAgICBtX3BhZ2VQcm94eS0+ZnVsbFNjcmVlbk1hbmFnZXIoKS0+c2V0V2ViVmlldyhtX2V2
YXNPYmplY3QpOwotICAgIG1fcGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+
c2V0RnVsbFNjcmVlbkVuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoV0VCX0FVRElP
KQotICAgIG1fcGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0V2ViQXVk
aW9FbmFibGVkKHRydWUpOwotI2VuZGlmCisgICAgV0tQYWdlR3JvdXBSZWYgd2tQYWdlR3JvdXAg
PSBXS1BhZ2VHZXRQYWdlR3JvdXAod2tQYWdlKCkpOworICAgIFdLUHJlZmVyZW5jZXNSZWYgd2tQ
cmVmZXJlbmNlcyA9IFdLUGFnZUdyb3VwR2V0UHJlZmVyZW5jZXMod2tQYWdlR3JvdXApOwogCi0g
ICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRPZmZsaW5lV2Vi
QXBwbGljYXRpb25DYWNoZUVuYWJsZWQodHJ1ZSk7CisgICAgV0tQcmVmZXJlbmNlc1NldFdlYkdM
RW5hYmxlZCh3a1ByZWZlcmVuY2VzLCB0cnVlKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0RnVsbFNj
cmVlbkVuYWJsZWQod2tQcmVmZXJlbmNlcywgdHJ1ZSk7CisgICAgV0tQcmVmZXJlbmNlc1NldFdl
YkF1ZGlvRW5hYmxlZCh3a1ByZWZlcmVuY2VzLCB0cnVlKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0
T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKHdrUHJlZmVyZW5jZXMsIHRydWUpOwog
CiAgICAgLy8gRW5hYmxlIG1vdXNlIGV2ZW50cyBieSBkZWZhdWx0CiAgICAgc2V0TW91c2VFdmVu
dHNFbmFibGVkKHRydWUpOwpAQCAtMTgyLDggKzIxNCw2IEBAIEV3a1ZpZXc6OkV3a1ZpZXcoRXZh
c19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgUGFz
c1JlCiAKIEV3a1ZpZXc6On5Fd2tWaWV3KCkKIHsKLSAgICBtX3BhZ2VQcm94eS0+Y2xvc2UoKTsK
LQogICAgIC8vIFVucmVnaXN0ZXIgaWNvbiBjaGFuZ2UgY2FsbGJhY2suCiAgICAgRXdrRmF2aWNv
bkRhdGFiYXNlKiBpY29uRGF0YWJhc2UgPSBtX2NvbnRleHQtPmZhdmljb25EYXRhYmFzZSgpOwog
ICAgIEFTU0VSVChpY29uRGF0YWJhc2UpOwpAQCAtMjExLDkgKzI0MSw5IEBAIEV3a1ZpZXcqIEV3
a1ZpZXc6OmZyb21FdmFzT2JqZWN0KGNvbnN0IEV2YXNfT2JqZWN0KiB2aWV3KQogICogQGludGVy
bmFsCiAgKiBSZXRyaWV2ZXMgdGhlIGludGVybmFsIFdLUGFnZSBmb3IgdGhpcyB2aWV3LgogICov
Ci1XS1BhZ2VSZWYgRXdrVmlldzo6d2tQYWdlKCkKK1dLUGFnZVJlZiBFd2tWaWV3Ojp3a1BhZ2Uo
KSBjb25zdAogewotICAgIHJldHVybiB0b0FQSShtX3BhZ2VQcm94eS5nZXQoKSk7CisgICAgcmV0
dXJuIFdLVmlld0dldFBhZ2Uod2tWaWV3KCkpOwogfQogCiB2b2lkIEV3a1ZpZXc6OnNldEN1cnNv
cihjb25zdCBDdXJzb3ImIGN1cnNvcikKQEAgLTI5Nyw3ICszMjcsNyBAQCB2b2lkIEV3a1ZpZXc6
OnNldERldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlKQogCiBmbG9hdCBFd2tWaWV3OjpkZXZp
Y2VTY2FsZUZhY3RvcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcGFnZVByb3h5LT5kZXZpY2VT
Y2FsZUZhY3RvcigpOworICAgIHJldHVybiBXS1BhZ2VHZXRCYWNraW5nU2NhbGVGYWN0b3Iod2tQ
YWdlKCkpOwogfQogCiBBZmZpbmVUcmFuc2Zvcm0gRXdrVmlldzo6dHJhbnNmb3JtRnJvbVNjZW5l
KCkgY29uc3QKQEAgLTUyMyw3ICs1NTMsNyBAQCBib29sIEV3a1ZpZXc6OmlzVmlzaWJsZSgpIGNv
bnN0CiAKIGNvbnN0IGNoYXIqIEV3a1ZpZXc6OnRpdGxlKCkgY29uc3QKIHsKLSAgICBtX3RpdGxl
ID0gbV9wYWdlUHJveHktPnBhZ2VUaXRsZSgpLnV0ZjgoKS5kYXRhKCk7CisgICAgbV90aXRsZSA9
IFdLRWluYVNoYXJlZFN0cmluZyhBZG9wdFdLLCBXS1BhZ2VDb3B5VGl0bGUod2tQYWdlKCkpKTsK
IAogICAgIHJldHVybiBtX3RpdGxlOwogfQpAQCAtNTQ2LDI0ICs1NzYsMjYgQEAgdm9pZCBFd2tW
aWV3OjpzZXRUaGVtZVBhdGgoY29uc3QgY2hhciogdGhlbWUpCiB7CiAgICAgaWYgKG1fdGhlbWUg
IT0gdGhlbWUpIHsKICAgICAgICAgbV90aGVtZSA9IHRoZW1lOwotICAgICAgICBtX3BhZ2VQcm94
eS0+c2V0VGhlbWVQYXRoKHRoZW1lKTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHdrVGhlbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHRoZW1lKSk7
CisgICAgICAgIFdLVmlld1NldFRoZW1lUGF0aCh3a1ZpZXcoKSwgd2tUaGVtZS5nZXQoKSk7CiAg
ICAgfQogfQogCiBjb25zdCBjaGFyKiBFd2tWaWV3OjpjdXN0b21UZXh0RW5jb2RpbmdOYW1lKCkg
Y29uc3QKIHsKLSAgICBTdHJpbmcgY3VzdG9tRW5jb2RpbmcgPSBtX3BhZ2VQcm94eS0+Y3VzdG9t
VGV4dEVuY29kaW5nTmFtZSgpOwotICAgIGlmIChjdXN0b21FbmNvZGluZy5pc0VtcHR5KCkpCisg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGN1c3RvbUVuY29kaW5nID0gYWRvcHRXSyhXS1Bh
Z2VDb3B5Q3VzdG9tVGV4dEVuY29kaW5nTmFtZSh3a1BhZ2UoKSkpOworICAgIGlmIChXS1N0cmlu
Z0lzRW1wdHkoY3VzdG9tRW5jb2RpbmcuZ2V0KCkpKQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IG1fY3VzdG9tRW5jb2RpbmcgPSBjdXN0b21FbmNvZGluZy51dGY4KCkuZGF0YSgpOworICAgIG1f
Y3VzdG9tRW5jb2RpbmcgPSBXS0VpbmFTaGFyZWRTdHJpbmcoY3VzdG9tRW5jb2RpbmcuZ2V0KCkp
OwogCiAgICAgcmV0dXJuIG1fY3VzdG9tRW5jb2Rpbmc7CiB9CiAKIHZvaWQgRXdrVmlldzo6c2V0
Q3VzdG9tVGV4dEVuY29kaW5nTmFtZShjb25zdCBTdHJpbmcmIGVuY29kaW5nKQogewotICAgIG1f
cGFnZVByb3h5LT5zZXRDdXN0b21UZXh0RW5jb2RpbmdOYW1lKGVuY29kaW5nKTsKKyAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gd2tFbmNvZGluZyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoZW5jb2RpbmcudXRmOCgpLmRhdGEoKSkpOworICAgIFdLUGFnZVNldEN1
c3RvbVRleHRFbmNvZGluZ05hbWUod2tQYWdlKCksIHdrRW5jb2RpbmcuZ2V0KCkpOwogfQogCiB2
b2lkIEV3a1ZpZXc6OnNldE1vdXNlRXZlbnRzRW5hYmxlZChib29sIGVuYWJsZWQpCkBAIC02NDUs
OSArNjc3LDYgQEAgYm9vbCBFd2tWaWV3OjpjcmVhdGVHTFN1cmZhY2UoY29uc3QgSW50U2l6ZSYg
dmlld1NpemUpCiAgICAgICAgIGlmICghbV9ldmFzR0wpIHsKICAgICAgICAgICAgIFdBUk4oIkZh
aWxlZCB0byBjcmVhdGUgRXZhc19HTCwgZmFsbGluZyBiYWNrIHRvIHNvZnR3YXJlIG1vZGUuIik7
CiAgICAgICAgICAgICBtX2lzSGFyZHdhcmVBY2NlbGVyYXRlZCA9IGZhbHNlOwotI2lmIEVOQUJM
RShXRUJHTCkKLSAgICAgICAgICAgIG1fcGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5j
ZXMoKS0+c2V0V2ViR0xFbmFibGVkKGZhbHNlKTsKLSNlbmRpZgogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtODkwLDE1ICs5MTksMTMgQEAgdW5zaWduZWQg
bG9uZyBsb25nIEV3a1ZpZXc6OmluZm9ybURhdGFiYXNlUXVvdGFSZWFjaGVkKGNvbnN0IFN0cmlu
ZyYgZGF0YWJhc2VOYW0KICAqLwogdm9pZCBFd2tWaWV3OjppbmZvcm1VUkxDaGFuZ2UoKQogewot
ICAgIFN0cmluZyBhY3RpdmVVUkwgPSBtX3BhZ2VQcm94eS0+YWN0aXZlVVJMKCk7Ci0gICAgaWYg
KGFjdGl2ZVVSTC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBXS1JldGFpblB0cjxX
S1VSTFJlZj4gd2tBY3RpdmVVUkwgPSBXS1BhZ2VDb3B5QWN0aXZlVVJMKHdrUGFnZSgpKTsKKyAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tVUkxTdHJpbmcgPSBXS1VSTENvcHlTdHJpbmco
d2tBY3RpdmVVUkwuZ2V0KCkpOwogCi0gICAgQ1N0cmluZyByYXdBY3RpdmVVUkwgPSBhY3RpdmVV
UkwudXRmOCgpOwotICAgIGlmIChtX3VybCA9PSByYXdBY3RpdmVVUkwuZGF0YSgpKQorICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHdrVVJMU3RyaW5nLmdldCgpLCBtX3VybCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIG1fdXJsID0gcmF3QWN0aXZlVVJMLmRhdGEoKTsKKyAg
ICBtX3VybCA9IFdLRWluYVNoYXJlZFN0cmluZyh3a1VSTFN0cmluZy5nZXQoKSk7CiAgICAgc21h
cnRDYWxsYmFjazxVUkxDaGFuZ2VkPigpLmNhbGwobV91cmwpOwogCiAgICAgLy8gVXBkYXRlIHRo
ZSB2aWV3J3MgZmF2aWNvbi4KQEAgLTEwMzAsNyArMTA1Nyw3IEBAIHZvaWQgRXdrVmlldzo6b25G
YXZpY29uQ2hhbmdlZChjb25zdCBjaGFyKiBwYWdlVVJMLCB2b2lkKiBldmVudEluZm8pCiBQYXNz
UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gRXdrVmlldzo6dGFrZVNuYXBzaG90KCkKIHsKICAgICAv
LyBTdXNwZW5kIGFsbCBhbmltYXRpb25zIGJlZm9yZSB0YWtpbmcgdGhlIHNuYXBzaG90LgotICAg
IG1fcGFnZVByb3h5LT5zdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKKyAg
ICBXS1ZpZXdTdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMod2tWaWV3KCkpOwog
CiAgICAgLy8gV2FpdCBmb3IgdGhlIHBlbmRpbmcgcmVwYWludCBldmVudHMgdG8gYmUgcHJvY2Vz
c2VkLgogICAgIHdoaWxlIChtX2Rpc3BsYXlUaW1lci5pc0FjdGl2ZSgpKQpAQCAtMTA0Miw3ICsx
MDY5LDcgQEAgUGFzc1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IEV3a1ZpZXc6OnRha2VTbmFwc2hv
dCgpCiAjZW5kaWYKICAgICAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc25hcHNob3QgPSBj
cmVhdGVTdXJmYWNlRm9ySW1hZ2Uoc2QtPmltYWdlKTsKICAgICAgICAgLy8gUmVzdW1lIGFsbCBh
bmltYXRpb25zLgotICAgICAgICBtX3BhZ2VQcm94eS0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0Fu
ZEFuaW1hdGlvbnMoKTsKKyAgICAgICAgV0tWaWV3UmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFu
aW1hdGlvbnMod2tWaWV3KCkpOwogCiAgICAgICAgIHJldHVybiBzbmFwc2hvdC5yZWxlYXNlKCk7
CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtMTA1MCw3ICsxMDc3LDcgQEAg
UGFzc1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IEV3a1ZpZXc6OnRha2VTbmFwc2hvdCgpCiAKICAg
ICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzbmFwc2hvdCA9IGdldEltYWdlU3VyZmFjZUZyb21G
cmFtZUJ1ZmZlcigwLCAwLCBzZC0+dmlldy53LCBzZC0+dmlldy5oKTsKICAgICAvLyBSZXN1bWUg
YWxsIGFuaW1hdGlvbnMuCi0gICAgbV9wYWdlUHJveHktPnJlc3VtZUFjdGl2ZURPTU9iamVjdHNB
bmRBbmltYXRpb25zKCk7CisgICAgV0tWaWV3UmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1h
dGlvbnMod2tWaWV3KCkpOwogCiAgICAgcmV0dXJuIHNuYXBzaG90LnJlbGVhc2UoKTsKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oCmluZGV4IGEyMTNm
OTcuLjExYjVhM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L0V3a1ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3
LmgKQEAgLTQ5LDYgKzQ5LDEwIEBACiAjaW5jbHVkZSAiRXZhc0dMU3VyZmFjZS5oIgogI2VuZGlm
CiAKKyNpbmNsdWRlICJXZWJDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCisj
aW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIKKwogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBD
b250ZXh0TWVudUNsaWVudEVmbDsKIGNsYXNzIEZpbmRDbGllbnRFZmw7CkBAIC05NiwyMSArMTAw
LDQ5IEBAIHR5cGVkZWYgc3RydWN0IF9FdmFzX0dMX1N1cmZhY2UgRXZhc19HTF9TdXJmYWNlOwog
CiB0eXBlZGVmIHN0cnVjdCBFd2tfVmlld19TbWFydF9EYXRhIEV3a19WaWV3X1NtYXJ0X0RhdGE7
CiAKLWNsYXNzIEV3a1ZpZXcgeworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIFBMRUFTRSBMSUNF
TlNFIFRISVMgQ0xBU1MgQVMgQlNEIQorY2xhc3MgV2ViVmlldyB7CiBwdWJsaWM6CisgICAgV2Vi
VmlldyhXZWJDb250ZXh0KiwgUGFnZUNsaWVudCosIFdlYlBhZ2VHcm91cCosIEV2YXNfT2JqZWN0
Kik7CisgICAgdmlydHVhbCB+V2ViVmlldygpOworCisgICAgdm9pZCBpbml0aWFsaXplKCk7CiAK
KyAgICBXS1BhZ2VSZWYgcGFnZVJlZigpIHsgcmV0dXJuIHRvQVBJKG1fd2ViUGFnZVByb3h5Lmdl
dCgpKTsgfQorCisgICAgdm9pZCBzZXRUaGVtZVBhdGgoV0tTdHJpbmdSZWYpOworICAgIHZvaWQg
c3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7CisgICAgdm9pZCByZXN1bWVB
Y3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworCisgICAgLy8gRklYTUU6IFJlbW92ZSB3
aGVuIHBvc3NpYmxlLgorICAgIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0KCkgeyByZXR1cm4gbV9l
dmFzT2JqZWN0OyB9CisgICAgV2ViUGFnZVByb3h5KiBwYWdlKCkgeyByZXR1cm4gbV93ZWJQYWdl
UHJveHkuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBXVEY6OlJlZlB0cjxXZWJQYWdlUHJveHk+
IG1fd2ViUGFnZVByb3h5OworICAgIEV2YXNfT2JqZWN0KiBtX2V2YXNPYmplY3Q7Cit9OworCit9
CisKK2NsYXNzIEV3a1ZpZXcgeworcHVibGljOgogICAgIGVudW0gVmlld0JlaGF2aW9yIHsKICAg
ICAgICAgTGVnYWN5QmVoYXZpb3IsCiAgICAgICAgIERlZmF1bHRCZWhhdmlvcgogICAgIH07Ci0g
ICAgRXdrVmlldyhFdmFzX09iamVjdCogdmlldywgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250
ZXh0LCBQYXNzUmVmUHRyPFdlYktpdDo6V2ViUGFnZUdyb3VwPiBwYWdlR3JvdXAsIFZpZXdCZWhh
dmlvcik7CisgICAgRXdrVmlldyhFdmFzX09iamVjdCogdmlldywgUGFzc1JlZlB0cjxFd2tDb250
ZXh0PiBjb250ZXh0LCBXZWJLaXQ6OldlYlBhZ2VHcm91cCogcGFnZUdyb3VwLCBWaWV3QmVoYXZp
b3IpOwogICAgIH5Fd2tWaWV3KCk7CiAKICAgICBzdGF0aWMgRXdrVmlldyogZnJvbUV2YXNPYmpl
Y3QoY29uc3QgRXZhc19PYmplY3QqIHZpZXcpOwogICAgIEV2YXNfT2JqZWN0KiB2aWV3KCkgeyBy
ZXR1cm4gbV9ldmFzT2JqZWN0OyB9CiAKLSAgICBXS1BhZ2VSZWYgd2tQYWdlKCk7Ci0gICAgV2Vi
S2l0OjpXZWJQYWdlUHJveHkqIHBhZ2UoKSB7IHJldHVybiBtX3BhZ2VQcm94eS5nZXQoKTsgfQor
ICAgIFdLVmlld1JlZiB3a1ZpZXcoKSBjb25zdCB7IHJldHVybiB0b0FQSShtX3dlYlZpZXcuZ2V0
KCkpOyB9CisgICAgV0tQYWdlUmVmIHdrUGFnZSgpIGNvbnN0OworCisgICAgV2ViS2l0OjpXZWJQ
YWdlUHJveHkqIHBhZ2UoKSB7IHJldHVybiBtX3dlYlZpZXctPnBhZ2UoKTsgfQogICAgIEV3a0Nv
bnRleHQqIGV3a0NvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KICAgICBFd2tT
ZXR0aW5ncyogc2V0dGluZ3MoKSB7IHJldHVybiBtX3NldHRpbmdzLmdldCgpOyB9CiAgICAgRXdr
QmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3QoKSB7IHJldHVybiBtX2JhY2tGb3J3YXJk
TGlzdC5nZXQoKTsgfQpAQCAtMjQ1LDcgKzI3Nyw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Bl
bmRpbmdTdXJmYWNlUmVzaXplOwogI2VuZGlmCiAgICAgT3duUHRyPFdlYktpdDo6UGFnZUNsaWVu
dEJhc2U+IG1fcGFnZUNsaWVudDsKLSAgICBSZWZQdHI8V2ViS2l0OjpXZWJQYWdlUHJveHk+IG1f
cGFnZVByb3h5OworICAgIE93blB0cjxXZWJLaXQ6OldlYlZpZXc+IG1fd2ViVmlldzsKICAgICBP
d25QdHI8V2ViS2l0OjpQYWdlTG9hZENsaWVudEVmbD4gbV9wYWdlTG9hZENsaWVudDsKICAgICBP
d25QdHI8V2ViS2l0OjpQYWdlUG9saWN5Q2xpZW50RWZsPiBtX3BhZ2VQb2xpY3lDbGllbnQ7CiAg
ICAgT3duUHRyPFdlYktpdDo6UGFnZVVJQ2xpZW50RWZsPiBtX3BhZ2VVSUNsaWVudDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAppbmRleCA3MmE2YWZh
Li5jYWUwNDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfdmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Zp
ZXcuY3BwCkBAIC01MDUsNyArNTA1LDcgQEAgc3RhdGljIGlubGluZSBFdmFzX1NtYXJ0KiBjcmVh
dGVFd2tWaWV3U21hcnRDbGFzcyh2b2lkKQogICAgIHJldHVybiBzbWFydDsKIH0KIAotc3RhdGlj
IGlubGluZSBFdmFzX09iamVjdCogY3JlYXRlRXdrVmlldyhFdmFzKiBjYW52YXMsIEV2YXNfU21h
cnQqIHNtYXJ0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFdLUGFnZUdyb3VwUmVm
IHBhZ2VHcm91cFJlZiA9IDAsIEV3a1ZpZXc6OlZpZXdCZWhhdmlvciBiZWhhdmlvciA9IEV3a1Zp
ZXc6OkRlZmF1bHRCZWhhdmlvcikKK3N0YXRpYyBpbmxpbmUgRXdrVmlldyogY3JlYXRlRXdrVmll
dyhFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+
IGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiA9IDAsIEV3a1ZpZXc6OlZpZXdC
ZWhhdmlvciBiZWhhdmlvciA9IEV3a1ZpZXc6OkRlZmF1bHRCZWhhdmlvcikKIHsKICAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY2FudmFzLCAwKTsKICAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoc21hcnQsIDApOwpAQCAtNTI1LDIxICs1MjUsMjIgQEAgc3RhdGlj
IGlubGluZSBFdmFzX09iamVjdCogY3JlYXRlRXdrVmlldyhFdmFzKiBjYW52YXMsIEV2YXNfU21h
cnQqIHNtYXJ0LCBQYXNzUmUKICAgICAvLyBEZWZhdWx0IFdlYlBhZ2VHcm91cCBpcyBjcmVhdGVk
IGluIFdlYkNvbnRleHQgY29uc3RydWN0b3IgaWYgdGhlIHBhZ2VHcm91cFJlZiBpcyAwLAogICAg
IC8vIHNvIHdlIGRvIG5vdCBuZWVkIHRvIGNyZWF0ZSBpdCBoZXJlLgogICAgIHNtYXJ0RGF0YS0+
cHJpdiA9IG5ldyBFd2tWaWV3KGV3a1ZpZXcsIGNvbnRleHQsIHRvSW1wbChwYWdlR3JvdXBSZWYp
LCBiZWhhdmlvcik7Ci0gICAgcmV0dXJuIGV3a1ZpZXc7CisKKyAgICByZXR1cm4gc21hcnREYXRh
LT5wcml2OwogfQogCiAvKioKICAqIEBpbnRlcm5hbAogICogQ29uc3RydWN0cyBhIGV3a192aWV3
IEV2YXNfT2JqZWN0IHdpdGggV0tUeXBlIHBhcmFtZXRlcnMuCiAgKi8KLUV2YXNfT2JqZWN0KiBl
d2tfdmlld19iYXNlX2FkZChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBX
S1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OlZpZXdCZWhhdmlvciBiZWhhdmlv
cikKK0V3a1ZpZXcqIGV3a192aWV3X2Jhc2VfYWRkKEV2YXMqIGNhbnZhcywgV0tDb250ZXh0UmVm
IGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwgRXdrVmlldzo6Vmlld0Jl
aGF2aW9yIGJlaGF2aW9yKQogewogICAgIHJldHVybiBjcmVhdGVFd2tWaWV3KGNhbnZhcywgY3Jl
YXRlRXdrVmlld1NtYXJ0Q2xhc3MoKSwgY29udGV4dFJlZiA/IEV3a0NvbnRleHQ6OmNyZWF0ZSh0
b0ltcGwoY29udGV4dFJlZikpIDogRXdrQ29udGV4dDo6ZGVmYXVsdENvbnRleHQoKSwgcGFnZUdy
b3VwUmVmLCBiZWhhdmlvcik7CiB9CiAKIEV2YXNfT2JqZWN0KiBld2tfdmlld19zbWFydF9hZGQo
RXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgRXdrX0NvbnRleHQqIGNvbnRleHQpCiB7
Ci0gICAgcmV0dXJuIGNyZWF0ZUV3a1ZpZXcoY2FudmFzLCBzbWFydCwgZXdrX29iamVjdF9jYXN0
PEV3a0NvbnRleHQqPihjb250ZXh0KSk7CisgICAgcmV0dXJuIGNyZWF0ZUV3a1ZpZXcoY2FudmFz
LCBzbWFydCwgZXdrX29iamVjdF9jYXN0PEV3a0NvbnRleHQqPihjb250ZXh0KSktPnZpZXcoKTsK
IH0KIAogRXZhc19PYmplY3QqIGV3a192aWV3X2FkZF93aXRoX2NvbnRleHQoRXZhcyogY2FudmFz
LCBFd2tfQ29udGV4dCogY29udGV4dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaAppbmRleCA4M2I0Yzk3Li5jNDkxMmZmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19wcml2YXRl
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0
ZS5oCkBAIC0yNSw2ICsyNSw2IEBACiAjaW5jbHVkZSA8RXZhcy5oPgogI2luY2x1ZGUgPFdlYktp
dDIvV0tCYXNlLmg+CiAKLUV2YXNfT2JqZWN0KiBld2tfdmlld19iYXNlX2FkZChFdmFzKiBjYW52
YXMsIFdLQ29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OlZpZXdCZWhhdmlvcik7
CitFd2tWaWV3KiBld2tfdmlld19iYXNlX2FkZChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiwg
V0tQYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OlZpZXdCZWhhdmlvcik7CiAKICNlbmRpZiAvLyBld2tf
dmlld19wcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwv
V2ViSW5zcGVjdG9yUHJveHlFZmwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9X
ZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAKaW5kZXggNDYyYjI2ZC4uMzE3NDQ5ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5j
cHAKQEAgLTk4LDE0ICs5OCwxNSBAQCBXZWJQYWdlUHJveHkqIFdlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybUNyZWF0ZUluc3BlY3RvclBhZ2UoKQogICAgIGlmICghbV9pbnNwZWN0b3JXaW5kb3cp
CiAgICAgICAgIHJldHVybiAwOwogCi0gICAgbV9pbnNwZWN0b3JWaWV3ID0gZXdrX3ZpZXdfYmFz
ZV9hZGQoZWNvcmVfZXZhc19nZXQobV9pbnNwZWN0b3JXaW5kb3cpLCB0b0FQSShwYWdlKCktPnBy
b2Nlc3MoKS0+Y29udGV4dCgpKSwgdG9BUEkoaW5zcGVjdG9yUGFnZUdyb3VwKCkpLCBFd2tWaWV3
OjpMZWdhY3lCZWhhdmlvcik7Ci0gICAgRXdrVmlldyogaW5zcGVjdG9yVmlld0ltcGwgPSBFd2tW
aWV3Ojpmcm9tRXZhc09iamVjdChtX2luc3BlY3RvclZpZXcpOwotICAgIGluc3BlY3RvclZpZXdJ
bXBsLT5zZXRUaGVtZVBhdGgoVEVTVF9USEVNRV9ESVIgIi9kZWZhdWx0LmVkaiIpOworICAgIC8v
IEZJWE1FOiBSZWZhY3RvciB0byB1c2UgV0tWaWV3UmVmLgorICAgIG1faW5zcGVjdG9yVmlldyA9
IGV3a192aWV3X2Jhc2VfYWRkKGVjb3JlX2V2YXNfZ2V0KG1faW5zcGVjdG9yV2luZG93KSwgdG9B
UEkocGFnZSgpLT5wcm9jZXNzKCktPmNvbnRleHQoKSksIHRvQVBJKGluc3BlY3RvclBhZ2VHcm91
cCgpKSwgRXdrVmlldzo6TGVnYWN5QmVoYXZpb3IpLT52aWV3KCk7CisgICAgRXdrVmlldyogaW5z
cGVjdG9yVmlldyA9IEV3a1ZpZXc6OmZyb21FdmFzT2JqZWN0KG1faW5zcGVjdG9yVmlldyk7Cisg
ICAgaW5zcGVjdG9yVmlldy0+c2V0VGhlbWVQYXRoKFRFU1RfVEhFTUVfRElSICIvZGVmYXVsdC5l
ZGoiKTsKIAotICAgIEV3a19TZXR0aW5ncyogc2V0dGluZ3MgPSBpbnNwZWN0b3JWaWV3SW1wbC0+
c2V0dGluZ3MoKTsKKyAgICBFd2tfU2V0dGluZ3MqIHNldHRpbmdzID0gaW5zcGVjdG9yVmlldy0+
c2V0dGluZ3MoKTsKICAgICBld2tfc2V0dGluZ3NfZmlsZV9hY2Nlc3NfZnJvbV9maWxlX3VybHNf
YWxsb3dlZF9zZXQoc2V0dGluZ3MsIHRydWUpOwogCi0gICAgcmV0dXJuIGluc3BlY3RvclZpZXdJ
bXBsLT5wYWdlKCk7CisgICAgcmV0dXJuIGluc3BlY3RvclZpZXctPnBhZ2UoKTsKIH0KIAogdm9p
ZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1PcGVuKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvUGxhdGZvcm1XZWJWaWV3LmggYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRm
b3JtV2ViVmlldy5oCmluZGV4IDVhZDFlZWQuLmRjYWY0NDggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvUGxhdGZvcm1XZWJWaWV3LmgKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9Q
bGF0Zm9ybVdlYlZpZXcuaApAQCAtNDcsMTMgKzQ3LDggQEAgdHlwZWRlZiBIV05EIFBsYXRmb3Jt
V2luZG93OwogdHlwZWRlZiBXS1ZpZXdSZWYgUGxhdGZvcm1XS1ZpZXc7CiB0eXBlZGVmIEd0a1dp
ZGdldCAqUGxhdGZvcm1XaW5kb3c7CiAjZWxpZiBQTEFURk9STShFRkwpCi0jaWYgVVNFKEVPKQot
dHlwZWRlZiBzdHJ1Y3QgX0VvIEV2YXNfT2JqZWN0OwotI2Vsc2UKLXR5cGVkZWYgc3RydWN0IF9F
dmFzX09iamVjdCBFdmFzX09iamVjdDsKLSNlbmRpZgogdHlwZWRlZiBzdHJ1Y3QgX0Vjb3JlX0V2
YXMgRWNvcmVfRXZhczsKLXR5cGVkZWYgRXZhc19PYmplY3QqIFBsYXRmb3JtV0tWaWV3OwordHlw
ZWRlZiBXS1ZpZXdSZWYgUGxhdGZvcm1XS1ZpZXc7CiB0eXBlZGVmIEVjb3JlX0V2YXMqIFBsYXRm
b3JtV2luZG93OwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZWZs
L1BsYXRmb3JtV2ViVmlldy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2VmbC9QbGF0Zm9ybVdl
YlZpZXcuY3BwCmluZGV4IGQ1NDQ5ZWIuLmI4MmE3MDcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvZWZsL1BsYXRmb3JtV2ViVmlldy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9lZmwvUGxhdGZvcm1XZWJWaWV3LmNwcApAQCAtNjUsMzMgKzY1LDMzIEBAIFBsYXRmb3JtV2Vi
Vmlldzo6UGxhdGZvcm1XZWJWaWV3KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91
cFJlZiBwYWdlR3JvCiB7CiAgICAgbV93aW5kb3cgPSBpbml0RWNvcmVFdmFzKCk7CiAgICAgRXZh
cyogZXZhcyA9IGVjb3JlX2V2YXNfZ2V0KG1fd2luZG93KTsKLSAgICBtX3ZpZXcgPSB0b0ltcGwo
V0tWaWV3Q3JlYXRlKGV2YXMsIGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZikpOwotICAgIGV3a192
aWV3X3RoZW1lX3NldChtX3ZpZXcsIFRIRU1FX0RJUiIvZGVmYXVsdC5lZGoiKTsKLSAgICBldmFz
X29iamVjdF9zbWFydF9jYWxsYmFja19hZGQobV92aWV3LCAid2VicHJvY2VzcyxjcmFzaGVkIiwg
b25XZWJQcm9jZXNzQ3Jhc2hlZCwgMCk7CisgICAgbV92aWV3ID0gV0tWaWV3Q3JlYXRlKGV2YXMs
IGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZik7CisgICAgZXdrX3ZpZXdfdGhlbWVfc2V0KFdLVmll
d0dldEV2YXNPYmplY3QobV92aWV3KSwgVEhFTUVfRElSIi9kZWZhdWx0LmVkaiIpOworICAgIGV2
YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyks
ICJ3ZWJwcm9jZXNzLGNyYXNoZWQiLCBvbldlYlByb2Nlc3NDcmFzaGVkLCAwKTsKICAgICByZXNp
emVUbyg2MDAsIDgwMCk7CiB9CiAKIFBsYXRmb3JtV2ViVmlldzo6flBsYXRmb3JtV2ViVmlldygp
CiB7Ci0gICAgZXZhc19vYmplY3RfZGVsKG1fdmlldyk7CisgICAgZXZhc19vYmplY3RfZGVsKFdL
Vmlld0dldEV2YXNPYmplY3QobV92aWV3KSk7CiAgICAgZWNvcmVfZXZhc19mcmVlKG1fd2luZG93
KTsKICAgICBlY29yZV9ldmFzX3NodXRkb3duKCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3
OjpyZXNpemVUbyh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQogewotICAgIGV2YXNf
b2JqZWN0X3Jlc2l6ZShtX3ZpZXcsIHdpZHRoLCBoZWlnaHQpOworICAgIGV2YXNfb2JqZWN0X3Jl
c2l6ZShXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIHdpZHRoLCBoZWlnaHQpOwogfQogCiBX
S1BhZ2VSZWYgUGxhdGZvcm1XZWJWaWV3OjpwYWdlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV0tW
aWV3R2V0UGFnZSh0b0FQSShtX3ZpZXcpKTsKKyAgICByZXR1cm4gV0tWaWV3R2V0UGFnZShtX3Zp
ZXcpOwogfQogCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6c2ltdWxhdGVTcGFjZWJhcktleVByZXNz
KCkKIHsKICAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwotICAgIGV2
YXNfb2JqZWN0X2ZvY3VzX3NldChtX3ZpZXcsIHRydWUpOworICAgIGV2YXNfb2JqZWN0X2ZvY3Vz
X3NldChXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIHRydWUpOwogICAgIGV2YXNfZXZlbnRf
ZmVlZF9rZXlfZG93bihldmFzLCAic3BhY2UiLCAic3BhY2UiLCAiICIsIDAsIDAsIDApOwogICAg
IGV2YXNfZXZlbnRfZmVlZF9rZXlfdXAoZXZhcywgInNwYWNlIiwgInNwYWNlIiwgIiAiLCAwLCAx
LCAwKTsKIH0KQEAgLTk5LDE0ICs5OSwxNCBAQCB2b2lkIFBsYXRmb3JtV2ViVmlldzo6c2ltdWxh
dGVTcGFjZWJhcktleVByZXNzKCkKIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpzaW11bGF0ZU1vdXNl
TW92ZSh1bnNpZ25lZCB4LCB1bnNpZ25lZCB5KQogewogICAgIEV2YXMqIGV2YXMgPSBlY29yZV9l
dmFzX2dldChtX3dpbmRvdyk7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhtX3ZpZXcpOworICAgIGV2
YXNfb2JqZWN0X3Nob3coV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpKTsKICAgICBldmFzX2V2
ZW50X2ZlZWRfbW91c2VfbW92ZShldmFzLCB4LCB5LCAwLCAwKTsKIH0KIAogdm9pZCBQbGF0Zm9y
bVdlYlZpZXc6OnNpbXVsYXRlUmlnaHRDbGljayh1bnNpZ25lZCB4LCB1bnNpZ25lZCB5KQogewog
ICAgIEV2YXMqIGV2YXMgPSBlY29yZV9ldmFzX2dldChtX3dpbmRvdyk7Ci0gICAgZXZhc19vYmpl
Y3Rfc2hvdyhtX3ZpZXcpOworICAgIGV2YXNfb2JqZWN0X3Nob3coV0tWaWV3R2V0RXZhc09iamVj
dChtX3ZpZXcpKTsKICAgICBldmFzX2V2ZW50X2ZlZWRfbW91c2VfbW92ZShldmFzLCB4LCB5LCAw
LCAwKTsKICAgICBldmFzX2V2ZW50X2ZlZWRfbW91c2VfZG93bihldmFzLCAzLCBFVkFTX0JVVFRP
Tl9OT05FLCAwLCAwKTsKICAgICBldmFzX2V2ZW50X2ZlZWRfbW91c2VfdXAoZXZhcywgMywgRVZB
U19CVVRUT05fTk9ORSwgMCwgMCk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L1BsYXRmb3JtV2ViVmlldy5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZp
ZXcuaAppbmRleCA4ZjlkY2RiLi41MWM0YmNjIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxh
dGZvcm1XZWJWaWV3LmgKQEAgLTU0LDEzICs1NCw4IEBAIHR5cGVkZWYgc3RydWN0IF9HdGtXaWRn
ZXQgR3RrV2lkZ2V0OwogdHlwZWRlZiBXS1ZpZXdSZWYgUGxhdGZvcm1XS1ZpZXc7CiB0eXBlZGVm
IEd0a1dpZGdldCogUGxhdGZvcm1XaW5kb3c7CiAjZWxpZiBQTEFURk9STShFRkwpCi0jaWYgVVNF
KEVPKQotdHlwZWRlZiBzdHJ1Y3QgX0VvIEV2YXNfT2JqZWN0OwotI2Vsc2UKLXR5cGVkZWYgc3Ry
dWN0IF9FdmFzX09iamVjdCBFdmFzX09iamVjdDsKLSNlbmRpZgogdHlwZWRlZiBzdHJ1Y3QgX0Vj
b3JlX0V2YXMgRWNvcmVfRXZhczsKLXR5cGVkZWYgRXZhc19PYmplY3QqIFBsYXRmb3JtV0tWaWV3
OwordHlwZWRlZiBXS1ZpZXdSZWYgUGxhdGZvcm1XS1ZpZXc7CiB0eXBlZGVmIEVjb3JlX0V2YXMq
IFBsYXRmb3JtV2luZG93OwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9lZmwvRXZlbnRTZW5kZXJQcm94eUVmbC5jcHAKaW5kZXggZjI4MjlhOS4uMTM5MjBlYyAxMDA2
NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvRXZlbnRTZW5kZXJQcm94eUVmbC5j
cHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvRXZlbnRTZW5kZXJQcm94eUVmbC5j
cHAKQEAgLTQzOCw3ICs0MzgsNyBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnNlbmRUb3VjaEV2
ZW50KEV3a19Ub3VjaF9FdmVudF9UeXBlIGV2ZW50VHlwZSkKIHsKICAgICBBU1NFUlQobV90b3Vj
aFBvaW50cyk7CiAKLSAgICBFdmFzX09iamVjdCogZXdrVmlldyA9IG1fdGVzdENvbnRyb2xsZXIt
Pm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpOworICAgIEV2YXNfT2JqZWN0KiBld2tWaWV3
ID0gV0tWaWV3R2V0RXZhc09iamVjdChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5w
bGF0Zm9ybVZpZXcoKSk7CiAgICAgZXdrX3ZpZXdfZmVlZF90b3VjaF9ldmVudChld2tWaWV3LCBl
dmVudFR5cGUsIG1fdG91Y2hQb2ludHMsIGV2YXNfa2V5X21vZGlmaWVyX2dldChldmFzX29iamVj
dF9ldmFzX2dldChld2tWaWV3KSkpOwogCiAgICAgRWluYV9MaXN0KiBsaXN0OwpAQCAtNDkwLDEy
ICs0OTAsMTQgQEAgdm9pZCBFdmVudFNlbmRlclByb3h5Ojp1cGRhdGVUb3VjaFBvaW50KGludCBp
bmRleCwgaW50IHgsIGludCB5KQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnNldFRvdWNoTW9k
aWZpZXIoV0tFdmVudE1vZGlmaWVycyBtb2RpZmllciwgYm9vbCBlbmFibGUpCiB7CisgICAgRXZh
c19PYmplY3QqIGV3a1ZpZXcgPSBXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdGVzdENvbnRyb2xsZXIt
Pm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpKTsKKwogICAgIGZvciAodW5zaWduZWQgaW5k
ZXggPSAwOyBpbmRleCA8IChzaXplb2YobW9kaWZpZXJOYW1lcykgLyBzaXplb2YoY2hhciopKTsg
KytpbmRleCkgewogICAgICAgICBpZiAobW9kaWZpZXIgJiAoMSA8PCBpbmRleCkpIHsKICAgICAg
ICAgICAgIGlmIChlbmFibGUpCi0gICAgICAgICAgICAgICAgZXZhc19rZXlfbW9kaWZpZXJfb24o
ZXZhc19vYmplY3RfZXZhc19nZXQobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxh
dGZvcm1WaWV3KCkpLCBtb2RpZmllck5hbWVzW2luZGV4XSk7CisgICAgICAgICAgICAgICAgZXZh
c19rZXlfbW9kaWZpZXJfb24oZXZhc19vYmplY3RfZXZhc19nZXQoZXdrVmlldyksIG1vZGlmaWVy
TmFtZXNbaW5kZXhdKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBldmFzX2tl
eV9tb2RpZmllcl9vZmYoZXZhc19vYmplY3RfZXZhc19nZXQobV90ZXN0Q29udHJvbGxlci0+bWFp
bldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCkpLCBtb2RpZmllck5hbWVzW2luZGV4XSk7CisgICAg
ICAgICAgICAgICAgZXZhc19rZXlfbW9kaWZpZXJfb2ZmKGV2YXNfb2JqZWN0X2V2YXNfZ2V0KGV3
a1ZpZXcpLCBtb2RpZmllck5hbWVzW2luZGV4XSk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYg
LS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3Bw
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNwcAppbmRl
eCAxY2NjMGJkLi43NGZlNTIzIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2Vm
bC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZs
L1BsYXRmb3JtV2ViVmlld0VmbC5jcHAKQEAgLTYxLDU2ICs2MSw1NSBAQCBQbGF0Zm9ybVdlYlZp
ZXc6OlBsYXRmb3JtV2ViVmlldyhXS0NvbnRleHRSZWYgY29udGV4dCwgV0tQYWdlR3JvdXBSZWYg
cGFnZUdyb3VwLAogICAgIEV2YXMqIGV2YXMgPSBlY29yZV9ldmFzX2dldChtX3dpbmRvdyk7CiAK
ICAgICBpZiAobV91c2luZ0ZpeGVkTGF5b3V0KSB7Ci0gICAgICAgIG1fdmlldyA9IHRvSW1wbChX
S1ZpZXdDcmVhdGVXaXRoRml4ZWRMYXlvdXQoZXZhcywgY29udGV4dCwgcGFnZUdyb3VwKSk7Ci0g
ICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShtX3ZpZXcsIDgwMCwgNjAwKTsKKyAgICAgICAgbV92
aWV3ID0gV0tWaWV3Q3JlYXRlV2l0aEZpeGVkTGF5b3V0KGV2YXMsIGNvbnRleHQsIHBhZ2VHcm91
cCk7CisgICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmll
dyksIDgwMCwgNjAwKTsKICAgICB9IGVsc2UKLSAgICAgICAgbV92aWV3ID0gdG9JbXBsKFdLVmll
d0NyZWF0ZShldmFzLCBjb250ZXh0LCBwYWdlR3JvdXApKTsKKyAgICAgICAgbV92aWV3ID0gV0tW
aWV3Q3JlYXRlKGV2YXMsIGNvbnRleHQsIHBhZ2VHcm91cCk7CiAKLSAgICBld2tfdmlld190aGVt
ZV9zZXQobV92aWV3LCBUSEVNRV9ESVIiL2RlZmF1bHQuZWRqIik7CisgICAgZXdrX3ZpZXdfdGhl
bWVfc2V0KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSwgVEhFTUVfRElSIi9kZWZhdWx0LmVk
aiIpOwogICAgIG1fd2luZG93SXNLZXkgPSBmYWxzZTsKLSAgICBldmFzX29iamVjdF9zaG93KG1f
dmlldyk7CisgICAgZXZhc19vYmplY3Rfc2hvdyhXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldykp
OwogfQogCiBQbGF0Zm9ybVdlYlZpZXc6On5QbGF0Zm9ybVdlYlZpZXcoKQogewotICAgIGV2YXNf
b2JqZWN0X2RlbChtX3ZpZXcpOworICAgIC8vIEZJWE1FOiBUaGUgQyBXS1ZpZXcgQVBJIGN1cnJl
bnRseSBjcmVhdGVzIHRoZSBFdmFzX09iamVjdCwgc28gd2UgaGF2ZSB0byBkZXN0cnVjdCBpdAor
ICAgIC8vIChhbmQgaXRzIGRlcGVuZGVuY2llcyBFd2tWaWV3IGFuZCBXZWJLaXQ6OldlYlZpZXcp
IHRoaXMgd2F5LCB1bnRpbCB0aGlzIGdldCBmaXhlZC4KKyAgICBldmFzX29iamVjdF9kZWwoV0tW
aWV3R2V0RXZhc09iamVjdChtX3ZpZXcpKTsKICAgICBlY29yZV9ldmFzX2ZyZWUobV93aW5kb3cp
OwogfQogCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6cmVzaXplVG8odW5zaWduZWQgd2lkdGgsIHVu
c2lnbmVkIGhlaWdodCkKIHsKLSAgICBldmFzX29iamVjdF9yZXNpemUobV92aWV3LCB3aWR0aCwg
aGVpZ2h0KTsKKyAgICBldmFzX29iamVjdF9yZXNpemUoV0tWaWV3R2V0RXZhc09iamVjdChtX3Zp
ZXcpLCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogV0tQYWdlUmVmIFBsYXRmb3JtV2ViVmlldzo6cGFn
ZSgpCiB7Ci0gICAgcmV0dXJuIFdLVmlld0dldFBhZ2UodG9BUEkobV92aWV3KSk7CisgICAgcmV0
dXJuIFdLVmlld0dldFBhZ2UobV92aWV3KTsKIH0KIAogdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OmZv
Y3VzKCkKIHsKKyAgICBFdmFzX09iamVjdCogZXZhc09iamVjdCA9IFdLVmlld0dldEV2YXNPYmpl
Y3QobV92aWV3KTsKICAgICAvLyBJbiBhIGZldyBjYXNlcywgYW4gaWZyYW1lIG1pZ2h0IHJlY2Vp
dmUgZm9jdXMgZnJvbSBKYXZhU2NyaXB0IGFuZCBFdmFzIGlzIG5vdCBhd2FyZSBvZiBpdCBhdCBh
bGwKICAgICAvLyAoV2ViQ29yZVN1cHBvcnQ6OmZvY3VzZWRGcmFtZUNoYW5nZWQoKSBkb2VzIG5v
dCBlbWl0IGFueSBub3RpZmljYXRpb24pLiBXZSB0aGVuIG1hbnVhbGx5IHJlbW92ZSB0aGUKICAg
ICAvLyBmb2N1cyBmcm9tIHRoZSB2aWV3IHRvIG1ha2UgdGhlIGNhbGwgZ2l2ZSBmb2N1cyB0byBl
dmFzX29iamVjdF9mb2N1c19zZXQoLi4uLCB0cnVlKSB0byBiZSBlZmZlY3RmdWwuCi0gICAgaWYg
KFdLUGFnZUdldEZvY3VzZWRGcmFtZShwYWdlKCkpICE9IFdLUGFnZUdldE1haW5GcmFtZShwYWdl
KCkpKQotICAgICAgICBldmFzX29iamVjdF9mb2N1c19zZXQobV92aWV3LCBmYWxzZSk7Ci0gICAg
ZXZhc19vYmplY3RfZm9jdXNfc2V0KG1fdmlldywgdHJ1ZSk7CisgICAgZXZhc19vYmplY3RfZm9j
dXNfc2V0KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSwgV0tQYWdlR2V0Rm9jdXNlZEZyYW1l
KHBhZ2UoKSkgPT0gV0tQYWdlR2V0TWFpbkZyYW1lKHBhZ2UoKSkpOwogfQogCiBXS1JlY3QgUGxh
dGZvcm1XZWJWaWV3Ojp3aW5kb3dGcmFtZSgpCiB7CiAgICAgaW50IHgsIHksIHdpZHRoLCBoZWln
aHQ7CiAKLSAgICBFY29yZV9FdmFzKiBlZSA9IGVjb3JlX2V2YXNfZWNvcmVfZXZhc19nZXQoZXZh
c19vYmplY3RfZXZhc19nZXQobV92aWV3KSk7Ci0gICAgZWNvcmVfZXZhc19yZXF1ZXN0X2dlb21l
dHJ5X2dldChlZSwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQpOworICAgIGVjb3JlX2V2YXNfcmVx
dWVzdF9nZW9tZXRyeV9nZXQobV93aW5kb3csICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0KTsKIAog
ICAgIHJldHVybiBXS1JlY3RNYWtlKHgsIHksIHdpZHRoLCBoZWlnaHQpOwogfQogCiB2b2lkIFBs
YXRmb3JtV2ViVmlldzo6c2V0V2luZG93RnJhbWUoV0tSZWN0IGZyYW1lKQogewotICAgIEVjb3Jl
X0V2YXMqIGVlID0gZWNvcmVfZXZhc19lY29yZV9ldmFzX2dldChldmFzX29iamVjdF9ldmFzX2dl
dChtX3ZpZXcpKTsKLSAgICBlY29yZV9ldmFzX21vdmVfcmVzaXplKGVlLCBmcmFtZS5vcmlnaW4u
eCwgZnJhbWUub3JpZ2luLnksIGZyYW1lLnNpemUud2lkdGgsIGZyYW1lLnNpemUuaGVpZ2h0KTsK
KyAgICBlY29yZV9ldmFzX21vdmVfcmVzaXplKG1fd2luZG93LCBmcmFtZS5vcmlnaW4ueCwgZnJh
bWUub3JpZ2luLnksIGZyYW1lLnNpemUud2lkdGgsIGZyYW1lLnNpemUuaGVpZ2h0KTsKIH0KIAog
dm9pZCBQbGF0Zm9ybVdlYlZpZXc6OmFkZENocm9tZUlucHV0RmllbGQoKQpAQCAtMTI3LDE1ICsx
MjYsMTIgQEAgdm9pZCBQbGF0Zm9ybVdlYlZpZXc6Om1ha2VXZWJWaWV3Rmlyc3RSZXNwb25kZXIo
KQogCiBXS1JldGFpblB0cjxXS0ltYWdlUmVmPiBQbGF0Zm9ybVdlYlZpZXc6OndpbmRvd1NuYXBz
aG90SW1hZ2UoKQogewotICAgIEVjb3JlX0V2YXMqIGVlID0gZWNvcmVfZXZhc19lY29yZV9ldmFz
X2dldChldmFzX29iamVjdF9ldmFzX2dldChtX3ZpZXcpKTsKLSAgICBBU1NFUlQoZWUpOwotCiAg
ICAgaW50IHdpZHRoOwogICAgIGludCBoZWlnaHQ7Ci0gICAgZWNvcmVfZXZhc19nZW9tZXRyeV9n
ZXQoZWUsIDAsIDAsICZ3aWR0aCwgJmhlaWdodCk7CisgICAgZWNvcmVfZXZhc19nZW9tZXRyeV9n
ZXQobV93aW5kb3csIDAsIDAsICZ3aWR0aCwgJmhlaWdodCk7CiAgICAgQVNTRVJUKHdpZHRoID4g
MCAmJiBoZWlnaHQgPiAwKTsKIAotICAgIHJldHVybiBhZG9wdFdLKFdLVmlld0NyZWF0ZVNuYXBz
aG90KHRvQVBJKG1fdmlldykpKTsKKyAgICByZXR1cm4gYWRvcHRXSyhXS1ZpZXdDcmVhdGVTbmFw
c2hvdChtX3ZpZXcpKTsKIH0KIAogYm9vbCBQbGF0Zm9ybVdlYlZpZXc6OnZpZXdTdXBwb3J0c09w
dGlvbnMoV0tEaWN0aW9uYXJ5UmVmIG9wdGlvbnMpIGNvbnN0Ci0tIAoxLjcuMTAuNAoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184956</attachid>
            <date>2013-01-28 02:02:47 -0800</date>
            <delta_ts>2013-01-28 03:05:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>0003-EFL-WK2-Introduce-a-WebView-class-as-counterpart-for.patch</filename>
            <type>text/plain</type>
            <size>40607</size>
            <attacher name="Kenneth Rohde Christiansen">kenneth</attacher>
            
              <data encoding="base64">RnJvbSAxMmZmZDkzZDRlZDNkNzFmZDVhM2VlODE5ZGFiZTIyYTQzYmQyMGQ3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiA8a2VubmV0aEB3
ZWJraXQub3JnPgpEYXRlOiBGcmksIDI1IEphbiAyMDEzIDExOjUzOjQ2ICswMTAwClN1YmplY3Q6
IFtQQVRDSCAzLzNdIFtFRkxdW1dLMl0gSW50cm9kdWNlIGEgV2ViVmlldyBjbGFzcyBhcyBjb3Vu
dGVycGFydCBmb3IKIFdLVmlld1JlZgogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEwNzkzMQoKUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgpTb3VyY2UvV2ViS2l0
MjoKClRoaXMgaXMganVzdCBvbmUgc3RlcCBvZiB0aGUgbmV3IHBsYW4gZm9yIHRoZSBFRkwgQVBJ
LgoKVGhlIHBsYW4gaXMgdG8gbW92ZSB0aGUgcHVibGljIEVGTC1saWtlIEFQSSBvbiB0b3Agb2Yg
dGhlIHNoYXJlZApXSzIgQyBBUEksIHBsdXMgYSBmZXcgRUZMIGV4dGVuc2lvbnMgKFdLVmlldyBj
bGFzcyBtb3N0bHkpLgoKVGhlIEVGTC1saWtlIEFQSSBjYW4gYmUgc2VlbiBhcyBhIGNvbnZlbmll
bmNlIEFQSSB3aGljaCB0aWVzCndlbGwgaW50byBFRkwgYW5kIHdoaWNoIG1ha2VzIGl0IGVhc3kg
dG8gYWRkIHdlYiBleHBlcmllbmNlcwp0byBleGlzdGluZyBhbmQgbmV3IEVGTCBhcHBsaWNhdGlv
bnMuIEl0IHByb3ZpZGVzIGEgc21hcnQgb2JqZWN0Cmxpa2UgQVBJIGFuZCBhIEV2YXNfT2JqZWN0
IGJhc2VkIHZpZXcuCgpGb3IgbW9yZSBhZHZhbmNlZCB1c2UgY2FzZXMsIHN1Y2ggYXMgYnJvd3Nl
ciBhbmQgcnVudGltZSwgaXQgaXMKcG9zc2libGUgdG8gdXNlIHRoZSBXSyogQyBBUEksIHdoaWNo
IGlzIGdpdmVzIG1vcmUgZmxleGliaWxpdHkKd2hpbGUgYmVpbmcgbW9yZSBsb3cgbGV2ZWwuCgpU
aGUgaWRlYSBpcyB0aGF0IHRoZSBXS1ZpZXcgY2xhc3Mgd2lsbCBub3QgZGVwZW5kIG9uIEV2YXNf
T2JqZWN0CmFuZCBYMTEgKGZ1dHVyZSBwbGFuKSB1bmxpa2UgdGhlIGN1cnJlbnQgRUZMLWxpa2Ug
QVBJLiBUaGlzIHNob3VsZAptYWtlIGl0IHBvc3NpYmxlIHRvIHVzZSBpdCBmb3IgY2FzZXMgd2hl
cmUgbm9uZSBvZiB0aGVzZSBhcmUKYXZhaWxhYmxlLgoKVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRo
ZSBXZWJWaWV3IGNsYXNzIHdoaWNoIHNlcnZlcyBhcyBvdXIKY291bnRlcnBhcnQgZm9yIHRoZSBX
S1ZpZXcgY2xhc3MsIGFuZCBhZGRzIGEgZmV3IG5lZWRlZCBtZXRob2RzLgoKVGhlIEV3a1ZpZXcg
b3ducyB0aGUgV2ViVmlldyBjbGFzcyAoYW5kIHdpbGwgYmUgY29uc3RydWN0aW5nIGl0CmluIHRo
ZSBuZWFyIGZ1dHVyZSB3aGVuIHRoZSBFd2tWaWV3IGNsYXNzIGhhcyBiZWVuIGNoYW5nZWQgdG8K
aGFuZGxlIGFsbCBzbWFydCBvYmplY3QgcmVsYXRlZCBjb2RlKQoKVGhlIGNsZWFuIHVwIG9mIHRo
ZSBzbWFydCBvYmplY3QgcmVsYXRlZCBjb2RlIGFzIHRoZSBwcm9wZXIKY29uc3RydWN0aW9uIG9m
IEV3a1ZpZXcgYW5kIFdlYlZpZXcgd2lsbCBiZSBkb25lIGluIGZvbGxvdy11cApwYXRjaGVzLgoK
KiBVSVByb2Nlc3MvQVBJL0MvZWZsL1dLQVBJQ2FzdEVmbC5oOgooV2ViS2l0KToKCiAgICBUaGUg
V0tWaWV3IEFQSSBpcyBub3QgYmFzZWQgb24gV2ViVmlldyBhbmQgbm90IEV2YXNfT2JqZWN0KgoK
KiBVSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5jcHA6CihXS1ZpZXdDcmVhdGUpOgooV0tWaWV3
Q3JlYXRlV2l0aEZpeGVkTGF5b3V0KToKKFdLVmlld0luaXRpYWxpemUpOgooV0tWaWV3R2V0UGFn
ZSk6CihXS1ZpZXdTZXRUaGVtZVBhdGgpOgooV0tWaWV3U3VzcGVuZEFjdGl2ZURPTU9iamVjdHNB
bmRBbmltYXRpb25zKToKKFdLVmlld1Jlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25z
KToKKFdLVmlld0dldEV2YXNPYmplY3QpOgooV0tWaWV3Q3JlYXRlU25hcHNob3QpOgoKICAgIEFk
ZCBhIGZldyBuZXcgV0tWaWV3IEVGTCBDIG1ldGhvZHMsIGFuZCB1cGRhdGUgZXhpc3RpbmcKICAg
IG1ldGhvZHMgdG8gcmVmbGVjdCB0aGF0IHRoZSBXS1ZpZXdSZWYgaXMgbm93IGEgV2ViVmlldyoK
CiAgICBUaGUgY29uc3RydWN0aW9uIG1ldGhvZHMgd2lsbCBiZSByZXdyaXR0ZW4gd2hlbiB0aGUg
c21hcnQKICAgIG9iamVjdCBjb25zdHJ1Y3Rpb24gaGFzIGJlZW4gc29sdmVzLgoKKiBVSVByb2Nl
c3MvQVBJL0MvZWZsL1dLVmlldy5oOgoqIFVJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwOgoo
V2ViS2l0KToKKFdlYktpdDo6V2ViVmlldzo6V2ViVmlldyk6CihXZWJLaXQ6OldlYlZpZXc6On5X
ZWJWaWV3KToKKFdlYktpdDo6V2ViVmlldzo6aW5pdGlhbGl6ZSk6CihXZWJLaXQ6OldlYlZpZXc6
OnNldFRoZW1lUGF0aCk6CihXZWJLaXQ6OldlYlZpZXc6OnN1c3BlbmRBY3RpdmVET01PYmplY3Rz
QW5kQW5pbWF0aW9ucyk6CihXZWJLaXQ6OldlYlZpZXc6OnJlc3VtZUFjdGl2ZURPTU9iamVjdHNB
bmRBbmltYXRpb25zKToKCiAgICBBZGQgYSBuZXcgV2ViS2l0OjpXZWJWaWV3IGNsYXNzIGZvciBF
RkwuCgooRXdrVmlldzo6RXdrVmlldyk6CihFd2tWaWV3Ojp+RXdrVmlldyk6CihFd2tWaWV3Ojp3
a1BhZ2UpOgooRXdrVmlldzo6ZGV2aWNlU2NhbGVGYWN0b3IpOgooRXdrVmlldzo6dGl0bGUpOgoo
RXdrVmlldzo6c2V0VGhlbWVQYXRoKToKKEV3a1ZpZXc6OmN1c3RvbVRleHRFbmNvZGluZ05hbWUp
OgooRXdrVmlldzo6c2V0Q3VzdG9tVGV4dEVuY29kaW5nTmFtZSk6CihFd2tWaWV3OjpjcmVhdGVH
TFN1cmZhY2UpOgooRXdrVmlldzo6aW5mb3JtVVJMQ2hhbmdlKToKKEV3a1ZpZXc6OnRha2VTbmFw
c2hvdCk6CgogICAgQmFzZSBtZXRob2RzIG9uIEMgQVBJIGluc3RlYWQgb2YgaW50ZXJuYWwgQVBJ
IGFzIG11Y2gKICAgIGFzIGN1cnJlbnRseSBwb3NzaWJsZS4KCiogVUlQcm9jZXNzL0FQSS9lZmwv
RXdrVmlldy5oOgooV2ViS2l0KToKKFdlYlZpZXcpOgooV2ViS2l0OjpXZWJWaWV3OjpwYWdlUmVm
KToKKFdlYktpdDo6V2ViVmlldzo6ZXZhc09iamVjdCk6CihXZWJLaXQ6OldlYlZpZXc6OnBhZ2Up
OgooRXdrVmlldyk6CihFd2tWaWV3Ojp3a1ZpZXcpOgooRXdrVmlldzo6cGFnZSk6CiogVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwOgooY3JlYXRlRXdrVmlldyk6Cihld2tfdmlld19iYXNl
X2FkZCk6Cihld2tfdmlld19zbWFydF9hZGQpOgoKICAgIE1vZGlmeSB0byByZXR1cm4gdGhlIEV3
a1ZpZXcgY2xhc3MgZm9yIG5vdy4KCiogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0
ZS5oOgoqIFVJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwuY3BwOgooV2ViS2l0OjpX
ZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVJbnNwZWN0b3JQYWdlKToKCiAgICBVcGRh
dGVkIGR1ZSB0byBjaGFuZ2VkIEFQSS4KClRvb2xzOgoKQ2hhbmdlIHBsYXRmb3JtVmlldyB0byBi
ZSBhIFdLVmlldyBhbmQgdXNlIFdLVmlld0dldEV2YXNPYmplY3QKZm9yIHRoZSBwbGFjZXMgd2hl
cmUgYW4gRXZhc19PYmplY3QgaXMgbmVlZGVkLgoKSW5zdGVhZCBvZiBleHRyYWN0aW5nIHRoZSBF
Y29yZV9FdmFzKiBmcm9tIHRoZSBtX3ZpZXcgd2UgdXNlCnRoZSBtX3dpbmRvdyBpbnN0ZWFkLCB3
aGljaCBhY3R1YWxseSBob2xkcyB0aGUgaXQuCgoqIFRlc3RXZWJLaXRBUEkvUGxhdGZvcm1XZWJW
aWV3Lmg6CiogVGVzdFdlYktpdEFQSS9lZmwvUGxhdGZvcm1XZWJWaWV3LmNwcDoKKFRlc3RXZWJL
aXRBUEk6OlBsYXRmb3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KToKKFRlc3RXZWJLaXRBUEk6
OlBsYXRmb3JtV2ViVmlldzo6flBsYXRmb3JtV2ViVmlldyk6CihUZXN0V2ViS2l0QVBJOjpQbGF0
Zm9ybVdlYlZpZXc6OnJlc2l6ZVRvKToKKFRlc3RXZWJLaXRBUEk6OlBsYXRmb3JtV2ViVmlldzo6
cGFnZSk6CihUZXN0V2ViS2l0QVBJOjpQbGF0Zm9ybVdlYlZpZXc6OnNpbXVsYXRlU3BhY2ViYXJL
ZXlQcmVzcyk6CihUZXN0V2ViS2l0QVBJOjpQbGF0Zm9ybVdlYlZpZXc6OnNpbXVsYXRlTW91c2VN
b3ZlKToKKFRlc3RXZWJLaXRBUEk6OlBsYXRmb3JtV2ViVmlldzo6c2ltdWxhdGVSaWdodENsaWNr
KToKKiBXZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oOgoqIFdlYktpdFRlc3RSdW5u
ZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwOgooV1RSOjpFdmVudFNlbmRlclByb3h5Ojpz
ZW5kVG91Y2hFdmVudCk6CihXVFI6OkV2ZW50U2VuZGVyUHJveHk6OnNldFRvdWNoTW9kaWZpZXIp
OgoqIFdlYktpdFRlc3RSdW5uZXIvZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5jcHA6CihXVFI6OlBs
YXRmb3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KToKKFdUUjo6UGxhdGZvcm1XZWJWaWV3Ojp+
UGxhdGZvcm1XZWJWaWV3KToKKFdUUjo6UGxhdGZvcm1XZWJWaWV3OjpyZXNpemVUbyk6CihXVFI6
OlBsYXRmb3JtV2ViVmlldzo6cGFnZSk6CihXVFI6OlBsYXRmb3JtV2ViVmlldzo6Zm9jdXMpOgoo
V1RSOjpQbGF0Zm9ybVdlYlZpZXc6OndpbmRvd0ZyYW1lKToKKFdUUjo6UGxhdGZvcm1XZWJWaWV3
OjpzZXRXaW5kb3dGcmFtZSk6CihXVFI6OlBsYXRmb3JtV2ViVmlldzo6d2luZG93U25hcHNob3RJ
bWFnZSk6Ci0tLQogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgMTA4ICsrKysrKysrKysrKysrKysrKwogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9DL2VmbC9XS0FQSUNhc3RFZmwuaCAgfCAgIDEwICstCiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5jcHAgICAgICB8ICAgMzYgKysrKy0tCiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5oICAgICAgICB8ICAgMTUgKystCiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcCAgICAgICB8ICAxMTkgKysr
KysrKysrKysrLS0tLS0tLS0KIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1Zp
ZXcuaCAgICAgICAgIHwgICA0MSArKysrKystCiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdmlldy5jcHAgICAgICB8ICAgIDkgKy0KIC4uLi9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaCAgIHwgICAgMiArLQogLi4uL1dlYktpdDIvVUlQcm9j
ZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAgfCAgIDExICstCiBUb29scy9DaGFuZ2VM
b2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzYgKysrKysrCiBUb29s
cy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2ViVmlldy5oICAgICAgICAgICAgICB8ICAgIDcgKy0K
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvZWZsL1BsYXRmb3JtV2ViVmlldy5jcHAgICAgICAgIHwgICAx
OCArLS0KIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmggICAgICAgICAg
IHwgICAgNyArLQogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvRXZlbnRTZW5kZXJQcm94eUVm
bC5jcHAgfCAgICA4ICstCiBUb29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9QbGF0Zm9ybVdlYlZp
ZXdFZmwuY3BwICB8ICAgMzYgKysrLS0tCiAxNSBmaWxlcyBjaGFuZ2VkLCAzNDIgaW5zZXJ0aW9u
cygrKSwgMTIxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA5YWE3OTcxLi45ZThlNDAzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTExIEBACisyMDEzLTAxLTI4ICBLZW5uZXRoIFJvaGRlIENo
cmlzdGlhbnNlbiAgPGtlbm5ldGhAd2Via2l0Lm9yZz4KKworICAgICAgICBbRUZMXVtXSzJdIElu
dHJvZHVjZSBhIFdlYlZpZXcgY2xhc3MgYXMgY291bnRlcnBhcnQgZm9yIFdLVmlld1JlZgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3OTMxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBqdXN0
IG9uZSBzdGVwIG9mIHRoZSBuZXcgcGxhbiBmb3IgdGhlIEVGTCBBUEkuCisKKyAgICAgICAgVGhl
IHBsYW4gaXMgdG8gbW92ZSB0aGUgcHVibGljIEVGTC1saWtlIEFQSSBvbiB0b3Agb2YgdGhlIHNo
YXJlZAorICAgICAgICBXSzIgQyBBUEksIHBsdXMgYSBmZXcgRUZMIGV4dGVuc2lvbnMgKFdLVmll
dyBjbGFzcyBtb3N0bHkpLgorCisgICAgICAgIFRoZSBFRkwtbGlrZSBBUEkgY2FuIGJlIHNlZW4g
YXMgYSBjb252ZW5pZW5jZSBBUEkgd2hpY2ggdGllcworICAgICAgICB3ZWxsIGludG8gRUZMIGFu
ZCB3aGljaCBtYWtlcyBpdCBlYXN5IHRvIGFkZCB3ZWIgZXhwZXJpZW5jZXMKKyAgICAgICAgdG8g
ZXhpc3RpbmcgYW5kIG5ldyBFRkwgYXBwbGljYXRpb25zLiBJdCBwcm92aWRlcyBhIHNtYXJ0IG9i
amVjdAorICAgICAgICBsaWtlIEFQSSBhbmQgYSBFdmFzX09iamVjdCBiYXNlZCB2aWV3LgorCisg
ICAgICAgIEZvciBtb3JlIGFkdmFuY2VkIHVzZSBjYXNlcywgc3VjaCBhcyBicm93c2VyIGFuZCBy
dW50aW1lLCBpdCBpcworICAgICAgICBwb3NzaWJsZSB0byB1c2UgdGhlIFdLKiBDIEFQSSwgd2hp
Y2ggaXMgZ2l2ZXMgbW9yZSBmbGV4aWJpbGl0eQorICAgICAgICB3aGlsZSBiZWluZyBtb3JlIGxv
dyBsZXZlbC4KKworICAgICAgICBUaGUgaWRlYSBpcyB0aGF0IHRoZSBXS1ZpZXcgY2xhc3Mgd2ls
bCBub3QgZGVwZW5kIG9uIEV2YXNfT2JqZWN0CisgICAgICAgIGFuZCBYMTEgKGZ1dHVyZSBwbGFu
KSB1bmxpa2UgdGhlIGN1cnJlbnQgRUZMLWxpa2UgQVBJLiBUaGlzIHNob3VsZAorICAgICAgICBt
YWtlIGl0IHBvc3NpYmxlIHRvIHVzZSBpdCBmb3IgY2FzZXMgd2hlcmUgbm9uZSBvZiB0aGVzZSBh
cmUKKyAgICAgICAgYXZhaWxhYmxlLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyB0
aGUgV2ViVmlldyBjbGFzcyB3aGljaCBzZXJ2ZXMgYXMgb3VyCisgICAgICAgIGNvdW50ZXJwYXJ0
IGZvciB0aGUgV0tWaWV3IGNsYXNzLCBhbmQgYWRkcyBhIGZldyBuZWVkZWQgbWV0aG9kcy4KKwor
ICAgICAgICBUaGUgRXdrVmlldyBvd25zIHRoZSBXZWJWaWV3IGNsYXNzIChhbmQgd2lsbCBiZSBj
b25zdHJ1Y3RpbmcgaXQKKyAgICAgICAgaW4gdGhlIG5lYXIgZnV0dXJlIHdoZW4gdGhlIEV3a1Zp
ZXcgY2xhc3MgaGFzIGJlZW4gY2hhbmdlZCB0bworICAgICAgICBoYW5kbGUgYWxsIHNtYXJ0IG9i
amVjdCByZWxhdGVkIGNvZGUpCisKKyAgICAgICAgVGhlIGNsZWFuIHVwIG9mIHRoZSBzbWFydCBv
YmplY3QgcmVsYXRlZCBjb2RlIGFzIHRoZSBwcm9wZXIKKyAgICAgICAgY29uc3RydWN0aW9uIG9m
IEV3a1ZpZXcgYW5kIFdlYlZpZXcgd2lsbCBiZSBkb25lIGluIGZvbGxvdy11cAorICAgICAgICBw
YXRjaGVzLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL2VmbC9XS0FQSUNhc3RFZmwuaDoK
KyAgICAgICAgKFdlYktpdCk6CisKKyAgICAgICAgICAgIFRoZSBXS1ZpZXcgQVBJIGlzIG5vdCBi
YXNlZCBvbiBXZWJWaWV3IGFuZCBub3QgRXZhc19PYmplY3QqCisKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0MvZWZsL1dLVmlldy5jcHA6CisgICAgICAgIChXS1ZpZXdDcmVhdGUpOgorICAgICAg
ICAoV0tWaWV3Q3JlYXRlV2l0aEZpeGVkTGF5b3V0KToKKyAgICAgICAgKFdLVmlld0luaXRpYWxp
emUpOgorICAgICAgICAoV0tWaWV3R2V0UGFnZSk6CisgICAgICAgIChXS1ZpZXdTZXRUaGVtZVBh
dGgpOgorICAgICAgICAoV0tWaWV3U3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25z
KToKKyAgICAgICAgKFdLVmlld1Jlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKToK
KyAgICAgICAgKFdLVmlld0dldEV2YXNPYmplY3QpOgorICAgICAgICAoV0tWaWV3Q3JlYXRlU25h
cHNob3QpOgorCisgICAgICAgICAgICBBZGQgYSBmZXcgbmV3IFdLVmlldyBFRkwgQyBtZXRob2Rz
LCBhbmQgdXBkYXRlIGV4aXN0aW5nCisgICAgICAgICAgICBtZXRob2RzIHRvIHJlZmxlY3QgdGhh
dCB0aGUgV0tWaWV3UmVmIGlzIG5vdyBhIFdlYlZpZXcqCisKKyAgICAgICAgICAgIFRoZSBjb25z
dHJ1Y3Rpb24gbWV0aG9kcyB3aWxsIGJlIHJld3JpdHRlbiB3aGVuIHRoZSBzbWFydAorICAgICAg
ICAgICAgb2JqZWN0IGNvbnN0cnVjdGlvbiBoYXMgYmVlbiBzb2x2ZXMuCisKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L0V3a1ZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
dzo6V2ViVmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6On5XZWJWaWV3KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlldzo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXc6OnNldFRoZW1lUGF0aCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnN1c3BlbmRBY3Rp
dmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnJl
c3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKToKKworICAgICAgICAgICAgQWRkIGEg
bmV3IFdlYktpdDo6V2ViVmlldyBjbGFzcyBmb3IgRUZMLgorCisgICAgICAgIChFd2tWaWV3OjpF
d2tWaWV3KToKKyAgICAgICAgKEV3a1ZpZXc6On5Fd2tWaWV3KToKKyAgICAgICAgKEV3a1ZpZXc6
OndrUGFnZSk6CisgICAgICAgIChFd2tWaWV3OjpkZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAg
IChFd2tWaWV3Ojp0aXRsZSk6CisgICAgICAgIChFd2tWaWV3OjpzZXRUaGVtZVBhdGgpOgorICAg
ICAgICAoRXdrVmlldzo6Y3VzdG9tVGV4dEVuY29kaW5nTmFtZSk6CisgICAgICAgIChFd2tWaWV3
OjpzZXRDdXN0b21UZXh0RW5jb2RpbmdOYW1lKToKKyAgICAgICAgKEV3a1ZpZXc6OmNyZWF0ZUdM
U3VyZmFjZSk6CisgICAgICAgIChFd2tWaWV3OjppbmZvcm1VUkxDaGFuZ2UpOgorICAgICAgICAo
RXdrVmlldzo6dGFrZVNuYXBzaG90KToKKworICAgICAgICAgICAgQmFzZSBtZXRob2RzIG9uIEMg
QVBJIGluc3RlYWQgb2YgaW50ZXJuYWwgQVBJIGFzIG11Y2gKKyAgICAgICAgICAgIGFzIGN1cnJl
bnRseSBwb3NzaWJsZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaDoK
KyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJWaWV3KToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlldzo6cGFnZVJlZik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmV2YXNPYmplY3Qp
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpwYWdlKToKKyAgICAgICAgKEV3a1ZpZXcpOgor
ICAgICAgICAoRXdrVmlldzo6d2tWaWV3KToKKyAgICAgICAgKEV3a1ZpZXc6OnBhZ2UpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcDoKKyAgICAgICAgKGNyZWF0ZUV3
a1ZpZXcpOgorICAgICAgICAoZXdrX3ZpZXdfYmFzZV9hZGQpOgorICAgICAgICAoZXdrX3ZpZXdf
c21hcnRfYWRkKToKKworICAgICAgICAgICAgTW9kaWZ5IHRvIHJldHVybiB0aGUgRXdrVmlldyBj
bGFzcyBmb3Igbm93LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJp
dmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVJbnNw
ZWN0b3JQYWdlKToKKworICAgICAgICAgICAgVXBkYXRlZCBkdWUgdG8gY2hhbmdlZCBBUEkuCisK
IDIwMTMtMDEtMjQgIEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuICA8a2VubmV0aEB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFtFRkxdW1dLMl0gVXNlIEMgQVBJIGluc2lkZSBld2tfdXJsX3Jlc3Bv
bnNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLQVBJ
Q2FzdEVmbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS0FQSUNhc3RF
ZmwuaAppbmRleCBiMDEzYTBhLi4xODg5ZmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0MvZWZsL1dLQVBJQ2FzdEVmbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy9lZmwvV0tBUElDYXN0RWZsLmgKQEAgLTI0LDE1ICsyNCwxMSBAQAogI2Vy
cm9yICJQbGVhc2UgI2luY2x1ZGUgXCJXS0FQSUNhc3QuaFwiIGluc3RlYWQgb2YgdGhpcyBmaWxl
IGRpcmVjdGx5LiIKICNlbmRpZgogCi0jaWYgVVNFKEVPKQotdHlwZWRlZiBzdHJ1Y3QgX0VvIEV2
YXNfT2JqZWN0OwotI2Vsc2UKLXR5cGVkZWYgc3RydWN0IF9FdmFzX09iamVjdCBFdmFzX09iamVj
dDsKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotV0tfQUREX0FQSV9NQVBQSU5HKFdL
Vmlld1JlZiwgRXZhc19PYmplY3QpCitjbGFzcyBXZWJWaWV3OworCitXS19BRERfQVBJX01BUFBJ
TkcoV0tWaWV3UmVmLCBXZWJWaWV3KQogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9lZmwvV0tWaWV3LmNwcAppbmRleCAzMmI5ZDhmLi44MTY3Y2MyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwCkBAIC0yOSwyNCArMjks
NDYgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogV0tWaWV3UmVmIFdLVmlld0NyZWF0ZShF
dmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdl
R3JvdXBSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKGV3a192aWV3X2Jhc2VfYWRkKGNhbnZhcywg
Y29udGV4dFJlZiwgcGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlvcikpOworICAg
IHJldHVybiBld2tfdmlld19iYXNlX2FkZChjYW52YXMsIGNvbnRleHRSZWYsIHBhZ2VHcm91cFJl
ZiwgRXdrVmlldzo6TGVnYWN5QmVoYXZpb3IpLT53a1ZpZXcoKTsKIH0KIAogV0tWaWV3UmVmIFdL
Vmlld0NyZWF0ZVdpdGhGaXhlZExheW91dChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250
ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQVBJ
KGV3a192aWV3X2Jhc2VfYWRkKGNhbnZhcywgY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmLCBFd2tW
aWV3OjpEZWZhdWx0QmVoYXZpb3IpKTsKKyAgICByZXR1cm4gZXdrX3ZpZXdfYmFzZV9hZGQoY2Fu
dmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OkRlZmF1bHRCZWhhdmlvcikt
PndrVmlldygpOworfQorCit2b2lkIFdLVmlld0luaXRpYWxpemUoV0tWaWV3UmVmIHZpZXdSZWYp
Cit7CisgICAgdG9JbXBsKHZpZXdSZWYpLT5pbml0aWFsaXplKCk7CiB9CiAKIFdLUGFnZVJlZiBX
S1ZpZXdHZXRQYWdlKFdLVmlld1JlZiB2aWV3UmVmKQogewotICAgIEV3a1ZpZXcqIHZpZXcgPSBF
d2tWaWV3Ojpmcm9tRXZhc09iamVjdCh0b0ltcGwodmlld1JlZikpOworICAgIHJldHVybiB0b0lt
cGwodmlld1JlZiktPnBhZ2VSZWYoKTsKK30KIAotICAgIHJldHVybiB2aWV3LT53a1BhZ2UoKTsK
K3ZvaWQgV0tWaWV3U2V0VGhlbWVQYXRoKFdLVmlld1JlZiB2aWV3UmVmLCBXS1N0cmluZ1JlZiB0
aGVtZSkKK3sKKyAgICB0b0ltcGwodmlld1JlZiktPnNldFRoZW1lUGF0aCh0aGVtZSk7CiB9CiAK
LVdLSW1hZ2VSZWYgV0tWaWV3Q3JlYXRlU25hcHNob3QoV0tWaWV3UmVmIHZpZXdSZWYpCit2b2lk
IFdLVmlld1N1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyhXS1ZpZXdSZWYgdmll
d1JlZikKIHsKLSAgICBFd2tWaWV3KiB2aWV3ID0gRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QodG9J
bXBsKHZpZXdSZWYpKTsKKyAgICB0b0ltcGwodmlld1JlZiktPnN1c3BlbmRBY3RpdmVET01PYmpl
Y3RzQW5kQW5pbWF0aW9ucygpOworfQogCi0gICAgcmV0dXJuIFdLSW1hZ2VDcmVhdGVGcm9tQ2Fp
cm9TdXJmYWNlKHZpZXctPnRha2VTbmFwc2hvdCgpLmdldCgpLCAwIC8qIG9wdGlvbnMgKi8pOwor
dm9pZCBXS1ZpZXdSZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyhXS1ZpZXdSZWYg
dmlld1JlZikKK3sKKyAgICB0b0ltcGwodmlld1JlZiktPnJlc3VtZUFjdGl2ZURPTU9iamVjdHNB
bmRBbmltYXRpb25zKCk7Cit9CisKK0V2YXNfT2JqZWN0KiBXS1ZpZXdHZXRFdmFzT2JqZWN0KFdL
Vmlld1JlZiB2aWV3UmVmKQoreworICAgIHJldHVybiB0b0ltcGwodmlld1JlZiktPmV2YXNPYmpl
Y3QoKTsKK30KKworV0tJbWFnZVJlZiBXS1ZpZXdDcmVhdGVTbmFwc2hvdChXS1ZpZXdSZWYgdmll
d1JlZikKK3sKKyAgICBFd2tWaWV3KiBld2tWaWV3ID0gRXdrVmlldzo6ZnJvbUV2YXNPYmplY3Qo
dG9JbXBsKHZpZXdSZWYpLT5ldmFzT2JqZWN0KCkpOworICAgIHJldHVybiBXS0ltYWdlQ3JlYXRl
RnJvbUNhaXJvU3VyZmFjZShld2tWaWV3LT50YWtlU25hcHNob3QoKS5nZXQoKSwgMCAvKiBvcHRp
b25zICovKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9l
ZmwvV0tWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5o
CmluZGV4IGNjNzMwN2MuLjIwYzMzMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9DL2VmbC9XS1ZpZXcuaApAQCAtMjQsOCArMjQsMTAgQEAKIAogI2lmIFVTRShFTykKIHR5cGVk
ZWYgc3RydWN0IF9FbyBFdmFzOwordHlwZWRlZiBzdHJ1Y3QgX0VvIEV2YXNfT2JqZWN0OwogI2Vs
c2UKIHR5cGVkZWYgc3RydWN0IF9FdmFzIEV2YXM7Cit0eXBlZGVmIHN0cnVjdCBfRXZhc19PYmpl
Y3QgRXZhc19PYmplY3Q7CiAjZW5kaWYKIAogI2lmZGVmIF9fY3BsdXNwbHVzCkBAIC0zNiw5ICsz
OCwxOCBAQCBXS19FWFBPUlQgV0tWaWV3UmVmIFdLVmlld0NyZWF0ZShFdmFzKiBjYW52YXMsIFdL
Q29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91cAogCiBXS19FWFBPUlQgV0tWaWV3UmVmIFdL
Vmlld0NyZWF0ZVdpdGhGaXhlZExheW91dChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250
ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXApOwogCi1XS19FWFBPUlQgV0tQYWdlUmVmIFdL
Vmlld0dldFBhZ2UoV0tWaWV3UmVmIHZpZXcpOworV0tfRVhQT1JUIHZvaWQgV0tWaWV3SW5pdGlh
bGl6ZShXS1ZpZXdSZWYpOwogCi1XS19FWFBPUlQgV0tJbWFnZVJlZiBXS1ZpZXdDcmVhdGVTbmFw
c2hvdChXS1ZpZXdSZWYgdmlld1JlZik7CitXS19FWFBPUlQgV0tQYWdlUmVmIFdLVmlld0dldFBh
Z2UoV0tWaWV3UmVmKTsKKworV0tfRVhQT1JUIHZvaWQgV0tWaWV3U2V0VGhlbWVQYXRoKFdLVmll
d1JlZiwgV0tTdHJpbmdSZWYpOworCitXS19FWFBPUlQgdm9pZCBXS1ZpZXdTdXNwZW5kQWN0aXZl
RE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoV0tWaWV3UmVmKTsKK1dLX0VYUE9SVCB2b2lkIFdLVmll
d1Jlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKFdLVmlld1JlZik7CisKK1dLX0VY
UE9SVCBFdmFzX09iamVjdCogV0tWaWV3R2V0RXZhc09iamVjdChXS1ZpZXdSZWYpOworCitXS19F
WFBPUlQgV0tJbWFnZVJlZiBXS1ZpZXdDcmVhdGVTbmFwc2hvdChXS1ZpZXdSZWYpOwogCiAjaWZk
ZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL0V3a1ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdr
Vmlldy5jcHAKaW5kZXggMTMzYTE1Zi4uOGVjNTUxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAKQEAgLTM4LDcgKzM4LDkgQEAKICNpbmNsdWRlICJX
S0RpY3Rpb25hcnkuaCIKICNpbmNsdWRlICJXS0dlb21ldHJ5LmgiCiAjaW5jbHVkZSAiV0tOdW1i
ZXIuaCIKKyNpbmNsdWRlICJXS1BhZ2VHcm91cC5oIgogI2luY2x1ZGUgIldLU3RyaW5nLmgiCisj
aW5jbHVkZSAiV0tWaWV3LmgiCiAjaW5jbHVkZSAiV2ViQ29udGV4dC5oIgogI2luY2x1ZGUgIldl
YkltYWdlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCkBAIC0xMTAsMTQgKzExMiw1NSBA
QCBjb25zdCBFdmFzX09iamVjdCogRXdrVmlldzo6dmlld0Zyb21QYWdlVmlld01hcChjb25zdCBX
S1BhZ2VSZWYgcGFnZSkKICAgICByZXR1cm4gcGFnZVZpZXdNYXAoKS5nZXQocGFnZSk7CiB9CiAK
LUV3a1ZpZXc6OkV3a1ZpZXcoRXZhc19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdr
Q29udGV4dD4gY29udGV4dCwgUGFzc1JlZlB0cjxXZWJQYWdlR3JvdXA+IHBhZ2VHcm91cCwgVmll
d0JlaGF2aW9yIGJlaGF2aW9yKQotICAgIDogbV9ldmFzT2JqZWN0KGV2YXNPYmplY3QpCituYW1l
c3BhY2UgV2ViS2l0IHsKKworV2ViVmlldzo6V2ViVmlldyhXZWJDb250ZXh0KiBjb250ZXh0LCBQ
YWdlQ2xpZW50KiBwYWdlQ2xpZW50LCBXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCwgRXZhc19PYmpl
Y3QqIGV2YXNPYmplY3QpCisgICAgOiBtX3dlYlBhZ2VQcm94eShjb250ZXh0LT5jcmVhdGVXZWJQ
YWdlKHBhZ2VDbGllbnQsIHBhZ2VHcm91cCkpCisgICAgLCBtX2V2YXNPYmplY3QoZXZhc09iamVj
dCkKK3sKKyAgICBtX3dlYlBhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNl
dEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKHRydWUpOworICAgIG1fd2ViUGFnZVByb3h5
LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0Rm9yY2VDb21wb3NpdGluZ01vZGUodHJ1
ZSk7CisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgbV93ZWJQYWdlUHJveHktPmZ1
bGxTY3JlZW5NYW5hZ2VyKCktPnNldFdlYlZpZXcobV9ldmFzT2JqZWN0KTsKKyNlbmRpZgorfQor
CitXZWJWaWV3Ojp+V2ViVmlldygpCit7CisgICAgbV93ZWJQYWdlUHJveHktPmNsb3NlKCk7Cit9
CisKK3ZvaWQgV2ViVmlldzo6aW5pdGlhbGl6ZSgpCit7CisgICAgbV93ZWJQYWdlUHJveHktPmlu
aXRpYWxpemVXZWJQYWdlKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6c2V0VGhlbWVQYXRoKFdLU3Ry
aW5nUmVmIHRoZW1lKQoreworICAgIG1fd2ViUGFnZVByb3h5LT5zZXRUaGVtZVBhdGgodG9XVEZT
dHJpbmcodGhlbWUpLnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIFdlYlZpZXc6OnN1c3BlbmRB
Y3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpCit7CisgICAgbV93ZWJQYWdlUHJveHktPnN1
c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworfQorCit2b2lkIFdlYlZpZXc6
OnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCkKK3sKKyAgICBtX3dlYlBhZ2VQ
cm94eS0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKK0V3a1ZpZXc6OkV3a1ZpZXcoRXZhc19PYmplY3QqIHZpZXcsIFBh
c3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgV2ViUGFnZUdyb3VwKiBwYWdlR3JvdXAsIFZp
ZXdCZWhhdmlvciBiZWhhdmlvcikKKyAgICA6IG1fZXZhc09iamVjdCh2aWV3KQogICAgICwgbV9j
b250ZXh0KGNvbnRleHQpCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgICwg
bV9wZW5kaW5nU3VyZmFjZVJlc2l6ZShmYWxzZSkKICNlbmRpZgogICAgICwgbV9wYWdlQ2xpZW50
KGJlaGF2aW9yID09IERlZmF1bHRCZWhhdmlvciA/IFBhZ2VDbGllbnREZWZhdWx0SW1wbDo6Y3Jl
YXRlKHRoaXMpIDogUGFnZUNsaWVudExlZ2FjeUltcGw6OmNyZWF0ZSh0aGlzKSkKLSAgICAsIG1f
cGFnZVByb3h5KG1fY29udGV4dC0+d2ViQ29udGV4dCgpLT5jcmVhdGVXZWJQYWdlKG1fcGFnZUNs
aWVudC5nZXQoKSwgcGFnZUdyb3VwLmdldCgpKSkKKyAgICAsIG1fd2ViVmlldyhhZG9wdFB0cihu
ZXcgV2ViVmlldyhtX2NvbnRleHQtPndlYkNvbnRleHQoKS5nZXQoKSwgbV9wYWdlQ2xpZW50Lmdl
dCgpLCBwYWdlR3JvdXAsIHZpZXcpKSkKICAgICAsIG1fcGFnZUxvYWRDbGllbnQoUGFnZUxvYWRD
bGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKICAgICAsIG1fcGFnZVBvbGljeUNsaWVudChQYWdlUG9s
aWN5Q2xpZW50RWZsOjpjcmVhdGUodGhpcykpCiAgICAgLCBtX3BhZ2VVSUNsaWVudChQYWdlVUlD
bGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKQEAgLTEyNyw3ICsxNzAsNyBAQCBFd2tWaWV3OjpFd2tW
aWV3KEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRl
eHQsIFBhc3NSZQogI2lmIEVOQUJMRShWSUJSQVRJT04pCiAgICAgLCBtX3ZpYnJhdGlvbkNsaWVu
dChWaWJyYXRpb25DbGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKICNlbmRpZgotICAgICwgbV9iYWNr
Rm9yd2FyZExpc3QoRXdrQmFja0ZvcndhcmRMaXN0OjpjcmVhdGUodG9BUEkobV9wYWdlUHJveHkt
PmJhY2tGb3J3YXJkTGlzdCgpKSkpCisgICAgLCBtX2JhY2tGb3J3YXJkTGlzdChFd2tCYWNrRm9y
d2FyZExpc3Q6OmNyZWF0ZShXS1BhZ2VHZXRCYWNrRm9yd2FyZExpc3Qod2tQYWdlKCkpKSkKICNp
ZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKICAgICAsIG1fcGFnZVNjYWxlRmFjdG9yKDEpCiAj
ZW5kaWYKQEAgLTE0NCwyOSArMTg3LDE4IEBAIEV3a1ZpZXc6OkV3a1ZpZXcoRXZhc19PYmplY3Qq
IGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgUGFzc1JlCiB7CiAg
ICAgQVNTRVJUKG1fZXZhc09iamVjdCk7CiAgICAgQVNTRVJUKG1fY29udGV4dCk7Ci0gICAgQVNT
RVJUKG1fcGFnZVByb3h5KTsKIAotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBt
X3BhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdFbmFibGVkKHRydWUpOwotICAgIG1fcGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJl
ZmVyZW5jZXMoKS0+c2V0Rm9yY2VDb21wb3NpdGluZ01vZGUodHJ1ZSk7Ci0jaWYgRU5BQkxFKFdF
QkdMKQotICAgIG1fcGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0V2Vi
R0xFbmFibGVkKHRydWUpOwotI2VuZGlmCi0gICAgaWYgKGJlaGF2aW9yID09IERlZmF1bHRCZWhh
dmlvcikKLSAgICAgICAgbV9wYWdlUHJveHktPnNldFVzZUZpeGVkTGF5b3V0KHRydWUpOwotI2Vu
ZGlmCisgICAgV0tWaWV3SW5pdGlhbGl6ZSh3a1ZpZXcoKSk7CiAKLSAgICBtX3BhZ2VQcm94eS0+
aW5pdGlhbGl6ZVdlYlBhZ2UoKTsKKyAgICBXS1BhZ2VTZXRVc2VGaXhlZExheW91dCh3a1BhZ2Uo
KSwgYmVoYXZpb3IgPT0gRGVmYXVsdEJlaGF2aW9yKTsKIAotI2lmIEVOQUJMRShGVUxMU0NSRUVO
X0FQSSkKLSAgICBtX3BhZ2VQcm94eS0+ZnVsbFNjcmVlbk1hbmFnZXIoKS0+c2V0V2ViVmlldyht
X2V2YXNPYmplY3QpOwotICAgIG1fcGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMo
KS0+c2V0RnVsbFNjcmVlbkVuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoV0VCX0FV
RElPKQotICAgIG1fcGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0V2Vi
QXVkaW9FbmFibGVkKHRydWUpOwotI2VuZGlmCisgICAgV0tQYWdlR3JvdXBSZWYgd2tQYWdlR3Jv
dXAgPSBXS1BhZ2VHZXRQYWdlR3JvdXAod2tQYWdlKCkpOworICAgIFdLUHJlZmVyZW5jZXNSZWYg
d2tQcmVmZXJlbmNlcyA9IFdLUGFnZUdyb3VwR2V0UHJlZmVyZW5jZXMod2tQYWdlR3JvdXApOwog
Ci0gICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRPZmZsaW5l
V2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQodHJ1ZSk7CisgICAgV0tQcmVmZXJlbmNlc1NldFdl
YkdMRW5hYmxlZCh3a1ByZWZlcmVuY2VzLCB0cnVlKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0RnVs
bFNjcmVlbkVuYWJsZWQod2tQcmVmZXJlbmNlcywgdHJ1ZSk7CisgICAgV0tQcmVmZXJlbmNlc1Nl
dFdlYkF1ZGlvRW5hYmxlZCh3a1ByZWZlcmVuY2VzLCB0cnVlKTsKKyAgICBXS1ByZWZlcmVuY2Vz
U2V0T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKHdrUHJlZmVyZW5jZXMsIHRydWUp
OwogCiAgICAgLy8gRW5hYmxlIG1vdXNlIGV2ZW50cyBieSBkZWZhdWx0CiAgICAgc2V0TW91c2VF
dmVudHNFbmFibGVkKHRydWUpOwpAQCAtMTgyLDggKzIxNCw2IEBAIEV3a1ZpZXc6OkV3a1ZpZXco
RXZhc19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwg
UGFzc1JlCiAKIEV3a1ZpZXc6On5Fd2tWaWV3KCkKIHsKLSAgICBtX3BhZ2VQcm94eS0+Y2xvc2Uo
KTsKLQogICAgIC8vIFVucmVnaXN0ZXIgaWNvbiBjaGFuZ2UgY2FsbGJhY2suCiAgICAgRXdrRmF2
aWNvbkRhdGFiYXNlKiBpY29uRGF0YWJhc2UgPSBtX2NvbnRleHQtPmZhdmljb25EYXRhYmFzZSgp
OwogICAgIEFTU0VSVChpY29uRGF0YWJhc2UpOwpAQCAtMjExLDkgKzI0MSw5IEBAIEV3a1ZpZXcq
IEV3a1ZpZXc6OmZyb21FdmFzT2JqZWN0KGNvbnN0IEV2YXNfT2JqZWN0KiB2aWV3KQogICogQGlu
dGVybmFsCiAgKiBSZXRyaWV2ZXMgdGhlIGludGVybmFsIFdLUGFnZSBmb3IgdGhpcyB2aWV3Lgog
ICovCi1XS1BhZ2VSZWYgRXdrVmlldzo6d2tQYWdlKCkKK1dLUGFnZVJlZiBFd2tWaWV3Ojp3a1Bh
Z2UoKSBjb25zdAogewotICAgIHJldHVybiB0b0FQSShtX3BhZ2VQcm94eS5nZXQoKSk7CisgICAg
cmV0dXJuIFdLVmlld0dldFBhZ2Uod2tWaWV3KCkpOwogfQogCiB2b2lkIEV3a1ZpZXc6OnNldEN1
cnNvcihjb25zdCBDdXJzb3ImIGN1cnNvcikKQEAgLTI5Nyw3ICszMjcsNyBAQCB2b2lkIEV3a1Zp
ZXc6OnNldERldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlKQogCiBmbG9hdCBFd2tWaWV3Ojpk
ZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcGFnZVByb3h5LT5kZXZp
Y2VTY2FsZUZhY3RvcigpOworICAgIHJldHVybiBXS1BhZ2VHZXRCYWNraW5nU2NhbGVGYWN0b3Io
d2tQYWdlKCkpOwogfQogCiBBZmZpbmVUcmFuc2Zvcm0gRXdrVmlldzo6dHJhbnNmb3JtRnJvbVNj
ZW5lKCkgY29uc3QKQEAgLTUyMyw3ICs1NTMsNyBAQCBib29sIEV3a1ZpZXc6OmlzVmlzaWJsZSgp
IGNvbnN0CiAKIGNvbnN0IGNoYXIqIEV3a1ZpZXc6OnRpdGxlKCkgY29uc3QKIHsKLSAgICBtX3Rp
dGxlID0gbV9wYWdlUHJveHktPnBhZ2VUaXRsZSgpLnV0ZjgoKS5kYXRhKCk7CisgICAgbV90aXRs
ZSA9IFdLRWluYVNoYXJlZFN0cmluZyhBZG9wdFdLLCBXS1BhZ2VDb3B5VGl0bGUod2tQYWdlKCkp
KTsKIAogICAgIHJldHVybiBtX3RpdGxlOwogfQpAQCAtNTQ2LDI0ICs1NzYsMjYgQEAgdm9pZCBF
d2tWaWV3OjpzZXRUaGVtZVBhdGgoY29uc3QgY2hhciogdGhlbWUpCiB7CiAgICAgaWYgKG1fdGhl
bWUgIT0gdGhlbWUpIHsKICAgICAgICAgbV90aGVtZSA9IHRoZW1lOwotICAgICAgICBtX3BhZ2VQ
cm94eS0+c2V0VGhlbWVQYXRoKHRoZW1lKTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHdrVGhlbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHRoZW1l
KSk7CisgICAgICAgIFdLVmlld1NldFRoZW1lUGF0aCh3a1ZpZXcoKSwgd2tUaGVtZS5nZXQoKSk7
CiAgICAgfQogfQogCiBjb25zdCBjaGFyKiBFd2tWaWV3OjpjdXN0b21UZXh0RW5jb2RpbmdOYW1l
KCkgY29uc3QKIHsKLSAgICBTdHJpbmcgY3VzdG9tRW5jb2RpbmcgPSBtX3BhZ2VQcm94eS0+Y3Vz
dG9tVGV4dEVuY29kaW5nTmFtZSgpOwotICAgIGlmIChjdXN0b21FbmNvZGluZy5pc0VtcHR5KCkp
CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGN1c3RvbUVuY29kaW5nID0gYWRvcHRXSyhX
S1BhZ2VDb3B5Q3VzdG9tVGV4dEVuY29kaW5nTmFtZSh3a1BhZ2UoKSkpOworICAgIGlmIChXS1N0
cmluZ0lzRW1wdHkoY3VzdG9tRW5jb2RpbmcuZ2V0KCkpKQogICAgICAgICByZXR1cm4gMDsKIAot
ICAgIG1fY3VzdG9tRW5jb2RpbmcgPSBjdXN0b21FbmNvZGluZy51dGY4KCkuZGF0YSgpOworICAg
IG1fY3VzdG9tRW5jb2RpbmcgPSBXS0VpbmFTaGFyZWRTdHJpbmcoY3VzdG9tRW5jb2RpbmcuZ2V0
KCkpOwogCiAgICAgcmV0dXJuIG1fY3VzdG9tRW5jb2Rpbmc7CiB9CiAKIHZvaWQgRXdrVmlldzo6
c2V0Q3VzdG9tVGV4dEVuY29kaW5nTmFtZShjb25zdCBTdHJpbmcmIGVuY29kaW5nKQogewotICAg
IG1fcGFnZVByb3h5LT5zZXRDdXN0b21UZXh0RW5jb2RpbmdOYW1lKGVuY29kaW5nKTsKKyAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tFbmNvZGluZyA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoZW5jb2RpbmcudXRmOCgpLmRhdGEoKSkpOworICAgIFdLUGFnZVNl
dEN1c3RvbVRleHRFbmNvZGluZ05hbWUod2tQYWdlKCksIHdrRW5jb2RpbmcuZ2V0KCkpOwogfQog
CiB2b2lkIEV3a1ZpZXc6OnNldE1vdXNlRXZlbnRzRW5hYmxlZChib29sIGVuYWJsZWQpCkBAIC02
NDUsOSArNjc3LDYgQEAgYm9vbCBFd2tWaWV3OjpjcmVhdGVHTFN1cmZhY2UoY29uc3QgSW50U2l6
ZSYgdmlld1NpemUpCiAgICAgICAgIGlmICghbV9ldmFzR0wpIHsKICAgICAgICAgICAgIFdBUk4o
IkZhaWxlZCB0byBjcmVhdGUgRXZhc19HTCwgZmFsbGluZyBiYWNrIHRvIHNvZnR3YXJlIG1vZGUu
Iik7CiAgICAgICAgICAgICBtX2lzSGFyZHdhcmVBY2NlbGVyYXRlZCA9IGZhbHNlOwotI2lmIEVO
QUJMRShXRUJHTCkKLSAgICAgICAgICAgIG1fcGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVy
ZW5jZXMoKS0+c2V0V2ViR0xFbmFibGVkKGZhbHNlKTsKLSNlbmRpZgogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtODkwLDE1ICs5MTksMTMgQEAgdW5zaWdu
ZWQgbG9uZyBsb25nIEV3a1ZpZXc6OmluZm9ybURhdGFiYXNlUXVvdGFSZWFjaGVkKGNvbnN0IFN0
cmluZyYgZGF0YWJhc2VOYW0KICAqLwogdm9pZCBFd2tWaWV3OjppbmZvcm1VUkxDaGFuZ2UoKQog
ewotICAgIFN0cmluZyBhY3RpdmVVUkwgPSBtX3BhZ2VQcm94eS0+YWN0aXZlVVJMKCk7Ci0gICAg
aWYgKGFjdGl2ZVVSTC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBXS1JldGFpblB0
cjxXS1VSTFJlZj4gd2tBY3RpdmVVUkwgPSBhZG9wdFdLKFdLUGFnZUNvcHlBY3RpdmVVUkwod2tQ
YWdlKCkpKTsKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tVUkxTdHJpbmcgPSBhZG9w
dFdLKFdLVVJMQ29weVN0cmluZyh3a0FjdGl2ZVVSTC5nZXQoKSkpOwogCi0gICAgQ1N0cmluZyBy
YXdBY3RpdmVVUkwgPSBhY3RpdmVVUkwudXRmOCgpOwotICAgIGlmIChtX3VybCA9PSByYXdBY3Rp
dmVVUkwuZGF0YSgpKQorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHdrVVJM
U3RyaW5nLmdldCgpLCBtX3VybCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fdXJsID0gcmF3
QWN0aXZlVVJMLmRhdGEoKTsKKyAgICBtX3VybCA9IFdLRWluYVNoYXJlZFN0cmluZyh3a1VSTFN0
cmluZy5nZXQoKSk7CiAgICAgc21hcnRDYWxsYmFjazxVUkxDaGFuZ2VkPigpLmNhbGwobV91cmwp
OwogCiAgICAgLy8gVXBkYXRlIHRoZSB2aWV3J3MgZmF2aWNvbi4KQEAgLTEwMzAsNyArMTA1Nyw3
IEBAIHZvaWQgRXdrVmlldzo6b25GYXZpY29uQ2hhbmdlZChjb25zdCBjaGFyKiBwYWdlVVJMLCB2
b2lkKiBldmVudEluZm8pCiBQYXNzUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gRXdrVmlldzo6dGFr
ZVNuYXBzaG90KCkKIHsKICAgICAvLyBTdXNwZW5kIGFsbCBhbmltYXRpb25zIGJlZm9yZSB0YWtp
bmcgdGhlIHNuYXBzaG90LgotICAgIG1fcGFnZVByb3h5LT5zdXNwZW5kQWN0aXZlRE9NT2JqZWN0
c0FuZEFuaW1hdGlvbnMoKTsKKyAgICBXS1ZpZXdTdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFu
aW1hdGlvbnMod2tWaWV3KCkpOwogCiAgICAgLy8gV2FpdCBmb3IgdGhlIHBlbmRpbmcgcmVwYWlu
dCBldmVudHMgdG8gYmUgcHJvY2Vzc2VkLgogICAgIHdoaWxlIChtX2Rpc3BsYXlUaW1lci5pc0Fj
dGl2ZSgpKQpAQCAtMTA0Miw3ICsxMDY5LDcgQEAgUGFzc1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+
IEV3a1ZpZXc6OnRha2VTbmFwc2hvdCgpCiAjZW5kaWYKICAgICAgICAgUmVmUHRyPGNhaXJvX3N1
cmZhY2VfdD4gc25hcHNob3QgPSBjcmVhdGVTdXJmYWNlRm9ySW1hZ2Uoc2QtPmltYWdlKTsKICAg
ICAgICAgLy8gUmVzdW1lIGFsbCBhbmltYXRpb25zLgotICAgICAgICBtX3BhZ2VQcm94eS0+cmVz
dW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKKyAgICAgICAgV0tWaWV3UmVzdW1l
QWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMod2tWaWV3KCkpOwogCiAgICAgICAgIHJldHVy
biBzbmFwc2hvdC5yZWxlYXNlKCk7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpA
QCAtMTA1MCw3ICsxMDc3LDcgQEAgUGFzc1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IEV3a1ZpZXc6
OnRha2VTbmFwc2hvdCgpCiAKICAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzbmFwc2hvdCA9
IGdldEltYWdlU3VyZmFjZUZyb21GcmFtZUJ1ZmZlcigwLCAwLCBzZC0+dmlldy53LCBzZC0+dmll
dy5oKTsKICAgICAvLyBSZXN1bWUgYWxsIGFuaW1hdGlvbnMuCi0gICAgbV9wYWdlUHJveHktPnJl
c3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7CisgICAgV0tWaWV3UmVzdW1lQWN0
aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMod2tWaWV3KCkpOwogCiAgICAgcmV0dXJuIHNuYXBz
aG90LnJlbGVhc2UoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvRXdrVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
RXdrVmlldy5oCmluZGV4IGEyMTNmOTcuLmNlNTFiYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKQEAgLTQ5LDYgKzQ5LDEwIEBACiAjaW5jbHVkZSAiRXZh
c0dMU3VyZmFjZS5oIgogI2VuZGlmCiAKKyNpbmNsdWRlICJXZWJDb250ZXh0LmgiCisjaW5jbHVk
ZSAiV2ViUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIKKwogbmFtZXNw
YWNlIFdlYktpdCB7CiBjbGFzcyBDb250ZXh0TWVudUNsaWVudEVmbDsKIGNsYXNzIEZpbmRDbGll
bnRFZmw7CkBAIC05NiwyMSArMTAwLDQ4IEBAIHR5cGVkZWYgc3RydWN0IF9FdmFzX0dMX1N1cmZh
Y2UgRXZhc19HTF9TdXJmYWNlOwogCiB0eXBlZGVmIHN0cnVjdCBFd2tfVmlld19TbWFydF9EYXRh
IEV3a19WaWV3X1NtYXJ0X0RhdGE7CiAKLWNsYXNzIEV3a1ZpZXcgeworbmFtZXNwYWNlIFdlYktp
dCB7CisKK2NsYXNzIFdlYlZpZXcgewogcHVibGljOgorICAgIFdlYlZpZXcoV2ViQ29udGV4dCos
IFBhZ2VDbGllbnQqLCBXZWJQYWdlR3JvdXAqLCBFdmFzX09iamVjdCopOworICAgIHZpcnR1YWwg
fldlYlZpZXcoKTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZSgpOwogCisgICAgV0tQYWdlUmVmIHBh
Z2VSZWYoKSB7IHJldHVybiB0b0FQSShtX3dlYlBhZ2VQcm94eS5nZXQoKSk7IH0KKworICAgIHZv
aWQgc2V0VGhlbWVQYXRoKFdLU3RyaW5nUmVmKTsKKyAgICB2b2lkIHN1c3BlbmRBY3RpdmVET01P
YmplY3RzQW5kQW5pbWF0aW9ucygpOworICAgIHZvaWQgcmVzdW1lQWN0aXZlRE9NT2JqZWN0c0Fu
ZEFuaW1hdGlvbnMoKTsKKworICAgIC8vIEZJWE1FOiBSZW1vdmUgd2hlbiBwb3NzaWJsZS4KKyAg
ICBFdmFzX09iamVjdCogZXZhc09iamVjdCgpIHsgcmV0dXJuIG1fZXZhc09iamVjdDsgfQorICAg
IFdlYlBhZ2VQcm94eSogcGFnZSgpIHsgcmV0dXJuIG1fd2ViUGFnZVByb3h5LmdldCgpOyB9CisK
K3ByaXZhdGU6CisgICAgV1RGOjpSZWZQdHI8V2ViUGFnZVByb3h5PiBtX3dlYlBhZ2VQcm94eTsK
KyAgICBFdmFzX09iamVjdCogbV9ldmFzT2JqZWN0OworfTsKKworfQorCitjbGFzcyBFd2tWaWV3
IHsKK3B1YmxpYzoKICAgICBlbnVtIFZpZXdCZWhhdmlvciB7CiAgICAgICAgIExlZ2FjeUJlaGF2
aW9yLAogICAgICAgICBEZWZhdWx0QmVoYXZpb3IKICAgICB9OwotICAgIEV3a1ZpZXcoRXZhc19P
YmplY3QqIHZpZXcsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgUGFzc1JlZlB0cjxX
ZWJLaXQ6OldlYlBhZ2VHcm91cD4gcGFnZUdyb3VwLCBWaWV3QmVoYXZpb3IpOworICAgIEV3a1Zp
ZXcoRXZhc19PYmplY3QqIHZpZXcsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgV2Vi
S2l0OjpXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCwgVmlld0JlaGF2aW9yKTsKICAgICB+RXdrVmll
dygpOwogCiAgICAgc3RhdGljIEV3a1ZpZXcqIGZyb21FdmFzT2JqZWN0KGNvbnN0IEV2YXNfT2Jq
ZWN0KiB2aWV3KTsKICAgICBFdmFzX09iamVjdCogdmlldygpIHsgcmV0dXJuIG1fZXZhc09iamVj
dDsgfQogCi0gICAgV0tQYWdlUmVmIHdrUGFnZSgpOwotICAgIFdlYktpdDo6V2ViUGFnZVByb3h5
KiBwYWdlKCkgeyByZXR1cm4gbV9wYWdlUHJveHkuZ2V0KCk7IH0KKyAgICBXS1ZpZXdSZWYgd2tW
aWV3KCkgY29uc3QgeyByZXR1cm4gdG9BUEkobV93ZWJWaWV3LmdldCgpKTsgfQorICAgIFdLUGFn
ZVJlZiB3a1BhZ2UoKSBjb25zdDsKKworICAgIFdlYktpdDo6V2ViUGFnZVByb3h5KiBwYWdlKCkg
eyByZXR1cm4gbV93ZWJWaWV3LT5wYWdlKCk7IH0KICAgICBFd2tDb250ZXh0KiBld2tDb250ZXh0
KCkgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CiAgICAgRXdrU2V0dGluZ3MqIHNldHRpbmdz
KCkgeyByZXR1cm4gbV9zZXR0aW5ncy5nZXQoKTsgfQogICAgIEV3a0JhY2tGb3J3YXJkTGlzdCog
YmFja0ZvcndhcmRMaXN0KCkgeyByZXR1cm4gbV9iYWNrRm9yd2FyZExpc3QuZ2V0KCk7IH0KQEAg
LTI0NSw3ICsyNzYsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9wZW5kaW5nU3VyZmFjZVJlc2l6
ZTsKICNlbmRpZgogICAgIE93blB0cjxXZWJLaXQ6OlBhZ2VDbGllbnRCYXNlPiBtX3BhZ2VDbGll
bnQ7Ci0gICAgUmVmUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5PiBtX3BhZ2VQcm94eTsKKyAgICBP
d25QdHI8V2ViS2l0OjpXZWJWaWV3PiBtX3dlYlZpZXc7CiAgICAgT3duUHRyPFdlYktpdDo6UGFn
ZUxvYWRDbGllbnRFZmw+IG1fcGFnZUxvYWRDbGllbnQ7CiAgICAgT3duUHRyPFdlYktpdDo6UGFn
ZVBvbGljeUNsaWVudEVmbD4gbV9wYWdlUG9saWN5Q2xpZW50OwogICAgIE93blB0cjxXZWJLaXQ6
OlBhZ2VVSUNsaWVudEVmbD4gbV9wYWdlVUlDbGllbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKaW5kZXggNzJhNmFmYS4uY2FlMDQyNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcApAQCAtNTA1LDcg
KzUwNSw3IEBAIHN0YXRpYyBpbmxpbmUgRXZhc19TbWFydCogY3JlYXRlRXdrVmlld1NtYXJ0Q2xh
c3Modm9pZCkKICAgICByZXR1cm4gc21hcnQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRXZhc19PYmpl
Y3QqIGNyZWF0ZUV3a1ZpZXcoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgUGFzc1Jl
ZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYgPSAw
LCBFd2tWaWV3OjpWaWV3QmVoYXZpb3IgYmVoYXZpb3IgPSBFd2tWaWV3OjpEZWZhdWx0QmVoYXZp
b3IpCitzdGF0aWMgaW5saW5lIEV3a1ZpZXcqIGNyZWF0ZUV3a1ZpZXcoRXZhcyogY2FudmFzLCBF
dmFzX1NtYXJ0KiBzbWFydCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VH
cm91cFJlZiBwYWdlR3JvdXBSZWYgPSAwLCBFd2tWaWV3OjpWaWV3QmVoYXZpb3IgYmVoYXZpb3Ig
PSBFd2tWaWV3OjpEZWZhdWx0QmVoYXZpb3IpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKGNhbnZhcywgMCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHNtYXJ0LCAwKTsKQEAgLTUyNSwyMSArNTI1LDIyIEBAIHN0YXRpYyBpbmxpbmUgRXZhc19PYmpl
Y3QqIGNyZWF0ZUV3a1ZpZXcoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgUGFzc1Jl
CiAgICAgLy8gRGVmYXVsdCBXZWJQYWdlR3JvdXAgaXMgY3JlYXRlZCBpbiBXZWJDb250ZXh0IGNv
bnN0cnVjdG9yIGlmIHRoZSBwYWdlR3JvdXBSZWYgaXMgMCwKICAgICAvLyBzbyB3ZSBkbyBub3Qg
bmVlZCB0byBjcmVhdGUgaXQgaGVyZS4KICAgICBzbWFydERhdGEtPnByaXYgPSBuZXcgRXdrVmll
dyhld2tWaWV3LCBjb250ZXh0LCB0b0ltcGwocGFnZUdyb3VwUmVmKSwgYmVoYXZpb3IpOwotICAg
IHJldHVybiBld2tWaWV3OworCisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+cHJpdjsKIH0KIAogLyoq
CiAgKiBAaW50ZXJuYWwKICAqIENvbnN0cnVjdHMgYSBld2tfdmlldyBFdmFzX09iamVjdCB3aXRo
IFdLVHlwZSBwYXJhbWV0ZXJzLgogICovCi1FdmFzX09iamVjdCogZXdrX3ZpZXdfYmFzZV9hZGQo
RXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFn
ZUdyb3VwUmVmLCBFd2tWaWV3OjpWaWV3QmVoYXZpb3IgYmVoYXZpb3IpCitFd2tWaWV3KiBld2tf
dmlld19iYXNlX2FkZChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1Bh
Z2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OlZpZXdCZWhhdmlvciBiZWhhdmlvcikK
IHsKICAgICByZXR1cm4gY3JlYXRlRXdrVmlldyhjYW52YXMsIGNyZWF0ZUV3a1ZpZXdTbWFydENs
YXNzKCksIGNvbnRleHRSZWYgPyBFd2tDb250ZXh0OjpjcmVhdGUodG9JbXBsKGNvbnRleHRSZWYp
KSA6IEV3a0NvbnRleHQ6OmRlZmF1bHRDb250ZXh0KCksIHBhZ2VHcm91cFJlZiwgYmVoYXZpb3Ip
OwogfQogCiBFdmFzX09iamVjdCogZXdrX3ZpZXdfc21hcnRfYWRkKEV2YXMqIGNhbnZhcywgRXZh
c19TbWFydCogc21hcnQsIEV3a19Db250ZXh0KiBjb250ZXh0KQogewotICAgIHJldHVybiBjcmVh
dGVFd2tWaWV3KGNhbnZhcywgc21hcnQsIGV3a19vYmplY3RfY2FzdDxFd2tDb250ZXh0Kj4oY29u
dGV4dCkpOworICAgIHJldHVybiBjcmVhdGVFd2tWaWV3KGNhbnZhcywgc21hcnQsIGV3a19vYmpl
Y3RfY2FzdDxFd2tDb250ZXh0Kj4oY29udGV4dCkpLT52aWV3KCk7CiB9CiAKIEV2YXNfT2JqZWN0
KiBld2tfdmlld19hZGRfd2l0aF9jb250ZXh0KEV2YXMqIGNhbnZhcywgRXdrX0NvbnRleHQqIGNv
bnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
dmlld19wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmll
d19wcml2YXRlLmgKaW5kZXggODNiNGM5Ny4uYzQ5MTJmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaApAQCAtMjUsNiArMjUs
NiBAQAogI2luY2x1ZGUgPEV2YXMuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5oPgogCi1F
dmFzX09iamVjdCogZXdrX3ZpZXdfYmFzZV9hZGQoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYs
IFdLUGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpWaWV3QmVoYXZpb3IpOworRXdrVmlldyogZXdrX3Zp
ZXdfYmFzZV9hZGQoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmLCBF
d2tWaWV3OjpWaWV3QmVoYXZpb3IpOwogCiAjZW5kaWYgLy8gZXdrX3ZpZXdfcHJpdmF0ZV9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkluc3BlY3RvclByb3h5
RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlF
ZmwuY3BwCmluZGV4IDQ2MmIyNmQuLjMxNzQ0OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwuY3BwCkBAIC05OCwxNCArOTgs
MTUgQEAgV2ViUGFnZVByb3h5KiBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVJbnNw
ZWN0b3JQYWdlKCkKICAgICBpZiAoIW1faW5zcGVjdG9yV2luZG93KQogICAgICAgICByZXR1cm4g
MDsKIAotICAgIG1faW5zcGVjdG9yVmlldyA9IGV3a192aWV3X2Jhc2VfYWRkKGVjb3JlX2V2YXNf
Z2V0KG1faW5zcGVjdG9yV2luZG93KSwgdG9BUEkocGFnZSgpLT5wcm9jZXNzKCktPmNvbnRleHQo
KSksIHRvQVBJKGluc3BlY3RvclBhZ2VHcm91cCgpKSwgRXdrVmlldzo6TGVnYWN5QmVoYXZpb3Ip
OwotICAgIEV3a1ZpZXcqIGluc3BlY3RvclZpZXdJbXBsID0gRXdrVmlldzo6ZnJvbUV2YXNPYmpl
Y3QobV9pbnNwZWN0b3JWaWV3KTsKLSAgICBpbnNwZWN0b3JWaWV3SW1wbC0+c2V0VGhlbWVQYXRo
KFRFU1RfVEhFTUVfRElSICIvZGVmYXVsdC5lZGoiKTsKKyAgICAvLyBGSVhNRTogUmVmYWN0b3Ig
dG8gdXNlIFdLVmlld1JlZi4KKyAgICBtX2luc3BlY3RvclZpZXcgPSBld2tfdmlld19iYXNlX2Fk
ZChlY29yZV9ldmFzX2dldChtX2luc3BlY3RvcldpbmRvdyksIHRvQVBJKHBhZ2UoKS0+cHJvY2Vz
cygpLT5jb250ZXh0KCkpLCB0b0FQSShpbnNwZWN0b3JQYWdlR3JvdXAoKSksIEV3a1ZpZXc6Okxl
Z2FjeUJlaGF2aW9yKS0+dmlldygpOworICAgIEV3a1ZpZXcqIGluc3BlY3RvclZpZXcgPSBFd2tW
aWV3Ojpmcm9tRXZhc09iamVjdChtX2luc3BlY3RvclZpZXcpOworICAgIGluc3BlY3RvclZpZXct
PnNldFRoZW1lUGF0aChURVNUX1RIRU1FX0RJUiAiL2RlZmF1bHQuZWRqIik7CiAKLSAgICBFd2tf
U2V0dGluZ3MqIHNldHRpbmdzID0gaW5zcGVjdG9yVmlld0ltcGwtPnNldHRpbmdzKCk7CisgICAg
RXdrX1NldHRpbmdzKiBzZXR0aW5ncyA9IGluc3BlY3RvclZpZXctPnNldHRpbmdzKCk7CiAgICAg
ZXdrX3NldHRpbmdzX2ZpbGVfYWNjZXNzX2Zyb21fZmlsZV91cmxzX2FsbG93ZWRfc2V0KHNldHRp
bmdzLCB0cnVlKTsKIAotICAgIHJldHVybiBpbnNwZWN0b3JWaWV3SW1wbC0+cGFnZSgpOworICAg
IHJldHVybiBpbnNwZWN0b3JWaWV3LT5wYWdlKCk7CiB9CiAKIHZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtT3BlbigpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggY2ZjYWNmZC4uNmI5NzJjOCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdl
TG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDEzLTAxLTI4ICBL
ZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtlbm5ldGhAd2Via2l0Lm9yZz4KKworICAgICAg
ICBbRUZMXVtXSzJdIEludHJvZHVjZSBhIFdlYlZpZXcgY2xhc3MgYXMgY291bnRlcnBhcnQgZm9y
IFdLVmlld1JlZgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTA3OTMxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQ2hhbmdlIHBsYXRmb3JtVmlldyB0byBiZSBhIFdLVmlldyBhbmQgdXNlIFdLVmlld0dldEV2
YXNPYmplY3QKKyAgICAgICAgZm9yIHRoZSBwbGFjZXMgd2hlcmUgYW4gRXZhc19PYmplY3QgaXMg
bmVlZGVkLgorCisgICAgICAgIEluc3RlYWQgb2YgZXh0cmFjdGluZyB0aGUgRWNvcmVfRXZhcyog
ZnJvbSB0aGUgbV92aWV3IHdlIHVzZQorICAgICAgICB0aGUgbV93aW5kb3cgaW5zdGVhZCwgd2hp
Y2ggYWN0dWFsbHkgaG9sZHMgdGhlIGl0LgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9QbGF0
Zm9ybVdlYlZpZXcuaDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2VmbC9QbGF0Zm9ybVdlYlZp
ZXcuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGxhdGZvcm1XZWJWaWV3OjpQbGF0Zm9y
bVdlYlZpZXcpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGxhdGZvcm1XZWJWaWV3Ojp+UGxh
dGZvcm1XZWJWaWV3KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBsYXRmb3JtV2ViVmlldzo6
cmVzaXplVG8pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGxhdGZvcm1XZWJWaWV3OjpwYWdl
KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBsYXRmb3JtV2ViVmlldzo6c2ltdWxhdGVTcGFj
ZWJhcktleVByZXNzKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBsYXRmb3JtV2ViVmlldzo6
c2ltdWxhdGVNb3VzZU1vdmUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGxhdGZvcm1XZWJW
aWV3OjpzaW11bGF0ZVJpZ2h0Q2xpY2spOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvUGxh
dGZvcm1XZWJWaWV3Lmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9lZmwvRXZlbnRTZW5k
ZXJQcm94eUVmbC5jcHA6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OnNlbmRUb3Vj
aEV2ZW50KToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6c2V0VG91Y2hNb2RpZmll
cik6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNw
cDoKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcpOgorICAg
ICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6On5QbGF0Zm9ybVdlYlZpZXcpOgorICAgICAgICAo
V1RSOjpQbGF0Zm9ybVdlYlZpZXc6OnJlc2l6ZVRvKToKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1X
ZWJWaWV3OjpwYWdlKToKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3Ojpmb2N1cyk6Cisg
ICAgICAgIChXVFI6OlBsYXRmb3JtV2ViVmlldzo6d2luZG93RnJhbWUpOgorICAgICAgICAoV1RS
OjpQbGF0Zm9ybVdlYlZpZXc6OnNldFdpbmRvd0ZyYW1lKToKKyAgICAgICAgKFdUUjo6UGxhdGZv
cm1XZWJWaWV3Ojp3aW5kb3dTbmFwc2hvdEltYWdlKToKKwogMjAxMy0wMS0yNyAgRGF2aWQgRmFy
bGVyICA8ZGZhcmxlckBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjE0MDkxMik6
IEJyb2tlIHNwZWNpZnlpbmcgbm9uLXRyaXZpYWwgQVJDSFMgdmFsdWUgdG8gbWFrZSAvIGJ1aWxk
LXdlYmtpdApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdlYlZpZXcu
aCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XZWJWaWV3LmgKaW5kZXggNWFkMWVlZC4u
ZGNhZjQ0OCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdlYlZpZXcu
aAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2ViVmlldy5oCkBAIC00NywxMyAr
NDcsOCBAQCB0eXBlZGVmIEhXTkQgUGxhdGZvcm1XaW5kb3c7CiB0eXBlZGVmIFdLVmlld1JlZiBQ
bGF0Zm9ybVdLVmlldzsKIHR5cGVkZWYgR3RrV2lkZ2V0ICpQbGF0Zm9ybVdpbmRvdzsKICNlbGlm
IFBMQVRGT1JNKEVGTCkKLSNpZiBVU0UoRU8pCi10eXBlZGVmIHN0cnVjdCBfRW8gRXZhc19PYmpl
Y3Q7Ci0jZWxzZQotdHlwZWRlZiBzdHJ1Y3QgX0V2YXNfT2JqZWN0IEV2YXNfT2JqZWN0OwotI2Vu
ZGlmCiB0eXBlZGVmIHN0cnVjdCBfRWNvcmVfRXZhcyBFY29yZV9FdmFzOwotdHlwZWRlZiBFdmFz
X09iamVjdCogUGxhdGZvcm1XS1ZpZXc7Cit0eXBlZGVmIFdLVmlld1JlZiBQbGF0Zm9ybVdLVmll
dzsKIHR5cGVkZWYgRWNvcmVfRXZhcyogUGxhdGZvcm1XaW5kb3c7CiAjZW5kaWYKIApkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwvUGxhdGZvcm1XZWJWaWV3LmNwcCBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvZWZsL1BsYXRmb3JtV2ViVmlldy5jcHAKaW5kZXggZDU0NDllYi4uYjgy
YTcwNyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwvUGxhdGZvcm1XZWJWaWV3
LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2VmbC9QbGF0Zm9ybVdlYlZpZXcuY3BwCkBA
IC02NSwzMyArNjUsMzMgQEAgUGxhdGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcoV0tDb250
ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm8KIHsKICAgICBtX3dpbmRv
dyA9IGluaXRFY29yZUV2YXMoKTsKICAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93
aW5kb3cpOwotICAgIG1fdmlldyA9IHRvSW1wbChXS1ZpZXdDcmVhdGUoZXZhcywgY29udGV4dFJl
ZiwgcGFnZUdyb3VwUmVmKSk7Ci0gICAgZXdrX3ZpZXdfdGhlbWVfc2V0KG1fdmlldywgVEhFTUVf
RElSIi9kZWZhdWx0LmVkaiIpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCht
X3ZpZXcsICJ3ZWJwcm9jZXNzLGNyYXNoZWQiLCBvbldlYlByb2Nlc3NDcmFzaGVkLCAwKTsKKyAg
ICBtX3ZpZXcgPSBXS1ZpZXdDcmVhdGUoZXZhcywgY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmKTsK
KyAgICBld2tfdmlld190aGVtZV9zZXQoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCBUSEVN
RV9ESVIiL2RlZmF1bHQuZWRqIik7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRk
KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSwgIndlYnByb2Nlc3MsY3Jhc2hlZCIsIG9uV2Vi
UHJvY2Vzc0NyYXNoZWQsIDApOwogICAgIHJlc2l6ZVRvKDYwMCwgODAwKTsKIH0KIAogUGxhdGZv
cm1XZWJWaWV3Ojp+UGxhdGZvcm1XZWJWaWV3KCkKIHsKLSAgICBldmFzX29iamVjdF9kZWwobV92
aWV3KTsKKyAgICBldmFzX29iamVjdF9kZWwoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpKTsK
ICAgICBlY29yZV9ldmFzX2ZyZWUobV93aW5kb3cpOwogICAgIGVjb3JlX2V2YXNfc2h1dGRvd24o
KTsKIH0KIAogdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnJlc2l6ZVRvKHVuc2lnbmVkIHdpZHRoLCB1
bnNpZ25lZCBoZWlnaHQpCiB7Ci0gICAgZXZhc19vYmplY3RfcmVzaXplKG1fdmlldywgd2lkdGgs
IGhlaWdodCk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKFdLVmlld0dldEV2YXNPYmplY3QobV92
aWV3KSwgd2lkdGgsIGhlaWdodCk7CiB9CiAKIFdLUGFnZVJlZiBQbGF0Zm9ybVdlYlZpZXc6OnBh
Z2UoKSBjb25zdAogewotICAgIHJldHVybiBXS1ZpZXdHZXRQYWdlKHRvQVBJKG1fdmlldykpOwor
ICAgIHJldHVybiBXS1ZpZXdHZXRQYWdlKG1fdmlldyk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJW
aWV3OjpzaW11bGF0ZVNwYWNlYmFyS2V5UHJlc3MoKQogewogICAgIEV2YXMqIGV2YXMgPSBlY29y
ZV9ldmFzX2dldChtX3dpbmRvdyk7Ci0gICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KG1fdmlldywg
dHJ1ZSk7CisgICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KFdLVmlld0dldEV2YXNPYmplY3QobV92
aWV3KSwgdHJ1ZSk7CiAgICAgZXZhc19ldmVudF9mZWVkX2tleV9kb3duKGV2YXMsICJzcGFjZSIs
ICJzcGFjZSIsICIgIiwgMCwgMCwgMCk7CiAgICAgZXZhc19ldmVudF9mZWVkX2tleV91cChldmFz
LCAic3BhY2UiLCAic3BhY2UiLCAiICIsIDAsIDEsIDApOwogfQpAQCAtOTksMTQgKzk5LDE0IEBA
IHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpzaW11bGF0ZVNwYWNlYmFyS2V5UHJlc3MoKQogdm9pZCBQ
bGF0Zm9ybVdlYlZpZXc6OnNpbXVsYXRlTW91c2VNb3ZlKHVuc2lnbmVkIHgsIHVuc2lnbmVkIHkp
CiB7CiAgICAgRXZhcyogZXZhcyA9IGVjb3JlX2V2YXNfZ2V0KG1fd2luZG93KTsKLSAgICBldmFz
X29iamVjdF9zaG93KG1fdmlldyk7CisgICAgZXZhc19vYmplY3Rfc2hvdyhXS1ZpZXdHZXRFdmFz
T2JqZWN0KG1fdmlldykpOwogICAgIGV2YXNfZXZlbnRfZmVlZF9tb3VzZV9tb3ZlKGV2YXMsIHgs
IHksIDAsIDApOwogfQogCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6c2ltdWxhdGVSaWdodENsaWNr
KHVuc2lnbmVkIHgsIHVuc2lnbmVkIHkpCiB7CiAgICAgRXZhcyogZXZhcyA9IGVjb3JlX2V2YXNf
Z2V0KG1fd2luZG93KTsKLSAgICBldmFzX29iamVjdF9zaG93KG1fdmlldyk7CisgICAgZXZhc19v
YmplY3Rfc2hvdyhXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldykpOwogICAgIGV2YXNfZXZlbnRf
ZmVlZF9tb3VzZV9tb3ZlKGV2YXMsIHgsIHksIDAsIDApOwogICAgIGV2YXNfZXZlbnRfZmVlZF9t
b3VzZV9kb3duKGV2YXMsIDMsIEVWQVNfQlVUVE9OX05PTkUsIDAsIDApOwogICAgIGV2YXNfZXZl
bnRfZmVlZF9tb3VzZV91cChldmFzLCAzLCBFVkFTX0JVVFRPTl9OT05FLCAwLCAwKTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmggYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCmluZGV4IDhmOWRjZGIuLjUxYzRiY2Mg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgKKysr
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaApAQCAtNTQsMTMgKzU0
LDggQEAgdHlwZWRlZiBzdHJ1Y3QgX0d0a1dpZGdldCBHdGtXaWRnZXQ7CiB0eXBlZGVmIFdLVmll
d1JlZiBQbGF0Zm9ybVdLVmlldzsKIHR5cGVkZWYgR3RrV2lkZ2V0KiBQbGF0Zm9ybVdpbmRvdzsK
ICNlbGlmIFBMQVRGT1JNKEVGTCkKLSNpZiBVU0UoRU8pCi10eXBlZGVmIHN0cnVjdCBfRW8gRXZh
c19PYmplY3Q7Ci0jZWxzZQotdHlwZWRlZiBzdHJ1Y3QgX0V2YXNfT2JqZWN0IEV2YXNfT2JqZWN0
OwotI2VuZGlmCiB0eXBlZGVmIHN0cnVjdCBfRWNvcmVfRXZhcyBFY29yZV9FdmFzOwotdHlwZWRl
ZiBFdmFzX09iamVjdCogUGxhdGZvcm1XS1ZpZXc7Cit0eXBlZGVmIFdLVmlld1JlZiBQbGF0Zm9y
bVdLVmlldzsKIHR5cGVkZWYgRWNvcmVfRXZhcyogUGxhdGZvcm1XaW5kb3c7CiAjZW5kaWYKIApk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvRXZlbnRTZW5kZXJQcm94eUVm
bC5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9FdmVudFNlbmRlclByb3h5RWZsLmNw
cAppbmRleCBmMjgyOWE5Li4xMzkyMGVjIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL2VmbC9FdmVudFNlbmRlclByb3h5RWZsLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL2VmbC9FdmVudFNlbmRlclByb3h5RWZsLmNwcApAQCAtNDM4LDcgKzQzOCw3IEBAIHZvaWQg
RXZlbnRTZW5kZXJQcm94eTo6c2VuZFRvdWNoRXZlbnQoRXdrX1RvdWNoX0V2ZW50X1R5cGUgZXZl
bnRUeXBlKQogewogICAgIEFTU0VSVChtX3RvdWNoUG9pbnRzKTsKIAotICAgIEV2YXNfT2JqZWN0
KiBld2tWaWV3ID0gbV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3
KCk7CisgICAgRXZhc19PYmplY3QqIGV3a1ZpZXcgPSBXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdGVz
dENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpKTsKICAgICBld2tfdmll
d19mZWVkX3RvdWNoX2V2ZW50KGV3a1ZpZXcsIGV2ZW50VHlwZSwgbV90b3VjaFBvaW50cywgZXZh
c19rZXlfbW9kaWZpZXJfZ2V0KGV2YXNfb2JqZWN0X2V2YXNfZ2V0KGV3a1ZpZXcpKSk7CiAKICAg
ICBFaW5hX0xpc3QqIGxpc3Q7CkBAIC00OTAsMTIgKzQ5MCwxNCBAQCB2b2lkIEV2ZW50U2VuZGVy
UHJveHk6OnVwZGF0ZVRvdWNoUG9pbnQoaW50IGluZGV4LCBpbnQgeCwgaW50IHkpCiAKIHZvaWQg
RXZlbnRTZW5kZXJQcm94eTo6c2V0VG91Y2hNb2RpZmllcihXS0V2ZW50TW9kaWZpZXJzIG1vZGlm
aWVyLCBib29sIGVuYWJsZSkKIHsKKyAgICBFdmFzX09iamVjdCogZXdrVmlldyA9IFdLVmlld0dl
dEV2YXNPYmplY3QobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3
KCkpOworCiAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgKHNpemVvZihtb2Rp
Zmllck5hbWVzKSAvIHNpemVvZihjaGFyKikpOyArK2luZGV4KSB7CiAgICAgICAgIGlmIChtb2Rp
ZmllciAmICgxIDw8IGluZGV4KSkgewogICAgICAgICAgICAgaWYgKGVuYWJsZSkKLSAgICAgICAg
ICAgICAgICBldmFzX2tleV9tb2RpZmllcl9vbihldmFzX29iamVjdF9ldmFzX2dldChtX3Rlc3RD
b250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKSksIG1vZGlmaWVyTmFtZXNb
aW5kZXhdKTsKKyAgICAgICAgICAgICAgICBldmFzX2tleV9tb2RpZmllcl9vbihldmFzX29iamVj
dF9ldmFzX2dldChld2tWaWV3KSwgbW9kaWZpZXJOYW1lc1tpbmRleF0pOwogICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIGV2YXNfa2V5X21vZGlmaWVyX29mZihldmFzX29iamVjdF9l
dmFzX2dldChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKSks
IG1vZGlmaWVyTmFtZXNbaW5kZXhdKTsKKyAgICAgICAgICAgICAgICBldmFzX2tleV9tb2RpZmll
cl9vZmYoZXZhc19vYmplY3RfZXZhc19nZXQoZXdrVmlldyksIG1vZGlmaWVyTmFtZXNbaW5kZXhd
KTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2Vm
bC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3BwCmluZGV4IDFjY2MwYmQuLjc0ZmU1MjMgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5jcHAKKysr
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNwcApAQCAt
NjEsNTYgKzYxLDU1IEBAIFBsYXRmb3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KFdLQ29udGV4
dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXAsCiAgICAgRXZhcyogZXZhcyA9
IGVjb3JlX2V2YXNfZ2V0KG1fd2luZG93KTsKIAogICAgIGlmIChtX3VzaW5nRml4ZWRMYXlvdXQp
IHsKLSAgICAgICAgbV92aWV3ID0gdG9JbXBsKFdLVmlld0NyZWF0ZVdpdGhGaXhlZExheW91dChl
dmFzLCBjb250ZXh0LCBwYWdlR3JvdXApKTsKLSAgICAgICAgZXZhc19vYmplY3RfcmVzaXplKG1f
dmlldywgODAwLCA2MDApOworICAgICAgICBtX3ZpZXcgPSBXS1ZpZXdDcmVhdGVXaXRoRml4ZWRM
YXlvdXQoZXZhcywgY29udGV4dCwgcGFnZUdyb3VwKTsKKyAgICAgICAgZXZhc19vYmplY3RfcmVz
aXplKFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSwgODAwLCA2MDApOwogICAgIH0gZWxzZQot
ICAgICAgICBtX3ZpZXcgPSB0b0ltcGwoV0tWaWV3Q3JlYXRlKGV2YXMsIGNvbnRleHQsIHBhZ2VH
cm91cCkpOworICAgICAgICBtX3ZpZXcgPSBXS1ZpZXdDcmVhdGUoZXZhcywgY29udGV4dCwgcGFn
ZUdyb3VwKTsKIAotICAgIGV3a192aWV3X3RoZW1lX3NldChtX3ZpZXcsIFRIRU1FX0RJUiIvZGVm
YXVsdC5lZGoiKTsKKyAgICBld2tfdmlld190aGVtZV9zZXQoV0tWaWV3R2V0RXZhc09iamVjdCht
X3ZpZXcpLCBUSEVNRV9ESVIiL2RlZmF1bHQuZWRqIik7CiAgICAgbV93aW5kb3dJc0tleSA9IGZh
bHNlOwotICAgIGV2YXNfb2JqZWN0X3Nob3cobV92aWV3KTsKKyAgICBldmFzX29iamVjdF9zaG93
KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSk7CiB9CiAKIFBsYXRmb3JtV2ViVmlldzo6flBs
YXRmb3JtV2ViVmlldygpCiB7Ci0gICAgZXZhc19vYmplY3RfZGVsKG1fdmlldyk7CisgICAgLy8g
RklYTUU6IFRoZSBDIFdLVmlldyBBUEkgY3VycmVudGx5IGNyZWF0ZXMgdGhlIEV2YXNfT2JqZWN0
LCBzbyB3ZSBoYXZlIHRvIGRlc3RydWN0IGl0CisgICAgLy8gKGFuZCBpdHMgZGVwZW5kZW5jaWVz
IEV3a1ZpZXcgYW5kIFdlYktpdDo6V2ViVmlldykgdGhpcyB3YXksIHVudGlsIHRoaXMgZ2V0IGZp
eGVkLgorICAgIGV2YXNfb2JqZWN0X2RlbChXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldykpOwog
ICAgIGVjb3JlX2V2YXNfZnJlZShtX3dpbmRvdyk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3
OjpyZXNpemVUbyh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQogewotICAgIGV2YXNf
b2JqZWN0X3Jlc2l6ZShtX3ZpZXcsIHdpZHRoLCBoZWlnaHQpOworICAgIGV2YXNfb2JqZWN0X3Jl
c2l6ZShXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIHdpZHRoLCBoZWlnaHQpOwogfQogCiBX
S1BhZ2VSZWYgUGxhdGZvcm1XZWJWaWV3OjpwYWdlKCkKIHsKLSAgICByZXR1cm4gV0tWaWV3R2V0
UGFnZSh0b0FQSShtX3ZpZXcpKTsKKyAgICByZXR1cm4gV0tWaWV3R2V0UGFnZShtX3ZpZXcpOwog
fQogCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6Zm9jdXMoKQogeworICAgIEV2YXNfT2JqZWN0KiBl
dmFzT2JqZWN0ID0gV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpOwogICAgIC8vIEluIGEgZmV3
IGNhc2VzLCBhbiBpZnJhbWUgbWlnaHQgcmVjZWl2ZSBmb2N1cyBmcm9tIEphdmFTY3JpcHQgYW5k
IEV2YXMgaXMgbm90IGF3YXJlIG9mIGl0IGF0IGFsbAogICAgIC8vIChXZWJDb3JlU3VwcG9ydDo6
Zm9jdXNlZEZyYW1lQ2hhbmdlZCgpIGRvZXMgbm90IGVtaXQgYW55IG5vdGlmaWNhdGlvbikuIFdl
IHRoZW4gbWFudWFsbHkgcmVtb3ZlIHRoZQogICAgIC8vIGZvY3VzIGZyb20gdGhlIHZpZXcgdG8g
bWFrZSB0aGUgY2FsbCBnaXZlIGZvY3VzIHRvIGV2YXNfb2JqZWN0X2ZvY3VzX3NldCguLi4sIHRy
dWUpIHRvIGJlIGVmZmVjdGZ1bC4KLSAgICBpZiAoV0tQYWdlR2V0Rm9jdXNlZEZyYW1lKHBhZ2Uo
KSkgIT0gV0tQYWdlR2V0TWFpbkZyYW1lKHBhZ2UoKSkpCi0gICAgICAgIGV2YXNfb2JqZWN0X2Zv
Y3VzX3NldChtX3ZpZXcsIGZhbHNlKTsKLSAgICBldmFzX29iamVjdF9mb2N1c19zZXQobV92aWV3
LCB0cnVlKTsKKyAgICBldmFzX29iamVjdF9mb2N1c19zZXQoV0tWaWV3R2V0RXZhc09iamVjdCht
X3ZpZXcpLCBXS1BhZ2VHZXRGb2N1c2VkRnJhbWUocGFnZSgpKSA9PSBXS1BhZ2VHZXRNYWluRnJh
bWUocGFnZSgpKSk7CiB9CiAKIFdLUmVjdCBQbGF0Zm9ybVdlYlZpZXc6OndpbmRvd0ZyYW1lKCkK
IHsKICAgICBpbnQgeCwgeSwgd2lkdGgsIGhlaWdodDsKIAotICAgIEVjb3JlX0V2YXMqIGVlID0g
ZWNvcmVfZXZhc19lY29yZV9ldmFzX2dldChldmFzX29iamVjdF9ldmFzX2dldChtX3ZpZXcpKTsK
LSAgICBlY29yZV9ldmFzX3JlcXVlc3RfZ2VvbWV0cnlfZ2V0KGVlLCAmeCwgJnksICZ3aWR0aCwg
JmhlaWdodCk7CisgICAgZWNvcmVfZXZhc19yZXF1ZXN0X2dlb21ldHJ5X2dldChtX3dpbmRvdywg
JngsICZ5LCAmd2lkdGgsICZoZWlnaHQpOwogCiAgICAgcmV0dXJuIFdLUmVjdE1ha2UoeCwgeSwg
d2lkdGgsIGhlaWdodCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpzZXRXaW5kb3dGcmFt
ZShXS1JlY3QgZnJhbWUpCiB7Ci0gICAgRWNvcmVfRXZhcyogZWUgPSBlY29yZV9ldmFzX2Vjb3Jl
X2V2YXNfZ2V0KGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fdmlldykpOwotICAgIGVjb3JlX2V2YXNf
bW92ZV9yZXNpemUoZWUsIGZyYW1lLm9yaWdpbi54LCBmcmFtZS5vcmlnaW4ueSwgZnJhbWUuc2l6
ZS53aWR0aCwgZnJhbWUuc2l6ZS5oZWlnaHQpOworICAgIGVjb3JlX2V2YXNfbW92ZV9yZXNpemUo
bV93aW5kb3csIGZyYW1lLm9yaWdpbi54LCBmcmFtZS5vcmlnaW4ueSwgZnJhbWUuc2l6ZS53aWR0
aCwgZnJhbWUuc2l6ZS5oZWlnaHQpOwogfQogCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6YWRkQ2hy
b21lSW5wdXRGaWVsZCgpCkBAIC0xMjcsMTUgKzEyNiwxMiBAQCB2b2lkIFBsYXRmb3JtV2ViVmll
dzo6bWFrZVdlYlZpZXdGaXJzdFJlc3BvbmRlcigpCiAKIFdLUmV0YWluUHRyPFdLSW1hZ2VSZWY+
IFBsYXRmb3JtV2ViVmlldzo6d2luZG93U25hcHNob3RJbWFnZSgpCiB7Ci0gICAgRWNvcmVfRXZh
cyogZWUgPSBlY29yZV9ldmFzX2Vjb3JlX2V2YXNfZ2V0KGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1f
dmlldykpOwotICAgIEFTU0VSVChlZSk7Ci0KICAgICBpbnQgd2lkdGg7CiAgICAgaW50IGhlaWdo
dDsKLSAgICBlY29yZV9ldmFzX2dlb21ldHJ5X2dldChlZSwgMCwgMCwgJndpZHRoLCAmaGVpZ2h0
KTsKKyAgICBlY29yZV9ldmFzX2dlb21ldHJ5X2dldChtX3dpbmRvdywgMCwgMCwgJndpZHRoLCAm
aGVpZ2h0KTsKICAgICBBU1NFUlQod2lkdGggPiAwICYmIGhlaWdodCA+IDApOwogCi0gICAgcmV0
dXJuIGFkb3B0V0soV0tWaWV3Q3JlYXRlU25hcHNob3QodG9BUEkobV92aWV3KSkpOworICAgIHJl
dHVybiBhZG9wdFdLKFdLVmlld0NyZWF0ZVNuYXBzaG90KG1fdmlldykpOwogfQogCiBib29sIFBs
YXRmb3JtV2ViVmlldzo6dmlld1N1cHBvcnRzT3B0aW9ucyhXS0RpY3Rpb25hcnlSZWYgb3B0aW9u
cykgY29uc3QKLS0gCjEuNy4xMC40Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184962</attachid>
            <date>2013-01-28 03:05:36 -0800</date>
            <delta_ts>2013-01-28 07:29:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107931-20130128120214.patch</filename>
            <type>text/plain</type>
            <size>38057</size>
            <attacher name="Kenneth Rohde Christiansen">kenneth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwOTYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOWI3ZDY2ZTQ5MmM5ZmU4
YzJjOTU1Y2MzNGJlY2NjOTYyNjVhNDk2NC4uODU1MWMwOGEyZDUxOWY2NWEzNjI1NzcyY2I4ZjQx
YmQ0NmI2YmFjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE2MyBAQAogMjAxMy0wMS0yOCAgS2Vu
bmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4gIDxrZW5uZXRoQHdlYmtpdC5vcmc+CiAKKyAgICAgICAg
W0VGTF1bV0syXSBJbnRyb2R1Y2UgYSBXZWJWaWV3IGNsYXNzIGFzIGNvdW50ZXJwYXJ0IGZvciBX
S1ZpZXdSZWYKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwNzkzMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgaXMganVzdCBvbmUgc3RlcCBvZiB0aGUgbmV3IHBsYW4gZm9yIHRoZSBFRkwgQVBJLgor
CisgICAgICAgIFRoZSBwbGFuIGlzIHRvIG1vdmUgdGhlIHB1YmxpYyBFRkwtbGlrZSBBUEkgb24g
dG9wIG9mIHRoZSBzaGFyZWQKKyAgICAgICAgV0syIEMgQVBJLCBwbHVzIGEgZmV3IEVGTCBleHRl
bnNpb25zIChXS1ZpZXcgY2xhc3MgbW9zdGx5KS4KKworICAgICAgICBUaGUgRUZMLWxpa2UgQVBJ
IGNhbiBiZSBzZWVuIGFzIGEgY29udmVuaWVuY2UgQVBJIHdoaWNoIHRpZXMKKyAgICAgICAgd2Vs
bCBpbnRvIEVGTCBhbmQgd2hpY2ggbWFrZXMgaXQgZWFzeSB0byBhZGQgd2ViIGV4cGVyaWVuY2Vz
CisgICAgICAgIHRvIGV4aXN0aW5nIGFuZCBuZXcgRUZMIGFwcGxpY2F0aW9ucy4gSXQgcHJvdmlk
ZXMgYSBzbWFydCBvYmplY3QKKyAgICAgICAgbGlrZSBBUEkgYW5kIGEgRXZhc19PYmplY3QgYmFz
ZWQgdmlldy4KKworICAgICAgICBGb3IgbW9yZSBhZHZhbmNlZCB1c2UgY2FzZXMsIHN1Y2ggYXMg
YnJvd3NlciBhbmQgcnVudGltZSwgaXQgaXMKKyAgICAgICAgcG9zc2libGUgdG8gdXNlIHRoZSBX
SyogQyBBUEksIHdoaWNoIGlzIGdpdmVzIG1vcmUgZmxleGliaWxpdHkKKyAgICAgICAgd2hpbGUg
YmVpbmcgbW9yZSBsb3cgbGV2ZWwuCisKKyAgICAgICAgVGhlIGlkZWEgaXMgdGhhdCB0aGUgV0tW
aWV3IGNsYXNzIHdpbGwgbm90IGRlcGVuZCBvbiBFdmFzX09iamVjdAorICAgICAgICBhbmQgWDEx
IChmdXR1cmUgcGxhbikgdW5saWtlIHRoZSBjdXJyZW50IEVGTC1saWtlIEFQSS4gVGhpcyBzaG91
bGQKKyAgICAgICAgbWFrZSBpdCBwb3NzaWJsZSB0byB1c2UgaXQgZm9yIGNhc2VzIHdoZXJlIG5v
bmUgb2YgdGhlc2UgYXJlCisgICAgICAgIGF2YWlsYWJsZS4KKworICAgICAgICBUaGlzIHBhdGNo
IGludHJvZHVjZXMgdGhlIFdlYlZpZXcgY2xhc3Mgd2hpY2ggc2VydmVzIGFzIG91cgorICAgICAg
ICBjb3VudGVycGFydCBmb3IgdGhlIFdLVmlldyBjbGFzcywgYW5kIGFkZHMgYSBmZXcgbmVlZGVk
IG1ldGhvZHMuCisKKyAgICAgICAgVGhlIEV3a1ZpZXcgb3ducyB0aGUgV2ViVmlldyBjbGFzcyAo
YW5kIHdpbGwgYmUgY29uc3RydWN0aW5nIGl0CisgICAgICAgIGluIHRoZSBuZWFyIGZ1dHVyZSB3
aGVuIHRoZSBFd2tWaWV3IGNsYXNzIGhhcyBiZWVuIGNoYW5nZWQgdG8KKyAgICAgICAgaGFuZGxl
IGFsbCBzbWFydCBvYmplY3QgcmVsYXRlZCBjb2RlKQorCisgICAgICAgIFRoZSBjbGVhbiB1cCBv
ZiB0aGUgc21hcnQgb2JqZWN0IHJlbGF0ZWQgY29kZSBhcyB0aGUgcHJvcGVyCisgICAgICAgIGNv
bnN0cnVjdGlvbiBvZiBFd2tWaWV3IGFuZCBXZWJWaWV3IHdpbGwgYmUgZG9uZSBpbiBmb2xsb3ct
dXAKKyAgICAgICAgcGF0Y2hlcy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9lZmwvV0tB
UElDYXN0RWZsLmg6CisgICAgICAgIChXZWJLaXQpOgorCisgICAgICAgICAgICBUaGUgV0tWaWV3
IEFQSSBpcyBub3QgYmFzZWQgb24gV2ViVmlldyBhbmQgbm90IEV2YXNfT2JqZWN0KgorCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwOgorICAgICAgICAoV0tWaWV3Q3Jl
YXRlKToKKyAgICAgICAgKFdLVmlld0NyZWF0ZVdpdGhGaXhlZExheW91dCk6CisgICAgICAgIChX
S1ZpZXdJbml0aWFsaXplKToKKyAgICAgICAgKFdLVmlld0dldFBhZ2UpOgorICAgICAgICAoV0tW
aWV3U2V0VGhlbWVQYXRoKToKKyAgICAgICAgKFdLVmlld1N1c3BlbmRBY3RpdmVET01PYmplY3Rz
QW5kQW5pbWF0aW9ucyk6CisgICAgICAgIChXS1ZpZXdSZXN1bWVBY3RpdmVET01PYmplY3RzQW5k
QW5pbWF0aW9ucyk6CisgICAgICAgIChXS1ZpZXdHZXRFdmFzT2JqZWN0KToKKyAgICAgICAgKFdL
Vmlld0NyZWF0ZVNuYXBzaG90KToKKworICAgICAgICAgICAgQWRkIGEgZmV3IG5ldyBXS1ZpZXcg
RUZMIEMgbWV0aG9kcywgYW5kIHVwZGF0ZSBleGlzdGluZworICAgICAgICAgICAgbWV0aG9kcyB0
byByZWZsZWN0IHRoYXQgdGhlIFdLVmlld1JlZiBpcyBub3cgYSBXZWJWaWV3KgorCisgICAgICAg
ICAgICBUaGUgY29uc3RydWN0aW9uIG1ldGhvZHMgd2lsbCBiZSByZXdyaXR0ZW4gd2hlbiB0aGUg
c21hcnQKKyAgICAgICAgICAgIG9iamVjdCBjb25zdHJ1Y3Rpb24gaGFzIGJlZW4gc29sdmVzLgor
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXc6OldlYlZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojp+V2Vi
Vmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmluaXRpYWxpemUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3OjpzZXRUaGVtZVBhdGgpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
OjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3OjpyZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyk6CisKKyAgICAg
ICAgICAgIEFkZCBhIG5ldyBXZWJLaXQ6OldlYlZpZXcgY2xhc3MgZm9yIEVGTC4KKworICAgICAg
ICAoRXdrVmlldzo6RXdrVmlldyk6CisgICAgICAgIChFd2tWaWV3Ojp+RXdrVmlldyk6CisgICAg
ICAgIChFd2tWaWV3Ojp3a1BhZ2UpOgorICAgICAgICAoRXdrVmlldzo6ZGV2aWNlU2NhbGVGYWN0
b3IpOgorICAgICAgICAoRXdrVmlldzo6dGl0bGUpOgorICAgICAgICAoRXdrVmlldzo6c2V0VGhl
bWVQYXRoKToKKyAgICAgICAgKEV3a1ZpZXc6OmN1c3RvbVRleHRFbmNvZGluZ05hbWUpOgorICAg
ICAgICAoRXdrVmlldzo6c2V0Q3VzdG9tVGV4dEVuY29kaW5nTmFtZSk6CisgICAgICAgIChFd2tW
aWV3OjpjcmVhdGVHTFN1cmZhY2UpOgorICAgICAgICAoRXdrVmlldzo6aW5mb3JtVVJMQ2hhbmdl
KToKKyAgICAgICAgKEV3a1ZpZXc6OnRha2VTbmFwc2hvdCk6CisKKyAgICAgICAgICAgIEJhc2Ug
bWV0aG9kcyBvbiBDIEFQSSBpbnN0ZWFkIG9mIGludGVybmFsIEFQSSBhcyBtdWNoCisgICAgICAg
ICAgICBhcyBjdXJyZW50bHkgcG9zc2libGUuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2Vm
bC9Fd2tWaWV3Lmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViVmlldyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXc6OnBhZ2VSZWYpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
OjpldmFzT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6cGFnZSk6CisgICAgICAg
IChFd2tWaWV3KToKKyAgICAgICAgKEV3a1ZpZXc6OndrVmlldyk6CisgICAgICAgIChFd2tWaWV3
OjpwYWdlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHA6CisgICAg
ICAgIChjcmVhdGVFd2tWaWV3KToKKyAgICAgICAgKGV3a192aWV3X2Jhc2VfYWRkKToKKyAgICAg
ICAgKGV3a192aWV3X3NtYXJ0X2FkZCk6CisKKyAgICAgICAgICAgIE1vZGlmeSB0byByZXR1cm4g
dGhlIEV3a1ZpZXcgY2xhc3MgZm9yIG5vdy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a192aWV3X3ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1dlYkluc3BlY3Rv
clByb3h5RWZsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtQ3JlYXRlSW5zcGVjdG9yUGFnZSk6CisKKyAgICAgICAgICAgIFVwZGF0ZWQgZHVlIHRvIGNo
YW5nZWQgQVBJLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL2VmbC9XS0FQSUNhc3RFZmwu
aDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1Zp
ZXcuY3BwOgorICAgICAgICAoV0tWaWV3Q3JlYXRlKToKKyAgICAgICAgKFdLVmlld0NyZWF0ZVdp
dGhGaXhlZExheW91dCk6CisgICAgICAgIChXS1ZpZXdJbml0aWFsaXplKToKKyAgICAgICAgKFdL
Vmlld0dldFBhZ2UpOgorICAgICAgICAoV0tWaWV3U2V0VGhlbWVQYXRoKToKKyAgICAgICAgKFdL
Vmlld1N1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyk6CisgICAgICAgIChXS1Zp
ZXdSZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyk6CisgICAgICAgIChXS1ZpZXdH
ZXRFdmFzT2JqZWN0KToKKyAgICAgICAgKFdLVmlld0NyZWF0ZVNuYXBzaG90KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL0V3a1ZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlldzo6V2ViVmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6On5XZWJWaWV3KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlldzo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXc6OnNldFRoZW1lUGF0aCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnN1c3BlbmRB
Y3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6
OnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKToKKyAgICAgICAgKEV3a1ZpZXc6
OkV3a1ZpZXcpOgorICAgICAgICAoRXdrVmlldzo6fkV3a1ZpZXcpOgorICAgICAgICAoRXdrVmll
dzo6d2tQYWdlKToKKyAgICAgICAgKEV3a1ZpZXc6OmRldmljZVNjYWxlRmFjdG9yKToKKyAgICAg
ICAgKEV3a1ZpZXc6OnRpdGxlKToKKyAgICAgICAgKEV3a1ZpZXc6OnNldFRoZW1lUGF0aCk6Cisg
ICAgICAgIChFd2tWaWV3OjpjdXN0b21UZXh0RW5jb2RpbmdOYW1lKToKKyAgICAgICAgKEV3a1Zp
ZXc6OnNldEN1c3RvbVRleHRFbmNvZGluZ05hbWUpOgorICAgICAgICAoRXdrVmlldzo6Y3JlYXRl
R0xTdXJmYWNlKToKKyAgICAgICAgKEV3a1ZpZXc6OmluZm9ybVVSTENoYW5nZSk6CisgICAgICAg
IChFd2tWaWV3Ojp0YWtlU25hcHNob3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0V3
a1ZpZXcuaDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJWaWV3KToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlldzo6cGFnZVJlZik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmV2
YXNPYmplY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpwYWdlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlldzo6dHlwZSk6CisgICAgICAgIChFd2tWaWV3KToKKyAgICAgICAgKEV3a1Zp
ZXc6OndrVmlldyk6CisgICAgICAgIChFd2tWaWV3OjpwYWdlKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2VmbC9ld2tfdmlldy5jcHA6CisgICAgICAgIChjcmVhdGVFd2tWaWV3KToKKyAgICAg
ICAgKGV3a192aWV3X2Jhc2VfYWRkKToKKyAgICAgICAgKGV3a192aWV3X3NtYXJ0X2FkZCk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVJbnNwZWN0b3JQYWdlKToKKworMjAx
My0wMS0yOCAgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4gIDxrZW5uZXRoQHdlYmtpdC5vcmc+
CisKICAgICAgICAgW0VGTF1bV0syXSBVc2UgQyBBUEkgaW5zaWRlIGV3a191cmxfcmVzcG9uc2UK
ICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzgyNgog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLQVBJQ2Fz
dEVmbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS0FQSUNhc3RFZmwu
aAppbmRleCBiMDEzYTBhNjBkZmYwMzI4Y2YyZjllNWIxMTYxODYwMjM1ZTc2ZjBhLi4xODg5ZmM0
MzY3NTVmOTFhODJmM2EzMDNmYWU1YmE1M2Q3ZjYyZGU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLQVBJQ2FzdEVmbC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tBUElDYXN0RWZsLmgKQEAgLTI0LDE1ICsyNCwxMSBA
QAogI2Vycm9yICJQbGVhc2UgI2luY2x1ZGUgXCJXS0FQSUNhc3QuaFwiIGluc3RlYWQgb2YgdGhp
cyBmaWxlIGRpcmVjdGx5LiIKICNlbmRpZgogCi0jaWYgVVNFKEVPKQotdHlwZWRlZiBzdHJ1Y3Qg
X0VvIEV2YXNfT2JqZWN0OwotI2Vsc2UKLXR5cGVkZWYgc3RydWN0IF9FdmFzX09iamVjdCBFdmFz
X09iamVjdDsKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotV0tfQUREX0FQSV9NQVBQ
SU5HKFdLVmlld1JlZiwgRXZhc19PYmplY3QpCitjbGFzcyBXZWJWaWV3OworCitXS19BRERfQVBJ
X01BUFBJTkcoV0tWaWV3UmVmLCBXZWJWaWV3KQogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcAppbmRleCAzMmI5ZDhmNjM3MzViYmZmZTI2ZWY2
OTA5MTFhMDAxYzYyNmIwZjEwLi44MTY3Y2MyYWIyNGY1YjZlNzU5MTk1NGY5ODI1ZWRhNWMzNzU5
Y2M2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmll
dy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3Bw
CkBAIC0yOSwyNCArMjksNDYgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogV0tWaWV3UmVm
IFdLVmlld0NyZWF0ZShFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1Bh
Z2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKGV3a192aWV3X2Jh
c2VfYWRkKGNhbnZhcywgY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpMZWdhY3lC
ZWhhdmlvcikpOworICAgIHJldHVybiBld2tfdmlld19iYXNlX2FkZChjYW52YXMsIGNvbnRleHRS
ZWYsIHBhZ2VHcm91cFJlZiwgRXdrVmlldzo6TGVnYWN5QmVoYXZpb3IpLT53a1ZpZXcoKTsKIH0K
IAogV0tWaWV3UmVmIFdLVmlld0NyZWF0ZVdpdGhGaXhlZExheW91dChFdmFzKiBjYW52YXMsIFdL
Q29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCiB7Ci0g
ICAgcmV0dXJuIHRvQVBJKGV3a192aWV3X2Jhc2VfYWRkKGNhbnZhcywgY29udGV4dFJlZiwgcGFn
ZUdyb3VwUmVmLCBFd2tWaWV3OjpEZWZhdWx0QmVoYXZpb3IpKTsKKyAgICByZXR1cm4gZXdrX3Zp
ZXdfYmFzZV9hZGQoY2FudmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OkRl
ZmF1bHRCZWhhdmlvciktPndrVmlldygpOworfQorCit2b2lkIFdLVmlld0luaXRpYWxpemUoV0tW
aWV3UmVmIHZpZXdSZWYpCit7CisgICAgdG9JbXBsKHZpZXdSZWYpLT5pbml0aWFsaXplKCk7CiB9
CiAKIFdLUGFnZVJlZiBXS1ZpZXdHZXRQYWdlKFdLVmlld1JlZiB2aWV3UmVmKQogewotICAgIEV3
a1ZpZXcqIHZpZXcgPSBFd2tWaWV3Ojpmcm9tRXZhc09iamVjdCh0b0ltcGwodmlld1JlZikpOwor
ICAgIHJldHVybiB0b0ltcGwodmlld1JlZiktPnBhZ2VSZWYoKTsKK30KIAotICAgIHJldHVybiB2
aWV3LT53a1BhZ2UoKTsKK3ZvaWQgV0tWaWV3U2V0VGhlbWVQYXRoKFdLVmlld1JlZiB2aWV3UmVm
LCBXS1N0cmluZ1JlZiB0aGVtZSkKK3sKKyAgICB0b0ltcGwodmlld1JlZiktPnNldFRoZW1lUGF0
aCh0aGVtZSk7CiB9CiAKLVdLSW1hZ2VSZWYgV0tWaWV3Q3JlYXRlU25hcHNob3QoV0tWaWV3UmVm
IHZpZXdSZWYpCit2b2lkIFdLVmlld1N1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9u
cyhXS1ZpZXdSZWYgdmlld1JlZikKIHsKLSAgICBFd2tWaWV3KiB2aWV3ID0gRXdrVmlldzo6ZnJv
bUV2YXNPYmplY3QodG9JbXBsKHZpZXdSZWYpKTsKKyAgICB0b0ltcGwodmlld1JlZiktPnN1c3Bl
bmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworfQogCi0gICAgcmV0dXJuIFdLSW1h
Z2VDcmVhdGVGcm9tQ2Fpcm9TdXJmYWNlKHZpZXctPnRha2VTbmFwc2hvdCgpLmdldCgpLCAwIC8q
IG9wdGlvbnMgKi8pOwordm9pZCBXS1ZpZXdSZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0
aW9ucyhXS1ZpZXdSZWYgdmlld1JlZikKK3sKKyAgICB0b0ltcGwodmlld1JlZiktPnJlc3VtZUFj
dGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7Cit9CisKK0V2YXNfT2JqZWN0KiBXS1ZpZXdH
ZXRFdmFzT2JqZWN0KFdLVmlld1JlZiB2aWV3UmVmKQoreworICAgIHJldHVybiB0b0ltcGwodmll
d1JlZiktPmV2YXNPYmplY3QoKTsKK30KKworV0tJbWFnZVJlZiBXS1ZpZXdDcmVhdGVTbmFwc2hv
dChXS1ZpZXdSZWYgdmlld1JlZikKK3sKKyAgICBFd2tWaWV3KiBld2tWaWV3ID0gRXdrVmlldzo6
ZnJvbUV2YXNPYmplY3QodG9JbXBsKHZpZXdSZWYpLT5ldmFzT2JqZWN0KCkpOworICAgIHJldHVy
biBXS0ltYWdlQ3JlYXRlRnJvbUNhaXJvU3VyZmFjZShld2tWaWV3LT50YWtlU25hcHNob3QoKS5n
ZXQoKSwgMCAvKiBvcHRpb25zICovKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0MvZWZsL1dLVmlldy5oCmluZGV4IGNjNzMwN2NmNGNiNDkyNjM2ZThhODJjYWMxYTNhZjEwNWM5
MTlmZGUuLmQ1YjQzMmQ4ZWExMzE1NDI4N2ZhOGQ0YTg3YzQ4YjQwYjhkMjJmMWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaApAQCAtMjQsOCArMjQsMTAg
QEAKIAogI2lmIFVTRShFTykKIHR5cGVkZWYgc3RydWN0IF9FbyBFdmFzOwordHlwZWRlZiBzdHJ1
Y3QgX0VvIEV2YXNfT2JqZWN0OwogI2Vsc2UKIHR5cGVkZWYgc3RydWN0IF9FdmFzIEV2YXM7Cit0
eXBlZGVmIHN0cnVjdCBfRXZhc19PYmplY3QgRXZhc19PYmplY3Q7CiAjZW5kaWYKIAogI2lmZGVm
IF9fY3BsdXNwbHVzCkBAIC0zNiw5ICszOCwxOSBAQCBXS19FWFBPUlQgV0tWaWV3UmVmIFdLVmll
d0NyZWF0ZShFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91cAog
CiBXS19FWFBPUlQgV0tWaWV3UmVmIFdLVmlld0NyZWF0ZVdpdGhGaXhlZExheW91dChFdmFzKiBj
YW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXApOwog
Ci1XS19FWFBPUlQgV0tQYWdlUmVmIFdLVmlld0dldFBhZ2UoV0tWaWV3UmVmIHZpZXcpOworV0tf
RVhQT1JUIHZvaWQgV0tWaWV3SW5pdGlhbGl6ZShXS1ZpZXdSZWYpOwogCi1XS19FWFBPUlQgV0tJ
bWFnZVJlZiBXS1ZpZXdDcmVhdGVTbmFwc2hvdChXS1ZpZXdSZWYgdmlld1JlZik7CitXS19FWFBP
UlQgV0tQYWdlUmVmIFdLVmlld0dldFBhZ2UoV0tWaWV3UmVmKTsKKworV0tfRVhQT1JUIHZvaWQg
V0tWaWV3U2V0VGhlbWVQYXRoKFdLVmlld1JlZiwgV0tTdHJpbmdSZWYpOworCitXS19FWFBPUlQg
dm9pZCBXS1ZpZXdTdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoV0tWaWV3UmVm
KTsKK1dLX0VYUE9SVCB2b2lkIFdLVmlld1Jlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRp
b25zKFdLVmlld1JlZik7CisKKy8vIEZJWE1FOiBUaGUgbG9uZyB0ZXJtIHBsYW4gaXMgdG8gZ2V0
IHJpZCBvZiB0aGlzLCBzbyBrZWVwIHVzYWdlIHRvIGEgYmFyZSBtaW5pbXVtLgorV0tfRVhQT1JU
IEV2YXNfT2JqZWN0KiBXS1ZpZXdHZXRFdmFzT2JqZWN0KFdLVmlld1JlZik7CisKK1dLX0VYUE9S
VCBXS0ltYWdlUmVmIFdLVmlld0NyZWF0ZVNuYXBzaG90KFdLVmlld1JlZik7CiAKICNpZmRlZiBf
X2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvRXdrVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3
LmNwcAppbmRleCAxMzNhMTVmOGRkYWYwMWNkNDFhYmY1ODQ3YjNmNGVhOTgwZjM3Y2U1Li44ZWM1
NTFjMmFlMjk2NTYzZWNiZmRjMDQ1ZDA3NTRlOGE2ZWNiNDliIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcApAQCAtMzgsNyArMzgsOSBAQAogI2luY2x1
ZGUgIldLRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIldLR2VvbWV0cnkuaCIKICNpbmNsdWRlICJX
S051bWJlci5oIgorI2luY2x1ZGUgIldLUGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAiV0tTdHJpbmcu
aCIKKyNpbmNsdWRlICJXS1ZpZXcuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiV2ViSW1hZ2UuaCIKICNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKQEAgLTExMCwxNCArMTEy
LDU1IEBAIGNvbnN0IEV2YXNfT2JqZWN0KiBFd2tWaWV3Ojp2aWV3RnJvbVBhZ2VWaWV3TWFwKGNv
bnN0IFdLUGFnZVJlZiBwYWdlKQogICAgIHJldHVybiBwYWdlVmlld01hcCgpLmdldChwYWdlKTsK
IH0KIAotRXdrVmlldzo6RXdrVmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0
cjxFd2tDb250ZXh0PiBjb250ZXh0LCBQYXNzUmVmUHRyPFdlYlBhZ2VHcm91cD4gcGFnZUdyb3Vw
LCBWaWV3QmVoYXZpb3IgYmVoYXZpb3IpCi0gICAgOiBtX2V2YXNPYmplY3QoZXZhc09iamVjdCkK
K25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJWaWV3OjpXZWJWaWV3KFdlYkNvbnRleHQqIGNvbnRl
eHQsIFBhZ2VDbGllbnQqIHBhZ2VDbGllbnQsIFdlYlBhZ2VHcm91cCogcGFnZUdyb3VwLCBFdmFz
X09iamVjdCogZXZhc09iamVjdCkKKyAgICA6IG1fd2ViUGFnZVByb3h5KGNvbnRleHQtPmNyZWF0
ZVdlYlBhZ2UocGFnZUNsaWVudCwgcGFnZUdyb3VwKSkKKyAgICAsIG1fZXZhc09iamVjdChldmFz
T2JqZWN0KQoreworICAgIG1fd2ViUGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMo
KS0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQodHJ1ZSk7CisgICAgbV93ZWJQYWdl
UHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRGb3JjZUNvbXBvc2l0aW5nTW9k
ZSh0cnVlKTsKKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBtX3dlYlBhZ2VQcm94
eS0+ZnVsbFNjcmVlbk1hbmFnZXIoKS0+c2V0V2ViVmlldyhtX2V2YXNPYmplY3QpOworI2VuZGlm
Cit9CisKK1dlYlZpZXc6On5XZWJWaWV3KCkKK3sKKyAgICBtX3dlYlBhZ2VQcm94eS0+Y2xvc2Uo
KTsKK30KKwordm9pZCBXZWJWaWV3Ojppbml0aWFsaXplKCkKK3sKKyAgICBtX3dlYlBhZ2VQcm94
eS0+aW5pdGlhbGl6ZVdlYlBhZ2UoKTsKK30KKwordm9pZCBXZWJWaWV3OjpzZXRUaGVtZVBhdGgo
V0tTdHJpbmdSZWYgdGhlbWUpCit7CisgICAgbV93ZWJQYWdlUHJveHktPnNldFRoZW1lUGF0aCh0
b1dURlN0cmluZyh0aGVtZSkudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgV2ViVmlldzo6c3Vz
cGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCkKK3sKKyAgICBtX3dlYlBhZ2VQcm94
eS0+c3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7Cit9CisKK3ZvaWQgV2Vi
Vmlldzo6cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKQoreworICAgIG1fd2Vi
UGFnZVByb3h5LT5yZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworRXdrVmlldzo6RXdrVmlldyhFdmFzX09iamVjdCogdmll
dywgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXZWJQYWdlR3JvdXAqIHBhZ2VHcm91
cCwgVmlld0JlaGF2aW9yIGJlaGF2aW9yKQorICAgIDogbV9ldmFzT2JqZWN0KHZpZXcpCiAgICAg
LCBtX2NvbnRleHQoY29udGV4dCkKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAg
ICAgLCBtX3BlbmRpbmdTdXJmYWNlUmVzaXplKGZhbHNlKQogI2VuZGlmCiAgICAgLCBtX3BhZ2VD
bGllbnQoYmVoYXZpb3IgPT0gRGVmYXVsdEJlaGF2aW9yID8gUGFnZUNsaWVudERlZmF1bHRJbXBs
OjpjcmVhdGUodGhpcykgOiBQYWdlQ2xpZW50TGVnYWN5SW1wbDo6Y3JlYXRlKHRoaXMpKQotICAg
ICwgbV9wYWdlUHJveHkobV9jb250ZXh0LT53ZWJDb250ZXh0KCktPmNyZWF0ZVdlYlBhZ2UobV9w
YWdlQ2xpZW50LmdldCgpLCBwYWdlR3JvdXAuZ2V0KCkpKQorICAgICwgbV93ZWJWaWV3KGFkb3B0
UHRyKG5ldyBXZWJWaWV3KG1fY29udGV4dC0+d2ViQ29udGV4dCgpLmdldCgpLCBtX3BhZ2VDbGll
bnQuZ2V0KCksIHBhZ2VHcm91cCwgdmlldykpKQogICAgICwgbV9wYWdlTG9hZENsaWVudChQYWdl
TG9hZENsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQogICAgICwgbV9wYWdlUG9saWN5Q2xpZW50KFBh
Z2VQb2xpY3lDbGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKICAgICAsIG1fcGFnZVVJQ2xpZW50KFBh
Z2VVSUNsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQpAQCAtMTI3LDcgKzE3MCw3IEBAIEV3a1ZpZXc6
OkV3a1ZpZXcoRXZhc19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4g
Y29udGV4dCwgUGFzc1JlCiAjaWYgRU5BQkxFKFZJQlJBVElPTikKICAgICAsIG1fdmlicmF0aW9u
Q2xpZW50KFZpYnJhdGlvbkNsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQogI2VuZGlmCi0gICAgLCBt
X2JhY2tGb3J3YXJkTGlzdChFd2tCYWNrRm9yd2FyZExpc3Q6OmNyZWF0ZSh0b0FQSShtX3BhZ2VQ
cm94eS0+YmFja0ZvcndhcmRMaXN0KCkpKSkKKyAgICAsIG1fYmFja0ZvcndhcmRMaXN0KEV3a0Jh
Y2tGb3J3YXJkTGlzdDo6Y3JlYXRlKFdLUGFnZUdldEJhY2tGb3J3YXJkTGlzdCh3a1BhZ2UoKSkp
KQogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQogICAgICwgbV9wYWdlU2NhbGVGYWN0b3Io
MSkKICNlbmRpZgpAQCAtMTQ0LDI5ICsxODcsMTggQEAgRXdrVmlldzo6RXdrVmlldyhFdmFzX09i
amVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBQYXNzUmUK
IHsKICAgICBBU1NFUlQobV9ldmFzT2JqZWN0KTsKICAgICBBU1NFUlQobV9jb250ZXh0KTsKLSAg
ICBBU1NFUlQobV9wYWdlUHJveHkpOwogCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQot
ICAgIG1fcGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0QWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0VuYWJsZWQodHJ1ZSk7Ci0gICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgp
LT5wcmVmZXJlbmNlcygpLT5zZXRGb3JjZUNvbXBvc2l0aW5nTW9kZSh0cnVlKTsKLSNpZiBFTkFC
TEUoV0VCR0wpCi0gICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5z
ZXRXZWJHTEVuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKLSAgICBpZiAoYmVoYXZpb3IgPT0gRGVmYXVs
dEJlaGF2aW9yKQotICAgICAgICBtX3BhZ2VQcm94eS0+c2V0VXNlRml4ZWRMYXlvdXQodHJ1ZSk7
Ci0jZW5kaWYKKyAgICBXS1ZpZXdJbml0aWFsaXplKHdrVmlldygpKTsKIAotICAgIG1fcGFnZVBy
b3h5LT5pbml0aWFsaXplV2ViUGFnZSgpOworICAgIFdLUGFnZVNldFVzZUZpeGVkTGF5b3V0KHdr
UGFnZSgpLCBiZWhhdmlvciA9PSBEZWZhdWx0QmVoYXZpb3IpOwogCi0jaWYgRU5BQkxFKEZVTExT
Q1JFRU5fQVBJKQotICAgIG1fcGFnZVByb3h5LT5mdWxsU2NyZWVuTWFuYWdlcigpLT5zZXRXZWJW
aWV3KG1fZXZhc09iamVjdCk7Ci0gICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJl
bmNlcygpLT5zZXRGdWxsU2NyZWVuRW5hYmxlZCh0cnVlKTsKLSNlbmRpZgotI2lmIEVOQUJMRShX
RUJfQVVESU8pCi0gICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5z
ZXRXZWJBdWRpb0VuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKKyAgICBXS1BhZ2VHcm91cFJlZiB3a1Bh
Z2VHcm91cCA9IFdLUGFnZUdldFBhZ2VHcm91cCh3a1BhZ2UoKSk7CisgICAgV0tQcmVmZXJlbmNl
c1JlZiB3a1ByZWZlcmVuY2VzID0gV0tQYWdlR3JvdXBHZXRQcmVmZXJlbmNlcyh3a1BhZ2VHcm91
cCk7CiAKLSAgICBtX3BhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldE9m
ZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCh0cnVlKTsKKyAgICBXS1ByZWZlcmVuY2Vz
U2V0V2ViR0xFbmFibGVkKHdrUHJlZmVyZW5jZXMsIHRydWUpOworICAgIFdLUHJlZmVyZW5jZXNT
ZXRGdWxsU2NyZWVuRW5hYmxlZCh3a1ByZWZlcmVuY2VzLCB0cnVlKTsKKyAgICBXS1ByZWZlcmVu
Y2VzU2V0V2ViQXVkaW9FbmFibGVkKHdrUHJlZmVyZW5jZXMsIHRydWUpOworICAgIFdLUHJlZmVy
ZW5jZXNTZXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQod2tQcmVmZXJlbmNlcywg
dHJ1ZSk7CiAKICAgICAvLyBFbmFibGUgbW91c2UgZXZlbnRzIGJ5IGRlZmF1bHQKICAgICBzZXRN
b3VzZUV2ZW50c0VuYWJsZWQodHJ1ZSk7CkBAIC0xODIsOCArMjE0LDYgQEAgRXdrVmlldzo6RXdr
VmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250
ZXh0LCBQYXNzUmUKIAogRXdrVmlldzo6fkV3a1ZpZXcoKQogewotICAgIG1fcGFnZVByb3h5LT5j
bG9zZSgpOwotCiAgICAgLy8gVW5yZWdpc3RlciBpY29uIGNoYW5nZSBjYWxsYmFjay4KICAgICBF
d2tGYXZpY29uRGF0YWJhc2UqIGljb25EYXRhYmFzZSA9IG1fY29udGV4dC0+ZmF2aWNvbkRhdGFi
YXNlKCk7CiAgICAgQVNTRVJUKGljb25EYXRhYmFzZSk7CkBAIC0yMTEsOSArMjQxLDkgQEAgRXdr
VmlldyogRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QoY29uc3QgRXZhc19PYmplY3QqIHZpZXcpCiAg
KiBAaW50ZXJuYWwKICAqIFJldHJpZXZlcyB0aGUgaW50ZXJuYWwgV0tQYWdlIGZvciB0aGlzIHZp
ZXcuCiAgKi8KLVdLUGFnZVJlZiBFd2tWaWV3Ojp3a1BhZ2UoKQorV0tQYWdlUmVmIEV3a1ZpZXc6
OndrUGFnZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRvQVBJKG1fcGFnZVByb3h5LmdldCgpKTsK
KyAgICByZXR1cm4gV0tWaWV3R2V0UGFnZSh3a1ZpZXcoKSk7CiB9CiAKIHZvaWQgRXdrVmlldzo6
c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYgY3Vyc29yKQpAQCAtMjk3LDcgKzMyNyw3IEBAIHZvaWQg
RXdrVmlldzo6c2V0RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGUpCiAKIGZsb2F0IEV3a1Zp
ZXc6OmRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9wYWdlUHJveHkt
PmRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgcmV0dXJuIFdLUGFnZUdldEJhY2tpbmdTY2FsZUZh
Y3Rvcih3a1BhZ2UoKSk7CiB9CiAKIEFmZmluZVRyYW5zZm9ybSBFd2tWaWV3Ojp0cmFuc2Zvcm1G
cm9tU2NlbmUoKSBjb25zdApAQCAtNTIzLDcgKzU1Myw3IEBAIGJvb2wgRXdrVmlldzo6aXNWaXNp
YmxlKCkgY29uc3QKIAogY29uc3QgY2hhciogRXdrVmlldzo6dGl0bGUoKSBjb25zdAogewotICAg
IG1fdGl0bGUgPSBtX3BhZ2VQcm94eS0+cGFnZVRpdGxlKCkudXRmOCgpLmRhdGEoKTsKKyAgICBt
X3RpdGxlID0gV0tFaW5hU2hhcmVkU3RyaW5nKEFkb3B0V0ssIFdLUGFnZUNvcHlUaXRsZSh3a1Bh
Z2UoKSkpOwogCiAgICAgcmV0dXJuIG1fdGl0bGU7CiB9CkBAIC01NDYsMjQgKzU3NiwyNiBAQCB2
b2lkIEV3a1ZpZXc6OnNldFRoZW1lUGF0aChjb25zdCBjaGFyKiB0aGVtZSkKIHsKICAgICBpZiAo
bV90aGVtZSAhPSB0aGVtZSkgewogICAgICAgICBtX3RoZW1lID0gdGhlbWU7Ci0gICAgICAgIG1f
cGFnZVByb3h5LT5zZXRUaGVtZVBhdGgodGhlbWUpOworICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gd2tUaGVtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
dGhlbWUpKTsKKyAgICAgICAgV0tWaWV3U2V0VGhlbWVQYXRoKHdrVmlldygpLCB3a1RoZW1lLmdl
dCgpKTsKICAgICB9CiB9CiAKIGNvbnN0IGNoYXIqIEV3a1ZpZXc6OmN1c3RvbVRleHRFbmNvZGlu
Z05hbWUoKSBjb25zdAogewotICAgIFN0cmluZyBjdXN0b21FbmNvZGluZyA9IG1fcGFnZVByb3h5
LT5jdXN0b21UZXh0RW5jb2RpbmdOYW1lKCk7Ci0gICAgaWYgKGN1c3RvbUVuY29kaW5nLmlzRW1w
dHkoKSkKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gY3VzdG9tRW5jb2RpbmcgPSBhZG9w
dFdLKFdLUGFnZUNvcHlDdXN0b21UZXh0RW5jb2RpbmdOYW1lKHdrUGFnZSgpKSk7CisgICAgaWYg
KFdLU3RyaW5nSXNFbXB0eShjdXN0b21FbmNvZGluZy5nZXQoKSkpCiAgICAgICAgIHJldHVybiAw
OwogCi0gICAgbV9jdXN0b21FbmNvZGluZyA9IGN1c3RvbUVuY29kaW5nLnV0ZjgoKS5kYXRhKCk7
CisgICAgbV9jdXN0b21FbmNvZGluZyA9IFdLRWluYVNoYXJlZFN0cmluZyhjdXN0b21FbmNvZGlu
Zy5nZXQoKSk7CiAKICAgICByZXR1cm4gbV9jdXN0b21FbmNvZGluZzsKIH0KIAogdm9pZCBFd2tW
aWV3OjpzZXRDdXN0b21UZXh0RW5jb2RpbmdOYW1lKGNvbnN0IFN0cmluZyYgZW5jb2RpbmcpCiB7
Ci0gICAgbV9wYWdlUHJveHktPnNldEN1c3RvbVRleHRFbmNvZGluZ05hbWUoZW5jb2RpbmcpOwor
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a0VuY29kaW5nID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhlbmNvZGluZy51dGY4KCkuZGF0YSgpKSk7CisgICAgV0tQ
YWdlU2V0Q3VzdG9tVGV4dEVuY29kaW5nTmFtZSh3a1BhZ2UoKSwgd2tFbmNvZGluZy5nZXQoKSk7
CiB9CiAKIHZvaWQgRXdrVmlldzo6c2V0TW91c2VFdmVudHNFbmFibGVkKGJvb2wgZW5hYmxlZCkK
QEAgLTY0NSw5ICs2NzcsNiBAQCBib29sIEV3a1ZpZXc6OmNyZWF0ZUdMU3VyZmFjZShjb25zdCBJ
bnRTaXplJiB2aWV3U2l6ZSkKICAgICAgICAgaWYgKCFtX2V2YXNHTCkgewogICAgICAgICAgICAg
V0FSTigiRmFpbGVkIHRvIGNyZWF0ZSBFdmFzX0dMLCBmYWxsaW5nIGJhY2sgdG8gc29mdHdhcmUg
bW9kZS4iKTsKICAgICAgICAgICAgIG1faXNIYXJkd2FyZUFjY2VsZXJhdGVkID0gZmFsc2U7Ci0j
aWYgRU5BQkxFKFdFQkdMKQotICAgICAgICAgICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5w
cmVmZXJlbmNlcygpLT5zZXRXZWJHTEVuYWJsZWQoZmFsc2UpOwotI2VuZGlmCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CkBAIC04OTAsMTUgKzkxOSwxMyBAQCB1
bnNpZ25lZCBsb25nIGxvbmcgRXdrVmlldzo6aW5mb3JtRGF0YWJhc2VRdW90YVJlYWNoZWQoY29u
c3QgU3RyaW5nJiBkYXRhYmFzZU5hbQogICovCiB2b2lkIEV3a1ZpZXc6OmluZm9ybVVSTENoYW5n
ZSgpCiB7Ci0gICAgU3RyaW5nIGFjdGl2ZVVSTCA9IG1fcGFnZVByb3h5LT5hY3RpdmVVUkwoKTsK
LSAgICBpZiAoYWN0aXZlVVJMLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgIFdLUmV0
YWluUHRyPFdLVVJMUmVmPiB3a0FjdGl2ZVVSTCA9IGFkb3B0V0soV0tQYWdlQ29weUFjdGl2ZVVS
TCh3a1BhZ2UoKSkpOworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a1VSTFN0cmluZyA9
IGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHdrQWN0aXZlVVJMLmdldCgpKSk7CiAKLSAgICBDU3Ry
aW5nIHJhd0FjdGl2ZVVSTCA9IGFjdGl2ZVVSTC51dGY4KCk7Ci0gICAgaWYgKG1fdXJsID09IHJh
d0FjdGl2ZVVSTC5kYXRhKCkpCisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
d2tVUkxTdHJpbmcuZ2V0KCksIG1fdXJsKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV91cmwg
PSByYXdBY3RpdmVVUkwuZGF0YSgpOworICAgIG1fdXJsID0gV0tFaW5hU2hhcmVkU3RyaW5nKHdr
VVJMU3RyaW5nLmdldCgpKTsKICAgICBzbWFydENhbGxiYWNrPFVSTENoYW5nZWQ+KCkuY2FsbCht
X3VybCk7CiAKICAgICAvLyBVcGRhdGUgdGhlIHZpZXcncyBmYXZpY29uLgpAQCAtMTAzMCw3ICsx
MDU3LDcgQEAgdm9pZCBFd2tWaWV3OjpvbkZhdmljb25DaGFuZ2VkKGNvbnN0IGNoYXIqIHBhZ2VV
UkwsIHZvaWQqIGV2ZW50SW5mbykKIFBhc3NSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBFd2tWaWV3
Ojp0YWtlU25hcHNob3QoKQogewogICAgIC8vIFN1c3BlbmQgYWxsIGFuaW1hdGlvbnMgYmVmb3Jl
IHRha2luZyB0aGUgc25hcHNob3QuCi0gICAgbV9wYWdlUHJveHktPnN1c3BlbmRBY3RpdmVET01P
YmplY3RzQW5kQW5pbWF0aW9ucygpOworICAgIFdLVmlld1N1c3BlbmRBY3RpdmVET01PYmplY3Rz
QW5kQW5pbWF0aW9ucyh3a1ZpZXcoKSk7CiAKICAgICAvLyBXYWl0IGZvciB0aGUgcGVuZGluZyBy
ZXBhaW50IGV2ZW50cyB0byBiZSBwcm9jZXNzZWQuCiAgICAgd2hpbGUgKG1fZGlzcGxheVRpbWVy
LmlzQWN0aXZlKCkpCkBAIC0xMDQyLDcgKzEwNjksNyBAQCBQYXNzUmVmUHRyPGNhaXJvX3N1cmZh
Y2VfdD4gRXdrVmlldzo6dGFrZVNuYXBzaG90KCkKICNlbmRpZgogICAgICAgICBSZWZQdHI8Y2Fp
cm9fc3VyZmFjZV90PiBzbmFwc2hvdCA9IGNyZWF0ZVN1cmZhY2VGb3JJbWFnZShzZC0+aW1hZ2Up
OwogICAgICAgICAvLyBSZXN1bWUgYWxsIGFuaW1hdGlvbnMuCi0gICAgICAgIG1fcGFnZVByb3h5
LT5yZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworICAgICAgICBXS1ZpZXdS
ZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyh3a1ZpZXcoKSk7CiAKICAgICAgICAg
cmV0dXJuIHNuYXBzaG90LnJlbGVhc2UoKTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCkBAIC0xMDUwLDcgKzEwNzcsNyBAQCBQYXNzUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gRXdr
Vmlldzo6dGFrZVNuYXBzaG90KCkKIAogICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHNuYXBz
aG90ID0gZ2V0SW1hZ2VTdXJmYWNlRnJvbUZyYW1lQnVmZmVyKDAsIDAsIHNkLT52aWV3LncsIHNk
LT52aWV3LmgpOwogICAgIC8vIFJlc3VtZSBhbGwgYW5pbWF0aW9ucy4KLSAgICBtX3BhZ2VQcm94
eS0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKKyAgICBXS1ZpZXdSZXN1
bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyh3a1ZpZXcoKSk7CiAKICAgICByZXR1cm4g
c25hcHNob3QucmVsZWFzZSgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9Fd2tWaWV3LmgKaW5kZXggYTIxM2Y5N2Q1ZWJiNDE5NjMxNmE5ZWFjZTEyOGI5YTIyOWVk
NTAwZC4uMDBlZWQyNzEwZDQyNjE2YjE3YWIyYjA4NjRjMTU0YmVmNjRjNzZjZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaApAQCAtNDksNiArNDksMTAgQEAK
ICNpbmNsdWRlICJFdmFzR0xTdXJmYWNlLmgiCiAjZW5kaWYKIAorI2luY2x1ZGUgIldlYkNvbnRl
eHQuaCIKKyNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJXZWJQcmVmZXJlbmNl
cy5oIgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIENvbnRleHRNZW51Q2xpZW50RWZsOwog
Y2xhc3MgRmluZENsaWVudEVmbDsKQEAgLTk2LDIxICsxMDAsNTIgQEAgdHlwZWRlZiBzdHJ1Y3Qg
X0V2YXNfR0xfU3VyZmFjZSBFdmFzX0dMX1N1cmZhY2U7CiAKIHR5cGVkZWYgc3RydWN0IEV3a19W
aWV3X1NtYXJ0X0RhdGEgRXdrX1ZpZXdfU21hcnRfRGF0YTsKIAotY2xhc3MgRXdrVmlldyB7Citu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViVmlldyA6IHB1YmxpYyBBUElPYmplY3Qgewog
cHVibGljOgorICAgIHN0YXRpYyBjb25zdCBUeXBlIEFQSVR5cGUgPSBUeXBlVmlldzsKKworICAg
IFdlYlZpZXcoV2ViQ29udGV4dCosIFBhZ2VDbGllbnQqLCBXZWJQYWdlR3JvdXAqLCBFdmFzX09i
amVjdCopOworICAgIHZpcnR1YWwgfldlYlZpZXcoKTsKIAorICAgIHZvaWQgaW5pdGlhbGl6ZSgp
OworCisgICAgV0tQYWdlUmVmIHBhZ2VSZWYoKSBjb25zdCB7IHJldHVybiB0b0FQSShtX3dlYlBh
Z2VQcm94eS5nZXQoKSk7IH0KKworICAgIHZvaWQgc2V0VGhlbWVQYXRoKFdLU3RyaW5nUmVmKTsK
KyAgICB2b2lkIHN1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworICAgIHZv
aWQgcmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKKworICAgIC8vIEZJWE1F
OiBSZW1vdmUgd2hlbiBwb3NzaWJsZS4KKyAgICBFdmFzX09iamVjdCogZXZhc09iamVjdCgpIHsg
cmV0dXJuIG1fZXZhc09iamVjdDsgfQorICAgIFdlYlBhZ2VQcm94eSogcGFnZSgpIHsgcmV0dXJu
IG1fd2ViUGFnZVByb3h5LmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBUeXBlIHR5
cGUoKSBjb25zdCB7IHJldHVybiBBUElUeXBlOyB9CisKKyAgICBXVEY6OlJlZlB0cjxXZWJQYWdl
UHJveHk+IG1fd2ViUGFnZVByb3h5OworICAgIEV2YXNfT2JqZWN0KiBtX2V2YXNPYmplY3Q7Cit9
OworCit9CisKK2NsYXNzIEV3a1ZpZXcgeworcHVibGljOgogICAgIGVudW0gVmlld0JlaGF2aW9y
IHsKICAgICAgICAgTGVnYWN5QmVoYXZpb3IsCiAgICAgICAgIERlZmF1bHRCZWhhdmlvcgogICAg
IH07Ci0gICAgRXdrVmlldyhFdmFzX09iamVjdCogdmlldywgUGFzc1JlZlB0cjxFd2tDb250ZXh0
PiBjb250ZXh0LCBQYXNzUmVmUHRyPFdlYktpdDo6V2ViUGFnZUdyb3VwPiBwYWdlR3JvdXAsIFZp
ZXdCZWhhdmlvcik7CisgICAgRXdrVmlldyhFdmFzX09iamVjdCogdmlldywgUGFzc1JlZlB0cjxF
d2tDb250ZXh0PiBjb250ZXh0LCBXZWJLaXQ6OldlYlBhZ2VHcm91cCogcGFnZUdyb3VwLCBWaWV3
QmVoYXZpb3IpOwogICAgIH5Fd2tWaWV3KCk7CiAKICAgICBzdGF0aWMgRXdrVmlldyogZnJvbUV2
YXNPYmplY3QoY29uc3QgRXZhc19PYmplY3QqIHZpZXcpOwogICAgIEV2YXNfT2JqZWN0KiB2aWV3
KCkgeyByZXR1cm4gbV9ldmFzT2JqZWN0OyB9CiAKLSAgICBXS1BhZ2VSZWYgd2tQYWdlKCk7Ci0g
ICAgV2ViS2l0OjpXZWJQYWdlUHJveHkqIHBhZ2UoKSB7IHJldHVybiBtX3BhZ2VQcm94eS5nZXQo
KTsgfQorICAgIFdLVmlld1JlZiB3a1ZpZXcoKSBjb25zdCB7IHJldHVybiB0b0FQSShtX3dlYlZp
ZXcuZ2V0KCkpOyB9CisgICAgV0tQYWdlUmVmIHdrUGFnZSgpIGNvbnN0OworCisgICAgV2ViS2l0
OjpXZWJQYWdlUHJveHkqIHBhZ2UoKSB7IHJldHVybiBtX3dlYlZpZXctPnBhZ2UoKTsgfQogICAg
IEV3a0NvbnRleHQqIGV3a0NvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KICAg
ICBFd2tTZXR0aW5ncyogc2V0dGluZ3MoKSB7IHJldHVybiBtX3NldHRpbmdzLmdldCgpOyB9CiAg
ICAgRXdrQmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3QoKSB7IHJldHVybiBtX2JhY2tG
b3J3YXJkTGlzdC5nZXQoKTsgfQpAQCAtMjQ1LDcgKzI4MCw3IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBtX3BlbmRpbmdTdXJmYWNlUmVzaXplOwogI2VuZGlmCiAgICAgT3duUHRyPFdlYktpdDo6UGFn
ZUNsaWVudEJhc2U+IG1fcGFnZUNsaWVudDsKLSAgICBSZWZQdHI8V2ViS2l0OjpXZWJQYWdlUHJv
eHk+IG1fcGFnZVByb3h5OworICAgIE93blB0cjxXZWJLaXQ6OldlYlZpZXc+IG1fd2ViVmlldzsK
ICAgICBPd25QdHI8V2ViS2l0OjpQYWdlTG9hZENsaWVudEVmbD4gbV9wYWdlTG9hZENsaWVudDsK
ICAgICBPd25QdHI8V2ViS2l0OjpQYWdlUG9saWN5Q2xpZW50RWZsPiBtX3BhZ2VQb2xpY3lDbGll
bnQ7CiAgICAgT3duUHRyPFdlYktpdDo6UGFnZVVJQ2xpZW50RWZsPiBtX3BhZ2VVSUNsaWVudDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAppbmRleCA3
MmE2YWZhYTNlZWMxMDg1NTlhZmRhZjg3NjM4MmZiNWMzNzNjYzExLi5jYWUwNDI1OGY0Y2JmZDQw
MmExMmI4ZTVjNzc3MGU4MTRhMGY2NDFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3ZpZXcuY3BwCkBAIC01MDUsNyArNTA1LDcgQEAgc3RhdGljIGlubGluZSBF
dmFzX1NtYXJ0KiBjcmVhdGVFd2tWaWV3U21hcnRDbGFzcyh2b2lkKQogICAgIHJldHVybiBzbWFy
dDsKIH0KIAotc3RhdGljIGlubGluZSBFdmFzX09iamVjdCogY3JlYXRlRXdrVmlldyhFdmFzKiBj
YW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQs
IFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiA9IDAsIEV3a1ZpZXc6OlZpZXdCZWhhdmlvciBi
ZWhhdmlvciA9IEV3a1ZpZXc6OkRlZmF1bHRCZWhhdmlvcikKK3N0YXRpYyBpbmxpbmUgRXdrVmll
dyogY3JlYXRlRXdrVmlldyhFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBQYXNzUmVm
UHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiA9IDAs
IEV3a1ZpZXc6OlZpZXdCZWhhdmlvciBiZWhhdmlvciA9IEV3a1ZpZXc6OkRlZmF1bHRCZWhhdmlv
cikKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY2FudmFzLCAwKTsKICAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnQsIDApOwpAQCAtNTI1LDIxICs1
MjUsMjIgQEAgc3RhdGljIGlubGluZSBFdmFzX09iamVjdCogY3JlYXRlRXdrVmlldyhFdmFzKiBj
YW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBQYXNzUmUKICAgICAvLyBEZWZhdWx0IFdlYlBhZ2VH
cm91cCBpcyBjcmVhdGVkIGluIFdlYkNvbnRleHQgY29uc3RydWN0b3IgaWYgdGhlIHBhZ2VHcm91
cFJlZiBpcyAwLAogICAgIC8vIHNvIHdlIGRvIG5vdCBuZWVkIHRvIGNyZWF0ZSBpdCBoZXJlLgog
ICAgIHNtYXJ0RGF0YS0+cHJpdiA9IG5ldyBFd2tWaWV3KGV3a1ZpZXcsIGNvbnRleHQsIHRvSW1w
bChwYWdlR3JvdXBSZWYpLCBiZWhhdmlvcik7Ci0gICAgcmV0dXJuIGV3a1ZpZXc7CisKKyAgICBy
ZXR1cm4gc21hcnREYXRhLT5wcml2OwogfQogCiAvKioKICAqIEBpbnRlcm5hbAogICogQ29uc3Ry
dWN0cyBhIGV3a192aWV3IEV2YXNfT2JqZWN0IHdpdGggV0tUeXBlIHBhcmFtZXRlcnMuCiAgKi8K
LUV2YXNfT2JqZWN0KiBld2tfdmlld19iYXNlX2FkZChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJl
ZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OlZpZXdC
ZWhhdmlvciBiZWhhdmlvcikKK0V3a1ZpZXcqIGV3a192aWV3X2Jhc2VfYWRkKEV2YXMqIGNhbnZh
cywgV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwg
RXdrVmlldzo6Vmlld0JlaGF2aW9yIGJlaGF2aW9yKQogewogICAgIHJldHVybiBjcmVhdGVFd2tW
aWV3KGNhbnZhcywgY3JlYXRlRXdrVmlld1NtYXJ0Q2xhc3MoKSwgY29udGV4dFJlZiA/IEV3a0Nv
bnRleHQ6OmNyZWF0ZSh0b0ltcGwoY29udGV4dFJlZikpIDogRXdrQ29udGV4dDo6ZGVmYXVsdENv
bnRleHQoKSwgcGFnZUdyb3VwUmVmLCBiZWhhdmlvcik7CiB9CiAKIEV2YXNfT2JqZWN0KiBld2tf
dmlld19zbWFydF9hZGQoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgRXdrX0NvbnRl
eHQqIGNvbnRleHQpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUV3a1ZpZXcoY2FudmFzLCBzbWFydCwg
ZXdrX29iamVjdF9jYXN0PEV3a0NvbnRleHQqPihjb250ZXh0KSk7CisgICAgcmV0dXJuIGNyZWF0
ZUV3a1ZpZXcoY2FudmFzLCBzbWFydCwgZXdrX29iamVjdF9jYXN0PEV3a0NvbnRleHQqPihjb250
ZXh0KSktPnZpZXcoKTsKIH0KIAogRXZhc19PYmplY3QqIGV3a192aWV3X2FkZF93aXRoX2NvbnRl
eHQoRXZhcyogY2FudmFzLCBFd2tfQ29udGV4dCogY29udGV4dCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaAppbmRleCA4M2I0Yzk3
M2IxYTM2NGNjNzk2OGM4ZjM3OTFhZWNmNmQyNGNlYWFiLi5jNDkxMmZmZDdiNDFlNGU1MmE3ZjRj
NmZhOGQ4MGVhZDRiNDEwNjU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfdmlld19wcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oCkBAIC0yNSw2ICsyNSw2IEBACiAjaW5jbHVkZSA8
RXZhcy5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+CiAKLUV2YXNfT2JqZWN0KiBld2tf
dmlld19iYXNlX2FkZChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYs
IEV3a1ZpZXc6OlZpZXdCZWhhdmlvcik7CitFd2tWaWV3KiBld2tfdmlld19iYXNlX2FkZChFdmFz
KiBjYW52YXMsIFdLQ29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OlZpZXdCZWhh
dmlvcik7CiAKICNlbmRpZiAvLyBld2tfdmlld19wcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAKaW5kZXggNDYy
YjI2ZDM1MGVlZmVkNzAzMzgyMWU1Nzc0YWFjYWM4NTRjYWE3Zi4uMzE3NDQ5ZGQxNWU0ZDhlZmUx
OTBiOWVhZDQyZWQ3MzNkZjY4ZDMwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAKQEAgLTk4LDE0ICs5OCwxNSBAQCBX
ZWJQYWdlUHJveHkqIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUluc3BlY3RvclBh
Z2UoKQogICAgIGlmICghbV9pbnNwZWN0b3JXaW5kb3cpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgbV9pbnNwZWN0b3JWaWV3ID0gZXdrX3ZpZXdfYmFzZV9hZGQoZWNvcmVfZXZhc19nZXQobV9p
bnNwZWN0b3JXaW5kb3cpLCB0b0FQSShwYWdlKCktPnByb2Nlc3MoKS0+Y29udGV4dCgpKSwgdG9B
UEkoaW5zcGVjdG9yUGFnZUdyb3VwKCkpLCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlvcik7Ci0gICAg
RXdrVmlldyogaW5zcGVjdG9yVmlld0ltcGwgPSBFd2tWaWV3Ojpmcm9tRXZhc09iamVjdChtX2lu
c3BlY3RvclZpZXcpOwotICAgIGluc3BlY3RvclZpZXdJbXBsLT5zZXRUaGVtZVBhdGgoVEVTVF9U
SEVNRV9ESVIgIi9kZWZhdWx0LmVkaiIpOworICAgIC8vIEZJWE1FOiBSZWZhY3RvciB0byB1c2Ug
V0tWaWV3UmVmLgorICAgIG1faW5zcGVjdG9yVmlldyA9IGV3a192aWV3X2Jhc2VfYWRkKGVjb3Jl
X2V2YXNfZ2V0KG1faW5zcGVjdG9yV2luZG93KSwgdG9BUEkocGFnZSgpLT5wcm9jZXNzKCktPmNv
bnRleHQoKSksIHRvQVBJKGluc3BlY3RvclBhZ2VHcm91cCgpKSwgRXdrVmlldzo6TGVnYWN5QmVo
YXZpb3IpLT52aWV3KCk7CisgICAgRXdrVmlldyogaW5zcGVjdG9yVmlldyA9IEV3a1ZpZXc6OmZy
b21FdmFzT2JqZWN0KG1faW5zcGVjdG9yVmlldyk7CisgICAgaW5zcGVjdG9yVmlldy0+c2V0VGhl
bWVQYXRoKFRFU1RfVEhFTUVfRElSICIvZGVmYXVsdC5lZGoiKTsKIAotICAgIEV3a19TZXR0aW5n
cyogc2V0dGluZ3MgPSBpbnNwZWN0b3JWaWV3SW1wbC0+c2V0dGluZ3MoKTsKKyAgICBFd2tfU2V0
dGluZ3MqIHNldHRpbmdzID0gaW5zcGVjdG9yVmlldy0+c2V0dGluZ3MoKTsKICAgICBld2tfc2V0
dGluZ3NfZmlsZV9hY2Nlc3NfZnJvbV9maWxlX3VybHNfYWxsb3dlZF9zZXQoc2V0dGluZ3MsIHRy
dWUpOwogCi0gICAgcmV0dXJuIGluc3BlY3RvclZpZXdJbXBsLT5wYWdlKCk7CisgICAgcmV0dXJu
IGluc3BlY3RvclZpZXctPnBhZ2UoKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1PcGVuKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxv
ZwppbmRleCBlMmJhZmQwZjc2NDhiOTEzOGE2NzBlMWJlMjc2MmU1ODk3NWM0NzRiLi4xYjA4OTRi
NmZiNDJiZDlmZThlYjIxZmUxMWU4ZWFjMDc4ZjAxY2RiIDEwMDY0NAotLS0gYS9Ub29scy9DaGFu
Z2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTMtMDEtMjgg
IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuICA8a2VubmV0aEB3ZWJraXQub3JnPgorCisgICAg
ICAgIFtFRkxdW1dLMl0gSW50cm9kdWNlIGEgV2ViVmlldyBjbGFzcyBhcyBjb3VudGVycGFydCBm
b3IgV0tWaWV3UmVmCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMDc5MzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBDaGFuZ2UgcGxhdGZvcm1WaWV3IHRvIGJlIGEgV0tWaWV3IGFuZCB1c2UgV0tWaWV3R2V0
RXZhc09iamVjdAorICAgICAgICBmb3IgdGhlIHBsYWNlcyB3aGVyZSBhbiBFdmFzX09iamVjdCBp
cyBuZWVkZWQuCisKKyAgICAgICAgSW5zdGVhZCBvZiBleHRyYWN0aW5nIHRoZSBFY29yZV9FdmFz
KiBmcm9tIHRoZSBtX3ZpZXcgd2UgdXNlCisgICAgICAgIHRoZSBtX3dpbmRvdyBpbnN0ZWFkLCB3
aGljaCBhY3R1YWxseSBob2xkcyB0aGUgaXQuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Bs
YXRmb3JtV2ViVmlldy5oOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvZWZsL1BsYXRmb3JtV2Vi
Vmlldy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQbGF0Zm9ybVdlYlZpZXc6OlBsYXRm
b3JtV2ViVmlldyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQbGF0Zm9ybVdlYlZpZXc6On5Q
bGF0Zm9ybVdlYlZpZXcpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGxhdGZvcm1XZWJWaWV3
OjpyZXNpemVUbyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQbGF0Zm9ybVdlYlZpZXc6OnBh
Z2UpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGxhdGZvcm1XZWJWaWV3OjpzaW11bGF0ZVNw
YWNlYmFyS2V5UHJlc3MpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGxhdGZvcm1XZWJWaWV3
OjpzaW11bGF0ZU1vdXNlTW92ZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQbGF0Zm9ybVdl
YlZpZXc6OnNpbXVsYXRlUmlnaHRDbGljayk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9Q
bGF0Zm9ybVdlYlZpZXcuaDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2VmbC9FdmVudFNl
bmRlclByb3h5RWZsLmNwcDoKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6c2VuZFRv
dWNoRXZlbnQpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5OjpzZXRUb3VjaE1vZGlm
aWVyKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2VmbC9QbGF0Zm9ybVdlYlZpZXdFZmwu
Y3BwOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6OlBsYXRmb3JtV2ViVmlldyk6Cisg
ICAgICAgIChXVFI6OlBsYXRmb3JtV2ViVmlldzo6flBsYXRmb3JtV2ViVmlldyk6CisgICAgICAg
IChXVFI6OlBsYXRmb3JtV2ViVmlldzo6cmVzaXplVG8pOgorICAgICAgICAoV1RSOjpQbGF0Zm9y
bVdlYlZpZXc6OnBhZ2UpOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6OmZvY3VzKToK
KyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3Ojp3aW5kb3dGcmFtZSk6CisgICAgICAgIChX
VFI6OlBsYXRmb3JtV2ViVmlldzo6c2V0V2luZG93RnJhbWUpOgorICAgICAgICAoV1RSOjpQbGF0
Zm9ybVdlYlZpZXc6OndpbmRvd1NuYXBzaG90SW1hZ2UpOgorCiAyMDEzLTAxLTI4ICBSYXBoYWVs
IEt1Ym8gZGEgQ29zdGEgIDxyYXBoYWVsLmt1Ym8uZGEuY29zdGFAaW50ZWwuY29tPgogCiAgICAg
ICAgIFtFRkxdIEluY2x1ZGUgRWNvcmVfR2V0b3B0LmggaW4gTWluaUJyb3dzZXIuCmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2ViVmlldy5oIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9QbGF0Zm9ybVdlYlZpZXcuaAppbmRleCA1YWQxZWVkMGUxZjFlMmIxMWQyYjlhY2Mw
NmUzOGQ0OThmMjNiNWRjLi5kY2FmNDQ4NDJkNmVmZTc5NGZhNGI3YzFhMjg3YzBkMWE4NTQzMjNi
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2ViVmlldy5oCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XZWJWaWV3LmgKQEAgLTQ3LDEzICs0Nyw4IEBA
IHR5cGVkZWYgSFdORCBQbGF0Zm9ybVdpbmRvdzsKIHR5cGVkZWYgV0tWaWV3UmVmIFBsYXRmb3Jt
V0tWaWV3OwogdHlwZWRlZiBHdGtXaWRnZXQgKlBsYXRmb3JtV2luZG93OwogI2VsaWYgUExBVEZP
Uk0oRUZMKQotI2lmIFVTRShFTykKLXR5cGVkZWYgc3RydWN0IF9FbyBFdmFzX09iamVjdDsKLSNl
bHNlCi10eXBlZGVmIHN0cnVjdCBfRXZhc19PYmplY3QgRXZhc19PYmplY3Q7Ci0jZW5kaWYKIHR5
cGVkZWYgc3RydWN0IF9FY29yZV9FdmFzIEVjb3JlX0V2YXM7Ci10eXBlZGVmIEV2YXNfT2JqZWN0
KiBQbGF0Zm9ybVdLVmlldzsKK3R5cGVkZWYgV0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlw
ZWRlZiBFY29yZV9FdmFzKiBQbGF0Zm9ybVdpbmRvdzsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL2VmbC9QbGF0Zm9ybVdlYlZpZXcuY3BwIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9lZmwvUGxhdGZvcm1XZWJWaWV3LmNwcAppbmRleCBkNTQ0OWViNGQxOTM2MTdhYjBh
NGNiYTZlZDY2MWVkZDNiMDUzODI0Li5iODJhNzA3YjI4OTk3ODEzM2QzOGE4MjZhMjA5MTc5YWFm
ODI4MmUyIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2VmbC9QbGF0Zm9ybVdlYlZp
ZXcuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZWZsL1BsYXRmb3JtV2ViVmlldy5jcHAK
QEAgLTY1LDMzICs2NSwzMyBAQCBQbGF0Zm9ybVdlYlZpZXc6OlBsYXRmb3JtV2ViVmlldyhXS0Nv
bnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdybwogewogICAgIG1fd2lu
ZG93ID0gaW5pdEVjb3JlRXZhcygpOwogICAgIEV2YXMqIGV2YXMgPSBlY29yZV9ldmFzX2dldCht
X3dpbmRvdyk7Ci0gICAgbV92aWV3ID0gdG9JbXBsKFdLVmlld0NyZWF0ZShldmFzLCBjb250ZXh0
UmVmLCBwYWdlR3JvdXBSZWYpKTsKLSAgICBld2tfdmlld190aGVtZV9zZXQobV92aWV3LCBUSEVN
RV9ESVIiL2RlZmF1bHQuZWRqIik7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRk
KG1fdmlldywgIndlYnByb2Nlc3MsY3Jhc2hlZCIsIG9uV2ViUHJvY2Vzc0NyYXNoZWQsIDApOwor
ICAgIG1fdmlldyA9IFdLVmlld0NyZWF0ZShldmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYp
OworICAgIGV3a192aWV3X3RoZW1lX3NldChXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIFRI
RU1FX0RJUiIvZGVmYXVsdC5lZGoiKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19h
ZGQoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCAid2VicHJvY2VzcyxjcmFzaGVkIiwgb25X
ZWJQcm9jZXNzQ3Jhc2hlZCwgMCk7CiAgICAgcmVzaXplVG8oNjAwLCA4MDApOwogfQogCiBQbGF0
Zm9ybVdlYlZpZXc6On5QbGF0Zm9ybVdlYlZpZXcoKQogewotICAgIGV2YXNfb2JqZWN0X2RlbCht
X3ZpZXcpOworICAgIGV2YXNfb2JqZWN0X2RlbChXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldykp
OwogICAgIGVjb3JlX2V2YXNfZnJlZShtX3dpbmRvdyk7CiAgICAgZWNvcmVfZXZhc19zaHV0ZG93
bigpOwogfQogCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6cmVzaXplVG8odW5zaWduZWQgd2lkdGgs
IHVuc2lnbmVkIGhlaWdodCkKIHsKLSAgICBldmFzX29iamVjdF9yZXNpemUobV92aWV3LCB3aWR0
aCwgaGVpZ2h0KTsKKyAgICBldmFzX29iamVjdF9yZXNpemUoV0tWaWV3R2V0RXZhc09iamVjdCht
X3ZpZXcpLCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogV0tQYWdlUmVmIFBsYXRmb3JtV2ViVmlldzo6
cGFnZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdLVmlld0dldFBhZ2UodG9BUEkobV92aWV3KSk7
CisgICAgcmV0dXJuIFdLVmlld0dldFBhZ2UobV92aWV3KTsKIH0KIAogdm9pZCBQbGF0Zm9ybVdl
YlZpZXc6OnNpbXVsYXRlU3BhY2ViYXJLZXlQcmVzcygpCiB7CiAgICAgRXZhcyogZXZhcyA9IGVj
b3JlX2V2YXNfZ2V0KG1fd2luZG93KTsKLSAgICBldmFzX29iamVjdF9mb2N1c19zZXQobV92aWV3
LCB0cnVlKTsKKyAgICBldmFzX29iamVjdF9mb2N1c19zZXQoV0tWaWV3R2V0RXZhc09iamVjdCht
X3ZpZXcpLCB0cnVlKTsKICAgICBldmFzX2V2ZW50X2ZlZWRfa2V5X2Rvd24oZXZhcywgInNwYWNl
IiwgInNwYWNlIiwgIiAiLCAwLCAwLCAwKTsKICAgICBldmFzX2V2ZW50X2ZlZWRfa2V5X3VwKGV2
YXMsICJzcGFjZSIsICJzcGFjZSIsICIgIiwgMCwgMSwgMCk7CiB9CkBAIC05OSwxNCArOTksMTQg
QEAgdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnNpbXVsYXRlU3BhY2ViYXJLZXlQcmVzcygpCiB2b2lk
IFBsYXRmb3JtV2ViVmlldzo6c2ltdWxhdGVNb3VzZU1vdmUodW5zaWduZWQgeCwgdW5zaWduZWQg
eSkKIHsKICAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwotICAgIGV2
YXNfb2JqZWN0X3Nob3cobV92aWV3KTsKKyAgICBldmFzX29iamVjdF9zaG93KFdLVmlld0dldEV2
YXNPYmplY3QobV92aWV3KSk7CiAgICAgZXZhc19ldmVudF9mZWVkX21vdXNlX21vdmUoZXZhcywg
eCwgeSwgMCwgMCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpzaW11bGF0ZVJpZ2h0Q2xp
Y2sodW5zaWduZWQgeCwgdW5zaWduZWQgeSkKIHsKICAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZh
c19nZXQobV93aW5kb3cpOwotICAgIGV2YXNfb2JqZWN0X3Nob3cobV92aWV3KTsKKyAgICBldmFz
X29iamVjdF9zaG93KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSk7CiAgICAgZXZhc19ldmVu
dF9mZWVkX21vdXNlX21vdmUoZXZhcywgeCwgeSwgMCwgMCk7CiAgICAgZXZhc19ldmVudF9mZWVk
X21vdXNlX2Rvd24oZXZhcywgMywgRVZBU19CVVRUT05fTk9ORSwgMCwgMCk7CiAgICAgZXZhc19l
dmVudF9mZWVkX21vdXNlX3VwKGV2YXMsIDMsIEVWQVNfQlVUVE9OX05PTkUsIDAsIDApOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaCBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgKaW5kZXggOGY5ZGNkYjdlZTNhYWYz
ODI3NmI2NjAzMDA4YmQxZGJjODc4OTNjNi4uNTFjNGJjYzIzNTY1NWM3Y2JjMTVmYmQ5YWJjOGRh
YWM3ZDFmZjkzNCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdl
YlZpZXcuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCkBA
IC01NCwxMyArNTQsOCBAQCB0eXBlZGVmIHN0cnVjdCBfR3RrV2lkZ2V0IEd0a1dpZGdldDsKIHR5
cGVkZWYgV0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlwZWRlZiBHdGtXaWRnZXQqIFBsYXRm
b3JtV2luZG93OwogI2VsaWYgUExBVEZPUk0oRUZMKQotI2lmIFVTRShFTykKLXR5cGVkZWYgc3Ry
dWN0IF9FbyBFdmFzX09iamVjdDsKLSNlbHNlCi10eXBlZGVmIHN0cnVjdCBfRXZhc19PYmplY3Qg
RXZhc19PYmplY3Q7Ci0jZW5kaWYKIHR5cGVkZWYgc3RydWN0IF9FY29yZV9FdmFzIEVjb3JlX0V2
YXM7Ci10eXBlZGVmIEV2YXNfT2JqZWN0KiBQbGF0Zm9ybVdLVmlldzsKK3R5cGVkZWYgV0tWaWV3
UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlwZWRlZiBFY29yZV9FdmFzKiBQbGF0Zm9ybVdpbmRvdzsK
ICNlbmRpZgogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9FdmVudFNl
bmRlclByb3h5RWZsLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVy
UHJveHlFZmwuY3BwCmluZGV4IGYyODI5YTk2YzkyOGEyZjkzOTdlNTZjOWI3OTY1ZWYwNTEwNzJl
OTkuLjEzOTIwZWMwNmI5MDViMjhiNTAxMDY2MzE5NmNiMjViNTBlMzgxYTUgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwCisrKyBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwCkBAIC00
MzgsNyArNDM4LDcgQEAgdm9pZCBFdmVudFNlbmRlclByb3h5OjpzZW5kVG91Y2hFdmVudChFd2tf
VG91Y2hfRXZlbnRfVHlwZSBldmVudFR5cGUpCiB7CiAgICAgQVNTRVJUKG1fdG91Y2hQb2ludHMp
OwogCi0gICAgRXZhc19PYmplY3QqIGV3a1ZpZXcgPSBtX3Rlc3RDb250cm9sbGVyLT5tYWluV2Vi
VmlldygpLT5wbGF0Zm9ybVZpZXcoKTsKKyAgICBFdmFzX09iamVjdCogZXdrVmlldyA9IFdLVmll
d0dldEV2YXNPYmplY3QobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1W
aWV3KCkpOwogICAgIGV3a192aWV3X2ZlZWRfdG91Y2hfZXZlbnQoZXdrVmlldywgZXZlbnRUeXBl
LCBtX3RvdWNoUG9pbnRzLCBldmFzX2tleV9tb2RpZmllcl9nZXQoZXZhc19vYmplY3RfZXZhc19n
ZXQoZXdrVmlldykpKTsKIAogICAgIEVpbmFfTGlzdCogbGlzdDsKQEAgLTQ5MCwxMiArNDkwLDE0
IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6dXBkYXRlVG91Y2hQb2ludChpbnQgaW5kZXgsIGlu
dCB4LCBpbnQgeSkKIAogdm9pZCBFdmVudFNlbmRlclByb3h5OjpzZXRUb3VjaE1vZGlmaWVyKFdL
RXZlbnRNb2RpZmllcnMgbW9kaWZpZXIsIGJvb2wgZW5hYmxlKQogeworICAgIEV2YXNfT2JqZWN0
KiBld2tWaWV3ID0gV0tWaWV3R2V0RXZhc09iamVjdChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2Vi
VmlldygpLT5wbGF0Zm9ybVZpZXcoKSk7CisKICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsg
aW5kZXggPCAoc2l6ZW9mKG1vZGlmaWVyTmFtZXMpIC8gc2l6ZW9mKGNoYXIqKSk7ICsraW5kZXgp
IHsKICAgICAgICAgaWYgKG1vZGlmaWVyICYgKDEgPDwgaW5kZXgpKSB7CiAgICAgICAgICAgICBp
ZiAoZW5hYmxlKQotICAgICAgICAgICAgICAgIGV2YXNfa2V5X21vZGlmaWVyX29uKGV2YXNfb2Jq
ZWN0X2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmll
dygpKSwgbW9kaWZpZXJOYW1lc1tpbmRleF0pOworICAgICAgICAgICAgICAgIGV2YXNfa2V5X21v
ZGlmaWVyX29uKGV2YXNfb2JqZWN0X2V2YXNfZ2V0KGV3a1ZpZXcpLCBtb2RpZmllck5hbWVzW2lu
ZGV4XSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZXZhc19rZXlfbW9kaWZp
ZXJfb2ZmKGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3
KCktPnBsYXRmb3JtVmlldygpKSwgbW9kaWZpZXJOYW1lc1tpbmRleF0pOworICAgICAgICAgICAg
ICAgIGV2YXNfa2V5X21vZGlmaWVyX29mZihldmFzX29iamVjdF9ldmFzX2dldChld2tWaWV3KSwg
bW9kaWZpZXJOYW1lc1tpbmRleF0pOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNwcCBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5jcHAKaW5kZXggMWNjYzBi
ZGFiZTlhYWI4N2NlYWViYjg3OGE2YjQ0M2EwZWY2MWMxNS4uNzRmZTUyM2M2MTEwMmVmN2M5MDg4
Nzc2NTVlYTgzM2FiZTA4Zjk3MiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9l
ZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2Vm
bC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3BwCkBAIC02MSw1NiArNjEsNTUgQEAgUGxhdGZvcm1XZWJW
aWV3OjpQbGF0Zm9ybVdlYlZpZXcoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLUGFnZUdyb3VwUmVm
IHBhZ2VHcm91cCwKICAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwog
CiAgICAgaWYgKG1fdXNpbmdGaXhlZExheW91dCkgewotICAgICAgICBtX3ZpZXcgPSB0b0ltcGwo
V0tWaWV3Q3JlYXRlV2l0aEZpeGVkTGF5b3V0KGV2YXMsIGNvbnRleHQsIHBhZ2VHcm91cCkpOwot
ICAgICAgICBldmFzX29iamVjdF9yZXNpemUobV92aWV3LCA4MDAsIDYwMCk7CisgICAgICAgIG1f
dmlldyA9IFdLVmlld0NyZWF0ZVdpdGhGaXhlZExheW91dChldmFzLCBjb250ZXh0LCBwYWdlR3Jv
dXApOworICAgICAgICBldmFzX29iamVjdF9yZXNpemUoV0tWaWV3R2V0RXZhc09iamVjdChtX3Zp
ZXcpLCA4MDAsIDYwMCk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1fdmlldyA9IHRvSW1wbChXS1Zp
ZXdDcmVhdGUoZXZhcywgY29udGV4dCwgcGFnZUdyb3VwKSk7CisgICAgICAgIG1fdmlldyA9IFdL
Vmlld0NyZWF0ZShldmFzLCBjb250ZXh0LCBwYWdlR3JvdXApOwogCi0gICAgZXdrX3ZpZXdfdGhl
bWVfc2V0KG1fdmlldywgVEhFTUVfRElSIi9kZWZhdWx0LmVkaiIpOworICAgIGV3a192aWV3X3Ro
ZW1lX3NldChXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIFRIRU1FX0RJUiIvZGVmYXVsdC5l
ZGoiKTsKICAgICBtX3dpbmRvd0lzS2V5ID0gZmFsc2U7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyht
X3ZpZXcpOworICAgIGV2YXNfb2JqZWN0X3Nob3coV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcp
KTsKIH0KIAogUGxhdGZvcm1XZWJWaWV3Ojp+UGxhdGZvcm1XZWJWaWV3KCkKIHsKLSAgICBldmFz
X29iamVjdF9kZWwobV92aWV3KTsKKyAgICAvLyBGSVhNRTogVGhlIEMgV0tWaWV3IEFQSSBjdXJy
ZW50bHkgY3JlYXRlcyB0aGUgRXZhc19PYmplY3QsIHNvIHdlIGhhdmUgdG8gZGVzdHJ1Y3QgaXQK
KyAgICAvLyAoYW5kIGl0cyBkZXBlbmRlbmNpZXMgRXdrVmlldyBhbmQgV2ViS2l0OjpXZWJWaWV3
KSB0aGlzIHdheSwgdW50aWwgdGhpcyBnZXQgZml4ZWQuCisgICAgZXZhc19vYmplY3RfZGVsKFdL
Vmlld0dldEV2YXNPYmplY3QobV92aWV3KSk7CiAgICAgZWNvcmVfZXZhc19mcmVlKG1fd2luZG93
KTsKIH0KIAogdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnJlc2l6ZVRvKHVuc2lnbmVkIHdpZHRoLCB1
bnNpZ25lZCBoZWlnaHQpCiB7Ci0gICAgZXZhc19vYmplY3RfcmVzaXplKG1fdmlldywgd2lkdGgs
IGhlaWdodCk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKFdLVmlld0dldEV2YXNPYmplY3QobV92
aWV3KSwgd2lkdGgsIGhlaWdodCk7CiB9CiAKIFdLUGFnZVJlZiBQbGF0Zm9ybVdlYlZpZXc6OnBh
Z2UoKQogewotICAgIHJldHVybiBXS1ZpZXdHZXRQYWdlKHRvQVBJKG1fdmlldykpOworICAgIHJl
dHVybiBXS1ZpZXdHZXRQYWdlKG1fdmlldyk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3Ojpm
b2N1cygpCiB7CisgICAgRXZhc19PYmplY3QqIGV2YXNPYmplY3QgPSBXS1ZpZXdHZXRFdmFzT2Jq
ZWN0KG1fdmlldyk7CiAgICAgLy8gSW4gYSBmZXcgY2FzZXMsIGFuIGlmcmFtZSBtaWdodCByZWNl
aXZlIGZvY3VzIGZyb20gSmF2YVNjcmlwdCBhbmQgRXZhcyBpcyBub3QgYXdhcmUgb2YgaXQgYXQg
YWxsCiAgICAgLy8gKFdlYkNvcmVTdXBwb3J0Ojpmb2N1c2VkRnJhbWVDaGFuZ2VkKCkgZG9lcyBu
b3QgZW1pdCBhbnkgbm90aWZpY2F0aW9uKS4gV2UgdGhlbiBtYW51YWxseSByZW1vdmUgdGhlCiAg
ICAgLy8gZm9jdXMgZnJvbSB0aGUgdmlldyB0byBtYWtlIHRoZSBjYWxsIGdpdmUgZm9jdXMgdG8g
ZXZhc19vYmplY3RfZm9jdXNfc2V0KC4uLiwgdHJ1ZSkgdG8gYmUgZWZmZWN0ZnVsLgotICAgIGlm
IChXS1BhZ2VHZXRGb2N1c2VkRnJhbWUocGFnZSgpKSAhPSBXS1BhZ2VHZXRNYWluRnJhbWUocGFn
ZSgpKSkKLSAgICAgICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KG1fdmlldywgZmFsc2UpOwotICAg
IGV2YXNfb2JqZWN0X2ZvY3VzX3NldChtX3ZpZXcsIHRydWUpOworICAgIGV2YXNfb2JqZWN0X2Zv
Y3VzX3NldChXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIFdLUGFnZUdldEZvY3VzZWRGcmFt
ZShwYWdlKCkpID09IFdLUGFnZUdldE1haW5GcmFtZShwYWdlKCkpKTsKIH0KIAogV0tSZWN0IFBs
YXRmb3JtV2ViVmlldzo6d2luZG93RnJhbWUoKQogewogICAgIGludCB4LCB5LCB3aWR0aCwgaGVp
Z2h0OwogCi0gICAgRWNvcmVfRXZhcyogZWUgPSBlY29yZV9ldmFzX2Vjb3JlX2V2YXNfZ2V0KGV2
YXNfb2JqZWN0X2V2YXNfZ2V0KG1fdmlldykpOwotICAgIGVjb3JlX2V2YXNfcmVxdWVzdF9nZW9t
ZXRyeV9nZXQoZWUsICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0KTsKKyAgICBlY29yZV9ldmFzX3Jl
cXVlc3RfZ2VvbWV0cnlfZ2V0KG1fd2luZG93LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCk7CiAK
ICAgICByZXR1cm4gV0tSZWN0TWFrZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogdm9pZCBQ
bGF0Zm9ybVdlYlZpZXc6OnNldFdpbmRvd0ZyYW1lKFdLUmVjdCBmcmFtZSkKIHsKLSAgICBFY29y
ZV9FdmFzKiBlZSA9IGVjb3JlX2V2YXNfZWNvcmVfZXZhc19nZXQoZXZhc19vYmplY3RfZXZhc19n
ZXQobV92aWV3KSk7Ci0gICAgZWNvcmVfZXZhc19tb3ZlX3Jlc2l6ZShlZSwgZnJhbWUub3JpZ2lu
LngsIGZyYW1lLm9yaWdpbi55LCBmcmFtZS5zaXplLndpZHRoLCBmcmFtZS5zaXplLmhlaWdodCk7
CisgICAgZWNvcmVfZXZhc19tb3ZlX3Jlc2l6ZShtX3dpbmRvdywgZnJhbWUub3JpZ2luLngsIGZy
YW1lLm9yaWdpbi55LCBmcmFtZS5zaXplLndpZHRoLCBmcmFtZS5zaXplLmhlaWdodCk7CiB9CiAK
IHZvaWQgUGxhdGZvcm1XZWJWaWV3OjphZGRDaHJvbWVJbnB1dEZpZWxkKCkKQEAgLTEyNywxNSAr
MTI2LDEyIEBAIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjptYWtlV2ViVmlld0ZpcnN0UmVzcG9uZGVy
KCkKIAogV0tSZXRhaW5QdHI8V0tJbWFnZVJlZj4gUGxhdGZvcm1XZWJWaWV3Ojp3aW5kb3dTbmFw
c2hvdEltYWdlKCkKIHsKLSAgICBFY29yZV9FdmFzKiBlZSA9IGVjb3JlX2V2YXNfZWNvcmVfZXZh
c19nZXQoZXZhc19vYmplY3RfZXZhc19nZXQobV92aWV3KSk7Ci0gICAgQVNTRVJUKGVlKTsKLQog
ICAgIGludCB3aWR0aDsKICAgICBpbnQgaGVpZ2h0OwotICAgIGVjb3JlX2V2YXNfZ2VvbWV0cnlf
Z2V0KGVlLCAwLCAwLCAmd2lkdGgsICZoZWlnaHQpOworICAgIGVjb3JlX2V2YXNfZ2VvbWV0cnlf
Z2V0KG1fd2luZG93LCAwLCAwLCAmd2lkdGgsICZoZWlnaHQpOwogICAgIEFTU0VSVCh3aWR0aCA+
IDAgJiYgaGVpZ2h0ID4gMCk7CiAKLSAgICByZXR1cm4gYWRvcHRXSyhXS1ZpZXdDcmVhdGVTbmFw
c2hvdCh0b0FQSShtX3ZpZXcpKSk7CisgICAgcmV0dXJuIGFkb3B0V0soV0tWaWV3Q3JlYXRlU25h
cHNob3QobV92aWV3KSk7CiB9CiAKIGJvb2wgUGxhdGZvcm1XZWJWaWV3Ojp2aWV3U3VwcG9ydHNP
cHRpb25zKFdLRGljdGlvbmFyeVJlZiBvcHRpb25zKSBjb25zdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184980</attachid>
            <date>2013-01-28 07:29:21 -0800</date>
            <delta_ts>2013-01-28 08:22:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107931-20130128162559.patch</filename>
            <type>text/plain</type>
            <size>38057</size>
            <attacher name="Kenneth Rohde Christiansen">kenneth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwOTYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOWI3ZDY2ZTQ5MmM5ZmU4
YzJjOTU1Y2MzNGJlY2NjOTYyNjVhNDk2NC4uODU1MWMwOGEyZDUxOWY2NWEzNjI1NzcyY2I4ZjQx
YmQ0NmI2YmFjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE2MyBAQAogMjAxMy0wMS0yOCAgS2Vu
bmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4gIDxrZW5uZXRoQHdlYmtpdC5vcmc+CiAKKyAgICAgICAg
W0VGTF1bV0syXSBJbnRyb2R1Y2UgYSBXZWJWaWV3IGNsYXNzIGFzIGNvdW50ZXJwYXJ0IGZvciBX
S1ZpZXdSZWYKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwNzkzMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgaXMganVzdCBvbmUgc3RlcCBvZiB0aGUgbmV3IHBsYW4gZm9yIHRoZSBFRkwgQVBJLgor
CisgICAgICAgIFRoZSBwbGFuIGlzIHRvIG1vdmUgdGhlIHB1YmxpYyBFRkwtbGlrZSBBUEkgb24g
dG9wIG9mIHRoZSBzaGFyZWQKKyAgICAgICAgV0syIEMgQVBJLCBwbHVzIGEgZmV3IEVGTCBleHRl
bnNpb25zIChXS1ZpZXcgY2xhc3MgbW9zdGx5KS4KKworICAgICAgICBUaGUgRUZMLWxpa2UgQVBJ
IGNhbiBiZSBzZWVuIGFzIGEgY29udmVuaWVuY2UgQVBJIHdoaWNoIHRpZXMKKyAgICAgICAgd2Vs
bCBpbnRvIEVGTCBhbmQgd2hpY2ggbWFrZXMgaXQgZWFzeSB0byBhZGQgd2ViIGV4cGVyaWVuY2Vz
CisgICAgICAgIHRvIGV4aXN0aW5nIGFuZCBuZXcgRUZMIGFwcGxpY2F0aW9ucy4gSXQgcHJvdmlk
ZXMgYSBzbWFydCBvYmplY3QKKyAgICAgICAgbGlrZSBBUEkgYW5kIGEgRXZhc19PYmplY3QgYmFz
ZWQgdmlldy4KKworICAgICAgICBGb3IgbW9yZSBhZHZhbmNlZCB1c2UgY2FzZXMsIHN1Y2ggYXMg
YnJvd3NlciBhbmQgcnVudGltZSwgaXQgaXMKKyAgICAgICAgcG9zc2libGUgdG8gdXNlIHRoZSBX
SyogQyBBUEksIHdoaWNoIGlzIGdpdmVzIG1vcmUgZmxleGliaWxpdHkKKyAgICAgICAgd2hpbGUg
YmVpbmcgbW9yZSBsb3cgbGV2ZWwuCisKKyAgICAgICAgVGhlIGlkZWEgaXMgdGhhdCB0aGUgV0tW
aWV3IGNsYXNzIHdpbGwgbm90IGRlcGVuZCBvbiBFdmFzX09iamVjdAorICAgICAgICBhbmQgWDEx
IChmdXR1cmUgcGxhbikgdW5saWtlIHRoZSBjdXJyZW50IEVGTC1saWtlIEFQSS4gVGhpcyBzaG91
bGQKKyAgICAgICAgbWFrZSBpdCBwb3NzaWJsZSB0byB1c2UgaXQgZm9yIGNhc2VzIHdoZXJlIG5v
bmUgb2YgdGhlc2UgYXJlCisgICAgICAgIGF2YWlsYWJsZS4KKworICAgICAgICBUaGlzIHBhdGNo
IGludHJvZHVjZXMgdGhlIFdlYlZpZXcgY2xhc3Mgd2hpY2ggc2VydmVzIGFzIG91cgorICAgICAg
ICBjb3VudGVycGFydCBmb3IgdGhlIFdLVmlldyBjbGFzcywgYW5kIGFkZHMgYSBmZXcgbmVlZGVk
IG1ldGhvZHMuCisKKyAgICAgICAgVGhlIEV3a1ZpZXcgb3ducyB0aGUgV2ViVmlldyBjbGFzcyAo
YW5kIHdpbGwgYmUgY29uc3RydWN0aW5nIGl0CisgICAgICAgIGluIHRoZSBuZWFyIGZ1dHVyZSB3
aGVuIHRoZSBFd2tWaWV3IGNsYXNzIGhhcyBiZWVuIGNoYW5nZWQgdG8KKyAgICAgICAgaGFuZGxl
IGFsbCBzbWFydCBvYmplY3QgcmVsYXRlZCBjb2RlKQorCisgICAgICAgIFRoZSBjbGVhbiB1cCBv
ZiB0aGUgc21hcnQgb2JqZWN0IHJlbGF0ZWQgY29kZSBhcyB0aGUgcHJvcGVyCisgICAgICAgIGNv
bnN0cnVjdGlvbiBvZiBFd2tWaWV3IGFuZCBXZWJWaWV3IHdpbGwgYmUgZG9uZSBpbiBmb2xsb3ct
dXAKKyAgICAgICAgcGF0Y2hlcy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9lZmwvV0tB
UElDYXN0RWZsLmg6CisgICAgICAgIChXZWJLaXQpOgorCisgICAgICAgICAgICBUaGUgV0tWaWV3
IEFQSSBpcyBub3QgYmFzZWQgb24gV2ViVmlldyBhbmQgbm90IEV2YXNfT2JqZWN0KgorCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwOgorICAgICAgICAoV0tWaWV3Q3Jl
YXRlKToKKyAgICAgICAgKFdLVmlld0NyZWF0ZVdpdGhGaXhlZExheW91dCk6CisgICAgICAgIChX
S1ZpZXdJbml0aWFsaXplKToKKyAgICAgICAgKFdLVmlld0dldFBhZ2UpOgorICAgICAgICAoV0tW
aWV3U2V0VGhlbWVQYXRoKToKKyAgICAgICAgKFdLVmlld1N1c3BlbmRBY3RpdmVET01PYmplY3Rz
QW5kQW5pbWF0aW9ucyk6CisgICAgICAgIChXS1ZpZXdSZXN1bWVBY3RpdmVET01PYmplY3RzQW5k
QW5pbWF0aW9ucyk6CisgICAgICAgIChXS1ZpZXdHZXRFdmFzT2JqZWN0KToKKyAgICAgICAgKFdL
Vmlld0NyZWF0ZVNuYXBzaG90KToKKworICAgICAgICAgICAgQWRkIGEgZmV3IG5ldyBXS1ZpZXcg
RUZMIEMgbWV0aG9kcywgYW5kIHVwZGF0ZSBleGlzdGluZworICAgICAgICAgICAgbWV0aG9kcyB0
byByZWZsZWN0IHRoYXQgdGhlIFdLVmlld1JlZiBpcyBub3cgYSBXZWJWaWV3KgorCisgICAgICAg
ICAgICBUaGUgY29uc3RydWN0aW9uIG1ldGhvZHMgd2lsbCBiZSByZXdyaXR0ZW4gd2hlbiB0aGUg
c21hcnQKKyAgICAgICAgICAgIG9iamVjdCBjb25zdHJ1Y3Rpb24gaGFzIGJlZW4gc29sdmVzLgor
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXc6OldlYlZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojp+V2Vi
Vmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmluaXRpYWxpemUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3OjpzZXRUaGVtZVBhdGgpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
OjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3OjpyZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyk6CisKKyAgICAg
ICAgICAgIEFkZCBhIG5ldyBXZWJLaXQ6OldlYlZpZXcgY2xhc3MgZm9yIEVGTC4KKworICAgICAg
ICAoRXdrVmlldzo6RXdrVmlldyk6CisgICAgICAgIChFd2tWaWV3Ojp+RXdrVmlldyk6CisgICAg
ICAgIChFd2tWaWV3Ojp3a1BhZ2UpOgorICAgICAgICAoRXdrVmlldzo6ZGV2aWNlU2NhbGVGYWN0
b3IpOgorICAgICAgICAoRXdrVmlldzo6dGl0bGUpOgorICAgICAgICAoRXdrVmlldzo6c2V0VGhl
bWVQYXRoKToKKyAgICAgICAgKEV3a1ZpZXc6OmN1c3RvbVRleHRFbmNvZGluZ05hbWUpOgorICAg
ICAgICAoRXdrVmlldzo6c2V0Q3VzdG9tVGV4dEVuY29kaW5nTmFtZSk6CisgICAgICAgIChFd2tW
aWV3OjpjcmVhdGVHTFN1cmZhY2UpOgorICAgICAgICAoRXdrVmlldzo6aW5mb3JtVVJMQ2hhbmdl
KToKKyAgICAgICAgKEV3a1ZpZXc6OnRha2VTbmFwc2hvdCk6CisKKyAgICAgICAgICAgIEJhc2Ug
bWV0aG9kcyBvbiBDIEFQSSBpbnN0ZWFkIG9mIGludGVybmFsIEFQSSBhcyBtdWNoCisgICAgICAg
ICAgICBhcyBjdXJyZW50bHkgcG9zc2libGUuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2Vm
bC9Fd2tWaWV3Lmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViVmlldyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXc6OnBhZ2VSZWYpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
OjpldmFzT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6cGFnZSk6CisgICAgICAg
IChFd2tWaWV3KToKKyAgICAgICAgKEV3a1ZpZXc6OndrVmlldyk6CisgICAgICAgIChFd2tWaWV3
OjpwYWdlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHA6CisgICAg
ICAgIChjcmVhdGVFd2tWaWV3KToKKyAgICAgICAgKGV3a192aWV3X2Jhc2VfYWRkKToKKyAgICAg
ICAgKGV3a192aWV3X3NtYXJ0X2FkZCk6CisKKyAgICAgICAgICAgIE1vZGlmeSB0byByZXR1cm4g
dGhlIEV3a1ZpZXcgY2xhc3MgZm9yIG5vdy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a192aWV3X3ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1dlYkluc3BlY3Rv
clByb3h5RWZsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtQ3JlYXRlSW5zcGVjdG9yUGFnZSk6CisKKyAgICAgICAgICAgIFVwZGF0ZWQgZHVlIHRvIGNo
YW5nZWQgQVBJLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL2VmbC9XS0FQSUNhc3RFZmwu
aDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1Zp
ZXcuY3BwOgorICAgICAgICAoV0tWaWV3Q3JlYXRlKToKKyAgICAgICAgKFdLVmlld0NyZWF0ZVdp
dGhGaXhlZExheW91dCk6CisgICAgICAgIChXS1ZpZXdJbml0aWFsaXplKToKKyAgICAgICAgKFdL
Vmlld0dldFBhZ2UpOgorICAgICAgICAoV0tWaWV3U2V0VGhlbWVQYXRoKToKKyAgICAgICAgKFdL
Vmlld1N1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyk6CisgICAgICAgIChXS1Zp
ZXdSZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyk6CisgICAgICAgIChXS1ZpZXdH
ZXRFdmFzT2JqZWN0KToKKyAgICAgICAgKFdLVmlld0NyZWF0ZVNuYXBzaG90KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL0V3a1ZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlldzo6V2ViVmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6On5XZWJWaWV3KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlldzo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXc6OnNldFRoZW1lUGF0aCk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OnN1c3BlbmRB
Y3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6
OnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKToKKyAgICAgICAgKEV3a1ZpZXc6
OkV3a1ZpZXcpOgorICAgICAgICAoRXdrVmlldzo6fkV3a1ZpZXcpOgorICAgICAgICAoRXdrVmll
dzo6d2tQYWdlKToKKyAgICAgICAgKEV3a1ZpZXc6OmRldmljZVNjYWxlRmFjdG9yKToKKyAgICAg
ICAgKEV3a1ZpZXc6OnRpdGxlKToKKyAgICAgICAgKEV3a1ZpZXc6OnNldFRoZW1lUGF0aCk6Cisg
ICAgICAgIChFd2tWaWV3OjpjdXN0b21UZXh0RW5jb2RpbmdOYW1lKToKKyAgICAgICAgKEV3a1Zp
ZXc6OnNldEN1c3RvbVRleHRFbmNvZGluZ05hbWUpOgorICAgICAgICAoRXdrVmlldzo6Y3JlYXRl
R0xTdXJmYWNlKToKKyAgICAgICAgKEV3a1ZpZXc6OmluZm9ybVVSTENoYW5nZSk6CisgICAgICAg
IChFd2tWaWV3Ojp0YWtlU25hcHNob3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0V3
a1ZpZXcuaDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJWaWV3KToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlldzo6cGFnZVJlZik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmV2
YXNPYmplY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpwYWdlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlldzo6dHlwZSk6CisgICAgICAgIChFd2tWaWV3KToKKyAgICAgICAgKEV3a1Zp
ZXc6OndrVmlldyk6CisgICAgICAgIChFd2tWaWV3OjpwYWdlKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2VmbC9ld2tfdmlldy5jcHA6CisgICAgICAgIChjcmVhdGVFd2tWaWV3KToKKyAgICAg
ICAgKGV3a192aWV3X2Jhc2VfYWRkKToKKyAgICAgICAgKGV3a192aWV3X3NtYXJ0X2FkZCk6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVJbnNwZWN0b3JQYWdlKToKKworMjAx
My0wMS0yOCAgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4gIDxrZW5uZXRoQHdlYmtpdC5vcmc+
CisKICAgICAgICAgW0VGTF1bV0syXSBVc2UgQyBBUEkgaW5zaWRlIGV3a191cmxfcmVzcG9uc2UK
ICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzgyNgog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLQVBJQ2Fz
dEVmbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS0FQSUNhc3RFZmwu
aAppbmRleCBiMDEzYTBhNjBkZmYwMzI4Y2YyZjllNWIxMTYxODYwMjM1ZTc2ZjBhLi4xODg5ZmM0
MzY3NTVmOTFhODJmM2EzMDNmYWU1YmE1M2Q3ZjYyZGU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLQVBJQ2FzdEVmbC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tBUElDYXN0RWZsLmgKQEAgLTI0LDE1ICsyNCwxMSBA
QAogI2Vycm9yICJQbGVhc2UgI2luY2x1ZGUgXCJXS0FQSUNhc3QuaFwiIGluc3RlYWQgb2YgdGhp
cyBmaWxlIGRpcmVjdGx5LiIKICNlbmRpZgogCi0jaWYgVVNFKEVPKQotdHlwZWRlZiBzdHJ1Y3Qg
X0VvIEV2YXNfT2JqZWN0OwotI2Vsc2UKLXR5cGVkZWYgc3RydWN0IF9FdmFzX09iamVjdCBFdmFz
X09iamVjdDsKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotV0tfQUREX0FQSV9NQVBQ
SU5HKFdLVmlld1JlZiwgRXZhc19PYmplY3QpCitjbGFzcyBXZWJWaWV3OworCitXS19BRERfQVBJ
X01BUFBJTkcoV0tWaWV3UmVmLCBXZWJWaWV3KQogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcAppbmRleCAzMmI5ZDhmNjM3MzViYmZmZTI2ZWY2
OTA5MTFhMDAxYzYyNmIwZjEwLi44MTY3Y2MyYWIyNGY1YjZlNzU5MTk1NGY5ODI1ZWRhNWMzNzU5
Y2M2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmll
dy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3Bw
CkBAIC0yOSwyNCArMjksNDYgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogV0tWaWV3UmVm
IFdLVmlld0NyZWF0ZShFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1Bh
Z2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKGV3a192aWV3X2Jh
c2VfYWRkKGNhbnZhcywgY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpMZWdhY3lC
ZWhhdmlvcikpOworICAgIHJldHVybiBld2tfdmlld19iYXNlX2FkZChjYW52YXMsIGNvbnRleHRS
ZWYsIHBhZ2VHcm91cFJlZiwgRXdrVmlldzo6TGVnYWN5QmVoYXZpb3IpLT53a1ZpZXcoKTsKIH0K
IAogV0tWaWV3UmVmIFdLVmlld0NyZWF0ZVdpdGhGaXhlZExheW91dChFdmFzKiBjYW52YXMsIFdL
Q29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCiB7Ci0g
ICAgcmV0dXJuIHRvQVBJKGV3a192aWV3X2Jhc2VfYWRkKGNhbnZhcywgY29udGV4dFJlZiwgcGFn
ZUdyb3VwUmVmLCBFd2tWaWV3OjpEZWZhdWx0QmVoYXZpb3IpKTsKKyAgICByZXR1cm4gZXdrX3Zp
ZXdfYmFzZV9hZGQoY2FudmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OkRl
ZmF1bHRCZWhhdmlvciktPndrVmlldygpOworfQorCit2b2lkIFdLVmlld0luaXRpYWxpemUoV0tW
aWV3UmVmIHZpZXdSZWYpCit7CisgICAgdG9JbXBsKHZpZXdSZWYpLT5pbml0aWFsaXplKCk7CiB9
CiAKIFdLUGFnZVJlZiBXS1ZpZXdHZXRQYWdlKFdLVmlld1JlZiB2aWV3UmVmKQogewotICAgIEV3
a1ZpZXcqIHZpZXcgPSBFd2tWaWV3Ojpmcm9tRXZhc09iamVjdCh0b0ltcGwodmlld1JlZikpOwor
ICAgIHJldHVybiB0b0ltcGwodmlld1JlZiktPnBhZ2VSZWYoKTsKK30KIAotICAgIHJldHVybiB2
aWV3LT53a1BhZ2UoKTsKK3ZvaWQgV0tWaWV3U2V0VGhlbWVQYXRoKFdLVmlld1JlZiB2aWV3UmVm
LCBXS1N0cmluZ1JlZiB0aGVtZSkKK3sKKyAgICB0b0ltcGwodmlld1JlZiktPnNldFRoZW1lUGF0
aCh0aGVtZSk7CiB9CiAKLVdLSW1hZ2VSZWYgV0tWaWV3Q3JlYXRlU25hcHNob3QoV0tWaWV3UmVm
IHZpZXdSZWYpCit2b2lkIFdLVmlld1N1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9u
cyhXS1ZpZXdSZWYgdmlld1JlZikKIHsKLSAgICBFd2tWaWV3KiB2aWV3ID0gRXdrVmlldzo6ZnJv
bUV2YXNPYmplY3QodG9JbXBsKHZpZXdSZWYpKTsKKyAgICB0b0ltcGwodmlld1JlZiktPnN1c3Bl
bmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworfQogCi0gICAgcmV0dXJuIFdLSW1h
Z2VDcmVhdGVGcm9tQ2Fpcm9TdXJmYWNlKHZpZXctPnRha2VTbmFwc2hvdCgpLmdldCgpLCAwIC8q
IG9wdGlvbnMgKi8pOwordm9pZCBXS1ZpZXdSZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0
aW9ucyhXS1ZpZXdSZWYgdmlld1JlZikKK3sKKyAgICB0b0ltcGwodmlld1JlZiktPnJlc3VtZUFj
dGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7Cit9CisKK0V2YXNfT2JqZWN0KiBXS1ZpZXdH
ZXRFdmFzT2JqZWN0KFdLVmlld1JlZiB2aWV3UmVmKQoreworICAgIHJldHVybiB0b0ltcGwodmll
d1JlZiktPmV2YXNPYmplY3QoKTsKK30KKworV0tJbWFnZVJlZiBXS1ZpZXdDcmVhdGVTbmFwc2hv
dChXS1ZpZXdSZWYgdmlld1JlZikKK3sKKyAgICBFd2tWaWV3KiBld2tWaWV3ID0gRXdrVmlldzo6
ZnJvbUV2YXNPYmplY3QodG9JbXBsKHZpZXdSZWYpLT5ldmFzT2JqZWN0KCkpOworICAgIHJldHVy
biBXS0ltYWdlQ3JlYXRlRnJvbUNhaXJvU3VyZmFjZShld2tWaWV3LT50YWtlU25hcHNob3QoKS5n
ZXQoKSwgMCAvKiBvcHRpb25zICovKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0MvZWZsL1dLVmlldy5oCmluZGV4IGNjNzMwN2NmNGNiNDkyNjM2ZThhODJjYWMxYTNhZjEwNWM5
MTlmZGUuLmQ1YjQzMmQ4ZWExMzE1NDI4N2ZhOGQ0YTg3YzQ4YjQwYjhkMjJmMWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaApAQCAtMjQsOCArMjQsMTAg
QEAKIAogI2lmIFVTRShFTykKIHR5cGVkZWYgc3RydWN0IF9FbyBFdmFzOwordHlwZWRlZiBzdHJ1
Y3QgX0VvIEV2YXNfT2JqZWN0OwogI2Vsc2UKIHR5cGVkZWYgc3RydWN0IF9FdmFzIEV2YXM7Cit0
eXBlZGVmIHN0cnVjdCBfRXZhc19PYmplY3QgRXZhc19PYmplY3Q7CiAjZW5kaWYKIAogI2lmZGVm
IF9fY3BsdXNwbHVzCkBAIC0zNiw5ICszOCwxOSBAQCBXS19FWFBPUlQgV0tWaWV3UmVmIFdLVmll
d0NyZWF0ZShFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91cAog
CiBXS19FWFBPUlQgV0tWaWV3UmVmIFdLVmlld0NyZWF0ZVdpdGhGaXhlZExheW91dChFdmFzKiBj
YW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXApOwog
Ci1XS19FWFBPUlQgV0tQYWdlUmVmIFdLVmlld0dldFBhZ2UoV0tWaWV3UmVmIHZpZXcpOworV0tf
RVhQT1JUIHZvaWQgV0tWaWV3SW5pdGlhbGl6ZShXS1ZpZXdSZWYpOwogCi1XS19FWFBPUlQgV0tJ
bWFnZVJlZiBXS1ZpZXdDcmVhdGVTbmFwc2hvdChXS1ZpZXdSZWYgdmlld1JlZik7CitXS19FWFBP
UlQgV0tQYWdlUmVmIFdLVmlld0dldFBhZ2UoV0tWaWV3UmVmKTsKKworV0tfRVhQT1JUIHZvaWQg
V0tWaWV3U2V0VGhlbWVQYXRoKFdLVmlld1JlZiwgV0tTdHJpbmdSZWYpOworCitXS19FWFBPUlQg
dm9pZCBXS1ZpZXdTdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoV0tWaWV3UmVm
KTsKK1dLX0VYUE9SVCB2b2lkIFdLVmlld1Jlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRp
b25zKFdLVmlld1JlZik7CisKKy8vIEZJWE1FOiBUaGUgbG9uZyB0ZXJtIHBsYW4gaXMgdG8gZ2V0
IHJpZCBvZiB0aGlzLCBzbyBrZWVwIHVzYWdlIHRvIGEgYmFyZSBtaW5pbXVtLgorV0tfRVhQT1JU
IEV2YXNfT2JqZWN0KiBXS1ZpZXdHZXRFdmFzT2JqZWN0KFdLVmlld1JlZik7CisKK1dLX0VYUE9S
VCBXS0ltYWdlUmVmIFdLVmlld0NyZWF0ZVNuYXBzaG90KFdLVmlld1JlZik7CiAKICNpZmRlZiBf
X2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvRXdrVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3
LmNwcAppbmRleCAxMzNhMTVmOGRkYWYwMWNkNDFhYmY1ODQ3YjNmNGVhOTgwZjM3Y2U1Li5hNGQz
Yzk3NWIxODU5MTIwYThmZGI2ZDE5ODk4YzNkMGFkMzg4M2FjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcApAQCAtMzgsNyArMzgsOSBAQAogI2luY2x1
ZGUgIldLRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIldLR2VvbWV0cnkuaCIKICNpbmNsdWRlICJX
S051bWJlci5oIgorI2luY2x1ZGUgIldLUGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAiV0tTdHJpbmcu
aCIKKyNpbmNsdWRlICJXS1ZpZXcuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiV2ViSW1hZ2UuaCIKICNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKQEAgLTExMCwxNCArMTEy
LDU1IEBAIGNvbnN0IEV2YXNfT2JqZWN0KiBFd2tWaWV3Ojp2aWV3RnJvbVBhZ2VWaWV3TWFwKGNv
bnN0IFdLUGFnZVJlZiBwYWdlKQogICAgIHJldHVybiBwYWdlVmlld01hcCgpLmdldChwYWdlKTsK
IH0KIAotRXdrVmlldzo6RXdrVmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0
cjxFd2tDb250ZXh0PiBjb250ZXh0LCBQYXNzUmVmUHRyPFdlYlBhZ2VHcm91cD4gcGFnZUdyb3Vw
LCBWaWV3QmVoYXZpb3IgYmVoYXZpb3IpCi0gICAgOiBtX2V2YXNPYmplY3QoZXZhc09iamVjdCkK
K25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJWaWV3OjpXZWJWaWV3KFdlYkNvbnRleHQqIGNvbnRl
eHQsIFBhZ2VDbGllbnQqIHBhZ2VDbGllbnQsIFdlYlBhZ2VHcm91cCogcGFnZUdyb3VwLCBFdmFz
X09iamVjdCogZXZhc09iamVjdCkKKyAgICA6IG1fd2ViUGFnZVByb3h5KGNvbnRleHQtPmNyZWF0
ZVdlYlBhZ2UocGFnZUNsaWVudCwgcGFnZUdyb3VwKSkKKyAgICAsIG1fZXZhc09iamVjdChldmFz
T2JqZWN0KQoreworICAgIG1fd2ViUGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMo
KS0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQodHJ1ZSk7CisgICAgbV93ZWJQYWdl
UHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRGb3JjZUNvbXBvc2l0aW5nTW9k
ZSh0cnVlKTsKKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBtX3dlYlBhZ2VQcm94
eS0+ZnVsbFNjcmVlbk1hbmFnZXIoKS0+c2V0V2ViVmlldyhtX2V2YXNPYmplY3QpOworI2VuZGlm
Cit9CisKK1dlYlZpZXc6On5XZWJWaWV3KCkKK3sKKyAgICBtX3dlYlBhZ2VQcm94eS0+Y2xvc2Uo
KTsKK30KKwordm9pZCBXZWJWaWV3Ojppbml0aWFsaXplKCkKK3sKKyAgICBtX3dlYlBhZ2VQcm94
eS0+aW5pdGlhbGl6ZVdlYlBhZ2UoKTsKK30KKwordm9pZCBXZWJWaWV3OjpzZXRUaGVtZVBhdGgo
V0tTdHJpbmdSZWYgdGhlbWUpCit7CisgICAgbV93ZWJQYWdlUHJveHktPnNldFRoZW1lUGF0aCh0
b1dURlN0cmluZyh0aGVtZSkudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgV2ViVmlldzo6c3Vz
cGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCkKK3sKKyAgICBtX3dlYlBhZ2VQcm94
eS0+c3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7Cit9CisKK3ZvaWQgV2Vi
Vmlldzo6cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKQoreworICAgIG1fd2Vi
UGFnZVByb3h5LT5yZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworRXdrVmlldzo6RXdrVmlldyhFdmFzX09iamVjdCogdmll
dywgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXZWJQYWdlR3JvdXAqIHBhZ2VHcm91
cCwgVmlld0JlaGF2aW9yIGJlaGF2aW9yKQorICAgIDogbV9ldmFzT2JqZWN0KHZpZXcpCiAgICAg
LCBtX2NvbnRleHQoY29udGV4dCkKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAg
ICAgLCBtX3BlbmRpbmdTdXJmYWNlUmVzaXplKGZhbHNlKQogI2VuZGlmCiAgICAgLCBtX3BhZ2VD
bGllbnQoYmVoYXZpb3IgPT0gRGVmYXVsdEJlaGF2aW9yID8gUGFnZUNsaWVudERlZmF1bHRJbXBs
OjpjcmVhdGUodGhpcykgOiBQYWdlQ2xpZW50TGVnYWN5SW1wbDo6Y3JlYXRlKHRoaXMpKQotICAg
ICwgbV9wYWdlUHJveHkobV9jb250ZXh0LT53ZWJDb250ZXh0KCktPmNyZWF0ZVdlYlBhZ2UobV9w
YWdlQ2xpZW50LmdldCgpLCBwYWdlR3JvdXAuZ2V0KCkpKQorICAgICwgbV93ZWJWaWV3KGFkb3B0
UmVmKG5ldyBXZWJWaWV3KG1fY29udGV4dC0+d2ViQ29udGV4dCgpLmdldCgpLCBtX3BhZ2VDbGll
bnQuZ2V0KCksIHBhZ2VHcm91cCwgdmlldykpKQogICAgICwgbV9wYWdlTG9hZENsaWVudChQYWdl
TG9hZENsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQogICAgICwgbV9wYWdlUG9saWN5Q2xpZW50KFBh
Z2VQb2xpY3lDbGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKICAgICAsIG1fcGFnZVVJQ2xpZW50KFBh
Z2VVSUNsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQpAQCAtMTI3LDcgKzE3MCw3IEBAIEV3a1ZpZXc6
OkV3a1ZpZXcoRXZhc19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4g
Y29udGV4dCwgUGFzc1JlCiAjaWYgRU5BQkxFKFZJQlJBVElPTikKICAgICAsIG1fdmlicmF0aW9u
Q2xpZW50KFZpYnJhdGlvbkNsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQogI2VuZGlmCi0gICAgLCBt
X2JhY2tGb3J3YXJkTGlzdChFd2tCYWNrRm9yd2FyZExpc3Q6OmNyZWF0ZSh0b0FQSShtX3BhZ2VQ
cm94eS0+YmFja0ZvcndhcmRMaXN0KCkpKSkKKyAgICAsIG1fYmFja0ZvcndhcmRMaXN0KEV3a0Jh
Y2tGb3J3YXJkTGlzdDo6Y3JlYXRlKFdLUGFnZUdldEJhY2tGb3J3YXJkTGlzdCh3a1BhZ2UoKSkp
KQogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQogICAgICwgbV9wYWdlU2NhbGVGYWN0b3Io
MSkKICNlbmRpZgpAQCAtMTQ0LDI5ICsxODcsMTggQEAgRXdrVmlldzo6RXdrVmlldyhFdmFzX09i
amVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBQYXNzUmUK
IHsKICAgICBBU1NFUlQobV9ldmFzT2JqZWN0KTsKICAgICBBU1NFUlQobV9jb250ZXh0KTsKLSAg
ICBBU1NFUlQobV9wYWdlUHJveHkpOwogCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQot
ICAgIG1fcGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0QWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0VuYWJsZWQodHJ1ZSk7Ci0gICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgp
LT5wcmVmZXJlbmNlcygpLT5zZXRGb3JjZUNvbXBvc2l0aW5nTW9kZSh0cnVlKTsKLSNpZiBFTkFC
TEUoV0VCR0wpCi0gICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5z
ZXRXZWJHTEVuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKLSAgICBpZiAoYmVoYXZpb3IgPT0gRGVmYXVs
dEJlaGF2aW9yKQotICAgICAgICBtX3BhZ2VQcm94eS0+c2V0VXNlRml4ZWRMYXlvdXQodHJ1ZSk7
Ci0jZW5kaWYKKyAgICBXS1ZpZXdJbml0aWFsaXplKHdrVmlldygpKTsKIAotICAgIG1fcGFnZVBy
b3h5LT5pbml0aWFsaXplV2ViUGFnZSgpOworICAgIFdLUGFnZVNldFVzZUZpeGVkTGF5b3V0KHdr
UGFnZSgpLCBiZWhhdmlvciA9PSBEZWZhdWx0QmVoYXZpb3IpOwogCi0jaWYgRU5BQkxFKEZVTExT
Q1JFRU5fQVBJKQotICAgIG1fcGFnZVByb3h5LT5mdWxsU2NyZWVuTWFuYWdlcigpLT5zZXRXZWJW
aWV3KG1fZXZhc09iamVjdCk7Ci0gICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJl
bmNlcygpLT5zZXRGdWxsU2NyZWVuRW5hYmxlZCh0cnVlKTsKLSNlbmRpZgotI2lmIEVOQUJMRShX
RUJfQVVESU8pCi0gICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5z
ZXRXZWJBdWRpb0VuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKKyAgICBXS1BhZ2VHcm91cFJlZiB3a1Bh
Z2VHcm91cCA9IFdLUGFnZUdldFBhZ2VHcm91cCh3a1BhZ2UoKSk7CisgICAgV0tQcmVmZXJlbmNl
c1JlZiB3a1ByZWZlcmVuY2VzID0gV0tQYWdlR3JvdXBHZXRQcmVmZXJlbmNlcyh3a1BhZ2VHcm91
cCk7CiAKLSAgICBtX3BhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldE9m
ZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCh0cnVlKTsKKyAgICBXS1ByZWZlcmVuY2Vz
U2V0V2ViR0xFbmFibGVkKHdrUHJlZmVyZW5jZXMsIHRydWUpOworICAgIFdLUHJlZmVyZW5jZXNT
ZXRGdWxsU2NyZWVuRW5hYmxlZCh3a1ByZWZlcmVuY2VzLCB0cnVlKTsKKyAgICBXS1ByZWZlcmVu
Y2VzU2V0V2ViQXVkaW9FbmFibGVkKHdrUHJlZmVyZW5jZXMsIHRydWUpOworICAgIFdLUHJlZmVy
ZW5jZXNTZXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQod2tQcmVmZXJlbmNlcywg
dHJ1ZSk7CiAKICAgICAvLyBFbmFibGUgbW91c2UgZXZlbnRzIGJ5IGRlZmF1bHQKICAgICBzZXRN
b3VzZUV2ZW50c0VuYWJsZWQodHJ1ZSk7CkBAIC0xODIsOCArMjE0LDYgQEAgRXdrVmlldzo6RXdr
VmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250
ZXh0LCBQYXNzUmUKIAogRXdrVmlldzo6fkV3a1ZpZXcoKQogewotICAgIG1fcGFnZVByb3h5LT5j
bG9zZSgpOwotCiAgICAgLy8gVW5yZWdpc3RlciBpY29uIGNoYW5nZSBjYWxsYmFjay4KICAgICBF
d2tGYXZpY29uRGF0YWJhc2UqIGljb25EYXRhYmFzZSA9IG1fY29udGV4dC0+ZmF2aWNvbkRhdGFi
YXNlKCk7CiAgICAgQVNTRVJUKGljb25EYXRhYmFzZSk7CkBAIC0yMTEsOSArMjQxLDkgQEAgRXdr
VmlldyogRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QoY29uc3QgRXZhc19PYmplY3QqIHZpZXcpCiAg
KiBAaW50ZXJuYWwKICAqIFJldHJpZXZlcyB0aGUgaW50ZXJuYWwgV0tQYWdlIGZvciB0aGlzIHZp
ZXcuCiAgKi8KLVdLUGFnZVJlZiBFd2tWaWV3Ojp3a1BhZ2UoKQorV0tQYWdlUmVmIEV3a1ZpZXc6
OndrUGFnZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRvQVBJKG1fcGFnZVByb3h5LmdldCgpKTsK
KyAgICByZXR1cm4gV0tWaWV3R2V0UGFnZSh3a1ZpZXcoKSk7CiB9CiAKIHZvaWQgRXdrVmlldzo6
c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYgY3Vyc29yKQpAQCAtMjk3LDcgKzMyNyw3IEBAIHZvaWQg
RXdrVmlldzo6c2V0RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGUpCiAKIGZsb2F0IEV3a1Zp
ZXc6OmRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9wYWdlUHJveHkt
PmRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgcmV0dXJuIFdLUGFnZUdldEJhY2tpbmdTY2FsZUZh
Y3Rvcih3a1BhZ2UoKSk7CiB9CiAKIEFmZmluZVRyYW5zZm9ybSBFd2tWaWV3Ojp0cmFuc2Zvcm1G
cm9tU2NlbmUoKSBjb25zdApAQCAtNTIzLDcgKzU1Myw3IEBAIGJvb2wgRXdrVmlldzo6aXNWaXNp
YmxlKCkgY29uc3QKIAogY29uc3QgY2hhciogRXdrVmlldzo6dGl0bGUoKSBjb25zdAogewotICAg
IG1fdGl0bGUgPSBtX3BhZ2VQcm94eS0+cGFnZVRpdGxlKCkudXRmOCgpLmRhdGEoKTsKKyAgICBt
X3RpdGxlID0gV0tFaW5hU2hhcmVkU3RyaW5nKEFkb3B0V0ssIFdLUGFnZUNvcHlUaXRsZSh3a1Bh
Z2UoKSkpOwogCiAgICAgcmV0dXJuIG1fdGl0bGU7CiB9CkBAIC01NDYsMjQgKzU3NiwyNiBAQCB2
b2lkIEV3a1ZpZXc6OnNldFRoZW1lUGF0aChjb25zdCBjaGFyKiB0aGVtZSkKIHsKICAgICBpZiAo
bV90aGVtZSAhPSB0aGVtZSkgewogICAgICAgICBtX3RoZW1lID0gdGhlbWU7Ci0gICAgICAgIG1f
cGFnZVByb3h5LT5zZXRUaGVtZVBhdGgodGhlbWUpOworICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gd2tUaGVtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
dGhlbWUpKTsKKyAgICAgICAgV0tWaWV3U2V0VGhlbWVQYXRoKHdrVmlldygpLCB3a1RoZW1lLmdl
dCgpKTsKICAgICB9CiB9CiAKIGNvbnN0IGNoYXIqIEV3a1ZpZXc6OmN1c3RvbVRleHRFbmNvZGlu
Z05hbWUoKSBjb25zdAogewotICAgIFN0cmluZyBjdXN0b21FbmNvZGluZyA9IG1fcGFnZVByb3h5
LT5jdXN0b21UZXh0RW5jb2RpbmdOYW1lKCk7Ci0gICAgaWYgKGN1c3RvbUVuY29kaW5nLmlzRW1w
dHkoKSkKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gY3VzdG9tRW5jb2RpbmcgPSBhZG9w
dFdLKFdLUGFnZUNvcHlDdXN0b21UZXh0RW5jb2RpbmdOYW1lKHdrUGFnZSgpKSk7CisgICAgaWYg
KFdLU3RyaW5nSXNFbXB0eShjdXN0b21FbmNvZGluZy5nZXQoKSkpCiAgICAgICAgIHJldHVybiAw
OwogCi0gICAgbV9jdXN0b21FbmNvZGluZyA9IGN1c3RvbUVuY29kaW5nLnV0ZjgoKS5kYXRhKCk7
CisgICAgbV9jdXN0b21FbmNvZGluZyA9IFdLRWluYVNoYXJlZFN0cmluZyhjdXN0b21FbmNvZGlu
Zy5nZXQoKSk7CiAKICAgICByZXR1cm4gbV9jdXN0b21FbmNvZGluZzsKIH0KIAogdm9pZCBFd2tW
aWV3OjpzZXRDdXN0b21UZXh0RW5jb2RpbmdOYW1lKGNvbnN0IFN0cmluZyYgZW5jb2RpbmcpCiB7
Ci0gICAgbV9wYWdlUHJveHktPnNldEN1c3RvbVRleHRFbmNvZGluZ05hbWUoZW5jb2RpbmcpOwor
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a0VuY29kaW5nID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhlbmNvZGluZy51dGY4KCkuZGF0YSgpKSk7CisgICAgV0tQ
YWdlU2V0Q3VzdG9tVGV4dEVuY29kaW5nTmFtZSh3a1BhZ2UoKSwgd2tFbmNvZGluZy5nZXQoKSk7
CiB9CiAKIHZvaWQgRXdrVmlldzo6c2V0TW91c2VFdmVudHNFbmFibGVkKGJvb2wgZW5hYmxlZCkK
QEAgLTY0NSw5ICs2NzcsNiBAQCBib29sIEV3a1ZpZXc6OmNyZWF0ZUdMU3VyZmFjZShjb25zdCBJ
bnRTaXplJiB2aWV3U2l6ZSkKICAgICAgICAgaWYgKCFtX2V2YXNHTCkgewogICAgICAgICAgICAg
V0FSTigiRmFpbGVkIHRvIGNyZWF0ZSBFdmFzX0dMLCBmYWxsaW5nIGJhY2sgdG8gc29mdHdhcmUg
bW9kZS4iKTsKICAgICAgICAgICAgIG1faXNIYXJkd2FyZUFjY2VsZXJhdGVkID0gZmFsc2U7Ci0j
aWYgRU5BQkxFKFdFQkdMKQotICAgICAgICAgICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5w
cmVmZXJlbmNlcygpLT5zZXRXZWJHTEVuYWJsZWQoZmFsc2UpOwotI2VuZGlmCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CkBAIC04OTAsMTUgKzkxOSwxMyBAQCB1
bnNpZ25lZCBsb25nIGxvbmcgRXdrVmlldzo6aW5mb3JtRGF0YWJhc2VRdW90YVJlYWNoZWQoY29u
c3QgU3RyaW5nJiBkYXRhYmFzZU5hbQogICovCiB2b2lkIEV3a1ZpZXc6OmluZm9ybVVSTENoYW5n
ZSgpCiB7Ci0gICAgU3RyaW5nIGFjdGl2ZVVSTCA9IG1fcGFnZVByb3h5LT5hY3RpdmVVUkwoKTsK
LSAgICBpZiAoYWN0aXZlVVJMLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgIFdLUmV0
YWluUHRyPFdLVVJMUmVmPiB3a0FjdGl2ZVVSTCA9IGFkb3B0V0soV0tQYWdlQ29weUFjdGl2ZVVS
TCh3a1BhZ2UoKSkpOworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a1VSTFN0cmluZyA9
IGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHdrQWN0aXZlVVJMLmdldCgpKSk7CiAKLSAgICBDU3Ry
aW5nIHJhd0FjdGl2ZVVSTCA9IGFjdGl2ZVVSTC51dGY4KCk7Ci0gICAgaWYgKG1fdXJsID09IHJh
d0FjdGl2ZVVSTC5kYXRhKCkpCisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
d2tVUkxTdHJpbmcuZ2V0KCksIG1fdXJsKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV91cmwg
PSByYXdBY3RpdmVVUkwuZGF0YSgpOworICAgIG1fdXJsID0gV0tFaW5hU2hhcmVkU3RyaW5nKHdr
VVJMU3RyaW5nLmdldCgpKTsKICAgICBzbWFydENhbGxiYWNrPFVSTENoYW5nZWQ+KCkuY2FsbCht
X3VybCk7CiAKICAgICAvLyBVcGRhdGUgdGhlIHZpZXcncyBmYXZpY29uLgpAQCAtMTAzMCw3ICsx
MDU3LDcgQEAgdm9pZCBFd2tWaWV3OjpvbkZhdmljb25DaGFuZ2VkKGNvbnN0IGNoYXIqIHBhZ2VV
UkwsIHZvaWQqIGV2ZW50SW5mbykKIFBhc3NSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBFd2tWaWV3
Ojp0YWtlU25hcHNob3QoKQogewogICAgIC8vIFN1c3BlbmQgYWxsIGFuaW1hdGlvbnMgYmVmb3Jl
IHRha2luZyB0aGUgc25hcHNob3QuCi0gICAgbV9wYWdlUHJveHktPnN1c3BlbmRBY3RpdmVET01P
YmplY3RzQW5kQW5pbWF0aW9ucygpOworICAgIFdLVmlld1N1c3BlbmRBY3RpdmVET01PYmplY3Rz
QW5kQW5pbWF0aW9ucyh3a1ZpZXcoKSk7CiAKICAgICAvLyBXYWl0IGZvciB0aGUgcGVuZGluZyBy
ZXBhaW50IGV2ZW50cyB0byBiZSBwcm9jZXNzZWQuCiAgICAgd2hpbGUgKG1fZGlzcGxheVRpbWVy
LmlzQWN0aXZlKCkpCkBAIC0xMDQyLDcgKzEwNjksNyBAQCBQYXNzUmVmUHRyPGNhaXJvX3N1cmZh
Y2VfdD4gRXdrVmlldzo6dGFrZVNuYXBzaG90KCkKICNlbmRpZgogICAgICAgICBSZWZQdHI8Y2Fp
cm9fc3VyZmFjZV90PiBzbmFwc2hvdCA9IGNyZWF0ZVN1cmZhY2VGb3JJbWFnZShzZC0+aW1hZ2Up
OwogICAgICAgICAvLyBSZXN1bWUgYWxsIGFuaW1hdGlvbnMuCi0gICAgICAgIG1fcGFnZVByb3h5
LT5yZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworICAgICAgICBXS1ZpZXdS
ZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyh3a1ZpZXcoKSk7CiAKICAgICAgICAg
cmV0dXJuIHNuYXBzaG90LnJlbGVhc2UoKTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCkBAIC0xMDUwLDcgKzEwNzcsNyBAQCBQYXNzUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gRXdr
Vmlldzo6dGFrZVNuYXBzaG90KCkKIAogICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHNuYXBz
aG90ID0gZ2V0SW1hZ2VTdXJmYWNlRnJvbUZyYW1lQnVmZmVyKDAsIDAsIHNkLT52aWV3LncsIHNk
LT52aWV3LmgpOwogICAgIC8vIFJlc3VtZSBhbGwgYW5pbWF0aW9ucy4KLSAgICBtX3BhZ2VQcm94
eS0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKKyAgICBXS1ZpZXdSZXN1
bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyh3a1ZpZXcoKSk7CiAKICAgICByZXR1cm4g
c25hcHNob3QucmVsZWFzZSgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9Fd2tWaWV3LmgKaW5kZXggYTIxM2Y5N2Q1ZWJiNDE5NjMxNmE5ZWFjZTEyOGI5YTIyOWVk
NTAwZC4uYTNkMTZlMDY4ZGMxOTAyM2JhYWVmZjkwOGU4YzY4YTRlNzFmMjNkMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaApAQCAtNDksNiArNDksMTAgQEAK
ICNpbmNsdWRlICJFdmFzR0xTdXJmYWNlLmgiCiAjZW5kaWYKIAorI2luY2x1ZGUgIldlYkNvbnRl
eHQuaCIKKyNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJXZWJQcmVmZXJlbmNl
cy5oIgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIENvbnRleHRNZW51Q2xpZW50RWZsOwog
Y2xhc3MgRmluZENsaWVudEVmbDsKQEAgLTk2LDIxICsxMDAsNTIgQEAgdHlwZWRlZiBzdHJ1Y3Qg
X0V2YXNfR0xfU3VyZmFjZSBFdmFzX0dMX1N1cmZhY2U7CiAKIHR5cGVkZWYgc3RydWN0IEV3a19W
aWV3X1NtYXJ0X0RhdGEgRXdrX1ZpZXdfU21hcnRfRGF0YTsKIAotY2xhc3MgRXdrVmlldyB7Citu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViVmlldyA6IHB1YmxpYyBBUElPYmplY3Qgewog
cHVibGljOgorICAgIHN0YXRpYyBjb25zdCBUeXBlIEFQSVR5cGUgPSBUeXBlVmlldzsKKworICAg
IFdlYlZpZXcoV2ViQ29udGV4dCosIFBhZ2VDbGllbnQqLCBXZWJQYWdlR3JvdXAqLCBFdmFzX09i
amVjdCopOworICAgIHZpcnR1YWwgfldlYlZpZXcoKTsKIAorICAgIHZvaWQgaW5pdGlhbGl6ZSgp
OworCisgICAgV0tQYWdlUmVmIHBhZ2VSZWYoKSBjb25zdCB7IHJldHVybiB0b0FQSShtX3dlYlBh
Z2VQcm94eS5nZXQoKSk7IH0KKworICAgIHZvaWQgc2V0VGhlbWVQYXRoKFdLU3RyaW5nUmVmKTsK
KyAgICB2b2lkIHN1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworICAgIHZv
aWQgcmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKKworICAgIC8vIEZJWE1F
OiBSZW1vdmUgd2hlbiBwb3NzaWJsZS4KKyAgICBFdmFzX09iamVjdCogZXZhc09iamVjdCgpIHsg
cmV0dXJuIG1fZXZhc09iamVjdDsgfQorICAgIFdlYlBhZ2VQcm94eSogcGFnZSgpIHsgcmV0dXJu
IG1fd2ViUGFnZVByb3h5LmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBUeXBlIHR5
cGUoKSBjb25zdCB7IHJldHVybiBBUElUeXBlOyB9CisKKyAgICBXVEY6OlJlZlB0cjxXZWJQYWdl
UHJveHk+IG1fd2ViUGFnZVByb3h5OworICAgIEV2YXNfT2JqZWN0KiBtX2V2YXNPYmplY3Q7Cit9
OworCit9CisKK2NsYXNzIEV3a1ZpZXcgeworcHVibGljOgogICAgIGVudW0gVmlld0JlaGF2aW9y
IHsKICAgICAgICAgTGVnYWN5QmVoYXZpb3IsCiAgICAgICAgIERlZmF1bHRCZWhhdmlvcgogICAg
IH07Ci0gICAgRXdrVmlldyhFdmFzX09iamVjdCogdmlldywgUGFzc1JlZlB0cjxFd2tDb250ZXh0
PiBjb250ZXh0LCBQYXNzUmVmUHRyPFdlYktpdDo6V2ViUGFnZUdyb3VwPiBwYWdlR3JvdXAsIFZp
ZXdCZWhhdmlvcik7CisgICAgRXdrVmlldyhFdmFzX09iamVjdCogdmlldywgUGFzc1JlZlB0cjxF
d2tDb250ZXh0PiBjb250ZXh0LCBXZWJLaXQ6OldlYlBhZ2VHcm91cCogcGFnZUdyb3VwLCBWaWV3
QmVoYXZpb3IpOwogICAgIH5Fd2tWaWV3KCk7CiAKICAgICBzdGF0aWMgRXdrVmlldyogZnJvbUV2
YXNPYmplY3QoY29uc3QgRXZhc19PYmplY3QqIHZpZXcpOwogICAgIEV2YXNfT2JqZWN0KiB2aWV3
KCkgeyByZXR1cm4gbV9ldmFzT2JqZWN0OyB9CiAKLSAgICBXS1BhZ2VSZWYgd2tQYWdlKCk7Ci0g
ICAgV2ViS2l0OjpXZWJQYWdlUHJveHkqIHBhZ2UoKSB7IHJldHVybiBtX3BhZ2VQcm94eS5nZXQo
KTsgfQorICAgIFdLVmlld1JlZiB3a1ZpZXcoKSBjb25zdCB7IHJldHVybiB0b0FQSShtX3dlYlZp
ZXcuZ2V0KCkpOyB9CisgICAgV0tQYWdlUmVmIHdrUGFnZSgpIGNvbnN0OworCisgICAgV2ViS2l0
OjpXZWJQYWdlUHJveHkqIHBhZ2UoKSB7IHJldHVybiBtX3dlYlZpZXctPnBhZ2UoKTsgfQogICAg
IEV3a0NvbnRleHQqIGV3a0NvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KICAg
ICBFd2tTZXR0aW5ncyogc2V0dGluZ3MoKSB7IHJldHVybiBtX3NldHRpbmdzLmdldCgpOyB9CiAg
ICAgRXdrQmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3QoKSB7IHJldHVybiBtX2JhY2tG
b3J3YXJkTGlzdC5nZXQoKTsgfQpAQCAtMjQ1LDcgKzI4MCw3IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBtX3BlbmRpbmdTdXJmYWNlUmVzaXplOwogI2VuZGlmCiAgICAgT3duUHRyPFdlYktpdDo6UGFn
ZUNsaWVudEJhc2U+IG1fcGFnZUNsaWVudDsKLSAgICBSZWZQdHI8V2ViS2l0OjpXZWJQYWdlUHJv
eHk+IG1fcGFnZVByb3h5OworICAgIFJlZlB0cjxXZWJLaXQ6OldlYlZpZXc+IG1fd2ViVmlldzsK
ICAgICBPd25QdHI8V2ViS2l0OjpQYWdlTG9hZENsaWVudEVmbD4gbV9wYWdlTG9hZENsaWVudDsK
ICAgICBPd25QdHI8V2ViS2l0OjpQYWdlUG9saWN5Q2xpZW50RWZsPiBtX3BhZ2VQb2xpY3lDbGll
bnQ7CiAgICAgT3duUHRyPFdlYktpdDo6UGFnZVVJQ2xpZW50RWZsPiBtX3BhZ2VVSUNsaWVudDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAppbmRleCA3
MmE2YWZhYTNlZWMxMDg1NTlhZmRhZjg3NjM4MmZiNWMzNzNjYzExLi5jYWUwNDI1OGY0Y2JmZDQw
MmExMmI4ZTVjNzc3MGU4MTRhMGY2NDFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3ZpZXcuY3BwCkBAIC01MDUsNyArNTA1LDcgQEAgc3RhdGljIGlubGluZSBF
dmFzX1NtYXJ0KiBjcmVhdGVFd2tWaWV3U21hcnRDbGFzcyh2b2lkKQogICAgIHJldHVybiBzbWFy
dDsKIH0KIAotc3RhdGljIGlubGluZSBFdmFzX09iamVjdCogY3JlYXRlRXdrVmlldyhFdmFzKiBj
YW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQs
IFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiA9IDAsIEV3a1ZpZXc6OlZpZXdCZWhhdmlvciBi
ZWhhdmlvciA9IEV3a1ZpZXc6OkRlZmF1bHRCZWhhdmlvcikKK3N0YXRpYyBpbmxpbmUgRXdrVmll
dyogY3JlYXRlRXdrVmlldyhFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBQYXNzUmVm
UHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiA9IDAs
IEV3a1ZpZXc6OlZpZXdCZWhhdmlvciBiZWhhdmlvciA9IEV3a1ZpZXc6OkRlZmF1bHRCZWhhdmlv
cikKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY2FudmFzLCAwKTsKICAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnQsIDApOwpAQCAtNTI1LDIxICs1
MjUsMjIgQEAgc3RhdGljIGlubGluZSBFdmFzX09iamVjdCogY3JlYXRlRXdrVmlldyhFdmFzKiBj
YW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBQYXNzUmUKICAgICAvLyBEZWZhdWx0IFdlYlBhZ2VH
cm91cCBpcyBjcmVhdGVkIGluIFdlYkNvbnRleHQgY29uc3RydWN0b3IgaWYgdGhlIHBhZ2VHcm91
cFJlZiBpcyAwLAogICAgIC8vIHNvIHdlIGRvIG5vdCBuZWVkIHRvIGNyZWF0ZSBpdCBoZXJlLgog
ICAgIHNtYXJ0RGF0YS0+cHJpdiA9IG5ldyBFd2tWaWV3KGV3a1ZpZXcsIGNvbnRleHQsIHRvSW1w
bChwYWdlR3JvdXBSZWYpLCBiZWhhdmlvcik7Ci0gICAgcmV0dXJuIGV3a1ZpZXc7CisKKyAgICBy
ZXR1cm4gc21hcnREYXRhLT5wcml2OwogfQogCiAvKioKICAqIEBpbnRlcm5hbAogICogQ29uc3Ry
dWN0cyBhIGV3a192aWV3IEV2YXNfT2JqZWN0IHdpdGggV0tUeXBlIHBhcmFtZXRlcnMuCiAgKi8K
LUV2YXNfT2JqZWN0KiBld2tfdmlld19iYXNlX2FkZChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJl
ZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OlZpZXdC
ZWhhdmlvciBiZWhhdmlvcikKK0V3a1ZpZXcqIGV3a192aWV3X2Jhc2VfYWRkKEV2YXMqIGNhbnZh
cywgV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwg
RXdrVmlldzo6Vmlld0JlaGF2aW9yIGJlaGF2aW9yKQogewogICAgIHJldHVybiBjcmVhdGVFd2tW
aWV3KGNhbnZhcywgY3JlYXRlRXdrVmlld1NtYXJ0Q2xhc3MoKSwgY29udGV4dFJlZiA/IEV3a0Nv
bnRleHQ6OmNyZWF0ZSh0b0ltcGwoY29udGV4dFJlZikpIDogRXdrQ29udGV4dDo6ZGVmYXVsdENv
bnRleHQoKSwgcGFnZUdyb3VwUmVmLCBiZWhhdmlvcik7CiB9CiAKIEV2YXNfT2JqZWN0KiBld2tf
dmlld19zbWFydF9hZGQoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgRXdrX0NvbnRl
eHQqIGNvbnRleHQpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUV3a1ZpZXcoY2FudmFzLCBzbWFydCwg
ZXdrX29iamVjdF9jYXN0PEV3a0NvbnRleHQqPihjb250ZXh0KSk7CisgICAgcmV0dXJuIGNyZWF0
ZUV3a1ZpZXcoY2FudmFzLCBzbWFydCwgZXdrX29iamVjdF9jYXN0PEV3a0NvbnRleHQqPihjb250
ZXh0KSktPnZpZXcoKTsKIH0KIAogRXZhc19PYmplY3QqIGV3a192aWV3X2FkZF93aXRoX2NvbnRl
eHQoRXZhcyogY2FudmFzLCBFd2tfQ29udGV4dCogY29udGV4dCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaAppbmRleCA4M2I0Yzk3
M2IxYTM2NGNjNzk2OGM4ZjM3OTFhZWNmNmQyNGNlYWFiLi5jNDkxMmZmZDdiNDFlNGU1MmE3ZjRj
NmZhOGQ4MGVhZDRiNDEwNjU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfdmlld19wcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oCkBAIC0yNSw2ICsyNSw2IEBACiAjaW5jbHVkZSA8
RXZhcy5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+CiAKLUV2YXNfT2JqZWN0KiBld2tf
dmlld19iYXNlX2FkZChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYs
IEV3a1ZpZXc6OlZpZXdCZWhhdmlvcik7CitFd2tWaWV3KiBld2tfdmlld19iYXNlX2FkZChFdmFz
KiBjYW52YXMsIFdLQ29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OlZpZXdCZWhh
dmlvcik7CiAKICNlbmRpZiAvLyBld2tfdmlld19wcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAKaW5kZXggNDYy
YjI2ZDM1MGVlZmVkNzAzMzgyMWU1Nzc0YWFjYWM4NTRjYWE3Zi4uMzE3NDQ5ZGQxNWU0ZDhlZmUx
OTBiOWVhZDQyZWQ3MzNkZjY4ZDMwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAKQEAgLTk4LDE0ICs5OCwxNSBAQCBX
ZWJQYWdlUHJveHkqIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUluc3BlY3RvclBh
Z2UoKQogICAgIGlmICghbV9pbnNwZWN0b3JXaW5kb3cpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgbV9pbnNwZWN0b3JWaWV3ID0gZXdrX3ZpZXdfYmFzZV9hZGQoZWNvcmVfZXZhc19nZXQobV9p
bnNwZWN0b3JXaW5kb3cpLCB0b0FQSShwYWdlKCktPnByb2Nlc3MoKS0+Y29udGV4dCgpKSwgdG9B
UEkoaW5zcGVjdG9yUGFnZUdyb3VwKCkpLCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlvcik7Ci0gICAg
RXdrVmlldyogaW5zcGVjdG9yVmlld0ltcGwgPSBFd2tWaWV3Ojpmcm9tRXZhc09iamVjdChtX2lu
c3BlY3RvclZpZXcpOwotICAgIGluc3BlY3RvclZpZXdJbXBsLT5zZXRUaGVtZVBhdGgoVEVTVF9U
SEVNRV9ESVIgIi9kZWZhdWx0LmVkaiIpOworICAgIC8vIEZJWE1FOiBSZWZhY3RvciB0byB1c2Ug
V0tWaWV3UmVmLgorICAgIG1faW5zcGVjdG9yVmlldyA9IGV3a192aWV3X2Jhc2VfYWRkKGVjb3Jl
X2V2YXNfZ2V0KG1faW5zcGVjdG9yV2luZG93KSwgdG9BUEkocGFnZSgpLT5wcm9jZXNzKCktPmNv
bnRleHQoKSksIHRvQVBJKGluc3BlY3RvclBhZ2VHcm91cCgpKSwgRXdrVmlldzo6TGVnYWN5QmVo
YXZpb3IpLT52aWV3KCk7CisgICAgRXdrVmlldyogaW5zcGVjdG9yVmlldyA9IEV3a1ZpZXc6OmZy
b21FdmFzT2JqZWN0KG1faW5zcGVjdG9yVmlldyk7CisgICAgaW5zcGVjdG9yVmlldy0+c2V0VGhl
bWVQYXRoKFRFU1RfVEhFTUVfRElSICIvZGVmYXVsdC5lZGoiKTsKIAotICAgIEV3a19TZXR0aW5n
cyogc2V0dGluZ3MgPSBpbnNwZWN0b3JWaWV3SW1wbC0+c2V0dGluZ3MoKTsKKyAgICBFd2tfU2V0
dGluZ3MqIHNldHRpbmdzID0gaW5zcGVjdG9yVmlldy0+c2V0dGluZ3MoKTsKICAgICBld2tfc2V0
dGluZ3NfZmlsZV9hY2Nlc3NfZnJvbV9maWxlX3VybHNfYWxsb3dlZF9zZXQoc2V0dGluZ3MsIHRy
dWUpOwogCi0gICAgcmV0dXJuIGluc3BlY3RvclZpZXdJbXBsLT5wYWdlKCk7CisgICAgcmV0dXJu
IGluc3BlY3RvclZpZXctPnBhZ2UoKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxh
dGZvcm1PcGVuKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxv
ZwppbmRleCBlMmJhZmQwZjc2NDhiOTEzOGE2NzBlMWJlMjc2MmU1ODk3NWM0NzRiLi4xYjA4OTRi
NmZiNDJiZDlmZThlYjIxZmUxMWU4ZWFjMDc4ZjAxY2RiIDEwMDY0NAotLS0gYS9Ub29scy9DaGFu
Z2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTMtMDEtMjgg
IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuICA8a2VubmV0aEB3ZWJraXQub3JnPgorCisgICAg
ICAgIFtFRkxdW1dLMl0gSW50cm9kdWNlIGEgV2ViVmlldyBjbGFzcyBhcyBjb3VudGVycGFydCBm
b3IgV0tWaWV3UmVmCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMDc5MzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBDaGFuZ2UgcGxhdGZvcm1WaWV3IHRvIGJlIGEgV0tWaWV3IGFuZCB1c2UgV0tWaWV3R2V0
RXZhc09iamVjdAorICAgICAgICBmb3IgdGhlIHBsYWNlcyB3aGVyZSBhbiBFdmFzX09iamVjdCBp
cyBuZWVkZWQuCisKKyAgICAgICAgSW5zdGVhZCBvZiBleHRyYWN0aW5nIHRoZSBFY29yZV9FdmFz
KiBmcm9tIHRoZSBtX3ZpZXcgd2UgdXNlCisgICAgICAgIHRoZSBtX3dpbmRvdyBpbnN0ZWFkLCB3
aGljaCBhY3R1YWxseSBob2xkcyB0aGUgaXQuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Bs
YXRmb3JtV2ViVmlldy5oOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvZWZsL1BsYXRmb3JtV2Vi
Vmlldy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQbGF0Zm9ybVdlYlZpZXc6OlBsYXRm
b3JtV2ViVmlldyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQbGF0Zm9ybVdlYlZpZXc6On5Q
bGF0Zm9ybVdlYlZpZXcpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGxhdGZvcm1XZWJWaWV3
OjpyZXNpemVUbyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQbGF0Zm9ybVdlYlZpZXc6OnBh
Z2UpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGxhdGZvcm1XZWJWaWV3OjpzaW11bGF0ZVNw
YWNlYmFyS2V5UHJlc3MpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGxhdGZvcm1XZWJWaWV3
OjpzaW11bGF0ZU1vdXNlTW92ZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQbGF0Zm9ybVdl
YlZpZXc6OnNpbXVsYXRlUmlnaHRDbGljayk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9Q
bGF0Zm9ybVdlYlZpZXcuaDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2VmbC9FdmVudFNl
bmRlclByb3h5RWZsLmNwcDoKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6c2VuZFRv
dWNoRXZlbnQpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5OjpzZXRUb3VjaE1vZGlm
aWVyKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2VmbC9QbGF0Zm9ybVdlYlZpZXdFZmwu
Y3BwOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6OlBsYXRmb3JtV2ViVmlldyk6Cisg
ICAgICAgIChXVFI6OlBsYXRmb3JtV2ViVmlldzo6flBsYXRmb3JtV2ViVmlldyk6CisgICAgICAg
IChXVFI6OlBsYXRmb3JtV2ViVmlldzo6cmVzaXplVG8pOgorICAgICAgICAoV1RSOjpQbGF0Zm9y
bVdlYlZpZXc6OnBhZ2UpOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6OmZvY3VzKToK
KyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3Ojp3aW5kb3dGcmFtZSk6CisgICAgICAgIChX
VFI6OlBsYXRmb3JtV2ViVmlldzo6c2V0V2luZG93RnJhbWUpOgorICAgICAgICAoV1RSOjpQbGF0
Zm9ybVdlYlZpZXc6OndpbmRvd1NuYXBzaG90SW1hZ2UpOgorCiAyMDEzLTAxLTI4ICBSYXBoYWVs
IEt1Ym8gZGEgQ29zdGEgIDxyYXBoYWVsLmt1Ym8uZGEuY29zdGFAaW50ZWwuY29tPgogCiAgICAg
ICAgIFtFRkxdIEluY2x1ZGUgRWNvcmVfR2V0b3B0LmggaW4gTWluaUJyb3dzZXIuCmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2ViVmlldy5oIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9QbGF0Zm9ybVdlYlZpZXcuaAppbmRleCA1YWQxZWVkMGUxZjFlMmIxMWQyYjlhY2Mw
NmUzOGQ0OThmMjNiNWRjLi5kY2FmNDQ4NDJkNmVmZTc5NGZhNGI3YzFhMjg3YzBkMWE4NTQzMjNi
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2ViVmlldy5oCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XZWJWaWV3LmgKQEAgLTQ3LDEzICs0Nyw4IEBA
IHR5cGVkZWYgSFdORCBQbGF0Zm9ybVdpbmRvdzsKIHR5cGVkZWYgV0tWaWV3UmVmIFBsYXRmb3Jt
V0tWaWV3OwogdHlwZWRlZiBHdGtXaWRnZXQgKlBsYXRmb3JtV2luZG93OwogI2VsaWYgUExBVEZP
Uk0oRUZMKQotI2lmIFVTRShFTykKLXR5cGVkZWYgc3RydWN0IF9FbyBFdmFzX09iamVjdDsKLSNl
bHNlCi10eXBlZGVmIHN0cnVjdCBfRXZhc19PYmplY3QgRXZhc19PYmplY3Q7Ci0jZW5kaWYKIHR5
cGVkZWYgc3RydWN0IF9FY29yZV9FdmFzIEVjb3JlX0V2YXM7Ci10eXBlZGVmIEV2YXNfT2JqZWN0
KiBQbGF0Zm9ybVdLVmlldzsKK3R5cGVkZWYgV0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlw
ZWRlZiBFY29yZV9FdmFzKiBQbGF0Zm9ybVdpbmRvdzsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL2VmbC9QbGF0Zm9ybVdlYlZpZXcuY3BwIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9lZmwvUGxhdGZvcm1XZWJWaWV3LmNwcAppbmRleCBkNTQ0OWViNGQxOTM2MTdhYjBh
NGNiYTZlZDY2MWVkZDNiMDUzODI0Li5iODJhNzA3YjI4OTk3ODEzM2QzOGE4MjZhMjA5MTc5YWFm
ODI4MmUyIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2VmbC9QbGF0Zm9ybVdlYlZp
ZXcuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZWZsL1BsYXRmb3JtV2ViVmlldy5jcHAK
QEAgLTY1LDMzICs2NSwzMyBAQCBQbGF0Zm9ybVdlYlZpZXc6OlBsYXRmb3JtV2ViVmlldyhXS0Nv
bnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdybwogewogICAgIG1fd2lu
ZG93ID0gaW5pdEVjb3JlRXZhcygpOwogICAgIEV2YXMqIGV2YXMgPSBlY29yZV9ldmFzX2dldCht
X3dpbmRvdyk7Ci0gICAgbV92aWV3ID0gdG9JbXBsKFdLVmlld0NyZWF0ZShldmFzLCBjb250ZXh0
UmVmLCBwYWdlR3JvdXBSZWYpKTsKLSAgICBld2tfdmlld190aGVtZV9zZXQobV92aWV3LCBUSEVN
RV9ESVIiL2RlZmF1bHQuZWRqIik7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRk
KG1fdmlldywgIndlYnByb2Nlc3MsY3Jhc2hlZCIsIG9uV2ViUHJvY2Vzc0NyYXNoZWQsIDApOwor
ICAgIG1fdmlldyA9IFdLVmlld0NyZWF0ZShldmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYp
OworICAgIGV3a192aWV3X3RoZW1lX3NldChXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIFRI
RU1FX0RJUiIvZGVmYXVsdC5lZGoiKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19h
ZGQoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCAid2VicHJvY2VzcyxjcmFzaGVkIiwgb25X
ZWJQcm9jZXNzQ3Jhc2hlZCwgMCk7CiAgICAgcmVzaXplVG8oNjAwLCA4MDApOwogfQogCiBQbGF0
Zm9ybVdlYlZpZXc6On5QbGF0Zm9ybVdlYlZpZXcoKQogewotICAgIGV2YXNfb2JqZWN0X2RlbCht
X3ZpZXcpOworICAgIGV2YXNfb2JqZWN0X2RlbChXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldykp
OwogICAgIGVjb3JlX2V2YXNfZnJlZShtX3dpbmRvdyk7CiAgICAgZWNvcmVfZXZhc19zaHV0ZG93
bigpOwogfQogCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6cmVzaXplVG8odW5zaWduZWQgd2lkdGgs
IHVuc2lnbmVkIGhlaWdodCkKIHsKLSAgICBldmFzX29iamVjdF9yZXNpemUobV92aWV3LCB3aWR0
aCwgaGVpZ2h0KTsKKyAgICBldmFzX29iamVjdF9yZXNpemUoV0tWaWV3R2V0RXZhc09iamVjdCht
X3ZpZXcpLCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogV0tQYWdlUmVmIFBsYXRmb3JtV2ViVmlldzo6
cGFnZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdLVmlld0dldFBhZ2UodG9BUEkobV92aWV3KSk7
CisgICAgcmV0dXJuIFdLVmlld0dldFBhZ2UobV92aWV3KTsKIH0KIAogdm9pZCBQbGF0Zm9ybVdl
YlZpZXc6OnNpbXVsYXRlU3BhY2ViYXJLZXlQcmVzcygpCiB7CiAgICAgRXZhcyogZXZhcyA9IGVj
b3JlX2V2YXNfZ2V0KG1fd2luZG93KTsKLSAgICBldmFzX29iamVjdF9mb2N1c19zZXQobV92aWV3
LCB0cnVlKTsKKyAgICBldmFzX29iamVjdF9mb2N1c19zZXQoV0tWaWV3R2V0RXZhc09iamVjdCht
X3ZpZXcpLCB0cnVlKTsKICAgICBldmFzX2V2ZW50X2ZlZWRfa2V5X2Rvd24oZXZhcywgInNwYWNl
IiwgInNwYWNlIiwgIiAiLCAwLCAwLCAwKTsKICAgICBldmFzX2V2ZW50X2ZlZWRfa2V5X3VwKGV2
YXMsICJzcGFjZSIsICJzcGFjZSIsICIgIiwgMCwgMSwgMCk7CiB9CkBAIC05OSwxNCArOTksMTQg
QEAgdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnNpbXVsYXRlU3BhY2ViYXJLZXlQcmVzcygpCiB2b2lk
IFBsYXRmb3JtV2ViVmlldzo6c2ltdWxhdGVNb3VzZU1vdmUodW5zaWduZWQgeCwgdW5zaWduZWQg
eSkKIHsKICAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwotICAgIGV2
YXNfb2JqZWN0X3Nob3cobV92aWV3KTsKKyAgICBldmFzX29iamVjdF9zaG93KFdLVmlld0dldEV2
YXNPYmplY3QobV92aWV3KSk7CiAgICAgZXZhc19ldmVudF9mZWVkX21vdXNlX21vdmUoZXZhcywg
eCwgeSwgMCwgMCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpzaW11bGF0ZVJpZ2h0Q2xp
Y2sodW5zaWduZWQgeCwgdW5zaWduZWQgeSkKIHsKICAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZh
c19nZXQobV93aW5kb3cpOwotICAgIGV2YXNfb2JqZWN0X3Nob3cobV92aWV3KTsKKyAgICBldmFz
X29iamVjdF9zaG93KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSk7CiAgICAgZXZhc19ldmVu
dF9mZWVkX21vdXNlX21vdmUoZXZhcywgeCwgeSwgMCwgMCk7CiAgICAgZXZhc19ldmVudF9mZWVk
X21vdXNlX2Rvd24oZXZhcywgMywgRVZBU19CVVRUT05fTk9ORSwgMCwgMCk7CiAgICAgZXZhc19l
dmVudF9mZWVkX21vdXNlX3VwKGV2YXMsIDMsIEVWQVNfQlVUVE9OX05PTkUsIDAsIDApOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaCBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgKaW5kZXggOGY5ZGNkYjdlZTNhYWYz
ODI3NmI2NjAzMDA4YmQxZGJjODc4OTNjNi4uNTFjNGJjYzIzNTY1NWM3Y2JjMTVmYmQ5YWJjOGRh
YWM3ZDFmZjkzNCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdl
YlZpZXcuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCkBA
IC01NCwxMyArNTQsOCBAQCB0eXBlZGVmIHN0cnVjdCBfR3RrV2lkZ2V0IEd0a1dpZGdldDsKIHR5
cGVkZWYgV0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlwZWRlZiBHdGtXaWRnZXQqIFBsYXRm
b3JtV2luZG93OwogI2VsaWYgUExBVEZPUk0oRUZMKQotI2lmIFVTRShFTykKLXR5cGVkZWYgc3Ry
dWN0IF9FbyBFdmFzX09iamVjdDsKLSNlbHNlCi10eXBlZGVmIHN0cnVjdCBfRXZhc19PYmplY3Qg
RXZhc19PYmplY3Q7Ci0jZW5kaWYKIHR5cGVkZWYgc3RydWN0IF9FY29yZV9FdmFzIEVjb3JlX0V2
YXM7Ci10eXBlZGVmIEV2YXNfT2JqZWN0KiBQbGF0Zm9ybVdLVmlldzsKK3R5cGVkZWYgV0tWaWV3
UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlwZWRlZiBFY29yZV9FdmFzKiBQbGF0Zm9ybVdpbmRvdzsK
ICNlbmRpZgogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9FdmVudFNl
bmRlclByb3h5RWZsLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVy
UHJveHlFZmwuY3BwCmluZGV4IGYyODI5YTk2YzkyOGEyZjkzOTdlNTZjOWI3OTY1ZWYwNTEwNzJl
OTkuLjEzOTIwZWMwNmI5MDViMjhiNTAxMDY2MzE5NmNiMjViNTBlMzgxYTUgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwCisrKyBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwCkBAIC00
MzgsNyArNDM4LDcgQEAgdm9pZCBFdmVudFNlbmRlclByb3h5OjpzZW5kVG91Y2hFdmVudChFd2tf
VG91Y2hfRXZlbnRfVHlwZSBldmVudFR5cGUpCiB7CiAgICAgQVNTRVJUKG1fdG91Y2hQb2ludHMp
OwogCi0gICAgRXZhc19PYmplY3QqIGV3a1ZpZXcgPSBtX3Rlc3RDb250cm9sbGVyLT5tYWluV2Vi
VmlldygpLT5wbGF0Zm9ybVZpZXcoKTsKKyAgICBFdmFzX09iamVjdCogZXdrVmlldyA9IFdLVmll
d0dldEV2YXNPYmplY3QobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1W
aWV3KCkpOwogICAgIGV3a192aWV3X2ZlZWRfdG91Y2hfZXZlbnQoZXdrVmlldywgZXZlbnRUeXBl
LCBtX3RvdWNoUG9pbnRzLCBldmFzX2tleV9tb2RpZmllcl9nZXQoZXZhc19vYmplY3RfZXZhc19n
ZXQoZXdrVmlldykpKTsKIAogICAgIEVpbmFfTGlzdCogbGlzdDsKQEAgLTQ5MCwxMiArNDkwLDE0
IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6dXBkYXRlVG91Y2hQb2ludChpbnQgaW5kZXgsIGlu
dCB4LCBpbnQgeSkKIAogdm9pZCBFdmVudFNlbmRlclByb3h5OjpzZXRUb3VjaE1vZGlmaWVyKFdL
RXZlbnRNb2RpZmllcnMgbW9kaWZpZXIsIGJvb2wgZW5hYmxlKQogeworICAgIEV2YXNfT2JqZWN0
KiBld2tWaWV3ID0gV0tWaWV3R2V0RXZhc09iamVjdChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2Vi
VmlldygpLT5wbGF0Zm9ybVZpZXcoKSk7CisKICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsg
aW5kZXggPCAoc2l6ZW9mKG1vZGlmaWVyTmFtZXMpIC8gc2l6ZW9mKGNoYXIqKSk7ICsraW5kZXgp
IHsKICAgICAgICAgaWYgKG1vZGlmaWVyICYgKDEgPDwgaW5kZXgpKSB7CiAgICAgICAgICAgICBp
ZiAoZW5hYmxlKQotICAgICAgICAgICAgICAgIGV2YXNfa2V5X21vZGlmaWVyX29uKGV2YXNfb2Jq
ZWN0X2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmll
dygpKSwgbW9kaWZpZXJOYW1lc1tpbmRleF0pOworICAgICAgICAgICAgICAgIGV2YXNfa2V5X21v
ZGlmaWVyX29uKGV2YXNfb2JqZWN0X2V2YXNfZ2V0KGV3a1ZpZXcpLCBtb2RpZmllck5hbWVzW2lu
ZGV4XSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZXZhc19rZXlfbW9kaWZp
ZXJfb2ZmKGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3
KCktPnBsYXRmb3JtVmlldygpKSwgbW9kaWZpZXJOYW1lc1tpbmRleF0pOworICAgICAgICAgICAg
ICAgIGV2YXNfa2V5X21vZGlmaWVyX29mZihldmFzX29iamVjdF9ldmFzX2dldChld2tWaWV3KSwg
bW9kaWZpZXJOYW1lc1tpbmRleF0pOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNwcCBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5jcHAKaW5kZXggMWNjYzBi
ZGFiZTlhYWI4N2NlYWViYjg3OGE2YjQ0M2EwZWY2MWMxNS4uNzRmZTUyM2M2MTEwMmVmN2M5MDg4
Nzc2NTVlYTgzM2FiZTA4Zjk3MiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9l
ZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2Vm
bC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3BwCkBAIC02MSw1NiArNjEsNTUgQEAgUGxhdGZvcm1XZWJW
aWV3OjpQbGF0Zm9ybVdlYlZpZXcoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLUGFnZUdyb3VwUmVm
IHBhZ2VHcm91cCwKICAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwog
CiAgICAgaWYgKG1fdXNpbmdGaXhlZExheW91dCkgewotICAgICAgICBtX3ZpZXcgPSB0b0ltcGwo
V0tWaWV3Q3JlYXRlV2l0aEZpeGVkTGF5b3V0KGV2YXMsIGNvbnRleHQsIHBhZ2VHcm91cCkpOwot
ICAgICAgICBldmFzX29iamVjdF9yZXNpemUobV92aWV3LCA4MDAsIDYwMCk7CisgICAgICAgIG1f
dmlldyA9IFdLVmlld0NyZWF0ZVdpdGhGaXhlZExheW91dChldmFzLCBjb250ZXh0LCBwYWdlR3Jv
dXApOworICAgICAgICBldmFzX29iamVjdF9yZXNpemUoV0tWaWV3R2V0RXZhc09iamVjdChtX3Zp
ZXcpLCA4MDAsIDYwMCk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1fdmlldyA9IHRvSW1wbChXS1Zp
ZXdDcmVhdGUoZXZhcywgY29udGV4dCwgcGFnZUdyb3VwKSk7CisgICAgICAgIG1fdmlldyA9IFdL
Vmlld0NyZWF0ZShldmFzLCBjb250ZXh0LCBwYWdlR3JvdXApOwogCi0gICAgZXdrX3ZpZXdfdGhl
bWVfc2V0KG1fdmlldywgVEhFTUVfRElSIi9kZWZhdWx0LmVkaiIpOworICAgIGV3a192aWV3X3Ro
ZW1lX3NldChXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIFRIRU1FX0RJUiIvZGVmYXVsdC5l
ZGoiKTsKICAgICBtX3dpbmRvd0lzS2V5ID0gZmFsc2U7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyht
X3ZpZXcpOworICAgIGV2YXNfb2JqZWN0X3Nob3coV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcp
KTsKIH0KIAogUGxhdGZvcm1XZWJWaWV3Ojp+UGxhdGZvcm1XZWJWaWV3KCkKIHsKLSAgICBldmFz
X29iamVjdF9kZWwobV92aWV3KTsKKyAgICAvLyBGSVhNRTogVGhlIEMgV0tWaWV3IEFQSSBjdXJy
ZW50bHkgY3JlYXRlcyB0aGUgRXZhc19PYmplY3QsIHNvIHdlIGhhdmUgdG8gZGVzdHJ1Y3QgaXQK
KyAgICAvLyAoYW5kIGl0cyBkZXBlbmRlbmNpZXMgRXdrVmlldyBhbmQgV2ViS2l0OjpXZWJWaWV3
KSB0aGlzIHdheSwgdW50aWwgdGhpcyBnZXQgZml4ZWQuCisgICAgZXZhc19vYmplY3RfZGVsKFdL
Vmlld0dldEV2YXNPYmplY3QobV92aWV3KSk7CiAgICAgZWNvcmVfZXZhc19mcmVlKG1fd2luZG93
KTsKIH0KIAogdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnJlc2l6ZVRvKHVuc2lnbmVkIHdpZHRoLCB1
bnNpZ25lZCBoZWlnaHQpCiB7Ci0gICAgZXZhc19vYmplY3RfcmVzaXplKG1fdmlldywgd2lkdGgs
IGhlaWdodCk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKFdLVmlld0dldEV2YXNPYmplY3QobV92
aWV3KSwgd2lkdGgsIGhlaWdodCk7CiB9CiAKIFdLUGFnZVJlZiBQbGF0Zm9ybVdlYlZpZXc6OnBh
Z2UoKQogewotICAgIHJldHVybiBXS1ZpZXdHZXRQYWdlKHRvQVBJKG1fdmlldykpOworICAgIHJl
dHVybiBXS1ZpZXdHZXRQYWdlKG1fdmlldyk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3Ojpm
b2N1cygpCiB7CisgICAgRXZhc19PYmplY3QqIGV2YXNPYmplY3QgPSBXS1ZpZXdHZXRFdmFzT2Jq
ZWN0KG1fdmlldyk7CiAgICAgLy8gSW4gYSBmZXcgY2FzZXMsIGFuIGlmcmFtZSBtaWdodCByZWNl
aXZlIGZvY3VzIGZyb20gSmF2YVNjcmlwdCBhbmQgRXZhcyBpcyBub3QgYXdhcmUgb2YgaXQgYXQg
YWxsCiAgICAgLy8gKFdlYkNvcmVTdXBwb3J0Ojpmb2N1c2VkRnJhbWVDaGFuZ2VkKCkgZG9lcyBu
b3QgZW1pdCBhbnkgbm90aWZpY2F0aW9uKS4gV2UgdGhlbiBtYW51YWxseSByZW1vdmUgdGhlCiAg
ICAgLy8gZm9jdXMgZnJvbSB0aGUgdmlldyB0byBtYWtlIHRoZSBjYWxsIGdpdmUgZm9jdXMgdG8g
ZXZhc19vYmplY3RfZm9jdXNfc2V0KC4uLiwgdHJ1ZSkgdG8gYmUgZWZmZWN0ZnVsLgotICAgIGlm
IChXS1BhZ2VHZXRGb2N1c2VkRnJhbWUocGFnZSgpKSAhPSBXS1BhZ2VHZXRNYWluRnJhbWUocGFn
ZSgpKSkKLSAgICAgICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KG1fdmlldywgZmFsc2UpOwotICAg
IGV2YXNfb2JqZWN0X2ZvY3VzX3NldChtX3ZpZXcsIHRydWUpOworICAgIGV2YXNfb2JqZWN0X2Zv
Y3VzX3NldChXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIFdLUGFnZUdldEZvY3VzZWRGcmFt
ZShwYWdlKCkpID09IFdLUGFnZUdldE1haW5GcmFtZShwYWdlKCkpKTsKIH0KIAogV0tSZWN0IFBs
YXRmb3JtV2ViVmlldzo6d2luZG93RnJhbWUoKQogewogICAgIGludCB4LCB5LCB3aWR0aCwgaGVp
Z2h0OwogCi0gICAgRWNvcmVfRXZhcyogZWUgPSBlY29yZV9ldmFzX2Vjb3JlX2V2YXNfZ2V0KGV2
YXNfb2JqZWN0X2V2YXNfZ2V0KG1fdmlldykpOwotICAgIGVjb3JlX2V2YXNfcmVxdWVzdF9nZW9t
ZXRyeV9nZXQoZWUsICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0KTsKKyAgICBlY29yZV9ldmFzX3Jl
cXVlc3RfZ2VvbWV0cnlfZ2V0KG1fd2luZG93LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCk7CiAK
ICAgICByZXR1cm4gV0tSZWN0TWFrZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogdm9pZCBQ
bGF0Zm9ybVdlYlZpZXc6OnNldFdpbmRvd0ZyYW1lKFdLUmVjdCBmcmFtZSkKIHsKLSAgICBFY29y
ZV9FdmFzKiBlZSA9IGVjb3JlX2V2YXNfZWNvcmVfZXZhc19nZXQoZXZhc19vYmplY3RfZXZhc19n
ZXQobV92aWV3KSk7Ci0gICAgZWNvcmVfZXZhc19tb3ZlX3Jlc2l6ZShlZSwgZnJhbWUub3JpZ2lu
LngsIGZyYW1lLm9yaWdpbi55LCBmcmFtZS5zaXplLndpZHRoLCBmcmFtZS5zaXplLmhlaWdodCk7
CisgICAgZWNvcmVfZXZhc19tb3ZlX3Jlc2l6ZShtX3dpbmRvdywgZnJhbWUub3JpZ2luLngsIGZy
YW1lLm9yaWdpbi55LCBmcmFtZS5zaXplLndpZHRoLCBmcmFtZS5zaXplLmhlaWdodCk7CiB9CiAK
IHZvaWQgUGxhdGZvcm1XZWJWaWV3OjphZGRDaHJvbWVJbnB1dEZpZWxkKCkKQEAgLTEyNywxNSAr
MTI2LDEyIEBAIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjptYWtlV2ViVmlld0ZpcnN0UmVzcG9uZGVy
KCkKIAogV0tSZXRhaW5QdHI8V0tJbWFnZVJlZj4gUGxhdGZvcm1XZWJWaWV3Ojp3aW5kb3dTbmFw
c2hvdEltYWdlKCkKIHsKLSAgICBFY29yZV9FdmFzKiBlZSA9IGVjb3JlX2V2YXNfZWNvcmVfZXZh
c19nZXQoZXZhc19vYmplY3RfZXZhc19nZXQobV92aWV3KSk7Ci0gICAgQVNTRVJUKGVlKTsKLQog
ICAgIGludCB3aWR0aDsKICAgICBpbnQgaGVpZ2h0OwotICAgIGVjb3JlX2V2YXNfZ2VvbWV0cnlf
Z2V0KGVlLCAwLCAwLCAmd2lkdGgsICZoZWlnaHQpOworICAgIGVjb3JlX2V2YXNfZ2VvbWV0cnlf
Z2V0KG1fd2luZG93LCAwLCAwLCAmd2lkdGgsICZoZWlnaHQpOwogICAgIEFTU0VSVCh3aWR0aCA+
IDAgJiYgaGVpZ2h0ID4gMCk7CiAKLSAgICByZXR1cm4gYWRvcHRXSyhXS1ZpZXdDcmVhdGVTbmFw
c2hvdCh0b0FQSShtX3ZpZXcpKSk7CisgICAgcmV0dXJuIGFkb3B0V0soV0tWaWV3Q3JlYXRlU25h
cHNob3QobV92aWV3KSk7CiB9CiAKIGJvb2wgUGxhdGZvcm1XZWJWaWV3Ojp2aWV3U3VwcG9ydHNP
cHRpb25zKFdLRGljdGlvbmFyeVJlZiBvcHRpb25zKSBjb25zdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184987</attachid>
            <date>2013-01-28 08:23:02 -0800</date>
            <delta_ts>2013-01-28 09:04:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107931-20130128171939.patch</filename>
            <type>text/plain</type>
            <size>36954</size>
            <attacher name="Kenneth Rohde Christiansen">kenneth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwOTYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOWI3ZDY2ZTQ5MmM5ZmU4
YzJjOTU1Y2MzNGJlY2NjOTYyNjVhNDk2NC4uOTY3ODk4Yzg2OTlmYzIwNzUyYWI2NWI1MDFhNTcw
OTRkMTdhNWY1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDExMyBAQAogMjAxMy0wMS0yOCAgS2Vu
bmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4gIDxrZW5uZXRoQHdlYmtpdC5vcmc+CiAKKyAgICAgICAg
W0VGTF1bV0syXSBJbnRyb2R1Y2UgYSBXZWJWaWV3IGNsYXNzIGFzIGNvdW50ZXJwYXJ0IGZvciBX
S1ZpZXdSZWYKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwNzkzMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgaXMganVzdCBvbmUgc3RlcCBvZiB0aGUgbmV3IHBsYW4gZm9yIHRoZSBFRkwgQVBJLgor
CisgICAgICAgIFRoZSBwbGFuIGlzIHRvIG1vdmUgdGhlIHB1YmxpYyBFRkwtbGlrZSBBUEkgb24g
dG9wIG9mIHRoZSBzaGFyZWQKKyAgICAgICAgV0syIEMgQVBJLCBwbHVzIGEgZmV3IEVGTCBleHRl
bnNpb25zIChXS1ZpZXcgY2xhc3MgbW9zdGx5KS4KKworICAgICAgICBUaGUgRUZMLWxpa2UgQVBJ
IGNhbiBiZSBzZWVuIGFzIGEgY29udmVuaWVuY2UgQVBJIHdoaWNoIHRpZXMKKyAgICAgICAgd2Vs
bCBpbnRvIEVGTCBhbmQgd2hpY2ggbWFrZXMgaXQgZWFzeSB0byBhZGQgd2ViIGV4cGVyaWVuY2Vz
CisgICAgICAgIHRvIGV4aXN0aW5nIGFuZCBuZXcgRUZMIGFwcGxpY2F0aW9ucy4gSXQgcHJvdmlk
ZXMgYSBzbWFydCBvYmplY3QKKyAgICAgICAgbGlrZSBBUEkgYW5kIGEgRXZhc19PYmplY3QgYmFz
ZWQgdmlldy4KKworICAgICAgICBGb3IgbW9yZSBhZHZhbmNlZCB1c2UgY2FzZXMsIHN1Y2ggYXMg
YnJvd3NlciBhbmQgcnVudGltZSwgaXQgaXMKKyAgICAgICAgcG9zc2libGUgdG8gdXNlIHRoZSBX
SyogQyBBUEksIHdoaWNoIGlzIGdpdmVzIG1vcmUgZmxleGliaWxpdHkKKyAgICAgICAgd2hpbGUg
YmVpbmcgbW9yZSBsb3cgbGV2ZWwuCisKKyAgICAgICAgVGhlIGlkZWEgaXMgdGhhdCB0aGUgV0tW
aWV3IGNsYXNzIHdpbGwgbm90IGRlcGVuZCBvbiBFdmFzX09iamVjdAorICAgICAgICBhbmQgWDEx
IChmdXR1cmUgcGxhbikgdW5saWtlIHRoZSBjdXJyZW50IEVGTC1saWtlIEFQSS4gVGhpcyBzaG91
bGQKKyAgICAgICAgbWFrZSBpdCBwb3NzaWJsZSB0byB1c2UgaXQgZm9yIGNhc2VzIHdoZXJlIG5v
bmUgb2YgdGhlc2UgYXJlCisgICAgICAgIGF2YWlsYWJsZS4KKworICAgICAgICBUaGlzIHBhdGNo
IGludHJvZHVjZXMgdGhlIFdlYlZpZXcgY2xhc3Mgd2hpY2ggc2VydmVzIGFzIG91cgorICAgICAg
ICBjb3VudGVycGFydCBmb3IgdGhlIFdLVmlldyBjbGFzcywgYW5kIGFkZHMgYSBmZXcgbmVlZGVk
IG1ldGhvZHMuCisKKyAgICAgICAgVGhlIEV3a1ZpZXcgb3ducyB0aGUgV2ViVmlldyBjbGFzcyAo
YW5kIHdpbGwgYmUgY29uc3RydWN0aW5nIGl0CisgICAgICAgIGluIHRoZSBuZWFyIGZ1dHVyZSB3
aGVuIHRoZSBFd2tWaWV3IGNsYXNzIGhhcyBiZWVuIGNoYW5nZWQgdG8KKyAgICAgICAgaGFuZGxl
IGFsbCBzbWFydCBvYmplY3QgcmVsYXRlZCBjb2RlKQorCisgICAgICAgIFRoZSBjbGVhbiB1cCBv
ZiB0aGUgc21hcnQgb2JqZWN0IHJlbGF0ZWQgY29kZSBhcyB0aGUgcHJvcGVyCisgICAgICAgIGNv
bnN0cnVjdGlvbiBvZiBFd2tWaWV3IGFuZCBXZWJWaWV3IHdpbGwgYmUgZG9uZSBpbiBmb2xsb3ct
dXAKKyAgICAgICAgcGF0Y2hlcy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9lZmwvV0tB
UElDYXN0RWZsLmg6CisgICAgICAgIChXZWJLaXQpOgorCisgICAgICAgICAgICBUaGUgV0tWaWV3
IEFQSSBpcyBub3QgYmFzZWQgb24gV2ViVmlldyBhbmQgbm90IEV2YXNfT2JqZWN0KgorCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwOgorICAgICAgICAoV0tWaWV3Q3Jl
YXRlKToKKyAgICAgICAgKFdLVmlld0NyZWF0ZVdpdGhGaXhlZExheW91dCk6CisgICAgICAgIChX
S1ZpZXdJbml0aWFsaXplKToKKyAgICAgICAgKFdLVmlld0dldFBhZ2UpOgorICAgICAgICAoV0tW
aWV3U2V0VGhlbWVQYXRoKToKKyAgICAgICAgKFdLVmlld1N1c3BlbmRBY3RpdmVET01PYmplY3Rz
QW5kQW5pbWF0aW9ucyk6CisgICAgICAgIChXS1ZpZXdSZXN1bWVBY3RpdmVET01PYmplY3RzQW5k
QW5pbWF0aW9ucyk6CisgICAgICAgIChXS1ZpZXdHZXRFdmFzT2JqZWN0KToKKyAgICAgICAgKFdL
Vmlld0NyZWF0ZVNuYXBzaG90KToKKworICAgICAgICAgICAgQWRkIGEgZmV3IG5ldyBXS1ZpZXcg
RUZMIEMgbWV0aG9kcywgYW5kIHVwZGF0ZSBleGlzdGluZworICAgICAgICAgICAgbWV0aG9kcyB0
byByZWZsZWN0IHRoYXQgdGhlIFdLVmlld1JlZiBpcyBub3cgYSBXZWJWaWV3KgorCisgICAgICAg
ICAgICBUaGUgY29uc3RydWN0aW9uIG1ldGhvZHMgd2lsbCBiZSByZXdyaXR0ZW4gd2hlbiB0aGUg
c21hcnQKKyAgICAgICAgICAgIG9iamVjdCBjb25zdHJ1Y3Rpb24gaGFzIGJlZW4gc29sdmVzLgor
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXc6OldlYlZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojp+V2Vi
Vmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmluaXRpYWxpemUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3OjpzZXRUaGVtZVBhdGgpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
OjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3OjpyZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyk6CisKKyAgICAg
ICAgICAgIEFkZCBhIG5ldyBXZWJLaXQ6OldlYlZpZXcgY2xhc3MgZm9yIEVGTC4KKworICAgICAg
ICAoRXdrVmlldzo6RXdrVmlldyk6CisgICAgICAgIChFd2tWaWV3Ojp+RXdrVmlldyk6CisgICAg
ICAgIChFd2tWaWV3Ojp3a1BhZ2UpOgorICAgICAgICAoRXdrVmlldzo6ZGV2aWNlU2NhbGVGYWN0
b3IpOgorICAgICAgICAoRXdrVmlldzo6dGl0bGUpOgorICAgICAgICAoRXdrVmlldzo6c2V0VGhl
bWVQYXRoKToKKyAgICAgICAgKEV3a1ZpZXc6OmN1c3RvbVRleHRFbmNvZGluZ05hbWUpOgorICAg
ICAgICAoRXdrVmlldzo6c2V0Q3VzdG9tVGV4dEVuY29kaW5nTmFtZSk6CisgICAgICAgIChFd2tW
aWV3OjpjcmVhdGVHTFN1cmZhY2UpOgorICAgICAgICAoRXdrVmlldzo6aW5mb3JtVVJMQ2hhbmdl
KToKKyAgICAgICAgKEV3a1ZpZXc6OnRha2VTbmFwc2hvdCk6CisKKyAgICAgICAgICAgIEJhc2Ug
bWV0aG9kcyBvbiBDIEFQSSBpbnN0ZWFkIG9mIGludGVybmFsIEFQSSBhcyBtdWNoCisgICAgICAg
ICAgICBhcyBjdXJyZW50bHkgcG9zc2libGUuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2Vm
bC9Fd2tWaWV3Lmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViVmlldyk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlZpZXc6OnBhZ2VSZWYpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3
OjpldmFzT2JqZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6cGFnZSk6CisgICAgICAg
IChFd2tWaWV3KToKKyAgICAgICAgKEV3a1ZpZXc6OndrVmlldyk6CisgICAgICAgIChFd2tWaWV3
OjpwYWdlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHA6CisgICAg
ICAgIChjcmVhdGVFd2tWaWV3KToKKyAgICAgICAgKGV3a192aWV3X2Jhc2VfYWRkKToKKyAgICAg
ICAgKGV3a192aWV3X3NtYXJ0X2FkZCk6CisKKyAgICAgICAgICAgIE1vZGlmeSB0byByZXR1cm4g
dGhlIEV3a1ZpZXcgY2xhc3MgZm9yIG5vdy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a192aWV3X3ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1dlYkluc3BlY3Rv
clByb3h5RWZsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtQ3JlYXRlSW5zcGVjdG9yUGFnZSk6CisKKyAgICAgICAgICAgIFVwZGF0ZWQgZHVlIHRvIGNo
YW5nZWQgQVBJLgorCisyMDEzLTAxLTI4ICBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtl
bm5ldGhAd2Via2l0Lm9yZz4KKwogICAgICAgICBbRUZMXVtXSzJdIFVzZSBDIEFQSSBpbnNpZGUg
ZXdrX3VybF9yZXNwb25zZQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTA3ODI2CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9lZmwvV0tBUElDYXN0RWZsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mv
ZWZsL1dLQVBJQ2FzdEVmbC5oCmluZGV4IGIwMTNhMGE2MGRmZjAzMjhjZjJmOWU1YjExNjE4NjAy
MzVlNzZmMGEuLjE4ODlmYzQzNjc1NWY5MWE4MmYzYTMwM2ZhZTViYTUzZDdmNjJkZTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tBUElDYXN0RWZsLmgK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS0FQSUNhc3RFZmwuaApA
QCAtMjQsMTUgKzI0LDExIEBACiAjZXJyb3IgIlBsZWFzZSAjaW5jbHVkZSBcIldLQVBJQ2FzdC5o
XCIgaW5zdGVhZCBvZiB0aGlzIGZpbGUgZGlyZWN0bHkuIgogI2VuZGlmCiAKLSNpZiBVU0UoRU8p
Ci10eXBlZGVmIHN0cnVjdCBfRW8gRXZhc19PYmplY3Q7Ci0jZWxzZQotdHlwZWRlZiBzdHJ1Y3Qg
X0V2YXNfT2JqZWN0IEV2YXNfT2JqZWN0OwotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJLaXQgewog
Ci1XS19BRERfQVBJX01BUFBJTkcoV0tWaWV3UmVmLCBFdmFzX09iamVjdCkKK2NsYXNzIFdlYlZp
ZXc7CisKK1dLX0FERF9BUElfTUFQUElORyhXS1ZpZXdSZWYsIFdlYlZpZXcpCiAKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwCmluZGV4IDMyYjlk
OGY2MzczNWJiZmZlMjZlZjY5MDkxMWEwMDFjNjI2YjBmMTAuLmUzNzJmOWE1OTVhY2EwNWI4NjQy
NWZmOWFkNGE5NjBlNDdjNTE0NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9lZmwvV0tWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0MvZWZsL1dLVmlldy5jcHAKQEAgLTI5LDI0ICsyOSw1MCBAQCB1c2luZyBuYW1lc3BhY2UgV2Vi
S2l0OwogCiBXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlKEV2YXMqIGNhbnZhcywgV0tDb250ZXh0UmVm
IGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZikKIHsKLSAgICByZXR1cm4g
dG9BUEkoZXdrX3ZpZXdfYmFzZV9hZGQoY2FudmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYs
IEV3a1ZpZXc6OkxlZ2FjeUJlaGF2aW9yKSk7CisgICAgV0tWaWV3UmVmIHZpZXdSZWYgPSBld2tf
dmlld19iYXNlX2FkZChjYW52YXMsIGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZiwgRXdrVmlldzo6
TGVnYWN5QmVoYXZpb3IpLT53a1ZpZXcoKTsKKyAgICAvLyBSZXRhaW4gYXMgdGhlIGNvbnRyYWN0
IHdpdGggKkNyZWF0ZSBmdW5jdGlvbnMgaXMgdGhhdCByZXR1cm5lZCBvYmplY3RzIG11Y2ggdG8g
YmUgcmVsZWFzZWQgYWZ0ZXIgdXNlLgorICAgIHJldHVybiBzdGF0aWNfY2FzdDxXS1ZpZXdSZWY+
KFdLUmV0YWluKHZpZXdSZWYpKTsKIH0KIAogV0tWaWV3UmVmIFdLVmlld0NyZWF0ZVdpdGhGaXhl
ZExheW91dChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91
cFJlZiBwYWdlR3JvdXBSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKGV3a192aWV3X2Jhc2VfYWRk
KGNhbnZhcywgY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpEZWZhdWx0QmVoYXZp
b3IpKTsKKyAgICBXS1ZpZXdSZWYgdmlld1JlZiA9IGV3a192aWV3X2Jhc2VfYWRkKGNhbnZhcywg
Y29udGV4dFJlZiwgcGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpEZWZhdWx0QmVoYXZpb3IpLT53a1Zp
ZXcoKTsKKyAgICAvLyBSZXRhaW4gYXMgdGhlIGNvbnRyYWN0IHdpdGggKkNyZWF0ZSBmdW5jdGlv
bnMgaXMgdGhhdCByZXR1cm5lZCBvYmplY3RzIG11Y2ggdG8gYmUgcmVsZWFzZWQgYWZ0ZXIgdXNl
LgorICAgIHJldHVybiBzdGF0aWNfY2FzdDxXS1ZpZXdSZWY+KFdLUmV0YWluKHZpZXdSZWYpKTsK
K30KKwordm9pZCBXS1ZpZXdJbml0aWFsaXplKFdLVmlld1JlZiB2aWV3UmVmKQoreworICAgIHRv
SW1wbCh2aWV3UmVmKS0+aW5pdGlhbGl6ZSgpOwogfQogCiBXS1BhZ2VSZWYgV0tWaWV3R2V0UGFn
ZShXS1ZpZXdSZWYgdmlld1JlZikKIHsKLSAgICBFd2tWaWV3KiB2aWV3ID0gRXdrVmlldzo6ZnJv
bUV2YXNPYmplY3QodG9JbXBsKHZpZXdSZWYpKTsKKyAgICByZXR1cm4gdG9JbXBsKHZpZXdSZWYp
LT5wYWdlUmVmKCk7Cit9CiAKLSAgICByZXR1cm4gdmlldy0+d2tQYWdlKCk7Cit2b2lkIFdLVmll
d1NldFRoZW1lUGF0aChXS1ZpZXdSZWYgdmlld1JlZiwgV0tTdHJpbmdSZWYgdGhlbWUpCit7Cisg
ICAgdG9JbXBsKHZpZXdSZWYpLT5zZXRUaGVtZVBhdGgodGhlbWUpOwogfQogCi1XS0ltYWdlUmVm
IFdLVmlld0NyZWF0ZVNuYXBzaG90KFdLVmlld1JlZiB2aWV3UmVmKQordm9pZCBXS1ZpZXdTdXNw
ZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoV0tWaWV3UmVmIHZpZXdSZWYpCiB7Ci0g
ICAgRXdrVmlldyogdmlldyA9IEV3a1ZpZXc6OmZyb21FdmFzT2JqZWN0KHRvSW1wbCh2aWV3UmVm
KSk7CisgICAgdG9JbXBsKHZpZXdSZWYpLT5zdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1h
dGlvbnMoKTsKK30KIAotICAgIHJldHVybiBXS0ltYWdlQ3JlYXRlRnJvbUNhaXJvU3VyZmFjZSh2
aWV3LT50YWtlU25hcHNob3QoKS5nZXQoKSwgMCAvKiBvcHRpb25zICovKTsKK3ZvaWQgV0tWaWV3
UmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoV0tWaWV3UmVmIHZpZXdSZWYpCit7
CisgICAgdG9JbXBsKHZpZXdSZWYpLT5yZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9u
cygpOworfQorCitFdmFzX09iamVjdCogV0tWaWV3R2V0RXZhc09iamVjdChXS1ZpZXdSZWYgdmll
d1JlZikKK3sKKyAgICByZXR1cm4gdG9JbXBsKHZpZXdSZWYpLT5ldmFzT2JqZWN0KCk7Cit9CisK
K1dLSW1hZ2VSZWYgV0tWaWV3Q3JlYXRlU25hcHNob3QoV0tWaWV3UmVmIHZpZXdSZWYpCit7Cisg
ICAgRXdrVmlldyogZXdrVmlldyA9IEV3a1ZpZXc6OmZyb21FdmFzT2JqZWN0KHRvSW1wbCh2aWV3
UmVmKS0+ZXZhc09iamVjdCgpKTsKKyAgICByZXR1cm4gV0tJbWFnZUNyZWF0ZUZyb21DYWlyb1N1
cmZhY2UoZXdrVmlldy0+dGFrZVNuYXBzaG90KCkuZ2V0KCksIDAgLyogb3B0aW9ucyAqLyk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaAppbmRleCBjYzcz
MDdjZjRjYjQ5MjYzNmU4YTgyY2FjMWEzYWYxMDVjOTE5ZmRlLi5kNWI0MzJkOGVhMTMxNTQyODdm
YThkNGE4N2M0OGI0MGI4ZDIyZjFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvZWZsL1dLVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy9lZmwvV0tWaWV3LmgKQEAgLTI0LDggKzI0LDEwIEBACiAKICNpZiBVU0UoRU8pCiB0eXBlZGVm
IHN0cnVjdCBfRW8gRXZhczsKK3R5cGVkZWYgc3RydWN0IF9FbyBFdmFzX09iamVjdDsKICNlbHNl
CiB0eXBlZGVmIHN0cnVjdCBfRXZhcyBFdmFzOwordHlwZWRlZiBzdHJ1Y3QgX0V2YXNfT2JqZWN0
IEV2YXNfT2JqZWN0OwogI2VuZGlmCiAKICNpZmRlZiBfX2NwbHVzcGx1cwpAQCAtMzYsOSArMzgs
MTkgQEAgV0tfRVhQT1JUIFdLVmlld1JlZiBXS1ZpZXdDcmVhdGUoRXZhcyogY2FudmFzLCBXS0Nv
bnRleHRSZWYgY29udGV4dCwgV0tQYWdlR3JvdXAKIAogV0tfRVhQT1JUIFdLVmlld1JlZiBXS1Zp
ZXdDcmVhdGVXaXRoRml4ZWRMYXlvdXQoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4
dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwKTsKIAotV0tfRVhQT1JUIFdLUGFnZVJlZiBXS1Zp
ZXdHZXRQYWdlKFdLVmlld1JlZiB2aWV3KTsKK1dLX0VYUE9SVCB2b2lkIFdLVmlld0luaXRpYWxp
emUoV0tWaWV3UmVmKTsKIAotV0tfRVhQT1JUIFdLSW1hZ2VSZWYgV0tWaWV3Q3JlYXRlU25hcHNo
b3QoV0tWaWV3UmVmIHZpZXdSZWYpOworV0tfRVhQT1JUIFdLUGFnZVJlZiBXS1ZpZXdHZXRQYWdl
KFdLVmlld1JlZik7CisKK1dLX0VYUE9SVCB2b2lkIFdLVmlld1NldFRoZW1lUGF0aChXS1ZpZXdS
ZWYsIFdLU3RyaW5nUmVmKTsKKworV0tfRVhQT1JUIHZvaWQgV0tWaWV3U3VzcGVuZEFjdGl2ZURP
TU9iamVjdHNBbmRBbmltYXRpb25zKFdLVmlld1JlZik7CitXS19FWFBPUlQgdm9pZCBXS1ZpZXdS
ZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyhXS1ZpZXdSZWYpOworCisvLyBGSVhN
RTogVGhlIGxvbmcgdGVybSBwbGFuIGlzIHRvIGdldCByaWQgb2YgdGhpcywgc28ga2VlcCB1c2Fn
ZSB0byBhIGJhcmUgbWluaW11bS4KK1dLX0VYUE9SVCBFdmFzX09iamVjdCogV0tWaWV3R2V0RXZh
c09iamVjdChXS1ZpZXdSZWYpOworCitXS19FWFBPUlQgV0tJbWFnZVJlZiBXS1ZpZXdDcmVhdGVT
bmFwc2hvdChXS1ZpZXdSZWYpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAKaW5kZXggMTMzYTE1ZjhkZGFmMDFj
ZDQxYWJmNTg0N2IzZjRlYTk4MGYzN2NlNS4uYTRkM2M5NzViMTg1OTEyMGE4ZmRiNmQxOTg5OGMz
ZDBhZDM4ODNhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
RXdrVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmll
dy5jcHAKQEAgLTM4LDcgKzM4LDkgQEAKICNpbmNsdWRlICJXS0RpY3Rpb25hcnkuaCIKICNpbmNs
dWRlICJXS0dlb21ldHJ5LmgiCiAjaW5jbHVkZSAiV0tOdW1iZXIuaCIKKyNpbmNsdWRlICJXS1Bh
Z2VHcm91cC5oIgogI2luY2x1ZGUgIldLU3RyaW5nLmgiCisjaW5jbHVkZSAiV0tWaWV3LmgiCiAj
aW5jbHVkZSAiV2ViQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkltYWdlLmgiCiAjaW5jbHVkZSAi
V2ViUGFnZUdyb3VwLmgiCkBAIC0xMTAsMTQgKzExMiw1NSBAQCBjb25zdCBFdmFzX09iamVjdCog
RXdrVmlldzo6dmlld0Zyb21QYWdlVmlld01hcChjb25zdCBXS1BhZ2VSZWYgcGFnZSkKICAgICBy
ZXR1cm4gcGFnZVZpZXdNYXAoKS5nZXQocGFnZSk7CiB9CiAKLUV3a1ZpZXc6OkV3a1ZpZXcoRXZh
c19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgUGFz
c1JlZlB0cjxXZWJQYWdlR3JvdXA+IHBhZ2VHcm91cCwgVmlld0JlaGF2aW9yIGJlaGF2aW9yKQot
ICAgIDogbV9ldmFzT2JqZWN0KGV2YXNPYmplY3QpCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2Vi
Vmlldzo6V2ViVmlldyhXZWJDb250ZXh0KiBjb250ZXh0LCBQYWdlQ2xpZW50KiBwYWdlQ2xpZW50
LCBXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCwgRXZhc19PYmplY3QqIGV2YXNPYmplY3QpCisgICAg
OiBtX3dlYlBhZ2VQcm94eShjb250ZXh0LT5jcmVhdGVXZWJQYWdlKHBhZ2VDbGllbnQsIHBhZ2VH
cm91cCkpCisgICAgLCBtX2V2YXNPYmplY3QoZXZhc09iamVjdCkKK3sKKyAgICBtX3dlYlBhZ2VQ
cm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdFbmFibGVkKHRydWUpOworICAgIG1fd2ViUGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVy
ZW5jZXMoKS0+c2V0Rm9yY2VDb21wb3NpdGluZ01vZGUodHJ1ZSk7CisKKyNpZiBFTkFCTEUoRlVM
TFNDUkVFTl9BUEkpCisgICAgbV93ZWJQYWdlUHJveHktPmZ1bGxTY3JlZW5NYW5hZ2VyKCktPnNl
dFdlYlZpZXcobV9ldmFzT2JqZWN0KTsKKyNlbmRpZgorfQorCitXZWJWaWV3Ojp+V2ViVmlldygp
Cit7CisgICAgbV93ZWJQYWdlUHJveHktPmNsb3NlKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6aW5p
dGlhbGl6ZSgpCit7CisgICAgbV93ZWJQYWdlUHJveHktPmluaXRpYWxpemVXZWJQYWdlKCk7Cit9
CisKK3ZvaWQgV2ViVmlldzo6c2V0VGhlbWVQYXRoKFdLU3RyaW5nUmVmIHRoZW1lKQoreworICAg
IG1fd2ViUGFnZVByb3h5LT5zZXRUaGVtZVBhdGgodG9XVEZTdHJpbmcodGhlbWUpLnV0ZjgoKS5k
YXRhKCkpOworfQorCit2b2lkIFdlYlZpZXc6OnN1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5p
bWF0aW9ucygpCit7CisgICAgbV93ZWJQYWdlUHJveHktPnN1c3BlbmRBY3RpdmVET01PYmplY3Rz
QW5kQW5pbWF0aW9ucygpOworfQorCit2b2lkIFdlYlZpZXc6OnJlc3VtZUFjdGl2ZURPTU9iamVj
dHNBbmRBbmltYXRpb25zKCkKK3sKKyAgICBtX3dlYlBhZ2VQcm94eS0+cmVzdW1lQWN0aXZlRE9N
T2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKK0V3
a1ZpZXc6OkV3a1ZpZXcoRXZhc19PYmplY3QqIHZpZXcsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4g
Y29udGV4dCwgV2ViUGFnZUdyb3VwKiBwYWdlR3JvdXAsIFZpZXdCZWhhdmlvciBiZWhhdmlvcikK
KyAgICA6IG1fZXZhc09iamVjdCh2aWV3KQogICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiAjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgICwgbV9wZW5kaW5nU3VyZmFjZVJlc2l6
ZShmYWxzZSkKICNlbmRpZgogICAgICwgbV9wYWdlQ2xpZW50KGJlaGF2aW9yID09IERlZmF1bHRC
ZWhhdmlvciA/IFBhZ2VDbGllbnREZWZhdWx0SW1wbDo6Y3JlYXRlKHRoaXMpIDogUGFnZUNsaWVu
dExlZ2FjeUltcGw6OmNyZWF0ZSh0aGlzKSkKLSAgICAsIG1fcGFnZVByb3h5KG1fY29udGV4dC0+
d2ViQ29udGV4dCgpLT5jcmVhdGVXZWJQYWdlKG1fcGFnZUNsaWVudC5nZXQoKSwgcGFnZUdyb3Vw
LmdldCgpKSkKKyAgICAsIG1fd2ViVmlldyhhZG9wdFJlZihuZXcgV2ViVmlldyhtX2NvbnRleHQt
PndlYkNvbnRleHQoKS5nZXQoKSwgbV9wYWdlQ2xpZW50LmdldCgpLCBwYWdlR3JvdXAsIHZpZXcp
KSkKICAgICAsIG1fcGFnZUxvYWRDbGllbnQoUGFnZUxvYWRDbGllbnRFZmw6OmNyZWF0ZSh0aGlz
KSkKICAgICAsIG1fcGFnZVBvbGljeUNsaWVudChQYWdlUG9saWN5Q2xpZW50RWZsOjpjcmVhdGUo
dGhpcykpCiAgICAgLCBtX3BhZ2VVSUNsaWVudChQYWdlVUlDbGllbnRFZmw6OmNyZWF0ZSh0aGlz
KSkKQEAgLTEyNyw3ICsxNzAsNyBAQCBFd2tWaWV3OjpFd2tWaWV3KEV2YXNfT2JqZWN0KiBldmFz
T2JqZWN0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFBhc3NSZQogI2lmIEVOQUJM
RShWSUJSQVRJT04pCiAgICAgLCBtX3ZpYnJhdGlvbkNsaWVudChWaWJyYXRpb25DbGllbnRFZmw6
OmNyZWF0ZSh0aGlzKSkKICNlbmRpZgotICAgICwgbV9iYWNrRm9yd2FyZExpc3QoRXdrQmFja0Zv
cndhcmRMaXN0OjpjcmVhdGUodG9BUEkobV9wYWdlUHJveHktPmJhY2tGb3J3YXJkTGlzdCgpKSkp
CisgICAgLCBtX2JhY2tGb3J3YXJkTGlzdChFd2tCYWNrRm9yd2FyZExpc3Q6OmNyZWF0ZShXS1Bh
Z2VHZXRCYWNrRm9yd2FyZExpc3Qod2tQYWdlKCkpKSkKICNpZiBVU0UoVElMRURfQkFDS0lOR19T
VE9SRSkKICAgICAsIG1fcGFnZVNjYWxlRmFjdG9yKDEpCiAjZW5kaWYKQEAgLTE0NCwyOSArMTg3
LDE4IEBAIEV3a1ZpZXc6OkV3a1ZpZXcoRXZhc19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQ
dHI8RXdrQ29udGV4dD4gY29udGV4dCwgUGFzc1JlCiB7CiAgICAgQVNTRVJUKG1fZXZhc09iamVj
dCk7CiAgICAgQVNTRVJUKG1fY29udGV4dCk7Ci0gICAgQVNTRVJUKG1fcGFnZVByb3h5KTsKIAot
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBtX3BhZ2VQcm94eS0+cGFnZUdyb3Vw
KCktPnByZWZlcmVuY2VzKCktPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKHRydWUp
OwotICAgIG1fcGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0Rm9yY2VD
b21wb3NpdGluZ01vZGUodHJ1ZSk7Ci0jaWYgRU5BQkxFKFdFQkdMKQotICAgIG1fcGFnZVByb3h5
LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0V2ViR0xFbmFibGVkKHRydWUpOwotI2Vu
ZGlmCi0gICAgaWYgKGJlaGF2aW9yID09IERlZmF1bHRCZWhhdmlvcikKLSAgICAgICAgbV9wYWdl
UHJveHktPnNldFVzZUZpeGVkTGF5b3V0KHRydWUpOwotI2VuZGlmCisgICAgV0tWaWV3SW5pdGlh
bGl6ZSh3a1ZpZXcoKSk7CiAKLSAgICBtX3BhZ2VQcm94eS0+aW5pdGlhbGl6ZVdlYlBhZ2UoKTsK
KyAgICBXS1BhZ2VTZXRVc2VGaXhlZExheW91dCh3a1BhZ2UoKSwgYmVoYXZpb3IgPT0gRGVmYXVs
dEJlaGF2aW9yKTsKIAotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICBtX3BhZ2VQcm94
eS0+ZnVsbFNjcmVlbk1hbmFnZXIoKS0+c2V0V2ViVmlldyhtX2V2YXNPYmplY3QpOwotICAgIG1f
cGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0RnVsbFNjcmVlbkVuYWJs
ZWQodHJ1ZSk7Ci0jZW5kaWYKLSNpZiBFTkFCTEUoV0VCX0FVRElPKQotICAgIG1fcGFnZVByb3h5
LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0V2ViQXVkaW9FbmFibGVkKHRydWUpOwot
I2VuZGlmCisgICAgV0tQYWdlR3JvdXBSZWYgd2tQYWdlR3JvdXAgPSBXS1BhZ2VHZXRQYWdlR3Jv
dXAod2tQYWdlKCkpOworICAgIFdLUHJlZmVyZW5jZXNSZWYgd2tQcmVmZXJlbmNlcyA9IFdLUGFn
ZUdyb3VwR2V0UHJlZmVyZW5jZXMod2tQYWdlR3JvdXApOwogCi0gICAgbV9wYWdlUHJveHktPnBh
Z2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVu
YWJsZWQodHJ1ZSk7CisgICAgV0tQcmVmZXJlbmNlc1NldFdlYkdMRW5hYmxlZCh3a1ByZWZlcmVu
Y2VzLCB0cnVlKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0RnVsbFNjcmVlbkVuYWJsZWQod2tQcmVm
ZXJlbmNlcywgdHJ1ZSk7CisgICAgV0tQcmVmZXJlbmNlc1NldFdlYkF1ZGlvRW5hYmxlZCh3a1By
ZWZlcmVuY2VzLCB0cnVlKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0T2ZmbGluZVdlYkFwcGxpY2F0
aW9uQ2FjaGVFbmFibGVkKHdrUHJlZmVyZW5jZXMsIHRydWUpOwogCiAgICAgLy8gRW5hYmxlIG1v
dXNlIGV2ZW50cyBieSBkZWZhdWx0CiAgICAgc2V0TW91c2VFdmVudHNFbmFibGVkKHRydWUpOwpA
QCAtMTgyLDggKzIxNCw2IEBAIEV3a1ZpZXc6OkV3a1ZpZXcoRXZhc19PYmplY3QqIGV2YXNPYmpl
Y3QsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgUGFzc1JlCiAKIEV3a1ZpZXc6On5F
d2tWaWV3KCkKIHsKLSAgICBtX3BhZ2VQcm94eS0+Y2xvc2UoKTsKLQogICAgIC8vIFVucmVnaXN0
ZXIgaWNvbiBjaGFuZ2UgY2FsbGJhY2suCiAgICAgRXdrRmF2aWNvbkRhdGFiYXNlKiBpY29uRGF0
YWJhc2UgPSBtX2NvbnRleHQtPmZhdmljb25EYXRhYmFzZSgpOwogICAgIEFTU0VSVChpY29uRGF0
YWJhc2UpOwpAQCAtMjExLDkgKzI0MSw5IEBAIEV3a1ZpZXcqIEV3a1ZpZXc6OmZyb21FdmFzT2Jq
ZWN0KGNvbnN0IEV2YXNfT2JqZWN0KiB2aWV3KQogICogQGludGVybmFsCiAgKiBSZXRyaWV2ZXMg
dGhlIGludGVybmFsIFdLUGFnZSBmb3IgdGhpcyB2aWV3LgogICovCi1XS1BhZ2VSZWYgRXdrVmll
dzo6d2tQYWdlKCkKK1dLUGFnZVJlZiBFd2tWaWV3Ojp3a1BhZ2UoKSBjb25zdAogewotICAgIHJl
dHVybiB0b0FQSShtX3BhZ2VQcm94eS5nZXQoKSk7CisgICAgcmV0dXJuIFdLVmlld0dldFBhZ2Uo
d2tWaWV3KCkpOwogfQogCiB2b2lkIEV3a1ZpZXc6OnNldEN1cnNvcihjb25zdCBDdXJzb3ImIGN1
cnNvcikKQEAgLTI5Nyw3ICszMjcsNyBAQCB2b2lkIEV3a1ZpZXc6OnNldERldmljZVNjYWxlRmFj
dG9yKGZsb2F0IHNjYWxlKQogCiBmbG9hdCBFd2tWaWV3OjpkZXZpY2VTY2FsZUZhY3RvcigpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1fcGFnZVByb3h5LT5kZXZpY2VTY2FsZUZhY3RvcigpOworICAg
IHJldHVybiBXS1BhZ2VHZXRCYWNraW5nU2NhbGVGYWN0b3Iod2tQYWdlKCkpOwogfQogCiBBZmZp
bmVUcmFuc2Zvcm0gRXdrVmlldzo6dHJhbnNmb3JtRnJvbVNjZW5lKCkgY29uc3QKQEAgLTUyMyw3
ICs1NTMsNyBAQCBib29sIEV3a1ZpZXc6OmlzVmlzaWJsZSgpIGNvbnN0CiAKIGNvbnN0IGNoYXIq
IEV3a1ZpZXc6OnRpdGxlKCkgY29uc3QKIHsKLSAgICBtX3RpdGxlID0gbV9wYWdlUHJveHktPnBh
Z2VUaXRsZSgpLnV0ZjgoKS5kYXRhKCk7CisgICAgbV90aXRsZSA9IFdLRWluYVNoYXJlZFN0cmlu
ZyhBZG9wdFdLLCBXS1BhZ2VDb3B5VGl0bGUod2tQYWdlKCkpKTsKIAogICAgIHJldHVybiBtX3Rp
dGxlOwogfQpAQCAtNTQ2LDI0ICs1NzYsMjYgQEAgdm9pZCBFd2tWaWV3OjpzZXRUaGVtZVBhdGgo
Y29uc3QgY2hhciogdGhlbWUpCiB7CiAgICAgaWYgKG1fdGhlbWUgIT0gdGhlbWUpIHsKICAgICAg
ICAgbV90aGVtZSA9IHRoZW1lOwotICAgICAgICBtX3BhZ2VQcm94eS0+c2V0VGhlbWVQYXRoKHRo
ZW1lKTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrVGhlbWUgPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHRoZW1lKSk7CisgICAgICAgIFdLVmlld1Nl
dFRoZW1lUGF0aCh3a1ZpZXcoKSwgd2tUaGVtZS5nZXQoKSk7CiAgICAgfQogfQogCiBjb25zdCBj
aGFyKiBFd2tWaWV3OjpjdXN0b21UZXh0RW5jb2RpbmdOYW1lKCkgY29uc3QKIHsKLSAgICBTdHJp
bmcgY3VzdG9tRW5jb2RpbmcgPSBtX3BhZ2VQcm94eS0+Y3VzdG9tVGV4dEVuY29kaW5nTmFtZSgp
OwotICAgIGlmIChjdXN0b21FbmNvZGluZy5pc0VtcHR5KCkpCisgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IGN1c3RvbUVuY29kaW5nID0gYWRvcHRXSyhXS1BhZ2VDb3B5Q3VzdG9tVGV4dEVu
Y29kaW5nTmFtZSh3a1BhZ2UoKSkpOworICAgIGlmIChXS1N0cmluZ0lzRW1wdHkoY3VzdG9tRW5j
b2RpbmcuZ2V0KCkpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIG1fY3VzdG9tRW5jb2Rpbmcg
PSBjdXN0b21FbmNvZGluZy51dGY4KCkuZGF0YSgpOworICAgIG1fY3VzdG9tRW5jb2RpbmcgPSBX
S0VpbmFTaGFyZWRTdHJpbmcoY3VzdG9tRW5jb2RpbmcuZ2V0KCkpOwogCiAgICAgcmV0dXJuIG1f
Y3VzdG9tRW5jb2Rpbmc7CiB9CiAKIHZvaWQgRXdrVmlldzo6c2V0Q3VzdG9tVGV4dEVuY29kaW5n
TmFtZShjb25zdCBTdHJpbmcmIGVuY29kaW5nKQogewotICAgIG1fcGFnZVByb3h5LT5zZXRDdXN0
b21UZXh0RW5jb2RpbmdOYW1lKGVuY29kaW5nKTsKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gd2tFbmNvZGluZyA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZW5j
b2RpbmcudXRmOCgpLmRhdGEoKSkpOworICAgIFdLUGFnZVNldEN1c3RvbVRleHRFbmNvZGluZ05h
bWUod2tQYWdlKCksIHdrRW5jb2RpbmcuZ2V0KCkpOwogfQogCiB2b2lkIEV3a1ZpZXc6OnNldE1v
dXNlRXZlbnRzRW5hYmxlZChib29sIGVuYWJsZWQpCkBAIC02NDUsOSArNjc3LDYgQEAgYm9vbCBF
d2tWaWV3OjpjcmVhdGVHTFN1cmZhY2UoY29uc3QgSW50U2l6ZSYgdmlld1NpemUpCiAgICAgICAg
IGlmICghbV9ldmFzR0wpIHsKICAgICAgICAgICAgIFdBUk4oIkZhaWxlZCB0byBjcmVhdGUgRXZh
c19HTCwgZmFsbGluZyBiYWNrIHRvIHNvZnR3YXJlIG1vZGUuIik7CiAgICAgICAgICAgICBtX2lz
SGFyZHdhcmVBY2NlbGVyYXRlZCA9IGZhbHNlOwotI2lmIEVOQUJMRShXRUJHTCkKLSAgICAgICAg
ICAgIG1fcGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0V2ViR0xFbmFi
bGVkKGZhbHNlKTsKLSNlbmRpZgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9
CiAgICAgfQpAQCAtODkwLDE1ICs5MTksMTMgQEAgdW5zaWduZWQgbG9uZyBsb25nIEV3a1ZpZXc6
OmluZm9ybURhdGFiYXNlUXVvdGFSZWFjaGVkKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW0KICAq
Lwogdm9pZCBFd2tWaWV3OjppbmZvcm1VUkxDaGFuZ2UoKQogewotICAgIFN0cmluZyBhY3RpdmVV
UkwgPSBtX3BhZ2VQcm94eS0+YWN0aXZlVVJMKCk7Ci0gICAgaWYgKGFjdGl2ZVVSTC5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gd2tBY3RpdmVV
UkwgPSBhZG9wdFdLKFdLUGFnZUNvcHlBY3RpdmVVUkwod2tQYWdlKCkpKTsKKyAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gd2tVUkxTdHJpbmcgPSBhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh3
a0FjdGl2ZVVSTC5nZXQoKSkpOwogCi0gICAgQ1N0cmluZyByYXdBY3RpdmVVUkwgPSBhY3RpdmVV
UkwudXRmOCgpOwotICAgIGlmIChtX3VybCA9PSByYXdBY3RpdmVVUkwuZGF0YSgpKQorICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHdrVVJMU3RyaW5nLmdldCgpLCBtX3VybCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIG1fdXJsID0gcmF3QWN0aXZlVVJMLmRhdGEoKTsKKyAg
ICBtX3VybCA9IFdLRWluYVNoYXJlZFN0cmluZyh3a1VSTFN0cmluZy5nZXQoKSk7CiAgICAgc21h
cnRDYWxsYmFjazxVUkxDaGFuZ2VkPigpLmNhbGwobV91cmwpOwogCiAgICAgLy8gVXBkYXRlIHRo
ZSB2aWV3J3MgZmF2aWNvbi4KQEAgLTEwMzAsNyArMTA1Nyw3IEBAIHZvaWQgRXdrVmlldzo6b25G
YXZpY29uQ2hhbmdlZChjb25zdCBjaGFyKiBwYWdlVVJMLCB2b2lkKiBldmVudEluZm8pCiBQYXNz
UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gRXdrVmlldzo6dGFrZVNuYXBzaG90KCkKIHsKICAgICAv
LyBTdXNwZW5kIGFsbCBhbmltYXRpb25zIGJlZm9yZSB0YWtpbmcgdGhlIHNuYXBzaG90LgotICAg
IG1fcGFnZVByb3h5LT5zdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKKyAg
ICBXS1ZpZXdTdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMod2tWaWV3KCkpOwog
CiAgICAgLy8gV2FpdCBmb3IgdGhlIHBlbmRpbmcgcmVwYWludCBldmVudHMgdG8gYmUgcHJvY2Vz
c2VkLgogICAgIHdoaWxlIChtX2Rpc3BsYXlUaW1lci5pc0FjdGl2ZSgpKQpAQCAtMTA0Miw3ICsx
MDY5LDcgQEAgUGFzc1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IEV3a1ZpZXc6OnRha2VTbmFwc2hv
dCgpCiAjZW5kaWYKICAgICAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc25hcHNob3QgPSBj
cmVhdGVTdXJmYWNlRm9ySW1hZ2Uoc2QtPmltYWdlKTsKICAgICAgICAgLy8gUmVzdW1lIGFsbCBh
bmltYXRpb25zLgotICAgICAgICBtX3BhZ2VQcm94eS0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0Fu
ZEFuaW1hdGlvbnMoKTsKKyAgICAgICAgV0tWaWV3UmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFu
aW1hdGlvbnMod2tWaWV3KCkpOwogCiAgICAgICAgIHJldHVybiBzbmFwc2hvdC5yZWxlYXNlKCk7
CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtMTA1MCw3ICsxMDc3LDcgQEAg
UGFzc1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IEV3a1ZpZXc6OnRha2VTbmFwc2hvdCgpCiAKICAg
ICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzbmFwc2hvdCA9IGdldEltYWdlU3VyZmFjZUZyb21G
cmFtZUJ1ZmZlcigwLCAwLCBzZC0+dmlldy53LCBzZC0+dmlldy5oKTsKICAgICAvLyBSZXN1bWUg
YWxsIGFuaW1hdGlvbnMuCi0gICAgbV9wYWdlUHJveHktPnJlc3VtZUFjdGl2ZURPTU9iamVjdHNB
bmRBbmltYXRpb25zKCk7CisgICAgV0tWaWV3UmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1h
dGlvbnMod2tWaWV3KCkpOwogCiAgICAgcmV0dXJuIHNuYXBzaG90LnJlbGVhc2UoKTsKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oCmluZGV4IGEyMTNm
OTdkNWViYjQxOTYzMTZhOWVhY2UxMjhiOWEyMjllZDUwMGQuLmEzZDE2ZTA2OGRjMTkwMjNiYWFl
ZmY5MDhlOGM2OGE0ZTcxZjIzZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL0V3a1ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9Fd2tWaWV3LmgKQEAgLTQ5LDYgKzQ5LDEwIEBACiAjaW5jbHVkZSAiRXZhc0dMU3VyZmFjZS5o
IgogI2VuZGlmCiAKKyNpbmNsdWRlICJXZWJDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViUGFnZUdy
b3VwLmgiCisjaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIKKwogbmFtZXNwYWNlIFdlYktpdCB7
CiBjbGFzcyBDb250ZXh0TWVudUNsaWVudEVmbDsKIGNsYXNzIEZpbmRDbGllbnRFZmw7CkBAIC05
NiwyMSArMTAwLDUyIEBAIHR5cGVkZWYgc3RydWN0IF9FdmFzX0dMX1N1cmZhY2UgRXZhc19HTF9T
dXJmYWNlOwogCiB0eXBlZGVmIHN0cnVjdCBFd2tfVmlld19TbWFydF9EYXRhIEV3a19WaWV3X1Nt
YXJ0X0RhdGE7CiAKLWNsYXNzIEV3a1ZpZXcgeworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNz
IFdlYlZpZXcgOiBwdWJsaWMgQVBJT2JqZWN0IHsKIHB1YmxpYzoKKyAgICBzdGF0aWMgY29uc3Qg
VHlwZSBBUElUeXBlID0gVHlwZVZpZXc7CisKKyAgICBXZWJWaWV3KFdlYkNvbnRleHQqLCBQYWdl
Q2xpZW50KiwgV2ViUGFnZUdyb3VwKiwgRXZhc19PYmplY3QqKTsKKyAgICB2aXJ0dWFsIH5XZWJW
aWV3KCk7CiAKKyAgICB2b2lkIGluaXRpYWxpemUoKTsKKworICAgIFdLUGFnZVJlZiBwYWdlUmVm
KCkgY29uc3QgeyByZXR1cm4gdG9BUEkobV93ZWJQYWdlUHJveHkuZ2V0KCkpOyB9CisKKyAgICB2
b2lkIHNldFRoZW1lUGF0aChXS1N0cmluZ1JlZik7CisgICAgdm9pZCBzdXNwZW5kQWN0aXZlRE9N
T2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKKyAgICB2b2lkIHJlc3VtZUFjdGl2ZURPTU9iamVjdHNB
bmRBbmltYXRpb25zKCk7CisKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHdoZW4gcG9zc2libGUuCisg
ICAgRXZhc19PYmplY3QqIGV2YXNPYmplY3QoKSB7IHJldHVybiBtX2V2YXNPYmplY3Q7IH0KKyAg
ICBXZWJQYWdlUHJveHkqIHBhZ2UoKSB7IHJldHVybiBtX3dlYlBhZ2VQcm94eS5nZXQoKTsgfQor
Citwcml2YXRlOgorICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gQVBJVHlw
ZTsgfQorCisgICAgV1RGOjpSZWZQdHI8V2ViUGFnZVByb3h5PiBtX3dlYlBhZ2VQcm94eTsKKyAg
ICBFdmFzX09iamVjdCogbV9ldmFzT2JqZWN0OworfTsKKworfQorCitjbGFzcyBFd2tWaWV3IHsK
K3B1YmxpYzoKICAgICBlbnVtIFZpZXdCZWhhdmlvciB7CiAgICAgICAgIExlZ2FjeUJlaGF2aW9y
LAogICAgICAgICBEZWZhdWx0QmVoYXZpb3IKICAgICB9OwotICAgIEV3a1ZpZXcoRXZhc19PYmpl
Y3QqIHZpZXcsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgUGFzc1JlZlB0cjxXZWJL
aXQ6OldlYlBhZ2VHcm91cD4gcGFnZUdyb3VwLCBWaWV3QmVoYXZpb3IpOworICAgIEV3a1ZpZXco
RXZhc19PYmplY3QqIHZpZXcsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgV2ViS2l0
OjpXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCwgVmlld0JlaGF2aW9yKTsKICAgICB+RXdrVmlldygp
OwogCiAgICAgc3RhdGljIEV3a1ZpZXcqIGZyb21FdmFzT2JqZWN0KGNvbnN0IEV2YXNfT2JqZWN0
KiB2aWV3KTsKICAgICBFdmFzX09iamVjdCogdmlldygpIHsgcmV0dXJuIG1fZXZhc09iamVjdDsg
fQogCi0gICAgV0tQYWdlUmVmIHdrUGFnZSgpOwotICAgIFdlYktpdDo6V2ViUGFnZVByb3h5KiBw
YWdlKCkgeyByZXR1cm4gbV9wYWdlUHJveHkuZ2V0KCk7IH0KKyAgICBXS1ZpZXdSZWYgd2tWaWV3
KCkgY29uc3QgeyByZXR1cm4gdG9BUEkobV93ZWJWaWV3LmdldCgpKTsgfQorICAgIFdLUGFnZVJl
ZiB3a1BhZ2UoKSBjb25zdDsKKworICAgIFdlYktpdDo6V2ViUGFnZVByb3h5KiBwYWdlKCkgeyBy
ZXR1cm4gbV93ZWJWaWV3LT5wYWdlKCk7IH0KICAgICBFd2tDb250ZXh0KiBld2tDb250ZXh0KCkg
eyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CiAgICAgRXdrU2V0dGluZ3MqIHNldHRpbmdzKCkg
eyByZXR1cm4gbV9zZXR0aW5ncy5nZXQoKTsgfQogICAgIEV3a0JhY2tGb3J3YXJkTGlzdCogYmFj
a0ZvcndhcmRMaXN0KCkgeyByZXR1cm4gbV9iYWNrRm9yd2FyZExpc3QuZ2V0KCk7IH0KQEAgLTI0
NSw3ICsyODAsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9wZW5kaW5nU3VyZmFjZVJlc2l6ZTsK
ICNlbmRpZgogICAgIE93blB0cjxXZWJLaXQ6OlBhZ2VDbGllbnRCYXNlPiBtX3BhZ2VDbGllbnQ7
Ci0gICAgUmVmUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5PiBtX3BhZ2VQcm94eTsKKyAgICBSZWZQ
dHI8V2ViS2l0OjpXZWJWaWV3PiBtX3dlYlZpZXc7CiAgICAgT3duUHRyPFdlYktpdDo6UGFnZUxv
YWRDbGllbnRFZmw+IG1fcGFnZUxvYWRDbGllbnQ7CiAgICAgT3duUHRyPFdlYktpdDo6UGFnZVBv
bGljeUNsaWVudEVmbD4gbV9wYWdlUG9saWN5Q2xpZW50OwogICAgIE93blB0cjxXZWJLaXQ6OlBh
Z2VVSUNsaWVudEVmbD4gbV9wYWdlVUlDbGllbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKaW5kZXggNzJhNmFmYWEzZWVjMTA4NTU5YWZkYWY4NzYz
ODJmYjVjMzczY2MxMS4uY2FlMDQyNThmNGNiZmQ0MDJhMTJiOGU1Yzc3NzBlODE0YTBmNjQxYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcApAQCAt
NTA1LDcgKzUwNSw3IEBAIHN0YXRpYyBpbmxpbmUgRXZhc19TbWFydCogY3JlYXRlRXdrVmlld1Nt
YXJ0Q2xhc3Modm9pZCkKICAgICByZXR1cm4gc21hcnQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRXZh
c19PYmplY3QqIGNyZWF0ZUV3a1ZpZXcoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwg
UGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBS
ZWYgPSAwLCBFd2tWaWV3OjpWaWV3QmVoYXZpb3IgYmVoYXZpb3IgPSBFd2tWaWV3OjpEZWZhdWx0
QmVoYXZpb3IpCitzdGF0aWMgaW5saW5lIEV3a1ZpZXcqIGNyZWF0ZUV3a1ZpZXcoRXZhcyogY2Fu
dmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBX
S1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYgPSAwLCBFd2tWaWV3OjpWaWV3QmVoYXZpb3IgYmVo
YXZpb3IgPSBFd2tWaWV3OjpEZWZhdWx0QmVoYXZpb3IpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKGNhbnZhcywgMCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKHNtYXJ0LCAwKTsKQEAgLTUyNSwyMSArNTI1LDIyIEBAIHN0YXRpYyBpbmxpbmUgRXZh
c19PYmplY3QqIGNyZWF0ZUV3a1ZpZXcoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwg
UGFzc1JlCiAgICAgLy8gRGVmYXVsdCBXZWJQYWdlR3JvdXAgaXMgY3JlYXRlZCBpbiBXZWJDb250
ZXh0IGNvbnN0cnVjdG9yIGlmIHRoZSBwYWdlR3JvdXBSZWYgaXMgMCwKICAgICAvLyBzbyB3ZSBk
byBub3QgbmVlZCB0byBjcmVhdGUgaXQgaGVyZS4KICAgICBzbWFydERhdGEtPnByaXYgPSBuZXcg
RXdrVmlldyhld2tWaWV3LCBjb250ZXh0LCB0b0ltcGwocGFnZUdyb3VwUmVmKSwgYmVoYXZpb3Ip
OwotICAgIHJldHVybiBld2tWaWV3OworCisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+cHJpdjsKIH0K
IAogLyoqCiAgKiBAaW50ZXJuYWwKICAqIENvbnN0cnVjdHMgYSBld2tfdmlldyBFdmFzX09iamVj
dCB3aXRoIFdLVHlwZSBwYXJhbWV0ZXJzLgogICovCi1FdmFzX09iamVjdCogZXdrX3ZpZXdfYmFz
ZV9hZGQoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBS
ZWYgcGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpWaWV3QmVoYXZpb3IgYmVoYXZpb3IpCitFd2tWaWV3
KiBld2tfdmlld19iYXNlX2FkZChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVm
LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OlZpZXdCZWhhdmlvciBiZWhh
dmlvcikKIHsKICAgICByZXR1cm4gY3JlYXRlRXdrVmlldyhjYW52YXMsIGNyZWF0ZUV3a1ZpZXdT
bWFydENsYXNzKCksIGNvbnRleHRSZWYgPyBFd2tDb250ZXh0OjpjcmVhdGUodG9JbXBsKGNvbnRl
eHRSZWYpKSA6IEV3a0NvbnRleHQ6OmRlZmF1bHRDb250ZXh0KCksIHBhZ2VHcm91cFJlZiwgYmVo
YXZpb3IpOwogfQogCiBFdmFzX09iamVjdCogZXdrX3ZpZXdfc21hcnRfYWRkKEV2YXMqIGNhbnZh
cywgRXZhc19TbWFydCogc21hcnQsIEV3a19Db250ZXh0KiBjb250ZXh0KQogewotICAgIHJldHVy
biBjcmVhdGVFd2tWaWV3KGNhbnZhcywgc21hcnQsIGV3a19vYmplY3RfY2FzdDxFd2tDb250ZXh0
Kj4oY29udGV4dCkpOworICAgIHJldHVybiBjcmVhdGVFd2tWaWV3KGNhbnZhcywgc21hcnQsIGV3
a19vYmplY3RfY2FzdDxFd2tDb250ZXh0Kj4oY29udGV4dCkpLT52aWV3KCk7CiB9CiAKIEV2YXNf
T2JqZWN0KiBld2tfdmlld19hZGRfd2l0aF9jb250ZXh0KEV2YXMqIGNhbnZhcywgRXdrX0NvbnRl
eHQqIGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfdmlld19wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfdmlld19wcml2YXRlLmgKaW5kZXggODNiNGM5NzNiMWEzNjRjYzc5NjhjOGYzNzkxYWVjZjZk
MjRjZWFhYi4uYzQ5MTJmZmQ3YjQxZTRlNTJhN2Y0YzZmYThkODBlYWQ0YjQxMDY1OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUu
aApAQCAtMjUsNiArMjUsNiBAQAogI2luY2x1ZGUgPEV2YXMuaD4KICNpbmNsdWRlIDxXZWJLaXQy
L1dLQmFzZS5oPgogCi1FdmFzX09iamVjdCogZXdrX3ZpZXdfYmFzZV9hZGQoRXZhcyogY2FudmFz
LCBXS0NvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpWaWV3QmVoYXZpb3IpOwor
RXdrVmlldyogZXdrX3ZpZXdfYmFzZV9hZGQoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYsIFdL
UGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpWaWV3QmVoYXZpb3IpOwogCiAjZW5kaWYgLy8gZXdrX3Zp
ZXdfcHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dl
Ykluc3BlY3RvclByb3h5RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2Vi
SW5zcGVjdG9yUHJveHlFZmwuY3BwCmluZGV4IDQ2MmIyNmQzNTBlZWZlZDcwMzM4MjFlNTc3NGFh
Y2FjODU0Y2FhN2YuLjMxNzQ0OWRkMTVlNGQ4ZWZlMTkwYjllYWQ0MmVkNzMzZGY2OGQzMDggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlF
ZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJv
eHlFZmwuY3BwCkBAIC05OCwxNCArOTgsMTUgQEAgV2ViUGFnZVByb3h5KiBXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1DcmVhdGVJbnNwZWN0b3JQYWdlKCkKICAgICBpZiAoIW1faW5zcGVjdG9y
V2luZG93KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIG1faW5zcGVjdG9yVmlldyA9IGV3a192
aWV3X2Jhc2VfYWRkKGVjb3JlX2V2YXNfZ2V0KG1faW5zcGVjdG9yV2luZG93KSwgdG9BUEkocGFn
ZSgpLT5wcm9jZXNzKCktPmNvbnRleHQoKSksIHRvQVBJKGluc3BlY3RvclBhZ2VHcm91cCgpKSwg
RXdrVmlldzo6TGVnYWN5QmVoYXZpb3IpOwotICAgIEV3a1ZpZXcqIGluc3BlY3RvclZpZXdJbXBs
ID0gRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QobV9pbnNwZWN0b3JWaWV3KTsKLSAgICBpbnNwZWN0
b3JWaWV3SW1wbC0+c2V0VGhlbWVQYXRoKFRFU1RfVEhFTUVfRElSICIvZGVmYXVsdC5lZGoiKTsK
KyAgICAvLyBGSVhNRTogUmVmYWN0b3IgdG8gdXNlIFdLVmlld1JlZi4KKyAgICBtX2luc3BlY3Rv
clZpZXcgPSBld2tfdmlld19iYXNlX2FkZChlY29yZV9ldmFzX2dldChtX2luc3BlY3RvcldpbmRv
dyksIHRvQVBJKHBhZ2UoKS0+cHJvY2VzcygpLT5jb250ZXh0KCkpLCB0b0FQSShpbnNwZWN0b3JQ
YWdlR3JvdXAoKSksIEV3a1ZpZXc6OkxlZ2FjeUJlaGF2aW9yKS0+dmlldygpOworICAgIEV3a1Zp
ZXcqIGluc3BlY3RvclZpZXcgPSBFd2tWaWV3Ojpmcm9tRXZhc09iamVjdChtX2luc3BlY3RvclZp
ZXcpOworICAgIGluc3BlY3RvclZpZXctPnNldFRoZW1lUGF0aChURVNUX1RIRU1FX0RJUiAiL2Rl
ZmF1bHQuZWRqIik7CiAKLSAgICBFd2tfU2V0dGluZ3MqIHNldHRpbmdzID0gaW5zcGVjdG9yVmll
d0ltcGwtPnNldHRpbmdzKCk7CisgICAgRXdrX1NldHRpbmdzKiBzZXR0aW5ncyA9IGluc3BlY3Rv
clZpZXctPnNldHRpbmdzKCk7CiAgICAgZXdrX3NldHRpbmdzX2ZpbGVfYWNjZXNzX2Zyb21fZmls
ZV91cmxzX2FsbG93ZWRfc2V0KHNldHRpbmdzLCB0cnVlKTsKIAotICAgIHJldHVybiBpbnNwZWN0
b3JWaWV3SW1wbC0+cGFnZSgpOworICAgIHJldHVybiBpbnNwZWN0b3JWaWV3LT5wYWdlKCk7CiB9
CiAKIHZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtT3BlbigpCmRpZmYgLS1naXQgYS9U
b29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZTJiYWZkMGY3NjQ4YjkxMzhh
NjcwZTFiZTI3NjJlNTg5NzVjNDc0Yi4uMWIwODk0YjZmYjQyYmQ5ZmU4ZWIyMWZlMTFlOGVhYzA3
OGYwMWNkYiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDM5IEBACisyMDEzLTAxLTI4ICBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNl
biAgPGtlbm5ldGhAd2Via2l0Lm9yZz4KKworICAgICAgICBbRUZMXVtXSzJdIEludHJvZHVjZSBh
IFdlYlZpZXcgY2xhc3MgYXMgY291bnRlcnBhcnQgZm9yIFdLVmlld1JlZgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3OTMxCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdlIHBsYXRmb3JtVmlldyB0
byBiZSBhIFdLVmlldyBhbmQgdXNlIFdLVmlld0dldEV2YXNPYmplY3QKKyAgICAgICAgZm9yIHRo
ZSBwbGFjZXMgd2hlcmUgYW4gRXZhc19PYmplY3QgaXMgbmVlZGVkLgorCisgICAgICAgIEluc3Rl
YWQgb2YgZXh0cmFjdGluZyB0aGUgRWNvcmVfRXZhcyogZnJvbSB0aGUgbV92aWV3IHdlIHVzZQor
ICAgICAgICB0aGUgbV93aW5kb3cgaW5zdGVhZCwgd2hpY2ggYWN0dWFsbHkgaG9sZHMgdGhlIGl0
LgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdlYlZpZXcuaDoKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL2VmbC9QbGF0Zm9ybVdlYlZpZXcuY3BwOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6UGxhdGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcpOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6UGxhdGZvcm1XZWJWaWV3Ojp+UGxhdGZvcm1XZWJWaWV3KToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OlBsYXRmb3JtV2ViVmlldzo6cmVzaXplVG8pOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6UGxhdGZvcm1XZWJWaWV3OjpwYWdlKToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OlBsYXRmb3JtV2ViVmlldzo6c2ltdWxhdGVTcGFjZWJhcktleVByZXNzKToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OlBsYXRmb3JtV2ViVmlldzo6c2ltdWxhdGVNb3VzZU1vdmUpOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6UGxhdGZvcm1XZWJWaWV3OjpzaW11bGF0ZVJpZ2h0Q2xpY2sp
OgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3Lmg6CisgICAgICAg
ICogV2ViS2l0VGVzdFJ1bm5lci9lZmwvRXZlbnRTZW5kZXJQcm94eUVmbC5jcHA6CisgICAgICAg
IChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OnNlbmRUb3VjaEV2ZW50KToKKyAgICAgICAgKFdUUjo6
RXZlbnRTZW5kZXJQcm94eTo6c2V0VG91Y2hNb2RpZmllcik6CisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNwcDoKKyAgICAgICAgKFdUUjo6UGxhdGZv
cm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcpOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZp
ZXc6On5QbGF0Zm9ybVdlYlZpZXcpOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6OnJl
c2l6ZVRvKToKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3OjpwYWdlKToKKyAgICAgICAg
KFdUUjo6UGxhdGZvcm1XZWJWaWV3Ojpmb2N1cyk6CisgICAgICAgIChXVFI6OlBsYXRmb3JtV2Vi
Vmlldzo6d2luZG93RnJhbWUpOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6OnNldFdp
bmRvd0ZyYW1lKToKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3Ojp3aW5kb3dTbmFwc2hv
dEltYWdlKToKKwogMjAxMy0wMS0yOCAgUmFwaGFlbCBLdWJvIGRhIENvc3RhICA8cmFwaGFlbC5r
dWJvLmRhLmNvc3RhQGludGVsLmNvbT4KIAogICAgICAgICBbRUZMXSBJbmNsdWRlIEVjb3JlX0dl
dG9wdC5oIGluIE1pbmlCcm93c2VyLgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9Q
bGF0Zm9ybVdlYlZpZXcuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XZWJWaWV3LmgK
aW5kZXggNWFkMWVlZDBlMWYxZTJiMTFkMmI5YWNjMDZlMzhkNDk4ZjIzYjVkYy4uZGNhZjQ0ODQy
ZDZlZmU3OTRmYTRiN2MxYTI4N2MwZDFhODU0MzIzYiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9QbGF0Zm9ybVdlYlZpZXcuaAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRm
b3JtV2ViVmlldy5oCkBAIC00NywxMyArNDcsOCBAQCB0eXBlZGVmIEhXTkQgUGxhdGZvcm1XaW5k
b3c7CiB0eXBlZGVmIFdLVmlld1JlZiBQbGF0Zm9ybVdLVmlldzsKIHR5cGVkZWYgR3RrV2lkZ2V0
ICpQbGF0Zm9ybVdpbmRvdzsKICNlbGlmIFBMQVRGT1JNKEVGTCkKLSNpZiBVU0UoRU8pCi10eXBl
ZGVmIHN0cnVjdCBfRW8gRXZhc19PYmplY3Q7Ci0jZWxzZQotdHlwZWRlZiBzdHJ1Y3QgX0V2YXNf
T2JqZWN0IEV2YXNfT2JqZWN0OwotI2VuZGlmCiB0eXBlZGVmIHN0cnVjdCBfRWNvcmVfRXZhcyBF
Y29yZV9FdmFzOwotdHlwZWRlZiBFdmFzX09iamVjdCogUGxhdGZvcm1XS1ZpZXc7Cit0eXBlZGVm
IFdLVmlld1JlZiBQbGF0Zm9ybVdLVmlldzsKIHR5cGVkZWYgRWNvcmVfRXZhcyogUGxhdGZvcm1X
aW5kb3c7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwvUGxh
dGZvcm1XZWJWaWV3LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZWZsL1BsYXRmb3JtV2ViVmll
dy5jcHAKaW5kZXggZDU0NDllYjRkMTkzNjE3YWIwYTRjYmE2ZWQ2NjFlZGQzYjA1MzgyNC4uNTZh
YWY1MjBhMDQwMjQzMmRlMzdiYjk3YTU5ODlkYjk1NjliYWNjMCAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9lZmwvUGxhdGZvcm1XZWJWaWV3LmNwcAorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL2VmbC9QbGF0Zm9ybVdlYlZpZXcuY3BwCkBAIC02NSwzMyArNjUsNDAgQEAgUGxhdGZv
cm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFn
ZUdyb3VwUmVmIHBhZ2VHcm8KIHsKICAgICBtX3dpbmRvdyA9IGluaXRFY29yZUV2YXMoKTsKICAg
ICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwotICAgIG1fdmlldyA9IHRv
SW1wbChXS1ZpZXdDcmVhdGUoZXZhcywgY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmKSk7Ci0gICAg
ZXdrX3ZpZXdfdGhlbWVfc2V0KG1fdmlldywgVEhFTUVfRElSIi9kZWZhdWx0LmVkaiIpOwotICAg
IGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChtX3ZpZXcsICJ3ZWJwcm9jZXNzLGNyYXNo
ZWQiLCBvbldlYlByb2Nlc3NDcmFzaGVkLCAwKTsKKyAgICBtX3ZpZXcgPSBXS1ZpZXdDcmVhdGUo
ZXZhcywgY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmKTsKKyAgICBld2tfdmlld190aGVtZV9zZXQo
V0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCBUSEVNRV9ESVIiL2RlZmF1bHQuZWRqIik7Cisg
ICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKFdLVmlld0dldEV2YXNPYmplY3QobV92
aWV3KSwgIndlYnByb2Nlc3MsY3Jhc2hlZCIsIG9uV2ViUHJvY2Vzc0NyYXNoZWQsIDApOwogICAg
IHJlc2l6ZVRvKDYwMCwgODAwKTsKIH0KIAogUGxhdGZvcm1XZWJWaWV3Ojp+UGxhdGZvcm1XZWJW
aWV3KCkKIHsKLSAgICBldmFzX29iamVjdF9kZWwobV92aWV3KTsKKyAgICBFdmFzX09iamVjdCog
ZXZhc09iamVjdCA9IFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KTsKKworICAgIFdLUmVsZWFz
ZShtX3ZpZXcpOworCisgICAgLy8gRklYTUU6IFRoZSBDIFdLVmlldyBBUEkgY3VycmVudGx5IGNy
ZWF0ZXMgdGhlIEV2YXNfT2JqZWN0LCBzbyB3ZSBoYXZlIHRvIGRlc3RydWN0IGl0CisgICAgLy8g
KGFuZCBpdHMgZGVwZW5kZW5jaWVzIEV3a1ZpZXcgYW5kIFdlYktpdDo6V2ViVmlldykgdGhpcyB3
YXksIHVudGlsIHRoaXMgZ2V0IGZpeGVkLgorICAgIGV2YXNfb2JqZWN0X2RlbChldmFzT2JqZWN0
KTsKKwogICAgIGVjb3JlX2V2YXNfZnJlZShtX3dpbmRvdyk7CiAgICAgZWNvcmVfZXZhc19zaHV0
ZG93bigpOwogfQogCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6cmVzaXplVG8odW5zaWduZWQgd2lk
dGgsIHVuc2lnbmVkIGhlaWdodCkKIHsKLSAgICBldmFzX29iamVjdF9yZXNpemUobV92aWV3LCB3
aWR0aCwgaGVpZ2h0KTsKKyAgICBldmFzX29iamVjdF9yZXNpemUoV0tWaWV3R2V0RXZhc09iamVj
dChtX3ZpZXcpLCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogV0tQYWdlUmVmIFBsYXRmb3JtV2ViVmll
dzo6cGFnZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdLVmlld0dldFBhZ2UodG9BUEkobV92aWV3
KSk7CisgICAgcmV0dXJuIFdLVmlld0dldFBhZ2UobV92aWV3KTsKIH0KIAogdm9pZCBQbGF0Zm9y
bVdlYlZpZXc6OnNpbXVsYXRlU3BhY2ViYXJLZXlQcmVzcygpCiB7CiAgICAgRXZhcyogZXZhcyA9
IGVjb3JlX2V2YXNfZ2V0KG1fd2luZG93KTsKLSAgICBldmFzX29iamVjdF9mb2N1c19zZXQobV92
aWV3LCB0cnVlKTsKKyAgICBldmFzX29iamVjdF9mb2N1c19zZXQoV0tWaWV3R2V0RXZhc09iamVj
dChtX3ZpZXcpLCB0cnVlKTsKICAgICBldmFzX2V2ZW50X2ZlZWRfa2V5X2Rvd24oZXZhcywgInNw
YWNlIiwgInNwYWNlIiwgIiAiLCAwLCAwLCAwKTsKICAgICBldmFzX2V2ZW50X2ZlZWRfa2V5X3Vw
KGV2YXMsICJzcGFjZSIsICJzcGFjZSIsICIgIiwgMCwgMSwgMCk7CiB9CkBAIC05OSwxNCArMTA2
LDE0IEBAIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpzaW11bGF0ZVNwYWNlYmFyS2V5UHJlc3MoKQog
dm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnNpbXVsYXRlTW91c2VNb3ZlKHVuc2lnbmVkIHgsIHVuc2ln
bmVkIHkpCiB7CiAgICAgRXZhcyogZXZhcyA9IGVjb3JlX2V2YXNfZ2V0KG1fd2luZG93KTsKLSAg
ICBldmFzX29iamVjdF9zaG93KG1fdmlldyk7CisgICAgZXZhc19vYmplY3Rfc2hvdyhXS1ZpZXdH
ZXRFdmFzT2JqZWN0KG1fdmlldykpOwogICAgIGV2YXNfZXZlbnRfZmVlZF9tb3VzZV9tb3ZlKGV2
YXMsIHgsIHksIDAsIDApOwogfQogCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6c2ltdWxhdGVSaWdo
dENsaWNrKHVuc2lnbmVkIHgsIHVuc2lnbmVkIHkpCiB7CiAgICAgRXZhcyogZXZhcyA9IGVjb3Jl
X2V2YXNfZ2V0KG1fd2luZG93KTsKLSAgICBldmFzX29iamVjdF9zaG93KG1fdmlldyk7CisgICAg
ZXZhc19vYmplY3Rfc2hvdyhXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldykpOwogICAgIGV2YXNf
ZXZlbnRfZmVlZF9tb3VzZV9tb3ZlKGV2YXMsIHgsIHksIDAsIDApOwogICAgIGV2YXNfZXZlbnRf
ZmVlZF9tb3VzZV9kb3duKGV2YXMsIDMsIEVWQVNfQlVUVE9OX05PTkUsIDAsIDApOwogICAgIGV2
YXNfZXZlbnRfZmVlZF9tb3VzZV91cChldmFzLCAzLCBFVkFTX0JVVFRPTl9OT05FLCAwLCAwKTsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmggYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCmluZGV4IDhmOWRjZGI3ZWUz
YWFmMzgyNzZiNjYwMzAwOGJkMWRiYzg3ODkzYzYuLjUxYzRiY2MyMzU2NTVjN2NiYzE1ZmJkOWFi
YzhkYWFjN2QxZmY5MzQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZv
cm1XZWJWaWV3LmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcu
aApAQCAtNTQsMTMgKzU0LDggQEAgdHlwZWRlZiBzdHJ1Y3QgX0d0a1dpZGdldCBHdGtXaWRnZXQ7
CiB0eXBlZGVmIFdLVmlld1JlZiBQbGF0Zm9ybVdLVmlldzsKIHR5cGVkZWYgR3RrV2lkZ2V0KiBQ
bGF0Zm9ybVdpbmRvdzsKICNlbGlmIFBMQVRGT1JNKEVGTCkKLSNpZiBVU0UoRU8pCi10eXBlZGVm
IHN0cnVjdCBfRW8gRXZhc19PYmplY3Q7Ci0jZWxzZQotdHlwZWRlZiBzdHJ1Y3QgX0V2YXNfT2Jq
ZWN0IEV2YXNfT2JqZWN0OwotI2VuZGlmCiB0eXBlZGVmIHN0cnVjdCBfRWNvcmVfRXZhcyBFY29y
ZV9FdmFzOwotdHlwZWRlZiBFdmFzX09iamVjdCogUGxhdGZvcm1XS1ZpZXc7Cit0eXBlZGVmIFdL
Vmlld1JlZiBQbGF0Zm9ybVdLVmlldzsKIHR5cGVkZWYgRWNvcmVfRXZhcyogUGxhdGZvcm1XaW5k
b3c7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvRXZl
bnRTZW5kZXJQcm94eUVmbC5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9FdmVudFNl
bmRlclByb3h5RWZsLmNwcAppbmRleCBmMjgyOWE5NmM5MjhhMmY5Mzk3ZTU2YzliNzk2NWVmMDUx
MDcyZTk5Li4xMzkyMGVjMDZiOTA1YjI4YjUwMTA2NjMxOTZjYjI1YjUwZTM4MWE1IDEwMDY0NAot
LS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9FdmVudFNlbmRlclByb3h5RWZsLmNwcAor
KysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9FdmVudFNlbmRlclByb3h5RWZsLmNwcApA
QCAtNDM4LDcgKzQzOCw3IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6c2VuZFRvdWNoRXZlbnQo
RXdrX1RvdWNoX0V2ZW50X1R5cGUgZXZlbnRUeXBlKQogewogICAgIEFTU0VSVChtX3RvdWNoUG9p
bnRzKTsKIAotICAgIEV2YXNfT2JqZWN0KiBld2tWaWV3ID0gbV90ZXN0Q29udHJvbGxlci0+bWFp
bldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCk7CisgICAgRXZhc19PYmplY3QqIGV3a1ZpZXcgPSBX
S1ZpZXdHZXRFdmFzT2JqZWN0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRm
b3JtVmlldygpKTsKICAgICBld2tfdmlld19mZWVkX3RvdWNoX2V2ZW50KGV3a1ZpZXcsIGV2ZW50
VHlwZSwgbV90b3VjaFBvaW50cywgZXZhc19rZXlfbW9kaWZpZXJfZ2V0KGV2YXNfb2JqZWN0X2V2
YXNfZ2V0KGV3a1ZpZXcpKSk7CiAKICAgICBFaW5hX0xpc3QqIGxpc3Q7CkBAIC00OTAsMTIgKzQ5
MCwxNCBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnVwZGF0ZVRvdWNoUG9pbnQoaW50IGluZGV4
LCBpbnQgeCwgaW50IHkpCiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6c2V0VG91Y2hNb2RpZmll
cihXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVyLCBib29sIGVuYWJsZSkKIHsKKyAgICBFdmFzX09i
amVjdCogZXdrVmlldyA9IFdLVmlld0dldEV2YXNPYmplY3QobV90ZXN0Q29udHJvbGxlci0+bWFp
bldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCkpOworCiAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9
IDA7IGluZGV4IDwgKHNpemVvZihtb2RpZmllck5hbWVzKSAvIHNpemVvZihjaGFyKikpOyArK2lu
ZGV4KSB7CiAgICAgICAgIGlmIChtb2RpZmllciAmICgxIDw8IGluZGV4KSkgewogICAgICAgICAg
ICAgaWYgKGVuYWJsZSkKLSAgICAgICAgICAgICAgICBldmFzX2tleV9tb2RpZmllcl9vbihldmFz
X29iamVjdF9ldmFzX2dldChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9y
bVZpZXcoKSksIG1vZGlmaWVyTmFtZXNbaW5kZXhdKTsKKyAgICAgICAgICAgICAgICBldmFzX2tl
eV9tb2RpZmllcl9vbihldmFzX29iamVjdF9ldmFzX2dldChld2tWaWV3KSwgbW9kaWZpZXJOYW1l
c1tpbmRleF0pOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGV2YXNfa2V5X21v
ZGlmaWVyX29mZihldmFzX29iamVjdF9ldmFzX2dldChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2Vi
VmlldygpLT5wbGF0Zm9ybVZpZXcoKSksIG1vZGlmaWVyTmFtZXNbaW5kZXhdKTsKKyAgICAgICAg
ICAgICAgICBldmFzX2tleV9tb2RpZmllcl9vZmYoZXZhc19vYmplY3RfZXZhc19nZXQoZXdrVmll
dyksIG1vZGlmaWVyTmFtZXNbaW5kZXhdKTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5jcHAgYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3BwCmluZGV4IDFj
Y2MwYmRhYmU5YWFiODdjZWFlYmI4NzhhNmI0NDNhMGVmNjFjMTUuLmI0NjllNTkwYzM4MjY2MDhk
M2FjODk5ZWY5ZTM3YjEzMTEyZmFhYWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNwcApAQCAtNjEsNTYgKzYxLDYwIEBAIFBsYXRmb3Jt
V2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91
cFJlZiBwYWdlR3JvdXAsCiAgICAgRXZhcyogZXZhcyA9IGVjb3JlX2V2YXNfZ2V0KG1fd2luZG93
KTsKIAogICAgIGlmIChtX3VzaW5nRml4ZWRMYXlvdXQpIHsKLSAgICAgICAgbV92aWV3ID0gdG9J
bXBsKFdLVmlld0NyZWF0ZVdpdGhGaXhlZExheW91dChldmFzLCBjb250ZXh0LCBwYWdlR3JvdXAp
KTsKLSAgICAgICAgZXZhc19vYmplY3RfcmVzaXplKG1fdmlldywgODAwLCA2MDApOworICAgICAg
ICBtX3ZpZXcgPSBXS1ZpZXdDcmVhdGVXaXRoRml4ZWRMYXlvdXQoZXZhcywgY29udGV4dCwgcGFn
ZUdyb3VwKTsKKyAgICAgICAgZXZhc19vYmplY3RfcmVzaXplKFdLVmlld0dldEV2YXNPYmplY3Qo
bV92aWV3KSwgODAwLCA2MDApOwogICAgIH0gZWxzZQotICAgICAgICBtX3ZpZXcgPSB0b0ltcGwo
V0tWaWV3Q3JlYXRlKGV2YXMsIGNvbnRleHQsIHBhZ2VHcm91cCkpOworICAgICAgICBtX3ZpZXcg
PSBXS1ZpZXdDcmVhdGUoZXZhcywgY29udGV4dCwgcGFnZUdyb3VwKTsKIAotICAgIGV3a192aWV3
X3RoZW1lX3NldChtX3ZpZXcsIFRIRU1FX0RJUiIvZGVmYXVsdC5lZGoiKTsKKyAgICBld2tfdmll
d190aGVtZV9zZXQoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCBUSEVNRV9ESVIiL2RlZmF1
bHQuZWRqIik7CiAgICAgbV93aW5kb3dJc0tleSA9IGZhbHNlOwotICAgIGV2YXNfb2JqZWN0X3No
b3cobV92aWV3KTsKKyAgICBldmFzX29iamVjdF9zaG93KFdLVmlld0dldEV2YXNPYmplY3QobV92
aWV3KSk7CiB9CiAKIFBsYXRmb3JtV2ViVmlldzo6flBsYXRmb3JtV2ViVmlldygpCiB7Ci0gICAg
ZXZhc19vYmplY3RfZGVsKG1fdmlldyk7CisgICAgRXZhc19PYmplY3QqIGV2YXNPYmplY3QgPSBX
S1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyk7CisKKyAgICBXS1JlbGVhc2UobV92aWV3KTsKKwor
ICAgIC8vIEZJWE1FOiBUaGUgQyBXS1ZpZXcgQVBJIGN1cnJlbnRseSBjcmVhdGVzIHRoZSBFdmFz
X09iamVjdCwgc28gd2UgaGF2ZSB0byBkZXN0cnVjdCBpdAorICAgIC8vIChhbmQgaXRzIGRlcGVu
ZGVuY2llcyBFd2tWaWV3IGFuZCBXZWJLaXQ6OldlYlZpZXcpIHRoaXMgd2F5LCB1bnRpbCB0aGlz
IGdldCBmaXhlZC4KKyAgICBldmFzX29iamVjdF9kZWwoV0tWaWV3R2V0RXZhc09iamVjdChtX3Zp
ZXcpKTsKKwogICAgIGVjb3JlX2V2YXNfZnJlZShtX3dpbmRvdyk7CiB9CiAKIHZvaWQgUGxhdGZv
cm1XZWJWaWV3OjpyZXNpemVUbyh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQogewot
ICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShtX3ZpZXcsIHdpZHRoLCBoZWlnaHQpOworICAgIGV2YXNf
b2JqZWN0X3Jlc2l6ZShXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIHdpZHRoLCBoZWlnaHQp
OwogfQogCiBXS1BhZ2VSZWYgUGxhdGZvcm1XZWJWaWV3OjpwYWdlKCkKIHsKLSAgICByZXR1cm4g
V0tWaWV3R2V0UGFnZSh0b0FQSShtX3ZpZXcpKTsKKyAgICByZXR1cm4gV0tWaWV3R2V0UGFnZSht
X3ZpZXcpOwogfQogCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6Zm9jdXMoKQogeworICAgIEV2YXNf
T2JqZWN0KiBldmFzT2JqZWN0ID0gV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpOwogICAgIC8v
IEluIGEgZmV3IGNhc2VzLCBhbiBpZnJhbWUgbWlnaHQgcmVjZWl2ZSBmb2N1cyBmcm9tIEphdmFT
Y3JpcHQgYW5kIEV2YXMgaXMgbm90IGF3YXJlIG9mIGl0IGF0IGFsbAogICAgIC8vIChXZWJDb3Jl
U3VwcG9ydDo6Zm9jdXNlZEZyYW1lQ2hhbmdlZCgpIGRvZXMgbm90IGVtaXQgYW55IG5vdGlmaWNh
dGlvbikuIFdlIHRoZW4gbWFudWFsbHkgcmVtb3ZlIHRoZQogICAgIC8vIGZvY3VzIGZyb20gdGhl
IHZpZXcgdG8gbWFrZSB0aGUgY2FsbCBnaXZlIGZvY3VzIHRvIGV2YXNfb2JqZWN0X2ZvY3VzX3Nl
dCguLi4sIHRydWUpIHRvIGJlIGVmZmVjdGZ1bC4KLSAgICBpZiAoV0tQYWdlR2V0Rm9jdXNlZEZy
YW1lKHBhZ2UoKSkgIT0gV0tQYWdlR2V0TWFpbkZyYW1lKHBhZ2UoKSkpCi0gICAgICAgIGV2YXNf
b2JqZWN0X2ZvY3VzX3NldChtX3ZpZXcsIGZhbHNlKTsKLSAgICBldmFzX29iamVjdF9mb2N1c19z
ZXQobV92aWV3LCB0cnVlKTsKKyAgICBldmFzX29iamVjdF9mb2N1c19zZXQoV0tWaWV3R2V0RXZh
c09iamVjdChtX3ZpZXcpLCBXS1BhZ2VHZXRGb2N1c2VkRnJhbWUocGFnZSgpKSA9PSBXS1BhZ2VH
ZXRNYWluRnJhbWUocGFnZSgpKSk7CiB9CiAKIFdLUmVjdCBQbGF0Zm9ybVdlYlZpZXc6OndpbmRv
d0ZyYW1lKCkKIHsKICAgICBpbnQgeCwgeSwgd2lkdGgsIGhlaWdodDsKIAotICAgIEVjb3JlX0V2
YXMqIGVlID0gZWNvcmVfZXZhc19lY29yZV9ldmFzX2dldChldmFzX29iamVjdF9ldmFzX2dldCht
X3ZpZXcpKTsKLSAgICBlY29yZV9ldmFzX3JlcXVlc3RfZ2VvbWV0cnlfZ2V0KGVlLCAmeCwgJnks
ICZ3aWR0aCwgJmhlaWdodCk7CisgICAgZWNvcmVfZXZhc19yZXF1ZXN0X2dlb21ldHJ5X2dldCht
X3dpbmRvdywgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQpOwogCiAgICAgcmV0dXJuIFdLUmVjdE1h
a2UoeCwgeSwgd2lkdGgsIGhlaWdodCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpzZXRX
aW5kb3dGcmFtZShXS1JlY3QgZnJhbWUpCiB7Ci0gICAgRWNvcmVfRXZhcyogZWUgPSBlY29yZV9l
dmFzX2Vjb3JlX2V2YXNfZ2V0KGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fdmlldykpOwotICAgIGVj
b3JlX2V2YXNfbW92ZV9yZXNpemUoZWUsIGZyYW1lLm9yaWdpbi54LCBmcmFtZS5vcmlnaW4ueSwg
ZnJhbWUuc2l6ZS53aWR0aCwgZnJhbWUuc2l6ZS5oZWlnaHQpOworICAgIGVjb3JlX2V2YXNfbW92
ZV9yZXNpemUobV93aW5kb3csIGZyYW1lLm9yaWdpbi54LCBmcmFtZS5vcmlnaW4ueSwgZnJhbWUu
c2l6ZS53aWR0aCwgZnJhbWUuc2l6ZS5oZWlnaHQpOwogfQogCiB2b2lkIFBsYXRmb3JtV2ViVmll
dzo6YWRkQ2hyb21lSW5wdXRGaWVsZCgpCkBAIC0xMjcsMTUgKzEzMSwxMiBAQCB2b2lkIFBsYXRm
b3JtV2ViVmlldzo6bWFrZVdlYlZpZXdGaXJzdFJlc3BvbmRlcigpCiAKIFdLUmV0YWluUHRyPFdL
SW1hZ2VSZWY+IFBsYXRmb3JtV2ViVmlldzo6d2luZG93U25hcHNob3RJbWFnZSgpCiB7Ci0gICAg
RWNvcmVfRXZhcyogZWUgPSBlY29yZV9ldmFzX2Vjb3JlX2V2YXNfZ2V0KGV2YXNfb2JqZWN0X2V2
YXNfZ2V0KG1fdmlldykpOwotICAgIEFTU0VSVChlZSk7Ci0KICAgICBpbnQgd2lkdGg7CiAgICAg
aW50IGhlaWdodDsKLSAgICBlY29yZV9ldmFzX2dlb21ldHJ5X2dldChlZSwgMCwgMCwgJndpZHRo
LCAmaGVpZ2h0KTsKKyAgICBlY29yZV9ldmFzX2dlb21ldHJ5X2dldChtX3dpbmRvdywgMCwgMCwg
JndpZHRoLCAmaGVpZ2h0KTsKICAgICBBU1NFUlQod2lkdGggPiAwICYmIGhlaWdodCA+IDApOwog
Ci0gICAgcmV0dXJuIGFkb3B0V0soV0tWaWV3Q3JlYXRlU25hcHNob3QodG9BUEkobV92aWV3KSkp
OworICAgIHJldHVybiBhZG9wdFdLKFdLVmlld0NyZWF0ZVNuYXBzaG90KG1fdmlldykpOwogfQog
CiBib29sIFBsYXRmb3JtV2ViVmlldzo6dmlld1N1cHBvcnRzT3B0aW9ucyhXS0RpY3Rpb25hcnlS
ZWYgb3B0aW9ucykgY29uc3QK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184992</attachid>
            <date>2013-01-28 09:04:34 -0800</date>
            <delta_ts>2013-01-28 09:16:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107931-20130128180111.patch</filename>
            <type>text/plain</type>
            <size>42010</size>
            <attacher name="Kenneth Rohde Christiansen">kenneth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwOTYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOWI3ZDY2ZTQ5MmM5ZmU4
YzJjOTU1Y2MzNGJlY2NjOTYyNjVhNDk2NC4uYmM1ZmEwNTkzY2YwYzNkMGFkZjcwZjljNmVjZDU0
N2IwZjNlNjk2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDExOCBAQAogMjAxMy0wMS0yOCAgS2Vu
bmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4gIDxrZW5uZXRoQHdlYmtpdC5vcmc+CiAKKyAgICAgICAg
W0VGTF1bV0syXSBJbnRyb2R1Y2UgYSBXZWJWaWV3IGNsYXNzIGFzIGNvdW50ZXJwYXJ0IGZvciBX
S1ZpZXdSZWYKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwNzkzMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgaXMganVzdCBvbmUgc3RlcCBvZiB0aGUgbmV3IHBsYW4gZm9yIHRoZSBFRkwgQVBJLgor
CisgICAgICAgIFRoZSBwbGFuIGlzIHRvIG1vdmUgdGhlIHB1YmxpYyBFRkwtbGlrZSBBUEkgb24g
dG9wIG9mIHRoZSBzaGFyZWQKKyAgICAgICAgV0syIEMgQVBJLCBwbHVzIGEgZmV3IEVGTCBleHRl
bnNpb25zIChXS1ZpZXcgY2xhc3MgbW9zdGx5KS4KKworICAgICAgICBUaGUgRUZMLWxpa2UgQVBJ
IGNhbiBiZSBzZWVuIGFzIGEgY29udmVuaWVuY2UgQVBJIHdoaWNoIHRpZXMKKyAgICAgICAgd2Vs
bCBpbnRvIEVGTCBhbmQgd2hpY2ggbWFrZXMgaXQgZWFzeSB0byBhZGQgd2ViIGV4cGVyaWVuY2Vz
CisgICAgICAgIHRvIGV4aXN0aW5nIGFuZCBuZXcgRUZMIGFwcGxpY2F0aW9ucy4gSXQgcHJvdmlk
ZXMgYSBzbWFydCBvYmplY3QKKyAgICAgICAgbGlrZSBBUEkgYW5kIGEgRXZhc19PYmplY3QgYmFz
ZWQgdmlldy4KKworICAgICAgICBGb3IgbW9yZSBhZHZhbmNlZCB1c2UgY2FzZXMsIHN1Y2ggYXMg
YnJvd3NlciBhbmQgcnVudGltZSwgaXQgaXMKKyAgICAgICAgcG9zc2libGUgdG8gdXNlIHRoZSBX
SyogQyBBUEksIHdoaWNoIGlzIGdpdmVzIG1vcmUgZmxleGliaWxpdHkKKyAgICAgICAgd2hpbGUg
YmVpbmcgbW9yZSBsb3cgbGV2ZWwuCisKKyAgICAgICAgVGhlIGlkZWEgaXMgdGhhdCB0aGUgV0tW
aWV3IGNsYXNzIHdpbGwgbm90IGRlcGVuZCBvbiBFdmFzX09iamVjdAorICAgICAgICBhbmQgWDEx
IChmdXR1cmUgcGxhbikgdW5saWtlIHRoZSBjdXJyZW50IEVGTC1saWtlIEFQSS4gVGhpcyBzaG91
bGQKKyAgICAgICAgbWFrZSBpdCBwb3NzaWJsZSB0byB1c2UgaXQgZm9yIGNhc2VzIHdoZXJlIG5v
bmUgb2YgdGhlc2UgYXJlCisgICAgICAgIGF2YWlsYWJsZS4KKworICAgICAgICBUaGlzIHBhdGNo
IGludHJvZHVjZXMgdGhlIFdlYlZpZXcgY2xhc3Mgd2hpY2ggc2VydmVzIGFzIG91cgorICAgICAg
ICBjb3VudGVycGFydCBmb3IgdGhlIFdLVmlldyBjbGFzcywgYW5kIGFkZHMgYSBmZXcgbmVlZGVk
IG1ldGhvZHMuCisKKyAgICAgICAgVGhlIEV3a1ZpZXcgb3ducyB0aGUgV2ViVmlldyBjbGFzcyAo
YW5kIHdpbGwgYmUgY29uc3RydWN0aW5nIGl0CisgICAgICAgIGluIHRoZSBuZWFyIGZ1dHVyZSB3
aGVuIHRoZSBFd2tWaWV3IGNsYXNzIGhhcyBiZWVuIGNoYW5nZWQgdG8KKyAgICAgICAgaGFuZGxl
IGFsbCBzbWFydCBvYmplY3QgcmVsYXRlZCBjb2RlKQorCisgICAgICAgIFRoZSBjbGVhbiB1cCBv
ZiB0aGUgc21hcnQgb2JqZWN0IHJlbGF0ZWQgY29kZSBhcyB0aGUgcHJvcGVyCisgICAgICAgIGNv
bnN0cnVjdGlvbiBvZiBFd2tWaWV3IGFuZCBXZWJWaWV3IHdpbGwgYmUgZG9uZSBpbiBmb2xsb3ct
dXAKKyAgICAgICAgcGF0Y2hlcy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9lZmwvV0tB
UElDYXN0RWZsLmg6CisgICAgICAgIChXZWJLaXQpOgorCisgICAgICAgICAgICBUaGUgV0tWaWV3
IEFQSSBpcyBub3QgYmFzZWQgb24gV2ViVmlldyBhbmQgbm90IEV2YXNfT2JqZWN0KgorCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwOgorICAgICAgICAoV0tWaWV3Q3Jl
YXRlKToKKyAgICAgICAgKFdLVmlld0NyZWF0ZVdpdGhGaXhlZExheW91dCk6CisgICAgICAgIChX
S1ZpZXdJbml0aWFsaXplKToKKyAgICAgICAgKFdLVmlld0dldFBhZ2UpOgorICAgICAgICAoV0tW
aWV3U2V0VGhlbWVQYXRoKToKKyAgICAgICAgKFdLVmlld1N1c3BlbmRBY3RpdmVET01PYmplY3Rz
QW5kQW5pbWF0aW9ucyk6CisgICAgICAgIChXS1ZpZXdSZXN1bWVBY3RpdmVET01PYmplY3RzQW5k
QW5pbWF0aW9ucyk6CisgICAgICAgIChXS1ZpZXdHZXRFdmFzT2JqZWN0KToKKyAgICAgICAgKFdL
Vmlld0NyZWF0ZVNuYXBzaG90KToKKworICAgICAgICAgICAgQWRkIGEgZmV3IG5ldyBXS1ZpZXcg
RUZMIEMgbWV0aG9kcywgYW5kIHVwZGF0ZSBleGlzdGluZworICAgICAgICAgICAgbWV0aG9kcyB0
byByZWZsZWN0IHRoYXQgdGhlIFdLVmlld1JlZiBpcyBub3cgYSBXZWJWaWV3KgorCisgICAgICAg
ICAgICBUaGUgY29uc3RydWN0aW9uIG1ldGhvZHMgd2lsbCBiZSByZXdyaXR0ZW4gd2hlbiB0aGUg
c21hcnQKKyAgICAgICAgICAgIG9iamVjdCBjb25zdHJ1Y3Rpb24gaGFzIGJlZW4gc29sdmVzLgor
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvZWZsL1dlYlZpZXcuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXc6OldlYlZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojp+
V2ViVmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmluaXRpYWxpemUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3OjpzZXRUaGVtZVBhdGgpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3OjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3OjpyZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyk6CisgICAg
ICAgICogVUlQcm9jZXNzL2VmbC9XZWJWaWV3Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToK
KyAgICAgICAgKFdlYlZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpwYWdlUmVmKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6ZXZhc09iamVjdCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXc6OnBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojp0eXBlKToKKworICAg
ICAgICAgICAgQWRkIGEgbmV3IFdlYktpdDo6V2ViVmlldyBjbGFzcyBmb3IgRUZMLgorCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHA6CisgICAgICAgIChFd2tWaWV3OjpF
d2tWaWV3KToKKyAgICAgICAgKEV3a1ZpZXc6On5Fd2tWaWV3KToKKyAgICAgICAgKEV3a1ZpZXc6
OndrUGFnZSk6CisgICAgICAgIChFd2tWaWV3OjpkZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAg
IChFd2tWaWV3Ojp0aXRsZSk6CisgICAgICAgIChFd2tWaWV3OjpzZXRUaGVtZVBhdGgpOgorICAg
ICAgICAoRXdrVmlldzo6Y3VzdG9tVGV4dEVuY29kaW5nTmFtZSk6CisgICAgICAgIChFd2tWaWV3
OjpzZXRDdXN0b21UZXh0RW5jb2RpbmdOYW1lKToKKyAgICAgICAgKEV3a1ZpZXc6OmNyZWF0ZUdM
U3VyZmFjZSk6CisgICAgICAgIChFd2tWaWV3OjppbmZvcm1VUkxDaGFuZ2UpOgorICAgICAgICAo
RXdrVmlldzo6dGFrZVNuYXBzaG90KToKKworICAgICAgICAgICAgQmFzZSBtZXRob2RzIG9uIEMg
QVBJIGluc3RlYWQgb2YgaW50ZXJuYWwgQVBJIGFzIG11Y2gKKyAgICAgICAgICAgIGFzIGN1cnJl
bnRseSBwb3NzaWJsZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaDoK
KyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJWaWV3KToKKyAgICAgICAgKEV3a1ZpZXcp
OgorICAgICAgICAoRXdrVmlldzo6d2tWaWV3KToKKyAgICAgICAgKEV3a1ZpZXc6OnBhZ2UpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcDoKKyAgICAgICAgKGNyZWF0
ZUV3a1ZpZXcpOgorICAgICAgICAoZXdrX3ZpZXdfYmFzZV9hZGQpOgorICAgICAgICAoZXdrX3Zp
ZXdfc21hcnRfYWRkKToKKworICAgICAgICAgICAgTW9kaWZ5IHRvIHJldHVybiB0aGUgRXdrVmll
dyBjbGFzcyBmb3Igbm93LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdf
cHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVJ
bnNwZWN0b3JQYWdlKToKKworICAgICAgICAgICAgVXBkYXRlZCBkdWUgdG8gY2hhbmdlZCBBUEku
CisKKzIwMTMtMDEtMjggIEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuICA8a2VubmV0aEB3ZWJr
aXQub3JnPgorCiAgICAgICAgIFtFRkxdW1dLMl0gVXNlIEMgQVBJIGluc2lkZSBld2tfdXJsX3Jl
c3BvbnNlCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MDc4MjYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCAzNWFkZTA2ZWE4MDYyMzg2ZjRl
MzlhNGYwOThmMjQ5NzExOTA4MDI2Li4zMDcwZGEwY2E4M2Y3MTY4ZGVjNzFiNzM2MzMzN2QwNjli
MDA1MGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtMTA5LDYgKzEwOSw3IEBAIGxp
c3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9lZmwvV2ViUG9wdXBNZW51
UHJveHlFZmwuY3BwCiAgICAgVUlQcm9jZXNzL2VmbC9XZWJQcmVmZXJlbmNlc0VmbC5jcHAKICAg
ICBVSVByb2Nlc3MvZWZsL1dlYlByb2Nlc3NQcm94eUVmbC5jcHAKKyAgICBVSVByb2Nlc3MvZWZs
L1dlYlZpZXcuY3BwCiAKICAgICBVSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL2VmbC9XZWJJbnNw
ZWN0b3JTZXJ2ZXJFZmwuY3BwCiAgICAgVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9zb3VwL1dl
YlNvY2tldFNlcnZlclNvdXAuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvZWZsL1dLQVBJQ2FzdEVmbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9DL2VmbC9XS0FQSUNhc3RFZmwuaAppbmRleCBiMDEzYTBhNjBkZmYwMzI4Y2YyZjllNWIxMTYx
ODYwMjM1ZTc2ZjBhLi4xODg5ZmM0MzY3NTVmOTFhODJmM2EzMDNmYWU1YmE1M2Q3ZjYyZGU3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLQVBJQ2FzdEVm
bC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tBUElDYXN0RWZs
LmgKQEAgLTI0LDE1ICsyNCwxMSBAQAogI2Vycm9yICJQbGVhc2UgI2luY2x1ZGUgXCJXS0FQSUNh
c3QuaFwiIGluc3RlYWQgb2YgdGhpcyBmaWxlIGRpcmVjdGx5LiIKICNlbmRpZgogCi0jaWYgVVNF
KEVPKQotdHlwZWRlZiBzdHJ1Y3QgX0VvIEV2YXNfT2JqZWN0OwotI2Vsc2UKLXR5cGVkZWYgc3Ry
dWN0IF9FdmFzX09iamVjdCBFdmFzX09iamVjdDsKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAotV0tfQUREX0FQSV9NQVBQSU5HKFdLVmlld1JlZiwgRXZhc19PYmplY3QpCitjbGFzcyBX
ZWJWaWV3OworCitXS19BRERfQVBJX01BUFBJTkcoV0tWaWV3UmVmLCBXZWJWaWV3KQogCiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcAppbmRleCAz
MmI5ZDhmNjM3MzViYmZmZTI2ZWY2OTA5MTFhMDAxYzYyNmIwZjEwLi5lMzcyZjlhNTk1YWNhMDVi
ODY0MjVmZjlhZDRhOTYwZTQ3YzUxNDY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9DL2VmbC9XS1ZpZXcuY3BwCkBAIC0yOSwyNCArMjksNTAgQEAgdXNpbmcgbmFtZXNwYWNl
IFdlYktpdDsKIAogV0tWaWV3UmVmIFdLVmlld0NyZWF0ZShFdmFzKiBjYW52YXMsIFdLQ29udGV4
dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCiB7Ci0gICAgcmV0
dXJuIHRvQVBJKGV3a192aWV3X2Jhc2VfYWRkKGNhbnZhcywgY29udGV4dFJlZiwgcGFnZUdyb3Vw
UmVmLCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlvcikpOworICAgIFdLVmlld1JlZiB2aWV3UmVmID0g
ZXdrX3ZpZXdfYmFzZV9hZGQoY2FudmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYsIEV3a1Zp
ZXc6OkxlZ2FjeUJlaGF2aW9yKS0+d2tWaWV3KCk7CisgICAgLy8gUmV0YWluIGFzIHRoZSBjb250
cmFjdCB3aXRoICpDcmVhdGUgZnVuY3Rpb25zIGlzIHRoYXQgcmV0dXJuZWQgb2JqZWN0cyBtdWNo
IHRvIGJlIHJlbGVhc2VkIGFmdGVyIHVzZS4KKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0tWaWV3
UmVmPihXS1JldGFpbih2aWV3UmVmKSk7CiB9CiAKIFdLVmlld1JlZiBXS1ZpZXdDcmVhdGVXaXRo
Rml4ZWRMYXlvdXQoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdl
R3JvdXBSZWYgcGFnZUdyb3VwUmVmKQogewotICAgIHJldHVybiB0b0FQSShld2tfdmlld19iYXNl
X2FkZChjYW52YXMsIGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZiwgRXdrVmlldzo6RGVmYXVsdEJl
aGF2aW9yKSk7CisgICAgV0tWaWV3UmVmIHZpZXdSZWYgPSBld2tfdmlld19iYXNlX2FkZChjYW52
YXMsIGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZiwgRXdrVmlldzo6RGVmYXVsdEJlaGF2aW9yKS0+
d2tWaWV3KCk7CisgICAgLy8gUmV0YWluIGFzIHRoZSBjb250cmFjdCB3aXRoICpDcmVhdGUgZnVu
Y3Rpb25zIGlzIHRoYXQgcmV0dXJuZWQgb2JqZWN0cyBtdWNoIHRvIGJlIHJlbGVhc2VkIGFmdGVy
IHVzZS4KKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0tWaWV3UmVmPihXS1JldGFpbih2aWV3UmVm
KSk7Cit9CisKK3ZvaWQgV0tWaWV3SW5pdGlhbGl6ZShXS1ZpZXdSZWYgdmlld1JlZikKK3sKKyAg
ICB0b0ltcGwodmlld1JlZiktPmluaXRpYWxpemUoKTsKIH0KIAogV0tQYWdlUmVmIFdLVmlld0dl
dFBhZ2UoV0tWaWV3UmVmIHZpZXdSZWYpCiB7Ci0gICAgRXdrVmlldyogdmlldyA9IEV3a1ZpZXc6
OmZyb21FdmFzT2JqZWN0KHRvSW1wbCh2aWV3UmVmKSk7CisgICAgcmV0dXJuIHRvSW1wbCh2aWV3
UmVmKS0+cGFnZVJlZigpOworfQogCi0gICAgcmV0dXJuIHZpZXctPndrUGFnZSgpOwordm9pZCBX
S1ZpZXdTZXRUaGVtZVBhdGgoV0tWaWV3UmVmIHZpZXdSZWYsIFdLU3RyaW5nUmVmIHRoZW1lKQor
eworICAgIHRvSW1wbCh2aWV3UmVmKS0+c2V0VGhlbWVQYXRoKHRoZW1lKTsKIH0KIAotV0tJbWFn
ZVJlZiBXS1ZpZXdDcmVhdGVTbmFwc2hvdChXS1ZpZXdSZWYgdmlld1JlZikKK3ZvaWQgV0tWaWV3
U3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKFdLVmlld1JlZiB2aWV3UmVmKQog
ewotICAgIEV3a1ZpZXcqIHZpZXcgPSBFd2tWaWV3Ojpmcm9tRXZhc09iamVjdCh0b0ltcGwodmll
d1JlZikpOworICAgIHRvSW1wbCh2aWV3UmVmKS0+c3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRB
bmltYXRpb25zKCk7Cit9CiAKLSAgICByZXR1cm4gV0tJbWFnZUNyZWF0ZUZyb21DYWlyb1N1cmZh
Y2Uodmlldy0+dGFrZVNuYXBzaG90KCkuZ2V0KCksIDAgLyogb3B0aW9ucyAqLyk7Cit2b2lkIFdL
Vmlld1Jlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKFdLVmlld1JlZiB2aWV3UmVm
KQoreworICAgIHRvSW1wbCh2aWV3UmVmKS0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1h
dGlvbnMoKTsKK30KKworRXZhc19PYmplY3QqIFdLVmlld0dldEV2YXNPYmplY3QoV0tWaWV3UmVm
IHZpZXdSZWYpCit7CisgICAgcmV0dXJuIHRvSW1wbCh2aWV3UmVmKS0+ZXZhc09iamVjdCgpOwor
fQorCitXS0ltYWdlUmVmIFdLVmlld0NyZWF0ZVNuYXBzaG90KFdLVmlld1JlZiB2aWV3UmVmKQor
eworICAgIEV3a1ZpZXcqIGV3a1ZpZXcgPSBFd2tWaWV3Ojpmcm9tRXZhc09iamVjdCh0b0ltcGwo
dmlld1JlZiktPmV2YXNPYmplY3QoKSk7CisgICAgcmV0dXJuIFdLSW1hZ2VDcmVhdGVGcm9tQ2Fp
cm9TdXJmYWNlKGV3a1ZpZXctPnRha2VTbmFwc2hvdCgpLmdldCgpLCAwIC8qIG9wdGlvbnMgKi8p
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1Zp
ZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmgKaW5kZXgg
Y2M3MzA3Y2Y0Y2I0OTI2MzZlOGE4MmNhYzFhM2FmMTA1YzkxOWZkZS4uZDViNDMyZDhlYTEzMTU0
Mjg3ZmE4ZDRhODdjNDhiNDBiOGQyMmYxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0MvZWZsL1dLVmlldy5oCkBAIC0yNCw4ICsyNCwxMCBAQAogCiAjaWYgVVNFKEVPKQogdHlw
ZWRlZiBzdHJ1Y3QgX0VvIEV2YXM7Cit0eXBlZGVmIHN0cnVjdCBfRW8gRXZhc19PYmplY3Q7CiAj
ZWxzZQogdHlwZWRlZiBzdHJ1Y3QgX0V2YXMgRXZhczsKK3R5cGVkZWYgc3RydWN0IF9FdmFzX09i
amVjdCBFdmFzX09iamVjdDsKICNlbmRpZgogCiAjaWZkZWYgX19jcGx1c3BsdXMKQEAgLTM2LDkg
KzM4LDE5IEBAIFdLX0VYUE9SVCBXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlKEV2YXMqIGNhbnZhcywg
V0tDb250ZXh0UmVmIGNvbnRleHQsIFdLUGFnZUdyb3VwCiAKIFdLX0VYUE9SVCBXS1ZpZXdSZWYg
V0tWaWV3Q3JlYXRlV2l0aEZpeGVkTGF5b3V0KEV2YXMqIGNhbnZhcywgV0tDb250ZXh0UmVmIGNv
bnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCk7CiAKLVdLX0VYUE9SVCBXS1BhZ2VSZWYg
V0tWaWV3R2V0UGFnZShXS1ZpZXdSZWYgdmlldyk7CitXS19FWFBPUlQgdm9pZCBXS1ZpZXdJbml0
aWFsaXplKFdLVmlld1JlZik7CiAKLVdLX0VYUE9SVCBXS0ltYWdlUmVmIFdLVmlld0NyZWF0ZVNu
YXBzaG90KFdLVmlld1JlZiB2aWV3UmVmKTsKK1dLX0VYUE9SVCBXS1BhZ2VSZWYgV0tWaWV3R2V0
UGFnZShXS1ZpZXdSZWYpOworCitXS19FWFBPUlQgdm9pZCBXS1ZpZXdTZXRUaGVtZVBhdGgoV0tW
aWV3UmVmLCBXS1N0cmluZ1JlZik7CisKK1dLX0VYUE9SVCB2b2lkIFdLVmlld1N1c3BlbmRBY3Rp
dmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyhXS1ZpZXdSZWYpOworV0tfRVhQT1JUIHZvaWQgV0tW
aWV3UmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoV0tWaWV3UmVmKTsKKworLy8g
RklYTUU6IFRoZSBsb25nIHRlcm0gcGxhbiBpcyB0byBnZXQgcmlkIG9mIHRoaXMsIHNvIGtlZXAg
dXNhZ2UgdG8gYSBiYXJlIG1pbmltdW0uCitXS19FWFBPUlQgRXZhc19PYmplY3QqIFdLVmlld0dl
dEV2YXNPYmplY3QoV0tWaWV3UmVmKTsKKworV0tfRVhQT1JUIFdLSW1hZ2VSZWYgV0tWaWV3Q3Jl
YXRlU25hcHNob3QoV0tWaWV3UmVmKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCmluZGV4IDEzM2ExNWY4ZGRh
ZjAxY2Q0MWFiZjU4NDdiM2Y0ZWE5ODBmMzdjZTUuLmNkYTM3MDJhMjE1NGU4ZjdjMDU5OTU4MWQ1
MDg4ZWFlZjJhM2I0MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL0V3a1ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3
a1ZpZXcuY3BwCkBAIC0zOCw3ICszOCw5IEBACiAjaW5jbHVkZSAiV0tEaWN0aW9uYXJ5LmgiCiAj
aW5jbHVkZSAiV0tHZW9tZXRyeS5oIgogI2luY2x1ZGUgIldLTnVtYmVyLmgiCisjaW5jbHVkZSAi
V0tQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJXS1N0cmluZy5oIgorI2luY2x1ZGUgIldLVmlldy5o
IgogI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJJbWFnZS5oIgogI2luY2x1
ZGUgIldlYlBhZ2VHcm91cC5oIgpAQCAtMTEwLDE0ICsxMTIsMTQgQEAgY29uc3QgRXZhc19PYmpl
Y3QqIEV3a1ZpZXc6OnZpZXdGcm9tUGFnZVZpZXdNYXAoY29uc3QgV0tQYWdlUmVmIHBhZ2UpCiAg
ICAgcmV0dXJuIHBhZ2VWaWV3TWFwKCkuZ2V0KHBhZ2UpOwogfQogCi1Fd2tWaWV3OjpFd2tWaWV3
KEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQs
IFBhc3NSZWZQdHI8V2ViUGFnZUdyb3VwPiBwYWdlR3JvdXAsIFZpZXdCZWhhdmlvciBiZWhhdmlv
cikKLSAgICA6IG1fZXZhc09iamVjdChldmFzT2JqZWN0KQorRXdrVmlldzo6RXdrVmlldyhFdmFz
X09iamVjdCogdmlldywgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXZWJQYWdlR3Jv
dXAqIHBhZ2VHcm91cCwgVmlld0JlaGF2aW9yIGJlaGF2aW9yKQorICAgIDogbV9ldmFzT2JqZWN0
KHZpZXcpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCiAgICAgLCBtX3BlbmRpbmdTdXJmYWNlUmVzaXplKGZhbHNlKQogI2VuZGlmCiAg
ICAgLCBtX3BhZ2VDbGllbnQoYmVoYXZpb3IgPT0gRGVmYXVsdEJlaGF2aW9yID8gUGFnZUNsaWVu
dERlZmF1bHRJbXBsOjpjcmVhdGUodGhpcykgOiBQYWdlQ2xpZW50TGVnYWN5SW1wbDo6Y3JlYXRl
KHRoaXMpKQotICAgICwgbV9wYWdlUHJveHkobV9jb250ZXh0LT53ZWJDb250ZXh0KCktPmNyZWF0
ZVdlYlBhZ2UobV9wYWdlQ2xpZW50LmdldCgpLCBwYWdlR3JvdXAuZ2V0KCkpKQorICAgICwgbV93
ZWJWaWV3KGFkb3B0UmVmKG5ldyBXZWJWaWV3KG1fY29udGV4dC0+d2ViQ29udGV4dCgpLmdldCgp
LCBtX3BhZ2VDbGllbnQuZ2V0KCksIHBhZ2VHcm91cCwgdmlldykpKQogICAgICwgbV9wYWdlTG9h
ZENsaWVudChQYWdlTG9hZENsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQogICAgICwgbV9wYWdlUG9s
aWN5Q2xpZW50KFBhZ2VQb2xpY3lDbGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKICAgICAsIG1fcGFn
ZVVJQ2xpZW50KFBhZ2VVSUNsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQpAQCAtMTI3LDcgKzEyOSw3
IEBAIEV3a1ZpZXc6OkV3a1ZpZXcoRXZhc19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8
RXdrQ29udGV4dD4gY29udGV4dCwgUGFzc1JlCiAjaWYgRU5BQkxFKFZJQlJBVElPTikKICAgICAs
IG1fdmlicmF0aW9uQ2xpZW50KFZpYnJhdGlvbkNsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQogI2Vu
ZGlmCi0gICAgLCBtX2JhY2tGb3J3YXJkTGlzdChFd2tCYWNrRm9yd2FyZExpc3Q6OmNyZWF0ZSh0
b0FQSShtX3BhZ2VQcm94eS0+YmFja0ZvcndhcmRMaXN0KCkpKSkKKyAgICAsIG1fYmFja0Zvcndh
cmRMaXN0KEV3a0JhY2tGb3J3YXJkTGlzdDo6Y3JlYXRlKFdLUGFnZUdldEJhY2tGb3J3YXJkTGlz
dCh3a1BhZ2UoKSkpKQogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQogICAgICwgbV9wYWdl
U2NhbGVGYWN0b3IoMSkKICNlbmRpZgpAQCAtMTQ0LDI5ICsxNDYsMTggQEAgRXdrVmlldzo6RXdr
VmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250
ZXh0LCBQYXNzUmUKIHsKICAgICBBU1NFUlQobV9ldmFzT2JqZWN0KTsKICAgICBBU1NFUlQobV9j
b250ZXh0KTsKLSAgICBBU1NFUlQobV9wYWdlUHJveHkpOwogCi0jaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQotICAgIG1fcGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+
c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQodHJ1ZSk7Ci0gICAgbV9wYWdlUHJveHkt
PnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRGb3JjZUNvbXBvc2l0aW5nTW9kZSh0cnVl
KTsKLSNpZiBFTkFCTEUoV0VCR0wpCi0gICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVm
ZXJlbmNlcygpLT5zZXRXZWJHTEVuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKLSAgICBpZiAoYmVoYXZp
b3IgPT0gRGVmYXVsdEJlaGF2aW9yKQotICAgICAgICBtX3BhZ2VQcm94eS0+c2V0VXNlRml4ZWRM
YXlvdXQodHJ1ZSk7Ci0jZW5kaWYKKyAgICBXS1ZpZXdJbml0aWFsaXplKHdrVmlldygpKTsKIAot
ICAgIG1fcGFnZVByb3h5LT5pbml0aWFsaXplV2ViUGFnZSgpOworICAgIFdLUGFnZVNldFVzZUZp
eGVkTGF5b3V0KHdrUGFnZSgpLCBiZWhhdmlvciA9PSBEZWZhdWx0QmVoYXZpb3IpOwogCi0jaWYg
RU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIG1fcGFnZVByb3h5LT5mdWxsU2NyZWVuTWFuYWdl
cigpLT5zZXRXZWJWaWV3KG1fZXZhc09iamVjdCk7Ci0gICAgbV9wYWdlUHJveHktPnBhZ2VHcm91
cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRGdWxsU2NyZWVuRW5hYmxlZCh0cnVlKTsKLSNlbmRpZgot
I2lmIEVOQUJMRShXRUJfQVVESU8pCi0gICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVm
ZXJlbmNlcygpLT5zZXRXZWJBdWRpb0VuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKKyAgICBXS1BhZ2VH
cm91cFJlZiB3a1BhZ2VHcm91cCA9IFdLUGFnZUdldFBhZ2VHcm91cCh3a1BhZ2UoKSk7CisgICAg
V0tQcmVmZXJlbmNlc1JlZiB3a1ByZWZlcmVuY2VzID0gV0tQYWdlR3JvdXBHZXRQcmVmZXJlbmNl
cyh3a1BhZ2VHcm91cCk7CiAKLSAgICBtX3BhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVu
Y2VzKCktPnNldE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCh0cnVlKTsKKyAgICBX
S1ByZWZlcmVuY2VzU2V0V2ViR0xFbmFibGVkKHdrUHJlZmVyZW5jZXMsIHRydWUpOworICAgIFdL
UHJlZmVyZW5jZXNTZXRGdWxsU2NyZWVuRW5hYmxlZCh3a1ByZWZlcmVuY2VzLCB0cnVlKTsKKyAg
ICBXS1ByZWZlcmVuY2VzU2V0V2ViQXVkaW9FbmFibGVkKHdrUHJlZmVyZW5jZXMsIHRydWUpOwor
ICAgIFdLUHJlZmVyZW5jZXNTZXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQod2tQ
cmVmZXJlbmNlcywgdHJ1ZSk7CiAKICAgICAvLyBFbmFibGUgbW91c2UgZXZlbnRzIGJ5IGRlZmF1
bHQKICAgICBzZXRNb3VzZUV2ZW50c0VuYWJsZWQodHJ1ZSk7CkBAIC0xODIsOCArMTczLDYgQEAg
RXdrVmlldzo6RXdrVmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tD
b250ZXh0PiBjb250ZXh0LCBQYXNzUmUKIAogRXdrVmlldzo6fkV3a1ZpZXcoKQogewotICAgIG1f
cGFnZVByb3h5LT5jbG9zZSgpOwotCiAgICAgLy8gVW5yZWdpc3RlciBpY29uIGNoYW5nZSBjYWxs
YmFjay4KICAgICBFd2tGYXZpY29uRGF0YWJhc2UqIGljb25EYXRhYmFzZSA9IG1fY29udGV4dC0+
ZmF2aWNvbkRhdGFiYXNlKCk7CiAgICAgQVNTRVJUKGljb25EYXRhYmFzZSk7CkBAIC0yMTEsOSAr
MjAwLDkgQEAgRXdrVmlldyogRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QoY29uc3QgRXZhc19PYmpl
Y3QqIHZpZXcpCiAgKiBAaW50ZXJuYWwKICAqIFJldHJpZXZlcyB0aGUgaW50ZXJuYWwgV0tQYWdl
IGZvciB0aGlzIHZpZXcuCiAgKi8KLVdLUGFnZVJlZiBFd2tWaWV3Ojp3a1BhZ2UoKQorV0tQYWdl
UmVmIEV3a1ZpZXc6OndrUGFnZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRvQVBJKG1fcGFnZVBy
b3h5LmdldCgpKTsKKyAgICByZXR1cm4gV0tWaWV3R2V0UGFnZSh3a1ZpZXcoKSk7CiB9CiAKIHZv
aWQgRXdrVmlldzo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYgY3Vyc29yKQpAQCAtMjk3LDcgKzI4
Niw3IEBAIHZvaWQgRXdrVmlldzo6c2V0RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGUpCiAK
IGZsb2F0IEV3a1ZpZXc6OmRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bV9wYWdlUHJveHktPmRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgcmV0dXJuIFdLUGFnZUdldEJh
Y2tpbmdTY2FsZUZhY3Rvcih3a1BhZ2UoKSk7CiB9CiAKIEFmZmluZVRyYW5zZm9ybSBFd2tWaWV3
Ojp0cmFuc2Zvcm1Gcm9tU2NlbmUoKSBjb25zdApAQCAtNTIzLDcgKzUxMiw3IEBAIGJvb2wgRXdr
Vmlldzo6aXNWaXNpYmxlKCkgY29uc3QKIAogY29uc3QgY2hhciogRXdrVmlldzo6dGl0bGUoKSBj
b25zdAogewotICAgIG1fdGl0bGUgPSBtX3BhZ2VQcm94eS0+cGFnZVRpdGxlKCkudXRmOCgpLmRh
dGEoKTsKKyAgICBtX3RpdGxlID0gV0tFaW5hU2hhcmVkU3RyaW5nKEFkb3B0V0ssIFdLUGFnZUNv
cHlUaXRsZSh3a1BhZ2UoKSkpOwogCiAgICAgcmV0dXJuIG1fdGl0bGU7CiB9CkBAIC01NDYsMjQg
KzUzNSwyNiBAQCB2b2lkIEV3a1ZpZXc6OnNldFRoZW1lUGF0aChjb25zdCBjaGFyKiB0aGVtZSkK
IHsKICAgICBpZiAobV90aGVtZSAhPSB0aGVtZSkgewogICAgICAgICBtX3RoZW1lID0gdGhlbWU7
Ci0gICAgICAgIG1fcGFnZVByb3h5LT5zZXRUaGVtZVBhdGgodGhlbWUpOworICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gd2tUaGVtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcodGhlbWUpKTsKKyAgICAgICAgV0tWaWV3U2V0VGhlbWVQYXRoKHdrVmlldygp
LCB3a1RoZW1lLmdldCgpKTsKICAgICB9CiB9CiAKIGNvbnN0IGNoYXIqIEV3a1ZpZXc6OmN1c3Rv
bVRleHRFbmNvZGluZ05hbWUoKSBjb25zdAogewotICAgIFN0cmluZyBjdXN0b21FbmNvZGluZyA9
IG1fcGFnZVByb3h5LT5jdXN0b21UZXh0RW5jb2RpbmdOYW1lKCk7Ci0gICAgaWYgKGN1c3RvbUVu
Y29kaW5nLmlzRW1wdHkoKSkKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gY3VzdG9tRW5j
b2RpbmcgPSBhZG9wdFdLKFdLUGFnZUNvcHlDdXN0b21UZXh0RW5jb2RpbmdOYW1lKHdrUGFnZSgp
KSk7CisgICAgaWYgKFdLU3RyaW5nSXNFbXB0eShjdXN0b21FbmNvZGluZy5nZXQoKSkpCiAgICAg
ICAgIHJldHVybiAwOwogCi0gICAgbV9jdXN0b21FbmNvZGluZyA9IGN1c3RvbUVuY29kaW5nLnV0
ZjgoKS5kYXRhKCk7CisgICAgbV9jdXN0b21FbmNvZGluZyA9IFdLRWluYVNoYXJlZFN0cmluZyhj
dXN0b21FbmNvZGluZy5nZXQoKSk7CiAKICAgICByZXR1cm4gbV9jdXN0b21FbmNvZGluZzsKIH0K
IAogdm9pZCBFd2tWaWV3OjpzZXRDdXN0b21UZXh0RW5jb2RpbmdOYW1lKGNvbnN0IFN0cmluZyYg
ZW5jb2RpbmcpCiB7Ci0gICAgbV9wYWdlUHJveHktPnNldEN1c3RvbVRleHRFbmNvZGluZ05hbWUo
ZW5jb2RpbmcpOworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a0VuY29kaW5nID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhlbmNvZGluZy51dGY4KCkuZGF0YSgp
KSk7CisgICAgV0tQYWdlU2V0Q3VzdG9tVGV4dEVuY29kaW5nTmFtZSh3a1BhZ2UoKSwgd2tFbmNv
ZGluZy5nZXQoKSk7CiB9CiAKIHZvaWQgRXdrVmlldzo6c2V0TW91c2VFdmVudHNFbmFibGVkKGJv
b2wgZW5hYmxlZCkKQEAgLTY0NSw5ICs2MzYsNiBAQCBib29sIEV3a1ZpZXc6OmNyZWF0ZUdMU3Vy
ZmFjZShjb25zdCBJbnRTaXplJiB2aWV3U2l6ZSkKICAgICAgICAgaWYgKCFtX2V2YXNHTCkgewog
ICAgICAgICAgICAgV0FSTigiRmFpbGVkIHRvIGNyZWF0ZSBFdmFzX0dMLCBmYWxsaW5nIGJhY2sg
dG8gc29mdHdhcmUgbW9kZS4iKTsKICAgICAgICAgICAgIG1faXNIYXJkd2FyZUFjY2VsZXJhdGVk
ID0gZmFsc2U7Ci0jaWYgRU5BQkxFKFdFQkdMKQotICAgICAgICAgICAgbV9wYWdlUHJveHktPnBh
Z2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRXZWJHTEVuYWJsZWQoZmFsc2UpOwotI2VuZGlm
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CkBAIC04OTAsMTUg
Kzg3OCwxMyBAQCB1bnNpZ25lZCBsb25nIGxvbmcgRXdrVmlldzo6aW5mb3JtRGF0YWJhc2VRdW90
YVJlYWNoZWQoY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbQogICovCiB2b2lkIEV3a1ZpZXc6Omlu
Zm9ybVVSTENoYW5nZSgpCiB7Ci0gICAgU3RyaW5nIGFjdGl2ZVVSTCA9IG1fcGFnZVByb3h5LT5h
Y3RpdmVVUkwoKTsKLSAgICBpZiAoYWN0aXZlVVJMLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
OworICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB3a0FjdGl2ZVVSTCA9IGFkb3B0V0soV0tQYWdl
Q29weUFjdGl2ZVVSTCh3a1BhZ2UoKSkpOworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3
a1VSTFN0cmluZyA9IGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHdrQWN0aXZlVVJMLmdldCgpKSk7
CiAKLSAgICBDU3RyaW5nIHJhd0FjdGl2ZVVSTCA9IGFjdGl2ZVVSTC51dGY4KCk7Ci0gICAgaWYg
KG1fdXJsID09IHJhd0FjdGl2ZVVSTC5kYXRhKCkpCisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcod2tVUkxTdHJpbmcuZ2V0KCksIG1fdXJsKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgbV91cmwgPSByYXdBY3RpdmVVUkwuZGF0YSgpOworICAgIG1fdXJsID0gV0tFaW5hU2hh
cmVkU3RyaW5nKHdrVVJMU3RyaW5nLmdldCgpKTsKICAgICBzbWFydENhbGxiYWNrPFVSTENoYW5n
ZWQ+KCkuY2FsbChtX3VybCk7CiAKICAgICAvLyBVcGRhdGUgdGhlIHZpZXcncyBmYXZpY29uLgpA
QCAtMTAzMCw3ICsxMDE2LDcgQEAgdm9pZCBFd2tWaWV3OjpvbkZhdmljb25DaGFuZ2VkKGNvbnN0
IGNoYXIqIHBhZ2VVUkwsIHZvaWQqIGV2ZW50SW5mbykKIFBhc3NSZWZQdHI8Y2Fpcm9fc3VyZmFj
ZV90PiBFd2tWaWV3Ojp0YWtlU25hcHNob3QoKQogewogICAgIC8vIFN1c3BlbmQgYWxsIGFuaW1h
dGlvbnMgYmVmb3JlIHRha2luZyB0aGUgc25hcHNob3QuCi0gICAgbV9wYWdlUHJveHktPnN1c3Bl
bmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworICAgIFdLVmlld1N1c3BlbmRBY3Rp
dmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyh3a1ZpZXcoKSk7CiAKICAgICAvLyBXYWl0IGZvciB0
aGUgcGVuZGluZyByZXBhaW50IGV2ZW50cyB0byBiZSBwcm9jZXNzZWQuCiAgICAgd2hpbGUgKG1f
ZGlzcGxheVRpbWVyLmlzQWN0aXZlKCkpCkBAIC0xMDQyLDcgKzEwMjgsNyBAQCBQYXNzUmVmUHRy
PGNhaXJvX3N1cmZhY2VfdD4gRXdrVmlldzo6dGFrZVNuYXBzaG90KCkKICNlbmRpZgogICAgICAg
ICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzbmFwc2hvdCA9IGNyZWF0ZVN1cmZhY2VGb3JJbWFn
ZShzZC0+aW1hZ2UpOwogICAgICAgICAvLyBSZXN1bWUgYWxsIGFuaW1hdGlvbnMuCi0gICAgICAg
IG1fcGFnZVByb3h5LT5yZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworICAg
ICAgICBXS1ZpZXdSZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyh3a1ZpZXcoKSk7
CiAKICAgICAgICAgcmV0dXJuIHNuYXBzaG90LnJlbGVhc2UoKTsKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCkBAIC0xMDUwLDcgKzEwMzYsNyBAQCBQYXNzUmVmUHRyPGNhaXJvX3N1
cmZhY2VfdD4gRXdrVmlldzo6dGFrZVNuYXBzaG90KCkKIAogICAgIFJlZlB0cjxjYWlyb19zdXJm
YWNlX3Q+IHNuYXBzaG90ID0gZ2V0SW1hZ2VTdXJmYWNlRnJvbUZyYW1lQnVmZmVyKDAsIDAsIHNk
LT52aWV3LncsIHNkLT52aWV3LmgpOwogICAgIC8vIFJlc3VtZSBhbGwgYW5pbWF0aW9ucy4KLSAg
ICBtX3BhZ2VQcm94eS0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKKyAg
ICBXS1ZpZXdSZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyh3a1ZpZXcoKSk7CiAK
ICAgICByZXR1cm4gc25hcHNob3QucmVsZWFzZSgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKaW5kZXggYTIxM2Y5N2Q1ZWJiNDE5NjMxNmE5ZWFj
ZTEyOGI5YTIyOWVkNTAwZC4uYTNkMTZlMDY4ZGMxOTAyM2JhYWVmZjkwOGU4YzY4YTRlNzFmMjNk
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaApAQCAtNDks
NiArNDksMTAgQEAKICNpbmNsdWRlICJFdmFzR0xTdXJmYWNlLmgiCiAjZW5kaWYKIAorI2luY2x1
ZGUgIldlYkNvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJX
ZWJQcmVmZXJlbmNlcy5oIgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIENvbnRleHRNZW51
Q2xpZW50RWZsOwogY2xhc3MgRmluZENsaWVudEVmbDsKQEAgLTk2LDIxICsxMDAsNTIgQEAgdHlw
ZWRlZiBzdHJ1Y3QgX0V2YXNfR0xfU3VyZmFjZSBFdmFzX0dMX1N1cmZhY2U7CiAKIHR5cGVkZWYg
c3RydWN0IEV3a19WaWV3X1NtYXJ0X0RhdGEgRXdrX1ZpZXdfU21hcnRfRGF0YTsKIAotY2xhc3Mg
RXdrVmlldyB7CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViVmlldyA6IHB1YmxpYyBB
UElPYmplY3QgewogcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBUeXBlIEFQSVR5cGUgPSBUeXBl
VmlldzsKKworICAgIFdlYlZpZXcoV2ViQ29udGV4dCosIFBhZ2VDbGllbnQqLCBXZWJQYWdlR3Jv
dXAqLCBFdmFzX09iamVjdCopOworICAgIHZpcnR1YWwgfldlYlZpZXcoKTsKIAorICAgIHZvaWQg
aW5pdGlhbGl6ZSgpOworCisgICAgV0tQYWdlUmVmIHBhZ2VSZWYoKSBjb25zdCB7IHJldHVybiB0
b0FQSShtX3dlYlBhZ2VQcm94eS5nZXQoKSk7IH0KKworICAgIHZvaWQgc2V0VGhlbWVQYXRoKFdL
U3RyaW5nUmVmKTsKKyAgICB2b2lkIHN1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9u
cygpOworICAgIHZvaWQgcmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKKwor
ICAgIC8vIEZJWE1FOiBSZW1vdmUgd2hlbiBwb3NzaWJsZS4KKyAgICBFdmFzX09iamVjdCogZXZh
c09iamVjdCgpIHsgcmV0dXJuIG1fZXZhc09iamVjdDsgfQorICAgIFdlYlBhZ2VQcm94eSogcGFn
ZSgpIHsgcmV0dXJuIG1fd2ViUGFnZVByb3h5LmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgdmly
dHVhbCBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBBUElUeXBlOyB9CisKKyAgICBXVEY6OlJl
ZlB0cjxXZWJQYWdlUHJveHk+IG1fd2ViUGFnZVByb3h5OworICAgIEV2YXNfT2JqZWN0KiBtX2V2
YXNPYmplY3Q7Cit9OworCit9CisKK2NsYXNzIEV3a1ZpZXcgeworcHVibGljOgogICAgIGVudW0g
Vmlld0JlaGF2aW9yIHsKICAgICAgICAgTGVnYWN5QmVoYXZpb3IsCiAgICAgICAgIERlZmF1bHRC
ZWhhdmlvcgogICAgIH07Ci0gICAgRXdrVmlldyhFdmFzX09iamVjdCogdmlldywgUGFzc1JlZlB0
cjxFd2tDb250ZXh0PiBjb250ZXh0LCBQYXNzUmVmUHRyPFdlYktpdDo6V2ViUGFnZUdyb3VwPiBw
YWdlR3JvdXAsIFZpZXdCZWhhdmlvcik7CisgICAgRXdrVmlldyhFdmFzX09iamVjdCogdmlldywg
UGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXZWJLaXQ6OldlYlBhZ2VHcm91cCogcGFn
ZUdyb3VwLCBWaWV3QmVoYXZpb3IpOwogICAgIH5Fd2tWaWV3KCk7CiAKICAgICBzdGF0aWMgRXdr
VmlldyogZnJvbUV2YXNPYmplY3QoY29uc3QgRXZhc19PYmplY3QqIHZpZXcpOwogICAgIEV2YXNf
T2JqZWN0KiB2aWV3KCkgeyByZXR1cm4gbV9ldmFzT2JqZWN0OyB9CiAKLSAgICBXS1BhZ2VSZWYg
d2tQYWdlKCk7Ci0gICAgV2ViS2l0OjpXZWJQYWdlUHJveHkqIHBhZ2UoKSB7IHJldHVybiBtX3Bh
Z2VQcm94eS5nZXQoKTsgfQorICAgIFdLVmlld1JlZiB3a1ZpZXcoKSBjb25zdCB7IHJldHVybiB0
b0FQSShtX3dlYlZpZXcuZ2V0KCkpOyB9CisgICAgV0tQYWdlUmVmIHdrUGFnZSgpIGNvbnN0Owor
CisgICAgV2ViS2l0OjpXZWJQYWdlUHJveHkqIHBhZ2UoKSB7IHJldHVybiBtX3dlYlZpZXctPnBh
Z2UoKTsgfQogICAgIEV3a0NvbnRleHQqIGV3a0NvbnRleHQoKSB7IHJldHVybiBtX2NvbnRleHQu
Z2V0KCk7IH0KICAgICBFd2tTZXR0aW5ncyogc2V0dGluZ3MoKSB7IHJldHVybiBtX3NldHRpbmdz
LmdldCgpOyB9CiAgICAgRXdrQmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3QoKSB7IHJl
dHVybiBtX2JhY2tGb3J3YXJkTGlzdC5nZXQoKTsgfQpAQCAtMjQ1LDcgKzI4MCw3IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBtX3BlbmRpbmdTdXJmYWNlUmVzaXplOwogI2VuZGlmCiAgICAgT3duUHRy
PFdlYktpdDo6UGFnZUNsaWVudEJhc2U+IG1fcGFnZUNsaWVudDsKLSAgICBSZWZQdHI8V2ViS2l0
OjpXZWJQYWdlUHJveHk+IG1fcGFnZVByb3h5OworICAgIFJlZlB0cjxXZWJLaXQ6OldlYlZpZXc+
IG1fd2ViVmlldzsKICAgICBPd25QdHI8V2ViS2l0OjpQYWdlTG9hZENsaWVudEVmbD4gbV9wYWdl
TG9hZENsaWVudDsKICAgICBPd25QdHI8V2ViS2l0OjpQYWdlUG9saWN5Q2xpZW50RWZsPiBtX3Bh
Z2VQb2xpY3lDbGllbnQ7CiAgICAgT3duUHRyPFdlYktpdDo6UGFnZVVJQ2xpZW50RWZsPiBtX3Bh
Z2VVSUNsaWVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a192aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3
LmNwcAppbmRleCA3MmE2YWZhYTNlZWMxMDg1NTlhZmRhZjg3NjM4MmZiNWMzNzNjYzExLi5jYWUw
NDI1OGY0Y2JmZDQwMmExMmI4ZTVjNzc3MGU4MTRhMGY2NDFiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCkBAIC01MDUsNyArNTA1LDcgQEAgc3Rh
dGljIGlubGluZSBFdmFzX1NtYXJ0KiBjcmVhdGVFd2tWaWV3U21hcnRDbGFzcyh2b2lkKQogICAg
IHJldHVybiBzbWFydDsKIH0KIAotc3RhdGljIGlubGluZSBFdmFzX09iamVjdCogY3JlYXRlRXdr
VmlldyhFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBQYXNzUmVmUHRyPEV3a0NvbnRl
eHQ+IGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiA9IDAsIEV3a1ZpZXc6OlZp
ZXdCZWhhdmlvciBiZWhhdmlvciA9IEV3a1ZpZXc6OkRlZmF1bHRCZWhhdmlvcikKK3N0YXRpYyBp
bmxpbmUgRXdrVmlldyogY3JlYXRlRXdrVmlldyhFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNt
YXJ0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VH
cm91cFJlZiA9IDAsIEV3a1ZpZXc6OlZpZXdCZWhhdmlvciBiZWhhdmlvciA9IEV3a1ZpZXc6OkRl
ZmF1bHRCZWhhdmlvcikKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY2Fu
dmFzLCAwKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnQsIDApOwpA
QCAtNTI1LDIxICs1MjUsMjIgQEAgc3RhdGljIGlubGluZSBFdmFzX09iamVjdCogY3JlYXRlRXdr
VmlldyhFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBQYXNzUmUKICAgICAvLyBEZWZh
dWx0IFdlYlBhZ2VHcm91cCBpcyBjcmVhdGVkIGluIFdlYkNvbnRleHQgY29uc3RydWN0b3IgaWYg
dGhlIHBhZ2VHcm91cFJlZiBpcyAwLAogICAgIC8vIHNvIHdlIGRvIG5vdCBuZWVkIHRvIGNyZWF0
ZSBpdCBoZXJlLgogICAgIHNtYXJ0RGF0YS0+cHJpdiA9IG5ldyBFd2tWaWV3KGV3a1ZpZXcsIGNv
bnRleHQsIHRvSW1wbChwYWdlR3JvdXBSZWYpLCBiZWhhdmlvcik7Ci0gICAgcmV0dXJuIGV3a1Zp
ZXc7CisKKyAgICByZXR1cm4gc21hcnREYXRhLT5wcml2OwogfQogCiAvKioKICAqIEBpbnRlcm5h
bAogICogQ29uc3RydWN0cyBhIGV3a192aWV3IEV2YXNfT2JqZWN0IHdpdGggV0tUeXBlIHBhcmFt
ZXRlcnMuCiAgKi8KLUV2YXNfT2JqZWN0KiBld2tfdmlld19iYXNlX2FkZChFdmFzKiBjYW52YXMs
IFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIEV3
a1ZpZXc6OlZpZXdCZWhhdmlvciBiZWhhdmlvcikKK0V3a1ZpZXcqIGV3a192aWV3X2Jhc2VfYWRk
KEV2YXMqIGNhbnZhcywgV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBh
Z2VHcm91cFJlZiwgRXdrVmlldzo6Vmlld0JlaGF2aW9yIGJlaGF2aW9yKQogewogICAgIHJldHVy
biBjcmVhdGVFd2tWaWV3KGNhbnZhcywgY3JlYXRlRXdrVmlld1NtYXJ0Q2xhc3MoKSwgY29udGV4
dFJlZiA/IEV3a0NvbnRleHQ6OmNyZWF0ZSh0b0ltcGwoY29udGV4dFJlZikpIDogRXdrQ29udGV4
dDo6ZGVmYXVsdENvbnRleHQoKSwgcGFnZUdyb3VwUmVmLCBiZWhhdmlvcik7CiB9CiAKIEV2YXNf
T2JqZWN0KiBld2tfdmlld19zbWFydF9hZGQoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFy
dCwgRXdrX0NvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUV3a1ZpZXcoY2Fu
dmFzLCBzbWFydCwgZXdrX29iamVjdF9jYXN0PEV3a0NvbnRleHQqPihjb250ZXh0KSk7CisgICAg
cmV0dXJuIGNyZWF0ZUV3a1ZpZXcoY2FudmFzLCBzbWFydCwgZXdrX29iamVjdF9jYXN0PEV3a0Nv
bnRleHQqPihjb250ZXh0KSktPnZpZXcoKTsKIH0KIAogRXZhc19PYmplY3QqIGV3a192aWV3X2Fk
ZF93aXRoX2NvbnRleHQoRXZhcyogY2FudmFzLCBFd2tfQ29udGV4dCogY29udGV4dCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaApp
bmRleCA4M2I0Yzk3M2IxYTM2NGNjNzk2OGM4ZjM3OTFhZWNmNmQyNGNlYWFiLi5jNDkxMmZmZDdi
NDFlNGU1MmE3ZjRjNmZhOGQ4MGVhZDRiNDEwNjU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19wcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oCkBAIC0yNSw2ICsyNSw2IEBA
CiAjaW5jbHVkZSA8RXZhcy5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+CiAKLUV2YXNf
T2JqZWN0KiBld2tfdmlld19iYXNlX2FkZChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiwgV0tQ
YWdlR3JvdXBSZWYsIEV3a1ZpZXc6OlZpZXdCZWhhdmlvcik7CitFd2tWaWV3KiBld2tfdmlld19i
YXNlX2FkZChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYsIEV3a1Zp
ZXc6OlZpZXdCZWhhdmlvcik7CiAKICNlbmRpZiAvLyBld2tfdmlld19wcml2YXRlX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5j
cHAKaW5kZXggNDYyYjI2ZDM1MGVlZmVkNzAzMzgyMWU1Nzc0YWFjYWM4NTRjYWE3Zi4uMzE3NDQ5
ZGQxNWU0ZDhlZmUxOTBiOWVhZDQyZWQ3MzNkZjY4ZDMwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAKQEAgLTk4LDE0
ICs5OCwxNSBAQCBXZWJQYWdlUHJveHkqIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0
ZUluc3BlY3RvclBhZ2UoKQogICAgIGlmICghbV9pbnNwZWN0b3JXaW5kb3cpCiAgICAgICAgIHJl
dHVybiAwOwogCi0gICAgbV9pbnNwZWN0b3JWaWV3ID0gZXdrX3ZpZXdfYmFzZV9hZGQoZWNvcmVf
ZXZhc19nZXQobV9pbnNwZWN0b3JXaW5kb3cpLCB0b0FQSShwYWdlKCktPnByb2Nlc3MoKS0+Y29u
dGV4dCgpKSwgdG9BUEkoaW5zcGVjdG9yUGFnZUdyb3VwKCkpLCBFd2tWaWV3OjpMZWdhY3lCZWhh
dmlvcik7Ci0gICAgRXdrVmlldyogaW5zcGVjdG9yVmlld0ltcGwgPSBFd2tWaWV3Ojpmcm9tRXZh
c09iamVjdChtX2luc3BlY3RvclZpZXcpOwotICAgIGluc3BlY3RvclZpZXdJbXBsLT5zZXRUaGVt
ZVBhdGgoVEVTVF9USEVNRV9ESVIgIi9kZWZhdWx0LmVkaiIpOworICAgIC8vIEZJWE1FOiBSZWZh
Y3RvciB0byB1c2UgV0tWaWV3UmVmLgorICAgIG1faW5zcGVjdG9yVmlldyA9IGV3a192aWV3X2Jh
c2VfYWRkKGVjb3JlX2V2YXNfZ2V0KG1faW5zcGVjdG9yV2luZG93KSwgdG9BUEkocGFnZSgpLT5w
cm9jZXNzKCktPmNvbnRleHQoKSksIHRvQVBJKGluc3BlY3RvclBhZ2VHcm91cCgpKSwgRXdrVmll
dzo6TGVnYWN5QmVoYXZpb3IpLT52aWV3KCk7CisgICAgRXdrVmlldyogaW5zcGVjdG9yVmlldyA9
IEV3a1ZpZXc6OmZyb21FdmFzT2JqZWN0KG1faW5zcGVjdG9yVmlldyk7CisgICAgaW5zcGVjdG9y
Vmlldy0+c2V0VGhlbWVQYXRoKFRFU1RfVEhFTUVfRElSICIvZGVmYXVsdC5lZGoiKTsKIAotICAg
IEV3a19TZXR0aW5ncyogc2V0dGluZ3MgPSBpbnNwZWN0b3JWaWV3SW1wbC0+c2V0dGluZ3MoKTsK
KyAgICBFd2tfU2V0dGluZ3MqIHNldHRpbmdzID0gaW5zcGVjdG9yVmlldy0+c2V0dGluZ3MoKTsK
ICAgICBld2tfc2V0dGluZ3NfZmlsZV9hY2Nlc3NfZnJvbV9maWxlX3VybHNfYWxsb3dlZF9zZXQo
c2V0dGluZ3MsIHRydWUpOwogCi0gICAgcmV0dXJuIGluc3BlY3RvclZpZXdJbXBsLT5wYWdlKCk7
CisgICAgcmV0dXJuIGluc3BlY3RvclZpZXctPnBhZ2UoKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1PcGVuKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9lZmwvV2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZp
ZXcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmY3ZDFiYmFlY2ZjN2QxMTM1NzAyN2E3MjlkODNlM2IxNmU3NmI1
NjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZp
ZXcuY3BwCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwg
Q29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViVmlldy5oIgorCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJ
KQorI2luY2x1ZGUgIldlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkuaCIKKyNlbmRpZgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworV2ViVmlldzo6V2ViVmlldyhXZWJDb250ZXh0KiBjb250ZXh0LCBQ
YWdlQ2xpZW50KiBwYWdlQ2xpZW50LCBXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCwgRXZhc19PYmpl
Y3QqIGV2YXNPYmplY3QpCisgICAgOiBtX3dlYlBhZ2VQcm94eShjb250ZXh0LT5jcmVhdGVXZWJQ
YWdlKHBhZ2VDbGllbnQsIHBhZ2VHcm91cCkpCisgICAgLCBtX2V2YXNPYmplY3QoZXZhc09iamVj
dCkKK3sKKyAgICBtX3dlYlBhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNl
dEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKHRydWUpOworICAgIG1fd2ViUGFnZVByb3h5
LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0Rm9yY2VDb21wb3NpdGluZ01vZGUodHJ1
ZSk7CisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgbV93ZWJQYWdlUHJveHktPmZ1
bGxTY3JlZW5NYW5hZ2VyKCktPnNldFdlYlZpZXcobV9ldmFzT2JqZWN0KTsKKyNlbmRpZgorfQor
CitXZWJWaWV3Ojp+V2ViVmlldygpCit7CisgICAgbV93ZWJQYWdlUHJveHktPmNsb3NlKCk7Cit9
CisKK3ZvaWQgV2ViVmlldzo6aW5pdGlhbGl6ZSgpCit7CisgICAgbV93ZWJQYWdlUHJveHktPmlu
aXRpYWxpemVXZWJQYWdlKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6c2V0VGhlbWVQYXRoKFdLU3Ry
aW5nUmVmIHRoZW1lKQoreworICAgIG1fd2ViUGFnZVByb3h5LT5zZXRUaGVtZVBhdGgodG9XVEZT
dHJpbmcodGhlbWUpLnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIFdlYlZpZXc6OnN1c3BlbmRB
Y3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpCit7CisgICAgbV93ZWJQYWdlUHJveHktPnN1
c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworfQorCit2b2lkIFdlYlZpZXc6
OnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCkKK3sKKyAgICBtX3dlYlBhZ2VQ
cm94eS0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZs
L1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjE0ZTFlMWNhMGMwMjdlZDk4MGZkYTQ2MmQ2Yzk1Y2ZlM2MxMzUwZTUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuaApAQCAtMCww
ICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJWaWV3X2gKKyNkZWZpbmUg
V2ViVmlld19oCisKKyNpbmNsdWRlICJBUElPYmplY3QuaCIKKyNpbmNsdWRlICJQYWdlQ2xpZW50
LmgiCisjaW5jbHVkZSAiV2ViQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgor
I2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgiCisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJWaWV3IDogcHVibGljIEFQSU9iamVjdCB7
CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IFR5cGUgQVBJVHlwZSA9IFR5cGVWaWV3OworCisg
ICAgV2ViVmlldyhXZWJDb250ZXh0KiwgUGFnZUNsaWVudCosIFdlYlBhZ2VHcm91cCosIEV2YXNf
T2JqZWN0Kik7CisgICAgdmlydHVhbCB+V2ViVmlldygpOworCisgICAgdm9pZCBpbml0aWFsaXpl
KCk7CisKKyAgICBXS1BhZ2VSZWYgcGFnZVJlZigpIGNvbnN0IHsgcmV0dXJuIHRvQVBJKG1fd2Vi
UGFnZVByb3h5LmdldCgpKTsgfQorCisgICAgdm9pZCBzZXRUaGVtZVBhdGgoV0tTdHJpbmdSZWYp
OworICAgIHZvaWQgc3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7CisgICAg
dm9pZCByZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworCisgICAgLy8gRklY
TUU6IFJlbW92ZSB3aGVuIHBvc3NpYmxlLgorICAgIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0KCkg
eyByZXR1cm4gbV9ldmFzT2JqZWN0OyB9CisgICAgV2ViUGFnZVByb3h5KiBwYWdlKCkgeyByZXR1
cm4gbV93ZWJQYWdlUHJveHkuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIFR5cGUg
dHlwZSgpIGNvbnN0IHsgcmV0dXJuIEFQSVR5cGU7IH0KKworICAgIFdURjo6UmVmUHRyPFdlYlBh
Z2VQcm94eT4gbV93ZWJQYWdlUHJveHk7CisgICAgRXZhc19PYmplY3QqIG1fZXZhc09iamVjdDsK
K307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggZTJiYWZkMGY3NjQ4YjkxMzhhNjcwZTFiZTI3NjJlNTg5NzVjNDc0Yi4u
MWIwODk0YjZmYjQyYmQ5ZmU4ZWIyMWZlMTFlOGVhYzA3OGYwMWNkYiAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDEz
LTAxLTI4ICBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtlbm5ldGhAd2Via2l0Lm9yZz4K
KworICAgICAgICBbRUZMXVtXSzJdIEludHJvZHVjZSBhIFdlYlZpZXcgY2xhc3MgYXMgY291bnRl
cnBhcnQgZm9yIFdLVmlld1JlZgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTA3OTMxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQ2hhbmdlIHBsYXRmb3JtVmlldyB0byBiZSBhIFdLVmlldyBhbmQgdXNlIFdL
Vmlld0dldEV2YXNPYmplY3QKKyAgICAgICAgZm9yIHRoZSBwbGFjZXMgd2hlcmUgYW4gRXZhc19P
YmplY3QgaXMgbmVlZGVkLgorCisgICAgICAgIEluc3RlYWQgb2YgZXh0cmFjdGluZyB0aGUgRWNv
cmVfRXZhcyogZnJvbSB0aGUgbV92aWV3IHdlIHVzZQorICAgICAgICB0aGUgbV93aW5kb3cgaW5z
dGVhZCwgd2hpY2ggYWN0dWFsbHkgaG9sZHMgdGhlIGl0LgorCisgICAgICAgICogVGVzdFdlYktp
dEFQSS9QbGF0Zm9ybVdlYlZpZXcuaDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2VmbC9QbGF0
Zm9ybVdlYlZpZXcuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGxhdGZvcm1XZWJWaWV3
OjpQbGF0Zm9ybVdlYlZpZXcpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGxhdGZvcm1XZWJW
aWV3Ojp+UGxhdGZvcm1XZWJWaWV3KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBsYXRmb3Jt
V2ViVmlldzo6cmVzaXplVG8pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGxhdGZvcm1XZWJW
aWV3OjpwYWdlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBsYXRmb3JtV2ViVmlldzo6c2lt
dWxhdGVTcGFjZWJhcktleVByZXNzKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBsYXRmb3Jt
V2ViVmlldzo6c2ltdWxhdGVNb3VzZU1vdmUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGxh
dGZvcm1XZWJWaWV3OjpzaW11bGF0ZVJpZ2h0Q2xpY2spOgorICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvUGxhdGZvcm1XZWJWaWV3Lmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9lZmwv
RXZlbnRTZW5kZXJQcm94eUVmbC5jcHA6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6
OnNlbmRUb3VjaEV2ZW50KToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6c2V0VG91
Y2hNb2RpZmllcik6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJW
aWV3RWZsLmNwcDoKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZp
ZXcpOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6On5QbGF0Zm9ybVdlYlZpZXcpOgor
ICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6OnJlc2l6ZVRvKToKKyAgICAgICAgKFdUUjo6
UGxhdGZvcm1XZWJWaWV3OjpwYWdlKToKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3Ojpm
b2N1cyk6CisgICAgICAgIChXVFI6OlBsYXRmb3JtV2ViVmlldzo6d2luZG93RnJhbWUpOgorICAg
ICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6OnNldFdpbmRvd0ZyYW1lKToKKyAgICAgICAgKFdU
Ujo6UGxhdGZvcm1XZWJWaWV3Ojp3aW5kb3dTbmFwc2hvdEltYWdlKToKKwogMjAxMy0wMS0yOCAg
UmFwaGFlbCBLdWJvIGRhIENvc3RhICA8cmFwaGFlbC5rdWJvLmRhLmNvc3RhQGludGVsLmNvbT4K
IAogICAgICAgICBbRUZMXSBJbmNsdWRlIEVjb3JlX0dldG9wdC5oIGluIE1pbmlCcm93c2VyLgpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdlYlZpZXcuaCBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XZWJWaWV3LmgKaW5kZXggNWFkMWVlZDBlMWYxZTJiMTFk
MmI5YWNjMDZlMzhkNDk4ZjIzYjVkYy4uZGNhZjQ0ODQyZDZlZmU3OTRmYTRiN2MxYTI4N2MwZDFh
ODU0MzIzYiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdlYlZpZXcu
aAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2ViVmlldy5oCkBAIC00NywxMyAr
NDcsOCBAQCB0eXBlZGVmIEhXTkQgUGxhdGZvcm1XaW5kb3c7CiB0eXBlZGVmIFdLVmlld1JlZiBQ
bGF0Zm9ybVdLVmlldzsKIHR5cGVkZWYgR3RrV2lkZ2V0ICpQbGF0Zm9ybVdpbmRvdzsKICNlbGlm
IFBMQVRGT1JNKEVGTCkKLSNpZiBVU0UoRU8pCi10eXBlZGVmIHN0cnVjdCBfRW8gRXZhc19PYmpl
Y3Q7Ci0jZWxzZQotdHlwZWRlZiBzdHJ1Y3QgX0V2YXNfT2JqZWN0IEV2YXNfT2JqZWN0OwotI2Vu
ZGlmCiB0eXBlZGVmIHN0cnVjdCBfRWNvcmVfRXZhcyBFY29yZV9FdmFzOwotdHlwZWRlZiBFdmFz
X09iamVjdCogUGxhdGZvcm1XS1ZpZXc7Cit0eXBlZGVmIFdLVmlld1JlZiBQbGF0Zm9ybVdLVmll
dzsKIHR5cGVkZWYgRWNvcmVfRXZhcyogUGxhdGZvcm1XaW5kb3c7CiAjZW5kaWYKIApkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwvUGxhdGZvcm1XZWJWaWV3LmNwcCBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvZWZsL1BsYXRmb3JtV2ViVmlldy5jcHAKaW5kZXggZDU0NDllYjRkMTkz
NjE3YWIwYTRjYmE2ZWQ2NjFlZGQzYjA1MzgyNC4uM2M5OTBhZDI2ZjRlZWQzNjFlYzQ2ZjQ4MDkz
MWNiODBjZDJhOTZjZiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwvUGxhdGZv
cm1XZWJWaWV3LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2VmbC9QbGF0Zm9ybVdlYlZp
ZXcuY3BwCkBAIC02NSwzMyArNjUsMzggQEAgUGxhdGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZp
ZXcoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm8KIHsKICAg
ICBtX3dpbmRvdyA9IGluaXRFY29yZUV2YXMoKTsKICAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZh
c19nZXQobV93aW5kb3cpOwotICAgIG1fdmlldyA9IHRvSW1wbChXS1ZpZXdDcmVhdGUoZXZhcywg
Y29udGV4dFJlZiwgcGFnZUdyb3VwUmVmKSk7Ci0gICAgZXdrX3ZpZXdfdGhlbWVfc2V0KG1fdmll
dywgVEhFTUVfRElSIi9kZWZhdWx0LmVkaiIpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxi
YWNrX2FkZChtX3ZpZXcsICJ3ZWJwcm9jZXNzLGNyYXNoZWQiLCBvbldlYlByb2Nlc3NDcmFzaGVk
LCAwKTsKKyAgICBtX3ZpZXcgPSBXS1ZpZXdDcmVhdGUoZXZhcywgY29udGV4dFJlZiwgcGFnZUdy
b3VwUmVmKTsKKyAgICBld2tfdmlld190aGVtZV9zZXQoV0tWaWV3R2V0RXZhc09iamVjdChtX3Zp
ZXcpLCBUSEVNRV9ESVIiL2RlZmF1bHQuZWRqIik7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2Fs
bGJhY2tfYWRkKFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSwgIndlYnByb2Nlc3MsY3Jhc2hl
ZCIsIG9uV2ViUHJvY2Vzc0NyYXNoZWQsIDApOwogICAgIHJlc2l6ZVRvKDYwMCwgODAwKTsKIH0K
IAogUGxhdGZvcm1XZWJWaWV3Ojp+UGxhdGZvcm1XZWJWaWV3KCkKIHsKLSAgICBldmFzX29iamVj
dF9kZWwobV92aWV3KTsKKyAgICAvLyBGSVhNRTogVGhlIEMgV0tWaWV3IEFQSSBjdXJyZW50bHkg
Y3JlYXRlcyB0aGUgRXZhc19PYmplY3QsIHNvIHdlIGhhdmUgdG8gZGVzdHJ1Y3QgaXQKKyAgICAv
LyAoYW5kIGl0cyBkZXBlbmRlbmNpZXMgRXdrVmlldyBhbmQgV2ViS2l0OjpXZWJWaWV3KSB0aGlz
IHdheSwgdW50aWwgdGhpcyBnZXQgZml4ZWQuCisgICAgZXZhc19vYmplY3RfZGVsKFdLVmlld0dl
dEV2YXNPYmplY3QobV92aWV3KSk7CisKKyAgICBXS1JlbGVhc2UobV92aWV3KTsKKwogICAgIGVj
b3JlX2V2YXNfZnJlZShtX3dpbmRvdyk7CiAgICAgZWNvcmVfZXZhc19zaHV0ZG93bigpOwogfQog
CiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6cmVzaXplVG8odW5zaWduZWQgd2lkdGgsIHVuc2lnbmVk
IGhlaWdodCkKIHsKLSAgICBldmFzX29iamVjdF9yZXNpemUobV92aWV3LCB3aWR0aCwgaGVpZ2h0
KTsKKyAgICBldmFzX29iamVjdF9yZXNpemUoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCB3
aWR0aCwgaGVpZ2h0KTsKIH0KIAogV0tQYWdlUmVmIFBsYXRmb3JtV2ViVmlldzo6cGFnZSgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIFdLVmlld0dldFBhZ2UodG9BUEkobV92aWV3KSk7CisgICAgcmV0
dXJuIFdLVmlld0dldFBhZ2UobV92aWV3KTsKIH0KIAogdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnNp
bXVsYXRlU3BhY2ViYXJLZXlQcmVzcygpCiB7CiAgICAgRXZhcyogZXZhcyA9IGVjb3JlX2V2YXNf
Z2V0KG1fd2luZG93KTsKLSAgICBldmFzX29iamVjdF9mb2N1c19zZXQobV92aWV3LCB0cnVlKTsK
KyAgICBldmFzX29iamVjdF9mb2N1c19zZXQoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCB0
cnVlKTsKICAgICBldmFzX2V2ZW50X2ZlZWRfa2V5X2Rvd24oZXZhcywgInNwYWNlIiwgInNwYWNl
IiwgIiAiLCAwLCAwLCAwKTsKICAgICBldmFzX2V2ZW50X2ZlZWRfa2V5X3VwKGV2YXMsICJzcGFj
ZSIsICJzcGFjZSIsICIgIiwgMCwgMSwgMCk7CiB9CkBAIC05OSwxNCArMTA0LDE0IEBAIHZvaWQg
UGxhdGZvcm1XZWJWaWV3OjpzaW11bGF0ZVNwYWNlYmFyS2V5UHJlc3MoKQogdm9pZCBQbGF0Zm9y
bVdlYlZpZXc6OnNpbXVsYXRlTW91c2VNb3ZlKHVuc2lnbmVkIHgsIHVuc2lnbmVkIHkpCiB7CiAg
ICAgRXZhcyogZXZhcyA9IGVjb3JlX2V2YXNfZ2V0KG1fd2luZG93KTsKLSAgICBldmFzX29iamVj
dF9zaG93KG1fdmlldyk7CisgICAgZXZhc19vYmplY3Rfc2hvdyhXS1ZpZXdHZXRFdmFzT2JqZWN0
KG1fdmlldykpOwogICAgIGV2YXNfZXZlbnRfZmVlZF9tb3VzZV9tb3ZlKGV2YXMsIHgsIHksIDAs
IDApOwogfQogCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6c2ltdWxhdGVSaWdodENsaWNrKHVuc2ln
bmVkIHgsIHVuc2lnbmVkIHkpCiB7CiAgICAgRXZhcyogZXZhcyA9IGVjb3JlX2V2YXNfZ2V0KG1f
d2luZG93KTsKLSAgICBldmFzX29iamVjdF9zaG93KG1fdmlldyk7CisgICAgZXZhc19vYmplY3Rf
c2hvdyhXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldykpOwogICAgIGV2YXNfZXZlbnRfZmVlZF9t
b3VzZV9tb3ZlKGV2YXMsIHgsIHksIDAsIDApOwogICAgIGV2YXNfZXZlbnRfZmVlZF9tb3VzZV9k
b3duKGV2YXMsIDMsIEVWQVNfQlVUVE9OX05PTkUsIDAsIDApOwogICAgIGV2YXNfZXZlbnRfZmVl
ZF9tb3VzZV91cChldmFzLCAzLCBFVkFTX0JVVFRPTl9OT05FLCAwLCAwKTsKZGlmZiAtLWdpdCBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmggYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCmluZGV4IDhmOWRjZGI3ZWUzYWFmMzgyNzZiNjYw
MzAwOGJkMWRiYzg3ODkzYzYuLjUxYzRiY2MyMzU2NTVjN2NiYzE1ZmJkOWFiYzhkYWFjN2QxZmY5
MzQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgK
KysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaApAQCAtNTQsMTMg
KzU0LDggQEAgdHlwZWRlZiBzdHJ1Y3QgX0d0a1dpZGdldCBHdGtXaWRnZXQ7CiB0eXBlZGVmIFdL
Vmlld1JlZiBQbGF0Zm9ybVdLVmlldzsKIHR5cGVkZWYgR3RrV2lkZ2V0KiBQbGF0Zm9ybVdpbmRv
dzsKICNlbGlmIFBMQVRGT1JNKEVGTCkKLSNpZiBVU0UoRU8pCi10eXBlZGVmIHN0cnVjdCBfRW8g
RXZhc19PYmplY3Q7Ci0jZWxzZQotdHlwZWRlZiBzdHJ1Y3QgX0V2YXNfT2JqZWN0IEV2YXNfT2Jq
ZWN0OwotI2VuZGlmCiB0eXBlZGVmIHN0cnVjdCBfRWNvcmVfRXZhcyBFY29yZV9FdmFzOwotdHlw
ZWRlZiBFdmFzX09iamVjdCogUGxhdGZvcm1XS1ZpZXc7Cit0eXBlZGVmIFdLVmlld1JlZiBQbGF0
Zm9ybVdLVmlldzsKIHR5cGVkZWYgRWNvcmVfRXZhcyogUGxhdGZvcm1XaW5kb3c7CiAjZW5kaWYK
IApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvRXZlbnRTZW5kZXJQcm94
eUVmbC5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9FdmVudFNlbmRlclByb3h5RWZs
LmNwcAppbmRleCBmMjgyOWE5NmM5MjhhMmY5Mzk3ZTU2YzliNzk2NWVmMDUxMDcyZTk5Li4xMzky
MGVjMDZiOTA1YjI4YjUwMTA2NjMxOTZjYjI1YjUwZTM4MWE1IDEwMDY0NAotLS0gYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL2VmbC9FdmVudFNlbmRlclByb3h5RWZsLmNwcAorKysgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL2VmbC9FdmVudFNlbmRlclByb3h5RWZsLmNwcApAQCAtNDM4LDcgKzQz
OCw3IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6c2VuZFRvdWNoRXZlbnQoRXdrX1RvdWNoX0V2
ZW50X1R5cGUgZXZlbnRUeXBlKQogewogICAgIEFTU0VSVChtX3RvdWNoUG9pbnRzKTsKIAotICAg
IEV2YXNfT2JqZWN0KiBld2tWaWV3ID0gbV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+
cGxhdGZvcm1WaWV3KCk7CisgICAgRXZhc19PYmplY3QqIGV3a1ZpZXcgPSBXS1ZpZXdHZXRFdmFz
T2JqZWN0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpKTsK
ICAgICBld2tfdmlld19mZWVkX3RvdWNoX2V2ZW50KGV3a1ZpZXcsIGV2ZW50VHlwZSwgbV90b3Vj
aFBvaW50cywgZXZhc19rZXlfbW9kaWZpZXJfZ2V0KGV2YXNfb2JqZWN0X2V2YXNfZ2V0KGV3a1Zp
ZXcpKSk7CiAKICAgICBFaW5hX0xpc3QqIGxpc3Q7CkBAIC00OTAsMTIgKzQ5MCwxNCBAQCB2b2lk
IEV2ZW50U2VuZGVyUHJveHk6OnVwZGF0ZVRvdWNoUG9pbnQoaW50IGluZGV4LCBpbnQgeCwgaW50
IHkpCiAKIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6c2V0VG91Y2hNb2RpZmllcihXS0V2ZW50TW9k
aWZpZXJzIG1vZGlmaWVyLCBib29sIGVuYWJsZSkKIHsKKyAgICBFdmFzX09iamVjdCogZXdrVmll
dyA9IFdLVmlld0dldEV2YXNPYmplY3QobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+
cGxhdGZvcm1WaWV3KCkpOworCiAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwg
KHNpemVvZihtb2RpZmllck5hbWVzKSAvIHNpemVvZihjaGFyKikpOyArK2luZGV4KSB7CiAgICAg
ICAgIGlmIChtb2RpZmllciAmICgxIDw8IGluZGV4KSkgewogICAgICAgICAgICAgaWYgKGVuYWJs
ZSkKLSAgICAgICAgICAgICAgICBldmFzX2tleV9tb2RpZmllcl9vbihldmFzX29iamVjdF9ldmFz
X2dldChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKSksIG1v
ZGlmaWVyTmFtZXNbaW5kZXhdKTsKKyAgICAgICAgICAgICAgICBldmFzX2tleV9tb2RpZmllcl9v
bihldmFzX29iamVjdF9ldmFzX2dldChld2tWaWV3KSwgbW9kaWZpZXJOYW1lc1tpbmRleF0pOwog
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGV2YXNfa2V5X21vZGlmaWVyX29mZihl
dmFzX29iamVjdF9ldmFzX2dldChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0
Zm9ybVZpZXcoKSksIG1vZGlmaWVyTmFtZXNbaW5kZXhdKTsKKyAgICAgICAgICAgICAgICBldmFz
X2tleV9tb2RpZmllcl9vZmYoZXZhc19vYmplY3RfZXZhc19nZXQoZXdrVmlldyksIG1vZGlmaWVy
TmFtZXNbaW5kZXhdKTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5jcHAgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL2VmbC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3BwCmluZGV4IDFjY2MwYmRhYmU5YWFi
ODdjZWFlYmI4NzhhNmI0NDNhMGVmNjFjMTUuLjJiN2Q4OTJmMWQxYzhiOTQ3NjU2NjNjMGI4OGE3
OGUwODMzOTAyNGUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL1BsYXRm
b3JtV2ViVmlld0VmbC5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxhdGZv
cm1XZWJWaWV3RWZsLmNwcApAQCAtNjEsNTYgKzYxLDU4IEBAIFBsYXRmb3JtV2ViVmlldzo6UGxh
dGZvcm1XZWJWaWV3KFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3Jv
dXAsCiAgICAgRXZhcyogZXZhcyA9IGVjb3JlX2V2YXNfZ2V0KG1fd2luZG93KTsKIAogICAgIGlm
IChtX3VzaW5nRml4ZWRMYXlvdXQpIHsKLSAgICAgICAgbV92aWV3ID0gdG9JbXBsKFdLVmlld0Ny
ZWF0ZVdpdGhGaXhlZExheW91dChldmFzLCBjb250ZXh0LCBwYWdlR3JvdXApKTsKLSAgICAgICAg
ZXZhc19vYmplY3RfcmVzaXplKG1fdmlldywgODAwLCA2MDApOworICAgICAgICBtX3ZpZXcgPSBX
S1ZpZXdDcmVhdGVXaXRoRml4ZWRMYXlvdXQoZXZhcywgY29udGV4dCwgcGFnZUdyb3VwKTsKKyAg
ICAgICAgZXZhc19vYmplY3RfcmVzaXplKFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSwgODAw
LCA2MDApOwogICAgIH0gZWxzZQotICAgICAgICBtX3ZpZXcgPSB0b0ltcGwoV0tWaWV3Q3JlYXRl
KGV2YXMsIGNvbnRleHQsIHBhZ2VHcm91cCkpOworICAgICAgICBtX3ZpZXcgPSBXS1ZpZXdDcmVh
dGUoZXZhcywgY29udGV4dCwgcGFnZUdyb3VwKTsKIAotICAgIGV3a192aWV3X3RoZW1lX3NldCht
X3ZpZXcsIFRIRU1FX0RJUiIvZGVmYXVsdC5lZGoiKTsKKyAgICBld2tfdmlld190aGVtZV9zZXQo
V0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCBUSEVNRV9ESVIiL2RlZmF1bHQuZWRqIik7CiAg
ICAgbV93aW5kb3dJc0tleSA9IGZhbHNlOwotICAgIGV2YXNfb2JqZWN0X3Nob3cobV92aWV3KTsK
KyAgICBldmFzX29iamVjdF9zaG93KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSk7CiB9CiAK
IFBsYXRmb3JtV2ViVmlldzo6flBsYXRmb3JtV2ViVmlldygpCiB7Ci0gICAgZXZhc19vYmplY3Rf
ZGVsKG1fdmlldyk7CisgICAgLy8gRklYTUU6IFRoZSBDIFdLVmlldyBBUEkgY3VycmVudGx5IGNy
ZWF0ZXMgdGhlIEV2YXNfT2JqZWN0LCBzbyB3ZSBoYXZlIHRvIGRlc3RydWN0IGl0CisgICAgLy8g
KGFuZCBpdHMgZGVwZW5kZW5jaWVzIEV3a1ZpZXcgYW5kIFdlYktpdDo6V2ViVmlldykgdGhpcyB3
YXksIHVudGlsIHRoaXMgZ2V0IGZpeGVkLgorICAgIGV2YXNfb2JqZWN0X2RlbChXS1ZpZXdHZXRF
dmFzT2JqZWN0KG1fdmlldykpOworCisgICAgV0tSZWxlYXNlKG1fdmlldyk7CisKICAgICBlY29y
ZV9ldmFzX2ZyZWUobV93aW5kb3cpOwogfQogCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6cmVzaXpl
VG8odW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKIHsKLSAgICBldmFzX29iamVjdF9y
ZXNpemUobV92aWV3LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBldmFzX29iamVjdF9yZXNpemUoV0tW
aWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogV0tQYWdlUmVm
IFBsYXRmb3JtV2ViVmlldzo6cGFnZSgpCiB7Ci0gICAgcmV0dXJuIFdLVmlld0dldFBhZ2UodG9B
UEkobV92aWV3KSk7CisgICAgcmV0dXJuIFdLVmlld0dldFBhZ2UobV92aWV3KTsKIH0KIAogdm9p
ZCBQbGF0Zm9ybVdlYlZpZXc6OmZvY3VzKCkKIHsKKyAgICBFdmFzX09iamVjdCogZXZhc09iamVj
dCA9IFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KTsKICAgICAvLyBJbiBhIGZldyBjYXNlcywg
YW4gaWZyYW1lIG1pZ2h0IHJlY2VpdmUgZm9jdXMgZnJvbSBKYXZhU2NyaXB0IGFuZCBFdmFzIGlz
IG5vdCBhd2FyZSBvZiBpdCBhdCBhbGwKICAgICAvLyAoV2ViQ29yZVN1cHBvcnQ6OmZvY3VzZWRG
cmFtZUNoYW5nZWQoKSBkb2VzIG5vdCBlbWl0IGFueSBub3RpZmljYXRpb24pLiBXZSB0aGVuIG1h
bnVhbGx5IHJlbW92ZSB0aGUKICAgICAvLyBmb2N1cyBmcm9tIHRoZSB2aWV3IHRvIG1ha2UgdGhl
IGNhbGwgZ2l2ZSBmb2N1cyB0byBldmFzX29iamVjdF9mb2N1c19zZXQoLi4uLCB0cnVlKSB0byBi
ZSBlZmZlY3RmdWwuCi0gICAgaWYgKFdLUGFnZUdldEZvY3VzZWRGcmFtZShwYWdlKCkpICE9IFdL
UGFnZUdldE1haW5GcmFtZShwYWdlKCkpKQotICAgICAgICBldmFzX29iamVjdF9mb2N1c19zZXQo
bV92aWV3LCBmYWxzZSk7Ci0gICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KG1fdmlldywgdHJ1ZSk7
CisgICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSwg
V0tQYWdlR2V0Rm9jdXNlZEZyYW1lKHBhZ2UoKSkgPT0gV0tQYWdlR2V0TWFpbkZyYW1lKHBhZ2Uo
KSkpOwogfQogCiBXS1JlY3QgUGxhdGZvcm1XZWJWaWV3Ojp3aW5kb3dGcmFtZSgpCiB7CiAgICAg
aW50IHgsIHksIHdpZHRoLCBoZWlnaHQ7CiAKLSAgICBFY29yZV9FdmFzKiBlZSA9IGVjb3JlX2V2
YXNfZWNvcmVfZXZhc19nZXQoZXZhc19vYmplY3RfZXZhc19nZXQobV92aWV3KSk7Ci0gICAgZWNv
cmVfZXZhc19yZXF1ZXN0X2dlb21ldHJ5X2dldChlZSwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQp
OworICAgIGVjb3JlX2V2YXNfcmVxdWVzdF9nZW9tZXRyeV9nZXQobV93aW5kb3csICZ4LCAmeSwg
JndpZHRoLCAmaGVpZ2h0KTsKIAogICAgIHJldHVybiBXS1JlY3RNYWtlKHgsIHksIHdpZHRoLCBo
ZWlnaHQpOwogfQogCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6c2V0V2luZG93RnJhbWUoV0tSZWN0
IGZyYW1lKQogewotICAgIEVjb3JlX0V2YXMqIGVlID0gZWNvcmVfZXZhc19lY29yZV9ldmFzX2dl
dChldmFzX29iamVjdF9ldmFzX2dldChtX3ZpZXcpKTsKLSAgICBlY29yZV9ldmFzX21vdmVfcmVz
aXplKGVlLCBmcmFtZS5vcmlnaW4ueCwgZnJhbWUub3JpZ2luLnksIGZyYW1lLnNpemUud2lkdGgs
IGZyYW1lLnNpemUuaGVpZ2h0KTsKKyAgICBlY29yZV9ldmFzX21vdmVfcmVzaXplKG1fd2luZG93
LCBmcmFtZS5vcmlnaW4ueCwgZnJhbWUub3JpZ2luLnksIGZyYW1lLnNpemUud2lkdGgsIGZyYW1l
LnNpemUuaGVpZ2h0KTsKIH0KIAogdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OmFkZENocm9tZUlucHV0
RmllbGQoKQpAQCAtMTI3LDE1ICsxMjksMTIgQEAgdm9pZCBQbGF0Zm9ybVdlYlZpZXc6Om1ha2VX
ZWJWaWV3Rmlyc3RSZXNwb25kZXIoKQogCiBXS1JldGFpblB0cjxXS0ltYWdlUmVmPiBQbGF0Zm9y
bVdlYlZpZXc6OndpbmRvd1NuYXBzaG90SW1hZ2UoKQogewotICAgIEVjb3JlX0V2YXMqIGVlID0g
ZWNvcmVfZXZhc19lY29yZV9ldmFzX2dldChldmFzX29iamVjdF9ldmFzX2dldChtX3ZpZXcpKTsK
LSAgICBBU1NFUlQoZWUpOwotCiAgICAgaW50IHdpZHRoOwogICAgIGludCBoZWlnaHQ7Ci0gICAg
ZWNvcmVfZXZhc19nZW9tZXRyeV9nZXQoZWUsIDAsIDAsICZ3aWR0aCwgJmhlaWdodCk7CisgICAg
ZWNvcmVfZXZhc19nZW9tZXRyeV9nZXQobV93aW5kb3csIDAsIDAsICZ3aWR0aCwgJmhlaWdodCk7
CiAgICAgQVNTRVJUKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKTsKIAotICAgIHJldHVybiBhZG9w
dFdLKFdLVmlld0NyZWF0ZVNuYXBzaG90KHRvQVBJKG1fdmlldykpKTsKKyAgICByZXR1cm4gYWRv
cHRXSyhXS1ZpZXdDcmVhdGVTbmFwc2hvdChtX3ZpZXcpKTsKIH0KIAogYm9vbCBQbGF0Zm9ybVdl
YlZpZXc6OnZpZXdTdXBwb3J0c09wdGlvbnMoV0tEaWN0aW9uYXJ5UmVmIG9wdGlvbnMpIGNvbnN0
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184997</attachid>
            <date>2013-01-28 09:16:25 -0800</date>
            <delta_ts>2013-01-29 01:24:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107931-20130128181303.patch</filename>
            <type>text/plain</type>
            <size>41400</size>
            <attacher name="Kenneth Rohde Christiansen">kenneth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwOTYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOWI3ZDY2ZTQ5MmM5ZmU4
YzJjOTU1Y2MzNGJlY2NjOTYyNjVhNDk2NC4uYmM1ZmEwNTkzY2YwYzNkMGFkZjcwZjljNmVjZDU0
N2IwZjNlNjk2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDExOCBAQAogMjAxMy0wMS0yOCAgS2Vu
bmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4gIDxrZW5uZXRoQHdlYmtpdC5vcmc+CiAKKyAgICAgICAg
W0VGTF1bV0syXSBJbnRyb2R1Y2UgYSBXZWJWaWV3IGNsYXNzIGFzIGNvdW50ZXJwYXJ0IGZvciBX
S1ZpZXdSZWYKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwNzkzMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgaXMganVzdCBvbmUgc3RlcCBvZiB0aGUgbmV3IHBsYW4gZm9yIHRoZSBFRkwgQVBJLgor
CisgICAgICAgIFRoZSBwbGFuIGlzIHRvIG1vdmUgdGhlIHB1YmxpYyBFRkwtbGlrZSBBUEkgb24g
dG9wIG9mIHRoZSBzaGFyZWQKKyAgICAgICAgV0syIEMgQVBJLCBwbHVzIGEgZmV3IEVGTCBleHRl
bnNpb25zIChXS1ZpZXcgY2xhc3MgbW9zdGx5KS4KKworICAgICAgICBUaGUgRUZMLWxpa2UgQVBJ
IGNhbiBiZSBzZWVuIGFzIGEgY29udmVuaWVuY2UgQVBJIHdoaWNoIHRpZXMKKyAgICAgICAgd2Vs
bCBpbnRvIEVGTCBhbmQgd2hpY2ggbWFrZXMgaXQgZWFzeSB0byBhZGQgd2ViIGV4cGVyaWVuY2Vz
CisgICAgICAgIHRvIGV4aXN0aW5nIGFuZCBuZXcgRUZMIGFwcGxpY2F0aW9ucy4gSXQgcHJvdmlk
ZXMgYSBzbWFydCBvYmplY3QKKyAgICAgICAgbGlrZSBBUEkgYW5kIGEgRXZhc19PYmplY3QgYmFz
ZWQgdmlldy4KKworICAgICAgICBGb3IgbW9yZSBhZHZhbmNlZCB1c2UgY2FzZXMsIHN1Y2ggYXMg
YnJvd3NlciBhbmQgcnVudGltZSwgaXQgaXMKKyAgICAgICAgcG9zc2libGUgdG8gdXNlIHRoZSBX
SyogQyBBUEksIHdoaWNoIGlzIGdpdmVzIG1vcmUgZmxleGliaWxpdHkKKyAgICAgICAgd2hpbGUg
YmVpbmcgbW9yZSBsb3cgbGV2ZWwuCisKKyAgICAgICAgVGhlIGlkZWEgaXMgdGhhdCB0aGUgV0tW
aWV3IGNsYXNzIHdpbGwgbm90IGRlcGVuZCBvbiBFdmFzX09iamVjdAorICAgICAgICBhbmQgWDEx
IChmdXR1cmUgcGxhbikgdW5saWtlIHRoZSBjdXJyZW50IEVGTC1saWtlIEFQSS4gVGhpcyBzaG91
bGQKKyAgICAgICAgbWFrZSBpdCBwb3NzaWJsZSB0byB1c2UgaXQgZm9yIGNhc2VzIHdoZXJlIG5v
bmUgb2YgdGhlc2UgYXJlCisgICAgICAgIGF2YWlsYWJsZS4KKworICAgICAgICBUaGlzIHBhdGNo
IGludHJvZHVjZXMgdGhlIFdlYlZpZXcgY2xhc3Mgd2hpY2ggc2VydmVzIGFzIG91cgorICAgICAg
ICBjb3VudGVycGFydCBmb3IgdGhlIFdLVmlldyBjbGFzcywgYW5kIGFkZHMgYSBmZXcgbmVlZGVk
IG1ldGhvZHMuCisKKyAgICAgICAgVGhlIEV3a1ZpZXcgb3ducyB0aGUgV2ViVmlldyBjbGFzcyAo
YW5kIHdpbGwgYmUgY29uc3RydWN0aW5nIGl0CisgICAgICAgIGluIHRoZSBuZWFyIGZ1dHVyZSB3
aGVuIHRoZSBFd2tWaWV3IGNsYXNzIGhhcyBiZWVuIGNoYW5nZWQgdG8KKyAgICAgICAgaGFuZGxl
IGFsbCBzbWFydCBvYmplY3QgcmVsYXRlZCBjb2RlKQorCisgICAgICAgIFRoZSBjbGVhbiB1cCBv
ZiB0aGUgc21hcnQgb2JqZWN0IHJlbGF0ZWQgY29kZSBhcyB0aGUgcHJvcGVyCisgICAgICAgIGNv
bnN0cnVjdGlvbiBvZiBFd2tWaWV3IGFuZCBXZWJWaWV3IHdpbGwgYmUgZG9uZSBpbiBmb2xsb3ct
dXAKKyAgICAgICAgcGF0Y2hlcy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9lZmwvV0tB
UElDYXN0RWZsLmg6CisgICAgICAgIChXZWJLaXQpOgorCisgICAgICAgICAgICBUaGUgV0tWaWV3
IEFQSSBpcyBub3QgYmFzZWQgb24gV2ViVmlldyBhbmQgbm90IEV2YXNfT2JqZWN0KgorCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwOgorICAgICAgICAoV0tWaWV3Q3Jl
YXRlKToKKyAgICAgICAgKFdLVmlld0NyZWF0ZVdpdGhGaXhlZExheW91dCk6CisgICAgICAgIChX
S1ZpZXdJbml0aWFsaXplKToKKyAgICAgICAgKFdLVmlld0dldFBhZ2UpOgorICAgICAgICAoV0tW
aWV3U2V0VGhlbWVQYXRoKToKKyAgICAgICAgKFdLVmlld1N1c3BlbmRBY3RpdmVET01PYmplY3Rz
QW5kQW5pbWF0aW9ucyk6CisgICAgICAgIChXS1ZpZXdSZXN1bWVBY3RpdmVET01PYmplY3RzQW5k
QW5pbWF0aW9ucyk6CisgICAgICAgIChXS1ZpZXdHZXRFdmFzT2JqZWN0KToKKyAgICAgICAgKFdL
Vmlld0NyZWF0ZVNuYXBzaG90KToKKworICAgICAgICAgICAgQWRkIGEgZmV3IG5ldyBXS1ZpZXcg
RUZMIEMgbWV0aG9kcywgYW5kIHVwZGF0ZSBleGlzdGluZworICAgICAgICAgICAgbWV0aG9kcyB0
byByZWZsZWN0IHRoYXQgdGhlIFdLVmlld1JlZiBpcyBub3cgYSBXZWJWaWV3KgorCisgICAgICAg
ICAgICBUaGUgY29uc3RydWN0aW9uIG1ldGhvZHMgd2lsbCBiZSByZXdyaXR0ZW4gd2hlbiB0aGUg
c21hcnQKKyAgICAgICAgICAgIG9iamVjdCBjb25zdHJ1Y3Rpb24gaGFzIGJlZW4gc29sdmVzLgor
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvZWZsL1dlYlZpZXcuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXc6OldlYlZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojp+
V2ViVmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmluaXRpYWxpemUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3OjpzZXRUaGVtZVBhdGgpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3OjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3OjpyZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyk6CisgICAg
ICAgICogVUlQcm9jZXNzL2VmbC9XZWJWaWV3Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToK
KyAgICAgICAgKFdlYlZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpwYWdlUmVmKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6ZXZhc09iamVjdCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXc6OnBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojp0eXBlKToKKworICAg
ICAgICAgICAgQWRkIGEgbmV3IFdlYktpdDo6V2ViVmlldyBjbGFzcyBmb3IgRUZMLgorCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHA6CisgICAgICAgIChFd2tWaWV3OjpF
d2tWaWV3KToKKyAgICAgICAgKEV3a1ZpZXc6On5Fd2tWaWV3KToKKyAgICAgICAgKEV3a1ZpZXc6
OndrUGFnZSk6CisgICAgICAgIChFd2tWaWV3OjpkZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAg
IChFd2tWaWV3Ojp0aXRsZSk6CisgICAgICAgIChFd2tWaWV3OjpzZXRUaGVtZVBhdGgpOgorICAg
ICAgICAoRXdrVmlldzo6Y3VzdG9tVGV4dEVuY29kaW5nTmFtZSk6CisgICAgICAgIChFd2tWaWV3
OjpzZXRDdXN0b21UZXh0RW5jb2RpbmdOYW1lKToKKyAgICAgICAgKEV3a1ZpZXc6OmNyZWF0ZUdM
U3VyZmFjZSk6CisgICAgICAgIChFd2tWaWV3OjppbmZvcm1VUkxDaGFuZ2UpOgorICAgICAgICAo
RXdrVmlldzo6dGFrZVNuYXBzaG90KToKKworICAgICAgICAgICAgQmFzZSBtZXRob2RzIG9uIEMg
QVBJIGluc3RlYWQgb2YgaW50ZXJuYWwgQVBJIGFzIG11Y2gKKyAgICAgICAgICAgIGFzIGN1cnJl
bnRseSBwb3NzaWJsZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaDoK
KyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJWaWV3KToKKyAgICAgICAgKEV3a1ZpZXcp
OgorICAgICAgICAoRXdrVmlldzo6d2tWaWV3KToKKyAgICAgICAgKEV3a1ZpZXc6OnBhZ2UpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcDoKKyAgICAgICAgKGNyZWF0
ZUV3a1ZpZXcpOgorICAgICAgICAoZXdrX3ZpZXdfYmFzZV9hZGQpOgorICAgICAgICAoZXdrX3Zp
ZXdfc21hcnRfYWRkKToKKworICAgICAgICAgICAgTW9kaWZ5IHRvIHJldHVybiB0aGUgRXdrVmll
dyBjbGFzcyBmb3Igbm93LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdf
cHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVJ
bnNwZWN0b3JQYWdlKToKKworICAgICAgICAgICAgVXBkYXRlZCBkdWUgdG8gY2hhbmdlZCBBUEku
CisKKzIwMTMtMDEtMjggIEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuICA8a2VubmV0aEB3ZWJr
aXQub3JnPgorCiAgICAgICAgIFtFRkxdW1dLMl0gVXNlIEMgQVBJIGluc2lkZSBld2tfdXJsX3Jl
c3BvbnNlCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MDc4MjYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCAzNWFkZTA2ZWE4MDYyMzg2ZjRl
MzlhNGYwOThmMjQ5NzExOTA4MDI2Li4zMDcwZGEwY2E4M2Y3MTY4ZGVjNzFiNzM2MzMzN2QwNjli
MDA1MGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtMTA5LDYgKzEwOSw3IEBAIGxp
c3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9lZmwvV2ViUG9wdXBNZW51
UHJveHlFZmwuY3BwCiAgICAgVUlQcm9jZXNzL2VmbC9XZWJQcmVmZXJlbmNlc0VmbC5jcHAKICAg
ICBVSVByb2Nlc3MvZWZsL1dlYlByb2Nlc3NQcm94eUVmbC5jcHAKKyAgICBVSVByb2Nlc3MvZWZs
L1dlYlZpZXcuY3BwCiAKICAgICBVSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL2VmbC9XZWJJbnNw
ZWN0b3JTZXJ2ZXJFZmwuY3BwCiAgICAgVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9zb3VwL1dl
YlNvY2tldFNlcnZlclNvdXAuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvZWZsL1dLQVBJQ2FzdEVmbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9DL2VmbC9XS0FQSUNhc3RFZmwuaAppbmRleCBiMDEzYTBhNjBkZmYwMzI4Y2YyZjllNWIxMTYx
ODYwMjM1ZTc2ZjBhLi4xODg5ZmM0MzY3NTVmOTFhODJmM2EzMDNmYWU1YmE1M2Q3ZjYyZGU3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLQVBJQ2FzdEVm
bC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tBUElDYXN0RWZs
LmgKQEAgLTI0LDE1ICsyNCwxMSBAQAogI2Vycm9yICJQbGVhc2UgI2luY2x1ZGUgXCJXS0FQSUNh
c3QuaFwiIGluc3RlYWQgb2YgdGhpcyBmaWxlIGRpcmVjdGx5LiIKICNlbmRpZgogCi0jaWYgVVNF
KEVPKQotdHlwZWRlZiBzdHJ1Y3QgX0VvIEV2YXNfT2JqZWN0OwotI2Vsc2UKLXR5cGVkZWYgc3Ry
dWN0IF9FdmFzX09iamVjdCBFdmFzX09iamVjdDsKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAotV0tfQUREX0FQSV9NQVBQSU5HKFdLVmlld1JlZiwgRXZhc19PYmplY3QpCitjbGFzcyBX
ZWJWaWV3OworCitXS19BRERfQVBJX01BUFBJTkcoV0tWaWV3UmVmLCBXZWJWaWV3KQogCiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcAppbmRleCAz
MmI5ZDhmNjM3MzViYmZmZTI2ZWY2OTA5MTFhMDAxYzYyNmIwZjEwLi5lMzcyZjlhNTk1YWNhMDVi
ODY0MjVmZjlhZDRhOTYwZTQ3YzUxNDY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9DL2VmbC9XS1ZpZXcuY3BwCkBAIC0yOSwyNCArMjksNTAgQEAgdXNpbmcgbmFtZXNwYWNl
IFdlYktpdDsKIAogV0tWaWV3UmVmIFdLVmlld0NyZWF0ZShFdmFzKiBjYW52YXMsIFdLQ29udGV4
dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCiB7Ci0gICAgcmV0
dXJuIHRvQVBJKGV3a192aWV3X2Jhc2VfYWRkKGNhbnZhcywgY29udGV4dFJlZiwgcGFnZUdyb3Vw
UmVmLCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlvcikpOworICAgIFdLVmlld1JlZiB2aWV3UmVmID0g
ZXdrX3ZpZXdfYmFzZV9hZGQoY2FudmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYsIEV3a1Zp
ZXc6OkxlZ2FjeUJlaGF2aW9yKS0+d2tWaWV3KCk7CisgICAgLy8gUmV0YWluIGFzIHRoZSBjb250
cmFjdCB3aXRoICpDcmVhdGUgZnVuY3Rpb25zIGlzIHRoYXQgcmV0dXJuZWQgb2JqZWN0cyBtdWNo
IHRvIGJlIHJlbGVhc2VkIGFmdGVyIHVzZS4KKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0tWaWV3
UmVmPihXS1JldGFpbih2aWV3UmVmKSk7CiB9CiAKIFdLVmlld1JlZiBXS1ZpZXdDcmVhdGVXaXRo
Rml4ZWRMYXlvdXQoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdl
R3JvdXBSZWYgcGFnZUdyb3VwUmVmKQogewotICAgIHJldHVybiB0b0FQSShld2tfdmlld19iYXNl
X2FkZChjYW52YXMsIGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZiwgRXdrVmlldzo6RGVmYXVsdEJl
aGF2aW9yKSk7CisgICAgV0tWaWV3UmVmIHZpZXdSZWYgPSBld2tfdmlld19iYXNlX2FkZChjYW52
YXMsIGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZiwgRXdrVmlldzo6RGVmYXVsdEJlaGF2aW9yKS0+
d2tWaWV3KCk7CisgICAgLy8gUmV0YWluIGFzIHRoZSBjb250cmFjdCB3aXRoICpDcmVhdGUgZnVu
Y3Rpb25zIGlzIHRoYXQgcmV0dXJuZWQgb2JqZWN0cyBtdWNoIHRvIGJlIHJlbGVhc2VkIGFmdGVy
IHVzZS4KKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0tWaWV3UmVmPihXS1JldGFpbih2aWV3UmVm
KSk7Cit9CisKK3ZvaWQgV0tWaWV3SW5pdGlhbGl6ZShXS1ZpZXdSZWYgdmlld1JlZikKK3sKKyAg
ICB0b0ltcGwodmlld1JlZiktPmluaXRpYWxpemUoKTsKIH0KIAogV0tQYWdlUmVmIFdLVmlld0dl
dFBhZ2UoV0tWaWV3UmVmIHZpZXdSZWYpCiB7Ci0gICAgRXdrVmlldyogdmlldyA9IEV3a1ZpZXc6
OmZyb21FdmFzT2JqZWN0KHRvSW1wbCh2aWV3UmVmKSk7CisgICAgcmV0dXJuIHRvSW1wbCh2aWV3
UmVmKS0+cGFnZVJlZigpOworfQogCi0gICAgcmV0dXJuIHZpZXctPndrUGFnZSgpOwordm9pZCBX
S1ZpZXdTZXRUaGVtZVBhdGgoV0tWaWV3UmVmIHZpZXdSZWYsIFdLU3RyaW5nUmVmIHRoZW1lKQor
eworICAgIHRvSW1wbCh2aWV3UmVmKS0+c2V0VGhlbWVQYXRoKHRoZW1lKTsKIH0KIAotV0tJbWFn
ZVJlZiBXS1ZpZXdDcmVhdGVTbmFwc2hvdChXS1ZpZXdSZWYgdmlld1JlZikKK3ZvaWQgV0tWaWV3
U3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKFdLVmlld1JlZiB2aWV3UmVmKQog
ewotICAgIEV3a1ZpZXcqIHZpZXcgPSBFd2tWaWV3Ojpmcm9tRXZhc09iamVjdCh0b0ltcGwodmll
d1JlZikpOworICAgIHRvSW1wbCh2aWV3UmVmKS0+c3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRB
bmltYXRpb25zKCk7Cit9CiAKLSAgICByZXR1cm4gV0tJbWFnZUNyZWF0ZUZyb21DYWlyb1N1cmZh
Y2Uodmlldy0+dGFrZVNuYXBzaG90KCkuZ2V0KCksIDAgLyogb3B0aW9ucyAqLyk7Cit2b2lkIFdL
Vmlld1Jlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKFdLVmlld1JlZiB2aWV3UmVm
KQoreworICAgIHRvSW1wbCh2aWV3UmVmKS0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1h
dGlvbnMoKTsKK30KKworRXZhc19PYmplY3QqIFdLVmlld0dldEV2YXNPYmplY3QoV0tWaWV3UmVm
IHZpZXdSZWYpCit7CisgICAgcmV0dXJuIHRvSW1wbCh2aWV3UmVmKS0+ZXZhc09iamVjdCgpOwor
fQorCitXS0ltYWdlUmVmIFdLVmlld0NyZWF0ZVNuYXBzaG90KFdLVmlld1JlZiB2aWV3UmVmKQor
eworICAgIEV3a1ZpZXcqIGV3a1ZpZXcgPSBFd2tWaWV3Ojpmcm9tRXZhc09iamVjdCh0b0ltcGwo
dmlld1JlZiktPmV2YXNPYmplY3QoKSk7CisgICAgcmV0dXJuIFdLSW1hZ2VDcmVhdGVGcm9tQ2Fp
cm9TdXJmYWNlKGV3a1ZpZXctPnRha2VTbmFwc2hvdCgpLmdldCgpLCAwIC8qIG9wdGlvbnMgKi8p
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1Zp
ZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmgKaW5kZXgg
Y2M3MzA3Y2Y0Y2I0OTI2MzZlOGE4MmNhYzFhM2FmMTA1YzkxOWZkZS4uZDViNDMyZDhlYTEzMTU0
Mjg3ZmE4ZDRhODdjNDhiNDBiOGQyMmYxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0MvZWZsL1dLVmlldy5oCkBAIC0yNCw4ICsyNCwxMCBAQAogCiAjaWYgVVNFKEVPKQogdHlw
ZWRlZiBzdHJ1Y3QgX0VvIEV2YXM7Cit0eXBlZGVmIHN0cnVjdCBfRW8gRXZhc19PYmplY3Q7CiAj
ZWxzZQogdHlwZWRlZiBzdHJ1Y3QgX0V2YXMgRXZhczsKK3R5cGVkZWYgc3RydWN0IF9FdmFzX09i
amVjdCBFdmFzX09iamVjdDsKICNlbmRpZgogCiAjaWZkZWYgX19jcGx1c3BsdXMKQEAgLTM2LDkg
KzM4LDE5IEBAIFdLX0VYUE9SVCBXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlKEV2YXMqIGNhbnZhcywg
V0tDb250ZXh0UmVmIGNvbnRleHQsIFdLUGFnZUdyb3VwCiAKIFdLX0VYUE9SVCBXS1ZpZXdSZWYg
V0tWaWV3Q3JlYXRlV2l0aEZpeGVkTGF5b3V0KEV2YXMqIGNhbnZhcywgV0tDb250ZXh0UmVmIGNv
bnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCk7CiAKLVdLX0VYUE9SVCBXS1BhZ2VSZWYg
V0tWaWV3R2V0UGFnZShXS1ZpZXdSZWYgdmlldyk7CitXS19FWFBPUlQgdm9pZCBXS1ZpZXdJbml0
aWFsaXplKFdLVmlld1JlZik7CiAKLVdLX0VYUE9SVCBXS0ltYWdlUmVmIFdLVmlld0NyZWF0ZVNu
YXBzaG90KFdLVmlld1JlZiB2aWV3UmVmKTsKK1dLX0VYUE9SVCBXS1BhZ2VSZWYgV0tWaWV3R2V0
UGFnZShXS1ZpZXdSZWYpOworCitXS19FWFBPUlQgdm9pZCBXS1ZpZXdTZXRUaGVtZVBhdGgoV0tW
aWV3UmVmLCBXS1N0cmluZ1JlZik7CisKK1dLX0VYUE9SVCB2b2lkIFdLVmlld1N1c3BlbmRBY3Rp
dmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyhXS1ZpZXdSZWYpOworV0tfRVhQT1JUIHZvaWQgV0tW
aWV3UmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoV0tWaWV3UmVmKTsKKworLy8g
RklYTUU6IFRoZSBsb25nIHRlcm0gcGxhbiBpcyB0byBnZXQgcmlkIG9mIHRoaXMsIHNvIGtlZXAg
dXNhZ2UgdG8gYSBiYXJlIG1pbmltdW0uCitXS19FWFBPUlQgRXZhc19PYmplY3QqIFdLVmlld0dl
dEV2YXNPYmplY3QoV0tWaWV3UmVmKTsKKworV0tfRVhQT1JUIFdLSW1hZ2VSZWYgV0tWaWV3Q3Jl
YXRlU25hcHNob3QoV0tWaWV3UmVmKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCmluZGV4IDEzM2ExNWY4ZGRh
ZjAxY2Q0MWFiZjU4NDdiM2Y0ZWE5ODBmMzdjZTUuLmNkYTM3MDJhMjE1NGU4ZjdjMDU5OTU4MWQ1
MDg4ZWFlZjJhM2I0MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL0V3a1ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3
a1ZpZXcuY3BwCkBAIC0zOCw3ICszOCw5IEBACiAjaW5jbHVkZSAiV0tEaWN0aW9uYXJ5LmgiCiAj
aW5jbHVkZSAiV0tHZW9tZXRyeS5oIgogI2luY2x1ZGUgIldLTnVtYmVyLmgiCisjaW5jbHVkZSAi
V0tQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJXS1N0cmluZy5oIgorI2luY2x1ZGUgIldLVmlldy5o
IgogI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJJbWFnZS5oIgogI2luY2x1
ZGUgIldlYlBhZ2VHcm91cC5oIgpAQCAtMTEwLDE0ICsxMTIsMTQgQEAgY29uc3QgRXZhc19PYmpl
Y3QqIEV3a1ZpZXc6OnZpZXdGcm9tUGFnZVZpZXdNYXAoY29uc3QgV0tQYWdlUmVmIHBhZ2UpCiAg
ICAgcmV0dXJuIHBhZ2VWaWV3TWFwKCkuZ2V0KHBhZ2UpOwogfQogCi1Fd2tWaWV3OjpFd2tWaWV3
KEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQs
IFBhc3NSZWZQdHI8V2ViUGFnZUdyb3VwPiBwYWdlR3JvdXAsIFZpZXdCZWhhdmlvciBiZWhhdmlv
cikKLSAgICA6IG1fZXZhc09iamVjdChldmFzT2JqZWN0KQorRXdrVmlldzo6RXdrVmlldyhFdmFz
X09iamVjdCogdmlldywgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXZWJQYWdlR3Jv
dXAqIHBhZ2VHcm91cCwgVmlld0JlaGF2aW9yIGJlaGF2aW9yKQorICAgIDogbV9ldmFzT2JqZWN0
KHZpZXcpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCiAgICAgLCBtX3BlbmRpbmdTdXJmYWNlUmVzaXplKGZhbHNlKQogI2VuZGlmCiAg
ICAgLCBtX3BhZ2VDbGllbnQoYmVoYXZpb3IgPT0gRGVmYXVsdEJlaGF2aW9yID8gUGFnZUNsaWVu
dERlZmF1bHRJbXBsOjpjcmVhdGUodGhpcykgOiBQYWdlQ2xpZW50TGVnYWN5SW1wbDo6Y3JlYXRl
KHRoaXMpKQotICAgICwgbV9wYWdlUHJveHkobV9jb250ZXh0LT53ZWJDb250ZXh0KCktPmNyZWF0
ZVdlYlBhZ2UobV9wYWdlQ2xpZW50LmdldCgpLCBwYWdlR3JvdXAuZ2V0KCkpKQorICAgICwgbV93
ZWJWaWV3KGFkb3B0UmVmKG5ldyBXZWJWaWV3KG1fY29udGV4dC0+d2ViQ29udGV4dCgpLmdldCgp
LCBtX3BhZ2VDbGllbnQuZ2V0KCksIHBhZ2VHcm91cCwgdmlldykpKQogICAgICwgbV9wYWdlTG9h
ZENsaWVudChQYWdlTG9hZENsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQogICAgICwgbV9wYWdlUG9s
aWN5Q2xpZW50KFBhZ2VQb2xpY3lDbGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKICAgICAsIG1fcGFn
ZVVJQ2xpZW50KFBhZ2VVSUNsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQpAQCAtMTI3LDcgKzEyOSw3
IEBAIEV3a1ZpZXc6OkV3a1ZpZXcoRXZhc19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8
RXdrQ29udGV4dD4gY29udGV4dCwgUGFzc1JlCiAjaWYgRU5BQkxFKFZJQlJBVElPTikKICAgICAs
IG1fdmlicmF0aW9uQ2xpZW50KFZpYnJhdGlvbkNsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQogI2Vu
ZGlmCi0gICAgLCBtX2JhY2tGb3J3YXJkTGlzdChFd2tCYWNrRm9yd2FyZExpc3Q6OmNyZWF0ZSh0
b0FQSShtX3BhZ2VQcm94eS0+YmFja0ZvcndhcmRMaXN0KCkpKSkKKyAgICAsIG1fYmFja0Zvcndh
cmRMaXN0KEV3a0JhY2tGb3J3YXJkTGlzdDo6Y3JlYXRlKFdLUGFnZUdldEJhY2tGb3J3YXJkTGlz
dCh3a1BhZ2UoKSkpKQogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQogICAgICwgbV9wYWdl
U2NhbGVGYWN0b3IoMSkKICNlbmRpZgpAQCAtMTQ0LDI5ICsxNDYsMTggQEAgRXdrVmlldzo6RXdr
VmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250
ZXh0LCBQYXNzUmUKIHsKICAgICBBU1NFUlQobV9ldmFzT2JqZWN0KTsKICAgICBBU1NFUlQobV9j
b250ZXh0KTsKLSAgICBBU1NFUlQobV9wYWdlUHJveHkpOwogCi0jaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQotICAgIG1fcGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+
c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQodHJ1ZSk7Ci0gICAgbV9wYWdlUHJveHkt
PnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRGb3JjZUNvbXBvc2l0aW5nTW9kZSh0cnVl
KTsKLSNpZiBFTkFCTEUoV0VCR0wpCi0gICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVm
ZXJlbmNlcygpLT5zZXRXZWJHTEVuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKLSAgICBpZiAoYmVoYXZp
b3IgPT0gRGVmYXVsdEJlaGF2aW9yKQotICAgICAgICBtX3BhZ2VQcm94eS0+c2V0VXNlRml4ZWRM
YXlvdXQodHJ1ZSk7Ci0jZW5kaWYKKyAgICBXS1ZpZXdJbml0aWFsaXplKHdrVmlldygpKTsKIAot
ICAgIG1fcGFnZVByb3h5LT5pbml0aWFsaXplV2ViUGFnZSgpOworICAgIFdLUGFnZVNldFVzZUZp
eGVkTGF5b3V0KHdrUGFnZSgpLCBiZWhhdmlvciA9PSBEZWZhdWx0QmVoYXZpb3IpOwogCi0jaWYg
RU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIG1fcGFnZVByb3h5LT5mdWxsU2NyZWVuTWFuYWdl
cigpLT5zZXRXZWJWaWV3KG1fZXZhc09iamVjdCk7Ci0gICAgbV9wYWdlUHJveHktPnBhZ2VHcm91
cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRGdWxsU2NyZWVuRW5hYmxlZCh0cnVlKTsKLSNlbmRpZgot
I2lmIEVOQUJMRShXRUJfQVVESU8pCi0gICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVm
ZXJlbmNlcygpLT5zZXRXZWJBdWRpb0VuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKKyAgICBXS1BhZ2VH
cm91cFJlZiB3a1BhZ2VHcm91cCA9IFdLUGFnZUdldFBhZ2VHcm91cCh3a1BhZ2UoKSk7CisgICAg
V0tQcmVmZXJlbmNlc1JlZiB3a1ByZWZlcmVuY2VzID0gV0tQYWdlR3JvdXBHZXRQcmVmZXJlbmNl
cyh3a1BhZ2VHcm91cCk7CiAKLSAgICBtX3BhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVu
Y2VzKCktPnNldE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCh0cnVlKTsKKyAgICBX
S1ByZWZlcmVuY2VzU2V0V2ViR0xFbmFibGVkKHdrUHJlZmVyZW5jZXMsIHRydWUpOworICAgIFdL
UHJlZmVyZW5jZXNTZXRGdWxsU2NyZWVuRW5hYmxlZCh3a1ByZWZlcmVuY2VzLCB0cnVlKTsKKyAg
ICBXS1ByZWZlcmVuY2VzU2V0V2ViQXVkaW9FbmFibGVkKHdrUHJlZmVyZW5jZXMsIHRydWUpOwor
ICAgIFdLUHJlZmVyZW5jZXNTZXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQod2tQ
cmVmZXJlbmNlcywgdHJ1ZSk7CiAKICAgICAvLyBFbmFibGUgbW91c2UgZXZlbnRzIGJ5IGRlZmF1
bHQKICAgICBzZXRNb3VzZUV2ZW50c0VuYWJsZWQodHJ1ZSk7CkBAIC0xODIsOCArMTczLDYgQEAg
RXdrVmlldzo6RXdrVmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tD
b250ZXh0PiBjb250ZXh0LCBQYXNzUmUKIAogRXdrVmlldzo6fkV3a1ZpZXcoKQogewotICAgIG1f
cGFnZVByb3h5LT5jbG9zZSgpOwotCiAgICAgLy8gVW5yZWdpc3RlciBpY29uIGNoYW5nZSBjYWxs
YmFjay4KICAgICBFd2tGYXZpY29uRGF0YWJhc2UqIGljb25EYXRhYmFzZSA9IG1fY29udGV4dC0+
ZmF2aWNvbkRhdGFiYXNlKCk7CiAgICAgQVNTRVJUKGljb25EYXRhYmFzZSk7CkBAIC0yMTEsOSAr
MjAwLDkgQEAgRXdrVmlldyogRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QoY29uc3QgRXZhc19PYmpl
Y3QqIHZpZXcpCiAgKiBAaW50ZXJuYWwKICAqIFJldHJpZXZlcyB0aGUgaW50ZXJuYWwgV0tQYWdl
IGZvciB0aGlzIHZpZXcuCiAgKi8KLVdLUGFnZVJlZiBFd2tWaWV3Ojp3a1BhZ2UoKQorV0tQYWdl
UmVmIEV3a1ZpZXc6OndrUGFnZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRvQVBJKG1fcGFnZVBy
b3h5LmdldCgpKTsKKyAgICByZXR1cm4gV0tWaWV3R2V0UGFnZSh3a1ZpZXcoKSk7CiB9CiAKIHZv
aWQgRXdrVmlldzo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYgY3Vyc29yKQpAQCAtMjk3LDcgKzI4
Niw3IEBAIHZvaWQgRXdrVmlldzo6c2V0RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGUpCiAK
IGZsb2F0IEV3a1ZpZXc6OmRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bV9wYWdlUHJveHktPmRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgcmV0dXJuIFdLUGFnZUdldEJh
Y2tpbmdTY2FsZUZhY3Rvcih3a1BhZ2UoKSk7CiB9CiAKIEFmZmluZVRyYW5zZm9ybSBFd2tWaWV3
Ojp0cmFuc2Zvcm1Gcm9tU2NlbmUoKSBjb25zdApAQCAtNTIzLDcgKzUxMiw3IEBAIGJvb2wgRXdr
Vmlldzo6aXNWaXNpYmxlKCkgY29uc3QKIAogY29uc3QgY2hhciogRXdrVmlldzo6dGl0bGUoKSBj
b25zdAogewotICAgIG1fdGl0bGUgPSBtX3BhZ2VQcm94eS0+cGFnZVRpdGxlKCkudXRmOCgpLmRh
dGEoKTsKKyAgICBtX3RpdGxlID0gV0tFaW5hU2hhcmVkU3RyaW5nKEFkb3B0V0ssIFdLUGFnZUNv
cHlUaXRsZSh3a1BhZ2UoKSkpOwogCiAgICAgcmV0dXJuIG1fdGl0bGU7CiB9CkBAIC01NDYsMjQg
KzUzNSwyNiBAQCB2b2lkIEV3a1ZpZXc6OnNldFRoZW1lUGF0aChjb25zdCBjaGFyKiB0aGVtZSkK
IHsKICAgICBpZiAobV90aGVtZSAhPSB0aGVtZSkgewogICAgICAgICBtX3RoZW1lID0gdGhlbWU7
Ci0gICAgICAgIG1fcGFnZVByb3h5LT5zZXRUaGVtZVBhdGgodGhlbWUpOworICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gd2tUaGVtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcodGhlbWUpKTsKKyAgICAgICAgV0tWaWV3U2V0VGhlbWVQYXRoKHdrVmlldygp
LCB3a1RoZW1lLmdldCgpKTsKICAgICB9CiB9CiAKIGNvbnN0IGNoYXIqIEV3a1ZpZXc6OmN1c3Rv
bVRleHRFbmNvZGluZ05hbWUoKSBjb25zdAogewotICAgIFN0cmluZyBjdXN0b21FbmNvZGluZyA9
IG1fcGFnZVByb3h5LT5jdXN0b21UZXh0RW5jb2RpbmdOYW1lKCk7Ci0gICAgaWYgKGN1c3RvbUVu
Y29kaW5nLmlzRW1wdHkoKSkKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gY3VzdG9tRW5j
b2RpbmcgPSBhZG9wdFdLKFdLUGFnZUNvcHlDdXN0b21UZXh0RW5jb2RpbmdOYW1lKHdrUGFnZSgp
KSk7CisgICAgaWYgKFdLU3RyaW5nSXNFbXB0eShjdXN0b21FbmNvZGluZy5nZXQoKSkpCiAgICAg
ICAgIHJldHVybiAwOwogCi0gICAgbV9jdXN0b21FbmNvZGluZyA9IGN1c3RvbUVuY29kaW5nLnV0
ZjgoKS5kYXRhKCk7CisgICAgbV9jdXN0b21FbmNvZGluZyA9IFdLRWluYVNoYXJlZFN0cmluZyhj
dXN0b21FbmNvZGluZy5nZXQoKSk7CiAKICAgICByZXR1cm4gbV9jdXN0b21FbmNvZGluZzsKIH0K
IAogdm9pZCBFd2tWaWV3OjpzZXRDdXN0b21UZXh0RW5jb2RpbmdOYW1lKGNvbnN0IFN0cmluZyYg
ZW5jb2RpbmcpCiB7Ci0gICAgbV9wYWdlUHJveHktPnNldEN1c3RvbVRleHRFbmNvZGluZ05hbWUo
ZW5jb2RpbmcpOworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a0VuY29kaW5nID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhlbmNvZGluZy51dGY4KCkuZGF0YSgp
KSk7CisgICAgV0tQYWdlU2V0Q3VzdG9tVGV4dEVuY29kaW5nTmFtZSh3a1BhZ2UoKSwgd2tFbmNv
ZGluZy5nZXQoKSk7CiB9CiAKIHZvaWQgRXdrVmlldzo6c2V0TW91c2VFdmVudHNFbmFibGVkKGJv
b2wgZW5hYmxlZCkKQEAgLTY0NSw5ICs2MzYsNiBAQCBib29sIEV3a1ZpZXc6OmNyZWF0ZUdMU3Vy
ZmFjZShjb25zdCBJbnRTaXplJiB2aWV3U2l6ZSkKICAgICAgICAgaWYgKCFtX2V2YXNHTCkgewog
ICAgICAgICAgICAgV0FSTigiRmFpbGVkIHRvIGNyZWF0ZSBFdmFzX0dMLCBmYWxsaW5nIGJhY2sg
dG8gc29mdHdhcmUgbW9kZS4iKTsKICAgICAgICAgICAgIG1faXNIYXJkd2FyZUFjY2VsZXJhdGVk
ID0gZmFsc2U7Ci0jaWYgRU5BQkxFKFdFQkdMKQotICAgICAgICAgICAgbV9wYWdlUHJveHktPnBh
Z2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRXZWJHTEVuYWJsZWQoZmFsc2UpOwotI2VuZGlm
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CkBAIC04OTAsMTUg
Kzg3OCwxMyBAQCB1bnNpZ25lZCBsb25nIGxvbmcgRXdrVmlldzo6aW5mb3JtRGF0YWJhc2VRdW90
YVJlYWNoZWQoY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbQogICovCiB2b2lkIEV3a1ZpZXc6Omlu
Zm9ybVVSTENoYW5nZSgpCiB7Ci0gICAgU3RyaW5nIGFjdGl2ZVVSTCA9IG1fcGFnZVByb3h5LT5h
Y3RpdmVVUkwoKTsKLSAgICBpZiAoYWN0aXZlVVJMLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
OworICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB3a0FjdGl2ZVVSTCA9IGFkb3B0V0soV0tQYWdl
Q29weUFjdGl2ZVVSTCh3a1BhZ2UoKSkpOworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3
a1VSTFN0cmluZyA9IGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHdrQWN0aXZlVVJMLmdldCgpKSk7
CiAKLSAgICBDU3RyaW5nIHJhd0FjdGl2ZVVSTCA9IGFjdGl2ZVVSTC51dGY4KCk7Ci0gICAgaWYg
KG1fdXJsID09IHJhd0FjdGl2ZVVSTC5kYXRhKCkpCisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcod2tVUkxTdHJpbmcuZ2V0KCksIG1fdXJsKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgbV91cmwgPSByYXdBY3RpdmVVUkwuZGF0YSgpOworICAgIG1fdXJsID0gV0tFaW5hU2hh
cmVkU3RyaW5nKHdrVVJMU3RyaW5nLmdldCgpKTsKICAgICBzbWFydENhbGxiYWNrPFVSTENoYW5n
ZWQ+KCkuY2FsbChtX3VybCk7CiAKICAgICAvLyBVcGRhdGUgdGhlIHZpZXcncyBmYXZpY29uLgpA
QCAtMTAzMCw3ICsxMDE2LDcgQEAgdm9pZCBFd2tWaWV3OjpvbkZhdmljb25DaGFuZ2VkKGNvbnN0
IGNoYXIqIHBhZ2VVUkwsIHZvaWQqIGV2ZW50SW5mbykKIFBhc3NSZWZQdHI8Y2Fpcm9fc3VyZmFj
ZV90PiBFd2tWaWV3Ojp0YWtlU25hcHNob3QoKQogewogICAgIC8vIFN1c3BlbmQgYWxsIGFuaW1h
dGlvbnMgYmVmb3JlIHRha2luZyB0aGUgc25hcHNob3QuCi0gICAgbV9wYWdlUHJveHktPnN1c3Bl
bmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworICAgIFdLVmlld1N1c3BlbmRBY3Rp
dmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyh3a1ZpZXcoKSk7CiAKICAgICAvLyBXYWl0IGZvciB0
aGUgcGVuZGluZyByZXBhaW50IGV2ZW50cyB0byBiZSBwcm9jZXNzZWQuCiAgICAgd2hpbGUgKG1f
ZGlzcGxheVRpbWVyLmlzQWN0aXZlKCkpCkBAIC0xMDQyLDcgKzEwMjgsNyBAQCBQYXNzUmVmUHRy
PGNhaXJvX3N1cmZhY2VfdD4gRXdrVmlldzo6dGFrZVNuYXBzaG90KCkKICNlbmRpZgogICAgICAg
ICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzbmFwc2hvdCA9IGNyZWF0ZVN1cmZhY2VGb3JJbWFn
ZShzZC0+aW1hZ2UpOwogICAgICAgICAvLyBSZXN1bWUgYWxsIGFuaW1hdGlvbnMuCi0gICAgICAg
IG1fcGFnZVByb3h5LT5yZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworICAg
ICAgICBXS1ZpZXdSZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyh3a1ZpZXcoKSk7
CiAKICAgICAgICAgcmV0dXJuIHNuYXBzaG90LnJlbGVhc2UoKTsKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCkBAIC0xMDUwLDcgKzEwMzYsNyBAQCBQYXNzUmVmUHRyPGNhaXJvX3N1
cmZhY2VfdD4gRXdrVmlldzo6dGFrZVNuYXBzaG90KCkKIAogICAgIFJlZlB0cjxjYWlyb19zdXJm
YWNlX3Q+IHNuYXBzaG90ID0gZ2V0SW1hZ2VTdXJmYWNlRnJvbUZyYW1lQnVmZmVyKDAsIDAsIHNk
LT52aWV3LncsIHNkLT52aWV3LmgpOwogICAgIC8vIFJlc3VtZSBhbGwgYW5pbWF0aW9ucy4KLSAg
ICBtX3BhZ2VQcm94eS0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKKyAg
ICBXS1ZpZXdSZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyh3a1ZpZXcoKSk7CiAK
ICAgICByZXR1cm4gc25hcHNob3QucmVsZWFzZSgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKaW5kZXggYTIxM2Y5N2Q1ZWJiNDE5NjMxNmE5ZWFj
ZTEyOGI5YTIyOWVkNTAwZC4uMTUzYzZjYWYzYTU4YjExZjFjOGUxMGYyOWFiOTllMjRhNzc5NGI1
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaApAQCAtMjcs
NiArMjcsNyBAQAogI2luY2x1ZGUgIldLRWluYVNoYXJlZFN0cmluZy5oIgogI2luY2x1ZGUgIldL
R2VvbWV0cnkuaCIKICNpbmNsdWRlICJXS1JldGFpblB0ci5oIgorI2luY2x1ZGUgIldlYlZpZXcu
aCIKICNpbmNsdWRlICJld2tfdXJsX3JlcXVlc3RfcHJpdmF0ZS5oIgogI2luY2x1ZGUgPEV2YXMu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQuaD4KQEAgLTQ5LDYgKzUwLDEwIEBACiAj
aW5jbHVkZSAiRXZhc0dMU3VyZmFjZS5oIgogI2VuZGlmCiAKKyNpbmNsdWRlICJXZWJDb250ZXh0
LmgiCisjaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMu
aCIKKwogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBDb250ZXh0TWVudUNsaWVudEVmbDsKIGNs
YXNzIEZpbmRDbGllbnRFZmw7CkBAIC05OCwxOSArMTAzLDIwIEBAIHR5cGVkZWYgc3RydWN0IEV3
a19WaWV3X1NtYXJ0X0RhdGEgRXdrX1ZpZXdfU21hcnRfRGF0YTsKIAogY2xhc3MgRXdrVmlldyB7
CiBwdWJsaWM6Ci0KICAgICBlbnVtIFZpZXdCZWhhdmlvciB7CiAgICAgICAgIExlZ2FjeUJlaGF2
aW9yLAogICAgICAgICBEZWZhdWx0QmVoYXZpb3IKICAgICB9OwotICAgIEV3a1ZpZXcoRXZhc19P
YmplY3QqIHZpZXcsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgUGFzc1JlZlB0cjxX
ZWJLaXQ6OldlYlBhZ2VHcm91cD4gcGFnZUdyb3VwLCBWaWV3QmVoYXZpb3IpOworICAgIEV3a1Zp
ZXcoRXZhc19PYmplY3QqIHZpZXcsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgV2Vi
S2l0OjpXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCwgVmlld0JlaGF2aW9yKTsKICAgICB+RXdrVmll
dygpOwogCiAgICAgc3RhdGljIEV3a1ZpZXcqIGZyb21FdmFzT2JqZWN0KGNvbnN0IEV2YXNfT2Jq
ZWN0KiB2aWV3KTsKICAgICBFdmFzX09iamVjdCogdmlldygpIHsgcmV0dXJuIG1fZXZhc09iamVj
dDsgfQogCi0gICAgV0tQYWdlUmVmIHdrUGFnZSgpOwotICAgIFdlYktpdDo6V2ViUGFnZVByb3h5
KiBwYWdlKCkgeyByZXR1cm4gbV9wYWdlUHJveHkuZ2V0KCk7IH0KKyAgICBXS1ZpZXdSZWYgd2tW
aWV3KCkgY29uc3QgeyByZXR1cm4gdG9BUEkobV93ZWJWaWV3LmdldCgpKTsgfQorICAgIFdLUGFn
ZVJlZiB3a1BhZ2UoKSBjb25zdDsKKworICAgIFdlYktpdDo6V2ViUGFnZVByb3h5KiBwYWdlKCkg
eyByZXR1cm4gbV93ZWJWaWV3LT5wYWdlKCk7IH0KICAgICBFd2tDb250ZXh0KiBld2tDb250ZXh0
KCkgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CiAgICAgRXdrU2V0dGluZ3MqIHNldHRpbmdz
KCkgeyByZXR1cm4gbV9zZXR0aW5ncy5nZXQoKTsgfQogICAgIEV3a0JhY2tGb3J3YXJkTGlzdCog
YmFja0ZvcndhcmRMaXN0KCkgeyByZXR1cm4gbV9iYWNrRm9yd2FyZExpc3QuZ2V0KCk7IH0KQEAg
LTI0NSw3ICsyNTEsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9wZW5kaW5nU3VyZmFjZVJlc2l6
ZTsKICNlbmRpZgogICAgIE93blB0cjxXZWJLaXQ6OlBhZ2VDbGllbnRCYXNlPiBtX3BhZ2VDbGll
bnQ7Ci0gICAgUmVmUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5PiBtX3BhZ2VQcm94eTsKKyAgICBS
ZWZQdHI8V2ViS2l0OjpXZWJWaWV3PiBtX3dlYlZpZXc7CiAgICAgT3duUHRyPFdlYktpdDo6UGFn
ZUxvYWRDbGllbnRFZmw+IG1fcGFnZUxvYWRDbGllbnQ7CiAgICAgT3duUHRyPFdlYktpdDo6UGFn
ZVBvbGljeUNsaWVudEVmbD4gbV9wYWdlUG9saWN5Q2xpZW50OwogICAgIE93blB0cjxXZWJLaXQ6
OlBhZ2VVSUNsaWVudEVmbD4gbV9wYWdlVUlDbGllbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKaW5kZXggNzJhNmFmYWEzZWVjMTA4NTU5YWZkYWY4
NzYzODJmYjVjMzczY2MxMS4uY2FlMDQyNThmNGNiZmQ0MDJhMTJiOGU1Yzc3NzBlODE0YTBmNjQx
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcApA
QCAtNTA1LDcgKzUwNSw3IEBAIHN0YXRpYyBpbmxpbmUgRXZhc19TbWFydCogY3JlYXRlRXdrVmll
d1NtYXJ0Q2xhc3Modm9pZCkKICAgICByZXR1cm4gc21hcnQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
RXZhc19PYmplY3QqIGNyZWF0ZUV3a1ZpZXcoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFy
dCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3Jv
dXBSZWYgPSAwLCBFd2tWaWV3OjpWaWV3QmVoYXZpb3IgYmVoYXZpb3IgPSBFd2tWaWV3OjpEZWZh
dWx0QmVoYXZpb3IpCitzdGF0aWMgaW5saW5lIEV3a1ZpZXcqIGNyZWF0ZUV3a1ZpZXcoRXZhcyog
Y2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0
LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYgPSAwLCBFd2tWaWV3OjpWaWV3QmVoYXZpb3Ig
YmVoYXZpb3IgPSBFd2tWaWV3OjpEZWZhdWx0QmVoYXZpb3IpCiB7CiAgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKGNhbnZhcywgMCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHNtYXJ0LCAwKTsKQEAgLTUyNSwyMSArNTI1LDIyIEBAIHN0YXRpYyBpbmxpbmUg
RXZhc19PYmplY3QqIGNyZWF0ZUV3a1ZpZXcoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFy
dCwgUGFzc1JlCiAgICAgLy8gRGVmYXVsdCBXZWJQYWdlR3JvdXAgaXMgY3JlYXRlZCBpbiBXZWJD
b250ZXh0IGNvbnN0cnVjdG9yIGlmIHRoZSBwYWdlR3JvdXBSZWYgaXMgMCwKICAgICAvLyBzbyB3
ZSBkbyBub3QgbmVlZCB0byBjcmVhdGUgaXQgaGVyZS4KICAgICBzbWFydERhdGEtPnByaXYgPSBu
ZXcgRXdrVmlldyhld2tWaWV3LCBjb250ZXh0LCB0b0ltcGwocGFnZUdyb3VwUmVmKSwgYmVoYXZp
b3IpOwotICAgIHJldHVybiBld2tWaWV3OworCisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+cHJpdjsK
IH0KIAogLyoqCiAgKiBAaW50ZXJuYWwKICAqIENvbnN0cnVjdHMgYSBld2tfdmlldyBFdmFzX09i
amVjdCB3aXRoIFdLVHlwZSBwYXJhbWV0ZXJzLgogICovCi1FdmFzX09iamVjdCogZXdrX3ZpZXdf
YmFzZV9hZGQoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3Jv
dXBSZWYgcGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpWaWV3QmVoYXZpb3IgYmVoYXZpb3IpCitFd2tW
aWV3KiBld2tfdmlld19iYXNlX2FkZChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0
UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OlZpZXdCZWhhdmlvciBi
ZWhhdmlvcikKIHsKICAgICByZXR1cm4gY3JlYXRlRXdrVmlldyhjYW52YXMsIGNyZWF0ZUV3a1Zp
ZXdTbWFydENsYXNzKCksIGNvbnRleHRSZWYgPyBFd2tDb250ZXh0OjpjcmVhdGUodG9JbXBsKGNv
bnRleHRSZWYpKSA6IEV3a0NvbnRleHQ6OmRlZmF1bHRDb250ZXh0KCksIHBhZ2VHcm91cFJlZiwg
YmVoYXZpb3IpOwogfQogCiBFdmFzX09iamVjdCogZXdrX3ZpZXdfc21hcnRfYWRkKEV2YXMqIGNh
bnZhcywgRXZhc19TbWFydCogc21hcnQsIEV3a19Db250ZXh0KiBjb250ZXh0KQogewotICAgIHJl
dHVybiBjcmVhdGVFd2tWaWV3KGNhbnZhcywgc21hcnQsIGV3a19vYmplY3RfY2FzdDxFd2tDb250
ZXh0Kj4oY29udGV4dCkpOworICAgIHJldHVybiBjcmVhdGVFd2tWaWV3KGNhbnZhcywgc21hcnQs
IGV3a19vYmplY3RfY2FzdDxFd2tDb250ZXh0Kj4oY29udGV4dCkpLT52aWV3KCk7CiB9CiAKIEV2
YXNfT2JqZWN0KiBld2tfdmlld19hZGRfd2l0aF9jb250ZXh0KEV2YXMqIGNhbnZhcywgRXdrX0Nv
bnRleHQqIGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdmlld19wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfdmlld19wcml2YXRlLmgKaW5kZXggODNiNGM5NzNiMWEzNjRjYzc5NjhjOGYzNzkxYWVj
ZjZkMjRjZWFhYi4uYzQ5MTJmZmQ3YjQxZTRlNTJhN2Y0YzZmYThkODBlYWQ0YjQxMDY1OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZh
dGUuaApAQCAtMjUsNiArMjUsNiBAQAogI2luY2x1ZGUgPEV2YXMuaD4KICNpbmNsdWRlIDxXZWJL
aXQyL1dLQmFzZS5oPgogCi1FdmFzX09iamVjdCogZXdrX3ZpZXdfYmFzZV9hZGQoRXZhcyogY2Fu
dmFzLCBXS0NvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpWaWV3QmVoYXZpb3Ip
OworRXdrVmlldyogZXdrX3ZpZXdfYmFzZV9hZGQoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYs
IFdLUGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpWaWV3QmVoYXZpb3IpOwogCiAjZW5kaWYgLy8gZXdr
X3ZpZXdfcHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZs
L1dlYkluc3BlY3RvclByb3h5RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwv
V2ViSW5zcGVjdG9yUHJveHlFZmwuY3BwCmluZGV4IDQ2MmIyNmQzNTBlZWZlZDcwMzM4MjFlNTc3
NGFhY2FjODU0Y2FhN2YuLjMxNzQ0OWRkMTVlNGQ4ZWZlMTkwYjllYWQ0MmVkNzMzZGY2OGQzMDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJv
eHlFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9y
UHJveHlFZmwuY3BwCkBAIC05OCwxNCArOTgsMTUgQEAgV2ViUGFnZVByb3h5KiBXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVJbnNwZWN0b3JQYWdlKCkKICAgICBpZiAoIW1faW5zcGVj
dG9yV2luZG93KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIG1faW5zcGVjdG9yVmlldyA9IGV3
a192aWV3X2Jhc2VfYWRkKGVjb3JlX2V2YXNfZ2V0KG1faW5zcGVjdG9yV2luZG93KSwgdG9BUEko
cGFnZSgpLT5wcm9jZXNzKCktPmNvbnRleHQoKSksIHRvQVBJKGluc3BlY3RvclBhZ2VHcm91cCgp
KSwgRXdrVmlldzo6TGVnYWN5QmVoYXZpb3IpOwotICAgIEV3a1ZpZXcqIGluc3BlY3RvclZpZXdJ
bXBsID0gRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QobV9pbnNwZWN0b3JWaWV3KTsKLSAgICBpbnNw
ZWN0b3JWaWV3SW1wbC0+c2V0VGhlbWVQYXRoKFRFU1RfVEhFTUVfRElSICIvZGVmYXVsdC5lZGoi
KTsKKyAgICAvLyBGSVhNRTogUmVmYWN0b3IgdG8gdXNlIFdLVmlld1JlZi4KKyAgICBtX2luc3Bl
Y3RvclZpZXcgPSBld2tfdmlld19iYXNlX2FkZChlY29yZV9ldmFzX2dldChtX2luc3BlY3Rvcldp
bmRvdyksIHRvQVBJKHBhZ2UoKS0+cHJvY2VzcygpLT5jb250ZXh0KCkpLCB0b0FQSShpbnNwZWN0
b3JQYWdlR3JvdXAoKSksIEV3a1ZpZXc6OkxlZ2FjeUJlaGF2aW9yKS0+dmlldygpOworICAgIEV3
a1ZpZXcqIGluc3BlY3RvclZpZXcgPSBFd2tWaWV3Ojpmcm9tRXZhc09iamVjdChtX2luc3BlY3Rv
clZpZXcpOworICAgIGluc3BlY3RvclZpZXctPnNldFRoZW1lUGF0aChURVNUX1RIRU1FX0RJUiAi
L2RlZmF1bHQuZWRqIik7CiAKLSAgICBFd2tfU2V0dGluZ3MqIHNldHRpbmdzID0gaW5zcGVjdG9y
Vmlld0ltcGwtPnNldHRpbmdzKCk7CisgICAgRXdrX1NldHRpbmdzKiBzZXR0aW5ncyA9IGluc3Bl
Y3RvclZpZXctPnNldHRpbmdzKCk7CiAgICAgZXdrX3NldHRpbmdzX2ZpbGVfYWNjZXNzX2Zyb21f
ZmlsZV91cmxzX2FsbG93ZWRfc2V0KHNldHRpbmdzLCB0cnVlKTsKIAotICAgIHJldHVybiBpbnNw
ZWN0b3JWaWV3SW1wbC0+cGFnZSgpOworICAgIHJldHVybiBpbnNwZWN0b3JWaWV3LT5wYWdlKCk7
CiB9CiAKIHZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtT3BlbigpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mN2QxYmJhZWNmYzdkMTEz
NTcwMjdhNzI5ZDgzZTNiMTZlNzZiNTYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmNwcApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VCBIT0xERVJTIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlZpZXcuaCIKKworI2lm
IEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyNpbmNsdWRlICJXZWJGdWxsU2NyZWVuTWFuYWdlclBy
b3h5LmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYlZpZXc6OldlYlZpZXco
V2ViQ29udGV4dCogY29udGV4dCwgUGFnZUNsaWVudCogcGFnZUNsaWVudCwgV2ViUGFnZUdyb3Vw
KiBwYWdlR3JvdXAsIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0KQorICAgIDogbV93ZWJQYWdlUHJv
eHkoY29udGV4dC0+Y3JlYXRlV2ViUGFnZShwYWdlQ2xpZW50LCBwYWdlR3JvdXApKQorICAgICwg
bV9ldmFzT2JqZWN0KGV2YXNPYmplY3QpCit7CisgICAgbV93ZWJQYWdlUHJveHktPnBhZ2VHcm91
cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCh0cnVl
KTsKKyAgICBtX3dlYlBhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldEZv
cmNlQ29tcG9zaXRpbmdNb2RlKHRydWUpOworCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQor
ICAgIG1fd2ViUGFnZVByb3h5LT5mdWxsU2NyZWVuTWFuYWdlcigpLT5zZXRXZWJWaWV3KG1fZXZh
c09iamVjdCk7CisjZW5kaWYKK30KKworV2ViVmlldzo6fldlYlZpZXcoKQoreworICAgIG1fd2Vi
UGFnZVByb3h5LT5jbG9zZSgpOworfQorCit2b2lkIFdlYlZpZXc6OmluaXRpYWxpemUoKQorewor
ICAgIG1fd2ViUGFnZVByb3h5LT5pbml0aWFsaXplV2ViUGFnZSgpOworfQorCit2b2lkIFdlYlZp
ZXc6OnNldFRoZW1lUGF0aChXS1N0cmluZ1JlZiB0aGVtZSkKK3sKKyAgICBtX3dlYlBhZ2VQcm94
eS0+c2V0VGhlbWVQYXRoKHRvV1RGU3RyaW5nKHRoZW1lKS51dGY4KCkuZGF0YSgpKTsKK30KKwor
dm9pZCBXZWJWaWV3OjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKQorewor
ICAgIG1fd2ViUGFnZVByb3h5LT5zdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMo
KTsKK30KKwordm9pZCBXZWJWaWV3OjpyZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9u
cygpCit7CisgICAgbV93ZWJQYWdlUHJveHktPnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmlt
YXRpb25zKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZWZsL1dlYlZpZXcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMWU3NjZkZmQxZjAwNmE2MzkzODQ2N2QzMjc1
MjAwMmM4MTdhODU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2VmbC9XZWJWaWV3LmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgV2ViVmlld19oCisjZGVmaW5lIFdlYlZpZXdfaAorCisjaW5jbHVkZSAiQVBJT2JqZWN0Lmgi
CisjaW5jbHVkZSAiUGFnZUNsaWVudC5oIgorI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKKyNpbmNs
dWRlICJXZWJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRl
ICJXZWJQcmVmZXJlbmNlcy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViVmll
dyA6IHB1YmxpYyBBUElPYmplY3QgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBUeXBlIEFQ
SVR5cGUgPSBUeXBlVmlldzsKKworICAgIFdlYlZpZXcoV2ViQ29udGV4dCosIFBhZ2VDbGllbnQq
LCBXZWJQYWdlR3JvdXAqLCBFdmFzX09iamVjdCopOworICAgIHZpcnR1YWwgfldlYlZpZXcoKTsK
KworICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworCisgICAgV0tQYWdlUmVmIHBhZ2VSZWYoKSBjb25z
dCB7IHJldHVybiB0b0FQSShtX3dlYlBhZ2VQcm94eS5nZXQoKSk7IH0KKworICAgIHZvaWQgc2V0
VGhlbWVQYXRoKFdLU3RyaW5nUmVmKTsKKyAgICB2b2lkIHN1c3BlbmRBY3RpdmVET01PYmplY3Rz
QW5kQW5pbWF0aW9ucygpOworICAgIHZvaWQgcmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1h
dGlvbnMoKTsKKworICAgIC8vIEZJWE1FOiBSZW1vdmUgd2hlbiBwb3NzaWJsZS4KKyAgICBFdmFz
X09iamVjdCogZXZhc09iamVjdCgpIHsgcmV0dXJuIG1fZXZhc09iamVjdDsgfQorICAgIFdlYlBh
Z2VQcm94eSogcGFnZSgpIHsgcmV0dXJuIG1fd2ViUGFnZVByb3h5LmdldCgpOyB9CisKK3ByaXZh
dGU6CisgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBBUElUeXBlOyB9CisK
KyAgICBSZWZQdHI8V2ViUGFnZVByb3h5PiBtX3dlYlBhZ2VQcm94eTsKKyAgICBFdmFzX09iamVj
dCogbV9ldmFzT2JqZWN0OworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBlMmJhZmQwZjc2NDhiOTEzOGE2NzBlMWJl
Mjc2MmU1ODk3NWM0NzRiLi4xYjA4OTRiNmZiNDJiZDlmZThlYjIxZmUxMWU4ZWFjMDc4ZjAxY2Ri
IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzkgQEAKKzIwMTMtMDEtMjggIEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuICA8a2Vu
bmV0aEB3ZWJraXQub3JnPgorCisgICAgICAgIFtFRkxdW1dLMl0gSW50cm9kdWNlIGEgV2ViVmll
dyBjbGFzcyBhcyBjb3VudGVycGFydCBmb3IgV0tWaWV3UmVmCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc5MzEKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2UgcGxhdGZvcm1WaWV3IHRvIGJlIGEg
V0tWaWV3IGFuZCB1c2UgV0tWaWV3R2V0RXZhc09iamVjdAorICAgICAgICBmb3IgdGhlIHBsYWNl
cyB3aGVyZSBhbiBFdmFzX09iamVjdCBpcyBuZWVkZWQuCisKKyAgICAgICAgSW5zdGVhZCBvZiBl
eHRyYWN0aW5nIHRoZSBFY29yZV9FdmFzKiBmcm9tIHRoZSBtX3ZpZXcgd2UgdXNlCisgICAgICAg
IHRoZSBtX3dpbmRvdyBpbnN0ZWFkLCB3aGljaCBhY3R1YWxseSBob2xkcyB0aGUgaXQuCisKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2ViVmlldy5oOgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvZWZsL1BsYXRmb3JtV2ViVmlldy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpQbGF0Zm9ybVdlYlZpZXc6OlBsYXRmb3JtV2ViVmlldyk6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpQbGF0Zm9ybVdlYlZpZXc6On5QbGF0Zm9ybVdlYlZpZXcpOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6UGxhdGZvcm1XZWJWaWV3OjpyZXNpemVUbyk6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpQbGF0Zm9ybVdlYlZpZXc6OnBhZ2UpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGxh
dGZvcm1XZWJWaWV3OjpzaW11bGF0ZVNwYWNlYmFyS2V5UHJlc3MpOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6UGxhdGZvcm1XZWJWaWV3OjpzaW11bGF0ZU1vdXNlTW92ZSk6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpQbGF0Zm9ybVdlYlZpZXc6OnNpbXVsYXRlUmlnaHRDbGljayk6CisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaDoKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL2VmbC9FdmVudFNlbmRlclByb3h5RWZsLmNwcDoKKyAgICAgICAgKFdUUjo6
RXZlbnRTZW5kZXJQcm94eTo6c2VuZFRvdWNoRXZlbnQpOgorICAgICAgICAoV1RSOjpFdmVudFNl
bmRlclByb3h5OjpzZXRUb3VjaE1vZGlmaWVyKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L2VmbC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3BwOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZp
ZXc6OlBsYXRmb3JtV2ViVmlldyk6CisgICAgICAgIChXVFI6OlBsYXRmb3JtV2ViVmlldzo6flBs
YXRmb3JtV2ViVmlldyk6CisgICAgICAgIChXVFI6OlBsYXRmb3JtV2ViVmlldzo6cmVzaXplVG8p
OgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6OnBhZ2UpOgorICAgICAgICAoV1RSOjpQ
bGF0Zm9ybVdlYlZpZXc6OmZvY3VzKToKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3Ojp3
aW5kb3dGcmFtZSk6CisgICAgICAgIChXVFI6OlBsYXRmb3JtV2ViVmlldzo6c2V0V2luZG93RnJh
bWUpOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6OndpbmRvd1NuYXBzaG90SW1hZ2Up
OgorCiAyMDEzLTAxLTI4ICBSYXBoYWVsIEt1Ym8gZGEgQ29zdGEgIDxyYXBoYWVsLmt1Ym8uZGEu
Y29zdGFAaW50ZWwuY29tPgogCiAgICAgICAgIFtFRkxdIEluY2x1ZGUgRWNvcmVfR2V0b3B0Lmgg
aW4gTWluaUJyb3dzZXIuCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3Jt
V2ViVmlldy5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdlYlZpZXcuaAppbmRleCA1
YWQxZWVkMGUxZjFlMmIxMWQyYjlhY2MwNmUzOGQ0OThmMjNiNWRjLi5kY2FmNDQ4NDJkNmVmZTc5
NGZhNGI3YzFhMjg3YzBkMWE4NTQzMjNiIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1BsYXRmb3JtV2ViVmlldy5oCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XZWJW
aWV3LmgKQEAgLTQ3LDEzICs0Nyw4IEBAIHR5cGVkZWYgSFdORCBQbGF0Zm9ybVdpbmRvdzsKIHR5
cGVkZWYgV0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlwZWRlZiBHdGtXaWRnZXQgKlBsYXRm
b3JtV2luZG93OwogI2VsaWYgUExBVEZPUk0oRUZMKQotI2lmIFVTRShFTykKLXR5cGVkZWYgc3Ry
dWN0IF9FbyBFdmFzX09iamVjdDsKLSNlbHNlCi10eXBlZGVmIHN0cnVjdCBfRXZhc19PYmplY3Qg
RXZhc19PYmplY3Q7Ci0jZW5kaWYKIHR5cGVkZWYgc3RydWN0IF9FY29yZV9FdmFzIEVjb3JlX0V2
YXM7Ci10eXBlZGVmIEV2YXNfT2JqZWN0KiBQbGF0Zm9ybVdLVmlldzsKK3R5cGVkZWYgV0tWaWV3
UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlwZWRlZiBFY29yZV9FdmFzKiBQbGF0Zm9ybVdpbmRvdzsK
ICNlbmRpZgogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2VmbC9QbGF0Zm9ybVdl
YlZpZXcuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwvUGxhdGZvcm1XZWJWaWV3LmNwcApp
bmRleCBkNTQ0OWViNGQxOTM2MTdhYjBhNGNiYTZlZDY2MWVkZDNiMDUzODI0Li4zYzk5MGFkMjZm
NGVlZDM2MWVjNDZmNDgwOTMxY2I4MGNkMmE5NmNmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL2VmbC9QbGF0Zm9ybVdlYlZpZXcuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
ZWZsL1BsYXRmb3JtV2ViVmlldy5jcHAKQEAgLTY1LDMzICs2NSwzOCBAQCBQbGF0Zm9ybVdlYlZp
ZXc6OlBsYXRmb3JtV2ViVmlldyhXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBS
ZWYgcGFnZUdybwogewogICAgIG1fd2luZG93ID0gaW5pdEVjb3JlRXZhcygpOwogICAgIEV2YXMq
IGV2YXMgPSBlY29yZV9ldmFzX2dldChtX3dpbmRvdyk7Ci0gICAgbV92aWV3ID0gdG9JbXBsKFdL
Vmlld0NyZWF0ZShldmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYpKTsKLSAgICBld2tfdmll
d190aGVtZV9zZXQobV92aWV3LCBUSEVNRV9ESVIiL2RlZmF1bHQuZWRqIik7Ci0gICAgZXZhc19v
YmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKG1fdmlldywgIndlYnByb2Nlc3MsY3Jhc2hlZCIsIG9u
V2ViUHJvY2Vzc0NyYXNoZWQsIDApOworICAgIG1fdmlldyA9IFdLVmlld0NyZWF0ZShldmFzLCBj
b250ZXh0UmVmLCBwYWdlR3JvdXBSZWYpOworICAgIGV3a192aWV3X3RoZW1lX3NldChXS1ZpZXdH
ZXRFdmFzT2JqZWN0KG1fdmlldyksIFRIRU1FX0RJUiIvZGVmYXVsdC5lZGoiKTsKKyAgICBldmFz
X29iamVjdF9zbWFydF9jYWxsYmFja19hZGQoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCAi
d2VicHJvY2VzcyxjcmFzaGVkIiwgb25XZWJQcm9jZXNzQ3Jhc2hlZCwgMCk7CiAgICAgcmVzaXpl
VG8oNjAwLCA4MDApOwogfQogCiBQbGF0Zm9ybVdlYlZpZXc6On5QbGF0Zm9ybVdlYlZpZXcoKQog
ewotICAgIGV2YXNfb2JqZWN0X2RlbChtX3ZpZXcpOworICAgIC8vIEZJWE1FOiBUaGUgQyBXS1Zp
ZXcgQVBJIGN1cnJlbnRseSBjcmVhdGVzIHRoZSBFdmFzX09iamVjdCwgc28gd2UgaGF2ZSB0byBk
ZXN0cnVjdCBpdAorICAgIC8vIChhbmQgaXRzIGRlcGVuZGVuY2llcyBFd2tWaWV3IGFuZCBXZWJL
aXQ6OldlYlZpZXcpIHRoaXMgd2F5LCB1bnRpbCB0aGlzIGdldCBmaXhlZC4KKyAgICBldmFzX29i
amVjdF9kZWwoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpKTsKKworICAgIFdLUmVsZWFzZSht
X3ZpZXcpOworCiAgICAgZWNvcmVfZXZhc19mcmVlKG1fd2luZG93KTsKICAgICBlY29yZV9ldmFz
X3NodXRkb3duKCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpyZXNpemVUbyh1bnNpZ25l
ZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQogewotICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShtX3Zp
ZXcsIHdpZHRoLCBoZWlnaHQpOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShXS1ZpZXdHZXRFdmFz
T2JqZWN0KG1fdmlldyksIHdpZHRoLCBoZWlnaHQpOwogfQogCiBXS1BhZ2VSZWYgUGxhdGZvcm1X
ZWJWaWV3OjpwYWdlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV0tWaWV3R2V0UGFnZSh0b0FQSSht
X3ZpZXcpKTsKKyAgICByZXR1cm4gV0tWaWV3R2V0UGFnZShtX3ZpZXcpOwogfQogCiB2b2lkIFBs
YXRmb3JtV2ViVmlldzo6c2ltdWxhdGVTcGFjZWJhcktleVByZXNzKCkKIHsKICAgICBFdmFzKiBl
dmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwotICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3Nl
dChtX3ZpZXcsIHRydWUpOworICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldChXS1ZpZXdHZXRFdmFz
T2JqZWN0KG1fdmlldyksIHRydWUpOwogICAgIGV2YXNfZXZlbnRfZmVlZF9rZXlfZG93bihldmFz
LCAic3BhY2UiLCAic3BhY2UiLCAiICIsIDAsIDAsIDApOwogICAgIGV2YXNfZXZlbnRfZmVlZF9r
ZXlfdXAoZXZhcywgInNwYWNlIiwgInNwYWNlIiwgIiAiLCAwLCAxLCAwKTsKIH0KQEAgLTk5LDE0
ICsxMDQsMTQgQEAgdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnNpbXVsYXRlU3BhY2ViYXJLZXlQcmVz
cygpCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6c2ltdWxhdGVNb3VzZU1vdmUodW5zaWduZWQgeCwg
dW5zaWduZWQgeSkKIHsKICAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cp
OwotICAgIGV2YXNfb2JqZWN0X3Nob3cobV92aWV3KTsKKyAgICBldmFzX29iamVjdF9zaG93KFdL
Vmlld0dldEV2YXNPYmplY3QobV92aWV3KSk7CiAgICAgZXZhc19ldmVudF9mZWVkX21vdXNlX21v
dmUoZXZhcywgeCwgeSwgMCwgMCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpzaW11bGF0
ZVJpZ2h0Q2xpY2sodW5zaWduZWQgeCwgdW5zaWduZWQgeSkKIHsKICAgICBFdmFzKiBldmFzID0g
ZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwotICAgIGV2YXNfb2JqZWN0X3Nob3cobV92aWV3KTsK
KyAgICBldmFzX29iamVjdF9zaG93KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSk7CiAgICAg
ZXZhc19ldmVudF9mZWVkX21vdXNlX21vdmUoZXZhcywgeCwgeSwgMCwgMCk7CiAgICAgZXZhc19l
dmVudF9mZWVkX21vdXNlX2Rvd24oZXZhcywgMywgRVZBU19CVVRUT05fTk9ORSwgMCwgMCk7CiAg
ICAgZXZhc19ldmVudF9mZWVkX21vdXNlX3VwKGV2YXMsIDMsIEVWQVNfQlVUVE9OX05PTkUsIDAs
IDApOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcu
aCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgKaW5kZXggOGY5ZGNk
YjdlZTNhYWYzODI3NmI2NjAzMDA4YmQxZGJjODc4OTNjNi4uNTFjNGJjYzIzNTY1NWM3Y2JjMTVm
YmQ5YWJjOGRhYWM3ZDFmZjkzNCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Q
bGF0Zm9ybVdlYlZpZXcuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2Vi
Vmlldy5oCkBAIC01NCwxMyArNTQsOCBAQCB0eXBlZGVmIHN0cnVjdCBfR3RrV2lkZ2V0IEd0a1dp
ZGdldDsKIHR5cGVkZWYgV0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlwZWRlZiBHdGtXaWRn
ZXQqIFBsYXRmb3JtV2luZG93OwogI2VsaWYgUExBVEZPUk0oRUZMKQotI2lmIFVTRShFTykKLXR5
cGVkZWYgc3RydWN0IF9FbyBFdmFzX09iamVjdDsKLSNlbHNlCi10eXBlZGVmIHN0cnVjdCBfRXZh
c19PYmplY3QgRXZhc19PYmplY3Q7Ci0jZW5kaWYKIHR5cGVkZWYgc3RydWN0IF9FY29yZV9FdmFz
IEVjb3JlX0V2YXM7Ci10eXBlZGVmIEV2YXNfT2JqZWN0KiBQbGF0Zm9ybVdLVmlldzsKK3R5cGVk
ZWYgV0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlwZWRlZiBFY29yZV9FdmFzKiBQbGF0Zm9y
bVdpbmRvdzsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2Vm
bC9FdmVudFNlbmRlclByb3h5RWZsLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL0V2
ZW50U2VuZGVyUHJveHlFZmwuY3BwCmluZGV4IGYyODI5YTk2YzkyOGEyZjkzOTdlNTZjOWI3OTY1
ZWYwNTEwNzJlOTkuLjEzOTIwZWMwNmI5MDViMjhiNTAxMDY2MzE5NmNiMjViNTBlMzgxYTUgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwu
Y3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwu
Y3BwCkBAIC00MzgsNyArNDM4LDcgQEAgdm9pZCBFdmVudFNlbmRlclByb3h5OjpzZW5kVG91Y2hF
dmVudChFd2tfVG91Y2hfRXZlbnRfVHlwZSBldmVudFR5cGUpCiB7CiAgICAgQVNTRVJUKG1fdG91
Y2hQb2ludHMpOwogCi0gICAgRXZhc19PYmplY3QqIGV3a1ZpZXcgPSBtX3Rlc3RDb250cm9sbGVy
LT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKTsKKyAgICBFdmFzX09iamVjdCogZXdrVmll
dyA9IFdLVmlld0dldEV2YXNPYmplY3QobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+
cGxhdGZvcm1WaWV3KCkpOwogICAgIGV3a192aWV3X2ZlZWRfdG91Y2hfZXZlbnQoZXdrVmlldywg
ZXZlbnRUeXBlLCBtX3RvdWNoUG9pbnRzLCBldmFzX2tleV9tb2RpZmllcl9nZXQoZXZhc19vYmpl
Y3RfZXZhc19nZXQoZXdrVmlldykpKTsKIAogICAgIEVpbmFfTGlzdCogbGlzdDsKQEAgLTQ5MCwx
MiArNDkwLDE0IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6dXBkYXRlVG91Y2hQb2ludChpbnQg
aW5kZXgsIGludCB4LCBpbnQgeSkKIAogdm9pZCBFdmVudFNlbmRlclByb3h5OjpzZXRUb3VjaE1v
ZGlmaWVyKFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXIsIGJvb2wgZW5hYmxlKQogeworICAgIEV2
YXNfT2JqZWN0KiBld2tWaWV3ID0gV0tWaWV3R2V0RXZhc09iamVjdChtX3Rlc3RDb250cm9sbGVy
LT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKSk7CisKICAgICBmb3IgKHVuc2lnbmVkIGlu
ZGV4ID0gMDsgaW5kZXggPCAoc2l6ZW9mKG1vZGlmaWVyTmFtZXMpIC8gc2l6ZW9mKGNoYXIqKSk7
ICsraW5kZXgpIHsKICAgICAgICAgaWYgKG1vZGlmaWVyICYgKDEgPDwgaW5kZXgpKSB7CiAgICAg
ICAgICAgICBpZiAoZW5hYmxlKQotICAgICAgICAgICAgICAgIGV2YXNfa2V5X21vZGlmaWVyX29u
KGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBs
YXRmb3JtVmlldygpKSwgbW9kaWZpZXJOYW1lc1tpbmRleF0pOworICAgICAgICAgICAgICAgIGV2
YXNfa2V5X21vZGlmaWVyX29uKGV2YXNfb2JqZWN0X2V2YXNfZ2V0KGV3a1ZpZXcpLCBtb2RpZmll
ck5hbWVzW2luZGV4XSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZXZhc19r
ZXlfbW9kaWZpZXJfb2ZmKGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1h
aW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpKSwgbW9kaWZpZXJOYW1lc1tpbmRleF0pOworICAg
ICAgICAgICAgICAgIGV2YXNfa2V5X21vZGlmaWVyX29mZihldmFzX29iamVjdF9ldmFzX2dldChl
d2tWaWV3KSwgbW9kaWZpZXJOYW1lc1tpbmRleF0pOwogICAgICAgICB9CiAgICAgfQogfQpkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNw
cCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5jcHAKaW5k
ZXggMWNjYzBiZGFiZTlhYWI4N2NlYWViYjg3OGE2YjQ0M2EwZWY2MWMxNS4uMmI3ZDg5MmYxZDFj
OGI5NDc2NTY2M2MwYjg4YTc4ZTA4MzM5MDI0ZSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL2VmbC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3BwCkBAIC02MSw1NiArNjEsNTggQEAgUGxh
dGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLUGFn
ZUdyb3VwUmVmIHBhZ2VHcm91cCwKICAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93
aW5kb3cpOwogCiAgICAgaWYgKG1fdXNpbmdGaXhlZExheW91dCkgewotICAgICAgICBtX3ZpZXcg
PSB0b0ltcGwoV0tWaWV3Q3JlYXRlV2l0aEZpeGVkTGF5b3V0KGV2YXMsIGNvbnRleHQsIHBhZ2VH
cm91cCkpOwotICAgICAgICBldmFzX29iamVjdF9yZXNpemUobV92aWV3LCA4MDAsIDYwMCk7Cisg
ICAgICAgIG1fdmlldyA9IFdLVmlld0NyZWF0ZVdpdGhGaXhlZExheW91dChldmFzLCBjb250ZXh0
LCBwYWdlR3JvdXApOworICAgICAgICBldmFzX29iamVjdF9yZXNpemUoV0tWaWV3R2V0RXZhc09i
amVjdChtX3ZpZXcpLCA4MDAsIDYwMCk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1fdmlldyA9IHRv
SW1wbChXS1ZpZXdDcmVhdGUoZXZhcywgY29udGV4dCwgcGFnZUdyb3VwKSk7CisgICAgICAgIG1f
dmlldyA9IFdLVmlld0NyZWF0ZShldmFzLCBjb250ZXh0LCBwYWdlR3JvdXApOwogCi0gICAgZXdr
X3ZpZXdfdGhlbWVfc2V0KG1fdmlldywgVEhFTUVfRElSIi9kZWZhdWx0LmVkaiIpOworICAgIGV3
a192aWV3X3RoZW1lX3NldChXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIFRIRU1FX0RJUiIv
ZGVmYXVsdC5lZGoiKTsKICAgICBtX3dpbmRvd0lzS2V5ID0gZmFsc2U7Ci0gICAgZXZhc19vYmpl
Y3Rfc2hvdyhtX3ZpZXcpOworICAgIGV2YXNfb2JqZWN0X3Nob3coV0tWaWV3R2V0RXZhc09iamVj
dChtX3ZpZXcpKTsKIH0KIAogUGxhdGZvcm1XZWJWaWV3Ojp+UGxhdGZvcm1XZWJWaWV3KCkKIHsK
LSAgICBldmFzX29iamVjdF9kZWwobV92aWV3KTsKKyAgICAvLyBGSVhNRTogVGhlIEMgV0tWaWV3
IEFQSSBjdXJyZW50bHkgY3JlYXRlcyB0aGUgRXZhc19PYmplY3QsIHNvIHdlIGhhdmUgdG8gZGVz
dHJ1Y3QgaXQKKyAgICAvLyAoYW5kIGl0cyBkZXBlbmRlbmNpZXMgRXdrVmlldyBhbmQgV2ViS2l0
OjpXZWJWaWV3KSB0aGlzIHdheSwgdW50aWwgdGhpcyBnZXQgZml4ZWQuCisgICAgZXZhc19vYmpl
Y3RfZGVsKFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSk7CisKKyAgICBXS1JlbGVhc2UobV92
aWV3KTsKKwogICAgIGVjb3JlX2V2YXNfZnJlZShtX3dpbmRvdyk7CiB9CiAKIHZvaWQgUGxhdGZv
cm1XZWJWaWV3OjpyZXNpemVUbyh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQogewot
ICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShtX3ZpZXcsIHdpZHRoLCBoZWlnaHQpOworICAgIGV2YXNf
b2JqZWN0X3Jlc2l6ZShXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIHdpZHRoLCBoZWlnaHQp
OwogfQogCiBXS1BhZ2VSZWYgUGxhdGZvcm1XZWJWaWV3OjpwYWdlKCkKIHsKLSAgICByZXR1cm4g
V0tWaWV3R2V0UGFnZSh0b0FQSShtX3ZpZXcpKTsKKyAgICByZXR1cm4gV0tWaWV3R2V0UGFnZSht
X3ZpZXcpOwogfQogCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6Zm9jdXMoKQogeworICAgIEV2YXNf
T2JqZWN0KiBldmFzT2JqZWN0ID0gV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpOwogICAgIC8v
IEluIGEgZmV3IGNhc2VzLCBhbiBpZnJhbWUgbWlnaHQgcmVjZWl2ZSBmb2N1cyBmcm9tIEphdmFT
Y3JpcHQgYW5kIEV2YXMgaXMgbm90IGF3YXJlIG9mIGl0IGF0IGFsbAogICAgIC8vIChXZWJDb3Jl
U3VwcG9ydDo6Zm9jdXNlZEZyYW1lQ2hhbmdlZCgpIGRvZXMgbm90IGVtaXQgYW55IG5vdGlmaWNh
dGlvbikuIFdlIHRoZW4gbWFudWFsbHkgcmVtb3ZlIHRoZQogICAgIC8vIGZvY3VzIGZyb20gdGhl
IHZpZXcgdG8gbWFrZSB0aGUgY2FsbCBnaXZlIGZvY3VzIHRvIGV2YXNfb2JqZWN0X2ZvY3VzX3Nl
dCguLi4sIHRydWUpIHRvIGJlIGVmZmVjdGZ1bC4KLSAgICBpZiAoV0tQYWdlR2V0Rm9jdXNlZEZy
YW1lKHBhZ2UoKSkgIT0gV0tQYWdlR2V0TWFpbkZyYW1lKHBhZ2UoKSkpCi0gICAgICAgIGV2YXNf
b2JqZWN0X2ZvY3VzX3NldChtX3ZpZXcsIGZhbHNlKTsKLSAgICBldmFzX29iamVjdF9mb2N1c19z
ZXQobV92aWV3LCB0cnVlKTsKKyAgICBldmFzX29iamVjdF9mb2N1c19zZXQoV0tWaWV3R2V0RXZh
c09iamVjdChtX3ZpZXcpLCBXS1BhZ2VHZXRGb2N1c2VkRnJhbWUocGFnZSgpKSA9PSBXS1BhZ2VH
ZXRNYWluRnJhbWUocGFnZSgpKSk7CiB9CiAKIFdLUmVjdCBQbGF0Zm9ybVdlYlZpZXc6OndpbmRv
d0ZyYW1lKCkKIHsKICAgICBpbnQgeCwgeSwgd2lkdGgsIGhlaWdodDsKIAotICAgIEVjb3JlX0V2
YXMqIGVlID0gZWNvcmVfZXZhc19lY29yZV9ldmFzX2dldChldmFzX29iamVjdF9ldmFzX2dldCht
X3ZpZXcpKTsKLSAgICBlY29yZV9ldmFzX3JlcXVlc3RfZ2VvbWV0cnlfZ2V0KGVlLCAmeCwgJnks
ICZ3aWR0aCwgJmhlaWdodCk7CisgICAgZWNvcmVfZXZhc19yZXF1ZXN0X2dlb21ldHJ5X2dldCht
X3dpbmRvdywgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQpOwogCiAgICAgcmV0dXJuIFdLUmVjdE1h
a2UoeCwgeSwgd2lkdGgsIGhlaWdodCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpzZXRX
aW5kb3dGcmFtZShXS1JlY3QgZnJhbWUpCiB7Ci0gICAgRWNvcmVfRXZhcyogZWUgPSBlY29yZV9l
dmFzX2Vjb3JlX2V2YXNfZ2V0KGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fdmlldykpOwotICAgIGVj
b3JlX2V2YXNfbW92ZV9yZXNpemUoZWUsIGZyYW1lLm9yaWdpbi54LCBmcmFtZS5vcmlnaW4ueSwg
ZnJhbWUuc2l6ZS53aWR0aCwgZnJhbWUuc2l6ZS5oZWlnaHQpOworICAgIGVjb3JlX2V2YXNfbW92
ZV9yZXNpemUobV93aW5kb3csIGZyYW1lLm9yaWdpbi54LCBmcmFtZS5vcmlnaW4ueSwgZnJhbWUu
c2l6ZS53aWR0aCwgZnJhbWUuc2l6ZS5oZWlnaHQpOwogfQogCiB2b2lkIFBsYXRmb3JtV2ViVmll
dzo6YWRkQ2hyb21lSW5wdXRGaWVsZCgpCkBAIC0xMjcsMTUgKzEyOSwxMiBAQCB2b2lkIFBsYXRm
b3JtV2ViVmlldzo6bWFrZVdlYlZpZXdGaXJzdFJlc3BvbmRlcigpCiAKIFdLUmV0YWluUHRyPFdL
SW1hZ2VSZWY+IFBsYXRmb3JtV2ViVmlldzo6d2luZG93U25hcHNob3RJbWFnZSgpCiB7Ci0gICAg
RWNvcmVfRXZhcyogZWUgPSBlY29yZV9ldmFzX2Vjb3JlX2V2YXNfZ2V0KGV2YXNfb2JqZWN0X2V2
YXNfZ2V0KG1fdmlldykpOwotICAgIEFTU0VSVChlZSk7Ci0KICAgICBpbnQgd2lkdGg7CiAgICAg
aW50IGhlaWdodDsKLSAgICBlY29yZV9ldmFzX2dlb21ldHJ5X2dldChlZSwgMCwgMCwgJndpZHRo
LCAmaGVpZ2h0KTsKKyAgICBlY29yZV9ldmFzX2dlb21ldHJ5X2dldChtX3dpbmRvdywgMCwgMCwg
JndpZHRoLCAmaGVpZ2h0KTsKICAgICBBU1NFUlQod2lkdGggPiAwICYmIGhlaWdodCA+IDApOwog
Ci0gICAgcmV0dXJuIGFkb3B0V0soV0tWaWV3Q3JlYXRlU25hcHNob3QodG9BUEkobV92aWV3KSkp
OworICAgIHJldHVybiBhZG9wdFdLKFdLVmlld0NyZWF0ZVNuYXBzaG90KG1fdmlldykpOwogfQog
CiBib29sIFBsYXRmb3JtV2ViVmlldzo6dmlld1N1cHBvcnRzT3B0aW9ucyhXS0RpY3Rpb25hcnlS
ZWYgb3B0aW9ucykgY29uc3QK
</data>
<flag name="commit-queue"
          id="204076"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185195</attachid>
            <date>2013-01-29 01:24:31 -0800</date>
            <delta_ts>2013-01-29 06:05:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107931-20130128181303.patch</filename>
            <type>text/plain</type>
            <size>41400</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwOTYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOWI3ZDY2ZTQ5MmM5ZmU4
YzJjOTU1Y2MzNGJlY2NjOTYyNjVhNDk2NC4uYmM1ZmEwNTkzY2YwYzNkMGFkZjcwZjljNmVjZDU0
N2IwZjNlNjk2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDExOCBAQAogMjAxMy0wMS0yOCAgS2Vu
bmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4gIDxrZW5uZXRoQHdlYmtpdC5vcmc+CiAKKyAgICAgICAg
W0VGTF1bV0syXSBJbnRyb2R1Y2UgYSBXZWJWaWV3IGNsYXNzIGFzIGNvdW50ZXJwYXJ0IGZvciBX
S1ZpZXdSZWYKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwNzkzMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoaXMgaXMganVzdCBvbmUgc3RlcCBvZiB0aGUgbmV3IHBsYW4gZm9yIHRoZSBFRkwgQVBJLgor
CisgICAgICAgIFRoZSBwbGFuIGlzIHRvIG1vdmUgdGhlIHB1YmxpYyBFRkwtbGlrZSBBUEkgb24g
dG9wIG9mIHRoZSBzaGFyZWQKKyAgICAgICAgV0syIEMgQVBJLCBwbHVzIGEgZmV3IEVGTCBleHRl
bnNpb25zIChXS1ZpZXcgY2xhc3MgbW9zdGx5KS4KKworICAgICAgICBUaGUgRUZMLWxpa2UgQVBJ
IGNhbiBiZSBzZWVuIGFzIGEgY29udmVuaWVuY2UgQVBJIHdoaWNoIHRpZXMKKyAgICAgICAgd2Vs
bCBpbnRvIEVGTCBhbmQgd2hpY2ggbWFrZXMgaXQgZWFzeSB0byBhZGQgd2ViIGV4cGVyaWVuY2Vz
CisgICAgICAgIHRvIGV4aXN0aW5nIGFuZCBuZXcgRUZMIGFwcGxpY2F0aW9ucy4gSXQgcHJvdmlk
ZXMgYSBzbWFydCBvYmplY3QKKyAgICAgICAgbGlrZSBBUEkgYW5kIGEgRXZhc19PYmplY3QgYmFz
ZWQgdmlldy4KKworICAgICAgICBGb3IgbW9yZSBhZHZhbmNlZCB1c2UgY2FzZXMsIHN1Y2ggYXMg
YnJvd3NlciBhbmQgcnVudGltZSwgaXQgaXMKKyAgICAgICAgcG9zc2libGUgdG8gdXNlIHRoZSBX
SyogQyBBUEksIHdoaWNoIGlzIGdpdmVzIG1vcmUgZmxleGliaWxpdHkKKyAgICAgICAgd2hpbGUg
YmVpbmcgbW9yZSBsb3cgbGV2ZWwuCisKKyAgICAgICAgVGhlIGlkZWEgaXMgdGhhdCB0aGUgV0tW
aWV3IGNsYXNzIHdpbGwgbm90IGRlcGVuZCBvbiBFdmFzX09iamVjdAorICAgICAgICBhbmQgWDEx
IChmdXR1cmUgcGxhbikgdW5saWtlIHRoZSBjdXJyZW50IEVGTC1saWtlIEFQSS4gVGhpcyBzaG91
bGQKKyAgICAgICAgbWFrZSBpdCBwb3NzaWJsZSB0byB1c2UgaXQgZm9yIGNhc2VzIHdoZXJlIG5v
bmUgb2YgdGhlc2UgYXJlCisgICAgICAgIGF2YWlsYWJsZS4KKworICAgICAgICBUaGlzIHBhdGNo
IGludHJvZHVjZXMgdGhlIFdlYlZpZXcgY2xhc3Mgd2hpY2ggc2VydmVzIGFzIG91cgorICAgICAg
ICBjb3VudGVycGFydCBmb3IgdGhlIFdLVmlldyBjbGFzcywgYW5kIGFkZHMgYSBmZXcgbmVlZGVk
IG1ldGhvZHMuCisKKyAgICAgICAgVGhlIEV3a1ZpZXcgb3ducyB0aGUgV2ViVmlldyBjbGFzcyAo
YW5kIHdpbGwgYmUgY29uc3RydWN0aW5nIGl0CisgICAgICAgIGluIHRoZSBuZWFyIGZ1dHVyZSB3
aGVuIHRoZSBFd2tWaWV3IGNsYXNzIGhhcyBiZWVuIGNoYW5nZWQgdG8KKyAgICAgICAgaGFuZGxl
IGFsbCBzbWFydCBvYmplY3QgcmVsYXRlZCBjb2RlKQorCisgICAgICAgIFRoZSBjbGVhbiB1cCBv
ZiB0aGUgc21hcnQgb2JqZWN0IHJlbGF0ZWQgY29kZSBhcyB0aGUgcHJvcGVyCisgICAgICAgIGNv
bnN0cnVjdGlvbiBvZiBFd2tWaWV3IGFuZCBXZWJWaWV3IHdpbGwgYmUgZG9uZSBpbiBmb2xsb3ct
dXAKKyAgICAgICAgcGF0Y2hlcy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9lZmwvV0tB
UElDYXN0RWZsLmg6CisgICAgICAgIChXZWJLaXQpOgorCisgICAgICAgICAgICBUaGUgV0tWaWV3
IEFQSSBpcyBub3QgYmFzZWQgb24gV2ViVmlldyBhbmQgbm90IEV2YXNfT2JqZWN0KgorCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwOgorICAgICAgICAoV0tWaWV3Q3Jl
YXRlKToKKyAgICAgICAgKFdLVmlld0NyZWF0ZVdpdGhGaXhlZExheW91dCk6CisgICAgICAgIChX
S1ZpZXdJbml0aWFsaXplKToKKyAgICAgICAgKFdLVmlld0dldFBhZ2UpOgorICAgICAgICAoV0tW
aWV3U2V0VGhlbWVQYXRoKToKKyAgICAgICAgKFdLVmlld1N1c3BlbmRBY3RpdmVET01PYmplY3Rz
QW5kQW5pbWF0aW9ucyk6CisgICAgICAgIChXS1ZpZXdSZXN1bWVBY3RpdmVET01PYmplY3RzQW5k
QW5pbWF0aW9ucyk6CisgICAgICAgIChXS1ZpZXdHZXRFdmFzT2JqZWN0KToKKyAgICAgICAgKFdL
Vmlld0NyZWF0ZVNuYXBzaG90KToKKworICAgICAgICAgICAgQWRkIGEgZmV3IG5ldyBXS1ZpZXcg
RUZMIEMgbWV0aG9kcywgYW5kIHVwZGF0ZSBleGlzdGluZworICAgICAgICAgICAgbWV0aG9kcyB0
byByZWZsZWN0IHRoYXQgdGhlIFdLVmlld1JlZiBpcyBub3cgYSBXZWJWaWV3KgorCisgICAgICAg
ICAgICBUaGUgY29uc3RydWN0aW9uIG1ldGhvZHMgd2lsbCBiZSByZXdyaXR0ZW4gd2hlbiB0aGUg
c21hcnQKKyAgICAgICAgICAgIG9iamVjdCBjb25zdHJ1Y3Rpb24gaGFzIGJlZW4gc29sdmVzLgor
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvZWZsL1dlYlZpZXcuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXc6OldlYlZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojp+
V2ViVmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmluaXRpYWxpemUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3OjpzZXRUaGVtZVBhdGgpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3OjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3OjpyZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyk6CisgICAg
ICAgICogVUlQcm9jZXNzL2VmbC9XZWJWaWV3Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToK
KyAgICAgICAgKFdlYlZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpwYWdlUmVmKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6ZXZhc09iamVjdCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXc6OnBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojp0eXBlKToKKworICAg
ICAgICAgICAgQWRkIGEgbmV3IFdlYktpdDo6V2ViVmlldyBjbGFzcyBmb3IgRUZMLgorCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHA6CisgICAgICAgIChFd2tWaWV3OjpF
d2tWaWV3KToKKyAgICAgICAgKEV3a1ZpZXc6On5Fd2tWaWV3KToKKyAgICAgICAgKEV3a1ZpZXc6
OndrUGFnZSk6CisgICAgICAgIChFd2tWaWV3OjpkZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAg
IChFd2tWaWV3Ojp0aXRsZSk6CisgICAgICAgIChFd2tWaWV3OjpzZXRUaGVtZVBhdGgpOgorICAg
ICAgICAoRXdrVmlldzo6Y3VzdG9tVGV4dEVuY29kaW5nTmFtZSk6CisgICAgICAgIChFd2tWaWV3
OjpzZXRDdXN0b21UZXh0RW5jb2RpbmdOYW1lKToKKyAgICAgICAgKEV3a1ZpZXc6OmNyZWF0ZUdM
U3VyZmFjZSk6CisgICAgICAgIChFd2tWaWV3OjppbmZvcm1VUkxDaGFuZ2UpOgorICAgICAgICAo
RXdrVmlldzo6dGFrZVNuYXBzaG90KToKKworICAgICAgICAgICAgQmFzZSBtZXRob2RzIG9uIEMg
QVBJIGluc3RlYWQgb2YgaW50ZXJuYWwgQVBJIGFzIG11Y2gKKyAgICAgICAgICAgIGFzIGN1cnJl
bnRseSBwb3NzaWJsZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaDoK
KyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJWaWV3KToKKyAgICAgICAgKEV3a1ZpZXcp
OgorICAgICAgICAoRXdrVmlldzo6d2tWaWV3KToKKyAgICAgICAgKEV3a1ZpZXc6OnBhZ2UpOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcDoKKyAgICAgICAgKGNyZWF0
ZUV3a1ZpZXcpOgorICAgICAgICAoZXdrX3ZpZXdfYmFzZV9hZGQpOgorICAgICAgICAoZXdrX3Zp
ZXdfc21hcnRfYWRkKToKKworICAgICAgICAgICAgTW9kaWZ5IHRvIHJldHVybiB0aGUgRXdrVmll
dyBjbGFzcyBmb3Igbm93LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdf
cHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVJ
bnNwZWN0b3JQYWdlKToKKworICAgICAgICAgICAgVXBkYXRlZCBkdWUgdG8gY2hhbmdlZCBBUEku
CisKKzIwMTMtMDEtMjggIEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuICA8a2VubmV0aEB3ZWJr
aXQub3JnPgorCiAgICAgICAgIFtFRkxdW1dLMl0gVXNlIEMgQVBJIGluc2lkZSBld2tfdXJsX3Jl
c3BvbnNlCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MDc4MjYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCAzNWFkZTA2ZWE4MDYyMzg2ZjRl
MzlhNGYwOThmMjQ5NzExOTA4MDI2Li4zMDcwZGEwY2E4M2Y3MTY4ZGVjNzFiNzM2MzMzN2QwNjli
MDA1MGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtMTA5LDYgKzEwOSw3IEBAIGxp
c3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9lZmwvV2ViUG9wdXBNZW51
UHJveHlFZmwuY3BwCiAgICAgVUlQcm9jZXNzL2VmbC9XZWJQcmVmZXJlbmNlc0VmbC5jcHAKICAg
ICBVSVByb2Nlc3MvZWZsL1dlYlByb2Nlc3NQcm94eUVmbC5jcHAKKyAgICBVSVByb2Nlc3MvZWZs
L1dlYlZpZXcuY3BwCiAKICAgICBVSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL2VmbC9XZWJJbnNw
ZWN0b3JTZXJ2ZXJFZmwuY3BwCiAgICAgVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9zb3VwL1dl
YlNvY2tldFNlcnZlclNvdXAuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvZWZsL1dLQVBJQ2FzdEVmbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9DL2VmbC9XS0FQSUNhc3RFZmwuaAppbmRleCBiMDEzYTBhNjBkZmYwMzI4Y2YyZjllNWIxMTYx
ODYwMjM1ZTc2ZjBhLi4xODg5ZmM0MzY3NTVmOTFhODJmM2EzMDNmYWU1YmE1M2Q3ZjYyZGU3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLQVBJQ2FzdEVm
bC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tBUElDYXN0RWZs
LmgKQEAgLTI0LDE1ICsyNCwxMSBAQAogI2Vycm9yICJQbGVhc2UgI2luY2x1ZGUgXCJXS0FQSUNh
c3QuaFwiIGluc3RlYWQgb2YgdGhpcyBmaWxlIGRpcmVjdGx5LiIKICNlbmRpZgogCi0jaWYgVVNF
KEVPKQotdHlwZWRlZiBzdHJ1Y3QgX0VvIEV2YXNfT2JqZWN0OwotI2Vsc2UKLXR5cGVkZWYgc3Ry
dWN0IF9FdmFzX09iamVjdCBFdmFzX09iamVjdDsKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAotV0tfQUREX0FQSV9NQVBQSU5HKFdLVmlld1JlZiwgRXZhc19PYmplY3QpCitjbGFzcyBX
ZWJWaWV3OworCitXS19BRERfQVBJX01BUFBJTkcoV0tWaWV3UmVmLCBXZWJWaWV3KQogCiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcAppbmRleCAz
MmI5ZDhmNjM3MzViYmZmZTI2ZWY2OTA5MTFhMDAxYzYyNmIwZjEwLi5lMzcyZjlhNTk1YWNhMDVi
ODY0MjVmZjlhZDRhOTYwZTQ3YzUxNDY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9DL2VmbC9XS1ZpZXcuY3BwCkBAIC0yOSwyNCArMjksNTAgQEAgdXNpbmcgbmFtZXNwYWNl
IFdlYktpdDsKIAogV0tWaWV3UmVmIFdLVmlld0NyZWF0ZShFdmFzKiBjYW52YXMsIFdLQ29udGV4
dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCiB7Ci0gICAgcmV0
dXJuIHRvQVBJKGV3a192aWV3X2Jhc2VfYWRkKGNhbnZhcywgY29udGV4dFJlZiwgcGFnZUdyb3Vw
UmVmLCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlvcikpOworICAgIFdLVmlld1JlZiB2aWV3UmVmID0g
ZXdrX3ZpZXdfYmFzZV9hZGQoY2FudmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYsIEV3a1Zp
ZXc6OkxlZ2FjeUJlaGF2aW9yKS0+d2tWaWV3KCk7CisgICAgLy8gUmV0YWluIGFzIHRoZSBjb250
cmFjdCB3aXRoICpDcmVhdGUgZnVuY3Rpb25zIGlzIHRoYXQgcmV0dXJuZWQgb2JqZWN0cyBtdWNo
IHRvIGJlIHJlbGVhc2VkIGFmdGVyIHVzZS4KKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0tWaWV3
UmVmPihXS1JldGFpbih2aWV3UmVmKSk7CiB9CiAKIFdLVmlld1JlZiBXS1ZpZXdDcmVhdGVXaXRo
Rml4ZWRMYXlvdXQoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdl
R3JvdXBSZWYgcGFnZUdyb3VwUmVmKQogewotICAgIHJldHVybiB0b0FQSShld2tfdmlld19iYXNl
X2FkZChjYW52YXMsIGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZiwgRXdrVmlldzo6RGVmYXVsdEJl
aGF2aW9yKSk7CisgICAgV0tWaWV3UmVmIHZpZXdSZWYgPSBld2tfdmlld19iYXNlX2FkZChjYW52
YXMsIGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZiwgRXdrVmlldzo6RGVmYXVsdEJlaGF2aW9yKS0+
d2tWaWV3KCk7CisgICAgLy8gUmV0YWluIGFzIHRoZSBjb250cmFjdCB3aXRoICpDcmVhdGUgZnVu
Y3Rpb25zIGlzIHRoYXQgcmV0dXJuZWQgb2JqZWN0cyBtdWNoIHRvIGJlIHJlbGVhc2VkIGFmdGVy
IHVzZS4KKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0tWaWV3UmVmPihXS1JldGFpbih2aWV3UmVm
KSk7Cit9CisKK3ZvaWQgV0tWaWV3SW5pdGlhbGl6ZShXS1ZpZXdSZWYgdmlld1JlZikKK3sKKyAg
ICB0b0ltcGwodmlld1JlZiktPmluaXRpYWxpemUoKTsKIH0KIAogV0tQYWdlUmVmIFdLVmlld0dl
dFBhZ2UoV0tWaWV3UmVmIHZpZXdSZWYpCiB7Ci0gICAgRXdrVmlldyogdmlldyA9IEV3a1ZpZXc6
OmZyb21FdmFzT2JqZWN0KHRvSW1wbCh2aWV3UmVmKSk7CisgICAgcmV0dXJuIHRvSW1wbCh2aWV3
UmVmKS0+cGFnZVJlZigpOworfQogCi0gICAgcmV0dXJuIHZpZXctPndrUGFnZSgpOwordm9pZCBX
S1ZpZXdTZXRUaGVtZVBhdGgoV0tWaWV3UmVmIHZpZXdSZWYsIFdLU3RyaW5nUmVmIHRoZW1lKQor
eworICAgIHRvSW1wbCh2aWV3UmVmKS0+c2V0VGhlbWVQYXRoKHRoZW1lKTsKIH0KIAotV0tJbWFn
ZVJlZiBXS1ZpZXdDcmVhdGVTbmFwc2hvdChXS1ZpZXdSZWYgdmlld1JlZikKK3ZvaWQgV0tWaWV3
U3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKFdLVmlld1JlZiB2aWV3UmVmKQog
ewotICAgIEV3a1ZpZXcqIHZpZXcgPSBFd2tWaWV3Ojpmcm9tRXZhc09iamVjdCh0b0ltcGwodmll
d1JlZikpOworICAgIHRvSW1wbCh2aWV3UmVmKS0+c3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRB
bmltYXRpb25zKCk7Cit9CiAKLSAgICByZXR1cm4gV0tJbWFnZUNyZWF0ZUZyb21DYWlyb1N1cmZh
Y2Uodmlldy0+dGFrZVNuYXBzaG90KCkuZ2V0KCksIDAgLyogb3B0aW9ucyAqLyk7Cit2b2lkIFdL
Vmlld1Jlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKFdLVmlld1JlZiB2aWV3UmVm
KQoreworICAgIHRvSW1wbCh2aWV3UmVmKS0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1h
dGlvbnMoKTsKK30KKworRXZhc19PYmplY3QqIFdLVmlld0dldEV2YXNPYmplY3QoV0tWaWV3UmVm
IHZpZXdSZWYpCit7CisgICAgcmV0dXJuIHRvSW1wbCh2aWV3UmVmKS0+ZXZhc09iamVjdCgpOwor
fQorCitXS0ltYWdlUmVmIFdLVmlld0NyZWF0ZVNuYXBzaG90KFdLVmlld1JlZiB2aWV3UmVmKQor
eworICAgIEV3a1ZpZXcqIGV3a1ZpZXcgPSBFd2tWaWV3Ojpmcm9tRXZhc09iamVjdCh0b0ltcGwo
dmlld1JlZiktPmV2YXNPYmplY3QoKSk7CisgICAgcmV0dXJuIFdLSW1hZ2VDcmVhdGVGcm9tQ2Fp
cm9TdXJmYWNlKGV3a1ZpZXctPnRha2VTbmFwc2hvdCgpLmdldCgpLCAwIC8qIG9wdGlvbnMgKi8p
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1Zp
ZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmgKaW5kZXgg
Y2M3MzA3Y2Y0Y2I0OTI2MzZlOGE4MmNhYzFhM2FmMTA1YzkxOWZkZS4uZDViNDMyZDhlYTEzMTU0
Mjg3ZmE4ZDRhODdjNDhiNDBiOGQyMmYxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0MvZWZsL1dLVmlldy5oCkBAIC0yNCw4ICsyNCwxMCBAQAogCiAjaWYgVVNFKEVPKQogdHlw
ZWRlZiBzdHJ1Y3QgX0VvIEV2YXM7Cit0eXBlZGVmIHN0cnVjdCBfRW8gRXZhc19PYmplY3Q7CiAj
ZWxzZQogdHlwZWRlZiBzdHJ1Y3QgX0V2YXMgRXZhczsKK3R5cGVkZWYgc3RydWN0IF9FdmFzX09i
amVjdCBFdmFzX09iamVjdDsKICNlbmRpZgogCiAjaWZkZWYgX19jcGx1c3BsdXMKQEAgLTM2LDkg
KzM4LDE5IEBAIFdLX0VYUE9SVCBXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlKEV2YXMqIGNhbnZhcywg
V0tDb250ZXh0UmVmIGNvbnRleHQsIFdLUGFnZUdyb3VwCiAKIFdLX0VYUE9SVCBXS1ZpZXdSZWYg
V0tWaWV3Q3JlYXRlV2l0aEZpeGVkTGF5b3V0KEV2YXMqIGNhbnZhcywgV0tDb250ZXh0UmVmIGNv
bnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCk7CiAKLVdLX0VYUE9SVCBXS1BhZ2VSZWYg
V0tWaWV3R2V0UGFnZShXS1ZpZXdSZWYgdmlldyk7CitXS19FWFBPUlQgdm9pZCBXS1ZpZXdJbml0
aWFsaXplKFdLVmlld1JlZik7CiAKLVdLX0VYUE9SVCBXS0ltYWdlUmVmIFdLVmlld0NyZWF0ZVNu
YXBzaG90KFdLVmlld1JlZiB2aWV3UmVmKTsKK1dLX0VYUE9SVCBXS1BhZ2VSZWYgV0tWaWV3R2V0
UGFnZShXS1ZpZXdSZWYpOworCitXS19FWFBPUlQgdm9pZCBXS1ZpZXdTZXRUaGVtZVBhdGgoV0tW
aWV3UmVmLCBXS1N0cmluZ1JlZik7CisKK1dLX0VYUE9SVCB2b2lkIFdLVmlld1N1c3BlbmRBY3Rp
dmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyhXS1ZpZXdSZWYpOworV0tfRVhQT1JUIHZvaWQgV0tW
aWV3UmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoV0tWaWV3UmVmKTsKKworLy8g
RklYTUU6IFRoZSBsb25nIHRlcm0gcGxhbiBpcyB0byBnZXQgcmlkIG9mIHRoaXMsIHNvIGtlZXAg
dXNhZ2UgdG8gYSBiYXJlIG1pbmltdW0uCitXS19FWFBPUlQgRXZhc19PYmplY3QqIFdLVmlld0dl
dEV2YXNPYmplY3QoV0tWaWV3UmVmKTsKKworV0tfRVhQT1JUIFdLSW1hZ2VSZWYgV0tWaWV3Q3Jl
YXRlU25hcHNob3QoV0tWaWV3UmVmKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCmluZGV4IDEzM2ExNWY4ZGRh
ZjAxY2Q0MWFiZjU4NDdiM2Y0ZWE5ODBmMzdjZTUuLmNkYTM3MDJhMjE1NGU4ZjdjMDU5OTU4MWQ1
MDg4ZWFlZjJhM2I0MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL0V3a1ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3
a1ZpZXcuY3BwCkBAIC0zOCw3ICszOCw5IEBACiAjaW5jbHVkZSAiV0tEaWN0aW9uYXJ5LmgiCiAj
aW5jbHVkZSAiV0tHZW9tZXRyeS5oIgogI2luY2x1ZGUgIldLTnVtYmVyLmgiCisjaW5jbHVkZSAi
V0tQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJXS1N0cmluZy5oIgorI2luY2x1ZGUgIldLVmlldy5o
IgogI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJJbWFnZS5oIgogI2luY2x1
ZGUgIldlYlBhZ2VHcm91cC5oIgpAQCAtMTEwLDE0ICsxMTIsMTQgQEAgY29uc3QgRXZhc19PYmpl
Y3QqIEV3a1ZpZXc6OnZpZXdGcm9tUGFnZVZpZXdNYXAoY29uc3QgV0tQYWdlUmVmIHBhZ2UpCiAg
ICAgcmV0dXJuIHBhZ2VWaWV3TWFwKCkuZ2V0KHBhZ2UpOwogfQogCi1Fd2tWaWV3OjpFd2tWaWV3
KEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQs
IFBhc3NSZWZQdHI8V2ViUGFnZUdyb3VwPiBwYWdlR3JvdXAsIFZpZXdCZWhhdmlvciBiZWhhdmlv
cikKLSAgICA6IG1fZXZhc09iamVjdChldmFzT2JqZWN0KQorRXdrVmlldzo6RXdrVmlldyhFdmFz
X09iamVjdCogdmlldywgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXZWJQYWdlR3Jv
dXAqIHBhZ2VHcm91cCwgVmlld0JlaGF2aW9yIGJlaGF2aW9yKQorICAgIDogbV9ldmFzT2JqZWN0
KHZpZXcpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCiAgICAgLCBtX3BlbmRpbmdTdXJmYWNlUmVzaXplKGZhbHNlKQogI2VuZGlmCiAg
ICAgLCBtX3BhZ2VDbGllbnQoYmVoYXZpb3IgPT0gRGVmYXVsdEJlaGF2aW9yID8gUGFnZUNsaWVu
dERlZmF1bHRJbXBsOjpjcmVhdGUodGhpcykgOiBQYWdlQ2xpZW50TGVnYWN5SW1wbDo6Y3JlYXRl
KHRoaXMpKQotICAgICwgbV9wYWdlUHJveHkobV9jb250ZXh0LT53ZWJDb250ZXh0KCktPmNyZWF0
ZVdlYlBhZ2UobV9wYWdlQ2xpZW50LmdldCgpLCBwYWdlR3JvdXAuZ2V0KCkpKQorICAgICwgbV93
ZWJWaWV3KGFkb3B0UmVmKG5ldyBXZWJWaWV3KG1fY29udGV4dC0+d2ViQ29udGV4dCgpLmdldCgp
LCBtX3BhZ2VDbGllbnQuZ2V0KCksIHBhZ2VHcm91cCwgdmlldykpKQogICAgICwgbV9wYWdlTG9h
ZENsaWVudChQYWdlTG9hZENsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQogICAgICwgbV9wYWdlUG9s
aWN5Q2xpZW50KFBhZ2VQb2xpY3lDbGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKICAgICAsIG1fcGFn
ZVVJQ2xpZW50KFBhZ2VVSUNsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQpAQCAtMTI3LDcgKzEyOSw3
IEBAIEV3a1ZpZXc6OkV3a1ZpZXcoRXZhc19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8
RXdrQ29udGV4dD4gY29udGV4dCwgUGFzc1JlCiAjaWYgRU5BQkxFKFZJQlJBVElPTikKICAgICAs
IG1fdmlicmF0aW9uQ2xpZW50KFZpYnJhdGlvbkNsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQogI2Vu
ZGlmCi0gICAgLCBtX2JhY2tGb3J3YXJkTGlzdChFd2tCYWNrRm9yd2FyZExpc3Q6OmNyZWF0ZSh0
b0FQSShtX3BhZ2VQcm94eS0+YmFja0ZvcndhcmRMaXN0KCkpKSkKKyAgICAsIG1fYmFja0Zvcndh
cmRMaXN0KEV3a0JhY2tGb3J3YXJkTGlzdDo6Y3JlYXRlKFdLUGFnZUdldEJhY2tGb3J3YXJkTGlz
dCh3a1BhZ2UoKSkpKQogI2lmIFVTRShUSUxFRF9CQUNLSU5HX1NUT1JFKQogICAgICwgbV9wYWdl
U2NhbGVGYWN0b3IoMSkKICNlbmRpZgpAQCAtMTQ0LDI5ICsxNDYsMTggQEAgRXdrVmlldzo6RXdr
VmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250
ZXh0LCBQYXNzUmUKIHsKICAgICBBU1NFUlQobV9ldmFzT2JqZWN0KTsKICAgICBBU1NFUlQobV9j
b250ZXh0KTsKLSAgICBBU1NFUlQobV9wYWdlUHJveHkpOwogCi0jaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQotICAgIG1fcGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+
c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQodHJ1ZSk7Ci0gICAgbV9wYWdlUHJveHkt
PnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRGb3JjZUNvbXBvc2l0aW5nTW9kZSh0cnVl
KTsKLSNpZiBFTkFCTEUoV0VCR0wpCi0gICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVm
ZXJlbmNlcygpLT5zZXRXZWJHTEVuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKLSAgICBpZiAoYmVoYXZp
b3IgPT0gRGVmYXVsdEJlaGF2aW9yKQotICAgICAgICBtX3BhZ2VQcm94eS0+c2V0VXNlRml4ZWRM
YXlvdXQodHJ1ZSk7Ci0jZW5kaWYKKyAgICBXS1ZpZXdJbml0aWFsaXplKHdrVmlldygpKTsKIAot
ICAgIG1fcGFnZVByb3h5LT5pbml0aWFsaXplV2ViUGFnZSgpOworICAgIFdLUGFnZVNldFVzZUZp
eGVkTGF5b3V0KHdrUGFnZSgpLCBiZWhhdmlvciA9PSBEZWZhdWx0QmVoYXZpb3IpOwogCi0jaWYg
RU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIG1fcGFnZVByb3h5LT5mdWxsU2NyZWVuTWFuYWdl
cigpLT5zZXRXZWJWaWV3KG1fZXZhc09iamVjdCk7Ci0gICAgbV9wYWdlUHJveHktPnBhZ2VHcm91
cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRGdWxsU2NyZWVuRW5hYmxlZCh0cnVlKTsKLSNlbmRpZgot
I2lmIEVOQUJMRShXRUJfQVVESU8pCi0gICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVm
ZXJlbmNlcygpLT5zZXRXZWJBdWRpb0VuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKKyAgICBXS1BhZ2VH
cm91cFJlZiB3a1BhZ2VHcm91cCA9IFdLUGFnZUdldFBhZ2VHcm91cCh3a1BhZ2UoKSk7CisgICAg
V0tQcmVmZXJlbmNlc1JlZiB3a1ByZWZlcmVuY2VzID0gV0tQYWdlR3JvdXBHZXRQcmVmZXJlbmNl
cyh3a1BhZ2VHcm91cCk7CiAKLSAgICBtX3BhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVu
Y2VzKCktPnNldE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCh0cnVlKTsKKyAgICBX
S1ByZWZlcmVuY2VzU2V0V2ViR0xFbmFibGVkKHdrUHJlZmVyZW5jZXMsIHRydWUpOworICAgIFdL
UHJlZmVyZW5jZXNTZXRGdWxsU2NyZWVuRW5hYmxlZCh3a1ByZWZlcmVuY2VzLCB0cnVlKTsKKyAg
ICBXS1ByZWZlcmVuY2VzU2V0V2ViQXVkaW9FbmFibGVkKHdrUHJlZmVyZW5jZXMsIHRydWUpOwor
ICAgIFdLUHJlZmVyZW5jZXNTZXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQod2tQ
cmVmZXJlbmNlcywgdHJ1ZSk7CiAKICAgICAvLyBFbmFibGUgbW91c2UgZXZlbnRzIGJ5IGRlZmF1
bHQKICAgICBzZXRNb3VzZUV2ZW50c0VuYWJsZWQodHJ1ZSk7CkBAIC0xODIsOCArMTczLDYgQEAg
RXdrVmlldzo6RXdrVmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tD
b250ZXh0PiBjb250ZXh0LCBQYXNzUmUKIAogRXdrVmlldzo6fkV3a1ZpZXcoKQogewotICAgIG1f
cGFnZVByb3h5LT5jbG9zZSgpOwotCiAgICAgLy8gVW5yZWdpc3RlciBpY29uIGNoYW5nZSBjYWxs
YmFjay4KICAgICBFd2tGYXZpY29uRGF0YWJhc2UqIGljb25EYXRhYmFzZSA9IG1fY29udGV4dC0+
ZmF2aWNvbkRhdGFiYXNlKCk7CiAgICAgQVNTRVJUKGljb25EYXRhYmFzZSk7CkBAIC0yMTEsOSAr
MjAwLDkgQEAgRXdrVmlldyogRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QoY29uc3QgRXZhc19PYmpl
Y3QqIHZpZXcpCiAgKiBAaW50ZXJuYWwKICAqIFJldHJpZXZlcyB0aGUgaW50ZXJuYWwgV0tQYWdl
IGZvciB0aGlzIHZpZXcuCiAgKi8KLVdLUGFnZVJlZiBFd2tWaWV3Ojp3a1BhZ2UoKQorV0tQYWdl
UmVmIEV3a1ZpZXc6OndrUGFnZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRvQVBJKG1fcGFnZVBy
b3h5LmdldCgpKTsKKyAgICByZXR1cm4gV0tWaWV3R2V0UGFnZSh3a1ZpZXcoKSk7CiB9CiAKIHZv
aWQgRXdrVmlldzo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYgY3Vyc29yKQpAQCAtMjk3LDcgKzI4
Niw3IEBAIHZvaWQgRXdrVmlldzo6c2V0RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGUpCiAK
IGZsb2F0IEV3a1ZpZXc6OmRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bV9wYWdlUHJveHktPmRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgcmV0dXJuIFdLUGFnZUdldEJh
Y2tpbmdTY2FsZUZhY3Rvcih3a1BhZ2UoKSk7CiB9CiAKIEFmZmluZVRyYW5zZm9ybSBFd2tWaWV3
Ojp0cmFuc2Zvcm1Gcm9tU2NlbmUoKSBjb25zdApAQCAtNTIzLDcgKzUxMiw3IEBAIGJvb2wgRXdr
Vmlldzo6aXNWaXNpYmxlKCkgY29uc3QKIAogY29uc3QgY2hhciogRXdrVmlldzo6dGl0bGUoKSBj
b25zdAogewotICAgIG1fdGl0bGUgPSBtX3BhZ2VQcm94eS0+cGFnZVRpdGxlKCkudXRmOCgpLmRh
dGEoKTsKKyAgICBtX3RpdGxlID0gV0tFaW5hU2hhcmVkU3RyaW5nKEFkb3B0V0ssIFdLUGFnZUNv
cHlUaXRsZSh3a1BhZ2UoKSkpOwogCiAgICAgcmV0dXJuIG1fdGl0bGU7CiB9CkBAIC01NDYsMjQg
KzUzNSwyNiBAQCB2b2lkIEV3a1ZpZXc6OnNldFRoZW1lUGF0aChjb25zdCBjaGFyKiB0aGVtZSkK
IHsKICAgICBpZiAobV90aGVtZSAhPSB0aGVtZSkgewogICAgICAgICBtX3RoZW1lID0gdGhlbWU7
Ci0gICAgICAgIG1fcGFnZVByb3h5LT5zZXRUaGVtZVBhdGgodGhlbWUpOworICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gd2tUaGVtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcodGhlbWUpKTsKKyAgICAgICAgV0tWaWV3U2V0VGhlbWVQYXRoKHdrVmlldygp
LCB3a1RoZW1lLmdldCgpKTsKICAgICB9CiB9CiAKIGNvbnN0IGNoYXIqIEV3a1ZpZXc6OmN1c3Rv
bVRleHRFbmNvZGluZ05hbWUoKSBjb25zdAogewotICAgIFN0cmluZyBjdXN0b21FbmNvZGluZyA9
IG1fcGFnZVByb3h5LT5jdXN0b21UZXh0RW5jb2RpbmdOYW1lKCk7Ci0gICAgaWYgKGN1c3RvbUVu
Y29kaW5nLmlzRW1wdHkoKSkKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gY3VzdG9tRW5j
b2RpbmcgPSBhZG9wdFdLKFdLUGFnZUNvcHlDdXN0b21UZXh0RW5jb2RpbmdOYW1lKHdrUGFnZSgp
KSk7CisgICAgaWYgKFdLU3RyaW5nSXNFbXB0eShjdXN0b21FbmNvZGluZy5nZXQoKSkpCiAgICAg
ICAgIHJldHVybiAwOwogCi0gICAgbV9jdXN0b21FbmNvZGluZyA9IGN1c3RvbUVuY29kaW5nLnV0
ZjgoKS5kYXRhKCk7CisgICAgbV9jdXN0b21FbmNvZGluZyA9IFdLRWluYVNoYXJlZFN0cmluZyhj
dXN0b21FbmNvZGluZy5nZXQoKSk7CiAKICAgICByZXR1cm4gbV9jdXN0b21FbmNvZGluZzsKIH0K
IAogdm9pZCBFd2tWaWV3OjpzZXRDdXN0b21UZXh0RW5jb2RpbmdOYW1lKGNvbnN0IFN0cmluZyYg
ZW5jb2RpbmcpCiB7Ci0gICAgbV9wYWdlUHJveHktPnNldEN1c3RvbVRleHRFbmNvZGluZ05hbWUo
ZW5jb2RpbmcpOworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a0VuY29kaW5nID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhlbmNvZGluZy51dGY4KCkuZGF0YSgp
KSk7CisgICAgV0tQYWdlU2V0Q3VzdG9tVGV4dEVuY29kaW5nTmFtZSh3a1BhZ2UoKSwgd2tFbmNv
ZGluZy5nZXQoKSk7CiB9CiAKIHZvaWQgRXdrVmlldzo6c2V0TW91c2VFdmVudHNFbmFibGVkKGJv
b2wgZW5hYmxlZCkKQEAgLTY0NSw5ICs2MzYsNiBAQCBib29sIEV3a1ZpZXc6OmNyZWF0ZUdMU3Vy
ZmFjZShjb25zdCBJbnRTaXplJiB2aWV3U2l6ZSkKICAgICAgICAgaWYgKCFtX2V2YXNHTCkgewog
ICAgICAgICAgICAgV0FSTigiRmFpbGVkIHRvIGNyZWF0ZSBFdmFzX0dMLCBmYWxsaW5nIGJhY2sg
dG8gc29mdHdhcmUgbW9kZS4iKTsKICAgICAgICAgICAgIG1faXNIYXJkd2FyZUFjY2VsZXJhdGVk
ID0gZmFsc2U7Ci0jaWYgRU5BQkxFKFdFQkdMKQotICAgICAgICAgICAgbV9wYWdlUHJveHktPnBh
Z2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRXZWJHTEVuYWJsZWQoZmFsc2UpOwotI2VuZGlm
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CkBAIC04OTAsMTUg
Kzg3OCwxMyBAQCB1bnNpZ25lZCBsb25nIGxvbmcgRXdrVmlldzo6aW5mb3JtRGF0YWJhc2VRdW90
YVJlYWNoZWQoY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbQogICovCiB2b2lkIEV3a1ZpZXc6Omlu
Zm9ybVVSTENoYW5nZSgpCiB7Ci0gICAgU3RyaW5nIGFjdGl2ZVVSTCA9IG1fcGFnZVByb3h5LT5h
Y3RpdmVVUkwoKTsKLSAgICBpZiAoYWN0aXZlVVJMLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
OworICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB3a0FjdGl2ZVVSTCA9IGFkb3B0V0soV0tQYWdl
Q29weUFjdGl2ZVVSTCh3a1BhZ2UoKSkpOworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3
a1VSTFN0cmluZyA9IGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHdrQWN0aXZlVVJMLmdldCgpKSk7
CiAKLSAgICBDU3RyaW5nIHJhd0FjdGl2ZVVSTCA9IGFjdGl2ZVVSTC51dGY4KCk7Ci0gICAgaWYg
KG1fdXJsID09IHJhd0FjdGl2ZVVSTC5kYXRhKCkpCisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcod2tVUkxTdHJpbmcuZ2V0KCksIG1fdXJsKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgbV91cmwgPSByYXdBY3RpdmVVUkwuZGF0YSgpOworICAgIG1fdXJsID0gV0tFaW5hU2hh
cmVkU3RyaW5nKHdrVVJMU3RyaW5nLmdldCgpKTsKICAgICBzbWFydENhbGxiYWNrPFVSTENoYW5n
ZWQ+KCkuY2FsbChtX3VybCk7CiAKICAgICAvLyBVcGRhdGUgdGhlIHZpZXcncyBmYXZpY29uLgpA
QCAtMTAzMCw3ICsxMDE2LDcgQEAgdm9pZCBFd2tWaWV3OjpvbkZhdmljb25DaGFuZ2VkKGNvbnN0
IGNoYXIqIHBhZ2VVUkwsIHZvaWQqIGV2ZW50SW5mbykKIFBhc3NSZWZQdHI8Y2Fpcm9fc3VyZmFj
ZV90PiBFd2tWaWV3Ojp0YWtlU25hcHNob3QoKQogewogICAgIC8vIFN1c3BlbmQgYWxsIGFuaW1h
dGlvbnMgYmVmb3JlIHRha2luZyB0aGUgc25hcHNob3QuCi0gICAgbV9wYWdlUHJveHktPnN1c3Bl
bmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworICAgIFdLVmlld1N1c3BlbmRBY3Rp
dmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyh3a1ZpZXcoKSk7CiAKICAgICAvLyBXYWl0IGZvciB0
aGUgcGVuZGluZyByZXBhaW50IGV2ZW50cyB0byBiZSBwcm9jZXNzZWQuCiAgICAgd2hpbGUgKG1f
ZGlzcGxheVRpbWVyLmlzQWN0aXZlKCkpCkBAIC0xMDQyLDcgKzEwMjgsNyBAQCBQYXNzUmVmUHRy
PGNhaXJvX3N1cmZhY2VfdD4gRXdrVmlldzo6dGFrZVNuYXBzaG90KCkKICNlbmRpZgogICAgICAg
ICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzbmFwc2hvdCA9IGNyZWF0ZVN1cmZhY2VGb3JJbWFn
ZShzZC0+aW1hZ2UpOwogICAgICAgICAvLyBSZXN1bWUgYWxsIGFuaW1hdGlvbnMuCi0gICAgICAg
IG1fcGFnZVByb3h5LT5yZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworICAg
ICAgICBXS1ZpZXdSZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyh3a1ZpZXcoKSk7
CiAKICAgICAgICAgcmV0dXJuIHNuYXBzaG90LnJlbGVhc2UoKTsKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCkBAIC0xMDUwLDcgKzEwMzYsNyBAQCBQYXNzUmVmUHRyPGNhaXJvX3N1
cmZhY2VfdD4gRXdrVmlldzo6dGFrZVNuYXBzaG90KCkKIAogICAgIFJlZlB0cjxjYWlyb19zdXJm
YWNlX3Q+IHNuYXBzaG90ID0gZ2V0SW1hZ2VTdXJmYWNlRnJvbUZyYW1lQnVmZmVyKDAsIDAsIHNk
LT52aWV3LncsIHNkLT52aWV3LmgpOwogICAgIC8vIFJlc3VtZSBhbGwgYW5pbWF0aW9ucy4KLSAg
ICBtX3BhZ2VQcm94eS0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKKyAg
ICBXS1ZpZXdSZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyh3a1ZpZXcoKSk7CiAK
ICAgICByZXR1cm4gc25hcHNob3QucmVsZWFzZSgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKaW5kZXggYTIxM2Y5N2Q1ZWJiNDE5NjMxNmE5ZWFj
ZTEyOGI5YTIyOWVkNTAwZC4uMTUzYzZjYWYzYTU4YjExZjFjOGUxMGYyOWFiOTllMjRhNzc5NGI1
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaApAQCAtMjcs
NiArMjcsNyBAQAogI2luY2x1ZGUgIldLRWluYVNoYXJlZFN0cmluZy5oIgogI2luY2x1ZGUgIldL
R2VvbWV0cnkuaCIKICNpbmNsdWRlICJXS1JldGFpblB0ci5oIgorI2luY2x1ZGUgIldlYlZpZXcu
aCIKICNpbmNsdWRlICJld2tfdXJsX3JlcXVlc3RfcHJpdmF0ZS5oIgogI2luY2x1ZGUgPEV2YXMu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQuaD4KQEAgLTQ5LDYgKzUwLDEwIEBACiAj
aW5jbHVkZSAiRXZhc0dMU3VyZmFjZS5oIgogI2VuZGlmCiAKKyNpbmNsdWRlICJXZWJDb250ZXh0
LmgiCisjaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMu
aCIKKwogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBDb250ZXh0TWVudUNsaWVudEVmbDsKIGNs
YXNzIEZpbmRDbGllbnRFZmw7CkBAIC05OCwxOSArMTAzLDIwIEBAIHR5cGVkZWYgc3RydWN0IEV3
a19WaWV3X1NtYXJ0X0RhdGEgRXdrX1ZpZXdfU21hcnRfRGF0YTsKIAogY2xhc3MgRXdrVmlldyB7
CiBwdWJsaWM6Ci0KICAgICBlbnVtIFZpZXdCZWhhdmlvciB7CiAgICAgICAgIExlZ2FjeUJlaGF2
aW9yLAogICAgICAgICBEZWZhdWx0QmVoYXZpb3IKICAgICB9OwotICAgIEV3a1ZpZXcoRXZhc19P
YmplY3QqIHZpZXcsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgUGFzc1JlZlB0cjxX
ZWJLaXQ6OldlYlBhZ2VHcm91cD4gcGFnZUdyb3VwLCBWaWV3QmVoYXZpb3IpOworICAgIEV3a1Zp
ZXcoRXZhc19PYmplY3QqIHZpZXcsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgV2Vi
S2l0OjpXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCwgVmlld0JlaGF2aW9yKTsKICAgICB+RXdrVmll
dygpOwogCiAgICAgc3RhdGljIEV3a1ZpZXcqIGZyb21FdmFzT2JqZWN0KGNvbnN0IEV2YXNfT2Jq
ZWN0KiB2aWV3KTsKICAgICBFdmFzX09iamVjdCogdmlldygpIHsgcmV0dXJuIG1fZXZhc09iamVj
dDsgfQogCi0gICAgV0tQYWdlUmVmIHdrUGFnZSgpOwotICAgIFdlYktpdDo6V2ViUGFnZVByb3h5
KiBwYWdlKCkgeyByZXR1cm4gbV9wYWdlUHJveHkuZ2V0KCk7IH0KKyAgICBXS1ZpZXdSZWYgd2tW
aWV3KCkgY29uc3QgeyByZXR1cm4gdG9BUEkobV93ZWJWaWV3LmdldCgpKTsgfQorICAgIFdLUGFn
ZVJlZiB3a1BhZ2UoKSBjb25zdDsKKworICAgIFdlYktpdDo6V2ViUGFnZVByb3h5KiBwYWdlKCkg
eyByZXR1cm4gbV93ZWJWaWV3LT5wYWdlKCk7IH0KICAgICBFd2tDb250ZXh0KiBld2tDb250ZXh0
KCkgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CiAgICAgRXdrU2V0dGluZ3MqIHNldHRpbmdz
KCkgeyByZXR1cm4gbV9zZXR0aW5ncy5nZXQoKTsgfQogICAgIEV3a0JhY2tGb3J3YXJkTGlzdCog
YmFja0ZvcndhcmRMaXN0KCkgeyByZXR1cm4gbV9iYWNrRm9yd2FyZExpc3QuZ2V0KCk7IH0KQEAg
LTI0NSw3ICsyNTEsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9wZW5kaW5nU3VyZmFjZVJlc2l6
ZTsKICNlbmRpZgogICAgIE93blB0cjxXZWJLaXQ6OlBhZ2VDbGllbnRCYXNlPiBtX3BhZ2VDbGll
bnQ7Ci0gICAgUmVmUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5PiBtX3BhZ2VQcm94eTsKKyAgICBS
ZWZQdHI8V2ViS2l0OjpXZWJWaWV3PiBtX3dlYlZpZXc7CiAgICAgT3duUHRyPFdlYktpdDo6UGFn
ZUxvYWRDbGllbnRFZmw+IG1fcGFnZUxvYWRDbGllbnQ7CiAgICAgT3duUHRyPFdlYktpdDo6UGFn
ZVBvbGljeUNsaWVudEVmbD4gbV9wYWdlUG9saWN5Q2xpZW50OwogICAgIE93blB0cjxXZWJLaXQ6
OlBhZ2VVSUNsaWVudEVmbD4gbV9wYWdlVUlDbGllbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKaW5kZXggNzJhNmFmYWEzZWVjMTA4NTU5YWZkYWY4
NzYzODJmYjVjMzczY2MxMS4uY2FlMDQyNThmNGNiZmQ0MDJhMTJiOGU1Yzc3NzBlODE0YTBmNjQx
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcApA
QCAtNTA1LDcgKzUwNSw3IEBAIHN0YXRpYyBpbmxpbmUgRXZhc19TbWFydCogY3JlYXRlRXdrVmll
d1NtYXJ0Q2xhc3Modm9pZCkKICAgICByZXR1cm4gc21hcnQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
RXZhc19PYmplY3QqIGNyZWF0ZUV3a1ZpZXcoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFy
dCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3Jv
dXBSZWYgPSAwLCBFd2tWaWV3OjpWaWV3QmVoYXZpb3IgYmVoYXZpb3IgPSBFd2tWaWV3OjpEZWZh
dWx0QmVoYXZpb3IpCitzdGF0aWMgaW5saW5lIEV3a1ZpZXcqIGNyZWF0ZUV3a1ZpZXcoRXZhcyog
Y2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0
LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYgPSAwLCBFd2tWaWV3OjpWaWV3QmVoYXZpb3Ig
YmVoYXZpb3IgPSBFd2tWaWV3OjpEZWZhdWx0QmVoYXZpb3IpCiB7CiAgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKGNhbnZhcywgMCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHNtYXJ0LCAwKTsKQEAgLTUyNSwyMSArNTI1LDIyIEBAIHN0YXRpYyBpbmxpbmUg
RXZhc19PYmplY3QqIGNyZWF0ZUV3a1ZpZXcoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFy
dCwgUGFzc1JlCiAgICAgLy8gRGVmYXVsdCBXZWJQYWdlR3JvdXAgaXMgY3JlYXRlZCBpbiBXZWJD
b250ZXh0IGNvbnN0cnVjdG9yIGlmIHRoZSBwYWdlR3JvdXBSZWYgaXMgMCwKICAgICAvLyBzbyB3
ZSBkbyBub3QgbmVlZCB0byBjcmVhdGUgaXQgaGVyZS4KICAgICBzbWFydERhdGEtPnByaXYgPSBu
ZXcgRXdrVmlldyhld2tWaWV3LCBjb250ZXh0LCB0b0ltcGwocGFnZUdyb3VwUmVmKSwgYmVoYXZp
b3IpOwotICAgIHJldHVybiBld2tWaWV3OworCisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+cHJpdjsK
IH0KIAogLyoqCiAgKiBAaW50ZXJuYWwKICAqIENvbnN0cnVjdHMgYSBld2tfdmlldyBFdmFzX09i
amVjdCB3aXRoIFdLVHlwZSBwYXJhbWV0ZXJzLgogICovCi1FdmFzX09iamVjdCogZXdrX3ZpZXdf
YmFzZV9hZGQoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3Jv
dXBSZWYgcGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpWaWV3QmVoYXZpb3IgYmVoYXZpb3IpCitFd2tW
aWV3KiBld2tfdmlld19iYXNlX2FkZChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0
UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OlZpZXdCZWhhdmlvciBi
ZWhhdmlvcikKIHsKICAgICByZXR1cm4gY3JlYXRlRXdrVmlldyhjYW52YXMsIGNyZWF0ZUV3a1Zp
ZXdTbWFydENsYXNzKCksIGNvbnRleHRSZWYgPyBFd2tDb250ZXh0OjpjcmVhdGUodG9JbXBsKGNv
bnRleHRSZWYpKSA6IEV3a0NvbnRleHQ6OmRlZmF1bHRDb250ZXh0KCksIHBhZ2VHcm91cFJlZiwg
YmVoYXZpb3IpOwogfQogCiBFdmFzX09iamVjdCogZXdrX3ZpZXdfc21hcnRfYWRkKEV2YXMqIGNh
bnZhcywgRXZhc19TbWFydCogc21hcnQsIEV3a19Db250ZXh0KiBjb250ZXh0KQogewotICAgIHJl
dHVybiBjcmVhdGVFd2tWaWV3KGNhbnZhcywgc21hcnQsIGV3a19vYmplY3RfY2FzdDxFd2tDb250
ZXh0Kj4oY29udGV4dCkpOworICAgIHJldHVybiBjcmVhdGVFd2tWaWV3KGNhbnZhcywgc21hcnQs
IGV3a19vYmplY3RfY2FzdDxFd2tDb250ZXh0Kj4oY29udGV4dCkpLT52aWV3KCk7CiB9CiAKIEV2
YXNfT2JqZWN0KiBld2tfdmlld19hZGRfd2l0aF9jb250ZXh0KEV2YXMqIGNhbnZhcywgRXdrX0Nv
bnRleHQqIGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdmlld19wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfdmlld19wcml2YXRlLmgKaW5kZXggODNiNGM5NzNiMWEzNjRjYzc5NjhjOGYzNzkxYWVj
ZjZkMjRjZWFhYi4uYzQ5MTJmZmQ3YjQxZTRlNTJhN2Y0YzZmYThkODBlYWQ0YjQxMDY1OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZh
dGUuaApAQCAtMjUsNiArMjUsNiBAQAogI2luY2x1ZGUgPEV2YXMuaD4KICNpbmNsdWRlIDxXZWJL
aXQyL1dLQmFzZS5oPgogCi1FdmFzX09iamVjdCogZXdrX3ZpZXdfYmFzZV9hZGQoRXZhcyogY2Fu
dmFzLCBXS0NvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpWaWV3QmVoYXZpb3Ip
OworRXdrVmlldyogZXdrX3ZpZXdfYmFzZV9hZGQoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYs
IFdLUGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpWaWV3QmVoYXZpb3IpOwogCiAjZW5kaWYgLy8gZXdr
X3ZpZXdfcHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZs
L1dlYkluc3BlY3RvclByb3h5RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwv
V2ViSW5zcGVjdG9yUHJveHlFZmwuY3BwCmluZGV4IDQ2MmIyNmQzNTBlZWZlZDcwMzM4MjFlNTc3
NGFhY2FjODU0Y2FhN2YuLjMxNzQ0OWRkMTVlNGQ4ZWZlMTkwYjllYWQ0MmVkNzMzZGY2OGQzMDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJv
eHlFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9y
UHJveHlFZmwuY3BwCkBAIC05OCwxNCArOTgsMTUgQEAgV2ViUGFnZVByb3h5KiBXZWJJbnNwZWN0
b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVJbnNwZWN0b3JQYWdlKCkKICAgICBpZiAoIW1faW5zcGVj
dG9yV2luZG93KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIG1faW5zcGVjdG9yVmlldyA9IGV3
a192aWV3X2Jhc2VfYWRkKGVjb3JlX2V2YXNfZ2V0KG1faW5zcGVjdG9yV2luZG93KSwgdG9BUEko
cGFnZSgpLT5wcm9jZXNzKCktPmNvbnRleHQoKSksIHRvQVBJKGluc3BlY3RvclBhZ2VHcm91cCgp
KSwgRXdrVmlldzo6TGVnYWN5QmVoYXZpb3IpOwotICAgIEV3a1ZpZXcqIGluc3BlY3RvclZpZXdJ
bXBsID0gRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QobV9pbnNwZWN0b3JWaWV3KTsKLSAgICBpbnNw
ZWN0b3JWaWV3SW1wbC0+c2V0VGhlbWVQYXRoKFRFU1RfVEhFTUVfRElSICIvZGVmYXVsdC5lZGoi
KTsKKyAgICAvLyBGSVhNRTogUmVmYWN0b3IgdG8gdXNlIFdLVmlld1JlZi4KKyAgICBtX2luc3Bl
Y3RvclZpZXcgPSBld2tfdmlld19iYXNlX2FkZChlY29yZV9ldmFzX2dldChtX2luc3BlY3Rvcldp
bmRvdyksIHRvQVBJKHBhZ2UoKS0+cHJvY2VzcygpLT5jb250ZXh0KCkpLCB0b0FQSShpbnNwZWN0
b3JQYWdlR3JvdXAoKSksIEV3a1ZpZXc6OkxlZ2FjeUJlaGF2aW9yKS0+dmlldygpOworICAgIEV3
a1ZpZXcqIGluc3BlY3RvclZpZXcgPSBFd2tWaWV3Ojpmcm9tRXZhc09iamVjdChtX2luc3BlY3Rv
clZpZXcpOworICAgIGluc3BlY3RvclZpZXctPnNldFRoZW1lUGF0aChURVNUX1RIRU1FX0RJUiAi
L2RlZmF1bHQuZWRqIik7CiAKLSAgICBFd2tfU2V0dGluZ3MqIHNldHRpbmdzID0gaW5zcGVjdG9y
Vmlld0ltcGwtPnNldHRpbmdzKCk7CisgICAgRXdrX1NldHRpbmdzKiBzZXR0aW5ncyA9IGluc3Bl
Y3RvclZpZXctPnNldHRpbmdzKCk7CiAgICAgZXdrX3NldHRpbmdzX2ZpbGVfYWNjZXNzX2Zyb21f
ZmlsZV91cmxzX2FsbG93ZWRfc2V0KHNldHRpbmdzLCB0cnVlKTsKIAotICAgIHJldHVybiBpbnNw
ZWN0b3JWaWV3SW1wbC0+cGFnZSgpOworICAgIHJldHVybiBpbnNwZWN0b3JWaWV3LT5wYWdlKCk7
CiB9CiAKIHZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtT3BlbigpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mN2QxYmJhZWNmYzdkMTEz
NTcwMjdhNzI5ZDgzZTNiMTZlNzZiNTYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmNwcApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VCBIT0xERVJTIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlZpZXcuaCIKKworI2lm
IEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyNpbmNsdWRlICJXZWJGdWxsU2NyZWVuTWFuYWdlclBy
b3h5LmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYlZpZXc6OldlYlZpZXco
V2ViQ29udGV4dCogY29udGV4dCwgUGFnZUNsaWVudCogcGFnZUNsaWVudCwgV2ViUGFnZUdyb3Vw
KiBwYWdlR3JvdXAsIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0KQorICAgIDogbV93ZWJQYWdlUHJv
eHkoY29udGV4dC0+Y3JlYXRlV2ViUGFnZShwYWdlQ2xpZW50LCBwYWdlR3JvdXApKQorICAgICwg
bV9ldmFzT2JqZWN0KGV2YXNPYmplY3QpCit7CisgICAgbV93ZWJQYWdlUHJveHktPnBhZ2VHcm91
cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCh0cnVl
KTsKKyAgICBtX3dlYlBhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldEZv
cmNlQ29tcG9zaXRpbmdNb2RlKHRydWUpOworCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQor
ICAgIG1fd2ViUGFnZVByb3h5LT5mdWxsU2NyZWVuTWFuYWdlcigpLT5zZXRXZWJWaWV3KG1fZXZh
c09iamVjdCk7CisjZW5kaWYKK30KKworV2ViVmlldzo6fldlYlZpZXcoKQoreworICAgIG1fd2Vi
UGFnZVByb3h5LT5jbG9zZSgpOworfQorCit2b2lkIFdlYlZpZXc6OmluaXRpYWxpemUoKQorewor
ICAgIG1fd2ViUGFnZVByb3h5LT5pbml0aWFsaXplV2ViUGFnZSgpOworfQorCit2b2lkIFdlYlZp
ZXc6OnNldFRoZW1lUGF0aChXS1N0cmluZ1JlZiB0aGVtZSkKK3sKKyAgICBtX3dlYlBhZ2VQcm94
eS0+c2V0VGhlbWVQYXRoKHRvV1RGU3RyaW5nKHRoZW1lKS51dGY4KCkuZGF0YSgpKTsKK30KKwor
dm9pZCBXZWJWaWV3OjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKQorewor
ICAgIG1fd2ViUGFnZVByb3h5LT5zdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMo
KTsKK30KKwordm9pZCBXZWJWaWV3OjpyZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9u
cygpCit7CisgICAgbV93ZWJQYWdlUHJveHktPnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmlt
YXRpb25zKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZWZsL1dlYlZpZXcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMWU3NjZkZmQxZjAwNmE2MzkzODQ2N2QzMjc1
MjAwMmM4MTdhODU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2VmbC9XZWJWaWV3LmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgV2ViVmlld19oCisjZGVmaW5lIFdlYlZpZXdfaAorCisjaW5jbHVkZSAiQVBJT2JqZWN0Lmgi
CisjaW5jbHVkZSAiUGFnZUNsaWVudC5oIgorI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKKyNpbmNs
dWRlICJXZWJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRl
ICJXZWJQcmVmZXJlbmNlcy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViVmll
dyA6IHB1YmxpYyBBUElPYmplY3QgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBUeXBlIEFQ
SVR5cGUgPSBUeXBlVmlldzsKKworICAgIFdlYlZpZXcoV2ViQ29udGV4dCosIFBhZ2VDbGllbnQq
LCBXZWJQYWdlR3JvdXAqLCBFdmFzX09iamVjdCopOworICAgIHZpcnR1YWwgfldlYlZpZXcoKTsK
KworICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworCisgICAgV0tQYWdlUmVmIHBhZ2VSZWYoKSBjb25z
dCB7IHJldHVybiB0b0FQSShtX3dlYlBhZ2VQcm94eS5nZXQoKSk7IH0KKworICAgIHZvaWQgc2V0
VGhlbWVQYXRoKFdLU3RyaW5nUmVmKTsKKyAgICB2b2lkIHN1c3BlbmRBY3RpdmVET01PYmplY3Rz
QW5kQW5pbWF0aW9ucygpOworICAgIHZvaWQgcmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1h
dGlvbnMoKTsKKworICAgIC8vIEZJWE1FOiBSZW1vdmUgd2hlbiBwb3NzaWJsZS4KKyAgICBFdmFz
X09iamVjdCogZXZhc09iamVjdCgpIHsgcmV0dXJuIG1fZXZhc09iamVjdDsgfQorICAgIFdlYlBh
Z2VQcm94eSogcGFnZSgpIHsgcmV0dXJuIG1fd2ViUGFnZVByb3h5LmdldCgpOyB9CisKK3ByaXZh
dGU6CisgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBBUElUeXBlOyB9CisK
KyAgICBSZWZQdHI8V2ViUGFnZVByb3h5PiBtX3dlYlBhZ2VQcm94eTsKKyAgICBFdmFzX09iamVj
dCogbV9ldmFzT2JqZWN0OworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBlMmJhZmQwZjc2NDhiOTEzOGE2NzBlMWJl
Mjc2MmU1ODk3NWM0NzRiLi4xYjA4OTRiNmZiNDJiZDlmZThlYjIxZmUxMWU4ZWFjMDc4ZjAxY2Ri
IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzkgQEAKKzIwMTMtMDEtMjggIEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuICA8a2Vu
bmV0aEB3ZWJraXQub3JnPgorCisgICAgICAgIFtFRkxdW1dLMl0gSW50cm9kdWNlIGEgV2ViVmll
dyBjbGFzcyBhcyBjb3VudGVycGFydCBmb3IgV0tWaWV3UmVmCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc5MzEKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2UgcGxhdGZvcm1WaWV3IHRvIGJlIGEg
V0tWaWV3IGFuZCB1c2UgV0tWaWV3R2V0RXZhc09iamVjdAorICAgICAgICBmb3IgdGhlIHBsYWNl
cyB3aGVyZSBhbiBFdmFzX09iamVjdCBpcyBuZWVkZWQuCisKKyAgICAgICAgSW5zdGVhZCBvZiBl
eHRyYWN0aW5nIHRoZSBFY29yZV9FdmFzKiBmcm9tIHRoZSBtX3ZpZXcgd2UgdXNlCisgICAgICAg
IHRoZSBtX3dpbmRvdyBpbnN0ZWFkLCB3aGljaCBhY3R1YWxseSBob2xkcyB0aGUgaXQuCisKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2ViVmlldy5oOgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvZWZsL1BsYXRmb3JtV2ViVmlldy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpQbGF0Zm9ybVdlYlZpZXc6OlBsYXRmb3JtV2ViVmlldyk6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpQbGF0Zm9ybVdlYlZpZXc6On5QbGF0Zm9ybVdlYlZpZXcpOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6UGxhdGZvcm1XZWJWaWV3OjpyZXNpemVUbyk6CisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpQbGF0Zm9ybVdlYlZpZXc6OnBhZ2UpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGxh
dGZvcm1XZWJWaWV3OjpzaW11bGF0ZVNwYWNlYmFyS2V5UHJlc3MpOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6UGxhdGZvcm1XZWJWaWV3OjpzaW11bGF0ZU1vdXNlTW92ZSk6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpQbGF0Zm9ybVdlYlZpZXc6OnNpbXVsYXRlUmlnaHRDbGljayk6CisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaDoKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL2VmbC9FdmVudFNlbmRlclByb3h5RWZsLmNwcDoKKyAgICAgICAgKFdUUjo6
RXZlbnRTZW5kZXJQcm94eTo6c2VuZFRvdWNoRXZlbnQpOgorICAgICAgICAoV1RSOjpFdmVudFNl
bmRlclByb3h5OjpzZXRUb3VjaE1vZGlmaWVyKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L2VmbC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3BwOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZp
ZXc6OlBsYXRmb3JtV2ViVmlldyk6CisgICAgICAgIChXVFI6OlBsYXRmb3JtV2ViVmlldzo6flBs
YXRmb3JtV2ViVmlldyk6CisgICAgICAgIChXVFI6OlBsYXRmb3JtV2ViVmlldzo6cmVzaXplVG8p
OgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6OnBhZ2UpOgorICAgICAgICAoV1RSOjpQ
bGF0Zm9ybVdlYlZpZXc6OmZvY3VzKToKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3Ojp3
aW5kb3dGcmFtZSk6CisgICAgICAgIChXVFI6OlBsYXRmb3JtV2ViVmlldzo6c2V0V2luZG93RnJh
bWUpOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6OndpbmRvd1NuYXBzaG90SW1hZ2Up
OgorCiAyMDEzLTAxLTI4ICBSYXBoYWVsIEt1Ym8gZGEgQ29zdGEgIDxyYXBoYWVsLmt1Ym8uZGEu
Y29zdGFAaW50ZWwuY29tPgogCiAgICAgICAgIFtFRkxdIEluY2x1ZGUgRWNvcmVfR2V0b3B0Lmgg
aW4gTWluaUJyb3dzZXIuCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3Jt
V2ViVmlldy5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdlYlZpZXcuaAppbmRleCA1
YWQxZWVkMGUxZjFlMmIxMWQyYjlhY2MwNmUzOGQ0OThmMjNiNWRjLi5kY2FmNDQ4NDJkNmVmZTc5
NGZhNGI3YzFhMjg3YzBkMWE4NTQzMjNiIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1BsYXRmb3JtV2ViVmlldy5oCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XZWJW
aWV3LmgKQEAgLTQ3LDEzICs0Nyw4IEBAIHR5cGVkZWYgSFdORCBQbGF0Zm9ybVdpbmRvdzsKIHR5
cGVkZWYgV0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlwZWRlZiBHdGtXaWRnZXQgKlBsYXRm
b3JtV2luZG93OwogI2VsaWYgUExBVEZPUk0oRUZMKQotI2lmIFVTRShFTykKLXR5cGVkZWYgc3Ry
dWN0IF9FbyBFdmFzX09iamVjdDsKLSNlbHNlCi10eXBlZGVmIHN0cnVjdCBfRXZhc19PYmplY3Qg
RXZhc19PYmplY3Q7Ci0jZW5kaWYKIHR5cGVkZWYgc3RydWN0IF9FY29yZV9FdmFzIEVjb3JlX0V2
YXM7Ci10eXBlZGVmIEV2YXNfT2JqZWN0KiBQbGF0Zm9ybVdLVmlldzsKK3R5cGVkZWYgV0tWaWV3
UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlwZWRlZiBFY29yZV9FdmFzKiBQbGF0Zm9ybVdpbmRvdzsK
ICNlbmRpZgogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2VmbC9QbGF0Zm9ybVdl
YlZpZXcuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwvUGxhdGZvcm1XZWJWaWV3LmNwcApp
bmRleCBkNTQ0OWViNGQxOTM2MTdhYjBhNGNiYTZlZDY2MWVkZDNiMDUzODI0Li4zYzk5MGFkMjZm
NGVlZDM2MWVjNDZmNDgwOTMxY2I4MGNkMmE5NmNmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL2VmbC9QbGF0Zm9ybVdlYlZpZXcuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
ZWZsL1BsYXRmb3JtV2ViVmlldy5jcHAKQEAgLTY1LDMzICs2NSwzOCBAQCBQbGF0Zm9ybVdlYlZp
ZXc6OlBsYXRmb3JtV2ViVmlldyhXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBS
ZWYgcGFnZUdybwogewogICAgIG1fd2luZG93ID0gaW5pdEVjb3JlRXZhcygpOwogICAgIEV2YXMq
IGV2YXMgPSBlY29yZV9ldmFzX2dldChtX3dpbmRvdyk7Ci0gICAgbV92aWV3ID0gdG9JbXBsKFdL
Vmlld0NyZWF0ZShldmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYpKTsKLSAgICBld2tfdmll
d190aGVtZV9zZXQobV92aWV3LCBUSEVNRV9ESVIiL2RlZmF1bHQuZWRqIik7Ci0gICAgZXZhc19v
YmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKG1fdmlldywgIndlYnByb2Nlc3MsY3Jhc2hlZCIsIG9u
V2ViUHJvY2Vzc0NyYXNoZWQsIDApOworICAgIG1fdmlldyA9IFdLVmlld0NyZWF0ZShldmFzLCBj
b250ZXh0UmVmLCBwYWdlR3JvdXBSZWYpOworICAgIGV3a192aWV3X3RoZW1lX3NldChXS1ZpZXdH
ZXRFdmFzT2JqZWN0KG1fdmlldyksIFRIRU1FX0RJUiIvZGVmYXVsdC5lZGoiKTsKKyAgICBldmFz
X29iamVjdF9zbWFydF9jYWxsYmFja19hZGQoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCAi
d2VicHJvY2VzcyxjcmFzaGVkIiwgb25XZWJQcm9jZXNzQ3Jhc2hlZCwgMCk7CiAgICAgcmVzaXpl
VG8oNjAwLCA4MDApOwogfQogCiBQbGF0Zm9ybVdlYlZpZXc6On5QbGF0Zm9ybVdlYlZpZXcoKQog
ewotICAgIGV2YXNfb2JqZWN0X2RlbChtX3ZpZXcpOworICAgIC8vIEZJWE1FOiBUaGUgQyBXS1Zp
ZXcgQVBJIGN1cnJlbnRseSBjcmVhdGVzIHRoZSBFdmFzX09iamVjdCwgc28gd2UgaGF2ZSB0byBk
ZXN0cnVjdCBpdAorICAgIC8vIChhbmQgaXRzIGRlcGVuZGVuY2llcyBFd2tWaWV3IGFuZCBXZWJL
aXQ6OldlYlZpZXcpIHRoaXMgd2F5LCB1bnRpbCB0aGlzIGdldCBmaXhlZC4KKyAgICBldmFzX29i
amVjdF9kZWwoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpKTsKKworICAgIFdLUmVsZWFzZSht
X3ZpZXcpOworCiAgICAgZWNvcmVfZXZhc19mcmVlKG1fd2luZG93KTsKICAgICBlY29yZV9ldmFz
X3NodXRkb3duKCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpyZXNpemVUbyh1bnNpZ25l
ZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQogewotICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShtX3Zp
ZXcsIHdpZHRoLCBoZWlnaHQpOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShXS1ZpZXdHZXRFdmFz
T2JqZWN0KG1fdmlldyksIHdpZHRoLCBoZWlnaHQpOwogfQogCiBXS1BhZ2VSZWYgUGxhdGZvcm1X
ZWJWaWV3OjpwYWdlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV0tWaWV3R2V0UGFnZSh0b0FQSSht
X3ZpZXcpKTsKKyAgICByZXR1cm4gV0tWaWV3R2V0UGFnZShtX3ZpZXcpOwogfQogCiB2b2lkIFBs
YXRmb3JtV2ViVmlldzo6c2ltdWxhdGVTcGFjZWJhcktleVByZXNzKCkKIHsKICAgICBFdmFzKiBl
dmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwotICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3Nl
dChtX3ZpZXcsIHRydWUpOworICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldChXS1ZpZXdHZXRFdmFz
T2JqZWN0KG1fdmlldyksIHRydWUpOwogICAgIGV2YXNfZXZlbnRfZmVlZF9rZXlfZG93bihldmFz
LCAic3BhY2UiLCAic3BhY2UiLCAiICIsIDAsIDAsIDApOwogICAgIGV2YXNfZXZlbnRfZmVlZF9r
ZXlfdXAoZXZhcywgInNwYWNlIiwgInNwYWNlIiwgIiAiLCAwLCAxLCAwKTsKIH0KQEAgLTk5LDE0
ICsxMDQsMTQgQEAgdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnNpbXVsYXRlU3BhY2ViYXJLZXlQcmVz
cygpCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6c2ltdWxhdGVNb3VzZU1vdmUodW5zaWduZWQgeCwg
dW5zaWduZWQgeSkKIHsKICAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cp
OwotICAgIGV2YXNfb2JqZWN0X3Nob3cobV92aWV3KTsKKyAgICBldmFzX29iamVjdF9zaG93KFdL
Vmlld0dldEV2YXNPYmplY3QobV92aWV3KSk7CiAgICAgZXZhc19ldmVudF9mZWVkX21vdXNlX21v
dmUoZXZhcywgeCwgeSwgMCwgMCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpzaW11bGF0
ZVJpZ2h0Q2xpY2sodW5zaWduZWQgeCwgdW5zaWduZWQgeSkKIHsKICAgICBFdmFzKiBldmFzID0g
ZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwotICAgIGV2YXNfb2JqZWN0X3Nob3cobV92aWV3KTsK
KyAgICBldmFzX29iamVjdF9zaG93KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSk7CiAgICAg
ZXZhc19ldmVudF9mZWVkX21vdXNlX21vdmUoZXZhcywgeCwgeSwgMCwgMCk7CiAgICAgZXZhc19l
dmVudF9mZWVkX21vdXNlX2Rvd24oZXZhcywgMywgRVZBU19CVVRUT05fTk9ORSwgMCwgMCk7CiAg
ICAgZXZhc19ldmVudF9mZWVkX21vdXNlX3VwKGV2YXMsIDMsIEVWQVNfQlVUVE9OX05PTkUsIDAs
IDApOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcu
aCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgKaW5kZXggOGY5ZGNk
YjdlZTNhYWYzODI3NmI2NjAzMDA4YmQxZGJjODc4OTNjNi4uNTFjNGJjYzIzNTY1NWM3Y2JjMTVm
YmQ5YWJjOGRhYWM3ZDFmZjkzNCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Q
bGF0Zm9ybVdlYlZpZXcuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2Vi
Vmlldy5oCkBAIC01NCwxMyArNTQsOCBAQCB0eXBlZGVmIHN0cnVjdCBfR3RrV2lkZ2V0IEd0a1dp
ZGdldDsKIHR5cGVkZWYgV0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlwZWRlZiBHdGtXaWRn
ZXQqIFBsYXRmb3JtV2luZG93OwogI2VsaWYgUExBVEZPUk0oRUZMKQotI2lmIFVTRShFTykKLXR5
cGVkZWYgc3RydWN0IF9FbyBFdmFzX09iamVjdDsKLSNlbHNlCi10eXBlZGVmIHN0cnVjdCBfRXZh
c19PYmplY3QgRXZhc19PYmplY3Q7Ci0jZW5kaWYKIHR5cGVkZWYgc3RydWN0IF9FY29yZV9FdmFz
IEVjb3JlX0V2YXM7Ci10eXBlZGVmIEV2YXNfT2JqZWN0KiBQbGF0Zm9ybVdLVmlldzsKK3R5cGVk
ZWYgV0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlwZWRlZiBFY29yZV9FdmFzKiBQbGF0Zm9y
bVdpbmRvdzsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2Vm
bC9FdmVudFNlbmRlclByb3h5RWZsLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL0V2
ZW50U2VuZGVyUHJveHlFZmwuY3BwCmluZGV4IGYyODI5YTk2YzkyOGEyZjkzOTdlNTZjOWI3OTY1
ZWYwNTEwNzJlOTkuLjEzOTIwZWMwNmI5MDViMjhiNTAxMDY2MzE5NmNiMjViNTBlMzgxYTUgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwu
Y3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwu
Y3BwCkBAIC00MzgsNyArNDM4LDcgQEAgdm9pZCBFdmVudFNlbmRlclByb3h5OjpzZW5kVG91Y2hF
dmVudChFd2tfVG91Y2hfRXZlbnRfVHlwZSBldmVudFR5cGUpCiB7CiAgICAgQVNTRVJUKG1fdG91
Y2hQb2ludHMpOwogCi0gICAgRXZhc19PYmplY3QqIGV3a1ZpZXcgPSBtX3Rlc3RDb250cm9sbGVy
LT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKTsKKyAgICBFdmFzX09iamVjdCogZXdrVmll
dyA9IFdLVmlld0dldEV2YXNPYmplY3QobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+
cGxhdGZvcm1WaWV3KCkpOwogICAgIGV3a192aWV3X2ZlZWRfdG91Y2hfZXZlbnQoZXdrVmlldywg
ZXZlbnRUeXBlLCBtX3RvdWNoUG9pbnRzLCBldmFzX2tleV9tb2RpZmllcl9nZXQoZXZhc19vYmpl
Y3RfZXZhc19nZXQoZXdrVmlldykpKTsKIAogICAgIEVpbmFfTGlzdCogbGlzdDsKQEAgLTQ5MCwx
MiArNDkwLDE0IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6dXBkYXRlVG91Y2hQb2ludChpbnQg
aW5kZXgsIGludCB4LCBpbnQgeSkKIAogdm9pZCBFdmVudFNlbmRlclByb3h5OjpzZXRUb3VjaE1v
ZGlmaWVyKFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXIsIGJvb2wgZW5hYmxlKQogeworICAgIEV2
YXNfT2JqZWN0KiBld2tWaWV3ID0gV0tWaWV3R2V0RXZhc09iamVjdChtX3Rlc3RDb250cm9sbGVy
LT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKSk7CisKICAgICBmb3IgKHVuc2lnbmVkIGlu
ZGV4ID0gMDsgaW5kZXggPCAoc2l6ZW9mKG1vZGlmaWVyTmFtZXMpIC8gc2l6ZW9mKGNoYXIqKSk7
ICsraW5kZXgpIHsKICAgICAgICAgaWYgKG1vZGlmaWVyICYgKDEgPDwgaW5kZXgpKSB7CiAgICAg
ICAgICAgICBpZiAoZW5hYmxlKQotICAgICAgICAgICAgICAgIGV2YXNfa2V5X21vZGlmaWVyX29u
KGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBs
YXRmb3JtVmlldygpKSwgbW9kaWZpZXJOYW1lc1tpbmRleF0pOworICAgICAgICAgICAgICAgIGV2
YXNfa2V5X21vZGlmaWVyX29uKGV2YXNfb2JqZWN0X2V2YXNfZ2V0KGV3a1ZpZXcpLCBtb2RpZmll
ck5hbWVzW2luZGV4XSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZXZhc19r
ZXlfbW9kaWZpZXJfb2ZmKGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1h
aW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpKSwgbW9kaWZpZXJOYW1lc1tpbmRleF0pOworICAg
ICAgICAgICAgICAgIGV2YXNfa2V5X21vZGlmaWVyX29mZihldmFzX29iamVjdF9ldmFzX2dldChl
d2tWaWV3KSwgbW9kaWZpZXJOYW1lc1tpbmRleF0pOwogICAgICAgICB9CiAgICAgfQogfQpkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNw
cCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5jcHAKaW5k
ZXggMWNjYzBiZGFiZTlhYWI4N2NlYWViYjg3OGE2YjQ0M2EwZWY2MWMxNS4uMmI3ZDg5MmYxZDFj
OGI5NDc2NTY2M2MwYjg4YTc4ZTA4MzM5MDI0ZSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL2VmbC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3BwCkBAIC02MSw1NiArNjEsNTggQEAgUGxh
dGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLUGFn
ZUdyb3VwUmVmIHBhZ2VHcm91cCwKICAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93
aW5kb3cpOwogCiAgICAgaWYgKG1fdXNpbmdGaXhlZExheW91dCkgewotICAgICAgICBtX3ZpZXcg
PSB0b0ltcGwoV0tWaWV3Q3JlYXRlV2l0aEZpeGVkTGF5b3V0KGV2YXMsIGNvbnRleHQsIHBhZ2VH
cm91cCkpOwotICAgICAgICBldmFzX29iamVjdF9yZXNpemUobV92aWV3LCA4MDAsIDYwMCk7Cisg
ICAgICAgIG1fdmlldyA9IFdLVmlld0NyZWF0ZVdpdGhGaXhlZExheW91dChldmFzLCBjb250ZXh0
LCBwYWdlR3JvdXApOworICAgICAgICBldmFzX29iamVjdF9yZXNpemUoV0tWaWV3R2V0RXZhc09i
amVjdChtX3ZpZXcpLCA4MDAsIDYwMCk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1fdmlldyA9IHRv
SW1wbChXS1ZpZXdDcmVhdGUoZXZhcywgY29udGV4dCwgcGFnZUdyb3VwKSk7CisgICAgICAgIG1f
dmlldyA9IFdLVmlld0NyZWF0ZShldmFzLCBjb250ZXh0LCBwYWdlR3JvdXApOwogCi0gICAgZXdr
X3ZpZXdfdGhlbWVfc2V0KG1fdmlldywgVEhFTUVfRElSIi9kZWZhdWx0LmVkaiIpOworICAgIGV3
a192aWV3X3RoZW1lX3NldChXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIFRIRU1FX0RJUiIv
ZGVmYXVsdC5lZGoiKTsKICAgICBtX3dpbmRvd0lzS2V5ID0gZmFsc2U7Ci0gICAgZXZhc19vYmpl
Y3Rfc2hvdyhtX3ZpZXcpOworICAgIGV2YXNfb2JqZWN0X3Nob3coV0tWaWV3R2V0RXZhc09iamVj
dChtX3ZpZXcpKTsKIH0KIAogUGxhdGZvcm1XZWJWaWV3Ojp+UGxhdGZvcm1XZWJWaWV3KCkKIHsK
LSAgICBldmFzX29iamVjdF9kZWwobV92aWV3KTsKKyAgICAvLyBGSVhNRTogVGhlIEMgV0tWaWV3
IEFQSSBjdXJyZW50bHkgY3JlYXRlcyB0aGUgRXZhc19PYmplY3QsIHNvIHdlIGhhdmUgdG8gZGVz
dHJ1Y3QgaXQKKyAgICAvLyAoYW5kIGl0cyBkZXBlbmRlbmNpZXMgRXdrVmlldyBhbmQgV2ViS2l0
OjpXZWJWaWV3KSB0aGlzIHdheSwgdW50aWwgdGhpcyBnZXQgZml4ZWQuCisgICAgZXZhc19vYmpl
Y3RfZGVsKFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSk7CisKKyAgICBXS1JlbGVhc2UobV92
aWV3KTsKKwogICAgIGVjb3JlX2V2YXNfZnJlZShtX3dpbmRvdyk7CiB9CiAKIHZvaWQgUGxhdGZv
cm1XZWJWaWV3OjpyZXNpemVUbyh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQogewot
ICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShtX3ZpZXcsIHdpZHRoLCBoZWlnaHQpOworICAgIGV2YXNf
b2JqZWN0X3Jlc2l6ZShXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIHdpZHRoLCBoZWlnaHQp
OwogfQogCiBXS1BhZ2VSZWYgUGxhdGZvcm1XZWJWaWV3OjpwYWdlKCkKIHsKLSAgICByZXR1cm4g
V0tWaWV3R2V0UGFnZSh0b0FQSShtX3ZpZXcpKTsKKyAgICByZXR1cm4gV0tWaWV3R2V0UGFnZSht
X3ZpZXcpOwogfQogCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6Zm9jdXMoKQogeworICAgIEV2YXNf
T2JqZWN0KiBldmFzT2JqZWN0ID0gV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpOwogICAgIC8v
IEluIGEgZmV3IGNhc2VzLCBhbiBpZnJhbWUgbWlnaHQgcmVjZWl2ZSBmb2N1cyBmcm9tIEphdmFT
Y3JpcHQgYW5kIEV2YXMgaXMgbm90IGF3YXJlIG9mIGl0IGF0IGFsbAogICAgIC8vIChXZWJDb3Jl
U3VwcG9ydDo6Zm9jdXNlZEZyYW1lQ2hhbmdlZCgpIGRvZXMgbm90IGVtaXQgYW55IG5vdGlmaWNh
dGlvbikuIFdlIHRoZW4gbWFudWFsbHkgcmVtb3ZlIHRoZQogICAgIC8vIGZvY3VzIGZyb20gdGhl
IHZpZXcgdG8gbWFrZSB0aGUgY2FsbCBnaXZlIGZvY3VzIHRvIGV2YXNfb2JqZWN0X2ZvY3VzX3Nl
dCguLi4sIHRydWUpIHRvIGJlIGVmZmVjdGZ1bC4KLSAgICBpZiAoV0tQYWdlR2V0Rm9jdXNlZEZy
YW1lKHBhZ2UoKSkgIT0gV0tQYWdlR2V0TWFpbkZyYW1lKHBhZ2UoKSkpCi0gICAgICAgIGV2YXNf
b2JqZWN0X2ZvY3VzX3NldChtX3ZpZXcsIGZhbHNlKTsKLSAgICBldmFzX29iamVjdF9mb2N1c19z
ZXQobV92aWV3LCB0cnVlKTsKKyAgICBldmFzX29iamVjdF9mb2N1c19zZXQoV0tWaWV3R2V0RXZh
c09iamVjdChtX3ZpZXcpLCBXS1BhZ2VHZXRGb2N1c2VkRnJhbWUocGFnZSgpKSA9PSBXS1BhZ2VH
ZXRNYWluRnJhbWUocGFnZSgpKSk7CiB9CiAKIFdLUmVjdCBQbGF0Zm9ybVdlYlZpZXc6OndpbmRv
d0ZyYW1lKCkKIHsKICAgICBpbnQgeCwgeSwgd2lkdGgsIGhlaWdodDsKIAotICAgIEVjb3JlX0V2
YXMqIGVlID0gZWNvcmVfZXZhc19lY29yZV9ldmFzX2dldChldmFzX29iamVjdF9ldmFzX2dldCht
X3ZpZXcpKTsKLSAgICBlY29yZV9ldmFzX3JlcXVlc3RfZ2VvbWV0cnlfZ2V0KGVlLCAmeCwgJnks
ICZ3aWR0aCwgJmhlaWdodCk7CisgICAgZWNvcmVfZXZhc19yZXF1ZXN0X2dlb21ldHJ5X2dldCht
X3dpbmRvdywgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQpOwogCiAgICAgcmV0dXJuIFdLUmVjdE1h
a2UoeCwgeSwgd2lkdGgsIGhlaWdodCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpzZXRX
aW5kb3dGcmFtZShXS1JlY3QgZnJhbWUpCiB7Ci0gICAgRWNvcmVfRXZhcyogZWUgPSBlY29yZV9l
dmFzX2Vjb3JlX2V2YXNfZ2V0KGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fdmlldykpOwotICAgIGVj
b3JlX2V2YXNfbW92ZV9yZXNpemUoZWUsIGZyYW1lLm9yaWdpbi54LCBmcmFtZS5vcmlnaW4ueSwg
ZnJhbWUuc2l6ZS53aWR0aCwgZnJhbWUuc2l6ZS5oZWlnaHQpOworICAgIGVjb3JlX2V2YXNfbW92
ZV9yZXNpemUobV93aW5kb3csIGZyYW1lLm9yaWdpbi54LCBmcmFtZS5vcmlnaW4ueSwgZnJhbWUu
c2l6ZS53aWR0aCwgZnJhbWUuc2l6ZS5oZWlnaHQpOwogfQogCiB2b2lkIFBsYXRmb3JtV2ViVmll
dzo6YWRkQ2hyb21lSW5wdXRGaWVsZCgpCkBAIC0xMjcsMTUgKzEyOSwxMiBAQCB2b2lkIFBsYXRm
b3JtV2ViVmlldzo6bWFrZVdlYlZpZXdGaXJzdFJlc3BvbmRlcigpCiAKIFdLUmV0YWluUHRyPFdL
SW1hZ2VSZWY+IFBsYXRmb3JtV2ViVmlldzo6d2luZG93U25hcHNob3RJbWFnZSgpCiB7Ci0gICAg
RWNvcmVfRXZhcyogZWUgPSBlY29yZV9ldmFzX2Vjb3JlX2V2YXNfZ2V0KGV2YXNfb2JqZWN0X2V2
YXNfZ2V0KG1fdmlldykpOwotICAgIEFTU0VSVChlZSk7Ci0KICAgICBpbnQgd2lkdGg7CiAgICAg
aW50IGhlaWdodDsKLSAgICBlY29yZV9ldmFzX2dlb21ldHJ5X2dldChlZSwgMCwgMCwgJndpZHRo
LCAmaGVpZ2h0KTsKKyAgICBlY29yZV9ldmFzX2dlb21ldHJ5X2dldChtX3dpbmRvdywgMCwgMCwg
JndpZHRoLCAmaGVpZ2h0KTsKICAgICBBU1NFUlQod2lkdGggPiAwICYmIGhlaWdodCA+IDApOwog
Ci0gICAgcmV0dXJuIGFkb3B0V0soV0tWaWV3Q3JlYXRlU25hcHNob3QodG9BUEkobV92aWV3KSkp
OworICAgIHJldHVybiBhZG9wdFdLKFdLVmlld0NyZWF0ZVNuYXBzaG90KG1fdmlldykpOwogfQog
CiBib29sIFBsYXRmb3JtV2ViVmlldzo6dmlld1N1cHBvcnRzT3B0aW9ucyhXS0RpY3Rpb25hcnlS
ZWYgb3B0aW9ucykgY29uc3QK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185231</attachid>
            <date>2013-01-29 06:05:28 -0800</date>
            <delta_ts>2013-01-30 06:39:11 -0800</delta_ts>
            <desc>rebased</desc>
            <filename>bug-107931-20130128181303-rebased.patch</filename>
            <type>text/plain</type>
            <size>41043</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDlmNzhmM2ZkZWZjODFlMTZjN2U1OTQ1MjJkMWY4Yjc3NWExNWY0ZTQKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
VHVlIEphbiAyOSAxMjo0NjoxOSAyMDEzICswMjAwCgogICAgYnVnMTA3OTMxCgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmlu
ZGV4IGY3YjliNDguLjZmMGQxMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTYgQEAKKzIwMTMt
MDEtMjkgIEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuICA8a2VubmV0aEB3ZWJraXQub3JnPgor
CisgICAgICAgIFtFRkxdW1dLMl0gSW50cm9kdWNlIGEgV2ViVmlldyBjbGFzcyBhcyBjb3VudGVy
cGFydCBmb3IgV0tWaWV3UmVmCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMDc5MzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUaGlzIGlzIGp1c3Qgb25lIHN0ZXAgb2YgdGhlIG5ldyBwbGFuIGZvciB0aGUg
RUZMIEFQSS4KKworICAgICAgICBUaGUgcGxhbiBpcyB0byBtb3ZlIHRoZSBwdWJsaWMgRUZMLWxp
a2UgQVBJIG9uIHRvcCBvZiB0aGUgc2hhcmVkCisgICAgICAgIFdLMiBDIEFQSSwgcGx1cyBhIGZl
dyBFRkwgZXh0ZW5zaW9ucyAoV0tWaWV3IGNsYXNzIG1vc3RseSkuCisKKyAgICAgICAgVGhlIEVG
TC1saWtlIEFQSSBjYW4gYmUgc2VlbiBhcyBhIGNvbnZlbmllbmNlIEFQSSB3aGljaCB0aWVzCisg
ICAgICAgIHdlbGwgaW50byBFRkwgYW5kIHdoaWNoIG1ha2VzIGl0IGVhc3kgdG8gYWRkIHdlYiBl
eHBlcmllbmNlcworICAgICAgICB0byBleGlzdGluZyBhbmQgbmV3IEVGTCBhcHBsaWNhdGlvbnMu
IEl0IHByb3ZpZGVzIGEgc21hcnQgb2JqZWN0CisgICAgICAgIGxpa2UgQVBJIGFuZCBhIEV2YXNf
T2JqZWN0IGJhc2VkIHZpZXcuCisKKyAgICAgICAgRm9yIG1vcmUgYWR2YW5jZWQgdXNlIGNhc2Vz
LCBzdWNoIGFzIGJyb3dzZXIgYW5kIHJ1bnRpbWUsIGl0IGlzCisgICAgICAgIHBvc3NpYmxlIHRv
IHVzZSB0aGUgV0sqIEMgQVBJLCB3aGljaCBpcyBnaXZlcyBtb3JlIGZsZXhpYmlsaXR5CisgICAg
ICAgIHdoaWxlIGJlaW5nIG1vcmUgbG93IGxldmVsLgorCisgICAgICAgIFRoZSBpZGVhIGlzIHRo
YXQgdGhlIFdLVmlldyBjbGFzcyB3aWxsIG5vdCBkZXBlbmQgb24gRXZhc19PYmplY3QKKyAgICAg
ICAgYW5kIFgxMSAoZnV0dXJlIHBsYW4pIHVubGlrZSB0aGUgY3VycmVudCBFRkwtbGlrZSBBUEku
IFRoaXMgc2hvdWxkCisgICAgICAgIG1ha2UgaXQgcG9zc2libGUgdG8gdXNlIGl0IGZvciBjYXNl
cyB3aGVyZSBub25lIG9mIHRoZXNlIGFyZQorICAgICAgICBhdmFpbGFibGUuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRoZSBXZWJWaWV3IGNsYXNzIHdoaWNoIHNlcnZlcyBhcyBv
dXIKKyAgICAgICAgY291bnRlcnBhcnQgZm9yIHRoZSBXS1ZpZXcgY2xhc3MsIGFuZCBhZGRzIGEg
ZmV3IG5lZWRlZCBtZXRob2RzLgorCisgICAgICAgIFRoZSBFd2tWaWV3IG93bnMgdGhlIFdlYlZp
ZXcgY2xhc3MgKGFuZCB3aWxsIGJlIGNvbnN0cnVjdGluZyBpdAorICAgICAgICBpbiB0aGUgbmVh
ciBmdXR1cmUgd2hlbiB0aGUgRXdrVmlldyBjbGFzcyBoYXMgYmVlbiBjaGFuZ2VkIHRvCisgICAg
ICAgIGhhbmRsZSBhbGwgc21hcnQgb2JqZWN0IHJlbGF0ZWQgY29kZSkKKworICAgICAgICBUaGUg
Y2xlYW4gdXAgb2YgdGhlIHNtYXJ0IG9iamVjdCByZWxhdGVkIGNvZGUgYXMgdGhlIHByb3Blcgor
ICAgICAgICBjb25zdHJ1Y3Rpb24gb2YgRXdrVmlldyBhbmQgV2ViVmlldyB3aWxsIGJlIGRvbmUg
aW4gZm9sbG93LXVwCisgICAgICAgIHBhdGNoZXMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0MvZWZsL1dLQVBJQ2FzdEVmbC5oOgorICAgICAgICAoV2ViS2l0KToKKworICAgICAgICAgICAg
VGhlIFdLVmlldyBBUEkgaXMgbm90IGJhc2VkIG9uIFdlYlZpZXcgYW5kIG5vdCBFdmFzX09iamVj
dCoKKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcDoKKyAgICAgICAg
KFdLVmlld0NyZWF0ZSk6CisgICAgICAgIChXS1ZpZXdDcmVhdGVXaXRoRml4ZWRMYXlvdXQpOgor
ICAgICAgICAoV0tWaWV3SW5pdGlhbGl6ZSk6CisgICAgICAgIChXS1ZpZXdHZXRQYWdlKToKKyAg
ICAgICAgKFdLVmlld1NldFRoZW1lUGF0aCk6CisgICAgICAgIChXS1ZpZXdTdXNwZW5kQWN0aXZl
RE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMpOgorICAgICAgICAoV0tWaWV3UmVzdW1lQWN0aXZlRE9N
T2JqZWN0c0FuZEFuaW1hdGlvbnMpOgorICAgICAgICAoV0tWaWV3R2V0RXZhc09iamVjdCk6Cisg
ICAgICAgIChXS1ZpZXdDcmVhdGVTbmFwc2hvdCk6CisKKyAgICAgICAgICAgIEFkZCBhIGZldyBu
ZXcgV0tWaWV3IEVGTCBDIG1ldGhvZHMsIGFuZCB1cGRhdGUgZXhpc3RpbmcKKyAgICAgICAgICAg
IG1ldGhvZHMgdG8gcmVmbGVjdCB0aGF0IHRoZSBXS1ZpZXdSZWYgaXMgbm93IGEgV2ViVmlldyoK
KworICAgICAgICAgICAgVGhlIGNvbnN0cnVjdGlvbiBtZXRob2RzIHdpbGwgYmUgcmV3cml0dGVu
IHdoZW4gdGhlIHNtYXJ0CisgICAgICAgICAgICBvYmplY3QgY29uc3RydWN0aW9uIGhhcyBiZWVu
IHNvbHZlcy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3Lmg6CisgICAg
ICAgICogVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpXZWJWaWV3KToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlldzo6fldlYlZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojppbml0aWFsaXpl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6c2V0VGhlbWVQYXRoKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlldzo6c3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlldzo6cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlv
bnMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvV2ViVmlldy5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdCk6CisgICAgICAgIChXZWJWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6
cGFnZVJlZik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmV2YXNPYmplY3QpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3OjpwYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6dHlw
ZSk6CisKKyAgICAgICAgICAgIEFkZCBhIG5ldyBXZWJLaXQ6OldlYlZpZXcgY2xhc3MgZm9yIEVG
TC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwOgorICAgICAgICAo
RXdrVmlldzo6RXdrVmlldyk6CisgICAgICAgIChFd2tWaWV3Ojp+RXdrVmlldyk6CisgICAgICAg
IChFd2tWaWV3Ojp3a1BhZ2UpOgorICAgICAgICAoRXdrVmlldzo6ZGV2aWNlU2NhbGVGYWN0b3Ip
OgorICAgICAgICAoRXdrVmlldzo6dGl0bGUpOgorICAgICAgICAoRXdrVmlldzo6c2V0VGhlbWVQ
YXRoKToKKyAgICAgICAgKEV3a1ZpZXc6OmN1c3RvbVRleHRFbmNvZGluZ05hbWUpOgorICAgICAg
ICAoRXdrVmlldzo6c2V0Q3VzdG9tVGV4dEVuY29kaW5nTmFtZSk6CisgICAgICAgIChFd2tWaWV3
OjpjcmVhdGVHTFN1cmZhY2UpOgorICAgICAgICAoRXdrVmlldzo6aW5mb3JtVVJMQ2hhbmdlKToK
KyAgICAgICAgKEV3a1ZpZXc6OnRha2VTbmFwc2hvdCk6CisKKyAgICAgICAgICAgIEJhc2UgbWV0
aG9kcyBvbiBDIEFQSSBpbnN0ZWFkIG9mIGludGVybmFsIEFQSSBhcyBtdWNoCisgICAgICAgICAg
ICBhcyBjdXJyZW50bHkgcG9zc2libGUuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9F
d2tWaWV3Lmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViVmlldyk6CisgICAgICAg
IChFd2tWaWV3KToKKyAgICAgICAgKEV3a1ZpZXc6OndrVmlldyk6CisgICAgICAgIChFd2tWaWV3
OjpwYWdlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHA6CisgICAg
ICAgIChjcmVhdGVFd2tWaWV3KToKKyAgICAgICAgKGV3a192aWV3X2Jhc2VfYWRkKToKKyAgICAg
ICAgKGV3a192aWV3X3NtYXJ0X2FkZCk6CisKKyAgICAgICAgICAgIE1vZGlmeSB0byByZXR1cm4g
dGhlIEV3a1ZpZXcgY2xhc3MgZm9yIG5vdy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a192aWV3X3ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1dlYkluc3BlY3Rv
clByb3h5RWZsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtQ3JlYXRlSW5zcGVjdG9yUGFnZSk6CisKKyAgICAgICAgICAgIFVwZGF0ZWQgZHVlIHRvIGNo
YW5nZWQgQVBJLgorCiAyMDEzLTAxLTI5ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBJbXBsZW1lbnQgcmVzb3VyY2VzIEFQSSB1c2lu
ZyBpbmplY3RlZCBidW5kbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZs
LmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggMzEzZjcxOS4u
YTBkZTg1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysr
IGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTEwOSw2ICsxMDksNyBAQCBs
aXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvZWZsL1dlYlBvcHVwTWVu
dVByb3h5RWZsLmNwcAogICAgIFVJUHJvY2Vzcy9lZmwvV2ViUHJlZmVyZW5jZXNFZmwuY3BwCiAg
ICAgVUlQcm9jZXNzL2VmbC9XZWJQcm9jZXNzUHJveHlFZmwuY3BwCisgICAgVUlQcm9jZXNzL2Vm
bC9XZWJWaWV3LmNwcAogCiAgICAgVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9lZmwvV2ViSW5z
cGVjdG9yU2VydmVyRWZsLmNwcAogICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvc291cC9X
ZWJTb2NrZXRTZXJ2ZXJTb3VwLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9DL2VmbC9XS0FQSUNhc3RFZmwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9lZmwvV0tBUElDYXN0RWZsLmgKaW5kZXggYjAxM2EwYS4uMTg4OWZjNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS0FQSUNhc3RFZmwuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLQVBJQ2FzdEVmbC5oCkBAIC0y
NCwxNSArMjQsMTEgQEAKICNlcnJvciAiUGxlYXNlICNpbmNsdWRlIFwiV0tBUElDYXN0LmhcIiBp
bnN0ZWFkIG9mIHRoaXMgZmlsZSBkaXJlY3RseS4iCiAjZW5kaWYKIAotI2lmIFVTRShFTykKLXR5
cGVkZWYgc3RydWN0IF9FbyBFdmFzX09iamVjdDsKLSNlbHNlCi10eXBlZGVmIHN0cnVjdCBfRXZh
c19PYmplY3QgRXZhc19PYmplY3Q7Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVdL
X0FERF9BUElfTUFQUElORyhXS1ZpZXdSZWYsIEV2YXNfT2JqZWN0KQorY2xhc3MgV2ViVmlldzsK
KworV0tfQUREX0FQSV9NQVBQSU5HKFdLVmlld1JlZiwgV2ViVmlldykKIAogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5jcHAKaW5kZXggMzJiOWQ4Zi4u
ZTM3MmY5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9X
S1ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3
LmNwcApAQCAtMjksMjQgKzI5LDUwIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIFdLVmll
d1JlZiBXS1ZpZXdDcmVhdGUoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwg
V0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmKQogewotICAgIHJldHVybiB0b0FQSShld2tfdmll
d19iYXNlX2FkZChjYW52YXMsIGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZiwgRXdrVmlldzo6TGVn
YWN5QmVoYXZpb3IpKTsKKyAgICBXS1ZpZXdSZWYgdmlld1JlZiA9IGV3a192aWV3X2Jhc2VfYWRk
KGNhbnZhcywgY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlv
ciktPndrVmlldygpOworICAgIC8vIFJldGFpbiBhcyB0aGUgY29udHJhY3Qgd2l0aCAqQ3JlYXRl
IGZ1bmN0aW9ucyBpcyB0aGF0IHJldHVybmVkIG9iamVjdHMgbXVjaCB0byBiZSByZWxlYXNlZCBh
ZnRlciB1c2UuCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdLVmlld1JlZj4oV0tSZXRhaW4odmll
d1JlZikpOwogfQogCiBXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlV2l0aEZpeGVkTGF5b3V0KEV2YXMq
IGNhbnZhcywgV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91
cFJlZikKIHsKLSAgICByZXR1cm4gdG9BUEkoZXdrX3ZpZXdfYmFzZV9hZGQoY2FudmFzLCBjb250
ZXh0UmVmLCBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OkRlZmF1bHRCZWhhdmlvcikpOworICAgIFdL
Vmlld1JlZiB2aWV3UmVmID0gZXdrX3ZpZXdfYmFzZV9hZGQoY2FudmFzLCBjb250ZXh0UmVmLCBw
YWdlR3JvdXBSZWYsIEV3a1ZpZXc6OkRlZmF1bHRCZWhhdmlvciktPndrVmlldygpOworICAgIC8v
IFJldGFpbiBhcyB0aGUgY29udHJhY3Qgd2l0aCAqQ3JlYXRlIGZ1bmN0aW9ucyBpcyB0aGF0IHJl
dHVybmVkIG9iamVjdHMgbXVjaCB0byBiZSByZWxlYXNlZCBhZnRlciB1c2UuCisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFdLVmlld1JlZj4oV0tSZXRhaW4odmlld1JlZikpOworfQorCit2b2lkIFdL
Vmlld0luaXRpYWxpemUoV0tWaWV3UmVmIHZpZXdSZWYpCit7CisgICAgdG9JbXBsKHZpZXdSZWYp
LT5pbml0aWFsaXplKCk7CiB9CiAKIFdLUGFnZVJlZiBXS1ZpZXdHZXRQYWdlKFdLVmlld1JlZiB2
aWV3UmVmKQogewotICAgIEV3a1ZpZXcqIHZpZXcgPSBFd2tWaWV3Ojpmcm9tRXZhc09iamVjdCh0
b0ltcGwodmlld1JlZikpOworICAgIHJldHVybiB0b0ltcGwodmlld1JlZiktPnBhZ2VSZWYoKTsK
K30KIAotICAgIHJldHVybiB2aWV3LT53a1BhZ2UoKTsKK3ZvaWQgV0tWaWV3U2V0VGhlbWVQYXRo
KFdLVmlld1JlZiB2aWV3UmVmLCBXS1N0cmluZ1JlZiB0aGVtZSkKK3sKKyAgICB0b0ltcGwodmll
d1JlZiktPnNldFRoZW1lUGF0aCh0aGVtZSk7CiB9CiAKLVdLSW1hZ2VSZWYgV0tWaWV3Q3JlYXRl
U25hcHNob3QoV0tWaWV3UmVmIHZpZXdSZWYpCit2b2lkIFdLVmlld1N1c3BlbmRBY3RpdmVET01P
YmplY3RzQW5kQW5pbWF0aW9ucyhXS1ZpZXdSZWYgdmlld1JlZikKIHsKLSAgICBFd2tWaWV3KiB2
aWV3ID0gRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QodG9JbXBsKHZpZXdSZWYpKTsKKyAgICB0b0lt
cGwodmlld1JlZiktPnN1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworfQog
Ci0gICAgcmV0dXJuIFdLSW1hZ2VDcmVhdGVGcm9tQ2Fpcm9TdXJmYWNlKHZpZXctPnRha2VTbmFw
c2hvdCgpLmdldCgpLCAwIC8qIG9wdGlvbnMgKi8pOwordm9pZCBXS1ZpZXdSZXN1bWVBY3RpdmVE
T01PYmplY3RzQW5kQW5pbWF0aW9ucyhXS1ZpZXdSZWYgdmlld1JlZikKK3sKKyAgICB0b0ltcGwo
dmlld1JlZiktPnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7Cit9CisKK0V2
YXNfT2JqZWN0KiBXS1ZpZXdHZXRFdmFzT2JqZWN0KFdLVmlld1JlZiB2aWV3UmVmKQoreworICAg
IHJldHVybiB0b0ltcGwodmlld1JlZiktPmV2YXNPYmplY3QoKTsKK30KKworV0tJbWFnZVJlZiBX
S1ZpZXdDcmVhdGVTbmFwc2hvdChXS1ZpZXdSZWYgdmlld1JlZikKK3sKKyAgICBFd2tWaWV3KiBl
d2tWaWV3ID0gRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QodG9JbXBsKHZpZXdSZWYpLT5ldmFzT2Jq
ZWN0KCkpOworICAgIHJldHVybiBXS0ltYWdlQ3JlYXRlRnJvbUNhaXJvU3VyZmFjZShld2tWaWV3
LT50YWtlU25hcHNob3QoKS5nZXQoKSwgMCAvKiBvcHRpb25zICovKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5oCmluZGV4IGNjNzMwN2MuLmQ1YjQzMmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmgK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaApAQCAtMjQs
OCArMjQsMTAgQEAKIAogI2lmIFVTRShFTykKIHR5cGVkZWYgc3RydWN0IF9FbyBFdmFzOwordHlw
ZWRlZiBzdHJ1Y3QgX0VvIEV2YXNfT2JqZWN0OwogI2Vsc2UKIHR5cGVkZWYgc3RydWN0IF9FdmFz
IEV2YXM7Cit0eXBlZGVmIHN0cnVjdCBfRXZhc19PYmplY3QgRXZhc19PYmplY3Q7CiAjZW5kaWYK
IAogI2lmZGVmIF9fY3BsdXNwbHVzCkBAIC0zNiw5ICszOCwxOSBAQCBXS19FWFBPUlQgV0tWaWV3
UmVmIFdLVmlld0NyZWF0ZShFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1Bh
Z2VHcm91cAogCiBXS19FWFBPUlQgV0tWaWV3UmVmIFdLVmlld0NyZWF0ZVdpdGhGaXhlZExheW91
dChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdl
R3JvdXApOwogCi1XS19FWFBPUlQgV0tQYWdlUmVmIFdLVmlld0dldFBhZ2UoV0tWaWV3UmVmIHZp
ZXcpOworV0tfRVhQT1JUIHZvaWQgV0tWaWV3SW5pdGlhbGl6ZShXS1ZpZXdSZWYpOwogCi1XS19F
WFBPUlQgV0tJbWFnZVJlZiBXS1ZpZXdDcmVhdGVTbmFwc2hvdChXS1ZpZXdSZWYgdmlld1JlZik7
CitXS19FWFBPUlQgV0tQYWdlUmVmIFdLVmlld0dldFBhZ2UoV0tWaWV3UmVmKTsKKworV0tfRVhQ
T1JUIHZvaWQgV0tWaWV3U2V0VGhlbWVQYXRoKFdLVmlld1JlZiwgV0tTdHJpbmdSZWYpOworCitX
S19FWFBPUlQgdm9pZCBXS1ZpZXdTdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMo
V0tWaWV3UmVmKTsKK1dLX0VYUE9SVCB2b2lkIFdLVmlld1Jlc3VtZUFjdGl2ZURPTU9iamVjdHNB
bmRBbmltYXRpb25zKFdLVmlld1JlZik7CisKKy8vIEZJWE1FOiBUaGUgbG9uZyB0ZXJtIHBsYW4g
aXMgdG8gZ2V0IHJpZCBvZiB0aGlzLCBzbyBrZWVwIHVzYWdlIHRvIGEgYmFyZSBtaW5pbXVtLgor
V0tfRVhQT1JUIEV2YXNfT2JqZWN0KiBXS1ZpZXdHZXRFdmFzT2JqZWN0KFdLVmlld1JlZik7CisK
K1dLX0VYUE9SVCBXS0ltYWdlUmVmIFdLVmlld0NyZWF0ZVNuYXBzaG90KFdLVmlld1JlZik7CiAK
ICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9Fd2tWaWV3LmNwcAppbmRleCA3ZjIzOGY4Li5jZGEzNzAyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcApAQCAtMzgsNyArMzgsOSBAQAogI2luY2x1
ZGUgIldLRGljdGlvbmFyeS5oIgogI2luY2x1ZGUgIldLR2VvbWV0cnkuaCIKICNpbmNsdWRlICJX
S051bWJlci5oIgorI2luY2x1ZGUgIldLUGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAiV0tTdHJpbmcu
aCIKKyNpbmNsdWRlICJXS1ZpZXcuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiV2ViSW1hZ2UuaCIKICNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKQEAgLTExMCwxNCArMTEy
LDE0IEBAIGNvbnN0IEV2YXNfT2JqZWN0KiBFd2tWaWV3Ojp2aWV3RnJvbVBhZ2VWaWV3TWFwKGNv
bnN0IFdLUGFnZVJlZiBwYWdlKQogICAgIHJldHVybiBwYWdlVmlld01hcCgpLmdldChwYWdlKTsK
IH0KIAotRXdrVmlldzo6RXdrVmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0
cjxFd2tDb250ZXh0PiBjb250ZXh0LCBQYXNzUmVmUHRyPFdlYlBhZ2VHcm91cD4gcGFnZUdyb3Vw
LCBWaWV3QmVoYXZpb3IgYmVoYXZpb3IpCi0gICAgOiBtX2V2YXNPYmplY3QoZXZhc09iamVjdCkK
K0V3a1ZpZXc6OkV3a1ZpZXcoRXZhc19PYmplY3QqIHZpZXcsIFBhc3NSZWZQdHI8RXdrQ29udGV4
dD4gY29udGV4dCwgV2ViUGFnZUdyb3VwKiBwYWdlR3JvdXAsIFZpZXdCZWhhdmlvciBiZWhhdmlv
cikKKyAgICA6IG1fZXZhc09iamVjdCh2aWV3KQogICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgICwgbV9wZW5kaW5nU3VyZmFjZVJl
c2l6ZShmYWxzZSkKICNlbmRpZgogICAgICwgbV9wYWdlQ2xpZW50KGJlaGF2aW9yID09IERlZmF1
bHRCZWhhdmlvciA/IFBhZ2VDbGllbnREZWZhdWx0SW1wbDo6Y3JlYXRlKHRoaXMpIDogUGFnZUNs
aWVudExlZ2FjeUltcGw6OmNyZWF0ZSh0aGlzKSkKLSAgICAsIG1fcGFnZVByb3h5KG1fY29udGV4
dC0+d2ViQ29udGV4dCgpLT5jcmVhdGVXZWJQYWdlKG1fcGFnZUNsaWVudC5nZXQoKSwgcGFnZUdy
b3VwLmdldCgpKSkKKyAgICAsIG1fd2ViVmlldyhhZG9wdFJlZihuZXcgV2ViVmlldyhtX2NvbnRl
eHQtPndlYkNvbnRleHQoKS5nZXQoKSwgbV9wYWdlQ2xpZW50LmdldCgpLCBwYWdlR3JvdXAsIHZp
ZXcpKSkKICAgICAsIG1fcGFnZUxvYWRDbGllbnQoUGFnZUxvYWRDbGllbnRFZmw6OmNyZWF0ZSh0
aGlzKSkKICAgICAsIG1fcGFnZVBvbGljeUNsaWVudChQYWdlUG9saWN5Q2xpZW50RWZsOjpjcmVh
dGUodGhpcykpCiAgICAgLCBtX3BhZ2VVSUNsaWVudChQYWdlVUlDbGllbnRFZmw6OmNyZWF0ZSh0
aGlzKSkKQEAgLTEyNyw3ICsxMjksNyBAQCBFd2tWaWV3OjpFd2tWaWV3KEV2YXNfT2JqZWN0KiBl
dmFzT2JqZWN0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFBhc3NSZQogI2lmIEVO
QUJMRShWSUJSQVRJT04pCiAgICAgLCBtX3ZpYnJhdGlvbkNsaWVudChWaWJyYXRpb25DbGllbnRF
Zmw6OmNyZWF0ZSh0aGlzKSkKICNlbmRpZgotICAgICwgbV9iYWNrRm9yd2FyZExpc3QoRXdrQmFj
a0ZvcndhcmRMaXN0OjpjcmVhdGUodG9BUEkobV9wYWdlUHJveHktPmJhY2tGb3J3YXJkTGlzdCgp
KSkpCisgICAgLCBtX2JhY2tGb3J3YXJkTGlzdChFd2tCYWNrRm9yd2FyZExpc3Q6OmNyZWF0ZShX
S1BhZ2VHZXRCYWNrRm9yd2FyZExpc3Qod2tQYWdlKCkpKSkKICNpZiBVU0UoVElMRURfQkFDS0lO
R19TVE9SRSkKICAgICAsIG1fcGFnZVNjYWxlRmFjdG9yKDEpCiAjZW5kaWYKQEAgLTE0NCwzMyAr
MTQ2LDE4IEBAIEV3a1ZpZXc6OkV3a1ZpZXcoRXZhc19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NS
ZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgUGFzc1JlCiB7CiAgICAgQVNTRVJUKG1fZXZhc09i
amVjdCk7CiAgICAgQVNTRVJUKG1fY29udGV4dCk7Ci0gICAgQVNTRVJUKG1fcGFnZVByb3h5KTsK
IAotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBtX3BhZ2VQcm94eS0+cGFnZUdy
b3VwKCktPnByZWZlcmVuY2VzKCktPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKHRy
dWUpOwotICAgIG1fcGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0Rm9y
Y2VDb21wb3NpdGluZ01vZGUodHJ1ZSk7Ci0gICAgY2hhciogZGVidWdWaXN1YWxzRW52aXJvbm1l
bnQgPSBnZXRlbnYoIldFQktJVF9TSE9XX0NPTVBPU0lUSU5HX0RFQlVHX1ZJU1VBTFMiKTsKLSAg
ICBib29sIHNob3dEZWJ1Z1Zpc3VhbHMgPSBkZWJ1Z1Zpc3VhbHNFbnZpcm9ubWVudCAmJiAhc3Ry
Y21wKGRlYnVnVmlzdWFsc0Vudmlyb25tZW50LCAiMSIpOwotICAgIG1fcGFnZVByb3h5LT5wYWdl
R3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0Q29tcG9zaXRpbmdCb3JkZXJzVmlzaWJsZShzaG93
RGVidWdWaXN1YWxzKTsKLSAgICBtX3BhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2Vz
KCktPnNldENvbXBvc2l0aW5nUmVwYWludENvdW50ZXJzVmlzaWJsZShzaG93RGVidWdWaXN1YWxz
KTsKLSNpZiBFTkFCTEUoV0VCR0wpCi0gICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVm
ZXJlbmNlcygpLT5zZXRXZWJHTEVuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKLSAgICBpZiAoYmVoYXZp
b3IgPT0gRGVmYXVsdEJlaGF2aW9yKQotICAgICAgICBtX3BhZ2VQcm94eS0+c2V0VXNlRml4ZWRM
YXlvdXQodHJ1ZSk7Ci0jZW5kaWYKKyAgICBXS1ZpZXdJbml0aWFsaXplKHdrVmlldygpKTsKIAot
ICAgIG1fcGFnZVByb3h5LT5pbml0aWFsaXplV2ViUGFnZSgpOworICAgIFdLUGFnZVNldFVzZUZp
eGVkTGF5b3V0KHdrUGFnZSgpLCBiZWhhdmlvciA9PSBEZWZhdWx0QmVoYXZpb3IpOwogCi0jaWYg
RU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIG1fcGFnZVByb3h5LT5mdWxsU2NyZWVuTWFuYWdl
cigpLT5zZXRXZWJWaWV3KG1fZXZhc09iamVjdCk7Ci0gICAgbV9wYWdlUHJveHktPnBhZ2VHcm91
cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRGdWxsU2NyZWVuRW5hYmxlZCh0cnVlKTsKLSNlbmRpZgot
I2lmIEVOQUJMRShXRUJfQVVESU8pCi0gICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVm
ZXJlbmNlcygpLT5zZXRXZWJBdWRpb0VuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKKyAgICBXS1BhZ2VH
cm91cFJlZiB3a1BhZ2VHcm91cCA9IFdLUGFnZUdldFBhZ2VHcm91cCh3a1BhZ2UoKSk7CisgICAg
V0tQcmVmZXJlbmNlc1JlZiB3a1ByZWZlcmVuY2VzID0gV0tQYWdlR3JvdXBHZXRQcmVmZXJlbmNl
cyh3a1BhZ2VHcm91cCk7CiAKLSAgICBtX3BhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVu
Y2VzKCktPnNldE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCh0cnVlKTsKKyAgICBX
S1ByZWZlcmVuY2VzU2V0V2ViR0xFbmFibGVkKHdrUHJlZmVyZW5jZXMsIHRydWUpOworICAgIFdL
UHJlZmVyZW5jZXNTZXRGdWxsU2NyZWVuRW5hYmxlZCh3a1ByZWZlcmVuY2VzLCB0cnVlKTsKKyAg
ICBXS1ByZWZlcmVuY2VzU2V0V2ViQXVkaW9FbmFibGVkKHdrUHJlZmVyZW5jZXMsIHRydWUpOwor
ICAgIFdLUHJlZmVyZW5jZXNTZXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQod2tQ
cmVmZXJlbmNlcywgdHJ1ZSk7CiAKICAgICAvLyBFbmFibGUgbW91c2UgZXZlbnRzIGJ5IGRlZmF1
bHQKICAgICBzZXRNb3VzZUV2ZW50c0VuYWJsZWQodHJ1ZSk7CkBAIC0xODYsOCArMTczLDYgQEAg
RXdrVmlldzo6RXdrVmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tD
b250ZXh0PiBjb250ZXh0LCBQYXNzUmUKIAogRXdrVmlldzo6fkV3a1ZpZXcoKQogewotICAgIG1f
cGFnZVByb3h5LT5jbG9zZSgpOwotCiAgICAgLy8gVW5yZWdpc3RlciBpY29uIGNoYW5nZSBjYWxs
YmFjay4KICAgICBFd2tGYXZpY29uRGF0YWJhc2UqIGljb25EYXRhYmFzZSA9IG1fY29udGV4dC0+
ZmF2aWNvbkRhdGFiYXNlKCk7CiAgICAgQVNTRVJUKGljb25EYXRhYmFzZSk7CkBAIC0yMTUsOSAr
MjAwLDkgQEAgRXdrVmlldyogRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QoY29uc3QgRXZhc19PYmpl
Y3QqIHZpZXcpCiAgKiBAaW50ZXJuYWwKICAqIFJldHJpZXZlcyB0aGUgaW50ZXJuYWwgV0tQYWdl
IGZvciB0aGlzIHZpZXcuCiAgKi8KLVdLUGFnZVJlZiBFd2tWaWV3Ojp3a1BhZ2UoKQorV0tQYWdl
UmVmIEV3a1ZpZXc6OndrUGFnZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRvQVBJKG1fcGFnZVBy
b3h5LmdldCgpKTsKKyAgICByZXR1cm4gV0tWaWV3R2V0UGFnZSh3a1ZpZXcoKSk7CiB9CiAKIHZv
aWQgRXdrVmlldzo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYgY3Vyc29yKQpAQCAtMzAxLDcgKzI4
Niw3IEBAIHZvaWQgRXdrVmlldzo6c2V0RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGUpCiAK
IGZsb2F0IEV3a1ZpZXc6OmRldmljZVNjYWxlRmFjdG9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bV9wYWdlUHJveHktPmRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgcmV0dXJuIFdLUGFnZUdldEJh
Y2tpbmdTY2FsZUZhY3Rvcih3a1BhZ2UoKSk7CiB9CiAKIEFmZmluZVRyYW5zZm9ybSBFd2tWaWV3
Ojp0cmFuc2Zvcm1Gcm9tU2NlbmUoKSBjb25zdApAQCAtNTI3LDcgKzUxMiw3IEBAIGJvb2wgRXdr
Vmlldzo6aXNWaXNpYmxlKCkgY29uc3QKIAogY29uc3QgY2hhciogRXdrVmlldzo6dGl0bGUoKSBj
b25zdAogewotICAgIG1fdGl0bGUgPSBtX3BhZ2VQcm94eS0+cGFnZVRpdGxlKCkudXRmOCgpLmRh
dGEoKTsKKyAgICBtX3RpdGxlID0gV0tFaW5hU2hhcmVkU3RyaW5nKEFkb3B0V0ssIFdLUGFnZUNv
cHlUaXRsZSh3a1BhZ2UoKSkpOwogCiAgICAgcmV0dXJuIG1fdGl0bGU7CiB9CkBAIC01NTAsMjQg
KzUzNSwyNiBAQCB2b2lkIEV3a1ZpZXc6OnNldFRoZW1lUGF0aChjb25zdCBjaGFyKiB0aGVtZSkK
IHsKICAgICBpZiAobV90aGVtZSAhPSB0aGVtZSkgewogICAgICAgICBtX3RoZW1lID0gdGhlbWU7
Ci0gICAgICAgIG1fcGFnZVByb3h5LT5zZXRUaGVtZVBhdGgodGhlbWUpOworICAgICAgICBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4gd2tUaGVtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcodGhlbWUpKTsKKyAgICAgICAgV0tWaWV3U2V0VGhlbWVQYXRoKHdrVmlldygp
LCB3a1RoZW1lLmdldCgpKTsKICAgICB9CiB9CiAKIGNvbnN0IGNoYXIqIEV3a1ZpZXc6OmN1c3Rv
bVRleHRFbmNvZGluZ05hbWUoKSBjb25zdAogewotICAgIFN0cmluZyBjdXN0b21FbmNvZGluZyA9
IG1fcGFnZVByb3h5LT5jdXN0b21UZXh0RW5jb2RpbmdOYW1lKCk7Ci0gICAgaWYgKGN1c3RvbUVu
Y29kaW5nLmlzRW1wdHkoKSkKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gY3VzdG9tRW5j
b2RpbmcgPSBhZG9wdFdLKFdLUGFnZUNvcHlDdXN0b21UZXh0RW5jb2RpbmdOYW1lKHdrUGFnZSgp
KSk7CisgICAgaWYgKFdLU3RyaW5nSXNFbXB0eShjdXN0b21FbmNvZGluZy5nZXQoKSkpCiAgICAg
ICAgIHJldHVybiAwOwogCi0gICAgbV9jdXN0b21FbmNvZGluZyA9IGN1c3RvbUVuY29kaW5nLnV0
ZjgoKS5kYXRhKCk7CisgICAgbV9jdXN0b21FbmNvZGluZyA9IFdLRWluYVNoYXJlZFN0cmluZyhj
dXN0b21FbmNvZGluZy5nZXQoKSk7CiAKICAgICByZXR1cm4gbV9jdXN0b21FbmNvZGluZzsKIH0K
IAogdm9pZCBFd2tWaWV3OjpzZXRDdXN0b21UZXh0RW5jb2RpbmdOYW1lKGNvbnN0IFN0cmluZyYg
ZW5jb2RpbmcpCiB7Ci0gICAgbV9wYWdlUHJveHktPnNldEN1c3RvbVRleHRFbmNvZGluZ05hbWUo
ZW5jb2RpbmcpOworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a0VuY29kaW5nID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhlbmNvZGluZy51dGY4KCkuZGF0YSgp
KSk7CisgICAgV0tQYWdlU2V0Q3VzdG9tVGV4dEVuY29kaW5nTmFtZSh3a1BhZ2UoKSwgd2tFbmNv
ZGluZy5nZXQoKSk7CiB9CiAKIHZvaWQgRXdrVmlldzo6c2V0TW91c2VFdmVudHNFbmFibGVkKGJv
b2wgZW5hYmxlZCkKQEAgLTY0OSw5ICs2MzYsNiBAQCBib29sIEV3a1ZpZXc6OmNyZWF0ZUdMU3Vy
ZmFjZShjb25zdCBJbnRTaXplJiB2aWV3U2l6ZSkKICAgICAgICAgaWYgKCFtX2V2YXNHTCkgewog
ICAgICAgICAgICAgV0FSTigiRmFpbGVkIHRvIGNyZWF0ZSBFdmFzX0dMLCBmYWxsaW5nIGJhY2sg
dG8gc29mdHdhcmUgbW9kZS4iKTsKICAgICAgICAgICAgIG1faXNIYXJkd2FyZUFjY2VsZXJhdGVk
ID0gZmFsc2U7Ci0jaWYgRU5BQkxFKFdFQkdMKQotICAgICAgICAgICAgbV9wYWdlUHJveHktPnBh
Z2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRXZWJHTEVuYWJsZWQoZmFsc2UpOwotI2VuZGlm
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CkBAIC04OTQsMTUg
Kzg3OCwxMyBAQCB1bnNpZ25lZCBsb25nIGxvbmcgRXdrVmlldzo6aW5mb3JtRGF0YWJhc2VRdW90
YVJlYWNoZWQoY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbQogICovCiB2b2lkIEV3a1ZpZXc6Omlu
Zm9ybVVSTENoYW5nZSgpCiB7Ci0gICAgU3RyaW5nIGFjdGl2ZVVSTCA9IG1fcGFnZVByb3h5LT5h
Y3RpdmVVUkwoKTsKLSAgICBpZiAoYWN0aXZlVVJMLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
OworICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB3a0FjdGl2ZVVSTCA9IGFkb3B0V0soV0tQYWdl
Q29weUFjdGl2ZVVSTCh3a1BhZ2UoKSkpOworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3
a1VSTFN0cmluZyA9IGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHdrQWN0aXZlVVJMLmdldCgpKSk7
CiAKLSAgICBDU3RyaW5nIHJhd0FjdGl2ZVVSTCA9IGFjdGl2ZVVSTC51dGY4KCk7Ci0gICAgaWYg
KG1fdXJsID09IHJhd0FjdGl2ZVVSTC5kYXRhKCkpCisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRv
VVRGOENTdHJpbmcod2tVUkxTdHJpbmcuZ2V0KCksIG1fdXJsKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgbV91cmwgPSByYXdBY3RpdmVVUkwuZGF0YSgpOworICAgIG1fdXJsID0gV0tFaW5hU2hh
cmVkU3RyaW5nKHdrVVJMU3RyaW5nLmdldCgpKTsKICAgICBzbWFydENhbGxiYWNrPFVSTENoYW5n
ZWQ+KCkuY2FsbChtX3VybCk7CiAKICAgICAvLyBVcGRhdGUgdGhlIHZpZXcncyBmYXZpY29uLgpA
QCAtMTAzNCw3ICsxMDE2LDcgQEAgdm9pZCBFd2tWaWV3OjpvbkZhdmljb25DaGFuZ2VkKGNvbnN0
IGNoYXIqIHBhZ2VVUkwsIHZvaWQqIGV2ZW50SW5mbykKIFBhc3NSZWZQdHI8Y2Fpcm9fc3VyZmFj
ZV90PiBFd2tWaWV3Ojp0YWtlU25hcHNob3QoKQogewogICAgIC8vIFN1c3BlbmQgYWxsIGFuaW1h
dGlvbnMgYmVmb3JlIHRha2luZyB0aGUgc25hcHNob3QuCi0gICAgbV9wYWdlUHJveHktPnN1c3Bl
bmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworICAgIFdLVmlld1N1c3BlbmRBY3Rp
dmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyh3a1ZpZXcoKSk7CiAKICAgICAvLyBXYWl0IGZvciB0
aGUgcGVuZGluZyByZXBhaW50IGV2ZW50cyB0byBiZSBwcm9jZXNzZWQuCiAgICAgd2hpbGUgKG1f
ZGlzcGxheVRpbWVyLmlzQWN0aXZlKCkpCkBAIC0xMDQ2LDcgKzEwMjgsNyBAQCBQYXNzUmVmUHRy
PGNhaXJvX3N1cmZhY2VfdD4gRXdrVmlldzo6dGFrZVNuYXBzaG90KCkKICNlbmRpZgogICAgICAg
ICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzbmFwc2hvdCA9IGNyZWF0ZVN1cmZhY2VGb3JJbWFn
ZShzZC0+aW1hZ2UpOwogICAgICAgICAvLyBSZXN1bWUgYWxsIGFuaW1hdGlvbnMuCi0gICAgICAg
IG1fcGFnZVByb3h5LT5yZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworICAg
ICAgICBXS1ZpZXdSZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyh3a1ZpZXcoKSk7
CiAKICAgICAgICAgcmV0dXJuIHNuYXBzaG90LnJlbGVhc2UoKTsKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCkBAIC0xMDU0LDcgKzEwMzYsNyBAQCBQYXNzUmVmUHRyPGNhaXJvX3N1
cmZhY2VfdD4gRXdrVmlldzo6dGFrZVNuYXBzaG90KCkKIAogICAgIFJlZlB0cjxjYWlyb19zdXJm
YWNlX3Q+IHNuYXBzaG90ID0gZ2V0SW1hZ2VTdXJmYWNlRnJvbUZyYW1lQnVmZmVyKDAsIDAsIHNk
LT52aWV3LncsIHNkLT52aWV3LmgpOwogICAgIC8vIFJlc3VtZSBhbGwgYW5pbWF0aW9ucy4KLSAg
ICBtX3BhZ2VQcm94eS0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKKyAg
ICBXS1ZpZXdSZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyh3a1ZpZXcoKSk7CiAK
ICAgICByZXR1cm4gc25hcHNob3QucmVsZWFzZSgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKaW5kZXggYTIxM2Y5Ny4uMTUzYzZjYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaApAQCAtMjcsNiArMjcsNyBA
QAogI2luY2x1ZGUgIldLRWluYVNoYXJlZFN0cmluZy5oIgogI2luY2x1ZGUgIldLR2VvbWV0cnku
aCIKICNpbmNsdWRlICJXS1JldGFpblB0ci5oIgorI2luY2x1ZGUgIldlYlZpZXcuaCIKICNpbmNs
dWRlICJld2tfdXJsX3JlcXVlc3RfcHJpdmF0ZS5oIgogI2luY2x1ZGUgPEV2YXMuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQuaD4KQEAgLTQ5LDYgKzUwLDEwIEBACiAjaW5jbHVkZSAi
RXZhc0dMU3VyZmFjZS5oIgogI2VuZGlmCiAKKyNpbmNsdWRlICJXZWJDb250ZXh0LmgiCisjaW5j
bHVkZSAiV2ViUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIKKwogbmFt
ZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBDb250ZXh0TWVudUNsaWVudEVmbDsKIGNsYXNzIEZpbmRD
bGllbnRFZmw7CkBAIC05OCwxOSArMTAzLDIwIEBAIHR5cGVkZWYgc3RydWN0IEV3a19WaWV3X1Nt
YXJ0X0RhdGEgRXdrX1ZpZXdfU21hcnRfRGF0YTsKIAogY2xhc3MgRXdrVmlldyB7CiBwdWJsaWM6
Ci0KICAgICBlbnVtIFZpZXdCZWhhdmlvciB7CiAgICAgICAgIExlZ2FjeUJlaGF2aW9yLAogICAg
ICAgICBEZWZhdWx0QmVoYXZpb3IKICAgICB9OwotICAgIEV3a1ZpZXcoRXZhc19PYmplY3QqIHZp
ZXcsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgUGFzc1JlZlB0cjxXZWJLaXQ6Oldl
YlBhZ2VHcm91cD4gcGFnZUdyb3VwLCBWaWV3QmVoYXZpb3IpOworICAgIEV3a1ZpZXcoRXZhc19P
YmplY3QqIHZpZXcsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgV2ViS2l0OjpXZWJQ
YWdlR3JvdXAqIHBhZ2VHcm91cCwgVmlld0JlaGF2aW9yKTsKICAgICB+RXdrVmlldygpOwogCiAg
ICAgc3RhdGljIEV3a1ZpZXcqIGZyb21FdmFzT2JqZWN0KGNvbnN0IEV2YXNfT2JqZWN0KiB2aWV3
KTsKICAgICBFdmFzX09iamVjdCogdmlldygpIHsgcmV0dXJuIG1fZXZhc09iamVjdDsgfQogCi0g
ICAgV0tQYWdlUmVmIHdrUGFnZSgpOwotICAgIFdlYktpdDo6V2ViUGFnZVByb3h5KiBwYWdlKCkg
eyByZXR1cm4gbV9wYWdlUHJveHkuZ2V0KCk7IH0KKyAgICBXS1ZpZXdSZWYgd2tWaWV3KCkgY29u
c3QgeyByZXR1cm4gdG9BUEkobV93ZWJWaWV3LmdldCgpKTsgfQorICAgIFdLUGFnZVJlZiB3a1Bh
Z2UoKSBjb25zdDsKKworICAgIFdlYktpdDo6V2ViUGFnZVByb3h5KiBwYWdlKCkgeyByZXR1cm4g
bV93ZWJWaWV3LT5wYWdlKCk7IH0KICAgICBFd2tDb250ZXh0KiBld2tDb250ZXh0KCkgeyByZXR1
cm4gbV9jb250ZXh0LmdldCgpOyB9CiAgICAgRXdrU2V0dGluZ3MqIHNldHRpbmdzKCkgeyByZXR1
cm4gbV9zZXR0aW5ncy5nZXQoKTsgfQogICAgIEV3a0JhY2tGb3J3YXJkTGlzdCogYmFja0Zvcndh
cmRMaXN0KCkgeyByZXR1cm4gbV9iYWNrRm9yd2FyZExpc3QuZ2V0KCk7IH0KQEAgLTI0NSw3ICsy
NTEsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9wZW5kaW5nU3VyZmFjZVJlc2l6ZTsKICNlbmRp
ZgogICAgIE93blB0cjxXZWJLaXQ6OlBhZ2VDbGllbnRCYXNlPiBtX3BhZ2VDbGllbnQ7Ci0gICAg
UmVmUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5PiBtX3BhZ2VQcm94eTsKKyAgICBSZWZQdHI8V2Vi
S2l0OjpXZWJWaWV3PiBtX3dlYlZpZXc7CiAgICAgT3duUHRyPFdlYktpdDo6UGFnZUxvYWRDbGll
bnRFZmw+IG1fcGFnZUxvYWRDbGllbnQ7CiAgICAgT3duUHRyPFdlYktpdDo6UGFnZVBvbGljeUNs
aWVudEVmbD4gbV9wYWdlUG9saWN5Q2xpZW50OwogICAgIE93blB0cjxXZWJLaXQ6OlBhZ2VVSUNs
aWVudEVmbD4gbV9wYWdlVUlDbGllbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdmlldy5jcHAKaW5kZXggNzJhNmFmYS4uY2FlMDQyNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcApAQCAtNTA1LDcgKzUwNSw3IEBA
IHN0YXRpYyBpbmxpbmUgRXZhc19TbWFydCogY3JlYXRlRXdrVmlld1NtYXJ0Q2xhc3Modm9pZCkK
ICAgICByZXR1cm4gc21hcnQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRXZhc19PYmplY3QqIGNyZWF0
ZUV3a1ZpZXcoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgUGFzc1JlZlB0cjxFd2tD
b250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYgPSAwLCBFd2tWaWV3
OjpWaWV3QmVoYXZpb3IgYmVoYXZpb3IgPSBFd2tWaWV3OjpEZWZhdWx0QmVoYXZpb3IpCitzdGF0
aWMgaW5saW5lIEV3a1ZpZXcqIGNyZWF0ZUV3a1ZpZXcoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0
KiBzbWFydCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBw
YWdlR3JvdXBSZWYgPSAwLCBFd2tWaWV3OjpWaWV3QmVoYXZpb3IgYmVoYXZpb3IgPSBFd2tWaWV3
OjpEZWZhdWx0QmVoYXZpb3IpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KGNhbnZhcywgMCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0LCAw
KTsKQEAgLTUyNSwyMSArNTI1LDIyIEBAIHN0YXRpYyBpbmxpbmUgRXZhc19PYmplY3QqIGNyZWF0
ZUV3a1ZpZXcoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgUGFzc1JlCiAgICAgLy8g
RGVmYXVsdCBXZWJQYWdlR3JvdXAgaXMgY3JlYXRlZCBpbiBXZWJDb250ZXh0IGNvbnN0cnVjdG9y
IGlmIHRoZSBwYWdlR3JvdXBSZWYgaXMgMCwKICAgICAvLyBzbyB3ZSBkbyBub3QgbmVlZCB0byBj
cmVhdGUgaXQgaGVyZS4KICAgICBzbWFydERhdGEtPnByaXYgPSBuZXcgRXdrVmlldyhld2tWaWV3
LCBjb250ZXh0LCB0b0ltcGwocGFnZUdyb3VwUmVmKSwgYmVoYXZpb3IpOwotICAgIHJldHVybiBl
d2tWaWV3OworCisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+cHJpdjsKIH0KIAogLyoqCiAgKiBAaW50
ZXJuYWwKICAqIENvbnN0cnVjdHMgYSBld2tfdmlldyBFdmFzX09iamVjdCB3aXRoIFdLVHlwZSBw
YXJhbWV0ZXJzLgogICovCi1FdmFzX09iamVjdCogZXdrX3ZpZXdfYmFzZV9hZGQoRXZhcyogY2Fu
dmFzLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVm
LCBFd2tWaWV3OjpWaWV3QmVoYXZpb3IgYmVoYXZpb3IpCitFd2tWaWV3KiBld2tfdmlld19iYXNl
X2FkZChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJl
ZiBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OlZpZXdCZWhhdmlvciBiZWhhdmlvcikKIHsKICAgICBy
ZXR1cm4gY3JlYXRlRXdrVmlldyhjYW52YXMsIGNyZWF0ZUV3a1ZpZXdTbWFydENsYXNzKCksIGNv
bnRleHRSZWYgPyBFd2tDb250ZXh0OjpjcmVhdGUodG9JbXBsKGNvbnRleHRSZWYpKSA6IEV3a0Nv
bnRleHQ6OmRlZmF1bHRDb250ZXh0KCksIHBhZ2VHcm91cFJlZiwgYmVoYXZpb3IpOwogfQogCiBF
dmFzX09iamVjdCogZXdrX3ZpZXdfc21hcnRfYWRkKEV2YXMqIGNhbnZhcywgRXZhc19TbWFydCog
c21hcnQsIEV3a19Db250ZXh0KiBjb250ZXh0KQogewotICAgIHJldHVybiBjcmVhdGVFd2tWaWV3
KGNhbnZhcywgc21hcnQsIGV3a19vYmplY3RfY2FzdDxFd2tDb250ZXh0Kj4oY29udGV4dCkpOwor
ICAgIHJldHVybiBjcmVhdGVFd2tWaWV3KGNhbnZhcywgc21hcnQsIGV3a19vYmplY3RfY2FzdDxF
d2tDb250ZXh0Kj4oY29udGV4dCkpLT52aWV3KCk7CiB9CiAKIEV2YXNfT2JqZWN0KiBld2tfdmll
d19hZGRfd2l0aF9jb250ZXh0KEV2YXMqIGNhbnZhcywgRXdrX0NvbnRleHQqIGNvbnRleHQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19wcml2
YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19wcml2YXRl
LmgKaW5kZXggODNiNGM5Ny4uYzQ5MTJmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaApAQCAtMjUsNiArMjUsNiBAQAogI2lu
Y2x1ZGUgPEV2YXMuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5oPgogCi1FdmFzX09iamVj
dCogZXdrX3ZpZXdfYmFzZV9hZGQoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYsIFdLUGFnZUdy
b3VwUmVmLCBFd2tWaWV3OjpWaWV3QmVoYXZpb3IpOworRXdrVmlldyogZXdrX3ZpZXdfYmFzZV9h
ZGQoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpW
aWV3QmVoYXZpb3IpOwogCiAjZW5kaWYgLy8gZXdrX3ZpZXdfcHJpdmF0ZV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkluc3BlY3RvclByb3h5RWZsLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwuY3BwCmlu
ZGV4IDQ2MmIyNmQuLjMxNzQ0OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwuY3BwCkBAIC05OCwxNCArOTgsMTUgQEAgV2Vi
UGFnZVByb3h5KiBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1DcmVhdGVJbnNwZWN0b3JQYWdl
KCkKICAgICBpZiAoIW1faW5zcGVjdG9yV2luZG93KQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IG1faW5zcGVjdG9yVmlldyA9IGV3a192aWV3X2Jhc2VfYWRkKGVjb3JlX2V2YXNfZ2V0KG1faW5z
cGVjdG9yV2luZG93KSwgdG9BUEkocGFnZSgpLT5wcm9jZXNzKCktPmNvbnRleHQoKSksIHRvQVBJ
KGluc3BlY3RvclBhZ2VHcm91cCgpKSwgRXdrVmlldzo6TGVnYWN5QmVoYXZpb3IpOwotICAgIEV3
a1ZpZXcqIGluc3BlY3RvclZpZXdJbXBsID0gRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QobV9pbnNw
ZWN0b3JWaWV3KTsKLSAgICBpbnNwZWN0b3JWaWV3SW1wbC0+c2V0VGhlbWVQYXRoKFRFU1RfVEhF
TUVfRElSICIvZGVmYXVsdC5lZGoiKTsKKyAgICAvLyBGSVhNRTogUmVmYWN0b3IgdG8gdXNlIFdL
Vmlld1JlZi4KKyAgICBtX2luc3BlY3RvclZpZXcgPSBld2tfdmlld19iYXNlX2FkZChlY29yZV9l
dmFzX2dldChtX2luc3BlY3RvcldpbmRvdyksIHRvQVBJKHBhZ2UoKS0+cHJvY2VzcygpLT5jb250
ZXh0KCkpLCB0b0FQSShpbnNwZWN0b3JQYWdlR3JvdXAoKSksIEV3a1ZpZXc6OkxlZ2FjeUJlaGF2
aW9yKS0+dmlldygpOworICAgIEV3a1ZpZXcqIGluc3BlY3RvclZpZXcgPSBFd2tWaWV3Ojpmcm9t
RXZhc09iamVjdChtX2luc3BlY3RvclZpZXcpOworICAgIGluc3BlY3RvclZpZXctPnNldFRoZW1l
UGF0aChURVNUX1RIRU1FX0RJUiAiL2RlZmF1bHQuZWRqIik7CiAKLSAgICBFd2tfU2V0dGluZ3Mq
IHNldHRpbmdzID0gaW5zcGVjdG9yVmlld0ltcGwtPnNldHRpbmdzKCk7CisgICAgRXdrX1NldHRp
bmdzKiBzZXR0aW5ncyA9IGluc3BlY3RvclZpZXctPnNldHRpbmdzKCk7CiAgICAgZXdrX3NldHRp
bmdzX2ZpbGVfYWNjZXNzX2Zyb21fZmlsZV91cmxzX2FsbG93ZWRfc2V0KHNldHRpbmdzLCB0cnVl
KTsKIAotICAgIHJldHVybiBpbnNwZWN0b3JWaWV3SW1wbC0+cGFnZSgpOworICAgIHJldHVybiBp
bnNwZWN0b3JWaWV3LT5wYWdlKCk7CiB9CiAKIHZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtT3BlbigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZp
ZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWIxZmY2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmNwcApAQCAtMCwwICsxLDc3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlZp
ZXcuaCIKKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyNpbmNsdWRlICJXZWJGdWxsU2Ny
ZWVuTWFuYWdlclByb3h5LmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYlZp
ZXc6OldlYlZpZXcoV2ViQ29udGV4dCogY29udGV4dCwgUGFnZUNsaWVudCogcGFnZUNsaWVudCwg
V2ViUGFnZUdyb3VwKiBwYWdlR3JvdXAsIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0KQorICAgIDog
bV93ZWJQYWdlUHJveHkoY29udGV4dC0+Y3JlYXRlV2ViUGFnZShwYWdlQ2xpZW50LCBwYWdlR3Jv
dXApKQorICAgICwgbV9ldmFzT2JqZWN0KGV2YXNPYmplY3QpCit7CisgICAgbV93ZWJQYWdlUHJv
eHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5n
RW5hYmxlZCh0cnVlKTsKKyAgICBtX3dlYlBhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVu
Y2VzKCktPnNldEZvcmNlQ29tcG9zaXRpbmdNb2RlKHRydWUpOworCisgICAgY2hhciogZGVidWdW
aXN1YWxzRW52aXJvbm1lbnQgPSBnZXRlbnYoIldFQktJVF9TSE9XX0NPTVBPU0lUSU5HX0RFQlVH
X1ZJU1VBTFMiKTsKKyAgICBib29sIHNob3dEZWJ1Z1Zpc3VhbHMgPSBkZWJ1Z1Zpc3VhbHNFbnZp
cm9ubWVudCAmJiAhc3RyY21wKGRlYnVnVmlzdWFsc0Vudmlyb25tZW50LCAiMSIpOworICAgIG1f
d2ViUGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0Q29tcG9zaXRpbmdC
b3JkZXJzVmlzaWJsZShzaG93RGVidWdWaXN1YWxzKTsKKyAgICBtX3dlYlBhZ2VQcm94eS0+cGFn
ZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldENvbXBvc2l0aW5nUmVwYWludENvdW50ZXJzVmlz
aWJsZShzaG93RGVidWdWaXN1YWxzKTsKKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAg
ICBtX3dlYlBhZ2VQcm94eS0+ZnVsbFNjcmVlbk1hbmFnZXIoKS0+c2V0V2ViVmlldyhtX2V2YXNP
YmplY3QpOworI2VuZGlmCit9CisKK1dlYlZpZXc6On5XZWJWaWV3KCkKK3sKKyAgICBtX3dlYlBh
Z2VQcm94eS0+Y2xvc2UoKTsKK30KKwordm9pZCBXZWJWaWV3Ojppbml0aWFsaXplKCkKK3sKKyAg
ICBtX3dlYlBhZ2VQcm94eS0+aW5pdGlhbGl6ZVdlYlBhZ2UoKTsKK30KKwordm9pZCBXZWJWaWV3
OjpzZXRUaGVtZVBhdGgoV0tTdHJpbmdSZWYgdGhlbWUpCit7CisgICAgbV93ZWJQYWdlUHJveHkt
PnNldFRoZW1lUGF0aCh0b1dURlN0cmluZyh0aGVtZSkudXRmOCgpLmRhdGEoKSk7Cit9CisKK3Zv
aWQgV2ViVmlldzo6c3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCkKK3sKKyAg
ICBtX3dlYlBhZ2VQcm94eS0+c3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7
Cit9CisKK3ZvaWQgV2ViVmlldzo6cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMo
KQoreworICAgIG1fd2ViUGFnZVByb3h5LT5yZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0
aW9ucygpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2VmbC9XZWJWaWV3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFlNzY2
ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmll
dy5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29y
cG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlZpZXdf
aAorI2RlZmluZSBXZWJWaWV3X2gKKworI2luY2x1ZGUgIkFQSU9iamVjdC5oIgorI2luY2x1ZGUg
IlBhZ2VDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViUGFn
ZUdyb3VwLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViUHJlZmVy
ZW5jZXMuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlZpZXcgOiBwdWJsaWMg
QVBJT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgVHlwZSBBUElUeXBlID0gVHlw
ZVZpZXc7CisKKyAgICBXZWJWaWV3KFdlYkNvbnRleHQqLCBQYWdlQ2xpZW50KiwgV2ViUGFnZUdy
b3VwKiwgRXZhc19PYmplY3QqKTsKKyAgICB2aXJ0dWFsIH5XZWJWaWV3KCk7CisKKyAgICB2b2lk
IGluaXRpYWxpemUoKTsKKworICAgIFdLUGFnZVJlZiBwYWdlUmVmKCkgY29uc3QgeyByZXR1cm4g
dG9BUEkobV93ZWJQYWdlUHJveHkuZ2V0KCkpOyB9CisKKyAgICB2b2lkIHNldFRoZW1lUGF0aChX
S1N0cmluZ1JlZik7CisgICAgdm9pZCBzdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlv
bnMoKTsKKyAgICB2b2lkIHJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7CisK
KyAgICAvLyBGSVhNRTogUmVtb3ZlIHdoZW4gcG9zc2libGUuCisgICAgRXZhc19PYmplY3QqIGV2
YXNPYmplY3QoKSB7IHJldHVybiBtX2V2YXNPYmplY3Q7IH0KKyAgICBXZWJQYWdlUHJveHkqIHBh
Z2UoKSB7IHJldHVybiBtX3dlYlBhZ2VQcm94eS5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIHZp
cnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gQVBJVHlwZTsgfQorCisgICAgUmVmUHRy
PFdlYlBhZ2VQcm94eT4gbV93ZWJQYWdlUHJveHk7CisgICAgRXZhc19PYmplY3QqIG1fZXZhc09i
amVjdDsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9U
b29scy9DaGFuZ2VMb2cKaW5kZXggNWE1NTEzMS4uZDkyMTE3ZCAxMDA2NDQKLS0tIGEvVG9vbHMv
Q2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDEzLTAx
LTI5ICBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtlbm5ldGhAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBbRUZMXVtXSzJdIEludHJvZHVjZSBhIFdlYlZpZXcgY2xhc3MgYXMgY291bnRlcnBh
cnQgZm9yIFdLVmlld1JlZgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTA3OTMxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQ2hhbmdlIHBsYXRmb3JtVmlldyB0byBiZSBhIFdLVmlldyBhbmQgdXNlIFdLVmll
d0dldEV2YXNPYmplY3QKKyAgICAgICAgZm9yIHRoZSBwbGFjZXMgd2hlcmUgYW4gRXZhc19PYmpl
Y3QgaXMgbmVlZGVkLgorCisgICAgICAgIEluc3RlYWQgb2YgZXh0cmFjdGluZyB0aGUgRWNvcmVf
RXZhcyogZnJvbSB0aGUgbV92aWV3IHdlIHVzZQorICAgICAgICB0aGUgbV93aW5kb3cgaW5zdGVh
ZCwgd2hpY2ggYWN0dWFsbHkgaG9sZHMgdGhlIGl0LgorCisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9QbGF0Zm9ybVdlYlZpZXcuaDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2VmbC9QbGF0Zm9y
bVdlYlZpZXcuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGxhdGZvcm1XZWJWaWV3OjpQ
bGF0Zm9ybVdlYlZpZXcpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGxhdGZvcm1XZWJWaWV3
Ojp+UGxhdGZvcm1XZWJWaWV3KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBsYXRmb3JtV2Vi
Vmlldzo6cmVzaXplVG8pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGxhdGZvcm1XZWJWaWV3
OjpwYWdlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBsYXRmb3JtV2ViVmlldzo6c2ltdWxh
dGVTcGFjZWJhcktleVByZXNzKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBsYXRmb3JtV2Vi
Vmlldzo6c2ltdWxhdGVNb3VzZU1vdmUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGxhdGZv
cm1XZWJWaWV3OjpzaW11bGF0ZVJpZ2h0Q2xpY2spOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5u
ZXIvUGxhdGZvcm1XZWJWaWV3Lmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9lZmwvRXZl
bnRTZW5kZXJQcm94eUVmbC5jcHA6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OnNl
bmRUb3VjaEV2ZW50KToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6c2V0VG91Y2hN
b2RpZmllcik6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3
RWZsLmNwcDoKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcp
OgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6On5QbGF0Zm9ybVdlYlZpZXcpOgorICAg
ICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6OnJlc2l6ZVRvKToKKyAgICAgICAgKFdUUjo6UGxh
dGZvcm1XZWJWaWV3OjpwYWdlKToKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3Ojpmb2N1
cyk6CisgICAgICAgIChXVFI6OlBsYXRmb3JtV2ViVmlldzo6d2luZG93RnJhbWUpOgorICAgICAg
ICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6OnNldFdpbmRvd0ZyYW1lKToKKyAgICAgICAgKFdUUjo6
UGxhdGZvcm1XZWJWaWV3Ojp3aW5kb3dTbmFwc2hvdEltYWdlKToKKwogMjAxMy0wMS0yOSAgQ2Fy
bG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10g
SW1wbGVtZW50IHJlc291cmNlcyBBUEkgdXNpbmcgaW5qZWN0ZWQgYnVuZGxlCmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2ViVmlldy5oIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9QbGF0Zm9ybVdlYlZpZXcuaAppbmRleCA1YWQxZWVkLi5kY2FmNDQ4IDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2ViVmlldy5oCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvUGxhdGZvcm1XZWJWaWV3LmgKQEAgLTQ3LDEzICs0Nyw4IEBAIHR5cGVkZWYgSFdO
RCBQbGF0Zm9ybVdpbmRvdzsKIHR5cGVkZWYgV0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlw
ZWRlZiBHdGtXaWRnZXQgKlBsYXRmb3JtV2luZG93OwogI2VsaWYgUExBVEZPUk0oRUZMKQotI2lm
IFVTRShFTykKLXR5cGVkZWYgc3RydWN0IF9FbyBFdmFzX09iamVjdDsKLSNlbHNlCi10eXBlZGVm
IHN0cnVjdCBfRXZhc19PYmplY3QgRXZhc19PYmplY3Q7Ci0jZW5kaWYKIHR5cGVkZWYgc3RydWN0
IF9FY29yZV9FdmFzIEVjb3JlX0V2YXM7Ci10eXBlZGVmIEV2YXNfT2JqZWN0KiBQbGF0Zm9ybVdL
VmlldzsKK3R5cGVkZWYgV0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlwZWRlZiBFY29yZV9F
dmFzKiBQbGF0Zm9ybVdpbmRvdzsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL2VmbC9QbGF0Zm9ybVdlYlZpZXcuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwv
UGxhdGZvcm1XZWJWaWV3LmNwcAppbmRleCBkNTQ0OWViLi4zYzk5MGFkIDEwMDY0NAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL2VmbC9QbGF0Zm9ybVdlYlZpZXcuY3BwCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvZWZsL1BsYXRmb3JtV2ViVmlldy5jcHAKQEAgLTY1LDMzICs2NSwzOCBAQCBQ
bGF0Zm9ybVdlYlZpZXc6OlBsYXRmb3JtV2ViVmlldyhXS0NvbnRleHRSZWYgY29udGV4dFJlZiwg
V0tQYWdlR3JvdXBSZWYgcGFnZUdybwogewogICAgIG1fd2luZG93ID0gaW5pdEVjb3JlRXZhcygp
OwogICAgIEV2YXMqIGV2YXMgPSBlY29yZV9ldmFzX2dldChtX3dpbmRvdyk7Ci0gICAgbV92aWV3
ID0gdG9JbXBsKFdLVmlld0NyZWF0ZShldmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYpKTsK
LSAgICBld2tfdmlld190aGVtZV9zZXQobV92aWV3LCBUSEVNRV9ESVIiL2RlZmF1bHQuZWRqIik7
Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKG1fdmlldywgIndlYnByb2Nlc3Ms
Y3Jhc2hlZCIsIG9uV2ViUHJvY2Vzc0NyYXNoZWQsIDApOworICAgIG1fdmlldyA9IFdLVmlld0Ny
ZWF0ZShldmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYpOworICAgIGV3a192aWV3X3RoZW1l
X3NldChXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIFRIRU1FX0RJUiIvZGVmYXVsdC5lZGoi
KTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQoV0tWaWV3R2V0RXZhc09iamVj
dChtX3ZpZXcpLCAid2VicHJvY2VzcyxjcmFzaGVkIiwgb25XZWJQcm9jZXNzQ3Jhc2hlZCwgMCk7
CiAgICAgcmVzaXplVG8oNjAwLCA4MDApOwogfQogCiBQbGF0Zm9ybVdlYlZpZXc6On5QbGF0Zm9y
bVdlYlZpZXcoKQogewotICAgIGV2YXNfb2JqZWN0X2RlbChtX3ZpZXcpOworICAgIC8vIEZJWE1F
OiBUaGUgQyBXS1ZpZXcgQVBJIGN1cnJlbnRseSBjcmVhdGVzIHRoZSBFdmFzX09iamVjdCwgc28g
d2UgaGF2ZSB0byBkZXN0cnVjdCBpdAorICAgIC8vIChhbmQgaXRzIGRlcGVuZGVuY2llcyBFd2tW
aWV3IGFuZCBXZWJLaXQ6OldlYlZpZXcpIHRoaXMgd2F5LCB1bnRpbCB0aGlzIGdldCBmaXhlZC4K
KyAgICBldmFzX29iamVjdF9kZWwoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpKTsKKworICAg
IFdLUmVsZWFzZShtX3ZpZXcpOworCiAgICAgZWNvcmVfZXZhc19mcmVlKG1fd2luZG93KTsKICAg
ICBlY29yZV9ldmFzX3NodXRkb3duKCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpyZXNp
emVUbyh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQogewotICAgIGV2YXNfb2JqZWN0
X3Jlc2l6ZShtX3ZpZXcsIHdpZHRoLCBoZWlnaHQpOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShX
S1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIHdpZHRoLCBoZWlnaHQpOwogfQogCiBXS1BhZ2VS
ZWYgUGxhdGZvcm1XZWJWaWV3OjpwYWdlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV0tWaWV3R2V0
UGFnZSh0b0FQSShtX3ZpZXcpKTsKKyAgICByZXR1cm4gV0tWaWV3R2V0UGFnZShtX3ZpZXcpOwog
fQogCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6c2ltdWxhdGVTcGFjZWJhcktleVByZXNzKCkKIHsK
ICAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwotICAgIGV2YXNfb2Jq
ZWN0X2ZvY3VzX3NldChtX3ZpZXcsIHRydWUpOworICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldChX
S1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIHRydWUpOwogICAgIGV2YXNfZXZlbnRfZmVlZF9r
ZXlfZG93bihldmFzLCAic3BhY2UiLCAic3BhY2UiLCAiICIsIDAsIDAsIDApOwogICAgIGV2YXNf
ZXZlbnRfZmVlZF9rZXlfdXAoZXZhcywgInNwYWNlIiwgInNwYWNlIiwgIiAiLCAwLCAxLCAwKTsK
IH0KQEAgLTk5LDE0ICsxMDQsMTQgQEAgdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnNpbXVsYXRlU3Bh
Y2ViYXJLZXlQcmVzcygpCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6c2ltdWxhdGVNb3VzZU1vdmUo
dW5zaWduZWQgeCwgdW5zaWduZWQgeSkKIHsKICAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19n
ZXQobV93aW5kb3cpOwotICAgIGV2YXNfb2JqZWN0X3Nob3cobV92aWV3KTsKKyAgICBldmFzX29i
amVjdF9zaG93KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSk7CiAgICAgZXZhc19ldmVudF9m
ZWVkX21vdXNlX21vdmUoZXZhcywgeCwgeSwgMCwgMCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJW
aWV3OjpzaW11bGF0ZVJpZ2h0Q2xpY2sodW5zaWduZWQgeCwgdW5zaWduZWQgeSkKIHsKICAgICBF
dmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwotICAgIGV2YXNfb2JqZWN0X3No
b3cobV92aWV3KTsKKyAgICBldmFzX29iamVjdF9zaG93KFdLVmlld0dldEV2YXNPYmplY3QobV92
aWV3KSk7CiAgICAgZXZhc19ldmVudF9mZWVkX21vdXNlX21vdmUoZXZhcywgeCwgeSwgMCwgMCk7
CiAgICAgZXZhc19ldmVudF9mZWVkX21vdXNlX2Rvd24oZXZhcywgMywgRVZBU19CVVRUT05fTk9O
RSwgMCwgMCk7CiAgICAgZXZhc19ldmVudF9mZWVkX21vdXNlX3VwKGV2YXMsIDMsIEVWQVNfQlVU
VE9OX05PTkUsIDAsIDApOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0
Zm9ybVdlYlZpZXcuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgK
aW5kZXggOGY5ZGNkYi4uNTFjNGJjYyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9QbGF0Zm9ybVdlYlZpZXcuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3Jt
V2ViVmlldy5oCkBAIC01NCwxMyArNTQsOCBAQCB0eXBlZGVmIHN0cnVjdCBfR3RrV2lkZ2V0IEd0
a1dpZGdldDsKIHR5cGVkZWYgV0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlwZWRlZiBHdGtX
aWRnZXQqIFBsYXRmb3JtV2luZG93OwogI2VsaWYgUExBVEZPUk0oRUZMKQotI2lmIFVTRShFTykK
LXR5cGVkZWYgc3RydWN0IF9FbyBFdmFzX09iamVjdDsKLSNlbHNlCi10eXBlZGVmIHN0cnVjdCBf
RXZhc19PYmplY3QgRXZhc19PYmplY3Q7Ci0jZW5kaWYKIHR5cGVkZWYgc3RydWN0IF9FY29yZV9F
dmFzIEVjb3JlX0V2YXM7Ci10eXBlZGVmIEV2YXNfT2JqZWN0KiBQbGF0Zm9ybVdLVmlldzsKK3R5
cGVkZWYgV0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlwZWRlZiBFY29yZV9FdmFzKiBQbGF0
Zm9ybVdpbmRvdzsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L2VmbC9FdmVudFNlbmRlclByb3h5RWZsLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZs
L0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwCmluZGV4IGYyODI5YTkuLjEzOTIwZWMgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwCisr
KyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwCkBA
IC00MzgsNyArNDM4LDcgQEAgdm9pZCBFdmVudFNlbmRlclByb3h5OjpzZW5kVG91Y2hFdmVudChF
d2tfVG91Y2hfRXZlbnRfVHlwZSBldmVudFR5cGUpCiB7CiAgICAgQVNTRVJUKG1fdG91Y2hQb2lu
dHMpOwogCi0gICAgRXZhc19PYmplY3QqIGV3a1ZpZXcgPSBtX3Rlc3RDb250cm9sbGVyLT5tYWlu
V2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKTsKKyAgICBFdmFzX09iamVjdCogZXdrVmlldyA9IFdL
Vmlld0dldEV2YXNPYmplY3QobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZv
cm1WaWV3KCkpOwogICAgIGV3a192aWV3X2ZlZWRfdG91Y2hfZXZlbnQoZXdrVmlldywgZXZlbnRU
eXBlLCBtX3RvdWNoUG9pbnRzLCBldmFzX2tleV9tb2RpZmllcl9nZXQoZXZhc19vYmplY3RfZXZh
c19nZXQoZXdrVmlldykpKTsKIAogICAgIEVpbmFfTGlzdCogbGlzdDsKQEAgLTQ5MCwxMiArNDkw
LDE0IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6dXBkYXRlVG91Y2hQb2ludChpbnQgaW5kZXgs
IGludCB4LCBpbnQgeSkKIAogdm9pZCBFdmVudFNlbmRlclByb3h5OjpzZXRUb3VjaE1vZGlmaWVy
KFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXIsIGJvb2wgZW5hYmxlKQogeworICAgIEV2YXNfT2Jq
ZWN0KiBld2tWaWV3ID0gV0tWaWV3R2V0RXZhc09iamVjdChtX3Rlc3RDb250cm9sbGVyLT5tYWlu
V2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKSk7CisKICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0g
MDsgaW5kZXggPCAoc2l6ZW9mKG1vZGlmaWVyTmFtZXMpIC8gc2l6ZW9mKGNoYXIqKSk7ICsraW5k
ZXgpIHsKICAgICAgICAgaWYgKG1vZGlmaWVyICYgKDEgPDwgaW5kZXgpKSB7CiAgICAgICAgICAg
ICBpZiAoZW5hYmxlKQotICAgICAgICAgICAgICAgIGV2YXNfa2V5X21vZGlmaWVyX29uKGV2YXNf
b2JqZWN0X2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3Jt
VmlldygpKSwgbW9kaWZpZXJOYW1lc1tpbmRleF0pOworICAgICAgICAgICAgICAgIGV2YXNfa2V5
X21vZGlmaWVyX29uKGV2YXNfb2JqZWN0X2V2YXNfZ2V0KGV3a1ZpZXcpLCBtb2RpZmllck5hbWVz
W2luZGV4XSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZXZhc19rZXlfbW9k
aWZpZXJfb2ZmKGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJW
aWV3KCktPnBsYXRmb3JtVmlldygpKSwgbW9kaWZpZXJOYW1lc1tpbmRleF0pOworICAgICAgICAg
ICAgICAgIGV2YXNfa2V5X21vZGlmaWVyX29mZihldmFzX29iamVjdF9ldmFzX2dldChld2tWaWV3
KSwgbW9kaWZpZXJOYW1lc1tpbmRleF0pOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNwcCBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5jcHAKaW5kZXggMWNj
YzBiZC4uMmI3ZDg5MiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxh
dGZvcm1XZWJWaWV3RWZsLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9QbGF0
Zm9ybVdlYlZpZXdFZmwuY3BwCkBAIC02MSw1NiArNjEsNTggQEAgUGxhdGZvcm1XZWJWaWV3OjpQ
bGF0Zm9ybVdlYlZpZXcoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VH
cm91cCwKICAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwogCiAgICAg
aWYgKG1fdXNpbmdGaXhlZExheW91dCkgewotICAgICAgICBtX3ZpZXcgPSB0b0ltcGwoV0tWaWV3
Q3JlYXRlV2l0aEZpeGVkTGF5b3V0KGV2YXMsIGNvbnRleHQsIHBhZ2VHcm91cCkpOwotICAgICAg
ICBldmFzX29iamVjdF9yZXNpemUobV92aWV3LCA4MDAsIDYwMCk7CisgICAgICAgIG1fdmlldyA9
IFdLVmlld0NyZWF0ZVdpdGhGaXhlZExheW91dChldmFzLCBjb250ZXh0LCBwYWdlR3JvdXApOwor
ICAgICAgICBldmFzX29iamVjdF9yZXNpemUoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCA4
MDAsIDYwMCk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1fdmlldyA9IHRvSW1wbChXS1ZpZXdDcmVh
dGUoZXZhcywgY29udGV4dCwgcGFnZUdyb3VwKSk7CisgICAgICAgIG1fdmlldyA9IFdLVmlld0Ny
ZWF0ZShldmFzLCBjb250ZXh0LCBwYWdlR3JvdXApOwogCi0gICAgZXdrX3ZpZXdfdGhlbWVfc2V0
KG1fdmlldywgVEhFTUVfRElSIi9kZWZhdWx0LmVkaiIpOworICAgIGV3a192aWV3X3RoZW1lX3Nl
dChXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIFRIRU1FX0RJUiIvZGVmYXVsdC5lZGoiKTsK
ICAgICBtX3dpbmRvd0lzS2V5ID0gZmFsc2U7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhtX3ZpZXcp
OworICAgIGV2YXNfb2JqZWN0X3Nob3coV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpKTsKIH0K
IAogUGxhdGZvcm1XZWJWaWV3Ojp+UGxhdGZvcm1XZWJWaWV3KCkKIHsKLSAgICBldmFzX29iamVj
dF9kZWwobV92aWV3KTsKKyAgICAvLyBGSVhNRTogVGhlIEMgV0tWaWV3IEFQSSBjdXJyZW50bHkg
Y3JlYXRlcyB0aGUgRXZhc19PYmplY3QsIHNvIHdlIGhhdmUgdG8gZGVzdHJ1Y3QgaXQKKyAgICAv
LyAoYW5kIGl0cyBkZXBlbmRlbmNpZXMgRXdrVmlldyBhbmQgV2ViS2l0OjpXZWJWaWV3KSB0aGlz
IHdheSwgdW50aWwgdGhpcyBnZXQgZml4ZWQuCisgICAgZXZhc19vYmplY3RfZGVsKFdLVmlld0dl
dEV2YXNPYmplY3QobV92aWV3KSk7CisKKyAgICBXS1JlbGVhc2UobV92aWV3KTsKKwogICAgIGVj
b3JlX2V2YXNfZnJlZShtX3dpbmRvdyk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpyZXNp
emVUbyh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQogewotICAgIGV2YXNfb2JqZWN0
X3Jlc2l6ZShtX3ZpZXcsIHdpZHRoLCBoZWlnaHQpOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShX
S1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIHdpZHRoLCBoZWlnaHQpOwogfQogCiBXS1BhZ2VS
ZWYgUGxhdGZvcm1XZWJWaWV3OjpwYWdlKCkKIHsKLSAgICByZXR1cm4gV0tWaWV3R2V0UGFnZSh0
b0FQSShtX3ZpZXcpKTsKKyAgICByZXR1cm4gV0tWaWV3R2V0UGFnZShtX3ZpZXcpOwogfQogCiB2
b2lkIFBsYXRmb3JtV2ViVmlldzo6Zm9jdXMoKQogeworICAgIEV2YXNfT2JqZWN0KiBldmFzT2Jq
ZWN0ID0gV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpOwogICAgIC8vIEluIGEgZmV3IGNhc2Vz
LCBhbiBpZnJhbWUgbWlnaHQgcmVjZWl2ZSBmb2N1cyBmcm9tIEphdmFTY3JpcHQgYW5kIEV2YXMg
aXMgbm90IGF3YXJlIG9mIGl0IGF0IGFsbAogICAgIC8vIChXZWJDb3JlU3VwcG9ydDo6Zm9jdXNl
ZEZyYW1lQ2hhbmdlZCgpIGRvZXMgbm90IGVtaXQgYW55IG5vdGlmaWNhdGlvbikuIFdlIHRoZW4g
bWFudWFsbHkgcmVtb3ZlIHRoZQogICAgIC8vIGZvY3VzIGZyb20gdGhlIHZpZXcgdG8gbWFrZSB0
aGUgY2FsbCBnaXZlIGZvY3VzIHRvIGV2YXNfb2JqZWN0X2ZvY3VzX3NldCguLi4sIHRydWUpIHRv
IGJlIGVmZmVjdGZ1bC4KLSAgICBpZiAoV0tQYWdlR2V0Rm9jdXNlZEZyYW1lKHBhZ2UoKSkgIT0g
V0tQYWdlR2V0TWFpbkZyYW1lKHBhZ2UoKSkpCi0gICAgICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3Nl
dChtX3ZpZXcsIGZhbHNlKTsKLSAgICBldmFzX29iamVjdF9mb2N1c19zZXQobV92aWV3LCB0cnVl
KTsKKyAgICBldmFzX29iamVjdF9mb2N1c19zZXQoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcp
LCBXS1BhZ2VHZXRGb2N1c2VkRnJhbWUocGFnZSgpKSA9PSBXS1BhZ2VHZXRNYWluRnJhbWUocGFn
ZSgpKSk7CiB9CiAKIFdLUmVjdCBQbGF0Zm9ybVdlYlZpZXc6OndpbmRvd0ZyYW1lKCkKIHsKICAg
ICBpbnQgeCwgeSwgd2lkdGgsIGhlaWdodDsKIAotICAgIEVjb3JlX0V2YXMqIGVlID0gZWNvcmVf
ZXZhc19lY29yZV9ldmFzX2dldChldmFzX29iamVjdF9ldmFzX2dldChtX3ZpZXcpKTsKLSAgICBl
Y29yZV9ldmFzX3JlcXVlc3RfZ2VvbWV0cnlfZ2V0KGVlLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdo
dCk7CisgICAgZWNvcmVfZXZhc19yZXF1ZXN0X2dlb21ldHJ5X2dldChtX3dpbmRvdywgJngsICZ5
LCAmd2lkdGgsICZoZWlnaHQpOwogCiAgICAgcmV0dXJuIFdLUmVjdE1ha2UoeCwgeSwgd2lkdGgs
IGhlaWdodCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpzZXRXaW5kb3dGcmFtZShXS1Jl
Y3QgZnJhbWUpCiB7Ci0gICAgRWNvcmVfRXZhcyogZWUgPSBlY29yZV9ldmFzX2Vjb3JlX2V2YXNf
Z2V0KGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fdmlldykpOwotICAgIGVjb3JlX2V2YXNfbW92ZV9y
ZXNpemUoZWUsIGZyYW1lLm9yaWdpbi54LCBmcmFtZS5vcmlnaW4ueSwgZnJhbWUuc2l6ZS53aWR0
aCwgZnJhbWUuc2l6ZS5oZWlnaHQpOworICAgIGVjb3JlX2V2YXNfbW92ZV9yZXNpemUobV93aW5k
b3csIGZyYW1lLm9yaWdpbi54LCBmcmFtZS5vcmlnaW4ueSwgZnJhbWUuc2l6ZS53aWR0aCwgZnJh
bWUuc2l6ZS5oZWlnaHQpOwogfQogCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6YWRkQ2hyb21lSW5w
dXRGaWVsZCgpCkBAIC0xMjcsMTUgKzEyOSwxMiBAQCB2b2lkIFBsYXRmb3JtV2ViVmlldzo6bWFr
ZVdlYlZpZXdGaXJzdFJlc3BvbmRlcigpCiAKIFdLUmV0YWluUHRyPFdLSW1hZ2VSZWY+IFBsYXRm
b3JtV2ViVmlldzo6d2luZG93U25hcHNob3RJbWFnZSgpCiB7Ci0gICAgRWNvcmVfRXZhcyogZWUg
PSBlY29yZV9ldmFzX2Vjb3JlX2V2YXNfZ2V0KGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fdmlldykp
OwotICAgIEFTU0VSVChlZSk7Ci0KICAgICBpbnQgd2lkdGg7CiAgICAgaW50IGhlaWdodDsKLSAg
ICBlY29yZV9ldmFzX2dlb21ldHJ5X2dldChlZSwgMCwgMCwgJndpZHRoLCAmaGVpZ2h0KTsKKyAg
ICBlY29yZV9ldmFzX2dlb21ldHJ5X2dldChtX3dpbmRvdywgMCwgMCwgJndpZHRoLCAmaGVpZ2h0
KTsKICAgICBBU1NFUlQod2lkdGggPiAwICYmIGhlaWdodCA+IDApOwogCi0gICAgcmV0dXJuIGFk
b3B0V0soV0tWaWV3Q3JlYXRlU25hcHNob3QodG9BUEkobV92aWV3KSkpOworICAgIHJldHVybiBh
ZG9wdFdLKFdLVmlld0NyZWF0ZVNuYXBzaG90KG1fdmlldykpOwogfQogCiBib29sIFBsYXRmb3Jt
V2ViVmlldzo6dmlld1N1cHBvcnRzT3B0aW9ucyhXS0RpY3Rpb25hcnlSZWYgb3B0aW9ucykgY29u
c3QK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185493</attachid>
            <date>2013-01-30 06:39:11 -0800</date>
            <delta_ts>2013-01-30 06:54:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107931-20130130.patch</filename>
            <type>text/plain</type>
            <size>41476</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IGVhODliOTcwMzgyN2ViNDNmNzY0MDFmN2YyMDgzM2MxZGE0MzFjMzcKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
VHVlIEphbiAyOSAxMjo0NjoxOSAyMDEzICswMjAwCgogICAgYnVnMTA3OTMxCgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmlu
ZGV4IGEzMjMyNzQuLjZlYjIyNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTYgQEAKKzIwMTMt
MDEtMjkgIEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuICA8a2VubmV0aEB3ZWJraXQub3JnPgor
CisgICAgICAgIFtFRkxdW1dLMl0gSW50cm9kdWNlIGEgV2ViVmlldyBjbGFzcyBhcyBjb3VudGVy
cGFydCBmb3IgV0tWaWV3UmVmCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMDc5MzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUaGlzIGlzIGp1c3Qgb25lIHN0ZXAgb2YgdGhlIG5ldyBwbGFuIGZvciB0aGUg
RUZMIEFQSS4KKworICAgICAgICBUaGUgcGxhbiBpcyB0byBtb3ZlIHRoZSBwdWJsaWMgRUZMLWxp
a2UgQVBJIG9uIHRvcCBvZiB0aGUgc2hhcmVkCisgICAgICAgIFdLMiBDIEFQSSwgcGx1cyBhIGZl
dyBFRkwgZXh0ZW5zaW9ucyAoV0tWaWV3IGNsYXNzIG1vc3RseSkuCisKKyAgICAgICAgVGhlIEVG
TC1saWtlIEFQSSBjYW4gYmUgc2VlbiBhcyBhIGNvbnZlbmllbmNlIEFQSSB3aGljaCB0aWVzCisg
ICAgICAgIHdlbGwgaW50byBFRkwgYW5kIHdoaWNoIG1ha2VzIGl0IGVhc3kgdG8gYWRkIHdlYiBl
eHBlcmllbmNlcworICAgICAgICB0byBleGlzdGluZyBhbmQgbmV3IEVGTCBhcHBsaWNhdGlvbnMu
IEl0IHByb3ZpZGVzIGEgc21hcnQgb2JqZWN0CisgICAgICAgIGxpa2UgQVBJIGFuZCBhIEV2YXNf
T2JqZWN0IGJhc2VkIHZpZXcuCisKKyAgICAgICAgRm9yIG1vcmUgYWR2YW5jZWQgdXNlIGNhc2Vz
LCBzdWNoIGFzIGJyb3dzZXIgYW5kIHJ1bnRpbWUsIGl0IGlzCisgICAgICAgIHBvc3NpYmxlIHRv
IHVzZSB0aGUgV0sqIEMgQVBJLCB3aGljaCBpcyBnaXZlcyBtb3JlIGZsZXhpYmlsaXR5CisgICAg
ICAgIHdoaWxlIGJlaW5nIG1vcmUgbG93IGxldmVsLgorCisgICAgICAgIFRoZSBpZGVhIGlzIHRo
YXQgdGhlIFdLVmlldyBjbGFzcyB3aWxsIG5vdCBkZXBlbmQgb24gRXZhc19PYmplY3QKKyAgICAg
ICAgYW5kIFgxMSAoZnV0dXJlIHBsYW4pIHVubGlrZSB0aGUgY3VycmVudCBFRkwtbGlrZSBBUEku
IFRoaXMgc2hvdWxkCisgICAgICAgIG1ha2UgaXQgcG9zc2libGUgdG8gdXNlIGl0IGZvciBjYXNl
cyB3aGVyZSBub25lIG9mIHRoZXNlIGFyZQorICAgICAgICBhdmFpbGFibGUuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRoZSBXZWJWaWV3IGNsYXNzIHdoaWNoIHNlcnZlcyBhcyBv
dXIKKyAgICAgICAgY291bnRlcnBhcnQgZm9yIHRoZSBXS1ZpZXcgY2xhc3MsIGFuZCBhZGRzIGEg
ZmV3IG5lZWRlZCBtZXRob2RzLgorCisgICAgICAgIFRoZSBFd2tWaWV3IG93bnMgdGhlIFdlYlZp
ZXcgY2xhc3MgKGFuZCB3aWxsIGJlIGNvbnN0cnVjdGluZyBpdAorICAgICAgICBpbiB0aGUgbmVh
ciBmdXR1cmUgd2hlbiB0aGUgRXdrVmlldyBjbGFzcyBoYXMgYmVlbiBjaGFuZ2VkIHRvCisgICAg
ICAgIGhhbmRsZSBhbGwgc21hcnQgb2JqZWN0IHJlbGF0ZWQgY29kZSkKKworICAgICAgICBUaGUg
Y2xlYW4gdXAgb2YgdGhlIHNtYXJ0IG9iamVjdCByZWxhdGVkIGNvZGUgYXMgdGhlIHByb3Blcgor
ICAgICAgICBjb25zdHJ1Y3Rpb24gb2YgRXdrVmlldyBhbmQgV2ViVmlldyB3aWxsIGJlIGRvbmUg
aW4gZm9sbG93LXVwCisgICAgICAgIHBhdGNoZXMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0MvZWZsL1dLQVBJQ2FzdEVmbC5oOgorICAgICAgICAoV2ViS2l0KToKKworICAgICAgICAgICAg
VGhlIFdLVmlldyBBUEkgaXMgbm90IGJhc2VkIG9uIFdlYlZpZXcgYW5kIG5vdCBFdmFzX09iamVj
dCoKKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcDoKKyAgICAgICAg
KFdLVmlld0NyZWF0ZSk6CisgICAgICAgIChXS1ZpZXdDcmVhdGVXaXRoRml4ZWRMYXlvdXQpOgor
ICAgICAgICAoV0tWaWV3SW5pdGlhbGl6ZSk6CisgICAgICAgIChXS1ZpZXdHZXRQYWdlKToKKyAg
ICAgICAgKFdLVmlld1NldFRoZW1lUGF0aCk6CisgICAgICAgIChXS1ZpZXdTdXNwZW5kQWN0aXZl
RE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMpOgorICAgICAgICAoV0tWaWV3UmVzdW1lQWN0aXZlRE9N
T2JqZWN0c0FuZEFuaW1hdGlvbnMpOgorICAgICAgICAoV0tWaWV3R2V0RXZhc09iamVjdCk6Cisg
ICAgICAgIChXS1ZpZXdDcmVhdGVTbmFwc2hvdCk6CisKKyAgICAgICAgICAgIEFkZCBhIGZldyBu
ZXcgV0tWaWV3IEVGTCBDIG1ldGhvZHMsIGFuZCB1cGRhdGUgZXhpc3RpbmcKKyAgICAgICAgICAg
IG1ldGhvZHMgdG8gcmVmbGVjdCB0aGF0IHRoZSBXS1ZpZXdSZWYgaXMgbm93IGEgV2ViVmlldyoK
KworICAgICAgICAgICAgVGhlIGNvbnN0cnVjdGlvbiBtZXRob2RzIHdpbGwgYmUgcmV3cml0dGVu
IHdoZW4gdGhlIHNtYXJ0CisgICAgICAgICAgICBvYmplY3QgY29uc3RydWN0aW9uIGhhcyBiZWVu
IHNvbHZlcy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3Lmg6CisgICAg
ICAgICogVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpXZWJWaWV3KToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlldzo6fldlYlZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojppbml0aWFsaXpl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6c2V0VGhlbWVQYXRoKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlldzo6c3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlldzo6cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlv
bnMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvV2ViVmlldy5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdCk6CisgICAgICAgIChXZWJWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6
cGFnZVJlZik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmV2YXNPYmplY3QpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3OjpwYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6dHlw
ZSk6CisKKyAgICAgICAgICAgIEFkZCBhIG5ldyBXZWJLaXQ6OldlYlZpZXcgY2xhc3MgZm9yIEVG
TC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwOgorICAgICAgICAo
RXdrVmlldzo6RXdrVmlldyk6CisgICAgICAgIChFd2tWaWV3Ojp+RXdrVmlldyk6CisgICAgICAg
IChFd2tWaWV3Ojp3a1BhZ2UpOgorICAgICAgICAoRXdrVmlldzo6ZGV2aWNlU2NhbGVGYWN0b3Ip
OgorICAgICAgICAoRXdrVmlldzo6dGl0bGUpOgorICAgICAgICAoRXdrVmlldzo6c2V0VGhlbWVQ
YXRoKToKKyAgICAgICAgKEV3a1ZpZXc6OmN1c3RvbVRleHRFbmNvZGluZ05hbWUpOgorICAgICAg
ICAoRXdrVmlldzo6c2V0Q3VzdG9tVGV4dEVuY29kaW5nTmFtZSk6CisgICAgICAgIChFd2tWaWV3
OjpjcmVhdGVHTFN1cmZhY2UpOgorICAgICAgICAoRXdrVmlldzo6aW5mb3JtVVJMQ2hhbmdlKToK
KyAgICAgICAgKEV3a1ZpZXc6OnRha2VTbmFwc2hvdCk6CisKKyAgICAgICAgICAgIEJhc2UgbWV0
aG9kcyBvbiBDIEFQSSBpbnN0ZWFkIG9mIGludGVybmFsIEFQSSBhcyBtdWNoCisgICAgICAgICAg
ICBhcyBjdXJyZW50bHkgcG9zc2libGUuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9F
d2tWaWV3Lmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViVmlldyk6CisgICAgICAg
IChFd2tWaWV3KToKKyAgICAgICAgKEV3a1ZpZXc6OndrVmlldyk6CisgICAgICAgIChFd2tWaWV3
OjpwYWdlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHA6CisgICAg
ICAgIChjcmVhdGVFd2tWaWV3KToKKyAgICAgICAgKGV3a192aWV3X2Jhc2VfYWRkKToKKyAgICAg
ICAgKGV3a192aWV3X3NtYXJ0X2FkZCk6CisKKyAgICAgICAgICAgIE1vZGlmeSB0byByZXR1cm4g
dGhlIEV3a1ZpZXcgY2xhc3MgZm9yIG5vdy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a192aWV3X3ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1dlYkluc3BlY3Rv
clByb3h5RWZsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtQ3JlYXRlSW5zcGVjdG9yUGFnZSk6CisKKyAgICAgICAgICAgIFVwZGF0ZWQgZHVlIHRvIGNo
YW5nZWQgQVBJLgorCiAyMDEzLTAxLTMwICBIdWFuZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBh
bnkxMDAubmV0PgogCiAgICAgICAgIENvb3JkaW5hdGVkIEdyYXBoaWNzOiBSZW1vdmUgbV9wZW5k
aW5nU3luY0JhY2tpbmdTdG9yZXMgaW4gTGF5ZXJUcmVlUmVuZGVyZXIuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
RWZsLmNtYWtlCmluZGV4IDMxM2Y3MTkuLmEwZGU4NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNt
YWtlCkBAIC0xMDksNiArMTA5LDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAg
VUlQcm9jZXNzL2VmbC9XZWJQb3B1cE1lbnVQcm94eUVmbC5jcHAKICAgICBVSVByb2Nlc3MvZWZs
L1dlYlByZWZlcmVuY2VzRWZsLmNwcAogICAgIFVJUHJvY2Vzcy9lZmwvV2ViUHJvY2Vzc1Byb3h5
RWZsLmNwcAorICAgIFVJUHJvY2Vzcy9lZmwvV2ViVmlldy5jcHAKIAogICAgIFVJUHJvY2Vzcy9J
bnNwZWN0b3JTZXJ2ZXIvZWZsL1dlYkluc3BlY3RvclNlcnZlckVmbC5jcHAKICAgICBVSVByb2Nl
c3MvSW5zcGVjdG9yU2VydmVyL3NvdXAvV2ViU29ja2V0U2VydmVyU291cC5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tBUElDYXN0RWZsLmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLQVBJQ2FzdEVmbC5oCmluZGV4IGIw
MTNhMGEuLjE4ODlmYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy9lZmwvV0tBUElDYXN0RWZsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
L2VmbC9XS0FQSUNhc3RFZmwuaApAQCAtMjQsMTUgKzI0LDExIEBACiAjZXJyb3IgIlBsZWFzZSAj
aW5jbHVkZSBcIldLQVBJQ2FzdC5oXCIgaW5zdGVhZCBvZiB0aGlzIGZpbGUgZGlyZWN0bHkuIgog
I2VuZGlmCiAKLSNpZiBVU0UoRU8pCi10eXBlZGVmIHN0cnVjdCBfRW8gRXZhc19PYmplY3Q7Ci0j
ZWxzZQotdHlwZWRlZiBzdHJ1Y3QgX0V2YXNfT2JqZWN0IEV2YXNfT2JqZWN0OwotI2VuZGlmCi0K
IG5hbWVzcGFjZSBXZWJLaXQgewogCi1XS19BRERfQVBJX01BUFBJTkcoV0tWaWV3UmVmLCBFdmFz
X09iamVjdCkKK2NsYXNzIFdlYlZpZXc7CisKK1dLX0FERF9BUElfTUFQUElORyhXS1ZpZXdSZWYs
IFdlYlZpZXcpCiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9DL2VmbC9XS1ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9X
S1ZpZXcuY3BwCmluZGV4IDMyYjlkOGYuLjU5MDA3MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5jcHAKQEAgLTI5LDI0ICsyOSw1NiBAQCB1c2luZyBu
YW1lc3BhY2UgV2ViS2l0OwogCiBXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlKEV2YXMqIGNhbnZhcywg
V0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZikKIHsK
LSAgICByZXR1cm4gdG9BUEkoZXdrX3ZpZXdfYmFzZV9hZGQoY2FudmFzLCBjb250ZXh0UmVmLCBw
YWdlR3JvdXBSZWYsIEV3a1ZpZXc6OkxlZ2FjeUJlaGF2aW9yKSk7CisgICAgRXdrVmlldyogZXdr
VmlldyA9IGV3a192aWV3X2Jhc2VfYWRkKGNhbnZhcywgY29udGV4dFJlZiwgcGFnZUdyb3VwUmVm
LCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlvcik7CisgICAgaWYgKCFld2tWaWV3KQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIC8vIFJldGFpbiBhcyB0aGUgY29udHJhY3Qgd2l0aCAqQ3JlYXRlIGZ1
bmN0aW9ucyBpcyB0aGF0IHJldHVybmVkIG9iamVjdHMgbXVjaCB0byBiZSByZWxlYXNlZCBhZnRl
ciB1c2UuCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdLVmlld1JlZj4oV0tSZXRhaW4oZXdrVmll
dy0+d2tWaWV3KCkpKTsKIH0KIAogV0tWaWV3UmVmIFdLVmlld0NyZWF0ZVdpdGhGaXhlZExheW91
dChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBw
YWdlR3JvdXBSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKGV3a192aWV3X2Jhc2VfYWRkKGNhbnZh
cywgY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpEZWZhdWx0QmVoYXZpb3IpKTsK
KyAgICBFd2tWaWV3KiBld2tWaWV3ID0gZXdrX3ZpZXdfYmFzZV9hZGQoY2FudmFzLCBjb250ZXh0
UmVmLCBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OkRlZmF1bHRCZWhhdmlvcik7CisgICAgaWYgKCFl
d2tWaWV3KQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIFJldGFpbiBhcyB0aGUgY29udHJh
Y3Qgd2l0aCAqQ3JlYXRlIGZ1bmN0aW9ucyBpcyB0aGF0IHJldHVybmVkIG9iamVjdHMgbXVjaCB0
byBiZSByZWxlYXNlZCBhZnRlciB1c2UuCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdLVmlld1Jl
Zj4oV0tSZXRhaW4oZXdrVmlldy0+d2tWaWV3KCkpKTsKK30KKwordm9pZCBXS1ZpZXdJbml0aWFs
aXplKFdLVmlld1JlZiB2aWV3UmVmKQoreworICAgIHRvSW1wbCh2aWV3UmVmKS0+aW5pdGlhbGl6
ZSgpOwogfQogCiBXS1BhZ2VSZWYgV0tWaWV3R2V0UGFnZShXS1ZpZXdSZWYgdmlld1JlZikKIHsK
LSAgICBFd2tWaWV3KiB2aWV3ID0gRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QodG9JbXBsKHZpZXdS
ZWYpKTsKKyAgICByZXR1cm4gdG9JbXBsKHZpZXdSZWYpLT5wYWdlUmVmKCk7Cit9CiAKLSAgICBy
ZXR1cm4gdmlldy0+d2tQYWdlKCk7Cit2b2lkIFdLVmlld1NldFRoZW1lUGF0aChXS1ZpZXdSZWYg
dmlld1JlZiwgV0tTdHJpbmdSZWYgdGhlbWUpCit7CisgICAgdG9JbXBsKHZpZXdSZWYpLT5zZXRU
aGVtZVBhdGgodGhlbWUpOwogfQogCi1XS0ltYWdlUmVmIFdLVmlld0NyZWF0ZVNuYXBzaG90KFdL
Vmlld1JlZiB2aWV3UmVmKQordm9pZCBXS1ZpZXdTdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFu
aW1hdGlvbnMoV0tWaWV3UmVmIHZpZXdSZWYpCiB7Ci0gICAgRXdrVmlldyogdmlldyA9IEV3a1Zp
ZXc6OmZyb21FdmFzT2JqZWN0KHRvSW1wbCh2aWV3UmVmKSk7CisgICAgdG9JbXBsKHZpZXdSZWYp
LT5zdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKK30KIAotICAgIHJldHVy
biBXS0ltYWdlQ3JlYXRlRnJvbUNhaXJvU3VyZmFjZSh2aWV3LT50YWtlU25hcHNob3QoKS5nZXQo
KSwgMCAvKiBvcHRpb25zICovKTsKK3ZvaWQgV0tWaWV3UmVzdW1lQWN0aXZlRE9NT2JqZWN0c0Fu
ZEFuaW1hdGlvbnMoV0tWaWV3UmVmIHZpZXdSZWYpCit7CisgICAgdG9JbXBsKHZpZXdSZWYpLT5y
ZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworfQorCitFdmFzX09iamVjdCog
V0tWaWV3R2V0RXZhc09iamVjdChXS1ZpZXdSZWYgdmlld1JlZikKK3sKKyAgICByZXR1cm4gdG9J
bXBsKHZpZXdSZWYpLT5ldmFzT2JqZWN0KCk7Cit9CisKK1dLSW1hZ2VSZWYgV0tWaWV3Q3JlYXRl
U25hcHNob3QoV0tWaWV3UmVmIHZpZXdSZWYpCit7CisgICAgRXdrVmlldyogZXdrVmlldyA9IEV3
a1ZpZXc6OmZyb21FdmFzT2JqZWN0KHRvSW1wbCh2aWV3UmVmKS0+ZXZhc09iamVjdCgpKTsKKyAg
ICByZXR1cm4gV0tJbWFnZUNyZWF0ZUZyb21DYWlyb1N1cmZhY2UoZXdrVmlldy0+dGFrZVNuYXBz
aG90KCkuZ2V0KCksIDAgLyogb3B0aW9ucyAqLyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaAppbmRleCBjYzczMDdjLi5kNWI0MzJkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmgKQEAgLTI0LDggKzI0LDEwIEBA
CiAKICNpZiBVU0UoRU8pCiB0eXBlZGVmIHN0cnVjdCBfRW8gRXZhczsKK3R5cGVkZWYgc3RydWN0
IF9FbyBFdmFzX09iamVjdDsKICNlbHNlCiB0eXBlZGVmIHN0cnVjdCBfRXZhcyBFdmFzOwordHlw
ZWRlZiBzdHJ1Y3QgX0V2YXNfT2JqZWN0IEV2YXNfT2JqZWN0OwogI2VuZGlmCiAKICNpZmRlZiBf
X2NwbHVzcGx1cwpAQCAtMzYsOSArMzgsMTkgQEAgV0tfRVhQT1JUIFdLVmlld1JlZiBXS1ZpZXdD
cmVhdGUoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dCwgV0tQYWdlR3JvdXAKIAog
V0tfRVhQT1JUIFdLVmlld1JlZiBXS1ZpZXdDcmVhdGVXaXRoRml4ZWRMYXlvdXQoRXZhcyogY2Fu
dmFzLCBXS0NvbnRleHRSZWYgY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwKTsKIAot
V0tfRVhQT1JUIFdLUGFnZVJlZiBXS1ZpZXdHZXRQYWdlKFdLVmlld1JlZiB2aWV3KTsKK1dLX0VY
UE9SVCB2b2lkIFdLVmlld0luaXRpYWxpemUoV0tWaWV3UmVmKTsKIAotV0tfRVhQT1JUIFdLSW1h
Z2VSZWYgV0tWaWV3Q3JlYXRlU25hcHNob3QoV0tWaWV3UmVmIHZpZXdSZWYpOworV0tfRVhQT1JU
IFdLUGFnZVJlZiBXS1ZpZXdHZXRQYWdlKFdLVmlld1JlZik7CisKK1dLX0VYUE9SVCB2b2lkIFdL
Vmlld1NldFRoZW1lUGF0aChXS1ZpZXdSZWYsIFdLU3RyaW5nUmVmKTsKKworV0tfRVhQT1JUIHZv
aWQgV0tWaWV3U3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKFdLVmlld1JlZik7
CitXS19FWFBPUlQgdm9pZCBXS1ZpZXdSZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9u
cyhXS1ZpZXdSZWYpOworCisvLyBGSVhNRTogVGhlIGxvbmcgdGVybSBwbGFuIGlzIHRvIGdldCBy
aWQgb2YgdGhpcywgc28ga2VlcCB1c2FnZSB0byBhIGJhcmUgbWluaW11bS4KK1dLX0VYUE9SVCBF
dmFzX09iamVjdCogV0tWaWV3R2V0RXZhc09iamVjdChXS1ZpZXdSZWYpOworCitXS19FWFBPUlQg
V0tJbWFnZVJlZiBXS1ZpZXdDcmVhdGVTbmFwc2hvdChXS1ZpZXdSZWYpOwogCiAjaWZkZWYgX19j
cGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L0V3a1ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5j
cHAKaW5kZXggN2YyMzhmOC4uYzczOWE3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvRXdrVmlldy5jcHAKQEAgLTM4LDcgKzM4LDkgQEAKICNpbmNsdWRlICJXS0RpY3Rp
b25hcnkuaCIKICNpbmNsdWRlICJXS0dlb21ldHJ5LmgiCiAjaW5jbHVkZSAiV0tOdW1iZXIuaCIK
KyNpbmNsdWRlICJXS1BhZ2VHcm91cC5oIgogI2luY2x1ZGUgIldLU3RyaW5nLmgiCisjaW5jbHVk
ZSAiV0tWaWV3LmgiCiAjaW5jbHVkZSAiV2ViQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkltYWdl
LmgiCiAjaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCkBAIC0xMTAsMTQgKzExMiwxNCBAQCBjb25z
dCBFdmFzX09iamVjdCogRXdrVmlldzo6dmlld0Zyb21QYWdlVmlld01hcChjb25zdCBXS1BhZ2VS
ZWYgcGFnZSkKICAgICByZXR1cm4gcGFnZVZpZXdNYXAoKS5nZXQocGFnZSk7CiB9CiAKLUV3a1Zp
ZXc6OkV3a1ZpZXcoRXZhc19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdrQ29udGV4
dD4gY29udGV4dCwgUGFzc1JlZlB0cjxXZWJQYWdlR3JvdXA+IHBhZ2VHcm91cCwgVmlld0JlaGF2
aW9yIGJlaGF2aW9yKQotICAgIDogbV9ldmFzT2JqZWN0KGV2YXNPYmplY3QpCitFd2tWaWV3OjpF
d2tWaWV3KEV2YXNfT2JqZWN0KiB2aWV3LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQs
IFdlYlBhZ2VHcm91cCogcGFnZUdyb3VwLCBWaWV3QmVoYXZpb3IgYmVoYXZpb3IpCisgICAgOiBt
X2V2YXNPYmplY3QodmlldykKICAgICAsIG1fY29udGV4dChjb250ZXh0KQogI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKICAgICAsIG1fcGVuZGluZ1N1cmZhY2VSZXNpemUoZmFsc2Up
CiAjZW5kaWYKICAgICAsIG1fcGFnZUNsaWVudChiZWhhdmlvciA9PSBEZWZhdWx0QmVoYXZpb3Ig
PyBQYWdlQ2xpZW50RGVmYXVsdEltcGw6OmNyZWF0ZSh0aGlzKSA6IFBhZ2VDbGllbnRMZWdhY3lJ
bXBsOjpjcmVhdGUodGhpcykpCi0gICAgLCBtX3BhZ2VQcm94eShtX2NvbnRleHQtPndlYkNvbnRl
eHQoKS0+Y3JlYXRlV2ViUGFnZShtX3BhZ2VDbGllbnQuZ2V0KCksIHBhZ2VHcm91cC5nZXQoKSkp
CisgICAgLCBtX3dlYlZpZXcoYWRvcHRSZWYobmV3IFdlYlZpZXcobV9jb250ZXh0LT53ZWJDb250
ZXh0KCkuZ2V0KCksIG1fcGFnZUNsaWVudC5nZXQoKSwgcGFnZUdyb3VwLCB2aWV3KSkpCiAgICAg
LCBtX3BhZ2VMb2FkQ2xpZW50KFBhZ2VMb2FkQ2xpZW50RWZsOjpjcmVhdGUodGhpcykpCiAgICAg
LCBtX3BhZ2VQb2xpY3lDbGllbnQoUGFnZVBvbGljeUNsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQog
ICAgICwgbV9wYWdlVUlDbGllbnQoUGFnZVVJQ2xpZW50RWZsOjpjcmVhdGUodGhpcykpCkBAIC0x
MjcsNyArMTI5LDcgQEAgRXdrVmlldzo6RXdrVmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwg
UGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBQYXNzUmUKICNpZiBFTkFCTEUoVklCUkFU
SU9OKQogICAgICwgbV92aWJyYXRpb25DbGllbnQoVmlicmF0aW9uQ2xpZW50RWZsOjpjcmVhdGUo
dGhpcykpCiAjZW5kaWYKLSAgICAsIG1fYmFja0ZvcndhcmRMaXN0KEV3a0JhY2tGb3J3YXJkTGlz
dDo6Y3JlYXRlKHRvQVBJKG1fcGFnZVByb3h5LT5iYWNrRm9yd2FyZExpc3QoKSkpKQorICAgICwg
bV9iYWNrRm9yd2FyZExpc3QoRXdrQmFja0ZvcndhcmRMaXN0OjpjcmVhdGUoV0tQYWdlR2V0QmFj
a0ZvcndhcmRMaXN0KHdrUGFnZSgpKSkpCiAjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCiAg
ICAgLCBtX3BhZ2VTY2FsZUZhY3RvcigxKQogI2VuZGlmCkBAIC0xNDQsMzMgKzE0NiwxOCBAQCBF
d2tWaWV3OjpFd2tWaWV3KEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0LCBQYXNzUmVmUHRyPEV3a0Nv
bnRleHQ+IGNvbnRleHQsIFBhc3NSZQogewogICAgIEFTU0VSVChtX2V2YXNPYmplY3QpOwogICAg
IEFTU0VSVChtX2NvbnRleHQpOwotICAgIEFTU0VSVChtX3BhZ2VQcm94eSk7CiAKLSNpZiBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVm
ZXJlbmNlcygpLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCh0cnVlKTsKLSAgICBt
X3BhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldEZvcmNlQ29tcG9zaXRp
bmdNb2RlKHRydWUpOwotICAgIGNoYXIqIGRlYnVnVmlzdWFsc0Vudmlyb25tZW50ID0gZ2V0ZW52
KCJXRUJLSVRfU0hPV19DT01QT1NJVElOR19ERUJVR19WSVNVQUxTIik7Ci0gICAgYm9vbCBzaG93
RGVidWdWaXN1YWxzID0gZGVidWdWaXN1YWxzRW52aXJvbm1lbnQgJiYgIXN0cmNtcChkZWJ1Z1Zp
c3VhbHNFbnZpcm9ubWVudCwgIjEiKTsKLSAgICBtX3BhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnBy
ZWZlcmVuY2VzKCktPnNldENvbXBvc2l0aW5nQm9yZGVyc1Zpc2libGUoc2hvd0RlYnVnVmlzdWFs
cyk7Ci0gICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRDb21w
b3NpdGluZ1JlcGFpbnRDb3VudGVyc1Zpc2libGUoc2hvd0RlYnVnVmlzdWFscyk7Ci0jaWYgRU5B
QkxFKFdFQkdMKQotICAgIG1fcGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+
c2V0V2ViR0xFbmFibGVkKHRydWUpOwotI2VuZGlmCi0gICAgaWYgKGJlaGF2aW9yID09IERlZmF1
bHRCZWhhdmlvcikKLSAgICAgICAgbV9wYWdlUHJveHktPnNldFVzZUZpeGVkTGF5b3V0KHRydWUp
OwotI2VuZGlmCisgICAgV0tWaWV3SW5pdGlhbGl6ZSh3a1ZpZXcoKSk7CiAKLSAgICBtX3BhZ2VQ
cm94eS0+aW5pdGlhbGl6ZVdlYlBhZ2UoKTsKKyAgICBXS1BhZ2VTZXRVc2VGaXhlZExheW91dCh3
a1BhZ2UoKSwgYmVoYXZpb3IgPT0gRGVmYXVsdEJlaGF2aW9yKTsKIAotI2lmIEVOQUJMRShGVUxM
U0NSRUVOX0FQSSkKLSAgICBtX3BhZ2VQcm94eS0+ZnVsbFNjcmVlbk1hbmFnZXIoKS0+c2V0V2Vi
VmlldyhtX2V2YXNPYmplY3QpOwotICAgIG1fcGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVy
ZW5jZXMoKS0+c2V0RnVsbFNjcmVlbkVuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKLSNpZiBFTkFCTEUo
V0VCX0FVRElPKQotICAgIG1fcGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+
c2V0V2ViQXVkaW9FbmFibGVkKHRydWUpOwotI2VuZGlmCisgICAgV0tQYWdlR3JvdXBSZWYgd2tQ
YWdlR3JvdXAgPSBXS1BhZ2VHZXRQYWdlR3JvdXAod2tQYWdlKCkpOworICAgIFdLUHJlZmVyZW5j
ZXNSZWYgd2tQcmVmZXJlbmNlcyA9IFdLUGFnZUdyb3VwR2V0UHJlZmVyZW5jZXMod2tQYWdlR3Jv
dXApOwogCi0gICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRP
ZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQodHJ1ZSk7CisgICAgV0tQcmVmZXJlbmNl
c1NldFdlYkdMRW5hYmxlZCh3a1ByZWZlcmVuY2VzLCB0cnVlKTsKKyAgICBXS1ByZWZlcmVuY2Vz
U2V0RnVsbFNjcmVlbkVuYWJsZWQod2tQcmVmZXJlbmNlcywgdHJ1ZSk7CisgICAgV0tQcmVmZXJl
bmNlc1NldFdlYkF1ZGlvRW5hYmxlZCh3a1ByZWZlcmVuY2VzLCB0cnVlKTsKKyAgICBXS1ByZWZl
cmVuY2VzU2V0T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKHdrUHJlZmVyZW5jZXMs
IHRydWUpOwogCiAgICAgLy8gRW5hYmxlIG1vdXNlIGV2ZW50cyBieSBkZWZhdWx0CiAgICAgc2V0
TW91c2VFdmVudHNFbmFibGVkKHRydWUpOwpAQCAtMTg2LDggKzE3Myw2IEBAIEV3a1ZpZXc6OkV3
a1ZpZXcoRXZhc19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29u
dGV4dCwgUGFzc1JlCiAKIEV3a1ZpZXc6On5Fd2tWaWV3KCkKIHsKLSAgICBtX3BhZ2VQcm94eS0+
Y2xvc2UoKTsKLQogICAgIC8vIFVucmVnaXN0ZXIgaWNvbiBjaGFuZ2UgY2FsbGJhY2suCiAgICAg
RXdrRmF2aWNvbkRhdGFiYXNlKiBpY29uRGF0YWJhc2UgPSBtX2NvbnRleHQtPmZhdmljb25EYXRh
YmFzZSgpOwogICAgIEFTU0VSVChpY29uRGF0YWJhc2UpOwpAQCAtMjE1LDkgKzIwMCw5IEBAIEV3
a1ZpZXcqIEV3a1ZpZXc6OmZyb21FdmFzT2JqZWN0KGNvbnN0IEV2YXNfT2JqZWN0KiB2aWV3KQog
ICogQGludGVybmFsCiAgKiBSZXRyaWV2ZXMgdGhlIGludGVybmFsIFdLUGFnZSBmb3IgdGhpcyB2
aWV3LgogICovCi1XS1BhZ2VSZWYgRXdrVmlldzo6d2tQYWdlKCkKK1dLUGFnZVJlZiBFd2tWaWV3
Ojp3a1BhZ2UoKSBjb25zdAogewotICAgIHJldHVybiB0b0FQSShtX3BhZ2VQcm94eS5nZXQoKSk7
CisgICAgcmV0dXJuIFdLVmlld0dldFBhZ2Uod2tWaWV3KCkpOwogfQogCiB2b2lkIEV3a1ZpZXc6
OnNldEN1cnNvcihjb25zdCBDdXJzb3ImIGN1cnNvcikKQEAgLTMwMSw3ICsyODYsNyBAQCB2b2lk
IEV3a1ZpZXc6OnNldERldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlKQogCiBmbG9hdCBFd2tW
aWV3OjpkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcGFnZVByb3h5
LT5kZXZpY2VTY2FsZUZhY3RvcigpOworICAgIHJldHVybiBXS1BhZ2VHZXRCYWNraW5nU2NhbGVG
YWN0b3Iod2tQYWdlKCkpOwogfQogCiBBZmZpbmVUcmFuc2Zvcm0gRXdrVmlldzo6dHJhbnNmb3Jt
RnJvbVNjZW5lKCkgY29uc3QKQEAgLTUyNyw3ICs1MTIsNyBAQCBib29sIEV3a1ZpZXc6OmlzVmlz
aWJsZSgpIGNvbnN0CiAKIGNvbnN0IGNoYXIqIEV3a1ZpZXc6OnRpdGxlKCkgY29uc3QKIHsKLSAg
ICBtX3RpdGxlID0gbV9wYWdlUHJveHktPnBhZ2VUaXRsZSgpLnV0ZjgoKS5kYXRhKCk7CisgICAg
bV90aXRsZSA9IFdLRWluYVNoYXJlZFN0cmluZyhBZG9wdFdLLCBXS1BhZ2VDb3B5VGl0bGUod2tQ
YWdlKCkpKTsKIAogICAgIHJldHVybiBtX3RpdGxlOwogfQpAQCAtNTUwLDI0ICs1MzUsMjYgQEAg
dm9pZCBFd2tWaWV3OjpzZXRUaGVtZVBhdGgoY29uc3QgY2hhciogdGhlbWUpCiB7CiAgICAgaWYg
KG1fdGhlbWUgIT0gdGhlbWUpIHsKICAgICAgICAgbV90aGVtZSA9IHRoZW1lOwotICAgICAgICBt
X3BhZ2VQcm94eS0+c2V0VGhlbWVQYXRoKHRoZW1lKTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHdrVGhlbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KHRoZW1lKSk7CisgICAgICAgIFdLVmlld1NldFRoZW1lUGF0aCh3a1ZpZXcoKSwgd2tUaGVtZS5n
ZXQoKSk7CiAgICAgfQogfQogCiBjb25zdCBjaGFyKiBFd2tWaWV3OjpjdXN0b21UZXh0RW5jb2Rp
bmdOYW1lKCkgY29uc3QKIHsKLSAgICBTdHJpbmcgY3VzdG9tRW5jb2RpbmcgPSBtX3BhZ2VQcm94
eS0+Y3VzdG9tVGV4dEVuY29kaW5nTmFtZSgpOwotICAgIGlmIChjdXN0b21FbmNvZGluZy5pc0Vt
cHR5KCkpCisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGN1c3RvbUVuY29kaW5nID0gYWRv
cHRXSyhXS1BhZ2VDb3B5Q3VzdG9tVGV4dEVuY29kaW5nTmFtZSh3a1BhZ2UoKSkpOworICAgIGlm
IChXS1N0cmluZ0lzRW1wdHkoY3VzdG9tRW5jb2RpbmcuZ2V0KCkpKQogICAgICAgICByZXR1cm4g
MDsKIAotICAgIG1fY3VzdG9tRW5jb2RpbmcgPSBjdXN0b21FbmNvZGluZy51dGY4KCkuZGF0YSgp
OworICAgIG1fY3VzdG9tRW5jb2RpbmcgPSBXS0VpbmFTaGFyZWRTdHJpbmcoY3VzdG9tRW5jb2Rp
bmcuZ2V0KCkpOwogCiAgICAgcmV0dXJuIG1fY3VzdG9tRW5jb2Rpbmc7CiB9CiAKIHZvaWQgRXdr
Vmlldzo6c2V0Q3VzdG9tVGV4dEVuY29kaW5nTmFtZShjb25zdCBTdHJpbmcmIGVuY29kaW5nKQog
ewotICAgIG1fcGFnZVByb3h5LT5zZXRDdXN0b21UZXh0RW5jb2RpbmdOYW1lKGVuY29kaW5nKTsK
KyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tFbmNvZGluZyA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZW5jb2RpbmcudXRmOCgpLmRhdGEoKSkpOworICAgIFdL
UGFnZVNldEN1c3RvbVRleHRFbmNvZGluZ05hbWUod2tQYWdlKCksIHdrRW5jb2RpbmcuZ2V0KCkp
OwogfQogCiB2b2lkIEV3a1ZpZXc6OnNldE1vdXNlRXZlbnRzRW5hYmxlZChib29sIGVuYWJsZWQp
CkBAIC02NDksOSArNjM2LDYgQEAgYm9vbCBFd2tWaWV3OjpjcmVhdGVHTFN1cmZhY2UoY29uc3Qg
SW50U2l6ZSYgdmlld1NpemUpCiAgICAgICAgIGlmICghbV9ldmFzR0wpIHsKICAgICAgICAgICAg
IFdBUk4oIkZhaWxlZCB0byBjcmVhdGUgRXZhc19HTCwgZmFsbGluZyBiYWNrIHRvIHNvZnR3YXJl
IG1vZGUuIik7CiAgICAgICAgICAgICBtX2lzSGFyZHdhcmVBY2NlbGVyYXRlZCA9IGZhbHNlOwot
I2lmIEVOQUJMRShXRUJHTCkKLSAgICAgICAgICAgIG1fcGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+
cHJlZmVyZW5jZXMoKS0+c2V0V2ViR0xFbmFibGVkKGZhbHNlKTsKLSNlbmRpZgogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtODk0LDE1ICs4NzgsMTMgQEAg
dW5zaWduZWQgbG9uZyBsb25nIEV3a1ZpZXc6OmluZm9ybURhdGFiYXNlUXVvdGFSZWFjaGVkKGNv
bnN0IFN0cmluZyYgZGF0YWJhc2VOYW0KICAqLwogdm9pZCBFd2tWaWV3OjppbmZvcm1VUkxDaGFu
Z2UoKQogewotICAgIFN0cmluZyBhY3RpdmVVUkwgPSBtX3BhZ2VQcm94eS0+YWN0aXZlVVJMKCk7
Ci0gICAgaWYgKGFjdGl2ZVVSTC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBXS1Jl
dGFpblB0cjxXS1VSTFJlZj4gd2tBY3RpdmVVUkwgPSBhZG9wdFdLKFdLUGFnZUNvcHlBY3RpdmVV
Ukwod2tQYWdlKCkpKTsKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tVUkxTdHJpbmcg
PSB3a0FjdGl2ZVVSTCA/IGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHdrQWN0aXZlVVJMLmdldCgp
KSkgOiBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIiKSk7CiAKLSAgICBD
U3RyaW5nIHJhd0FjdGl2ZVVSTCA9IGFjdGl2ZVVSTC51dGY4KCk7Ci0gICAgaWYgKG1fdXJsID09
IHJhd0FjdGl2ZVVSTC5kYXRhKCkpCisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcod2tVUkxTdHJpbmcuZ2V0KCksIG1fdXJsKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV91
cmwgPSByYXdBY3RpdmVVUkwuZGF0YSgpOworICAgIG1fdXJsID0gV0tFaW5hU2hhcmVkU3RyaW5n
KHdrVVJMU3RyaW5nLmdldCgpKTsKICAgICBzbWFydENhbGxiYWNrPFVSTENoYW5nZWQ+KCkuY2Fs
bChtX3VybCk7CiAKICAgICAvLyBVcGRhdGUgdGhlIHZpZXcncyBmYXZpY29uLgpAQCAtMTAzNCw3
ICsxMDE2LDcgQEAgdm9pZCBFd2tWaWV3OjpvbkZhdmljb25DaGFuZ2VkKGNvbnN0IGNoYXIqIHBh
Z2VVUkwsIHZvaWQqIGV2ZW50SW5mbykKIFBhc3NSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBFd2tW
aWV3Ojp0YWtlU25hcHNob3QoKQogewogICAgIC8vIFN1c3BlbmQgYWxsIGFuaW1hdGlvbnMgYmVm
b3JlIHRha2luZyB0aGUgc25hcHNob3QuCi0gICAgbV9wYWdlUHJveHktPnN1c3BlbmRBY3RpdmVE
T01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworICAgIFdLVmlld1N1c3BlbmRBY3RpdmVET01PYmpl
Y3RzQW5kQW5pbWF0aW9ucyh3a1ZpZXcoKSk7CiAKICAgICAvLyBXYWl0IGZvciB0aGUgcGVuZGlu
ZyByZXBhaW50IGV2ZW50cyB0byBiZSBwcm9jZXNzZWQuCiAgICAgd2hpbGUgKG1fZGlzcGxheVRp
bWVyLmlzQWN0aXZlKCkpCkBAIC0xMDQ2LDcgKzEwMjgsNyBAQCBQYXNzUmVmUHRyPGNhaXJvX3N1
cmZhY2VfdD4gRXdrVmlldzo6dGFrZVNuYXBzaG90KCkKICNlbmRpZgogICAgICAgICBSZWZQdHI8
Y2Fpcm9fc3VyZmFjZV90PiBzbmFwc2hvdCA9IGNyZWF0ZVN1cmZhY2VGb3JJbWFnZShzZC0+aW1h
Z2UpOwogICAgICAgICAvLyBSZXN1bWUgYWxsIGFuaW1hdGlvbnMuCi0gICAgICAgIG1fcGFnZVBy
b3h5LT5yZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworICAgICAgICBXS1Zp
ZXdSZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyh3a1ZpZXcoKSk7CiAKICAgICAg
ICAgcmV0dXJuIHNuYXBzaG90LnJlbGVhc2UoKTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCkBAIC0xMDU0LDcgKzEwMzYsNyBAQCBQYXNzUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4g
RXdrVmlldzo6dGFrZVNuYXBzaG90KCkKIAogICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHNu
YXBzaG90ID0gZ2V0SW1hZ2VTdXJmYWNlRnJvbUZyYW1lQnVmZmVyKDAsIDAsIHNkLT52aWV3Lncs
IHNkLT52aWV3LmgpOwogICAgIC8vIFJlc3VtZSBhbGwgYW5pbWF0aW9ucy4KLSAgICBtX3BhZ2VQ
cm94eS0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKKyAgICBXS1ZpZXdS
ZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyh3a1ZpZXcoKSk7CiAKICAgICByZXR1
cm4gc25hcHNob3QucmVsZWFzZSgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9Fd2tWaWV3LmgKaW5kZXggYTIxM2Y5Ny4uMTUzYzZjYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1
ZGUgIldLRWluYVNoYXJlZFN0cmluZy5oIgogI2luY2x1ZGUgIldLR2VvbWV0cnkuaCIKICNpbmNs
dWRlICJXS1JldGFpblB0ci5oIgorI2luY2x1ZGUgIldlYlZpZXcuaCIKICNpbmNsdWRlICJld2tf
dXJsX3JlcXVlc3RfcHJpdmF0ZS5oIgogI2luY2x1ZGUgPEV2YXMuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0Zsb2F0UG9pbnQuaD4KQEAgLTQ5LDYgKzUwLDEwIEBACiAjaW5jbHVkZSAiRXZhc0dMU3Vy
ZmFjZS5oIgogI2VuZGlmCiAKKyNpbmNsdWRlICJXZWJDb250ZXh0LmgiCisjaW5jbHVkZSAiV2Vi
UGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIKKwogbmFtZXNwYWNlIFdl
YktpdCB7CiBjbGFzcyBDb250ZXh0TWVudUNsaWVudEVmbDsKIGNsYXNzIEZpbmRDbGllbnRFZmw7
CkBAIC05OCwxOSArMTAzLDIwIEBAIHR5cGVkZWYgc3RydWN0IEV3a19WaWV3X1NtYXJ0X0RhdGEg
RXdrX1ZpZXdfU21hcnRfRGF0YTsKIAogY2xhc3MgRXdrVmlldyB7CiBwdWJsaWM6Ci0KICAgICBl
bnVtIFZpZXdCZWhhdmlvciB7CiAgICAgICAgIExlZ2FjeUJlaGF2aW9yLAogICAgICAgICBEZWZh
dWx0QmVoYXZpb3IKICAgICB9OwotICAgIEV3a1ZpZXcoRXZhc19PYmplY3QqIHZpZXcsIFBhc3NS
ZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgUGFzc1JlZlB0cjxXZWJLaXQ6OldlYlBhZ2VHcm91
cD4gcGFnZUdyb3VwLCBWaWV3QmVoYXZpb3IpOworICAgIEV3a1ZpZXcoRXZhc19PYmplY3QqIHZp
ZXcsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgV2ViS2l0OjpXZWJQYWdlR3JvdXAq
IHBhZ2VHcm91cCwgVmlld0JlaGF2aW9yKTsKICAgICB+RXdrVmlldygpOwogCiAgICAgc3RhdGlj
IEV3a1ZpZXcqIGZyb21FdmFzT2JqZWN0KGNvbnN0IEV2YXNfT2JqZWN0KiB2aWV3KTsKICAgICBF
dmFzX09iamVjdCogdmlldygpIHsgcmV0dXJuIG1fZXZhc09iamVjdDsgfQogCi0gICAgV0tQYWdl
UmVmIHdrUGFnZSgpOwotICAgIFdlYktpdDo6V2ViUGFnZVByb3h5KiBwYWdlKCkgeyByZXR1cm4g
bV9wYWdlUHJveHkuZ2V0KCk7IH0KKyAgICBXS1ZpZXdSZWYgd2tWaWV3KCkgY29uc3QgeyByZXR1
cm4gdG9BUEkobV93ZWJWaWV3LmdldCgpKTsgfQorICAgIFdLUGFnZVJlZiB3a1BhZ2UoKSBjb25z
dDsKKworICAgIFdlYktpdDo6V2ViUGFnZVByb3h5KiBwYWdlKCkgeyByZXR1cm4gbV93ZWJWaWV3
LT5wYWdlKCk7IH0KICAgICBFd2tDb250ZXh0KiBld2tDb250ZXh0KCkgeyByZXR1cm4gbV9jb250
ZXh0LmdldCgpOyB9CiAgICAgRXdrU2V0dGluZ3MqIHNldHRpbmdzKCkgeyByZXR1cm4gbV9zZXR0
aW5ncy5nZXQoKTsgfQogICAgIEV3a0JhY2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRMaXN0KCkg
eyByZXR1cm4gbV9iYWNrRm9yd2FyZExpc3QuZ2V0KCk7IH0KQEAgLTI0NSw3ICsyNTEsNyBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9wZW5kaW5nU3VyZmFjZVJlc2l6ZTsKICNlbmRpZgogICAgIE93
blB0cjxXZWJLaXQ6OlBhZ2VDbGllbnRCYXNlPiBtX3BhZ2VDbGllbnQ7Ci0gICAgUmVmUHRyPFdl
YktpdDo6V2ViUGFnZVByb3h5PiBtX3BhZ2VQcm94eTsKKyAgICBSZWZQdHI8V2ViS2l0OjpXZWJW
aWV3PiBtX3dlYlZpZXc7CiAgICAgT3duUHRyPFdlYktpdDo6UGFnZUxvYWRDbGllbnRFZmw+IG1f
cGFnZUxvYWRDbGllbnQ7CiAgICAgT3duUHRyPFdlYktpdDo6UGFnZVBvbGljeUNsaWVudEVmbD4g
bV9wYWdlUG9saWN5Q2xpZW50OwogICAgIE93blB0cjxXZWJLaXQ6OlBhZ2VVSUNsaWVudEVmbD4g
bV9wYWdlVUlDbGllbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
dmlldy5jcHAKaW5kZXggNzJhNmFmYS4uYzU0OWI4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcApAQCAtNTA1LDcgKzUwNSw3IEBAIHN0YXRpYyBp
bmxpbmUgRXZhc19TbWFydCogY3JlYXRlRXdrVmlld1NtYXJ0Q2xhc3Modm9pZCkKICAgICByZXR1
cm4gc21hcnQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRXZhc19PYmplY3QqIGNyZWF0ZUV3a1ZpZXco
RXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBj
b250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYgPSAwLCBFd2tWaWV3OjpWaWV3QmVo
YXZpb3IgYmVoYXZpb3IgPSBFd2tWaWV3OjpEZWZhdWx0QmVoYXZpb3IpCitzdGF0aWMgaW5saW5l
IEV3a1ZpZXcqIGNyZWF0ZUV3a1ZpZXcoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwg
UGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBS
ZWYgPSAwLCBFd2tWaWV3OjpWaWV3QmVoYXZpb3IgYmVoYXZpb3IgPSBFd2tWaWV3OjpEZWZhdWx0
QmVoYXZpb3IpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGNhbnZhcywg
MCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0LCAwKTsKQEAgLTUy
NSwyMSArNTI1LDI2IEBAIHN0YXRpYyBpbmxpbmUgRXZhc19PYmplY3QqIGNyZWF0ZUV3a1ZpZXco
RXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgUGFzc1JlCiAgICAgLy8gRGVmYXVsdCBX
ZWJQYWdlR3JvdXAgaXMgY3JlYXRlZCBpbiBXZWJDb250ZXh0IGNvbnN0cnVjdG9yIGlmIHRoZSBw
YWdlR3JvdXBSZWYgaXMgMCwKICAgICAvLyBzbyB3ZSBkbyBub3QgbmVlZCB0byBjcmVhdGUgaXQg
aGVyZS4KICAgICBzbWFydERhdGEtPnByaXYgPSBuZXcgRXdrVmlldyhld2tWaWV3LCBjb250ZXh0
LCB0b0ltcGwocGFnZUdyb3VwUmVmKSwgYmVoYXZpb3IpOwotICAgIHJldHVybiBld2tWaWV3Owor
CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+cHJpdjsKIH0KIAogLyoqCiAgKiBAaW50ZXJuYWwKICAq
IENvbnN0cnVjdHMgYSBld2tfdmlldyBFdmFzX09iamVjdCB3aXRoIFdLVHlwZSBwYXJhbWV0ZXJz
LgogICovCi1FdmFzX09iamVjdCogZXdrX3ZpZXdfYmFzZV9hZGQoRXZhcyogY2FudmFzLCBXS0Nv
bnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBFd2tWaWV3
OjpWaWV3QmVoYXZpb3IgYmVoYXZpb3IpCitFd2tWaWV3KiBld2tfdmlld19iYXNlX2FkZChFdmFz
KiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3Jv
dXBSZWYsIEV3a1ZpZXc6OlZpZXdCZWhhdmlvciBiZWhhdmlvcikKIHsKICAgICByZXR1cm4gY3Jl
YXRlRXdrVmlldyhjYW52YXMsIGNyZWF0ZUV3a1ZpZXdTbWFydENsYXNzKCksIGNvbnRleHRSZWYg
PyBFd2tDb250ZXh0OjpjcmVhdGUodG9JbXBsKGNvbnRleHRSZWYpKSA6IEV3a0NvbnRleHQ6OmRl
ZmF1bHRDb250ZXh0KCksIHBhZ2VHcm91cFJlZiwgYmVoYXZpb3IpOwogfQogCiBFdmFzX09iamVj
dCogZXdrX3ZpZXdfc21hcnRfYWRkKEV2YXMqIGNhbnZhcywgRXZhc19TbWFydCogc21hcnQsIEV3
a19Db250ZXh0KiBjb250ZXh0KQogewotICAgIHJldHVybiBjcmVhdGVFd2tWaWV3KGNhbnZhcywg
c21hcnQsIGV3a19vYmplY3RfY2FzdDxFd2tDb250ZXh0Kj4oY29udGV4dCkpOworICAgIEV3a1Zp
ZXcqIGV3a1ZpZXcgPSBjcmVhdGVFd2tWaWV3KGNhbnZhcywgc21hcnQsIGV3a19vYmplY3RfY2Fz
dDxFd2tDb250ZXh0Kj4oY29udGV4dCkpOworICAgIGlmICghZXdrVmlldykKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICByZXR1cm4gZXdrVmlldy0+dmlldygpOwogfQogCiBFdmFzX09iamVjdCog
ZXdrX3ZpZXdfYWRkX3dpdGhfY29udGV4dChFdmFzKiBjYW52YXMsIEV3a19Db250ZXh0KiBjb250
ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Zp
ZXdfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdf
cHJpdmF0ZS5oCmluZGV4IDgzYjRjOTcuLmM0OTEyZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19wcml2YXRlLmgKQEAgLTI1LDYgKzI1LDYg
QEAKICNpbmNsdWRlIDxFdmFzLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KIAotRXZh
c19PYmplY3QqIGV3a192aWV3X2Jhc2VfYWRkKEV2YXMqIGNhbnZhcywgV0tDb250ZXh0UmVmLCBX
S1BhZ2VHcm91cFJlZiwgRXdrVmlldzo6Vmlld0JlaGF2aW9yKTsKK0V3a1ZpZXcqIGV3a192aWV3
X2Jhc2VfYWRkKEV2YXMqIGNhbnZhcywgV0tDb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiwgRXdr
Vmlldzo6Vmlld0JlaGF2aW9yKTsKIAogI2VuZGlmIC8vIGV3a192aWV3X3ByaXZhdGVfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVm
bC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkluc3BlY3RvclByb3h5RWZs
LmNwcAppbmRleCA0NjJiMjZkLi44NTNkNDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZWZsL1dlYkluc3BlY3RvclByb3h5RWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZWZsL1dlYkluc3BlY3RvclByb3h5RWZsLmNwcApAQCAtOTgsMTQgKzk4LDE5
IEBAIFdlYlBhZ2VQcm94eSogV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRlSW5zcGVj
dG9yUGFnZSgpCiAgICAgaWYgKCFtX2luc3BlY3RvcldpbmRvdykKICAgICAgICAgcmV0dXJuIDA7
CiAKLSAgICBtX2luc3BlY3RvclZpZXcgPSBld2tfdmlld19iYXNlX2FkZChlY29yZV9ldmFzX2dl
dChtX2luc3BlY3RvcldpbmRvdyksIHRvQVBJKHBhZ2UoKS0+cHJvY2VzcygpLT5jb250ZXh0KCkp
LCB0b0FQSShpbnNwZWN0b3JQYWdlR3JvdXAoKSksIEV3a1ZpZXc6OkxlZ2FjeUJlaGF2aW9yKTsK
LSAgICBFd2tWaWV3KiBpbnNwZWN0b3JWaWV3SW1wbCA9IEV3a1ZpZXc6OmZyb21FdmFzT2JqZWN0
KG1faW5zcGVjdG9yVmlldyk7Ci0gICAgaW5zcGVjdG9yVmlld0ltcGwtPnNldFRoZW1lUGF0aChU
RVNUX1RIRU1FX0RJUiAiL2RlZmF1bHQuZWRqIik7CisgICAgLy8gRklYTUU6IFJlZmFjdG9yIHRv
IHVzZSBXS1ZpZXdSZWYuCisgICAgRXdrVmlldyogZXdrVmlldyA9IGV3a192aWV3X2Jhc2VfYWRk
KGVjb3JlX2V2YXNfZ2V0KG1faW5zcGVjdG9yV2luZG93KSwgdG9BUEkocGFnZSgpLT5wcm9jZXNz
KCktPmNvbnRleHQoKSksIHRvQVBJKGluc3BlY3RvclBhZ2VHcm91cCgpKSwgRXdrVmlldzo6TGVn
YWN5QmVoYXZpb3IpOworICAgIGlmICghZXdrVmlldykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBtX2luc3BlY3RvclZpZXcgPSBld2tWaWV3LT52aWV3KCk7CisKKyAgICBld2tWaWV3LT5zZXRU
aGVtZVBhdGgoVEVTVF9USEVNRV9ESVIgIi9kZWZhdWx0LmVkaiIpOwogCi0gICAgRXdrX1NldHRp
bmdzKiBzZXR0aW5ncyA9IGluc3BlY3RvclZpZXdJbXBsLT5zZXR0aW5ncygpOworICAgIEV3a19T
ZXR0aW5ncyogc2V0dGluZ3MgPSBld2tWaWV3LT5zZXR0aW5ncygpOwogICAgIGV3a19zZXR0aW5n
c19maWxlX2FjY2Vzc19mcm9tX2ZpbGVfdXJsc19hbGxvd2VkX3NldChzZXR0aW5ncywgdHJ1ZSk7
CiAKLSAgICByZXR1cm4gaW5zcGVjdG9yVmlld0ltcGwtPnBhZ2UoKTsKKyAgICByZXR1cm4gZXdr
Vmlldy0+cGFnZSgpOwogfQogCiB2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybU9wZW4o
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uYzFiMWZmNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5jcHAKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJWaWV3LmgiCisK
KyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisjaW5jbHVkZSAiV2ViRnVsbFNjcmVlbk1hbmFn
ZXJQcm94eS5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJWaWV3OjpXZWJW
aWV3KFdlYkNvbnRleHQqIGNvbnRleHQsIFBhZ2VDbGllbnQqIHBhZ2VDbGllbnQsIFdlYlBhZ2VH
cm91cCogcGFnZUdyb3VwLCBFdmFzX09iamVjdCogZXZhc09iamVjdCkKKyAgICA6IG1fd2ViUGFn
ZVByb3h5KGNvbnRleHQtPmNyZWF0ZVdlYlBhZ2UocGFnZUNsaWVudCwgcGFnZUdyb3VwKSkKKyAg
ICAsIG1fZXZhc09iamVjdChldmFzT2JqZWN0KQoreworICAgIG1fd2ViUGFnZVByb3h5LT5wYWdl
R3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQo
dHJ1ZSk7CisgICAgbV93ZWJQYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5z
ZXRGb3JjZUNvbXBvc2l0aW5nTW9kZSh0cnVlKTsKKworICAgIGNoYXIqIGRlYnVnVmlzdWFsc0Vu
dmlyb25tZW50ID0gZ2V0ZW52KCJXRUJLSVRfU0hPV19DT01QT1NJVElOR19ERUJVR19WSVNVQUxT
Iik7CisgICAgYm9vbCBzaG93RGVidWdWaXN1YWxzID0gZGVidWdWaXN1YWxzRW52aXJvbm1lbnQg
JiYgIXN0cmNtcChkZWJ1Z1Zpc3VhbHNFbnZpcm9ubWVudCwgIjEiKTsKKyAgICBtX3dlYlBhZ2VQ
cm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldENvbXBvc2l0aW5nQm9yZGVyc1Zp
c2libGUoc2hvd0RlYnVnVmlzdWFscyk7CisgICAgbV93ZWJQYWdlUHJveHktPnBhZ2VHcm91cCgp
LT5wcmVmZXJlbmNlcygpLT5zZXRDb21wb3NpdGluZ1JlcGFpbnRDb3VudGVyc1Zpc2libGUoc2hv
d0RlYnVnVmlzdWFscyk7CisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgbV93ZWJQ
YWdlUHJveHktPmZ1bGxTY3JlZW5NYW5hZ2VyKCktPnNldFdlYlZpZXcobV9ldmFzT2JqZWN0KTsK
KyNlbmRpZgorfQorCitXZWJWaWV3Ojp+V2ViVmlldygpCit7CisgICAgbV93ZWJQYWdlUHJveHkt
PmNsb3NlKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6aW5pdGlhbGl6ZSgpCit7CisgICAgbV93ZWJQ
YWdlUHJveHktPmluaXRpYWxpemVXZWJQYWdlKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6c2V0VGhl
bWVQYXRoKFdLU3RyaW5nUmVmIHRoZW1lKQoreworICAgIG1fd2ViUGFnZVByb3h5LT5zZXRUaGVt
ZVBhdGgodG9XVEZTdHJpbmcodGhlbWUpLnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIFdlYlZp
ZXc6OnN1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpCit7CisgICAgbV93ZWJQ
YWdlUHJveHktPnN1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworfQorCit2
b2lkIFdlYlZpZXc6OnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCkKK3sKKyAg
ICBtX3dlYlBhZ2VQcm94eS0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZWZsL1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2Vi
Vmlldy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxZTc2NmQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuaApAQCAt
MCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEludGVsIENvcnBvcmF0aW9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJWaWV3X2gKKyNkZWZp
bmUgV2ViVmlld19oCisKKyNpbmNsdWRlICJBUElPYmplY3QuaCIKKyNpbmNsdWRlICJQYWdlQ2xp
ZW50LmgiCisjaW5jbHVkZSAiV2ViQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5o
IgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgi
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJWaWV3IDogcHVibGljIEFQSU9iamVj
dCB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IFR5cGUgQVBJVHlwZSA9IFR5cGVWaWV3Owor
CisgICAgV2ViVmlldyhXZWJDb250ZXh0KiwgUGFnZUNsaWVudCosIFdlYlBhZ2VHcm91cCosIEV2
YXNfT2JqZWN0Kik7CisgICAgdmlydHVhbCB+V2ViVmlldygpOworCisgICAgdm9pZCBpbml0aWFs
aXplKCk7CisKKyAgICBXS1BhZ2VSZWYgcGFnZVJlZigpIGNvbnN0IHsgcmV0dXJuIHRvQVBJKG1f
d2ViUGFnZVByb3h5LmdldCgpKTsgfQorCisgICAgdm9pZCBzZXRUaGVtZVBhdGgoV0tTdHJpbmdS
ZWYpOworICAgIHZvaWQgc3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7Cisg
ICAgdm9pZCByZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworCisgICAgLy8g
RklYTUU6IFJlbW92ZSB3aGVuIHBvc3NpYmxlLgorICAgIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0
KCkgeyByZXR1cm4gbV9ldmFzT2JqZWN0OyB9CisgICAgV2ViUGFnZVByb3h5KiBwYWdlKCkgeyBy
ZXR1cm4gbV93ZWJQYWdlUHJveHkuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIFR5
cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIEFQSVR5cGU7IH0KKworICAgIFJlZlB0cjxXZWJQYWdl
UHJveHk+IG1fd2ViUGFnZVByb3h5OworICAgIEV2YXNfT2JqZWN0KiBtX2V2YXNPYmplY3Q7Cit9
OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hh
bmdlTG9nCmluZGV4IDdkMmQ1NzYuLjFhNWRjNzc2IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VM
b2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTMtMDEtMjkgIEtl
bm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuICA8a2VubmV0aEB3ZWJraXQub3JnPgorCisgICAgICAg
IFtFRkxdW1dLMl0gSW50cm9kdWNlIGEgV2ViVmlldyBjbGFzcyBhcyBjb3VudGVycGFydCBmb3Ig
V0tWaWV3UmVmCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMDc5MzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDaGFuZ2UgcGxhdGZvcm1WaWV3IHRvIGJlIGEgV0tWaWV3IGFuZCB1c2UgV0tWaWV3R2V0RXZh
c09iamVjdAorICAgICAgICBmb3IgdGhlIHBsYWNlcyB3aGVyZSBhbiBFdmFzX09iamVjdCBpcyBu
ZWVkZWQuCisKKyAgICAgICAgSW5zdGVhZCBvZiBleHRyYWN0aW5nIHRoZSBFY29yZV9FdmFzKiBm
cm9tIHRoZSBtX3ZpZXcgd2UgdXNlCisgICAgICAgIHRoZSBtX3dpbmRvdyBpbnN0ZWFkLCB3aGlj
aCBhY3R1YWxseSBob2xkcyB0aGUgaXQuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1BsYXRm
b3JtV2ViVmlldy5oOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvZWZsL1BsYXRmb3JtV2ViVmll
dy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQbGF0Zm9ybVdlYlZpZXc6OlBsYXRmb3Jt
V2ViVmlldyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQbGF0Zm9ybVdlYlZpZXc6On5QbGF0
Zm9ybVdlYlZpZXcpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGxhdGZvcm1XZWJWaWV3Ojpy
ZXNpemVUbyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQbGF0Zm9ybVdlYlZpZXc6OnBhZ2Up
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGxhdGZvcm1XZWJWaWV3OjpzaW11bGF0ZVNwYWNl
YmFyS2V5UHJlc3MpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGxhdGZvcm1XZWJWaWV3Ojpz
aW11bGF0ZU1vdXNlTW92ZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQbGF0Zm9ybVdlYlZp
ZXc6OnNpbXVsYXRlUmlnaHRDbGljayk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9QbGF0
Zm9ybVdlYlZpZXcuaDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2VmbC9FdmVudFNlbmRl
clByb3h5RWZsLmNwcDoKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6c2VuZFRvdWNo
RXZlbnQpOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5OjpzZXRUb3VjaE1vZGlmaWVy
KToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2VmbC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3Bw
OgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6OlBsYXRmb3JtV2ViVmlldyk6CisgICAg
ICAgIChXVFI6OlBsYXRmb3JtV2ViVmlldzo6flBsYXRmb3JtV2ViVmlldyk6CisgICAgICAgIChX
VFI6OlBsYXRmb3JtV2ViVmlldzo6cmVzaXplVG8pOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVdl
YlZpZXc6OnBhZ2UpOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6OmZvY3VzKToKKyAg
ICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3Ojp3aW5kb3dGcmFtZSk6CisgICAgICAgIChXVFI6
OlBsYXRmb3JtV2ViVmlldzo6c2V0V2luZG93RnJhbWUpOgorICAgICAgICAoV1RSOjpQbGF0Zm9y
bVdlYlZpZXc6OndpbmRvd1NuYXBzaG90SW1hZ2UpOgorCiAyMDEzLTAxLTI5ICBBbGFuIEN1dHRl
ciAgPGFsYW5jdXR0ZXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIE5lZWQgYSBjci1saW51eCBk
ZWJ1ZyBFV1MgYm90CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2Vi
Vmlldy5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdlYlZpZXcuaAppbmRleCA1YWQx
ZWVkLi5kY2FmNDQ4IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2Vi
Vmlldy5oCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XZWJWaWV3LmgKQEAgLTQ3
LDEzICs0Nyw4IEBAIHR5cGVkZWYgSFdORCBQbGF0Zm9ybVdpbmRvdzsKIHR5cGVkZWYgV0tWaWV3
UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlwZWRlZiBHdGtXaWRnZXQgKlBsYXRmb3JtV2luZG93Owog
I2VsaWYgUExBVEZPUk0oRUZMKQotI2lmIFVTRShFTykKLXR5cGVkZWYgc3RydWN0IF9FbyBFdmFz
X09iamVjdDsKLSNlbHNlCi10eXBlZGVmIHN0cnVjdCBfRXZhc19PYmplY3QgRXZhc19PYmplY3Q7
Ci0jZW5kaWYKIHR5cGVkZWYgc3RydWN0IF9FY29yZV9FdmFzIEVjb3JlX0V2YXM7Ci10eXBlZGVm
IEV2YXNfT2JqZWN0KiBQbGF0Zm9ybVdLVmlldzsKK3R5cGVkZWYgV0tWaWV3UmVmIFBsYXRmb3Jt
V0tWaWV3OwogdHlwZWRlZiBFY29yZV9FdmFzKiBQbGF0Zm9ybVdpbmRvdzsKICNlbmRpZgogCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2VmbC9QbGF0Zm9ybVdlYlZpZXcuY3BwIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9lZmwvUGxhdGZvcm1XZWJWaWV3LmNwcAppbmRleCBkNTQ0OWVi
Li5iYWUzNDdjIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2VmbC9QbGF0Zm9ybVdl
YlZpZXcuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZWZsL1BsYXRmb3JtV2ViVmlldy5j
cHAKQEAgLTY1LDMzICs2NSwzOSBAQCBQbGF0Zm9ybVdlYlZpZXc6OlBsYXRmb3JtV2ViVmlldyhX
S0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdybwogewogICAgIG1f
d2luZG93ID0gaW5pdEVjb3JlRXZhcygpOwogICAgIEV2YXMqIGV2YXMgPSBlY29yZV9ldmFzX2dl
dChtX3dpbmRvdyk7Ci0gICAgbV92aWV3ID0gdG9JbXBsKFdLVmlld0NyZWF0ZShldmFzLCBjb250
ZXh0UmVmLCBwYWdlR3JvdXBSZWYpKTsKLSAgICBld2tfdmlld190aGVtZV9zZXQobV92aWV3LCBU
SEVNRV9ESVIiL2RlZmF1bHQuZWRqIik7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tf
YWRkKG1fdmlldywgIndlYnByb2Nlc3MsY3Jhc2hlZCIsIG9uV2ViUHJvY2Vzc0NyYXNoZWQsIDAp
OworICAgIG1fdmlldyA9IFdLVmlld0NyZWF0ZShldmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBS
ZWYpOworICAgIGV3a192aWV3X3RoZW1lX3NldChXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyks
IFRIRU1FX0RJUiIvZGVmYXVsdC5lZGoiKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFj
a19hZGQoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCAid2VicHJvY2VzcyxjcmFzaGVkIiwg
b25XZWJQcm9jZXNzQ3Jhc2hlZCwgMCk7CiAgICAgcmVzaXplVG8oNjAwLCA4MDApOwogfQogCiBQ
bGF0Zm9ybVdlYlZpZXc6On5QbGF0Zm9ybVdlYlZpZXcoKQogewotICAgIGV2YXNfb2JqZWN0X2Rl
bChtX3ZpZXcpOworICAgIC8vIFJlbGVhc2UgZmlyc3QuIFdlYlZpZXcgc2hvdWxkIG5vdCBsaXZl
IGxvbmdlciB0aGFuIEV3a1ZpZXcsIGFzIEV3a1ZpZXcgb3ducyBvYmplY3RzIHRoYXQgcGFnZSBw
cm94eSByZWZlcnMgdG8uCisgICAgV0tSZWxlYXNlKG1fdmlldyk7CisKKyAgICAvLyBGSVhNRTog
VGhlIEMgV0tWaWV3IEFQSSBjdXJyZW50bHkgY3JlYXRlcyB0aGUgRXZhc19PYmplY3QsIHNvIHdl
IGhhdmUgdG8gZGVzdHJ1Y3QgaXQKKyAgICAvLyAoYW5kIGl0cyBkZXBlbmRlbmNpZXMgRXdrVmll
dyBhbmQgV2ViS2l0OjpXZWJWaWV3KSB0aGlzIHdheSwgdW50aWwgdGhpcyBnZXQgZml4ZWQuCisg
ICAgZXZhc19vYmplY3RfZGVsKFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSk7CisKICAgICBl
Y29yZV9ldmFzX2ZyZWUobV93aW5kb3cpOwogICAgIGVjb3JlX2V2YXNfc2h1dGRvd24oKTsKIH0K
IAogdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnJlc2l6ZVRvKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25l
ZCBoZWlnaHQpCiB7Ci0gICAgZXZhc19vYmplY3RfcmVzaXplKG1fdmlldywgd2lkdGgsIGhlaWdo
dCk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSwg
d2lkdGgsIGhlaWdodCk7CiB9CiAKIFdLUGFnZVJlZiBQbGF0Zm9ybVdlYlZpZXc6OnBhZ2UoKSBj
b25zdAogewotICAgIHJldHVybiBXS1ZpZXdHZXRQYWdlKHRvQVBJKG1fdmlldykpOworICAgIHJl
dHVybiBXS1ZpZXdHZXRQYWdlKG1fdmlldyk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3Ojpz
aW11bGF0ZVNwYWNlYmFyS2V5UHJlc3MoKQogewogICAgIEV2YXMqIGV2YXMgPSBlY29yZV9ldmFz
X2dldChtX3dpbmRvdyk7Ci0gICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KG1fdmlldywgdHJ1ZSk7
CisgICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSwg
dHJ1ZSk7CiAgICAgZXZhc19ldmVudF9mZWVkX2tleV9kb3duKGV2YXMsICJzcGFjZSIsICJzcGFj
ZSIsICIgIiwgMCwgMCwgMCk7CiAgICAgZXZhc19ldmVudF9mZWVkX2tleV91cChldmFzLCAic3Bh
Y2UiLCAic3BhY2UiLCAiICIsIDAsIDEsIDApOwogfQpAQCAtOTksMTQgKzEwNSwxNCBAQCB2b2lk
IFBsYXRmb3JtV2ViVmlldzo6c2ltdWxhdGVTcGFjZWJhcktleVByZXNzKCkKIHZvaWQgUGxhdGZv
cm1XZWJWaWV3OjpzaW11bGF0ZU1vdXNlTW92ZSh1bnNpZ25lZCB4LCB1bnNpZ25lZCB5KQogewog
ICAgIEV2YXMqIGV2YXMgPSBlY29yZV9ldmFzX2dldChtX3dpbmRvdyk7Ci0gICAgZXZhc19vYmpl
Y3Rfc2hvdyhtX3ZpZXcpOworICAgIGV2YXNfb2JqZWN0X3Nob3coV0tWaWV3R2V0RXZhc09iamVj
dChtX3ZpZXcpKTsKICAgICBldmFzX2V2ZW50X2ZlZWRfbW91c2VfbW92ZShldmFzLCB4LCB5LCAw
LCAwKTsKIH0KIAogdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnNpbXVsYXRlUmlnaHRDbGljayh1bnNp
Z25lZCB4LCB1bnNpZ25lZCB5KQogewogICAgIEV2YXMqIGV2YXMgPSBlY29yZV9ldmFzX2dldCht
X3dpbmRvdyk7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhtX3ZpZXcpOworICAgIGV2YXNfb2JqZWN0
X3Nob3coV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpKTsKICAgICBldmFzX2V2ZW50X2ZlZWRf
bW91c2VfbW92ZShldmFzLCB4LCB5LCAwLCAwKTsKICAgICBldmFzX2V2ZW50X2ZlZWRfbW91c2Vf
ZG93bihldmFzLCAzLCBFVkFTX0JVVFRPTl9OT05FLCAwLCAwKTsKICAgICBldmFzX2V2ZW50X2Zl
ZWRfbW91c2VfdXAoZXZhcywgMywgRVZBU19CVVRUT05fTk9ORSwgMCwgMCk7CmRpZmYgLS1naXQg
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaAppbmRleCA4ZjlkY2RiLi41MWM0YmNjIDEwMDY0
NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCisrKyBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgKQEAgLTU0LDEzICs1NCw4IEBA
IHR5cGVkZWYgc3RydWN0IF9HdGtXaWRnZXQgR3RrV2lkZ2V0OwogdHlwZWRlZiBXS1ZpZXdSZWYg
UGxhdGZvcm1XS1ZpZXc7CiB0eXBlZGVmIEd0a1dpZGdldCogUGxhdGZvcm1XaW5kb3c7CiAjZWxp
ZiBQTEFURk9STShFRkwpCi0jaWYgVVNFKEVPKQotdHlwZWRlZiBzdHJ1Y3QgX0VvIEV2YXNfT2Jq
ZWN0OwotI2Vsc2UKLXR5cGVkZWYgc3RydWN0IF9FdmFzX09iamVjdCBFdmFzX09iamVjdDsKLSNl
bmRpZgogdHlwZWRlZiBzdHJ1Y3QgX0Vjb3JlX0V2YXMgRWNvcmVfRXZhczsKLXR5cGVkZWYgRXZh
c19PYmplY3QqIFBsYXRmb3JtV0tWaWV3OwordHlwZWRlZiBXS1ZpZXdSZWYgUGxhdGZvcm1XS1Zp
ZXc7CiB0eXBlZGVmIEVjb3JlX0V2YXMqIFBsYXRmb3JtV2luZG93OwogI2VuZGlmCiAKZGlmZiAt
LWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3Bw
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvRXZlbnRTZW5kZXJQcm94eUVmbC5jcHAKaW5k
ZXggZjI4MjlhOS4uMTM5MjBlYyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9l
ZmwvRXZlbnRTZW5kZXJQcm94eUVmbC5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9l
ZmwvRXZlbnRTZW5kZXJQcm94eUVmbC5jcHAKQEAgLTQzOCw3ICs0MzgsNyBAQCB2b2lkIEV2ZW50
U2VuZGVyUHJveHk6OnNlbmRUb3VjaEV2ZW50KEV3a19Ub3VjaF9FdmVudF9UeXBlIGV2ZW50VHlw
ZSkKIHsKICAgICBBU1NFUlQobV90b3VjaFBvaW50cyk7CiAKLSAgICBFdmFzX09iamVjdCogZXdr
VmlldyA9IG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpOwor
ICAgIEV2YXNfT2JqZWN0KiBld2tWaWV3ID0gV0tWaWV3R2V0RXZhc09iamVjdChtX3Rlc3RDb250
cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKSk7CiAgICAgZXdrX3ZpZXdfZmVl
ZF90b3VjaF9ldmVudChld2tWaWV3LCBldmVudFR5cGUsIG1fdG91Y2hQb2ludHMsIGV2YXNfa2V5
X21vZGlmaWVyX2dldChldmFzX29iamVjdF9ldmFzX2dldChld2tWaWV3KSkpOwogCiAgICAgRWlu
YV9MaXN0KiBsaXN0OwpAQCAtNDkwLDEyICs0OTAsMTQgQEAgdm9pZCBFdmVudFNlbmRlclByb3h5
Ojp1cGRhdGVUb3VjaFBvaW50KGludCBpbmRleCwgaW50IHgsIGludCB5KQogCiB2b2lkIEV2ZW50
U2VuZGVyUHJveHk6OnNldFRvdWNoTW9kaWZpZXIoV0tFdmVudE1vZGlmaWVycyBtb2RpZmllciwg
Ym9vbCBlbmFibGUpCiB7CisgICAgRXZhc19PYmplY3QqIGV3a1ZpZXcgPSBXS1ZpZXdHZXRFdmFz
T2JqZWN0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpKTsK
KwogICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IChzaXplb2YobW9kaWZpZXJO
YW1lcykgLyBzaXplb2YoY2hhciopKTsgKytpbmRleCkgewogICAgICAgICBpZiAobW9kaWZpZXIg
JiAoMSA8PCBpbmRleCkpIHsKICAgICAgICAgICAgIGlmIChlbmFibGUpCi0gICAgICAgICAgICAg
ICAgZXZhc19rZXlfbW9kaWZpZXJfb24oZXZhc19vYmplY3RfZXZhc19nZXQobV90ZXN0Q29udHJv
bGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCkpLCBtb2RpZmllck5hbWVzW2luZGV4
XSk7CisgICAgICAgICAgICAgICAgZXZhc19rZXlfbW9kaWZpZXJfb24oZXZhc19vYmplY3RfZXZh
c19nZXQoZXdrVmlldyksIG1vZGlmaWVyTmFtZXNbaW5kZXhdKTsKICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBldmFzX2tleV9tb2RpZmllcl9vZmYoZXZhc19vYmplY3RfZXZhc19n
ZXQobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCkpLCBtb2Rp
Zmllck5hbWVzW2luZGV4XSk7CisgICAgICAgICAgICAgICAgZXZhc19rZXlfbW9kaWZpZXJfb2Zm
KGV2YXNfb2JqZWN0X2V2YXNfZ2V0KGV3a1ZpZXcpLCBtb2RpZmllck5hbWVzW2luZGV4XSk7CiAg
ICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2Vm
bC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxh
dGZvcm1XZWJWaWV3RWZsLmNwcAppbmRleCAxY2NjMGJkLi40ZTUxOTc4IDEwMDY0NAotLS0gYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3BwCisrKyBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5jcHAKQEAgLTYxLDU2
ICs2MSw1OSBAQCBQbGF0Zm9ybVdlYlZpZXc6OlBsYXRmb3JtV2ViVmlldyhXS0NvbnRleHRSZWYg
Y29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwLAogICAgIEV2YXMqIGV2YXMgPSBlY29y
ZV9ldmFzX2dldChtX3dpbmRvdyk7CiAKICAgICBpZiAobV91c2luZ0ZpeGVkTGF5b3V0KSB7Ci0g
ICAgICAgIG1fdmlldyA9IHRvSW1wbChXS1ZpZXdDcmVhdGVXaXRoRml4ZWRMYXlvdXQoZXZhcywg
Y29udGV4dCwgcGFnZUdyb3VwKSk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShtX3ZpZXcs
IDgwMCwgNjAwKTsKKyAgICAgICAgbV92aWV3ID0gV0tWaWV3Q3JlYXRlV2l0aEZpeGVkTGF5b3V0
KGV2YXMsIGNvbnRleHQsIHBhZ2VHcm91cCk7CisgICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShX
S1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIDgwMCwgNjAwKTsKICAgICB9IGVsc2UKLSAgICAg
ICAgbV92aWV3ID0gdG9JbXBsKFdLVmlld0NyZWF0ZShldmFzLCBjb250ZXh0LCBwYWdlR3JvdXAp
KTsKKyAgICAgICAgbV92aWV3ID0gV0tWaWV3Q3JlYXRlKGV2YXMsIGNvbnRleHQsIHBhZ2VHcm91
cCk7CiAKLSAgICBld2tfdmlld190aGVtZV9zZXQobV92aWV3LCBUSEVNRV9ESVIiL2RlZmF1bHQu
ZWRqIik7CisgICAgZXdrX3ZpZXdfdGhlbWVfc2V0KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3
KSwgVEhFTUVfRElSIi9kZWZhdWx0LmVkaiIpOwogICAgIG1fd2luZG93SXNLZXkgPSBmYWxzZTsK
LSAgICBldmFzX29iamVjdF9zaG93KG1fdmlldyk7CisgICAgZXZhc19vYmplY3Rfc2hvdyhXS1Zp
ZXdHZXRFdmFzT2JqZWN0KG1fdmlldykpOwogfQogCiBQbGF0Zm9ybVdlYlZpZXc6On5QbGF0Zm9y
bVdlYlZpZXcoKQogewotICAgIGV2YXNfb2JqZWN0X2RlbChtX3ZpZXcpOworICAgIC8vIFJlbGVh
c2UgZmlyc3QuIFdlYlZpZXcgc2hvdWxkIG5vdCBsaXZlIGxvbmdlciB0aGFuIEV3a1ZpZXcsIGFz
IEV3a1ZpZXcgb3ducyBvYmplY3RzIHRoYXQgcGFnZSBwcm94eSByZWZlcnMgdG8uCisgICAgV0tS
ZWxlYXNlKG1fdmlldyk7CisKKyAgICAvLyBGSVhNRTogVGhlIEMgV0tWaWV3IEFQSSBjdXJyZW50
bHkgY3JlYXRlcyB0aGUgRXZhc19PYmplY3QsIHNvIHdlIGhhdmUgdG8gZGVzdHJ1Y3QgaXQKKyAg
ICAvLyAoYW5kIGl0cyBkZXBlbmRlbmNpZXMgRXdrVmlldyBhbmQgV2ViS2l0OjpXZWJWaWV3KSB0
aGlzIHdheSwgdW50aWwgdGhpcyBnZXQgZml4ZWQuCisgICAgZXZhc19vYmplY3RfZGVsKFdLVmll
d0dldEV2YXNPYmplY3QobV92aWV3KSk7CisKICAgICBlY29yZV9ldmFzX2ZyZWUobV93aW5kb3cp
OwogfQogCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6cmVzaXplVG8odW5zaWduZWQgd2lkdGgsIHVu
c2lnbmVkIGhlaWdodCkKIHsKLSAgICBldmFzX29iamVjdF9yZXNpemUobV92aWV3LCB3aWR0aCwg
aGVpZ2h0KTsKKyAgICBldmFzX29iamVjdF9yZXNpemUoV0tWaWV3R2V0RXZhc09iamVjdChtX3Zp
ZXcpLCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogV0tQYWdlUmVmIFBsYXRmb3JtV2ViVmlldzo6cGFn
ZSgpCiB7Ci0gICAgcmV0dXJuIFdLVmlld0dldFBhZ2UodG9BUEkobV92aWV3KSk7CisgICAgcmV0
dXJuIFdLVmlld0dldFBhZ2UobV92aWV3KTsKIH0KIAogdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OmZv
Y3VzKCkKIHsKKyAgICBFdmFzX09iamVjdCogZXZhc09iamVjdCA9IFdLVmlld0dldEV2YXNPYmpl
Y3QobV92aWV3KTsKICAgICAvLyBJbiBhIGZldyBjYXNlcywgYW4gaWZyYW1lIG1pZ2h0IHJlY2Vp
dmUgZm9jdXMgZnJvbSBKYXZhU2NyaXB0IGFuZCBFdmFzIGlzIG5vdCBhd2FyZSBvZiBpdCBhdCBh
bGwKICAgICAvLyAoV2ViQ29yZVN1cHBvcnQ6OmZvY3VzZWRGcmFtZUNoYW5nZWQoKSBkb2VzIG5v
dCBlbWl0IGFueSBub3RpZmljYXRpb24pLiBXZSB0aGVuIG1hbnVhbGx5IHJlbW92ZSB0aGUKICAg
ICAvLyBmb2N1cyBmcm9tIHRoZSB2aWV3IHRvIG1ha2UgdGhlIGNhbGwgZ2l2ZSBmb2N1cyB0byBl
dmFzX29iamVjdF9mb2N1c19zZXQoLi4uLCB0cnVlKSB0byBiZSBlZmZlY3RmdWwuCi0gICAgaWYg
KFdLUGFnZUdldEZvY3VzZWRGcmFtZShwYWdlKCkpICE9IFdLUGFnZUdldE1haW5GcmFtZShwYWdl
KCkpKQotICAgICAgICBldmFzX29iamVjdF9mb2N1c19zZXQobV92aWV3LCBmYWxzZSk7Ci0gICAg
ZXZhc19vYmplY3RfZm9jdXNfc2V0KG1fdmlldywgdHJ1ZSk7CisgICAgZXZhc19vYmplY3RfZm9j
dXNfc2V0KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSwgV0tQYWdlR2V0Rm9jdXNlZEZyYW1l
KHBhZ2UoKSkgPT0gV0tQYWdlR2V0TWFpbkZyYW1lKHBhZ2UoKSkpOwogfQogCiBXS1JlY3QgUGxh
dGZvcm1XZWJWaWV3Ojp3aW5kb3dGcmFtZSgpCiB7CiAgICAgaW50IHgsIHksIHdpZHRoLCBoZWln
aHQ7CiAKLSAgICBFY29yZV9FdmFzKiBlZSA9IGVjb3JlX2V2YXNfZWNvcmVfZXZhc19nZXQoZXZh
c19vYmplY3RfZXZhc19nZXQobV92aWV3KSk7Ci0gICAgZWNvcmVfZXZhc19yZXF1ZXN0X2dlb21l
dHJ5X2dldChlZSwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQpOworICAgIGVjb3JlX2V2YXNfcmVx
dWVzdF9nZW9tZXRyeV9nZXQobV93aW5kb3csICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0KTsKIAog
ICAgIHJldHVybiBXS1JlY3RNYWtlKHgsIHksIHdpZHRoLCBoZWlnaHQpOwogfQogCiB2b2lkIFBs
YXRmb3JtV2ViVmlldzo6c2V0V2luZG93RnJhbWUoV0tSZWN0IGZyYW1lKQogewotICAgIEVjb3Jl
X0V2YXMqIGVlID0gZWNvcmVfZXZhc19lY29yZV9ldmFzX2dldChldmFzX29iamVjdF9ldmFzX2dl
dChtX3ZpZXcpKTsKLSAgICBlY29yZV9ldmFzX21vdmVfcmVzaXplKGVlLCBmcmFtZS5vcmlnaW4u
eCwgZnJhbWUub3JpZ2luLnksIGZyYW1lLnNpemUud2lkdGgsIGZyYW1lLnNpemUuaGVpZ2h0KTsK
KyAgICBlY29yZV9ldmFzX21vdmVfcmVzaXplKG1fd2luZG93LCBmcmFtZS5vcmlnaW4ueCwgZnJh
bWUub3JpZ2luLnksIGZyYW1lLnNpemUud2lkdGgsIGZyYW1lLnNpemUuaGVpZ2h0KTsKIH0KIAog
dm9pZCBQbGF0Zm9ybVdlYlZpZXc6OmFkZENocm9tZUlucHV0RmllbGQoKQpAQCAtMTI3LDE1ICsx
MzAsMTIgQEAgdm9pZCBQbGF0Zm9ybVdlYlZpZXc6Om1ha2VXZWJWaWV3Rmlyc3RSZXNwb25kZXIo
KQogCiBXS1JldGFpblB0cjxXS0ltYWdlUmVmPiBQbGF0Zm9ybVdlYlZpZXc6OndpbmRvd1NuYXBz
aG90SW1hZ2UoKQogewotICAgIEVjb3JlX0V2YXMqIGVlID0gZWNvcmVfZXZhc19lY29yZV9ldmFz
X2dldChldmFzX29iamVjdF9ldmFzX2dldChtX3ZpZXcpKTsKLSAgICBBU1NFUlQoZWUpOwotCiAg
ICAgaW50IHdpZHRoOwogICAgIGludCBoZWlnaHQ7Ci0gICAgZWNvcmVfZXZhc19nZW9tZXRyeV9n
ZXQoZWUsIDAsIDAsICZ3aWR0aCwgJmhlaWdodCk7CisgICAgZWNvcmVfZXZhc19nZW9tZXRyeV9n
ZXQobV93aW5kb3csIDAsIDAsICZ3aWR0aCwgJmhlaWdodCk7CiAgICAgQVNTRVJUKHdpZHRoID4g
MCAmJiBoZWlnaHQgPiAwKTsKIAotICAgIHJldHVybiBhZG9wdFdLKFdLVmlld0NyZWF0ZVNuYXBz
aG90KHRvQVBJKG1fdmlldykpKTsKKyAgICByZXR1cm4gYWRvcHRXSyhXS1ZpZXdDcmVhdGVTbmFw
c2hvdChtX3ZpZXcpKTsKIH0KIAogYm9vbCBQbGF0Zm9ybVdlYlZpZXc6OnZpZXdTdXBwb3J0c09w
dGlvbnMoV0tEaWN0aW9uYXJ5UmVmIG9wdGlvbnMpIGNvbnN0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185495</attachid>
            <date>2013-01-30 06:54:10 -0800</date>
            <delta_ts>2013-01-31 05:22:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-107931-20130130_v2.patch</filename>
            <type>text/plain</type>
            <size>41534</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDI2Mzc3ZTI4YWRlYWQ5NDQ3ZjFlN2E5ZmZhZmJjNjIyMDA3NjVhYTAKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
VHVlIEphbiAyOSAxMjo0NjoxOSAyMDEzICswMjAwCgogICAgYnVnMTA3OTMxCgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmlu
ZGV4IGEzMjMyNzQuLjZlYjIyNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTYgQEAKKzIwMTMt
MDEtMjkgIEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuICA8a2VubmV0aEB3ZWJraXQub3JnPgor
CisgICAgICAgIFtFRkxdW1dLMl0gSW50cm9kdWNlIGEgV2ViVmlldyBjbGFzcyBhcyBjb3VudGVy
cGFydCBmb3IgV0tWaWV3UmVmCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMDc5MzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUaGlzIGlzIGp1c3Qgb25lIHN0ZXAgb2YgdGhlIG5ldyBwbGFuIGZvciB0aGUg
RUZMIEFQSS4KKworICAgICAgICBUaGUgcGxhbiBpcyB0byBtb3ZlIHRoZSBwdWJsaWMgRUZMLWxp
a2UgQVBJIG9uIHRvcCBvZiB0aGUgc2hhcmVkCisgICAgICAgIFdLMiBDIEFQSSwgcGx1cyBhIGZl
dyBFRkwgZXh0ZW5zaW9ucyAoV0tWaWV3IGNsYXNzIG1vc3RseSkuCisKKyAgICAgICAgVGhlIEVG
TC1saWtlIEFQSSBjYW4gYmUgc2VlbiBhcyBhIGNvbnZlbmllbmNlIEFQSSB3aGljaCB0aWVzCisg
ICAgICAgIHdlbGwgaW50byBFRkwgYW5kIHdoaWNoIG1ha2VzIGl0IGVhc3kgdG8gYWRkIHdlYiBl
eHBlcmllbmNlcworICAgICAgICB0byBleGlzdGluZyBhbmQgbmV3IEVGTCBhcHBsaWNhdGlvbnMu
IEl0IHByb3ZpZGVzIGEgc21hcnQgb2JqZWN0CisgICAgICAgIGxpa2UgQVBJIGFuZCBhIEV2YXNf
T2JqZWN0IGJhc2VkIHZpZXcuCisKKyAgICAgICAgRm9yIG1vcmUgYWR2YW5jZWQgdXNlIGNhc2Vz
LCBzdWNoIGFzIGJyb3dzZXIgYW5kIHJ1bnRpbWUsIGl0IGlzCisgICAgICAgIHBvc3NpYmxlIHRv
IHVzZSB0aGUgV0sqIEMgQVBJLCB3aGljaCBpcyBnaXZlcyBtb3JlIGZsZXhpYmlsaXR5CisgICAg
ICAgIHdoaWxlIGJlaW5nIG1vcmUgbG93IGxldmVsLgorCisgICAgICAgIFRoZSBpZGVhIGlzIHRo
YXQgdGhlIFdLVmlldyBjbGFzcyB3aWxsIG5vdCBkZXBlbmQgb24gRXZhc19PYmplY3QKKyAgICAg
ICAgYW5kIFgxMSAoZnV0dXJlIHBsYW4pIHVubGlrZSB0aGUgY3VycmVudCBFRkwtbGlrZSBBUEku
IFRoaXMgc2hvdWxkCisgICAgICAgIG1ha2UgaXQgcG9zc2libGUgdG8gdXNlIGl0IGZvciBjYXNl
cyB3aGVyZSBub25lIG9mIHRoZXNlIGFyZQorICAgICAgICBhdmFpbGFibGUuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRoZSBXZWJWaWV3IGNsYXNzIHdoaWNoIHNlcnZlcyBhcyBv
dXIKKyAgICAgICAgY291bnRlcnBhcnQgZm9yIHRoZSBXS1ZpZXcgY2xhc3MsIGFuZCBhZGRzIGEg
ZmV3IG5lZWRlZCBtZXRob2RzLgorCisgICAgICAgIFRoZSBFd2tWaWV3IG93bnMgdGhlIFdlYlZp
ZXcgY2xhc3MgKGFuZCB3aWxsIGJlIGNvbnN0cnVjdGluZyBpdAorICAgICAgICBpbiB0aGUgbmVh
ciBmdXR1cmUgd2hlbiB0aGUgRXdrVmlldyBjbGFzcyBoYXMgYmVlbiBjaGFuZ2VkIHRvCisgICAg
ICAgIGhhbmRsZSBhbGwgc21hcnQgb2JqZWN0IHJlbGF0ZWQgY29kZSkKKworICAgICAgICBUaGUg
Y2xlYW4gdXAgb2YgdGhlIHNtYXJ0IG9iamVjdCByZWxhdGVkIGNvZGUgYXMgdGhlIHByb3Blcgor
ICAgICAgICBjb25zdHJ1Y3Rpb24gb2YgRXdrVmlldyBhbmQgV2ViVmlldyB3aWxsIGJlIGRvbmUg
aW4gZm9sbG93LXVwCisgICAgICAgIHBhdGNoZXMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0MvZWZsL1dLQVBJQ2FzdEVmbC5oOgorICAgICAgICAoV2ViS2l0KToKKworICAgICAgICAgICAg
VGhlIFdLVmlldyBBUEkgaXMgbm90IGJhc2VkIG9uIFdlYlZpZXcgYW5kIG5vdCBFdmFzX09iamVj
dCoKKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcDoKKyAgICAgICAg
KFdLVmlld0NyZWF0ZSk6CisgICAgICAgIChXS1ZpZXdDcmVhdGVXaXRoRml4ZWRMYXlvdXQpOgor
ICAgICAgICAoV0tWaWV3SW5pdGlhbGl6ZSk6CisgICAgICAgIChXS1ZpZXdHZXRQYWdlKToKKyAg
ICAgICAgKFdLVmlld1NldFRoZW1lUGF0aCk6CisgICAgICAgIChXS1ZpZXdTdXNwZW5kQWN0aXZl
RE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMpOgorICAgICAgICAoV0tWaWV3UmVzdW1lQWN0aXZlRE9N
T2JqZWN0c0FuZEFuaW1hdGlvbnMpOgorICAgICAgICAoV0tWaWV3R2V0RXZhc09iamVjdCk6Cisg
ICAgICAgIChXS1ZpZXdDcmVhdGVTbmFwc2hvdCk6CisKKyAgICAgICAgICAgIEFkZCBhIGZldyBu
ZXcgV0tWaWV3IEVGTCBDIG1ldGhvZHMsIGFuZCB1cGRhdGUgZXhpc3RpbmcKKyAgICAgICAgICAg
IG1ldGhvZHMgdG8gcmVmbGVjdCB0aGF0IHRoZSBXS1ZpZXdSZWYgaXMgbm93IGEgV2ViVmlldyoK
KworICAgICAgICAgICAgVGhlIGNvbnN0cnVjdGlvbiBtZXRob2RzIHdpbGwgYmUgcmV3cml0dGVu
IHdoZW4gdGhlIHNtYXJ0CisgICAgICAgICAgICBvYmplY3QgY29uc3RydWN0aW9uIGhhcyBiZWVu
IHNvbHZlcy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3Lmg6CisgICAg
ICAgICogVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpXZWJWaWV3KToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlldzo6fldlYlZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojppbml0aWFsaXpl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6c2V0VGhlbWVQYXRoKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlldzo6c3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlldzo6cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlv
bnMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvV2ViVmlldy5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdCk6CisgICAgICAgIChXZWJWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6
cGFnZVJlZik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmV2YXNPYmplY3QpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3OjpwYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6dHlw
ZSk6CisKKyAgICAgICAgICAgIEFkZCBhIG5ldyBXZWJLaXQ6OldlYlZpZXcgY2xhc3MgZm9yIEVG
TC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwOgorICAgICAgICAo
RXdrVmlldzo6RXdrVmlldyk6CisgICAgICAgIChFd2tWaWV3Ojp+RXdrVmlldyk6CisgICAgICAg
IChFd2tWaWV3Ojp3a1BhZ2UpOgorICAgICAgICAoRXdrVmlldzo6ZGV2aWNlU2NhbGVGYWN0b3Ip
OgorICAgICAgICAoRXdrVmlldzo6dGl0bGUpOgorICAgICAgICAoRXdrVmlldzo6c2V0VGhlbWVQ
YXRoKToKKyAgICAgICAgKEV3a1ZpZXc6OmN1c3RvbVRleHRFbmNvZGluZ05hbWUpOgorICAgICAg
ICAoRXdrVmlldzo6c2V0Q3VzdG9tVGV4dEVuY29kaW5nTmFtZSk6CisgICAgICAgIChFd2tWaWV3
OjpjcmVhdGVHTFN1cmZhY2UpOgorICAgICAgICAoRXdrVmlldzo6aW5mb3JtVVJMQ2hhbmdlKToK
KyAgICAgICAgKEV3a1ZpZXc6OnRha2VTbmFwc2hvdCk6CisKKyAgICAgICAgICAgIEJhc2UgbWV0
aG9kcyBvbiBDIEFQSSBpbnN0ZWFkIG9mIGludGVybmFsIEFQSSBhcyBtdWNoCisgICAgICAgICAg
ICBhcyBjdXJyZW50bHkgcG9zc2libGUuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9F
d2tWaWV3Lmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViVmlldyk6CisgICAgICAg
IChFd2tWaWV3KToKKyAgICAgICAgKEV3a1ZpZXc6OndrVmlldyk6CisgICAgICAgIChFd2tWaWV3
OjpwYWdlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHA6CisgICAg
ICAgIChjcmVhdGVFd2tWaWV3KToKKyAgICAgICAgKGV3a192aWV3X2Jhc2VfYWRkKToKKyAgICAg
ICAgKGV3a192aWV3X3NtYXJ0X2FkZCk6CisKKyAgICAgICAgICAgIE1vZGlmeSB0byByZXR1cm4g
dGhlIEV3a1ZpZXcgY2xhc3MgZm9yIG5vdy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a192aWV3X3ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1dlYkluc3BlY3Rv
clByb3h5RWZsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtQ3JlYXRlSW5zcGVjdG9yUGFnZSk6CisKKyAgICAgICAgICAgIFVwZGF0ZWQgZHVlIHRvIGNo
YW5nZWQgQVBJLgorCiAyMDEzLTAxLTMwICBIdWFuZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBh
bnkxMDAubmV0PgogCiAgICAgICAgIENvb3JkaW5hdGVkIEdyYXBoaWNzOiBSZW1vdmUgbV9wZW5k
aW5nU3luY0JhY2tpbmdTdG9yZXMgaW4gTGF5ZXJUcmVlUmVuZGVyZXIuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
RWZsLmNtYWtlCmluZGV4IDMxM2Y3MTkuLmEwZGU4NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNt
YWtlCkBAIC0xMDksNiArMTA5LDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAg
VUlQcm9jZXNzL2VmbC9XZWJQb3B1cE1lbnVQcm94eUVmbC5jcHAKICAgICBVSVByb2Nlc3MvZWZs
L1dlYlByZWZlcmVuY2VzRWZsLmNwcAogICAgIFVJUHJvY2Vzcy9lZmwvV2ViUHJvY2Vzc1Byb3h5
RWZsLmNwcAorICAgIFVJUHJvY2Vzcy9lZmwvV2ViVmlldy5jcHAKIAogICAgIFVJUHJvY2Vzcy9J
bnNwZWN0b3JTZXJ2ZXIvZWZsL1dlYkluc3BlY3RvclNlcnZlckVmbC5jcHAKICAgICBVSVByb2Nl
c3MvSW5zcGVjdG9yU2VydmVyL3NvdXAvV2ViU29ja2V0U2VydmVyU291cC5jcHAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tBUElDYXN0RWZsLmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLQVBJQ2FzdEVmbC5oCmluZGV4IGIw
MTNhMGEuLjE4ODlmYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy9lZmwvV0tBUElDYXN0RWZsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
L2VmbC9XS0FQSUNhc3RFZmwuaApAQCAtMjQsMTUgKzI0LDExIEBACiAjZXJyb3IgIlBsZWFzZSAj
aW5jbHVkZSBcIldLQVBJQ2FzdC5oXCIgaW5zdGVhZCBvZiB0aGlzIGZpbGUgZGlyZWN0bHkuIgog
I2VuZGlmCiAKLSNpZiBVU0UoRU8pCi10eXBlZGVmIHN0cnVjdCBfRW8gRXZhc19PYmplY3Q7Ci0j
ZWxzZQotdHlwZWRlZiBzdHJ1Y3QgX0V2YXNfT2JqZWN0IEV2YXNfT2JqZWN0OwotI2VuZGlmCi0K
IG5hbWVzcGFjZSBXZWJLaXQgewogCi1XS19BRERfQVBJX01BUFBJTkcoV0tWaWV3UmVmLCBFdmFz
X09iamVjdCkKK2NsYXNzIFdlYlZpZXc7CisKK1dLX0FERF9BUElfTUFQUElORyhXS1ZpZXdSZWYs
IFdlYlZpZXcpCiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9DL2VmbC9XS1ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9X
S1ZpZXcuY3BwCmluZGV4IDMyYjlkOGYuLjU5MDA3MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5jcHAKQEAgLTI5LDI0ICsyOSw1NiBAQCB1c2luZyBu
YW1lc3BhY2UgV2ViS2l0OwogCiBXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlKEV2YXMqIGNhbnZhcywg
V0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZikKIHsK
LSAgICByZXR1cm4gdG9BUEkoZXdrX3ZpZXdfYmFzZV9hZGQoY2FudmFzLCBjb250ZXh0UmVmLCBw
YWdlR3JvdXBSZWYsIEV3a1ZpZXc6OkxlZ2FjeUJlaGF2aW9yKSk7CisgICAgRXdrVmlldyogZXdr
VmlldyA9IGV3a192aWV3X2Jhc2VfYWRkKGNhbnZhcywgY29udGV4dFJlZiwgcGFnZUdyb3VwUmVm
LCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlvcik7CisgICAgaWYgKCFld2tWaWV3KQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIC8vIFJldGFpbiBhcyB0aGUgY29udHJhY3Qgd2l0aCAqQ3JlYXRlIGZ1
bmN0aW9ucyBpcyB0aGF0IHJldHVybmVkIG9iamVjdHMgbXVjaCB0byBiZSByZWxlYXNlZCBhZnRl
ciB1c2UuCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdLVmlld1JlZj4oV0tSZXRhaW4oZXdrVmll
dy0+d2tWaWV3KCkpKTsKIH0KIAogV0tWaWV3UmVmIFdLVmlld0NyZWF0ZVdpdGhGaXhlZExheW91
dChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBw
YWdlR3JvdXBSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKGV3a192aWV3X2Jhc2VfYWRkKGNhbnZh
cywgY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpEZWZhdWx0QmVoYXZpb3IpKTsK
KyAgICBFd2tWaWV3KiBld2tWaWV3ID0gZXdrX3ZpZXdfYmFzZV9hZGQoY2FudmFzLCBjb250ZXh0
UmVmLCBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OkRlZmF1bHRCZWhhdmlvcik7CisgICAgaWYgKCFl
d2tWaWV3KQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIFJldGFpbiBhcyB0aGUgY29udHJh
Y3Qgd2l0aCAqQ3JlYXRlIGZ1bmN0aW9ucyBpcyB0aGF0IHJldHVybmVkIG9iamVjdHMgbXVjaCB0
byBiZSByZWxlYXNlZCBhZnRlciB1c2UuCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdLVmlld1Jl
Zj4oV0tSZXRhaW4oZXdrVmlldy0+d2tWaWV3KCkpKTsKK30KKwordm9pZCBXS1ZpZXdJbml0aWFs
aXplKFdLVmlld1JlZiB2aWV3UmVmKQoreworICAgIHRvSW1wbCh2aWV3UmVmKS0+aW5pdGlhbGl6
ZSgpOwogfQogCiBXS1BhZ2VSZWYgV0tWaWV3R2V0UGFnZShXS1ZpZXdSZWYgdmlld1JlZikKIHsK
LSAgICBFd2tWaWV3KiB2aWV3ID0gRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QodG9JbXBsKHZpZXdS
ZWYpKTsKKyAgICByZXR1cm4gdG9JbXBsKHZpZXdSZWYpLT5wYWdlUmVmKCk7Cit9CiAKLSAgICBy
ZXR1cm4gdmlldy0+d2tQYWdlKCk7Cit2b2lkIFdLVmlld1NldFRoZW1lUGF0aChXS1ZpZXdSZWYg
dmlld1JlZiwgV0tTdHJpbmdSZWYgdGhlbWUpCit7CisgICAgdG9JbXBsKHZpZXdSZWYpLT5zZXRU
aGVtZVBhdGgodGhlbWUpOwogfQogCi1XS0ltYWdlUmVmIFdLVmlld0NyZWF0ZVNuYXBzaG90KFdL
Vmlld1JlZiB2aWV3UmVmKQordm9pZCBXS1ZpZXdTdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFu
aW1hdGlvbnMoV0tWaWV3UmVmIHZpZXdSZWYpCiB7Ci0gICAgRXdrVmlldyogdmlldyA9IEV3a1Zp
ZXc6OmZyb21FdmFzT2JqZWN0KHRvSW1wbCh2aWV3UmVmKSk7CisgICAgdG9JbXBsKHZpZXdSZWYp
LT5zdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKK30KIAotICAgIHJldHVy
biBXS0ltYWdlQ3JlYXRlRnJvbUNhaXJvU3VyZmFjZSh2aWV3LT50YWtlU25hcHNob3QoKS5nZXQo
KSwgMCAvKiBvcHRpb25zICovKTsKK3ZvaWQgV0tWaWV3UmVzdW1lQWN0aXZlRE9NT2JqZWN0c0Fu
ZEFuaW1hdGlvbnMoV0tWaWV3UmVmIHZpZXdSZWYpCit7CisgICAgdG9JbXBsKHZpZXdSZWYpLT5y
ZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworfQorCitFdmFzX09iamVjdCog
V0tWaWV3R2V0RXZhc09iamVjdChXS1ZpZXdSZWYgdmlld1JlZikKK3sKKyAgICByZXR1cm4gdG9J
bXBsKHZpZXdSZWYpLT5ldmFzT2JqZWN0KCk7Cit9CisKK1dLSW1hZ2VSZWYgV0tWaWV3Q3JlYXRl
U25hcHNob3QoV0tWaWV3UmVmIHZpZXdSZWYpCit7CisgICAgRXdrVmlldyogZXdrVmlldyA9IEV3
a1ZpZXc6OmZyb21FdmFzT2JqZWN0KHRvSW1wbCh2aWV3UmVmKS0+ZXZhc09iamVjdCgpKTsKKyAg
ICByZXR1cm4gV0tJbWFnZUNyZWF0ZUZyb21DYWlyb1N1cmZhY2UoZXdrVmlldy0+dGFrZVNuYXBz
aG90KCkuZ2V0KCksIDAgLyogb3B0aW9ucyAqLyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaAppbmRleCBjYzczMDdjLi5kNWI0MzJkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmgKQEAgLTI0LDggKzI0LDEwIEBA
CiAKICNpZiBVU0UoRU8pCiB0eXBlZGVmIHN0cnVjdCBfRW8gRXZhczsKK3R5cGVkZWYgc3RydWN0
IF9FbyBFdmFzX09iamVjdDsKICNlbHNlCiB0eXBlZGVmIHN0cnVjdCBfRXZhcyBFdmFzOwordHlw
ZWRlZiBzdHJ1Y3QgX0V2YXNfT2JqZWN0IEV2YXNfT2JqZWN0OwogI2VuZGlmCiAKICNpZmRlZiBf
X2NwbHVzcGx1cwpAQCAtMzYsOSArMzgsMTkgQEAgV0tfRVhQT1JUIFdLVmlld1JlZiBXS1ZpZXdD
cmVhdGUoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dCwgV0tQYWdlR3JvdXAKIAog
V0tfRVhQT1JUIFdLVmlld1JlZiBXS1ZpZXdDcmVhdGVXaXRoRml4ZWRMYXlvdXQoRXZhcyogY2Fu
dmFzLCBXS0NvbnRleHRSZWYgY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwKTsKIAot
V0tfRVhQT1JUIFdLUGFnZVJlZiBXS1ZpZXdHZXRQYWdlKFdLVmlld1JlZiB2aWV3KTsKK1dLX0VY
UE9SVCB2b2lkIFdLVmlld0luaXRpYWxpemUoV0tWaWV3UmVmKTsKIAotV0tfRVhQT1JUIFdLSW1h
Z2VSZWYgV0tWaWV3Q3JlYXRlU25hcHNob3QoV0tWaWV3UmVmIHZpZXdSZWYpOworV0tfRVhQT1JU
IFdLUGFnZVJlZiBXS1ZpZXdHZXRQYWdlKFdLVmlld1JlZik7CisKK1dLX0VYUE9SVCB2b2lkIFdL
Vmlld1NldFRoZW1lUGF0aChXS1ZpZXdSZWYsIFdLU3RyaW5nUmVmKTsKKworV0tfRVhQT1JUIHZv
aWQgV0tWaWV3U3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKFdLVmlld1JlZik7
CitXS19FWFBPUlQgdm9pZCBXS1ZpZXdSZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9u
cyhXS1ZpZXdSZWYpOworCisvLyBGSVhNRTogVGhlIGxvbmcgdGVybSBwbGFuIGlzIHRvIGdldCBy
aWQgb2YgdGhpcywgc28ga2VlcCB1c2FnZSB0byBhIGJhcmUgbWluaW11bS4KK1dLX0VYUE9SVCBF
dmFzX09iamVjdCogV0tWaWV3R2V0RXZhc09iamVjdChXS1ZpZXdSZWYpOworCitXS19FWFBPUlQg
V0tJbWFnZVJlZiBXS1ZpZXdDcmVhdGVTbmFwc2hvdChXS1ZpZXdSZWYpOwogCiAjaWZkZWYgX19j
cGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L0V3a1ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5j
cHAKaW5kZXggN2YyMzhmOC4uMWFhZTM1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvRXdrVmlldy5jcHAKQEAgLTM4LDcgKzM4LDkgQEAKICNpbmNsdWRlICJXS0RpY3Rp
b25hcnkuaCIKICNpbmNsdWRlICJXS0dlb21ldHJ5LmgiCiAjaW5jbHVkZSAiV0tOdW1iZXIuaCIK
KyNpbmNsdWRlICJXS1BhZ2VHcm91cC5oIgogI2luY2x1ZGUgIldLU3RyaW5nLmgiCisjaW5jbHVk
ZSAiV0tWaWV3LmgiCiAjaW5jbHVkZSAiV2ViQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkltYWdl
LmgiCiAjaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCkBAIC0xMTAsMTQgKzExMiwxNCBAQCBjb25z
dCBFdmFzX09iamVjdCogRXdrVmlldzo6dmlld0Zyb21QYWdlVmlld01hcChjb25zdCBXS1BhZ2VS
ZWYgcGFnZSkKICAgICByZXR1cm4gcGFnZVZpZXdNYXAoKS5nZXQocGFnZSk7CiB9CiAKLUV3a1Zp
ZXc6OkV3a1ZpZXcoRXZhc19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdrQ29udGV4
dD4gY29udGV4dCwgUGFzc1JlZlB0cjxXZWJQYWdlR3JvdXA+IHBhZ2VHcm91cCwgVmlld0JlaGF2
aW9yIGJlaGF2aW9yKQotICAgIDogbV9ldmFzT2JqZWN0KGV2YXNPYmplY3QpCitFd2tWaWV3OjpF
d2tWaWV3KEV2YXNfT2JqZWN0KiB2aWV3LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQs
IFdlYlBhZ2VHcm91cCogcGFnZUdyb3VwLCBWaWV3QmVoYXZpb3IgYmVoYXZpb3IpCisgICAgOiBt
X2V2YXNPYmplY3QodmlldykKICAgICAsIG1fY29udGV4dChjb250ZXh0KQogI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKICAgICAsIG1fcGVuZGluZ1N1cmZhY2VSZXNpemUoZmFsc2Up
CiAjZW5kaWYKICAgICAsIG1fcGFnZUNsaWVudChiZWhhdmlvciA9PSBEZWZhdWx0QmVoYXZpb3Ig
PyBQYWdlQ2xpZW50RGVmYXVsdEltcGw6OmNyZWF0ZSh0aGlzKSA6IFBhZ2VDbGllbnRMZWdhY3lJ
bXBsOjpjcmVhdGUodGhpcykpCi0gICAgLCBtX3BhZ2VQcm94eShtX2NvbnRleHQtPndlYkNvbnRl
eHQoKS0+Y3JlYXRlV2ViUGFnZShtX3BhZ2VDbGllbnQuZ2V0KCksIHBhZ2VHcm91cC5nZXQoKSkp
CisgICAgLCBtX3dlYlZpZXcoYWRvcHRSZWYobmV3IFdlYlZpZXcobV9jb250ZXh0LT53ZWJDb250
ZXh0KCkuZ2V0KCksIG1fcGFnZUNsaWVudC5nZXQoKSwgcGFnZUdyb3VwLCB2aWV3KSkpCiAgICAg
LCBtX3BhZ2VMb2FkQ2xpZW50KFBhZ2VMb2FkQ2xpZW50RWZsOjpjcmVhdGUodGhpcykpCiAgICAg
LCBtX3BhZ2VQb2xpY3lDbGllbnQoUGFnZVBvbGljeUNsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQog
ICAgICwgbV9wYWdlVUlDbGllbnQoUGFnZVVJQ2xpZW50RWZsOjpjcmVhdGUodGhpcykpCkBAIC0x
MjcsNyArMTI5LDcgQEAgRXdrVmlldzo6RXdrVmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwg
UGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBQYXNzUmUKICNpZiBFTkFCTEUoVklCUkFU
SU9OKQogICAgICwgbV92aWJyYXRpb25DbGllbnQoVmlicmF0aW9uQ2xpZW50RWZsOjpjcmVhdGUo
dGhpcykpCiAjZW5kaWYKLSAgICAsIG1fYmFja0ZvcndhcmRMaXN0KEV3a0JhY2tGb3J3YXJkTGlz
dDo6Y3JlYXRlKHRvQVBJKG1fcGFnZVByb3h5LT5iYWNrRm9yd2FyZExpc3QoKSkpKQorICAgICwg
bV9iYWNrRm9yd2FyZExpc3QoRXdrQmFja0ZvcndhcmRMaXN0OjpjcmVhdGUoV0tQYWdlR2V0QmFj
a0ZvcndhcmRMaXN0KHdrUGFnZSgpKSkpCiAjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCiAg
ICAgLCBtX3BhZ2VTY2FsZUZhY3RvcigxKQogI2VuZGlmCkBAIC0xNDQsMzMgKzE0NiwxOCBAQCBF
d2tWaWV3OjpFd2tWaWV3KEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0LCBQYXNzUmVmUHRyPEV3a0Nv
bnRleHQ+IGNvbnRleHQsIFBhc3NSZQogewogICAgIEFTU0VSVChtX2V2YXNPYmplY3QpOwogICAg
IEFTU0VSVChtX2NvbnRleHQpOwotICAgIEFTU0VSVChtX3BhZ2VQcm94eSk7CiAKLSNpZiBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVm
ZXJlbmNlcygpLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCh0cnVlKTsKLSAgICBt
X3BhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldEZvcmNlQ29tcG9zaXRp
bmdNb2RlKHRydWUpOwotICAgIGNoYXIqIGRlYnVnVmlzdWFsc0Vudmlyb25tZW50ID0gZ2V0ZW52
KCJXRUJLSVRfU0hPV19DT01QT1NJVElOR19ERUJVR19WSVNVQUxTIik7Ci0gICAgYm9vbCBzaG93
RGVidWdWaXN1YWxzID0gZGVidWdWaXN1YWxzRW52aXJvbm1lbnQgJiYgIXN0cmNtcChkZWJ1Z1Zp
c3VhbHNFbnZpcm9ubWVudCwgIjEiKTsKLSAgICBtX3BhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnBy
ZWZlcmVuY2VzKCktPnNldENvbXBvc2l0aW5nQm9yZGVyc1Zpc2libGUoc2hvd0RlYnVnVmlzdWFs
cyk7Ci0gICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRDb21w
b3NpdGluZ1JlcGFpbnRDb3VudGVyc1Zpc2libGUoc2hvd0RlYnVnVmlzdWFscyk7Ci0jaWYgRU5B
QkxFKFdFQkdMKQotICAgIG1fcGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+
c2V0V2ViR0xFbmFibGVkKHRydWUpOwotI2VuZGlmCi0gICAgaWYgKGJlaGF2aW9yID09IERlZmF1
bHRCZWhhdmlvcikKLSAgICAgICAgbV9wYWdlUHJveHktPnNldFVzZUZpeGVkTGF5b3V0KHRydWUp
OwotI2VuZGlmCisgICAgV0tWaWV3SW5pdGlhbGl6ZSh3a1ZpZXcoKSk7CiAKLSAgICBtX3BhZ2VQ
cm94eS0+aW5pdGlhbGl6ZVdlYlBhZ2UoKTsKKyAgICBXS1BhZ2VTZXRVc2VGaXhlZExheW91dCh3
a1BhZ2UoKSwgYmVoYXZpb3IgPT0gRGVmYXVsdEJlaGF2aW9yKTsKIAotI2lmIEVOQUJMRShGVUxM
U0NSRUVOX0FQSSkKLSAgICBtX3BhZ2VQcm94eS0+ZnVsbFNjcmVlbk1hbmFnZXIoKS0+c2V0V2Vi
VmlldyhtX2V2YXNPYmplY3QpOwotICAgIG1fcGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVy
ZW5jZXMoKS0+c2V0RnVsbFNjcmVlbkVuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKLSNpZiBFTkFCTEUo
V0VCX0FVRElPKQotICAgIG1fcGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+
c2V0V2ViQXVkaW9FbmFibGVkKHRydWUpOwotI2VuZGlmCisgICAgV0tQYWdlR3JvdXBSZWYgd2tQ
YWdlR3JvdXAgPSBXS1BhZ2VHZXRQYWdlR3JvdXAod2tQYWdlKCkpOworICAgIFdLUHJlZmVyZW5j
ZXNSZWYgd2tQcmVmZXJlbmNlcyA9IFdLUGFnZUdyb3VwR2V0UHJlZmVyZW5jZXMod2tQYWdlR3Jv
dXApOwogCi0gICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRP
ZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQodHJ1ZSk7CisgICAgV0tQcmVmZXJlbmNl
c1NldFdlYkdMRW5hYmxlZCh3a1ByZWZlcmVuY2VzLCB0cnVlKTsKKyAgICBXS1ByZWZlcmVuY2Vz
U2V0RnVsbFNjcmVlbkVuYWJsZWQod2tQcmVmZXJlbmNlcywgdHJ1ZSk7CisgICAgV0tQcmVmZXJl
bmNlc1NldFdlYkF1ZGlvRW5hYmxlZCh3a1ByZWZlcmVuY2VzLCB0cnVlKTsKKyAgICBXS1ByZWZl
cmVuY2VzU2V0T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKHdrUHJlZmVyZW5jZXMs
IHRydWUpOwogCiAgICAgLy8gRW5hYmxlIG1vdXNlIGV2ZW50cyBieSBkZWZhdWx0CiAgICAgc2V0
TW91c2VFdmVudHNFbmFibGVkKHRydWUpOwpAQCAtMTg2LDggKzE3Myw2IEBAIEV3a1ZpZXc6OkV3
a1ZpZXcoRXZhc19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29u
dGV4dCwgUGFzc1JlCiAKIEV3a1ZpZXc6On5Fd2tWaWV3KCkKIHsKLSAgICBtX3BhZ2VQcm94eS0+
Y2xvc2UoKTsKLQogICAgIC8vIFVucmVnaXN0ZXIgaWNvbiBjaGFuZ2UgY2FsbGJhY2suCiAgICAg
RXdrRmF2aWNvbkRhdGFiYXNlKiBpY29uRGF0YWJhc2UgPSBtX2NvbnRleHQtPmZhdmljb25EYXRh
YmFzZSgpOwogICAgIEFTU0VSVChpY29uRGF0YWJhc2UpOwpAQCAtMjE1LDkgKzIwMCw5IEBAIEV3
a1ZpZXcqIEV3a1ZpZXc6OmZyb21FdmFzT2JqZWN0KGNvbnN0IEV2YXNfT2JqZWN0KiB2aWV3KQog
ICogQGludGVybmFsCiAgKiBSZXRyaWV2ZXMgdGhlIGludGVybmFsIFdLUGFnZSBmb3IgdGhpcyB2
aWV3LgogICovCi1XS1BhZ2VSZWYgRXdrVmlldzo6d2tQYWdlKCkKK1dLUGFnZVJlZiBFd2tWaWV3
Ojp3a1BhZ2UoKSBjb25zdAogewotICAgIHJldHVybiB0b0FQSShtX3BhZ2VQcm94eS5nZXQoKSk7
CisgICAgcmV0dXJuIFdLVmlld0dldFBhZ2Uod2tWaWV3KCkpOwogfQogCiB2b2lkIEV3a1ZpZXc6
OnNldEN1cnNvcihjb25zdCBDdXJzb3ImIGN1cnNvcikKQEAgLTMwMSw3ICsyODYsNyBAQCB2b2lk
IEV3a1ZpZXc6OnNldERldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlKQogCiBmbG9hdCBFd2tW
aWV3OjpkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcGFnZVByb3h5
LT5kZXZpY2VTY2FsZUZhY3RvcigpOworICAgIHJldHVybiBXS1BhZ2VHZXRCYWNraW5nU2NhbGVG
YWN0b3Iod2tQYWdlKCkpOwogfQogCiBBZmZpbmVUcmFuc2Zvcm0gRXdrVmlldzo6dHJhbnNmb3Jt
RnJvbVNjZW5lKCkgY29uc3QKQEAgLTUyNyw3ICs1MTIsNyBAQCBib29sIEV3a1ZpZXc6OmlzVmlz
aWJsZSgpIGNvbnN0CiAKIGNvbnN0IGNoYXIqIEV3a1ZpZXc6OnRpdGxlKCkgY29uc3QKIHsKLSAg
ICBtX3RpdGxlID0gbV9wYWdlUHJveHktPnBhZ2VUaXRsZSgpLnV0ZjgoKS5kYXRhKCk7CisgICAg
bV90aXRsZSA9IFdLRWluYVNoYXJlZFN0cmluZyhBZG9wdFdLLCBXS1BhZ2VDb3B5VGl0bGUod2tQ
YWdlKCkpKTsKIAogICAgIHJldHVybiBtX3RpdGxlOwogfQpAQCAtNTUwLDI0ICs1MzUsMjYgQEAg
dm9pZCBFd2tWaWV3OjpzZXRUaGVtZVBhdGgoY29uc3QgY2hhciogdGhlbWUpCiB7CiAgICAgaWYg
KG1fdGhlbWUgIT0gdGhlbWUpIHsKICAgICAgICAgbV90aGVtZSA9IHRoZW1lOwotICAgICAgICBt
X3BhZ2VQcm94eS0+c2V0VGhlbWVQYXRoKHRoZW1lKTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHdrVGhlbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KHRoZW1lKSk7CisgICAgICAgIFdLVmlld1NldFRoZW1lUGF0aCh3a1ZpZXcoKSwgd2tUaGVtZS5n
ZXQoKSk7CiAgICAgfQogfQogCiBjb25zdCBjaGFyKiBFd2tWaWV3OjpjdXN0b21UZXh0RW5jb2Rp
bmdOYW1lKCkgY29uc3QKIHsKLSAgICBTdHJpbmcgY3VzdG9tRW5jb2RpbmcgPSBtX3BhZ2VQcm94
eS0+Y3VzdG9tVGV4dEVuY29kaW5nTmFtZSgpOwotICAgIGlmIChjdXN0b21FbmNvZGluZy5pc0Vt
cHR5KCkpCisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGN1c3RvbUVuY29kaW5nID0gYWRv
cHRXSyhXS1BhZ2VDb3B5Q3VzdG9tVGV4dEVuY29kaW5nTmFtZSh3a1BhZ2UoKSkpOworICAgIGlm
IChXS1N0cmluZ0lzRW1wdHkoY3VzdG9tRW5jb2RpbmcuZ2V0KCkpKQogICAgICAgICByZXR1cm4g
MDsKIAotICAgIG1fY3VzdG9tRW5jb2RpbmcgPSBjdXN0b21FbmNvZGluZy51dGY4KCkuZGF0YSgp
OworICAgIG1fY3VzdG9tRW5jb2RpbmcgPSBXS0VpbmFTaGFyZWRTdHJpbmcoY3VzdG9tRW5jb2Rp
bmcuZ2V0KCkpOwogCiAgICAgcmV0dXJuIG1fY3VzdG9tRW5jb2Rpbmc7CiB9CiAKIHZvaWQgRXdr
Vmlldzo6c2V0Q3VzdG9tVGV4dEVuY29kaW5nTmFtZShjb25zdCBTdHJpbmcmIGVuY29kaW5nKQog
ewotICAgIG1fcGFnZVByb3h5LT5zZXRDdXN0b21UZXh0RW5jb2RpbmdOYW1lKGVuY29kaW5nKTsK
KyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tFbmNvZGluZyA9IGFkb3B0V0sodG9Db3Bp
ZWRBUEkoZW5jb2RpbmcpKTsKKyAgICBXS1BhZ2VTZXRDdXN0b21UZXh0RW5jb2RpbmdOYW1lKHdr
UGFnZSgpLCB3a0VuY29kaW5nLmdldCgpKTsKIH0KIAogdm9pZCBFd2tWaWV3OjpzZXRNb3VzZUV2
ZW50c0VuYWJsZWQoYm9vbCBlbmFibGVkKQpAQCAtNjQ5LDkgKzYzNiw2IEBAIGJvb2wgRXdrVmll
dzo6Y3JlYXRlR0xTdXJmYWNlKGNvbnN0IEludFNpemUmIHZpZXdTaXplKQogICAgICAgICBpZiAo
IW1fZXZhc0dMKSB7CiAgICAgICAgICAgICBXQVJOKCJGYWlsZWQgdG8gY3JlYXRlIEV2YXNfR0ws
IGZhbGxpbmcgYmFjayB0byBzb2Z0d2FyZSBtb2RlLiIpOwogICAgICAgICAgICAgbV9pc0hhcmR3
YXJlQWNjZWxlcmF0ZWQgPSBmYWxzZTsKLSNpZiBFTkFCTEUoV0VCR0wpCi0gICAgICAgICAgICBt
X3BhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldFdlYkdMRW5hYmxlZChm
YWxzZSk7Ci0jZW5kaWYKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAg
IH0KQEAgLTg5NCwxNSArODc4LDEzIEBAIHVuc2lnbmVkIGxvbmcgbG9uZyBFd2tWaWV3OjppbmZv
cm1EYXRhYmFzZVF1b3RhUmVhY2hlZChjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtCiAgKi8KIHZv
aWQgRXdrVmlldzo6aW5mb3JtVVJMQ2hhbmdlKCkKIHsKLSAgICBTdHJpbmcgYWN0aXZlVVJMID0g
bV9wYWdlUHJveHktPmFjdGl2ZVVSTCgpOwotICAgIGlmIChhY3RpdmVVUkwuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm47CisgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHdrQWN0aXZlVVJMID0g
YWRvcHRXSyhXS1BhZ2VDb3B5QWN0aXZlVVJMKHdrUGFnZSgpKSk7CisgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHdrVVJMU3RyaW5nID0gd2tBY3RpdmVVUkwgPyBhZG9wdFdLKFdLVVJMQ29w
eVN0cmluZyh3a0FjdGl2ZVVSTC5nZXQoKSkpIDogYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiIikpOwogCi0gICAgQ1N0cmluZyByYXdBY3RpdmVVUkwgPSBhY3RpdmVVUkwu
dXRmOCgpOwotICAgIGlmIChtX3VybCA9PSByYXdBY3RpdmVVUkwuZGF0YSgpKQorICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHdrVVJMU3RyaW5nLmdldCgpLCBtX3VybCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG1fdXJsID0gcmF3QWN0aXZlVVJMLmRhdGEoKTsKKyAgICBt
X3VybCA9IFdLRWluYVNoYXJlZFN0cmluZyh3a1VSTFN0cmluZy5nZXQoKSk7CiAgICAgc21hcnRD
YWxsYmFjazxVUkxDaGFuZ2VkPigpLmNhbGwobV91cmwpOwogCiAgICAgLy8gVXBkYXRlIHRoZSB2
aWV3J3MgZmF2aWNvbi4KQEAgLTEwMzQsNyArMTAxNiw3IEBAIHZvaWQgRXdrVmlldzo6b25GYXZp
Y29uQ2hhbmdlZChjb25zdCBjaGFyKiBwYWdlVVJMLCB2b2lkKiBldmVudEluZm8pCiBQYXNzUmVm
UHRyPGNhaXJvX3N1cmZhY2VfdD4gRXdrVmlldzo6dGFrZVNuYXBzaG90KCkKIHsKICAgICAvLyBT
dXNwZW5kIGFsbCBhbmltYXRpb25zIGJlZm9yZSB0YWtpbmcgdGhlIHNuYXBzaG90LgotICAgIG1f
cGFnZVByb3h5LT5zdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKKyAgICBX
S1ZpZXdTdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMod2tWaWV3KCkpOwogCiAg
ICAgLy8gV2FpdCBmb3IgdGhlIHBlbmRpbmcgcmVwYWludCBldmVudHMgdG8gYmUgcHJvY2Vzc2Vk
LgogICAgIHdoaWxlIChtX2Rpc3BsYXlUaW1lci5pc0FjdGl2ZSgpKQpAQCAtMTA0Niw3ICsxMDI4
LDcgQEAgUGFzc1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IEV3a1ZpZXc6OnRha2VTbmFwc2hvdCgp
CiAjZW5kaWYKICAgICAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc25hcHNob3QgPSBjcmVh
dGVTdXJmYWNlRm9ySW1hZ2Uoc2QtPmltYWdlKTsKICAgICAgICAgLy8gUmVzdW1lIGFsbCBhbmlt
YXRpb25zLgotICAgICAgICBtX3BhZ2VQcm94eS0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFu
aW1hdGlvbnMoKTsKKyAgICAgICAgV0tWaWV3UmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1h
dGlvbnMod2tWaWV3KCkpOwogCiAgICAgICAgIHJldHVybiBzbmFwc2hvdC5yZWxlYXNlKCk7CiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtMTA1NCw3ICsxMDM2LDcgQEAgUGFz
c1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IEV3a1ZpZXc6OnRha2VTbmFwc2hvdCgpCiAKICAgICBS
ZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzbmFwc2hvdCA9IGdldEltYWdlU3VyZmFjZUZyb21GcmFt
ZUJ1ZmZlcigwLCAwLCBzZC0+dmlldy53LCBzZC0+dmlldy5oKTsKICAgICAvLyBSZXN1bWUgYWxs
IGFuaW1hdGlvbnMuCi0gICAgbV9wYWdlUHJveHktPnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRB
bmltYXRpb25zKCk7CisgICAgV0tWaWV3UmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlv
bnMod2tWaWV3KCkpOwogCiAgICAgcmV0dXJuIHNuYXBzaG90LnJlbGVhc2UoKTsKICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oCmluZGV4IGEyMTNmOTcu
LjE1M2M2Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3
a1ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgK
QEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJXS0VpbmFTaGFyZWRTdHJpbmcuaCIKICNpbmNs
dWRlICJXS0dlb21ldHJ5LmgiCiAjaW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIKKyNpbmNsdWRlICJX
ZWJWaWV3LmgiCiAjaW5jbHVkZSAiZXdrX3VybF9yZXF1ZXN0X3ByaXZhdGUuaCIKICNpbmNsdWRl
IDxFdmFzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFBvaW50Lmg+CkBAIC00OSw2ICs1MCwx
MCBAQAogI2luY2x1ZGUgIkV2YXNHTFN1cmZhY2UuaCIKICNlbmRpZgogCisjaW5jbHVkZSAiV2Vi
Q29udGV4dC5oIgorI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIldlYlByZWZl
cmVuY2VzLmgiCisKIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgQ29udGV4dE1lbnVDbGllbnRF
Zmw7CiBjbGFzcyBGaW5kQ2xpZW50RWZsOwpAQCAtOTgsMTkgKzEwMywyMCBAQCB0eXBlZGVmIHN0
cnVjdCBFd2tfVmlld19TbWFydF9EYXRhIEV3a19WaWV3X1NtYXJ0X0RhdGE7CiAKIGNsYXNzIEV3
a1ZpZXcgewogcHVibGljOgotCiAgICAgZW51bSBWaWV3QmVoYXZpb3IgewogICAgICAgICBMZWdh
Y3lCZWhhdmlvciwKICAgICAgICAgRGVmYXVsdEJlaGF2aW9yCiAgICAgfTsKLSAgICBFd2tWaWV3
KEV2YXNfT2JqZWN0KiB2aWV3LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFBhc3NS
ZWZQdHI8V2ViS2l0OjpXZWJQYWdlR3JvdXA+IHBhZ2VHcm91cCwgVmlld0JlaGF2aW9yKTsKKyAg
ICBFd2tWaWV3KEV2YXNfT2JqZWN0KiB2aWV3LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRl
eHQsIFdlYktpdDo6V2ViUGFnZUdyb3VwKiBwYWdlR3JvdXAsIFZpZXdCZWhhdmlvcik7CiAgICAg
fkV3a1ZpZXcoKTsKIAogICAgIHN0YXRpYyBFd2tWaWV3KiBmcm9tRXZhc09iamVjdChjb25zdCBF
dmFzX09iamVjdCogdmlldyk7CiAgICAgRXZhc19PYmplY3QqIHZpZXcoKSB7IHJldHVybiBtX2V2
YXNPYmplY3Q7IH0KIAotICAgIFdLUGFnZVJlZiB3a1BhZ2UoKTsKLSAgICBXZWJLaXQ6OldlYlBh
Z2VQcm94eSogcGFnZSgpIHsgcmV0dXJuIG1fcGFnZVByb3h5LmdldCgpOyB9CisgICAgV0tWaWV3
UmVmIHdrVmlldygpIGNvbnN0IHsgcmV0dXJuIHRvQVBJKG1fd2ViVmlldy5nZXQoKSk7IH0KKyAg
ICBXS1BhZ2VSZWYgd2tQYWdlKCkgY29uc3Q7CisKKyAgICBXZWJLaXQ6OldlYlBhZ2VQcm94eSog
cGFnZSgpIHsgcmV0dXJuIG1fd2ViVmlldy0+cGFnZSgpOyB9CiAgICAgRXdrQ29udGV4dCogZXdr
Q29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQogICAgIEV3a1NldHRpbmdzKiBz
ZXR0aW5ncygpIHsgcmV0dXJuIG1fc2V0dGluZ3MuZ2V0KCk7IH0KICAgICBFd2tCYWNrRm9yd2Fy
ZExpc3QqIGJhY2tGb3J3YXJkTGlzdCgpIHsgcmV0dXJuIG1fYmFja0ZvcndhcmRMaXN0LmdldCgp
OyB9CkBAIC0yNDUsNyArMjUxLDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fcGVuZGluZ1N1cmZh
Y2VSZXNpemU7CiAjZW5kaWYKICAgICBPd25QdHI8V2ViS2l0OjpQYWdlQ2xpZW50QmFzZT4gbV9w
YWdlQ2xpZW50OwotICAgIFJlZlB0cjxXZWJLaXQ6OldlYlBhZ2VQcm94eT4gbV9wYWdlUHJveHk7
CisgICAgUmVmUHRyPFdlYktpdDo6V2ViVmlldz4gbV93ZWJWaWV3OwogICAgIE93blB0cjxXZWJL
aXQ6OlBhZ2VMb2FkQ2xpZW50RWZsPiBtX3BhZ2VMb2FkQ2xpZW50OwogICAgIE93blB0cjxXZWJL
aXQ6OlBhZ2VQb2xpY3lDbGllbnRFZmw+IG1fcGFnZVBvbGljeUNsaWVudDsKICAgICBPd25QdHI8
V2ViS2l0OjpQYWdlVUlDbGllbnRFZmw+IG1fcGFnZVVJQ2xpZW50OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCmluZGV4IDcyYTZhZmEuLmM1NDliOGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKQEAg
LTUwNSw3ICs1MDUsNyBAQCBzdGF0aWMgaW5saW5lIEV2YXNfU21hcnQqIGNyZWF0ZUV3a1ZpZXdT
bWFydENsYXNzKHZvaWQpCiAgICAgcmV0dXJuIHNtYXJ0OwogfQogCi1zdGF0aWMgaW5saW5lIEV2
YXNfT2JqZWN0KiBjcmVhdGVFd2tWaWV3KEV2YXMqIGNhbnZhcywgRXZhc19TbWFydCogc21hcnQs
IFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3Vw
UmVmID0gMCwgRXdrVmlldzo6Vmlld0JlaGF2aW9yIGJlaGF2aW9yID0gRXdrVmlldzo6RGVmYXVs
dEJlaGF2aW9yKQorc3RhdGljIGlubGluZSBFd2tWaWV3KiBjcmVhdGVFd2tWaWV3KEV2YXMqIGNh
bnZhcywgRXZhc19TbWFydCogc21hcnQsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwg
V0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmID0gMCwgRXdrVmlldzo6Vmlld0JlaGF2aW9yIGJl
aGF2aW9yID0gRXdrVmlldzo6RGVmYXVsdEJlaGF2aW9yKQogewogICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChjYW52YXMsIDApOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChzbWFydCwgMCk7CkBAIC01MjUsMjEgKzUyNSwyNiBAQCBzdGF0aWMgaW5saW5lIEV2
YXNfT2JqZWN0KiBjcmVhdGVFd2tWaWV3KEV2YXMqIGNhbnZhcywgRXZhc19TbWFydCogc21hcnQs
IFBhc3NSZQogICAgIC8vIERlZmF1bHQgV2ViUGFnZUdyb3VwIGlzIGNyZWF0ZWQgaW4gV2ViQ29u
dGV4dCBjb25zdHJ1Y3RvciBpZiB0aGUgcGFnZUdyb3VwUmVmIGlzIDAsCiAgICAgLy8gc28gd2Ug
ZG8gbm90IG5lZWQgdG8gY3JlYXRlIGl0IGhlcmUuCiAgICAgc21hcnREYXRhLT5wcml2ID0gbmV3
IEV3a1ZpZXcoZXdrVmlldywgY29udGV4dCwgdG9JbXBsKHBhZ2VHcm91cFJlZiksIGJlaGF2aW9y
KTsKLSAgICByZXR1cm4gZXdrVmlldzsKKworICAgIHJldHVybiBzbWFydERhdGEtPnByaXY7CiB9
CiAKIC8qKgogICogQGludGVybmFsCiAgKiBDb25zdHJ1Y3RzIGEgZXdrX3ZpZXcgRXZhc19PYmpl
Y3Qgd2l0aCBXS1R5cGUgcGFyYW1ldGVycy4KICAqLwotRXZhc19PYmplY3QqIGV3a192aWV3X2Jh
c2VfYWRkKEV2YXMqIGNhbnZhcywgV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3Vw
UmVmIHBhZ2VHcm91cFJlZiwgRXdrVmlldzo6Vmlld0JlaGF2aW9yIGJlaGF2aW9yKQorRXdrVmll
dyogZXdrX3ZpZXdfYmFzZV9hZGQoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dFJl
ZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpWaWV3QmVoYXZpb3IgYmVo
YXZpb3IpCiB7CiAgICAgcmV0dXJuIGNyZWF0ZUV3a1ZpZXcoY2FudmFzLCBjcmVhdGVFd2tWaWV3
U21hcnRDbGFzcygpLCBjb250ZXh0UmVmID8gRXdrQ29udGV4dDo6Y3JlYXRlKHRvSW1wbChjb250
ZXh0UmVmKSkgOiBFd2tDb250ZXh0OjpkZWZhdWx0Q29udGV4dCgpLCBwYWdlR3JvdXBSZWYsIGJl
aGF2aW9yKTsKIH0KIAogRXZhc19PYmplY3QqIGV3a192aWV3X3NtYXJ0X2FkZChFdmFzKiBjYW52
YXMsIEV2YXNfU21hcnQqIHNtYXJ0LCBFd2tfQ29udGV4dCogY29udGV4dCkKIHsKLSAgICByZXR1
cm4gY3JlYXRlRXdrVmlldyhjYW52YXMsIHNtYXJ0LCBld2tfb2JqZWN0X2Nhc3Q8RXdrQ29udGV4
dCo+KGNvbnRleHQpKTsKKyAgICBFd2tWaWV3KiBld2tWaWV3ID0gY3JlYXRlRXdrVmlldyhjYW52
YXMsIHNtYXJ0LCBld2tfb2JqZWN0X2Nhc3Q8RXdrQ29udGV4dCo+KGNvbnRleHQpKTsKKyAgICBp
ZiAoIWV3a1ZpZXcpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGV3a1ZpZXctPnZp
ZXcoKTsKIH0KIAogRXZhc19PYmplY3QqIGV3a192aWV3X2FkZF93aXRoX2NvbnRleHQoRXZhcyog
Y2FudmFzLCBFd2tfQ29udGV4dCogY29udGV4dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaAppbmRleCA4M2I0Yzk3Li5jNDkxMmZm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19w
cml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdf
cHJpdmF0ZS5oCkBAIC0yNSw2ICsyNSw2IEBACiAjaW5jbHVkZSA8RXZhcy5oPgogI2luY2x1ZGUg
PFdlYktpdDIvV0tCYXNlLmg+CiAKLUV2YXNfT2JqZWN0KiBld2tfdmlld19iYXNlX2FkZChFdmFz
KiBjYW52YXMsIFdLQ29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OlZpZXdCZWhh
dmlvcik7CitFd2tWaWV3KiBld2tfdmlld19iYXNlX2FkZChFdmFzKiBjYW52YXMsIFdLQ29udGV4
dFJlZiwgV0tQYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OlZpZXdCZWhhdmlvcik7CiAKICNlbmRpZiAv
LyBld2tfdmlld19wcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9lZmwvV2ViSW5zcGVjdG9yUHJveHlFZmwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAKaW5kZXggNDYyYjI2ZC4uODUzZDQ3ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVm
bC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94
eUVmbC5jcHAKQEAgLTk4LDE0ICs5OCwxOSBAQCBXZWJQYWdlUHJveHkqIFdlYkluc3BlY3RvclBy
b3h5OjpwbGF0Zm9ybUNyZWF0ZUluc3BlY3RvclBhZ2UoKQogICAgIGlmICghbV9pbnNwZWN0b3JX
aW5kb3cpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgbV9pbnNwZWN0b3JWaWV3ID0gZXdrX3Zp
ZXdfYmFzZV9hZGQoZWNvcmVfZXZhc19nZXQobV9pbnNwZWN0b3JXaW5kb3cpLCB0b0FQSShwYWdl
KCktPnByb2Nlc3MoKS0+Y29udGV4dCgpKSwgdG9BUEkoaW5zcGVjdG9yUGFnZUdyb3VwKCkpLCBF
d2tWaWV3OjpMZWdhY3lCZWhhdmlvcik7Ci0gICAgRXdrVmlldyogaW5zcGVjdG9yVmlld0ltcGwg
PSBFd2tWaWV3Ojpmcm9tRXZhc09iamVjdChtX2luc3BlY3RvclZpZXcpOwotICAgIGluc3BlY3Rv
clZpZXdJbXBsLT5zZXRUaGVtZVBhdGgoVEVTVF9USEVNRV9ESVIgIi9kZWZhdWx0LmVkaiIpOwor
ICAgIC8vIEZJWE1FOiBSZWZhY3RvciB0byB1c2UgV0tWaWV3UmVmLgorICAgIEV3a1ZpZXcqIGV3
a1ZpZXcgPSBld2tfdmlld19iYXNlX2FkZChlY29yZV9ldmFzX2dldChtX2luc3BlY3RvcldpbmRv
dyksIHRvQVBJKHBhZ2UoKS0+cHJvY2VzcygpLT5jb250ZXh0KCkpLCB0b0FQSShpbnNwZWN0b3JQ
YWdlR3JvdXAoKSksIEV3a1ZpZXc6OkxlZ2FjeUJlaGF2aW9yKTsKKyAgICBpZiAoIWV3a1ZpZXcp
CisgICAgICAgIHJldHVybiAwOworCisgICAgbV9pbnNwZWN0b3JWaWV3ID0gZXdrVmlldy0+dmll
dygpOworCisgICAgZXdrVmlldy0+c2V0VGhlbWVQYXRoKFRFU1RfVEhFTUVfRElSICIvZGVmYXVs
dC5lZGoiKTsKIAotICAgIEV3a19TZXR0aW5ncyogc2V0dGluZ3MgPSBpbnNwZWN0b3JWaWV3SW1w
bC0+c2V0dGluZ3MoKTsKKyAgICBFd2tfU2V0dGluZ3MqIHNldHRpbmdzID0gZXdrVmlldy0+c2V0
dGluZ3MoKTsKICAgICBld2tfc2V0dGluZ3NfZmlsZV9hY2Nlc3NfZnJvbV9maWxlX3VybHNfYWxs
b3dlZF9zZXQoc2V0dGluZ3MsIHRydWUpOwogCi0gICAgcmV0dXJuIGluc3BlY3RvclZpZXdJbXBs
LT5wYWdlKCk7CisgICAgcmV0dXJuIGV3a1ZpZXctPnBhZ2UoKTsKIH0KIAogdm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6cGxhdGZvcm1PcGVuKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9lZmwvV2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dl
YlZpZXcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxYjFmZjYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuY3Bw
CkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9y
YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2ViVmlldy5oIgorCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorI2lu
Y2x1ZGUgIldlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkuaCIKKyNlbmRpZgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworV2ViVmlldzo6V2ViVmlldyhXZWJDb250ZXh0KiBjb250ZXh0LCBQYWdlQ2xp
ZW50KiBwYWdlQ2xpZW50LCBXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCwgRXZhc19PYmplY3QqIGV2
YXNPYmplY3QpCisgICAgOiBtX3dlYlBhZ2VQcm94eShjb250ZXh0LT5jcmVhdGVXZWJQYWdlKHBh
Z2VDbGllbnQsIHBhZ2VHcm91cCkpCisgICAgLCBtX2V2YXNPYmplY3QoZXZhc09iamVjdCkKK3sK
KyAgICBtX3dlYlBhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldEFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKHRydWUpOworICAgIG1fd2ViUGFnZVByb3h5LT5wYWdl
R3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0Rm9yY2VDb21wb3NpdGluZ01vZGUodHJ1ZSk7CisK
KyAgICBjaGFyKiBkZWJ1Z1Zpc3VhbHNFbnZpcm9ubWVudCA9IGdldGVudigiV0VCS0lUX1NIT1df
Q09NUE9TSVRJTkdfREVCVUdfVklTVUFMUyIpOworICAgIGJvb2wgc2hvd0RlYnVnVmlzdWFscyA9
IGRlYnVnVmlzdWFsc0Vudmlyb25tZW50ICYmICFzdHJjbXAoZGVidWdWaXN1YWxzRW52aXJvbm1l
bnQsICIxIik7CisgICAgbV93ZWJQYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygp
LT5zZXRDb21wb3NpdGluZ0JvcmRlcnNWaXNpYmxlKHNob3dEZWJ1Z1Zpc3VhbHMpOworICAgIG1f
d2ViUGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0Q29tcG9zaXRpbmdS
ZXBhaW50Q291bnRlcnNWaXNpYmxlKHNob3dEZWJ1Z1Zpc3VhbHMpOworCisjaWYgRU5BQkxFKEZV
TExTQ1JFRU5fQVBJKQorICAgIG1fd2ViUGFnZVByb3h5LT5mdWxsU2NyZWVuTWFuYWdlcigpLT5z
ZXRXZWJWaWV3KG1fZXZhc09iamVjdCk7CisjZW5kaWYKK30KKworV2ViVmlldzo6fldlYlZpZXco
KQoreworICAgIG1fd2ViUGFnZVByb3h5LT5jbG9zZSgpOworfQorCit2b2lkIFdlYlZpZXc6Omlu
aXRpYWxpemUoKQoreworICAgIG1fd2ViUGFnZVByb3h5LT5pbml0aWFsaXplV2ViUGFnZSgpOwor
fQorCit2b2lkIFdlYlZpZXc6OnNldFRoZW1lUGF0aChXS1N0cmluZ1JlZiB0aGVtZSkKK3sKKyAg
ICBtX3dlYlBhZ2VQcm94eS0+c2V0VGhlbWVQYXRoKHRvV1RGU3RyaW5nKHRoZW1lKS51dGY4KCku
ZGF0YSgpKTsKK30KKwordm9pZCBXZWJWaWV3OjpzdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFu
aW1hdGlvbnMoKQoreworICAgIG1fd2ViUGFnZVByb3h5LT5zdXNwZW5kQWN0aXZlRE9NT2JqZWN0
c0FuZEFuaW1hdGlvbnMoKTsKK30KKwordm9pZCBXZWJWaWV3OjpyZXN1bWVBY3RpdmVET01PYmpl
Y3RzQW5kQW5pbWF0aW9ucygpCit7CisgICAgbV93ZWJQYWdlUHJveHktPnJlc3VtZUFjdGl2ZURP
TU9iamVjdHNBbmRBbmltYXRpb25zKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5lMWU3NjZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2VmbC9XZWJWaWV3LmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgV2ViVmlld19oCisjZGVmaW5lIFdlYlZpZXdfaAorCisjaW5jbHVkZSAiQVBJT2Jq
ZWN0LmgiCisjaW5jbHVkZSAiUGFnZUNsaWVudC5oIgorI2luY2x1ZGUgIldlYkNvbnRleHQuaCIK
KyNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNp
bmNsdWRlICJXZWJQcmVmZXJlbmNlcy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
V2ViVmlldyA6IHB1YmxpYyBBUElPYmplY3QgeworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBU
eXBlIEFQSVR5cGUgPSBUeXBlVmlldzsKKworICAgIFdlYlZpZXcoV2ViQ29udGV4dCosIFBhZ2VD
bGllbnQqLCBXZWJQYWdlR3JvdXAqLCBFdmFzX09iamVjdCopOworICAgIHZpcnR1YWwgfldlYlZp
ZXcoKTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZSgpOworCisgICAgV0tQYWdlUmVmIHBhZ2VSZWYo
KSBjb25zdCB7IHJldHVybiB0b0FQSShtX3dlYlBhZ2VQcm94eS5nZXQoKSk7IH0KKworICAgIHZv
aWQgc2V0VGhlbWVQYXRoKFdLU3RyaW5nUmVmKTsKKyAgICB2b2lkIHN1c3BlbmRBY3RpdmVET01P
YmplY3RzQW5kQW5pbWF0aW9ucygpOworICAgIHZvaWQgcmVzdW1lQWN0aXZlRE9NT2JqZWN0c0Fu
ZEFuaW1hdGlvbnMoKTsKKworICAgIC8vIEZJWE1FOiBSZW1vdmUgd2hlbiBwb3NzaWJsZS4KKyAg
ICBFdmFzX09iamVjdCogZXZhc09iamVjdCgpIHsgcmV0dXJuIG1fZXZhc09iamVjdDsgfQorICAg
IFdlYlBhZ2VQcm94eSogcGFnZSgpIHsgcmV0dXJuIG1fd2ViUGFnZVByb3h5LmdldCgpOyB9CisK
K3ByaXZhdGU6CisgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBBUElUeXBl
OyB9CisKKyAgICBSZWZQdHI8V2ViUGFnZVByb3h5PiBtX3dlYlBhZ2VQcm94eTsKKyAgICBFdmFz
X09iamVjdCogbV9ldmFzT2JqZWN0OworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Rv
b2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA3ZDJkNTc2Li4xYTVkYzc3NiAx
MDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDM5IEBACisyMDEzLTAxLTI5ICBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtlbm5l
dGhAd2Via2l0Lm9yZz4KKworICAgICAgICBbRUZMXVtXSzJdIEludHJvZHVjZSBhIFdlYlZpZXcg
Y2xhc3MgYXMgY291bnRlcnBhcnQgZm9yIFdLVmlld1JlZgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3OTMxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdlIHBsYXRmb3JtVmlldyB0byBiZSBhIFdL
VmlldyBhbmQgdXNlIFdLVmlld0dldEV2YXNPYmplY3QKKyAgICAgICAgZm9yIHRoZSBwbGFjZXMg
d2hlcmUgYW4gRXZhc19PYmplY3QgaXMgbmVlZGVkLgorCisgICAgICAgIEluc3RlYWQgb2YgZXh0
cmFjdGluZyB0aGUgRWNvcmVfRXZhcyogZnJvbSB0aGUgbV92aWV3IHdlIHVzZQorICAgICAgICB0
aGUgbV93aW5kb3cgaW5zdGVhZCwgd2hpY2ggYWN0dWFsbHkgaG9sZHMgdGhlIGl0LgorCisgICAg
ICAgICogVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdlYlZpZXcuaDoKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL2VmbC9QbGF0Zm9ybVdlYlZpZXcuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6
UGxhdGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcpOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6UGxhdGZvcm1XZWJWaWV3Ojp+UGxhdGZvcm1XZWJWaWV3KToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OlBsYXRmb3JtV2ViVmlldzo6cmVzaXplVG8pOgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6UGxhdGZvcm1XZWJWaWV3OjpwYWdlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBsYXRm
b3JtV2ViVmlldzo6c2ltdWxhdGVTcGFjZWJhcktleVByZXNzKToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OlBsYXRmb3JtV2ViVmlldzo6c2ltdWxhdGVNb3VzZU1vdmUpOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6UGxhdGZvcm1XZWJWaWV3OjpzaW11bGF0ZVJpZ2h0Q2xpY2spOgorICAgICAg
ICAqIFdlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3Lmg6CisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9lZmwvRXZlbnRTZW5kZXJQcm94eUVmbC5jcHA6CisgICAgICAgIChXVFI6OkV2
ZW50U2VuZGVyUHJveHk6OnNlbmRUb3VjaEV2ZW50KToKKyAgICAgICAgKFdUUjo6RXZlbnRTZW5k
ZXJQcm94eTo6c2V0VG91Y2hNb2RpZmllcik6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9l
ZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNwcDoKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3
OjpQbGF0Zm9ybVdlYlZpZXcpOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6On5QbGF0
Zm9ybVdlYlZpZXcpOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6OnJlc2l6ZVRvKToK
KyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3OjpwYWdlKToKKyAgICAgICAgKFdUUjo6UGxh
dGZvcm1XZWJWaWV3Ojpmb2N1cyk6CisgICAgICAgIChXVFI6OlBsYXRmb3JtV2ViVmlldzo6d2lu
ZG93RnJhbWUpOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6OnNldFdpbmRvd0ZyYW1l
KToKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3Ojp3aW5kb3dTbmFwc2hvdEltYWdlKToK
KwogMjAxMy0wMS0yOSAgQWxhbiBDdXR0ZXIgIDxhbGFuY3V0dGVyQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBOZWVkIGEgY3ItbGludXggZGVidWcgRVdTIGJvdApkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdlYlZpZXcuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxh
dGZvcm1XZWJWaWV3LmgKaW5kZXggNWFkMWVlZC4uZGNhZjQ0OCAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdlYlZpZXcuaAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1BsYXRmb3JtV2ViVmlldy5oCkBAIC00NywxMyArNDcsOCBAQCB0eXBlZGVmIEhXTkQgUGxhdGZv
cm1XaW5kb3c7CiB0eXBlZGVmIFdLVmlld1JlZiBQbGF0Zm9ybVdLVmlldzsKIHR5cGVkZWYgR3Rr
V2lkZ2V0ICpQbGF0Zm9ybVdpbmRvdzsKICNlbGlmIFBMQVRGT1JNKEVGTCkKLSNpZiBVU0UoRU8p
Ci10eXBlZGVmIHN0cnVjdCBfRW8gRXZhc19PYmplY3Q7Ci0jZWxzZQotdHlwZWRlZiBzdHJ1Y3Qg
X0V2YXNfT2JqZWN0IEV2YXNfT2JqZWN0OwotI2VuZGlmCiB0eXBlZGVmIHN0cnVjdCBfRWNvcmVf
RXZhcyBFY29yZV9FdmFzOwotdHlwZWRlZiBFdmFzX09iamVjdCogUGxhdGZvcm1XS1ZpZXc7Cit0
eXBlZGVmIFdLVmlld1JlZiBQbGF0Zm9ybVdLVmlldzsKIHR5cGVkZWYgRWNvcmVfRXZhcyogUGxh
dGZvcm1XaW5kb3c7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9l
ZmwvUGxhdGZvcm1XZWJWaWV3LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZWZsL1BsYXRmb3Jt
V2ViVmlldy5jcHAKaW5kZXggZDU0NDllYi4uOGEwMzVmMyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9lZmwvUGxhdGZvcm1XZWJWaWV3LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL2VmbC9QbGF0Zm9ybVdlYlZpZXcuY3BwCkBAIC02NSwzMyArNjUsNDEgQEAgUGxhdGZvcm1X
ZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdy
b3VwUmVmIHBhZ2VHcm8KIHsKICAgICBtX3dpbmRvdyA9IGluaXRFY29yZUV2YXMoKTsKICAgICBF
dmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwotICAgIG1fdmlldyA9IHRvSW1w
bChXS1ZpZXdDcmVhdGUoZXZhcywgY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmKSk7Ci0gICAgZXdr
X3ZpZXdfdGhlbWVfc2V0KG1fdmlldywgVEhFTUVfRElSIi9kZWZhdWx0LmVkaiIpOwotICAgIGV2
YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChtX3ZpZXcsICJ3ZWJwcm9jZXNzLGNyYXNoZWQi
LCBvbldlYlByb2Nlc3NDcmFzaGVkLCAwKTsKKyAgICBtX3ZpZXcgPSBXS1ZpZXdDcmVhdGUoZXZh
cywgY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmKTsKKyAgICBld2tfdmlld190aGVtZV9zZXQoV0tW
aWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCBUSEVNRV9ESVIiL2RlZmF1bHQuZWRqIik7CisgICAg
ZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3
KSwgIndlYnByb2Nlc3MsY3Jhc2hlZCIsIG9uV2ViUHJvY2Vzc0NyYXNoZWQsIDApOwogICAgIHJl
c2l6ZVRvKDYwMCwgODAwKTsKIH0KIAogUGxhdGZvcm1XZWJWaWV3Ojp+UGxhdGZvcm1XZWJWaWV3
KCkKIHsKLSAgICBldmFzX29iamVjdF9kZWwobV92aWV3KTsKKyAgICBFdmFzX09iamVjdCogZXZh
c09iamVjdCA9IFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KTsKKworICAgIC8vIFJlbGVhc2Ug
Zmlyc3QuIFdlYlZpZXcgc2hvdWxkIG5vdCBsaXZlIGxvbmdlciB0aGFuIEV3a1ZpZXcsIGFzIEV3
a1ZpZXcgb3ducyBvYmplY3RzIHRoYXQgcGFnZSBwcm94eSByZWZlcnMgdG8uCisgICAgV0tSZWxl
YXNlKG1fdmlldyk7CisKKyAgICAvLyBGSVhNRTogVGhlIEMgV0tWaWV3IEFQSSBjdXJyZW50bHkg
Y3JlYXRlcyB0aGUgRXZhc19PYmplY3QsIHNvIHdlIGhhdmUgdG8gZGVzdHJ1Y3QgaXQKKyAgICAv
LyAoYW5kIGl0cyBkZXBlbmRlbmNpZXMgRXdrVmlldyBhbmQgV2ViS2l0OjpXZWJWaWV3KSB0aGlz
IHdheSwgdW50aWwgdGhpcyBnZXQgZml4ZWQuCisgICAgZXZhc19vYmplY3RfZGVsKGV2YXNPYmpl
Y3QpOworCiAgICAgZWNvcmVfZXZhc19mcmVlKG1fd2luZG93KTsKICAgICBlY29yZV9ldmFzX3No
dXRkb3duKCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpyZXNpemVUbyh1bnNpZ25lZCB3
aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQogewotICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShtX3ZpZXcs
IHdpZHRoLCBoZWlnaHQpOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShXS1ZpZXdHZXRFdmFzT2Jq
ZWN0KG1fdmlldyksIHdpZHRoLCBoZWlnaHQpOwogfQogCiBXS1BhZ2VSZWYgUGxhdGZvcm1XZWJW
aWV3OjpwYWdlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV0tWaWV3R2V0UGFnZSh0b0FQSShtX3Zp
ZXcpKTsKKyAgICByZXR1cm4gV0tWaWV3R2V0UGFnZShtX3ZpZXcpOwogfQogCiB2b2lkIFBsYXRm
b3JtV2ViVmlldzo6c2ltdWxhdGVTcGFjZWJhcktleVByZXNzKCkKIHsKICAgICBFdmFzKiBldmFz
ID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwotICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldCht
X3ZpZXcsIHRydWUpOworICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldChXS1ZpZXdHZXRFdmFzT2Jq
ZWN0KG1fdmlldyksIHRydWUpOwogICAgIGV2YXNfZXZlbnRfZmVlZF9rZXlfZG93bihldmFzLCAi
c3BhY2UiLCAic3BhY2UiLCAiICIsIDAsIDAsIDApOwogICAgIGV2YXNfZXZlbnRfZmVlZF9rZXlf
dXAoZXZhcywgInNwYWNlIiwgInNwYWNlIiwgIiAiLCAwLCAxLCAwKTsKIH0KQEAgLTk5LDE0ICsx
MDcsMTQgQEAgdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnNpbXVsYXRlU3BhY2ViYXJLZXlQcmVzcygp
CiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6c2ltdWxhdGVNb3VzZU1vdmUodW5zaWduZWQgeCwgdW5z
aWduZWQgeSkKIHsKICAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwot
ICAgIGV2YXNfb2JqZWN0X3Nob3cobV92aWV3KTsKKyAgICBldmFzX29iamVjdF9zaG93KFdLVmll
d0dldEV2YXNPYmplY3QobV92aWV3KSk7CiAgICAgZXZhc19ldmVudF9mZWVkX21vdXNlX21vdmUo
ZXZhcywgeCwgeSwgMCwgMCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpzaW11bGF0ZVJp
Z2h0Q2xpY2sodW5zaWduZWQgeCwgdW5zaWduZWQgeSkKIHsKICAgICBFdmFzKiBldmFzID0gZWNv
cmVfZXZhc19nZXQobV93aW5kb3cpOwotICAgIGV2YXNfb2JqZWN0X3Nob3cobV92aWV3KTsKKyAg
ICBldmFzX29iamVjdF9zaG93KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSk7CiAgICAgZXZh
c19ldmVudF9mZWVkX21vdXNlX21vdmUoZXZhcywgeCwgeSwgMCwgMCk7CiAgICAgZXZhc19ldmVu
dF9mZWVkX21vdXNlX2Rvd24oZXZhcywgMywgRVZBU19CVVRUT05fTk9ORSwgMCwgMCk7CiAgICAg
ZXZhc19ldmVudF9mZWVkX21vdXNlX3VwKGV2YXMsIDMsIEVWQVNfQlVUVE9OX05PTkUsIDAsIDAp
OwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaCBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgKaW5kZXggOGY5ZGNkYi4u
NTFjNGJjYyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZp
ZXcuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCkBAIC01
NCwxMyArNTQsOCBAQCB0eXBlZGVmIHN0cnVjdCBfR3RrV2lkZ2V0IEd0a1dpZGdldDsKIHR5cGVk
ZWYgV0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlwZWRlZiBHdGtXaWRnZXQqIFBsYXRmb3Jt
V2luZG93OwogI2VsaWYgUExBVEZPUk0oRUZMKQotI2lmIFVTRShFTykKLXR5cGVkZWYgc3RydWN0
IF9FbyBFdmFzX09iamVjdDsKLSNlbHNlCi10eXBlZGVmIHN0cnVjdCBfRXZhc19PYmplY3QgRXZh
c19PYmplY3Q7Ci0jZW5kaWYKIHR5cGVkZWYgc3RydWN0IF9FY29yZV9FdmFzIEVjb3JlX0V2YXM7
Ci10eXBlZGVmIEV2YXNfT2JqZWN0KiBQbGF0Zm9ybVdLVmlldzsKK3R5cGVkZWYgV0tWaWV3UmVm
IFBsYXRmb3JtV0tWaWV3OwogdHlwZWRlZiBFY29yZV9FdmFzKiBQbGF0Zm9ybVdpbmRvdzsKICNl
bmRpZgogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9FdmVudFNlbmRl
clByb3h5RWZsLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJv
eHlFZmwuY3BwCmluZGV4IGYyODI5YTkuLjEzOTIwZWMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwCisrKyBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwCkBAIC00MzgsNyArNDM4LDcg
QEAgdm9pZCBFdmVudFNlbmRlclByb3h5OjpzZW5kVG91Y2hFdmVudChFd2tfVG91Y2hfRXZlbnRf
VHlwZSBldmVudFR5cGUpCiB7CiAgICAgQVNTRVJUKG1fdG91Y2hQb2ludHMpOwogCi0gICAgRXZh
c19PYmplY3QqIGV3a1ZpZXcgPSBtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0
Zm9ybVZpZXcoKTsKKyAgICBFdmFzX09iamVjdCogZXdrVmlldyA9IFdLVmlld0dldEV2YXNPYmpl
Y3QobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCkpOwogICAg
IGV3a192aWV3X2ZlZWRfdG91Y2hfZXZlbnQoZXdrVmlldywgZXZlbnRUeXBlLCBtX3RvdWNoUG9p
bnRzLCBldmFzX2tleV9tb2RpZmllcl9nZXQoZXZhc19vYmplY3RfZXZhc19nZXQoZXdrVmlldykp
KTsKIAogICAgIEVpbmFfTGlzdCogbGlzdDsKQEAgLTQ5MCwxMiArNDkwLDE0IEBAIHZvaWQgRXZl
bnRTZW5kZXJQcm94eTo6dXBkYXRlVG91Y2hQb2ludChpbnQgaW5kZXgsIGludCB4LCBpbnQgeSkK
IAogdm9pZCBFdmVudFNlbmRlclByb3h5OjpzZXRUb3VjaE1vZGlmaWVyKFdLRXZlbnRNb2RpZmll
cnMgbW9kaWZpZXIsIGJvb2wgZW5hYmxlKQogeworICAgIEV2YXNfT2JqZWN0KiBld2tWaWV3ID0g
V0tWaWV3R2V0RXZhc09iamVjdChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0
Zm9ybVZpZXcoKSk7CisKICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCAoc2l6
ZW9mKG1vZGlmaWVyTmFtZXMpIC8gc2l6ZW9mKGNoYXIqKSk7ICsraW5kZXgpIHsKICAgICAgICAg
aWYgKG1vZGlmaWVyICYgKDEgPDwgaW5kZXgpKSB7CiAgICAgICAgICAgICBpZiAoZW5hYmxlKQot
ICAgICAgICAgICAgICAgIGV2YXNfa2V5X21vZGlmaWVyX29uKGV2YXNfb2JqZWN0X2V2YXNfZ2V0
KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpKSwgbW9kaWZp
ZXJOYW1lc1tpbmRleF0pOworICAgICAgICAgICAgICAgIGV2YXNfa2V5X21vZGlmaWVyX29uKGV2
YXNfb2JqZWN0X2V2YXNfZ2V0KGV3a1ZpZXcpLCBtb2RpZmllck5hbWVzW2luZGV4XSk7CiAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZXZhc19rZXlfbW9kaWZpZXJfb2ZmKGV2YXNf
b2JqZWN0X2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3Jt
VmlldygpKSwgbW9kaWZpZXJOYW1lc1tpbmRleF0pOworICAgICAgICAgICAgICAgIGV2YXNfa2V5
X21vZGlmaWVyX29mZihldmFzX29iamVjdF9ldmFzX2dldChld2tWaWV3KSwgbW9kaWZpZXJOYW1l
c1tpbmRleF0pOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5jcHAKaW5kZXggMWNjYzBiZC4uNjhiMjY5NSAx
MDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZs
LmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9QbGF0Zm9ybVdlYlZpZXdFZmwu
Y3BwCkBAIC02MSw1NiArNjEsNjEgQEAgUGxhdGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXco
V0tDb250ZXh0UmVmIGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCwKICAgICBFdmFz
KiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwogCiAgICAgaWYgKG1fdXNpbmdGaXhl
ZExheW91dCkgewotICAgICAgICBtX3ZpZXcgPSB0b0ltcGwoV0tWaWV3Q3JlYXRlV2l0aEZpeGVk
TGF5b3V0KGV2YXMsIGNvbnRleHQsIHBhZ2VHcm91cCkpOwotICAgICAgICBldmFzX29iamVjdF9y
ZXNpemUobV92aWV3LCA4MDAsIDYwMCk7CisgICAgICAgIG1fdmlldyA9IFdLVmlld0NyZWF0ZVdp
dGhGaXhlZExheW91dChldmFzLCBjb250ZXh0LCBwYWdlR3JvdXApOworICAgICAgICBldmFzX29i
amVjdF9yZXNpemUoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCA4MDAsIDYwMCk7CiAgICAg
fSBlbHNlCi0gICAgICAgIG1fdmlldyA9IHRvSW1wbChXS1ZpZXdDcmVhdGUoZXZhcywgY29udGV4
dCwgcGFnZUdyb3VwKSk7CisgICAgICAgIG1fdmlldyA9IFdLVmlld0NyZWF0ZShldmFzLCBjb250
ZXh0LCBwYWdlR3JvdXApOwogCi0gICAgZXdrX3ZpZXdfdGhlbWVfc2V0KG1fdmlldywgVEhFTUVf
RElSIi9kZWZhdWx0LmVkaiIpOworICAgIGV3a192aWV3X3RoZW1lX3NldChXS1ZpZXdHZXRFdmFz
T2JqZWN0KG1fdmlldyksIFRIRU1FX0RJUiIvZGVmYXVsdC5lZGoiKTsKICAgICBtX3dpbmRvd0lz
S2V5ID0gZmFsc2U7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhtX3ZpZXcpOworICAgIGV2YXNfb2Jq
ZWN0X3Nob3coV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpKTsKIH0KIAogUGxhdGZvcm1XZWJW
aWV3Ojp+UGxhdGZvcm1XZWJWaWV3KCkKIHsKLSAgICBldmFzX29iamVjdF9kZWwobV92aWV3KTsK
KyAgICBFdmFzX09iamVjdCogZXZhc09iamVjdCA9IFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3
KTsKKworICAgIC8vIFJlbGVhc2UgZmlyc3QuIFdlYlZpZXcgc2hvdWxkIG5vdCBsaXZlIGxvbmdl
ciB0aGFuIEV3a1ZpZXcsIGFzIEV3a1ZpZXcgb3ducyBvYmplY3RzIHRoYXQgcGFnZSBwcm94eSBy
ZWZlcnMgdG8uCisgICAgV0tSZWxlYXNlKG1fdmlldyk7CisKKyAgICAvLyBGSVhNRTogVGhlIEMg
V0tWaWV3IEFQSSBjdXJyZW50bHkgY3JlYXRlcyB0aGUgRXZhc19PYmplY3QsIHNvIHdlIGhhdmUg
dG8gZGVzdHJ1Y3QgaXQKKyAgICAvLyAoYW5kIGl0cyBkZXBlbmRlbmNpZXMgRXdrVmlldyBhbmQg
V2ViS2l0OjpXZWJWaWV3KSB0aGlzIHdheSwgdW50aWwgdGhpcyBnZXQgZml4ZWQuCisgICAgZXZh
c19vYmplY3RfZGVsKGV2YXNPYmplY3QpOworCiAgICAgZWNvcmVfZXZhc19mcmVlKG1fd2luZG93
KTsKIH0KIAogdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnJlc2l6ZVRvKHVuc2lnbmVkIHdpZHRoLCB1
bnNpZ25lZCBoZWlnaHQpCiB7Ci0gICAgZXZhc19vYmplY3RfcmVzaXplKG1fdmlldywgd2lkdGgs
IGhlaWdodCk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKFdLVmlld0dldEV2YXNPYmplY3QobV92
aWV3KSwgd2lkdGgsIGhlaWdodCk7CiB9CiAKIFdLUGFnZVJlZiBQbGF0Zm9ybVdlYlZpZXc6OnBh
Z2UoKQogewotICAgIHJldHVybiBXS1ZpZXdHZXRQYWdlKHRvQVBJKG1fdmlldykpOworICAgIHJl
dHVybiBXS1ZpZXdHZXRQYWdlKG1fdmlldyk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3Ojpm
b2N1cygpCiB7CisgICAgRXZhc19PYmplY3QqIGV2YXNPYmplY3QgPSBXS1ZpZXdHZXRFdmFzT2Jq
ZWN0KG1fdmlldyk7CiAgICAgLy8gSW4gYSBmZXcgY2FzZXMsIGFuIGlmcmFtZSBtaWdodCByZWNl
aXZlIGZvY3VzIGZyb20gSmF2YVNjcmlwdCBhbmQgRXZhcyBpcyBub3QgYXdhcmUgb2YgaXQgYXQg
YWxsCiAgICAgLy8gKFdlYkNvcmVTdXBwb3J0Ojpmb2N1c2VkRnJhbWVDaGFuZ2VkKCkgZG9lcyBu
b3QgZW1pdCBhbnkgbm90aWZpY2F0aW9uKS4gV2UgdGhlbiBtYW51YWxseSByZW1vdmUgdGhlCiAg
ICAgLy8gZm9jdXMgZnJvbSB0aGUgdmlldyB0byBtYWtlIHRoZSBjYWxsIGdpdmUgZm9jdXMgdG8g
ZXZhc19vYmplY3RfZm9jdXNfc2V0KC4uLiwgdHJ1ZSkgdG8gYmUgZWZmZWN0ZnVsLgotICAgIGlm
IChXS1BhZ2VHZXRGb2N1c2VkRnJhbWUocGFnZSgpKSAhPSBXS1BhZ2VHZXRNYWluRnJhbWUocGFn
ZSgpKSkKLSAgICAgICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KG1fdmlldywgZmFsc2UpOwotICAg
IGV2YXNfb2JqZWN0X2ZvY3VzX3NldChtX3ZpZXcsIHRydWUpOworICAgIGV2YXNfb2JqZWN0X2Zv
Y3VzX3NldChXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIFdLUGFnZUdldEZvY3VzZWRGcmFt
ZShwYWdlKCkpID09IFdLUGFnZUdldE1haW5GcmFtZShwYWdlKCkpKTsKIH0KIAogV0tSZWN0IFBs
YXRmb3JtV2ViVmlldzo6d2luZG93RnJhbWUoKQogewogICAgIGludCB4LCB5LCB3aWR0aCwgaGVp
Z2h0OwogCi0gICAgRWNvcmVfRXZhcyogZWUgPSBlY29yZV9ldmFzX2Vjb3JlX2V2YXNfZ2V0KGV2
YXNfb2JqZWN0X2V2YXNfZ2V0KG1fdmlldykpOwotICAgIGVjb3JlX2V2YXNfcmVxdWVzdF9nZW9t
ZXRyeV9nZXQoZWUsICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0KTsKKyAgICBlY29yZV9ldmFzX3Jl
cXVlc3RfZ2VvbWV0cnlfZ2V0KG1fd2luZG93LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCk7CiAK
ICAgICByZXR1cm4gV0tSZWN0TWFrZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogdm9pZCBQ
bGF0Zm9ybVdlYlZpZXc6OnNldFdpbmRvd0ZyYW1lKFdLUmVjdCBmcmFtZSkKIHsKLSAgICBFY29y
ZV9FdmFzKiBlZSA9IGVjb3JlX2V2YXNfZWNvcmVfZXZhc19nZXQoZXZhc19vYmplY3RfZXZhc19n
ZXQobV92aWV3KSk7Ci0gICAgZWNvcmVfZXZhc19tb3ZlX3Jlc2l6ZShlZSwgZnJhbWUub3JpZ2lu
LngsIGZyYW1lLm9yaWdpbi55LCBmcmFtZS5zaXplLndpZHRoLCBmcmFtZS5zaXplLmhlaWdodCk7
CisgICAgZWNvcmVfZXZhc19tb3ZlX3Jlc2l6ZShtX3dpbmRvdywgZnJhbWUub3JpZ2luLngsIGZy
YW1lLm9yaWdpbi55LCBmcmFtZS5zaXplLndpZHRoLCBmcmFtZS5zaXplLmhlaWdodCk7CiB9CiAK
IHZvaWQgUGxhdGZvcm1XZWJWaWV3OjphZGRDaHJvbWVJbnB1dEZpZWxkKCkKQEAgLTEyNywxNSAr
MTMyLDEyIEBAIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjptYWtlV2ViVmlld0ZpcnN0UmVzcG9uZGVy
KCkKIAogV0tSZXRhaW5QdHI8V0tJbWFnZVJlZj4gUGxhdGZvcm1XZWJWaWV3Ojp3aW5kb3dTbmFw
c2hvdEltYWdlKCkKIHsKLSAgICBFY29yZV9FdmFzKiBlZSA9IGVjb3JlX2V2YXNfZWNvcmVfZXZh
c19nZXQoZXZhc19vYmplY3RfZXZhc19nZXQobV92aWV3KSk7Ci0gICAgQVNTRVJUKGVlKTsKLQog
ICAgIGludCB3aWR0aDsKICAgICBpbnQgaGVpZ2h0OwotICAgIGVjb3JlX2V2YXNfZ2VvbWV0cnlf
Z2V0KGVlLCAwLCAwLCAmd2lkdGgsICZoZWlnaHQpOworICAgIGVjb3JlX2V2YXNfZ2VvbWV0cnlf
Z2V0KG1fd2luZG93LCAwLCAwLCAmd2lkdGgsICZoZWlnaHQpOwogICAgIEFTU0VSVCh3aWR0aCA+
IDAgJiYgaGVpZ2h0ID4gMCk7CiAKLSAgICByZXR1cm4gYWRvcHRXSyhXS1ZpZXdDcmVhdGVTbmFw
c2hvdCh0b0FQSShtX3ZpZXcpKSk7CisgICAgcmV0dXJuIGFkb3B0V0soV0tWaWV3Q3JlYXRlU25h
cHNob3QobV92aWV3KSk7CiB9CiAKIGJvb2wgUGxhdGZvcm1XZWJWaWV3Ojp2aWV3U3VwcG9ydHNP
cHRpb25zKFdLRGljdGlvbmFyeVJlZiBvcHRpb25zKSBjb25zdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185758</attachid>
            <date>2013-01-31 05:22:26 -0800</date>
            <delta_ts>2013-02-04 09:04:30 -0800</delta_ts>
            <desc>patch</desc>
            <filename>bug-107931-20130131.patch</filename>
            <type>text/plain</type>
            <size>41360</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDg5NzcwM2RlYzdkNTAxMDdjNjQ5ODhlZWRiMTg3OWM1MThiMjhlMjUKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
VHVlIEphbiAyOSAxMjo0NjoxOSAyMDEzICswMjAwCgogICAgYnVnMTA3OTMxCgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmlu
ZGV4IGQ4MzEwY2IuLjlhY2I1YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTYgQEAKKzIwMTMt
MDEtMjkgIEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuICA8a2VubmV0aEB3ZWJraXQub3JnPgor
CisgICAgICAgIFtFRkxdW1dLMl0gSW50cm9kdWNlIGEgV2ViVmlldyBjbGFzcyBhcyBjb3VudGVy
cGFydCBmb3IgV0tWaWV3UmVmCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMDc5MzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUaGlzIGlzIGp1c3Qgb25lIHN0ZXAgb2YgdGhlIG5ldyBwbGFuIGZvciB0aGUg
RUZMIEFQSS4KKworICAgICAgICBUaGUgcGxhbiBpcyB0byBtb3ZlIHRoZSBwdWJsaWMgRUZMLWxp
a2UgQVBJIG9uIHRvcCBvZiB0aGUgc2hhcmVkCisgICAgICAgIFdLMiBDIEFQSSwgcGx1cyBhIGZl
dyBFRkwgZXh0ZW5zaW9ucyAoV0tWaWV3IGNsYXNzIG1vc3RseSkuCisKKyAgICAgICAgVGhlIEVG
TC1saWtlIEFQSSBjYW4gYmUgc2VlbiBhcyBhIGNvbnZlbmllbmNlIEFQSSB3aGljaCB0aWVzCisg
ICAgICAgIHdlbGwgaW50byBFRkwgYW5kIHdoaWNoIG1ha2VzIGl0IGVhc3kgdG8gYWRkIHdlYiBl
eHBlcmllbmNlcworICAgICAgICB0byBleGlzdGluZyBhbmQgbmV3IEVGTCBhcHBsaWNhdGlvbnMu
IEl0IHByb3ZpZGVzIGEgc21hcnQgb2JqZWN0CisgICAgICAgIGxpa2UgQVBJIGFuZCBhIEV2YXNf
T2JqZWN0IGJhc2VkIHZpZXcuCisKKyAgICAgICAgRm9yIG1vcmUgYWR2YW5jZWQgdXNlIGNhc2Vz
LCBzdWNoIGFzIGJyb3dzZXIgYW5kIHJ1bnRpbWUsIGl0IGlzCisgICAgICAgIHBvc3NpYmxlIHRv
IHVzZSB0aGUgV0sqIEMgQVBJLCB3aGljaCBpcyBnaXZlcyBtb3JlIGZsZXhpYmlsaXR5CisgICAg
ICAgIHdoaWxlIGJlaW5nIG1vcmUgbG93IGxldmVsLgorCisgICAgICAgIFRoZSBpZGVhIGlzIHRo
YXQgdGhlIFdLVmlldyBjbGFzcyB3aWxsIG5vdCBkZXBlbmQgb24gRXZhc19PYmplY3QKKyAgICAg
ICAgYW5kIFgxMSAoZnV0dXJlIHBsYW4pIHVubGlrZSB0aGUgY3VycmVudCBFRkwtbGlrZSBBUEku
IFRoaXMgc2hvdWxkCisgICAgICAgIG1ha2UgaXQgcG9zc2libGUgdG8gdXNlIGl0IGZvciBjYXNl
cyB3aGVyZSBub25lIG9mIHRoZXNlIGFyZQorICAgICAgICBhdmFpbGFibGUuCisKKyAgICAgICAg
VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRoZSBXZWJWaWV3IGNsYXNzIHdoaWNoIHNlcnZlcyBhcyBv
dXIKKyAgICAgICAgY291bnRlcnBhcnQgZm9yIHRoZSBXS1ZpZXcgY2xhc3MsIGFuZCBhZGRzIGEg
ZmV3IG5lZWRlZCBtZXRob2RzLgorCisgICAgICAgIFRoZSBFd2tWaWV3IG93bnMgdGhlIFdlYlZp
ZXcgY2xhc3MgKGFuZCB3aWxsIGJlIGNvbnN0cnVjdGluZyBpdAorICAgICAgICBpbiB0aGUgbmVh
ciBmdXR1cmUgd2hlbiB0aGUgRXdrVmlldyBjbGFzcyBoYXMgYmVlbiBjaGFuZ2VkIHRvCisgICAg
ICAgIGhhbmRsZSBhbGwgc21hcnQgb2JqZWN0IHJlbGF0ZWQgY29kZSkKKworICAgICAgICBUaGUg
Y2xlYW4gdXAgb2YgdGhlIHNtYXJ0IG9iamVjdCByZWxhdGVkIGNvZGUgYXMgdGhlIHByb3Blcgor
ICAgICAgICBjb25zdHJ1Y3Rpb24gb2YgRXdrVmlldyBhbmQgV2ViVmlldyB3aWxsIGJlIGRvbmUg
aW4gZm9sbG93LXVwCisgICAgICAgIHBhdGNoZXMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0MvZWZsL1dLQVBJQ2FzdEVmbC5oOgorICAgICAgICAoV2ViS2l0KToKKworICAgICAgICAgICAg
VGhlIFdLVmlldyBBUEkgaXMgbm90IGJhc2VkIG9uIFdlYlZpZXcgYW5kIG5vdCBFdmFzX09iamVj
dCoKKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcDoKKyAgICAgICAg
KFdLVmlld0NyZWF0ZSk6CisgICAgICAgIChXS1ZpZXdDcmVhdGVXaXRoRml4ZWRMYXlvdXQpOgor
ICAgICAgICAoV0tWaWV3SW5pdGlhbGl6ZSk6CisgICAgICAgIChXS1ZpZXdHZXRQYWdlKToKKyAg
ICAgICAgKFdLVmlld1NldFRoZW1lUGF0aCk6CisgICAgICAgIChXS1ZpZXdTdXNwZW5kQWN0aXZl
RE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMpOgorICAgICAgICAoV0tWaWV3UmVzdW1lQWN0aXZlRE9N
T2JqZWN0c0FuZEFuaW1hdGlvbnMpOgorICAgICAgICAoV0tWaWV3R2V0RXZhc09iamVjdCk6Cisg
ICAgICAgIChXS1ZpZXdDcmVhdGVTbmFwc2hvdCk6CisKKyAgICAgICAgICAgIEFkZCBhIGZldyBu
ZXcgV0tWaWV3IEVGTCBDIG1ldGhvZHMsIGFuZCB1cGRhdGUgZXhpc3RpbmcKKyAgICAgICAgICAg
IG1ldGhvZHMgdG8gcmVmbGVjdCB0aGF0IHRoZSBXS1ZpZXdSZWYgaXMgbm93IGEgV2ViVmlldyoK
KworICAgICAgICAgICAgVGhlIGNvbnN0cnVjdGlvbiBtZXRob2RzIHdpbGwgYmUgcmV3cml0dGVu
IHdoZW4gdGhlIHNtYXJ0CisgICAgICAgICAgICBvYmplY3QgY29uc3RydWN0aW9uIGhhcyBiZWVu
IHNvbHZlZC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3Lmg6CisgICAg
ICAgICogVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpXZWJWaWV3KToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlldzo6fldlYlZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojppbml0aWFsaXpl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6c2V0VGhlbWVQYXRoKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlldzo6c3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlldzo6cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlv
bnMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvV2ViVmlldy5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdCk6CisgICAgICAgIChXZWJWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6
cGFnZVJlZik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmV2YXNPYmplY3QpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3OjpwYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6dHlw
ZSk6CisKKyAgICAgICAgICAgIEFkZCBhIG5ldyBXZWJLaXQ6OldlYlZpZXcgY2xhc3MgZm9yIEVG
TC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwOgorICAgICAgICAo
RXdrVmlldzo6RXdrVmlldyk6CisgICAgICAgIChFd2tWaWV3Ojp+RXdrVmlldyk6CisgICAgICAg
IChFd2tWaWV3Ojp3a1BhZ2UpOgorICAgICAgICAoRXdrVmlldzo6ZGV2aWNlU2NhbGVGYWN0b3Ip
OgorICAgICAgICAoRXdrVmlldzo6dGl0bGUpOgorICAgICAgICAoRXdrVmlldzo6c2V0VGhlbWVQ
YXRoKToKKyAgICAgICAgKEV3a1ZpZXc6OmN1c3RvbVRleHRFbmNvZGluZ05hbWUpOgorICAgICAg
ICAoRXdrVmlldzo6c2V0Q3VzdG9tVGV4dEVuY29kaW5nTmFtZSk6CisgICAgICAgIChFd2tWaWV3
OjpjcmVhdGVHTFN1cmZhY2UpOgorICAgICAgICAoRXdrVmlldzo6aW5mb3JtVVJMQ2hhbmdlKToK
KyAgICAgICAgKEV3a1ZpZXc6OnRha2VTbmFwc2hvdCk6CisKKyAgICAgICAgICAgIEJhc2UgbWV0
aG9kcyBvbiBDIEFQSSBpbnN0ZWFkIG9mIGludGVybmFsIEFQSSBhcyBtdWNoCisgICAgICAgICAg
ICBhcyBjdXJyZW50bHkgcG9zc2libGUuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9F
d2tWaWV3Lmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViVmlldyk6CisgICAgICAg
IChFd2tWaWV3KToKKyAgICAgICAgKEV3a1ZpZXc6OndrVmlldyk6CisgICAgICAgIChFd2tWaWV3
OjpwYWdlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHA6CisgICAg
ICAgIChjcmVhdGVFd2tWaWV3KToKKyAgICAgICAgKGV3a192aWV3X2Jhc2VfYWRkKToKKyAgICAg
ICAgKGV3a192aWV3X3NtYXJ0X2FkZCk6CisKKyAgICAgICAgICAgIE1vZGlmeSB0byByZXR1cm4g
dGhlIEV3a1ZpZXcgY2xhc3MgZm9yIG5vdy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a192aWV3X3ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1dlYkluc3BlY3Rv
clByb3h5RWZsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtQ3JlYXRlSW5zcGVjdG9yUGFnZSk6CisKKyAgICAgICAgICAgIFVwZGF0ZWQgZHVlIHRvIGNo
YW5nZWQgQVBJLgorCiAyMDEzLTAxLTMxICBNaWtoYWlsIFBvemRueWFrb3YgIDxtaWtoYWlsLnBv
emRueWFrb3ZAaW50ZWwuY29tPgogCiAgICAgICAgIFtFRkxdW1dLMl0gUmVxdWVzdE1hbmFnZXJD
bGllbnRFZmwsIERvd25sb2FkTWFuYWdlckVmbCBhbmQgQ29udGV4dEhpc3RvcnlDbGllbnRFZmwg
c2hvdWxkIGJlIGJhc2VkIG9uIEMgQVBJCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDMx
M2Y3MTkuLmEwZGU4NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNt
YWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0xMDksNiArMTA5
LDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL2VmbC9XZWJQ
b3B1cE1lbnVQcm94eUVmbC5jcHAKICAgICBVSVByb2Nlc3MvZWZsL1dlYlByZWZlcmVuY2VzRWZs
LmNwcAogICAgIFVJUHJvY2Vzcy9lZmwvV2ViUHJvY2Vzc1Byb3h5RWZsLmNwcAorICAgIFVJUHJv
Y2Vzcy9lZmwvV2ViVmlldy5jcHAKIAogICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvZWZs
L1dlYkluc3BlY3RvclNlcnZlckVmbC5jcHAKICAgICBVSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVy
L3NvdXAvV2ViU29ja2V0U2VydmVyU291cC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tBUElDYXN0RWZsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvZWZsL1dLQVBJQ2FzdEVmbC5oCmluZGV4IGIwMTNhMGEuLjE4ODlmYzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tBUElDYXN0RWZs
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS0FQSUNhc3RFZmwu
aApAQCAtMjQsMTUgKzI0LDExIEBACiAjZXJyb3IgIlBsZWFzZSAjaW5jbHVkZSBcIldLQVBJQ2Fz
dC5oXCIgaW5zdGVhZCBvZiB0aGlzIGZpbGUgZGlyZWN0bHkuIgogI2VuZGlmCiAKLSNpZiBVU0Uo
RU8pCi10eXBlZGVmIHN0cnVjdCBfRW8gRXZhc19PYmplY3Q7Ci0jZWxzZQotdHlwZWRlZiBzdHJ1
Y3QgX0V2YXNfT2JqZWN0IEV2YXNfT2JqZWN0OwotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJLaXQg
ewogCi1XS19BRERfQVBJX01BUFBJTkcoV0tWaWV3UmVmLCBFdmFzX09iamVjdCkKK2NsYXNzIFdl
YlZpZXc7CisKK1dLX0FERF9BUElfTUFQUElORyhXS1ZpZXdSZWYsIFdlYlZpZXcpCiAKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuY3BwCmluZGV4IDMy
YjlkOGYuLjljMWQzMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy9lZmwvV0tWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZs
L1dLVmlldy5jcHAKQEAgLTI5LDI0ICsyOSw1NCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0Owog
CiBXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlKEV2YXMqIGNhbnZhcywgV0tDb250ZXh0UmVmIGNvbnRl
eHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZikKIHsKLSAgICByZXR1cm4gdG9BUEko
ZXdrX3ZpZXdfYmFzZV9hZGQoY2FudmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYsIEV3a1Zp
ZXc6OkxlZ2FjeUJlaGF2aW9yKSk7CisgICAgRXdrVmlldyogZXdrVmlldyA9IGV3a192aWV3X2Jh
c2VfYWRkKGNhbnZhcywgY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpMZWdhY3lC
ZWhhdmlvcik7CisgICAgaWYgKCFld2tWaWV3KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxXS1ZpZXdSZWY+KFdLUmV0YWluKGV3a1ZpZXctPndrVmlldygpKSk7
CiB9CiAKIFdLVmlld1JlZiBXS1ZpZXdDcmVhdGVXaXRoRml4ZWRMYXlvdXQoRXZhcyogY2FudmFz
LCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmKQog
ewotICAgIHJldHVybiB0b0FQSShld2tfdmlld19iYXNlX2FkZChjYW52YXMsIGNvbnRleHRSZWYs
IHBhZ2VHcm91cFJlZiwgRXdrVmlldzo6RGVmYXVsdEJlaGF2aW9yKSk7CisgICAgRXdrVmlldyog
ZXdrVmlldyA9IGV3a192aWV3X2Jhc2VfYWRkKGNhbnZhcywgY29udGV4dFJlZiwgcGFnZUdyb3Vw
UmVmLCBFd2tWaWV3OjpEZWZhdWx0QmVoYXZpb3IpOworICAgIGlmICghZXdrVmlldykKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V0tWaWV3UmVmPihXS1JldGFp
bihld2tWaWV3LT53a1ZpZXcoKSkpOworfQorCit2b2lkIFdLVmlld0luaXRpYWxpemUoV0tWaWV3
UmVmIHZpZXdSZWYpCit7CisgICAgdG9JbXBsKHZpZXdSZWYpLT5pbml0aWFsaXplKCk7CiB9CiAK
IFdLUGFnZVJlZiBXS1ZpZXdHZXRQYWdlKFdLVmlld1JlZiB2aWV3UmVmKQogewotICAgIEV3a1Zp
ZXcqIHZpZXcgPSBFd2tWaWV3Ojpmcm9tRXZhc09iamVjdCh0b0ltcGwodmlld1JlZikpOworICAg
IHJldHVybiB0b0ltcGwodmlld1JlZiktPnBhZ2VSZWYoKTsKK30KIAotICAgIHJldHVybiB2aWV3
LT53a1BhZ2UoKTsKK3ZvaWQgV0tWaWV3U2V0VGhlbWVQYXRoKFdLVmlld1JlZiB2aWV3UmVmLCBX
S1N0cmluZ1JlZiB0aGVtZSkKK3sKKyAgICB0b0ltcGwodmlld1JlZiktPnNldFRoZW1lUGF0aCh0
aGVtZSk7CiB9CiAKLVdLSW1hZ2VSZWYgV0tWaWV3Q3JlYXRlU25hcHNob3QoV0tWaWV3UmVmIHZp
ZXdSZWYpCit2b2lkIFdLVmlld1N1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyhX
S1ZpZXdSZWYgdmlld1JlZikKIHsKLSAgICBFd2tWaWV3KiB2aWV3ID0gRXdrVmlldzo6ZnJvbUV2
YXNPYmplY3QodG9JbXBsKHZpZXdSZWYpKTsKKyAgICB0b0ltcGwodmlld1JlZiktPnN1c3BlbmRB
Y3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworfQogCi0gICAgcmV0dXJuIFdLSW1hZ2VD
cmVhdGVGcm9tQ2Fpcm9TdXJmYWNlKHZpZXctPnRha2VTbmFwc2hvdCgpLmdldCgpLCAwIC8qIG9w
dGlvbnMgKi8pOwordm9pZCBXS1ZpZXdSZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9u
cyhXS1ZpZXdSZWYgdmlld1JlZikKK3sKKyAgICB0b0ltcGwodmlld1JlZiktPnJlc3VtZUFjdGl2
ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7Cit9CisKK0V2YXNfT2JqZWN0KiBXS1ZpZXdHZXRF
dmFzT2JqZWN0KFdLVmlld1JlZiB2aWV3UmVmKQoreworICAgIHJldHVybiB0b0ltcGwodmlld1Jl
ZiktPmV2YXNPYmplY3QoKTsKK30KKworV0tJbWFnZVJlZiBXS1ZpZXdDcmVhdGVTbmFwc2hvdChX
S1ZpZXdSZWYgdmlld1JlZikKK3sKKyAgICBFd2tWaWV3KiBld2tWaWV3ID0gRXdrVmlldzo6ZnJv
bUV2YXNPYmplY3QodG9JbXBsKHZpZXdSZWYpLT5ldmFzT2JqZWN0KCkpOworICAgIHJldHVybiBX
S0ltYWdlQ3JlYXRlRnJvbUNhaXJvU3VyZmFjZShld2tWaWV3LT50YWtlU25hcHNob3QoKS5nZXQo
KSwgMCAvKiBvcHRpb25zICovKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mv
ZWZsL1dLVmlldy5oCmluZGV4IGNjNzMwN2MuLmQ1YjQzMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaApAQCAtMjQsOCArMjQsMTAgQEAKIAogI2lmIFVT
RShFTykKIHR5cGVkZWYgc3RydWN0IF9FbyBFdmFzOwordHlwZWRlZiBzdHJ1Y3QgX0VvIEV2YXNf
T2JqZWN0OwogI2Vsc2UKIHR5cGVkZWYgc3RydWN0IF9FdmFzIEV2YXM7Cit0eXBlZGVmIHN0cnVj
dCBfRXZhc19PYmplY3QgRXZhc19PYmplY3Q7CiAjZW5kaWYKIAogI2lmZGVmIF9fY3BsdXNwbHVz
CkBAIC0zNiw5ICszOCwxOSBAQCBXS19FWFBPUlQgV0tWaWV3UmVmIFdLVmlld0NyZWF0ZShFdmFz
KiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91cAogCiBXS19FWFBPUlQg
V0tWaWV3UmVmIFdLVmlld0NyZWF0ZVdpdGhGaXhlZExheW91dChFdmFzKiBjYW52YXMsIFdLQ29u
dGV4dFJlZiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXApOwogCi1XS19FWFBPUlQg
V0tQYWdlUmVmIFdLVmlld0dldFBhZ2UoV0tWaWV3UmVmIHZpZXcpOworV0tfRVhQT1JUIHZvaWQg
V0tWaWV3SW5pdGlhbGl6ZShXS1ZpZXdSZWYpOwogCi1XS19FWFBPUlQgV0tJbWFnZVJlZiBXS1Zp
ZXdDcmVhdGVTbmFwc2hvdChXS1ZpZXdSZWYgdmlld1JlZik7CitXS19FWFBPUlQgV0tQYWdlUmVm
IFdLVmlld0dldFBhZ2UoV0tWaWV3UmVmKTsKKworV0tfRVhQT1JUIHZvaWQgV0tWaWV3U2V0VGhl
bWVQYXRoKFdLVmlld1JlZiwgV0tTdHJpbmdSZWYpOworCitXS19FWFBPUlQgdm9pZCBXS1ZpZXdT
dXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoV0tWaWV3UmVmKTsKK1dLX0VYUE9S
VCB2b2lkIFdLVmlld1Jlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKFdLVmlld1Jl
Zik7CisKKy8vIEZJWE1FOiBUaGUgbG9uZyB0ZXJtIHBsYW4gaXMgdG8gZ2V0IHJpZCBvZiB0aGlz
LCBzbyBrZWVwIHVzYWdlIHRvIGEgYmFyZSBtaW5pbXVtLgorV0tfRVhQT1JUIEV2YXNfT2JqZWN0
KiBXS1ZpZXdHZXRFdmFzT2JqZWN0KFdLVmlld1JlZik7CisKK1dLX0VYUE9SVCBXS0ltYWdlUmVm
IFdLVmlld0NyZWF0ZVNuYXBzaG90KFdLVmlld1JlZik7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcAppbmRleCA1
YmI0NDY0Li5mMzY2OGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9Fd2tWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9F
d2tWaWV3LmNwcApAQCAtMzgsNyArMzgsOSBAQAogI2luY2x1ZGUgIldLRGljdGlvbmFyeS5oIgog
I2luY2x1ZGUgIldLR2VvbWV0cnkuaCIKICNpbmNsdWRlICJXS051bWJlci5oIgorI2luY2x1ZGUg
IldLUGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAiV0tTdHJpbmcuaCIKKyNpbmNsdWRlICJXS1ZpZXcu
aCIKICNpbmNsdWRlICJXZWJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViSW1hZ2UuaCIKICNpbmNs
dWRlICJXZWJQYWdlR3JvdXAuaCIKQEAgLTExMCwxNCArMTEyLDE0IEBAIGNvbnN0IEV2YXNfT2Jq
ZWN0KiBFd2tWaWV3Ojp2aWV3RnJvbVBhZ2VWaWV3TWFwKGNvbnN0IFdLUGFnZVJlZiBwYWdlKQog
ICAgIHJldHVybiBwYWdlVmlld01hcCgpLmdldChwYWdlKTsKIH0KIAotRXdrVmlldzo6RXdrVmll
dyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0
LCBQYXNzUmVmUHRyPFdlYlBhZ2VHcm91cD4gcGFnZUdyb3VwLCBWaWV3QmVoYXZpb3IgYmVoYXZp
b3IpCi0gICAgOiBtX2V2YXNPYmplY3QoZXZhc09iamVjdCkKK0V3a1ZpZXc6OkV3a1ZpZXcoRXZh
c19PYmplY3QqIHZpZXcsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgV2ViUGFnZUdy
b3VwKiBwYWdlR3JvdXAsIFZpZXdCZWhhdmlvciBiZWhhdmlvcikKKyAgICA6IG1fZXZhc09iamVj
dCh2aWV3KQogICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQogICAgICwgbV9wZW5kaW5nU3VyZmFjZVJlc2l6ZShmYWxzZSkKICNlbmRpZgog
ICAgICwgbV9wYWdlQ2xpZW50KGJlaGF2aW9yID09IERlZmF1bHRCZWhhdmlvciA/IFBhZ2VDbGll
bnREZWZhdWx0SW1wbDo6Y3JlYXRlKHRoaXMpIDogUGFnZUNsaWVudExlZ2FjeUltcGw6OmNyZWF0
ZSh0aGlzKSkKLSAgICAsIG1fcGFnZVByb3h5KG1fY29udGV4dC0+d2ViQ29udGV4dCgpLT5jcmVh
dGVXZWJQYWdlKG1fcGFnZUNsaWVudC5nZXQoKSwgcGFnZUdyb3VwLmdldCgpKSkKKyAgICAsIG1f
d2ViVmlldyhhZG9wdFJlZihuZXcgV2ViVmlldyhtX2NvbnRleHQtPndlYkNvbnRleHQoKS5nZXQo
KSwgbV9wYWdlQ2xpZW50LmdldCgpLCBwYWdlR3JvdXAsIHZpZXcpKSkKICAgICAsIG1fcGFnZUxv
YWRDbGllbnQoUGFnZUxvYWRDbGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKICAgICAsIG1fcGFnZVBv
bGljeUNsaWVudChQYWdlUG9saWN5Q2xpZW50RWZsOjpjcmVhdGUodGhpcykpCiAgICAgLCBtX3Bh
Z2VVSUNsaWVudChQYWdlVUlDbGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKQEAgLTEyNyw3ICsxMjks
NyBAQCBFd2tWaWV3OjpFd2tWaWV3KEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0LCBQYXNzUmVmUHRy
PEV3a0NvbnRleHQ+IGNvbnRleHQsIFBhc3NSZQogI2lmIEVOQUJMRShWSUJSQVRJT04pCiAgICAg
LCBtX3ZpYnJhdGlvbkNsaWVudChWaWJyYXRpb25DbGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKICNl
bmRpZgotICAgICwgbV9iYWNrRm9yd2FyZExpc3QoRXdrQmFja0ZvcndhcmRMaXN0OjpjcmVhdGUo
dG9BUEkobV9wYWdlUHJveHktPmJhY2tGb3J3YXJkTGlzdCgpKSkpCisgICAgLCBtX2JhY2tGb3J3
YXJkTGlzdChFd2tCYWNrRm9yd2FyZExpc3Q6OmNyZWF0ZShXS1BhZ2VHZXRCYWNrRm9yd2FyZExp
c3Qod2tQYWdlKCkpKSkKICNpZiBVU0UoVElMRURfQkFDS0lOR19TVE9SRSkKICAgICAsIG1fcGFn
ZVNjYWxlRmFjdG9yKDEpCiAjZW5kaWYKQEAgLTE0NCwzMyArMTQ2LDE4IEBAIEV3a1ZpZXc6OkV3
a1ZpZXcoRXZhc19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29u
dGV4dCwgUGFzc1JlCiB7CiAgICAgQVNTRVJUKG1fZXZhc09iamVjdCk7CiAgICAgQVNTRVJUKG1f
Y29udGV4dCk7Ci0gICAgQVNTRVJUKG1fcGFnZVByb3h5KTsKIAotI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKLSAgICBtX3BhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCkt
PnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKHRydWUpOwotICAgIG1fcGFnZVByb3h5
LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0Rm9yY2VDb21wb3NpdGluZ01vZGUodHJ1
ZSk7Ci0gICAgY2hhciogZGVidWdWaXN1YWxzRW52aXJvbm1lbnQgPSBnZXRlbnYoIldFQktJVF9T
SE9XX0NPTVBPU0lUSU5HX0RFQlVHX1ZJU1VBTFMiKTsKLSAgICBib29sIHNob3dEZWJ1Z1Zpc3Vh
bHMgPSBkZWJ1Z1Zpc3VhbHNFbnZpcm9ubWVudCAmJiAhc3RyY21wKGRlYnVnVmlzdWFsc0Vudmly
b25tZW50LCAiMSIpOwotICAgIG1fcGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMo
KS0+c2V0Q29tcG9zaXRpbmdCb3JkZXJzVmlzaWJsZShzaG93RGVidWdWaXN1YWxzKTsKLSAgICBt
X3BhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldENvbXBvc2l0aW5nUmVw
YWludENvdW50ZXJzVmlzaWJsZShzaG93RGVidWdWaXN1YWxzKTsKLSNpZiBFTkFCTEUoV0VCR0wp
Ci0gICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRXZWJHTEVu
YWJsZWQodHJ1ZSk7Ci0jZW5kaWYKLSAgICBpZiAoYmVoYXZpb3IgPT0gRGVmYXVsdEJlaGF2aW9y
KQotICAgICAgICBtX3BhZ2VQcm94eS0+c2V0VXNlRml4ZWRMYXlvdXQodHJ1ZSk7Ci0jZW5kaWYK
KyAgICBXS1ZpZXdJbml0aWFsaXplKHdrVmlldygpKTsKIAotICAgIG1fcGFnZVByb3h5LT5pbml0
aWFsaXplV2ViUGFnZSgpOworICAgIFdLUGFnZVNldFVzZUZpeGVkTGF5b3V0KHdrUGFnZSgpLCBi
ZWhhdmlvciA9PSBEZWZhdWx0QmVoYXZpb3IpOwogCi0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJ
KQotICAgIG1fcGFnZVByb3h5LT5mdWxsU2NyZWVuTWFuYWdlcigpLT5zZXRXZWJWaWV3KG1fZXZh
c09iamVjdCk7Ci0gICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5z
ZXRGdWxsU2NyZWVuRW5hYmxlZCh0cnVlKTsKLSNlbmRpZgotI2lmIEVOQUJMRShXRUJfQVVESU8p
Ci0gICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRXZWJBdWRp
b0VuYWJsZWQodHJ1ZSk7Ci0jZW5kaWYKKyAgICBXS1BhZ2VHcm91cFJlZiB3a1BhZ2VHcm91cCA9
IFdLUGFnZUdldFBhZ2VHcm91cCh3a1BhZ2UoKSk7CisgICAgV0tQcmVmZXJlbmNlc1JlZiB3a1By
ZWZlcmVuY2VzID0gV0tQYWdlR3JvdXBHZXRQcmVmZXJlbmNlcyh3a1BhZ2VHcm91cCk7CiAKLSAg
ICBtX3BhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldE9mZmxpbmVXZWJB
cHBsaWNhdGlvbkNhY2hlRW5hYmxlZCh0cnVlKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0V2ViR0xF
bmFibGVkKHdrUHJlZmVyZW5jZXMsIHRydWUpOworICAgIFdLUHJlZmVyZW5jZXNTZXRGdWxsU2Ny
ZWVuRW5hYmxlZCh3a1ByZWZlcmVuY2VzLCB0cnVlKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0V2Vi
QXVkaW9FbmFibGVkKHdrUHJlZmVyZW5jZXMsIHRydWUpOworICAgIFdLUHJlZmVyZW5jZXNTZXRP
ZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQod2tQcmVmZXJlbmNlcywgdHJ1ZSk7CiAK
ICAgICAvLyBFbmFibGUgbW91c2UgZXZlbnRzIGJ5IGRlZmF1bHQKICAgICBzZXRNb3VzZUV2ZW50
c0VuYWJsZWQodHJ1ZSk7CkBAIC0xODYsOCArMTczLDYgQEAgRXdrVmlldzo6RXdrVmlldyhFdmFz
X09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBQYXNz
UmUKIAogRXdrVmlldzo6fkV3a1ZpZXcoKQogewotICAgIG1fcGFnZVByb3h5LT5jbG9zZSgpOwot
CiAgICAgLy8gVW5yZWdpc3RlciBpY29uIGNoYW5nZSBjYWxsYmFjay4KICAgICBFd2tGYXZpY29u
RGF0YWJhc2UqIGljb25EYXRhYmFzZSA9IG1fY29udGV4dC0+ZmF2aWNvbkRhdGFiYXNlKCk7CiAg
ICAgQVNTRVJUKGljb25EYXRhYmFzZSk7CkBAIC0yMTUsOSArMjAwLDkgQEAgRXdrVmlldyogRXdr
Vmlldzo6ZnJvbUV2YXNPYmplY3QoY29uc3QgRXZhc19PYmplY3QqIHZpZXcpCiAgKiBAaW50ZXJu
YWwKICAqIFJldHJpZXZlcyB0aGUgaW50ZXJuYWwgV0tQYWdlIGZvciB0aGlzIHZpZXcuCiAgKi8K
LVdLUGFnZVJlZiBFd2tWaWV3Ojp3a1BhZ2UoKQorV0tQYWdlUmVmIEV3a1ZpZXc6OndrUGFnZSgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRvQVBJKG1fcGFnZVByb3h5LmdldCgpKTsKKyAgICByZXR1
cm4gV0tWaWV3R2V0UGFnZSh3a1ZpZXcoKSk7CiB9CiAKIHZvaWQgRXdrVmlldzo6c2V0Q3Vyc29y
KGNvbnN0IEN1cnNvciYgY3Vyc29yKQpAQCAtMzAxLDcgKzI4Niw3IEBAIHZvaWQgRXdrVmlldzo6
c2V0RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGUpCiAKIGZsb2F0IEV3a1ZpZXc6OmRldmlj
ZVNjYWxlRmFjdG9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9wYWdlUHJveHktPmRldmljZVNj
YWxlRmFjdG9yKCk7CisgICAgcmV0dXJuIFdLUGFnZUdldEJhY2tpbmdTY2FsZUZhY3Rvcih3a1Bh
Z2UoKSk7CiB9CiAKIEFmZmluZVRyYW5zZm9ybSBFd2tWaWV3Ojp0cmFuc2Zvcm1Gcm9tU2NlbmUo
KSBjb25zdApAQCAtNTI3LDcgKzUxMiw3IEBAIGJvb2wgRXdrVmlldzo6aXNWaXNpYmxlKCkgY29u
c3QKIAogY29uc3QgY2hhciogRXdrVmlldzo6dGl0bGUoKSBjb25zdAogewotICAgIG1fdGl0bGUg
PSBtX3BhZ2VQcm94eS0+cGFnZVRpdGxlKCkudXRmOCgpLmRhdGEoKTsKKyAgICBtX3RpdGxlID0g
V0tFaW5hU2hhcmVkU3RyaW5nKEFkb3B0V0ssIFdLUGFnZUNvcHlUaXRsZSh3a1BhZ2UoKSkpOwog
CiAgICAgcmV0dXJuIG1fdGl0bGU7CiB9CkBAIC01NTAsMjQgKzUzNSwyNiBAQCB2b2lkIEV3a1Zp
ZXc6OnNldFRoZW1lUGF0aChjb25zdCBjaGFyKiB0aGVtZSkKIHsKICAgICBpZiAobV90aGVtZSAh
PSB0aGVtZSkgewogICAgICAgICBtX3RoZW1lID0gdGhlbWU7Ci0gICAgICAgIG1fcGFnZVByb3h5
LT5zZXRUaGVtZVBhdGgodGhlbWUpOworICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
d2tUaGVtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcodGhlbWUpKTsK
KyAgICAgICAgV0tWaWV3U2V0VGhlbWVQYXRoKHdrVmlldygpLCB3a1RoZW1lLmdldCgpKTsKICAg
ICB9CiB9CiAKIGNvbnN0IGNoYXIqIEV3a1ZpZXc6OmN1c3RvbVRleHRFbmNvZGluZ05hbWUoKSBj
b25zdAogewotICAgIFN0cmluZyBjdXN0b21FbmNvZGluZyA9IG1fcGFnZVByb3h5LT5jdXN0b21U
ZXh0RW5jb2RpbmdOYW1lKCk7Ci0gICAgaWYgKGN1c3RvbUVuY29kaW5nLmlzRW1wdHkoKSkKKyAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gY3VzdG9tRW5jb2RpbmcgPSBhZG9wdFdLKFdLUGFn
ZUNvcHlDdXN0b21UZXh0RW5jb2RpbmdOYW1lKHdrUGFnZSgpKSk7CisgICAgaWYgKFdLU3RyaW5n
SXNFbXB0eShjdXN0b21FbmNvZGluZy5nZXQoKSkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAg
bV9jdXN0b21FbmNvZGluZyA9IGN1c3RvbUVuY29kaW5nLnV0ZjgoKS5kYXRhKCk7CisgICAgbV9j
dXN0b21FbmNvZGluZyA9IFdLRWluYVNoYXJlZFN0cmluZyhjdXN0b21FbmNvZGluZy5nZXQoKSk7
CiAKICAgICByZXR1cm4gbV9jdXN0b21FbmNvZGluZzsKIH0KIAogdm9pZCBFd2tWaWV3OjpzZXRD
dXN0b21UZXh0RW5jb2RpbmdOYW1lKGNvbnN0IFN0cmluZyYgZW5jb2RpbmcpCiB7Ci0gICAgbV9w
YWdlUHJveHktPnNldEN1c3RvbVRleHRFbmNvZGluZ05hbWUoZW5jb2RpbmcpOworICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiB3a0VuY29kaW5nID0gYWRvcHRXSyh0b0NvcGllZEFQSShlbmNv
ZGluZykpOworICAgIFdLUGFnZVNldEN1c3RvbVRleHRFbmNvZGluZ05hbWUod2tQYWdlKCksIHdr
RW5jb2RpbmcuZ2V0KCkpOwogfQogCiB2b2lkIEV3a1ZpZXc6OnNldE1vdXNlRXZlbnRzRW5hYmxl
ZChib29sIGVuYWJsZWQpCkBAIC02NDksOSArNjM2LDYgQEAgYm9vbCBFd2tWaWV3OjpjcmVhdGVH
TFN1cmZhY2UoY29uc3QgSW50U2l6ZSYgdmlld1NpemUpCiAgICAgICAgIGlmICghbV9ldmFzR0wp
IHsKICAgICAgICAgICAgIFdBUk4oIkZhaWxlZCB0byBjcmVhdGUgRXZhc19HTCwgZmFsbGluZyBi
YWNrIHRvIHNvZnR3YXJlIG1vZGUuIik7CiAgICAgICAgICAgICBtX2lzSGFyZHdhcmVBY2NlbGVy
YXRlZCA9IGZhbHNlOwotI2lmIEVOQUJMRShXRUJHTCkKLSAgICAgICAgICAgIG1fcGFnZVByb3h5
LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0V2ViR0xFbmFibGVkKGZhbHNlKTsKLSNl
bmRpZgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtODk0
LDE1ICs4NzgsMTMgQEAgdW5zaWduZWQgbG9uZyBsb25nIEV3a1ZpZXc6OmluZm9ybURhdGFiYXNl
UXVvdGFSZWFjaGVkKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW0KICAqLwogdm9pZCBFd2tWaWV3
OjppbmZvcm1VUkxDaGFuZ2UoKQogewotICAgIFN0cmluZyBhY3RpdmVVUkwgPSBtX3BhZ2VQcm94
eS0+YWN0aXZlVVJMKCk7Ci0gICAgaWYgKGFjdGl2ZVVSTC5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybjsKKyAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gd2tBY3RpdmVVUkwgPSBhZG9wdFdLKFdL
UGFnZUNvcHlBY3RpdmVVUkwod2tQYWdlKCkpKTsKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gd2tVUkxTdHJpbmcgPSB3a0FjdGl2ZVVSTCA/IGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKHdr
QWN0aXZlVVJMLmdldCgpKSkgOiBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCIiKSk7CiAKLSAgICBDU3RyaW5nIHJhd0FjdGl2ZVVSTCA9IGFjdGl2ZVVSTC51dGY4KCk7Ci0g
ICAgaWYgKG1fdXJsID09IHJhd0FjdGl2ZVVSTC5kYXRhKCkpCisgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcod2tVUkxTdHJpbmcuZ2V0KCksIG1fdXJsKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgbV91cmwgPSByYXdBY3RpdmVVUkwuZGF0YSgpOworICAgIG1fdXJsID0gV0tF
aW5hU2hhcmVkU3RyaW5nKHdrVVJMU3RyaW5nLmdldCgpKTsKICAgICBzbWFydENhbGxiYWNrPFVS
TENoYW5nZWQ+KCkuY2FsbChtX3VybCk7CiAKICAgICAvLyBVcGRhdGUgdGhlIHZpZXcncyBmYXZp
Y29uLgpAQCAtMTAzNCw3ICsxMDE2LDcgQEAgdm9pZCBFd2tWaWV3OjpvbkZhdmljb25DaGFuZ2Vk
KGNvbnN0IGNoYXIqIHBhZ2VVUkwsIHZvaWQqIGV2ZW50SW5mbykKIFBhc3NSZWZQdHI8Y2Fpcm9f
c3VyZmFjZV90PiBFd2tWaWV3Ojp0YWtlU25hcHNob3QoKQogewogICAgIC8vIFN1c3BlbmQgYWxs
IGFuaW1hdGlvbnMgYmVmb3JlIHRha2luZyB0aGUgc25hcHNob3QuCi0gICAgbV9wYWdlUHJveHkt
PnN1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworICAgIFdLVmlld1N1c3Bl
bmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyh3a1ZpZXcoKSk7CiAKICAgICAvLyBXYWl0
IGZvciB0aGUgcGVuZGluZyByZXBhaW50IGV2ZW50cyB0byBiZSBwcm9jZXNzZWQuCiAgICAgd2hp
bGUgKG1fZGlzcGxheVRpbWVyLmlzQWN0aXZlKCkpCkBAIC0xMDQ2LDcgKzEwMjgsNyBAQCBQYXNz
UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gRXdrVmlldzo6dGFrZVNuYXBzaG90KCkKICNlbmRpZgog
ICAgICAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzbmFwc2hvdCA9IGNyZWF0ZVN1cmZhY2VG
b3JJbWFnZShzZC0+aW1hZ2UpOwogICAgICAgICAvLyBSZXN1bWUgYWxsIGFuaW1hdGlvbnMuCi0g
ICAgICAgIG1fcGFnZVByb3h5LT5yZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygp
OworICAgICAgICBXS1ZpZXdSZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyh3a1Zp
ZXcoKSk7CiAKICAgICAgICAgcmV0dXJuIHNuYXBzaG90LnJlbGVhc2UoKTsKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCkBAIC0xMDU0LDcgKzEwMzYsNyBAQCBQYXNzUmVmUHRyPGNh
aXJvX3N1cmZhY2VfdD4gRXdrVmlldzo6dGFrZVNuYXBzaG90KCkKIAogICAgIFJlZlB0cjxjYWly
b19zdXJmYWNlX3Q+IHNuYXBzaG90ID0gZ2V0SW1hZ2VTdXJmYWNlRnJvbUZyYW1lQnVmZmVyKDAs
IDAsIHNkLT52aWV3LncsIHNkLT52aWV3LmgpOwogICAgIC8vIFJlc3VtZSBhbGwgYW5pbWF0aW9u
cy4KLSAgICBtX3BhZ2VQcm94eS0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMo
KTsKKyAgICBXS1ZpZXdSZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyh3a1ZpZXco
KSk7CiAKICAgICByZXR1cm4gc25hcHNob3QucmVsZWFzZSgpOwogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKaW5kZXggMzdhOGQxYi4uYzAzMGFjNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaApAQCAtMjcsNiAr
MjcsNyBAQAogI2luY2x1ZGUgIldLRWluYVNoYXJlZFN0cmluZy5oIgogI2luY2x1ZGUgIldLR2Vv
bWV0cnkuaCIKICNpbmNsdWRlICJXS1JldGFpblB0ci5oIgorI2luY2x1ZGUgIldlYlZpZXcuaCIK
ICNpbmNsdWRlICJld2tfdXJsX3JlcXVlc3RfcHJpdmF0ZS5oIgogI2luY2x1ZGUgPEV2YXMuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UG9pbnQuaD4KQEAgLTQ5LDYgKzUwLDEwIEBACiAjaW5j
bHVkZSAiRXZhc0dMU3VyZmFjZS5oIgogI2VuZGlmCiAKKyNpbmNsdWRlICJXZWJDb250ZXh0Lmgi
CisjaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIK
KwogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBDb250ZXh0TWVudUNsaWVudEVmbDsKIGNsYXNz
IEZpbmRDbGllbnRFZmw7CkBAIC05OCwxOSArMTAzLDIwIEBAIHR5cGVkZWYgc3RydWN0IEV3a19W
aWV3X1NtYXJ0X0RhdGEgRXdrX1ZpZXdfU21hcnRfRGF0YTsKIAogY2xhc3MgRXdrVmlldyB7CiBw
dWJsaWM6Ci0KICAgICBlbnVtIFZpZXdCZWhhdmlvciB7CiAgICAgICAgIExlZ2FjeUJlaGF2aW9y
LAogICAgICAgICBEZWZhdWx0QmVoYXZpb3IKICAgICB9OwotICAgIEV3a1ZpZXcoRXZhc19PYmpl
Y3QqIHZpZXcsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgUGFzc1JlZlB0cjxXZWJL
aXQ6OldlYlBhZ2VHcm91cD4gcGFnZUdyb3VwLCBWaWV3QmVoYXZpb3IpOworICAgIEV3a1ZpZXco
RXZhc19PYmplY3QqIHZpZXcsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgV2ViS2l0
OjpXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCwgVmlld0JlaGF2aW9yKTsKICAgICB+RXdrVmlldygp
OwogCiAgICAgc3RhdGljIEV3a1ZpZXcqIGZyb21FdmFzT2JqZWN0KGNvbnN0IEV2YXNfT2JqZWN0
KiB2aWV3KTsKICAgICBFdmFzX09iamVjdCogdmlldygpIHsgcmV0dXJuIG1fZXZhc09iamVjdDsg
fQogCi0gICAgV0tQYWdlUmVmIHdrUGFnZSgpOwotICAgIFdlYktpdDo6V2ViUGFnZVByb3h5KiBw
YWdlKCkgeyByZXR1cm4gbV9wYWdlUHJveHkuZ2V0KCk7IH0KKyAgICBXS1ZpZXdSZWYgd2tWaWV3
KCkgY29uc3QgeyByZXR1cm4gdG9BUEkobV93ZWJWaWV3LmdldCgpKTsgfQorICAgIFdLUGFnZVJl
ZiB3a1BhZ2UoKSBjb25zdDsKKworICAgIFdlYktpdDo6V2ViUGFnZVByb3h5KiBwYWdlKCkgeyBy
ZXR1cm4gbV93ZWJWaWV3LT5wYWdlKCk7IH0KICAgICBFd2tDb250ZXh0KiBld2tDb250ZXh0KCkg
eyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CiAgICAgRXdrU2V0dGluZ3MqIHNldHRpbmdzKCkg
eyByZXR1cm4gbV9zZXR0aW5ncy5nZXQoKTsgfQogICAgIEV3a0JhY2tGb3J3YXJkTGlzdCogYmFj
a0ZvcndhcmRMaXN0KCkgeyByZXR1cm4gbV9iYWNrRm9yd2FyZExpc3QuZ2V0KCk7IH0KQEAgLTI0
NSw3ICsyNTEsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9wZW5kaW5nU3VyZmFjZVJlc2l6ZTsK
ICNlbmRpZgogICAgIE93blB0cjxXZWJLaXQ6OlBhZ2VDbGllbnRCYXNlPiBtX3BhZ2VDbGllbnQ7
Ci0gICAgUmVmUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5PiBtX3BhZ2VQcm94eTsKKyAgICBSZWZQ
dHI8V2ViS2l0OjpXZWJWaWV3PiBtX3dlYlZpZXc7CiAgICAgT3duUHRyPFdlYktpdDo6UGFnZUxv
YWRDbGllbnRFZmw+IG1fcGFnZUxvYWRDbGllbnQ7CiAgICAgT3duUHRyPFdlYktpdDo6UGFnZVBv
bGljeUNsaWVudEVmbD4gbV9wYWdlUG9saWN5Q2xpZW50OwogICAgIE93blB0cjxXZWJLaXQ6OlBh
Z2VVSUNsaWVudEVmbD4gbV9wYWdlVUlDbGllbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKaW5kZXggNzJhNmFmYS4uYzU0OWI4YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcApAQCAtNTA1LDcgKzUw
NSw3IEBAIHN0YXRpYyBpbmxpbmUgRXZhc19TbWFydCogY3JlYXRlRXdrVmlld1NtYXJ0Q2xhc3Mo
dm9pZCkKICAgICByZXR1cm4gc21hcnQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRXZhc19PYmplY3Qq
IGNyZWF0ZUV3a1ZpZXcoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgUGFzc1JlZlB0
cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYgPSAwLCBF
d2tWaWV3OjpWaWV3QmVoYXZpb3IgYmVoYXZpb3IgPSBFd2tWaWV3OjpEZWZhdWx0QmVoYXZpb3Ip
CitzdGF0aWMgaW5saW5lIEV3a1ZpZXcqIGNyZWF0ZUV3a1ZpZXcoRXZhcyogY2FudmFzLCBFdmFz
X1NtYXJ0KiBzbWFydCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91
cFJlZiBwYWdlR3JvdXBSZWYgPSAwLCBFd2tWaWV3OjpWaWV3QmVoYXZpb3IgYmVoYXZpb3IgPSBF
d2tWaWV3OjpEZWZhdWx0QmVoYXZpb3IpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKGNhbnZhcywgMCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNt
YXJ0LCAwKTsKQEAgLTUyNSwyMSArNTI1LDI2IEBAIHN0YXRpYyBpbmxpbmUgRXZhc19PYmplY3Qq
IGNyZWF0ZUV3a1ZpZXcoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgUGFzc1JlCiAg
ICAgLy8gRGVmYXVsdCBXZWJQYWdlR3JvdXAgaXMgY3JlYXRlZCBpbiBXZWJDb250ZXh0IGNvbnN0
cnVjdG9yIGlmIHRoZSBwYWdlR3JvdXBSZWYgaXMgMCwKICAgICAvLyBzbyB3ZSBkbyBub3QgbmVl
ZCB0byBjcmVhdGUgaXQgaGVyZS4KICAgICBzbWFydERhdGEtPnByaXYgPSBuZXcgRXdrVmlldyhl
d2tWaWV3LCBjb250ZXh0LCB0b0ltcGwocGFnZUdyb3VwUmVmKSwgYmVoYXZpb3IpOwotICAgIHJl
dHVybiBld2tWaWV3OworCisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+cHJpdjsKIH0KIAogLyoqCiAg
KiBAaW50ZXJuYWwKICAqIENvbnN0cnVjdHMgYSBld2tfdmlldyBFdmFzX09iamVjdCB3aXRoIFdL
VHlwZSBwYXJhbWV0ZXJzLgogICovCi1FdmFzX09iamVjdCogZXdrX3ZpZXdfYmFzZV9hZGQoRXZh
cyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdy
b3VwUmVmLCBFd2tWaWV3OjpWaWV3QmVoYXZpb3IgYmVoYXZpb3IpCitFd2tWaWV3KiBld2tfdmll
d19iYXNlX2FkZChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VH
cm91cFJlZiBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OlZpZXdCZWhhdmlvciBiZWhhdmlvcikKIHsK
ICAgICByZXR1cm4gY3JlYXRlRXdrVmlldyhjYW52YXMsIGNyZWF0ZUV3a1ZpZXdTbWFydENsYXNz
KCksIGNvbnRleHRSZWYgPyBFd2tDb250ZXh0OjpjcmVhdGUodG9JbXBsKGNvbnRleHRSZWYpKSA6
IEV3a0NvbnRleHQ6OmRlZmF1bHRDb250ZXh0KCksIHBhZ2VHcm91cFJlZiwgYmVoYXZpb3IpOwog
fQogCiBFdmFzX09iamVjdCogZXdrX3ZpZXdfc21hcnRfYWRkKEV2YXMqIGNhbnZhcywgRXZhc19T
bWFydCogc21hcnQsIEV3a19Db250ZXh0KiBjb250ZXh0KQogewotICAgIHJldHVybiBjcmVhdGVF
d2tWaWV3KGNhbnZhcywgc21hcnQsIGV3a19vYmplY3RfY2FzdDxFd2tDb250ZXh0Kj4oY29udGV4
dCkpOworICAgIEV3a1ZpZXcqIGV3a1ZpZXcgPSBjcmVhdGVFd2tWaWV3KGNhbnZhcywgc21hcnQs
IGV3a19vYmplY3RfY2FzdDxFd2tDb250ZXh0Kj4oY29udGV4dCkpOworICAgIGlmICghZXdrVmll
dykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gZXdrVmlldy0+dmlldygpOwogfQog
CiBFdmFzX09iamVjdCogZXdrX3ZpZXdfYWRkX3dpdGhfY29udGV4dChFdmFzKiBjYW52YXMsIEV3
a19Db250ZXh0KiBjb250ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oCmluZGV4IDgzYjRjOTcuLmM0OTEyZmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19wcml2YXRlLmgK
QEAgLTI1LDYgKzI1LDYgQEAKICNpbmNsdWRlIDxFdmFzLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9X
S0Jhc2UuaD4KIAotRXZhc19PYmplY3QqIGV3a192aWV3X2Jhc2VfYWRkKEV2YXMqIGNhbnZhcywg
V0tDb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiwgRXdrVmlldzo6Vmlld0JlaGF2aW9yKTsKK0V3
a1ZpZXcqIGV3a192aWV3X2Jhc2VfYWRkKEV2YXMqIGNhbnZhcywgV0tDb250ZXh0UmVmLCBXS1Bh
Z2VHcm91cFJlZiwgRXdrVmlldzo6Vmlld0JlaGF2aW9yKTsKIAogI2VuZGlmIC8vIGV3a192aWV3
X3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJJ
bnNwZWN0b3JQcm94eUVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYklu
c3BlY3RvclByb3h5RWZsLmNwcAppbmRleCA0NjJiMjZkLi44NTNkNDdlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkluc3BlY3RvclByb3h5RWZsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkluc3BlY3RvclByb3h5RWZsLmNwcApA
QCAtOTgsMTQgKzk4LDE5IEBAIFdlYlBhZ2VQcm94eSogV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRm
b3JtQ3JlYXRlSW5zcGVjdG9yUGFnZSgpCiAgICAgaWYgKCFtX2luc3BlY3RvcldpbmRvdykKICAg
ICAgICAgcmV0dXJuIDA7CiAKLSAgICBtX2luc3BlY3RvclZpZXcgPSBld2tfdmlld19iYXNlX2Fk
ZChlY29yZV9ldmFzX2dldChtX2luc3BlY3RvcldpbmRvdyksIHRvQVBJKHBhZ2UoKS0+cHJvY2Vz
cygpLT5jb250ZXh0KCkpLCB0b0FQSShpbnNwZWN0b3JQYWdlR3JvdXAoKSksIEV3a1ZpZXc6Okxl
Z2FjeUJlaGF2aW9yKTsKLSAgICBFd2tWaWV3KiBpbnNwZWN0b3JWaWV3SW1wbCA9IEV3a1ZpZXc6
OmZyb21FdmFzT2JqZWN0KG1faW5zcGVjdG9yVmlldyk7Ci0gICAgaW5zcGVjdG9yVmlld0ltcGwt
PnNldFRoZW1lUGF0aChURVNUX1RIRU1FX0RJUiAiL2RlZmF1bHQuZWRqIik7CisgICAgLy8gRklY
TUU6IFJlZmFjdG9yIHRvIHVzZSBXS1ZpZXdSZWYuCisgICAgRXdrVmlldyogZXdrVmlldyA9IGV3
a192aWV3X2Jhc2VfYWRkKGVjb3JlX2V2YXNfZ2V0KG1faW5zcGVjdG9yV2luZG93KSwgdG9BUEko
cGFnZSgpLT5wcm9jZXNzKCktPmNvbnRleHQoKSksIHRvQVBJKGluc3BlY3RvclBhZ2VHcm91cCgp
KSwgRXdrVmlldzo6TGVnYWN5QmVoYXZpb3IpOworICAgIGlmICghZXdrVmlldykKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBtX2luc3BlY3RvclZpZXcgPSBld2tWaWV3LT52aWV3KCk7CisKKyAg
ICBld2tWaWV3LT5zZXRUaGVtZVBhdGgoVEVTVF9USEVNRV9ESVIgIi9kZWZhdWx0LmVkaiIpOwog
Ci0gICAgRXdrX1NldHRpbmdzKiBzZXR0aW5ncyA9IGluc3BlY3RvclZpZXdJbXBsLT5zZXR0aW5n
cygpOworICAgIEV3a19TZXR0aW5ncyogc2V0dGluZ3MgPSBld2tWaWV3LT5zZXR0aW5ncygpOwog
ICAgIGV3a19zZXR0aW5nc19maWxlX2FjY2Vzc19mcm9tX2ZpbGVfdXJsc19hbGxvd2VkX3NldChz
ZXR0aW5ncywgdHJ1ZSk7CiAKLSAgICByZXR1cm4gaW5zcGVjdG9yVmlld0ltcGwtPnBhZ2UoKTsK
KyAgICByZXR1cm4gZXdrVmlldy0+cGFnZSgpOwogfQogCiB2b2lkIFdlYkluc3BlY3RvclByb3h5
OjpwbGF0Zm9ybU9wZW4oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2Vm
bC9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFiMWZmNgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5jcHAKQEAgLTAsMCAr
MSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXZWJWaWV3LmgiCisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisjaW5jbHVkZSAiV2Vi
RnVsbFNjcmVlbk1hbmFnZXJQcm94eS5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitXZWJWaWV3OjpXZWJWaWV3KFdlYkNvbnRleHQqIGNvbnRleHQsIFBhZ2VDbGllbnQqIHBhZ2VD
bGllbnQsIFdlYlBhZ2VHcm91cCogcGFnZUdyb3VwLCBFdmFzX09iamVjdCogZXZhc09iamVjdCkK
KyAgICA6IG1fd2ViUGFnZVByb3h5KGNvbnRleHQtPmNyZWF0ZVdlYlBhZ2UocGFnZUNsaWVudCwg
cGFnZUdyb3VwKSkKKyAgICAsIG1fZXZhc09iamVjdChldmFzT2JqZWN0KQoreworICAgIG1fd2Vi
UGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0QWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0VuYWJsZWQodHJ1ZSk7CisgICAgbV93ZWJQYWdlUHJveHktPnBhZ2VHcm91cCgpLT5w
cmVmZXJlbmNlcygpLT5zZXRGb3JjZUNvbXBvc2l0aW5nTW9kZSh0cnVlKTsKKworICAgIGNoYXIq
IGRlYnVnVmlzdWFsc0Vudmlyb25tZW50ID0gZ2V0ZW52KCJXRUJLSVRfU0hPV19DT01QT1NJVElO
R19ERUJVR19WSVNVQUxTIik7CisgICAgYm9vbCBzaG93RGVidWdWaXN1YWxzID0gZGVidWdWaXN1
YWxzRW52aXJvbm1lbnQgJiYgIXN0cmNtcChkZWJ1Z1Zpc3VhbHNFbnZpcm9ubWVudCwgIjEiKTsK
KyAgICBtX3dlYlBhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldENvbXBv
c2l0aW5nQm9yZGVyc1Zpc2libGUoc2hvd0RlYnVnVmlzdWFscyk7CisgICAgbV93ZWJQYWdlUHJv
eHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRDb21wb3NpdGluZ1JlcGFpbnRDb3Vu
dGVyc1Zpc2libGUoc2hvd0RlYnVnVmlzdWFscyk7CisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9B
UEkpCisgICAgbV93ZWJQYWdlUHJveHktPmZ1bGxTY3JlZW5NYW5hZ2VyKCktPnNldFdlYlZpZXco
bV9ldmFzT2JqZWN0KTsKKyNlbmRpZgorfQorCitXZWJWaWV3Ojp+V2ViVmlldygpCit7CisgICAg
bV93ZWJQYWdlUHJveHktPmNsb3NlKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6aW5pdGlhbGl6ZSgp
Cit7CisgICAgbV93ZWJQYWdlUHJveHktPmluaXRpYWxpemVXZWJQYWdlKCk7Cit9CisKK3ZvaWQg
V2ViVmlldzo6c2V0VGhlbWVQYXRoKFdLU3RyaW5nUmVmIHRoZW1lKQoreworICAgIG1fd2ViUGFn
ZVByb3h5LT5zZXRUaGVtZVBhdGgodG9XVEZTdHJpbmcodGhlbWUpLnV0ZjgoKS5kYXRhKCkpOwor
fQorCit2b2lkIFdlYlZpZXc6OnN1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygp
Cit7CisgICAgbV93ZWJQYWdlUHJveHktPnN1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0
aW9ucygpOworfQorCit2b2lkIFdlYlZpZXc6OnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmlt
YXRpb25zKCkKK3sKKyAgICBtX3dlYlBhZ2VQcm94eS0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0Fu
ZEFuaW1hdGlvbnMoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9lZmwvV2ViVmlldy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmUxZTc2NmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZs
L1dlYlZpZXcuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIElu
dGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBX
ZWJWaWV3X2gKKyNkZWZpbmUgV2ViVmlld19oCisKKyNpbmNsdWRlICJBUElPYmplY3QuaCIKKyNp
bmNsdWRlICJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViQ29udGV4dC5oIgorI2luY2x1ZGUg
IldlYlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgIldl
YlByZWZlcmVuY2VzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJWaWV3IDog
cHVibGljIEFQSU9iamVjdCB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IFR5cGUgQVBJVHlw
ZSA9IFR5cGVWaWV3OworCisgICAgV2ViVmlldyhXZWJDb250ZXh0KiwgUGFnZUNsaWVudCosIFdl
YlBhZ2VHcm91cCosIEV2YXNfT2JqZWN0Kik7CisgICAgdmlydHVhbCB+V2ViVmlldygpOworCisg
ICAgdm9pZCBpbml0aWFsaXplKCk7CisKKyAgICBXS1BhZ2VSZWYgcGFnZVJlZigpIGNvbnN0IHsg
cmV0dXJuIHRvQVBJKG1fd2ViUGFnZVByb3h5LmdldCgpKTsgfQorCisgICAgdm9pZCBzZXRUaGVt
ZVBhdGgoV0tTdHJpbmdSZWYpOworICAgIHZvaWQgc3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRB
bmltYXRpb25zKCk7CisgICAgdm9pZCByZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9u
cygpOworCisgICAgLy8gRklYTUU6IFJlbW92ZSB3aGVuIHBvc3NpYmxlLgorICAgIEV2YXNfT2Jq
ZWN0KiBldmFzT2JqZWN0KCkgeyByZXR1cm4gbV9ldmFzT2JqZWN0OyB9CisgICAgV2ViUGFnZVBy
b3h5KiBwYWdlKCkgeyByZXR1cm4gbV93ZWJQYWdlUHJveHkuZ2V0KCk7IH0KKworcHJpdmF0ZToK
KyAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIEFQSVR5cGU7IH0KKworICAg
IFJlZlB0cjxXZWJQYWdlUHJveHk+IG1fd2ViUGFnZVByb3h5OworICAgIEV2YXNfT2JqZWN0KiBt
X2V2YXNPYmplY3Q7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdl
TG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDJkYTVjNzcuLjFmMjg4YmMgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOSBAQAor
MjAxMy0wMS0yOSAgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4gIDxrZW5uZXRoQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgW0VGTF1bV0syXSBJbnRyb2R1Y2UgYSBXZWJWaWV3IGNsYXNzIGFzIGNv
dW50ZXJwYXJ0IGZvciBXS1ZpZXdSZWYKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwNzkzMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIENoYW5nZSBwbGF0Zm9ybVZpZXcgdG8gYmUgYSBXS1ZpZXcgYW5kIHVz
ZSBXS1ZpZXdHZXRFdmFzT2JqZWN0CisgICAgICAgIGZvciB0aGUgcGxhY2VzIHdoZXJlIGFuIEV2
YXNfT2JqZWN0IGlzIG5lZWRlZC4KKworICAgICAgICBJbnN0ZWFkIG9mIGV4dHJhY3RpbmcgdGhl
IEVjb3JlX0V2YXMqIGZyb20gdGhlIG1fdmlldyB3ZSB1c2UKKyAgICAgICAgdGhlIG1fd2luZG93
IGluc3RlYWQsIHdoaWNoIGFjdHVhbGx5IGhvbGRzIHRoZSBpdC4KKworICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvUGxhdGZvcm1XZWJWaWV3Lmg6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9lZmwv
UGxhdGZvcm1XZWJWaWV3LmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBsYXRmb3JtV2Vi
Vmlldzo6UGxhdGZvcm1XZWJWaWV3KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBsYXRmb3Jt
V2ViVmlldzo6flBsYXRmb3JtV2ViVmlldyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQbGF0
Zm9ybVdlYlZpZXc6OnJlc2l6ZVRvKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBsYXRmb3Jt
V2ViVmlldzo6cGFnZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQbGF0Zm9ybVdlYlZpZXc6
OnNpbXVsYXRlU3BhY2ViYXJLZXlQcmVzcyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQbGF0
Zm9ybVdlYlZpZXc6OnNpbXVsYXRlTW91c2VNb3ZlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OlBsYXRmb3JtV2ViVmlldzo6c2ltdWxhdGVSaWdodENsaWNrKToKKyAgICAgICAgKiBXZWJLaXRU
ZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIv
ZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclBy
b3h5OjpzZW5kVG91Y2hFdmVudCk6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OnNl
dFRvdWNoTW9kaWZpZXIpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvZWZsL1BsYXRmb3Jt
V2ViVmlld0VmbC5jcHA6CisgICAgICAgIChXVFI6OlBsYXRmb3JtV2ViVmlldzo6UGxhdGZvcm1X
ZWJWaWV3KToKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3Ojp+UGxhdGZvcm1XZWJWaWV3
KToKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3OjpyZXNpemVUbyk6CisgICAgICAgIChX
VFI6OlBsYXRmb3JtV2ViVmlldzo6cGFnZSk6CisgICAgICAgIChXVFI6OlBsYXRmb3JtV2ViVmll
dzo6Zm9jdXMpOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6OndpbmRvd0ZyYW1lKToK
KyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3OjpzZXRXaW5kb3dGcmFtZSk6CisgICAgICAg
IChXVFI6OlBsYXRmb3JtV2ViVmlldzo6d2luZG93U25hcHNob3RJbWFnZSk6CisKIDIwMTMtMDEt
MzEgIENocmlzdG9waGUgRHVtZXogIDxkY2hyaXNAZ21haWwuY29tPgogCiAgICAgICAgIFVwZGF0
ZSBDaHJpc3RvcGhlIER1bWV6J3MgZW1haWwgYWRkcmVzcwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9QbGF0Zm9ybVdlYlZpZXcuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZv
cm1XZWJWaWV3LmgKaW5kZXggNWFkMWVlZC4uZGNhZjQ0OCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9QbGF0Zm9ybVdlYlZpZXcuaAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Bs
YXRmb3JtV2ViVmlldy5oCkBAIC00NywxMyArNDcsOCBAQCB0eXBlZGVmIEhXTkQgUGxhdGZvcm1X
aW5kb3c7CiB0eXBlZGVmIFdLVmlld1JlZiBQbGF0Zm9ybVdLVmlldzsKIHR5cGVkZWYgR3RrV2lk
Z2V0ICpQbGF0Zm9ybVdpbmRvdzsKICNlbGlmIFBMQVRGT1JNKEVGTCkKLSNpZiBVU0UoRU8pCi10
eXBlZGVmIHN0cnVjdCBfRW8gRXZhc19PYmplY3Q7Ci0jZWxzZQotdHlwZWRlZiBzdHJ1Y3QgX0V2
YXNfT2JqZWN0IEV2YXNfT2JqZWN0OwotI2VuZGlmCiB0eXBlZGVmIHN0cnVjdCBfRWNvcmVfRXZh
cyBFY29yZV9FdmFzOwotdHlwZWRlZiBFdmFzX09iamVjdCogUGxhdGZvcm1XS1ZpZXc7Cit0eXBl
ZGVmIFdLVmlld1JlZiBQbGF0Zm9ybVdLVmlldzsKIHR5cGVkZWYgRWNvcmVfRXZhcyogUGxhdGZv
cm1XaW5kb3c7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwv
UGxhdGZvcm1XZWJWaWV3LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZWZsL1BsYXRmb3JtV2Vi
Vmlldy5jcHAKaW5kZXggZDU0NDllYi4uOGEwMzVmMyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9lZmwvUGxhdGZvcm1XZWJWaWV3LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L2VmbC9QbGF0Zm9ybVdlYlZpZXcuY3BwCkBAIC02NSwzMyArNjUsNDEgQEAgUGxhdGZvcm1XZWJW
aWV3OjpQbGF0Zm9ybVdlYlZpZXcoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3Vw
UmVmIHBhZ2VHcm8KIHsKICAgICBtX3dpbmRvdyA9IGluaXRFY29yZUV2YXMoKTsKICAgICBFdmFz
KiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwotICAgIG1fdmlldyA9IHRvSW1wbChX
S1ZpZXdDcmVhdGUoZXZhcywgY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmKSk7Ci0gICAgZXdrX3Zp
ZXdfdGhlbWVfc2V0KG1fdmlldywgVEhFTUVfRElSIi9kZWZhdWx0LmVkaiIpOwotICAgIGV2YXNf
b2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChtX3ZpZXcsICJ3ZWJwcm9jZXNzLGNyYXNoZWQiLCBv
bldlYlByb2Nlc3NDcmFzaGVkLCAwKTsKKyAgICBtX3ZpZXcgPSBXS1ZpZXdDcmVhdGUoZXZhcywg
Y29udGV4dFJlZiwgcGFnZUdyb3VwUmVmKTsKKyAgICBld2tfdmlld190aGVtZV9zZXQoV0tWaWV3
R2V0RXZhc09iamVjdChtX3ZpZXcpLCBUSEVNRV9ESVIiL2RlZmF1bHQuZWRqIik7CisgICAgZXZh
c19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSwg
IndlYnByb2Nlc3MsY3Jhc2hlZCIsIG9uV2ViUHJvY2Vzc0NyYXNoZWQsIDApOwogICAgIHJlc2l6
ZVRvKDYwMCwgODAwKTsKIH0KIAogUGxhdGZvcm1XZWJWaWV3Ojp+UGxhdGZvcm1XZWJWaWV3KCkK
IHsKLSAgICBldmFzX29iamVjdF9kZWwobV92aWV3KTsKKyAgICBFdmFzX09iamVjdCogZXZhc09i
amVjdCA9IFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KTsKKworICAgIC8vIFJlbGVhc2UgZmly
c3QuIFdlYlZpZXcgc2hvdWxkIG5vdCBsaXZlIGxvbmdlciB0aGFuIEV3a1ZpZXcsIGFzIEV3a1Zp
ZXcgb3ducyBvYmplY3RzIHRoYXQgcGFnZSBwcm94eSByZWZlcnMgdG8uCisgICAgV0tSZWxlYXNl
KG1fdmlldyk7CisKKyAgICAvLyBGSVhNRTogVGhlIEMgV0tWaWV3IEFQSSBjdXJyZW50bHkgY3Jl
YXRlcyB0aGUgRXZhc19PYmplY3QsIHNvIHdlIGhhdmUgdG8gZGVzdHJ1Y3QgaXQKKyAgICAvLyAo
YW5kIGl0cyBkZXBlbmRlbmNpZXMgRXdrVmlldyBhbmQgV2ViS2l0OjpXZWJWaWV3KSB0aGlzIHdh
eSwgdW50aWwgdGhpcyBnZXQgZml4ZWQuCisgICAgZXZhc19vYmplY3RfZGVsKGV2YXNPYmplY3Qp
OworCiAgICAgZWNvcmVfZXZhc19mcmVlKG1fd2luZG93KTsKICAgICBlY29yZV9ldmFzX3NodXRk
b3duKCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpyZXNpemVUbyh1bnNpZ25lZCB3aWR0
aCwgdW5zaWduZWQgaGVpZ2h0KQogewotICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShtX3ZpZXcsIHdp
ZHRoLCBoZWlnaHQpOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShXS1ZpZXdHZXRFdmFzT2JqZWN0
KG1fdmlldyksIHdpZHRoLCBoZWlnaHQpOwogfQogCiBXS1BhZ2VSZWYgUGxhdGZvcm1XZWJWaWV3
OjpwYWdlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV0tWaWV3R2V0UGFnZSh0b0FQSShtX3ZpZXcp
KTsKKyAgICByZXR1cm4gV0tWaWV3R2V0UGFnZShtX3ZpZXcpOwogfQogCiB2b2lkIFBsYXRmb3Jt
V2ViVmlldzo6c2ltdWxhdGVTcGFjZWJhcktleVByZXNzKCkKIHsKICAgICBFdmFzKiBldmFzID0g
ZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwotICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldChtX3Zp
ZXcsIHRydWUpOworICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldChXS1ZpZXdHZXRFdmFzT2JqZWN0
KG1fdmlldyksIHRydWUpOwogICAgIGV2YXNfZXZlbnRfZmVlZF9rZXlfZG93bihldmFzLCAic3Bh
Y2UiLCAic3BhY2UiLCAiICIsIDAsIDAsIDApOwogICAgIGV2YXNfZXZlbnRfZmVlZF9rZXlfdXAo
ZXZhcywgInNwYWNlIiwgInNwYWNlIiwgIiAiLCAwLCAxLCAwKTsKIH0KQEAgLTk5LDE0ICsxMDcs
MTQgQEAgdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnNpbXVsYXRlU3BhY2ViYXJLZXlQcmVzcygpCiB2
b2lkIFBsYXRmb3JtV2ViVmlldzo6c2ltdWxhdGVNb3VzZU1vdmUodW5zaWduZWQgeCwgdW5zaWdu
ZWQgeSkKIHsKICAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwotICAg
IGV2YXNfb2JqZWN0X3Nob3cobV92aWV3KTsKKyAgICBldmFzX29iamVjdF9zaG93KFdLVmlld0dl
dEV2YXNPYmplY3QobV92aWV3KSk7CiAgICAgZXZhc19ldmVudF9mZWVkX21vdXNlX21vdmUoZXZh
cywgeCwgeSwgMCwgMCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjpzaW11bGF0ZVJpZ2h0
Q2xpY2sodW5zaWduZWQgeCwgdW5zaWduZWQgeSkKIHsKICAgICBFdmFzKiBldmFzID0gZWNvcmVf
ZXZhc19nZXQobV93aW5kb3cpOwotICAgIGV2YXNfb2JqZWN0X3Nob3cobV92aWV3KTsKKyAgICBl
dmFzX29iamVjdF9zaG93KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSk7CiAgICAgZXZhc19l
dmVudF9mZWVkX21vdXNlX21vdmUoZXZhcywgeCwgeSwgMCwgMCk7CiAgICAgZXZhc19ldmVudF9m
ZWVkX21vdXNlX2Rvd24oZXZhcywgMywgRVZBU19CVVRUT05fTk9ORSwgMCwgMCk7CiAgICAgZXZh
c19ldmVudF9mZWVkX21vdXNlX3VwKGV2YXMsIDMsIEVWQVNfQlVUVE9OX05PTkUsIDAsIDApOwpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaCBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgKaW5kZXggOGY5ZGNkYi4uNTFj
NGJjYyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcu
aAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCkBAIC01NCwx
MyArNTQsOCBAQCB0eXBlZGVmIHN0cnVjdCBfR3RrV2lkZ2V0IEd0a1dpZGdldDsKIHR5cGVkZWYg
V0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlwZWRlZiBHdGtXaWRnZXQqIFBsYXRmb3JtV2lu
ZG93OwogI2VsaWYgUExBVEZPUk0oRUZMKQotI2lmIFVTRShFTykKLXR5cGVkZWYgc3RydWN0IF9F
byBFdmFzX09iamVjdDsKLSNlbHNlCi10eXBlZGVmIHN0cnVjdCBfRXZhc19PYmplY3QgRXZhc19P
YmplY3Q7Ci0jZW5kaWYKIHR5cGVkZWYgc3RydWN0IF9FY29yZV9FdmFzIEVjb3JlX0V2YXM7Ci10
eXBlZGVmIEV2YXNfT2JqZWN0KiBQbGF0Zm9ybVdLVmlldzsKK3R5cGVkZWYgV0tWaWV3UmVmIFBs
YXRmb3JtV0tWaWV3OwogdHlwZWRlZiBFY29yZV9FdmFzKiBQbGF0Zm9ybVdpbmRvdzsKICNlbmRp
ZgogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9FdmVudFNlbmRlclBy
b3h5RWZsLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlF
ZmwuY3BwCmluZGV4IGYyODI5YTkuLjEzOTIwZWMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwCkBAIC00MzgsNyArNDM4LDcgQEAg
dm9pZCBFdmVudFNlbmRlclByb3h5OjpzZW5kVG91Y2hFdmVudChFd2tfVG91Y2hfRXZlbnRfVHlw
ZSBldmVudFR5cGUpCiB7CiAgICAgQVNTRVJUKG1fdG91Y2hQb2ludHMpOwogCi0gICAgRXZhc19P
YmplY3QqIGV3a1ZpZXcgPSBtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9y
bVZpZXcoKTsKKyAgICBFdmFzX09iamVjdCogZXdrVmlldyA9IFdLVmlld0dldEV2YXNPYmplY3Qo
bV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCkpOwogICAgIGV3
a192aWV3X2ZlZWRfdG91Y2hfZXZlbnQoZXdrVmlldywgZXZlbnRUeXBlLCBtX3RvdWNoUG9pbnRz
LCBldmFzX2tleV9tb2RpZmllcl9nZXQoZXZhc19vYmplY3RfZXZhc19nZXQoZXdrVmlldykpKTsK
IAogICAgIEVpbmFfTGlzdCogbGlzdDsKQEAgLTQ5MCwxMiArNDkwLDE0IEBAIHZvaWQgRXZlbnRT
ZW5kZXJQcm94eTo6dXBkYXRlVG91Y2hQb2ludChpbnQgaW5kZXgsIGludCB4LCBpbnQgeSkKIAog
dm9pZCBFdmVudFNlbmRlclByb3h5OjpzZXRUb3VjaE1vZGlmaWVyKFdLRXZlbnRNb2RpZmllcnMg
bW9kaWZpZXIsIGJvb2wgZW5hYmxlKQogeworICAgIEV2YXNfT2JqZWN0KiBld2tWaWV3ID0gV0tW
aWV3R2V0RXZhc09iamVjdChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9y
bVZpZXcoKSk7CisKICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCAoc2l6ZW9m
KG1vZGlmaWVyTmFtZXMpIC8gc2l6ZW9mKGNoYXIqKSk7ICsraW5kZXgpIHsKICAgICAgICAgaWYg
KG1vZGlmaWVyICYgKDEgPDwgaW5kZXgpKSB7CiAgICAgICAgICAgICBpZiAoZW5hYmxlKQotICAg
ICAgICAgICAgICAgIGV2YXNfa2V5X21vZGlmaWVyX29uKGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1f
dGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmlldygpKSwgbW9kaWZpZXJO
YW1lc1tpbmRleF0pOworICAgICAgICAgICAgICAgIGV2YXNfa2V5X21vZGlmaWVyX29uKGV2YXNf
b2JqZWN0X2V2YXNfZ2V0KGV3a1ZpZXcpLCBtb2RpZmllck5hbWVzW2luZGV4XSk7CiAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZXZhc19rZXlfbW9kaWZpZXJfb2ZmKGV2YXNfb2Jq
ZWN0X2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRmb3JtVmll
dygpKSwgbW9kaWZpZXJOYW1lc1tpbmRleF0pOworICAgICAgICAgICAgICAgIGV2YXNfa2V5X21v
ZGlmaWVyX29mZihldmFzX29iamVjdF9ldmFzX2dldChld2tWaWV3KSwgbW9kaWZpZXJOYW1lc1tp
bmRleF0pOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5jcHAKaW5kZXggMWNjYzBiZC4uNjhiMjY5NSAxMDA2
NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNw
cAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3Bw
CkBAIC02MSw1NiArNjEsNjEgQEAgUGxhdGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcoV0tD
b250ZXh0UmVmIGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCwKICAgICBFdmFzKiBl
dmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwogCiAgICAgaWYgKG1fdXNpbmdGaXhlZExh
eW91dCkgewotICAgICAgICBtX3ZpZXcgPSB0b0ltcGwoV0tWaWV3Q3JlYXRlV2l0aEZpeGVkTGF5
b3V0KGV2YXMsIGNvbnRleHQsIHBhZ2VHcm91cCkpOwotICAgICAgICBldmFzX29iamVjdF9yZXNp
emUobV92aWV3LCA4MDAsIDYwMCk7CisgICAgICAgIG1fdmlldyA9IFdLVmlld0NyZWF0ZVdpdGhG
aXhlZExheW91dChldmFzLCBjb250ZXh0LCBwYWdlR3JvdXApOworICAgICAgICBldmFzX29iamVj
dF9yZXNpemUoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCA4MDAsIDYwMCk7CiAgICAgfSBl
bHNlCi0gICAgICAgIG1fdmlldyA9IHRvSW1wbChXS1ZpZXdDcmVhdGUoZXZhcywgY29udGV4dCwg
cGFnZUdyb3VwKSk7CisgICAgICAgIG1fdmlldyA9IFdLVmlld0NyZWF0ZShldmFzLCBjb250ZXh0
LCBwYWdlR3JvdXApOwogCi0gICAgZXdrX3ZpZXdfdGhlbWVfc2V0KG1fdmlldywgVEhFTUVfRElS
Ii9kZWZhdWx0LmVkaiIpOworICAgIGV3a192aWV3X3RoZW1lX3NldChXS1ZpZXdHZXRFdmFzT2Jq
ZWN0KG1fdmlldyksIFRIRU1FX0RJUiIvZGVmYXVsdC5lZGoiKTsKICAgICBtX3dpbmRvd0lzS2V5
ID0gZmFsc2U7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhtX3ZpZXcpOworICAgIGV2YXNfb2JqZWN0
X3Nob3coV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpKTsKIH0KIAogUGxhdGZvcm1XZWJWaWV3
Ojp+UGxhdGZvcm1XZWJWaWV3KCkKIHsKLSAgICBldmFzX29iamVjdF9kZWwobV92aWV3KTsKKyAg
ICBFdmFzX09iamVjdCogZXZhc09iamVjdCA9IFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KTsK
KworICAgIC8vIFJlbGVhc2UgZmlyc3QuIFdlYlZpZXcgc2hvdWxkIG5vdCBsaXZlIGxvbmdlciB0
aGFuIEV3a1ZpZXcsIGFzIEV3a1ZpZXcgb3ducyBvYmplY3RzIHRoYXQgcGFnZSBwcm94eSByZWZl
cnMgdG8uCisgICAgV0tSZWxlYXNlKG1fdmlldyk7CisKKyAgICAvLyBGSVhNRTogVGhlIEMgV0tW
aWV3IEFQSSBjdXJyZW50bHkgY3JlYXRlcyB0aGUgRXZhc19PYmplY3QsIHNvIHdlIGhhdmUgdG8g
ZGVzdHJ1Y3QgaXQKKyAgICAvLyAoYW5kIGl0cyBkZXBlbmRlbmNpZXMgRXdrVmlldyBhbmQgV2Vi
S2l0OjpXZWJWaWV3KSB0aGlzIHdheSwgdW50aWwgdGhpcyBnZXQgZml4ZWQuCisgICAgZXZhc19v
YmplY3RfZGVsKGV2YXNPYmplY3QpOworCiAgICAgZWNvcmVfZXZhc19mcmVlKG1fd2luZG93KTsK
IH0KIAogdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnJlc2l6ZVRvKHVuc2lnbmVkIHdpZHRoLCB1bnNp
Z25lZCBoZWlnaHQpCiB7Ci0gICAgZXZhc19vYmplY3RfcmVzaXplKG1fdmlldywgd2lkdGgsIGhl
aWdodCk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3
KSwgd2lkdGgsIGhlaWdodCk7CiB9CiAKIFdLUGFnZVJlZiBQbGF0Zm9ybVdlYlZpZXc6OnBhZ2Uo
KQogewotICAgIHJldHVybiBXS1ZpZXdHZXRQYWdlKHRvQVBJKG1fdmlldykpOworICAgIHJldHVy
biBXS1ZpZXdHZXRQYWdlKG1fdmlldyk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3Ojpmb2N1
cygpCiB7CisgICAgRXZhc19PYmplY3QqIGV2YXNPYmplY3QgPSBXS1ZpZXdHZXRFdmFzT2JqZWN0
KG1fdmlldyk7CiAgICAgLy8gSW4gYSBmZXcgY2FzZXMsIGFuIGlmcmFtZSBtaWdodCByZWNlaXZl
IGZvY3VzIGZyb20gSmF2YVNjcmlwdCBhbmQgRXZhcyBpcyBub3QgYXdhcmUgb2YgaXQgYXQgYWxs
CiAgICAgLy8gKFdlYkNvcmVTdXBwb3J0Ojpmb2N1c2VkRnJhbWVDaGFuZ2VkKCkgZG9lcyBub3Qg
ZW1pdCBhbnkgbm90aWZpY2F0aW9uKS4gV2UgdGhlbiBtYW51YWxseSByZW1vdmUgdGhlCiAgICAg
Ly8gZm9jdXMgZnJvbSB0aGUgdmlldyB0byBtYWtlIHRoZSBjYWxsIGdpdmUgZm9jdXMgdG8gZXZh
c19vYmplY3RfZm9jdXNfc2V0KC4uLiwgdHJ1ZSkgdG8gYmUgZWZmZWN0ZnVsLgotICAgIGlmIChX
S1BhZ2VHZXRGb2N1c2VkRnJhbWUocGFnZSgpKSAhPSBXS1BhZ2VHZXRNYWluRnJhbWUocGFnZSgp
KSkKLSAgICAgICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KG1fdmlldywgZmFsc2UpOwotICAgIGV2
YXNfb2JqZWN0X2ZvY3VzX3NldChtX3ZpZXcsIHRydWUpOworICAgIGV2YXNfb2JqZWN0X2ZvY3Vz
X3NldChXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIFdLUGFnZUdldEZvY3VzZWRGcmFtZShw
YWdlKCkpID09IFdLUGFnZUdldE1haW5GcmFtZShwYWdlKCkpKTsKIH0KIAogV0tSZWN0IFBsYXRm
b3JtV2ViVmlldzo6d2luZG93RnJhbWUoKQogewogICAgIGludCB4LCB5LCB3aWR0aCwgaGVpZ2h0
OwogCi0gICAgRWNvcmVfRXZhcyogZWUgPSBlY29yZV9ldmFzX2Vjb3JlX2V2YXNfZ2V0KGV2YXNf
b2JqZWN0X2V2YXNfZ2V0KG1fdmlldykpOwotICAgIGVjb3JlX2V2YXNfcmVxdWVzdF9nZW9tZXRy
eV9nZXQoZWUsICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0KTsKKyAgICBlY29yZV9ldmFzX3JlcXVl
c3RfZ2VvbWV0cnlfZ2V0KG1fd2luZG93LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCk7CiAKICAg
ICByZXR1cm4gV0tSZWN0TWFrZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogdm9pZCBQbGF0
Zm9ybVdlYlZpZXc6OnNldFdpbmRvd0ZyYW1lKFdLUmVjdCBmcmFtZSkKIHsKLSAgICBFY29yZV9F
dmFzKiBlZSA9IGVjb3JlX2V2YXNfZWNvcmVfZXZhc19nZXQoZXZhc19vYmplY3RfZXZhc19nZXQo
bV92aWV3KSk7Ci0gICAgZWNvcmVfZXZhc19tb3ZlX3Jlc2l6ZShlZSwgZnJhbWUub3JpZ2luLngs
IGZyYW1lLm9yaWdpbi55LCBmcmFtZS5zaXplLndpZHRoLCBmcmFtZS5zaXplLmhlaWdodCk7Cisg
ICAgZWNvcmVfZXZhc19tb3ZlX3Jlc2l6ZShtX3dpbmRvdywgZnJhbWUub3JpZ2luLngsIGZyYW1l
Lm9yaWdpbi55LCBmcmFtZS5zaXplLndpZHRoLCBmcmFtZS5zaXplLmhlaWdodCk7CiB9CiAKIHZv
aWQgUGxhdGZvcm1XZWJWaWV3OjphZGRDaHJvbWVJbnB1dEZpZWxkKCkKQEAgLTEyNywxNSArMTMy
LDEyIEBAIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjptYWtlV2ViVmlld0ZpcnN0UmVzcG9uZGVyKCkK
IAogV0tSZXRhaW5QdHI8V0tJbWFnZVJlZj4gUGxhdGZvcm1XZWJWaWV3Ojp3aW5kb3dTbmFwc2hv
dEltYWdlKCkKIHsKLSAgICBFY29yZV9FdmFzKiBlZSA9IGVjb3JlX2V2YXNfZWNvcmVfZXZhc19n
ZXQoZXZhc19vYmplY3RfZXZhc19nZXQobV92aWV3KSk7Ci0gICAgQVNTRVJUKGVlKTsKLQogICAg
IGludCB3aWR0aDsKICAgICBpbnQgaGVpZ2h0OwotICAgIGVjb3JlX2V2YXNfZ2VvbWV0cnlfZ2V0
KGVlLCAwLCAwLCAmd2lkdGgsICZoZWlnaHQpOworICAgIGVjb3JlX2V2YXNfZ2VvbWV0cnlfZ2V0
KG1fd2luZG93LCAwLCAwLCAmd2lkdGgsICZoZWlnaHQpOwogICAgIEFTU0VSVCh3aWR0aCA+IDAg
JiYgaGVpZ2h0ID4gMCk7CiAKLSAgICByZXR1cm4gYWRvcHRXSyhXS1ZpZXdDcmVhdGVTbmFwc2hv
dCh0b0FQSShtX3ZpZXcpKSk7CisgICAgcmV0dXJuIGFkb3B0V0soV0tWaWV3Q3JlYXRlU25hcHNo
b3QobV92aWV3KSk7CiB9CiAKIGJvb2wgUGxhdGZvcm1XZWJWaWV3Ojp2aWV3U3VwcG9ydHNPcHRp
b25zKFdLRGljdGlvbmFyeVJlZiBvcHRpb25zKSBjb25zdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186393</attachid>
            <date>2013-02-04 09:04:30 -0800</date>
            <delta_ts>2013-02-04 16:05:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>0001-EFL-WK2-Introduce-a-WebView-class-as-counterpart-for.patch</filename>
            <type>text/plain</type>
            <size>43846</size>
            <attacher name="Kenneth Rohde Christiansen">kenneth</attacher>
            
              <data encoding="base64">RnJvbSA0ZWIzZGMwYTE4ODM2Njk0OTIwZjU5NzY3ZjAxMDNhNWRkMTkzOTUzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiA8a2VubmV0aEB3
ZWJraXQub3JnPgpEYXRlOiBNb24sIDQgRmViIDIwMTMgMTc6Mjc6MTkgKzAxMDAKU3ViamVjdDog
W1BBVENIXSBbRUZMXVtXSzJdIEludHJvZHVjZSBhIFdlYlZpZXcgY2xhc3MgYXMgY291bnRlcnBh
cnQgZm9yCiBXS1ZpZXdSZWYgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwNzkzMQoKUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgpTb3VyY2UvV2ViS2l0MjoKClRo
aXMgaXMganVzdCBvbmUgc3RlcCBvZiB0aGUgbmV3IHBsYW4gZm9yIHRoZSBFRkwgQVBJLgoKVGhl
IHBsYW4gaXMgdG8gbW92ZSB0aGUgcHVibGljIEVGTC1saWtlIEFQSSBvbiB0b3Agb2YgdGhlIHNo
YXJlZApXSzIgQyBBUEksIHBsdXMgYSBmZXcgRUZMIGV4dGVuc2lvbnMgKFdLVmlldyBjbGFzcyBt
b3N0bHkpLgoKVGhlIEVGTC1saWtlIEFQSSBjYW4gYmUgc2VlbiBhcyBhIGNvbnZlbmllbmNlIEFQ
SSB3aGljaCB0aWVzCndlbGwgaW50byBFRkwgYW5kIHdoaWNoIG1ha2VzIGl0IGVhc3kgdG8gYWRk
IHdlYiBleHBlcmllbmNlcwp0byBleGlzdGluZyBhbmQgbmV3IEVGTCBhcHBsaWNhdGlvbnMuIEl0
IHByb3ZpZGVzIGEgc21hcnQgb2JqZWN0Cmxpa2UgQVBJIGFuZCBhIEV2YXNfT2JqZWN0IGJhc2Vk
IHZpZXcuCgpGb3IgbW9yZSBhZHZhbmNlZCB1c2UgY2FzZXMsIHN1Y2ggYXMgYnJvd3NlciBhbmQg
cnVudGltZSwgaXQgaXMKcG9zc2libGUgdG8gdXNlIHRoZSBXSyogQyBBUEksIHdoaWNoIGlzIGdp
dmVzIG1vcmUgZmxleGliaWxpdHkKd2hpbGUgYmVpbmcgbW9yZSBsb3cgbGV2ZWwuCgpUaGUgaWRl
YSBpcyB0aGF0IHRoZSBXS1ZpZXcgY2xhc3Mgd2lsbCBub3QgZGVwZW5kIG9uIEV2YXNfT2JqZWN0
CmFuZCBYMTEgKGZ1dHVyZSBwbGFuKSB1bmxpa2UgdGhlIGN1cnJlbnQgRUZMLWxpa2UgQVBJLiBU
aGlzIHNob3VsZAptYWtlIGl0IHBvc3NpYmxlIHRvIHVzZSBpdCBmb3IgY2FzZXMgd2hlcmUgbm9u
ZSBvZiB0aGVzZSBhcmUKYXZhaWxhYmxlLgoKVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRoZSBXZWJW
aWV3IGNsYXNzIHdoaWNoIHNlcnZlcyBhcyBvdXIKY291bnRlcnBhcnQgZm9yIHRoZSBXS1ZpZXcg
Y2xhc3MsIGFuZCBhZGRzIGEgZmV3IG5lZWRlZCBtZXRob2RzLgoKVGhlIEV3a1ZpZXcgb3ducyB0
aGUgV2ViVmlldyBjbGFzcyAoYW5kIHdpbGwgYmUgY29uc3RydWN0aW5nIGl0CmluIHRoZSBuZWFy
IGZ1dHVyZSB3aGVuIHRoZSBFd2tWaWV3IGNsYXNzIGhhcyBiZWVuIGNoYW5nZWQgdG8KaGFuZGxl
IGFsbCBzbWFydCBvYmplY3QgcmVsYXRlZCBjb2RlKQoKVGhlIGNsZWFuIHVwIG9mIHRoZSBzbWFy
dCBvYmplY3QgcmVsYXRlZCBjb2RlIGFzIHRoZSBwcm9wZXIKY29uc3RydWN0aW9uIG9mIEV3a1Zp
ZXcgYW5kIFdlYlZpZXcgd2lsbCBiZSBkb25lIGluIGZvbGxvdy11cApwYXRjaGVzLgoKKiBVSVBy
b2Nlc3MvQVBJL0MvZWZsL1dLQVBJQ2FzdEVmbC5oOgooV2ViS2l0KToKCiAgICBUaGUgV0tWaWV3
IEFQSSBpcyBub3QgYmFzZWQgb24gV2ViVmlldyBhbmQgbm90IEV2YXNfT2JqZWN0KgoKKiBVSVBy
b2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5jcHA6CihXS1ZpZXdDcmVhdGUpOgooV0tWaWV3Q3JlYXRl
V2l0aEZpeGVkTGF5b3V0KToKKFdLVmlld0luaXRpYWxpemUpOgooV0tWaWV3R2V0UGFnZSk6CihX
S1ZpZXdTZXRUaGVtZVBhdGgpOgooV0tWaWV3U3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmlt
YXRpb25zKToKKFdLVmlld1Jlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKToKKFdL
Vmlld0dldEV2YXNPYmplY3QpOgooV0tWaWV3Q3JlYXRlU25hcHNob3QpOgoKICAgIEFkZCBhIGZl
dyBuZXcgV0tWaWV3IEVGTCBDIG1ldGhvZHMsIGFuZCB1cGRhdGUgZXhpc3RpbmcKICAgIG1ldGhv
ZHMgdG8gcmVmbGVjdCB0aGF0IHRoZSBXS1ZpZXdSZWYgaXMgbm93IGEgV2ViVmlldyoKCiAgICBU
aGUgY29uc3RydWN0aW9uIG1ldGhvZHMgd2lsbCBiZSByZXdyaXR0ZW4gd2hlbiB0aGUgc21hcnQK
ICAgIG9iamVjdCBjb25zdHJ1Y3Rpb24gaGFzIGJlZW4gc29sdmVkLgoKKiBVSVByb2Nlc3MvQVBJ
L0MvZWZsL1dLVmlldy5oOgoqIFVJUHJvY2Vzcy9lZmwvV2ViVmlldy5jcHA6IEFkZGVkLgooV2Vi
S2l0KToKKFdlYktpdDo6V2ViVmlldzo6V2ViVmlldyk6CihXZWJLaXQ6OldlYlZpZXc6On5XZWJW
aWV3KToKKFdlYktpdDo6V2ViVmlldzo6aW5pdGlhbGl6ZSk6CihXZWJLaXQ6OldlYlZpZXc6OnNl
dFRoZW1lUGF0aCk6CihXZWJLaXQ6OldlYlZpZXc6OnN1c3BlbmRBY3RpdmVET01PYmplY3RzQW5k
QW5pbWF0aW9ucyk6CihXZWJLaXQ6OldlYlZpZXc6OnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRB
bmltYXRpb25zKToKKiBVSVByb2Nlc3MvZWZsL1dlYlZpZXcuaDogQWRkZWQuCihXZWJLaXQpOgoo
V2ViVmlldyk6CihXZWJLaXQ6OldlYlZpZXc6OnBhZ2VSZWYpOgooV2ViS2l0OjpXZWJWaWV3Ojpl
dmFzT2JqZWN0KToKKFdlYktpdDo6V2ViVmlldzo6cGFnZSk6CihXZWJLaXQ6OldlYlZpZXc6OnR5
cGUpOgoKICAgIEFkZCBhIG5ldyBXZWJLaXQ6OldlYlZpZXcgY2xhc3MgZm9yIEVGTC4KCiogVUlQ
cm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHA6CihFd2tWaWV3OjpFd2tWaWV3KToKKEV3a1ZpZXc6
On5Fd2tWaWV3KToKKEV3a1ZpZXc6OndrUGFnZSk6CihFd2tWaWV3OjpzZXRUaGVtZVBhdGgpOgoo
RXdrVmlldzo6Y3JlYXRlR0xTdXJmYWNlKToKCiAgICBCYXNlIG1ldGhvZHMgb24gQyBBUEkgaW5z
dGVhZCBvZiBpbnRlcm5hbCBBUEkgYXMgbXVjaAogICAgYXMgY3VycmVudGx5IHBvc3NpYmxlLgoK
KiBVSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3Lmg6CihXZWJLaXQpOgooV2ViVmlldyk6CihFd2tW
aWV3KToKKEV3a1ZpZXc6OndrVmlldyk6CihFd2tWaWV3OjpwYWdlKToKKiBVSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdmlldy5jcHA6CihjcmVhdGVFd2tWaWV3KToKKGV3a192aWV3X2Jhc2VfYWRkKToK
KGV3a192aWV3X3NtYXJ0X2FkZCk6CgogICAgTW9kaWZ5IHRvIHJldHVybiB0aGUgRXdrVmlldyBj
bGFzcyBmb3Igbm93LgoKKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19wcml2YXRlLmg6Ciog
VUlQcm9jZXNzL2VmbC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHA6CihXZWJLaXQ6OldlYkluc3Bl
Y3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUluc3BlY3RvclBhZ2UpOgoKICAgIFVwZGF0ZWQgZHVl
IHRvIGNoYW5nZWQgQVBJLgoKVG9vbHM6CgpDaGFuZ2UgcGxhdGZvcm1WaWV3IHRvIGJlIGEgV0tW
aWV3IGFuZCB1c2UgV0tWaWV3R2V0RXZhc09iamVjdApmb3IgdGhlIHBsYWNlcyB3aGVyZSBhbiBF
dmFzX09iamVjdCBpcyBuZWVkZWQuCgpJbnN0ZWFkIG9mIGV4dHJhY3RpbmcgdGhlIEVjb3JlX0V2
YXMqIGZyb20gdGhlIG1fdmlldyB3ZSB1c2UKdGhlIG1fd2luZG93IGluc3RlYWQsIHdoaWNoIGFj
dHVhbGx5IGhvbGRzIHRoZSBpdC4KCiogVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdlYlZpZXcuaDoK
KiBUZXN0V2ViS2l0QVBJL2VmbC9QbGF0Zm9ybVdlYlZpZXcuY3BwOgooVGVzdFdlYktpdEFQSTo6
UGxhdGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcpOgooVGVzdFdlYktpdEFQSTo6UGxhdGZv
cm1XZWJWaWV3Ojp+UGxhdGZvcm1XZWJWaWV3KToKKFRlc3RXZWJLaXRBUEk6OlBsYXRmb3JtV2Vi
Vmlldzo6cmVzaXplVG8pOgooVGVzdFdlYktpdEFQSTo6UGxhdGZvcm1XZWJWaWV3OjpwYWdlKToK
KFRlc3RXZWJLaXRBUEk6OlBsYXRmb3JtV2ViVmlldzo6c2ltdWxhdGVTcGFjZWJhcktleVByZXNz
KToKKFRlc3RXZWJLaXRBUEk6OlBsYXRmb3JtV2ViVmlldzo6c2ltdWxhdGVNb3VzZU1vdmUpOgoo
VGVzdFdlYktpdEFQSTo6UGxhdGZvcm1XZWJWaWV3OjpzaW11bGF0ZVJpZ2h0Q2xpY2spOgoqIFdl
YktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3Lmg6CiogV2ViS2l0VGVzdFJ1bm5lci9lZmwv
RXZlbnRTZW5kZXJQcm94eUVmbC5jcHA6CihXVFI6OkV2ZW50U2VuZGVyUHJveHk6OnNlbmRUb3Vj
aEV2ZW50KToKKFdUUjo6RXZlbnRTZW5kZXJQcm94eTo6c2V0VG91Y2hNb2RpZmllcik6CiogV2Vi
S2l0VGVzdFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNwcDoKKFdUUjo6UGxhdGZvcm1X
ZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcpOgooV1RSOjpQbGF0Zm9ybVdlYlZpZXc6On5QbGF0Zm9y
bVdlYlZpZXcpOgooV1RSOjpQbGF0Zm9ybVdlYlZpZXc6OnJlc2l6ZVRvKToKKFdUUjo6UGxhdGZv
cm1XZWJWaWV3OjpwYWdlKToKKFdUUjo6UGxhdGZvcm1XZWJWaWV3Ojpmb2N1cyk6CihXVFI6OlBs
YXRmb3JtV2ViVmlldzo6d2luZG93RnJhbWUpOgooV1RSOjpQbGF0Zm9ybVdlYlZpZXc6OnNldFdp
bmRvd0ZyYW1lKToKKFdUUjo6UGxhdGZvcm1XZWJWaWV3Ojp3aW5kb3dTbmFwc2hvdEltYWdlKToK
LS0tCiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8
ICAxMDcgKysrKysrKysrKysrKysrKysrKysKIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNt
YWtlICAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0MvZWZsL1dLQVBJQ2FzdEVmbC5oICB8ICAgMTAgKy0KIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcCAgICAgIHwgICA0NCArKysrKystLQogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaCAgICAgICAgfCAgIDE2ICsrLQogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAgICAgICAgfCAgIDQzICsr
Ky0tLS0tCiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmggICAgICAg
ICB8ICAgMTMgKystCiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5j
cHAgICAgICB8ICAgMTIgKystCiAuLi4vV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmll
d19wcml2YXRlLmggICB8ICAgIDIgKy0KIC4uLi9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5z
cGVjdG9yUHJveHlFZmwuY3BwIHwgICAxNSArKy0KIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9l
ZmwvV2ViVmlldy5jcHAgICAgICAgICAgIHwgICA3NyArKysrKysrKysrKysrKwogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmggICAgICAgICAgICAgfCAgIDY2ICsrKysrKysr
KysrKwogVG9vbHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgIDM2ICsrKysrKysKIFRvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XZWJWaWV3LmggICAg
ICAgICAgICAgIHwgICAgNyArLQogVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwvUGxhdGZvcm1XZWJW
aWV3LmNwcCAgICAgICAgfCAgIDI2ICsrKy0tCiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRm
b3JtV2ViVmlldy5oICAgICAgICAgICB8ICAgIDcgKy0KIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
ZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwIHwgICAgOCArLQogVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNwcCAgfCAgIDQyICsrKystLS0tCiAxOCBmaWxl
cyBjaGFuZ2VkLCA0MjkgaW5zZXJ0aW9ucygrKSwgMTAzIGRlbGV0aW9ucygtKQogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5jcHAKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuaAoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwppbmRleCA4MGQxYzA3M2QuLjI4ZjYyNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxMTIg
QEAKIDIwMTMtMDItMDQgIEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuICA8a2VubmV0aEB3ZWJr
aXQub3JnPgogCisgICAgICAgIFtFRkxdW1dLMl0gSW50cm9kdWNlIGEgV2ViVmlldyBjbGFzcyBh
cyBjb3VudGVycGFydCBmb3IgV0tWaWV3UmVmCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc5MzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIGp1c3Qgb25lIHN0ZXAgb2YgdGhlIG5ldyBwbGFu
IGZvciB0aGUgRUZMIEFQSS4KKworICAgICAgICBUaGUgcGxhbiBpcyB0byBtb3ZlIHRoZSBwdWJs
aWMgRUZMLWxpa2UgQVBJIG9uIHRvcCBvZiB0aGUgc2hhcmVkCisgICAgICAgIFdLMiBDIEFQSSwg
cGx1cyBhIGZldyBFRkwgZXh0ZW5zaW9ucyAoV0tWaWV3IGNsYXNzIG1vc3RseSkuCisKKyAgICAg
ICAgVGhlIEVGTC1saWtlIEFQSSBjYW4gYmUgc2VlbiBhcyBhIGNvbnZlbmllbmNlIEFQSSB3aGlj
aCB0aWVzCisgICAgICAgIHdlbGwgaW50byBFRkwgYW5kIHdoaWNoIG1ha2VzIGl0IGVhc3kgdG8g
YWRkIHdlYiBleHBlcmllbmNlcworICAgICAgICB0byBleGlzdGluZyBhbmQgbmV3IEVGTCBhcHBs
aWNhdGlvbnMuIEl0IHByb3ZpZGVzIGEgc21hcnQgb2JqZWN0CisgICAgICAgIGxpa2UgQVBJIGFu
ZCBhIEV2YXNfT2JqZWN0IGJhc2VkIHZpZXcuCisKKyAgICAgICAgRm9yIG1vcmUgYWR2YW5jZWQg
dXNlIGNhc2VzLCBzdWNoIGFzIGJyb3dzZXIgYW5kIHJ1bnRpbWUsIGl0IGlzCisgICAgICAgIHBv
c3NpYmxlIHRvIHVzZSB0aGUgV0sqIEMgQVBJLCB3aGljaCBpcyBnaXZlcyBtb3JlIGZsZXhpYmls
aXR5CisgICAgICAgIHdoaWxlIGJlaW5nIG1vcmUgbG93IGxldmVsLgorCisgICAgICAgIFRoZSBp
ZGVhIGlzIHRoYXQgdGhlIFdLVmlldyBjbGFzcyB3aWxsIG5vdCBkZXBlbmQgb24gRXZhc19PYmpl
Y3QKKyAgICAgICAgYW5kIFgxMSAoZnV0dXJlIHBsYW4pIHVubGlrZSB0aGUgY3VycmVudCBFRkwt
bGlrZSBBUEkuIFRoaXMgc2hvdWxkCisgICAgICAgIG1ha2UgaXQgcG9zc2libGUgdG8gdXNlIGl0
IGZvciBjYXNlcyB3aGVyZSBub25lIG9mIHRoZXNlIGFyZQorICAgICAgICBhdmFpbGFibGUuCisK
KyAgICAgICAgVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRoZSBXZWJWaWV3IGNsYXNzIHdoaWNoIHNl
cnZlcyBhcyBvdXIKKyAgICAgICAgY291bnRlcnBhcnQgZm9yIHRoZSBXS1ZpZXcgY2xhc3MsIGFu
ZCBhZGRzIGEgZmV3IG5lZWRlZCBtZXRob2RzLgorCisgICAgICAgIFRoZSBFd2tWaWV3IG93bnMg
dGhlIFdlYlZpZXcgY2xhc3MgKGFuZCB3aWxsIGJlIGNvbnN0cnVjdGluZyBpdAorICAgICAgICBp
biB0aGUgbmVhciBmdXR1cmUgd2hlbiB0aGUgRXdrVmlldyBjbGFzcyBoYXMgYmVlbiBjaGFuZ2Vk
IHRvCisgICAgICAgIGhhbmRsZSBhbGwgc21hcnQgb2JqZWN0IHJlbGF0ZWQgY29kZSkKKworICAg
ICAgICBUaGUgY2xlYW4gdXAgb2YgdGhlIHNtYXJ0IG9iamVjdCByZWxhdGVkIGNvZGUgYXMgdGhl
IHByb3BlcgorICAgICAgICBjb25zdHJ1Y3Rpb24gb2YgRXdrVmlldyBhbmQgV2ViVmlldyB3aWxs
IGJlIGRvbmUgaW4gZm9sbG93LXVwCisgICAgICAgIHBhdGNoZXMuCisKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0MvZWZsL1dLQVBJQ2FzdEVmbC5oOgorICAgICAgICAoV2ViS2l0KToKKworICAg
ICAgICAgICAgVGhlIFdLVmlldyBBUEkgaXMgbm90IGJhc2VkIG9uIFdlYlZpZXcgYW5kIG5vdCBF
dmFzX09iamVjdCoKKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcDoK
KyAgICAgICAgKFdLVmlld0NyZWF0ZSk6CisgICAgICAgIChXS1ZpZXdDcmVhdGVXaXRoRml4ZWRM
YXlvdXQpOgorICAgICAgICAoV0tWaWV3SW5pdGlhbGl6ZSk6CisgICAgICAgIChXS1ZpZXdHZXRQ
YWdlKToKKyAgICAgICAgKFdLVmlld1NldFRoZW1lUGF0aCk6CisgICAgICAgIChXS1ZpZXdTdXNw
ZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMpOgorICAgICAgICAoV0tWaWV3UmVzdW1l
QWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMpOgorICAgICAgICAoV0tWaWV3R2V0RXZhc09i
amVjdCk6CisgICAgICAgIChXS1ZpZXdDcmVhdGVTbmFwc2hvdCk6CisKKyAgICAgICAgICAgIEFk
ZCBhIGZldyBuZXcgV0tWaWV3IEVGTCBDIG1ldGhvZHMsIGFuZCB1cGRhdGUgZXhpc3RpbmcKKyAg
ICAgICAgICAgIG1ldGhvZHMgdG8gcmVmbGVjdCB0aGF0IHRoZSBXS1ZpZXdSZWYgaXMgbm93IGEg
V2ViVmlldyoKKworICAgICAgICAgICAgVGhlIGNvbnN0cnVjdGlvbiBtZXRob2RzIHdpbGwgYmUg
cmV3cml0dGVuIHdoZW4gdGhlIHNtYXJ0CisgICAgICAgICAgICBvYmplY3QgY29uc3RydWN0aW9u
IGhhcyBiZWVuIHNvbHZlZC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpXZWJWaWV3KToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlldzo6fldlYlZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojpp
bml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6c2V0VGhlbWVQYXRoKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVmlldzo6c3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRp
b25zKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0Fu
ZEFuaW1hdGlvbnMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvV2ViVmlldy5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJWaWV3KToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlldzo6cGFnZVJlZik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmV2YXNPYmplY3Qp
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpwYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlldzo6dHlwZSk6CisKKyAgICAgICAgICAgIEFkZCBhIG5ldyBXZWJLaXQ6OldlYlZpZXcgY2xh
c3MgZm9yIEVGTC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwOgor
ICAgICAgICAoRXdrVmlldzo6RXdrVmlldyk6CisgICAgICAgIChFd2tWaWV3Ojp+RXdrVmlldyk6
CisgICAgICAgIChFd2tWaWV3Ojp3a1BhZ2UpOgorICAgICAgICAoRXdrVmlldzo6c2V0VGhlbWVQ
YXRoKToKKyAgICAgICAgKEV3a1ZpZXc6OmNyZWF0ZUdMU3VyZmFjZSk6CisKKyAgICAgICAgICAg
IEJhc2UgbWV0aG9kcyBvbiBDIEFQSSBpbnN0ZWFkIG9mIGludGVybmFsIEFQSSBhcyBtdWNoCisg
ICAgICAgICAgICBhcyBjdXJyZW50bHkgcG9zc2libGUuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2VmbC9Fd2tWaWV3Lmg6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViVmlldyk6
CisgICAgICAgIChFd2tWaWV3KToKKyAgICAgICAgKEV3a1ZpZXc6OndrVmlldyk6CisgICAgICAg
IChFd2tWaWV3OjpwYWdlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5j
cHA6CisgICAgICAgIChjcmVhdGVFd2tWaWV3KToKKyAgICAgICAgKGV3a192aWV3X2Jhc2VfYWRk
KToKKyAgICAgICAgKGV3a192aWV3X3NtYXJ0X2FkZCk6CisKKyAgICAgICAgICAgIE1vZGlmeSB0
byByZXR1cm4gdGhlIEV3a1ZpZXcgY2xhc3MgZm9yIG5vdy4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1dl
Ykluc3BlY3RvclByb3h5RWZsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJv
eHk6OnBsYXRmb3JtQ3JlYXRlSW5zcGVjdG9yUGFnZSk6CisKKyAgICAgICAgICAgIFVwZGF0ZWQg
ZHVlIHRvIGNoYW5nZWQgQVBJLgorCisyMDEzLTAyLTA0ICBLZW5uZXRoIFJvaGRlIENocmlzdGlh
bnNlbiAgPGtlbm5ldGhAd2Via2l0Lm9yZz4KKwogICAgICAgICBbRUZMXVtXSzJdIFVzZSBDIEFQ
SSBpbnNpZGUgRXdrVmlldwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTA4ODI1CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZs
LmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggYjg3ZTk3OS4u
ZjZjZTE3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysr
IGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTEwNyw2ICsxMDcsNyBAQCBs
aXN0KEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvZWZsL1dlYlBvcHVwTWVu
dVByb3h5RWZsLmNwcAogICAgIFVJUHJvY2Vzcy9lZmwvV2ViUHJlZmVyZW5jZXNFZmwuY3BwCiAg
ICAgVUlQcm9jZXNzL2VmbC9XZWJQcm9jZXNzUHJveHlFZmwuY3BwCisgICAgVUlQcm9jZXNzL2Vm
bC9XZWJWaWV3LmNwcAogCiAgICAgVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9lZmwvV2ViSW5z
cGVjdG9yU2VydmVyRWZsLmNwcAogICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvc291cC9X
ZWJTb2NrZXRTZXJ2ZXJTb3VwLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9DL2VmbC9XS0FQSUNhc3RFZmwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9lZmwvV0tBUElDYXN0RWZsLmgKaW5kZXggYjAxM2EwYS4uMTg4OWZjNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS0FQSUNhc3RFZmwuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLQVBJQ2FzdEVmbC5oCkBAIC0y
NCwxNSArMjQsMTEgQEAKICNlcnJvciAiUGxlYXNlICNpbmNsdWRlIFwiV0tBUElDYXN0LmhcIiBp
bnN0ZWFkIG9mIHRoaXMgZmlsZSBkaXJlY3RseS4iCiAjZW5kaWYKIAotI2lmIFVTRShFTykKLXR5
cGVkZWYgc3RydWN0IF9FbyBFdmFzX09iamVjdDsKLSNlbHNlCi10eXBlZGVmIHN0cnVjdCBfRXZh
c19PYmplY3QgRXZhc19PYmplY3Q7Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVdL
X0FERF9BUElfTUFQUElORyhXS1ZpZXdSZWYsIEV2YXNfT2JqZWN0KQorY2xhc3MgV2ViVmlldzsK
KworV0tfQUREX0FQSV9NQVBQSU5HKFdLVmlld1JlZiwgV2ViVmlldykKIAogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5jcHAKaW5kZXggMzJiOWQ4Zi4u
OWMxZDMxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9X
S1ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3
LmNwcApAQCAtMjksMjQgKzI5LDU0IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIFdLVmll
d1JlZiBXS1ZpZXdDcmVhdGUoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwg
V0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmKQogewotICAgIHJldHVybiB0b0FQSShld2tfdmll
d19iYXNlX2FkZChjYW52YXMsIGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZiwgRXdrVmlldzo6TGVn
YWN5QmVoYXZpb3IpKTsKKyAgICBFd2tWaWV3KiBld2tWaWV3ID0gZXdrX3ZpZXdfYmFzZV9hZGQo
Y2FudmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OkxlZ2FjeUJlaGF2aW9y
KTsKKyAgICBpZiAoIWV3a1ZpZXcpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFdLVmlld1JlZj4oV0tSZXRhaW4oZXdrVmlldy0+d2tWaWV3KCkpKTsKIH0KIAog
V0tWaWV3UmVmIFdLVmlld0NyZWF0ZVdpdGhGaXhlZExheW91dChFdmFzKiBjYW52YXMsIFdLQ29u
dGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYpCiB7Ci0gICAg
cmV0dXJuIHRvQVBJKGV3a192aWV3X2Jhc2VfYWRkKGNhbnZhcywgY29udGV4dFJlZiwgcGFnZUdy
b3VwUmVmLCBFd2tWaWV3OjpEZWZhdWx0QmVoYXZpb3IpKTsKKyAgICBFd2tWaWV3KiBld2tWaWV3
ID0gZXdrX3ZpZXdfYmFzZV9hZGQoY2FudmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYsIEV3
a1ZpZXc6OkRlZmF1bHRCZWhhdmlvcik7CisgICAgaWYgKCFld2tWaWV3KQorICAgICAgICByZXR1
cm4gMDsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxXS1ZpZXdSZWY+KFdLUmV0YWluKGV3a1Zp
ZXctPndrVmlldygpKSk7Cit9CisKK3ZvaWQgV0tWaWV3SW5pdGlhbGl6ZShXS1ZpZXdSZWYgdmll
d1JlZikKK3sKKyAgICB0b0ltcGwodmlld1JlZiktPmluaXRpYWxpemUoKTsKIH0KIAogV0tQYWdl
UmVmIFdLVmlld0dldFBhZ2UoV0tWaWV3UmVmIHZpZXdSZWYpCiB7Ci0gICAgRXdrVmlldyogdmll
dyA9IEV3a1ZpZXc6OmZyb21FdmFzT2JqZWN0KHRvSW1wbCh2aWV3UmVmKSk7CisgICAgcmV0dXJu
IHRvSW1wbCh2aWV3UmVmKS0+cGFnZVJlZigpOworfQogCi0gICAgcmV0dXJuIHZpZXctPndrUGFn
ZSgpOwordm9pZCBXS1ZpZXdTZXRUaGVtZVBhdGgoV0tWaWV3UmVmIHZpZXdSZWYsIFdLU3RyaW5n
UmVmIHRoZW1lKQoreworICAgIHRvSW1wbCh2aWV3UmVmKS0+c2V0VGhlbWVQYXRoKHRoZW1lKTsK
IH0KIAotV0tJbWFnZVJlZiBXS1ZpZXdDcmVhdGVTbmFwc2hvdChXS1ZpZXdSZWYgdmlld1JlZikK
K3ZvaWQgV0tWaWV3U3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKFdLVmlld1Jl
ZiB2aWV3UmVmKQogewotICAgIEV3a1ZpZXcqIHZpZXcgPSBFd2tWaWV3Ojpmcm9tRXZhc09iamVj
dCh0b0ltcGwodmlld1JlZikpOworICAgIHRvSW1wbCh2aWV3UmVmKS0+c3VzcGVuZEFjdGl2ZURP
TU9iamVjdHNBbmRBbmltYXRpb25zKCk7Cit9CiAKLSAgICByZXR1cm4gV0tJbWFnZUNyZWF0ZUZy
b21DYWlyb1N1cmZhY2Uodmlldy0+dGFrZVNuYXBzaG90KCkuZ2V0KCksIDAgLyogb3B0aW9ucyAq
Lyk7Cit2b2lkIFdLVmlld1Jlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKFdLVmll
d1JlZiB2aWV3UmVmKQoreworICAgIHRvSW1wbCh2aWV3UmVmKS0+cmVzdW1lQWN0aXZlRE9NT2Jq
ZWN0c0FuZEFuaW1hdGlvbnMoKTsKK30KKworRXZhc19PYmplY3QqIFdLVmlld0dldEV2YXNPYmpl
Y3QoV0tWaWV3UmVmIHZpZXdSZWYpCit7CisgICAgcmV0dXJuIHRvSW1wbCh2aWV3UmVmKS0+ZXZh
c09iamVjdCgpOworfQorCitXS0ltYWdlUmVmIFdLVmlld0NyZWF0ZVNuYXBzaG90KFdLVmlld1Jl
ZiB2aWV3UmVmKQoreworICAgIEV3a1ZpZXcqIGV3a1ZpZXcgPSBFd2tWaWV3Ojpmcm9tRXZhc09i
amVjdCh0b0ltcGwodmlld1JlZiktPmV2YXNPYmplY3QoKSk7CisgICAgcmV0dXJuIFdLSW1hZ2VD
cmVhdGVGcm9tQ2Fpcm9TdXJmYWNlKGV3a1ZpZXctPnRha2VTbmFwc2hvdCgpLmdldCgpLCAwIC8q
IG9wdGlvbnMgKi8pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9DL2VmbC9XS1ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwvV0tW
aWV3LmgKaW5kZXggY2M3MzA3Yy4uZDViNDMyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvZWZsL1dLVmlldy5oCkBAIC0yNCw4ICsyNCwxMCBAQAogCiAjaWYgVVNFKEVPKQog
dHlwZWRlZiBzdHJ1Y3QgX0VvIEV2YXM7Cit0eXBlZGVmIHN0cnVjdCBfRW8gRXZhc19PYmplY3Q7
CiAjZWxzZQogdHlwZWRlZiBzdHJ1Y3QgX0V2YXMgRXZhczsKK3R5cGVkZWYgc3RydWN0IF9FdmFz
X09iamVjdCBFdmFzX09iamVjdDsKICNlbmRpZgogCiAjaWZkZWYgX19jcGx1c3BsdXMKQEAgLTM2
LDkgKzM4LDE5IEBAIFdLX0VYUE9SVCBXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlKEV2YXMqIGNhbnZh
cywgV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLUGFnZUdyb3VwCiAKIFdLX0VYUE9SVCBXS1ZpZXdS
ZWYgV0tWaWV3Q3JlYXRlV2l0aEZpeGVkTGF5b3V0KEV2YXMqIGNhbnZhcywgV0tDb250ZXh0UmVm
IGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCk7CiAKLVdLX0VYUE9SVCBXS1BhZ2VS
ZWYgV0tWaWV3R2V0UGFnZShXS1ZpZXdSZWYgdmlldyk7CitXS19FWFBPUlQgdm9pZCBXS1ZpZXdJ
bml0aWFsaXplKFdLVmlld1JlZik7CiAKLVdLX0VYUE9SVCBXS0ltYWdlUmVmIFdLVmlld0NyZWF0
ZVNuYXBzaG90KFdLVmlld1JlZiB2aWV3UmVmKTsKK1dLX0VYUE9SVCBXS1BhZ2VSZWYgV0tWaWV3
R2V0UGFnZShXS1ZpZXdSZWYpOworCitXS19FWFBPUlQgdm9pZCBXS1ZpZXdTZXRUaGVtZVBhdGgo
V0tWaWV3UmVmLCBXS1N0cmluZ1JlZik7CisKK1dLX0VYUE9SVCB2b2lkIFdLVmlld1N1c3BlbmRB
Y3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyhXS1ZpZXdSZWYpOworV0tfRVhQT1JUIHZvaWQg
V0tWaWV3UmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoV0tWaWV3UmVmKTsKKwor
Ly8gRklYTUU6IFRoZSBsb25nIHRlcm0gcGxhbiBpcyB0byBnZXQgcmlkIG9mIHRoaXMsIHNvIGtl
ZXAgdXNhZ2UgdG8gYSBiYXJlIG1pbmltdW0uCitXS19FWFBPUlQgRXZhc19PYmplY3QqIFdLVmll
d0dldEV2YXNPYmplY3QoV0tWaWV3UmVmKTsKKworV0tfRVhQT1JUIFdLSW1hZ2VSZWYgV0tWaWV3
Q3JlYXRlU25hcHNob3QoV0tWaWV3UmVmKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCmluZGV4IDljOWFjMjAu
LjA0NjY5NGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9F
d2tWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3
LmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIldLTnVtYmVyLmgiCiAjaW5jbHVkZSAi
V0tQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJXS1N0cmluZy5oIgorI2luY2x1ZGUgIldLVmlldy5o
IgogI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJJbWFnZS5oIgogI2luY2x1
ZGUgIldlYlBhZ2VHcm91cC5oIgpAQCAtMTExLDE0ICsxMTIsMTQgQEAgY29uc3QgRXZhc19PYmpl
Y3QqIEV3a1ZpZXc6OnZpZXdGcm9tUGFnZVZpZXdNYXAoY29uc3QgV0tQYWdlUmVmIHBhZ2UpCiAg
ICAgcmV0dXJuIHBhZ2VWaWV3TWFwKCkuZ2V0KHBhZ2UpOwogfQogCi1Fd2tWaWV3OjpFd2tWaWV3
KEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQs
IFBhc3NSZWZQdHI8V2ViUGFnZUdyb3VwPiBwYWdlR3JvdXAsIFZpZXdCZWhhdmlvciBiZWhhdmlv
cikKLSAgICA6IG1fZXZhc09iamVjdChldmFzT2JqZWN0KQorRXdrVmlldzo6RXdrVmlldyhFdmFz
X09iamVjdCogdmlldywgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXZWJQYWdlR3Jv
dXAqIHBhZ2VHcm91cCwgVmlld0JlaGF2aW9yIGJlaGF2aW9yKQorICAgIDogbV9ldmFzT2JqZWN0
KHZpZXcpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCiAgICAgLCBtX3BlbmRpbmdTdXJmYWNlUmVzaXplKGZhbHNlKQogI2VuZGlmCiAg
ICAgLCBtX3BhZ2VDbGllbnQoYmVoYXZpb3IgPT0gRGVmYXVsdEJlaGF2aW9yID8gUGFnZUNsaWVu
dERlZmF1bHRJbXBsOjpjcmVhdGUodGhpcykgOiBQYWdlQ2xpZW50TGVnYWN5SW1wbDo6Y3JlYXRl
KHRoaXMpKQotICAgICwgbV9wYWdlUHJveHkodG9JbXBsKG1fY29udGV4dC0+d2tDb250ZXh0KCkp
LT5jcmVhdGVXZWJQYWdlKG1fcGFnZUNsaWVudC5nZXQoKSwgcGFnZUdyb3VwLmdldCgpKSkKKyAg
ICAsIG1fd2ViVmlldyhhZG9wdFJlZihuZXcgV2ViVmlldyh0b0ltcGwobV9jb250ZXh0LT53a0Nv
bnRleHQoKSksIG1fcGFnZUNsaWVudC5nZXQoKSwgcGFnZUdyb3VwLCB2aWV3KSkpCiAgICAgLCBt
X3BhZ2VMb2FkQ2xpZW50KFBhZ2VMb2FkQ2xpZW50RWZsOjpjcmVhdGUodGhpcykpCiAgICAgLCBt
X3BhZ2VQb2xpY3lDbGllbnQoUGFnZVBvbGljeUNsaWVudEVmbDo6Y3JlYXRlKHRoaXMpKQogICAg
ICwgbV9wYWdlVUlDbGllbnQoUGFnZVVJQ2xpZW50RWZsOjpjcmVhdGUodGhpcykpCkBAIC0xMjgs
NyArMTI5LDcgQEAgRXdrVmlldzo6RXdrVmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFz
c1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBQYXNzUmUKICNpZiBFTkFCTEUoVklCUkFUSU9O
KQogICAgICwgbV92aWJyYXRpb25DbGllbnQoVmlicmF0aW9uQ2xpZW50RWZsOjpjcmVhdGUodGhp
cykpCiAjZW5kaWYKLSAgICAsIG1fYmFja0ZvcndhcmRMaXN0KEV3a0JhY2tGb3J3YXJkTGlzdDo6
Y3JlYXRlKHRvQVBJKG1fcGFnZVByb3h5LT5iYWNrRm9yd2FyZExpc3QoKSkpKQorICAgICwgbV9i
YWNrRm9yd2FyZExpc3QoRXdrQmFja0ZvcndhcmRMaXN0OjpjcmVhdGUoV0tQYWdlR2V0QmFja0Zv
cndhcmRMaXN0KHdrUGFnZSgpKSkpCiAjaWYgVVNFKFRJTEVEX0JBQ0tJTkdfU1RPUkUpCiAgICAg
LCBtX3BhZ2VTY2FsZUZhY3RvcigxKQogI2VuZGlmCkBAIC0xNDUsNyArMTQ2LDggQEAgRXdrVmll
dzo6RXdrVmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0
PiBjb250ZXh0LCBQYXNzUmUKIHsKICAgICBBU1NFUlQobV9ldmFzT2JqZWN0KTsKICAgICBBU1NF
UlQobV9jb250ZXh0KTsKLSAgICBBU1NFUlQobV9wYWdlUHJveHkpOworCisgICAgV0tWaWV3SW5p
dGlhbGl6ZSh3a1ZpZXcoKSk7CiAKICAgICBXS1BhZ2VTZXRVc2VGaXhlZExheW91dCh3a1BhZ2Uo
KSwgYmVoYXZpb3IgPT0gRGVmYXVsdEJlaGF2aW9yKTsKIApAQCAtMTU3LDIxICsxNTksNiBAQCBF
d2tWaWV3OjpFd2tWaWV3KEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0LCBQYXNzUmVmUHRyPEV3a0Nv
bnRleHQ+IGNvbnRleHQsIFBhc3NSZQogICAgIFdLUHJlZmVyZW5jZXNTZXRXZWJBdWRpb0VuYWJs
ZWQod2tQcmVmZXJlbmNlcywgdHJ1ZSk7CiAgICAgV0tQcmVmZXJlbmNlc1NldE9mZmxpbmVXZWJB
cHBsaWNhdGlvbkNhY2hlRW5hYmxlZCh3a1ByZWZlcmVuY2VzLCB0cnVlKTsKIAotI2lmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykKLSAgICBtX3BhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZl
cmVuY2VzKCktPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKHRydWUpOwotICAgIG1f
cGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0Rm9yY2VDb21wb3NpdGlu
Z01vZGUodHJ1ZSk7Ci0gICAgY2hhciogZGVidWdWaXN1YWxzRW52aXJvbm1lbnQgPSBnZXRlbnYo
IldFQktJVF9TSE9XX0NPTVBPU0lUSU5HX0RFQlVHX1ZJU1VBTFMiKTsKLSAgICBib29sIHNob3dE
ZWJ1Z1Zpc3VhbHMgPSBkZWJ1Z1Zpc3VhbHNFbnZpcm9ubWVudCAmJiAhc3RyY21wKGRlYnVnVmlz
dWFsc0Vudmlyb25tZW50LCAiMSIpOwotICAgIG1fcGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJl
ZmVyZW5jZXMoKS0+c2V0Q29tcG9zaXRpbmdCb3JkZXJzVmlzaWJsZShzaG93RGVidWdWaXN1YWxz
KTsKLSAgICBtX3BhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldENvbXBv
c2l0aW5nUmVwYWludENvdW50ZXJzVmlzaWJsZShzaG93RGVidWdWaXN1YWxzKTsKLSNlbmRpZgot
Ci0gICAgbV9wYWdlUHJveHktPmluaXRpYWxpemVXZWJQYWdlKCk7Ci0KLSNpZiBFTkFCTEUoRlVM
TFNDUkVFTl9BUEkpCi0gICAgbV9wYWdlUHJveHktPmZ1bGxTY3JlZW5NYW5hZ2VyKCktPnNldFdl
YlZpZXcobV9ldmFzT2JqZWN0KTsKLSNlbmRpZgotCiAgICAgLy8gRW5hYmxlIG1vdXNlIGV2ZW50
cyBieSBkZWZhdWx0CiAgICAgc2V0TW91c2VFdmVudHNFbmFibGVkKHRydWUpOwogCkBAIC0xODYs
OCArMTczLDYgQEAgRXdrVmlldzo6RXdrVmlldyhFdmFzX09iamVjdCogZXZhc09iamVjdCwgUGFz
c1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBQYXNzUmUKIAogRXdrVmlldzo6fkV3a1ZpZXco
KQogewotICAgIG1fcGFnZVByb3h5LT5jbG9zZSgpOwotCiAgICAgLy8gVW5yZWdpc3RlciBpY29u
IGNoYW5nZSBjYWxsYmFjay4KICAgICBFd2tGYXZpY29uRGF0YWJhc2UqIGljb25EYXRhYmFzZSA9
IG1fY29udGV4dC0+ZmF2aWNvbkRhdGFiYXNlKCk7CiAgICAgQVNTRVJUKGljb25EYXRhYmFzZSk7
CkBAIC0yMTMsNyArMTk4LDcgQEAgRXdrVmlldyogRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QoY29u
c3QgRXZhc19PYmplY3QqIHZpZXcpCiAKIFdLUGFnZVJlZiBFd2tWaWV3Ojp3a1BhZ2UoKSBjb25z
dAogewotICAgIHJldHVybiB0b0FQSShtX3BhZ2VQcm94eS5nZXQoKSk7CisgICAgcmV0dXJuIFdL
Vmlld0dldFBhZ2Uod2tWaWV3KCkpOwogfQogCiB2b2lkIEV3a1ZpZXc6OnNldEN1cnNvcihjb25z
dCBDdXJzb3ImIGN1cnNvcikKQEAgLTU0Niw3ICs1MzEsOCBAQCB2b2lkIEV3a1ZpZXc6OnNldFRo
ZW1lUGF0aChjb25zdCBjaGFyKiB0aGVtZSkKIHsKICAgICBpZiAobV90aGVtZSAhPSB0aGVtZSkg
ewogICAgICAgICBtX3RoZW1lID0gdGhlbWU7Ci0gICAgICAgIG1fcGFnZVByb3h5LT5zZXRUaGVt
ZVBhdGgodGhlbWUpOworICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tUaGVtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcodGhlbWUpKTsKKyAgICAgICAg
V0tWaWV3U2V0VGhlbWVQYXRoKHdrVmlldygpLCB3a1RoZW1lLmdldCgpKTsKICAgICB9CiB9CiAK
QEAgLTY0Niw5ICs2MzIsNiBAQCBib29sIEV3a1ZpZXc6OmNyZWF0ZUdMU3VyZmFjZShjb25zdCBJ
bnRTaXplJiB2aWV3U2l6ZSkKICAgICAgICAgaWYgKCFtX2V2YXNHTCkgewogICAgICAgICAgICAg
V0FSTigiRmFpbGVkIHRvIGNyZWF0ZSBFdmFzX0dMLCBmYWxsaW5nIGJhY2sgdG8gc29mdHdhcmUg
bW9kZS4iKTsKICAgICAgICAgICAgIG1faXNIYXJkd2FyZUFjY2VsZXJhdGVkID0gZmFsc2U7Ci0j
aWYgRU5BQkxFKFdFQkdMKQotICAgICAgICAgICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5w
cmVmZXJlbmNlcygpLT5zZXRXZWJHTEVuYWJsZWQoZmFsc2UpOwotI2VuZGlmCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMDI5LDcgKzEwMTIsNyBAQCB2
b2lkIEV3a1ZpZXc6Om9uRmF2aWNvbkNoYW5nZWQoY29uc3QgY2hhciogcGFnZVVSTCwgdm9pZCog
ZXZlbnRJbmZvKQogUGFzc1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IEV3a1ZpZXc6OnRha2VTbmFw
c2hvdCgpCiB7CiAgICAgLy8gU3VzcGVuZCBhbGwgYW5pbWF0aW9ucyBiZWZvcmUgdGFraW5nIHRo
ZSBzbmFwc2hvdC4KLSAgICBtX3BhZ2VQcm94eS0+c3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRB
bmltYXRpb25zKCk7CisgICAgV0tWaWV3U3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRp
b25zKHdrVmlldygpKTsKIAogICAgIC8vIFdhaXQgZm9yIHRoZSBwZW5kaW5nIHJlcGFpbnQgZXZl
bnRzIHRvIGJlIHByb2Nlc3NlZC4KICAgICB3aGlsZSAobV9kaXNwbGF5VGltZXIuaXNBY3RpdmUo
KSkKQEAgLTEwNDEsNyArMTAyNCw3IEBAIFBhc3NSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBFd2tW
aWV3Ojp0YWtlU25hcHNob3QoKQogI2VuZGlmCiAgICAgICAgIFJlZlB0cjxjYWlyb19zdXJmYWNl
X3Q+IHNuYXBzaG90ID0gY3JlYXRlU3VyZmFjZUZvckltYWdlKHNkLT5pbWFnZSk7CiAgICAgICAg
IC8vIFJlc3VtZSBhbGwgYW5pbWF0aW9ucy4KLSAgICAgICAgbV9wYWdlUHJveHktPnJlc3VtZUFj
dGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7CisgICAgICAgIFdLVmlld1Jlc3VtZUFjdGl2
ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKHdrVmlldygpKTsKIAogICAgICAgICByZXR1cm4gc25h
cHNob3QucmVsZWFzZSgpOwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKQEAgLTEw
NDksNyArMTAzMiw3IEBAIFBhc3NSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBFd2tWaWV3Ojp0YWtl
U25hcHNob3QoKQogCiAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc25hcHNob3QgPSBnZXRJ
bWFnZVN1cmZhY2VGcm9tRnJhbWVCdWZmZXIoMCwgMCwgc2QtPnZpZXcudywgc2QtPnZpZXcuaCk7
CiAgICAgLy8gUmVzdW1lIGFsbCBhbmltYXRpb25zLgotICAgIG1fcGFnZVByb3h5LT5yZXN1bWVB
Y3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworICAgIFdLVmlld1Jlc3VtZUFjdGl2ZURP
TU9iamVjdHNBbmRBbmltYXRpb25zKHdrVmlldygpKTsKIAogICAgIHJldHVybiBzbmFwc2hvdC5y
ZWxlYXNlKCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL0V3a1ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1Zp
ZXcuaAppbmRleCBlMjAyNTEwLi44NzE2NWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvRXdrVmlldy5oCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiV0tFaW5hU2hh
cmVkU3RyaW5nLmgiCiAjaW5jbHVkZSAiV0tHZW9tZXRyeS5oIgogI2luY2x1ZGUgIldLUmV0YWlu
UHRyLmgiCisjaW5jbHVkZSAiV2ViVmlldy5oIgogI2luY2x1ZGUgImV3a191cmxfcmVxdWVzdF9w
cml2YXRlLmgiCiAjaW5jbHVkZSA8RXZhcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRQb2lu
dC5oPgpAQCAtNDksNiArNTAsMTAgQEAKICNpbmNsdWRlICJFdmFzR0xTdXJmYWNlLmgiCiAjZW5k
aWYKIAorI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIK
KyNpbmNsdWRlICJXZWJQcmVmZXJlbmNlcy5oIgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNz
IENvbnRleHRNZW51Q2xpZW50RWZsOwogY2xhc3MgRmluZENsaWVudEVmbDsKQEAgLTEwMiwxNCAr
MTA3LDE2IEBAIHB1YmxpYzoKICAgICAgICAgTGVnYWN5QmVoYXZpb3IsCiAgICAgICAgIERlZmF1
bHRCZWhhdmlvcgogICAgIH07Ci0gICAgRXdrVmlldyhFdmFzX09iamVjdCogdmlldywgUGFzc1Jl
ZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBQYXNzUmVmUHRyPFdlYktpdDo6V2ViUGFnZUdyb3Vw
PiBwYWdlR3JvdXAsIFZpZXdCZWhhdmlvcik7CisgICAgRXdrVmlldyhFdmFzX09iamVjdCogdmll
dywgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXZWJLaXQ6OldlYlBhZ2VHcm91cCog
cGFnZUdyb3VwLCBWaWV3QmVoYXZpb3IpOwogICAgIH5Fd2tWaWV3KCk7CiAKICAgICBzdGF0aWMg
RXdrVmlldyogZnJvbUV2YXNPYmplY3QoY29uc3QgRXZhc19PYmplY3QqIHZpZXcpOwogICAgIEV2
YXNfT2JqZWN0KiB2aWV3KCkgeyByZXR1cm4gbV9ldmFzT2JqZWN0OyB9CiAKKyAgICBXS1ZpZXdS
ZWYgd2tWaWV3KCkgY29uc3QgeyByZXR1cm4gdG9BUEkobV93ZWJWaWV3LmdldCgpKTsgfQogICAg
IFdLUGFnZVJlZiB3a1BhZ2UoKSBjb25zdDsKLSAgICBXZWJLaXQ6OldlYlBhZ2VQcm94eSogcGFn
ZSgpIHsgcmV0dXJuIG1fcGFnZVByb3h5LmdldCgpOyB9CisKKyAgICBXZWJLaXQ6OldlYlBhZ2VQ
cm94eSogcGFnZSgpIHsgcmV0dXJuIG1fd2ViVmlldy0+cGFnZSgpOyB9CiAgICAgRXdrQ29udGV4
dCogZXdrQ29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQogICAgIEV3a1NldHRp
bmdzKiBzZXR0aW5ncygpIHsgcmV0dXJuIG1fc2V0dGluZ3MuZ2V0KCk7IH0KICAgICBFd2tCYWNr
Rm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCgpIHsgcmV0dXJuIG1fYmFja0ZvcndhcmRMaXN0
LmdldCgpOyB9CkBAIC0yNDQsNyArMjUxLDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fcGVuZGlu
Z1N1cmZhY2VSZXNpemU7CiAjZW5kaWYKICAgICBPd25QdHI8V2ViS2l0OjpQYWdlQ2xpZW50QmFz
ZT4gbV9wYWdlQ2xpZW50OwotICAgIFJlZlB0cjxXZWJLaXQ6OldlYlBhZ2VQcm94eT4gbV9wYWdl
UHJveHk7CisgICAgUmVmUHRyPFdlYktpdDo6V2ViVmlldz4gbV93ZWJWaWV3OwogICAgIE93blB0
cjxXZWJLaXQ6OlBhZ2VMb2FkQ2xpZW50RWZsPiBtX3BhZ2VMb2FkQ2xpZW50OwogICAgIE93blB0
cjxXZWJLaXQ6OlBhZ2VQb2xpY3lDbGllbnRFZmw+IG1fcGFnZVBvbGljeUNsaWVudDsKICAgICBP
d25QdHI8V2ViS2l0OjpQYWdlVUlDbGllbnRFZmw+IG1fcGFnZVVJQ2xpZW50OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCmluZGV4IGYwY2YxZDYuLmQ2
MTgxYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192
aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5j
cHAKQEAgLTUwNCw3ICs1MDQsNyBAQCBzdGF0aWMgaW5saW5lIEV2YXNfU21hcnQqIGNyZWF0ZUV3
a1ZpZXdTbWFydENsYXNzKHZvaWQpCiAgICAgcmV0dXJuIHNtYXJ0OwogfQogCi1zdGF0aWMgaW5s
aW5lIEV2YXNfT2JqZWN0KiBjcmVhdGVFd2tWaWV3KEV2YXMqIGNhbnZhcywgRXZhc19TbWFydCog
c21hcnQsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFn
ZUdyb3VwUmVmID0gMCwgRXdrVmlldzo6Vmlld0JlaGF2aW9yIGJlaGF2aW9yID0gRXdrVmlldzo6
RGVmYXVsdEJlaGF2aW9yKQorc3RhdGljIGlubGluZSBFd2tWaWV3KiBjcmVhdGVFd2tWaWV3KEV2
YXMqIGNhbnZhcywgRXZhc19TbWFydCogc21hcnQsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29u
dGV4dCwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmID0gMCwgRXdrVmlldzo6Vmlld0JlaGF2
aW9yIGJlaGF2aW9yID0gRXdrVmlldzo6RGVmYXVsdEJlaGF2aW9yKQogewogICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChjYW52YXMsIDApOwogICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzbWFydCwgMCk7CkBAIC01MjQsMjEgKzUyNCwyNSBAQCBzdGF0aWMgaW5s
aW5lIEV2YXNfT2JqZWN0KiBjcmVhdGVFd2tWaWV3KEV2YXMqIGNhbnZhcywgRXZhc19TbWFydCog
c21hcnQsIFBhc3NSZQogICAgIC8vIERlZmF1bHQgV2ViUGFnZUdyb3VwIGlzIGNyZWF0ZWQgaW4g
V2ViQ29udGV4dCBjb25zdHJ1Y3RvciBpZiB0aGUgcGFnZUdyb3VwUmVmIGlzIDAsCiAgICAgLy8g
c28gd2UgZG8gbm90IG5lZWQgdG8gY3JlYXRlIGl0IGhlcmUuCiAgICAgc21hcnREYXRhLT5wcml2
ID0gbmV3IEV3a1ZpZXcoZXdrVmlldywgY29udGV4dCwgdG9JbXBsKHBhZ2VHcm91cFJlZiksIGJl
aGF2aW9yKTsKLSAgICByZXR1cm4gZXdrVmlldzsKKyAgICByZXR1cm4gc21hcnREYXRhLT5wcml2
OwogfQogCiAvKioKICAqIEBpbnRlcm5hbAogICogQ29uc3RydWN0cyBhIGV3a192aWV3IEV2YXNf
T2JqZWN0IHdpdGggV0tUeXBlIHBhcmFtZXRlcnMuCiAgKi8KLUV2YXNfT2JqZWN0KiBld2tfdmll
d19iYXNlX2FkZChFdmFzKiBjYW52YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VH
cm91cFJlZiBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OlZpZXdCZWhhdmlvciBiZWhhdmlvcikKK0V3
a1ZpZXcqIGV3a192aWV3X2Jhc2VfYWRkKEV2YXMqIGNhbnZhcywgV0tDb250ZXh0UmVmIGNvbnRl
eHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwgRXdrVmlldzo6Vmlld0JlaGF2aW9y
IGJlaGF2aW9yKQogewogICAgIHJldHVybiBjcmVhdGVFd2tWaWV3KGNhbnZhcywgY3JlYXRlRXdr
Vmlld1NtYXJ0Q2xhc3MoKSwgY29udGV4dFJlZiA/IEV3a0NvbnRleHQ6OmNyZWF0ZShjb250ZXh0
UmVmKSA6IEV3a0NvbnRleHQ6OmRlZmF1bHRDb250ZXh0KCksIHBhZ2VHcm91cFJlZiwgYmVoYXZp
b3IpOwogfQogCiBFdmFzX09iamVjdCogZXdrX3ZpZXdfc21hcnRfYWRkKEV2YXMqIGNhbnZhcywg
RXZhc19TbWFydCogc21hcnQsIEV3a19Db250ZXh0KiBjb250ZXh0KQogewotICAgIHJldHVybiBj
cmVhdGVFd2tWaWV3KGNhbnZhcywgc21hcnQsIGV3a19vYmplY3RfY2FzdDxFd2tDb250ZXh0Kj4o
Y29udGV4dCkpOworICAgIEV3a1ZpZXcqIGV3a1ZpZXcgPSBjcmVhdGVFd2tWaWV3KGNhbnZhcywg
c21hcnQsIGV3a19vYmplY3RfY2FzdDxFd2tDb250ZXh0Kj4oY29udGV4dCkpOworICAgIGlmICgh
ZXdrVmlldykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gZXdrVmlldy0+dmlldygp
OwogfQogCiBFdmFzX09iamVjdCogZXdrX3ZpZXdfYWRkX3dpdGhfY29udGV4dChFdmFzKiBjYW52
YXMsIEV3a19Db250ZXh0KiBjb250ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oCmluZGV4IDgzYjRjOTcuLmM0OTEyZmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZh
dGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19wcml2
YXRlLmgKQEAgLTI1LDYgKzI1LDYgQEAKICNpbmNsdWRlIDxFdmFzLmg+CiAjaW5jbHVkZSA8V2Vi
S2l0Mi9XS0Jhc2UuaD4KIAotRXZhc19PYmplY3QqIGV3a192aWV3X2Jhc2VfYWRkKEV2YXMqIGNh
bnZhcywgV0tDb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiwgRXdrVmlldzo6Vmlld0JlaGF2aW9y
KTsKK0V3a1ZpZXcqIGV3a192aWV3X2Jhc2VfYWRkKEV2YXMqIGNhbnZhcywgV0tDb250ZXh0UmVm
LCBXS1BhZ2VHcm91cFJlZiwgRXdrVmlldzo6Vmlld0JlaGF2aW9yKTsKIAogI2VuZGlmIC8vIGV3
a192aWV3X3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2Vm
bC9XZWJJbnNwZWN0b3JQcm94eUVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZs
L1dlYkluc3BlY3RvclByb3h5RWZsLmNwcAppbmRleCA0NjJiMjZkLi44NTNkNDdlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkluc3BlY3RvclByb3h5RWZsLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkluc3BlY3RvclByb3h5RWZs
LmNwcApAQCAtOTgsMTQgKzk4LDE5IEBAIFdlYlBhZ2VQcm94eSogV2ViSW5zcGVjdG9yUHJveHk6
OnBsYXRmb3JtQ3JlYXRlSW5zcGVjdG9yUGFnZSgpCiAgICAgaWYgKCFtX2luc3BlY3RvcldpbmRv
dykKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBtX2luc3BlY3RvclZpZXcgPSBld2tfdmlld19i
YXNlX2FkZChlY29yZV9ldmFzX2dldChtX2luc3BlY3RvcldpbmRvdyksIHRvQVBJKHBhZ2UoKS0+
cHJvY2VzcygpLT5jb250ZXh0KCkpLCB0b0FQSShpbnNwZWN0b3JQYWdlR3JvdXAoKSksIEV3a1Zp
ZXc6OkxlZ2FjeUJlaGF2aW9yKTsKLSAgICBFd2tWaWV3KiBpbnNwZWN0b3JWaWV3SW1wbCA9IEV3
a1ZpZXc6OmZyb21FdmFzT2JqZWN0KG1faW5zcGVjdG9yVmlldyk7Ci0gICAgaW5zcGVjdG9yVmll
d0ltcGwtPnNldFRoZW1lUGF0aChURVNUX1RIRU1FX0RJUiAiL2RlZmF1bHQuZWRqIik7CisgICAg
Ly8gRklYTUU6IFJlZmFjdG9yIHRvIHVzZSBXS1ZpZXdSZWYuCisgICAgRXdrVmlldyogZXdrVmll
dyA9IGV3a192aWV3X2Jhc2VfYWRkKGVjb3JlX2V2YXNfZ2V0KG1faW5zcGVjdG9yV2luZG93KSwg
dG9BUEkocGFnZSgpLT5wcm9jZXNzKCktPmNvbnRleHQoKSksIHRvQVBJKGluc3BlY3RvclBhZ2VH
cm91cCgpKSwgRXdrVmlldzo6TGVnYWN5QmVoYXZpb3IpOworICAgIGlmICghZXdrVmlldykKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBtX2luc3BlY3RvclZpZXcgPSBld2tWaWV3LT52aWV3KCk7
CisKKyAgICBld2tWaWV3LT5zZXRUaGVtZVBhdGgoVEVTVF9USEVNRV9ESVIgIi9kZWZhdWx0LmVk
aiIpOwogCi0gICAgRXdrX1NldHRpbmdzKiBzZXR0aW5ncyA9IGluc3BlY3RvclZpZXdJbXBsLT5z
ZXR0aW5ncygpOworICAgIEV3a19TZXR0aW5ncyogc2V0dGluZ3MgPSBld2tWaWV3LT5zZXR0aW5n
cygpOwogICAgIGV3a19zZXR0aW5nc19maWxlX2FjY2Vzc19mcm9tX2ZpbGVfdXJsc19hbGxvd2Vk
X3NldChzZXR0aW5ncywgdHJ1ZSk7CiAKLSAgICByZXR1cm4gaW5zcGVjdG9yVmlld0ltcGwtPnBh
Z2UoKTsKKyAgICByZXR1cm4gZXdrVmlldy0+cGFnZSgpOwogfQogCiB2b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybU9wZW4oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2VmbC9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmll
dy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFiMWZmNgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5jcHAKQEAg
LTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXZWJWaWV3LmgiCisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisjaW5jbHVk
ZSAiV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitXZWJWaWV3OjpXZWJWaWV3KFdlYkNvbnRleHQqIGNvbnRleHQsIFBhZ2VDbGllbnQq
IHBhZ2VDbGllbnQsIFdlYlBhZ2VHcm91cCogcGFnZUdyb3VwLCBFdmFzX09iamVjdCogZXZhc09i
amVjdCkKKyAgICA6IG1fd2ViUGFnZVByb3h5KGNvbnRleHQtPmNyZWF0ZVdlYlBhZ2UocGFnZUNs
aWVudCwgcGFnZUdyb3VwKSkKKyAgICAsIG1fZXZhc09iamVjdChldmFzT2JqZWN0KQoreworICAg
IG1fd2ViUGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0QWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0VuYWJsZWQodHJ1ZSk7CisgICAgbV93ZWJQYWdlUHJveHktPnBhZ2VHcm91
cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRGb3JjZUNvbXBvc2l0aW5nTW9kZSh0cnVlKTsKKworICAg
IGNoYXIqIGRlYnVnVmlzdWFsc0Vudmlyb25tZW50ID0gZ2V0ZW52KCJXRUJLSVRfU0hPV19DT01Q
T1NJVElOR19ERUJVR19WSVNVQUxTIik7CisgICAgYm9vbCBzaG93RGVidWdWaXN1YWxzID0gZGVi
dWdWaXN1YWxzRW52aXJvbm1lbnQgJiYgIXN0cmNtcChkZWJ1Z1Zpc3VhbHNFbnZpcm9ubWVudCwg
IjEiKTsKKyAgICBtX3dlYlBhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNl
dENvbXBvc2l0aW5nQm9yZGVyc1Zpc2libGUoc2hvd0RlYnVnVmlzdWFscyk7CisgICAgbV93ZWJQ
YWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRDb21wb3NpdGluZ1JlcGFp
bnRDb3VudGVyc1Zpc2libGUoc2hvd0RlYnVnVmlzdWFscyk7CisKKyNpZiBFTkFCTEUoRlVMTFND
UkVFTl9BUEkpCisgICAgbV93ZWJQYWdlUHJveHktPmZ1bGxTY3JlZW5NYW5hZ2VyKCktPnNldFdl
YlZpZXcobV9ldmFzT2JqZWN0KTsKKyNlbmRpZgorfQorCitXZWJWaWV3Ojp+V2ViVmlldygpCit7
CisgICAgbV93ZWJQYWdlUHJveHktPmNsb3NlKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6aW5pdGlh
bGl6ZSgpCit7CisgICAgbV93ZWJQYWdlUHJveHktPmluaXRpYWxpemVXZWJQYWdlKCk7Cit9CisK
K3ZvaWQgV2ViVmlldzo6c2V0VGhlbWVQYXRoKFdLU3RyaW5nUmVmIHRoZW1lKQoreworICAgIG1f
d2ViUGFnZVByb3h5LT5zZXRUaGVtZVBhdGgodG9XVEZTdHJpbmcodGhlbWUpLnV0ZjgoKS5kYXRh
KCkpOworfQorCit2b2lkIFdlYlZpZXc6OnN1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0
aW9ucygpCit7CisgICAgbV93ZWJQYWdlUHJveHktPnN1c3BlbmRBY3RpdmVET01PYmplY3RzQW5k
QW5pbWF0aW9ucygpOworfQorCit2b2lkIFdlYlZpZXc6OnJlc3VtZUFjdGl2ZURPTU9iamVjdHNB
bmRBbmltYXRpb25zKCkKK3sKKyAgICBtX3dlYlBhZ2VQcm94eS0+cmVzdW1lQWN0aXZlRE9NT2Jq
ZWN0c0FuZEFuaW1hdGlvbnMoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmUxZTc2NmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZWZsL1dlYlZpZXcuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBXZWJWaWV3X2gKKyNkZWZpbmUgV2ViVmlld19oCisKKyNpbmNsdWRlICJBUElPYmplY3Qu
aCIKKyNpbmNsdWRlICJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIldlYlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1
ZGUgIldlYlByZWZlcmVuY2VzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJW
aWV3IDogcHVibGljIEFQSU9iamVjdCB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IFR5cGUg
QVBJVHlwZSA9IFR5cGVWaWV3OworCisgICAgV2ViVmlldyhXZWJDb250ZXh0KiwgUGFnZUNsaWVu
dCosIFdlYlBhZ2VHcm91cCosIEV2YXNfT2JqZWN0Kik7CisgICAgdmlydHVhbCB+V2ViVmlldygp
OworCisgICAgdm9pZCBpbml0aWFsaXplKCk7CisKKyAgICBXS1BhZ2VSZWYgcGFnZVJlZigpIGNv
bnN0IHsgcmV0dXJuIHRvQVBJKG1fd2ViUGFnZVByb3h5LmdldCgpKTsgfQorCisgICAgdm9pZCBz
ZXRUaGVtZVBhdGgoV0tTdHJpbmdSZWYpOworICAgIHZvaWQgc3VzcGVuZEFjdGl2ZURPTU9iamVj
dHNBbmRBbmltYXRpb25zKCk7CisgICAgdm9pZCByZXN1bWVBY3RpdmVET01PYmplY3RzQW5kQW5p
bWF0aW9ucygpOworCisgICAgLy8gRklYTUU6IFJlbW92ZSB3aGVuIHBvc3NpYmxlLgorICAgIEV2
YXNfT2JqZWN0KiBldmFzT2JqZWN0KCkgeyByZXR1cm4gbV9ldmFzT2JqZWN0OyB9CisgICAgV2Vi
UGFnZVByb3h5KiBwYWdlKCkgeyByZXR1cm4gbV93ZWJQYWdlUHJveHkuZ2V0KCk7IH0KKworcHJp
dmF0ZToKKyAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIEFQSVR5cGU7IH0K
KworICAgIFJlZlB0cjxXZWJQYWdlUHJveHk+IG1fd2ViUGFnZVByb3h5OworICAgIEV2YXNfT2Jq
ZWN0KiBtX2V2YXNPYmplY3Q7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMv
Q2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDkwOWQyNWQuLjM4NWRmNzMgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwz
OSBAQAorMjAxMy0wMi0wNCAgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4gIDxrZW5uZXRoQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgW0VGTF1bV0syXSBJbnRyb2R1Y2UgYSBXZWJWaWV3IGNsYXNz
IGFzIGNvdW50ZXJwYXJ0IGZvciBXS1ZpZXdSZWYKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzkzMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIENoYW5nZSBwbGF0Zm9ybVZpZXcgdG8gYmUgYSBXS1ZpZXcg
YW5kIHVzZSBXS1ZpZXdHZXRFdmFzT2JqZWN0CisgICAgICAgIGZvciB0aGUgcGxhY2VzIHdoZXJl
IGFuIEV2YXNfT2JqZWN0IGlzIG5lZWRlZC4KKworICAgICAgICBJbnN0ZWFkIG9mIGV4dHJhY3Rp
bmcgdGhlIEVjb3JlX0V2YXMqIGZyb20gdGhlIG1fdmlldyB3ZSB1c2UKKyAgICAgICAgdGhlIG1f
d2luZG93IGluc3RlYWQsIHdoaWNoIGFjdHVhbGx5IGhvbGRzIHRoZSBpdC4KKworICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvUGxhdGZvcm1XZWJWaWV3Lmg6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9lZmwvUGxhdGZvcm1XZWJWaWV3LmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBsYXRm
b3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBs
YXRmb3JtV2ViVmlldzo6flBsYXRmb3JtV2ViVmlldyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpQbGF0Zm9ybVdlYlZpZXc6OnJlc2l6ZVRvKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBs
YXRmb3JtV2ViVmlldzo6cGFnZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQbGF0Zm9ybVdl
YlZpZXc6OnNpbXVsYXRlU3BhY2ViYXJLZXlQcmVzcyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpQbGF0Zm9ybVdlYlZpZXc6OnNpbXVsYXRlTW91c2VNb3ZlKToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OlBsYXRmb3JtV2ViVmlldzo6c2ltdWxhdGVSaWdodENsaWNrKToKKyAgICAgICAgKiBX
ZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oOgorICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwOgorICAgICAgICAoV1RSOjpFdmVudFNl
bmRlclByb3h5OjpzZW5kVG91Y2hFdmVudCk6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJv
eHk6OnNldFRvdWNoTW9kaWZpZXIpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvZWZsL1Bs
YXRmb3JtV2ViVmlld0VmbC5jcHA6CisgICAgICAgIChXVFI6OlBsYXRmb3JtV2ViVmlldzo6UGxh
dGZvcm1XZWJWaWV3KToKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3Ojp+UGxhdGZvcm1X
ZWJWaWV3KToKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3OjpyZXNpemVUbyk6CisgICAg
ICAgIChXVFI6OlBsYXRmb3JtV2ViVmlldzo6cGFnZSk6CisgICAgICAgIChXVFI6OlBsYXRmb3Jt
V2ViVmlldzo6Zm9jdXMpOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6OndpbmRvd0Zy
YW1lKToKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3OjpzZXRXaW5kb3dGcmFtZSk6Cisg
ICAgICAgIChXVFI6OlBsYXRmb3JtV2ViVmlldzo6d2luZG93U25hcHNob3RJbWFnZSk6CisKIDIw
MTMtMDItMDQgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZW1vdmUgZHVwbGljYXRlIGVudHJ5IGZyb20gRHVtcFJlbmRlclRyZWUgWGNvZGUgcHJvamVjdApk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdlYlZpZXcuaCBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XZWJWaWV3LmgKaW5kZXggNWFkMWVlZC4uZGNhZjQ0OCAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdlYlZpZXcuaAorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2ViVmlldy5oCkBAIC00NywxMyArNDcsOCBAQCB0
eXBlZGVmIEhXTkQgUGxhdGZvcm1XaW5kb3c7CiB0eXBlZGVmIFdLVmlld1JlZiBQbGF0Zm9ybVdL
VmlldzsKIHR5cGVkZWYgR3RrV2lkZ2V0ICpQbGF0Zm9ybVdpbmRvdzsKICNlbGlmIFBMQVRGT1JN
KEVGTCkKLSNpZiBVU0UoRU8pCi10eXBlZGVmIHN0cnVjdCBfRW8gRXZhc19PYmplY3Q7Ci0jZWxz
ZQotdHlwZWRlZiBzdHJ1Y3QgX0V2YXNfT2JqZWN0IEV2YXNfT2JqZWN0OwotI2VuZGlmCiB0eXBl
ZGVmIHN0cnVjdCBfRWNvcmVfRXZhcyBFY29yZV9FdmFzOwotdHlwZWRlZiBFdmFzX09iamVjdCog
UGxhdGZvcm1XS1ZpZXc7Cit0eXBlZGVmIFdLVmlld1JlZiBQbGF0Zm9ybVdLVmlldzsKIHR5cGVk
ZWYgRWNvcmVfRXZhcyogUGxhdGZvcm1XaW5kb3c7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9lZmwvUGxhdGZvcm1XZWJWaWV3LmNwcCBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvZWZsL1BsYXRmb3JtV2ViVmlldy5jcHAKaW5kZXggZDU0NDllYi4uOGEwMzVmMyAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwvUGxhdGZvcm1XZWJWaWV3LmNwcAorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL2VmbC9QbGF0Zm9ybVdlYlZpZXcuY3BwCkBAIC02NSwzMyAr
NjUsNDEgQEAgUGxhdGZvcm1XZWJWaWV3OjpQbGF0Zm9ybVdlYlZpZXcoV0tDb250ZXh0UmVmIGNv
bnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm8KIHsKICAgICBtX3dpbmRvdyA9IGluaXRF
Y29yZUV2YXMoKTsKICAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwot
ICAgIG1fdmlldyA9IHRvSW1wbChXS1ZpZXdDcmVhdGUoZXZhcywgY29udGV4dFJlZiwgcGFnZUdy
b3VwUmVmKSk7Ci0gICAgZXdrX3ZpZXdfdGhlbWVfc2V0KG1fdmlldywgVEhFTUVfRElSIi9kZWZh
dWx0LmVkaiIpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChtX3ZpZXcsICJ3
ZWJwcm9jZXNzLGNyYXNoZWQiLCBvbldlYlByb2Nlc3NDcmFzaGVkLCAwKTsKKyAgICBtX3ZpZXcg
PSBXS1ZpZXdDcmVhdGUoZXZhcywgY29udGV4dFJlZiwgcGFnZUdyb3VwUmVmKTsKKyAgICBld2tf
dmlld190aGVtZV9zZXQoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCBUSEVNRV9ESVIiL2Rl
ZmF1bHQuZWRqIik7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKFdLVmlld0dl
dEV2YXNPYmplY3QobV92aWV3KSwgIndlYnByb2Nlc3MsY3Jhc2hlZCIsIG9uV2ViUHJvY2Vzc0Ny
YXNoZWQsIDApOwogICAgIHJlc2l6ZVRvKDYwMCwgODAwKTsKIH0KIAogUGxhdGZvcm1XZWJWaWV3
Ojp+UGxhdGZvcm1XZWJWaWV3KCkKIHsKLSAgICBldmFzX29iamVjdF9kZWwobV92aWV3KTsKKyAg
ICBFdmFzX09iamVjdCogZXZhc09iamVjdCA9IFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KTsK
KworICAgIC8vIFJlbGVhc2UgZmlyc3QuIFdlYlZpZXcgc2hvdWxkIG5vdCBsaXZlIGxvbmdlciB0
aGFuIEV3a1ZpZXcsIGFzIEV3a1ZpZXcgb3ducyBvYmplY3RzIHRoYXQgcGFnZSBwcm94eSByZWZl
cnMgdG8uCisgICAgV0tSZWxlYXNlKG1fdmlldyk7CisKKyAgICAvLyBGSVhNRTogVGhlIEMgV0tW
aWV3IEFQSSBjdXJyZW50bHkgY3JlYXRlcyB0aGUgRXZhc19PYmplY3QsIHNvIHdlIGhhdmUgdG8g
ZGVzdHJ1Y3QgaXQKKyAgICAvLyAoYW5kIGl0cyBkZXBlbmRlbmNpZXMgRXdrVmlldyBhbmQgV2Vi
S2l0OjpXZWJWaWV3KSB0aGlzIHdheSwgdW50aWwgdGhpcyBnZXQgZml4ZWQuCisgICAgZXZhc19v
YmplY3RfZGVsKGV2YXNPYmplY3QpOworCiAgICAgZWNvcmVfZXZhc19mcmVlKG1fd2luZG93KTsK
ICAgICBlY29yZV9ldmFzX3NodXRkb3duKCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3Ojpy
ZXNpemVUbyh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQogewotICAgIGV2YXNfb2Jq
ZWN0X3Jlc2l6ZShtX3ZpZXcsIHdpZHRoLCBoZWlnaHQpOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6
ZShXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIHdpZHRoLCBoZWlnaHQpOwogfQogCiBXS1Bh
Z2VSZWYgUGxhdGZvcm1XZWJWaWV3OjpwYWdlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV0tWaWV3
R2V0UGFnZSh0b0FQSShtX3ZpZXcpKTsKKyAgICByZXR1cm4gV0tWaWV3R2V0UGFnZShtX3ZpZXcp
OwogfQogCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6c2ltdWxhdGVTcGFjZWJhcktleVByZXNzKCkK
IHsKICAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwotICAgIGV2YXNf
b2JqZWN0X2ZvY3VzX3NldChtX3ZpZXcsIHRydWUpOworICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3Nl
dChXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIHRydWUpOwogICAgIGV2YXNfZXZlbnRfZmVl
ZF9rZXlfZG93bihldmFzLCAic3BhY2UiLCAic3BhY2UiLCAiICIsIDAsIDAsIDApOwogICAgIGV2
YXNfZXZlbnRfZmVlZF9rZXlfdXAoZXZhcywgInNwYWNlIiwgInNwYWNlIiwgIiAiLCAwLCAxLCAw
KTsKIH0KQEAgLTk5LDE0ICsxMDcsMTQgQEAgdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnNpbXVsYXRl
U3BhY2ViYXJLZXlQcmVzcygpCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6c2ltdWxhdGVNb3VzZU1v
dmUodW5zaWduZWQgeCwgdW5zaWduZWQgeSkKIHsKICAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZh
c19nZXQobV93aW5kb3cpOwotICAgIGV2YXNfb2JqZWN0X3Nob3cobV92aWV3KTsKKyAgICBldmFz
X29iamVjdF9zaG93KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSk7CiAgICAgZXZhc19ldmVu
dF9mZWVkX21vdXNlX21vdmUoZXZhcywgeCwgeSwgMCwgMCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1X
ZWJWaWV3OjpzaW11bGF0ZVJpZ2h0Q2xpY2sodW5zaWduZWQgeCwgdW5zaWduZWQgeSkKIHsKICAg
ICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwotICAgIGV2YXNfb2JqZWN0
X3Nob3cobV92aWV3KTsKKyAgICBldmFzX29iamVjdF9zaG93KFdLVmlld0dldEV2YXNPYmplY3Qo
bV92aWV3KSk7CiAgICAgZXZhc19ldmVudF9mZWVkX21vdXNlX21vdmUoZXZhcywgeCwgeSwgMCwg
MCk7CiAgICAgZXZhc19ldmVudF9mZWVkX21vdXNlX2Rvd24oZXZhcywgMywgRVZBU19CVVRUT05f
Tk9ORSwgMCwgMCk7CiAgICAgZXZhc19ldmVudF9mZWVkX21vdXNlX3VwKGV2YXMsIDMsIEVWQVNf
QlVUVE9OX05PTkUsIDAsIDApOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Q
bGF0Zm9ybVdlYlZpZXcuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3
LmgKaW5kZXggOGY5ZGNkYi4uNTFjNGJjYyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9QbGF0Zm9ybVdlYlZpZXcuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRm
b3JtV2ViVmlldy5oCkBAIC01NCwxMyArNTQsOCBAQCB0eXBlZGVmIHN0cnVjdCBfR3RrV2lkZ2V0
IEd0a1dpZGdldDsKIHR5cGVkZWYgV0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlwZWRlZiBH
dGtXaWRnZXQqIFBsYXRmb3JtV2luZG93OwogI2VsaWYgUExBVEZPUk0oRUZMKQotI2lmIFVTRShF
TykKLXR5cGVkZWYgc3RydWN0IF9FbyBFdmFzX09iamVjdDsKLSNlbHNlCi10eXBlZGVmIHN0cnVj
dCBfRXZhc19PYmplY3QgRXZhc19PYmplY3Q7Ci0jZW5kaWYKIHR5cGVkZWYgc3RydWN0IF9FY29y
ZV9FdmFzIEVjb3JlX0V2YXM7Ci10eXBlZGVmIEV2YXNfT2JqZWN0KiBQbGF0Zm9ybVdLVmlldzsK
K3R5cGVkZWYgV0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlwZWRlZiBFY29yZV9FdmFzKiBQ
bGF0Zm9ybVdpbmRvdzsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL2VmbC9FdmVudFNlbmRlclByb3h5RWZsLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
ZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3BwCmluZGV4IGYyODI5YTkuLjEzOTIwZWMgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3Bw
CisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJveHlFZmwuY3Bw
CkBAIC00MzgsNyArNDM4LDcgQEAgdm9pZCBFdmVudFNlbmRlclByb3h5OjpzZW5kVG91Y2hFdmVu
dChFd2tfVG91Y2hfRXZlbnRfVHlwZSBldmVudFR5cGUpCiB7CiAgICAgQVNTRVJUKG1fdG91Y2hQ
b2ludHMpOwogCi0gICAgRXZhc19PYmplY3QqIGV3a1ZpZXcgPSBtX3Rlc3RDb250cm9sbGVyLT5t
YWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKTsKKyAgICBFdmFzX09iamVjdCogZXdrVmlldyA9
IFdLVmlld0dldEV2YXNPYmplY3QobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxh
dGZvcm1WaWV3KCkpOwogICAgIGV3a192aWV3X2ZlZWRfdG91Y2hfZXZlbnQoZXdrVmlldywgZXZl
bnRUeXBlLCBtX3RvdWNoUG9pbnRzLCBldmFzX2tleV9tb2RpZmllcl9nZXQoZXZhc19vYmplY3Rf
ZXZhc19nZXQoZXdrVmlldykpKTsKIAogICAgIEVpbmFfTGlzdCogbGlzdDsKQEAgLTQ5MCwxMiAr
NDkwLDE0IEBAIHZvaWQgRXZlbnRTZW5kZXJQcm94eTo6dXBkYXRlVG91Y2hQb2ludChpbnQgaW5k
ZXgsIGludCB4LCBpbnQgeSkKIAogdm9pZCBFdmVudFNlbmRlclByb3h5OjpzZXRUb3VjaE1vZGlm
aWVyKFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXIsIGJvb2wgZW5hYmxlKQogeworICAgIEV2YXNf
T2JqZWN0KiBld2tWaWV3ID0gV0tWaWV3R2V0RXZhc09iamVjdChtX3Rlc3RDb250cm9sbGVyLT5t
YWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKSk7CisKICAgICBmb3IgKHVuc2lnbmVkIGluZGV4
ID0gMDsgaW5kZXggPCAoc2l6ZW9mKG1vZGlmaWVyTmFtZXMpIC8gc2l6ZW9mKGNoYXIqKSk7ICsr
aW5kZXgpIHsKICAgICAgICAgaWYgKG1vZGlmaWVyICYgKDEgPDwgaW5kZXgpKSB7CiAgICAgICAg
ICAgICBpZiAoZW5hYmxlKQotICAgICAgICAgICAgICAgIGV2YXNfa2V5X21vZGlmaWVyX29uKGV2
YXNfb2JqZWN0X2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJWaWV3KCktPnBsYXRm
b3JtVmlldygpKSwgbW9kaWZpZXJOYW1lc1tpbmRleF0pOworICAgICAgICAgICAgICAgIGV2YXNf
a2V5X21vZGlmaWVyX29uKGV2YXNfb2JqZWN0X2V2YXNfZ2V0KGV3a1ZpZXcpLCBtb2RpZmllck5h
bWVzW2luZGV4XSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZXZhc19rZXlf
bW9kaWZpZXJfb2ZmKGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fdGVzdENvbnRyb2xsZXItPm1haW5X
ZWJWaWV3KCktPnBsYXRmb3JtVmlldygpKSwgbW9kaWZpZXJOYW1lc1tpbmRleF0pOworICAgICAg
ICAgICAgICAgIGV2YXNfa2V5X21vZGlmaWVyX29mZihldmFzX29iamVjdF9ldmFzX2dldChld2tW
aWV3KSwgbW9kaWZpZXJOYW1lc1tpbmRleF0pOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0t
Z2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNwcCBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5jcHAKaW5kZXgg
MWNjYzBiZC4uNjhiMjY5NSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwv
UGxhdGZvcm1XZWJWaWV3RWZsLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9Q
bGF0Zm9ybVdlYlZpZXdFZmwuY3BwCkBAIC02MSw1NiArNjEsNjEgQEAgUGxhdGZvcm1XZWJWaWV3
OjpQbGF0Zm9ybVdlYlZpZXcoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBh
Z2VHcm91cCwKICAgICBFdmFzKiBldmFzID0gZWNvcmVfZXZhc19nZXQobV93aW5kb3cpOwogCiAg
ICAgaWYgKG1fdXNpbmdGaXhlZExheW91dCkgewotICAgICAgICBtX3ZpZXcgPSB0b0ltcGwoV0tW
aWV3Q3JlYXRlV2l0aEZpeGVkTGF5b3V0KGV2YXMsIGNvbnRleHQsIHBhZ2VHcm91cCkpOwotICAg
ICAgICBldmFzX29iamVjdF9yZXNpemUobV92aWV3LCA4MDAsIDYwMCk7CisgICAgICAgIG1fdmll
dyA9IFdLVmlld0NyZWF0ZVdpdGhGaXhlZExheW91dChldmFzLCBjb250ZXh0LCBwYWdlR3JvdXAp
OworICAgICAgICBldmFzX29iamVjdF9yZXNpemUoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcp
LCA4MDAsIDYwMCk7CiAgICAgfSBlbHNlCi0gICAgICAgIG1fdmlldyA9IHRvSW1wbChXS1ZpZXdD
cmVhdGUoZXZhcywgY29udGV4dCwgcGFnZUdyb3VwKSk7CisgICAgICAgIG1fdmlldyA9IFdLVmll
d0NyZWF0ZShldmFzLCBjb250ZXh0LCBwYWdlR3JvdXApOwogCi0gICAgZXdrX3ZpZXdfdGhlbWVf
c2V0KG1fdmlldywgVEhFTUVfRElSIi9kZWZhdWx0LmVkaiIpOworICAgIGV3a192aWV3X3RoZW1l
X3NldChXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIFRIRU1FX0RJUiIvZGVmYXVsdC5lZGoi
KTsKICAgICBtX3dpbmRvd0lzS2V5ID0gZmFsc2U7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhtX3Zp
ZXcpOworICAgIGV2YXNfb2JqZWN0X3Nob3coV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpKTsK
IH0KIAogUGxhdGZvcm1XZWJWaWV3Ojp+UGxhdGZvcm1XZWJWaWV3KCkKIHsKLSAgICBldmFzX29i
amVjdF9kZWwobV92aWV3KTsKKyAgICBFdmFzX09iamVjdCogZXZhc09iamVjdCA9IFdLVmlld0dl
dEV2YXNPYmplY3QobV92aWV3KTsKKworICAgIC8vIFJlbGVhc2UgZmlyc3QuIFdlYlZpZXcgc2hv
dWxkIG5vdCBsaXZlIGxvbmdlciB0aGFuIEV3a1ZpZXcsIGFzIEV3a1ZpZXcgb3ducyBvYmplY3Rz
IHRoYXQgcGFnZSBwcm94eSByZWZlcnMgdG8uCisgICAgV0tSZWxlYXNlKG1fdmlldyk7CisKKyAg
ICAvLyBGSVhNRTogVGhlIEMgV0tWaWV3IEFQSSBjdXJyZW50bHkgY3JlYXRlcyB0aGUgRXZhc19P
YmplY3QsIHNvIHdlIGhhdmUgdG8gZGVzdHJ1Y3QgaXQKKyAgICAvLyAoYW5kIGl0cyBkZXBlbmRl
bmNpZXMgRXdrVmlldyBhbmQgV2ViS2l0OjpXZWJWaWV3KSB0aGlzIHdheSwgdW50aWwgdGhpcyBn
ZXQgZml4ZWQuCisgICAgZXZhc19vYmplY3RfZGVsKGV2YXNPYmplY3QpOworCiAgICAgZWNvcmVf
ZXZhc19mcmVlKG1fd2luZG93KTsKIH0KIAogdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnJlc2l6ZVRv
KHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCiB7Ci0gICAgZXZhc19vYmplY3RfcmVz
aXplKG1fdmlldywgd2lkdGgsIGhlaWdodCk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKFdLVmll
d0dldEV2YXNPYmplY3QobV92aWV3KSwgd2lkdGgsIGhlaWdodCk7CiB9CiAKIFdLUGFnZVJlZiBQ
bGF0Zm9ybVdlYlZpZXc6OnBhZ2UoKQogewotICAgIHJldHVybiBXS1ZpZXdHZXRQYWdlKHRvQVBJ
KG1fdmlldykpOworICAgIHJldHVybiBXS1ZpZXdHZXRQYWdlKG1fdmlldyk7CiB9CiAKIHZvaWQg
UGxhdGZvcm1XZWJWaWV3Ojpmb2N1cygpCiB7CisgICAgRXZhc19PYmplY3QqIGV2YXNPYmplY3Qg
PSBXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyk7CiAgICAgLy8gSW4gYSBmZXcgY2FzZXMsIGFu
IGlmcmFtZSBtaWdodCByZWNlaXZlIGZvY3VzIGZyb20gSmF2YVNjcmlwdCBhbmQgRXZhcyBpcyBu
b3QgYXdhcmUgb2YgaXQgYXQgYWxsCiAgICAgLy8gKFdlYkNvcmVTdXBwb3J0Ojpmb2N1c2VkRnJh
bWVDaGFuZ2VkKCkgZG9lcyBub3QgZW1pdCBhbnkgbm90aWZpY2F0aW9uKS4gV2UgdGhlbiBtYW51
YWxseSByZW1vdmUgdGhlCiAgICAgLy8gZm9jdXMgZnJvbSB0aGUgdmlldyB0byBtYWtlIHRoZSBj
YWxsIGdpdmUgZm9jdXMgdG8gZXZhc19vYmplY3RfZm9jdXNfc2V0KC4uLiwgdHJ1ZSkgdG8gYmUg
ZWZmZWN0ZnVsLgotICAgIGlmIChXS1BhZ2VHZXRGb2N1c2VkRnJhbWUocGFnZSgpKSAhPSBXS1Bh
Z2VHZXRNYWluRnJhbWUocGFnZSgpKSkKLSAgICAgICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KG1f
dmlldywgZmFsc2UpOwotICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldChtX3ZpZXcsIHRydWUpOwor
ICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldChXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldyksIFdL
UGFnZUdldEZvY3VzZWRGcmFtZShwYWdlKCkpID09IFdLUGFnZUdldE1haW5GcmFtZShwYWdlKCkp
KTsKIH0KIAogV0tSZWN0IFBsYXRmb3JtV2ViVmlldzo6d2luZG93RnJhbWUoKQogewogICAgIGlu
dCB4LCB5LCB3aWR0aCwgaGVpZ2h0OwogCi0gICAgRWNvcmVfRXZhcyogZWUgPSBlY29yZV9ldmFz
X2Vjb3JlX2V2YXNfZ2V0KGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG1fdmlldykpOwotICAgIGVjb3Jl
X2V2YXNfcmVxdWVzdF9nZW9tZXRyeV9nZXQoZWUsICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0KTsK
KyAgICBlY29yZV9ldmFzX3JlcXVlc3RfZ2VvbWV0cnlfZ2V0KG1fd2luZG93LCAmeCwgJnksICZ3
aWR0aCwgJmhlaWdodCk7CiAKICAgICByZXR1cm4gV0tSZWN0TWFrZSh4LCB5LCB3aWR0aCwgaGVp
Z2h0KTsKIH0KIAogdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnNldFdpbmRvd0ZyYW1lKFdLUmVjdCBm
cmFtZSkKIHsKLSAgICBFY29yZV9FdmFzKiBlZSA9IGVjb3JlX2V2YXNfZWNvcmVfZXZhc19nZXQo
ZXZhc19vYmplY3RfZXZhc19nZXQobV92aWV3KSk7Ci0gICAgZWNvcmVfZXZhc19tb3ZlX3Jlc2l6
ZShlZSwgZnJhbWUub3JpZ2luLngsIGZyYW1lLm9yaWdpbi55LCBmcmFtZS5zaXplLndpZHRoLCBm
cmFtZS5zaXplLmhlaWdodCk7CisgICAgZWNvcmVfZXZhc19tb3ZlX3Jlc2l6ZShtX3dpbmRvdywg
ZnJhbWUub3JpZ2luLngsIGZyYW1lLm9yaWdpbi55LCBmcmFtZS5zaXplLndpZHRoLCBmcmFtZS5z
aXplLmhlaWdodCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjphZGRDaHJvbWVJbnB1dEZp
ZWxkKCkKQEAgLTEyNywxNSArMTMyLDEyIEBAIHZvaWQgUGxhdGZvcm1XZWJWaWV3OjptYWtlV2Vi
Vmlld0ZpcnN0UmVzcG9uZGVyKCkKIAogV0tSZXRhaW5QdHI8V0tJbWFnZVJlZj4gUGxhdGZvcm1X
ZWJWaWV3Ojp3aW5kb3dTbmFwc2hvdEltYWdlKCkKIHsKLSAgICBFY29yZV9FdmFzKiBlZSA9IGVj
b3JlX2V2YXNfZWNvcmVfZXZhc19nZXQoZXZhc19vYmplY3RfZXZhc19nZXQobV92aWV3KSk7Ci0g
ICAgQVNTRVJUKGVlKTsKLQogICAgIGludCB3aWR0aDsKICAgICBpbnQgaGVpZ2h0OwotICAgIGVj
b3JlX2V2YXNfZ2VvbWV0cnlfZ2V0KGVlLCAwLCAwLCAmd2lkdGgsICZoZWlnaHQpOworICAgIGVj
b3JlX2V2YXNfZ2VvbWV0cnlfZ2V0KG1fd2luZG93LCAwLCAwLCAmd2lkdGgsICZoZWlnaHQpOwog
ICAgIEFTU0VSVCh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCk7CiAKLSAgICByZXR1cm4gYWRvcHRX
SyhXS1ZpZXdDcmVhdGVTbmFwc2hvdCh0b0FQSShtX3ZpZXcpKSk7CisgICAgcmV0dXJuIGFkb3B0
V0soV0tWaWV3Q3JlYXRlU25hcHNob3QobV92aWV3KSk7CiB9CiAKIGJvb2wgUGxhdGZvcm1XZWJW
aWV3Ojp2aWV3U3VwcG9ydHNPcHRpb25zKFdLRGljdGlvbmFyeVJlZiBvcHRpb25zKSBjb25zdAot
LSAKMS43LjEwLjQKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186488</attachid>
            <date>2013-02-04 16:05:28 -0800</date>
            <delta_ts>2013-02-04 17:21:45 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-107931-20130205010150.patch</filename>
            <type>text/plain</type>
            <size>39217</size>
            <attacher name="Kenneth Rohde Christiansen">kenneth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxODI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggM2RjYTVhYjE3N2Y4Yjcw
ODM0NjQwYTIwZmVlZTcyOGQ1Njc5NGE2Yi4uZjNkYzE3MjY0MGE0ZTEzYjlhMWQ3YTM0ZTBlZWFl
Y2M4YWI3ZDY3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDExMiBAQAogMjAxMy0wMi0wNCAgS2Vu
bmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4gIDxrZW5uZXRoQHdlYmtpdC5vcmc+CiAKKyAgICAgICAg
W0VGTF1bV0syXSBJbnRyb2R1Y2UgYSBXZWJWaWV3IGNsYXNzIGFzIGNvdW50ZXJwYXJ0IGZvciBX
S1ZpZXdSZWYKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwNzkzMQorCisgICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KKworICAgICAg
ICBUaGlzIGlzIGp1c3Qgb25lIHN0ZXAgb2YgdGhlIG5ldyBwbGFuIGZvciB0aGUgRUZMIEFQSS4K
KworICAgICAgICBUaGUgcGxhbiBpcyB0byBtb3ZlIHRoZSBwdWJsaWMgRUZMLWxpa2UgQVBJIG9u
IHRvcCBvZiB0aGUgc2hhcmVkCisgICAgICAgIFdLMiBDIEFQSSwgcGx1cyBhIGZldyBFRkwgZXh0
ZW5zaW9ucyAoV0tWaWV3IGNsYXNzIG1vc3RseSkuCisKKyAgICAgICAgVGhlIEVGTC1saWtlIEFQ
SSBjYW4gYmUgc2VlbiBhcyBhIGNvbnZlbmllbmNlIEFQSSB3aGljaCB0aWVzCisgICAgICAgIHdl
bGwgaW50byBFRkwgYW5kIHdoaWNoIG1ha2VzIGl0IGVhc3kgdG8gYWRkIHdlYiBleHBlcmllbmNl
cworICAgICAgICB0byBleGlzdGluZyBhbmQgbmV3IEVGTCBhcHBsaWNhdGlvbnMuIEl0IHByb3Zp
ZGVzIGEgc21hcnQgb2JqZWN0CisgICAgICAgIGxpa2UgQVBJIGFuZCBhIEV2YXNfT2JqZWN0IGJh
c2VkIHZpZXcuCisKKyAgICAgICAgRm9yIG1vcmUgYWR2YW5jZWQgdXNlIGNhc2VzLCBzdWNoIGFz
IGJyb3dzZXIgYW5kIHJ1bnRpbWUsIGl0IGlzCisgICAgICAgIHBvc3NpYmxlIHRvIHVzZSB0aGUg
V0sqIEMgQVBJLCB3aGljaCBpcyBnaXZlcyBtb3JlIGZsZXhpYmlsaXR5CisgICAgICAgIHdoaWxl
IGJlaW5nIG1vcmUgbG93IGxldmVsLgorCisgICAgICAgIFRoZSBpZGVhIGlzIHRoYXQgdGhlIFdL
VmlldyBjbGFzcyB3aWxsIG5vdCBkZXBlbmQgb24gRXZhc19PYmplY3QKKyAgICAgICAgYW5kIFgx
MSAoZnV0dXJlIHBsYW4pIHVubGlrZSB0aGUgY3VycmVudCBFRkwtbGlrZSBBUEkuIFRoaXMgc2hv
dWxkCisgICAgICAgIG1ha2UgaXQgcG9zc2libGUgdG8gdXNlIGl0IGZvciBjYXNlcyB3aGVyZSBu
b25lIG9mIHRoZXNlIGFyZQorICAgICAgICBhdmFpbGFibGUuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBpbnRyb2R1Y2VzIHRoZSBXZWJWaWV3IGNsYXNzIHdoaWNoIHNlcnZlcyBhcyBvdXIKKyAgICAg
ICAgY291bnRlcnBhcnQgZm9yIHRoZSBXS1ZpZXcgY2xhc3MsIGFuZCBhZGRzIGEgZmV3IG5lZWRl
ZCBtZXRob2RzLgorCisgICAgICAgIFRoZSBFd2tWaWV3IG93bnMgdGhlIFdlYlZpZXcgY2xhc3Mg
KGFuZCB3aWxsIGJlIGNvbnN0cnVjdGluZyBpdAorICAgICAgICBpbiB0aGUgbmVhciBmdXR1cmUg
d2hlbiB0aGUgRXdrVmlldyBjbGFzcyBoYXMgYmVlbiBjaGFuZ2VkIHRvCisgICAgICAgIGhhbmRs
ZSBhbGwgc21hcnQgb2JqZWN0IHJlbGF0ZWQgY29kZSkKKworICAgICAgICBUaGUgY2xlYW4gdXAg
b2YgdGhlIHNtYXJ0IG9iamVjdCByZWxhdGVkIGNvZGUgYXMgdGhlIHByb3BlcgorICAgICAgICBj
b25zdHJ1Y3Rpb24gb2YgRXdrVmlldyBhbmQgV2ViVmlldyB3aWxsIGJlIGRvbmUgaW4gZm9sbG93
LXVwCisgICAgICAgIHBhdGNoZXMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvZWZsL1dL
QVBJQ2FzdEVmbC5oOgorICAgICAgICAoV2ViS2l0KToKKworICAgICAgICAgICAgVGhlIFdLVmll
dyBBUEkgaXMgbm90IGJhc2VkIG9uIFdlYlZpZXcgYW5kIG5vdCBFdmFzX09iamVjdCoKKworICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3LmNwcDoKKyAgICAgICAgKFdLVmlld0Ny
ZWF0ZSk6CisgICAgICAgIChXS1ZpZXdDcmVhdGVXaXRoRml4ZWRMYXlvdXQpOgorICAgICAgICAo
V0tWaWV3SW5pdGlhbGl6ZSk6CisgICAgICAgIChXS1ZpZXdHZXRQYWdlKToKKyAgICAgICAgKFdL
Vmlld1NldFRoZW1lUGF0aCk6CisgICAgICAgIChXS1ZpZXdTdXNwZW5kQWN0aXZlRE9NT2JqZWN0
c0FuZEFuaW1hdGlvbnMpOgorICAgICAgICAoV0tWaWV3UmVzdW1lQWN0aXZlRE9NT2JqZWN0c0Fu
ZEFuaW1hdGlvbnMpOgorICAgICAgICAoV0tWaWV3R2V0RXZhc09iamVjdCk6CisgICAgICAgIChX
S1ZpZXdDcmVhdGVTbmFwc2hvdCk6CisKKyAgICAgICAgICAgIEFkZCBhIGZldyBuZXcgV0tWaWV3
IEVGTCBDIG1ldGhvZHMsIGFuZCB1cGRhdGUgZXhpc3RpbmcKKyAgICAgICAgICAgIG1ldGhvZHMg
dG8gcmVmbGVjdCB0aGF0IHRoZSBXS1ZpZXdSZWYgaXMgbm93IGEgV2ViVmlldyoKKworICAgICAg
ICAgICAgVGhlIGNvbnN0cnVjdGlvbiBtZXRob2RzIHdpbGwgYmUgcmV3cml0dGVuIHdoZW4gdGhl
IHNtYXJ0CisgICAgICAgICAgICBvYmplY3QgY29uc3RydWN0aW9uIGhhcyBiZWVuIHNvbHZlZC4K
KworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9lZmwvV0tWaWV3Lmg6CisgICAgICAgICogVUlQ
cm9jZXNzL2VmbC9XZWJWaWV3LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3OjpXZWJWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6
fldlYlZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojppbml0aWFsaXplKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlldzo6c2V0VGhlbWVQYXRoKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlldzo6c3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVmlldzo6cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9lZmwvV2ViVmlldy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6
CisgICAgICAgIChXZWJWaWV3KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6cGFnZVJlZik6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmV2YXNPYmplY3QpOgorICAgICAgICAoV2ViS2l0
OjpXZWJWaWV3OjpwYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6dHlwZSk6CisKKyAg
ICAgICAgICAgIEFkZCBhIG5ldyBXZWJLaXQ6OldlYlZpZXcgY2xhc3MgZm9yIEVGTC4KKworICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwOgorICAgICAgICAoRXdrVmlldzo6
RXdrVmlldyk6CisgICAgICAgIChFd2tWaWV3Ojp+RXdrVmlldyk6CisgICAgICAgIChFd2tWaWV3
Ojp3a1BhZ2UpOgorICAgICAgICAoRXdrVmlldzo6c2V0VGhlbWVQYXRoKToKKyAgICAgICAgKEV3
a1ZpZXc6OmNyZWF0ZUdMU3VyZmFjZSk6CisKKyAgICAgICAgICAgIEJhc2UgbWV0aG9kcyBvbiBD
IEFQSSBpbnN0ZWFkIG9mIGludGVybmFsIEFQSSBhcyBtdWNoCisgICAgICAgICAgICBhcyBjdXJy
ZW50bHkgcG9zc2libGUuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3Lmg6
CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViVmlldyk6CisgICAgICAgIChFd2tWaWV3
KToKKyAgICAgICAgKEV3a1ZpZXc6OndrVmlldyk6CisgICAgICAgIChFd2tWaWV3OjpwYWdlKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHA6CisgICAgICAgIChjcmVh
dGVFd2tWaWV3KToKKyAgICAgICAgKGV3a192aWV3X2Jhc2VfYWRkKToKKyAgICAgICAgKGV3a192
aWV3X3NtYXJ0X2FkZCk6CisKKyAgICAgICAgICAgIE1vZGlmeSB0byByZXR1cm4gdGhlIEV3a1Zp
ZXcgY2xhc3MgZm9yIG5vdy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3
X3ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1dlYkluc3BlY3RvclByb3h5RWZs
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQ3JlYXRl
SW5zcGVjdG9yUGFnZSk6CisKKyAgICAgICAgICAgIFVwZGF0ZWQgZHVlIHRvIGNoYW5nZWQgQVBJ
LgorCisyMDEzLTAyLTA0ICBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtlbm5ldGhAd2Vi
a2l0Lm9yZz4KKwogICAgICAgICBbRUZMXVtXSzJdIFVzZSBDIEFQSSBpbnNpZGUgRXdrVmlldwog
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4ODI1CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dl
YktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggYjg3ZTk3OWM1MTc2NDU1YTFkMzE0OGFjODZk
ZWM1Y2U4YjE5Yjc3ZS4uZjZjZTE3NmZkM2E0M2ZlZGQ1ZDM0YTc2ZTlkNjViYTgxMGI3MTMzZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNl
L1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTEwNyw2ICsxMDcsNyBAQCBsaXN0KEFQUEVO
RCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvZWZsL1dlYlBvcHVwTWVudVByb3h5RWZs
LmNwcAogICAgIFVJUHJvY2Vzcy9lZmwvV2ViUHJlZmVyZW5jZXNFZmwuY3BwCiAgICAgVUlQcm9j
ZXNzL2VmbC9XZWJQcm9jZXNzUHJveHlFZmwuY3BwCisgICAgVUlQcm9jZXNzL2VmbC9XZWJWaWV3
LmNwcAogCiAgICAgVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9lZmwvV2ViSW5zcGVjdG9yU2Vy
dmVyRWZsLmNwcAogICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvc291cC9XZWJTb2NrZXRT
ZXJ2ZXJTb3VwLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
L2VmbC9XS0FQSUNhc3RFZmwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9lZmwv
V0tBUElDYXN0RWZsLmgKaW5kZXggYjAxM2EwYTYwZGZmMDMyOGNmMmY5ZTViMTE2MTg2MDIzNWU3
NmYwYS4uMTg4OWZjNDM2NzU1ZjkxYTgyZjNhMzAzZmFlNWJhNTNkN2Y2MmRlNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS0FQSUNhc3RFZmwuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLQVBJQ2FzdEVmbC5oCkBAIC0y
NCwxNSArMjQsMTEgQEAKICNlcnJvciAiUGxlYXNlICNpbmNsdWRlIFwiV0tBUElDYXN0LmhcIiBp
bnN0ZWFkIG9mIHRoaXMgZmlsZSBkaXJlY3RseS4iCiAjZW5kaWYKIAotI2lmIFVTRShFTykKLXR5
cGVkZWYgc3RydWN0IF9FbyBFdmFzX09iamVjdDsKLSNlbHNlCi10eXBlZGVmIHN0cnVjdCBfRXZh
c19PYmplY3QgRXZhc19PYmplY3Q7Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVdL
X0FERF9BUElfTUFQUElORyhXS1ZpZXdSZWYsIEV2YXNfT2JqZWN0KQorY2xhc3MgV2ViVmlldzsK
KworV0tfQUREX0FQSV9NQVBQSU5HKFdLVmlld1JlZiwgV2ViVmlldykKIAogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5jcHAKaW5kZXggMzJiOWQ4ZjYz
NzM1YmJmZmUyNmVmNjkwOTExYTAwMWM2MjZiMGYxMC4uOWMxZDMxZDRiYTNkODZiOGY3ZjY4MDc3
NWU2MjNjZDA5YTNiMzNhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9DL2VmbC9XS1ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9l
ZmwvV0tWaWV3LmNwcApAQCAtMjksMjQgKzI5LDU0IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7
CiAKIFdLVmlld1JlZiBXS1ZpZXdDcmVhdGUoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29u
dGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmKQogewotICAgIHJldHVybiB0b0FQ
SShld2tfdmlld19iYXNlX2FkZChjYW52YXMsIGNvbnRleHRSZWYsIHBhZ2VHcm91cFJlZiwgRXdr
Vmlldzo6TGVnYWN5QmVoYXZpb3IpKTsKKyAgICBFd2tWaWV3KiBld2tWaWV3ID0gZXdrX3ZpZXdf
YmFzZV9hZGQoY2FudmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYsIEV3a1ZpZXc6OkxlZ2Fj
eUJlaGF2aW9yKTsKKyAgICBpZiAoIWV3a1ZpZXcpCisgICAgICAgIHJldHVybiAwOworCisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFdLVmlld1JlZj4oV0tSZXRhaW4oZXdrVmlldy0+d2tWaWV3KCkp
KTsKIH0KIAogV0tWaWV3UmVmIFdLVmlld0NyZWF0ZVdpdGhGaXhlZExheW91dChFdmFzKiBjYW52
YXMsIFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYp
CiB7Ci0gICAgcmV0dXJuIHRvQVBJKGV3a192aWV3X2Jhc2VfYWRkKGNhbnZhcywgY29udGV4dFJl
ZiwgcGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpEZWZhdWx0QmVoYXZpb3IpKTsKKyAgICBFd2tWaWV3
KiBld2tWaWV3ID0gZXdrX3ZpZXdfYmFzZV9hZGQoY2FudmFzLCBjb250ZXh0UmVmLCBwYWdlR3Jv
dXBSZWYsIEV3a1ZpZXc6OkRlZmF1bHRCZWhhdmlvcik7CisgICAgaWYgKCFld2tWaWV3KQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxXS1ZpZXdSZWY+KFdLUmV0
YWluKGV3a1ZpZXctPndrVmlldygpKSk7Cit9CisKK3ZvaWQgV0tWaWV3SW5pdGlhbGl6ZShXS1Zp
ZXdSZWYgdmlld1JlZikKK3sKKyAgICB0b0ltcGwodmlld1JlZiktPmluaXRpYWxpemUoKTsKIH0K
IAogV0tQYWdlUmVmIFdLVmlld0dldFBhZ2UoV0tWaWV3UmVmIHZpZXdSZWYpCiB7Ci0gICAgRXdr
VmlldyogdmlldyA9IEV3a1ZpZXc6OmZyb21FdmFzT2JqZWN0KHRvSW1wbCh2aWV3UmVmKSk7Cisg
ICAgcmV0dXJuIHRvSW1wbCh2aWV3UmVmKS0+cGFnZVJlZigpOworfQogCi0gICAgcmV0dXJuIHZp
ZXctPndrUGFnZSgpOwordm9pZCBXS1ZpZXdTZXRUaGVtZVBhdGgoV0tWaWV3UmVmIHZpZXdSZWYs
IFdLU3RyaW5nUmVmIHRoZW1lKQoreworICAgIHRvSW1wbCh2aWV3UmVmKS0+c2V0VGhlbWVQYXRo
KHRoZW1lKTsKIH0KIAotV0tJbWFnZVJlZiBXS1ZpZXdDcmVhdGVTbmFwc2hvdChXS1ZpZXdSZWYg
dmlld1JlZikKK3ZvaWQgV0tWaWV3U3VzcGVuZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25z
KFdLVmlld1JlZiB2aWV3UmVmKQogewotICAgIEV3a1ZpZXcqIHZpZXcgPSBFd2tWaWV3Ojpmcm9t
RXZhc09iamVjdCh0b0ltcGwodmlld1JlZikpOworICAgIHRvSW1wbCh2aWV3UmVmKS0+c3VzcGVu
ZEFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7Cit9CiAKLSAgICByZXR1cm4gV0tJbWFn
ZUNyZWF0ZUZyb21DYWlyb1N1cmZhY2Uodmlldy0+dGFrZVNuYXBzaG90KCkuZ2V0KCksIDAgLyog
b3B0aW9ucyAqLyk7Cit2b2lkIFdLVmlld1Jlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRp
b25zKFdLVmlld1JlZiB2aWV3UmVmKQoreworICAgIHRvSW1wbCh2aWV3UmVmKS0+cmVzdW1lQWN0
aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKK30KKworRXZhc19PYmplY3QqIFdLVmlld0dl
dEV2YXNPYmplY3QoV0tWaWV3UmVmIHZpZXdSZWYpCit7CisgICAgcmV0dXJuIHRvSW1wbCh2aWV3
UmVmKS0+ZXZhc09iamVjdCgpOworfQorCitXS0ltYWdlUmVmIFdLVmlld0NyZWF0ZVNuYXBzaG90
KFdLVmlld1JlZiB2aWV3UmVmKQoreworICAgIEV3a1ZpZXcqIGV3a1ZpZXcgPSBFd2tWaWV3Ojpm
cm9tRXZhc09iamVjdCh0b0ltcGwodmlld1JlZiktPmV2YXNPYmplY3QoKSk7CisgICAgcmV0dXJu
IFdLSW1hZ2VDcmVhdGVGcm9tQ2Fpcm9TdXJmYWNlKGV3a1ZpZXctPnRha2VTbmFwc2hvdCgpLmdl
dCgpLCAwIC8qIG9wdGlvbnMgKi8pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy9lZmwvV0tWaWV3LmgKaW5kZXggY2M3MzA3Y2Y0Y2I0OTI2MzZlOGE4MmNhYzFhM2FmMTA1Yzkx
OWZkZS4uZDViNDMyZDhlYTEzMTU0Mjg3ZmE4ZDRhODdjNDhiNDBiOGQyMmYxYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2VmbC9XS1ZpZXcuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZWZsL1dLVmlldy5oCkBAIC0yNCw4ICsyNCwxMCBA
QAogCiAjaWYgVVNFKEVPKQogdHlwZWRlZiBzdHJ1Y3QgX0VvIEV2YXM7Cit0eXBlZGVmIHN0cnVj
dCBfRW8gRXZhc19PYmplY3Q7CiAjZWxzZQogdHlwZWRlZiBzdHJ1Y3QgX0V2YXMgRXZhczsKK3R5
cGVkZWYgc3RydWN0IF9FdmFzX09iamVjdCBFdmFzX09iamVjdDsKICNlbmRpZgogCiAjaWZkZWYg
X19jcGx1c3BsdXMKQEAgLTM2LDkgKzM4LDE5IEBAIFdLX0VYUE9SVCBXS1ZpZXdSZWYgV0tWaWV3
Q3JlYXRlKEV2YXMqIGNhbnZhcywgV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLUGFnZUdyb3VwCiAK
IFdLX0VYUE9SVCBXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlV2l0aEZpeGVkTGF5b3V0KEV2YXMqIGNh
bnZhcywgV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCk7CiAK
LVdLX0VYUE9SVCBXS1BhZ2VSZWYgV0tWaWV3R2V0UGFnZShXS1ZpZXdSZWYgdmlldyk7CitXS19F
WFBPUlQgdm9pZCBXS1ZpZXdJbml0aWFsaXplKFdLVmlld1JlZik7CiAKLVdLX0VYUE9SVCBXS0lt
YWdlUmVmIFdLVmlld0NyZWF0ZVNuYXBzaG90KFdLVmlld1JlZiB2aWV3UmVmKTsKK1dLX0VYUE9S
VCBXS1BhZ2VSZWYgV0tWaWV3R2V0UGFnZShXS1ZpZXdSZWYpOworCitXS19FWFBPUlQgdm9pZCBX
S1ZpZXdTZXRUaGVtZVBhdGgoV0tWaWV3UmVmLCBXS1N0cmluZ1JlZik7CisKK1dLX0VYUE9SVCB2
b2lkIFdLVmlld1N1c3BlbmRBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucyhXS1ZpZXdSZWYp
OworV0tfRVhQT1JUIHZvaWQgV0tWaWV3UmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlv
bnMoV0tWaWV3UmVmKTsKKworLy8gRklYTUU6IFRoZSBsb25nIHRlcm0gcGxhbiBpcyB0byBnZXQg
cmlkIG9mIHRoaXMsIHNvIGtlZXAgdXNhZ2UgdG8gYSBiYXJlIG1pbmltdW0uCitXS19FWFBPUlQg
RXZhc19PYmplY3QqIFdLVmlld0dldEV2YXNPYmplY3QoV0tWaWV3UmVmKTsKKworV0tfRVhQT1JU
IFdLSW1hZ2VSZWYgV0tWaWV3Q3JlYXRlU25hcHNob3QoV0tWaWV3UmVmKTsKIAogI2lmZGVmIF9f
Y3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9Fd2tWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcu
Y3BwCmluZGV4IDljOWFjMjAzYWQ5YmNlYzRhMWMwYjgxMWU1MGE4ODlhMWM5NDk4ODcuLjA0NjY5
NGQ3NGY0ZjkwOTk0MjA4MjFkYzM4ZmQyODZhMzQyMTAwNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVk
ZSAiV0tOdW1iZXIuaCIKICNpbmNsdWRlICJXS1BhZ2VHcm91cC5oIgogI2luY2x1ZGUgIldLU3Ry
aW5nLmgiCisjaW5jbHVkZSAiV0tWaWV3LmgiCiAjaW5jbHVkZSAiV2ViQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIldlYkltYWdlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCkBAIC0xMTEsMTQg
KzExMiwxNCBAQCBjb25zdCBFdmFzX09iamVjdCogRXdrVmlldzo6dmlld0Zyb21QYWdlVmlld01h
cChjb25zdCBXS1BhZ2VSZWYgcGFnZSkKICAgICByZXR1cm4gcGFnZVZpZXdNYXAoKS5nZXQocGFn
ZSk7CiB9CiAKLUV3a1ZpZXc6OkV3a1ZpZXcoRXZhc19PYmplY3QqIGV2YXNPYmplY3QsIFBhc3NS
ZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgUGFzc1JlZlB0cjxXZWJQYWdlR3JvdXA+IHBhZ2VH
cm91cCwgVmlld0JlaGF2aW9yIGJlaGF2aW9yKQotICAgIDogbV9ldmFzT2JqZWN0KGV2YXNPYmpl
Y3QpCitFd2tWaWV3OjpFd2tWaWV3KEV2YXNfT2JqZWN0KiB2aWV3LCBQYXNzUmVmUHRyPEV3a0Nv
bnRleHQ+IGNvbnRleHQsIFdlYlBhZ2VHcm91cCogcGFnZUdyb3VwLCBWaWV3QmVoYXZpb3IgYmVo
YXZpb3IpCisgICAgOiBtX2V2YXNPYmplY3QodmlldykKICAgICAsIG1fY29udGV4dChjb250ZXh0
KQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICAsIG1fcGVuZGluZ1N1cmZh
Y2VSZXNpemUoZmFsc2UpCiAjZW5kaWYKICAgICAsIG1fcGFnZUNsaWVudChiZWhhdmlvciA9PSBE
ZWZhdWx0QmVoYXZpb3IgPyBQYWdlQ2xpZW50RGVmYXVsdEltcGw6OmNyZWF0ZSh0aGlzKSA6IFBh
Z2VDbGllbnRMZWdhY3lJbXBsOjpjcmVhdGUodGhpcykpCi0gICAgLCBtX3BhZ2VQcm94eSh0b0lt
cGwobV9jb250ZXh0LT53a0NvbnRleHQoKSktPmNyZWF0ZVdlYlBhZ2UobV9wYWdlQ2xpZW50Lmdl
dCgpLCBwYWdlR3JvdXAuZ2V0KCkpKQorICAgICwgbV93ZWJWaWV3KGFkb3B0UmVmKG5ldyBXZWJW
aWV3KHRvSW1wbChtX2NvbnRleHQtPndrQ29udGV4dCgpKSwgbV9wYWdlQ2xpZW50LmdldCgpLCBw
YWdlR3JvdXAsIHZpZXcpKSkKICAgICAsIG1fcGFnZUxvYWRDbGllbnQoUGFnZUxvYWRDbGllbnRF
Zmw6OmNyZWF0ZSh0aGlzKSkKICAgICAsIG1fcGFnZVBvbGljeUNsaWVudChQYWdlUG9saWN5Q2xp
ZW50RWZsOjpjcmVhdGUodGhpcykpCiAgICAgLCBtX3BhZ2VVSUNsaWVudChQYWdlVUlDbGllbnRF
Zmw6OmNyZWF0ZSh0aGlzKSkKQEAgLTEyOCw3ICsxMjksNyBAQCBFd2tWaWV3OjpFd2tWaWV3KEV2
YXNfT2JqZWN0KiBldmFzT2JqZWN0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFBh
c3NSZQogI2lmIEVOQUJMRShWSUJSQVRJT04pCiAgICAgLCBtX3ZpYnJhdGlvbkNsaWVudChWaWJy
YXRpb25DbGllbnRFZmw6OmNyZWF0ZSh0aGlzKSkKICNlbmRpZgotICAgICwgbV9iYWNrRm9yd2Fy
ZExpc3QoRXdrQmFja0ZvcndhcmRMaXN0OjpjcmVhdGUodG9BUEkobV9wYWdlUHJveHktPmJhY2tG
b3J3YXJkTGlzdCgpKSkpCisgICAgLCBtX2JhY2tGb3J3YXJkTGlzdChFd2tCYWNrRm9yd2FyZExp
c3Q6OmNyZWF0ZShXS1BhZ2VHZXRCYWNrRm9yd2FyZExpc3Qod2tQYWdlKCkpKSkKICNpZiBVU0Uo
VElMRURfQkFDS0lOR19TVE9SRSkKICAgICAsIG1fcGFnZVNjYWxlRmFjdG9yKDEpCiAjZW5kaWYK
QEAgLTE0NSw3ICsxNDYsOCBAQCBFd2tWaWV3OjpFd2tWaWV3KEV2YXNfT2JqZWN0KiBldmFzT2Jq
ZWN0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFBhc3NSZQogewogICAgIEFTU0VS
VChtX2V2YXNPYmplY3QpOwogICAgIEFTU0VSVChtX2NvbnRleHQpOwotICAgIEFTU0VSVChtX3Bh
Z2VQcm94eSk7CisKKyAgICBXS1ZpZXdJbml0aWFsaXplKHdrVmlldygpKTsKIAogICAgIFdLUGFn
ZVNldFVzZUZpeGVkTGF5b3V0KHdrUGFnZSgpLCBiZWhhdmlvciA9PSBEZWZhdWx0QmVoYXZpb3Ip
OwogCkBAIC0xNTcsMjEgKzE1OSw2IEBAIEV3a1ZpZXc6OkV3a1ZpZXcoRXZhc19PYmplY3QqIGV2
YXNPYmplY3QsIFBhc3NSZWZQdHI8RXdrQ29udGV4dD4gY29udGV4dCwgUGFzc1JlCiAgICAgV0tQ
cmVmZXJlbmNlc1NldFdlYkF1ZGlvRW5hYmxlZCh3a1ByZWZlcmVuY2VzLCB0cnVlKTsKICAgICBX
S1ByZWZlcmVuY2VzU2V0T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKHdrUHJlZmVy
ZW5jZXMsIHRydWUpOwogCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIG1fcGFn
ZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0QWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0VuYWJsZWQodHJ1ZSk7Ci0gICAgbV9wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJl
bmNlcygpLT5zZXRGb3JjZUNvbXBvc2l0aW5nTW9kZSh0cnVlKTsKLSAgICBjaGFyKiBkZWJ1Z1Zp
c3VhbHNFbnZpcm9ubWVudCA9IGdldGVudigiV0VCS0lUX1NIT1dfQ09NUE9TSVRJTkdfREVCVUdf
VklTVUFMUyIpOwotICAgIGJvb2wgc2hvd0RlYnVnVmlzdWFscyA9IGRlYnVnVmlzdWFsc0Vudmly
b25tZW50ICYmICFzdHJjbXAoZGVidWdWaXN1YWxzRW52aXJvbm1lbnQsICIxIik7Ci0gICAgbV9w
YWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRDb21wb3NpdGluZ0JvcmRl
cnNWaXNpYmxlKHNob3dEZWJ1Z1Zpc3VhbHMpOwotICAgIG1fcGFnZVByb3h5LT5wYWdlR3JvdXAo
KS0+cHJlZmVyZW5jZXMoKS0+c2V0Q29tcG9zaXRpbmdSZXBhaW50Q291bnRlcnNWaXNpYmxlKHNo
b3dEZWJ1Z1Zpc3VhbHMpOwotI2VuZGlmCi0KLSAgICBtX3BhZ2VQcm94eS0+aW5pdGlhbGl6ZVdl
YlBhZ2UoKTsKLQotI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICBtX3BhZ2VQcm94eS0+
ZnVsbFNjcmVlbk1hbmFnZXIoKS0+c2V0V2ViVmlldyhtX2V2YXNPYmplY3QpOwotI2VuZGlmCi0K
ICAgICAvLyBFbmFibGUgbW91c2UgZXZlbnRzIGJ5IGRlZmF1bHQKICAgICBzZXRNb3VzZUV2ZW50
c0VuYWJsZWQodHJ1ZSk7CiAKQEAgLTE4Niw4ICsxNzMsNiBAQCBFd2tWaWV3OjpFd2tWaWV3KEV2
YXNfT2JqZWN0KiBldmFzT2JqZWN0LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRleHQsIFBh
c3NSZQogCiBFd2tWaWV3Ojp+RXdrVmlldygpCiB7Ci0gICAgbV9wYWdlUHJveHktPmNsb3NlKCk7
Ci0KICAgICAvLyBVbnJlZ2lzdGVyIGljb24gY2hhbmdlIGNhbGxiYWNrLgogICAgIEV3a0Zhdmlj
b25EYXRhYmFzZSogaWNvbkRhdGFiYXNlID0gbV9jb250ZXh0LT5mYXZpY29uRGF0YWJhc2UoKTsK
ICAgICBBU1NFUlQoaWNvbkRhdGFiYXNlKTsKQEAgLTIxMyw3ICsxOTgsNyBAQCBFd2tWaWV3KiBF
d2tWaWV3Ojpmcm9tRXZhc09iamVjdChjb25zdCBFdmFzX09iamVjdCogdmlldykKIAogV0tQYWdl
UmVmIEV3a1ZpZXc6OndrUGFnZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRvQVBJKG1fcGFnZVBy
b3h5LmdldCgpKTsKKyAgICByZXR1cm4gV0tWaWV3R2V0UGFnZSh3a1ZpZXcoKSk7CiB9CiAKIHZv
aWQgRXdrVmlldzo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYgY3Vyc29yKQpAQCAtNTQ2LDcgKzUz
MSw4IEBAIHZvaWQgRXdrVmlldzo6c2V0VGhlbWVQYXRoKGNvbnN0IGNoYXIqIHRoZW1lKQogewog
ICAgIGlmIChtX3RoZW1lICE9IHRoZW1lKSB7CiAgICAgICAgIG1fdGhlbWUgPSB0aGVtZTsKLSAg
ICAgICAgbV9wYWdlUHJveHktPnNldFRoZW1lUGF0aCh0aGVtZSk7CisgICAgICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiB3a1RoZW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZyh0aGVtZSkpOworICAgICAgICBXS1ZpZXdTZXRUaGVtZVBhdGgod2tWaWV3KCksIHdr
VGhlbWUuZ2V0KCkpOwogICAgIH0KIH0KIApAQCAtNjQ2LDkgKzYzMiw2IEBAIGJvb2wgRXdrVmll
dzo6Y3JlYXRlR0xTdXJmYWNlKGNvbnN0IEludFNpemUmIHZpZXdTaXplKQogICAgICAgICBpZiAo
IW1fZXZhc0dMKSB7CiAgICAgICAgICAgICBXQVJOKCJGYWlsZWQgdG8gY3JlYXRlIEV2YXNfR0ws
IGZhbGxpbmcgYmFjayB0byBzb2Z0d2FyZSBtb2RlLiIpOwogICAgICAgICAgICAgbV9pc0hhcmR3
YXJlQWNjZWxlcmF0ZWQgPSBmYWxzZTsKLSNpZiBFTkFCTEUoV0VCR0wpCi0gICAgICAgICAgICBt
X3BhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldFdlYkdMRW5hYmxlZChm
YWxzZSk7Ci0jZW5kaWYKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAg
IH0KQEAgLTEwMjksNyArMTAxMiw3IEBAIHZvaWQgRXdrVmlldzo6b25GYXZpY29uQ2hhbmdlZChj
b25zdCBjaGFyKiBwYWdlVVJMLCB2b2lkKiBldmVudEluZm8pCiBQYXNzUmVmUHRyPGNhaXJvX3N1
cmZhY2VfdD4gRXdrVmlldzo6dGFrZVNuYXBzaG90KCkKIHsKICAgICAvLyBTdXNwZW5kIGFsbCBh
bmltYXRpb25zIGJlZm9yZSB0YWtpbmcgdGhlIHNuYXBzaG90LgotICAgIG1fcGFnZVByb3h5LT5z
dXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKKyAgICBXS1ZpZXdTdXNwZW5k
QWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMod2tWaWV3KCkpOwogCiAgICAgLy8gV2FpdCBm
b3IgdGhlIHBlbmRpbmcgcmVwYWludCBldmVudHMgdG8gYmUgcHJvY2Vzc2VkLgogICAgIHdoaWxl
IChtX2Rpc3BsYXlUaW1lci5pc0FjdGl2ZSgpKQpAQCAtMTA0MSw3ICsxMDI0LDcgQEAgUGFzc1Jl
ZlB0cjxjYWlyb19zdXJmYWNlX3Q+IEV3a1ZpZXc6OnRha2VTbmFwc2hvdCgpCiAjZW5kaWYKICAg
ICAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc25hcHNob3QgPSBjcmVhdGVTdXJmYWNlRm9y
SW1hZ2Uoc2QtPmltYWdlKTsKICAgICAgICAgLy8gUmVzdW1lIGFsbCBhbmltYXRpb25zLgotICAg
ICAgICBtX3BhZ2VQcm94eS0+cmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsK
KyAgICAgICAgV0tWaWV3UmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMod2tWaWV3
KCkpOwogCiAgICAgICAgIHJldHVybiBzbmFwc2hvdC5yZWxlYXNlKCk7CiAjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtMTA0OSw3ICsxMDMyLDcgQEAgUGFzc1JlZlB0cjxjYWly
b19zdXJmYWNlX3Q+IEV3a1ZpZXc6OnRha2VTbmFwc2hvdCgpCiAKICAgICBSZWZQdHI8Y2Fpcm9f
c3VyZmFjZV90PiBzbmFwc2hvdCA9IGdldEltYWdlU3VyZmFjZUZyb21GcmFtZUJ1ZmZlcigwLCAw
LCBzZC0+dmlldy53LCBzZC0+dmlldy5oKTsKICAgICAvLyBSZXN1bWUgYWxsIGFuaW1hdGlvbnMu
Ci0gICAgbV9wYWdlUHJveHktPnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7
CisgICAgV0tWaWV3UmVzdW1lQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMod2tWaWV3KCkp
OwogCiAgICAgcmV0dXJuIHNuYXBzaG90LnJlbGVhc2UoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oCmluZGV4IGUyMDI1MTAyOGIzYmM3ODkwOGY1
YTI0MWUzMDE3NDdmZTJkMDU3OWMuLjg3MTY1YmM4ODU2ODcxMzk0YjRjMGM0Y2NiOWEwMjc1NGY1
YTgyMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1Zp
ZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKQEAg
LTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJXS0VpbmFTaGFyZWRTdHJpbmcuaCIKICNpbmNsdWRl
ICJXS0dlb21ldHJ5LmgiCiAjaW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIKKyNpbmNsdWRlICJXZWJW
aWV3LmgiCiAjaW5jbHVkZSAiZXdrX3VybF9yZXF1ZXN0X3ByaXZhdGUuaCIKICNpbmNsdWRlIDxF
dmFzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFBvaW50Lmg+CkBAIC00OSw2ICs1MCwxMCBA
QAogI2luY2x1ZGUgIkV2YXNHTFN1cmZhY2UuaCIKICNlbmRpZgogCisjaW5jbHVkZSAiV2ViQ29u
dGV4dC5oIgorI2luY2x1ZGUgIldlYlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIldlYlByZWZlcmVu
Y2VzLmgiCisKIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgQ29udGV4dE1lbnVDbGllbnRFZmw7
CiBjbGFzcyBGaW5kQ2xpZW50RWZsOwpAQCAtMTAyLDE0ICsxMDcsMTYgQEAgcHVibGljOgogICAg
ICAgICBMZWdhY3lCZWhhdmlvciwKICAgICAgICAgRGVmYXVsdEJlaGF2aW9yCiAgICAgfTsKLSAg
ICBFd2tWaWV3KEV2YXNfT2JqZWN0KiB2aWV3LCBQYXNzUmVmUHRyPEV3a0NvbnRleHQ+IGNvbnRl
eHQsIFBhc3NSZWZQdHI8V2ViS2l0OjpXZWJQYWdlR3JvdXA+IHBhZ2VHcm91cCwgVmlld0JlaGF2
aW9yKTsKKyAgICBFd2tWaWV3KEV2YXNfT2JqZWN0KiB2aWV3LCBQYXNzUmVmUHRyPEV3a0NvbnRl
eHQ+IGNvbnRleHQsIFdlYktpdDo6V2ViUGFnZUdyb3VwKiBwYWdlR3JvdXAsIFZpZXdCZWhhdmlv
cik7CiAgICAgfkV3a1ZpZXcoKTsKIAogICAgIHN0YXRpYyBFd2tWaWV3KiBmcm9tRXZhc09iamVj
dChjb25zdCBFdmFzX09iamVjdCogdmlldyk7CiAgICAgRXZhc19PYmplY3QqIHZpZXcoKSB7IHJl
dHVybiBtX2V2YXNPYmplY3Q7IH0KIAorICAgIFdLVmlld1JlZiB3a1ZpZXcoKSBjb25zdCB7IHJl
dHVybiB0b0FQSShtX3dlYlZpZXcuZ2V0KCkpOyB9CiAgICAgV0tQYWdlUmVmIHdrUGFnZSgpIGNv
bnN0OwotICAgIFdlYktpdDo6V2ViUGFnZVByb3h5KiBwYWdlKCkgeyByZXR1cm4gbV9wYWdlUHJv
eHkuZ2V0KCk7IH0KKworICAgIFdlYktpdDo6V2ViUGFnZVByb3h5KiBwYWdlKCkgeyByZXR1cm4g
bV93ZWJWaWV3LT5wYWdlKCk7IH0KICAgICBFd2tDb250ZXh0KiBld2tDb250ZXh0KCkgeyByZXR1
cm4gbV9jb250ZXh0LmdldCgpOyB9CiAgICAgRXdrU2V0dGluZ3MqIHNldHRpbmdzKCkgeyByZXR1
cm4gbV9zZXR0aW5ncy5nZXQoKTsgfQogICAgIEV3a0JhY2tGb3J3YXJkTGlzdCogYmFja0Zvcndh
cmRMaXN0KCkgeyByZXR1cm4gbV9iYWNrRm9yd2FyZExpc3QuZ2V0KCk7IH0KQEAgLTI0NCw3ICsy
NTEsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9wZW5kaW5nU3VyZmFjZVJlc2l6ZTsKICNlbmRp
ZgogICAgIE93blB0cjxXZWJLaXQ6OlBhZ2VDbGllbnRCYXNlPiBtX3BhZ2VDbGllbnQ7Ci0gICAg
UmVmUHRyPFdlYktpdDo6V2ViUGFnZVByb3h5PiBtX3BhZ2VQcm94eTsKKyAgICBSZWZQdHI8V2Vi
S2l0OjpXZWJWaWV3PiBtX3dlYlZpZXc7CiAgICAgT3duUHRyPFdlYktpdDo6UGFnZUxvYWRDbGll
bnRFZmw+IG1fcGFnZUxvYWRDbGllbnQ7CiAgICAgT3duUHRyPFdlYktpdDo6UGFnZVBvbGljeUNs
aWVudEVmbD4gbV9wYWdlUG9saWN5Q2xpZW50OwogICAgIE93blB0cjxXZWJLaXQ6OlBhZ2VVSUNs
aWVudEVmbD4gbV9wYWdlVUlDbGllbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdmlldy5jcHAKaW5kZXggZjBjZjFkNjBiYzExYWE1OWNlOTYxMmYzYTA2YTljZWMz
Y2JkZmVjNC4uZDYxODFiOGIwNzc1NzYyYTNiZGNkZmUxMjY1MzUxMTgwMDQ0OTBiMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcApAQCAtNTA0LDcg
KzUwNCw3IEBAIHN0YXRpYyBpbmxpbmUgRXZhc19TbWFydCogY3JlYXRlRXdrVmlld1NtYXJ0Q2xh
c3Modm9pZCkKICAgICByZXR1cm4gc21hcnQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRXZhc19PYmpl
Y3QqIGNyZWF0ZUV3a1ZpZXcoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgUGFzc1Jl
ZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXBSZWYgPSAw
LCBFd2tWaWV3OjpWaWV3QmVoYXZpb3IgYmVoYXZpb3IgPSBFd2tWaWV3OjpEZWZhdWx0QmVoYXZp
b3IpCitzdGF0aWMgaW5saW5lIEV3a1ZpZXcqIGNyZWF0ZUV3a1ZpZXcoRXZhcyogY2FudmFzLCBF
dmFzX1NtYXJ0KiBzbWFydCwgUGFzc1JlZlB0cjxFd2tDb250ZXh0PiBjb250ZXh0LCBXS1BhZ2VH
cm91cFJlZiBwYWdlR3JvdXBSZWYgPSAwLCBFd2tWaWV3OjpWaWV3QmVoYXZpb3IgYmVoYXZpb3Ig
PSBFd2tWaWV3OjpEZWZhdWx0QmVoYXZpb3IpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKGNhbnZhcywgMCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHNtYXJ0LCAwKTsKQEAgLTUyNCwyMSArNTI0LDI1IEBAIHN0YXRpYyBpbmxpbmUgRXZhc19PYmpl
Y3QqIGNyZWF0ZUV3a1ZpZXcoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCwgUGFzc1Jl
CiAgICAgLy8gRGVmYXVsdCBXZWJQYWdlR3JvdXAgaXMgY3JlYXRlZCBpbiBXZWJDb250ZXh0IGNv
bnN0cnVjdG9yIGlmIHRoZSBwYWdlR3JvdXBSZWYgaXMgMCwKICAgICAvLyBzbyB3ZSBkbyBub3Qg
bmVlZCB0byBjcmVhdGUgaXQgaGVyZS4KICAgICBzbWFydERhdGEtPnByaXYgPSBuZXcgRXdrVmll
dyhld2tWaWV3LCBjb250ZXh0LCB0b0ltcGwocGFnZUdyb3VwUmVmKSwgYmVoYXZpb3IpOwotICAg
IHJldHVybiBld2tWaWV3OworICAgIHJldHVybiBzbWFydERhdGEtPnByaXY7CiB9CiAKIC8qKgog
ICogQGludGVybmFsCiAgKiBDb25zdHJ1Y3RzIGEgZXdrX3ZpZXcgRXZhc19PYmplY3Qgd2l0aCBX
S1R5cGUgcGFyYW1ldGVycy4KICAqLwotRXZhc19PYmplY3QqIGV3a192aWV3X2Jhc2VfYWRkKEV2
YXMqIGNhbnZhcywgV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmIHBhZ2VH
cm91cFJlZiwgRXdrVmlldzo6Vmlld0JlaGF2aW9yIGJlaGF2aW9yKQorRXdrVmlldyogZXdrX3Zp
ZXdfYmFzZV9hZGQoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdl
R3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpWaWV3QmVoYXZpb3IgYmVoYXZpb3IpCiB7
CiAgICAgcmV0dXJuIGNyZWF0ZUV3a1ZpZXcoY2FudmFzLCBjcmVhdGVFd2tWaWV3U21hcnRDbGFz
cygpLCBjb250ZXh0UmVmID8gRXdrQ29udGV4dDo6Y3JlYXRlKGNvbnRleHRSZWYpIDogRXdrQ29u
dGV4dDo6ZGVmYXVsdENvbnRleHQoKSwgcGFnZUdyb3VwUmVmLCBiZWhhdmlvcik7CiB9CiAKIEV2
YXNfT2JqZWN0KiBld2tfdmlld19zbWFydF9hZGQoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBz
bWFydCwgRXdrX0NvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUV3a1ZpZXco
Y2FudmFzLCBzbWFydCwgZXdrX29iamVjdF9jYXN0PEV3a0NvbnRleHQqPihjb250ZXh0KSk7Cisg
ICAgRXdrVmlldyogZXdrVmlldyA9IGNyZWF0ZUV3a1ZpZXcoY2FudmFzLCBzbWFydCwgZXdrX29i
amVjdF9jYXN0PEV3a0NvbnRleHQqPihjb250ZXh0KSk7CisgICAgaWYgKCFld2tWaWV3KQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBld2tWaWV3LT52aWV3KCk7CiB9CiAKIEV2YXNf
T2JqZWN0KiBld2tfdmlld19hZGRfd2l0aF9jb250ZXh0KEV2YXMqIGNhbnZhcywgRXdrX0NvbnRl
eHQqIGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfdmlld19wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfdmlld19wcml2YXRlLmgKaW5kZXggODNiNGM5NzNiMWEzNjRjYzc5NjhjOGYzNzkxYWVjZjZk
MjRjZWFhYi4uYzQ5MTJmZmQ3YjQxZTRlNTJhN2Y0YzZmYThkODBlYWQ0YjQxMDY1OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUu
aApAQCAtMjUsNiArMjUsNiBAQAogI2luY2x1ZGUgPEV2YXMuaD4KICNpbmNsdWRlIDxXZWJLaXQy
L1dLQmFzZS5oPgogCi1FdmFzX09iamVjdCogZXdrX3ZpZXdfYmFzZV9hZGQoRXZhcyogY2FudmFz
LCBXS0NvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpWaWV3QmVoYXZpb3IpOwor
RXdrVmlldyogZXdrX3ZpZXdfYmFzZV9hZGQoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYsIFdL
UGFnZUdyb3VwUmVmLCBFd2tWaWV3OjpWaWV3QmVoYXZpb3IpOwogCiAjZW5kaWYgLy8gZXdrX3Zp
ZXdfcHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dl
Ykluc3BlY3RvclByb3h5RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2Vi
SW5zcGVjdG9yUHJveHlFZmwuY3BwCmluZGV4IDQ2MmIyNmQzNTBlZWZlZDcwMzM4MjFlNTc3NGFh
Y2FjODU0Y2FhN2YuLjg1M2Q0N2U0NDJhZjMwZmZkOTkxMDc5ZTJjYmY1MzAwNjUwMDRmY2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJveHlF
ZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViSW5zcGVjdG9yUHJv
eHlFZmwuY3BwCkBAIC05OCwxNCArOTgsMTkgQEAgV2ViUGFnZVByb3h5KiBXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1DcmVhdGVJbnNwZWN0b3JQYWdlKCkKICAgICBpZiAoIW1faW5zcGVjdG9y
V2luZG93KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIG1faW5zcGVjdG9yVmlldyA9IGV3a192
aWV3X2Jhc2VfYWRkKGVjb3JlX2V2YXNfZ2V0KG1faW5zcGVjdG9yV2luZG93KSwgdG9BUEkocGFn
ZSgpLT5wcm9jZXNzKCktPmNvbnRleHQoKSksIHRvQVBJKGluc3BlY3RvclBhZ2VHcm91cCgpKSwg
RXdrVmlldzo6TGVnYWN5QmVoYXZpb3IpOwotICAgIEV3a1ZpZXcqIGluc3BlY3RvclZpZXdJbXBs
ID0gRXdrVmlldzo6ZnJvbUV2YXNPYmplY3QobV9pbnNwZWN0b3JWaWV3KTsKLSAgICBpbnNwZWN0
b3JWaWV3SW1wbC0+c2V0VGhlbWVQYXRoKFRFU1RfVEhFTUVfRElSICIvZGVmYXVsdC5lZGoiKTsK
KyAgICAvLyBGSVhNRTogUmVmYWN0b3IgdG8gdXNlIFdLVmlld1JlZi4KKyAgICBFd2tWaWV3KiBl
d2tWaWV3ID0gZXdrX3ZpZXdfYmFzZV9hZGQoZWNvcmVfZXZhc19nZXQobV9pbnNwZWN0b3JXaW5k
b3cpLCB0b0FQSShwYWdlKCktPnByb2Nlc3MoKS0+Y29udGV4dCgpKSwgdG9BUEkoaW5zcGVjdG9y
UGFnZUdyb3VwKCkpLCBFd2tWaWV3OjpMZWdhY3lCZWhhdmlvcik7CisgICAgaWYgKCFld2tWaWV3
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIG1faW5zcGVjdG9yVmlldyA9IGV3a1ZpZXctPnZp
ZXcoKTsKKworICAgIGV3a1ZpZXctPnNldFRoZW1lUGF0aChURVNUX1RIRU1FX0RJUiAiL2RlZmF1
bHQuZWRqIik7CiAKLSAgICBFd2tfU2V0dGluZ3MqIHNldHRpbmdzID0gaW5zcGVjdG9yVmlld0lt
cGwtPnNldHRpbmdzKCk7CisgICAgRXdrX1NldHRpbmdzKiBzZXR0aW5ncyA9IGV3a1ZpZXctPnNl
dHRpbmdzKCk7CiAgICAgZXdrX3NldHRpbmdzX2ZpbGVfYWNjZXNzX2Zyb21fZmlsZV91cmxzX2Fs
bG93ZWRfc2V0KHNldHRpbmdzLCB0cnVlKTsKIAotICAgIHJldHVybiBpbnNwZWN0b3JWaWV3SW1w
bC0+cGFnZSgpOworICAgIHJldHVybiBld2tWaWV3LT5wYWdlKCk7CiB9CiAKIHZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OnBsYXRmb3JtT3BlbigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZWZsL1dlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9X
ZWJWaWV3LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMWIxZmY2ZjFmYjUwOGE1M2E0NTRjNTU3ZTc2MjJiZWQ2
NDVmMjk5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9X
ZWJWaWV3LmNwcApAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIElu
dGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlZpZXcuaCIKKworI2lmIEVOQUJMRShGVUxMU0NSRUVO
X0FQSSkKKyNpbmNsdWRlICJXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5LmgiCisjZW5kaWYKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYlZpZXc6OldlYlZpZXcoV2ViQ29udGV4dCogY29udGV4
dCwgUGFnZUNsaWVudCogcGFnZUNsaWVudCwgV2ViUGFnZUdyb3VwKiBwYWdlR3JvdXAsIEV2YXNf
T2JqZWN0KiBldmFzT2JqZWN0KQorICAgIDogbV93ZWJQYWdlUHJveHkoY29udGV4dC0+Y3JlYXRl
V2ViUGFnZShwYWdlQ2xpZW50LCBwYWdlR3JvdXApKQorICAgICwgbV9ldmFzT2JqZWN0KGV2YXNP
YmplY3QpCit7CisgICAgbV93ZWJQYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygp
LT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCh0cnVlKTsKKyAgICBtX3dlYlBhZ2VQ
cm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldEZvcmNlQ29tcG9zaXRpbmdNb2Rl
KHRydWUpOworCisgICAgY2hhciogZGVidWdWaXN1YWxzRW52aXJvbm1lbnQgPSBnZXRlbnYoIldF
QktJVF9TSE9XX0NPTVBPU0lUSU5HX0RFQlVHX1ZJU1VBTFMiKTsKKyAgICBib29sIHNob3dEZWJ1
Z1Zpc3VhbHMgPSBkZWJ1Z1Zpc3VhbHNFbnZpcm9ubWVudCAmJiAhc3RyY21wKGRlYnVnVmlzdWFs
c0Vudmlyb25tZW50LCAiMSIpOworICAgIG1fd2ViUGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJl
ZmVyZW5jZXMoKS0+c2V0Q29tcG9zaXRpbmdCb3JkZXJzVmlzaWJsZShzaG93RGVidWdWaXN1YWxz
KTsKKyAgICBtX3dlYlBhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldENv
bXBvc2l0aW5nUmVwYWludENvdW50ZXJzVmlzaWJsZShzaG93RGVidWdWaXN1YWxzKTsKKworI2lm
IEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBtX3dlYlBhZ2VQcm94eS0+ZnVsbFNjcmVlbk1h
bmFnZXIoKS0+c2V0V2ViVmlldyhtX2V2YXNPYmplY3QpOworI2VuZGlmCit9CisKK1dlYlZpZXc6
On5XZWJWaWV3KCkKK3sKKyAgICBtX3dlYlBhZ2VQcm94eS0+Y2xvc2UoKTsKK30KKwordm9pZCBX
ZWJWaWV3Ojppbml0aWFsaXplKCkKK3sKKyAgICBtX3dlYlBhZ2VQcm94eS0+aW5pdGlhbGl6ZVdl
YlBhZ2UoKTsKK30KKwordm9pZCBXZWJWaWV3OjpzZXRUaGVtZVBhdGgoV0tTdHJpbmdSZWYgdGhl
bWUpCit7CisgICAgbV93ZWJQYWdlUHJveHktPnNldFRoZW1lUGF0aCh0b1dURlN0cmluZyh0aGVt
ZSkudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgV2ViVmlldzo6c3VzcGVuZEFjdGl2ZURPTU9i
amVjdHNBbmRBbmltYXRpb25zKCkKK3sKKyAgICBtX3dlYlBhZ2VQcm94eS0+c3VzcGVuZEFjdGl2
ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6cmVzdW1lQWN0
aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKQoreworICAgIG1fd2ViUGFnZVByb3h5LT5yZXN1
bWVBY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJWaWV3LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTFl
NzY2ZGZkMWYwMDZhNjM5Mzg0NjdkMzI3NTIwMDJjODE3YTg1NgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViVmlldy5oCkBAIC0wLDAgKzEsNjYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlZpZXdfaAorI2RlZmluZSBXZWJWaWV3X2gK
KworI2luY2x1ZGUgIkFQSU9iamVjdC5oIgorI2luY2x1ZGUgIlBhZ2VDbGllbnQuaCIKKyNpbmNs
dWRlICJXZWJDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAi
V2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXMuaCIKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2NsYXNzIFdlYlZpZXcgOiBwdWJsaWMgQVBJT2JqZWN0IHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgY29uc3QgVHlwZSBBUElUeXBlID0gVHlwZVZpZXc7CisKKyAgICBXZWJWaWV3
KFdlYkNvbnRleHQqLCBQYWdlQ2xpZW50KiwgV2ViUGFnZUdyb3VwKiwgRXZhc19PYmplY3QqKTsK
KyAgICB2aXJ0dWFsIH5XZWJWaWV3KCk7CisKKyAgICB2b2lkIGluaXRpYWxpemUoKTsKKworICAg
IFdLUGFnZVJlZiBwYWdlUmVmKCkgY29uc3QgeyByZXR1cm4gdG9BUEkobV93ZWJQYWdlUHJveHku
Z2V0KCkpOyB9CisKKyAgICB2b2lkIHNldFRoZW1lUGF0aChXS1N0cmluZ1JlZik7CisgICAgdm9p
ZCBzdXNwZW5kQWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKTsKKyAgICB2b2lkIHJlc3Vt
ZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCk7CisKKyAgICAvLyBGSVhNRTogUmVtb3Zl
IHdoZW4gcG9zc2libGUuCisgICAgRXZhc19PYmplY3QqIGV2YXNPYmplY3QoKSB7IHJldHVybiBt
X2V2YXNPYmplY3Q7IH0KKyAgICBXZWJQYWdlUHJveHkqIHBhZ2UoKSB7IHJldHVybiBtX3dlYlBh
Z2VQcm94eS5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29u
c3QgeyByZXR1cm4gQVBJVHlwZTsgfQorCisgICAgUmVmUHRyPFdlYlBhZ2VQcm94eT4gbV93ZWJQ
YWdlUHJveHk7CisgICAgRXZhc19PYmplY3QqIG1fZXZhc09iamVjdDsKK307CisKK30KKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXgg
MzliMzRiZjNkMDdhN2RjZGM0OTgxZWVkYmJjYmNlMDU1NmFhODNiMC4uM2NmNjI5ZWVkMGFlZjVm
M2IxOTFjZDZhZGIzM2UyY2MwYThhODAwNSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisr
KyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDEzLTAyLTA0ICBLZW5uZXRo
IFJvaGRlIENocmlzdGlhbnNlbiAgPGtlbm5ldGhAd2Via2l0Lm9yZz4KKworICAgICAgICBbRUZM
XVtXSzJdIEludHJvZHVjZSBhIFdlYlZpZXcgY2xhc3MgYXMgY291bnRlcnBhcnQgZm9yIFdLVmll
d1JlZgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3
OTMxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgorCisgICAgICAgIENo
YW5nZSBwbGF0Zm9ybVZpZXcgdG8gYmUgYSBXS1ZpZXcgYW5kIHVzZSBXS1ZpZXdHZXRFdmFzT2Jq
ZWN0CisgICAgICAgIGZvciB0aGUgcGxhY2VzIHdoZXJlIGFuIEV2YXNfT2JqZWN0IGlzIG5lZWRl
ZC4KKworICAgICAgICBJbnN0ZWFkIG9mIGV4dHJhY3RpbmcgdGhlIEVjb3JlX0V2YXMqIGZyb20g
dGhlIG1fdmlldyB3ZSB1c2UKKyAgICAgICAgdGhlIG1fd2luZG93IGluc3RlYWQsIHdoaWNoIGFj
dHVhbGx5IGhvbGRzIHRoZSBpdC4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvUGxhdGZvcm1X
ZWJWaWV3Lmg6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9lZmwvUGxhdGZvcm1XZWJWaWV3LmNw
cDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBsYXRmb3JtV2ViVmlldzo6UGxhdGZvcm1XZWJW
aWV3KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBsYXRmb3JtV2ViVmlldzo6flBsYXRmb3Jt
V2ViVmlldyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQbGF0Zm9ybVdlYlZpZXc6OnJlc2l6
ZVRvKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBsYXRmb3JtV2ViVmlldzo6cGFnZSk6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpQbGF0Zm9ybVdlYlZpZXc6OnNpbXVsYXRlU3BhY2ViYXJL
ZXlQcmVzcyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQbGF0Zm9ybVdlYlZpZXc6OnNpbXVs
YXRlTW91c2VNb3ZlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBsYXRmb3JtV2ViVmlldzo6
c2ltdWxhdGVSaWdodENsaWNrKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1BsYXRmb3Jt
V2ViVmlldy5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvZWZsL0V2ZW50U2VuZGVyUHJv
eHlFZmwuY3BwOgorICAgICAgICAoV1RSOjpFdmVudFNlbmRlclByb3h5OjpzZW5kVG91Y2hFdmVu
dCk6CisgICAgICAgIChXVFI6OkV2ZW50U2VuZGVyUHJveHk6OnNldFRvdWNoTW9kaWZpZXIpOgor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvZWZsL1BsYXRmb3JtV2ViVmlld0VmbC5jcHA6Cisg
ICAgICAgIChXVFI6OlBsYXRmb3JtV2ViVmlldzo6UGxhdGZvcm1XZWJWaWV3KToKKyAgICAgICAg
KFdUUjo6UGxhdGZvcm1XZWJWaWV3Ojp+UGxhdGZvcm1XZWJWaWV3KToKKyAgICAgICAgKFdUUjo6
UGxhdGZvcm1XZWJWaWV3OjpyZXNpemVUbyk6CisgICAgICAgIChXVFI6OlBsYXRmb3JtV2ViVmll
dzo6cGFnZSk6CisgICAgICAgIChXVFI6OlBsYXRmb3JtV2ViVmlldzo6Zm9jdXMpOgorICAgICAg
ICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6OndpbmRvd0ZyYW1lKToKKyAgICAgICAgKFdUUjo6UGxh
dGZvcm1XZWJWaWV3OjpzZXRXaW5kb3dGcmFtZSk6CisgICAgICAgIChXVFI6OlBsYXRmb3JtV2Vi
Vmlldzo6d2luZG93U25hcHNob3RJbWFnZSk6CisKIDIwMTMtMDItMDQgIEpvY2hlbiBFaXNpbmdl
ciAgPGpvY2hlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBSZW1vdmUgV2Vi
RXZlbnRTZW5kZXIgYW5kIFdlYkFjY2Vzc2liaWxpdHlDb250cm9sbGVyIGZyb20gcHVibGljIFRl
c3RSdW5uZXIgQVBJCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2Vi
Vmlldy5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdlYlZpZXcuaAppbmRleCA1YWQx
ZWVkMGUxZjFlMmIxMWQyYjlhY2MwNmUzOGQ0OThmMjNiNWRjLi5kY2FmNDQ4NDJkNmVmZTc5NGZh
NGI3YzFhMjg3YzBkMWE4NTQzMjNiIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Bs
YXRmb3JtV2ViVmlldy5oCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XZWJWaWV3
LmgKQEAgLTQ3LDEzICs0Nyw4IEBAIHR5cGVkZWYgSFdORCBQbGF0Zm9ybVdpbmRvdzsKIHR5cGVk
ZWYgV0tWaWV3UmVmIFBsYXRmb3JtV0tWaWV3OwogdHlwZWRlZiBHdGtXaWRnZXQgKlBsYXRmb3Jt
V2luZG93OwogI2VsaWYgUExBVEZPUk0oRUZMKQotI2lmIFVTRShFTykKLXR5cGVkZWYgc3RydWN0
IF9FbyBFdmFzX09iamVjdDsKLSNlbHNlCi10eXBlZGVmIHN0cnVjdCBfRXZhc19PYmplY3QgRXZh
c19PYmplY3Q7Ci0jZW5kaWYKIHR5cGVkZWYgc3RydWN0IF9FY29yZV9FdmFzIEVjb3JlX0V2YXM7
Ci10eXBlZGVmIEV2YXNfT2JqZWN0KiBQbGF0Zm9ybVdLVmlldzsKK3R5cGVkZWYgV0tWaWV3UmVm
IFBsYXRmb3JtV0tWaWV3OwogdHlwZWRlZiBFY29yZV9FdmFzKiBQbGF0Zm9ybVdpbmRvdzsKICNl
bmRpZgogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2VmbC9QbGF0Zm9ybVdlYlZp
ZXcuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwvUGxhdGZvcm1XZWJWaWV3LmNwcAppbmRl
eCBkNTQ0OWViNGQxOTM2MTdhYjBhNGNiYTZlZDY2MWVkZDNiMDUzODI0Li44YTAzNWYzZDRkMDYx
YmQ1NWFjN2YyNGNlYzI4OThlOTQwMThhYzVjIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL2VmbC9QbGF0Zm9ybVdlYlZpZXcuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZWZs
L1BsYXRmb3JtV2ViVmlldy5jcHAKQEAgLTY1LDMzICs2NSw0MSBAQCBQbGF0Zm9ybVdlYlZpZXc6
OlBsYXRmb3JtV2ViVmlldyhXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYg
cGFnZUdybwogewogICAgIG1fd2luZG93ID0gaW5pdEVjb3JlRXZhcygpOwogICAgIEV2YXMqIGV2
YXMgPSBlY29yZV9ldmFzX2dldChtX3dpbmRvdyk7Ci0gICAgbV92aWV3ID0gdG9JbXBsKFdLVmll
d0NyZWF0ZShldmFzLCBjb250ZXh0UmVmLCBwYWdlR3JvdXBSZWYpKTsKLSAgICBld2tfdmlld190
aGVtZV9zZXQobV92aWV3LCBUSEVNRV9ESVIiL2RlZmF1bHQuZWRqIik7Ci0gICAgZXZhc19vYmpl
Y3Rfc21hcnRfY2FsbGJhY2tfYWRkKG1fdmlldywgIndlYnByb2Nlc3MsY3Jhc2hlZCIsIG9uV2Vi
UHJvY2Vzc0NyYXNoZWQsIDApOworICAgIG1fdmlldyA9IFdLVmlld0NyZWF0ZShldmFzLCBjb250
ZXh0UmVmLCBwYWdlR3JvdXBSZWYpOworICAgIGV3a192aWV3X3RoZW1lX3NldChXS1ZpZXdHZXRF
dmFzT2JqZWN0KG1fdmlldyksIFRIRU1FX0RJUiIvZGVmYXVsdC5lZGoiKTsKKyAgICBldmFzX29i
amVjdF9zbWFydF9jYWxsYmFja19hZGQoV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCAid2Vi
cHJvY2VzcyxjcmFzaGVkIiwgb25XZWJQcm9jZXNzQ3Jhc2hlZCwgMCk7CiAgICAgcmVzaXplVG8o
NjAwLCA4MDApOwogfQogCiBQbGF0Zm9ybVdlYlZpZXc6On5QbGF0Zm9ybVdlYlZpZXcoKQogewot
ICAgIGV2YXNfb2JqZWN0X2RlbChtX3ZpZXcpOworICAgIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0
ID0gV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpOworCisgICAgLy8gUmVsZWFzZSBmaXJzdC4g
V2ViVmlldyBzaG91bGQgbm90IGxpdmUgbG9uZ2VyIHRoYW4gRXdrVmlldywgYXMgRXdrVmlldyBv
d25zIG9iamVjdHMgdGhhdCBwYWdlIHByb3h5IHJlZmVycyB0by4KKyAgICBXS1JlbGVhc2UobV92
aWV3KTsKKworICAgIC8vIEZJWE1FOiBUaGUgQyBXS1ZpZXcgQVBJIGN1cnJlbnRseSBjcmVhdGVz
IHRoZSBFdmFzX09iamVjdCwgc28gd2UgaGF2ZSB0byBkZXN0cnVjdCBpdAorICAgIC8vIChhbmQg
aXRzIGRlcGVuZGVuY2llcyBFd2tWaWV3IGFuZCBXZWJLaXQ6OldlYlZpZXcpIHRoaXMgd2F5LCB1
bnRpbCB0aGlzIGdldCBmaXhlZC4KKyAgICBldmFzX29iamVjdF9kZWwoZXZhc09iamVjdCk7CisK
ICAgICBlY29yZV9ldmFzX2ZyZWUobV93aW5kb3cpOwogICAgIGVjb3JlX2V2YXNfc2h1dGRvd24o
KTsKIH0KIAogdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnJlc2l6ZVRvKHVuc2lnbmVkIHdpZHRoLCB1
bnNpZ25lZCBoZWlnaHQpCiB7Ci0gICAgZXZhc19vYmplY3RfcmVzaXplKG1fdmlldywgd2lkdGgs
IGhlaWdodCk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKFdLVmlld0dldEV2YXNPYmplY3QobV92
aWV3KSwgd2lkdGgsIGhlaWdodCk7CiB9CiAKIFdLUGFnZVJlZiBQbGF0Zm9ybVdlYlZpZXc6OnBh
Z2UoKSBjb25zdAogewotICAgIHJldHVybiBXS1ZpZXdHZXRQYWdlKHRvQVBJKG1fdmlldykpOwor
ICAgIHJldHVybiBXS1ZpZXdHZXRQYWdlKG1fdmlldyk7CiB9CiAKIHZvaWQgUGxhdGZvcm1XZWJW
aWV3OjpzaW11bGF0ZVNwYWNlYmFyS2V5UHJlc3MoKQogewogICAgIEV2YXMqIGV2YXMgPSBlY29y
ZV9ldmFzX2dldChtX3dpbmRvdyk7Ci0gICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KG1fdmlldywg
dHJ1ZSk7CisgICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KFdLVmlld0dldEV2YXNPYmplY3QobV92
aWV3KSwgdHJ1ZSk7CiAgICAgZXZhc19ldmVudF9mZWVkX2tleV9kb3duKGV2YXMsICJzcGFjZSIs
ICJzcGFjZSIsICIgIiwgMCwgMCwgMCk7CiAgICAgZXZhc19ldmVudF9mZWVkX2tleV91cChldmFz
LCAic3BhY2UiLCAic3BhY2UiLCAiICIsIDAsIDEsIDApOwogfQpAQCAtOTksMTQgKzEwNywxNCBA
QCB2b2lkIFBsYXRmb3JtV2ViVmlldzo6c2ltdWxhdGVTcGFjZWJhcktleVByZXNzKCkKIHZvaWQg
UGxhdGZvcm1XZWJWaWV3OjpzaW11bGF0ZU1vdXNlTW92ZSh1bnNpZ25lZCB4LCB1bnNpZ25lZCB5
KQogewogICAgIEV2YXMqIGV2YXMgPSBlY29yZV9ldmFzX2dldChtX3dpbmRvdyk7Ci0gICAgZXZh
c19vYmplY3Rfc2hvdyhtX3ZpZXcpOworICAgIGV2YXNfb2JqZWN0X3Nob3coV0tWaWV3R2V0RXZh
c09iamVjdChtX3ZpZXcpKTsKICAgICBldmFzX2V2ZW50X2ZlZWRfbW91c2VfbW92ZShldmFzLCB4
LCB5LCAwLCAwKTsKIH0KIAogdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnNpbXVsYXRlUmlnaHRDbGlj
ayh1bnNpZ25lZCB4LCB1bnNpZ25lZCB5KQogewogICAgIEV2YXMqIGV2YXMgPSBlY29yZV9ldmFz
X2dldChtX3dpbmRvdyk7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhtX3ZpZXcpOworICAgIGV2YXNf
b2JqZWN0X3Nob3coV0tWaWV3R2V0RXZhc09iamVjdChtX3ZpZXcpKTsKICAgICBldmFzX2V2ZW50
X2ZlZWRfbW91c2VfbW92ZShldmFzLCB4LCB5LCAwLCAwKTsKICAgICBldmFzX2V2ZW50X2ZlZWRf
bW91c2VfZG93bihldmFzLCAzLCBFVkFTX0JVVFRPTl9OT05FLCAwLCAwKTsKICAgICBldmFzX2V2
ZW50X2ZlZWRfbW91c2VfdXAoZXZhcywgMywgRVZBU19CVVRUT05fTk9ORSwgMCwgMCk7CmRpZmYg
LS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaAppbmRleCA4ZjlkY2RiN2VlM2FhZjM4
Mjc2YjY2MDMwMDhiZDFkYmM4Nzg5M2M2Li41MWM0YmNjMjM1NjU1YzdjYmMxNWZiZDlhYmM4ZGFh
YzdkMWZmOTM0IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2Vi
Vmlldy5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgKQEAg
LTU0LDEzICs1NCw4IEBAIHR5cGVkZWYgc3RydWN0IF9HdGtXaWRnZXQgR3RrV2lkZ2V0OwogdHlw
ZWRlZiBXS1ZpZXdSZWYgUGxhdGZvcm1XS1ZpZXc7CiB0eXBlZGVmIEd0a1dpZGdldCogUGxhdGZv
cm1XaW5kb3c7CiAjZWxpZiBQTEFURk9STShFRkwpCi0jaWYgVVNFKEVPKQotdHlwZWRlZiBzdHJ1
Y3QgX0VvIEV2YXNfT2JqZWN0OwotI2Vsc2UKLXR5cGVkZWYgc3RydWN0IF9FdmFzX09iamVjdCBF
dmFzX09iamVjdDsKLSNlbmRpZgogdHlwZWRlZiBzdHJ1Y3QgX0Vjb3JlX0V2YXMgRWNvcmVfRXZh
czsKLXR5cGVkZWYgRXZhc19PYmplY3QqIFBsYXRmb3JtV0tWaWV3OwordHlwZWRlZiBXS1ZpZXdS
ZWYgUGxhdGZvcm1XS1ZpZXc7CiB0eXBlZGVmIEVjb3JlX0V2YXMqIFBsYXRmb3JtV2luZG93Owog
I2VuZGlmCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZsL0V2ZW50U2Vu
ZGVyUHJveHlFZmwuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvRXZlbnRTZW5kZXJQ
cm94eUVmbC5jcHAKaW5kZXggZjI4MjlhOTZjOTI4YTJmOTM5N2U1NmM5Yjc5NjVlZjA1MTA3MmU5
OS4uMTM5MjBlYzA2YjkwNWIyOGI1MDEwNjYzMTk2Y2IyNWI1MGUzODFhNSAxMDA2NDQKLS0tIGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvRXZlbnRTZW5kZXJQcm94eUVmbC5jcHAKKysrIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9lZmwvRXZlbnRTZW5kZXJQcm94eUVmbC5jcHAKQEAgLTQz
OCw3ICs0MzgsNyBAQCB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnNlbmRUb3VjaEV2ZW50KEV3a19U
b3VjaF9FdmVudF9UeXBlIGV2ZW50VHlwZSkKIHsKICAgICBBU1NFUlQobV90b3VjaFBvaW50cyk7
CiAKLSAgICBFdmFzX09iamVjdCogZXdrVmlldyA9IG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJW
aWV3KCktPnBsYXRmb3JtVmlldygpOworICAgIEV2YXNfT2JqZWN0KiBld2tWaWV3ID0gV0tWaWV3
R2V0RXZhc09iamVjdChtX3Rlc3RDb250cm9sbGVyLT5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZp
ZXcoKSk7CiAgICAgZXdrX3ZpZXdfZmVlZF90b3VjaF9ldmVudChld2tWaWV3LCBldmVudFR5cGUs
IG1fdG91Y2hQb2ludHMsIGV2YXNfa2V5X21vZGlmaWVyX2dldChldmFzX29iamVjdF9ldmFzX2dl
dChld2tWaWV3KSkpOwogCiAgICAgRWluYV9MaXN0KiBsaXN0OwpAQCAtNDkwLDEyICs0OTAsMTQg
QEAgdm9pZCBFdmVudFNlbmRlclByb3h5Ojp1cGRhdGVUb3VjaFBvaW50KGludCBpbmRleCwgaW50
IHgsIGludCB5KQogCiB2b2lkIEV2ZW50U2VuZGVyUHJveHk6OnNldFRvdWNoTW9kaWZpZXIoV0tF
dmVudE1vZGlmaWVycyBtb2RpZmllciwgYm9vbCBlbmFibGUpCiB7CisgICAgRXZhc19PYmplY3Qq
IGV3a1ZpZXcgPSBXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdGVzdENvbnRyb2xsZXItPm1haW5XZWJW
aWV3KCktPnBsYXRmb3JtVmlldygpKTsKKwogICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBp
bmRleCA8IChzaXplb2YobW9kaWZpZXJOYW1lcykgLyBzaXplb2YoY2hhciopKTsgKytpbmRleCkg
ewogICAgICAgICBpZiAobW9kaWZpZXIgJiAoMSA8PCBpbmRleCkpIHsKICAgICAgICAgICAgIGlm
IChlbmFibGUpCi0gICAgICAgICAgICAgICAgZXZhc19rZXlfbW9kaWZpZXJfb24oZXZhc19vYmpl
Y3RfZXZhc19nZXQobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3
KCkpLCBtb2RpZmllck5hbWVzW2luZGV4XSk7CisgICAgICAgICAgICAgICAgZXZhc19rZXlfbW9k
aWZpZXJfb24oZXZhc19vYmplY3RfZXZhc19nZXQoZXdrVmlldyksIG1vZGlmaWVyTmFtZXNbaW5k
ZXhdKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBldmFzX2tleV9tb2RpZmll
cl9vZmYoZXZhc19vYmplY3RfZXZhc19nZXQobV90ZXN0Q29udHJvbGxlci0+bWFpbldlYlZpZXco
KS0+cGxhdGZvcm1WaWV3KCkpLCBtb2RpZmllck5hbWVzW2luZGV4XSk7CisgICAgICAgICAgICAg
ICAgZXZhc19rZXlfbW9kaWZpZXJfb2ZmKGV2YXNfb2JqZWN0X2V2YXNfZ2V0KGV3a1ZpZXcpLCBt
b2RpZmllck5hbWVzW2luZGV4XSk7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL2VmbC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3BwIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9lZmwvUGxhdGZvcm1XZWJWaWV3RWZsLmNwcAppbmRleCAxY2NjMGJk
YWJlOWFhYjg3Y2VhZWJiODc4YTZiNDQzYTBlZjYxYzE1Li42OGIyNjk1OGNlZTlhMzY2YWM3OTdl
NDhhNmU1MzU4MzI4NDA2M2ZiIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2Vm
bC9QbGF0Zm9ybVdlYlZpZXdFZmwuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvZWZs
L1BsYXRmb3JtV2ViVmlld0VmbC5jcHAKQEAgLTYxLDU2ICs2MSw2MSBAQCBQbGF0Zm9ybVdlYlZp
ZXc6OlBsYXRmb3JtV2ViVmlldyhXS0NvbnRleHRSZWYgY29udGV4dCwgV0tQYWdlR3JvdXBSZWYg
cGFnZUdyb3VwLAogICAgIEV2YXMqIGV2YXMgPSBlY29yZV9ldmFzX2dldChtX3dpbmRvdyk7CiAK
ICAgICBpZiAobV91c2luZ0ZpeGVkTGF5b3V0KSB7Ci0gICAgICAgIG1fdmlldyA9IHRvSW1wbChX
S1ZpZXdDcmVhdGVXaXRoRml4ZWRMYXlvdXQoZXZhcywgY29udGV4dCwgcGFnZUdyb3VwKSk7Ci0g
ICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShtX3ZpZXcsIDgwMCwgNjAwKTsKKyAgICAgICAgbV92
aWV3ID0gV0tWaWV3Q3JlYXRlV2l0aEZpeGVkTGF5b3V0KGV2YXMsIGNvbnRleHQsIHBhZ2VHcm91
cCk7CisgICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmll
dyksIDgwMCwgNjAwKTsKICAgICB9IGVsc2UKLSAgICAgICAgbV92aWV3ID0gdG9JbXBsKFdLVmll
d0NyZWF0ZShldmFzLCBjb250ZXh0LCBwYWdlR3JvdXApKTsKKyAgICAgICAgbV92aWV3ID0gV0tW
aWV3Q3JlYXRlKGV2YXMsIGNvbnRleHQsIHBhZ2VHcm91cCk7CiAKLSAgICBld2tfdmlld190aGVt
ZV9zZXQobV92aWV3LCBUSEVNRV9ESVIiL2RlZmF1bHQuZWRqIik7CisgICAgZXdrX3ZpZXdfdGhl
bWVfc2V0KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSwgVEhFTUVfRElSIi9kZWZhdWx0LmVk
aiIpOwogICAgIG1fd2luZG93SXNLZXkgPSBmYWxzZTsKLSAgICBldmFzX29iamVjdF9zaG93KG1f
dmlldyk7CisgICAgZXZhc19vYmplY3Rfc2hvdyhXS1ZpZXdHZXRFdmFzT2JqZWN0KG1fdmlldykp
OwogfQogCiBQbGF0Zm9ybVdlYlZpZXc6On5QbGF0Zm9ybVdlYlZpZXcoKQogewotICAgIGV2YXNf
b2JqZWN0X2RlbChtX3ZpZXcpOworICAgIEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0ID0gV0tWaWV3
R2V0RXZhc09iamVjdChtX3ZpZXcpOworCisgICAgLy8gUmVsZWFzZSBmaXJzdC4gV2ViVmlldyBz
aG91bGQgbm90IGxpdmUgbG9uZ2VyIHRoYW4gRXdrVmlldywgYXMgRXdrVmlldyBvd25zIG9iamVj
dHMgdGhhdCBwYWdlIHByb3h5IHJlZmVycyB0by4KKyAgICBXS1JlbGVhc2UobV92aWV3KTsKKwor
ICAgIC8vIEZJWE1FOiBUaGUgQyBXS1ZpZXcgQVBJIGN1cnJlbnRseSBjcmVhdGVzIHRoZSBFdmFz
X09iamVjdCwgc28gd2UgaGF2ZSB0byBkZXN0cnVjdCBpdAorICAgIC8vIChhbmQgaXRzIGRlcGVu
ZGVuY2llcyBFd2tWaWV3IGFuZCBXZWJLaXQ6OldlYlZpZXcpIHRoaXMgd2F5LCB1bnRpbCB0aGlz
IGdldCBmaXhlZC4KKyAgICBldmFzX29iamVjdF9kZWwoZXZhc09iamVjdCk7CisKICAgICBlY29y
ZV9ldmFzX2ZyZWUobV93aW5kb3cpOwogfQogCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6cmVzaXpl
VG8odW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKIHsKLSAgICBldmFzX29iamVjdF9y
ZXNpemUobV92aWV3LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBldmFzX29iamVjdF9yZXNpemUoV0tW
aWV3R2V0RXZhc09iamVjdChtX3ZpZXcpLCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogV0tQYWdlUmVm
IFBsYXRmb3JtV2ViVmlldzo6cGFnZSgpCiB7Ci0gICAgcmV0dXJuIFdLVmlld0dldFBhZ2UodG9B
UEkobV92aWV3KSk7CisgICAgcmV0dXJuIFdLVmlld0dldFBhZ2UobV92aWV3KTsKIH0KIAogdm9p
ZCBQbGF0Zm9ybVdlYlZpZXc6OmZvY3VzKCkKIHsKKyAgICBFdmFzX09iamVjdCogZXZhc09iamVj
dCA9IFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KTsKICAgICAvLyBJbiBhIGZldyBjYXNlcywg
YW4gaWZyYW1lIG1pZ2h0IHJlY2VpdmUgZm9jdXMgZnJvbSBKYXZhU2NyaXB0IGFuZCBFdmFzIGlz
IG5vdCBhd2FyZSBvZiBpdCBhdCBhbGwKICAgICAvLyAoV2ViQ29yZVN1cHBvcnQ6OmZvY3VzZWRG
cmFtZUNoYW5nZWQoKSBkb2VzIG5vdCBlbWl0IGFueSBub3RpZmljYXRpb24pLiBXZSB0aGVuIG1h
bnVhbGx5IHJlbW92ZSB0aGUKICAgICAvLyBmb2N1cyBmcm9tIHRoZSB2aWV3IHRvIG1ha2UgdGhl
IGNhbGwgZ2l2ZSBmb2N1cyB0byBldmFzX29iamVjdF9mb2N1c19zZXQoLi4uLCB0cnVlKSB0byBi
ZSBlZmZlY3RmdWwuCi0gICAgaWYgKFdLUGFnZUdldEZvY3VzZWRGcmFtZShwYWdlKCkpICE9IFdL
UGFnZUdldE1haW5GcmFtZShwYWdlKCkpKQotICAgICAgICBldmFzX29iamVjdF9mb2N1c19zZXQo
bV92aWV3LCBmYWxzZSk7Ci0gICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KG1fdmlldywgdHJ1ZSk7
CisgICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KFdLVmlld0dldEV2YXNPYmplY3QobV92aWV3KSwg
V0tQYWdlR2V0Rm9jdXNlZEZyYW1lKHBhZ2UoKSkgPT0gV0tQYWdlR2V0TWFpbkZyYW1lKHBhZ2Uo
KSkpOwogfQogCiBXS1JlY3QgUGxhdGZvcm1XZWJWaWV3Ojp3aW5kb3dGcmFtZSgpCiB7CiAgICAg
aW50IHgsIHksIHdpZHRoLCBoZWlnaHQ7CiAKLSAgICBFY29yZV9FdmFzKiBlZSA9IGVjb3JlX2V2
YXNfZWNvcmVfZXZhc19nZXQoZXZhc19vYmplY3RfZXZhc19nZXQobV92aWV3KSk7Ci0gICAgZWNv
cmVfZXZhc19yZXF1ZXN0X2dlb21ldHJ5X2dldChlZSwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQp
OworICAgIGVjb3JlX2V2YXNfcmVxdWVzdF9nZW9tZXRyeV9nZXQobV93aW5kb3csICZ4LCAmeSwg
JndpZHRoLCAmaGVpZ2h0KTsKIAogICAgIHJldHVybiBXS1JlY3RNYWtlKHgsIHksIHdpZHRoLCBo
ZWlnaHQpOwogfQogCiB2b2lkIFBsYXRmb3JtV2ViVmlldzo6c2V0V2luZG93RnJhbWUoV0tSZWN0
IGZyYW1lKQogewotICAgIEVjb3JlX0V2YXMqIGVlID0gZWNvcmVfZXZhc19lY29yZV9ldmFzX2dl
dChldmFzX29iamVjdF9ldmFzX2dldChtX3ZpZXcpKTsKLSAgICBlY29yZV9ldmFzX21vdmVfcmVz
aXplKGVlLCBmcmFtZS5vcmlnaW4ueCwgZnJhbWUub3JpZ2luLnksIGZyYW1lLnNpemUud2lkdGgs
IGZyYW1lLnNpemUuaGVpZ2h0KTsKKyAgICBlY29yZV9ldmFzX21vdmVfcmVzaXplKG1fd2luZG93
LCBmcmFtZS5vcmlnaW4ueCwgZnJhbWUub3JpZ2luLnksIGZyYW1lLnNpemUud2lkdGgsIGZyYW1l
LnNpemUuaGVpZ2h0KTsKIH0KIAogdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OmFkZENocm9tZUlucHV0
RmllbGQoKQpAQCAtMTI3LDE1ICsxMzIsMTIgQEAgdm9pZCBQbGF0Zm9ybVdlYlZpZXc6Om1ha2VX
ZWJWaWV3Rmlyc3RSZXNwb25kZXIoKQogCiBXS1JldGFpblB0cjxXS0ltYWdlUmVmPiBQbGF0Zm9y
bVdlYlZpZXc6OndpbmRvd1NuYXBzaG90SW1hZ2UoKQogewotICAgIEVjb3JlX0V2YXMqIGVlID0g
ZWNvcmVfZXZhc19lY29yZV9ldmFzX2dldChldmFzX29iamVjdF9ldmFzX2dldChtX3ZpZXcpKTsK
LSAgICBBU1NFUlQoZWUpOwotCiAgICAgaW50IHdpZHRoOwogICAgIGludCBoZWlnaHQ7Ci0gICAg
ZWNvcmVfZXZhc19nZW9tZXRyeV9nZXQoZWUsIDAsIDAsICZ3aWR0aCwgJmhlaWdodCk7CisgICAg
ZWNvcmVfZXZhc19nZW9tZXRyeV9nZXQobV93aW5kb3csIDAsIDAsICZ3aWR0aCwgJmhlaWdodCk7
CiAgICAgQVNTRVJUKHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwKTsKIAotICAgIHJldHVybiBhZG9w
dFdLKFdLVmlld0NyZWF0ZVNuYXBzaG90KHRvQVBJKG1fdmlldykpKTsKKyAgICByZXR1cm4gYWRv
cHRXSyhXS1ZpZXdDcmVhdGVTbmFwc2hvdChtX3ZpZXcpKTsKIH0KIAogYm9vbCBQbGF0Zm9ybVdl
YlZpZXc6OnZpZXdTdXBwb3J0c09wdGlvbnMoV0tEaWN0aW9uYXJ5UmVmIG9wdGlvbnMpIGNvbnN0
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>