<?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>220359</bug_id>
          
          <creation_ts>2021-01-06 05:07:22 -0800</creation_ts>
          <short_desc>[PlayStation] Add MiniBrowser</short_desc>
          <delta_ts>2021-05-26 22:52:48 -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>Platform</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>208848</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yoshiaki Jitsukawa">yoshiaki.jitsukawa</reporter>
          <assigned_to name="Yoshiaki Jitsukawa">yoshiaki.jitsukawa</assigned_to>
          <cc>annulen</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1717623</commentid>
    <comment_count>0</comment_count>
    <who name="Yoshiaki Jitsukawa">yoshiaki.jitsukawa</who>
    <bug_when>2021-01-06 05:07:22 -0800</bug_when>
    <thetext>Add PlayStation MiniBrowser which works with current platform implementation. Some of platform implementation such as media and accelerated compositing have yet to land so the initial MiniBrowser won&apos;t support such features.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717788</commentid>
    <comment_count>1</comment_count>
      <attachid>417133</attachid>
    <who name="Yoshiaki Jitsukawa">yoshiaki.jitsukawa</who>
    <bug_when>2021-01-06 15:15:34 -0800</bug_when>
    <thetext>Created attachment 417133
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717817</commentid>
    <comment_count>2</comment_count>
      <attachid>417133</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-01-06 17:37:48 -0800</bug_when>
    <thetext>Comment on attachment 417133
Patch

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

&gt; Source/WebKit/UIProcess/API/C/playstation/WKView.h:38
&gt; +WK_EXPORT void WKViewSetViewPageLoadStateClient(WKViewRef, const WKViewPageLoadStateClientBase*);

Why don&apos;t you use existing WKPageSetPageStateClient API?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717826</commentid>
    <comment_count>3</comment_count>
      <attachid>417133</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-01-06 18:23:30 -0800</bug_when>
    <thetext>Comment on attachment 417133
Patch

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

&gt; Tools/MiniBrowser/playstation/CMakeLists.txt:19
&gt; +    ${MINIBROWSER_DIR}/ImageButton.cpp

You can remove &quot;${MINIBROWSER_DIR}/&quot;.
${MINIBROWSER_DIR}/ImageButton.cpp → ImageButton.cpp

&gt; Tools/MiniBrowser/playstation/CMakeLists.txt:29
&gt; +    ${CAIRO_LIBRARIES}

Use the IMPORT library Cairo::Cairo instead of old-style variable ${CAIRO_LIBRARIES}.
However, I think MiniBrowser shouldn&apos;t link Cairo::Cairo explicitly because WebCore links it.
https://github.com/WebKit/WebKit/blob/main/Source/WebCore/platform/Cairo.cmake#L24
Why do you need it?

&gt; Tools/MiniBrowser/playstation/CMakeLists.txt:47
&gt; +set(PLAYSTATION_MiniBrowser_REQUIRED_SHARED_LIBRARIES

Is PLAYSTATION_MiniBrowser_REQUIRED_SHARED_LIBRARIES used anyware?

&gt; Tools/MiniBrowser/playstation/CMakeLists.txt:58
&gt; +    -D_UNICODE

I don&apos;t think this is needed because this is not Windows code.

&gt; Tools/MiniBrowser/playstation/CMakeLists.txt:74
&gt; +message(&quot;${CMAKE_RUNTIME_OUTPUT_DIRECTORY}&quot;)

Fix this wrong indentation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717827</commentid>
    <comment_count>4</comment_count>
      <attachid>417133</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-01-06 18:32:22 -0800</bug_when>
    <thetext>Comment on attachment 417133
Patch

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

&gt; Source/WebKit/UIProcess/API/C/playstation/WKPagePrivatePlayStation.cpp:44
&gt; +    auto[r, g, b, a] = backgroundColor.value().toSRGBALossy&lt;uint8_t&gt;();

Nit: I think &quot; &quot; is needed after &quot;auto&quot;.
auto [r, g, b, a] = ...

&gt;&gt; Tools/MiniBrowser/playstation/CMakeLists.txt:74
&gt;&gt; +message(&quot;${CMAKE_RUNTIME_OUTPUT_DIRECTORY}&quot;)
&gt; 
&gt; Fix this wrong indentation.

I prefer the style not omitting the mode keyword. For example,
message(NOTICE &quot;...&quot;)
https://cmake.org/cmake/help/latest/command/message.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717828</commentid>
    <comment_count>5</comment_count>
    <who name="Yoshiaki Jitsukawa">yoshiaki.jitsukawa</who>
    <bug_when>2021-01-06 18:36:07 -0800</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #2)
&gt; Comment on attachment 417133 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=417133&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/C/playstation/WKView.h:38
&gt; &gt; +WK_EXPORT void WKViewSetViewPageLoadStateClient(WKViewRef, const WKViewPageLoadStateClientBase*);
&gt; 
&gt; Why don&apos;t you use existing WKPageSetPageStateClient API?

Thanks! I wasn&apos;t aware of that. I&apos;ll try it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717834</commentid>
    <comment_count>6</comment_count>
      <attachid>417146</attachid>
    <who name="Yoshiaki Jitsukawa">yoshiaki.jitsukawa</who>
    <bug_when>2021-01-06 19:58:51 -0800</bug_when>
    <thetext>Created attachment 417146
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717836</commentid>
    <comment_count>7</comment_count>
      <attachid>417148</attachid>
    <who name="Yoshiaki Jitsukawa">yoshiaki.jitsukawa</who>
    <bug_when>2021-01-06 20:01:58 -0800</bug_when>
    <thetext>Created attachment 417148
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717838</commentid>
    <comment_count>8</comment_count>
    <who name="Yoshiaki Jitsukawa">yoshiaki.jitsukawa</who>
    <bug_when>2021-01-06 20:06:09 -0800</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #3)
&gt; Comment on attachment 417133 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=417133&amp;action=review
&gt; 
&gt; &gt; Tools/MiniBrowser/playstation/CMakeLists.txt:19
&gt; &gt; +    ${MINIBROWSER_DIR}/ImageButton.cpp
&gt; 
&gt; You can remove &quot;${MINIBROWSER_DIR}/&quot;.
&gt; ${MINIBROWSER_DIR}/ImageButton.cpp → ImageButton.cpp

Removed MINIBROWSER_DIR

&gt; &gt; Tools/MiniBrowser/playstation/CMakeLists.txt:29
&gt; &gt; +    ${CAIRO_LIBRARIES}
&gt; 
&gt; Use the IMPORT library Cairo::Cairo instead of old-style variable
&gt; ${CAIRO_LIBRARIES}.
&gt; However, I think MiniBrowser shouldn&apos;t link Cairo::Cairo explicitly because
&gt; WebCore links it.
&gt; https://github.com/WebKit/WebKit/blob/main/Source/WebCore/platform/Cairo.
&gt; cmake#L24
&gt; Why do you need it?

Nope, we no longer need them. Removed.
 
&gt; &gt; Tools/MiniBrowser/playstation/CMakeLists.txt:47
&gt; &gt; +set(PLAYSTATION_MiniBrowser_REQUIRED_SHARED_LIBRARIES
&gt; 
&gt; Is PLAYSTATION_MiniBrowser_REQUIRED_SHARED_LIBRARIES used anyware?
&gt; 
&gt; &gt; Tools/MiniBrowser/playstation/CMakeLists.txt:58
&gt; &gt; +    -D_UNICODE
&gt; 
&gt; I don&apos;t think this is needed because this is not Windows code.

Successfully removed.
 
&gt; &gt; Tools/MiniBrowser/playstation/CMakeLists.txt:74
&gt; &gt; +message(&quot;${CMAKE_RUNTIME_OUTPUT_DIRECTORY}&quot;)
&gt; 
&gt; Fix this wrong indentation.

This message itself removed.

(In reply to Fujii Hironori from comment #4)
&gt; Comment on attachment 417133 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=417133&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/C/playstation/WKPagePrivatePlayStation.cpp:44
&gt; &gt; +    auto[r, g, b, a] = backgroundColor.value().toSRGBALossy&lt;uint8_t&gt;();
&gt; 
&gt; Nit: I think &quot; &quot; is needed after &quot;auto&quot;.
&gt; auto [r, g, b, a] = ...

One space inserted after the &quot;auto&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717839</commentid>
    <comment_count>9</comment_count>
    <who name="Yoshiaki Jitsukawa">yoshiaki.jitsukawa</who>
    <bug_when>2021-01-06 20:11:28 -0800</bug_when>
    <thetext>&gt; Is PLAYSTATION_MiniBrowser_REQUIRED_SHARED_LIBRARIES used anyware?

It&apos;s just a target name given to PLAYSTATION_COPY_SHARED_LIBRARIES.
https://github.com/WebKit/WebKit/blob/b7e84a4224b3934868bc08f5c89b583355a6c87a/Source/cmake/OptionsPlayStation.cmake#L244</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718164</commentid>
    <comment_count>10</comment_count>
      <attachid>417230</attachid>
    <who name="Yoshiaki Jitsukawa">yoshiaki.jitsukawa</who>
    <bug_when>2021-01-07 17:17:16 -0800</bug_when>
    <thetext>Created attachment 417230
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718165</commentid>
    <comment_count>11</comment_count>
    <who name="Yoshiaki Jitsukawa">yoshiaki.jitsukawa</who>
    <bug_when>2021-01-07 17:19:56 -0800</bug_when>
    <thetext>setSignatureAlgorithmsList(CertificateStore::signatureAlgorithms()) call in CurlSSLHandlePlayStation.cpp has been removed from the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718306</commentid>
    <comment_count>12</comment_count>
      <attachid>417230</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2021-01-08 08:41:05 -0800</bug_when>
    <thetext>Comment on attachment 417230
Patch

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

r=me with nits.

Thanks for getting this together! Just double check whether you can use final in some classes.

&gt; Source/WebKit/UIProcess/API/C/playstation/WKView.cpp:149
&gt; +    class ViewClient final : public API::Client&lt;WKViewClientBase&gt;, public API::ViewClient {

This is an interesting way to use scoping.

I can&apos;t say I&apos;ve seen any WebKit code use this pattern so I&apos;m thinking you should just move it to the top of the file.

&gt; Source/WebKit/UIProcess/playstation/PageClientImpl.h:123
&gt; +
&gt; +    void closeFullScreenManager() final;
&gt; +    bool isFullScreen() final;
&gt; +    void enterFullScreen() final;
&gt; +    void exitFullScreen() final;
&gt; +    void beganEnterFullScreen(const WebCore::IntRect&amp; initialFrame, const WebCore::IntRect&amp; finalFrame) final;
&gt; +    void beganExitFullScreen(const WebCore::IntRect&amp; initialFrame, const WebCore::IntRect&amp; finalFrame) final;

Lots of final here. Should the class also be marked?

&gt; Tools/MiniBrowser/playstation/CMakeLists.txt:9
&gt; +    &quot;${WEBKIT_LIBRARIES_DIR}/include&quot;
&gt; +    &quot;${FORWARDING_HEADERS_DIR}&quot;

Remove these two

&gt; Tools/MiniBrowser/playstation/CMakeLists.txt:12
&gt; +    ${WebCore_PRIVATE_FRAMEWORK_HEADERS_DIR}
&gt; +    &quot;${CMAKE_SOURCE_DIR}/Source&quot;

Remove these two

&gt; Tools/MiniBrowser/playstation/CMakeLists.txt:32
&gt; +    WebKit

Should use WebKit::WebKit which gets you the dependencies on the *Process bits.

&gt; Tools/MiniBrowser/playstation/TitleBar.h:30
&gt; +class TitleBar : public toolkitten::Widget {

final?

&gt; Tools/MiniBrowser/playstation/URLBar.h:31
&gt; +class URLBar : public toolkitten::TextBox {

final?

&gt; Tools/MiniBrowser/playstation/WebContext.cpp:72
&gt; +    WKRetainPtr&lt;WKContextConfigurationRef&gt; contextConfiguration = adoptWK(WKContextConfigurationCreate());
&gt; +    WKRetainPtr&lt;WKStringRef&gt; webProcessPath = adoptWK(WKStringCreateWithUTF8CString(MAKE_PROCESS_PATH(WebProcess)));
&gt; +    WKRetainPtr&lt;WKStringRef&gt; networkProcessPath = adoptWK(WKStringCreateWithUTF8CString(MAKE_PROCESS_PATH(NetworkProcess)));
&gt; +    WKRetainPtr&lt;WKStringRef&gt; localStoragePath = adoptWK(WKStringCreateWithUTF8CString(&quot;/data/minibrowser/local&quot;));
&gt; +    WKRetainPtr&lt;WKStringRef&gt; mediaKeyPath = adoptWK(WKStringCreateWithUTF8CString(&quot;/data/minibrowser/meidakey&quot;));
&gt; +    WKRetainPtr&lt;WKStringRef&gt; resourceLoadStatisticsPath = adoptWK(WKStringCreateWithUTF8CString(&quot;/data/minibrowser/ResourceLoadStatistics&quot;));
&gt; +    WKRetainPtr&lt;WKStringRef&gt; networkCachePath = adoptWK(WKStringCreateWithUTF8CString(&quot;/data/minibrowser/NetworkCache&quot;));
&gt; +
&gt; +    WKContextConfigurationSetUserId(contextConfiguration.get(), -1);
&gt; +    WKContextConfigurationSetWebProcessPath(contextConfiguration.get(), webProcessPath.get());
&gt; +    WKContextConfigurationSetNetworkProcessPath(contextConfiguration.get(), networkProcessPath.get());
&gt; +
&gt; +    auto dataStoreConfiguration = adoptWK(WKWebsiteDataStoreConfigurationCreate());
&gt; +    WKWebsiteDataStoreConfigurationSetLocalStorageDirectory(dataStoreConfiguration.get(), localStoragePath.get());
&gt; +    WKWebsiteDataStoreConfigurationSetMediaKeysStorageDirectory(dataStoreConfiguration.get(), mediaKeyPath.get());
&gt; +    WKWebsiteDataStoreConfigurationSetResourceLoadStatisticsDirectory(dataStoreConfiguration.get(), resourceLoadStatisticsPath.get());
&gt; +    WKWebsiteDataStoreConfigurationSetNetworkCacheDirectory(dataStoreConfiguration.get(), networkCachePath.get());
&gt; +    WKWebsiteDataStoreConfigurationSetNetworkCacheSpeculativeValidationEnabled(dataStoreConfiguration.get(), true);
&gt; +    WKWebsiteDataStoreConfigurationSetStaleWhileRevalidateEnabled(dataStoreConfiguration.get(), true);
&gt; +    m_websiteDataStore = WKWebsiteDataStoreCreateWithConfiguration(dataStoreConfiguration.get());

Please look in https://github.com/WebKit/WebKit/blob/main/Source/WebKit/UIProcess/API/C/WKWebsiteDataStoreConfigurationRef.h and make sure you&apos;re setting everything.

For example I don&apos;t see WKWebsiteDataStoreConfigurationCopyServiceWorkerRegistrationDirectory set. None of the functions are guarded with anything so just set them even if we don&apos;t use them currently.

&gt; Tools/MiniBrowser/playstation/WebViewWindow.h:34
&gt; +class WebViewWindow : public toolkitten::Widget {

final?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718343</commentid>
    <comment_count>13</comment_count>
      <attachid>417230</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2021-01-08 10:52:06 -0800</bug_when>
    <thetext>Comment on attachment 417230
Patch

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

Just a few extra nitpicks from me.

&gt; Source/WebKit/UIProcess/API/C/playstation/WKView.cpp:70
&gt; +void WKViewSetFocus(WKViewRef view, bool focused)

Seems like you could have a &quot;setFlag&quot; helper for these three almost-identical functions?

&gt; Tools/MiniBrowser/playstation/MainWindow.cpp:39
&gt; +const int LineHeight = 40;
&gt; +const int FontSize = 32;

Could use constexpr for these and the constants calculated off of them, if you wanted.

&gt; Tools/MiniBrowser/playstation/MainWindow.cpp:238
&gt; +    auto title = std::to_string(m_activeWebViewIndex + 1) + &quot;/&quot; + std::to_string(numWebViews) + &quot; &quot; + activeWebView()-&gt;title();

Might be better to use a stringstream for this?

&gt; Tools/MiniBrowser/playstation/WebViewWindow.h:89
&gt; +    std::unique_ptr&lt;unsigned char[]&gt; m_surface;

I think we&apos;d typically write this with a * instead of [].</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718624</commentid>
    <comment_count>14</comment_count>
      <attachid>417362</attachid>
    <who name="Yoshiaki Jitsukawa">yoshiaki.jitsukawa</who>
    <bug_when>2021-01-11 00:13:04 -0800</bug_when>
    <thetext>Created attachment 417362
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718628</commentid>
    <comment_count>15</comment_count>
    <who name="Yoshiaki Jitsukawa">yoshiaki.jitsukawa</who>
    <bug_when>2021-01-11 00:28:58 -0800</bug_when>
    <thetext>Thank you for the reviews!

(In reply to Don Olmstead from comment #12)
&gt; Thanks for getting this together! Just double check whether you can use
&gt; final in some classes.

Marked these classes as &quot;final&quot; and changed the &quot;final&quot;s of the member functions to &quot;override&quot;s.

&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/C/playstation/WKView.cpp:149
&gt; &gt; +    class ViewClient final : public API::Client&lt;WKViewClientBase&gt;, public API::ViewClient {
&gt; 
&gt; This is an interesting way to use scoping.
&gt; 
&gt; I can&apos;t say I&apos;ve seen any WebKit code use this pattern so I&apos;m thinking you
&gt; should just move it to the top of the file.

I followed how WPE is doing here:
https://github.com/WebKit/WebKit/blob/b7e84a4224b3934868bc08f5c89b583355a6c87a/Source/WebKit/UIProcess/API/C/wpe/WKView.cpp#L55
 
&gt; &gt; Tools/MiniBrowser/playstation/CMakeLists.txt:9
&gt; &gt; +    &quot;${WEBKIT_LIBRARIES_DIR}/include&quot;
&gt; &gt; +    &quot;${FORWARDING_HEADERS_DIR}&quot;
&gt; 
&gt; Remove these two

Removed.
 
&gt; &gt; Tools/MiniBrowser/playstation/CMakeLists.txt:12
&gt; &gt; +    ${WebCore_PRIVATE_FRAMEWORK_HEADERS_DIR}
&gt; &gt; +    &quot;${CMAKE_SOURCE_DIR}/Source&quot;
&gt; 
&gt; Remove these two

Removed.
 
&gt; &gt; Tools/MiniBrowser/playstation/CMakeLists.txt:32
&gt; &gt; +    WebKit
&gt; 
&gt; Should use WebKit::WebKit which gets you the dependencies on the *Process
&gt; bits.

Changed to use WebKit::WebKit.
 
&gt; Please look in
&gt; https://github.com/WebKit/WebKit/blob/main/Source/WebKit/UIProcess/API/C/
&gt; WKWebsiteDataStoreConfigurationRef.h and make sure you&apos;re setting everything.
&gt; 
&gt; For example I don&apos;t see
&gt; WKWebsiteDataStoreConfigurationCopyServiceWorkerRegistrationDirectory set.
&gt; None of the functions are guarded with anything so just set them even if we
&gt; don&apos;t use them currently.

Set every directory configurations of WebsiteDataStore.

(In reply to Ross Kirsling from comment #13)
&gt; &gt; Source/WebKit/UIProcess/API/C/playstation/WKView.cpp:70
&gt; &gt; +void WKViewSetFocus(WKViewRef view, bool focused)
&gt; 
&gt; Seems like you could have a &quot;setFlag&quot; helper for these three
&gt; almost-identical functions?

A helper function introduced.
 
&gt; &gt; Tools/MiniBrowser/playstation/MainWindow.cpp:39
&gt; &gt; +const int LineHeight = 40;
&gt; &gt; +const int FontSize = 32;
&gt; 
&gt; Could use constexpr for these and the constants calculated off of them, if
&gt; you wanted.

Changed to use constexpr.
 
&gt; &gt; Tools/MiniBrowser/playstation/MainWindow.cpp:238
&gt; &gt; +    auto title = std::to_string(m_activeWebViewIndex + 1) + &quot;/&quot; + std::to_string(numWebViews) + &quot; &quot; + activeWebView()-&gt;title();
&gt; 
&gt; Might be better to use a stringstream for this?

Addressed.
 
&gt; &gt; Tools/MiniBrowser/playstation/WebViewWindow.h:89
&gt; &gt; +    std::unique_ptr&lt;unsigned char[]&gt; m_surface;
&gt; 
&gt; I think we&apos;d typically write this with a * instead of [].

This is to hold a unique ptr to an unsigned char array, which is made by
  m_surface = std::make_unique&lt;unsigned char[]&gt;(surfaceSize);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718680</commentid>
    <comment_count>16</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-01-11 07:11:43 -0800</bug_when>
    <thetext>Committed r271360: &lt;https://trac.webkit.org/changeset/271360&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 417362.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718681</commentid>
    <comment_count>17</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-01-11 07:12:15 -0800</bug_when>
    <thetext>&lt;rdar://problem/72996783&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764223</commentid>
    <comment_count>18</comment_count>
    <who name="Yoshiaki Jitsukawa">yoshiaki.jitsukawa</who>
    <bug_when>2021-05-26 22:52:48 -0700</bug_when>
    <thetext>*** Bug 208848 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417133</attachid>
            <date>2021-01-06 15:15:34 -0800</date>
            <delta_ts>2021-01-06 19:58:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220359-20210107081532.patch</filename>
            <type>text/plain</type>
            <size>129701</size>
            <attacher name="Yoshiaki Jitsukawa">yoshiaki.jitsukawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcwMTgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWZmZDE5MWQzZWNhYTQy
ZjE2Njk5MDZlYWU2YWJkM2ZkZDgwYWQ0Ni4uMTEzYWU5MzFkODlhMGIzOWU5YzJkNWU1MjEwNDQ0
OWRlOWM0YjZkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDIxLTAxLTA2ICBZb3No
aWFraSBKaXRzdWthd2EgIDx5b3NoaWFraS5qaXRzdWthd2FAc29ueS5jb20+CisKKyAgICAgICAg
W1BsYXlTdGF0aW9uXSBBZGQgTWluaUJyb3dzZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDM1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCBXaWRnZXRQbGF5U3RhdGlvbiB0byBzdXBwb3J0IGN1
c3RvbSBjdXJzb3IuCisKKyAgICAgICAgTG9hZCBDQSBjZXJ0cyBpbiBDdXJsU1NMSGFuZGxlOjpw
bGF0Zm9ybUluaXRpYWxpemUoKS4KKworICAgICAgICAqIFBsYXRmb3JtUGxheVN0YXRpb24uY21h
a2U6IEFkZCBXaWRnZXRQbGF5U3RhdGlvbi5jcHAKKyAgICAgICAgKiBwbGF0Zm9ybS9XaWRnZXQu
Y3BwOiBBbGxvdyBQbGF5U3RhdGlvbiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL3BsYXlzdGF0aW9uL0N1cmxTU0xIYW5kbGVQbGF5U3RhdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDdXJsU1NMSGFuZGxlOjpwbGF0Zm9ybUluaXRpYWxpemUp
OiBMb2FkIENBIGNlcnRzLgorICAgICAgICAqIHBsYXRmb3JtL3BsYXlzdGF0aW9uL1dpZGdldFBs
YXlTdGF0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6On5XaWRnZXQp
OgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpzZXRGcmFtZVJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6V2lkZ2V0OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnNldEZvY3Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6c2V0Q3Vyc29yKTogQ2FsbCBob3N0V2luZG93
KCkncyBzZXRDdXJzb3IoKS4KKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6c2hvdyk6CisgICAg
ICAgIChXZWJDb3JlOjpXaWRnZXQ6OmhpZGUpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0Ojpz
ZXRJc1NlbGVjdGVkKToKKwogMjAyMC0xMS0yNiAgTGF1cm8gTW91cmEgIDxsbW91cmFAaWdhbGlh
LmNvbT4KIAogICAgICAgICBbR1RLNF0gQnVpbGQgZml4LiBBZGQgY2FzdCB3aGVuIHRha2luZyBj
b25zdCBkYXRhIG93bmVyc2hpcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBkNTE0M2NjN2U1MGY4MTc3MDNjYTZhY2Zk
OGYwM2YyMDU5MzY2YmM4Li4xNjg0OTM2MmYxYmQzZjcxZmMyYmJkOGU3ZDRjMzJlZWYyNTMxY2E4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDIxLTAxLTA2ICBZb3NoaWFraSBKaXRzdWth
d2EgIDx5b3NoaWFraS5qaXRzdWthd2FAc29ueS5jb20+CisKKyAgICAgICAgW1BsYXlTdGF0aW9u
XSBBZGQgTWluaUJyb3dzZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIyMDM1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZCBXS1J1bmxvb3AgQVBJIHRvIGFsbG93IGFuIGV4dGVybmFsIHByb2dyYW0g
dG8gcnVuIFdlYktpdCdzIGdlbmVyaWMgcnVubG9vcC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQy9wbGF5c3RhdGlvbi9XS1J1bkxvb3AuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdLUnVuTG9v
cFJ1bk1haW4pOgorICAgICAgICAoV0tSdW5Mb29wU3RvcE1haW4pOgorICAgICAgICAoV0tSdW5M
b29wQ2FsbE9uTWFpblRocmVhZCk6CisgICAgICAgIChXS1J1bkxvb3BJbml0aWFsaXplTWFpbik6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLUnVuTG9vcC5oOiBBZGRl
ZC4KKworICAgICAgICBBZGQgcHJpdmF0ZSBXS1BhZ2VQYWludCgpIHRvIGRyYXcgY29udGVudHMg
dG8gYml0bWFwLgorICAgICAgICBSZW1vdmUgdW51c2VkIFdLUGFnZVNldFNpemUoKSBpbXBsZW1l
bnRhdGlvbi4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1BhZ2VQ
cml2YXRlUGxheVN0YXRpb24uY3BwOgorICAgICAgICAoZHJhd1BhZ2VCYWNrZ3JvdW5kKToKKyAg
ICAgICAgKFdLUGFnZUhhbmRsZU1vdXNlRXZlbnQpOiBGaXggYnV0dG9uIGNsaWNrIGV2ZW50IGhh
bmRsaW5nLgorICAgICAgICAoV0tQYWdlUGFpbnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Qy9wbGF5c3RhdGlvbi9XS1BhZ2VQcml2YXRlUGxheVN0YXRpb24uaDoKKworICAgICAgICBBZGQg
V0tWaWV3IEFQSSB0byBzZXQgY2xpZW50cyBhbG9uZyB3aXRoIGZ1bGxzY3JlZW4gQVBJIGFuZCB2
aXNpYmlsaXR5IHN0YXRlIEFQSS4KKyAgICAgICAgV0tWaWV3Q2xpZW50IGNvcnJlc3BvbmRzIHRv
IFBhZ2VDbGllbnQgY2FsbGJhY2tzLgorICAgICAgICBXS1ZpZXdQYWdlTG9hZFN0YXRlQ2xpZW50
IGNvcnJlc3BvbmRzIHRvIFBhZ2VMb2FkU3RhdGU6Ok9ic2VydmVyIGNhbGxiYWNrcy4KKworICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1ZpZXcuY3BwOgorICAgICAgICAo
V0tWaWV3R2V0UGFnZSk6CisgICAgICAgIChXS1ZpZXdTZXRTaXplKToKKyAgICAgICAgKFdLVmll
d1NldEZvY3VzKToKKyAgICAgICAgKFdLVmlld1NldEFjdGl2ZSk6CisgICAgICAgIChXS1ZpZXdT
ZXRWaXNpYmxlKToKKyAgICAgICAgKFdLVmlld1dpbGxFbnRlckZ1bGxTY3JlZW4pOgorICAgICAg
ICAoV0tWaWV3RGlkRW50ZXJGdWxsU2NyZWVuKToKKyAgICAgICAgKFdLVmlld1dpbGxFeGl0RnVs
bFNjcmVlbik6CisgICAgICAgIChXS1ZpZXdEaWRFeGl0RnVsbFNjcmVlbik6CisgICAgICAgIChX
S1ZpZXdSZXF1ZXN0RXhpdEZ1bGxTY3JlZW4pOgorICAgICAgICAoV0tWaWV3SXNGdWxsU2NyZWVu
KToKKyAgICAgICAgKFdLVmlld1NldFZpZXdDbGllbnQpOgorICAgICAgICAoV0tWaWV3U2V0Vmll
d1BhZ2VMb2FkU3RhdGVDbGllbnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9wbGF5c3Rh
dGlvbi9XS1ZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tW
aWV3Q2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlv
bi9XS1ZpZXdQYWdlTG9hZFN0YXRlQ2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvcGxheXN0YXRpb24vQVBJVmlld0NsaWVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL3BsYXlzdGF0aW9uL0FQSVZpZXdQYWdlTG9hZFN0YXRlQ2xpZW50Lmg6IEFkZGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9wbGF5c3RhdGlvbi9QYWdlQ2xpZW50SW1wbC5jcHA6Cisg
ICAgICAgICogVUlQcm9jZXNzL3BsYXlzdGF0aW9uL1BhZ2VDbGllbnRJbXBsLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL3BsYXlzdGF0aW9uL1BhZ2VMb2FkU3RhdGVPYnNlcnZlci5jcHA6IEFkZGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9wbGF5c3RhdGlvbi9QYWdlTG9hZFN0YXRlT2JzZXJ2ZXIu
aDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL3BsYXlzdGF0aW9uL1BsYXlTdGF0aW9uV2Vi
Vmlldy5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL3BsYXlzdGF0aW9uL1BsYXlTdGF0aW9uV2Vi
Vmlldy5oOgorCisgICAgICAgIEFsbG93IHJlbmRlcmluZyB3aXRob3V0IGFjY2VsZXJhdGVkIGNv
bXBvc2l0aW5nLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1cGRhdGVQcmVmZXJlbmNlcyk6CisKKyAgICAgICAg
KiBQbGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtlOiBBZGQgcmVsZXZhbnQgc291cmNlcyBhbmQgaW5j
bHVkZSBkaXJlY3Rvcmllcy4KKwogMjAyMC0xMS0yNyAgWW9zaGlha2kgSml0c3VrYXdhICA8eW9z
aGlha2kuaml0c3VrYXdhQHNvbnkuY29tPgogCiAgICAgICAgIFtQbGF5U3RhdGlvbl0gRGVmaW5l
IHBsYXRmb3JtIGFyZ3VtZW50IGNvZGVycyBmb3IgRm9udApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1QbGF5U3RhdGlvbi5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
UGxheVN0YXRpb24uY21ha2UKaW5kZXggZDY3NDVhM2IzODAxZTIwMDBmMTNlMjI1MWY4ZjhlM2Ew
ZjFjNjA5Ni4uNTk3MmI3ZjBiYjc2NjNhMDk3MzE5ZWFhYjY5Y2RhNjA2NDU5NmJjYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1QbGF5U3RhdGlvbi5jbWFrZQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtlCkBAIC02MCw2ICs2MCw3IEBAIGxp
c3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL3BsYXlzdGF0aW9uL1BsYXRm
b3JtU2NyZWVuUGxheVN0YXRpb24uY3BwCiAgICAgcGxhdGZvcm0vcGxheXN0YXRpb24vU2Nyb2xs
YmFyVGhlbWVQbGF5U3RhdGlvbi5jcHAKICAgICBwbGF0Zm9ybS9wbGF5c3RhdGlvbi9Vc2VyQWdl
bnRQbGF5U3RhdGlvbi5jcHAKKyAgICBwbGF0Zm9ybS9wbGF5c3RhdGlvbi9XaWRnZXRQbGF5U3Rh
dGlvbi5jcHAKIAogICAgIHBsYXRmb3JtL3Bvc2l4L1NoYXJlZEJ1ZmZlclBPU0lYLmNwcAogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmNwcAppbmRleCBhN2ZlMzgwZjNmZDJkOWNhNmNmODI4Yjgy
ZWEzZDQ2ZGQ1MzdlOTZjLi41YTRlMTQ5YzBmN2ZiOWRlMDgxZmNmN2M0MDFlNDAyNDQ1YWU1ZjJj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5jcHAKQEAgLTI3MSw3ICsyNzEsNyBAQCBGbG9h
dFBvaW50IFdpZGdldDo6Y29udmVydEZyb21Db250YWluaW5nVmlldyhjb25zdCBGbG9hdFBvaW50
JiBwYXJlbnRQb2ludCkgY29ucwogICAgIHJldHVybiBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3
KEludFBvaW50KHBhcmVudFBvaW50KSk7CiB9CiAKLSNpZiAhUExBVEZPUk0oQ09DT0EpICYmICFQ
TEFURk9STShHVEspICYmICFQTEFURk9STShXSU4pCisjaWYgIVBMQVRGT1JNKENPQ09BKSAmJiAh
UExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oV0lOKSAmJiAhUExBVEZPUk0oUExBWVNUQVRJT04p
CiAKIFdpZGdldDo6fldpZGdldCgpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3BsYXlzdGF0aW9uL0N1cmxTU0xIYW5kbGVQbGF5U3RhdGlvbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3BsYXlzdGF0aW9uL0N1cmxTU0xIYW5kbGVQ
bGF5U3RhdGlvbi5jcHAKaW5kZXggM2UxZTI4NzUwYzBmODc1Y2U0YWYxN2NiM2MyMTBlYWNlN2Y0
YjFjMS4uYjUzNDQ0OTYxN2ExNjVlNDM3NmVmMDcyNWNjYzAxMGNhODUwODI1MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9wbGF5c3RhdGlvbi9DdXJsU1NMSGFu
ZGxlUGxheVN0YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
cGxheXN0YXRpb24vQ3VybFNTTEhhbmRsZVBsYXlTdGF0aW9uLmNwcApAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50
IEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1l
bnQgSW5jLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwyMiArMjYsMjUg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDdXJsU1NMSGFuZGxlLmgiCiAKKyNp
bmNsdWRlIDxDZXJ0aWZpY2F0ZVN0b3JlL0NlcnRpZmljYXRlU3RvcmUuaD4KKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1zdGF0aWMgU3RyaW5nIGdldENBQ2VydFBhdGhFbnYoKQordm9pZCBDdXJs
U1NMSGFuZGxlOjpwbGF0Zm9ybUluaXRpYWxpemUoKQogewotICAgIGNoYXIqIGVudlBhdGggPSBn
ZXRlbnYoIkNVUkxfQ0FfQlVORExFX1BBVEgiKTsKLSAgICBpZiAoZW52UGF0aCkKLSAgICAgICAg
cmV0dXJuIHsgZW52UGF0aCB9OworICAgIGF1dG8gY2VydGlmaWNhdGVEYXRhID0gQ2VydGlmaWNh
dGVEYXRhOjpjcmVhdGUoKTsKKyAgICBDZXJ0aWZpY2F0ZVN0b3JlOjpnZXRUcnVzdGVkUm9vdENB
KCpjZXJ0aWZpY2F0ZURhdGEpOwogCi0gICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci19CisgICAg
Q2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZpY2F0ZSBjYUNlcnREYXRhOworICAgIGNhQ2VydERhdGEu
YXBwZW5kKGNlcnRpZmljYXRlRGF0YS0+ZGF0YSgpLCBjZXJ0aWZpY2F0ZURhdGEtPnNpemUoKSk7
CisgICAgaWYgKGNlcnRpZmljYXRlRGF0YS0+c2l6ZSgpKQorICAgICAgICBzZXRDQUNlcnREYXRh
KFdURk1vdmUoY2FDZXJ0RGF0YSkpOwogCi12b2lkIEN1cmxTU0xIYW5kbGU6OnBsYXRmb3JtSW5p
dGlhbGl6ZSgpCi17Ci0gICAgYXV0byBjYUNlcnRQYXRoID0gZ2V0Q0FDZXJ0UGF0aEVudigpOwot
ICAgIGlmICghY2FDZXJ0UGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHNldENBQ2VydFBhdGgoV1RG
TW92ZShjYUNlcnRQYXRoKSk7CisgICAgc2V0Q2lwaGVyTGlzdChDZXJ0aWZpY2F0ZVN0b3JlOjpj
aXBoZXJTdWl0ZXMoKSk7CisgICAgc2V0U2lnbmF0dXJlQWxnb3JpdGhtc0xpc3QoQ2VydGlmaWNh
dGVTdG9yZTo6c2lnbmF0dXJlQWxnb3JpdGhtcygpKTsKKyAgICBzZXRDdXJ2ZXNMaXN0KENlcnRp
ZmljYXRlU3RvcmU6OnN1cHBvcnRlZEdyb3VwcygpKTsKKworICAgIHNldElnbm9yZVNTTEVycm9y
cyhDZXJ0aWZpY2F0ZVN0b3JlOjpzaG91bGRJZ25vcmVUTFNFcnJvcnMoKSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Bs
YXlzdGF0aW9uL1dpZGdldFBsYXlTdGF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3BsYXlzdGF0aW9uL1dpZGdldFBsYXlTdGF0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNWEyY2EyZTc4
MTg4ZDA3ODZlZDRkNmI2ZDNjMmFjNDBkYjI5ZGFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vcGxheXN0YXRpb24vV2lkZ2V0UGxheVN0YXRpb24uY3BwCkBAIC0w
LDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBF
bnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldpZGdldC5oIgorCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSG9zdFdp
bmRvdy5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworV2lkZ2V0Ojp+V2lkZ2V0KCkKK3sKKyAgICBBU1NFUlQoIXBhcmVudCgpKTsKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdpZGdldDo6c2V0RnJhbWVSZWN0KGNvbnN0IElu
dFJlY3QmIHJlY3QpCit7CisgICAgbV9mcmFtZSA9IHJlY3Q7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKwordm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJl
Y3QmLCBTZWN1cml0eU9yaWdpblBhaW50UG9saWN5LCBFdmVudFJlZ2lvbkNvbnRleHQqKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRGb2N1cyhib29sKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRDdXJzb3IoY29u
c3QgQ3Vyc29yJiBjdXJzb3IpCit7CisgICAgRnJhbWVWaWV3KiB2aWV3ID0gcm9vdCgpOworICAg
IGlmICghdmlldykKKyAgICAgICAgcmV0dXJuOworICAgIHZpZXctPmhvc3RXaW5kb3coKS0+c2V0
Q3Vyc29yKGN1cnNvcik7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzaG93KCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIFdpZGdldDo6aGlkZSgpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBXaWRnZXQ6OnNldElzU2VsZWN0ZWQoYm9vbCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtUGxheVN0YXRpb24uY21ha2UgYi9Tb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtUGxheVN0YXRpb24uY21ha2UKaW5kZXggY2RlODE5ODcxNmQ0MjUyMmNiOTg3N2JhZDk5
OGU0YjYwYzhhOWI0Yi4uMGNiZmE4Y2M5NGVjZjlhMjVhYjExYTczM2M2MzY4ZmFhNDY3MGIwNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtlCisrKyBi
L1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1QbGF5U3RhdGlvbi5jbWFrZQpAQCAtODksNiArODksNyBA
QCBsaXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUwogCiAgICAgVUlQcm9jZXNzL0FQSS9DL3BsYXlz
dGF0aW9uL1dLQ29udGV4dENvbmZpZ3VyYXRpb25QbGF5U3RhdGlvbi5jcHAKICAgICBVSVByb2Nl
c3MvQVBJL0MvcGxheXN0YXRpb24vV0tQYWdlUHJpdmF0ZVBsYXlTdGF0aW9uLmNwcAorICAgIFVJ
UHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1J1bmxvb3AuY3BwCiAgICAgVUlQcm9jZXNzL0FQ
SS9DL3BsYXlzdGF0aW9uL1dLVmlldy5jcHAKIAogICAgIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL2Nh
aXJvL1dlYkF1dG9tYXRpb25TZXNzaW9uQ2Fpcm8uY3BwCkBAIC0xMDYsNiArMTA3LDcgQEAgbGlz
dChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKICAgICBVSVByb2Nlc3MvbGlid3BlL1dlYlBhc3RlYm9h
cmRQcm94eUxpYldQRS5jcHAKIAogICAgIFVJUHJvY2Vzcy9wbGF5c3RhdGlvbi9QYWdlQ2xpZW50
SW1wbC5jcHAKKyAgICBVSVByb2Nlc3MvcGxheXN0YXRpb24vUGFnZUxvYWRTdGF0ZU9ic2VydmVy
LmNwcAogICAgIFVJUHJvY2Vzcy9wbGF5c3RhdGlvbi9QbGF5U3RhdGlvbldlYlZpZXcuY3BwCiAg
ICAgVUlQcm9jZXNzL3BsYXlzdGF0aW9uL1dlYlBhZ2VQcm94eVBsYXlTdGF0aW9uLmNwcAogICAg
IFVJUHJvY2Vzcy9wbGF5c3RhdGlvbi9XZWJQcm9jZXNzUG9vbFBsYXlTdGF0aW9uLmNwcApAQCAt
MTQxLDYgKzE0Myw3IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTCiAg
ICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0FQSS9DL2NhaXJvIgogICAgICIke1dFQktJVF9E
SVJ9L1VJUHJvY2Vzcy9BUEkvQy9jdXJsIgogICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9B
UEkvQy9wbGF5c3RhdGlvbiIKKyAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJL3BsYXlz
dGF0aW9uIgogICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9Db29yZGluYXRlZEdyYXBoaWNz
IgogICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9wbGF5c3RhdGlvbiIKICAgICAiJHtXRUJL
SVRfRElSfS9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2N1cmwiCkBAIC0xNjIsNyArMTY1LDEw
IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9QVUJMSUNfRlJBTUVXT1JLX0hFQURFUlMKIAogICAgIFVJ
UHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS0NvbnRleHRDb25maWd1cmF0aW9uUGxheVN0YXRp
b24uaAogICAgIFVJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1BhZ2VQcml2YXRlUGxheVN0
YXRpb24uaAorICAgIFVJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1J1bmxvb3AuaAogICAg
IFVJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1ZpZXcuaAorICAgIFVJUHJvY2Vzcy9BUEkv
Qy9wbGF5c3RhdGlvbi9XS1ZpZXdDbGllbnQuaAorICAgIFVJUHJvY2Vzcy9BUEkvQy9wbGF5c3Rh
dGlvbi9XS1ZpZXdQYWdlTG9hZFN0YXRlQ2xpZW50LmgKICkKIAogIyBCb3RoIFBBTCBhbmQgV2Vi
Q29yZSBhcmUgYnVpbHQgYXMgb2JqZWN0IGxpYnJhcmllcy4gVGhlIFdlYktpdDo6IGludGVyZmFj
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24v
V0tQYWdlUHJpdmF0ZVBsYXlTdGF0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL3BsYXlzdGF0aW9uL1dLUGFnZVByaXZhdGVQbGF5U3RhdGlvbi5jcHAKaW5kZXggZjcwNjhi
NmVkOGE5MTJlZTc4NGVlZDU0OWI1ZjYwMjc3NjdkYjhmOS4uNmYxYTBjNTgxNDJmMmU1NTFhMWVh
NDI1Nzg2MTYzNDJiMjg3MzU1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvcGxheXN0YXRpb24vV0tQYWdlUHJpdmF0ZVBsYXlTdGF0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1BhZ2VQcml2YXRlUGxheVN0
YXRpb24uY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBTb255
IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNv
bnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI2LDE2ICsyNiwyNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIldLUGFnZVByaXZhdGVQbGF5U3RhdGlvbi5oIgogCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFQ
cm94eS5oIgorI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlDb29yZGluYXRlZEdyYXBoaWNzLmgi
CiAjaW5jbHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIk5hdGl2ZVdl
Yk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJOYXRpdmVXZWJXaGVlbEV2ZW50LmgiCiAjaW5jbHVk
ZSAiV2ViRXZlbnRGYWN0b3J5LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVk
ZSA8Y2Fpcm8uaD4KICNpbmNsdWRlIDx3cGUvd3BlLmg+CiAKLXZvaWQgV0tQYWdlU2V0U2l6ZShX
S1BhZ2VSZWYgcGFnZVJlZiwgV0tTaXplIHNpemUpCitzdGF0aWMgdm9pZCBkcmF3UGFnZUJhY2tn
cm91bmQoY2Fpcm9fdCogY3R4LCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpDb2xvcj4mIGJhY2tn
cm91bmRDb2xvciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKIHsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIGlmICghYmFja2dyb3VuZENvbG9yIHx8IGJhY2tncm91bmRDb2xvci52
YWx1ZSgpLmlzVmlzaWJsZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvW3IsIGcsIGIs
IGFdID0gYmFja2dyb3VuZENvbG9yLnZhbHVlKCkudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisK
KyAgICBjYWlyb19zZXRfc291cmNlX3JnYmEoY3R4LCByLCBnLCBiLCBhKTsKKyAgICBjYWlyb19y
ZWN0YW5nbGUoY3R4LCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWln
aHQoKSk7CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGN0eCwgQ0FJUk9fT1BFUkFUT1JfT1ZFUik7
CisgICAgY2Fpcm9fZmlsbChjdHgpOwogfQogCiB2b2lkIFdLUGFnZUhhbmRsZUtleWJvYXJkRXZl
bnQoV0tQYWdlUmVmIHBhZ2VSZWYsIFdLS2V5Ym9hcmRFdmVudCBldmVudCkKQEAgLTczLDExICs4
NCwxNiBAQCB2b2lkIFdLUGFnZUhhbmRsZU1vdXNlRXZlbnQoV0tQYWdlUmVmIHBhZ2VSZWYsIFdL
TW91c2VFdmVudCBldmVudCkKIAogICAgIHN3aXRjaCAoZXZlbnQudHlwZSkgewogICAgIGNhc2Ug
a1dLRXZlbnRNb3VzZURvd246CisgICAgICAgIHdwZUV2ZW50LnR5cGUgPSB3cGVfaW5wdXRfcG9p
bnRlcl9ldmVudF90eXBlX2J1dHRvbjsKKyAgICAgICAgd3BlRXZlbnQuc3RhdGUgPSAxOworICAg
ICAgICBicmVhazsKICAgICBjYXNlIGtXS0V2ZW50TW91c2VVcDoKICAgICAgICAgd3BlRXZlbnQu
dHlwZSA9IHdwZV9pbnB1dF9wb2ludGVyX2V2ZW50X3R5cGVfYnV0dG9uOworICAgICAgICB3cGVF
dmVudC5zdGF0ZSA9IDA7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Uga1dLRXZlbnRNb3VzZU1v
dmU6CiAgICAgICAgIHdwZUV2ZW50LnR5cGUgPSB3cGVfaW5wdXRfcG9pbnRlcl9ldmVudF90eXBl
X21vdGlvbjsKKyAgICAgICAgd3BlRXZlbnQuc3RhdGUgPSAwOwogICAgICAgICBicmVhazsKICAg
ICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTEwNCw3ICsxMjAs
NiBAQCB2b2lkIFdLUGFnZUhhbmRsZU1vdXNlRXZlbnQoV0tQYWdlUmVmIHBhZ2VSZWYsIFdLTW91
c2VFdmVudCBldmVudCkKICAgICB3cGVFdmVudC50aW1lID0gMDsKICAgICB3cGVFdmVudC54ID0g
ZXZlbnQucG9zaXRpb24ueDsKICAgICB3cGVFdmVudC55ID0gZXZlbnQucG9zaXRpb24ueTsKLSAg
ICB3cGVFdmVudC5zdGF0ZSA9IDA7CiAgICAgd3BlRXZlbnQubW9kaWZpZXJzID0gMDsgLy8gVE9E
TzogSGFuZGxlIG1vZGlmaWVycy4KIAogICAgIGNvbnN0IGZsb2F0IGRldmljZVNjYWxlRmFjdG9y
ID0gMTsKQEAgLTEzMiwzICsxNDcsMzQgQEAgdm9pZCBXS1BhZ2VIYW5kbGVXaGVlbEV2ZW50KFdL
UGFnZVJlZiBwYWdlUmVmLCBXS1doZWVsRXZlbnQgZXZlbnQpCiAKICAgICBXZWJLaXQ6OnRvSW1w
bChwYWdlUmVmKS0+aGFuZGxlV2hlZWxFdmVudChOYXRpdmVXZWJXaGVlbEV2ZW50KCZ3cGVFdmVu
dC5iYXNlLCBkZXZpY2VTY2FsZUZhY3RvciwgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlTm9u
ZSwgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlTm9uZSkpOwogfQorCit2b2lkIFdLUGFnZVBh
aW50KFdLUGFnZVJlZiBwYWdlUmVmLCB1bnNpZ25lZCBjaGFyKiBzdXJmYWNlRGF0YSwgV0tTaXpl
IHdrU3VyZmFjZVNpemUsIFdLUmVjdCB3a1BhaW50UmVjdCkKK3sKKyAgICBhdXRvIHN1cmZhY2VT
aXplID0gV2ViS2l0Ojp0b0ludFNpemUod2tTdXJmYWNlU2l6ZSk7CisgICAgYXV0byBwYWludFJl
Y3QgPSBXZWJLaXQ6OnRvSW50UmVjdCh3a1BhaW50UmVjdCk7CisgICAgaWYgKCFzdXJmYWNlRGF0
YSB8fCBzdXJmYWNlU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0
IGNhaXJvX2Zvcm1hdF90IGZvcm1hdCA9IENBSVJPX0ZPUk1BVF9BUkdCMzI7CisgICAgY2Fpcm9f
c3VyZmFjZV90KiBzdXJmYWNlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEo
c3VyZmFjZURhdGEsIGZvcm1hdCwgc3VyZmFjZVNpemUud2lkdGgoKSwgc3VyZmFjZVNpemUuaGVp
Z2h0KCksIGNhaXJvX2Zvcm1hdF9zdHJpZGVfZm9yX3dpZHRoKGZvcm1hdCwgc3VyZmFjZVNpemUu
d2lkdGgoKSkpOworICAgIGlmIChjYWlyb19zdXJmYWNlX3N0YXR1cyhzdXJmYWNlKSAhPSBDQUlS
T19TVEFUVVNfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuOworCisgICAgY2Fpcm9fdCogY3R4ID0g
Y2Fpcm9fY3JlYXRlKHN1cmZhY2UpOworCisgICAgYXV0byBwYWdlID0gV2ViS2l0Ojp0b0ltcGwo
cGFnZVJlZik7CisgICAgYXV0byYgYmFja2dyb3VuZENvbG9yID0gcGFnZS0+YmFja2dyb3VuZENv
bG9yKCk7CisgICAgcGFnZS0+ZW5kUHJpbnRpbmcoKTsKKyAgICBpZiAoYXV0byogZHJhd2luZ0Fy
ZWEgPSBzdGF0aWNfY2FzdDxXZWJLaXQ6OkRyYXdpbmdBcmVhUHJveHlDb29yZGluYXRlZEdyYXBo
aWNzKj4ocGFnZS0+ZHJhd2luZ0FyZWEoKSkpIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBwb3J0IFdlYktpdDEncyByZWN0IGNvYWxlc2NpbmcgbG9naWMgaGVyZS4KKyAgICAgICAgV2Vi
Q29yZTo6UmVnaW9uIHVucGFpbnRlZFJlZ2lvbjsKKyAgICAgICAgZHJhd2luZ0FyZWEtPnBhaW50
KGN0eCwgcGFpbnRSZWN0LCB1bnBhaW50ZWRSZWdpb24pOworCisgICAgICAgIGZvciAoY29uc3Qg
YXV0byYgcmVjdCA6IHVucGFpbnRlZFJlZ2lvbi5yZWN0cygpKQorICAgICAgICAgICAgZHJhd1Bh
Z2VCYWNrZ3JvdW5kKGN0eCwgYmFja2dyb3VuZENvbG9yLCByZWN0KTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgZHJhd1BhZ2VCYWNrZ3JvdW5kKGN0eCwgYmFja2dyb3VuZENvbG9yLCBwYWludFJlY3Qp
OworCisgICAgY2Fpcm9fZGVzdHJveShjdHgpOworICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShz
dXJmYWNlKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL3Bs
YXlzdGF0aW9uL1dLUGFnZVByaXZhdGVQbGF5U3RhdGlvbi5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tQYWdlUHJpdmF0ZVBsYXlTdGF0aW9uLmgKaW5kZXgg
ZDlkNjE4ZTVmMzk3ZjRkODFhZTZkOGNlNDJjOThjN2FlMzJmOGRhYy4uNjc0OTI0NjYyOWVkZDI2
ZTlhZjk5NTdlZDQ1YWE2ZjY5ZWNjMDExOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tQYWdlUHJpdmF0ZVBsYXlTdGF0aW9uLmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tQYWdlUHJpdmF0ZVBs
YXlTdGF0aW9uLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIFNv
bnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
U29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzIsOSArMzIsMTEgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLVdL
X0VYUE9SVCB2b2lkIFdLUGFnZUhhbmRsZUtleWJvYXJkRXZlbnQoV0tQYWdlUmVmIHBhZ2UsIFdL
S2V5Ym9hcmRFdmVudCk7Ci1XS19FWFBPUlQgdm9pZCBXS1BhZ2VIYW5kbGVNb3VzZUV2ZW50KFdL
UGFnZVJlZiBwYWdlLCBXS01vdXNlRXZlbnQpOwotV0tfRVhQT1JUIHZvaWQgV0tQYWdlSGFuZGxl
V2hlZWxFdmVudChXS1BhZ2VSZWYgcGFnZSwgV0tXaGVlbEV2ZW50KTsKK1dLX0VYUE9SVCB2b2lk
IFdLUGFnZUhhbmRsZUtleWJvYXJkRXZlbnQoV0tQYWdlUmVmLCBXS0tleWJvYXJkRXZlbnQpOwor
V0tfRVhQT1JUIHZvaWQgV0tQYWdlSGFuZGxlTW91c2VFdmVudChXS1BhZ2VSZWYsIFdLTW91c2VF
dmVudCk7CitXS19FWFBPUlQgdm9pZCBXS1BhZ2VIYW5kbGVXaGVlbEV2ZW50KFdLUGFnZVJlZiwg
V0tXaGVlbEV2ZW50KTsKKworV0tfRVhQT1JUIHZvaWQgV0tQYWdlUGFpbnQoV0tQYWdlUmVmLCB1
bnNpZ25lZCBjaGFyKiBjYWlyb1N1cmZhY2VBUkdCMzJEYXRhLCBXS1NpemUgc3VyZmFjZVNpemUs
IFdLUmVjdCBwYWludFJlY3QpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLUnVuTG9vcC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1J1bkxvb3AuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmIwZjM0MGJhYzllNGU0YjdjYWE3ZTdlMzkwNDQzOTg4ZWU4MjNhNTAKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlv
bi9XS1J1bkxvb3AuY3BwCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldLUnVuTG9vcC5oIgorCisjaW5jbHVkZSAiV2ViS2l0
MkluaXRpYWxpemUuaCIKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0
Zi9SdW5Mb29wLmg+CisKK3ZvaWQgV0tSdW5Mb29wUnVuTWFpbigpCit7CisgICAgUnVuTG9vcDo6
bWFpbigpLnJ1bigpOworfQorCit2b2lkIFdLUnVuTG9vcFN0b3BNYWluKCkKK3sKKyAgICBSdW5M
b29wOjptYWluKCkuc3RvcCgpOworfQorCit2b2lkIFdLUnVuTG9vcENhbGxPbk1haW5UaHJlYWQo
V0tSdW5Mb29wQ2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQqIHVzZXJEYXRhKQoreworICAgIGlmICgh
Y2FsbGJhY2spCisgICAgICAgIHJldHVybjsKKworICAgIGNhbGxPbk1haW5UaHJlYWQoW2NhbGxi
YWNrLCB1c2VyRGF0YV0oKSB7CisgICAgICAgIGNhbGxiYWNrKHVzZXJEYXRhKTsKKyAgICB9KTsK
K30KKwordm9pZCBXS1J1bkxvb3BJbml0aWFsaXplTWFpbigpCit7CisgICAgLy8gRklYTUU6Cisg
ICAgLy8gSW5pdGlhbGl6aW5nIFJ1bkxvb3AgYnkgSW5pdGlhbGl6ZVdlYktpdDIoKS4KKyAgICAv
LyBXS1J1bkxvb3BJbml0aWFsaXplTWFpbigpIHNob3VsZCBiZSByZW5hbWVkIHRvIG1vcmUgc3Ry
YWlnaHRmb3J3YXJkIEFQSSBuYW1lIHRvIHdyYXAgSW5pdGlhbGl6ZVdlYktpdDIoKS4KKyAgICBX
ZWJLaXQ6OkluaXRpYWxpemVXZWJLaXQyKCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1J1bkxvb3AuaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLUnVuTG9vcC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBjNWMw
YTQzYzA1YTQ5NTZmNWIwODQwYzQ2ZTBjYjlmMGIwYjhkMzEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1J1bkxvb3AuaApAQCAt
MCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUg
RW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
V2ViS2l0L1dLQmFzZS5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2Vu
ZGlmCisKK3R5cGVkZWYgdm9pZCgqV0tSdW5Mb29wQ2FsbGJhY2spKHZvaWQgKnVzZXJEYXRhKTsK
KworV0tfRVhQT1JUIHZvaWQgV0tSdW5Mb29wUnVuTWFpbigpOworV0tfRVhQT1JUIHZvaWQgV0tS
dW5Mb29wU3RvcE1haW4oKTsKK1dLX0VYUE9SVCB2b2lkIFdLUnVuTG9vcENhbGxPbk1haW5UaHJl
YWQoV0tSdW5Mb29wQ2FsbGJhY2ssIHZvaWQqIHVzZXJEYXRhKTsKK1dLX0VYUE9SVCB2b2lkIFdL
UnVuTG9vcEluaXRpYWxpemVNYWluKCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9X
S1ZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tW
aWV3LmNwcAppbmRleCAxYmU1Mjk2ODg1YTEyM2Y4Mzg5N2NkYThhMzFmNzgyMTIzNDYzMDVkLi4w
M2NhNjk5MzgxMDM2ZGE2NmRiMDZhYTkyZGJjMTEwNDhmZmU2ZjJkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1ZpZXcuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLVmlldy5jcHAKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50
ZXJ0YWlubWVudCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBF
bnRlcnRhaW5tZW50IEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcs
MTUgKzI3LDIzNSBAQAogI2luY2x1ZGUgIldLVmlldy5oIgogCiAjaW5jbHVkZSAiQVBJUGFnZUNv
bmZpZ3VyYXRpb24uaCIKKyNpbmNsdWRlICJBUElWaWV3Q2xpZW50LmgiCisjaW5jbHVkZSAiQVBJ
Vmlld1BhZ2VMb2FkU3RhdGVDbGllbnQuaCIKICNpbmNsdWRlICJQbGF5U3RhdGlvbldlYlZpZXcu
aCIKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRlICJXS1NoYXJlZEFQSUNhc3QuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0N1cnNvci5oPgorCituYW1lc3BhY2UgQVBJIHsKK3RlbXBsYXRl
PD4gc3RydWN0IENsaWVudFRyYWl0czxXS1ZpZXdDbGllbnRCYXNlPiB7CisgICAgdHlwZWRlZiBz
dGQ6OnR1cGxlPFdLVmlld0NsaWVudFYwPiBWZXJzaW9uczsKK307Cit0ZW1wbGF0ZTw+IHN0cnVj
dCBDbGllbnRUcmFpdHM8V0tWaWV3UGFnZUxvYWRTdGF0ZUNsaWVudEJhc2U+IHsKKyAgICB0eXBl
ZGVmIHN0ZDo6dHVwbGU8V0tWaWV3UGFnZUxvYWRTdGF0ZUNsaWVudFYwPiBWZXJzaW9uczsKK307
Cit9CisKK1dLQ3Vyc29yVHlwZSB0b1dLQ3Vyc29yVHlwZShjb25zdCBXZWJDb3JlOjpDdXJzb3Im
IGN1cnNvcikKK3sKKyAgICBzd2l0Y2ggKGN1cnNvci50eXBlKCkpIHsKKyAgICBjYXNlIFdlYkNv
cmU6OkN1cnNvcjo6SGFuZDoKKyAgICAgICAgcmV0dXJuIGtXS0N1cnNvclR5cGVIYW5kOworICAg
IGNhc2UgV2ViQ29yZTo6Q3Vyc29yOjpOb25lOgorICAgICAgICByZXR1cm4ga1dLQ3Vyc29yVHlw
ZU5vbmU7CisgICAgY2FzZSBXZWJDb3JlOjpDdXJzb3I6OlBvaW50ZXI6CisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIGtXS0N1cnNvclR5cGVQb2ludGVyOworICAgIH0KK30KIAogV0tWaWV3
UmVmIFdLVmlld0NyZWF0ZShXS1BhZ2VDb25maWd1cmF0aW9uUmVmIGNvbmZpZ3VyYXRpb24pCiB7
CiAgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0OjpQbGF5U3RhdGlvbldlYlZpZXc6OmNy
ZWF0ZSgqV2ViS2l0Ojp0b0ltcGwoY29uZmlndXJhdGlvbikpLmxlYWtSZWYoKSk7CiB9CiAKLVdL
UGFnZVJlZiBXS1ZpZXdHZXRQYWdlKFdLVmlld1JlZiB2aWV3UmVmKQorV0tQYWdlUmVmIFdLVmll
d0dldFBhZ2UoV0tWaWV3UmVmIHZpZXcpCit7CisgICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2Vi
S2l0Ojp0b0ltcGwodmlldyktPnBhZ2UoKSk7Cit9CisKK3ZvaWQgV0tWaWV3U2V0U2l6ZShXS1Zp
ZXdSZWYgdmlldywgV0tTaXplIHZpZXdTaXplKQoreworICAgIFdlYktpdDo6dG9JbXBsKHZpZXcp
LT5zZXRWaWV3U2l6ZShXZWJLaXQ6OnRvSW50U2l6ZSh2aWV3U2l6ZSkpOworfQorCit2b2lkIFdL
Vmlld1NldEZvY3VzKFdLVmlld1JlZiB2aWV3LCBib29sIGZvY3VzZWQpCit7CisgICAgYXV0byB2
aWV3U3RhdGUgPSBXZWJLaXQ6OnRvSW1wbCh2aWV3KS0+dmlld1N0YXRlKCk7CisgICAgYXV0byBm
bGFnID0gV2ViQ29yZTo6QWN0aXZpdHlTdGF0ZTo6SXNGb2N1c2VkOworICAgIGlmIChmb2N1c2Vk
KQorICAgICAgICB2aWV3U3RhdGUuYWRkKGZsYWcpOworICAgIGVsc2UKKyAgICAgICAgdmlld1N0
YXRlLnJlbW92ZShmbGFnKTsKKyAgICBXZWJLaXQ6OnRvSW1wbCh2aWV3KS0+c2V0Vmlld1N0YXRl
KHZpZXdTdGF0ZSk7Cit9CisKK3ZvaWQgV0tWaWV3U2V0QWN0aXZlKFdLVmlld1JlZiB2aWV3LCBi
b29sIGFjdGl2ZSkKK3sKKyAgICBhdXRvIHZpZXdTdGF0ZSA9IFdlYktpdDo6dG9JbXBsKHZpZXcp
LT52aWV3U3RhdGUoKTsKKyAgICBhdXRvIGZsYWcgPSBXZWJDb3JlOjpBY3Rpdml0eVN0YXRlOjpX
aW5kb3dJc0FjdGl2ZTsKKyAgICBpZiAoYWN0aXZlKQorICAgICAgICB2aWV3U3RhdGUuYWRkKGZs
YWcpOworICAgIGVsc2UKKyAgICAgICAgdmlld1N0YXRlLnJlbW92ZShmbGFnKTsKKyAgICBXZWJL
aXQ6OnRvSW1wbCh2aWV3KS0+c2V0Vmlld1N0YXRlKHZpZXdTdGF0ZSk7Cit9CisKK3ZvaWQgV0tW
aWV3U2V0VmlzaWJsZShXS1ZpZXdSZWYgdmlldywgYm9vbCB2aXNpYmxlKQoreworICAgIGF1dG8g
dmlld1N0YXRlID0gV2ViS2l0Ojp0b0ltcGwodmlldyktPnZpZXdTdGF0ZSgpOworICAgIGF1dG8g
ZmxhZyA9IFdlYkNvcmU6OkFjdGl2aXR5U3RhdGU6OklzVmlzaWJsZTsKKyAgICBpZiAodmlzaWJs
ZSkKKyAgICAgICAgdmlld1N0YXRlLmFkZChmbGFnKTsKKyAgICBlbHNlCisgICAgICAgIHZpZXdT
dGF0ZS5yZW1vdmUoZmxhZyk7CisgICAgV2ViS2l0Ojp0b0ltcGwodmlldyktPnNldFZpZXdTdGF0
ZSh2aWV3U3RhdGUpOworfQorCit2b2lkIFdLVmlld1dpbGxFbnRlckZ1bGxTY3JlZW4oV0tWaWV3
UmVmIHZpZXcpCit7CisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAgIFdlYktpdDo6dG9J
bXBsKHZpZXcpLT53aWxsRW50ZXJGdWxsU2NyZWVuKCk7CisjZW5kaWYKK30KKwordm9pZCBXS1Zp
ZXdEaWRFbnRlckZ1bGxTY3JlZW4oV0tWaWV3UmVmIHZpZXcpCit7CisjaWYgRU5BQkxFKEZVTExT
Q1JFRU5fQVBJKQorICAgIFdlYktpdDo6dG9JbXBsKHZpZXcpLT5kaWRFbnRlckZ1bGxTY3JlZW4o
KTsKKyNlbmRpZgorfQorCit2b2lkIFdLVmlld1dpbGxFeGl0RnVsbFNjcmVlbihXS1ZpZXdSZWYg
dmlldykKIHsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OnRvSW1wbCh2aWV3UmVm
KS0+cGFnZSgpKTsKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgV2ViS2l0Ojp0b0lt
cGwodmlldyktPndpbGxFeGl0RnVsbFNjcmVlbigpOworI2VuZGlmCit9CisKK3ZvaWQgV0tWaWV3
RGlkRXhpdEZ1bGxTY3JlZW4oV0tWaWV3UmVmIHZpZXcpCit7CisjaWYgRU5BQkxFKEZVTExTQ1JF
RU5fQVBJKQorICAgIFdlYktpdDo6dG9JbXBsKHZpZXcpLT5kaWRFeGl0RnVsbFNjcmVlbigpOwor
I2VuZGlmCit9CisKK3ZvaWQgV0tWaWV3UmVxdWVzdEV4aXRGdWxsU2NyZWVuKFdLVmlld1JlZiB2
aWV3KQoreworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBXZWJLaXQ6OnRvSW1wbCh2
aWV3KS0+cmVxdWVzdEV4aXRGdWxsU2NyZWVuKCk7CisjZW5kaWYKK30KKworYm9vbCBXS1ZpZXdJ
c0Z1bGxTY3JlZW4oV0tWaWV3UmVmIHZpZXcpCit7CisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJ
KQorICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbCh2aWV3KS0+aXNGdWxsU2NyZWVuKCk7CisjZWxz
ZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCit2b2lkIFdLVmlld1NldFZpZXdDbGll
bnQoV0tWaWV3UmVmIHZpZXcsIGNvbnN0IFdLVmlld0NsaWVudEJhc2UqIGNsaWVudCkKK3sKKyAg
ICBjbGFzcyBWaWV3Q2xpZW50IGZpbmFsIDogcHVibGljIEFQSTo6Q2xpZW50PFdLVmlld0NsaWVu
dEJhc2U+LCBwdWJsaWMgQVBJOjpWaWV3Q2xpZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIGV4
cGxpY2l0IFZpZXdDbGllbnQoY29uc3QgV0tWaWV3Q2xpZW50QmFzZSogY2xpZW50KQorICAgICAg
ICB7CisgICAgICAgICAgICBpbml0aWFsaXplKGNsaWVudCk7CisgICAgICAgIH0KKworICAgIHBy
aXZhdGU6CisgICAgICAgIHZvaWQgc2V0Vmlld05lZWRzRGlzcGxheShXZWJLaXQ6OlBsYXlTdGF0
aW9uV2ViVmlldyYgdmlldywgY29uc3QgV2ViQ29yZTo6UmVnaW9uJiByZWdpb24pIGZpbmFsCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV9jbGllbnQuc2V0Vmlld05lZWRzRGlzcGxheSkK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBtX2NsaWVudC5zZXRWaWV3TmVl
ZHNEaXNwbGF5KFdlYktpdDo6dG9BUEkoJnZpZXcpLCBXZWJLaXQ6OnRvQVBJKHJlZ2lvbi5ib3Vu
ZHMoKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgIH0KKworICAgICAgICB2
b2lkIGVudGVyRnVsbFNjcmVlbihXZWJLaXQ6OlBsYXlTdGF0aW9uV2ViVmlldyYgdmlldykKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5lbnRlckZ1bGxTY3JlZW4pCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgbV9jbGllbnQuZW50ZXJGdWxsU2NyZWVu
KFdlYktpdDo6dG9BUEkoJnZpZXcpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGV4aXRGdWxsU2NyZWVuKFdlYktpdDo6UGxheVN0
YXRpb25XZWJWaWV3JiB2aWV3KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1fY2xpZW50
LmV4aXRGdWxsU2NyZWVuKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIG1f
Y2xpZW50LmV4aXRGdWxsU2NyZWVuKFdlYktpdDo6dG9BUEkoJnZpZXcpLCBtX2NsaWVudC5iYXNl
LmNsaWVudEluZm8pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGNsb3NlRnVs
bFNjcmVlbihXZWJLaXQ6OlBsYXlTdGF0aW9uV2ViVmlldyYgdmlldykKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKCFtX2NsaWVudC5jbG9zZUZ1bGxTY3JlZW4pCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgbV9jbGllbnQuY2xvc2VGdWxsU2NyZWVuKFdlYktpdDo6dG9B
UEkoJnZpZXcpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICB2b2lkIGJlZ2FuRW50ZXJGdWxsU2NyZWVuKFdlYktpdDo6UGxheVN0YXRpb25X
ZWJWaWV3JiB2aWV3LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBpbml0aWFsRnJhbWUsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIGZpbmFsRnJhbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
ICghbV9jbGllbnQuYmVnYW5FbnRlckZ1bGxTY3JlZW4pCisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgbV9jbGllbnQuYmVnYW5FbnRlckZ1bGxTY3JlZW4oV2ViS2l0Ojp0b0FQ
SSgmdmlldyksIFdlYktpdDo6dG9BUEkoaW5pdGlhbEZyYW1lKSwgV2ViS2l0Ojp0b0FQSShmaW5h
bEZyYW1lKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgdm9pZCBiZWdhbkV4aXRGdWxsU2NyZWVuKFdlYktpdDo6UGxheVN0YXRpb25XZWJW
aWV3JiB2aWV3LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBpbml0aWFsRnJhbWUsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIGZpbmFsRnJhbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgh
bV9jbGllbnQuYmVnYW5FeGl0RnVsbFNjcmVlbikKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICBtX2NsaWVudC5iZWdhbkV4aXRGdWxsU2NyZWVuKFdlYktpdDo6dG9BUEkoJnZp
ZXcpLCBXZWJLaXQ6OnRvQVBJKGluaXRpYWxGcmFtZSksIFdlYktpdDo6dG9BUEkoZmluYWxGcmFt
ZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgIH0KKworICAgICAgICB2b2lk
IHNldEN1cnNvcihXZWJLaXQ6OlBsYXlTdGF0aW9uV2ViVmlldyYgdmlldywgY29uc3QgV2ViQ29y
ZTo6Q3Vyc29yJiBjdXJzb3IpIGZpbmFsCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV9j
bGllbnQuc2V0Q3Vyc29yKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIG1f
Y2xpZW50LnNldEN1cnNvcihXZWJLaXQ6OnRvQVBJKCZ2aWV3KSwgdG9XS0N1cnNvclR5cGUoY3Vy
c29yKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgfQorICAgIH07CisKKyAg
ICBXZWJLaXQ6OnRvSW1wbCh2aWV3KS0+c2V0Q2xpZW50KG1ha2VVbmlxdWU8Vmlld0NsaWVudD4o
Y2xpZW50KSk7Cit9CisKK3ZvaWQgV0tWaWV3U2V0Vmlld1BhZ2VMb2FkU3RhdGVDbGllbnQoV0tW
aWV3UmVmIHZpZXcsIGNvbnN0IFdLVmlld1BhZ2VMb2FkU3RhdGVDbGllbnRCYXNlKiBjbGllbnQp
Cit7CisgICAgY2xhc3MgVmlld1BhZ2VMb2FkU3RhdGVDbGllbnQgZmluYWwgOiBwdWJsaWMgQVBJ
OjpDbGllbnQ8V0tWaWV3UGFnZUxvYWRTdGF0ZUNsaWVudEJhc2U+LCBwdWJsaWMgQVBJOjpWaWV3
UGFnZUxvYWRTdGF0ZUNsaWVudCB7CisgICAgcHVibGljOgorICAgICAgICBleHBsaWNpdCBWaWV3
UGFnZUxvYWRTdGF0ZUNsaWVudChjb25zdCBXS1ZpZXdQYWdlTG9hZFN0YXRlQ2xpZW50QmFzZSog
Y2xpZW50KQorICAgICAgICB7CisgICAgICAgICAgICBpbml0aWFsaXplKGNsaWVudCk7CisgICAg
ICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgZGlkQ2hhbmdlVGl0bGUoV2ViS2l0
OjpQbGF5U3RhdGlvbldlYlZpZXcmIHZpZXcsIGNvbnN0IFdURjo6U3RyaW5nJiB0aXRsZSkgZmlu
YWwKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5kaWRDaGFuZ2VUaXRsZSkK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBtX2NsaWVudC5kaWRDaGFuZ2VU
aXRsZShXZWJLaXQ6OnRvQVBJKCZ2aWV3KSwgV2ViS2l0Ojp0b0FQSSh0aXRsZS5pbXBsKCkpLCBt
X2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkaWRD
aGFuZ2VBY3RpdmVVUkwoV2ViS2l0OjpQbGF5U3RhdGlvbldlYlZpZXcmIHZpZXcsIGNvbnN0IFdU
Rjo6U3RyaW5nJiB1cmwpIGZpbmFsCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV9jbGll
bnQuZGlkQ2hhbmdlQWN0aXZlVVJMKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIG1fY2xpZW50LmRpZENoYW5nZUFjdGl2ZVVSTChXZWJLaXQ6OnRvQVBJKCZ2aWV3KSwgV2Vi
S2l0Ojp0b0FQSSh1cmwuaW1wbCgpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgZGlkQ2hhbmdlRXN0aW1hdGVkUHJvZ3Jlc3MoV2ViS2l0OjpQ
bGF5U3RhdGlvbldlYlZpZXcmIHZpZXcsIGRvdWJsZSBwcm9ncmVzcykgZmluYWwKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5kaWRDaGFuZ2VFc3RpbWF0ZWRQcm9ncmVzcykK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBtX2NsaWVudC5kaWRDaGFuZ2VF
c3RpbWF0ZWRQcm9ncmVzcyhXZWJLaXQ6OnRvQVBJKCZ2aWV3KSwgcHJvZ3Jlc3MsIG1fY2xpZW50
LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGRpZENoYW5nZVdl
YlByb2Nlc3NJc1Jlc3BvbnNpdmUoV2ViS2l0OjpQbGF5U3RhdGlvbldlYlZpZXcmIHZpZXcsIGJv
b2wgaXNSZXNwb25zaXZlKSBmaW5hbAorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1fY2xp
ZW50LmRpZENoYW5nZVdlYlByb2Nlc3NJc1Jlc3BvbnNpdmUpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgbV9jbGllbnQuZGlkQ2hhbmdlV2ViUHJvY2Vzc0lzUmVzcG9uc2l2
ZShXZWJLaXQ6OnRvQVBJKCZ2aWV3KSwgaXNSZXNwb25zaXZlLCBtX2NsaWVudC5iYXNlLmNsaWVu
dEluZm8pOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkaWRTd2FwV2ViUHJvY2Vzc2VzKFdl
YktpdDo6UGxheVN0YXRpb25XZWJWaWV3JiB2aWV3KSBmaW5hbAorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoIW1fY2xpZW50LmRpZFN3YXBXZWJQcm9jZXNzZXMpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgbV9jbGllbnQuZGlkU3dhcFdlYlByb2Nlc3NlcyhXZWJLaXQ6
OnRvQVBJKCZ2aWV3KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICBXZWJLaXQ6OnRvSW1wbCh2aWV3KS0+c2V0UGFnZUxvYWRTdGF0ZUNsaWVudCht
YWtlVW5pcXVlPFZpZXdQYWdlTG9hZFN0YXRlQ2xpZW50PihjbGllbnQpKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLVmlldy5oIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tWaWV3LmgKaW5kZXgg
YzVlZTQ0NzMyNWEwZjg1ZjA1YmFkMWI2OTI2NTI4YjFlNmU5NjcxMy4uNDg1YjkxZDE0MjYzMWZh
NjRiMWVkMmFjMTBhMDI4MTA3MDViMzdiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tWaWV3LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsMTQgKzI1LDMyIEBACiAKICNw
cmFnbWEgb25jZQogCi0jaW5jbHVkZSA8V2ViS2l0L1dLQmFzZS5oPgorI2luY2x1ZGUgPFdlYktp
dC9XS1ZpZXdDbGllbnQuaD4KKyNpbmNsdWRlIDxXZWJLaXQvV0tWaWV3UGFnZUxvYWRTdGF0ZUNs
aWVudC5oPgogCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKIFdL
X0VYUE9SVCBXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlKFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYgY29u
ZmlndXJhdGlvbik7Ci1XS19FWFBPUlQgV0tQYWdlUmVmIFdLVmlld0dldFBhZ2UoV0tWaWV3UmVm
IHZpZXcpOworCitXS19FWFBPUlQgdm9pZCBXS1ZpZXdTZXRWaWV3Q2xpZW50KFdLVmlld1JlZiwg
Y29uc3QgV0tWaWV3Q2xpZW50QmFzZSopOworV0tfRVhQT1JUIHZvaWQgV0tWaWV3U2V0Vmlld1Bh
Z2VMb2FkU3RhdGVDbGllbnQoV0tWaWV3UmVmLCBjb25zdCBXS1ZpZXdQYWdlTG9hZFN0YXRlQ2xp
ZW50QmFzZSopOworCitXS19FWFBPUlQgV0tQYWdlUmVmIFdLVmlld0dldFBhZ2UoV0tWaWV3UmVm
KTsKKworV0tfRVhQT1JUIHZvaWQgV0tWaWV3U2V0U2l6ZShXS1ZpZXdSZWYsIFdLU2l6ZSB2aWV3
U2l6ZSk7CisKK1dLX0VYUE9SVCB2b2lkIFdLVmlld1NldEZvY3VzKFdLVmlld1JlZiwgYm9vbCk7
CitXS19FWFBPUlQgdm9pZCBXS1ZpZXdTZXRBY3RpdmUoV0tWaWV3UmVmLCBib29sKTsKK1dLX0VY
UE9SVCB2b2lkIFdLVmlld1NldFZpc2libGUoV0tWaWV3UmVmLCBib29sKTsKKworV0tfRVhQT1JU
IHZvaWQgV0tWaWV3V2lsbEVudGVyRnVsbFNjcmVlbihXS1ZpZXdSZWYpOworV0tfRVhQT1JUIHZv
aWQgV0tWaWV3RGlkRW50ZXJGdWxsU2NyZWVuKFdLVmlld1JlZik7CitXS19FWFBPUlQgdm9pZCBX
S1ZpZXdXaWxsRXhpdEZ1bGxTY3JlZW4oV0tWaWV3UmVmKTsKK1dLX0VYUE9SVCB2b2lkIFdLVmll
d0RpZEV4aXRGdWxsU2NyZWVuKFdLVmlld1JlZik7CitXS19FWFBPUlQgdm9pZCBXS1ZpZXdSZXF1
ZXN0RXhpdEZ1bGxTY3JlZW4oV0tWaWV3UmVmKTsKK1dLX0VYUE9SVCBib29sIFdLVmlld0lzRnVs
bFNjcmVlbihXS1ZpZXdSZWYpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLVmlld0NsaWVudC5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tWaWV3Q2xpZW50
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNGI0NTAyMzc5OTAwODhmMmY2ZDZlOTQxM2UxZjM0N2U4ZjdkN2E5Nwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0
aW9uL1dLVmlld0NsaWVudC5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlIDxXZWJLaXQvV0tCYXNlLmg+CisjaW5jbHVkZSA8V2ViS2l0
L1dLR2VvbWV0cnkuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRp
ZgorCitlbnVtIHsKKyAgICBrV0tDdXJzb3JUeXBlUG9pbnRlciA9IDAsCisgICAga1dLQ3Vyc29y
VHlwZUhhbmQgPSAyLAorICAgIGtXS0N1cnNvclR5cGVOb25lID0gMzcsCit9OwordHlwZWRlZiB1
aW50MzJfdCBXS0N1cnNvclR5cGU7CisKK3R5cGVkZWYgdm9pZCgqV0tWaWV3U2V0Vmlld05lZWRz
RGlzcGxheUNhbGxiYWNrKShXS1ZpZXdSZWYgdmlldywgV0tSZWN0IHJlY3QsIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pOwordHlwZWRlZiB2b2lkKCpXS1ZpZXdFbnRlckZ1bGxTY3JlZW4pKFdLVmll
d1JlZiB2aWV3LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK3R5cGVkZWYgdm9pZCgqV0tWaWV3
RXhpdEZ1bGxTY3JlZW4pKFdLVmlld1JlZiB2aWV3LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsK
K3R5cGVkZWYgdm9pZCgqV0tWaWV3Q2xvc2VGdWxsU2NyZWVuKShXS1ZpZXdSZWYgdmlldywgY29u
c3Qgdm9pZCogY2xpZW50SW5mbyk7Cit0eXBlZGVmIHZvaWQoKldLVmlld0JlZ2FuRW50ZXJGdWxs
U2NyZWVuKShXS1ZpZXdSZWYgdmlldywgY29uc3QgV0tSZWN0IGluaXRpYWxGcmFtZSwgY29uc3Qg
V0tSZWN0IGZpbmFsRnJhbWUsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwordHlwZWRlZiB2b2lk
KCpXS1ZpZXdCZWdhbkV4aXRGdWxsU2NyZWVuKShXS1ZpZXdSZWYgdmlldywgY29uc3QgV0tSZWN0
IGluaXRpYWxGcmFtZSwgY29uc3QgV0tSZWN0IGZpbmFsRnJhbWUsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pOwordHlwZWRlZiB2b2lkKCpXS1ZpZXdTZXRDdXJzb3JDYWxsYmFjaykoV0tWaWV3UmVm
IHZpZXcsIFdLQ3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsK
KwordHlwZWRlZiBzdHJ1Y3QgV0tWaWV3Q2xpZW50QmFzZSB7CisgICAgaW50IHZlcnNpb247Cisg
ICAgY29uc3Qgdm9pZCogY2xpZW50SW5mbzsKK30gV0tWaWV3Q2xpZW50QmFzZTsKKwordHlwZWRl
ZiBzdHJ1Y3QgV0tWaWV3Q2xpZW50VjAgeworICAgIFdLVmlld0NsaWVudEJhc2UgYmFzZTsKKwor
ICAgIC8vIHZlcnNpb24gMAorICAgIFdLVmlld1NldFZpZXdOZWVkc0Rpc3BsYXlDYWxsYmFjayBz
ZXRWaWV3TmVlZHNEaXNwbGF5OworICAgIFdLVmlld0VudGVyRnVsbFNjcmVlbiBlbnRlckZ1bGxT
Y3JlZW47CisgICAgV0tWaWV3RXhpdEZ1bGxTY3JlZW4gZXhpdEZ1bGxTY3JlZW47CisgICAgV0tW
aWV3Q2xvc2VGdWxsU2NyZWVuIGNsb3NlRnVsbFNjcmVlbjsKKyAgICBXS1ZpZXdCZWdhbkVudGVy
RnVsbFNjcmVlbiBiZWdhbkVudGVyRnVsbFNjcmVlbjsKKyAgICBXS1ZpZXdCZWdhbkV4aXRGdWxs
U2NyZWVuIGJlZ2FuRXhpdEZ1bGxTY3JlZW47CisgICAgV0tWaWV3U2V0Q3Vyc29yQ2FsbGJhY2sg
c2V0Q3Vyc29yOworfSBXS1ZpZXdDbGllbnRWMDsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9Cisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0
aW9uL1dLVmlld1BhZ2VMb2FkU3RhdGVDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9DL3BsYXlzdGF0aW9uL1dLVmlld1BhZ2VMb2FkU3RhdGVDbGllbnQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4yYThkZjI3ODBlMjQxYTQzZTVlYWRmOTM1MzhkODEzNjAyYmRjMDNmCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tWaWV3UGFn
ZUxvYWRTdGF0ZUNsaWVudC5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlIDxXZWJLaXQvV0tCYXNlLmg+CisKKyNpZmRlZiBfX2NwbHVz
cGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKwordHlwZWRlZiB2b2lkKCpXS1ZpZXdQYWdlTG9h
ZFN0YXRlQ2xpZW50Q2FsbGJhY2spKFdLVmlld1JlZiB2aWV3LCBjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKTsKKwordHlwZWRlZiB2b2lkKCpXS1ZpZXdQYWdlTG9hZFN0YXRlRGlkQ2hhbmdlVGl0bGVD
YWxsYmFjaykoV0tWaWV3UmVmIHZpZXcsIFdLU3RyaW5nUmVmIHRpdGxlLCBjb25zdCB2b2lkKiBj
bGllbnRJbmZvKTsKK3R5cGVkZWYgdm9pZCgqV0tWaWV3UGFnZUxvYWRTdGF0ZURpZENoYW5nZUFj
dGl2ZVVSTENhbGxiYWNrKShXS1ZpZXdSZWYgdmlldywgV0tTdHJpbmdSZWYgdXJsLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKTsKK3R5cGVkZWYgdm9pZCgqV0tWaWV3UGFnZUxvYWRTdGF0ZURpZENo
YW5nZUVzdGltYXRlZFByb2dyZXNzQ2FsbGJhY2spKFdLVmlld1JlZiB2aWV3LCBkb3VibGUgcHJv
Z3Jlc3MsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwordHlwZWRlZiB2b2lkKCpXS1ZpZXdQYWdl
TG9hZFN0YXRlRGlkQ2hhbmdlV2ViUHJvY2Vzc0lzUmVzcG9uc2l2ZUNhbGxiYWNrKShXS1ZpZXdS
ZWYgdmlldywgYm9vbCBpc1Jlc3BvbnNpdmUsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworCit0
eXBlZGVmIHN0cnVjdCBXS1ZpZXdQYWdlTG9hZFN0YXRlQ2xpZW50QmFzZSB7CisgICAgaW50IHZl
cnNpb247CisgICAgY29uc3Qgdm9pZCogY2xpZW50SW5mbzsKK30gV0tWaWV3UGFnZUxvYWRTdGF0
ZUNsaWVudEJhc2U7CisKK3R5cGVkZWYgc3RydWN0IFdLVmlld1BhZ2VMb2FkU3RhdGVDbGllbnRW
MCB7CisgICAgV0tWaWV3UGFnZUxvYWRTdGF0ZUNsaWVudEJhc2UgYmFzZTsKKworICAgIC8vIHZl
cnNpb24gMAorICAgIFdLVmlld1BhZ2VMb2FkU3RhdGVEaWRDaGFuZ2VUaXRsZUNhbGxiYWNrIGRp
ZENoYW5nZVRpdGxlOworICAgIFdLVmlld1BhZ2VMb2FkU3RhdGVEaWRDaGFuZ2VBY3RpdmVVUkxD
YWxsYmFjayBkaWRDaGFuZ2VBY3RpdmVVUkw7CisgICAgV0tWaWV3UGFnZUxvYWRTdGF0ZURpZENo
YW5nZUVzdGltYXRlZFByb2dyZXNzQ2FsbGJhY2sgZGlkQ2hhbmdlRXN0aW1hdGVkUHJvZ3Jlc3M7
CisgICAgV0tWaWV3UGFnZUxvYWRTdGF0ZURpZENoYW5nZVdlYlByb2Nlc3NJc1Jlc3BvbnNpdmVD
YWxsYmFjayBkaWRDaGFuZ2VXZWJQcm9jZXNzSXNSZXNwb25zaXZlOworICAgIFdLVmlld1BhZ2VM
b2FkU3RhdGVDbGllbnRDYWxsYmFjayBkaWRTd2FwV2ViUHJvY2Vzc2VzOworfSBXS1ZpZXdQYWdl
TG9hZFN0YXRlQ2xpZW50VjA7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvcGxheXN0YXRpb24vQVBJVmlld0Ns
aWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3BsYXlzdGF0aW9uL0FQSVZpZXdD
bGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi41ZDQ4YzM4M2RkZjYxNmE1NjY0NDgxMmMzYTk5ZmYxYmY1OTE0
OTViCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3BsYXlz
dGF0aW9uL0FQSVZpZXdDbGllbnQuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBDdXJzb3I7CitjbGFz
cyBJbnRSZWN0OworY2xhc3MgUmVnaW9uOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNz
IFBsYXlTdGF0aW9uV2ViVmlldzsKK30KKworbmFtZXNwYWNlIEFQSSB7CisKK2NsYXNzIFZpZXdD
bGllbnQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHZpcnR1
YWwgflZpZXdDbGllbnQoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Vmlld05l
ZWRzRGlzcGxheShXZWJLaXQ6OlBsYXlTdGF0aW9uV2ViVmlldyYsIGNvbnN0IFdlYkNvcmU6OlJl
Z2lvbiYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxTY3JlZW4oV2ViS2l0OjpQbGF5
U3RhdGlvbldlYlZpZXcmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxTY3JlZW4oV2Vi
S2l0OjpQbGF5U3RhdGlvbldlYlZpZXcmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2VGdWxs
U2NyZWVuKFdlYktpdDo6UGxheVN0YXRpb25XZWJWaWV3JikgeyB9CisgICAgdmlydHVhbCB2b2lk
IGJlZ2FuRW50ZXJGdWxsU2NyZWVuKFdlYktpdDo6UGxheVN0YXRpb25XZWJWaWV3JiwgY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgYmVnYW5FeGl0RnVsbFNjcmVlbihXZWJLaXQ6OlBsYXlTdGF0aW9uV2ViVmlldyYs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgeyB9Cisg
ICAgdmlydHVhbCB2b2lkIHNldEN1cnNvcihXZWJLaXQ6OlBsYXlTdGF0aW9uV2ViVmlldyYgdmll
dywgY29uc3QgV2ViQ29yZTo6Q3Vyc29yJiBjdXJzb3IpIHsgfQorfTsKKworfSAvLyBuYW1lc3Bh
Y2UgQVBJCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvcGxheXN0YXRp
b24vQVBJVmlld1BhZ2VMb2FkU3RhdGVDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9wbGF5c3RhdGlvbi9BUElWaWV3UGFnZUxvYWRTdGF0ZUNsaWVudC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjE4Y2RhOWM0MzJiMTZiOTk1MGVkNDRmMzVhZDlmMjVkN2M1ZjFjODEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvcGxheXN0YXRpb24vQVBJVmlld1BhZ2VM
b2FkU3RhdGVDbGllbnQuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFBsYXlTdGF0aW9uV2ViVmlldzsK
K30KKworbmFtZXNwYWNlIEFQSSB7CisKK2NsYXNzIFZpZXdQYWdlTG9hZFN0YXRlQ2xpZW50IHsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5WaWV3
UGFnZUxvYWRTdGF0ZUNsaWVudCgpID0gZGVmYXVsdDsKKworICAgIHZpcnR1YWwgdm9pZCBkaWRD
aGFuZ2VUaXRsZShXZWJLaXQ6OlBsYXlTdGF0aW9uV2ViVmlldyYsIGNvbnN0IFdURjo6U3RyaW5n
JikgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUFjdGl2ZVVSTChXZWJLaXQ6OlBsYXlT
dGF0aW9uV2ViVmlldyYsIGNvbnN0IFdURjo6U3RyaW5nJikgeyB9CisgICAgdmlydHVhbCB2b2lk
IGRpZENoYW5nZUVzdGltYXRlZFByb2dyZXNzKFdlYktpdDo6UGxheVN0YXRpb25XZWJWaWV3Jiwg
ZG91YmxlKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlV2ViUHJvY2Vzc0lzUmVzcG9u
c2l2ZShXZWJLaXQ6OlBsYXlTdGF0aW9uV2ViVmlldyYsIGJvb2wpIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBkaWRTd2FwV2ViUHJvY2Vzc2VzKFdlYktpdDo6UGxheVN0YXRpb25XZWJWaWV3JikgeyB9
Cit9OworCit9IC8vIG5hbWVzcGFjZSBBUEkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL3BsYXlzdGF0aW9uL1BhZ2VDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL3BsYXlzdGF0aW9uL1BhZ2VDbGllbnRJbXBsLmNwcAppbmRleCA2NGE0Y2E3MmY5NWFk
OGE0Y2RiYmU2YWQ4N2I2N2UwZGIwODIwODliLi4zOTQxZTlmYjE4NmZlMDJjNTE2YzJjODk0Nzkz
YjI4YTQ5MDUyN2FmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9wbGF5c3Rh
dGlvbi9QYWdlQ2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvcGxh
eXN0YXRpb24vUGFnZUNsaWVudEltcGwuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ1LDYgKzQ1LDcgQEAgc3RkOjp1bmlxdWVf
cHRyPERyYXdpbmdBcmVhUHJveHk+IFBhZ2VDbGllbnRJbXBsOjpjcmVhdGVEcmF3aW5nQXJlYVBy
b3h5KFdlYlByb2MKIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0Vmlld05lZWRzRGlzcGxheShj
b25zdCBXZWJDb3JlOjpSZWdpb24mIHJlZ2lvbikKIHsKKyAgICBtX3ZpZXcuc2V0Vmlld05lZWRz
RGlzcGxheShyZWdpb24pOwogfQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpyZXF1ZXN0U2Nyb2xs
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYgc2Nyb2xsT3JpZ2luKQpAQCAtNTgsMjggKzU5LDI3IEBAIFdlYkNvcmU6OkZs
b2F0UG9pbnQgUGFnZUNsaWVudEltcGw6OnZpZXdTY3JvbGxQb3NpdGlvbigpCiAKIFdlYkNvcmU6
OkludFNpemUgUGFnZUNsaWVudEltcGw6OnZpZXdTaXplKCkKIHsKLSAgICByZXR1cm4gV2ViQ29y
ZTo6SW50U2l6ZSB7IH07CisgICAgcmV0dXJuIG1fdmlldy52aWV3U2l6ZSgpOwogfQogCiBib29s
IFBhZ2VDbGllbnRJbXBsOjppc1ZpZXdXaW5kb3dBY3RpdmUoKQogewotICAgIHJldHVybiBtX3Zp
ZXcuaXNBY3RpdmUoKTsKKyAgICByZXR1cm4gbV92aWV3LnZpZXdTdGF0ZSgpLmNvbnRhaW5zKFdl
YkNvcmU6OkFjdGl2aXR5U3RhdGU6OldpbmRvd0lzQWN0aXZlKTsKIH0KIAogYm9vbCBQYWdlQ2xp
ZW50SW1wbDo6aXNWaWV3Rm9jdXNlZCgpCiB7Ci0gICAgcmV0dXJuIG1fdmlldy5pc0ZvY3VzZWQo
KTsKKyAgICByZXR1cm4gbV92aWV3LnZpZXdTdGF0ZSgpLmNvbnRhaW5zKFdlYkNvcmU6OkFjdGl2
aXR5U3RhdGU6OklzRm9jdXNlZCk7CiB9CiAKIGJvb2wgUGFnZUNsaWVudEltcGw6OmlzVmlld1Zp
c2libGUoKQogewotICAgIHJldHVybiBtX3ZpZXcuaXNWaXNpYmxlKCk7CisgICAgcmV0dXJuIG1f
dmlldy52aWV3U3RhdGUoKS5jb250YWlucyhXZWJDb3JlOjpBY3Rpdml0eVN0YXRlOjpJc1Zpc2li
bGUpOwogfQogCiBib29sIFBhZ2VDbGllbnRJbXBsOjppc1ZpZXdJbldpbmRvdygpCiB7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gbV92aWV3LnZp
ZXdTdGF0ZSgpLmNvbnRhaW5zKFdlYkNvcmU6OkFjdGl2aXR5U3RhdGU6OklzSW5XaW5kb3cpOwog
fQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpwcm9jZXNzRGlkRXhpdCgpCkBAIC04OSw2ICs4OSw3
IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OnByb2Nlc3NEaWRFeGl0KCkKIHZvaWQgUGFnZUNsaWVu
dEltcGw6OmRpZFJlbGF1bmNoUHJvY2VzcygpCiB7CiB9CisKIHZvaWQgUGFnZUNsaWVudEltcGw6
OnBhZ2VDbG9zZWQoKQogewogfQpAQCAtMTE3LDcgKzExOCw3IEBAIHZvaWQgUGFnZUNsaWVudElt
cGw6OmRpZENoYW5nZUNvbnRlbnRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCiAK
IHZvaWQgUGFnZUNsaWVudEltcGw6OnNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImIGN1
cnNvcikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIG1fdmlldy5zZXRDdXJzb3IoY3Vy
c29yKTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0Q3Vyc29ySGlkZGVuVW50aWxNb3Vz
ZU1vdmVzKGJvb2wpCkBAIC0yMTAsNiArMjExLDM2IEBAIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJv
eHlDbGllbnQmIFBhZ2VDbGllbnRJbXBsOjpmdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50KCkK
IHsKICAgICByZXR1cm4gKihXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50Kil0aGlzOwog
fQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpjbG9zZUZ1bGxTY3JlZW5NYW5hZ2VyKCkKK3sKKyAg
ICBtX3ZpZXcuY2xvc2VGdWxsU2NyZWVuTWFuYWdlcigpOworfQorCitib29sIFBhZ2VDbGllbnRJ
bXBsOjppc0Z1bGxTY3JlZW4oKQoreworICAgIHJldHVybiBtX3ZpZXcuaXNGdWxsU2NyZWVuKCk7
Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmVudGVyRnVsbFNjcmVlbigpCit7CisgICAgbV92
aWV3LmVudGVyRnVsbFNjcmVlbigpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpleGl0RnVs
bFNjcmVlbigpCit7CisgICAgbV92aWV3LmV4aXRGdWxsU2NyZWVuKCk7Cit9CisKK3ZvaWQgUGFn
ZUNsaWVudEltcGw6OmJlZ2FuRW50ZXJGdWxsU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IGluaXRpYWxGcmFtZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZmluYWxGcmFtZSkKK3sKKyAg
ICBtX3ZpZXcuYmVnYW5FbnRlckZ1bGxTY3JlZW4oaW5pdGlhbEZyYW1lLCBmaW5hbEZyYW1lKTsK
K30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6YmVnYW5FeGl0RnVsbFNjcmVlbihjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiBpbml0aWFsRnJhbWUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGZpbmFs
RnJhbWUpCit7CisgICAgbV92aWV3LmJlZ2FuRXhpdEZ1bGxTY3JlZW4oaW5pdGlhbEZyYW1lLCBm
aW5hbEZyYW1lKTsKK30KICNlbmRpZgogCiAvLyBDdXN0b20gcmVwcmVzZW50YXRpb25zLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvcGxheXN0YXRpb24vUGFnZUNsaWVudElt
cGwuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3BsYXlzdGF0aW9uL1BhZ2VDbGllbnRJbXBs
LmgKaW5kZXggMzhiOTdlYmI1YTQ2NjNkOWMwMTkyZDAyNjAwOThiZmQxYjA3OTVjMi4uNzViZTlk
MDU2MmZiNzE0ODEyZGE2OWVjMzZmZDdiMTc1NDQ2NTk0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvcGxheXN0YXRpb24vUGFnZUNsaWVudEltcGwuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9wbGF5c3RhdGlvbi9QYWdlQ2xpZW50SW1wbC5oCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFp
bm1lbnQgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0
YWlubWVudCBJbmMuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2
LDkgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiUGFnZUNsaWVudC5oIgorI2lmIEVOQUJM
RShGVUxMU0NSRUVOX0FQSSkKKyNpbmNsdWRlICJXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5Lmgi
CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTExMSw2ICsxMTQsMTMgQEAgcHJp
dmF0ZToKICAgICAvLyBBdXhpbGlhcnkgQ2xpZW50IENyZWF0aW9uCiAjaWYgRU5BQkxFKEZVTExT
Q1JFRU5fQVBJKQogICAgIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlDbGllbnQmIGZ1bGxTY3Jl
ZW5NYW5hZ2VyUHJveHlDbGllbnQoKSBmaW5hbDsKKworICAgIHZvaWQgY2xvc2VGdWxsU2NyZWVu
TWFuYWdlcigpIGZpbmFsOworICAgIGJvb2wgaXNGdWxsU2NyZWVuKCkgZmluYWw7CisgICAgdm9p
ZCBlbnRlckZ1bGxTY3JlZW4oKSBmaW5hbDsKKyAgICB2b2lkIGV4aXRGdWxsU2NyZWVuKCkgZmlu
YWw7CisgICAgdm9pZCBiZWdhbkVudGVyRnVsbFNjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiBpbml0aWFsRnJhbWUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGZpbmFsRnJhbWUpIGZpbmFs
OworICAgIHZvaWQgYmVnYW5FeGl0RnVsbFNjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBp
bml0aWFsRnJhbWUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGZpbmFsRnJhbWUpIGZpbmFsOwog
I2VuZGlmCiAKICAgICAvLyBDdXN0b20gcmVwcmVzZW50YXRpb25zLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvcGxheXN0YXRpb24vUGFnZUxvYWRTdGF0ZU9ic2VydmVyLmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3BsYXlzdGF0aW9uL1BhZ2VMb2FkU3RhdGVPYnNl
cnZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNGY5YzgyMDcyZTI2YjdkNTJjNDgyMmNhYzM0YjgwZTVkN2Zh
M2JiNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3BsYXlzdGF0
aW9uL1BhZ2VMb2FkU3RhdGVPYnNlcnZlci5jcHAKQEAgLTAsMCArMSwxMjcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhZ2VMb2FkU3RhdGVPYnNl
cnZlci5oIgorCisjaW5jbHVkZSAiUGxheVN0YXRpb25XZWJWaWV3LmgiCisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitQYWdlTG9hZFN0YXRlT2JzZXJ2ZXI6OlBhZ2VMb2FkU3RhdGVPYnNlcnZlcihQ
bGF5U3RhdGlvbldlYlZpZXcmIHZpZXcpCisgICAgOiBtX3ZpZXcodmlldykKK3sKK30KKwordm9p
ZCBQYWdlTG9hZFN0YXRlT2JzZXJ2ZXI6OndpbGxDaGFuZ2VJc0xvYWRpbmcoKQoreworfQorCit2
b2lkIFBhZ2VMb2FkU3RhdGVPYnNlcnZlcjo6ZGlkQ2hhbmdlSXNMb2FkaW5nKCkKK3sKK30KKwor
dm9pZCBQYWdlTG9hZFN0YXRlT2JzZXJ2ZXI6OndpbGxDaGFuZ2VUaXRsZSgpCit7Cit9CisKK3Zv
aWQgUGFnZUxvYWRTdGF0ZU9ic2VydmVyOjpkaWRDaGFuZ2VUaXRsZSgpCit7CisgICAgbV92aWV3
LmRpZENoYW5nZVRpdGxlKCk7Cit9CisKK3ZvaWQgUGFnZUxvYWRTdGF0ZU9ic2VydmVyOjp3aWxs
Q2hhbmdlQWN0aXZlVVJMKCkKK3sKK30KKwordm9pZCBQYWdlTG9hZFN0YXRlT2JzZXJ2ZXI6OmRp
ZENoYW5nZUFjdGl2ZVVSTCgpCit7CisgICAgbV92aWV3LmRpZENoYW5nZUFjdGl2ZVVSTCgpOwor
fQorCit2b2lkIFBhZ2VMb2FkU3RhdGVPYnNlcnZlcjo6d2lsbENoYW5nZUhhc09ubHlTZWN1cmVD
b250ZW50KCkKK3sKK30KKwordm9pZCBQYWdlTG9hZFN0YXRlT2JzZXJ2ZXI6OmRpZENoYW5nZUhh
c09ubHlTZWN1cmVDb250ZW50KCkKK3sKK30KKwordm9pZCBQYWdlTG9hZFN0YXRlT2JzZXJ2ZXI6
OndpbGxDaGFuZ2VFc3RpbWF0ZWRQcm9ncmVzcygpCit7Cit9CisKK3ZvaWQgUGFnZUxvYWRTdGF0
ZU9ic2VydmVyOjpkaWRDaGFuZ2VFc3RpbWF0ZWRQcm9ncmVzcygpCit7CisgICAgbV92aWV3LmRp
ZENoYW5nZUVzdGltYXRlZFByb2dyZXNzKCk7Cit9CisKK3ZvaWQgUGFnZUxvYWRTdGF0ZU9ic2Vy
dmVyOjp3aWxsQ2hhbmdlQ2FuR29CYWNrKCkKK3sKK30KKwordm9pZCBQYWdlTG9hZFN0YXRlT2Jz
ZXJ2ZXI6OmRpZENoYW5nZUNhbkdvQmFjaygpCit7Cit9CisKK3ZvaWQgUGFnZUxvYWRTdGF0ZU9i
c2VydmVyOjp3aWxsQ2hhbmdlQ2FuR29Gb3J3YXJkKCkKK3sKK30KKwordm9pZCBQYWdlTG9hZFN0
YXRlT2JzZXJ2ZXI6OmRpZENoYW5nZUNhbkdvRm9yd2FyZCgpCit7Cit9CisKK3ZvaWQgUGFnZUxv
YWRTdGF0ZU9ic2VydmVyOjp3aWxsQ2hhbmdlTmV0d29ya1JlcXVlc3RzSW5Qcm9ncmVzcygpCit7
Cit9CisKK3ZvaWQgUGFnZUxvYWRTdGF0ZU9ic2VydmVyOjpkaWRDaGFuZ2VOZXR3b3JrUmVxdWVz
dHNJblByb2dyZXNzKCkKK3sKK30KKwordm9pZCBQYWdlTG9hZFN0YXRlT2JzZXJ2ZXI6OndpbGxD
aGFuZ2VDZXJ0aWZpY2F0ZUluZm8oKQoreworfQorCit2b2lkIFBhZ2VMb2FkU3RhdGVPYnNlcnZl
cjo6ZGlkQ2hhbmdlQ2VydGlmaWNhdGVJbmZvKCkKK3sKK30KKwordm9pZCBQYWdlTG9hZFN0YXRl
T2JzZXJ2ZXI6OndpbGxDaGFuZ2VXZWJQcm9jZXNzSXNSZXNwb25zaXZlKCkKK3sKK30KKwordm9p
ZCBQYWdlTG9hZFN0YXRlT2JzZXJ2ZXI6OmRpZENoYW5nZVdlYlByb2Nlc3NJc1Jlc3BvbnNpdmUo
KQoreworICAgIG1fdmlldy5kaWRDaGFuZ2VXZWJQcm9jZXNzSXNSZXNwb25zaXZlKCk7Cit9CisK
K3ZvaWQgUGFnZUxvYWRTdGF0ZU9ic2VydmVyOjpkaWRTd2FwV2ViUHJvY2Vzc2VzKCkKK3sKKyAg
ICBtX3ZpZXcuZGlkU3dhcFdlYlByb2Nlc3NlcygpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3BsYXlzdGF0aW9uL1BhZ2VM
b2FkU3RhdGVPYnNlcnZlci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvcGxheXN0YXRpb24v
UGFnZUxvYWRTdGF0ZU9ic2VydmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWE1NDFmOTczNmZjNDViYmM0NTg1
NWUyNTg1YmU4NThlOWM5MDIwMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL3BsYXlzdGF0aW9uL1BhZ2VMb2FkU3RhdGVPYnNlcnZlci5oCkBAIC0wLDAgKzEsNzUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5t
ZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJQYWdlTG9hZFN0
YXRlLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBQbGF5U3RhdGlvbldlYlZpZXc7
CisKK2NsYXNzIFBhZ2VMb2FkU3RhdGVPYnNlcnZlciA6IHB1YmxpYyBQYWdlTG9hZFN0YXRlOjpP
YnNlcnZlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgUGFn
ZUxvYWRTdGF0ZU9ic2VydmVyKFBsYXlTdGF0aW9uV2ViVmlldyYpOworCisgICAgdm9pZCB3aWxs
Q2hhbmdlSXNMb2FkaW5nKCkgZmluYWw7CisgICAgdm9pZCBkaWRDaGFuZ2VJc0xvYWRpbmcoKSBm
aW5hbDsKKworICAgIHZvaWQgd2lsbENoYW5nZVRpdGxlKCkgZmluYWw7CisgICAgdm9pZCBkaWRD
aGFuZ2VUaXRsZSgpIGZpbmFsOworCisgICAgdm9pZCB3aWxsQ2hhbmdlQWN0aXZlVVJMKCkgZmlu
YWw7CisgICAgdm9pZCBkaWRDaGFuZ2VBY3RpdmVVUkwoKSBmaW5hbDsKKworICAgIHZvaWQgd2ls
bENoYW5nZUhhc09ubHlTZWN1cmVDb250ZW50KCkgZmluYWw7CisgICAgdm9pZCBkaWRDaGFuZ2VI
YXNPbmx5U2VjdXJlQ29udGVudCgpIGZpbmFsOworCisgICAgdm9pZCB3aWxsQ2hhbmdlRXN0aW1h
dGVkUHJvZ3Jlc3MoKSBmaW5hbDsKKyAgICB2b2lkIGRpZENoYW5nZUVzdGltYXRlZFByb2dyZXNz
KCkgZmluYWw7CisKKyAgICB2b2lkIHdpbGxDaGFuZ2VDYW5Hb0JhY2soKSBmaW5hbDsKKyAgICB2
b2lkIGRpZENoYW5nZUNhbkdvQmFjaygpIGZpbmFsOworCisgICAgdm9pZCB3aWxsQ2hhbmdlQ2Fu
R29Gb3J3YXJkKCkgZmluYWw7CisgICAgdm9pZCBkaWRDaGFuZ2VDYW5Hb0ZvcndhcmQoKSBmaW5h
bDsKKworICAgIHZvaWQgd2lsbENoYW5nZU5ldHdvcmtSZXF1ZXN0c0luUHJvZ3Jlc3MoKSBmaW5h
bDsKKyAgICB2b2lkIGRpZENoYW5nZU5ldHdvcmtSZXF1ZXN0c0luUHJvZ3Jlc3MoKSBmaW5hbDsK
KworICAgIHZvaWQgd2lsbENoYW5nZUNlcnRpZmljYXRlSW5mbygpIGZpbmFsOworICAgIHZvaWQg
ZGlkQ2hhbmdlQ2VydGlmaWNhdGVJbmZvKCkgZmluYWw7CisKKyAgICB2b2lkIHdpbGxDaGFuZ2VX
ZWJQcm9jZXNzSXNSZXNwb25zaXZlKCkgZmluYWw7CisgICAgdm9pZCBkaWRDaGFuZ2VXZWJQcm9j
ZXNzSXNSZXNwb25zaXZlKCkgZmluYWw7CisKKyAgICB2b2lkIGRpZFN3YXBXZWJQcm9jZXNzZXMo
KSBmaW5hbDsKKworcHJpdmF0ZToKKyAgICBQbGF5U3RhdGlvbldlYlZpZXcmIG1fdmlldzsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvcGxheXN0YXRpb24vUGxheVN0YXRpb25XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL3BsYXlzdGF0aW9uL1BsYXlTdGF0aW9uV2ViVmlldy5jcHAKaW5kZXggZmViMWE3
MjI0MjViZjkyYzU5NGNjYWRkMDkwZTZhODNjMWRkNDUxMi4uNTVlZTUzMDZmNDE2NmQzMDQ4MDU1
MGJmNTIwNTk4MmNkMGEyODM5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
cGxheXN0YXRpb24vUGxheVN0YXRpb25XZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9wbGF5c3RhdGlvbi9QbGF5U3RhdGlvbldlYlZpZXcuY3BwCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1l
bnQgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlu
bWVudCBJbmMuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDMxICszOSwx
NTkgQEAgUmVmUHRyPFBsYXlTdGF0aW9uV2ViVmlldz4gUGxheVN0YXRpb25XZWJWaWV3OjpjcmVh
dGUoY29uc3QgQVBJOjpQYWdlQ29uZmlndXJhdGkKIAogUGxheVN0YXRpb25XZWJWaWV3OjpQbGF5
U3RhdGlvbldlYlZpZXcoY29uc3QgQVBJOjpQYWdlQ29uZmlndXJhdGlvbiYgY29uZikKICAgICA6
IG1fcGFnZUNsaWVudChtYWtlVW5pcXVlPFBhZ2VDbGllbnRJbXBsPigqdGhpcykpCisgICAgLCBt
X3ZpZXdTdGF0ZUZsYWdzIHsgV2ViQ29yZTo6QWN0aXZpdHlTdGF0ZTo6V2luZG93SXNBY3RpdmUs
IFdlYkNvcmU6OkFjdGl2aXR5U3RhdGU6OklzRm9jdXNlZCwgV2ViQ29yZTo6QWN0aXZpdHlTdGF0
ZTo6SXNWaXNpYmxlLCBXZWJDb3JlOjpBY3Rpdml0eVN0YXRlOjpJc0luV2luZG93IH0KIHsKICAg
ICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBjb25mLmNvcHkoKTsKICAgICBhdXRvKiBwb29sID0gY29u
ZmlndXJhdGlvbi0+cHJvY2Vzc1Bvb2woKTsKICAgICBtX3BhZ2UgPSBwb29sLT5jcmVhdGVXZWJQ
YWdlKCptX3BhZ2VDbGllbnQsIFdURk1vdmUoY29uZmlndXJhdGlvbikpOwogCiAgICAgbV9wYWdl
LT5pbml0aWFsaXplV2ViUGFnZSgpOworICAgIG1fcGFnZUxvYWRTdGF0ZU9ic2VydmVyID0gbWFr
ZVVuaXF1ZTxQYWdlTG9hZFN0YXRlT2JzZXJ2ZXI+KCp0aGlzKTsKKyAgICBtX3BhZ2UtPnBhZ2VM
b2FkU3RhdGUoKS5hZGRPYnNlcnZlcigqbV9wYWdlTG9hZFN0YXRlT2JzZXJ2ZXIpOwogfQogCiBQ
bGF5U3RhdGlvbldlYlZpZXc6On5QbGF5U3RhdGlvbldlYlZpZXcoKQogeworICAgIG1fcGFnZS0+
cGFnZUxvYWRTdGF0ZSgpLnJlbW92ZU9ic2VydmVyKCptX3BhZ2VMb2FkU3RhdGVPYnNlcnZlcik7
CisgICAgbV9wYWdlTG9hZFN0YXRlT2JzZXJ2ZXIucmVzZXQoKTsKIH0KIAotYm9vbCBQbGF5U3Rh
dGlvbldlYlZpZXc6OmlzQWN0aXZlKCkgY29uc3QKK3ZvaWQgUGxheVN0YXRpb25XZWJWaWV3Ojpz
ZXRDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6Vmlld0NsaWVudD4mJiBjbGllbnQpCiB7Ci0g
ICAgcmV0dXJuIG1fYWN0aXZlOworICAgIGlmICghY2xpZW50KQorICAgICAgICBtX2NsaWVudCA9
IG1ha2VVbmlxdWU8QVBJOjpWaWV3Q2xpZW50PigpOworICAgIGVsc2UKKyAgICAgICAgbV9jbGll
bnQgPSBXVEZNb3ZlKGNsaWVudCk7CiB9CiAKLWJvb2wgUGxheVN0YXRpb25XZWJWaWV3Ojppc0Zv
Y3VzZWQoKSBjb25zdAordm9pZCBQbGF5U3RhdGlvbldlYlZpZXc6OnNldFBhZ2VMb2FkU3RhdGVD
bGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6Vmlld1BhZ2VMb2FkU3RhdGVDbGllbnQ+JiYgcGFn
ZUxvYWRTdGF0ZUNsaWVudCkKIHsKLSAgICByZXR1cm4gbV9mb2N1c2VkOworICAgIGlmICghcGFn
ZUxvYWRTdGF0ZUNsaWVudCkKKyAgICAgICAgbV9wYWdlTG9hZFN0YXRlQ2xpZW50ID0gbWFrZVVu
aXF1ZTxBUEk6OlZpZXdQYWdlTG9hZFN0YXRlQ2xpZW50PigpOworICAgIGVsc2UKKyAgICAgICAg
bV9wYWdlTG9hZFN0YXRlQ2xpZW50ID0gV1RGTW92ZShwYWdlTG9hZFN0YXRlQ2xpZW50KTsKIH0K
IAotYm9vbCBQbGF5U3RhdGlvbldlYlZpZXc6OmlzVmlzaWJsZSgpIGNvbnN0Cit2b2lkIFBsYXlT
dGF0aW9uV2ViVmlldzo6c2V0Vmlld1NpemUoV2ViQ29yZTo6SW50U2l6ZSB2aWV3U2l6ZSkKIHsK
LSAgICByZXR1cm4gbV92aXNpYmxlOworICAgIG1fdmlld1NpemUgPSB2aWV3U2l6ZTsKK30KKwor
dm9pZCBQbGF5U3RhdGlvbldlYlZpZXc6OnNldFZpZXdTdGF0ZShPcHRpb25TZXQ8V2ViQ29yZTo6
QWN0aXZpdHlTdGF0ZTo6RmxhZz4gZmxhZ3MpCit7CisgICAgYXV0byBjaGFuZ2VkRmxhZ3MgPSBt
X3ZpZXdTdGF0ZUZsYWdzIF4gZmxhZ3M7CisgICAgbV92aWV3U3RhdGVGbGFncyA9IGZsYWdzOwor
CisgICAgaWYgKGNoYW5nZWRGbGFncykKKyAgICAgICAgbV9wYWdlLT5hY3Rpdml0eVN0YXRlRGlk
Q2hhbmdlKGNoYW5nZWRGbGFncyk7Cit9CisKK3ZvaWQgUGxheVN0YXRpb25XZWJWaWV3OjpzZXRW
aWV3TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNvcmU6OlJlZ2lvbiYgcmVnaW9uKQoreworICAgIGlm
IChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPnNldFZpZXdOZWVkc0Rpc3BsYXkoKnRoaXMs
IHJlZ2lvbik7Cit9CisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCit2b2lkIFBsYXlTdGF0
aW9uV2ViVmlldzo6d2lsbEVudGVyRnVsbFNjcmVlbigpCit7CisgICAgbV9pc0Z1bGxTY3JlZW4g
PSB0cnVlOworICAgIG1fcGFnZS0+ZnVsbFNjcmVlbk1hbmFnZXIoKS0+d2lsbEVudGVyRnVsbFNj
cmVlbigpOworfQorCit2b2lkIFBsYXlTdGF0aW9uV2ViVmlldzo6ZGlkRW50ZXJGdWxsU2NyZWVu
KCkKK3sKKyAgICBtX3BhZ2UtPmZ1bGxTY3JlZW5NYW5hZ2VyKCktPmRpZEVudGVyRnVsbFNjcmVl
bigpOworfQorCit2b2lkIFBsYXlTdGF0aW9uV2ViVmlldzo6d2lsbEV4aXRGdWxsU2NyZWVuKCkK
K3sKKyAgICBtX3BhZ2UtPmZ1bGxTY3JlZW5NYW5hZ2VyKCktPndpbGxFeGl0RnVsbFNjcmVlbigp
OworfQorCit2b2lkIFBsYXlTdGF0aW9uV2ViVmlldzo6ZGlkRXhpdEZ1bGxTY3JlZW4oKQorewor
ICAgIG1fcGFnZS0+ZnVsbFNjcmVlbk1hbmFnZXIoKS0+ZGlkRXhpdEZ1bGxTY3JlZW4oKTsKKyAg
ICBtX2lzRnVsbFNjcmVlbiA9IGZhbHNlOworfQorCit2b2lkIFBsYXlTdGF0aW9uV2ViVmlldzo6
cmVxdWVzdEV4aXRGdWxsU2NyZWVuKCkKK3sKKyAgICBpZiAoaXNGdWxsU2NyZWVuKCkpCisgICAg
ICAgIG1fcGFnZS0+ZnVsbFNjcmVlbk1hbmFnZXIoKS0+cmVxdWVzdEV4aXRGdWxsU2NyZWVuKCk7
Cit9CisKK3ZvaWQgUGxheVN0YXRpb25XZWJWaWV3OjpjbG9zZUZ1bGxTY3JlZW5NYW5hZ2VyKCkK
K3sKKyAgICBpZiAobV9jbGllbnQgJiYgaXNGdWxsU2NyZWVuKCkpCisgICAgICAgIG1fY2xpZW50
LT5jbG9zZUZ1bGxTY3JlZW4oKnRoaXMpOworICAgIG1faXNGdWxsU2NyZWVuID0gZmFsc2U7Cit9
CisKK2Jvb2wgUGxheVN0YXRpb25XZWJWaWV3Ojppc0Z1bGxTY3JlZW4oKQoreworICAgIHJldHVy
biBtX2lzRnVsbFNjcmVlbjsKK30KKwordm9pZCBQbGF5U3RhdGlvbldlYlZpZXc6OmVudGVyRnVs
bFNjcmVlbigpCit7CisgICAgaWYgKG1fY2xpZW50ICYmICFpc0Z1bGxTY3JlZW4oKSkKKyAgICAg
ICAgbV9jbGllbnQtPmVudGVyRnVsbFNjcmVlbigqdGhpcyk7Cit9CisKK3ZvaWQgUGxheVN0YXRp
b25XZWJWaWV3OjpleGl0RnVsbFNjcmVlbigpCit7CisgICAgaWYgKG1fY2xpZW50ICYmIGlzRnVs
bFNjcmVlbigpKQorICAgICAgICBtX2NsaWVudC0+ZXhpdEZ1bGxTY3JlZW4oKnRoaXMpOworfQor
Cit2b2lkIFBsYXlTdGF0aW9uV2ViVmlldzo6YmVnYW5FbnRlckZ1bGxTY3JlZW4oY29uc3QgV2Vi
Q29yZTo6SW50UmVjdCYgaW5pdGlhbEZyYW1lLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBmaW5h
bEZyYW1lKQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmJlZ2FuRW50
ZXJGdWxsU2NyZWVuKCp0aGlzLCBpbml0aWFsRnJhbWUsIGZpbmFsRnJhbWUpOworfQorCit2b2lk
IFBsYXlTdGF0aW9uV2ViVmlldzo6YmVnYW5FeGl0RnVsbFNjcmVlbihjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiBpbml0aWFsRnJhbWUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGZpbmFsRnJhbWUp
Cit7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+YmVnYW5FeGl0RnVsbFNj
cmVlbigqdGhpcywgaW5pdGlhbEZyYW1lLCBmaW5hbEZyYW1lKTsKK30KKyNlbmRpZgorCit2b2lk
IFBsYXlTdGF0aW9uV2ViVmlldzo6c2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYgY3Vy
c29yKQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPnNldEN1cnNvcigq
dGhpcywgY3Vyc29yKTsKK30KKwordm9pZCBQbGF5U3RhdGlvbldlYlZpZXc6OmRpZENoYW5nZVRp
dGxlKCkKK3sKKyAgICBpZiAobV9wYWdlTG9hZFN0YXRlQ2xpZW50KQorICAgICAgICBtX3BhZ2VM
b2FkU3RhdGVDbGllbnQtPmRpZENoYW5nZVRpdGxlKCp0aGlzLCBtX3BhZ2UtPnBhZ2VMb2FkU3Rh
dGUoKS50aXRsZSgpKTsKK30KKwordm9pZCBQbGF5U3RhdGlvbldlYlZpZXc6OmRpZENoYW5nZUFj
dGl2ZVVSTCgpCit7CisgICAgaWYgKG1fcGFnZUxvYWRTdGF0ZUNsaWVudCkKKyAgICAgICAgbV9w
YWdlTG9hZFN0YXRlQ2xpZW50LT5kaWRDaGFuZ2VBY3RpdmVVUkwoKnRoaXMsIG1fcGFnZS0+cGFn
ZUxvYWRTdGF0ZSgpLmFjdGl2ZVVSTCgpKTsKK30KKwordm9pZCBQbGF5U3RhdGlvbldlYlZpZXc6
OmRpZENoYW5nZUVzdGltYXRlZFByb2dyZXNzKCkKK3sKKyAgICBpZiAobV9wYWdlTG9hZFN0YXRl
Q2xpZW50KQorICAgICAgICBtX3BhZ2VMb2FkU3RhdGVDbGllbnQtPmRpZENoYW5nZUVzdGltYXRl
ZFByb2dyZXNzKCp0aGlzLCBtX3BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS5lc3RpbWF0ZWRQcm9ncmVz
cygpKTsKK30KKwordm9pZCBQbGF5U3RhdGlvbldlYlZpZXc6OmRpZENoYW5nZVdlYlByb2Nlc3NJ
c1Jlc3BvbnNpdmUoKQoreworICAgIGlmIChtX3BhZ2VMb2FkU3RhdGVDbGllbnQpCisgICAgICAg
IG1fcGFnZUxvYWRTdGF0ZUNsaWVudC0+ZGlkQ2hhbmdlV2ViUHJvY2Vzc0lzUmVzcG9uc2l2ZSgq
dGhpcywgbV9wYWdlLT5wcm9jZXNzKCkuaXNSZXNwb25zaXZlKCkpOworfQorCit2b2lkIFBsYXlT
dGF0aW9uV2ViVmlldzo6ZGlkU3dhcFdlYlByb2Nlc3NlcygpCit7CisgICAgaWYgKG1fcGFnZUxv
YWRTdGF0ZUNsaWVudCkKKyAgICAgICAgbV9wYWdlTG9hZFN0YXRlQ2xpZW50LT5kaWRTd2FwV2Vi
UHJvY2Vzc2VzKCp0aGlzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9wbGF5c3RhdGlvbi9QbGF5U3RhdGlvbldlYlZpZXcu
aCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3BsYXlzdGF0aW9uL1BsYXlTdGF0aW9uV2ViVmll
dy5oCmluZGV4IDE3OTU3MzYzMGRjM2VlNTM1NGMxMjUzZGQ1MGUzMTYyY2ExN2Q1MzIuLjk0ZGQ1
MGE3ZTA0YzA0MzY3MTBjODNlYTI5MGI3ODcxMzlkNzQ3OWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL3BsYXlzdGF0aW9uL1BsYXlTdGF0aW9uV2ViVmlldy5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL3BsYXlzdGF0aW9uL1BsYXlTdGF0aW9uV2ViVmlldy5oCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZl
IEVudGVydGFpbm1lbnQgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3Rp
dmUgRW50ZXJ0YWlubWVudCBJbmMuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI2LDcgKzI2LDEwIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFQSU9iamVjdC5oIgor
I2luY2x1ZGUgIkFQSVZpZXdDbGllbnQuaCIKKyNpbmNsdWRlICJBUElWaWV3UGFnZUxvYWRTdGF0
ZUNsaWVudC5oIgogI2luY2x1ZGUgIlBhZ2VDbGllbnRJbXBsLmgiCisjaW5jbHVkZSAiUGFnZUxv
YWRTdGF0ZU9ic2VydmVyLmgiCiAjaW5jbHVkZSAiV0tWaWV3LmgiCiAjaW5jbHVkZSAiV2ViUGFn
ZVByb3h5LmgiCiAKQEAgLTM4LDIxICs0MSw1NSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFJlZlB0
cjxQbGF5U3RhdGlvbldlYlZpZXc+IGNyZWF0ZShjb25zdCBBUEk6OlBhZ2VDb25maWd1cmF0aW9u
Jik7CiAgICAgdmlydHVhbCB+UGxheVN0YXRpb25XZWJWaWV3KCk7CiAKKyAgICB2b2lkIHNldENs
aWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpWaWV3Q2xpZW50PiYmKTsKKyAgICB2b2lkIHNldFBh
Z2VMb2FkU3RhdGVDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6Vmlld1BhZ2VMb2FkU3RhdGVD
bGllbnQ+JiYpOworCiAgICAgV2ViUGFnZVByb3h5KiBwYWdlKCkgeyByZXR1cm4gbV9wYWdlLmdl
dCgpOyB9CiAKLSAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7Ci0gICAgYm9vbCBpc0ZvY3VzZWQo
KSBjb25zdDsKLSAgICBib29sIGlzVmlzaWJsZSgpIGNvbnN0OworICAgIHZvaWQgc2V0Vmlld1Np
emUoV2ViQ29yZTo6SW50U2l6ZSk7CisgICAgV2ViQ29yZTo6SW50U2l6ZSB2aWV3U2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdmlld1NpemU7IH0KKworICAgIHZvaWQgc2V0Vmlld1N0YXRlKE9wdGlv
blNldDxXZWJDb3JlOjpBY3Rpdml0eVN0YXRlOjpGbGFnPik7CisgICAgT3B0aW9uU2V0PFdlYkNv
cmU6OkFjdGl2aXR5U3RhdGU6OkZsYWc+IHZpZXdTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmll
d1N0YXRlRmxhZ3M7IH0KKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICB2b2lkIHdp
bGxFbnRlckZ1bGxTY3JlZW4oKTsKKyAgICB2b2lkIGRpZEVudGVyRnVsbFNjcmVlbigpOworICAg
IHZvaWQgd2lsbEV4aXRGdWxsU2NyZWVuKCk7CisgICAgdm9pZCBkaWRFeGl0RnVsbFNjcmVlbigp
OworICAgIHZvaWQgcmVxdWVzdEV4aXRGdWxsU2NyZWVuKCk7CisjZW5kaWYKKworICAgIC8vIEZ1
bmN0aW9ucyBjYWxsZWQgYnkgUGFnZUNsaWVudEltcGwKKyAgICB2b2lkIHNldFZpZXdOZWVkc0Rp
c3BsYXkoY29uc3QgV2ViQ29yZTo6UmVnaW9uJik7CisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJ
KQorICAgIGJvb2wgaXNGdWxsU2NyZWVuKCk7CisgICAgdm9pZCBjbG9zZUZ1bGxTY3JlZW5NYW5h
Z2VyKCk7CisgICAgdm9pZCBlbnRlckZ1bGxTY3JlZW4oKTsKKyAgICB2b2lkIGV4aXRGdWxsU2Ny
ZWVuKCk7CisgICAgdm9pZCBiZWdhbkVudGVyRnVsbFNjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgYmVnYW5FeGl0RnVsbFNj
cmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwor
I2VuZGlmCisgICAgdm9pZCBzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJik7CisKKyAg
ICAvLyBGdW5jdGlvbnMgY2FsbGVkIGJ5IFBhZ2VMb2FkU3RhdGVPYnNlcnZlcgorICAgIHZvaWQg
ZGlkQ2hhbmdlVGl0bGUoKTsKKyAgICB2b2lkIGRpZENoYW5nZUFjdGl2ZVVSTCgpOworICAgIHZv
aWQgZGlkQ2hhbmdlRXN0aW1hdGVkUHJvZ3Jlc3MoKTsKKyAgICB2b2lkIGRpZENoYW5nZVdlYlBy
b2Nlc3NJc1Jlc3BvbnNpdmUoKTsKKyAgICB2b2lkIGRpZFN3YXBXZWJQcm9jZXNzZXMoKTsKIAog
cHJpdmF0ZToKICAgICBQbGF5U3RhdGlvbldlYlZpZXcoY29uc3QgQVBJOjpQYWdlQ29uZmlndXJh
dGlvbiYpOwogCisgICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6Vmlld0NsaWVudD4gbV9jbGllbnQ7
CisgICAgc3RkOjp1bmlxdWVfcHRyPEFQSTo6Vmlld1BhZ2VMb2FkU3RhdGVDbGllbnQ+IG1fcGFn
ZUxvYWRTdGF0ZUNsaWVudDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViS2l0OjpQYWdlQ2xpZW50
SW1wbD4gbV9wYWdlQ2xpZW50OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXQ6OlBhZ2VMb2Fk
U3RhdGVPYnNlcnZlcj4gbV9wYWdlTG9hZFN0YXRlT2JzZXJ2ZXI7CiAgICAgUmVmUHRyPFdlYlBh
Z2VQcm94eT4gbV9wYWdlOworICAgIE9wdGlvblNldDxXZWJDb3JlOjpBY3Rpdml0eVN0YXRlOjpG
bGFnPiBtX3ZpZXdTdGF0ZUZsYWdzOwogCi0gICAgYm9vbCBtX2FjdGl2ZSB7IGZhbHNlIH07Ci0g
ICAgYm9vbCBtX2ZvY3VzZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV92aXNpYmxlIHsgZmFsc2Ug
fTsKKyAgICBXZWJDb3JlOjpJbnRTaXplIG1fdmlld1NpemU7CiAjaWYgRU5BQkxFKEZVTExTQ1JF
RU5fQVBJKQogICAgIGJvb2wgbV9pc0Z1bGxTY3JlZW4geyBmYWxzZSB9OwogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDk1NzBlYzNi
YTA0YWUzYTcwMzgzNDk1ODgwZDAzYjIyNWJkNjFkMmIuLjMxNjVlOWZmN2IxZTBjMTkzYWE5M2Fk
YjAwNzE4ZTBhMWJiYTdlMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwCkBAIC0zNzA0LDcgKzM3MDQsNyBAQCB2b2lkIFdlYlBhZ2U6OnVwZGF0ZVBy
ZWZlcmVuY2VzKGNvbnN0IFdlYlByZWZlcmVuY2VzU3RvcmUmIHN0b3JlKQogCiAgICAgU2V0dGlu
Z3MmIHNldHRpbmdzID0gbV9wYWdlLT5zZXR0aW5ncygpOwogCi0jaWYgIVBMQVRGT1JNKEdUSykg
JiYgIVBMQVRGT1JNKFdJTikKKyNpZiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oV0lOKSAm
JiAhUExBVEZPUk0oUExBWVNUQVRJT04pCiAgICAgaWYgKCFzZXR0aW5ncy5hY2NlbGVyYXRlZENv
bXBvc2l0aW5nRW5hYmxlZCgpKSB7CiAgICAgICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoTGF5
ZXJzLCAidXBkYXRlUHJlZmVyZW5jZXM6IGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkIHNl
dHRpbmcgd2FzIGZhbHNlLiBXZWJLaXQgY2Fubm90IGZ1bmN0aW9uIGluIHRoaXMgbW9kZTsgY2hh
bmdpbmcgc2V0dGluZyB0byB0cnVlIik7CiAgICAgICAgIHNldHRpbmdzLnNldEFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdFbmFibGVkKHRydWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlv
bnNQbGF5U3RhdGlvbi5jbWFrZSBiL1NvdXJjZS9jbWFrZS9PcHRpb25zUGxheVN0YXRpb24uY21h
a2UKaW5kZXggN2MyNGU1NTFlOGMzOTU3ZDc3OWRjYTZjNTYwOTM2MjYyZTM0YTE0OS4uYjgyNDg1
YmVjNmZlZTAwOTUzZDA2ZDY5MzY5YmJjZmY1ODA1MzdjNyAxMDA2NDQKLS0tIGEvU291cmNlL2Nt
YWtlL09wdGlvbnNQbGF5U3RhdGlvbi5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc1Bs
YXlTdGF0aW9uLmNtYWtlCkBAIC0zMyw2ICszMyw3IEBAIFdFQktJVF9PUFRJT05fREVGQVVMVF9Q
T1JUX1ZBTFVFKEVOQUJMRV9ERkdfSklUIFBSSVZBVEUgT0ZGKQogIyBFbmFibGVkIGZlYXR1cmVz
CiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQUNDRVNTSUJJTElUWSBQ
UklWQVRFIE9GRikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9BU1lO
Q19TQ1JPTExJTkcgUFJJVkFURSBPTikKK1dFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVF
KEVOQUJMRV9GVUxMU0NSRUVOX0FQSSBQUklWQVRFIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxU
X1BPUlRfVkFMVUUoRU5BQkxFX1BFUklPRElDX01FTU9SWV9NT05JVE9SIFBSSVZBVEUgT04pCiBX
RUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfU01PT1RIX1NDUk9MTElORyBQ
UklWQVRFIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1JFU09V
UkNFX0xPQURfU1RBVElTVElDUyBQUklWQVRFIE9OKQpAQCAtNjMsNyArNjQsNiBAQCBXRUJLSVRf
T1BUSU9OX0RFRklORShFTkFCTEVfVExTX0RFQlVHICJFbmFibGUgVExTIGtleSBsb2cgc3VwcG9y
dCIgUFJJVkFURSBPRkYpCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVf
VkFSSUFUSU9OX0ZPTlRTIFBSSVZBVEUgT0ZGKQogCiAjIEVuYWJsZSBpbiB0aGUgZnV0dXJlCi1X
RUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfRlVMTFNDUkVFTl9BUEkgUFJJ
VkFURSBPRkYpCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQ09OVEVY
VF9NRU5VUyBQUklWQVRFIE9GRikKIAogIyBObyBzdXBwb3J0IHBsYW5uZWQKZGlmZiAtLWdpdCBh
L1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBkM2RmYWZjYTI1OTdiNTc0
YTJiZDViYWFkZmU1MzljN2E1ZDA5OWIzLi44ZmE3OTI1NjM4ZGNjMWM4ODhiNDhhZDcyZmVmOTJk
ZDFjZGJhMGE2IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMjEtMDEtMDYgIFlvc2hpYWtpIEppdHN1a2F3YSAgPHlv
c2hpYWtpLmppdHN1a2F3YUBzb255LmNvbT4KKworICAgICAgICBbUGxheVN0YXRpb25dIEFkZCBN
aW5pQnJvd3NlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjIwMzU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIFBsYXlTdGF0aW9uIE1pbmlCcm93c2VyIHNvdXJjZXMgYW5kIENNYWtlTGlzdHMudHh0
LgorCisgICAgICAgICogTWluaUJyb3dzZXIvcGxheXN0YXRpb24vQ01ha2VMaXN0cy50eHQ6IEFk
ZGVkLgorICAgICAgICAqIE1pbmlCcm93c2VyL3BsYXlzdGF0aW9uL0ltYWdlQnV0dG9uLmNwcDog
QWRkZWQuCisgICAgICAgICogTWluaUJyb3dzZXIvcGxheXN0YXRpb24vSW1hZ2VCdXR0b24uaDog
QWRkZWQuCisgICAgICAgICogTWluaUJyb3dzZXIvcGxheXN0YXRpb24vTWFpbldpbmRvdy5jcHA6
IEFkZGVkLgorICAgICAgICAqIE1pbmlCcm93c2VyL3BsYXlzdGF0aW9uL01haW5XaW5kb3cuaDog
QWRkZWQuCisgICAgICAgICogTWluaUJyb3dzZXIvcGxheXN0YXRpb24vU3RyaW5nVXRpbHMuaDog
QWRkZWQuCisgICAgICAgICogTWluaUJyb3dzZXIvcGxheXN0YXRpb24vVGl0bGVCYXIuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9UaXRsZUJhci5oOiBBZGRl
ZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9Ub29sa2l0dGVuVXRpbHMuaDog
QWRkZWQuCisgICAgICAgICogTWluaUJyb3dzZXIvcGxheXN0YXRpb24vVVJMQmFyLmNwcDogQWRk
ZWQuCisgICAgICAgICogTWluaUJyb3dzZXIvcGxheXN0YXRpb24vVVJMQmFyLmg6IEFkZGVkLgor
ICAgICAgICAqIE1pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1dlYkNvbnRleHQuY3BwOiBBZGRlZC4K
KyAgICAgICAgKiBNaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9XZWJDb250ZXh0Lmg6IEFkZGVkLgor
ICAgICAgICAqIE1pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1dlYlZpZXdXaW5kb3cuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9XZWJWaWV3V2luZG93Lmg6IEFk
ZGVkLgorICAgICAgICAqIE1pbmlCcm93c2VyL3BsYXlzdGF0aW9uL21haW4uY3BwOiBBZGRlZC4K
KyAgICAgICAgKGxvYWRMaWJyYXJ5T3JFeGl0KToKKyAgICAgICAgKGluaXRpYWxpemUpOgorICAg
ICAgICAoQXBwbGljYXRpb25DbGllbnQ6OnVwZGF0ZUFwcGxpY2F0aW9uKToKKyAgICAgICAgKG1h
aW4pOgorICAgICAgICAqIFBsYXRmb3JtUGxheVN0YXRpb24uY21ha2U6IEFkZGVkLgorCiAyMDIw
LTExLTI2ICBMYXVybyBNb3VyYSAgPGxtb3VyYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtd
IFVucmV2aWV3ZWQuIFJlbW92ZSBsZWZ0b3ZlciB0ZXN0IGNhc2UgYWZ0ZXIgSW50ZXJuZXQgRXhw
bG9yZXIgcXVpcmtzIGNoYW5nZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlz
dGF0aW9uL0NNYWtlTGlzdHMudHh0IGIvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRpb24vQ01h
a2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmI3YTZkYzRiMDZmNjcyOWUwMGI4N2UyMWUyYWNiOGYz
MmU3ODQ2OAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9u
L0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsNzYgQEAKK3NldChNSU5JQlJPV1NFUl9ESVIgIiR7
VE9PTFNfRElSfS9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbiIpCisKK2ZpbmRfbGlicmFyeShUT09M
S0lUX0xJQlJBUlkgVG9vbEtpdHRlbikKKworUExBWVNUQVRJT05fQ09QWV9TSEFSRURfTElCUkFS
SUVTKE1pbmlCcm93c2VyX0NvcHlTaGFyZWRMaWJzCisgICAgRklMRVMgJHtUT09MS0lUX0xJQlJB
Ull9CispCisKK3NldChNaW5pQnJvd3Nlcl9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKKyAg
ICAiJHtXRUJLSVRfTElCUkFSSUVTX0RJUn0vaW5jbHVkZSIKKyAgICAiJHtGT1JXQVJESU5HX0hF
QURFUlNfRElSfSIKKyAgICAke0NNQUtFX0JJTkFSWV9ESVJ9CisgICAgJHtXZWJDb3JlX1BSSVZB
VEVfRlJBTUVXT1JLX0hFQURFUlNfRElSfQorICAgICIke0NNQUtFX1NPVVJDRV9ESVJ9L1NvdXJj
ZSIKKyAgICAiJHtUT09MU19ESVJ9L3BsYXlzdGF0aW9uLyIKKykKKworc2V0KE1pbmlCcm93c2Vy
X1NPVVJDRVMKKyAgICAke01JTklCUk9XU0VSX0RJUn0vSW1hZ2VCdXR0b24uY3BwCisgICAgJHtN
SU5JQlJPV1NFUl9ESVJ9L01haW5XaW5kb3cuY3BwCisgICAgJHtNSU5JQlJPV1NFUl9ESVJ9L1Rp
dGxlQmFyLmNwcAorICAgICR7TUlOSUJST1dTRVJfRElSfS9VUkxCYXIuY3BwCisgICAgJHtNSU5J
QlJPV1NFUl9ESVJ9L1dlYkNvbnRleHQuY3BwCisgICAgJHtNSU5JQlJPV1NFUl9ESVJ9L1dlYlZp
ZXdXaW5kb3cuY3BwCisgICAgJHtNSU5JQlJPV1NFUl9ESVJ9L21haW4uY3BwCispCisKK3NldChN
aW5pQnJvd3Nlcl9MSUJSQVJJRVMKKyAgICAke0NBSVJPX0xJQlJBUklFU30KKyAgICAke1BJWE1B
Tl9MSUJSQVJJRVN9CisgICAgJHtGUkVFVFlQRV9MSUJSQVJJRVN9CisgICAgJHtQTkdfTElCUkFS
SUVTfQorICAgICR7WkxJQl9MSUJSQVJJRVN9CisgICAgJHtMSUJYTUwyX0xJQlJBUklFU30KKyAg
ICAke0lDVV9MSUJSQVJJRVN9CisgICAgJHtJQ1VfSTE4Tl9MSUJSQVJJRVN9CisgICAgJHtJQ1Vf
REFUQV9MSUJSQVJJRVN9CisKKyAgICAke0NfU1REX0xJQlJBUll9CisgICAgJHtLRVJORUxfTElC
UkFSWX0KKworICAgICR7VE9PTEtJVF9MSUJSQVJZfQorCisgICAgV2ViS2l0CispCisKK3NldChQ
TEFZU1RBVElPTl9NaW5pQnJvd3Nlcl9SRVFVSVJFRF9TSEFSRURfTElCUkFSSUVTCisgICAgbGli
VG9vbEtpdHRlbgorICAgIGxpYmNhaXJvCisgICAgbGliZm9udGNvbmZpZworICAgIGxpYmZyZWV0
eXBlCisgICAgbGliaGFyZmJ1enoKKyAgICBsaWJpY3UKKyAgICBsaWJwbmcxNgorKQorCithZGRf
ZGVmaW5pdGlvbnMoCisgICAgLURfVU5JQ09ERQorKQorCitsaW5rX2RpcmVjdG9yaWVzKCR7V0VC
S0lUX0xJQlJBUklFU19ESVJ9L2xpYikKK1dFQktJVF9FWEVDVVRBQkxFX0RFQ0xBUkUoTWluaUJy
b3dzZXIpCitXRUJLSVRfRVhFQ1VUQUJMRShNaW5pQnJvd3NlcikKKworIyBNaW5pQnJvd3NlciB3
b24ndCB3b3JrIHdpdGhvdXQgdGhlc2UgcHJvY2Vzc2VzCithZGRfZGVwZW5kZW5jaWVzKE1pbmlC
cm93c2VyIFdlYlByb2Nlc3MgTmV0d29ya1Byb2Nlc3MpCisKK3RhcmdldF9saW5rX29wdGlvbnMo
TWluaUJyb3dzZXIgUFJJVkFURSAtV2wsLS1uby1kZW1hbmdsZSkKKworIworIyBTZXQgdGhlIGRl
YnVnZ2VyIHdvcmtpbmcgZGlyZWN0b3J5IGZvciBWaXN1YWwgU3R1ZGlvCisjCitpZiAoJHtDTUFL
RV9HRU5FUkFUT1J9IE1BVENIRVMgIlZpc3VhbCBTdHVkaW8iKQorbWVzc2FnZSgiJHtDTUFLRV9S
VU5USU1FX09VVFBVVF9ESVJFQ1RPUll9IikKKyAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoTWlu
aUJyb3dzZXIgUFJPUEVSVElFUyBWU19ERUJVR0dFUl9XT1JLSU5HX0RJUkVDVE9SWSAiJHtDTUFL
RV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUll9IikKK2VuZGlmICgpCmRpZmYgLS1naXQgYS9Ub29s
cy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9JbWFnZUJ1dHRvbi5jcHAgYi9Ub29scy9NaW5pQnJv
d3Nlci9wbGF5c3RhdGlvbi9JbWFnZUJ1dHRvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWFlN2M4MTE3MGMz
NzFkZWJjNzZhNjNiYjBmNDg0MTQxNmMxZmE3NwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL01p
bmlCcm93c2VyL3BsYXlzdGF0aW9uL0ltYWdlQnV0dG9uLmNwcApAQCAtMCwwICsxLDQzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJ
bmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJJbWFnZUJ1dHRvbi5oIgorCit2b2lkIEltYWdlQnV0
dG9uOjpzZXRDbGllbnQoQ2xpZW50JiYgY2xpZW50KQoreworICAgIG1fY2xpZW50ID0gc3RkOjpt
b3ZlKGNsaWVudCk7Cit9CisKK2Jvb2wgSW1hZ2VCdXR0b246Om9uTW91c2VNb3ZlKHRvb2xraXR0
ZW46OkludFBvaW50KQoreworICAgIHNldEZvY3VzZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBJbWFnZUJ1dHRvbjo6b25EZWNpZGUoKQoreworICAgIGlmIChtX2NsaWVudC5vbkRl
Y2lkZSkKKyAgICAgICAgbV9jbGllbnQub25EZWNpZGUodGhpcyk7Cit9CmRpZmYgLS1naXQgYS9U
b29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9JbWFnZUJ1dHRvbi5oIGIvVG9vbHMvTWluaUJy
b3dzZXIvcGxheXN0YXRpb24vSW1hZ2VCdXR0b24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMDA4YTNjZGU1ZjVj
YTRkYjg2MWJjNDZhYTEyMDBhZGFiMzE3MDFjCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvTWlu
aUJyb3dzZXIvcGxheXN0YXRpb24vSW1hZ2VCdXR0b24uaApAQCAtMCwwICsxLDQ0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNs
dWRlIDx0b29sa2l0dGVuL0ltYWdlQnV0dG9uLmg+CisKK2NsYXNzIEltYWdlQnV0dG9uIDogcHVi
bGljIHRvb2xraXR0ZW46OkltYWdlQnV0dG9uIHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgQ2xpZW50
IHsKKyAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKEltYWdlQnV0dG9uKik+IG9uRGVjaWRlOwor
ICAgIH07CisKKyAgICB2b2lkIHNldENsaWVudChDbGllbnQmJik7CisKK3Byb3RlY3RlZDoKKyAg
ICBib29sIG9uTW91c2VNb3ZlKHRvb2xraXR0ZW46OkludFBvaW50KSBvdmVycmlkZTsKKyAgICB2
b2lkIG9uRGVjaWRlKCkgb3ZlcnJpZGU7CisKKyAgICBDbGllbnQgbV9jbGllbnQ7Cit9OwpkaWZm
IC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRpb24vTWFpbldpbmRvdy5jcHAgYi9U
b29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9NYWluV2luZG93LmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41
ZDc5NmNlOTY2ZWMxZjY3ZTJjNTQzNjdkYzgwNWI0Y2RmMTAwOGUwCi0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRpb24vTWFpbldpbmRvdy5jcHAKQEAgLTAsMCAr
MSwyNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRl
cnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
Ik1haW5XaW5kb3cuaCIKKworI2luY2x1ZGUgIkltYWdlQnV0dG9uLmgiCisjaW5jbHVkZSAiVGl0
bGVCYXIuaCIKKyNpbmNsdWRlICJUb29sa2l0dGVuVXRpbHMuaCIKKyNpbmNsdWRlICJVUkxCYXIu
aCIKKyNpbmNsdWRlICJXZWJWaWV3V2luZG93LmgiCisjaW5jbHVkZSA8S2V5Ym9hcmRDb2Rlcy5o
PgorI2luY2x1ZGUgPFdlYktpdC9XS1N0cmluZy5oPgorI2luY2x1ZGUgPHRvb2xraXR0ZW4vQXBw
bGljYXRpb24uaD4KKworY29uc3QgaW50IExpbmVIZWlnaHQgPSA0MDsKK2NvbnN0IGludCBGb250
U2l6ZSA9IDMyOworCit1c2luZyBuYW1lc3BhY2UgdG9vbGtpdHRlbjsKKworTWFpbldpbmRvdzo6
TWFpbldpbmRvdygpCit7CisgICAgSW50U2l6ZSBzaXplID0gQXBwbGljYXRpb246OnNpbmdsZXRv
bigpLndpbmRvd1NpemUoKTsKKyAgICBhdXRvIHdpbmRvd1dpZHRoID0gc2l6ZS53OworICAgIGF1
dG8gd2luZG93SGVpZ2h0ID0gc2l6ZS5oOworICAgIHNldFNpemUoc2l6ZSk7CisKKyAgICBjb25z
dCB1bnNpZ25lZCB0aXRsZUJhckhlaWdodCA9IExpbmVIZWlnaHQgKiAxOworICAgIGNvbnN0IHVu
c2lnbmVkIHVybEJhckhlaWdodCA9IExpbmVIZWlnaHQgKiAxOworICAgIGNvbnN0IHVuc2lnbmVk
IHdlYlZpZXdGcmFtZVlQb3NpdGlvbiA9IHRpdGxlQmFySGVpZ2h0ICsgdXJsQmFySGVpZ2h0Owor
CisgICAgLy8gUmVnaXN0ZXIgd2lkZ2V0cy4gRE8gTk9UIENIQU5HRSB0aGlzIG9yZGVyLgorICAg
IG1fd2Vidmlld0ZyYW1lID0gY3JlYXRlQW5kQXBwZW5kQ2hpbGQ8V2lkZ2V0Pih0aGlzLAorICAg
ICAgICB7IHdpbmRvd1dpZHRoLCB3aW5kb3dIZWlnaHQgLSB3ZWJWaWV3RnJhbWVZUG9zaXRpb24g
fSwKKyAgICAgICAgeyAwLCB3ZWJWaWV3RnJhbWVZUG9zaXRpb24gfSk7CisKKyAgICBtX3RpdGxl
QmFyID0gY3JlYXRlQW5kQXBwZW5kQ2hpbGQ8VGl0bGVCYXI+KHRoaXMsCisgICAgICAgIHsgd2lu
ZG93V2lkdGgsIHRpdGxlQmFySGVpZ2h0IH0sCisgICAgICAgIHsgMCwgMCB9KTsKKworICAgIGNv
bnN0IGludCBjbG9zZUJ1dHRvbk1hcmdpbiA9IDQ7CisgICAgYXV0byBjbG9zZUJ1dHRvbiA9IGNy
ZWF0ZUFuZEFwcGVuZENoaWxkPDo6SW1hZ2VCdXR0b24+KHRoaXMsCisgICAgICAgIHsgdGl0bGVC
YXJIZWlnaHQgLSBjbG9zZUJ1dHRvbk1hcmdpbiAqIDIsIHRpdGxlQmFySGVpZ2h0IC0gY2xvc2VC
dXR0b25NYXJnaW4gKiAyIH0sCisgICAgICAgIHsgKGludCkod2luZG93V2lkdGggLSB0aXRsZUJh
ckhlaWdodCArIGNsb3NlQnV0dG9uTWFyZ2luKSwgY2xvc2VCdXR0b25NYXJnaW4gfSk7CisgICAg
Y2xvc2VCdXR0b24tPnNldEltYWdlRnJvbVJlc291cmNlKCJpY29uX2Nyb3NzLnBuZyIpOworICAg
IGNsb3NlQnV0dG9uLT5zZXRDbGllbnQoe1t0aGlzXSg6OkltYWdlQnV0dG9uKikgeworICAgICAg
ICBjbG9zZVdlYlZpZXcoYWN0aXZlV2ViVmlldygpKTsKKyAgICB9fSk7CisKKyAgICBjb25zdCB1
bnNpZ25lZCBidXR0b25XaWR0aCA9IDEwMDsKKyAgICBjb25zdCB1bnNpZ25lZCB1cmxCYXJXaWR0
aCA9IHdpbmRvd1dpZHRoIC0gYnV0dG9uV2lkdGggKiAzOworICAgIGNvbnN0IHVuc2lnbmVkIHVy
bEJhclhQb3NpdGlvbiA9IGJ1dHRvbldpZHRoICogMzsKKworICAgIGF1dG8gYmFja0J1dHRvbiA9
IGNyZWF0ZUFuZEFwcGVuZENoaWxkPDo6SW1hZ2VCdXR0b24+KHRoaXMsCisgICAgICAgIHsgYnV0
dG9uV2lkdGgsIHVybEJhckhlaWdodCB9LAorICAgICAgICB7IDAsIHRpdGxlQmFySGVpZ2h0IH0p
OworICAgIGJhY2tCdXR0b24tPnNldEltYWdlRnJvbVJlc291cmNlKCJpY29uX2JhY2sucG5nIik7
CisgICAgYmFja0J1dHRvbi0+c2V0Q2xpZW50KHsgW3RoaXNdKDo6SW1hZ2VCdXR0b24qKSB7Cisg
ICAgICAgIGFjdGl2ZVdlYlZpZXcoKS0+Z29CYWNrKCk7CisgICAgfX0pOworCisgICAgYXV0byBm
b3J3YXJkQnV0dG9uID0gY3JlYXRlQW5kQXBwZW5kQ2hpbGQ8OjpJbWFnZUJ1dHRvbj4odGhpcywK
KyAgICAgICAgeyBidXR0b25XaWR0aCwgdXJsQmFySGVpZ2h0IH0sCisgICAgICAgIHsgYnV0dG9u
V2lkdGgsIHRpdGxlQmFySGVpZ2h0IH0pOworICAgIGZvcndhcmRCdXR0b24tPnNldEltYWdlRnJv
bVJlc291cmNlKCJpY29uX2ZvcndhcmQucG5nIik7CisgICAgZm9yd2FyZEJ1dHRvbi0+c2V0Q2xp
ZW50KHsgW3RoaXNdKDo6SW1hZ2VCdXR0b24qKSB7CisgICAgICAgIGFjdGl2ZVdlYlZpZXcoKS0+
Z29Gb3J3YXJkKCk7CisgICAgfX0pOworCisgICAgYXV0byByZWxvYWRCdXR0b24gPSBjcmVhdGVB
bmRBcHBlbmRDaGlsZDw6OkltYWdlQnV0dG9uPih0aGlzLAorICAgICAgICB7IGJ1dHRvbldpZHRo
LCB1cmxCYXJIZWlnaHQgfSwKKyAgICAgICAgeyBidXR0b25XaWR0aCAqIDIsIHRpdGxlQmFySGVp
Z2h0IH0pOworICAgIHJlbG9hZEJ1dHRvbi0+c2V0SW1hZ2VGcm9tUmVzb3VyY2UoImljb25fcmVs
b2FkLnBuZyIpOworICAgIHJlbG9hZEJ1dHRvbi0+c2V0Q2xpZW50KHsgW3RoaXNdKDo6SW1hZ2VC
dXR0b24qKSB7CisgICAgICAgIGFjdGl2ZVdlYlZpZXcoKS0+cmVsb2FkKCk7CisgICAgfX0pOwor
CisgICAgbV91cmxCYXIgPSBjcmVhdGVBbmRBcHBlbmRDaGlsZDw6OlVSTEJhcj4odGhpcywKKyAg
ICAgICAgeyB1cmxCYXJXaWR0aCwgdXJsQmFySGVpZ2h0IH0sCisgICAgICAgIHsgdXJsQmFyWFBv
c2l0aW9uLCB0aXRsZUJhckhlaWdodCB9KTsKKyAgICBtX3VybEJhci0+c2V0Q2xpZW50KHsgW3Ro
aXNdKDo6VVJMQmFyKiwgY29uc3QgY2hhciogdXJsKSB7IAorICAgICAgICBhY3RpdmVXZWJWaWV3
KCktPmxvYWRVUkwodXJsKTsKKyAgICB9fSk7CisKKyAgICBjcmVhdGVOZXdXZWJWaWV3KG51bGxw
dHIpOworICAgIGFjdGl2ZVdlYlZpZXcoKS0+bG9hZFVSTCgiaHR0cHM6Ly93ZWJraXQub3JnIik7
Cit9CisKK3ZvaWQgTWFpbldpbmRvdzo6cGFpbnRTZWxmKHRvb2xraXR0ZW46OkludFBvaW50KQor
eworfQorCitXZWJWaWV3V2luZG93KiBNYWluV2luZG93OjpjcmVhdGVOZXdXZWJWaWV3KFdLUGFn
ZUNvbmZpZ3VyYXRpb25SZWYgY29uZmlndXJhdGlvbikKK3sKKyAgICBJbnRTaXplIHNpemUgPSBt
X3dlYnZpZXdGcmFtZS0+c2l6ZSgpOworICAgIEludFBvaW50IHBvc2l0aW9uID0geyAwLCAwIH07
CisKKyAgICBXZWJWaWV3V2luZG93OjpDbGllbnQgd2luZG93Q2xpZW50IHsKKyAgICAgICAgLy8g
Y3JlYXRlTmV3V2luZG93CisgICAgICAgIFt0aGlzXShXS1BhZ2VDb25maWd1cmF0aW9uUmVmIGNv
bmZpZ3VyYXRpb24pIC0+IFdlYlZpZXdXaW5kb3cqIHsKKyAgICAgICAgICAgIHJldHVybiBjcmVh
dGVOZXdXZWJWaWV3KGNvbmZpZ3VyYXRpb24pOworICAgICAgICB9LAorCisgICAgICAgIC8vIGRp
ZFVwZGF0ZVRpdGxlCisgICAgICAgIFt0aGlzXShXZWJWaWV3V2luZG93KiB2aWV3KSB7CisgICAg
ICAgICAgICBpZiAodmlldyA9PSBhY3RpdmVXZWJWaWV3KCkpCisgICAgICAgICAgICAgICAgdXBk
YXRlVGl0bGVCYXIoKTsKKyAgICAgICAgfSwKKyAgICAgICAgLy8gZGlkVXBkYXRlVVJMCisgICAg
ICAgIFt0aGlzXShXZWJWaWV3V2luZG93KiB2aWV3KSB7CisgICAgICAgICAgICBpZiAodmlldyA9
PSBhY3RpdmVXZWJWaWV3KCkpCisgICAgICAgICAgICAgICAgdXBkYXRlVVJMQmFyKCk7CisgICAg
ICAgIH0sCisgICAgICAgIC8vIGRpZFVwZGF0ZVByb2dyZXNzCisgICAgICAgIFt0aGlzXShXZWJW
aWV3V2luZG93KiB2aWV3KSB7CisgICAgICAgICAgICBpZiAodmlldyA9PSBhY3RpdmVXZWJWaWV3
KCkpCisgICAgICAgICAgICAgICAgdXBkYXRlVGl0bGVCYXIoKTsKKyAgICAgICAgfQorICAgIH07
CisKKyAgICBhdXRvIHdlYlZpZXdXaW5kb3cgPSBXZWJWaWV3V2luZG93OjpjcmVhdGUoc3RkOjpt
b3ZlKHdpbmRvd0NsaWVudCksIGNvbmZpZ3VyYXRpb24pOworICAgIHdlYlZpZXdXaW5kb3ctPnNl
dFVzZXJEYXRhKHRoaXMpOworICAgIHdlYlZpZXdXaW5kb3ctPnNldFBvc2l0aW9uKHBvc2l0aW9u
KTsKKyAgICB3ZWJWaWV3V2luZG93LT5zZXRTaXplKHsgc2l6ZS53LCBzaXplLmggfSk7CisgICAg
d2ViVmlld1dpbmRvdy0+ZmlsbChXSElURSk7CisKKyAgICBXZWJWaWV3V2luZG93KiByYXdXZWJW
aWV3V2luZG93ID0gd2ViVmlld1dpbmRvdy5nZXQoKTsKKyAgICBtX3dlYnZpZXdGcmFtZS0+YXBw
ZW5kQ2hpbGQobW92ZSh3ZWJWaWV3V2luZG93KSk7CisKKyAgICAvLyBBY3JpdmF0ZSB0aGUgbmV3
IHdpbmRvdy4KKyAgICByYXdXZWJWaWV3V2luZG93LT5zZXRBY3RpdmUodHJ1ZSk7CisgICAgc2V0
QWN0aXZlV2ViVmlldyhyYXdXZWJWaWV3V2luZG93KTsKKyAgICByZXR1cm4gcmF3V2ViVmlld1dp
bmRvdzsKK30KKworV2ViVmlld1dpbmRvdyogTWFpbldpbmRvdzo6YWN0aXZlV2ViVmlldygpCit7
CisgICAgYXV0byBudW1XZWJWaWV3cyA9IG1fd2Vidmlld0ZyYW1lLT5jaGlsZHJlbigpLnNpemUo
KTsKKyAgICBpZiAobV9hY3RpdmVXZWJWaWV3SW5kZXggPj0gbnVtV2ViVmlld3MpCisgICAgICAg
IG1fYWN0aXZlV2ViVmlld0luZGV4ID0gbnVtV2ViVmlld3MgLSAxOworCisgICAgYXV0byBpdCA9
IG1fd2Vidmlld0ZyYW1lLT5jaGlsZHJlbigpLmJlZ2luKCk7CisgICAgc3RkOjphZHZhbmNlKGl0
LCBtX2FjdGl2ZVdlYlZpZXdJbmRleCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYlZpZXdX
aW5kb3cqPihpdC0+Z2V0KCkpOworfQorCit2b2lkIE1haW5XaW5kb3c6OnNldEFjdGl2ZVdlYlZp
ZXcoV2ViVmlld1dpbmRvdyogdmlldykKK3sKKyAgICBhdXRvJiB3ZWJWaWV3cyA9IG1fd2Vidmll
d0ZyYW1lLT5jaGlsZHJlbigpOworICAgIHVuc2lnbmVkIGkgPSAwOworICAgIGZvciAoYXV0byBp
dCA9IHdlYlZpZXdzLmJlZ2luKCk7IGl0ICE9IHdlYlZpZXdzLmVuZCgpOyBpdCsrLCBpKyspIHsK
KyAgICAgICAgaWYgKGl0LT5nZXQoKSA9PSB2aWV3KSB7CisgICAgICAgICAgICBtX2FjdGl2ZVdl
YlZpZXdJbmRleCA9IGk7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxXZWJWaWV3V2luZG93Kj4o
aXQtPmdldCgpKS0+c2V0QWN0aXZlKHRydWUpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IHN0YXRpY19jYXN0PFdlYlZpZXdXaW5kb3cqPihpdC0+Z2V0KCkpLT5zZXRBY3RpdmUoZmFsc2Up
OworICAgIH0KKyAgICB1cGRhdGVUaXRsZUJhcigpOworICAgIHVwZGF0ZVVSTEJhcigpOworfQor
Cit2b2lkIE1haW5XaW5kb3c6OnN3aXRjaEFjdGl2ZVdlYlZpZXcoaW50IGRlbHRhKQoreworICAg
IGF1dG8gbnVtV2ViVmlld3MgPSBtX3dlYnZpZXdGcmFtZS0+Y2hpbGRyZW4oKS5zaXplKCk7Cisg
ICAgdW5zaWduZWQgbmV3SW5kZXggPSAobV9hY3RpdmVXZWJWaWV3SW5kZXggKyBkZWx0YSArIG51
bVdlYlZpZXdzKSAlIG51bVdlYlZpZXdzOworICAgIGF1dG8gaXQgPSBtX3dlYnZpZXdGcmFtZS0+
Y2hpbGRyZW4oKS5iZWdpbigpOworICAgIHN0ZDo6YWR2YW5jZShpdCwgbmV3SW5kZXgpOworICAg
IHNldEFjdGl2ZVdlYlZpZXcoc3RhdGljX2Nhc3Q8V2ViVmlld1dpbmRvdyo+KGl0LT5nZXQoKSkp
OworfQorCit2b2lkIE1haW5XaW5kb3c6OmNsb3NlV2ViVmlldyhXZWJWaWV3V2luZG93KiB2aWV3
KQoreworICAgIGF1dG8mIHdlYlZpZXdzID0gbV93ZWJ2aWV3RnJhbWUtPmNoaWxkcmVuKCk7Cisg
ICAgdW5zaWduZWQgaSA9IDA7CisgICAgZm9yIChhdXRvIGl0ID0gd2ViVmlld3MuYmVnaW4oKTsg
aXQgIT0gd2ViVmlld3MuZW5kKCk7IGl0KyssIGkrKykgeworICAgICAgICBpZiAoaXQtPmdldCgp
ID09IHZpZXcpIHsKKyAgICAgICAgICAgIG1fd2Vidmlld0ZyYW1lLT5yZW1vdmVDaGlsZCh2aWV3
KTsKKyAgICAgICAgICAgIGlmIChtX3dlYnZpZXdGcmFtZS0+Y2hpbGRyZW4oKS5lbXB0eSgpKQor
ICAgICAgICAgICAgICAgIGV4aXQoMCk7CisKKyAgICAgICAgICAgIGlmIChpID09IG1fYWN0aXZl
V2ViVmlld0luZGV4KQorICAgICAgICAgICAgICAgIHN3aXRjaEFjdGl2ZVdlYlZpZXcoLTEpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorfQorCitib29sIE1haW5XaW5k
b3c6Om9uS2V5RG93bihpbnQzMl90IHZpcnR1YWxLZXlDb2RlKQoreworICAgIHN3aXRjaCAodmly
dHVhbEtleUNvZGUpIHsKKyAgICBjYXNlIFZLX0wxOgorICAgICAgICBhY3RpdmVXZWJWaWV3KCkt
PmdvQmFjaygpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIFZLX0wyOgorICAgICAg
ICBzd2l0Y2hBY3RpdmVXZWJWaWV3KC0xKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2Fz
ZSBWS19SMToKKyAgICAgICAgYWN0aXZlV2ViVmlldygpLT5nb0ZvcndhcmQoKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgY2FzZSBWS19SMjoKKyAgICAgICAgc3dpdGNoQWN0aXZlV2ViVmll
dygxKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBWS19SMzoKKyAgICAgICAgYWN0
aXZlV2ViVmlldygpLT50b2dnbGVab29tRmFjdG9yKCk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGNhc2UgVktfVFJJQU5HTEU6CisgICAgICAgIGFjdGl2ZVdlYlZpZXcoKS0+cmVsb2FkKCk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Zv
aWQgTWFpbldpbmRvdzo6dXBkYXRlVGl0bGVCYXIoKQoreworICAgIGF1dG8gbnVtV2ViVmlld3Mg
PSBtX3dlYnZpZXdGcmFtZS0+Y2hpbGRyZW4oKS5zaXplKCk7CisgICAgYXV0byB0aXRsZSA9IHN0
ZDo6dG9fc3RyaW5nKG1fYWN0aXZlV2ViVmlld0luZGV4ICsgMSkgKyAiLyIgKyBzdGQ6OnRvX3N0
cmluZyhudW1XZWJWaWV3cykgKyAiICIgKyBhY3RpdmVXZWJWaWV3KCktPnRpdGxlKCk7CisKKyAg
ICBhdXRvIHByb2dyZXNzID0gYWN0aXZlV2ViVmlldygpLT5wcm9ncmVzcygpOworICAgIG1fdGl0
bGVCYXItPnNldFRpdGxlKHRpdGxlKTsKKyAgICBtX3RpdGxlQmFyLT5zZXRQcm9ncmVzcyhwcm9n
cmVzcyk7Cit9CisKK3ZvaWQgTWFpbldpbmRvdzo6dXBkYXRlVVJMQmFyKCkKK3sKKyAgICBtX3Vy
bEJhci0+c2V0VGV4dChhY3RpdmVXZWJWaWV3KCktPnVybCgpLmNfc3RyKCksIEZvbnRTaXplKTsK
K30KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL01haW5XaW5kb3cu
aCBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL01haW5XaW5kb3cuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mNmE0YjVkYTE0MTgzMjc3OTExZTczMDE1NDNmMTc2ZmZkYjFhYTY3Ci0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRpb24vTWFpbldpbmRvdy5oCkBAIC0wLDAg
KzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRl
cnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxXZWJL
aXQvV0tCYXNlLmg+CisjaW5jbHVkZSA8bGlzdD4KKyNpbmNsdWRlIDx0b29sa2l0dGVuL1dpZGdl
dC5oPgorCitjbGFzcyBUaXRsZUJhcjsKK2NsYXNzIFVSTEJhcjsKK2NsYXNzIFdlYlZpZXdXaW5k
b3c7CisKK2NsYXNzIE1haW5XaW5kb3cgOiBwdWJsaWMgdG9vbGtpdHRlbjo6V2lkZ2V0IHsKK3B1
YmxpYzoKKyAgICBNYWluV2luZG93KCk7CisKKyAgICBXZWJWaWV3V2luZG93KiBhY3RpdmVXZWJW
aWV3KCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBwYWludFNlbGYodG9vbGtpdHRlbjo6SW50UG9p
bnQpIGZpbmFsOworICAgIGJvb2wgb25LZXlEb3duKGludDMyX3QgdmlydHVhbEtleUNvZGUpIGZp
bmFsOworCisgICAgdm9pZCB1cGRhdGVUaXRsZUJhcigpOworICAgIHZvaWQgdXBkYXRlVVJMQmFy
KCk7CisKKyAgICBXZWJWaWV3V2luZG93KiBjcmVhdGVOZXdXZWJWaWV3KFdLUGFnZUNvbmZpZ3Vy
YXRpb25SZWYpOworICAgIHZvaWQgc2V0QWN0aXZlV2ViVmlldyhXZWJWaWV3V2luZG93Kik7Cisg
ICAgdm9pZCBzd2l0Y2hBY3RpdmVXZWJWaWV3KGludCBkZWx0YSk7CisgICAgdm9pZCBjbG9zZVdl
YlZpZXcoV2ViVmlld1dpbmRvdyopOworCisgICAgVGl0bGVCYXIqIG1fdGl0bGVCYXIgeyBudWxs
cHRyIH07CisgICAgVVJMQmFyKiBtX3VybEJhciB7IG51bGxwdHIgfTsKKyAgICBXaWRnZXQqIG1f
d2Vidmlld0ZyYW1lIHsgbnVsbHB0ciB9OworCisgICAgdW5zaWduZWQgbV9hY3RpdmVXZWJWaWV3
SW5kZXggeyAwIH07Cit9OwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRp
b24vU3RyaW5nVXRpbHMuaCBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1N0cmluZ1V0
aWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMDQ4YWZkNzUzNDZhMDc3OGNiN2Q1YTc5MjlmMzMyMzVlZTkyNzk5
YwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1N0cmlu
Z1V0aWxzLmgKQEAgLTAsMCArMSwzOCBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkg
SW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxXZWJLaXQvV0tT
dHJpbmcuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dmVjdG9yPgorCitpbmxpbmUg
c3RkOjpzdHJpbmcgdG9VVEY4U3RyaW5nKFdLU3RyaW5nUmVmIHdrc3RyaW5nKQoreworICAgIHNp
emVfdCBidWZmZXJTaXplID0gV0tTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKHdrc3Ry
aW5nKTsKKyAgICBzdGQ6OnZlY3RvcjxjaGFyPiBidWZmZXIoYnVmZmVyU2l6ZSk7CisgICAgc2l6
ZV90IHNpemUgPSBXS1N0cmluZ0dldFVURjhDU3RyaW5nKHdrc3RyaW5nLCBidWZmZXIuZGF0YSgp
LCBidWZmZXJTaXplKTsKKyAgICByZXR1cm4gc3RkOjpzdHJpbmcgeyBidWZmZXIuZGF0YSgpLCBz
aXplIH07Cit9CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9UaXRs
ZUJhci5jcHAgYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9UaXRsZUJhci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNjA1MjAxZTBmNjk3NWI0ZjQ3OWNjNTI0M2ZlMTYzNzYyNjcyNzJjOAotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1RpdGxlQmFyLmNwcApA
QCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3Rp
dmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJUaXRsZUJhci5oIgor
Cit1c2luZyBuYW1lc3BhY2UgdG9vbGtpdHRlbjsKKwordm9pZCBUaXRsZUJhcjo6c2V0VGl0bGUo
Y29uc3Qgc3RkOjpzdHJpbmcmIHRpdGxlKQoreworICAgIGlmIChtX3RpdGxlID09IHRpdGxlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX3RpdGxlID0gdGl0bGU7CisgICAgdXBkYXRlKCk7Cit9
CisKK3ZvaWQgVGl0bGVCYXI6OnNldFByb2dyZXNzKGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICBp
ZiAobV9wcm9ncmVzcyA9PSBwcm9ncmVzcykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wcm9n
cmVzcyA9IHByb2dyZXNzOworICAgIHVwZGF0ZSgpOworfQorCit2b2lkIFRpdGxlQmFyOjp1cGRh
dGUoKQoreworICAgIGF1dG8gd2lkZ2V0U2l6ZSA9IHNpemUoKTsKKyAgICBpbnQgcHJvZ3Jlc3NX
aWR0aCA9IHdpZGdldFNpemUudyAqIG1fcHJvZ3Jlc3M7CisKKyAgICBJbnRSZWN0IHJlY3QgeyB7
IDAsIDAgfSwgd2lkZ2V0U2l6ZSB9OworICAgIEludFJlY3QgcHJvZ3Jlc3NSZWN0ID0gcmVjdDsK
KyAgICBwcm9ncmVzc1JlY3Quc2l6ZS53ID0gcHJvZ3Jlc3NXaWR0aDsKKyAgICBpZiAoIXByb2dy
ZXNzUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIGZpbGxSZWN0KHByb2dyZXNzUmVjdCwgQ29sb3Ig
eyAwLjAsIDAuMCwgMC41LCAxLjAgfSk7CisKKyAgICBJbnRSZWN0IHJlbWFpbmluZ1JlY3QgPSBy
ZWN0OworICAgIHJlbWFpbmluZ1JlY3Quc2l6ZS53IC09IHByb2dyZXNzV2lkdGg7CisgICAgcmVt
YWluaW5nUmVjdC5wb3NpdGlvbi54ICs9IHByb2dyZXNzV2lkdGg7CisgICAgaWYgKCFyZW1haW5p
bmdSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgZmlsbFJlY3QocmVtYWluaW5nUmVjdCwgQ29sb3Ig
eyAwLjIsIDAuMiwgMC43LCAxLjAgfSk7CisKKyAgICBzdHJva2VSZWN0KHJlY3QsIDQsIENvbG9y
IHsgMC43LCAwLjcsIDAuNywgMS4wIH0pOworCisgICAgY29uc3QgaW50IGZvbnRTaXplID0gMzI7
CisgICAgZHJhd1RleHQobV90aXRsZS5jX3N0cigpLCB7IDIsIDAgfSwgZm9udFNpemUsIFdISVRF
KTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1RpdGxlQmFy
LmggYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9UaXRsZUJhci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjE4Y2M3ZGFjMzNkZWE4ZDVkNWVmNzlhYzk0YmNkZjZkZDg5Y2VhODgKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9UaXRsZUJhci5oCkBAIC0wLDAgKzEs
NDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRh
aW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx0b29sa2l0
dGVuL1dpZGdldC5oPgorCitjbGFzcyBUaXRsZUJhciA6IHB1YmxpYyB0b29sa2l0dGVuOjpXaWRn
ZXQgeworcHVibGljOgorICAgIHZvaWQgc2V0VGl0bGUoY29uc3Qgc3RkOjpzdHJpbmcmKTsKKyAg
ICB2b2lkIHNldFByb2dyZXNzKGRvdWJsZSk7CisKK3ByaXZhdGU6CisgICAgdm9pZCB1cGRhdGUo
KTsKKworICAgIHN0ZDo6c3RyaW5nIG1fdGl0bGU7CisgICAgZG91YmxlIG1fcHJvZ3Jlc3MgeyAw
IH07Cit9OwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRpb24vVG9vbGtp
dHRlblV0aWxzLmggYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9Ub29sa2l0dGVuVXRp
bHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi44YjdiZjgwYTY0NzRjZDY0MTA2YWMxODAxZDZjMjM1ZWI0OGVjZDIx
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRpb24vVG9vbGtp
dHRlblV0aWxzLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDIxIFNv
bnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxXZWJLaXQv
V0tHZW9tZXRyeS5oPgorI2luY2x1ZGUgPHRvb2xraXR0ZW4vSW50UmVjdC5oPgorCitpbmxpbmUg
dG9vbGtpdHRlbjo6SW50UmVjdCB0b1RLUmVjdChXS1JlY3QgcmVjdCkKK3sKKyAgICByZXR1cm4g
eworICAgICAgICB0b29sa2l0dGVuOjpJbnRQb2ludCB7CisgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQ+KHJlY3Qub3JpZ2luLngpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihyZWN0
Lm9yaWdpbi55KQorICAgICAgICB9LAorICAgICAgICB0b29sa2l0dGVuOjpJbnRTaXplIHsKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZWN0LnNpemUud2lkdGgpLAorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlY3Quc2l6ZS5oZWlnaHQpCisgICAgICAgIH0K
KyAgICB9OworfQorCitpbmxpbmUgdG9vbGtpdHRlbjo6SW50UG9pbnQgdG9US1BvaW50KFdLUG9p
bnQgcG9pbnQpCit7CisgICAgcmV0dXJuIHsKKyAgICAgICAgdG9vbGtpdHRlbjo6SW50UG9pbnQg
eworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pihwb2ludC54KSwKKyAgICAgICAgICAgIHN0
YXRpY19jYXN0PGludD4ocG9pbnQueSkKKyAgICAgICAgfQorICAgIH07Cit9CisKK2lubGluZSBX
S1JlY3QgdG9XS1JlY3QodG9vbGtpdHRlbjo6SW50UmVjdCByZWN0KQoreworICAgIHJldHVybiBX
S1JlY3RNYWtlKHJlY3QucG9zaXRpb24ueCwgcmVjdC5wb3NpdGlvbi55LCByZWN0LnNpemUudywg
cmVjdC5zaXplLmgpOworfQorCitpbmxpbmUgV0tTaXplIHRvV0tTaXplKHRvb2xraXR0ZW46Oklu
dFNpemUgc2l6ZSkKK3sKKyAgICByZXR1cm4gV0tTaXplTWFrZShzaXplLncsIHNpemUuaCk7Cit9
CisKK2lubGluZSBXS1BvaW50IHRvV0tQb2ludCh0b29sa2l0dGVuOjpJbnRQb2ludCBwb2ludCkK
K3sKKyAgICByZXR1cm4gV0tQb2ludE1ha2UocG9pbnQueCwgcG9pbnQueSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFdpZGdldFQ+CitXaWRnZXRUKiBjcmVhdGVBbmRBcHBlbmRDaGlsZCh0b29s
a2l0dGVuOjpXaWRnZXQqIHBhcmVudCwgY29uc3QgdG9vbGtpdHRlbjo6SW50U2l6ZSBzaXplLCBj
b25zdCB0b29sa2l0dGVuOjpJbnRQb2ludCYgcG9zaXRpb24pCit7CisgICAgYXV0byB3aWRnZXQg
PSBzdGQ6Om1ha2VfdW5pcXVlPFdpZGdldFQ+KCk7CisgICAgV2lkZ2V0VCogcHRyID0gd2lkZ2V0
LmdldCgpOworICAgIHB0ci0+c2V0U2l6ZShzaXplKTsKKyAgICBwdHItPnNldFBvc2l0aW9uKHBv
c2l0aW9uKTsKKyAgICBwYXJlbnQtPmFwcGVuZENoaWxkKG1vdmUod2lkZ2V0KSk7CisgICAgcmV0
dXJuIHB0cjsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1VS
TEJhci5jcHAgYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9VUkxCYXIuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmY0NzI1NmUyNTVhYjFlYWMxOTM0ZjkyNzBmYzA4MDg4NWZhOGJhZjAKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9VUkxCYXIuY3BwCkBAIC0w
LDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBF
bnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIlVSTEJhci5oIgorCisjaW5j
bHVkZSA8S2V5Ym9hcmRDb2Rlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgdG9vbGtpdHRlbjsKKwor
dm9pZCBVUkxCYXI6OnNldENsaWVudChDbGllbnQmJiBjbGllbnQpCit7CisgICAgbV9jbGllbnQg
PSBzdGQ6Om1vdmUoY2xpZW50KTsKK30KKwordm9pZCBVUkxCYXI6OnVwZGF0ZVNlbGYoKQorewor
ICAgIFRleHRCb3g6OnVwZGF0ZVNlbGYoKTsKKworICAgIGlmIChmb2N1c2VkV2lkZ2V0KCkgPT0g
dGhpcyAmJiBtX2ltZURpYWxvZyAmJiBtX2ltZURpYWxvZy0+aXNGaW5pc2hlZCgpKSB7CisgICAg
ICAgIHNldFRleHQobV9pbWVEaWFsb2ctPmdldEltZVRleHQoKS5jX3N0cigpKTsKKyAgICAgICAg
bV9pbWVEaWFsb2cucmVzZXQoKTsKKyAgICAgICAgaWYgKG1fY2xpZW50Lm9uRGVjaWRlVVJMKQor
ICAgICAgICAgICAgbV9jbGllbnQub25EZWNpZGVVUkwodGhpcywgZ2V0VGV4dCgpKTsKKyAgICB9
Cit9CisKK2Jvb2wgVVJMQmFyOjpvbk1vdXNlTW92ZSh0b29sa2l0dGVuOjpJbnRQb2ludCkKK3sK
KyAgICBzZXRGb2N1c2VkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVVJMQmFyOjpv
bktleURvd24oaW50MzJfdCB2aXJ0dWFsS2V5Q29kZSkKK3sKKyAgICBzd2l0Y2ggKHZpcnR1YWxL
ZXlDb2RlKSB7CisgICAgY2FzZSBWS19SRVRVUk46CisgICAgICAgIHNldEZvY3VzZWQoKTsKKyAg
ICAgICAgb25TZWxlY3QoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBVUkxCYXI6Om9uU2VsZWN0KCkKK3sKKyAgICBFZGl0b3JTdGF0
ZSBlZGl0b3JTdGF0ZTsKKyAgICBlZGl0b3JTdGF0ZS5pbnB1dFR5cGUgPSBJbnB1dEZpZWxkVHlw
ZTo6VXJsOworICAgIGVkaXRvclN0YXRlLnN1cHBvcnRMYW5ndWFnZSA9IElucHV0RmllbGRMYW5n
dWFnZTo6RW5nbGlzaF9VczsKKyAgICBlZGl0b3JTdGF0ZS50aXRsZSA9ICJJbnB1dCBVUkwiOwor
ICAgIGVkaXRvclN0YXRlLnRleHQgPSBzdGQ6OnN0cmluZyhnZXRUZXh0KCkpOworICAgIGVkaXRv
clN0YXRlLnBvc2l0aW9uID0gZ2xvYmFsUG9zaXRpb24oKTsKKyAgICBlZGl0b3JTdGF0ZS5pc0lu
TG9naW5Gb3JtID0gZmFsc2U7CisgICAgbV9pbWVEaWFsb2cgPSBJbWVEaWFsb2c6OmNyZWF0ZShl
ZGl0b3JTdGF0ZSk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlv
bi9VUkxCYXIuaCBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1VSTEJhci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmZlMjQ1MGNmYWVjMDRlNDNmZTM5ZDdlYjNkZmIyMDJiZWNkNWY2MTgKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9VUkxCYXIuaApAQCAtMCww
ICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50
ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8dG9v
bGtpdHRlbi9JbWVEaWFsb2cuaD4KKyNpbmNsdWRlIDx0b29sa2l0dGVuL1RleHRCb3guaD4KKwor
Y2xhc3MgVVJMQmFyIDogcHVibGljIHRvb2xraXR0ZW46OlRleHRCb3ggeworcHVibGljOgorICAg
IHN0cnVjdCBDbGllbnQgeworICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoVVJMQmFyKiwgY29u
c3QgY2hhciopPiBvbkRlY2lkZVVSTDsKKyAgICB9OworCisgICAgdm9pZCBzZXRDbGllbnQoQ2xp
ZW50JiYpOworCitwcml2YXRlOgorICAgIHZvaWQgdXBkYXRlU2VsZigpIGZpbmFsOworICAgIGJv
b2wgb25Nb3VzZU1vdmUodG9vbGtpdHRlbjo6SW50UG9pbnQpIGZpbmFsOworICAgIGJvb2wgb25L
ZXlEb3duKGludDMyX3QgdmlydHVhbEtleUNvZGUpIGZpbmFsOworICAgIHZvaWQgb25TZWxlY3Qo
KTsKKworICAgIENsaWVudCBtX2NsaWVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8dG9vbGtpdHRl
bjo6SW1lRGlhbG9nPiBtX2ltZURpYWxvZzsKK307CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJv
d3Nlci9wbGF5c3RhdGlvbi9XZWJDb250ZXh0LmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlz
dGF0aW9uL1dlYkNvbnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI5ZDEzNTBlMDRjYzBlMDQ1ZWE3NGZl
MDg5NGJiYWE5MzUwNWU0OGEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9w
bGF5c3RhdGlvbi9XZWJDb250ZXh0LmNwcApAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJXZWJDb250ZXh0LmgiCisKKyNpbmNsdWRlICJTdHJpbmdVdGlscy5oIgor
I2luY2x1ZGUgPFdlYktpdC9XS0NvbnRleHRDb25maWd1cmF0aW9uUGxheVN0YXRpb24uaD4KKyNp
bmNsdWRlIDxXZWJLaXQvV0tDb250ZXh0UHJpdmF0ZS5oPgorI2luY2x1ZGUgPFdlYktpdC9XS1By
ZWZlcmVuY2VzUmVmLmg+CisjaW5jbHVkZSA8V2ViS2l0L1dLUHJlZmVyZW5jZXNSZWZQcml2YXRl
Lmg+CisjaW5jbHVkZSA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb25SZWYu
aD4KKyNpbmNsdWRlIDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmg+CisjaW5jbHVkZSA8
V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVJlZkN1cmwuaD4KKworI2RlZmluZSBNQUtFX1BST0NF
U1NfUEFUSCh4KSAiL2FwcDAvIiAjeCAiLnNlbGYiCisKK3N0ZDo6d2Vha19wdHI8V2ViQ29udGV4
dD4gV2ViQ29udGV4dDo6c19pbnN0YW5jZTsKKworc3RkOjpzaGFyZWRfcHRyPFdlYkNvbnRleHQ+
IFdlYkNvbnRleHQ6OnNpbmdsZXRvbigpCit7CisgICAgYXV0byByZXQgPSBzX2luc3RhbmNlLmxv
Y2soKTsKKyAgICBpZiAoIXJldCkgeworICAgICAgICByZXQgPSBzdGQ6OnNoYXJlZF9wdHI8V2Vi
Q29udGV4dD4obmV3IFdlYkNvbnRleHQoKSk7CisgICAgICAgIHNfaW5zdGFuY2UgPSByZXQ7Cisg
ICAgfQorICAgIHJldHVybiBzX2luc3RhbmNlLmxvY2soKTsKK30KKworV2ViQ29udGV4dDo6V2Vi
Q29udGV4dCgpCit7CisgICAgV0tSZXRhaW5QdHI8V0tDb250ZXh0Q29uZmlndXJhdGlvblJlZj4g
Y29udGV4dENvbmZpZ3VyYXRpb24gPSBhZG9wdFdLKFdLQ29udGV4dENvbmZpZ3VyYXRpb25DcmVh
dGUoKSk7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdlYlByb2Nlc3NQYXRoID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhNQUtFX1BST0NFU1NfUEFUSChXZWJQ
cm9jZXNzKSkpOworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBuZXR3b3JrUHJvY2Vzc1Bh
dGggPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKE1BS0VfUFJPQ0VTU19Q
QVRIKE5ldHdvcmtQcm9jZXNzKSkpOworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBsb2Nh
bFN0b3JhZ2VQYXRoID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiL2Rh
dGEvbWluaWJyb3dzZXIvbG9jYWwiKSk7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
ZGlhS2V5UGF0aCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIi9kYXRh
L21pbmlicm93c2VyL21laWRha2V5IikpOworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBy
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGF0aCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIi9kYXRhL21pbmlicm93c2VyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MiKSk7Cisg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5ldHdvcmtDYWNoZVBhdGggPSBhZG9wdFdLKFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIvZGF0YS9taW5pYnJvd3Nlci9OZXR3b3JrQ2Fj
aGUiKSk7CisKKyAgICBXS0NvbnRleHRDb25maWd1cmF0aW9uU2V0VXNlcklkKGNvbnRleHRDb25m
aWd1cmF0aW9uLmdldCgpLCAtMSk7CisgICAgV0tDb250ZXh0Q29uZmlndXJhdGlvblNldFdlYlBy
b2Nlc3NQYXRoKGNvbnRleHRDb25maWd1cmF0aW9uLmdldCgpLCB3ZWJQcm9jZXNzUGF0aC5nZXQo
KSk7CisgICAgV0tDb250ZXh0Q29uZmlndXJhdGlvblNldE5ldHdvcmtQcm9jZXNzUGF0aChjb250
ZXh0Q29uZmlndXJhdGlvbi5nZXQoKSwgbmV0d29ya1Byb2Nlc3NQYXRoLmdldCgpKTsKKworICAg
IGF1dG8gZGF0YVN0b3JlQ29uZmlndXJhdGlvbiA9IGFkb3B0V0soV0tXZWJzaXRlRGF0YVN0b3Jl
Q29uZmlndXJhdGlvbkNyZWF0ZSgpKTsKKyAgICBXS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0
aW9uU2V0TG9jYWxTdG9yYWdlRGlyZWN0b3J5KGRhdGFTdG9yZUNvbmZpZ3VyYXRpb24uZ2V0KCks
IGxvY2FsU3RvcmFnZVBhdGguZ2V0KCkpOworICAgIFdLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3Vy
YXRpb25TZXRNZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KGRhdGFTdG9yZUNvbmZpZ3VyYXRpb24u
Z2V0KCksIG1lZGlhS2V5UGF0aC5nZXQoKSk7CisgICAgV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmln
dXJhdGlvblNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoZGF0YVN0b3JlQ29uZmln
dXJhdGlvbi5nZXQoKSwgcmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhdGguZ2V0KCkpOworICAgIFdL
V2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb25TZXROZXR3b3JrQ2FjaGVEaXJlY3RvcnkoZGF0
YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKSwgbmV0d29ya0NhY2hlUGF0aC5nZXQoKSk7CisgICAg
V0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvblNldE5ldHdvcmtDYWNoZVNwZWN1bGF0aXZl
VmFsaWRhdGlvbkVuYWJsZWQoZGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKSwgdHJ1ZSk7Cisg
ICAgV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvblNldFN0YWxlV2hpbGVSZXZhbGlkYXRl
RW5hYmxlZChkYXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpLCB0cnVlKTsKKyAgICBtX3dlYnNp
dGVEYXRhU3RvcmUgPSBXS1dlYnNpdGVEYXRhU3RvcmVDcmVhdGVXaXRoQ29uZmlndXJhdGlvbihk
YXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpKTsKKworICAgIG1fY29udGV4dCA9IGFkb3B0V0so
V0tDb250ZXh0Q3JlYXRlV2l0aENvbmZpZ3VyYXRpb24oY29udGV4dENvbmZpZ3VyYXRpb24uZ2V0
KCkpKTsKKyAgICBXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZShtX2NvbnRleHQu
Z2V0KCksIG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKSk7CisgICAgV0tDb250ZXh0U2V0VXNlc1Np
bmdsZVdlYlByb2Nlc3MobV9jb250ZXh0LmdldCgpLCB0cnVlKTsKKworICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBncm91cE5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJEZWZhdWx0IikpOworICAgIG1fcGFnZUdyb3VwID0gYWRvcHRXSyhXS1BhZ2VHcm91
cENyZWF0ZVdpdGhJZGVudGlmaWVyKGdyb3VwTmFtZS5nZXQoKSkpOworCisgICAgbV9wcmVmZXJl
bmNlc01hc3RlciA9IGFkb3B0V0soV0tQcmVmZXJlbmNlc0NyZWF0ZSgpKTsKKyAgICBXS1ByZWZl
cmVuY2VzU2V0RnVsbFNjcmVlbkVuYWJsZWQobV9wcmVmZXJlbmNlc01hc3Rlci5nZXQoKSwgdHJ1
ZSk7CisgICAgV0tQcmVmZXJlbmNlc1NldEROU1ByZWZldGNoaW5nRW5hYmxlZChtX3ByZWZlcmVu
Y2VzTWFzdGVyLmdldCgpLCB0cnVlKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0TmVlZHNTaXRlU3Bl
Y2lmaWNRdWlya3MobV9wcmVmZXJlbmNlc01hc3Rlci5nZXQoKSwgZmFsc2UpOworfQorCitXZWJD
b250ZXh0Ojp+V2ViQ29udGV4dCgpCit7Cit9CisKK3ZvaWQgV2ViQ29udGV4dDo6YWRkV2luZG93
KFdlYlZpZXdXaW5kb3cqIHdpbmRvdykKK3sKKyAgICBtX3dpbmRvd3MucHVzaF9iYWNrKHdpbmRv
dyk7Cit9CisKK3ZvaWQgV2ViQ29udGV4dDo6cmVtb3ZlV2luZG93KFdlYlZpZXdXaW5kb3cqIHdp
bmRvdykKK3sKKyAgICBtX3dpbmRvd3MucmVtb3ZlKHdpbmRvdyk7Cit9CmRpZmYgLS1naXQgYS9U
b29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9XZWJDb250ZXh0LmggYi9Ub29scy9NaW5pQnJv
d3Nlci9wbGF5c3RhdGlvbi9XZWJDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmMwM2MyMWYzMWQyMjEw
ZWI4OTFmYjExYzNjODQxNzRlOTY1OTVmNAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL01pbmlC
cm93c2VyL3BsYXlzdGF0aW9uL1dlYkNvbnRleHQuaApAQCAtMCwwICsxLDU4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8V2ViS2l0L1dLQ29udGV4dC5oPgor
I2luY2x1ZGUgPFdlYktpdC9XS1BhZ2VDb25maWd1cmF0aW9uUmVmLmg+CisjaW5jbHVkZSA8V2Vi
S2l0L1dLUGFnZUdyb3VwLmg+CisjaW5jbHVkZSA8V2ViS2l0L1dLUmV0YWluUHRyLmg+CisjaW5j
bHVkZSA8bGlzdD4KKworY2xhc3MgV2ViVmlld1dpbmRvdzsKKworY2xhc3MgV2ViQ29udGV4dCB7
Citwcm90ZWN0ZWQ6CisgICAgV2ViQ29udGV4dCgpOworcHVibGljOgorICAgIH5XZWJDb250ZXh0
KCk7CisgICAgc3RhdGljIHN0ZDo6c2hhcmVkX3B0cjxXZWJDb250ZXh0PiBzaW5nbGV0b24oKTsK
KworICAgIFdLQ29udGV4dFJlZiBjb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9
CisgICAgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwKCkgeyByZXR1cm4gbV9wYWdlR3JvdXAuZ2V0
KCk7IH0KKyAgICBXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzKCkgeyByZXR1cm4gbV9wcmVm
ZXJlbmNlc01hc3Rlci5nZXQoKTsgfQorICAgIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiB3ZWJzaXRl
RGF0YVN0b3JlKCkgeyByZXR1cm4gbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpOyB9CisKKyAgICB2
b2lkIGFkZFdpbmRvdyhXZWJWaWV3V2luZG93Kik7CisgICAgdm9pZCByZW1vdmVXaW5kb3coV2Vi
Vmlld1dpbmRvdyopOworCitwcml2YXRlOgorICAgIHN0YXRpYyBzdGQ6OndlYWtfcHRyPFdlYkNv
bnRleHQ+IHNfaW5zdGFuY2U7CisgICAgV0tSZXRhaW5QdHI8V0tDb250ZXh0UmVmPiBtX2NvbnRl
eHQ7CisgICAgV0tSZXRhaW5QdHI8V0tQYWdlR3JvdXBSZWY+IG1fcGFnZUdyb3VwOworICAgIFdL
UmV0YWluUHRyPFdLUHJlZmVyZW5jZXNSZWY+IG1fcHJlZmVyZW5jZXNNYXN0ZXI7CisgICAgV0tS
ZXRhaW5QdHI8V0tXZWJzaXRlRGF0YVN0b3JlUmVmPiBtX3dlYnNpdGVEYXRhU3RvcmU7CisgICAg
c3RkOjpsaXN0PFdlYlZpZXdXaW5kb3cqPiBtX3dpbmRvd3M7Cit9OwpkaWZmIC0tZ2l0IGEvVG9v
bHMvTWluaUJyb3dzZXIvcGxheXN0YXRpb24vV2ViVmlld1dpbmRvdy5jcHAgYi9Ub29scy9NaW5p
QnJvd3Nlci9wbGF5c3RhdGlvbi9XZWJWaWV3V2luZG93LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44OTMxZjFm
MzY2NGMxY2Y1MTI5NDFkODFiNTViNDA2NDMwMzI5NGE1Ci0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvTWluaUJyb3dzZXIvcGxheXN0YXRpb24vV2ViVmlld1dpbmRvdy5jcHAKQEAgLTAsMCArMSw0
MjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRh
aW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIldlYlZpZXdXaW5kb3cuaCIKKworI2lu
Y2x1ZGUgIk1haW5XaW5kb3cuaCIKKyNpbmNsdWRlICJTdHJpbmdVdGlscy5oIgorI2luY2x1ZGUg
IlRvb2xraXR0ZW5VdGlscy5oIgorI2luY2x1ZGUgPEtleWJvYXJkRXZlbnRzLmg+CisjaW5jbHVk
ZSA8V2ViS2l0L1dLUGFnZS5oPgorI2luY2x1ZGUgPFdlYktpdC9XS1BhZ2VQcml2YXRlUGxheVN0
YXRpb24uaD4KKyNpbmNsdWRlIDxXZWJLaXQvV0tQcmVmZXJlbmNlc1JlZi5oPgorI2luY2x1ZGUg
PFdlYktpdC9XS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oPgorI2luY2x1ZGUgPFdlYktpdC9XS1VS
TC5oPgorI2luY2x1ZGUgPGNhaXJvL2NhaXJvLmg+CisjaW5jbHVkZSA8bWFwPgorI2luY2x1ZGUg
PHRvb2xraXR0ZW4vQXBwbGljYXRpb24uaD4KKyNpbmNsdWRlIDx0b29sa2l0dGVuL0N1cnNvci5o
PgorI2luY2x1ZGUgPHRvb2xraXR0ZW4vTWVzc2FnZURpYWxvZy5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgdG9vbGtpdHRlbjsKKworaW5saW5lIFdlYlZpZXdXaW5kb3cqIHRvV2ViVmlldyhjb25zdCB2
b2lkKiBjbGllbnRJbmZvKQoreworICAgIHJldHVybiBjb25zdF9jYXN0PFdlYlZpZXdXaW5kb3cq
PihzdGF0aWNfY2FzdDxjb25zdCBXZWJWaWV3V2luZG93Kj4oY2xpZW50SW5mbykpOworfQorCitz
dGF0aWMgdm9pZCBzZXRDdXJzb3IoV0tDdXJzb3JUeXBlIGN1cnNvclR5cGUpCit7CisgICAgc3dp
dGNoIChjdXJzb3JUeXBlKSB7CisgICAgY2FzZSBrV0tDdXJzb3JUeXBlSGFuZDoKKyAgICAgICAg
Q3Vyc29yOjpzaW5nbGV0b24oKS5zZXRUeXBlKEN1cnNvcjo6a1R5cGVIYW5kKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBrV0tDdXJzb3JUeXBlUG9pbnRlcjoKKyAgICBkZWZhdWx0OgorICAg
ICAgICBDdXJzb3I6OnNpbmdsZXRvbigpLnNldFR5cGUoQ3Vyc29yOjprVHlwZVBvaW50ZXIpOwor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxXZWJWaWV3V2luZG93
PiBXZWJWaWV3V2luZG93OjpjcmVhdGUoQ2xpZW50JiYgd2luZG93Q2xpZW50LCBXS1BhZ2VDb25m
aWd1cmF0aW9uUmVmIGNvbmZpZ3VyYXRpb25SZWYpCit7CisgICAgYXV0byBjb250ZXh0ID0gV2Vi
Q29udGV4dDo6c2luZ2xldG9uKCk7CisKKyAgICBpZiAoY29uZmlndXJhdGlvblJlZikKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8V2ViVmlld1dpbmRvdz4oY29uZmlndXJhdGlvblJl
Ziwgc3RkOjptb3ZlKHdpbmRvd0NsaWVudCkpOworCisgICAgV0tSZXRhaW5QdHI8V0tQYWdlQ29u
ZmlndXJhdGlvblJlZj4gY29uZmlndXJhdGlvbiA9IGFkb3B0V0soV0tQYWdlQ29uZmlndXJhdGlv
bkNyZWF0ZSgpKTsKKyAgICBXS1BhZ2VDb25maWd1cmF0aW9uU2V0Q29udGV4dChjb25maWd1cmF0
aW9uLmdldCgpLCBjb250ZXh0LT5jb250ZXh0KCkpOworICAgIFdLUGFnZUNvbmZpZ3VyYXRpb25T
ZXRQYWdlR3JvdXAoY29uZmlndXJhdGlvbi5nZXQoKSwgY29udGV4dC0+cGFnZUdyb3VwKCkpOwor
ICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFdlYlZpZXdXaW5kb3c+KGNvbmZpZ3VyYXRpb24u
Z2V0KCksIHN0ZDo6bW92ZSh3aW5kb3dDbGllbnQpKTsKK30KKworV2ViVmlld1dpbmRvdzo6V2Vi
Vmlld1dpbmRvdyhXS1BhZ2VDb25maWd1cmF0aW9uUmVmIGNvbmZpZ3VyYXRpb24sIENsaWVudCYm
IHdpbmRvd0NsaWVudCkKKyAgICA6IG1fY2xpZW50KHN0ZDo6bW92ZSh3aW5kb3dDbGllbnQpKQor
eworICAgIC8vIEZJWE1FOiBTaG91bGQgY2hpbGQgc2hhcmUgdGhlIHByZWZlcmVuY2Ugd2l0aCBw
YXJlbnQ/CisgICAgbV9jb250ZXh0ID0gV2ViQ29udGV4dDo6c2luZ2xldG9uKCk7CisgICAgbV9w
cmVmZXJlbmNlcyA9IFdLUHJlZmVyZW5jZXNDcmVhdGVDb3B5KG1fY29udGV4dC0+cHJlZmVyZW5j
ZXMoKSk7CisgICAgV0tQYWdlQ29uZmlndXJhdGlvblNldFByZWZlcmVuY2VzKGNvbmZpZ3VyYXRp
b24sIG1fcHJlZmVyZW5jZXMuZ2V0KCkpOworCisgICAgV0tQcmVmZXJlbmNlc1NldEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdFbmFibGVkKG1fcHJlZmVyZW5jZXMuZ2V0KCksIGZhbHNlKTsKKyAgICBX
S1ByZWZlcmVuY2VzU2V0RnVsbFNjcmVlbkVuYWJsZWQobV9wcmVmZXJlbmNlcy5nZXQoKSwgdHJ1
ZSk7CisKKyAgICBtX3ZpZXcgPSBXS1ZpZXdDcmVhdGUoY29uZmlndXJhdGlvbik7CisgICAgbV9j
b250ZXh0LT5hZGRXaW5kb3codGhpcyk7CisKKyAgICBXS1ZpZXdDbGllbnRWMCB2aWV3Q2xpZW50
IHsKKyAgICAgICAgeyAwLCB0aGlzIH0sCisKKyAgICAgICAgLy8gc2V0Vmlld05lZWRzRGlzcGxh
eQorICAgICAgICBbXShXS1ZpZXdSZWYsIFdLUmVjdCByZWN0LCBjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKSB7CisgICAgICAgICAgICB0b1dlYlZpZXcoY2xpZW50SW5mbyktPnVwZGF0ZVN1cmZhY2Uo
dG9US1JlY3QocmVjdCkpOworICAgICAgICB9LAorCisgICAgICAgIC8vIGVudGVyRnVsbFNjcmVl
bgorICAgICAgICBbXShXS1ZpZXdSZWYgdmlldywgY29uc3Qgdm9pZCopIHsKKyAgICAgICAgICAg
IFdLVmlld1dpbGxFbnRlckZ1bGxTY3JlZW4odmlldyk7CisgICAgICAgICAgICBXS1ZpZXdEaWRF
bnRlckZ1bGxTY3JlZW4odmlldyk7CisgICAgICAgIH0sCisgICAgICAgIC8vIGV4aXRGdWxsU2Ny
ZWVuCisgICAgICAgIFtdKFdLVmlld1JlZiB2aWV3LCBjb25zdCB2b2lkKikgeworICAgICAgICAg
ICAgV0tWaWV3V2lsbEV4aXRGdWxsU2NyZWVuKHZpZXcpOworICAgICAgICAgICAgV0tWaWV3RGlk
RXhpdEZ1bGxTY3JlZW4odmlldyk7CisgICAgICAgIH0sCisgICAgICAgIG51bGxwdHIsIC8vIGNs
b3NlRnVsbFNjcmVlbgorICAgICAgICBudWxscHRyLCAvLyBiZWdhbkVudGVyRnVsbFNjcmVlbgor
ICAgICAgICBudWxscHRyLCAvLyBiZWdhbkV4aXRGdWxsU2NyZWVuCisKKyAgICAgICAgLy8gc2V0
Q3Vyc29yCisgICAgICAgIFtdKFdLVmlld1JlZiwgV0tDdXJzb3JUeXBlIGN1cnNvclR5cGUsIGNv
bnN0IHZvaWQqKSB7CisgICAgICAgICAgICBzZXRDdXJzb3IoY3Vyc29yVHlwZSk7CisgICAgICAg
IH0KKyAgICB9OworICAgIFdLVmlld1NldFZpZXdDbGllbnQobV92aWV3LmdldCgpLCAmdmlld0Ns
aWVudC5iYXNlKTsKKworICAgIFdLVmlld1BhZ2VMb2FkU3RhdGVDbGllbnRWMCB2aWV3UGFnZUxv
YWRTdGF0ZUNsaWVudCB7CisgICAgICAgIHsgMCwgdGhpcyB9LAorCisgICAgICAgIC8vIGRpZENo
YW5nZVRpdGxlCisgICAgICAgIFtdKFdLVmlld1JlZiwgV0tTdHJpbmdSZWYgdGl0bGUsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pIHsKKyAgICAgICAgICAgIHRvV2ViVmlldyhjbGllbnRJbmZvKS0+
c2V0VGl0bGUodG9VVEY4U3RyaW5nKHRpdGxlKSk7CisgICAgICAgIH0sCisKKyAgICAgICAgLy8g
ZGlkQ2hhbmdlQWN0aXZlVVJMCisgICAgICAgIFtdKFdLVmlld1JlZiwgV0tTdHJpbmdSZWYgdXJs
LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKSB7CisgICAgICAgICAgICB0b1dlYlZpZXcoY2xpZW50
SW5mbyktPnNldFVSTCh0b1VURjhTdHJpbmcodXJsKSk7CisgICAgICAgIH0sCisKKyAgICAgICAg
Ly8gZGlkQ2hhbmdlRXN0aW1hdGVkUHJvZ3Jlc3MKKyAgICAgICAgW10oV0tWaWV3UmVmLCBkb3Vi
bGUgcHJvZ3Jlc3MsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pIHsKKyAgICAgICAgICAgIHRvV2Vi
VmlldyhjbGllbnRJbmZvKS0+c2V0UHJvZ3Jlc3MocHJvZ3Jlc3MpOworICAgICAgICB9LAorCisg
ICAgICAgIG51bGxwdHIsIC8vIGRpZENoYW5nZVdlYlByb2Nlc3NJc1Jlc3BvbnNpdmUKKworICAg
ICAgICBudWxscHRyLCAvLyBkaWRTd2FwV2ViUHJvY2Vzc2VzCisgICAgfTsKKyAgICBXS1ZpZXdT
ZXRWaWV3UGFnZUxvYWRTdGF0ZUNsaWVudChtX3ZpZXcuZ2V0KCksICZ2aWV3UGFnZUxvYWRTdGF0
ZUNsaWVudC5iYXNlKTsKKworICAgIFdLUGFnZVVJQ2xpZW50VjYgdWlDbGllbnQgeworICAgICAg
ICB7IDYsIHRoaXMgfSwKKyAgICAgICAgbnVsbHB0ciwgLy8gY3JlYXRlTmV3UGFnZV9kZXByZWNh
dGVkRm9yVXNlV2l0aFYwCisgICAgICAgIG51bGxwdHIsIC8vIHNob3dQYWdlCisgICAgICAgIG51
bGxwdHIsIC8vIGNsb3NlCisgICAgICAgIG51bGxwdHIsIC8vIHRha2VGb2N1cworICAgICAgICBu
dWxscHRyLCAvLyBmb2N1cworICAgICAgICBudWxscHRyLCAvLyB1bmZvY3VzCisgICAgICAgIG51
bGxwdHIsIC8vIHJ1bkphdmFTY3JpcHRBbGVydF9kZXByZWNhdGVkRm9yVXNlV2l0aFYwCisgICAg
ICAgIG51bGxwdHIsIC8vIHJ1bkphdmFTY3JpcHRDb25maXJtX2RlcHJlY2F0ZWRGb3JVc2VXaXRo
VjAKKyAgICAgICAgbnVsbHB0ciwgLy8gcnVuSmF2YVNjcmlwdFByb21wdF9kZXByZWNhdGVkRm9y
VXNlV2l0aFYwCisgICAgICAgIG51bGxwdHIsIC8vIHNldFN0YXR1c1RleHQKKyAgICAgICAgbnVs
bHB0ciwgLy8gbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnRfZGVwcmVjYXRlZEZvclVzZVdpdGhWMAor
ICAgICAgICBudWxscHRyLCAvLyBtaXNzaW5nUGx1Z2luQnV0dG9uQ2xpY2tlZF9kZXByZWNhdGVk
Rm9yVXNlV2l0aFYwCisgICAgICAgIG51bGxwdHIsIC8vIGRpZE5vdEhhbmRsZUtleUV2ZW50Cisg
ICAgICAgIG51bGxwdHIsIC8vIGRpZE5vdEhhbmRsZVdoZWVsRXZlbnQKKyAgICAgICAgbnVsbHB0
ciwgLy8gdG9vbGJhcnNBcmVWaXNpYmxlCisgICAgICAgIG51bGxwdHIsIC8vIHNldFRvb2xiYXJz
QXJlVmlzaWJsZQorICAgICAgICBudWxscHRyLCAvLyBtZW51QmFySXNWaXNpYmxlCisgICAgICAg
IG51bGxwdHIsIC8vIHNldE1lbnVCYXJJc1Zpc2libGUKKyAgICAgICAgbnVsbHB0ciwgLy8gc3Rh
dHVzQmFySXNWaXNpYmxlCisgICAgICAgIG51bGxwdHIsIC8vIHNldFN0YXR1c0JhcklzVmlzaWJs
ZQorICAgICAgICBudWxscHRyLCAvLyBpc1Jlc2l6YWJsZQorICAgICAgICBudWxscHRyLCAvLyBz
ZXRJc1Jlc2l6YWJsZQorICAgICAgICBudWxscHRyLCAvLyBnZXRXaW5kb3dGcmFtZQorICAgICAg
ICBudWxscHRyLCAvLyBzZXRXaW5kb3dGcmFtZQorICAgICAgICBudWxscHRyLCAvLyBydW5CZWZv
cmVVbmxvYWRDb25maXJtUGFuZWwKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkRHJhdworICAgICAg
ICBudWxscHRyLCAvLyBwYWdlRGlkU2Nyb2xsCisgICAgICAgIG51bGxwdHIsIC8vIGV4Y2VlZGVk
RGF0YWJhc2VRdW90YQorICAgICAgICBudWxscHRyLCAvLyBydW5PcGVuUGFuZWwKKyAgICAgICAg
bnVsbHB0ciwgLy8gZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdAor
ICAgICAgICBudWxscHRyLCAvLyBoZWFkZXJIZWlnaHQKKyAgICAgICAgbnVsbHB0ciwgLy8gZm9v
dGVySGVpZ2h0CisgICAgICAgIG51bGxwdHIsIC8vIGRyYXdIZWFkZXIKKyAgICAgICAgbnVsbHB0
ciwgLy8gZHJhd0Zvb3RlcgorICAgICAgICBudWxscHRyLCAvLyBwcmludEZyYW1lCisgICAgICAg
IG51bGxwdHIsIC8vIHJ1bk1vZGFsCisgICAgICAgIG51bGxwdHIsIC8vIFVzZWQgdG8gYmUgZGlk
Q29tcGxldGVSdWJiZXJCYW5kRm9yTWFpbkZyYW1lCisgICAgICAgIG51bGxwdHIsIC8vIHNhdmVE
YXRhVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIKKyAgICAgICAgbnVsbHB0ciwgLy8gc2hvdWxkSW50
ZXJydXB0SmF2YVNjcmlwdF91bmF2YWlsYWJsZQorICAgICAgICBudWxscHRyLCAvLyBjcmVhdGVO
ZXdQYWdlX2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjEKKyAgICAgICAgbnVsbHB0ciwgLy8gbW91c2VE
aWRNb3ZlT3ZlckVsZW1lbnQKKyAgICAgICAgbnVsbHB0ciwgLy8gZGVjaWRlUG9saWN5Rm9yTm90
aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3QKKyAgICAgICAgbnVsbHB0ciwgLy8gdW5hdmFpbGFi
bGVQbHVnaW5CdXR0b25DbGlja2VkX2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjEKKyAgICAgICAgbnVs
bHB0ciwgLy8gc2hvd0NvbG9yUGlja2VyCisgICAgICAgIG51bGxwdHIsIC8vIGhpZGVDb2xvclBp
Y2tlcgorICAgICAgICBudWxscHRyLCAvLyB1bmF2YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQK
KyAgICAgICAgbnVsbHB0ciwgLy8gcGlubmVkU3RhdGVEaWRDaGFuZ2UKKyAgICAgICAgbnVsbHB0
ciwgLy8gVXNlZCB0byBiZSBkaWRCZWdpblRyYWNraW5nUG90ZW50aWFsTG9uZ01vdXNlUHJlc3MK
KyAgICAgICAgbnVsbHB0ciwgLy8gVXNlZCB0byBiZSBkaWRSZWNvZ25pemVMb25nTW91c2VQcmVz
cworICAgICAgICBudWxscHRyLCAvLyBVc2VkIHRvIGJlIGRpZENhbmNlbFRyYWNraW5nUG90ZW50
aWFsTG9uZ01vdXNlUHJlc3MKKyAgICAgICAgbnVsbHB0ciwgLy8gaXNQbGF5aW5nQXVkaW9EaWRD
aGFuZ2UKKyAgICAgICAgbnVsbHB0ciwgLy8gZGVjaWRlUG9saWN5Rm9yVXNlck1lZGlhUGVybWlz
c2lvblJlcXVlc3QKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkQ2xpY2tBdXRvRmlsbEJ1dHRvbgor
ICAgICAgICBudWxscHRyLCAvLyBydW5KYXZhU2NyaXB0QWxlcnRfZGVwcmVjYXRlZEZvclVzZVdp
dGhWNQorICAgICAgICBudWxscHRyLCAvLyBydW5KYXZhU2NyaXB0Q29uZmlybV9kZXByZWNhdGVk
Rm9yVXNlV2l0aFY1CisgICAgICAgIG51bGxwdHIsIC8vIHJ1bkphdmFTY3JpcHRQcm9tcHRfZGVw
cmVjYXRlZEZvclVzZVdpdGhWNQorICAgICAgICBudWxscHRyLCAvLyBtZWRpYVNlc3Npb25NZXRh
ZGF0YURpZENoYW5nZQorICAgICAgICAvLyBjcmVhdGVOZXdQYWdlCisgICAgICAgIFtdKFdLUGFn
ZVJlZiBwYWdlLCBXS1BhZ2VDb25maWd1cmF0aW9uUmVmIGNvbmZpZ3VyYXRpb24sIFdLTmF2aWdh
dGlvbkFjdGlvblJlZiwgV0tXaW5kb3dGZWF0dXJlc1JlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5m
bykgLT5XS1BhZ2VSZWYgeworICAgICAgICAgICAgcmV0dXJuIHRvV2ViVmlldyhjbGllbnRJbmZv
KS0+Y3JlYXRlTmV3UGFnZShwYWdlLCBjb25maWd1cmF0aW9uKTsKKyAgICAgICAgfSwKKyAgICAg
ICAgbnVsbHB0ciwgLy8gcnVuSmF2YVNjcmlwdEFsZXJ0CisgICAgICAgIG51bGxwdHIsIC8vIHJ1
bkphdmFTY3JpcHRDb25maXJtCisgICAgICAgIG51bGxwdHIsIC8vIHJ1bkphdmFTY3JpcHRQcm9t
cHQKKyAgICAgICAgbnVsbHB0ciAvLyBjaGVja1VzZXJNZWRpYVBlcm1pc3Npb25Gb3JPcmlnaW4K
KyAgICB9OworICAgIFdLUGFnZVNldFBhZ2VVSUNsaWVudChwYWdlKCksICZ1aUNsaWVudC5iYXNl
KTsKK30KKworV2ViVmlld1dpbmRvdzo6fldlYlZpZXdXaW5kb3coKQoreworICAgIG1fY29udGV4
dC0+cmVtb3ZlV2luZG93KHRoaXMpOworICAgIFdLUGFnZUNsb3NlKHBhZ2UoKSk7Cit9CisKK1dL
UGFnZVJlZiBXZWJWaWV3V2luZG93OjpwYWdlKCkKK3sKKyAgICByZXR1cm4gV0tWaWV3R2V0UGFn
ZShtX3ZpZXcuZ2V0KCkpOworfQorCit2b2lkIFdlYlZpZXdXaW5kb3c6OmxvYWRVUkwoY29uc3Qg
Y2hhciogdXJsKQoreworICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmxTdHIgPSBhZG9wdFdL
KFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHVybCkpOworICAgIFdLUGFnZUxvYWRVUkwocGFn
ZSgpLCB1cmxTdHIuZ2V0KCkpOworfQorCit2b2lkIFdlYlZpZXdXaW5kb3c6OmdvQmFjaygpCit7
CisgICAgV0tQYWdlR29CYWNrKHBhZ2UoKSk7Cit9CisKK3ZvaWQgV2ViVmlld1dpbmRvdzo6Z29G
b3J3YXJkKCkKK3sKKyAgICBXS1BhZ2VHb0ZvcndhcmQocGFnZSgpKTsKK30KKwordm9pZCBXZWJW
aWV3V2luZG93OjpyZWxvYWQoKQoreworICAgIFdLUGFnZVJlbG9hZEZyb21PcmlnaW4ocGFnZSgp
KTsKK30KKwordm9pZCBXZWJWaWV3V2luZG93Ojp0b2dnbGVab29tRmFjdG9yKCkKK3sKKyAgICBj
b25zdCBpbnQgbWF4Wm9vbUZhY3RvciA9IDM7CisgICAgaW50IG5leHRab29tRmFjdG9yID0gKGlu
dClXS1BhZ2VHZXRQYWdlWm9vbUZhY3RvcihwYWdlKCkpICsgMTsKKyAgICBpZiAobmV4dFpvb21G
YWN0b3IgPiBtYXhab29tRmFjdG9yKQorICAgICAgICBuZXh0Wm9vbUZhY3RvciA9IDE7CisKKyAg
ICBXS1BhZ2VTZXRQYWdlWm9vbUZhY3RvcihwYWdlKCksIG5leHRab29tRmFjdG9yKTsKK30KKwor
dm9pZCBXZWJWaWV3V2luZG93OjpzZXRTaXplKHRvb2xraXR0ZW46OkludFNpemUgc2l6ZSkKK3sK
KyAgICBXaWRnZXQ6OnNldFNpemUoc2l6ZSk7CisgICAgV0tWaWV3U2V0U2l6ZShtX3ZpZXcuZ2V0
KCksIHRvV0tTaXplKHNpemUpKTsKKworICAgIHNpemVfdCBzdXJmYWNlU2l6ZSA9IGNhaXJvX2Zv
cm1hdF9zdHJpZGVfZm9yX3dpZHRoKENBSVJPX0ZPUk1BVF9BUkdCMzIsIHRoaXMtPm1fc2l6ZS53
KSAqIHRoaXMtPm1fc2l6ZS5oOworICAgIG1fc3VyZmFjZSA9IHN0ZDo6bWFrZV91bmlxdWU8dW5z
aWduZWQgY2hhcltdPihzdXJmYWNlU2l6ZSk7CisgICAgbWVtc2V0KG1fc3VyZmFjZS5nZXQoKSwg
MHhmZiwgc3VyZmFjZVNpemUpOworfQorCitib29sIFdlYlZpZXdXaW5kb3c6Om9uS2V5VXAoaW50
MzJfdCB2aXJ0dWFsS2V5Q29kZSkKK3sKKyAgICBzd2l0Y2ggKHZpcnR1YWxLZXlDb2RlKSB7Cisg
ICAgY2FzZSBWS19SRVRVUk46CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIFZLX1RS
SUFOR0xFOgorICAgIGNhc2UgVktfU1FVQVJFOgorICAgIGNhc2UgVktfT1BUSU9OUzoKKyAgICBj
YXNlIFZLX0wxOgorICAgIGNhc2UgVktfUjE6CisgICAgY2FzZSBWS19MMjoKKyAgICBjYXNlIFZL
X1IyOgorICAgIGNhc2UgVktfTDM6CisgICAgY2FzZSBWS19SMzoKKyAgICAgICAgLy8gSWdub3Jl
IHRoZXNlIGtleSBjb2RlLgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgV0tQ
YWdlSGFuZGxlS2V5Ym9hcmRFdmVudChwYWdlKCksIFdLS2V5Ym9hcmRFdmVudE1ha2Uoa1dLRXZl
bnRLZXlVcCwga1dLSW5wdXRUeXBlTm9ybWFsLCAiIiwgMCwga2V5SWRlbnRpZmllckZvcktleUNv
ZGUodmlydHVhbEtleUNvZGUpLCB2aXJ0dWFsS2V5Q29kZSwgLTEsIDAsIDApKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJWaWV3V2luZG93OjpvbktleURvd24oaW50MzJfdCB2aXJ0
dWFsS2V5Q29kZSkKK3sKKyAgICBzd2l0Y2ggKHZpcnR1YWxLZXlDb2RlKSB7CisgICAgY2FzZSBW
S19SRVRVUk46CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIFZLX1RSSUFOR0xFOgor
ICAgIGNhc2UgVktfU1FVQVJFOgorICAgIGNhc2UgVktfT1BUSU9OUzoKKyAgICBjYXNlIFZLX0wx
OgorICAgIGNhc2UgVktfUjE6CisgICAgY2FzZSBWS19MMjoKKyAgICBjYXNlIFZLX1IyOgorICAg
IGNhc2UgVktfTDM6CisgICAgY2FzZSBWS19SMzoKKyAgICAgICAgLy8gSWdub3JlIHRoZXNlIGtl
eSBjb2RlLgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIFdLUGFnZUhhbmRsZUtl
eWJvYXJkRXZlbnQocGFnZSgpLCBXS0tleWJvYXJkRXZlbnRNYWtlKGtXS0V2ZW50S2V5RG93biwg
a1dLSW5wdXRUeXBlTm9ybWFsLCAiIiwgMCwga2V5SWRlbnRpZmllckZvcktleUNvZGUodmlydHVh
bEtleUNvZGUpLCB2aXJ0dWFsS2V5Q29kZSwgLTEsIDAsIDApKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBXZWJWaWV3V2luZG93Ojpvbk1vdXNlTW92ZSh0b29sa2l0dGVuOjpJbnRQb2lu
dCBwb2ludCkKK3sKKyAgICBwb2ludCA9IGdsb2JhbFRvQ2xpZW50UG9zaXRpb24ocG9pbnQpOwor
ICAgIFdLUGFnZUhhbmRsZU1vdXNlRXZlbnQocGFnZSgpLCBXS01vdXNlRXZlbnRNYWtlKGtXS0V2
ZW50TW91c2VNb3ZlLCBrV0tFdmVudE1vdXNlQnV0dG9uTm9CdXR0b24sIFdLUG9pbnRNYWtlKHBv
aW50LngsIHBvaW50LnkpLCAwLCAwKSk7CisgICAgc2V0Rm9jdXNlZCgpOworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIFdlYlZpZXdXaW5kb3c6Om9uTW91c2VEb3duKHRvb2xraXR0ZW46Oklu
dFBvaW50IHBvaW50KQoreworICAgIHBvaW50ID0gZ2xvYmFsVG9DbGllbnRQb3NpdGlvbihwb2lu
dCk7CisKKyAgICBXS1BhZ2VIYW5kbGVNb3VzZUV2ZW50KHBhZ2UoKSwgV0tNb3VzZUV2ZW50TWFr
ZShrV0tFdmVudE1vdXNlRG93biwga1dLRXZlbnRNb3VzZUJ1dHRvbkxlZnRCdXR0b24sIFdLUG9p
bnRNYWtlKHBvaW50LngsIHBvaW50LnkpLCAwLCAwKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgV2ViVmlld1dpbmRvdzo6b25Nb3VzZVVwKHRvb2xraXR0ZW46OkludFBvaW50IHBvaW50
KQoreworICAgIHBvaW50ID0gZ2xvYmFsVG9DbGllbnRQb3NpdGlvbihwb2ludCk7CisgICAgV0tQ
YWdlSGFuZGxlTW91c2VFdmVudChwYWdlKCksIFdLTW91c2VFdmVudE1ha2Uoa1dLRXZlbnRNb3Vz
ZVVwLCBrV0tFdmVudE1vdXNlQnV0dG9uTGVmdEJ1dHRvbiwgV0tQb2ludE1ha2UocG9pbnQueCwg
cG9pbnQueSksIDAsIDApKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJWaWV3V2lu
ZG93OjpvbldoZWVsTW92ZSh0b29sa2l0dGVuOjpJbnRQb2ludCBwb2ludCwgdG9vbGtpdHRlbjo6
SW50UG9pbnQgd2hlZWxUaWNrcykKK3sKKyAgICBwb2ludCA9IGdsb2JhbFRvQ2xpZW50UG9zaXRp
b24ocG9pbnQpOworCisgICAgaW50IHdoZWVsVGlja3NYID0gd2hlZWxUaWNrcy54OworICAgIGlu
dCB3aGVlbFRpY2tzWSA9IHdoZWVsVGlja3MueTsKKyAgICBpZiAod2hlZWxUaWNrc1ggfHwgd2hl
ZWxUaWNrc1kpIHsKKyAgICAgICAgaW50IGRlbHRhWCA9IHdoZWVsVGlja3NYICogMTA7CisgICAg
ICAgIGludCBkZWx0YVkgPSB3aGVlbFRpY2tzWSAqIDEwOworCisgICAgICAgIFdLUGFnZUhhbmRs
ZVdoZWVsRXZlbnQocGFnZSgpLCBXS1doZWVsRXZlbnRNYWtlKGtXS0V2ZW50V2hlZWwsIFdLUG9p
bnRNYWtlKHBvaW50LngsIHBvaW50LnkpLCBXS1NpemVNYWtlKGRlbHRhWCwgZGVsdGFZKSwgV0tT
aXplTWFrZSh3aGVlbFRpY2tzWCwgd2hlZWxUaWNrc1kpLCAwKSk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViVmlld1dpbmRvdzo6
cGFpbnRTZWxmKEludFBvaW50IHBvc2l0aW9uKQoreworICAgIGlmICghZGlydHlSZWN0cygpLmVt
cHR5KCkpIHsKKyAgICAgICAgY2Fpcm9fc3VyZmFjZV90KiB3a3ZpZXdTdXJmYWNlID0gY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEobV9zdXJmYWNlLmdldCgpLCBDQUlST19GT1JN
QVRfQVJHQjMyLCB0aGlzLT5tX3NpemUudywgdGhpcy0+bV9zaXplLmgsIGNhaXJvX2Zvcm1hdF9z
dHJpZGVfZm9yX3dpZHRoKENBSVJPX0ZPUk1BVF9BUkdCMzIsIHRoaXMtPm1fc2l6ZS53KSk7Cisg
ICAgICAgIHN0ZDo6bGlzdDx0b29sa2l0dGVuOjpJbnRSZWN0Pjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBkaXJ0eVJlY3RzKCkuYmVnaW4oKTsKKyAgICAgICAgdG9vbGtpdHRlbjo6SW50UmVjdCB1bmlv
blJlY3QgPSAqaXQ7CisgICAgICAgIGl0Kys7CisgICAgICAgIHdoaWxlIChpdCAhPSBkaXJ0eVJl
Y3RzKCkuZW5kKCkpIHsKKyAgICAgICAgICAgIHVuaW9uUmVjdCArPSAqaXQ7CisgICAgICAgICAg
ICBpdCsrOworICAgICAgICB9CisgICAgICAgIGlmIChjYWlyb19zdXJmYWNlX3N0YXR1cyh3a3Zp
ZXdTdXJmYWNlKSA9PSBDQUlST19TVEFUVVNfU1VDQ0VTUykgeworICAgICAgICAgICAgY2Fpcm9f
dCogY3IgPSBjYWlyb19jcmVhdGUodGhpcy0+c3VyZmFjZSgpKTsKKyAgICAgICAgICAgIGNhaXJv
X3NldF9vcGVyYXRvcihjciwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKKyAgICAgICAgICAgIGNh
aXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjciwgd2t2aWV3U3VyZmFjZSwgMCwgMCk7CisgICAgICAg
ICAgICBjYWlyb19yZWN0YW5nbGUoY3IsIHVuaW9uUmVjdC5sZWZ0KCksIHVuaW9uUmVjdC50b3Ao
KSwgdW5pb25SZWN0LndpZHRoKCksIHVuaW9uUmVjdC5oZWlnaHQoKSk7CisgICAgICAgICAgICBj
YWlyb19maWxsKGNyKTsKKyAgICAgICAgICAgIGNhaXJvX2Rlc3Ryb3koY3IpOworICAgICAgICAg
ICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHdrdmlld1N1cmZhY2UpOworICAgICAgICB9CisgICAg
fQorICAgIGlmIChtX2FjdGl2ZSkKKyAgICAgICAgV2lkZ2V0OjpwYWludFNlbGYocG9zaXRpb24p
OworfQorCit2b2lkIFdlYlZpZXdXaW5kb3c6OnVwZGF0ZVNlbGYoKQoreworfQorCit2b2lkIFdl
YlZpZXdXaW5kb3c6OnVwZGF0ZVN1cmZhY2UodG9vbGtpdHRlbjo6SW50UmVjdCBkaXJ0eVJlY3Qp
Cit7CisgICAgV0tQYWdlUGFpbnQocGFnZSgpLCBtX3N1cmZhY2UuZ2V0KCksIFdLU2l6ZU1ha2Uo
dGhpcy0+bV9zaXplLncsIHRoaXMtPm1fc2l6ZS5oKSwgdG9XS1JlY3QoZGlydHlSZWN0KSk7Cisg
ICAgbV9kaXJ0eVJlY3RzICs9IGRpcnR5UmVjdDsKK30KKwordm9pZCBXZWJWaWV3V2luZG93Ojpz
ZXRUaXRsZShzdGQ6OnN0cmluZyYmIHRpdGxlKQoreworICAgIG1fdGl0bGUgPSB0aXRsZTsKKyAg
ICBpZiAobV9jbGllbnQuZGlkVXBkYXRlVGl0bGUpCisgICAgICAgIG1fY2xpZW50LmRpZFVwZGF0
ZVRpdGxlKHRoaXMpOworfQorCit2b2lkIFdlYlZpZXdXaW5kb3c6OnNldFVSTChzdGQ6OnN0cmlu
ZyYmIHVybCkKK3sKKyAgICBtX3VybCA9IHVybDsKKyAgICBpZiAobV9jbGllbnQuZGlkVXBkYXRl
VVJMKQorICAgICAgICBtX2NsaWVudC5kaWRVcGRhdGVVUkwodGhpcyk7Cit9CisKK3ZvaWQgV2Vi
Vmlld1dpbmRvdzo6c2V0UHJvZ3Jlc3MoZG91YmxlIHByb2dyZXNzKQoreworICAgIG1fcHJvZ3Jl
c3MgPSBwcm9ncmVzczsKKyAgICBpZiAobV9jbGllbnQuZGlkVXBkYXRlUHJvZ3Jlc3MpCisgICAg
ICAgIG1fY2xpZW50LmRpZFVwZGF0ZVByb2dyZXNzKHRoaXMpOworfQorCit2b2lkIFdlYlZpZXdX
aW5kb3c6OnNldEFjdGl2ZShib29sIGFjdGl2ZSkKK3sKKyAgICBpZiAobV9hY3RpdmUgPT0gYWN0
aXZlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2FjdGl2ZSA9IGFjdGl2ZTsKK30KKworV0tQ
YWdlUmVmIFdlYlZpZXdXaW5kb3c6OmNyZWF0ZU5ld1BhZ2UoV0tQYWdlUmVmLCBXS1BhZ2VDb25m
aWd1cmF0aW9uUmVmIGNvbmZpZ3VyYXRpb24pCit7CisgICAgaWYgKG1fY2xpZW50LmNyZWF0ZU5l
d1dpbmRvdykgeworICAgICAgICBhdXRvIG5ld1dlYlZpZXcgPSBtX2NsaWVudC5jcmVhdGVOZXdX
aW5kb3coY29uZmlndXJhdGlvbik7CisgICAgICAgIGF1dG8gbmV3UGFnZSA9IG5ld1dlYlZpZXct
PnBhZ2UoKTsKKyAgICAgICAgcmV0dXJuIG5ld1BhZ2U7CisgICAgfQorICAgIHJldHVybiBudWxs
cHRyOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRpb24vV2ViVmll
d1dpbmRvdy5oIGIvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRpb24vV2ViVmlld1dpbmRvdy5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjExZjhkNGNkMjFmN2E5Y2M0N2IzMmM4NDM1ZGZmNGM3ZGZmYzI3NzIKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9XZWJWaWV3V2lu
ZG93LmgKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IElu
dGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIldlYkNvbnRleHQuaCIKKyNpbmNsdWRlIDxXZWJLaXQvV0tSZXRhaW5QdHIuaD4K
KyNpbmNsdWRlIDxXZWJLaXQvV0tWaWV3Lmg+CisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUg
PHRvb2xraXR0ZW4vV2lkZ2V0Lmg+CisKK2NsYXNzIFdlYlZpZXdXaW5kb3cgOiBwdWJsaWMgdG9v
bGtpdHRlbjo6V2lkZ2V0IHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgQ2xpZW50IHsKKyAgICAgICAg
c3RkOjpmdW5jdGlvbjxXZWJWaWV3V2luZG93KihXS1BhZ2VDb25maWd1cmF0aW9uUmVmIGNvbmZp
Z3VyYXRpb24pPiBjcmVhdGVOZXdXaW5kb3c7CisKKyAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lk
KFdlYlZpZXdXaW5kb3cqKT4gZGlkVXBkYXRlVGl0bGU7CisgICAgICAgIHN0ZDo6ZnVuY3Rpb248
dm9pZChXZWJWaWV3V2luZG93Kik+IGRpZFVwZGF0ZVVSTDsKKyAgICAgICAgc3RkOjpmdW5jdGlv
bjx2b2lkKFdlYlZpZXdXaW5kb3cqKT4gZGlkVXBkYXRlUHJvZ3Jlc3M7CisgICAgfTsKKworICAg
IHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8V2ViVmlld1dpbmRvdz4gY3JlYXRlKENsaWVudCYmLCBX
S1BhZ2VDb25maWd1cmF0aW9uUmVmKTsKKworICAgIGV4cGxpY2l0IFdlYlZpZXdXaW5kb3coV0tQ
YWdlQ29uZmlndXJhdGlvblJlZiwgQ2xpZW50JiYpOworICAgIHZpcnR1YWwgfldlYlZpZXdXaW5k
b3coKTsKKworICAgIHZvaWQgbG9hZFVSTChjb25zdCBjaGFyKiB1cmwpOworICAgIHZvaWQgZ29C
YWNrKCk7CisgICAgdm9pZCBnb0ZvcndhcmQoKTsKKyAgICB2b2lkIHJlbG9hZCgpOworCisgICAg
dm9pZCB0b2dnbGVab29tRmFjdG9yKCk7CisKKyAgICB2b2lkIHNldFNpemUodG9vbGtpdHRlbjo6
SW50U2l6ZSkgZmluYWw7CisgICAgYm9vbCBvbktleVVwKGludDMyX3QgdmlydHVhbEtleUNvZGUp
IGZpbmFsOworICAgIGJvb2wgb25LZXlEb3duKGludDMyX3QgdmlydHVhbEtleUNvZGUpIGZpbmFs
OworICAgIGJvb2wgb25Nb3VzZU1vdmUodG9vbGtpdHRlbjo6SW50UG9pbnQpIGZpbmFsOworICAg
IGJvb2wgb25Nb3VzZVVwKHRvb2xraXR0ZW46OkludFBvaW50KSBmaW5hbDsKKyAgICBib29sIG9u
TW91c2VEb3duKHRvb2xraXR0ZW46OkludFBvaW50KSBmaW5hbDsKKyAgICBib29sIG9uV2hlZWxN
b3ZlKHRvb2xraXR0ZW46OkludFBvaW50LCB0b29sa2l0dGVuOjpJbnRQb2ludCkgZmluYWw7CisK
KyAgICBjb25zdCBzdGQ6OnN0cmluZyYgdGl0bGUoKSBjb25zdCB7IHJldHVybiBtX3RpdGxlOyB9
CisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9Cisg
ICAgZG91YmxlIHByb2dyZXNzKCkgY29uc3QgeyByZXR1cm4gbV9wcm9ncmVzczsgfQorCisgICAg
dm9pZCBzZXRBY3RpdmUoYm9vbCk7CisKK3ByaXZhdGU6CisgICAgV0tQYWdlUmVmIHBhZ2UoKTsK
KworICAgIHZvaWQgcGFpbnRTZWxmKHRvb2xraXR0ZW46OkludFBvaW50IHBvc2l0aW9uKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHVwZGF0ZVNlbGYoKSBvdmVycmlkZTsKKyAgICB2b2lkIHVwZGF0ZVN1
cmZhY2UodG9vbGtpdHRlbjo6SW50UmVjdCk7CisKKyAgICB2b2lkIHNldFRpdGxlKHN0ZDo6c3Ry
aW5nJiYpOworICAgIHZvaWQgc2V0VVJMKHN0ZDo6c3RyaW5nJiYpOworICAgIHZvaWQgc2V0UHJv
Z3Jlc3MoZG91YmxlKTsKKworICAgIFdLUGFnZVJlZiBjcmVhdGVOZXdQYWdlKFdLUGFnZVJlZiwg
V0tQYWdlQ29uZmlndXJhdGlvblJlZik7CisKKyAgICBXS1JldGFpblB0cjxXS1ZpZXdSZWY+IG1f
dmlldzsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8V2ViQ29udGV4dD4gbV9jb250ZXh0OworICAgIFdL
UmV0YWluUHRyPFdLUHJlZmVyZW5jZXNSZWY+IG1fcHJlZmVyZW5jZXM7CisKKyAgICBDbGllbnQg
bV9jbGllbnQ7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8dW5zaWduZWQgY2hhcltdPiBtX3N1cmZh
Y2U7CisKKyAgICBzdGQ6OnN0cmluZyBtX3RpdGxlOworICAgIHN0ZDo6c3RyaW5nIG1fdXJsOwor
ICAgIGRvdWJsZSBtX3Byb2dyZXNzIHsgMCB9OworCisgICAgYm9vbCBtX2FjdGl2ZSB7IGZhbHNl
IH07Cit9OwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRpb24vbWFpbi5j
cHAgYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9tYWluLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4y
OWY0NWIwMjEyMDZhZmQ5NmY3YzNmOTc4NzY2N2NmMjVkMzZkNDE4Ci0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRpb24vbWFpbi5jcHAKQEAgLTAsMCArMSw5MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1l
bnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiTWFpbldpbmRvdy5oIgorI2luY2x1ZGUgPFdl
YktpdC9XS1J1bkxvb3AuaD4KKyNpbmNsdWRlIDxkbGZjbi5oPgorI2luY2x1ZGUgPHRvb2xraXR0
ZW4vQXBwbGljYXRpb24uaD4KKwordXNpbmcgdG9vbGtpdHRlbjo6V2lkZ2V0OwordXNpbmcgdG9v
bGtpdHRlbjo6QXBwbGljYXRpb247CisKK3N0YXRpYyB2b2lkIGxvYWRMaWJyYXJ5T3JFeGl0KGNv
bnN0IGNoYXIqIG5hbWUpCit7CisgICAgaWYgKCFkbG9wZW4obmFtZSwgUlRMRF9OT1cpKSB7Cisg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGxvYWQgJXMuXG4iLCBuYW1lKTsKKyAg
ICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgIH0KK30KKworX19hdHRyaWJ1dGVfXygoY29u
c3RydWN0b3IoMTEwKSkpCitzdGF0aWMgdm9pZCBpbml0aWFsaXplKCkKK3sKKyAgICBsb2FkTGli
cmFyeU9yRXhpdCgiUG9zaXhXZWJLaXQiKTsKKyAgICBzZXRlbnZfbnAoIldlYkluc3BlY3RvclNl
cnZlclBvcnQiLCAiODY4IiwgMSk7CisKKyAgICBsb2FkTGlicmFyeU9yRXhpdCgibGlicG5nMTYi
KTsKKyAgICBsb2FkTGlicmFyeU9yRXhpdCgibGliaWN1Iik7CisgICAgbG9hZExpYnJhcnlPckV4
aXQoImxpYmZvbnRjb25maWciKTsKKyAgICBsb2FkTGlicmFyeU9yRXhpdCgibGliZnJlZXR5cGUi
KTsKKyAgICBsb2FkTGlicmFyeU9yRXhpdCgibGliaGFyZmJ1enoiKTsKKyAgICBsb2FkTGlicmFy
eU9yRXhpdCgibGliY2Fpcm8iKTsKKyAgICBsb2FkTGlicmFyeU9yRXhpdCgibGliVG9vbEtpdHRl
biIpOyAgICAKKyAgICBsb2FkTGlicmFyeU9yRXhpdCgibGliU2NlTktXZWJLaXRSZXF1aXJlbWVu
dHMiKTsKKyAgICBsb2FkTGlicmFyeU9yRXhpdCgibGliSmF2YVNjcmlwdENvcmUiKTsKKyAgICBs
b2FkTGlicmFyeU9yRXhpdCgibGliV2ViS2l0Iik7Cit9CisKK2NsYXNzIEFwcGxpY2F0aW9uQ2xp
ZW50IDogcHVibGljIEFwcGxpY2F0aW9uOjpDbGllbnQgeworcHVibGljOgorICAgIHZvaWQgcmVx
dWVzdE5leHRGcmFtZSgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBXS1J1bkxvb3BDYWxsT25N
YWluVGhyZWFkKHVwZGF0ZUFwcGxpY2F0aW9uLCB0aGlzKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgc3RhdGljIHZvaWQgdXBkYXRlQXBwbGljYXRpb24odm9pZCopCisgICAgeworICAgICAgICBB
cHBsaWNhdGlvbjo6c2luZ2xldG9uKCkudXBkYXRlKCk7CisgICAgfQorfTsKKworaW50IG1haW4o
aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBXS1J1bkxvb3BJbml0aWFsaXplTWFpbigp
OworCisgICAgQXBwbGljYXRpb25DbGllbnQgYXBwbGljYXRpb25DbGllbnQ7CisgICAgYXV0byYg
YXBwID0gQXBwbGljYXRpb246OnNpbmdsZXRvbigpOworICAgIGFwcC5pbml0KCZhcHBsaWNhdGlv
bkNsaWVudCk7CisKKyAgICBhdXRvIG1haW5XaW5kb3cgPSBzdGQ6Om1ha2VfdW5pcXVlPE1haW5X
aW5kb3c+KCk7CisgICAgbWFpbldpbmRvdy0+c2V0Rm9jdXNlZCgpOworICAgIGFwcC5zZXRSb290
V2lkZ2V0KG1vdmUobWFpbldpbmRvdykpOworCisgICAgLy8gUmVxdWVzdCB0aGUgZmlyc3QgZnJh
bWUgdG8gc3RhcnQgdGhlIGFwcGxpY2F0aW9uIGxvb3AuCisgICAgYXBwbGljYXRpb25DbGllbnQu
cmVxdWVzdE5leHRGcmFtZSgpOworCisgICAgV0tSdW5Mb29wUnVuTWFpbigpOworCisgICAgcmV0
dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9QbGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtlIGIv
VG9vbHMvUGxhdGZvcm1QbGF5U3RhdGlvbi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNTM1YjlhYmE4YTg1
MTZiMzRlOTVjMWRlZmYwODI0MGNlMjI3YTBkCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvUGxh
dGZvcm1QbGF5U3RhdGlvbi5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK2lmIChFTkFCTEVfV0VCS0lU
KQorICAgIGFkZF9zdWJkaXJlY3RvcnkoTWluaUJyb3dzZXIvcGxheXN0YXRpb24pCitlbmRpZiAo
KQpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IGRhY2NjMWNjZjk4ZDhh
ZTE3ZWQ1YWEwNWIwMDEwYjFmOTdmOTkxNTAuLjNlOWQ4MzNhYTU5ZGVlOTYwMDhiMjE4ZWY2N2Zl
ZDhlMDhmZjQ2Y2YgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAyMS0wMS0wNiAgWW9zaGlha2kgSml0c3VrYXdhICA8eW9zaGlha2kuaml0
c3VrYXdhQHNvbnkuY29tPgorCisgICAgICAgIFtQbGF5U3RhdGlvbl0gQWRkIE1pbmlCcm93c2Vy
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjAzNTkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbmFibGUg
RnVsbHNjcmVlbiBBUEkuCisKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc1BsYXlTdGF0
aW9uLmNtYWtlOgorCiAyMDIwLTExLTI2ICBMYXVybyBNb3VyYSAgPGxtb3VyYUBpZ2FsaWEuY29t
PgogCiAgICAgICAgIFtHVEtdW0dUSzRdIEJ1aWxkaW5nIHdpdGggR09iamVjdC1JbnRyb3NwZWN0
aW9uIHN1cHBvcnQgZG9lcyBub3Qgd29yawo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417146</attachid>
            <date>2021-01-06 19:58:51 -0800</date>
            <delta_ts>2021-01-06 20:01:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220359-20210107125849.patch</filename>
            <type>text/plain</type>
            <size>112681</size>
            <attacher name="Yoshiaki Jitsukawa">yoshiaki.jitsukawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcwMTgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWZmZDE5MWQzZWNhYTQy
ZjE2Njk5MDZlYWU2YWJkM2ZkZDgwYWQ0Ni4uMTEzYWU5MzFkODlhMGIzOWU5YzJkNWU1MjEwNDQ0
OWRlOWM0YjZkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDIxLTAxLTA2ICBZb3No
aWFraSBKaXRzdWthd2EgIDx5b3NoaWFraS5qaXRzdWthd2FAc29ueS5jb20+CisKKyAgICAgICAg
W1BsYXlTdGF0aW9uXSBBZGQgTWluaUJyb3dzZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDM1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCBXaWRnZXRQbGF5U3RhdGlvbiB0byBzdXBwb3J0IGN1
c3RvbSBjdXJzb3IuCisKKyAgICAgICAgTG9hZCBDQSBjZXJ0cyBpbiBDdXJsU1NMSGFuZGxlOjpw
bGF0Zm9ybUluaXRpYWxpemUoKS4KKworICAgICAgICAqIFBsYXRmb3JtUGxheVN0YXRpb24uY21h
a2U6IEFkZCBXaWRnZXRQbGF5U3RhdGlvbi5jcHAKKyAgICAgICAgKiBwbGF0Zm9ybS9XaWRnZXQu
Y3BwOiBBbGxvdyBQbGF5U3RhdGlvbiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL3BsYXlzdGF0aW9uL0N1cmxTU0xIYW5kbGVQbGF5U3RhdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDdXJsU1NMSGFuZGxlOjpwbGF0Zm9ybUluaXRpYWxpemUp
OiBMb2FkIENBIGNlcnRzLgorICAgICAgICAqIHBsYXRmb3JtL3BsYXlzdGF0aW9uL1dpZGdldFBs
YXlTdGF0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6On5XaWRnZXQp
OgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpzZXRGcmFtZVJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6V2lkZ2V0OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnNldEZvY3Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6c2V0Q3Vyc29yKTogQ2FsbCBob3N0V2luZG93
KCkncyBzZXRDdXJzb3IoKS4KKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6c2hvdyk6CisgICAg
ICAgIChXZWJDb3JlOjpXaWRnZXQ6OmhpZGUpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0Ojpz
ZXRJc1NlbGVjdGVkKToKKwogMjAyMC0xMS0yNiAgTGF1cm8gTW91cmEgIDxsbW91cmFAaWdhbGlh
LmNvbT4KIAogICAgICAgICBbR1RLNF0gQnVpbGQgZml4LiBBZGQgY2FzdCB3aGVuIHRha2luZyBj
b25zdCBkYXRhIG93bmVyc2hpcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBkNTE0M2NjN2U1MGY4MTc3MDNjYTZhY2Zk
OGYwM2YyMDU5MzY2YmM4Li5lZjY1NjRmMTgyMGMyYTY2MTU3N2Y3YjczNWUxYTgyYWMyNmYzOTRh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDIxLTAxLTA2ICBZb3NoaWFraSBKaXRzdWth
d2EgIDx5b3NoaWFraS5qaXRzdWthd2FAc29ueS5jb20+CisKKyAgICAgICAgW1BsYXlTdGF0aW9u
XSBBZGQgTWluaUJyb3dzZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIyMDM1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZCBXS1J1bmxvb3AgQVBJIHRvIGFsbG93IGFuIGV4dGVybmFsIHByb2dyYW0g
dG8gcnVuIFdlYktpdCdzIGdlbmVyaWMgcnVubG9vcC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQy9wbGF5c3RhdGlvbi9XS1J1bkxvb3AuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdLUnVuTG9v
cFJ1bk1haW4pOgorICAgICAgICAoV0tSdW5Mb29wU3RvcE1haW4pOgorICAgICAgICAoV0tSdW5M
b29wQ2FsbE9uTWFpblRocmVhZCk6CisgICAgICAgIChXS1J1bkxvb3BJbml0aWFsaXplTWFpbik6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLUnVuTG9vcC5oOiBBZGRl
ZC4KKworICAgICAgICBBZGQgcHJpdmF0ZSBXS1BhZ2VQYWludCgpIHRvIGRyYXcgY29udGVudHMg
dG8gYml0bWFwLgorICAgICAgICBSZW1vdmUgdW51c2VkIFdLUGFnZVNldFNpemUoKSBpbXBsZW1l
bnRhdGlvbi4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1BhZ2VQ
cml2YXRlUGxheVN0YXRpb24uY3BwOgorICAgICAgICAoZHJhd1BhZ2VCYWNrZ3JvdW5kKToKKyAg
ICAgICAgKFdLUGFnZUhhbmRsZU1vdXNlRXZlbnQpOiBGaXggYnV0dG9uIGNsaWNrIGV2ZW50IGhh
bmRsaW5nLgorICAgICAgICAoV0tQYWdlUGFpbnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Qy9wbGF5c3RhdGlvbi9XS1BhZ2VQcml2YXRlUGxheVN0YXRpb24uaDoKKworICAgICAgICBBZGQg
V0tWaWV3IEFQSSB0byBzZXQgdmlldyBjbGllbnQgYWxvbmcgd2l0aCBmdWxsc2NyZWVuIEFQSSBh
bmQgdmlzaWJpbGl0eSBzdGF0ZSBBUEkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvcGxh
eXN0YXRpb24vV0tWaWV3LmNwcDoKKyAgICAgICAgKFdLVmlld0dldFBhZ2UpOgorICAgICAgICAo
V0tWaWV3U2V0U2l6ZSk6CisgICAgICAgIChXS1ZpZXdTZXRGb2N1cyk6CisgICAgICAgIChXS1Zp
ZXdTZXRBY3RpdmUpOgorICAgICAgICAoV0tWaWV3U2V0VmlzaWJsZSk6CisgICAgICAgIChXS1Zp
ZXdXaWxsRW50ZXJGdWxsU2NyZWVuKToKKyAgICAgICAgKFdLVmlld0RpZEVudGVyRnVsbFNjcmVl
bik6CisgICAgICAgIChXS1ZpZXdXaWxsRXhpdEZ1bGxTY3JlZW4pOgorICAgICAgICAoV0tWaWV3
RGlkRXhpdEZ1bGxTY3JlZW4pOgorICAgICAgICAoV0tWaWV3UmVxdWVzdEV4aXRGdWxsU2NyZWVu
KToKKyAgICAgICAgKFdLVmlld0lzRnVsbFNjcmVlbik6CisgICAgICAgIChXS1ZpZXdTZXRWaWV3
Q2xpZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tWaWV3Lmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLVmlld0NsaWVudC5oOiBB
ZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3BsYXlzdGF0aW9uL0FQSVZpZXdDbGllbnQu
aDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL3BsYXlzdGF0aW9uL1BhZ2VDbGllbnRJbXBs
LmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvcGxheXN0YXRpb24vUGFnZUNsaWVudEltcGwuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvcGxheXN0YXRpb24vUGxheVN0YXRpb25XZWJWaWV3LmNwcDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvcGxheXN0YXRpb24vUGxheVN0YXRpb25XZWJWaWV3Lmg6CisK
KyAgICAgICAgQWxsb3cgcmVuZGVyaW5nIHdpdGhvdXQgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcu
CisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2U6OnVwZGF0ZVByZWZlcmVuY2VzKToKKworICAgICAgICAqIFBsYXRmb3Jt
UGxheVN0YXRpb24uY21ha2U6IEFkZCByZWxldmFudCBzb3VyY2VzIGFuZCBpbmNsdWRlIGRpcmVj
dG9yaWVzLgorCiAyMDIwLTExLTI3ICBZb3NoaWFraSBKaXRzdWthd2EgIDx5b3NoaWFraS5qaXRz
dWthd2FAc29ueS5jb20+CiAKICAgICAgICAgW1BsYXlTdGF0aW9uXSBEZWZpbmUgcGxhdGZvcm0g
YXJndW1lbnQgY29kZXJzIGZvciBGb250CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybVBsYXlTdGF0aW9uLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1QbGF5U3RhdGlv
bi5jbWFrZQppbmRleCBkNjc0NWEzYjM4MDFlMjAwMGYxM2UyMjUxZjhmOGUzYTBmMWM2MDk2Li41
OTcyYjdmMGJiNzY2M2EwOTczMTllYWFiNjljZGE2MDY0NTk2YmNhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtUGxheVN0YXRpb24uY21ha2UKQEAgLTYwLDYgKzYwLDcgQEAgbGlzdChBUFBFTkQg
V2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vcGxheXN0YXRpb24vUGxhdGZvcm1TY3JlZW5Q
bGF5U3RhdGlvbi5jcHAKICAgICBwbGF0Zm9ybS9wbGF5c3RhdGlvbi9TY3JvbGxiYXJUaGVtZVBs
YXlTdGF0aW9uLmNwcAogICAgIHBsYXRmb3JtL3BsYXlzdGF0aW9uL1VzZXJBZ2VudFBsYXlTdGF0
aW9uLmNwcAorICAgIHBsYXRmb3JtL3BsYXlzdGF0aW9uL1dpZGdldFBsYXlTdGF0aW9uLmNwcAog
CiAgICAgcGxhdGZvcm0vcG9zaXgvU2hhcmVkQnVmZmVyUE9TSVguY3BwCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9XaWRnZXQuY3BwCmluZGV4IGE3ZmUzODBmM2ZkMmQ5Y2E2Y2Y4MjhiODJlYTNkNDZkZDUz
N2U5NmMuLjVhNGUxNDljMGY3ZmI5ZGUwODFmY2Y3YzQwMWU0MDI0NDVhZTVmMmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vV2lkZ2V0LmNwcApAQCAtMjcxLDcgKzI3MSw3IEBAIEZsb2F0UG9pbnQgV2lk
Z2V0Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KGNvbnN0IEZsb2F0UG9pbnQmIHBhcmVudFBv
aW50KSBjb25zCiAgICAgcmV0dXJuIGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcoSW50UG9pbnQo
cGFyZW50UG9pbnQpKTsKIH0KIAotI2lmICFQTEFURk9STShDT0NPQSkgJiYgIVBMQVRGT1JNKEdU
SykgJiYgIVBMQVRGT1JNKFdJTikKKyNpZiAhUExBVEZPUk0oQ09DT0EpICYmICFQTEFURk9STShH
VEspICYmICFQTEFURk9STShXSU4pICYmICFQTEFURk9STShQTEFZU1RBVElPTikKIAogV2lkZ2V0
Ojp+V2lkZ2V0KCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvcGxheXN0YXRpb24vQ3VybFNTTEhhbmRsZVBsYXlTdGF0aW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvcGxheXN0YXRpb24vQ3VybFNTTEhhbmRsZVBsYXlTdGF0aW9u
LmNwcAppbmRleCAzZTFlMjg3NTBjMGY4NzVjZTRhZjE3Y2IzYzIxMGVhY2U3ZjRiMWMxLi5iNTM0
NDQ5NjE3YTE2NWU0Mzc2ZWYwNzI1Y2NjMDEwY2E4NTA4MjUzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3BsYXlzdGF0aW9uL0N1cmxTU0xIYW5kbGVQbGF5U3Rh
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9wbGF5c3RhdGlv
bi9DdXJsU1NMSGFuZGxlUGxheVN0YXRpb24uY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxOCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICog
Q29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDIyICsyNiwyNSBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkN1cmxTU0xIYW5kbGUuaCIKIAorI2luY2x1ZGUgPENl
cnRpZmljYXRlU3RvcmUvQ2VydGlmaWNhdGVTdG9yZS5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXN0YXRpYyBTdHJpbmcgZ2V0Q0FDZXJ0UGF0aEVudigpCit2b2lkIEN1cmxTU0xIYW5kbGU6
OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiB7Ci0gICAgY2hhciogZW52UGF0aCA9IGdldGVudigiQ1VS
TF9DQV9CVU5ETEVfUEFUSCIpOwotICAgIGlmIChlbnZQYXRoKQotICAgICAgICByZXR1cm4geyBl
bnZQYXRoIH07CisgICAgYXV0byBjZXJ0aWZpY2F0ZURhdGEgPSBDZXJ0aWZpY2F0ZURhdGE6OmNy
ZWF0ZSgpOworICAgIENlcnRpZmljYXRlU3RvcmU6OmdldFRydXN0ZWRSb290Q0EoKmNlcnRpZmlj
YXRlRGF0YSk7CiAKLSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLX0KKyAgICBDZXJ0aWZpY2F0
ZUluZm86OkNlcnRpZmljYXRlIGNhQ2VydERhdGE7CisgICAgY2FDZXJ0RGF0YS5hcHBlbmQoY2Vy
dGlmaWNhdGVEYXRhLT5kYXRhKCksIGNlcnRpZmljYXRlRGF0YS0+c2l6ZSgpKTsKKyAgICBpZiAo
Y2VydGlmaWNhdGVEYXRhLT5zaXplKCkpCisgICAgICAgIHNldENBQ2VydERhdGEoV1RGTW92ZShj
YUNlcnREYXRhKSk7CiAKLXZvaWQgQ3VybFNTTEhhbmRsZTo6cGxhdGZvcm1Jbml0aWFsaXplKCkK
LXsKLSAgICBhdXRvIGNhQ2VydFBhdGggPSBnZXRDQUNlcnRQYXRoRW52KCk7Ci0gICAgaWYgKCFj
YUNlcnRQYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgc2V0Q0FDZXJ0UGF0aChXVEZNb3ZlKGNhQ2Vy
dFBhdGgpKTsKKyAgICBzZXRDaXBoZXJMaXN0KENlcnRpZmljYXRlU3RvcmU6OmNpcGhlclN1aXRl
cygpKTsKKyAgICBzZXRTaWduYXR1cmVBbGdvcml0aG1zTGlzdChDZXJ0aWZpY2F0ZVN0b3JlOjpz
aWduYXR1cmVBbGdvcml0aG1zKCkpOworICAgIHNldEN1cnZlc0xpc3QoQ2VydGlmaWNhdGVTdG9y
ZTo6c3VwcG9ydGVkR3JvdXBzKCkpOworCisgICAgc2V0SWdub3JlU1NMRXJyb3JzKENlcnRpZmlj
YXRlU3RvcmU6OnNob3VsZElnbm9yZVRMU0Vycm9ycygpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcGxheXN0YXRpb24v
V2lkZ2V0UGxheVN0YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcGxheXN0YXRp
b24vV2lkZ2V0UGxheVN0YXRpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM1YTJjYTJlNzgxODhkMDc4NmVk
NGQ2YjZkM2MyYWM0MGRiMjlkYWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9wbGF5c3RhdGlvbi9XaWRnZXRQbGF5U3RhdGlvbi5jcHAKQEAgLTAsMCArMSw4MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1l
bnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2lkZ2V0
LmgiCisKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJIb3N0V2luZG93LmgiCisj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXaWRn
ZXQ6On5XaWRnZXQoKQoreworICAgIEFTU0VSVCghcGFyZW50KCkpOworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYgcmVj
dCkKK3sKKyAgICBtX2ZyYW1lID0gcmVjdDsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYsIFNlY3Vy
aXR5T3JpZ2luUGFpbnRQb2xpY3ksIEV2ZW50UmVnaW9uQ29udGV4dCopCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBXaWRnZXQ6OnNldEZvY3VzKGJvb2wpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXaWRnZXQ6OnNldEN1cnNvcihjb25zdCBDdXJzb3Im
IGN1cnNvcikKK3sKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSByb290KCk7CisgICAgaWYgKCF2aWV3
KQorICAgICAgICByZXR1cm47CisgICAgdmlldy0+aG9zdFdpbmRvdygpLT5zZXRDdXJzb3IoY3Vy
c29yKTsKK30KKwordm9pZCBXaWRnZXQ6OnNob3coKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK3ZvaWQgV2lkZ2V0OjpoaWRlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIFdpZGdldDo6c2V0SXNTZWxlY3RlZChib29sKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm1QbGF5U3RhdGlvbi5jbWFrZSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1QbGF5
U3RhdGlvbi5jbWFrZQppbmRleCBjZGU4MTk4NzE2ZDQyNTIyY2I5ODc3YmFkOTk4ZTRiNjBjOGE5
YjRiLi5jOGRjNzQzMzFkOTgyNDI5N2VkZDdjNjRjYzUzOWNlZjk4MmM5YzdmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtUGxheVN0YXRpb24uY21ha2UKKysrIGIvU291cmNlL1dl
YktpdC9QbGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtlCkBAIC04OSw2ICs4OSw3IEBAIGxpc3QoQVBQ
RU5EIFdlYktpdF9TT1VSQ0VTCiAKICAgICBVSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tD
b250ZXh0Q29uZmlndXJhdGlvblBsYXlTdGF0aW9uLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvQy9w
bGF5c3RhdGlvbi9XS1BhZ2VQcml2YXRlUGxheVN0YXRpb24uY3BwCisgICAgVUlQcm9jZXNzL0FQ
SS9DL3BsYXlzdGF0aW9uL1dLUnVubG9vcC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL0MvcGxheXN0
YXRpb24vV0tWaWV3LmNwcAogCiAgICAgVUlQcm9jZXNzL0F1dG9tYXRpb24vY2Fpcm8vV2ViQXV0
b21hdGlvblNlc3Npb25DYWlyby5jcHAKQEAgLTE0MSw2ICsxNDIsNyBAQCBsaXN0KEFQUEVORCBX
ZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9B
UEkvQy9jYWlybyIKICAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJL0MvY3VybCIKICAg
ICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24iCisgICAgIiR7V0VC
S0lUX0RJUn0vVUlQcm9jZXNzL0FQSS9wbGF5c3RhdGlvbiIKICAgICAiJHtXRUJLSVRfRElSfS9V
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcyIKICAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nl
c3MvcGxheXN0YXRpb24iCiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9jdXJsIgpAQCAtMTYyLDcgKzE2NCw5IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9QVUJMSUNf
RlJBTUVXT1JLX0hFQURFUlMKIAogICAgIFVJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS0Nv
bnRleHRDb25maWd1cmF0aW9uUGxheVN0YXRpb24uaAogICAgIFVJUHJvY2Vzcy9BUEkvQy9wbGF5
c3RhdGlvbi9XS1BhZ2VQcml2YXRlUGxheVN0YXRpb24uaAorICAgIFVJUHJvY2Vzcy9BUEkvQy9w
bGF5c3RhdGlvbi9XS1J1bmxvb3AuaAogICAgIFVJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9X
S1ZpZXcuaAorICAgIFVJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1ZpZXdDbGllbnQuaAog
KQogCiAjIEJvdGggUEFMIGFuZCBXZWJDb3JlIGFyZSBidWlsdCBhcyBvYmplY3QgbGlicmFyaWVz
LiBUaGUgV2ViS2l0OjogaW50ZXJmYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1BhZ2VQcml2YXRlUGxheVN0YXRpb24uY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tQYWdlUHJpdmF0ZVBsYXlT
dGF0aW9uLmNwcAppbmRleCBmNzA2OGI2ZWQ4YTkxMmVlNzg0ZWVkNTQ5YjVmNjAyNzc2N2RiOGY5
Li43YTgzZGRlNmE0OTBiZWY2ODhhMTg1M2Y2NTQ5Y2RmZGQxMzk4N2UzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1BhZ2VQcml2YXRlUGxh
eVN0YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0
aW9uL1dLUGFnZVByaXZhdGVQbGF5U3RhdGlvbi5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTYgKzI2LDI3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV0tQYWdlUHJpdmF0ZVBsYXlTdGF0aW9uLmgiCiAK
KyNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5LmgiCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94
eUNvb3JkaW5hdGVkR3JhcGhpY3MuaCIKICNpbmNsdWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50
LmgiCiAjaW5jbHVkZSAiTmF0aXZlV2ViTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIk5hdGl2ZVdl
YldoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJXZWJFdmVudEZhY3RvcnkuaCIKICNpbmNsdWRlICJX
ZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlIDxjYWlyby5oPgogI2luY2x1ZGUgPHdwZS93cGUuaD4K
IAotdm9pZCBXS1BhZ2VTZXRTaXplKFdLUGFnZVJlZiBwYWdlUmVmLCBXS1NpemUgc2l6ZSkKK3N0
YXRpYyB2b2lkIGRyYXdQYWdlQmFja2dyb3VuZChjYWlyb190KiBjdHgsIGNvbnN0IE9wdGlvbmFs
PFdlYkNvcmU6OkNvbG9yPiYgYmFja2dyb3VuZENvbG9yLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiByZWN0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKCFiYWNrZ3JvdW5kQ29s
b3IgfHwgYmFja2dyb3VuZENvbG9yLnZhbHVlKCkuaXNWaXNpYmxlKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gYmFja2dyb3VuZENvbG9yLnZhbHVlKCkudG9T
UkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisKKyAgICBjYWlyb19zZXRfc291cmNlX3JnYmEoY3R4LCBy
LCBnLCBiLCBhKTsKKyAgICBjYWlyb19yZWN0YW5nbGUoY3R4LCByZWN0LngoKSwgcmVjdC55KCks
IHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGN0
eCwgQ0FJUk9fT1BFUkFUT1JfT1ZFUik7CisgICAgY2Fpcm9fZmlsbChjdHgpOwogfQogCiB2b2lk
IFdLUGFnZUhhbmRsZUtleWJvYXJkRXZlbnQoV0tQYWdlUmVmIHBhZ2VSZWYsIFdLS2V5Ym9hcmRF
dmVudCBldmVudCkKQEAgLTczLDExICs4NCwxNiBAQCB2b2lkIFdLUGFnZUhhbmRsZU1vdXNlRXZl
bnQoV0tQYWdlUmVmIHBhZ2VSZWYsIFdLTW91c2VFdmVudCBldmVudCkKIAogICAgIHN3aXRjaCAo
ZXZlbnQudHlwZSkgewogICAgIGNhc2Uga1dLRXZlbnRNb3VzZURvd246CisgICAgICAgIHdwZUV2
ZW50LnR5cGUgPSB3cGVfaW5wdXRfcG9pbnRlcl9ldmVudF90eXBlX2J1dHRvbjsKKyAgICAgICAg
d3BlRXZlbnQuc3RhdGUgPSAxOworICAgICAgICBicmVhazsKICAgICBjYXNlIGtXS0V2ZW50TW91
c2VVcDoKICAgICAgICAgd3BlRXZlbnQudHlwZSA9IHdwZV9pbnB1dF9wb2ludGVyX2V2ZW50X3R5
cGVfYnV0dG9uOworICAgICAgICB3cGVFdmVudC5zdGF0ZSA9IDA7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2Uga1dLRXZlbnRNb3VzZU1vdmU6CiAgICAgICAgIHdwZUV2ZW50LnR5cGUgPSB3cGVf
aW5wdXRfcG9pbnRlcl9ldmVudF90eXBlX21vdGlvbjsKKyAgICAgICAgd3BlRXZlbnQuc3RhdGUg
PSAwOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKQEAgLTEwNCw3ICsxMjAsNiBAQCB2b2lkIFdLUGFnZUhhbmRsZU1vdXNlRXZlbnQo
V0tQYWdlUmVmIHBhZ2VSZWYsIFdLTW91c2VFdmVudCBldmVudCkKICAgICB3cGVFdmVudC50aW1l
ID0gMDsKICAgICB3cGVFdmVudC54ID0gZXZlbnQucG9zaXRpb24ueDsKICAgICB3cGVFdmVudC55
ID0gZXZlbnQucG9zaXRpb24ueTsKLSAgICB3cGVFdmVudC5zdGF0ZSA9IDA7CiAgICAgd3BlRXZl
bnQubW9kaWZpZXJzID0gMDsgLy8gVE9ETzogSGFuZGxlIG1vZGlmaWVycy4KIAogICAgIGNvbnN0
IGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gMTsKQEAgLTEzMiwzICsxNDcsMzQgQEAgdm9pZCBX
S1BhZ2VIYW5kbGVXaGVlbEV2ZW50KFdLUGFnZVJlZiBwYWdlUmVmLCBXS1doZWVsRXZlbnQgZXZl
bnQpCiAKICAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+aGFuZGxlV2hlZWxFdmVudChOYXRp
dmVXZWJXaGVlbEV2ZW50KCZ3cGVFdmVudC5iYXNlLCBkZXZpY2VTY2FsZUZhY3RvciwgV2ViV2hl
ZWxFdmVudDo6UGhhc2U6OlBoYXNlTm9uZSwgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlTm9u
ZSkpOwogfQorCit2b2lkIFdLUGFnZVBhaW50KFdLUGFnZVJlZiBwYWdlUmVmLCB1bnNpZ25lZCBj
aGFyKiBzdXJmYWNlRGF0YSwgV0tTaXplIHdrU3VyZmFjZVNpemUsIFdLUmVjdCB3a1BhaW50UmVj
dCkKK3sKKyAgICBhdXRvIHN1cmZhY2VTaXplID0gV2ViS2l0Ojp0b0ludFNpemUod2tTdXJmYWNl
U2l6ZSk7CisgICAgYXV0byBwYWludFJlY3QgPSBXZWJLaXQ6OnRvSW50UmVjdCh3a1BhaW50UmVj
dCk7CisgICAgaWYgKCFzdXJmYWNlRGF0YSB8fCBzdXJmYWNlU2l6ZS5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGNvbnN0IGNhaXJvX2Zvcm1hdF90IGZvcm1hdCA9IENBSVJPX0ZP
Uk1BVF9BUkdCMzI7CisgICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoc3VyZmFjZURhdGEsIGZvcm1hdCwgc3VyZmFjZVNpemUu
d2lkdGgoKSwgc3VyZmFjZVNpemUuaGVpZ2h0KCksIGNhaXJvX2Zvcm1hdF9zdHJpZGVfZm9yX3dp
ZHRoKGZvcm1hdCwgc3VyZmFjZVNpemUud2lkdGgoKSkpOworICAgIGlmIChjYWlyb19zdXJmYWNl
X3N0YXR1cyhzdXJmYWNlKSAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJu
OworCisgICAgY2Fpcm9fdCogY3R4ID0gY2Fpcm9fY3JlYXRlKHN1cmZhY2UpOworCisgICAgYXV0
byBwYWdlID0gV2ViS2l0Ojp0b0ltcGwocGFnZVJlZik7CisgICAgYXV0byYgYmFja2dyb3VuZENv
bG9yID0gcGFnZS0+YmFja2dyb3VuZENvbG9yKCk7CisgICAgcGFnZS0+ZW5kUHJpbnRpbmcoKTsK
KyAgICBpZiAoYXV0byogZHJhd2luZ0FyZWEgPSBzdGF0aWNfY2FzdDxXZWJLaXQ6OkRyYXdpbmdB
cmVhUHJveHlDb29yZGluYXRlZEdyYXBoaWNzKj4ocGFnZS0+ZHJhd2luZ0FyZWEoKSkpIHsKKyAg
ICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBwb3J0IFdlYktpdDEncyByZWN0IGNvYWxlc2Npbmcg
bG9naWMgaGVyZS4KKyAgICAgICAgV2ViQ29yZTo6UmVnaW9uIHVucGFpbnRlZFJlZ2lvbjsKKyAg
ICAgICAgZHJhd2luZ0FyZWEtPnBhaW50KGN0eCwgcGFpbnRSZWN0LCB1bnBhaW50ZWRSZWdpb24p
OworCisgICAgICAgIGZvciAoY29uc3QgYXV0byYgcmVjdCA6IHVucGFpbnRlZFJlZ2lvbi5yZWN0
cygpKQorICAgICAgICAgICAgZHJhd1BhZ2VCYWNrZ3JvdW5kKGN0eCwgYmFja2dyb3VuZENvbG9y
LCByZWN0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgZHJhd1BhZ2VCYWNrZ3JvdW5kKGN0eCwgYmFj
a2dyb3VuZENvbG9yLCBwYWludFJlY3QpOworCisgICAgY2Fpcm9fZGVzdHJveShjdHgpOworICAg
IGNhaXJvX3N1cmZhY2VfZGVzdHJveShzdXJmYWNlKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLUGFnZVByaXZhdGVQbGF5U3RhdGlv
bi5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tQYWdlUHJp
dmF0ZVBsYXlTdGF0aW9uLmgKaW5kZXggZDlkNjE4ZTVmMzk3ZjRkODFhZTZkOGNlNDJjOThjN2Fl
MzJmOGRhYy4uNjc0OTI0NjYyOWVkZDI2ZTlhZjk5NTdlZDQ1YWE2ZjY5ZWNjMDExOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tQYWdlUHJp
dmF0ZVBsYXlTdGF0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxh
eXN0YXRpb24vV0tQYWdlUHJpdmF0ZVBsYXlTdGF0aW9uLmgKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IElu
Yy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsOSArMzIsMTEgQEAKIGV4
dGVybiAiQyIgewogI2VuZGlmCiAKLVdLX0VYUE9SVCB2b2lkIFdLUGFnZUhhbmRsZUtleWJvYXJk
RXZlbnQoV0tQYWdlUmVmIHBhZ2UsIFdLS2V5Ym9hcmRFdmVudCk7Ci1XS19FWFBPUlQgdm9pZCBX
S1BhZ2VIYW5kbGVNb3VzZUV2ZW50KFdLUGFnZVJlZiBwYWdlLCBXS01vdXNlRXZlbnQpOwotV0tf
RVhQT1JUIHZvaWQgV0tQYWdlSGFuZGxlV2hlZWxFdmVudChXS1BhZ2VSZWYgcGFnZSwgV0tXaGVl
bEV2ZW50KTsKK1dLX0VYUE9SVCB2b2lkIFdLUGFnZUhhbmRsZUtleWJvYXJkRXZlbnQoV0tQYWdl
UmVmLCBXS0tleWJvYXJkRXZlbnQpOworV0tfRVhQT1JUIHZvaWQgV0tQYWdlSGFuZGxlTW91c2VF
dmVudChXS1BhZ2VSZWYsIFdLTW91c2VFdmVudCk7CitXS19FWFBPUlQgdm9pZCBXS1BhZ2VIYW5k
bGVXaGVlbEV2ZW50KFdLUGFnZVJlZiwgV0tXaGVlbEV2ZW50KTsKKworV0tfRVhQT1JUIHZvaWQg
V0tQYWdlUGFpbnQoV0tQYWdlUmVmLCB1bnNpZ25lZCBjaGFyKiBjYWlyb1N1cmZhY2VBUkdCMzJE
YXRhLCBXS1NpemUgc3VyZmFjZVNpemUsIFdLUmVjdCBwYWludFJlY3QpOwogCiAjaWZkZWYgX19j
cGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL3Bs
YXlzdGF0aW9uL1dLUnVuTG9vcC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9w
bGF5c3RhdGlvbi9XS1J1bkxvb3AuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIwZjM0MGJhYzllNGU0YjdjYWE3
ZTdlMzkwNDQzOTg4ZWU4MjNhNTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1J1bkxvb3AuY3BwCkBAIC0wLDAgKzEsNTkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50
IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldLUnVuTG9v
cC5oIgorCisjaW5jbHVkZSAiV2ViS2l0MkluaXRpYWxpemUuaCIKKyNpbmNsdWRlIDx3dGYvTWFp
blRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisKK3ZvaWQgV0tSdW5Mb29wUnVu
TWFpbigpCit7CisgICAgUnVuTG9vcDo6bWFpbigpLnJ1bigpOworfQorCit2b2lkIFdLUnVuTG9v
cFN0b3BNYWluKCkKK3sKKyAgICBSdW5Mb29wOjptYWluKCkuc3RvcCgpOworfQorCit2b2lkIFdL
UnVuTG9vcENhbGxPbk1haW5UaHJlYWQoV0tSdW5Mb29wQ2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQq
IHVzZXJEYXRhKQoreworICAgIGlmICghY2FsbGJhY2spCisgICAgICAgIHJldHVybjsKKworICAg
IGNhbGxPbk1haW5UaHJlYWQoW2NhbGxiYWNrLCB1c2VyRGF0YV0oKSB7CisgICAgICAgIGNhbGxi
YWNrKHVzZXJEYXRhKTsKKyAgICB9KTsKK30KKwordm9pZCBXS1J1bkxvb3BJbml0aWFsaXplTWFp
bigpCit7CisgICAgLy8gRklYTUU6CisgICAgLy8gSW5pdGlhbGl6aW5nIFJ1bkxvb3AgYnkgSW5p
dGlhbGl6ZVdlYktpdDIoKS4KKyAgICAvLyBXS1J1bkxvb3BJbml0aWFsaXplTWFpbigpIHNob3Vs
ZCBiZSByZW5hbWVkIHRvIG1vcmUgc3RyYWlnaHRmb3J3YXJkIEFQSSBuYW1lIHRvIHdyYXAgSW5p
dGlhbGl6ZVdlYktpdDIoKS4KKyAgICBXZWJLaXQ6OkluaXRpYWxpemVXZWJLaXQyKCk7Cit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1J1
bkxvb3AuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLUnVu
TG9vcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjBjNWMwYTQzYzA1YTQ5NTZmNWIwODQwYzQ2ZTBjYjlmMGIwYjhk
MzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9wbGF5
c3RhdGlvbi9XS1J1bkxvb3AuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSA8V2ViS2l0L1dLQmFzZS5oPgorCisjaWZkZWYgX19jcGx1
c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK3R5cGVkZWYgdm9pZCgqV0tSdW5Mb29wQ2Fs
bGJhY2spKHZvaWQgKnVzZXJEYXRhKTsKKworV0tfRVhQT1JUIHZvaWQgV0tSdW5Mb29wUnVuTWFp
bigpOworV0tfRVhQT1JUIHZvaWQgV0tSdW5Mb29wU3RvcE1haW4oKTsKK1dLX0VYUE9SVCB2b2lk
IFdLUnVuTG9vcENhbGxPbk1haW5UaHJlYWQoV0tSdW5Mb29wQ2FsbGJhY2ssIHZvaWQqIHVzZXJE
YXRhKTsKK1dLX0VYUE9SVCB2b2lkIFdLUnVuTG9vcEluaXRpYWxpemVNYWluKCk7CisKKyNpZmRl
ZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1ZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0MvcGxheXN0YXRpb24vV0tWaWV3LmNwcAppbmRleCAxYmU1Mjk2ODg1YTEyM2Y4Mzg5
N2NkYThhMzFmNzgyMTIzNDYzMDVkLi5hY2MzY2YwNjRjZjc5NzA2YjRiYjQ3ZDM3NGYyZjQ4ZTQ3
YTIzNjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9wbGF5c3Rh
dGlvbi9XS1ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL3BsYXlz
dGF0aW9uL1dLVmlldy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMTUgKzI3LDE4MiBAQAogI2luY2x1ZGUgIldLVmlldy5o
IgogCiAjaW5jbHVkZSAiQVBJUGFnZUNvbmZpZ3VyYXRpb24uaCIKKyNpbmNsdWRlICJBUElWaWV3
Q2xpZW50LmgiCiAjaW5jbHVkZSAiUGxheVN0YXRpb25XZWJWaWV3LmgiCiAjaW5jbHVkZSAiV0tB
UElDYXN0LmgiCisjaW5jbHVkZSAiV0tTaGFyZWRBUElDYXN0LmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9DdXJzb3IuaD4KKworbmFtZXNwYWNlIEFQSSB7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDbGllbnRU
cmFpdHM8V0tWaWV3Q2xpZW50QmFzZT4geworICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxXS1ZpZXdD
bGllbnRWMD4gVmVyc2lvbnM7Cit9OworfQorCitXS0N1cnNvclR5cGUgdG9XS0N1cnNvclR5cGUo
Y29uc3QgV2ViQ29yZTo6Q3Vyc29yJiBjdXJzb3IpCit7CisgICAgc3dpdGNoIChjdXJzb3IudHlw
ZSgpKSB7CisgICAgY2FzZSBXZWJDb3JlOjpDdXJzb3I6OkhhbmQ6CisgICAgICAgIHJldHVybiBr
V0tDdXJzb3JUeXBlSGFuZDsKKyAgICBjYXNlIFdlYkNvcmU6OkN1cnNvcjo6Tm9uZToKKyAgICAg
ICAgcmV0dXJuIGtXS0N1cnNvclR5cGVOb25lOworICAgIGNhc2UgV2ViQ29yZTo6Q3Vyc29yOjpQ
b2ludGVyOgorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBrV0tDdXJzb3JUeXBlUG9pbnRl
cjsKKyAgICB9Cit9CiAKIFdLVmlld1JlZiBXS1ZpZXdDcmVhdGUoV0tQYWdlQ29uZmlndXJhdGlv
blJlZiBjb25maWd1cmF0aW9uKQogewogICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6
UGxheVN0YXRpb25XZWJWaWV3OjpjcmVhdGUoKldlYktpdDo6dG9JbXBsKGNvbmZpZ3VyYXRpb24p
KS5sZWFrUmVmKCkpOwogfQogCi1XS1BhZ2VSZWYgV0tWaWV3R2V0UGFnZShXS1ZpZXdSZWYgdmll
d1JlZikKK1dLUGFnZVJlZiBXS1ZpZXdHZXRQYWdlKFdLVmlld1JlZiB2aWV3KQoreworICAgIHJl
dHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6dG9JbXBsKHZpZXcpLT5wYWdlKCkpOworfQorCit2
b2lkIFdLVmlld1NldFNpemUoV0tWaWV3UmVmIHZpZXcsIFdLU2l6ZSB2aWV3U2l6ZSkKK3sKKyAg
ICBXZWJLaXQ6OnRvSW1wbCh2aWV3KS0+c2V0Vmlld1NpemUoV2ViS2l0Ojp0b0ludFNpemUodmll
d1NpemUpKTsKK30KKwordm9pZCBXS1ZpZXdTZXRGb2N1cyhXS1ZpZXdSZWYgdmlldywgYm9vbCBm
b2N1c2VkKQoreworICAgIGF1dG8gdmlld1N0YXRlID0gV2ViS2l0Ojp0b0ltcGwodmlldyktPnZp
ZXdTdGF0ZSgpOworICAgIGF1dG8gZmxhZyA9IFdlYkNvcmU6OkFjdGl2aXR5U3RhdGU6OklzRm9j
dXNlZDsKKyAgICBpZiAoZm9jdXNlZCkKKyAgICAgICAgdmlld1N0YXRlLmFkZChmbGFnKTsKKyAg
ICBlbHNlCisgICAgICAgIHZpZXdTdGF0ZS5yZW1vdmUoZmxhZyk7CisgICAgV2ViS2l0Ojp0b0lt
cGwodmlldyktPnNldFZpZXdTdGF0ZSh2aWV3U3RhdGUpOworfQorCit2b2lkIFdLVmlld1NldEFj
dGl2ZShXS1ZpZXdSZWYgdmlldywgYm9vbCBhY3RpdmUpCit7CisgICAgYXV0byB2aWV3U3RhdGUg
PSBXZWJLaXQ6OnRvSW1wbCh2aWV3KS0+dmlld1N0YXRlKCk7CisgICAgYXV0byBmbGFnID0gV2Vi
Q29yZTo6QWN0aXZpdHlTdGF0ZTo6V2luZG93SXNBY3RpdmU7CisgICAgaWYgKGFjdGl2ZSkKKyAg
ICAgICAgdmlld1N0YXRlLmFkZChmbGFnKTsKKyAgICBlbHNlCisgICAgICAgIHZpZXdTdGF0ZS5y
ZW1vdmUoZmxhZyk7CisgICAgV2ViS2l0Ojp0b0ltcGwodmlldyktPnNldFZpZXdTdGF0ZSh2aWV3
U3RhdGUpOworfQorCit2b2lkIFdLVmlld1NldFZpc2libGUoV0tWaWV3UmVmIHZpZXcsIGJvb2wg
dmlzaWJsZSkKK3sKKyAgICBhdXRvIHZpZXdTdGF0ZSA9IFdlYktpdDo6dG9JbXBsKHZpZXcpLT52
aWV3U3RhdGUoKTsKKyAgICBhdXRvIGZsYWcgPSBXZWJDb3JlOjpBY3Rpdml0eVN0YXRlOjpJc1Zp
c2libGU7CisgICAgaWYgKHZpc2libGUpCisgICAgICAgIHZpZXdTdGF0ZS5hZGQoZmxhZyk7Cisg
ICAgZWxzZQorICAgICAgICB2aWV3U3RhdGUucmVtb3ZlKGZsYWcpOworICAgIFdlYktpdDo6dG9J
bXBsKHZpZXcpLT5zZXRWaWV3U3RhdGUodmlld1N0YXRlKTsKK30KKwordm9pZCBXS1ZpZXdXaWxs
RW50ZXJGdWxsU2NyZWVuKFdLVmlld1JlZiB2aWV3KQoreworI2lmIEVOQUJMRShGVUxMU0NSRUVO
X0FQSSkKKyAgICBXZWJLaXQ6OnRvSW1wbCh2aWV3KS0+d2lsbEVudGVyRnVsbFNjcmVlbigpOwor
I2VuZGlmCit9CisKK3ZvaWQgV0tWaWV3RGlkRW50ZXJGdWxsU2NyZWVuKFdLVmlld1JlZiB2aWV3
KQoreworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBXZWJLaXQ6OnRvSW1wbCh2aWV3
KS0+ZGlkRW50ZXJGdWxsU2NyZWVuKCk7CisjZW5kaWYKK30KKwordm9pZCBXS1ZpZXdXaWxsRXhp
dEZ1bGxTY3JlZW4oV0tWaWV3UmVmIHZpZXcpCit7CisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJ
KQorICAgIFdlYktpdDo6dG9JbXBsKHZpZXcpLT53aWxsRXhpdEZ1bGxTY3JlZW4oKTsKKyNlbmRp
ZgorfQorCit2b2lkIFdLVmlld0RpZEV4aXRGdWxsU2NyZWVuKFdLVmlld1JlZiB2aWV3KQorewor
I2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBXZWJLaXQ6OnRvSW1wbCh2aWV3KS0+ZGlk
RXhpdEZ1bGxTY3JlZW4oKTsKKyNlbmRpZgorfQorCit2b2lkIFdLVmlld1JlcXVlc3RFeGl0RnVs
bFNjcmVlbihXS1ZpZXdSZWYgdmlldykKIHsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJL
aXQ6OnRvSW1wbCh2aWV3UmVmKS0+cGFnZSgpKTsKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkp
CisgICAgV2ViS2l0Ojp0b0ltcGwodmlldyktPnJlcXVlc3RFeGl0RnVsbFNjcmVlbigpOworI2Vu
ZGlmCit9CisKK2Jvb2wgV0tWaWV3SXNGdWxsU2NyZWVuKFdLVmlld1JlZiB2aWV3KQoreworI2lm
IEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwodmlldykt
PmlzRnVsbFNjcmVlbigpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwor
dm9pZCBXS1ZpZXdTZXRWaWV3Q2xpZW50KFdLVmlld1JlZiB2aWV3LCBjb25zdCBXS1ZpZXdDbGll
bnRCYXNlKiBjbGllbnQpCit7CisgICAgY2xhc3MgVmlld0NsaWVudCBmaW5hbCA6IHB1YmxpYyBB
UEk6OkNsaWVudDxXS1ZpZXdDbGllbnRCYXNlPiwgcHVibGljIEFQSTo6Vmlld0NsaWVudCB7Cisg
ICAgcHVibGljOgorICAgICAgICBleHBsaWNpdCBWaWV3Q2xpZW50KGNvbnN0IFdLVmlld0NsaWVu
dEJhc2UqIGNsaWVudCkKKyAgICAgICAgeworICAgICAgICAgICAgaW5pdGlhbGl6ZShjbGllbnQp
OworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIHNldFZpZXdOZWVkc0Rp
c3BsYXkoV2ViS2l0OjpQbGF5U3RhdGlvbldlYlZpZXcmIHZpZXcsIGNvbnN0IFdlYkNvcmU6OlJl
Z2lvbiYgcmVnaW9uKSBmaW5hbAorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1fY2xpZW50
LnNldFZpZXdOZWVkc0Rpc3BsYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgbV9jbGllbnQuc2V0Vmlld05lZWRzRGlzcGxheShXZWJLaXQ6OnRvQVBJKCZ2aWV3KSwgV2Vi
S2l0Ojp0b0FQSShyZWdpb24uYm91bmRzKCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwor
ICAgICAgICB9CisKKyAgICAgICAgdm9pZCBlbnRlckZ1bGxTY3JlZW4oV2ViS2l0OjpQbGF5U3Rh
dGlvbldlYlZpZXcmIHZpZXcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV9jbGllbnQu
ZW50ZXJGdWxsU2NyZWVuKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIG1f
Y2xpZW50LmVudGVyRnVsbFNjcmVlbihXZWJLaXQ6OnRvQVBJKCZ2aWV3KSwgbV9jbGllbnQuYmFz
ZS5jbGllbnRJbmZvKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBleGl0RnVs
bFNjcmVlbihXZWJLaXQ6OlBsYXlTdGF0aW9uV2ViVmlldyYgdmlldykKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKCFtX2NsaWVudC5leGl0RnVsbFNjcmVlbikKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICBtX2NsaWVudC5leGl0RnVsbFNjcmVlbihXZWJLaXQ6OnRvQVBJ
KCZ2aWV3KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgdm9pZCBjbG9zZUZ1bGxTY3JlZW4oV2ViS2l0OjpQbGF5U3RhdGlvbldlYlZpZXcm
IHZpZXcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV9jbGllbnQuY2xvc2VGdWxsU2Ny
ZWVuKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIG1fY2xpZW50LmNsb3Nl
RnVsbFNjcmVlbihXZWJLaXQ6OnRvQVBJKCZ2aWV3KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZv
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBiZWdhbkVudGVyRnVsbFNjcmVl
bihXZWJLaXQ6OlBsYXlTdGF0aW9uV2ViVmlldyYgdmlldywgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgaW5pdGlhbEZyYW1lLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBmaW5hbEZyYW1lKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoIW1fY2xpZW50LmJlZ2FuRW50ZXJGdWxsU2NyZWVuKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIG1fY2xpZW50LmJlZ2FuRW50ZXJG
dWxsU2NyZWVuKFdlYktpdDo6dG9BUEkoJnZpZXcpLCBXZWJLaXQ6OnRvQVBJKGluaXRpYWxGcmFt
ZSksIFdlYktpdDo6dG9BUEkoZmluYWxGcmFtZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgYmVnYW5FeGl0RnVsbFNjcmVlbihX
ZWJLaXQ6OlBsYXlTdGF0aW9uV2ViVmlldyYgdmlldywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
aW5pdGlhbEZyYW1lLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBmaW5hbEZyYW1lKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoIW1fY2xpZW50LmJlZ2FuRXhpdEZ1bGxTY3JlZW4pCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgbV9jbGllbnQuYmVnYW5FeGl0RnVsbFNj
cmVlbihXZWJLaXQ6OnRvQVBJKCZ2aWV3KSwgV2ViS2l0Ojp0b0FQSShpbml0aWFsRnJhbWUpLCBX
ZWJLaXQ6OnRvQVBJKGZpbmFsRnJhbWUpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAg
ICAgICB9CisKKyAgICAgICAgdm9pZCBzZXRDdXJzb3IoV2ViS2l0OjpQbGF5U3RhdGlvbldlYlZp
ZXcmIHZpZXcsIGNvbnN0IFdlYkNvcmU6OkN1cnNvciYgY3Vyc29yKSBmaW5hbAorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoIW1fY2xpZW50LnNldEN1cnNvcikKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICBtX2NsaWVudC5zZXRDdXJzb3IoV2ViS2l0Ojp0b0FQSSgmdmll
dyksIHRvV0tDdXJzb3JUeXBlKGN1cnNvciksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgV2ViS2l0Ojp0b0ltcGwodmlldyktPnNldENsaWVudCht
YWtlVW5pcXVlPFZpZXdDbGllbnQ+KGNsaWVudCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tWaWV3LmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1ZpZXcuaAppbmRleCBjNWVlNDQ3MzI1YTBm
ODVmMDViYWQxYjY5MjY1MjhiMWU2ZTk2NzEzLi41MDZjNWFmNmJjN2FlZmE5ZDlhNTUxMGViOGM3
YTBmZWZjZmE2OTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9w
bGF5c3RhdGlvbi9XS1ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9w
bGF5c3RhdGlvbi9XS1ZpZXcuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqIENvcHlyaWdodCAo
QykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSwxNCArMjUsMzAgQEAKIAogI3ByYWdtYSBvbmNlCiAK
LSNpbmNsdWRlIDxXZWJLaXQvV0tCYXNlLmg+CisjaW5jbHVkZSA8V2ViS2l0L1dLVmlld0NsaWVu
dC5oPgogCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKIFdLX0VY
UE9SVCBXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlKFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYgY29uZmln
dXJhdGlvbik7Ci1XS19FWFBPUlQgV0tQYWdlUmVmIFdLVmlld0dldFBhZ2UoV0tWaWV3UmVmIHZp
ZXcpOworCitXS19FWFBPUlQgdm9pZCBXS1ZpZXdTZXRWaWV3Q2xpZW50KFdLVmlld1JlZiwgY29u
c3QgV0tWaWV3Q2xpZW50QmFzZSopOworCitXS19FWFBPUlQgV0tQYWdlUmVmIFdLVmlld0dldFBh
Z2UoV0tWaWV3UmVmKTsKKworV0tfRVhQT1JUIHZvaWQgV0tWaWV3U2V0U2l6ZShXS1ZpZXdSZWYs
IFdLU2l6ZSB2aWV3U2l6ZSk7CisKK1dLX0VYUE9SVCB2b2lkIFdLVmlld1NldEZvY3VzKFdLVmll
d1JlZiwgYm9vbCk7CitXS19FWFBPUlQgdm9pZCBXS1ZpZXdTZXRBY3RpdmUoV0tWaWV3UmVmLCBi
b29sKTsKK1dLX0VYUE9SVCB2b2lkIFdLVmlld1NldFZpc2libGUoV0tWaWV3UmVmLCBib29sKTsK
KworV0tfRVhQT1JUIHZvaWQgV0tWaWV3V2lsbEVudGVyRnVsbFNjcmVlbihXS1ZpZXdSZWYpOwor
V0tfRVhQT1JUIHZvaWQgV0tWaWV3RGlkRW50ZXJGdWxsU2NyZWVuKFdLVmlld1JlZik7CitXS19F
WFBPUlQgdm9pZCBXS1ZpZXdXaWxsRXhpdEZ1bGxTY3JlZW4oV0tWaWV3UmVmKTsKK1dLX0VYUE9S
VCB2b2lkIFdLVmlld0RpZEV4aXRGdWxsU2NyZWVuKFdLVmlld1JlZik7CitXS19FWFBPUlQgdm9p
ZCBXS1ZpZXdSZXF1ZXN0RXhpdEZ1bGxTY3JlZW4oV0tWaWV3UmVmKTsKK1dLX0VYUE9SVCBib29s
IFdLVmlld0lzRnVsbFNjcmVlbihXS1ZpZXdSZWYpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dL
Vmlld0NsaWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24v
V0tWaWV3Q2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGI0NTAyMzc5OTAwODhmMmY2ZDZlOTQxM2UxZjM0
N2U4ZjdkN2E5NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL3BsYXlzdGF0aW9uL1dLVmlld0NsaWVudC5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxXZWJLaXQvV0tCYXNlLmg+CisjaW5j
bHVkZSA8V2ViS2l0L1dLR2VvbWV0cnkuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4g
IkMiIHsKKyNlbmRpZgorCitlbnVtIHsKKyAgICBrV0tDdXJzb3JUeXBlUG9pbnRlciA9IDAsCisg
ICAga1dLQ3Vyc29yVHlwZUhhbmQgPSAyLAorICAgIGtXS0N1cnNvclR5cGVOb25lID0gMzcsCit9
OwordHlwZWRlZiB1aW50MzJfdCBXS0N1cnNvclR5cGU7CisKK3R5cGVkZWYgdm9pZCgqV0tWaWV3
U2V0Vmlld05lZWRzRGlzcGxheUNhbGxiYWNrKShXS1ZpZXdSZWYgdmlldywgV0tSZWN0IHJlY3Qs
IGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwordHlwZWRlZiB2b2lkKCpXS1ZpZXdFbnRlckZ1bGxT
Y3JlZW4pKFdLVmlld1JlZiB2aWV3LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK3R5cGVkZWYg
dm9pZCgqV0tWaWV3RXhpdEZ1bGxTY3JlZW4pKFdLVmlld1JlZiB2aWV3LCBjb25zdCB2b2lkKiBj
bGllbnRJbmZvKTsKK3R5cGVkZWYgdm9pZCgqV0tWaWV3Q2xvc2VGdWxsU2NyZWVuKShXS1ZpZXdS
ZWYgdmlldywgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cit0eXBlZGVmIHZvaWQoKldLVmlld0Jl
Z2FuRW50ZXJGdWxsU2NyZWVuKShXS1ZpZXdSZWYgdmlldywgY29uc3QgV0tSZWN0IGluaXRpYWxG
cmFtZSwgY29uc3QgV0tSZWN0IGZpbmFsRnJhbWUsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwor
dHlwZWRlZiB2b2lkKCpXS1ZpZXdCZWdhbkV4aXRGdWxsU2NyZWVuKShXS1ZpZXdSZWYgdmlldywg
Y29uc3QgV0tSZWN0IGluaXRpYWxGcmFtZSwgY29uc3QgV0tSZWN0IGZpbmFsRnJhbWUsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pOwordHlwZWRlZiB2b2lkKCpXS1ZpZXdTZXRDdXJzb3JDYWxsYmFj
aykoV0tWaWV3UmVmIHZpZXcsIFdLQ3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBjb25zdCB2b2lkKiBj
bGllbnRJbmZvKTsKKwordHlwZWRlZiBzdHJ1Y3QgV0tWaWV3Q2xpZW50QmFzZSB7CisgICAgaW50
IHZlcnNpb247CisgICAgY29uc3Qgdm9pZCogY2xpZW50SW5mbzsKK30gV0tWaWV3Q2xpZW50QmFz
ZTsKKwordHlwZWRlZiBzdHJ1Y3QgV0tWaWV3Q2xpZW50VjAgeworICAgIFdLVmlld0NsaWVudEJh
c2UgYmFzZTsKKworICAgIC8vIHZlcnNpb24gMAorICAgIFdLVmlld1NldFZpZXdOZWVkc0Rpc3Bs
YXlDYWxsYmFjayBzZXRWaWV3TmVlZHNEaXNwbGF5OworICAgIFdLVmlld0VudGVyRnVsbFNjcmVl
biBlbnRlckZ1bGxTY3JlZW47CisgICAgV0tWaWV3RXhpdEZ1bGxTY3JlZW4gZXhpdEZ1bGxTY3Jl
ZW47CisgICAgV0tWaWV3Q2xvc2VGdWxsU2NyZWVuIGNsb3NlRnVsbFNjcmVlbjsKKyAgICBXS1Zp
ZXdCZWdhbkVudGVyRnVsbFNjcmVlbiBiZWdhbkVudGVyRnVsbFNjcmVlbjsKKyAgICBXS1ZpZXdC
ZWdhbkV4aXRGdWxsU2NyZWVuIGJlZ2FuRXhpdEZ1bGxTY3JlZW47CisgICAgV0tWaWV3U2V0Q3Vy
c29yQ2FsbGJhY2sgc2V0Q3Vyc29yOworfSBXS1ZpZXdDbGllbnRWMDsKKworI2lmZGVmIF9fY3Bs
dXNwbHVzCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9wbGF5c3RhdGlvbi9BUElWaWV3Q2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvcGxheXN0YXRpb24vQVBJVmlld0NsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVkNDhjMzgzZGRmNjE2
YTU2NjQ0ODEyYzNhOTlmZjFiZjU5MTQ5NWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvcGxheXN0YXRpb24vQVBJVmlld0NsaWVudC5oCkBAIC0wLDAgKzEs
NTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRh
aW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKK2NsYXNzIEN1cnNvcjsKK2NsYXNzIEludFJlY3Q7CitjbGFzcyBSZWdpb247Cit9CisKK25h
bWVzcGFjZSBXZWJLaXQgeworY2xhc3MgUGxheVN0YXRpb25XZWJWaWV3OworfQorCituYW1lc3Bh
Y2UgQVBJIHsKKworY2xhc3MgVmlld0NsaWVudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Vmlld0NsaWVudCgpID0gZGVmYXVsdDsKKworICAg
IHZpcnR1YWwgdm9pZCBzZXRWaWV3TmVlZHNEaXNwbGF5KFdlYktpdDo6UGxheVN0YXRpb25XZWJW
aWV3JiwgY29uc3QgV2ViQ29yZTo6UmVnaW9uJikgeyB9CisgICAgdmlydHVhbCB2b2lkIGVudGVy
RnVsbFNjcmVlbihXZWJLaXQ6OlBsYXlTdGF0aW9uV2ViVmlldyYpIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBleGl0RnVsbFNjcmVlbihXZWJLaXQ6OlBsYXlTdGF0aW9uV2ViVmlldyYpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBjbG9zZUZ1bGxTY3JlZW4oV2ViS2l0OjpQbGF5U3RhdGlvbldlYlZpZXcm
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYmVnYW5FbnRlckZ1bGxTY3JlZW4oV2ViS2l0OjpQbGF5
U3RhdGlvbldlYlZpZXcmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBiZWdhbkV4aXRGdWxsU2NyZWVuKFdlYktp
dDo6UGxheVN0YXRpb25XZWJWaWV3JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29yKFdlYktpdDo6
UGxheVN0YXRpb25XZWJWaWV3JiB2aWV3LCBjb25zdCBXZWJDb3JlOjpDdXJzb3ImIGN1cnNvcikg
eyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBBUEkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL3BsYXlzdGF0aW9uL1BhZ2VDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL3BsYXlzdGF0aW9uL1BhZ2VDbGllbnRJbXBsLmNwcAppbmRleCA2NGE0Y2E3MmY5
NWFkOGE0Y2RiYmU2YWQ4N2I2N2UwZGIwODIwODliLi4zOTQxZTlmYjE4NmZlMDJjNTE2YzJjODk0
NzkzYjI4YTQ5MDUyN2FmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9wbGF5
c3RhdGlvbi9QYWdlQ2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
cGxheXN0YXRpb24vUGFnZUNsaWVudEltcGwuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICog
Q29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ1LDYgKzQ1LDcgQEAgc3RkOjp1bmlx
dWVfcHRyPERyYXdpbmdBcmVhUHJveHk+IFBhZ2VDbGllbnRJbXBsOjpjcmVhdGVEcmF3aW5nQXJl
YVByb3h5KFdlYlByb2MKIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0Vmlld05lZWRzRGlzcGxh
eShjb25zdCBXZWJDb3JlOjpSZWdpb24mIHJlZ2lvbikKIHsKKyAgICBtX3ZpZXcuc2V0Vmlld05l
ZWRzRGlzcGxheShyZWdpb24pOwogfQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpyZXF1ZXN0U2Ny
b2xsKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYgc2Nyb2xsT3JpZ2luKQpAQCAtNTgsMjggKzU5LDI3IEBAIFdlYkNvcmU6
OkZsb2F0UG9pbnQgUGFnZUNsaWVudEltcGw6OnZpZXdTY3JvbGxQb3NpdGlvbigpCiAKIFdlYkNv
cmU6OkludFNpemUgUGFnZUNsaWVudEltcGw6OnZpZXdTaXplKCkKIHsKLSAgICByZXR1cm4gV2Vi
Q29yZTo6SW50U2l6ZSB7IH07CisgICAgcmV0dXJuIG1fdmlldy52aWV3U2l6ZSgpOwogfQogCiBi
b29sIFBhZ2VDbGllbnRJbXBsOjppc1ZpZXdXaW5kb3dBY3RpdmUoKQogewotICAgIHJldHVybiBt
X3ZpZXcuaXNBY3RpdmUoKTsKKyAgICByZXR1cm4gbV92aWV3LnZpZXdTdGF0ZSgpLmNvbnRhaW5z
KFdlYkNvcmU6OkFjdGl2aXR5U3RhdGU6OldpbmRvd0lzQWN0aXZlKTsKIH0KIAogYm9vbCBQYWdl
Q2xpZW50SW1wbDo6aXNWaWV3Rm9jdXNlZCgpCiB7Ci0gICAgcmV0dXJuIG1fdmlldy5pc0ZvY3Vz
ZWQoKTsKKyAgICByZXR1cm4gbV92aWV3LnZpZXdTdGF0ZSgpLmNvbnRhaW5zKFdlYkNvcmU6OkFj
dGl2aXR5U3RhdGU6OklzRm9jdXNlZCk7CiB9CiAKIGJvb2wgUGFnZUNsaWVudEltcGw6OmlzVmll
d1Zpc2libGUoKQogewotICAgIHJldHVybiBtX3ZpZXcuaXNWaXNpYmxlKCk7CisgICAgcmV0dXJu
IG1fdmlldy52aWV3U3RhdGUoKS5jb250YWlucyhXZWJDb3JlOjpBY3Rpdml0eVN0YXRlOjpJc1Zp
c2libGUpOwogfQogCiBib29sIFBhZ2VDbGllbnRJbXBsOjppc1ZpZXdJbldpbmRvdygpCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gbV92aWV3
LnZpZXdTdGF0ZSgpLmNvbnRhaW5zKFdlYkNvcmU6OkFjdGl2aXR5U3RhdGU6OklzSW5XaW5kb3cp
OwogfQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpwcm9jZXNzRGlkRXhpdCgpCkBAIC04OSw2ICs4
OSw3IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OnByb2Nlc3NEaWRFeGl0KCkKIHZvaWQgUGFnZUNs
aWVudEltcGw6OmRpZFJlbGF1bmNoUHJvY2VzcygpCiB7CiB9CisKIHZvaWQgUGFnZUNsaWVudElt
cGw6OnBhZ2VDbG9zZWQoKQogewogfQpAQCAtMTE3LDcgKzExOCw3IEBAIHZvaWQgUGFnZUNsaWVu
dEltcGw6OmRpZENoYW5nZUNvbnRlbnRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUp
CiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OnNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3Im
IGN1cnNvcikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIG1fdmlldy5zZXRDdXJzb3Io
Y3Vyc29yKTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0Q3Vyc29ySGlkZGVuVW50aWxN
b3VzZU1vdmVzKGJvb2wpCkBAIC0yMTAsNiArMjExLDM2IEBAIFdlYkZ1bGxTY3JlZW5NYW5hZ2Vy
UHJveHlDbGllbnQmIFBhZ2VDbGllbnRJbXBsOjpmdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50
KCkKIHsKICAgICByZXR1cm4gKihXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50Kil0aGlz
OwogfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpjbG9zZUZ1bGxTY3JlZW5NYW5hZ2VyKCkKK3sK
KyAgICBtX3ZpZXcuY2xvc2VGdWxsU2NyZWVuTWFuYWdlcigpOworfQorCitib29sIFBhZ2VDbGll
bnRJbXBsOjppc0Z1bGxTY3JlZW4oKQoreworICAgIHJldHVybiBtX3ZpZXcuaXNGdWxsU2NyZWVu
KCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmVudGVyRnVsbFNjcmVlbigpCit7CisgICAg
bV92aWV3LmVudGVyRnVsbFNjcmVlbigpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpleGl0
RnVsbFNjcmVlbigpCit7CisgICAgbV92aWV3LmV4aXRGdWxsU2NyZWVuKCk7Cit9CisKK3ZvaWQg
UGFnZUNsaWVudEltcGw6OmJlZ2FuRW50ZXJGdWxsU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIGluaXRpYWxGcmFtZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZmluYWxGcmFtZSkKK3sK
KyAgICBtX3ZpZXcuYmVnYW5FbnRlckZ1bGxTY3JlZW4oaW5pdGlhbEZyYW1lLCBmaW5hbEZyYW1l
KTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6YmVnYW5FeGl0RnVsbFNjcmVlbihjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBpbml0aWFsRnJhbWUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGZp
bmFsRnJhbWUpCit7CisgICAgbV92aWV3LmJlZ2FuRXhpdEZ1bGxTY3JlZW4oaW5pdGlhbEZyYW1l
LCBmaW5hbEZyYW1lKTsKK30KICNlbmRpZgogCiAvLyBDdXN0b20gcmVwcmVzZW50YXRpb25zLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvcGxheXN0YXRpb24vUGFnZUNsaWVu
dEltcGwuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3BsYXlzdGF0aW9uL1BhZ2VDbGllbnRJ
bXBsLmgKaW5kZXggMzhiOTdlYmI1YTQ2NjNkOWMwMTkyZDAyNjAwOThiZmQxYjA3OTVjMi4uNzVi
ZTlkMDU2MmZiNzE0ODEyZGE2OWVjMzZmZDdiMTc1NDQ2NTk0OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvcGxheXN0YXRpb24vUGFnZUNsaWVudEltcGwuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9wbGF5c3RhdGlvbi9QYWdlQ2xpZW50SW1wbC5oCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVy
dGFpbm1lbnQgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50
ZXJ0YWlubWVudCBJbmMuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYg
KzI2LDkgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiUGFnZUNsaWVudC5oIgorI2lmIEVO
QUJMRShGVUxMU0NSRUVOX0FQSSkKKyNpbmNsdWRlICJXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5
LmgiCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTExMSw2ICsxMTQsMTMgQEAg
cHJpdmF0ZToKICAgICAvLyBBdXhpbGlhcnkgQ2xpZW50IENyZWF0aW9uCiAjaWYgRU5BQkxFKEZV
TExTQ1JFRU5fQVBJKQogICAgIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlDbGllbnQmIGZ1bGxT
Y3JlZW5NYW5hZ2VyUHJveHlDbGllbnQoKSBmaW5hbDsKKworICAgIHZvaWQgY2xvc2VGdWxsU2Ny
ZWVuTWFuYWdlcigpIGZpbmFsOworICAgIGJvb2wgaXNGdWxsU2NyZWVuKCkgZmluYWw7CisgICAg
dm9pZCBlbnRlckZ1bGxTY3JlZW4oKSBmaW5hbDsKKyAgICB2b2lkIGV4aXRGdWxsU2NyZWVuKCkg
ZmluYWw7CisgICAgdm9pZCBiZWdhbkVudGVyRnVsbFNjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiBpbml0aWFsRnJhbWUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGZpbmFsRnJhbWUpIGZp
bmFsOworICAgIHZvaWQgYmVnYW5FeGl0RnVsbFNjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiBpbml0aWFsRnJhbWUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGZpbmFsRnJhbWUpIGZpbmFs
OwogI2VuZGlmCiAKICAgICAvLyBDdXN0b20gcmVwcmVzZW50YXRpb25zLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvcGxheXN0YXRpb24vUGxheVN0YXRpb25XZWJWaWV3LmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3BsYXlzdGF0aW9uL1BsYXlTdGF0aW9uV2ViVmll
dy5jcHAKaW5kZXggZmViMWE3MjI0MjViZjkyYzU5NGNjYWRkMDkwZTZhODNjMWRkNDUxMi4uYTY0
NWQyZTA2MzE4MzYyMDEyOGQ3NDE2MzMxMDkyOTA2NTBjODQ0OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvcGxheXN0YXRpb24vUGxheVN0YXRpb25XZWJWaWV3LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9wbGF5c3RhdGlvbi9QbGF5U3RhdGlvbldlYlZpZXcu
Y3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVy
YWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50
ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTM5LDYgKzM5LDcgQEAgUmVmUHRyPFBsYXlTdGF0aW9uV2ViVmlldz4gUGxheVN0YXRp
b25XZWJWaWV3OjpjcmVhdGUoY29uc3QgQVBJOjpQYWdlQ29uZmlndXJhdGkKIAogUGxheVN0YXRp
b25XZWJWaWV3OjpQbGF5U3RhdGlvbldlYlZpZXcoY29uc3QgQVBJOjpQYWdlQ29uZmlndXJhdGlv
biYgY29uZikKICAgICA6IG1fcGFnZUNsaWVudChtYWtlVW5pcXVlPFBhZ2VDbGllbnRJbXBsPigq
dGhpcykpCisgICAgLCBtX3ZpZXdTdGF0ZUZsYWdzIHsgV2ViQ29yZTo6QWN0aXZpdHlTdGF0ZTo6
V2luZG93SXNBY3RpdmUsIFdlYkNvcmU6OkFjdGl2aXR5U3RhdGU6OklzRm9jdXNlZCwgV2ViQ29y
ZTo6QWN0aXZpdHlTdGF0ZTo6SXNWaXNpYmxlLCBXZWJDb3JlOjpBY3Rpdml0eVN0YXRlOjpJc0lu
V2luZG93IH0KIHsKICAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBjb25mLmNvcHkoKTsKICAgICBh
dXRvKiBwb29sID0gY29uZmlndXJhdGlvbi0+cHJvY2Vzc1Bvb2woKTsKQEAgLTUxLDE5ICs1Miwx
MDQgQEAgUGxheVN0YXRpb25XZWJWaWV3Ojp+UGxheVN0YXRpb25XZWJWaWV3KCkKIHsKIH0KIAot
Ym9vbCBQbGF5U3RhdGlvbldlYlZpZXc6OmlzQWN0aXZlKCkgY29uc3QKK3ZvaWQgUGxheVN0YXRp
b25XZWJWaWV3OjpzZXRDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6Vmlld0NsaWVudD4mJiBj
bGllbnQpCiB7Ci0gICAgcmV0dXJuIG1fYWN0aXZlOworICAgIGlmICghY2xpZW50KQorICAgICAg
ICBtX2NsaWVudCA9IG1ha2VVbmlxdWU8QVBJOjpWaWV3Q2xpZW50PigpOworICAgIGVsc2UKKyAg
ICAgICAgbV9jbGllbnQgPSBXVEZNb3ZlKGNsaWVudCk7CiB9CiAKLWJvb2wgUGxheVN0YXRpb25X
ZWJWaWV3Ojppc0ZvY3VzZWQoKSBjb25zdAordm9pZCBQbGF5U3RhdGlvbldlYlZpZXc6OnNldFZp
ZXdTaXplKFdlYkNvcmU6OkludFNpemUgdmlld1NpemUpCiB7Ci0gICAgcmV0dXJuIG1fZm9jdXNl
ZDsKKyAgICBtX3ZpZXdTaXplID0gdmlld1NpemU7CiB9CiAKLWJvb2wgUGxheVN0YXRpb25XZWJW
aWV3Ojppc1Zpc2libGUoKSBjb25zdAordm9pZCBQbGF5U3RhdGlvbldlYlZpZXc6OnNldFZpZXdT
dGF0ZShPcHRpb25TZXQ8V2ViQ29yZTo6QWN0aXZpdHlTdGF0ZTo6RmxhZz4gZmxhZ3MpCiB7Ci0g
ICAgcmV0dXJuIG1fdmlzaWJsZTsKKyAgICBhdXRvIGNoYW5nZWRGbGFncyA9IG1fdmlld1N0YXRl
RmxhZ3MgXiBmbGFnczsKKyAgICBtX3ZpZXdTdGF0ZUZsYWdzID0gZmxhZ3M7CisKKyAgICBpZiAo
Y2hhbmdlZEZsYWdzKQorICAgICAgICBtX3BhZ2UtPmFjdGl2aXR5U3RhdGVEaWRDaGFuZ2UoY2hh
bmdlZEZsYWdzKTsKK30KKwordm9pZCBQbGF5U3RhdGlvbldlYlZpZXc6OnNldFZpZXdOZWVkc0Rp
c3BsYXkoY29uc3QgV2ViQ29yZTo6UmVnaW9uJiByZWdpb24pCit7CisgICAgaWYgKG1fY2xpZW50
KQorICAgICAgICBtX2NsaWVudC0+c2V0Vmlld05lZWRzRGlzcGxheSgqdGhpcywgcmVnaW9uKTsK
K30KKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKK3ZvaWQgUGxheVN0YXRpb25XZWJWaWV3
Ojp3aWxsRW50ZXJGdWxsU2NyZWVuKCkKK3sKKyAgICBtX2lzRnVsbFNjcmVlbiA9IHRydWU7Cisg
ICAgbV9wYWdlLT5mdWxsU2NyZWVuTWFuYWdlcigpLT53aWxsRW50ZXJGdWxsU2NyZWVuKCk7Cit9
CisKK3ZvaWQgUGxheVN0YXRpb25XZWJWaWV3OjpkaWRFbnRlckZ1bGxTY3JlZW4oKQoreworICAg
IG1fcGFnZS0+ZnVsbFNjcmVlbk1hbmFnZXIoKS0+ZGlkRW50ZXJGdWxsU2NyZWVuKCk7Cit9CisK
K3ZvaWQgUGxheVN0YXRpb25XZWJWaWV3Ojp3aWxsRXhpdEZ1bGxTY3JlZW4oKQoreworICAgIG1f
cGFnZS0+ZnVsbFNjcmVlbk1hbmFnZXIoKS0+d2lsbEV4aXRGdWxsU2NyZWVuKCk7Cit9CisKK3Zv
aWQgUGxheVN0YXRpb25XZWJWaWV3OjpkaWRFeGl0RnVsbFNjcmVlbigpCit7CisgICAgbV9wYWdl
LT5mdWxsU2NyZWVuTWFuYWdlcigpLT5kaWRFeGl0RnVsbFNjcmVlbigpOworICAgIG1faXNGdWxs
U2NyZWVuID0gZmFsc2U7Cit9CisKK3ZvaWQgUGxheVN0YXRpb25XZWJWaWV3OjpyZXF1ZXN0RXhp
dEZ1bGxTY3JlZW4oKQoreworICAgIGlmIChpc0Z1bGxTY3JlZW4oKSkKKyAgICAgICAgbV9wYWdl
LT5mdWxsU2NyZWVuTWFuYWdlcigpLT5yZXF1ZXN0RXhpdEZ1bGxTY3JlZW4oKTsKK30KKwordm9p
ZCBQbGF5U3RhdGlvbldlYlZpZXc6OmNsb3NlRnVsbFNjcmVlbk1hbmFnZXIoKQoreworICAgIGlm
IChtX2NsaWVudCAmJiBpc0Z1bGxTY3JlZW4oKSkKKyAgICAgICAgbV9jbGllbnQtPmNsb3NlRnVs
bFNjcmVlbigqdGhpcyk7CisgICAgbV9pc0Z1bGxTY3JlZW4gPSBmYWxzZTsKK30KKworYm9vbCBQ
bGF5U3RhdGlvbldlYlZpZXc6OmlzRnVsbFNjcmVlbigpCit7CisgICAgcmV0dXJuIG1faXNGdWxs
U2NyZWVuOworfQorCit2b2lkIFBsYXlTdGF0aW9uV2ViVmlldzo6ZW50ZXJGdWxsU2NyZWVuKCkK
K3sKKyAgICBpZiAobV9jbGllbnQgJiYgIWlzRnVsbFNjcmVlbigpKQorICAgICAgICBtX2NsaWVu
dC0+ZW50ZXJGdWxsU2NyZWVuKCp0aGlzKTsKK30KKwordm9pZCBQbGF5U3RhdGlvbldlYlZpZXc6
OmV4aXRGdWxsU2NyZWVuKCkKK3sKKyAgICBpZiAobV9jbGllbnQgJiYgaXNGdWxsU2NyZWVuKCkp
CisgICAgICAgIG1fY2xpZW50LT5leGl0RnVsbFNjcmVlbigqdGhpcyk7Cit9CisKK3ZvaWQgUGxh
eVN0YXRpb25XZWJWaWV3OjpiZWdhbkVudGVyRnVsbFNjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiBpbml0aWFsRnJhbWUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGZpbmFsRnJhbWUpCit7
CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+YmVnYW5FbnRlckZ1bGxTY3Jl
ZW4oKnRoaXMsIGluaXRpYWxGcmFtZSwgZmluYWxGcmFtZSk7Cit9CisKK3ZvaWQgUGxheVN0YXRp
b25XZWJWaWV3OjpiZWdhbkV4aXRGdWxsU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGlu
aXRpYWxGcmFtZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZmluYWxGcmFtZSkKK3sKKyAgICBp
ZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5iZWdhbkV4aXRGdWxsU2NyZWVuKCp0aGlz
LCBpbml0aWFsRnJhbWUsIGZpbmFsRnJhbWUpOworfQorI2VuZGlmCisKK3ZvaWQgUGxheVN0YXRp
b25XZWJWaWV3OjpzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJiBjdXJzb3IpCit7Cisg
ICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+c2V0Q3Vyc29yKCp0aGlzLCBjdXJz
b3IpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL3BsYXlzdGF0aW9uL1BsYXlTdGF0aW9uV2ViVmlldy5oIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvcGxheXN0YXRpb24vUGxheVN0YXRpb25XZWJWaWV3LmgKaW5kZXggMTc5
NTczNjMwZGMzZWU1MzU0YzEyNTNkZDUwZTMxNjJjYTE3ZDUzMi4uMmVlYWE0MGQ1MWM4YzZhNTMw
MzhlNzQ0MGNmYWU5MzhkODA0MjkzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvcGxheXN0YXRpb24vUGxheVN0YXRpb25XZWJWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvcGxheXN0YXRpb24vUGxheVN0YXRpb25XZWJWaWV3LmgKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVu
dCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5t
ZW50IEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsNyBA
QAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBUElPYmplY3QuaCIKKyNpbmNsdWRlICJBUElW
aWV3Q2xpZW50LmgiCiAjaW5jbHVkZSAiUGFnZUNsaWVudEltcGwuaCIKICNpbmNsdWRlICJXS1Zp
ZXcuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKQEAgLTM4LDIxICszOSw0NSBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIFJlZlB0cjxQbGF5U3RhdGlvbldlYlZpZXc+IGNyZWF0ZShjb25zdCBB
UEk6OlBhZ2VDb25maWd1cmF0aW9uJik7CiAgICAgdmlydHVhbCB+UGxheVN0YXRpb25XZWJWaWV3
KCk7CiAKKyAgICB2b2lkIHNldENsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpWaWV3Q2xpZW50
PiYmKTsKKwogICAgIFdlYlBhZ2VQcm94eSogcGFnZSgpIHsgcmV0dXJuIG1fcGFnZS5nZXQoKTsg
fQogCi0gICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OwotICAgIGJvb2wgaXNGb2N1c2VkKCkgY29u
c3Q7Ci0gICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdDsKKyAgICB2b2lkIHNldFZpZXdTaXplKFdl
YkNvcmU6OkludFNpemUpOworICAgIFdlYkNvcmU6OkludFNpemUgdmlld1NpemUoKSBjb25zdCB7
IHJldHVybiBtX3ZpZXdTaXplOyB9CisKKyAgICB2b2lkIHNldFZpZXdTdGF0ZShPcHRpb25TZXQ8
V2ViQ29yZTo6QWN0aXZpdHlTdGF0ZTo6RmxhZz4pOworICAgIE9wdGlvblNldDxXZWJDb3JlOjpB
Y3Rpdml0eVN0YXRlOjpGbGFnPiB2aWV3U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3ZpZXdTdGF0
ZUZsYWdzOyB9CisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgdm9pZCB3aWxsRW50
ZXJGdWxsU2NyZWVuKCk7CisgICAgdm9pZCBkaWRFbnRlckZ1bGxTY3JlZW4oKTsKKyAgICB2b2lk
IHdpbGxFeGl0RnVsbFNjcmVlbigpOworICAgIHZvaWQgZGlkRXhpdEZ1bGxTY3JlZW4oKTsKKyAg
ICB2b2lkIHJlcXVlc3RFeGl0RnVsbFNjcmVlbigpOworI2VuZGlmCisKKyAgICAvLyBGdW5jdGlv
bnMgY2FsbGVkIGJ5IFBhZ2VDbGllbnRJbXBsCisgICAgdm9pZCBzZXRWaWV3TmVlZHNEaXNwbGF5
KGNvbnN0IFdlYkNvcmU6OlJlZ2lvbiYpOworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAg
ICBib29sIGlzRnVsbFNjcmVlbigpOworICAgIHZvaWQgY2xvc2VGdWxsU2NyZWVuTWFuYWdlcigp
OworICAgIHZvaWQgZW50ZXJGdWxsU2NyZWVuKCk7CisgICAgdm9pZCBleGl0RnVsbFNjcmVlbigp
OworICAgIHZvaWQgYmVnYW5FbnRlckZ1bGxTY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2b2lkIGJlZ2FuRXhpdEZ1bGxTY3JlZW4o
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyNlbmRp
ZgorICAgIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYpOwogCiBwcml2YXRl
OgogICAgIFBsYXlTdGF0aW9uV2ViVmlldyhjb25zdCBBUEk6OlBhZ2VDb25maWd1cmF0aW9uJik7
CiAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpWaWV3Q2xpZW50PiBtX2NsaWVudDsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8V2ViS2l0OjpQYWdlQ2xpZW50SW1wbD4gbV9wYWdlQ2xpZW50OwogICAg
IFJlZlB0cjxXZWJQYWdlUHJveHk+IG1fcGFnZTsKKyAgICBPcHRpb25TZXQ8V2ViQ29yZTo6QWN0
aXZpdHlTdGF0ZTo6RmxhZz4gbV92aWV3U3RhdGVGbGFnczsKIAotICAgIGJvb2wgbV9hY3RpdmUg
eyBmYWxzZSB9OwotICAgIGJvb2wgbV9mb2N1c2VkIHsgZmFsc2UgfTsKLSAgICBib29sIG1fdmlz
aWJsZSB7IGZhbHNlIH07CisgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3ZpZXdTaXplOwogI2lmIEVO
QUJMRShGVUxMU0NSRUVOX0FQSSkKICAgICBib29sIG1faXNGdWxsU2NyZWVuIHsgZmFsc2UgfTsK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApp
bmRleCA5NTcwZWMzYmEwNGFlM2E3MDM4MzQ5NTg4MGQwM2IyMjViZDYxZDJiLi4zMTY1ZTlmZjdi
MWUwYzE5M2FhOTNhZGIwMDcxOGUwYTFiYmE3ZTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtMzcwNCw3ICszNzA0LDcgQEAgdm9pZCBXZWJQ
YWdlOjp1cGRhdGVQcmVmZXJlbmNlcyhjb25zdCBXZWJQcmVmZXJlbmNlc1N0b3JlJiBzdG9yZSkK
IAogICAgIFNldHRpbmdzJiBzZXR0aW5ncyA9IG1fcGFnZS0+c2V0dGluZ3MoKTsKIAotI2lmICFQ
TEFURk9STShHVEspICYmICFQTEFURk9STShXSU4pCisjaWYgIVBMQVRGT1JNKEdUSykgJiYgIVBM
QVRGT1JNKFdJTikgJiYgIVBMQVRGT1JNKFBMQVlTVEFUSU9OKQogICAgIGlmICghc2V0dGluZ3Mu
YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoKSkgewogICAgICAgICBSRUxFQVNFX0xPR19J
Rl9BTExPV0VEKExheWVycywgInVwZGF0ZVByZWZlcmVuY2VzOiBhY2NlbGVyYXRlZENvbXBvc2l0
aW5nRW5hYmxlZCBzZXR0aW5nIHdhcyBmYWxzZS4gV2ViS2l0IGNhbm5vdCBmdW5jdGlvbiBpbiB0
aGlzIG1vZGU7IGNoYW5naW5nIHNldHRpbmcgdG8gdHJ1ZSIpOwogICAgICAgICBzZXR0aW5ncy5z
ZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCh0cnVlKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9jbWFrZS9PcHRpb25zUGxheVN0YXRpb24uY21ha2UgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc1Bs
YXlTdGF0aW9uLmNtYWtlCmluZGV4IDdjMjRlNTUxZThjMzk1N2Q3NzlkY2E2YzU2MDkzNjI2MmUz
NGExNDkuLmI4MjQ4NWJlYzZmZWUwMDk1M2QwNmQ2OTM2OWJiY2ZmNTgwNTM3YzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zUGxheVN0YXRpb24uY21ha2UKKysrIGIvU291cmNlL2Nt
YWtlL09wdGlvbnNQbGF5U3RhdGlvbi5jbWFrZQpAQCAtMzMsNiArMzMsNyBAQCBXRUJLSVRfT1BU
SU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfREZHX0pJVCBQUklWQVRFIE9GRikKICMgRW5h
YmxlZCBmZWF0dXJlcwogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0FD
Q0VTU0lCSUxJVFkgUFJJVkFURSBPRkYpCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxV
RShFTkFCTEVfQVNZTkNfU0NST0xMSU5HIFBSSVZBVEUgT04pCitXRUJLSVRfT1BUSU9OX0RFRkFV
TFRfUE9SVF9WQUxVRShFTkFCTEVfRlVMTFNDUkVFTl9BUEkgUFJJVkFURSBPTikKIFdFQktJVF9P
UFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9QRVJJT0RJQ19NRU1PUllfTU9OSVRPUiBQ
UklWQVRFIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1NNT09U
SF9TQ1JPTExJTkcgUFJJVkFURSBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVF
KEVOQUJMRV9SRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MgUFJJVkFURSBPTikKQEAgLTYzLDcgKzY0
LDYgQEAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1RMU19ERUJVRyAiRW5hYmxlIFRMUyBr
ZXkgbG9nIHN1cHBvcnQiIFBSSVZBVEUgT0ZGKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRf
VkFMVUUoRU5BQkxFX1ZBUklBVElPTl9GT05UUyBQUklWQVRFIE9GRikKIAogIyBFbmFibGUgaW4g
dGhlIGZ1dHVyZQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0ZVTExT
Q1JFRU5fQVBJIFBSSVZBVEUgT0ZGKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUo
RU5BQkxFX0NPTlRFWFRfTUVOVVMgUFJJVkFURSBPRkYpCiAKICMgTm8gc3VwcG9ydCBwbGFubmVk
CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZDNk
ZmFmY2EyNTk3YjU3NGEyYmQ1YmFhZGZlNTM5YzdhNWQwOTliMy4uOGZhNzkyNTYzOGRjYzFjODg4
YjQ4YWQ3MmZlZjkyZGQxY2RiYTBhNiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBi
L1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDIxLTAxLTA2ICBZb3NoaWFraSBK
aXRzdWthd2EgIDx5b3NoaWFraS5qaXRzdWthd2FAc29ueS5jb20+CisKKyAgICAgICAgW1BsYXlT
dGF0aW9uXSBBZGQgTWluaUJyb3dzZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyMDM1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZCBQbGF5U3RhdGlvbiBNaW5pQnJvd3NlciBzb3VyY2VzIGFuZCBD
TWFrZUxpc3RzLnR4dC4KKworICAgICAgICAqIE1pbmlCcm93c2VyL3BsYXlzdGF0aW9uL0NNYWtl
TGlzdHMudHh0OiBBZGRlZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9JbWFn
ZUJ1dHRvbi5jcHA6IEFkZGVkLgorICAgICAgICAqIE1pbmlCcm93c2VyL3BsYXlzdGF0aW9uL0lt
YWdlQnV0dG9uLmg6IEFkZGVkLgorICAgICAgICAqIE1pbmlCcm93c2VyL3BsYXlzdGF0aW9uL01h
aW5XaW5kb3cuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9N
YWluV2luZG93Lmg6IEFkZGVkLgorICAgICAgICAqIE1pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1N0
cmluZ1V0aWxzLmg6IEFkZGVkLgorICAgICAgICAqIE1pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1Rp
dGxlQmFyLmNwcDogQWRkZWQuCisgICAgICAgICogTWluaUJyb3dzZXIvcGxheXN0YXRpb24vVGl0
bGVCYXIuaDogQWRkZWQuCisgICAgICAgICogTWluaUJyb3dzZXIvcGxheXN0YXRpb24vVG9vbGtp
dHRlblV0aWxzLmg6IEFkZGVkLgorICAgICAgICAqIE1pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1VS
TEJhci5jcHA6IEFkZGVkLgorICAgICAgICAqIE1pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1VSTEJh
ci5oOiBBZGRlZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9XZWJDb250ZXh0
LmNwcDogQWRkZWQuCisgICAgICAgICogTWluaUJyb3dzZXIvcGxheXN0YXRpb24vV2ViQ29udGV4
dC5oOiBBZGRlZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9XZWJWaWV3V2lu
ZG93LmNwcDogQWRkZWQuCisgICAgICAgICogTWluaUJyb3dzZXIvcGxheXN0YXRpb24vV2ViVmll
d1dpbmRvdy5oOiBBZGRlZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9tYWlu
LmNwcDogQWRkZWQuCisgICAgICAgIChsb2FkTGlicmFyeU9yRXhpdCk6CisgICAgICAgIChpbml0
aWFsaXplKToKKyAgICAgICAgKEFwcGxpY2F0aW9uQ2xpZW50Ojp1cGRhdGVBcHBsaWNhdGlvbik6
CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBQbGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtlOiBB
ZGRlZC4KKwogMjAyMC0xMS0yNiAgTGF1cm8gTW91cmEgIDxsbW91cmFAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBbR1RLXSBVbnJldmlld2VkLiBSZW1vdmUgbGVmdG92ZXIgdGVzdCBjYXNlIGFmdGVy
IEludGVybmV0IEV4cGxvcmVyIHF1aXJrcyBjaGFuZ2VzCmRpZmYgLS1naXQgYS9Ub29scy9NaW5p
QnJvd3Nlci9wbGF5c3RhdGlvbi9DTWFrZUxpc3RzLnR4dCBiL1Rvb2xzL01pbmlCcm93c2VyL3Bs
YXlzdGF0aW9uL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE2NTQ4OWY0NDc3YjA0MmY1OWJk
YzQxMGVkMjg0ZjVjZTk4ZTBlYWMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nl
ci9wbGF5c3RhdGlvbi9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDYxIEBACitzZXQoTUlOSUJS
T1dTRVJfRElSICIke1RPT0xTX0RJUn0vTWluaUJyb3dzZXIvcGxheXN0YXRpb24iKQorCitmaW5k
X2xpYnJhcnkoVE9PTEtJVF9MSUJSQVJZIFRvb2xLaXR0ZW4pCisKK1BMQVlTVEFUSU9OX0NPUFlf
U0hBUkVEX0xJQlJBUklFUyhNaW5pQnJvd3Nlcl9Db3B5U2hhcmVkTGlicworICAgIEZJTEVTICR7
VE9PTEtJVF9MSUJSQVJZfQorKQorCitzZXQoTWluaUJyb3dzZXJfUFJJVkFURV9JTkNMVURFX0RJ
UkVDVE9SSUVTCisgICAgIiR7V0VCS0lUX0xJQlJBUklFU19ESVJ9L2luY2x1ZGUiCisgICAgIiR7
Rk9SV0FSRElOR19IRUFERVJTX0RJUn0iCisgICAgJHtDTUFLRV9CSU5BUllfRElSfQorICAgICR7
V2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTX0RJUn0KKyAgICAiJHtDTUFLRV9TT1VS
Q0VfRElSfS9Tb3VyY2UiCisgICAgIiR7VE9PTFNfRElSfS9wbGF5c3RhdGlvbi8iCispCisKK3Nl
dChNaW5pQnJvd3Nlcl9TT1VSQ0VTCisgICAgSW1hZ2VCdXR0b24uY3BwCisgICAgTWFpbldpbmRv
dy5jcHAKKyAgICBUaXRsZUJhci5jcHAKKyAgICBVUkxCYXIuY3BwCisgICAgV2ViQ29udGV4dC5j
cHAKKyAgICBXZWJWaWV3V2luZG93LmNwcAorICAgIG1haW4uY3BwCispCisKK3NldChNaW5pQnJv
d3Nlcl9MSUJSQVJJRVMKKyAgICAke0NfU1REX0xJQlJBUll9CisgICAgJHtLRVJORUxfTElCUkFS
WX0KKworICAgICR7VE9PTEtJVF9MSUJSQVJZfQorCisgICAgV2ViS2l0CispCisKK3NldChQTEFZ
U1RBVElPTl9NaW5pQnJvd3Nlcl9SRVFVSVJFRF9TSEFSRURfTElCUkFSSUVTCisgICAgbGliVG9v
bEtpdHRlbgorICAgIGxpYmNhaXJvCisgICAgbGliZm9udGNvbmZpZworICAgIGxpYmZyZWV0eXBl
CisgICAgbGliaGFyZmJ1enoKKyAgICBsaWJpY3UKKyAgICBsaWJwbmcxNgorKQorCitsaW5rX2Rp
cmVjdG9yaWVzKCR7V0VCS0lUX0xJQlJBUklFU19ESVJ9L2xpYikKK1dFQktJVF9FWEVDVVRBQkxF
X0RFQ0xBUkUoTWluaUJyb3dzZXIpCitXRUJLSVRfRVhFQ1VUQUJMRShNaW5pQnJvd3NlcikKKwor
IyBNaW5pQnJvd3NlciB3b24ndCB3b3JrIHdpdGhvdXQgdGhlc2UgcHJvY2Vzc2VzCithZGRfZGVw
ZW5kZW5jaWVzKE1pbmlCcm93c2VyIFdlYlByb2Nlc3MgTmV0d29ya1Byb2Nlc3MpCisKK3Rhcmdl
dF9saW5rX29wdGlvbnMoTWluaUJyb3dzZXIgUFJJVkFURSAtV2wsLS1uby1kZW1hbmdsZSkKKwor
IworIyBTZXQgdGhlIGRlYnVnZ2VyIHdvcmtpbmcgZGlyZWN0b3J5IGZvciBWaXN1YWwgU3R1ZGlv
CisjCitpZiAoJHtDTUFLRV9HRU5FUkFUT1J9IE1BVENIRVMgIlZpc3VhbCBTdHVkaW8iKQorICAg
IHNldF90YXJnZXRfcHJvcGVydGllcyhNaW5pQnJvd3NlciBQUk9QRVJUSUVTIFZTX0RFQlVHR0VS
X1dPUktJTkdfRElSRUNUT1JZICIke0NNQUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWX0iKQor
ZW5kaWYgKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL0ltYWdl
QnV0dG9uLmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL0ltYWdlQnV0dG9uLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5hYWU3YzgxMTcwYzM3MWRlYmM3NmE2M2JiMGY0ODQxNDE2YzFmYTc3Ci0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRpb24vSW1hZ2VCdXR0
b24uY3BwCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJ
bnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIkltYWdl
QnV0dG9uLmgiCisKK3ZvaWQgSW1hZ2VCdXR0b246OnNldENsaWVudChDbGllbnQmJiBjbGllbnQp
Cit7CisgICAgbV9jbGllbnQgPSBzdGQ6Om1vdmUoY2xpZW50KTsKK30KKworYm9vbCBJbWFnZUJ1
dHRvbjo6b25Nb3VzZU1vdmUodG9vbGtpdHRlbjo6SW50UG9pbnQpCit7CisgICAgc2V0Rm9jdXNl
ZCgpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEltYWdlQnV0dG9uOjpvbkRlY2lkZSgp
Cit7CisgICAgaWYgKG1fY2xpZW50Lm9uRGVjaWRlKQorICAgICAgICBtX2NsaWVudC5vbkRlY2lk
ZSh0aGlzKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL0lt
YWdlQnV0dG9uLmggYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9JbWFnZUJ1dHRvbi5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmUwMDhhM2NkZTVmNWNhNGRiODYxYmM0NmFhMTIwMGFkYWIzMTcwMWMKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9JbWFnZUJ1dHRv
bi5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRl
cmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPHRvb2xraXR0ZW4vSW1hZ2VCdXR0b24uaD4K
KworY2xhc3MgSW1hZ2VCdXR0b24gOiBwdWJsaWMgdG9vbGtpdHRlbjo6SW1hZ2VCdXR0b24gewor
cHVibGljOgorICAgIHN0cnVjdCBDbGllbnQgeworICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQo
SW1hZ2VCdXR0b24qKT4gb25EZWNpZGU7CisgICAgfTsKKworICAgIHZvaWQgc2V0Q2xpZW50KENs
aWVudCYmKTsKKworcHJvdGVjdGVkOgorICAgIGJvb2wgb25Nb3VzZU1vdmUodG9vbGtpdHRlbjo6
SW50UG9pbnQpIG92ZXJyaWRlOworICAgIHZvaWQgb25EZWNpZGUoKSBvdmVycmlkZTsKKworICAg
IENsaWVudCBtX2NsaWVudDsKK307CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9wbGF5
c3RhdGlvbi9NYWluV2luZG93LmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL01h
aW5XaW5kb3cuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVkNzk2Y2U5NjZlYzFmNjdlMmM1NDM2N2RjODA1YjRj
ZGYxMDA4ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlv
bi9NYWluV2luZG93LmNwcApAQCAtMCwwICsxLDI0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWFpbldpbmRvdy5oIgorCisjaW5jbHVkZSAiSW1h
Z2VCdXR0b24uaCIKKyNpbmNsdWRlICJUaXRsZUJhci5oIgorI2luY2x1ZGUgIlRvb2xraXR0ZW5V
dGlscy5oIgorI2luY2x1ZGUgIlVSTEJhci5oIgorI2luY2x1ZGUgIldlYlZpZXdXaW5kb3cuaCIK
KyNpbmNsdWRlIDxLZXlib2FyZENvZGVzLmg+CisjaW5jbHVkZSA8V2ViS2l0L1dLU3RyaW5nLmg+
CisjaW5jbHVkZSA8dG9vbGtpdHRlbi9BcHBsaWNhdGlvbi5oPgorCitjb25zdCBpbnQgTGluZUhl
aWdodCA9IDQwOworY29uc3QgaW50IEZvbnRTaXplID0gMzI7CisKK3VzaW5nIG5hbWVzcGFjZSB0
b29sa2l0dGVuOworCitNYWluV2luZG93OjpNYWluV2luZG93KCkKK3sKKyAgICBJbnRTaXplIHNp
emUgPSBBcHBsaWNhdGlvbjo6c2luZ2xldG9uKCkud2luZG93U2l6ZSgpOworICAgIGF1dG8gd2lu
ZG93V2lkdGggPSBzaXplLnc7CisgICAgYXV0byB3aW5kb3dIZWlnaHQgPSBzaXplLmg7CisgICAg
c2V0U2l6ZShzaXplKTsKKworICAgIGNvbnN0IHVuc2lnbmVkIHRpdGxlQmFySGVpZ2h0ID0gTGlu
ZUhlaWdodCAqIDE7CisgICAgY29uc3QgdW5zaWduZWQgdXJsQmFySGVpZ2h0ID0gTGluZUhlaWdo
dCAqIDE7CisgICAgY29uc3QgdW5zaWduZWQgd2ViVmlld0ZyYW1lWVBvc2l0aW9uID0gdGl0bGVC
YXJIZWlnaHQgKyB1cmxCYXJIZWlnaHQ7CisKKyAgICAvLyBSZWdpc3RlciB3aWRnZXRzLiBETyBO
T1QgQ0hBTkdFIHRoaXMgb3JkZXIuCisgICAgbV93ZWJ2aWV3RnJhbWUgPSBjcmVhdGVBbmRBcHBl
bmRDaGlsZDxXaWRnZXQ+KHRoaXMsCisgICAgICAgIHsgd2luZG93V2lkdGgsIHdpbmRvd0hlaWdo
dCAtIHdlYlZpZXdGcmFtZVlQb3NpdGlvbiB9LAorICAgICAgICB7IDAsIHdlYlZpZXdGcmFtZVlQ
b3NpdGlvbiB9KTsKKworICAgIG1fdGl0bGVCYXIgPSBjcmVhdGVBbmRBcHBlbmRDaGlsZDxUaXRs
ZUJhcj4odGhpcywKKyAgICAgICAgeyB3aW5kb3dXaWR0aCwgdGl0bGVCYXJIZWlnaHQgfSwKKyAg
ICAgICAgeyAwLCAwIH0pOworCisgICAgY29uc3QgaW50IGNsb3NlQnV0dG9uTWFyZ2luID0gNDsK
KyAgICBhdXRvIGNsb3NlQnV0dG9uID0gY3JlYXRlQW5kQXBwZW5kQ2hpbGQ8OjpJbWFnZUJ1dHRv
bj4odGhpcywKKyAgICAgICAgeyB0aXRsZUJhckhlaWdodCAtIGNsb3NlQnV0dG9uTWFyZ2luICog
MiwgdGl0bGVCYXJIZWlnaHQgLSBjbG9zZUJ1dHRvbk1hcmdpbiAqIDIgfSwKKyAgICAgICAgeyAo
aW50KSh3aW5kb3dXaWR0aCAtIHRpdGxlQmFySGVpZ2h0ICsgY2xvc2VCdXR0b25NYXJnaW4pLCBj
bG9zZUJ1dHRvbk1hcmdpbiB9KTsKKyAgICBjbG9zZUJ1dHRvbi0+c2V0SW1hZ2VGcm9tUmVzb3Vy
Y2UoImljb25fY3Jvc3MucG5nIik7CisgICAgY2xvc2VCdXR0b24tPnNldENsaWVudCh7W3RoaXNd
KDo6SW1hZ2VCdXR0b24qKSB7CisgICAgICAgIGNsb3NlV2ViVmlldyhhY3RpdmVXZWJWaWV3KCkp
OworICAgIH19KTsKKworICAgIGNvbnN0IHVuc2lnbmVkIGJ1dHRvbldpZHRoID0gMTAwOworICAg
IGNvbnN0IHVuc2lnbmVkIHVybEJhcldpZHRoID0gd2luZG93V2lkdGggLSBidXR0b25XaWR0aCAq
IDM7CisgICAgY29uc3QgdW5zaWduZWQgdXJsQmFyWFBvc2l0aW9uID0gYnV0dG9uV2lkdGggKiAz
OworCisgICAgYXV0byBiYWNrQnV0dG9uID0gY3JlYXRlQW5kQXBwZW5kQ2hpbGQ8OjpJbWFnZUJ1
dHRvbj4odGhpcywKKyAgICAgICAgeyBidXR0b25XaWR0aCwgdXJsQmFySGVpZ2h0IH0sCisgICAg
ICAgIHsgMCwgdGl0bGVCYXJIZWlnaHQgfSk7CisgICAgYmFja0J1dHRvbi0+c2V0SW1hZ2VGcm9t
UmVzb3VyY2UoImljb25fYmFjay5wbmciKTsKKyAgICBiYWNrQnV0dG9uLT5zZXRDbGllbnQoeyBb
dGhpc10oOjpJbWFnZUJ1dHRvbiopIHsKKyAgICAgICAgYWN0aXZlV2ViVmlldygpLT5nb0JhY2so
KTsKKyAgICB9fSk7CisKKyAgICBhdXRvIGZvcndhcmRCdXR0b24gPSBjcmVhdGVBbmRBcHBlbmRD
aGlsZDw6OkltYWdlQnV0dG9uPih0aGlzLAorICAgICAgICB7IGJ1dHRvbldpZHRoLCB1cmxCYXJI
ZWlnaHQgfSwKKyAgICAgICAgeyBidXR0b25XaWR0aCwgdGl0bGVCYXJIZWlnaHQgfSk7CisgICAg
Zm9yd2FyZEJ1dHRvbi0+c2V0SW1hZ2VGcm9tUmVzb3VyY2UoImljb25fZm9yd2FyZC5wbmciKTsK
KyAgICBmb3J3YXJkQnV0dG9uLT5zZXRDbGllbnQoeyBbdGhpc10oOjpJbWFnZUJ1dHRvbiopIHsK
KyAgICAgICAgYWN0aXZlV2ViVmlldygpLT5nb0ZvcndhcmQoKTsKKyAgICB9fSk7CisKKyAgICBh
dXRvIHJlbG9hZEJ1dHRvbiA9IGNyZWF0ZUFuZEFwcGVuZENoaWxkPDo6SW1hZ2VCdXR0b24+KHRo
aXMsCisgICAgICAgIHsgYnV0dG9uV2lkdGgsIHVybEJhckhlaWdodCB9LAorICAgICAgICB7IGJ1
dHRvbldpZHRoICogMiwgdGl0bGVCYXJIZWlnaHQgfSk7CisgICAgcmVsb2FkQnV0dG9uLT5zZXRJ
bWFnZUZyb21SZXNvdXJjZSgiaWNvbl9yZWxvYWQucG5nIik7CisgICAgcmVsb2FkQnV0dG9uLT5z
ZXRDbGllbnQoeyBbdGhpc10oOjpJbWFnZUJ1dHRvbiopIHsKKyAgICAgICAgYWN0aXZlV2ViVmll
dygpLT5yZWxvYWQoKTsKKyAgICB9fSk7CisKKyAgICBtX3VybEJhciA9IGNyZWF0ZUFuZEFwcGVu
ZENoaWxkPDo6VVJMQmFyPih0aGlzLAorICAgICAgICB7IHVybEJhcldpZHRoLCB1cmxCYXJIZWln
aHQgfSwKKyAgICAgICAgeyB1cmxCYXJYUG9zaXRpb24sIHRpdGxlQmFySGVpZ2h0IH0pOworICAg
IG1fdXJsQmFyLT5zZXRDbGllbnQoeyBbdGhpc10oOjpVUkxCYXIqLCBjb25zdCBjaGFyKiB1cmwp
IHsgCisgICAgICAgIGFjdGl2ZVdlYlZpZXcoKS0+bG9hZFVSTCh1cmwpOworICAgIH19KTsKKwor
ICAgIGNyZWF0ZU5ld1dlYlZpZXcobnVsbHB0cik7CisgICAgYWN0aXZlV2ViVmlldygpLT5sb2Fk
VVJMKCJodHRwczovL3dlYmtpdC5vcmciKTsKK30KKwordm9pZCBNYWluV2luZG93OjpwYWludFNl
bGYodG9vbGtpdHRlbjo6SW50UG9pbnQpCit7Cit9CisKK1dlYlZpZXdXaW5kb3cqIE1haW5XaW5k
b3c6OmNyZWF0ZU5ld1dlYlZpZXcoV0tQYWdlQ29uZmlndXJhdGlvblJlZiBjb25maWd1cmF0aW9u
KQoreworICAgIEludFNpemUgc2l6ZSA9IG1fd2Vidmlld0ZyYW1lLT5zaXplKCk7CisgICAgSW50
UG9pbnQgcG9zaXRpb24gPSB7IDAsIDAgfTsKKworICAgIFdlYlZpZXdXaW5kb3c6OkNsaWVudCB3
aW5kb3dDbGllbnQgeworICAgICAgICAvLyBjcmVhdGVOZXdXaW5kb3cKKyAgICAgICAgW3RoaXNd
KFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYgY29uZmlndXJhdGlvbikgLT4gV2ViVmlld1dpbmRvdyog
eworICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZU5ld1dlYlZpZXcoY29uZmlndXJhdGlvbik7Cisg
ICAgICAgIH0sCisKKyAgICAgICAgLy8gZGlkVXBkYXRlVGl0bGUKKyAgICAgICAgW3RoaXNdKFdl
YlZpZXdXaW5kb3cqIHZpZXcpIHsKKyAgICAgICAgICAgIGlmICh2aWV3ID09IGFjdGl2ZVdlYlZp
ZXcoKSkKKyAgICAgICAgICAgICAgICB1cGRhdGVUaXRsZUJhcigpOworICAgICAgICB9LAorICAg
ICAgICAvLyBkaWRVcGRhdGVVUkwKKyAgICAgICAgW3RoaXNdKFdlYlZpZXdXaW5kb3cqIHZpZXcp
IHsKKyAgICAgICAgICAgIGlmICh2aWV3ID09IGFjdGl2ZVdlYlZpZXcoKSkKKyAgICAgICAgICAg
ICAgICB1cGRhdGVVUkxCYXIoKTsKKyAgICAgICAgfSwKKyAgICAgICAgLy8gZGlkVXBkYXRlUHJv
Z3Jlc3MKKyAgICAgICAgW3RoaXNdKFdlYlZpZXdXaW5kb3cqIHZpZXcpIHsKKyAgICAgICAgICAg
IGlmICh2aWV3ID09IGFjdGl2ZVdlYlZpZXcoKSkKKyAgICAgICAgICAgICAgICB1cGRhdGVUaXRs
ZUJhcigpOworICAgICAgICB9CisgICAgfTsKKworICAgIGF1dG8gd2ViVmlld1dpbmRvdyA9IFdl
YlZpZXdXaW5kb3c6OmNyZWF0ZShzdGQ6Om1vdmUod2luZG93Q2xpZW50KSwgY29uZmlndXJhdGlv
bik7CisgICAgd2ViVmlld1dpbmRvdy0+c2V0VXNlckRhdGEodGhpcyk7CisgICAgd2ViVmlld1dp
bmRvdy0+c2V0UG9zaXRpb24ocG9zaXRpb24pOworICAgIHdlYlZpZXdXaW5kb3ctPnNldFNpemUo
eyBzaXplLncsIHNpemUuaCB9KTsKKyAgICB3ZWJWaWV3V2luZG93LT5maWxsKFdISVRFKTsKKwor
ICAgIFdlYlZpZXdXaW5kb3cqIHJhd1dlYlZpZXdXaW5kb3cgPSB3ZWJWaWV3V2luZG93LmdldCgp
OworICAgIG1fd2Vidmlld0ZyYW1lLT5hcHBlbmRDaGlsZChtb3ZlKHdlYlZpZXdXaW5kb3cpKTsK
KworICAgIC8vIEFjcml2YXRlIHRoZSBuZXcgd2luZG93LgorICAgIHJhd1dlYlZpZXdXaW5kb3ct
PnNldEFjdGl2ZSh0cnVlKTsKKyAgICBzZXRBY3RpdmVXZWJWaWV3KHJhd1dlYlZpZXdXaW5kb3cp
OworICAgIHJldHVybiByYXdXZWJWaWV3V2luZG93OworfQorCitXZWJWaWV3V2luZG93KiBNYWlu
V2luZG93OjphY3RpdmVXZWJWaWV3KCkKK3sKKyAgICBhdXRvIG51bVdlYlZpZXdzID0gbV93ZWJ2
aWV3RnJhbWUtPmNoaWxkcmVuKCkuc2l6ZSgpOworICAgIGlmIChtX2FjdGl2ZVdlYlZpZXdJbmRl
eCA+PSBudW1XZWJWaWV3cykKKyAgICAgICAgbV9hY3RpdmVXZWJWaWV3SW5kZXggPSBudW1XZWJW
aWV3cyAtIDE7CisKKyAgICBhdXRvIGl0ID0gbV93ZWJ2aWV3RnJhbWUtPmNoaWxkcmVuKCkuYmVn
aW4oKTsKKyAgICBzdGQ6OmFkdmFuY2UoaXQsIG1fYWN0aXZlV2ViVmlld0luZGV4KTsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8V2ViVmlld1dpbmRvdyo+KGl0LT5nZXQoKSk7Cit9CisKK3ZvaWQg
TWFpbldpbmRvdzo6c2V0QWN0aXZlV2ViVmlldyhXZWJWaWV3V2luZG93KiB2aWV3KQoreworICAg
IGF1dG8mIHdlYlZpZXdzID0gbV93ZWJ2aWV3RnJhbWUtPmNoaWxkcmVuKCk7CisgICAgdW5zaWdu
ZWQgaSA9IDA7CisgICAgZm9yIChhdXRvIGl0ID0gd2ViVmlld3MuYmVnaW4oKTsgaXQgIT0gd2Vi
Vmlld3MuZW5kKCk7IGl0KyssIGkrKykgeworICAgICAgICBpZiAoaXQtPmdldCgpID09IHZpZXcp
IHsKKyAgICAgICAgICAgIG1fYWN0aXZlV2ViVmlld0luZGV4ID0gaTsKKyAgICAgICAgICAgIHN0
YXRpY19jYXN0PFdlYlZpZXdXaW5kb3cqPihpdC0+Z2V0KCkpLT5zZXRBY3RpdmUodHJ1ZSk7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8V2ViVmlld1dpbmRvdyo+KGl0
LT5nZXQoKSktPnNldEFjdGl2ZShmYWxzZSk7CisgICAgfQorICAgIHVwZGF0ZVRpdGxlQmFyKCk7
CisgICAgdXBkYXRlVVJMQmFyKCk7Cit9CisKK3ZvaWQgTWFpbldpbmRvdzo6c3dpdGNoQWN0aXZl
V2ViVmlldyhpbnQgZGVsdGEpCit7CisgICAgYXV0byBudW1XZWJWaWV3cyA9IG1fd2Vidmlld0Zy
YW1lLT5jaGlsZHJlbigpLnNpemUoKTsKKyAgICB1bnNpZ25lZCBuZXdJbmRleCA9IChtX2FjdGl2
ZVdlYlZpZXdJbmRleCArIGRlbHRhICsgbnVtV2ViVmlld3MpICUgbnVtV2ViVmlld3M7CisgICAg
YXV0byBpdCA9IG1fd2Vidmlld0ZyYW1lLT5jaGlsZHJlbigpLmJlZ2luKCk7CisgICAgc3RkOjph
ZHZhbmNlKGl0LCBuZXdJbmRleCk7CisgICAgc2V0QWN0aXZlV2ViVmlldyhzdGF0aWNfY2FzdDxX
ZWJWaWV3V2luZG93Kj4oaXQtPmdldCgpKSk7Cit9CisKK3ZvaWQgTWFpbldpbmRvdzo6Y2xvc2VX
ZWJWaWV3KFdlYlZpZXdXaW5kb3cqIHZpZXcpCit7CisgICAgYXV0byYgd2ViVmlld3MgPSBtX3dl
YnZpZXdGcmFtZS0+Y2hpbGRyZW4oKTsKKyAgICB1bnNpZ25lZCBpID0gMDsKKyAgICBmb3IgKGF1
dG8gaXQgPSB3ZWJWaWV3cy5iZWdpbigpOyBpdCAhPSB3ZWJWaWV3cy5lbmQoKTsgaXQrKywgaSsr
KSB7CisgICAgICAgIGlmIChpdC0+Z2V0KCkgPT0gdmlldykgeworICAgICAgICAgICAgbV93ZWJ2
aWV3RnJhbWUtPnJlbW92ZUNoaWxkKHZpZXcpOworICAgICAgICAgICAgaWYgKG1fd2Vidmlld0Zy
YW1lLT5jaGlsZHJlbigpLmVtcHR5KCkpCisgICAgICAgICAgICAgICAgZXhpdCgwKTsKKworICAg
ICAgICAgICAgaWYgKGkgPT0gbV9hY3RpdmVXZWJWaWV3SW5kZXgpCisgICAgICAgICAgICAgICAg
c3dpdGNoQWN0aXZlV2ViVmlldygtMSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICB9Cit9CisKK2Jvb2wgTWFpbldpbmRvdzo6b25LZXlEb3duKGludDMyX3QgdmlydHVhbEtl
eUNvZGUpCit7CisgICAgc3dpdGNoICh2aXJ0dWFsS2V5Q29kZSkgeworICAgIGNhc2UgVktfTDE6
CisgICAgICAgIGFjdGl2ZVdlYlZpZXcoKS0+Z29CYWNrKCk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIGNhc2UgVktfTDI6CisgICAgICAgIHN3aXRjaEFjdGl2ZVdlYlZpZXcoLTEpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIFZLX1IxOgorICAgICAgICBhY3RpdmVXZWJWaWV3
KCktPmdvRm9yd2FyZCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIFZLX1IyOgor
ICAgICAgICBzd2l0Y2hBY3RpdmVXZWJWaWV3KDEpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBjYXNlIFZLX1IzOgorICAgICAgICBhY3RpdmVXZWJWaWV3KCktPnRvZ2dsZVpvb21GYWN0b3Io
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBWS19UUklBTkdMRToKKyAgICAgICAg
YWN0aXZlV2ViVmlldygpLT5yZWxvYWQoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBNYWluV2luZG93Ojp1cGRhdGVUaXRsZUJhcigp
Cit7CisgICAgYXV0byBudW1XZWJWaWV3cyA9IG1fd2Vidmlld0ZyYW1lLT5jaGlsZHJlbigpLnNp
emUoKTsKKyAgICBhdXRvIHRpdGxlID0gc3RkOjp0b19zdHJpbmcobV9hY3RpdmVXZWJWaWV3SW5k
ZXggKyAxKSArICIvIiArIHN0ZDo6dG9fc3RyaW5nKG51bVdlYlZpZXdzKSArICIgIiArIGFjdGl2
ZVdlYlZpZXcoKS0+dGl0bGUoKTsKKworICAgIGF1dG8gcHJvZ3Jlc3MgPSBhY3RpdmVXZWJWaWV3
KCktPnByb2dyZXNzKCk7CisgICAgbV90aXRsZUJhci0+c2V0VGl0bGUodGl0bGUpOworICAgIG1f
dGl0bGVCYXItPnNldFByb2dyZXNzKHByb2dyZXNzKTsKK30KKwordm9pZCBNYWluV2luZG93Ojp1
cGRhdGVVUkxCYXIoKQoreworICAgIG1fdXJsQmFyLT5zZXRUZXh0KGFjdGl2ZVdlYlZpZXcoKS0+
dXJsKCkuY19zdHIoKSwgRm9udFNpemUpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dz
ZXIvcGxheXN0YXRpb24vTWFpbldpbmRvdy5oIGIvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRp
b24vTWFpbldpbmRvdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2YTRiNWRhMTQxODMyNzc5MTFlNzMwMTU0M2Yx
NzZmZmRiMWFhNjcKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3Rh
dGlvbi9NYWluV2luZG93LmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgPFdlYktpdC9XS0Jhc2UuaD4KKyNpbmNsdWRlIDxsaXN0Pgor
I2luY2x1ZGUgPHRvb2xraXR0ZW4vV2lkZ2V0Lmg+CisKK2NsYXNzIFRpdGxlQmFyOworY2xhc3Mg
VVJMQmFyOworY2xhc3MgV2ViVmlld1dpbmRvdzsKKworY2xhc3MgTWFpbldpbmRvdyA6IHB1Ymxp
YyB0b29sa2l0dGVuOjpXaWRnZXQgeworcHVibGljOgorICAgIE1haW5XaW5kb3coKTsKKworICAg
IFdlYlZpZXdXaW5kb3cqIGFjdGl2ZVdlYlZpZXcoKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHBh
aW50U2VsZih0b29sa2l0dGVuOjpJbnRQb2ludCkgZmluYWw7CisgICAgYm9vbCBvbktleURvd24o
aW50MzJfdCB2aXJ0dWFsS2V5Q29kZSkgZmluYWw7CisKKyAgICB2b2lkIHVwZGF0ZVRpdGxlQmFy
KCk7CisgICAgdm9pZCB1cGRhdGVVUkxCYXIoKTsKKworICAgIFdlYlZpZXdXaW5kb3cqIGNyZWF0
ZU5ld1dlYlZpZXcoV0tQYWdlQ29uZmlndXJhdGlvblJlZik7CisgICAgdm9pZCBzZXRBY3RpdmVX
ZWJWaWV3KFdlYlZpZXdXaW5kb3cqKTsKKyAgICB2b2lkIHN3aXRjaEFjdGl2ZVdlYlZpZXcoaW50
IGRlbHRhKTsKKyAgICB2b2lkIGNsb3NlV2ViVmlldyhXZWJWaWV3V2luZG93Kik7CisKKyAgICBU
aXRsZUJhciogbV90aXRsZUJhciB7IG51bGxwdHIgfTsKKyAgICBVUkxCYXIqIG1fdXJsQmFyIHsg
bnVsbHB0ciB9OworICAgIFdpZGdldCogbV93ZWJ2aWV3RnJhbWUgeyBudWxscHRyIH07CisKKyAg
ICB1bnNpZ25lZCBtX2FjdGl2ZVdlYlZpZXdJbmRleCB7IDAgfTsKK307CmRpZmYgLS1naXQgYS9U
b29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9TdHJpbmdVdGlscy5oIGIvVG9vbHMvTWluaUJy
b3dzZXIvcGxheXN0YXRpb24vU3RyaW5nVXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNDhhZmQ3NTM0NmEw
Nzc4Y2I3ZDVhNzkyOWYzMzIzNWVlOTI3OTljCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvTWlu
aUJyb3dzZXIvcGxheXN0YXRpb24vU3RyaW5nVXRpbHMuaApAQCAtMCwwICsxLDM4IEBACisvKgor
KiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4K
KyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgPFdlYktpdC9XS1N0cmluZy5oPgorI2luY2x1ZGUgPHN0cmluZz4KKyNp
bmNsdWRlIDx2ZWN0b3I+CisKK2lubGluZSBzdGQ6OnN0cmluZyB0b1VURjhTdHJpbmcoV0tTdHJp
bmdSZWYgd2tzdHJpbmcpCit7CisgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBXS1N0cmluZ0dldE1h
eGltdW1VVEY4Q1N0cmluZ1NpemUod2tzdHJpbmcpOworICAgIHN0ZDo6dmVjdG9yPGNoYXI+IGJ1
ZmZlcihidWZmZXJTaXplKTsKKyAgICBzaXplX3Qgc2l6ZSA9IFdLU3RyaW5nR2V0VVRGOENTdHJp
bmcod2tzdHJpbmcsIGJ1ZmZlci5kYXRhKCksIGJ1ZmZlclNpemUpOworICAgIHJldHVybiBzdGQ6
OnN0cmluZyB7IGJ1ZmZlci5kYXRhKCksIHNpemUgfTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL01p
bmlCcm93c2VyL3BsYXlzdGF0aW9uL1RpdGxlQmFyLmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3Bs
YXlzdGF0aW9uL1RpdGxlQmFyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MDUyMDFlMGY2OTc1YjRmNDc5Y2M1
MjQzZmUxNjM3NjI2NzI3MmM4Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIv
cGxheXN0YXRpb24vVGl0bGVCYXIuY3BwCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgIlRpdGxlQmFyLmgiCisKK3VzaW5nIG5hbWVzcGFjZSB0b29sa2l0dGVuOwor
Cit2b2lkIFRpdGxlQmFyOjpzZXRUaXRsZShjb25zdCBzdGQ6OnN0cmluZyYgdGl0bGUpCit7Cisg
ICAgaWYgKG1fdGl0bGUgPT0gdGl0bGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fdGl0bGUg
PSB0aXRsZTsKKyAgICB1cGRhdGUoKTsKK30KKwordm9pZCBUaXRsZUJhcjo6c2V0UHJvZ3Jlc3Mo
ZG91YmxlIHByb2dyZXNzKQoreworICAgIGlmIChtX3Byb2dyZXNzID09IHByb2dyZXNzKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX3Byb2dyZXNzID0gcHJvZ3Jlc3M7CisgICAgdXBkYXRlKCk7
Cit9CisKK3ZvaWQgVGl0bGVCYXI6OnVwZGF0ZSgpCit7CisgICAgYXV0byB3aWRnZXRTaXplID0g
c2l6ZSgpOworICAgIGludCBwcm9ncmVzc1dpZHRoID0gd2lkZ2V0U2l6ZS53ICogbV9wcm9ncmVz
czsKKworICAgIEludFJlY3QgcmVjdCB7IHsgMCwgMCB9LCB3aWRnZXRTaXplIH07CisgICAgSW50
UmVjdCBwcm9ncmVzc1JlY3QgPSByZWN0OworICAgIHByb2dyZXNzUmVjdC5zaXplLncgPSBwcm9n
cmVzc1dpZHRoOworICAgIGlmICghcHJvZ3Jlc3NSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgZmls
bFJlY3QocHJvZ3Jlc3NSZWN0LCBDb2xvciB7IDAuMCwgMC4wLCAwLjUsIDEuMCB9KTsKKworICAg
IEludFJlY3QgcmVtYWluaW5nUmVjdCA9IHJlY3Q7CisgICAgcmVtYWluaW5nUmVjdC5zaXplLncg
LT0gcHJvZ3Jlc3NXaWR0aDsKKyAgICByZW1haW5pbmdSZWN0LnBvc2l0aW9uLnggKz0gcHJvZ3Jl
c3NXaWR0aDsKKyAgICBpZiAoIXJlbWFpbmluZ1JlY3QuaXNFbXB0eSgpKQorICAgICAgICBmaWxs
UmVjdChyZW1haW5pbmdSZWN0LCBDb2xvciB7IDAuMiwgMC4yLCAwLjcsIDEuMCB9KTsKKworICAg
IHN0cm9rZVJlY3QocmVjdCwgNCwgQ29sb3IgeyAwLjcsIDAuNywgMC43LCAxLjAgfSk7CisKKyAg
ICBjb25zdCBpbnQgZm9udFNpemUgPSAzMjsKKyAgICBkcmF3VGV4dChtX3RpdGxlLmNfc3RyKCks
IHsgMiwgMCB9LCBmb250U2l6ZSwgV0hJVEUpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJy
b3dzZXIvcGxheXN0YXRpb24vVGl0bGVCYXIuaCBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0
aW9uL1RpdGxlQmFyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMThjYzdkYWMzM2RlYThkNWQ1ZWY3OWFjOTRiY2Rm
NmRkODljZWE4OAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0
aW9uL1RpdGxlQmFyLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgPHRvb2xraXR0ZW4vV2lkZ2V0Lmg+CisKK2NsYXNzIFRpdGxlQmFy
IDogcHVibGljIHRvb2xraXR0ZW46OldpZGdldCB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRUaXRs
ZShjb25zdCBzdGQ6OnN0cmluZyYpOworICAgIHZvaWQgc2V0UHJvZ3Jlc3MoZG91YmxlKTsKKwor
cHJpdmF0ZToKKyAgICB2b2lkIHVwZGF0ZSgpOworCisgICAgc3RkOjpzdHJpbmcgbV90aXRsZTsK
KyAgICBkb3VibGUgbV9wcm9ncmVzcyB7IDAgfTsKK307CmRpZmYgLS1naXQgYS9Ub29scy9NaW5p
QnJvd3Nlci9wbGF5c3RhdGlvbi9Ub29sa2l0dGVuVXRpbHMuaCBiL1Rvb2xzL01pbmlCcm93c2Vy
L3BsYXlzdGF0aW9uL1Rvb2xraXR0ZW5VdGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhiN2JmODBhNjQ3NGNk
NjQxMDZhYzE4MDFkNmMyMzVlYjQ4ZWNkMjEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9NaW5p
QnJvd3Nlci9wbGF5c3RhdGlvbi9Ub29sa2l0dGVuVXRpbHMuaApAQCAtMCwwICsxLDc5IEBACisv
KgorKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IElu
Yy4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgPFdlYktpdC9XS0dlb21ldHJ5Lmg+CisjaW5jbHVkZSA8dG9vbGtp
dHRlbi9JbnRSZWN0Lmg+CisKK2lubGluZSB0b29sa2l0dGVuOjpJbnRSZWN0IHRvVEtSZWN0KFdL
UmVjdCByZWN0KQoreworICAgIHJldHVybiB7CisgICAgICAgIHRvb2xraXR0ZW46OkludFBvaW50
IHsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4ocmVjdC5vcmlnaW4ueCksCisgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQ+KHJlY3Qub3JpZ2luLnkpCisgICAgICAgIH0sCisgICAgICAg
IHRvb2xraXR0ZW46OkludFNpemUgeworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHJlY3Quc2l6ZS53aWR0aCksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVj
dC5zaXplLmhlaWdodCkKKyAgICAgICAgfQorICAgIH07Cit9CisKK2lubGluZSB0b29sa2l0dGVu
OjpJbnRQb2ludCB0b1RLUG9pbnQoV0tQb2ludCBwb2ludCkKK3sKKyAgICByZXR1cm4geworICAg
ICAgICB0b29sa2l0dGVuOjpJbnRQb2ludCB7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+
KHBvaW50LngpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pihwb2ludC55KQorICAgICAg
ICB9CisgICAgfTsKK30KKworaW5saW5lIFdLUmVjdCB0b1dLUmVjdCh0b29sa2l0dGVuOjpJbnRS
ZWN0IHJlY3QpCit7CisgICAgcmV0dXJuIFdLUmVjdE1ha2UocmVjdC5wb3NpdGlvbi54LCByZWN0
LnBvc2l0aW9uLnksIHJlY3Quc2l6ZS53LCByZWN0LnNpemUuaCk7Cit9CisKK2lubGluZSBXS1Np
emUgdG9XS1NpemUodG9vbGtpdHRlbjo6SW50U2l6ZSBzaXplKQoreworICAgIHJldHVybiBXS1Np
emVNYWtlKHNpemUudywgc2l6ZS5oKTsKK30KKworaW5saW5lIFdLUG9pbnQgdG9XS1BvaW50KHRv
b2xraXR0ZW46OkludFBvaW50IHBvaW50KQoreworICAgIHJldHVybiBXS1BvaW50TWFrZShwb2lu
dC54LCBwb2ludC55KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgV2lkZ2V0VD4KK1dpZGdldFQq
IGNyZWF0ZUFuZEFwcGVuZENoaWxkKHRvb2xraXR0ZW46OldpZGdldCogcGFyZW50LCBjb25zdCB0
b29sa2l0dGVuOjpJbnRTaXplIHNpemUsIGNvbnN0IHRvb2xraXR0ZW46OkludFBvaW50JiBwb3Np
dGlvbikKK3sKKyAgICBhdXRvIHdpZGdldCA9IHN0ZDo6bWFrZV91bmlxdWU8V2lkZ2V0VD4oKTsK
KyAgICBXaWRnZXRUKiBwdHIgPSB3aWRnZXQuZ2V0KCk7CisgICAgcHRyLT5zZXRTaXplKHNpemUp
OworICAgIHB0ci0+c2V0UG9zaXRpb24ocG9zaXRpb24pOworICAgIHBhcmVudC0+YXBwZW5kQ2hp
bGQobW92ZSh3aWRnZXQpKTsKKyAgICByZXR1cm4gcHRyOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMv
TWluaUJyb3dzZXIvcGxheXN0YXRpb24vVVJMQmFyLmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3Bs
YXlzdGF0aW9uL1VSTEJhci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjQ3MjU2ZTI1NWFiMWVhYzE5MzRmOTI3
MGZjMDgwODg1ZmE4YmFmMAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3Bs
YXlzdGF0aW9uL1VSTEJhci5jcHAKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiVVJMQmFyLmgiCisKKyNpbmNsdWRlIDxLZXlib2FyZENvZGVzLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSB0b29sa2l0dGVuOworCit2b2lkIFVSTEJhcjo6c2V0Q2xpZW50KENsaWVudCYm
IGNsaWVudCkKK3sKKyAgICBtX2NsaWVudCA9IHN0ZDo6bW92ZShjbGllbnQpOworfQorCit2b2lk
IFVSTEJhcjo6dXBkYXRlU2VsZigpCit7CisgICAgVGV4dEJveDo6dXBkYXRlU2VsZigpOworCisg
ICAgaWYgKGZvY3VzZWRXaWRnZXQoKSA9PSB0aGlzICYmIG1faW1lRGlhbG9nICYmIG1faW1lRGlh
bG9nLT5pc0ZpbmlzaGVkKCkpIHsKKyAgICAgICAgc2V0VGV4dChtX2ltZURpYWxvZy0+Z2V0SW1l
VGV4dCgpLmNfc3RyKCkpOworICAgICAgICBtX2ltZURpYWxvZy5yZXNldCgpOworICAgICAgICBp
ZiAobV9jbGllbnQub25EZWNpZGVVUkwpCisgICAgICAgICAgICBtX2NsaWVudC5vbkRlY2lkZVVS
TCh0aGlzLCBnZXRUZXh0KCkpOworICAgIH0KK30KKworYm9vbCBVUkxCYXI6Om9uTW91c2VNb3Zl
KHRvb2xraXR0ZW46OkludFBvaW50KQoreworICAgIHNldEZvY3VzZWQoKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBVUkxCYXI6Om9uS2V5RG93bihpbnQzMl90IHZpcnR1YWxLZXlDb2Rl
KQoreworICAgIHN3aXRjaCAodmlydHVhbEtleUNvZGUpIHsKKyAgICBjYXNlIFZLX1JFVFVSTjoK
KyAgICAgICAgc2V0Rm9jdXNlZCgpOworICAgICAgICBvblNlbGVjdCgpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFVSTEJhcjo6b25T
ZWxlY3QoKQoreworICAgIEVkaXRvclN0YXRlIGVkaXRvclN0YXRlOworICAgIGVkaXRvclN0YXRl
LmlucHV0VHlwZSA9IElucHV0RmllbGRUeXBlOjpVcmw7CisgICAgZWRpdG9yU3RhdGUuc3VwcG9y
dExhbmd1YWdlID0gSW5wdXRGaWVsZExhbmd1YWdlOjpFbmdsaXNoX1VzOworICAgIGVkaXRvclN0
YXRlLnRpdGxlID0gIklucHV0IFVSTCI7CisgICAgZWRpdG9yU3RhdGUudGV4dCA9IHN0ZDo6c3Ry
aW5nKGdldFRleHQoKSk7CisgICAgZWRpdG9yU3RhdGUucG9zaXRpb24gPSBnbG9iYWxQb3NpdGlv
bigpOworICAgIGVkaXRvclN0YXRlLmlzSW5Mb2dpbkZvcm0gPSBmYWxzZTsKKyAgICBtX2ltZURp
YWxvZyA9IEltZURpYWxvZzo6Y3JlYXRlKGVkaXRvclN0YXRlKTsKK30KZGlmZiAtLWdpdCBhL1Rv
b2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1VSTEJhci5oIGIvVG9vbHMvTWluaUJyb3dzZXIv
cGxheXN0YXRpb24vVVJMQmFyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmUyNDUwY2ZhZWMwNGU0M2ZlMzlkN2Vi
M2RmYjIwMmJlY2Q1ZjYxOAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3Bs
YXlzdGF0aW9uL1VSTEJhci5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlIDx0b29sa2l0dGVuL0ltZURpYWxvZy5oPgorI2luY2x1ZGUg
PHRvb2xraXR0ZW4vVGV4dEJveC5oPgorCitjbGFzcyBVUkxCYXIgOiBwdWJsaWMgdG9vbGtpdHRl
bjo6VGV4dEJveCB7CitwdWJsaWM6CisgICAgc3RydWN0IENsaWVudCB7CisgICAgICAgIHN0ZDo6
ZnVuY3Rpb248dm9pZChVUkxCYXIqLCBjb25zdCBjaGFyKik+IG9uRGVjaWRlVVJMOworICAgIH07
CisKKyAgICB2b2lkIHNldENsaWVudChDbGllbnQmJik7CisKK3ByaXZhdGU6CisgICAgdm9pZCB1
cGRhdGVTZWxmKCkgZmluYWw7CisgICAgYm9vbCBvbk1vdXNlTW92ZSh0b29sa2l0dGVuOjpJbnRQ
b2ludCkgZmluYWw7CisgICAgYm9vbCBvbktleURvd24oaW50MzJfdCB2aXJ0dWFsS2V5Q29kZSkg
ZmluYWw7CisgICAgdm9pZCBvblNlbGVjdCgpOworCisgICAgQ2xpZW50IG1fY2xpZW50OworICAg
IHN0ZDo6dW5pcXVlX3B0cjx0b29sa2l0dGVuOjpJbWVEaWFsb2c+IG1faW1lRGlhbG9nOworfTsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1dlYkNvbnRleHQuY3Bw
IGIvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRpb24vV2ViQ29udGV4dC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYjlkMTM1MGUwNGNjMGUwNDVlYTc0ZmUwODk0YmJhYTkzNTA1ZTQ4YQotLS0gL2Rldi9udWxs
CisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1dlYkNvbnRleHQuY3BwCkBAIC0w
LDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBF
bnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKKwor
I2luY2x1ZGUgIlN0cmluZ1V0aWxzLmgiCisjaW5jbHVkZSA8V2ViS2l0L1dLQ29udGV4dENvbmZp
Z3VyYXRpb25QbGF5U3RhdGlvbi5oPgorI2luY2x1ZGUgPFdlYktpdC9XS0NvbnRleHRQcml2YXRl
Lmg+CisjaW5jbHVkZSA8V2ViS2l0L1dLUHJlZmVyZW5jZXNSZWYuaD4KKyNpbmNsdWRlIDxXZWJL
aXQvV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaD4KKyNpbmNsdWRlIDxXZWJLaXQvV0tXZWJzaXRl
RGF0YVN0b3JlQ29uZmlndXJhdGlvblJlZi5oPgorI2luY2x1ZGUgPFdlYktpdC9XS1dlYnNpdGVE
YXRhU3RvcmVSZWYuaD4KKyNpbmNsdWRlIDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUmVmQ3Vy
bC5oPgorCisjZGVmaW5lIE1BS0VfUFJPQ0VTU19QQVRIKHgpICIvYXBwMC8iICN4ICIuc2VsZiIK
Kworc3RkOjp3ZWFrX3B0cjxXZWJDb250ZXh0PiBXZWJDb250ZXh0OjpzX2luc3RhbmNlOworCitz
dGQ6OnNoYXJlZF9wdHI8V2ViQ29udGV4dD4gV2ViQ29udGV4dDo6c2luZ2xldG9uKCkKK3sKKyAg
ICBhdXRvIHJldCA9IHNfaW5zdGFuY2UubG9jaygpOworICAgIGlmICghcmV0KSB7CisgICAgICAg
IHJldCA9IHN0ZDo6c2hhcmVkX3B0cjxXZWJDb250ZXh0PihuZXcgV2ViQ29udGV4dCgpKTsKKyAg
ICAgICAgc19pbnN0YW5jZSA9IHJldDsKKyAgICB9CisgICAgcmV0dXJuIHNfaW5zdGFuY2UubG9j
aygpOworfQorCitXZWJDb250ZXh0OjpXZWJDb250ZXh0KCkKK3sKKyAgICBXS1JldGFpblB0cjxX
S0NvbnRleHRDb25maWd1cmF0aW9uUmVmPiBjb250ZXh0Q29uZmlndXJhdGlvbiA9IGFkb3B0V0so
V0tDb250ZXh0Q29uZmlndXJhdGlvbkNyZWF0ZSgpKTsKKyAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gd2ViUHJvY2Vzc1BhdGggPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKE1BS0VfUFJPQ0VTU19QQVRIKFdlYlByb2Nlc3MpKSk7CisgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG5ldHdvcmtQcm9jZXNzUGF0aCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoTUFLRV9QUk9DRVNTX1BBVEgoTmV0d29ya1Byb2Nlc3MpKSk7CisgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGxvY2FsU3RvcmFnZVBhdGggPSBhZG9wdFdLKFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCIvZGF0YS9taW5pYnJvd3Nlci9sb2NhbCIpKTsKKyAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVkaWFLZXlQYXRoID0gYWRvcHRXSyhXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZygiL2RhdGEvbWluaWJyb3dzZXIvbWVpZGFrZXkiKSk7CisgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXRoID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiL2RhdGEvbWluaWJyb3dzZXIvUmVz
b3VyY2VMb2FkU3RhdGlzdGljcyIpKTsKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmV0
d29ya0NhY2hlUGF0aCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIi9k
YXRhL21pbmlicm93c2VyL05ldHdvcmtDYWNoZSIpKTsKKworICAgIFdLQ29udGV4dENvbmZpZ3Vy
YXRpb25TZXRVc2VySWQoY29udGV4dENvbmZpZ3VyYXRpb24uZ2V0KCksIC0xKTsKKyAgICBXS0Nv
bnRleHRDb25maWd1cmF0aW9uU2V0V2ViUHJvY2Vzc1BhdGgoY29udGV4dENvbmZpZ3VyYXRpb24u
Z2V0KCksIHdlYlByb2Nlc3NQYXRoLmdldCgpKTsKKyAgICBXS0NvbnRleHRDb25maWd1cmF0aW9u
U2V0TmV0d29ya1Byb2Nlc3NQYXRoKGNvbnRleHRDb25maWd1cmF0aW9uLmdldCgpLCBuZXR3b3Jr
UHJvY2Vzc1BhdGguZ2V0KCkpOworCisgICAgYXV0byBkYXRhU3RvcmVDb25maWd1cmF0aW9uID0g
YWRvcHRXSyhXS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uQ3JlYXRlKCkpOworICAgIFdL
V2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb25TZXRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoZGF0
YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKSwgbG9jYWxTdG9yYWdlUGF0aC5nZXQoKSk7CisgICAg
V0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvblNldE1lZGlhS2V5c1N0b3JhZ2VEaXJlY3Rv
cnkoZGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKSwgbWVkaWFLZXlQYXRoLmdldCgpKTsKKyAg
ICBXS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uU2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RpcmVjdG9yeShkYXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpLCByZXNvdXJjZUxvYWRTdGF0
aXN0aWNzUGF0aC5nZXQoKSk7CisgICAgV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvblNl
dE5ldHdvcmtDYWNoZURpcmVjdG9yeShkYXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpLCBuZXR3
b3JrQ2FjaGVQYXRoLmdldCgpKTsKKyAgICBXS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9u
U2V0TmV0d29ya0NhY2hlU3BlY3VsYXRpdmVWYWxpZGF0aW9uRW5hYmxlZChkYXRhU3RvcmVDb25m
aWd1cmF0aW9uLmdldCgpLCB0cnVlKTsKKyAgICBXS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0
aW9uU2V0U3RhbGVXaGlsZVJldmFsaWRhdGVFbmFibGVkKGRhdGFTdG9yZUNvbmZpZ3VyYXRpb24u
Z2V0KCksIHRydWUpOworICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdLV2Vic2l0ZURhdGFTdG9y
ZUNyZWF0ZVdpdGhDb25maWd1cmF0aW9uKGRhdGFTdG9yZUNvbmZpZ3VyYXRpb24uZ2V0KCkpOwor
CisgICAgbV9jb250ZXh0ID0gYWRvcHRXSyhXS0NvbnRleHRDcmVhdGVXaXRoQ29uZmlndXJhdGlv
bihjb250ZXh0Q29uZmlndXJhdGlvbi5nZXQoKSkpOworICAgIFdLQ29udGV4dFNldFByaW1hcnlX
ZWJzaXRlRGF0YVN0b3JlKG1fY29udGV4dC5nZXQoKSwgbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgp
KTsKKyAgICBXS0NvbnRleHRTZXRVc2VzU2luZ2xlV2ViUHJvY2VzcyhtX2NvbnRleHQuZ2V0KCks
IHRydWUpOworCisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGdyb3VwTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkRlZmF1bHQiKSk7CisgICAgbV9wYWdl
R3JvdXAgPSBhZG9wdFdLKFdLUGFnZUdyb3VwQ3JlYXRlV2l0aElkZW50aWZpZXIoZ3JvdXBOYW1l
LmdldCgpKSk7CisKKyAgICBtX3ByZWZlcmVuY2VzTWFzdGVyID0gYWRvcHRXSyhXS1ByZWZlcmVu
Y2VzQ3JlYXRlKCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRGdWxsU2NyZWVuRW5hYmxlZChtX3By
ZWZlcmVuY2VzTWFzdGVyLmdldCgpLCB0cnVlKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0RE5TUHJl
ZmV0Y2hpbmdFbmFibGVkKG1fcHJlZmVyZW5jZXNNYXN0ZXIuZ2V0KCksIHRydWUpOworICAgIFdL
UHJlZmVyZW5jZXNTZXROZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyhtX3ByZWZlcmVuY2VzTWFzdGVy
LmdldCgpLCBmYWxzZSk7Cit9CisKK1dlYkNvbnRleHQ6On5XZWJDb250ZXh0KCkKK3sKK30KKwor
dm9pZCBXZWJDb250ZXh0OjphZGRXaW5kb3coV2ViVmlld1dpbmRvdyogd2luZG93KQoreworICAg
IG1fd2luZG93cy5wdXNoX2JhY2sod2luZG93KTsKK30KKwordm9pZCBXZWJDb250ZXh0OjpyZW1v
dmVXaW5kb3coV2ViVmlld1dpbmRvdyogd2luZG93KQoreworICAgIG1fd2luZG93cy5yZW1vdmUo
d2luZG93KTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1dl
YkNvbnRleHQuaCBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1dlYkNvbnRleHQuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi42YzAzYzIxZjMxZDIyMTBlYjg5MWZiMTFjM2M4NDE3NGU5NjU5NWY0Ci0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRpb24vV2ViQ29udGV4dC5o
CkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFj
dGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlIDxXZWJLaXQvV0tDb250ZXh0Lmg+CisjaW5jbHVkZSA8V2ViS2l0L1dLUGFnZUNvbmZpZ3Vy
YXRpb25SZWYuaD4KKyNpbmNsdWRlIDxXZWJLaXQvV0tQYWdlR3JvdXAuaD4KKyNpbmNsdWRlIDxX
ZWJLaXQvV0tSZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDxsaXN0PgorCitjbGFzcyBXZWJWaWV3V2lu
ZG93OworCitjbGFzcyBXZWJDb250ZXh0IHsKK3Byb3RlY3RlZDoKKyAgICBXZWJDb250ZXh0KCk7
CitwdWJsaWM6CisgICAgfldlYkNvbnRleHQoKTsKKyAgICBzdGF0aWMgc3RkOjpzaGFyZWRfcHRy
PFdlYkNvbnRleHQ+IHNpbmdsZXRvbigpOworCisgICAgV0tDb250ZXh0UmVmIGNvbnRleHQoKSB7
IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KKyAgICBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXAo
KSB7IHJldHVybiBtX3BhZ2VHcm91cC5nZXQoKTsgfQorICAgIFdLUHJlZmVyZW5jZXNSZWYgcHJl
ZmVyZW5jZXMoKSB7IHJldHVybiBtX3ByZWZlcmVuY2VzTWFzdGVyLmdldCgpOyB9CisgICAgV0tX
ZWJzaXRlRGF0YVN0b3JlUmVmIHdlYnNpdGVEYXRhU3RvcmUoKSB7IHJldHVybiBtX3dlYnNpdGVE
YXRhU3RvcmUuZ2V0KCk7IH0KKworICAgIHZvaWQgYWRkV2luZG93KFdlYlZpZXdXaW5kb3cqKTsK
KyAgICB2b2lkIHJlbW92ZVdpbmRvdyhXZWJWaWV3V2luZG93Kik7CisKK3ByaXZhdGU6CisgICAg
c3RhdGljIHN0ZDo6d2Vha19wdHI8V2ViQ29udGV4dD4gc19pbnN0YW5jZTsKKyAgICBXS1JldGFp
blB0cjxXS0NvbnRleHRSZWY+IG1fY29udGV4dDsKKyAgICBXS1JldGFpblB0cjxXS1BhZ2VHcm91
cFJlZj4gbV9wYWdlR3JvdXA7CisgICAgV0tSZXRhaW5QdHI8V0tQcmVmZXJlbmNlc1JlZj4gbV9w
cmVmZXJlbmNlc01hc3RlcjsKKyAgICBXS1JldGFpblB0cjxXS1dlYnNpdGVEYXRhU3RvcmVSZWY+
IG1fd2Vic2l0ZURhdGFTdG9yZTsKKyAgICBzdGQ6Omxpc3Q8V2ViVmlld1dpbmRvdyo+IG1fd2lu
ZG93czsKK307CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9XZWJW
aWV3V2luZG93LmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1dlYlZpZXdXaW5k
b3cuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmNmNmEwZGU5N2JmZTg0MTYyMWEwZWMwZGZiMWIyNzcxMzJiYmNk
MzMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9XZWJW
aWV3V2luZG93LmNwcApAQCAtMCwwICsxLDQzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiV2ViVmlld1dpbmRvdy5oIgorCisjaW5jbHVkZSAiTWFpbldpbmRvdy5oIgorI2luY2x1ZGUg
IlN0cmluZ1V0aWxzLmgiCisjaW5jbHVkZSAiVG9vbGtpdHRlblV0aWxzLmgiCisjaW5jbHVkZSA8
S2V5Ym9hcmRFdmVudHMuaD4KKyNpbmNsdWRlIDxXZWJLaXQvV0tQYWdlLmg+CisjaW5jbHVkZSA8
V2ViS2l0L1dLUGFnZVByaXZhdGVQbGF5U3RhdGlvbi5oPgorI2luY2x1ZGUgPFdlYktpdC9XS1By
ZWZlcmVuY2VzUmVmLmg+CisjaW5jbHVkZSA8V2ViS2l0L1dLUHJlZmVyZW5jZXNSZWZQcml2YXRl
Lmg+CisjaW5jbHVkZSA8V2ViS2l0L1dLVVJMLmg+CisjaW5jbHVkZSA8Y2Fpcm8vY2Fpcm8uaD4K
KyNpbmNsdWRlIDxtYXA+CisjaW5jbHVkZSA8dG9vbGtpdHRlbi9BcHBsaWNhdGlvbi5oPgorI2lu
Y2x1ZGUgPHRvb2xraXR0ZW4vQ3Vyc29yLmg+CisjaW5jbHVkZSA8dG9vbGtpdHRlbi9NZXNzYWdl
RGlhbG9nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSB0b29sa2l0dGVuOworCitpbmxpbmUgV2ViVmll
d1dpbmRvdyogdG9XZWJWaWV3KGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgcmV0dXJu
IGNvbnN0X2Nhc3Q8V2ViVmlld1dpbmRvdyo+KHN0YXRpY19jYXN0PGNvbnN0IFdlYlZpZXdXaW5k
b3cqPihjbGllbnRJbmZvKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldEN1cnNvcihXS0N1cnNvclR5
cGUgY3Vyc29yVHlwZSkKK3sKKyAgICBzd2l0Y2ggKGN1cnNvclR5cGUpIHsKKyAgICBjYXNlIGtX
S0N1cnNvclR5cGVIYW5kOgorICAgICAgICBDdXJzb3I6OnNpbmdsZXRvbigpLnNldFR5cGUoQ3Vy
c29yOjprVHlwZUhhbmQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGtXS0N1cnNvclR5cGVQ
b2ludGVyOgorICAgIGRlZmF1bHQ6CisgICAgICAgIEN1cnNvcjo6c2luZ2xldG9uKCkuc2V0VHlw
ZShDdXJzb3I6OmtUeXBlUG9pbnRlcik7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3Rk
Ojp1bmlxdWVfcHRyPFdlYlZpZXdXaW5kb3c+IFdlYlZpZXdXaW5kb3c6OmNyZWF0ZShDbGllbnQm
JiB3aW5kb3dDbGllbnQsIFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYgY29uZmlndXJhdGlvblJlZikK
K3sKKyAgICBhdXRvIGNvbnRleHQgPSBXZWJDb250ZXh0OjpzaW5nbGV0b24oKTsKKworICAgIGlm
IChjb25maWd1cmF0aW9uUmVmKQorICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxXZWJW
aWV3V2luZG93Pihjb25maWd1cmF0aW9uUmVmLCBzdGQ6Om1vdmUod2luZG93Q2xpZW50KSk7CisK
KyAgICBXS1JldGFpblB0cjxXS1BhZ2VDb25maWd1cmF0aW9uUmVmPiBjb25maWd1cmF0aW9uID0g
YWRvcHRXSyhXS1BhZ2VDb25maWd1cmF0aW9uQ3JlYXRlKCkpOworICAgIFdLUGFnZUNvbmZpZ3Vy
YXRpb25TZXRDb250ZXh0KGNvbmZpZ3VyYXRpb24uZ2V0KCksIGNvbnRleHQtPmNvbnRleHQoKSk7
CisgICAgV0tQYWdlQ29uZmlndXJhdGlvblNldFBhZ2VHcm91cChjb25maWd1cmF0aW9uLmdldCgp
LCBjb250ZXh0LT5wYWdlR3JvdXAoKSk7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8V2Vi
Vmlld1dpbmRvdz4oY29uZmlndXJhdGlvbi5nZXQoKSwgc3RkOjptb3ZlKHdpbmRvd0NsaWVudCkp
OworfQorCitXZWJWaWV3V2luZG93OjpXZWJWaWV3V2luZG93KFdLUGFnZUNvbmZpZ3VyYXRpb25S
ZWYgY29uZmlndXJhdGlvbiwgQ2xpZW50JiYgd2luZG93Q2xpZW50KQorICAgIDogbV9jbGllbnQo
c3RkOjptb3ZlKHdpbmRvd0NsaWVudCkpCit7CisgICAgLy8gRklYTUU6IFNob3VsZCBjaGlsZCBz
aGFyZSB0aGUgcHJlZmVyZW5jZSB3aXRoIHBhcmVudD8KKyAgICBtX2NvbnRleHQgPSBXZWJDb250
ZXh0OjpzaW5nbGV0b24oKTsKKyAgICBtX3ByZWZlcmVuY2VzID0gV0tQcmVmZXJlbmNlc0NyZWF0
ZUNvcHkobV9jb250ZXh0LT5wcmVmZXJlbmNlcygpKTsKKyAgICBXS1BhZ2VDb25maWd1cmF0aW9u
U2V0UHJlZmVyZW5jZXMoY29uZmlndXJhdGlvbiwgbV9wcmVmZXJlbmNlcy5nZXQoKSk7CisKKyAg
ICBXS1ByZWZlcmVuY2VzU2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQobV9wcmVmZXJl
bmNlcy5nZXQoKSwgZmFsc2UpOworICAgIFdLUHJlZmVyZW5jZXNTZXRGdWxsU2NyZWVuRW5hYmxl
ZChtX3ByZWZlcmVuY2VzLmdldCgpLCB0cnVlKTsKKworICAgIG1fdmlldyA9IFdLVmlld0NyZWF0
ZShjb25maWd1cmF0aW9uKTsKKyAgICBtX2NvbnRleHQtPmFkZFdpbmRvdyh0aGlzKTsKKworICAg
IFdLVmlld0NsaWVudFYwIHZpZXdDbGllbnQgeworICAgICAgICB7IDAsIHRoaXMgfSwKKworICAg
ICAgICAvLyBzZXRWaWV3TmVlZHNEaXNwbGF5CisgICAgICAgIFtdKFdLVmlld1JlZiwgV0tSZWN0
IHJlY3QsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pIHsKKyAgICAgICAgICAgIHRvV2ViVmlldyhj
bGllbnRJbmZvKS0+dXBkYXRlU3VyZmFjZSh0b1RLUmVjdChyZWN0KSk7CisgICAgICAgIH0sCisK
KyAgICAgICAgLy8gZW50ZXJGdWxsU2NyZWVuCisgICAgICAgIFtdKFdLVmlld1JlZiB2aWV3LCBj
b25zdCB2b2lkKikgeworICAgICAgICAgICAgV0tWaWV3V2lsbEVudGVyRnVsbFNjcmVlbih2aWV3
KTsKKyAgICAgICAgICAgIFdLVmlld0RpZEVudGVyRnVsbFNjcmVlbih2aWV3KTsKKyAgICAgICAg
fSwKKyAgICAgICAgLy8gZXhpdEZ1bGxTY3JlZW4KKyAgICAgICAgW10oV0tWaWV3UmVmIHZpZXcs
IGNvbnN0IHZvaWQqKSB7CisgICAgICAgICAgICBXS1ZpZXdXaWxsRXhpdEZ1bGxTY3JlZW4odmll
dyk7CisgICAgICAgICAgICBXS1ZpZXdEaWRFeGl0RnVsbFNjcmVlbih2aWV3KTsKKyAgICAgICAg
fSwKKyAgICAgICAgbnVsbHB0ciwgLy8gY2xvc2VGdWxsU2NyZWVuCisgICAgICAgIG51bGxwdHIs
IC8vIGJlZ2FuRW50ZXJGdWxsU2NyZWVuCisgICAgICAgIG51bGxwdHIsIC8vIGJlZ2FuRXhpdEZ1
bGxTY3JlZW4KKworICAgICAgICAvLyBzZXRDdXJzb3IKKyAgICAgICAgW10oV0tWaWV3UmVmLCBX
S0N1cnNvclR5cGUgY3Vyc29yVHlwZSwgY29uc3Qgdm9pZCopIHsKKyAgICAgICAgICAgIHNldEN1
cnNvcihjdXJzb3JUeXBlKTsKKyAgICAgICAgfQorICAgIH07CisgICAgV0tWaWV3U2V0Vmlld0Ns
aWVudChtX3ZpZXcuZ2V0KCksICZ2aWV3Q2xpZW50LmJhc2UpOworCisgICAgV0tQYWdlU3RhdGVD
bGllbnRWMCBwYWdlU3RhdGVDbGllbnQgeworICAgICAgICB7IDAsIHRoaXMgfSwKKworICAgICAg
ICBudWxscHRyLCAvLyB3aWxsQ2hhbmdlSXNMb2FkaW5nCisgICAgICAgIG51bGxwdHIsIC8vIGRp
ZENoYW5nZUlzTG9hZGluZworICAgICAgICBudWxscHRyLCAvLyB3aWxsQ2hhbmdlVGl0bGUKKyAg
ICAgICAgLy8gZGlkQ2hhbmdlVGl0bGUKKyAgICAgICAgW10oY29uc3Qgdm9pZCogY2xpZW50SW5m
bykgeworICAgICAgICAgICAgdG9XZWJWaWV3KGNsaWVudEluZm8pLT51cGRhdGVUaXRsZSgpOwor
ICAgICAgICB9LAorICAgICAgICBudWxscHRyLCAvLyB3aWxsQ2hhbmdlQWN0aXZlVVJMCisgICAg
ICAgIC8vIGRpZENoYW5nZUFjdGl2ZVVSTAorICAgICAgICBbXShjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKSB7CisgICAgICAgICAgICB0b1dlYlZpZXcoY2xpZW50SW5mbyktPnVwZGF0ZVVSTCgpOwor
ICAgICAgICB9LAorICAgICAgICBudWxscHRyLCAvLyB3aWxsQ2hhbmdlSGFzT25seVNlY3VyZUNv
bnRlbnQKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkQ2hhbmdlSGFzT25seVNlY3VyZUNvbnRlbnQK
KyAgICAgICAgbnVsbHB0ciwgLy8gd2lsbENoYW5nZUVzdGltYXRlZFByb2dyZXNzCisgICAgICAg
IC8vIGRpZENoYW5nZUVzdGltYXRlZFByb2dyZXNzCisgICAgICAgIFtdKGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pIHsKKyAgICAgICAgICAgIHRvV2ViVmlldyhjbGllbnRJbmZvKS0+dXBkYXRlUHJv
Z3Jlc3MoKTsKKyAgICAgICAgfSwKKyAgICAgICAgbnVsbHB0ciwgLy8gd2lsbENoYW5nZUNhbkdv
QmFjaworICAgICAgICBudWxscHRyLCAvLyBkaWRDaGFuZ2VDYW5Hb0JhY2sKKyAgICAgICAgbnVs
bHB0ciwgLy8gd2lsbENoYW5nZUNhbkdvRm9yd2FyZAorICAgICAgICBudWxscHRyLCAvLyBkaWRD
aGFuZ2VDYW5Hb0ZvcndhcmQKKyAgICAgICAgbnVsbHB0ciwgLy8gd2lsbENoYW5nZU5ldHdvcmtS
ZXF1ZXN0c0luUHJvZ3Jlc3MKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkQ2hhbmdlTmV0d29ya1Jl
cXVlc3RzSW5Qcm9ncmVzcworICAgICAgICBudWxscHRyLCAvLyB3aWxsQ2hhbmdlQ2VydGlmaWNh
dGVJbmZvCisgICAgICAgIG51bGxwdHIsIC8vIGRpZENoYW5nZUNlcnRpZmljYXRlSW5mbworICAg
ICAgICBudWxscHRyLCAvLyB3aWxsQ2hhbmdlV2ViUHJvY2Vzc0lzUmVzcG9uc2l2ZQorICAgICAg
ICBudWxscHRyLCAvLyBkaWRDaGFuZ2VXZWJQcm9jZXNzSXNSZXNwb25zaXZlCisgICAgICAgIG51
bGxwdHIsIC8vIGRpZFN3YXBXZWJQcm9jZXNzZXMKKyAgICB9OworICAgIFdLUGFnZVNldFBhZ2VT
dGF0ZUNsaWVudChwYWdlKCksICZwYWdlU3RhdGVDbGllbnQuYmFzZSk7CisKKyAgICBXS1BhZ2VV
SUNsaWVudFY2IHVpQ2xpZW50IHsKKyAgICAgICAgeyA2LCB0aGlzIH0sCisgICAgICAgIG51bGxw
dHIsIC8vIGNyZWF0ZU5ld1BhZ2VfZGVwcmVjYXRlZEZvclVzZVdpdGhWMAorICAgICAgICBudWxs
cHRyLCAvLyBzaG93UGFnZQorICAgICAgICBudWxscHRyLCAvLyBjbG9zZQorICAgICAgICBudWxs
cHRyLCAvLyB0YWtlRm9jdXMKKyAgICAgICAgbnVsbHB0ciwgLy8gZm9jdXMKKyAgICAgICAgbnVs
bHB0ciwgLy8gdW5mb2N1cworICAgICAgICBudWxscHRyLCAvLyBydW5KYXZhU2NyaXB0QWxlcnRf
ZGVwcmVjYXRlZEZvclVzZVdpdGhWMAorICAgICAgICBudWxscHRyLCAvLyBydW5KYXZhU2NyaXB0
Q29uZmlybV9kZXByZWNhdGVkRm9yVXNlV2l0aFYwCisgICAgICAgIG51bGxwdHIsIC8vIHJ1bkph
dmFTY3JpcHRQcm9tcHRfZGVwcmVjYXRlZEZvclVzZVdpdGhWMAorICAgICAgICBudWxscHRyLCAv
LyBzZXRTdGF0dXNUZXh0CisgICAgICAgIG51bGxwdHIsIC8vIG1vdXNlRGlkTW92ZU92ZXJFbGVt
ZW50X2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjAKKyAgICAgICAgbnVsbHB0ciwgLy8gbWlzc2luZ1Bs
dWdpbkJ1dHRvbkNsaWNrZWRfZGVwcmVjYXRlZEZvclVzZVdpdGhWMAorICAgICAgICBudWxscHRy
LCAvLyBkaWROb3RIYW5kbGVLZXlFdmVudAorICAgICAgICBudWxscHRyLCAvLyBkaWROb3RIYW5k
bGVXaGVlbEV2ZW50CisgICAgICAgIG51bGxwdHIsIC8vIHRvb2xiYXJzQXJlVmlzaWJsZQorICAg
ICAgICBudWxscHRyLCAvLyBzZXRUb29sYmFyc0FyZVZpc2libGUKKyAgICAgICAgbnVsbHB0ciwg
Ly8gbWVudUJhcklzVmlzaWJsZQorICAgICAgICBudWxscHRyLCAvLyBzZXRNZW51QmFySXNWaXNp
YmxlCisgICAgICAgIG51bGxwdHIsIC8vIHN0YXR1c0JhcklzVmlzaWJsZQorICAgICAgICBudWxs
cHRyLCAvLyBzZXRTdGF0dXNCYXJJc1Zpc2libGUKKyAgICAgICAgbnVsbHB0ciwgLy8gaXNSZXNp
emFibGUKKyAgICAgICAgbnVsbHB0ciwgLy8gc2V0SXNSZXNpemFibGUKKyAgICAgICAgbnVsbHB0
ciwgLy8gZ2V0V2luZG93RnJhbWUKKyAgICAgICAgbnVsbHB0ciwgLy8gc2V0V2luZG93RnJhbWUK
KyAgICAgICAgbnVsbHB0ciwgLy8gcnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsCisgICAgICAg
IG51bGxwdHIsIC8vIGRpZERyYXcKKyAgICAgICAgbnVsbHB0ciwgLy8gcGFnZURpZFNjcm9sbAor
ICAgICAgICBudWxscHRyLCAvLyBleGNlZWRlZERhdGFiYXNlUXVvdGEKKyAgICAgICAgbnVsbHB0
ciwgLy8gcnVuT3BlblBhbmVsCisgICAgICAgIG51bGxwdHIsIC8vIGRlY2lkZVBvbGljeUZvckdl
b2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QKKyAgICAgICAgbnVsbHB0ciwgLy8gaGVhZGVySGVp
Z2h0CisgICAgICAgIG51bGxwdHIsIC8vIGZvb3RlckhlaWdodAorICAgICAgICBudWxscHRyLCAv
LyBkcmF3SGVhZGVyCisgICAgICAgIG51bGxwdHIsIC8vIGRyYXdGb290ZXIKKyAgICAgICAgbnVs
bHB0ciwgLy8gcHJpbnRGcmFtZQorICAgICAgICBudWxscHRyLCAvLyBydW5Nb2RhbAorICAgICAg
ICBudWxscHRyLCAvLyBVc2VkIHRvIGJlIGRpZENvbXBsZXRlUnViYmVyQmFuZEZvck1haW5GcmFt
ZQorICAgICAgICBudWxscHRyLCAvLyBzYXZlRGF0YVRvRmlsZUluRG93bmxvYWRzRm9sZGVyCisg
ICAgICAgIG51bGxwdHIsIC8vIHNob3VsZEludGVycnVwdEphdmFTY3JpcHRfdW5hdmFpbGFibGUK
KyAgICAgICAgbnVsbHB0ciwgLy8gY3JlYXRlTmV3UGFnZV9kZXByZWNhdGVkRm9yVXNlV2l0aFYx
CisgICAgICAgIG51bGxwdHIsIC8vIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50CisgICAgICAgIG51
bGxwdHIsIC8vIGRlY2lkZVBvbGljeUZvck5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0Cisg
ICAgICAgIG51bGxwdHIsIC8vIHVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZF9kZXByZWNh
dGVkRm9yVXNlV2l0aFYxCisgICAgICAgIG51bGxwdHIsIC8vIHNob3dDb2xvclBpY2tlcgorICAg
ICAgICBudWxscHRyLCAvLyBoaWRlQ29sb3JQaWNrZXIKKyAgICAgICAgbnVsbHB0ciwgLy8gdW5h
dmFpbGFibGVQbHVnaW5CdXR0b25DbGlja2VkCisgICAgICAgIG51bGxwdHIsIC8vIHBpbm5lZFN0
YXRlRGlkQ2hhbmdlCisgICAgICAgIG51bGxwdHIsIC8vIFVzZWQgdG8gYmUgZGlkQmVnaW5UcmFj
a2luZ1BvdGVudGlhbExvbmdNb3VzZVByZXNzCisgICAgICAgIG51bGxwdHIsIC8vIFVzZWQgdG8g
YmUgZGlkUmVjb2duaXplTG9uZ01vdXNlUHJlc3MKKyAgICAgICAgbnVsbHB0ciwgLy8gVXNlZCB0
byBiZSBkaWRDYW5jZWxUcmFja2luZ1BvdGVudGlhbExvbmdNb3VzZVByZXNzCisgICAgICAgIG51
bGxwdHIsIC8vIGlzUGxheWluZ0F1ZGlvRGlkQ2hhbmdlCisgICAgICAgIG51bGxwdHIsIC8vIGRl
Y2lkZVBvbGljeUZvclVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0CisgICAgICAgIG51bGxwdHIs
IC8vIGRpZENsaWNrQXV0b0ZpbGxCdXR0b24KKyAgICAgICAgbnVsbHB0ciwgLy8gcnVuSmF2YVNj
cmlwdEFsZXJ0X2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjUKKyAgICAgICAgbnVsbHB0ciwgLy8gcnVu
SmF2YVNjcmlwdENvbmZpcm1fZGVwcmVjYXRlZEZvclVzZVdpdGhWNQorICAgICAgICBudWxscHRy
LCAvLyBydW5KYXZhU2NyaXB0UHJvbXB0X2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjUKKyAgICAgICAg
bnVsbHB0ciwgLy8gbWVkaWFTZXNzaW9uTWV0YWRhdGFEaWRDaGFuZ2UKKyAgICAgICAgLy8gY3Jl
YXRlTmV3UGFnZQorICAgICAgICBbXShXS1BhZ2VSZWYgcGFnZSwgV0tQYWdlQ29uZmlndXJhdGlv
blJlZiBjb25maWd1cmF0aW9uLCBXS05hdmlnYXRpb25BY3Rpb25SZWYsIFdLV2luZG93RmVhdHVy
ZXNSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pIC0+V0tQYWdlUmVmIHsKKyAgICAgICAgICAg
IHJldHVybiB0b1dlYlZpZXcoY2xpZW50SW5mbyktPmNyZWF0ZU5ld1BhZ2UocGFnZSwgY29uZmln
dXJhdGlvbik7CisgICAgICAgIH0sCisgICAgICAgIG51bGxwdHIsIC8vIHJ1bkphdmFTY3JpcHRB
bGVydAorICAgICAgICBudWxscHRyLCAvLyBydW5KYXZhU2NyaXB0Q29uZmlybQorICAgICAgICBu
dWxscHRyLCAvLyBydW5KYXZhU2NyaXB0UHJvbXB0CisgICAgICAgIG51bGxwdHIgLy8gY2hlY2tV
c2VyTWVkaWFQZXJtaXNzaW9uRm9yT3JpZ2luCisgICAgfTsKKyAgICBXS1BhZ2VTZXRQYWdlVUlD
bGllbnQocGFnZSgpLCAmdWlDbGllbnQuYmFzZSk7Cit9CisKK1dlYlZpZXdXaW5kb3c6On5XZWJW
aWV3V2luZG93KCkKK3sKKyAgICBtX2NvbnRleHQtPnJlbW92ZVdpbmRvdyh0aGlzKTsKKyAgICBX
S1BhZ2VDbG9zZShwYWdlKCkpOworfQorCitXS1BhZ2VSZWYgV2ViVmlld1dpbmRvdzo6cGFnZSgp
Cit7CisgICAgcmV0dXJuIFdLVmlld0dldFBhZ2UobV92aWV3LmdldCgpKTsKK30KKwordm9pZCBX
ZWJWaWV3V2luZG93Ojpsb2FkVVJMKGNvbnN0IGNoYXIqIHVybCkKK3sKKyAgICBXS1JldGFpblB0
cjxXS1VSTFJlZj4gdXJsU3RyID0gYWRvcHRXSyhXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0cmluZyh1
cmwpKTsKKyAgICBXS1BhZ2VMb2FkVVJMKHBhZ2UoKSwgdXJsU3RyLmdldCgpKTsKK30KKwordm9p
ZCBXZWJWaWV3V2luZG93Ojpnb0JhY2soKQoreworICAgIFdLUGFnZUdvQmFjayhwYWdlKCkpOwor
fQorCit2b2lkIFdlYlZpZXdXaW5kb3c6OmdvRm9yd2FyZCgpCit7CisgICAgV0tQYWdlR29Gb3J3
YXJkKHBhZ2UoKSk7Cit9CisKK3ZvaWQgV2ViVmlld1dpbmRvdzo6cmVsb2FkKCkKK3sKKyAgICBX
S1BhZ2VSZWxvYWRGcm9tT3JpZ2luKHBhZ2UoKSk7Cit9CisKK3ZvaWQgV2ViVmlld1dpbmRvdzo6
dG9nZ2xlWm9vbUZhY3RvcigpCit7CisgICAgY29uc3QgaW50IG1heFpvb21GYWN0b3IgPSAzOwor
ICAgIGludCBuZXh0Wm9vbUZhY3RvciA9IChpbnQpV0tQYWdlR2V0UGFnZVpvb21GYWN0b3IocGFn
ZSgpKSArIDE7CisgICAgaWYgKG5leHRab29tRmFjdG9yID4gbWF4Wm9vbUZhY3RvcikKKyAgICAg
ICAgbmV4dFpvb21GYWN0b3IgPSAxOworCisgICAgV0tQYWdlU2V0UGFnZVpvb21GYWN0b3IocGFn
ZSgpLCBuZXh0Wm9vbUZhY3Rvcik7Cit9CisKK3ZvaWQgV2ViVmlld1dpbmRvdzo6c2V0U2l6ZSh0
b29sa2l0dGVuOjpJbnRTaXplIHNpemUpCit7CisgICAgV2lkZ2V0OjpzZXRTaXplKHNpemUpOwor
ICAgIFdLVmlld1NldFNpemUobV92aWV3LmdldCgpLCB0b1dLU2l6ZShzaXplKSk7CisKKyAgICBz
aXplX3Qgc3VyZmFjZVNpemUgPSBjYWlyb19mb3JtYXRfc3RyaWRlX2Zvcl93aWR0aChDQUlST19G
T1JNQVRfQVJHQjMyLCB0aGlzLT5tX3NpemUudykgKiB0aGlzLT5tX3NpemUuaDsKKyAgICBtX3N1
cmZhY2UgPSBzdGQ6Om1ha2VfdW5pcXVlPHVuc2lnbmVkIGNoYXJbXT4oc3VyZmFjZVNpemUpOwor
ICAgIG1lbXNldChtX3N1cmZhY2UuZ2V0KCksIDB4ZmYsIHN1cmZhY2VTaXplKTsKK30KKworYm9v
bCBXZWJWaWV3V2luZG93OjpvbktleVVwKGludDMyX3QgdmlydHVhbEtleUNvZGUpCit7CisgICAg
c3dpdGNoICh2aXJ0dWFsS2V5Q29kZSkgeworICAgIGNhc2UgVktfUkVUVVJOOgorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgY2FzZSBWS19UUklBTkdMRToKKyAgICBjYXNlIFZLX1NRVUFSRToK
KyAgICBjYXNlIFZLX09QVElPTlM6CisgICAgY2FzZSBWS19MMToKKyAgICBjYXNlIFZLX1IxOgor
ICAgIGNhc2UgVktfTDI6CisgICAgY2FzZSBWS19SMjoKKyAgICBjYXNlIFZLX0wzOgorICAgIGNh
c2UgVktfUjM6CisgICAgICAgIC8vIElnbm9yZSB0aGVzZSBrZXkgY29kZS4KKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIFdLUGFnZUhhbmRsZUtleWJvYXJkRXZlbnQocGFnZSgp
LCBXS0tleWJvYXJkRXZlbnRNYWtlKGtXS0V2ZW50S2V5VXAsIGtXS0lucHV0VHlwZU5vcm1hbCwg
IiIsIDAsIGtleUlkZW50aWZpZXJGb3JLZXlDb2RlKHZpcnR1YWxLZXlDb2RlKSwgdmlydHVhbEtl
eUNvZGUsIC0xLCAwLCAwKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViVmlld1dp
bmRvdzo6b25LZXlEb3duKGludDMyX3QgdmlydHVhbEtleUNvZGUpCit7CisgICAgc3dpdGNoICh2
aXJ0dWFsS2V5Q29kZSkgeworICAgIGNhc2UgVktfUkVUVVJOOgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgY2FzZSBWS19UUklBTkdMRToKKyAgICBjYXNlIFZLX1NRVUFSRToKKyAgICBjYXNl
IFZLX09QVElPTlM6CisgICAgY2FzZSBWS19MMToKKyAgICBjYXNlIFZLX1IxOgorICAgIGNhc2Ug
VktfTDI6CisgICAgY2FzZSBWS19SMjoKKyAgICBjYXNlIFZLX0wzOgorICAgIGNhc2UgVktfUjM6
CisgICAgICAgIC8vIElnbm9yZSB0aGVzZSBrZXkgY29kZS4KKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICBXS1BhZ2VIYW5kbGVLZXlib2FyZEV2ZW50KHBhZ2UoKSwgV0tLZXlib2Fy
ZEV2ZW50TWFrZShrV0tFdmVudEtleURvd24sIGtXS0lucHV0VHlwZU5vcm1hbCwgIiIsIDAsIGtl
eUlkZW50aWZpZXJGb3JLZXlDb2RlKHZpcnR1YWxLZXlDb2RlKSwgdmlydHVhbEtleUNvZGUsIC0x
LCAwLCAwKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViVmlld1dpbmRvdzo6b25N
b3VzZU1vdmUodG9vbGtpdHRlbjo6SW50UG9pbnQgcG9pbnQpCit7CisgICAgcG9pbnQgPSBnbG9i
YWxUb0NsaWVudFBvc2l0aW9uKHBvaW50KTsKKyAgICBXS1BhZ2VIYW5kbGVNb3VzZUV2ZW50KHBh
Z2UoKSwgV0tNb3VzZUV2ZW50TWFrZShrV0tFdmVudE1vdXNlTW92ZSwga1dLRXZlbnRNb3VzZUJ1
dHRvbk5vQnV0dG9uLCBXS1BvaW50TWFrZShwb2ludC54LCBwb2ludC55KSwgMCwgMCkpOworICAg
IHNldEZvY3VzZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJWaWV3V2luZG93
Ojpvbk1vdXNlRG93bih0b29sa2l0dGVuOjpJbnRQb2ludCBwb2ludCkKK3sKKyAgICBwb2ludCA9
IGdsb2JhbFRvQ2xpZW50UG9zaXRpb24ocG9pbnQpOworCisgICAgV0tQYWdlSGFuZGxlTW91c2VF
dmVudChwYWdlKCksIFdLTW91c2VFdmVudE1ha2Uoa1dLRXZlbnRNb3VzZURvd24sIGtXS0V2ZW50
TW91c2VCdXR0b25MZWZ0QnV0dG9uLCBXS1BvaW50TWFrZShwb2ludC54LCBwb2ludC55KSwgMCwg
MCkpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYlZpZXdXaW5kb3c6Om9uTW91c2VV
cCh0b29sa2l0dGVuOjpJbnRQb2ludCBwb2ludCkKK3sKKyAgICBwb2ludCA9IGdsb2JhbFRvQ2xp
ZW50UG9zaXRpb24ocG9pbnQpOworICAgIFdLUGFnZUhhbmRsZU1vdXNlRXZlbnQocGFnZSgpLCBX
S01vdXNlRXZlbnRNYWtlKGtXS0V2ZW50TW91c2VVcCwga1dLRXZlbnRNb3VzZUJ1dHRvbkxlZnRC
dXR0b24sIFdLUG9pbnRNYWtlKHBvaW50LngsIHBvaW50LnkpLCAwLCAwKSk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgV2ViVmlld1dpbmRvdzo6b25XaGVlbE1vdmUodG9vbGtpdHRlbjo6
SW50UG9pbnQgcG9pbnQsIHRvb2xraXR0ZW46OkludFBvaW50IHdoZWVsVGlja3MpCit7CisgICAg
cG9pbnQgPSBnbG9iYWxUb0NsaWVudFBvc2l0aW9uKHBvaW50KTsKKworICAgIGludCB3aGVlbFRp
Y2tzWCA9IHdoZWVsVGlja3MueDsKKyAgICBpbnQgd2hlZWxUaWNrc1kgPSB3aGVlbFRpY2tzLnk7
CisgICAgaWYgKHdoZWVsVGlja3NYIHx8IHdoZWVsVGlja3NZKSB7CisgICAgICAgIGludCBkZWx0
YVggPSB3aGVlbFRpY2tzWCAqIDEwOworICAgICAgICBpbnQgZGVsdGFZID0gd2hlZWxUaWNrc1kg
KiAxMDsKKworICAgICAgICBXS1BhZ2VIYW5kbGVXaGVlbEV2ZW50KHBhZ2UoKSwgV0tXaGVlbEV2
ZW50TWFrZShrV0tFdmVudFdoZWVsLCBXS1BvaW50TWFrZShwb2ludC54LCBwb2ludC55KSwgV0tT
aXplTWFrZShkZWx0YVgsIGRlbHRhWSksIFdLU2l6ZU1ha2Uod2hlZWxUaWNrc1gsIHdoZWVsVGlj
a3NZKSwgMCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCit2b2lkIFdlYlZpZXdXaW5kb3c6OnBhaW50U2VsZihJbnRQb2ludCBwb3NpdGlvbikK
K3sKKyAgICBpZiAoIWRpcnR5UmVjdHMoKS5lbXB0eSgpKSB7CisgICAgICAgIGNhaXJvX3N1cmZh
Y2VfdCogd2t2aWV3U3VyZmFjZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRh
KG1fc3VyZmFjZS5nZXQoKSwgQ0FJUk9fRk9STUFUX0FSR0IzMiwgdGhpcy0+bV9zaXplLncsIHRo
aXMtPm1fc2l6ZS5oLCBjYWlyb19mb3JtYXRfc3RyaWRlX2Zvcl93aWR0aChDQUlST19GT1JNQVRf
QVJHQjMyLCB0aGlzLT5tX3NpemUudykpOworICAgICAgICBzdGQ6Omxpc3Q8dG9vbGtpdHRlbjo6
SW50UmVjdD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZGlydHlSZWN0cygpLmJlZ2luKCk7CisgICAg
ICAgIHRvb2xraXR0ZW46OkludFJlY3QgdW5pb25SZWN0ID0gKml0OworICAgICAgICBpdCsrOwor
ICAgICAgICB3aGlsZSAoaXQgIT0gZGlydHlSZWN0cygpLmVuZCgpKSB7CisgICAgICAgICAgICB1
bmlvblJlY3QgKz0gKml0OworICAgICAgICAgICAgaXQrKzsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMod2t2aWV3U3VyZmFjZSkgPT0gQ0FJUk9fU1RBVFVTX1NV
Q0NFU1MpIHsKKyAgICAgICAgICAgIGNhaXJvX3QqIGNyID0gY2Fpcm9fY3JlYXRlKHRoaXMtPnN1
cmZhY2UoKSk7CisgICAgICAgICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJB
VE9SX1NPVVJDRSk7CisgICAgICAgICAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IsIHdr
dmlld1N1cmZhY2UsIDAsIDApOworICAgICAgICAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCB1bmlv
blJlY3QubGVmdCgpLCB1bmlvblJlY3QudG9wKCksIHVuaW9uUmVjdC53aWR0aCgpLCB1bmlvblJl
Y3QuaGVpZ2h0KCkpOworICAgICAgICAgICAgY2Fpcm9fZmlsbChjcik7CisgICAgICAgICAgICBj
YWlyb19kZXN0cm95KGNyKTsKKyAgICAgICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveSh3a3Zp
ZXdTdXJmYWNlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobV9hY3RpdmUpCisgICAgICAg
IFdpZGdldDo6cGFpbnRTZWxmKHBvc2l0aW9uKTsKK30KKwordm9pZCBXZWJWaWV3V2luZG93Ojp1
cGRhdGVTZWxmKCkKK3sKK30KKwordm9pZCBXZWJWaWV3V2luZG93Ojp1cGRhdGVTdXJmYWNlKHRv
b2xraXR0ZW46OkludFJlY3QgZGlydHlSZWN0KQoreworICAgIFdLUGFnZVBhaW50KHBhZ2UoKSwg
bV9zdXJmYWNlLmdldCgpLCBXS1NpemVNYWtlKHRoaXMtPm1fc2l6ZS53LCB0aGlzLT5tX3NpemUu
aCksIHRvV0tSZWN0KGRpcnR5UmVjdCkpOworICAgIG1fZGlydHlSZWN0cyArPSBkaXJ0eVJlY3Q7
Cit9CisKK3ZvaWQgV2ViVmlld1dpbmRvdzo6dXBkYXRlVGl0bGUoKQoreworICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiB0aXRsZSA9IGFkb3B0V0soV0tQYWdlQ29weVRpdGxlKHBhZ2UoKSkp
OworICAgIG1fdGl0bGUgPSB0b1VURjhTdHJpbmcodGl0bGUuZ2V0KCkpOworICAgIGlmIChtX2Ns
aWVudC5kaWRVcGRhdGVUaXRsZSkKKyAgICAgICAgbV9jbGllbnQuZGlkVXBkYXRlVGl0bGUodGhp
cyk7Cit9CisKK3ZvaWQgV2ViVmlld1dpbmRvdzo6dXBkYXRlVVJMKCkKK3sKKyAgICBXS1JldGFp
blB0cjxXS1VSTFJlZj4gdXJsID0gYWRvcHRXSyhXS1BhZ2VDb3B5QWN0aXZlVVJMKHBhZ2UoKSkp
OworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1cmxTdHIgPSBhZG9wdFdLKFdLVVJMQ29w
eVN0cmluZyh1cmwuZ2V0KCkpKTsKKyAgICBtX3VybCA9IHRvVVRGOFN0cmluZyh1cmxTdHIuZ2V0
KCkpOworICAgIGlmIChtX2NsaWVudC5kaWRVcGRhdGVVUkwpCisgICAgICAgIG1fY2xpZW50LmRp
ZFVwZGF0ZVVSTCh0aGlzKTsKK30KKwordm9pZCBXZWJWaWV3V2luZG93Ojp1cGRhdGVQcm9ncmVz
cygpCit7CisgICAgbV9wcm9ncmVzcyA9IFdLUGFnZUdldEVzdGltYXRlZFByb2dyZXNzKHBhZ2Uo
KSk7CisgICAgaWYgKG1fY2xpZW50LmRpZFVwZGF0ZVByb2dyZXNzKQorICAgICAgICBtX2NsaWVu
dC5kaWRVcGRhdGVQcm9ncmVzcyh0aGlzKTsKK30KKwordm9pZCBXZWJWaWV3V2luZG93OjpzZXRB
Y3RpdmUoYm9vbCBhY3RpdmUpCit7CisgICAgaWYgKG1fYWN0aXZlID09IGFjdGl2ZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9hY3RpdmUgPSBhY3RpdmU7Cit9CisKK1dLUGFnZVJlZiBXZWJW
aWV3V2luZG93OjpjcmVhdGVOZXdQYWdlKFdLUGFnZVJlZiwgV0tQYWdlQ29uZmlndXJhdGlvblJl
ZiBjb25maWd1cmF0aW9uKQoreworICAgIGlmIChtX2NsaWVudC5jcmVhdGVOZXdXaW5kb3cpIHsK
KyAgICAgICAgYXV0byBuZXdXZWJWaWV3ID0gbV9jbGllbnQuY3JlYXRlTmV3V2luZG93KGNvbmZp
Z3VyYXRpb24pOworICAgICAgICBhdXRvIG5ld1BhZ2UgPSBuZXdXZWJWaWV3LT5wYWdlKCk7Cisg
ICAgICAgIHJldHVybiBuZXdQYWdlOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KZGlm
ZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1dlYlZpZXdXaW5kb3cuaCBi
L1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1dlYlZpZXdXaW5kb3cuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4zYWE4Y2UxMDhiNjhiZDM0M2YxZGUzMWEwMTdkZGM3MzJkY2IyMDk5Ci0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRpb24vV2ViVmlld1dpbmRvdy5oCkBAIC0w
LDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBF
bnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJX
ZWJDb250ZXh0LmgiCisjaW5jbHVkZSA8V2ViS2l0L1dLUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8
V2ViS2l0L1dLVmlldy5oPgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx0b29sa2l0dGVu
L1dpZGdldC5oPgorCitjbGFzcyBXZWJWaWV3V2luZG93IDogcHVibGljIHRvb2xraXR0ZW46Oldp
ZGdldCB7CitwdWJsaWM6CisgICAgc3RydWN0IENsaWVudCB7CisgICAgICAgIHN0ZDo6ZnVuY3Rp
b248V2ViVmlld1dpbmRvdyooV0tQYWdlQ29uZmlndXJhdGlvblJlZiBjb25maWd1cmF0aW9uKT4g
Y3JlYXRlTmV3V2luZG93OworCisgICAgICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChXZWJWaWV3V2lu
ZG93Kik+IGRpZFVwZGF0ZVRpdGxlOworICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoV2ViVmll
d1dpbmRvdyopPiBkaWRVcGRhdGVVUkw7CisgICAgICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChXZWJW
aWV3V2luZG93Kik+IGRpZFVwZGF0ZVByb2dyZXNzOworICAgIH07CisKKyAgICBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPFdlYlZpZXdXaW5kb3c+IGNyZWF0ZShDbGllbnQmJiwgV0tQYWdlQ29uZmln
dXJhdGlvblJlZik7CisKKyAgICBleHBsaWNpdCBXZWJWaWV3V2luZG93KFdLUGFnZUNvbmZpZ3Vy
YXRpb25SZWYsIENsaWVudCYmKTsKKyAgICB2aXJ0dWFsIH5XZWJWaWV3V2luZG93KCk7CisKKyAg
ICB2b2lkIGxvYWRVUkwoY29uc3QgY2hhciogdXJsKTsKKyAgICB2b2lkIGdvQmFjaygpOworICAg
IHZvaWQgZ29Gb3J3YXJkKCk7CisgICAgdm9pZCByZWxvYWQoKTsKKworICAgIHZvaWQgdG9nZ2xl
Wm9vbUZhY3RvcigpOworCisgICAgdm9pZCBzZXRTaXplKHRvb2xraXR0ZW46OkludFNpemUpIGZp
bmFsOworICAgIGJvb2wgb25LZXlVcChpbnQzMl90IHZpcnR1YWxLZXlDb2RlKSBmaW5hbDsKKyAg
ICBib29sIG9uS2V5RG93bihpbnQzMl90IHZpcnR1YWxLZXlDb2RlKSBmaW5hbDsKKyAgICBib29s
IG9uTW91c2VNb3ZlKHRvb2xraXR0ZW46OkludFBvaW50KSBmaW5hbDsKKyAgICBib29sIG9uTW91
c2VVcCh0b29sa2l0dGVuOjpJbnRQb2ludCkgZmluYWw7CisgICAgYm9vbCBvbk1vdXNlRG93bih0
b29sa2l0dGVuOjpJbnRQb2ludCkgZmluYWw7CisgICAgYm9vbCBvbldoZWVsTW92ZSh0b29sa2l0
dGVuOjpJbnRQb2ludCwgdG9vbGtpdHRlbjo6SW50UG9pbnQpIGZpbmFsOworCisgICAgY29uc3Qg
c3RkOjpzdHJpbmcmIHRpdGxlKCkgY29uc3QgeyByZXR1cm4gbV90aXRsZTsgfQorICAgIGNvbnN0
IHN0ZDo6c3RyaW5nJiB1cmwoKSBjb25zdCB7IHJldHVybiBtX3VybDsgfQorICAgIGRvdWJsZSBw
cm9ncmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvZ3Jlc3M7IH0KKworICAgIHZvaWQgc2V0QWN0
aXZlKGJvb2wpOworCitwcml2YXRlOgorICAgIFdLUGFnZVJlZiBwYWdlKCk7CisKKyAgICB2b2lk
IHBhaW50U2VsZih0b29sa2l0dGVuOjpJbnRQb2ludCBwb3NpdGlvbikgb3ZlcnJpZGU7CisgICAg
dm9pZCB1cGRhdGVTZWxmKCkgb3ZlcnJpZGU7CisgICAgdm9pZCB1cGRhdGVTdXJmYWNlKHRvb2xr
aXR0ZW46OkludFJlY3QpOworCisgICAgdm9pZCB1cGRhdGVUaXRsZSgpOworICAgIHZvaWQgdXBk
YXRlVVJMKCk7CisgICAgdm9pZCB1cGRhdGVQcm9ncmVzcygpOworCisgICAgV0tQYWdlUmVmIGNy
ZWF0ZU5ld1BhZ2UoV0tQYWdlUmVmLCBXS1BhZ2VDb25maWd1cmF0aW9uUmVmKTsKKworICAgIFdL
UmV0YWluUHRyPFdLVmlld1JlZj4gbV92aWV3OworICAgIHN0ZDo6c2hhcmVkX3B0cjxXZWJDb250
ZXh0PiBtX2NvbnRleHQ7CisgICAgV0tSZXRhaW5QdHI8V0tQcmVmZXJlbmNlc1JlZj4gbV9wcmVm
ZXJlbmNlczsKKworICAgIENsaWVudCBtX2NsaWVudDsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjx1
bnNpZ25lZCBjaGFyW10+IG1fc3VyZmFjZTsKKworICAgIHN0ZDo6c3RyaW5nIG1fdGl0bGU7Cisg
ICAgc3RkOjpzdHJpbmcgbV91cmw7CisgICAgZG91YmxlIG1fcHJvZ3Jlc3MgeyAwIH07CisKKyAg
ICBib29sIG1fYWN0aXZlIHsgZmFsc2UgfTsKK307CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJv
d3Nlci9wbGF5c3RhdGlvbi9tYWluLmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9u
L21haW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI5ZjQ1YjAyMTIwNmFmZDk2ZjdjM2Y5Nzg3NjY3Y2YyNWQz
NmQ0MTgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9t
YWluLmNwcApAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkg
SW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJNYWlu
V2luZG93LmgiCisjaW5jbHVkZSA8V2ViS2l0L1dLUnVuTG9vcC5oPgorI2luY2x1ZGUgPGRsZmNu
Lmg+CisjaW5jbHVkZSA8dG9vbGtpdHRlbi9BcHBsaWNhdGlvbi5oPgorCit1c2luZyB0b29sa2l0
dGVuOjpXaWRnZXQ7Cit1c2luZyB0b29sa2l0dGVuOjpBcHBsaWNhdGlvbjsKKworc3RhdGljIHZv
aWQgbG9hZExpYnJhcnlPckV4aXQoY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBpZiAoIWRsb3Bl
bihuYW1lLCBSVExEX05PVykpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8g
bG9hZCAlcy5cbiIsIG5hbWUpOworICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgfQor
fQorCitfX2F0dHJpYnV0ZV9fKChjb25zdHJ1Y3RvcigxMTApKSkKK3N0YXRpYyB2b2lkIGluaXRp
YWxpemUoKQoreworICAgIGxvYWRMaWJyYXJ5T3JFeGl0KCJQb3NpeFdlYktpdCIpOworICAgIHNl
dGVudl9ucCgiV2ViSW5zcGVjdG9yU2VydmVyUG9ydCIsICI4NjgiLCAxKTsKKworICAgIGxvYWRM
aWJyYXJ5T3JFeGl0KCJsaWJwbmcxNiIpOworICAgIGxvYWRMaWJyYXJ5T3JFeGl0KCJsaWJpY3Ui
KTsKKyAgICBsb2FkTGlicmFyeU9yRXhpdCgibGliZm9udGNvbmZpZyIpOworICAgIGxvYWRMaWJy
YXJ5T3JFeGl0KCJsaWJmcmVldHlwZSIpOworICAgIGxvYWRMaWJyYXJ5T3JFeGl0KCJsaWJoYXJm
YnV6eiIpOworICAgIGxvYWRMaWJyYXJ5T3JFeGl0KCJsaWJjYWlybyIpOworICAgIGxvYWRMaWJy
YXJ5T3JFeGl0KCJsaWJUb29sS2l0dGVuIik7ICAgIAorICAgIGxvYWRMaWJyYXJ5T3JFeGl0KCJs
aWJTY2VOS1dlYktpdFJlcXVpcmVtZW50cyIpOworICAgIGxvYWRMaWJyYXJ5T3JFeGl0KCJsaWJK
YXZhU2NyaXB0Q29yZSIpOworICAgIGxvYWRMaWJyYXJ5T3JFeGl0KCJsaWJXZWJLaXQiKTsKK30K
KworY2xhc3MgQXBwbGljYXRpb25DbGllbnQgOiBwdWJsaWMgQXBwbGljYXRpb246OkNsaWVudCB7
CitwdWJsaWM6CisgICAgdm9pZCByZXF1ZXN0TmV4dEZyYW1lKCkgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIFdLUnVuTG9vcENhbGxPbk1haW5UaHJlYWQodXBkYXRlQXBwbGljYXRpb24sIHRoaXMp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCB1cGRhdGVBcHBsaWNhdGlvbih2
b2lkKikKKyAgICB7CisgICAgICAgIEFwcGxpY2F0aW9uOjpzaW5nbGV0b24oKS51cGRhdGUoKTsK
KyAgICB9Cit9OworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIFdL
UnVuTG9vcEluaXRpYWxpemVNYWluKCk7CisKKyAgICBBcHBsaWNhdGlvbkNsaWVudCBhcHBsaWNh
dGlvbkNsaWVudDsKKyAgICBhdXRvJiBhcHAgPSBBcHBsaWNhdGlvbjo6c2luZ2xldG9uKCk7Cisg
ICAgYXBwLmluaXQoJmFwcGxpY2F0aW9uQ2xpZW50KTsKKworICAgIGF1dG8gbWFpbldpbmRvdyA9
IHN0ZDo6bWFrZV91bmlxdWU8TWFpbldpbmRvdz4oKTsKKyAgICBtYWluV2luZG93LT5zZXRGb2N1
c2VkKCk7CisgICAgYXBwLnNldFJvb3RXaWRnZXQobW92ZShtYWluV2luZG93KSk7CisKKyAgICAv
LyBSZXF1ZXN0IHRoZSBmaXJzdCBmcmFtZSB0byBzdGFydCB0aGUgYXBwbGljYXRpb24gbG9vcC4K
KyAgICBhcHBsaWNhdGlvbkNsaWVudC5yZXF1ZXN0TmV4dEZyYW1lKCk7CisKKyAgICBXS1J1bkxv
b3BSdW5NYWluKCk7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1BsYXRm
b3JtUGxheVN0YXRpb24uY21ha2UgYi9Ub29scy9QbGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtlCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmE1MzViOWFiYThhODUxNmIzNGU5NWMxZGVmZjA4MjQwY2UyMjdhMGQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9QbGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtlCkBAIC0wLDAgKzEs
MyBAQAoraWYgKEVOQUJMRV9XRUJLSVQpCisgICAgYWRkX3N1YmRpcmVjdG9yeShNaW5pQnJvd3Nl
ci9wbGF5c3RhdGlvbikKK2VuZGlmICgpCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VM
b2cKaW5kZXggZGFjY2MxY2NmOThkOGFlMTdlZDVhYTA1YjAwMTBiMWY5N2Y5OTE1MC4uM2U5ZDgz
M2FhNTlkZWU5NjAwOGIyMThlZjY3ZmVkOGUwOGZmNDZjZiAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9n
CisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIxLTAxLTA2ICBZb3NoaWFraSBK
aXRzdWthd2EgIDx5b3NoaWFraS5qaXRzdWthd2FAc29ueS5jb20+CisKKyAgICAgICAgW1BsYXlT
dGF0aW9uXSBBZGQgTWluaUJyb3dzZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyMDM1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEVuYWJsZSBGdWxsc2NyZWVuIEFQSS4KKworICAgICAgICAqIFNvdXJj
ZS9jbWFrZS9PcHRpb25zUGxheVN0YXRpb24uY21ha2U6CisKIDIwMjAtMTEtMjYgIExhdXJvIE1v
dXJhICA8bG1vdXJhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS11bR1RLNF0gQnVpbGRpbmcg
d2l0aCBHT2JqZWN0LUludHJvc3BlY3Rpb24gc3VwcG9ydCBkb2VzIG5vdCB3b3JrCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417148</attachid>
            <date>2021-01-06 20:01:58 -0800</date>
            <delta_ts>2021-01-07 17:17:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220359-20210107130156.patch</filename>
            <type>text/plain</type>
            <size>112618</size>
            <attacher name="Yoshiaki Jitsukawa">yoshiaki.jitsukawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcwMTgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWZmZDE5MWQzZWNhYTQy
ZjE2Njk5MDZlYWU2YWJkM2ZkZDgwYWQ0Ni4uMTEzYWU5MzFkODlhMGIzOWU5YzJkNWU1MjEwNDQ0
OWRlOWM0YjZkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDIxLTAxLTA2ICBZb3No
aWFraSBKaXRzdWthd2EgIDx5b3NoaWFraS5qaXRzdWthd2FAc29ueS5jb20+CisKKyAgICAgICAg
W1BsYXlTdGF0aW9uXSBBZGQgTWluaUJyb3dzZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDM1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCBXaWRnZXRQbGF5U3RhdGlvbiB0byBzdXBwb3J0IGN1
c3RvbSBjdXJzb3IuCisKKyAgICAgICAgTG9hZCBDQSBjZXJ0cyBpbiBDdXJsU1NMSGFuZGxlOjpw
bGF0Zm9ybUluaXRpYWxpemUoKS4KKworICAgICAgICAqIFBsYXRmb3JtUGxheVN0YXRpb24uY21h
a2U6IEFkZCBXaWRnZXRQbGF5U3RhdGlvbi5jcHAKKyAgICAgICAgKiBwbGF0Zm9ybS9XaWRnZXQu
Y3BwOiBBbGxvdyBQbGF5U3RhdGlvbiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL3BsYXlzdGF0aW9uL0N1cmxTU0xIYW5kbGVQbGF5U3RhdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDdXJsU1NMSGFuZGxlOjpwbGF0Zm9ybUluaXRpYWxpemUp
OiBMb2FkIENBIGNlcnRzLgorICAgICAgICAqIHBsYXRmb3JtL3BsYXlzdGF0aW9uL1dpZGdldFBs
YXlTdGF0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6On5XaWRnZXQp
OgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpzZXRGcmFtZVJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6V2lkZ2V0OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnNldEZvY3Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6c2V0Q3Vyc29yKTogQ2FsbCBob3N0V2luZG93
KCkncyBzZXRDdXJzb3IoKS4KKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6c2hvdyk6CisgICAg
ICAgIChXZWJDb3JlOjpXaWRnZXQ6OmhpZGUpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0Ojpz
ZXRJc1NlbGVjdGVkKToKKwogMjAyMC0xMS0yNiAgTGF1cm8gTW91cmEgIDxsbW91cmFAaWdhbGlh
LmNvbT4KIAogICAgICAgICBbR1RLNF0gQnVpbGQgZml4LiBBZGQgY2FzdCB3aGVuIHRha2luZyBj
b25zdCBkYXRhIG93bmVyc2hpcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBkNTE0M2NjN2U1MGY4MTc3MDNjYTZhY2Zk
OGYwM2YyMDU5MzY2YmM4Li5lZjY1NjRmMTgyMGMyYTY2MTU3N2Y3YjczNWUxYTgyYWMyNmYzOTRh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDIxLTAxLTA2ICBZb3NoaWFraSBKaXRzdWth
d2EgIDx5b3NoaWFraS5qaXRzdWthd2FAc29ueS5jb20+CisKKyAgICAgICAgW1BsYXlTdGF0aW9u
XSBBZGQgTWluaUJyb3dzZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIyMDM1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZCBXS1J1bmxvb3AgQVBJIHRvIGFsbG93IGFuIGV4dGVybmFsIHByb2dyYW0g
dG8gcnVuIFdlYktpdCdzIGdlbmVyaWMgcnVubG9vcC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQy9wbGF5c3RhdGlvbi9XS1J1bkxvb3AuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdLUnVuTG9v
cFJ1bk1haW4pOgorICAgICAgICAoV0tSdW5Mb29wU3RvcE1haW4pOgorICAgICAgICAoV0tSdW5M
b29wQ2FsbE9uTWFpblRocmVhZCk6CisgICAgICAgIChXS1J1bkxvb3BJbml0aWFsaXplTWFpbik6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLUnVuTG9vcC5oOiBBZGRl
ZC4KKworICAgICAgICBBZGQgcHJpdmF0ZSBXS1BhZ2VQYWludCgpIHRvIGRyYXcgY29udGVudHMg
dG8gYml0bWFwLgorICAgICAgICBSZW1vdmUgdW51c2VkIFdLUGFnZVNldFNpemUoKSBpbXBsZW1l
bnRhdGlvbi4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1BhZ2VQ
cml2YXRlUGxheVN0YXRpb24uY3BwOgorICAgICAgICAoZHJhd1BhZ2VCYWNrZ3JvdW5kKToKKyAg
ICAgICAgKFdLUGFnZUhhbmRsZU1vdXNlRXZlbnQpOiBGaXggYnV0dG9uIGNsaWNrIGV2ZW50IGhh
bmRsaW5nLgorICAgICAgICAoV0tQYWdlUGFpbnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Qy9wbGF5c3RhdGlvbi9XS1BhZ2VQcml2YXRlUGxheVN0YXRpb24uaDoKKworICAgICAgICBBZGQg
V0tWaWV3IEFQSSB0byBzZXQgdmlldyBjbGllbnQgYWxvbmcgd2l0aCBmdWxsc2NyZWVuIEFQSSBh
bmQgdmlzaWJpbGl0eSBzdGF0ZSBBUEkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvcGxh
eXN0YXRpb24vV0tWaWV3LmNwcDoKKyAgICAgICAgKFdLVmlld0dldFBhZ2UpOgorICAgICAgICAo
V0tWaWV3U2V0U2l6ZSk6CisgICAgICAgIChXS1ZpZXdTZXRGb2N1cyk6CisgICAgICAgIChXS1Zp
ZXdTZXRBY3RpdmUpOgorICAgICAgICAoV0tWaWV3U2V0VmlzaWJsZSk6CisgICAgICAgIChXS1Zp
ZXdXaWxsRW50ZXJGdWxsU2NyZWVuKToKKyAgICAgICAgKFdLVmlld0RpZEVudGVyRnVsbFNjcmVl
bik6CisgICAgICAgIChXS1ZpZXdXaWxsRXhpdEZ1bGxTY3JlZW4pOgorICAgICAgICAoV0tWaWV3
RGlkRXhpdEZ1bGxTY3JlZW4pOgorICAgICAgICAoV0tWaWV3UmVxdWVzdEV4aXRGdWxsU2NyZWVu
KToKKyAgICAgICAgKFdLVmlld0lzRnVsbFNjcmVlbik6CisgICAgICAgIChXS1ZpZXdTZXRWaWV3
Q2xpZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tWaWV3Lmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLVmlld0NsaWVudC5oOiBB
ZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3BsYXlzdGF0aW9uL0FQSVZpZXdDbGllbnQu
aDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL3BsYXlzdGF0aW9uL1BhZ2VDbGllbnRJbXBs
LmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvcGxheXN0YXRpb24vUGFnZUNsaWVudEltcGwuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvcGxheXN0YXRpb24vUGxheVN0YXRpb25XZWJWaWV3LmNwcDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvcGxheXN0YXRpb24vUGxheVN0YXRpb25XZWJWaWV3Lmg6CisK
KyAgICAgICAgQWxsb3cgcmVuZGVyaW5nIHdpdGhvdXQgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcu
CisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2U6OnVwZGF0ZVByZWZlcmVuY2VzKToKKworICAgICAgICAqIFBsYXRmb3Jt
UGxheVN0YXRpb24uY21ha2U6IEFkZCByZWxldmFudCBzb3VyY2VzIGFuZCBpbmNsdWRlIGRpcmVj
dG9yaWVzLgorCiAyMDIwLTExLTI3ICBZb3NoaWFraSBKaXRzdWthd2EgIDx5b3NoaWFraS5qaXRz
dWthd2FAc29ueS5jb20+CiAKICAgICAgICAgW1BsYXlTdGF0aW9uXSBEZWZpbmUgcGxhdGZvcm0g
YXJndW1lbnQgY29kZXJzIGZvciBGb250CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybVBsYXlTdGF0aW9uLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1QbGF5U3RhdGlv
bi5jbWFrZQppbmRleCBkNjc0NWEzYjM4MDFlMjAwMGYxM2UyMjUxZjhmOGUzYTBmMWM2MDk2Li41
OTcyYjdmMGJiNzY2M2EwOTczMTllYWFiNjljZGE2MDY0NTk2YmNhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtUGxheVN0YXRpb24uY21ha2UKQEAgLTYwLDYgKzYwLDcgQEAgbGlzdChBUFBFTkQg
V2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vcGxheXN0YXRpb24vUGxhdGZvcm1TY3JlZW5Q
bGF5U3RhdGlvbi5jcHAKICAgICBwbGF0Zm9ybS9wbGF5c3RhdGlvbi9TY3JvbGxiYXJUaGVtZVBs
YXlTdGF0aW9uLmNwcAogICAgIHBsYXRmb3JtL3BsYXlzdGF0aW9uL1VzZXJBZ2VudFBsYXlTdGF0
aW9uLmNwcAorICAgIHBsYXRmb3JtL3BsYXlzdGF0aW9uL1dpZGdldFBsYXlTdGF0aW9uLmNwcAog
CiAgICAgcGxhdGZvcm0vcG9zaXgvU2hhcmVkQnVmZmVyUE9TSVguY3BwCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9XaWRnZXQuY3BwCmluZGV4IGE3ZmUzODBmM2ZkMmQ5Y2E2Y2Y4MjhiODJlYTNkNDZkZDUz
N2U5NmMuLjVhNGUxNDljMGY3ZmI5ZGUwODFmY2Y3YzQwMWU0MDI0NDVhZTVmMmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vV2lkZ2V0LmNwcApAQCAtMjcxLDcgKzI3MSw3IEBAIEZsb2F0UG9pbnQgV2lk
Z2V0Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KGNvbnN0IEZsb2F0UG9pbnQmIHBhcmVudFBv
aW50KSBjb25zCiAgICAgcmV0dXJuIGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcoSW50UG9pbnQo
cGFyZW50UG9pbnQpKTsKIH0KIAotI2lmICFQTEFURk9STShDT0NPQSkgJiYgIVBMQVRGT1JNKEdU
SykgJiYgIVBMQVRGT1JNKFdJTikKKyNpZiAhUExBVEZPUk0oQ09DT0EpICYmICFQTEFURk9STShH
VEspICYmICFQTEFURk9STShXSU4pICYmICFQTEFURk9STShQTEFZU1RBVElPTikKIAogV2lkZ2V0
Ojp+V2lkZ2V0KCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvcGxheXN0YXRpb24vQ3VybFNTTEhhbmRsZVBsYXlTdGF0aW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvcGxheXN0YXRpb24vQ3VybFNTTEhhbmRsZVBsYXlTdGF0aW9u
LmNwcAppbmRleCAzZTFlMjg3NTBjMGY4NzVjZTRhZjE3Y2IzYzIxMGVhY2U3ZjRiMWMxLi5iNTM0
NDQ5NjE3YTE2NWU0Mzc2ZWYwNzI1Y2NjMDEwY2E4NTA4MjUzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3BsYXlzdGF0aW9uL0N1cmxTU0xIYW5kbGVQbGF5U3Rh
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9wbGF5c3RhdGlv
bi9DdXJsU1NMSGFuZGxlUGxheVN0YXRpb24uY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxOCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICog
Q29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDIyICsyNiwyNSBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkN1cmxTU0xIYW5kbGUuaCIKIAorI2luY2x1ZGUgPENl
cnRpZmljYXRlU3RvcmUvQ2VydGlmaWNhdGVTdG9yZS5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXN0YXRpYyBTdHJpbmcgZ2V0Q0FDZXJ0UGF0aEVudigpCit2b2lkIEN1cmxTU0xIYW5kbGU6
OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiB7Ci0gICAgY2hhciogZW52UGF0aCA9IGdldGVudigiQ1VS
TF9DQV9CVU5ETEVfUEFUSCIpOwotICAgIGlmIChlbnZQYXRoKQotICAgICAgICByZXR1cm4geyBl
bnZQYXRoIH07CisgICAgYXV0byBjZXJ0aWZpY2F0ZURhdGEgPSBDZXJ0aWZpY2F0ZURhdGE6OmNy
ZWF0ZSgpOworICAgIENlcnRpZmljYXRlU3RvcmU6OmdldFRydXN0ZWRSb290Q0EoKmNlcnRpZmlj
YXRlRGF0YSk7CiAKLSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLX0KKyAgICBDZXJ0aWZpY2F0
ZUluZm86OkNlcnRpZmljYXRlIGNhQ2VydERhdGE7CisgICAgY2FDZXJ0RGF0YS5hcHBlbmQoY2Vy
dGlmaWNhdGVEYXRhLT5kYXRhKCksIGNlcnRpZmljYXRlRGF0YS0+c2l6ZSgpKTsKKyAgICBpZiAo
Y2VydGlmaWNhdGVEYXRhLT5zaXplKCkpCisgICAgICAgIHNldENBQ2VydERhdGEoV1RGTW92ZShj
YUNlcnREYXRhKSk7CiAKLXZvaWQgQ3VybFNTTEhhbmRsZTo6cGxhdGZvcm1Jbml0aWFsaXplKCkK
LXsKLSAgICBhdXRvIGNhQ2VydFBhdGggPSBnZXRDQUNlcnRQYXRoRW52KCk7Ci0gICAgaWYgKCFj
YUNlcnRQYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgc2V0Q0FDZXJ0UGF0aChXVEZNb3ZlKGNhQ2Vy
dFBhdGgpKTsKKyAgICBzZXRDaXBoZXJMaXN0KENlcnRpZmljYXRlU3RvcmU6OmNpcGhlclN1aXRl
cygpKTsKKyAgICBzZXRTaWduYXR1cmVBbGdvcml0aG1zTGlzdChDZXJ0aWZpY2F0ZVN0b3JlOjpz
aWduYXR1cmVBbGdvcml0aG1zKCkpOworICAgIHNldEN1cnZlc0xpc3QoQ2VydGlmaWNhdGVTdG9y
ZTo6c3VwcG9ydGVkR3JvdXBzKCkpOworCisgICAgc2V0SWdub3JlU1NMRXJyb3JzKENlcnRpZmlj
YXRlU3RvcmU6OnNob3VsZElnbm9yZVRMU0Vycm9ycygpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcGxheXN0YXRpb24v
V2lkZ2V0UGxheVN0YXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcGxheXN0YXRp
b24vV2lkZ2V0UGxheVN0YXRpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM1YTJjYTJlNzgxODhkMDc4NmVk
NGQ2YjZkM2MyYWM0MGRiMjlkYWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9wbGF5c3RhdGlvbi9XaWRnZXRQbGF5U3RhdGlvbi5jcHAKQEAgLTAsMCArMSw4MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1l
bnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2lkZ2V0
LmgiCisKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJIb3N0V2luZG93LmgiCisj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXaWRn
ZXQ6On5XaWRnZXQoKQoreworICAgIEFTU0VSVCghcGFyZW50KCkpOworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYgcmVj
dCkKK3sKKyAgICBtX2ZyYW1lID0gcmVjdDsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYsIFNlY3Vy
aXR5T3JpZ2luUGFpbnRQb2xpY3ksIEV2ZW50UmVnaW9uQ29udGV4dCopCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBXaWRnZXQ6OnNldEZvY3VzKGJvb2wpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXaWRnZXQ6OnNldEN1cnNvcihjb25zdCBDdXJzb3Im
IGN1cnNvcikKK3sKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSByb290KCk7CisgICAgaWYgKCF2aWV3
KQorICAgICAgICByZXR1cm47CisgICAgdmlldy0+aG9zdFdpbmRvdygpLT5zZXRDdXJzb3IoY3Vy
c29yKTsKK30KKwordm9pZCBXaWRnZXQ6OnNob3coKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK3ZvaWQgV2lkZ2V0OjpoaWRlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIFdpZGdldDo6c2V0SXNTZWxlY3RlZChib29sKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm1QbGF5U3RhdGlvbi5jbWFrZSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1QbGF5
U3RhdGlvbi5jbWFrZQppbmRleCBjZGU4MTk4NzE2ZDQyNTIyY2I5ODc3YmFkOTk4ZTRiNjBjOGE5
YjRiLi5jOGRjNzQzMzFkOTgyNDI5N2VkZDdjNjRjYzUzOWNlZjk4MmM5YzdmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtUGxheVN0YXRpb24uY21ha2UKKysrIGIvU291cmNlL1dl
YktpdC9QbGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtlCkBAIC04OSw2ICs4OSw3IEBAIGxpc3QoQVBQ
RU5EIFdlYktpdF9TT1VSQ0VTCiAKICAgICBVSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tD
b250ZXh0Q29uZmlndXJhdGlvblBsYXlTdGF0aW9uLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvQy9w
bGF5c3RhdGlvbi9XS1BhZ2VQcml2YXRlUGxheVN0YXRpb24uY3BwCisgICAgVUlQcm9jZXNzL0FQ
SS9DL3BsYXlzdGF0aW9uL1dLUnVubG9vcC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL0MvcGxheXN0
YXRpb24vV0tWaWV3LmNwcAogCiAgICAgVUlQcm9jZXNzL0F1dG9tYXRpb24vY2Fpcm8vV2ViQXV0
b21hdGlvblNlc3Npb25DYWlyby5jcHAKQEAgLTE0MSw2ICsxNDIsNyBAQCBsaXN0KEFQUEVORCBX
ZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vzcy9B
UEkvQy9jYWlybyIKICAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJL0MvY3VybCIKICAg
ICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24iCisgICAgIiR7V0VC
S0lUX0RJUn0vVUlQcm9jZXNzL0FQSS9wbGF5c3RhdGlvbiIKICAgICAiJHtXRUJLSVRfRElSfS9V
SVByb2Nlc3MvQ29vcmRpbmF0ZWRHcmFwaGljcyIKICAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nl
c3MvcGxheXN0YXRpb24iCiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9jdXJsIgpAQCAtMTYyLDcgKzE2NCw5IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9QVUJMSUNf
RlJBTUVXT1JLX0hFQURFUlMKIAogICAgIFVJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS0Nv
bnRleHRDb25maWd1cmF0aW9uUGxheVN0YXRpb24uaAogICAgIFVJUHJvY2Vzcy9BUEkvQy9wbGF5
c3RhdGlvbi9XS1BhZ2VQcml2YXRlUGxheVN0YXRpb24uaAorICAgIFVJUHJvY2Vzcy9BUEkvQy9w
bGF5c3RhdGlvbi9XS1J1bmxvb3AuaAogICAgIFVJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9X
S1ZpZXcuaAorICAgIFVJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1ZpZXdDbGllbnQuaAog
KQogCiAjIEJvdGggUEFMIGFuZCBXZWJDb3JlIGFyZSBidWlsdCBhcyBvYmplY3QgbGlicmFyaWVz
LiBUaGUgV2ViS2l0OjogaW50ZXJmYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1BhZ2VQcml2YXRlUGxheVN0YXRpb24uY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tQYWdlUHJpdmF0ZVBsYXlT
dGF0aW9uLmNwcAppbmRleCBmNzA2OGI2ZWQ4YTkxMmVlNzg0ZWVkNTQ5YjVmNjAyNzc2N2RiOGY5
Li43YTgzZGRlNmE0OTBiZWY2ODhhMTg1M2Y2NTQ5Y2RmZGQxMzk4N2UzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1BhZ2VQcml2YXRlUGxh
eVN0YXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0
aW9uL1dLUGFnZVByaXZhdGVQbGF5U3RhdGlvbi5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTYgKzI2LDI3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV0tQYWdlUHJpdmF0ZVBsYXlTdGF0aW9uLmgiCiAK
KyNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5LmgiCisjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94
eUNvb3JkaW5hdGVkR3JhcGhpY3MuaCIKICNpbmNsdWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50
LmgiCiAjaW5jbHVkZSAiTmF0aXZlV2ViTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIk5hdGl2ZVdl
YldoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJXZWJFdmVudEZhY3RvcnkuaCIKICNpbmNsdWRlICJX
ZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlIDxjYWlyby5oPgogI2luY2x1ZGUgPHdwZS93cGUuaD4K
IAotdm9pZCBXS1BhZ2VTZXRTaXplKFdLUGFnZVJlZiBwYWdlUmVmLCBXS1NpemUgc2l6ZSkKK3N0
YXRpYyB2b2lkIGRyYXdQYWdlQmFja2dyb3VuZChjYWlyb190KiBjdHgsIGNvbnN0IE9wdGlvbmFs
PFdlYkNvcmU6OkNvbG9yPiYgYmFja2dyb3VuZENvbG9yLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiByZWN0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKCFiYWNrZ3JvdW5kQ29s
b3IgfHwgYmFja2dyb3VuZENvbG9yLnZhbHVlKCkuaXNWaXNpYmxlKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gYmFja2dyb3VuZENvbG9yLnZhbHVlKCkudG9T
UkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CisKKyAgICBjYWlyb19zZXRfc291cmNlX3JnYmEoY3R4LCBy
LCBnLCBiLCBhKTsKKyAgICBjYWlyb19yZWN0YW5nbGUoY3R4LCByZWN0LngoKSwgcmVjdC55KCks
IHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGN0
eCwgQ0FJUk9fT1BFUkFUT1JfT1ZFUik7CisgICAgY2Fpcm9fZmlsbChjdHgpOwogfQogCiB2b2lk
IFdLUGFnZUhhbmRsZUtleWJvYXJkRXZlbnQoV0tQYWdlUmVmIHBhZ2VSZWYsIFdLS2V5Ym9hcmRF
dmVudCBldmVudCkKQEAgLTczLDExICs4NCwxNiBAQCB2b2lkIFdLUGFnZUhhbmRsZU1vdXNlRXZl
bnQoV0tQYWdlUmVmIHBhZ2VSZWYsIFdLTW91c2VFdmVudCBldmVudCkKIAogICAgIHN3aXRjaCAo
ZXZlbnQudHlwZSkgewogICAgIGNhc2Uga1dLRXZlbnRNb3VzZURvd246CisgICAgICAgIHdwZUV2
ZW50LnR5cGUgPSB3cGVfaW5wdXRfcG9pbnRlcl9ldmVudF90eXBlX2J1dHRvbjsKKyAgICAgICAg
d3BlRXZlbnQuc3RhdGUgPSAxOworICAgICAgICBicmVhazsKICAgICBjYXNlIGtXS0V2ZW50TW91
c2VVcDoKICAgICAgICAgd3BlRXZlbnQudHlwZSA9IHdwZV9pbnB1dF9wb2ludGVyX2V2ZW50X3R5
cGVfYnV0dG9uOworICAgICAgICB3cGVFdmVudC5zdGF0ZSA9IDA7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2Uga1dLRXZlbnRNb3VzZU1vdmU6CiAgICAgICAgIHdwZUV2ZW50LnR5cGUgPSB3cGVf
aW5wdXRfcG9pbnRlcl9ldmVudF90eXBlX21vdGlvbjsKKyAgICAgICAgd3BlRXZlbnQuc3RhdGUg
PSAwOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKQEAgLTEwNCw3ICsxMjAsNiBAQCB2b2lkIFdLUGFnZUhhbmRsZU1vdXNlRXZlbnQo
V0tQYWdlUmVmIHBhZ2VSZWYsIFdLTW91c2VFdmVudCBldmVudCkKICAgICB3cGVFdmVudC50aW1l
ID0gMDsKICAgICB3cGVFdmVudC54ID0gZXZlbnQucG9zaXRpb24ueDsKICAgICB3cGVFdmVudC55
ID0gZXZlbnQucG9zaXRpb24ueTsKLSAgICB3cGVFdmVudC5zdGF0ZSA9IDA7CiAgICAgd3BlRXZl
bnQubW9kaWZpZXJzID0gMDsgLy8gVE9ETzogSGFuZGxlIG1vZGlmaWVycy4KIAogICAgIGNvbnN0
IGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gMTsKQEAgLTEzMiwzICsxNDcsMzQgQEAgdm9pZCBX
S1BhZ2VIYW5kbGVXaGVlbEV2ZW50KFdLUGFnZVJlZiBwYWdlUmVmLCBXS1doZWVsRXZlbnQgZXZl
bnQpCiAKICAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+aGFuZGxlV2hlZWxFdmVudChOYXRp
dmVXZWJXaGVlbEV2ZW50KCZ3cGVFdmVudC5iYXNlLCBkZXZpY2VTY2FsZUZhY3RvciwgV2ViV2hl
ZWxFdmVudDo6UGhhc2U6OlBoYXNlTm9uZSwgV2ViV2hlZWxFdmVudDo6UGhhc2U6OlBoYXNlTm9u
ZSkpOwogfQorCit2b2lkIFdLUGFnZVBhaW50KFdLUGFnZVJlZiBwYWdlUmVmLCB1bnNpZ25lZCBj
aGFyKiBzdXJmYWNlRGF0YSwgV0tTaXplIHdrU3VyZmFjZVNpemUsIFdLUmVjdCB3a1BhaW50UmVj
dCkKK3sKKyAgICBhdXRvIHN1cmZhY2VTaXplID0gV2ViS2l0Ojp0b0ludFNpemUod2tTdXJmYWNl
U2l6ZSk7CisgICAgYXV0byBwYWludFJlY3QgPSBXZWJLaXQ6OnRvSW50UmVjdCh3a1BhaW50UmVj
dCk7CisgICAgaWYgKCFzdXJmYWNlRGF0YSB8fCBzdXJmYWNlU2l6ZS5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGNvbnN0IGNhaXJvX2Zvcm1hdF90IGZvcm1hdCA9IENBSVJPX0ZP
Uk1BVF9BUkdCMzI7CisgICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoc3VyZmFjZURhdGEsIGZvcm1hdCwgc3VyZmFjZVNpemUu
d2lkdGgoKSwgc3VyZmFjZVNpemUuaGVpZ2h0KCksIGNhaXJvX2Zvcm1hdF9zdHJpZGVfZm9yX3dp
ZHRoKGZvcm1hdCwgc3VyZmFjZVNpemUud2lkdGgoKSkpOworICAgIGlmIChjYWlyb19zdXJmYWNl
X3N0YXR1cyhzdXJmYWNlKSAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJu
OworCisgICAgY2Fpcm9fdCogY3R4ID0gY2Fpcm9fY3JlYXRlKHN1cmZhY2UpOworCisgICAgYXV0
byBwYWdlID0gV2ViS2l0Ojp0b0ltcGwocGFnZVJlZik7CisgICAgYXV0byYgYmFja2dyb3VuZENv
bG9yID0gcGFnZS0+YmFja2dyb3VuZENvbG9yKCk7CisgICAgcGFnZS0+ZW5kUHJpbnRpbmcoKTsK
KyAgICBpZiAoYXV0byogZHJhd2luZ0FyZWEgPSBzdGF0aWNfY2FzdDxXZWJLaXQ6OkRyYXdpbmdB
cmVhUHJveHlDb29yZGluYXRlZEdyYXBoaWNzKj4ocGFnZS0+ZHJhd2luZ0FyZWEoKSkpIHsKKyAg
ICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBwb3J0IFdlYktpdDEncyByZWN0IGNvYWxlc2Npbmcg
bG9naWMgaGVyZS4KKyAgICAgICAgV2ViQ29yZTo6UmVnaW9uIHVucGFpbnRlZFJlZ2lvbjsKKyAg
ICAgICAgZHJhd2luZ0FyZWEtPnBhaW50KGN0eCwgcGFpbnRSZWN0LCB1bnBhaW50ZWRSZWdpb24p
OworCisgICAgICAgIGZvciAoY29uc3QgYXV0byYgcmVjdCA6IHVucGFpbnRlZFJlZ2lvbi5yZWN0
cygpKQorICAgICAgICAgICAgZHJhd1BhZ2VCYWNrZ3JvdW5kKGN0eCwgYmFja2dyb3VuZENvbG9y
LCByZWN0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgZHJhd1BhZ2VCYWNrZ3JvdW5kKGN0eCwgYmFj
a2dyb3VuZENvbG9yLCBwYWludFJlY3QpOworCisgICAgY2Fpcm9fZGVzdHJveShjdHgpOworICAg
IGNhaXJvX3N1cmZhY2VfZGVzdHJveShzdXJmYWNlKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLUGFnZVByaXZhdGVQbGF5U3RhdGlv
bi5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tQYWdlUHJp
dmF0ZVBsYXlTdGF0aW9uLmgKaW5kZXggZDlkNjE4ZTVmMzk3ZjRkODFhZTZkOGNlNDJjOThjN2Fl
MzJmOGRhYy4uNjc0OTI0NjYyOWVkZDI2ZTlhZjk5NTdlZDQ1YWE2ZjY5ZWNjMDExOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tQYWdlUHJp
dmF0ZVBsYXlTdGF0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxh
eXN0YXRpb24vV0tQYWdlUHJpdmF0ZVBsYXlTdGF0aW9uLmgKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IElu
Yy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsOSArMzIsMTEgQEAKIGV4
dGVybiAiQyIgewogI2VuZGlmCiAKLVdLX0VYUE9SVCB2b2lkIFdLUGFnZUhhbmRsZUtleWJvYXJk
RXZlbnQoV0tQYWdlUmVmIHBhZ2UsIFdLS2V5Ym9hcmRFdmVudCk7Ci1XS19FWFBPUlQgdm9pZCBX
S1BhZ2VIYW5kbGVNb3VzZUV2ZW50KFdLUGFnZVJlZiBwYWdlLCBXS01vdXNlRXZlbnQpOwotV0tf
RVhQT1JUIHZvaWQgV0tQYWdlSGFuZGxlV2hlZWxFdmVudChXS1BhZ2VSZWYgcGFnZSwgV0tXaGVl
bEV2ZW50KTsKK1dLX0VYUE9SVCB2b2lkIFdLUGFnZUhhbmRsZUtleWJvYXJkRXZlbnQoV0tQYWdl
UmVmLCBXS0tleWJvYXJkRXZlbnQpOworV0tfRVhQT1JUIHZvaWQgV0tQYWdlSGFuZGxlTW91c2VF
dmVudChXS1BhZ2VSZWYsIFdLTW91c2VFdmVudCk7CitXS19FWFBPUlQgdm9pZCBXS1BhZ2VIYW5k
bGVXaGVlbEV2ZW50KFdLUGFnZVJlZiwgV0tXaGVlbEV2ZW50KTsKKworV0tfRVhQT1JUIHZvaWQg
V0tQYWdlUGFpbnQoV0tQYWdlUmVmLCB1bnNpZ25lZCBjaGFyKiBjYWlyb1N1cmZhY2VBUkdCMzJE
YXRhLCBXS1NpemUgc3VyZmFjZVNpemUsIFdLUmVjdCBwYWludFJlY3QpOwogCiAjaWZkZWYgX19j
cGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL3Bs
YXlzdGF0aW9uL1dLUnVuTG9vcC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9w
bGF5c3RhdGlvbi9XS1J1bkxvb3AuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIwZjM0MGJhYzllNGU0YjdjYWE3
ZTdlMzkwNDQzOTg4ZWU4MjNhNTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1J1bkxvb3AuY3BwCkBAIC0wLDAgKzEsNTkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50
IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldLUnVuTG9v
cC5oIgorCisjaW5jbHVkZSAiV2ViS2l0MkluaXRpYWxpemUuaCIKKyNpbmNsdWRlIDx3dGYvTWFp
blRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CisKK3ZvaWQgV0tSdW5Mb29wUnVu
TWFpbigpCit7CisgICAgUnVuTG9vcDo6bWFpbigpLnJ1bigpOworfQorCit2b2lkIFdLUnVuTG9v
cFN0b3BNYWluKCkKK3sKKyAgICBSdW5Mb29wOjptYWluKCkuc3RvcCgpOworfQorCit2b2lkIFdL
UnVuTG9vcENhbGxPbk1haW5UaHJlYWQoV0tSdW5Mb29wQ2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQq
IHVzZXJEYXRhKQoreworICAgIGlmICghY2FsbGJhY2spCisgICAgICAgIHJldHVybjsKKworICAg
IGNhbGxPbk1haW5UaHJlYWQoW2NhbGxiYWNrLCB1c2VyRGF0YV0oKSB7CisgICAgICAgIGNhbGxi
YWNrKHVzZXJEYXRhKTsKKyAgICB9KTsKK30KKwordm9pZCBXS1J1bkxvb3BJbml0aWFsaXplTWFp
bigpCit7CisgICAgLy8gRklYTUU6CisgICAgLy8gSW5pdGlhbGl6aW5nIFJ1bkxvb3AgYnkgSW5p
dGlhbGl6ZVdlYktpdDIoKS4KKyAgICAvLyBXS1J1bkxvb3BJbml0aWFsaXplTWFpbigpIHNob3Vs
ZCBiZSByZW5hbWVkIHRvIG1vcmUgc3RyYWlnaHRmb3J3YXJkIEFQSSBuYW1lIHRvIHdyYXAgSW5p
dGlhbGl6ZVdlYktpdDIoKS4KKyAgICBXZWJLaXQ6OkluaXRpYWxpemVXZWJLaXQyKCk7Cit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1J1
bkxvb3AuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLUnVu
TG9vcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjBjNWMwYTQzYzA1YTQ5NTZmNWIwODQwYzQ2ZTBjYjlmMGIwYjhk
MzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9wbGF5
c3RhdGlvbi9XS1J1bkxvb3AuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSA8V2ViS2l0L1dLQmFzZS5oPgorCisjaWZkZWYgX19jcGx1
c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK3R5cGVkZWYgdm9pZCgqV0tSdW5Mb29wQ2Fs
bGJhY2spKHZvaWQgKnVzZXJEYXRhKTsKKworV0tfRVhQT1JUIHZvaWQgV0tSdW5Mb29wUnVuTWFp
bigpOworV0tfRVhQT1JUIHZvaWQgV0tSdW5Mb29wU3RvcE1haW4oKTsKK1dLX0VYUE9SVCB2b2lk
IFdLUnVuTG9vcENhbGxPbk1haW5UaHJlYWQoV0tSdW5Mb29wQ2FsbGJhY2ssIHZvaWQqIHVzZXJE
YXRhKTsKK1dLX0VYUE9SVCB2b2lkIFdLUnVuTG9vcEluaXRpYWxpemVNYWluKCk7CisKKyNpZmRl
ZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1ZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0MvcGxheXN0YXRpb24vV0tWaWV3LmNwcAppbmRleCAxYmU1Mjk2ODg1YTEyM2Y4Mzg5
N2NkYThhMzFmNzgyMTIzNDYzMDVkLi5hY2MzY2YwNjRjZjc5NzA2YjRiYjQ3ZDM3NGYyZjQ4ZTQ3
YTIzNjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9wbGF5c3Rh
dGlvbi9XS1ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL3BsYXlz
dGF0aW9uL1dLVmlldy5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMTUgKzI3LDE4MiBAQAogI2luY2x1ZGUgIldLVmlldy5o
IgogCiAjaW5jbHVkZSAiQVBJUGFnZUNvbmZpZ3VyYXRpb24uaCIKKyNpbmNsdWRlICJBUElWaWV3
Q2xpZW50LmgiCiAjaW5jbHVkZSAiUGxheVN0YXRpb25XZWJWaWV3LmgiCiAjaW5jbHVkZSAiV0tB
UElDYXN0LmgiCisjaW5jbHVkZSAiV0tTaGFyZWRBUElDYXN0LmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9DdXJzb3IuaD4KKworbmFtZXNwYWNlIEFQSSB7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBDbGllbnRU
cmFpdHM8V0tWaWV3Q2xpZW50QmFzZT4geworICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxXS1ZpZXdD
bGllbnRWMD4gVmVyc2lvbnM7Cit9OworfQorCitXS0N1cnNvclR5cGUgdG9XS0N1cnNvclR5cGUo
Y29uc3QgV2ViQ29yZTo6Q3Vyc29yJiBjdXJzb3IpCit7CisgICAgc3dpdGNoIChjdXJzb3IudHlw
ZSgpKSB7CisgICAgY2FzZSBXZWJDb3JlOjpDdXJzb3I6OkhhbmQ6CisgICAgICAgIHJldHVybiBr
V0tDdXJzb3JUeXBlSGFuZDsKKyAgICBjYXNlIFdlYkNvcmU6OkN1cnNvcjo6Tm9uZToKKyAgICAg
ICAgcmV0dXJuIGtXS0N1cnNvclR5cGVOb25lOworICAgIGNhc2UgV2ViQ29yZTo6Q3Vyc29yOjpQ
b2ludGVyOgorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBrV0tDdXJzb3JUeXBlUG9pbnRl
cjsKKyAgICB9Cit9CiAKIFdLVmlld1JlZiBXS1ZpZXdDcmVhdGUoV0tQYWdlQ29uZmlndXJhdGlv
blJlZiBjb25maWd1cmF0aW9uKQogewogICAgIHJldHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6
UGxheVN0YXRpb25XZWJWaWV3OjpjcmVhdGUoKldlYktpdDo6dG9JbXBsKGNvbmZpZ3VyYXRpb24p
KS5sZWFrUmVmKCkpOwogfQogCi1XS1BhZ2VSZWYgV0tWaWV3R2V0UGFnZShXS1ZpZXdSZWYgdmll
d1JlZikKK1dLUGFnZVJlZiBXS1ZpZXdHZXRQYWdlKFdLVmlld1JlZiB2aWV3KQoreworICAgIHJl
dHVybiBXZWJLaXQ6OnRvQVBJKFdlYktpdDo6dG9JbXBsKHZpZXcpLT5wYWdlKCkpOworfQorCit2
b2lkIFdLVmlld1NldFNpemUoV0tWaWV3UmVmIHZpZXcsIFdLU2l6ZSB2aWV3U2l6ZSkKK3sKKyAg
ICBXZWJLaXQ6OnRvSW1wbCh2aWV3KS0+c2V0Vmlld1NpemUoV2ViS2l0Ojp0b0ludFNpemUodmll
d1NpemUpKTsKK30KKwordm9pZCBXS1ZpZXdTZXRGb2N1cyhXS1ZpZXdSZWYgdmlldywgYm9vbCBm
b2N1c2VkKQoreworICAgIGF1dG8gdmlld1N0YXRlID0gV2ViS2l0Ojp0b0ltcGwodmlldyktPnZp
ZXdTdGF0ZSgpOworICAgIGF1dG8gZmxhZyA9IFdlYkNvcmU6OkFjdGl2aXR5U3RhdGU6OklzRm9j
dXNlZDsKKyAgICBpZiAoZm9jdXNlZCkKKyAgICAgICAgdmlld1N0YXRlLmFkZChmbGFnKTsKKyAg
ICBlbHNlCisgICAgICAgIHZpZXdTdGF0ZS5yZW1vdmUoZmxhZyk7CisgICAgV2ViS2l0Ojp0b0lt
cGwodmlldyktPnNldFZpZXdTdGF0ZSh2aWV3U3RhdGUpOworfQorCit2b2lkIFdLVmlld1NldEFj
dGl2ZShXS1ZpZXdSZWYgdmlldywgYm9vbCBhY3RpdmUpCit7CisgICAgYXV0byB2aWV3U3RhdGUg
PSBXZWJLaXQ6OnRvSW1wbCh2aWV3KS0+dmlld1N0YXRlKCk7CisgICAgYXV0byBmbGFnID0gV2Vi
Q29yZTo6QWN0aXZpdHlTdGF0ZTo6V2luZG93SXNBY3RpdmU7CisgICAgaWYgKGFjdGl2ZSkKKyAg
ICAgICAgdmlld1N0YXRlLmFkZChmbGFnKTsKKyAgICBlbHNlCisgICAgICAgIHZpZXdTdGF0ZS5y
ZW1vdmUoZmxhZyk7CisgICAgV2ViS2l0Ojp0b0ltcGwodmlldyktPnNldFZpZXdTdGF0ZSh2aWV3
U3RhdGUpOworfQorCit2b2lkIFdLVmlld1NldFZpc2libGUoV0tWaWV3UmVmIHZpZXcsIGJvb2wg
dmlzaWJsZSkKK3sKKyAgICBhdXRvIHZpZXdTdGF0ZSA9IFdlYktpdDo6dG9JbXBsKHZpZXcpLT52
aWV3U3RhdGUoKTsKKyAgICBhdXRvIGZsYWcgPSBXZWJDb3JlOjpBY3Rpdml0eVN0YXRlOjpJc1Zp
c2libGU7CisgICAgaWYgKHZpc2libGUpCisgICAgICAgIHZpZXdTdGF0ZS5hZGQoZmxhZyk7Cisg
ICAgZWxzZQorICAgICAgICB2aWV3U3RhdGUucmVtb3ZlKGZsYWcpOworICAgIFdlYktpdDo6dG9J
bXBsKHZpZXcpLT5zZXRWaWV3U3RhdGUodmlld1N0YXRlKTsKK30KKwordm9pZCBXS1ZpZXdXaWxs
RW50ZXJGdWxsU2NyZWVuKFdLVmlld1JlZiB2aWV3KQoreworI2lmIEVOQUJMRShGVUxMU0NSRUVO
X0FQSSkKKyAgICBXZWJLaXQ6OnRvSW1wbCh2aWV3KS0+d2lsbEVudGVyRnVsbFNjcmVlbigpOwor
I2VuZGlmCit9CisKK3ZvaWQgV0tWaWV3RGlkRW50ZXJGdWxsU2NyZWVuKFdLVmlld1JlZiB2aWV3
KQoreworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBXZWJLaXQ6OnRvSW1wbCh2aWV3
KS0+ZGlkRW50ZXJGdWxsU2NyZWVuKCk7CisjZW5kaWYKK30KKwordm9pZCBXS1ZpZXdXaWxsRXhp
dEZ1bGxTY3JlZW4oV0tWaWV3UmVmIHZpZXcpCit7CisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJ
KQorICAgIFdlYktpdDo6dG9JbXBsKHZpZXcpLT53aWxsRXhpdEZ1bGxTY3JlZW4oKTsKKyNlbmRp
ZgorfQorCit2b2lkIFdLVmlld0RpZEV4aXRGdWxsU2NyZWVuKFdLVmlld1JlZiB2aWV3KQorewor
I2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBXZWJLaXQ6OnRvSW1wbCh2aWV3KS0+ZGlk
RXhpdEZ1bGxTY3JlZW4oKTsKKyNlbmRpZgorfQorCit2b2lkIFdLVmlld1JlcXVlc3RFeGl0RnVs
bFNjcmVlbihXS1ZpZXdSZWYgdmlldykKIHsKLSAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJL
aXQ6OnRvSW1wbCh2aWV3UmVmKS0+cGFnZSgpKTsKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkp
CisgICAgV2ViS2l0Ojp0b0ltcGwodmlldyktPnJlcXVlc3RFeGl0RnVsbFNjcmVlbigpOworI2Vu
ZGlmCit9CisKK2Jvb2wgV0tWaWV3SXNGdWxsU2NyZWVuKFdLVmlld1JlZiB2aWV3KQoreworI2lm
IEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwodmlldykt
PmlzRnVsbFNjcmVlbigpOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwor
dm9pZCBXS1ZpZXdTZXRWaWV3Q2xpZW50KFdLVmlld1JlZiB2aWV3LCBjb25zdCBXS1ZpZXdDbGll
bnRCYXNlKiBjbGllbnQpCit7CisgICAgY2xhc3MgVmlld0NsaWVudCBmaW5hbCA6IHB1YmxpYyBB
UEk6OkNsaWVudDxXS1ZpZXdDbGllbnRCYXNlPiwgcHVibGljIEFQSTo6Vmlld0NsaWVudCB7Cisg
ICAgcHVibGljOgorICAgICAgICBleHBsaWNpdCBWaWV3Q2xpZW50KGNvbnN0IFdLVmlld0NsaWVu
dEJhc2UqIGNsaWVudCkKKyAgICAgICAgeworICAgICAgICAgICAgaW5pdGlhbGl6ZShjbGllbnQp
OworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIHNldFZpZXdOZWVkc0Rp
c3BsYXkoV2ViS2l0OjpQbGF5U3RhdGlvbldlYlZpZXcmIHZpZXcsIGNvbnN0IFdlYkNvcmU6OlJl
Z2lvbiYgcmVnaW9uKSBmaW5hbAorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1fY2xpZW50
LnNldFZpZXdOZWVkc0Rpc3BsYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgbV9jbGllbnQuc2V0Vmlld05lZWRzRGlzcGxheShXZWJLaXQ6OnRvQVBJKCZ2aWV3KSwgV2Vi
S2l0Ojp0b0FQSShyZWdpb24uYm91bmRzKCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwor
ICAgICAgICB9CisKKyAgICAgICAgdm9pZCBlbnRlckZ1bGxTY3JlZW4oV2ViS2l0OjpQbGF5U3Rh
dGlvbldlYlZpZXcmIHZpZXcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV9jbGllbnQu
ZW50ZXJGdWxsU2NyZWVuKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIG1f
Y2xpZW50LmVudGVyRnVsbFNjcmVlbihXZWJLaXQ6OnRvQVBJKCZ2aWV3KSwgbV9jbGllbnQuYmFz
ZS5jbGllbnRJbmZvKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBleGl0RnVs
bFNjcmVlbihXZWJLaXQ6OlBsYXlTdGF0aW9uV2ViVmlldyYgdmlldykKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKCFtX2NsaWVudC5leGl0RnVsbFNjcmVlbikKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICBtX2NsaWVudC5leGl0RnVsbFNjcmVlbihXZWJLaXQ6OnRvQVBJ
KCZ2aWV3KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgdm9pZCBjbG9zZUZ1bGxTY3JlZW4oV2ViS2l0OjpQbGF5U3RhdGlvbldlYlZpZXcm
IHZpZXcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV9jbGllbnQuY2xvc2VGdWxsU2Ny
ZWVuKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIG1fY2xpZW50LmNsb3Nl
RnVsbFNjcmVlbihXZWJLaXQ6OnRvQVBJKCZ2aWV3KSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZv
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBiZWdhbkVudGVyRnVsbFNjcmVl
bihXZWJLaXQ6OlBsYXlTdGF0aW9uV2ViVmlldyYgdmlldywgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgaW5pdGlhbEZyYW1lLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBmaW5hbEZyYW1lKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoIW1fY2xpZW50LmJlZ2FuRW50ZXJGdWxsU2NyZWVuKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIG1fY2xpZW50LmJlZ2FuRW50ZXJG
dWxsU2NyZWVuKFdlYktpdDo6dG9BUEkoJnZpZXcpLCBXZWJLaXQ6OnRvQVBJKGluaXRpYWxGcmFt
ZSksIFdlYktpdDo6dG9BUEkoZmluYWxGcmFtZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgYmVnYW5FeGl0RnVsbFNjcmVlbihX
ZWJLaXQ6OlBsYXlTdGF0aW9uV2ViVmlldyYgdmlldywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
aW5pdGlhbEZyYW1lLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBmaW5hbEZyYW1lKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoIW1fY2xpZW50LmJlZ2FuRXhpdEZ1bGxTY3JlZW4pCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgbV9jbGllbnQuYmVnYW5FeGl0RnVsbFNj
cmVlbihXZWJLaXQ6OnRvQVBJKCZ2aWV3KSwgV2ViS2l0Ojp0b0FQSShpbml0aWFsRnJhbWUpLCBX
ZWJLaXQ6OnRvQVBJKGZpbmFsRnJhbWUpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAg
ICAgICB9CisKKyAgICAgICAgdm9pZCBzZXRDdXJzb3IoV2ViS2l0OjpQbGF5U3RhdGlvbldlYlZp
ZXcmIHZpZXcsIGNvbnN0IFdlYkNvcmU6OkN1cnNvciYgY3Vyc29yKSBmaW5hbAorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoIW1fY2xpZW50LnNldEN1cnNvcikKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICBtX2NsaWVudC5zZXRDdXJzb3IoV2ViS2l0Ojp0b0FQSSgmdmll
dyksIHRvV0tDdXJzb3JUeXBlKGN1cnNvciksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgV2ViS2l0Ojp0b0ltcGwodmlldyktPnNldENsaWVudCht
YWtlVW5pcXVlPFZpZXdDbGllbnQ+KGNsaWVudCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tWaWV3LmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1ZpZXcuaAppbmRleCBjNWVlNDQ3MzI1YTBm
ODVmMDViYWQxYjY5MjY1MjhiMWU2ZTk2NzEzLi41MDZjNWFmNmJjN2FlZmE5ZDlhNTUxMGViOGM3
YTBmZWZjZmE2OTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9w
bGF5c3RhdGlvbi9XS1ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9w
bGF5c3RhdGlvbi9XS1ZpZXcuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqIENvcHlyaWdodCAo
QykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSwxNCArMjUsMzAgQEAKIAogI3ByYWdtYSBvbmNlCiAK
LSNpbmNsdWRlIDxXZWJLaXQvV0tCYXNlLmg+CisjaW5jbHVkZSA8V2ViS2l0L1dLVmlld0NsaWVu
dC5oPgogCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKIFdLX0VY
UE9SVCBXS1ZpZXdSZWYgV0tWaWV3Q3JlYXRlKFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYgY29uZmln
dXJhdGlvbik7Ci1XS19FWFBPUlQgV0tQYWdlUmVmIFdLVmlld0dldFBhZ2UoV0tWaWV3UmVmIHZp
ZXcpOworCitXS19FWFBPUlQgdm9pZCBXS1ZpZXdTZXRWaWV3Q2xpZW50KFdLVmlld1JlZiwgY29u
c3QgV0tWaWV3Q2xpZW50QmFzZSopOworCitXS19FWFBPUlQgV0tQYWdlUmVmIFdLVmlld0dldFBh
Z2UoV0tWaWV3UmVmKTsKKworV0tfRVhQT1JUIHZvaWQgV0tWaWV3U2V0U2l6ZShXS1ZpZXdSZWYs
IFdLU2l6ZSB2aWV3U2l6ZSk7CisKK1dLX0VYUE9SVCB2b2lkIFdLVmlld1NldEZvY3VzKFdLVmll
d1JlZiwgYm9vbCk7CitXS19FWFBPUlQgdm9pZCBXS1ZpZXdTZXRBY3RpdmUoV0tWaWV3UmVmLCBi
b29sKTsKK1dLX0VYUE9SVCB2b2lkIFdLVmlld1NldFZpc2libGUoV0tWaWV3UmVmLCBib29sKTsK
KworV0tfRVhQT1JUIHZvaWQgV0tWaWV3V2lsbEVudGVyRnVsbFNjcmVlbihXS1ZpZXdSZWYpOwor
V0tfRVhQT1JUIHZvaWQgV0tWaWV3RGlkRW50ZXJGdWxsU2NyZWVuKFdLVmlld1JlZik7CitXS19F
WFBPUlQgdm9pZCBXS1ZpZXdXaWxsRXhpdEZ1bGxTY3JlZW4oV0tWaWV3UmVmKTsKK1dLX0VYUE9S
VCB2b2lkIFdLVmlld0RpZEV4aXRGdWxsU2NyZWVuKFdLVmlld1JlZik7CitXS19FWFBPUlQgdm9p
ZCBXS1ZpZXdSZXF1ZXN0RXhpdEZ1bGxTY3JlZW4oV0tWaWV3UmVmKTsKK1dLX0VYUE9SVCBib29s
IFdLVmlld0lzRnVsbFNjcmVlbihXS1ZpZXdSZWYpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dL
Vmlld0NsaWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24v
V0tWaWV3Q2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGI0NTAyMzc5OTAwODhmMmY2ZDZlOTQxM2UxZjM0
N2U4ZjdkN2E5NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL3BsYXlzdGF0aW9uL1dLVmlld0NsaWVudC5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxXZWJLaXQvV0tCYXNlLmg+CisjaW5j
bHVkZSA8V2ViS2l0L1dLR2VvbWV0cnkuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4g
IkMiIHsKKyNlbmRpZgorCitlbnVtIHsKKyAgICBrV0tDdXJzb3JUeXBlUG9pbnRlciA9IDAsCisg
ICAga1dLQ3Vyc29yVHlwZUhhbmQgPSAyLAorICAgIGtXS0N1cnNvclR5cGVOb25lID0gMzcsCit9
OwordHlwZWRlZiB1aW50MzJfdCBXS0N1cnNvclR5cGU7CisKK3R5cGVkZWYgdm9pZCgqV0tWaWV3
U2V0Vmlld05lZWRzRGlzcGxheUNhbGxiYWNrKShXS1ZpZXdSZWYgdmlldywgV0tSZWN0IHJlY3Qs
IGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwordHlwZWRlZiB2b2lkKCpXS1ZpZXdFbnRlckZ1bGxT
Y3JlZW4pKFdLVmlld1JlZiB2aWV3LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK3R5cGVkZWYg
dm9pZCgqV0tWaWV3RXhpdEZ1bGxTY3JlZW4pKFdLVmlld1JlZiB2aWV3LCBjb25zdCB2b2lkKiBj
bGllbnRJbmZvKTsKK3R5cGVkZWYgdm9pZCgqV0tWaWV3Q2xvc2VGdWxsU2NyZWVuKShXS1ZpZXdS
ZWYgdmlldywgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cit0eXBlZGVmIHZvaWQoKldLVmlld0Jl
Z2FuRW50ZXJGdWxsU2NyZWVuKShXS1ZpZXdSZWYgdmlldywgY29uc3QgV0tSZWN0IGluaXRpYWxG
cmFtZSwgY29uc3QgV0tSZWN0IGZpbmFsRnJhbWUsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwor
dHlwZWRlZiB2b2lkKCpXS1ZpZXdCZWdhbkV4aXRGdWxsU2NyZWVuKShXS1ZpZXdSZWYgdmlldywg
Y29uc3QgV0tSZWN0IGluaXRpYWxGcmFtZSwgY29uc3QgV0tSZWN0IGZpbmFsRnJhbWUsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pOwordHlwZWRlZiB2b2lkKCpXS1ZpZXdTZXRDdXJzb3JDYWxsYmFj
aykoV0tWaWV3UmVmIHZpZXcsIFdLQ3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBjb25zdCB2b2lkKiBj
bGllbnRJbmZvKTsKKwordHlwZWRlZiBzdHJ1Y3QgV0tWaWV3Q2xpZW50QmFzZSB7CisgICAgaW50
IHZlcnNpb247CisgICAgY29uc3Qgdm9pZCogY2xpZW50SW5mbzsKK30gV0tWaWV3Q2xpZW50QmFz
ZTsKKwordHlwZWRlZiBzdHJ1Y3QgV0tWaWV3Q2xpZW50VjAgeworICAgIFdLVmlld0NsaWVudEJh
c2UgYmFzZTsKKworICAgIC8vIHZlcnNpb24gMAorICAgIFdLVmlld1NldFZpZXdOZWVkc0Rpc3Bs
YXlDYWxsYmFjayBzZXRWaWV3TmVlZHNEaXNwbGF5OworICAgIFdLVmlld0VudGVyRnVsbFNjcmVl
biBlbnRlckZ1bGxTY3JlZW47CisgICAgV0tWaWV3RXhpdEZ1bGxTY3JlZW4gZXhpdEZ1bGxTY3Jl
ZW47CisgICAgV0tWaWV3Q2xvc2VGdWxsU2NyZWVuIGNsb3NlRnVsbFNjcmVlbjsKKyAgICBXS1Zp
ZXdCZWdhbkVudGVyRnVsbFNjcmVlbiBiZWdhbkVudGVyRnVsbFNjcmVlbjsKKyAgICBXS1ZpZXdC
ZWdhbkV4aXRGdWxsU2NyZWVuIGJlZ2FuRXhpdEZ1bGxTY3JlZW47CisgICAgV0tWaWV3U2V0Q3Vy
c29yQ2FsbGJhY2sgc2V0Q3Vyc29yOworfSBXS1ZpZXdDbGllbnRWMDsKKworI2lmZGVmIF9fY3Bs
dXNwbHVzCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9wbGF5c3RhdGlvbi9BUElWaWV3Q2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvcGxheXN0YXRpb24vQVBJVmlld0NsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVkNDhjMzgzZGRmNjE2
YTU2NjQ0ODEyYzNhOTlmZjFiZjU5MTQ5NWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvcGxheXN0YXRpb24vQVBJVmlld0NsaWVudC5oCkBAIC0wLDAgKzEs
NTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRh
aW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKK2NsYXNzIEN1cnNvcjsKK2NsYXNzIEludFJlY3Q7CitjbGFzcyBSZWdpb247Cit9CisKK25h
bWVzcGFjZSBXZWJLaXQgeworY2xhc3MgUGxheVN0YXRpb25XZWJWaWV3OworfQorCituYW1lc3Bh
Y2UgQVBJIHsKKworY2xhc3MgVmlld0NsaWVudCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Vmlld0NsaWVudCgpID0gZGVmYXVsdDsKKworICAg
IHZpcnR1YWwgdm9pZCBzZXRWaWV3TmVlZHNEaXNwbGF5KFdlYktpdDo6UGxheVN0YXRpb25XZWJW
aWV3JiwgY29uc3QgV2ViQ29yZTo6UmVnaW9uJikgeyB9CisgICAgdmlydHVhbCB2b2lkIGVudGVy
RnVsbFNjcmVlbihXZWJLaXQ6OlBsYXlTdGF0aW9uV2ViVmlldyYpIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBleGl0RnVsbFNjcmVlbihXZWJLaXQ6OlBsYXlTdGF0aW9uV2ViVmlldyYpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBjbG9zZUZ1bGxTY3JlZW4oV2ViS2l0OjpQbGF5U3RhdGlvbldlYlZpZXcm
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYmVnYW5FbnRlckZ1bGxTY3JlZW4oV2ViS2l0OjpQbGF5
U3RhdGlvbldlYlZpZXcmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29uc3QgV2ViQ29yZTo6
SW50UmVjdCYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBiZWdhbkV4aXRGdWxsU2NyZWVuKFdlYktp
dDo6UGxheVN0YXRpb25XZWJWaWV3JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29yKFdlYktpdDo6
UGxheVN0YXRpb25XZWJWaWV3JiB2aWV3LCBjb25zdCBXZWJDb3JlOjpDdXJzb3ImIGN1cnNvcikg
eyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBBUEkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL3BsYXlzdGF0aW9uL1BhZ2VDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL3BsYXlzdGF0aW9uL1BhZ2VDbGllbnRJbXBsLmNwcAppbmRleCA2NGE0Y2E3MmY5
NWFkOGE0Y2RiYmU2YWQ4N2I2N2UwZGIwODIwODliLi4zOTQxZTlmYjE4NmZlMDJjNTE2YzJjODk0
NzkzYjI4YTQ5MDUyN2FmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9wbGF5
c3RhdGlvbi9QYWdlQ2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
cGxheXN0YXRpb24vUGFnZUNsaWVudEltcGwuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICog
Q29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ1LDYgKzQ1LDcgQEAgc3RkOjp1bmlx
dWVfcHRyPERyYXdpbmdBcmVhUHJveHk+IFBhZ2VDbGllbnRJbXBsOjpjcmVhdGVEcmF3aW5nQXJl
YVByb3h5KFdlYlByb2MKIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0Vmlld05lZWRzRGlzcGxh
eShjb25zdCBXZWJDb3JlOjpSZWdpb24mIHJlZ2lvbikKIHsKKyAgICBtX3ZpZXcuc2V0Vmlld05l
ZWRzRGlzcGxheShyZWdpb24pOwogfQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpyZXF1ZXN0U2Ny
b2xsKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYgc2Nyb2xsT3JpZ2luKQpAQCAtNTgsMjggKzU5LDI3IEBAIFdlYkNvcmU6
OkZsb2F0UG9pbnQgUGFnZUNsaWVudEltcGw6OnZpZXdTY3JvbGxQb3NpdGlvbigpCiAKIFdlYkNv
cmU6OkludFNpemUgUGFnZUNsaWVudEltcGw6OnZpZXdTaXplKCkKIHsKLSAgICByZXR1cm4gV2Vi
Q29yZTo6SW50U2l6ZSB7IH07CisgICAgcmV0dXJuIG1fdmlldy52aWV3U2l6ZSgpOwogfQogCiBi
b29sIFBhZ2VDbGllbnRJbXBsOjppc1ZpZXdXaW5kb3dBY3RpdmUoKQogewotICAgIHJldHVybiBt
X3ZpZXcuaXNBY3RpdmUoKTsKKyAgICByZXR1cm4gbV92aWV3LnZpZXdTdGF0ZSgpLmNvbnRhaW5z
KFdlYkNvcmU6OkFjdGl2aXR5U3RhdGU6OldpbmRvd0lzQWN0aXZlKTsKIH0KIAogYm9vbCBQYWdl
Q2xpZW50SW1wbDo6aXNWaWV3Rm9jdXNlZCgpCiB7Ci0gICAgcmV0dXJuIG1fdmlldy5pc0ZvY3Vz
ZWQoKTsKKyAgICByZXR1cm4gbV92aWV3LnZpZXdTdGF0ZSgpLmNvbnRhaW5zKFdlYkNvcmU6OkFj
dGl2aXR5U3RhdGU6OklzRm9jdXNlZCk7CiB9CiAKIGJvb2wgUGFnZUNsaWVudEltcGw6OmlzVmll
d1Zpc2libGUoKQogewotICAgIHJldHVybiBtX3ZpZXcuaXNWaXNpYmxlKCk7CisgICAgcmV0dXJu
IG1fdmlldy52aWV3U3RhdGUoKS5jb250YWlucyhXZWJDb3JlOjpBY3Rpdml0eVN0YXRlOjpJc1Zp
c2libGUpOwogfQogCiBib29sIFBhZ2VDbGllbnRJbXBsOjppc1ZpZXdJbldpbmRvdygpCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gbV92aWV3
LnZpZXdTdGF0ZSgpLmNvbnRhaW5zKFdlYkNvcmU6OkFjdGl2aXR5U3RhdGU6OklzSW5XaW5kb3cp
OwogfQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpwcm9jZXNzRGlkRXhpdCgpCkBAIC04OSw2ICs4
OSw3IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OnByb2Nlc3NEaWRFeGl0KCkKIHZvaWQgUGFnZUNs
aWVudEltcGw6OmRpZFJlbGF1bmNoUHJvY2VzcygpCiB7CiB9CisKIHZvaWQgUGFnZUNsaWVudElt
cGw6OnBhZ2VDbG9zZWQoKQogewogfQpAQCAtMTE3LDcgKzExOCw3IEBAIHZvaWQgUGFnZUNsaWVu
dEltcGw6OmRpZENoYW5nZUNvbnRlbnRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUp
CiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OnNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3Im
IGN1cnNvcikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIG1fdmlldy5zZXRDdXJzb3Io
Y3Vyc29yKTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0Q3Vyc29ySGlkZGVuVW50aWxN
b3VzZU1vdmVzKGJvb2wpCkBAIC0yMTAsNiArMjExLDM2IEBAIFdlYkZ1bGxTY3JlZW5NYW5hZ2Vy
UHJveHlDbGllbnQmIFBhZ2VDbGllbnRJbXBsOjpmdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50
KCkKIHsKICAgICByZXR1cm4gKihXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50Kil0aGlz
OwogfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpjbG9zZUZ1bGxTY3JlZW5NYW5hZ2VyKCkKK3sK
KyAgICBtX3ZpZXcuY2xvc2VGdWxsU2NyZWVuTWFuYWdlcigpOworfQorCitib29sIFBhZ2VDbGll
bnRJbXBsOjppc0Z1bGxTY3JlZW4oKQoreworICAgIHJldHVybiBtX3ZpZXcuaXNGdWxsU2NyZWVu
KCk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmVudGVyRnVsbFNjcmVlbigpCit7CisgICAg
bV92aWV3LmVudGVyRnVsbFNjcmVlbigpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpleGl0
RnVsbFNjcmVlbigpCit7CisgICAgbV92aWV3LmV4aXRGdWxsU2NyZWVuKCk7Cit9CisKK3ZvaWQg
UGFnZUNsaWVudEltcGw6OmJlZ2FuRW50ZXJGdWxsU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIGluaXRpYWxGcmFtZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZmluYWxGcmFtZSkKK3sK
KyAgICBtX3ZpZXcuYmVnYW5FbnRlckZ1bGxTY3JlZW4oaW5pdGlhbEZyYW1lLCBmaW5hbEZyYW1l
KTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6YmVnYW5FeGl0RnVsbFNjcmVlbihjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBpbml0aWFsRnJhbWUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGZp
bmFsRnJhbWUpCit7CisgICAgbV92aWV3LmJlZ2FuRXhpdEZ1bGxTY3JlZW4oaW5pdGlhbEZyYW1l
LCBmaW5hbEZyYW1lKTsKK30KICNlbmRpZgogCiAvLyBDdXN0b20gcmVwcmVzZW50YXRpb25zLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvcGxheXN0YXRpb24vUGFnZUNsaWVu
dEltcGwuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3BsYXlzdGF0aW9uL1BhZ2VDbGllbnRJ
bXBsLmgKaW5kZXggMzhiOTdlYmI1YTQ2NjNkOWMwMTkyZDAyNjAwOThiZmQxYjA3OTVjMi4uNzVi
ZTlkMDU2MmZiNzE0ODEyZGE2OWVjMzZmZDdiMTc1NDQ2NTk0OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvcGxheXN0YXRpb24vUGFnZUNsaWVudEltcGwuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9wbGF5c3RhdGlvbi9QYWdlQ2xpZW50SW1wbC5oCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVy
dGFpbm1lbnQgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50
ZXJ0YWlubWVudCBJbmMuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYg
KzI2LDkgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiUGFnZUNsaWVudC5oIgorI2lmIEVO
QUJMRShGVUxMU0NSRUVOX0FQSSkKKyNpbmNsdWRlICJXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5
LmgiCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTExMSw2ICsxMTQsMTMgQEAg
cHJpdmF0ZToKICAgICAvLyBBdXhpbGlhcnkgQ2xpZW50IENyZWF0aW9uCiAjaWYgRU5BQkxFKEZV
TExTQ1JFRU5fQVBJKQogICAgIFdlYkZ1bGxTY3JlZW5NYW5hZ2VyUHJveHlDbGllbnQmIGZ1bGxT
Y3JlZW5NYW5hZ2VyUHJveHlDbGllbnQoKSBmaW5hbDsKKworICAgIHZvaWQgY2xvc2VGdWxsU2Ny
ZWVuTWFuYWdlcigpIGZpbmFsOworICAgIGJvb2wgaXNGdWxsU2NyZWVuKCkgZmluYWw7CisgICAg
dm9pZCBlbnRlckZ1bGxTY3JlZW4oKSBmaW5hbDsKKyAgICB2b2lkIGV4aXRGdWxsU2NyZWVuKCkg
ZmluYWw7CisgICAgdm9pZCBiZWdhbkVudGVyRnVsbFNjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiBpbml0aWFsRnJhbWUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGZpbmFsRnJhbWUpIGZp
bmFsOworICAgIHZvaWQgYmVnYW5FeGl0RnVsbFNjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiBpbml0aWFsRnJhbWUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGZpbmFsRnJhbWUpIGZpbmFs
OwogI2VuZGlmCiAKICAgICAvLyBDdXN0b20gcmVwcmVzZW50YXRpb25zLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvcGxheXN0YXRpb24vUGxheVN0YXRpb25XZWJWaWV3LmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3BsYXlzdGF0aW9uL1BsYXlTdGF0aW9uV2ViVmll
dy5jcHAKaW5kZXggZmViMWE3MjI0MjViZjkyYzU5NGNjYWRkMDkwZTZhODNjMWRkNDUxMi4uYTY0
NWQyZTA2MzE4MzYyMDEyOGQ3NDE2MzMxMDkyOTA2NTBjODQ0OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvcGxheXN0YXRpb24vUGxheVN0YXRpb25XZWJWaWV3LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9wbGF5c3RhdGlvbi9QbGF5U3RhdGlvbldlYlZpZXcu
Y3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVy
YWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50
ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTM5LDYgKzM5LDcgQEAgUmVmUHRyPFBsYXlTdGF0aW9uV2ViVmlldz4gUGxheVN0YXRp
b25XZWJWaWV3OjpjcmVhdGUoY29uc3QgQVBJOjpQYWdlQ29uZmlndXJhdGkKIAogUGxheVN0YXRp
b25XZWJWaWV3OjpQbGF5U3RhdGlvbldlYlZpZXcoY29uc3QgQVBJOjpQYWdlQ29uZmlndXJhdGlv
biYgY29uZikKICAgICA6IG1fcGFnZUNsaWVudChtYWtlVW5pcXVlPFBhZ2VDbGllbnRJbXBsPigq
dGhpcykpCisgICAgLCBtX3ZpZXdTdGF0ZUZsYWdzIHsgV2ViQ29yZTo6QWN0aXZpdHlTdGF0ZTo6
V2luZG93SXNBY3RpdmUsIFdlYkNvcmU6OkFjdGl2aXR5U3RhdGU6OklzRm9jdXNlZCwgV2ViQ29y
ZTo6QWN0aXZpdHlTdGF0ZTo6SXNWaXNpYmxlLCBXZWJDb3JlOjpBY3Rpdml0eVN0YXRlOjpJc0lu
V2luZG93IH0KIHsKICAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBjb25mLmNvcHkoKTsKICAgICBh
dXRvKiBwb29sID0gY29uZmlndXJhdGlvbi0+cHJvY2Vzc1Bvb2woKTsKQEAgLTUxLDE5ICs1Miwx
MDQgQEAgUGxheVN0YXRpb25XZWJWaWV3Ojp+UGxheVN0YXRpb25XZWJWaWV3KCkKIHsKIH0KIAot
Ym9vbCBQbGF5U3RhdGlvbldlYlZpZXc6OmlzQWN0aXZlKCkgY29uc3QKK3ZvaWQgUGxheVN0YXRp
b25XZWJWaWV3OjpzZXRDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6Vmlld0NsaWVudD4mJiBj
bGllbnQpCiB7Ci0gICAgcmV0dXJuIG1fYWN0aXZlOworICAgIGlmICghY2xpZW50KQorICAgICAg
ICBtX2NsaWVudCA9IG1ha2VVbmlxdWU8QVBJOjpWaWV3Q2xpZW50PigpOworICAgIGVsc2UKKyAg
ICAgICAgbV9jbGllbnQgPSBXVEZNb3ZlKGNsaWVudCk7CiB9CiAKLWJvb2wgUGxheVN0YXRpb25X
ZWJWaWV3Ojppc0ZvY3VzZWQoKSBjb25zdAordm9pZCBQbGF5U3RhdGlvbldlYlZpZXc6OnNldFZp
ZXdTaXplKFdlYkNvcmU6OkludFNpemUgdmlld1NpemUpCiB7Ci0gICAgcmV0dXJuIG1fZm9jdXNl
ZDsKKyAgICBtX3ZpZXdTaXplID0gdmlld1NpemU7CiB9CiAKLWJvb2wgUGxheVN0YXRpb25XZWJW
aWV3Ojppc1Zpc2libGUoKSBjb25zdAordm9pZCBQbGF5U3RhdGlvbldlYlZpZXc6OnNldFZpZXdT
dGF0ZShPcHRpb25TZXQ8V2ViQ29yZTo6QWN0aXZpdHlTdGF0ZTo6RmxhZz4gZmxhZ3MpCiB7Ci0g
ICAgcmV0dXJuIG1fdmlzaWJsZTsKKyAgICBhdXRvIGNoYW5nZWRGbGFncyA9IG1fdmlld1N0YXRl
RmxhZ3MgXiBmbGFnczsKKyAgICBtX3ZpZXdTdGF0ZUZsYWdzID0gZmxhZ3M7CisKKyAgICBpZiAo
Y2hhbmdlZEZsYWdzKQorICAgICAgICBtX3BhZ2UtPmFjdGl2aXR5U3RhdGVEaWRDaGFuZ2UoY2hh
bmdlZEZsYWdzKTsKK30KKwordm9pZCBQbGF5U3RhdGlvbldlYlZpZXc6OnNldFZpZXdOZWVkc0Rp
c3BsYXkoY29uc3QgV2ViQ29yZTo6UmVnaW9uJiByZWdpb24pCit7CisgICAgaWYgKG1fY2xpZW50
KQorICAgICAgICBtX2NsaWVudC0+c2V0Vmlld05lZWRzRGlzcGxheSgqdGhpcywgcmVnaW9uKTsK
K30KKworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKK3ZvaWQgUGxheVN0YXRpb25XZWJWaWV3
Ojp3aWxsRW50ZXJGdWxsU2NyZWVuKCkKK3sKKyAgICBtX2lzRnVsbFNjcmVlbiA9IHRydWU7Cisg
ICAgbV9wYWdlLT5mdWxsU2NyZWVuTWFuYWdlcigpLT53aWxsRW50ZXJGdWxsU2NyZWVuKCk7Cit9
CisKK3ZvaWQgUGxheVN0YXRpb25XZWJWaWV3OjpkaWRFbnRlckZ1bGxTY3JlZW4oKQoreworICAg
IG1fcGFnZS0+ZnVsbFNjcmVlbk1hbmFnZXIoKS0+ZGlkRW50ZXJGdWxsU2NyZWVuKCk7Cit9CisK
K3ZvaWQgUGxheVN0YXRpb25XZWJWaWV3Ojp3aWxsRXhpdEZ1bGxTY3JlZW4oKQoreworICAgIG1f
cGFnZS0+ZnVsbFNjcmVlbk1hbmFnZXIoKS0+d2lsbEV4aXRGdWxsU2NyZWVuKCk7Cit9CisKK3Zv
aWQgUGxheVN0YXRpb25XZWJWaWV3OjpkaWRFeGl0RnVsbFNjcmVlbigpCit7CisgICAgbV9wYWdl
LT5mdWxsU2NyZWVuTWFuYWdlcigpLT5kaWRFeGl0RnVsbFNjcmVlbigpOworICAgIG1faXNGdWxs
U2NyZWVuID0gZmFsc2U7Cit9CisKK3ZvaWQgUGxheVN0YXRpb25XZWJWaWV3OjpyZXF1ZXN0RXhp
dEZ1bGxTY3JlZW4oKQoreworICAgIGlmIChpc0Z1bGxTY3JlZW4oKSkKKyAgICAgICAgbV9wYWdl
LT5mdWxsU2NyZWVuTWFuYWdlcigpLT5yZXF1ZXN0RXhpdEZ1bGxTY3JlZW4oKTsKK30KKwordm9p
ZCBQbGF5U3RhdGlvbldlYlZpZXc6OmNsb3NlRnVsbFNjcmVlbk1hbmFnZXIoKQoreworICAgIGlm
IChtX2NsaWVudCAmJiBpc0Z1bGxTY3JlZW4oKSkKKyAgICAgICAgbV9jbGllbnQtPmNsb3NlRnVs
bFNjcmVlbigqdGhpcyk7CisgICAgbV9pc0Z1bGxTY3JlZW4gPSBmYWxzZTsKK30KKworYm9vbCBQ
bGF5U3RhdGlvbldlYlZpZXc6OmlzRnVsbFNjcmVlbigpCit7CisgICAgcmV0dXJuIG1faXNGdWxs
U2NyZWVuOworfQorCit2b2lkIFBsYXlTdGF0aW9uV2ViVmlldzo6ZW50ZXJGdWxsU2NyZWVuKCkK
K3sKKyAgICBpZiAobV9jbGllbnQgJiYgIWlzRnVsbFNjcmVlbigpKQorICAgICAgICBtX2NsaWVu
dC0+ZW50ZXJGdWxsU2NyZWVuKCp0aGlzKTsKK30KKwordm9pZCBQbGF5U3RhdGlvbldlYlZpZXc6
OmV4aXRGdWxsU2NyZWVuKCkKK3sKKyAgICBpZiAobV9jbGllbnQgJiYgaXNGdWxsU2NyZWVuKCkp
CisgICAgICAgIG1fY2xpZW50LT5leGl0RnVsbFNjcmVlbigqdGhpcyk7Cit9CisKK3ZvaWQgUGxh
eVN0YXRpb25XZWJWaWV3OjpiZWdhbkVudGVyRnVsbFNjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiBpbml0aWFsRnJhbWUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGZpbmFsRnJhbWUpCit7
CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+YmVnYW5FbnRlckZ1bGxTY3Jl
ZW4oKnRoaXMsIGluaXRpYWxGcmFtZSwgZmluYWxGcmFtZSk7Cit9CisKK3ZvaWQgUGxheVN0YXRp
b25XZWJWaWV3OjpiZWdhbkV4aXRGdWxsU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGlu
aXRpYWxGcmFtZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZmluYWxGcmFtZSkKK3sKKyAgICBp
ZiAobV9jbGllbnQpCisgICAgICAgIG1fY2xpZW50LT5iZWdhbkV4aXRGdWxsU2NyZWVuKCp0aGlz
LCBpbml0aWFsRnJhbWUsIGZpbmFsRnJhbWUpOworfQorI2VuZGlmCisKK3ZvaWQgUGxheVN0YXRp
b25XZWJWaWV3OjpzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJiBjdXJzb3IpCit7Cisg
ICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+c2V0Q3Vyc29yKCp0aGlzLCBjdXJz
b3IpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL3BsYXlzdGF0aW9uL1BsYXlTdGF0aW9uV2ViVmlldy5oIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvcGxheXN0YXRpb24vUGxheVN0YXRpb25XZWJWaWV3LmgKaW5kZXggMTc5
NTczNjMwZGMzZWU1MzU0YzEyNTNkZDUwZTMxNjJjYTE3ZDUzMi4uMmVlYWE0MGQ1MWM4YzZhNTMw
MzhlNzQ0MGNmYWU5MzhkODA0MjkzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvcGxheXN0YXRpb24vUGxheVN0YXRpb25XZWJWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvcGxheXN0YXRpb24vUGxheVN0YXRpb25XZWJWaWV3LmgKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVu
dCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5t
ZW50IEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsNyBA
QAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBUElPYmplY3QuaCIKKyNpbmNsdWRlICJBUElW
aWV3Q2xpZW50LmgiCiAjaW5jbHVkZSAiUGFnZUNsaWVudEltcGwuaCIKICNpbmNsdWRlICJXS1Zp
ZXcuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKQEAgLTM4LDIxICszOSw0NSBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIFJlZlB0cjxQbGF5U3RhdGlvbldlYlZpZXc+IGNyZWF0ZShjb25zdCBB
UEk6OlBhZ2VDb25maWd1cmF0aW9uJik7CiAgICAgdmlydHVhbCB+UGxheVN0YXRpb25XZWJWaWV3
KCk7CiAKKyAgICB2b2lkIHNldENsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpWaWV3Q2xpZW50
PiYmKTsKKwogICAgIFdlYlBhZ2VQcm94eSogcGFnZSgpIHsgcmV0dXJuIG1fcGFnZS5nZXQoKTsg
fQogCi0gICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OwotICAgIGJvb2wgaXNGb2N1c2VkKCkgY29u
c3Q7Ci0gICAgYm9vbCBpc1Zpc2libGUoKSBjb25zdDsKKyAgICB2b2lkIHNldFZpZXdTaXplKFdl
YkNvcmU6OkludFNpemUpOworICAgIFdlYkNvcmU6OkludFNpemUgdmlld1NpemUoKSBjb25zdCB7
IHJldHVybiBtX3ZpZXdTaXplOyB9CisKKyAgICB2b2lkIHNldFZpZXdTdGF0ZShPcHRpb25TZXQ8
V2ViQ29yZTo6QWN0aXZpdHlTdGF0ZTo6RmxhZz4pOworICAgIE9wdGlvblNldDxXZWJDb3JlOjpB
Y3Rpdml0eVN0YXRlOjpGbGFnPiB2aWV3U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3ZpZXdTdGF0
ZUZsYWdzOyB9CisKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgdm9pZCB3aWxsRW50
ZXJGdWxsU2NyZWVuKCk7CisgICAgdm9pZCBkaWRFbnRlckZ1bGxTY3JlZW4oKTsKKyAgICB2b2lk
IHdpbGxFeGl0RnVsbFNjcmVlbigpOworICAgIHZvaWQgZGlkRXhpdEZ1bGxTY3JlZW4oKTsKKyAg
ICB2b2lkIHJlcXVlc3RFeGl0RnVsbFNjcmVlbigpOworI2VuZGlmCisKKyAgICAvLyBGdW5jdGlv
bnMgY2FsbGVkIGJ5IFBhZ2VDbGllbnRJbXBsCisgICAgdm9pZCBzZXRWaWV3TmVlZHNEaXNwbGF5
KGNvbnN0IFdlYkNvcmU6OlJlZ2lvbiYpOworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAg
ICBib29sIGlzRnVsbFNjcmVlbigpOworICAgIHZvaWQgY2xvc2VGdWxsU2NyZWVuTWFuYWdlcigp
OworICAgIHZvaWQgZW50ZXJGdWxsU2NyZWVuKCk7CisgICAgdm9pZCBleGl0RnVsbFNjcmVlbigp
OworICAgIHZvaWQgYmVnYW5FbnRlckZ1bGxTY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyAgICB2b2lkIGJlZ2FuRXhpdEZ1bGxTY3JlZW4o
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyNlbmRp
ZgorICAgIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYpOwogCiBwcml2YXRl
OgogICAgIFBsYXlTdGF0aW9uV2ViVmlldyhjb25zdCBBUEk6OlBhZ2VDb25maWd1cmF0aW9uJik7
CiAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpWaWV3Q2xpZW50PiBtX2NsaWVudDsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8V2ViS2l0OjpQYWdlQ2xpZW50SW1wbD4gbV9wYWdlQ2xpZW50OwogICAg
IFJlZlB0cjxXZWJQYWdlUHJveHk+IG1fcGFnZTsKKyAgICBPcHRpb25TZXQ8V2ViQ29yZTo6QWN0
aXZpdHlTdGF0ZTo6RmxhZz4gbV92aWV3U3RhdGVGbGFnczsKIAotICAgIGJvb2wgbV9hY3RpdmUg
eyBmYWxzZSB9OwotICAgIGJvb2wgbV9mb2N1c2VkIHsgZmFsc2UgfTsKLSAgICBib29sIG1fdmlz
aWJsZSB7IGZhbHNlIH07CisgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3ZpZXdTaXplOwogI2lmIEVO
QUJMRShGVUxMU0NSRUVOX0FQSSkKICAgICBib29sIG1faXNGdWxsU2NyZWVuIHsgZmFsc2UgfTsK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApp
bmRleCA5NTcwZWMzYmEwNGFlM2E3MDM4MzQ5NTg4MGQwM2IyMjViZDYxZDJiLi4zMTY1ZTlmZjdi
MWUwYzE5M2FhOTNhZGIwMDcxOGUwYTFiYmE3ZTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtMzcwNCw3ICszNzA0LDcgQEAgdm9pZCBXZWJQ
YWdlOjp1cGRhdGVQcmVmZXJlbmNlcyhjb25zdCBXZWJQcmVmZXJlbmNlc1N0b3JlJiBzdG9yZSkK
IAogICAgIFNldHRpbmdzJiBzZXR0aW5ncyA9IG1fcGFnZS0+c2V0dGluZ3MoKTsKIAotI2lmICFQ
TEFURk9STShHVEspICYmICFQTEFURk9STShXSU4pCisjaWYgIVBMQVRGT1JNKEdUSykgJiYgIVBM
QVRGT1JNKFdJTikgJiYgIVBMQVRGT1JNKFBMQVlTVEFUSU9OKQogICAgIGlmICghc2V0dGluZ3Mu
YWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoKSkgewogICAgICAgICBSRUxFQVNFX0xPR19J
Rl9BTExPV0VEKExheWVycywgInVwZGF0ZVByZWZlcmVuY2VzOiBhY2NlbGVyYXRlZENvbXBvc2l0
aW5nRW5hYmxlZCBzZXR0aW5nIHdhcyBmYWxzZS4gV2ViS2l0IGNhbm5vdCBmdW5jdGlvbiBpbiB0
aGlzIG1vZGU7IGNoYW5naW5nIHNldHRpbmcgdG8gdHJ1ZSIpOwogICAgICAgICBzZXR0aW5ncy5z
ZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCh0cnVlKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9jbWFrZS9PcHRpb25zUGxheVN0YXRpb24uY21ha2UgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc1Bs
YXlTdGF0aW9uLmNtYWtlCmluZGV4IDdjMjRlNTUxZThjMzk1N2Q3NzlkY2E2YzU2MDkzNjI2MmUz
NGExNDkuLmI4MjQ4NWJlYzZmZWUwMDk1M2QwNmQ2OTM2OWJiY2ZmNTgwNTM3YzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9jbWFrZS9PcHRpb25zUGxheVN0YXRpb24uY21ha2UKKysrIGIvU291cmNlL2Nt
YWtlL09wdGlvbnNQbGF5U3RhdGlvbi5jbWFrZQpAQCAtMzMsNiArMzMsNyBAQCBXRUJLSVRfT1BU
SU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfREZHX0pJVCBQUklWQVRFIE9GRikKICMgRW5h
YmxlZCBmZWF0dXJlcwogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0FD
Q0VTU0lCSUxJVFkgUFJJVkFURSBPRkYpCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxV
RShFTkFCTEVfQVNZTkNfU0NST0xMSU5HIFBSSVZBVEUgT04pCitXRUJLSVRfT1BUSU9OX0RFRkFV
TFRfUE9SVF9WQUxVRShFTkFCTEVfRlVMTFNDUkVFTl9BUEkgUFJJVkFURSBPTikKIFdFQktJVF9P
UFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9QRVJJT0RJQ19NRU1PUllfTU9OSVRPUiBQ
UklWQVRFIE9OKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1NNT09U
SF9TQ1JPTExJTkcgUFJJVkFURSBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVF
KEVOQUJMRV9SRVNPVVJDRV9MT0FEX1NUQVRJU1RJQ1MgUFJJVkFURSBPTikKQEAgLTYzLDcgKzY0
LDYgQEAgV0VCS0lUX09QVElPTl9ERUZJTkUoRU5BQkxFX1RMU19ERUJVRyAiRW5hYmxlIFRMUyBr
ZXkgbG9nIHN1cHBvcnQiIFBSSVZBVEUgT0ZGKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRf
VkFMVUUoRU5BQkxFX1ZBUklBVElPTl9GT05UUyBQUklWQVRFIE9GRikKIAogIyBFbmFibGUgaW4g
dGhlIGZ1dHVyZQotV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0ZVTExT
Q1JFRU5fQVBJIFBSSVZBVEUgT0ZGKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUo
RU5BQkxFX0NPTlRFWFRfTUVOVVMgUFJJVkFURSBPRkYpCiAKICMgTm8gc3VwcG9ydCBwbGFubmVk
CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZDNk
ZmFmY2EyNTk3YjU3NGEyYmQ1YmFhZGZlNTM5YzdhNWQwOTliMy4uOGZhNzkyNTYzOGRjYzFjODg4
YjQ4YWQ3MmZlZjkyZGQxY2RiYTBhNiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBi
L1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDIxLTAxLTA2ICBZb3NoaWFraSBK
aXRzdWthd2EgIDx5b3NoaWFraS5qaXRzdWthd2FAc29ueS5jb20+CisKKyAgICAgICAgW1BsYXlT
dGF0aW9uXSBBZGQgTWluaUJyb3dzZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyMDM1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZCBQbGF5U3RhdGlvbiBNaW5pQnJvd3NlciBzb3VyY2VzIGFuZCBD
TWFrZUxpc3RzLnR4dC4KKworICAgICAgICAqIE1pbmlCcm93c2VyL3BsYXlzdGF0aW9uL0NNYWtl
TGlzdHMudHh0OiBBZGRlZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9JbWFn
ZUJ1dHRvbi5jcHA6IEFkZGVkLgorICAgICAgICAqIE1pbmlCcm93c2VyL3BsYXlzdGF0aW9uL0lt
YWdlQnV0dG9uLmg6IEFkZGVkLgorICAgICAgICAqIE1pbmlCcm93c2VyL3BsYXlzdGF0aW9uL01h
aW5XaW5kb3cuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9N
YWluV2luZG93Lmg6IEFkZGVkLgorICAgICAgICAqIE1pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1N0
cmluZ1V0aWxzLmg6IEFkZGVkLgorICAgICAgICAqIE1pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1Rp
dGxlQmFyLmNwcDogQWRkZWQuCisgICAgICAgICogTWluaUJyb3dzZXIvcGxheXN0YXRpb24vVGl0
bGVCYXIuaDogQWRkZWQuCisgICAgICAgICogTWluaUJyb3dzZXIvcGxheXN0YXRpb24vVG9vbGtp
dHRlblV0aWxzLmg6IEFkZGVkLgorICAgICAgICAqIE1pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1VS
TEJhci5jcHA6IEFkZGVkLgorICAgICAgICAqIE1pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1VSTEJh
ci5oOiBBZGRlZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9XZWJDb250ZXh0
LmNwcDogQWRkZWQuCisgICAgICAgICogTWluaUJyb3dzZXIvcGxheXN0YXRpb24vV2ViQ29udGV4
dC5oOiBBZGRlZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9XZWJWaWV3V2lu
ZG93LmNwcDogQWRkZWQuCisgICAgICAgICogTWluaUJyb3dzZXIvcGxheXN0YXRpb24vV2ViVmll
d1dpbmRvdy5oOiBBZGRlZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9tYWlu
LmNwcDogQWRkZWQuCisgICAgICAgIChsb2FkTGlicmFyeU9yRXhpdCk6CisgICAgICAgIChpbml0
aWFsaXplKToKKyAgICAgICAgKEFwcGxpY2F0aW9uQ2xpZW50Ojp1cGRhdGVBcHBsaWNhdGlvbik6
CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBQbGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtlOiBB
ZGRlZC4KKwogMjAyMC0xMS0yNiAgTGF1cm8gTW91cmEgIDxsbW91cmFAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBbR1RLXSBVbnJldmlld2VkLiBSZW1vdmUgbGVmdG92ZXIgdGVzdCBjYXNlIGFmdGVy
IEludGVybmV0IEV4cGxvcmVyIHF1aXJrcyBjaGFuZ2VzCmRpZmYgLS1naXQgYS9Ub29scy9NaW5p
QnJvd3Nlci9wbGF5c3RhdGlvbi9DTWFrZUxpc3RzLnR4dCBiL1Rvb2xzL01pbmlCcm93c2VyL3Bs
YXlzdGF0aW9uL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ4ODc5MGM3NTdmODcyYzVmNTc0
M2E0NTMxMzg1NGQxM2JkYTEzZTMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nl
ci9wbGF5c3RhdGlvbi9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDU5IEBACitmaW5kX2xpYnJh
cnkoVE9PTEtJVF9MSUJSQVJZIFRvb2xLaXR0ZW4pCisKK1BMQVlTVEFUSU9OX0NPUFlfU0hBUkVE
X0xJQlJBUklFUyhNaW5pQnJvd3Nlcl9Db3B5U2hhcmVkTGlicworICAgIEZJTEVTICR7VE9PTEtJ
VF9MSUJSQVJZfQorKQorCitzZXQoTWluaUJyb3dzZXJfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9S
SUVTCisgICAgIiR7V0VCS0lUX0xJQlJBUklFU19ESVJ9L2luY2x1ZGUiCisgICAgIiR7Rk9SV0FS
RElOR19IRUFERVJTX0RJUn0iCisgICAgJHtDTUFLRV9CSU5BUllfRElSfQorICAgICR7V2ViQ29y
ZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTX0RJUn0KKyAgICAiJHtDTUFLRV9TT1VSQ0VfRElS
fS9Tb3VyY2UiCisgICAgIiR7VE9PTFNfRElSfS9wbGF5c3RhdGlvbi8iCispCisKK3NldChNaW5p
QnJvd3Nlcl9TT1VSQ0VTCisgICAgSW1hZ2VCdXR0b24uY3BwCisgICAgTWFpbldpbmRvdy5jcHAK
KyAgICBUaXRsZUJhci5jcHAKKyAgICBVUkxCYXIuY3BwCisgICAgV2ViQ29udGV4dC5jcHAKKyAg
ICBXZWJWaWV3V2luZG93LmNwcAorICAgIG1haW4uY3BwCispCisKK3NldChNaW5pQnJvd3Nlcl9M
SUJSQVJJRVMKKyAgICAke0NfU1REX0xJQlJBUll9CisgICAgJHtLRVJORUxfTElCUkFSWX0KKwor
ICAgICR7VE9PTEtJVF9MSUJSQVJZfQorCisgICAgV2ViS2l0CispCisKK3NldChQTEFZU1RBVElP
Tl9NaW5pQnJvd3Nlcl9SRVFVSVJFRF9TSEFSRURfTElCUkFSSUVTCisgICAgbGliVG9vbEtpdHRl
bgorICAgIGxpYmNhaXJvCisgICAgbGliZm9udGNvbmZpZworICAgIGxpYmZyZWV0eXBlCisgICAg
bGliaGFyZmJ1enoKKyAgICBsaWJpY3UKKyAgICBsaWJwbmcxNgorKQorCitsaW5rX2RpcmVjdG9y
aWVzKCR7V0VCS0lUX0xJQlJBUklFU19ESVJ9L2xpYikKK1dFQktJVF9FWEVDVVRBQkxFX0RFQ0xB
UkUoTWluaUJyb3dzZXIpCitXRUJLSVRfRVhFQ1VUQUJMRShNaW5pQnJvd3NlcikKKworIyBNaW5p
QnJvd3NlciB3b24ndCB3b3JrIHdpdGhvdXQgdGhlc2UgcHJvY2Vzc2VzCithZGRfZGVwZW5kZW5j
aWVzKE1pbmlCcm93c2VyIFdlYlByb2Nlc3MgTmV0d29ya1Byb2Nlc3MpCisKK3RhcmdldF9saW5r
X29wdGlvbnMoTWluaUJyb3dzZXIgUFJJVkFURSAtV2wsLS1uby1kZW1hbmdsZSkKKworIworIyBT
ZXQgdGhlIGRlYnVnZ2VyIHdvcmtpbmcgZGlyZWN0b3J5IGZvciBWaXN1YWwgU3R1ZGlvCisjCitp
ZiAoJHtDTUFLRV9HRU5FUkFUT1J9IE1BVENIRVMgIlZpc3VhbCBTdHVkaW8iKQorICAgIHNldF90
YXJnZXRfcHJvcGVydGllcyhNaW5pQnJvd3NlciBQUk9QRVJUSUVTIFZTX0RFQlVHR0VSX1dPUktJ
TkdfRElSRUNUT1JZICIke0NNQUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWX0iKQorZW5kaWYg
KCkKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL0ltYWdlQnV0dG9u
LmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL0ltYWdlQnV0dG9uLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hYWU3YzgxMTcwYzM3MWRlYmM3NmE2M2JiMGY0ODQxNDE2YzFmYTc3Ci0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRpb24vSW1hZ2VCdXR0b24uY3Bw
CkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFj
dGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIkltYWdlQnV0dG9u
LmgiCisKK3ZvaWQgSW1hZ2VCdXR0b246OnNldENsaWVudChDbGllbnQmJiBjbGllbnQpCit7Cisg
ICAgbV9jbGllbnQgPSBzdGQ6Om1vdmUoY2xpZW50KTsKK30KKworYm9vbCBJbWFnZUJ1dHRvbjo6
b25Nb3VzZU1vdmUodG9vbGtpdHRlbjo6SW50UG9pbnQpCit7CisgICAgc2V0Rm9jdXNlZCgpOwor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEltYWdlQnV0dG9uOjpvbkRlY2lkZSgpCit7Cisg
ICAgaWYgKG1fY2xpZW50Lm9uRGVjaWRlKQorICAgICAgICBtX2NsaWVudC5vbkRlY2lkZSh0aGlz
KTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL0ltYWdlQnV0
dG9uLmggYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9JbWFnZUJ1dHRvbi5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmUwMDhhM2NkZTVmNWNhNGRiODYxYmM0NmFhMTIwMGFkYWIzMTcwMWMKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9JbWFnZUJ1dHRvbi5oCkBA
IC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2
ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
IDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPHRvb2xraXR0ZW4vSW1hZ2VCdXR0b24uaD4KKworY2xh
c3MgSW1hZ2VCdXR0b24gOiBwdWJsaWMgdG9vbGtpdHRlbjo6SW1hZ2VCdXR0b24geworcHVibGlj
OgorICAgIHN0cnVjdCBDbGllbnQgeworICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoSW1hZ2VC
dXR0b24qKT4gb25EZWNpZGU7CisgICAgfTsKKworICAgIHZvaWQgc2V0Q2xpZW50KENsaWVudCYm
KTsKKworcHJvdGVjdGVkOgorICAgIGJvb2wgb25Nb3VzZU1vdmUodG9vbGtpdHRlbjo6SW50UG9p
bnQpIG92ZXJyaWRlOworICAgIHZvaWQgb25EZWNpZGUoKSBvdmVycmlkZTsKKworICAgIENsaWVu
dCBtX2NsaWVudDsKK307CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlv
bi9NYWluV2luZG93LmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL01haW5XaW5k
b3cuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjVkNzk2Y2U5NjZlYzFmNjdlMmM1NDM2N2RjODA1YjRjZGYxMDA4
ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9NYWlu
V2luZG93LmNwcApAQCAtMCwwICsxLDI0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBT
b255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiTWFpbldpbmRvdy5oIgorCisjaW5jbHVkZSAiSW1hZ2VCdXR0
b24uaCIKKyNpbmNsdWRlICJUaXRsZUJhci5oIgorI2luY2x1ZGUgIlRvb2xraXR0ZW5VdGlscy5o
IgorI2luY2x1ZGUgIlVSTEJhci5oIgorI2luY2x1ZGUgIldlYlZpZXdXaW5kb3cuaCIKKyNpbmNs
dWRlIDxLZXlib2FyZENvZGVzLmg+CisjaW5jbHVkZSA8V2ViS2l0L1dLU3RyaW5nLmg+CisjaW5j
bHVkZSA8dG9vbGtpdHRlbi9BcHBsaWNhdGlvbi5oPgorCitjb25zdCBpbnQgTGluZUhlaWdodCA9
IDQwOworY29uc3QgaW50IEZvbnRTaXplID0gMzI7CisKK3VzaW5nIG5hbWVzcGFjZSB0b29sa2l0
dGVuOworCitNYWluV2luZG93OjpNYWluV2luZG93KCkKK3sKKyAgICBJbnRTaXplIHNpemUgPSBB
cHBsaWNhdGlvbjo6c2luZ2xldG9uKCkud2luZG93U2l6ZSgpOworICAgIGF1dG8gd2luZG93V2lk
dGggPSBzaXplLnc7CisgICAgYXV0byB3aW5kb3dIZWlnaHQgPSBzaXplLmg7CisgICAgc2V0U2l6
ZShzaXplKTsKKworICAgIGNvbnN0IHVuc2lnbmVkIHRpdGxlQmFySGVpZ2h0ID0gTGluZUhlaWdo
dCAqIDE7CisgICAgY29uc3QgdW5zaWduZWQgdXJsQmFySGVpZ2h0ID0gTGluZUhlaWdodCAqIDE7
CisgICAgY29uc3QgdW5zaWduZWQgd2ViVmlld0ZyYW1lWVBvc2l0aW9uID0gdGl0bGVCYXJIZWln
aHQgKyB1cmxCYXJIZWlnaHQ7CisKKyAgICAvLyBSZWdpc3RlciB3aWRnZXRzLiBETyBOT1QgQ0hB
TkdFIHRoaXMgb3JkZXIuCisgICAgbV93ZWJ2aWV3RnJhbWUgPSBjcmVhdGVBbmRBcHBlbmRDaGls
ZDxXaWRnZXQ+KHRoaXMsCisgICAgICAgIHsgd2luZG93V2lkdGgsIHdpbmRvd0hlaWdodCAtIHdl
YlZpZXdGcmFtZVlQb3NpdGlvbiB9LAorICAgICAgICB7IDAsIHdlYlZpZXdGcmFtZVlQb3NpdGlv
biB9KTsKKworICAgIG1fdGl0bGVCYXIgPSBjcmVhdGVBbmRBcHBlbmRDaGlsZDxUaXRsZUJhcj4o
dGhpcywKKyAgICAgICAgeyB3aW5kb3dXaWR0aCwgdGl0bGVCYXJIZWlnaHQgfSwKKyAgICAgICAg
eyAwLCAwIH0pOworCisgICAgY29uc3QgaW50IGNsb3NlQnV0dG9uTWFyZ2luID0gNDsKKyAgICBh
dXRvIGNsb3NlQnV0dG9uID0gY3JlYXRlQW5kQXBwZW5kQ2hpbGQ8OjpJbWFnZUJ1dHRvbj4odGhp
cywKKyAgICAgICAgeyB0aXRsZUJhckhlaWdodCAtIGNsb3NlQnV0dG9uTWFyZ2luICogMiwgdGl0
bGVCYXJIZWlnaHQgLSBjbG9zZUJ1dHRvbk1hcmdpbiAqIDIgfSwKKyAgICAgICAgeyAoaW50KSh3
aW5kb3dXaWR0aCAtIHRpdGxlQmFySGVpZ2h0ICsgY2xvc2VCdXR0b25NYXJnaW4pLCBjbG9zZUJ1
dHRvbk1hcmdpbiB9KTsKKyAgICBjbG9zZUJ1dHRvbi0+c2V0SW1hZ2VGcm9tUmVzb3VyY2UoImlj
b25fY3Jvc3MucG5nIik7CisgICAgY2xvc2VCdXR0b24tPnNldENsaWVudCh7W3RoaXNdKDo6SW1h
Z2VCdXR0b24qKSB7CisgICAgICAgIGNsb3NlV2ViVmlldyhhY3RpdmVXZWJWaWV3KCkpOworICAg
IH19KTsKKworICAgIGNvbnN0IHVuc2lnbmVkIGJ1dHRvbldpZHRoID0gMTAwOworICAgIGNvbnN0
IHVuc2lnbmVkIHVybEJhcldpZHRoID0gd2luZG93V2lkdGggLSBidXR0b25XaWR0aCAqIDM7Cisg
ICAgY29uc3QgdW5zaWduZWQgdXJsQmFyWFBvc2l0aW9uID0gYnV0dG9uV2lkdGggKiAzOworCisg
ICAgYXV0byBiYWNrQnV0dG9uID0gY3JlYXRlQW5kQXBwZW5kQ2hpbGQ8OjpJbWFnZUJ1dHRvbj4o
dGhpcywKKyAgICAgICAgeyBidXR0b25XaWR0aCwgdXJsQmFySGVpZ2h0IH0sCisgICAgICAgIHsg
MCwgdGl0bGVCYXJIZWlnaHQgfSk7CisgICAgYmFja0J1dHRvbi0+c2V0SW1hZ2VGcm9tUmVzb3Vy
Y2UoImljb25fYmFjay5wbmciKTsKKyAgICBiYWNrQnV0dG9uLT5zZXRDbGllbnQoeyBbdGhpc10o
OjpJbWFnZUJ1dHRvbiopIHsKKyAgICAgICAgYWN0aXZlV2ViVmlldygpLT5nb0JhY2soKTsKKyAg
ICB9fSk7CisKKyAgICBhdXRvIGZvcndhcmRCdXR0b24gPSBjcmVhdGVBbmRBcHBlbmRDaGlsZDw6
OkltYWdlQnV0dG9uPih0aGlzLAorICAgICAgICB7IGJ1dHRvbldpZHRoLCB1cmxCYXJIZWlnaHQg
fSwKKyAgICAgICAgeyBidXR0b25XaWR0aCwgdGl0bGVCYXJIZWlnaHQgfSk7CisgICAgZm9yd2Fy
ZEJ1dHRvbi0+c2V0SW1hZ2VGcm9tUmVzb3VyY2UoImljb25fZm9yd2FyZC5wbmciKTsKKyAgICBm
b3J3YXJkQnV0dG9uLT5zZXRDbGllbnQoeyBbdGhpc10oOjpJbWFnZUJ1dHRvbiopIHsKKyAgICAg
ICAgYWN0aXZlV2ViVmlldygpLT5nb0ZvcndhcmQoKTsKKyAgICB9fSk7CisKKyAgICBhdXRvIHJl
bG9hZEJ1dHRvbiA9IGNyZWF0ZUFuZEFwcGVuZENoaWxkPDo6SW1hZ2VCdXR0b24+KHRoaXMsCisg
ICAgICAgIHsgYnV0dG9uV2lkdGgsIHVybEJhckhlaWdodCB9LAorICAgICAgICB7IGJ1dHRvbldp
ZHRoICogMiwgdGl0bGVCYXJIZWlnaHQgfSk7CisgICAgcmVsb2FkQnV0dG9uLT5zZXRJbWFnZUZy
b21SZXNvdXJjZSgiaWNvbl9yZWxvYWQucG5nIik7CisgICAgcmVsb2FkQnV0dG9uLT5zZXRDbGll
bnQoeyBbdGhpc10oOjpJbWFnZUJ1dHRvbiopIHsKKyAgICAgICAgYWN0aXZlV2ViVmlldygpLT5y
ZWxvYWQoKTsKKyAgICB9fSk7CisKKyAgICBtX3VybEJhciA9IGNyZWF0ZUFuZEFwcGVuZENoaWxk
PDo6VVJMQmFyPih0aGlzLAorICAgICAgICB7IHVybEJhcldpZHRoLCB1cmxCYXJIZWlnaHQgfSwK
KyAgICAgICAgeyB1cmxCYXJYUG9zaXRpb24sIHRpdGxlQmFySGVpZ2h0IH0pOworICAgIG1fdXJs
QmFyLT5zZXRDbGllbnQoeyBbdGhpc10oOjpVUkxCYXIqLCBjb25zdCBjaGFyKiB1cmwpIHsgCisg
ICAgICAgIGFjdGl2ZVdlYlZpZXcoKS0+bG9hZFVSTCh1cmwpOworICAgIH19KTsKKworICAgIGNy
ZWF0ZU5ld1dlYlZpZXcobnVsbHB0cik7CisgICAgYWN0aXZlV2ViVmlldygpLT5sb2FkVVJMKCJo
dHRwczovL3dlYmtpdC5vcmciKTsKK30KKwordm9pZCBNYWluV2luZG93OjpwYWludFNlbGYodG9v
bGtpdHRlbjo6SW50UG9pbnQpCit7Cit9CisKK1dlYlZpZXdXaW5kb3cqIE1haW5XaW5kb3c6OmNy
ZWF0ZU5ld1dlYlZpZXcoV0tQYWdlQ29uZmlndXJhdGlvblJlZiBjb25maWd1cmF0aW9uKQorewor
ICAgIEludFNpemUgc2l6ZSA9IG1fd2Vidmlld0ZyYW1lLT5zaXplKCk7CisgICAgSW50UG9pbnQg
cG9zaXRpb24gPSB7IDAsIDAgfTsKKworICAgIFdlYlZpZXdXaW5kb3c6OkNsaWVudCB3aW5kb3dD
bGllbnQgeworICAgICAgICAvLyBjcmVhdGVOZXdXaW5kb3cKKyAgICAgICAgW3RoaXNdKFdLUGFn
ZUNvbmZpZ3VyYXRpb25SZWYgY29uZmlndXJhdGlvbikgLT4gV2ViVmlld1dpbmRvdyogeworICAg
ICAgICAgICAgcmV0dXJuIGNyZWF0ZU5ld1dlYlZpZXcoY29uZmlndXJhdGlvbik7CisgICAgICAg
IH0sCisKKyAgICAgICAgLy8gZGlkVXBkYXRlVGl0bGUKKyAgICAgICAgW3RoaXNdKFdlYlZpZXdX
aW5kb3cqIHZpZXcpIHsKKyAgICAgICAgICAgIGlmICh2aWV3ID09IGFjdGl2ZVdlYlZpZXcoKSkK
KyAgICAgICAgICAgICAgICB1cGRhdGVUaXRsZUJhcigpOworICAgICAgICB9LAorICAgICAgICAv
LyBkaWRVcGRhdGVVUkwKKyAgICAgICAgW3RoaXNdKFdlYlZpZXdXaW5kb3cqIHZpZXcpIHsKKyAg
ICAgICAgICAgIGlmICh2aWV3ID09IGFjdGl2ZVdlYlZpZXcoKSkKKyAgICAgICAgICAgICAgICB1
cGRhdGVVUkxCYXIoKTsKKyAgICAgICAgfSwKKyAgICAgICAgLy8gZGlkVXBkYXRlUHJvZ3Jlc3MK
KyAgICAgICAgW3RoaXNdKFdlYlZpZXdXaW5kb3cqIHZpZXcpIHsKKyAgICAgICAgICAgIGlmICh2
aWV3ID09IGFjdGl2ZVdlYlZpZXcoKSkKKyAgICAgICAgICAgICAgICB1cGRhdGVUaXRsZUJhcigp
OworICAgICAgICB9CisgICAgfTsKKworICAgIGF1dG8gd2ViVmlld1dpbmRvdyA9IFdlYlZpZXdX
aW5kb3c6OmNyZWF0ZShzdGQ6Om1vdmUod2luZG93Q2xpZW50KSwgY29uZmlndXJhdGlvbik7Cisg
ICAgd2ViVmlld1dpbmRvdy0+c2V0VXNlckRhdGEodGhpcyk7CisgICAgd2ViVmlld1dpbmRvdy0+
c2V0UG9zaXRpb24ocG9zaXRpb24pOworICAgIHdlYlZpZXdXaW5kb3ctPnNldFNpemUoeyBzaXpl
LncsIHNpemUuaCB9KTsKKyAgICB3ZWJWaWV3V2luZG93LT5maWxsKFdISVRFKTsKKworICAgIFdl
YlZpZXdXaW5kb3cqIHJhd1dlYlZpZXdXaW5kb3cgPSB3ZWJWaWV3V2luZG93LmdldCgpOworICAg
IG1fd2Vidmlld0ZyYW1lLT5hcHBlbmRDaGlsZChtb3ZlKHdlYlZpZXdXaW5kb3cpKTsKKworICAg
IC8vIEFjcml2YXRlIHRoZSBuZXcgd2luZG93LgorICAgIHJhd1dlYlZpZXdXaW5kb3ctPnNldEFj
dGl2ZSh0cnVlKTsKKyAgICBzZXRBY3RpdmVXZWJWaWV3KHJhd1dlYlZpZXdXaW5kb3cpOworICAg
IHJldHVybiByYXdXZWJWaWV3V2luZG93OworfQorCitXZWJWaWV3V2luZG93KiBNYWluV2luZG93
OjphY3RpdmVXZWJWaWV3KCkKK3sKKyAgICBhdXRvIG51bVdlYlZpZXdzID0gbV93ZWJ2aWV3RnJh
bWUtPmNoaWxkcmVuKCkuc2l6ZSgpOworICAgIGlmIChtX2FjdGl2ZVdlYlZpZXdJbmRleCA+PSBu
dW1XZWJWaWV3cykKKyAgICAgICAgbV9hY3RpdmVXZWJWaWV3SW5kZXggPSBudW1XZWJWaWV3cyAt
IDE7CisKKyAgICBhdXRvIGl0ID0gbV93ZWJ2aWV3RnJhbWUtPmNoaWxkcmVuKCkuYmVnaW4oKTsK
KyAgICBzdGQ6OmFkdmFuY2UoaXQsIG1fYWN0aXZlV2ViVmlld0luZGV4KTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8V2ViVmlld1dpbmRvdyo+KGl0LT5nZXQoKSk7Cit9CisKK3ZvaWQgTWFpbldp
bmRvdzo6c2V0QWN0aXZlV2ViVmlldyhXZWJWaWV3V2luZG93KiB2aWV3KQoreworICAgIGF1dG8m
IHdlYlZpZXdzID0gbV93ZWJ2aWV3RnJhbWUtPmNoaWxkcmVuKCk7CisgICAgdW5zaWduZWQgaSA9
IDA7CisgICAgZm9yIChhdXRvIGl0ID0gd2ViVmlld3MuYmVnaW4oKTsgaXQgIT0gd2ViVmlld3Mu
ZW5kKCk7IGl0KyssIGkrKykgeworICAgICAgICBpZiAoaXQtPmdldCgpID09IHZpZXcpIHsKKyAg
ICAgICAgICAgIG1fYWN0aXZlV2ViVmlld0luZGV4ID0gaTsKKyAgICAgICAgICAgIHN0YXRpY19j
YXN0PFdlYlZpZXdXaW5kb3cqPihpdC0+Z2V0KCkpLT5zZXRBY3RpdmUodHJ1ZSk7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8V2ViVmlld1dpbmRvdyo+KGl0LT5nZXQo
KSktPnNldEFjdGl2ZShmYWxzZSk7CisgICAgfQorICAgIHVwZGF0ZVRpdGxlQmFyKCk7CisgICAg
dXBkYXRlVVJMQmFyKCk7Cit9CisKK3ZvaWQgTWFpbldpbmRvdzo6c3dpdGNoQWN0aXZlV2ViVmll
dyhpbnQgZGVsdGEpCit7CisgICAgYXV0byBudW1XZWJWaWV3cyA9IG1fd2Vidmlld0ZyYW1lLT5j
aGlsZHJlbigpLnNpemUoKTsKKyAgICB1bnNpZ25lZCBuZXdJbmRleCA9IChtX2FjdGl2ZVdlYlZp
ZXdJbmRleCArIGRlbHRhICsgbnVtV2ViVmlld3MpICUgbnVtV2ViVmlld3M7CisgICAgYXV0byBp
dCA9IG1fd2Vidmlld0ZyYW1lLT5jaGlsZHJlbigpLmJlZ2luKCk7CisgICAgc3RkOjphZHZhbmNl
KGl0LCBuZXdJbmRleCk7CisgICAgc2V0QWN0aXZlV2ViVmlldyhzdGF0aWNfY2FzdDxXZWJWaWV3
V2luZG93Kj4oaXQtPmdldCgpKSk7Cit9CisKK3ZvaWQgTWFpbldpbmRvdzo6Y2xvc2VXZWJWaWV3
KFdlYlZpZXdXaW5kb3cqIHZpZXcpCit7CisgICAgYXV0byYgd2ViVmlld3MgPSBtX3dlYnZpZXdG
cmFtZS0+Y2hpbGRyZW4oKTsKKyAgICB1bnNpZ25lZCBpID0gMDsKKyAgICBmb3IgKGF1dG8gaXQg
PSB3ZWJWaWV3cy5iZWdpbigpOyBpdCAhPSB3ZWJWaWV3cy5lbmQoKTsgaXQrKywgaSsrKSB7Cisg
ICAgICAgIGlmIChpdC0+Z2V0KCkgPT0gdmlldykgeworICAgICAgICAgICAgbV93ZWJ2aWV3RnJh
bWUtPnJlbW92ZUNoaWxkKHZpZXcpOworICAgICAgICAgICAgaWYgKG1fd2Vidmlld0ZyYW1lLT5j
aGlsZHJlbigpLmVtcHR5KCkpCisgICAgICAgICAgICAgICAgZXhpdCgwKTsKKworICAgICAgICAg
ICAgaWYgKGkgPT0gbV9hY3RpdmVXZWJWaWV3SW5kZXgpCisgICAgICAgICAgICAgICAgc3dpdGNo
QWN0aXZlV2ViVmlldygtMSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9
Cit9CisKK2Jvb2wgTWFpbldpbmRvdzo6b25LZXlEb3duKGludDMyX3QgdmlydHVhbEtleUNvZGUp
Cit7CisgICAgc3dpdGNoICh2aXJ0dWFsS2V5Q29kZSkgeworICAgIGNhc2UgVktfTDE6CisgICAg
ICAgIGFjdGl2ZVdlYlZpZXcoKS0+Z29CYWNrKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IGNhc2UgVktfTDI6CisgICAgICAgIHN3aXRjaEFjdGl2ZVdlYlZpZXcoLTEpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIFZLX1IxOgorICAgICAgICBhY3RpdmVXZWJWaWV3KCktPmdv
Rm9yd2FyZCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIFZLX1IyOgorICAgICAg
ICBzd2l0Y2hBY3RpdmVXZWJWaWV3KDEpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNl
IFZLX1IzOgorICAgICAgICBhY3RpdmVXZWJWaWV3KCktPnRvZ2dsZVpvb21GYWN0b3IoKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBWS19UUklBTkdMRToKKyAgICAgICAgYWN0aXZl
V2ViVmlldygpLT5yZWxvYWQoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBNYWluV2luZG93Ojp1cGRhdGVUaXRsZUJhcigpCit7Cisg
ICAgYXV0byBudW1XZWJWaWV3cyA9IG1fd2Vidmlld0ZyYW1lLT5jaGlsZHJlbigpLnNpemUoKTsK
KyAgICBhdXRvIHRpdGxlID0gc3RkOjp0b19zdHJpbmcobV9hY3RpdmVXZWJWaWV3SW5kZXggKyAx
KSArICIvIiArIHN0ZDo6dG9fc3RyaW5nKG51bVdlYlZpZXdzKSArICIgIiArIGFjdGl2ZVdlYlZp
ZXcoKS0+dGl0bGUoKTsKKworICAgIGF1dG8gcHJvZ3Jlc3MgPSBhY3RpdmVXZWJWaWV3KCktPnBy
b2dyZXNzKCk7CisgICAgbV90aXRsZUJhci0+c2V0VGl0bGUodGl0bGUpOworICAgIG1fdGl0bGVC
YXItPnNldFByb2dyZXNzKHByb2dyZXNzKTsKK30KKwordm9pZCBNYWluV2luZG93Ojp1cGRhdGVV
UkxCYXIoKQoreworICAgIG1fdXJsQmFyLT5zZXRUZXh0KGFjdGl2ZVdlYlZpZXcoKS0+dXJsKCku
Y19zdHIoKSwgRm9udFNpemUpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcGxh
eXN0YXRpb24vTWFpbldpbmRvdy5oIGIvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRpb24vTWFp
bldpbmRvdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2YTRiNWRhMTQxODMyNzc5MTFlNzMwMTU0M2YxNzZmZmRi
MWFhNjcKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9N
YWluV2luZG93LmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBT
b255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgPFdlYktpdC9XS0Jhc2UuaD4KKyNpbmNsdWRlIDxsaXN0PgorI2luY2x1
ZGUgPHRvb2xraXR0ZW4vV2lkZ2V0Lmg+CisKK2NsYXNzIFRpdGxlQmFyOworY2xhc3MgVVJMQmFy
OworY2xhc3MgV2ViVmlld1dpbmRvdzsKKworY2xhc3MgTWFpbldpbmRvdyA6IHB1YmxpYyB0b29s
a2l0dGVuOjpXaWRnZXQgeworcHVibGljOgorICAgIE1haW5XaW5kb3coKTsKKworICAgIFdlYlZp
ZXdXaW5kb3cqIGFjdGl2ZVdlYlZpZXcoKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHBhaW50U2Vs
Zih0b29sa2l0dGVuOjpJbnRQb2ludCkgZmluYWw7CisgICAgYm9vbCBvbktleURvd24oaW50MzJf
dCB2aXJ0dWFsS2V5Q29kZSkgZmluYWw7CisKKyAgICB2b2lkIHVwZGF0ZVRpdGxlQmFyKCk7Cisg
ICAgdm9pZCB1cGRhdGVVUkxCYXIoKTsKKworICAgIFdlYlZpZXdXaW5kb3cqIGNyZWF0ZU5ld1dl
YlZpZXcoV0tQYWdlQ29uZmlndXJhdGlvblJlZik7CisgICAgdm9pZCBzZXRBY3RpdmVXZWJWaWV3
KFdlYlZpZXdXaW5kb3cqKTsKKyAgICB2b2lkIHN3aXRjaEFjdGl2ZVdlYlZpZXcoaW50IGRlbHRh
KTsKKyAgICB2b2lkIGNsb3NlV2ViVmlldyhXZWJWaWV3V2luZG93Kik7CisKKyAgICBUaXRsZUJh
ciogbV90aXRsZUJhciB7IG51bGxwdHIgfTsKKyAgICBVUkxCYXIqIG1fdXJsQmFyIHsgbnVsbHB0
ciB9OworICAgIFdpZGdldCogbV93ZWJ2aWV3RnJhbWUgeyBudWxscHRyIH07CisKKyAgICB1bnNp
Z25lZCBtX2FjdGl2ZVdlYlZpZXdJbmRleCB7IDAgfTsKK307CmRpZmYgLS1naXQgYS9Ub29scy9N
aW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9TdHJpbmdVdGlscy5oIGIvVG9vbHMvTWluaUJyb3dzZXIv
cGxheXN0YXRpb24vU3RyaW5nVXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNDhhZmQ3NTM0NmEwNzc4Y2I3
ZDVhNzkyOWYzMzIzNWVlOTI3OTljCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvTWluaUJyb3dz
ZXIvcGxheXN0YXRpb24vU3RyaW5nVXRpbHMuaApAQCAtMCwwICsxLDM4IEBACisvKgorKiBDb3B5
cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyoKKyog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgPFdlYktpdC9XS1N0cmluZy5oPgorI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRl
IDx2ZWN0b3I+CisKK2lubGluZSBzdGQ6OnN0cmluZyB0b1VURjhTdHJpbmcoV0tTdHJpbmdSZWYg
d2tzdHJpbmcpCit7CisgICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBXS1N0cmluZ0dldE1heGltdW1V
VEY4Q1N0cmluZ1NpemUod2tzdHJpbmcpOworICAgIHN0ZDo6dmVjdG9yPGNoYXI+IGJ1ZmZlcihi
dWZmZXJTaXplKTsKKyAgICBzaXplX3Qgc2l6ZSA9IFdLU3RyaW5nR2V0VVRGOENTdHJpbmcod2tz
dHJpbmcsIGJ1ZmZlci5kYXRhKCksIGJ1ZmZlclNpemUpOworICAgIHJldHVybiBzdGQ6OnN0cmlu
ZyB7IGJ1ZmZlci5kYXRhKCksIHNpemUgfTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93
c2VyL3BsYXlzdGF0aW9uL1RpdGxlQmFyLmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0
aW9uL1RpdGxlQmFyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MDUyMDFlMGY2OTc1YjRmNDc5Y2M1MjQzZmUx
NjM3NjI2NzI3MmM4Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0
YXRpb24vVGl0bGVCYXIuY3BwCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgIlRpdGxlQmFyLmgiCisKK3VzaW5nIG5hbWVzcGFjZSB0b29sa2l0dGVuOworCit2b2lk
IFRpdGxlQmFyOjpzZXRUaXRsZShjb25zdCBzdGQ6OnN0cmluZyYgdGl0bGUpCit7CisgICAgaWYg
KG1fdGl0bGUgPT0gdGl0bGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fdGl0bGUgPSB0aXRs
ZTsKKyAgICB1cGRhdGUoKTsKK30KKwordm9pZCBUaXRsZUJhcjo6c2V0UHJvZ3Jlc3MoZG91Ymxl
IHByb2dyZXNzKQoreworICAgIGlmIChtX3Byb2dyZXNzID09IHByb2dyZXNzKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX3Byb2dyZXNzID0gcHJvZ3Jlc3M7CisgICAgdXBkYXRlKCk7Cit9CisK
K3ZvaWQgVGl0bGVCYXI6OnVwZGF0ZSgpCit7CisgICAgYXV0byB3aWRnZXRTaXplID0gc2l6ZSgp
OworICAgIGludCBwcm9ncmVzc1dpZHRoID0gd2lkZ2V0U2l6ZS53ICogbV9wcm9ncmVzczsKKwor
ICAgIEludFJlY3QgcmVjdCB7IHsgMCwgMCB9LCB3aWRnZXRTaXplIH07CisgICAgSW50UmVjdCBw
cm9ncmVzc1JlY3QgPSByZWN0OworICAgIHByb2dyZXNzUmVjdC5zaXplLncgPSBwcm9ncmVzc1dp
ZHRoOworICAgIGlmICghcHJvZ3Jlc3NSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgZmlsbFJlY3Qo
cHJvZ3Jlc3NSZWN0LCBDb2xvciB7IDAuMCwgMC4wLCAwLjUsIDEuMCB9KTsKKworICAgIEludFJl
Y3QgcmVtYWluaW5nUmVjdCA9IHJlY3Q7CisgICAgcmVtYWluaW5nUmVjdC5zaXplLncgLT0gcHJv
Z3Jlc3NXaWR0aDsKKyAgICByZW1haW5pbmdSZWN0LnBvc2l0aW9uLnggKz0gcHJvZ3Jlc3NXaWR0
aDsKKyAgICBpZiAoIXJlbWFpbmluZ1JlY3QuaXNFbXB0eSgpKQorICAgICAgICBmaWxsUmVjdChy
ZW1haW5pbmdSZWN0LCBDb2xvciB7IDAuMiwgMC4yLCAwLjcsIDEuMCB9KTsKKworICAgIHN0cm9r
ZVJlY3QocmVjdCwgNCwgQ29sb3IgeyAwLjcsIDAuNywgMC43LCAxLjAgfSk7CisKKyAgICBjb25z
dCBpbnQgZm9udFNpemUgPSAzMjsKKyAgICBkcmF3VGV4dChtX3RpdGxlLmNfc3RyKCksIHsgMiwg
MCB9LCBmb250U2l6ZSwgV0hJVEUpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIv
cGxheXN0YXRpb24vVGl0bGVCYXIuaCBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1Rp
dGxlQmFyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMThjYzdkYWMzM2RlYThkNWQ1ZWY3OWFjOTRiY2RmNmRkODlj
ZWE4OAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1Rp
dGxlQmFyLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255
IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgPHRvb2xraXR0ZW4vV2lkZ2V0Lmg+CisKK2NsYXNzIFRpdGxlQmFyIDogcHVi
bGljIHRvb2xraXR0ZW46OldpZGdldCB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRUaXRsZShjb25z
dCBzdGQ6OnN0cmluZyYpOworICAgIHZvaWQgc2V0UHJvZ3Jlc3MoZG91YmxlKTsKKworcHJpdmF0
ZToKKyAgICB2b2lkIHVwZGF0ZSgpOworCisgICAgc3RkOjpzdHJpbmcgbV90aXRsZTsKKyAgICBk
b3VibGUgbV9wcm9ncmVzcyB7IDAgfTsKK307CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nl
ci9wbGF5c3RhdGlvbi9Ub29sa2l0dGVuVXRpbHMuaCBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlz
dGF0aW9uL1Rvb2xraXR0ZW5VdGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhiN2JmODBhNjQ3NGNkNjQxMDZh
YzE4MDFkNmMyMzVlYjQ4ZWNkMjEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nl
ci9wbGF5c3RhdGlvbi9Ub29sa2l0dGVuVXRpbHMuaApAQCAtMCwwICsxLDc5IEBACisvKgorKiBD
b3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyoK
KyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoK
KyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgPFdlYktpdC9XS0dlb21ldHJ5Lmg+CisjaW5jbHVkZSA8dG9vbGtpdHRlbi9J
bnRSZWN0Lmg+CisKK2lubGluZSB0b29sa2l0dGVuOjpJbnRSZWN0IHRvVEtSZWN0KFdLUmVjdCBy
ZWN0KQoreworICAgIHJldHVybiB7CisgICAgICAgIHRvb2xraXR0ZW46OkludFBvaW50IHsKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PGludD4ocmVjdC5vcmlnaW4ueCksCisgICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQ+KHJlY3Qub3JpZ2luLnkpCisgICAgICAgIH0sCisgICAgICAgIHRvb2xr
aXR0ZW46OkludFNpemUgeworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlY3Qu
c2l6ZS53aWR0aCksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVjdC5zaXpl
LmhlaWdodCkKKyAgICAgICAgfQorICAgIH07Cit9CisKK2lubGluZSB0b29sa2l0dGVuOjpJbnRQ
b2ludCB0b1RLUG9pbnQoV0tQb2ludCBwb2ludCkKK3sKKyAgICByZXR1cm4geworICAgICAgICB0
b29sa2l0dGVuOjpJbnRQb2ludCB7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KHBvaW50
LngpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pihwb2ludC55KQorICAgICAgICB9Cisg
ICAgfTsKK30KKworaW5saW5lIFdLUmVjdCB0b1dLUmVjdCh0b29sa2l0dGVuOjpJbnRSZWN0IHJl
Y3QpCit7CisgICAgcmV0dXJuIFdLUmVjdE1ha2UocmVjdC5wb3NpdGlvbi54LCByZWN0LnBvc2l0
aW9uLnksIHJlY3Quc2l6ZS53LCByZWN0LnNpemUuaCk7Cit9CisKK2lubGluZSBXS1NpemUgdG9X
S1NpemUodG9vbGtpdHRlbjo6SW50U2l6ZSBzaXplKQoreworICAgIHJldHVybiBXS1NpemVNYWtl
KHNpemUudywgc2l6ZS5oKTsKK30KKworaW5saW5lIFdLUG9pbnQgdG9XS1BvaW50KHRvb2xraXR0
ZW46OkludFBvaW50IHBvaW50KQoreworICAgIHJldHVybiBXS1BvaW50TWFrZShwb2ludC54LCBw
b2ludC55KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgV2lkZ2V0VD4KK1dpZGdldFQqIGNyZWF0
ZUFuZEFwcGVuZENoaWxkKHRvb2xraXR0ZW46OldpZGdldCogcGFyZW50LCBjb25zdCB0b29sa2l0
dGVuOjpJbnRTaXplIHNpemUsIGNvbnN0IHRvb2xraXR0ZW46OkludFBvaW50JiBwb3NpdGlvbikK
K3sKKyAgICBhdXRvIHdpZGdldCA9IHN0ZDo6bWFrZV91bmlxdWU8V2lkZ2V0VD4oKTsKKyAgICBX
aWRnZXRUKiBwdHIgPSB3aWRnZXQuZ2V0KCk7CisgICAgcHRyLT5zZXRTaXplKHNpemUpOworICAg
IHB0ci0+c2V0UG9zaXRpb24ocG9zaXRpb24pOworICAgIHBhcmVudC0+YXBwZW5kQ2hpbGQobW92
ZSh3aWRnZXQpKTsKKyAgICByZXR1cm4gcHRyOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJy
b3dzZXIvcGxheXN0YXRpb24vVVJMQmFyLmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0
aW9uL1VSTEJhci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjQ3MjU2ZTI1NWFiMWVhYzE5MzRmOTI3MGZjMDgw
ODg1ZmE4YmFmMAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0
aW9uL1VSTEJhci5jcHAKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiVVJMQmFyLmgiCisKKyNpbmNsdWRlIDxLZXlib2FyZENvZGVzLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSB0b29sa2l0dGVuOworCit2b2lkIFVSTEJhcjo6c2V0Q2xpZW50KENsaWVudCYmIGNsaWVu
dCkKK3sKKyAgICBtX2NsaWVudCA9IHN0ZDo6bW92ZShjbGllbnQpOworfQorCit2b2lkIFVSTEJh
cjo6dXBkYXRlU2VsZigpCit7CisgICAgVGV4dEJveDo6dXBkYXRlU2VsZigpOworCisgICAgaWYg
KGZvY3VzZWRXaWRnZXQoKSA9PSB0aGlzICYmIG1faW1lRGlhbG9nICYmIG1faW1lRGlhbG9nLT5p
c0ZpbmlzaGVkKCkpIHsKKyAgICAgICAgc2V0VGV4dChtX2ltZURpYWxvZy0+Z2V0SW1lVGV4dCgp
LmNfc3RyKCkpOworICAgICAgICBtX2ltZURpYWxvZy5yZXNldCgpOworICAgICAgICBpZiAobV9j
bGllbnQub25EZWNpZGVVUkwpCisgICAgICAgICAgICBtX2NsaWVudC5vbkRlY2lkZVVSTCh0aGlz
LCBnZXRUZXh0KCkpOworICAgIH0KK30KKworYm9vbCBVUkxCYXI6Om9uTW91c2VNb3ZlKHRvb2xr
aXR0ZW46OkludFBvaW50KQoreworICAgIHNldEZvY3VzZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBVUkxCYXI6Om9uS2V5RG93bihpbnQzMl90IHZpcnR1YWxLZXlDb2RlKQorewor
ICAgIHN3aXRjaCAodmlydHVhbEtleUNvZGUpIHsKKyAgICBjYXNlIFZLX1JFVFVSTjoKKyAgICAg
ICAgc2V0Rm9jdXNlZCgpOworICAgICAgICBvblNlbGVjdCgpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFVSTEJhcjo6b25TZWxlY3Qo
KQoreworICAgIEVkaXRvclN0YXRlIGVkaXRvclN0YXRlOworICAgIGVkaXRvclN0YXRlLmlucHV0
VHlwZSA9IElucHV0RmllbGRUeXBlOjpVcmw7CisgICAgZWRpdG9yU3RhdGUuc3VwcG9ydExhbmd1
YWdlID0gSW5wdXRGaWVsZExhbmd1YWdlOjpFbmdsaXNoX1VzOworICAgIGVkaXRvclN0YXRlLnRp
dGxlID0gIklucHV0IFVSTCI7CisgICAgZWRpdG9yU3RhdGUudGV4dCA9IHN0ZDo6c3RyaW5nKGdl
dFRleHQoKSk7CisgICAgZWRpdG9yU3RhdGUucG9zaXRpb24gPSBnbG9iYWxQb3NpdGlvbigpOwor
ICAgIGVkaXRvclN0YXRlLmlzSW5Mb2dpbkZvcm0gPSBmYWxzZTsKKyAgICBtX2ltZURpYWxvZyA9
IEltZURpYWxvZzo6Y3JlYXRlKGVkaXRvclN0YXRlKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL01p
bmlCcm93c2VyL3BsYXlzdGF0aW9uL1VSTEJhci5oIGIvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0
YXRpb24vVVJMQmFyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmUyNDUwY2ZhZWMwNGU0M2ZlMzlkN2ViM2RmYjIw
MmJlY2Q1ZjYxOAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0
aW9uL1VSTEJhci5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
U29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlIDx0b29sa2l0dGVuL0ltZURpYWxvZy5oPgorI2luY2x1ZGUgPHRvb2xr
aXR0ZW4vVGV4dEJveC5oPgorCitjbGFzcyBVUkxCYXIgOiBwdWJsaWMgdG9vbGtpdHRlbjo6VGV4
dEJveCB7CitwdWJsaWM6CisgICAgc3RydWN0IENsaWVudCB7CisgICAgICAgIHN0ZDo6ZnVuY3Rp
b248dm9pZChVUkxCYXIqLCBjb25zdCBjaGFyKik+IG9uRGVjaWRlVVJMOworICAgIH07CisKKyAg
ICB2b2lkIHNldENsaWVudChDbGllbnQmJik7CisKK3ByaXZhdGU6CisgICAgdm9pZCB1cGRhdGVT
ZWxmKCkgZmluYWw7CisgICAgYm9vbCBvbk1vdXNlTW92ZSh0b29sa2l0dGVuOjpJbnRQb2ludCkg
ZmluYWw7CisgICAgYm9vbCBvbktleURvd24oaW50MzJfdCB2aXJ0dWFsS2V5Q29kZSkgZmluYWw7
CisgICAgdm9pZCBvblNlbGVjdCgpOworCisgICAgQ2xpZW50IG1fY2xpZW50OworICAgIHN0ZDo6
dW5pcXVlX3B0cjx0b29sa2l0dGVuOjpJbWVEaWFsb2c+IG1faW1lRGlhbG9nOworfTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1dlYkNvbnRleHQuY3BwIGIvVG9v
bHMvTWluaUJyb3dzZXIvcGxheXN0YXRpb24vV2ViQ29udGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjlk
MTM1MGUwNGNjMGUwNDVlYTc0ZmUwODk0YmJhYTkzNTA1ZTQ4YQotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1dlYkNvbnRleHQuY3BwCkBAIC0wLDAgKzEs
OTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRh
aW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKKworI2luY2x1
ZGUgIlN0cmluZ1V0aWxzLmgiCisjaW5jbHVkZSA8V2ViS2l0L1dLQ29udGV4dENvbmZpZ3VyYXRp
b25QbGF5U3RhdGlvbi5oPgorI2luY2x1ZGUgPFdlYktpdC9XS0NvbnRleHRQcml2YXRlLmg+Cisj
aW5jbHVkZSA8V2ViS2l0L1dLUHJlZmVyZW5jZXNSZWYuaD4KKyNpbmNsdWRlIDxXZWJLaXQvV0tQ
cmVmZXJlbmNlc1JlZlByaXZhdGUuaD4KKyNpbmNsdWRlIDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0
b3JlQ29uZmlndXJhdGlvblJlZi5oPgorI2luY2x1ZGUgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3Rv
cmVSZWYuaD4KKyNpbmNsdWRlIDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUmVmQ3VybC5oPgor
CisjZGVmaW5lIE1BS0VfUFJPQ0VTU19QQVRIKHgpICIvYXBwMC8iICN4ICIuc2VsZiIKKworc3Rk
Ojp3ZWFrX3B0cjxXZWJDb250ZXh0PiBXZWJDb250ZXh0OjpzX2luc3RhbmNlOworCitzdGQ6OnNo
YXJlZF9wdHI8V2ViQ29udGV4dD4gV2ViQ29udGV4dDo6c2luZ2xldG9uKCkKK3sKKyAgICBhdXRv
IHJldCA9IHNfaW5zdGFuY2UubG9jaygpOworICAgIGlmICghcmV0KSB7CisgICAgICAgIHJldCA9
IHN0ZDo6c2hhcmVkX3B0cjxXZWJDb250ZXh0PihuZXcgV2ViQ29udGV4dCgpKTsKKyAgICAgICAg
c19pbnN0YW5jZSA9IHJldDsKKyAgICB9CisgICAgcmV0dXJuIHNfaW5zdGFuY2UubG9jaygpOwor
fQorCitXZWJDb250ZXh0OjpXZWJDb250ZXh0KCkKK3sKKyAgICBXS1JldGFpblB0cjxXS0NvbnRl
eHRDb25maWd1cmF0aW9uUmVmPiBjb250ZXh0Q29uZmlndXJhdGlvbiA9IGFkb3B0V0soV0tDb250
ZXh0Q29uZmlndXJhdGlvbkNyZWF0ZSgpKTsKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
d2ViUHJvY2Vzc1BhdGggPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKE1B
S0VfUFJPQ0VTU19QQVRIKFdlYlByb2Nlc3MpKSk7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG5ldHdvcmtQcm9jZXNzUGF0aCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoTUFLRV9QUk9DRVNTX1BBVEgoTmV0d29ya1Byb2Nlc3MpKSk7CisgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IGxvY2FsU3RvcmFnZVBhdGggPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCIvZGF0YS9taW5pYnJvd3Nlci9sb2NhbCIpKTsKKyAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVkaWFLZXlQYXRoID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiL2RhdGEvbWluaWJyb3dzZXIvbWVpZGFrZXkiKSk7CisgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHJlc291cmNlTG9hZFN0YXRpc3RpY3NQYXRoID0gYWRvcHRXSyhX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiL2RhdGEvbWluaWJyb3dzZXIvUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyIpKTsKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmV0d29ya0Nh
Y2hlUGF0aCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIi9kYXRhL21p
bmlicm93c2VyL05ldHdvcmtDYWNoZSIpKTsKKworICAgIFdLQ29udGV4dENvbmZpZ3VyYXRpb25T
ZXRVc2VySWQoY29udGV4dENvbmZpZ3VyYXRpb24uZ2V0KCksIC0xKTsKKyAgICBXS0NvbnRleHRD
b25maWd1cmF0aW9uU2V0V2ViUHJvY2Vzc1BhdGgoY29udGV4dENvbmZpZ3VyYXRpb24uZ2V0KCks
IHdlYlByb2Nlc3NQYXRoLmdldCgpKTsKKyAgICBXS0NvbnRleHRDb25maWd1cmF0aW9uU2V0TmV0
d29ya1Byb2Nlc3NQYXRoKGNvbnRleHRDb25maWd1cmF0aW9uLmdldCgpLCBuZXR3b3JrUHJvY2Vz
c1BhdGguZ2V0KCkpOworCisgICAgYXV0byBkYXRhU3RvcmVDb25maWd1cmF0aW9uID0gYWRvcHRX
SyhXS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uQ3JlYXRlKCkpOworICAgIFdLV2Vic2l0
ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb25TZXRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoZGF0YVN0b3Jl
Q29uZmlndXJhdGlvbi5nZXQoKSwgbG9jYWxTdG9yYWdlUGF0aC5nZXQoKSk7CisgICAgV0tXZWJz
aXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvblNldE1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkoZGF0
YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKSwgbWVkaWFLZXlQYXRoLmdldCgpKTsKKyAgICBXS1dl
YnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uU2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVj
dG9yeShkYXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpLCByZXNvdXJjZUxvYWRTdGF0aXN0aWNz
UGF0aC5nZXQoKSk7CisgICAgV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvblNldE5ldHdv
cmtDYWNoZURpcmVjdG9yeShkYXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpLCBuZXR3b3JrQ2Fj
aGVQYXRoLmdldCgpKTsKKyAgICBXS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uU2V0TmV0
d29ya0NhY2hlU3BlY3VsYXRpdmVWYWxpZGF0aW9uRW5hYmxlZChkYXRhU3RvcmVDb25maWd1cmF0
aW9uLmdldCgpLCB0cnVlKTsKKyAgICBXS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uU2V0
U3RhbGVXaGlsZVJldmFsaWRhdGVFbmFibGVkKGRhdGFTdG9yZUNvbmZpZ3VyYXRpb24uZ2V0KCks
IHRydWUpOworICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IFdLV2Vic2l0ZURhdGFTdG9yZUNyZWF0
ZVdpdGhDb25maWd1cmF0aW9uKGRhdGFTdG9yZUNvbmZpZ3VyYXRpb24uZ2V0KCkpOworCisgICAg
bV9jb250ZXh0ID0gYWRvcHRXSyhXS0NvbnRleHRDcmVhdGVXaXRoQ29uZmlndXJhdGlvbihjb250
ZXh0Q29uZmlndXJhdGlvbi5nZXQoKSkpOworICAgIFdLQ29udGV4dFNldFByaW1hcnlXZWJzaXRl
RGF0YVN0b3JlKG1fY29udGV4dC5nZXQoKSwgbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpKTsKKyAg
ICBXS0NvbnRleHRTZXRVc2VzU2luZ2xlV2ViUHJvY2VzcyhtX2NvbnRleHQuZ2V0KCksIHRydWUp
OworCisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGdyb3VwTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkRlZmF1bHQiKSk7CisgICAgbV9wYWdlR3JvdXAg
PSBhZG9wdFdLKFdLUGFnZUdyb3VwQ3JlYXRlV2l0aElkZW50aWZpZXIoZ3JvdXBOYW1lLmdldCgp
KSk7CisKKyAgICBtX3ByZWZlcmVuY2VzTWFzdGVyID0gYWRvcHRXSyhXS1ByZWZlcmVuY2VzQ3Jl
YXRlKCkpOworICAgIFdLUHJlZmVyZW5jZXNTZXRGdWxsU2NyZWVuRW5hYmxlZChtX3ByZWZlcmVu
Y2VzTWFzdGVyLmdldCgpLCB0cnVlKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0RE5TUHJlZmV0Y2hp
bmdFbmFibGVkKG1fcHJlZmVyZW5jZXNNYXN0ZXIuZ2V0KCksIHRydWUpOworICAgIFdLUHJlZmVy
ZW5jZXNTZXROZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyhtX3ByZWZlcmVuY2VzTWFzdGVyLmdldCgp
LCBmYWxzZSk7Cit9CisKK1dlYkNvbnRleHQ6On5XZWJDb250ZXh0KCkKK3sKK30KKwordm9pZCBX
ZWJDb250ZXh0OjphZGRXaW5kb3coV2ViVmlld1dpbmRvdyogd2luZG93KQoreworICAgIG1fd2lu
ZG93cy5wdXNoX2JhY2sod2luZG93KTsKK30KKwordm9pZCBXZWJDb250ZXh0OjpyZW1vdmVXaW5k
b3coV2ViVmlld1dpbmRvdyogd2luZG93KQoreworICAgIG1fd2luZG93cy5yZW1vdmUod2luZG93
KTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1dlYkNvbnRl
eHQuaCBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1dlYkNvbnRleHQuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi42YzAzYzIxZjMxZDIyMTBlYjg5MWZiMTFjM2M4NDE3NGU5NjU5NWY0Ci0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRpb24vV2ViQ29udGV4dC5oCkBAIC0w
LDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBF
bnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxX
ZWJLaXQvV0tDb250ZXh0Lmg+CisjaW5jbHVkZSA8V2ViS2l0L1dLUGFnZUNvbmZpZ3VyYXRpb25S
ZWYuaD4KKyNpbmNsdWRlIDxXZWJLaXQvV0tQYWdlR3JvdXAuaD4KKyNpbmNsdWRlIDxXZWJLaXQv
V0tSZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDxsaXN0PgorCitjbGFzcyBXZWJWaWV3V2luZG93Owor
CitjbGFzcyBXZWJDb250ZXh0IHsKK3Byb3RlY3RlZDoKKyAgICBXZWJDb250ZXh0KCk7CitwdWJs
aWM6CisgICAgfldlYkNvbnRleHQoKTsKKyAgICBzdGF0aWMgc3RkOjpzaGFyZWRfcHRyPFdlYkNv
bnRleHQ+IHNpbmdsZXRvbigpOworCisgICAgV0tDb250ZXh0UmVmIGNvbnRleHQoKSB7IHJldHVy
biBtX2NvbnRleHQuZ2V0KCk7IH0KKyAgICBXS1BhZ2VHcm91cFJlZiBwYWdlR3JvdXAoKSB7IHJl
dHVybiBtX3BhZ2VHcm91cC5nZXQoKTsgfQorICAgIFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5j
ZXMoKSB7IHJldHVybiBtX3ByZWZlcmVuY2VzTWFzdGVyLmdldCgpOyB9CisgICAgV0tXZWJzaXRl
RGF0YVN0b3JlUmVmIHdlYnNpdGVEYXRhU3RvcmUoKSB7IHJldHVybiBtX3dlYnNpdGVEYXRhU3Rv
cmUuZ2V0KCk7IH0KKworICAgIHZvaWQgYWRkV2luZG93KFdlYlZpZXdXaW5kb3cqKTsKKyAgICB2
b2lkIHJlbW92ZVdpbmRvdyhXZWJWaWV3V2luZG93Kik7CisKK3ByaXZhdGU6CisgICAgc3RhdGlj
IHN0ZDo6d2Vha19wdHI8V2ViQ29udGV4dD4gc19pbnN0YW5jZTsKKyAgICBXS1JldGFpblB0cjxX
S0NvbnRleHRSZWY+IG1fY29udGV4dDsKKyAgICBXS1JldGFpblB0cjxXS1BhZ2VHcm91cFJlZj4g
bV9wYWdlR3JvdXA7CisgICAgV0tSZXRhaW5QdHI8V0tQcmVmZXJlbmNlc1JlZj4gbV9wcmVmZXJl
bmNlc01hc3RlcjsKKyAgICBXS1JldGFpblB0cjxXS1dlYnNpdGVEYXRhU3RvcmVSZWY+IG1fd2Vi
c2l0ZURhdGFTdG9yZTsKKyAgICBzdGQ6Omxpc3Q8V2ViVmlld1dpbmRvdyo+IG1fd2luZG93czsK
K307CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9XZWJWaWV3V2lu
ZG93LmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1dlYlZpZXdXaW5kb3cuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmNmNmEwZGU5N2JmZTg0MTYyMWEwZWMwZGZiMWIyNzcxMzJiYmNkMzMKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9XZWJWaWV3V2lu
ZG93LmNwcApAQCAtMCwwICsxLDQzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255
IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiV2Vi
Vmlld1dpbmRvdy5oIgorCisjaW5jbHVkZSAiTWFpbldpbmRvdy5oIgorI2luY2x1ZGUgIlN0cmlu
Z1V0aWxzLmgiCisjaW5jbHVkZSAiVG9vbGtpdHRlblV0aWxzLmgiCisjaW5jbHVkZSA8S2V5Ym9h
cmRFdmVudHMuaD4KKyNpbmNsdWRlIDxXZWJLaXQvV0tQYWdlLmg+CisjaW5jbHVkZSA8V2ViS2l0
L1dLUGFnZVByaXZhdGVQbGF5U3RhdGlvbi5oPgorI2luY2x1ZGUgPFdlYktpdC9XS1ByZWZlcmVu
Y2VzUmVmLmg+CisjaW5jbHVkZSA8V2ViS2l0L1dLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmg+Cisj
aW5jbHVkZSA8V2ViS2l0L1dLVVJMLmg+CisjaW5jbHVkZSA8Y2Fpcm8vY2Fpcm8uaD4KKyNpbmNs
dWRlIDxtYXA+CisjaW5jbHVkZSA8dG9vbGtpdHRlbi9BcHBsaWNhdGlvbi5oPgorI2luY2x1ZGUg
PHRvb2xraXR0ZW4vQ3Vyc29yLmg+CisjaW5jbHVkZSA8dG9vbGtpdHRlbi9NZXNzYWdlRGlhbG9n
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSB0b29sa2l0dGVuOworCitpbmxpbmUgV2ViVmlld1dpbmRv
dyogdG9XZWJWaWV3KGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgcmV0dXJuIGNvbnN0
X2Nhc3Q8V2ViVmlld1dpbmRvdyo+KHN0YXRpY19jYXN0PGNvbnN0IFdlYlZpZXdXaW5kb3cqPihj
bGllbnRJbmZvKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNldEN1cnNvcihXS0N1cnNvclR5cGUgY3Vy
c29yVHlwZSkKK3sKKyAgICBzd2l0Y2ggKGN1cnNvclR5cGUpIHsKKyAgICBjYXNlIGtXS0N1cnNv
clR5cGVIYW5kOgorICAgICAgICBDdXJzb3I6OnNpbmdsZXRvbigpLnNldFR5cGUoQ3Vyc29yOjpr
VHlwZUhhbmQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGtXS0N1cnNvclR5cGVQb2ludGVy
OgorICAgIGRlZmF1bHQ6CisgICAgICAgIEN1cnNvcjo6c2luZ2xldG9uKCkuc2V0VHlwZShDdXJz
b3I6OmtUeXBlUG9pbnRlcik7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RkOjp1bmlx
dWVfcHRyPFdlYlZpZXdXaW5kb3c+IFdlYlZpZXdXaW5kb3c6OmNyZWF0ZShDbGllbnQmJiB3aW5k
b3dDbGllbnQsIFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYgY29uZmlndXJhdGlvblJlZikKK3sKKyAg
ICBhdXRvIGNvbnRleHQgPSBXZWJDb250ZXh0OjpzaW5nbGV0b24oKTsKKworICAgIGlmIChjb25m
aWd1cmF0aW9uUmVmKQorICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxXZWJWaWV3V2lu
ZG93Pihjb25maWd1cmF0aW9uUmVmLCBzdGQ6Om1vdmUod2luZG93Q2xpZW50KSk7CisKKyAgICBX
S1JldGFpblB0cjxXS1BhZ2VDb25maWd1cmF0aW9uUmVmPiBjb25maWd1cmF0aW9uID0gYWRvcHRX
SyhXS1BhZ2VDb25maWd1cmF0aW9uQ3JlYXRlKCkpOworICAgIFdLUGFnZUNvbmZpZ3VyYXRpb25T
ZXRDb250ZXh0KGNvbmZpZ3VyYXRpb24uZ2V0KCksIGNvbnRleHQtPmNvbnRleHQoKSk7CisgICAg
V0tQYWdlQ29uZmlndXJhdGlvblNldFBhZ2VHcm91cChjb25maWd1cmF0aW9uLmdldCgpLCBjb250
ZXh0LT5wYWdlR3JvdXAoKSk7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8V2ViVmlld1dp
bmRvdz4oY29uZmlndXJhdGlvbi5nZXQoKSwgc3RkOjptb3ZlKHdpbmRvd0NsaWVudCkpOworfQor
CitXZWJWaWV3V2luZG93OjpXZWJWaWV3V2luZG93KFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYgY29u
ZmlndXJhdGlvbiwgQ2xpZW50JiYgd2luZG93Q2xpZW50KQorICAgIDogbV9jbGllbnQoc3RkOjpt
b3ZlKHdpbmRvd0NsaWVudCkpCit7CisgICAgLy8gRklYTUU6IFNob3VsZCBjaGlsZCBzaGFyZSB0
aGUgcHJlZmVyZW5jZSB3aXRoIHBhcmVudD8KKyAgICBtX2NvbnRleHQgPSBXZWJDb250ZXh0Ojpz
aW5nbGV0b24oKTsKKyAgICBtX3ByZWZlcmVuY2VzID0gV0tQcmVmZXJlbmNlc0NyZWF0ZUNvcHko
bV9jb250ZXh0LT5wcmVmZXJlbmNlcygpKTsKKyAgICBXS1BhZ2VDb25maWd1cmF0aW9uU2V0UHJl
ZmVyZW5jZXMoY29uZmlndXJhdGlvbiwgbV9wcmVmZXJlbmNlcy5nZXQoKSk7CisKKyAgICBXS1By
ZWZlcmVuY2VzU2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQobV9wcmVmZXJlbmNlcy5n
ZXQoKSwgZmFsc2UpOworICAgIFdLUHJlZmVyZW5jZXNTZXRGdWxsU2NyZWVuRW5hYmxlZChtX3By
ZWZlcmVuY2VzLmdldCgpLCB0cnVlKTsKKworICAgIG1fdmlldyA9IFdLVmlld0NyZWF0ZShjb25m
aWd1cmF0aW9uKTsKKyAgICBtX2NvbnRleHQtPmFkZFdpbmRvdyh0aGlzKTsKKworICAgIFdLVmll
d0NsaWVudFYwIHZpZXdDbGllbnQgeworICAgICAgICB7IDAsIHRoaXMgfSwKKworICAgICAgICAv
LyBzZXRWaWV3TmVlZHNEaXNwbGF5CisgICAgICAgIFtdKFdLVmlld1JlZiwgV0tSZWN0IHJlY3Qs
IGNvbnN0IHZvaWQqIGNsaWVudEluZm8pIHsKKyAgICAgICAgICAgIHRvV2ViVmlldyhjbGllbnRJ
bmZvKS0+dXBkYXRlU3VyZmFjZSh0b1RLUmVjdChyZWN0KSk7CisgICAgICAgIH0sCisKKyAgICAg
ICAgLy8gZW50ZXJGdWxsU2NyZWVuCisgICAgICAgIFtdKFdLVmlld1JlZiB2aWV3LCBjb25zdCB2
b2lkKikgeworICAgICAgICAgICAgV0tWaWV3V2lsbEVudGVyRnVsbFNjcmVlbih2aWV3KTsKKyAg
ICAgICAgICAgIFdLVmlld0RpZEVudGVyRnVsbFNjcmVlbih2aWV3KTsKKyAgICAgICAgfSwKKyAg
ICAgICAgLy8gZXhpdEZ1bGxTY3JlZW4KKyAgICAgICAgW10oV0tWaWV3UmVmIHZpZXcsIGNvbnN0
IHZvaWQqKSB7CisgICAgICAgICAgICBXS1ZpZXdXaWxsRXhpdEZ1bGxTY3JlZW4odmlldyk7Cisg
ICAgICAgICAgICBXS1ZpZXdEaWRFeGl0RnVsbFNjcmVlbih2aWV3KTsKKyAgICAgICAgfSwKKyAg
ICAgICAgbnVsbHB0ciwgLy8gY2xvc2VGdWxsU2NyZWVuCisgICAgICAgIG51bGxwdHIsIC8vIGJl
Z2FuRW50ZXJGdWxsU2NyZWVuCisgICAgICAgIG51bGxwdHIsIC8vIGJlZ2FuRXhpdEZ1bGxTY3Jl
ZW4KKworICAgICAgICAvLyBzZXRDdXJzb3IKKyAgICAgICAgW10oV0tWaWV3UmVmLCBXS0N1cnNv
clR5cGUgY3Vyc29yVHlwZSwgY29uc3Qgdm9pZCopIHsKKyAgICAgICAgICAgIHNldEN1cnNvcihj
dXJzb3JUeXBlKTsKKyAgICAgICAgfQorICAgIH07CisgICAgV0tWaWV3U2V0Vmlld0NsaWVudCht
X3ZpZXcuZ2V0KCksICZ2aWV3Q2xpZW50LmJhc2UpOworCisgICAgV0tQYWdlU3RhdGVDbGllbnRW
MCBwYWdlU3RhdGVDbGllbnQgeworICAgICAgICB7IDAsIHRoaXMgfSwKKworICAgICAgICBudWxs
cHRyLCAvLyB3aWxsQ2hhbmdlSXNMb2FkaW5nCisgICAgICAgIG51bGxwdHIsIC8vIGRpZENoYW5n
ZUlzTG9hZGluZworICAgICAgICBudWxscHRyLCAvLyB3aWxsQ2hhbmdlVGl0bGUKKyAgICAgICAg
Ly8gZGlkQ2hhbmdlVGl0bGUKKyAgICAgICAgW10oY29uc3Qgdm9pZCogY2xpZW50SW5mbykgewor
ICAgICAgICAgICAgdG9XZWJWaWV3KGNsaWVudEluZm8pLT51cGRhdGVUaXRsZSgpOworICAgICAg
ICB9LAorICAgICAgICBudWxscHRyLCAvLyB3aWxsQ2hhbmdlQWN0aXZlVVJMCisgICAgICAgIC8v
IGRpZENoYW5nZUFjdGl2ZVVSTAorICAgICAgICBbXShjb25zdCB2b2lkKiBjbGllbnRJbmZvKSB7
CisgICAgICAgICAgICB0b1dlYlZpZXcoY2xpZW50SW5mbyktPnVwZGF0ZVVSTCgpOworICAgICAg
ICB9LAorICAgICAgICBudWxscHRyLCAvLyB3aWxsQ2hhbmdlSGFzT25seVNlY3VyZUNvbnRlbnQK
KyAgICAgICAgbnVsbHB0ciwgLy8gZGlkQ2hhbmdlSGFzT25seVNlY3VyZUNvbnRlbnQKKyAgICAg
ICAgbnVsbHB0ciwgLy8gd2lsbENoYW5nZUVzdGltYXRlZFByb2dyZXNzCisgICAgICAgIC8vIGRp
ZENoYW5nZUVzdGltYXRlZFByb2dyZXNzCisgICAgICAgIFtdKGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pIHsKKyAgICAgICAgICAgIHRvV2ViVmlldyhjbGllbnRJbmZvKS0+dXBkYXRlUHJvZ3Jlc3Mo
KTsKKyAgICAgICAgfSwKKyAgICAgICAgbnVsbHB0ciwgLy8gd2lsbENoYW5nZUNhbkdvQmFjawor
ICAgICAgICBudWxscHRyLCAvLyBkaWRDaGFuZ2VDYW5Hb0JhY2sKKyAgICAgICAgbnVsbHB0ciwg
Ly8gd2lsbENoYW5nZUNhbkdvRm9yd2FyZAorICAgICAgICBudWxscHRyLCAvLyBkaWRDaGFuZ2VD
YW5Hb0ZvcndhcmQKKyAgICAgICAgbnVsbHB0ciwgLy8gd2lsbENoYW5nZU5ldHdvcmtSZXF1ZXN0
c0luUHJvZ3Jlc3MKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkQ2hhbmdlTmV0d29ya1JlcXVlc3Rz
SW5Qcm9ncmVzcworICAgICAgICBudWxscHRyLCAvLyB3aWxsQ2hhbmdlQ2VydGlmaWNhdGVJbmZv
CisgICAgICAgIG51bGxwdHIsIC8vIGRpZENoYW5nZUNlcnRpZmljYXRlSW5mbworICAgICAgICBu
dWxscHRyLCAvLyB3aWxsQ2hhbmdlV2ViUHJvY2Vzc0lzUmVzcG9uc2l2ZQorICAgICAgICBudWxs
cHRyLCAvLyBkaWRDaGFuZ2VXZWJQcm9jZXNzSXNSZXNwb25zaXZlCisgICAgICAgIG51bGxwdHIs
IC8vIGRpZFN3YXBXZWJQcm9jZXNzZXMKKyAgICB9OworICAgIFdLUGFnZVNldFBhZ2VTdGF0ZUNs
aWVudChwYWdlKCksICZwYWdlU3RhdGVDbGllbnQuYmFzZSk7CisKKyAgICBXS1BhZ2VVSUNsaWVu
dFY2IHVpQ2xpZW50IHsKKyAgICAgICAgeyA2LCB0aGlzIH0sCisgICAgICAgIG51bGxwdHIsIC8v
IGNyZWF0ZU5ld1BhZ2VfZGVwcmVjYXRlZEZvclVzZVdpdGhWMAorICAgICAgICBudWxscHRyLCAv
LyBzaG93UGFnZQorICAgICAgICBudWxscHRyLCAvLyBjbG9zZQorICAgICAgICBudWxscHRyLCAv
LyB0YWtlRm9jdXMKKyAgICAgICAgbnVsbHB0ciwgLy8gZm9jdXMKKyAgICAgICAgbnVsbHB0ciwg
Ly8gdW5mb2N1cworICAgICAgICBudWxscHRyLCAvLyBydW5KYXZhU2NyaXB0QWxlcnRfZGVwcmVj
YXRlZEZvclVzZVdpdGhWMAorICAgICAgICBudWxscHRyLCAvLyBydW5KYXZhU2NyaXB0Q29uZmly
bV9kZXByZWNhdGVkRm9yVXNlV2l0aFYwCisgICAgICAgIG51bGxwdHIsIC8vIHJ1bkphdmFTY3Jp
cHRQcm9tcHRfZGVwcmVjYXRlZEZvclVzZVdpdGhWMAorICAgICAgICBudWxscHRyLCAvLyBzZXRT
dGF0dXNUZXh0CisgICAgICAgIG51bGxwdHIsIC8vIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50X2Rl
cHJlY2F0ZWRGb3JVc2VXaXRoVjAKKyAgICAgICAgbnVsbHB0ciwgLy8gbWlzc2luZ1BsdWdpbkJ1
dHRvbkNsaWNrZWRfZGVwcmVjYXRlZEZvclVzZVdpdGhWMAorICAgICAgICBudWxscHRyLCAvLyBk
aWROb3RIYW5kbGVLZXlFdmVudAorICAgICAgICBudWxscHRyLCAvLyBkaWROb3RIYW5kbGVXaGVl
bEV2ZW50CisgICAgICAgIG51bGxwdHIsIC8vIHRvb2xiYXJzQXJlVmlzaWJsZQorICAgICAgICBu
dWxscHRyLCAvLyBzZXRUb29sYmFyc0FyZVZpc2libGUKKyAgICAgICAgbnVsbHB0ciwgLy8gbWVu
dUJhcklzVmlzaWJsZQorICAgICAgICBudWxscHRyLCAvLyBzZXRNZW51QmFySXNWaXNpYmxlCisg
ICAgICAgIG51bGxwdHIsIC8vIHN0YXR1c0JhcklzVmlzaWJsZQorICAgICAgICBudWxscHRyLCAv
LyBzZXRTdGF0dXNCYXJJc1Zpc2libGUKKyAgICAgICAgbnVsbHB0ciwgLy8gaXNSZXNpemFibGUK
KyAgICAgICAgbnVsbHB0ciwgLy8gc2V0SXNSZXNpemFibGUKKyAgICAgICAgbnVsbHB0ciwgLy8g
Z2V0V2luZG93RnJhbWUKKyAgICAgICAgbnVsbHB0ciwgLy8gc2V0V2luZG93RnJhbWUKKyAgICAg
ICAgbnVsbHB0ciwgLy8gcnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsCisgICAgICAgIG51bGxw
dHIsIC8vIGRpZERyYXcKKyAgICAgICAgbnVsbHB0ciwgLy8gcGFnZURpZFNjcm9sbAorICAgICAg
ICBudWxscHRyLCAvLyBleGNlZWRlZERhdGFiYXNlUXVvdGEKKyAgICAgICAgbnVsbHB0ciwgLy8g
cnVuT3BlblBhbmVsCisgICAgICAgIG51bGxwdHIsIC8vIGRlY2lkZVBvbGljeUZvckdlb2xvY2F0
aW9uUGVybWlzc2lvblJlcXVlc3QKKyAgICAgICAgbnVsbHB0ciwgLy8gaGVhZGVySGVpZ2h0Cisg
ICAgICAgIG51bGxwdHIsIC8vIGZvb3RlckhlaWdodAorICAgICAgICBudWxscHRyLCAvLyBkcmF3
SGVhZGVyCisgICAgICAgIG51bGxwdHIsIC8vIGRyYXdGb290ZXIKKyAgICAgICAgbnVsbHB0ciwg
Ly8gcHJpbnRGcmFtZQorICAgICAgICBudWxscHRyLCAvLyBydW5Nb2RhbAorICAgICAgICBudWxs
cHRyLCAvLyBVc2VkIHRvIGJlIGRpZENvbXBsZXRlUnViYmVyQmFuZEZvck1haW5GcmFtZQorICAg
ICAgICBudWxscHRyLCAvLyBzYXZlRGF0YVRvRmlsZUluRG93bmxvYWRzRm9sZGVyCisgICAgICAg
IG51bGxwdHIsIC8vIHNob3VsZEludGVycnVwdEphdmFTY3JpcHRfdW5hdmFpbGFibGUKKyAgICAg
ICAgbnVsbHB0ciwgLy8gY3JlYXRlTmV3UGFnZV9kZXByZWNhdGVkRm9yVXNlV2l0aFYxCisgICAg
ICAgIG51bGxwdHIsIC8vIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50CisgICAgICAgIG51bGxwdHIs
IC8vIGRlY2lkZVBvbGljeUZvck5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0CisgICAgICAg
IG51bGxwdHIsIC8vIHVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZF9kZXByZWNhdGVkRm9y
VXNlV2l0aFYxCisgICAgICAgIG51bGxwdHIsIC8vIHNob3dDb2xvclBpY2tlcgorICAgICAgICBu
dWxscHRyLCAvLyBoaWRlQ29sb3JQaWNrZXIKKyAgICAgICAgbnVsbHB0ciwgLy8gdW5hdmFpbGFi
bGVQbHVnaW5CdXR0b25DbGlja2VkCisgICAgICAgIG51bGxwdHIsIC8vIHBpbm5lZFN0YXRlRGlk
Q2hhbmdlCisgICAgICAgIG51bGxwdHIsIC8vIFVzZWQgdG8gYmUgZGlkQmVnaW5UcmFja2luZ1Bv
dGVudGlhbExvbmdNb3VzZVByZXNzCisgICAgICAgIG51bGxwdHIsIC8vIFVzZWQgdG8gYmUgZGlk
UmVjb2duaXplTG9uZ01vdXNlUHJlc3MKKyAgICAgICAgbnVsbHB0ciwgLy8gVXNlZCB0byBiZSBk
aWRDYW5jZWxUcmFja2luZ1BvdGVudGlhbExvbmdNb3VzZVByZXNzCisgICAgICAgIG51bGxwdHIs
IC8vIGlzUGxheWluZ0F1ZGlvRGlkQ2hhbmdlCisgICAgICAgIG51bGxwdHIsIC8vIGRlY2lkZVBv
bGljeUZvclVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0CisgICAgICAgIG51bGxwdHIsIC8vIGRp
ZENsaWNrQXV0b0ZpbGxCdXR0b24KKyAgICAgICAgbnVsbHB0ciwgLy8gcnVuSmF2YVNjcmlwdEFs
ZXJ0X2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjUKKyAgICAgICAgbnVsbHB0ciwgLy8gcnVuSmF2YVNj
cmlwdENvbmZpcm1fZGVwcmVjYXRlZEZvclVzZVdpdGhWNQorICAgICAgICBudWxscHRyLCAvLyBy
dW5KYXZhU2NyaXB0UHJvbXB0X2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjUKKyAgICAgICAgbnVsbHB0
ciwgLy8gbWVkaWFTZXNzaW9uTWV0YWRhdGFEaWRDaGFuZ2UKKyAgICAgICAgLy8gY3JlYXRlTmV3
UGFnZQorICAgICAgICBbXShXS1BhZ2VSZWYgcGFnZSwgV0tQYWdlQ29uZmlndXJhdGlvblJlZiBj
b25maWd1cmF0aW9uLCBXS05hdmlnYXRpb25BY3Rpb25SZWYsIFdLV2luZG93RmVhdHVyZXNSZWYs
IGNvbnN0IHZvaWQqIGNsaWVudEluZm8pIC0+V0tQYWdlUmVmIHsKKyAgICAgICAgICAgIHJldHVy
biB0b1dlYlZpZXcoY2xpZW50SW5mbyktPmNyZWF0ZU5ld1BhZ2UocGFnZSwgY29uZmlndXJhdGlv
bik7CisgICAgICAgIH0sCisgICAgICAgIG51bGxwdHIsIC8vIHJ1bkphdmFTY3JpcHRBbGVydAor
ICAgICAgICBudWxscHRyLCAvLyBydW5KYXZhU2NyaXB0Q29uZmlybQorICAgICAgICBudWxscHRy
LCAvLyBydW5KYXZhU2NyaXB0UHJvbXB0CisgICAgICAgIG51bGxwdHIgLy8gY2hlY2tVc2VyTWVk
aWFQZXJtaXNzaW9uRm9yT3JpZ2luCisgICAgfTsKKyAgICBXS1BhZ2VTZXRQYWdlVUlDbGllbnQo
cGFnZSgpLCAmdWlDbGllbnQuYmFzZSk7Cit9CisKK1dlYlZpZXdXaW5kb3c6On5XZWJWaWV3V2lu
ZG93KCkKK3sKKyAgICBtX2NvbnRleHQtPnJlbW92ZVdpbmRvdyh0aGlzKTsKKyAgICBXS1BhZ2VD
bG9zZShwYWdlKCkpOworfQorCitXS1BhZ2VSZWYgV2ViVmlld1dpbmRvdzo6cGFnZSgpCit7Cisg
ICAgcmV0dXJuIFdLVmlld0dldFBhZ2UobV92aWV3LmdldCgpKTsKK30KKwordm9pZCBXZWJWaWV3
V2luZG93Ojpsb2FkVVJMKGNvbnN0IGNoYXIqIHVybCkKK3sKKyAgICBXS1JldGFpblB0cjxXS1VS
TFJlZj4gdXJsU3RyID0gYWRvcHRXSyhXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0cmluZyh1cmwpKTsK
KyAgICBXS1BhZ2VMb2FkVVJMKHBhZ2UoKSwgdXJsU3RyLmdldCgpKTsKK30KKwordm9pZCBXZWJW
aWV3V2luZG93Ojpnb0JhY2soKQoreworICAgIFdLUGFnZUdvQmFjayhwYWdlKCkpOworfQorCit2
b2lkIFdlYlZpZXdXaW5kb3c6OmdvRm9yd2FyZCgpCit7CisgICAgV0tQYWdlR29Gb3J3YXJkKHBh
Z2UoKSk7Cit9CisKK3ZvaWQgV2ViVmlld1dpbmRvdzo6cmVsb2FkKCkKK3sKKyAgICBXS1BhZ2VS
ZWxvYWRGcm9tT3JpZ2luKHBhZ2UoKSk7Cit9CisKK3ZvaWQgV2ViVmlld1dpbmRvdzo6dG9nZ2xl
Wm9vbUZhY3RvcigpCit7CisgICAgY29uc3QgaW50IG1heFpvb21GYWN0b3IgPSAzOworICAgIGlu
dCBuZXh0Wm9vbUZhY3RvciA9IChpbnQpV0tQYWdlR2V0UGFnZVpvb21GYWN0b3IocGFnZSgpKSAr
IDE7CisgICAgaWYgKG5leHRab29tRmFjdG9yID4gbWF4Wm9vbUZhY3RvcikKKyAgICAgICAgbmV4
dFpvb21GYWN0b3IgPSAxOworCisgICAgV0tQYWdlU2V0UGFnZVpvb21GYWN0b3IocGFnZSgpLCBu
ZXh0Wm9vbUZhY3Rvcik7Cit9CisKK3ZvaWQgV2ViVmlld1dpbmRvdzo6c2V0U2l6ZSh0b29sa2l0
dGVuOjpJbnRTaXplIHNpemUpCit7CisgICAgV2lkZ2V0OjpzZXRTaXplKHNpemUpOworICAgIFdL
Vmlld1NldFNpemUobV92aWV3LmdldCgpLCB0b1dLU2l6ZShzaXplKSk7CisKKyAgICBzaXplX3Qg
c3VyZmFjZVNpemUgPSBjYWlyb19mb3JtYXRfc3RyaWRlX2Zvcl93aWR0aChDQUlST19GT1JNQVRf
QVJHQjMyLCB0aGlzLT5tX3NpemUudykgKiB0aGlzLT5tX3NpemUuaDsKKyAgICBtX3N1cmZhY2Ug
PSBzdGQ6Om1ha2VfdW5pcXVlPHVuc2lnbmVkIGNoYXJbXT4oc3VyZmFjZVNpemUpOworICAgIG1l
bXNldChtX3N1cmZhY2UuZ2V0KCksIDB4ZmYsIHN1cmZhY2VTaXplKTsKK30KKworYm9vbCBXZWJW
aWV3V2luZG93OjpvbktleVVwKGludDMyX3QgdmlydHVhbEtleUNvZGUpCit7CisgICAgc3dpdGNo
ICh2aXJ0dWFsS2V5Q29kZSkgeworICAgIGNhc2UgVktfUkVUVVJOOgorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgY2FzZSBWS19UUklBTkdMRToKKyAgICBjYXNlIFZLX1NRVUFSRToKKyAgICBj
YXNlIFZLX09QVElPTlM6CisgICAgY2FzZSBWS19MMToKKyAgICBjYXNlIFZLX1IxOgorICAgIGNh
c2UgVktfTDI6CisgICAgY2FzZSBWS19SMjoKKyAgICBjYXNlIFZLX0wzOgorICAgIGNhc2UgVktf
UjM6CisgICAgICAgIC8vIElnbm9yZSB0aGVzZSBrZXkgY29kZS4KKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIFdLUGFnZUhhbmRsZUtleWJvYXJkRXZlbnQocGFnZSgpLCBXS0tl
eWJvYXJkRXZlbnRNYWtlKGtXS0V2ZW50S2V5VXAsIGtXS0lucHV0VHlwZU5vcm1hbCwgIiIsIDAs
IGtleUlkZW50aWZpZXJGb3JLZXlDb2RlKHZpcnR1YWxLZXlDb2RlKSwgdmlydHVhbEtleUNvZGUs
IC0xLCAwLCAwKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViVmlld1dpbmRvdzo6
b25LZXlEb3duKGludDMyX3QgdmlydHVhbEtleUNvZGUpCit7CisgICAgc3dpdGNoICh2aXJ0dWFs
S2V5Q29kZSkgeworICAgIGNhc2UgVktfUkVUVVJOOgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgY2FzZSBWS19UUklBTkdMRToKKyAgICBjYXNlIFZLX1NRVUFSRToKKyAgICBjYXNlIFZLX09Q
VElPTlM6CisgICAgY2FzZSBWS19MMToKKyAgICBjYXNlIFZLX1IxOgorICAgIGNhc2UgVktfTDI6
CisgICAgY2FzZSBWS19SMjoKKyAgICBjYXNlIFZLX0wzOgorICAgIGNhc2UgVktfUjM6CisgICAg
ICAgIC8vIElnbm9yZSB0aGVzZSBrZXkgY29kZS4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICBXS1BhZ2VIYW5kbGVLZXlib2FyZEV2ZW50KHBhZ2UoKSwgV0tLZXlib2FyZEV2ZW50
TWFrZShrV0tFdmVudEtleURvd24sIGtXS0lucHV0VHlwZU5vcm1hbCwgIiIsIDAsIGtleUlkZW50
aWZpZXJGb3JLZXlDb2RlKHZpcnR1YWxLZXlDb2RlKSwgdmlydHVhbEtleUNvZGUsIC0xLCAwLCAw
KSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViVmlld1dpbmRvdzo6b25Nb3VzZU1v
dmUodG9vbGtpdHRlbjo6SW50UG9pbnQgcG9pbnQpCit7CisgICAgcG9pbnQgPSBnbG9iYWxUb0Ns
aWVudFBvc2l0aW9uKHBvaW50KTsKKyAgICBXS1BhZ2VIYW5kbGVNb3VzZUV2ZW50KHBhZ2UoKSwg
V0tNb3VzZUV2ZW50TWFrZShrV0tFdmVudE1vdXNlTW92ZSwga1dLRXZlbnRNb3VzZUJ1dHRvbk5v
QnV0dG9uLCBXS1BvaW50TWFrZShwb2ludC54LCBwb2ludC55KSwgMCwgMCkpOworICAgIHNldEZv
Y3VzZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJWaWV3V2luZG93Ojpvbk1v
dXNlRG93bih0b29sa2l0dGVuOjpJbnRQb2ludCBwb2ludCkKK3sKKyAgICBwb2ludCA9IGdsb2Jh
bFRvQ2xpZW50UG9zaXRpb24ocG9pbnQpOworCisgICAgV0tQYWdlSGFuZGxlTW91c2VFdmVudChw
YWdlKCksIFdLTW91c2VFdmVudE1ha2Uoa1dLRXZlbnRNb3VzZURvd24sIGtXS0V2ZW50TW91c2VC
dXR0b25MZWZ0QnV0dG9uLCBXS1BvaW50TWFrZShwb2ludC54LCBwb2ludC55KSwgMCwgMCkpOwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYlZpZXdXaW5kb3c6Om9uTW91c2VVcCh0b29s
a2l0dGVuOjpJbnRQb2ludCBwb2ludCkKK3sKKyAgICBwb2ludCA9IGdsb2JhbFRvQ2xpZW50UG9z
aXRpb24ocG9pbnQpOworICAgIFdLUGFnZUhhbmRsZU1vdXNlRXZlbnQocGFnZSgpLCBXS01vdXNl
RXZlbnRNYWtlKGtXS0V2ZW50TW91c2VVcCwga1dLRXZlbnRNb3VzZUJ1dHRvbkxlZnRCdXR0b24s
IFdLUG9pbnRNYWtlKHBvaW50LngsIHBvaW50LnkpLCAwLCAwKSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgV2ViVmlld1dpbmRvdzo6b25XaGVlbE1vdmUodG9vbGtpdHRlbjo6SW50UG9p
bnQgcG9pbnQsIHRvb2xraXR0ZW46OkludFBvaW50IHdoZWVsVGlja3MpCit7CisgICAgcG9pbnQg
PSBnbG9iYWxUb0NsaWVudFBvc2l0aW9uKHBvaW50KTsKKworICAgIGludCB3aGVlbFRpY2tzWCA9
IHdoZWVsVGlja3MueDsKKyAgICBpbnQgd2hlZWxUaWNrc1kgPSB3aGVlbFRpY2tzLnk7CisgICAg
aWYgKHdoZWVsVGlja3NYIHx8IHdoZWVsVGlja3NZKSB7CisgICAgICAgIGludCBkZWx0YVggPSB3
aGVlbFRpY2tzWCAqIDEwOworICAgICAgICBpbnQgZGVsdGFZID0gd2hlZWxUaWNrc1kgKiAxMDsK
KworICAgICAgICBXS1BhZ2VIYW5kbGVXaGVlbEV2ZW50KHBhZ2UoKSwgV0tXaGVlbEV2ZW50TWFr
ZShrV0tFdmVudFdoZWVsLCBXS1BvaW50TWFrZShwb2ludC54LCBwb2ludC55KSwgV0tTaXplTWFr
ZShkZWx0YVgsIGRlbHRhWSksIFdLU2l6ZU1ha2Uod2hlZWxUaWNrc1gsIHdoZWVsVGlja3NZKSwg
MCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit2b2lkIFdlYlZpZXdXaW5kb3c6OnBhaW50U2VsZihJbnRQb2ludCBwb3NpdGlvbikKK3sKKyAg
ICBpZiAoIWRpcnR5UmVjdHMoKS5lbXB0eSgpKSB7CisgICAgICAgIGNhaXJvX3N1cmZhY2VfdCog
d2t2aWV3U3VyZmFjZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKG1fc3Vy
ZmFjZS5nZXQoKSwgQ0FJUk9fRk9STUFUX0FSR0IzMiwgdGhpcy0+bV9zaXplLncsIHRoaXMtPm1f
c2l6ZS5oLCBjYWlyb19mb3JtYXRfc3RyaWRlX2Zvcl93aWR0aChDQUlST19GT1JNQVRfQVJHQjMy
LCB0aGlzLT5tX3NpemUudykpOworICAgICAgICBzdGQ6Omxpc3Q8dG9vbGtpdHRlbjo6SW50UmVj
dD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZGlydHlSZWN0cygpLmJlZ2luKCk7CisgICAgICAgIHRv
b2xraXR0ZW46OkludFJlY3QgdW5pb25SZWN0ID0gKml0OworICAgICAgICBpdCsrOworICAgICAg
ICB3aGlsZSAoaXQgIT0gZGlydHlSZWN0cygpLmVuZCgpKSB7CisgICAgICAgICAgICB1bmlvblJl
Y3QgKz0gKml0OworICAgICAgICAgICAgaXQrKzsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2Fp
cm9fc3VyZmFjZV9zdGF0dXMod2t2aWV3U3VyZmFjZSkgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1Mp
IHsKKyAgICAgICAgICAgIGNhaXJvX3QqIGNyID0gY2Fpcm9fY3JlYXRlKHRoaXMtPnN1cmZhY2Uo
KSk7CisgICAgICAgICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9SX1NP
VVJDRSk7CisgICAgICAgICAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IsIHdrdmlld1N1
cmZhY2UsIDAsIDApOworICAgICAgICAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCB1bmlvblJlY3Qu
bGVmdCgpLCB1bmlvblJlY3QudG9wKCksIHVuaW9uUmVjdC53aWR0aCgpLCB1bmlvblJlY3QuaGVp
Z2h0KCkpOworICAgICAgICAgICAgY2Fpcm9fZmlsbChjcik7CisgICAgICAgICAgICBjYWlyb19k
ZXN0cm95KGNyKTsKKyAgICAgICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveSh3a3ZpZXdTdXJm
YWNlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobV9hY3RpdmUpCisgICAgICAgIFdpZGdl
dDo6cGFpbnRTZWxmKHBvc2l0aW9uKTsKK30KKwordm9pZCBXZWJWaWV3V2luZG93Ojp1cGRhdGVT
ZWxmKCkKK3sKK30KKwordm9pZCBXZWJWaWV3V2luZG93Ojp1cGRhdGVTdXJmYWNlKHRvb2xraXR0
ZW46OkludFJlY3QgZGlydHlSZWN0KQoreworICAgIFdLUGFnZVBhaW50KHBhZ2UoKSwgbV9zdXJm
YWNlLmdldCgpLCBXS1NpemVNYWtlKHRoaXMtPm1fc2l6ZS53LCB0aGlzLT5tX3NpemUuaCksIHRv
V0tSZWN0KGRpcnR5UmVjdCkpOworICAgIG1fZGlydHlSZWN0cyArPSBkaXJ0eVJlY3Q7Cit9CisK
K3ZvaWQgV2ViVmlld1dpbmRvdzo6dXBkYXRlVGl0bGUoKQoreworICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiB0aXRsZSA9IGFkb3B0V0soV0tQYWdlQ29weVRpdGxlKHBhZ2UoKSkpOworICAg
IG1fdGl0bGUgPSB0b1VURjhTdHJpbmcodGl0bGUuZ2V0KCkpOworICAgIGlmIChtX2NsaWVudC5k
aWRVcGRhdGVUaXRsZSkKKyAgICAgICAgbV9jbGllbnQuZGlkVXBkYXRlVGl0bGUodGhpcyk7Cit9
CisKK3ZvaWQgV2ViVmlld1dpbmRvdzo6dXBkYXRlVVJMKCkKK3sKKyAgICBXS1JldGFpblB0cjxX
S1VSTFJlZj4gdXJsID0gYWRvcHRXSyhXS1BhZ2VDb3B5QWN0aXZlVVJMKHBhZ2UoKSkpOworICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1cmxTdHIgPSBhZG9wdFdLKFdLVVJMQ29weVN0cmlu
Zyh1cmwuZ2V0KCkpKTsKKyAgICBtX3VybCA9IHRvVVRGOFN0cmluZyh1cmxTdHIuZ2V0KCkpOwor
ICAgIGlmIChtX2NsaWVudC5kaWRVcGRhdGVVUkwpCisgICAgICAgIG1fY2xpZW50LmRpZFVwZGF0
ZVVSTCh0aGlzKTsKK30KKwordm9pZCBXZWJWaWV3V2luZG93Ojp1cGRhdGVQcm9ncmVzcygpCit7
CisgICAgbV9wcm9ncmVzcyA9IFdLUGFnZUdldEVzdGltYXRlZFByb2dyZXNzKHBhZ2UoKSk7Cisg
ICAgaWYgKG1fY2xpZW50LmRpZFVwZGF0ZVByb2dyZXNzKQorICAgICAgICBtX2NsaWVudC5kaWRV
cGRhdGVQcm9ncmVzcyh0aGlzKTsKK30KKwordm9pZCBXZWJWaWV3V2luZG93OjpzZXRBY3RpdmUo
Ym9vbCBhY3RpdmUpCit7CisgICAgaWYgKG1fYWN0aXZlID09IGFjdGl2ZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9hY3RpdmUgPSBhY3RpdmU7Cit9CisKK1dLUGFnZVJlZiBXZWJWaWV3V2lu
ZG93OjpjcmVhdGVOZXdQYWdlKFdLUGFnZVJlZiwgV0tQYWdlQ29uZmlndXJhdGlvblJlZiBjb25m
aWd1cmF0aW9uKQoreworICAgIGlmIChtX2NsaWVudC5jcmVhdGVOZXdXaW5kb3cpIHsKKyAgICAg
ICAgYXV0byBuZXdXZWJWaWV3ID0gbV9jbGllbnQuY3JlYXRlTmV3V2luZG93KGNvbmZpZ3VyYXRp
b24pOworICAgICAgICBhdXRvIG5ld1BhZ2UgPSBuZXdXZWJWaWV3LT5wYWdlKCk7CisgICAgICAg
IHJldHVybiBuZXdQYWdlOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KZGlmZiAtLWdp
dCBhL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1dlYlZpZXdXaW5kb3cuaCBiL1Rvb2xz
L01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1dlYlZpZXdXaW5kb3cuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYWE4
Y2UxMDhiNjhiZDM0M2YxZGUzMWEwMTdkZGM3MzJkY2IyMDk5Ci0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRpb24vV2ViVmlld1dpbmRvdy5oCkBAIC0wLDAgKzEs
OTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRh
aW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJXZWJDb250
ZXh0LmgiCisjaW5jbHVkZSA8V2ViS2l0L1dLUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8V2ViS2l0
L1dLVmlldy5oPgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx0b29sa2l0dGVuL1dpZGdl
dC5oPgorCitjbGFzcyBXZWJWaWV3V2luZG93IDogcHVibGljIHRvb2xraXR0ZW46OldpZGdldCB7
CitwdWJsaWM6CisgICAgc3RydWN0IENsaWVudCB7CisgICAgICAgIHN0ZDo6ZnVuY3Rpb248V2Vi
Vmlld1dpbmRvdyooV0tQYWdlQ29uZmlndXJhdGlvblJlZiBjb25maWd1cmF0aW9uKT4gY3JlYXRl
TmV3V2luZG93OworCisgICAgICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChXZWJWaWV3V2luZG93Kik+
IGRpZFVwZGF0ZVRpdGxlOworICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoV2ViVmlld1dpbmRv
dyopPiBkaWRVcGRhdGVVUkw7CisgICAgICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChXZWJWaWV3V2lu
ZG93Kik+IGRpZFVwZGF0ZVByb2dyZXNzOworICAgIH07CisKKyAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPFdlYlZpZXdXaW5kb3c+IGNyZWF0ZShDbGllbnQmJiwgV0tQYWdlQ29uZmlndXJhdGlv
blJlZik7CisKKyAgICBleHBsaWNpdCBXZWJWaWV3V2luZG93KFdLUGFnZUNvbmZpZ3VyYXRpb25S
ZWYsIENsaWVudCYmKTsKKyAgICB2aXJ0dWFsIH5XZWJWaWV3V2luZG93KCk7CisKKyAgICB2b2lk
IGxvYWRVUkwoY29uc3QgY2hhciogdXJsKTsKKyAgICB2b2lkIGdvQmFjaygpOworICAgIHZvaWQg
Z29Gb3J3YXJkKCk7CisgICAgdm9pZCByZWxvYWQoKTsKKworICAgIHZvaWQgdG9nZ2xlWm9vbUZh
Y3RvcigpOworCisgICAgdm9pZCBzZXRTaXplKHRvb2xraXR0ZW46OkludFNpemUpIGZpbmFsOwor
ICAgIGJvb2wgb25LZXlVcChpbnQzMl90IHZpcnR1YWxLZXlDb2RlKSBmaW5hbDsKKyAgICBib29s
IG9uS2V5RG93bihpbnQzMl90IHZpcnR1YWxLZXlDb2RlKSBmaW5hbDsKKyAgICBib29sIG9uTW91
c2VNb3ZlKHRvb2xraXR0ZW46OkludFBvaW50KSBmaW5hbDsKKyAgICBib29sIG9uTW91c2VVcCh0
b29sa2l0dGVuOjpJbnRQb2ludCkgZmluYWw7CisgICAgYm9vbCBvbk1vdXNlRG93bih0b29sa2l0
dGVuOjpJbnRQb2ludCkgZmluYWw7CisgICAgYm9vbCBvbldoZWVsTW92ZSh0b29sa2l0dGVuOjpJ
bnRQb2ludCwgdG9vbGtpdHRlbjo6SW50UG9pbnQpIGZpbmFsOworCisgICAgY29uc3Qgc3RkOjpz
dHJpbmcmIHRpdGxlKCkgY29uc3QgeyByZXR1cm4gbV90aXRsZTsgfQorICAgIGNvbnN0IHN0ZDo6
c3RyaW5nJiB1cmwoKSBjb25zdCB7IHJldHVybiBtX3VybDsgfQorICAgIGRvdWJsZSBwcm9ncmVz
cygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvZ3Jlc3M7IH0KKworICAgIHZvaWQgc2V0QWN0aXZlKGJv
b2wpOworCitwcml2YXRlOgorICAgIFdLUGFnZVJlZiBwYWdlKCk7CisKKyAgICB2b2lkIHBhaW50
U2VsZih0b29sa2l0dGVuOjpJbnRQb2ludCBwb3NpdGlvbikgb3ZlcnJpZGU7CisgICAgdm9pZCB1
cGRhdGVTZWxmKCkgb3ZlcnJpZGU7CisgICAgdm9pZCB1cGRhdGVTdXJmYWNlKHRvb2xraXR0ZW46
OkludFJlY3QpOworCisgICAgdm9pZCB1cGRhdGVUaXRsZSgpOworICAgIHZvaWQgdXBkYXRlVVJM
KCk7CisgICAgdm9pZCB1cGRhdGVQcm9ncmVzcygpOworCisgICAgV0tQYWdlUmVmIGNyZWF0ZU5l
d1BhZ2UoV0tQYWdlUmVmLCBXS1BhZ2VDb25maWd1cmF0aW9uUmVmKTsKKworICAgIFdLUmV0YWlu
UHRyPFdLVmlld1JlZj4gbV92aWV3OworICAgIHN0ZDo6c2hhcmVkX3B0cjxXZWJDb250ZXh0PiBt
X2NvbnRleHQ7CisgICAgV0tSZXRhaW5QdHI8V0tQcmVmZXJlbmNlc1JlZj4gbV9wcmVmZXJlbmNl
czsKKworICAgIENsaWVudCBtX2NsaWVudDsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjx1bnNpZ25l
ZCBjaGFyW10+IG1fc3VyZmFjZTsKKworICAgIHN0ZDo6c3RyaW5nIG1fdGl0bGU7CisgICAgc3Rk
OjpzdHJpbmcgbV91cmw7CisgICAgZG91YmxlIG1fcHJvZ3Jlc3MgeyAwIH07CisKKyAgICBib29s
IG1fYWN0aXZlIHsgZmFsc2UgfTsKK307CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9w
bGF5c3RhdGlvbi9tYWluLmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL21haW4u
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjI5ZjQ1YjAyMTIwNmFmZDk2ZjdjM2Y5Nzg3NjY3Y2YyNWQzNmQ0MTgK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9tYWluLmNw
cApAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJh
Y3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJNYWluV2luZG93
LmgiCisjaW5jbHVkZSA8V2ViS2l0L1dLUnVuTG9vcC5oPgorI2luY2x1ZGUgPGRsZmNuLmg+Cisj
aW5jbHVkZSA8dG9vbGtpdHRlbi9BcHBsaWNhdGlvbi5oPgorCit1c2luZyB0b29sa2l0dGVuOjpX
aWRnZXQ7Cit1c2luZyB0b29sa2l0dGVuOjpBcHBsaWNhdGlvbjsKKworc3RhdGljIHZvaWQgbG9h
ZExpYnJhcnlPckV4aXQoY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBpZiAoIWRsb3BlbihuYW1l
LCBSVExEX05PVykpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gbG9hZCAl
cy5cbiIsIG5hbWUpOworICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgfQorfQorCitf
X2F0dHJpYnV0ZV9fKChjb25zdHJ1Y3RvcigxMTApKSkKK3N0YXRpYyB2b2lkIGluaXRpYWxpemUo
KQoreworICAgIGxvYWRMaWJyYXJ5T3JFeGl0KCJQb3NpeFdlYktpdCIpOworICAgIHNldGVudl9u
cCgiV2ViSW5zcGVjdG9yU2VydmVyUG9ydCIsICI4NjgiLCAxKTsKKworICAgIGxvYWRMaWJyYXJ5
T3JFeGl0KCJsaWJwbmcxNiIpOworICAgIGxvYWRMaWJyYXJ5T3JFeGl0KCJsaWJpY3UiKTsKKyAg
ICBsb2FkTGlicmFyeU9yRXhpdCgibGliZm9udGNvbmZpZyIpOworICAgIGxvYWRMaWJyYXJ5T3JF
eGl0KCJsaWJmcmVldHlwZSIpOworICAgIGxvYWRMaWJyYXJ5T3JFeGl0KCJsaWJoYXJmYnV6eiIp
OworICAgIGxvYWRMaWJyYXJ5T3JFeGl0KCJsaWJjYWlybyIpOworICAgIGxvYWRMaWJyYXJ5T3JF
eGl0KCJsaWJUb29sS2l0dGVuIik7ICAgIAorICAgIGxvYWRMaWJyYXJ5T3JFeGl0KCJsaWJTY2VO
S1dlYktpdFJlcXVpcmVtZW50cyIpOworICAgIGxvYWRMaWJyYXJ5T3JFeGl0KCJsaWJKYXZhU2Ny
aXB0Q29yZSIpOworICAgIGxvYWRMaWJyYXJ5T3JFeGl0KCJsaWJXZWJLaXQiKTsKK30KKworY2xh
c3MgQXBwbGljYXRpb25DbGllbnQgOiBwdWJsaWMgQXBwbGljYXRpb246OkNsaWVudCB7CitwdWJs
aWM6CisgICAgdm9pZCByZXF1ZXN0TmV4dEZyYW1lKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IFdLUnVuTG9vcENhbGxPbk1haW5UaHJlYWQodXBkYXRlQXBwbGljYXRpb24sIHRoaXMpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCB1cGRhdGVBcHBsaWNhdGlvbih2b2lkKikK
KyAgICB7CisgICAgICAgIEFwcGxpY2F0aW9uOjpzaW5nbGV0b24oKS51cGRhdGUoKTsKKyAgICB9
Cit9OworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIFdLUnVuTG9v
cEluaXRpYWxpemVNYWluKCk7CisKKyAgICBBcHBsaWNhdGlvbkNsaWVudCBhcHBsaWNhdGlvbkNs
aWVudDsKKyAgICBhdXRvJiBhcHAgPSBBcHBsaWNhdGlvbjo6c2luZ2xldG9uKCk7CisgICAgYXBw
LmluaXQoJmFwcGxpY2F0aW9uQ2xpZW50KTsKKworICAgIGF1dG8gbWFpbldpbmRvdyA9IHN0ZDo6
bWFrZV91bmlxdWU8TWFpbldpbmRvdz4oKTsKKyAgICBtYWluV2luZG93LT5zZXRGb2N1c2VkKCk7
CisgICAgYXBwLnNldFJvb3RXaWRnZXQobW92ZShtYWluV2luZG93KSk7CisKKyAgICAvLyBSZXF1
ZXN0IHRoZSBmaXJzdCBmcmFtZSB0byBzdGFydCB0aGUgYXBwbGljYXRpb24gbG9vcC4KKyAgICBh
cHBsaWNhdGlvbkNsaWVudC5yZXF1ZXN0TmV4dEZyYW1lKCk7CisKKyAgICBXS1J1bkxvb3BSdW5N
YWluKCk7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL1BsYXRmb3JtUGxh
eVN0YXRpb24uY21ha2UgYi9Ub29scy9QbGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtlCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmE1MzViOWFiYThhODUxNmIzNGU5NWMxZGVmZjA4MjQwY2UyMjdhMGQKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9QbGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtlCkBAIC0wLDAgKzEsMyBAQAor
aWYgKEVOQUJMRV9XRUJLSVQpCisgICAgYWRkX3N1YmRpcmVjdG9yeShNaW5pQnJvd3Nlci9wbGF5
c3RhdGlvbikKK2VuZGlmICgpCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5k
ZXggZGFjY2MxY2NmOThkOGFlMTdlZDVhYTA1YjAwMTBiMWY5N2Y5OTE1MC4uM2U5ZDgzM2FhNTlk
ZWU5NjAwOGIyMThlZjY3ZmVkOGUwOGZmNDZjZiAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBi
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIxLTAxLTA2ICBZb3NoaWFraSBKaXRzdWth
d2EgIDx5b3NoaWFraS5qaXRzdWthd2FAc29ueS5jb20+CisKKyAgICAgICAgW1BsYXlTdGF0aW9u
XSBBZGQgTWluaUJyb3dzZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIyMDM1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEVuYWJsZSBGdWxsc2NyZWVuIEFQSS4KKworICAgICAgICAqIFNvdXJjZS9jbWFr
ZS9PcHRpb25zUGxheVN0YXRpb24uY21ha2U6CisKIDIwMjAtMTEtMjYgIExhdXJvIE1vdXJhICA8
bG1vdXJhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS11bR1RLNF0gQnVpbGRpbmcgd2l0aCBH
T2JqZWN0LUludHJvc3BlY3Rpb24gc3VwcG9ydCBkb2VzIG5vdCB3b3JrCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417230</attachid>
            <date>2021-01-07 17:17:16 -0800</date>
            <delta_ts>2021-01-11 00:13:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220359-20210108101714.patch</filename>
            <type>text/plain</type>
            <size>112544</size>
            <attacher name="Yoshiaki Jitsukawa">yoshiaki.jitsukawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcwMTgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWZmZDE5MWQzZWNhYTQy
ZjE2Njk5MDZlYWU2YWJkM2ZkZDgwYWQ0Ni4uMTEzYWU5MzFkODlhMGIzOWU5YzJkNWU1MjEwNDQ0
OWRlOWM0YjZkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDIxLTAxLTA2ICBZb3No
aWFraSBKaXRzdWthd2EgIDx5b3NoaWFraS5qaXRzdWthd2FAc29ueS5jb20+CisKKyAgICAgICAg
W1BsYXlTdGF0aW9uXSBBZGQgTWluaUJyb3dzZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDM1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCBXaWRnZXRQbGF5U3RhdGlvbiB0byBzdXBwb3J0IGN1
c3RvbSBjdXJzb3IuCisKKyAgICAgICAgTG9hZCBDQSBjZXJ0cyBpbiBDdXJsU1NMSGFuZGxlOjpw
bGF0Zm9ybUluaXRpYWxpemUoKS4KKworICAgICAgICAqIFBsYXRmb3JtUGxheVN0YXRpb24uY21h
a2U6IEFkZCBXaWRnZXRQbGF5U3RhdGlvbi5jcHAKKyAgICAgICAgKiBwbGF0Zm9ybS9XaWRnZXQu
Y3BwOiBBbGxvdyBQbGF5U3RhdGlvbiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL3BsYXlzdGF0aW9uL0N1cmxTU0xIYW5kbGVQbGF5U3RhdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDdXJsU1NMSGFuZGxlOjpwbGF0Zm9ybUluaXRpYWxpemUp
OiBMb2FkIENBIGNlcnRzLgorICAgICAgICAqIHBsYXRmb3JtL3BsYXlzdGF0aW9uL1dpZGdldFBs
YXlTdGF0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6On5XaWRnZXQp
OgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpzZXRGcmFtZVJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6V2lkZ2V0OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnNldEZvY3Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6c2V0Q3Vyc29yKTogQ2FsbCBob3N0V2luZG93
KCkncyBzZXRDdXJzb3IoKS4KKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6c2hvdyk6CisgICAg
ICAgIChXZWJDb3JlOjpXaWRnZXQ6OmhpZGUpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0Ojpz
ZXRJc1NlbGVjdGVkKToKKwogMjAyMC0xMS0yNiAgTGF1cm8gTW91cmEgIDxsbW91cmFAaWdhbGlh
LmNvbT4KIAogICAgICAgICBbR1RLNF0gQnVpbGQgZml4LiBBZGQgY2FzdCB3aGVuIHRha2luZyBj
b25zdCBkYXRhIG93bmVyc2hpcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBkNTE0M2NjN2U1MGY4MTc3MDNjYTZhY2Zk
OGYwM2YyMDU5MzY2YmM4Li5lZjY1NjRmMTgyMGMyYTY2MTU3N2Y3YjczNWUxYTgyYWMyNmYzOTRh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDIxLTAxLTA2ICBZb3NoaWFraSBKaXRzdWth
d2EgIDx5b3NoaWFraS5qaXRzdWthd2FAc29ueS5jb20+CisKKyAgICAgICAgW1BsYXlTdGF0aW9u
XSBBZGQgTWluaUJyb3dzZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIyMDM1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZCBXS1J1bmxvb3AgQVBJIHRvIGFsbG93IGFuIGV4dGVybmFsIHByb2dyYW0g
dG8gcnVuIFdlYktpdCdzIGdlbmVyaWMgcnVubG9vcC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQy9wbGF5c3RhdGlvbi9XS1J1bkxvb3AuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdLUnVuTG9v
cFJ1bk1haW4pOgorICAgICAgICAoV0tSdW5Mb29wU3RvcE1haW4pOgorICAgICAgICAoV0tSdW5M
b29wQ2FsbE9uTWFpblRocmVhZCk6CisgICAgICAgIChXS1J1bkxvb3BJbml0aWFsaXplTWFpbik6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLUnVuTG9vcC5oOiBBZGRl
ZC4KKworICAgICAgICBBZGQgcHJpdmF0ZSBXS1BhZ2VQYWludCgpIHRvIGRyYXcgY29udGVudHMg
dG8gYml0bWFwLgorICAgICAgICBSZW1vdmUgdW51c2VkIFdLUGFnZVNldFNpemUoKSBpbXBsZW1l
bnRhdGlvbi4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1BhZ2VQ
cml2YXRlUGxheVN0YXRpb24uY3BwOgorICAgICAgICAoZHJhd1BhZ2VCYWNrZ3JvdW5kKToKKyAg
ICAgICAgKFdLUGFnZUhhbmRsZU1vdXNlRXZlbnQpOiBGaXggYnV0dG9uIGNsaWNrIGV2ZW50IGhh
bmRsaW5nLgorICAgICAgICAoV0tQYWdlUGFpbnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Qy9wbGF5c3RhdGlvbi9XS1BhZ2VQcml2YXRlUGxheVN0YXRpb24uaDoKKworICAgICAgICBBZGQg
V0tWaWV3IEFQSSB0byBzZXQgdmlldyBjbGllbnQgYWxvbmcgd2l0aCBmdWxsc2NyZWVuIEFQSSBh
bmQgdmlzaWJpbGl0eSBzdGF0ZSBBUEkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvcGxh
eXN0YXRpb24vV0tWaWV3LmNwcDoKKyAgICAgICAgKFdLVmlld0dldFBhZ2UpOgorICAgICAgICAo
V0tWaWV3U2V0U2l6ZSk6CisgICAgICAgIChXS1ZpZXdTZXRGb2N1cyk6CisgICAgICAgIChXS1Zp
ZXdTZXRBY3RpdmUpOgorICAgICAgICAoV0tWaWV3U2V0VmlzaWJsZSk6CisgICAgICAgIChXS1Zp
ZXdXaWxsRW50ZXJGdWxsU2NyZWVuKToKKyAgICAgICAgKFdLVmlld0RpZEVudGVyRnVsbFNjcmVl
bik6CisgICAgICAgIChXS1ZpZXdXaWxsRXhpdEZ1bGxTY3JlZW4pOgorICAgICAgICAoV0tWaWV3
RGlkRXhpdEZ1bGxTY3JlZW4pOgorICAgICAgICAoV0tWaWV3UmVxdWVzdEV4aXRGdWxsU2NyZWVu
KToKKyAgICAgICAgKFdLVmlld0lzRnVsbFNjcmVlbik6CisgICAgICAgIChXS1ZpZXdTZXRWaWV3
Q2xpZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tWaWV3Lmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLVmlld0NsaWVudC5oOiBB
ZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3BsYXlzdGF0aW9uL0FQSVZpZXdDbGllbnQu
aDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL3BsYXlzdGF0aW9uL1BhZ2VDbGllbnRJbXBs
LmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvcGxheXN0YXRpb24vUGFnZUNsaWVudEltcGwuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvcGxheXN0YXRpb24vUGxheVN0YXRpb25XZWJWaWV3LmNwcDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvcGxheXN0YXRpb24vUGxheVN0YXRpb25XZWJWaWV3Lmg6CisK
KyAgICAgICAgQWxsb3cgcmVuZGVyaW5nIHdpdGhvdXQgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcu
CisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2U6OnVwZGF0ZVByZWZlcmVuY2VzKToKKworICAgICAgICAqIFBsYXRmb3Jt
UGxheVN0YXRpb24uY21ha2U6IEFkZCByZWxldmFudCBzb3VyY2VzIGFuZCBpbmNsdWRlIGRpcmVj
dG9yaWVzLgorCiAyMDIwLTExLTI3ICBZb3NoaWFraSBKaXRzdWthd2EgIDx5b3NoaWFraS5qaXRz
dWthd2FAc29ueS5jb20+CiAKICAgICAgICAgW1BsYXlTdGF0aW9uXSBEZWZpbmUgcGxhdGZvcm0g
YXJndW1lbnQgY29kZXJzIGZvciBGb250CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybVBsYXlTdGF0aW9uLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1QbGF5U3RhdGlv
bi5jbWFrZQppbmRleCBkNjc0NWEzYjM4MDFlMjAwMGYxM2UyMjUxZjhmOGUzYTBmMWM2MDk2Li41
OTcyYjdmMGJiNzY2M2EwOTczMTllYWFiNjljZGE2MDY0NTk2YmNhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtUGxheVN0YXRpb24uY21ha2UKQEAgLTYwLDYgKzYwLDcgQEAgbGlzdChBUFBFTkQg
V2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vcGxheXN0YXRpb24vUGxhdGZvcm1TY3JlZW5Q
bGF5U3RhdGlvbi5jcHAKICAgICBwbGF0Zm9ybS9wbGF5c3RhdGlvbi9TY3JvbGxiYXJUaGVtZVBs
YXlTdGF0aW9uLmNwcAogICAgIHBsYXRmb3JtL3BsYXlzdGF0aW9uL1VzZXJBZ2VudFBsYXlTdGF0
aW9uLmNwcAorICAgIHBsYXRmb3JtL3BsYXlzdGF0aW9uL1dpZGdldFBsYXlTdGF0aW9uLmNwcAog
CiAgICAgcGxhdGZvcm0vcG9zaXgvU2hhcmVkQnVmZmVyUE9TSVguY3BwCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9XaWRnZXQuY3BwCmluZGV4IGE3ZmUzODBmM2ZkMmQ5Y2E2Y2Y4MjhiODJlYTNkNDZkZDUz
N2U5NmMuLjVhNGUxNDljMGY3ZmI5ZGUwODFmY2Y3YzQwMWU0MDI0NDVhZTVmMmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vV2lkZ2V0LmNwcApAQCAtMjcxLDcgKzI3MSw3IEBAIEZsb2F0UG9pbnQgV2lk
Z2V0Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KGNvbnN0IEZsb2F0UG9pbnQmIHBhcmVudFBv
aW50KSBjb25zCiAgICAgcmV0dXJuIGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcoSW50UG9pbnQo
cGFyZW50UG9pbnQpKTsKIH0KIAotI2lmICFQTEFURk9STShDT0NPQSkgJiYgIVBMQVRGT1JNKEdU
SykgJiYgIVBMQVRGT1JNKFdJTikKKyNpZiAhUExBVEZPUk0oQ09DT0EpICYmICFQTEFURk9STShH
VEspICYmICFQTEFURk9STShXSU4pICYmICFQTEFURk9STShQTEFZU1RBVElPTikKIAogV2lkZ2V0
Ojp+V2lkZ2V0KCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvcGxheXN0YXRpb24vQ3VybFNTTEhhbmRsZVBsYXlTdGF0aW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvcGxheXN0YXRpb24vQ3VybFNTTEhhbmRsZVBsYXlTdGF0aW9u
LmNwcAppbmRleCAzZTFlMjg3NTBjMGY4NzVjZTRhZjE3Y2IzYzIxMGVhY2U3ZjRiMWMxLi4xNjcz
MWU5OTA4ZGQyZThmMmMxOTY0NjI1YmY3MjQ4ZDdjNmJjZWI4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3BsYXlzdGF0aW9uL0N1cmxTU0xIYW5kbGVQbGF5U3Rh
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9wbGF5c3RhdGlv
bi9DdXJsU1NMSGFuZGxlUGxheVN0YXRpb24uY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxOCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICog
Q29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDIyICsyNiwyNCBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkN1cmxTU0xIYW5kbGUuaCIKIAorI2luY2x1ZGUgPENl
cnRpZmljYXRlU3RvcmUvQ2VydGlmaWNhdGVTdG9yZS5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXN0YXRpYyBTdHJpbmcgZ2V0Q0FDZXJ0UGF0aEVudigpCit2b2lkIEN1cmxTU0xIYW5kbGU6
OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiB7Ci0gICAgY2hhciogZW52UGF0aCA9IGdldGVudigiQ1VS
TF9DQV9CVU5ETEVfUEFUSCIpOwotICAgIGlmIChlbnZQYXRoKQotICAgICAgICByZXR1cm4geyBl
bnZQYXRoIH07CisgICAgYXV0byBjZXJ0aWZpY2F0ZURhdGEgPSBDZXJ0aWZpY2F0ZURhdGE6OmNy
ZWF0ZSgpOworICAgIENlcnRpZmljYXRlU3RvcmU6OmdldFRydXN0ZWRSb290Q0EoKmNlcnRpZmlj
YXRlRGF0YSk7CiAKLSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLX0KKyAgICBDZXJ0aWZpY2F0
ZUluZm86OkNlcnRpZmljYXRlIGNhQ2VydERhdGE7CisgICAgY2FDZXJ0RGF0YS5hcHBlbmQoY2Vy
dGlmaWNhdGVEYXRhLT5kYXRhKCksIGNlcnRpZmljYXRlRGF0YS0+c2l6ZSgpKTsKKyAgICBpZiAo
Y2VydGlmaWNhdGVEYXRhLT5zaXplKCkpCisgICAgICAgIHNldENBQ2VydERhdGEoV1RGTW92ZShj
YUNlcnREYXRhKSk7CiAKLXZvaWQgQ3VybFNTTEhhbmRsZTo6cGxhdGZvcm1Jbml0aWFsaXplKCkK
LXsKLSAgICBhdXRvIGNhQ2VydFBhdGggPSBnZXRDQUNlcnRQYXRoRW52KCk7Ci0gICAgaWYgKCFj
YUNlcnRQYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgc2V0Q0FDZXJ0UGF0aChXVEZNb3ZlKGNhQ2Vy
dFBhdGgpKTsKKyAgICBzZXRDaXBoZXJMaXN0KENlcnRpZmljYXRlU3RvcmU6OmNpcGhlclN1aXRl
cygpKTsKKyAgICBzZXRDdXJ2ZXNMaXN0KENlcnRpZmljYXRlU3RvcmU6OnN1cHBvcnRlZEdyb3Vw
cygpKTsKKworICAgIHNldElnbm9yZVNTTEVycm9ycyhDZXJ0aWZpY2F0ZVN0b3JlOjpzaG91bGRJ
Z25vcmVUTFNFcnJvcnMoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3BsYXlzdGF0aW9uL1dpZGdldFBsYXlTdGF0aW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3BsYXlzdGF0aW9uL1dpZGdldFBsYXlTdGF0
aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jNWEyY2EyZTc4MTg4ZDA3ODZlZDRkNmI2ZDNjMmFjNDBkYjI5
ZGFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcGxheXN0YXRp
b24vV2lkZ2V0UGxheVN0YXRpb24uY3BwCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldpZGdldC5oIgorCisjaW5jbHVkZSAi
RnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgorI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV2lkZ2V0Ojp+V2lkZ2V0KCkKK3sK
KyAgICBBU1NFUlQoIXBhcmVudCgpKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IFdpZGdldDo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgbV9mcmFt
ZSA9IHJlY3Q7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXaWRnZXQ6OnBhaW50
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmLCBTZWN1cml0eU9yaWdpblBhaW50UG9s
aWN5LCBFdmVudFJlZ2lvbkNvbnRleHQqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgV2lkZ2V0OjpzZXRGb2N1cyhib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgV2lkZ2V0OjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJiBjdXJzb3IpCit7CisgICAg
RnJhbWVWaWV3KiB2aWV3ID0gcm9vdCgpOworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJu
OworICAgIHZpZXctPmhvc3RXaW5kb3coKS0+c2V0Q3Vyc29yKGN1cnNvcik7Cit9CisKK3ZvaWQg
V2lkZ2V0OjpzaG93KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdpZGdl
dDo6aGlkZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXaWRnZXQ6OnNl
dElzU2VsZWN0ZWQoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtUGxheVN0
YXRpb24uY21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtUGxheVN0YXRpb24uY21ha2UKaW5k
ZXggY2RlODE5ODcxNmQ0MjUyMmNiOTg3N2JhZDk5OGU0YjYwYzhhOWI0Yi4uYzhkYzc0MzMxZDk4
MjQyOTdlZGQ3YzY0Y2M1MzljZWY5ODJjOWM3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1QbGF5
U3RhdGlvbi5jbWFrZQpAQCAtODksNiArODksNyBAQCBsaXN0KEFQUEVORCBXZWJLaXRfU09VUkNF
UwogCiAgICAgVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLQ29udGV4dENvbmZpZ3VyYXRp
b25QbGF5U3RhdGlvbi5jcHAKICAgICBVSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tQYWdl
UHJpdmF0ZVBsYXlTdGF0aW9uLmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9X
S1J1bmxvb3AuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLVmlldy5jcHAK
IAogICAgIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL2NhaXJvL1dlYkF1dG9tYXRpb25TZXNzaW9uQ2Fp
cm8uY3BwCkBAIC0xNDEsNiArMTQyLDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0X0lOQ0xVREVfRElS
RUNUT1JJRVMKICAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJL0MvY2Fpcm8iCiAgICAg
IiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0FQSS9DL2N1cmwiCiAgICAgIiR7V0VCS0lUX0RJUn0v
VUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uIgorICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vz
cy9BUEkvcGxheXN0YXRpb24iCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3MiCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL3BsYXlzdGF0aW9uIgog
ICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvY3VybCIKQEAgLTE2
Miw3ICsxNjQsOSBAQCBsaXN0KEFQUEVORCBXZWJLaXRfUFVCTElDX0ZSQU1FV09SS19IRUFERVJT
CiAKICAgICBVSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tDb250ZXh0Q29uZmlndXJhdGlv
blBsYXlTdGF0aW9uLmgKICAgICBVSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tQYWdlUHJp
dmF0ZVBsYXlTdGF0aW9uLmgKKyAgICBVSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tSdW5s
b29wLmgKICAgICBVSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tWaWV3LmgKKyAgICBVSVBy
b2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tWaWV3Q2xpZW50LmgKICkKIAogIyBCb3RoIFBBTCBh
bmQgV2ViQ29yZSBhcmUgYnVpbHQgYXMgb2JqZWN0IGxpYnJhcmllcy4gVGhlIFdlYktpdDo6IGlu
dGVyZmFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxheXN0
YXRpb24vV0tQYWdlUHJpdmF0ZVBsYXlTdGF0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLUGFnZVByaXZhdGVQbGF5U3RhdGlvbi5jcHAKaW5kZXgg
ZjcwNjhiNmVkOGE5MTJlZTc4NGVlZDU0OWI1ZjYwMjc3NjdkYjhmOS4uN2E4M2RkZTZhNDkwYmVm
Njg4YTE4NTNmNjU0OWNkZmRkMTM5ODdlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tQYWdlUHJpdmF0ZVBsYXlTdGF0aW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1BhZ2VQcml2YXRl
UGxheVN0YXRpb24uY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAy
MCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICogQ29weXJpZ2h0IChDKSAy
MDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDE2ICsyNiwyNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIldLUGFnZVByaXZhdGVQbGF5U3RhdGlvbi5oIgogCisjaW5jbHVkZSAiRHJhd2lu
Z0FyZWFQcm94eS5oIgorI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlDb29yZGluYXRlZEdyYXBo
aWNzLmgiCiAjaW5jbHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIk5h
dGl2ZVdlYk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJOYXRpdmVXZWJXaGVlbEV2ZW50LmgiCiAj
aW5jbHVkZSAiV2ViRXZlbnRGYWN0b3J5LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisj
aW5jbHVkZSA8Y2Fpcm8uaD4KICNpbmNsdWRlIDx3cGUvd3BlLmg+CiAKLXZvaWQgV0tQYWdlU2V0
U2l6ZShXS1BhZ2VSZWYgcGFnZVJlZiwgV0tTaXplIHNpemUpCitzdGF0aWMgdm9pZCBkcmF3UGFn
ZUJhY2tncm91bmQoY2Fpcm9fdCogY3R4LCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpDb2xvcj4m
IGJhY2tncm91bmRDb2xvciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKIHsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIGlmICghYmFja2dyb3VuZENvbG9yIHx8IGJhY2tncm91bmRD
b2xvci52YWx1ZSgpLmlzVmlzaWJsZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIFty
LCBnLCBiLCBhXSA9IGJhY2tncm91bmRDb2xvci52YWx1ZSgpLnRvU1JHQkFMb3NzeTx1aW50OF90
PigpOworCisgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKGN0eCwgciwgZywgYiwgYSk7CisgICAg
Y2Fpcm9fcmVjdGFuZ2xlKGN0eCwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJl
Y3QuaGVpZ2h0KCkpOworICAgIGNhaXJvX3NldF9vcGVyYXRvcihjdHgsIENBSVJPX09QRVJBVE9S
X09WRVIpOworICAgIGNhaXJvX2ZpbGwoY3R4KTsKIH0KIAogdm9pZCBXS1BhZ2VIYW5kbGVLZXli
b2FyZEV2ZW50KFdLUGFnZVJlZiBwYWdlUmVmLCBXS0tleWJvYXJkRXZlbnQgZXZlbnQpCkBAIC03
MywxMSArODQsMTYgQEAgdm9pZCBXS1BhZ2VIYW5kbGVNb3VzZUV2ZW50KFdLUGFnZVJlZiBwYWdl
UmVmLCBXS01vdXNlRXZlbnQgZXZlbnQpCiAKICAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHsKICAg
ICBjYXNlIGtXS0V2ZW50TW91c2VEb3duOgorICAgICAgICB3cGVFdmVudC50eXBlID0gd3BlX2lu
cHV0X3BvaW50ZXJfZXZlbnRfdHlwZV9idXR0b247CisgICAgICAgIHdwZUV2ZW50LnN0YXRlID0g
MTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBrV0tFdmVudE1vdXNlVXA6CiAgICAgICAgIHdw
ZUV2ZW50LnR5cGUgPSB3cGVfaW5wdXRfcG9pbnRlcl9ldmVudF90eXBlX2J1dHRvbjsKKyAgICAg
ICAgd3BlRXZlbnQuc3RhdGUgPSAwOwogICAgICAgICBicmVhazsKICAgICBjYXNlIGtXS0V2ZW50
TW91c2VNb3ZlOgogICAgICAgICB3cGVFdmVudC50eXBlID0gd3BlX2lucHV0X3BvaW50ZXJfZXZl
bnRfdHlwZV9tb3Rpb247CisgICAgICAgIHdwZUV2ZW50LnN0YXRlID0gMDsKICAgICAgICAgYnJl
YWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMDQs
NyArMTIwLDYgQEAgdm9pZCBXS1BhZ2VIYW5kbGVNb3VzZUV2ZW50KFdLUGFnZVJlZiBwYWdlUmVm
LCBXS01vdXNlRXZlbnQgZXZlbnQpCiAgICAgd3BlRXZlbnQudGltZSA9IDA7CiAgICAgd3BlRXZl
bnQueCA9IGV2ZW50LnBvc2l0aW9uLng7CiAgICAgd3BlRXZlbnQueSA9IGV2ZW50LnBvc2l0aW9u
Lnk7Ci0gICAgd3BlRXZlbnQuc3RhdGUgPSAwOwogICAgIHdwZUV2ZW50Lm1vZGlmaWVycyA9IDA7
IC8vIFRPRE86IEhhbmRsZSBtb2RpZmllcnMuCiAKICAgICBjb25zdCBmbG9hdCBkZXZpY2VTY2Fs
ZUZhY3RvciA9IDE7CkBAIC0xMzIsMyArMTQ3LDM0IEBAIHZvaWQgV0tQYWdlSGFuZGxlV2hlZWxF
dmVudChXS1BhZ2VSZWYgcGFnZVJlZiwgV0tXaGVlbEV2ZW50IGV2ZW50KQogCiAgICAgV2ViS2l0
Ojp0b0ltcGwocGFnZVJlZiktPmhhbmRsZVdoZWVsRXZlbnQoTmF0aXZlV2ViV2hlZWxFdmVudCgm
d3BlRXZlbnQuYmFzZSwgZGV2aWNlU2NhbGVGYWN0b3IsIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQ
aGFzZU5vbmUsIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZU5vbmUpKTsKIH0KKwordm9pZCBX
S1BhZ2VQYWludChXS1BhZ2VSZWYgcGFnZVJlZiwgdW5zaWduZWQgY2hhciogc3VyZmFjZURhdGEs
IFdLU2l6ZSB3a1N1cmZhY2VTaXplLCBXS1JlY3Qgd2tQYWludFJlY3QpCit7CisgICAgYXV0byBz
dXJmYWNlU2l6ZSA9IFdlYktpdDo6dG9JbnRTaXplKHdrU3VyZmFjZVNpemUpOworICAgIGF1dG8g
cGFpbnRSZWN0ID0gV2ViS2l0Ojp0b0ludFJlY3Qod2tQYWludFJlY3QpOworICAgIGlmICghc3Vy
ZmFjZURhdGEgfHwgc3VyZmFjZVNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBjb25zdCBjYWlyb19mb3JtYXRfdCBmb3JtYXQgPSBDQUlST19GT1JNQVRfQVJHQjMyOworICAg
IGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zv
cl9kYXRhKHN1cmZhY2VEYXRhLCBmb3JtYXQsIHN1cmZhY2VTaXplLndpZHRoKCksIHN1cmZhY2VT
aXplLmhlaWdodCgpLCBjYWlyb19mb3JtYXRfc3RyaWRlX2Zvcl93aWR0aChmb3JtYXQsIHN1cmZh
Y2VTaXplLndpZHRoKCkpKTsKKyAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZSkg
IT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpCisgICAgICAgIHJldHVybjsKKworICAgIGNhaXJvX3Qq
IGN0eCA9IGNhaXJvX2NyZWF0ZShzdXJmYWNlKTsKKworICAgIGF1dG8gcGFnZSA9IFdlYktpdDo6
dG9JbXBsKHBhZ2VSZWYpOworICAgIGF1dG8mIGJhY2tncm91bmRDb2xvciA9IHBhZ2UtPmJhY2tn
cm91bmRDb2xvcigpOworICAgIHBhZ2UtPmVuZFByaW50aW5nKCk7CisgICAgaWYgKGF1dG8qIGRy
YXdpbmdBcmVhID0gc3RhdGljX2Nhc3Q8V2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5Q29vcmRpbmF0
ZWRHcmFwaGljcyo+KHBhZ2UtPmRyYXdpbmdBcmVhKCkpKSB7CisgICAgICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgcG9ydCBXZWJLaXQxJ3MgcmVjdCBjb2FsZXNjaW5nIGxvZ2ljIGhlcmUuCisgICAg
ICAgIFdlYkNvcmU6OlJlZ2lvbiB1bnBhaW50ZWRSZWdpb247CisgICAgICAgIGRyYXdpbmdBcmVh
LT5wYWludChjdHgsIHBhaW50UmVjdCwgdW5wYWludGVkUmVnaW9uKTsKKworICAgICAgICBmb3Ig
KGNvbnN0IGF1dG8mIHJlY3QgOiB1bnBhaW50ZWRSZWdpb24ucmVjdHMoKSkKKyAgICAgICAgICAg
IGRyYXdQYWdlQmFja2dyb3VuZChjdHgsIGJhY2tncm91bmRDb2xvciwgcmVjdCk7CisgICAgfSBl
bHNlCisgICAgICAgIGRyYXdQYWdlQmFja2dyb3VuZChjdHgsIGJhY2tncm91bmRDb2xvciwgcGFp
bnRSZWN0KTsKKworICAgIGNhaXJvX2Rlc3Ryb3koY3R4KTsKKyAgICBjYWlyb19zdXJmYWNlX2Rl
c3Ryb3koc3VyZmFjZSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9wbGF5c3RhdGlvbi9XS1BhZ2VQcml2YXRlUGxheVN0YXRpb24uaCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLUGFnZVByaXZhdGVQbGF5U3RhdGlvbi5o
CmluZGV4IGQ5ZDYxOGU1ZjM5N2Y0ZDgxYWU2ZDhjZTQyYzk4YzdhZTMyZjhkYWMuLjY3NDkyNDY2
MjllZGQyNmU5YWY5OTU3ZWQ0NWFhNmY2OWVjYzAxMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLUGFnZVByaXZhdGVQbGF5U3RhdGlvbi5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLUGFnZVBy
aXZhdGVQbGF5U3RhdGlvbi5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICogQ29weXJpZ2h0IChD
KSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDkgKzMyLDExIEBACiBleHRlcm4gIkMiIHsKICNlbmRp
ZgogCi1XS19FWFBPUlQgdm9pZCBXS1BhZ2VIYW5kbGVLZXlib2FyZEV2ZW50KFdLUGFnZVJlZiBw
YWdlLCBXS0tleWJvYXJkRXZlbnQpOwotV0tfRVhQT1JUIHZvaWQgV0tQYWdlSGFuZGxlTW91c2VF
dmVudChXS1BhZ2VSZWYgcGFnZSwgV0tNb3VzZUV2ZW50KTsKLVdLX0VYUE9SVCB2b2lkIFdLUGFn
ZUhhbmRsZVdoZWVsRXZlbnQoV0tQYWdlUmVmIHBhZ2UsIFdLV2hlZWxFdmVudCk7CitXS19FWFBP
UlQgdm9pZCBXS1BhZ2VIYW5kbGVLZXlib2FyZEV2ZW50KFdLUGFnZVJlZiwgV0tLZXlib2FyZEV2
ZW50KTsKK1dLX0VYUE9SVCB2b2lkIFdLUGFnZUhhbmRsZU1vdXNlRXZlbnQoV0tQYWdlUmVmLCBX
S01vdXNlRXZlbnQpOworV0tfRVhQT1JUIHZvaWQgV0tQYWdlSGFuZGxlV2hlZWxFdmVudChXS1Bh
Z2VSZWYsIFdLV2hlZWxFdmVudCk7CisKK1dLX0VYUE9SVCB2b2lkIFdLUGFnZVBhaW50KFdLUGFn
ZVJlZiwgdW5zaWduZWQgY2hhciogY2Fpcm9TdXJmYWNlQVJHQjMyRGF0YSwgV0tTaXplIHN1cmZh
Y2VTaXplLCBXS1JlY3QgcGFpbnRSZWN0KTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1J1bkxv
b3AuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tSdW5M
b29wLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iMGYzNDBiYWM5ZTRlNGI3Y2FhN2U3ZTM5MDQ0Mzk4OGVlODIz
YTUwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxh
eXN0YXRpb24vV0tSdW5Mb29wLmNwcApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXS1J1bkxvb3AuaCIKKworI2luY2x1ZGUg
IldlYktpdDJJbml0aWFsaXplLmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNs
dWRlIDx3dGYvUnVuTG9vcC5oPgorCit2b2lkIFdLUnVuTG9vcFJ1bk1haW4oKQoreworICAgIFJ1
bkxvb3A6Om1haW4oKS5ydW4oKTsKK30KKwordm9pZCBXS1J1bkxvb3BTdG9wTWFpbigpCit7Cisg
ICAgUnVuTG9vcDo6bWFpbigpLnN0b3AoKTsKK30KKwordm9pZCBXS1J1bkxvb3BDYWxsT25NYWlu
VGhyZWFkKFdLUnVuTG9vcENhbGxiYWNrIGNhbGxiYWNrLCB2b2lkKiB1c2VyRGF0YSkKK3sKKyAg
ICBpZiAoIWNhbGxiYWNrKQorICAgICAgICByZXR1cm47CisKKyAgICBjYWxsT25NYWluVGhyZWFk
KFtjYWxsYmFjaywgdXNlckRhdGFdKCkgeworICAgICAgICBjYWxsYmFjayh1c2VyRGF0YSk7Cisg
ICAgfSk7Cit9CisKK3ZvaWQgV0tSdW5Mb29wSW5pdGlhbGl6ZU1haW4oKQoreworICAgIC8vIEZJ
WE1FOgorICAgIC8vIEluaXRpYWxpemluZyBSdW5Mb29wIGJ5IEluaXRpYWxpemVXZWJLaXQyKCku
CisgICAgLy8gV0tSdW5Mb29wSW5pdGlhbGl6ZU1haW4oKSBzaG91bGQgYmUgcmVuYW1lZCB0byBt
b3JlIHN0cmFpZ2h0Zm9yd2FyZCBBUEkgbmFtZSB0byB3cmFwIEluaXRpYWxpemVXZWJLaXQyKCku
CisgICAgV2ViS2l0OjpJbml0aWFsaXplV2ViS2l0MigpOworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tSdW5Mb29wLmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1J1bkxvb3AuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4wYzVjMGE0M2MwNWE0OTU2ZjViMDg0MGM0NmUwY2I5ZjBiMGI4ZDMxCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tSdW5Mb29w
LmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVy
YWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgPFdlYktpdC9XS0Jhc2UuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMi
IHsKKyNlbmRpZgorCit0eXBlZGVmIHZvaWQoKldLUnVuTG9vcENhbGxiYWNrKSh2b2lkICp1c2Vy
RGF0YSk7CisKK1dLX0VYUE9SVCB2b2lkIFdLUnVuTG9vcFJ1bk1haW4oKTsKK1dLX0VYUE9SVCB2
b2lkIFdLUnVuTG9vcFN0b3BNYWluKCk7CitXS19FWFBPUlQgdm9pZCBXS1J1bkxvb3BDYWxsT25N
YWluVGhyZWFkKFdLUnVuTG9vcENhbGxiYWNrLCB2b2lkKiB1c2VyRGF0YSk7CitXS19FWFBPUlQg
dm9pZCBXS1J1bkxvb3BJbml0aWFsaXplTWFpbigpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30K
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxheXN0
YXRpb24vV0tWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0
aW9uL1dLVmlldy5jcHAKaW5kZXggMWJlNTI5Njg4NWExMjNmODM4OTdjZGE4YTMxZjc4MjEyMzQ2
MzA1ZC4uYWNjM2NmMDY0Y2Y3OTcwNmI0YmI0N2QzNzRmMmY0OGU0N2EyMzY1ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tWaWV3LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1ZpZXcuY3Bw
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0
aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJh
Y3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI3LDE1ICsyNywxODIgQEAKICNpbmNsdWRlICJXS1ZpZXcuaCIKIAogI2luY2x1ZGUgIkFQ
SVBhZ2VDb25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSAiQVBJVmlld0NsaWVudC5oIgogI2luY2x1
ZGUgIlBsYXlTdGF0aW9uV2ViVmlldy5oIgogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1
ZGUgIldLU2hhcmVkQVBJQ2FzdC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ3Vyc29yLmg+CisKK25h
bWVzcGFjZSBBUEkgewordGVtcGxhdGU8PiBzdHJ1Y3QgQ2xpZW50VHJhaXRzPFdLVmlld0NsaWVu
dEJhc2U+IHsKKyAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8V0tWaWV3Q2xpZW50VjA+IFZlcnNpb25z
OworfTsKK30KKworV0tDdXJzb3JUeXBlIHRvV0tDdXJzb3JUeXBlKGNvbnN0IFdlYkNvcmU6OkN1
cnNvciYgY3Vyc29yKQoreworICAgIHN3aXRjaCAoY3Vyc29yLnR5cGUoKSkgeworICAgIGNhc2Ug
V2ViQ29yZTo6Q3Vyc29yOjpIYW5kOgorICAgICAgICByZXR1cm4ga1dLQ3Vyc29yVHlwZUhhbmQ7
CisgICAgY2FzZSBXZWJDb3JlOjpDdXJzb3I6Ok5vbmU6CisgICAgICAgIHJldHVybiBrV0tDdXJz
b3JUeXBlTm9uZTsKKyAgICBjYXNlIFdlYkNvcmU6OkN1cnNvcjo6UG9pbnRlcjoKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4ga1dLQ3Vyc29yVHlwZVBvaW50ZXI7CisgICAgfQorfQogCiBX
S1ZpZXdSZWYgV0tWaWV3Q3JlYXRlKFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYgY29uZmlndXJhdGlv
bikKIHsKICAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OlBsYXlTdGF0aW9uV2ViVmll
dzo6Y3JlYXRlKCpXZWJLaXQ6OnRvSW1wbChjb25maWd1cmF0aW9uKSkubGVha1JlZigpKTsKIH0K
IAotV0tQYWdlUmVmIFdLVmlld0dldFBhZ2UoV0tWaWV3UmVmIHZpZXdSZWYpCitXS1BhZ2VSZWYg
V0tWaWV3R2V0UGFnZShXS1ZpZXdSZWYgdmlldykKK3sKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQ
SShXZWJLaXQ6OnRvSW1wbCh2aWV3KS0+cGFnZSgpKTsKK30KKwordm9pZCBXS1ZpZXdTZXRTaXpl
KFdLVmlld1JlZiB2aWV3LCBXS1NpemUgdmlld1NpemUpCit7CisgICAgV2ViS2l0Ojp0b0ltcGwo
dmlldyktPnNldFZpZXdTaXplKFdlYktpdDo6dG9JbnRTaXplKHZpZXdTaXplKSk7Cit9CisKK3Zv
aWQgV0tWaWV3U2V0Rm9jdXMoV0tWaWV3UmVmIHZpZXcsIGJvb2wgZm9jdXNlZCkKK3sKKyAgICBh
dXRvIHZpZXdTdGF0ZSA9IFdlYktpdDo6dG9JbXBsKHZpZXcpLT52aWV3U3RhdGUoKTsKKyAgICBh
dXRvIGZsYWcgPSBXZWJDb3JlOjpBY3Rpdml0eVN0YXRlOjpJc0ZvY3VzZWQ7CisgICAgaWYgKGZv
Y3VzZWQpCisgICAgICAgIHZpZXdTdGF0ZS5hZGQoZmxhZyk7CisgICAgZWxzZQorICAgICAgICB2
aWV3U3RhdGUucmVtb3ZlKGZsYWcpOworICAgIFdlYktpdDo6dG9JbXBsKHZpZXcpLT5zZXRWaWV3
U3RhdGUodmlld1N0YXRlKTsKK30KKwordm9pZCBXS1ZpZXdTZXRBY3RpdmUoV0tWaWV3UmVmIHZp
ZXcsIGJvb2wgYWN0aXZlKQoreworICAgIGF1dG8gdmlld1N0YXRlID0gV2ViS2l0Ojp0b0ltcGwo
dmlldyktPnZpZXdTdGF0ZSgpOworICAgIGF1dG8gZmxhZyA9IFdlYkNvcmU6OkFjdGl2aXR5U3Rh
dGU6OldpbmRvd0lzQWN0aXZlOworICAgIGlmIChhY3RpdmUpCisgICAgICAgIHZpZXdTdGF0ZS5h
ZGQoZmxhZyk7CisgICAgZWxzZQorICAgICAgICB2aWV3U3RhdGUucmVtb3ZlKGZsYWcpOworICAg
IFdlYktpdDo6dG9JbXBsKHZpZXcpLT5zZXRWaWV3U3RhdGUodmlld1N0YXRlKTsKK30KKwordm9p
ZCBXS1ZpZXdTZXRWaXNpYmxlKFdLVmlld1JlZiB2aWV3LCBib29sIHZpc2libGUpCit7CisgICAg
YXV0byB2aWV3U3RhdGUgPSBXZWJLaXQ6OnRvSW1wbCh2aWV3KS0+dmlld1N0YXRlKCk7CisgICAg
YXV0byBmbGFnID0gV2ViQ29yZTo6QWN0aXZpdHlTdGF0ZTo6SXNWaXNpYmxlOworICAgIGlmICh2
aXNpYmxlKQorICAgICAgICB2aWV3U3RhdGUuYWRkKGZsYWcpOworICAgIGVsc2UKKyAgICAgICAg
dmlld1N0YXRlLnJlbW92ZShmbGFnKTsKKyAgICBXZWJLaXQ6OnRvSW1wbCh2aWV3KS0+c2V0Vmll
d1N0YXRlKHZpZXdTdGF0ZSk7Cit9CisKK3ZvaWQgV0tWaWV3V2lsbEVudGVyRnVsbFNjcmVlbihX
S1ZpZXdSZWYgdmlldykKK3sKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgV2ViS2l0
Ojp0b0ltcGwodmlldyktPndpbGxFbnRlckZ1bGxTY3JlZW4oKTsKKyNlbmRpZgorfQorCit2b2lk
IFdLVmlld0RpZEVudGVyRnVsbFNjcmVlbihXS1ZpZXdSZWYgdmlldykKK3sKKyNpZiBFTkFCTEUo
RlVMTFNDUkVFTl9BUEkpCisgICAgV2ViS2l0Ojp0b0ltcGwodmlldyktPmRpZEVudGVyRnVsbFNj
cmVlbigpOworI2VuZGlmCit9CisKK3ZvaWQgV0tWaWV3V2lsbEV4aXRGdWxsU2NyZWVuKFdLVmll
d1JlZiB2aWV3KQoreworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBXZWJLaXQ6OnRv
SW1wbCh2aWV3KS0+d2lsbEV4aXRGdWxsU2NyZWVuKCk7CisjZW5kaWYKK30KKwordm9pZCBXS1Zp
ZXdEaWRFeGl0RnVsbFNjcmVlbihXS1ZpZXdSZWYgdmlldykKK3sKKyNpZiBFTkFCTEUoRlVMTFND
UkVFTl9BUEkpCisgICAgV2ViS2l0Ojp0b0ltcGwodmlldyktPmRpZEV4aXRGdWxsU2NyZWVuKCk7
CisjZW5kaWYKK30KKwordm9pZCBXS1ZpZXdSZXF1ZXN0RXhpdEZ1bGxTY3JlZW4oV0tWaWV3UmVm
IHZpZXcpCiB7Ci0gICAgcmV0dXJuIFdlYktpdDo6dG9BUEkoV2ViS2l0Ojp0b0ltcGwodmlld1Jl
ZiktPnBhZ2UoKSk7CisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAgIFdlYktpdDo6dG9J
bXBsKHZpZXcpLT5yZXF1ZXN0RXhpdEZ1bGxTY3JlZW4oKTsKKyNlbmRpZgorfQorCitib29sIFdL
Vmlld0lzRnVsbFNjcmVlbihXS1ZpZXdSZWYgdmlldykKK3sKKyNpZiBFTkFCTEUoRlVMTFNDUkVF
Tl9BUEkpCisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHZpZXcpLT5pc0Z1bGxTY3JlZW4oKTsK
KyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK3ZvaWQgV0tWaWV3U2V0Vmll
d0NsaWVudChXS1ZpZXdSZWYgdmlldywgY29uc3QgV0tWaWV3Q2xpZW50QmFzZSogY2xpZW50KQor
eworICAgIGNsYXNzIFZpZXdDbGllbnQgZmluYWwgOiBwdWJsaWMgQVBJOjpDbGllbnQ8V0tWaWV3
Q2xpZW50QmFzZT4sIHB1YmxpYyBBUEk6OlZpZXdDbGllbnQgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgZXhwbGljaXQgVmlld0NsaWVudChjb25zdCBXS1ZpZXdDbGllbnRCYXNlKiBjbGllbnQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGluaXRpYWxpemUoY2xpZW50KTsKKyAgICAgICAgfQorCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBzZXRWaWV3TmVlZHNEaXNwbGF5KFdlYktpdDo6UGxh
eVN0YXRpb25XZWJWaWV3JiB2aWV3LCBjb25zdCBXZWJDb3JlOjpSZWdpb24mIHJlZ2lvbikgZmlu
YWwKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5zZXRWaWV3TmVlZHNEaXNw
bGF5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIG1fY2xpZW50LnNldFZp
ZXdOZWVkc0Rpc3BsYXkoV2ViS2l0Ojp0b0FQSSgmdmlldyksIFdlYktpdDo6dG9BUEkocmVnaW9u
LmJvdW5kcygpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHZvaWQgZW50ZXJGdWxsU2NyZWVuKFdlYktpdDo6UGxheVN0YXRpb25XZWJWaWV3JiB2aWV3
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1fY2xpZW50LmVudGVyRnVsbFNjcmVlbikK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBtX2NsaWVudC5lbnRlckZ1bGxT
Y3JlZW4oV2ViS2l0Ojp0b0FQSSgmdmlldyksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgZXhpdEZ1bGxTY3JlZW4oV2ViS2l0OjpQ
bGF5U3RhdGlvbldlYlZpZXcmIHZpZXcpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV9j
bGllbnQuZXhpdEZ1bGxTY3JlZW4pCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgbV9jbGllbnQuZXhpdEZ1bGxTY3JlZW4oV2ViS2l0Ojp0b0FQSSgmdmlldyksIG1fY2xpZW50
LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgY2xv
c2VGdWxsU2NyZWVuKFdlYktpdDo6UGxheVN0YXRpb25XZWJWaWV3JiB2aWV3KQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoIW1fY2xpZW50LmNsb3NlRnVsbFNjcmVlbikKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICBtX2NsaWVudC5jbG9zZUZ1bGxTY3JlZW4oV2ViS2l0
Ojp0b0FQSSgmdmlldyksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHZvaWQgYmVnYW5FbnRlckZ1bGxTY3JlZW4oV2ViS2l0OjpQbGF5U3Rh
dGlvbldlYlZpZXcmIHZpZXcsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxGcmFtZSwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZmluYWxGcmFtZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKCFtX2NsaWVudC5iZWdhbkVudGVyRnVsbFNjcmVlbikKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICBtX2NsaWVudC5iZWdhbkVudGVyRnVsbFNjcmVlbihXZWJLaXQ6
OnRvQVBJKCZ2aWV3KSwgV2ViS2l0Ojp0b0FQSShpbml0aWFsRnJhbWUpLCBXZWJLaXQ6OnRvQVBJ
KGZpbmFsRnJhbWUpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICB2b2lkIGJlZ2FuRXhpdEZ1bGxTY3JlZW4oV2ViS2l0OjpQbGF5U3RhdGlv
bldlYlZpZXcmIHZpZXcsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxGcmFtZSwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgZmluYWxGcmFtZSkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKCFtX2NsaWVudC5iZWdhbkV4aXRGdWxsU2NyZWVuKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIG1fY2xpZW50LmJlZ2FuRXhpdEZ1bGxTY3JlZW4oV2ViS2l0Ojp0b0FQ
SSgmdmlldyksIFdlYktpdDo6dG9BUEkoaW5pdGlhbEZyYW1lKSwgV2ViS2l0Ojp0b0FQSShmaW5h
bEZyYW1lKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAgfQorCisgICAgICAg
IHZvaWQgc2V0Q3Vyc29yKFdlYktpdDo6UGxheVN0YXRpb25XZWJWaWV3JiB2aWV3LCBjb25zdCBX
ZWJDb3JlOjpDdXJzb3ImIGN1cnNvcikgZmluYWwKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KCFtX2NsaWVudC5zZXRDdXJzb3IpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgbV9jbGllbnQuc2V0Q3Vyc29yKFdlYktpdDo6dG9BUEkoJnZpZXcpLCB0b1dLQ3Vyc29yVHlw
ZShjdXJzb3IpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICB9CisgICAgfTsK
KworICAgIFdlYktpdDo6dG9JbXBsKHZpZXcpLT5zZXRDbGllbnQobWFrZVVuaXF1ZTxWaWV3Q2xp
ZW50PihjbGllbnQpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL3BsYXlzdGF0aW9uL1dLVmlldy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Mv
cGxheXN0YXRpb24vV0tWaWV3LmgKaW5kZXggYzVlZTQ0NzMyNWEwZjg1ZjA1YmFkMWI2OTI2NTI4
YjFlNmU5NjcxMy4uNTA2YzVhZjZiYzdhZWZhOWQ5YTU1MTBlYjhjN2EwZmVmY2ZhNjkxMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tWaWV3
LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tWaWV3
LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJh
Y3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRl
cmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjUsMTQgKzI1LDMwIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8V2ViS2l0
L1dLQmFzZS5oPgorI2luY2x1ZGUgPFdlYktpdC9XS1ZpZXdDbGllbnQuaD4KIAogI2lmZGVmIF9f
Y3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKICNlbmRpZgogCiBXS19FWFBPUlQgV0tWaWV3UmVmIFdL
Vmlld0NyZWF0ZShXS1BhZ2VDb25maWd1cmF0aW9uUmVmIGNvbmZpZ3VyYXRpb24pOwotV0tfRVhQ
T1JUIFdLUGFnZVJlZiBXS1ZpZXdHZXRQYWdlKFdLVmlld1JlZiB2aWV3KTsKKworV0tfRVhQT1JU
IHZvaWQgV0tWaWV3U2V0Vmlld0NsaWVudChXS1ZpZXdSZWYsIGNvbnN0IFdLVmlld0NsaWVudEJh
c2UqKTsKKworV0tfRVhQT1JUIFdLUGFnZVJlZiBXS1ZpZXdHZXRQYWdlKFdLVmlld1JlZik7CisK
K1dLX0VYUE9SVCB2b2lkIFdLVmlld1NldFNpemUoV0tWaWV3UmVmLCBXS1NpemUgdmlld1NpemUp
OworCitXS19FWFBPUlQgdm9pZCBXS1ZpZXdTZXRGb2N1cyhXS1ZpZXdSZWYsIGJvb2wpOworV0tf
RVhQT1JUIHZvaWQgV0tWaWV3U2V0QWN0aXZlKFdLVmlld1JlZiwgYm9vbCk7CitXS19FWFBPUlQg
dm9pZCBXS1ZpZXdTZXRWaXNpYmxlKFdLVmlld1JlZiwgYm9vbCk7CisKK1dLX0VYUE9SVCB2b2lk
IFdLVmlld1dpbGxFbnRlckZ1bGxTY3JlZW4oV0tWaWV3UmVmKTsKK1dLX0VYUE9SVCB2b2lkIFdL
Vmlld0RpZEVudGVyRnVsbFNjcmVlbihXS1ZpZXdSZWYpOworV0tfRVhQT1JUIHZvaWQgV0tWaWV3
V2lsbEV4aXRGdWxsU2NyZWVuKFdLVmlld1JlZik7CitXS19FWFBPUlQgdm9pZCBXS1ZpZXdEaWRF
eGl0RnVsbFNjcmVlbihXS1ZpZXdSZWYpOworV0tfRVhQT1JUIHZvaWQgV0tWaWV3UmVxdWVzdEV4
aXRGdWxsU2NyZWVuKFdLVmlld1JlZik7CitXS19FWFBPUlQgYm9vbCBXS1ZpZXdJc0Z1bGxTY3Jl
ZW4oV0tWaWV3UmVmKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1ZpZXdDbGllbnQuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLVmlld0NsaWVudC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjRiNDUwMjM3OTkwMDg4ZjJmNmQ2ZTk0MTNlMWYzNDdlOGY3ZDdhOTcKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9X
S1ZpZXdDbGllbnQuaApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIx
IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSA8V2ViS2l0L1dLQmFzZS5oPgorI2luY2x1ZGUgPFdlYktpdC9XS0dl
b21ldHJ5Lmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKwor
ZW51bSB7CisgICAga1dLQ3Vyc29yVHlwZVBvaW50ZXIgPSAwLAorICAgIGtXS0N1cnNvclR5cGVI
YW5kID0gMiwKKyAgICBrV0tDdXJzb3JUeXBlTm9uZSA9IDM3LAorfTsKK3R5cGVkZWYgdWludDMy
X3QgV0tDdXJzb3JUeXBlOworCit0eXBlZGVmIHZvaWQoKldLVmlld1NldFZpZXdOZWVkc0Rpc3Bs
YXlDYWxsYmFjaykoV0tWaWV3UmVmIHZpZXcsIFdLUmVjdCByZWN0LCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKTsKK3R5cGVkZWYgdm9pZCgqV0tWaWV3RW50ZXJGdWxsU2NyZWVuKShXS1ZpZXdSZWYg
dmlldywgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cit0eXBlZGVmIHZvaWQoKldLVmlld0V4aXRG
dWxsU2NyZWVuKShXS1ZpZXdSZWYgdmlldywgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cit0eXBl
ZGVmIHZvaWQoKldLVmlld0Nsb3NlRnVsbFNjcmVlbikoV0tWaWV3UmVmIHZpZXcsIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pOwordHlwZWRlZiB2b2lkKCpXS1ZpZXdCZWdhbkVudGVyRnVsbFNjcmVl
bikoV0tWaWV3UmVmIHZpZXcsIGNvbnN0IFdLUmVjdCBpbml0aWFsRnJhbWUsIGNvbnN0IFdLUmVj
dCBmaW5hbEZyYW1lLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK3R5cGVkZWYgdm9pZCgqV0tW
aWV3QmVnYW5FeGl0RnVsbFNjcmVlbikoV0tWaWV3UmVmIHZpZXcsIGNvbnN0IFdLUmVjdCBpbml0
aWFsRnJhbWUsIGNvbnN0IFdLUmVjdCBmaW5hbEZyYW1lLCBjb25zdCB2b2lkKiBjbGllbnRJbmZv
KTsKK3R5cGVkZWYgdm9pZCgqV0tWaWV3U2V0Q3Vyc29yQ2FsbGJhY2spKFdLVmlld1JlZiB2aWV3
LCBXS0N1cnNvclR5cGUgY3Vyc29yVHlwZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisKK3R5
cGVkZWYgc3RydWN0IFdLVmlld0NsaWVudEJhc2UgeworICAgIGludCB2ZXJzaW9uOworICAgIGNv
bnN0IHZvaWQqIGNsaWVudEluZm87Cit9IFdLVmlld0NsaWVudEJhc2U7CisKK3R5cGVkZWYgc3Ry
dWN0IFdLVmlld0NsaWVudFYwIHsKKyAgICBXS1ZpZXdDbGllbnRCYXNlIGJhc2U7CisKKyAgICAv
LyB2ZXJzaW9uIDAKKyAgICBXS1ZpZXdTZXRWaWV3TmVlZHNEaXNwbGF5Q2FsbGJhY2sgc2V0Vmll
d05lZWRzRGlzcGxheTsKKyAgICBXS1ZpZXdFbnRlckZ1bGxTY3JlZW4gZW50ZXJGdWxsU2NyZWVu
OworICAgIFdLVmlld0V4aXRGdWxsU2NyZWVuIGV4aXRGdWxsU2NyZWVuOworICAgIFdLVmlld0Ns
b3NlRnVsbFNjcmVlbiBjbG9zZUZ1bGxTY3JlZW47CisgICAgV0tWaWV3QmVnYW5FbnRlckZ1bGxT
Y3JlZW4gYmVnYW5FbnRlckZ1bGxTY3JlZW47CisgICAgV0tWaWV3QmVnYW5FeGl0RnVsbFNjcmVl
biBiZWdhbkV4aXRGdWxsU2NyZWVuOworICAgIFdLVmlld1NldEN1cnNvckNhbGxiYWNrIHNldEN1
cnNvcjsKK30gV0tWaWV3Q2xpZW50VjA7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvcGxheXN0YXRpb24vQVBJ
Vmlld0NsaWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3BsYXlzdGF0aW9uL0FQ
SVZpZXdDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZDQ4YzM4M2RkZjYxNmE1NjY0NDgxMmMzYTk5ZmYx
YmY1OTE0OTViCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L3BsYXlzdGF0aW9uL0FQSVZpZXdDbGllbnQuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBDdXJzb3I7
CitjbGFzcyBJbnRSZWN0OworY2xhc3MgUmVnaW9uOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsK
K2NsYXNzIFBsYXlTdGF0aW9uV2ViVmlldzsKK30KKworbmFtZXNwYWNlIEFQSSB7CisKK2NsYXNz
IFZpZXdDbGllbnQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IHZpcnR1YWwgflZpZXdDbGllbnQoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
Vmlld05lZWRzRGlzcGxheShXZWJLaXQ6OlBsYXlTdGF0aW9uV2ViVmlldyYsIGNvbnN0IFdlYkNv
cmU6OlJlZ2lvbiYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBlbnRlckZ1bGxTY3JlZW4oV2ViS2l0
OjpQbGF5U3RhdGlvbldlYlZpZXcmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZXhpdEZ1bGxTY3Jl
ZW4oV2ViS2l0OjpQbGF5U3RhdGlvbldlYlZpZXcmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2xv
c2VGdWxsU2NyZWVuKFdlYktpdDo6UGxheVN0YXRpb25XZWJWaWV3JikgeyB9CisgICAgdmlydHVh
bCB2b2lkIGJlZ2FuRW50ZXJGdWxsU2NyZWVuKFdlYktpdDo6UGxheVN0YXRpb25XZWJWaWV3Jiwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgYmVnYW5FeGl0RnVsbFNjcmVlbihXZWJLaXQ6OlBsYXlTdGF0aW9uV2Vi
VmlldyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jikg
eyB9CisgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvcihXZWJLaXQ6OlBsYXlTdGF0aW9uV2ViVmll
dyYgdmlldywgY29uc3QgV2ViQ29yZTo6Q3Vyc29yJiBjdXJzb3IpIHsgfQorfTsKKworfSAvLyBu
YW1lc3BhY2UgQVBJCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9wbGF5c3Rh
dGlvbi9QYWdlQ2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9wbGF5c3Rh
dGlvbi9QYWdlQ2xpZW50SW1wbC5jcHAKaW5kZXggNjRhNGNhNzJmOTVhZDhhNGNkYmJlNmFkODdi
NjdlMGRiMDgyMDg5Yi4uMzk0MWU5ZmIxODZmZTAyYzUxNmMyYzg5NDc5M2IyOGE0OTA1MjdhZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvcGxheXN0YXRpb24vUGFnZUNsaWVu
dEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3BsYXlzdGF0aW9uL1BhZ2VD
bGllbnRJbXBsLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAg
U29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00NSw2ICs0NSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxEcmF3aW5nQXJl
YVByb3h5PiBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlRHJhd2luZ0FyZWFQcm94eShXZWJQcm9jCiAK
IHZvaWQgUGFnZUNsaWVudEltcGw6OnNldFZpZXdOZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6
UmVnaW9uJiByZWdpb24pCiB7CisgICAgbV92aWV3LnNldFZpZXdOZWVkc0Rpc3BsYXkocmVnaW9u
KTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVxdWVzdFNjcm9sbChjb25zdCBXZWJDb3Jl
OjpGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHNj
cm9sbE9yaWdpbikKQEAgLTU4LDI4ICs1OSwyNyBAQCBXZWJDb3JlOjpGbG9hdFBvaW50IFBhZ2VD
bGllbnRJbXBsOjp2aWV3U2Nyb2xsUG9zaXRpb24oKQogCiBXZWJDb3JlOjpJbnRTaXplIFBhZ2VD
bGllbnRJbXBsOjp2aWV3U2l6ZSgpCiB7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OkludFNpemUgeyB9
OworICAgIHJldHVybiBtX3ZpZXcudmlld1NpemUoKTsKIH0KIAogYm9vbCBQYWdlQ2xpZW50SW1w
bDo6aXNWaWV3V2luZG93QWN0aXZlKCkKIHsKLSAgICByZXR1cm4gbV92aWV3LmlzQWN0aXZlKCk7
CisgICAgcmV0dXJuIG1fdmlldy52aWV3U3RhdGUoKS5jb250YWlucyhXZWJDb3JlOjpBY3Rpdml0
eVN0YXRlOjpXaW5kb3dJc0FjdGl2ZSk7CiB9CiAKIGJvb2wgUGFnZUNsaWVudEltcGw6OmlzVmll
d0ZvY3VzZWQoKQogewotICAgIHJldHVybiBtX3ZpZXcuaXNGb2N1c2VkKCk7CisgICAgcmV0dXJu
IG1fdmlldy52aWV3U3RhdGUoKS5jb250YWlucyhXZWJDb3JlOjpBY3Rpdml0eVN0YXRlOjpJc0Zv
Y3VzZWQpOwogfQogCiBib29sIFBhZ2VDbGllbnRJbXBsOjppc1ZpZXdWaXNpYmxlKCkKIHsKLSAg
ICByZXR1cm4gbV92aWV3LmlzVmlzaWJsZSgpOworICAgIHJldHVybiBtX3ZpZXcudmlld1N0YXRl
KCkuY29udGFpbnMoV2ViQ29yZTo6QWN0aXZpdHlTdGF0ZTo6SXNWaXNpYmxlKTsKIH0KIAogYm9v
bCBQYWdlQ2xpZW50SW1wbDo6aXNWaWV3SW5XaW5kb3coKQogewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIG1fdmlldy52aWV3U3RhdGUoKS5jb250
YWlucyhXZWJDb3JlOjpBY3Rpdml0eVN0YXRlOjpJc0luV2luZG93KTsKIH0KIAogdm9pZCBQYWdl
Q2xpZW50SW1wbDo6cHJvY2Vzc0RpZEV4aXQoKQpAQCAtODksNiArODksNyBAQCB2b2lkIFBhZ2VD
bGllbnRJbXBsOjpwcm9jZXNzRGlkRXhpdCgpCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRSZWxh
dW5jaFByb2Nlc3MoKQogewogfQorCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpwYWdlQ2xvc2VkKCkK
IHsKIH0KQEAgLTExNyw3ICsxMTgsNyBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRDaGFuZ2VD
b250ZW50U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQogCiB2b2lkIFBhZ2VDbGll
bnRJbXBsOjpzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJiBjdXJzb3IpCiB7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICBtX3ZpZXcuc2V0Q3Vyc29yKGN1cnNvcik7CiB9CiAKIHZv
aWQgUGFnZUNsaWVudEltcGw6OnNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29sKQpA
QCAtMjEwLDYgKzIxMSwzNiBAQCBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50JiBQYWdl
Q2xpZW50SW1wbDo6ZnVsbFNjcmVlbk1hbmFnZXJQcm94eUNsaWVudCgpCiB7CiAgICAgcmV0dXJu
ICooV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eUNsaWVudCopdGhpczsKIH0KKwordm9pZCBQYWdl
Q2xpZW50SW1wbDo6Y2xvc2VGdWxsU2NyZWVuTWFuYWdlcigpCit7CisgICAgbV92aWV3LmNsb3Nl
RnVsbFNjcmVlbk1hbmFnZXIoKTsKK30KKworYm9vbCBQYWdlQ2xpZW50SW1wbDo6aXNGdWxsU2Ny
ZWVuKCkKK3sKKyAgICByZXR1cm4gbV92aWV3LmlzRnVsbFNjcmVlbigpOworfQorCit2b2lkIFBh
Z2VDbGllbnRJbXBsOjplbnRlckZ1bGxTY3JlZW4oKQoreworICAgIG1fdmlldy5lbnRlckZ1bGxT
Y3JlZW4oKTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZXhpdEZ1bGxTY3JlZW4oKQorewor
ICAgIG1fdmlldy5leGl0RnVsbFNjcmVlbigpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpi
ZWdhbkVudGVyRnVsbFNjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBpbml0aWFsRnJhbWUs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGZpbmFsRnJhbWUpCit7CisgICAgbV92aWV3LmJlZ2Fu
RW50ZXJGdWxsU2NyZWVuKGluaXRpYWxGcmFtZSwgZmluYWxGcmFtZSk7Cit9CisKK3ZvaWQgUGFn
ZUNsaWVudEltcGw6OmJlZ2FuRXhpdEZ1bGxTY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
aW5pdGlhbEZyYW1lLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBmaW5hbEZyYW1lKQoreworICAg
IG1fdmlldy5iZWdhbkV4aXRGdWxsU2NyZWVuKGluaXRpYWxGcmFtZSwgZmluYWxGcmFtZSk7Cit9
CiAjZW5kaWYKIAogLy8gQ3VzdG9tIHJlcHJlc2VudGF0aW9ucy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL3BsYXlzdGF0aW9uL1BhZ2VDbGllbnRJbXBsLmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9wbGF5c3RhdGlvbi9QYWdlQ2xpZW50SW1wbC5oCmluZGV4IDM4Yjk3
ZWJiNWE0NjYzZDljMDE5MmQwMjYwMDk4YmZkMWIwNzk1YzIuLjc1YmU5ZDA1NjJmYjcxNDgxMmRh
NjllYzM2ZmQ3YjE3NTQ0NjU5NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L3BsYXlzdGF0aW9uL1BhZ2VDbGllbnRJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvcGxheXN0YXRpb24vUGFnZUNsaWVudEltcGwuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw5IEBACiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgIlBhZ2VDbGllbnQuaCIKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9B
UEkpCisjaW5jbHVkZSAiV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eS5oIgorI2VuZGlmCiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCkBAIC0xMTEsNiArMTE0LDEzIEBAIHByaXZhdGU6CiAgICAgLy8g
QXV4aWxpYXJ5IENsaWVudCBDcmVhdGlvbgogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAg
ICBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50JiBmdWxsU2NyZWVuTWFuYWdlclByb3h5
Q2xpZW50KCkgZmluYWw7CisKKyAgICB2b2lkIGNsb3NlRnVsbFNjcmVlbk1hbmFnZXIoKSBmaW5h
bDsKKyAgICBib29sIGlzRnVsbFNjcmVlbigpIGZpbmFsOworICAgIHZvaWQgZW50ZXJGdWxsU2Ny
ZWVuKCkgZmluYWw7CisgICAgdm9pZCBleGl0RnVsbFNjcmVlbigpIGZpbmFsOworICAgIHZvaWQg
YmVnYW5FbnRlckZ1bGxTY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaW5pdGlhbEZyYW1l
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBmaW5hbEZyYW1lKSBmaW5hbDsKKyAgICB2b2lkIGJl
Z2FuRXhpdEZ1bGxTY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaW5pdGlhbEZyYW1lLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiBmaW5hbEZyYW1lKSBmaW5hbDsKICNlbmRpZgogCiAgICAg
Ly8gQ3VzdG9tIHJlcHJlc2VudGF0aW9ucy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL3BsYXlzdGF0aW9uL1BsYXlTdGF0aW9uV2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9wbGF5c3RhdGlvbi9QbGF5U3RhdGlvbldlYlZpZXcuY3BwCmluZGV4IGZlYjFh
NzIyNDI1YmY5MmM1OTRjY2FkZDA5MGU2YTgzYzFkZDQ1MTIuLmE2NDVkMmUwNjMxODM2MjAxMjhk
NzQxNjMzMTA5MjkwNjUwYzg0NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L3BsYXlzdGF0aW9uL1BsYXlTdGF0aW9uV2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvcGxheXN0YXRpb24vUGxheVN0YXRpb25XZWJWaWV3LmNwcApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5t
ZW50IEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFp
bm1lbnQgSW5jLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSw2ICszOSw3
IEBAIFJlZlB0cjxQbGF5U3RhdGlvbldlYlZpZXc+IFBsYXlTdGF0aW9uV2ViVmlldzo6Y3JlYXRl
KGNvbnN0IEFQSTo6UGFnZUNvbmZpZ3VyYXRpCiAKIFBsYXlTdGF0aW9uV2ViVmlldzo6UGxheVN0
YXRpb25XZWJWaWV3KGNvbnN0IEFQSTo6UGFnZUNvbmZpZ3VyYXRpb24mIGNvbmYpCiAgICAgOiBt
X3BhZ2VDbGllbnQobWFrZVVuaXF1ZTxQYWdlQ2xpZW50SW1wbD4oKnRoaXMpKQorICAgICwgbV92
aWV3U3RhdGVGbGFncyB7IFdlYkNvcmU6OkFjdGl2aXR5U3RhdGU6OldpbmRvd0lzQWN0aXZlLCBX
ZWJDb3JlOjpBY3Rpdml0eVN0YXRlOjpJc0ZvY3VzZWQsIFdlYkNvcmU6OkFjdGl2aXR5U3RhdGU6
OklzVmlzaWJsZSwgV2ViQ29yZTo6QWN0aXZpdHlTdGF0ZTo6SXNJbldpbmRvdyB9CiB7CiAgICAg
YXV0byBjb25maWd1cmF0aW9uID0gY29uZi5jb3B5KCk7CiAgICAgYXV0byogcG9vbCA9IGNvbmZp
Z3VyYXRpb24tPnByb2Nlc3NQb29sKCk7CkBAIC01MSwxOSArNTIsMTA0IEBAIFBsYXlTdGF0aW9u
V2ViVmlldzo6flBsYXlTdGF0aW9uV2ViVmlldygpCiB7CiB9CiAKLWJvb2wgUGxheVN0YXRpb25X
ZWJWaWV3Ojppc0FjdGl2ZSgpIGNvbnN0Cit2b2lkIFBsYXlTdGF0aW9uV2ViVmlldzo6c2V0Q2xp
ZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OlZpZXdDbGllbnQ+JiYgY2xpZW50KQogewotICAgIHJl
dHVybiBtX2FjdGl2ZTsKKyAgICBpZiAoIWNsaWVudCkKKyAgICAgICAgbV9jbGllbnQgPSBtYWtl
VW5pcXVlPEFQSTo6Vmlld0NsaWVudD4oKTsKKyAgICBlbHNlCisgICAgICAgIG1fY2xpZW50ID0g
V1RGTW92ZShjbGllbnQpOwogfQogCi1ib29sIFBsYXlTdGF0aW9uV2ViVmlldzo6aXNGb2N1c2Vk
KCkgY29uc3QKK3ZvaWQgUGxheVN0YXRpb25XZWJWaWV3OjpzZXRWaWV3U2l6ZShXZWJDb3JlOjpJ
bnRTaXplIHZpZXdTaXplKQogewotICAgIHJldHVybiBtX2ZvY3VzZWQ7CisgICAgbV92aWV3U2l6
ZSA9IHZpZXdTaXplOwogfQogCi1ib29sIFBsYXlTdGF0aW9uV2ViVmlldzo6aXNWaXNpYmxlKCkg
Y29uc3QKK3ZvaWQgUGxheVN0YXRpb25XZWJWaWV3OjpzZXRWaWV3U3RhdGUoT3B0aW9uU2V0PFdl
YkNvcmU6OkFjdGl2aXR5U3RhdGU6OkZsYWc+IGZsYWdzKQogewotICAgIHJldHVybiBtX3Zpc2li
bGU7CisgICAgYXV0byBjaGFuZ2VkRmxhZ3MgPSBtX3ZpZXdTdGF0ZUZsYWdzIF4gZmxhZ3M7Cisg
ICAgbV92aWV3U3RhdGVGbGFncyA9IGZsYWdzOworCisgICAgaWYgKGNoYW5nZWRGbGFncykKKyAg
ICAgICAgbV9wYWdlLT5hY3Rpdml0eVN0YXRlRGlkQ2hhbmdlKGNoYW5nZWRGbGFncyk7Cit9CisK
K3ZvaWQgUGxheVN0YXRpb25XZWJWaWV3OjpzZXRWaWV3TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNv
cmU6OlJlZ2lvbiYgcmVnaW9uKQoreworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGll
bnQtPnNldFZpZXdOZWVkc0Rpc3BsYXkoKnRoaXMsIHJlZ2lvbik7Cit9CisKKyNpZiBFTkFCTEUo
RlVMTFNDUkVFTl9BUEkpCit2b2lkIFBsYXlTdGF0aW9uV2ViVmlldzo6d2lsbEVudGVyRnVsbFNj
cmVlbigpCit7CisgICAgbV9pc0Z1bGxTY3JlZW4gPSB0cnVlOworICAgIG1fcGFnZS0+ZnVsbFNj
cmVlbk1hbmFnZXIoKS0+d2lsbEVudGVyRnVsbFNjcmVlbigpOworfQorCit2b2lkIFBsYXlTdGF0
aW9uV2ViVmlldzo6ZGlkRW50ZXJGdWxsU2NyZWVuKCkKK3sKKyAgICBtX3BhZ2UtPmZ1bGxTY3Jl
ZW5NYW5hZ2VyKCktPmRpZEVudGVyRnVsbFNjcmVlbigpOworfQorCit2b2lkIFBsYXlTdGF0aW9u
V2ViVmlldzo6d2lsbEV4aXRGdWxsU2NyZWVuKCkKK3sKKyAgICBtX3BhZ2UtPmZ1bGxTY3JlZW5N
YW5hZ2VyKCktPndpbGxFeGl0RnVsbFNjcmVlbigpOworfQorCit2b2lkIFBsYXlTdGF0aW9uV2Vi
Vmlldzo6ZGlkRXhpdEZ1bGxTY3JlZW4oKQoreworICAgIG1fcGFnZS0+ZnVsbFNjcmVlbk1hbmFn
ZXIoKS0+ZGlkRXhpdEZ1bGxTY3JlZW4oKTsKKyAgICBtX2lzRnVsbFNjcmVlbiA9IGZhbHNlOwor
fQorCit2b2lkIFBsYXlTdGF0aW9uV2ViVmlldzo6cmVxdWVzdEV4aXRGdWxsU2NyZWVuKCkKK3sK
KyAgICBpZiAoaXNGdWxsU2NyZWVuKCkpCisgICAgICAgIG1fcGFnZS0+ZnVsbFNjcmVlbk1hbmFn
ZXIoKS0+cmVxdWVzdEV4aXRGdWxsU2NyZWVuKCk7Cit9CisKK3ZvaWQgUGxheVN0YXRpb25XZWJW
aWV3OjpjbG9zZUZ1bGxTY3JlZW5NYW5hZ2VyKCkKK3sKKyAgICBpZiAobV9jbGllbnQgJiYgaXNG
dWxsU2NyZWVuKCkpCisgICAgICAgIG1fY2xpZW50LT5jbG9zZUZ1bGxTY3JlZW4oKnRoaXMpOwor
ICAgIG1faXNGdWxsU2NyZWVuID0gZmFsc2U7Cit9CisKK2Jvb2wgUGxheVN0YXRpb25XZWJWaWV3
Ojppc0Z1bGxTY3JlZW4oKQoreworICAgIHJldHVybiBtX2lzRnVsbFNjcmVlbjsKK30KKwordm9p
ZCBQbGF5U3RhdGlvbldlYlZpZXc6OmVudGVyRnVsbFNjcmVlbigpCit7CisgICAgaWYgKG1fY2xp
ZW50ICYmICFpc0Z1bGxTY3JlZW4oKSkKKyAgICAgICAgbV9jbGllbnQtPmVudGVyRnVsbFNjcmVl
bigqdGhpcyk7Cit9CisKK3ZvaWQgUGxheVN0YXRpb25XZWJWaWV3OjpleGl0RnVsbFNjcmVlbigp
Cit7CisgICAgaWYgKG1fY2xpZW50ICYmIGlzRnVsbFNjcmVlbigpKQorICAgICAgICBtX2NsaWVu
dC0+ZXhpdEZ1bGxTY3JlZW4oKnRoaXMpOworfQorCit2b2lkIFBsYXlTdGF0aW9uV2ViVmlldzo6
YmVnYW5FbnRlckZ1bGxTY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaW5pdGlhbEZyYW1l
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBmaW5hbEZyYW1lKQoreworICAgIGlmIChtX2NsaWVu
dCkKKyAgICAgICAgbV9jbGllbnQtPmJlZ2FuRW50ZXJGdWxsU2NyZWVuKCp0aGlzLCBpbml0aWFs
RnJhbWUsIGZpbmFsRnJhbWUpOworfQorCit2b2lkIFBsYXlTdGF0aW9uV2ViVmlldzo6YmVnYW5F
eGl0RnVsbFNjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBpbml0aWFsRnJhbWUsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIGZpbmFsRnJhbWUpCit7CisgICAgaWYgKG1fY2xpZW50KQorICAg
ICAgICBtX2NsaWVudC0+YmVnYW5FeGl0RnVsbFNjcmVlbigqdGhpcywgaW5pdGlhbEZyYW1lLCBm
aW5hbEZyYW1lKTsKK30KKyNlbmRpZgorCit2b2lkIFBsYXlTdGF0aW9uV2ViVmlldzo6c2V0Q3Vy
c29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYgY3Vyc29yKQoreworICAgIGlmIChtX2NsaWVudCkK
KyAgICAgICAgbV9jbGllbnQtPnNldEN1cnNvcigqdGhpcywgY3Vyc29yKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9wbGF5
c3RhdGlvbi9QbGF5U3RhdGlvbldlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3Bs
YXlzdGF0aW9uL1BsYXlTdGF0aW9uV2ViVmlldy5oCmluZGV4IDE3OTU3MzYzMGRjM2VlNTM1NGMx
MjUzZGQ1MGUzMTYyY2ExN2Q1MzIuLjJlZWFhNDBkNTFjOGM2YTUzMDM4ZTc0NDBjZmFlOTM4ZDgw
NDI5M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3BsYXlzdGF0aW9uL1Bs
YXlTdGF0aW9uV2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3BsYXlzdGF0
aW9uL1BsYXlTdGF0aW9uV2ViVmlldy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICogQ29weXJp
Z2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCisjaW5jbHVkZSAiQVBJVmlld0NsaWVudC5oIgogI2lu
Y2x1ZGUgIlBhZ2VDbGllbnRJbXBsLmgiCiAjaW5jbHVkZSAiV0tWaWV3LmgiCiAjaW5jbHVkZSAi
V2ViUGFnZVByb3h5LmgiCkBAIC0zOCwyMSArMzksNDUgQEAgcHVibGljOgogICAgIHN0YXRpYyBS
ZWZQdHI8UGxheVN0YXRpb25XZWJWaWV3PiBjcmVhdGUoY29uc3QgQVBJOjpQYWdlQ29uZmlndXJh
dGlvbiYpOwogICAgIHZpcnR1YWwgflBsYXlTdGF0aW9uV2ViVmlldygpOwogCisgICAgdm9pZCBz
ZXRDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6Vmlld0NsaWVudD4mJik7CisKICAgICBXZWJQ
YWdlUHJveHkqIHBhZ2UoKSB7IHJldHVybiBtX3BhZ2UuZ2V0KCk7IH0KIAotICAgIGJvb2wgaXNB
Y3RpdmUoKSBjb25zdDsKLSAgICBib29sIGlzRm9jdXNlZCgpIGNvbnN0OwotICAgIGJvb2wgaXNW
aXNpYmxlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRWaWV3U2l6ZShXZWJDb3JlOjpJbnRTaXplKTsK
KyAgICBXZWJDb3JlOjpJbnRTaXplIHZpZXdTaXplKCkgY29uc3QgeyByZXR1cm4gbV92aWV3U2l6
ZTsgfQorCisgICAgdm9pZCBzZXRWaWV3U3RhdGUoT3B0aW9uU2V0PFdlYkNvcmU6OkFjdGl2aXR5
U3RhdGU6OkZsYWc+KTsKKyAgICBPcHRpb25TZXQ8V2ViQ29yZTo6QWN0aXZpdHlTdGF0ZTo6Rmxh
Zz4gdmlld1N0YXRlKCkgY29uc3QgeyByZXR1cm4gbV92aWV3U3RhdGVGbGFnczsgfQorCisjaWYg
RU5BQkxFKEZVTExTQ1JFRU5fQVBJKQorICAgIHZvaWQgd2lsbEVudGVyRnVsbFNjcmVlbigpOwor
ICAgIHZvaWQgZGlkRW50ZXJGdWxsU2NyZWVuKCk7CisgICAgdm9pZCB3aWxsRXhpdEZ1bGxTY3Jl
ZW4oKTsKKyAgICB2b2lkIGRpZEV4aXRGdWxsU2NyZWVuKCk7CisgICAgdm9pZCByZXF1ZXN0RXhp
dEZ1bGxTY3JlZW4oKTsKKyNlbmRpZgorCisgICAgLy8gRnVuY3Rpb25zIGNhbGxlZCBieSBQYWdl
Q2xpZW50SW1wbAorICAgIHZvaWQgc2V0Vmlld05lZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpS
ZWdpb24mKTsKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgYm9vbCBpc0Z1bGxTY3Jl
ZW4oKTsKKyAgICB2b2lkIGNsb3NlRnVsbFNjcmVlbk1hbmFnZXIoKTsKKyAgICB2b2lkIGVudGVy
RnVsbFNjcmVlbigpOworICAgIHZvaWQgZXhpdEZ1bGxTY3JlZW4oKTsKKyAgICB2b2lkIGJlZ2Fu
RW50ZXJGdWxsU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0Jik7CisgICAgdm9pZCBiZWdhbkV4aXRGdWxsU2NyZWVuKGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CisjZW5kaWYKKyAgICB2b2lkIHNldEN1
cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImKTsKIAogcHJpdmF0ZToKICAgICBQbGF5U3RhdGlv
bldlYlZpZXcoY29uc3QgQVBJOjpQYWdlQ29uZmlndXJhdGlvbiYpOwogCisgICAgc3RkOjp1bmlx
dWVfcHRyPEFQSTo6Vmlld0NsaWVudD4gbV9jbGllbnQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdl
YktpdDo6UGFnZUNsaWVudEltcGw+IG1fcGFnZUNsaWVudDsKICAgICBSZWZQdHI8V2ViUGFnZVBy
b3h5PiBtX3BhZ2U7CisgICAgT3B0aW9uU2V0PFdlYkNvcmU6OkFjdGl2aXR5U3RhdGU6OkZsYWc+
IG1fdmlld1N0YXRlRmxhZ3M7CiAKLSAgICBib29sIG1fYWN0aXZlIHsgZmFsc2UgfTsKLSAgICBi
b29sIG1fZm9jdXNlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3Zpc2libGUgeyBmYWxzZSB9Owor
ICAgIFdlYkNvcmU6OkludFNpemUgbV92aWV3U2l6ZTsKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9B
UEkpCiAgICAgYm9vbCBtX2lzRnVsbFNjcmVlbiB7IGZhbHNlIH07CiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggOTU3MGVjM2JhMDRh
ZTNhNzAzODM0OTU4ODBkMDNiMjI1YmQ2MWQyYi4uMzE2NWU5ZmY3YjFlMGMxOTNhYTkzYWRiMDA3
MThlMGExYmJhN2UwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAKQEAgLTM3MDQsNyArMzcwNCw3IEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRlUHJlZmVy
ZW5jZXMoY29uc3QgV2ViUHJlZmVyZW5jZXNTdG9yZSYgc3RvcmUpCiAKICAgICBTZXR0aW5ncyYg
c2V0dGluZ3MgPSBtX3BhZ2UtPnNldHRpbmdzKCk7CiAKLSNpZiAhUExBVEZPUk0oR1RLKSAmJiAh
UExBVEZPUk0oV0lOKQorI2lmICFQTEFURk9STShHVEspICYmICFQTEFURk9STShXSU4pICYmICFQ
TEFURk9STShQTEFZU1RBVElPTikKICAgICBpZiAoIXNldHRpbmdzLmFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdFbmFibGVkKCkpIHsKICAgICAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChMYXllcnMs
ICJ1cGRhdGVQcmVmZXJlbmNlczogYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQgc2V0dGlu
ZyB3YXMgZmFsc2UuIFdlYktpdCBjYW5ub3QgZnVuY3Rpb24gaW4gdGhpcyBtb2RlOyBjaGFuZ2lu
ZyBzZXR0aW5nIHRvIHRydWUiKTsKICAgICAgICAgc2V0dGluZ3Muc2V0QWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0VuYWJsZWQodHJ1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc1Bs
YXlTdGF0aW9uLmNtYWtlIGIvU291cmNlL2NtYWtlL09wdGlvbnNQbGF5U3RhdGlvbi5jbWFrZQpp
bmRleCA3YzI0ZTU1MWU4YzM5NTdkNzc5ZGNhNmM1NjA5MzYyNjJlMzRhMTQ5Li5iODI0ODViZWM2
ZmVlMDA5NTNkMDZkNjkzNjliYmNmZjU4MDUzN2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2Uv
T3B0aW9uc1BsYXlTdGF0aW9uLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9PcHRpb25zUGxheVN0
YXRpb24uY21ha2UKQEAgLTMzLDYgKzMzLDcgQEAgV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRf
VkFMVUUoRU5BQkxFX0RGR19KSVQgUFJJVkFURSBPRkYpCiAjIEVuYWJsZWQgZmVhdHVyZXMKIFdF
QktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9BQ0NFU1NJQklMSVRZIFBSSVZB
VEUgT0ZGKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0FTWU5DX1ND
Uk9MTElORyBQUklWQVRFIE9OKQorV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5B
QkxFX0ZVTExTQ1JFRU5fQVBJIFBSSVZBVEUgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9S
VF9WQUxVRShFTkFCTEVfUEVSSU9ESUNfTUVNT1JZX01PTklUT1IgUFJJVkFURSBPTikKIFdFQktJ
VF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9TTU9PVEhfU0NST0xMSU5HIFBSSVZB
VEUgT04pCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfUkVTT1VSQ0Vf
TE9BRF9TVEFUSVNUSUNTIFBSSVZBVEUgT04pCkBAIC02Myw3ICs2NCw2IEBAIFdFQktJVF9PUFRJ
T05fREVGSU5FKEVOQUJMRV9UTFNfREVCVUcgIkVuYWJsZSBUTFMga2V5IGxvZyBzdXBwb3J0IiBQ
UklWQVRFIE9GRikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9WQVJJ
QVRJT05fRk9OVFMgUFJJVkFURSBPRkYpCiAKICMgRW5hYmxlIGluIHRoZSBmdXR1cmUKLVdFQktJ
VF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9GVUxMU0NSRUVOX0FQSSBQUklWQVRF
IE9GRikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9DT05URVhUX01F
TlVTIFBSSVZBVEUgT0ZGKQogCiAjIE5vIHN1cHBvcnQgcGxhbm5lZApkaWZmIC0tZ2l0IGEvVG9v
bHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGQzZGZhZmNhMjU5N2I1NzRhMmJk
NWJhYWRmZTUzOWM3YTVkMDk5YjMuLjhmYTc5MjU2MzhkY2MxYzg4OGI0OGFkNzJmZWY5MmRkMWNk
YmEwYTYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwzNCBAQAorMjAyMS0wMS0wNiAgWW9zaGlha2kgSml0c3VrYXdhICA8eW9zaGlh
a2kuaml0c3VrYXdhQHNvbnkuY29tPgorCisgICAgICAgIFtQbGF5U3RhdGlvbl0gQWRkIE1pbmlC
cm93c2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MjAzNTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgUGxheVN0YXRpb24gTWluaUJyb3dzZXIgc291cmNlcyBhbmQgQ01ha2VMaXN0cy50eHQuCisK
KyAgICAgICAgKiBNaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9DTWFrZUxpc3RzLnR4dDogQWRkZWQu
CisgICAgICAgICogTWluaUJyb3dzZXIvcGxheXN0YXRpb24vSW1hZ2VCdXR0b24uY3BwOiBBZGRl
ZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9JbWFnZUJ1dHRvbi5oOiBBZGRl
ZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9NYWluV2luZG93LmNwcDogQWRk
ZWQuCisgICAgICAgICogTWluaUJyb3dzZXIvcGxheXN0YXRpb24vTWFpbldpbmRvdy5oOiBBZGRl
ZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9TdHJpbmdVdGlscy5oOiBBZGRl
ZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9UaXRsZUJhci5jcHA6IEFkZGVk
LgorICAgICAgICAqIE1pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1RpdGxlQmFyLmg6IEFkZGVkLgor
ICAgICAgICAqIE1pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1Rvb2xraXR0ZW5VdGlscy5oOiBBZGRl
ZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9VUkxCYXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKiBNaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9VUkxCYXIuaDogQWRkZWQuCisgICAg
ICAgICogTWluaUJyb3dzZXIvcGxheXN0YXRpb24vV2ViQ29udGV4dC5jcHA6IEFkZGVkLgorICAg
ICAgICAqIE1pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1dlYkNvbnRleHQuaDogQWRkZWQuCisgICAg
ICAgICogTWluaUJyb3dzZXIvcGxheXN0YXRpb24vV2ViVmlld1dpbmRvdy5jcHA6IEFkZGVkLgor
ICAgICAgICAqIE1pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1dlYlZpZXdXaW5kb3cuaDogQWRkZWQu
CisgICAgICAgICogTWluaUJyb3dzZXIvcGxheXN0YXRpb24vbWFpbi5jcHA6IEFkZGVkLgorICAg
ICAgICAobG9hZExpYnJhcnlPckV4aXQpOgorICAgICAgICAoaW5pdGlhbGl6ZSk6CisgICAgICAg
IChBcHBsaWNhdGlvbkNsaWVudDo6dXBkYXRlQXBwbGljYXRpb24pOgorICAgICAgICAobWFpbik6
CisgICAgICAgICogUGxhdGZvcm1QbGF5U3RhdGlvbi5jbWFrZTogQWRkZWQuCisKIDIwMjAtMTEt
MjYgIExhdXJvIE1vdXJhICA8bG1vdXJhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gVW5y
ZXZpZXdlZC4gUmVtb3ZlIGxlZnRvdmVyIHRlc3QgY2FzZSBhZnRlciBJbnRlcm5ldCBFeHBsb3Jl
ciBxdWlya3MgY2hhbmdlcwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRp
b24vQ01ha2VMaXN0cy50eHQgYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9DTWFrZUxp
c3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5kODg3OTBjNzU3Zjg3MmM1ZjU3NDNhNDUzMTM4NTRkMTNiZGEx
M2UzCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRpb24vQ01h
a2VMaXN0cy50eHQKQEAgLTAsMCArMSw1OSBAQAorZmluZF9saWJyYXJ5KFRPT0xLSVRfTElCUkFS
WSBUb29sS2l0dGVuKQorCitQTEFZU1RBVElPTl9DT1BZX1NIQVJFRF9MSUJSQVJJRVMoTWluaUJy
b3dzZXJfQ29weVNoYXJlZExpYnMKKyAgICBGSUxFUyAke1RPT0xLSVRfTElCUkFSWX0KKykKKwor
c2V0KE1pbmlCcm93c2VyX1BSSVZBVEVfSU5DTFVERV9ESVJFQ1RPUklFUworICAgICIke1dFQktJ
VF9MSUJSQVJJRVNfRElSfS9pbmNsdWRlIgorICAgICIke0ZPUldBUkRJTkdfSEVBREVSU19ESVJ9
IgorICAgICR7Q01BS0VfQklOQVJZX0RJUn0KKyAgICAke1dlYkNvcmVfUFJJVkFURV9GUkFNRVdP
UktfSEVBREVSU19ESVJ9CisgICAgIiR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNlIgorICAgICIk
e1RPT0xTX0RJUn0vcGxheXN0YXRpb24vIgorKQorCitzZXQoTWluaUJyb3dzZXJfU09VUkNFUwor
ICAgIEltYWdlQnV0dG9uLmNwcAorICAgIE1haW5XaW5kb3cuY3BwCisgICAgVGl0bGVCYXIuY3Bw
CisgICAgVVJMQmFyLmNwcAorICAgIFdlYkNvbnRleHQuY3BwCisgICAgV2ViVmlld1dpbmRvdy5j
cHAKKyAgICBtYWluLmNwcAorKQorCitzZXQoTWluaUJyb3dzZXJfTElCUkFSSUVTCisgICAgJHtD
X1NURF9MSUJSQVJZfQorICAgICR7S0VSTkVMX0xJQlJBUll9CisKKyAgICAke1RPT0xLSVRfTElC
UkFSWX0KKworICAgIFdlYktpdAorKQorCitzZXQoUExBWVNUQVRJT05fTWluaUJyb3dzZXJfUkVR
VUlSRURfU0hBUkVEX0xJQlJBUklFUworICAgIGxpYlRvb2xLaXR0ZW4KKyAgICBsaWJjYWlybwor
ICAgIGxpYmZvbnRjb25maWcKKyAgICBsaWJmcmVldHlwZQorICAgIGxpYmhhcmZidXp6CisgICAg
bGliaWN1CisgICAgbGlicG5nMTYKKykKKworbGlua19kaXJlY3Rvcmllcygke1dFQktJVF9MSUJS
QVJJRVNfRElSfS9saWIpCitXRUJLSVRfRVhFQ1VUQUJMRV9ERUNMQVJFKE1pbmlCcm93c2VyKQor
V0VCS0lUX0VYRUNVVEFCTEUoTWluaUJyb3dzZXIpCisKKyMgTWluaUJyb3dzZXIgd29uJ3Qgd29y
ayB3aXRob3V0IHRoZXNlIHByb2Nlc3NlcworYWRkX2RlcGVuZGVuY2llcyhNaW5pQnJvd3NlciBX
ZWJQcm9jZXNzIE5ldHdvcmtQcm9jZXNzKQorCit0YXJnZXRfbGlua19vcHRpb25zKE1pbmlCcm93
c2VyIFBSSVZBVEUgLVdsLC0tbm8tZGVtYW5nbGUpCisKKyMKKyMgU2V0IHRoZSBkZWJ1Z2dlciB3
b3JraW5nIGRpcmVjdG9yeSBmb3IgVmlzdWFsIFN0dWRpbworIworaWYgKCR7Q01BS0VfR0VORVJB
VE9SfSBNQVRDSEVTICJWaXN1YWwgU3R1ZGlvIikKKyAgICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMo
TWluaUJyb3dzZXIgUFJPUEVSVElFUyBWU19ERUJVR0dFUl9XT1JLSU5HX0RJUkVDVE9SWSAiJHtD
TUFLRV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUll9IikKK2VuZGlmICgpCmRpZmYgLS1naXQgYS9U
b29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9JbWFnZUJ1dHRvbi5jcHAgYi9Ub29scy9NaW5p
QnJvd3Nlci9wbGF5c3RhdGlvbi9JbWFnZUJ1dHRvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWFlN2M4MTE3
MGMzNzFkZWJjNzZhNjNiYjBmNDg0MTQxNmMxZmE3NwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL0ltYWdlQnV0dG9uLmNwcApAQCAtMCwwICsxLDQzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVu
dCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJJbWFnZUJ1dHRvbi5oIgorCit2b2lkIEltYWdl
QnV0dG9uOjpzZXRDbGllbnQoQ2xpZW50JiYgY2xpZW50KQoreworICAgIG1fY2xpZW50ID0gc3Rk
Ojptb3ZlKGNsaWVudCk7Cit9CisKK2Jvb2wgSW1hZ2VCdXR0b246Om9uTW91c2VNb3ZlKHRvb2xr
aXR0ZW46OkludFBvaW50KQoreworICAgIHNldEZvY3VzZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCBJbWFnZUJ1dHRvbjo6b25EZWNpZGUoKQoreworICAgIGlmIChtX2NsaWVudC5v
bkRlY2lkZSkKKyAgICAgICAgbV9jbGllbnQub25EZWNpZGUodGhpcyk7Cit9CmRpZmYgLS1naXQg
YS9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9JbWFnZUJ1dHRvbi5oIGIvVG9vbHMvTWlu
aUJyb3dzZXIvcGxheXN0YXRpb24vSW1hZ2VCdXR0b24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMDA4YTNjZGU1
ZjVjYTRkYjg2MWJjNDZhYTEyMDBhZGFiMzE3MDFjCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
TWluaUJyb3dzZXIvcGxheXN0YXRpb24vSW1hZ2VCdXR0b24uaApAQCAtMCwwICsxLDQ0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJ
bmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNp
bmNsdWRlIDx0b29sa2l0dGVuL0ltYWdlQnV0dG9uLmg+CisKK2NsYXNzIEltYWdlQnV0dG9uIDog
cHVibGljIHRvb2xraXR0ZW46OkltYWdlQnV0dG9uIHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgQ2xp
ZW50IHsKKyAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKEltYWdlQnV0dG9uKik+IG9uRGVjaWRl
OworICAgIH07CisKKyAgICB2b2lkIHNldENsaWVudChDbGllbnQmJik7CisKK3Byb3RlY3RlZDoK
KyAgICBib29sIG9uTW91c2VNb3ZlKHRvb2xraXR0ZW46OkludFBvaW50KSBvdmVycmlkZTsKKyAg
ICB2b2lkIG9uRGVjaWRlKCkgb3ZlcnJpZGU7CisKKyAgICBDbGllbnQgbV9jbGllbnQ7Cit9Owpk
aWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRpb24vTWFpbldpbmRvdy5jcHAg
Yi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9NYWluV2luZG93LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li41ZDc5NmNlOTY2ZWMxZjY3ZTJjNTQzNjdkYzgwNWI0Y2RmMTAwOGUwCi0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRpb24vTWFpbldpbmRvdy5jcHAKQEAgLTAs
MCArMSwyNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBF
bnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIk1haW5XaW5kb3cuaCIKKworI2luY2x1ZGUgIkltYWdlQnV0dG9uLmgiCisjaW5jbHVkZSAi
VGl0bGVCYXIuaCIKKyNpbmNsdWRlICJUb29sa2l0dGVuVXRpbHMuaCIKKyNpbmNsdWRlICJVUkxC
YXIuaCIKKyNpbmNsdWRlICJXZWJWaWV3V2luZG93LmgiCisjaW5jbHVkZSA8S2V5Ym9hcmRDb2Rl
cy5oPgorI2luY2x1ZGUgPFdlYktpdC9XS1N0cmluZy5oPgorI2luY2x1ZGUgPHRvb2xraXR0ZW4v
QXBwbGljYXRpb24uaD4KKworY29uc3QgaW50IExpbmVIZWlnaHQgPSA0MDsKK2NvbnN0IGludCBG
b250U2l6ZSA9IDMyOworCit1c2luZyBuYW1lc3BhY2UgdG9vbGtpdHRlbjsKKworTWFpbldpbmRv
dzo6TWFpbldpbmRvdygpCit7CisgICAgSW50U2l6ZSBzaXplID0gQXBwbGljYXRpb246OnNpbmds
ZXRvbigpLndpbmRvd1NpemUoKTsKKyAgICBhdXRvIHdpbmRvd1dpZHRoID0gc2l6ZS53OworICAg
IGF1dG8gd2luZG93SGVpZ2h0ID0gc2l6ZS5oOworICAgIHNldFNpemUoc2l6ZSk7CisKKyAgICBj
b25zdCB1bnNpZ25lZCB0aXRsZUJhckhlaWdodCA9IExpbmVIZWlnaHQgKiAxOworICAgIGNvbnN0
IHVuc2lnbmVkIHVybEJhckhlaWdodCA9IExpbmVIZWlnaHQgKiAxOworICAgIGNvbnN0IHVuc2ln
bmVkIHdlYlZpZXdGcmFtZVlQb3NpdGlvbiA9IHRpdGxlQmFySGVpZ2h0ICsgdXJsQmFySGVpZ2h0
OworCisgICAgLy8gUmVnaXN0ZXIgd2lkZ2V0cy4gRE8gTk9UIENIQU5HRSB0aGlzIG9yZGVyLgor
ICAgIG1fd2Vidmlld0ZyYW1lID0gY3JlYXRlQW5kQXBwZW5kQ2hpbGQ8V2lkZ2V0Pih0aGlzLAor
ICAgICAgICB7IHdpbmRvd1dpZHRoLCB3aW5kb3dIZWlnaHQgLSB3ZWJWaWV3RnJhbWVZUG9zaXRp
b24gfSwKKyAgICAgICAgeyAwLCB3ZWJWaWV3RnJhbWVZUG9zaXRpb24gfSk7CisKKyAgICBtX3Rp
dGxlQmFyID0gY3JlYXRlQW5kQXBwZW5kQ2hpbGQ8VGl0bGVCYXI+KHRoaXMsCisgICAgICAgIHsg
d2luZG93V2lkdGgsIHRpdGxlQmFySGVpZ2h0IH0sCisgICAgICAgIHsgMCwgMCB9KTsKKworICAg
IGNvbnN0IGludCBjbG9zZUJ1dHRvbk1hcmdpbiA9IDQ7CisgICAgYXV0byBjbG9zZUJ1dHRvbiA9
IGNyZWF0ZUFuZEFwcGVuZENoaWxkPDo6SW1hZ2VCdXR0b24+KHRoaXMsCisgICAgICAgIHsgdGl0
bGVCYXJIZWlnaHQgLSBjbG9zZUJ1dHRvbk1hcmdpbiAqIDIsIHRpdGxlQmFySGVpZ2h0IC0gY2xv
c2VCdXR0b25NYXJnaW4gKiAyIH0sCisgICAgICAgIHsgKGludCkod2luZG93V2lkdGggLSB0aXRs
ZUJhckhlaWdodCArIGNsb3NlQnV0dG9uTWFyZ2luKSwgY2xvc2VCdXR0b25NYXJnaW4gfSk7Cisg
ICAgY2xvc2VCdXR0b24tPnNldEltYWdlRnJvbVJlc291cmNlKCJpY29uX2Nyb3NzLnBuZyIpOwor
ICAgIGNsb3NlQnV0dG9uLT5zZXRDbGllbnQoe1t0aGlzXSg6OkltYWdlQnV0dG9uKikgeworICAg
ICAgICBjbG9zZVdlYlZpZXcoYWN0aXZlV2ViVmlldygpKTsKKyAgICB9fSk7CisKKyAgICBjb25z
dCB1bnNpZ25lZCBidXR0b25XaWR0aCA9IDEwMDsKKyAgICBjb25zdCB1bnNpZ25lZCB1cmxCYXJX
aWR0aCA9IHdpbmRvd1dpZHRoIC0gYnV0dG9uV2lkdGggKiAzOworICAgIGNvbnN0IHVuc2lnbmVk
IHVybEJhclhQb3NpdGlvbiA9IGJ1dHRvbldpZHRoICogMzsKKworICAgIGF1dG8gYmFja0J1dHRv
biA9IGNyZWF0ZUFuZEFwcGVuZENoaWxkPDo6SW1hZ2VCdXR0b24+KHRoaXMsCisgICAgICAgIHsg
YnV0dG9uV2lkdGgsIHVybEJhckhlaWdodCB9LAorICAgICAgICB7IDAsIHRpdGxlQmFySGVpZ2h0
IH0pOworICAgIGJhY2tCdXR0b24tPnNldEltYWdlRnJvbVJlc291cmNlKCJpY29uX2JhY2sucG5n
Iik7CisgICAgYmFja0J1dHRvbi0+c2V0Q2xpZW50KHsgW3RoaXNdKDo6SW1hZ2VCdXR0b24qKSB7
CisgICAgICAgIGFjdGl2ZVdlYlZpZXcoKS0+Z29CYWNrKCk7CisgICAgfX0pOworCisgICAgYXV0
byBmb3J3YXJkQnV0dG9uID0gY3JlYXRlQW5kQXBwZW5kQ2hpbGQ8OjpJbWFnZUJ1dHRvbj4odGhp
cywKKyAgICAgICAgeyBidXR0b25XaWR0aCwgdXJsQmFySGVpZ2h0IH0sCisgICAgICAgIHsgYnV0
dG9uV2lkdGgsIHRpdGxlQmFySGVpZ2h0IH0pOworICAgIGZvcndhcmRCdXR0b24tPnNldEltYWdl
RnJvbVJlc291cmNlKCJpY29uX2ZvcndhcmQucG5nIik7CisgICAgZm9yd2FyZEJ1dHRvbi0+c2V0
Q2xpZW50KHsgW3RoaXNdKDo6SW1hZ2VCdXR0b24qKSB7CisgICAgICAgIGFjdGl2ZVdlYlZpZXco
KS0+Z29Gb3J3YXJkKCk7CisgICAgfX0pOworCisgICAgYXV0byByZWxvYWRCdXR0b24gPSBjcmVh
dGVBbmRBcHBlbmRDaGlsZDw6OkltYWdlQnV0dG9uPih0aGlzLAorICAgICAgICB7IGJ1dHRvbldp
ZHRoLCB1cmxCYXJIZWlnaHQgfSwKKyAgICAgICAgeyBidXR0b25XaWR0aCAqIDIsIHRpdGxlQmFy
SGVpZ2h0IH0pOworICAgIHJlbG9hZEJ1dHRvbi0+c2V0SW1hZ2VGcm9tUmVzb3VyY2UoImljb25f
cmVsb2FkLnBuZyIpOworICAgIHJlbG9hZEJ1dHRvbi0+c2V0Q2xpZW50KHsgW3RoaXNdKDo6SW1h
Z2VCdXR0b24qKSB7CisgICAgICAgIGFjdGl2ZVdlYlZpZXcoKS0+cmVsb2FkKCk7CisgICAgfX0p
OworCisgICAgbV91cmxCYXIgPSBjcmVhdGVBbmRBcHBlbmRDaGlsZDw6OlVSTEJhcj4odGhpcywK
KyAgICAgICAgeyB1cmxCYXJXaWR0aCwgdXJsQmFySGVpZ2h0IH0sCisgICAgICAgIHsgdXJsQmFy
WFBvc2l0aW9uLCB0aXRsZUJhckhlaWdodCB9KTsKKyAgICBtX3VybEJhci0+c2V0Q2xpZW50KHsg
W3RoaXNdKDo6VVJMQmFyKiwgY29uc3QgY2hhciogdXJsKSB7IAorICAgICAgICBhY3RpdmVXZWJW
aWV3KCktPmxvYWRVUkwodXJsKTsKKyAgICB9fSk7CisKKyAgICBjcmVhdGVOZXdXZWJWaWV3KG51
bGxwdHIpOworICAgIGFjdGl2ZVdlYlZpZXcoKS0+bG9hZFVSTCgiaHR0cHM6Ly93ZWJraXQub3Jn
Iik7Cit9CisKK3ZvaWQgTWFpbldpbmRvdzo6cGFpbnRTZWxmKHRvb2xraXR0ZW46OkludFBvaW50
KQoreworfQorCitXZWJWaWV3V2luZG93KiBNYWluV2luZG93OjpjcmVhdGVOZXdXZWJWaWV3KFdL
UGFnZUNvbmZpZ3VyYXRpb25SZWYgY29uZmlndXJhdGlvbikKK3sKKyAgICBJbnRTaXplIHNpemUg
PSBtX3dlYnZpZXdGcmFtZS0+c2l6ZSgpOworICAgIEludFBvaW50IHBvc2l0aW9uID0geyAwLCAw
IH07CisKKyAgICBXZWJWaWV3V2luZG93OjpDbGllbnQgd2luZG93Q2xpZW50IHsKKyAgICAgICAg
Ly8gY3JlYXRlTmV3V2luZG93CisgICAgICAgIFt0aGlzXShXS1BhZ2VDb25maWd1cmF0aW9uUmVm
IGNvbmZpZ3VyYXRpb24pIC0+IFdlYlZpZXdXaW5kb3cqIHsKKyAgICAgICAgICAgIHJldHVybiBj
cmVhdGVOZXdXZWJWaWV3KGNvbmZpZ3VyYXRpb24pOworICAgICAgICB9LAorCisgICAgICAgIC8v
IGRpZFVwZGF0ZVRpdGxlCisgICAgICAgIFt0aGlzXShXZWJWaWV3V2luZG93KiB2aWV3KSB7Cisg
ICAgICAgICAgICBpZiAodmlldyA9PSBhY3RpdmVXZWJWaWV3KCkpCisgICAgICAgICAgICAgICAg
dXBkYXRlVGl0bGVCYXIoKTsKKyAgICAgICAgfSwKKyAgICAgICAgLy8gZGlkVXBkYXRlVVJMCisg
ICAgICAgIFt0aGlzXShXZWJWaWV3V2luZG93KiB2aWV3KSB7CisgICAgICAgICAgICBpZiAodmll
dyA9PSBhY3RpdmVXZWJWaWV3KCkpCisgICAgICAgICAgICAgICAgdXBkYXRlVVJMQmFyKCk7Cisg
ICAgICAgIH0sCisgICAgICAgIC8vIGRpZFVwZGF0ZVByb2dyZXNzCisgICAgICAgIFt0aGlzXShX
ZWJWaWV3V2luZG93KiB2aWV3KSB7CisgICAgICAgICAgICBpZiAodmlldyA9PSBhY3RpdmVXZWJW
aWV3KCkpCisgICAgICAgICAgICAgICAgdXBkYXRlVGl0bGVCYXIoKTsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICBhdXRvIHdlYlZpZXdXaW5kb3cgPSBXZWJWaWV3V2luZG93OjpjcmVhdGUoc3Rk
Ojptb3ZlKHdpbmRvd0NsaWVudCksIGNvbmZpZ3VyYXRpb24pOworICAgIHdlYlZpZXdXaW5kb3ct
PnNldFVzZXJEYXRhKHRoaXMpOworICAgIHdlYlZpZXdXaW5kb3ctPnNldFBvc2l0aW9uKHBvc2l0
aW9uKTsKKyAgICB3ZWJWaWV3V2luZG93LT5zZXRTaXplKHsgc2l6ZS53LCBzaXplLmggfSk7Cisg
ICAgd2ViVmlld1dpbmRvdy0+ZmlsbChXSElURSk7CisKKyAgICBXZWJWaWV3V2luZG93KiByYXdX
ZWJWaWV3V2luZG93ID0gd2ViVmlld1dpbmRvdy5nZXQoKTsKKyAgICBtX3dlYnZpZXdGcmFtZS0+
YXBwZW5kQ2hpbGQobW92ZSh3ZWJWaWV3V2luZG93KSk7CisKKyAgICAvLyBBY3JpdmF0ZSB0aGUg
bmV3IHdpbmRvdy4KKyAgICByYXdXZWJWaWV3V2luZG93LT5zZXRBY3RpdmUodHJ1ZSk7CisgICAg
c2V0QWN0aXZlV2ViVmlldyhyYXdXZWJWaWV3V2luZG93KTsKKyAgICByZXR1cm4gcmF3V2ViVmll
d1dpbmRvdzsKK30KKworV2ViVmlld1dpbmRvdyogTWFpbldpbmRvdzo6YWN0aXZlV2ViVmlldygp
Cit7CisgICAgYXV0byBudW1XZWJWaWV3cyA9IG1fd2Vidmlld0ZyYW1lLT5jaGlsZHJlbigpLnNp
emUoKTsKKyAgICBpZiAobV9hY3RpdmVXZWJWaWV3SW5kZXggPj0gbnVtV2ViVmlld3MpCisgICAg
ICAgIG1fYWN0aXZlV2ViVmlld0luZGV4ID0gbnVtV2ViVmlld3MgLSAxOworCisgICAgYXV0byBp
dCA9IG1fd2Vidmlld0ZyYW1lLT5jaGlsZHJlbigpLmJlZ2luKCk7CisgICAgc3RkOjphZHZhbmNl
KGl0LCBtX2FjdGl2ZVdlYlZpZXdJbmRleCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYlZp
ZXdXaW5kb3cqPihpdC0+Z2V0KCkpOworfQorCit2b2lkIE1haW5XaW5kb3c6OnNldEFjdGl2ZVdl
YlZpZXcoV2ViVmlld1dpbmRvdyogdmlldykKK3sKKyAgICBhdXRvJiB3ZWJWaWV3cyA9IG1fd2Vi
dmlld0ZyYW1lLT5jaGlsZHJlbigpOworICAgIHVuc2lnbmVkIGkgPSAwOworICAgIGZvciAoYXV0
byBpdCA9IHdlYlZpZXdzLmJlZ2luKCk7IGl0ICE9IHdlYlZpZXdzLmVuZCgpOyBpdCsrLCBpKysp
IHsKKyAgICAgICAgaWYgKGl0LT5nZXQoKSA9PSB2aWV3KSB7CisgICAgICAgICAgICBtX2FjdGl2
ZVdlYlZpZXdJbmRleCA9IGk7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxXZWJWaWV3V2luZG93
Kj4oaXQtPmdldCgpKS0+c2V0QWN0aXZlKHRydWUpOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIHN0YXRpY19jYXN0PFdlYlZpZXdXaW5kb3cqPihpdC0+Z2V0KCkpLT5zZXRBY3RpdmUoZmFs
c2UpOworICAgIH0KKyAgICB1cGRhdGVUaXRsZUJhcigpOworICAgIHVwZGF0ZVVSTEJhcigpOwor
fQorCit2b2lkIE1haW5XaW5kb3c6OnN3aXRjaEFjdGl2ZVdlYlZpZXcoaW50IGRlbHRhKQorewor
ICAgIGF1dG8gbnVtV2ViVmlld3MgPSBtX3dlYnZpZXdGcmFtZS0+Y2hpbGRyZW4oKS5zaXplKCk7
CisgICAgdW5zaWduZWQgbmV3SW5kZXggPSAobV9hY3RpdmVXZWJWaWV3SW5kZXggKyBkZWx0YSAr
IG51bVdlYlZpZXdzKSAlIG51bVdlYlZpZXdzOworICAgIGF1dG8gaXQgPSBtX3dlYnZpZXdGcmFt
ZS0+Y2hpbGRyZW4oKS5iZWdpbigpOworICAgIHN0ZDo6YWR2YW5jZShpdCwgbmV3SW5kZXgpOwor
ICAgIHNldEFjdGl2ZVdlYlZpZXcoc3RhdGljX2Nhc3Q8V2ViVmlld1dpbmRvdyo+KGl0LT5nZXQo
KSkpOworfQorCit2b2lkIE1haW5XaW5kb3c6OmNsb3NlV2ViVmlldyhXZWJWaWV3V2luZG93KiB2
aWV3KQoreworICAgIGF1dG8mIHdlYlZpZXdzID0gbV93ZWJ2aWV3RnJhbWUtPmNoaWxkcmVuKCk7
CisgICAgdW5zaWduZWQgaSA9IDA7CisgICAgZm9yIChhdXRvIGl0ID0gd2ViVmlld3MuYmVnaW4o
KTsgaXQgIT0gd2ViVmlld3MuZW5kKCk7IGl0KyssIGkrKykgeworICAgICAgICBpZiAoaXQtPmdl
dCgpID09IHZpZXcpIHsKKyAgICAgICAgICAgIG1fd2Vidmlld0ZyYW1lLT5yZW1vdmVDaGlsZCh2
aWV3KTsKKyAgICAgICAgICAgIGlmIChtX3dlYnZpZXdGcmFtZS0+Y2hpbGRyZW4oKS5lbXB0eSgp
KQorICAgICAgICAgICAgICAgIGV4aXQoMCk7CisKKyAgICAgICAgICAgIGlmIChpID09IG1fYWN0
aXZlV2ViVmlld0luZGV4KQorICAgICAgICAgICAgICAgIHN3aXRjaEFjdGl2ZVdlYlZpZXcoLTEp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorfQorCitib29sIE1haW5X
aW5kb3c6Om9uS2V5RG93bihpbnQzMl90IHZpcnR1YWxLZXlDb2RlKQoreworICAgIHN3aXRjaCAo
dmlydHVhbEtleUNvZGUpIHsKKyAgICBjYXNlIFZLX0wxOgorICAgICAgICBhY3RpdmVXZWJWaWV3
KCktPmdvQmFjaygpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIFZLX0wyOgorICAg
ICAgICBzd2l0Y2hBY3RpdmVXZWJWaWV3KC0xKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
Y2FzZSBWS19SMToKKyAgICAgICAgYWN0aXZlV2ViVmlldygpLT5nb0ZvcndhcmQoKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBWS19SMjoKKyAgICAgICAgc3dpdGNoQWN0aXZlV2Vi
VmlldygxKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBWS19SMzoKKyAgICAgICAg
YWN0aXZlV2ViVmlldygpLT50b2dnbGVab29tRmFjdG9yKCk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIGNhc2UgVktfVFJJQU5HTEU6CisgICAgICAgIGFjdGl2ZVdlYlZpZXcoKS0+cmVsb2Fk
KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgTWFpbldpbmRvdzo6dXBkYXRlVGl0bGVCYXIoKQoreworICAgIGF1dG8gbnVtV2ViVmll
d3MgPSBtX3dlYnZpZXdGcmFtZS0+Y2hpbGRyZW4oKS5zaXplKCk7CisgICAgYXV0byB0aXRsZSA9
IHN0ZDo6dG9fc3RyaW5nKG1fYWN0aXZlV2ViVmlld0luZGV4ICsgMSkgKyAiLyIgKyBzdGQ6OnRv
X3N0cmluZyhudW1XZWJWaWV3cykgKyAiICIgKyBhY3RpdmVXZWJWaWV3KCktPnRpdGxlKCk7CisK
KyAgICBhdXRvIHByb2dyZXNzID0gYWN0aXZlV2ViVmlldygpLT5wcm9ncmVzcygpOworICAgIG1f
dGl0bGVCYXItPnNldFRpdGxlKHRpdGxlKTsKKyAgICBtX3RpdGxlQmFyLT5zZXRQcm9ncmVzcyhw
cm9ncmVzcyk7Cit9CisKK3ZvaWQgTWFpbldpbmRvdzo6dXBkYXRlVVJMQmFyKCkKK3sKKyAgICBt
X3VybEJhci0+c2V0VGV4dChhY3RpdmVXZWJWaWV3KCktPnVybCgpLmNfc3RyKCksIEZvbnRTaXpl
KTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL01haW5XaW5k
b3cuaCBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL01haW5XaW5kb3cuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5mNmE0YjVkYTE0MTgzMjc3OTExZTczMDE1NDNmMTc2ZmZkYjFhYTY3Ci0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRpb24vTWFpbldpbmRvdy5oCkBAIC0w
LDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBF
bnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxX
ZWJLaXQvV0tCYXNlLmg+CisjaW5jbHVkZSA8bGlzdD4KKyNpbmNsdWRlIDx0b29sa2l0dGVuL1dp
ZGdldC5oPgorCitjbGFzcyBUaXRsZUJhcjsKK2NsYXNzIFVSTEJhcjsKK2NsYXNzIFdlYlZpZXdX
aW5kb3c7CisKK2NsYXNzIE1haW5XaW5kb3cgOiBwdWJsaWMgdG9vbGtpdHRlbjo6V2lkZ2V0IHsK
K3B1YmxpYzoKKyAgICBNYWluV2luZG93KCk7CisKKyAgICBXZWJWaWV3V2luZG93KiBhY3RpdmVX
ZWJWaWV3KCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBwYWludFNlbGYodG9vbGtpdHRlbjo6SW50
UG9pbnQpIGZpbmFsOworICAgIGJvb2wgb25LZXlEb3duKGludDMyX3QgdmlydHVhbEtleUNvZGUp
IGZpbmFsOworCisgICAgdm9pZCB1cGRhdGVUaXRsZUJhcigpOworICAgIHZvaWQgdXBkYXRlVVJM
QmFyKCk7CisKKyAgICBXZWJWaWV3V2luZG93KiBjcmVhdGVOZXdXZWJWaWV3KFdLUGFnZUNvbmZp
Z3VyYXRpb25SZWYpOworICAgIHZvaWQgc2V0QWN0aXZlV2ViVmlldyhXZWJWaWV3V2luZG93Kik7
CisgICAgdm9pZCBzd2l0Y2hBY3RpdmVXZWJWaWV3KGludCBkZWx0YSk7CisgICAgdm9pZCBjbG9z
ZVdlYlZpZXcoV2ViVmlld1dpbmRvdyopOworCisgICAgVGl0bGVCYXIqIG1fdGl0bGVCYXIgeyBu
dWxscHRyIH07CisgICAgVVJMQmFyKiBtX3VybEJhciB7IG51bGxwdHIgfTsKKyAgICBXaWRnZXQq
IG1fd2Vidmlld0ZyYW1lIHsgbnVsbHB0ciB9OworCisgICAgdW5zaWduZWQgbV9hY3RpdmVXZWJW
aWV3SW5kZXggeyAwIH07Cit9OwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0
YXRpb24vU3RyaW5nVXRpbHMuaCBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1N0cmlu
Z1V0aWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMDQ4YWZkNzUzNDZhMDc3OGNiN2Q1YTc5MjlmMzMyMzVlZTky
Nzk5YwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1N0
cmluZ1V0aWxzLmgKQEAgLTAsMCArMSwzOCBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDIxIFNv
bnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxXZWJLaXQv
V0tTdHJpbmcuaD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dmVjdG9yPgorCitpbmxp
bmUgc3RkOjpzdHJpbmcgdG9VVEY4U3RyaW5nKFdLU3RyaW5nUmVmIHdrc3RyaW5nKQoreworICAg
IHNpemVfdCBidWZmZXJTaXplID0gV0tTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKHdr
c3RyaW5nKTsKKyAgICBzdGQ6OnZlY3RvcjxjaGFyPiBidWZmZXIoYnVmZmVyU2l6ZSk7CisgICAg
c2l6ZV90IHNpemUgPSBXS1N0cmluZ0dldFVURjhDU3RyaW5nKHdrc3RyaW5nLCBidWZmZXIuZGF0
YSgpLCBidWZmZXJTaXplKTsKKyAgICByZXR1cm4gc3RkOjpzdHJpbmcgeyBidWZmZXIuZGF0YSgp
LCBzaXplIH07Cit9CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9U
aXRsZUJhci5jcHAgYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9UaXRsZUJhci5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNjA1MjAxZTBmNjk3NWI0ZjQ3OWNjNTI0M2ZlMTYzNzYyNjcyNzJjOAotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1RpdGxlQmFyLmNw
cApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJh
Y3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJUaXRsZUJhci5o
IgorCit1c2luZyBuYW1lc3BhY2UgdG9vbGtpdHRlbjsKKwordm9pZCBUaXRsZUJhcjo6c2V0VGl0
bGUoY29uc3Qgc3RkOjpzdHJpbmcmIHRpdGxlKQoreworICAgIGlmIChtX3RpdGxlID09IHRpdGxl
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3RpdGxlID0gdGl0bGU7CisgICAgdXBkYXRlKCk7
Cit9CisKK3ZvaWQgVGl0bGVCYXI6OnNldFByb2dyZXNzKGRvdWJsZSBwcm9ncmVzcykKK3sKKyAg
ICBpZiAobV9wcm9ncmVzcyA9PSBwcm9ncmVzcykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9w
cm9ncmVzcyA9IHByb2dyZXNzOworICAgIHVwZGF0ZSgpOworfQorCit2b2lkIFRpdGxlQmFyOjp1
cGRhdGUoKQoreworICAgIGF1dG8gd2lkZ2V0U2l6ZSA9IHNpemUoKTsKKyAgICBpbnQgcHJvZ3Jl
c3NXaWR0aCA9IHdpZGdldFNpemUudyAqIG1fcHJvZ3Jlc3M7CisKKyAgICBJbnRSZWN0IHJlY3Qg
eyB7IDAsIDAgfSwgd2lkZ2V0U2l6ZSB9OworICAgIEludFJlY3QgcHJvZ3Jlc3NSZWN0ID0gcmVj
dDsKKyAgICBwcm9ncmVzc1JlY3Quc2l6ZS53ID0gcHJvZ3Jlc3NXaWR0aDsKKyAgICBpZiAoIXBy
b2dyZXNzUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIGZpbGxSZWN0KHByb2dyZXNzUmVjdCwgQ29s
b3IgeyAwLjAsIDAuMCwgMC41LCAxLjAgfSk7CisKKyAgICBJbnRSZWN0IHJlbWFpbmluZ1JlY3Qg
PSByZWN0OworICAgIHJlbWFpbmluZ1JlY3Quc2l6ZS53IC09IHByb2dyZXNzV2lkdGg7CisgICAg
cmVtYWluaW5nUmVjdC5wb3NpdGlvbi54ICs9IHByb2dyZXNzV2lkdGg7CisgICAgaWYgKCFyZW1h
aW5pbmdSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgZmlsbFJlY3QocmVtYWluaW5nUmVjdCwgQ29s
b3IgeyAwLjIsIDAuMiwgMC43LCAxLjAgfSk7CisKKyAgICBzdHJva2VSZWN0KHJlY3QsIDQsIENv
bG9yIHsgMC43LCAwLjcsIDAuNywgMS4wIH0pOworCisgICAgY29uc3QgaW50IGZvbnRTaXplID0g
MzI7CisgICAgZHJhd1RleHQobV90aXRsZS5jX3N0cigpLCB7IDIsIDAgfSwgZm9udFNpemUsIFdI
SVRFKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1RpdGxl
QmFyLmggYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9UaXRsZUJhci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjE4Y2M3ZGFjMzNkZWE4ZDVkNWVmNzlhYzk0YmNkZjZkZDg5Y2VhODgKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9UaXRsZUJhci5oCkBAIC0wLDAg
KzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRl
cnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx0b29s
a2l0dGVuL1dpZGdldC5oPgorCitjbGFzcyBUaXRsZUJhciA6IHB1YmxpYyB0b29sa2l0dGVuOjpX
aWRnZXQgeworcHVibGljOgorICAgIHZvaWQgc2V0VGl0bGUoY29uc3Qgc3RkOjpzdHJpbmcmKTsK
KyAgICB2b2lkIHNldFByb2dyZXNzKGRvdWJsZSk7CisKK3ByaXZhdGU6CisgICAgdm9pZCB1cGRh
dGUoKTsKKworICAgIHN0ZDo6c3RyaW5nIG1fdGl0bGU7CisgICAgZG91YmxlIG1fcHJvZ3Jlc3Mg
eyAwIH07Cit9OwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRpb24vVG9v
bGtpdHRlblV0aWxzLmggYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9Ub29sa2l0dGVu
VXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi44YjdiZjgwYTY0NzRjZDY0MTA2YWMxODAxZDZjMjM1ZWI0OGVj
ZDIxCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRpb24vVG9v
bGtpdHRlblV0aWxzLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDIx
IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisqCisqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxXZWJL
aXQvV0tHZW9tZXRyeS5oPgorI2luY2x1ZGUgPHRvb2xraXR0ZW4vSW50UmVjdC5oPgorCitpbmxp
bmUgdG9vbGtpdHRlbjo6SW50UmVjdCB0b1RLUmVjdChXS1JlY3QgcmVjdCkKK3sKKyAgICByZXR1
cm4geworICAgICAgICB0b29sa2l0dGVuOjpJbnRQb2ludCB7CisgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxpbnQ+KHJlY3Qub3JpZ2luLngpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pihy
ZWN0Lm9yaWdpbi55KQorICAgICAgICB9LAorICAgICAgICB0b29sa2l0dGVuOjpJbnRTaXplIHsK
KyAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZWN0LnNpemUud2lkdGgpLAorICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlY3Quc2l6ZS5oZWlnaHQpCisgICAgICAg
IH0KKyAgICB9OworfQorCitpbmxpbmUgdG9vbGtpdHRlbjo6SW50UG9pbnQgdG9US1BvaW50KFdL
UG9pbnQgcG9pbnQpCit7CisgICAgcmV0dXJuIHsKKyAgICAgICAgdG9vbGtpdHRlbjo6SW50UG9p
bnQgeworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pihwb2ludC54KSwKKyAgICAgICAgICAg
IHN0YXRpY19jYXN0PGludD4ocG9pbnQueSkKKyAgICAgICAgfQorICAgIH07Cit9CisKK2lubGlu
ZSBXS1JlY3QgdG9XS1JlY3QodG9vbGtpdHRlbjo6SW50UmVjdCByZWN0KQoreworICAgIHJldHVy
biBXS1JlY3RNYWtlKHJlY3QucG9zaXRpb24ueCwgcmVjdC5wb3NpdGlvbi55LCByZWN0LnNpemUu
dywgcmVjdC5zaXplLmgpOworfQorCitpbmxpbmUgV0tTaXplIHRvV0tTaXplKHRvb2xraXR0ZW46
OkludFNpemUgc2l6ZSkKK3sKKyAgICByZXR1cm4gV0tTaXplTWFrZShzaXplLncsIHNpemUuaCk7
Cit9CisKK2lubGluZSBXS1BvaW50IHRvV0tQb2ludCh0b29sa2l0dGVuOjpJbnRQb2ludCBwb2lu
dCkKK3sKKyAgICByZXR1cm4gV0tQb2ludE1ha2UocG9pbnQueCwgcG9pbnQueSk7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFdpZGdldFQ+CitXaWRnZXRUKiBjcmVhdGVBbmRBcHBlbmRDaGlsZCh0
b29sa2l0dGVuOjpXaWRnZXQqIHBhcmVudCwgY29uc3QgdG9vbGtpdHRlbjo6SW50U2l6ZSBzaXpl
LCBjb25zdCB0b29sa2l0dGVuOjpJbnRQb2ludCYgcG9zaXRpb24pCit7CisgICAgYXV0byB3aWRn
ZXQgPSBzdGQ6Om1ha2VfdW5pcXVlPFdpZGdldFQ+KCk7CisgICAgV2lkZ2V0VCogcHRyID0gd2lk
Z2V0LmdldCgpOworICAgIHB0ci0+c2V0U2l6ZShzaXplKTsKKyAgICBwdHItPnNldFBvc2l0aW9u
KHBvc2l0aW9uKTsKKyAgICBwYXJlbnQtPmFwcGVuZENoaWxkKG1vdmUod2lkZ2V0KSk7CisgICAg
cmV0dXJuIHB0cjsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9u
L1VSTEJhci5jcHAgYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9VUkxCYXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmY0NzI1NmUyNTVhYjFlYWMxOTM0ZjkyNzBmYzA4MDg4NWZhOGJhZjAKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9VUkxCYXIuY3BwCkBA
IC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2
ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIlVSTEJhci5oIgorCisj
aW5jbHVkZSA8S2V5Ym9hcmRDb2Rlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgdG9vbGtpdHRlbjsK
Kwordm9pZCBVUkxCYXI6OnNldENsaWVudChDbGllbnQmJiBjbGllbnQpCit7CisgICAgbV9jbGll
bnQgPSBzdGQ6Om1vdmUoY2xpZW50KTsKK30KKwordm9pZCBVUkxCYXI6OnVwZGF0ZVNlbGYoKQor
eworICAgIFRleHRCb3g6OnVwZGF0ZVNlbGYoKTsKKworICAgIGlmIChmb2N1c2VkV2lkZ2V0KCkg
PT0gdGhpcyAmJiBtX2ltZURpYWxvZyAmJiBtX2ltZURpYWxvZy0+aXNGaW5pc2hlZCgpKSB7Cisg
ICAgICAgIHNldFRleHQobV9pbWVEaWFsb2ctPmdldEltZVRleHQoKS5jX3N0cigpKTsKKyAgICAg
ICAgbV9pbWVEaWFsb2cucmVzZXQoKTsKKyAgICAgICAgaWYgKG1fY2xpZW50Lm9uRGVjaWRlVVJM
KQorICAgICAgICAgICAgbV9jbGllbnQub25EZWNpZGVVUkwodGhpcywgZ2V0VGV4dCgpKTsKKyAg
ICB9Cit9CisKK2Jvb2wgVVJMQmFyOjpvbk1vdXNlTW92ZSh0b29sa2l0dGVuOjpJbnRQb2ludCkK
K3sKKyAgICBzZXRGb2N1c2VkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVVJMQmFy
OjpvbktleURvd24oaW50MzJfdCB2aXJ0dWFsS2V5Q29kZSkKK3sKKyAgICBzd2l0Y2ggKHZpcnR1
YWxLZXlDb2RlKSB7CisgICAgY2FzZSBWS19SRVRVUk46CisgICAgICAgIHNldEZvY3VzZWQoKTsK
KyAgICAgICAgb25TZWxlY3QoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBVUkxCYXI6Om9uU2VsZWN0KCkKK3sKKyAgICBFZGl0b3JT
dGF0ZSBlZGl0b3JTdGF0ZTsKKyAgICBlZGl0b3JTdGF0ZS5pbnB1dFR5cGUgPSBJbnB1dEZpZWxk
VHlwZTo6VXJsOworICAgIGVkaXRvclN0YXRlLnN1cHBvcnRMYW5ndWFnZSA9IElucHV0RmllbGRM
YW5ndWFnZTo6RW5nbGlzaF9VczsKKyAgICBlZGl0b3JTdGF0ZS50aXRsZSA9ICJJbnB1dCBVUkwi
OworICAgIGVkaXRvclN0YXRlLnRleHQgPSBzdGQ6OnN0cmluZyhnZXRUZXh0KCkpOworICAgIGVk
aXRvclN0YXRlLnBvc2l0aW9uID0gZ2xvYmFsUG9zaXRpb24oKTsKKyAgICBlZGl0b3JTdGF0ZS5p
c0luTG9naW5Gb3JtID0gZmFsc2U7CisgICAgbV9pbWVEaWFsb2cgPSBJbWVEaWFsb2c6OmNyZWF0
ZShlZGl0b3JTdGF0ZSk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3Rh
dGlvbi9VUkxCYXIuaCBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1VSTEJhci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmZlMjQ1MGNmYWVjMDRlNDNmZTM5ZDdlYjNkZmIyMDJiZWNkNWY2MTgKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9VUkxCYXIuaApAQCAt
MCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUg
RW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
dG9vbGtpdHRlbi9JbWVEaWFsb2cuaD4KKyNpbmNsdWRlIDx0b29sa2l0dGVuL1RleHRCb3guaD4K
KworY2xhc3MgVVJMQmFyIDogcHVibGljIHRvb2xraXR0ZW46OlRleHRCb3ggeworcHVibGljOgor
ICAgIHN0cnVjdCBDbGllbnQgeworICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoVVJMQmFyKiwg
Y29uc3QgY2hhciopPiBvbkRlY2lkZVVSTDsKKyAgICB9OworCisgICAgdm9pZCBzZXRDbGllbnQo
Q2xpZW50JiYpOworCitwcml2YXRlOgorICAgIHZvaWQgdXBkYXRlU2VsZigpIGZpbmFsOworICAg
IGJvb2wgb25Nb3VzZU1vdmUodG9vbGtpdHRlbjo6SW50UG9pbnQpIGZpbmFsOworICAgIGJvb2wg
b25LZXlEb3duKGludDMyX3QgdmlydHVhbEtleUNvZGUpIGZpbmFsOworICAgIHZvaWQgb25TZWxl
Y3QoKTsKKworICAgIENsaWVudCBtX2NsaWVudDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8dG9vbGtp
dHRlbjo6SW1lRGlhbG9nPiBtX2ltZURpYWxvZzsKK307CmRpZmYgLS1naXQgYS9Ub29scy9NaW5p
QnJvd3Nlci9wbGF5c3RhdGlvbi9XZWJDb250ZXh0LmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3Bs
YXlzdGF0aW9uL1dlYkNvbnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI5ZDEzNTBlMDRjYzBlMDQ1ZWE3
NGZlMDg5NGJiYWE5MzUwNWU0OGEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nl
ci9wbGF5c3RhdGlvbi9XZWJDb250ZXh0LmNwcApAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJXZWJDb250ZXh0LmgiCisKKyNpbmNsdWRlICJTdHJpbmdVdGlscy5o
IgorI2luY2x1ZGUgPFdlYktpdC9XS0NvbnRleHRDb25maWd1cmF0aW9uUGxheVN0YXRpb24uaD4K
KyNpbmNsdWRlIDxXZWJLaXQvV0tDb250ZXh0UHJpdmF0ZS5oPgorI2luY2x1ZGUgPFdlYktpdC9X
S1ByZWZlcmVuY2VzUmVmLmg+CisjaW5jbHVkZSA8V2ViS2l0L1dLUHJlZmVyZW5jZXNSZWZQcml2
YXRlLmg+CisjaW5jbHVkZSA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb25S
ZWYuaD4KKyNpbmNsdWRlIDxXZWJLaXQvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmg+CisjaW5jbHVk
ZSA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVJlZkN1cmwuaD4KKworI2RlZmluZSBNQUtFX1BS
T0NFU1NfUEFUSCh4KSAiL2FwcDAvIiAjeCAiLnNlbGYiCisKK3N0ZDo6d2Vha19wdHI8V2ViQ29u
dGV4dD4gV2ViQ29udGV4dDo6c19pbnN0YW5jZTsKKworc3RkOjpzaGFyZWRfcHRyPFdlYkNvbnRl
eHQ+IFdlYkNvbnRleHQ6OnNpbmdsZXRvbigpCit7CisgICAgYXV0byByZXQgPSBzX2luc3RhbmNl
LmxvY2soKTsKKyAgICBpZiAoIXJldCkgeworICAgICAgICByZXQgPSBzdGQ6OnNoYXJlZF9wdHI8
V2ViQ29udGV4dD4obmV3IFdlYkNvbnRleHQoKSk7CisgICAgICAgIHNfaW5zdGFuY2UgPSByZXQ7
CisgICAgfQorICAgIHJldHVybiBzX2luc3RhbmNlLmxvY2soKTsKK30KKworV2ViQ29udGV4dDo6
V2ViQ29udGV4dCgpCit7CisgICAgV0tSZXRhaW5QdHI8V0tDb250ZXh0Q29uZmlndXJhdGlvblJl
Zj4gY29udGV4dENvbmZpZ3VyYXRpb24gPSBhZG9wdFdLKFdLQ29udGV4dENvbmZpZ3VyYXRpb25D
cmVhdGUoKSk7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdlYlByb2Nlc3NQYXRoID0g
YWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhNQUtFX1BST0NFU1NfUEFUSChX
ZWJQcm9jZXNzKSkpOworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBuZXR3b3JrUHJvY2Vz
c1BhdGggPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKE1BS0VfUFJPQ0VT
U19QQVRIKE5ldHdvcmtQcm9jZXNzKSkpOworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBs
b2NhbFN0b3JhZ2VQYXRoID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
L2RhdGEvbWluaWJyb3dzZXIvbG9jYWwiKSk7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lZGlhS2V5UGF0aCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIi9k
YXRhL21pbmlicm93c2VyL21laWRha2V5IikpOworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiByZXNvdXJjZUxvYWRTdGF0aXN0aWNzUGF0aCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIi9kYXRhL21pbmlicm93c2VyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MiKSk7
CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5ldHdvcmtDYWNoZVBhdGggPSBhZG9wdFdL
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIvZGF0YS9taW5pYnJvd3Nlci9OZXR3b3Jr
Q2FjaGUiKSk7CisKKyAgICBXS0NvbnRleHRDb25maWd1cmF0aW9uU2V0VXNlcklkKGNvbnRleHRD
b25maWd1cmF0aW9uLmdldCgpLCAtMSk7CisgICAgV0tDb250ZXh0Q29uZmlndXJhdGlvblNldFdl
YlByb2Nlc3NQYXRoKGNvbnRleHRDb25maWd1cmF0aW9uLmdldCgpLCB3ZWJQcm9jZXNzUGF0aC5n
ZXQoKSk7CisgICAgV0tDb250ZXh0Q29uZmlndXJhdGlvblNldE5ldHdvcmtQcm9jZXNzUGF0aChj
b250ZXh0Q29uZmlndXJhdGlvbi5nZXQoKSwgbmV0d29ya1Byb2Nlc3NQYXRoLmdldCgpKTsKKwor
ICAgIGF1dG8gZGF0YVN0b3JlQ29uZmlndXJhdGlvbiA9IGFkb3B0V0soV0tXZWJzaXRlRGF0YVN0
b3JlQ29uZmlndXJhdGlvbkNyZWF0ZSgpKTsKKyAgICBXS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1
cmF0aW9uU2V0TG9jYWxTdG9yYWdlRGlyZWN0b3J5KGRhdGFTdG9yZUNvbmZpZ3VyYXRpb24uZ2V0
KCksIGxvY2FsU3RvcmFnZVBhdGguZ2V0KCkpOworICAgIFdLV2Vic2l0ZURhdGFTdG9yZUNvbmZp
Z3VyYXRpb25TZXRNZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KGRhdGFTdG9yZUNvbmZpZ3VyYXRp
b24uZ2V0KCksIG1lZGlhS2V5UGF0aC5nZXQoKSk7CisgICAgV0tXZWJzaXRlRGF0YVN0b3JlQ29u
ZmlndXJhdGlvblNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoZGF0YVN0b3JlQ29u
ZmlndXJhdGlvbi5nZXQoKSwgcmVzb3VyY2VMb2FkU3RhdGlzdGljc1BhdGguZ2V0KCkpOworICAg
IFdLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb25TZXROZXR3b3JrQ2FjaGVEaXJlY3Rvcnko
ZGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKSwgbmV0d29ya0NhY2hlUGF0aC5nZXQoKSk7Cisg
ICAgV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvblNldE5ldHdvcmtDYWNoZVNwZWN1bGF0
aXZlVmFsaWRhdGlvbkVuYWJsZWQoZGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKSwgdHJ1ZSk7
CisgICAgV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvblNldFN0YWxlV2hpbGVSZXZhbGlk
YXRlRW5hYmxlZChkYXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpLCB0cnVlKTsKKyAgICBtX3dl
YnNpdGVEYXRhU3RvcmUgPSBXS1dlYnNpdGVEYXRhU3RvcmVDcmVhdGVXaXRoQ29uZmlndXJhdGlv
bihkYXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpKTsKKworICAgIG1fY29udGV4dCA9IGFkb3B0
V0soV0tDb250ZXh0Q3JlYXRlV2l0aENvbmZpZ3VyYXRpb24oY29udGV4dENvbmZpZ3VyYXRpb24u
Z2V0KCkpKTsKKyAgICBXS0NvbnRleHRTZXRQcmltYXJ5V2Vic2l0ZURhdGFTdG9yZShtX2NvbnRl
eHQuZ2V0KCksIG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKSk7CisgICAgV0tDb250ZXh0U2V0VXNl
c1NpbmdsZVdlYlByb2Nlc3MobV9jb250ZXh0LmdldCgpLCB0cnVlKTsKKworICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBncm91cE5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJEZWZhdWx0IikpOworICAgIG1fcGFnZUdyb3VwID0gYWRvcHRXSyhXS1BhZ2VH
cm91cENyZWF0ZVdpdGhJZGVudGlmaWVyKGdyb3VwTmFtZS5nZXQoKSkpOworCisgICAgbV9wcmVm
ZXJlbmNlc01hc3RlciA9IGFkb3B0V0soV0tQcmVmZXJlbmNlc0NyZWF0ZSgpKTsKKyAgICBXS1By
ZWZlcmVuY2VzU2V0RnVsbFNjcmVlbkVuYWJsZWQobV9wcmVmZXJlbmNlc01hc3Rlci5nZXQoKSwg
dHJ1ZSk7CisgICAgV0tQcmVmZXJlbmNlc1NldEROU1ByZWZldGNoaW5nRW5hYmxlZChtX3ByZWZl
cmVuY2VzTWFzdGVyLmdldCgpLCB0cnVlKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0TmVlZHNTaXRl
U3BlY2lmaWNRdWlya3MobV9wcmVmZXJlbmNlc01hc3Rlci5nZXQoKSwgZmFsc2UpOworfQorCitX
ZWJDb250ZXh0Ojp+V2ViQ29udGV4dCgpCit7Cit9CisKK3ZvaWQgV2ViQ29udGV4dDo6YWRkV2lu
ZG93KFdlYlZpZXdXaW5kb3cqIHdpbmRvdykKK3sKKyAgICBtX3dpbmRvd3MucHVzaF9iYWNrKHdp
bmRvdyk7Cit9CisKK3ZvaWQgV2ViQ29udGV4dDo6cmVtb3ZlV2luZG93KFdlYlZpZXdXaW5kb3cq
IHdpbmRvdykKK3sKKyAgICBtX3dpbmRvd3MucmVtb3ZlKHdpbmRvdyk7Cit9CmRpZmYgLS1naXQg
YS9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9XZWJDb250ZXh0LmggYi9Ub29scy9NaW5p
QnJvd3Nlci9wbGF5c3RhdGlvbi9XZWJDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmMwM2MyMWYzMWQy
MjEwZWI4OTFmYjExYzNjODQxNzRlOTY1OTVmNAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL01p
bmlCcm93c2VyL3BsYXlzdGF0aW9uL1dlYkNvbnRleHQuaApAQCAtMCwwICsxLDU4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8V2ViS2l0L1dLQ29udGV4dC5o
PgorI2luY2x1ZGUgPFdlYktpdC9XS1BhZ2VDb25maWd1cmF0aW9uUmVmLmg+CisjaW5jbHVkZSA8
V2ViS2l0L1dLUGFnZUdyb3VwLmg+CisjaW5jbHVkZSA8V2ViS2l0L1dLUmV0YWluUHRyLmg+Cisj
aW5jbHVkZSA8bGlzdD4KKworY2xhc3MgV2ViVmlld1dpbmRvdzsKKworY2xhc3MgV2ViQ29udGV4
dCB7Citwcm90ZWN0ZWQ6CisgICAgV2ViQ29udGV4dCgpOworcHVibGljOgorICAgIH5XZWJDb250
ZXh0KCk7CisgICAgc3RhdGljIHN0ZDo6c2hhcmVkX3B0cjxXZWJDb250ZXh0PiBzaW5nbGV0b24o
KTsKKworICAgIFdLQ29udGV4dFJlZiBjb250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0LmdldCgp
OyB9CisgICAgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwKCkgeyByZXR1cm4gbV9wYWdlR3JvdXAu
Z2V0KCk7IH0KKyAgICBXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzKCkgeyByZXR1cm4gbV9w
cmVmZXJlbmNlc01hc3Rlci5nZXQoKTsgfQorICAgIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiB3ZWJz
aXRlRGF0YVN0b3JlKCkgeyByZXR1cm4gbV93ZWJzaXRlRGF0YVN0b3JlLmdldCgpOyB9CisKKyAg
ICB2b2lkIGFkZFdpbmRvdyhXZWJWaWV3V2luZG93Kik7CisgICAgdm9pZCByZW1vdmVXaW5kb3co
V2ViVmlld1dpbmRvdyopOworCitwcml2YXRlOgorICAgIHN0YXRpYyBzdGQ6OndlYWtfcHRyPFdl
YkNvbnRleHQ+IHNfaW5zdGFuY2U7CisgICAgV0tSZXRhaW5QdHI8V0tDb250ZXh0UmVmPiBtX2Nv
bnRleHQ7CisgICAgV0tSZXRhaW5QdHI8V0tQYWdlR3JvdXBSZWY+IG1fcGFnZUdyb3VwOworICAg
IFdLUmV0YWluUHRyPFdLUHJlZmVyZW5jZXNSZWY+IG1fcHJlZmVyZW5jZXNNYXN0ZXI7CisgICAg
V0tSZXRhaW5QdHI8V0tXZWJzaXRlRGF0YVN0b3JlUmVmPiBtX3dlYnNpdGVEYXRhU3RvcmU7Cisg
ICAgc3RkOjpsaXN0PFdlYlZpZXdXaW5kb3cqPiBtX3dpbmRvd3M7Cit9OwpkaWZmIC0tZ2l0IGEv
VG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRpb24vV2ViVmlld1dpbmRvdy5jcHAgYi9Ub29scy9N
aW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9XZWJWaWV3V2luZG93LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZjZh
MGRlOTdiZmU4NDE2MjFhMGVjMGRmYjFiMjc3MTMyYmJjZDMzCi0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRpb24vV2ViVmlld1dpbmRvdy5jcHAKQEAgLTAsMCAr
MSw0MzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRl
cnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIldlYlZpZXdXaW5kb3cuaCIKKwor
I2luY2x1ZGUgIk1haW5XaW5kb3cuaCIKKyNpbmNsdWRlICJTdHJpbmdVdGlscy5oIgorI2luY2x1
ZGUgIlRvb2xraXR0ZW5VdGlscy5oIgorI2luY2x1ZGUgPEtleWJvYXJkRXZlbnRzLmg+CisjaW5j
bHVkZSA8V2ViS2l0L1dLUGFnZS5oPgorI2luY2x1ZGUgPFdlYktpdC9XS1BhZ2VQcml2YXRlUGxh
eVN0YXRpb24uaD4KKyNpbmNsdWRlIDxXZWJLaXQvV0tQcmVmZXJlbmNlc1JlZi5oPgorI2luY2x1
ZGUgPFdlYktpdC9XS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oPgorI2luY2x1ZGUgPFdlYktpdC9X
S1VSTC5oPgorI2luY2x1ZGUgPGNhaXJvL2NhaXJvLmg+CisjaW5jbHVkZSA8bWFwPgorI2luY2x1
ZGUgPHRvb2xraXR0ZW4vQXBwbGljYXRpb24uaD4KKyNpbmNsdWRlIDx0b29sa2l0dGVuL0N1cnNv
ci5oPgorI2luY2x1ZGUgPHRvb2xraXR0ZW4vTWVzc2FnZURpYWxvZy5oPgorCit1c2luZyBuYW1l
c3BhY2UgdG9vbGtpdHRlbjsKKworaW5saW5lIFdlYlZpZXdXaW5kb3cqIHRvV2ViVmlldyhjb25z
dCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIHJldHVybiBjb25zdF9jYXN0PFdlYlZpZXdXaW5k
b3cqPihzdGF0aWNfY2FzdDxjb25zdCBXZWJWaWV3V2luZG93Kj4oY2xpZW50SW5mbykpOworfQor
CitzdGF0aWMgdm9pZCBzZXRDdXJzb3IoV0tDdXJzb3JUeXBlIGN1cnNvclR5cGUpCit7CisgICAg
c3dpdGNoIChjdXJzb3JUeXBlKSB7CisgICAgY2FzZSBrV0tDdXJzb3JUeXBlSGFuZDoKKyAgICAg
ICAgQ3Vyc29yOjpzaW5nbGV0b24oKS5zZXRUeXBlKEN1cnNvcjo6a1R5cGVIYW5kKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBrV0tDdXJzb3JUeXBlUG9pbnRlcjoKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBDdXJzb3I6OnNpbmdsZXRvbigpLnNldFR5cGUoQ3Vyc29yOjprVHlwZVBvaW50ZXIp
OworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxXZWJWaWV3V2lu
ZG93PiBXZWJWaWV3V2luZG93OjpjcmVhdGUoQ2xpZW50JiYgd2luZG93Q2xpZW50LCBXS1BhZ2VD
b25maWd1cmF0aW9uUmVmIGNvbmZpZ3VyYXRpb25SZWYpCit7CisgICAgYXV0byBjb250ZXh0ID0g
V2ViQ29udGV4dDo6c2luZ2xldG9uKCk7CisKKyAgICBpZiAoY29uZmlndXJhdGlvblJlZikKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8V2ViVmlld1dpbmRvdz4oY29uZmlndXJhdGlv
blJlZiwgc3RkOjptb3ZlKHdpbmRvd0NsaWVudCkpOworCisgICAgV0tSZXRhaW5QdHI8V0tQYWdl
Q29uZmlndXJhdGlvblJlZj4gY29uZmlndXJhdGlvbiA9IGFkb3B0V0soV0tQYWdlQ29uZmlndXJh
dGlvbkNyZWF0ZSgpKTsKKyAgICBXS1BhZ2VDb25maWd1cmF0aW9uU2V0Q29udGV4dChjb25maWd1
cmF0aW9uLmdldCgpLCBjb250ZXh0LT5jb250ZXh0KCkpOworICAgIFdLUGFnZUNvbmZpZ3VyYXRp
b25TZXRQYWdlR3JvdXAoY29uZmlndXJhdGlvbi5nZXQoKSwgY29udGV4dC0+cGFnZUdyb3VwKCkp
OworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFdlYlZpZXdXaW5kb3c+KGNvbmZpZ3VyYXRp
b24uZ2V0KCksIHN0ZDo6bW92ZSh3aW5kb3dDbGllbnQpKTsKK30KKworV2ViVmlld1dpbmRvdzo6
V2ViVmlld1dpbmRvdyhXS1BhZ2VDb25maWd1cmF0aW9uUmVmIGNvbmZpZ3VyYXRpb24sIENsaWVu
dCYmIHdpbmRvd0NsaWVudCkKKyAgICA6IG1fY2xpZW50KHN0ZDo6bW92ZSh3aW5kb3dDbGllbnQp
KQoreworICAgIC8vIEZJWE1FOiBTaG91bGQgY2hpbGQgc2hhcmUgdGhlIHByZWZlcmVuY2Ugd2l0
aCBwYXJlbnQ/CisgICAgbV9jb250ZXh0ID0gV2ViQ29udGV4dDo6c2luZ2xldG9uKCk7CisgICAg
bV9wcmVmZXJlbmNlcyA9IFdLUHJlZmVyZW5jZXNDcmVhdGVDb3B5KG1fY29udGV4dC0+cHJlZmVy
ZW5jZXMoKSk7CisgICAgV0tQYWdlQ29uZmlndXJhdGlvblNldFByZWZlcmVuY2VzKGNvbmZpZ3Vy
YXRpb24sIG1fcHJlZmVyZW5jZXMuZ2V0KCkpOworCisgICAgV0tQcmVmZXJlbmNlc1NldEFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKG1fcHJlZmVyZW5jZXMuZ2V0KCksIGZhbHNlKTsKKyAg
ICBXS1ByZWZlcmVuY2VzU2V0RnVsbFNjcmVlbkVuYWJsZWQobV9wcmVmZXJlbmNlcy5nZXQoKSwg
dHJ1ZSk7CisKKyAgICBtX3ZpZXcgPSBXS1ZpZXdDcmVhdGUoY29uZmlndXJhdGlvbik7CisgICAg
bV9jb250ZXh0LT5hZGRXaW5kb3codGhpcyk7CisKKyAgICBXS1ZpZXdDbGllbnRWMCB2aWV3Q2xp
ZW50IHsKKyAgICAgICAgeyAwLCB0aGlzIH0sCisKKyAgICAgICAgLy8gc2V0Vmlld05lZWRzRGlz
cGxheQorICAgICAgICBbXShXS1ZpZXdSZWYsIFdLUmVjdCByZWN0LCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKSB7CisgICAgICAgICAgICB0b1dlYlZpZXcoY2xpZW50SW5mbyktPnVwZGF0ZVN1cmZh
Y2UodG9US1JlY3QocmVjdCkpOworICAgICAgICB9LAorCisgICAgICAgIC8vIGVudGVyRnVsbFNj
cmVlbgorICAgICAgICBbXShXS1ZpZXdSZWYgdmlldywgY29uc3Qgdm9pZCopIHsKKyAgICAgICAg
ICAgIFdLVmlld1dpbGxFbnRlckZ1bGxTY3JlZW4odmlldyk7CisgICAgICAgICAgICBXS1ZpZXdE
aWRFbnRlckZ1bGxTY3JlZW4odmlldyk7CisgICAgICAgIH0sCisgICAgICAgIC8vIGV4aXRGdWxs
U2NyZWVuCisgICAgICAgIFtdKFdLVmlld1JlZiB2aWV3LCBjb25zdCB2b2lkKikgeworICAgICAg
ICAgICAgV0tWaWV3V2lsbEV4aXRGdWxsU2NyZWVuKHZpZXcpOworICAgICAgICAgICAgV0tWaWV3
RGlkRXhpdEZ1bGxTY3JlZW4odmlldyk7CisgICAgICAgIH0sCisgICAgICAgIG51bGxwdHIsIC8v
IGNsb3NlRnVsbFNjcmVlbgorICAgICAgICBudWxscHRyLCAvLyBiZWdhbkVudGVyRnVsbFNjcmVl
bgorICAgICAgICBudWxscHRyLCAvLyBiZWdhbkV4aXRGdWxsU2NyZWVuCisKKyAgICAgICAgLy8g
c2V0Q3Vyc29yCisgICAgICAgIFtdKFdLVmlld1JlZiwgV0tDdXJzb3JUeXBlIGN1cnNvclR5cGUs
IGNvbnN0IHZvaWQqKSB7CisgICAgICAgICAgICBzZXRDdXJzb3IoY3Vyc29yVHlwZSk7CisgICAg
ICAgIH0KKyAgICB9OworICAgIFdLVmlld1NldFZpZXdDbGllbnQobV92aWV3LmdldCgpLCAmdmll
d0NsaWVudC5iYXNlKTsKKworICAgIFdLUGFnZVN0YXRlQ2xpZW50VjAgcGFnZVN0YXRlQ2xpZW50
IHsKKyAgICAgICAgeyAwLCB0aGlzIH0sCisKKyAgICAgICAgbnVsbHB0ciwgLy8gd2lsbENoYW5n
ZUlzTG9hZGluZworICAgICAgICBudWxscHRyLCAvLyBkaWRDaGFuZ2VJc0xvYWRpbmcKKyAgICAg
ICAgbnVsbHB0ciwgLy8gd2lsbENoYW5nZVRpdGxlCisgICAgICAgIC8vIGRpZENoYW5nZVRpdGxl
CisgICAgICAgIFtdKGNvbnN0IHZvaWQqIGNsaWVudEluZm8pIHsKKyAgICAgICAgICAgIHRvV2Vi
VmlldyhjbGllbnRJbmZvKS0+dXBkYXRlVGl0bGUoKTsKKyAgICAgICAgfSwKKyAgICAgICAgbnVs
bHB0ciwgLy8gd2lsbENoYW5nZUFjdGl2ZVVSTAorICAgICAgICAvLyBkaWRDaGFuZ2VBY3RpdmVV
UkwKKyAgICAgICAgW10oY29uc3Qgdm9pZCogY2xpZW50SW5mbykgeworICAgICAgICAgICAgdG9X
ZWJWaWV3KGNsaWVudEluZm8pLT51cGRhdGVVUkwoKTsKKyAgICAgICAgfSwKKyAgICAgICAgbnVs
bHB0ciwgLy8gd2lsbENoYW5nZUhhc09ubHlTZWN1cmVDb250ZW50CisgICAgICAgIG51bGxwdHIs
IC8vIGRpZENoYW5nZUhhc09ubHlTZWN1cmVDb250ZW50CisgICAgICAgIG51bGxwdHIsIC8vIHdp
bGxDaGFuZ2VFc3RpbWF0ZWRQcm9ncmVzcworICAgICAgICAvLyBkaWRDaGFuZ2VFc3RpbWF0ZWRQ
cm9ncmVzcworICAgICAgICBbXShjb25zdCB2b2lkKiBjbGllbnRJbmZvKSB7CisgICAgICAgICAg
ICB0b1dlYlZpZXcoY2xpZW50SW5mbyktPnVwZGF0ZVByb2dyZXNzKCk7CisgICAgICAgIH0sCisg
ICAgICAgIG51bGxwdHIsIC8vIHdpbGxDaGFuZ2VDYW5Hb0JhY2sKKyAgICAgICAgbnVsbHB0ciwg
Ly8gZGlkQ2hhbmdlQ2FuR29CYWNrCisgICAgICAgIG51bGxwdHIsIC8vIHdpbGxDaGFuZ2VDYW5H
b0ZvcndhcmQKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkQ2hhbmdlQ2FuR29Gb3J3YXJkCisgICAg
ICAgIG51bGxwdHIsIC8vIHdpbGxDaGFuZ2VOZXR3b3JrUmVxdWVzdHNJblByb2dyZXNzCisgICAg
ICAgIG51bGxwdHIsIC8vIGRpZENoYW5nZU5ldHdvcmtSZXF1ZXN0c0luUHJvZ3Jlc3MKKyAgICAg
ICAgbnVsbHB0ciwgLy8gd2lsbENoYW5nZUNlcnRpZmljYXRlSW5mbworICAgICAgICBudWxscHRy
LCAvLyBkaWRDaGFuZ2VDZXJ0aWZpY2F0ZUluZm8KKyAgICAgICAgbnVsbHB0ciwgLy8gd2lsbENo
YW5nZVdlYlByb2Nlc3NJc1Jlc3BvbnNpdmUKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkQ2hhbmdl
V2ViUHJvY2Vzc0lzUmVzcG9uc2l2ZQorICAgICAgICBudWxscHRyLCAvLyBkaWRTd2FwV2ViUHJv
Y2Vzc2VzCisgICAgfTsKKyAgICBXS1BhZ2VTZXRQYWdlU3RhdGVDbGllbnQocGFnZSgpLCAmcGFn
ZVN0YXRlQ2xpZW50LmJhc2UpOworCisgICAgV0tQYWdlVUlDbGllbnRWNiB1aUNsaWVudCB7Cisg
ICAgICAgIHsgNiwgdGhpcyB9LAorICAgICAgICBudWxscHRyLCAvLyBjcmVhdGVOZXdQYWdlX2Rl
cHJlY2F0ZWRGb3JVc2VXaXRoVjAKKyAgICAgICAgbnVsbHB0ciwgLy8gc2hvd1BhZ2UKKyAgICAg
ICAgbnVsbHB0ciwgLy8gY2xvc2UKKyAgICAgICAgbnVsbHB0ciwgLy8gdGFrZUZvY3VzCisgICAg
ICAgIG51bGxwdHIsIC8vIGZvY3VzCisgICAgICAgIG51bGxwdHIsIC8vIHVuZm9jdXMKKyAgICAg
ICAgbnVsbHB0ciwgLy8gcnVuSmF2YVNjcmlwdEFsZXJ0X2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjAK
KyAgICAgICAgbnVsbHB0ciwgLy8gcnVuSmF2YVNjcmlwdENvbmZpcm1fZGVwcmVjYXRlZEZvclVz
ZVdpdGhWMAorICAgICAgICBudWxscHRyLCAvLyBydW5KYXZhU2NyaXB0UHJvbXB0X2RlcHJlY2F0
ZWRGb3JVc2VXaXRoVjAKKyAgICAgICAgbnVsbHB0ciwgLy8gc2V0U3RhdHVzVGV4dAorICAgICAg
ICBudWxscHRyLCAvLyBtb3VzZURpZE1vdmVPdmVyRWxlbWVudF9kZXByZWNhdGVkRm9yVXNlV2l0
aFYwCisgICAgICAgIG51bGxwdHIsIC8vIG1pc3NpbmdQbHVnaW5CdXR0b25DbGlja2VkX2RlcHJl
Y2F0ZWRGb3JVc2VXaXRoVjAKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkTm90SGFuZGxlS2V5RXZl
bnQKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkTm90SGFuZGxlV2hlZWxFdmVudAorICAgICAgICBu
dWxscHRyLCAvLyB0b29sYmFyc0FyZVZpc2libGUKKyAgICAgICAgbnVsbHB0ciwgLy8gc2V0VG9v
bGJhcnNBcmVWaXNpYmxlCisgICAgICAgIG51bGxwdHIsIC8vIG1lbnVCYXJJc1Zpc2libGUKKyAg
ICAgICAgbnVsbHB0ciwgLy8gc2V0TWVudUJhcklzVmlzaWJsZQorICAgICAgICBudWxscHRyLCAv
LyBzdGF0dXNCYXJJc1Zpc2libGUKKyAgICAgICAgbnVsbHB0ciwgLy8gc2V0U3RhdHVzQmFySXNW
aXNpYmxlCisgICAgICAgIG51bGxwdHIsIC8vIGlzUmVzaXphYmxlCisgICAgICAgIG51bGxwdHIs
IC8vIHNldElzUmVzaXphYmxlCisgICAgICAgIG51bGxwdHIsIC8vIGdldFdpbmRvd0ZyYW1lCisg
ICAgICAgIG51bGxwdHIsIC8vIHNldFdpbmRvd0ZyYW1lCisgICAgICAgIG51bGxwdHIsIC8vIHJ1
bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbAorICAgICAgICBudWxscHRyLCAvLyBkaWREcmF3Cisg
ICAgICAgIG51bGxwdHIsIC8vIHBhZ2VEaWRTY3JvbGwKKyAgICAgICAgbnVsbHB0ciwgLy8gZXhj
ZWVkZWREYXRhYmFzZVF1b3RhCisgICAgICAgIG51bGxwdHIsIC8vIHJ1bk9wZW5QYW5lbAorICAg
ICAgICBudWxscHRyLCAvLyBkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1
ZXN0CisgICAgICAgIG51bGxwdHIsIC8vIGhlYWRlckhlaWdodAorICAgICAgICBudWxscHRyLCAv
LyBmb290ZXJIZWlnaHQKKyAgICAgICAgbnVsbHB0ciwgLy8gZHJhd0hlYWRlcgorICAgICAgICBu
dWxscHRyLCAvLyBkcmF3Rm9vdGVyCisgICAgICAgIG51bGxwdHIsIC8vIHByaW50RnJhbWUKKyAg
ICAgICAgbnVsbHB0ciwgLy8gcnVuTW9kYWwKKyAgICAgICAgbnVsbHB0ciwgLy8gVXNlZCB0byBi
ZSBkaWRDb21wbGV0ZVJ1YmJlckJhbmRGb3JNYWluRnJhbWUKKyAgICAgICAgbnVsbHB0ciwgLy8g
c2F2ZURhdGFUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRlcgorICAgICAgICBudWxscHRyLCAvLyBzaG91
bGRJbnRlcnJ1cHRKYXZhU2NyaXB0X3VuYXZhaWxhYmxlCisgICAgICAgIG51bGxwdHIsIC8vIGNy
ZWF0ZU5ld1BhZ2VfZGVwcmVjYXRlZEZvclVzZVdpdGhWMQorICAgICAgICBudWxscHRyLCAvLyBt
b3VzZURpZE1vdmVPdmVyRWxlbWVudAorICAgICAgICBudWxscHRyLCAvLyBkZWNpZGVQb2xpY3lG
b3JOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdAorICAgICAgICBudWxscHRyLCAvLyB1bmF2
YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWRfZGVwcmVjYXRlZEZvclVzZVdpdGhWMQorICAgICAg
ICBudWxscHRyLCAvLyBzaG93Q29sb3JQaWNrZXIKKyAgICAgICAgbnVsbHB0ciwgLy8gaGlkZUNv
bG9yUGlja2VyCisgICAgICAgIG51bGxwdHIsIC8vIHVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xp
Y2tlZAorICAgICAgICBudWxscHRyLCAvLyBwaW5uZWRTdGF0ZURpZENoYW5nZQorICAgICAgICBu
dWxscHRyLCAvLyBVc2VkIHRvIGJlIGRpZEJlZ2luVHJhY2tpbmdQb3RlbnRpYWxMb25nTW91c2VQ
cmVzcworICAgICAgICBudWxscHRyLCAvLyBVc2VkIHRvIGJlIGRpZFJlY29nbml6ZUxvbmdNb3Vz
ZVByZXNzCisgICAgICAgIG51bGxwdHIsIC8vIFVzZWQgdG8gYmUgZGlkQ2FuY2VsVHJhY2tpbmdQ
b3RlbnRpYWxMb25nTW91c2VQcmVzcworICAgICAgICBudWxscHRyLCAvLyBpc1BsYXlpbmdBdWRp
b0RpZENoYW5nZQorICAgICAgICBudWxscHRyLCAvLyBkZWNpZGVQb2xpY3lGb3JVc2VyTWVkaWFQ
ZXJtaXNzaW9uUmVxdWVzdAorICAgICAgICBudWxscHRyLCAvLyBkaWRDbGlja0F1dG9GaWxsQnV0
dG9uCisgICAgICAgIG51bGxwdHIsIC8vIHJ1bkphdmFTY3JpcHRBbGVydF9kZXByZWNhdGVkRm9y
VXNlV2l0aFY1CisgICAgICAgIG51bGxwdHIsIC8vIHJ1bkphdmFTY3JpcHRDb25maXJtX2RlcHJl
Y2F0ZWRGb3JVc2VXaXRoVjUKKyAgICAgICAgbnVsbHB0ciwgLy8gcnVuSmF2YVNjcmlwdFByb21w
dF9kZXByZWNhdGVkRm9yVXNlV2l0aFY1CisgICAgICAgIG51bGxwdHIsIC8vIG1lZGlhU2Vzc2lv
bk1ldGFkYXRhRGlkQ2hhbmdlCisgICAgICAgIC8vIGNyZWF0ZU5ld1BhZ2UKKyAgICAgICAgW10o
V0tQYWdlUmVmIHBhZ2UsIFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYgY29uZmlndXJhdGlvbiwgV0tO
YXZpZ2F0aW9uQWN0aW9uUmVmLCBXS1dpbmRvd0ZlYXR1cmVzUmVmLCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKSAtPldLUGFnZVJlZiB7CisgICAgICAgICAgICByZXR1cm4gdG9XZWJWaWV3KGNsaWVu
dEluZm8pLT5jcmVhdGVOZXdQYWdlKHBhZ2UsIGNvbmZpZ3VyYXRpb24pOworICAgICAgICB9LAor
ICAgICAgICBudWxscHRyLCAvLyBydW5KYXZhU2NyaXB0QWxlcnQKKyAgICAgICAgbnVsbHB0ciwg
Ly8gcnVuSmF2YVNjcmlwdENvbmZpcm0KKyAgICAgICAgbnVsbHB0ciwgLy8gcnVuSmF2YVNjcmlw
dFByb21wdAorICAgICAgICBudWxscHRyIC8vIGNoZWNrVXNlck1lZGlhUGVybWlzc2lvbkZvck9y
aWdpbgorICAgIH07CisgICAgV0tQYWdlU2V0UGFnZVVJQ2xpZW50KHBhZ2UoKSwgJnVpQ2xpZW50
LmJhc2UpOworfQorCitXZWJWaWV3V2luZG93Ojp+V2ViVmlld1dpbmRvdygpCit7CisgICAgbV9j
b250ZXh0LT5yZW1vdmVXaW5kb3codGhpcyk7CisgICAgV0tQYWdlQ2xvc2UocGFnZSgpKTsKK30K
KworV0tQYWdlUmVmIFdlYlZpZXdXaW5kb3c6OnBhZ2UoKQoreworICAgIHJldHVybiBXS1ZpZXdH
ZXRQYWdlKG1fdmlldy5nZXQoKSk7Cit9CisKK3ZvaWQgV2ViVmlld1dpbmRvdzo6bG9hZFVSTChj
b25zdCBjaGFyKiB1cmwpCit7CisgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHVybFN0ciA9IGFk
b3B0V0soV0tVUkxDcmVhdGVXaXRoVVRGOENTdHJpbmcodXJsKSk7CisgICAgV0tQYWdlTG9hZFVS
TChwYWdlKCksIHVybFN0ci5nZXQoKSk7Cit9CisKK3ZvaWQgV2ViVmlld1dpbmRvdzo6Z29CYWNr
KCkKK3sKKyAgICBXS1BhZ2VHb0JhY2socGFnZSgpKTsKK30KKwordm9pZCBXZWJWaWV3V2luZG93
Ojpnb0ZvcndhcmQoKQoreworICAgIFdLUGFnZUdvRm9yd2FyZChwYWdlKCkpOworfQorCit2b2lk
IFdlYlZpZXdXaW5kb3c6OnJlbG9hZCgpCit7CisgICAgV0tQYWdlUmVsb2FkRnJvbU9yaWdpbihw
YWdlKCkpOworfQorCit2b2lkIFdlYlZpZXdXaW5kb3c6OnRvZ2dsZVpvb21GYWN0b3IoKQorewor
ICAgIGNvbnN0IGludCBtYXhab29tRmFjdG9yID0gMzsKKyAgICBpbnQgbmV4dFpvb21GYWN0b3Ig
PSAoaW50KVdLUGFnZUdldFBhZ2Vab29tRmFjdG9yKHBhZ2UoKSkgKyAxOworICAgIGlmIChuZXh0
Wm9vbUZhY3RvciA+IG1heFpvb21GYWN0b3IpCisgICAgICAgIG5leHRab29tRmFjdG9yID0gMTsK
KworICAgIFdLUGFnZVNldFBhZ2Vab29tRmFjdG9yKHBhZ2UoKSwgbmV4dFpvb21GYWN0b3IpOwor
fQorCit2b2lkIFdlYlZpZXdXaW5kb3c6OnNldFNpemUodG9vbGtpdHRlbjo6SW50U2l6ZSBzaXpl
KQoreworICAgIFdpZGdldDo6c2V0U2l6ZShzaXplKTsKKyAgICBXS1ZpZXdTZXRTaXplKG1fdmll
dy5nZXQoKSwgdG9XS1NpemUoc2l6ZSkpOworCisgICAgc2l6ZV90IHN1cmZhY2VTaXplID0gY2Fp
cm9fZm9ybWF0X3N0cmlkZV9mb3Jfd2lkdGgoQ0FJUk9fRk9STUFUX0FSR0IzMiwgdGhpcy0+bV9z
aXplLncpICogdGhpcy0+bV9zaXplLmg7CisgICAgbV9zdXJmYWNlID0gc3RkOjptYWtlX3VuaXF1
ZTx1bnNpZ25lZCBjaGFyW10+KHN1cmZhY2VTaXplKTsKKyAgICBtZW1zZXQobV9zdXJmYWNlLmdl
dCgpLCAweGZmLCBzdXJmYWNlU2l6ZSk7Cit9CisKK2Jvb2wgV2ViVmlld1dpbmRvdzo6b25LZXlV
cChpbnQzMl90IHZpcnR1YWxLZXlDb2RlKQoreworICAgIHN3aXRjaCAodmlydHVhbEtleUNvZGUp
IHsKKyAgICBjYXNlIFZLX1JFVFVSTjoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2Ug
VktfVFJJQU5HTEU6CisgICAgY2FzZSBWS19TUVVBUkU6CisgICAgY2FzZSBWS19PUFRJT05TOgor
ICAgIGNhc2UgVktfTDE6CisgICAgY2FzZSBWS19SMToKKyAgICBjYXNlIFZLX0wyOgorICAgIGNh
c2UgVktfUjI6CisgICAgY2FzZSBWS19MMzoKKyAgICBjYXNlIFZLX1IzOgorICAgICAgICAvLyBJ
Z25vcmUgdGhlc2Uga2V5IGNvZGUuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICBXS1BhZ2VIYW5kbGVLZXlib2FyZEV2ZW50KHBhZ2UoKSwgV0tLZXlib2FyZEV2ZW50TWFrZShr
V0tFdmVudEtleVVwLCBrV0tJbnB1dFR5cGVOb3JtYWwsICIiLCAwLCBrZXlJZGVudGlmaWVyRm9y
S2V5Q29kZSh2aXJ0dWFsS2V5Q29kZSksIHZpcnR1YWxLZXlDb2RlLCAtMSwgMCwgMCkpOworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIFdlYlZpZXdXaW5kb3c6Om9uS2V5RG93bihpbnQzMl90
IHZpcnR1YWxLZXlDb2RlKQoreworICAgIHN3aXRjaCAodmlydHVhbEtleUNvZGUpIHsKKyAgICBj
YXNlIFZLX1JFVFVSTjoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgVktfVFJJQU5H
TEU6CisgICAgY2FzZSBWS19TUVVBUkU6CisgICAgY2FzZSBWS19PUFRJT05TOgorICAgIGNhc2Ug
VktfTDE6CisgICAgY2FzZSBWS19SMToKKyAgICBjYXNlIFZLX0wyOgorICAgIGNhc2UgVktfUjI6
CisgICAgY2FzZSBWS19MMzoKKyAgICBjYXNlIFZLX1IzOgorICAgICAgICAvLyBJZ25vcmUgdGhl
c2Uga2V5IGNvZGUuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgV0tQYWdlSGFu
ZGxlS2V5Ym9hcmRFdmVudChwYWdlKCksIFdLS2V5Ym9hcmRFdmVudE1ha2Uoa1dLRXZlbnRLZXlE
b3duLCBrV0tJbnB1dFR5cGVOb3JtYWwsICIiLCAwLCBrZXlJZGVudGlmaWVyRm9yS2V5Q29kZSh2
aXJ0dWFsS2V5Q29kZSksIHZpcnR1YWxLZXlDb2RlLCAtMSwgMCwgMCkpOworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIFdlYlZpZXdXaW5kb3c6Om9uTW91c2VNb3ZlKHRvb2xraXR0ZW46Oklu
dFBvaW50IHBvaW50KQoreworICAgIHBvaW50ID0gZ2xvYmFsVG9DbGllbnRQb3NpdGlvbihwb2lu
dCk7CisgICAgV0tQYWdlSGFuZGxlTW91c2VFdmVudChwYWdlKCksIFdLTW91c2VFdmVudE1ha2Uo
a1dLRXZlbnRNb3VzZU1vdmUsIGtXS0V2ZW50TW91c2VCdXR0b25Ob0J1dHRvbiwgV0tQb2ludE1h
a2UocG9pbnQueCwgcG9pbnQueSksIDAsIDApKTsKKyAgICBzZXRGb2N1c2VkKCk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViVmlld1dpbmRvdzo6b25Nb3VzZURvd24odG9vbGtpdHRl
bjo6SW50UG9pbnQgcG9pbnQpCit7CisgICAgcG9pbnQgPSBnbG9iYWxUb0NsaWVudFBvc2l0aW9u
KHBvaW50KTsKKworICAgIFdLUGFnZUhhbmRsZU1vdXNlRXZlbnQocGFnZSgpLCBXS01vdXNlRXZl
bnRNYWtlKGtXS0V2ZW50TW91c2VEb3duLCBrV0tFdmVudE1vdXNlQnV0dG9uTGVmdEJ1dHRvbiwg
V0tQb2ludE1ha2UocG9pbnQueCwgcG9pbnQueSksIDAsIDApKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBXZWJWaWV3V2luZG93Ojpvbk1vdXNlVXAodG9vbGtpdHRlbjo6SW50UG9pbnQg
cG9pbnQpCit7CisgICAgcG9pbnQgPSBnbG9iYWxUb0NsaWVudFBvc2l0aW9uKHBvaW50KTsKKyAg
ICBXS1BhZ2VIYW5kbGVNb3VzZUV2ZW50KHBhZ2UoKSwgV0tNb3VzZUV2ZW50TWFrZShrV0tFdmVu
dE1vdXNlVXAsIGtXS0V2ZW50TW91c2VCdXR0b25MZWZ0QnV0dG9uLCBXS1BvaW50TWFrZShwb2lu
dC54LCBwb2ludC55KSwgMCwgMCkpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYlZp
ZXdXaW5kb3c6Om9uV2hlZWxNb3ZlKHRvb2xraXR0ZW46OkludFBvaW50IHBvaW50LCB0b29sa2l0
dGVuOjpJbnRQb2ludCB3aGVlbFRpY2tzKQoreworICAgIHBvaW50ID0gZ2xvYmFsVG9DbGllbnRQ
b3NpdGlvbihwb2ludCk7CisKKyAgICBpbnQgd2hlZWxUaWNrc1ggPSB3aGVlbFRpY2tzLng7Cisg
ICAgaW50IHdoZWVsVGlja3NZID0gd2hlZWxUaWNrcy55OworICAgIGlmICh3aGVlbFRpY2tzWCB8
fCB3aGVlbFRpY2tzWSkgeworICAgICAgICBpbnQgZGVsdGFYID0gd2hlZWxUaWNrc1ggKiAxMDsK
KyAgICAgICAgaW50IGRlbHRhWSA9IHdoZWVsVGlja3NZICogMTA7CisKKyAgICAgICAgV0tQYWdl
SGFuZGxlV2hlZWxFdmVudChwYWdlKCksIFdLV2hlZWxFdmVudE1ha2Uoa1dLRXZlbnRXaGVlbCwg
V0tQb2ludE1ha2UocG9pbnQueCwgcG9pbnQueSksIFdLU2l6ZU1ha2UoZGVsdGFYLCBkZWx0YVkp
LCBXS1NpemVNYWtlKHdoZWVsVGlja3NYLCB3aGVlbFRpY2tzWSksIDApKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXZWJWaWV3V2lu
ZG93OjpwYWludFNlbGYoSW50UG9pbnQgcG9zaXRpb24pCit7CisgICAgaWYgKCFkaXJ0eVJlY3Rz
KCkuZW1wdHkoKSkgeworICAgICAgICBjYWlyb19zdXJmYWNlX3QqIHdrdmlld1N1cmZhY2UgPSBj
YWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShtX3N1cmZhY2UuZ2V0KCksIENBSVJP
X0ZPUk1BVF9BUkdCMzIsIHRoaXMtPm1fc2l6ZS53LCB0aGlzLT5tX3NpemUuaCwgY2Fpcm9fZm9y
bWF0X3N0cmlkZV9mb3Jfd2lkdGgoQ0FJUk9fRk9STUFUX0FSR0IzMiwgdGhpcy0+bV9zaXplLncp
KTsKKyAgICAgICAgc3RkOjpsaXN0PHRvb2xraXR0ZW46OkludFJlY3Q+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IGRpcnR5UmVjdHMoKS5iZWdpbigpOworICAgICAgICB0b29sa2l0dGVuOjpJbnRSZWN0
IHVuaW9uUmVjdCA9ICppdDsKKyAgICAgICAgaXQrKzsKKyAgICAgICAgd2hpbGUgKGl0ICE9IGRp
cnR5UmVjdHMoKS5lbmQoKSkgeworICAgICAgICAgICAgdW5pb25SZWN0ICs9ICppdDsKKyAgICAg
ICAgICAgIGl0Kys7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVz
KHdrdmlld1N1cmZhY2UpID09IENBSVJPX1NUQVRVU19TVUNDRVNTKSB7CisgICAgICAgICAgICBj
YWlyb190KiBjciA9IGNhaXJvX2NyZWF0ZSh0aGlzLT5zdXJmYWNlKCkpOworICAgICAgICAgICAg
Y2Fpcm9fc2V0X29wZXJhdG9yKGNyLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOworICAgICAgICAg
ICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLCB3a3ZpZXdTdXJmYWNlLCAwLCAwKTsKKyAg
ICAgICAgICAgIGNhaXJvX3JlY3RhbmdsZShjciwgdW5pb25SZWN0LmxlZnQoKSwgdW5pb25SZWN0
LnRvcCgpLCB1bmlvblJlY3Qud2lkdGgoKSwgdW5pb25SZWN0LmhlaWdodCgpKTsKKyAgICAgICAg
ICAgIGNhaXJvX2ZpbGwoY3IpOworICAgICAgICAgICAgY2Fpcm9fZGVzdHJveShjcik7CisgICAg
ICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kod2t2aWV3U3VyZmFjZSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgaWYgKG1fYWN0aXZlKQorICAgICAgICBXaWRnZXQ6OnBhaW50U2VsZihwb3Np
dGlvbik7Cit9CisKK3ZvaWQgV2ViVmlld1dpbmRvdzo6dXBkYXRlU2VsZigpCit7Cit9CisKK3Zv
aWQgV2ViVmlld1dpbmRvdzo6dXBkYXRlU3VyZmFjZSh0b29sa2l0dGVuOjpJbnRSZWN0IGRpcnR5
UmVjdCkKK3sKKyAgICBXS1BhZ2VQYWludChwYWdlKCksIG1fc3VyZmFjZS5nZXQoKSwgV0tTaXpl
TWFrZSh0aGlzLT5tX3NpemUudywgdGhpcy0+bV9zaXplLmgpLCB0b1dLUmVjdChkaXJ0eVJlY3Qp
KTsKKyAgICBtX2RpcnR5UmVjdHMgKz0gZGlydHlSZWN0OworfQorCit2b2lkIFdlYlZpZXdXaW5k
b3c6OnVwZGF0ZVRpdGxlKCkKK3sKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdGl0bGUg
PSBhZG9wdFdLKFdLUGFnZUNvcHlUaXRsZShwYWdlKCkpKTsKKyAgICBtX3RpdGxlID0gdG9VVEY4
U3RyaW5nKHRpdGxlLmdldCgpKTsKKyAgICBpZiAobV9jbGllbnQuZGlkVXBkYXRlVGl0bGUpCisg
ICAgICAgIG1fY2xpZW50LmRpZFVwZGF0ZVRpdGxlKHRoaXMpOworfQorCit2b2lkIFdlYlZpZXdX
aW5kb3c6OnVwZGF0ZVVSTCgpCit7CisgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHVybCA9IGFk
b3B0V0soV0tQYWdlQ29weUFjdGl2ZVVSTChwYWdlKCkpKTsKKyAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gdXJsU3RyID0gYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcodXJsLmdldCgpKSk7Cisg
ICAgbV91cmwgPSB0b1VURjhTdHJpbmcodXJsU3RyLmdldCgpKTsKKyAgICBpZiAobV9jbGllbnQu
ZGlkVXBkYXRlVVJMKQorICAgICAgICBtX2NsaWVudC5kaWRVcGRhdGVVUkwodGhpcyk7Cit9CisK
K3ZvaWQgV2ViVmlld1dpbmRvdzo6dXBkYXRlUHJvZ3Jlc3MoKQoreworICAgIG1fcHJvZ3Jlc3Mg
PSBXS1BhZ2VHZXRFc3RpbWF0ZWRQcm9ncmVzcyhwYWdlKCkpOworICAgIGlmIChtX2NsaWVudC5k
aWRVcGRhdGVQcm9ncmVzcykKKyAgICAgICAgbV9jbGllbnQuZGlkVXBkYXRlUHJvZ3Jlc3ModGhp
cyk7Cit9CisKK3ZvaWQgV2ViVmlld1dpbmRvdzo6c2V0QWN0aXZlKGJvb2wgYWN0aXZlKQorewor
ICAgIGlmIChtX2FjdGl2ZSA9PSBhY3RpdmUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fYWN0
aXZlID0gYWN0aXZlOworfQorCitXS1BhZ2VSZWYgV2ViVmlld1dpbmRvdzo6Y3JlYXRlTmV3UGFn
ZShXS1BhZ2VSZWYsIFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYgY29uZmlndXJhdGlvbikKK3sKKyAg
ICBpZiAobV9jbGllbnQuY3JlYXRlTmV3V2luZG93KSB7CisgICAgICAgIGF1dG8gbmV3V2ViVmll
dyA9IG1fY2xpZW50LmNyZWF0ZU5ld1dpbmRvdyhjb25maWd1cmF0aW9uKTsKKyAgICAgICAgYXV0
byBuZXdQYWdlID0gbmV3V2ViVmlldy0+cGFnZSgpOworICAgICAgICByZXR1cm4gbmV3UGFnZTsK
KyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJv
d3Nlci9wbGF5c3RhdGlvbi9XZWJWaWV3V2luZG93LmggYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5
c3RhdGlvbi9XZWJWaWV3V2luZG93LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2FhOGNlMTA4YjY4YmQzNDNmMWRl
MzFhMDE3ZGRjNzMyZGNiMjA5OQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL01pbmlCcm93c2Vy
L3BsYXlzdGF0aW9uL1dlYlZpZXdXaW5kb3cuaApAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViQ29udGV4dC5oIgorI2luY2x1ZGUg
PFdlYktpdC9XS1JldGFpblB0ci5oPgorI2luY2x1ZGUgPFdlYktpdC9XS1ZpZXcuaD4KKyNpbmNs
dWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8dG9vbGtpdHRlbi9XaWRnZXQuaD4KKworY2xhc3MgV2Vi
Vmlld1dpbmRvdyA6IHB1YmxpYyB0b29sa2l0dGVuOjpXaWRnZXQgeworcHVibGljOgorICAgIHN0
cnVjdCBDbGllbnQgeworICAgICAgICBzdGQ6OmZ1bmN0aW9uPFdlYlZpZXdXaW5kb3cqKFdLUGFn
ZUNvbmZpZ3VyYXRpb25SZWYgY29uZmlndXJhdGlvbik+IGNyZWF0ZU5ld1dpbmRvdzsKKworICAg
ICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoV2ViVmlld1dpbmRvdyopPiBkaWRVcGRhdGVUaXRsZTsK
KyAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKFdlYlZpZXdXaW5kb3cqKT4gZGlkVXBkYXRlVVJM
OworICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoV2ViVmlld1dpbmRvdyopPiBkaWRVcGRhdGVQ
cm9ncmVzczsKKyAgICB9OworCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxXZWJWaWV3V2lu
ZG93PiBjcmVhdGUoQ2xpZW50JiYsIFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYpOworCisgICAgZXhw
bGljaXQgV2ViVmlld1dpbmRvdyhXS1BhZ2VDb25maWd1cmF0aW9uUmVmLCBDbGllbnQmJik7Cisg
ICAgdmlydHVhbCB+V2ViVmlld1dpbmRvdygpOworCisgICAgdm9pZCBsb2FkVVJMKGNvbnN0IGNo
YXIqIHVybCk7CisgICAgdm9pZCBnb0JhY2soKTsKKyAgICB2b2lkIGdvRm9yd2FyZCgpOworICAg
IHZvaWQgcmVsb2FkKCk7CisKKyAgICB2b2lkIHRvZ2dsZVpvb21GYWN0b3IoKTsKKworICAgIHZv
aWQgc2V0U2l6ZSh0b29sa2l0dGVuOjpJbnRTaXplKSBmaW5hbDsKKyAgICBib29sIG9uS2V5VXAo
aW50MzJfdCB2aXJ0dWFsS2V5Q29kZSkgZmluYWw7CisgICAgYm9vbCBvbktleURvd24oaW50MzJf
dCB2aXJ0dWFsS2V5Q29kZSkgZmluYWw7CisgICAgYm9vbCBvbk1vdXNlTW92ZSh0b29sa2l0dGVu
OjpJbnRQb2ludCkgZmluYWw7CisgICAgYm9vbCBvbk1vdXNlVXAodG9vbGtpdHRlbjo6SW50UG9p
bnQpIGZpbmFsOworICAgIGJvb2wgb25Nb3VzZURvd24odG9vbGtpdHRlbjo6SW50UG9pbnQpIGZp
bmFsOworICAgIGJvb2wgb25XaGVlbE1vdmUodG9vbGtpdHRlbjo6SW50UG9pbnQsIHRvb2xraXR0
ZW46OkludFBvaW50KSBmaW5hbDsKKworICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB0aXRsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdGl0bGU7IH0KKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgdXJsKCkgY29u
c3QgeyByZXR1cm4gbV91cmw7IH0KKyAgICBkb3VibGUgcHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVy
biBtX3Byb2dyZXNzOyB9CisKKyAgICB2b2lkIHNldEFjdGl2ZShib29sKTsKKworcHJpdmF0ZToK
KyAgICBXS1BhZ2VSZWYgcGFnZSgpOworCisgICAgdm9pZCBwYWludFNlbGYodG9vbGtpdHRlbjo6
SW50UG9pbnQgcG9zaXRpb24pIG92ZXJyaWRlOworICAgIHZvaWQgdXBkYXRlU2VsZigpIG92ZXJy
aWRlOworICAgIHZvaWQgdXBkYXRlU3VyZmFjZSh0b29sa2l0dGVuOjpJbnRSZWN0KTsKKworICAg
IHZvaWQgdXBkYXRlVGl0bGUoKTsKKyAgICB2b2lkIHVwZGF0ZVVSTCgpOworICAgIHZvaWQgdXBk
YXRlUHJvZ3Jlc3MoKTsKKworICAgIFdLUGFnZVJlZiBjcmVhdGVOZXdQYWdlKFdLUGFnZVJlZiwg
V0tQYWdlQ29uZmlndXJhdGlvblJlZik7CisKKyAgICBXS1JldGFpblB0cjxXS1ZpZXdSZWY+IG1f
dmlldzsKKyAgICBzdGQ6OnNoYXJlZF9wdHI8V2ViQ29udGV4dD4gbV9jb250ZXh0OworICAgIFdL
UmV0YWluUHRyPFdLUHJlZmVyZW5jZXNSZWY+IG1fcHJlZmVyZW5jZXM7CisKKyAgICBDbGllbnQg
bV9jbGllbnQ7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8dW5zaWduZWQgY2hhcltdPiBtX3N1cmZh
Y2U7CisKKyAgICBzdGQ6OnN0cmluZyBtX3RpdGxlOworICAgIHN0ZDo6c3RyaW5nIG1fdXJsOwor
ICAgIGRvdWJsZSBtX3Byb2dyZXNzIHsgMCB9OworCisgICAgYm9vbCBtX2FjdGl2ZSB7IGZhbHNl
IH07Cit9OwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRpb24vbWFpbi5j
cHAgYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9tYWluLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4y
OWY0NWIwMjEyMDZhZmQ5NmY3YzNmOTc4NzY2N2NmMjVkMzZkNDE4Ci0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRpb24vbWFpbi5jcHAKQEAgLTAsMCArMSw5MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1l
bnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiTWFpbldpbmRvdy5oIgorI2luY2x1ZGUgPFdl
YktpdC9XS1J1bkxvb3AuaD4KKyNpbmNsdWRlIDxkbGZjbi5oPgorI2luY2x1ZGUgPHRvb2xraXR0
ZW4vQXBwbGljYXRpb24uaD4KKwordXNpbmcgdG9vbGtpdHRlbjo6V2lkZ2V0OwordXNpbmcgdG9v
bGtpdHRlbjo6QXBwbGljYXRpb247CisKK3N0YXRpYyB2b2lkIGxvYWRMaWJyYXJ5T3JFeGl0KGNv
bnN0IGNoYXIqIG5hbWUpCit7CisgICAgaWYgKCFkbG9wZW4obmFtZSwgUlRMRF9OT1cpKSB7Cisg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGxvYWQgJXMuXG4iLCBuYW1lKTsKKyAg
ICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgIH0KK30KKworX19hdHRyaWJ1dGVfXygoY29u
c3RydWN0b3IoMTEwKSkpCitzdGF0aWMgdm9pZCBpbml0aWFsaXplKCkKK3sKKyAgICBsb2FkTGli
cmFyeU9yRXhpdCgiUG9zaXhXZWJLaXQiKTsKKyAgICBzZXRlbnZfbnAoIldlYkluc3BlY3RvclNl
cnZlclBvcnQiLCAiODY4IiwgMSk7CisKKyAgICBsb2FkTGlicmFyeU9yRXhpdCgibGlicG5nMTYi
KTsKKyAgICBsb2FkTGlicmFyeU9yRXhpdCgibGliaWN1Iik7CisgICAgbG9hZExpYnJhcnlPckV4
aXQoImxpYmZvbnRjb25maWciKTsKKyAgICBsb2FkTGlicmFyeU9yRXhpdCgibGliZnJlZXR5cGUi
KTsKKyAgICBsb2FkTGlicmFyeU9yRXhpdCgibGliaGFyZmJ1enoiKTsKKyAgICBsb2FkTGlicmFy
eU9yRXhpdCgibGliY2Fpcm8iKTsKKyAgICBsb2FkTGlicmFyeU9yRXhpdCgibGliVG9vbEtpdHRl
biIpOyAgICAKKyAgICBsb2FkTGlicmFyeU9yRXhpdCgibGliU2NlTktXZWJLaXRSZXF1aXJlbWVu
dHMiKTsKKyAgICBsb2FkTGlicmFyeU9yRXhpdCgibGliSmF2YVNjcmlwdENvcmUiKTsKKyAgICBs
b2FkTGlicmFyeU9yRXhpdCgibGliV2ViS2l0Iik7Cit9CisKK2NsYXNzIEFwcGxpY2F0aW9uQ2xp
ZW50IDogcHVibGljIEFwcGxpY2F0aW9uOjpDbGllbnQgeworcHVibGljOgorICAgIHZvaWQgcmVx
dWVzdE5leHRGcmFtZSgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBXS1J1bkxvb3BDYWxsT25N
YWluVGhyZWFkKHVwZGF0ZUFwcGxpY2F0aW9uLCB0aGlzKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgc3RhdGljIHZvaWQgdXBkYXRlQXBwbGljYXRpb24odm9pZCopCisgICAgeworICAgICAgICBB
cHBsaWNhdGlvbjo6c2luZ2xldG9uKCkudXBkYXRlKCk7CisgICAgfQorfTsKKworaW50IG1haW4o
aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBXS1J1bkxvb3BJbml0aWFsaXplTWFpbigp
OworCisgICAgQXBwbGljYXRpb25DbGllbnQgYXBwbGljYXRpb25DbGllbnQ7CisgICAgYXV0byYg
YXBwID0gQXBwbGljYXRpb246OnNpbmdsZXRvbigpOworICAgIGFwcC5pbml0KCZhcHBsaWNhdGlv
bkNsaWVudCk7CisKKyAgICBhdXRvIG1haW5XaW5kb3cgPSBzdGQ6Om1ha2VfdW5pcXVlPE1haW5X
aW5kb3c+KCk7CisgICAgbWFpbldpbmRvdy0+c2V0Rm9jdXNlZCgpOworICAgIGFwcC5zZXRSb290
V2lkZ2V0KG1vdmUobWFpbldpbmRvdykpOworCisgICAgLy8gUmVxdWVzdCB0aGUgZmlyc3QgZnJh
bWUgdG8gc3RhcnQgdGhlIGFwcGxpY2F0aW9uIGxvb3AuCisgICAgYXBwbGljYXRpb25DbGllbnQu
cmVxdWVzdE5leHRGcmFtZSgpOworCisgICAgV0tSdW5Mb29wUnVuTWFpbigpOworCisgICAgcmV0
dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9QbGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtlIGIv
VG9vbHMvUGxhdGZvcm1QbGF5U3RhdGlvbi5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNTM1YjlhYmE4YTg1
MTZiMzRlOTVjMWRlZmYwODI0MGNlMjI3YTBkCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvUGxh
dGZvcm1QbGF5U3RhdGlvbi5jbWFrZQpAQCAtMCwwICsxLDMgQEAKK2lmIChFTkFCTEVfV0VCS0lU
KQorICAgIGFkZF9zdWJkaXJlY3RvcnkoTWluaUJyb3dzZXIvcGxheXN0YXRpb24pCitlbmRpZiAo
KQpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IGRhY2NjMWNjZjk4ZDhh
ZTE3ZWQ1YWEwNWIwMDEwYjFmOTdmOTkxNTAuLjNlOWQ4MzNhYTU5ZGVlOTYwMDhiMjE4ZWY2N2Zl
ZDhlMDhmZjQ2Y2YgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAyMS0wMS0wNiAgWW9zaGlha2kgSml0c3VrYXdhICA8eW9zaGlha2kuaml0
c3VrYXdhQHNvbnkuY29tPgorCisgICAgICAgIFtQbGF5U3RhdGlvbl0gQWRkIE1pbmlCcm93c2Vy
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjAzNTkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbmFibGUg
RnVsbHNjcmVlbiBBUEkuCisKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvT3B0aW9uc1BsYXlTdGF0
aW9uLmNtYWtlOgorCiAyMDIwLTExLTI2ICBMYXVybyBNb3VyYSAgPGxtb3VyYUBpZ2FsaWEuY29t
PgogCiAgICAgICAgIFtHVEtdW0dUSzRdIEJ1aWxkaW5nIHdpdGggR09iamVjdC1JbnRyb3NwZWN0
aW9uIHN1cHBvcnQgZG9lcyBub3Qgd29yawo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417362</attachid>
            <date>2021-01-11 00:13:04 -0800</date>
            <delta_ts>2021-01-11 07:11:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220359-20210111171303.patch</filename>
            <type>text/plain</type>
            <size>121785</size>
            <attacher name="Yoshiaki Jitsukawa">yoshiaki.jitsukawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcwMTgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWZmZDE5MWQzZWNhYTQy
ZjE2Njk5MDZlYWU2YWJkM2ZkZDgwYWQ0Ni4uMTEzYWU5MzFkODlhMGIzOWU5YzJkNWU1MjEwNDQ0
OWRlOWM0YjZkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDIxLTAxLTA2ICBZb3No
aWFraSBKaXRzdWthd2EgIDx5b3NoaWFraS5qaXRzdWthd2FAc29ueS5jb20+CisKKyAgICAgICAg
W1BsYXlTdGF0aW9uXSBBZGQgTWluaUJyb3dzZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDM1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCBXaWRnZXRQbGF5U3RhdGlvbiB0byBzdXBwb3J0IGN1
c3RvbSBjdXJzb3IuCisKKyAgICAgICAgTG9hZCBDQSBjZXJ0cyBpbiBDdXJsU1NMSGFuZGxlOjpw
bGF0Zm9ybUluaXRpYWxpemUoKS4KKworICAgICAgICAqIFBsYXRmb3JtUGxheVN0YXRpb24uY21h
a2U6IEFkZCBXaWRnZXRQbGF5U3RhdGlvbi5jcHAKKyAgICAgICAgKiBwbGF0Zm9ybS9XaWRnZXQu
Y3BwOiBBbGxvdyBQbGF5U3RhdGlvbiBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL3BsYXlzdGF0aW9uL0N1cmxTU0xIYW5kbGVQbGF5U3RhdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDdXJsU1NMSGFuZGxlOjpwbGF0Zm9ybUluaXRpYWxpemUp
OiBMb2FkIENBIGNlcnRzLgorICAgICAgICAqIHBsYXRmb3JtL3BsYXlzdGF0aW9uL1dpZGdldFBs
YXlTdGF0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6On5XaWRnZXQp
OgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpzZXRGcmFtZVJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6V2lkZ2V0OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnNldEZvY3Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6c2V0Q3Vyc29yKTogQ2FsbCBob3N0V2luZG93
KCkncyBzZXRDdXJzb3IoKS4KKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6c2hvdyk6CisgICAg
ICAgIChXZWJDb3JlOjpXaWRnZXQ6OmhpZGUpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0Ojpz
ZXRJc1NlbGVjdGVkKToKKwogMjAyMC0xMS0yNiAgTGF1cm8gTW91cmEgIDxsbW91cmFAaWdhbGlh
LmNvbT4KIAogICAgICAgICBbR1RLNF0gQnVpbGQgZml4LiBBZGQgY2FzdCB3aGVuIHRha2luZyBj
b25zdCBkYXRhIG93bmVyc2hpcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBkNTE0M2NjN2U1MGY4MTc3MDNjYTZhY2Zk
OGYwM2YyMDU5MzY2YmM4Li5lZjY1NjRmMTgyMGMyYTY2MTU3N2Y3YjczNWUxYTgyYWMyNmYzOTRh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDIxLTAxLTA2ICBZb3NoaWFraSBKaXRzdWth
d2EgIDx5b3NoaWFraS5qaXRzdWthd2FAc29ueS5jb20+CisKKyAgICAgICAgW1BsYXlTdGF0aW9u
XSBBZGQgTWluaUJyb3dzZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIyMDM1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZCBXS1J1bmxvb3AgQVBJIHRvIGFsbG93IGFuIGV4dGVybmFsIHByb2dyYW0g
dG8gcnVuIFdlYktpdCdzIGdlbmVyaWMgcnVubG9vcC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQy9wbGF5c3RhdGlvbi9XS1J1bkxvb3AuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdLUnVuTG9v
cFJ1bk1haW4pOgorICAgICAgICAoV0tSdW5Mb29wU3RvcE1haW4pOgorICAgICAgICAoV0tSdW5M
b29wQ2FsbE9uTWFpblRocmVhZCk6CisgICAgICAgIChXS1J1bkxvb3BJbml0aWFsaXplTWFpbik6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLUnVuTG9vcC5oOiBBZGRl
ZC4KKworICAgICAgICBBZGQgcHJpdmF0ZSBXS1BhZ2VQYWludCgpIHRvIGRyYXcgY29udGVudHMg
dG8gYml0bWFwLgorICAgICAgICBSZW1vdmUgdW51c2VkIFdLUGFnZVNldFNpemUoKSBpbXBsZW1l
bnRhdGlvbi4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1BhZ2VQ
cml2YXRlUGxheVN0YXRpb24uY3BwOgorICAgICAgICAoZHJhd1BhZ2VCYWNrZ3JvdW5kKToKKyAg
ICAgICAgKFdLUGFnZUhhbmRsZU1vdXNlRXZlbnQpOiBGaXggYnV0dG9uIGNsaWNrIGV2ZW50IGhh
bmRsaW5nLgorICAgICAgICAoV0tQYWdlUGFpbnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Qy9wbGF5c3RhdGlvbi9XS1BhZ2VQcml2YXRlUGxheVN0YXRpb24uaDoKKworICAgICAgICBBZGQg
V0tWaWV3IEFQSSB0byBzZXQgdmlldyBjbGllbnQgYWxvbmcgd2l0aCBmdWxsc2NyZWVuIEFQSSBh
bmQgdmlzaWJpbGl0eSBzdGF0ZSBBUEkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvcGxh
eXN0YXRpb24vV0tWaWV3LmNwcDoKKyAgICAgICAgKFdLVmlld0dldFBhZ2UpOgorICAgICAgICAo
V0tWaWV3U2V0U2l6ZSk6CisgICAgICAgIChXS1ZpZXdTZXRGb2N1cyk6CisgICAgICAgIChXS1Zp
ZXdTZXRBY3RpdmUpOgorICAgICAgICAoV0tWaWV3U2V0VmlzaWJsZSk6CisgICAgICAgIChXS1Zp
ZXdXaWxsRW50ZXJGdWxsU2NyZWVuKToKKyAgICAgICAgKFdLVmlld0RpZEVudGVyRnVsbFNjcmVl
bik6CisgICAgICAgIChXS1ZpZXdXaWxsRXhpdEZ1bGxTY3JlZW4pOgorICAgICAgICAoV0tWaWV3
RGlkRXhpdEZ1bGxTY3JlZW4pOgorICAgICAgICAoV0tWaWV3UmVxdWVzdEV4aXRGdWxsU2NyZWVu
KToKKyAgICAgICAgKFdLVmlld0lzRnVsbFNjcmVlbik6CisgICAgICAgIChXS1ZpZXdTZXRWaWV3
Q2xpZW50KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tWaWV3Lmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLVmlld0NsaWVudC5oOiBB
ZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3BsYXlzdGF0aW9uL0FQSVZpZXdDbGllbnQu
aDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL3BsYXlzdGF0aW9uL1BhZ2VDbGllbnRJbXBs
LmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvcGxheXN0YXRpb24vUGFnZUNsaWVudEltcGwuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvcGxheXN0YXRpb24vUGxheVN0YXRpb25XZWJWaWV3LmNwcDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvcGxheXN0YXRpb24vUGxheVN0YXRpb25XZWJWaWV3Lmg6CisK
KyAgICAgICAgQWxsb3cgcmVuZGVyaW5nIHdpdGhvdXQgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcu
CisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2U6OnVwZGF0ZVByZWZlcmVuY2VzKToKKworICAgICAgICAqIFBsYXRmb3Jt
UGxheVN0YXRpb24uY21ha2U6IEFkZCByZWxldmFudCBzb3VyY2VzIGFuZCBpbmNsdWRlIGRpcmVj
dG9yaWVzLgorCiAyMDIwLTExLTI3ICBZb3NoaWFraSBKaXRzdWthd2EgIDx5b3NoaWFraS5qaXRz
dWthd2FAc29ueS5jb20+CiAKICAgICAgICAgW1BsYXlTdGF0aW9uXSBEZWZpbmUgcGxhdGZvcm0g
YXJndW1lbnQgY29kZXJzIGZvciBGb250CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybVBsYXlTdGF0aW9uLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1QbGF5U3RhdGlv
bi5jbWFrZQppbmRleCBkNjc0NWEzYjM4MDFlMjAwMGYxM2UyMjUxZjhmOGUzYTBmMWM2MDk2Li41
OTcyYjdmMGJiNzY2M2EwOTczMTllYWFiNjljZGE2MDY0NTk2YmNhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtUGxheVN0YXRpb24uY21ha2UKQEAgLTYwLDYgKzYwLDcgQEAgbGlzdChBUFBFTkQg
V2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vcGxheXN0YXRpb24vUGxhdGZvcm1TY3JlZW5Q
bGF5U3RhdGlvbi5jcHAKICAgICBwbGF0Zm9ybS9wbGF5c3RhdGlvbi9TY3JvbGxiYXJUaGVtZVBs
YXlTdGF0aW9uLmNwcAogICAgIHBsYXRmb3JtL3BsYXlzdGF0aW9uL1VzZXJBZ2VudFBsYXlTdGF0
aW9uLmNwcAorICAgIHBsYXRmb3JtL3BsYXlzdGF0aW9uL1dpZGdldFBsYXlTdGF0aW9uLmNwcAog
CiAgICAgcGxhdGZvcm0vcG9zaXgvU2hhcmVkQnVmZmVyUE9TSVguY3BwCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9XaWRnZXQuY3BwCmluZGV4IGE3ZmUzODBmM2ZkMmQ5Y2E2Y2Y4MjhiODJlYTNkNDZkZDUz
N2U5NmMuLjVhNGUxNDljMGY3ZmI5ZGUwODFmY2Y3YzQwMWU0MDI0NDVhZTVmMmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vV2lkZ2V0LmNwcApAQCAtMjcxLDcgKzI3MSw3IEBAIEZsb2F0UG9pbnQgV2lk
Z2V0Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KGNvbnN0IEZsb2F0UG9pbnQmIHBhcmVudFBv
aW50KSBjb25zCiAgICAgcmV0dXJuIGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcoSW50UG9pbnQo
cGFyZW50UG9pbnQpKTsKIH0KIAotI2lmICFQTEFURk9STShDT0NPQSkgJiYgIVBMQVRGT1JNKEdU
SykgJiYgIVBMQVRGT1JNKFdJTikKKyNpZiAhUExBVEZPUk0oQ09DT0EpICYmICFQTEFURk9STShH
VEspICYmICFQTEFURk9STShXSU4pICYmICFQTEFURk9STShQTEFZU1RBVElPTikKIAogV2lkZ2V0
Ojp+V2lkZ2V0KCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvcGxheXN0YXRpb24vQ3VybFNTTEhhbmRsZVBsYXlTdGF0aW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvcGxheXN0YXRpb24vQ3VybFNTTEhhbmRsZVBsYXlTdGF0aW9u
LmNwcAppbmRleCAzZTFlMjg3NTBjMGY4NzVjZTRhZjE3Y2IzYzIxMGVhY2U3ZjRiMWMxLi4xNjcz
MWU5OTA4ZGQyZThmMmMxOTY0NjI1YmY3MjQ4ZDdjNmJjZWI4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3BsYXlzdGF0aW9uL0N1cmxTU0xIYW5kbGVQbGF5U3Rh
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9wbGF5c3RhdGlv
bi9DdXJsU1NMSGFuZGxlUGxheVN0YXRpb24uY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxOCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICog
Q29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDIyICsyNiwyNCBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkN1cmxTU0xIYW5kbGUuaCIKIAorI2luY2x1ZGUgPENl
cnRpZmljYXRlU3RvcmUvQ2VydGlmaWNhdGVTdG9yZS5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXN0YXRpYyBTdHJpbmcgZ2V0Q0FDZXJ0UGF0aEVudigpCit2b2lkIEN1cmxTU0xIYW5kbGU6
OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiB7Ci0gICAgY2hhciogZW52UGF0aCA9IGdldGVudigiQ1VS
TF9DQV9CVU5ETEVfUEFUSCIpOwotICAgIGlmIChlbnZQYXRoKQotICAgICAgICByZXR1cm4geyBl
bnZQYXRoIH07CisgICAgYXV0byBjZXJ0aWZpY2F0ZURhdGEgPSBDZXJ0aWZpY2F0ZURhdGE6OmNy
ZWF0ZSgpOworICAgIENlcnRpZmljYXRlU3RvcmU6OmdldFRydXN0ZWRSb290Q0EoKmNlcnRpZmlj
YXRlRGF0YSk7CiAKLSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLX0KKyAgICBDZXJ0aWZpY2F0
ZUluZm86OkNlcnRpZmljYXRlIGNhQ2VydERhdGE7CisgICAgY2FDZXJ0RGF0YS5hcHBlbmQoY2Vy
dGlmaWNhdGVEYXRhLT5kYXRhKCksIGNlcnRpZmljYXRlRGF0YS0+c2l6ZSgpKTsKKyAgICBpZiAo
Y2VydGlmaWNhdGVEYXRhLT5zaXplKCkpCisgICAgICAgIHNldENBQ2VydERhdGEoV1RGTW92ZShj
YUNlcnREYXRhKSk7CiAKLXZvaWQgQ3VybFNTTEhhbmRsZTo6cGxhdGZvcm1Jbml0aWFsaXplKCkK
LXsKLSAgICBhdXRvIGNhQ2VydFBhdGggPSBnZXRDQUNlcnRQYXRoRW52KCk7Ci0gICAgaWYgKCFj
YUNlcnRQYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgc2V0Q0FDZXJ0UGF0aChXVEZNb3ZlKGNhQ2Vy
dFBhdGgpKTsKKyAgICBzZXRDaXBoZXJMaXN0KENlcnRpZmljYXRlU3RvcmU6OmNpcGhlclN1aXRl
cygpKTsKKyAgICBzZXRDdXJ2ZXNMaXN0KENlcnRpZmljYXRlU3RvcmU6OnN1cHBvcnRlZEdyb3Vw
cygpKTsKKworICAgIHNldElnbm9yZVNTTEVycm9ycyhDZXJ0aWZpY2F0ZVN0b3JlOjpzaG91bGRJ
Z25vcmVUTFNFcnJvcnMoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3BsYXlzdGF0aW9uL1dpZGdldFBsYXlTdGF0aW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3BsYXlzdGF0aW9uL1dpZGdldFBsYXlTdGF0
aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jNWEyY2EyZTc4MTg4ZDA3ODZlZDRkNmI2ZDNjMmFjNDBkYjI5
ZGFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcGxheXN0YXRp
b24vV2lkZ2V0UGxheVN0YXRpb24uY3BwCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldpZGdldC5oIgorCisjaW5jbHVkZSAi
RnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgorI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV2lkZ2V0Ojp+V2lkZ2V0KCkKK3sK
KyAgICBBU1NFUlQoIXBhcmVudCgpKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IFdpZGdldDo6c2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgbV9mcmFt
ZSA9IHJlY3Q7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXaWRnZXQ6OnBhaW50
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmLCBTZWN1cml0eU9yaWdpblBhaW50UG9s
aWN5LCBFdmVudFJlZ2lvbkNvbnRleHQqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgV2lkZ2V0OjpzZXRGb2N1cyhib29sKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK3ZvaWQgV2lkZ2V0OjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJiBjdXJzb3IpCit7CisgICAg
RnJhbWVWaWV3KiB2aWV3ID0gcm9vdCgpOworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJu
OworICAgIHZpZXctPmhvc3RXaW5kb3coKS0+c2V0Q3Vyc29yKGN1cnNvcik7Cit9CisKK3ZvaWQg
V2lkZ2V0OjpzaG93KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdpZGdl
dDo6aGlkZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBXaWRnZXQ6OnNl
dElzU2VsZWN0ZWQoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtUGxheVN0
YXRpb24uY21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtUGxheVN0YXRpb24uY21ha2UKaW5k
ZXggY2RlODE5ODcxNmQ0MjUyMmNiOTg3N2JhZDk5OGU0YjYwYzhhOWI0Yi4uYzhkYzc0MzMxZDk4
MjQyOTdlZGQ3YzY0Y2M1MzljZWY5ODJjOWM3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1QbGF5
U3RhdGlvbi5jbWFrZQpAQCAtODksNiArODksNyBAQCBsaXN0KEFQUEVORCBXZWJLaXRfU09VUkNF
UwogCiAgICAgVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLQ29udGV4dENvbmZpZ3VyYXRp
b25QbGF5U3RhdGlvbi5jcHAKICAgICBVSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tQYWdl
UHJpdmF0ZVBsYXlTdGF0aW9uLmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9X
S1J1bmxvb3AuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLVmlldy5jcHAK
IAogICAgIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL2NhaXJvL1dlYkF1dG9tYXRpb25TZXNzaW9uQ2Fp
cm8uY3BwCkBAIC0xNDEsNiArMTQyLDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0X0lOQ0xVREVfRElS
RUNUT1JJRVMKICAgICAiJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJL0MvY2Fpcm8iCiAgICAg
IiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0FQSS9DL2N1cmwiCiAgICAgIiR7V0VCS0lUX0RJUn0v
VUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uIgorICAgICIke1dFQktJVF9ESVJ9L1VJUHJvY2Vz
cy9BUEkvcGxheXN0YXRpb24iCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0Nvb3JkaW5h
dGVkR3JhcGhpY3MiCiAgICAgIiR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL3BsYXlzdGF0aW9uIgog
ICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvY3VybCIKQEAgLTE2
Miw3ICsxNjQsOSBAQCBsaXN0KEFQUEVORCBXZWJLaXRfUFVCTElDX0ZSQU1FV09SS19IRUFERVJT
CiAKICAgICBVSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tDb250ZXh0Q29uZmlndXJhdGlv
blBsYXlTdGF0aW9uLmgKICAgICBVSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tQYWdlUHJp
dmF0ZVBsYXlTdGF0aW9uLmgKKyAgICBVSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tSdW5s
b29wLmgKICAgICBVSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tWaWV3LmgKKyAgICBVSVBy
b2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tWaWV3Q2xpZW50LmgKICkKIAogIyBCb3RoIFBBTCBh
bmQgV2ViQ29yZSBhcmUgYnVpbHQgYXMgb2JqZWN0IGxpYnJhcmllcy4gVGhlIFdlYktpdDo6IGlu
dGVyZmFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxheXN0
YXRpb24vV0tQYWdlUHJpdmF0ZVBsYXlTdGF0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLUGFnZVByaXZhdGVQbGF5U3RhdGlvbi5jcHAKaW5kZXgg
ZjcwNjhiNmVkOGE5MTJlZTc4NGVlZDU0OWI1ZjYwMjc3NjdkYjhmOS4uN2E4M2RkZTZhNDkwYmVm
Njg4YTE4NTNmNjU0OWNkZmRkMTM5ODdlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tQYWdlUHJpdmF0ZVBsYXlTdGF0aW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1BhZ2VQcml2YXRl
UGxheVN0YXRpb24uY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAy
MCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICogQ29weXJpZ2h0IChDKSAy
MDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDE2ICsyNiwyNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIldLUGFnZVByaXZhdGVQbGF5U3RhdGlvbi5oIgogCisjaW5jbHVkZSAiRHJhd2lu
Z0FyZWFQcm94eS5oIgorI2luY2x1ZGUgIkRyYXdpbmdBcmVhUHJveHlDb29yZGluYXRlZEdyYXBo
aWNzLmgiCiAjaW5jbHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIk5h
dGl2ZVdlYk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJOYXRpdmVXZWJXaGVlbEV2ZW50LmgiCiAj
aW5jbHVkZSAiV2ViRXZlbnRGYWN0b3J5LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisj
aW5jbHVkZSA8Y2Fpcm8uaD4KICNpbmNsdWRlIDx3cGUvd3BlLmg+CiAKLXZvaWQgV0tQYWdlU2V0
U2l6ZShXS1BhZ2VSZWYgcGFnZVJlZiwgV0tTaXplIHNpemUpCitzdGF0aWMgdm9pZCBkcmF3UGFn
ZUJhY2tncm91bmQoY2Fpcm9fdCogY3R4LCBjb25zdCBPcHRpb25hbDxXZWJDb3JlOjpDb2xvcj4m
IGJhY2tncm91bmRDb2xvciwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKIHsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIGlmICghYmFja2dyb3VuZENvbG9yIHx8IGJhY2tncm91bmRD
b2xvci52YWx1ZSgpLmlzVmlzaWJsZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIFty
LCBnLCBiLCBhXSA9IGJhY2tncm91bmRDb2xvci52YWx1ZSgpLnRvU1JHQkFMb3NzeTx1aW50OF90
PigpOworCisgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKGN0eCwgciwgZywgYiwgYSk7CisgICAg
Y2Fpcm9fcmVjdGFuZ2xlKGN0eCwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJl
Y3QuaGVpZ2h0KCkpOworICAgIGNhaXJvX3NldF9vcGVyYXRvcihjdHgsIENBSVJPX09QRVJBVE9S
X09WRVIpOworICAgIGNhaXJvX2ZpbGwoY3R4KTsKIH0KIAogdm9pZCBXS1BhZ2VIYW5kbGVLZXli
b2FyZEV2ZW50KFdLUGFnZVJlZiBwYWdlUmVmLCBXS0tleWJvYXJkRXZlbnQgZXZlbnQpCkBAIC03
MywxMSArODQsMTYgQEAgdm9pZCBXS1BhZ2VIYW5kbGVNb3VzZUV2ZW50KFdLUGFnZVJlZiBwYWdl
UmVmLCBXS01vdXNlRXZlbnQgZXZlbnQpCiAKICAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHsKICAg
ICBjYXNlIGtXS0V2ZW50TW91c2VEb3duOgorICAgICAgICB3cGVFdmVudC50eXBlID0gd3BlX2lu
cHV0X3BvaW50ZXJfZXZlbnRfdHlwZV9idXR0b247CisgICAgICAgIHdwZUV2ZW50LnN0YXRlID0g
MTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBrV0tFdmVudE1vdXNlVXA6CiAgICAgICAgIHdw
ZUV2ZW50LnR5cGUgPSB3cGVfaW5wdXRfcG9pbnRlcl9ldmVudF90eXBlX2J1dHRvbjsKKyAgICAg
ICAgd3BlRXZlbnQuc3RhdGUgPSAwOwogICAgICAgICBicmVhazsKICAgICBjYXNlIGtXS0V2ZW50
TW91c2VNb3ZlOgogICAgICAgICB3cGVFdmVudC50eXBlID0gd3BlX2lucHV0X3BvaW50ZXJfZXZl
bnRfdHlwZV9tb3Rpb247CisgICAgICAgIHdwZUV2ZW50LnN0YXRlID0gMDsKICAgICAgICAgYnJl
YWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMDQs
NyArMTIwLDYgQEAgdm9pZCBXS1BhZ2VIYW5kbGVNb3VzZUV2ZW50KFdLUGFnZVJlZiBwYWdlUmVm
LCBXS01vdXNlRXZlbnQgZXZlbnQpCiAgICAgd3BlRXZlbnQudGltZSA9IDA7CiAgICAgd3BlRXZl
bnQueCA9IGV2ZW50LnBvc2l0aW9uLng7CiAgICAgd3BlRXZlbnQueSA9IGV2ZW50LnBvc2l0aW9u
Lnk7Ci0gICAgd3BlRXZlbnQuc3RhdGUgPSAwOwogICAgIHdwZUV2ZW50Lm1vZGlmaWVycyA9IDA7
IC8vIFRPRE86IEhhbmRsZSBtb2RpZmllcnMuCiAKICAgICBjb25zdCBmbG9hdCBkZXZpY2VTY2Fs
ZUZhY3RvciA9IDE7CkBAIC0xMzIsMyArMTQ3LDM0IEBAIHZvaWQgV0tQYWdlSGFuZGxlV2hlZWxF
dmVudChXS1BhZ2VSZWYgcGFnZVJlZiwgV0tXaGVlbEV2ZW50IGV2ZW50KQogCiAgICAgV2ViS2l0
Ojp0b0ltcGwocGFnZVJlZiktPmhhbmRsZVdoZWVsRXZlbnQoTmF0aXZlV2ViV2hlZWxFdmVudCgm
d3BlRXZlbnQuYmFzZSwgZGV2aWNlU2NhbGVGYWN0b3IsIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQ
aGFzZU5vbmUsIFdlYldoZWVsRXZlbnQ6OlBoYXNlOjpQaGFzZU5vbmUpKTsKIH0KKwordm9pZCBX
S1BhZ2VQYWludChXS1BhZ2VSZWYgcGFnZVJlZiwgdW5zaWduZWQgY2hhciogc3VyZmFjZURhdGEs
IFdLU2l6ZSB3a1N1cmZhY2VTaXplLCBXS1JlY3Qgd2tQYWludFJlY3QpCit7CisgICAgYXV0byBz
dXJmYWNlU2l6ZSA9IFdlYktpdDo6dG9JbnRTaXplKHdrU3VyZmFjZVNpemUpOworICAgIGF1dG8g
cGFpbnRSZWN0ID0gV2ViS2l0Ojp0b0ludFJlY3Qod2tQYWludFJlY3QpOworICAgIGlmICghc3Vy
ZmFjZURhdGEgfHwgc3VyZmFjZVNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBjb25zdCBjYWlyb19mb3JtYXRfdCBmb3JtYXQgPSBDQUlST19GT1JNQVRfQVJHQjMyOworICAg
IGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zv
cl9kYXRhKHN1cmZhY2VEYXRhLCBmb3JtYXQsIHN1cmZhY2VTaXplLndpZHRoKCksIHN1cmZhY2VT
aXplLmhlaWdodCgpLCBjYWlyb19mb3JtYXRfc3RyaWRlX2Zvcl93aWR0aChmb3JtYXQsIHN1cmZh
Y2VTaXplLndpZHRoKCkpKTsKKyAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZSkg
IT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpCisgICAgICAgIHJldHVybjsKKworICAgIGNhaXJvX3Qq
IGN0eCA9IGNhaXJvX2NyZWF0ZShzdXJmYWNlKTsKKworICAgIGF1dG8gcGFnZSA9IFdlYktpdDo6
dG9JbXBsKHBhZ2VSZWYpOworICAgIGF1dG8mIGJhY2tncm91bmRDb2xvciA9IHBhZ2UtPmJhY2tn
cm91bmRDb2xvcigpOworICAgIHBhZ2UtPmVuZFByaW50aW5nKCk7CisgICAgaWYgKGF1dG8qIGRy
YXdpbmdBcmVhID0gc3RhdGljX2Nhc3Q8V2ViS2l0OjpEcmF3aW5nQXJlYVByb3h5Q29vcmRpbmF0
ZWRHcmFwaGljcyo+KHBhZ2UtPmRyYXdpbmdBcmVhKCkpKSB7CisgICAgICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgcG9ydCBXZWJLaXQxJ3MgcmVjdCBjb2FsZXNjaW5nIGxvZ2ljIGhlcmUuCisgICAg
ICAgIFdlYkNvcmU6OlJlZ2lvbiB1bnBhaW50ZWRSZWdpb247CisgICAgICAgIGRyYXdpbmdBcmVh
LT5wYWludChjdHgsIHBhaW50UmVjdCwgdW5wYWludGVkUmVnaW9uKTsKKworICAgICAgICBmb3Ig
KGNvbnN0IGF1dG8mIHJlY3QgOiB1bnBhaW50ZWRSZWdpb24ucmVjdHMoKSkKKyAgICAgICAgICAg
IGRyYXdQYWdlQmFja2dyb3VuZChjdHgsIGJhY2tncm91bmRDb2xvciwgcmVjdCk7CisgICAgfSBl
bHNlCisgICAgICAgIGRyYXdQYWdlQmFja2dyb3VuZChjdHgsIGJhY2tncm91bmRDb2xvciwgcGFp
bnRSZWN0KTsKKworICAgIGNhaXJvX2Rlc3Ryb3koY3R4KTsKKyAgICBjYWlyb19zdXJmYWNlX2Rl
c3Ryb3koc3VyZmFjZSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9wbGF5c3RhdGlvbi9XS1BhZ2VQcml2YXRlUGxheVN0YXRpb24uaCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLUGFnZVByaXZhdGVQbGF5U3RhdGlvbi5o
CmluZGV4IGQ5ZDYxOGU1ZjM5N2Y0ZDgxYWU2ZDhjZTQyYzk4YzdhZTMyZjhkYWMuLjY3NDkyNDY2
MjllZGQyNmU5YWY5OTU3ZWQ0NWFhNmY2OWVjYzAxMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLUGFnZVByaXZhdGVQbGF5U3RhdGlvbi5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLUGFnZVBy
aXZhdGVQbGF5U3RhdGlvbi5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAyMCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICogQ29weXJpZ2h0IChD
KSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDkgKzMyLDExIEBACiBleHRlcm4gIkMiIHsKICNlbmRp
ZgogCi1XS19FWFBPUlQgdm9pZCBXS1BhZ2VIYW5kbGVLZXlib2FyZEV2ZW50KFdLUGFnZVJlZiBw
YWdlLCBXS0tleWJvYXJkRXZlbnQpOwotV0tfRVhQT1JUIHZvaWQgV0tQYWdlSGFuZGxlTW91c2VF
dmVudChXS1BhZ2VSZWYgcGFnZSwgV0tNb3VzZUV2ZW50KTsKLVdLX0VYUE9SVCB2b2lkIFdLUGFn
ZUhhbmRsZVdoZWVsRXZlbnQoV0tQYWdlUmVmIHBhZ2UsIFdLV2hlZWxFdmVudCk7CitXS19FWFBP
UlQgdm9pZCBXS1BhZ2VIYW5kbGVLZXlib2FyZEV2ZW50KFdLUGFnZVJlZiwgV0tLZXlib2FyZEV2
ZW50KTsKK1dLX0VYUE9SVCB2b2lkIFdLUGFnZUhhbmRsZU1vdXNlRXZlbnQoV0tQYWdlUmVmLCBX
S01vdXNlRXZlbnQpOworV0tfRVhQT1JUIHZvaWQgV0tQYWdlSGFuZGxlV2hlZWxFdmVudChXS1Bh
Z2VSZWYsIFdLV2hlZWxFdmVudCk7CisKK1dLX0VYUE9SVCB2b2lkIFdLUGFnZVBhaW50KFdLUGFn
ZVJlZiwgdW5zaWduZWQgY2hhciogY2Fpcm9TdXJmYWNlQVJHQjMyRGF0YSwgV0tTaXplIHN1cmZh
Y2VTaXplLCBXS1JlY3QgcGFpbnRSZWN0KTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1J1bkxv
b3AuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tSdW5M
b29wLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iMGYzNDBiYWM5ZTRlNGI3Y2FhN2U3ZTM5MDQ0Mzk4OGVlODIz
YTUwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxh
eXN0YXRpb24vV0tSdW5Mb29wLmNwcApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXS1J1bkxvb3AuaCIKKworI2luY2x1ZGUg
IldlYktpdDJJbml0aWFsaXplLmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNs
dWRlIDx3dGYvUnVuTG9vcC5oPgorCit2b2lkIFdLUnVuTG9vcFJ1bk1haW4oKQoreworICAgIFJ1
bkxvb3A6Om1haW4oKS5ydW4oKTsKK30KKwordm9pZCBXS1J1bkxvb3BTdG9wTWFpbigpCit7Cisg
ICAgUnVuTG9vcDo6bWFpbigpLnN0b3AoKTsKK30KKwordm9pZCBXS1J1bkxvb3BDYWxsT25NYWlu
VGhyZWFkKFdLUnVuTG9vcENhbGxiYWNrIGNhbGxiYWNrLCB2b2lkKiB1c2VyRGF0YSkKK3sKKyAg
ICBpZiAoIWNhbGxiYWNrKQorICAgICAgICByZXR1cm47CisKKyAgICBjYWxsT25NYWluVGhyZWFk
KFtjYWxsYmFjaywgdXNlckRhdGFdKCkgeworICAgICAgICBjYWxsYmFjayh1c2VyRGF0YSk7Cisg
ICAgfSk7Cit9CisKK3ZvaWQgV0tSdW5Mb29wSW5pdGlhbGl6ZU1haW4oKQoreworICAgIC8vIEZJ
WE1FOgorICAgIC8vIEluaXRpYWxpemluZyBSdW5Mb29wIGJ5IEluaXRpYWxpemVXZWJLaXQyKCku
CisgICAgLy8gV0tSdW5Mb29wSW5pdGlhbGl6ZU1haW4oKSBzaG91bGQgYmUgcmVuYW1lZCB0byBt
b3JlIHN0cmFpZ2h0Zm9yd2FyZCBBUEkgbmFtZSB0byB3cmFwIEluaXRpYWxpemVXZWJLaXQyKCku
CisgICAgV2ViS2l0OjpJbml0aWFsaXplV2ViS2l0MigpOworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tSdW5Mb29wLmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1J1bkxvb3AuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4wYzVjMGE0M2MwNWE0OTU2ZjViMDg0MGM0NmUwY2I5ZjBiMGI4ZDMxCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tSdW5Mb29w
LmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVy
YWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgPFdlYktpdC9XS0Jhc2UuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMi
IHsKKyNlbmRpZgorCit0eXBlZGVmIHZvaWQoKldLUnVuTG9vcENhbGxiYWNrKSh2b2lkICp1c2Vy
RGF0YSk7CisKK1dLX0VYUE9SVCB2b2lkIFdLUnVuTG9vcFJ1bk1haW4oKTsKK1dLX0VYUE9SVCB2
b2lkIFdLUnVuTG9vcFN0b3BNYWluKCk7CitXS19FWFBPUlQgdm9pZCBXS1J1bkxvb3BDYWxsT25N
YWluVGhyZWFkKFdLUnVuTG9vcENhbGxiYWNrLCB2b2lkKiB1c2VyRGF0YSk7CitXS19FWFBPUlQg
dm9pZCBXS1J1bkxvb3BJbml0aWFsaXplTWFpbigpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30K
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxheXN0
YXRpb24vV0tWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0
aW9uL1dLVmlldy5jcHAKaW5kZXggMWJlNTI5Njg4NWExMjNmODM4OTdjZGE4YTMxZjc4MjEyMzQ2
MzA1ZC4uOWY3ODU5NTNmNDYxNmJjNWY3NTlmNTFlZjZhOGU0NTVmMjI5MjAwZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tWaWV3LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9XS1ZpZXcuY3Bw
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0
aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJh
Y3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI3LDE1ICsyNywxNzQgQEAKICNpbmNsdWRlICJXS1ZpZXcuaCIKIAogI2luY2x1ZGUgIkFQ
SVBhZ2VDb25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSAiQVBJVmlld0NsaWVudC5oIgogI2luY2x1
ZGUgIlBsYXlTdGF0aW9uV2ViVmlldy5oIgogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1
ZGUgIldLU2hhcmVkQVBJQ2FzdC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ3Vyc29yLmg+CisKK25h
bWVzcGFjZSBBUEkgewordGVtcGxhdGU8PiBzdHJ1Y3QgQ2xpZW50VHJhaXRzPFdLVmlld0NsaWVu
dEJhc2U+IHsKKyAgICB0eXBlZGVmIHN0ZDo6dHVwbGU8V0tWaWV3Q2xpZW50VjA+IFZlcnNpb25z
OworfTsKK30KKworV0tDdXJzb3JUeXBlIHRvV0tDdXJzb3JUeXBlKGNvbnN0IFdlYkNvcmU6OkN1
cnNvciYgY3Vyc29yKQoreworICAgIHN3aXRjaCAoY3Vyc29yLnR5cGUoKSkgeworICAgIGNhc2Ug
V2ViQ29yZTo6Q3Vyc29yOjpIYW5kOgorICAgICAgICByZXR1cm4ga1dLQ3Vyc29yVHlwZUhhbmQ7
CisgICAgY2FzZSBXZWJDb3JlOjpDdXJzb3I6Ok5vbmU6CisgICAgICAgIHJldHVybiBrV0tDdXJz
b3JUeXBlTm9uZTsKKyAgICBjYXNlIFdlYkNvcmU6OkN1cnNvcjo6UG9pbnRlcjoKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4ga1dLQ3Vyc29yVHlwZVBvaW50ZXI7CisgICAgfQorfQogCiBX
S1ZpZXdSZWYgV0tWaWV3Q3JlYXRlKFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYgY29uZmlndXJhdGlv
bikKIHsKICAgICByZXR1cm4gV2ViS2l0Ojp0b0FQSShXZWJLaXQ6OlBsYXlTdGF0aW9uV2ViVmll
dzo6Y3JlYXRlKCpXZWJLaXQ6OnRvSW1wbChjb25maWd1cmF0aW9uKSkubGVha1JlZigpKTsKIH0K
IAotV0tQYWdlUmVmIFdLVmlld0dldFBhZ2UoV0tWaWV3UmVmIHZpZXdSZWYpCitXS1BhZ2VSZWYg
V0tWaWV3R2V0UGFnZShXS1ZpZXdSZWYgdmlldykKK3sKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0FQ
SShXZWJLaXQ6OnRvSW1wbCh2aWV3KS0+cGFnZSgpKTsKK30KKwordm9pZCBXS1ZpZXdTZXRTaXpl
KFdLVmlld1JlZiB2aWV3LCBXS1NpemUgdmlld1NpemUpCit7CisgICAgV2ViS2l0Ojp0b0ltcGwo
dmlldyktPnNldFZpZXdTaXplKFdlYktpdDo6dG9JbnRTaXplKHZpZXdTaXplKSk7Cit9CisKK3N0
YXRpYyB2b2lkIHNldFZpZXdBY3Rpdml0eVN0YXRlRmxhZyhXS1ZpZXdSZWYgdmlldywgV2ViQ29y
ZTo6QWN0aXZpdHlTdGF0ZTo6RmxhZyBmbGFnLCBib29sIHNldCkKK3sKKyAgICBhdXRvIHZpZXdT
dGF0ZSA9IFdlYktpdDo6dG9JbXBsKHZpZXcpLT52aWV3U3RhdGUoKTsKKyAgICBpZiAoc2V0KQor
ICAgICAgICB2aWV3U3RhdGUuYWRkKGZsYWcpOworICAgIGVsc2UKKyAgICAgICAgdmlld1N0YXRl
LnJlbW92ZShmbGFnKTsKKyAgICBXZWJLaXQ6OnRvSW1wbCh2aWV3KS0+c2V0Vmlld1N0YXRlKHZp
ZXdTdGF0ZSk7Cit9CisKK3ZvaWQgV0tWaWV3U2V0Rm9jdXMoV0tWaWV3UmVmIHZpZXcsIGJvb2wg
Zm9jdXNlZCkKK3sKKyAgICBzZXRWaWV3QWN0aXZpdHlTdGF0ZUZsYWcodmlldywgV2ViQ29yZTo6
QWN0aXZpdHlTdGF0ZTo6SXNGb2N1c2VkLCBmb2N1c2VkKTsKK30KKwordm9pZCBXS1ZpZXdTZXRB
Y3RpdmUoV0tWaWV3UmVmIHZpZXcsIGJvb2wgYWN0aXZlKQoreworICAgIHNldFZpZXdBY3Rpdml0
eVN0YXRlRmxhZyh2aWV3LCBXZWJDb3JlOjpBY3Rpdml0eVN0YXRlOjpXaW5kb3dJc0FjdGl2ZSwg
YWN0aXZlKTsKK30KKwordm9pZCBXS1ZpZXdTZXRWaXNpYmxlKFdLVmlld1JlZiB2aWV3LCBib29s
IHZpc2libGUpCit7CisgICAgc2V0Vmlld0FjdGl2aXR5U3RhdGVGbGFnKHZpZXcsIFdlYkNvcmU6
OkFjdGl2aXR5U3RhdGU6OklzVmlzaWJsZSwgdmlzaWJsZSk7Cit9CisKK3ZvaWQgV0tWaWV3V2ls
bEVudGVyRnVsbFNjcmVlbihXS1ZpZXdSZWYgdmlldykKIHsKLSAgICByZXR1cm4gV2ViS2l0Ojp0
b0FQSShXZWJLaXQ6OnRvSW1wbCh2aWV3UmVmKS0+cGFnZSgpKTsKKyNpZiBFTkFCTEUoRlVMTFND
UkVFTl9BUEkpCisgICAgV2ViS2l0Ojp0b0ltcGwodmlldyktPndpbGxFbnRlckZ1bGxTY3JlZW4o
KTsKKyNlbmRpZgorfQorCit2b2lkIFdLVmlld0RpZEVudGVyRnVsbFNjcmVlbihXS1ZpZXdSZWYg
dmlldykKK3sKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgV2ViS2l0Ojp0b0ltcGwo
dmlldyktPmRpZEVudGVyRnVsbFNjcmVlbigpOworI2VuZGlmCit9CisKK3ZvaWQgV0tWaWV3V2ls
bEV4aXRGdWxsU2NyZWVuKFdLVmlld1JlZiB2aWV3KQoreworI2lmIEVOQUJMRShGVUxMU0NSRUVO
X0FQSSkKKyAgICBXZWJLaXQ6OnRvSW1wbCh2aWV3KS0+d2lsbEV4aXRGdWxsU2NyZWVuKCk7Cisj
ZW5kaWYKK30KKwordm9pZCBXS1ZpZXdEaWRFeGl0RnVsbFNjcmVlbihXS1ZpZXdSZWYgdmlldykK
K3sKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgV2ViS2l0Ojp0b0ltcGwodmlldykt
PmRpZEV4aXRGdWxsU2NyZWVuKCk7CisjZW5kaWYKK30KKwordm9pZCBXS1ZpZXdSZXF1ZXN0RXhp
dEZ1bGxTY3JlZW4oV0tWaWV3UmVmIHZpZXcpCit7CisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJ
KQorICAgIFdlYktpdDo6dG9JbXBsKHZpZXcpLT5yZXF1ZXN0RXhpdEZ1bGxTY3JlZW4oKTsKKyNl
bmRpZgorfQorCitib29sIFdLVmlld0lzRnVsbFNjcmVlbihXS1ZpZXdSZWYgdmlldykKK3sKKyNp
ZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHZpZXcp
LT5pc0Z1bGxTY3JlZW4oKTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisK
K3ZvaWQgV0tWaWV3U2V0Vmlld0NsaWVudChXS1ZpZXdSZWYgdmlldywgY29uc3QgV0tWaWV3Q2xp
ZW50QmFzZSogY2xpZW50KQoreworICAgIGNsYXNzIFZpZXdDbGllbnQgZmluYWwgOiBwdWJsaWMg
QVBJOjpDbGllbnQ8V0tWaWV3Q2xpZW50QmFzZT4sIHB1YmxpYyBBUEk6OlZpZXdDbGllbnQgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgZXhwbGljaXQgVmlld0NsaWVudChjb25zdCBXS1ZpZXdDbGll
bnRCYXNlKiBjbGllbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGluaXRpYWxpemUoY2xpZW50
KTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBzZXRWaWV3TmVlZHNE
aXNwbGF5KFdlYktpdDo6UGxheVN0YXRpb25XZWJWaWV3JiB2aWV3LCBjb25zdCBXZWJDb3JlOjpS
ZWdpb24mIHJlZ2lvbikgZmluYWwKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtX2NsaWVu
dC5zZXRWaWV3TmVlZHNEaXNwbGF5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIG1fY2xpZW50LnNldFZpZXdOZWVkc0Rpc3BsYXkoV2ViS2l0Ojp0b0FQSSgmdmlldyksIFdl
YktpdDo6dG9BUEkocmVnaW9uLmJvdW5kcygpKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsK
KyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZW50ZXJGdWxsU2NyZWVuKFdlYktpdDo6UGxheVN0
YXRpb25XZWJWaWV3JiB2aWV3KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1fY2xpZW50
LmVudGVyRnVsbFNjcmVlbikKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBt
X2NsaWVudC5lbnRlckZ1bGxTY3JlZW4oV2ViS2l0Ojp0b0FQSSgmdmlldyksIG1fY2xpZW50LmJh
c2UuY2xpZW50SW5mbyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgZXhpdEZ1
bGxTY3JlZW4oV2ViS2l0OjpQbGF5U3RhdGlvbldlYlZpZXcmIHZpZXcpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmICghbV9jbGllbnQuZXhpdEZ1bGxTY3JlZW4pCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgbV9jbGllbnQuZXhpdEZ1bGxTY3JlZW4oV2ViS2l0Ojp0b0FQ
SSgmdmlldyksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHZvaWQgY2xvc2VGdWxsU2NyZWVuKFdlYktpdDo6UGxheVN0YXRpb25XZWJWaWV3
JiB2aWV3KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1fY2xpZW50LmNsb3NlRnVsbFNj
cmVlbikKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBtX2NsaWVudC5jbG9z
ZUZ1bGxTY3JlZW4oV2ViS2l0Ojp0b0FQSSgmdmlldyksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5m
byk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgYmVnYW5FbnRlckZ1bGxTY3Jl
ZW4oV2ViS2l0OjpQbGF5U3RhdGlvbldlYlZpZXcmIHZpZXcsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIGluaXRpYWxGcmFtZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZmluYWxGcmFtZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5iZWdhbkVudGVyRnVsbFNjcmVlbikK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBtX2NsaWVudC5iZWdhbkVudGVy
RnVsbFNjcmVlbihXZWJLaXQ6OnRvQVBJKCZ2aWV3KSwgV2ViS2l0Ojp0b0FQSShpbml0aWFsRnJh
bWUpLCBXZWJLaXQ6OnRvQVBJKGZpbmFsRnJhbWUpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8p
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGJlZ2FuRXhpdEZ1bGxTY3JlZW4o
V2ViS2l0OjpQbGF5U3RhdGlvbldlYlZpZXcmIHZpZXcsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IGluaXRpYWxGcmFtZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZmluYWxGcmFtZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5iZWdhbkV4aXRGdWxsU2NyZWVuKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIG1fY2xpZW50LmJlZ2FuRXhpdEZ1bGxT
Y3JlZW4oV2ViS2l0Ojp0b0FQSSgmdmlldyksIFdlYktpdDo6dG9BUEkoaW5pdGlhbEZyYW1lKSwg
V2ViS2l0Ojp0b0FQSShmaW5hbEZyYW1lKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHZvaWQgc2V0Q3Vyc29yKFdlYktpdDo6UGxheVN0YXRpb25XZWJW
aWV3JiB2aWV3LCBjb25zdCBXZWJDb3JlOjpDdXJzb3ImIGN1cnNvcikgZmluYWwKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKCFtX2NsaWVudC5zZXRDdXJzb3IpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgbV9jbGllbnQuc2V0Q3Vyc29yKFdlYktpdDo6dG9BUEkoJnZp
ZXcpLCB0b1dLQ3Vyc29yVHlwZShjdXJzb3IpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOwor
ICAgICAgICB9CisgICAgfTsKKworICAgIFdlYktpdDo6dG9JbXBsKHZpZXcpLT5zZXRDbGllbnQo
bWFrZVVuaXF1ZTxWaWV3Q2xpZW50PihjbGllbnQpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9uL1dLVmlldy5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0MvcGxheXN0YXRpb24vV0tWaWV3LmgKaW5kZXggYzVlZTQ0NzMyNWEw
Zjg1ZjA1YmFkMWI2OTI2NTI4YjFlNmU5NjcxMy4uNTA2YzVhZjZiYzdhZWZhOWQ5YTU1MTBlYjhj
N2EwZmVmY2ZhNjkxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Mv
cGxheXN0YXRpb24vV0tWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Mv
cGxheXN0YXRpb24vV0tWaWV3LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsMTQgKzI1LDMwIEBACiAKICNwcmFnbWEgb25jZQog
Ci0jaW5jbHVkZSA8V2ViS2l0L1dLQmFzZS5oPgorI2luY2x1ZGUgPFdlYktpdC9XS1ZpZXdDbGll
bnQuaD4KIAogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKICNlbmRpZgogCiBXS19F
WFBPUlQgV0tWaWV3UmVmIFdLVmlld0NyZWF0ZShXS1BhZ2VDb25maWd1cmF0aW9uUmVmIGNvbmZp
Z3VyYXRpb24pOwotV0tfRVhQT1JUIFdLUGFnZVJlZiBXS1ZpZXdHZXRQYWdlKFdLVmlld1JlZiB2
aWV3KTsKKworV0tfRVhQT1JUIHZvaWQgV0tWaWV3U2V0Vmlld0NsaWVudChXS1ZpZXdSZWYsIGNv
bnN0IFdLVmlld0NsaWVudEJhc2UqKTsKKworV0tfRVhQT1JUIFdLUGFnZVJlZiBXS1ZpZXdHZXRQ
YWdlKFdLVmlld1JlZik7CisKK1dLX0VYUE9SVCB2b2lkIFdLVmlld1NldFNpemUoV0tWaWV3UmVm
LCBXS1NpemUgdmlld1NpemUpOworCitXS19FWFBPUlQgdm9pZCBXS1ZpZXdTZXRGb2N1cyhXS1Zp
ZXdSZWYsIGJvb2wpOworV0tfRVhQT1JUIHZvaWQgV0tWaWV3U2V0QWN0aXZlKFdLVmlld1JlZiwg
Ym9vbCk7CitXS19FWFBPUlQgdm9pZCBXS1ZpZXdTZXRWaXNpYmxlKFdLVmlld1JlZiwgYm9vbCk7
CisKK1dLX0VYUE9SVCB2b2lkIFdLVmlld1dpbGxFbnRlckZ1bGxTY3JlZW4oV0tWaWV3UmVmKTsK
K1dLX0VYUE9SVCB2b2lkIFdLVmlld0RpZEVudGVyRnVsbFNjcmVlbihXS1ZpZXdSZWYpOworV0tf
RVhQT1JUIHZvaWQgV0tWaWV3V2lsbEV4aXRGdWxsU2NyZWVuKFdLVmlld1JlZik7CitXS19FWFBP
UlQgdm9pZCBXS1ZpZXdEaWRFeGl0RnVsbFNjcmVlbihXS1ZpZXdSZWYpOworV0tfRVhQT1JUIHZv
aWQgV0tWaWV3UmVxdWVzdEV4aXRGdWxsU2NyZWVuKFdLVmlld1JlZik7CitXS19FWFBPUlQgYm9v
bCBXS1ZpZXdJc0Z1bGxTY3JlZW4oV0tWaWV3UmVmKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9wbGF5c3RhdGlvbi9X
S1ZpZXdDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL3BsYXlzdGF0aW9u
L1dLVmlld0NsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRiNDUwMjM3OTkwMDg4ZjJmNmQ2ZTk0MTNlMWYz
NDdlOGY3ZDdhOTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9wbGF5c3RhdGlvbi9XS1ZpZXdDbGllbnQuaApAQCAtMCwwICsxLDcwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8V2ViS2l0L1dLQmFzZS5oPgorI2lu
Y2x1ZGUgPFdlYktpdC9XS0dlb21ldHJ5Lmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJu
ICJDIiB7CisjZW5kaWYKKworZW51bSB7CisgICAga1dLQ3Vyc29yVHlwZVBvaW50ZXIgPSAwLAor
ICAgIGtXS0N1cnNvclR5cGVIYW5kID0gMiwKKyAgICBrV0tDdXJzb3JUeXBlTm9uZSA9IDM3LAor
fTsKK3R5cGVkZWYgdWludDMyX3QgV0tDdXJzb3JUeXBlOworCit0eXBlZGVmIHZvaWQoKldLVmll
d1NldFZpZXdOZWVkc0Rpc3BsYXlDYWxsYmFjaykoV0tWaWV3UmVmIHZpZXcsIFdLUmVjdCByZWN0
LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK3R5cGVkZWYgdm9pZCgqV0tWaWV3RW50ZXJGdWxs
U2NyZWVuKShXS1ZpZXdSZWYgdmlldywgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Cit0eXBlZGVm
IHZvaWQoKldLVmlld0V4aXRGdWxsU2NyZWVuKShXS1ZpZXdSZWYgdmlldywgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbyk7Cit0eXBlZGVmIHZvaWQoKldLVmlld0Nsb3NlRnVsbFNjcmVlbikoV0tWaWV3
UmVmIHZpZXcsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwordHlwZWRlZiB2b2lkKCpXS1ZpZXdC
ZWdhbkVudGVyRnVsbFNjcmVlbikoV0tWaWV3UmVmIHZpZXcsIGNvbnN0IFdLUmVjdCBpbml0aWFs
RnJhbWUsIGNvbnN0IFdLUmVjdCBmaW5hbEZyYW1lLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsK
K3R5cGVkZWYgdm9pZCgqV0tWaWV3QmVnYW5FeGl0RnVsbFNjcmVlbikoV0tWaWV3UmVmIHZpZXcs
IGNvbnN0IFdLUmVjdCBpbml0aWFsRnJhbWUsIGNvbnN0IFdLUmVjdCBmaW5hbEZyYW1lLCBjb25z
dCB2b2lkKiBjbGllbnRJbmZvKTsKK3R5cGVkZWYgdm9pZCgqV0tWaWV3U2V0Q3Vyc29yQ2FsbGJh
Y2spKFdLVmlld1JlZiB2aWV3LCBXS0N1cnNvclR5cGUgY3Vyc29yVHlwZSwgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbyk7CisKK3R5cGVkZWYgc3RydWN0IFdLVmlld0NsaWVudEJhc2UgeworICAgIGlu
dCB2ZXJzaW9uOworICAgIGNvbnN0IHZvaWQqIGNsaWVudEluZm87Cit9IFdLVmlld0NsaWVudEJh
c2U7CisKK3R5cGVkZWYgc3RydWN0IFdLVmlld0NsaWVudFYwIHsKKyAgICBXS1ZpZXdDbGllbnRC
YXNlIGJhc2U7CisKKyAgICAvLyB2ZXJzaW9uIDAKKyAgICBXS1ZpZXdTZXRWaWV3TmVlZHNEaXNw
bGF5Q2FsbGJhY2sgc2V0Vmlld05lZWRzRGlzcGxheTsKKyAgICBXS1ZpZXdFbnRlckZ1bGxTY3Jl
ZW4gZW50ZXJGdWxsU2NyZWVuOworICAgIFdLVmlld0V4aXRGdWxsU2NyZWVuIGV4aXRGdWxsU2Ny
ZWVuOworICAgIFdLVmlld0Nsb3NlRnVsbFNjcmVlbiBjbG9zZUZ1bGxTY3JlZW47CisgICAgV0tW
aWV3QmVnYW5FbnRlckZ1bGxTY3JlZW4gYmVnYW5FbnRlckZ1bGxTY3JlZW47CisgICAgV0tWaWV3
QmVnYW5FeGl0RnVsbFNjcmVlbiBiZWdhbkV4aXRGdWxsU2NyZWVuOworICAgIFdLVmlld1NldEN1
cnNvckNhbGxiYWNrIHNldEN1cnNvcjsKK30gV0tWaWV3Q2xpZW50VjA7CisKKyNpZmRlZiBfX2Nw
bHVzcGx1cworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvcGxheXN0YXRpb24vQVBJVmlld0NsaWVudC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL3BsYXlzdGF0aW9uL0FQSVZpZXdDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZDQ4YzM4M2RkZjYx
NmE1NjY0NDgxMmMzYTk5ZmYxYmY1OTE0OTViCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL3BsYXlzdGF0aW9uL0FQSVZpZXdDbGllbnQuaApAQCAtMCwwICsx
LDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0
YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CitjbGFzcyBDdXJzb3I7CitjbGFzcyBJbnRSZWN0OworY2xhc3MgUmVnaW9uOworfQorCitu
YW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFBsYXlTdGF0aW9uV2ViVmlldzsKK30KKworbmFtZXNw
YWNlIEFQSSB7CisKK2NsYXNzIFZpZXdDbGllbnQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIHZpcnR1YWwgflZpZXdDbGllbnQoKSA9IGRlZmF1bHQ7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0Vmlld05lZWRzRGlzcGxheShXZWJLaXQ6OlBsYXlTdGF0aW9uV2Vi
VmlldyYsIGNvbnN0IFdlYkNvcmU6OlJlZ2lvbiYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBlbnRl
ckZ1bGxTY3JlZW4oV2ViS2l0OjpQbGF5U3RhdGlvbldlYlZpZXcmKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgZXhpdEZ1bGxTY3JlZW4oV2ViS2l0OjpQbGF5U3RhdGlvbldlYlZpZXcmKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgY2xvc2VGdWxsU2NyZWVuKFdlYktpdDo6UGxheVN0YXRpb25XZWJWaWV3
JikgeyB9CisgICAgdmlydHVhbCB2b2lkIGJlZ2FuRW50ZXJGdWxsU2NyZWVuKFdlYktpdDo6UGxh
eVN0YXRpb25XZWJWaWV3JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYmVnYW5FeGl0RnVsbFNjcmVlbihXZWJL
aXQ6OlBsYXlTdGF0aW9uV2ViVmlldyYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JikgeyB9CisgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvcihXZWJLaXQ6
OlBsYXlTdGF0aW9uV2ViVmlldyYgdmlldywgY29uc3QgV2ViQ29yZTo6Q3Vyc29yJiBjdXJzb3Ip
IHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgQVBJCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9wbGF5c3RhdGlvbi9QYWdlQ2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9wbGF5c3RhdGlvbi9QYWdlQ2xpZW50SW1wbC5jcHAKaW5kZXggNjRhNGNhNzJm
OTVhZDhhNGNkYmJlNmFkODdiNjdlMGRiMDgyMDg5Yi4uMzk0MWU5ZmIxODZmZTAyYzUxNmMyYzg5
NDc5M2IyOGE0OTA1MjdhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvcGxh
eXN0YXRpb24vUGFnZUNsaWVudEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L3BsYXlzdGF0aW9uL1BhZ2VDbGllbnRJbXBsLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAq
IENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NSw2ICs0NSw3IEBAIHN0ZDo6dW5p
cXVlX3B0cjxEcmF3aW5nQXJlYVByb3h5PiBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlRHJhd2luZ0Fy
ZWFQcm94eShXZWJQcm9jCiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OnNldFZpZXdOZWVkc0Rpc3Bs
YXkoY29uc3QgV2ViQ29yZTo6UmVnaW9uJiByZWdpb24pCiB7CisgICAgbV92aWV3LnNldFZpZXdO
ZWVkc0Rpc3BsYXkocmVnaW9uKTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVxdWVzdFNj
cm9sbChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBzY3JvbGxQb3NpdGlvbiwgY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmIHNjcm9sbE9yaWdpbikKQEAgLTU4LDI4ICs1OSwyNyBAQCBXZWJDb3Jl
OjpGbG9hdFBvaW50IFBhZ2VDbGllbnRJbXBsOjp2aWV3U2Nyb2xsUG9zaXRpb24oKQogCiBXZWJD
b3JlOjpJbnRTaXplIFBhZ2VDbGllbnRJbXBsOjp2aWV3U2l6ZSgpCiB7Ci0gICAgcmV0dXJuIFdl
YkNvcmU6OkludFNpemUgeyB9OworICAgIHJldHVybiBtX3ZpZXcudmlld1NpemUoKTsKIH0KIAog
Ym9vbCBQYWdlQ2xpZW50SW1wbDo6aXNWaWV3V2luZG93QWN0aXZlKCkKIHsKLSAgICByZXR1cm4g
bV92aWV3LmlzQWN0aXZlKCk7CisgICAgcmV0dXJuIG1fdmlldy52aWV3U3RhdGUoKS5jb250YWlu
cyhXZWJDb3JlOjpBY3Rpdml0eVN0YXRlOjpXaW5kb3dJc0FjdGl2ZSk7CiB9CiAKIGJvb2wgUGFn
ZUNsaWVudEltcGw6OmlzVmlld0ZvY3VzZWQoKQogewotICAgIHJldHVybiBtX3ZpZXcuaXNGb2N1
c2VkKCk7CisgICAgcmV0dXJuIG1fdmlldy52aWV3U3RhdGUoKS5jb250YWlucyhXZWJDb3JlOjpB
Y3Rpdml0eVN0YXRlOjpJc0ZvY3VzZWQpOwogfQogCiBib29sIFBhZ2VDbGllbnRJbXBsOjppc1Zp
ZXdWaXNpYmxlKCkKIHsKLSAgICByZXR1cm4gbV92aWV3LmlzVmlzaWJsZSgpOworICAgIHJldHVy
biBtX3ZpZXcudmlld1N0YXRlKCkuY29udGFpbnMoV2ViQ29yZTo6QWN0aXZpdHlTdGF0ZTo6SXNW
aXNpYmxlKTsKIH0KIAogYm9vbCBQYWdlQ2xpZW50SW1wbDo6aXNWaWV3SW5XaW5kb3coKQogewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIG1fdmll
dy52aWV3U3RhdGUoKS5jb250YWlucyhXZWJDb3JlOjpBY3Rpdml0eVN0YXRlOjpJc0luV2luZG93
KTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6cHJvY2Vzc0RpZEV4aXQoKQpAQCAtODksNiAr
ODksNyBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpwcm9jZXNzRGlkRXhpdCgpCiB2b2lkIFBhZ2VD
bGllbnRJbXBsOjpkaWRSZWxhdW5jaFByb2Nlc3MoKQogewogfQorCiB2b2lkIFBhZ2VDbGllbnRJ
bXBsOjpwYWdlQ2xvc2VkKCkKIHsKIH0KQEAgLTExNyw3ICsxMTgsNyBAQCB2b2lkIFBhZ2VDbGll
bnRJbXBsOjpkaWRDaGFuZ2VDb250ZW50U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXpl
KQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29y
JiBjdXJzb3IpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBtX3ZpZXcuc2V0Q3Vyc29y
KGN1cnNvcik7CiB9CiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OnNldEN1cnNvckhpZGRlblVudGls
TW91c2VNb3Zlcyhib29sKQpAQCAtMjEwLDYgKzIxMSwzNiBAQCBXZWJGdWxsU2NyZWVuTWFuYWdl
clByb3h5Q2xpZW50JiBQYWdlQ2xpZW50SW1wbDo6ZnVsbFNjcmVlbk1hbmFnZXJQcm94eUNsaWVu
dCgpCiB7CiAgICAgcmV0dXJuICooV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eUNsaWVudCopdGhp
czsKIH0KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6Y2xvc2VGdWxsU2NyZWVuTWFuYWdlcigpCit7
CisgICAgbV92aWV3LmNsb3NlRnVsbFNjcmVlbk1hbmFnZXIoKTsKK30KKworYm9vbCBQYWdlQ2xp
ZW50SW1wbDo6aXNGdWxsU2NyZWVuKCkKK3sKKyAgICByZXR1cm4gbV92aWV3LmlzRnVsbFNjcmVl
bigpOworfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsOjplbnRlckZ1bGxTY3JlZW4oKQoreworICAg
IG1fdmlldy5lbnRlckZ1bGxTY3JlZW4oKTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZXhp
dEZ1bGxTY3JlZW4oKQoreworICAgIG1fdmlldy5leGl0RnVsbFNjcmVlbigpOworfQorCit2b2lk
IFBhZ2VDbGllbnRJbXBsOjpiZWdhbkVudGVyRnVsbFNjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0JiBpbml0aWFsRnJhbWUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGZpbmFsRnJhbWUpCit7
CisgICAgbV92aWV3LmJlZ2FuRW50ZXJGdWxsU2NyZWVuKGluaXRpYWxGcmFtZSwgZmluYWxGcmFt
ZSk7Cit9CisKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmJlZ2FuRXhpdEZ1bGxTY3JlZW4oY29uc3Qg
V2ViQ29yZTo6SW50UmVjdCYgaW5pdGlhbEZyYW1lLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBm
aW5hbEZyYW1lKQoreworICAgIG1fdmlldy5iZWdhbkV4aXRGdWxsU2NyZWVuKGluaXRpYWxGcmFt
ZSwgZmluYWxGcmFtZSk7Cit9CiAjZW5kaWYKIAogLy8gQ3VzdG9tIHJlcHJlc2VudGF0aW9ucy4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3BsYXlzdGF0aW9uL1BhZ2VDbGll
bnRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9wbGF5c3RhdGlvbi9QYWdlQ2xpZW50
SW1wbC5oCmluZGV4IDM4Yjk3ZWJiNWE0NjYzZDljMDE5MmQwMjYwMDk4YmZkMWIwNzk1YzIuLjVk
NmFiMTQ1Nzg3YjMxOGUxNDM0OTVkZmExNmNkZjIyN2UwYTBhOTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL3BsYXlzdGF0aW9uL1BhZ2VDbGllbnRJbXBsLmgKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvcGxheXN0YXRpb24vUGFnZUNsaWVudEltcGwuaApAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgU29ueSBJbnRlcmFjdGl2ZSBFbnRl
cnRhaW5tZW50IEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVu
dGVydGFpbm1lbnQgSW5jLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwx
MyArMjYsMTYgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiUGFnZUNsaWVudC5oIgorI2lm
IEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyNpbmNsdWRlICJXZWJGdWxsU2NyZWVuTWFuYWdlclBy
b3h5LmgiCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIERyYXdpbmdBcmVh
UHJveHk7CiBjbGFzcyBQbGF5U3RhdGlvbldlYlZpZXc7CiAKLWNsYXNzIFBhZ2VDbGllbnRJbXBs
IDogcHVibGljIFBhZ2VDbGllbnQKK2NsYXNzIFBhZ2VDbGllbnRJbXBsIGZpbmFsIDogcHVibGlj
IFBhZ2VDbGllbnQKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAgICAgLCBwdWJsaWMgV2Vi
RnVsbFNjcmVlbk1hbmFnZXJQcm94eUNsaWVudAogI2VuZGlmCkBAIC00MywxMDMgKzQ2LDExMCBA
QCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgLy8gQ3JlYXRlIGEgbmV3IGRyYXdpbmcgYXJlYSBw
cm94eSBmb3IgdGhlIGdpdmVuIHBhZ2UuCi0gICAgc3RkOjp1bmlxdWVfcHRyPERyYXdpbmdBcmVh
UHJveHk+IGNyZWF0ZURyYXdpbmdBcmVhUHJveHkoV2ViUHJvY2Vzc1Byb3h5JikgZmluYWw7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPERyYXdpbmdBcmVhUHJveHk+IGNyZWF0ZURyYXdpbmdBcmVhUHJv
eHkoV2ViUHJvY2Vzc1Byb3h5Jikgb3ZlcnJpZGU7CiAKICAgICAvLyBUZWxsIHRoZSB2aWV3IHRv
IGludmFsaWRhdGUgdGhlIGdpdmVuIHJlZ2lvbi4gVGhlIHJlZ2lvbiBpcyBpbiB2aWV3IGNvb3Jk
aW5hdGVzLgotICAgIHZvaWQgc2V0Vmlld05lZWRzRGlzcGxheShjb25zdCBXZWJDb3JlOjpSZWdp
b24mKSBmaW5hbDsKKyAgICB2b2lkIHNldFZpZXdOZWVkc0Rpc3BsYXkoY29uc3QgV2ViQ29yZTo6
UmVnaW9uJikgb3ZlcnJpZGU7CiAKICAgICAvLyBUZWxsIHRoZSB2aWV3IHRvIHNjcm9sbCB0byB0
aGUgZ2l2ZW4gcG9zaXRpb24sIGFuZCB3aGV0aGVyIHRoaXMgd2FzIGEgcHJvZ3JhbW1hdGljIHNj
cm9sbC4KLSAgICB2b2lkIHJlcXVlc3RTY3JvbGwoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYg
c2Nyb2xsUG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBzY3JvbGxPcmlnaW4pIGZp
bmFsOworICAgIHZvaWQgcmVxdWVzdFNjcm9sbChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBz
Y3JvbGxQb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHNjcm9sbE9yaWdpbikgb3Zl
cnJpZGU7CiAKICAgICAvLyBSZXR1cm4gdGhlIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uIChub3Qg
bmVjZXNzYXJpbHkgdGhlIHNhbWUgYXMgdGhlIFdlYkNvcmUgc2Nyb2xsIHBvc2l0aW9uLCBiZWNh
dXNlIG9mIHNjYWxpbmcsIGluc2V0cyBldGMuKQotICAgIFdlYkNvcmU6OkZsb2F0UG9pbnQgdmll
d1Njcm9sbFBvc2l0aW9uKCkgZmluYWw7CisgICAgV2ViQ29yZTo6RmxvYXRQb2ludCB2aWV3U2Ny
b2xsUG9zaXRpb24oKSBvdmVycmlkZTsKIAogICAgIC8vIFJldHVybiB0aGUgc2l6ZSBvZiB0aGUg
dmlldyB0aGUgcGFnZSBpcyBhc3NvY2lhdGVkIHdpdGguCi0gICAgV2ViQ29yZTo6SW50U2l6ZSB2
aWV3U2l6ZSgpIGZpbmFsOworICAgIFdlYkNvcmU6OkludFNpemUgdmlld1NpemUoKSBvdmVycmlk
ZTsKIAogICAgIC8vIFJldHVybiB3aGV0aGVyIHRoZSB2aWV3J3MgY29udGFpbmluZyB3aW5kb3cg
aXMgYWN0aXZlLgotICAgIGJvb2wgaXNWaWV3V2luZG93QWN0aXZlKCkgZmluYWw7CisgICAgYm9v
bCBpc1ZpZXdXaW5kb3dBY3RpdmUoKSBvdmVycmlkZTsKIAogICAgIC8vIFJldHVybiB3aGV0aGVy
IHRoZSB2aWV3IGlzIGZvY3VzZWQuCi0gICAgYm9vbCBpc1ZpZXdGb2N1c2VkKCkgZmluYWw7Cisg
ICAgYm9vbCBpc1ZpZXdGb2N1c2VkKCkgb3ZlcnJpZGU7CiAKICAgICAvLyBSZXR1cm4gd2hldGhl
ciB0aGUgdmlldyBpcyB2aXNpYmxlLgotICAgIGJvb2wgaXNWaWV3VmlzaWJsZSgpIGZpbmFsOwor
ICAgIGJvb2wgaXNWaWV3VmlzaWJsZSgpIG92ZXJyaWRlOwogCiAgICAgLy8gUmV0dXJuIHdoZXRo
ZXIgdGhlIHZpZXcgaXMgaW4gYSB3aW5kb3cuCi0gICAgYm9vbCBpc1ZpZXdJbldpbmRvdygpIGZp
bmFsOworICAgIGJvb2wgaXNWaWV3SW5XaW5kb3coKSBvdmVycmlkZTsKIAotICAgIHZvaWQgcHJv
Y2Vzc0RpZEV4aXQoKSBmaW5hbDsKLSAgICB2b2lkIGRpZFJlbGF1bmNoUHJvY2VzcygpIGZpbmFs
OwotICAgIHZvaWQgcGFnZUNsb3NlZCgpIGZpbmFsOworICAgIHZvaWQgcHJvY2Vzc0RpZEV4aXQo
KSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZFJlbGF1bmNoUHJvY2VzcygpIG92ZXJyaWRlOworICAg
IHZvaWQgcGFnZUNsb3NlZCgpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBwcmVmZXJlbmNlc0RpZENo
YW5nZSgpIGZpbmFsOworICAgIHZvaWQgcHJlZmVyZW5jZXNEaWRDaGFuZ2UoKSBvdmVycmlkZTsK
IAotICAgIHZvaWQgdG9vbFRpcENoYW5nZWQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikg
ZmluYWw7CisgICAgdm9pZCB0b29sVGlwQ2hhbmdlZChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJp
bmcmKSBvdmVycmlkZTsKIAotICAgIHZvaWQgZGlkQ29tbWl0TG9hZEZvck1haW5GcmFtZShjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIHVzZUN1c3RvbUNvbnRlbnRQcm92aWRlcikgZmluYWw7
CisgICAgdm9pZCBkaWRDb21taXRMb2FkRm9yTWFpbkZyYW1lKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIGJvb2wgdXNlQ3VzdG9tQ29udGVudFByb3ZpZGVyKSBvdmVycmlkZTsKIAotICAgIHZvaWQg
aGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkmKSBmaW5hbDsKKyAgICB2b2lkIGhh
bmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5Jikgb3ZlcnJpZGU7CiAKLSAgICB2b2lk
IGRpZENoYW5nZUNvbnRlbnRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSBmaW5hbDsKKyAg
ICB2b2lkIGRpZENoYW5nZUNvbnRlbnRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSBvdmVy
cmlkZTsKIAotICAgIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYpIGZpbmFs
OwotICAgIHZvaWQgc2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wpIGZpbmFsOwot
ICAgIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVzKGNvbnN0IFdlYkNvcmU6OlZpZXdw
b3J0QXR0cmlidXRlcyYpIGZpbmFsOworICAgIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6
OkN1cnNvciYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1v
dmVzKGJvb2wpIG92ZXJyaWRlOworICAgIHZvaWQgZGlkQ2hhbmdlVmlld3BvcnRQcm9wZXJ0aWVz
KGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYpIG92ZXJyaWRlOwogCi0gICAgdm9p
ZCByZWdpc3RlckVkaXRDb21tYW5kKFJlZjxXZWJFZGl0Q29tbWFuZFByb3h5PiYmLCBVbmRvT3JS
ZWRvKSBmaW5hbDsKLSAgICB2b2lkIGNsZWFyQWxsRWRpdENvbW1hbmRzKCkgZmluYWw7Ci0gICAg
Ym9vbCBjYW5VbmRvUmVkbyhVbmRvT3JSZWRvKSBmaW5hbDsKLSAgICB2b2lkIGV4ZWN1dGVVbmRv
UmVkbyhVbmRvT3JSZWRvKSBmaW5hbDsKLSAgICB2b2lkIHdoZWVsRXZlbnRXYXNOb3RIYW5kbGVk
QnlXZWJDb3JlKGNvbnN0IE5hdGl2ZVdlYldoZWVsRXZlbnQmKSBmaW5hbDsKKyAgICB2b2lkIHJl
Z2lzdGVyRWRpdENvbW1hbmQoUmVmPFdlYkVkaXRDb21tYW5kUHJveHk+JiYsIFVuZG9PclJlZG8p
IG92ZXJyaWRlOworICAgIHZvaWQgY2xlYXJBbGxFZGl0Q29tbWFuZHMoKSBvdmVycmlkZTsKKyAg
ICBib29sIGNhblVuZG9SZWRvKFVuZG9PclJlZG8pIG92ZXJyaWRlOworICAgIHZvaWQgZXhlY3V0
ZVVuZG9SZWRvKFVuZG9PclJlZG8pIG92ZXJyaWRlOworICAgIHZvaWQgd2hlZWxFdmVudFdhc05v
dEhhbmRsZWRCeVdlYkNvcmUoY29uc3QgTmF0aXZlV2ViV2hlZWxFdmVudCYpIG92ZXJyaWRlOwog
Ci0gICAgV2ViQ29yZTo6RmxvYXRSZWN0IGNvbnZlcnRUb0RldmljZVNwYWNlKGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYpIGZpbmFsOwotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBjb252ZXJ0VG9V
c2VyU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgZmluYWw7Ci0gICAgV2ViQ29yZTo6
SW50UG9pbnQgc2NyZWVuVG9Sb290Vmlldyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIGZpbmFs
OwotICAgIFdlYkNvcmU6OkludFJlY3Qgcm9vdFZpZXdUb1NjcmVlbihjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JikgZmluYWw7Ci0gICAgV2ViQ29yZTo6SW50UG9pbnQgYWNjZXNzaWJpbGl0eVNjcmVl
blRvUm9vdFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBmaW5hbDsKLSAgICBXZWJDb3Jl
OjpJbnRSZWN0IHJvb3RWaWV3VG9BY2Nlc3NpYmlsaXR5U2NyZWVuKGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmKSBmaW5hbDsKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgY29udmVydFRvRGV2aWNlU3Bh
Y2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisgICAgV2ViQ29yZTo6Rmxv
YXRSZWN0IGNvbnZlcnRUb1VzZXJTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVy
cmlkZTsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBzY3JlZW5Ub1Jvb3RWaWV3KGNvbnN0IFdlYkNv
cmU6OkludFBvaW50Jikgb3ZlcnJpZGU7CisgICAgV2ViQ29yZTo6SW50UmVjdCByb290Vmlld1Rv
U2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBvdmVycmlkZTsKKyAgICBXZWJDb3JlOjpJ
bnRQb2ludCBhY2Nlc3NpYmlsaXR5U2NyZWVuVG9Sb290Vmlldyhjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYpIG92ZXJyaWRlOworICAgIFdlYkNvcmU6OkludFJlY3Qgcm9vdFZpZXdUb0FjY2Vzc2li
aWxpdHlTY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdm9p
ZCBkb25lV2l0aEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBib29sIHdh
c0V2ZW50SGFuZGxlZCkgZmluYWw7CisgICAgdm9pZCBkb25lV2l0aEtleUV2ZW50KGNvbnN0IE5h
dGl2ZVdlYktleWJvYXJkRXZlbnQmLCBib29sIHdhc0V2ZW50SGFuZGxlZCkgb3ZlcnJpZGU7CiAK
LSAgICBSZWZQdHI8V2ViUG9wdXBNZW51UHJveHk+IGNyZWF0ZVBvcHVwTWVudVByb3h5KFdlYlBh
Z2VQcm94eSYpIGZpbmFsOworICAgIFJlZlB0cjxXZWJQb3B1cE1lbnVQcm94eT4gY3JlYXRlUG9w
dXBNZW51UHJveHkoV2ViUGFnZVByb3h5Jikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGVudGVyQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpIGZpbmFsOwot
ICAgIHZvaWQgZXhpdEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKCkgZmluYWw7Ci0gICAgdm9p
ZCB1cGRhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0
JikgZmluYWw7CisgICAgdm9pZCBlbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0
IExheWVyVHJlZUNvbnRleHQmKSBvdmVycmlkZTsKKyAgICB2b2lkIGV4aXRBY2NlbGVyYXRlZENv
bXBvc2l0aW5nTW9kZSgpIG92ZXJyaWRlOworICAgIHZvaWQgdXBkYXRlQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpIG92ZXJyaWRlOwogCiAgICAgLy8g
QXV4aWxpYXJ5IENsaWVudCBDcmVhdGlvbgogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAg
ICBXZWJGdWxsU2NyZWVuTWFuYWdlclByb3h5Q2xpZW50JiBmdWxsU2NyZWVuTWFuYWdlclByb3h5
Q2xpZW50KCkgZmluYWw7CisgICAgV2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eUNsaWVudCYgZnVs
bFNjcmVlbk1hbmFnZXJQcm94eUNsaWVudCgpIG92ZXJyaWRlOworCisgICAgdm9pZCBjbG9zZUZ1
bGxTY3JlZW5NYW5hZ2VyKCkgb3ZlcnJpZGU7CisgICAgYm9vbCBpc0Z1bGxTY3JlZW4oKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGVudGVyRnVsbFNjcmVlbigpIG92ZXJyaWRlOworICAgIHZvaWQgZXhp
dEZ1bGxTY3JlZW4oKSBvdmVycmlkZTsKKyAgICB2b2lkIGJlZ2FuRW50ZXJGdWxsU2NyZWVuKGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxGcmFtZSwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgZmluYWxGcmFtZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBiZWdhbkV4aXRGdWxsU2NyZWVuKGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxGcmFtZSwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgZmluYWxGcmFtZSkgb3ZlcnJpZGU7CiAjZW5kaWYKIAogICAgIC8vIEN1c3RvbSByZXByZXNl
bnRhdGlvbnMuCi0gICAgdm9pZCBkaWRGaW5pc2hMb2FkaW5nRGF0YUZvckN1c3RvbUNvbnRlbnRQ
cm92aWRlcihjb25zdCBTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBjb25zdCBJUEM6OkRhdGFS
ZWZlcmVuY2UmKSBmaW5hbDsKKyAgICB2b2lkIGRpZEZpbmlzaExvYWRpbmdEYXRhRm9yQ3VzdG9t
Q29udGVudFByb3ZpZGVyKGNvbnN0IFN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIGNvbnN0IElQ
Qzo6RGF0YVJlZmVyZW5jZSYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBuYXZpZ2F0aW9uR2VzdHVy
ZURpZEJlZ2luKCkgZmluYWw7Ci0gICAgdm9pZCBuYXZpZ2F0aW9uR2VzdHVyZVdpbGxFbmQoYm9v
bCB3aWxsTmF2aWdhdGUsIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mKSBmaW5hbDsKLSAgICB2b2lk
IG5hdmlnYXRpb25HZXN0dXJlRGlkRW5kKGJvb2wgd2lsbE5hdmlnYXRlLCBXZWJCYWNrRm9yd2Fy
ZExpc3RJdGVtJikgZmluYWw7Ci0gICAgdm9pZCBuYXZpZ2F0aW9uR2VzdHVyZURpZEVuZCgpIGZp
bmFsOwotICAgIHZvaWQgd2lsbFJlY29yZE5hdmlnYXRpb25TbmFwc2hvdChXZWJCYWNrRm9yd2Fy
ZExpc3RJdGVtJikgZmluYWw7Ci0gICAgdm9pZCBkaWRSZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNu
YXBzaG90KCkgZmluYWw7CisgICAgdm9pZCBuYXZpZ2F0aW9uR2VzdHVyZURpZEJlZ2luKCkgb3Zl
cnJpZGU7CisgICAgdm9pZCBuYXZpZ2F0aW9uR2VzdHVyZVdpbGxFbmQoYm9vbCB3aWxsTmF2aWdh
dGUsIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mKSBvdmVycmlkZTsKKyAgICB2b2lkIG5hdmlnYXRp
b25HZXN0dXJlRGlkRW5kKGJvb2wgd2lsbE5hdmlnYXRlLCBXZWJCYWNrRm9yd2FyZExpc3RJdGVt
Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBuYXZpZ2F0aW9uR2VzdHVyZURpZEVuZCgpIG92ZXJyaWRl
OworICAgIHZvaWQgd2lsbFJlY29yZE5hdmlnYXRpb25TbmFwc2hvdChXZWJCYWNrRm9yd2FyZExp
c3RJdGVtJikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRSZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNu
YXBzaG90KCkgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxh
eW91dEZvck1haW5GcmFtZSgpIGZpbmFsOwotICAgIHZvaWQgZGlkRmluaXNoTmF2aWdhdGlvbihB
UEk6Ok5hdmlnYXRpb24qKSBmaW5hbDsKLSAgICB2b2lkIGRpZEZhaWxOYXZpZ2F0aW9uKEFQSTo6
TmF2aWdhdGlvbiopIGZpbmFsOwotICAgIHZvaWQgZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbkZv
ck1haW5GcmFtZShTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZSkgZmluYWw7CisgICAgdm9pZCBk
aWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JNYWluRnJhbWUoKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGRpZEZpbmlzaE5hdmlnYXRpb24oQVBJOjpOYXZpZ2F0aW9uKikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBkaWRGYWlsTmF2aWdhdGlvbihBUEk6Ok5hdmlnYXRpb24qKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25Gb3JNYWluRnJhbWUoU2FtZURvY3VtZW50
TmF2aWdhdGlvblR5cGUpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBkaWRDaGFuZ2VCYWNrZ3JvdW5k
Q29sb3IoKSBmaW5hbDsKLSAgICB2b2lkIGlzUGxheWluZ0F1ZGlvV2lsbENoYW5nZSgpIGZpbmFs
OwotICAgIHZvaWQgaXNQbGF5aW5nQXVkaW9EaWRDaGFuZ2UoKSBmaW5hbDsKKyAgICB2b2lkIGRp
ZENoYW5nZUJhY2tncm91bmRDb2xvcigpIG92ZXJyaWRlOworICAgIHZvaWQgaXNQbGF5aW5nQXVk
aW9XaWxsQ2hhbmdlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBpc1BsYXlpbmdBdWRpb0RpZENoYW5n
ZSgpIG92ZXJyaWRlOwogCi0gICAgdm9pZCByZWZWaWV3KCkgZmluYWw7Ci0gICAgdm9pZCBkZXJl
ZlZpZXcoKSBmaW5hbDsKKyAgICB2b2lkIHJlZlZpZXcoKSBvdmVycmlkZTsKKyAgICB2b2lkIGRl
cmVmVmlldygpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBkaWRSZXN0b3JlU2Nyb2xsUG9zaXRpb24o
KSBmaW5hbDsKKyAgICB2b2lkIGRpZFJlc3RvcmVTY3JvbGxQb3NpdGlvbigpIG92ZXJyaWRlOwog
Ci0gICAgV2ViQ29yZTo6VXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbiB1c2VySW50ZXJmYWNl
TGF5b3V0RGlyZWN0aW9uKCkgZmluYWw7CisgICAgV2ViQ29yZTo6VXNlckludGVyZmFjZUxheW91
dERpcmVjdGlvbiB1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uKCkgb3ZlcnJpZGU7CiAKLSAg
ICB2b2lkIHJlcXVlc3RET01QYXN0ZUFjY2Vzcyhjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgY29u
c3QgU3RyaW5nJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpET01QYXN0ZUFjY2Vz
c1Jlc3BvbnNlKT4mJikgZmluYWw7CisgICAgdm9pZCByZXF1ZXN0RE9NUGFzdGVBY2Nlc3MoY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFN0cmluZyYsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoV2ViQ29yZTo6RE9NUGFzdGVBY2Nlc3NSZXNwb25zZSk+JiYpIG92ZXJyaWRlOwogCiAgICAg
UGxheVN0YXRpb25XZWJWaWV3JiBtX3ZpZXc7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvcGxheXN0YXRpb24vUGxheVN0YXRpb25XZWJWaWV3LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL3BsYXlzdGF0aW9uL1BsYXlTdGF0aW9uV2ViVmlldy5jcHAKaW5kZXgg
ZmViMWE3MjI0MjViZjkyYzU5NGNjYWRkMDkwZTZhODNjMWRkNDUxMi4uYTY0NWQyZTA2MzE4MzYy
MDEyOGQ3NDE2MzMxMDkyOTA2NTBjODQ0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvcGxheXN0YXRpb24vUGxheVN0YXRpb25XZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9wbGF5c3RhdGlvbi9QbGF5U3RhdGlvbldlYlZpZXcuY3BwCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBTb255IEludGVyYWN0aXZlIEVudGVy
dGFpbm1lbnQgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50
ZXJ0YWlubWVudCBJbmMuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDYg
KzM5LDcgQEAgUmVmUHRyPFBsYXlTdGF0aW9uV2ViVmlldz4gUGxheVN0YXRpb25XZWJWaWV3Ojpj
cmVhdGUoY29uc3QgQVBJOjpQYWdlQ29uZmlndXJhdGkKIAogUGxheVN0YXRpb25XZWJWaWV3OjpQ
bGF5U3RhdGlvbldlYlZpZXcoY29uc3QgQVBJOjpQYWdlQ29uZmlndXJhdGlvbiYgY29uZikKICAg
ICA6IG1fcGFnZUNsaWVudChtYWtlVW5pcXVlPFBhZ2VDbGllbnRJbXBsPigqdGhpcykpCisgICAg
LCBtX3ZpZXdTdGF0ZUZsYWdzIHsgV2ViQ29yZTo6QWN0aXZpdHlTdGF0ZTo6V2luZG93SXNBY3Rp
dmUsIFdlYkNvcmU6OkFjdGl2aXR5U3RhdGU6OklzRm9jdXNlZCwgV2ViQ29yZTo6QWN0aXZpdHlT
dGF0ZTo6SXNWaXNpYmxlLCBXZWJDb3JlOjpBY3Rpdml0eVN0YXRlOjpJc0luV2luZG93IH0KIHsK
ICAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBjb25mLmNvcHkoKTsKICAgICBhdXRvKiBwb29sID0g
Y29uZmlndXJhdGlvbi0+cHJvY2Vzc1Bvb2woKTsKQEAgLTUxLDE5ICs1MiwxMDQgQEAgUGxheVN0
YXRpb25XZWJWaWV3Ojp+UGxheVN0YXRpb25XZWJWaWV3KCkKIHsKIH0KIAotYm9vbCBQbGF5U3Rh
dGlvbldlYlZpZXc6OmlzQWN0aXZlKCkgY29uc3QKK3ZvaWQgUGxheVN0YXRpb25XZWJWaWV3Ojpz
ZXRDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6Vmlld0NsaWVudD4mJiBjbGllbnQpCiB7Ci0g
ICAgcmV0dXJuIG1fYWN0aXZlOworICAgIGlmICghY2xpZW50KQorICAgICAgICBtX2NsaWVudCA9
IG1ha2VVbmlxdWU8QVBJOjpWaWV3Q2xpZW50PigpOworICAgIGVsc2UKKyAgICAgICAgbV9jbGll
bnQgPSBXVEZNb3ZlKGNsaWVudCk7CiB9CiAKLWJvb2wgUGxheVN0YXRpb25XZWJWaWV3Ojppc0Zv
Y3VzZWQoKSBjb25zdAordm9pZCBQbGF5U3RhdGlvbldlYlZpZXc6OnNldFZpZXdTaXplKFdlYkNv
cmU6OkludFNpemUgdmlld1NpemUpCiB7Ci0gICAgcmV0dXJuIG1fZm9jdXNlZDsKKyAgICBtX3Zp
ZXdTaXplID0gdmlld1NpemU7CiB9CiAKLWJvb2wgUGxheVN0YXRpb25XZWJWaWV3Ojppc1Zpc2li
bGUoKSBjb25zdAordm9pZCBQbGF5U3RhdGlvbldlYlZpZXc6OnNldFZpZXdTdGF0ZShPcHRpb25T
ZXQ8V2ViQ29yZTo6QWN0aXZpdHlTdGF0ZTo6RmxhZz4gZmxhZ3MpCiB7Ci0gICAgcmV0dXJuIG1f
dmlzaWJsZTsKKyAgICBhdXRvIGNoYW5nZWRGbGFncyA9IG1fdmlld1N0YXRlRmxhZ3MgXiBmbGFn
czsKKyAgICBtX3ZpZXdTdGF0ZUZsYWdzID0gZmxhZ3M7CisKKyAgICBpZiAoY2hhbmdlZEZsYWdz
KQorICAgICAgICBtX3BhZ2UtPmFjdGl2aXR5U3RhdGVEaWRDaGFuZ2UoY2hhbmdlZEZsYWdzKTsK
K30KKwordm9pZCBQbGF5U3RhdGlvbldlYlZpZXc6OnNldFZpZXdOZWVkc0Rpc3BsYXkoY29uc3Qg
V2ViQ29yZTo6UmVnaW9uJiByZWdpb24pCit7CisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBt
X2NsaWVudC0+c2V0Vmlld05lZWRzRGlzcGxheSgqdGhpcywgcmVnaW9uKTsKK30KKworI2lmIEVO
QUJMRShGVUxMU0NSRUVOX0FQSSkKK3ZvaWQgUGxheVN0YXRpb25XZWJWaWV3Ojp3aWxsRW50ZXJG
dWxsU2NyZWVuKCkKK3sKKyAgICBtX2lzRnVsbFNjcmVlbiA9IHRydWU7CisgICAgbV9wYWdlLT5m
dWxsU2NyZWVuTWFuYWdlcigpLT53aWxsRW50ZXJGdWxsU2NyZWVuKCk7Cit9CisKK3ZvaWQgUGxh
eVN0YXRpb25XZWJWaWV3OjpkaWRFbnRlckZ1bGxTY3JlZW4oKQoreworICAgIG1fcGFnZS0+ZnVs
bFNjcmVlbk1hbmFnZXIoKS0+ZGlkRW50ZXJGdWxsU2NyZWVuKCk7Cit9CisKK3ZvaWQgUGxheVN0
YXRpb25XZWJWaWV3Ojp3aWxsRXhpdEZ1bGxTY3JlZW4oKQoreworICAgIG1fcGFnZS0+ZnVsbFNj
cmVlbk1hbmFnZXIoKS0+d2lsbEV4aXRGdWxsU2NyZWVuKCk7Cit9CisKK3ZvaWQgUGxheVN0YXRp
b25XZWJWaWV3OjpkaWRFeGl0RnVsbFNjcmVlbigpCit7CisgICAgbV9wYWdlLT5mdWxsU2NyZWVu
TWFuYWdlcigpLT5kaWRFeGl0RnVsbFNjcmVlbigpOworICAgIG1faXNGdWxsU2NyZWVuID0gZmFs
c2U7Cit9CisKK3ZvaWQgUGxheVN0YXRpb25XZWJWaWV3OjpyZXF1ZXN0RXhpdEZ1bGxTY3JlZW4o
KQoreworICAgIGlmIChpc0Z1bGxTY3JlZW4oKSkKKyAgICAgICAgbV9wYWdlLT5mdWxsU2NyZWVu
TWFuYWdlcigpLT5yZXF1ZXN0RXhpdEZ1bGxTY3JlZW4oKTsKK30KKwordm9pZCBQbGF5U3RhdGlv
bldlYlZpZXc6OmNsb3NlRnVsbFNjcmVlbk1hbmFnZXIoKQoreworICAgIGlmIChtX2NsaWVudCAm
JiBpc0Z1bGxTY3JlZW4oKSkKKyAgICAgICAgbV9jbGllbnQtPmNsb3NlRnVsbFNjcmVlbigqdGhp
cyk7CisgICAgbV9pc0Z1bGxTY3JlZW4gPSBmYWxzZTsKK30KKworYm9vbCBQbGF5U3RhdGlvbldl
YlZpZXc6OmlzRnVsbFNjcmVlbigpCit7CisgICAgcmV0dXJuIG1faXNGdWxsU2NyZWVuOworfQor
Cit2b2lkIFBsYXlTdGF0aW9uV2ViVmlldzo6ZW50ZXJGdWxsU2NyZWVuKCkKK3sKKyAgICBpZiAo
bV9jbGllbnQgJiYgIWlzRnVsbFNjcmVlbigpKQorICAgICAgICBtX2NsaWVudC0+ZW50ZXJGdWxs
U2NyZWVuKCp0aGlzKTsKK30KKwordm9pZCBQbGF5U3RhdGlvbldlYlZpZXc6OmV4aXRGdWxsU2Ny
ZWVuKCkKK3sKKyAgICBpZiAobV9jbGllbnQgJiYgaXNGdWxsU2NyZWVuKCkpCisgICAgICAgIG1f
Y2xpZW50LT5leGl0RnVsbFNjcmVlbigqdGhpcyk7Cit9CisKK3ZvaWQgUGxheVN0YXRpb25XZWJW
aWV3OjpiZWdhbkVudGVyRnVsbFNjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBpbml0aWFs
RnJhbWUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGZpbmFsRnJhbWUpCit7CisgICAgaWYgKG1f
Y2xpZW50KQorICAgICAgICBtX2NsaWVudC0+YmVnYW5FbnRlckZ1bGxTY3JlZW4oKnRoaXMsIGlu
aXRpYWxGcmFtZSwgZmluYWxGcmFtZSk7Cit9CisKK3ZvaWQgUGxheVN0YXRpb25XZWJWaWV3Ojpi
ZWdhbkV4aXRGdWxsU2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGluaXRpYWxGcmFtZSwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZmluYWxGcmFtZSkKK3sKKyAgICBpZiAobV9jbGllbnQp
CisgICAgICAgIG1fY2xpZW50LT5iZWdhbkV4aXRGdWxsU2NyZWVuKCp0aGlzLCBpbml0aWFsRnJh
bWUsIGZpbmFsRnJhbWUpOworfQorI2VuZGlmCisKK3ZvaWQgUGxheVN0YXRpb25XZWJWaWV3Ojpz
ZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJiBjdXJzb3IpCit7CisgICAgaWYgKG1fY2xp
ZW50KQorICAgICAgICBtX2NsaWVudC0+c2V0Q3Vyc29yKCp0aGlzLCBjdXJzb3IpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L3BsYXlzdGF0aW9uL1BsYXlTdGF0aW9uV2ViVmlldy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvcGxheXN0YXRpb24vUGxheVN0YXRpb25XZWJWaWV3LmgKaW5kZXggMTc5NTczNjMwZGMzZWU1
MzU0YzEyNTNkZDUwZTMxNjJjYTE3ZDUzMi4uMmVlYWE0MGQ1MWM4YzZhNTMwMzhlNzQ0MGNmYWU5
MzhkODA0MjkzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvcGxheXN0YXRp
b24vUGxheVN0YXRpb25XZWJWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvcGxh
eXN0YXRpb24vUGxheVN0YXRpb25XZWJWaWV3LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDIwIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBv
bmNlCiAKICNpbmNsdWRlICJBUElPYmplY3QuaCIKKyNpbmNsdWRlICJBUElWaWV3Q2xpZW50Lmgi
CiAjaW5jbHVkZSAiUGFnZUNsaWVudEltcGwuaCIKICNpbmNsdWRlICJXS1ZpZXcuaCIKICNpbmNs
dWRlICJXZWJQYWdlUHJveHkuaCIKQEAgLTM4LDIxICszOSw0NSBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIFJlZlB0cjxQbGF5U3RhdGlvbldlYlZpZXc+IGNyZWF0ZShjb25zdCBBUEk6OlBhZ2VDb25m
aWd1cmF0aW9uJik7CiAgICAgdmlydHVhbCB+UGxheVN0YXRpb25XZWJWaWV3KCk7CiAKKyAgICB2
b2lkIHNldENsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJOjpWaWV3Q2xpZW50PiYmKTsKKwogICAg
IFdlYlBhZ2VQcm94eSogcGFnZSgpIHsgcmV0dXJuIG1fcGFnZS5nZXQoKTsgfQogCi0gICAgYm9v
bCBpc0FjdGl2ZSgpIGNvbnN0OwotICAgIGJvb2wgaXNGb2N1c2VkKCkgY29uc3Q7Ci0gICAgYm9v
bCBpc1Zpc2libGUoKSBjb25zdDsKKyAgICB2b2lkIHNldFZpZXdTaXplKFdlYkNvcmU6OkludFNp
emUpOworICAgIFdlYkNvcmU6OkludFNpemUgdmlld1NpemUoKSBjb25zdCB7IHJldHVybiBtX3Zp
ZXdTaXplOyB9CisKKyAgICB2b2lkIHNldFZpZXdTdGF0ZShPcHRpb25TZXQ8V2ViQ29yZTo6QWN0
aXZpdHlTdGF0ZTo6RmxhZz4pOworICAgIE9wdGlvblNldDxXZWJDb3JlOjpBY3Rpdml0eVN0YXRl
OjpGbGFnPiB2aWV3U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3ZpZXdTdGF0ZUZsYWdzOyB9CisK
KyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgdm9pZCB3aWxsRW50ZXJGdWxsU2NyZWVu
KCk7CisgICAgdm9pZCBkaWRFbnRlckZ1bGxTY3JlZW4oKTsKKyAgICB2b2lkIHdpbGxFeGl0RnVs
bFNjcmVlbigpOworICAgIHZvaWQgZGlkRXhpdEZ1bGxTY3JlZW4oKTsKKyAgICB2b2lkIHJlcXVl
c3RFeGl0RnVsbFNjcmVlbigpOworI2VuZGlmCisKKyAgICAvLyBGdW5jdGlvbnMgY2FsbGVkIGJ5
IFBhZ2VDbGllbnRJbXBsCisgICAgdm9pZCBzZXRWaWV3TmVlZHNEaXNwbGF5KGNvbnN0IFdlYkNv
cmU6OlJlZ2lvbiYpOworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICBib29sIGlzRnVs
bFNjcmVlbigpOworICAgIHZvaWQgY2xvc2VGdWxsU2NyZWVuTWFuYWdlcigpOworICAgIHZvaWQg
ZW50ZXJGdWxsU2NyZWVuKCk7CisgICAgdm9pZCBleGl0RnVsbFNjcmVlbigpOworICAgIHZvaWQg
YmVnYW5FbnRlckZ1bGxTY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKTsKKyAgICB2b2lkIGJlZ2FuRXhpdEZ1bGxTY3JlZW4oY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKKyNlbmRpZgorICAgIHZvaWQg
c2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYpOwogCiBwcml2YXRlOgogICAgIFBsYXlT
dGF0aW9uV2ViVmlldyhjb25zdCBBUEk6OlBhZ2VDb25maWd1cmF0aW9uJik7CiAKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8QVBJOjpWaWV3Q2xpZW50PiBtX2NsaWVudDsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8V2ViS2l0OjpQYWdlQ2xpZW50SW1wbD4gbV9wYWdlQ2xpZW50OwogICAgIFJlZlB0cjxXZWJQ
YWdlUHJveHk+IG1fcGFnZTsKKyAgICBPcHRpb25TZXQ8V2ViQ29yZTo6QWN0aXZpdHlTdGF0ZTo6
RmxhZz4gbV92aWV3U3RhdGVGbGFnczsKIAotICAgIGJvb2wgbV9hY3RpdmUgeyBmYWxzZSB9Owot
ICAgIGJvb2wgbV9mb2N1c2VkIHsgZmFsc2UgfTsKLSAgICBib29sIG1fdmlzaWJsZSB7IGZhbHNl
IH07CisgICAgV2ViQ29yZTo6SW50U2l6ZSBtX3ZpZXdTaXplOwogI2lmIEVOQUJMRShGVUxMU0NS
RUVOX0FQSSkKICAgICBib29sIG1faXNGdWxsU2NyZWVuIHsgZmFsc2UgfTsKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCA5NTcwZWMz
YmEwNGFlM2E3MDM4MzQ5NTg4MGQwM2IyMjViZDYxZDJiLi4zMTY1ZTlmZjdiMWUwYzE5M2FhOTNh
ZGIwMDcxOGUwYTFiYmE3ZTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcApAQCAtMzcwNCw3ICszNzA0LDcgQEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVQ
cmVmZXJlbmNlcyhjb25zdCBXZWJQcmVmZXJlbmNlc1N0b3JlJiBzdG9yZSkKIAogICAgIFNldHRp
bmdzJiBzZXR0aW5ncyA9IG1fcGFnZS0+c2V0dGluZ3MoKTsKIAotI2lmICFQTEFURk9STShHVEsp
ICYmICFQTEFURk9STShXSU4pCisjaWYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKFdJTikg
JiYgIVBMQVRGT1JNKFBMQVlTVEFUSU9OKQogICAgIGlmICghc2V0dGluZ3MuYWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0VuYWJsZWQoKSkgewogICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKExh
eWVycywgInVwZGF0ZVByZWZlcmVuY2VzOiBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCBz
ZXR0aW5nIHdhcyBmYWxzZS4gV2ViS2l0IGNhbm5vdCBmdW5jdGlvbiBpbiB0aGlzIG1vZGU7IGNo
YW5naW5nIHNldHRpbmcgdG8gdHJ1ZSIpOwogICAgICAgICBzZXR0aW5ncy5zZXRBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nRW5hYmxlZCh0cnVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9PcHRp
b25zUGxheVN0YXRpb24uY21ha2UgYi9Tb3VyY2UvY21ha2UvT3B0aW9uc1BsYXlTdGF0aW9uLmNt
YWtlCmluZGV4IDdjMjRlNTUxZThjMzk1N2Q3NzlkY2E2YzU2MDkzNjI2MmUzNGExNDkuLmI4MjQ4
NWJlYzZmZWUwMDk1M2QwNmQ2OTM2OWJiY2ZmNTgwNTM3YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9j
bWFrZS9PcHRpb25zUGxheVN0YXRpb24uY21ha2UKKysrIGIvU291cmNlL2NtYWtlL09wdGlvbnNQ
bGF5U3RhdGlvbi5jbWFrZQpAQCAtMzMsNiArMzMsNyBAQCBXRUJLSVRfT1BUSU9OX0RFRkFVTFRf
UE9SVF9WQUxVRShFTkFCTEVfREZHX0pJVCBQUklWQVRFIE9GRikKICMgRW5hYmxlZCBmZWF0dXJl
cwogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0FDQ0VTU0lCSUxJVFkg
UFJJVkFURSBPRkYpCiBXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxVRShFTkFCTEVfQVNZ
TkNfU0NST0xMSU5HIFBSSVZBVEUgT04pCitXRUJLSVRfT1BUSU9OX0RFRkFVTFRfUE9SVF9WQUxV
RShFTkFCTEVfRlVMTFNDUkVFTl9BUEkgUFJJVkFURSBPTikKIFdFQktJVF9PUFRJT05fREVGQVVM
VF9QT1JUX1ZBTFVFKEVOQUJMRV9QRVJJT0RJQ19NRU1PUllfTU9OSVRPUiBQUklWQVRFIE9OKQog
V0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX1NNT09USF9TQ1JPTExJTkcg
UFJJVkFURSBPTikKIFdFQktJVF9PUFRJT05fREVGQVVMVF9QT1JUX1ZBTFVFKEVOQUJMRV9SRVNP
VVJDRV9MT0FEX1NUQVRJU1RJQ1MgUFJJVkFURSBPTikKQEAgLTYzLDcgKzY0LDYgQEAgV0VCS0lU
X09QVElPTl9ERUZJTkUoRU5BQkxFX1RMU19ERUJVRyAiRW5hYmxlIFRMUyBrZXkgbG9nIHN1cHBv
cnQiIFBSSVZBVEUgT0ZGKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxF
X1ZBUklBVElPTl9GT05UUyBQUklWQVRFIE9GRikKIAogIyBFbmFibGUgaW4gdGhlIGZ1dHVyZQot
V0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0ZVTExTQ1JFRU5fQVBJIFBS
SVZBVEUgT0ZGKQogV0VCS0lUX09QVElPTl9ERUZBVUxUX1BPUlRfVkFMVUUoRU5BQkxFX0NPTlRF
WFRfTUVOVVMgUFJJVkFURSBPRkYpCiAKICMgTm8gc3VwcG9ydCBwbGFubmVkCmRpZmYgLS1naXQg
YS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZDNkZmFmY2EyNTk3YjU3
NGEyYmQ1YmFhZGZlNTM5YzdhNWQwOTliMy4uOGZhNzkyNTYzOGRjYzFjODg4YjQ4YWQ3MmZlZjky
ZGQxY2RiYTBhNiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDIxLTAxLTA2ICBZb3NoaWFraSBKaXRzdWthd2EgIDx5
b3NoaWFraS5qaXRzdWthd2FAc29ueS5jb20+CisKKyAgICAgICAgW1BsYXlTdGF0aW9uXSBBZGQg
TWluaUJyb3dzZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyMDM1OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZCBQbGF5U3RhdGlvbiBNaW5pQnJvd3NlciBzb3VyY2VzIGFuZCBDTWFrZUxpc3RzLnR4
dC4KKworICAgICAgICAqIE1pbmlCcm93c2VyL3BsYXlzdGF0aW9uL0NNYWtlTGlzdHMudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9JbWFnZUJ1dHRvbi5jcHA6
IEFkZGVkLgorICAgICAgICAqIE1pbmlCcm93c2VyL3BsYXlzdGF0aW9uL0ltYWdlQnV0dG9uLmg6
IEFkZGVkLgorICAgICAgICAqIE1pbmlCcm93c2VyL3BsYXlzdGF0aW9uL01haW5XaW5kb3cuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9NYWluV2luZG93Lmg6
IEFkZGVkLgorICAgICAgICAqIE1pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1N0cmluZ1V0aWxzLmg6
IEFkZGVkLgorICAgICAgICAqIE1pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1RpdGxlQmFyLmNwcDog
QWRkZWQuCisgICAgICAgICogTWluaUJyb3dzZXIvcGxheXN0YXRpb24vVGl0bGVCYXIuaDogQWRk
ZWQuCisgICAgICAgICogTWluaUJyb3dzZXIvcGxheXN0YXRpb24vVG9vbGtpdHRlblV0aWxzLmg6
IEFkZGVkLgorICAgICAgICAqIE1pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1VSTEJhci5jcHA6IEFk
ZGVkLgorICAgICAgICAqIE1pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1VSTEJhci5oOiBBZGRlZC4K
KyAgICAgICAgKiBNaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9XZWJDb250ZXh0LmNwcDogQWRkZWQu
CisgICAgICAgICogTWluaUJyb3dzZXIvcGxheXN0YXRpb24vV2ViQ29udGV4dC5oOiBBZGRlZC4K
KyAgICAgICAgKiBNaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9XZWJWaWV3V2luZG93LmNwcDogQWRk
ZWQuCisgICAgICAgICogTWluaUJyb3dzZXIvcGxheXN0YXRpb24vV2ViVmlld1dpbmRvdy5oOiBB
ZGRlZC4KKyAgICAgICAgKiBNaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9tYWluLmNwcDogQWRkZWQu
CisgICAgICAgIChsb2FkTGlicmFyeU9yRXhpdCk6CisgICAgICAgIChpbml0aWFsaXplKToKKyAg
ICAgICAgKEFwcGxpY2F0aW9uQ2xpZW50Ojp1cGRhdGVBcHBsaWNhdGlvbik6CisgICAgICAgICht
YWluKToKKyAgICAgICAgKiBQbGF0Zm9ybVBsYXlTdGF0aW9uLmNtYWtlOiBBZGRlZC4KKwogMjAy
MC0xMS0yNiAgTGF1cm8gTW91cmEgIDxsbW91cmFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RL
XSBVbnJldmlld2VkLiBSZW1vdmUgbGVmdG92ZXIgdGVzdCBjYXNlIGFmdGVyIEludGVybmV0IEV4
cGxvcmVyIHF1aXJrcyBjaGFuZ2VzCmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9wbGF5
c3RhdGlvbi9DTWFrZUxpc3RzLnR4dCBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL0NN
YWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE4MmRjZDc0MWFjNDc0ZDQ3Y2QzMzQxYjg5OWQwYWE0
ZDVhNTMzNjIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlv
bi9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDU1IEBACitmaW5kX2xpYnJhcnkoVE9PTEtJVF9M
SUJSQVJZIFRvb2xLaXR0ZW4pCisKK1BMQVlTVEFUSU9OX0NPUFlfU0hBUkVEX0xJQlJBUklFUyhN
aW5pQnJvd3Nlcl9Db3B5U2hhcmVkTGlicworICAgIEZJTEVTICR7VE9PTEtJVF9MSUJSQVJZfQor
KQorCitzZXQoTWluaUJyb3dzZXJfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgJHtD
TUFLRV9CSU5BUllfRElSfQorICAgICIke1RPT0xTX0RJUn0vcGxheXN0YXRpb24vIgorKQorCitz
ZXQoTWluaUJyb3dzZXJfU09VUkNFUworICAgIEltYWdlQnV0dG9uLmNwcAorICAgIE1haW5XaW5k
b3cuY3BwCisgICAgVGl0bGVCYXIuY3BwCisgICAgVVJMQmFyLmNwcAorICAgIFdlYkNvbnRleHQu
Y3BwCisgICAgV2ViVmlld1dpbmRvdy5jcHAKKyAgICBtYWluLmNwcAorKQorCitzZXQoTWluaUJy
b3dzZXJfTElCUkFSSUVTCisgICAgJHtDX1NURF9MSUJSQVJZfQorICAgICR7S0VSTkVMX0xJQlJB
Ull9CisKKyAgICAke1RPT0xLSVRfTElCUkFSWX0KKworICAgIFdlYktpdDo6V2ViS2l0CispCisK
K3NldChQTEFZU1RBVElPTl9NaW5pQnJvd3Nlcl9SRVFVSVJFRF9TSEFSRURfTElCUkFSSUVTCisg
ICAgbGliVG9vbEtpdHRlbgorICAgIGxpYmNhaXJvCisgICAgbGliZm9udGNvbmZpZworICAgIGxp
YmZyZWV0eXBlCisgICAgbGliaGFyZmJ1enoKKyAgICBsaWJpY3UKKyAgICBsaWJwbmcxNgorKQor
CitsaW5rX2RpcmVjdG9yaWVzKCR7V0VCS0lUX0xJQlJBUklFU19ESVJ9L2xpYikKK1dFQktJVF9F
WEVDVVRBQkxFX0RFQ0xBUkUoTWluaUJyb3dzZXIpCitXRUJLSVRfRVhFQ1VUQUJMRShNaW5pQnJv
d3NlcikKKworIyBNaW5pQnJvd3NlciB3b24ndCB3b3JrIHdpdGhvdXQgdGhlc2UgcHJvY2Vzc2Vz
CithZGRfZGVwZW5kZW5jaWVzKE1pbmlCcm93c2VyIFdlYlByb2Nlc3MgTmV0d29ya1Byb2Nlc3Mp
CisKK3RhcmdldF9saW5rX29wdGlvbnMoTWluaUJyb3dzZXIgUFJJVkFURSAtV2wsLS1uby1kZW1h
bmdsZSkKKworIworIyBTZXQgdGhlIGRlYnVnZ2VyIHdvcmtpbmcgZGlyZWN0b3J5IGZvciBWaXN1
YWwgU3R1ZGlvCisjCitpZiAoJHtDTUFLRV9HRU5FUkFUT1J9IE1BVENIRVMgIlZpc3VhbCBTdHVk
aW8iKQorICAgIHNldF90YXJnZXRfcHJvcGVydGllcyhNaW5pQnJvd3NlciBQUk9QRVJUSUVTIFZT
X0RFQlVHR0VSX1dPUktJTkdfRElSRUNUT1JZICIke0NNQUtFX1JVTlRJTUVfT1VUUFVUX0RJUkVD
VE9SWX0iKQorZW5kaWYgKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0
aW9uL0ltYWdlQnV0dG9uLmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL0ltYWdl
QnV0dG9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYWU3YzgxMTcwYzM3MWRlYmM3NmE2M2JiMGY0ODQxNDE2
YzFmYTc3Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRpb24v
SW1hZ2VCdXR0b24uY3BwCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgIkltYWdlQnV0dG9uLmgiCisKK3ZvaWQgSW1hZ2VCdXR0b246OnNldENsaWVudChDbGllbnQm
JiBjbGllbnQpCit7CisgICAgbV9jbGllbnQgPSBzdGQ6Om1vdmUoY2xpZW50KTsKK30KKworYm9v
bCBJbWFnZUJ1dHRvbjo6b25Nb3VzZU1vdmUodG9vbGtpdHRlbjo6SW50UG9pbnQpCit7CisgICAg
c2V0Rm9jdXNlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEltYWdlQnV0dG9uOjpv
bkRlY2lkZSgpCit7CisgICAgaWYgKG1fY2xpZW50Lm9uRGVjaWRlKQorICAgICAgICBtX2NsaWVu
dC5vbkRlY2lkZSh0aGlzKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlz
dGF0aW9uL0ltYWdlQnV0dG9uLmggYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9JbWFn
ZUJ1dHRvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUwMDhhM2NkZTVmNWNhNGRiODYxYmM0NmFhMTIwMGFkYWIz
MTcwMWMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9J
bWFnZUJ1dHRvbi5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
U29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPHRvb2xraXR0ZW4vSW1hZ2VC
dXR0b24uaD4KKworY2xhc3MgSW1hZ2VCdXR0b24gOiBwdWJsaWMgdG9vbGtpdHRlbjo6SW1hZ2VC
dXR0b24geworcHVibGljOgorICAgIHN0cnVjdCBDbGllbnQgeworICAgICAgICBzdGQ6OmZ1bmN0
aW9uPHZvaWQoSW1hZ2VCdXR0b24qKT4gb25EZWNpZGU7CisgICAgfTsKKworICAgIHZvaWQgc2V0
Q2xpZW50KENsaWVudCYmKTsKKworcHJvdGVjdGVkOgorICAgIGJvb2wgb25Nb3VzZU1vdmUodG9v
bGtpdHRlbjo6SW50UG9pbnQpIG92ZXJyaWRlOworICAgIHZvaWQgb25EZWNpZGUoKSBvdmVycmlk
ZTsKKworICAgIENsaWVudCBtX2NsaWVudDsKK307CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJv
d3Nlci9wbGF5c3RhdGlvbi9NYWluV2luZG93LmNwcCBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlz
dGF0aW9uL01haW5XaW5kb3cuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRhNWM1NDBmMjdiNTNkYmFlZmYxZjM5
YTY5OWVjOGFjZTAyMjRhNjkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9w
bGF5c3RhdGlvbi9NYWluV2luZG93LmNwcApAQCAtMCwwICsxLDI0OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWFpbldpbmRvdy5oIgorCisjaW5j
bHVkZSAiSW1hZ2VCdXR0b24uaCIKKyNpbmNsdWRlICJUaXRsZUJhci5oIgorI2luY2x1ZGUgIlRv
b2xraXR0ZW5VdGlscy5oIgorI2luY2x1ZGUgIlVSTEJhci5oIgorI2luY2x1ZGUgIldlYlZpZXdX
aW5kb3cuaCIKKyNpbmNsdWRlIDxLZXlib2FyZENvZGVzLmg+CisjaW5jbHVkZSA8V2ViS2l0L1dL
U3RyaW5nLmg+CisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDx0b29sa2l0dGVuL0FwcGxp
Y2F0aW9uLmg+CisKK2NvbnN0ZXhwciBpbnQgTGluZUhlaWdodCA9IDQwOworY29uc3RleHByIGlu
dCBGb250U2l6ZSA9IDMyOworCit1c2luZyBuYW1lc3BhY2UgdG9vbGtpdHRlbjsKKworTWFpbldp
bmRvdzo6TWFpbldpbmRvdygpCit7CisgICAgSW50U2l6ZSBzaXplID0gQXBwbGljYXRpb246OnNp
bmdsZXRvbigpLndpbmRvd1NpemUoKTsKKyAgICBhdXRvIHdpbmRvd1dpZHRoID0gc2l6ZS53Owor
ICAgIGF1dG8gd2luZG93SGVpZ2h0ID0gc2l6ZS5oOworICAgIHNldFNpemUoc2l6ZSk7CisKKyAg
ICBjb25zdCB1bnNpZ25lZCB0aXRsZUJhckhlaWdodCA9IExpbmVIZWlnaHQgKiAxOworICAgIGNv
bnN0IHVuc2lnbmVkIHVybEJhckhlaWdodCA9IExpbmVIZWlnaHQgKiAxOworICAgIGNvbnN0IHVu
c2lnbmVkIHdlYlZpZXdGcmFtZVlQb3NpdGlvbiA9IHRpdGxlQmFySGVpZ2h0ICsgdXJsQmFySGVp
Z2h0OworCisgICAgLy8gUmVnaXN0ZXIgd2lkZ2V0cy4gRE8gTk9UIENIQU5HRSB0aGlzIG9yZGVy
LgorICAgIG1fd2Vidmlld0ZyYW1lID0gY3JlYXRlQW5kQXBwZW5kQ2hpbGQ8V2lkZ2V0Pih0aGlz
LAorICAgICAgICB7IHdpbmRvd1dpZHRoLCB3aW5kb3dIZWlnaHQgLSB3ZWJWaWV3RnJhbWVZUG9z
aXRpb24gfSwKKyAgICAgICAgeyAwLCB3ZWJWaWV3RnJhbWVZUG9zaXRpb24gfSk7CisKKyAgICBt
X3RpdGxlQmFyID0gY3JlYXRlQW5kQXBwZW5kQ2hpbGQ8VGl0bGVCYXI+KHRoaXMsCisgICAgICAg
IHsgd2luZG93V2lkdGgsIHRpdGxlQmFySGVpZ2h0IH0sCisgICAgICAgIHsgMCwgMCB9KTsKKwor
ICAgIGNvbnN0IGludCBjbG9zZUJ1dHRvbk1hcmdpbiA9IDQ7CisgICAgYXV0byBjbG9zZUJ1dHRv
biA9IGNyZWF0ZUFuZEFwcGVuZENoaWxkPDo6SW1hZ2VCdXR0b24+KHRoaXMsCisgICAgICAgIHsg
dGl0bGVCYXJIZWlnaHQgLSBjbG9zZUJ1dHRvbk1hcmdpbiAqIDIsIHRpdGxlQmFySGVpZ2h0IC0g
Y2xvc2VCdXR0b25NYXJnaW4gKiAyIH0sCisgICAgICAgIHsgKGludCkod2luZG93V2lkdGggLSB0
aXRsZUJhckhlaWdodCArIGNsb3NlQnV0dG9uTWFyZ2luKSwgY2xvc2VCdXR0b25NYXJnaW4gfSk7
CisgICAgY2xvc2VCdXR0b24tPnNldEltYWdlRnJvbVJlc291cmNlKCJpY29uX2Nyb3NzLnBuZyIp
OworICAgIGNsb3NlQnV0dG9uLT5zZXRDbGllbnQoe1t0aGlzXSg6OkltYWdlQnV0dG9uKikgewor
ICAgICAgICBjbG9zZVdlYlZpZXcoYWN0aXZlV2ViVmlldygpKTsKKyAgICB9fSk7CisKKyAgICBj
b25zdCB1bnNpZ25lZCBidXR0b25XaWR0aCA9IDEwMDsKKyAgICBjb25zdCB1bnNpZ25lZCB1cmxC
YXJXaWR0aCA9IHdpbmRvd1dpZHRoIC0gYnV0dG9uV2lkdGggKiAzOworICAgIGNvbnN0IHVuc2ln
bmVkIHVybEJhclhQb3NpdGlvbiA9IGJ1dHRvbldpZHRoICogMzsKKworICAgIGF1dG8gYmFja0J1
dHRvbiA9IGNyZWF0ZUFuZEFwcGVuZENoaWxkPDo6SW1hZ2VCdXR0b24+KHRoaXMsCisgICAgICAg
IHsgYnV0dG9uV2lkdGgsIHVybEJhckhlaWdodCB9LAorICAgICAgICB7IDAsIHRpdGxlQmFySGVp
Z2h0IH0pOworICAgIGJhY2tCdXR0b24tPnNldEltYWdlRnJvbVJlc291cmNlKCJpY29uX2JhY2su
cG5nIik7CisgICAgYmFja0J1dHRvbi0+c2V0Q2xpZW50KHsgW3RoaXNdKDo6SW1hZ2VCdXR0b24q
KSB7CisgICAgICAgIGFjdGl2ZVdlYlZpZXcoKS0+Z29CYWNrKCk7CisgICAgfX0pOworCisgICAg
YXV0byBmb3J3YXJkQnV0dG9uID0gY3JlYXRlQW5kQXBwZW5kQ2hpbGQ8OjpJbWFnZUJ1dHRvbj4o
dGhpcywKKyAgICAgICAgeyBidXR0b25XaWR0aCwgdXJsQmFySGVpZ2h0IH0sCisgICAgICAgIHsg
YnV0dG9uV2lkdGgsIHRpdGxlQmFySGVpZ2h0IH0pOworICAgIGZvcndhcmRCdXR0b24tPnNldElt
YWdlRnJvbVJlc291cmNlKCJpY29uX2ZvcndhcmQucG5nIik7CisgICAgZm9yd2FyZEJ1dHRvbi0+
c2V0Q2xpZW50KHsgW3RoaXNdKDo6SW1hZ2VCdXR0b24qKSB7CisgICAgICAgIGFjdGl2ZVdlYlZp
ZXcoKS0+Z29Gb3J3YXJkKCk7CisgICAgfX0pOworCisgICAgYXV0byByZWxvYWRCdXR0b24gPSBj
cmVhdGVBbmRBcHBlbmRDaGlsZDw6OkltYWdlQnV0dG9uPih0aGlzLAorICAgICAgICB7IGJ1dHRv
bldpZHRoLCB1cmxCYXJIZWlnaHQgfSwKKyAgICAgICAgeyBidXR0b25XaWR0aCAqIDIsIHRpdGxl
QmFySGVpZ2h0IH0pOworICAgIHJlbG9hZEJ1dHRvbi0+c2V0SW1hZ2VGcm9tUmVzb3VyY2UoImlj
b25fcmVsb2FkLnBuZyIpOworICAgIHJlbG9hZEJ1dHRvbi0+c2V0Q2xpZW50KHsgW3RoaXNdKDo6
SW1hZ2VCdXR0b24qKSB7CisgICAgICAgIGFjdGl2ZVdlYlZpZXcoKS0+cmVsb2FkKCk7CisgICAg
fX0pOworCisgICAgbV91cmxCYXIgPSBjcmVhdGVBbmRBcHBlbmRDaGlsZDw6OlVSTEJhcj4odGhp
cywKKyAgICAgICAgeyB1cmxCYXJXaWR0aCwgdXJsQmFySGVpZ2h0IH0sCisgICAgICAgIHsgdXJs
QmFyWFBvc2l0aW9uLCB0aXRsZUJhckhlaWdodCB9KTsKKyAgICBtX3VybEJhci0+c2V0Q2xpZW50
KHsgW3RoaXNdKDo6VVJMQmFyKiwgY29uc3QgY2hhciogdXJsKSB7IAorICAgICAgICBhY3RpdmVX
ZWJWaWV3KCktPmxvYWRVUkwodXJsKTsKKyAgICB9fSk7CisKKyAgICBjcmVhdGVOZXdXZWJWaWV3
KG51bGxwdHIpOworICAgIGFjdGl2ZVdlYlZpZXcoKS0+bG9hZFVSTCgiaHR0cHM6Ly93ZWJraXQu
b3JnIik7Cit9CisKK3ZvaWQgTWFpbldpbmRvdzo6cGFpbnRTZWxmKHRvb2xraXR0ZW46OkludFBv
aW50KQoreworfQorCitXZWJWaWV3V2luZG93KiBNYWluV2luZG93OjpjcmVhdGVOZXdXZWJWaWV3
KFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYgY29uZmlndXJhdGlvbikKK3sKKyAgICBJbnRTaXplIHNp
emUgPSBtX3dlYnZpZXdGcmFtZS0+c2l6ZSgpOworICAgIEludFBvaW50IHBvc2l0aW9uID0geyAw
LCAwIH07CisKKyAgICBXZWJWaWV3V2luZG93OjpDbGllbnQgd2luZG93Q2xpZW50IHsKKyAgICAg
ICAgLy8gY3JlYXRlTmV3V2luZG93CisgICAgICAgIFt0aGlzXShXS1BhZ2VDb25maWd1cmF0aW9u
UmVmIGNvbmZpZ3VyYXRpb24pIC0+IFdlYlZpZXdXaW5kb3cqIHsKKyAgICAgICAgICAgIHJldHVy
biBjcmVhdGVOZXdXZWJWaWV3KGNvbmZpZ3VyYXRpb24pOworICAgICAgICB9LAorCisgICAgICAg
IC8vIGRpZFVwZGF0ZVRpdGxlCisgICAgICAgIFt0aGlzXShXZWJWaWV3V2luZG93KiB2aWV3KSB7
CisgICAgICAgICAgICBpZiAodmlldyA9PSBhY3RpdmVXZWJWaWV3KCkpCisgICAgICAgICAgICAg
ICAgdXBkYXRlVGl0bGVCYXIoKTsKKyAgICAgICAgfSwKKyAgICAgICAgLy8gZGlkVXBkYXRlVVJM
CisgICAgICAgIFt0aGlzXShXZWJWaWV3V2luZG93KiB2aWV3KSB7CisgICAgICAgICAgICBpZiAo
dmlldyA9PSBhY3RpdmVXZWJWaWV3KCkpCisgICAgICAgICAgICAgICAgdXBkYXRlVVJMQmFyKCk7
CisgICAgICAgIH0sCisgICAgICAgIC8vIGRpZFVwZGF0ZVByb2dyZXNzCisgICAgICAgIFt0aGlz
XShXZWJWaWV3V2luZG93KiB2aWV3KSB7CisgICAgICAgICAgICBpZiAodmlldyA9PSBhY3RpdmVX
ZWJWaWV3KCkpCisgICAgICAgICAgICAgICAgdXBkYXRlVGl0bGVCYXIoKTsKKyAgICAgICAgfQor
ICAgIH07CisKKyAgICBhdXRvIHdlYlZpZXdXaW5kb3cgPSBXZWJWaWV3V2luZG93OjpjcmVhdGUo
c3RkOjptb3ZlKHdpbmRvd0NsaWVudCksIGNvbmZpZ3VyYXRpb24pOworICAgIHdlYlZpZXdXaW5k
b3ctPnNldFVzZXJEYXRhKHRoaXMpOworICAgIHdlYlZpZXdXaW5kb3ctPnNldFBvc2l0aW9uKHBv
c2l0aW9uKTsKKyAgICB3ZWJWaWV3V2luZG93LT5zZXRTaXplKHsgc2l6ZS53LCBzaXplLmggfSk7
CisgICAgd2ViVmlld1dpbmRvdy0+ZmlsbChXSElURSk7CisKKyAgICBXZWJWaWV3V2luZG93KiBy
YXdXZWJWaWV3V2luZG93ID0gd2ViVmlld1dpbmRvdy5nZXQoKTsKKyAgICBtX3dlYnZpZXdGcmFt
ZS0+YXBwZW5kQ2hpbGQobW92ZSh3ZWJWaWV3V2luZG93KSk7CisKKyAgICAvLyBBY3JpdmF0ZSB0
aGUgbmV3IHdpbmRvdy4KKyAgICByYXdXZWJWaWV3V2luZG93LT5zZXRBY3RpdmUodHJ1ZSk7Cisg
ICAgc2V0QWN0aXZlV2ViVmlldyhyYXdXZWJWaWV3V2luZG93KTsKKyAgICByZXR1cm4gcmF3V2Vi
Vmlld1dpbmRvdzsKK30KKworV2ViVmlld1dpbmRvdyogTWFpbldpbmRvdzo6YWN0aXZlV2ViVmll
dygpCit7CisgICAgYXV0byBudW1XZWJWaWV3cyA9IG1fd2Vidmlld0ZyYW1lLT5jaGlsZHJlbigp
LnNpemUoKTsKKyAgICBpZiAobV9hY3RpdmVXZWJWaWV3SW5kZXggPj0gbnVtV2ViVmlld3MpCisg
ICAgICAgIG1fYWN0aXZlV2ViVmlld0luZGV4ID0gbnVtV2ViVmlld3MgLSAxOworCisgICAgYXV0
byBpdCA9IG1fd2Vidmlld0ZyYW1lLT5jaGlsZHJlbigpLmJlZ2luKCk7CisgICAgc3RkOjphZHZh
bmNlKGl0LCBtX2FjdGl2ZVdlYlZpZXdJbmRleCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdl
YlZpZXdXaW5kb3cqPihpdC0+Z2V0KCkpOworfQorCit2b2lkIE1haW5XaW5kb3c6OnNldEFjdGl2
ZVdlYlZpZXcoV2ViVmlld1dpbmRvdyogdmlldykKK3sKKyAgICBhdXRvJiB3ZWJWaWV3cyA9IG1f
d2Vidmlld0ZyYW1lLT5jaGlsZHJlbigpOworICAgIHVuc2lnbmVkIGkgPSAwOworICAgIGZvciAo
YXV0byBpdCA9IHdlYlZpZXdzLmJlZ2luKCk7IGl0ICE9IHdlYlZpZXdzLmVuZCgpOyBpdCsrLCBp
KyspIHsKKyAgICAgICAgaWYgKGl0LT5nZXQoKSA9PSB2aWV3KSB7CisgICAgICAgICAgICBtX2Fj
dGl2ZVdlYlZpZXdJbmRleCA9IGk7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxXZWJWaWV3V2lu
ZG93Kj4oaXQtPmdldCgpKS0+c2V0QWN0aXZlKHRydWUpOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PFdlYlZpZXdXaW5kb3cqPihpdC0+Z2V0KCkpLT5zZXRBY3RpdmUo
ZmFsc2UpOworICAgIH0KKyAgICB1cGRhdGVUaXRsZUJhcigpOworICAgIHVwZGF0ZVVSTEJhcigp
OworfQorCit2b2lkIE1haW5XaW5kb3c6OnN3aXRjaEFjdGl2ZVdlYlZpZXcoaW50IGRlbHRhKQor
eworICAgIGF1dG8gbnVtV2ViVmlld3MgPSBtX3dlYnZpZXdGcmFtZS0+Y2hpbGRyZW4oKS5zaXpl
KCk7CisgICAgdW5zaWduZWQgbmV3SW5kZXggPSAobV9hY3RpdmVXZWJWaWV3SW5kZXggKyBkZWx0
YSArIG51bVdlYlZpZXdzKSAlIG51bVdlYlZpZXdzOworICAgIGF1dG8gaXQgPSBtX3dlYnZpZXdG
cmFtZS0+Y2hpbGRyZW4oKS5iZWdpbigpOworICAgIHN0ZDo6YWR2YW5jZShpdCwgbmV3SW5kZXgp
OworICAgIHNldEFjdGl2ZVdlYlZpZXcoc3RhdGljX2Nhc3Q8V2ViVmlld1dpbmRvdyo+KGl0LT5n
ZXQoKSkpOworfQorCit2b2lkIE1haW5XaW5kb3c6OmNsb3NlV2ViVmlldyhXZWJWaWV3V2luZG93
KiB2aWV3KQoreworICAgIGF1dG8mIHdlYlZpZXdzID0gbV93ZWJ2aWV3RnJhbWUtPmNoaWxkcmVu
KCk7CisgICAgdW5zaWduZWQgaSA9IDA7CisgICAgZm9yIChhdXRvIGl0ID0gd2ViVmlld3MuYmVn
aW4oKTsgaXQgIT0gd2ViVmlld3MuZW5kKCk7IGl0KyssIGkrKykgeworICAgICAgICBpZiAoaXQt
PmdldCgpID09IHZpZXcpIHsKKyAgICAgICAgICAgIG1fd2Vidmlld0ZyYW1lLT5yZW1vdmVDaGls
ZCh2aWV3KTsKKyAgICAgICAgICAgIGlmIChtX3dlYnZpZXdGcmFtZS0+Y2hpbGRyZW4oKS5lbXB0
eSgpKQorICAgICAgICAgICAgICAgIGV4aXQoMCk7CisKKyAgICAgICAgICAgIGlmIChpID09IG1f
YWN0aXZlV2ViVmlld0luZGV4KQorICAgICAgICAgICAgICAgIHN3aXRjaEFjdGl2ZVdlYlZpZXco
LTEpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorfQorCitib29sIE1h
aW5XaW5kb3c6Om9uS2V5RG93bihpbnQzMl90IHZpcnR1YWxLZXlDb2RlKQoreworICAgIHN3aXRj
aCAodmlydHVhbEtleUNvZGUpIHsKKyAgICBjYXNlIFZLX0wxOgorICAgICAgICBhY3RpdmVXZWJW
aWV3KCktPmdvQmFjaygpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIFZLX0wyOgor
ICAgICAgICBzd2l0Y2hBY3RpdmVXZWJWaWV3KC0xKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgY2FzZSBWS19SMToKKyAgICAgICAgYWN0aXZlV2ViVmlldygpLT5nb0ZvcndhcmQoKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBWS19SMjoKKyAgICAgICAgc3dpdGNoQWN0aXZl
V2ViVmlldygxKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBWS19SMzoKKyAgICAg
ICAgYWN0aXZlV2ViVmlldygpLT50b2dnbGVab29tRmFjdG9yKCk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGNhc2UgVktfVFJJQU5HTEU6CisgICAgICAgIGFjdGl2ZVdlYlZpZXcoKS0+cmVs
b2FkKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3ZvaWQgTWFpbldpbmRvdzo6dXBkYXRlVGl0bGVCYXIoKQoreworICAgIGF1dG8gbnVtV2Vi
Vmlld3MgPSBtX3dlYnZpZXdGcmFtZS0+Y2hpbGRyZW4oKS5zaXplKCk7CisgICAgc3RkOjpzdHJp
bmdzdHJlYW0gdGl0bGU7CisgICAgdGl0bGUgPDwgKG1fYWN0aXZlV2ViVmlld0luZGV4ICsgMSkg
PDwgIi8iIDw8IG51bVdlYlZpZXdzIDw8ICIgIiA8PCBhY3RpdmVXZWJWaWV3KCktPnRpdGxlKCk7
CisgICAgbV90aXRsZUJhci0+c2V0VGl0bGUodGl0bGUuc3RyKCkpOworICAgIG1fdGl0bGVCYXIt
PnNldFByb2dyZXNzKGFjdGl2ZVdlYlZpZXcoKS0+cHJvZ3Jlc3MoKSk7Cit9CisKK3ZvaWQgTWFp
bldpbmRvdzo6dXBkYXRlVVJMQmFyKCkKK3sKKyAgICBtX3VybEJhci0+c2V0VGV4dChhY3RpdmVX
ZWJWaWV3KCktPnVybCgpLmNfc3RyKCksIEZvbnRTaXplKTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xz
L01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL01haW5XaW5kb3cuaCBiL1Rvb2xzL01pbmlCcm93c2Vy
L3BsYXlzdGF0aW9uL01haW5XaW5kb3cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jY2UyMmNmNjllMzQ3NDRiOGUx
YjVlYzhkMzMzOTlhZjBhMTNjYjc2Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvTWluaUJyb3dz
ZXIvcGxheXN0YXRpb24vTWFpbldpbmRvdy5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxXZWJLaXQvV0tCYXNlLmg+CisjaW5jbHVk
ZSA8bGlzdD4KKyNpbmNsdWRlIDx0b29sa2l0dGVuL1dpZGdldC5oPgorCitjbGFzcyBUaXRsZUJh
cjsKK2NsYXNzIFVSTEJhcjsKK2NsYXNzIFdlYlZpZXdXaW5kb3c7CisKK2NsYXNzIE1haW5XaW5k
b3cgZmluYWwgOiBwdWJsaWMgdG9vbGtpdHRlbjo6V2lkZ2V0IHsKK3B1YmxpYzoKKyAgICBNYWlu
V2luZG93KCk7CisKKyAgICBXZWJWaWV3V2luZG93KiBhY3RpdmVXZWJWaWV3KCk7CisKK3ByaXZh
dGU6CisgICAgdm9pZCBwYWludFNlbGYodG9vbGtpdHRlbjo6SW50UG9pbnQpIG92ZXJyaWRlOwor
ICAgIGJvb2wgb25LZXlEb3duKGludDMyX3QgdmlydHVhbEtleUNvZGUpIG92ZXJyaWRlOworCisg
ICAgdm9pZCB1cGRhdGVUaXRsZUJhcigpOworICAgIHZvaWQgdXBkYXRlVVJMQmFyKCk7CisKKyAg
ICBXZWJWaWV3V2luZG93KiBjcmVhdGVOZXdXZWJWaWV3KFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYp
OworICAgIHZvaWQgc2V0QWN0aXZlV2ViVmlldyhXZWJWaWV3V2luZG93Kik7CisgICAgdm9pZCBz
d2l0Y2hBY3RpdmVXZWJWaWV3KGludCBkZWx0YSk7CisgICAgdm9pZCBjbG9zZVdlYlZpZXcoV2Vi
Vmlld1dpbmRvdyopOworCisgICAgVGl0bGVCYXIqIG1fdGl0bGVCYXIgeyBudWxscHRyIH07Cisg
ICAgVVJMQmFyKiBtX3VybEJhciB7IG51bGxwdHIgfTsKKyAgICBXaWRnZXQqIG1fd2Vidmlld0Zy
YW1lIHsgbnVsbHB0ciB9OworCisgICAgdW5zaWduZWQgbV9hY3RpdmVXZWJWaWV3SW5kZXggeyAw
IH07Cit9OwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRpb24vU3RyaW5n
VXRpbHMuaCBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1N0cmluZ1V0aWxzLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMDQ4YWZkNzUzNDZhMDc3OGNiN2Q1YTc5MjlmMzMyMzVlZTkyNzk5YwotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1N0cmluZ1V0aWxzLmgK
QEAgLTAsMCArMSwzOCBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3Rp
dmUgRW50ZXJ0YWlubWVudCBJbmMuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJl
IG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxXZWJLaXQvV0tTdHJpbmcuaD4K
KyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dmVjdG9yPgorCitpbmxpbmUgc3RkOjpzdHJp
bmcgdG9VVEY4U3RyaW5nKFdLU3RyaW5nUmVmIHdrc3RyaW5nKQoreworICAgIHNpemVfdCBidWZm
ZXJTaXplID0gV0tTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKHdrc3RyaW5nKTsKKyAg
ICBzdGQ6OnZlY3RvcjxjaGFyPiBidWZmZXIoYnVmZmVyU2l6ZSk7CisgICAgc2l6ZV90IHNpemUg
PSBXS1N0cmluZ0dldFVURjhDU3RyaW5nKHdrc3RyaW5nLCBidWZmZXIuZGF0YSgpLCBidWZmZXJT
aXplKTsKKyAgICByZXR1cm4gc3RkOjpzdHJpbmcgeyBidWZmZXIuZGF0YSgpLCBzaXplIH07Cit9
CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9UaXRsZUJhci5jcHAg
Yi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9UaXRsZUJhci5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NjA1MjAxZTBmNjk3NWI0ZjQ3OWNjNTI0M2ZlMTYzNzYyNjcyNzJjOAotLS0gL2Rldi9udWxsCisr
KyBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1RpdGxlQmFyLmNwcApAQCAtMCwwICsx
LDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0
YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJUaXRsZUJhci5oIgorCit1c2luZyBu
YW1lc3BhY2UgdG9vbGtpdHRlbjsKKwordm9pZCBUaXRsZUJhcjo6c2V0VGl0bGUoY29uc3Qgc3Rk
OjpzdHJpbmcmIHRpdGxlKQoreworICAgIGlmIChtX3RpdGxlID09IHRpdGxlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX3RpdGxlID0gdGl0bGU7CisgICAgdXBkYXRlKCk7Cit9CisKK3ZvaWQg
VGl0bGVCYXI6OnNldFByb2dyZXNzKGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICBpZiAobV9wcm9n
cmVzcyA9PSBwcm9ncmVzcykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wcm9ncmVzcyA9IHBy
b2dyZXNzOworICAgIHVwZGF0ZSgpOworfQorCit2b2lkIFRpdGxlQmFyOjp1cGRhdGUoKQorewor
ICAgIGF1dG8gd2lkZ2V0U2l6ZSA9IHNpemUoKTsKKyAgICBpbnQgcHJvZ3Jlc3NXaWR0aCA9IHdp
ZGdldFNpemUudyAqIG1fcHJvZ3Jlc3M7CisKKyAgICBJbnRSZWN0IHJlY3QgeyB7IDAsIDAgfSwg
d2lkZ2V0U2l6ZSB9OworICAgIEludFJlY3QgcHJvZ3Jlc3NSZWN0ID0gcmVjdDsKKyAgICBwcm9n
cmVzc1JlY3Quc2l6ZS53ID0gcHJvZ3Jlc3NXaWR0aDsKKyAgICBpZiAoIXByb2dyZXNzUmVjdC5p
c0VtcHR5KCkpCisgICAgICAgIGZpbGxSZWN0KHByb2dyZXNzUmVjdCwgQ29sb3IgeyAwLjAsIDAu
MCwgMC41LCAxLjAgfSk7CisKKyAgICBJbnRSZWN0IHJlbWFpbmluZ1JlY3QgPSByZWN0OworICAg
IHJlbWFpbmluZ1JlY3Quc2l6ZS53IC09IHByb2dyZXNzV2lkdGg7CisgICAgcmVtYWluaW5nUmVj
dC5wb3NpdGlvbi54ICs9IHByb2dyZXNzV2lkdGg7CisgICAgaWYgKCFyZW1haW5pbmdSZWN0Lmlz
RW1wdHkoKSkKKyAgICAgICAgZmlsbFJlY3QocmVtYWluaW5nUmVjdCwgQ29sb3IgeyAwLjIsIDAu
MiwgMC43LCAxLjAgfSk7CisKKyAgICBzdHJva2VSZWN0KHJlY3QsIDQsIENvbG9yIHsgMC43LCAw
LjcsIDAuNywgMS4wIH0pOworCisgICAgY29uc3QgaW50IGZvbnRTaXplID0gMzI7CisgICAgZHJh
d1RleHQobV90aXRsZS5jX3N0cigpLCB7IDIsIDAgfSwgZm9udFNpemUsIFdISVRFKTsKK30KZGlm
ZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1RpdGxlQmFyLmggYi9Ub29s
cy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9UaXRsZUJhci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRiZjA0NzY4
MDc1Zjc1YTE5YmM4YzJhYTczMjJlNTZmMDFjNTliMTMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9UaXRsZUJhci5oCkBAIC0wLDAgKzEsNDAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IElu
Yy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx0b29sa2l0dGVuL1dpZGdl
dC5oPgorCitjbGFzcyBUaXRsZUJhciBmaW5hbCA6IHB1YmxpYyB0b29sa2l0dGVuOjpXaWRnZXQg
eworcHVibGljOgorICAgIHZvaWQgc2V0VGl0bGUoY29uc3Qgc3RkOjpzdHJpbmcmKTsKKyAgICB2
b2lkIHNldFByb2dyZXNzKGRvdWJsZSk7CisKK3ByaXZhdGU6CisgICAgdm9pZCB1cGRhdGUoKTsK
KworICAgIHN0ZDo6c3RyaW5nIG1fdGl0bGU7CisgICAgZG91YmxlIG1fcHJvZ3Jlc3MgeyAwIH07
Cit9OwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRpb24vVG9vbGtpdHRl
blV0aWxzLmggYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9Ub29sa2l0dGVuVXRpbHMu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi44YjdiZjgwYTY0NzRjZDY0MTA2YWMxODAxZDZjMjM1ZWI0OGVjZDIxCi0t
LSAvZGV2L251bGwKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRpb24vVG9vbGtpdHRl
blV0aWxzLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkg
SW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxXZWJLaXQvV0tH
ZW9tZXRyeS5oPgorI2luY2x1ZGUgPHRvb2xraXR0ZW4vSW50UmVjdC5oPgorCitpbmxpbmUgdG9v
bGtpdHRlbjo6SW50UmVjdCB0b1RLUmVjdChXS1JlY3QgcmVjdCkKK3sKKyAgICByZXR1cm4gewor
ICAgICAgICB0b29sa2l0dGVuOjpJbnRQb2ludCB7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxp
bnQ+KHJlY3Qub3JpZ2luLngpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihyZWN0Lm9y
aWdpbi55KQorICAgICAgICB9LAorICAgICAgICB0b29sa2l0dGVuOjpJbnRTaXplIHsKKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZWN0LnNpemUud2lkdGgpLAorICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlY3Quc2l6ZS5oZWlnaHQpCisgICAgICAgIH0KKyAg
ICB9OworfQorCitpbmxpbmUgdG9vbGtpdHRlbjo6SW50UG9pbnQgdG9US1BvaW50KFdLUG9pbnQg
cG9pbnQpCit7CisgICAgcmV0dXJuIHsKKyAgICAgICAgdG9vbGtpdHRlbjo6SW50UG9pbnQgewor
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pihwb2ludC54KSwKKyAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGludD4ocG9pbnQueSkKKyAgICAgICAgfQorICAgIH07Cit9CisKK2lubGluZSBXS1Jl
Y3QgdG9XS1JlY3QodG9vbGtpdHRlbjo6SW50UmVjdCByZWN0KQoreworICAgIHJldHVybiBXS1Jl
Y3RNYWtlKHJlY3QucG9zaXRpb24ueCwgcmVjdC5wb3NpdGlvbi55LCByZWN0LnNpemUudywgcmVj
dC5zaXplLmgpOworfQorCitpbmxpbmUgV0tTaXplIHRvV0tTaXplKHRvb2xraXR0ZW46OkludFNp
emUgc2l6ZSkKK3sKKyAgICByZXR1cm4gV0tTaXplTWFrZShzaXplLncsIHNpemUuaCk7Cit9CisK
K2lubGluZSBXS1BvaW50IHRvV0tQb2ludCh0b29sa2l0dGVuOjpJbnRQb2ludCBwb2ludCkKK3sK
KyAgICByZXR1cm4gV0tQb2ludE1ha2UocG9pbnQueCwgcG9pbnQueSk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFdpZGdldFQ+CitXaWRnZXRUKiBjcmVhdGVBbmRBcHBlbmRDaGlsZCh0b29sa2l0
dGVuOjpXaWRnZXQqIHBhcmVudCwgY29uc3QgdG9vbGtpdHRlbjo6SW50U2l6ZSBzaXplLCBjb25z
dCB0b29sa2l0dGVuOjpJbnRQb2ludCYgcG9zaXRpb24pCit7CisgICAgYXV0byB3aWRnZXQgPSBz
dGQ6Om1ha2VfdW5pcXVlPFdpZGdldFQ+KCk7CisgICAgV2lkZ2V0VCogcHRyID0gd2lkZ2V0Lmdl
dCgpOworICAgIHB0ci0+c2V0U2l6ZShzaXplKTsKKyAgICBwdHItPnNldFBvc2l0aW9uKHBvc2l0
aW9uKTsKKyAgICBwYXJlbnQtPmFwcGVuZENoaWxkKG1vdmUod2lkZ2V0KSk7CisgICAgcmV0dXJu
IHB0cjsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1VSTEJh
ci5jcHAgYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9VUkxCYXIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmY0NzI1NmUyNTVhYjFlYWMxOTM0ZjkyNzBmYzA4MDg4NWZhOGJhZjAKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9VUkxCYXIuY3BwCkBAIC0wLDAg
KzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRl
cnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIlVSTEJhci5oIgorCisjaW5jbHVk
ZSA8S2V5Ym9hcmRDb2Rlcy5oPgorCit1c2luZyBuYW1lc3BhY2UgdG9vbGtpdHRlbjsKKwordm9p
ZCBVUkxCYXI6OnNldENsaWVudChDbGllbnQmJiBjbGllbnQpCit7CisgICAgbV9jbGllbnQgPSBz
dGQ6Om1vdmUoY2xpZW50KTsKK30KKwordm9pZCBVUkxCYXI6OnVwZGF0ZVNlbGYoKQoreworICAg
IFRleHRCb3g6OnVwZGF0ZVNlbGYoKTsKKworICAgIGlmIChmb2N1c2VkV2lkZ2V0KCkgPT0gdGhp
cyAmJiBtX2ltZURpYWxvZyAmJiBtX2ltZURpYWxvZy0+aXNGaW5pc2hlZCgpKSB7CisgICAgICAg
IHNldFRleHQobV9pbWVEaWFsb2ctPmdldEltZVRleHQoKS5jX3N0cigpKTsKKyAgICAgICAgbV9p
bWVEaWFsb2cucmVzZXQoKTsKKyAgICAgICAgaWYgKG1fY2xpZW50Lm9uRGVjaWRlVVJMKQorICAg
ICAgICAgICAgbV9jbGllbnQub25EZWNpZGVVUkwodGhpcywgZ2V0VGV4dCgpKTsKKyAgICB9Cit9
CisKK2Jvb2wgVVJMQmFyOjpvbk1vdXNlTW92ZSh0b29sa2l0dGVuOjpJbnRQb2ludCkKK3sKKyAg
ICBzZXRGb2N1c2VkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVVJMQmFyOjpvbktl
eURvd24oaW50MzJfdCB2aXJ0dWFsS2V5Q29kZSkKK3sKKyAgICBzd2l0Y2ggKHZpcnR1YWxLZXlD
b2RlKSB7CisgICAgY2FzZSBWS19SRVRVUk46CisgICAgICAgIHNldEZvY3VzZWQoKTsKKyAgICAg
ICAgb25TZWxlY3QoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBVUkxCYXI6Om9uU2VsZWN0KCkKK3sKKyAgICBFZGl0b3JTdGF0ZSBl
ZGl0b3JTdGF0ZTsKKyAgICBlZGl0b3JTdGF0ZS5pbnB1dFR5cGUgPSBJbnB1dEZpZWxkVHlwZTo6
VXJsOworICAgIGVkaXRvclN0YXRlLnN1cHBvcnRMYW5ndWFnZSA9IElucHV0RmllbGRMYW5ndWFn
ZTo6RW5nbGlzaF9VczsKKyAgICBlZGl0b3JTdGF0ZS50aXRsZSA9ICJJbnB1dCBVUkwiOworICAg
IGVkaXRvclN0YXRlLnRleHQgPSBzdGQ6OnN0cmluZyhnZXRUZXh0KCkpOworICAgIGVkaXRvclN0
YXRlLnBvc2l0aW9uID0gZ2xvYmFsUG9zaXRpb24oKTsKKyAgICBlZGl0b3JTdGF0ZS5pc0luTG9n
aW5Gb3JtID0gZmFsc2U7CisgICAgbV9pbWVEaWFsb2cgPSBJbWVEaWFsb2c6OmNyZWF0ZShlZGl0
b3JTdGF0ZSk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9V
UkxCYXIuaCBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL1VSTEJhci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjc5MjBjZTUyN2JmOWM5YjI0YTZiMWZlZmMxMmMxN2MxN2MyYjYyZWIKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9VUkxCYXIuaApAQCAtMCwwICsx
LDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0
YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8dG9vbGtp
dHRlbi9JbWVEaWFsb2cuaD4KKyNpbmNsdWRlIDx0b29sa2l0dGVuL1RleHRCb3guaD4KKworY2xh
c3MgVVJMQmFyIGZpbmFsIDogcHVibGljIHRvb2xraXR0ZW46OlRleHRCb3ggeworcHVibGljOgor
ICAgIHN0cnVjdCBDbGllbnQgeworICAgICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoVVJMQmFyKiwg
Y29uc3QgY2hhciopPiBvbkRlY2lkZVVSTDsKKyAgICB9OworCisgICAgdm9pZCBzZXRDbGllbnQo
Q2xpZW50JiYpOworCitwcml2YXRlOgorICAgIHZvaWQgdXBkYXRlU2VsZigpIG92ZXJyaWRlOwor
ICAgIGJvb2wgb25Nb3VzZU1vdmUodG9vbGtpdHRlbjo6SW50UG9pbnQpIG92ZXJyaWRlOworICAg
IGJvb2wgb25LZXlEb3duKGludDMyX3QgdmlydHVhbEtleUNvZGUpIG92ZXJyaWRlOworICAgIHZv
aWQgb25TZWxlY3QoKTsKKworICAgIENsaWVudCBtX2NsaWVudDsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8dG9vbGtpdHRlbjo6SW1lRGlhbG9nPiBtX2ltZURpYWxvZzsKK307CmRpZmYgLS1naXQgYS9U
b29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9XZWJDb250ZXh0LmNwcCBiL1Rvb2xzL01pbmlC
cm93c2VyL3BsYXlzdGF0aW9uL1dlYkNvbnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg5N2I5OGM0Mjk0
MTBiMTUwNWMyNWU2ZWNlODVlNjk5MWUwZDViZTgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9N
aW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9XZWJDb250ZXh0LmNwcApAQCAtMCwwICsxLDExMCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQg
SW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiV2ViQ29udGV4dC5oIgorCisjaW5jbHVkZSAiU3Ry
aW5nVXRpbHMuaCIKKyNpbmNsdWRlIDxXZWJLaXQvV0tDb250ZXh0Q29uZmlndXJhdGlvblBsYXlT
dGF0aW9uLmg+CisjaW5jbHVkZSA8V2ViS2l0L1dLQ29udGV4dFByaXZhdGUuaD4KKyNpbmNsdWRl
IDxXZWJLaXQvV0tQcmVmZXJlbmNlc1JlZi5oPgorI2luY2x1ZGUgPFdlYktpdC9XS1ByZWZlcmVu
Y2VzUmVmUHJpdmF0ZS5oPgorI2luY2x1ZGUgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVDb25m
aWd1cmF0aW9uUmVmLmg+CisjaW5jbHVkZSA8V2ViS2l0L1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5o
PgorI2luY2x1ZGUgPFdlYktpdC9XS1dlYnNpdGVEYXRhU3RvcmVSZWZDdXJsLmg+CisKKyNkZWZp
bmUgTUFLRV9QUk9DRVNTX1BBVEgoeCkgIi9hcHAwLyIgI3ggIi5zZWxmIgorCitzdGQ6OndlYWtf
cHRyPFdlYkNvbnRleHQ+IFdlYkNvbnRleHQ6OnNfaW5zdGFuY2U7CisKK3N0ZDo6c2hhcmVkX3B0
cjxXZWJDb250ZXh0PiBXZWJDb250ZXh0OjpzaW5nbGV0b24oKQoreworICAgIGF1dG8gcmV0ID0g
c19pbnN0YW5jZS5sb2NrKCk7CisgICAgaWYgKCFyZXQpIHsKKyAgICAgICAgcmV0ID0gc3RkOjpz
aGFyZWRfcHRyPFdlYkNvbnRleHQ+KG5ldyBXZWJDb250ZXh0KCkpOworICAgICAgICBzX2luc3Rh
bmNlID0gcmV0OworICAgIH0KKyAgICByZXR1cm4gc19pbnN0YW5jZS5sb2NrKCk7Cit9CisKK1dl
YkNvbnRleHQ6OldlYkNvbnRleHQoKQoreworICAgIFdLUmV0YWluUHRyPFdLQ29udGV4dENvbmZp
Z3VyYXRpb25SZWY+IGNvbnRleHRDb25maWd1cmF0aW9uID0gYWRvcHRXSyhXS0NvbnRleHRDb25m
aWd1cmF0aW9uQ3JlYXRlKCkpOworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3ZWJQcm9j
ZXNzUGF0aCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoTUFLRV9QUk9D
RVNTX1BBVEgoV2ViUHJvY2VzcykpKTsKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbmV0
d29ya1Byb2Nlc3NQYXRoID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhN
QUtFX1BST0NFU1NfUEFUSChOZXR3b3JrUHJvY2VzcykpKTsKKyAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gYXBwbGljYXRpb25DYWNoZURpcmVjdG9yeSA9IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIi9kYXRhL21pbmlicm93c2VyL0FwcGxpY2F0aW9uQ2FjaGUiKSk7
CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG5ldHdvcmtDYWNoZURpcmVjdG9yeSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIi9kYXRhL21pbmlicm93c2VyL05l
dHdvcmtDYWNoZSIpKTsKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaW5kZXhlZERCRGly
ZWN0b3J5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiL2RhdGEvbWlu
aWJyb3dzZXIvSW5kZXhlZERCIikpOworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBsb2Nh
bFN0b3JhZ2VEaXJlY3RvcnkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCIvZGF0YS9taW5pYnJvd3Nlci9Mb2NhbFN0b3JhZ2UiKSk7CisgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHdlYlNRTERpcmVjdG9yeSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIi9kYXRhL21pbmlicm93c2VyL1dlYlNRTCIpKTsKKyAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gY2FjaGVTdG9yYWdlRGlyZWN0b3J5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiL2RhdGEvbWluaWJyb3dzZXIvQ2FjaGVTdHJvYWdlIikpOworICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZWRpYUtleVN0b3JhZ2VEaXJlY3RvcnkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIvZGF0YS9taW5pYnJvd3Nlci9NZWRp
YUtleSIpKTsKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gcmVzb3VyY2VMb2FkU3RhdGlz
dGljc0RpcmVjdG9yeSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIi9k
YXRhL21pbmlicm93c2VyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3MiKSk7CisgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkgPSBhZG9w
dFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIvZGF0YS9taW5pYnJvd3Nlci9TZXJ2
aWNlV29ya2VyUmVnaXN0cmF0aW9uIikpOworCisgICAgV0tDb250ZXh0Q29uZmlndXJhdGlvblNl
dFVzZXJJZChjb250ZXh0Q29uZmlndXJhdGlvbi5nZXQoKSwgLTEpOworICAgIFdLQ29udGV4dENv
bmZpZ3VyYXRpb25TZXRXZWJQcm9jZXNzUGF0aChjb250ZXh0Q29uZmlndXJhdGlvbi5nZXQoKSwg
d2ViUHJvY2Vzc1BhdGguZ2V0KCkpOworICAgIFdLQ29udGV4dENvbmZpZ3VyYXRpb25TZXROZXR3
b3JrUHJvY2Vzc1BhdGgoY29udGV4dENvbmZpZ3VyYXRpb24uZ2V0KCksIG5ldHdvcmtQcm9jZXNz
UGF0aC5nZXQoKSk7CisKKyAgICBhdXRvIGRhdGFTdG9yZUNvbmZpZ3VyYXRpb24gPSBhZG9wdFdL
KFdLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb25DcmVhdGUoKSk7CisgICAgV0tXZWJzaXRl
RGF0YVN0b3JlQ29uZmlndXJhdGlvblNldEFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkoZGF0YVN0
b3JlQ29uZmlndXJhdGlvbi5nZXQoKSwgYXBwbGljYXRpb25DYWNoZURpcmVjdG9yeS5nZXQoKSk7
CisgICAgV0tXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvblNldE5ldHdvcmtDYWNoZURpcmVj
dG9yeShkYXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpLCBuZXR3b3JrQ2FjaGVEaXJlY3Rvcnku
Z2V0KCkpOworICAgIFdLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb25TZXRJbmRleGVkREJE
YXRhYmFzZURpcmVjdG9yeShkYXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpLCBpbmRleGVkREJE
aXJlY3RvcnkuZ2V0KCkpOworICAgIFdLV2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb25TZXRM
b2NhbFN0b3JhZ2VEaXJlY3RvcnkoZGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQoKSwgbG9jYWxT
dG9yYWdlRGlyZWN0b3J5LmdldCgpKTsKKyAgICBXS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0
aW9uU2V0V2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkoZGF0YVN0b3JlQ29uZmlndXJhdGlvbi5nZXQo
KSwgd2ViU1FMRGlyZWN0b3J5LmdldCgpKTsKKyAgICBXS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1
cmF0aW9uU2V0Q2FjaGVTdG9yYWdlRGlyZWN0b3J5KGRhdGFTdG9yZUNvbmZpZ3VyYXRpb24uZ2V0
KCksIGNhY2hlU3RvcmFnZURpcmVjdG9yeS5nZXQoKSk7CisgICAgV0tXZWJzaXRlRGF0YVN0b3Jl
Q29uZmlndXJhdGlvblNldE1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkoZGF0YVN0b3JlQ29uZmln
dXJhdGlvbi5nZXQoKSwgbWVkaWFLZXlTdG9yYWdlRGlyZWN0b3J5LmdldCgpKTsKKyAgICBXS1dl
YnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uU2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVj
dG9yeShkYXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpLCByZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGlyZWN0b3J5LmdldCgpKTsKKyAgICBXS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uU2V0
U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeShkYXRhU3RvcmVDb25maWd1cmF0aW9u
LmdldCgpLCBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5LmdldCgpKTsKKyAgICBX
S1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uU2V0TmV0d29ya0NhY2hlU3BlY3VsYXRpdmVW
YWxpZGF0aW9uRW5hYmxlZChkYXRhU3RvcmVDb25maWd1cmF0aW9uLmdldCgpLCB0cnVlKTsKKyAg
ICBXS1dlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uU2V0VGVzdGluZ1Nlc3Npb25FbmFibGVk
KGRhdGFTdG9yZUNvbmZpZ3VyYXRpb24uZ2V0KCksIHRydWUpOworICAgIFdLV2Vic2l0ZURhdGFT
dG9yZUNvbmZpZ3VyYXRpb25TZXRTdGFsZVdoaWxlUmV2YWxpZGF0ZUVuYWJsZWQoZGF0YVN0b3Jl
Q29uZmlndXJhdGlvbi5nZXQoKSwgdHJ1ZSk7CisgICAgbV93ZWJzaXRlRGF0YVN0b3JlID0gV0tX
ZWJzaXRlRGF0YVN0b3JlQ3JlYXRlV2l0aENvbmZpZ3VyYXRpb24oZGF0YVN0b3JlQ29uZmlndXJh
dGlvbi5nZXQoKSk7CisKKyAgICBtX2NvbnRleHQgPSBhZG9wdFdLKFdLQ29udGV4dENyZWF0ZVdp
dGhDb25maWd1cmF0aW9uKGNvbnRleHRDb25maWd1cmF0aW9uLmdldCgpKSk7CisgICAgV0tDb250
ZXh0U2V0UHJpbWFyeVdlYnNpdGVEYXRhU3RvcmUobV9jb250ZXh0LmdldCgpLCBtX3dlYnNpdGVE
YXRhU3RvcmUuZ2V0KCkpOworICAgIFdLQ29udGV4dFNldFVzZXNTaW5nbGVXZWJQcm9jZXNzKG1f
Y29udGV4dC5nZXQoKSwgdHJ1ZSk7CisKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZ3Jv
dXBOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRGVmYXVsdCIp
KTsKKyAgICBtX3BhZ2VHcm91cCA9IGFkb3B0V0soV0tQYWdlR3JvdXBDcmVhdGVXaXRoSWRlbnRp
Zmllcihncm91cE5hbWUuZ2V0KCkpKTsKKworICAgIG1fcHJlZmVyZW5jZXNNYXN0ZXIgPSBhZG9w
dFdLKFdLUHJlZmVyZW5jZXNDcmVhdGUoKSk7CisgICAgV0tQcmVmZXJlbmNlc1NldEZ1bGxTY3Jl
ZW5FbmFibGVkKG1fcHJlZmVyZW5jZXNNYXN0ZXIuZ2V0KCksIHRydWUpOworICAgIFdLUHJlZmVy
ZW5jZXNTZXRETlNQcmVmZXRjaGluZ0VuYWJsZWQobV9wcmVmZXJlbmNlc01hc3Rlci5nZXQoKSwg
dHJ1ZSk7CisgICAgV0tQcmVmZXJlbmNlc1NldE5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKG1fcHJl
ZmVyZW5jZXNNYXN0ZXIuZ2V0KCksIGZhbHNlKTsKK30KKworV2ViQ29udGV4dDo6fldlYkNvbnRl
eHQoKQoreworfQorCit2b2lkIFdlYkNvbnRleHQ6OmFkZFdpbmRvdyhXZWJWaWV3V2luZG93KiB3
aW5kb3cpCit7CisgICAgbV93aW5kb3dzLnB1c2hfYmFjayh3aW5kb3cpOworfQorCit2b2lkIFdl
YkNvbnRleHQ6OnJlbW92ZVdpbmRvdyhXZWJWaWV3V2luZG93KiB3aW5kb3cpCit7CisgICAgbV93
aW5kb3dzLnJlbW92ZSh3aW5kb3cpOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIv
cGxheXN0YXRpb24vV2ViQ29udGV4dC5oIGIvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRpb24v
V2ViQ29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZjMDNjMjFmMzFkMjIxMGViODkxZmIxMWMzYzg0MTc0
ZTk2NTk1ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlv
bi9XZWJDb250ZXh0LmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgPFdlYktpdC9XS0NvbnRleHQuaD4KKyNpbmNsdWRlIDxXZWJLaXQv
V0tQYWdlQ29uZmlndXJhdGlvblJlZi5oPgorI2luY2x1ZGUgPFdlYktpdC9XS1BhZ2VHcm91cC5o
PgorI2luY2x1ZGUgPFdlYktpdC9XS1JldGFpblB0ci5oPgorI2luY2x1ZGUgPGxpc3Q+CisKK2Ns
YXNzIFdlYlZpZXdXaW5kb3c7CisKK2NsYXNzIFdlYkNvbnRleHQgeworcHJvdGVjdGVkOgorICAg
IFdlYkNvbnRleHQoKTsKK3B1YmxpYzoKKyAgICB+V2ViQ29udGV4dCgpOworICAgIHN0YXRpYyBz
dGQ6OnNoYXJlZF9wdHI8V2ViQ29udGV4dD4gc2luZ2xldG9uKCk7CisKKyAgICBXS0NvbnRleHRS
ZWYgY29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQorICAgIFdLUGFnZUdyb3Vw
UmVmIHBhZ2VHcm91cCgpIHsgcmV0dXJuIG1fcGFnZUdyb3VwLmdldCgpOyB9CisgICAgV0tQcmVm
ZXJlbmNlc1JlZiBwcmVmZXJlbmNlcygpIHsgcmV0dXJuIG1fcHJlZmVyZW5jZXNNYXN0ZXIuZ2V0
KCk7IH0KKyAgICBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgd2Vic2l0ZURhdGFTdG9yZSgpIHsgcmV0
dXJuIG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKTsgfQorCisgICAgdm9pZCBhZGRXaW5kb3coV2Vi
Vmlld1dpbmRvdyopOworICAgIHZvaWQgcmVtb3ZlV2luZG93KFdlYlZpZXdXaW5kb3cqKTsKKwor
cHJpdmF0ZToKKyAgICBzdGF0aWMgc3RkOjp3ZWFrX3B0cjxXZWJDb250ZXh0PiBzX2luc3RhbmNl
OworICAgIFdLUmV0YWluUHRyPFdLQ29udGV4dFJlZj4gbV9jb250ZXh0OworICAgIFdLUmV0YWlu
UHRyPFdLUGFnZUdyb3VwUmVmPiBtX3BhZ2VHcm91cDsKKyAgICBXS1JldGFpblB0cjxXS1ByZWZl
cmVuY2VzUmVmPiBtX3ByZWZlcmVuY2VzTWFzdGVyOworICAgIFdLUmV0YWluUHRyPFdLV2Vic2l0
ZURhdGFTdG9yZVJlZj4gbV93ZWJzaXRlRGF0YVN0b3JlOworICAgIHN0ZDo6bGlzdDxXZWJWaWV3
V2luZG93Kj4gbV93aW5kb3dzOworfTsKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3Bs
YXlzdGF0aW9uL1dlYlZpZXdXaW5kb3cuY3BwIGIvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRp
b24vV2ViVmlld1dpbmRvdy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2Y2YTBkZTk3YmZlODQxNjIxYTBlYzBk
ZmIxYjI3NzEzMmJiY2QzMwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3Bs
YXlzdGF0aW9uL1dlYlZpZXdXaW5kb3cuY3BwCkBAIC0wLDAgKzEsNDM1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJXZWJWaWV3V2luZG93LmgiCisKKyNpbmNsdWRlICJNYWluV2luZG93
LmgiCisjaW5jbHVkZSAiU3RyaW5nVXRpbHMuaCIKKyNpbmNsdWRlICJUb29sa2l0dGVuVXRpbHMu
aCIKKyNpbmNsdWRlIDxLZXlib2FyZEV2ZW50cy5oPgorI2luY2x1ZGUgPFdlYktpdC9XS1BhZ2Uu
aD4KKyNpbmNsdWRlIDxXZWJLaXQvV0tQYWdlUHJpdmF0ZVBsYXlTdGF0aW9uLmg+CisjaW5jbHVk
ZSA8V2ViS2l0L1dLUHJlZmVyZW5jZXNSZWYuaD4KKyNpbmNsdWRlIDxXZWJLaXQvV0tQcmVmZXJl
bmNlc1JlZlByaXZhdGUuaD4KKyNpbmNsdWRlIDxXZWJLaXQvV0tVUkwuaD4KKyNpbmNsdWRlIDxj
YWlyby9jYWlyby5oPgorI2luY2x1ZGUgPG1hcD4KKyNpbmNsdWRlIDx0b29sa2l0dGVuL0FwcGxp
Y2F0aW9uLmg+CisjaW5jbHVkZSA8dG9vbGtpdHRlbi9DdXJzb3IuaD4KKyNpbmNsdWRlIDx0b29s
a2l0dGVuL01lc3NhZ2VEaWFsb2cuaD4KKwordXNpbmcgbmFtZXNwYWNlIHRvb2xraXR0ZW47CisK
K2lubGluZSBXZWJWaWV3V2luZG93KiB0b1dlYlZpZXcoY29uc3Qgdm9pZCogY2xpZW50SW5mbykK
K3sKKyAgICByZXR1cm4gY29uc3RfY2FzdDxXZWJWaWV3V2luZG93Kj4oc3RhdGljX2Nhc3Q8Y29u
c3QgV2ViVmlld1dpbmRvdyo+KGNsaWVudEluZm8pKTsKK30KKworc3RhdGljIHZvaWQgc2V0Q3Vy
c29yKFdLQ3Vyc29yVHlwZSBjdXJzb3JUeXBlKQoreworICAgIHN3aXRjaCAoY3Vyc29yVHlwZSkg
eworICAgIGNhc2Uga1dLQ3Vyc29yVHlwZUhhbmQ6CisgICAgICAgIEN1cnNvcjo6c2luZ2xldG9u
KCkuc2V0VHlwZShDdXJzb3I6OmtUeXBlSGFuZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
a1dLQ3Vyc29yVHlwZVBvaW50ZXI6CisgICAgZGVmYXVsdDoKKyAgICAgICAgQ3Vyc29yOjpzaW5n
bGV0b24oKS5zZXRUeXBlKEN1cnNvcjo6a1R5cGVQb2ludGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQorCitzdGQ6OnVuaXF1ZV9wdHI8V2ViVmlld1dpbmRvdz4gV2ViVmlld1dpbmRvdzo6
Y3JlYXRlKENsaWVudCYmIHdpbmRvd0NsaWVudCwgV0tQYWdlQ29uZmlndXJhdGlvblJlZiBjb25m
aWd1cmF0aW9uUmVmKQoreworICAgIGF1dG8gY29udGV4dCA9IFdlYkNvbnRleHQ6OnNpbmdsZXRv
bigpOworCisgICAgaWYgKGNvbmZpZ3VyYXRpb25SZWYpCisgICAgICAgIHJldHVybiBzdGQ6Om1h
a2VfdW5pcXVlPFdlYlZpZXdXaW5kb3c+KGNvbmZpZ3VyYXRpb25SZWYsIHN0ZDo6bW92ZSh3aW5k
b3dDbGllbnQpKTsKKworICAgIFdLUmV0YWluUHRyPFdLUGFnZUNvbmZpZ3VyYXRpb25SZWY+IGNv
bmZpZ3VyYXRpb24gPSBhZG9wdFdLKFdLUGFnZUNvbmZpZ3VyYXRpb25DcmVhdGUoKSk7CisgICAg
V0tQYWdlQ29uZmlndXJhdGlvblNldENvbnRleHQoY29uZmlndXJhdGlvbi5nZXQoKSwgY29udGV4
dC0+Y29udGV4dCgpKTsKKyAgICBXS1BhZ2VDb25maWd1cmF0aW9uU2V0UGFnZUdyb3VwKGNvbmZp
Z3VyYXRpb24uZ2V0KCksIGNvbnRleHQtPnBhZ2VHcm91cCgpKTsKKyAgICByZXR1cm4gc3RkOjpt
YWtlX3VuaXF1ZTxXZWJWaWV3V2luZG93Pihjb25maWd1cmF0aW9uLmdldCgpLCBzdGQ6Om1vdmUo
d2luZG93Q2xpZW50KSk7Cit9CisKK1dlYlZpZXdXaW5kb3c6OldlYlZpZXdXaW5kb3coV0tQYWdl
Q29uZmlndXJhdGlvblJlZiBjb25maWd1cmF0aW9uLCBDbGllbnQmJiB3aW5kb3dDbGllbnQpCisg
ICAgOiBtX2NsaWVudChzdGQ6Om1vdmUod2luZG93Q2xpZW50KSkKK3sKKyAgICAvLyBGSVhNRTog
U2hvdWxkIGNoaWxkIHNoYXJlIHRoZSBwcmVmZXJlbmNlIHdpdGggcGFyZW50PworICAgIG1fY29u
dGV4dCA9IFdlYkNvbnRleHQ6OnNpbmdsZXRvbigpOworICAgIG1fcHJlZmVyZW5jZXMgPSBXS1By
ZWZlcmVuY2VzQ3JlYXRlQ29weShtX2NvbnRleHQtPnByZWZlcmVuY2VzKCkpOworICAgIFdLUGFn
ZUNvbmZpZ3VyYXRpb25TZXRQcmVmZXJlbmNlcyhjb25maWd1cmF0aW9uLCBtX3ByZWZlcmVuY2Vz
LmdldCgpKTsKKworICAgIFdLUHJlZmVyZW5jZXNTZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5h
YmxlZChtX3ByZWZlcmVuY2VzLmdldCgpLCBmYWxzZSk7CisgICAgV0tQcmVmZXJlbmNlc1NldEZ1
bGxTY3JlZW5FbmFibGVkKG1fcHJlZmVyZW5jZXMuZ2V0KCksIHRydWUpOworCisgICAgbV92aWV3
ID0gV0tWaWV3Q3JlYXRlKGNvbmZpZ3VyYXRpb24pOworICAgIG1fY29udGV4dC0+YWRkV2luZG93
KHRoaXMpOworCisgICAgV0tWaWV3Q2xpZW50VjAgdmlld0NsaWVudCB7CisgICAgICAgIHsgMCwg
dGhpcyB9LAorCisgICAgICAgIC8vIHNldFZpZXdOZWVkc0Rpc3BsYXkKKyAgICAgICAgW10oV0tW
aWV3UmVmLCBXS1JlY3QgcmVjdCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykgeworICAgICAgICAg
ICAgdG9XZWJWaWV3KGNsaWVudEluZm8pLT51cGRhdGVTdXJmYWNlKHRvVEtSZWN0KHJlY3QpKTsK
KyAgICAgICAgfSwKKworICAgICAgICAvLyBlbnRlckZ1bGxTY3JlZW4KKyAgICAgICAgW10oV0tW
aWV3UmVmIHZpZXcsIGNvbnN0IHZvaWQqKSB7CisgICAgICAgICAgICBXS1ZpZXdXaWxsRW50ZXJG
dWxsU2NyZWVuKHZpZXcpOworICAgICAgICAgICAgV0tWaWV3RGlkRW50ZXJGdWxsU2NyZWVuKHZp
ZXcpOworICAgICAgICB9LAorICAgICAgICAvLyBleGl0RnVsbFNjcmVlbgorICAgICAgICBbXShX
S1ZpZXdSZWYgdmlldywgY29uc3Qgdm9pZCopIHsKKyAgICAgICAgICAgIFdLVmlld1dpbGxFeGl0
RnVsbFNjcmVlbih2aWV3KTsKKyAgICAgICAgICAgIFdLVmlld0RpZEV4aXRGdWxsU2NyZWVuKHZp
ZXcpOworICAgICAgICB9LAorICAgICAgICBudWxscHRyLCAvLyBjbG9zZUZ1bGxTY3JlZW4KKyAg
ICAgICAgbnVsbHB0ciwgLy8gYmVnYW5FbnRlckZ1bGxTY3JlZW4KKyAgICAgICAgbnVsbHB0ciwg
Ly8gYmVnYW5FeGl0RnVsbFNjcmVlbgorCisgICAgICAgIC8vIHNldEN1cnNvcgorICAgICAgICBb
XShXS1ZpZXdSZWYsIFdLQ3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBjb25zdCB2b2lkKikgeworICAg
ICAgICAgICAgc2V0Q3Vyc29yKGN1cnNvclR5cGUpOworICAgICAgICB9CisgICAgfTsKKyAgICBX
S1ZpZXdTZXRWaWV3Q2xpZW50KG1fdmlldy5nZXQoKSwgJnZpZXdDbGllbnQuYmFzZSk7CisKKyAg
ICBXS1BhZ2VTdGF0ZUNsaWVudFYwIHBhZ2VTdGF0ZUNsaWVudCB7CisgICAgICAgIHsgMCwgdGhp
cyB9LAorCisgICAgICAgIG51bGxwdHIsIC8vIHdpbGxDaGFuZ2VJc0xvYWRpbmcKKyAgICAgICAg
bnVsbHB0ciwgLy8gZGlkQ2hhbmdlSXNMb2FkaW5nCisgICAgICAgIG51bGxwdHIsIC8vIHdpbGxD
aGFuZ2VUaXRsZQorICAgICAgICAvLyBkaWRDaGFuZ2VUaXRsZQorICAgICAgICBbXShjb25zdCB2
b2lkKiBjbGllbnRJbmZvKSB7CisgICAgICAgICAgICB0b1dlYlZpZXcoY2xpZW50SW5mbyktPnVw
ZGF0ZVRpdGxlKCk7CisgICAgICAgIH0sCisgICAgICAgIG51bGxwdHIsIC8vIHdpbGxDaGFuZ2VB
Y3RpdmVVUkwKKyAgICAgICAgLy8gZGlkQ2hhbmdlQWN0aXZlVVJMCisgICAgICAgIFtdKGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pIHsKKyAgICAgICAgICAgIHRvV2ViVmlldyhjbGllbnRJbmZvKS0+
dXBkYXRlVVJMKCk7CisgICAgICAgIH0sCisgICAgICAgIG51bGxwdHIsIC8vIHdpbGxDaGFuZ2VI
YXNPbmx5U2VjdXJlQ29udGVudAorICAgICAgICBudWxscHRyLCAvLyBkaWRDaGFuZ2VIYXNPbmx5
U2VjdXJlQ29udGVudAorICAgICAgICBudWxscHRyLCAvLyB3aWxsQ2hhbmdlRXN0aW1hdGVkUHJv
Z3Jlc3MKKyAgICAgICAgLy8gZGlkQ2hhbmdlRXN0aW1hdGVkUHJvZ3Jlc3MKKyAgICAgICAgW10o
Y29uc3Qgdm9pZCogY2xpZW50SW5mbykgeworICAgICAgICAgICAgdG9XZWJWaWV3KGNsaWVudElu
Zm8pLT51cGRhdGVQcm9ncmVzcygpOworICAgICAgICB9LAorICAgICAgICBudWxscHRyLCAvLyB3
aWxsQ2hhbmdlQ2FuR29CYWNrCisgICAgICAgIG51bGxwdHIsIC8vIGRpZENoYW5nZUNhbkdvQmFj
aworICAgICAgICBudWxscHRyLCAvLyB3aWxsQ2hhbmdlQ2FuR29Gb3J3YXJkCisgICAgICAgIG51
bGxwdHIsIC8vIGRpZENoYW5nZUNhbkdvRm9yd2FyZAorICAgICAgICBudWxscHRyLCAvLyB3aWxs
Q2hhbmdlTmV0d29ya1JlcXVlc3RzSW5Qcm9ncmVzcworICAgICAgICBudWxscHRyLCAvLyBkaWRD
aGFuZ2VOZXR3b3JrUmVxdWVzdHNJblByb2dyZXNzCisgICAgICAgIG51bGxwdHIsIC8vIHdpbGxD
aGFuZ2VDZXJ0aWZpY2F0ZUluZm8KKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkQ2hhbmdlQ2VydGlm
aWNhdGVJbmZvCisgICAgICAgIG51bGxwdHIsIC8vIHdpbGxDaGFuZ2VXZWJQcm9jZXNzSXNSZXNw
b25zaXZlCisgICAgICAgIG51bGxwdHIsIC8vIGRpZENoYW5nZVdlYlByb2Nlc3NJc1Jlc3BvbnNp
dmUKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkU3dhcFdlYlByb2Nlc3NlcworICAgIH07CisgICAg
V0tQYWdlU2V0UGFnZVN0YXRlQ2xpZW50KHBhZ2UoKSwgJnBhZ2VTdGF0ZUNsaWVudC5iYXNlKTsK
KworICAgIFdLUGFnZVVJQ2xpZW50VjYgdWlDbGllbnQgeworICAgICAgICB7IDYsIHRoaXMgfSwK
KyAgICAgICAgbnVsbHB0ciwgLy8gY3JlYXRlTmV3UGFnZV9kZXByZWNhdGVkRm9yVXNlV2l0aFYw
CisgICAgICAgIG51bGxwdHIsIC8vIHNob3dQYWdlCisgICAgICAgIG51bGxwdHIsIC8vIGNsb3Nl
CisgICAgICAgIG51bGxwdHIsIC8vIHRha2VGb2N1cworICAgICAgICBudWxscHRyLCAvLyBmb2N1
cworICAgICAgICBudWxscHRyLCAvLyB1bmZvY3VzCisgICAgICAgIG51bGxwdHIsIC8vIHJ1bkph
dmFTY3JpcHRBbGVydF9kZXByZWNhdGVkRm9yVXNlV2l0aFYwCisgICAgICAgIG51bGxwdHIsIC8v
IHJ1bkphdmFTY3JpcHRDb25maXJtX2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjAKKyAgICAgICAgbnVs
bHB0ciwgLy8gcnVuSmF2YVNjcmlwdFByb21wdF9kZXByZWNhdGVkRm9yVXNlV2l0aFYwCisgICAg
ICAgIG51bGxwdHIsIC8vIHNldFN0YXR1c1RleHQKKyAgICAgICAgbnVsbHB0ciwgLy8gbW91c2VE
aWRNb3ZlT3ZlckVsZW1lbnRfZGVwcmVjYXRlZEZvclVzZVdpdGhWMAorICAgICAgICBudWxscHRy
LCAvLyBtaXNzaW5nUGx1Z2luQnV0dG9uQ2xpY2tlZF9kZXByZWNhdGVkRm9yVXNlV2l0aFYwCisg
ICAgICAgIG51bGxwdHIsIC8vIGRpZE5vdEhhbmRsZUtleUV2ZW50CisgICAgICAgIG51bGxwdHIs
IC8vIGRpZE5vdEhhbmRsZVdoZWVsRXZlbnQKKyAgICAgICAgbnVsbHB0ciwgLy8gdG9vbGJhcnNB
cmVWaXNpYmxlCisgICAgICAgIG51bGxwdHIsIC8vIHNldFRvb2xiYXJzQXJlVmlzaWJsZQorICAg
ICAgICBudWxscHRyLCAvLyBtZW51QmFySXNWaXNpYmxlCisgICAgICAgIG51bGxwdHIsIC8vIHNl
dE1lbnVCYXJJc1Zpc2libGUKKyAgICAgICAgbnVsbHB0ciwgLy8gc3RhdHVzQmFySXNWaXNpYmxl
CisgICAgICAgIG51bGxwdHIsIC8vIHNldFN0YXR1c0JhcklzVmlzaWJsZQorICAgICAgICBudWxs
cHRyLCAvLyBpc1Jlc2l6YWJsZQorICAgICAgICBudWxscHRyLCAvLyBzZXRJc1Jlc2l6YWJsZQor
ICAgICAgICBudWxscHRyLCAvLyBnZXRXaW5kb3dGcmFtZQorICAgICAgICBudWxscHRyLCAvLyBz
ZXRXaW5kb3dGcmFtZQorICAgICAgICBudWxscHRyLCAvLyBydW5CZWZvcmVVbmxvYWRDb25maXJt
UGFuZWwKKyAgICAgICAgbnVsbHB0ciwgLy8gZGlkRHJhdworICAgICAgICBudWxscHRyLCAvLyBw
YWdlRGlkU2Nyb2xsCisgICAgICAgIG51bGxwdHIsIC8vIGV4Y2VlZGVkRGF0YWJhc2VRdW90YQor
ICAgICAgICBudWxscHRyLCAvLyBydW5PcGVuUGFuZWwKKyAgICAgICAgbnVsbHB0ciwgLy8gZGVj
aWRlUG9saWN5Rm9yR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdAorICAgICAgICBudWxscHRy
LCAvLyBoZWFkZXJIZWlnaHQKKyAgICAgICAgbnVsbHB0ciwgLy8gZm9vdGVySGVpZ2h0CisgICAg
ICAgIG51bGxwdHIsIC8vIGRyYXdIZWFkZXIKKyAgICAgICAgbnVsbHB0ciwgLy8gZHJhd0Zvb3Rl
cgorICAgICAgICBudWxscHRyLCAvLyBwcmludEZyYW1lCisgICAgICAgIG51bGxwdHIsIC8vIHJ1
bk1vZGFsCisgICAgICAgIG51bGxwdHIsIC8vIFVzZWQgdG8gYmUgZGlkQ29tcGxldGVSdWJiZXJC
YW5kRm9yTWFpbkZyYW1lCisgICAgICAgIG51bGxwdHIsIC8vIHNhdmVEYXRhVG9GaWxlSW5Eb3du
bG9hZHNGb2xkZXIKKyAgICAgICAgbnVsbHB0ciwgLy8gc2hvdWxkSW50ZXJydXB0SmF2YVNjcmlw
dF91bmF2YWlsYWJsZQorICAgICAgICBudWxscHRyLCAvLyBjcmVhdGVOZXdQYWdlX2RlcHJlY2F0
ZWRGb3JVc2VXaXRoVjEKKyAgICAgICAgbnVsbHB0ciwgLy8gbW91c2VEaWRNb3ZlT3ZlckVsZW1l
bnQKKyAgICAgICAgbnVsbHB0ciwgLy8gZGVjaWRlUG9saWN5Rm9yTm90aWZpY2F0aW9uUGVybWlz
c2lvblJlcXVlc3QKKyAgICAgICAgbnVsbHB0ciwgLy8gdW5hdmFpbGFibGVQbHVnaW5CdXR0b25D
bGlja2VkX2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjEKKyAgICAgICAgbnVsbHB0ciwgLy8gc2hvd0Nv
bG9yUGlja2VyCisgICAgICAgIG51bGxwdHIsIC8vIGhpZGVDb2xvclBpY2tlcgorICAgICAgICBu
dWxscHRyLCAvLyB1bmF2YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQKKyAgICAgICAgbnVsbHB0
ciwgLy8gcGlubmVkU3RhdGVEaWRDaGFuZ2UKKyAgICAgICAgbnVsbHB0ciwgLy8gVXNlZCB0byBi
ZSBkaWRCZWdpblRyYWNraW5nUG90ZW50aWFsTG9uZ01vdXNlUHJlc3MKKyAgICAgICAgbnVsbHB0
ciwgLy8gVXNlZCB0byBiZSBkaWRSZWNvZ25pemVMb25nTW91c2VQcmVzcworICAgICAgICBudWxs
cHRyLCAvLyBVc2VkIHRvIGJlIGRpZENhbmNlbFRyYWNraW5nUG90ZW50aWFsTG9uZ01vdXNlUHJl
c3MKKyAgICAgICAgbnVsbHB0ciwgLy8gaXNQbGF5aW5nQXVkaW9EaWRDaGFuZ2UKKyAgICAgICAg
bnVsbHB0ciwgLy8gZGVjaWRlUG9saWN5Rm9yVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3QKKyAg
ICAgICAgbnVsbHB0ciwgLy8gZGlkQ2xpY2tBdXRvRmlsbEJ1dHRvbgorICAgICAgICBudWxscHRy
LCAvLyBydW5KYXZhU2NyaXB0QWxlcnRfZGVwcmVjYXRlZEZvclVzZVdpdGhWNQorICAgICAgICBu
dWxscHRyLCAvLyBydW5KYXZhU2NyaXB0Q29uZmlybV9kZXByZWNhdGVkRm9yVXNlV2l0aFY1Cisg
ICAgICAgIG51bGxwdHIsIC8vIHJ1bkphdmFTY3JpcHRQcm9tcHRfZGVwcmVjYXRlZEZvclVzZVdp
dGhWNQorICAgICAgICBudWxscHRyLCAvLyBtZWRpYVNlc3Npb25NZXRhZGF0YURpZENoYW5nZQor
ICAgICAgICAvLyBjcmVhdGVOZXdQYWdlCisgICAgICAgIFtdKFdLUGFnZVJlZiBwYWdlLCBXS1Bh
Z2VDb25maWd1cmF0aW9uUmVmIGNvbmZpZ3VyYXRpb24sIFdLTmF2aWdhdGlvbkFjdGlvblJlZiwg
V0tXaW5kb3dGZWF0dXJlc1JlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykgLT5XS1BhZ2VSZWYg
eworICAgICAgICAgICAgcmV0dXJuIHRvV2ViVmlldyhjbGllbnRJbmZvKS0+Y3JlYXRlTmV3UGFn
ZShwYWdlLCBjb25maWd1cmF0aW9uKTsKKyAgICAgICAgfSwKKyAgICAgICAgbnVsbHB0ciwgLy8g
cnVuSmF2YVNjcmlwdEFsZXJ0CisgICAgICAgIG51bGxwdHIsIC8vIHJ1bkphdmFTY3JpcHRDb25m
aXJtCisgICAgICAgIG51bGxwdHIsIC8vIHJ1bkphdmFTY3JpcHRQcm9tcHQKKyAgICAgICAgbnVs
bHB0ciAvLyBjaGVja1VzZXJNZWRpYVBlcm1pc3Npb25Gb3JPcmlnaW4KKyAgICB9OworICAgIFdL
UGFnZVNldFBhZ2VVSUNsaWVudChwYWdlKCksICZ1aUNsaWVudC5iYXNlKTsKK30KKworV2ViVmll
d1dpbmRvdzo6fldlYlZpZXdXaW5kb3coKQoreworICAgIG1fY29udGV4dC0+cmVtb3ZlV2luZG93
KHRoaXMpOworICAgIFdLUGFnZUNsb3NlKHBhZ2UoKSk7Cit9CisKK1dLUGFnZVJlZiBXZWJWaWV3
V2luZG93OjpwYWdlKCkKK3sKKyAgICByZXR1cm4gV0tWaWV3R2V0UGFnZShtX3ZpZXcuZ2V0KCkp
OworfQorCit2b2lkIFdlYlZpZXdXaW5kb3c6OmxvYWRVUkwoY29uc3QgY2hhciogdXJsKQorewor
ICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmxTdHIgPSBhZG9wdFdLKFdLVVJMQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKHVybCkpOworICAgIFdLUGFnZUxvYWRVUkwocGFnZSgpLCB1cmxTdHIuZ2V0
KCkpOworfQorCit2b2lkIFdlYlZpZXdXaW5kb3c6OmdvQmFjaygpCit7CisgICAgV0tQYWdlR29C
YWNrKHBhZ2UoKSk7Cit9CisKK3ZvaWQgV2ViVmlld1dpbmRvdzo6Z29Gb3J3YXJkKCkKK3sKKyAg
ICBXS1BhZ2VHb0ZvcndhcmQocGFnZSgpKTsKK30KKwordm9pZCBXZWJWaWV3V2luZG93OjpyZWxv
YWQoKQoreworICAgIFdLUGFnZVJlbG9hZEZyb21PcmlnaW4ocGFnZSgpKTsKK30KKwordm9pZCBX
ZWJWaWV3V2luZG93Ojp0b2dnbGVab29tRmFjdG9yKCkKK3sKKyAgICBjb25zdCBpbnQgbWF4Wm9v
bUZhY3RvciA9IDM7CisgICAgaW50IG5leHRab29tRmFjdG9yID0gKGludClXS1BhZ2VHZXRQYWdl
Wm9vbUZhY3RvcihwYWdlKCkpICsgMTsKKyAgICBpZiAobmV4dFpvb21GYWN0b3IgPiBtYXhab29t
RmFjdG9yKQorICAgICAgICBuZXh0Wm9vbUZhY3RvciA9IDE7CisKKyAgICBXS1BhZ2VTZXRQYWdl
Wm9vbUZhY3RvcihwYWdlKCksIG5leHRab29tRmFjdG9yKTsKK30KKwordm9pZCBXZWJWaWV3V2lu
ZG93OjpzZXRTaXplKHRvb2xraXR0ZW46OkludFNpemUgc2l6ZSkKK3sKKyAgICBXaWRnZXQ6OnNl
dFNpemUoc2l6ZSk7CisgICAgV0tWaWV3U2V0U2l6ZShtX3ZpZXcuZ2V0KCksIHRvV0tTaXplKHNp
emUpKTsKKworICAgIHNpemVfdCBzdXJmYWNlU2l6ZSA9IGNhaXJvX2Zvcm1hdF9zdHJpZGVfZm9y
X3dpZHRoKENBSVJPX0ZPUk1BVF9BUkdCMzIsIHRoaXMtPm1fc2l6ZS53KSAqIHRoaXMtPm1fc2l6
ZS5oOworICAgIG1fc3VyZmFjZSA9IHN0ZDo6bWFrZV91bmlxdWU8dW5zaWduZWQgY2hhcltdPihz
dXJmYWNlU2l6ZSk7CisgICAgbWVtc2V0KG1fc3VyZmFjZS5nZXQoKSwgMHhmZiwgc3VyZmFjZVNp
emUpOworfQorCitib29sIFdlYlZpZXdXaW5kb3c6Om9uS2V5VXAoaW50MzJfdCB2aXJ0dWFsS2V5
Q29kZSkKK3sKKyAgICBzd2l0Y2ggKHZpcnR1YWxLZXlDb2RlKSB7CisgICAgY2FzZSBWS19SRVRV
Uk46CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIFZLX1RSSUFOR0xFOgorICAgIGNh
c2UgVktfU1FVQVJFOgorICAgIGNhc2UgVktfT1BUSU9OUzoKKyAgICBjYXNlIFZLX0wxOgorICAg
IGNhc2UgVktfUjE6CisgICAgY2FzZSBWS19MMjoKKyAgICBjYXNlIFZLX1IyOgorICAgIGNhc2Ug
VktfTDM6CisgICAgY2FzZSBWS19SMzoKKyAgICAgICAgLy8gSWdub3JlIHRoZXNlIGtleSBjb2Rl
LgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgV0tQYWdlSGFuZGxlS2V5Ym9h
cmRFdmVudChwYWdlKCksIFdLS2V5Ym9hcmRFdmVudE1ha2Uoa1dLRXZlbnRLZXlVcCwga1dLSW5w
dXRUeXBlTm9ybWFsLCAiIiwgMCwga2V5SWRlbnRpZmllckZvcktleUNvZGUodmlydHVhbEtleUNv
ZGUpLCB2aXJ0dWFsS2V5Q29kZSwgLTEsIDAsIDApKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBXZWJWaWV3V2luZG93OjpvbktleURvd24oaW50MzJfdCB2aXJ0dWFsS2V5Q29kZSkKK3sK
KyAgICBzd2l0Y2ggKHZpcnR1YWxLZXlDb2RlKSB7CisgICAgY2FzZSBWS19SRVRVUk46CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIFZLX1RSSUFOR0xFOgorICAgIGNhc2UgVktfU1FV
QVJFOgorICAgIGNhc2UgVktfT1BUSU9OUzoKKyAgICBjYXNlIFZLX0wxOgorICAgIGNhc2UgVktf
UjE6CisgICAgY2FzZSBWS19MMjoKKyAgICBjYXNlIFZLX1IyOgorICAgIGNhc2UgVktfTDM6Cisg
ICAgY2FzZSBWS19SMzoKKyAgICAgICAgLy8gSWdub3JlIHRoZXNlIGtleSBjb2RlLgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIFdLUGFnZUhhbmRsZUtleWJvYXJkRXZlbnQocGFn
ZSgpLCBXS0tleWJvYXJkRXZlbnRNYWtlKGtXS0V2ZW50S2V5RG93biwga1dLSW5wdXRUeXBlTm9y
bWFsLCAiIiwgMCwga2V5SWRlbnRpZmllckZvcktleUNvZGUodmlydHVhbEtleUNvZGUpLCB2aXJ0
dWFsS2V5Q29kZSwgLTEsIDAsIDApKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJW
aWV3V2luZG93Ojpvbk1vdXNlTW92ZSh0b29sa2l0dGVuOjpJbnRQb2ludCBwb2ludCkKK3sKKyAg
ICBwb2ludCA9IGdsb2JhbFRvQ2xpZW50UG9zaXRpb24ocG9pbnQpOworICAgIFdLUGFnZUhhbmRs
ZU1vdXNlRXZlbnQocGFnZSgpLCBXS01vdXNlRXZlbnRNYWtlKGtXS0V2ZW50TW91c2VNb3ZlLCBr
V0tFdmVudE1vdXNlQnV0dG9uTm9CdXR0b24sIFdLUG9pbnRNYWtlKHBvaW50LngsIHBvaW50Lnkp
LCAwLCAwKSk7CisgICAgc2V0Rm9jdXNlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IFdlYlZpZXdXaW5kb3c6Om9uTW91c2VEb3duKHRvb2xraXR0ZW46OkludFBvaW50IHBvaW50KQor
eworICAgIHBvaW50ID0gZ2xvYmFsVG9DbGllbnRQb3NpdGlvbihwb2ludCk7CisKKyAgICBXS1Bh
Z2VIYW5kbGVNb3VzZUV2ZW50KHBhZ2UoKSwgV0tNb3VzZUV2ZW50TWFrZShrV0tFdmVudE1vdXNl
RG93biwga1dLRXZlbnRNb3VzZUJ1dHRvbkxlZnRCdXR0b24sIFdLUG9pbnRNYWtlKHBvaW50Lngs
IHBvaW50LnkpLCAwLCAwKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViVmlld1dp
bmRvdzo6b25Nb3VzZVVwKHRvb2xraXR0ZW46OkludFBvaW50IHBvaW50KQoreworICAgIHBvaW50
ID0gZ2xvYmFsVG9DbGllbnRQb3NpdGlvbihwb2ludCk7CisgICAgV0tQYWdlSGFuZGxlTW91c2VF
dmVudChwYWdlKCksIFdLTW91c2VFdmVudE1ha2Uoa1dLRXZlbnRNb3VzZVVwLCBrV0tFdmVudE1v
dXNlQnV0dG9uTGVmdEJ1dHRvbiwgV0tQb2ludE1ha2UocG9pbnQueCwgcG9pbnQueSksIDAsIDAp
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJWaWV3V2luZG93OjpvbldoZWVsTW92
ZSh0b29sa2l0dGVuOjpJbnRQb2ludCBwb2ludCwgdG9vbGtpdHRlbjo6SW50UG9pbnQgd2hlZWxU
aWNrcykKK3sKKyAgICBwb2ludCA9IGdsb2JhbFRvQ2xpZW50UG9zaXRpb24ocG9pbnQpOworCisg
ICAgaW50IHdoZWVsVGlja3NYID0gd2hlZWxUaWNrcy54OworICAgIGludCB3aGVlbFRpY2tzWSA9
IHdoZWVsVGlja3MueTsKKyAgICBpZiAod2hlZWxUaWNrc1ggfHwgd2hlZWxUaWNrc1kpIHsKKyAg
ICAgICAgaW50IGRlbHRhWCA9IHdoZWVsVGlja3NYICogMTA7CisgICAgICAgIGludCBkZWx0YVkg
PSB3aGVlbFRpY2tzWSAqIDEwOworCisgICAgICAgIFdLUGFnZUhhbmRsZVdoZWVsRXZlbnQocGFn
ZSgpLCBXS1doZWVsRXZlbnRNYWtlKGtXS0V2ZW50V2hlZWwsIFdLUG9pbnRNYWtlKHBvaW50Lngs
IHBvaW50LnkpLCBXS1NpemVNYWtlKGRlbHRhWCwgZGVsdGFZKSwgV0tTaXplTWFrZSh3aGVlbFRp
Y2tzWCwgd2hlZWxUaWNrc1kpLCAwKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViVmlld1dpbmRvdzo6cGFpbnRTZWxmKEludFBv
aW50IHBvc2l0aW9uKQoreworICAgIGlmICghZGlydHlSZWN0cygpLmVtcHR5KCkpIHsKKyAgICAg
ICAgY2Fpcm9fc3VyZmFjZV90KiB3a3ZpZXdTdXJmYWNlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9j
cmVhdGVfZm9yX2RhdGEobV9zdXJmYWNlLmdldCgpLCBDQUlST19GT1JNQVRfQVJHQjMyLCB0aGlz
LT5tX3NpemUudywgdGhpcy0+bV9zaXplLmgsIGNhaXJvX2Zvcm1hdF9zdHJpZGVfZm9yX3dpZHRo
KENBSVJPX0ZPUk1BVF9BUkdCMzIsIHRoaXMtPm1fc2l6ZS53KSk7CisgICAgICAgIHN0ZDo6bGlz
dDx0b29sa2l0dGVuOjpJbnRSZWN0Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkaXJ0eVJlY3RzKCku
YmVnaW4oKTsKKyAgICAgICAgdG9vbGtpdHRlbjo6SW50UmVjdCB1bmlvblJlY3QgPSAqaXQ7Cisg
ICAgICAgIGl0Kys7CisgICAgICAgIHdoaWxlIChpdCAhPSBkaXJ0eVJlY3RzKCkuZW5kKCkpIHsK
KyAgICAgICAgICAgIHVuaW9uUmVjdCArPSAqaXQ7CisgICAgICAgICAgICBpdCsrOworICAgICAg
ICB9CisgICAgICAgIGlmIChjYWlyb19zdXJmYWNlX3N0YXR1cyh3a3ZpZXdTdXJmYWNlKSA9PSBD
QUlST19TVEFUVVNfU1VDQ0VTUykgeworICAgICAgICAgICAgY2Fpcm9fdCogY3IgPSBjYWlyb19j
cmVhdGUodGhpcy0+c3VyZmFjZSgpKTsKKyAgICAgICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihj
ciwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKKyAgICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2Vf
c3VyZmFjZShjciwgd2t2aWV3U3VyZmFjZSwgMCwgMCk7CisgICAgICAgICAgICBjYWlyb19yZWN0
YW5nbGUoY3IsIHVuaW9uUmVjdC5sZWZ0KCksIHVuaW9uUmVjdC50b3AoKSwgdW5pb25SZWN0Lndp
ZHRoKCksIHVuaW9uUmVjdC5oZWlnaHQoKSk7CisgICAgICAgICAgICBjYWlyb19maWxsKGNyKTsK
KyAgICAgICAgICAgIGNhaXJvX2Rlc3Ryb3koY3IpOworICAgICAgICAgICAgY2Fpcm9fc3VyZmFj
ZV9kZXN0cm95KHdrdmlld1N1cmZhY2UpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChtX2Fj
dGl2ZSkKKyAgICAgICAgV2lkZ2V0OjpwYWludFNlbGYocG9zaXRpb24pOworfQorCit2b2lkIFdl
YlZpZXdXaW5kb3c6OnVwZGF0ZVNlbGYoKQoreworfQorCit2b2lkIFdlYlZpZXdXaW5kb3c6OnVw
ZGF0ZVN1cmZhY2UodG9vbGtpdHRlbjo6SW50UmVjdCBkaXJ0eVJlY3QpCit7CisgICAgV0tQYWdl
UGFpbnQocGFnZSgpLCBtX3N1cmZhY2UuZ2V0KCksIFdLU2l6ZU1ha2UodGhpcy0+bV9zaXplLncs
IHRoaXMtPm1fc2l6ZS5oKSwgdG9XS1JlY3QoZGlydHlSZWN0KSk7CisgICAgbV9kaXJ0eVJlY3Rz
ICs9IGRpcnR5UmVjdDsKK30KKwordm9pZCBXZWJWaWV3V2luZG93Ojp1cGRhdGVUaXRsZSgpCit7
CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRpdGxlID0gYWRvcHRXSyhXS1BhZ2VDb3B5
VGl0bGUocGFnZSgpKSk7CisgICAgbV90aXRsZSA9IHRvVVRGOFN0cmluZyh0aXRsZS5nZXQoKSk7
CisgICAgaWYgKG1fY2xpZW50LmRpZFVwZGF0ZVRpdGxlKQorICAgICAgICBtX2NsaWVudC5kaWRV
cGRhdGVUaXRsZSh0aGlzKTsKK30KKwordm9pZCBXZWJWaWV3V2luZG93Ojp1cGRhdGVVUkwoKQor
eworICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmwgPSBhZG9wdFdLKFdLUGFnZUNvcHlBY3Rp
dmVVUkwocGFnZSgpKSk7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVybFN0ciA9IGFk
b3B0V0soV0tVUkxDb3B5U3RyaW5nKHVybC5nZXQoKSkpOworICAgIG1fdXJsID0gdG9VVEY4U3Ry
aW5nKHVybFN0ci5nZXQoKSk7CisgICAgaWYgKG1fY2xpZW50LmRpZFVwZGF0ZVVSTCkKKyAgICAg
ICAgbV9jbGllbnQuZGlkVXBkYXRlVVJMKHRoaXMpOworfQorCit2b2lkIFdlYlZpZXdXaW5kb3c6
OnVwZGF0ZVByb2dyZXNzKCkKK3sKKyAgICBtX3Byb2dyZXNzID0gV0tQYWdlR2V0RXN0aW1hdGVk
UHJvZ3Jlc3MocGFnZSgpKTsKKyAgICBpZiAobV9jbGllbnQuZGlkVXBkYXRlUHJvZ3Jlc3MpCisg
ICAgICAgIG1fY2xpZW50LmRpZFVwZGF0ZVByb2dyZXNzKHRoaXMpOworfQorCit2b2lkIFdlYlZp
ZXdXaW5kb3c6OnNldEFjdGl2ZShib29sIGFjdGl2ZSkKK3sKKyAgICBpZiAobV9hY3RpdmUgPT0g
YWN0aXZlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2FjdGl2ZSA9IGFjdGl2ZTsKK30KKwor
V0tQYWdlUmVmIFdlYlZpZXdXaW5kb3c6OmNyZWF0ZU5ld1BhZ2UoV0tQYWdlUmVmLCBXS1BhZ2VD
b25maWd1cmF0aW9uUmVmIGNvbmZpZ3VyYXRpb24pCit7CisgICAgaWYgKG1fY2xpZW50LmNyZWF0
ZU5ld1dpbmRvdykgeworICAgICAgICBhdXRvIG5ld1dlYlZpZXcgPSBtX2NsaWVudC5jcmVhdGVO
ZXdXaW5kb3coY29uZmlndXJhdGlvbik7CisgICAgICAgIGF1dG8gbmV3UGFnZSA9IG5ld1dlYlZp
ZXctPnBhZ2UoKTsKKyAgICAgICAgcmV0dXJuIG5ld1BhZ2U7CisgICAgfQorICAgIHJldHVybiBu
dWxscHRyOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRpb24vV2Vi
Vmlld1dpbmRvdy5oIGIvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRpb24vV2ViVmlld1dpbmRv
dy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmViMWY0MGFjNWNmY2JkMGUzZDgwNjY5YTIxOTkwZDFhNWE0NzExMTIK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9wbGF5c3RhdGlvbi9XZWJWaWV3
V2luZG93LmgKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTb255
IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKKyNpbmNsdWRlIDxXZWJLaXQvV0tSZXRhaW5QdHIu
aD4KKyNpbmNsdWRlIDxXZWJLaXQvV0tWaWV3Lmg+CisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1
ZGUgPHRvb2xraXR0ZW4vV2lkZ2V0Lmg+CisKK2NsYXNzIFdlYlZpZXdXaW5kb3cgZmluYWwgOiBw
dWJsaWMgdG9vbGtpdHRlbjo6V2lkZ2V0IHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgQ2xpZW50IHsK
KyAgICAgICAgc3RkOjpmdW5jdGlvbjxXZWJWaWV3V2luZG93KihXS1BhZ2VDb25maWd1cmF0aW9u
UmVmIGNvbmZpZ3VyYXRpb24pPiBjcmVhdGVOZXdXaW5kb3c7CisKKyAgICAgICAgc3RkOjpmdW5j
dGlvbjx2b2lkKFdlYlZpZXdXaW5kb3cqKT4gZGlkVXBkYXRlVGl0bGU7CisgICAgICAgIHN0ZDo6
ZnVuY3Rpb248dm9pZChXZWJWaWV3V2luZG93Kik+IGRpZFVwZGF0ZVVSTDsKKyAgICAgICAgc3Rk
OjpmdW5jdGlvbjx2b2lkKFdlYlZpZXdXaW5kb3cqKT4gZGlkVXBkYXRlUHJvZ3Jlc3M7CisgICAg
fTsKKworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8V2ViVmlld1dpbmRvdz4gY3JlYXRlKENs
aWVudCYmLCBXS1BhZ2VDb25maWd1cmF0aW9uUmVmKTsKKworICAgIGV4cGxpY2l0IFdlYlZpZXdX
aW5kb3coV0tQYWdlQ29uZmlndXJhdGlvblJlZiwgQ2xpZW50JiYpOworICAgIHZpcnR1YWwgfldl
YlZpZXdXaW5kb3coKTsKKworICAgIHZvaWQgbG9hZFVSTChjb25zdCBjaGFyKiB1cmwpOworICAg
IHZvaWQgZ29CYWNrKCk7CisgICAgdm9pZCBnb0ZvcndhcmQoKTsKKyAgICB2b2lkIHJlbG9hZCgp
OworCisgICAgdm9pZCB0b2dnbGVab29tRmFjdG9yKCk7CisKKyAgICB2b2lkIHNldFNpemUodG9v
bGtpdHRlbjo6SW50U2l6ZSkgb3ZlcnJpZGU7CisgICAgYm9vbCBvbktleVVwKGludDMyX3Qgdmly
dHVhbEtleUNvZGUpIG92ZXJyaWRlOworICAgIGJvb2wgb25LZXlEb3duKGludDMyX3QgdmlydHVh
bEtleUNvZGUpIG92ZXJyaWRlOworICAgIGJvb2wgb25Nb3VzZU1vdmUodG9vbGtpdHRlbjo6SW50
UG9pbnQpIG92ZXJyaWRlOworICAgIGJvb2wgb25Nb3VzZVVwKHRvb2xraXR0ZW46OkludFBvaW50
KSBvdmVycmlkZTsKKyAgICBib29sIG9uTW91c2VEb3duKHRvb2xraXR0ZW46OkludFBvaW50KSBv
dmVycmlkZTsKKyAgICBib29sIG9uV2hlZWxNb3ZlKHRvb2xraXR0ZW46OkludFBvaW50LCB0b29s
a2l0dGVuOjpJbnRQb2ludCkgb3ZlcnJpZGU7CisKKyAgICBjb25zdCBzdGQ6OnN0cmluZyYgdGl0
bGUoKSBjb25zdCB7IHJldHVybiBtX3RpdGxlOyB9CisgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHVy
bCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9CisgICAgZG91YmxlIHByb2dyZXNzKCkgY29uc3Qg
eyByZXR1cm4gbV9wcm9ncmVzczsgfQorCisgICAgdm9pZCBzZXRBY3RpdmUoYm9vbCk7CisKK3By
aXZhdGU6CisgICAgV0tQYWdlUmVmIHBhZ2UoKTsKKworICAgIHZvaWQgcGFpbnRTZWxmKHRvb2xr
aXR0ZW46OkludFBvaW50IHBvc2l0aW9uKSBvdmVycmlkZTsKKyAgICB2b2lkIHVwZGF0ZVNlbGYo
KSBvdmVycmlkZTsKKyAgICB2b2lkIHVwZGF0ZVN1cmZhY2UodG9vbGtpdHRlbjo6SW50UmVjdCk7
CisKKyAgICB2b2lkIHVwZGF0ZVRpdGxlKCk7CisgICAgdm9pZCB1cGRhdGVVUkwoKTsKKyAgICB2
b2lkIHVwZGF0ZVByb2dyZXNzKCk7CisKKyAgICBXS1BhZ2VSZWYgY3JlYXRlTmV3UGFnZShXS1Bh
Z2VSZWYsIFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYpOworCisgICAgV0tSZXRhaW5QdHI8V0tWaWV3
UmVmPiBtX3ZpZXc7CisgICAgc3RkOjpzaGFyZWRfcHRyPFdlYkNvbnRleHQ+IG1fY29udGV4dDsK
KyAgICBXS1JldGFpblB0cjxXS1ByZWZlcmVuY2VzUmVmPiBtX3ByZWZlcmVuY2VzOworCisgICAg
Q2xpZW50IG1fY2xpZW50OworCisgICAgc3RkOjp1bmlxdWVfcHRyPHVuc2lnbmVkIGNoYXJbXT4g
bV9zdXJmYWNlOworCisgICAgc3RkOjpzdHJpbmcgbV90aXRsZTsKKyAgICBzdGQ6OnN0cmluZyBt
X3VybDsKKyAgICBkb3VibGUgbV9wcm9ncmVzcyB7IDAgfTsKKworICAgIGJvb2wgbV9hY3RpdmUg
eyBmYWxzZSB9OworfTsKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9u
L21haW4uY3BwIGIvVG9vbHMvTWluaUJyb3dzZXIvcGxheXN0YXRpb24vbWFpbi5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMjlmNDViMDIxMjA2YWZkOTZmN2MzZjk3ODc2NjdjZjI1ZDM2ZDQxOAotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL3BsYXlzdGF0aW9uL21haW4uY3BwCkBAIC0wLDAg
KzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU29ueSBJbnRlcmFjdGl2ZSBFbnRl
cnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIk1haW5XaW5kb3cuaCIKKyNpbmNs
dWRlIDxXZWJLaXQvV0tSdW5Mb29wLmg+CisjaW5jbHVkZSA8ZGxmY24uaD4KKyNpbmNsdWRlIDx0
b29sa2l0dGVuL0FwcGxpY2F0aW9uLmg+CisKK3VzaW5nIHRvb2xraXR0ZW46OldpZGdldDsKK3Vz
aW5nIHRvb2xraXR0ZW46OkFwcGxpY2F0aW9uOworCitzdGF0aWMgdm9pZCBsb2FkTGlicmFyeU9y
RXhpdChjb25zdCBjaGFyKiBuYW1lKQoreworICAgIGlmICghZGxvcGVuKG5hbWUsIFJUTERfTk9X
KSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBsb2FkICVzLlxuIiwgbmFt
ZSk7CisgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9Cit9CisKK19fYXR0cmlidXRl
X18oKGNvbnN0cnVjdG9yKDExMCkpKQorc3RhdGljIHZvaWQgaW5pdGlhbGl6ZSgpCit7CisgICAg
bG9hZExpYnJhcnlPckV4aXQoIlBvc2l4V2ViS2l0Iik7CisgICAgc2V0ZW52X25wKCJXZWJJbnNw
ZWN0b3JTZXJ2ZXJQb3J0IiwgIjg2OCIsIDEpOworCisgICAgbG9hZExpYnJhcnlPckV4aXQoImxp
YnBuZzE2Iik7CisgICAgbG9hZExpYnJhcnlPckV4aXQoImxpYmljdSIpOworICAgIGxvYWRMaWJy
YXJ5T3JFeGl0KCJsaWJmb250Y29uZmlnIik7CisgICAgbG9hZExpYnJhcnlPckV4aXQoImxpYmZy
ZWV0eXBlIik7CisgICAgbG9hZExpYnJhcnlPckV4aXQoImxpYmhhcmZidXp6Iik7CisgICAgbG9h
ZExpYnJhcnlPckV4aXQoImxpYmNhaXJvIik7CisgICAgbG9hZExpYnJhcnlPckV4aXQoImxpYlRv
b2xLaXR0ZW4iKTsgICAgCisgICAgbG9hZExpYnJhcnlPckV4aXQoImxpYlNjZU5LV2ViS2l0UmVx
dWlyZW1lbnRzIik7CisgICAgbG9hZExpYnJhcnlPckV4aXQoImxpYkphdmFTY3JpcHRDb3JlIik7
CisgICAgbG9hZExpYnJhcnlPckV4aXQoImxpYldlYktpdCIpOworfQorCitjbGFzcyBBcHBsaWNh
dGlvbkNsaWVudCA6IHB1YmxpYyBBcHBsaWNhdGlvbjo6Q2xpZW50IHsKK3B1YmxpYzoKKyAgICB2
b2lkIHJlcXVlc3ROZXh0RnJhbWUoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgV0tSdW5Mb29w
Q2FsbE9uTWFpblRocmVhZCh1cGRhdGVBcHBsaWNhdGlvbiwgdGhpcyk7CisgICAgfQorCitwcml2
YXRlOgorICAgIHN0YXRpYyB2b2lkIHVwZGF0ZUFwcGxpY2F0aW9uKHZvaWQqKQorICAgIHsKKyAg
ICAgICAgQXBwbGljYXRpb246OnNpbmdsZXRvbigpLnVwZGF0ZSgpOworICAgIH0KK307CisKK2lu
dCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgV0tSdW5Mb29wSW5pdGlhbGl6
ZU1haW4oKTsKKworICAgIEFwcGxpY2F0aW9uQ2xpZW50IGFwcGxpY2F0aW9uQ2xpZW50OworICAg
IGF1dG8mIGFwcCA9IEFwcGxpY2F0aW9uOjpzaW5nbGV0b24oKTsKKyAgICBhcHAuaW5pdCgmYXBw
bGljYXRpb25DbGllbnQpOworCisgICAgYXV0byBtYWluV2luZG93ID0gc3RkOjptYWtlX3VuaXF1
ZTxNYWluV2luZG93PigpOworICAgIG1haW5XaW5kb3ctPnNldEZvY3VzZWQoKTsKKyAgICBhcHAu
c2V0Um9vdFdpZGdldChtb3ZlKG1haW5XaW5kb3cpKTsKKworICAgIC8vIFJlcXVlc3QgdGhlIGZp
cnN0IGZyYW1lIHRvIHN0YXJ0IHRoZSBhcHBsaWNhdGlvbiBsb29wLgorICAgIGFwcGxpY2F0aW9u
Q2xpZW50LnJlcXVlc3ROZXh0RnJhbWUoKTsKKworICAgIFdLUnVuTG9vcFJ1bk1haW4oKTsKKwor
ICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvUGxhdGZvcm1QbGF5U3RhdGlvbi5j
bWFrZSBiL1Rvb2xzL1BsYXRmb3JtUGxheVN0YXRpb24uY21ha2UKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTUzNWI5
YWJhOGE4NTE2YjM0ZTk1YzFkZWZmMDgyNDBjZTIyN2EwZAotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1BsYXRmb3JtUGxheVN0YXRpb24uY21ha2UKQEAgLTAsMCArMSwzIEBACitpZiAoRU5BQkxF
X1dFQktJVCkKKyAgICBhZGRfc3ViZGlyZWN0b3J5KE1pbmlCcm93c2VyL3BsYXlzdGF0aW9uKQor
ZW5kaWYgKCkKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBkYWNjYzFj
Y2Y5OGQ4YWUxN2VkNWFhMDViMDAxMGIxZjk3Zjk5MTUwLi4zZTlkODMzYWE1OWRlZTk2MDA4YjIx
OGVmNjdmZWQ4ZTA4ZmY0NmNmIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTQgQEAKKzIwMjEtMDEtMDYgIFlvc2hpYWtpIEppdHN1a2F3YSAgPHlvc2hp
YWtpLmppdHN1a2F3YUBzb255LmNvbT4KKworICAgICAgICBbUGxheVN0YXRpb25dIEFkZCBNaW5p
QnJvd3NlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjIwMzU5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
RW5hYmxlIEZ1bGxzY3JlZW4gQVBJLgorCisgICAgICAgICogU291cmNlL2NtYWtlL09wdGlvbnNQ
bGF5U3RhdGlvbi5jbWFrZToKKwogMjAyMC0xMS0yNiAgTGF1cm8gTW91cmEgIDxsbW91cmFAaWdh
bGlhLmNvbT4KIAogICAgICAgICBbR1RLXVtHVEs0XSBCdWlsZGluZyB3aXRoIEdPYmplY3QtSW50
cm9zcGVjdGlvbiBzdXBwb3J0IGRvZXMgbm90IHdvcmsK
</data>

          </attachment>
      

    </bug>

</bugzilla>