<?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>59845</bug_id>
          
          <creation_ts>2011-04-29 16:42:01 -0700</creation_ts>
          <short_desc>Implement FULLSCREEN_API on Windows, Part 3: WebKit2</short_desc>
          <delta_ts>2011-05-03 18:32:16 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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>59778</dependson>
          <blocked>59798</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jer Noble">jer.noble</reporter>
          <assigned_to name="Jer Noble">jer.noble</assigned_to>
          <cc>aroben</cc>
    
    <cc>jeffm</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>395618</commentid>
    <comment_count>0</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-04-29 16:42:01 -0700</bug_when>
    <thetext>Implement FULLSCREEN_API on Windows, Part 3: WebKit2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395636</commentid>
    <comment_count>1</comment_count>
      <attachid>91770</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-04-29 17:17:45 -0700</bug_when>
    <thetext>Created attachment 91770
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395646</commentid>
    <comment_count>2</comment_count>
      <attachid>91772</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-04-29 17:35:19 -0700</bug_when>
    <thetext>Created attachment 91772
Patch

Build fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395707</commentid>
    <comment_count>3</comment_count>
      <attachid>91772</attachid>
    <who name="Jeff Miller">jeffm</who>
    <bug_when>2011-04-29 18:44:26 -0700</bug_when>
    <thetext>Comment on attachment 91772
Patch

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

&gt; Source/WebKit2/ChangeLog:12
&gt; +        * UIProcess/FullScreen/win/WKFullScreenWindowController.cpp: Added.

Are you sure we don&apos;t reserve WK as a prefix for WebKit2 API classes?  If so, this should probably just be FullScreenWindowController.cpp (with similar name changes to the classes).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395710</commentid>
    <comment_count>4</comment_count>
      <attachid>91772</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-04-29 18:47:32 -0700</bug_when>
    <thetext>Comment on attachment 91772
Patch

Is there any way we can share more of this code with WebKit1? Maybe more of the code can live in WebCore?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396022</commentid>
    <comment_count>5</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-05-01 13:29:44 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 91772 [details])
&gt; Is there any way we can share more of this code with WebKit1? Maybe more of the code can live in WebCore?

I guess we could put a virtual class down in WebCore and let the WebKit and WK2 implementations fill in the missing pieces; alternatively, we could define a &quot;client&quot; protocol that WebKit and WK2 would have to provide to fill in those same pieces.  I&apos;ll look into it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396376</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-05-02 07:22:14 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; (From update of attachment 91772 [details] [details])
&gt; &gt; Is there any way we can share more of this code with WebKit1? Maybe more of the code can live in WebCore?
&gt; 
&gt; I guess we could put a virtual class down in WebCore and let the WebKit and WK2 implementations fill in the missing pieces; alternatively, we could define a &quot;client&quot; protocol that WebKit and WK2 would have to provide to fill in those same pieces.  I&apos;ll look into it.

A new client class sounds like it would fit best with our existing strategies for sharing code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396592</commentid>
    <comment_count>7</comment_count>
      <attachid>91966</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-05-02 13:28:45 -0700</bug_when>
    <thetext>Created attachment 91966
Patch

Moved WebFullScreenController into WebCore and made both WebKit and WebKit2 WebView classes use this new shared class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396614</commentid>
    <comment_count>8</comment_count>
      <attachid>91966</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-05-02 13:44:08 -0700</bug_when>
    <thetext>Comment on attachment 91966
Patch

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

I don&apos;t see WebFullScreenControllerClient defined anywhere, so I only reviewed part of the patch.

&gt; Source/WebCore/ChangeLog:11
&gt; +        behalf by WebKit and WebKit2.  MediaPlayerPrivateFullscreenWindow now only creates a 
&gt; +        CALayerHost once a root layer is set.

Why is this last part needed? (You should probably explain in the ChangeLog.)

&gt; Source/WebCore/WebCore.vcproj/WebCore.vcproj:27527
&gt; +						RelativePath=&quot;..\platform\graphics\win\WebFullScreenController.cpp&quot;

We don&apos;t normally use the &quot;Web&quot; prefix for WebCore classes. Can we rename this to FullScreenController in another patch?

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:107
&gt; +        m_layerTreeHost = 0;

Please use nullptr.

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:112
&gt; +    if (!m_layerTreeHost)
&gt; +        m_layerTreeHost = CACFLayerTreeHost::create();

Looks like we never call CACFLayerTreeHost::setWindow in the lazy-init case? How can rendering work if we don&apos;t do that?

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.h:61
&gt; +    void createWindow(HWND ownerWindow, bool startVisible = true);

Optional boolean arguments make me so sad! They&apos;re usually unreadable at the call site (&quot;what does true stand for?&quot;), and they&apos;re easy for callers to misuse (because so many types can be implicitly converted to bool). I&apos;d suggest making it a non-optional enum. Or maybe we should never start visible and have it be the caller&apos;s responsibility to call ShowWindow as needed.

&gt; Source/WebCore/platform/graphics/win/WebFullScreenController.cpp:57
&gt; +    virtual ~Private() { }

The compiler should do this for you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396629</commentid>
    <comment_count>9</comment_count>
      <attachid>91966</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-05-02 13:55:53 -0700</bug_when>
    <thetext>Comment on attachment 91966
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:11
&gt;&gt; +        CALayerHost once a root layer is set.
&gt; 
&gt; Why is this last part needed? (You should probably explain in the ChangeLog.)

Sure thing.  Basically, it interferes with child window rendering.  It marks the window region as validated when the CALayerHost draws, which leads to the WebView window not being sent WM_PAINT.  And even if that weren&apos;t the case, it still is a bit overkill to instantiate a whole CALayerHost just for drawing black into a window.  But I&apos;ll add all this to the ChangeLog.

&gt;&gt; Source/WebCore/WebCore.vcproj/WebCore.vcproj:27527
&gt;&gt; +						RelativePath=&quot;..\platform\graphics\win\WebFullScreenController.cpp&quot;
&gt; 
&gt; We don&apos;t normally use the &quot;Web&quot; prefix for WebCore classes. Can we rename this to FullScreenController in another patch?

I can do this in this one;  I hovered on the edge of renaming it myself, but laziness won out.

&gt;&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:112
&gt;&gt; +        m_layerTreeHost = CACFLayerTreeHost::create();
&gt; 
&gt; Looks like we never call CACFLayerTreeHost::setWindow in the lazy-init case? How can rendering work if we don&apos;t do that?

Whoops, good catch.  If setRootChildLayer() is called before createWindow(), CACFLayerTreeHost::setWindow() will never get called.  Aaaaand, it looks like that&apos;s the order called by FullScreenVideoController.  I&apos;ll add a setWindow() call to the lazy instantiation.

&gt;&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.h:61
&gt;&gt; +    void createWindow(HWND ownerWindow, bool startVisible = true);
&gt; 
&gt; Optional boolean arguments make me so sad! They&apos;re usually unreadable at the call site (&quot;what does true stand for?&quot;), and they&apos;re easy for callers to misuse (because so many types can be implicitly converted to bool). I&apos;d suggest making it a non-optional enum. Or maybe we should never start visible and have it be the caller&apos;s responsibility to call ShowWindow as needed.

You&apos;re totally right; i&apos;ll make this an enum.  I just didn&apos;t want to affect the default behavior and have to go and make changes everywhere this is used.  (Which is, I know, only one other place.)

&gt;&gt; Source/WebCore/platform/graphics/win/WebFullScreenController.cpp:57
&gt;&gt; +    virtual ~Private() { }
&gt; 
&gt; The compiler should do this for you.

Are you sure?  I didn&apos;t think the compiler will make a virtual destructor by default.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396632</commentid>
    <comment_count>10</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-05-02 13:56:41 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 91966 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=91966&amp;action=review
&gt; 
&gt; I don&apos;t see WebFullScreenControllerClient defined anywhere, so I only reviewed part of the patch.

Hm, git has apparently decided, since that file was copied from one place to the other, to not include WebFullScreenController.h in the patch. I&apos;ll fix that and re-upload.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396675</commentid>
    <comment_count>11</comment_count>
      <attachid>91984</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-05-02 14:38:27 -0700</bug_when>
    <thetext>Created attachment 91984
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396679</commentid>
    <comment_count>12</comment_count>
      <attachid>91984</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-05-02 14:42:54 -0700</bug_when>
    <thetext>Comment on attachment 91984
Patch

Whoops, some of my changes didn&apos;t make it into this patch (including the visibility enum.)  Will upload once again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396682</commentid>
    <comment_count>13</comment_count>
      <attachid>91984</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-05-02 14:44:24 -0700</bug_when>
    <thetext>Comment on attachment 91984
Patch

Double whoops.  Was looking at the wrong patch.  Everything should be fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396700</commentid>
    <comment_count>14</comment_count>
      <attachid>91984</attachid>
    <who name="Jeff Miller">jeffm</who>
    <bug_when>2011-05-02 15:04:42 -0700</bug_when>
    <thetext>Comment on attachment 91984
Patch

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

&gt; Source/WebCore/platform/graphics/win/FullScreenController.cpp:107
&gt; +    ASSERT(client);

This should be ASSERT_ARG(client, client).

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.h:63
&gt; +        StartVisible,

No comma needed after StartVisible.

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.h:65
&gt; +    typedef bool StartingVisibilityFlag;

Is there a reason you typedef&apos;d this to bool instead of just doing:

enum StartingVisibilityFlag {
    StartInvisible,
    StartVisible
};

?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396708</commentid>
    <comment_count>15</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-05-02 15:15:25 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 91984 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=91984&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/win/FullScreenController.cpp:107
&gt; &gt; +    ASSERT(client);
&gt; 
&gt; This should be ASSERT_ARG(client, client).

Changed.

&gt; &gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.h:63
&gt; &gt; +        StartVisible,
&gt; 
&gt; No comma needed after StartVisible.

I always use a comma at the end of an enum, so that when entries are added, the comma doesn&apos;t have to be retroactively applied.  It makes for much cleaner diffs.  I realize though, in this case, that this isn&apos;t likely an enum that will be added to.  I&apos;ll remove it.

&gt; &gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.h:65
&gt; &gt; +    typedef bool StartingVisibilityFlag;
&gt; 
&gt; Is there a reason you typedef&apos;d this to bool instead of just doing:
&gt; 
&gt; enum StartingVisibilityFlag {
&gt;     StartInvisible,
&gt;     StartVisible
&gt; };
&gt; 
&gt; ?

Yes, passing enums directly into functions have led to a number of compiler errors in the past: whereas defining an enum twice will generate a compiler error, it&apos;s trivial to redefine a typedef.  (This exact issue recently came up when adding a function to WKSI.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396719</commentid>
    <comment_count>16</comment_count>
      <attachid>91984</attachid>
    <who name="Jeff Miller">jeffm</who>
    <bug_when>2011-05-02 15:23:23 -0700</bug_when>
    <thetext>Comment on attachment 91984
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.h:65
&gt;&gt;&gt; +    typedef bool StartingVisibilityFlag;
&gt;&gt; 
&gt;&gt; Is there a reason you typedef&apos;d this to bool instead of just doing:
&gt;&gt; 
&gt;&gt; enum StartingVisibilityFlag {
&gt;&gt;     StartInvisible,
&gt;&gt;     StartVisible
&gt;&gt; };
&gt;&gt; 
&gt;&gt; ?
&gt; 
&gt; Yes, passing enums directly into functions have led to a number of compiler errors in the past: whereas defining an enum twice will generate a compiler error, it&apos;s trivial to redefine a typedef.  (This exact issue recently came up when adding a function to WKSI.)

Isn&apos;t that only a problem when passing enums across an API boundary like WebKit2 or WKSI?  It should be fine to pass enums internally in WebCore, and I see many existing instances of this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396723</commentid>
    <comment_count>17</comment_count>
      <attachid>91984</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-05-02 15:33:24 -0700</bug_when>
    <thetext>Comment on attachment 91984
Patch

This is close! Just a few more things to clean up from the move into WebCore.

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

&gt; Source/WebCore/platform/graphics/win/FullScreenController.h:47
&gt; +class FullScreenControllerClient {
&gt; +public:
&gt; +    virtual HWND webViewWindow() const = 0;
&gt; +    virtual HWND webViewHostWindow() const = 0;
&gt; +    virtual void setWebViewHostWindow(HWND) = 0;
&gt; +    virtual void webViewWillEnterFullScreen() = 0;
&gt; +    virtual void webViewDidEnterFullScreen() = 0;
&gt; +    virtual void webViewWillExitFullScreen() = 0;
&gt; +    virtual void webViewDidExitFullScreen() = 0;
&gt; +protected:
&gt; +    virtual ~FullScreenControllerClient() { }
&gt; +};

I usually prefer to put clients in their own header file so that headers of derived classes don&apos;t end up pulling in the whole non-client class declaration.

&quot;WebView&quot; isn&apos;t something that WebCore should know about, so we&apos;ll need to change these names somehow. You can probably just remove &quot;webView&quot; from the will/did functions.

I&apos;d suggest using &quot;parent window&quot; instead of &quot;host window&quot;. The &quot;host window&quot; terminology in WebKit1 is misleading (it was based on WebKit/mac&apos;s &quot;host window&quot; concept, but isn&apos;t the same thing), and conflicts with WebCore::HostWindow.

Chrome::platformPageClient can be used in place of webViewWindow (though it has such an awful name!). Maybe we should move [set]WebViewHostWindow there, too (if we give them appropriate names)?

&gt;&gt;&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.h:65
&gt;&gt;&gt; +    typedef bool StartingVisibilityFlag;
&gt;&gt; 
&gt;&gt; Is there a reason you typedef&apos;d this to bool instead of just doing:
&gt;&gt; 
&gt;&gt; enum StartingVisibilityFlag {
&gt;&gt;     StartInvisible,
&gt;&gt;     StartVisible
&gt;&gt; };
&gt;&gt; 
&gt;&gt; ?
&gt; 
&gt; Yes, passing enums directly into functions have led to a number of compiler errors in the past: whereas defining an enum twice will generate a compiler error, it&apos;s trivial to redefine a typedef.  (This exact issue recently came up when adding a function to WKSI.)

Can you point to a specific example where this was a problem? We use enum parameters in lots of places in WebKit/WebCore. I think it&apos;s definitely preferable to typedefing to bool. (But I&apos;d also support making this behavior non-configurable and leaving it up to the caller.)

&gt; Source/WebKit/win/WebView.cpp:6808
&gt; +    m_fullScreenElement = 0;

Please use nullptr.

&gt; Source/WebKit2/WebProcess/FullScreen/win/WebFullScreenManagerWin.cpp:72
&gt; +    m_fullScreenRootLayer = layer;

I don&apos;t see any code that ever renders this layer. Am I missing something?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396744</commentid>
    <comment_count>18</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-05-02 15:54:55 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 91984 [details])
&gt; This is close! Just a few more things to clean up from the move into WebCore.
&gt; 
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=91984&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/win/FullScreenController.h:47
&gt; &gt; +class FullScreenControllerClient {
&gt; &gt; +public:
&gt; &gt; +    virtual HWND webViewWindow() const = 0;
&gt; &gt; +    virtual HWND webViewHostWindow() const = 0;
&gt; &gt; +    virtual void setWebViewHostWindow(HWND) = 0;
&gt; &gt; +    virtual void webViewWillEnterFullScreen() = 0;
&gt; &gt; +    virtual void webViewDidEnterFullScreen() = 0;
&gt; &gt; +    virtual void webViewWillExitFullScreen() = 0;
&gt; &gt; +    virtual void webViewDidExitFullScreen() = 0;
&gt; &gt; +protected:
&gt; &gt; +    virtual ~FullScreenControllerClient() { }
&gt; &gt; +};
&gt; 
&gt; I usually prefer to put clients in their own header file so that headers of derived classes don&apos;t end up pulling in the whole non-client class declaration.

Sure, though in this case, the rest of the header is about as long as this class itself, and pulls in nothing aside  from OwnPtr.h, which is why I didn&apos;t move it into its own file in the first place.  But I&apos;ll do it now.

&gt; &quot;WebView&quot; isn&apos;t something that WebCore should know about, so we&apos;ll need to change these names somehow. You can probably just remove &quot;webView&quot; from the will/did functions.

I was trying to avoid conflicting with any existing function names.  How about:

virtual void fullScreenControllerWillEnterFullScreen(); 

&gt; I&apos;d suggest using &quot;parent window&quot; instead of &quot;host window&quot;. The &quot;host window&quot; terminology in WebKit1 is misleading (it was based on WebKit/mac&apos;s &quot;host window&quot; concept, but isn&apos;t the same thing), and conflicts with WebCore::HostWindow.

parentWindow and setParentWindow are fine with me.
 
&gt; Chrome::platformPageClient can be used in place of webViewWindow (though it has such an awful name!). Maybe we should move [set]WebViewHostWindow there, too (if we give them appropriate names)?

There&apos;s no way to access ChromeClient from within FullScreenWindow.  We&apos;d have to add a function to FullScreenControllerClient which fetches the ChromeClient.  We could just replace FullScreenControllerClient with ChromeClient, and add those enter/exit functions to ChromeClient, and then I wouldn&apos;t have to split it out into its own file. ;)

&gt;&gt; Source/WebKit/win/WebView.cpp:6808
&gt;&gt; +    m_fullScreenElement = 0;
&gt; 
&gt; Please use nullptr.

Sure.

&gt;&gt; Source/WebKit2/WebProcess/FullScreen/win/WebFullScreenManagerWin.cpp:72
&gt;&gt; +    m_fullScreenRootLayer = layer;
&gt; 
&gt; I don&apos;t see any code that ever renders this layer. Am I missing something?

No, you&apos;re not.  The passed in layer /must/ have a super layer, or an assert happens when synchronizing the layers.  (The sync mechanism assumes all parentless layers are the root layer, and freaks out.)   However, on windows, since we don&apos;t animate the full screen element&apos;s layer, this function is called twice within the same runloop, once to set the layer, and the other to clear it.  The view won&apos;t even get a chance to redraw.

 I intend to fix this with the &quot;Full Screen Flashing&quot; bug, so that this function will never be called unnecessarily like this; see the comment about not setting RenderLayer::setAnimating().  (And I see an extra &quot;S&quot; at the end of that comment.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396767</commentid>
    <comment_count>19</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-05-02 16:23:07 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; Can you point to a specific example where this was a problem? We use enum parameters in lots of places in WebKit/WebCore. I think it&apos;s definitely preferable to typedefing to bool. (But I&apos;d also support making this behavior non-configurable and leaving it up to the caller.)

Jon Lee was trying to add a new WKSI function, and it was actually impossible to do when the function took an enum directly.  That was perhaps a peculiarity of the way functions are defined in WKSI, because implementing the function involved redeclaring the enum.  (Even though the functions were identically defined, they were mangled differently, because each enum is effectively unique.)  And it&apos;s unlikely to occur within a C++ class.

But typedefing to an intrinsic type solves the problem of call-site visibility, header visibility, and doesn&apos;t create any strangely mangled symbols.

However, i&apos;m starting to come around to the idea that the default behavior should be not to make the window visible, and let the client deal with showing it.  That would solve the problem much more cleanly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396990</commentid>
    <comment_count>20</comment_count>
      <attachid>92052</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-05-03 00:18:20 -0700</bug_when>
    <thetext>Created attachment 92052
Patch

Addressed (most of) Adam&apos;s comments.  Found out I was misinterpreting how ::AnimateWindow() works.  (Hint: it&apos;s synchronous.)  Also, it requires windows to respond to the WM_PAINTCLIENT command, so that&apos;s been added to MediaPlayerPrivateFullScreenWindow class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397121</commentid>
    <comment_count>21</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-05-03 09:26:36 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; Created an attachment (id=92052) [details]
&gt; Patch
&gt; 
&gt; Addressed (most of) Adam&apos;s comments.  Found out I was misinterpreting how ::AnimateWindow() works.  (Hint: it&apos;s synchronous.)  Also, it requires windows to respond to the WM_PAINTCLIENT command, so that&apos;s been added to MediaPlayerPrivateFullScreenWindow class.

Just realized I left the 2s animation duration in this patch.  I&apos;ll lower it to 0.5s before I check in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397184</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-03 10:51:21 -0700</bug_when>
    <thetext>Attachment 92052 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebKit2/UIProcess/win/WebView.h:48:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 15 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>397282</commentid>
    <comment_count>23</comment_count>
      <attachid>92052</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-05-03 12:57:00 -0700</bug_when>
    <thetext>Comment on attachment 92052
Patch

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

&gt; Source/WebCore/platform/graphics/win/FullScreenController.cpp:118
&gt; +    m_private-&gt;m_backgroundWindow = adoptPtr(new MediaPlayerPrivateFullscreenWindow(m_private.get()));
&gt; +    m_private-&gt;m_backgroundWindow-&gt;createWindow(0);
&gt; +    ::AnimateWindow(m_private-&gt;m_backgroundWindow-&gt;hwnd(), kFullScreenAnimationDuration, AW_BLEND | AW_ACTIVATE);

Is the job of the background window just to draw black? If so, would it be better to have a simpler window class that just did that?

&gt; Source/WebCore/platform/graphics/win/FullScreenController.cpp:134
&gt; +    ::InvalidateRect(m_private-&gt;m_client-&gt;fullScreenClientWindow(), 0, true);
&gt; +    ::UpdateWindow(m_private-&gt;m_client-&gt;fullScreenClientWindow());

You might be able to combine these into a single ::RedrawWindow call.

&gt; Source/WebCore/platform/graphics/win/FullScreenController.cpp:135
&gt; +    m_private-&gt;m_originalHost = originalHost;

Why do we need the originalHost local? Can&apos;t we just use the member variable from the start?

&gt; Source/WebCore/platform/graphics/win/FullScreenController.cpp:154
&gt; +    ::DestroyWindow(m_private-&gt;m_fullScreenWindow-&gt;hwnd());
&gt; +    m_private-&gt;m_fullScreenWindow = 0;

I think m_fullScreenWindow will call ::DestroyWindow for you when it is destroyed.

Please use nullptr. Using 0 won&apos;t work anymore when we turn on strict PassOwnPtr.

&gt; Source/WebCore/platform/graphics/win/FullScreenController.cpp:160
&gt; +    ASSERT(m_private-&gt;m_backgroundWindow);
&gt; +    success = ::AnimateWindow(m_private-&gt;m_backgroundWindow-&gt;hwnd(), kFullScreenAnimationDuration, AW_HIDE | AW_BLEND);
&gt; +}

Why don&apos;t we need to clear out m_backgroundWindow?

&gt; Source/WebCore/platform/graphics/win/FullScreenControllerClient.h:37
&gt; +    virtual void setFullScreenClientParentWindow(HWND) = 0;

Maybe &quot;fullScreenClientSetParentWindow&quot; would be better? Then all the functions will have a common &quot;fullScreenClient&quot; prefix.

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:187
&gt; +            ::FillRect(hdc, &amp;ps.rcPaint, (HBRUSH)::GetStockObject(BLACK_BRUSH));

Please use static_cast,

&gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:197
&gt; +            HDC context = (HDC)wParam;
&gt; +            ::GetClientRect(m_hwnd, &amp;clientRect);
&gt; +            ::FillRect(context, &amp;clientRect, (HBRUSH)::GetStockObject(BLACK_BRUSH));
&gt; +        }

Please use C++ casts.

Why don&apos;t we need to implement WM_PRINTCLIENT in the case where we have a layer host? Won&apos;t that make the ::AnimateWindow call for the full screen window not work?

&gt; Source/WebKit/win/WebView.cpp:6813
&gt; +void WebView::fullScreenClientWillEnterFullScreen()
&gt; +{
&gt; +    ASSERT(m_fullScreenElement);
&gt; +    m_fullScreenElement-&gt;document()-&gt;webkitWillEnterFullScreenForElement(m_fullScreenElement.get());
&gt; +}
&gt; +
&gt; +void WebView::fullScreenClientDidEnterFullScreen()
&gt; +{
&gt; +    ASSERT(m_fullScreenElement);
&gt; +    m_fullScreenElement-&gt;document()-&gt;webkitDidEnterFullScreenForElement(m_fullScreenElement.get());
&gt; +}
&gt; +
&gt; +void WebView::fullScreenClientWillExitFullScreen()
&gt; +{
&gt; +    ASSERT(m_fullScreenElement);
&gt; +    m_fullScreenElement-&gt;document()-&gt;webkitWillExitFullScreenForElement(m_fullScreenElement.get());
&gt; +}
&gt; +
&gt; +void WebView::fullScreenClientDidExitFullScreen()
&gt; +{
&gt; +    ASSERT(m_fullScreenElement);
&gt; +    m_fullScreenElement-&gt;document()-&gt;webkitDidExitFullScreenForElement(m_fullScreenElement.get());
&gt; +    m_fullScreenElement = nullptr;
&gt; +}

Seems like this code could move into WebCore at some point, too. Can&apos;t the controller just keep track of this itself? I guess the WebKit2 implementation is different.

&gt;&gt; Source/WebKit2/UIProcess/win/WebView.h:48
&gt;&gt; +    class FullScreenController;
&gt; 
&gt; Code inside a namespace should not be indented.  [whitespace/indent] [4]

Silly style bot!

&gt; Source/WebKit2/WebProcess/FullScreen/win/WebFullScreenManagerWin.cpp:69
&gt; +    // FIXME: Disable setting RenderLayer::setAnimating() to make this unnecessary.s

Typo: unnecessary.s</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397283</commentid>
    <comment_count>24</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-05-03 12:57:46 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #17)
&gt; &gt; (From update of attachment 91984 [details] [details])
&gt; &gt;&gt; Source/WebKit2/WebProcess/FullScreen/win/WebFullScreenManagerWin.cpp:72
&gt; &gt;&gt; +    m_fullScreenRootLayer = layer;
&gt; &gt; 
&gt; &gt; I don&apos;t see any code that ever renders this layer. Am I missing something?
&gt; 
&gt; No, you&apos;re not.  The passed in layer /must/ have a super layer, or an assert happens when synchronizing the layers.  (The sync mechanism assumes all parentless layers are the root layer, and freaks out.)   However, on windows, since we don&apos;t animate the full screen element&apos;s layer, this function is called twice within the same runloop, once to set the layer, and the other to clear it.  The view won&apos;t even get a chance to redraw.
&gt; 
&gt;  I intend to fix this with the &quot;Full Screen Flashing&quot; bug, so that this function will never be called unnecessarily like this; see the comment about not setting RenderLayer::setAnimating().  (And I see an extra &quot;S&quot; at the end of that comment.)

Do does this mean this function should ideally never be called on Windows, but currently it *is* called? Can we just do nothing in that function?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397310</commentid>
    <comment_count>25</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-05-03 13:27:04 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (From update of attachment 92052 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=92052&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/win/FullScreenController.cpp:118
&gt; &gt; +    m_private-&gt;m_backgroundWindow = adoptPtr(new MediaPlayerPrivateFullscreenWindow(m_private.get()));
&gt; &gt; +    m_private-&gt;m_backgroundWindow-&gt;createWindow(0);
&gt; &gt; +    ::AnimateWindow(m_private-&gt;m_backgroundWindow-&gt;hwnd(), kFullScreenAnimationDuration, AW_BLEND | AW_ACTIVATE);
&gt; 
&gt; Is the job of the background window just to draw black? If so, would it be better to have a simpler window class that just did that?

I considered that as well, but I thought it would unnecessarily duplicate code to have two window classes that did (essentially) the same thing.

&gt; &gt; Source/WebCore/platform/graphics/win/FullScreenController.cpp:134
&gt; &gt; +    ::InvalidateRect(m_private-&gt;m_client-&gt;fullScreenClientWindow(), 0, true);
&gt; &gt; +    ::UpdateWindow(m_private-&gt;m_client-&gt;fullScreenClientWindow());
&gt; 
&gt; You might be able to combine these into a single ::RedrawWindow call.

Ooh, good idea!  I&apos;ll do it!

&gt; &gt; Source/WebCore/platform/graphics/win/FullScreenController.cpp:135
&gt; &gt; +    m_private-&gt;m_originalHost = originalHost;
&gt; 
&gt; Why do we need the originalHost local? Can&apos;t we just use the member variable from the start?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/win/FullScreenController.cpp:154
&gt; &gt; +    ::DestroyWindow(m_private-&gt;m_fullScreenWindow-&gt;hwnd());
&gt; &gt; +    m_private-&gt;m_fullScreenWindow = 0;
&gt; 
&gt; I think m_fullScreenWindow will call ::DestroyWindow for you when it is destroyed.

You are, of course, right, as always.

&gt; Please use nullptr. Using 0 won&apos;t work anymore when we turn on strict PassOwnPtr.

I was going to ask what the emphasis on nullptr was all about.  I&apos;ll try to reorganize my internal style map. :)

&gt; &gt; Source/WebCore/platform/graphics/win/FullScreenController.cpp:160
&gt; &gt; +    ASSERT(m_private-&gt;m_backgroundWindow);
&gt; &gt; +    success = ::AnimateWindow(m_private-&gt;m_backgroundWindow-&gt;hwnd(), kFullScreenAnimationDuration, AW_HIDE | AW_BLEND);
&gt; &gt; +}
&gt; 
&gt; Why don&apos;t we need to clear out m_backgroundWindow?

We probably should, but it&apos;s a tiny class, and ends up hidden, so it&apos;s not strictly necessary.  Ideally, we should clear it out at the end of enterFullScreen() /and/ exitFullScreen() and create it anew at the beginning of each.

&gt; &gt; Source/WebCore/platform/graphics/win/FullScreenControllerClient.h:37
&gt; &gt; +    virtual void setFullScreenClientParentWindow(HWND) = 0;
&gt; 
&gt; Maybe &quot;fullScreenClientSetParentWindow&quot; would be better? Then all the functions will have a common &quot;fullScreenClient&quot; prefix.

Sure thing!

&gt; &gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:187
&gt; &gt; +            ::FillRect(hdc, &amp;ps.rcPaint, (HBRUSH)::GetStockObject(BLACK_BRUSH));
&gt; 
&gt; Please use static_cast,
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:197
&gt; &gt; +            HDC context = (HDC)wParam;
&gt; &gt; +            ::GetClientRect(m_hwnd, &amp;clientRect);
&gt; &gt; +            ::FillRect(context, &amp;clientRect, (HBRUSH)::GetStockObject(BLACK_BRUSH));
&gt; &gt; +        }
&gt; 
&gt; Please use C++ casts.

Roger.

&gt; Why don&apos;t we need to implement WM_PRINTCLIENT in the case where we have a layer host? Won&apos;t that make the ::AnimateWindow call for the full screen window not work?

Because the layerHost-&gt;paint() function doesn&apos;t use the HDC provided by the WM_PRINTCLIENT call, and I didn&apos;t want to have to either make a new layerHost function taking an HDC, or pipe it through the existing one.

The full screen window (in this case) doesn&apos;t use the layerHost; the child windows do, and they already respond to WM_PRINTCLIENT.  The reason I noticed this behavior was because the backgroundWindow refused to animate without it, but the fullScreen window (whose child is the webView window) animated perfectly.

&gt; &gt; Source/WebKit/win/WebView.cpp:6813
&gt; &gt; +void WebView::fullScreenClientWillEnterFullScreen()
&gt; &gt; +{
&gt; &gt; +    ASSERT(m_fullScreenElement);
&gt; &gt; +    m_fullScreenElement-&gt;document()-&gt;webkitWillEnterFullScreenForElement(m_fullScreenElement.get());
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +void WebView::fullScreenClientDidEnterFullScreen()
&gt; &gt; +{
&gt; &gt; +    ASSERT(m_fullScreenElement);
&gt; &gt; +    m_fullScreenElement-&gt;document()-&gt;webkitDidEnterFullScreenForElement(m_fullScreenElement.get());
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +void WebView::fullScreenClientWillExitFullScreen()
&gt; &gt; +{
&gt; &gt; +    ASSERT(m_fullScreenElement);
&gt; &gt; +    m_fullScreenElement-&gt;document()-&gt;webkitWillExitFullScreenForElement(m_fullScreenElement.get());
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +void WebView::fullScreenClientDidExitFullScreen()
&gt; &gt; +{
&gt; &gt; +    ASSERT(m_fullScreenElement);
&gt; &gt; +    m_fullScreenElement-&gt;document()-&gt;webkitDidExitFullScreenForElement(m_fullScreenElement.get());
&gt; &gt; +    m_fullScreenElement = nullptr;
&gt; &gt; +}
&gt; 
&gt; Seems like this code could move into WebCore at some point, too. Can&apos;t the controller just keep track of this itself? I guess the WebKit2 implementation is different.

Yeah, the WebKit2 implementation lives in the UIProcess, and so doesn&apos;t have any notion of Elements or Documents.

&gt; &gt;&gt; Source/WebKit2/UIProcess/win/WebView.h:48
&gt; &gt;&gt; +    class FullScreenController;
&gt; &gt; 
&gt; &gt; Code inside a namespace should not be indented.  [whitespace/indent] [4]
&gt; 
&gt; Silly style bot!

I know, right!? :)

&gt; &gt; Source/WebKit2/WebProcess/FullScreen/win/WebFullScreenManagerWin.cpp:69
&gt; &gt; +    // FIXME: Disable setting RenderLayer::setAnimating() to make this unnecessary.s
&gt; 
&gt; Typo: unnecessary.s

Un-essed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397318</commentid>
    <comment_count>26</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-05-03 13:33:14 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; (In reply to comment #23)
&gt; &gt; &gt; Source/WebCore/platform/graphics/win/FullScreenController.cpp:135
&gt; &gt; &gt; +    m_private-&gt;m_originalHost = originalHost;
&gt; &gt; 
&gt; &gt; Why do we need the originalHost local? Can&apos;t we just use the member variable from the start?

Originally, I had some early returns for failure cases.  Now those are gone, and so the local variable can go as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397320</commentid>
    <comment_count>27</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-05-03 13:33:50 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; Do does this mean this function should ideally never be called on Windows, but currently it *is* called? Can we just do nothing in that function?

The only thing we /have/ to do in that function is to give the passed in layer a parent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397391</commentid>
    <comment_count>28</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-05-03 14:23:11 -0700</bug_when>
    <thetext>The last remaining issue is that, in WebKit2 mode, the webView repaint does not happen synchronously.  so you still see the non-fullscreen mode when entering fullscreen for an instant, and vice versa on exiting full screen.

I&apos;m going to check it in anyway, and fix the WK2 in another bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>397610</commentid>
    <comment_count>29</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-05-03 18:32:16 -0700</bug_when>
    <thetext>Committed r85699: &lt;http://trac.webkit.org/changeset/85699&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91770</attachid>
            <date>2011-04-29 17:17:45 -0700</date>
            <delta_ts>2011-04-29 17:35:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-59845-20110429171744.patch</filename>
            <type>text/plain</type>
            <size>19579</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODUzMjQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAzODY4MGY4MjMzYTY4ZmU2
ZmY3YjlkMDQyNzE4ODllOWZhY2NjNDNjLi4wZDZmZWU5MDIzZWUxZGYxZDhkODhiMDQ4MjExNWUx
OTY1N2I3YzlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTEtMDQtMjkgIEplciBO
b2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IEZVTExTQ1JFRU5fQVBJIG9uIFdpbmRvd3Ms
IFBhcnQgMzogV2ViS2l0MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTk4NDUKKworICAgICAgICBJbXBsZW1lbnQgYSBzaW1pbGFyIGZ1bGwgc2NyZWVu
IG1vZGUgdG8gV2ViS2l0OyBSZS11c2UgdGhlIHNhbWUKKyAgICAgICAgZnVsbCBzY3JlZW4gd2lu
ZG93IGNsYXNzIHVzZWQgaW4gV2ViS2l0IGluIHRoZSBuZXcgV0tGdWxsU2NyZWVuV2luZG93Q29u
dHJvbGxlci4KKyAgICAgICAgTm8gYW5pbWF0aW9ucyAoeWV0KSwgc28gbWFueSBvZiB0aGUgc3R1
YnMgcmVtYWluIHVuaW1wbGVtZW50ZWQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvRnVsbFNjcmVl
bi93aW4vV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5jcHA6IEFkZGVkLgorICAgICAgICAo
V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcjo6UHJpdmF0ZTo6UHJpdmF0ZSk6IEFkZGVkLgor
ICAgICAgICAoV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcjo6UHJpdmF0ZTo6flByaXZhdGUp
OiBBZGRlZC4KKyAgICAgICAgKFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI6OlByaXZhdGU6
Om1hbmFnZXIpOiBDb252ZW5pZW5jZSBmdW5jdGlvbgorICAgICAgICAgICAgdG8gYWNjZXNzIFdl
YlBhZ2VQcm94eTo6ZnVsbFNjcmVlbldpbmRvd01hbmFnZXIoKS4KKyAgICAgICAgKFdLRnVsbFNj
cmVlbldpbmRvd0NvbnRyb2xsZXI6OlByaXZhdGU6OmZ1bGxzY3JlZW5DbGllbnRXbmRQcm9jKTog
Q2xpZW50CisgICAgICAgICAgICBmdW5jdGlvbiBmb3IgaGFuZGxpbmcgZnVsbCBzY3JlZW4gd2lu
ZG93IG5vdGlmaWNhdGlvbnMuCisgICAgICAgIChXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVy
OjpXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyKTogQWRkZWQuCisgICAgICAgIChXS0Z1bGxT
Y3JlZW5XaW5kb3dDb250cm9sbGVyOjp+V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcik6IEFk
ZGVkLgorICAgICAgICAoV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcjo6aXNGdWxsU2NyZWVu
KTogQWNjZXNzb3IuCisgICAgICAgIChXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyOjplbnRl
ckZ1bGxTY3JlZW4pOiBBZGRlZC4KKyAgICAgICAgKFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xs
ZXI6OmV4aXRGdWxsU2NyZWVuKTogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0Z1bGxTY3Jl
ZW4vd2luL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3Mvd2luL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlXaW4uY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5OjplbnRlckZ1bGxTY3JlZW4pOiBQYXNzIHRocm91
Z2ggdG8gCisgICAgICAgICAgICBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLgorICAgICAg
ICAoV2ViS2l0OjpXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5OjpleGl0RnVsbFNjcmVlbik6IERp
dHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXc6OldlYlZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpvbktleUV2
ZW50KTogSGFuZGxlIHRoZSBlc2NhcGUga2V5IGFuZCBleGl0CisgICAgICAgICAgIGZ1bGwgc2Ny
ZWVuIG1vZGUgd2hlbiBkZXRlY3RlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6ZnVsbFNj
cmVlbldpbmRvd0NvbnRyb2xsZXIpOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dl
YlZpZXcuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0Z1bGxTY3JlZW4vd2luL1dlYkZ1bGxTY3Jl
ZW5NYW5hZ2VyV2luLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnVsbFNjcmVlbk1hbmFnZXJX
aW46On5XZWJGdWxsU2NyZWVuTWFuYWdlcldpbik6CisgICAgICAgIChXZWJLaXQ6OldlYkZ1bGxT
Y3JlZW5NYW5hZ2VyV2luOjpzZXRSb290RnVsbFNjcmVlbkxheWVyKTogSG9zdCB0aGUgcm9vdAor
ICAgICAgICAgICAgZnVsbCBzY3JlZW4gbGF5ZXIgaWYgaXQgZ2V0cyBkZXRhY2hlZC4KKyAgICAg
ICAgKiBXZWJQcm9jZXNzL0Z1bGxTY3JlZW4vd2luL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyV2luLmg6
CisgICAgICAgICogd2luL1dlYktpdDIudmNwcm9qOgorCiAyMDExLTA0LTI4ICBKZXIgTm9ibGUg
IDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Z1bGxTY3JlZW4vd2lu
L1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0Z1bGxTY3JlZW4vd2luL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjQ3ZTc3OGM2YTQ3MWIzMjc0MzIzYWRmYmRmNzc3NmM5OTAyN2NlZTAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRnVsbFNjcmVlbi93aW4vV0tGdWxs
U2NyZWVuV2luZG93Q29udHJvbGxlci5jcHAKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZCAyMDA5LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisKKyNpbmNsdWRlICJXS0Z1bGxTY3JlZW5X
aW5kb3dDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5
LmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViVmlldy5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvTWVkaWFQbGF5ZXJQcml2YXRlRnVsbFNjcmVlbldpbmRvdy5oPgorCit1
c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2NsYXNz
IFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI6OlByaXZhdGUgOiBwdWJsaWMgTWVkaWFQbGF5
ZXJQcml2YXRlRnVsbHNjcmVlbkNsaWVudCB7CitwdWJsaWM6CisgICAgUHJpdmF0ZShXS0Z1bGxT
Y3JlZW5XaW5kb3dDb250cm9sbGVyKiBjb250cm9sbGVyLCBXZWJWaWV3KiB3ZWJWaWV3KQorICAg
ICAgICA6IGNvbnRyb2xsZXIoY29udHJvbGxlcikKKyAgICAgICAgLCB3ZWJWaWV3KHdlYlZpZXcp
CisgICAgICAgICwgZnVsbFNjcmVlbldpbmRvdygwKQorICAgICAgICAsIGhvc3RXaW5kb3coMCkK
KyAgICAgICAgLCBvcmlnaW5hbEhvc3QoMCkKKyAgICAgICAgLCBpc0Z1bGxTY3JlZW4oMCkKKyAg
ICB7IH0KKyAgICB2aXJ0dWFsIH5Qcml2YXRlKCkgeyB9CisKKyAgICB2aXJ0dWFsIExSRVNVTFQg
ZnVsbHNjcmVlbkNsaWVudFduZFByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOworICAg
IFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkqIG1hbmFnZXIoKSB7IHJldHVybiB3ZWJWaWV3LT5w
YWdlKCktPmZ1bGxTY3JlZW5NYW5hZ2VyKCk7IH0KKworICAgIFdLRnVsbFNjcmVlbldpbmRvd0Nv
bnRyb2xsZXIqIGNvbnRyb2xsZXI7CisgICAgV2ViVmlldyogd2ViVmlldzsKKyAgICBPd25QdHI8
TWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdz4gZnVsbFNjcmVlbldpbmRvdzsKKyAg
ICBJbnRSZWN0IGZ1bGxTY3JlZW5GcmFtZTsKKyAgICBIV05EIGhvc3RXaW5kb3c7CisgICAgSFdO
RCBvcmlnaW5hbEhvc3Q7CisgICAgYm9vbCBpc0Z1bGxTY3JlZW47Cit9OworCitMUkVTVUxUIFdL
RnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI6OlByaXZhdGU6OmZ1bGxzY3JlZW5DbGllbnRXbmRQ
cm9jKEhXTkQgaHduZCwgVUlOVCBtc2csIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7
CisgICAgTFJFU1VMVCBsUmVzdWx0ID0gMDsKKworICAgIHN3aXRjaCAobXNnKSB7CisgICAgY2Fz
ZSBXTV9DUkVBVEU6CisgICAgICAgIGhvc3RXaW5kb3cgPSBod25kOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFdNX01PVkU6CisgICAgICAgIGZ1bGxTY3JlZW5GcmFtZS5zZXRYKExPV09SRChs
UGFyYW0pKTsKKyAgICAgICAgZnVsbFNjcmVlbkZyYW1lLnNldFkoSElXT1JEKGxQYXJhbSkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFdNX1NJWkU6CisgICAgICAgIGZ1bGxTY3JlZW5GcmFt
ZS5zZXRXaWR0aChMT1dPUkQobFBhcmFtKSk7CisgICAgICAgIGZ1bGxTY3JlZW5GcmFtZS5zZXRI
ZWlnaHQoSElXT1JEKGxQYXJhbSkpOworICAgICAgICBpZiAod2ViVmlldy0+d2luZG93KCkpCisg
ICAgICAgICAgICA6OlNldFdpbmRvd1Bvcyh3ZWJWaWV3LT53aW5kb3coKSwgMCwgMCwgMCwgZnVs
bFNjcmVlbkZyYW1lLndpZHRoKCksIGZ1bGxTY3JlZW5GcmFtZS5oZWlnaHQoKSwgU1dQX05PUkVQ
T1NJVElPTiAgfCBTV1BfTk9NT1ZFKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXTV9LRVlE
T1dOOgorICAgICAgICBpZiAod1BhcmFtID09IFZLX0VTQ0FQRSkKKyAgICAgICAgICAgIGNvbnRy
b2xsZXItPmV4aXRGdWxsU2NyZWVuKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxSZXN1
bHQgPSA6OkRlZldpbmRvd1Byb2MoaHduZCwgbXNnLCB3UGFyYW0sIGxQYXJhbSk7CisgICAgY2Fz
ZSBXTV9ERVNUUk9ZOgorICAgICAgICBob3N0V2luZG93ID0gMDsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgcmV0dXJuIGxSZXN1bHQ7Cit9CisKK1dLRnVsbFNjcmVlbldpbmRvd0NvbnRy
b2xsZXI6OldLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIoV2ViVmlldyogd2ViVmlldykKKyAg
ICA6IG1fcHJpdmF0ZShuZXcgV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcjo6UHJpdmF0ZSh0
aGlzLCB3ZWJWaWV3KSkgCit7CisgICAgQVNTRVJUKHdlYlZpZXcpOworfQorCitXS0Z1bGxTY3Jl
ZW5XaW5kb3dDb250cm9sbGVyOjp+V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcigpCit7Cisg
ICAgaWYgKG1fcHJpdmF0ZS0+aXNGdWxsU2NyZWVuKQorICAgICAgICBleGl0RnVsbFNjcmVlbigp
OworfQorCitib29sIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI6OmlzRnVsbFNjcmVlbigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNGdWxsU2NyZWVuOworfQorCit2b2lk
IFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI6OmVudGVyRnVsbFNjcmVlbigpCit7CisgICAg
aWYgKG1fcHJpdmF0ZS0+aXNGdWxsU2NyZWVuKQorICAgICAgICByZXR1cm47CisgICAgbV9wcml2
YXRlLT5pc0Z1bGxTY3JlZW4gPSB0cnVlOworCisgICAgQVNTRVJUKG1fcHJpdmF0ZS0+bWFuYWdl
cigpKTsKKyAgICBtX3ByaXZhdGUtPm1hbmFnZXIoKS0+d2lsbEVudGVyRnVsbFNjcmVlbigpOwor
CisgICAgQVNTRVJUKCFtX3ByaXZhdGUtPmZ1bGxTY3JlZW5XaW5kb3cpOworICAgIG1fcHJpdmF0
ZS0+ZnVsbFNjcmVlbldpbmRvdyA9IGFkb3B0UHRyKG5ldyBNZWRpYVBsYXllclByaXZhdGVGdWxs
c2NyZWVuV2luZG93KG1fcHJpdmF0ZS5nZXQoKSkpOworICAgIEFTU0VSVChtX3ByaXZhdGUtPmZ1
bGxTY3JlZW5XaW5kb3cpOworCisgICAgbV9wcml2YXRlLT5mdWxsU2NyZWVuV2luZG93LT5jcmVh
dGVXaW5kb3coMCk7CisgICAgQVNTRVJUKG1fcHJpdmF0ZS0+aG9zdFdpbmRvdyk7CisKKyAgICBI
V05EIG9yaWdpbmFsSG9zdCA9IDo6R2V0UGFyZW50KG1fcHJpdmF0ZS0+d2ViVmlldy0+d2luZG93
KCkpOworICAgIG1fcHJpdmF0ZS0+d2ViVmlldy0+c2V0UGFyZW50V2luZG93KG1fcHJpdmF0ZS0+
aG9zdFdpbmRvdyk7CisKKyAgICBJbnRSZWN0IHZpZXdGcmFtZShJbnRQb2ludCgpLCBtX3ByaXZh
dGUtPmZ1bGxTY3JlZW5GcmFtZS5zaXplKCkpOworICAgIDo6U2V0V2luZG93UG9zKG1fcHJpdmF0
ZS0+d2ViVmlldy0+d2luZG93KCksIEhXTkRfVE9QLCAwLCAwLCB2aWV3RnJhbWUud2lkdGgoKSwg
dmlld0ZyYW1lLmhlaWdodCgpLCBTV1BfTk9SRVBPU0lUSU9OKTsKKyAgICA6OlNob3dXaW5kb3co
bV9wcml2YXRlLT5ob3N0V2luZG93LCBTV19TSE9XKTsKKyAgICA6OlVwZGF0ZVdpbmRvdyhtX3By
aXZhdGUtPmhvc3RXaW5kb3cpOworICAgIG1fcHJpdmF0ZS0+b3JpZ2luYWxIb3N0ID0gb3JpZ2lu
YWxIb3N0OworCisgICAgbV9wcml2YXRlLT5tYW5hZ2VyKCktPmRpZEVudGVyRnVsbFNjcmVlbigp
OworfQorCit2b2lkIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI6OmV4aXRGdWxsU2NyZWVu
KCkKK3sKKyAgICBpZiAoIW1fcHJpdmF0ZS0+aXNGdWxsU2NyZWVuKQorICAgICAgICByZXR1cm47
CisgICAgbV9wcml2YXRlLT5pc0Z1bGxTY3JlZW4gPSBmYWxzZTsKKworICAgIEFTU0VSVChtX3By
aXZhdGUtPm1hbmFnZXIoKSk7CisgICAgbV9wcml2YXRlLT5tYW5hZ2VyKCktPndpbGxFeGl0RnVs
bFNjcmVlbigpOworCisgICAgQVNTRVJUKG1fcHJpdmF0ZS0+aG9zdFdpbmRvdyk7CisgICAgbV9w
cml2YXRlLT53ZWJWaWV3LT5zZXRQYXJlbnRXaW5kb3cobV9wcml2YXRlLT5vcmlnaW5hbEhvc3Qp
OworCisgICAgOjpTaG93V2luZG93KG1fcHJpdmF0ZS0+aG9zdFdpbmRvdywgU1dfSElERSk7Cisg
ICAgOjpEZXN0cm95V2luZG93KG1fcHJpdmF0ZS0+aG9zdFdpbmRvdyk7CisgICAgQVNTRVJUKCFt
X3ByaXZhdGUtPmhvc3RXaW5kb3cpOworICAgIG1fcHJpdmF0ZS0+ZnVsbFNjcmVlbldpbmRvdyA9
IDA7CisKKyAgICBtX3ByaXZhdGUtPm1hbmFnZXIoKS0+ZGlkRXhpdEZ1bGxTY3JlZW4oKTsKK30K
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRnVsbFNjcmVl
bi93aW4vV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0Z1bGxTY3JlZW4vd2luL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44Y2E1ZjQ5ZDkyMmM4MzllYzAzZjYxYzE1ZTUzZDFlOWNlZTFkYjkwCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Z1bGxTY3JlZW4vd2luL1dLRnVs
bFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyX2gKKyNkZWZpbmUgV0tGdWxsU2Ny
ZWVuV2luZG93Q29udHJvbGxlcl9oCisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisKKyNp
bmNsdWRlIDxXVEYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJW
aWV3OworCitjbGFzcyBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIHsKK3B1YmxpYzoKKyAg
ICBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyKFdlYlZpZXcqKTsKKyAgICB+V0tGdWxsU2Ny
ZWVuV2luZG93Q29udHJvbGxlcigpOworCisgICAgdm9pZCBlbnRlckZ1bGxTY3JlZW4oKTsKKyAg
ICB2b2lkIGV4aXRGdWxsU2NyZWVuKCk7CisgICAgCisgICAgYm9vbCBpc0Z1bGxTY3JlZW4oKSBj
b25zdDsKKworcHJvdGVjdGVkOgorICAgIGNsYXNzIFByaXZhdGU7CisgICAgZnJpZW5kIGNsYXNz
IFByaXZhdGU7CisgICAgT3duUHRyPFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI6OlByaXZh
dGU+IG1fcHJpdmF0ZTsKK307CisKK30KKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5V2lu
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViRnVsbFNjcmVlbk1hbmFnZXJQ
cm94eVdpbi5jcHAKaW5kZXggN2JkYTRiOTY0MzBiOTE2OTQ0MWM5OThkMjljYjNlY2M2MjYzYmIw
MS4uMWJhMDZmYzJiMWU2MmIzZWMxNDFlZDY1ZjE5MDc1ODZjMjRhNzQ4ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5V2lu
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYkZ1bGxTY3JlZW5NYW5h
Z2VyUHJveHlXaW4uY3BwCkBAIC0yOCw2ICsyOCw4IEBACiAKICNpZiBFTkFCTEUoRlVMTFNDUkVF
Tl9BUEkpCiAKKyNpbmNsdWRlICJXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmgiCisjaW5j
bHVkZSAiV2ViVmlldy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKQEAgLTM2LDE0ICszOCwxNCBAQCB2b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2Vy
UHJveHk6OmVudGVyRnVsbFNjcmVlbigpCiB7CiAgICAgaWYgKCFtX3dlYlZpZXcpCiAgICAgICAg
IHJldHVybjsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50CisgICAgbV93ZWJWaWV3LT5mdWxsU2Ny
ZWVuV2luZG93Q29udHJvbGxlcigpLT5lbnRlckZ1bGxTY3JlZW4oKTsKIH0KIAogdm9pZCBXZWJG
dWxsU2NyZWVuTWFuYWdlclByb3h5OjpleGl0RnVsbFNjcmVlbigpCiB7CiAgICAgaWYgKCFtX3dl
YlZpZXcpCiAgICAgICAgIHJldHVybjsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50CisgICAgbV93
ZWJWaWV3LT5mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcigpLT5leGl0RnVsbFNjcmVlbigpOwog
fQogCiB2b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHk6OmJlZ2FuRW50ZXJGdWxsU2NyZWVu
QW5pbWF0aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2Vi
Vmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCmluZGV4
IDhjZWNiMDJmYjNjNzI4ZjA4ZjVjNzkwYTM4OWQwNzk0Yjc2ZjY1OTYuLjU3YWVlNjgwM2UzNjc3
MzE4N2EyMTZiZTk3OWZiOWY3NjdlZThkMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy93aW4vV2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dp
bi9XZWJWaWV3LmNwcApAQCAtNTUsNiArNTUsMTEgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1dpbmRv
d3NUb3VjaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCisjaWYgRU5BQkxF
KEZVTExTQ1JFRU5fQVBJKQorI2luY2x1ZGUgIldLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIu
aCIKKyNpbmNsdWRlICJXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5LmgiCisjZW5kaWYKKwogbmFt
ZXNwYWNlIEltZSB7CiAvLyBXZSBuZWVkIHRoZXNlIGZ1bmN0aW9ucyBpbiBhIHNlcGFyYXRlIG5h
bWVzcGFjZSwgYmVjYXVzZSBpbiB0aGUgZ2xvYmFsIG5hbWVzcGFjZSB0aGV5IGNvbmZsaWN0CiAv
LyB3aXRoIHRoZSBkZWZpbml0aW9ucyBpbiBpbW0uaCBvbmx5IGJ5IHRoZSB0eXBlIG1vZGlmaWVy
ICh0aGUgbWFjcm8gZGVmaW5lcyB0aGVtIGFzIHN0YXRpYykgYW5kCkBAIC0yOTksNiArMzA0LDEw
IEBAIFdlYlZpZXc6OldlYlZpZXcoUkVDVCByZWN0LCBXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJQ
YWdlR3JvdXAqIHBhZ2VHcm91cCwgSFdORCBwCiAKICAgICAvLyBJbml0aWFsaXplIHRoZSB0b3Ag
bGV2ZWwgcGFyZW50IHdpbmRvdyBhbmQgcmVnaXN0ZXIgaXQgd2l0aCB0aGUgV2luZG93TWVzc2Fn
ZUJyb2FkY2FzdGVyLgogICAgIHdpbmRvd0FuY2VzdHJ5RGlkQ2hhbmdlKCk7CisKKyNpZiBFTkFC
TEUoRlVMTFNDUkVFTl9BUEkpCisgICAgbV9wYWdlLT5mdWxsU2NyZWVuTWFuYWdlcigpLT5zZXRX
ZWJWaWV3KHRoaXMpOworI2VuZGlmCiB9CiAKIFdlYlZpZXc6On5XZWJWaWV3KCkKQEAgLTYwOCw2
ICs2MTcsMTQgQEAgTFJFU1VMVCBXZWJWaWV3Ojpvbkdlc3R1cmUoSFdORCBoV25kLCBVSU5UIG1l
c3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0KIAogTFJFU1VMVCBXZWJWaWV3Ojpv
bktleUV2ZW50KEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0g
bFBhcmFtLCBib29sJiBoYW5kbGVkKQogeworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAg
ICAvLyBUcmFwIHRoZSBFU0Mga2V5IHdoZW4gaW4gZnVsbCBzY3JlZW4gbW9kZS4KKyAgICBpZiAo
bWVzc2FnZSA9PSBXTV9LRVlET1dOICYmIHdQYXJhbSA9PSBWS19FU0NBUEUgJiYgbV9mdWxsU2Ny
ZWVuV2luZG93Q29udHJvbGxlciAmJiBtX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLT5pc0Z1
bGxTY3JlZW4oKSkgeworICAgICAgICBtX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLT5leGl0
RnVsbFNjcmVlbigpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorI2VuZGlmCisKICAg
ICBtX3BhZ2UtPmhhbmRsZUtleWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChoV25k
LCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSkpOwogCiAgICAgLy8gV2UgY2xhaW0gaGVyZSB0byBh
bHdheXMgaGF2ZSBoYW5kbGVkIHRoZSBldmVudC4gSWYgdGhlIGV2ZW50IGlzIG5vdCBpbiBmYWN0
IGhhbmRsZWQsIHdlIHdpbGwKQEAgLTE2NTAsNCArMTY2NywxMiBAQCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIFdlYlZpZXc6OkRyb3AoSURhdGFPYmplY3QqIHBEYXRhT2JqZWN0LCBEV09SRCBn
cmZLZXlTdAogICAgIHJldHVybiBTX09LOwogfQogCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJ
KQorV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciogV2ViVmlldzo6ZnVsbFNjcmVlbldpbmRv
d0NvbnRyb2xsZXIoKQoreworICAgIGlmICghbV9mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcikK
KyAgICAgICAgbV9mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciA9IGFkb3B0UHRyKG5ldyBXS0Z1
bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyKHRoaXMpKTsKKyAgICByZXR1cm4gbV9mdWxsU2NyZWVu
V2luZG93Q29udHJvbGxlci5nZXQoKTsKK30KKyNlbmRpZgogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVmlldy5oCmluZGV4IGQ2MjMxMWM5OGE5ZWYy
YjJhNDY2MDBjYTkzMjMzZTk1ZTI2ZDRjZGUuLjMxNWJlZjM3ZTUwMzljN2I2M2M0MWNkOTZkZTBm
MTQ2OWY2ZTMzNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2Vi
Vmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVmlldy5oCkBAIC00
Niw2ICs0NiwxMCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgRHJhd2luZ0FyZWFQcm94
eTsKIAorI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKK2NsYXNzIFdLRnVsbFNjcmVlbldpbmRv
d0NvbnRyb2xsZXI7CisjZW5kaWYKKwogY2xhc3MgV2ViVmlldyA6IHB1YmxpYyBBUElPYmplY3Qs
IHB1YmxpYyBQYWdlQ2xpZW50LCBXZWJDb3JlOjpXaW5kb3dNZXNzYWdlTGlzdGVuZXIsIHB1Ymxp
YyBJRHJvcFRhcmdldCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViVmlldz4g
Y3JlYXRlKFJFQ1QgcmVjdCwgV2ViQ29udGV4dCogY29udGV4dCwgV2ViUGFnZUdyb3VwKiBwYWdl
R3JvdXAsIEhXTkQgcGFyZW50V2luZG93KQpAQCAtODUsNiArODksMTAgQEAgcHVibGljOgogCiAg
ICAgV2ViUGFnZVByb3h5KiBwYWdlKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlLmdldCgpOyB9CiAK
KyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgV0tGdWxsU2NyZWVuV2luZG93Q29udHJv
bGxlciogZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIoKTsKKyNlbmRpZgorCiBwcml2YXRlOgog
ICAgIFdlYlZpZXcoUkVDVCwgV2ViQ29udGV4dCosIFdlYlBhZ2VHcm91cCosIEhXTkQgcGFyZW50
V2luZG93KTsKIApAQCAtMjM0LDYgKzI0MiwxMCBAQCBwcml2YXRlOgogICAgIGludCBtX292ZXJQ
YW5ZOwogCiAgICAgYm9vbCBtX2dlc3R1cmVSZWFjaGVkU2Nyb2xsaW5nTGltaXQ7CisKKyNpZiBF
TkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgT3duUHRyPFdLRnVsbFNjcmVlbldpbmRvd0NvbnRy
b2xsZXI+IG1fZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI7CisjZW5kaWYKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9G
dWxsU2NyZWVuL3dpbi9XZWJGdWxsU2NyZWVuTWFuYWdlcldpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0Z1bGxTY3JlZW4vd2luL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyV2luLmNwcApp
bmRleCBkN2E4ZDkzNDFkNTI5MDA2YmNlYzY2YTA5OGUzNDIzODBiNjZjZDBlLi41OWMzZGVlYjNm
OWJmMTgxNjZhYjQxZTZmZjYyOGU3MjU2ZDRiYjk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0Z1bGxTY3JlZW4vd2luL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyV2luLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Z1bGxTY3JlZW4vd2luL1dlYkZ1bGxTY3Jl
ZW5NYW5hZ2VyV2luLmNwcApAQCAtMzEsNiArMzEsMTAgQEAKICNpbmNsdWRlICJXZWJGdWxsU2Ny
ZWVuTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVk
ZSAiV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0ZyYW1lVmlldy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgogI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFj
ZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBA
IC01NCwyMSArNTgsNTMgQEAgV2ViRnVsbFNjcmVlbk1hbmFnZXJXaW46OldlYkZ1bGxTY3JlZW5N
YW5hZ2VyV2luKFdlYlBhZ2UqIHBhZ2UpCiAKIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyV2luOjp+V2Vi
RnVsbFNjcmVlbk1hbmFnZXJXaW4oKQogeworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
RnVsbFNjcmVlbk1hbmFnZXJQcm94eTo6RXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkp
OwogfQogCi12b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyV2luOjpzZXRSb290RnVsbFNjcmVlbkxh
eWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKQordm9pZCBXZWJGdWxsU2NyZWVuTWFuYWdlcldp
bjo6c2V0Um9vdEZ1bGxTY3JlZW5MYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBsYXllcikK
IHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50CisgICAgLy8gSG9zdCB0aGUgZnVsbCBzY3JlZW4g
bGF5ZXIgaWYgaXRzIGdpdmVuIHRvIHVzOyBvdGhlcndpc2UgaXQgd2lsbCBiZSBkaXNjb25uZWN0
ZWQgCisgICAgLy8gZnJvbSB0aGUgbGF5ZXIgaGVpcmFyY2h5IGFuZCBjYXVzZSBhbiBBU1NFUlQg
ZHVyaW5nIHJlc3luYy4KKyAgICAvLyBGSVhNRTogRGlzYWJsZSBzZXR0aW5nIFJlbmRlckxheWVy
OjpzZXRBbmltYXRpbmcoKSB0byBtYWtlIHRoaXMgdW5uZWNlc3NhcnkucworICAgIGlmIChtX2Z1
bGxTY3JlZW5Sb290TGF5ZXIgPT0gbGF5ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBtX2Z1bGxT
Y3JlZW5Sb290TGF5ZXIgPSBsYXllcjsKKworICAgIGlmICghbV9mdWxsU2NyZWVuUm9vdExheWVy
KSB7CisgICAgICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViRnVsbFNjcmVlbk1hbmFnZXJQ
cm94eTo6RXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkpOworICAgICAgICBpZiAobV9y
b290TGF5ZXIpIHsKKyAgICAgICAgICAgIG1fcm9vdExheWVyLT5yZW1vdmVBbGxDaGlsZHJlbigp
OworICAgICAgICAgICAgbV9yb290TGF5ZXIgPSAwOworICAgICAgICB9CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoIW1fcm9vdExheWVyKSB7CisgICAgICAgIG1fcm9vdExheWVy
ID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKDApOworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgbV9y
b290TGF5ZXItPnNldE5hbWUoIkZ1bGwgc2NyZWVuIHJvb3QgbGF5ZXIiKTsKKyNlbmRpZgorICAg
ICAgICBtX3Jvb3RMYXllci0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKKyAgICAgICAgbV9yb290
TGF5ZXItPnNldFNpemUoZ2V0RnVsbFNjcmVlblJlY3QoKS5zaXplKCkpOworICAgIH0KKworICAg
IG1fcm9vdExheWVyLT5yZW1vdmVBbGxDaGlsZHJlbigpOworCisgICAgaWYgKG1fZnVsbFNjcmVl
blJvb3RMYXllcikKKyAgICAgICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1fZnVsbFNjcmVlblJv
b3RMYXllcik7CisKKyAgICBtX3Jvb3RMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlz
TGF5ZXJPbmx5KCk7CisgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygp
LT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOwogfQogCiB2b2lkIFdl
YkZ1bGxTY3JlZW5NYW5hZ2VyV2luOjpiZWdpbkVudGVyRnVsbFNjcmVlbkFuaW1hdGlvbihmbG9h
dCkKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50CisgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0
IGZvciBhbmltYXRpbmcgdGhlIGNvbnRlbnQgaW50byBmdWxsIHNjcmVlbi4KIH0KIAogdm9pZCBX
ZWJGdWxsU2NyZWVuTWFuYWdlcldpbjo6YmVnaW5FeGl0RnVsbFNjcmVlbkFuaW1hdGlvbihmbG9h
dCkKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50CisgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0
IGZvciBhbmltYXRpbmcgdGhlIGNvbnRlbnQgaW50byBmdWxsIHNjcmVlbi4KIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Z1
bGxTY3JlZW4vd2luL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyV2luLmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0Z1bGxTY3JlZW4vd2luL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyV2luLmgKaW5kZXgg
ZDlhZjRkOWEwZjhjMzM0M2JhYWE5YTAzYzdlZmYxODhmYTE2OWQ1NS4uMjJmNzRmMWNmNDE1ZWY3
MjJkNzQyZTAzMzY5NzhjNmViZmFhYTcxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9GdWxsU2NyZWVuL3dpbi9XZWJGdWxsU2NyZWVuTWFuYWdlcldpbi5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRnVsbFNjcmVlbi93aW4vV2ViRnVsbFNjcmVlbk1hbmFn
ZXJXaW4uaApAQCAtNDUsNiArNDUsOSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzZXRS
b290RnVsbFNjcmVlbkxheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKICAgICB2aXJ0dWFs
IHZvaWQgYmVnaW5FbnRlckZ1bGxTY3JlZW5BbmltYXRpb24oZmxvYXQgZHVyYXRpb24pOwogICAg
IHZpcnR1YWwgdm9pZCBiZWdpbkV4aXRGdWxsU2NyZWVuQW5pbWF0aW9uKGZsb2F0IGR1cmF0aW9u
KTsKKworICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3Jvb3RMYXllcjsKKyAg
ICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBtX2Z1bGxTY3JlZW5Sb290TGF5ZXI7CiB9OwogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi93aW4vV2ViS2l0Mi52Y3Byb2ogYi9Tb3VyY2Uv
V2ViS2l0Mi93aW4vV2ViS2l0Mi52Y3Byb2oKaW5kZXggOTIyMjAxNTk2MzYxMTRjMmFhYWEzOWQ5
N2Y0MGEyMjAzMGQyNGQ2My4uMzIwNTYwZGZiMDgwMGIxN2QwN2VmNzQzMGM0ZmQzNjZjZjljOWY2
NCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdDIvd2luL1dlYktpdDIudmNwcm9qCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvagpAQCAtMTcsNiArMTcsNyBAQAogCTxDb25m
aWd1cmF0aW9ucz4KIAkJPENvbmZpZ3VyYXRpb24KIAkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJ
SW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1lKSIKIAkJCUNvbmZpZ3Vy
YXRpb25UeXBlPSIyIgogCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5cV2ViS2l0MkRlYnVn
LnZzcHJvcHMiCiAJCQlDaGFyYWN0ZXJTZXQ9IjEiCkBAIC0zNTU4LDYgKzM1NTksMjIgQEAKIAkJ
CQkJPC9GaWxlPgogCQkJCTwvRmlsdGVyPgogCQkJPC9GaWx0ZXI+CisJCQk8RmlsdGVyCisJCQkJ
TmFtZT0iRnVsbFNjcmVlbiIKKwkJCQk+CisJCQkJPEZpbHRlcgorCQkJCQlOYW1lPSJ3aW4iCisJ
CQkJCT4KKwkJCQkJPEZpbGUKKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNzXEZ1bGxT
Y3JlZW5cd2luXFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuY3BwIgorCQkJCQkJPgorCQkJ
CQk8L0ZpbGU+CisJCQkJCTxGaWxlCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJUHJvY2Vzc1xG
dWxsU2NyZWVuXHdpblxXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmgiCisJCQkJCQk+CisJ
CQkJCTwvRmlsZT4KKwkJCQk8L0ZpbHRlcj4KKwkJCTwvRmlsdGVyPgogCQk8L0ZpbHRlcj4KIAkJ
PEZpbHRlcgogCQkJTmFtZT0iUGxhdGZvcm0iCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91772</attachid>
            <date>2011-04-29 17:35:19 -0700</date>
            <delta_ts>2011-05-02 13:28:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-59845-20110429173518.patch</filename>
            <type>text/plain</type>
            <size>26369</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODUzMjQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAzODY4MGY4MjMzYTY4ZmU2
ZmY3YjlkMDQyNzE4ODllOWZhY2NjNDNjLi4wZDZmZWU5MDIzZWUxZGYxZDhkODhiMDQ4MjExNWUx
OTY1N2I3YzlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTEtMDQtMjkgIEplciBO
b2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IEZVTExTQ1JFRU5fQVBJIG9uIFdpbmRvd3Ms
IFBhcnQgMzogV2ViS2l0MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTk4NDUKKworICAgICAgICBJbXBsZW1lbnQgYSBzaW1pbGFyIGZ1bGwgc2NyZWVu
IG1vZGUgdG8gV2ViS2l0OyBSZS11c2UgdGhlIHNhbWUKKyAgICAgICAgZnVsbCBzY3JlZW4gd2lu
ZG93IGNsYXNzIHVzZWQgaW4gV2ViS2l0IGluIHRoZSBuZXcgV0tGdWxsU2NyZWVuV2luZG93Q29u
dHJvbGxlci4KKyAgICAgICAgTm8gYW5pbWF0aW9ucyAoeWV0KSwgc28gbWFueSBvZiB0aGUgc3R1
YnMgcmVtYWluIHVuaW1wbGVtZW50ZWQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvRnVsbFNjcmVl
bi93aW4vV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5jcHA6IEFkZGVkLgorICAgICAgICAo
V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcjo6UHJpdmF0ZTo6UHJpdmF0ZSk6IEFkZGVkLgor
ICAgICAgICAoV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcjo6UHJpdmF0ZTo6flByaXZhdGUp
OiBBZGRlZC4KKyAgICAgICAgKFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI6OlByaXZhdGU6
Om1hbmFnZXIpOiBDb252ZW5pZW5jZSBmdW5jdGlvbgorICAgICAgICAgICAgdG8gYWNjZXNzIFdl
YlBhZ2VQcm94eTo6ZnVsbFNjcmVlbldpbmRvd01hbmFnZXIoKS4KKyAgICAgICAgKFdLRnVsbFNj
cmVlbldpbmRvd0NvbnRyb2xsZXI6OlByaXZhdGU6OmZ1bGxzY3JlZW5DbGllbnRXbmRQcm9jKTog
Q2xpZW50CisgICAgICAgICAgICBmdW5jdGlvbiBmb3IgaGFuZGxpbmcgZnVsbCBzY3JlZW4gd2lu
ZG93IG5vdGlmaWNhdGlvbnMuCisgICAgICAgIChXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVy
OjpXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyKTogQWRkZWQuCisgICAgICAgIChXS0Z1bGxT
Y3JlZW5XaW5kb3dDb250cm9sbGVyOjp+V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcik6IEFk
ZGVkLgorICAgICAgICAoV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcjo6aXNGdWxsU2NyZWVu
KTogQWNjZXNzb3IuCisgICAgICAgIChXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyOjplbnRl
ckZ1bGxTY3JlZW4pOiBBZGRlZC4KKyAgICAgICAgKFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xs
ZXI6OmV4aXRGdWxsU2NyZWVuKTogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0Z1bGxTY3Jl
ZW4vd2luL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3Mvd2luL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlXaW4uY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5OjplbnRlckZ1bGxTY3JlZW4pOiBQYXNzIHRocm91
Z2ggdG8gCisgICAgICAgICAgICBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLgorICAgICAg
ICAoV2ViS2l0OjpXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5OjpleGl0RnVsbFNjcmVlbik6IERp
dHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXc6OldlYlZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpvbktleUV2
ZW50KTogSGFuZGxlIHRoZSBlc2NhcGUga2V5IGFuZCBleGl0CisgICAgICAgICAgIGZ1bGwgc2Ny
ZWVuIG1vZGUgd2hlbiBkZXRlY3RlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6ZnVsbFNj
cmVlbldpbmRvd0NvbnRyb2xsZXIpOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dl
YlZpZXcuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0Z1bGxTY3JlZW4vd2luL1dlYkZ1bGxTY3Jl
ZW5NYW5hZ2VyV2luLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnVsbFNjcmVlbk1hbmFnZXJX
aW46On5XZWJGdWxsU2NyZWVuTWFuYWdlcldpbik6CisgICAgICAgIChXZWJLaXQ6OldlYkZ1bGxT
Y3JlZW5NYW5hZ2VyV2luOjpzZXRSb290RnVsbFNjcmVlbkxheWVyKTogSG9zdCB0aGUgcm9vdAor
ICAgICAgICAgICAgZnVsbCBzY3JlZW4gbGF5ZXIgaWYgaXQgZ2V0cyBkZXRhY2hlZC4KKyAgICAg
ICAgKiBXZWJQcm9jZXNzL0Z1bGxTY3JlZW4vd2luL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyV2luLmg6
CisgICAgICAgICogd2luL1dlYktpdDIudmNwcm9qOgorCiAyMDExLTA0LTI4ICBKZXIgTm9ibGUg
IDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Z1bGxTY3JlZW4vd2lu
L1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0Z1bGxTY3JlZW4vd2luL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjQ3ZTc3OGM2YTQ3MWIzMjc0MzIzYWRmYmRmNzc3NmM5OTAyN2NlZTAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRnVsbFNjcmVlbi93aW4vV0tGdWxs
U2NyZWVuV2luZG93Q29udHJvbGxlci5jcHAKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZCAyMDA5LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisKKyNpbmNsdWRlICJXS0Z1bGxTY3JlZW5X
aW5kb3dDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5
LmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSAiV2ViVmlldy5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvTWVkaWFQbGF5ZXJQcml2YXRlRnVsbFNjcmVlbldpbmRvdy5oPgorCit1
c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2NsYXNz
IFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI6OlByaXZhdGUgOiBwdWJsaWMgTWVkaWFQbGF5
ZXJQcml2YXRlRnVsbHNjcmVlbkNsaWVudCB7CitwdWJsaWM6CisgICAgUHJpdmF0ZShXS0Z1bGxT
Y3JlZW5XaW5kb3dDb250cm9sbGVyKiBjb250cm9sbGVyLCBXZWJWaWV3KiB3ZWJWaWV3KQorICAg
ICAgICA6IGNvbnRyb2xsZXIoY29udHJvbGxlcikKKyAgICAgICAgLCB3ZWJWaWV3KHdlYlZpZXcp
CisgICAgICAgICwgZnVsbFNjcmVlbldpbmRvdygwKQorICAgICAgICAsIGhvc3RXaW5kb3coMCkK
KyAgICAgICAgLCBvcmlnaW5hbEhvc3QoMCkKKyAgICAgICAgLCBpc0Z1bGxTY3JlZW4oMCkKKyAg
ICB7IH0KKyAgICB2aXJ0dWFsIH5Qcml2YXRlKCkgeyB9CisKKyAgICB2aXJ0dWFsIExSRVNVTFQg
ZnVsbHNjcmVlbkNsaWVudFduZFByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOworICAg
IFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkqIG1hbmFnZXIoKSB7IHJldHVybiB3ZWJWaWV3LT5w
YWdlKCktPmZ1bGxTY3JlZW5NYW5hZ2VyKCk7IH0KKworICAgIFdLRnVsbFNjcmVlbldpbmRvd0Nv
bnRyb2xsZXIqIGNvbnRyb2xsZXI7CisgICAgV2ViVmlldyogd2ViVmlldzsKKyAgICBPd25QdHI8
TWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdz4gZnVsbFNjcmVlbldpbmRvdzsKKyAg
ICBJbnRSZWN0IGZ1bGxTY3JlZW5GcmFtZTsKKyAgICBIV05EIGhvc3RXaW5kb3c7CisgICAgSFdO
RCBvcmlnaW5hbEhvc3Q7CisgICAgYm9vbCBpc0Z1bGxTY3JlZW47Cit9OworCitMUkVTVUxUIFdL
RnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI6OlByaXZhdGU6OmZ1bGxzY3JlZW5DbGllbnRXbmRQ
cm9jKEhXTkQgaHduZCwgVUlOVCBtc2csIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCit7
CisgICAgTFJFU1VMVCBsUmVzdWx0ID0gMDsKKworICAgIHN3aXRjaCAobXNnKSB7CisgICAgY2Fz
ZSBXTV9DUkVBVEU6CisgICAgICAgIGhvc3RXaW5kb3cgPSBod25kOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFdNX01PVkU6CisgICAgICAgIGZ1bGxTY3JlZW5GcmFtZS5zZXRYKExPV09SRChs
UGFyYW0pKTsKKyAgICAgICAgZnVsbFNjcmVlbkZyYW1lLnNldFkoSElXT1JEKGxQYXJhbSkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFdNX1NJWkU6CisgICAgICAgIGZ1bGxTY3JlZW5GcmFt
ZS5zZXRXaWR0aChMT1dPUkQobFBhcmFtKSk7CisgICAgICAgIGZ1bGxTY3JlZW5GcmFtZS5zZXRI
ZWlnaHQoSElXT1JEKGxQYXJhbSkpOworICAgICAgICBpZiAod2ViVmlldy0+d2luZG93KCkpCisg
ICAgICAgICAgICA6OlNldFdpbmRvd1Bvcyh3ZWJWaWV3LT53aW5kb3coKSwgMCwgMCwgMCwgZnVs
bFNjcmVlbkZyYW1lLndpZHRoKCksIGZ1bGxTY3JlZW5GcmFtZS5oZWlnaHQoKSwgU1dQX05PUkVQ
T1NJVElPTiAgfCBTV1BfTk9NT1ZFKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXTV9LRVlE
T1dOOgorICAgICAgICBpZiAod1BhcmFtID09IFZLX0VTQ0FQRSkKKyAgICAgICAgICAgIGNvbnRy
b2xsZXItPmV4aXRGdWxsU2NyZWVuKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxSZXN1
bHQgPSA6OkRlZldpbmRvd1Byb2MoaHduZCwgbXNnLCB3UGFyYW0sIGxQYXJhbSk7CisgICAgY2Fz
ZSBXTV9ERVNUUk9ZOgorICAgICAgICBob3N0V2luZG93ID0gMDsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgcmV0dXJuIGxSZXN1bHQ7Cit9CisKK1dLRnVsbFNjcmVlbldpbmRvd0NvbnRy
b2xsZXI6OldLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIoV2ViVmlldyogd2ViVmlldykKKyAg
ICA6IG1fcHJpdmF0ZShuZXcgV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcjo6UHJpdmF0ZSh0
aGlzLCB3ZWJWaWV3KSkgCit7CisgICAgQVNTRVJUKHdlYlZpZXcpOworfQorCitXS0Z1bGxTY3Jl
ZW5XaW5kb3dDb250cm9sbGVyOjp+V0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcigpCit7Cisg
ICAgaWYgKG1fcHJpdmF0ZS0+aXNGdWxsU2NyZWVuKQorICAgICAgICBleGl0RnVsbFNjcmVlbigp
OworfQorCitib29sIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI6OmlzRnVsbFNjcmVlbigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNGdWxsU2NyZWVuOworfQorCit2b2lk
IFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI6OmVudGVyRnVsbFNjcmVlbigpCit7CisgICAg
aWYgKG1fcHJpdmF0ZS0+aXNGdWxsU2NyZWVuKQorICAgICAgICByZXR1cm47CisgICAgbV9wcml2
YXRlLT5pc0Z1bGxTY3JlZW4gPSB0cnVlOworCisgICAgQVNTRVJUKG1fcHJpdmF0ZS0+bWFuYWdl
cigpKTsKKyAgICBtX3ByaXZhdGUtPm1hbmFnZXIoKS0+d2lsbEVudGVyRnVsbFNjcmVlbigpOwor
CisgICAgQVNTRVJUKCFtX3ByaXZhdGUtPmZ1bGxTY3JlZW5XaW5kb3cpOworICAgIG1fcHJpdmF0
ZS0+ZnVsbFNjcmVlbldpbmRvdyA9IGFkb3B0UHRyKG5ldyBNZWRpYVBsYXllclByaXZhdGVGdWxs
c2NyZWVuV2luZG93KG1fcHJpdmF0ZS5nZXQoKSkpOworICAgIEFTU0VSVChtX3ByaXZhdGUtPmZ1
bGxTY3JlZW5XaW5kb3cpOworCisgICAgbV9wcml2YXRlLT5mdWxsU2NyZWVuV2luZG93LT5jcmVh
dGVXaW5kb3coMCk7CisgICAgQVNTRVJUKG1fcHJpdmF0ZS0+aG9zdFdpbmRvdyk7CisKKyAgICBI
V05EIG9yaWdpbmFsSG9zdCA9IDo6R2V0UGFyZW50KG1fcHJpdmF0ZS0+d2ViVmlldy0+d2luZG93
KCkpOworICAgIG1fcHJpdmF0ZS0+d2ViVmlldy0+c2V0UGFyZW50V2luZG93KG1fcHJpdmF0ZS0+
aG9zdFdpbmRvdyk7CisKKyAgICBJbnRSZWN0IHZpZXdGcmFtZShJbnRQb2ludCgpLCBtX3ByaXZh
dGUtPmZ1bGxTY3JlZW5GcmFtZS5zaXplKCkpOworICAgIDo6U2V0V2luZG93UG9zKG1fcHJpdmF0
ZS0+d2ViVmlldy0+d2luZG93KCksIEhXTkRfVE9QLCAwLCAwLCB2aWV3RnJhbWUud2lkdGgoKSwg
dmlld0ZyYW1lLmhlaWdodCgpLCBTV1BfTk9SRVBPU0lUSU9OKTsKKyAgICA6OlNob3dXaW5kb3co
bV9wcml2YXRlLT5ob3N0V2luZG93LCBTV19TSE9XKTsKKyAgICA6OlVwZGF0ZVdpbmRvdyhtX3By
aXZhdGUtPmhvc3RXaW5kb3cpOworICAgIG1fcHJpdmF0ZS0+b3JpZ2luYWxIb3N0ID0gb3JpZ2lu
YWxIb3N0OworCisgICAgbV9wcml2YXRlLT5tYW5hZ2VyKCktPmRpZEVudGVyRnVsbFNjcmVlbigp
OworfQorCit2b2lkIFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI6OmV4aXRGdWxsU2NyZWVu
KCkKK3sKKyAgICBpZiAoIW1fcHJpdmF0ZS0+aXNGdWxsU2NyZWVuKQorICAgICAgICByZXR1cm47
CisgICAgbV9wcml2YXRlLT5pc0Z1bGxTY3JlZW4gPSBmYWxzZTsKKworICAgIEFTU0VSVChtX3By
aXZhdGUtPm1hbmFnZXIoKSk7CisgICAgbV9wcml2YXRlLT5tYW5hZ2VyKCktPndpbGxFeGl0RnVs
bFNjcmVlbigpOworCisgICAgQVNTRVJUKG1fcHJpdmF0ZS0+aG9zdFdpbmRvdyk7CisgICAgbV9w
cml2YXRlLT53ZWJWaWV3LT5zZXRQYXJlbnRXaW5kb3cobV9wcml2YXRlLT5vcmlnaW5hbEhvc3Qp
OworCisgICAgOjpTaG93V2luZG93KG1fcHJpdmF0ZS0+aG9zdFdpbmRvdywgU1dfSElERSk7Cisg
ICAgOjpEZXN0cm95V2luZG93KG1fcHJpdmF0ZS0+aG9zdFdpbmRvdyk7CisgICAgQVNTRVJUKCFt
X3ByaXZhdGUtPmhvc3RXaW5kb3cpOworICAgIG1fcHJpdmF0ZS0+ZnVsbFNjcmVlbldpbmRvdyA9
IDA7CisKKyAgICBtX3ByaXZhdGUtPm1hbmFnZXIoKS0+ZGlkRXhpdEZ1bGxTY3JlZW4oKTsKK30K
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvRnVsbFNjcmVl
bi93aW4vV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlci5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0Z1bGxTY3JlZW4vd2luL1dLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44Y2E1ZjQ5ZDkyMmM4MzllYzAzZjYxYzE1ZTUzZDFlOWNlZTFkYjkwCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Z1bGxTY3JlZW4vd2luL1dLRnVs
bFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyX2gKKyNkZWZpbmUgV0tGdWxsU2Ny
ZWVuV2luZG93Q29udHJvbGxlcl9oCisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisKKyNp
bmNsdWRlIDxXVEYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJW
aWV3OworCitjbGFzcyBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyIHsKK3B1YmxpYzoKKyAg
ICBXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyKFdlYlZpZXcqKTsKKyAgICB+V0tGdWxsU2Ny
ZWVuV2luZG93Q29udHJvbGxlcigpOworCisgICAgdm9pZCBlbnRlckZ1bGxTY3JlZW4oKTsKKyAg
ICB2b2lkIGV4aXRGdWxsU2NyZWVuKCk7CisgICAgCisgICAgYm9vbCBpc0Z1bGxTY3JlZW4oKSBj
b25zdDsKKworcHJvdGVjdGVkOgorICAgIGNsYXNzIFByaXZhdGU7CisgICAgZnJpZW5kIGNsYXNz
IFByaXZhdGU7CisgICAgT3duUHRyPFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI6OlByaXZh
dGU+IG1fcHJpdmF0ZTsKK307CisKK30KKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5V2lu
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViRnVsbFNjcmVlbk1hbmFnZXJQ
cm94eVdpbi5jcHAKaW5kZXggN2JkYTRiOTY0MzBiOTE2OTQ0MWM5OThkMjljYjNlY2M2MjYzYmIw
MS4uMWJhMDZmYzJiMWU2MmIzZWMxNDFlZDY1ZjE5MDc1ODZjMjRhNzQ4ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5V2lu
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYkZ1bGxTY3JlZW5NYW5h
Z2VyUHJveHlXaW4uY3BwCkBAIC0yOCw2ICsyOCw4IEBACiAKICNpZiBFTkFCTEUoRlVMTFNDUkVF
Tl9BUEkpCiAKKyNpbmNsdWRlICJXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmgiCisjaW5j
bHVkZSAiV2ViVmlldy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKQEAgLTM2LDE0ICszOCwxNCBAQCB2b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2Vy
UHJveHk6OmVudGVyRnVsbFNjcmVlbigpCiB7CiAgICAgaWYgKCFtX3dlYlZpZXcpCiAgICAgICAg
IHJldHVybjsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50CisgICAgbV93ZWJWaWV3LT5mdWxsU2Ny
ZWVuV2luZG93Q29udHJvbGxlcigpLT5lbnRlckZ1bGxTY3JlZW4oKTsKIH0KIAogdm9pZCBXZWJG
dWxsU2NyZWVuTWFuYWdlclByb3h5OjpleGl0RnVsbFNjcmVlbigpCiB7CiAgICAgaWYgKCFtX3dl
YlZpZXcpCiAgICAgICAgIHJldHVybjsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50CisgICAgbV93
ZWJWaWV3LT5mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcigpLT5leGl0RnVsbFNjcmVlbigpOwog
fQogCiB2b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHk6OmJlZ2FuRW50ZXJGdWxsU2NyZWVu
QW5pbWF0aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2Vi
Vmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCmluZGV4
IDhjZWNiMDJmYjNjNzI4ZjA4ZjVjNzkwYTM4OWQwNzk0Yjc2ZjY1OTYuLjU3YWVlNjgwM2UzNjc3
MzE4N2EyMTZiZTk3OWZiOWY3NjdlZThkMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy93aW4vV2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dp
bi9XZWJWaWV3LmNwcApAQCAtNTUsNiArNTUsMTEgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1dpbmRv
d3NUb3VjaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCisjaWYgRU5BQkxF
KEZVTExTQ1JFRU5fQVBJKQorI2luY2x1ZGUgIldLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIu
aCIKKyNpbmNsdWRlICJXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5LmgiCisjZW5kaWYKKwogbmFt
ZXNwYWNlIEltZSB7CiAvLyBXZSBuZWVkIHRoZXNlIGZ1bmN0aW9ucyBpbiBhIHNlcGFyYXRlIG5h
bWVzcGFjZSwgYmVjYXVzZSBpbiB0aGUgZ2xvYmFsIG5hbWVzcGFjZSB0aGV5IGNvbmZsaWN0CiAv
LyB3aXRoIHRoZSBkZWZpbml0aW9ucyBpbiBpbW0uaCBvbmx5IGJ5IHRoZSB0eXBlIG1vZGlmaWVy
ICh0aGUgbWFjcm8gZGVmaW5lcyB0aGVtIGFzIHN0YXRpYykgYW5kCkBAIC0yOTksNiArMzA0LDEw
IEBAIFdlYlZpZXc6OldlYlZpZXcoUkVDVCByZWN0LCBXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJQ
YWdlR3JvdXAqIHBhZ2VHcm91cCwgSFdORCBwCiAKICAgICAvLyBJbml0aWFsaXplIHRoZSB0b3Ag
bGV2ZWwgcGFyZW50IHdpbmRvdyBhbmQgcmVnaXN0ZXIgaXQgd2l0aCB0aGUgV2luZG93TWVzc2Fn
ZUJyb2FkY2FzdGVyLgogICAgIHdpbmRvd0FuY2VzdHJ5RGlkQ2hhbmdlKCk7CisKKyNpZiBFTkFC
TEUoRlVMTFNDUkVFTl9BUEkpCisgICAgbV9wYWdlLT5mdWxsU2NyZWVuTWFuYWdlcigpLT5zZXRX
ZWJWaWV3KHRoaXMpOworI2VuZGlmCiB9CiAKIFdlYlZpZXc6On5XZWJWaWV3KCkKQEAgLTYwOCw2
ICs2MTcsMTQgQEAgTFJFU1VMVCBXZWJWaWV3Ojpvbkdlc3R1cmUoSFdORCBoV25kLCBVSU5UIG1l
c3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0KIAogTFJFU1VMVCBXZWJWaWV3Ojpv
bktleUV2ZW50KEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0g
bFBhcmFtLCBib29sJiBoYW5kbGVkKQogeworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAg
ICAvLyBUcmFwIHRoZSBFU0Mga2V5IHdoZW4gaW4gZnVsbCBzY3JlZW4gbW9kZS4KKyAgICBpZiAo
bWVzc2FnZSA9PSBXTV9LRVlET1dOICYmIHdQYXJhbSA9PSBWS19FU0NBUEUgJiYgbV9mdWxsU2Ny
ZWVuV2luZG93Q29udHJvbGxlciAmJiBtX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLT5pc0Z1
bGxTY3JlZW4oKSkgeworICAgICAgICBtX2Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLT5leGl0
RnVsbFNjcmVlbigpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorI2VuZGlmCisKICAg
ICBtX3BhZ2UtPmhhbmRsZUtleWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9hcmRFdmVudChoV25k
LCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSkpOwogCiAgICAgLy8gV2UgY2xhaW0gaGVyZSB0byBh
bHdheXMgaGF2ZSBoYW5kbGVkIHRoZSBldmVudC4gSWYgdGhlIGV2ZW50IGlzIG5vdCBpbiBmYWN0
IGhhbmRsZWQsIHdlIHdpbGwKQEAgLTE2NTAsNCArMTY2NywxMiBAQCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIFdlYlZpZXc6OkRyb3AoSURhdGFPYmplY3QqIHBEYXRhT2JqZWN0LCBEV09SRCBn
cmZLZXlTdAogICAgIHJldHVybiBTX09LOwogfQogCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJ
KQorV0tGdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciogV2ViVmlldzo6ZnVsbFNjcmVlbldpbmRv
d0NvbnRyb2xsZXIoKQoreworICAgIGlmICghbV9mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcikK
KyAgICAgICAgbV9mdWxsU2NyZWVuV2luZG93Q29udHJvbGxlciA9IGFkb3B0UHRyKG5ldyBXS0Z1
bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyKHRoaXMpKTsKKyAgICByZXR1cm4gbV9mdWxsU2NyZWVu
V2luZG93Q29udHJvbGxlci5nZXQoKTsKK30KKyNlbmRpZgogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVmlldy5oCmluZGV4IGQ2MjMxMWM5OGE5ZWYy
YjJhNDY2MDBjYTkzMjMzZTk1ZTI2ZDRjZGUuLjMxNWJlZjM3ZTUwMzljN2I2M2M0MWNkOTZkZTBm
MTQ2OWY2ZTMzNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2Vi
Vmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVmlldy5oCkBAIC00
Niw2ICs0NiwxMCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgRHJhd2luZ0FyZWFQcm94
eTsKIAorI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKK2NsYXNzIFdLRnVsbFNjcmVlbldpbmRv
d0NvbnRyb2xsZXI7CisjZW5kaWYKKwogY2xhc3MgV2ViVmlldyA6IHB1YmxpYyBBUElPYmplY3Qs
IHB1YmxpYyBQYWdlQ2xpZW50LCBXZWJDb3JlOjpXaW5kb3dNZXNzYWdlTGlzdGVuZXIsIHB1Ymxp
YyBJRHJvcFRhcmdldCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViVmlldz4g
Y3JlYXRlKFJFQ1QgcmVjdCwgV2ViQ29udGV4dCogY29udGV4dCwgV2ViUGFnZUdyb3VwKiBwYWdl
R3JvdXAsIEhXTkQgcGFyZW50V2luZG93KQpAQCAtODUsNiArODksMTAgQEAgcHVibGljOgogCiAg
ICAgV2ViUGFnZVByb3h5KiBwYWdlKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlLmdldCgpOyB9CiAK
KyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgV0tGdWxsU2NyZWVuV2luZG93Q29udHJv
bGxlciogZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIoKTsKKyNlbmRpZgorCiBwcml2YXRlOgog
ICAgIFdlYlZpZXcoUkVDVCwgV2ViQ29udGV4dCosIFdlYlBhZ2VHcm91cCosIEhXTkQgcGFyZW50
V2luZG93KTsKIApAQCAtMjM0LDYgKzI0MiwxMCBAQCBwcml2YXRlOgogICAgIGludCBtX292ZXJQ
YW5ZOwogCiAgICAgYm9vbCBtX2dlc3R1cmVSZWFjaGVkU2Nyb2xsaW5nTGltaXQ7CisKKyNpZiBF
TkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgT3duUHRyPFdLRnVsbFNjcmVlbldpbmRvd0NvbnRy
b2xsZXI+IG1fZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXI7CisjZW5kaWYKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9G
dWxsU2NyZWVuL3dpbi9XZWJGdWxsU2NyZWVuTWFuYWdlcldpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0Z1bGxTY3JlZW4vd2luL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyV2luLmNwcApp
bmRleCBkN2E4ZDkzNDFkNTI5MDA2YmNlYzY2YTA5OGUzNDIzODBiNjZjZDBlLi41OWMzZGVlYjNm
OWJmMTgxNjZhYjQxZTZmZjYyOGU3MjU2ZDRiYjk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0Z1bGxTY3JlZW4vd2luL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyV2luLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Z1bGxTY3JlZW4vd2luL1dlYkZ1bGxTY3Jl
ZW5NYW5hZ2VyV2luLmNwcApAQCAtMzEsNiArMzEsMTAgQEAKICNpbmNsdWRlICJXZWJGdWxsU2Ny
ZWVuTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCiAjaW5jbHVk
ZSAiV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0ZyYW1lVmlldy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NMYXllci5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgogI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFj
ZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBA
IC01NCwyMSArNTgsNTMgQEAgV2ViRnVsbFNjcmVlbk1hbmFnZXJXaW46OldlYkZ1bGxTY3JlZW5N
YW5hZ2VyV2luKFdlYlBhZ2UqIHBhZ2UpCiAKIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyV2luOjp+V2Vi
RnVsbFNjcmVlbk1hbmFnZXJXaW4oKQogeworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
RnVsbFNjcmVlbk1hbmFnZXJQcm94eTo6RXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkp
OwogfQogCi12b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyV2luOjpzZXRSb290RnVsbFNjcmVlbkxh
eWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKQordm9pZCBXZWJGdWxsU2NyZWVuTWFuYWdlcldp
bjo6c2V0Um9vdEZ1bGxTY3JlZW5MYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBsYXllcikK
IHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50CisgICAgLy8gSG9zdCB0aGUgZnVsbCBzY3JlZW4g
bGF5ZXIgaWYgaXRzIGdpdmVuIHRvIHVzOyBvdGhlcndpc2UgaXQgd2lsbCBiZSBkaXNjb25uZWN0
ZWQgCisgICAgLy8gZnJvbSB0aGUgbGF5ZXIgaGVpcmFyY2h5IGFuZCBjYXVzZSBhbiBBU1NFUlQg
ZHVyaW5nIHJlc3luYy4KKyAgICAvLyBGSVhNRTogRGlzYWJsZSBzZXR0aW5nIFJlbmRlckxheWVy
OjpzZXRBbmltYXRpbmcoKSB0byBtYWtlIHRoaXMgdW5uZWNlc3NhcnkucworICAgIGlmIChtX2Z1
bGxTY3JlZW5Sb290TGF5ZXIgPT0gbGF5ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBtX2Z1bGxT
Y3JlZW5Sb290TGF5ZXIgPSBsYXllcjsKKworICAgIGlmICghbV9mdWxsU2NyZWVuUm9vdExheWVy
KSB7CisgICAgICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViRnVsbFNjcmVlbk1hbmFnZXJQ
cm94eTo6RXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkpOworICAgICAgICBpZiAobV9y
b290TGF5ZXIpIHsKKyAgICAgICAgICAgIG1fcm9vdExheWVyLT5yZW1vdmVBbGxDaGlsZHJlbigp
OworICAgICAgICAgICAgbV9yb290TGF5ZXIgPSAwOworICAgICAgICB9CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoIW1fcm9vdExheWVyKSB7CisgICAgICAgIG1fcm9vdExheWVy
ID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKDApOworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgbV9y
b290TGF5ZXItPnNldE5hbWUoIkZ1bGwgc2NyZWVuIHJvb3QgbGF5ZXIiKTsKKyNlbmRpZgorICAg
ICAgICBtX3Jvb3RMYXllci0+c2V0RHJhd3NDb250ZW50KGZhbHNlKTsKKyAgICAgICAgbV9yb290
TGF5ZXItPnNldFNpemUoZ2V0RnVsbFNjcmVlblJlY3QoKS5zaXplKCkpOworICAgIH0KKworICAg
IG1fcm9vdExheWVyLT5yZW1vdmVBbGxDaGlsZHJlbigpOworCisgICAgaWYgKG1fZnVsbFNjcmVl
blJvb3RMYXllcikKKyAgICAgICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1fZnVsbFNjcmVlblJv
b3RMYXllcik7CisKKyAgICBtX3Jvb3RMYXllci0+c3luY0NvbXBvc2l0aW5nU3RhdGVGb3JUaGlz
TGF5ZXJPbmx5KCk7CisgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS0+dmlldygp
LT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1lcygpOwogfQogCiB2b2lkIFdl
YkZ1bGxTY3JlZW5NYW5hZ2VyV2luOjpiZWdpbkVudGVyRnVsbFNjcmVlbkFuaW1hdGlvbihmbG9h
dCkKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50CisgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0
IGZvciBhbmltYXRpbmcgdGhlIGNvbnRlbnQgaW50byBmdWxsIHNjcmVlbi4KIH0KIAogdm9pZCBX
ZWJGdWxsU2NyZWVuTWFuYWdlcldpbjo6YmVnaW5FeGl0RnVsbFNjcmVlbkFuaW1hdGlvbihmbG9h
dCkKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50CisgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0
IGZvciBhbmltYXRpbmcgdGhlIGNvbnRlbnQgaW50byBmdWxsIHNjcmVlbi4KIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Z1
bGxTY3JlZW4vd2luL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyV2luLmggYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0Z1bGxTY3JlZW4vd2luL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyV2luLmgKaW5kZXgg
ZDlhZjRkOWEwZjhjMzM0M2JhYWE5YTAzYzdlZmYxODhmYTE2OWQ1NS4uMjJmNzRmMWNmNDE1ZWY3
MjJkNzQyZTAzMzY5NzhjNmViZmFhYTcxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9GdWxsU2NyZWVuL3dpbi9XZWJGdWxsU2NyZWVuTWFuYWdlcldpbi5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRnVsbFNjcmVlbi93aW4vV2ViRnVsbFNjcmVlbk1hbmFn
ZXJXaW4uaApAQCAtNDUsNiArNDUsOSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzZXRS
b290RnVsbFNjcmVlbkxheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKTsKICAgICB2aXJ0dWFs
IHZvaWQgYmVnaW5FbnRlckZ1bGxTY3JlZW5BbmltYXRpb24oZmxvYXQgZHVyYXRpb24pOwogICAg
IHZpcnR1YWwgdm9pZCBiZWdpbkV4aXRGdWxsU2NyZWVuQW5pbWF0aW9uKGZsb2F0IGR1cmF0aW9u
KTsKKworICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVyPiBtX3Jvb3RMYXllcjsKKyAg
ICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBtX2Z1bGxTY3JlZW5Sb290TGF5ZXI7CiB9OwogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi93aW4vV2ViS2l0Mi52Y3Byb2ogYi9Tb3VyY2Uv
V2ViS2l0Mi93aW4vV2ViS2l0Mi52Y3Byb2oKaW5kZXggOTIyMjAxNTk2MzYxMTRjMmFhYWEzOWQ5
N2Y0MGEyMjAzMGQyNGQ2My4uMzIwNTYwZGZiMDgwMGIxN2QwN2VmNzQzMGM0ZmQzNjZjZjljOWY2
NCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdDIvd2luL1dlYktpdDIudmNwcm9qCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvagpAQCAtMTcsNiArMTcsNyBAQAogCTxDb25m
aWd1cmF0aW9ucz4KIAkJPENvbmZpZ3VyYXRpb24KIAkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJ
SW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKENvbmZpZ3VyYXRpb25OYW1lKSIKIAkJCUNvbmZpZ3Vy
YXRpb25UeXBlPSIyIgogCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5cV2ViS2l0MkRlYnVn
LnZzcHJvcHMiCiAJCQlDaGFyYWN0ZXJTZXQ9IjEiCkBAIC0zNTU4LDYgKzM1NTksMjIgQEAKIAkJ
CQkJPC9GaWxlPgogCQkJCTwvRmlsdGVyPgogCQkJPC9GaWx0ZXI+CisJCQk8RmlsdGVyCisJCQkJ
TmFtZT0iRnVsbFNjcmVlbiIKKwkJCQk+CisJCQkJPEZpbHRlcgorCQkJCQlOYW1lPSJ3aW4iCisJ
CQkJCT4KKwkJCQkJPEZpbGUKKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNzXEZ1bGxT
Y3JlZW5cd2luXFdLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuY3BwIgorCQkJCQkJPgorCQkJ
CQk8L0ZpbGU+CisJCQkJCTxGaWxlCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJUHJvY2Vzc1xG
dWxsU2NyZWVuXHdpblxXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmgiCisJCQkJCQk+CisJ
CQkJCTwvRmlsZT4KKwkJCQk8L0ZpbHRlcj4KKwkJCTwvRmlsdGVyPgogCQk8L0ZpbHRlcj4KIAkJ
PEZpbHRlcgogCQkJTmFtZT0iUGxhdGZvcm0iCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi93
aW4vV2ViS2l0MkNvbW1vbi52c3Byb3BzIGIvU291cmNlL1dlYktpdDIvd2luL1dlYktpdDJDb21t
b24udnNwcm9wcwppbmRleCAxYWY2OWFlNTFiMmEzOWJiMmIxZGFkZTEyZGZiM2UzMGI5MmI0MWJm
Li5mYjkwZWM1OTY3YjhlNGU4ZTk3MmI0YzQ0ZDBlZjQ3MjIzNDZkM2EzIDEwMDc1NQotLS0gYS9T
b3VyY2UvV2ViS2l0Mi93aW4vV2ViS2l0MkNvbW1vbi52c3Byb3BzCisrKyBiL1NvdXJjZS9XZWJL
aXQyL3dpbi9XZWJLaXQyQ29tbW9uLnZzcHJvcHMKQEAgLTYsNyArNiw3IEBACiAJPgogCTxUb29s
CiAJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3Jp
ZXM9IiZxdW90OyQoUHJvamVjdERpcikmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKVwuLiZxdW90
OzsmcXVvdDskKFByb2plY3REaXIpXC4uXFBsYXRmb3JtJnF1b3Q7OyZxdW90OyQoUHJvamVjdERp
cilcLi5cUGxhdGZvcm1cY2cmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKVwuLlxQbGF0Zm9ybVxD
b3JlSVBDJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcilcLi5cUGx1Z2luUHJvY2VzcyZxdW90Ozsm
cXVvdDskKFByb2plY3REaXIpXC4uXFNoYXJlZCZxdW90OzsmcXVvdDskKFByb2plY3REaXIpXC4u
XFNoYXJlZFx3aW4mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKVwuLlxTaGFyZWRcY2YmcXVvdDs7
JnF1b3Q7JChQcm9qZWN0RGlyKVwuLlxTaGFyZWRcQVBJXGMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0
RGlyKVwuLlxTaGFyZWRcQVBJXGNcY2YmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKVwuLlxTaGFy
ZWRcQVBJXGNcd2luJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcilcLi5cU2hhcmVkXENvcmVJUENT
dXBwb3J0JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcilcLi5cU2hhcmVkXFBsdWdpbnMmcXVvdDs7
JnF1b3Q7JChQcm9qZWN0RGlyKVwuLlxTaGFyZWRcUGx1Z2luc1xOZXRzY2FwZSZxdW90OzsmcXVv
dDskKFByb2plY3REaXIpXC4uXFVJUHJvY2VzcyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpXC4u
XFVJUHJvY2Vzc1xBUElcQyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpXC4uXFVJUHJvY2Vzc1xB
UElcQ1x3aW4mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKVwuLlxVSVByb2Nlc3NcQVBJXGNwcCZx
dW90OzsmcXVvdDskKFByb2plY3REaXIpXC4uXFVJUHJvY2Vzc1xBUElcd2luJnF1b3Q7OyZxdW90
OyQoUHJvamVjdERpcilcLi5cVUlQcm9jZXNzXEF1dGhlbnRpY2F0aW9uJnF1b3Q7OyZxdW90OyQo
UHJvamVjdERpcilcLi5cVUlQcm9jZXNzXERvd25sb2FkcyZxdW90OzsmcXVvdDskKFByb2plY3RE
aXIpXC4uXFVJUHJvY2Vzc1xMYXVuY2hlciZxdW90OzsmcXVvdDskKFByb2plY3REaXIpXC4uXFVJ
UHJvY2Vzc1xQbHVnaW5zJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcilcLi5cVUlQcm9jZXNzXHdp
biZxdW90OzsmcXVvdDskKFByb2plY3REaXIpXC4uXFdlYlByb2Nlc3MmcXVvdDs7JnF1b3Q7JChQ
cm9qZWN0RGlyKVwuLlxXZWJQcm9jZXNzXFdlYkNvcmVTdXBwb3J0JnF1b3Q7OyZxdW90OyQoUHJv
amVjdERpcilcLi5cV2ViUHJvY2Vzc1xXZWJDb3JlU3VwcG9ydFx3aW4mcXVvdDs7JnF1b3Q7JChQ
cm9qZWN0RGlyKVwuLlxXZWJQcm9jZXNzXFdlYlBhZ2UmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGly
KVwuLlxXZWJQcm9jZXNzXFdlYlBhZ2Vcd2luJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcilcLi5c
V2ViUHJvY2Vzc1xJY29uRGF0YWJhc2UmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKVwuLlxXZWJQ
cm9jZXNzXEluamVjdGVkQnVuZGxlJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcilcLi5cV2ViUHJv
Y2Vzc1xJbmplY3RlZEJ1bmRsZVxBUElcYyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpXC4uXFdl
YlByb2Nlc3NcSW5qZWN0ZWRCdW5kbGVcRE9NJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcilcLi5c
V2ViUHJvY2Vzc1xJbmplY3RlZEJ1bmRsZVx3aW4mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKVwu
LlxXZWJQcm9jZXNzXFBsdWdpbnMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKVwuLlxXZWJQcm9j
ZXNzXFBsdWdpbnNcTmV0c2NhcGUmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKVwuLlxXZWJQcm9j
ZXNzXHdpbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpXC4uXFdlYlByb2Nlc3NcQXBwbGljYXRp
b25DYWNoZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpXC4uXFdlYlByb2Nlc3NcQXV0aGVudGlj
YXRpb24mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKVwuLlxXZWJQcm9jZXNzXENvb2tpZXMmcXVv
dDs7JnF1b3Q7JChQcm9qZWN0RGlyKVwuLlxXZWJQcm9jZXNzXENvb2tpZXNcY2YmcXVvdDs7JnF1
b3Q7JChQcm9qZWN0RGlyKVwuLlxXZWJQcm9jZXNzXERvd25sb2FkcyZxdW90OzsmcXVvdDskKFBy
b2plY3REaXIpXC4uXFdlYlByb2Nlc3NcRG93bmxvYWRzXGNmJnF1b3Q7OyZxdW90OyQoUHJvamVj
dERpcilcLi5cV2ViUHJvY2Vzc1xGdWxsU2NyZWVuJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcilc
Li5cV2ViUHJvY2Vzc1xHZW9sb2NhdGlvbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpXC4uXFdl
YlByb2Nlc3NcS2V5VmFsdWVTdG9yYWdlJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcilcLi5cV2Vi
UHJvY2Vzc1xNZWRpYUNhY2hlJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcilcLi5cV2ViUHJvY2Vz
c1xSZXNvdXJjZUNhY2hlJnF1b3Q7OyZxdW90OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmpc
JChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXMmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9u
QnVpbGREaXIpXEluY2x1ZGUmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXElu
Y2x1ZGVccHJpdmF0ZSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcSW5jbHVkZSZx
dW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcSW5jbHVkZVxwcml2YXRlJnF1b3Q7OyZx
dW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxJbmNsdWRlXHB0aHJlYWRzJnF1b3Q7OyZxdW90OyQo
Q29uZmlndXJhdGlvbkJ1aWxkRGlyKVxJbmNsdWRlXEphdmFTY3JpcHRDb3JlJnF1b3Q7OyZxdW90
OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxJbmNsdWRlXHByaXZhdGVcSmF2YVNjcmlwdENvcmUm
cXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXEluY2x1ZGVcSmF2YVNjcmlwdENvcmUm
cXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXEluY2x1ZGVccHJpdmF0ZVxKYXZhU2Ny
aXB0Q29yZSZxdW90OzsmcXVvdDskKENvbmZpZ3VyYXRpb25CdWlsZERpcilcSW5jbHVkZVxXZWJD
b3JlXEZvcndhcmRpbmdIZWFkZXJzJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxJ
bmNsdWRlXFdlYkNvcmVcRm9yd2FyZGluZ0hlYWRlcnMmcXVvdDsiCisJCUFkZGl0aW9uYWxJbmNs
dWRlRGlyZWN0b3JpZXM9IiZxdW90OyQoUHJvamVjdERpcikmcXVvdDs7JnF1b3Q7JChQcm9qZWN0
RGlyKVwuLiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpXC4uXFBsYXRmb3JtJnF1b3Q7OyZxdW90
OyQoUHJvamVjdERpcilcLi5cUGxhdGZvcm1cY2cmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKVwu
LlxQbGF0Zm9ybVxDb3JlSVBDJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcilcLi5cUGx1Z2luUHJv
Y2VzcyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpXC4uXFNoYXJlZCZxdW90OzsmcXVvdDskKFBy
b2plY3REaXIpXC4uXFNoYXJlZFx3aW4mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKVwuLlxTaGFy
ZWRcY2YmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKVwuLlxTaGFyZWRcQVBJXGMmcXVvdDs7JnF1
b3Q7JChQcm9qZWN0RGlyKVwuLlxTaGFyZWRcQVBJXGNcY2YmcXVvdDs7JnF1b3Q7JChQcm9qZWN0
RGlyKVwuLlxTaGFyZWRcQVBJXGNcd2luJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcilcLi5cU2hh
cmVkXENvcmVJUENTdXBwb3J0JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcilcLi5cU2hhcmVkXFBs
dWdpbnMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKVwuLlxTaGFyZWRcUGx1Z2luc1xOZXRzY2Fw
ZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpXC4uXFVJUHJvY2VzcyZxdW90OzsmcXVvdDskKFBy
b2plY3REaXIpXC4uXFVJUHJvY2Vzc1xBUElcQyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpXC4u
XFVJUHJvY2Vzc1xBUElcQ1x3aW4mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKVwuLlxVSVByb2Nl
c3NcQVBJXGNwcCZxdW90OzsmcXVvdDskKFByb2plY3REaXIpXC4uXFVJUHJvY2Vzc1xBUElcd2lu
JnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcilcLi5cVUlQcm9jZXNzXEF1dGhlbnRpY2F0aW9uJnF1
b3Q7OyZxdW90OyQoUHJvamVjdERpcilcLi5cVUlQcm9jZXNzXERvd25sb2FkcyZxdW90OzsmcXVv
dDskKFByb2plY3REaXIpXC4uXFVJUHJvY2Vzc1xGdWxsU2NyZWVuJnF1b3Q7OyZxdW90OyQoUHJv
amVjdERpcilcLi5cVUlQcm9jZXNzXEZ1bGxTY3JlZW5cd2luJnF1b3Q7OyZxdW90OyQoUHJvamVj
dERpcilcLi5cVUlQcm9jZXNzXExhdW5jaGVyJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcilcLi5c
VUlQcm9jZXNzXFBsdWdpbnMmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKVwuLlxVSVByb2Nlc3Nc
d2luJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcilcLi5cV2ViUHJvY2VzcyZxdW90OzsmcXVvdDsk
KFByb2plY3REaXIpXC4uXFdlYlByb2Nlc3NcV2ViQ29yZVN1cHBvcnQmcXVvdDs7JnF1b3Q7JChQ
cm9qZWN0RGlyKVwuLlxXZWJQcm9jZXNzXFdlYkNvcmVTdXBwb3J0XHdpbiZxdW90OzsmcXVvdDsk
KFByb2plY3REaXIpXC4uXFdlYlByb2Nlc3NcV2ViUGFnZSZxdW90OzsmcXVvdDskKFByb2plY3RE
aXIpXC4uXFdlYlByb2Nlc3NcV2ViUGFnZVx3aW4mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKVwu
LlxXZWJQcm9jZXNzXEljb25EYXRhYmFzZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpXC4uXFdl
YlByb2Nlc3NcSW5qZWN0ZWRCdW5kbGUmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKVwuLlxXZWJQ
cm9jZXNzXEluamVjdGVkQnVuZGxlXEFQSVxjJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcilcLi5c
V2ViUHJvY2Vzc1xJbmplY3RlZEJ1bmRsZVxET00mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKVwu
LlxXZWJQcm9jZXNzXEluamVjdGVkQnVuZGxlXHdpbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIp
XC4uXFdlYlByb2Nlc3NcUGx1Z2lucyZxdW90OzsmcXVvdDskKFByb2plY3REaXIpXC4uXFdlYlBy
b2Nlc3NcUGx1Z2luc1xOZXRzY2FwZSZxdW90OzsmcXVvdDskKFByb2plY3REaXIpXC4uXFdlYlBy
b2Nlc3Ncd2luJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcilcLi5cV2ViUHJvY2Vzc1xBcHBsaWNh
dGlvbkNhY2hlJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcilcLi5cV2ViUHJvY2Vzc1xBdXRoZW50
aWNhdGlvbiZxdW90OzsmcXVvdDskKFByb2plY3REaXIpXC4uXFdlYlByb2Nlc3NcQ29va2llcyZx
dW90OzsmcXVvdDskKFByb2plY3REaXIpXC4uXFdlYlByb2Nlc3NcQ29va2llc1xjZiZxdW90Ozsm
cXVvdDskKFByb2plY3REaXIpXC4uXFdlYlByb2Nlc3NcRG93bmxvYWRzJnF1b3Q7OyZxdW90OyQo
UHJvamVjdERpcilcLi5cV2ViUHJvY2Vzc1xEb3dubG9hZHNcY2YmcXVvdDs7JnF1b3Q7JChQcm9q
ZWN0RGlyKVwuLlxXZWJQcm9jZXNzXEZ1bGxTY3JlZW4mcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGly
KVwuLlxXZWJQcm9jZXNzXEdlb2xvY2F0aW9uJnF1b3Q7OyZxdW90OyQoUHJvamVjdERpcilcLi5c
V2ViUHJvY2Vzc1xLZXlWYWx1ZVN0b3JhZ2UmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKVwuLlxX
ZWJQcm9jZXNzXE1lZGlhQ2FjaGUmcXVvdDs7JnF1b3Q7JChQcm9qZWN0RGlyKVwuLlxXZWJQcm9j
ZXNzXFJlc291cmNlQ2FjaGUmcXVvdDs7JnF1b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9i
alwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlcyZxdW90OzsmcXVvdDskKENvbmZpZ3VyYXRp
b25CdWlsZERpcilcSW5jbHVkZSZxdW90OzsmcXVvdDskKENvbmZpZ3VyYXRpb25CdWlsZERpcilc
SW5jbHVkZVxwcml2YXRlJnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxJbmNsdWRl
JnF1b3Q7OyZxdW90OyQoV2ViS2l0TGlicmFyaWVzRGlyKVxJbmNsdWRlXHByaXZhdGUmcXVvdDs7
JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIpXEluY2x1ZGVccHRocmVhZHMmcXVvdDs7JnF1b3Q7
JChDb25maWd1cmF0aW9uQnVpbGREaXIpXEluY2x1ZGVcSmF2YVNjcmlwdENvcmUmcXVvdDs7JnF1
b3Q7JChDb25maWd1cmF0aW9uQnVpbGREaXIpXEluY2x1ZGVccHJpdmF0ZVxKYXZhU2NyaXB0Q29y
ZSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcSW5jbHVkZVxKYXZhU2NyaXB0Q29y
ZSZxdW90OzsmcXVvdDskKFdlYktpdExpYnJhcmllc0RpcilcSW5jbHVkZVxwcml2YXRlXEphdmFT
Y3JpcHRDb3JlJnF1b3Q7OyZxdW90OyQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxJbmNsdWRlXFdl
YkNvcmVcRm9yd2FyZGluZ0hlYWRlcnMmcXVvdDs7JnF1b3Q7JChXZWJLaXRMaWJyYXJpZXNEaXIp
XEluY2x1ZGVcV2ViQ29yZVxGb3J3YXJkaW5nSGVhZGVycyZxdW90OyIKIAkJUHJlcHJvY2Vzc29y
RGVmaW5pdGlvbnM9Il9VU1JETEw7V0VCS0lUX0VYUE9SVFM7RlJBTUVXT1JLX05BTUU9V2ViS2l0
O0JVSUxESU5HX1dFQktJVCIKIAkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiCiAJCVByZWNvbXBp
bGVkSGVhZGVyVGhyb3VnaD0iV2ViS2l0MlByZWZpeC5oIgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91966</attachid>
            <date>2011-05-02 13:28:45 -0700</date>
            <delta_ts>2011-05-02 14:38:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-59845-20110502132848.patch</filename>
            <type>text/plain</type>
            <size>41173</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODUzOTMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2M2MxNzIwZjIzODk0ODhk
MjQ0MzU1NDZjZTAwNTQzMWFlZmM0YjM3Li5lZDgwNmEzOWE4YzZmNTQzZTQyMzkxZWM1NGZlMTc1
NDkyMDA1NDlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTEtMDUtMDIgIEplciBO
b2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IEZVTExTQ1JFRU5fQVBJIG9uIFdpbmRvd3Ms
IFBhcnQgMzogV2ViS2l0MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTk4NDUKKworICAgICAgICBNb3ZlIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyIGlu
dG8gV2ViQ29yZSB0byBmYWNpbGl0YXRlIGNvZGUgc2hhcmluZyBiZXR3ZWVuIFdlYktpdAorICAg
ICAgICBhbmQgV2ViS2l0Mi4gIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyIG5vdyB1c2VzIGEgQ2xp
ZW50IGNsYXNzIHRvIHJlcXVlc3Qgd29yayBvbiBpdHMKKyAgICAgICAgYmVoYWxmIGJ5IFdlYktp
dCBhbmQgV2ViS2l0Mi4gIE1lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3cgbm93IG9u
bHkgY3JlYXRlcyBhIAorICAgICAgICBDQUxheWVySG9zdCBvbmNlIGEgcm9vdCBsYXllciBpcyBz
ZXQuCisKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRv
dy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2lu
ZG93OjpNZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93KTogRG8gbm90IGNyZWF0ZSAK
KyAgICAgICAgICAgIG1fbGF5ZXJIb3N0IGluIHRoZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3c6OmNyZWF0ZVdpbmRvdyk6
IE5VTEwgY2hlY2sgbV9sYXllckhvc3QuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVGdWxsc2NyZWVuV2luZG93OjpzZXRSb290Q2hpbGRMYXllcik6IExhemlseSBpbnN0YW50
aWF0ZSBtX2xheWVySG9zdC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUZ1
bGxzY3JlZW5XaW5kb3c6OnduZFByb2MpOiBOVUxMIGNoZWNrIG1fbGF5ZXJIb3N0OyBpZiBhIHJv
b3QgbGF5ZXIgaXMKKyAgICAgICAgICAgIG5vdCBwcmVzZW50LCBmaWxsIHRoZSB3aW5kb3cgd2l0
aCBibGFjayBpbiBXTV9QQUlOVC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVk
aWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9XZWJGdWxsU2NyZWVuQ29udHJvbGxlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0L3dpbi9XZWJGdWxsU2NyZWVuQ29udHJvbGxlci5jcHAuCisgICAgICAgIChXZWJG
dWxsU2NyZWVuQ29udHJvbGxlcjo6UHJpdmF0ZTo6ZW50ZXJGdWxsU2NyZWVuVGltZXJGaXJlZCk6
IEFkZGVkOyBmaXJlcyBhZnRlciB0aGUgZmFkZS1pbiBhbmltYXRpb24gY29tcGxldGVzLgorICAg
ICAgICAoV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXI6OlByaXZhdGU6OmV4aXRGdWxsU2NyZWVuVGlt
ZXJGaXJlZCk6IEFkZGVkOyBmaXJlcyBhZnRlciB0aGUgZmFkZS1vdXQgYW5pbWF0aW9uIGNvbXBs
ZXRlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vV2ViRnVsbFNjcmVlbkNvbnRy
b2xsZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkZ1bGxTY3JlZW5Db250
cm9sbGVyLmguCisgICAgICAgIChXZWJDb3JlOjpXZWJGdWxsU2NyZWVuQ29udHJvbGxlckNsaWVu
dDo6fldlYkZ1bGxTY3JlZW5Db250cm9sbGVyQ2xpZW50KToKKwogMjAxMS0wNC0yOSAgSmVyIE5v
YmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oK
aW5kZXggZjc1ZDNhZGUwNGVlNTVmMjg4ODUwMzE4ZWY2NDcwYjc5NTk0YjZmNi4uZjU5NTQ2ZTBj
ZGEyNmZlNDZkYzczMjBjYzExNWU3ZTYwNzU5OGYzNSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTI3NTI0LDYgKzI3NTI0LDE0IEBACiAJCQkJ
CQk+CiAJCQkJCTwvRmlsZT4KIAkJCQkJPEZpbGUKKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxh
dGZvcm1cZ3JhcGhpY3Ncd2luXFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyLmNwcCIKKwkJCQkJCT4K
KwkJCQkJPC9GaWxlPgorCQkJCQk8RmlsZQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9y
bVxncmFwaGljc1x3aW5cV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuaCIKKwkJCQkJCT4KKwkJCQkJ
PC9GaWxlPgorCQkJCQk8RmlsZQogCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFw
aGljc1x3aW5cV0tDQUltYWdlUXVldWUuY3BwIgogCQkJCQkJPgogCQkJCQkJPEZpbGVDb25maWd1
cmF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
TWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdy5j
cHAKaW5kZXggNTg4MTQ2YWE0NWE2OTBjZjMwOGVkOGU2NjgxZTQ0ZmNhMjc4NDEyNy4uYzc1NWNl
YWM3YjQ3ZGE1N2NmMmQ3ZGU0YTUyYjBiZmM0OTJhNjdhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5X
aW5kb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRp
YVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93LmNwcApAQCAtNDQsOSArNDQsNiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBNZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93OjpNZWRp
YVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93KE1lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3Jl
ZW5DbGllbnQqIGNsaWVudCkKICAgICA6IG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1faHduZCgw
KQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICAsIG1fbGF5ZXJUcmVlSG9z
dChDQUNGTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKCkpCi0jZW5kaWYKIHsKIH0KIApAQCAtNTksNyAr
NTYsNyBAQCBNZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93Ojp+TWVkaWFQbGF5ZXJQ
cml2YXRlRnVsbHNjcmVlbldpbmRvdygpCiAgICAgQVNTRVJUKCFtX2h3bmQpOwogfQogCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3c6OmNyZWF0ZVdpbmRvdyhIV05EIHBh
cmVudEh3bmQpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3c6OmNyZWF0
ZVdpbmRvdyhIV05EIHBhcmVudEh3bmQsIGJvb2wgc3RhcnRWaXNpYmxlKQogewogICAgIHN0YXRp
YyBBVE9NIHdpbmRvd0F0b207CiAgICAgc3RhdGljIExQQ1dTVFIgd2luZG93Q2xhc3NOYW1lID0g
TCJNZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93Q2xhc3MiOwpAQCAtODIsMTMgKzc5
LDE0IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdzo6Y3JlYXRlV2lu
ZG93KEhXTkQgcGFyZW50SHduZCkKIAogICAgIEludFJlY3QgbW9uaXRvclJlY3QgPSBtaS5yY01v
bml0b3I7CiAgICAgCi0gICAgOjpDcmVhdGVXaW5kb3dFeFcoV1NfRVhfVE9PTFdJTkRPVywgd2lu
ZG93Q2xhc3NOYW1lLCBMIiIsIFdTX1BPUFVQIHwgV1NfVklTSUJMRSwgCisgICAgOjpDcmVhdGVX
aW5kb3dFeFcoV1NfRVhfVE9PTFdJTkRPVywgd2luZG93Q2xhc3NOYW1lLCBMIiIsIFdTX1BPUFVQ
IHwgKHN0YXJ0VmlzaWJsZSA/IFdTX1ZJU0lCTEUgOiAwKSwgCiAgICAgICAgIG1vbml0b3JSZWN0
LngoKSwgbW9uaXRvclJlY3QueSgpLCBtb25pdG9yUmVjdC53aWR0aCgpLCBtb25pdG9yUmVjdC5o
ZWlnaHQoKSwKICAgICAgICAgcGFyZW50SHduZCwgMCwgV2ViQ29yZTo6aW5zdGFuY2VIYW5kbGUo
KSwgdGhpcyk7CiAgICAgQVNTRVJUKElzV2luZG93KG1faHduZCkpOwogCiAjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQotICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0V2luZG93KG1faHdu
ZCk7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5z
ZXRXaW5kb3cobV9od25kKTsKICNlbmRpZgogCiAgICAgOjpTZXRGb2N1cyhtX2h3bmQpOwpAQCAt
MTA1LDggKzEwMywxMyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3c6
OnNldFJvb3RDaGlsZExheWVyKFBhc3NSZWZQdHI8UGxhdGZvcm1DQQogCiAgICAgbV9yb290Q2hp
bGQgPSByb290Q2hpbGQ7CiAKLSAgICBpZiAoIW1fcm9vdENoaWxkKQorICAgIGlmICghbV9yb290
Q2hpbGQpIHsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0ID0gMDsKICAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmICghbV9sYXllclRyZWVIb3N0KQorICAgICAgICBtX2xheWVyVHJlZUhv
c3QgPSBDQUNGTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKCk7CiAKICAgICBtX2xheWVyVHJlZUhvc3Qt
PnNldFJvb3RDaGlsZExheWVyKG1fcm9vdENoaWxkLmdldCgpKTsKICAgICBQbGF0Zm9ybUNBTGF5
ZXIqIHJvb3RMYXllciA9IG1fcm9vdENoaWxkLT5yb290TGF5ZXIoKTsKQEAgLTE0OCw3ICsxNTEs
OCBAQCBMUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3c6OnduZFByb2Mo
SFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQQogICAgIGNhc2UgV01fREVTVFJPWToKICAgICAg
ICAgbV9od25kID0gMDsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgICAg
IG1fbGF5ZXJUcmVlSG9zdC0+c2V0V2luZG93KDApOworICAgICAgICBpZiAobV9sYXllclRyZWVI
b3N0KQorICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRXaW5kb3coMCk7CiAjZW5kaWYK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBXTV9XSU5ET1dQT1NDSEFOR0VEOgpAQCAtMTU3LDE5
ICsxNjEsMjkgQEAgTFJFU1VMVCBNZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93Ojp3
bmRQcm9jKEhXTkQgaFduZCwgVUlOVCBtZXNzYWdlLCBXUEEKICAgICAgICAgICAgIGlmICh3cC0+
ZmxhZ3MgJiBTV1BfTk9TSVpFKQogICAgICAgICAgICAgICAgIGJyZWFrOwogI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKLSAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+cmVzaXpl
KCk7Ci0gICAgICAgICAgICBQbGF0Zm9ybUNBTGF5ZXIqIHJvb3RMYXllciA9IG1fcm9vdENoaWxk
LT5yb290TGF5ZXIoKTsKLSAgICAgICAgICAgIENHUmVjdCByb290Qm91bmRzID0gbV9yb290Q2hp
bGQtPnJvb3RMYXllcigpLT5ib3VuZHMoKTsKLSAgICAgICAgICAgIG1fcm9vdENoaWxkLT5zZXRG
cmFtZShyb290Qm91bmRzKTsKLSAgICAgICAgICAgIG1fcm9vdENoaWxkLT5zZXROZWVkc0xheW91
dCgpOworICAgICAgICAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkgeworICAgICAgICAgICAgICAg
IG1fbGF5ZXJUcmVlSG9zdC0+cmVzaXplKCk7CisgICAgICAgICAgICAgICAgUGxhdGZvcm1DQUxh
eWVyKiByb290TGF5ZXIgPSBtX3Jvb3RDaGlsZC0+cm9vdExheWVyKCk7CisgICAgICAgICAgICAg
ICAgQ0dSZWN0IHJvb3RCb3VuZHMgPSBtX3Jvb3RDaGlsZC0+cm9vdExheWVyKCktPmJvdW5kcygp
OworICAgICAgICAgICAgICAgIG1fcm9vdENoaWxkLT5zZXRGcmFtZShyb290Qm91bmRzKTsKKyAg
ICAgICAgICAgICAgICBtX3Jvb3RDaGlsZC0+c2V0TmVlZHNMYXlvdXQoKTsKKyAgICAgICAgICAg
IH0KICNlbmRpZgogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV01fUEFJTlQ6
CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgICAgICBtX2xheWVyVHJlZUhv
c3QtPnBhaW50KCk7Ci0gICAgICAgIDo6VmFsaWRhdGVSZWN0KG1faHduZCwgMCk7CisgICAgICAg
IGlmIChtX2xheWVyVHJlZUhvc3QpIHsKKyAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+cGFp
bnQoKTsKKyAgICAgICAgICAgIDo6VmFsaWRhdGVSZWN0KG1faHduZCwgMCk7CisgICAgICAgIH0g
ZWxzZQogI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgICAgIFBBSU5UU1RSVUNUIHBzOworICAg
ICAgICAgICAgSERDIGhkYyA9IDo6QmVnaW5QYWludChtX2h3bmQsICZwcyk7CisgICAgICAgICAg
ICA6OkZpbGxSZWN0KGhkYywgJnBzLnJjUGFpbnQsIChIQlJVU0gpOjpHZXRTdG9ja09iamVjdChC
TEFDS19CUlVTSCkpOworICAgICAgICAgICAgOjpFbmRQYWludChtX2h3bmQsICZwcyk7CisgICAg
ICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRv
dy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJp
dmF0ZUZ1bGxzY3JlZW5XaW5kb3cuaAppbmRleCBlMDdiYmFjZmE4ZjczMmExZTY2NTlmN2M1ZTU4
MDhlNDNlMjcxNGQ0Li5jN2EwZDk3ZDJlOTI4ZjBhM2FlNjkxZWVjN2MwYjk2MmI0MjYyZTRjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5
ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93LmgKQEAgLTU4
LDcgKzU4LDcgQEAgcHVibGljOgogICAgIE1lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5k
b3coTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbkNsaWVudCopOwogICAgIH5NZWRpYVBsYXll
clByaXZhdGVGdWxsc2NyZWVuV2luZG93KCk7CiAKLSAgICB2b2lkIGNyZWF0ZVdpbmRvdyhIV05E
IG93bmVyV2luZG93KTsKKyAgICB2b2lkIGNyZWF0ZVdpbmRvdyhIV05EIG93bmVyV2luZG93LCBi
b29sIHN0YXJ0VmlzaWJsZSA9IHRydWUpOwogICAgIAogICAgIEhXTkQgaHduZCgpIGNvbnN0IHsg
cmV0dXJuIG1faHduZDsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5mZDY4NjhjNTdhZGNkYzBhZDMwNTMwOTQ0MGQyMDVkY2I2NmRmODM1Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1dlYkZ1bGxTY3Jl
ZW5Db250cm9sbGVyLmNwcApAQCAtMCwwICsxLDE5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMDkuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVO
QUJMRShGVUxMU0NSRUVOX0FQSSkKKworI2luY2x1ZGUgIldlYkZ1bGxTY3JlZW5Db250cm9sbGVy
LmgiCisKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1
ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3cuaCIKKyNpbmNsdWRlICJUaW1l
ci5oIgorI2luY2x1ZGUgIldlYkNvcmVJbnN0YW5jZUhhbmRsZS5oIgorI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0YXRpYyBjb25zdCBpbnQg
a0Z1bGxTY3JlZW5BbmltYXRpb25EdXJhdGlvbiA9IDIwMDA7IC8vIG1pbGxpc2Vjb25kcyAKKwor
Y2xhc3MgV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXI6OlByaXZhdGUgOiBwdWJsaWMgTWVkaWFQbGF5
ZXJQcml2YXRlRnVsbHNjcmVlbkNsaWVudCAgeworcHVibGljOgorICAgIFByaXZhdGUoV2ViRnVs
bFNjcmVlbkNvbnRyb2xsZXIqIGNvbnRyb2xsZXIsIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyQ2xp
ZW50KiBjbGllbnQpIAorICAgICAgICA6IG1fY29udHJvbGxlcihjb250cm9sbGVyKQorICAgICAg
ICAsIG1fY2xpZW50KGNsaWVudCkKKyAgICAgICAgLCBtX29yaWdpbmFsSG9zdCgwKQorICAgICAg
ICAsIG1faXNGdWxsU2NyZWVuKGZhbHNlKQorICAgICAgICAsIG1faXNFbnRlcmluZ0Z1bGxTY3Jl
ZW4oZmFsc2UpCisgICAgICAgICwgbV9pc0V4aXRpbmdGdWxsU2NyZWVuKGZhbHNlKQorICAgICAg
ICAsIG1fZW50ZXJGdWxsU2NyZWVuVGltZXIodGhpcywgJlByaXZhdGU6OmVudGVyRnVsbFNjcmVl
blRpbWVyRmlyZWQpCisgICAgICAgICwgbV9leGl0RnVsbFNjcmVlblRpbWVyKHRoaXMsICZQcml2
YXRlOjpleGl0RnVsbFNjcmVlblRpbWVyRmlyZWQpCisgICAgeworICAgIH0KKyAgICB2aXJ0dWFs
IH5Qcml2YXRlKCkgeyB9CisKKyAgICB2aXJ0dWFsIExSRVNVTFQgZnVsbHNjcmVlbkNsaWVudFdu
ZFByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOworICAgIHZvaWQgZW50ZXJGdWxsU2Ny
ZWVuVGltZXJGaXJlZChUaW1lcjxQcml2YXRlPiopOworICAgIHZvaWQgZXhpdEZ1bGxTY3JlZW5U
aW1lckZpcmVkKFRpbWVyPFByaXZhdGU+Kik7CisgICAgCisgICAgV2ViRnVsbFNjcmVlbkNvbnRy
b2xsZXIqIG1fY29udHJvbGxlcjsKKyAgICBXZWJGdWxsU2NyZWVuQ29udHJvbGxlckNsaWVudCog
bV9jbGllbnQ7CisgICAgT3duUHRyPE1lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3c+
IG1fZnVsbFNjcmVlbldpbmRvdzsKKyAgICBPd25QdHI8TWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNj
cmVlbldpbmRvdz4gbV9iYWNrZ3JvdW5kV2luZG93OworICAgIEludFJlY3QgbV9mdWxsU2NyZWVu
RnJhbWU7CisgICAgSFdORCBtX29yaWdpbmFsSG9zdDsKKyAgICBib29sIG1faXNGdWxsU2NyZWVu
OworICAgIGJvb2wgbV9pc0VudGVyaW5nRnVsbFNjcmVlbjsKKyAgICBib29sIG1faXNFeGl0aW5n
RnVsbFNjcmVlbjsKKyAgICBUaW1lcjxXZWJGdWxsU2NyZWVuQ29udHJvbGxlcjo6UHJpdmF0ZT4g
bV9lbnRlckZ1bGxTY3JlZW5UaW1lcjsKKyAgICBUaW1lcjxXZWJGdWxsU2NyZWVuQ29udHJvbGxl
cjo6UHJpdmF0ZT4gbV9leGl0RnVsbFNjcmVlblRpbWVyOworfTsKKworTFJFU1VMVCBXZWJGdWxs
U2NyZWVuQ29udHJvbGxlcjo6UHJpdmF0ZTo6ZnVsbHNjcmVlbkNsaWVudFduZFByb2MoSFdORCBo
d25kLCBVSU5UIG1zZywgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKK3sKKyAgICBMUkVT
VUxUIGxSZXN1bHQgPSAwOworCisgICAgc3dpdGNoIChtc2cpIHsKKyAgICBjYXNlIFdNX01PVkU6
CisgICAgICAgIG1fZnVsbFNjcmVlbkZyYW1lLnNldFgoTE9XT1JEKGxQYXJhbSkpOworICAgICAg
ICBtX2Z1bGxTY3JlZW5GcmFtZS5zZXRZKEhJV09SRChsUGFyYW0pKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBXTV9TSVpFOgorICAgICAgICBtX2Z1bGxTY3JlZW5GcmFtZS5zZXRXaWR0aChM
T1dPUkQobFBhcmFtKSk7CisgICAgICAgIG1fZnVsbFNjcmVlbkZyYW1lLnNldEhlaWdodChISVdP
UkQobFBhcmFtKSk7CisgICAgICAgIGlmIChtX2NsaWVudC0+d2ViVmlld1dpbmRvdygpKQorICAg
ICAgICAgICAgOjpTZXRXaW5kb3dQb3MobV9jbGllbnQtPndlYlZpZXdXaW5kb3coKSwgMCwgMCwg
MCwgbV9mdWxsU2NyZWVuRnJhbWUud2lkdGgoKSwgbV9mdWxsU2NyZWVuRnJhbWUuaGVpZ2h0KCks
IFNXUF9OT1JFUE9TSVRJT04gIHwgU1dQX05PTU9WRSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgV01fS0VZRE9XTjoKKyAgICAgICAgaWYgKHdQYXJhbSA9PSBWS19FU0NBUEUpIHsKKyAgICAg
ICAgICAgIG1fY29udHJvbGxlci0+ZXhpdEZ1bGxTY3JlZW4oKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIC8vIEZhbGwgdGhyb3VnaC4KKyAgICBkZWZhdWx0OgorICAg
ICAgICBsUmVzdWx0ID0gOjpEZWZXaW5kb3dQcm9jKGh3bmQsIG1zZywgd1BhcmFtLCBsUGFyYW0p
OworICAgIH0KKworICAgIHJldHVybiBsUmVzdWx0OworfQorCitXZWJGdWxsU2NyZWVuQ29udHJv
bGxlcjo6V2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIoV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXJDbGll
bnQqIGNsaWVudCkKKyAgICA6IG1fcHJpdmF0ZShhZG9wdFB0cihuZXcgV2ViRnVsbFNjcmVlbkNv
bnRyb2xsZXI6OlByaXZhdGUodGhpcywgY2xpZW50KSkpCit7CisgICAgQVNTRVJUKGNsaWVudCk7
Cit9CisKK1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyOjp+V2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIo
KQoreworfQorCitib29sIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyOjppc0Z1bGxTY3JlZW4oKSBj
b25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPm1faXNGdWxsU2NyZWVuOworfQorCit2b2lk
IFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyOjplbnRlckZ1bGxTY3JlZW4oKQoreworICAgIGlmICht
X3ByaXZhdGUtPm1faXNFbnRlcmluZ0Z1bGxTY3JlZW4pCisgICAgICAgIHJldHVybjsKKyAgICBt
X3ByaXZhdGUtPm1faXNFbnRlcmluZ0Z1bGxTY3JlZW4gPSB0cnVlOworCisgICAgbV9wcml2YXRl
LT5tX2JhY2tncm91bmRXaW5kb3cgPSBhZG9wdFB0cihuZXcgTWVkaWFQbGF5ZXJQcml2YXRlRnVs
bHNjcmVlbldpbmRvdyhtX3ByaXZhdGUuZ2V0KCkpKTsKKyAgICBtX3ByaXZhdGUtPm1fYmFja2dy
b3VuZFdpbmRvdy0+Y3JlYXRlV2luZG93KDAsIGZhbHNlKTsKKyAgICA6OlNldFdpbmRvd1Bvcyht
X3ByaXZhdGUtPm1fYmFja2dyb3VuZFdpbmRvdy0+aHduZCgpLCBIV05EX1RPUCwgMCwgMCwgMCwg
MCwgU1dQX05PTU9WRSB8IFNXUF9OT1NJWkUgfCBTV1BfTk9BQ1RJVkFURSk7CisgICAgQk9PTCBz
dWNjZXNzID0gOjpBbmltYXRlV2luZG93KG1fcHJpdmF0ZS0+bV9iYWNrZ3JvdW5kV2luZG93LT5o
d25kKCksIGtGdWxsU2NyZWVuQW5pbWF0aW9uRHVyYXRpb24sIEFXX0JMRU5EKTsKKyAgICBtX3By
aXZhdGUtPm1fZW50ZXJGdWxsU2NyZWVuVGltZXIuc3RhcnRPbmVTaG90KHN1Y2Nlc3MgPyBrRnVs
bFNjcmVlbkFuaW1hdGlvbkR1cmF0aW9uIC8gMTAwMC4gOiAwKTsKK30KKwordm9pZCBXZWJGdWxs
U2NyZWVuQ29udHJvbGxlcjo6UHJpdmF0ZTo6ZW50ZXJGdWxsU2NyZWVuVGltZXJGaXJlZChUaW1l
cjxQcml2YXRlPiopCit7CisgICAgaWYgKCFtX2lzRW50ZXJpbmdGdWxsU2NyZWVuKQorICAgICAg
ICByZXR1cm47CisgICAgbV9pc0VudGVyaW5nRnVsbFNjcmVlbiA9IGZhbHNlOworCisgICAgaWYg
KG1faXNGdWxsU2NyZWVuKQorICAgICAgICByZXR1cm47CisgICAgbV9pc0Z1bGxTY3JlZW4gPSB0
cnVlOworCisgICAgbV9jbGllbnQtPndlYlZpZXdXaWxsRW50ZXJGdWxsU2NyZWVuKCk7CisKKyAg
ICBBU1NFUlQoIW1fZnVsbFNjcmVlbldpbmRvdyk7CisgICAgbV9mdWxsU2NyZWVuV2luZG93ID0g
YWRvcHRQdHIobmV3IE1lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3codGhpcykpOwor
ICAgIEFTU0VSVChtX2Z1bGxTY3JlZW5XaW5kb3cpOworICAgIG1fZnVsbFNjcmVlbldpbmRvdy0+
Y3JlYXRlV2luZG93KDAsIGZhbHNlKTsKKworICAgIEhXTkQgb3JpZ2luYWxIb3N0ID0gbV9jbGll
bnQtPndlYlZpZXdIb3N0V2luZG93KCk7CisgICAgbV9jbGllbnQtPnNldFdlYlZpZXdIb3N0V2lu
ZG93KG1fZnVsbFNjcmVlbldpbmRvdy0+aHduZCgpKTsKKworICAgIEludFJlY3Qgdmlld0ZyYW1l
KEludFBvaW50KCksIG1fZnVsbFNjcmVlbkZyYW1lLnNpemUoKSk7CisgICAgOjpTZXRXaW5kb3dQ
b3MobV9mdWxsU2NyZWVuV2luZG93LT5od25kKCksIEhXTkRfVE9QLCAwLCAwLCAwLCAwLCBTV1Bf
Tk9NT1ZFIHwgU1dQX05PU0laRSB8IFNXUF9OT0FDVElWQVRFKTsKKyAgICA6OlNldFdpbmRvd1Bv
cyhtX2NsaWVudC0+d2ViVmlld1dpbmRvdygpLCBIV05EX1RPUCwgMCwgMCwgdmlld0ZyYW1lLndp
ZHRoKCksIHZpZXdGcmFtZS5oZWlnaHQoKSwgU1dQX05PQUNUSVZBVEUpOworICAgIDo6SW52YWxp
ZGF0ZVJlY3QobV9jbGllbnQtPndlYlZpZXdXaW5kb3coKSwgMCwgdHJ1ZSk7CisgICAgOjpVcGRh
dGVXaW5kb3cobV9jbGllbnQtPndlYlZpZXdXaW5kb3coKSk7CisgICAgQk9PTCBzdWNjZXNzID0g
OjpBbmltYXRlV2luZG93KG1fZnVsbFNjcmVlbldpbmRvdy0+aHduZCgpLCBrRnVsbFNjcmVlbkFu
aW1hdGlvbkR1cmF0aW9uLCBBV19CTEVORCk7CisgICAgbV9vcmlnaW5hbEhvc3QgPSBvcmlnaW5h
bEhvc3Q7CisKKyAgICBtX2NsaWVudC0+d2ViVmlld0RpZEVudGVyRnVsbFNjcmVlbigpOworfQor
Cit2b2lkIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyOjpleGl0RnVsbFNjcmVlbigpCit7CisgICAg
aWYgKG1fcHJpdmF0ZS0+bV9pc0V4aXRpbmdGdWxsU2NyZWVuKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9wcml2YXRlLT5tX2lzRXhpdGluZ0Z1bGxTY3JlZW4gPSB0cnVlOworCisgICAgQVNTRVJU
KG1fcHJpdmF0ZS0+bV9iYWNrZ3JvdW5kV2luZG93KTsKKyAgICBCT09MIHN1Y2Nlc3MgPSA6OkFu
aW1hdGVXaW5kb3cobV9wcml2YXRlLT5tX2JhY2tncm91bmRXaW5kb3ctPmh3bmQoKSwga0Z1bGxT
Y3JlZW5BbmltYXRpb25EdXJhdGlvbiwgQVdfSElERSB8IEFXX0JMRU5EKTsKKyAgICBtX3ByaXZh
dGUtPm1fZXhpdEZ1bGxTY3JlZW5UaW1lci5zdGFydE9uZVNob3Qoc3VjY2VzcyA/IGtGdWxsU2Ny
ZWVuQW5pbWF0aW9uRHVyYXRpb24gLyAxMDAwLiA6IDApOworfQorCit2b2lkIFdlYkZ1bGxTY3Jl
ZW5Db250cm9sbGVyOjpQcml2YXRlOjpleGl0RnVsbFNjcmVlblRpbWVyRmlyZWQoVGltZXI8UHJp
dmF0ZT4qKQoreworICAgIGlmICghbV9pc0V4aXRpbmdGdWxsU2NyZWVuKQorICAgICAgICByZXR1
cm47CisgICAgbV9pc0V4aXRpbmdGdWxsU2NyZWVuID0gZmFsc2U7CisKKyAgICBpZiAoIW1faXNG
dWxsU2NyZWVuKQorICAgICAgICByZXR1cm47CisgICAgbV9pc0Z1bGxTY3JlZW4gPSBmYWxzZTsK
KworICAgIG1fY2xpZW50LT53ZWJWaWV3V2lsbEV4aXRGdWxsU2NyZWVuKCk7CisgICAgbV9jbGll
bnQtPnNldFdlYlZpZXdIb3N0V2luZG93KG1fb3JpZ2luYWxIb3N0KTsKKworICAgIDo6RGVzdHJv
eVdpbmRvdyhtX2Z1bGxTY3JlZW5XaW5kb3ctPmh3bmQoKSk7CisgICAgbV9mdWxsU2NyZWVuV2lu
ZG93ID0gMDsKKworICAgIG1fY2xpZW50LT53ZWJWaWV3RGlkRXhpdEZ1bGxTY3JlZW4oKTsKK30K
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKaW5kZXggYjBlMmRjNjY3MDZmNDY4OTkzYjhmNjVmZTc2
YjBjMmVjNmU0MjNkMy4uYTNiNzg5NWVhYTZjNDNlMmYzOWZmNmM1NzhiZDUyZGUxNjhmZmNjYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvd2luL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDExLTA1LTAyICBKZXIgTm9ibGUg
IDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEltcGxlbWVudCBGVUxMU0NSRUVOX0FQSSBvbiBXaW5kb3dzLCBQYXJ0
IDM6IFdlYktpdDIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTU5ODQ1CisKKyAgICAgICAgSW1wbGVtZW50YXRpb24gb2YgV2ViRnVsbFNjcmVlbkNvbnRy
b2xsZXIgaGFzIGJlZW4gbW92ZWQgaW50byBXZWJDb3JlLCBhbmQgCisgICAgICAgIHJlcXVpcmVk
IHZpcnV0YWwgZnVuY3Rpb25zIG9mIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyQ2xpZW50IGhhdmUg
YmVlbiBhZGRlZCB0bworICAgICAgICBXZWJWaWV3LiAgVGhlc2UgZnVuY3Rpb25zIGFyZSBtb3N0
bHkgc2ltcGxlIGFjY2Vzc29ycyBvZiBleGlzdGluZyBpdmFycywgYnV0IAorICAgICAgICBtX2Z1
bGxTY3JlZW5FbGVtZW50IGFuZCBpdHMgYWNjZXNzb3JzIGhhdmUgYWxzbyBiZWVuIGFkZGVkIHRv
IFdlYlZpZXcuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3Bw
OgorICAgICAgICAoV2ViQ2hyb21lQ2xpZW50OjplbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KToK
KyAgICAgICAgKiBXZWJGdWxsU2NyZWVuQ29udHJvbGxlci5jcHA6IFJlbW92ZWQuCisgICAgICAg
ICogV2ViS2l0LnZjcHJvai9XZWJLaXQudmNwcm9qOgorICAgICAgICAqIFdlYlZpZXcuY3BwOgor
ICAgICAgICAoV2ViVmlldzo6c2V0RnVsbFNjcmVlbkVsZW1lbnQpOiBBZGRlZCBhY2Nlc3Nvci4K
KyAgICAgICAgKFdlYlZJZXc6OmZ1bGxTY3JlZW5FbGVtZW50KTogRGl0dG8uCisgICAgICAgIChX
ZWJWaWV3Ojp3ZWJWaWV3V2luZG93KTogRGl0dG8uCisgICAgICAgIChXZWJWaWV3Ojp3ZWJWaWV3
SG9zdFdpbmRvdyk6IERpdHRvLgorICAgICAgICAoV2ViVmlldzo6c2V0V2ViVmlld0hvc3RXaW5k
b3cpOiBEaXR0by4KKyAgICAgICAgKFdlYlZpZXc6OndlYlZpZXdXaWxsRW50ZXJGdWxsU2NyZWVu
KTogUGFzcyB0aHJvdWdoIHRvIERvY3VtZW50LgorICAgICAgICAoV2ViVmlldzo6d2ViVmlld0Rp
ZEVudGVyRnVsbFNjcmVlbik6IERpdHRvLgorICAgICAgICAoV2ViVmlldzo6d2ViVmlld1dpbGxF
eGl0RnVsbFNjcmVlbik6IERpdHRvLgorICAgICAgICAoV2ViVmlldzo6d2ViVmlld0RpZEV4aXRG
dWxsU2NyZWVuKTogRGl0dG8uCisgICAgICAgICogV2ViVmlldy5oOgorCiAyMDExLTA0LTI5ICBK
ZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFk
YW0gUm9iZW4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50LmNwcAppbmRleCA0NjBkMTZjYWI3ZTE4ODY3MDZmNTFkODViNDQzMWUzMjlm
ZWU3OWI3Li42YTRiNDEzNGNlMDRkODY5YjUxNzUxNTUwMjM0YzAyYTdkMGU4MDEwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5j
cHAKQEAgLTkwNCw3ICs5MDQsNyBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6ZW50ZXJGdWxsU2Ny
ZWVuRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQogICAgICAgICAgICAgcmV0dXJuOwogICAg
IH0gCiAKLSAgICBtX3dlYlZpZXctPmZ1bGxTY3JlZW5Db250cm9sbGVyKCktPnNldEVsZW1lbnQo
ZWxlbWVudCk7CisgICAgbV93ZWJWaWV3LT5zZXRGdWxsU2NyZWVuRWxlbWVudChlbGVtZW50KTsK
ICAgICBtX3dlYlZpZXctPmZ1bGxTY3JlZW5Db250cm9sbGVyKCktPmVudGVyRnVsbFNjcmVlbigp
OwogfQogCkBAIC05MTgsNyArOTE4LDcgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmV4aXRGdWxs
U2NyZWVuRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIEFTU0VSVChlbGVtZW50ID09IG1fd2ViVmlldy0+ZnVsbFNjcmVlbkNvbnRy
b2xsZXIoKS0+ZWxlbWVudCgpKTsKKyAgICBBU1NFUlQoZWxlbWVudCA9PSBtX3dlYlZpZXctPmZ1
bGxTY3JlZW5FbGVtZW50KCkpOwogICAgIG1fd2ViVmlldy0+ZnVsbFNjcmVlbkNvbnRyb2xsZXIo
KS0+ZXhpdEZ1bGxTY3JlZW4oKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4v
V2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC93aW4vV2ViRnVsbFNj
cmVlbkNvbnRyb2xsZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDgyOWQy
OTg4NGNhMjk2OTY3MDY4OTMyY2U0NjI4MTBkYmYzZjYzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkZ1bGxTY3JlZW5D
b250cm9sbGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0
ZWQgMjAwOS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotCi0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotCi0jaW5jbHVkZSAiV2ViRnVsbFNjcmVl
bkNvbnRyb2xsZXIuaCIKLQotI2luY2x1ZGUgIldlYlZpZXcuaCIKLSNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9FbGVtZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9H
cmFwaGljc0xheWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9NZWRpYVBsYXllclByaXZhdGVGdWxs
c2NyZWVuV2luZG93Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9XZWJDb3JlSW5zdGFuY2VIYW5kbGUu
aD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLWNsYXNzIFdlYkZ1bGxTY3JlZW5Db250
cm9sbGVyOjpQcml2YXRlIDogcHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5DbGll
bnQgewotcHVibGljOgotICAgIFByaXZhdGUoV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIqIGNvbnRy
b2xsZXIsIFdlYlZpZXcqIHdlYlZpZXcpIAotICAgICAgICA6IGNvbnRyb2xsZXIoY29udHJvbGxl
cikKLSAgICAgICAgLCB3ZWJWaWV3KHdlYlZpZXcpCi0gICAgICAgICwgaG9zdFdpbmRvdygwKQot
ICAgICAgICAsIG9yaWdpbmFsSG9zdCgwKQotICAgICAgICAsIGlzRnVsbFNjcmVlbihmYWxzZSkK
LSAgICB7Ci0gICAgfQotICAgIHZpcnR1YWwgflByaXZhdGUoKSB7IH0KLQotICAgIHZpcnR1YWwg
TFJFU1VMVCBmdWxsc2NyZWVuQ2xpZW50V25kUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJB
TSk7Ci0gICAgCi0gICAgV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIqIGNvbnRyb2xsZXI7Ci0gICAg
UmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQ7Ci0gICAgV2ViVmlldyogd2ViVmlldzsKLSAgICBPd25Q
dHI8TWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdz4gZnVsbFNjcmVlbldpbmRvdzsK
LSAgICBJbnRSZWN0IGZ1bGxTY3JlZW5GcmFtZTsKLSAgICBIV05EIGhvc3RXaW5kb3c7Ci0gICAg
SFdORCBvcmlnaW5hbEhvc3Q7Ci0gICAgYm9vbCBpc0Z1bGxTY3JlZW47Ci19OwotCi1MUkVTVUxU
IFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyOjpQcml2YXRlOjpmdWxsc2NyZWVuQ2xpZW50V25kUHJv
YyhIV05EIGh3bmQsIFVJTlQgbXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQotewot
ICAgIExSRVNVTFQgbFJlc3VsdCA9IDA7Ci0KLSAgICBzd2l0Y2ggKG1zZykgewotICAgIGNhc2Ug
V01fQ1JFQVRFOgotICAgICAgICBob3N0V2luZG93ID0gaHduZDsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBXTV9ERVNUUk9ZOgotICAgICAgICBob3N0V2luZG93ID0gMDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBXTV9NT1ZFOgotICAgICAgICBmdWxsU2NyZWVuRnJhbWUuc2V0WChMT1dP
UkQobFBhcmFtKSk7Ci0gICAgICAgIGZ1bGxTY3JlZW5GcmFtZS5zZXRZKEhJV09SRChsUGFyYW0p
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXTV9TSVpFOgotICAgICAgICBmdWxsU2NyZWVu
RnJhbWUuc2V0V2lkdGgoTE9XT1JEKGxQYXJhbSkpOwotICAgICAgICBmdWxsU2NyZWVuRnJhbWUu
c2V0SGVpZ2h0KEhJV09SRChsUGFyYW0pKTsKLSAgICAgICAgaWYgKHdlYlZpZXctPnZpZXdXaW5k
b3coKSkKLSAgICAgICAgICAgIDo6U2V0V2luZG93UG9zKHdlYlZpZXctPnZpZXdXaW5kb3coKSwg
MCwgMCwgMCwgZnVsbFNjcmVlbkZyYW1lLndpZHRoKCksIGZ1bGxTY3JlZW5GcmFtZS5oZWlnaHQo
KSwgU1dQX05PUkVQT1NJVElPTiAgfCBTV1BfTk9NT1ZFKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBXTV9LRVlET1dOOgotICAgICAgICBpZiAod1BhcmFtID09IFZLX0VTQ0FQRSkgewotICAg
ICAgICAgICAgY29udHJvbGxlci0+ZXhpdEZ1bGxTY3JlZW4oKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIC8vIEZhbGwgdGhyb3VnaC4KLSAgICBkZWZhdWx0OgotICAg
ICAgICBsUmVzdWx0ID0gOjpEZWZXaW5kb3dQcm9jKGh3bmQsIG1zZywgd1BhcmFtLCBsUGFyYW0p
OwotICAgIH0KLQotICAgIHJldHVybiBsUmVzdWx0OwotfQotCi1XZWJGdWxsU2NyZWVuQ29udHJv
bGxlcjo6V2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIoV2ViVmlldyogd2ViVmlldykKLSAgICA6IG1f
cHJpdmF0ZShhZG9wdFB0cihuZXcgV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXI6OlByaXZhdGUodGhp
cywgd2ViVmlldykpKQotewotICAgIEFTU0VSVCh3ZWJWaWV3KTsKLX0KLQotV2ViRnVsbFNjcmVl
bkNvbnRyb2xsZXI6On5XZWJGdWxsU2NyZWVuQ29udHJvbGxlcigpCi17Ci19Ci0KLXZvaWQgV2Vi
RnVsbFNjcmVlbkNvbnRyb2xsZXI6OnNldEVsZW1lbnQoUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVt
ZW50KQotewotICAgIG1fcHJpdmF0ZS0+ZWxlbWVudCA9IGVsZW1lbnQ7Ci19Ci0KLUVsZW1lbnQq
IFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyOjplbGVtZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9wcml2YXRlLT5lbGVtZW50LmdldCgpOwotfQotCi1ib29sIFdlYkZ1bGxTY3JlZW5Db250cm9s
bGVyOjppc0Z1bGxTY3JlZW4oKSBjb25zdAotewotICAgIHJldHVybiBtX3ByaXZhdGUtPmlzRnVs
bFNjcmVlbjsKLX0KLQotdm9pZCBXZWJGdWxsU2NyZWVuQ29udHJvbGxlcjo6ZW50ZXJGdWxsU2Ny
ZWVuKCkKLXsKLSAgICBpZiAobV9wcml2YXRlLT5pc0Z1bGxTY3JlZW4pCi0gICAgICAgIHJldHVy
bjsKLSAgICBtX3ByaXZhdGUtPmlzRnVsbFNjcmVlbiA9IHRydWU7Ci0KLSAgICBBU1NFUlQobV9w
cml2YXRlLT5lbGVtZW50KTsKLSAgICBtX3ByaXZhdGUtPmVsZW1lbnQtPmRvY3VtZW50KCktPndl
YmtpdFdpbGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KG1fcHJpdmF0ZS0+ZWxlbWVudC5nZXQo
KSk7Ci0KLSAgICBBU1NFUlQoIW1fcHJpdmF0ZS0+ZnVsbFNjcmVlbldpbmRvdyk7Ci0gICAgbV9w
cml2YXRlLT5mdWxsU2NyZWVuV2luZG93ID0gYWRvcHRQdHIobmV3IE1lZGlhUGxheWVyUHJpdmF0
ZUZ1bGxzY3JlZW5XaW5kb3cobV9wcml2YXRlLmdldCgpKSk7Ci0gICAgQVNTRVJUKG1fcHJpdmF0
ZS0+ZnVsbFNjcmVlbldpbmRvdyk7Ci0KLSAgICBtX3ByaXZhdGUtPmZ1bGxTY3JlZW5XaW5kb3ct
PmNyZWF0ZVdpbmRvdygwKTsKLSAgICBBU1NFUlQobV9wcml2YXRlLT5ob3N0V2luZG93KTsKLQot
ICAgIEhXTkQgb3JpZ2luYWxIb3N0ID0gMDsKLSAgICBpZiAoRkFJTEVEKG1fcHJpdmF0ZS0+d2Vi
Vmlldy0+aG9zdFdpbmRvdyhyZWludGVycHJldF9jYXN0PE9MRV9IQU5ETEUqPigmb3JpZ2luYWxI
b3N0KSkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoRkFJTEVEKG1fcHJpdmF0ZS0+d2Vi
Vmlldy0+c2V0SG9zdFdpbmRvdyhyZWludGVycHJldF9jYXN0PE9MRV9IQU5ETEU+KG1fcHJpdmF0
ZS0+aG9zdFdpbmRvdykpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50UmVjdCB2aWV3RnJh
bWUoSW50UG9pbnQoKSwgbV9wcml2YXRlLT5mdWxsU2NyZWVuRnJhbWUuc2l6ZSgpKTsKLSAgICA6
OlNldFdpbmRvd1BvcyhtX3ByaXZhdGUtPndlYlZpZXctPnZpZXdXaW5kb3coKSwgSFdORF9UT1As
IDAsIDAsIHZpZXdGcmFtZS53aWR0aCgpLCB2aWV3RnJhbWUuaGVpZ2h0KCksIFNXUF9OT1JFUE9T
SVRJT04pOwotICAgIDo6U2hvd1dpbmRvdyhtX3ByaXZhdGUtPmhvc3RXaW5kb3csIFNXX1NIT1cp
OwotICAgIG1fcHJpdmF0ZS0+d2ViVmlldy0+cmVwYWludCh2aWV3RnJhbWUsIGZhbHNlLCB0cnVl
KTsKLSAgICBtX3ByaXZhdGUtPm9yaWdpbmFsSG9zdCA9IG9yaWdpbmFsSG9zdDsKLQotICAgIG1f
cHJpdmF0ZS0+ZWxlbWVudC0+ZG9jdW1lbnQoKS0+d2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuRm9y
RWxlbWVudChtX3ByaXZhdGUtPmVsZW1lbnQuZ2V0KCkpOwotfQotCi12b2lkIFdlYkZ1bGxTY3Jl
ZW5Db250cm9sbGVyOjpleGl0RnVsbFNjcmVlbigpCi17Ci0gICAgaWYgKCFtX3ByaXZhdGUtPmlz
RnVsbFNjcmVlbikKLSAgICAgICAgcmV0dXJuOwotICAgIG1fcHJpdmF0ZS0+aXNGdWxsU2NyZWVu
ID0gZmFsc2U7Ci0KLSAgICBBU1NFUlQobV9wcml2YXRlLT5lbGVtZW50KTsKLSAgICBtX3ByaXZh
dGUtPmVsZW1lbnQtPmRvY3VtZW50KCktPndlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbkZvckVsZW1l
bnQobV9wcml2YXRlLT5lbGVtZW50LmdldCgpKTsKLQotICAgIEFTU0VSVChtX3ByaXZhdGUtPmhv
c3RXaW5kb3cpOwotICAgIGlmIChGQUlMRUQobV9wcml2YXRlLT53ZWJWaWV3LT5zZXRIb3N0V2lu
ZG93KHJlaW50ZXJwcmV0X2Nhc3Q8T0xFX0hBTkRMRT4obV9wcml2YXRlLT5vcmlnaW5hbEhvc3Qp
KSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6RGVzdHJveVdpbmRvdyhtX3ByaXZhdGUtPmhv
c3RXaW5kb3cpOwotICAgIEFTU0VSVCghbV9wcml2YXRlLT5ob3N0V2luZG93KTsKLSAgICBtX3By
aXZhdGUtPmZ1bGxTY3JlZW5XaW5kb3cgPSAwOwotCi0gICAgbV9wcml2YXRlLT5lbGVtZW50LT5k
b2N1bWVudCgpLT53ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQobV9wcml2YXRlLT5l
bGVtZW50LmdldCgpKTsKLSAgICBtX3ByaXZhdGUtPmVsZW1lbnQgPSAwOwotfQotCi0jZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYktpdC52Y3Byb2ovV2ViS2l0LnZjcHJv
aiBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYktpdC52Y3Byb2ovV2ViS2l0LnZjcHJvagppbmRleCBh
NWQ2NzJmNTUyMDI5MjNlNGFiZDYzNWEzODk0MTQzYzRiZDQyOWViLi40ZDI1ZjQ0OGZjMTlhMjgx
MDk2YjIzYWE3ZGZmNWE4NWQ2ODBkNGQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9X
ZWJLaXQudmNwcm9qL1dlYktpdC52Y3Byb2oKKysrIGIvU291cmNlL1dlYktpdC93aW4vV2ViS2l0
LnZjcHJvai9XZWJLaXQudmNwcm9qCkBAIC01MTIsMTAgKzUxMiw2IEBACiAJCQkJPgogCQkJPC9G
aWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFdlYkZ1bGxTY3JlZW5Db250cm9s
bGVyLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XFdlYkdlb2xvY2F0aW9uUG9saWN5TGlzdGVuZXIuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC05
MzIsMTAgKzkyOCw2IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+
Ci0JCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cV2ViR2VvbG9jYXRpb25Qb2xpY3lMaXN0
ZW5lci5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93
aW4vV2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAppbmRleCAyZjcy
ZDVlOWRlYTVlODljOTdiZjcyNDRlZWU2OTc0NmIyZGQzMGFiLi42NGZjYjFmODFjZTUwYTBhODYz
OTNiZWQ0Yjg5OGFjY2I0YjZlMzFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJW
aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcApAQCAtMTYwLDEwICsx
NjAsNiBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1DQUxheWVyLmg+CiAjZW5kaWYKIAot
I2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSNpbmNsdWRlICJXZWJGdWxsU2NyZWVuQ29udHJv
bGxlci5oIgotI2VuZGlmCi0KICNpbmNsdWRlIDxTaGxPYmouaD4KICNpbmNsdWRlIDxjb211dGls
Lmg+CiAjaW5jbHVkZSA8ZGltbS5oPgpAQCAtNjc2Niw0ICs2NzYyLDUxIEBAIFdlYkZ1bGxTY3Jl
ZW5Db250cm9sbGVyKiBXZWJWaWV3OjpmdWxsU2NyZWVuQ29udHJvbGxlcigpCiAgICAgICAgIG1f
ZnVsbHNjcmVlbkNvbnRyb2xsZXIgPSBhZG9wdFB0cihuZXcgV2ViRnVsbFNjcmVlbkNvbnRyb2xs
ZXIodGhpcykpOwogICAgIHJldHVybiBtX2Z1bGxzY3JlZW5Db250cm9sbGVyLmdldCgpOwogfQor
Cit2b2lkIFdlYlZpZXc6OnNldEZ1bGxTY3JlZW5FbGVtZW50KFBhc3NSZWZQdHI8RWxlbWVudD4g
ZWxlbWVudCkKK3sKKyAgICBtX2Z1bGxTY3JlZW5FbGVtZW50ID0gZWxlbWVudDsKK30KKworSFdO
RCBXZWJWaWV3Ojp3ZWJWaWV3V2luZG93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV92aWV3V2lu
ZG93OworfQorCitIV05EIFdlYlZpZXc6OndlYlZpZXdIb3N0V2luZG93KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9ob3N0V2luZG93OworfQorCit2b2lkIFdlYlZpZXc6OnNldFdlYlZpZXdIb3N0
V2luZG93KEhXTkQgaG9zdFdpbmRvdykKK3sKKyAgICBzZXRIb3N0V2luZG93KHJlaW50ZXJwcmV0
X2Nhc3Q8T0xFX0hBTkRMRT4oaG9zdFdpbmRvdykpOworfQorCit2b2lkIFdlYlZpZXc6OndlYlZp
ZXdXaWxsRW50ZXJGdWxsU2NyZWVuKCkKK3sKKyAgICBBU1NFUlQobV9mdWxsU2NyZWVuRWxlbWVu
dCk7CisgICAgbV9mdWxsU2NyZWVuRWxlbWVudC0+ZG9jdW1lbnQoKS0+d2Via2l0V2lsbEVudGVy
RnVsbFNjcmVlbkZvckVsZW1lbnQobV9mdWxsU2NyZWVuRWxlbWVudC5nZXQoKSk7Cit9CisKK3Zv
aWQgV2ViVmlldzo6d2ViVmlld0RpZEVudGVyRnVsbFNjcmVlbigpCit7CisgICAgQVNTRVJUKG1f
ZnVsbFNjcmVlbkVsZW1lbnQpOworICAgIG1fZnVsbFNjcmVlbkVsZW1lbnQtPmRvY3VtZW50KCkt
PndlYmtpdERpZEVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQobV9mdWxsU2NyZWVuRWxlbWVudC5n
ZXQoKSk7Cit9CisKK3ZvaWQgV2ViVmlldzo6d2ViVmlld1dpbGxFeGl0RnVsbFNjcmVlbigpCit7
CisgICAgQVNTRVJUKG1fZnVsbFNjcmVlbkVsZW1lbnQpOworICAgIG1fZnVsbFNjcmVlbkVsZW1l
bnQtPmRvY3VtZW50KCktPndlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQobV9mdWxs
U2NyZWVuRWxlbWVudC5nZXQoKSk7Cit9CisKK3ZvaWQgV2ViVmlldzo6d2ViVmlld0RpZEV4aXRG
dWxsU2NyZWVuKCkKK3sKKyAgICBBU1NFUlQobV9mdWxsU2NyZWVuRWxlbWVudCk7CisgICAgbV9m
dWxsU2NyZWVuRWxlbWVudC0+ZG9jdW1lbnQoKS0+d2Via2l0RGlkRXhpdEZ1bGxTY3JlZW5Gb3JF
bGVtZW50KG1fZnVsbFNjcmVlbkVsZW1lbnQuZ2V0KCkpOworICAgIG1fZnVsbFNjcmVlbkVsZW1l
bnQgPSAwOworfQorCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vV2Vi
Vmlldy5oIGIvU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5oCmluZGV4IGJjMzY0NjA1Yjk3OGRi
MzRlODE0NjYyNjgzZWQ0ZjcxOWI5MDIwNGQuLmIzMTlhODAwZTg3ZTVjNWVlZjlkOWExOTU3MzRj
NDRmNjQ3NWJkOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmgKQEAgLTE0LDcgKzE0LDcgQEAKICAqCiAgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCiAgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DZkxVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJdUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgogICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCiAgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKQEAgLTQ0LDcgKzQ0LDEz
IEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2luY2x1ZGUgPFdlYkNvcmUv
Q0FDRkxheWVyVHJlZUhvc3RDbGllbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5
ZXJDbGllbnQuaD4KKyNlbmRpZgorCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorI2luY2x1
ZGUgPFdlYkNvcmUvV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuaD4KKyNlbmRpZgogCisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNz
IENBQ0ZMYXllclRyZWVIb3N0OwogfQpAQCAtNTcsMTQgKzYzLDkgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogY2xhc3MgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcjsKIGNsYXNzIFdlYkJhY2tGb3J3
YXJkTGlzdDsKIGNsYXNzIFdlYkZyYW1lOwotY2xhc3MgV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXI7
CiBjbGFzcyBXZWJJbnNwZWN0b3I7CiBjbGFzcyBXZWJJbnNwZWN0b3JDbGllbnQ7CiAKLSNpZiBF
TkFCTEUoRlVMTFNDUkVFTl9BUEkpCi1jbGFzcyBXZWJGdWxsU2NyZWVuQ29udHJvbGxlcjsKLSNl
bmRpZgotCiB0eXBlZGVmIFdlYkNvcmU6OlJlZkNvdW50ZWRHRElIYW5kbGU8SEJJVE1BUD4gUmVm
Q291bnRlZEhCSVRNQVA7CiB0eXBlZGVmIFdlYkNvcmU6OlJlZkNvdW50ZWRHRElIYW5kbGU8SFJH
Tj4gUmVmQ291bnRlZEhSR047CiAKQEAgLTg4LDYgKzg5LDkgQEAgY2xhc3MgV2ViVmlldwogICAg
ICwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudAogICAgICwgV2ViQ29yZTo6Q0FDRkxheWVy
VHJlZUhvc3RDbGllbnQKICNlbmRpZgorI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICAs
IFdlYkNvcmU6OldlYkZ1bGxTY3JlZW5Db250cm9sbGVyQ2xpZW50CisjZW5kaWYKIHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgV2ViVmlldyogY3JlYXRlSW5zdGFuY2UoKTsKQEAgLTk0NCw3ICs5NDgs
OSBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogICAgIGJvb2wgc3VwcG9y
dHNGdWxsU2NyZWVuRm9yRWxlbWVudChjb25zdCBXZWJDb3JlOjpFbGVtZW50KiwgYm9vbCB3aXRo
S2V5Ym9hcmQpIGNvbnN0OwogICAgIGJvb2wgaXNGdWxsU2NyZWVuKCkgY29uc3Q7Ci0gICAgV2Vi
RnVsbFNjcmVlbkNvbnRyb2xsZXIqIGZ1bGxTY3JlZW5Db250cm9sbGVyKCk7CisgICAgV2ViQ29y
ZTo6V2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIqIGZ1bGxTY3JlZW5Db250cm9sbGVyKCk7CisgICAg
dm9pZCBzZXRGdWxsU2NyZWVuRWxlbWVudChQYXNzUmVmUHRyPFdlYkNvcmU6OkVsZW1lbnQ+KTsK
KyAgICBXZWJDb3JlOjpFbGVtZW50KiBmdWxsU2NyZWVuRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJu
IG1fZnVsbFNjcmVlbkVsZW1lbnQuZ2V0KCk7IH0KICNlbmRpZgogCiBwcml2YXRlOgpAQCAtMTAx
MCw2ICsxMDE2LDE2IEBAIHByb3RlY3RlZDoKIAogICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dSZWNl
aXZlZE1lc3NhZ2UoSFdORCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSk7CiAKKyNpZiBF
TkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgdmlydHVhbCBIV05EIHdlYlZpZXdXaW5kb3coKSBj
b25zdDsKKyAgICB2aXJ0dWFsIEhXTkQgd2ViVmlld0hvc3RXaW5kb3coKSBjb25zdDsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0V2ViVmlld0hvc3RXaW5kb3coSFdORCk7CisgICAgdmlydHVhbCB2b2lk
IHdlYlZpZXdXaWxsRW50ZXJGdWxsU2NyZWVuKCk7CisgICAgdmlydHVhbCB2b2lkIHdlYlZpZXdE
aWRFbnRlckZ1bGxTY3JlZW4oKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2ViVmlld1dpbGxFeGl0RnVs
bFNjcmVlbigpOworICAgIHZpcnR1YWwgdm9pZCB3ZWJWaWV3RGlkRXhpdEZ1bGxTY3JlZW4oKTsK
KyNlbmRpZgorCiAgICAgVUxPTkcgbV9yZWZDb3VudDsKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAg
ICAgYm9vbCBtX2RlbGV0aW9uSGFzQmVndW47CkBAIC0xMTAzLDcgKzExMTksOCBAQCBwcm90ZWN0
ZWQ6CiAgICAgUmVmUHRyPFdlYkNvcmU6Okhpc3RvcnlJdGVtPiBtX2dsb2JhbEhpc3RvcnlJdGVt
OwogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIE93blB0cjxXZWJGdWxsU2NyZWVu
Q29udHJvbGxlcj4gbV9mdWxsc2NyZWVuQ29udHJvbGxlcjsKKyAgICBSZWZQdHI8V2ViQ29yZTo6
RWxlbWVudD4gbV9mdWxsU2NyZWVuRWxlbWVudDsKKyAgICBPd25QdHI8V2ViQ29yZTo6V2ViRnVs
bFNjcmVlbkNvbnRyb2xsZXI+IG1fZnVsbHNjcmVlbkNvbnRyb2xsZXI7CiAjZW5kaWYKIH07CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA4M2ZmNzU4NDE5NTFhODBjYTVhM2JmYjk4MzdlNDg3ODQ1YTM1MGIxLi41
ODYyZjQ1YzFkM2VjZjhlMzdmYTQyMDVhYWFmYzFmZDkxNDJmMGY0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDMgQEAKKzIwMTEtMDUtMDIgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVt
ZW50IEZVTExTQ1JFRU5fQVBJIG9uIFdpbmRvd3MsIFBhcnQgMzogV2ViS2l0MgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk4NDUKKworICAgICAgICBJ
bXBsZW1lbnQgYSBzaW1pbGFyIGZ1bGwgc2NyZWVuIG1vZGUgdG8gV2ViS2l0OyBSZS11c2UgdGhl
IHNhbWUKKyAgICAgICAgZnVsbCBzY3JlZW4gd2luZG93IGNsYXNzIHVzZWQgaW4gV2ViS2l0IGlu
IHRoZSBuZXcgV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuCisgICAgICAgIE5vIGFuaW1hdGlvbnMg
KHlldCksIHNvIG1hbnkgb2YgdGhlIHN0dWJzIHJlbWFpbiB1bmltcGxlbWVudGVkLgorCisgICAg
ICAgICogVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmll
dzo6b25LZXlFdmVudCk6IEhhbmRsZSBWS19FU0NBUEUgYW5kIGNhbmNlbCBmdWxsIHNjcmVlbgor
ICAgICAgICAgICAgbW9kZSBpZiBjYXVnaHQuCisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OmZ1
bGxTY3JlZW5Db250cm9sbGVyKTogTGF6aWx5IGluc3RhbnRpYXRlIG1fZnVsbFNjcmVlbkNvbnRy
b2xsZXIuCisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OndlYlZpZXdXaW5kb3cpOiBBZGRlZCBh
Y2Nlc3Nvci4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6d2ViVmlld0hvc3RXaW5kb3cpOiBE
aXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6c2V0V2ViVmlld0hvc3RXaW5kb3cpOiBE
aXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6d2ViVmlld1dpbGxFbnRlckZ1bGxTY3Jl
ZW4pOiBQYXNzIHRocm91Z2ggdG8gV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS4KKyAgICAgICAg
KFdlYktpdDo6V2ViVmlldzo6d2ViVmlld0RpZEVudGVyRnVsbFNjcmVlbik6IERpdHRvLgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3Ojp3ZWJWaWV3V2lsbEV4aXRGdWxsU2NyZWVuKTogRGl0dG8u
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OndlYlZpZXdEaWRFeGl0RnVsbFNjcmVlbik6IERp
dHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViVmlldy5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy93aW4vV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eVdpbi5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHk6OmVudGVyRnVsbFNjcmVlbik6IFBhc3MgdGhy
b3VnaCB0byAKKyAgICAgICAgICAgIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyLgorICAgICAgICAo
V2ViS2l0OjpXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5OjpleGl0RnVsbFNjcmVlbik6IERpdHRv
LgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXc6OldlYlZpZXcpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpvbktleUV2ZW50
KTogSGFuZGxlIHRoZSBlc2NhcGUga2V5IGFuZCBleGl0CisgICAgICAgICAgIGZ1bGwgc2NyZWVu
IG1vZGUgd2hlbiBkZXRlY3RlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6ZnVsbFNjcmVl
bldpbmRvd0NvbnRyb2xsZXIpOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlZp
ZXcuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0Z1bGxTY3JlZW4vd2luL1dlYkZ1bGxTY3JlZW5N
YW5hZ2VyV2luLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnVsbFNjcmVlbk1hbmFnZXJXaW46
On5XZWJGdWxsU2NyZWVuTWFuYWdlcldpbik6CisgICAgICAgIChXZWJLaXQ6OldlYkZ1bGxTY3Jl
ZW5NYW5hZ2VyV2luOjpzZXRSb290RnVsbFNjcmVlbkxheWVyKTogSG9zdCB0aGUgcm9vdAorICAg
ICAgICAgICAgZnVsbCBzY3JlZW4gbGF5ZXIgaWYgaXQgZ2V0cyBkZXRhY2hlZC4KKyAgICAgICAg
KiBXZWJQcm9jZXNzL0Z1bGxTY3JlZW4vd2luL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyV2luLmg6Cisg
ICAgICAgICogd2luL1dlYktpdDIudmNwcm9qOgorCiAyMDExLTA0LTI4ICBKZXIgTm9ibGUgIDxq
ZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEpvbiBIb25leWN1dHQu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYkZ1bGxTY3JlZW5N
YW5hZ2VyUHJveHlXaW4uY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJGdWxs
U2NyZWVuTWFuYWdlclByb3h5V2luLmNwcAppbmRleCBkY2FjNjg5MzE0ZjA3MDc2Y2YwNTk2ZTgw
YTExZTM2Yjg3NTM5NzFlLi5iNjE1NGFkYTMzMDRlN2NlZTQ1Y2NkMThhNjFiZGFkMWU5ZmY4NGZi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYkZ1bGxTY3JlZW5N
YW5hZ2VyUHJveHlXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2Vi
RnVsbFNjcmVlbk1hbmFnZXJQcm94eVdpbi5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVO
QUJMRShGVUxMU0NSRUVOX0FQSSkKIAorI2luY2x1ZGUgIldlYlZpZXcuaCIKICNpbmNsdWRlIDxX
ZWJDb3JlL0ludFJlY3QuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0zNiwxNCArMzcsMTQg
QEAgdm9pZCBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5OjplbnRlckZ1bGxTY3JlZW4oKQogewog
ICAgIGlmICghbV93ZWJWaWV3KQogICAgICAgICByZXR1cm47Ci0gICAgLy8gRklYTUU6IEltcGxl
bWVudAorICAgIG1fd2ViVmlldy0+ZnVsbFNjcmVlbkNvbnRyb2xsZXIoKS0+ZW50ZXJGdWxsU2Ny
ZWVuKCk7CiB9CiAKIHZvaWQgV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eTo6ZXhpdEZ1bGxTY3Jl
ZW4oKQogewogICAgIGlmICghbV93ZWJWaWV3KQogICAgICAgICByZXR1cm47Ci0gICAgLy8gRklY
TUU6IEltcGxlbWVudAorICAgIG1fd2ViVmlldy0+ZnVsbFNjcmVlbkNvbnRyb2xsZXIoKS0+ZXhp
dEZ1bGxTY3JlZW4oKTsKIH0KIAogdm9pZCBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5OjpiZWdh
bkVudGVyRnVsbFNjcmVlbkFuaW1hdGlvbigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9X
ZWJWaWV3LmNwcAppbmRleCA4Y2VjYjAyZmIzYzcyOGYwOGY1Yzc5MGEzODlkMDc5NGI3NmY2NTk2
Li5mOWEwNDZmZWE3MWM5ZmRmNzRmN2FjOTE5MDhlZDE2MDBlMWM5NWRkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAKQEAgLTU1LDYgKzU1LDEwIEBACiAjaW5jbHVk
ZSA8V2ViQ29yZS9XaW5kb3dzVG91Y2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAorI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyNpbmNsdWRlICJXZWJGdWxsU2NyZWVu
TWFuYWdlclByb3h5LmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIEltZSB7CiAvLyBXZSBuZWVkIHRo
ZXNlIGZ1bmN0aW9ucyBpbiBhIHNlcGFyYXRlIG5hbWVzcGFjZSwgYmVjYXVzZSBpbiB0aGUgZ2xv
YmFsIG5hbWVzcGFjZSB0aGV5IGNvbmZsaWN0CiAvLyB3aXRoIHRoZSBkZWZpbml0aW9ucyBpbiBp
bW0uaCBvbmx5IGJ5IHRoZSB0eXBlIG1vZGlmaWVyICh0aGUgbWFjcm8gZGVmaW5lcyB0aGVtIGFz
IHN0YXRpYykgYW5kCkBAIC0yOTksNiArMzAzLDEwIEBAIFdlYlZpZXc6OldlYlZpZXcoUkVDVCBy
ZWN0LCBXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCwgSFdORCBw
CiAKICAgICAvLyBJbml0aWFsaXplIHRoZSB0b3AgbGV2ZWwgcGFyZW50IHdpbmRvdyBhbmQgcmVn
aXN0ZXIgaXQgd2l0aCB0aGUgV2luZG93TWVzc2FnZUJyb2FkY2FzdGVyLgogICAgIHdpbmRvd0Fu
Y2VzdHJ5RGlkQ2hhbmdlKCk7CisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgbV9w
YWdlLT5mdWxsU2NyZWVuTWFuYWdlcigpLT5zZXRXZWJWaWV3KHRoaXMpOworI2VuZGlmCiB9CiAK
IFdlYlZpZXc6On5XZWJWaWV3KCkKQEAgLTYwOCw2ICs2MTYsMTQgQEAgTFJFU1VMVCBXZWJWaWV3
Ojpvbkdlc3R1cmUoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJB
TSBsUGFyYW0KIAogTFJFU1VMVCBXZWJWaWV3OjpvbktleUV2ZW50KEhXTkQgaFduZCwgVUlOVCBt
ZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtLCBib29sJiBoYW5kbGVkKQogewor
I2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICAvLyBUcmFwIHRoZSBFU0Mga2V5IHdoZW4g
aW4gZnVsbCBzY3JlZW4gbW9kZS4KKyAgICBpZiAobWVzc2FnZSA9PSBXTV9LRVlET1dOICYmIHdQ
YXJhbSA9PSBWS19FU0NBUEUgJiYgbV9mdWxsU2NyZWVuQ29udHJvbGxlciAmJiBtX2Z1bGxTY3Jl
ZW5Db250cm9sbGVyLT5pc0Z1bGxTY3JlZW4oKSkgeworICAgICAgICBtX2Z1bGxTY3JlZW5Db250
cm9sbGVyLT5leGl0RnVsbFNjcmVlbigpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
I2VuZGlmCisKICAgICBtX3BhZ2UtPmhhbmRsZUtleWJvYXJkRXZlbnQoTmF0aXZlV2ViS2V5Ym9h
cmRFdmVudChoV25kLCBtZXNzYWdlLCB3UGFyYW0sIGxQYXJhbSkpOwogCiAgICAgLy8gV2UgY2xh
aW0gaGVyZSB0byBhbHdheXMgaGF2ZSBoYW5kbGVkIHRoZSBldmVudC4gSWYgdGhlIGV2ZW50IGlz
IG5vdCBpbiBmYWN0IGhhbmRsZWQsIHdlIHdpbGwKQEAgLTE2NTAsNCArMTY2Niw0OCBAQCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlZpZXc6OkRyb3AoSURhdGFPYmplY3QqIHBEYXRhT2Jq
ZWN0LCBEV09SRCBncmZLZXlTdAogICAgIHJldHVybiBTX09LOwogfQogCisjaWYgRU5BQkxFKEZV
TExTQ1JFRU5fQVBJKQorV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIqIFdlYlZpZXc6OmZ1bGxTY3Jl
ZW5Db250cm9sbGVyKCkKK3sKKyAgICBpZiAoIW1fZnVsbFNjcmVlbkNvbnRyb2xsZXIpCisgICAg
ICAgIG1fZnVsbFNjcmVlbkNvbnRyb2xsZXIgPSBhZG9wdFB0cihuZXcgV2ViRnVsbFNjcmVlbkNv
bnRyb2xsZXIodGhpcykpOworICAgIHJldHVybiBtX2Z1bGxTY3JlZW5Db250cm9sbGVyLmdldCgp
OworfQorCitIV05EIFdlYlZpZXc6OndlYlZpZXdXaW5kb3coKSBjb25zdAoreworICAgIHJldHVy
biBtX3dpbmRvdzsKK30KKworSFdORCBXZWJWaWV3Ojp3ZWJWaWV3SG9zdFdpbmRvdygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIDo6R2V0UGFyZW50KG1fd2luZG93KTsKK30KKwordm9pZCBXZWJWaWV3
OjpzZXRXZWJWaWV3SG9zdFdpbmRvdyhIV05EIGhvc3RXaW5kb3cpCit7CisgICAgc2V0UGFyZW50
V2luZG93KGhvc3RXaW5kb3cpOworfQorCit2b2lkIFdlYlZpZXc6OndlYlZpZXdXaWxsRW50ZXJG
dWxsU2NyZWVuKCkKK3sKKyAgICBwYWdlKCktPmZ1bGxTY3JlZW5NYW5hZ2VyKCktPndpbGxFbnRl
ckZ1bGxTY3JlZW4oKTsKK30KKwordm9pZCBXZWJWaWV3Ojp3ZWJWaWV3RGlkRW50ZXJGdWxsU2Ny
ZWVuKCkKK3sKKyAgICBwYWdlKCktPmZ1bGxTY3JlZW5NYW5hZ2VyKCktPmRpZEVudGVyRnVsbFNj
cmVlbigpOworfQorCit2b2lkIFdlYlZpZXc6OndlYlZpZXdXaWxsRXhpdEZ1bGxTY3JlZW4oKQor
eworICAgIHBhZ2UoKS0+ZnVsbFNjcmVlbk1hbmFnZXIoKS0+d2lsbEV4aXRGdWxsU2NyZWVuKCk7
Cit9CisKK3ZvaWQgV2ViVmlldzo6d2ViVmlld0RpZEV4aXRGdWxsU2NyZWVuKCkKK3sKKyAgICBw
YWdlKCktPmZ1bGxTY3JlZW5NYW5hZ2VyKCktPmRpZEV4aXRGdWxsU2NyZWVuKCk7Cit9CisKKyNl
bmRpZgogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3Mvd2luL1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2Vi
Vmlldy5oCmluZGV4IGQ2MjMxMWM5OGE5ZWYyYjJhNDY2MDBjYTkzMjMzZTk1ZTI2ZDRjZGUuLjJj
YjE5YWNhNDNmZmRmNWU3NmM5YWU2NjhkYmRhMmQ1MzRlZjlmMmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy93aW4vV2ViVmlldy5oCkBAIC00MCwxMyArNDAsMjUgQEAKICNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAorI2lmIEVOQUJMRShGVUxM
U0NSRUVOX0FQSSkKKyNpbmNsdWRlIDxXZWJDb3JlL1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyLmg+
CisjZW5kaWYKKwogaW50ZXJmYWNlIElEcm9wVGFyZ2V0SGVscGVyOwogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogY2xhc3MgRHJhd2luZ0FyZWFQcm94eTsKIAotY2xhc3MgV2ViVmlldyA6IHB1Ymxp
YyBBUElPYmplY3QsIHB1YmxpYyBQYWdlQ2xpZW50LCBXZWJDb3JlOjpXaW5kb3dNZXNzYWdlTGlz
dGVuZXIsIHB1YmxpYyBJRHJvcFRhcmdldCB7CitjbGFzcyBXZWJWaWV3CisgICAgOiBwdWJsaWMg
QVBJT2JqZWN0CisgICAgLCBwdWJsaWMgUGFnZUNsaWVudAorICAgICwgV2ViQ29yZTo6V2luZG93
TWVzc2FnZUxpc3RlbmVyCisgICAgLCBwdWJsaWMgSURyb3BUYXJnZXQgCisjaWYgRU5BQkxFKEZV
TExTQ1JFRU5fQVBJKQorICAgICwgV2ViQ29yZTo6V2ViRnVsbFNjcmVlbkNvbnRyb2xsZXJDbGll
bnQKKyNlbmRpZgorewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYlZpZXc+IGNy
ZWF0ZShSRUNUIHJlY3QsIFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYlBhZ2VHcm91cCogcGFnZUdy
b3VwLCBIV05EIHBhcmVudFdpbmRvdykKICAgICB7CkBAIC04NSw2ICs5NywxMCBAQCBwdWJsaWM6
CiAKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UoKSBjb25zdCB7IHJldHVybiBtX3BhZ2UuZ2V0KCk7
IH0KIAorI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBXZWJDb3JlOjpXZWJGdWxsU2Ny
ZWVuQ29udHJvbGxlciogZnVsbFNjcmVlbkNvbnRyb2xsZXIoKTsKKyNlbmRpZgorCiBwcml2YXRl
OgogICAgIFdlYlZpZXcoUkVDVCwgV2ViQ29udGV4dCosIFdlYlBhZ2VHcm91cCosIEhXTkQgcGFy
ZW50V2luZG93KTsKIApAQCAtMTk1LDYgKzIxMSwxNiBAQCBwcml2YXRlOgogICAgIC8vIFdlYkNv
cmU6OldpbmRvd01lc3NhZ2VMaXN0ZW5lcgogICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dSZWNlaXZl
ZE1lc3NhZ2UoSFdORCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSk7CiAKKyNpZiBFTkFC
TEUoRlVMTFNDUkVFTl9BUEkpCisgICAgdmlydHVhbCBIV05EIHdlYlZpZXdXaW5kb3coKSBjb25z
dDsKKyAgICB2aXJ0dWFsIEhXTkQgd2ViVmlld0hvc3RXaW5kb3coKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0V2ViVmlld0hvc3RXaW5kb3coSFdORCk7CisgICAgdmlydHVhbCB2b2lkIHdl
YlZpZXdXaWxsRW50ZXJGdWxsU2NyZWVuKCk7CisgICAgdmlydHVhbCB2b2lkIHdlYlZpZXdEaWRF
bnRlckZ1bGxTY3JlZW4oKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2ViVmlld1dpbGxFeGl0RnVsbFNj
cmVlbigpOworICAgIHZpcnR1YWwgdm9pZCB3ZWJWaWV3RGlkRXhpdEZ1bGxTY3JlZW4oKTsKKyNl
bmRpZgorCiAgICAgSFdORCBtX3dpbmRvdzsKICAgICBIV05EIG1fdG9wTGV2ZWxQYXJlbnRXaW5k
b3c7CiAgICAgSFdORCBtX3Rvb2xUaXBXaW5kb3c7CkBAIC0yMzQsNiArMjYwLDEwIEBAIHByaXZh
dGU6CiAgICAgaW50IG1fb3ZlclBhblk7CiAKICAgICBib29sIG1fZ2VzdHVyZVJlYWNoZWRTY3Jv
bGxpbmdMaW1pdDsKKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBPd25QdHI8V2Vi
Q29yZTo6V2ViRnVsbFNjcmVlbkNvbnRyb2xsZXI+IG1fZnVsbFNjcmVlbkNvbnRyb2xsZXI7Cisj
ZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9GdWxsU2NyZWVuL3dpbi9XZWJGdWxsU2NyZWVuTWFuYWdlcldpbi5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Z1bGxTY3JlZW4vd2luL1dlYkZ1bGxTY3Jl
ZW5NYW5hZ2VyV2luLmNwcAppbmRleCBhYzhkMzI2ZjA3NjIzNjg4MjcxOWI4ZjFlZjU0ZTcwZGE0
NDhkMWNlLi5mOTk1YjE4Y2JhOTZmMjRkOTk0NGEzN2EyYTRlZDMzZTA0ZGQ1YjhiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Z1bGxTY3JlZW4vd2luL1dlYkZ1bGxTY3Jl
ZW5NYW5hZ2VyV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Z1bGxTY3Jl
ZW4vd2luL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyV2luLmNwcApAQCAtMzIsNiArMzIsMTAgQEAKICNp
bmNsdWRlICJXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJX
ZWJQYWdlLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRnJh
bWUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
R3JhcGhpY3NMYXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgogI2luY2x1ZGUgPFdl
YktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CkBAIC01NSwyMSArNTksNTMgQEAgV2ViRnVsbFNjcmVlbk1hbmFnZXJX
aW46OldlYkZ1bGxTY3JlZW5NYW5hZ2VyV2luKFdlYlBhZ2UqIHBhZ2UpCiAKIFdlYkZ1bGxTY3Jl
ZW5NYW5hZ2VyV2luOjp+V2ViRnVsbFNjcmVlbk1hbmFnZXJXaW4oKQogeworICAgIG1fcGFnZS0+
c2VuZChNZXNzYWdlczo6V2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eTo6RXhpdEFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdNb2RlKCkpOwogfQogCi12b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyV2luOjpz
ZXRSb290RnVsbFNjcmVlbkxheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKQordm9pZCBXZWJG
dWxsU2NyZWVuTWFuYWdlcldpbjo6c2V0Um9vdEZ1bGxTY3JlZW5MYXllcihXZWJDb3JlOjpHcmFw
aGljc0xheWVyKiBsYXllcikKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50CisgICAgLy8gSG9z
dCB0aGUgZnVsbCBzY3JlZW4gbGF5ZXIgaWYgaXRzIGdpdmVuIHRvIHVzOyBvdGhlcndpc2UgaXQg
d2lsbCBiZSBkaXNjb25uZWN0ZWQgCisgICAgLy8gZnJvbSB0aGUgbGF5ZXIgaGVpcmFyY2h5IGFu
ZCBjYXVzZSBhbiBBU1NFUlQgZHVyaW5nIHJlc3luYy4KKyAgICAvLyBGSVhNRTogRGlzYWJsZSBz
ZXR0aW5nIFJlbmRlckxheWVyOjpzZXRBbmltYXRpbmcoKSB0byBtYWtlIHRoaXMgdW5uZWNlc3Nh
cnkucworICAgIGlmIChtX2Z1bGxTY3JlZW5Sb290TGF5ZXIgPT0gbGF5ZXIpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX2Z1bGxTY3JlZW5Sb290TGF5ZXIgPSBsYXllcjsKKworICAgIGlmICghbV9m
dWxsU2NyZWVuUm9vdExheWVyKSB7CisgICAgICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
RnVsbFNjcmVlbk1hbmFnZXJQcm94eTo6RXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkp
OworICAgICAgICBpZiAobV9yb290TGF5ZXIpIHsKKyAgICAgICAgICAgIG1fcm9vdExheWVyLT5y
ZW1vdmVBbGxDaGlsZHJlbigpOworICAgICAgICAgICAgbV9yb290TGF5ZXIgPSAwOworICAgICAg
ICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fcm9vdExheWVyKSB7Cisg
ICAgICAgIG1fcm9vdExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKDApOworI2lmbmRlZiBO
REVCVUcKKyAgICAgICAgbV9yb290TGF5ZXItPnNldE5hbWUoIkZ1bGwgc2NyZWVuIHJvb3QgbGF5
ZXIiKTsKKyNlbmRpZgorICAgICAgICBtX3Jvb3RMYXllci0+c2V0RHJhd3NDb250ZW50KGZhbHNl
KTsKKyAgICAgICAgbV9yb290TGF5ZXItPnNldFNpemUoZ2V0RnVsbFNjcmVlblJlY3QoKS5zaXpl
KCkpOworICAgIH0KKworICAgIG1fcm9vdExheWVyLT5yZW1vdmVBbGxDaGlsZHJlbigpOworCisg
ICAgaWYgKG1fZnVsbFNjcmVlblJvb3RMYXllcikKKyAgICAgICAgbV9yb290TGF5ZXItPmFkZENo
aWxkKG1fZnVsbFNjcmVlblJvb3RMYXllcik7CisKKyAgICBtX3Jvb3RMYXllci0+c3luY0NvbXBv
c2l0aW5nU3RhdGVGb3JUaGlzTGF5ZXJPbmx5KCk7CisgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5t
YWluRnJhbWUoKS0+dmlldygpLT5zeW5jQ29tcG9zaXRpbmdTdGF0ZUluY2x1ZGluZ1N1YmZyYW1l
cygpOwogfQogCiB2b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyV2luOjpiZWdpbkVudGVyRnVsbFNj
cmVlbkFuaW1hdGlvbihmbG9hdCkKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50CisgICAgLy8g
RklYTUU6IEFkZCBzdXBwb3J0IGZvciBhbmltYXRpbmcgdGhlIGNvbnRlbnQgaW50byBmdWxsIHNj
cmVlbi4KIH0KIAogdm9pZCBXZWJGdWxsU2NyZWVuTWFuYWdlcldpbjo6YmVnaW5FeGl0RnVsbFNj
cmVlbkFuaW1hdGlvbihmbG9hdCkKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50CisgICAgLy8g
RklYTUU6IEFkZCBzdXBwb3J0IGZvciBhbmltYXRpbmcgdGhlIGNvbnRlbnQgaW50byBmdWxsIHNj
cmVlbi4KIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0Z1bGxTY3JlZW4vd2luL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyV2luLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Z1bGxTY3JlZW4vd2luL1dlYkZ1bGxTY3JlZW5N
YW5hZ2VyV2luLmgKaW5kZXggZDlhZjRkOWEwZjhjMzM0M2JhYWE5YTAzYzdlZmYxODhmYTE2OWQ1
NS4uMjJmNzRmMWNmNDE1ZWY3MjJkNzQyZTAzMzY5NzhjNmViZmFhYTcxMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9GdWxsU2NyZWVuL3dpbi9XZWJGdWxsU2NyZWVuTWFu
YWdlcldpbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRnVsbFNjcmVlbi93aW4v
V2ViRnVsbFNjcmVlbk1hbmFnZXJXaW4uaApAQCAtNDUsNiArNDUsOSBAQCBwcml2YXRlOgogICAg
IHZpcnR1YWwgdm9pZCBzZXRSb290RnVsbFNjcmVlbkxheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXIqKTsKICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5FbnRlckZ1bGxTY3JlZW5BbmltYXRpb24oZmxv
YXQgZHVyYXRpb24pOwogICAgIHZpcnR1YWwgdm9pZCBiZWdpbkV4aXRGdWxsU2NyZWVuQW5pbWF0
aW9uKGZsb2F0IGR1cmF0aW9uKTsKKworICAgIE93blB0cjxXZWJDb3JlOjpHcmFwaGljc0xheWVy
PiBtX3Jvb3RMYXllcjsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBtX2Z1bGxTY3JlZW5S
b290TGF5ZXI7CiB9OwogCiB9Cg==
</data>
<flag name="review"
          id="84880"
          type_id="1"
          status="-"
          setter="aroben"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91984</attachid>
            <date>2011-05-02 14:38:27 -0700</date>
            <delta_ts>2011-05-03 00:18:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0001-Implement-FULLSCREEN_API-on-Windows-Part-3-WebKit2.patch</filename>
            <type>text/plain</type>
            <size>51254</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">RnJvbSA2NzUzYTIyZDlkNTUxZDM2NDY1ZGVjMDUzNTFhYTRmZDkyZTI1MDM1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKZXIgTm9ibGUgPGplci5ub2JsZUBleGFtcGxlLmNvbT4KRGF0
ZTogRnJpLCAyOSBBcHIgMjAxMSAxNzoxNToyOCAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIEltcGxl
bWVudCBGVUxMU0NSRUVOX0FQSSBvbiBXaW5kb3dzLCBQYXJ0IDM6IFdlYktpdDIKIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01OTg0NQoKUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCgpTb3VyY2UvV2ViQ29yZToKCk1vdmUgV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIg
aW50byBXZWJDb3JlIHRvIGZhY2lsaXRhdGUgY29kZSBzaGFyaW5nIGJldHdlZW4gV2ViS2l0CmFu
ZCBXZWJLaXQyLiAgV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIgbm93IHVzZXMgYSBDbGllbnQgY2xh
c3MgdG8gcmVxdWVzdCB3b3JrIG9uIGl0cwpiZWhhbGYgYnkgV2ViS2l0IGFuZCBXZWJLaXQyLiAg
TWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdyBub3cgb25seSBjcmVhdGVzIGEKQ0FM
YXllckhvc3Qgb25jZSBhIHJvb3QgbGF5ZXIgaXMgc2V0LCBhcyB0aGUgQ0FMYXllckhvc3Qgd2Fz
IGNhdXNpbmcgY2hpbGQgd2luZG93IGRyYXdpbmcKcHJvYmxlbXMsIGFuZCBiZWNhdXNlIGEgQ0FM
YXllckhvc3QgaXMgb3ZlcmtpbGwgaWYgdGhlIHdpbmRvdyBpcyBvbmx5IGRyYXdpbmcgYmxhY2sg
dG8KaXRzIGNsaWVudCBhcmVhLgoKKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKiBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdy5j
cHA6CihXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93OjpNZWRpYVBs
YXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93KTogRG8gbm90IGNyZWF0ZQogICAgbV9sYXllckhv
c3QgaW4gdGhlIGNvbnN0cnVjdG9yLgooV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNj
cmVlbldpbmRvdzo6Y3JlYXRlV2luZG93KTogTlVMTCBjaGVjayBtX2xheWVySG9zdC4KKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3c6OnNldFJvb3RDaGlsZExheWVy
KTogTGF6aWx5IGluc3RhbnRpYXRlIG1fbGF5ZXJIb3N0LgooV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlRnVsbHNjcmVlbldpbmRvdzo6d25kUHJvYyk6IE5VTEwgY2hlY2sgbV9sYXllckhvc3Q7
IGlmIGEgcm9vdCBsYXllciBpcwogICAgbm90IHByZXNlbnQsIGZpbGwgdGhlIHdpbmRvdyB3aXRo
IGJsYWNrIGluIFdNX1BBSU5ULgoqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclBy
aXZhdGVGdWxsc2NyZWVuV2luZG93Lmg6CiogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1dlYkZ1bGxT
Y3JlZW5Db250cm9sbGVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkZ1
bGxTY3JlZW5Db250cm9sbGVyLmNwcC4KKFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyOjpQcml2YXRl
OjplbnRlckZ1bGxTY3JlZW5UaW1lckZpcmVkKTogQWRkZWQ7IGZpcmVzIGFmdGVyIHRoZSBmYWRl
LWluIGFuaW1hdGlvbiBjb21wbGV0ZXMuCihXZWJGdWxsU2NyZWVuQ29udHJvbGxlcjo6UHJpdmF0
ZTo6ZXhpdEZ1bGxTY3JlZW5UaW1lckZpcmVkKTogQWRkZWQ7IGZpcmVzIGFmdGVyIHRoZSBmYWRl
LW91dCBhbmltYXRpb24gY29tcGxldGVzLgoqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9XZWJGdWxs
U2NyZWVuQ29udHJvbGxlci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC93aW4vV2ViRnVs
bFNjcmVlbkNvbnRyb2xsZXIuaC4KKFdlYkNvcmU6OldlYkZ1bGxTY3JlZW5Db250cm9sbGVyQ2xp
ZW50Ojp+V2ViRnVsbFNjcmVlbkNvbnRyb2xsZXJDbGllbnQpOgoKU291cmNlL1dlYktpdC93aW46
CgpJbXBsZW1lbnRhdGlvbiBvZiBXZWJGdWxsU2NyZWVuQ29udHJvbGxlciBoYXMgYmVlbiBtb3Zl
ZCBpbnRvIFdlYkNvcmUsIGFuZApyZXF1aXJlZCB2aXJ1dGFsIGZ1bmN0aW9ucyBvZiBXZWJGdWxs
U2NyZWVuQ29udHJvbGxlckNsaWVudCBoYXZlIGJlZW4gYWRkZWQgdG8KV2ViVmlldy4gIFRoZXNl
IGZ1bmN0aW9ucyBhcmUgbW9zdGx5IHNpbXBsZSBhY2Nlc3NvcnMgb2YgZXhpc3RpbmcgaXZhcnMs
IGJ1dAptX2Z1bGxTY3JlZW5FbGVtZW50IGFuZCBpdHMgYWNjZXNzb3JzIGhhdmUgYWxzbyBiZWVu
IGFkZGVkIHRvIFdlYlZpZXcuCgoqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6
CihXZWJDaHJvbWVDbGllbnQ6OmVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQpOgoqIFdlYkZ1bGxT
Y3JlZW5Db250cm9sbGVyLmNwcDogUmVtb3ZlZC4KKiBXZWJLaXQudmNwcm9qL1dlYktpdC52Y3By
b2o6CiogV2ViVmlldy5jcHA6CihXZWJWaWV3OjpzZXRGdWxsU2NyZWVuRWxlbWVudCk6IEFkZGVk
IGFjY2Vzc29yLgooV2ViVklldzo6ZnVsbFNjcmVlbkVsZW1lbnQpOiBEaXR0by4KKFdlYlZpZXc6
OndlYlZpZXdXaW5kb3cpOiBEaXR0by4KKFdlYlZpZXc6OndlYlZpZXdIb3N0V2luZG93KTogRGl0
dG8uCihXZWJWaWV3OjpzZXRXZWJWaWV3SG9zdFdpbmRvdyk6IERpdHRvLgooV2ViVmlldzo6d2Vi
Vmlld1dpbGxFbnRlckZ1bGxTY3JlZW4pOiBQYXNzIHRocm91Z2ggdG8gRG9jdW1lbnQuCihXZWJW
aWV3Ojp3ZWJWaWV3RGlkRW50ZXJGdWxsU2NyZWVuKTogRGl0dG8uCihXZWJWaWV3Ojp3ZWJWaWV3
V2lsbEV4aXRGdWxsU2NyZWVuKTogRGl0dG8uCihXZWJWaWV3Ojp3ZWJWaWV3RGlkRXhpdEZ1bGxT
Y3JlZW4pOiBEaXR0by4KKiBXZWJWaWV3Lmg6CgpTb3VyY2UvV2ViS2l0MjoKCkltcGxlbWVudCBh
IHNpbWlsYXIgZnVsbCBzY3JlZW4gbW9kZSB0byBXZWJLaXQ7IFJlLXVzZSB0aGUgc2FtZQpmdWxs
IHNjcmVlbiB3aW5kb3cgY2xhc3MgdXNlZCBpbiBXZWJLaXQgaW4gdGhlIG5ldyBXZWJGdWxsU2Ny
ZWVuQ29udHJvbGxlci4KTm8gYW5pbWF0aW9ucyAoeWV0KSwgc28gbWFueSBvZiB0aGUgc3R1YnMg
cmVtYWluIHVuaW1wbGVtZW50ZWQuCgoqIFVJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHA6CihXZWJL
aXQ6OldlYlZpZXc6Om9uS2V5RXZlbnQpOiBIYW5kbGUgVktfRVNDQVBFIGFuZCBjYW5jZWwgZnVs
bCBzY3JlZW4KICAgIG1vZGUgaWYgY2F1Z2h0LgooV2ViS2l0OjpXZWJWaWV3OjpmdWxsU2NyZWVu
Q29udHJvbGxlcik6IExhemlseSBpbnN0YW50aWF0ZSBtX2Z1bGxTY3JlZW5Db250cm9sbGVyLgoo
V2ViS2l0OjpXZWJWaWV3Ojp3ZWJWaWV3V2luZG93KTogQWRkZWQgYWNjZXNzb3IuCihXZWJLaXQ6
OldlYlZpZXc6OndlYlZpZXdIb3N0V2luZG93KTogRGl0dG8uCihXZWJLaXQ6OldlYlZpZXc6OnNl
dFdlYlZpZXdIb3N0V2luZG93KTogRGl0dG8uCihXZWJLaXQ6OldlYlZpZXc6OndlYlZpZXdXaWxs
RW50ZXJGdWxsU2NyZWVuKTogUGFzcyB0aHJvdWdoIHRvIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJv
eHkuCihXZWJLaXQ6OldlYlZpZXc6OndlYlZpZXdEaWRFbnRlckZ1bGxTY3JlZW4pOiBEaXR0by4K
KFdlYktpdDo6V2ViVmlldzo6d2ViVmlld1dpbGxFeGl0RnVsbFNjcmVlbik6IERpdHRvLgooV2Vi
S2l0OjpXZWJWaWV3Ojp3ZWJWaWV3RGlkRXhpdEZ1bGxTY3JlZW4pOiBEaXR0by4KKiBVSVByb2Nl
c3Mvd2luL1dlYlZpZXcuaDoKKiBVSVByb2Nlc3Mvd2luL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJv
eHlXaW4uY3BwOgooV2ViS2l0OjpXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5OjplbnRlckZ1bGxT
Y3JlZW4pOiBQYXNzIHRocm91Z2ggdG8KICAgIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyLgooV2Vi
S2l0OjpXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5OjpleGl0RnVsbFNjcmVlbik6IERpdHRvLgoq
IFVJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHA6CihXZWJLaXQ6OldlYlZpZXc6OldlYlZpZXcpOgoo
V2ViS2l0OjpXZWJWaWV3OjpvbktleUV2ZW50KTogSGFuZGxlIHRoZSBlc2NhcGUga2V5IGFuZCBl
eGl0CiAgIGZ1bGwgc2NyZWVuIG1vZGUgd2hlbiBkZXRlY3RlZC4KKFdlYktpdDo6V2ViVmlldzo6
ZnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIpOiBBZGRlZC4KKiBVSVByb2Nlc3Mvd2luL1dlYlZp
ZXcuaDoKKiBXZWJQcm9jZXNzL0Z1bGxTY3JlZW4vd2luL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyV2lu
LmNwcDoKKFdlYktpdDo6V2ViRnVsbFNjcmVlbk1hbmFnZXJXaW46On5XZWJGdWxsU2NyZWVuTWFu
YWdlcldpbik6CihXZWJLaXQ6OldlYkZ1bGxTY3JlZW5NYW5hZ2VyV2luOjpzZXRSb290RnVsbFNj
cmVlbkxheWVyKTogSG9zdCB0aGUgcm9vdAogICAgZnVsbCBzY3JlZW4gbGF5ZXIgaWYgaXQgZ2V0
cyBkZXRhY2hlZC4KKiBXZWJQcm9jZXNzL0Z1bGxTY3JlZW4vd2luL1dlYkZ1bGxTY3JlZW5NYW5h
Z2VyV2luLmg6Ciogd2luL1dlYktpdDIudmNwcm9qOgoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2M2MxNzIwLi40
ZDM3ZmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTEtMDUtMDIgIEplciBOb2Js
ZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IEZVTExTQ1JFRU5fQVBJIG9uIFdpbmRvd3MsIFBh
cnQgMzogV2ViS2l0MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTk4NDUKKworICAgICAgICBNb3ZlIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyIGludG8g
V2ViQ29yZSB0byBmYWNpbGl0YXRlIGNvZGUgc2hhcmluZyBiZXR3ZWVuIFdlYktpdAorICAgICAg
ICBhbmQgV2ViS2l0Mi4gIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyIG5vdyB1c2VzIGEgQ2xpZW50
IGNsYXNzIHRvIHJlcXVlc3Qgd29yayBvbiBpdHMKKyAgICAgICAgYmVoYWxmIGJ5IFdlYktpdCBh
bmQgV2ViS2l0Mi4gIE1lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3cgbm93IG9ubHkg
Y3JlYXRlcyBhIAorICAgICAgICBDQUxheWVySG9zdCBvbmNlIGEgcm9vdCBsYXllciBpcyBzZXQs
IGFzIHRoZSBDQUxheWVySG9zdCB3YXMgY2F1c2luZyBjaGlsZCB3aW5kb3cgZHJhd2luZworICAg
ICAgICBwcm9ibGVtcywgYW5kIGJlY2F1c2UgYSBDQUxheWVySG9zdCBpcyBvdmVya2lsbCBpZiB0
aGUgd2luZG93IGlzIG9ubHkgZHJhd2luZyBibGFjayB0bworICAgICAgICBpdHMgY2xpZW50IGFy
ZWEuCisKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRv
dy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2lu
ZG93OjpNZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93KTogRG8gbm90IGNyZWF0ZSAK
KyAgICAgICAgICAgIG1fbGF5ZXJIb3N0IGluIHRoZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3c6OmNyZWF0ZVdpbmRvdyk6
IE5VTEwgY2hlY2sgbV9sYXllckhvc3QuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVGdWxsc2NyZWVuV2luZG93OjpzZXRSb290Q2hpbGRMYXllcik6IExhemlseSBpbnN0YW50
aWF0ZSBtX2xheWVySG9zdC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUZ1
bGxzY3JlZW5XaW5kb3c6OnduZFByb2MpOiBOVUxMIGNoZWNrIG1fbGF5ZXJIb3N0OyBpZiBhIHJv
b3QgbGF5ZXIgaXMKKyAgICAgICAgICAgIG5vdCBwcmVzZW50LCBmaWxsIHRoZSB3aW5kb3cgd2l0
aCBibGFjayBpbiBXTV9QQUlOVC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVk
aWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9XZWJGdWxsU2NyZWVuQ29udHJvbGxlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0L3dpbi9XZWJGdWxsU2NyZWVuQ29udHJvbGxlci5jcHAuCisgICAgICAgIChXZWJG
dWxsU2NyZWVuQ29udHJvbGxlcjo6UHJpdmF0ZTo6ZW50ZXJGdWxsU2NyZWVuVGltZXJGaXJlZCk6
IEFkZGVkOyBmaXJlcyBhZnRlciB0aGUgZmFkZS1pbiBhbmltYXRpb24gY29tcGxldGVzLgorICAg
ICAgICAoV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXI6OlByaXZhdGU6OmV4aXRGdWxsU2NyZWVuVGlt
ZXJGaXJlZCk6IEFkZGVkOyBmaXJlcyBhZnRlciB0aGUgZmFkZS1vdXQgYW5pbWF0aW9uIGNvbXBs
ZXRlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vV2ViRnVsbFNjcmVlbkNvbnRy
b2xsZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkZ1bGxTY3JlZW5Db250
cm9sbGVyLmguCisgICAgICAgIChXZWJDb3JlOjpXZWJGdWxsU2NyZWVuQ29udHJvbGxlckNsaWVu
dDo6fldlYkZ1bGxTY3JlZW5Db250cm9sbGVyQ2xpZW50KToKKwogMjAxMS0wNC0yOSAgSmVyIE5v
YmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oK
aW5kZXggZjc1ZDNhZC4uMDc2ZDM0ZiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oKQEAgLTI3MTE2LDYgKzI3MTE2LDE0IEBACiAJCQkJCQk+CiAJCQkJ
CTwvRmlsZT4KIAkJCQkJPEZpbGUKKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3Jh
cGhpY3Ncd2luXEZ1bGxTY3JlZW5Db250cm9sbGVyLmNwcCIKKwkJCQkJCT4KKwkJCQkJPC9GaWxl
PgorCQkJCQk8RmlsZQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1x3
aW5cRnVsbFNjcmVlbkNvbnRyb2xsZXIuaCIKKwkJCQkJCT4KKwkJCQkJPC9GaWxlPgorCQkJCQk8
RmlsZQogCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1x3aW5cR2x5cGhQ
YWdlVHJlZU5vZGVDYWlyb1dpbi5jcHAiCiAJCQkJCQk+CiAJCQkJCQk8RmlsZUNvbmZpZ3VyYXRp
b24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9GdWxs
U2NyZWVuQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmVlMGRlM2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsMTkzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQgMjAwOS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorCisjaW5jbHVkZSAi
RnVsbFNjcmVlbkNvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRv
dy5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAiV2ViQ29yZUluc3RhbmNlSGFuZGxl
LmgiCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
Kworc3RhdGljIGNvbnN0IGludCBrRnVsbFNjcmVlbkFuaW1hdGlvbkR1cmF0aW9uID0gMjAwMDsg
Ly8gbWlsbGlzZWNvbmRzIAorCitjbGFzcyBGdWxsU2NyZWVuQ29udHJvbGxlcjo6UHJpdmF0ZSA6
IHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuQ2xpZW50ICB7CitwdWJsaWM6Cisg
ICAgUHJpdmF0ZShGdWxsU2NyZWVuQ29udHJvbGxlciogY29udHJvbGxlciwgRnVsbFNjcmVlbkNv
bnRyb2xsZXJDbGllbnQqIGNsaWVudCkgCisgICAgICAgIDogbV9jb250cm9sbGVyKGNvbnRyb2xs
ZXIpCisgICAgICAgICwgbV9jbGllbnQoY2xpZW50KQorICAgICAgICAsIG1fb3JpZ2luYWxIb3N0
KDApCisgICAgICAgICwgbV9pc0Z1bGxTY3JlZW4oZmFsc2UpCisgICAgICAgICwgbV9pc0VudGVy
aW5nRnVsbFNjcmVlbihmYWxzZSkKKyAgICAgICAgLCBtX2lzRXhpdGluZ0Z1bGxTY3JlZW4oZmFs
c2UpCisgICAgICAgICwgbV9lbnRlckZ1bGxTY3JlZW5UaW1lcih0aGlzLCAmUHJpdmF0ZTo6ZW50
ZXJGdWxsU2NyZWVuVGltZXJGaXJlZCkKKyAgICAgICAgLCBtX2V4aXRGdWxsU2NyZWVuVGltZXIo
dGhpcywgJlByaXZhdGU6OmV4aXRGdWxsU2NyZWVuVGltZXJGaXJlZCkKKyAgICB7CisgICAgfQor
ICAgIHZpcnR1YWwgflByaXZhdGUoKSB7IH0KKworICAgIHZpcnR1YWwgTFJFU1VMVCBmdWxsc2Ny
ZWVuQ2xpZW50V25kUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0sIExQQVJBTSk7CisgICAgdm9pZCBl
bnRlckZ1bGxTY3JlZW5UaW1lckZpcmVkKFRpbWVyPFByaXZhdGU+Kik7CisgICAgdm9pZCBleGl0
RnVsbFNjcmVlblRpbWVyRmlyZWQoVGltZXI8UHJpdmF0ZT4qKTsKKyAgICAKKyAgICBGdWxsU2Ny
ZWVuQ29udHJvbGxlciogbV9jb250cm9sbGVyOworICAgIEZ1bGxTY3JlZW5Db250cm9sbGVyQ2xp
ZW50KiBtX2NsaWVudDsKKyAgICBPd25QdHI8TWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldp
bmRvdz4gbV9mdWxsU2NyZWVuV2luZG93OworICAgIE93blB0cjxNZWRpYVBsYXllclByaXZhdGVG
dWxsc2NyZWVuV2luZG93PiBtX2JhY2tncm91bmRXaW5kb3c7CisgICAgSW50UmVjdCBtX2Z1bGxT
Y3JlZW5GcmFtZTsKKyAgICBIV05EIG1fb3JpZ2luYWxIb3N0OworICAgIGJvb2wgbV9pc0Z1bGxT
Y3JlZW47CisgICAgYm9vbCBtX2lzRW50ZXJpbmdGdWxsU2NyZWVuOworICAgIGJvb2wgbV9pc0V4
aXRpbmdGdWxsU2NyZWVuOworICAgIFRpbWVyPEZ1bGxTY3JlZW5Db250cm9sbGVyOjpQcml2YXRl
PiBtX2VudGVyRnVsbFNjcmVlblRpbWVyOworICAgIFRpbWVyPEZ1bGxTY3JlZW5Db250cm9sbGVy
OjpQcml2YXRlPiBtX2V4aXRGdWxsU2NyZWVuVGltZXI7Cit9OworCitMUkVTVUxUIEZ1bGxTY3Jl
ZW5Db250cm9sbGVyOjpQcml2YXRlOjpmdWxsc2NyZWVuQ2xpZW50V25kUHJvYyhIV05EIGh3bmQs
IFVJTlQgbXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQoreworICAgIExSRVNVTFQg
bFJlc3VsdCA9IDA7CisKKyAgICBzd2l0Y2ggKG1zZykgeworICAgIGNhc2UgV01fTU9WRToKKyAg
ICAgICAgbV9mdWxsU2NyZWVuRnJhbWUuc2V0WChMT1dPUkQobFBhcmFtKSk7CisgICAgICAgIG1f
ZnVsbFNjcmVlbkZyYW1lLnNldFkoSElXT1JEKGxQYXJhbSkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFdNX1NJWkU6CisgICAgICAgIG1fZnVsbFNjcmVlbkZyYW1lLnNldFdpZHRoKExPV09S
RChsUGFyYW0pKTsKKyAgICAgICAgbV9mdWxsU2NyZWVuRnJhbWUuc2V0SGVpZ2h0KEhJV09SRChs
UGFyYW0pKTsKKyAgICAgICAgaWYgKG1fY2xpZW50LT53ZWJWaWV3V2luZG93KCkpCisgICAgICAg
ICAgICA6OlNldFdpbmRvd1BvcyhtX2NsaWVudC0+d2ViVmlld1dpbmRvdygpLCAwLCAwLCAwLCBt
X2Z1bGxTY3JlZW5GcmFtZS53aWR0aCgpLCBtX2Z1bGxTY3JlZW5GcmFtZS5oZWlnaHQoKSwgU1dQ
X05PUkVQT1NJVElPTiAgfCBTV1BfTk9NT1ZFKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBX
TV9LRVlET1dOOgorICAgICAgICBpZiAod1BhcmFtID09IFZLX0VTQ0FQRSkgeworICAgICAgICAg
ICAgbV9jb250cm9sbGVyLT5leGl0RnVsbFNjcmVlbigpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgLy8gRmFsbCB0aHJvdWdoLgorICAgIGRlZmF1bHQ6CisgICAgICAg
IGxSZXN1bHQgPSA6OkRlZldpbmRvd1Byb2MoaHduZCwgbXNnLCB3UGFyYW0sIGxQYXJhbSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIGxSZXN1bHQ7Cit9CisKK0Z1bGxTY3JlZW5Db250cm9sbGVyOjpG
dWxsU2NyZWVuQ29udHJvbGxlcihGdWxsU2NyZWVuQ29udHJvbGxlckNsaWVudCogY2xpZW50KQor
ICAgIDogbV9wcml2YXRlKGFkb3B0UHRyKG5ldyBGdWxsU2NyZWVuQ29udHJvbGxlcjo6UHJpdmF0
ZSh0aGlzLCBjbGllbnQpKSkKK3sKKyAgICBBU1NFUlQoY2xpZW50KTsKK30KKworRnVsbFNjcmVl
bkNvbnRyb2xsZXI6On5GdWxsU2NyZWVuQ29udHJvbGxlcigpCit7Cit9CisKK2Jvb2wgRnVsbFNj
cmVlbkNvbnRyb2xsZXI6OmlzRnVsbFNjcmVlbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJp
dmF0ZS0+bV9pc0Z1bGxTY3JlZW47Cit9CisKK3ZvaWQgRnVsbFNjcmVlbkNvbnRyb2xsZXI6OmVu
dGVyRnVsbFNjcmVlbigpCit7CisgICAgaWYgKG1fcHJpdmF0ZS0+bV9pc0VudGVyaW5nRnVsbFNj
cmVlbikKKyAgICAgICAgcmV0dXJuOworICAgIG1fcHJpdmF0ZS0+bV9pc0VudGVyaW5nRnVsbFNj
cmVlbiA9IHRydWU7CisKKyAgICBtX3ByaXZhdGUtPm1fYmFja2dyb3VuZFdpbmRvdyA9IGFkb3B0
UHRyKG5ldyBNZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93KG1fcHJpdmF0ZS5nZXQo
KSkpOworICAgIG1fcHJpdmF0ZS0+bV9iYWNrZ3JvdW5kV2luZG93LT5jcmVhdGVXaW5kb3coMCwg
TWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdzo6U3RhcnRJbnZpc2libGUpOworICAg
IDo6U2V0V2luZG93UG9zKG1fcHJpdmF0ZS0+bV9iYWNrZ3JvdW5kV2luZG93LT5od25kKCksIEhX
TkRfVE9QLCAwLCAwLCAwLCAwLCBTV1BfTk9NT1ZFIHwgU1dQX05PU0laRSB8IFNXUF9OT0FDVElW
QVRFKTsKKyAgICBCT09MIHN1Y2Nlc3MgPSA6OkFuaW1hdGVXaW5kb3cobV9wcml2YXRlLT5tX2Jh
Y2tncm91bmRXaW5kb3ctPmh3bmQoKSwga0Z1bGxTY3JlZW5BbmltYXRpb25EdXJhdGlvbiwgQVdf
QkxFTkQpOworICAgIG1fcHJpdmF0ZS0+bV9lbnRlckZ1bGxTY3JlZW5UaW1lci5zdGFydE9uZVNo
b3Qoc3VjY2VzcyA/IGtGdWxsU2NyZWVuQW5pbWF0aW9uRHVyYXRpb24gLyAxMDAwLiA6IDApOwor
fQorCit2b2lkIEZ1bGxTY3JlZW5Db250cm9sbGVyOjpQcml2YXRlOjplbnRlckZ1bGxTY3JlZW5U
aW1lckZpcmVkKFRpbWVyPFByaXZhdGU+KikKK3sKKyAgICBpZiAoIW1faXNFbnRlcmluZ0Z1bGxT
Y3JlZW4pCisgICAgICAgIHJldHVybjsKKyAgICBtX2lzRW50ZXJpbmdGdWxsU2NyZWVuID0gZmFs
c2U7CisKKyAgICBpZiAobV9pc0Z1bGxTY3JlZW4pCisgICAgICAgIHJldHVybjsKKyAgICBtX2lz
RnVsbFNjcmVlbiA9IHRydWU7CisKKyAgICBtX2NsaWVudC0+d2ViVmlld1dpbGxFbnRlckZ1bGxT
Y3JlZW4oKTsKKworICAgIEFTU0VSVCghbV9mdWxsU2NyZWVuV2luZG93KTsKKyAgICBtX2Z1bGxT
Y3JlZW5XaW5kb3cgPSBhZG9wdFB0cihuZXcgTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldp
bmRvdyh0aGlzKSk7CisgICAgQVNTRVJUKG1fZnVsbFNjcmVlbldpbmRvdyk7CisgICAgbV9mdWxs
U2NyZWVuV2luZG93LT5jcmVhdGVXaW5kb3coMCwgZmFsc2UpOworCisgICAgSFdORCBvcmlnaW5h
bEhvc3QgPSBtX2NsaWVudC0+d2ViVmlld0hvc3RXaW5kb3coKTsKKyAgICBtX2NsaWVudC0+c2V0
V2ViVmlld0hvc3RXaW5kb3cobV9mdWxsU2NyZWVuV2luZG93LT5od25kKCkpOworCisgICAgSW50
UmVjdCB2aWV3RnJhbWUoSW50UG9pbnQoKSwgbV9mdWxsU2NyZWVuRnJhbWUuc2l6ZSgpKTsKKyAg
ICA6OlNldFdpbmRvd1BvcyhtX2Z1bGxTY3JlZW5XaW5kb3ctPmh3bmQoKSwgSFdORF9UT1AsIDAs
IDAsIDAsIDAsIFNXUF9OT01PVkUgfCBTV1BfTk9TSVpFIHwgU1dQX05PQUNUSVZBVEUpOworICAg
IDo6U2V0V2luZG93UG9zKG1fY2xpZW50LT53ZWJWaWV3V2luZG93KCksIEhXTkRfVE9QLCAwLCAw
LCB2aWV3RnJhbWUud2lkdGgoKSwgdmlld0ZyYW1lLmhlaWdodCgpLCBTV1BfTk9BQ1RJVkFURSk7
CisgICAgOjpJbnZhbGlkYXRlUmVjdChtX2NsaWVudC0+d2ViVmlld1dpbmRvdygpLCAwLCB0cnVl
KTsKKyAgICA6OlVwZGF0ZVdpbmRvdyhtX2NsaWVudC0+d2ViVmlld1dpbmRvdygpKTsKKyAgICBC
T09MIHN1Y2Nlc3MgPSA6OkFuaW1hdGVXaW5kb3cobV9mdWxsU2NyZWVuV2luZG93LT5od25kKCks
IGtGdWxsU2NyZWVuQW5pbWF0aW9uRHVyYXRpb24sIEFXX0JMRU5EKTsKKyAgICBtX29yaWdpbmFs
SG9zdCA9IG9yaWdpbmFsSG9zdDsKKworICAgIG1fY2xpZW50LT53ZWJWaWV3RGlkRW50ZXJGdWxs
U2NyZWVuKCk7Cit9CisKK3ZvaWQgRnVsbFNjcmVlbkNvbnRyb2xsZXI6OmV4aXRGdWxsU2NyZWVu
KCkKK3sKKyAgICBpZiAobV9wcml2YXRlLT5tX2lzRXhpdGluZ0Z1bGxTY3JlZW4pCisgICAgICAg
IHJldHVybjsKKyAgICBtX3ByaXZhdGUtPm1faXNFeGl0aW5nRnVsbFNjcmVlbiA9IHRydWU7CisK
KyAgICBBU1NFUlQobV9wcml2YXRlLT5tX2JhY2tncm91bmRXaW5kb3cpOworICAgIEJPT0wgc3Vj
Y2VzcyA9IDo6QW5pbWF0ZVdpbmRvdyhtX3ByaXZhdGUtPm1fYmFja2dyb3VuZFdpbmRvdy0+aHdu
ZCgpLCBrRnVsbFNjcmVlbkFuaW1hdGlvbkR1cmF0aW9uLCBBV19ISURFIHwgQVdfQkxFTkQpOwor
ICAgIG1fcHJpdmF0ZS0+bV9leGl0RnVsbFNjcmVlblRpbWVyLnN0YXJ0T25lU2hvdChzdWNjZXNz
ID8ga0Z1bGxTY3JlZW5BbmltYXRpb25EdXJhdGlvbiAvIDEwMDAuIDogMCk7Cit9CisKK3ZvaWQg
RnVsbFNjcmVlbkNvbnRyb2xsZXI6OlByaXZhdGU6OmV4aXRGdWxsU2NyZWVuVGltZXJGaXJlZChU
aW1lcjxQcml2YXRlPiopCit7CisgICAgaWYgKCFtX2lzRXhpdGluZ0Z1bGxTY3JlZW4pCisgICAg
ICAgIHJldHVybjsKKyAgICBtX2lzRXhpdGluZ0Z1bGxTY3JlZW4gPSBmYWxzZTsKKworICAgIGlm
ICghbV9pc0Z1bGxTY3JlZW4pCisgICAgICAgIHJldHVybjsKKyAgICBtX2lzRnVsbFNjcmVlbiA9
IGZhbHNlOworCisgICAgbV9jbGllbnQtPndlYlZpZXdXaWxsRXhpdEZ1bGxTY3JlZW4oKTsKKyAg
ICBtX2NsaWVudC0+c2V0V2ViVmlld0hvc3RXaW5kb3cobV9vcmlnaW5hbEhvc3QpOworCisgICAg
OjpEZXN0cm95V2luZG93KG1fZnVsbFNjcmVlbldpbmRvdy0+aHduZCgpKTsKKyAgICBtX2Z1bGxT
Y3JlZW5XaW5kb3cgPSAwOworCisgICAgbV9jbGllbnQtPndlYlZpZXdEaWRFeGl0RnVsbFNjcmVl
bigpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9GdWxsU2NyZWVuQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYWFjNzY2OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9GdWxsU2NyZWVuQ29udHJvbGxlci5oCkBAIC0wLDAg
KzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyX2gKKyNk
ZWZpbmUgV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXJfaAorCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5f
QVBJKQorCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGdWxsU2NyZWVuQ29udHJvbGxlckNsaWVu
dCB7CitwdWJsaWM6CisgICAgdmlydHVhbCBIV05EIHdlYlZpZXdXaW5kb3coKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBIV05EIHdlYlZpZXdIb3N0V2luZG93KCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBzZXRXZWJWaWV3SG9zdFdpbmRvdyhIV05EKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHdlYlZpZXdXaWxsRW50ZXJGdWxsU2NyZWVuKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB3
ZWJWaWV3RGlkRW50ZXJGdWxsU2NyZWVuKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB3ZWJWaWV3
V2lsbEV4aXRGdWxsU2NyZWVuKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB3ZWJWaWV3RGlkRXhp
dEZ1bGxTY3JlZW4oKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+RnVsbFNjcmVlbkNv
bnRyb2xsZXJDbGllbnQoKSB7IH0KK307CisKK2NsYXNzIEZ1bGxTY3JlZW5Db250cm9sbGVyIHsK
K3B1YmxpYzoKKyAgICBGdWxsU2NyZWVuQ29udHJvbGxlcihGdWxsU2NyZWVuQ29udHJvbGxlckNs
aWVudCopOworICAgIH5GdWxsU2NyZWVuQ29udHJvbGxlcigpOworCitwdWJsaWM6CisgICAgdm9p
ZCBlbnRlckZ1bGxTY3JlZW4oKTsKKyAgICB2b2lkIGV4aXRGdWxsU2NyZWVuKCk7CisgICAgCisg
ICAgYm9vbCBpc0Z1bGxTY3JlZW4oKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIGNsYXNzIFBy
aXZhdGU7CisgICAgZnJpZW5kIGNsYXNzIFByaXZhdGU7CisgICAgT3duUHRyPEZ1bGxTY3JlZW5D
b250cm9sbGVyOjpQcml2YXRlPiBtX3ByaXZhdGU7Cit9OworCit9CisKKyNlbmRpZgorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRp
YVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93LmNwcApp
bmRleCA1ODgxNDZhLi44ZTBmZDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0
ZUZ1bGxzY3JlZW5XaW5kb3cuY3BwCkBAIC00NCw5ICs0NCw2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIE1lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3c6Ok1lZGlhUGxheWVyUHJpdmF0
ZUZ1bGxzY3JlZW5XaW5kb3coTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbkNsaWVudCogY2xp
ZW50KQogICAgIDogbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9od25kKDApCi0jaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgICwgbV9sYXllclRyZWVIb3N0KENBQ0ZMYXllclRy
ZWVIb3N0OjpjcmVhdGUoKSkKLSNlbmRpZgogewogfQogCkBAIC01OSw3ICs1Niw3IEBAIE1lZGlh
UGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3c6On5NZWRpYVBsYXllclByaXZhdGVGdWxsc2Ny
ZWVuV2luZG93KCkKICAgICBBU1NFUlQoIW1faHduZCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlRnVsbHNjcmVlbldpbmRvdzo6Y3JlYXRlV2luZG93KEhXTkQgcGFyZW50SHduZCkKK3Zv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdzo6Y3JlYXRlV2luZG93KEhXTkQg
cGFyZW50SHduZCwgU3RhcnRpbmdWaXNpYmlsaXR5RmxhZyBmbGFnKQogewogICAgIHN0YXRpYyBB
VE9NIHdpbmRvd0F0b207CiAgICAgc3RhdGljIExQQ1dTVFIgd2luZG93Q2xhc3NOYW1lID0gTCJN
ZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93Q2xhc3MiOwpAQCAtODIsMTMgKzc5LDE0
IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdzo6Y3JlYXRlV2luZG93
KEhXTkQgcGFyZW50SHduZCkKIAogICAgIEludFJlY3QgbW9uaXRvclJlY3QgPSBtaS5yY01vbml0
b3I7CiAgICAgCi0gICAgOjpDcmVhdGVXaW5kb3dFeFcoV1NfRVhfVE9PTFdJTkRPVywgd2luZG93
Q2xhc3NOYW1lLCBMIiIsIFdTX1BPUFVQIHwgV1NfVklTSUJMRSwgCisgICAgOjpDcmVhdGVXaW5k
b3dFeFcoV1NfRVhfVE9PTFdJTkRPVywgd2luZG93Q2xhc3NOYW1lLCBMIiIsIFdTX1BPUFVQIHwg
KGZsYWcgPT0gU3RhcnRWaXNpYmxlID8gV1NfVklTSUJMRSA6IDApLCAKICAgICAgICAgbW9uaXRv
clJlY3QueCgpLCBtb25pdG9yUmVjdC55KCksIG1vbml0b3JSZWN0LndpZHRoKCksIG1vbml0b3JS
ZWN0LmhlaWdodCgpLAogICAgICAgICBwYXJlbnRId25kLCAwLCBXZWJDb3JlOjppbnN0YW5jZUhh
bmRsZSgpLCB0aGlzKTsKICAgICBBU1NFUlQoSXNXaW5kb3cobV9od25kKSk7CiAKICNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgbV9sYXllclRyZWVIb3N0LT5zZXRXaW5kb3co
bV9od25kKTsKKyAgICBpZiAobV9sYXllclRyZWVIb3N0KQorICAgICAgICBtX2xheWVyVHJlZUhv
c3QtPnNldFdpbmRvdyhtX2h3bmQpOwogI2VuZGlmCiAKICAgICA6OlNldEZvY3VzKG1faHduZCk7
CkBAIC0xMDUsOCArMTAzLDE2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldp
bmRvdzo6c2V0Um9vdENoaWxkTGF5ZXIoUGFzc1JlZlB0cjxQbGF0Zm9ybUNBCiAKICAgICBtX3Jv
b3RDaGlsZCA9IHJvb3RDaGlsZDsKIAotICAgIGlmICghbV9yb290Q2hpbGQpCisgICAgaWYgKCFt
X3Jvb3RDaGlsZCkgeworICAgICAgICBtX2xheWVyVHJlZUhvc3QgPSBudWxscHRyOwogICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX2xheWVyVHJlZUhvc3QpIHsKKyAgICAgICAg
bV9sYXllclRyZWVIb3N0ID0gQ0FDRkxheWVyVHJlZUhvc3Q6OmNyZWF0ZSgpOworICAgICAgICBp
ZiAobV9od25kKQorICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRXaW5kb3cobV9od25k
KTsKKyAgICB9CiAKICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFJvb3RDaGlsZExheWVyKG1fcm9v
dENoaWxkLmdldCgpKTsKICAgICBQbGF0Zm9ybUNBTGF5ZXIqIHJvb3RMYXllciA9IG1fcm9vdENo
aWxkLT5yb290TGF5ZXIoKTsKQEAgLTE0OCw3ICsxNTQsOCBAQCBMUkVTVUxUIE1lZGlhUGxheWVy
UHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3c6OnduZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2Us
IFdQQQogICAgIGNhc2UgV01fREVTVFJPWToKICAgICAgICAgbV9od25kID0gMDsKICNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0V2lu
ZG93KDApOworICAgICAgICBpZiAobV9sYXllclRyZWVIb3N0KQorICAgICAgICAgICAgbV9sYXll
clRyZWVIb3N0LT5zZXRXaW5kb3coMCk7CiAjZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBXTV9XSU5ET1dQT1NDSEFOR0VEOgpAQCAtMTU3LDE5ICsxNjQsMjkgQEAgTFJFU1VMVCBNZWRp
YVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93Ojp3bmRQcm9jKEhXTkQgaFduZCwgVUlOVCBt
ZXNzYWdlLCBXUEEKICAgICAgICAgICAgIGlmICh3cC0+ZmxhZ3MgJiBTV1BfTk9TSVpFKQogICAg
ICAgICAgICAgICAgIGJyZWFrOwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAg
ICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+cmVzaXplKCk7Ci0gICAgICAgICAgICBQbGF0Zm9y
bUNBTGF5ZXIqIHJvb3RMYXllciA9IG1fcm9vdENoaWxkLT5yb290TGF5ZXIoKTsKLSAgICAgICAg
ICAgIENHUmVjdCByb290Qm91bmRzID0gbV9yb290Q2hpbGQtPnJvb3RMYXllcigpLT5ib3VuZHMo
KTsKLSAgICAgICAgICAgIG1fcm9vdENoaWxkLT5zZXRGcmFtZShyb290Qm91bmRzKTsKLSAgICAg
ICAgICAgIG1fcm9vdENoaWxkLT5zZXROZWVkc0xheW91dCgpOworICAgICAgICAgICAgaWYgKG1f
bGF5ZXJUcmVlSG9zdCkgeworICAgICAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+cmVzaXpl
KCk7CisgICAgICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiByb290TGF5ZXIgPSBtX3Jvb3RD
aGlsZC0+cm9vdExheWVyKCk7CisgICAgICAgICAgICAgICAgQ0dSZWN0IHJvb3RCb3VuZHMgPSBt
X3Jvb3RDaGlsZC0+cm9vdExheWVyKCktPmJvdW5kcygpOworICAgICAgICAgICAgICAgIG1fcm9v
dENoaWxkLT5zZXRGcmFtZShyb290Qm91bmRzKTsKKyAgICAgICAgICAgICAgICBtX3Jvb3RDaGls
ZC0+c2V0TmVlZHNMYXlvdXQoKTsKKyAgICAgICAgICAgIH0KICNlbmRpZgogICAgICAgICB9CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgV01fUEFJTlQ6CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnBhaW50KCk7Ci0gICAgICAgIDo6
VmFsaWRhdGVSZWN0KG1faHduZCwgMCk7CisgICAgICAgIGlmIChtX2xheWVyVHJlZUhvc3QpIHsK
KyAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+cGFpbnQoKTsKKyAgICAgICAgICAgIDo6VmFs
aWRhdGVSZWN0KG1faHduZCwgMCk7CisgICAgICAgIH0gZWxzZQogI2VuZGlmCisgICAgICAgIHsK
KyAgICAgICAgICAgIFBBSU5UU1RSVUNUIHBzOworICAgICAgICAgICAgSERDIGhkYyA9IDo6QmVn
aW5QYWludChtX2h3bmQsICZwcyk7CisgICAgICAgICAgICA6OkZpbGxSZWN0KGhkYywgJnBzLnJj
UGFpbnQsIChIQlJVU0gpOjpHZXRTdG9ja09iamVjdChCTEFDS19CUlVTSCkpOworICAgICAgICAg
ICAgOjpFbmRQYWludChtX2h3bmQsICZwcyk7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
TWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdy5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3cuaApp
bmRleCBlMDdiYmFjLi40MmE2NDFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVG
dWxsc2NyZWVuV2luZG93LmgKQEAgLTU4LDcgKzU4LDEyIEBAIHB1YmxpYzoKICAgICBNZWRpYVBs
YXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93KE1lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5D
bGllbnQqKTsKICAgICB+TWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdygpOwogCi0g
ICAgdm9pZCBjcmVhdGVXaW5kb3coSFdORCBvd25lcldpbmRvdyk7CisgICAgZW51bSB7CisgICAg
ICAgIFN0YXJ0SW52aXNpYmxlLAorICAgICAgICBTdGFydFZpc2libGUsCisgICAgfTsKKyAgICB0
eXBlZGVmIGJvb2wgU3RhcnRpbmdWaXNpYmlsaXR5RmxhZzsKKyAgICB2b2lkIGNyZWF0ZVdpbmRv
dyhIV05EIG93bmVyV2luZG93LCBTdGFydGluZ1Zpc2liaWxpdHlGbGFnKTsKICAgICAKICAgICBI
V05EIGh3bmQoKSBjb25zdCB7IHJldHVybiBtX2h3bmQ7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC93aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCmluZGV4
IGIwZTJkYzYuLmEzYjc4OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAx
MS0wNS0wMiAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgRlVMTFNDUkVFTl9B
UEkgb24gV2luZG93cywgUGFydCAzOiBXZWJLaXQyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01OTg0NQorCisgICAgICAgIEltcGxlbWVudGF0aW9uIG9m
IFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyIGhhcyBiZWVuIG1vdmVkIGludG8gV2ViQ29yZSwgYW5k
IAorICAgICAgICByZXF1aXJlZCB2aXJ1dGFsIGZ1bmN0aW9ucyBvZiBXZWJGdWxsU2NyZWVuQ29u
dHJvbGxlckNsaWVudCBoYXZlIGJlZW4gYWRkZWQgdG8KKyAgICAgICAgV2ViVmlldy4gIFRoZXNl
IGZ1bmN0aW9ucyBhcmUgbW9zdGx5IHNpbXBsZSBhY2Nlc3NvcnMgb2YgZXhpc3RpbmcgaXZhcnMs
IGJ1dCAKKyAgICAgICAgbV9mdWxsU2NyZWVuRWxlbWVudCBhbmQgaXRzIGFjY2Vzc29ycyBoYXZl
IGFsc28gYmVlbiBhZGRlZCB0byBXZWJWaWV3LgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQv
V2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNocm9tZUNsaWVudDo6ZW50ZXJGdWxs
U2NyZWVuRm9yRWxlbWVudCk6CisgICAgICAgICogV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIFdlYktpdC52Y3Byb2ovV2ViS2l0LnZjcHJvajoKKyAgICAg
ICAgKiBXZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYlZpZXc6OnNldEZ1bGxTY3JlZW5FbGVtZW50
KTogQWRkZWQgYWNjZXNzb3IuCisgICAgICAgIChXZWJWSWV3OjpmdWxsU2NyZWVuRWxlbWVudCk6
IERpdHRvLgorICAgICAgICAoV2ViVmlldzo6d2ViVmlld1dpbmRvdyk6IERpdHRvLgorICAgICAg
ICAoV2ViVmlldzo6d2ViVmlld0hvc3RXaW5kb3cpOiBEaXR0by4KKyAgICAgICAgKFdlYlZpZXc6
OnNldFdlYlZpZXdIb3N0V2luZG93KTogRGl0dG8uCisgICAgICAgIChXZWJWaWV3Ojp3ZWJWaWV3
V2lsbEVudGVyRnVsbFNjcmVlbik6IFBhc3MgdGhyb3VnaCB0byBEb2N1bWVudC4KKyAgICAgICAg
KFdlYlZpZXc6OndlYlZpZXdEaWRFbnRlckZ1bGxTY3JlZW4pOiBEaXR0by4KKyAgICAgICAgKFdl
YlZpZXc6OndlYlZpZXdXaWxsRXhpdEZ1bGxTY3JlZW4pOiBEaXR0by4KKyAgICAgICAgKFdlYlZp
ZXc6OndlYlZpZXdEaWRFeGl0RnVsbFNjcmVlbik6IERpdHRvLgorICAgICAgICAqIFdlYlZpZXcu
aDoKKwogMjAxMS0wNC0yOSAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93
aW4vRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9GdWxs
c2NyZWVuVmlkZW9Db250cm9sbGVyLmNwcAppbmRleCA2YWRiY2FhLi4zODA5OGNjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L3dpbi9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmNwcApAQCAtMjc2
LDcgKzI3Niw3IEBAIHZvaWQgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcjo6ZW50ZXJGdWxsc2Ny
ZWVuKCkKICAgICBXZWJWaWV3KiB3ZWJWaWV3ID0ga2l0KG1fbWVkaWFFbGVtZW50LT5kb2N1bWVu
dCgpLT5wYWdlKCkpOwogICAgIEhXTkQgcGFyZW50SHduZCA9IHdlYlZpZXcgPyB3ZWJWaWV3LT52
aWV3V2luZG93KCkgOiAwOwogCi0gICAgbV9mdWxsc2NyZWVuV2luZG93LT5jcmVhdGVXaW5kb3co
cGFyZW50SHduZCk7CisgICAgbV9mdWxsc2NyZWVuV2luZG93LT5jcmVhdGVXaW5kb3cocGFyZW50
SHduZCwgTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdzo6U3RhcnRWaXNpYmxlKTsK
ICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgbV9mdWxsc2NyZWVuV2luZG93
LT5zZXRSb290Q2hpbGRMYXllcihtX3Jvb3RDaGlsZCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCmluZGV4IDQ2MGQxNmMu
LjI3ODVjM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dl
YkNocm9tZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQv
V2ViQ2hyb21lQ2xpZW50LmNwcApAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIldlYkhpc3Rv
cnkuaCIKICNpbmNsdWRlICJXZWJNdXRhYmxlVVJMUmVxdWVzdC5oIgogI2luY2x1ZGUgIldlYkRl
c2t0b3BOb3RpZmljYXRpb25zRGVsZWdhdGUuaCIKLSNpbmNsdWRlICJXZWJGdWxsU2NyZWVuQ29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIldlYlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiV2Vi
Vmlldy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQlN0cmluZy5oPgpAQCAtNDYsNiArNDUsNyBAQAog
I2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxv
YWRSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0Z1bGxTY3JlZW5Db250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFt
ZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ljb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0xvY2Fs
V2luZG93c0NvbnRleHQuaD4KQEAgLTkwNCw3ICs5MDQsNyBAQCB2b2lkIFdlYkNocm9tZUNsaWVu
dDo6ZW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgIH0gCiAKLSAgICBtX3dlYlZpZXctPmZ1bGxTY3JlZW5Db250cm9sbGVy
KCktPnNldEVsZW1lbnQoZWxlbWVudCk7CisgICAgbV93ZWJWaWV3LT5zZXRGdWxsU2NyZWVuRWxl
bWVudChlbGVtZW50KTsKICAgICBtX3dlYlZpZXctPmZ1bGxTY3JlZW5Db250cm9sbGVyKCktPmVu
dGVyRnVsbFNjcmVlbigpOwogfQogCkBAIC05MTgsNyArOTE4LDcgQEAgdm9pZCBXZWJDaHJvbWVD
bGllbnQ6OmV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEFTU0VSVChlbGVtZW50ID09IG1fd2ViVmlldy0+
ZnVsbFNjcmVlbkNvbnRyb2xsZXIoKS0+ZWxlbWVudCgpKTsKKyAgICBBU1NFUlQoZWxlbWVudCA9
PSBtX3dlYlZpZXctPmZ1bGxTY3JlZW5FbGVtZW50KCkpOwogICAgIG1fd2ViVmlldy0+ZnVsbFNj
cmVlbkNvbnRyb2xsZXIoKS0+ZXhpdEZ1bGxTY3JlZW4oKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC93aW4vV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktp
dC93aW4vV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA1MDgyOWQyLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkZ1bGxT
Y3JlZW5Db250cm9sbGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQgMjAwOS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotCi0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotCi0jaW5jbHVkZSAiV2ViRnVs
bFNjcmVlbkNvbnRyb2xsZXIuaCIKLQotI2luY2x1ZGUgIldlYlZpZXcuaCIKLSNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9FbGVtZW50Lmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9HcmFwaGljc0xheWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9NZWRpYVBsYXllclByaXZh
dGVGdWxsc2NyZWVuV2luZG93Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9XZWJDb3JlSW5zdGFuY2VI
YW5kbGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLWNsYXNzIFdlYkZ1bGxTY3Jl
ZW5Db250cm9sbGVyOjpQcml2YXRlIDogcHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3Jl
ZW5DbGllbnQgewotcHVibGljOgotICAgIFByaXZhdGUoV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIq
IGNvbnRyb2xsZXIsIFdlYlZpZXcqIHdlYlZpZXcpIAotICAgICAgICA6IGNvbnRyb2xsZXIoY29u
dHJvbGxlcikKLSAgICAgICAgLCB3ZWJWaWV3KHdlYlZpZXcpCi0gICAgICAgICwgaG9zdFdpbmRv
dygwKQotICAgICAgICAsIG9yaWdpbmFsSG9zdCgwKQotICAgICAgICAsIGlzRnVsbFNjcmVlbihm
YWxzZSkKLSAgICB7Ci0gICAgfQotICAgIHZpcnR1YWwgflByaXZhdGUoKSB7IH0KLQotICAgIHZp
cnR1YWwgTFJFU1VMVCBmdWxsc2NyZWVuQ2xpZW50V25kUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0s
IExQQVJBTSk7Ci0gICAgCi0gICAgV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIqIGNvbnRyb2xsZXI7
Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQ7Ci0gICAgV2ViVmlldyogd2ViVmlldzsKLSAg
ICBPd25QdHI8TWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdz4gZnVsbFNjcmVlbldp
bmRvdzsKLSAgICBJbnRSZWN0IGZ1bGxTY3JlZW5GcmFtZTsKLSAgICBIV05EIGhvc3RXaW5kb3c7
Ci0gICAgSFdORCBvcmlnaW5hbEhvc3Q7Ci0gICAgYm9vbCBpc0Z1bGxTY3JlZW47Ci19OwotCi1M
UkVTVUxUIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyOjpQcml2YXRlOjpmdWxsc2NyZWVuQ2xpZW50
V25kUHJvYyhIV05EIGh3bmQsIFVJTlQgbXNnLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFt
KQotewotICAgIExSRVNVTFQgbFJlc3VsdCA9IDA7Ci0KLSAgICBzd2l0Y2ggKG1zZykgewotICAg
IGNhc2UgV01fQ1JFQVRFOgotICAgICAgICBob3N0V2luZG93ID0gaHduZDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBXTV9ERVNUUk9ZOgotICAgICAgICBob3N0V2luZG93ID0gMDsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBXTV9NT1ZFOgotICAgICAgICBmdWxsU2NyZWVuRnJhbWUuc2V0
WChMT1dPUkQobFBhcmFtKSk7Ci0gICAgICAgIGZ1bGxTY3JlZW5GcmFtZS5zZXRZKEhJV09SRChs
UGFyYW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXTV9TSVpFOgotICAgICAgICBmdWxs
U2NyZWVuRnJhbWUuc2V0V2lkdGgoTE9XT1JEKGxQYXJhbSkpOwotICAgICAgICBmdWxsU2NyZWVu
RnJhbWUuc2V0SGVpZ2h0KEhJV09SRChsUGFyYW0pKTsKLSAgICAgICAgaWYgKHdlYlZpZXctPnZp
ZXdXaW5kb3coKSkKLSAgICAgICAgICAgIDo6U2V0V2luZG93UG9zKHdlYlZpZXctPnZpZXdXaW5k
b3coKSwgMCwgMCwgMCwgZnVsbFNjcmVlbkZyYW1lLndpZHRoKCksIGZ1bGxTY3JlZW5GcmFtZS5o
ZWlnaHQoKSwgU1dQX05PUkVQT1NJVElPTiAgfCBTV1BfTk9NT1ZFKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBXTV9LRVlET1dOOgotICAgICAgICBpZiAod1BhcmFtID09IFZLX0VTQ0FQRSkg
ewotICAgICAgICAgICAgY29udHJvbGxlci0+ZXhpdEZ1bGxTY3JlZW4oKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIC8vIEZhbGwgdGhyb3VnaC4KLSAgICBkZWZhdWx0
OgotICAgICAgICBsUmVzdWx0ID0gOjpEZWZXaW5kb3dQcm9jKGh3bmQsIG1zZywgd1BhcmFtLCBs
UGFyYW0pOwotICAgIH0KLQotICAgIHJldHVybiBsUmVzdWx0OwotfQotCi1XZWJGdWxsU2NyZWVu
Q29udHJvbGxlcjo6V2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIoV2ViVmlldyogd2ViVmlldykKLSAg
ICA6IG1fcHJpdmF0ZShhZG9wdFB0cihuZXcgV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXI6OlByaXZh
dGUodGhpcywgd2ViVmlldykpKQotewotICAgIEFTU0VSVCh3ZWJWaWV3KTsKLX0KLQotV2ViRnVs
bFNjcmVlbkNvbnRyb2xsZXI6On5XZWJGdWxsU2NyZWVuQ29udHJvbGxlcigpCi17Ci19Ci0KLXZv
aWQgV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXI6OnNldEVsZW1lbnQoUGFzc1JlZlB0cjxFbGVtZW50
PiBlbGVtZW50KQotewotICAgIG1fcHJpdmF0ZS0+ZWxlbWVudCA9IGVsZW1lbnQ7Ci19Ci0KLUVs
ZW1lbnQqIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyOjplbGVtZW50KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9wcml2YXRlLT5lbGVtZW50LmdldCgpOwotfQotCi1ib29sIFdlYkZ1bGxTY3JlZW5D
b250cm9sbGVyOjppc0Z1bGxTY3JlZW4oKSBjb25zdAotewotICAgIHJldHVybiBtX3ByaXZhdGUt
PmlzRnVsbFNjcmVlbjsKLX0KLQotdm9pZCBXZWJGdWxsU2NyZWVuQ29udHJvbGxlcjo6ZW50ZXJG
dWxsU2NyZWVuKCkKLXsKLSAgICBpZiAobV9wcml2YXRlLT5pc0Z1bGxTY3JlZW4pCi0gICAgICAg
IHJldHVybjsKLSAgICBtX3ByaXZhdGUtPmlzRnVsbFNjcmVlbiA9IHRydWU7Ci0KLSAgICBBU1NF
UlQobV9wcml2YXRlLT5lbGVtZW50KTsKLSAgICBtX3ByaXZhdGUtPmVsZW1lbnQtPmRvY3VtZW50
KCktPndlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KG1fcHJpdmF0ZS0+ZWxlbWVu
dC5nZXQoKSk7Ci0KLSAgICBBU1NFUlQoIW1fcHJpdmF0ZS0+ZnVsbFNjcmVlbldpbmRvdyk7Ci0g
ICAgbV9wcml2YXRlLT5mdWxsU2NyZWVuV2luZG93ID0gYWRvcHRQdHIobmV3IE1lZGlhUGxheWVy
UHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3cobV9wcml2YXRlLmdldCgpKSk7Ci0gICAgQVNTRVJUKG1f
cHJpdmF0ZS0+ZnVsbFNjcmVlbldpbmRvdyk7Ci0KLSAgICBtX3ByaXZhdGUtPmZ1bGxTY3JlZW5X
aW5kb3ctPmNyZWF0ZVdpbmRvdygwKTsKLSAgICBBU1NFUlQobV9wcml2YXRlLT5ob3N0V2luZG93
KTsKLQotICAgIEhXTkQgb3JpZ2luYWxIb3N0ID0gMDsKLSAgICBpZiAoRkFJTEVEKG1fcHJpdmF0
ZS0+d2ViVmlldy0+aG9zdFdpbmRvdyhyZWludGVycHJldF9jYXN0PE9MRV9IQU5ETEUqPigmb3Jp
Z2luYWxIb3N0KSkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoRkFJTEVEKG1fcHJpdmF0
ZS0+d2ViVmlldy0+c2V0SG9zdFdpbmRvdyhyZWludGVycHJldF9jYXN0PE9MRV9IQU5ETEU+KG1f
cHJpdmF0ZS0+aG9zdFdpbmRvdykpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50UmVjdCB2
aWV3RnJhbWUoSW50UG9pbnQoKSwgbV9wcml2YXRlLT5mdWxsU2NyZWVuRnJhbWUuc2l6ZSgpKTsK
LSAgICA6OlNldFdpbmRvd1BvcyhtX3ByaXZhdGUtPndlYlZpZXctPnZpZXdXaW5kb3coKSwgSFdO
RF9UT1AsIDAsIDAsIHZpZXdGcmFtZS53aWR0aCgpLCB2aWV3RnJhbWUuaGVpZ2h0KCksIFNXUF9O
T1JFUE9TSVRJT04pOwotICAgIDo6U2hvd1dpbmRvdyhtX3ByaXZhdGUtPmhvc3RXaW5kb3csIFNX
X1NIT1cpOwotICAgIG1fcHJpdmF0ZS0+d2ViVmlldy0+cmVwYWludCh2aWV3RnJhbWUsIGZhbHNl
LCB0cnVlKTsKLSAgICBtX3ByaXZhdGUtPm9yaWdpbmFsSG9zdCA9IG9yaWdpbmFsSG9zdDsKLQot
ICAgIG1fcHJpdmF0ZS0+ZWxlbWVudC0+ZG9jdW1lbnQoKS0+d2Via2l0RGlkRW50ZXJGdWxsU2Ny
ZWVuRm9yRWxlbWVudChtX3ByaXZhdGUtPmVsZW1lbnQuZ2V0KCkpOwotfQotCi12b2lkIFdlYkZ1
bGxTY3JlZW5Db250cm9sbGVyOjpleGl0RnVsbFNjcmVlbigpCi17Ci0gICAgaWYgKCFtX3ByaXZh
dGUtPmlzRnVsbFNjcmVlbikKLSAgICAgICAgcmV0dXJuOwotICAgIG1fcHJpdmF0ZS0+aXNGdWxs
U2NyZWVuID0gZmFsc2U7Ci0KLSAgICBBU1NFUlQobV9wcml2YXRlLT5lbGVtZW50KTsKLSAgICBt
X3ByaXZhdGUtPmVsZW1lbnQtPmRvY3VtZW50KCktPndlYmtpdFdpbGxFeGl0RnVsbFNjcmVlbkZv
ckVsZW1lbnQobV9wcml2YXRlLT5lbGVtZW50LmdldCgpKTsKLQotICAgIEFTU0VSVChtX3ByaXZh
dGUtPmhvc3RXaW5kb3cpOwotICAgIGlmIChGQUlMRUQobV9wcml2YXRlLT53ZWJWaWV3LT5zZXRI
b3N0V2luZG93KHJlaW50ZXJwcmV0X2Nhc3Q8T0xFX0hBTkRMRT4obV9wcml2YXRlLT5vcmlnaW5h
bEhvc3QpKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6RGVzdHJveVdpbmRvdyhtX3ByaXZh
dGUtPmhvc3RXaW5kb3cpOwotICAgIEFTU0VSVCghbV9wcml2YXRlLT5ob3N0V2luZG93KTsKLSAg
ICBtX3ByaXZhdGUtPmZ1bGxTY3JlZW5XaW5kb3cgPSAwOwotCi0gICAgbV9wcml2YXRlLT5lbGVt
ZW50LT5kb2N1bWVudCgpLT53ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZvckVsZW1lbnQobV9wcml2
YXRlLT5lbGVtZW50LmdldCgpKTsKLSAgICBtX3ByaXZhdGUtPmVsZW1lbnQgPSAwOwotfQotCi0j
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkZ1bGxTY3JlZW5Db250cm9s
bGVyLmggYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJGdWxsU2NyZWVuQ29udHJvbGxlci5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzllMDRiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQvd2luL1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2
MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBXZWJGdWxsU2NyZWVuQ29udHJvbGxlcl9oCi0j
ZGVmaW5lIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyX2gKLQotI2lmIEVOQUJMRShGVUxMU0NSRUVO
X0FQSSkKLQotI2luY2x1ZGUgIldlYktpdC5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBF
bGVtZW50OwotfQotCi1jbGFzcyBXZWJWaWV3OwotCi1jbGFzcyBXZWJGdWxsU2NyZWVuQ29udHJv
bGxlciB7Ci1wdWJsaWM6Ci0gICAgV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIoV2ViVmlldyopOwot
ICAgIH5XZWJGdWxsU2NyZWVuQ29udHJvbGxlcigpOwotCi1wdWJsaWM6Ci0gICAgdm9pZCBzZXRF
bGVtZW50KFBhc3NSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4pOwotICAgIFdlYkNvcmU6OkVsZW1l
bnQqIGVsZW1lbnQoKSBjb25zdDsKLQotICAgIHZvaWQgZW50ZXJGdWxsU2NyZWVuKCk7Ci0gICAg
dm9pZCBleGl0RnVsbFNjcmVlbigpOwotICAgIAotICAgIGJvb2wgaXNGdWxsU2NyZWVuKCkgY29u
c3Q7Ci0KLXByb3RlY3RlZDoKLSAgICBjbGFzcyBQcml2YXRlOwotICAgIGZyaWVuZCBjbGFzcyBQ
cml2YXRlOwotICAgIE93blB0cjxXZWJGdWxsU2NyZWVuQ29udHJvbGxlcjo6UHJpdmF0ZT4gbV9w
cml2YXRlOwotfTsKLQotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC93aW4vV2ViS2l0LnZjcHJvai9XZWJLaXQudmNwcm9qIGIvU291cmNlL1dlYktpdC93aW4vV2Vi
S2l0LnZjcHJvai9XZWJLaXQudmNwcm9qCmluZGV4IGE1ZDY3MmYuLjRkMjVmNDQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYktpdC52Y3Byb2ovV2ViS2l0LnZjcHJvagorKysgYi9T
b3VyY2UvV2ViS2l0L3dpbi9XZWJLaXQudmNwcm9qL1dlYktpdC52Y3Byb2oKQEAgLTUxMiwxMCAr
NTEyLDYgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0i
Li5cV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8Rmls
ZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cV2ViR2VvbG9jYXRpb25Qb2xpY3lMaXN0ZW5lci5oIgog
CQkJCT4KIAkJCTwvRmlsZT4KQEAgLTkzMiwxMCArOTI4LDYgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+
CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIu
Y3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxX
ZWJHZW9sb2NhdGlvblBvbGljeUxpc3RlbmVyLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvd2lu
L1dlYlZpZXcuY3BwCmluZGV4IDJmNzJkNWUuLjM4ZjZmODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvd2luL1dlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3Bw
CkBAIC0xNjAsMTAgKzE2MCw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNBTGF5ZXIu
aD4KICNlbmRpZgogCi0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotI2luY2x1ZGUgIldlYkZ1
bGxTY3JlZW5Db250cm9sbGVyLmgiCi0jZW5kaWYKLQogI2luY2x1ZGUgPFNobE9iai5oPgogI2lu
Y2x1ZGUgPGNvbXV0aWwuaD4KICNpbmNsdWRlIDxkaW1tLmg+CkBAIC02NzYwLDEwICs2NzU2LDU3
IEBAIGJvb2wgV2ViVmlldzo6aXNGdWxsU2NyZWVuKCkgY29uc3QKICAgICByZXR1cm4gbV9mdWxs
c2NyZWVuQ29udHJvbGxlciAmJiBtX2Z1bGxzY3JlZW5Db250cm9sbGVyLT5pc0Z1bGxTY3JlZW4o
KTsKIH0KIAotV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIqIFdlYlZpZXc6OmZ1bGxTY3JlZW5Db250
cm9sbGVyKCkKK0Z1bGxTY3JlZW5Db250cm9sbGVyKiBXZWJWaWV3OjpmdWxsU2NyZWVuQ29udHJv
bGxlcigpCiB7CiAgICAgaWYgKCFtX2Z1bGxzY3JlZW5Db250cm9sbGVyKQotICAgICAgICBtX2Z1
bGxzY3JlZW5Db250cm9sbGVyID0gYWRvcHRQdHIobmV3IFdlYkZ1bGxTY3JlZW5Db250cm9sbGVy
KHRoaXMpKTsKKyAgICAgICAgbV9mdWxsc2NyZWVuQ29udHJvbGxlciA9IGFkb3B0UHRyKG5ldyBG
dWxsU2NyZWVuQ29udHJvbGxlcih0aGlzKSk7CiAgICAgcmV0dXJuIG1fZnVsbHNjcmVlbkNvbnRy
b2xsZXIuZ2V0KCk7CiB9CisKK3ZvaWQgV2ViVmlldzo6c2V0RnVsbFNjcmVlbkVsZW1lbnQoUGFz
c1JlZlB0cjxFbGVtZW50PiBlbGVtZW50KQoreworICAgIG1fZnVsbFNjcmVlbkVsZW1lbnQgPSBl
bGVtZW50OworfQorCitIV05EIFdlYlZpZXc6OndlYlZpZXdXaW5kb3coKSBjb25zdAoreworICAg
IHJldHVybiBtX3ZpZXdXaW5kb3c7Cit9CisKK0hXTkQgV2ViVmlldzo6d2ViVmlld0hvc3RXaW5k
b3coKSBjb25zdAoreworICAgIHJldHVybiBtX2hvc3RXaW5kb3c7Cit9CisKK3ZvaWQgV2ViVmll
dzo6c2V0V2ViVmlld0hvc3RXaW5kb3coSFdORCBob3N0V2luZG93KQoreworICAgIHNldEhvc3RX
aW5kb3cocmVpbnRlcnByZXRfY2FzdDxPTEVfSEFORExFPihob3N0V2luZG93KSk7Cit9CisKK3Zv
aWQgV2ViVmlldzo6d2ViVmlld1dpbGxFbnRlckZ1bGxTY3JlZW4oKQoreworICAgIEFTU0VSVCht
X2Z1bGxTY3JlZW5FbGVtZW50KTsKKyAgICBtX2Z1bGxTY3JlZW5FbGVtZW50LT5kb2N1bWVudCgp
LT53ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChtX2Z1bGxTY3JlZW5FbGVtZW50
LmdldCgpKTsKK30KKwordm9pZCBXZWJWaWV3Ojp3ZWJWaWV3RGlkRW50ZXJGdWxsU2NyZWVuKCkK
K3sKKyAgICBBU1NFUlQobV9mdWxsU2NyZWVuRWxlbWVudCk7CisgICAgbV9mdWxsU2NyZWVuRWxl
bWVudC0+ZG9jdW1lbnQoKS0+d2Via2l0RGlkRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChtX2Z1
bGxTY3JlZW5FbGVtZW50LmdldCgpKTsKK30KKwordm9pZCBXZWJWaWV3Ojp3ZWJWaWV3V2lsbEV4
aXRGdWxsU2NyZWVuKCkKK3sKKyAgICBBU1NFUlQobV9mdWxsU2NyZWVuRWxlbWVudCk7CisgICAg
bV9mdWxsU2NyZWVuRWxlbWVudC0+ZG9jdW1lbnQoKS0+d2Via2l0V2lsbEV4aXRGdWxsU2NyZWVu
Rm9yRWxlbWVudChtX2Z1bGxTY3JlZW5FbGVtZW50LmdldCgpKTsKK30KKwordm9pZCBXZWJWaWV3
Ojp3ZWJWaWV3RGlkRXhpdEZ1bGxTY3JlZW4oKQoreworICAgIEFTU0VSVChtX2Z1bGxTY3JlZW5F
bGVtZW50KTsKKyAgICBtX2Z1bGxTY3JlZW5FbGVtZW50LT5kb2N1bWVudCgpLT53ZWJraXREaWRF
eGl0RnVsbFNjcmVlbkZvckVsZW1lbnQobV9mdWxsU2NyZWVuRWxlbWVudC5nZXQoKSk7CisgICAg
bV9mdWxsU2NyZWVuRWxlbWVudCA9IDA7Cit9CisKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L3dpbi9XZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmgKaW5k
ZXggYmMzNjQ2MC4uNWZmZDJiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2ViVmll
dy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuaApAQCAtMTQsNyArMTQsNyBAQAog
ICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNm
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQkl1TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCiAgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLApAQCAtNDQs
NyArNDQsMTMgQEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAjaW5jbHVkZSA8
V2ViQ29yZS9DQUNGTGF5ZXJUcmVlSG9zdENsaWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3Jh
cGhpY3NMYXllckNsaWVudC5oPgorI2VuZGlmCisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkp
CisjaW5jbHVkZSA8V2ViQ29yZS9GdWxsU2NyZWVuQ29udHJvbGxlci5oPgorI2VuZGlmCiAKKyNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
Y2xhc3MgQ0FDRkxheWVyVHJlZUhvc3Q7CiB9CkBAIC01NywxNCArNjMsOSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBjbGFzcyBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyOwogY2xhc3MgV2ViQmFj
a0ZvcndhcmRMaXN0OwogY2xhc3MgV2ViRnJhbWU7Ci1jbGFzcyBXZWJGdWxsU2NyZWVuQ29udHJv
bGxlcjsKIGNsYXNzIFdlYkluc3BlY3RvcjsKIGNsYXNzIFdlYkluc3BlY3RvckNsaWVudDsKIAot
I2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLWNsYXNzIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVy
OwotI2VuZGlmCi0KIHR5cGVkZWYgV2ViQ29yZTo6UmVmQ291bnRlZEdESUhhbmRsZTxIQklUTUFQ
PiBSZWZDb3VudGVkSEJJVE1BUDsKIHR5cGVkZWYgV2ViQ29yZTo6UmVmQ291bnRlZEdESUhhbmRs
ZTxIUkdOPiBSZWZDb3VudGVkSFJHTjsKIApAQCAtODgsNiArODksOSBAQCBjbGFzcyBXZWJWaWV3
CiAgICAgLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50CiAgICAgLCBXZWJDb3JlOjpDQUNG
TGF5ZXJUcmVlSG9zdENsaWVudAogI2VuZGlmCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQor
ICAgICwgV2ViQ29yZTo6RnVsbFNjcmVlbkNvbnRyb2xsZXJDbGllbnQKKyNlbmRpZgogewogcHVi
bGljOgogICAgIHN0YXRpYyBXZWJWaWV3KiBjcmVhdGVJbnN0YW5jZSgpOwpAQCAtOTQ0LDcgKzk0
OCw5IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAgICAgYm9vbCBzdXBw
b3J0c0Z1bGxTY3JlZW5Gb3JFbGVtZW50KGNvbnN0IFdlYkNvcmU6OkVsZW1lbnQqLCBib29sIHdp
dGhLZXlib2FyZCkgY29uc3Q7CiAgICAgYm9vbCBpc0Z1bGxTY3JlZW4oKSBjb25zdDsKLSAgICBX
ZWJGdWxsU2NyZWVuQ29udHJvbGxlciogZnVsbFNjcmVlbkNvbnRyb2xsZXIoKTsKKyAgICBXZWJD
b3JlOjpGdWxsU2NyZWVuQ29udHJvbGxlciogZnVsbFNjcmVlbkNvbnRyb2xsZXIoKTsKKyAgICB2
b2lkIHNldEZ1bGxTY3JlZW5FbGVtZW50KFBhc3NSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4pOwor
ICAgIFdlYkNvcmU6OkVsZW1lbnQqIGZ1bGxTY3JlZW5FbGVtZW50KCkgY29uc3QgeyByZXR1cm4g
bV9mdWxsU2NyZWVuRWxlbWVudC5nZXQoKTsgfQogI2VuZGlmCiAKIHByaXZhdGU6CkBAIC0xMDEw
LDYgKzEwMTYsMTYgQEAgcHJvdGVjdGVkOgogCiAgICAgdmlydHVhbCB2b2lkIHdpbmRvd1JlY2Vp
dmVkTWVzc2FnZShIV05ELCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNKTsKIAorI2lmIEVO
QUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICB2aXJ0dWFsIEhXTkQgd2ViVmlld1dpbmRvdygpIGNv
bnN0OworICAgIHZpcnR1YWwgSFdORCB3ZWJWaWV3SG9zdFdpbmRvdygpIGNvbnN0OworICAgIHZp
cnR1YWwgdm9pZCBzZXRXZWJWaWV3SG9zdFdpbmRvdyhIV05EKTsKKyAgICB2aXJ0dWFsIHZvaWQg
d2ViVmlld1dpbGxFbnRlckZ1bGxTY3JlZW4oKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2ViVmlld0Rp
ZEVudGVyRnVsbFNjcmVlbigpOworICAgIHZpcnR1YWwgdm9pZCB3ZWJWaWV3V2lsbEV4aXRGdWxs
U2NyZWVuKCk7CisgICAgdmlydHVhbCB2b2lkIHdlYlZpZXdEaWRFeGl0RnVsbFNjcmVlbigpOwor
I2VuZGlmCisKICAgICBVTE9ORyBtX3JlZkNvdW50OwogI2lmICFBU1NFUlRfRElTQUJMRUQKICAg
ICBib29sIG1fZGVsZXRpb25IYXNCZWd1bjsKQEAgLTExMDMsNyArMTExOSw4IEBAIHByb3RlY3Rl
ZDoKICAgICBSZWZQdHI8V2ViQ29yZTo6SGlzdG9yeUl0ZW0+IG1fZ2xvYmFsSGlzdG9yeUl0ZW07
CiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgT3duUHRyPFdlYkZ1bGxTY3JlZW5D
b250cm9sbGVyPiBtX2Z1bGxzY3JlZW5Db250cm9sbGVyOworICAgIFJlZlB0cjxXZWJDb3JlOjpF
bGVtZW50PiBtX2Z1bGxTY3JlZW5FbGVtZW50OworICAgIE93blB0cjxXZWJDb3JlOjpGdWxsU2Ny
ZWVuQ29udHJvbGxlcj4gbV9mdWxsc2NyZWVuQ29udHJvbGxlcjsKICNlbmRpZgogfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCmluZGV4IDgzZmY3NTguLjU4NjJmNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MyBAQAor
MjAxMS0wNS0wMiAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgRlVMTFNDUkVF
Tl9BUEkgb24gV2luZG93cywgUGFydCAzOiBXZWJLaXQyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01OTg0NQorCisgICAgICAgIEltcGxlbWVudCBhIHNp
bWlsYXIgZnVsbCBzY3JlZW4gbW9kZSB0byBXZWJLaXQ7IFJlLXVzZSB0aGUgc2FtZQorICAgICAg
ICBmdWxsIHNjcmVlbiB3aW5kb3cgY2xhc3MgdXNlZCBpbiBXZWJLaXQgaW4gdGhlIG5ldyBXZWJG
dWxsU2NyZWVuQ29udHJvbGxlci4KKyAgICAgICAgTm8gYW5pbWF0aW9ucyAoeWV0KSwgc28gbWFu
eSBvZiB0aGUgc3R1YnMgcmVtYWluIHVuaW1wbGVtZW50ZWQuCisKKyAgICAgICAgKiBVSVByb2Nl
c3Mvd2luL1dlYlZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpvbktleUV2ZW50
KTogSGFuZGxlIFZLX0VTQ0FQRSBhbmQgY2FuY2VsIGZ1bGwgc2NyZWVuCisgICAgICAgICAgICBt
b2RlIGlmIGNhdWdodC4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6ZnVsbFNjcmVlbkNvbnRy
b2xsZXIpOiBMYXppbHkgaW5zdGFudGlhdGUgbV9mdWxsU2NyZWVuQ29udHJvbGxlci4KKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlldzo6d2ViVmlld1dpbmRvdyk6IEFkZGVkIGFjY2Vzc29yLgorICAg
ICAgICAoV2ViS2l0OjpXZWJWaWV3Ojp3ZWJWaWV3SG9zdFdpbmRvdyk6IERpdHRvLgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3OjpzZXRXZWJWaWV3SG9zdFdpbmRvdyk6IERpdHRvLgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3Ojp3ZWJWaWV3V2lsbEVudGVyRnVsbFNjcmVlbik6IFBhc3MgdGhy
b3VnaCB0byBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5LgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3Ojp3ZWJWaWV3RGlkRW50ZXJGdWxsU2NyZWVuKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXc6OndlYlZpZXdXaWxsRXhpdEZ1bGxTY3JlZW4pOiBEaXR0by4KKyAgICAgICAgKFdl
YktpdDo6V2ViVmlldzo6d2ViVmlld0RpZEV4aXRGdWxsU2NyZWVuKTogRGl0dG8uCisgICAgICAg
ICogVUlQcm9jZXNzL3dpbi9XZWJWaWV3Lmg6CisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJG
dWxsU2NyZWVuTWFuYWdlclByb3h5V2luLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnVsbFNj
cmVlbk1hbmFnZXJQcm94eTo6ZW50ZXJGdWxsU2NyZWVuKTogUGFzcyB0aHJvdWdoIHRvIAorICAg
ICAgICAgICAgV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuCisgICAgICAgIChXZWJLaXQ6OldlYkZ1
bGxTY3JlZW5NYW5hZ2VyUHJveHk6OmV4aXRGdWxsU2NyZWVuKTogRGl0dG8uCisgICAgICAgICog
VUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6V2Vi
Vmlldyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6Om9uS2V5RXZlbnQpOiBIYW5kbGUgdGhl
IGVzY2FwZSBrZXkgYW5kIGV4aXQKKyAgICAgICAgICAgZnVsbCBzY3JlZW4gbW9kZSB3aGVuIGRl
dGVjdGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpmdWxsU2NyZWVuV2luZG93Q29udHJv
bGxlcik6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViVmlldy5oOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvRnVsbFNjcmVlbi93aW4vV2ViRnVsbFNjcmVlbk1hbmFnZXJXaW4uY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJGdWxsU2NyZWVuTWFuYWdlcldpbjo6fldlYkZ1bGxTY3Jl
ZW5NYW5hZ2VyV2luKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnVsbFNjcmVlbk1hbmFnZXJXaW46
OnNldFJvb3RGdWxsU2NyZWVuTGF5ZXIpOiBIb3N0IHRoZSByb290CisgICAgICAgICAgICBmdWxs
IHNjcmVlbiBsYXllciBpZiBpdCBnZXRzIGRldGFjaGVkLgorICAgICAgICAqIFdlYlByb2Nlc3Mv
RnVsbFNjcmVlbi93aW4vV2ViRnVsbFNjcmVlbk1hbmFnZXJXaW4uaDoKKyAgICAgICAgKiB3aW4v
V2ViS2l0Mi52Y3Byb2o6CisKIDIwMTEtMDQtMjggIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSm9uIEhvbmV5Y3V0dC4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eVdp
bi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYkZ1bGxTY3JlZW5NYW5hZ2Vy
UHJveHlXaW4uY3BwCmluZGV4IGRjYWM2ODkuLmI2MTU0YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eVdpbi5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5
V2luLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQog
CisjaW5jbHVkZSAiV2ViVmlldy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKQEAgLTM2LDE0ICszNywxNCBAQCB2b2lkIFdlYkZ1bGxTY3JlZW5N
YW5hZ2VyUHJveHk6OmVudGVyRnVsbFNjcmVlbigpCiB7CiAgICAgaWYgKCFtX3dlYlZpZXcpCiAg
ICAgICAgIHJldHVybjsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50CisgICAgbV93ZWJWaWV3LT5m
dWxsU2NyZWVuQ29udHJvbGxlcigpLT5lbnRlckZ1bGxTY3JlZW4oKTsKIH0KIAogdm9pZCBXZWJG
dWxsU2NyZWVuTWFuYWdlclByb3h5OjpleGl0RnVsbFNjcmVlbigpCiB7CiAgICAgaWYgKCFtX3dl
YlZpZXcpCiAgICAgICAgIHJldHVybjsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50CisgICAgbV93
ZWJWaWV3LT5mdWxsU2NyZWVuQ29udHJvbGxlcigpLT5leGl0RnVsbFNjcmVlbigpOwogfQogCiB2
b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHk6OmJlZ2FuRW50ZXJGdWxsU2NyZWVuQW5pbWF0
aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVmlldy5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCmluZGV4IDhjZWNi
MDIuLjYxNWIyMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2Vi
Vmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcApA
QCAtNTUsNiArNTUsMTAgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1dpbmRvd3NUb3VjaC5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJ
KQorI2luY2x1ZGUgIldlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHkuaCIKKyNlbmRpZgorCiBuYW1l
c3BhY2UgSW1lIHsKIC8vIFdlIG5lZWQgdGhlc2UgZnVuY3Rpb25zIGluIGEgc2VwYXJhdGUgbmFt
ZXNwYWNlLCBiZWNhdXNlIGluIHRoZSBnbG9iYWwgbmFtZXNwYWNlIHRoZXkgY29uZmxpY3QKIC8v
IHdpdGggdGhlIGRlZmluaXRpb25zIGluIGltbS5oIG9ubHkgYnkgdGhlIHR5cGUgbW9kaWZpZXIg
KHRoZSBtYWNybyBkZWZpbmVzIHRoZW0gYXMgc3RhdGljKSBhbmQKQEAgLTI5OSw2ICszMDMsMTAg
QEAgV2ViVmlldzo6V2ViVmlldyhSRUNUIHJlY3QsIFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYlBh
Z2VHcm91cCogcGFnZUdyb3VwLCBIV05EIHAKIAogICAgIC8vIEluaXRpYWxpemUgdGhlIHRvcCBs
ZXZlbCBwYXJlbnQgd2luZG93IGFuZCByZWdpc3RlciBpdCB3aXRoIHRoZSBXaW5kb3dNZXNzYWdl
QnJvYWRjYXN0ZXIuCiAgICAgd2luZG93QW5jZXN0cnlEaWRDaGFuZ2UoKTsKKworI2lmIEVOQUJM
RShGVUxMU0NSRUVOX0FQSSkKKyAgICBtX3BhZ2UtPmZ1bGxTY3JlZW5NYW5hZ2VyKCktPnNldFdl
YlZpZXcodGhpcyk7CisjZW5kaWYKIH0KIAogV2ViVmlldzo6fldlYlZpZXcoKQpAQCAtNjA4LDYg
KzYxNiwxNCBAQCBMUkVTVUxUIFdlYlZpZXc6Om9uR2VzdHVyZShIV05EIGhXbmQsIFVJTlQgbWVz
c2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbQogCiBMUkVTVUxUIFdlYlZpZXc6Om9u
S2V5RXZlbnQoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBs
UGFyYW0sIGJvb2wmIGhhbmRsZWQpCiB7CisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAg
IC8vIFRyYXAgdGhlIEVTQyBrZXkgd2hlbiBpbiBmdWxsIHNjcmVlbiBtb2RlLgorICAgIGlmICht
ZXNzYWdlID09IFdNX0tFWURPV04gJiYgd1BhcmFtID09IFZLX0VTQ0FQRSAmJiBtX2Z1bGxTY3Jl
ZW5Db250cm9sbGVyICYmIG1fZnVsbFNjcmVlbkNvbnRyb2xsZXItPmlzRnVsbFNjcmVlbigpKSB7
CisgICAgICAgIG1fZnVsbFNjcmVlbkNvbnRyb2xsZXItPmV4aXRGdWxsU2NyZWVuKCk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisjZW5kaWYKKwogICAgIG1fcGFnZS0+aGFuZGxlS2V5
Ym9hcmRFdmVudChOYXRpdmVXZWJLZXlib2FyZEV2ZW50KGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwg
bFBhcmFtKSk7CiAKICAgICAvLyBXZSBjbGFpbSBoZXJlIHRvIGFsd2F5cyBoYXZlIGhhbmRsZWQg
dGhlIGV2ZW50LiBJZiB0aGUgZXZlbnQgaXMgbm90IGluIGZhY3QgaGFuZGxlZCwgd2Ugd2lsbApA
QCAtMTY1MCw0ICsxNjY2LDQ4IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6
RHJvcChJRGF0YU9iamVjdCogcERhdGFPYmplY3QsIERXT1JEIGdyZktleVN0CiAgICAgcmV0dXJu
IFNfT0s7CiB9CiAKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCitGdWxsU2NyZWVuQ29udHJv
bGxlciogV2ViVmlldzo6ZnVsbFNjcmVlbkNvbnRyb2xsZXIoKQoreworICAgIGlmICghbV9mdWxs
U2NyZWVuQ29udHJvbGxlcikKKyAgICAgICAgbV9mdWxsU2NyZWVuQ29udHJvbGxlciA9IGFkb3B0
UHRyKG5ldyBGdWxsU2NyZWVuQ29udHJvbGxlcih0aGlzKSk7CisgICAgcmV0dXJuIG1fZnVsbFNj
cmVlbkNvbnRyb2xsZXIuZ2V0KCk7Cit9CisKK0hXTkQgV2ViVmlldzo6d2ViVmlld1dpbmRvdygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fd2luZG93OworfQorCitIV05EIFdlYlZpZXc6OndlYlZp
ZXdIb3N0V2luZG93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gOjpHZXRQYXJlbnQobV93aW5kb3cp
OworfQorCit2b2lkIFdlYlZpZXc6OnNldFdlYlZpZXdIb3N0V2luZG93KEhXTkQgaG9zdFdpbmRv
dykKK3sKKyAgICBzZXRQYXJlbnRXaW5kb3coaG9zdFdpbmRvdyk7Cit9CisKK3ZvaWQgV2ViVmll
dzo6d2ViVmlld1dpbGxFbnRlckZ1bGxTY3JlZW4oKQoreworICAgIHBhZ2UoKS0+ZnVsbFNjcmVl
bk1hbmFnZXIoKS0+d2lsbEVudGVyRnVsbFNjcmVlbigpOworfQorCit2b2lkIFdlYlZpZXc6Ondl
YlZpZXdEaWRFbnRlckZ1bGxTY3JlZW4oKQoreworICAgIHBhZ2UoKS0+ZnVsbFNjcmVlbk1hbmFn
ZXIoKS0+ZGlkRW50ZXJGdWxsU2NyZWVuKCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6d2ViVmlld1dp
bGxFeGl0RnVsbFNjcmVlbigpCit7CisgICAgcGFnZSgpLT5mdWxsU2NyZWVuTWFuYWdlcigpLT53
aWxsRXhpdEZ1bGxTY3JlZW4oKTsKK30KKwordm9pZCBXZWJWaWV3Ojp3ZWJWaWV3RGlkRXhpdEZ1
bGxTY3JlZW4oKQoreworICAgIHBhZ2UoKS0+ZnVsbFNjcmVlbk1hbmFnZXIoKS0+ZGlkRXhpdEZ1
bGxTY3JlZW4oKTsKK30KKworI2VuZGlmCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVmlldy5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmgKaW5kZXggZDYyMzExYy4uYTRhODg2MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmgKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmgKQEAgLTQwLDEzICs0MCwyNSBAQAogI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCisjaWYg
RU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorI2luY2x1ZGUgPFdlYkNvcmUvRnVsbFNjcmVlbkNvbnRy
b2xsZXIuaD4KKyNlbmRpZgorCiBpbnRlcmZhY2UgSURyb3BUYXJnZXRIZWxwZXI7CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewogCiBjbGFzcyBEcmF3aW5nQXJlYVByb3h5OwogCi1jbGFzcyBXZWJWaWV3
IDogcHVibGljIEFQSU9iamVjdCwgcHVibGljIFBhZ2VDbGllbnQsIFdlYkNvcmU6OldpbmRvd01l
c3NhZ2VMaXN0ZW5lciwgcHVibGljIElEcm9wVGFyZ2V0IHsKK2NsYXNzIFdlYlZpZXcKKyAgICA6
IHB1YmxpYyBBUElPYmplY3QKKyAgICAsIHB1YmxpYyBQYWdlQ2xpZW50CisgICAgLCBXZWJDb3Jl
OjpXaW5kb3dNZXNzYWdlTGlzdGVuZXIKKyAgICAsIHB1YmxpYyBJRHJvcFRhcmdldCAKKyNpZiBF
TkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgLCBXZWJDb3JlOjpGdWxsU2NyZWVuQ29udHJvbGxl
ckNsaWVudAorI2VuZGlmCit7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViVmll
dz4gY3JlYXRlKFJFQ1QgcmVjdCwgV2ViQ29udGV4dCogY29udGV4dCwgV2ViUGFnZUdyb3VwKiBw
YWdlR3JvdXAsIEhXTkQgcGFyZW50V2luZG93KQogICAgIHsKQEAgLTg1LDYgKzk3LDEwIEBAIHB1
YmxpYzoKIAogICAgIFdlYlBhZ2VQcm94eSogcGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZS5n
ZXQoKTsgfQogCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAgIFdlYkNvcmU6OkZ1bGxT
Y3JlZW5Db250cm9sbGVyKiBmdWxsU2NyZWVuQ29udHJvbGxlcigpOworI2VuZGlmCisKIHByaXZh
dGU6CiAgICAgV2ViVmlldyhSRUNULCBXZWJDb250ZXh0KiwgV2ViUGFnZUdyb3VwKiwgSFdORCBw
YXJlbnRXaW5kb3cpOwogCkBAIC0xOTUsNiArMjExLDE2IEBAIHByaXZhdGU6CiAgICAgLy8gV2Vi
Q29yZTo6V2luZG93TWVzc2FnZUxpc3RlbmVyCiAgICAgdmlydHVhbCB2b2lkIHdpbmRvd1JlY2Vp
dmVkTWVzc2FnZShIV05ELCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSwgTFBBUkFNKTsKIAorI2lmIEVO
QUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICB2aXJ0dWFsIEhXTkQgd2ViVmlld1dpbmRvdygpIGNv
bnN0OworICAgIHZpcnR1YWwgSFdORCB3ZWJWaWV3SG9zdFdpbmRvdygpIGNvbnN0OworICAgIHZp
cnR1YWwgdm9pZCBzZXRXZWJWaWV3SG9zdFdpbmRvdyhIV05EKTsKKyAgICB2aXJ0dWFsIHZvaWQg
d2ViVmlld1dpbGxFbnRlckZ1bGxTY3JlZW4oKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2ViVmlld0Rp
ZEVudGVyRnVsbFNjcmVlbigpOworICAgIHZpcnR1YWwgdm9pZCB3ZWJWaWV3V2lsbEV4aXRGdWxs
U2NyZWVuKCk7CisgICAgdmlydHVhbCB2b2lkIHdlYlZpZXdEaWRFeGl0RnVsbFNjcmVlbigpOwor
I2VuZGlmCisKICAgICBIV05EIG1fd2luZG93OwogICAgIEhXTkQgbV90b3BMZXZlbFBhcmVudFdp
bmRvdzsKICAgICBIV05EIG1fdG9vbFRpcFdpbmRvdzsKQEAgLTIzNCw2ICsyNjAsMTAgQEAgcHJp
dmF0ZToKICAgICBpbnQgbV9vdmVyUGFuWTsKIAogICAgIGJvb2wgbV9nZXN0dXJlUmVhY2hlZFNj
cm9sbGluZ0xpbWl0OworCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAgIE93blB0cjxX
ZWJDb3JlOjpGdWxsU2NyZWVuQ29udHJvbGxlcj4gbV9mdWxsU2NyZWVuQ29udHJvbGxlcjsKKyNl
bmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0Z1bGxTY3JlZW4vd2luL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyV2luLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRnVsbFNjcmVlbi93aW4vV2ViRnVsbFNjcmVl
bk1hbmFnZXJXaW4uY3BwCmluZGV4IGFjOGQzMjYuLmY5OTViMTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvRnVsbFNjcmVlbi93aW4vV2ViRnVsbFNjcmVlbk1hbmFnZXJX
aW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRnVsbFNjcmVlbi93aW4vV2Vi
RnVsbFNjcmVlbk1hbmFnZXJXaW4uY3BwCkBAIC0zMiw2ICszMiwxMCBAQAogI2luY2x1ZGUgIldl
YkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIK
ICNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xh
eWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CiAjaW5jbHVkZSA8V2ViS2l0U3lzdGVt
SW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKQEAgLTU1LDIxICs1OSw1MyBAQCBXZWJGdWxsU2NyZWVuTWFuYWdlcldpbjo6V2ViRnVs
bFNjcmVlbk1hbmFnZXJXaW4oV2ViUGFnZSogcGFnZSkKIAogV2ViRnVsbFNjcmVlbk1hbmFnZXJX
aW46On5XZWJGdWxsU2NyZWVuTWFuYWdlcldpbigpCiB7CisgICAgbV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5OjpFeGl0QWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z01vZGUoKSk7CiB9CiAKLXZvaWQgV2ViRnVsbFNjcmVlbk1hbmFnZXJXaW46OnNldFJvb3RGdWxs
U2NyZWVuTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopCit2b2lkIFdlYkZ1bGxTY3JlZW5N
YW5hZ2VyV2luOjpzZXRSb290RnVsbFNjcmVlbkxheWVyKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIq
IGxheWVyKQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQKKyAgICAvLyBIb3N0IHRoZSBmdWxs
IHNjcmVlbiBsYXllciBpZiBpdHMgZ2l2ZW4gdG8gdXM7IG90aGVyd2lzZSBpdCB3aWxsIGJlIGRp
c2Nvbm5lY3RlZCAKKyAgICAvLyBmcm9tIHRoZSBsYXllciBoZWlyYXJjaHkgYW5kIGNhdXNlIGFu
IEFTU0VSVCBkdXJpbmcgcmVzeW5jLgorICAgIC8vIEZJWE1FOiBEaXNhYmxlIHNldHRpbmcgUmVu
ZGVyTGF5ZXI6OnNldEFuaW1hdGluZygpIHRvIG1ha2UgdGhpcyB1bm5lY2Vzc2FyeS5zCisgICAg
aWYgKG1fZnVsbFNjcmVlblJvb3RMYXllciA9PSBsYXllcikKKyAgICAgICAgcmV0dXJuOworICAg
IG1fZnVsbFNjcmVlblJvb3RMYXllciA9IGxheWVyOworCisgICAgaWYgKCFtX2Z1bGxTY3JlZW5S
b290TGF5ZXIpIHsKKyAgICAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJGdWxsU2NyZWVu
TWFuYWdlclByb3h5OjpFeGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSk7CisgICAgICAg
IGlmIChtX3Jvb3RMYXllcikgeworICAgICAgICAgICAgbV9yb290TGF5ZXItPnJlbW92ZUFsbENo
aWxkcmVuKCk7CisgICAgICAgICAgICBtX3Jvb3RMYXllciA9IDA7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9yb290TGF5ZXIpIHsKKyAgICAgICAgbV9y
b290TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUoMCk7CisjaWZuZGVmIE5ERUJVRworICAg
ICAgICBtX3Jvb3RMYXllci0+c2V0TmFtZSgiRnVsbCBzY3JlZW4gcm9vdCBsYXllciIpOworI2Vu
ZGlmCisgICAgICAgIG1fcm9vdExheWVyLT5zZXREcmF3c0NvbnRlbnQoZmFsc2UpOworICAgICAg
ICBtX3Jvb3RMYXllci0+c2V0U2l6ZShnZXRGdWxsU2NyZWVuUmVjdCgpLnNpemUoKSk7CisgICAg
fQorCisgICAgbV9yb290TGF5ZXItPnJlbW92ZUFsbENoaWxkcmVuKCk7CisKKyAgICBpZiAobV9m
dWxsU2NyZWVuUm9vdExheWVyKQorICAgICAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobV9mdWxs
U2NyZWVuUm9vdExheWVyKTsKKworICAgIG1fcm9vdExheWVyLT5zeW5jQ29tcG9zaXRpbmdTdGF0
ZUZvclRoaXNMYXllck9ubHkoKTsKKyAgICBtX3BhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFtZSgp
LT52aWV3KCktPnN5bmNDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7CiB9CiAK
IHZvaWQgV2ViRnVsbFNjcmVlbk1hbmFnZXJXaW46OmJlZ2luRW50ZXJGdWxsU2NyZWVuQW5pbWF0
aW9uKGZsb2F0KQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQKKyAgICAvLyBGSVhNRTogQWRk
IHN1cHBvcnQgZm9yIGFuaW1hdGluZyB0aGUgY29udGVudCBpbnRvIGZ1bGwgc2NyZWVuLgogfQog
CiB2b2lkIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyV2luOjpiZWdpbkV4aXRGdWxsU2NyZWVuQW5pbWF0
aW9uKGZsb2F0KQogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQKKyAgICAvLyBGSVhNRTogQWRk
IHN1cHBvcnQgZm9yIGFuaW1hdGluZyB0aGUgY29udGVudCBpbnRvIGZ1bGwgc2NyZWVuLgogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvRnVsbFNjcmVlbi93aW4vV2ViRnVsbFNjcmVlbk1hbmFnZXJXaW4uaCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvRnVsbFNjcmVlbi93aW4vV2ViRnVsbFNjcmVlbk1hbmFnZXJXaW4u
aAppbmRleCBkOWFmNGQ5Li4yMmY3NGYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0Z1bGxTY3JlZW4vd2luL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyV2luLmgKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9GdWxsU2NyZWVuL3dpbi9XZWJGdWxsU2NyZWVuTWFuYWdl
cldpbi5oCkBAIC00NSw2ICs0NSw5IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHNldFJv
b3RGdWxsU2NyZWVuTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NMYXllciopOwogICAgIHZpcnR1YWwg
dm9pZCBiZWdpbkVudGVyRnVsbFNjcmVlbkFuaW1hdGlvbihmbG9hdCBkdXJhdGlvbik7CiAgICAg
dmlydHVhbCB2b2lkIGJlZ2luRXhpdEZ1bGxTY3JlZW5BbmltYXRpb24oZmxvYXQgZHVyYXRpb24p
OworCisgICAgT3duUHRyPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOworICAg
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqIG1fZnVsbFNjcmVlblJvb3RMYXllcjsKIH07CiAKIH0K
LS0gCjEuNy40Cgo=
</data>
<flag name="review"
          id="84905"
          type_id="1"
          status="-"
          setter="aroben"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92052</attachid>
            <date>2011-05-03 00:18:20 -0700</date>
            <delta_ts>2011-05-03 12:57:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0001-Implement-FULLSCREEN_API-on-Windows-Part-3-WebKit2.patch</filename>
            <type>text/plain</type>
            <size>54394</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">RnJvbSBjZDgxNjkwOTllN2EwYjQwZGFjNTc1MmZjOGY5ZGQ5YTU4Y2VlOGIzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKZXIgTm9ibGUgPGplci5ub2JsZUBleGFtcGxlLmNvbT4KRGF0
ZTogRnJpLCAyOSBBcHIgMjAxMSAxNzoxNToyOCAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIEltcGxl
bWVudCBGVUxMU0NSRUVOX0FQSSBvbiBXaW5kb3dzLCBQYXJ0IDM6IFdlYktpdDIKIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01OTg0NQoKUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCgpTb3VyY2UvV2ViQ29yZToKCk1vdmUgV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIg
aW50byBXZWJDb3JlIHRvIGZhY2lsaXRhdGUgY29kZSBzaGFyaW5nIGJldHdlZW4gV2ViS2l0CmFu
ZCBXZWJLaXQyLiAgV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIgbm93IHVzZXMgYSBDbGllbnQgY2xh
c3MgdG8gcmVxdWVzdCB3b3JrIG9uIGl0cwpiZWhhbGYgYnkgV2ViS2l0IGFuZCBXZWJLaXQyLiAg
TWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdyBub3cgb25seSBjcmVhdGVzIGEKQ0FM
YXllckhvc3Qgb25jZSBhIHJvb3QgbGF5ZXIgaXMgc2V0LCBhcyB0aGUgQ0FMYXllckhvc3Qgd2Fz
IGNhdXNpbmcgY2hpbGQgd2luZG93IGRyYXdpbmcKcHJvYmxlbXMsIGFuZCBiZWNhdXNlIGEgQ0FM
YXllckhvc3QgaXMgb3ZlcmtpbGwgaWYgdGhlIHdpbmRvdyBpcyBvbmx5IGRyYXdpbmcgYmxhY2sg
dG8KaXRzIGNsaWVudCBhcmVhLgoKKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKiBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdy5j
cHA6CihXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93OjpNZWRpYVBs
YXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93KTogRG8gbm90IGNyZWF0ZQogICAgbV9sYXllckhv
c3QgaW4gdGhlIGNvbnN0cnVjdG9yLgooV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNj
cmVlbldpbmRvdzo6Y3JlYXRlV2luZG93KTogTlVMTCBjaGVjayBtX2xheWVySG9zdC4KKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3c6OnNldFJvb3RDaGlsZExheWVy
KTogTGF6aWx5IGluc3RhbnRpYXRlIG1fbGF5ZXJIb3N0LgooV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlRnVsbHNjcmVlbldpbmRvdzo6d25kUHJvYyk6IE5VTEwgY2hlY2sgbV9sYXllckhvc3Q7
IGlmIGEgcm9vdCBsYXllciBpcwogICAgbm90IHByZXNlbnQsIGZpbGwgdGhlIHdpbmRvdyB3aXRo
IGJsYWNrIGluIFdNX1BBSU5ULgoqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclBy
aXZhdGVGdWxsc2NyZWVuV2luZG93Lmg6CiogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1dlYkZ1bGxT
Y3JlZW5Db250cm9sbGVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkZ1
bGxTY3JlZW5Db250cm9sbGVyLmNwcC4KKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vV2ViRnVsbFNj
cmVlbkNvbnRyb2xsZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkZ1bGxT
Y3JlZW5Db250cm9sbGVyLmguCihXZWJDb3JlOjpXZWJGdWxsU2NyZWVuQ29udHJvbGxlckNsaWVu
dDo6fldlYkZ1bGxTY3JlZW5Db250cm9sbGVyQ2xpZW50KToKClNvdXJjZS9XZWJLaXQvd2luOgoK
SW1wbGVtZW50YXRpb24gb2YgV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIgaGFzIGJlZW4gbW92ZWQg
aW50byBXZWJDb3JlLCBhbmQKcmVxdWlyZWQgdmlydXRhbCBmdW5jdGlvbnMgb2YgV2ViRnVsbFNj
cmVlbkNvbnRyb2xsZXJDbGllbnQgaGF2ZSBiZWVuIGFkZGVkIHRvCldlYlZpZXcuICBUaGVzZSBm
dW5jdGlvbnMgYXJlIG1vc3RseSBzaW1wbGUgYWNjZXNzb3JzIG9mIGV4aXN0aW5nIGl2YXJzLCBi
dXQKbV9mdWxsU2NyZWVuRWxlbWVudCBhbmQgaXRzIGFjY2Vzc29ycyBoYXZlIGFsc28gYmVlbiBh
ZGRlZCB0byBXZWJWaWV3LgoKKiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwOgoo
V2ViQ2hyb21lQ2xpZW50OjplbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KToKKiBXZWJGdWxsU2Ny
ZWVuQ29udHJvbGxlci5jcHA6IFJlbW92ZWQuCiogV2ViS2l0LnZjcHJvai9XZWJLaXQudmNwcm9q
OgoqIFdlYlZpZXcuY3BwOgooV2ViVmlldzo6c2V0RnVsbFNjcmVlbkVsZW1lbnQpOiBBZGRlZCBh
Y2Nlc3Nvci4KKFdlYlZJZXc6OmZ1bGxTY3JlZW5FbGVtZW50KTogRGl0dG8uCihXZWJWaWV3Ojp3
ZWJWaWV3V2luZG93KTogRGl0dG8uCihXZWJWaWV3Ojp3ZWJWaWV3SG9zdFdpbmRvdyk6IERpdHRv
LgooV2ViVmlldzo6c2V0V2ViVmlld0hvc3RXaW5kb3cpOiBEaXR0by4KKFdlYlZpZXc6OndlYlZp
ZXdXaWxsRW50ZXJGdWxsU2NyZWVuKTogUGFzcyB0aHJvdWdoIHRvIERvY3VtZW50LgooV2ViVmll
dzo6d2ViVmlld0RpZEVudGVyRnVsbFNjcmVlbik6IERpdHRvLgooV2ViVmlldzo6d2ViVmlld1dp
bGxFeGl0RnVsbFNjcmVlbik6IERpdHRvLgooV2ViVmlldzo6d2ViVmlld0RpZEV4aXRGdWxsU2Ny
ZWVuKTogRGl0dG8uCiogV2ViVmlldy5oOgoKU291cmNlL1dlYktpdDI6CgpJbXBsZW1lbnQgYSBz
aW1pbGFyIGZ1bGwgc2NyZWVuIG1vZGUgdG8gV2ViS2l0OyBSZS11c2UgdGhlIHNhbWUKZnVsbCBz
Y3JlZW4gd2luZG93IGNsYXNzIHVzZWQgaW4gV2ViS2l0IGluIHRoZSBuZXcgV2ViRnVsbFNjcmVl
bkNvbnRyb2xsZXIuCk5vIGFuaW1hdGlvbnMgKHlldCksIHNvIG1hbnkgb2YgdGhlIHN0dWJzIHJl
bWFpbiB1bmltcGxlbWVudGVkLgoKKiBVSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwOgooV2ViS2l0
OjpXZWJWaWV3OjpvbktleUV2ZW50KTogSGFuZGxlIFZLX0VTQ0FQRSBhbmQgY2FuY2VsIGZ1bGwg
c2NyZWVuCiAgICBtb2RlIGlmIGNhdWdodC4KKFdlYktpdDo6V2ViVmlldzo6ZnVsbFNjcmVlbkNv
bnRyb2xsZXIpOiBMYXppbHkgaW5zdGFudGlhdGUgbV9mdWxsU2NyZWVuQ29udHJvbGxlci4KKFdl
YktpdDo6V2ViVmlldzo6d2ViVmlld1dpbmRvdyk6IEFkZGVkIGFjY2Vzc29yLgooV2ViS2l0OjpX
ZWJWaWV3Ojp3ZWJWaWV3SG9zdFdpbmRvdyk6IERpdHRvLgooV2ViS2l0OjpXZWJWaWV3OjpzZXRX
ZWJWaWV3SG9zdFdpbmRvdyk6IERpdHRvLgooV2ViS2l0OjpXZWJWaWV3Ojp3ZWJWaWV3V2lsbEVu
dGVyRnVsbFNjcmVlbik6IFBhc3MgdGhyb3VnaCB0byBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5
LgooV2ViS2l0OjpXZWJWaWV3Ojp3ZWJWaWV3RGlkRW50ZXJGdWxsU2NyZWVuKTogRGl0dG8uCihX
ZWJLaXQ6OldlYlZpZXc6OndlYlZpZXdXaWxsRXhpdEZ1bGxTY3JlZW4pOiBEaXR0by4KKFdlYktp
dDo6V2ViVmlldzo6d2ViVmlld0RpZEV4aXRGdWxsU2NyZWVuKTogRGl0dG8uCiogVUlQcm9jZXNz
L3dpbi9XZWJWaWV3Lmg6CiogVUlQcm9jZXNzL3dpbi9XZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5
V2luLmNwcDoKKFdlYktpdDo6V2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eTo6ZW50ZXJGdWxsU2Ny
ZWVuKTogUGFzcyB0aHJvdWdoIHRvCiAgICBXZWJGdWxsU2NyZWVuQ29udHJvbGxlci4KKFdlYktp
dDo6V2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eTo6ZXhpdEZ1bGxTY3JlZW4pOiBEaXR0by4KKiBV
SVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwOgooV2ViS2l0OjpXZWJWaWV3OjpXZWJWaWV3KToKKFdl
YktpdDo6V2ViVmlldzo6b25LZXlFdmVudCk6IEhhbmRsZSB0aGUgZXNjYXBlIGtleSBhbmQgZXhp
dAogICBmdWxsIHNjcmVlbiBtb2RlIHdoZW4gZGV0ZWN0ZWQuCihXZWJLaXQ6OldlYlZpZXc6OmZ1
bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyKTogQWRkZWQuCiogVUlQcm9jZXNzL3dpbi9XZWJWaWV3
Lmg6CiogV2ViUHJvY2Vzcy9GdWxsU2NyZWVuL3dpbi9XZWJGdWxsU2NyZWVuTWFuYWdlcldpbi5j
cHA6CihXZWJLaXQ6OldlYkZ1bGxTY3JlZW5NYW5hZ2VyV2luOjp+V2ViRnVsbFNjcmVlbk1hbmFn
ZXJXaW4pOgooV2ViS2l0OjpXZWJGdWxsU2NyZWVuTWFuYWdlcldpbjo6c2V0Um9vdEZ1bGxTY3Jl
ZW5MYXllcik6IEhvc3QgdGhlIHJvb3QKICAgIGZ1bGwgc2NyZWVuIGxheWVyIGlmIGl0IGdldHMg
ZGV0YWNoZWQuCiogV2ViUHJvY2Vzcy9GdWxsU2NyZWVuL3dpbi9XZWJGdWxsU2NyZWVuTWFuYWdl
cldpbi5oOgoqIHdpbi9XZWJLaXQyLnZjcHJvajoKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjk4NDcyYi4uYWZk
Njg0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDExLTA1LTAyICBKZXIgTm9ibGUg
IDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEltcGxlbWVudCBGVUxMU0NSRUVOX0FQSSBvbiBXaW5kb3dzLCBQYXJ0
IDM6IFdlYktpdDIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTU5ODQ1CisKKyAgICAgICAgTW92ZSBXZWJGdWxsU2NyZWVuQ29udHJvbGxlciBpbnRvIFdl
YkNvcmUgdG8gZmFjaWxpdGF0ZSBjb2RlIHNoYXJpbmcgYmV0d2VlbiBXZWJLaXQKKyAgICAgICAg
YW5kIFdlYktpdDIuICBXZWJGdWxsU2NyZWVuQ29udHJvbGxlciBub3cgdXNlcyBhIENsaWVudCBj
bGFzcyB0byByZXF1ZXN0IHdvcmsgb24gaXRzCisgICAgICAgIGJlaGFsZiBieSBXZWJLaXQgYW5k
IFdlYktpdDIuICBNZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93IG5vdyBvbmx5IGNy
ZWF0ZXMgYSAKKyAgICAgICAgQ0FMYXllckhvc3Qgb25jZSBhIHJvb3QgbGF5ZXIgaXMgc2V0LCBh
cyB0aGUgQ0FMYXllckhvc3Qgd2FzIGNhdXNpbmcgY2hpbGQgd2luZG93IGRyYXdpbmcKKyAgICAg
ICAgcHJvYmxlbXMsIGFuZCBiZWNhdXNlIGEgQ0FMYXllckhvc3QgaXMgb3ZlcmtpbGwgaWYgdGhl
IHdpbmRvdyBpcyBvbmx5IGRyYXdpbmcgYmxhY2sgdG8KKyAgICAgICAgaXRzIGNsaWVudCBhcmVh
LgorCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3cu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRv
dzo6TWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdyk6IERvIG5vdCBjcmVhdGUgCisg
ICAgICAgICAgICBtX2xheWVySG9zdCBpbiB0aGUgY29uc3RydWN0b3IuCisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93OjpjcmVhdGVXaW5kb3cpOiBO
VUxMIGNoZWNrIG1fbGF5ZXJIb3N0LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlRnVsbHNjcmVlbldpbmRvdzo6c2V0Um9vdENoaWxkTGF5ZXIpOiBMYXppbHkgaW5zdGFudGlh
dGUgbV9sYXllckhvc3QuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVGdWxs
c2NyZWVuV2luZG93Ojp3bmRQcm9jKTogTlVMTCBjaGVjayBtX2xheWVySG9zdDsgaWYgYSByb290
IGxheWVyIGlzCisgICAgICAgICAgICBub3QgcHJlc2VudCwgZmlsbCB0aGUgd2luZG93IHdpdGgg
YmxhY2sgaW4gV01fUEFJTlQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlh
UGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3cuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYktpdC93aW4vV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuY3BwLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9XZWJGdWxsU2NyZWVuQ29udHJvbGxlci5oOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYktpdC93aW4vV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuaC4KKyAgICAgICAgKFdl
YkNvcmU6OldlYkZ1bGxTY3JlZW5Db250cm9sbGVyQ2xpZW50Ojp+V2ViRnVsbFNjcmVlbkNvbnRy
b2xsZXJDbGllbnQpOgorCiAyMDExLTA0LTI5ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCBmNzVkM2FkLi45MWRiN2Uy
IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAt
MjQ3MjEsMTQgKzI0NzIxLDE0IEBACiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxwYWdlXFBhZ2VHcm91
cExvYWREZWZlcnJlci5oIgogCQkJCT4KIAkJCTwvRmlsZT4KLSAgICAgICAgICAgICAgICAgICAg
ICAgIDxGaWxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbGF0aXZlUGF0aD0i
Li5ccGFnZVxQYWdlU2VyaWFsaXplci5jcHAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgID4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvRmlsZT4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIDxGaWxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbGF0aXZlUGF0
aD0iLi5ccGFnZVxQYWdlU2VyaWFsaXplci5oIgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccGFnZVxQYWdlU2VyaWFsaXplci5jcHAiCisJCQkJPgorCQkJPC9GaWxl
PgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcUGFnZVNlcmlhbGl6ZXIuaCIK
KwkJCQk+CisJCQk8L0ZpbGU+CiAJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGFnZVxQ
ZXJmb3JtYW5jZS5jcHAiCiAJCQkJPgpAQCAtMjcxMTYsNiArMjcxMTYsMTggQEAKIAkJCQkJCT4K
IAkJCQkJPC9GaWxlPgogCQkJCQk8RmlsZQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9y
bVxncmFwaGljc1x3aW5cRnVsbFNjcmVlbkNvbnRyb2xsZXIuY3BwIgorCQkJCQkJPgorCQkJCQk8
L0ZpbGU+CisJCQkJCTxGaWxlCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBo
aWNzXHdpblxGdWxsU2NyZWVuQ29udHJvbGxlci5oIgorCQkJCQkJPgorCQkJCQk8L0ZpbGU+CisJ
CQkJCTxGaWxlCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxG
dWxsU2NyZWVuQ29udHJvbGxlckNsaWVudC5oIgorCQkJCQkJPgorCQkJCQk8L0ZpbGU+CisJCQkJ
CTxGaWxlCiAJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXHdpblxHbHlw
aFBhZ2VUcmVlTm9kZUNhaXJvV2luLmNwcCIKIAkJCQkJCT4KIAkJCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgpAQCAtMjg5NTIsNiArMjg5NjQsMTQgQEAKIAkJCQkJCT4KIAkJCQkJPC9GaWxlPgogCQkJ
CQk8RmlsZQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJz
XGFybVxGRUdhdXNzaWFuQmx1ck5FT04uY3BwIgorCQkJCQkJPgorCQkJCQk8L0ZpbGU+CisJCQkJ
CTxGaWxlCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNc
YXJtXEZFR2F1c3NpYW5CbHVyTkVPTi5oIgorCQkJCQkJPgorCQkJCQk8L0ZpbGU+CisJCQkJCTxG
aWxlCiAJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNcRkVM
aWdodGluZy5jcHAiCiAJCQkJCQk+CiAJCQkJCTwvRmlsZT4KQEAgLTI4OTYwLDYgKzI4OTgwLDE0
IEBACiAJCQkJCQk+CiAJCQkJCTwvRmlsZT4KIAkJCQkJPEZpbGUKKwkJCQkJCVJlbGF0aXZlUGF0
aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xhcm1cRkVMaWdodGluZ05FT04uY3BwIgor
CQkJCQkJPgorCQkJCQk8L0ZpbGU+CisJCQkJCTxGaWxlCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNcYXJtXEZFTGlnaHRpbmdORU9OLmgiCisJCQkJCQk+
CisJCQkJCTwvRmlsZT4KKwkJCQkJPEZpbGUKIAkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZv
cm1cZ3JhcGhpY3NcZmlsdGVyc1xGRU1lcmdlLmNwcCIKIAkJCQkJCT4KIAkJCQkJPC9GaWxlPgpA
QCAtMjkwNTksMjIgKzI5MDg3LDYgQEAKIAkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1c
Z3JhcGhpY3NcZmlsdGVyc1xTcG90TGlnaHRTb3VyY2UuaCIKIAkJCQkJCT4KIAkJCQkJPC9GaWxl
PgotCQkJCQk8RmlsZQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xm
aWx0ZXJzXGFybVxGRUdhdXNzaWFuQmx1ck5FT04uY3BwIgotCQkJCQkJPgotCQkJCQk8L0ZpbGU+
Ci0JCQkJCTxGaWxlCi0JCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZp
bHRlcnNcYXJtXEZFR2F1c3NpYW5CbHVyTkVPTi5oIgotCQkJCQkJPgotCQkJCQk8L0ZpbGU+Ci0J
CQkJCTxGaWxlCi0JCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRl
cnNcYXJtXEZFTGlnaHRpbmdORU9OLmNwcCIKLQkJCQkJCT4KLQkJCQkJPC9GaWxlPgotCQkJCQk8
RmlsZQotCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXGFy
bVxGRUxpZ2h0aW5nTkVPTi5oIgotCQkJCQkJPgotCQkJCQk8L0ZpbGU+CiAJCQkJPC9GaWx0ZXI+
CiAJCQkJPEZpbHRlcgogCQkJCQlOYW1lPSJjYSIKQEAgLTQyNzE0LDYgKzQyNzI2LDEwIEBACiAJ
CQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlxkb21cRGF0YVRyYW5zZmVySXRlbS5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJ
CTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cRGF0YVRyYW5zZmVySXRlbXMuY3BwIgog
CQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KQEAgLTQyNzY2LDEwICs0Mjc4Miw2IEBACiAJ
CQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRp
dmVQYXRoPSIuLlxkb21cRGF0YVRyYW5zZmVySXRlbS5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJ
CTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cRGF0YVRyYW5zZmVySXRlbXMuaCIKIAkJ
CQk+CiAJCQk8L0ZpbGU+CkBAIC02NjcxMyw2ICs2NjcyNSwxMCBAQAogCQkJCQk+CiAJCQkJPC9G
aWxlPgogCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVu
ZFxVZ2xpZnlKU1xKYXZhU2NyaXB0Rm9ybWF0dGVyLmpzIgorCQkJCQk+CisJCQkJPC9GaWxlPgor
CQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXGZyb250LWVuZFxKYXZh
U2NyaXB0Rm9ybWF0dGVyLmpzIgogCQkJCQk+CiAJCQkJPC9GaWxlPgpAQCAtNjY3NTcsMTAgKzY2
NzczLDYgQEAKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQotCQkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGluc3BlY3Rvclxmcm9udC1lbmRcVWdsaWZ5SlNcSmF2YVNjcmlwdEZvcm1hdHRlci5q
cyIKLQkJCQkJPgotCQkJCTwvRmlsZT4KLQkJCQk8RmlsZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XGluc3BlY3Rvclxmcm9udC1lbmRcVWdsaWZ5SlNccGFyc2UtanMuanMiCiAJCQkJCT4KIAkJCQk8
L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
RnVsbFNjcmVlbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0Z1bGxTY3JlZW5Db250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5mNGRiZDQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9sbGVyLmNwcApAQCAtMCwwICsxLDE2
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNo
IEluIE1vdGlvbiBMaW1pdGVkIDIwMDkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKworI2luY2x1
ZGUgIkZ1bGxTY3JlZW5Db250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5j
bHVkZSAiRnVsbFNjcmVlbkNvbnRyb2xsZXJDbGllbnQuaCIKKyNpbmNsdWRlICJJbnRSZWN0Lmgi
CisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdy5oIgorI2luY2x1
ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAiV2ViQ29yZUluc3RhbmNlSGFuZGxlLmgiCisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworc3RhdGljIGNv
bnN0IGludCBrRnVsbFNjcmVlbkFuaW1hdGlvbkR1cmF0aW9uID0gMjAwMDsgLy8gbWlsbGlzZWNv
bmRzIAorCitjbGFzcyBGdWxsU2NyZWVuQ29udHJvbGxlcjo6UHJpdmF0ZSA6IHB1YmxpYyBNZWRp
YVBsYXllclByaXZhdGVGdWxsc2NyZWVuQ2xpZW50ICB7CitwdWJsaWM6CisgICAgUHJpdmF0ZShG
dWxsU2NyZWVuQ29udHJvbGxlciogY29udHJvbGxlciwgRnVsbFNjcmVlbkNvbnRyb2xsZXJDbGll
bnQqIGNsaWVudCkgCisgICAgICAgIDogbV9jb250cm9sbGVyKGNvbnRyb2xsZXIpCisgICAgICAg
ICwgbV9jbGllbnQoY2xpZW50KQorICAgICAgICAsIG1fb3JpZ2luYWxIb3N0KDApCisgICAgICAg
ICwgbV9pc0Z1bGxTY3JlZW4oZmFsc2UpCisgICAgeworICAgIH0KKyAgICB2aXJ0dWFsIH5Qcml2
YXRlKCkgeyB9CisKKyAgICB2aXJ0dWFsIExSRVNVTFQgZnVsbHNjcmVlbkNsaWVudFduZFByb2Mo
SFdORCwgVUlOVCwgV1BBUkFNLCBMUEFSQU0pOworICAgIAorICAgIEZ1bGxTY3JlZW5Db250cm9s
bGVyKiBtX2NvbnRyb2xsZXI7CisgICAgRnVsbFNjcmVlbkNvbnRyb2xsZXJDbGllbnQqIG1fY2xp
ZW50OworICAgIE93blB0cjxNZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93PiBtX2Z1
bGxTY3JlZW5XaW5kb3c7CisgICAgT3duUHRyPE1lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5X
aW5kb3c+IG1fYmFja2dyb3VuZFdpbmRvdzsKKyAgICBJbnRSZWN0IG1fZnVsbFNjcmVlbkZyYW1l
OworICAgIEhXTkQgbV9vcmlnaW5hbEhvc3Q7CisgICAgYm9vbCBtX2lzRnVsbFNjcmVlbjsKK307
CisKK0xSRVNVTFQgRnVsbFNjcmVlbkNvbnRyb2xsZXI6OlByaXZhdGU6OmZ1bGxzY3JlZW5DbGll
bnRXbmRQcm9jKEhXTkQgaHduZCwgVUlOVCBtc2csIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFy
YW0pCit7CisgICAgTFJFU1VMVCBsUmVzdWx0ID0gMDsKKworICAgIHN3aXRjaCAobXNnKSB7Cisg
ICAgY2FzZSBXTV9NT1ZFOgorICAgICAgICBtX2Z1bGxTY3JlZW5GcmFtZS5zZXRYKExPV09SRChs
UGFyYW0pKTsKKyAgICAgICAgbV9mdWxsU2NyZWVuRnJhbWUuc2V0WShISVdPUkQobFBhcmFtKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV01fU0laRToKKyAgICAgICAgbV9mdWxsU2NyZWVu
RnJhbWUuc2V0V2lkdGgoTE9XT1JEKGxQYXJhbSkpOworICAgICAgICBtX2Z1bGxTY3JlZW5GcmFt
ZS5zZXRIZWlnaHQoSElXT1JEKGxQYXJhbSkpOworICAgICAgICBpZiAobV9jbGllbnQtPmZ1bGxT
Y3JlZW5DbGllbnRXaW5kb3coKSkKKyAgICAgICAgICAgIDo6U2V0V2luZG93UG9zKG1fY2xpZW50
LT5mdWxsU2NyZWVuQ2xpZW50V2luZG93KCksIDAsIDAsIDAsIG1fZnVsbFNjcmVlbkZyYW1lLndp
ZHRoKCksIG1fZnVsbFNjcmVlbkZyYW1lLmhlaWdodCgpLCBTV1BfTk9SRVBPU0lUSU9OICB8IFNX
UF9OT01PVkUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFdNX0tFWURPV046CisgICAgICAg
IGlmICh3UGFyYW0gPT0gVktfRVNDQVBFKSB7CisgICAgICAgICAgICBtX2NvbnRyb2xsZXItPmV4
aXRGdWxsU2NyZWVuKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAv
LyBGYWxsIHRocm91Z2guCisgICAgZGVmYXVsdDoKKyAgICAgICAgbFJlc3VsdCA9IDo6RGVmV2lu
ZG93UHJvYyhod25kLCBtc2csIHdQYXJhbSwgbFBhcmFtKTsKKyAgICB9CisKKyAgICByZXR1cm4g
bFJlc3VsdDsKK30KKworRnVsbFNjcmVlbkNvbnRyb2xsZXI6OkZ1bGxTY3JlZW5Db250cm9sbGVy
KEZ1bGxTY3JlZW5Db250cm9sbGVyQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX3ByaXZhdGUoYWRv
cHRQdHIobmV3IEZ1bGxTY3JlZW5Db250cm9sbGVyOjpQcml2YXRlKHRoaXMsIGNsaWVudCkpKQor
eworICAgIEFTU0VSVF9BUkcoY2xpZW50LCBjbGllbnQpOworfQorCitGdWxsU2NyZWVuQ29udHJv
bGxlcjo6fkZ1bGxTY3JlZW5Db250cm9sbGVyKCkKK3sKK30KKworYm9vbCBGdWxsU2NyZWVuQ29u
dHJvbGxlcjo6aXNGdWxsU2NyZWVuKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5t
X2lzRnVsbFNjcmVlbjsKK30KKwordm9pZCBGdWxsU2NyZWVuQ29udHJvbGxlcjo6ZW50ZXJGdWxs
U2NyZWVuKCkKK3sKKyAgICBpZiAobV9wcml2YXRlLT5tX2lzRnVsbFNjcmVlbikKKyAgICAgICAg
cmV0dXJuOworICAgIG1fcHJpdmF0ZS0+bV9pc0Z1bGxTY3JlZW4gPSB0cnVlOworCisgICAgbV9w
cml2YXRlLT5tX2JhY2tncm91bmRXaW5kb3cgPSBhZG9wdFB0cihuZXcgTWVkaWFQbGF5ZXJQcml2
YXRlRnVsbHNjcmVlbldpbmRvdyhtX3ByaXZhdGUuZ2V0KCkpKTsKKyAgICBtX3ByaXZhdGUtPm1f
YmFja2dyb3VuZFdpbmRvdy0+Y3JlYXRlV2luZG93KDApOworICAgIDo6QW5pbWF0ZVdpbmRvdyht
X3ByaXZhdGUtPm1fYmFja2dyb3VuZFdpbmRvdy0+aHduZCgpLCBrRnVsbFNjcmVlbkFuaW1hdGlv
bkR1cmF0aW9uLCBBV19CTEVORCB8IEFXX0FDVElWQVRFKTsKKworICAgIG1fcHJpdmF0ZS0+bV9j
bGllbnQtPmZ1bGxTY3JlZW5DbGllbnRXaWxsRW50ZXJGdWxsU2NyZWVuKCk7CisKKyAgICBBU1NF
UlQoIW1fcHJpdmF0ZS0+bV9mdWxsU2NyZWVuV2luZG93KTsKKyAgICBtX3ByaXZhdGUtPm1fZnVs
bFNjcmVlbldpbmRvdyA9IGFkb3B0UHRyKG5ldyBNZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVu
V2luZG93KG1fcHJpdmF0ZS5nZXQoKSkpOworICAgIEFTU0VSVChtX3ByaXZhdGUtPm1fZnVsbFNj
cmVlbldpbmRvdyk7CisgICAgbV9wcml2YXRlLT5tX2Z1bGxTY3JlZW5XaW5kb3ctPmNyZWF0ZVdp
bmRvdygwKTsKKworICAgIEhXTkQgb3JpZ2luYWxIb3N0ID0gbV9wcml2YXRlLT5tX2NsaWVudC0+
ZnVsbFNjcmVlbkNsaWVudFBhcmVudFdpbmRvdygpOworICAgIG1fcHJpdmF0ZS0+bV9jbGllbnQt
PnNldEZ1bGxTY3JlZW5DbGllbnRQYXJlbnRXaW5kb3cobV9wcml2YXRlLT5tX2Z1bGxTY3JlZW5X
aW5kb3ctPmh3bmQoKSk7CisKKyAgICBJbnRSZWN0IHZpZXdGcmFtZShJbnRQb2ludCgpLCBtX3By
aXZhdGUtPm1fZnVsbFNjcmVlbkZyYW1lLnNpemUoKSk7CisgICAgOjpTZXRXaW5kb3dQb3MobV9w
cml2YXRlLT5tX2Z1bGxTY3JlZW5XaW5kb3ctPmh3bmQoKSwgSFdORF9UT1AsIDAsIDAsIDAsIDAs
IFNXUF9OT01PVkUgfCBTV1BfTk9TSVpFIHwgU1dQX05PQUNUSVZBVEUpOworICAgIDo6U2V0V2lu
ZG93UG9zKG1fcHJpdmF0ZS0+bV9jbGllbnQtPmZ1bGxTY3JlZW5DbGllbnRXaW5kb3coKSwgSFdO
RF9UT1AsIDAsIDAsIHZpZXdGcmFtZS53aWR0aCgpLCB2aWV3RnJhbWUuaGVpZ2h0KCksIFNXUF9O
T0FDVElWQVRFKTsKKyAgICA6OkludmFsaWRhdGVSZWN0KG1fcHJpdmF0ZS0+bV9jbGllbnQtPmZ1
bGxTY3JlZW5DbGllbnRXaW5kb3coKSwgMCwgdHJ1ZSk7CisgICAgOjpVcGRhdGVXaW5kb3cobV9w
cml2YXRlLT5tX2NsaWVudC0+ZnVsbFNjcmVlbkNsaWVudFdpbmRvdygpKTsKKyAgICBtX3ByaXZh
dGUtPm1fb3JpZ2luYWxIb3N0ID0gb3JpZ2luYWxIb3N0OworCisgICAgbV9wcml2YXRlLT5tX2Ns
aWVudC0+ZnVsbFNjcmVlbkNsaWVudERpZEVudGVyRnVsbFNjcmVlbigpOworICAgIDo6QW5pbWF0
ZVdpbmRvdyhtX3ByaXZhdGUtPm1fZnVsbFNjcmVlbldpbmRvdy0+aHduZCgpLCBrRnVsbFNjcmVl
bkFuaW1hdGlvbkR1cmF0aW9uLCBBV19CTEVORCB8IEFXX0FDVElWQVRFKTsKK30KKwordm9pZCBG
dWxsU2NyZWVuQ29udHJvbGxlcjo6ZXhpdEZ1bGxTY3JlZW4oKQoreworICAgIGlmICghbV9wcml2
YXRlLT5tX2lzRnVsbFNjcmVlbikKKyAgICAgICAgcmV0dXJuOworICAgIG1fcHJpdmF0ZS0+bV9p
c0Z1bGxTY3JlZW4gPSBmYWxzZTsKKworICAgIEFTU0VSVChtX3ByaXZhdGUtPm1fZnVsbFNjcmVl
bldpbmRvdyk7CisgICAgQk9PTCBzdWNjZXNzID0gOjpBbmltYXRlV2luZG93KG1fcHJpdmF0ZS0+
bV9mdWxsU2NyZWVuV2luZG93LT5od25kKCksIGtGdWxsU2NyZWVuQW5pbWF0aW9uRHVyYXRpb24s
IEFXX0hJREUgfCBBV19CTEVORCk7CisKKyAgICBtX3ByaXZhdGUtPm1fY2xpZW50LT5mdWxsU2Ny
ZWVuQ2xpZW50V2lsbEV4aXRGdWxsU2NyZWVuKCk7CisgICAgbV9wcml2YXRlLT5tX2NsaWVudC0+
c2V0RnVsbFNjcmVlbkNsaWVudFBhcmVudFdpbmRvdyhtX3ByaXZhdGUtPm1fb3JpZ2luYWxIb3N0
KTsKKworICAgIDo6RGVzdHJveVdpbmRvdyhtX3ByaXZhdGUtPm1fZnVsbFNjcmVlbldpbmRvdy0+
aHduZCgpKTsKKyAgICBtX3ByaXZhdGUtPm1fZnVsbFNjcmVlbldpbmRvdyA9IDA7CisKKyAgICBt
X3ByaXZhdGUtPm1fY2xpZW50LT5mdWxsU2NyZWVuQ2xpZW50RGlkRXhpdEZ1bGxTY3JlZW4oKTsK
KworICAgIEFTU0VSVChtX3ByaXZhdGUtPm1fYmFja2dyb3VuZFdpbmRvdyk7CisgICAgc3VjY2Vz
cyA9IDo6QW5pbWF0ZVdpbmRvdyhtX3ByaXZhdGUtPm1fYmFja2dyb3VuZFdpbmRvdy0+aHduZCgp
LCBrRnVsbFNjcmVlbkFuaW1hdGlvbkR1cmF0aW9uLCBBV19ISURFIHwgQVdfQkxFTkQpOworfQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9GdWxsU2NyZWVuQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0Z1bGxTY3JlZW5Db250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYjMzODBiYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9GdWxsU2NyZWVuQ29udHJvbGxlci5oCkBAIC0wLDAgKzEsNTggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyX2gKKyNkZWZpbmUgV2Vi
RnVsbFNjcmVlbkNvbnRyb2xsZXJfaAorCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorCisj
aW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZ1
bGxTY3JlZW5Db250cm9sbGVyQ2xpZW50OworCitjbGFzcyBGdWxsU2NyZWVuQ29udHJvbGxlciB7
CitwdWJsaWM6CisgICAgRnVsbFNjcmVlbkNvbnRyb2xsZXIoRnVsbFNjcmVlbkNvbnRyb2xsZXJD
bGllbnQqKTsKKyAgICB+RnVsbFNjcmVlbkNvbnRyb2xsZXIoKTsKKworcHVibGljOgorICAgIHZv
aWQgZW50ZXJGdWxsU2NyZWVuKCk7CisgICAgdm9pZCBleGl0RnVsbFNjcmVlbigpOworICAgIAor
ICAgIGJvb2wgaXNGdWxsU2NyZWVuKCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICBjbGFzcyBQ
cml2YXRlOworICAgIGZyaWVuZCBjbGFzcyBQcml2YXRlOworICAgIE93blB0cjxGdWxsU2NyZWVu
Q29udHJvbGxlcjo6UHJpdmF0ZT4gbV9wcml2YXRlOworfTsKKworfQorCisjZW5kaWYKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRnVs
bFNjcmVlbkNvbnRyb2xsZXJDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9GdWxsU2NyZWVuQ29udHJvbGxlckNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjgxYmZmNWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXJDbGllbnQuaApAQCAt
MCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBXZWJGdWxsU2NyZWVuQ29udHJvbGxlckNs
aWVudF9oCisjZGVmaW5lIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyQ2xpZW50X2gKKworI2lmIEVO
QUJMRShGVUxMU0NSRUVOX0FQSSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGdWxs
U2NyZWVuQ29udHJvbGxlckNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCBIV05EIGZ1bGxT
Y3JlZW5DbGllbnRXaW5kb3coKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBIV05EIGZ1bGxTY3Jl
ZW5DbGllbnRQYXJlbnRXaW5kb3coKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEZ1
bGxTY3JlZW5DbGllbnRQYXJlbnRXaW5kb3coSFdORCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBm
dWxsU2NyZWVuQ2xpZW50V2lsbEVudGVyRnVsbFNjcmVlbigpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgZnVsbFNjcmVlbkNsaWVudERpZEVudGVyRnVsbFNjcmVlbigpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgZnVsbFNjcmVlbkNsaWVudFdpbGxFeGl0RnVsbFNjcmVlbigpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZnVsbFNjcmVlbkNsaWVudERpZEV4aXRGdWxsU2NyZWVuKCkgPSAwOworcHJvdGVj
dGVkOgorICAgIHZpcnR1YWwgfkZ1bGxTY3JlZW5Db250cm9sbGVyQ2xpZW50KCkgeyB9Cit9Owor
Cit9CisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVG
dWxsc2NyZWVuV2luZG93LmNwcAppbmRleCA1ODgxNDZhLi5mNmU2Y2JlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlRnVs
bHNjcmVlbldpbmRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL01lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3cuY3BwCkBAIC00NCw5ICs0NCw2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIE1lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5k
b3c6Ok1lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3coTWVkaWFQbGF5ZXJQcml2YXRl
RnVsbHNjcmVlbkNsaWVudCogY2xpZW50KQogICAgIDogbV9jbGllbnQoY2xpZW50KQogICAgICwg
bV9od25kKDApCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgICwgbV9sYXll
clRyZWVIb3N0KENBQ0ZMYXllclRyZWVIb3N0OjpjcmVhdGUoKSkKLSNlbmRpZgogewogfQogCkBA
IC04MiwxMyArNzksMTQgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93
OjpjcmVhdGVXaW5kb3coSFdORCBwYXJlbnRId25kKQogCiAgICAgSW50UmVjdCBtb25pdG9yUmVj
dCA9IG1pLnJjTW9uaXRvcjsKICAgICAKLSAgICA6OkNyZWF0ZVdpbmRvd0V4VyhXU19FWF9UT09M
V0lORE9XLCB3aW5kb3dDbGFzc05hbWUsIEwiIiwgV1NfUE9QVVAgfCBXU19WSVNJQkxFLCAKKyAg
ICA6OkNyZWF0ZVdpbmRvd0V4VyhXU19FWF9UT09MV0lORE9XLCB3aW5kb3dDbGFzc05hbWUsIEwi
IiwgV1NfUE9QVVAsIAogICAgICAgICBtb25pdG9yUmVjdC54KCksIG1vbml0b3JSZWN0LnkoKSwg
bW9uaXRvclJlY3Qud2lkdGgoKSwgbW9uaXRvclJlY3QuaGVpZ2h0KCksCiAgICAgICAgIHBhcmVu
dEh3bmQsIDAsIFdlYkNvcmU6Omluc3RhbmNlSGFuZGxlKCksIHRoaXMpOwogICAgIEFTU0VSVChJ
c1dpbmRvdyhtX2h3bmQpKTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAg
ICBtX2xheWVyVHJlZUhvc3QtPnNldFdpbmRvdyhtX2h3bmQpOworICAgIGlmIChtX2xheWVyVHJl
ZUhvc3QpCisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0V2luZG93KG1faHduZCk7CiAjZW5k
aWYKIAogICAgIDo6U2V0Rm9jdXMobV9od25kKTsKQEAgLTEwNSw4ICsxMDMsMTYgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93OjpzZXRSb290Q2hpbGRMYXllcihQYXNz
UmVmUHRyPFBsYXRmb3JtQ0EKIAogICAgIG1fcm9vdENoaWxkID0gcm9vdENoaWxkOwogCi0gICAg
aWYgKCFtX3Jvb3RDaGlsZCkKKyAgICBpZiAoIW1fcm9vdENoaWxkKSB7CisgICAgICAgIG1fbGF5
ZXJUcmVlSG9zdCA9IG51bGxwdHI7CiAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
IW1fbGF5ZXJUcmVlSG9zdCkgeworICAgICAgICBtX2xheWVyVHJlZUhvc3QgPSBDQUNGTGF5ZXJU
cmVlSG9zdDo6Y3JlYXRlKCk7CisgICAgICAgIGlmIChtX2h3bmQpCisgICAgICAgICAgICBtX2xh
eWVyVHJlZUhvc3QtPnNldFdpbmRvdyhtX2h3bmQpOworICAgIH0KIAogICAgIG1fbGF5ZXJUcmVl
SG9zdC0+c2V0Um9vdENoaWxkTGF5ZXIobV9yb290Q2hpbGQuZ2V0KCkpOwogICAgIFBsYXRmb3Jt
Q0FMYXllciogcm9vdExheWVyID0gbV9yb290Q2hpbGQtPnJvb3RMYXllcigpOwpAQCAtMTQ4LDcg
KzE1NCw4IEBAIExSRVNVTFQgTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdzo6d25k
UHJvYyhIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBCiAgICAgY2FzZSBXTV9ERVNUUk9ZOgog
ICAgICAgICBtX2h3bmQgPSAwOwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAg
ICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRXaW5kb3coMCk7CisgICAgICAgIGlmIChtX2xheWVy
VHJlZUhvc3QpCisgICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnNldFdpbmRvdygwKTsKICNl
bmRpZgogICAgICAgICBicmVhazsKICAgICBjYXNlIFdNX1dJTkRPV1BPU0NIQU5HRUQ6CkBAIC0x
NTcsMjIgKzE2NCwzOCBAQCBMUkVTVUxUIE1lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5k
b3c6OnduZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3NhZ2UsIFdQQQogICAgICAgICAgICAgaWYg
KHdwLT5mbGFncyAmIFNXUF9OT1NJWkUpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5y
ZXNpemUoKTsKLSAgICAgICAgICAgIFBsYXRmb3JtQ0FMYXllciogcm9vdExheWVyID0gbV9yb290
Q2hpbGQtPnJvb3RMYXllcigpOwotICAgICAgICAgICAgQ0dSZWN0IHJvb3RCb3VuZHMgPSBtX3Jv
b3RDaGlsZC0+cm9vdExheWVyKCktPmJvdW5kcygpOwotICAgICAgICAgICAgbV9yb290Q2hpbGQt
PnNldEZyYW1lKHJvb3RCb3VuZHMpOwotICAgICAgICAgICAgbV9yb290Q2hpbGQtPnNldE5lZWRz
TGF5b3V0KCk7CisgICAgICAgICAgICBpZiAobV9sYXllclRyZWVIb3N0KSB7CisgICAgICAgICAg
ICAgICAgbV9sYXllclRyZWVIb3N0LT5yZXNpemUoKTsKKyAgICAgICAgICAgICAgICBQbGF0Zm9y
bUNBTGF5ZXIqIHJvb3RMYXllciA9IG1fcm9vdENoaWxkLT5yb290TGF5ZXIoKTsKKyAgICAgICAg
ICAgICAgICBDR1JlY3Qgcm9vdEJvdW5kcyA9IG1fcm9vdENoaWxkLT5yb290TGF5ZXIoKS0+Ym91
bmRzKCk7CisgICAgICAgICAgICAgICAgbV9yb290Q2hpbGQtPnNldEZyYW1lKHJvb3RCb3VuZHMp
OworICAgICAgICAgICAgICAgIG1fcm9vdENoaWxkLT5zZXROZWVkc0xheW91dCgpOworICAgICAg
ICAgICAgfQogI2VuZGlmCiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBXTV9Q
QUlOVDoKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgICAgIG1fbGF5ZXJU
cmVlSG9zdC0+cGFpbnQoKTsKLSAgICAgICAgOjpWYWxpZGF0ZVJlY3QobV9od25kLCAwKTsKKyAg
ICAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkgeworICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0
LT5wYWludCgpOworICAgICAgICAgICAgOjpWYWxpZGF0ZVJlY3QobV9od25kLCAwKTsKKyAgICAg
ICAgfSBlbHNlCiAjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgUEFJTlRTVFJVQ1QgcHM7
CisgICAgICAgICAgICBIREMgaGRjID0gOjpCZWdpblBhaW50KG1faHduZCwgJnBzKTsKKyAgICAg
ICAgICAgIDo6RmlsbFJlY3QoaGRjLCAmcHMucmNQYWludCwgKEhCUlVTSCk6OkdldFN0b2NrT2Jq
ZWN0KEJMQUNLX0JSVVNIKSk7CisgICAgICAgICAgICA6OkVuZFBhaW50KG1faHduZCwgJnBzKTsK
KyAgICAgICAgfQogICAgICAgICBicmVhazsKKyAgICBjYXNlIFdNX1BSSU5UQ0xJRU5UOgorICAg
ICAgICB7CisgICAgICAgICAgICBSRUNUIGNsaWVudFJlY3Q7CisgICAgICAgICAgICBIREMgY29u
dGV4dCA9IChIREMpd1BhcmFtOworICAgICAgICAgICAgOjpHZXRDbGllbnRSZWN0KG1faHduZCwg
JmNsaWVudFJlY3QpOworICAgICAgICAgICAgOjpGaWxsUmVjdChjb250ZXh0LCAmY2xpZW50UmVj
dCwgKEhCUlVTSCk6OkdldFN0b2NrT2JqZWN0KEJMQUNLX0JSVVNIKSk7CisgICAgICAgIH0KICAg
ICB9Ci0KICAgICBpZiAobV9jbGllbnQpCiAgICAgICAgIGxSZXN1bHQgPSBtX2NsaWVudC0+ZnVs
bHNjcmVlbkNsaWVudFduZFByb2MoaFduZCwgbWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0pOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3dp
bi9DaGFuZ2VMb2cKaW5kZXggMjdmYTc5Ny4uOWIyYzI5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC93aW4vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDMxIEBACisyMDExLTA1LTAyICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxl
bWVudCBGVUxMU0NSRUVOX0FQSSBvbiBXaW5kb3dzLCBQYXJ0IDM6IFdlYktpdDIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU5ODQ1CisKKyAgICAgICAg
SW1wbGVtZW50YXRpb24gb2YgV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIgaGFzIGJlZW4gbW92ZWQg
aW50byBXZWJDb3JlLCBhbmQgCisgICAgICAgIHJlcXVpcmVkIHZpcnV0YWwgZnVuY3Rpb25zIG9m
IFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyQ2xpZW50IGhhdmUgYmVlbiBhZGRlZCB0bworICAgICAg
ICBXZWJWaWV3LiAgVGhlc2UgZnVuY3Rpb25zIGFyZSBtb3N0bHkgc2ltcGxlIGFjY2Vzc29ycyBv
ZiBleGlzdGluZyBpdmFycywgYnV0IAorICAgICAgICBtX2Z1bGxTY3JlZW5FbGVtZW50IGFuZCBp
dHMgYWNjZXNzb3JzIGhhdmUgYWxzbyBiZWVuIGFkZGVkIHRvIFdlYlZpZXcuCisKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ2hyb21l
Q2xpZW50OjplbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KToKKyAgICAgICAgKiBXZWJGdWxsU2Ny
ZWVuQ29udHJvbGxlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogV2ViS2l0LnZjcHJvai9XZWJL
aXQudmNwcm9qOgorICAgICAgICAqIFdlYlZpZXcuY3BwOgorICAgICAgICAoV2ViVmlldzo6c2V0
RnVsbFNjcmVlbkVsZW1lbnQpOiBBZGRlZCBhY2Nlc3Nvci4KKyAgICAgICAgKFdlYlZJZXc6OmZ1
bGxTY3JlZW5FbGVtZW50KTogRGl0dG8uCisgICAgICAgIChXZWJWaWV3Ojp3ZWJWaWV3V2luZG93
KTogRGl0dG8uCisgICAgICAgIChXZWJWaWV3Ojp3ZWJWaWV3SG9zdFdpbmRvdyk6IERpdHRvLgor
ICAgICAgICAoV2ViVmlldzo6c2V0V2ViVmlld0hvc3RXaW5kb3cpOiBEaXR0by4KKyAgICAgICAg
KFdlYlZpZXc6OndlYlZpZXdXaWxsRW50ZXJGdWxsU2NyZWVuKTogUGFzcyB0aHJvdWdoIHRvIERv
Y3VtZW50LgorICAgICAgICAoV2ViVmlldzo6d2ViVmlld0RpZEVudGVyRnVsbFNjcmVlbik6IERp
dHRvLgorICAgICAgICAoV2ViVmlldzo6d2ViVmlld1dpbGxFeGl0RnVsbFNjcmVlbik6IERpdHRv
LgorICAgICAgICAoV2ViVmlldzo6d2ViVmlld0RpZEV4aXRGdWxsU2NyZWVuKTogRGl0dG8uCisg
ICAgICAgICogV2ViVmlldy5oOgorCiAyMDExLTA1LTAxICBTYW0gV2VpbmlnICA8c2FtQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgRml4IHdpbmRvd3MgYnVpbGQuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L3dpbi9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQv
d2luL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIuY3BwCmluZGV4IDIzNDkzMmYuLjkwYTAzZjcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIuY3Bw
CkBAIC0yNzcsNiArMjc3LDcgQEAgdm9pZCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyOjplbnRl
ckZ1bGxzY3JlZW4oKQogICAgIEhXTkQgcGFyZW50SHduZCA9IHdlYlZpZXcgPyB3ZWJWaWV3LT52
aWV3V2luZG93KCkgOiAwOwogCiAgICAgbV9mdWxsc2NyZWVuV2luZG93LT5jcmVhdGVXaW5kb3co
cGFyZW50SHduZCk7CisgICAgOjpTaG93V2luZG93KG1fZnVsbHNjcmVlbldpbmRvdy0+aHduZCgp
LCBTV19TSE9XKTsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgbV9mdWxs
c2NyZWVuV2luZG93LT5zZXRSb290Q2hpbGRMYXllcihtX3Jvb3RDaGlsZCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCmlu
ZGV4IDQ2MGQxNmMuLjI3ODVjM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcApAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1
ZGUgIldlYkhpc3RvcnkuaCIKICNpbmNsdWRlICJXZWJNdXRhYmxlVVJMUmVxdWVzdC5oIgogI2lu
Y2x1ZGUgIldlYkRlc2t0b3BOb3RpZmljYXRpb25zRGVsZWdhdGUuaCIKLSNpbmNsdWRlICJXZWJG
dWxsU2NyZWVuQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIldlYlNlY3VyaXR5T3JpZ2luLmgiCiAj
aW5jbHVkZSAiV2ViVmlldy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQlN0cmluZy5oPgpAQCAtNDYs
NiArNDUsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9GcmFtZUxvYWRSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0Z1bGxTY3JlZW5Db250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9IVE1MTmFtZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ljb24uaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0xvY2FsV2luZG93c0NvbnRleHQuaD4KQEAgLTkwNCw3ICs5MDQsNyBAQCB2b2lkIFdl
YkNocm9tZUNsaWVudDo6ZW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0gCiAKLSAgICBtX3dlYlZpZXctPmZ1bGxTY3Jl
ZW5Db250cm9sbGVyKCktPnNldEVsZW1lbnQoZWxlbWVudCk7CisgICAgbV93ZWJWaWV3LT5zZXRG
dWxsU2NyZWVuRWxlbWVudChlbGVtZW50KTsKICAgICBtX3dlYlZpZXctPmZ1bGxTY3JlZW5Db250
cm9sbGVyKCktPmVudGVyRnVsbFNjcmVlbigpOwogfQogCkBAIC05MTgsNyArOTE4LDcgQEAgdm9p
ZCBXZWJDaHJvbWVDbGllbnQ6OmV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChFbGVtZW50KiBlbGVt
ZW50KQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEFTU0VSVChlbGVtZW50ID09
IG1fd2ViVmlldy0+ZnVsbFNjcmVlbkNvbnRyb2xsZXIoKS0+ZWxlbWVudCgpKTsKKyAgICBBU1NF
UlQoZWxlbWVudCA9PSBtX3dlYlZpZXctPmZ1bGxTY3JlZW5FbGVtZW50KCkpOwogICAgIG1fd2Vi
Vmlldy0+ZnVsbFNjcmVlbkNvbnRyb2xsZXIoKS0+ZXhpdEZ1bGxTY3JlZW4oKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuY3BwIGIv
U291cmNlL1dlYktpdC93aW4vV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA1MDgyOWQyLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQv
d2luL1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE3OCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQgMjAwOS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotCi0jaW5j
bHVkZSAiV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuaCIKLQotI2luY2x1ZGUgIldlYlZpZXcuaCIK
LSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9FbGVtZW50Lmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9NZWRp
YVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9XZWJD
b3JlSW5zdGFuY2VIYW5kbGUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLWNsYXNz
IFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyOjpQcml2YXRlIDogcHVibGljIE1lZGlhUGxheWVyUHJp
dmF0ZUZ1bGxzY3JlZW5DbGllbnQgewotcHVibGljOgotICAgIFByaXZhdGUoV2ViRnVsbFNjcmVl
bkNvbnRyb2xsZXIqIGNvbnRyb2xsZXIsIFdlYlZpZXcqIHdlYlZpZXcpIAotICAgICAgICA6IGNv
bnRyb2xsZXIoY29udHJvbGxlcikKLSAgICAgICAgLCB3ZWJWaWV3KHdlYlZpZXcpCi0gICAgICAg
ICwgaG9zdFdpbmRvdygwKQotICAgICAgICAsIG9yaWdpbmFsSG9zdCgwKQotICAgICAgICAsIGlz
RnVsbFNjcmVlbihmYWxzZSkKLSAgICB7Ci0gICAgfQotICAgIHZpcnR1YWwgflByaXZhdGUoKSB7
IH0KLQotICAgIHZpcnR1YWwgTFJFU1VMVCBmdWxsc2NyZWVuQ2xpZW50V25kUHJvYyhIV05ELCBV
SU5ULCBXUEFSQU0sIExQQVJBTSk7Ci0gICAgCi0gICAgV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIq
IGNvbnRyb2xsZXI7Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQ7Ci0gICAgV2ViVmlldyog
d2ViVmlldzsKLSAgICBPd25QdHI8TWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdz4g
ZnVsbFNjcmVlbldpbmRvdzsKLSAgICBJbnRSZWN0IGZ1bGxTY3JlZW5GcmFtZTsKLSAgICBIV05E
IGhvc3RXaW5kb3c7Ci0gICAgSFdORCBvcmlnaW5hbEhvc3Q7Ci0gICAgYm9vbCBpc0Z1bGxTY3Jl
ZW47Ci19OwotCi1MUkVTVUxUIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyOjpQcml2YXRlOjpmdWxs
c2NyZWVuQ2xpZW50V25kUHJvYyhIV05EIGh3bmQsIFVJTlQgbXNnLCBXUEFSQU0gd1BhcmFtLCBM
UEFSQU0gbFBhcmFtKQotewotICAgIExSRVNVTFQgbFJlc3VsdCA9IDA7Ci0KLSAgICBzd2l0Y2gg
KG1zZykgewotICAgIGNhc2UgV01fQ1JFQVRFOgotICAgICAgICBob3N0V2luZG93ID0gaHduZDsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXTV9ERVNUUk9ZOgotICAgICAgICBob3N0V2luZG93
ID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXTV9NT1ZFOgotICAgICAgICBmdWxsU2Ny
ZWVuRnJhbWUuc2V0WChMT1dPUkQobFBhcmFtKSk7Ci0gICAgICAgIGZ1bGxTY3JlZW5GcmFtZS5z
ZXRZKEhJV09SRChsUGFyYW0pKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXTV9TSVpFOgot
ICAgICAgICBmdWxsU2NyZWVuRnJhbWUuc2V0V2lkdGgoTE9XT1JEKGxQYXJhbSkpOwotICAgICAg
ICBmdWxsU2NyZWVuRnJhbWUuc2V0SGVpZ2h0KEhJV09SRChsUGFyYW0pKTsKLSAgICAgICAgaWYg
KHdlYlZpZXctPnZpZXdXaW5kb3coKSkKLSAgICAgICAgICAgIDo6U2V0V2luZG93UG9zKHdlYlZp
ZXctPnZpZXdXaW5kb3coKSwgMCwgMCwgMCwgZnVsbFNjcmVlbkZyYW1lLndpZHRoKCksIGZ1bGxT
Y3JlZW5GcmFtZS5oZWlnaHQoKSwgU1dQX05PUkVQT1NJVElPTiAgfCBTV1BfTk9NT1ZFKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXTV9LRVlET1dOOgotICAgICAgICBpZiAod1BhcmFtID09
IFZLX0VTQ0FQRSkgewotICAgICAgICAgICAgY29udHJvbGxlci0+ZXhpdEZ1bGxTY3JlZW4oKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIC8vIEZhbGwgdGhyb3VnaC4K
LSAgICBkZWZhdWx0OgotICAgICAgICBsUmVzdWx0ID0gOjpEZWZXaW5kb3dQcm9jKGh3bmQsIG1z
Zywgd1BhcmFtLCBsUGFyYW0pOwotICAgIH0KLQotICAgIHJldHVybiBsUmVzdWx0OwotfQotCi1X
ZWJGdWxsU2NyZWVuQ29udHJvbGxlcjo6V2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIoV2ViVmlldyog
d2ViVmlldykKLSAgICA6IG1fcHJpdmF0ZShhZG9wdFB0cihuZXcgV2ViRnVsbFNjcmVlbkNvbnRy
b2xsZXI6OlByaXZhdGUodGhpcywgd2ViVmlldykpKQotewotICAgIEFTU0VSVCh3ZWJWaWV3KTsK
LX0KLQotV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXI6On5XZWJGdWxsU2NyZWVuQ29udHJvbGxlcigp
Ci17Ci19Ci0KLXZvaWQgV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXI6OnNldEVsZW1lbnQoUGFzc1Jl
ZlB0cjxFbGVtZW50PiBlbGVtZW50KQotewotICAgIG1fcHJpdmF0ZS0+ZWxlbWVudCA9IGVsZW1l
bnQ7Ci19Ci0KLUVsZW1lbnQqIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyOjplbGVtZW50KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9wcml2YXRlLT5lbGVtZW50LmdldCgpOwotfQotCi1ib29sIFdl
YkZ1bGxTY3JlZW5Db250cm9sbGVyOjppc0Z1bGxTY3JlZW4oKSBjb25zdAotewotICAgIHJldHVy
biBtX3ByaXZhdGUtPmlzRnVsbFNjcmVlbjsKLX0KLQotdm9pZCBXZWJGdWxsU2NyZWVuQ29udHJv
bGxlcjo6ZW50ZXJGdWxsU2NyZWVuKCkKLXsKLSAgICBpZiAobV9wcml2YXRlLT5pc0Z1bGxTY3Jl
ZW4pCi0gICAgICAgIHJldHVybjsKLSAgICBtX3ByaXZhdGUtPmlzRnVsbFNjcmVlbiA9IHRydWU7
Ci0KLSAgICBBU1NFUlQobV9wcml2YXRlLT5lbGVtZW50KTsKLSAgICBtX3ByaXZhdGUtPmVsZW1l
bnQtPmRvY3VtZW50KCktPndlYmtpdFdpbGxFbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KG1fcHJp
dmF0ZS0+ZWxlbWVudC5nZXQoKSk7Ci0KLSAgICBBU1NFUlQoIW1fcHJpdmF0ZS0+ZnVsbFNjcmVl
bldpbmRvdyk7Ci0gICAgbV9wcml2YXRlLT5mdWxsU2NyZWVuV2luZG93ID0gYWRvcHRQdHIobmV3
IE1lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3cobV9wcml2YXRlLmdldCgpKSk7Ci0g
ICAgQVNTRVJUKG1fcHJpdmF0ZS0+ZnVsbFNjcmVlbldpbmRvdyk7Ci0KLSAgICBtX3ByaXZhdGUt
PmZ1bGxTY3JlZW5XaW5kb3ctPmNyZWF0ZVdpbmRvdygwKTsKLSAgICBBU1NFUlQobV9wcml2YXRl
LT5ob3N0V2luZG93KTsKLQotICAgIEhXTkQgb3JpZ2luYWxIb3N0ID0gMDsKLSAgICBpZiAoRkFJ
TEVEKG1fcHJpdmF0ZS0+d2ViVmlldy0+aG9zdFdpbmRvdyhyZWludGVycHJldF9jYXN0PE9MRV9I
QU5ETEUqPigmb3JpZ2luYWxIb3N0KSkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoRkFJ
TEVEKG1fcHJpdmF0ZS0+d2ViVmlldy0+c2V0SG9zdFdpbmRvdyhyZWludGVycHJldF9jYXN0PE9M
RV9IQU5ETEU+KG1fcHJpdmF0ZS0+aG9zdFdpbmRvdykpKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgSW50UmVjdCB2aWV3RnJhbWUoSW50UG9pbnQoKSwgbV9wcml2YXRlLT5mdWxsU2NyZWVuRnJh
bWUuc2l6ZSgpKTsKLSAgICA6OlNldFdpbmRvd1BvcyhtX3ByaXZhdGUtPndlYlZpZXctPnZpZXdX
aW5kb3coKSwgSFdORF9UT1AsIDAsIDAsIHZpZXdGcmFtZS53aWR0aCgpLCB2aWV3RnJhbWUuaGVp
Z2h0KCksIFNXUF9OT1JFUE9TSVRJT04pOwotICAgIDo6U2hvd1dpbmRvdyhtX3ByaXZhdGUtPmhv
c3RXaW5kb3csIFNXX1NIT1cpOwotICAgIG1fcHJpdmF0ZS0+d2ViVmlldy0+cmVwYWludCh2aWV3
RnJhbWUsIGZhbHNlLCB0cnVlKTsKLSAgICBtX3ByaXZhdGUtPm9yaWdpbmFsSG9zdCA9IG9yaWdp
bmFsSG9zdDsKLQotICAgIG1fcHJpdmF0ZS0+ZWxlbWVudC0+ZG9jdW1lbnQoKS0+d2Via2l0RGlk
RW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChtX3ByaXZhdGUtPmVsZW1lbnQuZ2V0KCkpOwotfQot
Ci12b2lkIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyOjpleGl0RnVsbFNjcmVlbigpCi17Ci0gICAg
aWYgKCFtX3ByaXZhdGUtPmlzRnVsbFNjcmVlbikKLSAgICAgICAgcmV0dXJuOwotICAgIG1fcHJp
dmF0ZS0+aXNGdWxsU2NyZWVuID0gZmFsc2U7Ci0KLSAgICBBU1NFUlQobV9wcml2YXRlLT5lbGVt
ZW50KTsKLSAgICBtX3ByaXZhdGUtPmVsZW1lbnQtPmRvY3VtZW50KCktPndlYmtpdFdpbGxFeGl0
RnVsbFNjcmVlbkZvckVsZW1lbnQobV9wcml2YXRlLT5lbGVtZW50LmdldCgpKTsKLQotICAgIEFT
U0VSVChtX3ByaXZhdGUtPmhvc3RXaW5kb3cpOwotICAgIGlmIChGQUlMRUQobV9wcml2YXRlLT53
ZWJWaWV3LT5zZXRIb3N0V2luZG93KHJlaW50ZXJwcmV0X2Nhc3Q8T0xFX0hBTkRMRT4obV9wcml2
YXRlLT5vcmlnaW5hbEhvc3QpKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIDo6RGVzdHJveVdp
bmRvdyhtX3ByaXZhdGUtPmhvc3RXaW5kb3cpOwotICAgIEFTU0VSVCghbV9wcml2YXRlLT5ob3N0
V2luZG93KTsKLSAgICBtX3ByaXZhdGUtPmZ1bGxTY3JlZW5XaW5kb3cgPSAwOwotCi0gICAgbV9w
cml2YXRlLT5lbGVtZW50LT5kb2N1bWVudCgpLT53ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZvckVs
ZW1lbnQobV9wcml2YXRlLT5lbGVtZW50LmdldCgpKTsKLSAgICBtX3ByaXZhdGUtPmVsZW1lbnQg
PSAwOwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkZ1bGxT
Y3JlZW5Db250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJGdWxsU2NyZWVuQ29udHJv
bGxlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzllMDRiLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkZ1bGxTY3JlZW5Db250cm9sbGVyLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw2MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBXZWJGdWxsU2NyZWVuQ29u
dHJvbGxlcl9oCi0jZGVmaW5lIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyX2gKLQotI2lmIEVOQUJM
RShGVUxMU0NSRUVOX0FQSSkKLQotI2luY2x1ZGUgIldlYktpdC5oIgotI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LSAgICBjbGFzcyBFbGVtZW50OwotfQotCi1jbGFzcyBXZWJWaWV3OwotCi1jbGFzcyBXZWJGdWxs
U2NyZWVuQ29udHJvbGxlciB7Ci1wdWJsaWM6Ci0gICAgV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIo
V2ViVmlldyopOwotICAgIH5XZWJGdWxsU2NyZWVuQ29udHJvbGxlcigpOwotCi1wdWJsaWM6Ci0g
ICAgdm9pZCBzZXRFbGVtZW50KFBhc3NSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4pOwotICAgIFdl
YkNvcmU6OkVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdDsKLQotICAgIHZvaWQgZW50ZXJGdWxsU2Ny
ZWVuKCk7Ci0gICAgdm9pZCBleGl0RnVsbFNjcmVlbigpOwotICAgIAotICAgIGJvb2wgaXNGdWxs
U2NyZWVuKCkgY29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAgICBjbGFzcyBQcml2YXRlOwotICAgIGZy
aWVuZCBjbGFzcyBQcml2YXRlOwotICAgIE93blB0cjxXZWJGdWxsU2NyZWVuQ29udHJvbGxlcjo6
UHJpdmF0ZT4gbV9wcml2YXRlOwotfTsKLQotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC93aW4vV2ViS2l0LnZjcHJvai9XZWJLaXQudmNwcm9qIGIvU291cmNlL1dl
YktpdC93aW4vV2ViS2l0LnZjcHJvai9XZWJLaXQudmNwcm9qCmluZGV4IGE1ZDY3MmYuLjRkMjVm
NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYktpdC52Y3Byb2ovV2ViS2l0LnZj
cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJLaXQudmNwcm9qL1dlYktpdC52Y3Byb2oK
QEAgLTUxMiwxMCArNTEyLDYgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJl
bGF0aXZlUGF0aD0iLi5cV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIuaCIKLQkJCQk+Ci0JCQk8L0Zp
bGU+Ci0JCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cV2ViR2VvbG9jYXRpb25Qb2xpY3lM
aXN0ZW5lci5oIgogCQkJCT4KIAkJCTwvRmlsZT4KQEAgLTkzMiwxMCArOTI4LDYgQEAKIAkJCQk+
CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cV2ViRnVsbFNjcmVl
bkNvbnRyb2xsZXIuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCiAJCQkJUmVsYXRp
dmVQYXRoPSIuLlxXZWJHZW9sb2NhdGlvblBvbGljeUxpc3RlbmVyLmNwcCIKIAkJCQk+CiAJCQk8
L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCmluZGV4IDE3NTMyZmMuLmE5NDcyNmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2lu
L1dlYlZpZXcuY3BwCkBAIC0xNjEsNyArMTYxLDcgQEAKICNlbmRpZgogCiAjaWYgRU5BQkxFKEZV
TExTQ1JFRU5fQVBJKQotI2luY2x1ZGUgIldlYkZ1bGxTY3JlZW5Db250cm9sbGVyLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9GdWxsU2NyZWVuQ29udHJvbGxlci5oPgogI2VuZGlmCiAKICNpbmNsdWRl
IDxTaGxPYmouaD4KQEAgLTY3NjAsMTAgKzY3NjAsNTcgQEAgYm9vbCBXZWJWaWV3Ojppc0Z1bGxT
Y3JlZW4oKSBjb25zdAogICAgIHJldHVybiBtX2Z1bGxzY3JlZW5Db250cm9sbGVyICYmIG1fZnVs
bHNjcmVlbkNvbnRyb2xsZXItPmlzRnVsbFNjcmVlbigpOwogfQogCi1XZWJGdWxsU2NyZWVuQ29u
dHJvbGxlciogV2ViVmlldzo6ZnVsbFNjcmVlbkNvbnRyb2xsZXIoKQorRnVsbFNjcmVlbkNvbnRy
b2xsZXIqIFdlYlZpZXc6OmZ1bGxTY3JlZW5Db250cm9sbGVyKCkKIHsKICAgICBpZiAoIW1fZnVs
bHNjcmVlbkNvbnRyb2xsZXIpCi0gICAgICAgIG1fZnVsbHNjcmVlbkNvbnRyb2xsZXIgPSBhZG9w
dFB0cihuZXcgV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXIodGhpcykpOworICAgICAgICBtX2Z1bGxz
Y3JlZW5Db250cm9sbGVyID0gYWRvcHRQdHIobmV3IEZ1bGxTY3JlZW5Db250cm9sbGVyKHRoaXMp
KTsKICAgICByZXR1cm4gbV9mdWxsc2NyZWVuQ29udHJvbGxlci5nZXQoKTsKIH0KKwordm9pZCBX
ZWJWaWV3OjpzZXRGdWxsU2NyZWVuRWxlbWVudChQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQp
Cit7CisgICAgbV9mdWxsU2NyZWVuRWxlbWVudCA9IGVsZW1lbnQ7Cit9CisKK0hXTkQgV2ViVmll
dzo6ZnVsbFNjcmVlbkNsaWVudFdpbmRvdygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdmlld1dp
bmRvdzsKK30KKworSFdORCBXZWJWaWV3OjpmdWxsU2NyZWVuQ2xpZW50UGFyZW50V2luZG93KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9ob3N0V2luZG93OworfQorCit2b2lkIFdlYlZpZXc6OnNl
dEZ1bGxTY3JlZW5DbGllbnRQYXJlbnRXaW5kb3coSFdORCBob3N0V2luZG93KQoreworICAgIHNl
dEhvc3RXaW5kb3cocmVpbnRlcnByZXRfY2FzdDxPTEVfSEFORExFPihob3N0V2luZG93KSk7Cit9
CisKK3ZvaWQgV2ViVmlldzo6ZnVsbFNjcmVlbkNsaWVudFdpbGxFbnRlckZ1bGxTY3JlZW4oKQor
eworICAgIEFTU0VSVChtX2Z1bGxTY3JlZW5FbGVtZW50KTsKKyAgICBtX2Z1bGxTY3JlZW5FbGVt
ZW50LT5kb2N1bWVudCgpLT53ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChtX2Z1
bGxTY3JlZW5FbGVtZW50LmdldCgpKTsKK30KKwordm9pZCBXZWJWaWV3OjpmdWxsU2NyZWVuQ2xp
ZW50RGlkRW50ZXJGdWxsU2NyZWVuKCkKK3sKKyAgICBBU1NFUlQobV9mdWxsU2NyZWVuRWxlbWVu
dCk7CisgICAgbV9mdWxsU2NyZWVuRWxlbWVudC0+ZG9jdW1lbnQoKS0+d2Via2l0RGlkRW50ZXJG
dWxsU2NyZWVuRm9yRWxlbWVudChtX2Z1bGxTY3JlZW5FbGVtZW50LmdldCgpKTsKK30KKwordm9p
ZCBXZWJWaWV3OjpmdWxsU2NyZWVuQ2xpZW50V2lsbEV4aXRGdWxsU2NyZWVuKCkKK3sKKyAgICBB
U1NFUlQobV9mdWxsU2NyZWVuRWxlbWVudCk7CisgICAgbV9mdWxsU2NyZWVuRWxlbWVudC0+ZG9j
dW1lbnQoKS0+d2Via2l0V2lsbEV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudChtX2Z1bGxTY3JlZW5F
bGVtZW50LmdldCgpKTsKK30KKwordm9pZCBXZWJWaWV3OjpmdWxsU2NyZWVuQ2xpZW50RGlkRXhp
dEZ1bGxTY3JlZW4oKQoreworICAgIEFTU0VSVChtX2Z1bGxTY3JlZW5FbGVtZW50KTsKKyAgICBt
X2Z1bGxTY3JlZW5FbGVtZW50LT5kb2N1bWVudCgpLT53ZWJraXREaWRFeGl0RnVsbFNjcmVlbkZv
ckVsZW1lbnQobV9mdWxsU2NyZWVuRWxlbWVudC5nZXQoKSk7CisgICAgbV9mdWxsU2NyZWVuRWxl
bWVudCA9IG51bGxwdHI7Cit9CisKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L3dpbi9XZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmgKaW5kZXggYmMzNjQ2
MC4uOGU3YWUyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuaApAQCAtMTQsNyArMTQsNyBAQAogICoKICAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNmTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQkl1TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCiAgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKICAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAogICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLApAQCAtNDQsMTEgKzQ0LDE4
IEBACiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2luY2x1ZGUgPFdlYkNvcmUv
Q0FDRkxheWVyVHJlZUhvc3RDbGllbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5
ZXJDbGllbnQuaD4KKyNlbmRpZgorCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorI2luY2x1
ZGUgPFdlYkNvcmUvRnVsbFNjcmVlbkNvbnRyb2xsZXJDbGllbnQuaD4KKyNlbmRpZgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIGNs
YXNzIENBQ0ZMYXllclRyZWVIb3N0OwotfQogI2VuZGlmCisgICAgY2xhc3MgRnVsbFNjcmVlbkNv
bnRyb2xsZXI7Cit9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBIaXN0b3J5SXRl
bTsKQEAgLTU3LDE0ICs2NCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEZ1bGxzY3Jl
ZW5WaWRlb0NvbnRyb2xsZXI7CiBjbGFzcyBXZWJCYWNrRm9yd2FyZExpc3Q7CiBjbGFzcyBXZWJG
cmFtZTsKLWNsYXNzIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyOwogY2xhc3MgV2ViSW5zcGVjdG9y
OwogY2xhc3MgV2ViSW5zcGVjdG9yQ2xpZW50OwogCi0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJ
KQotY2xhc3MgV2ViRnVsbFNjcmVlbkNvbnRyb2xsZXI7Ci0jZW5kaWYKLQogdHlwZWRlZiBXZWJD
b3JlOjpSZWZDb3VudGVkR0RJSGFuZGxlPEhCSVRNQVA+IFJlZkNvdW50ZWRIQklUTUFQOwogdHlw
ZWRlZiBXZWJDb3JlOjpSZWZDb3VudGVkR0RJSGFuZGxlPEhSR04+IFJlZkNvdW50ZWRIUkdOOwog
CkBAIC04OCw2ICs5MCw5IEBAIGNsYXNzIFdlYlZpZXcKICAgICAsIFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXJDbGllbnQKICAgICAsIFdlYkNvcmU6OkNBQ0ZMYXllclRyZWVIb3N0Q2xpZW50CiAjZW5k
aWYKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgLCBXZWJDb3JlOjpGdWxsU2NyZWVu
Q29udHJvbGxlckNsaWVudAorI2VuZGlmCiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFdlYlZpZXcq
IGNyZWF0ZUluc3RhbmNlKCk7CkBAIC05NDQsNyArOTQ5LDkgQEAgcHVibGljOgogI2lmIEVOQUJM
RShGVUxMU0NSRUVOX0FQSSkKICAgICBib29sIHN1cHBvcnRzRnVsbFNjcmVlbkZvckVsZW1lbnQo
Y29uc3QgV2ViQ29yZTo6RWxlbWVudCosIGJvb2wgd2l0aEtleWJvYXJkKSBjb25zdDsKICAgICBi
b29sIGlzRnVsbFNjcmVlbigpIGNvbnN0OwotICAgIFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyKiBm
dWxsU2NyZWVuQ29udHJvbGxlcigpOworICAgIFdlYkNvcmU6OkZ1bGxTY3JlZW5Db250cm9sbGVy
KiBmdWxsU2NyZWVuQ29udHJvbGxlcigpOworICAgIHZvaWQgc2V0RnVsbFNjcmVlbkVsZW1lbnQo
UGFzc1JlZlB0cjxXZWJDb3JlOjpFbGVtZW50Pik7CisgICAgV2ViQ29yZTo6RWxlbWVudCogZnVs
bFNjcmVlbkVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2Z1bGxTY3JlZW5FbGVtZW50LmdldCgp
OyB9CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAgLTEwMTAsNiArMTAxNywxNiBAQCBwcm90ZWN0ZWQ6
CiAKICAgICB2aXJ0dWFsIHZvaWQgd2luZG93UmVjZWl2ZWRNZXNzYWdlKEhXTkQsIFVJTlQgbWVz
c2FnZSwgV1BBUkFNLCBMUEFSQU0pOwogCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAg
IHZpcnR1YWwgSFdORCBmdWxsU2NyZWVuQ2xpZW50V2luZG93KCkgY29uc3Q7CisgICAgdmlydHVh
bCBIV05EIGZ1bGxTY3JlZW5DbGllbnRQYXJlbnRXaW5kb3coKSBjb25zdDsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0RnVsbFNjcmVlbkNsaWVudFBhcmVudFdpbmRvdyhIV05EKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZnVsbFNjcmVlbkNsaWVudFdpbGxFbnRlckZ1bGxTY3JlZW4oKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZnVsbFNjcmVlbkNsaWVudERpZEVudGVyRnVsbFNjcmVlbigpOworICAgIHZpcnR1YWwg
dm9pZCBmdWxsU2NyZWVuQ2xpZW50V2lsbEV4aXRGdWxsU2NyZWVuKCk7CisgICAgdmlydHVhbCB2
b2lkIGZ1bGxTY3JlZW5DbGllbnREaWRFeGl0RnVsbFNjcmVlbigpOworI2VuZGlmCisKICAgICBV
TE9ORyBtX3JlZkNvdW50OwogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICBib29sIG1fZGVsZXRp
b25IYXNCZWd1bjsKQEAgLTExMDMsNyArMTEyMCw4IEBAIHByb3RlY3RlZDoKICAgICBSZWZQdHI8
V2ViQ29yZTo6SGlzdG9yeUl0ZW0+IG1fZ2xvYmFsSGlzdG9yeUl0ZW07CiAKICNpZiBFTkFCTEUo
RlVMTFNDUkVFTl9BUEkpCi0gICAgT3duUHRyPFdlYkZ1bGxTY3JlZW5Db250cm9sbGVyPiBtX2Z1
bGxzY3JlZW5Db250cm9sbGVyOworICAgIFJlZlB0cjxXZWJDb3JlOjpFbGVtZW50PiBtX2Z1bGxT
Y3JlZW5FbGVtZW50OworICAgIE93blB0cjxXZWJDb3JlOjpGdWxsU2NyZWVuQ29udHJvbGxlcj4g
bV9mdWxsc2NyZWVuQ29udHJvbGxlcjsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGIyMTNj
MTMuLjVhNDI0N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MyBAQAorMjAxMS0wNS0wMiAgSmVy
IE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgRlVMTFNDUkVFTl9BUEkgb24gV2luZG93
cywgUGFydCAzOiBXZWJLaXQyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01OTg0NQorCisgICAgICAgIEltcGxlbWVudCBhIHNpbWlsYXIgZnVsbCBzY3Jl
ZW4gbW9kZSB0byBXZWJLaXQ7IFJlLXVzZSB0aGUgc2FtZQorICAgICAgICBmdWxsIHNjcmVlbiB3
aW5kb3cgY2xhc3MgdXNlZCBpbiBXZWJLaXQgaW4gdGhlIG5ldyBXZWJGdWxsU2NyZWVuQ29udHJv
bGxlci4KKyAgICAgICAgTm8gYW5pbWF0aW9ucyAoeWV0KSwgc28gbWFueSBvZiB0aGUgc3R1YnMg
cmVtYWluIHVuaW1wbGVtZW50ZWQuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlZpZXcu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpvbktleUV2ZW50KTogSGFuZGxlIFZLX0VT
Q0FQRSBhbmQgY2FuY2VsIGZ1bGwgc2NyZWVuCisgICAgICAgICAgICBtb2RlIGlmIGNhdWdodC4K
KyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6ZnVsbFNjcmVlbkNvbnRyb2xsZXIpOiBMYXppbHkg
aW5zdGFudGlhdGUgbV9mdWxsU2NyZWVuQ29udHJvbGxlci4KKyAgICAgICAgKFdlYktpdDo6V2Vi
Vmlldzo6d2ViVmlld1dpbmRvdyk6IEFkZGVkIGFjY2Vzc29yLgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3Ojp3ZWJWaWV3SG9zdFdpbmRvdyk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3OjpzZXRXZWJWaWV3SG9zdFdpbmRvdyk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3Ojp3ZWJWaWV3V2lsbEVudGVyRnVsbFNjcmVlbik6IFBhc3MgdGhyb3VnaCB0byBXZWJGdWxs
U2NyZWVuTWFuYWdlclByb3h5LgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojp3ZWJWaWV3RGlk
RW50ZXJGdWxsU2NyZWVuKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYlZpZXc6OndlYlZp
ZXdXaWxsRXhpdEZ1bGxTY3JlZW4pOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6
d2ViVmlld0RpZEV4aXRGdWxsU2NyZWVuKTogRGl0dG8uCisgICAgICAgICogVUlQcm9jZXNzL3dp
bi9XZWJWaWV3Lmg6CisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJGdWxsU2NyZWVuTWFuYWdl
clByb3h5V2luLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94
eTo6ZW50ZXJGdWxsU2NyZWVuKTogUGFzcyB0aHJvdWdoIHRvIAorICAgICAgICAgICAgV2ViRnVs
bFNjcmVlbkNvbnRyb2xsZXIuCisgICAgICAgIChXZWJLaXQ6OldlYkZ1bGxTY3JlZW5NYW5hZ2Vy
UHJveHk6OmV4aXRGdWxsU2NyZWVuKTogRGl0dG8uCisgICAgICAgICogVUlQcm9jZXNzL3dpbi9X
ZWJWaWV3LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6V2ViVmlldyk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXc6Om9uS2V5RXZlbnQpOiBIYW5kbGUgdGhlIGVzY2FwZSBrZXkgYW5k
IGV4aXQKKyAgICAgICAgICAgZnVsbCBzY3JlZW4gbW9kZSB3aGVuIGRldGVjdGVkLgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3OjpmdWxsU2NyZWVuV2luZG93Q29udHJvbGxlcik6IEFkZGVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViVmlldy5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
RnVsbFNjcmVlbi93aW4vV2ViRnVsbFNjcmVlbk1hbmFnZXJXaW4uY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJGdWxsU2NyZWVuTWFuYWdlcldpbjo6fldlYkZ1bGxTY3JlZW5NYW5hZ2VyV2luKToK
KyAgICAgICAgKFdlYktpdDo6V2ViRnVsbFNjcmVlbk1hbmFnZXJXaW46OnNldFJvb3RGdWxsU2Ny
ZWVuTGF5ZXIpOiBIb3N0IHRoZSByb290CisgICAgICAgICAgICBmdWxsIHNjcmVlbiBsYXllciBp
ZiBpdCBnZXRzIGRldGFjaGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvRnVsbFNjcmVlbi93aW4v
V2ViRnVsbFNjcmVlbk1hbmFnZXJXaW4uaDoKKyAgICAgICAgKiB3aW4vV2ViS2l0Mi52Y3Byb2o6
CisKIDIwMTEtMDUtMDIgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAog
ICAgICAgICBGaXggY3Jhc2ggdGhhdCB3YXMgaW50cm9kdWNlZCBpbiByODU1MTUuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJv
eHlXaW4uY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJGdWxsU2NyZWVuTWFu
YWdlclByb3h5V2luLmNwcAppbmRleCBkY2FjNjg5Li5hZDJmNmJmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlXaW4uY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViRnVsbFNjcmVlbk1hbmFnZXJQ
cm94eVdpbi5jcHAKQEAgLTI4LDYgKzI4LDggQEAKIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQ
SSkKIAorI2luY2x1ZGUgIldlYlZpZXcuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Z1bGxTY3JlZW5D
b250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewpAQCAtMzYsMTQgKzM4LDE0IEBAIHZvaWQgV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94
eTo6ZW50ZXJGdWxsU2NyZWVuKCkKIHsKICAgICBpZiAoIW1fd2ViVmlldykKICAgICAgICAgcmV0
dXJuOwotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQKKyAgICBtX3dlYlZpZXctPmZ1bGxTY3JlZW5D
b250cm9sbGVyKCktPmVudGVyRnVsbFNjcmVlbigpOwogfQogCiB2b2lkIFdlYkZ1bGxTY3JlZW5N
YW5hZ2VyUHJveHk6OmV4aXRGdWxsU2NyZWVuKCkKIHsKICAgICBpZiAoIW1fd2ViVmlldykKICAg
ICAgICAgcmV0dXJuOwotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQKKyAgICBtX3dlYlZpZXctPmZ1
bGxTY3JlZW5Db250cm9sbGVyKCktPmV4aXRGdWxsU2NyZWVuKCk7CiB9CiAKIHZvaWQgV2ViRnVs
bFNjcmVlbk1hbmFnZXJQcm94eTo6YmVnYW5FbnRlckZ1bGxTY3JlZW5BbmltYXRpb24oKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAKaW5kZXggOGNlY2IwMi4uNDgyNWEz
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCkBAIC01NSw2ICs1
NSwxMSBAQAogI2luY2x1ZGUgPFdlYkNvcmUvV2luZG93c1RvdWNoLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisjaW5jbHVk
ZSAiV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRnVsbFNj
cmVlbkNvbnRyb2xsZXIuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgSW1lIHsKIC8vIFdlIG5lZWQg
dGhlc2UgZnVuY3Rpb25zIGluIGEgc2VwYXJhdGUgbmFtZXNwYWNlLCBiZWNhdXNlIGluIHRoZSBn
bG9iYWwgbmFtZXNwYWNlIHRoZXkgY29uZmxpY3QKIC8vIHdpdGggdGhlIGRlZmluaXRpb25zIGlu
IGltbS5oIG9ubHkgYnkgdGhlIHR5cGUgbW9kaWZpZXIgKHRoZSBtYWNybyBkZWZpbmVzIHRoZW0g
YXMgc3RhdGljKSBhbmQKQEAgLTI5OSw2ICszMDQsMTAgQEAgV2ViVmlldzo6V2ViVmlldyhSRUNU
IHJlY3QsIFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYlBhZ2VHcm91cCogcGFnZUdyb3VwLCBIV05E
IHAKIAogICAgIC8vIEluaXRpYWxpemUgdGhlIHRvcCBsZXZlbCBwYXJlbnQgd2luZG93IGFuZCBy
ZWdpc3RlciBpdCB3aXRoIHRoZSBXaW5kb3dNZXNzYWdlQnJvYWRjYXN0ZXIuCiAgICAgd2luZG93
QW5jZXN0cnlEaWRDaGFuZ2UoKTsKKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBt
X3BhZ2UtPmZ1bGxTY3JlZW5NYW5hZ2VyKCktPnNldFdlYlZpZXcodGhpcyk7CisjZW5kaWYKIH0K
IAogV2ViVmlldzo6fldlYlZpZXcoKQpAQCAtNjA4LDYgKzYxNywxNCBAQCBMUkVTVUxUIFdlYlZp
ZXc6Om9uR2VzdHVyZShIV05EIGhXbmQsIFVJTlQgbWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBB
UkFNIGxQYXJhbQogCiBMUkVTVUxUIFdlYlZpZXc6Om9uS2V5RXZlbnQoSFdORCBoV25kLCBVSU5U
IG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0sIGJvb2wmIGhhbmRsZWQpCiB7
CisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAgIC8vIFRyYXAgdGhlIEVTQyBrZXkgd2hl
biBpbiBmdWxsIHNjcmVlbiBtb2RlLgorICAgIGlmIChtZXNzYWdlID09IFdNX0tFWURPV04gJiYg
d1BhcmFtID09IFZLX0VTQ0FQRSAmJiBtX2Z1bGxTY3JlZW5Db250cm9sbGVyICYmIG1fZnVsbFNj
cmVlbkNvbnRyb2xsZXItPmlzRnVsbFNjcmVlbigpKSB7CisgICAgICAgIG1fZnVsbFNjcmVlbkNv
bnRyb2xsZXItPmV4aXRGdWxsU2NyZWVuKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisjZW5kaWYKKwogICAgIG1fcGFnZS0+aGFuZGxlS2V5Ym9hcmRFdmVudChOYXRpdmVXZWJLZXli
b2FyZEV2ZW50KGhXbmQsIG1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKSk7CiAKICAgICAvLyBXZSBj
bGFpbSBoZXJlIHRvIGFsd2F5cyBoYXZlIGhhbmRsZWQgdGhlIGV2ZW50LiBJZiB0aGUgZXZlbnQg
aXMgbm90IGluIGZhY3QgaGFuZGxlZCwgd2Ugd2lsbApAQCAtMTY1MCw0ICsxNjY3LDQ4IEBAIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmlldzo6RHJvcChJRGF0YU9iamVjdCogcERhdGFP
YmplY3QsIERXT1JEIGdyZktleVN0CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKKyNpZiBFTkFCTEUo
RlVMTFNDUkVFTl9BUEkpCitGdWxsU2NyZWVuQ29udHJvbGxlciogV2ViVmlldzo6ZnVsbFNjcmVl
bkNvbnRyb2xsZXIoKQoreworICAgIGlmICghbV9mdWxsU2NyZWVuQ29udHJvbGxlcikKKyAgICAg
ICAgbV9mdWxsU2NyZWVuQ29udHJvbGxlciA9IGFkb3B0UHRyKG5ldyBGdWxsU2NyZWVuQ29udHJv
bGxlcih0aGlzKSk7CisgICAgcmV0dXJuIG1fZnVsbFNjcmVlbkNvbnRyb2xsZXIuZ2V0KCk7Cit9
CisKK0hXTkQgV2ViVmlldzo6ZnVsbFNjcmVlbkNsaWVudFdpbmRvdygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fd2luZG93OworfQorCitIV05EIFdlYlZpZXc6OmZ1bGxTY3JlZW5DbGllbnRQYXJl
bnRXaW5kb3coKSBjb25zdAoreworICAgIHJldHVybiA6OkdldFBhcmVudChtX3dpbmRvdyk7Cit9
CisKK3ZvaWQgV2ViVmlldzo6c2V0RnVsbFNjcmVlbkNsaWVudFBhcmVudFdpbmRvdyhIV05EIGhv
c3RXaW5kb3cpCit7CisgICAgc2V0UGFyZW50V2luZG93KGhvc3RXaW5kb3cpOworfQorCit2b2lk
IFdlYlZpZXc6OmZ1bGxTY3JlZW5DbGllbnRXaWxsRW50ZXJGdWxsU2NyZWVuKCkKK3sKKyAgICBw
YWdlKCktPmZ1bGxTY3JlZW5NYW5hZ2VyKCktPndpbGxFbnRlckZ1bGxTY3JlZW4oKTsKK30KKwor
dm9pZCBXZWJWaWV3OjpmdWxsU2NyZWVuQ2xpZW50RGlkRW50ZXJGdWxsU2NyZWVuKCkKK3sKKyAg
ICBwYWdlKCktPmZ1bGxTY3JlZW5NYW5hZ2VyKCktPmRpZEVudGVyRnVsbFNjcmVlbigpOworfQor
Cit2b2lkIFdlYlZpZXc6OmZ1bGxTY3JlZW5DbGllbnRXaWxsRXhpdEZ1bGxTY3JlZW4oKQorewor
ICAgIHBhZ2UoKS0+ZnVsbFNjcmVlbk1hbmFnZXIoKS0+d2lsbEV4aXRGdWxsU2NyZWVuKCk7Cit9
CisKK3ZvaWQgV2ViVmlldzo6ZnVsbFNjcmVlbkNsaWVudERpZEV4aXRGdWxsU2NyZWVuKCkKK3sK
KyAgICBwYWdlKCktPmZ1bGxTY3JlZW5NYW5hZ2VyKCktPmRpZEV4aXRGdWxsU2NyZWVuKCk7Cit9
CisKKyNlbmRpZgogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93
aW4vV2ViVmlldy5oCmluZGV4IGQ2MjMxMWMuLmQ1MzI5OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy93aW4vV2ViVmlldy5oCkBAIC00MCwxMyArNDAsMjkgQEAKICNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAorI2lmIEVOQUJMRShGVUxMU0NS
RUVOX0FQSSkKKyNpbmNsdWRlIDxXZWJDb3JlL0Z1bGxTY3JlZW5Db250cm9sbGVyQ2xpZW50Lmg+
CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzIEZ1bGxTY3JlZW5Db250
cm9sbGVyOworfQorCiBpbnRlcmZhY2UgSURyb3BUYXJnZXRIZWxwZXI7CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCiBjbGFzcyBEcmF3aW5nQXJlYVByb3h5OwogCi1jbGFzcyBXZWJWaWV3IDogcHVi
bGljIEFQSU9iamVjdCwgcHVibGljIFBhZ2VDbGllbnQsIFdlYkNvcmU6OldpbmRvd01lc3NhZ2VM
aXN0ZW5lciwgcHVibGljIElEcm9wVGFyZ2V0IHsKK2NsYXNzIFdlYlZpZXcKKyAgICA6IHB1Ymxp
YyBBUElPYmplY3QKKyAgICAsIHB1YmxpYyBQYWdlQ2xpZW50CisgICAgLCBXZWJDb3JlOjpXaW5k
b3dNZXNzYWdlTGlzdGVuZXIKKyAgICAsIHB1YmxpYyBJRHJvcFRhcmdldCAKKyNpZiBFTkFCTEUo
RlVMTFNDUkVFTl9BUEkpCisgICAgLCBXZWJDb3JlOjpGdWxsU2NyZWVuQ29udHJvbGxlckNsaWVu
dAorI2VuZGlmCit7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViVmlldz4gY3Jl
YXRlKFJFQ1QgcmVjdCwgV2ViQ29udGV4dCogY29udGV4dCwgV2ViUGFnZUdyb3VwKiBwYWdlR3Jv
dXAsIEhXTkQgcGFyZW50V2luZG93KQogICAgIHsKQEAgLTg1LDYgKzEwMSwxMCBAQCBwdWJsaWM6
CiAKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UoKSBjb25zdCB7IHJldHVybiBtX3BhZ2UuZ2V0KCk7
IH0KIAorI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBXZWJDb3JlOjpGdWxsU2NyZWVu
Q29udHJvbGxlciogZnVsbFNjcmVlbkNvbnRyb2xsZXIoKTsKKyNlbmRpZgorCiBwcml2YXRlOgog
ICAgIFdlYlZpZXcoUkVDVCwgV2ViQ29udGV4dCosIFdlYlBhZ2VHcm91cCosIEhXTkQgcGFyZW50
V2luZG93KTsKIApAQCAtMTk1LDYgKzIxNSwxNiBAQCBwcml2YXRlOgogICAgIC8vIFdlYkNvcmU6
OldpbmRvd01lc3NhZ2VMaXN0ZW5lcgogICAgIHZpcnR1YWwgdm9pZCB3aW5kb3dSZWNlaXZlZE1l
c3NhZ2UoSFdORCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0sIExQQVJBTSk7CiAKKyNpZiBFTkFCTEUo
RlVMTFNDUkVFTl9BUEkpCisgICAgdmlydHVhbCBIV05EIGZ1bGxTY3JlZW5DbGllbnRXaW5kb3co
KSBjb25zdDsKKyAgICB2aXJ0dWFsIEhXTkQgZnVsbFNjcmVlbkNsaWVudFBhcmVudFdpbmRvdygp
IGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRGdWxsU2NyZWVuQ2xpZW50UGFyZW50V2luZG93
KEhXTkQpOworICAgIHZpcnR1YWwgdm9pZCBmdWxsU2NyZWVuQ2xpZW50V2lsbEVudGVyRnVsbFNj
cmVlbigpOworICAgIHZpcnR1YWwgdm9pZCBmdWxsU2NyZWVuQ2xpZW50RGlkRW50ZXJGdWxsU2Ny
ZWVuKCk7CisgICAgdmlydHVhbCB2b2lkIGZ1bGxTY3JlZW5DbGllbnRXaWxsRXhpdEZ1bGxTY3Jl
ZW4oKTsKKyAgICB2aXJ0dWFsIHZvaWQgZnVsbFNjcmVlbkNsaWVudERpZEV4aXRGdWxsU2NyZWVu
KCk7CisjZW5kaWYKKwogICAgIEhXTkQgbV93aW5kb3c7CiAgICAgSFdORCBtX3RvcExldmVsUGFy
ZW50V2luZG93OwogICAgIEhXTkQgbV90b29sVGlwV2luZG93OwpAQCAtMjM0LDYgKzI2NCwxMCBA
QCBwcml2YXRlOgogICAgIGludCBtX292ZXJQYW5ZOwogCiAgICAgYm9vbCBtX2dlc3R1cmVSZWFj
aGVkU2Nyb2xsaW5nTGltaXQ7CisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgT3du
UHRyPFdlYkNvcmU6OkZ1bGxTY3JlZW5Db250cm9sbGVyPiBtX2Z1bGxTY3JlZW5Db250cm9sbGVy
OworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvRnVsbFNjcmVlbi93aW4vV2ViRnVsbFNjcmVlbk1hbmFnZXJX
aW4uY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9GdWxsU2NyZWVuL3dpbi9XZWJGdWxs
U2NyZWVuTWFuYWdlcldpbi5jcHAKaW5kZXggYWM4ZDMyNi4uZjk5NWIxOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9GdWxsU2NyZWVuL3dpbi9XZWJGdWxsU2NyZWVuTWFu
YWdlcldpbi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9GdWxsU2NyZWVuL3dp
bi9XZWJGdWxsU2NyZWVuTWFuYWdlcldpbi5jcHAKQEAgLTMyLDYgKzMyLDEwIEBACiAjaW5jbHVk
ZSAiV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUGFn
ZS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBo
aWNzTGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KICNpbmNsdWRlIDxXZWJLaXRT
eXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CiAKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwpAQCAtNTUsMjEgKzU5LDUzIEBAIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyV2luOjpX
ZWJGdWxsU2NyZWVuTWFuYWdlcldpbihXZWJQYWdlKiBwYWdlKQogCiBXZWJGdWxsU2NyZWVuTWFu
YWdlcldpbjo6fldlYkZ1bGxTY3JlZW5NYW5hZ2VyV2luKCkKIHsKKyAgICBtX3BhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHk6OkV4aXRBY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kZSgpKTsKIH0KIAotdm9pZCBXZWJGdWxsU2NyZWVuTWFuYWdlcldpbjo6c2V0Um9v
dEZ1bGxTY3JlZW5MYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKikKK3ZvaWQgV2ViRnVsbFNj
cmVlbk1hbmFnZXJXaW46OnNldFJvb3RGdWxsU2NyZWVuTGF5ZXIoV2ViQ29yZTo6R3JhcGhpY3NM
YXllciogbGF5ZXIpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudAorICAgIC8vIEhvc3QgdGhl
IGZ1bGwgc2NyZWVuIGxheWVyIGlmIGl0cyBnaXZlbiB0byB1czsgb3RoZXJ3aXNlIGl0IHdpbGwg
YmUgZGlzY29ubmVjdGVkIAorICAgIC8vIGZyb20gdGhlIGxheWVyIGhlaXJhcmNoeSBhbmQgY2F1
c2UgYW4gQVNTRVJUIGR1cmluZyByZXN5bmMuCisgICAgLy8gRklYTUU6IERpc2FibGUgc2V0dGlu
ZyBSZW5kZXJMYXllcjo6c2V0QW5pbWF0aW5nKCkgdG8gbWFrZSB0aGlzIHVubmVjZXNzYXJ5LnMK
KyAgICBpZiAobV9mdWxsU2NyZWVuUm9vdExheWVyID09IGxheWVyKQorICAgICAgICByZXR1cm47
CisgICAgbV9mdWxsU2NyZWVuUm9vdExheWVyID0gbGF5ZXI7CisKKyAgICBpZiAoIW1fZnVsbFNj
cmVlblJvb3RMYXllcikgeworICAgICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYkZ1bGxT
Y3JlZW5NYW5hZ2VyUHJveHk6OkV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpKTsKKyAg
ICAgICAgaWYgKG1fcm9vdExheWVyKSB7CisgICAgICAgICAgICBtX3Jvb3RMYXllci0+cmVtb3Zl
QWxsQ2hpbGRyZW4oKTsKKyAgICAgICAgICAgIG1fcm9vdExheWVyID0gMDsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX3Jvb3RMYXllcikgeworICAgICAg
ICBtX3Jvb3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSgwKTsKKyNpZm5kZWYgTkRFQlVH
CisgICAgICAgIG1fcm9vdExheWVyLT5zZXROYW1lKCJGdWxsIHNjcmVlbiByb290IGxheWVyIik7
CisjZW5kaWYKKyAgICAgICAgbV9yb290TGF5ZXItPnNldERyYXdzQ29udGVudChmYWxzZSk7Cisg
ICAgICAgIG1fcm9vdExheWVyLT5zZXRTaXplKGdldEZ1bGxTY3JlZW5SZWN0KCkuc2l6ZSgpKTsK
KyAgICB9CisKKyAgICBtX3Jvb3RMYXllci0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKKworICAgIGlm
IChtX2Z1bGxTY3JlZW5Sb290TGF5ZXIpCisgICAgICAgIG1fcm9vdExheWVyLT5hZGRDaGlsZCht
X2Z1bGxTY3JlZW5Sb290TGF5ZXIpOworCisgICAgbV9yb290TGF5ZXItPnN5bmNDb21wb3NpdGlu
Z1N0YXRlRm9yVGhpc0xheWVyT25seSgpOworICAgIG1fcGFnZS0+Y29yZVBhZ2UoKS0+bWFpbkZy
YW1lKCktPnZpZXcoKS0+c3luY0NvbXBvc2l0aW5nU3RhdGVJbmNsdWRpbmdTdWJmcmFtZXMoKTsK
IH0KIAogdm9pZCBXZWJGdWxsU2NyZWVuTWFuYWdlcldpbjo6YmVnaW5FbnRlckZ1bGxTY3JlZW5B
bmltYXRpb24oZmxvYXQpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudAorICAgIC8vIEZJWE1F
OiBBZGQgc3VwcG9ydCBmb3IgYW5pbWF0aW5nIHRoZSBjb250ZW50IGludG8gZnVsbCBzY3JlZW4u
CiB9CiAKIHZvaWQgV2ViRnVsbFNjcmVlbk1hbmFnZXJXaW46OmJlZ2luRXhpdEZ1bGxTY3JlZW5B
bmltYXRpb24oZmxvYXQpCiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudAorICAgIC8vIEZJWE1F
OiBBZGQgc3VwcG9ydCBmb3IgYW5pbWF0aW5nIHRoZSBjb250ZW50IGludG8gZnVsbCBzY3JlZW4u
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9GdWxsU2NyZWVuL3dpbi9XZWJGdWxsU2NyZWVuTWFuYWdlcldpbi5oIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9GdWxsU2NyZWVuL3dpbi9XZWJGdWxsU2NyZWVuTWFuYWdl
cldpbi5oCmluZGV4IGQ5YWY0ZDkuLjIyZjc0ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvRnVsbFNjcmVlbi93aW4vV2ViRnVsbFNjcmVlbk1hbmFnZXJXaW4uaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Z1bGxTY3JlZW4vd2luL1dlYkZ1bGxTY3JlZW5N
YW5hZ2VyV2luLmgKQEAgLTQ1LDYgKzQ1LDkgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQg
c2V0Um9vdEZ1bGxTY3JlZW5MYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVyKik7CiAgICAgdmly
dHVhbCB2b2lkIGJlZ2luRW50ZXJGdWxsU2NyZWVuQW5pbWF0aW9uKGZsb2F0IGR1cmF0aW9uKTsK
ICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5FeGl0RnVsbFNjcmVlbkFuaW1hdGlvbihmbG9hdCBkdXJh
dGlvbik7CisKKyAgICBPd25QdHI8V2ViQ29yZTo6R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7
CisgICAgV2ViQ29yZTo6R3JhcGhpY3NMYXllciogbV9mdWxsU2NyZWVuUm9vdExheWVyOwogfTsK
IAogfQotLSAKMS43LjQKCg==
</data>
<flag name="review"
          id="84973"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
      

    </bug>

</bugzilla>