<?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>222366</bug_id>
          
          <creation_ts>2021-02-24 10:05:20 -0800</creation_ts>
          <short_desc>[WPE][GTK] Move network session APIs to a new WebKitNetworkSession class</short_desc>
          <delta_ts>2023-01-26 09:53:36 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=222561</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>250570</dependson>
    
    <dependson>250649</dependson>
          <blocked>210100</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Catanzaro">mcatanzaro</reporter>
          <assigned_to name="Carlos Garcia Campos">cgarcia</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>cgarcia</cc>
    
    <cc>mcatanzaro</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1732934</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-02-24 10:05:20 -0800</bug_when>
    <thetext>r267502 and r267534 moved WebKitWebContext APIs that are internally properties of the NetworkSession from WebKitWebContext to WebKitWebsiteDataManager. This was required since r267763 moved network process ownership from WebProcessPool to WebsiteDataStore. Problem is this doesn&apos;t make much sense from an API user perspective. Why should WebKitWebsiteDataManager be the place to configure seemingly-unrelated network properties? I realize it&apos;s really late to be reconsidering this now, but if we release these APIs in 2.32 we are stuck with them forever. We still have a bit of time left.

At first, I thought we could keep these APIs in WebKitWebContext and have them internally configure all associated WebsiteDataStores, but it doesn&apos;t work. The problem is that a WebKitWebsiteDataManager may be associated with a WebKitWebContext *or* a WebKitWebView. If the WebKitWebView does not have its own WebKitWebsiteDataManager, then it will use the WebKitWebsiteDataManager of its WebKitWebContext. This means it&apos;s now possible for two WebKitWebViews in the same WebKitWebContext to use *different* network processes and NetworkSessions. It also means it&apos;s possible for two WebKitWebViews in totally different WebKitWebContexts to use the *same* network process, which was previously not possible. So the APIs really cannot remain part of WebKitWebContext.

I think we can solve this by introducing a new API object, WebKitNetworkSession. It would need to be a property of both the WebKitWebContext and WebKitWebView, exactly the same as WebKitWebsiteDataManager is. The WebKitNetworkSession would have its own website-data-manager property, and would be the object that really owns the WebKitWebsiteDataManager. Then the WebKitWebContext and WebKitWebView website-data-manager properties and getters/setters would instead forward to their WebKitNetworkSession. This means everything would work the same as it does now, but we would effectively have a new API object with a nicer name so that we don&apos;t have to confusingly put seemingly-unrelated functions under WebKitWebsiteDataManager.

For now, WebKitNetworkSession would have three functions:

webkit_network_session_get_tls_errors_policy
webkit_network_session_set_tls_errors_policy
webkit_network_session_set_network_proxy_settings

The corresponding WebKitWebContext APIs would remain deprecated, and the corresponding WebKitWebsiteDataManager APIs would be removed (quick! before we release them in 2.32). We could *optionally* deprecate the website-data-manager properties and getters/setters of WebKitWebContext and WebKitWebsiteDataManager, since it might be confusing to have so many different places where you can set a WebKitWebsiteDataManager. But we don&apos;t have to do that. This scheme could work either way.

We don&apos;t have much time to decide whether to do this. Opinions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1733755</commentid>
    <comment_count>1</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-02-26 07:50:37 -0800</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #0)
&gt; For now, WebKitNetworkSession would have three functions:
&gt; 
&gt; webkit_network_session_get_tls_errors_policy
&gt; webkit_network_session_set_tls_errors_policy
&gt; webkit_network_session_set_network_proxy_settings

Actually it&apos;s 2021, we don&apos;t need the TLS error policy functions anymore. IMO we can deprecate those without replacement.

That would leave only webkit_network_session_set_network_proxy_settings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1734478</commentid>
    <comment_count>2</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-03-01 10:12:50 -0800</bug_when>
    <thetext>Carlos thinks WebKitNetworkSession is too much for 2.32 in the limited time we have left before release. So I have opened bug #222561 to remove webkit_website_data_manager_[get,set]_tls_errors_policy. We&apos;ll be stuck with the misplaced webkit_website_data_manager_set_network_proxy_settings for the lifetime of the GTK 3 API. I&apos;ll assign this bug to block the GTK 4 tracker so we can reconsider webkit_website_data_manager_set_network_proxy_settings() for GTK 4. We should also totally remove WebKitTLSErrorsPolicy from the GTK 4 API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1882048</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2022-07-11 07:05:21 -0700</bug_when>
    <thetext>Even if we decide to keep things as they are now, we still need to document the network process implications carefully. Unless you&apos;re familiar with WebKit internals, it&apos;s unclear what&apos;s going on here, and too easy for a competent developer to accidentally create too many network processes by mistake, e.g.:

https://gitlab.gnome.org/GNOME/epiphany/-/merge_requests/1170#note_1498599</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1925041</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2023-01-12 05:30:03 -0800</bug_when>
    <thetext>I&apos;ve been looking at this. The good thing of not introducing thi new api in the old api is that we have more flixibility to change the behavior too. So, I propose to change the way it currently works and move to something similar to apple. This is my proposal:

1.- Only support one network process: I don&apos;t see any reason to use more than one, you can just have different sessions in the same process. With current API you can end up with two network processes accessing the same cookies database, for example, even if that&apos;s actually a programmer error.

2.- Make it possible to use a different session on every web view: in our current API we can only decide whether to use the web context network session or an ephemeral one. The API would be similar to the settings property, you can share the same settings or use a different object, but it doesn&apos;t depend on the web context.

The API would be something like:

 - WebKitNetworkSession
  + new(): receives the data directory and cache directory, both optional and creates a persistent WebKitWebsiteDataManager for the given directories.
  + new_epehmeral(): creates an ephemeral WebKitWebsiteDataManager
  + All network related APIs from WebKitWebsiteDataManager (get_cookie_manager, set|get_itp_enabled, set|get_persistent_credential_storage_enabled, set|get_tls_errors_policy, set_network_proxy_settings, set_memory_pressure_settings and get_itp_summary) will be moved to WebKitNetworkSession
  + All network related APIs from WebKitWebContext (prefetch_dns, allow_tls_certificate_for_host and downloads) will be moved to WebKitNetworkSession

 - WebKitWebsiteDataManager
  + Remove the constructors, so it can only be created by WebKitNetworkSession
  + It keeps only the API to fetch and remove website data.

 - WebKitWebContext
  + Remove clear_cache(): it can be done with WebKitWebsiteDataManager.
  + Remove the website-data-manager property.

 - WebKitWebView
  + Remove the is-ephemeral property
  + Add network-session construct only property

What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1925090</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2023-01-12 10:11:46 -0800</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #4)
&gt; 1.- Only support one network process: I don&apos;t see any reason to use more
&gt; than one, you can just have different sessions in the same process. With
&gt; current API you can end up with two network processes accessing the same
&gt; cookies database, for example, even if that&apos;s actually a programmer error.

So you want to have one network process per UI process, matching Apple&apos;s process model? I think that would be fine. We would then want to switch to one NetworkSession per WebKitWebContext/WebProcessPool instead of using the default NetworkSession; otherwise, separate instances of WebKit could clash with each other.

Sounds much better than the status quo.

&gt; 2.- Make it possible to use a different session on every web view: in our
&gt; current API we can only decide whether to use the web context network
&gt; session or an ephemeral one. The API would be similar to the settings
&gt; property, you can share the same settings or use a different object, but it
&gt; doesn&apos;t depend on the web context.

I like this proposal. It makes more sense than what we have now.

I think we can keep WebKitWebView:is-ephemeral and just make it read-only.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1926583</commentid>
    <comment_count>6</comment_count>
      <attachid>464556</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2023-01-19 05:41:04 -0800</bug_when>
    <thetext>Created attachment 464556
WIP patch

This is what I have so far, uploading it now to get some initial feedback. What is left to do is:

 - API tests: make the existing ones build and add specific test for network session.
 - WPE minibrowser
 - Favicon database: I&apos;m not sure what to do here, I&apos;ll elaborate in a follow up comment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1926585</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2023-01-19 05:57:20 -0800</bug_when>
    <thetext>WebKitFaviconDatabase is kind of a spacial case of website data, because it&apos;s not attached to a particular session, but global to a web context. 

 - If the web context is created with an ephemeral website data store, but a an existing database is used, the icons are still loaded, but nothing is written to the database.

 - If created with a persistent data store, the database is written, expect for icon requests made from an ephemeral web view.

My initial idea was to move the favicon database ownership from web context to website data manager, but then it can&apos;t be shared with ephemeral web views. Keeping it in the web context is problematic too, because we need to know whether to allow database writes when the database is created and in the new api the web context doesn&apos;t have a network session, it&apos;s a web view property. I think the easiest solution would be to leave the favicon database in the web context and change the way it&apos;s configured. Currently, to enable favicosn you have to call webkit_web_context_set_favicon_database_directory(), which I find a bit weird, and passing null as path doesn&apos;t disables it but uses the default path. We can add methods to enable/disable favicons instead (or open/close the database which what actually happens in set_favicon_database_directory). Then the open method would receive an optional path and the readonly mode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1926594</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2023-01-19 06:24:50 -0800</bug_when>
    <thetext>I&apos;m also considering to remove all (or most of) webkit_web_view_new_with constructors. With all the construct properties we currently have I think most people need to use g_object_new and pass properties. Maybe we can keep with_related_view and add optional parameters to new() for the properties that are expected to be passed (web context, network session and settings, for example)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1926598</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2023-01-19 06:33:36 -0800</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #7)
&gt; My initial idea was to move the favicon database ownership from web context
&gt; to website data manager, but then it can&apos;t be shared with ephemeral web
&gt; views.

This actually seems ideal. I don&apos;t think it&apos;s desirable to share the favicon database with ephemeral web views because the favicon database will necessarily load remote web content, and a server could use the absence of a favicon load to determine whether the user has previously visited in non-ephemeral mode. It may be a small info leak, but I&apos;d say the server is not supposed to be able to do that.

&gt; I think the easiest solution would be to leave the favicon
&gt; database in the web context and change the way it&apos;s configured.

If you don&apos;t want to move it to WebKitWebsiteDataManager, then OK.

(In reply to Carlos Garcia Campos from comment #8)
&gt; I&apos;m also considering to remove all (or most of) webkit_web_view_new_with
&gt; constructors. With all the construct properties we currently have I think
&gt; most people need to use g_object_new and pass properties. Maybe we can keep
&gt; with_related_view and add optional parameters to new() for the properties
&gt; that are expected to be passed (web context, network session and settings,
&gt; for example)

Bug #250835</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1926739</commentid>
    <comment_count>10</comment_count>
      <attachid>464556</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2023-01-19 15:49:26 -0800</bug_when>
    <thetext>Comment on attachment 464556
WIP patch

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

I looked over the first half of the patch so far. My opinion is: very good.

&gt; Source/WebKit/UIProcess/API/glib/WebKitNetworkSession.cpp:536
&gt; +void webkit_network_session_set_memory_pressure_settings(WebKitMemoryPressureSettings* settings)
&gt; +{
&gt; +    std::optional&lt;MemoryPressureHandler::Configuration&gt; config = settings ? std::make_optional(webkitMemoryPressureSettingsGetMemoryPressureHandlerConfiguration(settings)) : std::nullopt;
&gt; +    WebProcessPool::setNetworkProcessMemoryPressureHandlerConfiguration(config);
&gt; +}

This one looks weird. Probably a preexisting issue, but I don&apos;t like that the setting works globally instead of on a particular WebProcessPool/WebKitWebContext or WebKitNetworkSession.

&gt; Source/WebKit/UIProcess/API/glib/WebKitNetworkSession.h.in:61
&gt; +struct _WebKitNetworkSession {
&gt; +    GObject parent;
&gt; +
&gt; +    /*&lt; private &gt;*/
&gt; +    WebKitNetworkSessionPrivate *priv;
&gt; +};
&gt; +
&gt; +struct _WebKitNetworkSessionClass {
&gt; +    GObjectClass parent_class;
&gt; +
&gt; +    /*&lt; private &gt;*/
&gt; +    void (*_webkit_reserved0) (void);
&gt; +    void (*_webkit_reserved1) (void);
&gt; +    void (*_webkit_reserved2) (void);
&gt; +    void (*_webkit_reserved3) (void);
&gt; +};

This might depend on how exactly Adrian decides to handle bug #243663, but I think it&apos;s time to start using G_DECLARE_FINAL_TYPE. Then we would have the instance struct in the source file instead of the header (after all, everything there is private), and the class struct would be hidden behind the marco. We wouldn&apos;t maintain vtable padding unless we make it derivable in the future (which for this class we&apos;d never do).

Let&apos;s talk to Adrian and see what he&apos;s planning.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1926833</commentid>
    <comment_count>11</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2023-01-20 00:45:21 -0800</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #9)
&gt; (In reply to Carlos Garcia Campos from comment #7)
&gt; &gt; My initial idea was to move the favicon database ownership from web context
&gt; &gt; to website data manager, but then it can&apos;t be shared with ephemeral web
&gt; &gt; views.
&gt; 
&gt; This actually seems ideal. I don&apos;t think it&apos;s desirable to share the favicon
&gt; database with ephemeral web views because the favicon database will
&gt; necessarily load remote web content, and a server could use the absence of a
&gt; favicon load to determine whether the user has previously visited in
&gt; non-ephemeral mode. It may be a small info leak, but I&apos;d say the server is
&gt; not supposed to be able to do that.
&gt; 

That&apos;s a good point, I think we can try to move it then.

&gt; &gt; I think the easiest solution would be to leave the favicon
&gt; &gt; database in the web context and change the way it&apos;s configured.
&gt; 
&gt; If you don&apos;t want to move it to WebKitWebsiteDataManager, then OK.
&gt; 
&gt; (In reply to Carlos Garcia Campos from comment #8)
&gt; &gt; I&apos;m also considering to remove all (or most of) webkit_web_view_new_with
&gt; &gt; constructors. With all the construct properties we currently have I think
&gt; &gt; most people need to use g_object_new and pass properties. Maybe we can keep
&gt; &gt; with_related_view and add optional parameters to new() for the properties
&gt; &gt; that are expected to be passed (web context, network session and settings,
&gt; &gt; for example)
&gt; 
&gt; Bug #250835

Perfect, let&apos;s discuss it there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1926835</commentid>
    <comment_count>12</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2023-01-20 00:50:02 -0800</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #10)
&gt; Comment on attachment 464556 [details]
&gt; WIP patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=464556&amp;action=review
&gt; 
&gt; I looked over the first half of the patch so far. My opinion is: very good.
&gt; 

Great, thanks!

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitNetworkSession.cpp:536
&gt; &gt; +void webkit_network_session_set_memory_pressure_settings(WebKitMemoryPressureSettings* settings)
&gt; &gt; +{
&gt; &gt; +    std::optional&lt;MemoryPressureHandler::Configuration&gt; config = settings ? std::make_optional(webkitMemoryPressureSettingsGetMemoryPressureHandlerConfiguration(settings)) : std::nullopt;
&gt; &gt; +    WebProcessPool::setNetworkProcessMemoryPressureHandlerConfiguration(config);
&gt; &gt; +}
&gt; 
&gt; This one looks weird. Probably a preexisting issue, but I don&apos;t like that
&gt; the setting works globally instead of on a particular
&gt; WebProcessPool/WebKitWebContext or WebKitNetworkSession.
&gt; 

That&apos;s because we want to apply the settings to any network process spawned by the website data store. Now there&apos;s only one network process, but still, you can&apos;t set different settings per network session, because it&apos;s global to the network process. So, this is like a static method of WebKitNetworkSession.

&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitNetworkSession.h.in:61
&gt; &gt; +struct _WebKitNetworkSession {
&gt; &gt; +    GObject parent;
&gt; &gt; +
&gt; &gt; +    /*&lt; private &gt;*/
&gt; &gt; +    WebKitNetworkSessionPrivate *priv;
&gt; &gt; +};
&gt; &gt; +
&gt; &gt; +struct _WebKitNetworkSessionClass {
&gt; &gt; +    GObjectClass parent_class;
&gt; &gt; +
&gt; &gt; +    /*&lt; private &gt;*/
&gt; &gt; +    void (*_webkit_reserved0) (void);
&gt; &gt; +    void (*_webkit_reserved1) (void);
&gt; &gt; +    void (*_webkit_reserved2) (void);
&gt; &gt; +    void (*_webkit_reserved3) (void);
&gt; &gt; +};
&gt; 
&gt; This might depend on how exactly Adrian decides to handle bug #243663, but I
&gt; think it&apos;s time to start using G_DECLARE_FINAL_TYPE. Then we would have the
&gt; instance struct in the source file instead of the header (after all,
&gt; everything there is private), and the class struct would be hidden behind
&gt; the marco. We wouldn&apos;t maintain vtable padding unless we make it derivable
&gt; in the future (which for this class we&apos;d never do).
&gt; 
&gt; Let&apos;s talk to Adrian and see what he&apos;s planning.

I guess the tricky part is that we use the new placement syntax for the private struct to be able to use smart pointers, that&apos;s why we have our own macros to define types. G_DECLARE_FINAL_TYPE doesn&apos;t use a private struct, I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1926878</commentid>
    <comment_count>13</comment_count>
      <attachid>464576</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2023-01-20 06:11:35 -0800</bug_when>
    <thetext>Created attachment 464576
WIP patch

Updated patch. 

Done:
 - Ported most of the API tests.
 - Renamed webkit_network_session_set_network_proxy_settings() as webkit_network_session_set_proxy_settings()
 - Add WebKitNetworkSession to autocleanups
 - Fix webkit_network_session_download_uri()

Todo:
 - Move favicon database to WebKitWebsiteDataManager.
 - Enable TestCookieManager (I don&apos;t know why this is disabled)
 - Port WPE MiniBrowser
 - Port cog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1926879</commentid>
    <comment_count>14</comment_count>
      <attachid>464577</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2023-01-20 06:12:42 -0800</bug_when>
    <thetext>Created attachment 464577
WIP patch

Submitting the right patch this time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1926911</commentid>
    <comment_count>15</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2023-01-20 08:47:27 -0800</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #12)
&gt; That&apos;s because we want to apply the settings to any network process spawned
&gt; by the website data store. Now there&apos;s only one network process, but still,
&gt; you can&apos;t set different settings per network session, because it&apos;s global to
&gt; the network process. So, this is like a static method of
&gt; WebKitNetworkSession.

OK, I see that it really *has* to be this way because it wouldn&apos;t make sense to have separate memory pressure settings per network session when all the network sessions use the same network process. So OK.

&gt; I guess the tricky part is that we use the new placement syntax for the
&gt; private struct to be able to use smart pointers, that&apos;s why we have our own
&gt; macros to define types. G_DECLARE_FINAL_TYPE doesn&apos;t use a private struct, I
&gt; think.

Let&apos;s discuss in bug #243663.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1927441</commentid>
    <comment_count>16</comment_count>
      <attachid>464608</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2023-01-23 06:19:46 -0800</bug_when>
    <thetext>Created attachment 464608
WIP patch

Another update.

Done:
 - Enabled and ported cookie manager test.
 - Moved favicon database to WebKitWebsiteDataManager.

Todo:
 - Fix favicon database unit test (it&apos;s mostly ported but there are changes in behavior)
 - Add WebKitNetworkSession API test.
 - Port WPE MiniBrowser
 - Port cog

So, in the end I moved the favicons to website data manager, which means ephemeral sessions always load icons when they are enabled. Since it&apos;s part of website data manager, there&apos;s no api to set the directory, but instead set|get_favicons_enabled. When enabled, the database is created and opened, using the website data manger configuration (base cache directory). Would it make sense to change the default and have favicos enabled by default instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1927447</commentid>
    <comment_count>17</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2023-01-23 07:33:30 -0800</bug_when>
    <thetext>I guess disabling the favicon database makes sense for apps that are not web browsers, but our default settings are mostly designed to be good for browsers, so I&apos;d say favicon database should be enabled by default. What would be really nice would be to have two sets of defaults, with an API to express intent. For example, WebKitSettings could have a construct property to indicate whether the application should receive web browser or non-browser defaults. The closest we have to this currently is WebKitCacheModel (WEBKIT_CACHE_MODEL_DOCUMENT_VIEWER/WEBKIT_CACHE_MODEL_WEB_BROWSER/WEBKIT_CACHE_MODEL_DOCUMENT_BROWSER), but of course that&apos;s not a good match for settings.

P.S. Please also update migrating-to-webkitgtk-6.0.md.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1927802</commentid>
    <comment_count>18</comment_count>
      <attachid>464630</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2023-01-24 06:57:07 -0800</bug_when>
    <thetext>Created attachment 464630
WIP patch

Another update:

Done:
 - Changed favicons to be enabled by default.
 - Fixed the favicons database unit test.
 - Added WebKitNetworkSession api test.
 - Ported WPE MiniBrowser

Todo:
 - Port cog
 - Update migrating-to-webkitgtk-6.0.md</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1928110</commentid>
    <comment_count>19</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2023-01-25 05:39:21 -0800</bug_when>
    <thetext>Pull request: https://github.com/WebKit/WebKit/pull/9104</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1928631</commentid>
    <comment_count>20</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2023-01-26 09:53:33 -0800</bug_when>
    <thetext>Committed 259433@main (2d1b53b211b4): &lt;https://commits.webkit.org/259433@main&gt;

Reviewed commits have been landed. Closing PR #9104 and removing active labels.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>464556</attachid>
            <date>2023-01-19 05:41:04 -0800</date>
            <delta_ts>2023-01-20 06:11:35 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>wip-network-session-api.diff</filename>
            <type>text/plain</type>
            <size>101093</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDNhODU2NmFmZWRjNC4uZjhkZmQ0MzBlMmU2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTE4Myw2ICsxODMsMTIgQEAgc2V0KFdlYktpdEdU
S19IRUFERVJfVEVNUExBVEVTCiAgICAgJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3QmFzZS5oLmluCiApCiAKK2lmIChFTkFCTEVfMjAyMl9HTElCX0FQSSkKKyAg
ICBsaXN0KEFQUEVORCBXZWJLaXRHVEtfSEVBREVSX1RFTVBMQVRFUworICAgICAgICAke1dFQktJ
VF9ESVJ9L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXROZXR3b3JrU2Vzc2lvbi5oLmluCisgICAg
KQorZW5kaWYgKCkKKwogc2V0KFdlYktpdEdUS19JTlNUQUxMRURfSEVBREVSUwogICAgICR7V2Vi
S2l0R1RLX0RFUklWRURfU09VUkNFU19ESVJ9L3dlYmtpdC9XZWJLaXRFbnVtVHlwZXMuaAogICAg
ICR7V2ViS2l0R1RLX0RFUklWRURfU09VUkNFU19ESVJ9L3dlYmtpdC9XZWJLaXRWZXJzaW9uLmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQgYi9Tb3VyY2UvV2ViS2l0
L1NvdXJjZXNHVEsudHh0CmluZGV4IDNjMmI5NzBjNDlmNS4uZTVmYmRjMTdiMWZhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291
cmNlc0dUSy50eHQKQEAgLTE1Nyw2ICsxNTcsNyBAQCBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0
TmF2aWdhdGlvbkFjdGlvbi5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0
TmF2aWdhdGlvbkNsaWVudC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0
TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ2xp
Yi9XZWJLaXROZXR3b3JrUHJveHlTZXR0aW5ncy5jcHAgQG5vLXVuaWZ5CitVSVByb2Nlc3MvQVBJ
L2dsaWIvV2ViS2l0TmV0d29ya1Nlc3Npb24uY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdE5vdGlmaWNhdGlvbi5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIv
V2ViS2l0Tm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3QuY3BwIEBuby11bmlmeQogVUlQcm9j
ZXNzL0FQSS9nbGliL1dlYktpdE5vdGlmaWNhdGlvblByb3ZpZGVyLmNwcCBAbm8tdW5pZnkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdEF1dG9tYXRp
b25TZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdEF1
dG9tYXRpb25TZXNzaW9uLmNwcAppbmRleCA2YTc1YjlkZDMxYzUuLmU5MzVmYTllMTBhYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0QXV0b21hdGlv
blNlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktp
dEF1dG9tYXRpb25TZXNzaW9uLmNwcApAQCAtMzEsNiArMzEsMTAgQEAKICNpbmNsdWRlIDx3dGYv
Z2xpYi9XVEZHVHlwZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAorI2lmIEVO
QUJMRSgyMDIyX0dMSUJfQVBJKQorI2luY2x1ZGUgIldlYktpdE5ldHdvcmtTZXNzaW9uLmgiCisj
ZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogLyoqCkBAIC0zNTAsMTMgKzM1NCwy
NyBAQCBXZWJLaXRBdXRvbWF0aW9uU2Vzc2lvbiogd2Via2l0QXV0b21hdGlvblNlc3Npb25DcmVh
dGUoV2ViS2l0V2ViQ29udGV4dCogd2ViQ29udAogewogICAgIGF1dG8qIHNlc3Npb24gPSBXRUJL
SVRfQVVUT01BVElPTl9TRVNTSU9OKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9BVVRPTUFUSU9O
X1NFU1NJT04sICJpZCIsIHNlc3Npb25JRCwgbnVsbHB0cikpOwogICAgIHNlc3Npb24tPnByaXYt
PndlYkNvbnRleHQgPSB3ZWJDb250ZXh0OwotICAgIGlmIChjYXBhYmlsaXRpZXMuYWNjZXB0SW5z
ZWN1cmVDZXJ0aWZpY2F0ZXMpCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgV2ViS2l0
TmV0d29ya1Nlc3Npb24qIG5ldHdvcmtTZXNzaW9uID0gd2Via2l0V2ViQ29udGV4dEdldE5ldHdv
cmtTZXNzaW9uRm9yQXV0b21hdGlvbih3ZWJDb250ZXh0KTsKKyNlbmRpZgorCisgICAgaWYgKGNh
cGFiaWxpdGllcy5hY2NlcHRJbnNlY3VyZUNlcnRpZmljYXRlcykgeworI2lmIEVOQUJMRSgyMDIy
X0dMSUJfQVBJKQorICAgICAgICB3ZWJraXRfbmV0d29ya19zZXNzaW9uX3NldF90bHNfZXJyb3Jz
X3BvbGljeShuZXR3b3JrU2Vzc2lvbiwgV0VCS0lUX1RMU19FUlJPUlNfUE9MSUNZX0lHTk9SRSk7
CisjZWxzZQogICAgICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X3Rsc19lcnJv
cnNfcG9saWN5KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIod2Vi
Q29udGV4dCksIFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9JR05PUkUpOworI2VuZGlmCisgICAg
fQogCiAgICAgZm9yIChhdXRvJiBjZXJ0aWZpY2F0ZSA6IGNhcGFiaWxpdGllcy5jZXJ0aWZpY2F0
ZXMpIHsKICAgICAgICAgR1JlZlB0cjxHVGxzQ2VydGlmaWNhdGU+IHRsc0NlcnRpZmljYXRlID0g
YWRvcHRHUmVmKGdfdGxzX2NlcnRpZmljYXRlX25ld19mcm9tX2ZpbGUoY2VydGlmaWNhdGUuc2Vj
b25kLnV0ZjgoKS5kYXRhKCksIG51bGxwdHIpKTsKLSAgICAgICAgaWYgKHRsc0NlcnRpZmljYXRl
KQorICAgICAgICBpZiAodGxzQ2VydGlmaWNhdGUpIHsKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQ
SSkKKyAgICAgICAgICAgIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fYWxsb3dfdGxzX2NlcnRpZmlj
YXRlX2Zvcl9ob3N0KG5ldHdvcmtTZXNzaW9uLCB0bHNDZXJ0aWZpY2F0ZS5nZXQoKSwgY2VydGlm
aWNhdGUuZmlyc3QudXRmOCgpLmRhdGEoKSk7CisjZWxzZQogICAgICAgICAgICAgd2Via2l0X3dl
Yl9jb250ZXh0X2FsbG93X3Rsc19jZXJ0aWZpY2F0ZV9mb3JfaG9zdCh3ZWJDb250ZXh0LCB0bHND
ZXJ0aWZpY2F0ZS5nZXQoKSwgY2VydGlmaWNhdGUuZmlyc3QudXRmOCgpLmRhdGEoKSk7CisjZW5k
aWYKKyAgICAgICAgfQogICAgIH0KICAgICBpZiAoY2FwYWJpbGl0aWVzLnByb3h5KSB7CiAgICAg
ICAgIGlmIChjYXBhYmlsaXRpZXMucHJveHktPnR5cGUgPT0gInBhYyJfcykgewpAQCAtMzY1LDEz
ICszODMsMjEgQEAgV2ViS2l0QXV0b21hdGlvblNlc3Npb24qIHdlYmtpdEF1dG9tYXRpb25TZXNz
aW9uQ3JlYXRlKFdlYktpdFdlYkNvbnRleHQqIHdlYkNvbnQKICAgICAgICAgICAgIGlmIChjYXBh
YmlsaXRpZXMucHJveHktPmF1dG9jb25maWdVUkwpCiAgICAgICAgICAgICAgICAgc2V0dGluZ3Mu
ZGVmYXVsdFByb3h5VVJMID0gY2FwYWJpbGl0aWVzLnByb3h5LT5hdXRvY29uZmlnVVJMLT51dGY4
KCk7CiAgICAgICAgICAgICBpZiAoIXNldHRpbmdzLmlzRW1wdHkoKSkgeworI2lmIEVOQUJMRSgy
MDIyX0dMSUJfQVBJKQorICAgICAgICAgICAgICAgIGF1dG8mIGRhdGFTdG9yZSA9IHdlYmtpdFdl
YnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZSh3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF93
ZWJzaXRlX2RhdGFfbWFuYWdlcihuZXR3b3JrU2Vzc2lvbikpOworI2Vsc2UKICAgICAgICAgICAg
ICAgICBhdXRvJiBkYXRhU3RvcmUgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRhU3Rv
cmUod2Via2l0X3dlYl9jb250ZXh0X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcih3ZWJDb250ZXh0
KSk7CisjZW5kaWYKICAgICAgICAgICAgICAgICBkYXRhU3RvcmUuc2V0TmV0d29ya1Byb3h5U2V0
dGluZ3MoV1RGTW92ZShzZXR0aW5ncykpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgV2ViS2l0TmV0d29ya1Byb3h5U2V0dGluZ3MqIHByb3h5U2V0dGluZ3Mg
PSBudWxscHRyOwogICAgICAgICAgICAgYXV0byBwcm94eU1vZGUgPSBwYXJzZVByb3h5Q2FwYWJp
bGl0aWVzKCpjYXBhYmlsaXRpZXMucHJveHksICZwcm94eVNldHRpbmdzKTsKKyNpZiBFTkFCTEUo
MjAyMl9HTElCX0FQSSkKKyAgICAgICAgICAgIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fc2V0X25l
dHdvcmtfcHJveHlfc2V0dGluZ3MobmV0d29ya1Nlc3Npb24sIHByb3h5TW9kZSwgcHJveHlTZXR0
aW5ncyk7CisjZWxzZQogICAgICAgICAgICAgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX3Nl
dF9uZXR3b3JrX3Byb3h5X3NldHRpbmdzKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfd2Vic2l0ZV9k
YXRhX21hbmFnZXIod2ViQ29udGV4dCksIHByb3h5TW9kZSwgcHJveHlTZXR0aW5ncyk7CisjZW5k
aWYKICAgICAgICAgICAgIGlmIChwcm94eVNldHRpbmdzKQogICAgICAgICAgICAgICAgIHdlYmtp
dF9uZXR3b3JrX3Byb3h5X3NldHRpbmdzX2ZyZWUocHJveHlTZXR0aW5ncyk7CiAgICAgICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdE5hdmln
YXRpb25DbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0
TmF2aWdhdGlvbkNsaWVudC5jcHAKaW5kZXggNDVkNGY0NjU0YzYxLi4xYzQ2YjliOTgyZjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdE5hdmlnYXRp
b25DbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktp
dE5hdmlnYXRpb25DbGllbnQuY3BwCkBAIC0zNCw2ICszNCwxMCBAQAogI2luY2x1ZGUgPHd0Zi9n
bGliL0dVbmlxdWVQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKKyNpZiBF
TkFCTEUoMjAyMl9HTElCX0FQSSkKKyNpbmNsdWRlICJXZWJLaXROZXR3b3JrU2Vzc2lvblByaXZh
dGUuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKQEAgLTE1OCwxOSArMTYyLDMxIEBAIHByaXZhdGU6CiAgICAgdm9pZCBuYXZp
Z2F0aW9uQWN0aW9uRGlkQmVjb21lRG93bmxvYWQoV2ViUGFnZVByb3h5JiwgQVBJOjpOYXZpZ2F0
aW9uQWN0aW9uJiwgRG93bmxvYWRQcm94eSYgZG93bmxvYWRQcm94eSkgb3ZlcnJpZGUKICAgICB7
CiAgICAgICAgIGF1dG8gZG93bmxvYWQgPSB3ZWJraXREb3dubG9hZENyZWF0ZShkb3dubG9hZFBy
b3h5LCBtX3dlYlZpZXcpOworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgICAgICB3ZWJr
aXROZXR3b3JrU2Vzc2lvbkRvd25sb2FkU3RhcnRlZCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X25ldHdv
cmtfc2Vzc2lvbihtX3dlYlZpZXcpLCBkb3dubG9hZC5nZXQoKSk7CisjZWxzZQogICAgICAgICB3
ZWJraXRXZWJDb250ZXh0RG93bmxvYWRTdGFydGVkKHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4
dChtX3dlYlZpZXcpLCBkb3dubG9hZC5nZXQoKSk7CisjZW5kaWYKICAgICB9CiAKICAgICB2b2lk
IG5hdmlnYXRpb25SZXNwb25zZURpZEJlY29tZURvd25sb2FkKFdlYlBhZ2VQcm94eSYsIEFQSTo6
TmF2aWdhdGlvblJlc3BvbnNlJiwgRG93bmxvYWRQcm94eSYgZG93bmxvYWRQcm94eSkgb3ZlcnJp
ZGUKICAgICB7CiAgICAgICAgIGF1dG8gZG93bmxvYWQgPSB3ZWJraXREb3dubG9hZENyZWF0ZShk
b3dubG9hZFByb3h5LCBtX3dlYlZpZXcpOworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAg
ICAgICB3ZWJraXROZXR3b3JrU2Vzc2lvbkRvd25sb2FkU3RhcnRlZCh3ZWJraXRfd2ViX3ZpZXdf
Z2V0X25ldHdvcmtfc2Vzc2lvbihtX3dlYlZpZXcpLCBkb3dubG9hZC5nZXQoKSk7CisjZWxzZQog
ICAgICAgICB3ZWJraXRXZWJDb250ZXh0RG93bmxvYWRTdGFydGVkKHdlYmtpdF93ZWJfdmlld19n
ZXRfY29udGV4dChtX3dlYlZpZXcpLCBkb3dubG9hZC5nZXQoKSk7CisjZW5kaWYKICAgICB9CiAK
ICAgICB2b2lkIGNvbnRleHRNZW51RGlkQ3JlYXRlRG93bmxvYWQoV2ViUGFnZVByb3h5JiwgRG93
bmxvYWRQcm94eSYgZG93bmxvYWRQcm94eSkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGF1dG8g
ZG93bmxvYWQgPSB3ZWJraXREb3dubG9hZENyZWF0ZShkb3dubG9hZFByb3h5LCBtX3dlYlZpZXcp
OworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgICAgICB3ZWJraXROZXR3b3JrU2Vzc2lv
bkRvd25sb2FkU3RhcnRlZCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X25ldHdvcmtfc2Vzc2lvbihtX3dl
YlZpZXcpLCBkb3dubG9hZC5nZXQoKSk7CisjZWxzZQogICAgICAgICB3ZWJraXRXZWJDb250ZXh0
RG93bmxvYWRTdGFydGVkKHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dChtX3dlYlZpZXcpLCBk
b3dubG9hZC5nZXQoKSk7CisjZW5kaWYKICAgICB9CiAKICAgICBXZWJLaXRXZWJWaWV3KiBtX3dl
YlZpZXc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJL
aXROZXR3b3JrU2Vzc2lvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9X
ZWJLaXROZXR3b3JrU2Vzc2lvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwLi5lNTJmYmJkNGY5ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXROZXR3b3JrU2Vzc2lvbi5jcHAKQEAgLTAsMCArMSw2NTAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjMgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiBFTkFCTEUoMjAy
Ml9HTElCX0FQSSkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdE5ldHdv
cmtTZXNzaW9uLmgiCisKKyNpbmNsdWRlICJBUElEb3dubG9hZENsaWVudC5oIgorI2luY2x1ZGUg
IkZyYW1lSW5mb0RhdGEuaCIKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmgiCisj
aW5jbHVkZSAiV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRE
b3dubG9hZFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRJbml0aWFsaXplLmgiCisjaW5jbHVk
ZSAiV2ViS2l0TWVtb3J5UHJlc3N1cmVTZXR0aW5ncy5oIgorI2luY2x1ZGUgIldlYktpdE1lbW9y
eVByZXNzdXJlU2V0dGluZ3NQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0TmV0d29ya1Byb3h5
U2V0dGluZ3NQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgorI2luY2x1ZGUg
IldlYktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNz
UG9vbC5oIgorI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CisjaW5jbHVkZSA8cGFsL0h5c3Rl
cmVzaXNBY3Rpdml0eS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3Rm
L2dsaWIvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvZ2xpYi9XVEZHVHlwZS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCisv
KioKKyAqIFdlYktpdE5ldHdvcmtTZXNzaW9uOgorICogQHNlZV9hbHNvOiAjV2ViS2l0V2ViQ29u
dGV4dCwgI1dlYktpdFdlYnNpdGVEYXRhCisgKgorICogTWFuYWdlcyBuZXR3b3JrIGNvbmZpZ3Vy
YXRpb24uCisgKgorICoKKyAqIFNpbmNlOiAyLjQwCisgKi8KKwordXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKKworZW51bSB7CisgICAgUFJPUF8wLAorCisgICAgUFJPUF9EQVRBX0RJUkVDVE9SWSwK
KyAgICBQUk9QX0NBQ0hFX0RJUkVDVE9SWSwKKyAgICBQUk9QX0lTX0VQSEVNRVJBTCwKKworICAg
IE5fUFJPUEVSVElFUworfTsKKworc3RhdGljIEdQYXJhbVNwZWMqIHNPYmpQcm9wZXJ0aWVzW05f
UFJPUEVSVElFU10gPSB7IG51bGxwdHIsIH07CisKK2VudW0geworICAgIERPV05MT0FEX1NUQVJU
RUQsCisKKyAgICBMQVNUX1NJR05BTAorfTsKKworc3RhdGljIGd1aW50IHNpZ25hbHNbTEFTVF9T
SUdOQUxdID0geyAwLCB9OworCitzdHJ1Y3QgX1dlYktpdE5ldHdvcmtTZXNzaW9uUHJpdmF0ZSB7
CisgICAgX1dlYktpdE5ldHdvcmtTZXNzaW9uUHJpdmF0ZSgpCisgICAgICAgIDogZG5zUHJlZmV0
Y2hIeXN0ZXJlcmlzKFt0aGlzXShQQUw6Okh5c3RlcmVzaXNTdGF0ZSBzdGF0ZSkgeyBpZiAoc3Rh
dGUgPT0gUEFMOjpIeXN0ZXJlc2lzU3RhdGU6OlN0b3BwZWQpIGRuc1ByZWZldGNoZWRIb3N0cy5j
bGVhcigpOyB9KQorICAgIHsKKyAgICB9CisKKyAgICBHUmVmUHRyPFdlYktpdFdlYnNpdGVEYXRh
TWFuYWdlcj4gd2Vic2l0ZURhdGFNYW5hZ2VyOworICAgIEdSZWZQdHI8V2ViS2l0Q29va2llTWFu
YWdlcj4gY29va2llTWFuYWdlcjsKKyAgICBXZWJLaXRUTFNFcnJvcnNQb2xpY3kgdGxzRXJyb3Jz
UG9saWN5OworCisgICAgR1VuaXF1ZVB0cjxjaGFyPiBkYXRhRGlyZWN0b3J5OworICAgIEdVbmlx
dWVQdHI8Y2hhcj4gY2FjaGVEaXJlY3Rvcnk7CisKKyAgICBIYXNoU2V0PFN0cmluZz4gZG5zUHJl
ZmV0Y2hlZEhvc3RzOworICAgIFBBTDo6SHlzdGVyZXNpc0FjdGl2aXR5IGRuc1ByZWZldGNoSHlz
dGVyZXJpczsKK307CisKK1dFQktJVF9ERUZJTkVfVFlQRShXZWJLaXROZXR3b3JrU2Vzc2lvbiwg
d2Via2l0X25ldHdvcmtfc2Vzc2lvbiwgR19UWVBFX09CSkVDVCkKKworc3RhdGljIHZvaWQgd2Vi
a2l0TmV0d29ya1Nlc3Npb25HZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJ
RCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAgIFdlYktpdE5l
dHdvcmtTZXNzaW9uKiBzZXNzaW9uID0gV0VCS0lUX05FVFdPUktfU0VTU0lPTihvYmplY3QpOwor
CisgICAgc3dpdGNoIChwcm9wSUQpIHsKKyAgICBjYXNlIFBST1BfSVNfRVBIRU1FUkFMOgorICAg
ICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2lz
X2VwaGVtZXJhbChzZXNzaW9uKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJRCwgcGFy
YW1TcGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdE5ldHdvcmtTZXNzaW9uU2V0
UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSUQsIGNvbnN0IEdWYWx1ZSogdmFs
dWUsIEdQYXJhbVNwZWMqIHBhcmFtU3BlYykKK3sKKyAgICBXZWJLaXROZXR3b3JrU2Vzc2lvbiog
c2Vzc2lvbiA9IFdFQktJVF9ORVRXT1JLX1NFU1NJT04ob2JqZWN0KTsKKworICAgIHN3aXRjaCAo
cHJvcElEKSB7CisgICAgY2FzZSBQUk9QX0RBVEFfRElSRUNUT1JZOgorICAgICAgICBzZXNzaW9u
LT5wcml2LT5kYXRhRGlyZWN0b3J5LnJlc2V0KGdfdmFsdWVfZHVwX3N0cmluZyh2YWx1ZSkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQ0FDSEVfRElSRUNUT1JZOgorICAgICAgICBz
ZXNzaW9uLT5wcml2LT5jYWNoZURpcmVjdG9yeS5yZXNldChnX3ZhbHVlX2R1cF9zdHJpbmcodmFs
dWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0lTX0VQSEVNRVJBTDoKKyAgICAg
ICAgaWYgKGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKQorICAgICAgICAgICAgc2Vzc2lvbi0+
cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyID0gYWRvcHRHUmVmKFdFQktJVF9XRUJTSVRFX0RBVEFf
TUFOQUdFUihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCU0lURV9EQVRBX01BTkFHRVIsICJp
cy1lcGhlbWVyYWwiLCBUUlVFLCBudWxscHRyKSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBw
cm9wSUQsIHBhcmFtU3BlYyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXROZXR3b3Jr
U2Vzc2lvbkNvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBHX09CSkVDVF9DTEFT
Uyh3ZWJraXRfbmV0d29ya19zZXNzaW9uX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkKG9iamVj
dCk7CisKKyAgICBXZWJLaXROZXR3b3JrU2Vzc2lvblByaXZhdGUqIHByaXYgPSBXRUJLSVRfTkVU
V09SS19TRVNTSU9OKG9iamVjdCktPnByaXY7CisgICAgaWYgKCFwcml2LT53ZWJzaXRlRGF0YU1h
bmFnZXIpCisgICAgICAgIHByaXYtPndlYnNpdGVEYXRhTWFuYWdlciA9IGFkb3B0R1JlZih3ZWJr
aXRXZWJzaXRlRGF0YU1hbmFnZXJDcmVhdGUoV1RGTW92ZShwcml2LT5kYXRhRGlyZWN0b3J5KSwg
V1RGTW92ZShwcml2LT5jYWNoZURpcmVjdG9yeSkpKTsKKworICAgIHByaXYtPnRsc0Vycm9yc1Bv
bGljeSA9IFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9GQUlMOworICAgIHdlYmtpdFdlYnNpdGVE
YXRhTWFuYWdlckdldERhdGFTdG9yZShwcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkpLnNl
dElnbm9yZVRMU0Vycm9ycyhmYWxzZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9uZXR3b3Jr
X3Nlc3Npb25fY2xhc3NfaW5pdChXZWJLaXROZXR3b3JrU2Vzc2lvbkNsYXNzKiBzZXNzaW9uQ2xh
c3MpCit7CisgICAgd2Via2l0SW5pdGlhbGl6ZSgpOworCisgICAgR09iamVjdENsYXNzKiBnT2Jq
ZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhzZXNzaW9uQ2xhc3MpOworICAgIGdPYmplY3RDbGFz
cy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0TmV0d29ya1Nlc3Npb25HZXRQcm9wZXJ0eTsKKyAgICBn
T2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdE5ldHdvcmtTZXNzaW9uU2V0UHJvcGVy
dHk7CisgICAgZ09iamVjdENsYXNzLT5jb25zdHJ1Y3RlZCA9IHdlYmtpdE5ldHdvcmtTZXNzaW9u
Q29uc3RydWN0ZWQ7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXROZXR3b3JrU2Vzc2lvbjpkYXRh
LWRpcmVjdG9yeToKKyAgICAgKgorICAgICAqIFRoZSBiYXNlIGRhdGEgZGlyZWN0b3J5IHVzZWQg
dG8gY3JlYXRlIHRoZSAjV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLiBJZiAlTlVMTCwgYSBkZWZh
dWx0IGxvY2F0aW9uIHdpbGwgYmUgdXNlZC4KKyAgICAgKgorICAgICAqIFNpbmNlOiAyLjQwCisg
ICAgICovCisgICAgc09ialByb3BlcnRpZXNbUFJPUF9EQVRBX0RJUkVDVE9SWV0gPQorICAgICAg
ICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImRhdGEtZGlyZWN0b3J5IiwKKyAg
ICAgICAgICAgIG51bGxwdHIsIG51bGxwdHIsCisgICAgICAgICAgICBudWxscHRyLAorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KFdFQktJVF9QQVJBTV9XUklUQUJMRSB8IEdf
UEFSQU1fQ09OU1RSVUNUX09OTFkpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdE5ldHdvcmtT
ZXNzaW9uOmNhY2hlLWRpcmVjdG9yeToKKyAgICAgKgorICAgICAqIFRoZSBiYXNlIGNhY2hlcyBk
aXJlY3RvcnkgdXNlZCB0byBjcmVhdGUgdGhlICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuIElm
ICVOVUxMLCBhIGRlZmF1bHQgbG9jYXRpb24gd2lsbCBiZSB1c2VkLgorICAgICAqCisgICAgICog
U2luY2U6IDIuNDAKKyAgICAgKi8KKyAgICBzT2JqUHJvcGVydGllc1tQUk9QX0NBQ0hFX0RJUkVD
VE9SWV0gPQorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImNhY2hl
LWRpcmVjdG9yeSIsCisgICAgICAgICAgICBudWxscHRyLCBudWxscHRyLAorICAgICAgICAgICAg
bnVsbHB0ciwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihXRUJLSVRfUEFS
QU1fV1JJVEFCTEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSk7CisKKyAgICAvKioKKyAgICAg
KiBXZWJLaXROZXR3b3JrU2Vzc2lvbjppcy1lcGhlbWVyYWw6CisgICAgICoKKyAgICAgKiBXaGV0
aGVyIHRvIGNyZWF0ZSBhbiBlcGhlcm1lcmFsICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgZm9y
IHRoZSBzZXNzaW9uLgorICAgICAqCisgICAgICogU2luY2U6IDIuNDAKKyAgICAgKi8KKyAgICBz
T2JqUHJvcGVydGllc1tQUk9QX0lTX0VQSEVNRVJBTF0gPQorICAgICAgICBnX3BhcmFtX3NwZWNf
Ym9vbGVhbigKKyAgICAgICAgICAgICJpcy1lcGhlbWVyYWwiLAorICAgICAgICAgICAgbnVsbHB0
ciwgbnVsbHB0ciwKKyAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
R1BhcmFtRmxhZ3M+KFdFQktJVF9QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9P
TkxZKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnRpZXMoZ09iamVjdENs
YXNzLCBOX1BST1BFUlRJRVMsIHNPYmpQcm9wZXJ0aWVzKTsKKworICAgIC8qKgorICAgICAqIFdl
YktpdE5ldHdvcmtTZXNzaW9uOjpkb3dubG9hZC1zdGFydGVkOgorICAgICAqIEBzZXNzaW9uOiB0
aGUgI1dlYktpdE5ldHdvcmtTZXNzaW9uCisgICAgICogQGRvd25sb2FkOiB0aGUgI1dlYktpdERv
d25sb2FkIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGV2ZW50CisgICAgICoKKyAgICAgKiBUaGlzIHNp
Z25hbCBpcyBlbWl0dGVkIHdoZW4gYSBuZXcgZG93bmxvYWQgcmVxdWVzdCBpcyBtYWRlLgorICAg
ICAqCisgICAgICogU2luY2U6IDIuNDAKKyAgICAgKi8KKyAgICBzaWduYWxzW0RPV05MT0FEX1NU
QVJURURdID0KKyAgICAgICAgZ19zaWduYWxfbmV3KCJkb3dubG9hZC1zdGFydGVkIiwKKyAgICAg
ICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGdPYmplY3RDbGFzcyksCisgICAgICAgICAgICBHX1NJ
R05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgIDAsIG51bGxwdHIsIG51bGxwdHIsCisgICAgICAg
ICAgICBudWxscHRyLAorICAgICAgICAgICAgR19UWVBFX05PTkUsIDEsCisgICAgICAgICAgICBX
RUJLSVRfVFlQRV9ET1dOTE9BRCk7Cit9CisKK3ZvaWQgd2Via2l0TmV0d29ya1Nlc3Npb25Eb3du
bG9hZFN0YXJ0ZWQoV2ViS2l0TmV0d29ya1Nlc3Npb24qIHNlc3Npb24sIFdlYktpdERvd25sb2Fk
KiBkb3dubG9hZCkKK3sKKyAgICBnX3NpZ25hbF9lbWl0KHNlc3Npb24sIHNpZ25hbHNbRE9XTkxP
QURfU1RBUlRFRF0sIDAsIGRvd25sb2FkKTsKK30KKworc3RhdGljIGdwb2ludGVyIGNyZWF0ZURl
ZmF1bHROZXR3b3JrU2Vzc2lvbihncG9pbnRlcikKK3sKKyAgICBzdGF0aWMgR1JlZlB0cjxXZWJL
aXROZXR3b3JrU2Vzc2lvbj4gc2Vzc2lvbiA9IGFkb3B0R1JlZih3ZWJraXRfbmV0d29ya19zZXNz
aW9uX25ldyhudWxscHRyLCBudWxscHRyKSk7CisgICAgcmV0dXJuIHNlc3Npb24uZ2V0KCk7Cit9
CisKKy8qKgorICogd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfZGVmYXVsdDoKKyAqCisgKiBH
ZXQgdGhlIGRlZmF1bHQgbmV0d29yayBzZXNzaW9uLgorICogVGhlIGRlZmF1bHQgbmV0d29yayBz
ZXNzaW9uIGlzIGNyZWF0ZWQgdXNpbmcgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9uZXcoKSBhbmQg
cGFzc2luZworICogJU5VTEwgYXMgZGF0YSBhbmQgY2FjaGUgZGlyZWN0b3JpZXMuCisgKgorICog
UmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBhICNXZWJLaXROZXR3b3JrU2Vzc2lvbgorICoKKyAq
IFNpbmNlOiAyLjQwCisgKi8KK1dlYktpdE5ldHdvcmtTZXNzaW9uKiB3ZWJraXRfbmV0d29ya19z
ZXNzaW9uX2dldF9kZWZhdWx0KCkKK3sKKyAgICBzdGF0aWMgR09uY2Ugb25jZUluaXQgPSBHX09O
Q0VfSU5JVDsKKyAgICByZXR1cm4gV0VCS0lUX05FVFdPUktfU0VTU0lPTihnX29uY2UoJm9uY2VJ
bml0LCBjcmVhdGVEZWZhdWx0TmV0d29ya1Nlc3Npb24sIG51bGxwdHIpKTsKK30KKworLyoqCisg
KiB3ZWJraXRfbmV0d29ya19zZXNzaW9uX25ldzoKKyAqIEBkYXRhX2RpcmVjdG9yeTogKG51bGxh
YmxlKTogYSBiYXNlIGRpcmVjdG9yeSBmb3IgZGF0YSwgb3IgJU5VTEwKKyAqIEBjYWNoZV9kaXJl
Y3Ryb3J5OiAobnVsbGFibGUpOiBhIGJhc2UgZGlyZWZjdG9yeSBmb3IgY2FjaGVzLCBvciAlTlVM
TAorICoKKyAqIENyZWF0ZXMgYSBuZXcgI1dlYktpdE5ldHdvcmtTZXNzaW9uIHdpdGggYSBwZXJz
aXN0ZW50ICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuCisgKgorICogSXQgbXVzdCBiZSBwYXNz
ZWQgYXMgY29uc3RydWN0aW9uIHBhcmFtZXRlciBvZiBhICNXZWJLaXRXZWJWaWV3LgorICoKKyAq
IFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogdGhlIG5ld2x5IGNyZWF0ZWQgI1dlYktpdE5ldHdv
cmtTZXNzaW9uCisgKgorICogU2luY2U6IDIuNDAKKyAqLworV2ViS2l0TmV0d29ya1Nlc3Npb24q
IHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fbmV3KGNvbnN0IGNoYXIqIGRhdGFEaXJlY3RvcnksIGNv
bnN0IGNoYXIqIGNhY2hlRGlyZWN0b3J5KQoreworICAgIHJldHVybiBXRUJLSVRfTkVUV09SS19T
RVNTSU9OKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9ORVRXT1JLX1NFU1NJT04sICJkYXRhLWRp
cmVjdG9yeSIsIGRhdGFEaXJlY3RvcnksICJjYWNoZS1kaXJlY3RvcnkiLCBjYWNoZURpcmVjdG9y
eSwgbnVsbHB0cikpOworfQorCisvKioKKyAqIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fbmV3X2Vw
aGVtZXJhbDoKKyAqCisgKiBDcmVhdGVzIGEgbmV3ICNXZWJLaXROZXR3b3JrU2Vzc2lvbiB3aXRo
IGFuIGVwaGVtZXJhbCAjV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLgorICoKKyAqCisgKiBSZXR1
cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3IGVwaGVtZXJhbCAjV2ViS2l0TmV0d29ya1Nlc3Np
b24uCisgKgorICogU2luY2U6IDIuNDAKKyAqLworV2ViS2l0TmV0d29ya1Nlc3Npb24qIHdlYmtp
dF9uZXR3b3JrX3Nlc3Npb25fbmV3X2VwaGVtZXJhbCgpCit7CisgICAgcmV0dXJuIFdFQktJVF9O
RVRXT1JLX1NFU1NJT04oZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX05FVFdPUktfU0VTU0lPTiwg
ImlzLWVwaGVtZXJhbCIsIFRSVUUsIG51bGxwdHIpKTsKK30KKworLyoqCisgKiB3ZWJraXRfbmV0
d29ya19zZXNzaW9uX2lzX2VwaGVtZXJhbDoKKyAqIEBzZXNzaW9uOiBhICNXZWJLaXROZXR3b3Jr
U2Vzc2lvbgorICoKKyAqIEdldCB3aGV0aGVyIEBzZXNzaW9uIGlzIGVwaGVtZXJhbC4KKyAqIEEg
I1dlYktpdE5ldHdvcmtTZXNzaW9uIGlzIGVwaGVtZXJhbCB3aGVuIGl0cyAjV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyIGlzIGVwaGVtZXJhbC4KKyAqIFNlZSAjV2ViS2l0V2Vic2l0ZURhdGFNYW5h
Z2VyOmlzLWVwaGVtZXJhbCBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFJldHVybnM6ICVUUlVF
IGlmIEBzZXNzaW9uIGlzIHBlaG1lcmFsLCBvciAlRkFMU0Ugb3RoZXJ3aXNlCisgKgorICogU2lu
Y2U6IDIuNDAKKyAqLworZ2Jvb2xlYW4gd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9pc19lcGhlbWVy
YWwoV2ViS2l0TmV0d29ya1Nlc3Npb24qIHNlc3Npb24pCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0lTX05FVFdPUktfU0VTU0lPTihzZXNzaW9uKSwgRkFMU0UpOworCisgICAg
cmV0dXJuIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9pc19lcGhlbWVyYWwoc2Vzc2lvbi0+
cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKTsKK30KKworLyoqCisgKiB3ZWJraXRfbmV0
d29ya19zZXNzaW9uX2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcjoKKyAqIEBzZXNzaW9uOiBhICNX
ZWJLaXROZXR3b3JrU2Vzc2lvbgorICoKKyAqIEdldCB0aGUgI1dlYktpdFdlYnNpdGVEYXRhTWFu
YWdlciBvZiBAc2Vzc2lvbi4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IGEgI1dl
YktpdFdlYnNpdGVEYXRhTWFuYWdlcgorICoKKyAqIFNpbmNlOiAyLjQwCisgKi8KK1dlYktpdFdl
YnNpdGVEYXRhTWFuYWdlciogd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfd2Vic2l0ZV9kYXRh
X21hbmFnZXIoV2ViS2l0TmV0d29ya1Nlc3Npb24qIHNlc3Npb24pCit7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0lTX05FVFdPUktfU0VTU0lPTihzZXNzaW9uKSwgbnVsbHB0cik7
CisKKyAgICByZXR1cm4gc2Vzc2lvbi0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpOwor
fQorCisvKioKKyAqIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X2Nvb2tpZV9tYW5hZ2VyOgor
ICogQHNlc3Npb246IGEgI1dlYktpdE5ldHdvcmtTZXNzaW9uCisgKgorICogR2V0IHRoZSAjV2Vi
S2l0Q29va2llTWFuYWdlciBvZiBAc2Vzc2lvbi4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIg
bm9uZSk6IGEgI1dlYktpdENvb2tpZU1hbmFnZXIKKyAqCisgKiBTaW5jZTogMi40MAorICovCitX
ZWJLaXRDb29raWVNYW5hZ2VyKiB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF9jb29raWVfbWFu
YWdlcihXZWJLaXROZXR3b3JrU2Vzc2lvbiogc2Vzc2lvbikKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfSVNfTkVUV09SS19TRVNTSU9OKHNlc3Npb24pLCBudWxscHRyKTsKKwor
ICAgIGlmICghc2Vzc2lvbi0+cHJpdi0+Y29va2llTWFuYWdlcikKKyAgICAgICAgc2Vzc2lvbi0+
cHJpdi0+Y29va2llTWFuYWdlciA9IGFkb3B0R1JlZih3ZWJraXRDb29raWVNYW5hZ2VyQ3JlYXRl
KHNlc3Npb24tPnByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSkpOworCisgICAgcmV0dXJu
IHNlc3Npb24tPnByaXYtPmNvb2tpZU1hbmFnZXIuZ2V0KCk7Cit9CisKKy8qKgorICogd2Via2l0
X25ldHdvcmtfc2Vzc2lvbl9zZXRfaXRwX2VuYWJsZWQ6CisgKiBAc2Vzc2lvbjogYSAjV2ViS2l0
TmV0d29ya1Nlc3Npb24KKyAqIEBlbmFibGVkOiB2YWx1ZSB0byBzZXQKKyAqCisgKiBFbmFibGUg
b3IgZGlzYWJsZSBJbnRlbGxpZ2VudCBUcmFja2luZyBQcmV2ZW50aW9uIChJVFApLgorICoKKyAq
IFdoZW4gSVRQIGlzIGVuYWJsZWQgcmVzb3VyY2UgbG9hZCBzdGF0aXN0aWNzCisgKiBhcmUgY29s
bGVjdGVkIGFuZCB1c2VkIHRvIGRlY2lkZSB3aGV0aGVyIHRvIGFsbG93IG9yIGJsb2NrIHRoaXJk
LXBhcnR5IGNvb2tpZXMgYW5kIHByZXZlbnQgdXNlciB0cmFja2luZy4KKyAqIE5vdGUgdGhhdCB3
aGlsZSBJVFAgaXMgZW5hYmxlZCB0aGUgYWNjZXB0IHBvbGljeSAlV0VCS0lUX0NPT0tJRV9QT0xJ
Q1lfQUNDRVBUX05PX1RISVJEX1BBUlRZIGlzIGlnbm9yZWQgYW5kCisgKiAlV0VCS0lUX0NPT0tJ
RV9QT0xJQ1lfQUNDRVBUX0FMV0FZUyBpcyB1c2VkIGluc3RlYWQuIFNlZSBhbHNvIHdlYmtpdF9j
b29raWVfc2Vzc2lvbl9zZXRfYWNjZXB0X3BvbGljeSgpLgorICoKKyAqIFNpbmNlOiAyLjQwCisg
Ki8KK3ZvaWQgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfaXRwX2VuYWJsZWQoV2ViS2l0TmV0
d29ya1Nlc3Npb24qIHNlc3Npb24sIGdib29sZWFuIGVuYWJsZWQpCit7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfSVNfTkVUV09SS19TRVNTSU9OKHNlc3Npb24pKTsKKworICAgIGF1dG8m
IHdlYnNpdGVEYXRhU3RvcmUgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUo
c2Vzc2lvbi0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKTsKKyAgICB3ZWJzaXRlRGF0
YVN0b3JlLnNldFRyYWNraW5nUHJldmVudGlvbkVuYWJsZWQoZW5hYmxlZCk7Cit9CisKKy8qKgor
ICogd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfaXRwX2VuYWJsZWQ6CisgKiBAc2Vzc2lvbjog
YSAjV2ViS2l0TmV0d29ya1Nlc3Npb24KKyAqCisgKiBHZXQgd2hldGhlciBJbnRlbGxpZ2VudCBU
cmFja2luZyBQcmV2ZW50aW9uIChJVFApIGlzIGVuYWJsZWQgb3Igbm90LgorICoKKyAqIFJldHVy
bnM6ICVUUlVFIGlmIElUUCBpcyBlbmFibGVkLCBvciAlRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAq
IFNpbmNlOiAyLjQwCisgKi8KK2dib29sZWFuIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X2l0
cF9lbmFibGVkKFdlYktpdE5ldHdvcmtTZXNzaW9uKiBzZXNzaW9uKQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9JU19ORVRXT1JLX1NFU1NJT04oc2Vzc2lvbiksIEZBTFNFKTsK
KworICAgIGF1dG8mIHdlYnNpdGVEYXRhU3RvcmUgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJH
ZXREYXRhU3RvcmUoc2Vzc2lvbi0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKTsKKyAg
ICByZXR1cm4gd2Vic2l0ZURhdGFTdG9yZS50cmFja2luZ1ByZXZlbnRpb25FbmFibGVkKCk7Cit9
CisKKy8qKgorICogd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfcGVyc2lzdGVudF9jcmVkZW50
aWFsX3N0b3JhZ2VfZW5hYmxlZDoKKyAqIEBzZXNzaW9uOiBhICNXZWJLaXROZXR3b3JrU2Vzc2lv
bgorICogQGVuYWJsZWQ6IHZhbHVlIHRvIHNldAorICoKKyAqIEVuYWJsZSBvciBkaXNhYmxlIHBl
cnNpc3RlbnQgY3JlZGVudGlhbCBzdG9yYWdlLgorICoKKyAqIFdoZW4gZW5hYmxlZCwgd2hpY2gg
aXMgdGhlIGRlZmF1bHQgZm9yCisgKiBub24tZXBoZW1lcmFsIHNlc3Npb25zLCB0aGUgbmV0d29y
ayBwcm9jZXNzIHdpbGwgdHJ5IHRvIHJlYWQgYW5kIHdyaXRlIEhUVFAgYXV0aGVudGlhY2F0aW9u
CisgKiBjcmVkZW50aWFscyBmcm9tIHBlcnNpc3RlbnQgc3RvcmFnZS4KKyAqCisgKiBTaW5jZTog
Mi40MAorICovCit2b2lkIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fc2V0X3BlcnNpc3RlbnRfY3Jl
ZGVudGlhbF9zdG9yYWdlX2VuYWJsZWQoV2ViS2l0TmV0d29ya1Nlc3Npb24qIHNlc3Npb24sIGdi
b29sZWFuIGVuYWJsZWQpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfTkVUV09S
S19TRVNTSU9OKHNlc3Npb24pKTsKKworICAgIGF1dG8mIHdlYnNpdGVEYXRhU3RvcmUgPSB3ZWJr
aXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUoc2Vzc2lvbi0+cHJpdi0+d2Vic2l0ZURh
dGFNYW5hZ2VyLmdldCgpKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlLnNldFBlcnNpc3RlbnRDcmVk
ZW50aWFsU3RvcmFnZUVuYWJsZWQoZW5hYmxlZCk7Cit9CisKKy8qKgorICogd2Via2l0X25ldHdv
cmtfc2Vzc2lvbl9nZXRfcGVyc2lzdGVudF9jcmVkZW50aWFsX3N0b3JhZ2VfZW5hYmxlZDoKKyAq
IEBzZXNzaW9uOiBhICNXZWJLaXROZXR3b3JrU2Vzc2lvbgorICoKKyAqIEdldCB3aGV0aGVyIHBl
cnNpc3RlbnQgY3JlZGVudGlhbCBzdG9yYWdlIGlzIGVuYWJsZWQgb3Igbm90LgorICoKKyAqIFNl
ZSBhbHNvIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fc2V0X3BlcnNpc3RlbnRfY3JlZGVudGlhbF9z
dG9yYWdlX2VuYWJsZWQoKS4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiBwZXJzaXN0ZW50IGNy
ZWRlbnRpYWwgc3RvcmFnZSBpcyBlbmFibGVkLCBvciAlRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAq
IFNpbmNlOiAyLjQwCisgKi8KK2dib29sZWFuIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X3Bl
cnNpc3RlbnRfY3JlZGVudGlhbF9zdG9yYWdlX2VuYWJsZWQoV2ViS2l0TmV0d29ya1Nlc3Npb24q
IHNlc3Npb24pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX05FVFdPUktf
U0VTU0lPTihzZXNzaW9uKSwgRkFMU0UpOworCisgICAgYXV0byYgd2Vic2l0ZURhdGFTdG9yZSA9
IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShzZXNzaW9uLT5wcml2LT53ZWJz
aXRlRGF0YU1hbmFnZXIuZ2V0KCkpOworICAgIHJldHVybiB3ZWJzaXRlRGF0YVN0b3JlLnBlcnNp
c3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQoKTsKK30KKworLyoqCisgKiB3ZWJraXRfbmV0
d29ya19zZXNzaW9uX3NldF90bHNfZXJyb3JzX3BvbGljeToKKyAqIEBzZXNzaW9uOiBhICNXZWJL
aXROZXR3b3JrU2Vzc2lvbgorICogQHBvbGljeTogYSAjV2ViS2l0VExTRXJyb3JzUG9saWN5Cisg
KgorICogU2V0IHRoZSBUTFMgZXJyb3JzIHBvbGljeSBvZiBAc2Vzc2lvbiBhcyBAcG9saWN5Lgor
ICoKKyAqIFNpbmNlOiAyLjQwCisgKi8KK3ZvaWQgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRf
dGxzX2Vycm9yc19wb2xpY3koV2ViS2l0TmV0d29ya1Nlc3Npb24qIHNlc3Npb24sIFdlYktpdFRM
U0Vycm9yc1BvbGljeSBwb2xpY3kpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNf
TkVUV09SS19TRVNTSU9OKHNlc3Npb24pKTsKKworICAgIGlmIChzZXNzaW9uLT5wcml2LT50bHNF
cnJvcnNQb2xpY3kgPT0gcG9saWN5KQorICAgICAgICByZXR1cm47CisKKyAgICBzZXNzaW9uLT5w
cml2LT50bHNFcnJvcnNQb2xpY3kgPSBwb2xpY3k7CisgICAgYXV0byYgd2Vic2l0ZURhdGFTdG9y
ZSA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShzZXNzaW9uLT5wcml2LT53
ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkpOworICAgIHdlYnNpdGVEYXRhU3RvcmUuc2V0SWdub3Jl
VExTRXJyb3JzKHBvbGljeSA9PSBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfSUdOT1JFKTsKK30K
KworLyoqCisgKiB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF90bHNfZXJyb3JzX3BvbGljeToK
KyAqIEBzZXNzaW9uOiBhICNXZWJLaXROZXR3b3JrU2Vzc2lvbgorICoKKyAqIEdldCB0aGUgVExT
IGVycm9ycyBwb2xpY3kgb2YgQHNlc3Npb24uCisgKgorICogUmV0dXJuczogYSAjV2ViS2l0VExT
RXJyb3JzUG9saWN5CisgKgorICogU2luY2U6IDIuNDAKKyAqLworV2ViS2l0VExTRXJyb3JzUG9s
aWN5IHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X3Rsc19lcnJvcnNfcG9saWN5KFdlYktpdE5l
dHdvcmtTZXNzaW9uKiBzZXNzaW9uKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9JU19ORVRXT1JLX1NFU1NJT04oc2Vzc2lvbiksIFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9G
QUlMKTsKKworICAgIHJldHVybiBzZXNzaW9uLT5wcml2LT50bHNFcnJvcnNQb2xpY3k7Cit9CisK
Ky8qKgorICogd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9hbGxvd190bHNfY2VydGlmaWNhdGVfZm9y
X2hvc3Q6CisgKiBAc2Vzc2lvbjogYSAjV2ViS2l0TmV0d29ya1Nlc3Npb24KKyAqIEBjZXJ0aWZp
Y2F0ZTogYSAjR1Rsc0NlcnRpZmljYXRlCisgKiBAaG9zdDogdGhlIGhvc3QgZm9yIHdoaWNoIGEg
Y2VydGlmaWNhdGUgaXMgdG8gYmUgYWxsb3dlZAorICoKKyAqIElnbm9yZSBmdXJ0aGVyIFRMUyBl
cnJvcnMgb24gdGhlIEBob3N0IGZvciB0aGUgY2VydGlmaWNhdGUgcHJlc2VudCBpbiBAaW5mby4K
KyAqCisgKiBTaW5jZTogMi40MAorICovCit2b2lkIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fYWxs
b3dfdGxzX2NlcnRpZmljYXRlX2Zvcl9ob3N0KFdlYktpdE5ldHdvcmtTZXNzaW9uKiBzZXNzaW9u
LCBHVGxzQ2VydGlmaWNhdGUqIGNlcnRpZmljYXRlLCBjb25zdCBjaGFyKiBob3N0KQoreworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX05FVFdPUktfU0VTU0lPTihzZXNzaW9uKSk7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChHX0lTX1RMU19DRVJUSUZJQ0FURShjZXJ0aWZpY2F0ZSkpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoaG9zdCk7CisKKyAgICBhdXRvIGNlcnRpZmljYXRlSW5mbyA9
IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyhjZXJ0aWZpY2F0ZSwgc3RhdGljX2Nhc3Q8R1Rsc0Nl
cnRpZmljYXRlRmxhZ3M+KDApKTsKKyAgICBhdXRvJiB3ZWJzaXRlRGF0YVN0b3JlID0gd2Via2l0
V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKHNlc3Npb24tPnByaXYtPndlYnNpdGVEYXRh
TWFuYWdlci5nZXQoKSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZS5hbGxvd1NwZWNpZmljSFRUUFND
ZXJ0aWZpY2F0ZUZvckhvc3QoY2VydGlmaWNhdGVJbmZvLCBTdHJpbmc6OmZyb21VVEY4KGhvc3Qp
KTsKK30KKworLyoqCisgKiB3ZWJraXRfbmV0d29ya19zZXNzaW9uX3NldF9uZXR3b3JrX3Byb3h5
X3NldHRpbmdzOgorICogQHNlc3Npb246IGEgI1dlYktpdE5ldHdvcmtTZXNzaW9uCisgKiBAcHJv
eHlfbW9kZTogYSAjV2ViS2l0TmV0d29ya1Byb3h5TW9kZQorICogQHByb3h5X3NldHRpbmdzOiAo
YWxsb3ctbm9uZSk6IGEgI1dlYktpdE5ldHdvcmtQcm94eVNldHRpbmdzLCBvciAlTlVMTAorICoK
KyAqIFNldCB0aGUgbmV0d29yayBwcm94eSBzZXR0aW5ncyB0byBiZSB1c2VkIGJ5IGNvbm5lY3Rp
b25zIHN0YXJ0ZWQgaW4gQHNlc3Npb24gc2Vzc2lvbi4KKyAqCisgKiBCeSBkZWZhdWx0ICVXRUJL
SVRfTkVUV09SS19QUk9YWV9NT0RFX0RFRkFVTFQgaXMgdXNlZCwgd2hpY2ggbWVhbnMgdGhhdCB0
aGUKKyAqIHN5c3RlbSBzZXR0aW5ncyB3aWxsIGJlIHVzZWQgKGdfcHJveHlfcmVzb2x2ZXJfZ2V0
X2RlZmF1bHQoKSkuCisgKiBJZiB5b3Ugd2FudCB0byBvdmVycmlkZSB0aGUgc3lzdGVtIGRlZmF1
bHQgc2V0dGluZ3MsIHlvdSBjYW4gZWl0aGVyIHVzZQorICogJVdFQktJVF9ORVRXT1JLX1BST1hZ
X01PREVfTk9fUFJPWFkgdG8gbWFrZSBzdXJlIG5vIHByb3hpZXMgYXJlIHVzZWQgYXQgYWxsLAor
ICogb3IgJVdFQktJVF9ORVRXT1JLX1BST1hZX01PREVfQ1VTVE9NIHRvIHByb3ZpZGUgeW91ciBv
d24gcHJveHkgc2V0dGluZ3MuCisgKiBXaGVuIEBwcm94eV9tb2RlIGlzICVXRUJLSVRfTkVUV09S
S19QUk9YWV9NT0RFX0NVU1RPTSBAcHJveHlfc2V0dGluZ3MgbXVzdCBiZQorICogYSB2YWxpZCAj
V2ViS2l0TmV0d29ya1Byb3h5U2V0dGluZ3M7IG90aGVyd2lzZSwgQHByb3h5X3NldHRpbmdzIG11
c3QgYmUgJU5VTEwuCisgKgorICogU2luY2U6IDIuNDAKKyAqLwordm9pZCB3ZWJraXRfbmV0d29y
a19zZXNzaW9uX3NldF9uZXR3b3JrX3Byb3h5X3NldHRpbmdzKFdlYktpdE5ldHdvcmtTZXNzaW9u
KiBzZXNzaW9uLCBXZWJLaXROZXR3b3JrUHJveHlNb2RlIHByb3h5TW9kZSwgV2ViS2l0TmV0d29y
a1Byb3h5U2V0dGluZ3MqIHByb3h5U2V0dGluZ3MpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfSVNfTkVUV09SS19TRVNTSU9OKHNlc3Npb24pKTsKKyAgICBnX3JldHVybl9pZl9mYWls
KChwcm94eU1vZGUgIT0gV0VCS0lUX05FVFdPUktfUFJPWFlfTU9ERV9DVVNUT00gJiYgIXByb3h5
U2V0dGluZ3MpIHx8IChwcm94eU1vZGUgPT0gV0VCS0lUX05FVFdPUktfUFJPWFlfTU9ERV9DVVNU
T00gJiYgcHJveHlTZXR0aW5ncykpOworCisgICAgYXV0byYgd2Vic2l0ZURhdGFTdG9yZSA9IHdl
YmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShzZXNzaW9uLT5wcml2LT53ZWJzaXRl
RGF0YU1hbmFnZXIuZ2V0KCkpOworICAgIHN3aXRjaCAocHJveHlNb2RlKSB7CisgICAgY2FzZSBX
RUJLSVRfTkVUV09SS19QUk9YWV9NT0RFX0RFRkFVTFQ6CisgICAgICAgIHdlYnNpdGVEYXRhU3Rv
cmUuc2V0TmV0d29ya1Byb3h5U2V0dGluZ3MoeyB9KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBXRUJLSVRfTkVUV09SS19QUk9YWV9NT0RFX05PX1BST1hZOgorICAgICAgICB3ZWJzaXRlRGF0
YVN0b3JlLnNldE5ldHdvcmtQcm94eVNldHRpbmdzKFdlYkNvcmU6OlNvdXBOZXR3b3JrUHJveHlT
ZXR0aW5ncyhXZWJDb3JlOjpTb3VwTmV0d29ya1Byb3h5U2V0dGluZ3M6Ok1vZGU6Ok5vUHJveHkp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXRUJLSVRfTkVUV09SS19QUk9YWV9NT0RFX0NV
U1RPTToKKyAgICAgICAgYXV0byBzZXR0aW5ncyA9IHdlYmtpdE5ldHdvcmtQcm94eVNldHRpbmdz
R2V0TmV0d29ya1Byb3h5U2V0dGluZ3MocHJveHlTZXR0aW5ncyk7CisgICAgICAgIGlmIChzZXR0
aW5ncy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGdfd2FybmluZygiSW52YWxpZCBhdHRlbXB0
IHRvIHNldCBjdXN0b20gbmV0d29yayBwcm94eSBzZXR0aW5ncyB3aXRoIGFuIGVtcHR5IFdlYktp
dE5ldHdvcmtQcm94eVNldHRpbmdzLiBVc2UgIgorICAgICAgICAgICAgICAgICJXRUJLSVRfTkVU
V09SS19QUk9YWV9NT0RFX05PX1BST1hZIHRvIG5vdCB1c2UgYW55IHByb3h5IG9yIFdFQktJVF9O
RVRXT1JLX1BST1hZX01PREVfREVGQVVMVCB0byB1c2UgdGhlIGRlZmF1bHQgc3lzdGVtIHNldHRp
bmdzIik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgd2Vic2l0ZURhdGFTdG9yZS5zZXRO
ZXR3b3JrUHJveHlTZXR0aW5ncyhXVEZNb3ZlKHNldHRpbmdzKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKworLyoqCisgKiB3ZWJraXRfbmV0d29ya19zZXNzaW9uX3NldF9tZW1vcnlfcHJl
c3N1cmVfc2V0dGluZ3M6CisgKiBAc2V0dGluZ3M6IGEgV2ViS2l0TWVtb3J5UHJlc3N1cmVTZXR0
aW5ncy4KKyAqCisgKiBTZXRzIEBzZXR0aW5ncyBhcyB0aGUgI1dlYktpdE1lbW9yeVByZXNzdXJl
U2V0dGluZ3MuCisgKgorICogU2V0cyBAc2V0dGluZ3MgYXMgdGhlICNXZWJLaXRNZW1vcnlQcmVz
c3VyZVNldHRpbmdzIHRvIGJlIHVzZWQgYnkgdGhlIG5ldHdvcmsKKyAqIHByb2Nlc3MgY3JlYXRl
ZCBieSBhbnkgaW5zdGFuY2Ugb2YgI1dlYktpdE5ldHdvcmtTZXNzaW9uIGFmdGVyIHRoaXMgZnVu
Y3Rpb24KKyAqIGlzIGNhbGxlZC4KKyAqCisgKiBCZSBzdXJlIHRvIGNhbGwgdGhpcyBmdW5jdGlv
biBiZWZvcmUgY3JlYXRpbmcgYW55ICNXZWJLaXROZXR3b3JrU2Vzc2lvbi4KKyAqCisgKiBUaGUg
cGVyaW9kaWMgY2hlY2sgZm9yIHVzZWQgbWVtb3J5IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgb24g
bmV0d29yayBwcm9jZXNzZXMuIFRoaXMgd2lsbAorICogYmUgZW5hYmxlZCBvbmx5IGlmIGN1c3Rv
bSBzZXR0aW5ncyBoYXZlIGJlZW4gc2V0IHVzaW5nIHRoaXMgZnVuY3Rpb24uIEFmdGVyIHRoYXQs
IGluIG9yZGVyCisgKiB0byByZW1vdmUgdGhlIGN1c3RvbSBzZXR0aW5ncyBhbmQgZGlzYWJsZSB0
aGUgcGVyaW9kaWMgY2hlY2ssIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQKKyAqIHBhc3Np
bmcgJU5VTEwgYXMgdGhlIHZhbHVlIG9mIEBzZXR0aW5ncy4KKyAqCisgKiBTaW5jZTogMi40MAor
ICovCit2b2lkIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fc2V0X21lbW9yeV9wcmVzc3VyZV9zZXR0
aW5ncyhXZWJLaXRNZW1vcnlQcmVzc3VyZVNldHRpbmdzKiBzZXR0aW5ncykKK3sKKyAgICBzdGQ6
Om9wdGlvbmFsPE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6Q29uZmlndXJhdGlvbj4gY29uZmlnID0g
c2V0dGluZ3MgPyBzdGQ6Om1ha2Vfb3B0aW9uYWwod2Via2l0TWVtb3J5UHJlc3N1cmVTZXR0aW5n
c0dldE1lbW9yeVByZXNzdXJlSGFuZGxlckNvbmZpZ3VyYXRpb24oc2V0dGluZ3MpKSA6IHN0ZDo6
bnVsbG9wdDsKKyAgICBXZWJQcm9jZXNzUG9vbDo6c2V0TmV0d29ya1Byb2Nlc3NNZW1vcnlQcmVz
c3VyZUhhbmRsZXJDb25maWd1cmF0aW9uKGNvbmZpZyk7Cit9CisKKy8qKgorICogd2Via2l0X25l
dHdvcmtfc2Vzc2lvbl9nZXRfaXRwX3N1bW1hcnk6CisgKiBAc2Vzc2lvbjogYSAjV2ViS2l0TmV0
d29ya1Nlc3Npb24KKyAqIEBjYW5jZWxsYWJsZTogKGFsbG93LW5vbmUpOiBhICNHQ2FuY2VsbGFi
bGUgb3IgJU5VTEwgdG8gaWdub3JlCisgKiBAY2FsbGJhY2s6IChzY29wZSBhc3luYyk6IGEgI0dB
c3luY1JlYWR5Q2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSByZXF1ZXN0IGlzIHNhdGlzZmllZAor
ICogQHVzZXJfZGF0YTogKGNsb3N1cmUpOiB0aGUgZGF0YSB0byBwYXNzIHRvIGNhbGxiYWNrIGZ1
bmN0aW9uCisgKgorICogQXN5bmNocm9ub3VzbHkgZ2V0IHRoZSBsaXN0IG9mICNXZWJLaXRJVFBU
aGlyZFBhcnR5IHNlZW4gZm9yIEBzZXNzaW9uLgorICoKKyAqIEV2ZXJ5ICNXZWJLaXRJVFBUaGly
ZFBhcnR5CisgKiBjb250YWlucyB0aGUgbGlzdCBvZiAjV2ViS2l0SVRQRmlyc3RQYXJ0eSB1bmRl
ciB3aGljaCBpdCBoYXMgYmVlbiBzZWVuLgorICoKKyAqIFdoZW4gdGhlIG9wZXJhdGlvbiBpcyBm
aW5pc2hlZCwgQGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkLiBZb3UgY2FuIHRoZW4gY2FsbAorICog
d2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfaXRwX3N1bW1hcnlfZmluaXNoKCkgdG8gZ2V0IHRo
ZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KKyAqCisgKiBTaW5jZTogMi40MAorICovCit2b2lk
IHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X2l0cF9zdW1tYXJ5KFdlYktpdE5ldHdvcmtTZXNz
aW9uKiBzZXNzaW9uLCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlLCBHQXN5bmNSZWFkeUNhbGxi
YWNrIGNhbGxiYWNrLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9JU19ORVRXT1JLX1NFU1NJT04oc2Vzc2lvbikpOworCisgICAgYXV0byYgd2Vic2l0
ZURhdGFTdG9yZSA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShzZXNzaW9u
LT5wcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkpOworICAgIEdSZWZQdHI8R1Rhc2s+IHRh
c2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhzZXNzaW9uLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ss
IHVzZXJEYXRhKSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZS5nZXRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YVN1bW1hcnkoW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShWZWN0b3I8V2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJiB0aGlyZFBhcnR5TGlzdCkgewor
ICAgICAgICBHTGlzdCogcmVzdWx0ID0gbnVsbHB0cjsKKyAgICAgICAgd2hpbGUgKCF0aGlyZFBh
cnR5TGlzdC5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXN1bHQgPSBnX2xpc3RfcHJlcGVuZChy
ZXN1bHQsIHdlYmtpdElUUFRoaXJkUGFydHlDcmVhdGUodGhpcmRQYXJ0eUxpc3QudGFrZUxhc3Qo
KSkpOworICAgICAgICBnX3Rhc2tfcmV0dXJuX3BvaW50ZXIodGFzay5nZXQoKSwgcmVzdWx0LCBb
XShncG9pbnRlciBkYXRhKSB7CisgICAgICAgICAgICBnX2xpc3RfZnJlZV9mdWxsKHN0YXRpY19j
YXN0PEdMaXN0Kj4oZGF0YSksIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KHdlYmtp
dF9pdHBfdGhpcmRfcGFydHlfdW5yZWYpKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKKy8q
KgorICogd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfaXRwX3N1bW1hcnlfZmluaXNoOgorICog
QHNlc3Npb246IGEgI1dlYktpdE5ldHdvcmtTZXNzaW9uCisgKiBAcmVzdWx0OiBhICNHQXN5bmNS
ZXN1bHQKKyAqIEBlcnJvcjogcmV0dXJuIGxvY2F0aW9uIGZvciBlcnJvciBvciAlTlVMTCB0byBp
Z25vcmUKKyAqCisgKiBGaW5pc2ggYW4gYXN5bmNocm9ub3VzIG9wZXJhdGlvbiBzdGFydGVkIHdp
dGggd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfaXRwX3N1bW1hcnkoKS4KKyAqCisgKiBSZXR1
cm5zOiAodHJhbnNmZXIgZnVsbCkgKGVsZW1lbnQtdHlwZSBXZWJLaXRJVFBUaGlyZFBhcnR5KTog
YSAjR0xpc3Qgb2YgI1dlYktpdElUUFRoaXJkUGFydHkuCisgKiAgICBZb3UgbXVzdCBmcmVlIHRo
ZSAjR0xpc3Qgd2l0aCBnX2xpc3RfZnJlZSgpIGFuZCB1bnJlZiB0aGUgI1dlYktpdElUUFRoaXJk
UGFydHk8IS0tIC0tPnMgd2l0aAorICogICAgd2Via2l0X2l0cF90aGlyZF9wYXJ0eV91bnJlZigp
IHdoZW4geW91J3JlIGRvbmUgd2l0aCB0aGVtLgorICoKKyAqIFNpbmNlOiAyLjQwCisgKi8KK0dM
aXN0KiB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF9pdHBfc3VtbWFyeV9maW5pc2goV2ViS2l0
TmV0d29ya1Nlc3Npb24qIHNlc3Npb24sIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBHRXJyb3IqKiBl
cnJvcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfTkVUV09SS19TRVNT
SU9OKHNlc3Npb24pLCBudWxscHRyKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChnX3Rhc2tf
aXNfdmFsaWQocmVzdWx0LCBzZXNzaW9uKSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8R0xpc3QqPihnX3Rhc2tfcHJvcGFnYXRlX3BvaW50ZXIoR19UQVNLKHJlc3VsdCksIGVy
cm9yKSk7Cit9CisKKy8qKgorICogd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9wcmVmZXRjaF9kbnM6
CisgKiBAc2Vzc2lvbjogYSAjV2ViS2l0TmV0d29ya1Nlc3Npb24KKyAqIEBob3N0bmFtZTogYSBo
b3N0bmFtZSB0byBiZSByZXNvbHZlZAorICoKKyAqIFJlc29sdmUgdGhlIGRvbWFpbiBuYW1lIG9m
IHRoZSBnaXZlbiBAaG9zdG5hbWUgaW4gYWR2YW5jZSwgc28gdGhhdCBpZiBhIFVSSQorICogb2Yg
QGhvc3RuYW1lIGlzIHJlcXVlc3RlZCB0aGUgbG9hZCB3aWxsIGJlIHBlcmZvcm1lZCBtb3JlIHF1
aWNrbHkuCisgKgorICogU2luY2U6IDIuNDAKKyAqLwordm9pZCB3ZWJraXRfbmV0d29ya19zZXNz
aW9uX3ByZWZldGNoX2RucyhXZWJLaXROZXR3b3JrU2Vzc2lvbiogc2Vzc2lvbiwgY29uc3QgY2hh
ciogaG9zdG5hbWUpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfTkVUV09SS19T
RVNTSU9OKHNlc3Npb24pKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGhvc3RuYW1lKTsKKworICAg
IGlmIChzZXNzaW9uLT5wcml2LT5kbnNQcmVmZXRjaGVkSG9zdHMuYWRkKFN0cmluZzo6ZnJvbVVU
RjgoaG9zdG5hbWUpKS5pc05ld0VudHJ5KSB7CisgICAgICAgIGF1dG8mIHdlYnNpdGVEYXRhU3Rv
cmUgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUoc2Vzc2lvbi0+cHJpdi0+
d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKTsKKyAgICAgICAgd2Vic2l0ZURhdGFTdG9yZS5uZXR3
b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcmVmZXRjaEROUyhT
dHJpbmc6OmZyb21VVEY4KGhvc3RuYW1lKSksIDApOworICAgIH0KKyAgICBzZXNzaW9uLT5wcml2
LT5kbnNQcmVmZXRjaEh5c3RlcmVyaXMuaW1wdWxzZSgpOworfQorCisvKioKKyAqIHdlYmtpdF9u
ZXR3b3JrX3Nlc3Npb25fZG93bmxvYWRfdXJpOgorICogQHNlc3Npb246IGEgI1dlYktpdE5ldHdv
cmtTZXNzaW9uCisgKiBAdXJpOiB0aGUgVVJJIHRvIGRvd25sb2FkCisgKgorICogUmVxdWVzdHMg
ZG93bmxvYWRpbmcgb2YgdGhlIHNwZWNpZmllZCBVUkkgc3RyaW5nLgorICoKKyAqIFRoZSBkb3du
bG9hZCBvcGVyYXRpb24gd2lsbCBub3QgYmUgYXNzb2NpYXRlZCB0byBhbnkgI1dlYktpdFdlYlZp
ZXcsCisgKiBpZiB5b3UgYXJlIGludGVyZXN0ZWQgaW4gc3RhcnRpbmcgYSBkb3dubG9hZCBmcm9t
IGEgcGFydGljdWxhciAjV2ViS2l0V2ViVmlldyB1c2UKKyAqIHdlYmtpdF93ZWJfdmlld19kb3du
bG9hZF91cmkoKSBpbnN0ZWFkLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBu
ZXcgI1dlYktpdERvd25sb2FkIHJlcHJlc2VudGluZworICogICAgdGhlIGRvd25sb2FkIG9wZXJh
dGlvbi4KKyAqCisgKiBTaW5jZTogMi40MAorICovCitXZWJLaXREb3dubG9hZCogd2Via2l0X25l
dHdvcmtfc2Vzc2lvbl9kb3dubG9hZF91cmkoV2ViS2l0TmV0d29ya1Nlc3Npb24qIHNlc3Npb24s
IGNvbnN0IGNoYXIqIHVyaSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNf
TkVUV09SS19TRVNTSU9OKHNlc3Npb24pLCBudWxscHRyKTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbCh1cmksIG51bGxwdHIpOworCisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVl
c3QoU3RyaW5nOjpmcm9tVVRGOCh1cmkpKTsKKyAgICBhdXRvJiB3ZWJzaXRlRGF0YVN0b3JlID0g
d2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKHNlc3Npb24tPnByaXYtPndlYnNp
dGVEYXRhTWFuYWdlci5nZXQoKSk7CisgICAgYXV0byYgZG93bmxvYWRQcm94eSA9IHdlYnNpdGVE
YXRhU3RvcmUuY3JlYXRlRG93bmxvYWRQcm94eShhZG9wdFJlZigqbmV3IEFQSTo6RG93bmxvYWRD
bGllbnQpLCByZXF1ZXN0LCBudWxscHRyLCB7IH0pOworICAgIGF1dG8gZG93bmxvYWQgPSB3ZWJr
aXREb3dubG9hZENyZWF0ZShkb3dubG9hZFByb3h5KTsKKyAgICBkb3dubG9hZFByb3h5LnNldERp
ZFN0YXJ0Q2FsbGJhY2soW3Nlc3Npb24gPSBHUmVmUHRyPFdlYktpdE5ldHdvcmtTZXNzaW9uPiB7
IHNlc3Npb24gfSwgZG93bmxvYWQgPSBkb3dubG9hZC5nZXQoKV0oYXV0byogZG93bmxvYWRQcm94
eSkgeworICAgICAgICBpZiAoIWRvd25sb2FkUHJveHkpCisgICAgICAgICAgICByZXR1cm47CisK
Kwl3ZWJraXREb3dubG9hZFN0YXJ0ZWQoZG93bmxvYWQpOworICAgICAgICB3ZWJraXROZXR3b3Jr
U2Vzc2lvbkRvd25sb2FkU3RhcnRlZChzZXNzaW9uLmdldCgpLCBkb3dubG9hZCk7CisgICAgfSk7
CisgICAgcmV0dXJuIGRvd25sb2FkLmxlYWtSZWYoKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRSgy
MDIyX0dMSUJfQVBJKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2ds
aWIvV2ViS2l0TmV0d29ya1Nlc3Npb24uaC5pbiBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9nbGliL1dlYktpdE5ldHdvcmtTZXNzaW9uLmguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwLi42YjFlYTM1OTI4MDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXROZXR3b3JrU2Vzc2lvbi5oLmluCkBAIC0w
LDAgKzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIzIElnYWxpYSBTLkwuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCitAQVBJ
X1NJTkdMRV9IRUFERVJfQ0hFQ0tACisKKyNpZm5kZWYgV2ViS2l0TmV0d29ya1Nlc3Npb25faAor
I2RlZmluZSBXZWJLaXROZXR3b3JrU2Vzc2lvbl9oCisKKyNpbmNsdWRlIDxnaW8vZ2lvLmg+Cisj
aW5jbHVkZSA8QEFQSV9JTkNMVURFX1BSRUZJWEAvV2ViS2l0Q29va2llTWFuYWdlci5oPgorI2lu
Y2x1ZGUgPEBBUElfSU5DTFVERV9QUkVGSVhAL1dlYktpdERlZmluZXMuaD4KKyNpbmNsdWRlIDxA
QVBJX0lOQ0xVREVfUFJFRklYQC9XZWJLaXREb3dubG9hZC5oPgorI2luY2x1ZGUgPEBBUElfSU5D
TFVERV9QUkVGSVhAL1dlYktpdE1lbW9yeVByZXNzdXJlU2V0dGluZ3MuaD4KKyNpbmNsdWRlIDxA
QVBJX0lOQ0xVREVfUFJFRklYQC9XZWJLaXROZXR3b3JrUHJveHlTZXR0aW5ncy5oPgorI2luY2x1
ZGUgPEBBUElfSU5DTFVERV9QUkVGSVhAL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5oPgorCitH
X0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfTkVUV09SS19TRVNTSU9OICAgICAg
ICAgICAgKHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lU
X05FVFdPUktfU0VTU0lPTihvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9D
QVNUKChvYmopLCBXRUJLSVRfVFlQRV9ORVRXT1JLX1NFU1NJT04sIFdlYktpdE5ldHdvcmtTZXNz
aW9uKSkKKyNkZWZpbmUgV0VCS0lUX0lTX05FVFdPUktfU0VTU0lPTihvYmopICAgICAgICAgKEdf
VFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9ORVRXT1JLX1NFU1NJ
T04pKQorI2RlZmluZSBXRUJLSVRfTkVUV09SS19TRVNTSU9OX0NMQVNTKGtsYXNzKSAgICAoR19U
WVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX05FVFdPUktfU0VTU0lP
TiwgV2ViS2l0TmV0d29ya1Nlc3Npb25DbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19ORVRXT1JL
X1NFU1NJT05fQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAg
V0VCS0lUX1RZUEVfTkVUV09SS19TRVNTSU9OKSkKKyNkZWZpbmUgV0VCS0lUX05FVFdPUktfU0VT
U0lPTl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBX
RUJLSVRfVFlQRV9ORVRXT1JLX1NFU1NJT04sIFdlYktpdE5ldHdvcmtTZXNzaW9uQ2xhc3MpKQor
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0TmV0d29ya1Nlc3Npb24gICAgICAgIFdlYktpdE5ldHdv
cmtTZXNzaW9uOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdE5ldHdvcmtTZXNzaW9uQ2xhc3MgICBX
ZWJLaXROZXR3b3JrU2Vzc2lvbkNsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdE5ldHdvcmtT
ZXNzaW9uUHJpdmF0ZSBXZWJLaXROZXR3b3JrU2Vzc2lvblByaXZhdGU7CisKK3N0cnVjdCBfV2Vi
S2l0TmV0d29ya1Nlc3Npb24geworICAgIEdPYmplY3QgcGFyZW50OworCisgICAgLyo8IHByaXZh
dGUgPiovCisgICAgV2ViS2l0TmV0d29ya1Nlc3Npb25Qcml2YXRlICpwcml2OworfTsKKworc3Ry
dWN0IF9XZWJLaXROZXR3b3JrU2Vzc2lvbkNsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50
X2NsYXNzOworCisgICAgLyo8IHByaXZhdGUgPiovCisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2
ZWQwKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQxKSAodm9pZCk7CisgICAg
dm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQyKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVz
ZXJ2ZWQzKSAodm9pZCk7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfbmV0d29ya19z
ZXNzaW9uX2dldF90eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKTsK
KworV0VCS0lUX0FQSSBXZWJLaXROZXR3b3JrU2Vzc2lvbiAqCit3ZWJraXRfbmV0d29ya19zZXNz
aW9uX2dldF9kZWZhdWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKTsKKwor
V0VCS0lUX0FQSSBXZWJLaXROZXR3b3JrU2Vzc2lvbiAqCit3ZWJraXRfbmV0d29ya19zZXNzaW9u
X25ldyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICAg
ICAgICAgICAgICAgICAgICpkYXRhX2RpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAg
ICAgICAgICAgICAgICAgKmNhY2hlX2RpcmVjdHJvcnkpOworV0VCS0lUX0FQSSBXZWJLaXROZXR3
b3JrU2Vzc2lvbiAqCit3ZWJraXRfbmV0d29ya19zZXNzaW9uX25ld19lcGhlbWVyYWwgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICh2b2lkKTsKKworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Vi
a2l0X25ldHdvcmtfc2Vzc2lvbl9pc19lcGhlbWVyYWwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoV2ViS2l0TmV0d29ya1Nlc3Npb24gICAgICAgICAqc2Vzc2lvbik7CisKK1dFQktJVF9B
UEkgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICoKK3dlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0
X3dlYnNpdGVfZGF0YV9tYW5hZ2VyICAgICAgICAgICAgICAgICAgKFdlYktpdE5ldHdvcmtTZXNz
aW9uICAgICAgICAgKnNlc3Npb24pOworCitXRUJLSVRfQVBJIFdlYktpdENvb2tpZU1hbmFnZXIg
Kgord2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfY29va2llX21hbmFnZXIgICAgICAgICAgICAg
ICAgICAgICAgICAoV2ViS2l0TmV0d29ya1Nlc3Npb24gICAgICAgICAqc2Vzc2lvbik7CisKK1dF
QktJVF9BUEkgdm9pZAord2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfaXRwX2VuYWJsZWQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0TmV0d29ya1Nlc3Npb24gICAgICAgICAqc2Vz
c2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdib29sZWFuICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQpOwor
CitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF9pdHBfZW5h
YmxlZCAgICAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXROZXR3b3JrU2Vzc2lvbiAgICAg
ICAgICpzZXNzaW9uKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfbmV0d29ya19zZXNzaW9u
X3NldF9wZXJzaXN0ZW50X2NyZWRlbnRpYWxfc3RvcmFnZV9lbmFibGVkIChXZWJLaXROZXR3b3Jr
U2Vzc2lvbiAgICAgICAgICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAgICAgICAgICAg
ICAgICAgICAgZW5hYmxlZCk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9uZXR3b3Jr
X3Nlc3Npb25fZ2V0X3BlcnNpc3RlbnRfY3JlZGVudGlhbF9zdG9yYWdlX2VuYWJsZWQgKFdlYktp
dE5ldHdvcmtTZXNzaW9uICAgICAgICAgKnNlc3Npb24pOworCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9uZXR3b3JrX3Nlc3Npb25fc2V0X3Rsc19lcnJvcnNfcG9saWN5ICAgICAgICAgICAgICAg
ICAgICAgKFdlYktpdE5ldHdvcmtTZXNzaW9uICAgICAgICAgKnNlc3Npb24sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
ZWJLaXRUTFNFcnJvcnNQb2xpY3kgICAgICAgICBwb2xpY3kpOworCitXRUJLSVRfQVBJIFdlYktp
dFRMU0Vycm9yc1BvbGljeQord2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfdGxzX2Vycm9yc19w
b2xpY3kgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0TmV0d29ya1Nlc3Npb24gICAgICAgICAq
c2Vzc2lvbik7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X25ldHdvcmtfc2Vzc2lvbl9hbGxv
d190bHNfY2VydGlmaWNhdGVfZm9yX2hvc3QgICAgICAgICAgICAoV2ViS2l0TmV0d29ya1Nlc3Np
b24gICAgICAgICAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUbHNDZXJ0aWZpY2F0ZSAgICAgICAgICAg
ICAgKmNlcnRpZmljYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICAgICAgICAgICAq
aG9zdCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfbmV0
d29ya19wcm94eV9zZXR0aW5ncyAgICAgICAgICAgICAgICAoV2ViS2l0TmV0d29ya1Nlc3Npb24g
ICAgICAgICAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdE5ldHdvcmtQcm94eU1vZGUgICAgICAg
IHByb3h5X21vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXROZXR3b3JrUHJveHlTZXR0aW5ncyAgICpwcm94
eV9zZXR0aW5ncyk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X25ldHdvcmtfc2Vzc2lvbl9z
ZXRfbWVtb3J5X3ByZXNzdXJlX3NldHRpbmdzICAgICAgICAgICAgICAoV2ViS2l0TWVtb3J5UHJl
c3N1cmVTZXR0aW5ncyAqc2V0dGluZ3MpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9uZXR3
b3JrX3Nlc3Npb25fZ2V0X2l0cF9zdW1tYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgKFdl
YktpdE5ldHdvcmtTZXNzaW9uICAgICAgICAgKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2FuY2VsbGFi
bGUgICAgICAgICAgICAgICAgICpjYW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3luY1JlYWR5Q2Fs
bGJhY2sgICAgICAgICAgIGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAg
ICAgICAgICAgdXNlcl9kYXRhKTsKK1dFQktJVF9BUEkgR0xpc3QgKgord2Via2l0X25ldHdvcmtf
c2Vzc2lvbl9nZXRfaXRwX3N1bW1hcnlfZmluaXNoICAgICAgICAgICAgICAgICAgICAoV2ViS2l0
TmV0d29ya1Nlc3Npb24gICAgICAgICAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3luY1Jlc3VsdCAg
ICAgICAgICAgICAgICAgKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICAgICAgICAg
ICAgICAqKmVycm9yKTsKK1dFQktJVF9BUEkgV2ViS2l0RG93bmxvYWQgKgord2Via2l0X25ldHdv
cmtfc2Vzc2lvbl9kb3dubG9hZF91cmkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoV2Vi
S2l0TmV0d29ya1Nlc3Npb24gICAgICAgICAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg
ICAgICAgICAgICAgICAgICAgKnVyaSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0TmV0d29ya1Nlc3Np
b25Qcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXROZXR3
b3JrU2Vzc2lvblByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAuLmNiMDFlZThmODA1MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9nbGliL1dlYktpdE5ldHdvcmtTZXNzaW9uUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMjUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJXZWJLaXREb3dubG9hZC5oIgorI2luY2x1ZGUgIldlYktpdE5ldHdvcmtTZXNz
aW9uLmgiCisKK3ZvaWQgd2Via2l0TmV0d29ya1Nlc3Npb25Eb3dubG9hZFN0YXJ0ZWQoV2ViS2l0
TmV0d29ya1Nlc3Npb24qLCBXZWJLaXREb3dubG9hZCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcAppbmRleCAyMmU3NTFj
MjliOGMuLjAxM2VlMGY1Y2MyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAKQEAgLTgwLDYgKzgwLDEwIEBACiAjaW5j
bHVkZSAiV2ViS2l0UmVtb3RlSW5zcGVjdG9yUHJvdG9jb2xIYW5kbGVyLmgiCiAjZW5kaWYKIAor
I2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorI2luY2x1ZGUgIldlYktpdE5ldHdvcmtTZXNzaW9u
LmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogLyoqCkBAIC0xMTgsNyAr
MTIyLDkgQEAgZW51bSB7CiAjaWYgUExBVEZPUk0oR1RLKSAmJiAhVVNFKEdUSzQpCiAgICAgUFJP
UF9MT0NBTF9TVE9SQUdFX0RJUkVDVE9SWSwKICNlbmRpZgorI2lmICFFTkFCTEUoMjAyMl9HTElC
X0FQSSkKICAgICBQUk9QX1dFQlNJVEVfREFUQV9NQU5BR0VSLAorI2VuZGlmCiAjaWYgUExBVEZP
Uk0oR1RLKSAmJiAhVVNFKEdUSzQpCiAgICAgUFJPUF9QU09OX0VOQUJMRUQsCiAgICAgUFJPUF9V
U0VfU1lTVEVNX0FQUEVBUkFOQ0VfRk9SX1NDUk9MTEJBUlMsCkBAIC0xMzEsNyArMTM3LDkgQEAg
ZW51bSB7CiBzdGF0aWMgR1BhcmFtU3BlYyogc09ialByb3BlcnRpZXNbTl9QUk9QRVJUSUVTXSA9
IHsgbnVsbHB0ciwgfTsKIAogZW51bSB7CisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogICAg
IERPV05MT0FEX1NUQVJURUQsCisjZW5kaWYKICAgICBJTklUSUFMSVpFX1dFQl9FWFRFTlNJT05T
LAogICAgIElOSVRJQUxJWkVfTk9USUZJQ0FUSU9OX1BFUk1JU1NJT05TLAogICAgIEFVVE9NQVRJ
T05fU1RBUlRFRCwKQEAgLTIwMCwxMCArMjA4LDEyIEBAIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcs
IFJlZlB0cjxXZWJLaXRVUklTY2hlbWVIYW5kbGVyPiA+IFVSSVNjaGVtZUhhbmRsZXJNYXA7CiBj
bGFzcyBXZWJLaXRBdXRvbWF0aW9uQ2xpZW50OwogCiBzdHJ1Y3QgX1dlYktpdFdlYkNvbnRleHRQ
cml2YXRlIHsKKyNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAgICAgX1dlYktpdFdlYkNvbnRl
eHRQcml2YXRlKCkKICAgICAgICAgOiBkbnNQcmVmZXRjaEh5c3RlcmVyaXMoW3RoaXNdKFBBTDo6
SHlzdGVyZXNpc1N0YXRlIHN0YXRlKSB7IGlmIChzdGF0ZSA9PSBQQUw6Okh5c3RlcmVzaXNTdGF0
ZTo6U3RvcHBlZCkgZG5zUHJlZmV0Y2hlZEhvc3RzLmNsZWFyKCk7IH0pCiAgICAgewogICAgIH0K
KyNlbmRpZgogCiAgICAgUmVmUHRyPFdlYlByb2Nlc3NQb29sPiBwcm9jZXNzUG9vbDsKICAgICBi
b29sIGNsaWVudHNEZXRhY2hlZDsKQEAgLTIxNyw3ICsyMjcsOSBAQCBzdHJ1Y3QgX1dlYktpdFdl
YkNvbnRleHRQcml2YXRlIHsKICAgICBVUklTY2hlbWVIYW5kbGVyTWFwIHVyaVNjaGVtZUhhbmRs
ZXJzOwogICAgIEdSZWZQdHI8V2ViS2l0R2VvbG9jYXRpb25NYW5hZ2VyPiBnZW9sb2NhdGlvbk1h
bmFnZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYktpdE5vdGlmaWNhdGlvblByb3ZpZGVyPiBu
b3RpZmljYXRpb25Qcm92aWRlcjsKKyNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAgICAgR1Jl
ZlB0cjxXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXI+IHdlYnNpdGVEYXRhTWFuYWdlcjsKKyNlbmRp
ZgogCiAgICAgQ1N0cmluZyBmYXZpY29uRGF0YWJhc2VEaXJlY3Rvcnk7CiAgICAgV2ViS2l0UHJv
Y2Vzc01vZGVsIHByb2Nlc3NNb2RlbDsKQEAgLTIzNCwxMSArMjQ2LDE2IEBAIHN0cnVjdCBfV2Vi
S2l0V2ViQ29udGV4dFByaXZhdGUgewogI2VuZGlmCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYktp
dEF1dG9tYXRpb25DbGllbnQ+IGF1dG9tYXRpb25DbGllbnQ7CiAgICAgR1JlZlB0cjxXZWJLaXRB
dXRvbWF0aW9uU2Vzc2lvbj4gYXV0b21hdGlvblNlc3Npb247CisjaWYgRU5BQkxFKDIwMjJfR0xJ
Ql9BUEkpCisgICAgR1JlZlB0cjxXZWJLaXROZXR3b3JrU2Vzc2lvbj4gYXV0b21hdGlvbk5ldHdv
cmtTZXNzaW9uOworI2VuZGlmCiAjZW5kaWYKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViS2l0UHJv
dG9jb2xIYW5kbGVyPiB3ZWJraXRQcm90b2NvbEhhbmRsZXI7CiAKKyNpZiAhRU5BQkxFKDIwMjJf
R0xJQl9BUEkpCiAgICAgSGFzaFNldDxTdHJpbmc+IGRuc1ByZWZldGNoZWRIb3N0czsKICAgICBQ
QUw6Okh5c3RlcmVzaXNBY3Rpdml0eSBkbnNQcmVmZXRjaEh5c3RlcmVyaXM7CisjZW5kaWYKIAog
ICAgIFdlYktpdE1lbW9yeVByZXNzdXJlU2V0dGluZ3MqIG1lbW9yeVByZXNzdXJlU2V0dGluZ3M7
CiAKQEAgLTI5OCw3ICszMTUsMTcgQEAgdm9pZCB3ZWJraXRXZWJDb250ZXh0V2lsbENsb3NlQXV0
b21hdGlvblNlc3Npb24oV2ViS2l0V2ViQ29udGV4dCogd2ViQ29udGV4dCkKIHsKICAgICB3ZWJD
b250ZXh0LT5wcml2LT5wcm9jZXNzUG9vbC0+c2V0QXV0b21hdGlvblNlc3Npb24obnVsbHB0cik7
CiAgICAgd2ViQ29udGV4dC0+cHJpdi0+YXV0b21hdGlvblNlc3Npb24gPSBudWxscHRyOworICAg
IHdlYkNvbnRleHQtPnByaXYtPmF1dG9tYXRpb25OZXR3b3JrU2Vzc2lvbiA9IG51bGxwdHI7CiB9
CisKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKK1dlYktpdE5ldHdvcmtTZXNzaW9uKiB3ZWJr
aXRXZWJDb250ZXh0R2V0TmV0d29ya1Nlc3Npb25Gb3JBdXRvbWF0aW9uKFdlYktpdFdlYkNvbnRl
eHQqIHdlYkNvbnRleHQpCit7CisgICAgaWYgKCF3ZWJDb250ZXh0LT5wcml2LT5hdXRvbWF0aW9u
TmV0d29ya1Nlc3Npb24gJiYgd2ViQ29udGV4dC0+cHJpdi0+YXV0b21hdGlvbkNsaWVudCkKKyAg
ICAgICAgd2ViQ29udGV4dC0+cHJpdi0+YXV0b21hdGlvbk5ldHdvcmtTZXNzaW9uID0gYWRvcHRH
UmVmKHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fbmV3X2VwaGVtZXJhbCgpKTsKKyAgICByZXR1cm4g
d2ViQ29udGV4dC0+cHJpdi0+YXV0b21hdGlvbk5ldHdvcmtTZXNzaW9uLmdldCgpOworfQorI2Vu
ZGlmCiAjZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCiAKIFdFQktJVF9ERUZJTkVf
VFlQRShXZWJLaXRXZWJDb250ZXh0LCB3ZWJraXRfd2ViX2NvbnRleHQsIEdfVFlQRV9PQkpFQ1Qp
CkBAIC0zMzcsOSArMzY0LDExIEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYkNvbnRleHRHZXRQcm9w
ZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJRCwgR1ZhbHVlKiB2CiAgICAgICAgIGdf
dmFsdWVfc2V0X3N0cmluZyh2YWx1ZSwgY29udGV4dC0+cHJpdi0+bG9jYWxTdG9yYWdlRGlyZWN0
b3J5LmRhdGEoKSk7CiAgICAgICAgIGJyZWFrOwogI2VuZGlmCisjaWYgIUVOQUJMRSgyMDIyX0dM
SUJfQVBJKQogICAgIGNhc2UgUFJPUF9XRUJTSVRFX0RBVEFfTUFOQUdFUjoKICAgICAgICAgZ192
YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0
YV9tYW5hZ2VyKGNvbnRleHQpKTsKICAgICAgICAgYnJlYWs7CisjZW5kaWYKICNpZiBQTEFURk9S
TShHVEspICYmICFVU0UoR1RLNCkKICAgICBjYXNlIFBST1BfUFNPTl9FTkFCTEVEOgogICAgICAg
ICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCBjb250ZXh0LT5wcml2LT5wc29uRW5hYmxlZCk7
CkBAIC0zNjYsMTEgKzM5NSwxMyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJDb250ZXh0U2V0UHJv
cGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSUQsIGNvbnN0IEdWYQogICAgICAgICBj
b250ZXh0LT5wcml2LT5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBnX3ZhbHVlX2dldF9zdHJpbmco
dmFsdWUpOwogICAgICAgICBicmVhazsKICNlbmRpZgorI2lmICFFTkFCTEUoMjAyMl9HTElCX0FQ
SSkKICAgICBjYXNlIFBST1BfV0VCU0lURV9EQVRBX01BTkFHRVI6IHsKICAgICAgICAgZ3BvaW50
ZXIgbWFuYWdlciA9IGdfdmFsdWVfZ2V0X29iamVjdCh2YWx1ZSk7CiAgICAgICAgIGNvbnRleHQt
PnByaXYtPndlYnNpdGVEYXRhTWFuYWdlciA9IG1hbmFnZXIgPyBXRUJLSVRfV0VCU0lURV9EQVRB
X01BTkFHRVIobWFuYWdlcikgOiBudWxscHRyOwogICAgICAgICBicmVhazsKICAgICB9CisjZW5k
aWYKICNpZiBQTEFURk9STShHVEspICYmICFVU0UoR1RLNCkKICAgICBjYXNlIFBST1BfUFNPTl9F
TkFCTEVEOgogICAgICAgICBjb250ZXh0LT5wcml2LT5wc29uRW5hYmxlZCA9IGdfdmFsdWVfZ2V0
X2Jvb2xlYW4odmFsdWUpOwpAQCAtNDIwLDEzICs0NTEsMTAgQEAgc3RhdGljIHZvaWQgd2Via2l0
V2ViQ29udGV4dENvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKICAgICB9CiAgICAgY29uZmln
dXJhdGlvbi5zZXRUaW1lWm9uZU92ZXJyaWRlKFN0cmluZzo6ZnJvbVVURjgocHJpdi0+dGltZVpv
bmVPdmVycmlkZS5kYXRhKCksIHByaXYtPnRpbWVab25lT3ZlcnJpZGUubGVuZ3RoKCkpKTsKIAot
ICAgIGlmICghcHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyKSB7Ci0gICAgICAgIHByaXYtPndlYnNp
dGVEYXRhTWFuYWdlciA9IGFkb3B0R1JlZih3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfbmV3
KAogI2lmICFFTkFCTEUoMjAyMl9HTElCX0FQSSkKLSAgICAgICAgICAgICAgICAgICAgImxvY2Fs
LXN0b3JhZ2UtZGlyZWN0b3J5IiwgcHJpdi0+bG9jYWxTdG9yYWdlRGlyZWN0b3J5LmRhdGEoKSwK
KyAgICBpZiAoIXByaXYtPndlYnNpdGVEYXRhTWFuYWdlcikKKyAgICAgICAgcHJpdi0+d2Vic2l0
ZURhdGFNYW5hZ2VyID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9uZXco
ImxvY2FsLXN0b3JhZ2UtZGlyZWN0b3J5IiwgcHJpdi0+bG9jYWxTdG9yYWdlRGlyZWN0b3J5LmRh
dGEoKSwgbnVsbHB0cikpOwogI2VuZGlmCi0gICAgICAgIG51bGxwdHIpKTsKLSAgICB9CiAKICAg
ICBwcml2LT5wcm9jZXNzUG9vbCA9IFdlYlByb2Nlc3NQb29sOjpjcmVhdGUoY29uZmlndXJhdGlv
bik7CiAgICAgcHJpdi0+cHJvY2Vzc1Bvb2wtPnNldFVzZXJNZXNzYWdlSGFuZGxlcihbd2ViQ29u
dGV4dF0oVXNlck1lc3NhZ2UmJiBtZXNzYWdlLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFVzZXJN
ZXNzYWdlJiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSB7CkBAIC01MTIsNiArNTQwLDcgQEAgc3Rh
dGljIHZvaWQgd2Via2l0X3dlYl9jb250ZXh0X2NsYXNzX2luaXQoV2ViS2l0V2ViQ29udGV4dENs
YXNzKiB3ZWJDb250ZXh0Q2xhc3MKICAgICAgICAgICAgIHN0YXRpY19jYXN0PEdQYXJhbUZsYWdz
PihXRUJLSVRfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpOwogI2Vu
ZGlmCiAKKyNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAgICAgLyoqCiAgICAgICogV2ViS2l0
V2ViQ29udGV4dDp3ZWJzaXRlLWRhdGEtbWFuYWdlcjoKICAgICAgKgpAQCAtNTI1LDYgKzU1NCw3
IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfY29udGV4dF9jbGFzc19pbml0KFdlYktpdFdlYkNv
bnRleHRDbGFzcyogd2ViQ29udGV4dENsYXNzCiAgICAgICAgICAgICBudWxscHRyLCBudWxscHRy
LAogICAgICAgICAgICAgV0VCS0lUX1RZUEVfV0VCU0lURV9EQVRBX01BTkFHRVIsCiAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxHUGFyYW1GbGFncz4oV0VCS0lUX1BBUkFNX1JFQURXUklURSB8IEdf
UEFSQU1fQ09OU1RSVUNUX09OTFkpKTsKKyNlbmRpZgogCiAjaWYgUExBVEZPUk0oR1RLKSAmJiAh
VVNFKEdUSzQpCiAgICAgLyoqCkBAIC02MDMsNiArNjMzLDcgQEAgc3RhdGljIHZvaWQgd2Via2l0
X3dlYl9jb250ZXh0X2NsYXNzX2luaXQoV2ViS2l0V2ViQ29udGV4dENsYXNzKiB3ZWJDb250ZXh0
Q2xhc3MKIAogICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydGllcyhnT2JqZWN0Q2xh
c3MsIE5fUFJPUEVSVElFUywgc09ialByb3BlcnRpZXMpOwogCisjaWYgIUVOQUJMRSgyMDIyX0dM
SUJfQVBJKQogICAgIC8qKgogICAgICAqIFdlYktpdFdlYkNvbnRleHQ6OmRvd25sb2FkLXN0YXJ0
ZWQ6CiAgICAgICogQGNvbnRleHQ6IHRoZSAjV2ViS2l0V2ViQ29udGV4dApAQCAtNjE5LDYgKzY1
MCw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfY29udGV4dF9jbGFzc19pbml0KFdlYktpdFdl
YkNvbnRleHRDbGFzcyogd2ViQ29udGV4dENsYXNzCiAgICAgICAgICAgICBnX2NjbG9zdXJlX21h
cnNoYWxfVk9JRF9fT0JKRUNULAogICAgICAgICAgICAgR19UWVBFX05PTkUsIDEsCiAgICAgICAg
ICAgICBXRUJLSVRfVFlQRV9ET1dOTE9BRCk7CisjZW5kaWYKIAogICAgIC8qKgogICAgICAqIFdl
YktpdFdlYkNvbnRleHQ6OmluaXRpYWxpemUtd2ViLWV4dGVuc2lvbnM6CkBAIC03NDUsNiArNzc3
LDcgQEAgV2ViS2l0V2ViQ29udGV4dCogd2Via2l0X3dlYl9jb250ZXh0X25ldyh2b2lkKQogICAg
IHJldHVybiBXRUJLSVRfV0VCX0NPTlRFWFQoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9D
T05URVhULCBudWxscHRyKSk7CiB9CiAKKyNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAvKioK
ICAqIHdlYmtpdF93ZWJfY29udGV4dF9uZXdfZXBoZW1lcmFsOgogICoKQEAgLTgxNyw2ICs4NTAs
NyBAQCBnYm9vbGVhbiB3ZWJraXRfd2ViX2NvbnRleHRfaXNfZXBoZW1lcmFsKFdlYktpdFdlYkNv
bnRleHQqIGNvbnRleHQpCiAKICAgICByZXR1cm4gd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X2lzX2VwaGVtZXJhbChjb250ZXh0LT5wcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkpOwog
fQorI2VuZGlmCiAKIC8qKgogICogd2Via2l0X3dlYl9jb250ZXh0X2lzX2F1dG9tYXRpb25fYWxs
b3dlZDoKQEAgLTk1NSw2ICs5ODksNyBAQCBXZWJLaXRDYWNoZU1vZGVsIHdlYmtpdF93ZWJfY29u
dGV4dF9nZXRfY2FjaGVfbW9kZWwoV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCkKICAgICByZXR1
cm4gV0VCS0lUX0NBQ0hFX01PREVMX1dFQl9CUk9XU0VSOwogfQogCisjaWYgIUVOQUJMRSgyMDIy
X0dMSUJfQVBJKQogLyoqCiAgKiB3ZWJraXRfd2ViX2NvbnRleHRfY2xlYXJfY2FjaGU6CiAgKiBA
Y29udGV4dDogYSAjV2ViS2l0V2ViQ29udGV4dApAQCAtOTc0LDcgKzEwMDksNiBAQCB2b2lkIHdl
YmtpdF93ZWJfY29udGV4dF9jbGVhcl9jYWNoZShXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0KQog
ICAgIHdlYnNpdGVEYXRhU3RvcmUucmVtb3ZlRGF0YSh3ZWJzaXRlRGF0YVR5cGVzLCAtV2FsbFRp
bWU6OmluZmluaXR5KCksIFtdIHsgfSk7CiB9CiAKLSNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkp
CiAvKioKICAqIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfbmV0d29ya19wcm94eV9zZXR0aW5nczoK
ICAqIEBjb250ZXh0OiBhICNXZWJLaXRXZWJDb250ZXh0CkBAIC0xMDAxLDcgKzEwMzUsNiBAQCB2
b2lkIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfbmV0d29ya19wcm94eV9zZXR0aW5ncyhXZWJLaXRX
ZWJDb250ZXh0KiBjb250ZXh0LCBXZQogCiAgICAgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X3NldF9uZXR3b3JrX3Byb3h5X3NldHRpbmdzKGNvbnRleHQtPnByaXYtPndlYnNpdGVEYXRhTWFu
YWdlci5nZXQoKSwgcHJveHlNb2RlLCBwcm94eVNldHRpbmdzKTsKIH0KLSNlbmRpZgogCiAvKioK
ICAqIHdlYmtpdF93ZWJfY29udGV4dF9kb3dubG9hZF91cmk6CkBAIC0xMDUwLDYgKzEwODMsNyBA
QCBXZWJLaXRDb29raWVNYW5hZ2VyKiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Nvb2tpZV9tYW5h
Z2VyKFdlYktpdFdlYkNvbnRleHQqIGNvbgogCiAgICAgcmV0dXJuIHdlYmtpdF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcl9nZXRfY29va2llX21hbmFnZXIoY29udGV4dC0+cHJpdi0+d2Vic2l0ZURhdGFN
YW5hZ2VyLmdldCgpKTsKIH0KKyNlbmRpZgogCiAvKioKICAqIHdlYmtpdF93ZWJfY29udGV4dF9n
ZXRfZ2VvbG9jYXRpb25fbWFuYWdlcjoKQEAgLTExMTgsOCArMTE1MiwxMCBAQCB2b2lkIHdlYmtp
dF93ZWJfY29udGV4dF9zZXRfZmF2aWNvbl9kYXRhYmFzZV9kaXJlY3RvcnkoV2ViS2l0V2ViQ29u
dGV4dCogY29udGV4dAogICAgIEdVbmlxdWVQdHI8Z2NoYXI+IGZhdmljb25EYXRhYmFzZVBhdGgo
Z19idWlsZF9maWxlbmFtZShwcml2LT5mYXZpY29uRGF0YWJhc2VEaXJlY3RvcnkuZGF0YSgpLAog
ICAgICAgICAiV2VicGFnZUljb25zLmRiIiwgbnVsbHB0cikpOwogCisjaWYgMCAvLyBGSVhNRQog
ICAgIC8vIFNldHRpbmcgdGhlIHBhdGggd2lsbCBjYXVzZSB0aGUgaWNvbiBkYXRhYmFzZSB0byBi
ZSBvcGVuZWQuCiAgICAgd2Via2l0RmF2aWNvbkRhdGFiYXNlT3Blbihwcml2LT5mYXZpY29uRGF0
YWJhc2UuZ2V0KCksIEZpbGVTeXN0ZW06OnN0cmluZ0Zyb21GaWxlU3lzdGVtUmVwcmVzZW50YXRp
b24oZmF2aWNvbkRhdGFiYXNlUGF0aC5nZXQoKSksIHdlYmtpdF93ZWJfY29udGV4dF9pc19lcGhl
bWVyYWwoY29udGV4dCkpOworI2VuZGlmCiB9CiAKIC8qKgpAQCAtMTY1Niw2ICsxNjkyLDcgQEAg
dm9pZCB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2Rpc2tfY2FjaGVfZGlyZWN0b3J5KFdlYktpdFdl
YkNvbnRleHQqLCBjb25zdCBjaGFyKikKIH0KICNlbmRpZgogCisjaWYgIUVOQUJMRSgyMDIyX0dM
SUJfQVBJKQogLyoqCiAgKiB3ZWJraXRfd2ViX2NvbnRleHRfcHJlZmV0Y2hfZG5zOgogICogQGNv
bnRleHQ6IGEgI1dlYktpdFdlYkNvbnRleHQKQEAgLTE2NzEsOCArMTcwOCwxMCBAQCB2b2lkIHdl
YmtpdF93ZWJfY29udGV4dF9wcmVmZXRjaF9kbnMoV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCwg
Y29uc3QgY2hhciogaG9zdAogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9DT05U
RVhUKGNvbnRleHQpKTsKICAgICBnX3JldHVybl9pZl9mYWlsKGhvc3RuYW1lKTsKIAotICAgIGF1
dG8mIHdlYnNpdGVEYXRhU3RvcmUgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRhU3Rv
cmUoY29udGV4dC0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKTsKLSAgICB3ZWJzaXRl
RGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OlByZWZldGNoRE5TKFN0cmluZzo6ZnJvbVVURjgoaG9zdG5hbWUpKSwgMCk7CisgICAgaWYgKGNv
bnRleHQtPnByaXYtPmRuc1ByZWZldGNoZWRIb3N0cy5hZGQoaG9zdG5hbWUpLmlzTmV3RW50cnkp
IHsKKyAgICAgICAgYXV0byYgd2Vic2l0ZURhdGFTdG9yZSA9IHdlYmtpdFdlYnNpdGVEYXRhTWFu
YWdlckdldERhdGFTdG9yZShjb250ZXh0LT5wcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkp
OworICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlLm5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdl
czo6TmV0d29ya1Byb2Nlc3M6OlByZWZldGNoRE5TKFN0cmluZzo6ZnJvbVVURjgoaG9zdG5hbWUp
KSwgMCk7CisgICAgfQogICAgIGNvbnRleHQtPnByaXYtPmRuc1ByZWZldGNoSHlzdGVyZXJpcy5p
bXB1bHNlKCk7CiB9CiAKQEAgLTE2OTYsNiArMTczNSw3IEBAIHZvaWQgd2Via2l0X3dlYl9jb250
ZXh0X2FsbG93X3Rsc19jZXJ0aWZpY2F0ZV9mb3JfaG9zdChXZWJLaXRXZWJDb250ZXh0KiBjb250
ZXh0CiAgICAgYXV0byYgd2Vic2l0ZURhdGFTdG9yZSA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdl
ckdldERhdGFTdG9yZShjb250ZXh0LT5wcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkpOwog
ICAgIHdlYnNpdGVEYXRhU3RvcmUuYWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0
KGNlcnRpZmljYXRlSW5mbywgU3RyaW5nOjpmcm9tVVRGOChob3N0KSk7CiB9CisjZW5kaWYKIAog
LyoqCiAgKiB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3Byb2Nlc3NfbW9kZWw6CkBAIC0xOTM2LDEw
ICsxOTc2LDEyIEBAIHZvaWQgd2Via2l0V2ViQ29udGV4dEluaXRpYWxpemVOb3RpZmljYXRpb25Q
ZXJtaXNzaW9ucyhXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0CiAgICAgZ19zaWduYWxfZW1pdChj
b250ZXh0LCBzaWduYWxzW0lOSVRJQUxJWkVfTk9USUZJQ0FUSU9OX1BFUk1JU1NJT05TXSwgMCk7
CiB9CiAKKyNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiB2b2lkIHdlYmtpdFdlYkNvbnRleHRE
b3dubG9hZFN0YXJ0ZWQoV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCwgV2ViS2l0RG93bmxvYWQq
IGRvd25sb2FkKQogewogICAgIGdfc2lnbmFsX2VtaXQoY29udGV4dCwgc2lnbmFsc1tET1dOTE9B
RF9TVEFSVEVEXSwgMCwgZG93bmxvYWQpOwogfQorI2VuZGlmCiAKIEdWYXJpYW50KiB3ZWJraXRX
ZWJDb250ZXh0SW5pdGlhbGl6ZVdlYkV4dGVuc2lvbnMoV2ViS2l0V2ViQ29udGV4dCogY29udGV4
dCkKIHsKQEAgLTE5NzcsOCArMjAxOSwxMCBAQCB2b2lkIHdlYmtpdFdlYkNvbnRleHRDcmVhdGVQ
YWdlRm9yV2ViVmlldyhXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJLaXRXZWJWaQogICAg
ICAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0T3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3ko
U3RyaW5nOjpmcm9tVVRGOChkZWZhdWx0Q29udGVudFNlY3VyaXR5UG9saWN5KSk7CiAKICAgICBX
ZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIG1hbmFnZXIgPSB3ZWJraXRXZWJWaWV3R2V0V2Vic2l0
ZURhdGFNYW5hZ2VyKHdlYlZpZXcpOworI2lmICFFTkFCTEUoMjAyMl9HTElCX0FQSSkKICAgICBp
ZiAoIW1hbmFnZXIpCiAgICAgICAgIG1hbmFnZXIgPSBjb250ZXh0LT5wcml2LT53ZWJzaXRlRGF0
YU1hbmFnZXIuZ2V0KCk7CisjZW5kaWYKICAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0V2Vic2l0
ZURhdGFTdG9yZSgmd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKG1hbmFnZXIp
KTsKICAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0RGVmYXVsdFdlYnNpdGVQb2xpY2llcyh3ZWJr
aXRXZWJzaXRlUG9saWNpZXNHZXRXZWJzaXRlUG9saWNpZXMoZGVmYXVsdFdlYnNpdGVQb2xpY2ll
cykpOwogICAgIHdlYmtpdFdlYlZpZXdDcmVhdGVQYWdlKHdlYlZpZXcsIFdURk1vdmUocGFnZUNv
bmZpZ3VyYXRpb24pKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdFdlYkNvbnRleHRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0UHJpdmF0ZS5oCmluZGV4IDUzY2UzNTQ3MTIxMS4uYWE3
ZTY2MGFlNjE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9X
ZWJLaXRXZWJDb250ZXh0UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9nbGliL1dlYktpdFdlYkNvbnRleHRQcml2YXRlLmgKQEAgLTMxLDggKzMxLDE0IEBACiAjaW5j
bHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVz
dC5oPgogCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisjaW5jbHVkZSAiV2ViS2l0TmV0d29y
a1Nlc3Npb24uaCIKKyNlbmRpZgorCiBXZWJLaXQ6OldlYlByb2Nlc3NQb29sJiB3ZWJraXRXZWJD
b250ZXh0R2V0UHJvY2Vzc1Bvb2woV2ViS2l0V2ViQ29udGV4dCopOworI2lmICFFTkFCTEUoMjAy
Ml9HTElCX0FQSSkKIHZvaWQgd2Via2l0V2ViQ29udGV4dERvd25sb2FkU3RhcnRlZChXZWJLaXRX
ZWJDb250ZXh0KiwgV2ViS2l0RG93bmxvYWQqKTsKKyNlbmRpZgogdm9pZCB3ZWJraXRXZWJDb250
ZXh0Q3JlYXRlUGFnZUZvcldlYlZpZXcoV2ViS2l0V2ViQ29udGV4dCosIFdlYktpdFdlYlZpZXcq
LCBXZWJLaXRVc2VyQ29udGVudE1hbmFnZXIqLCBXZWJLaXRXZWJWaWV3KiwgV2ViS2l0V2Vic2l0
ZVBvbGljaWVzKik7CiB2b2lkIHdlYmtpdFdlYkNvbnRleHRXZWJWaWV3RGVzdHJveWVkKFdlYktp
dFdlYkNvbnRleHQqLCBXZWJLaXRXZWJWaWV3Kik7CiBXZWJLaXRXZWJWaWV3KiB3ZWJraXRXZWJD
b250ZXh0R2V0V2ViVmlld0ZvclBhZ2UoV2ViS2l0V2ViQ29udGV4dCosIFdlYktpdDo6V2ViUGFn
ZVByb3h5Kik7CkBAIC00MCw0ICs0Niw3IEBAIEdWYXJpYW50KiB3ZWJraXRXZWJDb250ZXh0SW5p
dGlhbGl6ZVdlYkV4dGVuc2lvbnMoV2ViS2l0V2ViQ29udGV4dCopOwogdm9pZCB3ZWJraXRXZWJD
b250ZXh0SW5pdGlhbGl6ZU5vdGlmaWNhdGlvblBlcm1pc3Npb25zKFdlYktpdFdlYkNvbnRleHQq
KTsKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKIHZvaWQgd2Via2l0V2ViQ29udGV4dFdp
bGxDbG9zZUF1dG9tYXRpb25TZXNzaW9uKFdlYktpdFdlYkNvbnRleHQqKTsKKyNpZiBFTkFCTEUo
MjAyMl9HTElCX0FQSSkKK1dlYktpdE5ldHdvcmtTZXNzaW9uKiB3ZWJraXRXZWJDb250ZXh0R2V0
TmV0d29ya1Nlc3Npb25Gb3JBdXRvbWF0aW9uKFdlYktpdFdlYkNvbnRleHQqKTsKKyNlbmRpZgog
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJL
aXRXZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdl
YlZpZXcuY3BwCmluZGV4IDIzMWUyMGZlNmJmOC4uYjY0MWM4ODQwNjQwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmNwcApAQCAtMTAy
LDYgKzEwMiwxMCBAQAogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdDbGllbnQuaCIKICNlbmRpZgog
CisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisjaW5jbHVkZSAiV2ViS2l0TmV0d29ya1Nlc3Np
b25Qcml2YXRlLmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCkBAIC0xODcsNiArMTkxLDkgQEAgZW51bSB7CiAgICAgUFJPUF9S
RUxBVEVEX1ZJRVcsCiAgICAgUFJPUF9TRVRUSU5HUywKICAgICBQUk9QX1VTRVJfQ09OVEVOVF9N
QU5BR0VSLAorI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIFBST1BfTkVUV09SS19TRVNT
SU9OLAorI2VuZGlmCiAgICAgUFJPUF9USVRMRSwKICAgICBQUk9QX0VTVElNQVRFRF9MT0FEX1BS
T0dSRVNTLAogCkBAIC0xOTgsNyArMjA1LDkgQEAgZW51bSB7CiAgICAgUFJPUF9aT09NX0xFVkVM
LAogICAgIFBST1BfSVNfTE9BRElORywKICAgICBQUk9QX0lTX1BMQVlJTkdfQVVESU8sCisjaWYg
IUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogICAgIFBST1BfSVNfRVBIRU1FUkFMLAorI2VuZGlmCiAg
ICAgUFJPUF9JU19DT05UUk9MTEVEX0JZX0FVVE9NQVRJT04sCiAgICAgUFJPUF9BVVRPTUFUSU9O
X1BSRVNFTlRBVElPTl9UWVBFLAogICAgIFBST1BfRURJVEFCTEUsCkBAIC0yNzMsNyArMjgyLDkg
QEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3UHJpdmF0ZSB7CiAgICAgQ1N0cmluZyBhY3RpdmVVUkk7
CiAgICAgYm9vbCBpc0FjdGl2ZVVSSUNoYW5nZUJsb2NrZWQ7CiAgICAgYm9vbCBpc0xvYWRpbmc7
CisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogICAgIGJvb2wgaXNFcGhlbWVyYWw7CisjZW5k
aWYKICAgICBib29sIGlzQ29udHJvbGxlZEJ5QXV0b21hdGlvbjsKICAgICBXZWJLaXRBdXRvbWF0
aW9uQnJvd3NpbmdDb250ZXh0UHJlc2VudGF0aW9uIGF1dG9tYXRpb25QcmVzZW50YXRpb25UeXBl
OwogCkBAIC0zMTIsNyArMzIzLDExIEBAIHN0cnVjdCBfV2ViS2l0V2ViVmlld1ByaXZhdGUgewog
CiAgICAgR1JlZlB0cjxXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3Q+IGF1dGhlbnRpY2F0aW9u
UmVxdWVzdDsKIAorI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIEdSZWZQdHI8V2ViS2l0
TmV0d29ya1Nlc3Npb24+IG5ldHdvcmtTZXNzaW9uOworI2Vsc2UKICAgICBHUmVmUHRyPFdlYktp
dFdlYnNpdGVEYXRhTWFuYWdlcj4gd2Vic2l0ZURhdGFNYW5hZ2VyOworI2VuZGlmCiAgICAgR1Jl
ZlB0cjxXZWJLaXRXZWJzaXRlUG9saWNpZXM+IHdlYnNpdGVQb2xpY2llczsKIAogICAgIENTdHJp
bmcgZGVmYXVsdENvbnRlbnRTZWN1cml0eVBvbGljeTsKQEAgLTU4MSw2ICs1OTYsMTUgQEAgc3Rh
dGljIHZvaWQgdXNlckFnZW50Q2hhbmdlZChXZWJLaXRTZXR0aW5ncyogc2V0dGluZ3MsIEdQYXJh
bVNwZWMqLCBXZWJLaXRXZWJWaWUKICAgICBnZXRQYWdlKHdlYlZpZXcpLnNldEN1c3RvbVVzZXJB
Z2VudChTdHJpbmc6OmZyb21VVEY4KHdlYmtpdF9zZXR0aW5nc19nZXRfdXNlcl9hZ2VudChzZXR0
aW5ncykpKTsKIH0KIAorc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdJc0VwaGVtZXJhbChX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAg
IHJldHVybiB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2lzX2VwaGVtZXJhbCh3ZWJWaWV3LT5wcml2
LT5uZXR3b3JrU2Vzc2lvbi5nZXQoKSk7CisjZWxzZQorICAgIHJldHVybiB3ZWJWaWV3LT5wcml2
LT5pc0VwaGVtZXJhbDsKKyNlbmRpZgorfQorCiAjaWYgUExBVEZPUk0oR1RLKQogc3RhdGljIHZv
aWQgZW5hYmxlQmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZXNDaGFuZ2VkKFdlYktpdFNldHRp
bmdzKiBzZXR0aW5ncywgR1BhcmFtU3BlYyosIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiB7CkBA
IC02MjYsNyArNjUwLDcgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld1JlcXVlc3RGYXZpY29u
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYg
PSB3ZWJWaWV3LT5wcml2OwogICAgIHByaXYtPmZhdmljb25DYW5jZWxsYWJsZSA9IGFkb3B0R1Jl
ZihnX2NhbmNlbGxhYmxlX25ldygpKTsKICAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFi
YXNlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlKHByaXYtPmNvbnRl
eHQuZ2V0KCkpOwotICAgIHdlYmtpdEZhdmljb25EYXRhYmFzZUdldEZhdmljb25JbnRlcm5hbChk
YXRhYmFzZSwgcHJpdi0+YWN0aXZlVVJJLmRhdGEoKSwgcHJpdi0+aXNFcGhlbWVyYWwsIHByaXYt
PmZhdmljb25DYW5jZWxsYWJsZS5nZXQoKSwgZ290RmF2aWNvbkNhbGxiYWNrLCB3ZWJWaWV3KTsK
KyAgICB3ZWJraXRGYXZpY29uRGF0YWJhc2VHZXRGYXZpY29uSW50ZXJuYWwoZGF0YWJhc2UsIHBy
aXYtPmFjdGl2ZVVSSS5kYXRhKCksIHdlYmtpdFdlYlZpZXdJc0VwaGVtZXJhbCh3ZWJWaWV3KSwg
cHJpdi0+ZmF2aWNvbkNhbmNlbGxhYmxlLmdldCgpLCBnb3RGYXZpY29uQ2FsbGJhY2ssIHdlYlZp
ZXcpOwogfQogCiBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3VXBkYXRlRmF2aWNvblVSSShXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBjaGFyKiBmYXZpY29uVVJJKQpAQCAtNzIyLDEyICs3
NDYsMTcgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0NvbnN0cnVjdGVkKEdPYmplY3QqIG9i
amVjdCkKICAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7CiAg
ICAgaWYgKHByaXYtPnJlbGF0ZWRWaWV3KSB7CiAgICAgICAgIHByaXYtPmNvbnRleHQgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQocHJpdi0+cmVsYXRlZFZpZXcpOworICAgICAgICBwcml2
LT5uZXR3b3JrU2Vzc2lvbiA9IHdlYmtpdF93ZWJfdmlld19nZXRfbmV0d29ya19zZXNzaW9uKHBy
aXYtPnJlbGF0ZWRWaWV3KTsKKyNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAgICAgICAgIHBy
aXYtPmlzRXBoZW1lcmFsID0gd2Via2l0X3dlYl92aWV3X2lzX2VwaGVtZXJhbChwcml2LT5yZWxh
dGVkVmlldyk7CisjZW5kaWYKICAgICAgICAgcHJpdi0+aXNDb250cm9sbGVkQnlBdXRvbWF0aW9u
ID0gd2Via2l0X3dlYl92aWV3X2lzX2NvbnRyb2xsZWRfYnlfYXV0b21hdGlvbihwcml2LT5yZWxh
dGVkVmlldyk7CiAgICAgfSBlbHNlIGlmICghcHJpdi0+Y29udGV4dCkKICAgICAgICAgcHJpdi0+
Y29udGV4dCA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpOworI2lmICFFTkFCTEUo
MjAyMl9HTElCX0FQSSkKICAgICBlbHNlIGlmICghcHJpdi0+aXNFcGhlbWVyYWwpCiAgICAgICAg
IHByaXYtPmlzRXBoZW1lcmFsID0gd2Via2l0X3dlYl9jb250ZXh0X2lzX2VwaGVtZXJhbChwcml2
LT5jb250ZXh0LmdldCgpKTsKKyNlbmRpZgogCiAgICAgaWYgKCFwcml2LT5zZXR0aW5ncykKICAg
ICAgICAgcHJpdi0+c2V0dGluZ3MgPSBhZG9wdEdSZWYod2Via2l0X3NldHRpbmdzX25ldygpKTsK
QEAgLTczNSw2ICs3NjQsMTQgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0NvbnN0cnVjdGVk
KEdPYmplY3QqIG9iamVjdCkKICAgICBpZiAoIXByaXYtPnVzZXJDb250ZW50TWFuYWdlcikKICAg
ICAgICAgcHJpdi0+dXNlckNvbnRlbnRNYW5hZ2VyID0gYWRvcHRHUmVmKHdlYmtpdF91c2VyX2Nv
bnRlbnRfbWFuYWdlcl9uZXcoKSk7CiAKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyNpZiBF
TkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKyAgICBpZiAocHJpdi0+aXNDb250cm9sbGVkQnlBdXRv
bWF0aW9uKQorICAgICAgICBwcml2LT5uZXR3b3JrU2Vzc2lvbiA9IHdlYmtpdFdlYkNvbnRleHRH
ZXROZXR3b3JrU2Vzc2lvbkZvckF1dG9tYXRpb24ocHJpdi0+Y29udGV4dC5nZXQoKSk7CisjZW5k
aWYKKyAgICBpZiAoIXByaXYtPm5ldHdvcmtTZXNzaW9uKQorICAgICAgICBwcml2LT5uZXR3b3Jr
U2Vzc2lvbiA9IHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X2RlZmF1bHQoKTsKKyNlbHNlCiAg
ICAgaWYgKHByaXYtPmlzRXBoZW1lcmFsICYmICF3ZWJraXRfd2ViX2NvbnRleHRfaXNfZXBoZW1l
cmFsKHByaXYtPmNvbnRleHQuZ2V0KCkpKSB7CiAgICAgICAgIHByaXYtPndlYnNpdGVEYXRhTWFu
YWdlciA9IGFkb3B0R1JlZih3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfbmV3X2VwaGVtZXJh
bCgpKTsKICAgICAgICAgYXV0byogY29udGV4dERhdGFNYW5hZ2VyID0gd2Via2l0X3dlYl9jb250
ZXh0X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcihwcml2LT5jb250ZXh0LmdldCgpKTsKQEAgLTc0
Miw2ICs3NzksNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3Q29uc3RydWN0ZWQoR09iamVj
dCogb2JqZWN0KQogICAgICAgICBhdXRvIHByb3h5U2V0dGluZ3MgPSB3ZWJraXRXZWJzaXRlRGF0
YU1hbmFnZXJHZXREYXRhU3RvcmUoY29udGV4dERhdGFNYW5hZ2VyKS5uZXR3b3JrUHJveHlTZXR0
aW5ncygpOwogICAgICAgICB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUocHJp
di0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKS5zZXROZXR3b3JrUHJveHlTZXR0aW5ncyhXVEZN
b3ZlKHByb3h5U2V0dGluZ3MpKTsKICAgICB9CisjZW5kaWYKIAogICAgIGlmICghcHJpdi0+d2Vi
c2l0ZVBvbGljaWVzKQogICAgICAgICBwcml2LT53ZWJzaXRlUG9saWNpZXMgPSBhZG9wdEdSZWYo
d2Via2l0X3dlYnNpdGVfcG9saWNpZXNfbmV3KCkpOwpAQCAtODI0LDEyICs4NjIsMjEgQEAgc3Rh
dGljIHZvaWQgd2Via2l0V2ViVmlld1NldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQg
cHJvcElkLCBjb25zdCBHVmFsdWUKICAgICAgICAgd2ViVmlldy0+cHJpdi0+dXNlckNvbnRlbnRN
YW5hZ2VyID0gdXNlckNvbnRlbnRNYW5hZ2VyID8gV0VCS0lUX1VTRVJfQ09OVEVOVF9NQU5BR0VS
KHVzZXJDb250ZW50TWFuYWdlcikgOiBudWxscHRyOwogICAgICAgICBicmVhazsKICAgICB9Cisj
aWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgY2FzZSBQUk9QX05FVFdPUktfU0VTU0lPTjog
eworICAgICAgICBncG9pbnRlciBuZXR3b3JrU2Vzc2lvbiA9IGdfdmFsdWVfZ2V0X29iamVjdCh2
YWx1ZSk7CisgICAgICAgIHdlYlZpZXctPnByaXYtPm5ldHdvcmtTZXNzaW9uID0gbmV0d29ya1Nl
c3Npb24gPyBXRUJLSVRfTkVUV09SS19TRVNTSU9OKG5ldHdvcmtTZXNzaW9uKSA6IG51bGxwdHI7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyNlbmRpZgogICAgIGNhc2UgUFJPUF9aT09NX0xFVkVM
OgogICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3pvb21fbGV2ZWwod2ViVmlldywgZ192YWx1
ZV9nZXRfZG91YmxlKHZhbHVlKSk7CiAgICAgICAgIGJyZWFrOworI2lmICFFTkFCTEUoMjAyMl9H
TElCX0FQSSkKICAgICBjYXNlIFBST1BfSVNfRVBIRU1FUkFMOgogICAgICAgICB3ZWJWaWV3LT5w
cml2LT5pc0VwaGVtZXJhbCA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpOwogICAgICAgICBi
cmVhazsKKyNlbmRpZgogICAgIGNhc2UgUFJPUF9JU19DT05UUk9MTEVEX0JZX0FVVE9NQVRJT046
CiAgICAgICAgIHdlYlZpZXctPnByaXYtPmlzQ29udHJvbGxlZEJ5QXV0b21hdGlvbiA9IGdfdmFs
dWVfZ2V0X2Jvb2xlYW4odmFsdWUpOwogICAgICAgICBicmVhazsKQEAgLTg4NCw2ICs5MzEsMTEg
QEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0dldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwg
Z3VpbnQgcHJvcElkLCBHVmFsdWUqIHZhbHUKICAgICBjYXNlIFBST1BfVVNFUl9DT05URU5UX01B
TkFHRVI6CiAgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X3dlYl92aWV3
X2dldF91c2VyX2NvbnRlbnRfbWFuYWdlcih3ZWJWaWV3KSk7CiAgICAgICAgIGJyZWFrOworI2lm
IEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIGNhc2UgUFJPUF9ORVRXT1JLX1NFU1NJT046Cisg
ICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X3dlYl92aWV3X2dldF9uZXR3
b3JrX3Nlc3Npb24od2ViVmlldykpOworICAgICAgICBicmVhazsKKyNlbmRpZgogICAgIGNhc2Ug
UFJPUF9USVRMRToKICAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCB3ZWJWaWV3LT5w
cml2LT50aXRsZS5kYXRhKCkpOwogICAgICAgICBicmVhazsKQEAgLTkwNyw5ICs5NTksMTEgQEAg
c3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0dldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3Vp
bnQgcHJvcElkLCBHVmFsdWUqIHZhbHUKICAgICBjYXNlIFBST1BfSVNfUExBWUlOR19BVURJTzoK
ICAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X3dlYl92aWV3X2lzX3Bs
YXlpbmdfYXVkaW8od2ViVmlldykpOwogICAgICAgICBicmVhazsKKyNpZiAhRU5BQkxFKDIwMjJf
R0xJQl9BUEkpCiAgICAgY2FzZSBQUk9QX0lTX0VQSEVNRVJBTDoKICAgICAgICAgZ192YWx1ZV9z
ZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X3dlYl92aWV3X2lzX2VwaGVtZXJhbCh3ZWJWaWV3KSk7
CiAgICAgICAgIGJyZWFrOworI2VuZGlmCiAgICAgY2FzZSBQUk9QX0lTX0NPTlRST0xMRURfQllf
QVVUT01BVElPTjoKICAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X3dl
Yl92aWV3X2lzX2NvbnRyb2xsZWRfYnlfYXV0b21hdGlvbih3ZWJWaWV3KSk7CiAgICAgICAgIGJy
ZWFrOwpAQCAtMTA4Myw2ICsxMTM3LDIzIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19j
bGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQogICAgICAgICAgICAg
V0VCS0lUX1RZUEVfVVNFUl9DT05URU5UX01BTkFHRVIsCiAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxHUGFyYW1GbGFncz4oV0VCS0lUX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNU
X09OTFkpKTsKIAorI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIC8qKgorICAgICAqIFdl
YktpdFdlYlZpZXc6bmV0d29yay1zZXNzaW9uOgorICAgICAqCisgICAgICogVGhlICNXZWJLaXRO
ZXR3b3JrU2Vzc2lvbiBvZiB0aGUgdmlldworICAgICAqCisgICAgICogU2luY2U6IDIuNDAKKyAg
ICAgKi8KKyAgICBzT2JqUHJvcGVydGllc1tQUk9QX05FVFdPUktfU0VTU0lPTl09CisgICAgICAg
IGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAgICAibmV0d29yay1zZXNzaW9uIiwKKyAg
ICAgICAgICAgIF8oIldlYlZpZXcgbmV0d29yayBzZXNzaW9uIiksCisgICAgICAgICAgICBfKCJU
aGUgV2ViS2l0TmV0d29ya1Nlc3Npb24gb2YgdGhlIHZpZXciKSwKKyAgICAgICAgICAgIFdFQktJ
VF9UWVBFX05FVFdPUktfU0VTU0lPTiwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEdQYXJhbUZs
YWdzPihXRUJLSVRfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpOwor
I2VuZGlmCisKICAgICAvKioKICAgICAgKiBXZWJLaXRXZWJWaWV3OnRpdGxlOgogICAgICAqCkBA
IC0xMTg4LDYgKzEyNTksNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5p
dChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICAgICAgICAgIEZBTFNFLAog
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKTsKIAorI2lmICFFTkFCTEUoMjAyMl9H
TElCX0FQSSkKICAgICAvKioKICAgICAgKiBXZWJLaXRXZWJWaWV3OmlzLWVwaGVtZXJhbDoKICAg
ICAgKgpAQCAtMTIxMiw2ICsxMjg0LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2Ns
YXNzX2luaXQoV2ViS2l0V2ViVmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiAgICAgICAgICAgICBu
dWxscHRyLCBudWxscHRyLAogICAgICAgICAgICAgRkFMU0UsCiAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxHUGFyYW1GbGFncz4oV0VCS0lUX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RS
VUNUX09OTFkpKTsKKyNlbmRpZgogCiAgICAgLyoqCiAgICAgICogV2ViS2l0V2ViVmlldzppcy1j
b250cm9sbGVkLWJ5LWF1dG9tYXRpb246CkBAIC0yMzYzLDggKzI0MzYsMTIgQEAgdm9pZCB3ZWJr
aXRXZWJWaWV3TG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMoV2ViS2l0V2ViVmlldyogd2ViVmlldywg
Y29uc3QgY2hhciogZmEKIHsKICAgICB3ZWJraXRXZWJWaWV3Q29tcGxldGVBdXRoZW50aWNhdGlv
blJlcXVlc3Qod2ViVmlldyk7CiAKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICBXZWJL
aXRUTFNFcnJvcnNQb2xpY3kgdGxzRXJyb3JzUG9saWN5ID0gd2Via2l0X25ldHdvcmtfc2Vzc2lv
bl9nZXRfdGxzX2Vycm9yc19wb2xpY3kod2ViVmlldy0+cHJpdi0+bmV0d29ya1Nlc3Npb24uZ2V0
KCkpOworI2Vsc2UKICAgICBhdXRvKiB3ZWJzaXRlRGF0YU1hbmFnZXIgPSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYlZpZXcpOwogICAgIFdlYktpdFRMU0Vycm9y
c1BvbGljeSB0bHNFcnJvcnNQb2xpY3kgPSB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0
X3Rsc19lcnJvcnNfcG9saWN5KHdlYnNpdGVEYXRhTWFuYWdlcik7CisjZW5kaWYKICAgICBpZiAo
dGxzRXJyb3JzUG9saWN5ID09IFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9GQUlMKSB7CiAgICAg
ICAgIGdib29sZWFuIHJldHVyblZhbHVlOwogICAgICAgICBnX3NpZ25hbF9lbWl0KHdlYlZpZXcs
IHNpZ25hbHNbTE9BRF9GQUlMRURfV0lUSF9UTFNfRVJST1JTXSwgMCwgZmFpbGluZ1VSSSwgY2Vy
dGlmaWNhdGUsIHRsc0Vycm9ycywgJnJldHVyblZhbHVlKTsKQEAgLTIzODQsMTMgKzI0NjEsMTMg
QEAgdm9pZCB3ZWJraXRXZWJWaWV3R2V0TG9hZERlY2lzaW9uRm9ySWNvbihXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3LCBjb25zdCBMaW5rSWNvbiYKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBX
ZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9m
YXZpY29uX2RhdGFiYXNlKHdlYlZpZXctPnByaXYtPmNvbnRleHQuZ2V0KCkpOwotICAgIHdlYmtp
dEZhdmljb25EYXRhYmFzZUdldExvYWREZWNpc2lvbkZvckljb24oZGF0YWJhc2UsIGljb24sIGdl
dFBhZ2Uod2ViVmlldykucGFnZUxvYWRTdGF0ZSgpLmFjdGl2ZVVSTCgpLCB3ZWJWaWV3LT5wcml2
LT5pc0VwaGVtZXJhbCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIHdlYmtpdEZh
dmljb25EYXRhYmFzZUdldExvYWREZWNpc2lvbkZvckljb24oZGF0YWJhc2UsIGljb24sIGdldFBh
Z2Uod2ViVmlldykucGFnZUxvYWRTdGF0ZSgpLmFjdGl2ZVVSTCgpLCB3ZWJraXRXZWJWaWV3SXNF
cGhlbWVyYWwod2ViVmlldyksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9p
ZCB3ZWJraXRXZWJWaWV3U2V0SWNvbihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBMaW5r
SWNvbiYgaWNvbiwgQVBJOjpEYXRhJiBpY29uRGF0YSkKIHsKICAgICBXZWJLaXRGYXZpY29uRGF0
YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNl
KHdlYlZpZXctPnByaXYtPmNvbnRleHQuZ2V0KCkpOwotICAgIHdlYmtpdEZhdmljb25EYXRhYmFz
ZVNldEljb25Gb3JQYWdlVVJMKGRhdGFiYXNlLCBpY29uLCBpY29uRGF0YSwgZ2V0UGFnZSh3ZWJW
aWV3KS5wYWdlTG9hZFN0YXRlKCkuYWN0aXZlVVJMKCksIHdlYlZpZXctPnByaXYtPmlzRXBoZW1l
cmFsKTsKKyAgICB3ZWJraXRGYXZpY29uRGF0YWJhc2VTZXRJY29uRm9yUGFnZVVSTChkYXRhYmFz
ZSwgaWNvbiwgaWNvbkRhdGEsIGdldFBhZ2Uod2ViVmlldykucGFnZUxvYWRTdGF0ZSgpLmFjdGl2
ZVVSTCgpLCB3ZWJraXRXZWJWaWV3SXNFcGhlbWVyYWwod2ViVmlldykpOwogfQogI2VuZGlmCiAK
QEAgLTI3MDIsOSArMjc3OSwxMyBAQCB2b2lkIHdlYmtpdFdlYlZpZXdTdWJtaXRGb3JtUmVxdWVz
dChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRGb3JtU3VibWlzc2lvbgogCiB2b2lkIHdl
YmtpdFdlYlZpZXdIYW5kbGVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3LCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5KiBhdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSkKIHsKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICBib29sIGNyZWRlbmlhbFN0
b3JhZ2VFbmFibGVkID0gd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfcGVyc2lzdGVudF9jcmVk
ZW50aWFsX3N0b3JhZ2VfZW5hYmxlZCh3ZWJWaWV3LT5wcml2LT5uZXR3b3JrU2Vzc2lvbi5nZXQo
KSk7CisjZWxzZQogICAgIGF1dG8qIHdlYnNpdGVEYXRhTWFuYWdlciA9IHdlYmtpdF93ZWJfdmll
d19nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIod2ViVmlldyk7Ci0gICAgd2ViVmlldy0+cHJpdi0+
YXV0aGVudGljYXRpb25SZXF1ZXN0ID0gYWRvcHRHUmVmKHdlYmtpdEF1dGhlbnRpY2F0aW9uUmVx
dWVzdENyZWF0ZShhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSwKLSAgICAgICAgd2ViVmlldy0+cHJp
di0+aXNFcGhlbWVyYWwsIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfcGVyc2lzdGVu
dF9jcmVkZW50aWFsX3N0b3JhZ2VfZW5hYmxlZCh3ZWJzaXRlRGF0YU1hbmFnZXIpKSk7CisgICAg
Ym9vbCBjcmVkZW5pYWxTdG9yYWdlRW5hYmxlZCA9IHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdl
cl9nZXRfcGVyc2lzdGVudF9jcmVkZW50aWFsX3N0b3JhZ2VfZW5hYmxlZCh3ZWJzaXRlRGF0YU1h
bmFnZXIpOworI2VuZGlmCisgICAgd2ViVmlldy0+cHJpdi0+YXV0aGVudGljYXRpb25SZXF1ZXN0
ID0gYWRvcHRHUmVmKHdlYmtpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdENyZWF0ZShhdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSwgd2Via2l0V2ViVmlld0lzRXBoZW1lcmFsKHdlYlZpZXcpLCBjcmVkZW5p
YWxTdG9yYWdlRW5hYmxlZCkpOwogICAgIGdib29sZWFuIHJldHVyblZhbHVlOwogICAgIGdfc2ln
bmFsX2VtaXQod2ViVmlldywgc2lnbmFsc1tBVVRIRU5USUNBVEVdLCAwLCB3ZWJWaWV3LT5wcml2
LT5hdXRoZW50aWNhdGlvblJlcXVlc3QuZ2V0KCksICZyZXR1cm5WYWx1ZSk7CiB9CkBAIC0yNzQw
LDcgKzI4MjEsMTEgQEAgdm9pZCB3ZWJraXRXZWJWaWV3U2VsZWN0aW9uRGlkQ2hhbmdlKFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcpCiAKIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogd2Via2l0V2Vi
Vmlld0dldFdlYnNpdGVEYXRhTWFuYWdlcihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogeworI2lm
IEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIHJldHVybiB3ZWJraXRfbmV0d29ya19zZXNzaW9u
X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcih3ZWJWaWV3LT5wcml2LT5uZXR3b3JrU2Vzc2lvbi5n
ZXQoKSk7CisjZWxzZQogICAgIHJldHVybiB3ZWJWaWV3LT5wcml2LT53ZWJzaXRlRGF0YU1hbmFn
ZXIuZ2V0KCk7CisjZW5kaWYKIH0KIAogI2lmIFBMQVRGT1JNKEdUSykKQEAgLTI4ODgsNiArMjk3
Myw3IEBAIFdlYktpdFVzZXJDb250ZW50TWFuYWdlciogd2Via2l0X3dlYl92aWV3X2dldF91c2Vy
X2NvbnRlbnRfbWFuYWdlcihXZWJLaXRXZWJWaWV3CiAgICAgcmV0dXJuIHdlYlZpZXctPnByaXYt
PnVzZXJDb250ZW50TWFuYWdlci5nZXQoKTsKIH0KIAorI2lmICFFTkFCTEUoMjAyMl9HTElCX0FQ
SSkKIC8qKgogICogd2Via2l0X3dlYl92aWV3X2lzX2VwaGVtZXJhbDoKICAqIEB3ZWJfdmlldzog
YSAjV2ViS2l0V2ViVmlldwpAQCAtMjkxMCw2ICsyOTk2LDcgQEAgZ2Jvb2xlYW4gd2Via2l0X3dl
Yl92aWV3X2lzX2VwaGVtZXJhbChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogCiAgICAgcmV0dXJu
IHdlYlZpZXctPnByaXYtPmlzRXBoZW1lcmFsOwogfQorI2VuZGlmCiAKIC8qKgogICogd2Via2l0
X3dlYl92aWV3X2lzX2NvbnRyb2xsZWRfYnlfYXV0b21hdGlvbjoKQEAgLTI5NDksNiArMzAzNiwy
NCBAQCBXZWJLaXRBdXRvbWF0aW9uQnJvd3NpbmdDb250ZXh0UHJlc2VudGF0aW9uIHdlYmtpdF93
ZWJfdmlld19nZXRfYXV0b21hdGlvbl9wcmVzZQogICAgIHJldHVybiB3ZWJWaWV3LT5wcml2LT5h
dXRvbWF0aW9uUHJlc2VudGF0aW9uVHlwZTsKIH0KIAorI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJ
KQorLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X25ldHdvcmtfc2Vzc2lvbjoKKyAqIEB3ZWJf
dmlldzogYSAjV2ViS2l0V2ViVmlldworICoKKyAqIEdldCB0aGUgI1dlYktpdE5ldHdvcmtTZXNz
aW9uIGFzc29jaWF0ZWQgdG8gQHdlYl92aWV3LgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBu
b25lKTogYSAjV2ViS2l0TmV0d29ya1Nlc3Npb24KKyAqCisgKiBTaW5jZTogMi40MAorICovCitX
ZWJLaXROZXR3b3JrU2Vzc2lvbiogd2Via2l0X3dlYl92aWV3X2dldF9uZXR3b3JrX3Nlc3Npb24o
V2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfSVNfV0VCX1ZJRVcod2ViVmlldyksIG51bGxwdHIpOworCisgICAgcmV0dXJuIHdlYlZpZXct
PnByaXYtPm5ldHdvcmtTZXNzaW9uLmdldCgpOworfQorI2Vsc2UKIC8qKgogICogd2Via2l0X3dl
Yl92aWV3X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcjoKICAqIEB3ZWJfdmlldzogYSAjV2ViS2l0
V2ViVmlldwpAQCAtMjk3Miw2ICszMDc3LDcgQEAgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKFdlYktpdFdlYlZpZXcKIAog
ICAgIHJldHVybiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdl
YlZpZXctPnByaXYtPmNvbnRleHQuZ2V0KCkpOwogfQorI2VuZGlmCiAKIC8qKgogICogd2Via2l0
X3dlYl92aWV3X3RyeV9jbG9zZToKQEAgLTQ0MTQsMTIgKzQ1MjAsMjAgQEAgV2ViS2l0RG93bmxv
YWQqIHdlYmtpdF93ZWJfdmlld19kb3dubG9hZF91cmkoV2ViS2l0V2ViVmlldyogd2ViVmlldywg
Y29uc3QgY2hhcioKICAgICBhdXRvJiBwYWdlID0gZ2V0UGFnZSh3ZWJWaWV3KTsKICAgICBhdXRv
JiBkb3dubG9hZFByb3h5ID0gcGFnZS5wcm9jZXNzKCkucHJvY2Vzc1Bvb2woKS5kb3dubG9hZChw
YWdlLndlYnNpdGVEYXRhU3RvcmUoKSwgJnBhZ2UsIFJlc291cmNlUmVxdWVzdCB7IFN0cmluZzo6
ZnJvbVVURjgodXJpKSB9KTsKICAgICBhdXRvIGRvd25sb2FkID0gd2Via2l0RG93bmxvYWRDcmVh
dGUoZG93bmxvYWRQcm94eSwgd2ViVmlldyk7CisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisg
ICAgZG93bmxvYWRQcm94eS5zZXREaWRTdGFydENhbGxiYWNrKFtzZXNzaW9uID0gR1JlZlB0cjxX
ZWJLaXROZXR3b3JrU2Vzc2lvbj4geyB3ZWJWaWV3LT5wcml2LT5uZXR3b3JrU2Vzc2lvbiB9LCBk
b3dubG9hZCA9IGRvd25sb2FkLmdldCgpXShhdXRvKiBkb3dubG9hZFByb3h5KSB7CisjZWxzZQog
ICAgIGRvd25sb2FkUHJveHkuc2V0RGlkU3RhcnRDYWxsYmFjayhbY29udGV4dCA9IEdSZWZQdHI8
V2ViS2l0V2ViQ29udGV4dD4geyB3ZWJWaWV3LT5wcml2LT5jb250ZXh0IH0sIGRvd25sb2FkID0g
ZG93bmxvYWQuZ2V0KCldKGF1dG8qIGRvd25sb2FkUHJveHkpIHsKKyNlbmRpZgogICAgICAgICBp
ZiAoIWRvd25sb2FkUHJveHkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgd2Via2l0
RG93bmxvYWRTdGFydGVkKGRvd25sb2FkKTsKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAg
ICAgICAgd2Via2l0TmV0d29ya1Nlc3Npb25Eb3dubG9hZFN0YXJ0ZWQoc2Vzc2lvbi5nZXQoKSwg
ZG93bmxvYWQpOworI2Vsc2UKICAgICAgICAgd2Via2l0V2ViQ29udGV4dERvd25sb2FkU3RhcnRl
ZChjb250ZXh0LmdldCgpLCBkb3dubG9hZCk7CisjZW5kaWYKICAgICB9KTsKIAogICAgIHJldHVy
biBkb3dubG9hZC5sZWFrUmVmKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmguaW4gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmguaW4KaW5kZXggNjc1N2FmMzRiNTQxLi43NmY1OTdlNTU0
ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdl
YlZpZXcuaC5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRX
ZWJWaWV3LmguaW4KQEAgLTU0LDYgKzU0LDEwIEBACiAjaW5jbHVkZSA8QEFQSV9JTkNMVURFX1BS
RUZJWEAvV2ViS2l0V2Vic2l0ZVBvbGljaWVzLmg+CiAjaW5jbHVkZSA8QEFQSV9JTkNMVURFX1BS
RUZJWEAvV2ViS2l0V2luZG93UHJvcGVydGllcy5oPgogCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9B
UEkpCisjaW5jbHVkZSA8QEFQSV9JTkNMVURFX1BSRUZJWEAvV2ViS2l0TmV0d29ya1Nlc3Npb24u
aD4KKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oR1RLKQogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTQmFzZS5oPgogI2luY2x1ZGUgPHdlYmtpdC9XZWJLaXRDb2xvckNob29zZXJSZXF1ZXN0Lmg+
CkBAIC00MzIsOCArNDM2LDEwIEBAIFdFQktJVF9BUEkgV2ViS2l0V2ViVmlld0JhY2tlbmQgKgog
d2Via2l0X3dlYl92aWV3X2dldF9iYWNrZW5kICAgICAgICAgICAgICAgICAgICAgICAgICAoV2Vi
S2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcpOwogI2VuZGlmCiAKKyNpZiAhRU5BQkxF
KDIwMjJfR0xJQl9BUEkpCiBXRUJLSVRfQVBJIGdib29sZWFuCiB3ZWJraXRfd2ViX3ZpZXdfaXNf
ZXBoZW1lcmFsICAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAg
ICAgICp3ZWJfdmlldyk7CisjZW5kaWYKIAogV0VCS0lUX0FQSSBnYm9vbGVhbgogd2Via2l0X3dl
Yl92aWV3X2lzX2NvbnRyb2xsZWRfYnlfYXV0b21hdGlvbiAgICAgICAgICAoV2ViS2l0V2ViVmll
dyAgICAgICAgICAgICAqd2ViX3ZpZXcpOwpAQCAtNDQxLDggKzQ0NywxMyBAQCB3ZWJraXRfd2Vi
X3ZpZXdfaXNfY29udHJvbGxlZF9ieV9hdXRvbWF0aW9uICAgICAgICAgIChXZWJLaXRXZWJWaWV3
CiBXRUJLSVRfQVBJIFdlYktpdEF1dG9tYXRpb25Ccm93c2luZ0NvbnRleHRQcmVzZW50YXRpb24K
IHdlYmtpdF93ZWJfdmlld19nZXRfYXV0b21hdGlvbl9wcmVzZW50YXRpb25fdHlwZSAgICAgKFdl
YktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3KTsKIAorI2lmIEVOQUJMRSgyMDIyX0dM
SUJfQVBJKQorV0VCS0lUX0FQSSBXZWJLaXROZXR3b3JrU2Vzc2lvbiAqCit3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X25ldHdvcmtfc2Vzc2lvbiAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAg
ICAgICAgICAgICp3ZWJfdmlldyk7CisjZWxzZQogV0VCS0lUX0FQSSBXZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXIgKgogd2Via2l0X3dlYl92aWV3X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlciAgICAg
ICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcpOworI2VuZGlmCiAK
IFdFQktJVF9BUEkgV2ViS2l0V2ViQ29udGV4dCAqCiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRl
eHQgICAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3
ZWJfdmlldyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9X
ZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmNwcAppbmRleCAzMzk1OTM0OTY5MGQuLjdh
MWU1MjdiNWM2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIv
V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuY3BwCkBAIC05NCwxMSArOTQsMTEg
QEAgc3RydWN0IF9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJQcml2YXRlIHsKICAgICBHVW5pcXVl
UHRyPGNoYXI+IGJhc2VEYXRhRGlyZWN0b3J5OwogICAgIEdVbmlxdWVQdHI8Y2hhcj4gYmFzZUNh
Y2hlRGlyZWN0b3J5OwogCisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogICAgIFdlYktpdFRM
U0Vycm9yc1BvbGljeSB0bHNFcnJvcnNQb2xpY3k7CiAKICAgICBHUmVmUHRyPFdlYktpdENvb2tp
ZU1hbmFnZXI+IGNvb2tpZU1hbmFnZXI7CiAKLSNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAg
ICAgLy8gVGhlc2UgbWFudWFsIGRpcmVjdG9yeSBvdmVycmlkZXMgYXJlIGRlcHJlY2F0ZWQuIFBs
ZWFzZSBkb24ndCBhZGQgbW9yZS4KICAgICBHVW5pcXVlUHRyPGNoYXI+IGxvY2FsU3RvcmFnZURp
cmVjdG9yeTsKICAgICBHVW5pcXVlUHRyPGNoYXI+IGRpc2tDYWNoZURpcmVjdG9yeTsKQEAgLTIx
NywxMiArMjE3LDEyIEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlclNldFBy
b3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElELCBjCiAgICAgfQogfQogCisjaWYg
IUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogc3RhdGljIHZvaWQgd2Via2l0V2Vic2l0ZURhdGFNYW5h
Z2VyQ29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQogewogICAgIEdfT0JKRUNUX0NMQVNTKHdl
YmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3RlZChvYmpl
Y3QpOwogCiAgICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZSogcHJpdiA9IFdFQktJ
VF9XRUJTSVRFX0RBVEFfTUFOQUdFUihvYmplY3QpLT5wcml2OwotI2lmICFFTkFCTEUoMjAyMl9H
TElCX0FQSSkKICAgICBpZiAocHJpdi0+YmFzZURhdGFEaXJlY3RvcnkpIHsKICAgICAgICAgaWYg
KCFwcml2LT5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkpCiAgICAgICAgICAgICBwcml2LT5sb2NhbFN0
b3JhZ2VEaXJlY3RvcnkucmVzZXQoZ19idWlsZF9maWxlbmFtZShwcml2LT5iYXNlRGF0YURpcmVj
dG9yeS5nZXQoKSwgImxvY2Fsc3RvcmFnZSIsIG51bGxwdHIpKTsKQEAgLTI0NiwyMiArMjQ2LDIz
IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckNvbnN0cnVjdGVkKEdPYmpl
Y3QqIG9iamVjdCkKICAgICAgICAgaWYgKCFwcml2LT5kb21DYWNoZURpcmVjdG9yeSkKICAgICAg
ICAgICAgIHByaXYtPmRvbUNhY2hlRGlyZWN0b3J5LnJlc2V0KGdfYnVpbGRfZmlsZW5hbWUocHJp
di0+YmFzZUNhY2hlRGlyZWN0b3J5LmdldCgpLCAiQ2FjaGVTdG9yYWdlIiwgbnVsbHB0cikpOwog
ICAgIH0KLSNlbmRpZgogCiAgICAgcHJpdi0+dGxzRXJyb3JzUG9saWN5ID0gV0VCS0lUX1RMU19F
UlJPUlNfUE9MSUNZX0ZBSUw7CiAgICAgaWYgKHByaXYtPndlYnNpdGVEYXRhU3RvcmUpCiAgICAg
ICAgIHByaXYtPndlYnNpdGVEYXRhU3RvcmUtPnNldElnbm9yZVRMU0Vycm9ycyhmYWxzZSk7CiB9
CisjZW5kaWYKIAogc3RhdGljIHZvaWQgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2NsYXNz
X2luaXQoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyQ2xhc3MqIGZpbmRDbGFzcykKIHsKICAgICB3
ZWJraXRJbml0aWFsaXplKCk7CiAKICAgICBHT2JqZWN0Q2xhc3MqIGdPYmplY3RDbGFzcyA9IEdf
T0JKRUNUX0NMQVNTKGZpbmRDbGFzcyk7Ci0KICAgICBnT2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0
eSA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb3BlcnR5OwogICAgIGdPYmplY3RDbGFz
cy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyU2V0UHJvcGVydHk7Cisj
aWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogICAgIGdPYmplY3RDbGFzcy0+Y29uc3RydWN0ZWQg
PSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJDb25zdHJ1Y3RlZDsKKyNlbmRpZgogCiAgICAgLyoq
CiAgICAgICogV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyOmJhc2UtZGF0YS1kaXJlY3Rvcnk6CkBA
IC01MDUsMTIgKzUwNiwyMyBAQCBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUmIHdlYmtpdFdlYnNp
dGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShXZWJLaXRXZWJzaXRlRGF0YQogICAgICAgICAgICAg
Y29uZmlndXJhdGlvbi0+c2V0Q2FjaGVTdG9yYWdlRGlyZWN0b3J5KEZpbGVTeXN0ZW06OnN0cmlu
Z0Zyb21GaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocHJpdi0+ZG9tQ2FjaGVEaXJlY3RvcnkuZ2V0
KCkpKTsKICNlbmRpZgogICAgICAgICBwcml2LT53ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGUoV1RGTW92ZShjb25maWd1cmF0aW9uKSwgUEFMOjpTZXNz
aW9uSUQ6OmdlbmVyYXRlUGVyc2lzdGVudFNlc3Npb25JRCgpKTsKKyNpZiAhRU5BQkxFKDIwMjJf
R0xJQl9BUEkpCiAgICAgICAgIHByaXYtPndlYnNpdGVEYXRhU3RvcmUtPnNldElnbm9yZVRMU0Vy
cm9ycyhwcml2LT50bHNFcnJvcnNQb2xpY3kgPT0gV0VCS0lUX1RMU19FUlJPUlNfUE9MSUNZX0lH
Tk9SRSk7CisjZW5kaWYKICAgICB9CiAKICAgICByZXR1cm4gKnByaXYtPndlYnNpdGVEYXRhU3Rv
cmU7CiB9CiAKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKK1dlYktpdFdlYnNpdGVEYXRhTWFu
YWdlciogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyQ3JlYXRlKEdVbmlxdWVQdHI8Y2hhcj4mJiBi
YXNlRGF0YURpcmVjdG9yeSwgR1VuaXF1ZVB0cjxjaGFyPiYmIGJhc2VDYWNoZURpcmVjdG9yeSkK
K3sKKyAgICBhdXRvKiBtYW5hZ2VyID0gV0VCS0lUX1dFQlNJVEVfREFUQV9NQU5BR0VSKGdfb2Jq
ZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJTSVRFX0RBVEFfTUFOQUdFUiwgbnVsbHB0cikpOworICAg
IG1hbmFnZXItPnByaXYtPmJhc2VEYXRhRGlyZWN0b3J5ID0gV1RGTW92ZShiYXNlRGF0YURpcmVj
dG9yeSk7CisgICAgbWFuYWdlci0+cHJpdi0+YmFzZUNhY2hlRGlyZWN0b3J5ID0gV1RGTW92ZShi
YXNlQ2FjaGVEaXJlY3RvcnkpOworICAgIHJldHVybiBtYW5hZ2VyOworfQorI2Vsc2UKIC8qKgog
ICogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX25ldzoKICAqIEBmaXJzdF9vcHRpb25fbmFt
ZTogbmFtZSBvZiB0aGUgZmlyc3Qgb3B0aW9uIHRvIHNldApAQCAtNTQ5LDYgKzU2MSw3IEBAIFdl
YktpdFdlYnNpdGVEYXRhTWFuYWdlciogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX25ld19l
cGhlbWVyYWwoKQogewogICAgIHJldHVybiBXRUJLSVRfV0VCU0lURV9EQVRBX01BTkFHRVIoZ19v
YmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQlNJVEVfREFUQV9NQU5BR0VSLCAiaXMtZXBoZW1lcmFs
IiwgVFJVRSwgbnVsbHB0cikpOwogfQorI2VuZGlmCiAKIC8qKgogICogd2Via2l0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyX2lzX2VwaGVtZXJhbDoKQEAgLTgzOCw3ICs4NTEsNiBAQCBjb25zdCBnY2hh
ciogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9kb21fY2FjaGVfZGlyZWN0b3J5KFdl
YktpdFdlYnNpdGVEYQogICAgICAgICBwcml2LT5kb21DYWNoZURpcmVjdG9yeS5yZXNldChnX3N0
cmR1cChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRDYWNoZVN0b3JhZ2VEaXJlY3Rv
cnkoKS51dGY4KCkuZGF0YSgpKSk7CiAgICAgcmV0dXJuIHByaXYtPmRvbUNhY2hlRGlyZWN0b3J5
LmdldCgpOwogfQotI2VuZGlmCiAKIC8qKgogICogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X2dldF9jb29raWVfbWFuYWdlcjoKQEAgLTEwMTUsNiArMTAyNyw3IEBAIHZvaWQgd2Via2l0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyX3NldF9uZXR3b3JrX3Byb3h5X3NldHRpbmdzKFdlYktpdFdlYnNp
dGVEYXRhTWFuCiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KKyNlbmRpZgogCiBzdGF0aWMgT3B0
aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdG9XZWJzaXRlRGF0YVR5cGVzKFdlYktpdFdlYnNpdGVE
YXRhVHlwZXMgdHlwZXMpCiB7CkBAIC0xMjQ3LDYgKzEyNjAsNyBAQCBzdHJ1Y3QgX1dlYktpdElU
UEZpcnN0UGFydHkgewogICAgIGludCByZWZlcmVuY2VDb3VudCB7IDEgfTsKIH07CiAKKyNpZiAh
RU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAvKioKICAqIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdl
cl9zZXRfbWVtb3J5X3ByZXNzdXJlX3NldHRpbmdzOgogICogQHNldHRpbmdzOiBhIFdlYktpdE1l
bW9yeVByZXNzdXJlU2V0dGluZ3MuCkBAIC0xMjcyLDYgKzEyODYsNyBAQCB2b2lkIHdlYmtpdF93
ZWJzaXRlX2RhdGFfbWFuYWdlcl9zZXRfbWVtb3J5X3ByZXNzdXJlX3NldHRpbmdzKFdlYktpdE1l
bW9yeVByZXNzdQogICAgIHN0ZDo6b3B0aW9uYWw8TWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpDb25m
aWd1cmF0aW9uPiBjb25maWcgPSBzZXR0aW5ncyA/IHN0ZDo6bWFrZV9vcHRpb25hbCh3ZWJraXRN
ZW1vcnlQcmVzc3VyZVNldHRpbmdzR2V0TWVtb3J5UHJlc3N1cmVIYW5kbGVyQ29uZmlndXJhdGlv
bihzZXR0aW5ncykpIDogc3RkOjpudWxsb3B0OwogICAgIFdlYlByb2Nlc3NQb29sOjpzZXROZXR3
b3JrUHJvY2Vzc01lbW9yeVByZXNzdXJlSGFuZGxlckNvbmZpZ3VyYXRpb24oY29uZmlnKTsKIH0K
KyNlbmRpZgogCiBHX0RFRklORV9CT1hFRF9UWVBFKFdlYktpdElUUEZpcnN0UGFydHksIHdlYmtp
dF9pdHBfZmlyc3RfcGFydHksIHdlYmtpdF9pdHBfZmlyc3RfcGFydHlfcmVmLCB3ZWJraXRfaXRw
X2ZpcnN0X3BhcnR5X3VucmVmKQogCkBAIC0xNDEwLDcgKzE0MjUsNyBAQCBzdHJ1Y3QgX1dlYktp
dElUUFRoaXJkUGFydHkgewogCiBHX0RFRklORV9CT1hFRF9UWVBFKFdlYktpdElUUFRoaXJkUGFy
dHksIHdlYmtpdF9pdHBfdGhpcmRfcGFydHksIHdlYmtpdF9pdHBfdGhpcmRfcGFydHlfcmVmLCB3
ZWJraXRfaXRwX3RoaXJkX3BhcnR5X3VucmVmKQogCi1zdGF0aWMgV2ViS2l0SVRQVGhpcmRQYXJ0
eSogd2Via2l0SVRQVGhpcmRQYXJ0eUNyZWF0ZShXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3Rv
cmU6OlRoaXJkUGFydHlEYXRhJiYgZGF0YSkKK1dlYktpdElUUFRoaXJkUGFydHkqIHdlYmtpdElU
UFRoaXJkUGFydHlDcmVhdGUoV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBh
cnR5RGF0YSYmIGRhdGEpCiB7CiAgICAgYXV0byogdGhpcmRQYXJ0eSA9IHN0YXRpY19jYXN0PFdl
YktpdElUUFRoaXJkUGFydHkqPihmYXN0TWFsbG9jKHNpemVvZihXZWJLaXRJVFBUaGlyZFBhcnR5
KSkpOwogICAgIG5ldyAodGhpcmRQYXJ0eSkgV2ViS2l0SVRQVGhpcmRQYXJ0eShXVEZNb3ZlKGRh
dGEpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktp
dFdlYnNpdGVEYXRhTWFuYWdlci5oLmluIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2ds
aWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmguaW4KaW5kZXggNDE0ODcyMmE3NjliLi5mMmE5
ZTk0ZTJhN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dl
YktpdFdlYnNpdGVEYXRhTWFuYWdlci5oLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5oLmluCkBAIC03NywxMSArNzcsMTMg
QEAgc3RydWN0IF9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJDbGFzcyB7CiBXRUJLSVRfQVBJIEdU
eXBlCiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X3R5cGUgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHZvaWQpOwogCisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQog
V0VCS0lUX0FQSSBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKgogd2Via2l0X3dlYnNpdGVfZGF0
YV9tYW5hZ2VyX25ldyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25z
dCBnY2hhciAgICAgICAgICAgICAgKmZpcnN0X29wdGlvbl9uYW1lLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAu
Li4pOwogV0VCS0lUX0FQSSBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKgogd2Via2l0X3dlYnNp
dGVfZGF0YV9tYW5hZ2VyX25ld19lcGhlbWVyYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICh2b2lkKTsKKyNlbmRpZgogCiBXRUJLSVRfQVBJIGdib29sZWFuCiB3ZWJraXRfd2Vic2l0ZV9k
YXRhX21hbmFnZXJfaXNfZXBoZW1lcmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFdl
YktpdFdlYnNpdGVEYXRhTWFuYWdlciogbWFuYWdlcik7CkBAIC0xMTksNyArMTIxLDYgQEAgd2Vi
a2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9zZXJ2aWNlX3dvcmtlcl9yZWdpc3RyYXRpb25z
X2RpcmVjdG9yeShXZWJLaXRXZWIKIAogV0VCS0lUX0RFUFJFQ0FURUQgY29uc3QgZ2NoYXIgKgog
d2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9kb21fY2FjaGVfZGlyZWN0b3J5ICAgICAg
ICAgICAgICAgICAgIChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIpOwotI2VuZGlm
CiAKIFdFQktJVF9BUEkgV2ViS2l0Q29va2llTWFuYWdlciAqCiB3ZWJraXRfd2Vic2l0ZV9kYXRh
X21hbmFnZXJfZ2V0X2Nvb2tpZV9tYW5hZ2VyICAgICAgICAgICAgICAgICAgICAgICAgKFdlYktp
dFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlcik7CkBAIC0xNDksNiArMTUwLDcgQEAgV0VCS0lU
X0FQSSB2b2lkCiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X25ldHdvcmtfcHJveHlf
c2V0dGluZ3MgICAgICAgICAgICAgICAgKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdl
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViS2l0TmV0d29ya1Byb3h5TW9kZSAgICBwcm94eV9tb2RlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXZWJLaXROZXR3b3JrUHJveHlTZXR0aW5ncyAqcHJveHlfc2V0dGluZ3Mp
OworI2VuZGlmCiAKIFdFQktJVF9BUEkgdm9pZAogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X2ZldGNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJzaXRl
RGF0YU1hbmFnZXIgKm1hbmFnZXIsCkBAIC0xODYsOCArMTg4LDEwIEBAIHdlYmtpdF93ZWJzaXRl
X2RhdGFfbWFuYWdlcl9jbGVhcl9maW5pc2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KFdlYktpdFdlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZXN1bHQgICAgICAgICAgICAgKnJlc3Vs
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICAgICAgICAgICoqZXJyb3IpOwogCisj
aWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogV0VCS0lUX0FQSSB2b2lkCiB3ZWJraXRfd2Vic2l0
ZV9kYXRhX21hbmFnZXJfc2V0X21lbW9yeV9wcmVzc3VyZV9zZXR0aW5ncyAgICAgICAgICAgICAg
IChXZWJLaXRNZW1vcnlQcmVzc3VyZVNldHRpbmdzICpzZXR0aW5ncyk7CisjZW5kaWYKIAogCiAj
ZGVmaW5lIFdFQktJVF9UWVBFX0lUUF9GSVJTVF9QQVJUWSAgICh3ZWJraXRfaXRwX2ZpcnN0X3Bh
cnR5X2dldF90eXBlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Z2xpYi9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJQcml2YXRlLmgKaW5kZXgg
ZmM5ZTgyMjZmYmI4Li44NjZhY2FhNzcwMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZhdGUuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJQ
cml2YXRlLmgKQEAgLTE5LDYgKzE5LDEyIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAi
V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFT
dG9yZS5oIgorI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KIAorI2lmIEVOQUJMRSgy
MDIyX0dMSUJfQVBJKQorV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiB3ZWJraXRXZWJzaXRlRGF0
YU1hbmFnZXJDcmVhdGUoR1VuaXF1ZVB0cjxjaGFyPiYmLCBHVW5pcXVlUHRyPGNoYXI+JiYpOwor
I2VuZGlmCiBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUmIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdl
ckdldERhdGFTdG9yZShXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqKTsKK1dlYktpdElUUFRoaXJk
UGFydHkqIHdlYmtpdElUUFRoaXJkUGFydHlDcmVhdGUoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhJiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvd2Via2l0LmguaW4gYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvZ2xpYi93ZWJraXQuaC5pbgppbmRleCA0N2I2NWJjN2YwZDEuLjM1OGU2NWMwOTVi
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvd2Via2l0Lmgu
aW4KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvd2Via2l0LmguaW4KQEAg
LTc2LDYgKzc2LDkgQEAKICNpbmNsdWRlIDxAQVBJX0lOQ0xVREVfUFJFRklYQC9XZWJLaXROYXZp
Z2F0aW9uQWN0aW9uLmg+CiAjaW5jbHVkZSA8QEFQSV9JTkNMVURFX1BSRUZJWEAvV2ViS2l0TmF2
aWdhdGlvblBvbGljeURlY2lzaW9uLmg+CiAjaW5jbHVkZSA8QEFQSV9JTkNMVURFX1BSRUZJWEAv
V2ViS2l0TmV0d29ya1Byb3h5U2V0dGluZ3MuaD4KKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkK
KyNpbmNsdWRlIDxAQVBJX0lOQ0xVREVfUFJFRklYQC9XZWJLaXROZXR3b3JrU2Vzc2lvbi5oPgor
I2VuZGlmCiAjaW5jbHVkZSA8QEFQSV9JTkNMVURFX1BSRUZJWEAvV2ViS2l0Tm90aWZpY2F0aW9u
Lmg+CiAjaW5jbHVkZSA8QEFQSV9JTkNMVURFX1BSRUZJWEAvV2ViS2l0Tm90aWZpY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3QuaD4KICNpbmNsdWRlIDxAQVBJX0lOQ0xVREVfUFJFRklYQC9XZWJLaXRP
cHRpb25NZW51Lmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXdHdGsuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3R3RrLmNwcAppbmRleCAxMDM3MmRlMzhkMGIuLjBjMDRmMWRkZGY5MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3R3Rr
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdH
dGsuY3BwCkBAIC0zNTEsNyArMzUxLDkgQEAgR3RrV2lkZ2V0KiB3ZWJraXRfd2ViX3ZpZXdfbmV3
X3dpdGhfY29udGV4dChXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0KQogICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9JU19XRUJfQ09OVEVYVChjb250ZXh0KSwgMCk7CiAKICAgICByZXR1
cm4gR1RLX1dJREdFVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX1ZJRVcsCisjaWYgIUVO
QUJMRSgyMDIyX0dMSUJfQVBJKQogICAgICAgICAiaXMtZXBoZW1lcmFsIiwgd2Via2l0X3dlYl9j
b250ZXh0X2lzX2VwaGVtZXJhbChjb250ZXh0KSwKKyNlbmRpZgogICAgICAgICAid2ViLWNvbnRl
eHQiLCBjb250ZXh0LAogICAgICAgICBudWxscHRyKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYlZpZXdXUEUuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRXZWJWaWV3V1BFLmNwcAppbmRleCBkNGEzODFi
ZGU2OGIuLjQ2ODMzZjMzNTU2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL3dwZS9XZWJLaXRXZWJWaWV3V1BFLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvd3BlL1dlYktpdFdlYlZpZXdXUEUuY3BwCkBAIC0xMDksNyArMTA5LDkgQEAgV2ViS2l0
V2ViVmlldyogd2Via2l0X3dlYl92aWV3X25ld193aXRoX2NvbnRleHQoV2ViS2l0V2ViVmlld0Jh
Y2tlbmQqIGJhY2tlbmQsIFcKIAogICAgIHJldHVybiBXRUJLSVRfV0VCX1ZJRVcoZ19vYmplY3Rf
bmV3KFdFQktJVF9UWVBFX1dFQl9WSUVXLAogICAgICAgICAiYmFja2VuZCIsIGJhY2tlbmQsCisj
aWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogICAgICAgICAiaXMtZXBoZW1lcmFsIiwgd2Via2l0
X3dlYl9jb250ZXh0X2lzX2VwaGVtZXJhbChjb250ZXh0KSwKKyNlbmRpZgogICAgICAgICAid2Vi
LWNvbnRleHQiLCBjb250ZXh0LAogICAgICAgICBudWxscHRyKSk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3Bw
CmluZGV4IDU0M2E2MzcyMGZjNi4uY2FkMGZkYmMzNmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcApAQCAt
MjUzLDcgKzI1Myw3IEBAIFNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yJiBXZWJzaXRlRGF0YVN0
b3JlOjpzb0F1dGhvcml6YXRpb25Db29yZGluYXRvcihjb25zdCBXCiAKIHN0YXRpYyBSZWY8TmV0
d29ya1Byb2Nlc3NQcm94eT4gbmV0d29ya1Byb2Nlc3NGb3JTZXNzaW9uKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCkKIHsKLSNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdQRSkKKyNpZiAo
KFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKSkgJiYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJ
KSkKICAgICBpZiAoc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpIHsKICAgICAgICAgLy8gUmV1c2Ug
YSBwcmV2aW91cyBwZXJzaXN0ZW50IHNlc3Npb24gbmV0d29yayBwcm9jZXNzIGZvciBlcGhlbWVy
YWwgc2Vzc2lvbnMuCiAgICAgICAgIGZvciAoYXV0byogZGF0YVN0b3JlIDogYWxsRGF0YVN0b3Jl
cygpLnZhbHVlcygpKSB7CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9ndGsvQnJvd3Nl
clRhYi5jIGIvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJUYWIuYwppbmRleCBjMDIyNDdh
ZWVmZjYuLjhhNzkyODdmNDQyMCAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL0Jy
b3dzZXJUYWIuYworKysgYi9Ub29scy9NaW5pQnJvd3Nlci9ndGsvQnJvd3NlclRhYi5jCkBAIC0y
MTgsNyArMjE4LDExIEBAIHN0YXRpYyB2b2lkIHRsc0Vycm9yc0RpYWxvZ1Jlc3BvbnNlKEd0a1dp
ZGdldCAqZGlhbG9nLCBnaW50IHJlc3BvbnNlLCBCcm93c2VyVGFiCiAgICAgICAgIEdUbHNDZXJ0
aWZpY2F0ZSAqY2VydGlmaWNhdGUgPSAoR1Rsc0NlcnRpZmljYXRlICopZ19vYmplY3RfZ2V0X2Rh
dGEoR19PQkpFQ1QoZGlhbG9nKSwgImNlcnRpZmljYXRlIik7CiAjaWYgU09VUF9DSEVDS19WRVJT
SU9OKDIsIDkxLCAwKQogICAgICAgICBHVXJpICp1cmkgPSBnX3VyaV9wYXJzZShmYWlsaW5nVVJJ
LCBTT1VQX0hUVFBfVVJJX0ZMQUdTLCBOVUxMKTsKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCA5
OCwgNSkKKyAgICAgICAgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9hbGxvd190bHNfY2VydGlmaWNh
dGVfZm9yX2hvc3Qod2Via2l0X3dlYl92aWV3X2dldF9uZXR3b3JrX3Nlc3Npb24odGFiLT53ZWJW
aWV3KSwgY2VydGlmaWNhdGUsIGdfdXJpX2dldF9ob3N0KHVyaSkpOworI2Vsc2UKICAgICAgICAg
d2Via2l0X3dlYl9jb250ZXh0X2FsbG93X3Rsc19jZXJ0aWZpY2F0ZV9mb3JfaG9zdCh3ZWJraXRf
d2ViX3ZpZXdfZ2V0X2NvbnRleHQodGFiLT53ZWJWaWV3KSwgY2VydGlmaWNhdGUsIGdfdXJpX2dl
dF9ob3N0KHVyaSkpOworI2VuZGlmCiAgICAgICAgIGdfdXJpX3VucmVmKHVyaSk7CiAjZWxzZQog
ICAgICAgICBTb3VwVVJJICp1cmkgPSBzb3VwX3VyaV9uZXcoZmFpbGluZ1VSSSk7CmRpZmYgLS1n
aXQgYS9Ub29scy9NaW5pQnJvd3Nlci9ndGsvQnJvd3NlcldpbmRvdy5jIGIvVG9vbHMvTWluaUJy
b3dzZXIvZ3RrL0Jyb3dzZXJXaW5kb3cuYwppbmRleCA4ODE2MDljOWZlOGYuLjM3MDEwMDMyZmZi
OSAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJXaW5kb3cuYworKysg
Yi9Ub29scy9NaW5pQnJvd3Nlci9ndGsvQnJvd3NlcldpbmRvdy5jCkBAIC00MCw2ICs0MCw5IEBA
IHN0cnVjdCBfQnJvd3NlcldpbmRvdyB7CiAgICAgR3RrQXBwbGljYXRpb25XaW5kb3cgcGFyZW50
OwogCiAgICAgV2ViS2l0V2ViQ29udGV4dCAqd2ViQ29udGV4dDsKKyNpZiBHVEtfQ0hFQ0tfVkVS
U0lPTigzLCA5OCwgMCkKKyAgICBXZWJLaXROZXR3b3JrU2Vzc2lvbiAqbmV0d29ya1Nlc3Npb247
CisjZW5kaWYKIAogICAgIEd0a1dpZGdldCAqbWFpbkJveDsKICAgICBHdGtXaWRnZXQgKnRvb2xi
YXI7CkBAIC0xNTksNyArMTYyLDExIEBAIHN0YXRpYyB2b2lkIHdlYlZpZXdUaXRsZUNoYW5nZWQo
V2ViS2l0V2ViVmlldyAqd2ViVmlldywgR1BhcmFtU3BlYyAqcHNwZWMsIEJyb3dzCiAgICAgY2hh
ciAqcHJpdmF0ZVRpdGxlID0gTlVMTDsKICAgICBpZiAod2Via2l0X3dlYl92aWV3X2lzX2NvbnRy
b2xsZWRfYnlfYXV0b21hdGlvbih3ZWJWaWV3KSkKICAgICAgICAgcHJpdmF0ZVRpdGxlID0gZ19z
dHJkdXBfcHJpbnRmKCJbQXV0b21hdGlvbl0gJXMiLCB0aXRsZSk7CisjaWYgR1RLX0NIRUNLX1ZF
UlNJT04oMywgOTgsIDApCisgICAgZWxzZSBpZiAod2Via2l0X25ldHdvcmtfc2Vzc2lvbl9pc19l
cGhlbWVyYWwod2Via2l0X3dlYl92aWV3X2dldF9uZXR3b3JrX3Nlc3Npb24od2ViVmlldykpKQor
I2Vsc2UKICAgICBlbHNlIGlmICh3ZWJraXRfd2ViX3ZpZXdfaXNfZXBoZW1lcmFsKHdlYlZpZXcp
KQorI2VuZGlmCiAgICAgICAgIHByaXZhdGVUaXRsZSA9IGdfc3RyZHVwX3ByaW50ZigiW1ByaXZh
dGVdICVzIiwgdGl0bGUpOwogICAgIGd0a193aW5kb3dfc2V0X3RpdGxlKEdUS19XSU5ET1cod2lu
ZG93KSwgcHJpdmF0ZVRpdGxlID8gcHJpdmF0ZVRpdGxlIDogdGl0bGUpOwogICAgIGdfZnJlZShw
cml2YXRlVGl0bGUpOwpAQCAtMTg1LDkgKzE5Miw5IEBAIHN0YXRpYyB2b2lkIHdlYlZpZXdMb2Fk
UHJvZ3Jlc3NDaGFuZ2VkKFdlYktpdFdlYlZpZXcgKndlYlZpZXcsIEdQYXJhbVNwZWMgKnBzcGVj
CiAgICAgfQogfQogCisjaWYgIUdUS19DSEVDS19WRVJTSU9OKDMsIDk4LCAwKQogc3RhdGljIHZv
aWQgZG93bmxvYWRTdGFydGVkKFdlYktpdFdlYkNvbnRleHQgKndlYkNvbnRleHQsIFdlYktpdERv
d25sb2FkICpkb3dubG9hZCwgQnJvd3NlcldpbmRvdyAqd2luZG93KQogewotI2lmICFHVEtfQ0hF
Q0tfVkVSU0lPTigzLCA5OCwgMCkKICAgICBpZiAoIXdpbmRvdy0+ZG93bmxvYWRzQmFyKSB7CiAg
ICAgICAgIHdpbmRvdy0+ZG93bmxvYWRzQmFyID0gYnJvd3Nlcl9kb3dubG9hZHNfYmFyX25ldygp
OwogICAgICAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh3aW5kb3ctPm1haW5Cb3gpLCB3
aW5kb3ctPmRvd25sb2Fkc0JhciwgRkFMU0UsIEZBTFNFLCAwKTsKQEAgLTE5Niw4ICsyMDMsOCBA
QCBzdGF0aWMgdm9pZCBkb3dubG9hZFN0YXJ0ZWQoV2ViS2l0V2ViQ29udGV4dCAqd2ViQ29udGV4
dCwgV2ViS2l0RG93bmxvYWQgKmRvd25sbwogICAgICAgICBndGtfd2lkZ2V0X3Nob3cod2luZG93
LT5kb3dubG9hZHNCYXIpOwogICAgIH0KICAgICBicm93c2VyX2Rvd25sb2Fkc19iYXJfYWRkX2Rv
d25sb2FkKEJST1dTRVJfRE9XTkxPQURTX0JBUih3aW5kb3ctPmRvd25sb2Fkc0JhciksIGRvd25s
b2FkKTsKLSNlbmRpZgogfQorI2VuZGlmCiAKIHN0YXRpYyB2b2lkIGJyb3dzZXJXaW5kb3dIaXN0
b3J5SXRlbUFjdGl2YXRlZChCcm93c2VyV2luZG93ICp3aW5kb3csIEdWYXJpYW50ICpwYXJhbWV0
ZXIsIEdBY3Rpb24gKmFjdGlvbikKIHsKQEAgLTQ1OCw3ICs0NjUsMTEgQEAgc3RhdGljIEd0a1dp
ZGdldCAqd2ViVmlld0NyZWF0ZShXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3LCBXZWJLaXROYXZpZ2F0
aW9uQWN0aW9uICoKICAgICBXZWJLaXRXZWJWaWV3ICpuZXdXZWJWaWV3ID0gV0VCS0lUX1dFQl9W
SUVXKHdlYmtpdF93ZWJfdmlld19uZXdfd2l0aF9yZWxhdGVkX3ZpZXcod2ViVmlldykpOwogICAg
IHdlYmtpdF93ZWJfdmlld19zZXRfc2V0dGluZ3MobmV3V2ViVmlldywgd2Via2l0X3dlYl92aWV3
X2dldF9zZXR0aW5ncyh3ZWJWaWV3KSk7CiAKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCA5OCwg
MCkKKyAgICBHdGtXaWRnZXQgKm5ld1dpbmRvdyA9IGJyb3dzZXJfd2luZG93X25ldyhHVEtfV0lO
RE9XKHdpbmRvdyksIHdpbmRvdy0+d2ViQ29udGV4dCwgd2luZG93LT5uZXR3b3JrU2Vzc2lvbik7
CisjZWxzZQogICAgIEd0a1dpZGdldCAqbmV3V2luZG93ID0gYnJvd3Nlcl93aW5kb3dfbmV3KEdU
S19XSU5ET1cod2luZG93KSwgd2luZG93LT53ZWJDb250ZXh0KTsKKyNlbmRpZgogICAgIGd0a193
aW5kb3dfc2V0X2FwcGxpY2F0aW9uKEdUS19XSU5ET1cobmV3V2luZG93KSwgZ3RrX3dpbmRvd19n
ZXRfYXBwbGljYXRpb24oR1RLX1dJTkRPVyh3aW5kb3cpKSk7CiAgICAgYnJvd3Nlcl93aW5kb3df
YXBwZW5kX3ZpZXcoQlJPV1NFUl9XSU5ET1cobmV3V2luZG93KSwgbmV3V2ViVmlldyk7CiAgICAg
Z3RrX3dpZGdldF9ncmFiX2ZvY3VzKEdUS19XSURHRVQobmV3V2ViVmlldykpOwpAQCAtNTA0LDYg
KzUxNSw5IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3RGVjaWRlUG9saWN5KFdlYktpdFdlYlZp
ZXcgKndlYlZpZXcsIFdlYktpdFBvbGljeURlY2lzaW9uCiAgICAgLyogT3BlbmluZyBhIG5ldyB0
YWIgaWYgbGluayBjbGlja2VkIHdpdGggdGhlIG1pZGRsZSBidXR0b24uICovCiAgICAgV2ViS2l0
V2ViVmlldyAqbmV3V2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyhnX29iamVjdF9uZXcoV0VCS0lU
X1RZUEVfV0VCX1ZJRVcsCiAgICAgICAgICJ3ZWItY29udGV4dCIsIHdlYmtpdF93ZWJfdmlld19n
ZXRfY29udGV4dCh3ZWJWaWV3KSwKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCA5OCwgMCkKKyAg
ICAgICAgIm5ldHdvcmstc2Vzc2lvbiIsIHdlYmtpdF93ZWJfdmlld19nZXRfbmV0d29ya19zZXNz
aW9uKHdlYlZpZXcpLAorI2VuZGlmCiAgICAgICAgICJzZXR0aW5ncyIsIHdlYmtpdF93ZWJfdmll
d19nZXRfc2V0dGluZ3Mod2ViVmlldyksCiAgICAgICAgICJ1c2VyLWNvbnRlbnQtbWFuYWdlciIs
IHdlYmtpdF93ZWJfdmlld19nZXRfdXNlcl9jb250ZW50X21hbmFnZXIod2ViVmlldyksCiAgICAg
ICAgICJpcy1jb250cm9sbGVkLWJ5LWF1dG9tYXRpb24iLCB3ZWJraXRfd2ViX3ZpZXdfaXNfY29u
dHJvbGxlZF9ieV9hdXRvbWF0aW9uKHdlYlZpZXcpLApAQCAtNzU2LDYgKzc3MCw5IEBAIHN0YXRp
YyB2b2lkIG5ld1RhYkNhbGxiYWNrKEdTaW1wbGVBY3Rpb24gKmFjdGlvbiwgR1ZhcmlhbnQgKnBh
cmFtZXRlciwgZ3BvaW50ZXIKIAogICAgIGJyb3dzZXJfd2luZG93X2FwcGVuZF92aWV3KHdpbmRv
dywgV0VCS0lUX1dFQl9WSUVXKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfVklFVywKICAg
ICAgICAgIndlYi1jb250ZXh0Iiwgd2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KHdlYlZpZXcp
LAorI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDk4LCAwKQorICAgICAgICAibmV0d29yay1zZXNz
aW9uIiwgd2luZG93LT5uZXR3b3JrU2Vzc2lvbiwKKyNlbmRpZgogICAgICAgICAic2V0dGluZ3Mi
LCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdlYlZpZXcpLAogICAgICAgICAidXNlci1j
b250ZW50LW1hbmFnZXIiLCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VzZXJfY29udGVudF9tYW5hZ2Vy
KHdlYlZpZXcpLAogICAgICAgICAiaXMtY29udHJvbGxlZC1ieS1hdXRvbWF0aW9uIiwgd2Via2l0
X3dlYl92aWV3X2lzX2NvbnRyb2xsZWRfYnlfYXV0b21hdGlvbih3ZWJWaWV3KSwKQEAgLTc3NCwx
NSArNzkxLDMzIEBAIHN0YXRpYyB2b2lkIG9wZW5Qcml2YXRlV2luZG93KEdTaW1wbGVBY3Rpb24g
KmFjdGlvbiwgR1ZhcmlhbnQgKnBhcmFtZXRlciwgZ3BvaW50CiB7CiAgICAgQnJvd3NlcldpbmRv
dyAqd2luZG93ID0gQlJPV1NFUl9XSU5ET1codXNlckRhdGEpOwogICAgIFdlYktpdFdlYlZpZXcg
KndlYlZpZXcgPSBicm93c2VyX3RhYl9nZXRfd2ViX3ZpZXcod2luZG93LT5hY3RpdmVUYWIpOwor
CisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgOTgsIDApCisgICAgV2ViS2l0TmV0d29ya1Nlc3Np
b24gKm5ldHdvcmtTZXNzaW9uID0gTlVMTDsKKyAgICBpZiAoIXdlYmtpdF93ZWJfdmlld19pc19j
b250cm9sbGVkX2J5X2F1dG9tYXRpb24od2ViVmlldykpIHsKKyAgICAgICAgbmV0d29ya1Nlc3Np
b24gPSB3ZWJraXRfbmV0d29ya19zZXNzaW9uX25ld19lcGhlbWVyYWwoKTsKKyAgICAgICAgd2Vi
a2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfdGxzX2Vycm9yc19wb2xpY3kobmV0d29ya1Nlc3Npb24s
IHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X3Rsc19lcnJvcnNfcG9saWN5KHdpbmRvdy0+bmV0
d29ya1Nlc3Npb24pKTsKKyAgICAgICAgLy8gRklYTUU6IHdlIG5lZWQgcHVibGljIGFwaSB0byBn
ZXQgcHJveHkgc2V0dGluZ3MuCisgICAgfQorI2VuZGlmCiAgICAgV2ViS2l0V2ViVmlldyAqbmV3
V2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyhnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX1ZJ
RVcsCiAgICAgICAgICJ3ZWItY29udGV4dCIsIHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dCh3
ZWJWaWV3KSwKICAgICAgICAgInNldHRpbmdzIiwgd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5n
cyh3ZWJWaWV3KSwKICAgICAgICAgInVzZXItY29udGVudC1tYW5hZ2VyIiwgd2Via2l0X3dlYl92
aWV3X2dldF91c2VyX2NvbnRlbnRfbWFuYWdlcih3ZWJWaWV3KSwKKyNpZiBHVEtfQ0hFQ0tfVkVS
U0lPTigzLCA5OCwgMCkKKyAgICAgICAgIm5ldHdvcmstc2Vzc2lvbiIsIG5ldHdvcmtTZXNzaW9u
LAorI2Vsc2UKICAgICAgICAgImlzLWVwaGVtZXJhbCIsIFRSVUUsCisjZW5kaWYKICAgICAgICAg
ImlzLWNvbnRyb2xsZWQtYnktYXV0b21hdGlvbiIsIHdlYmtpdF93ZWJfdmlld19pc19jb250cm9s
bGVkX2J5X2F1dG9tYXRpb24od2ViVmlldyksCiAgICAgICAgICJ3ZWJzaXRlLXBvbGljaWVzIiwg
d2Via2l0X3dlYl92aWV3X2dldF93ZWJzaXRlX3BvbGljaWVzKHdlYlZpZXcpLAogICAgICAgICBO
VUxMKSk7CisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgOTgsIDApCisgICAgR3RrV2lkZ2V0ICpu
ZXdXaW5kb3cgPSBicm93c2VyX3dpbmRvd19uZXcoR1RLX1dJTkRPVyh3aW5kb3cpLCB3aW5kb3ct
PndlYkNvbnRleHQsIG5ldHdvcmtTZXNzaW9uKTsKKyAgICBnX2NsZWFyX29iamVjdCgmbmV0d29y
a1Nlc3Npb24pOworI2Vsc2UKICAgICBHdGtXaWRnZXQgKm5ld1dpbmRvdyA9IGJyb3dzZXJfd2lu
ZG93X25ldyhHVEtfV0lORE9XKHdpbmRvdyksIHdpbmRvdy0+d2ViQ29udGV4dCk7CisjZW5kaWYK
ICAgICBndGtfd2luZG93X3NldF9hcHBsaWNhdGlvbihHVEtfV0lORE9XKG5ld1dpbmRvdyksIGd0
a193aW5kb3dfZ2V0X2FwcGxpY2F0aW9uKEdUS19XSU5ET1cod2luZG93KSkpOwogICAgIGJyb3dz
ZXJfd2luZG93X2FwcGVuZF92aWV3KEJST1dTRVJfV0lORE9XKG5ld1dpbmRvdyksIG5ld1dlYlZp
ZXcpOwogICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyhHVEtfV0lER0VUKG5ld1dlYlZpZXcpKTsK
QEAgLTk2Miw2ICs5OTcsMTAgQEAgc3RhdGljIHZvaWQgYnJvd3NlcldpbmRvd0ZpbmFsaXplKEdP
YmplY3QgKmdPYmplY3QpCiAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVk
KHdpbmRvdy0+d2ViQ29udGV4dCwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgTlVMTCwgTlVM
TCwgd2luZG93KTsKICAgICBnX29iamVjdF91bnJlZih3aW5kb3ctPndlYkNvbnRleHQpOwogCisj
aWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgOTgsIDUpCisgICAgZ19jbGVhcl9vYmplY3QoJndpbmRv
dy0+bmV0d29ya1Nlc3Npb24pOworI2VuZGlmCisKICAgICBpZiAod2luZG93LT5mYXZpY29uKSB7
CiAgICAgICAgIGdfb2JqZWN0X3VucmVmKHdpbmRvdy0+ZmF2aWNvbik7CiAgICAgICAgIHdpbmRv
dy0+ZmF2aWNvbiA9IE5VTEw7CkBAIC0xNDYxLDcgKzE1MDAsMTEgQEAgc3RhdGljIHZvaWQgYnJv
d3Nlcl93aW5kb3dfY2xhc3NfaW5pdChCcm93c2VyV2luZG93Q2xhc3MgKmtsYXNzKQogfQogCiAv
KiBQdWJsaWMgQVBJLiAqLworI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDk4LCAwKQorR3RrV2lk
Z2V0ICpicm93c2VyX3dpbmRvd19uZXcoR3RrV2luZG93ICpwYXJlbnQsIFdlYktpdFdlYkNvbnRl
eHQgKndlYkNvbnRleHQsIFdlYktpdE5ldHdvcmtTZXNzaW9uICpuZXR3b3JrU2Vzc2lvbikKKyNl
bHNlCiBHdGtXaWRnZXQgKmJyb3dzZXJfd2luZG93X25ldyhHdGtXaW5kb3cgKnBhcmVudCwgV2Vi
S2l0V2ViQ29udGV4dCAqd2ViQ29udGV4dCkKKyNlbmRpZgogewogICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9JU19XRUJfQ09OVEVYVCh3ZWJDb250ZXh0KSwgTlVMTCk7CiAKQEAgLTE0
NzIsNyArMTUxNSwxMiBAQCBHdGtXaWRnZXQgKmJyb3dzZXJfd2luZG93X25ldyhHdGtXaW5kb3cg
KnBhcmVudCwgV2ViS2l0V2ViQ29udGV4dCAqd2ViQ29udGV4dCkKICAgICAgICAgTlVMTCkpOwog
CiAgICAgd2luZG93LT53ZWJDb250ZXh0ID0gZ19vYmplY3RfcmVmKHdlYkNvbnRleHQpOworI2lm
IEdUS19DSEVDS19WRVJTSU9OKDMsIDk4LCAwKQorICAgIHdpbmRvdy0+bmV0d29ya1Nlc3Npb24g
PSBuZXR3b3JrU2Vzc2lvbiA/IGdfb2JqZWN0X3JlZihuZXR3b3JrU2Vzc2lvbikgOiBOVUxMOwor
I2Vsc2UKICAgICBnX3NpZ25hbF9jb25uZWN0KHdpbmRvdy0+d2ViQ29udGV4dCwgImRvd25sb2Fk
LXN0YXJ0ZWQiLCBHX0NBTExCQUNLKGRvd25sb2FkU3RhcnRlZCksIHdpbmRvdyk7CisjZW5kaWYK
KwogICAgIGlmIChwYXJlbnQpIHsKICAgICAgICAgd2luZG93LT5wYXJlbnRXaW5kb3cgPSBwYXJl
bnQ7CiAgICAgICAgIGdfb2JqZWN0X2FkZF93ZWFrX3BvaW50ZXIoR19PQkpFQ1QocGFyZW50KSwg
KGdwb2ludGVyICopJndpbmRvdy0+cGFyZW50V2luZG93KTsKQEAgLTE0ODEsNiArMTUyOSwxNSBA
QCBHdGtXaWRnZXQgKmJyb3dzZXJfd2luZG93X25ldyhHdGtXaW5kb3cgKnBhcmVudCwgV2ViS2l0
V2ViQ29udGV4dCAqd2ViQ29udGV4dCkKICAgICByZXR1cm4gR1RLX1dJREdFVCh3aW5kb3cpOwog
fQogCisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgOTgsIDApCitXZWJLaXROZXR3b3JrU2Vzc2lv
biogYnJvd3Nlcl93aW5kb3dfZ2V0X25ldHdvcmtfc2Vzc2lvbihCcm93c2VyV2luZG93ICp3aW5k
b3cpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoQlJPV1NFUl9JU19XSU5ET1cod2luZG93
KSwgTlVMTCk7CisKKyAgICByZXR1cm4gd2luZG93LT5uZXR3b3JrU2Vzc2lvbjsKK30KKyNlbmRp
ZgorCiBXZWJLaXRXZWJDb250ZXh0ICpicm93c2VyX3dpbmRvd19nZXRfd2ViX2NvbnRleHQoQnJv
d3NlcldpbmRvdyAqd2luZG93KQogewogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEJST1dTRVJf
SVNfV0lORE9XKHdpbmRvdyksIE5VTEwpOwpAQCAtMTU2OCw2ICsxNjI1LDkgQEAgdm9pZCBicm93
c2VyX3dpbmRvd19sb2FkX3Nlc3Npb24oQnJvd3NlcldpbmRvdyAqd2luZG93LCBjb25zdCBjaGFy
ICpzZXNzaW9uRmlsZSkKICAgICAgICAgaWYgKCF3ZWJWaWV3KSB7CiAgICAgICAgICAgICB3ZWJW
aWV3ID0gV0VCS0lUX1dFQl9WSUVXKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfVklFVywK
ICAgICAgICAgICAgICAgICAid2ViLWNvbnRleHQiLCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRl
eHQocHJldmlvdXNXZWJWaWV3KSwKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCA5OCwgMCkKKyAg
ICAgICAgICAgICAgICAibmV0d29yay1zZXNzaW9uIiwgd2Via2l0X3dlYl92aWV3X2dldF9uZXR3
b3JrX3Nlc3Npb24ocHJldmlvdXNXZWJWaWV3KSwKKyNlbmRpZgogICAgICAgICAgICAgICAgICJz
ZXR0aW5ncyIsIHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3MocHJldmlvdXNXZWJWaWV3KSwK
ICAgICAgICAgICAgICAgICAidXNlci1jb250ZW50LW1hbmFnZXIiLCB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X3VzZXJfY29udGVudF9tYW5hZ2VyKHByZXZpb3VzV2ViVmlldyksCiAgICAgICAgICAgICAg
ICAgIndlYnNpdGUtcG9saWNpZXMiLCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dlYnNpdGVfcG9saWNp
ZXMocHJldmlvdXNXZWJWaWV3KSwKQEAgLTE2MzcsNyArMTY5NywxMSBAQCBXZWJLaXRXZWJWaWV3
ICpicm93c2VyX3dpbmRvd19nZXRfb3JfY3JlYXRlX3dlYl92aWV3X2Zvcl9hdXRvbWF0aW9uKEJy
b3dzZXJXaW5kbwogICAgICAgICAiaXMtY29udHJvbGxlZC1ieS1hdXRvbWF0aW9uIiwgVFJVRSwK
ICAgICAgICAgIndlYnNpdGUtcG9saWNpZXMiLCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dlYnNpdGVf
cG9saWNpZXMod2ViVmlldyksCiAgICAgICAgIE5VTEwpKTsKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lP
TigzLCA5OCwgMCkKKyAgICBHdGtXaWRnZXQgKm5ld1dpbmRvdyA9IGJyb3dzZXJfd2luZG93X25l
dyhHVEtfV0lORE9XKHdpbmRvdyksIHdpbmRvdy0+d2ViQ29udGV4dCwgd2luZG93LT5uZXR3b3Jr
U2Vzc2lvbik7CisjZWxzZQogICAgIEd0a1dpZGdldCAqbmV3V2luZG93ID0gYnJvd3Nlcl93aW5k
b3dfbmV3KEdUS19XSU5ET1cod2luZG93KSwgd2luZG93LT53ZWJDb250ZXh0KTsKKyNlbmRpZgog
ICAgIGd0a193aW5kb3dfc2V0X2FwcGxpY2F0aW9uKEdUS19XSU5ET1cobmV3V2luZG93KSwgZ3Rr
X3dpbmRvd19nZXRfYXBwbGljYXRpb24oR1RLX1dJTkRPVyh3aW5kb3cpKSk7CiAjaWYgIUdUS19D
SEVDS19WRVJTSU9OKDMsIDk4LCAwKQogICAgIGd0a193aW5kb3dfc2V0X2ZvY3VzX29uX21hcChH
VEtfV0lORE9XKG5ld1dpbmRvdyksIEZBTFNFKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93
c2VyL2d0ay9Ccm93c2VyV2luZG93LmggYi9Ub29scy9NaW5pQnJvd3Nlci9ndGsvQnJvd3Nlcldp
bmRvdy5oCmluZGV4IDcyODMxODczZDVmZC4uYzU4ZWJjMmJlZWM3IDEwMDY0NAotLS0gYS9Ub29s
cy9NaW5pQnJvd3Nlci9ndGsvQnJvd3NlcldpbmRvdy5oCisrKyBiL1Rvb2xzL01pbmlCcm93c2Vy
L2d0ay9Ccm93c2VyV2luZG93LmgKQEAgLTUwLDcgKzUwLDEyIEBAIHR5cGVkZWYgc3RydWN0IF9C
cm93c2VyV2luZG93Q2xhc3MgICBCcm93c2VyV2luZG93Q2xhc3M7CiAKIEdUeXBlIGJyb3dzZXJf
d2luZG93X2dldF90eXBlKHZvaWQpOwogCisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgOTgsIDAp
CitHdGtXaWRnZXQqIGJyb3dzZXJfd2luZG93X25ldyhHdGtXaW5kb3cqLCBXZWJLaXRXZWJDb250
ZXh0KiwgV2ViS2l0TmV0d29ya1Nlc3Npb24qKTsKK1dlYktpdE5ldHdvcmtTZXNzaW9uKiBicm93
c2VyX3dpbmRvd19nZXRfbmV0d29ya19zZXNzaW9uKEJyb3dzZXJXaW5kb3cqKTsKKyNlbHNlCiBH
dGtXaWRnZXQqIGJyb3dzZXJfd2luZG93X25ldyhHdGtXaW5kb3cqLCBXZWJLaXRXZWJDb250ZXh0
Kik7CisjZW5kaWYKIFdlYktpdFdlYkNvbnRleHQqIGJyb3dzZXJfd2luZG93X2dldF93ZWJfY29u
dGV4dChCcm93c2VyV2luZG93Kik7CiB2b2lkIGJyb3dzZXJfd2luZG93X2FwcGVuZF92aWV3KEJy
b3dzZXJXaW5kb3cqLCBXZWJLaXRXZWJWaWV3Kik7CiB2b2lkIGJyb3dzZXJfd2luZG93X2xvYWRf
dXJpKEJyb3dzZXJXaW5kb3cqLCBjb25zdCBjaGFyICp1cmkpOwpkaWZmIC0tZ2l0IGEvVG9vbHMv
TWluaUJyb3dzZXIvZ3RrL21haW4uYyBiL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9tYWluLmMKaW5k
ZXggYTQzNjAwMWYzZTQyLi5iMDQxMWNhZGU2NDggMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93
c2VyL2d0ay9tYWluLmMKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL21haW4uYwpAQCAtOTYs
NiArOTYsOSBAQCBzdGF0aWMgV2ViS2l0V2ViVmlldyAqY3JlYXRlQnJvd3NlclRhYihCcm93c2Vy
V2luZG93ICp3aW5kb3csIFdlYktpdFNldHRpbmdzICp3ZQogewogICAgIFdlYktpdFdlYlZpZXcg
KndlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9W
SUVXLAogICAgICAgICAid2ViLWNvbnRleHQiLCBicm93c2VyX3dpbmRvd19nZXRfd2ViX2NvbnRl
eHQod2luZG93KSwKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCA5OCwgMCkKKyAgICAgICAgIm5l
dHdvcmstc2Vzc2lvbiIsIGJyb3dzZXJfd2luZG93X2dldF9uZXR3b3JrX3Nlc3Npb24od2luZG93
KSwKKyNlbmRpZgogICAgICAgICAic2V0dGluZ3MiLCB3ZWJraXRTZXR0aW5ncywKICAgICAgICAg
InVzZXItY29udGVudC1tYW5hZ2VyIiwgdXNlckNvbnRlbnRNYW5hZ2VyLAogICAgICAgICAiaXMt
Y29udHJvbGxlZC1ieS1hdXRvbWF0aW9uIiwgYXV0b21hdGlvbk1vZGUsCkBAIC0zNTQsNyArMzU3
LDcgQEAgc3RhdGljIHZvaWQgd2Vic2l0ZURhdGFDbGVhcmVkQ2FsbGJhY2soV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyICptYW5hZ2VyLCBHQXN5bmMKICAgICAgICAgd2Via2l0X3dlYl92aWV3X3Jl
bG9hZCh3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF93ZWJfdmlldyhkYXRhUmVxdWVzdC0+
cmVxdWVzdCkpOwogfQogCi1zdGF0aWMgdm9pZCBhYm91dERhdGFTY3JpcHRNZXNzYWdlUmVjZWl2
ZWRDYWxsYmFjayhXZWJLaXRVc2VyQ29udGVudE1hbmFnZXIgKnVzZXJDb250ZW50TWFuYWdlciwg
V2ViS2l0SmF2YXNjcmlwdFJlc3VsdCAqbWVzc2FnZSwgV2ViS2l0V2ViQ29udGV4dCAqd2ViQ29u
dGV4dCkKK3N0YXRpYyB2b2lkIGFib3V0RGF0YVNjcmlwdE1lc3NhZ2VSZWNlaXZlZENhbGxiYWNr
KFdlYktpdFVzZXJDb250ZW50TWFuYWdlciAqdXNlckNvbnRlbnRNYW5hZ2VyLCBXZWJLaXRKYXZh
c2NyaXB0UmVzdWx0ICptZXNzYWdlLCBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIp
CiB7CiAgICAgY2hhciAqbWVzc2FnZVN0cmluZyA9IGpzY192YWx1ZV90b19zdHJpbmcod2Via2l0
X2phdmFzY3JpcHRfcmVzdWx0X2dldF9qc192YWx1ZShtZXNzYWdlKSk7CiAgICAgY2hhciAqKnRv
a2VucyA9IGdfc3Ryc3BsaXQobWVzc2FnZVN0cmluZywgIjoiLCAzKTsKQEAgLTM3Myw3ICszNzYs
NiBAQCBzdGF0aWMgdm9pZCBhYm91dERhdGFTY3JpcHRNZXNzYWdlUmVjZWl2ZWRDYWxsYmFjayhX
ZWJLaXRVc2VyQ29udGVudE1hbmFnZXIgKnVzZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICptYW5hZ2VyID0gd2Via2l0X3dlYl9jb250ZXh0
X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcih3ZWJDb250ZXh0KTsKICAgICBndWludDY0IHR5cGVz
ID0gZ19hc2NpaV9zdHJ0b3VsbCh0b2tlbnNbMV0sIE5VTEwsIDEwKTsKICAgICBpZiAodG9rZW5D
b3VudCA9PSAyKQogICAgICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfY2xlYXIobWFu
YWdlciwgdHlwZXMsIDAsIE5VTEwsIChHQXN5bmNSZWFkeUNhbGxiYWNrKXdlYnNpdGVEYXRhQ2xl
YXJlZENhbGxiYWNrLCBkYXRhUmVxdWVzdCk7CkBAIC00NzUsMTAgKzQ3NywxNSBAQCBzdGF0aWMg
dm9pZCBnb3RXZWJzaXRlRGF0YUNhbGxiYWNrKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFu
YWdlciwgR0FzeW5jUmVzdQogICAgIGdfbGlzdF9mcmVlX2Z1bGwoZGF0YUxpc3QsIChHRGVzdHJv
eU5vdGlmeSl3ZWJraXRfd2Vic2l0ZV9kYXRhX3VucmVmKTsKIH0KIAotc3RhdGljIHZvaWQgYWJv
dXREYXRhSGFuZGxlUmVxdWVzdChXZWJLaXRVUklTY2hlbWVSZXF1ZXN0ICpyZXF1ZXN0LCBXZWJL
aXRXZWJDb250ZXh0ICp3ZWJDb250ZXh0KQorc3RhdGljIHZvaWQgYWJvdXREYXRhSGFuZGxlUmVx
dWVzdChXZWJLaXRVUklTY2hlbWVSZXF1ZXN0ICpyZXF1ZXN0KQogewogICAgIEFib3V0RGF0YVJl
cXVlc3QgKmRhdGFSZXF1ZXN0ID0gYWJvdXREYXRhUmVxdWVzdE5ldyhyZXF1ZXN0KTsKLSAgICBX
ZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0
X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYkNvbnRleHQpOworICAgIFdlYktpdFdlYlZpZXcgKndl
YlZpZXcgPSB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF93ZWJfdmlldyhyZXF1ZXN0KTsK
KyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCA5OCwgMCkKKyAgICBXZWJLaXRXZWJzaXRlRGF0YU1h
bmFnZXIgKm1hbmFnZXIgPSB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF93ZWJzaXRlX2RhdGFf
bWFuYWdlcih3ZWJraXRfd2ViX3ZpZXdfZ2V0X25ldHdvcmtfc2Vzc2lvbih3ZWJWaWV3KSk7Cisj
ZWxzZQorICAgIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlciA9IHdlYmtpdF93ZWJf
dmlld19nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIod2ViVmlldyk7CisjZW5kaWYKICAgICB3ZWJr
aXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZmV0Y2gobWFuYWdlciwgV0VCS0lUX1dFQlNJVEVfREFU
QV9BTEwsIE5VTEwsIChHQXN5bmNSZWFkeUNhbGxiYWNrKWdvdFdlYnNpdGVEYXRhQ2FsbGJhY2ss
IGRhdGFSZXF1ZXN0KTsKIH0KIApAQCAtNTMwLDE0ICs1MzcsMTkgQEAgc3RhdGljIHZvaWQgZ290
SVRQU3VtbWFyeUNhbGxiYWNrKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlciwgR0Fz
eW5jUmVzdWwKICAgICBhYm91dElUUFJlcXVlc3RGcmVlKGl0cFJlcXVlc3QpOwogfQogCi1zdGF0
aWMgdm9pZCBhYm91dElUUEhhbmRsZVJlcXVlc3QoV2ViS2l0VVJJU2NoZW1lUmVxdWVzdCAqcmVx
dWVzdCwgV2ViS2l0V2ViQ29udGV4dCAqd2ViQ29udGV4dCkKK3N0YXRpYyB2b2lkIGFib3V0SVRQ
SGFuZGxlUmVxdWVzdChXZWJLaXRVUklTY2hlbWVSZXF1ZXN0ICpyZXF1ZXN0KQogewogICAgIEFi
b3V0SVRQUmVxdWVzdCAqaXRwUmVxdWVzdCA9IGFib3V0SVRQUmVxdWVzdE5ldyhyZXF1ZXN0KTsK
LSAgICBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIgPSB3ZWJraXRfd2ViX2NvbnRl
eHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYkNvbnRleHQpOworICAgIFdlYktpdFdlYlZp
ZXcgKndlYlZpZXcgPSB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF93ZWJfdmlldyhyZXF1
ZXN0KTsKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCA5OCwgMCkKKyAgICBXZWJLaXRXZWJzaXRl
RGF0YU1hbmFnZXIgKm1hbmFnZXIgPSB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF93ZWJzaXRl
X2RhdGFfbWFuYWdlcih3ZWJraXRfd2ViX3ZpZXdfZ2V0X25ldHdvcmtfc2Vzc2lvbih3ZWJWaWV3
KSk7CisjZWxzZQorICAgIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlciA9IHdlYmtp
dF93ZWJfdmlld19nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIod2ViVmlldyk7CisjZW5kaWYKICAg
ICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2l0cF9zdW1tYXJ5KG1hbmFnZXIsIE5V
TEwsIChHQXN5bmNSZWFkeUNhbGxiYWNrKWdvdElUUFN1bW1hcnlDYWxsYmFjaywgaXRwUmVxdWVz
dCk7CiB9CiAKLXN0YXRpYyB2b2lkIGFib3V0VVJJU2NoZW1lUmVxdWVzdENhbGxiYWNrKFdlYktp
dFVSSVNjaGVtZVJlcXVlc3QgKnJlcXVlc3QsIFdlYktpdFdlYkNvbnRleHQgKndlYkNvbnRleHQp
CitzdGF0aWMgdm9pZCBhYm91dFVSSVNjaGVtZVJlcXVlc3RDYWxsYmFjayhXZWJLaXRVUklTY2hl
bWVSZXF1ZXN0ICpyZXF1ZXN0LCBncG9pbnRlciB1c2VyRGF0YSkKIHsKICAgICBHSW5wdXRTdHJl
YW0gKnN0cmVhbTsKICAgICBnc2l6ZSBzdHJlYW1MZW5ndGg7CkBAIC01NTcsOSArNTY5LDkgQEAg
c3RhdGljIHZvaWQgYWJvdXRVUklTY2hlbWVSZXF1ZXN0Q2FsbGJhY2soV2ViS2l0VVJJU2NoZW1l
UmVxdWVzdCAqcmVxdWVzdCwgV2ViS2kKICAgICAgICAgd2Via2l0X3VyaV9zY2hlbWVfcmVxdWVz
dF9maW5pc2gocmVxdWVzdCwgc3RyZWFtLCBzdHJlYW1MZW5ndGgsICJ0ZXh0L2h0bWwiKTsKICAg
ICAgICAgZ19vYmplY3RfdW5yZWYoc3RyZWFtKTsKICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAo
cGF0aCwgImRhdGEiKSkKLSAgICAgICAgYWJvdXREYXRhSGFuZGxlUmVxdWVzdChyZXF1ZXN0LCB3
ZWJDb250ZXh0KTsKKyAgICAgICAgYWJvdXREYXRhSGFuZGxlUmVxdWVzdChyZXF1ZXN0KTsKICAg
ICBlbHNlIGlmICghZ19zdHJjbXAwKHBhdGgsICJpdHAiKSkKLSAgICAgICAgYWJvdXRJVFBIYW5k
bGVSZXF1ZXN0KHJlcXVlc3QsIHdlYkNvbnRleHQpOworICAgICAgICBhYm91dElUUEhhbmRsZVJl
cXVlc3QocmVxdWVzdCk7CiAgICAgZWxzZSB7CiAgICAgICAgIGVycm9yID0gZ19lcnJvcl9uZXco
TUlOSV9CUk9XU0VSX0VSUk9SLCBNSU5JX0JST1dTRVJfRVJST1JfSU5WQUxJRF9BQk9VVF9QQVRI
LCAiSW52YWxpZCBhYm91dDolcyBwYWdlLiIsIHBhdGgpOwogICAgICAgICB3ZWJraXRfdXJpX3Nj
aGVtZV9yZXF1ZXN0X2ZpbmlzaF9lcnJvcihyZXF1ZXN0LCBlcnJvcik7CkBAIC02NjAsNiArNjcy
LDQ2IEBAIHN0YXRpYyB2b2lkIHN0YXJ0dXAoR0FwcGxpY2F0aW9uICphcHBsaWNhdGlvbikKIAog
c3RhdGljIHZvaWQgYWN0aXZhdGUoR0FwcGxpY2F0aW9uICphcHBsaWNhdGlvbiwgV2ViS2l0U2V0
dGluZ3MgKndlYmtpdFNldHRpbmdzKQogeworI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDk4LCAw
KQorICAgIFdlYktpdE5ldHdvcmtTZXNzaW9uICpuZXR3b3JrU2Vzc2lvbiA9IE5VTEw7CisgICAg
aWYgKCFhdXRvbWF0aW9uTW9kZSkgeworICAgICAgICBpZiAocHJpdmF0ZU1vZGUpCisgICAgICAg
ICAgICBuZXR3b3JrU2Vzc2lvbiA9IHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fbmV3X2VwaGVtZXJh
bCgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGNoYXIgKmRhdGFEaXJlY3RvcnkgPSBn
X2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3VzZXJfZGF0YV9kaXIoKSwgIndlYmtpdGd0ay0iIFdFQktJ
VEdUS19BUElfVkVSU0lPTiwgIk1pbmlCcm93c2VyIiwgTlVMTCk7CisgICAgICAgICAgICBjaGFy
ICpjYWNoZURpcmVjdG9yeSA9IGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfdXNlcl9jYWNoZV9kaXIo
KSwgIndlYmtpdGd0ay0iIFdFQktJVEdUS19BUElfVkVSU0lPTiwgIk1pbmlCcm93c2VyIiwgTlVM
TCk7CisgICAgICAgICAgICBuZXR3b3JrU2Vzc2lvbiA9IHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25f
bmV3KGRhdGFEaXJlY3RvcnksIGNhY2hlRGlyZWN0b3J5KTsKKyAgICAgICAgICAgIGdfZnJlZShk
YXRhRGlyZWN0b3J5KTsKKyAgICAgICAgICAgIGdfZnJlZShjYWNoZURpcmVjdG9yeSk7CisgICAg
ICAgIH0KKworICAgICAgICB3ZWJraXRfbmV0d29ya19zZXNzaW9uX3NldF9pdHBfZW5hYmxlZChu
ZXR3b3JrU2Vzc2lvbiwgZW5hYmxlSVRQKTsKKworICAgICAgICBpZiAocHJveHkpIHsKKyAgICAg
ICAgICAgIFdlYktpdE5ldHdvcmtQcm94eVNldHRpbmdzICp3ZWJraXRQcm94eVNldHRpbmdzID0g
d2Via2l0X25ldHdvcmtfcHJveHlfc2V0dGluZ3NfbmV3KHByb3h5LCBpZ25vcmVIb3N0cyk7Cisg
ICAgICAgICAgICB3ZWJraXRfbmV0d29ya19zZXNzaW9uX3NldF9uZXR3b3JrX3Byb3h5X3NldHRp
bmdzKG5ldHdvcmtTZXNzaW9uLCBXRUJLSVRfTkVUV09SS19QUk9YWV9NT0RFX0NVU1RPTSwgd2Vi
a2l0UHJveHlTZXR0aW5ncyk7CisgICAgICAgICAgICB3ZWJraXRfbmV0d29ya19wcm94eV9zZXR0
aW5nc19mcmVlKHdlYmtpdFByb3h5U2V0dGluZ3MpOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KGlnbm9yZVRMU0Vycm9ycykKKyAgICAgICAgICAgIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fc2V0
X3Rsc19lcnJvcnNfcG9saWN5KG5ldHdvcmtTZXNzaW9uLCBXRUJLSVRfVExTX0VSUk9SU19QT0xJ
Q1lfSUdOT1JFKTsKKworICAgICAgICBpZiAoY29va2llc1BvbGljeSkgeworICAgICAgICAgICAg
V2ViS2l0Q29va2llTWFuYWdlciAqY29va2llTWFuYWdlciA9IHdlYmtpdF9uZXR3b3JrX3Nlc3Np
b25fZ2V0X2Nvb2tpZV9tYW5hZ2VyKG5ldHdvcmtTZXNzaW9uKTsKKyAgICAgICAgICAgIEdFbnVt
Q2xhc3MgKmVudW1DbGFzcyA9IGdfdHlwZV9jbGFzc19yZWYoV0VCS0lUX1RZUEVfQ09PS0lFX0FD
Q0VQVF9QT0xJQ1kpOworICAgICAgICAgICAgR0VudW1WYWx1ZSAqZW51bVZhbHVlID0gZ19lbnVt
X2dldF92YWx1ZV9ieV9uaWNrKGVudW1DbGFzcywgY29va2llc1BvbGljeSk7CisgICAgICAgICAg
ICBpZiAoZW51bVZhbHVlKQorICAgICAgICAgICAgICAgIHdlYmtpdF9jb29raWVfbWFuYWdlcl9z
ZXRfYWNjZXB0X3BvbGljeShjb29raWVNYW5hZ2VyLCBlbnVtVmFsdWUtPnZhbHVlKTsKKyAgICAg
ICAgICAgIGdfdHlwZV9jbGFzc191bnJlZihlbnVtQ2xhc3MpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGNvb2tpZXNGaWxlICYmICF3ZWJraXRfbmV0d29ya19zZXNzaW9uX2lzX2VwaGVtZXJh
bChuZXR3b3JrU2Vzc2lvbikpIHsKKyAgICAgICAgICAgIFdlYktpdENvb2tpZU1hbmFnZXIgKmNv
b2tpZU1hbmFnZXIgPSB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF9jb29raWVfbWFuYWdlcihu
ZXR3b3JrU2Vzc2lvbik7CisgICAgICAgICAgICBXZWJLaXRDb29raWVQZXJzaXN0ZW50U3RvcmFn
ZSBzdG9yYWdlVHlwZSA9IGdfc3RyX2hhc19zdWZmaXgoY29va2llc0ZpbGUsICIudHh0IikgPyBX
RUJLSVRfQ09PS0lFX1BFUlNJU1RFTlRfU1RPUkFHRV9URVhUIDogV0VCS0lUX0NPT0tJRV9QRVJT
SVNURU5UX1NUT1JBR0VfU1FMSVRFOworICAgICAgICAgICAgd2Via2l0X2Nvb2tpZV9tYW5hZ2Vy
X3NldF9wZXJzaXN0ZW50X3N0b3JhZ2UoY29va2llTWFuYWdlciwgY29va2llc0ZpbGUsIHN0b3Jh
Z2VUeXBlKTsKKyAgICAgICAgfQorICAgIH0KKyNlbHNlCiAgICAgV2ViS2l0V2Vic2l0ZURhdGFN
YW5hZ2VyICptYW5hZ2VyOwogICAgIGlmIChwcml2YXRlTW9kZSB8fCBhdXRvbWF0aW9uTW9kZSkK
ICAgICAgICAgbWFuYWdlciA9IHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9uZXdfZXBoZW1l
cmFsKCk7CkBAIC02ODEsMjEgKzczMywyNiBAQCBzdGF0aWMgdm9pZCBhY3RpdmF0ZShHQXBwbGlj
YXRpb24gKmFwcGxpY2F0aW9uLCBXZWJLaXRTZXR0aW5ncyAqd2Via2l0U2V0dGluZ3MpCiAKICAg
ICBpZiAoaWdub3JlVExTRXJyb3JzKQogICAgICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFn
ZXJfc2V0X3Rsc19lcnJvcnNfcG9saWN5KG1hbmFnZXIsIFdFQktJVF9UTFNfRVJST1JTX1BPTElD
WV9JR05PUkUpOworI2VuZGlmCiAKLSAgICBXZWJLaXRXZWJDb250ZXh0ICp3ZWJDb250ZXh0ID0g
Z19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9DT05URVhULCAid2Vic2l0ZS1kYXRhLW1hbmFn
ZXIiLCBtYW5hZ2VyLAorICAgIFdlYktpdFdlYkNvbnRleHQgKndlYkNvbnRleHQgPSBnX29iamVj
dF9uZXcoV0VCS0lUX1RZUEVfV0VCX0NPTlRFWFQsCiAjaWYgIUdUS19DSEVDS19WRVJTSU9OKDMs
IDk4LCAwKQorICAgICAgICAid2Vic2l0ZS1kYXRhLW1hbmFnZXIiLCBtYW5hZ2VyLAogICAgICAg
ICAicHJvY2Vzcy1zd2FwLW9uLWNyb3NzLXNpdGUtbmF2aWdhdGlvbi1lbmFibGVkIiwgVFJVRSwK
ICAgICAgICAgInVzZS1zeXN0ZW0tYXBwZWFyYW5jZS1mb3Itc2Nyb2xsYmFycyIsIEZBTFNFLAog
I2VuZGlmCiAgICAgICAgICJ0aW1lLXpvbmUtb3ZlcnJpZGUiLCB0aW1lWm9uZSwKICAgICAgICAg
TlVMTCk7CisjaWYgIUdUS19DSEVDS19WRVJTSU9OKDMsIDk4LCAwKQogICAgIGdfb2JqZWN0X3Vu
cmVmKG1hbmFnZXIpOworI2VuZGlmCiAKICNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMywgOTgsIDAp
CiAgICAgaWYgKGVuYWJsZVNhbmRib3gpCiAgICAgICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRf
c2FuZGJveF9lbmFibGVkKHdlYkNvbnRleHQsIFRSVUUpOwogI2VuZGlmCiAKKyNpZiAhR1RLX0NI
RUNLX1ZFUlNJT04oMywgOTgsIDApCiAgICAgaWYgKGNvb2tpZXNQb2xpY3kpIHsKICAgICAgICAg
V2ViS2l0Q29va2llTWFuYWdlciAqY29va2llTWFuYWdlciA9IHdlYmtpdF93ZWJfY29udGV4dF9n
ZXRfY29va2llX21hbmFnZXIod2ViQ29udGV4dCk7CiAgICAgICAgIEdFbnVtQ2xhc3MgKmVudW1D
bGFzcyA9IGdfdHlwZV9jbGFzc19yZWYoV0VCS0lUX1RZUEVfQ09PS0lFX0FDQ0VQVF9QT0xJQ1kp
OwpAQCAtNzEwLDE1ICs3NjcsMjIgQEAgc3RhdGljIHZvaWQgYWN0aXZhdGUoR0FwcGxpY2F0aW9u
ICphcHBsaWNhdGlvbiwgV2ViS2l0U2V0dGluZ3MgKndlYmtpdFNldHRpbmdzKQogICAgICAgICBX
ZWJLaXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZSBzdG9yYWdlVHlwZSA9IGdfc3RyX2hhc19zdWZm
aXgoY29va2llc0ZpbGUsICIudHh0IikgPyBXRUJLSVRfQ09PS0lFX1BFUlNJU1RFTlRfU1RPUkFH
RV9URVhUIDogV0VCS0lUX0NPT0tJRV9QRVJTSVNURU5UX1NUT1JBR0VfU1FMSVRFOwogICAgICAg
ICB3ZWJraXRfY29va2llX21hbmFnZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZShjb29raWVNYW5h
Z2VyLCBjb29raWVzRmlsZSwgc3RvcmFnZVR5cGUpOwogICAgIH0KKyNlbmRpZgogCiAgICAgLy8g
RW5hYmxlIHRoZSBmYXZpY29uIGRhdGFiYXNlLCBieSBzcGVjaWZ5aW5nIHRoZSBkZWZhdWx0IGRp
cmVjdG9yeS4KICAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2Zhdmljb25fZGF0YWJhc2VfZGly
ZWN0b3J5KHdlYkNvbnRleHQsIE5VTEwpOwogCi0gICAgd2Via2l0X3dlYl9jb250ZXh0X3JlZ2lz
dGVyX3VyaV9zY2hlbWUod2ViQ29udGV4dCwgQlJPV1NFUl9BQk9VVF9TQ0hFTUUsIChXZWJLaXRV
UklTY2hlbWVSZXF1ZXN0Q2FsbGJhY2spYWJvdXRVUklTY2hlbWVSZXF1ZXN0Q2FsbGJhY2ssIHdl
YkNvbnRleHQsIE5VTEwpOworICAgIHdlYmtpdF93ZWJfY29udGV4dF9yZWdpc3Rlcl91cmlfc2No
ZW1lKHdlYkNvbnRleHQsIEJST1dTRVJfQUJPVVRfU0NIRU1FLCAoV2ViS2l0VVJJU2NoZW1lUmVx
dWVzdENhbGxiYWNrKWFib3V0VVJJU2NoZW1lUmVxdWVzdENhbGxiYWNrLCBOVUxMLCBOVUxMKTsK
IAogICAgIFdlYktpdFVzZXJDb250ZW50TWFuYWdlciAqdXNlckNvbnRlbnRNYW5hZ2VyID0gd2Vi
a2l0X3VzZXJfY29udGVudF9tYW5hZ2VyX25ldygpOwogICAgIHdlYmtpdF91c2VyX2NvbnRlbnRf
bWFuYWdlcl9yZWdpc3Rlcl9zY3JpcHRfbWVzc2FnZV9oYW5kbGVyKHVzZXJDb250ZW50TWFuYWdl
ciwgImFib3V0RGF0YSIpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QodXNlckNvbnRlbnRNYW5hZ2Vy
LCAic2NyaXB0LW1lc3NhZ2UtcmVjZWl2ZWQ6OmFib3V0RGF0YSIsIEdfQ0FMTEJBQ0soYWJvdXRE
YXRhU2NyaXB0TWVzc2FnZVJlY2VpdmVkQ2FsbGJhY2spLCB3ZWJDb250ZXh0KTsKKyAgICBXZWJL
aXRXZWJzaXRlRGF0YU1hbmFnZXIgKmRhdGFNYW5hZ2VyOworI2lmIEdUS19DSEVDS19WRVJTSU9O
KDMsIDk4LCAwKQorICAgIGRhdGFNYW5hZ2VyID0gbmV0d29ya1Nlc3Npb24gPyB3ZWJraXRfbmV0
d29ya19zZXNzaW9uX2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcihuZXR3b3JrU2Vzc2lvbikgOiBO
VUxMOworI2Vsc2UKKyAgICBkYXRhTWFuYWdlciA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfd2Vi
c2l0ZV9kYXRhX21hbmFnZXIod2ViQ29udGV4dCk7CisjZW5kaWYKKyAgICBnX3NpZ25hbF9jb25u
ZWN0KHVzZXJDb250ZW50TWFuYWdlciwgInNjcmlwdC1tZXNzYWdlLXJlY2VpdmVkOjphYm91dERh
dGEiLCBHX0NBTExCQUNLKGFib3V0RGF0YVNjcmlwdE1lc3NhZ2VSZWNlaXZlZENhbGxiYWNrKSwg
ZGF0YU1hbmFnZXIpOwogCiAgICAgV2ViS2l0V2Vic2l0ZVBvbGljaWVzICpkZWZhdWx0V2Vic2l0
ZVBvbGljaWVzID0gd2Via2l0X3dlYnNpdGVfcG9saWNpZXNfbmV3X3dpdGhfcG9saWNpZXMoCiAg
ICAgICAgICJhdXRvcGxheSIsIGF1dG9wbGF5UG9saWN5LApAQCAtNzUxLDcgKzgxNSwxMSBAQCBz
dGF0aWMgdm9pZCBhY3RpdmF0ZShHQXBwbGljYXRpb24gKmFwcGxpY2F0aW9uLCBXZWJLaXRTZXR0
aW5ncyAqd2Via2l0U2V0dGluZ3MpCiAgICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF9hdXRvbWF0
aW9uX2FsbG93ZWQod2ViQ29udGV4dCwgYXV0b21hdGlvbk1vZGUpOwogICAgIGdfc2lnbmFsX2Nv
bm5lY3Qod2ViQ29udGV4dCwgImF1dG9tYXRpb24tc3RhcnRlZCIsIEdfQ0FMTEJBQ0soYXV0b21h
dGlvblN0YXJ0ZWRDYWxsYmFjayksIGFwcGxpY2F0aW9uKTsKIAorI2lmIEdUS19DSEVDS19WRVJT
SU9OKDMsIDk4LCAwKQorICAgIEJyb3dzZXJXaW5kb3cgKm1haW5XaW5kb3cgPSBCUk9XU0VSX1dJ
TkRPVyhicm93c2VyX3dpbmRvd19uZXcoTlVMTCwgd2ViQ29udGV4dCwgbmV0d29ya1Nlc3Npb24p
KTsKKyNlbHNlCiAgICAgQnJvd3NlcldpbmRvdyAqbWFpbldpbmRvdyA9IEJST1dTRVJfV0lORE9X
KGJyb3dzZXJfd2luZG93X25ldyhOVUxMLCB3ZWJDb250ZXh0KSk7CisjZW5kaWYKICAgICBndGtf
YXBwbGljYXRpb25fYWRkX3dpbmRvdyhHVEtfQVBQTElDQVRJT04oYXBwbGljYXRpb24pLCBHVEtf
V0lORE9XKG1haW5XaW5kb3cpKTsKICAgICBpZiAoZGFya01vZGUpCiAgICAgICAgIGdfb2JqZWN0
X3NldChndGtfd2lkZ2V0X2dldF9zZXR0aW5ncyhHVEtfV0lER0VUKG1haW5XaW5kb3cpKSwgImd0
ay1hcHBsaWNhdGlvbi1wcmVmZXItZGFyay10aGVtZSIsIFRSVUUsIE5VTEwpOwpAQCAtNzk1LDYg
Kzg2Myw5IEBAIHN0YXRpYyB2b2lkIGFjdGl2YXRlKEdBcHBsaWNhdGlvbiAqYXBwbGljYXRpb24s
IFdlYktpdFNldHRpbmdzICp3ZWJraXRTZXR0aW5ncykKICAgICBnX29iamVjdF91bnJlZih3ZWJD
b250ZXh0KTsKICAgICBnX29iamVjdF91bnJlZih1c2VyQ29udGVudE1hbmFnZXIpOwogICAgIGdf
b2JqZWN0X3VucmVmKGRlZmF1bHRXZWJzaXRlUG9saWNpZXMpOworI2lmIEdUS19DSEVDS19WRVJT
SU9OKDMsIDk4LCAwKQorICAgIGdfY2xlYXJfb2JqZWN0KCZuZXR3b3JrU2Vzc2lvbik7CisjZW5k
aWYKIAogICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyhmaXJzdFRhYik7CiAgICAgZ3RrX3dpZGdl
dF9zaG93KEdUS19XSURHRVQobWFpbldpbmRvdykpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>464576</attachid>
            <date>2023-01-20 06:11:35 -0800</date>
            <delta_ts>2023-01-20 06:12:42 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>wk-network-session.diff</filename>
            <type>text/plain</type>
            <size>842</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vz
c2lvblNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtT
ZXNzaW9uU291cC5jcHAKaW5kZXggYWI0NTgzNWUyMDNlLi5lM2FmMGMwN2NmOWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lv
blNvdXAuY3BwCkBAIC0xLDMgKzEsNCBAQAorCiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE2IEln
YWxpYSBTLkwuCiAgKgpAQCAtNDQsNiArNDUsNyBAQCBOZXR3b3JrU2Vzc2lvblNvdXA6Ok5ldHdv
cmtTZXNzaW9uU291cChOZXR3b3JrUHJvY2VzcyYgbmV0d29ya1Byb2Nlc3MsIGNvbnN0IE5ldAog
ICAgICwgbV9uZXR3b3JrU2Vzc2lvbihtYWtlVW5pcXVlPFNvdXBOZXR3b3JrU2Vzc2lvbj4obV9z
ZXNzaW9uSUQpKQogICAgICwgbV9wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKHBh
cmFtZXRlcnMucGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCkKIHsKKyAgICBwcmlu
dGYgKCJEQkc6IFslcF0gTmV0d29ya1Nlc3Npb25Tb3VwOiAlbHUsIGVwaGVtZXJhbDogJXNcbiIs
IHRoaXMsIG1fc2Vzc2lvbklELnRvVUludDY0KCksIG1fc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkg
PyAieWVzIiA6ICJubyIpOwogICAgIGF1dG8qIHN0b3JhZ2VTZXNzaW9uID0gbmV0d29ya1N0b3Jh
Z2VTZXNzaW9uKCk7CiAgICAgQVNTRVJUKHN0b3JhZ2VTZXNzaW9uKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>464577</attachid>
            <date>2023-01-20 06:12:42 -0800</date>
            <delta_ts>2023-01-23 06:19:46 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>wk-network-session.diff</filename>
            <type>text/plain</type>
            <size>163417</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDNhODU2NmFmZWRjNC4uZjhkZmQ0MzBlMmU2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTE4Myw2ICsxODMsMTIgQEAgc2V0KFdlYktpdEdU
S19IRUFERVJfVEVNUExBVEVTCiAgICAgJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3QmFzZS5oLmluCiApCiAKK2lmIChFTkFCTEVfMjAyMl9HTElCX0FQSSkKKyAg
ICBsaXN0KEFQUEVORCBXZWJLaXRHVEtfSEVBREVSX1RFTVBMQVRFUworICAgICAgICAke1dFQktJ
VF9ESVJ9L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXROZXR3b3JrU2Vzc2lvbi5oLmluCisgICAg
KQorZW5kaWYgKCkKKwogc2V0KFdlYktpdEdUS19JTlNUQUxMRURfSEVBREVSUwogICAgICR7V2Vi
S2l0R1RLX0RFUklWRURfU09VUkNFU19ESVJ9L3dlYmtpdC9XZWJLaXRFbnVtVHlwZXMuaAogICAg
ICR7V2ViS2l0R1RLX0RFUklWRURfU09VUkNFU19ESVJ9L3dlYmtpdC9XZWJLaXRWZXJzaW9uLmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQgYi9Tb3VyY2UvV2ViS2l0
L1NvdXJjZXNHVEsudHh0CmluZGV4IDNjMmI5NzBjNDlmNS4uZTVmYmRjMTdiMWZhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291
cmNlc0dUSy50eHQKQEAgLTE1Nyw2ICsxNTcsNyBAQCBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0
TmF2aWdhdGlvbkFjdGlvbi5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0
TmF2aWdhdGlvbkNsaWVudC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0
TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ2xp
Yi9XZWJLaXROZXR3b3JrUHJveHlTZXR0aW5ncy5jcHAgQG5vLXVuaWZ5CitVSVByb2Nlc3MvQVBJ
L2dsaWIvV2ViS2l0TmV0d29ya1Nlc3Npb24uY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdE5vdGlmaWNhdGlvbi5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIv
V2ViS2l0Tm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3QuY3BwIEBuby11bmlmeQogVUlQcm9j
ZXNzL0FQSS9nbGliL1dlYktpdE5vdGlmaWNhdGlvblByb3ZpZGVyLmNwcCBAbm8tdW5pZnkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdEF1dG9jbGVh
bnVwcy5oLmluIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0QXV0b2Ns
ZWFudXBzLmguaW4KaW5kZXggNDkwYjlkZTcwNWVmLi5jODg1YjBkZjgxZmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdEF1dG9jbGVhbnVwcy5oLmlu
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdEF1dG9jbGVhbnVw
cy5oLmluCkBAIC00NSw2ICs0NSw5IEBAIEdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChX
ZWJLaXRJbnB1dE1ldGhvZENvbnRleHQsIGdfb2JqZWN0X3VucmVmKQogR19ERUZJTkVfQVVUT1BU
Ul9DTEVBTlVQX0ZVTkMgKFdlYktpdEluc3RhbGxNaXNzaW5nTWVkaWFQbHVnaW5zUGVybWlzc2lv
blJlcXVlc3QsIGdfb2JqZWN0X3VucmVmKQogI2VuZGlmCiBHX0RFRklORV9BVVRPUFRSX0NMRUFO
VVBfRlVOQyAoV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLCBnX29iamVjdF91bnJlZikK
KyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKK0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5D
IChXZWJLaXROZXR3b3JrU2Vzc2lvbiwgZ19vYmplY3RfdW5yZWYpCisjZW5kaWYKIEdfREVGSU5F
X0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXROb3RpZmljYXRpb24sIGdfb2JqZWN0X3VucmVm
KQogR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdE5vdGlmaWNhdGlvblBlcm1p
c3Npb25SZXF1ZXN0LCBnX29iamVjdF91bnJlZikKIEdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9G
VU5DIChXZWJLaXRQZXJtaXNzaW9uUmVxdWVzdCwgZ19vYmplY3RfdW5yZWYpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRBdXRvbWF0aW9uU2Vzc2lv
bi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRBdXRvbWF0aW9u
U2Vzc2lvbi5jcHAKaW5kZXggNmE3NWI5ZGQzMWM1Li4xYzA1NGY0NWI0OTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdEF1dG9tYXRpb25TZXNzaW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRBdXRvbWF0
aW9uU2Vzc2lvbi5jcHAKQEAgLTMxLDYgKzMxLDEwIEBACiAjaW5jbHVkZSA8d3RmL2dsaWIvV1RG
R1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKKyNpZiBFTkFCTEUoMjAy
Ml9HTElCX0FQSSkKKyNpbmNsdWRlICJXZWJLaXROZXR3b3JrU2Vzc2lvbi5oIgorI2VuZGlmCisK
IHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIC8qKgpAQCAtMzUwLDEzICszNTQsMjcgQEAgV2Vi
S2l0QXV0b21hdGlvblNlc3Npb24qIHdlYmtpdEF1dG9tYXRpb25TZXNzaW9uQ3JlYXRlKFdlYktp
dFdlYkNvbnRleHQqIHdlYkNvbnQKIHsKICAgICBhdXRvKiBzZXNzaW9uID0gV0VCS0lUX0FVVE9N
QVRJT05fU0VTU0lPTihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfQVVUT01BVElPTl9TRVNTSU9O
LCAiaWQiLCBzZXNzaW9uSUQsIG51bGxwdHIpKTsKICAgICBzZXNzaW9uLT5wcml2LT53ZWJDb250
ZXh0ID0gd2ViQ29udGV4dDsKLSAgICBpZiAoY2FwYWJpbGl0aWVzLmFjY2VwdEluc2VjdXJlQ2Vy
dGlmaWNhdGVzKQorI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIFdlYktpdE5ldHdvcmtT
ZXNzaW9uKiBuZXR3b3JrU2Vzc2lvbiA9IHdlYmtpdFdlYkNvbnRleHRHZXROZXR3b3JrU2Vzc2lv
bkZvckF1dG9tYXRpb24od2ViQ29udGV4dCk7CisjZW5kaWYKKworICAgIGlmIChjYXBhYmlsaXRp
ZXMuYWNjZXB0SW5zZWN1cmVDZXJ0aWZpY2F0ZXMpIHsKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQ
SSkKKyAgICAgICAgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfdGxzX2Vycm9yc19wb2xpY3ko
bmV0d29ya1Nlc3Npb24sIFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9JR05PUkUpOworI2Vsc2UK
ICAgICAgICAgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX3NldF90bHNfZXJyb3JzX3BvbGlj
eSh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYkNvbnRleHQp
LCBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfSUdOT1JFKTsKKyNlbmRpZgorICAgIH0KIAogICAg
IGZvciAoYXV0byYgY2VydGlmaWNhdGUgOiBjYXBhYmlsaXRpZXMuY2VydGlmaWNhdGVzKSB7CiAg
ICAgICAgIEdSZWZQdHI8R1Rsc0NlcnRpZmljYXRlPiB0bHNDZXJ0aWZpY2F0ZSA9IGFkb3B0R1Jl
ZihnX3Rsc19jZXJ0aWZpY2F0ZV9uZXdfZnJvbV9maWxlKGNlcnRpZmljYXRlLnNlY29uZC51dGY4
KCkuZGF0YSgpLCBudWxscHRyKSk7Ci0gICAgICAgIGlmICh0bHNDZXJ0aWZpY2F0ZSkKKyAgICAg
ICAgaWYgKHRsc0NlcnRpZmljYXRlKSB7CisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAg
ICAgICAgICB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2FsbG93X3Rsc19jZXJ0aWZpY2F0ZV9mb3Jf
aG9zdChuZXR3b3JrU2Vzc2lvbiwgdGxzQ2VydGlmaWNhdGUuZ2V0KCksIGNlcnRpZmljYXRlLmZp
cnN0LnV0ZjgoKS5kYXRhKCkpOworI2Vsc2UKICAgICAgICAgICAgIHdlYmtpdF93ZWJfY29udGV4
dF9hbGxvd190bHNfY2VydGlmaWNhdGVfZm9yX2hvc3Qod2ViQ29udGV4dCwgdGxzQ2VydGlmaWNh
dGUuZ2V0KCksIGNlcnRpZmljYXRlLmZpcnN0LnV0ZjgoKS5kYXRhKCkpOworI2VuZGlmCisgICAg
ICAgIH0KICAgICB9CiAgICAgaWYgKGNhcGFiaWxpdGllcy5wcm94eSkgewogICAgICAgICBpZiAo
Y2FwYWJpbGl0aWVzLnByb3h5LT50eXBlID09ICJwYWMiX3MpIHsKQEAgLTM2NSwxMyArMzgzLDIx
IEBAIFdlYktpdEF1dG9tYXRpb25TZXNzaW9uKiB3ZWJraXRBdXRvbWF0aW9uU2Vzc2lvbkNyZWF0
ZShXZWJLaXRXZWJDb250ZXh0KiB3ZWJDb250CiAgICAgICAgICAgICBpZiAoY2FwYWJpbGl0aWVz
LnByb3h5LT5hdXRvY29uZmlnVVJMKQogICAgICAgICAgICAgICAgIHNldHRpbmdzLmRlZmF1bHRQ
cm94eVVSTCA9IGNhcGFiaWxpdGllcy5wcm94eS0+YXV0b2NvbmZpZ1VSTC0+dXRmOCgpOwogICAg
ICAgICAgICAgaWYgKCFzZXR0aW5ncy5pc0VtcHR5KCkpIHsKKyNpZiBFTkFCTEUoMjAyMl9HTElC
X0FQSSkKKyAgICAgICAgICAgICAgICBhdXRvJiBkYXRhU3RvcmUgPSB3ZWJraXRXZWJzaXRlRGF0
YU1hbmFnZXJHZXREYXRhU3RvcmUod2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfd2Vic2l0ZV9k
YXRhX21hbmFnZXIobmV0d29ya1Nlc3Npb24pKTsKKyNlbHNlCiAgICAgICAgICAgICAgICAgYXV0
byYgZGF0YVN0b3JlID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKHdlYmtp
dF93ZWJfY29udGV4dF9nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIod2ViQ29udGV4dCkpOworI2Vu
ZGlmCiAgICAgICAgICAgICAgICAgZGF0YVN0b3JlLnNldE5ldHdvcmtQcm94eVNldHRpbmdzKFdU
Rk1vdmUoc2V0dGluZ3MpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIFdlYktpdE5ldHdvcmtQcm94eVNldHRpbmdzKiBwcm94eVNldHRpbmdzID0gbnVsbHB0
cjsKICAgICAgICAgICAgIGF1dG8gcHJveHlNb2RlID0gcGFyc2VQcm94eUNhcGFiaWxpdGllcygq
Y2FwYWJpbGl0aWVzLnByb3h5LCAmcHJveHlTZXR0aW5ncyk7CisjaWYgRU5BQkxFKDIwMjJfR0xJ
Ql9BUEkpCisgICAgICAgICAgICB3ZWJraXRfbmV0d29ya19zZXNzaW9uX3NldF9wcm94eV9zZXR0
aW5ncyhuZXR3b3JrU2Vzc2lvbiwgcHJveHlNb2RlLCBwcm94eVNldHRpbmdzKTsKKyNlbHNlCiAg
ICAgICAgICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X25ldHdvcmtfcHJveHlf
c2V0dGluZ3Mod2Via2l0X3dlYl9jb250ZXh0X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcih3ZWJD
b250ZXh0KSwgcHJveHlNb2RlLCBwcm94eVNldHRpbmdzKTsKKyNlbmRpZgogICAgICAgICAgICAg
aWYgKHByb3h5U2V0dGluZ3MpCiAgICAgICAgICAgICAgICAgd2Via2l0X25ldHdvcmtfcHJveHlf
c2V0dGluZ3NfZnJlZShwcm94eVNldHRpbmdzKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0TmF2aWdhdGlvbkNsaWVudC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXROYXZpZ2F0aW9uQ2xpZW50
LmNwcAppbmRleCA0NWQ0ZjQ2NTRjNjEuLjFjNDZiOWI5ODJmNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0TmF2aWdhdGlvbkNsaWVudC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0TmF2aWdhdGlvbkNsaWVu
dC5jcHAKQEAgLTM0LDYgKzM0LDEwIEBACiAjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAorI2lmIEVOQUJMRSgyMDIyX0dMSUJf
QVBJKQorI2luY2x1ZGUgIldlYktpdE5ldHdvcmtTZXNzaW9uUHJpdmF0ZS5oIgorI2VuZGlmCisK
IHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAt
MTU4LDE5ICsxNjIsMzEgQEAgcHJpdmF0ZToKICAgICB2b2lkIG5hdmlnYXRpb25BY3Rpb25EaWRC
ZWNvbWVEb3dubG9hZChXZWJQYWdlUHJveHkmLCBBUEk6Ok5hdmlnYXRpb25BY3Rpb24mLCBEb3du
bG9hZFByb3h5JiBkb3dubG9hZFByb3h5KSBvdmVycmlkZQogICAgIHsKICAgICAgICAgYXV0byBk
b3dubG9hZCA9IHdlYmtpdERvd25sb2FkQ3JlYXRlKGRvd25sb2FkUHJveHksIG1fd2ViVmlldyk7
CisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgICAgIHdlYmtpdE5ldHdvcmtTZXNzaW9u
RG93bmxvYWRTdGFydGVkKHdlYmtpdF93ZWJfdmlld19nZXRfbmV0d29ya19zZXNzaW9uKG1fd2Vi
VmlldyksIGRvd25sb2FkLmdldCgpKTsKKyNlbHNlCiAgICAgICAgIHdlYmtpdFdlYkNvbnRleHRE
b3dubG9hZFN0YXJ0ZWQod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KG1fd2ViVmlldyksIGRv
d25sb2FkLmdldCgpKTsKKyNlbmRpZgogICAgIH0KIAogICAgIHZvaWQgbmF2aWdhdGlvblJlc3Bv
bnNlRGlkQmVjb21lRG93bmxvYWQoV2ViUGFnZVByb3h5JiwgQVBJOjpOYXZpZ2F0aW9uUmVzcG9u
c2UmLCBEb3dubG9hZFByb3h5JiBkb3dubG9hZFByb3h5KSBvdmVycmlkZQogICAgIHsKICAgICAg
ICAgYXV0byBkb3dubG9hZCA9IHdlYmtpdERvd25sb2FkQ3JlYXRlKGRvd25sb2FkUHJveHksIG1f
d2ViVmlldyk7CisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgICAgIHdlYmtpdE5ldHdv
cmtTZXNzaW9uRG93bmxvYWRTdGFydGVkKHdlYmtpdF93ZWJfdmlld19nZXRfbmV0d29ya19zZXNz
aW9uKG1fd2ViVmlldyksIGRvd25sb2FkLmdldCgpKTsKKyNlbHNlCiAgICAgICAgIHdlYmtpdFdl
YkNvbnRleHREb3dubG9hZFN0YXJ0ZWQod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KG1fd2Vi
VmlldyksIGRvd25sb2FkLmdldCgpKTsKKyNlbmRpZgogICAgIH0KIAogICAgIHZvaWQgY29udGV4
dE1lbnVEaWRDcmVhdGVEb3dubG9hZChXZWJQYWdlUHJveHkmLCBEb3dubG9hZFByb3h5JiBkb3du
bG9hZFByb3h5KSBvdmVycmlkZQogICAgIHsKICAgICAgICAgYXV0byBkb3dubG9hZCA9IHdlYmtp
dERvd25sb2FkQ3JlYXRlKGRvd25sb2FkUHJveHksIG1fd2ViVmlldyk7CisjaWYgRU5BQkxFKDIw
MjJfR0xJQl9BUEkpCisgICAgICAgIHdlYmtpdE5ldHdvcmtTZXNzaW9uRG93bmxvYWRTdGFydGVk
KHdlYmtpdF93ZWJfdmlld19nZXRfbmV0d29ya19zZXNzaW9uKG1fd2ViVmlldyksIGRvd25sb2Fk
LmdldCgpKTsKKyNlbHNlCiAgICAgICAgIHdlYmtpdFdlYkNvbnRleHREb3dubG9hZFN0YXJ0ZWQo
d2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KG1fd2ViVmlldyksIGRvd25sb2FkLmdldCgpKTsK
KyNlbmRpZgogICAgIH0KIAogICAgIFdlYktpdFdlYlZpZXcqIG1fd2ViVmlldzsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdE5ldHdvcmtTZXNzaW9u
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdE5ldHdvcmtTZXNz
aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjYyZTRmMTU1
MmQ2YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGli
L1dlYktpdE5ldHdvcmtTZXNzaW9uLmNwcApAQCAtMCwwICsxLDY1MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMyBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0TmV0d29ya1Nlc3Npb24uaCIKKwor
I2luY2x1ZGUgIkFQSURvd25sb2FkQ2xpZW50LmgiCisjaW5jbHVkZSAiRnJhbWVJbmZvRGF0YS5o
IgorI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJLaXRD
b29raWVNYW5hZ2VyUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdERvd25sb2FkUHJpdmF0ZS5o
IgorI2luY2x1ZGUgIldlYktpdEluaXRpYWxpemUuaCIKKyNpbmNsdWRlICJXZWJLaXRNZW1vcnlQ
cmVzc3VyZVNldHRpbmdzLmgiCisjaW5jbHVkZSAiV2ViS2l0TWVtb3J5UHJlc3N1cmVTZXR0aW5n
c1ByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXROZXR3b3JrUHJveHlTZXR0aW5nc1ByaXZhdGUu
aCIKKyNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0V2Vic2l0ZURh
dGFNYW5hZ2VyUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCisjaW5jbHVk
ZSA8Z2xpYi9naTE4bi1saWIuaD4KKyNpbmNsdWRlIDxwYWwvSHlzdGVyZXNpc0FjdGl2aXR5Lmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL1dU
RkdUeXBlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKKy8qKgorICogV2ViS2l0TmV0
d29ya1Nlc3Npb246CisgKiBAc2VlX2Fsc286ICNXZWJLaXRXZWJDb250ZXh0LCAjV2ViS2l0V2Vi
c2l0ZURhdGEKKyAqCisgKiBNYW5hZ2VzIG5ldHdvcmsgY29uZmlndXJhdGlvbi4KKyAqCisgKgor
ICogU2luY2U6IDIuNDAKKyAqLworCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitlbnVtIHsK
KyAgICBQUk9QXzAsCisKKyAgICBQUk9QX0RBVEFfRElSRUNUT1JZLAorICAgIFBST1BfQ0FDSEVf
RElSRUNUT1JZLAorICAgIFBST1BfSVNfRVBIRU1FUkFMLAorCisgICAgTl9QUk9QRVJUSUVTCit9
OworCitzdGF0aWMgR1BhcmFtU3BlYyogc09ialByb3BlcnRpZXNbTl9QUk9QRVJUSUVTXSA9IHsg
bnVsbHB0ciwgfTsKKworZW51bSB7CisgICAgRE9XTkxPQURfU1RBUlRFRCwKKworICAgIExBU1Rf
U0lHTkFMCit9OworCitzdGF0aWMgZ3VpbnQgc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAsIH07
CisKK3N0cnVjdCBfV2ViS2l0TmV0d29ya1Nlc3Npb25Qcml2YXRlIHsKKyAgICBfV2ViS2l0TmV0
d29ya1Nlc3Npb25Qcml2YXRlKCkKKyAgICAgICAgOiBkbnNQcmVmZXRjaEh5c3RlcmVyaXMoW3Ro
aXNdKFBBTDo6SHlzdGVyZXNpc1N0YXRlIHN0YXRlKSB7IGlmIChzdGF0ZSA9PSBQQUw6Okh5c3Rl
cmVzaXNTdGF0ZTo6U3RvcHBlZCkgZG5zUHJlZmV0Y2hlZEhvc3RzLmNsZWFyKCk7IH0pCisgICAg
eworICAgIH0KKworICAgIEdSZWZQdHI8V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyPiB3ZWJzaXRl
RGF0YU1hbmFnZXI7CisgICAgR1JlZlB0cjxXZWJLaXRDb29raWVNYW5hZ2VyPiBjb29raWVNYW5h
Z2VyOworICAgIFdlYktpdFRMU0Vycm9yc1BvbGljeSB0bHNFcnJvcnNQb2xpY3k7CisKKyAgICBH
VW5pcXVlUHRyPGNoYXI+IGRhdGFEaXJlY3Rvcnk7CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBjYWNo
ZURpcmVjdG9yeTsKKworICAgIEhhc2hTZXQ8U3RyaW5nPiBkbnNQcmVmZXRjaGVkSG9zdHM7Cisg
ICAgUEFMOjpIeXN0ZXJlc2lzQWN0aXZpdHkgZG5zUHJlZmV0Y2hIeXN0ZXJlcmlzOworfTsKKwor
V0VCS0lUX0RFRklORV9UWVBFKFdlYktpdE5ldHdvcmtTZXNzaW9uLCB3ZWJraXRfbmV0d29ya19z
ZXNzaW9uLCBHX1RZUEVfT0JKRUNUKQorCitzdGF0aWMgdm9pZCB3ZWJraXROZXR3b3JrU2Vzc2lv
bkdldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElELCBHVmFsdWUqIHZhbHVl
LCBHUGFyYW1TcGVjKiBwYXJhbVNwZWMpCit7CisgICAgV2ViS2l0TmV0d29ya1Nlc3Npb24qIHNl
c3Npb24gPSBXRUJLSVRfTkVUV09SS19TRVNTSU9OKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHBy
b3BJRCkgeworICAgIGNhc2UgUFJPUF9JU19FUEhFTUVSQUw6CisgICAgICAgIGdfdmFsdWVfc2V0
X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25faXNfZXBoZW1lcmFsKHNlc3Np
b24pKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FS
Tl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcElELCBwYXJhbVNwZWMpOworICAgIH0K
K30KKworc3RhdGljIHZvaWQgd2Via2l0TmV0d29ya1Nlc3Npb25TZXRQcm9wZXJ0eShHT2JqZWN0
KiBvYmplY3QsIGd1aW50IHByb3BJRCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyog
cGFyYW1TcGVjKQoreworICAgIFdlYktpdE5ldHdvcmtTZXNzaW9uKiBzZXNzaW9uID0gV0VCS0lU
X05FVFdPUktfU0VTU0lPTihvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wSUQpIHsKKyAgICBj
YXNlIFBST1BfREFUQV9ESVJFQ1RPUlk6CisgICAgICAgIHNlc3Npb24tPnByaXYtPmRhdGFEaXJl
Y3RvcnkucmVzZXQoZ192YWx1ZV9kdXBfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9DQUNIRV9ESVJFQ1RPUlk6CisgICAgICAgIHNlc3Npb24tPnByaXYtPmNh
Y2hlRGlyZWN0b3J5LnJlc2V0KGdfdmFsdWVfZHVwX3N0cmluZyh2YWx1ZSkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfSVNfRVBIRU1FUkFMOgorICAgICAgICBpZiAoZ192YWx1ZV9n
ZXRfYm9vbGVhbih2YWx1ZSkpCisgICAgICAgICAgICBzZXNzaW9uLT5wcml2LT53ZWJzaXRlRGF0
YU1hbmFnZXIgPSBhZG9wdEdSZWYoV0VCS0lUX1dFQlNJVEVfREFUQV9NQU5BR0VSKGdfb2JqZWN0
X25ldyhXRUJLSVRfVFlQRV9XRUJTSVRFX0RBVEFfTUFOQUdFUiwgImlzLWVwaGVtZXJhbCIsIFRS
VUUsIG51bGxwdHIpKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdf
T0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJRCwgcGFyYW1TcGVj
KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdE5ldHdvcmtTZXNzaW9uQ29uc3RydWN0
ZWQoR09iamVjdCogb2JqZWN0KQoreworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9uZXR3b3Jr
X3Nlc3Npb25fcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0ZWQob2JqZWN0KTsKKworICAgIFdlYktp
dE5ldHdvcmtTZXNzaW9uUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9ORVRXT1JLX1NFU1NJT04ob2Jq
ZWN0KS0+cHJpdjsKKyAgICBpZiAoIXByaXYtPndlYnNpdGVEYXRhTWFuYWdlcikKKyAgICAgICAg
cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyID0gYWRvcHRHUmVmKHdlYmtpdFdlYnNpdGVEYXRhTWFu
YWdlckNyZWF0ZShXVEZNb3ZlKHByaXYtPmRhdGFEaXJlY3RvcnkpLCBXVEZNb3ZlKHByaXYtPmNh
Y2hlRGlyZWN0b3J5KSkpOworCisgICAgcHJpdi0+dGxzRXJyb3JzUG9saWN5ID0gV0VCS0lUX1RM
U19FUlJPUlNfUE9MSUNZX0ZBSUw7CisgICAgd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0
YVN0b3JlKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSkuc2V0SWdub3JlVExTRXJyb3Jz
KGZhbHNlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9jbGFzc19p
bml0KFdlYktpdE5ldHdvcmtTZXNzaW9uQ2xhc3MqIHNlc3Npb25DbGFzcykKK3sKKyAgICB3ZWJr
aXRJbml0aWFsaXplKCk7CisKKyAgICBHT2JqZWN0Q2xhc3MqIGdPYmplY3RDbGFzcyA9IEdfT0JK
RUNUX0NMQVNTKHNlc3Npb25DbGFzcyk7CisgICAgZ09iamVjdENsYXNzLT5nZXRfcHJvcGVydHkg
PSB3ZWJraXROZXR3b3JrU2Vzc2lvbkdldFByb3BlcnR5OworICAgIGdPYmplY3RDbGFzcy0+c2V0
X3Byb3BlcnR5ID0gd2Via2l0TmV0d29ya1Nlc3Npb25TZXRQcm9wZXJ0eTsKKyAgICBnT2JqZWN0
Q2xhc3MtPmNvbnN0cnVjdGVkID0gd2Via2l0TmV0d29ya1Nlc3Npb25Db25zdHJ1Y3RlZDsKKwor
ICAgIC8qKgorICAgICAqIFdlYktpdE5ldHdvcmtTZXNzaW9uOmRhdGEtZGlyZWN0b3J5OgorICAg
ICAqCisgICAgICogVGhlIGJhc2UgZGF0YSBkaXJlY3RvcnkgdXNlZCB0byBjcmVhdGUgdGhlICNX
ZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuIElmICVOVUxMLCBhIGRlZmF1bHQgbG9jYXRpb24gd2ls
bCBiZSB1c2VkLgorICAgICAqCisgICAgICogU2luY2U6IDIuNDAKKyAgICAgKi8KKyAgICBzT2Jq
UHJvcGVydGllc1tQUk9QX0RBVEFfRElSRUNUT1JZXSA9CisgICAgICAgIGdfcGFyYW1fc3BlY19z
dHJpbmcoCisgICAgICAgICAgICAiZGF0YS1kaXJlY3RvcnkiLAorICAgICAgICAgICAgbnVsbHB0
ciwgbnVsbHB0ciwKKyAgICAgICAgICAgIG51bGxwdHIsCisgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxHUGFyYW1GbGFncz4oV0VCS0lUX1BBUkFNX1dSSVRBQkxFIHwgR19QQVJBTV9DT05TVFJVQ1Rf
T05MWSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0TmV0d29ya1Nlc3Npb246Y2FjaGUtZGly
ZWN0b3J5OgorICAgICAqCisgICAgICogVGhlIGJhc2UgY2FjaGVzIGRpcmVjdG9yeSB1c2VkIHRv
IGNyZWF0ZSB0aGUgI1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci4gSWYgJU5VTEwsIGEgZGVmYXVs
dCBsb2NhdGlvbiB3aWxsIGJlIHVzZWQuCisgICAgICoKKyAgICAgKiBTaW5jZTogMi40MAorICAg
ICAqLworICAgIHNPYmpQcm9wZXJ0aWVzW1BST1BfQ0FDSEVfRElSRUNUT1JZXSA9CisgICAgICAg
IGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiY2FjaGUtZGlyZWN0b3J5IiwKKyAg
ICAgICAgICAgIG51bGxwdHIsIG51bGxwdHIsCisgICAgICAgICAgICBudWxscHRyLAorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KFdFQktJVF9QQVJBTV9XUklUQUJMRSB8IEdf
UEFSQU1fQ09OU1RSVUNUX09OTFkpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdE5ldHdvcmtT
ZXNzaW9uOmlzLWVwaGVtZXJhbDoKKyAgICAgKgorICAgICAqIFdoZXRoZXIgdG8gY3JlYXRlIGFu
IGVwaGVybWVyYWwgI1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlciBmb3IgdGhlIHNlc3Npb24uCisg
ICAgICoKKyAgICAgKiBTaW5jZTogMi40MAorICAgICAqLworICAgIHNPYmpQcm9wZXJ0aWVzW1BS
T1BfSVNfRVBIRU1FUkFMXSA9CisgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAg
ICAgICAgImlzLWVwaGVtZXJhbCIsCisgICAgICAgICAgICBudWxscHRyLCBudWxscHRyLAorICAg
ICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxHUGFyYW1GbGFncz4oV0VC
S0lUX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKTsKKworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydGllcyhnT2JqZWN0Q2xhc3MsIE5fUFJPUEVSVElF
Uywgc09ialByb3BlcnRpZXMpOworCisgICAgLyoqCisgICAgICogV2ViS2l0TmV0d29ya1Nlc3Np
b246OmRvd25sb2FkLXN0YXJ0ZWQ6CisgICAgICogQHNlc3Npb246IHRoZSAjV2ViS2l0TmV0d29y
a1Nlc3Npb24KKyAgICAgKiBAZG93bmxvYWQ6IHRoZSAjV2ViS2l0RG93bmxvYWQgYXNzb2NpYXRl
ZCB3aXRoIHRoaXMgZXZlbnQKKyAgICAgKgorICAgICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQg
d2hlbiBhIG5ldyBkb3dubG9hZCByZXF1ZXN0IGlzIG1hZGUuCisgICAgICoKKyAgICAgKiBTaW5j
ZTogMi40MAorICAgICAqLworICAgIHNpZ25hbHNbRE9XTkxPQURfU1RBUlRFRF0gPQorICAgICAg
ICBnX3NpZ25hbF9uZXcoImRvd25sb2FkLXN0YXJ0ZWQiLAorICAgICAgICAgICAgR19UWVBFX0ZS
T01fQ0xBU1MoZ09iamVjdENsYXNzKSwKKyAgICAgICAgICAgIEdfU0lHTkFMX1JVTl9MQVNULAor
ICAgICAgICAgICAgMCwgbnVsbHB0ciwgbnVsbHB0ciwKKyAgICAgICAgICAgIG51bGxwdHIsCisg
ICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwKKyAgICAgICAgICAgIFdFQktJVF9UWVBFX0RPV05M
T0FEKTsKK30KKwordm9pZCB3ZWJraXROZXR3b3JrU2Vzc2lvbkRvd25sb2FkU3RhcnRlZChXZWJL
aXROZXR3b3JrU2Vzc2lvbiogc2Vzc2lvbiwgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQorewor
ICAgIGdfc2lnbmFsX2VtaXQoc2Vzc2lvbiwgc2lnbmFsc1tET1dOTE9BRF9TVEFSVEVEXSwgMCwg
ZG93bmxvYWQpOworfQorCitzdGF0aWMgZ3BvaW50ZXIgY3JlYXRlRGVmYXVsdE5ldHdvcmtTZXNz
aW9uKGdwb2ludGVyKQoreworICAgIHN0YXRpYyBHUmVmUHRyPFdlYktpdE5ldHdvcmtTZXNzaW9u
PiBzZXNzaW9uID0gYWRvcHRHUmVmKHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fbmV3KG51bGxwdHIs
IG51bGxwdHIpKTsKKyAgICByZXR1cm4gc2Vzc2lvbi5nZXQoKTsKK30KKworLyoqCisgKiB3ZWJr
aXRfbmV0d29ya19zZXNzaW9uX2dldF9kZWZhdWx0OgorICoKKyAqIEdldCB0aGUgZGVmYXVsdCBu
ZXR3b3JrIHNlc3Npb24uCisgKiBUaGUgZGVmYXVsdCBuZXR3b3JrIHNlc3Npb24gaXMgY3JlYXRl
ZCB1c2luZyB3ZWJraXRfbmV0d29ya19zZXNzaW9uX25ldygpIGFuZCBwYXNzaW5nCisgKiAlTlVM
TCBhcyBkYXRhIGFuZCBjYWNoZSBkaXJlY3Rvcmllcy4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNm
ZXIgbm9uZSk6IGEgI1dlYktpdE5ldHdvcmtTZXNzaW9uCisgKgorICogU2luY2U6IDIuNDAKKyAq
LworV2ViS2l0TmV0d29ya1Nlc3Npb24qIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X2RlZmF1
bHQoKQoreworICAgIHN0YXRpYyBHT25jZSBvbmNlSW5pdCA9IEdfT05DRV9JTklUOworICAgIHJl
dHVybiBXRUJLSVRfTkVUV09SS19TRVNTSU9OKGdfb25jZSgmb25jZUluaXQsIGNyZWF0ZURlZmF1
bHROZXR3b3JrU2Vzc2lvbiwgbnVsbHB0cikpOworfQorCisvKioKKyAqIHdlYmtpdF9uZXR3b3Jr
X3Nlc3Npb25fbmV3OgorICogQGRhdGFfZGlyZWN0b3J5OiAobnVsbGFibGUpOiBhIGJhc2UgZGly
ZWN0b3J5IGZvciBkYXRhLCBvciAlTlVMTAorICogQGNhY2hlX2RpcmVjdHJvcnk6IChudWxsYWJs
ZSk6IGEgYmFzZSBkaXJlZmN0b3J5IGZvciBjYWNoZXMsIG9yICVOVUxMCisgKgorICogQ3JlYXRl
cyBhIG5ldyAjV2ViS2l0TmV0d29ya1Nlc3Npb24gd2l0aCBhIHBlcnNpc3RlbnQgI1dlYktpdFdl
YnNpdGVEYXRhTWFuYWdlci4KKyAqCisgKiBJdCBtdXN0IGJlIHBhc3NlZCBhcyBjb25zdHJ1Y3Rp
b24gcGFyYW1ldGVyIG9mIGEgI1dlYktpdFdlYlZpZXcuCisgKgorICogUmV0dXJuczogKHRyYW5z
ZmVyIGZ1bGwpOiB0aGUgbmV3bHkgY3JlYXRlZCAjV2ViS2l0TmV0d29ya1Nlc3Npb24KKyAqCisg
KiBTaW5jZTogMi40MAorICovCitXZWJLaXROZXR3b3JrU2Vzc2lvbiogd2Via2l0X25ldHdvcmtf
c2Vzc2lvbl9uZXcoY29uc3QgY2hhciogZGF0YURpcmVjdG9yeSwgY29uc3QgY2hhciogY2FjaGVE
aXJlY3RvcnkpCit7CisgICAgcmV0dXJuIFdFQktJVF9ORVRXT1JLX1NFU1NJT04oZ19vYmplY3Rf
bmV3KFdFQktJVF9UWVBFX05FVFdPUktfU0VTU0lPTiwgImRhdGEtZGlyZWN0b3J5IiwgZGF0YURp
cmVjdG9yeSwgImNhY2hlLWRpcmVjdG9yeSIsIGNhY2hlRGlyZWN0b3J5LCBudWxscHRyKSk7Cit9
CisKKy8qKgorICogd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9uZXdfZXBoZW1lcmFsOgorICoKKyAq
IENyZWF0ZXMgYSBuZXcgI1dlYktpdE5ldHdvcmtTZXNzaW9uIHdpdGggYW4gZXBoZW1lcmFsICNX
ZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuCisgKgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBm
dWxsKTogYSBuZXcgZXBoZW1lcmFsICNXZWJLaXROZXR3b3JrU2Vzc2lvbi4KKyAqCisgKiBTaW5j
ZTogMi40MAorICovCitXZWJLaXROZXR3b3JrU2Vzc2lvbiogd2Via2l0X25ldHdvcmtfc2Vzc2lv
bl9uZXdfZXBoZW1lcmFsKCkKK3sKKyAgICByZXR1cm4gV0VCS0lUX05FVFdPUktfU0VTU0lPTihn
X29iamVjdF9uZXcoV0VCS0lUX1RZUEVfTkVUV09SS19TRVNTSU9OLCAiaXMtZXBoZW1lcmFsIiwg
VFJVRSwgbnVsbHB0cikpOworfQorCisvKioKKyAqIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25faXNf
ZXBoZW1lcmFsOgorICogQHNlc3Npb246IGEgI1dlYktpdE5ldHdvcmtTZXNzaW9uCisgKgorICog
R2V0IHdoZXRoZXIgQHNlc3Npb24gaXMgZXBoZW1lcmFsLgorICogQSAjV2ViS2l0TmV0d29ya1Nl
c3Npb24gaXMgZXBoZW1lcmFsIHdoZW4gaXRzICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgaXMg
ZXBoZW1lcmFsLgorICogU2VlICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXI6aXMtZXBoZW1lcmFs
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgQHNlc3Npb24gaXMg
cGVobWVyYWwsIG9yICVGQUxTRSBvdGhlcndpc2UKKyAqCisgKiBTaW5jZTogMi40MAorICovCitn
Ym9vbGVhbiB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2lzX2VwaGVtZXJhbChXZWJLaXROZXR3b3Jr
U2Vzc2lvbiogc2Vzc2lvbikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNf
TkVUV09SS19TRVNTSU9OKHNlc3Npb24pLCBGQUxTRSk7CisKKyAgICByZXR1cm4gd2Via2l0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyX2lzX2VwaGVtZXJhbChzZXNzaW9uLT5wcml2LT53ZWJzaXRlRGF0
YU1hbmFnZXIuZ2V0KCkpOworfQorCisvKioKKyAqIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0
X3dlYnNpdGVfZGF0YV9tYW5hZ2VyOgorICogQHNlc3Npb246IGEgI1dlYktpdE5ldHdvcmtTZXNz
aW9uCisgKgorICogR2V0IHRoZSAjV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyIG9mIEBzZXNzaW9u
LgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogYSAjV2ViS2l0V2Vic2l0ZURhdGFN
YW5hZ2VyCisgKgorICogU2luY2U6IDIuNDAKKyAqLworV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2Vy
KiB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcihXZWJLaXRO
ZXR3b3JrU2Vzc2lvbiogc2Vzc2lvbikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfSVNfTkVUV09SS19TRVNTSU9OKHNlc3Npb24pLCBudWxscHRyKTsKKworICAgIHJldHVybiBz
ZXNzaW9uLT5wcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCk7Cit9CisKKy8qKgorICogd2Vi
a2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfY29va2llX21hbmFnZXI6CisgKiBAc2Vzc2lvbjogYSAj
V2ViS2l0TmV0d29ya1Nlc3Npb24KKyAqCisgKiBHZXQgdGhlICNXZWJLaXRDb29raWVNYW5hZ2Vy
IG9mIEBzZXNzaW9uLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogYSAjV2ViS2l0
Q29va2llTWFuYWdlcgorICoKKyAqIFNpbmNlOiAyLjQwCisgKi8KK1dlYktpdENvb2tpZU1hbmFn
ZXIqIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X2Nvb2tpZV9tYW5hZ2VyKFdlYktpdE5ldHdv
cmtTZXNzaW9uKiBzZXNzaW9uKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9J
U19ORVRXT1JLX1NFU1NJT04oc2Vzc2lvbiksIG51bGxwdHIpOworCisgICAgaWYgKCFzZXNzaW9u
LT5wcml2LT5jb29raWVNYW5hZ2VyKQorICAgICAgICBzZXNzaW9uLT5wcml2LT5jb29raWVNYW5h
Z2VyID0gYWRvcHRHUmVmKHdlYmtpdENvb2tpZU1hbmFnZXJDcmVhdGUoc2Vzc2lvbi0+cHJpdi0+
d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKSk7CisKKyAgICByZXR1cm4gc2Vzc2lvbi0+cHJpdi0+
Y29va2llTWFuYWdlci5nZXQoKTsKK30KKworLyoqCisgKiB3ZWJraXRfbmV0d29ya19zZXNzaW9u
X3NldF9pdHBfZW5hYmxlZDoKKyAqIEBzZXNzaW9uOiBhICNXZWJLaXROZXR3b3JrU2Vzc2lvbgor
ICogQGVuYWJsZWQ6IHZhbHVlIHRvIHNldAorICoKKyAqIEVuYWJsZSBvciBkaXNhYmxlIEludGVs
bGlnZW50IFRyYWNraW5nIFByZXZlbnRpb24gKElUUCkuCisgKgorICogV2hlbiBJVFAgaXMgZW5h
YmxlZCByZXNvdXJjZSBsb2FkIHN0YXRpc3RpY3MKKyAqIGFyZSBjb2xsZWN0ZWQgYW5kIHVzZWQg
dG8gZGVjaWRlIHdoZXRoZXIgdG8gYWxsb3cgb3IgYmxvY2sgdGhpcmQtcGFydHkgY29va2llcyBh
bmQgcHJldmVudCB1c2VyIHRyYWNraW5nLgorICogTm90ZSB0aGF0IHdoaWxlIElUUCBpcyBlbmFi
bGVkIHRoZSBhY2NlcHQgcG9saWN5ICVXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfTk9fVEhJ
UkRfUEFSVFkgaXMgaWdub3JlZCBhbmQKKyAqICVXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRf
QUxXQVlTIGlzIHVzZWQgaW5zdGVhZC4gU2VlIGFsc28gd2Via2l0X2Nvb2tpZV9zZXNzaW9uX3Nl
dF9hY2NlcHRfcG9saWN5KCkuCisgKgorICogU2luY2U6IDIuNDAKKyAqLwordm9pZCB3ZWJraXRf
bmV0d29ya19zZXNzaW9uX3NldF9pdHBfZW5hYmxlZChXZWJLaXROZXR3b3JrU2Vzc2lvbiogc2Vz
c2lvbiwgZ2Jvb2xlYW4gZW5hYmxlZCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9J
U19ORVRXT1JLX1NFU1NJT04oc2Vzc2lvbikpOworCisgICAgYXV0byYgd2Vic2l0ZURhdGFTdG9y
ZSA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShzZXNzaW9uLT5wcml2LT53
ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkpOworICAgIHdlYnNpdGVEYXRhU3RvcmUuc2V0VHJhY2tp
bmdQcmV2ZW50aW9uRW5hYmxlZChlbmFibGVkKTsKK30KKworLyoqCisgKiB3ZWJraXRfbmV0d29y
a19zZXNzaW9uX2dldF9pdHBfZW5hYmxlZDoKKyAqIEBzZXNzaW9uOiBhICNXZWJLaXROZXR3b3Jr
U2Vzc2lvbgorICoKKyAqIEdldCB3aGV0aGVyIEludGVsbGlnZW50IFRyYWNraW5nIFByZXZlbnRp
b24gKElUUCkgaXMgZW5hYmxlZCBvciBub3QuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgSVRQ
IGlzIGVuYWJsZWQsIG9yICVGQUxTRSBvdGhlcndpc2UuCisgKgorICogU2luY2U6IDIuNDAKKyAq
LworZ2Jvb2xlYW4gd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfaXRwX2VuYWJsZWQoV2ViS2l0
TmV0d29ya1Nlc3Npb24qIHNlc3Npb24pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0lTX05FVFdPUktfU0VTU0lPTihzZXNzaW9uKSwgRkFMU0UpOworCisgICAgYXV0byYgd2Vi
c2l0ZURhdGFTdG9yZSA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShzZXNz
aW9uLT5wcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkpOworICAgIHJldHVybiB3ZWJzaXRl
RGF0YVN0b3JlLnRyYWNraW5nUHJldmVudGlvbkVuYWJsZWQoKTsKK30KKworLyoqCisgKiB3ZWJr
aXRfbmV0d29ya19zZXNzaW9uX3NldF9wZXJzaXN0ZW50X2NyZWRlbnRpYWxfc3RvcmFnZV9lbmFi
bGVkOgorICogQHNlc3Npb246IGEgI1dlYktpdE5ldHdvcmtTZXNzaW9uCisgKiBAZW5hYmxlZDog
dmFsdWUgdG8gc2V0CisgKgorICogRW5hYmxlIG9yIGRpc2FibGUgcGVyc2lzdGVudCBjcmVkZW50
aWFsIHN0b3JhZ2UuCisgKgorICogV2hlbiBlbmFibGVkLCB3aGljaCBpcyB0aGUgZGVmYXVsdCBm
b3IKKyAqIG5vbi1lcGhlbWVyYWwgc2Vzc2lvbnMsIHRoZSBuZXR3b3JrIHByb2Nlc3Mgd2lsbCB0
cnkgdG8gcmVhZCBhbmQgd3JpdGUgSFRUUCBhdXRoZW50aWFjYXRpb24KKyAqIGNyZWRlbnRpYWxz
IGZyb20gcGVyc2lzdGVudCBzdG9yYWdlLgorICoKKyAqIFNpbmNlOiAyLjQwCisgKi8KK3ZvaWQg
d2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfcGVyc2lzdGVudF9jcmVkZW50aWFsX3N0b3JhZ2Vf
ZW5hYmxlZChXZWJLaXROZXR3b3JrU2Vzc2lvbiogc2Vzc2lvbiwgZ2Jvb2xlYW4gZW5hYmxlZCkK
K3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19ORVRXT1JLX1NFU1NJT04oc2Vzc2lv
bikpOworCisgICAgYXV0byYgd2Vic2l0ZURhdGFTdG9yZSA9IHdlYmtpdFdlYnNpdGVEYXRhTWFu
YWdlckdldERhdGFTdG9yZShzZXNzaW9uLT5wcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkp
OworICAgIHdlYnNpdGVEYXRhU3RvcmUuc2V0UGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5h
YmxlZChlbmFibGVkKTsKK30KKworLyoqCisgKiB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF9w
ZXJzaXN0ZW50X2NyZWRlbnRpYWxfc3RvcmFnZV9lbmFibGVkOgorICogQHNlc3Npb246IGEgI1dl
YktpdE5ldHdvcmtTZXNzaW9uCisgKgorICogR2V0IHdoZXRoZXIgcGVyc2lzdGVudCBjcmVkZW50
aWFsIHN0b3JhZ2UgaXMgZW5hYmxlZCBvciBub3QuCisgKgorICogU2VlIGFsc28gd2Via2l0X25l
dHdvcmtfc2Vzc2lvbl9zZXRfcGVyc2lzdGVudF9jcmVkZW50aWFsX3N0b3JhZ2VfZW5hYmxlZCgp
LgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHBlcnNpc3RlbnQgY3JlZGVudGlhbCBzdG9yYWdl
IGlzIGVuYWJsZWQsIG9yICVGQUxTRSBvdGhlcndpc2UuCisgKgorICogU2luY2U6IDIuNDAKKyAq
LworZ2Jvb2xlYW4gd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfcGVyc2lzdGVudF9jcmVkZW50
aWFsX3N0b3JhZ2VfZW5hYmxlZChXZWJLaXROZXR3b3JrU2Vzc2lvbiogc2Vzc2lvbikKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfTkVUV09SS19TRVNTSU9OKHNlc3Npb24p
LCBGQUxTRSk7CisKKyAgICBhdXRvJiB3ZWJzaXRlRGF0YVN0b3JlID0gd2Via2l0V2Vic2l0ZURh
dGFNYW5hZ2VyR2V0RGF0YVN0b3JlKHNlc3Npb24tPnByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5n
ZXQoKSk7CisgICAgcmV0dXJuIHdlYnNpdGVEYXRhU3RvcmUucGVyc2lzdGVudENyZWRlbnRpYWxT
dG9yYWdlRW5hYmxlZCgpOworfQorCisvKioKKyAqIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fc2V0
X3Rsc19lcnJvcnNfcG9saWN5OgorICogQHNlc3Npb246IGEgI1dlYktpdE5ldHdvcmtTZXNzaW9u
CisgKiBAcG9saWN5OiBhICNXZWJLaXRUTFNFcnJvcnNQb2xpY3kKKyAqCisgKiBTZXQgdGhlIFRM
UyBlcnJvcnMgcG9saWN5IG9mIEBzZXNzaW9uIGFzIEBwb2xpY3kuCisgKgorICogU2luY2U6IDIu
NDAKKyAqLwordm9pZCB3ZWJraXRfbmV0d29ya19zZXNzaW9uX3NldF90bHNfZXJyb3JzX3BvbGlj
eShXZWJLaXROZXR3b3JrU2Vzc2lvbiogc2Vzc2lvbiwgV2ViS2l0VExTRXJyb3JzUG9saWN5IHBv
bGljeSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19ORVRXT1JLX1NFU1NJT04o
c2Vzc2lvbikpOworCisgICAgaWYgKHNlc3Npb24tPnByaXYtPnRsc0Vycm9yc1BvbGljeSA9PSBw
b2xpY3kpCisgICAgICAgIHJldHVybjsKKworICAgIHNlc3Npb24tPnByaXYtPnRsc0Vycm9yc1Bv
bGljeSA9IHBvbGljeTsKKyAgICBhdXRvJiB3ZWJzaXRlRGF0YVN0b3JlID0gd2Via2l0V2Vic2l0
ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKHNlc3Npb24tPnByaXYtPndlYnNpdGVEYXRhTWFuYWdl
ci5nZXQoKSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZS5zZXRJZ25vcmVUTFNFcnJvcnMocG9saWN5
ID09IFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9JR05PUkUpOworfQorCisvKioKKyAqIHdlYmtp
dF9uZXR3b3JrX3Nlc3Npb25fZ2V0X3Rsc19lcnJvcnNfcG9saWN5OgorICogQHNlc3Npb246IGEg
I1dlYktpdE5ldHdvcmtTZXNzaW9uCisgKgorICogR2V0IHRoZSBUTFMgZXJyb3JzIHBvbGljeSBv
ZiBAc2Vzc2lvbi4KKyAqCisgKiBSZXR1cm5zOiBhICNXZWJLaXRUTFNFcnJvcnNQb2xpY3kKKyAq
CisgKiBTaW5jZTogMi40MAorICovCitXZWJLaXRUTFNFcnJvcnNQb2xpY3kgd2Via2l0X25ldHdv
cmtfc2Vzc2lvbl9nZXRfdGxzX2Vycm9yc19wb2xpY3koV2ViS2l0TmV0d29ya1Nlc3Npb24qIHNl
c3Npb24pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX05FVFdPUktfU0VT
U0lPTihzZXNzaW9uKSwgV0VCS0lUX1RMU19FUlJPUlNfUE9MSUNZX0ZBSUwpOworCisgICAgcmV0
dXJuIHNlc3Npb24tPnByaXYtPnRsc0Vycm9yc1BvbGljeTsKK30KKworLyoqCisgKiB3ZWJraXRf
bmV0d29ya19zZXNzaW9uX2FsbG93X3Rsc19jZXJ0aWZpY2F0ZV9mb3JfaG9zdDoKKyAqIEBzZXNz
aW9uOiBhICNXZWJLaXROZXR3b3JrU2Vzc2lvbgorICogQGNlcnRpZmljYXRlOiBhICNHVGxzQ2Vy
dGlmaWNhdGUKKyAqIEBob3N0OiB0aGUgaG9zdCBmb3Igd2hpY2ggYSBjZXJ0aWZpY2F0ZSBpcyB0
byBiZSBhbGxvd2VkCisgKgorICogSWdub3JlIGZ1cnRoZXIgVExTIGVycm9ycyBvbiB0aGUgQGhv
c3QgZm9yIHRoZSBjZXJ0aWZpY2F0ZSBwcmVzZW50IGluIEBpbmZvLgorICoKKyAqIFNpbmNlOiAy
LjQwCisgKi8KK3ZvaWQgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9hbGxvd190bHNfY2VydGlmaWNh
dGVfZm9yX2hvc3QoV2ViS2l0TmV0d29ya1Nlc3Npb24qIHNlc3Npb24sIEdUbHNDZXJ0aWZpY2F0
ZSogY2VydGlmaWNhdGUsIGNvbnN0IGNoYXIqIGhvc3QpCit7CisgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfSVNfTkVUV09SS19TRVNTSU9OKHNlc3Npb24pKTsKKyAgICBnX3JldHVybl9pZl9m
YWlsKEdfSVNfVExTX0NFUlRJRklDQVRFKGNlcnRpZmljYXRlKSk7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChob3N0KTsKKworICAgIGF1dG8gY2VydGlmaWNhdGVJbmZvID0gV2ViQ29yZTo6Q2VydGlm
aWNhdGVJbmZvKGNlcnRpZmljYXRlLCBzdGF0aWNfY2FzdDxHVGxzQ2VydGlmaWNhdGVGbGFncz4o
MCkpOworICAgIGF1dG8mIHdlYnNpdGVEYXRhU3RvcmUgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFn
ZXJHZXREYXRhU3RvcmUoc2Vzc2lvbi0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKTsK
KyAgICB3ZWJzaXRlRGF0YVN0b3JlLmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9z
dChjZXJ0aWZpY2F0ZUluZm8sIFN0cmluZzo6ZnJvbVVURjgoaG9zdCkpOworfQorCisvKioKKyAq
IHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fc2V0X3Byb3h5X3NldHRpbmdzOgorICogQHNlc3Npb246
IGEgI1dlYktpdE5ldHdvcmtTZXNzaW9uCisgKiBAcHJveHlfbW9kZTogYSAjV2ViS2l0TmV0d29y
a1Byb3h5TW9kZQorICogQHByb3h5X3NldHRpbmdzOiAoYWxsb3ctbm9uZSk6IGEgI1dlYktpdE5l
dHdvcmtQcm94eVNldHRpbmdzLCBvciAlTlVMTAorICoKKyAqIFNldCB0aGUgbmV0d29yayBwcm94
eSBzZXR0aW5ncyB0byBiZSB1c2VkIGJ5IGNvbm5lY3Rpb25zIHN0YXJ0ZWQgaW4gQHNlc3Npb24g
c2Vzc2lvbi4KKyAqCisgKiBCeSBkZWZhdWx0ICVXRUJLSVRfTkVUV09SS19QUk9YWV9NT0RFX0RF
RkFVTFQgaXMgdXNlZCwgd2hpY2ggbWVhbnMgdGhhdCB0aGUKKyAqIHN5c3RlbSBzZXR0aW5ncyB3
aWxsIGJlIHVzZWQgKGdfcHJveHlfcmVzb2x2ZXJfZ2V0X2RlZmF1bHQoKSkuCisgKiBJZiB5b3Ug
d2FudCB0byBvdmVycmlkZSB0aGUgc3lzdGVtIGRlZmF1bHQgc2V0dGluZ3MsIHlvdSBjYW4gZWl0
aGVyIHVzZQorICogJVdFQktJVF9ORVRXT1JLX1BST1hZX01PREVfTk9fUFJPWFkgdG8gbWFrZSBz
dXJlIG5vIHByb3hpZXMgYXJlIHVzZWQgYXQgYWxsLAorICogb3IgJVdFQktJVF9ORVRXT1JLX1BS
T1hZX01PREVfQ1VTVE9NIHRvIHByb3ZpZGUgeW91ciBvd24gcHJveHkgc2V0dGluZ3MuCisgKiBX
aGVuIEBwcm94eV9tb2RlIGlzICVXRUJLSVRfTkVUV09SS19QUk9YWV9NT0RFX0NVU1RPTSBAcHJv
eHlfc2V0dGluZ3MgbXVzdCBiZQorICogYSB2YWxpZCAjV2ViS2l0TmV0d29ya1Byb3h5U2V0dGlu
Z3M7IG90aGVyd2lzZSwgQHByb3h5X3NldHRpbmdzIG11c3QgYmUgJU5VTEwuCisgKgorICogU2lu
Y2U6IDIuNDAKKyAqLwordm9pZCB3ZWJraXRfbmV0d29ya19zZXNzaW9uX3NldF9wcm94eV9zZXR0
aW5ncyhXZWJLaXROZXR3b3JrU2Vzc2lvbiogc2Vzc2lvbiwgV2ViS2l0TmV0d29ya1Byb3h5TW9k
ZSBwcm94eU1vZGUsIFdlYktpdE5ldHdvcmtQcm94eVNldHRpbmdzKiBwcm94eVNldHRpbmdzKQor
eworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX05FVFdPUktfU0VTU0lPTihzZXNzaW9u
KSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCgocHJveHlNb2RlICE9IFdFQktJVF9ORVRXT1JLX1BS
T1hZX01PREVfQ1VTVE9NICYmICFwcm94eVNldHRpbmdzKSB8fCAocHJveHlNb2RlID09IFdFQktJ
VF9ORVRXT1JLX1BST1hZX01PREVfQ1VTVE9NICYmIHByb3h5U2V0dGluZ3MpKTsKKworICAgIGF1
dG8mIHdlYnNpdGVEYXRhU3RvcmUgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRhU3Rv
cmUoc2Vzc2lvbi0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKTsKKyAgICBzd2l0Y2gg
KHByb3h5TW9kZSkgeworICAgIGNhc2UgV0VCS0lUX05FVFdPUktfUFJPWFlfTU9ERV9ERUZBVUxU
OgorICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlLnNldE5ldHdvcmtQcm94eVNldHRpbmdzKHsgfSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX05FVFdPUktfUFJPWFlfTU9ERV9OT19Q
Uk9YWToKKyAgICAgICAgd2Vic2l0ZURhdGFTdG9yZS5zZXROZXR3b3JrUHJveHlTZXR0aW5ncyhX
ZWJDb3JlOjpTb3VwTmV0d29ya1Byb3h5U2V0dGluZ3MoV2ViQ29yZTo6U291cE5ldHdvcmtQcm94
eVNldHRpbmdzOjpNb2RlOjpOb1Byb3h5KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VC
S0lUX05FVFdPUktfUFJPWFlfTU9ERV9DVVNUT006CisgICAgICAgIGF1dG8gc2V0dGluZ3MgPSB3
ZWJraXROZXR3b3JrUHJveHlTZXR0aW5nc0dldE5ldHdvcmtQcm94eVNldHRpbmdzKHByb3h5U2V0
dGluZ3MpOworICAgICAgICBpZiAoc2V0dGluZ3MuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBn
X3dhcm5pbmcoIkludmFsaWQgYXR0ZW1wdCB0byBzZXQgY3VzdG9tIG5ldHdvcmsgcHJveHkgc2V0
dGluZ3Mgd2l0aCBhbiBlbXB0eSBXZWJLaXROZXR3b3JrUHJveHlTZXR0aW5ncy4gVXNlICIKKyAg
ICAgICAgICAgICAgICAiV0VCS0lUX05FVFdPUktfUFJPWFlfTU9ERV9OT19QUk9YWSB0byBub3Qg
dXNlIGFueSBwcm94eSBvciBXRUJLSVRfTkVUV09SS19QUk9YWV9NT0RFX0RFRkFVTFQgdG8gdXNl
IHRoZSBkZWZhdWx0IHN5c3RlbSBzZXR0aW5ncyIpOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIHdlYnNpdGVEYXRhU3RvcmUuc2V0TmV0d29ya1Byb3h5U2V0dGluZ3MoV1RGTW92ZShzZXR0
aW5ncykpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKKy8qKgorICogd2Via2l0X25ldHdv
cmtfc2Vzc2lvbl9zZXRfbWVtb3J5X3ByZXNzdXJlX3NldHRpbmdzOgorICogQHNldHRpbmdzOiBh
IFdlYktpdE1lbW9yeVByZXNzdXJlU2V0dGluZ3MuCisgKgorICogU2V0cyBAc2V0dGluZ3MgYXMg
dGhlICNXZWJLaXRNZW1vcnlQcmVzc3VyZVNldHRpbmdzLgorICoKKyAqIFNldHMgQHNldHRpbmdz
IGFzIHRoZSAjV2ViS2l0TWVtb3J5UHJlc3N1cmVTZXR0aW5ncyB0byBiZSB1c2VkIGJ5IHRoZSBu
ZXR3b3JrCisgKiBwcm9jZXNzIGNyZWF0ZWQgYnkgYW55IGluc3RhbmNlIG9mICNXZWJLaXROZXR3
b3JrU2Vzc2lvbiBhZnRlciB0aGlzIGZ1bmN0aW9uCisgKiBpcyBjYWxsZWQuCisgKgorICogQmUg
c3VyZSB0byBjYWxsIHRoaXMgZnVuY3Rpb24gYmVmb3JlIGNyZWF0aW5nIGFueSAjV2ViS2l0TmV0
d29ya1Nlc3Npb24uCisgKgorICogVGhlIHBlcmlvZGljIGNoZWNrIGZvciB1c2VkIG1lbW9yeSBp
cyBkaXNhYmxlZCBieSBkZWZhdWx0IG9uIG5ldHdvcmsgcHJvY2Vzc2VzLiBUaGlzIHdpbGwKKyAq
IGJlIGVuYWJsZWQgb25seSBpZiBjdXN0b20gc2V0dGluZ3MgaGF2ZSBiZWVuIHNldCB1c2luZyB0
aGlzIGZ1bmN0aW9uLiBBZnRlciB0aGF0LCBpbiBvcmRlcgorICogdG8gcmVtb3ZlIHRoZSBjdXN0
b20gc2V0dGluZ3MgYW5kIGRpc2FibGUgdGhlIHBlcmlvZGljIGNoZWNrLCB0aGlzIGZ1bmN0aW9u
IG11c3QgYmUgY2FsbGVkCisgKiBwYXNzaW5nICVOVUxMIGFzIHRoZSB2YWx1ZSBvZiBAc2V0dGlu
Z3MuCisgKgorICogU2luY2U6IDIuNDAKKyAqLwordm9pZCB3ZWJraXRfbmV0d29ya19zZXNzaW9u
X3NldF9tZW1vcnlfcHJlc3N1cmVfc2V0dGluZ3MoV2ViS2l0TWVtb3J5UHJlc3N1cmVTZXR0aW5n
cyogc2V0dGluZ3MpCit7CisgICAgc3RkOjpvcHRpb25hbDxNZW1vcnlQcmVzc3VyZUhhbmRsZXI6
OkNvbmZpZ3VyYXRpb24+IGNvbmZpZyA9IHNldHRpbmdzID8gc3RkOjptYWtlX29wdGlvbmFsKHdl
YmtpdE1lbW9yeVByZXNzdXJlU2V0dGluZ3NHZXRNZW1vcnlQcmVzc3VyZUhhbmRsZXJDb25maWd1
cmF0aW9uKHNldHRpbmdzKSkgOiBzdGQ6Om51bGxvcHQ7CisgICAgV2ViUHJvY2Vzc1Bvb2w6OnNl
dE5ldHdvcmtQcm9jZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyQ29uZmlndXJhdGlvbihjb25maWcp
OworfQorCisvKioKKyAqIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X2l0cF9zdW1tYXJ5Ogor
ICogQHNlc3Npb246IGEgI1dlYktpdE5ldHdvcmtTZXNzaW9uCisgKiBAY2FuY2VsbGFibGU6IChh
bGxvdy1ub25lKTogYSAjR0NhbmNlbGxhYmxlIG9yICVOVUxMIHRvIGlnbm9yZQorICogQGNhbGxi
YWNrOiAoc2NvcGUgYXN5bmMpOiBhICNHQXN5bmNSZWFkeUNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0
aGUgcmVxdWVzdCBpcyBzYXRpc2ZpZWQKKyAqIEB1c2VyX2RhdGE6IChjbG9zdXJlKTogdGhlIGRh
dGEgdG8gcGFzcyB0byBjYWxsYmFjayBmdW5jdGlvbgorICoKKyAqIEFzeW5jaHJvbm91c2x5IGdl
dCB0aGUgbGlzdCBvZiAjV2ViS2l0SVRQVGhpcmRQYXJ0eSBzZWVuIGZvciBAc2Vzc2lvbi4KKyAq
CisgKiBFdmVyeSAjV2ViS2l0SVRQVGhpcmRQYXJ0eQorICogY29udGFpbnMgdGhlIGxpc3Qgb2Yg
I1dlYktpdElUUEZpcnN0UGFydHkgdW5kZXIgd2hpY2ggaXQgaGFzIGJlZW4gc2Vlbi4KKyAqCisg
KiBXaGVuIHRoZSBvcGVyYXRpb24gaXMgZmluaXNoZWQsIEBjYWxsYmFjayB3aWxsIGJlIGNhbGxl
ZC4gWW91IGNhbiB0aGVuIGNhbGwKKyAqIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X2l0cF9z
dW1tYXJ5X2ZpbmlzaCgpIHRvIGdldCB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24uCisgKgor
ICogU2luY2U6IDIuNDAKKyAqLwordm9pZCB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF9pdHBf
c3VtbWFyeShXZWJLaXROZXR3b3JrU2Vzc2lvbiogc2Vzc2lvbiwgR0NhbmNlbGxhYmxlKiBjYW5j
ZWxsYWJsZSwgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlckRhdGEp
Cit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfTkVUV09SS19TRVNTSU9OKHNlc3Np
b24pKTsKKworICAgIGF1dG8mIHdlYnNpdGVEYXRhU3RvcmUgPSB3ZWJraXRXZWJzaXRlRGF0YU1h
bmFnZXJHZXREYXRhU3RvcmUoc2Vzc2lvbi0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgp
KTsKKyAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcoc2Vzc2lv
biwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOworICAgIHdlYnNpdGVEYXRhU3Rv
cmUuZ2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KFt0YXNrID0gV1RGTW92ZSh0
YXNrKV0oVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6VGhpcmRQYXJ0eURh
dGE+JiYgdGhpcmRQYXJ0eUxpc3QpIHsKKyAgICAgICAgR0xpc3QqIHJlc3VsdCA9IG51bGxwdHI7
CisgICAgICAgIHdoaWxlICghdGhpcmRQYXJ0eUxpc3QuaXNFbXB0eSgpKQorICAgICAgICAgICAg
cmVzdWx0ID0gZ19saXN0X3ByZXBlbmQocmVzdWx0LCB3ZWJraXRJVFBUaGlyZFBhcnR5Q3JlYXRl
KHRoaXJkUGFydHlMaXN0LnRha2VMYXN0KCkpKTsKKyAgICAgICAgZ190YXNrX3JldHVybl9wb2lu
dGVyKHRhc2suZ2V0KCksIHJlc3VsdCwgW10oZ3BvaW50ZXIgZGF0YSkgeworICAgICAgICAgICAg
Z19saXN0X2ZyZWVfZnVsbChzdGF0aWNfY2FzdDxHTGlzdCo+KGRhdGEpLCByZWludGVycHJldF9j
YXN0PEdEZXN0cm95Tm90aWZ5Pih3ZWJraXRfaXRwX3RoaXJkX3BhcnR5X3VucmVmKSk7CisgICAg
ICAgIH0pOworICAgIH0pOworfQorCisvKioKKyAqIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0
X2l0cF9zdW1tYXJ5X2ZpbmlzaDoKKyAqIEBzZXNzaW9uOiBhICNXZWJLaXROZXR3b3JrU2Vzc2lv
bgorICogQHJlc3VsdDogYSAjR0FzeW5jUmVzdWx0CisgKiBAZXJyb3I6IHJldHVybiBsb2NhdGlv
biBmb3IgZXJyb3Igb3IgJU5VTEwgdG8gaWdub3JlCisgKgorICogRmluaXNoIGFuIGFzeW5jaHJv
bm91cyBvcGVyYXRpb24gc3RhcnRlZCB3aXRoIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X2l0
cF9zdW1tYXJ5KCkuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChlbGVtZW50LXR5
cGUgV2ViS2l0SVRQVGhpcmRQYXJ0eSk6IGEgI0dMaXN0IG9mICNXZWJLaXRJVFBUaGlyZFBhcnR5
LgorICogICAgWW91IG11c3QgZnJlZSB0aGUgI0dMaXN0IHdpdGggZ19saXN0X2ZyZWUoKSBhbmQg
dW5yZWYgdGhlICNXZWJLaXRJVFBUaGlyZFBhcnR5PCEtLSAtLT5zIHdpdGgKKyAqICAgIHdlYmtp
dF9pdHBfdGhpcmRfcGFydHlfdW5yZWYoKSB3aGVuIHlvdSdyZSBkb25lIHdpdGggdGhlbS4KKyAq
CisgKiBTaW5jZTogMi40MAorICovCitHTGlzdCogd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRf
aXRwX3N1bW1hcnlfZmluaXNoKFdlYktpdE5ldHdvcmtTZXNzaW9uKiBzZXNzaW9uLCBHQXN5bmNS
ZXN1bHQqIHJlc3VsdCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0lTX05FVFdPUktfU0VTU0lPTihzZXNzaW9uKSwgbnVsbHB0cik7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoZ190YXNrX2lzX3ZhbGlkKHJlc3VsdCwgc2Vzc2lvbiksIG51bGxw
dHIpOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaXN0Kj4oZ190YXNrX3Byb3BhZ2F0ZV9w
b2ludGVyKEdfVEFTSyhyZXN1bHQpLCBlcnJvcikpOworfQorCisvKioKKyAqIHdlYmtpdF9uZXR3
b3JrX3Nlc3Npb25fcHJlZmV0Y2hfZG5zOgorICogQHNlc3Npb246IGEgI1dlYktpdE5ldHdvcmtT
ZXNzaW9uCisgKiBAaG9zdG5hbWU6IGEgaG9zdG5hbWUgdG8gYmUgcmVzb2x2ZWQKKyAqCisgKiBS
ZXNvbHZlIHRoZSBkb21haW4gbmFtZSBvZiB0aGUgZ2l2ZW4gQGhvc3RuYW1lIGluIGFkdmFuY2Us
IHNvIHRoYXQgaWYgYSBVUkkKKyAqIG9mIEBob3N0bmFtZSBpcyByZXF1ZXN0ZWQgdGhlIGxvYWQg
d2lsbCBiZSBwZXJmb3JtZWQgbW9yZSBxdWlja2x5LgorICoKKyAqIFNpbmNlOiAyLjQwCisgKi8K
K3ZvaWQgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9wcmVmZXRjaF9kbnMoV2ViS2l0TmV0d29ya1Nl
c3Npb24qIHNlc3Npb24sIGNvbnN0IGNoYXIqIGhvc3RuYW1lKQoreworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0lTX05FVFdPUktfU0VTU0lPTihzZXNzaW9uKSk7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChob3N0bmFtZSk7CisKKyAgICBpZiAoc2Vzc2lvbi0+cHJpdi0+ZG5zUHJlZmV0Y2hl
ZEhvc3RzLmFkZChTdHJpbmc6OmZyb21VVEY4KGhvc3RuYW1lKSkuaXNOZXdFbnRyeSkgeworICAg
ICAgICBhdXRvJiB3ZWJzaXRlRGF0YVN0b3JlID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0
RGF0YVN0b3JlKHNlc3Npb24tPnByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSk7CisgICAg
ICAgIHdlYnNpdGVEYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6UHJlZmV0Y2hETlMoU3RyaW5nOjpmcm9tVVRGOChob3N0bmFtZSkpLCAwKTsK
KyAgICB9CisgICAgc2Vzc2lvbi0+cHJpdi0+ZG5zUHJlZmV0Y2hIeXN0ZXJlcmlzLmltcHVsc2Uo
KTsKK30KKworLyoqCisgKiB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2Rvd25sb2FkX3VyaToKKyAq
IEBzZXNzaW9uOiBhICNXZWJLaXROZXR3b3JrU2Vzc2lvbgorICogQHVyaTogdGhlIFVSSSB0byBk
b3dubG9hZAorICoKKyAqIFJlcXVlc3RzIGRvd25sb2FkaW5nIG9mIHRoZSBzcGVjaWZpZWQgVVJJ
IHN0cmluZy4KKyAqCisgKiBUaGUgZG93bmxvYWQgb3BlcmF0aW9uIHdpbGwgbm90IGJlIGFzc29j
aWF0ZWQgdG8gYW55ICNXZWJLaXRXZWJWaWV3LAorICogaWYgeW91IGFyZSBpbnRlcmVzdGVkIGlu
IHN0YXJ0aW5nIGEgZG93bmxvYWQgZnJvbSBhIHBhcnRpY3VsYXIgI1dlYktpdFdlYlZpZXcgdXNl
CisgKiB3ZWJraXRfd2ViX3ZpZXdfZG93bmxvYWRfdXJpKCkgaW5zdGVhZC4KKyAqCisgKiBSZXR1
cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNXZWJLaXREb3dubG9hZCByZXByZXNlbnRpbmcK
KyAqICAgIHRoZSBkb3dubG9hZCBvcGVyYXRpb24uCisgKgorICogU2luY2U6IDIuNDAKKyAqLwor
V2ViS2l0RG93bmxvYWQqIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZG93bmxvYWRfdXJpKFdlYktp
dE5ldHdvcmtTZXNzaW9uKiBzZXNzaW9uLCBjb25zdCBjaGFyKiB1cmkpCit7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX05FVFdPUktfU0VTU0lPTihzZXNzaW9uKSwgbnVsbHB0
cik7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwodXJpLCBudWxscHRyKTsKKworICAgIFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0KFN0cmluZzo6ZnJvbVVURjgodXJpKSk7CisgICAg
YXV0byYgd2Vic2l0ZURhdGFTdG9yZSA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFT
dG9yZShzZXNzaW9uLT5wcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkpOworICAgIGF1dG8m
IGRvd25sb2FkUHJveHkgPSB3ZWJzaXRlRGF0YVN0b3JlLmNyZWF0ZURvd25sb2FkUHJveHkoYWRv
cHRSZWYoKm5ldyBBUEk6OkRvd25sb2FkQ2xpZW50KSwgcmVxdWVzdCwgbnVsbHB0ciwgeyB9KTsK
KyAgICBhdXRvIGRvd25sb2FkID0gd2Via2l0RG93bmxvYWRDcmVhdGUoZG93bmxvYWRQcm94eSk7
CisgICAgZG93bmxvYWRQcm94eS5zZXREaWRTdGFydENhbGxiYWNrKFtzZXNzaW9uID0gR1JlZlB0
cjxXZWJLaXROZXR3b3JrU2Vzc2lvbj4geyBzZXNzaW9uIH0sIGRvd25sb2FkID0gZG93bmxvYWQu
Z2V0KCldKGF1dG8qIGRvd25sb2FkUHJveHkpIHsKKyAgICAgICAgaWYgKCFkb3dubG9hZFByb3h5
KQorICAgICAgICAgICAgcmV0dXJuOworCisJd2Via2l0RG93bmxvYWRTdGFydGVkKGRvd25sb2Fk
KTsKKyAgICAgICAgd2Via2l0TmV0d29ya1Nlc3Npb25Eb3dubG9hZFN0YXJ0ZWQoc2Vzc2lvbi5n
ZXQoKSwgZG93bmxvYWQpOworICAgIH0pOworICAgIHdlYnNpdGVEYXRhU3RvcmUuZG93bmxvYWQo
ZG93bmxvYWRQcm94eSwgeyB9KTsKKyAgICByZXR1cm4gZG93bmxvYWQubGVha1JlZigpOworfQor
CisjZW5kaWYgLy8gRU5BQkxFKDIwMjJfR0xJQl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXROZXR3b3JrU2Vzc2lvbi5oLmluIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0TmV0d29ya1Nlc3Npb24uaC5pbgpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjgyMmMzOTRjYmRiNAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdE5ldHdv
cmtTZXNzaW9uLmguaW4KQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjMgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwx
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKK0BBUElfU0lOR0xFX0hFQURFUl9DSEVDS0AKKworI2lmbmRlZiBXZWJL
aXROZXR3b3JrU2Vzc2lvbl9oCisjZGVmaW5lIFdlYktpdE5ldHdvcmtTZXNzaW9uX2gKKworI2lu
Y2x1ZGUgPGdpby9naW8uaD4KKyNpbmNsdWRlIDxAQVBJX0lOQ0xVREVfUFJFRklYQC9XZWJLaXRD
b29raWVNYW5hZ2VyLmg+CisjaW5jbHVkZSA8QEFQSV9JTkNMVURFX1BSRUZJWEAvV2ViS2l0RGVm
aW5lcy5oPgorI2luY2x1ZGUgPEBBUElfSU5DTFVERV9QUkVGSVhAL1dlYktpdERvd25sb2FkLmg+
CisjaW5jbHVkZSA8QEFQSV9JTkNMVURFX1BSRUZJWEAvV2ViS2l0TWVtb3J5UHJlc3N1cmVTZXR0
aW5ncy5oPgorI2luY2x1ZGUgPEBBUElfSU5DTFVERV9QUkVGSVhAL1dlYktpdE5ldHdvcmtQcm94
eVNldHRpbmdzLmg+CisjaW5jbHVkZSA8QEFQSV9JTkNMVURFX1BSRUZJWEAvV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9O
RVRXT1JLX1NFU1NJT04gICAgICAgICAgICAod2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfdHlw
ZSgpKQorI2RlZmluZSBXRUJLSVRfTkVUV09SS19TRVNTSU9OKG9iaikgICAgICAgICAgICAoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX05FVFdPUktfU0VTU0lP
TiwgV2ViS2l0TmV0d29ya1Nlc3Npb24pKQorI2RlZmluZSBXRUJLSVRfSVNfTkVUV09SS19TRVNT
SU9OKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJ
VF9UWVBFX05FVFdPUktfU0VTU0lPTikpCisjZGVmaW5lIFdFQktJVF9ORVRXT1JLX1NFU1NJT05f
Q0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lU
X1RZUEVfTkVUV09SS19TRVNTSU9OLCBXZWJLaXROZXR3b3JrU2Vzc2lvbkNsYXNzKSkKKyNkZWZp
bmUgV0VCS0lUX0lTX05FVFdPUktfU0VTU0lPTl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19D
TEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9ORVRXT1JLX1NFU1NJT04pKQorI2RlZmlu
ZSBXRUJLSVRfTkVUV09SS19TRVNTSU9OX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNF
X0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX05FVFdPUktfU0VTU0lPTiwgV2ViS2l0TmV0
d29ya1Nlc3Npb25DbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXROZXR3b3JrU2Vzc2lv
biAgICAgICAgV2ViS2l0TmV0d29ya1Nlc3Npb247Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0TmV0
d29ya1Nlc3Npb25DbGFzcyAgIFdlYktpdE5ldHdvcmtTZXNzaW9uQ2xhc3M7Cit0eXBlZGVmIHN0
cnVjdCBfV2ViS2l0TmV0d29ya1Nlc3Npb25Qcml2YXRlIFdlYktpdE5ldHdvcmtTZXNzaW9uUHJp
dmF0ZTsKKworc3RydWN0IF9XZWJLaXROZXR3b3JrU2Vzc2lvbiB7CisgICAgR09iamVjdCBwYXJl
bnQ7CisKKyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBXZWJLaXROZXR3b3JrU2Vzc2lvblByaXZh
dGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdE5ldHdvcmtTZXNzaW9uQ2xhc3MgeworICAg
IEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICB2
b2lkICgqX3dlYmtpdF9yZXNlcnZlZDApICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNl
cnZlZDEpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDIpICh2b2lkKTsKKyAg
ICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDMpICh2b2lkKTsKK307CisKK1dFQktJVF9BUEkgR1R5
cGUKK3dlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X3R5cGUgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJIFdlYktpdE5ldHdvcmtTZXNzaW9uICoK
K3dlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X2RlZmF1bHQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJIFdlYktpdE5ldHdvcmtTZXNzaW9uICoKK3dl
YmtpdF9uZXR3b3JrX3Nlc3Npb25fbmV3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGNvbnN0IGNoYXIgICAgICAgICAgICAgICAgICAgKmRhdGFfZGlyZWN0b3J5LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAgICAgICAgICAgICAgICAgICAqY2FjaGVfZGlyZWN0cm9yeSk7CitX
RUJLSVRfQVBJIFdlYktpdE5ldHdvcmtTZXNzaW9uICoKK3dlYmtpdF9uZXR3b3JrX3Nlc3Npb25f
bmV3X2VwaGVtZXJhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOworCitXRUJL
SVRfQVBJIGdib29sZWFuCit3ZWJraXRfbmV0d29ya19zZXNzaW9uX2lzX2VwaGVtZXJhbCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXROZXR3b3JrU2Vzc2lvbiAgICAgICAgICpz
ZXNzaW9uKTsKKworV0VCS0lUX0FQSSBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKgord2Via2l0
X25ldHdvcmtfc2Vzc2lvbl9nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIgICAgICAgICAgICAgICAg
ICAoV2ViS2l0TmV0d29ya1Nlc3Npb24gICAgICAgICAqc2Vzc2lvbik7CisKK1dFQktJVF9BUEkg
V2ViS2l0Q29va2llTWFuYWdlciAqCit3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF9jb29raWVf
bWFuYWdlciAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXROZXR3b3JrU2Vzc2lvbiAgICAg
ICAgICpzZXNzaW9uKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfbmV0d29ya19zZXNzaW9u
X3NldF9pdHBfZW5hYmxlZCAgICAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXROZXR3b3Jr
U2Vzc2lvbiAgICAgICAgICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAgICAgICAgICAg
ICAgICAgICAgZW5hYmxlZCk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9uZXR3b3Jr
X3Nlc3Npb25fZ2V0X2l0cF9lbmFibGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgKFdlYktp
dE5ldHdvcmtTZXNzaW9uICAgICAgICAgKnNlc3Npb24pOworCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9uZXR3b3JrX3Nlc3Npb25fc2V0X3BlcnNpc3RlbnRfY3JlZGVudGlhbF9zdG9yYWdlX2Vu
YWJsZWQgKFdlYktpdE5ldHdvcmtTZXNzaW9uICAgICAgICAgKnNlc3Npb24sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
Ym9vbGVhbiAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkKTsKKworV0VCS0lUX0FQSSBnYm9v
bGVhbgord2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfcGVyc2lzdGVudF9jcmVkZW50aWFsX3N0
b3JhZ2VfZW5hYmxlZCAoV2ViS2l0TmV0d29ya1Nlc3Npb24gICAgICAgICAqc2Vzc2lvbik7CisK
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfdGxzX2Vycm9yc19w
b2xpY3kgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0TmV0d29ya1Nlc3Npb24gICAgICAgICAq
c2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdlYktpdFRMU0Vycm9yc1BvbGljeSAgICAgICAgIHBvbGljeSk7
CisKK1dFQktJVF9BUEkgV2ViS2l0VExTRXJyb3JzUG9saWN5Cit3ZWJraXRfbmV0d29ya19zZXNz
aW9uX2dldF90bHNfZXJyb3JzX3BvbGljeSAgICAgICAgICAgICAgICAgICAgIChXZWJLaXROZXR3
b3JrU2Vzc2lvbiAgICAgICAgICpzZXNzaW9uKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRf
bmV0d29ya19zZXNzaW9uX2FsbG93X3Rsc19jZXJ0aWZpY2F0ZV9mb3JfaG9zdCAgICAgICAgICAg
IChXZWJLaXROZXR3b3JrU2Vzc2lvbiAgICAgICAgICpzZXNzaW9uLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1Rsc0Nl
cnRpZmljYXRlICAgICAgICAgICAgICAqY2VydGlmaWNhdGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
ICAgICAgICAgICAgICAgICAgICpob3N0KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfbmV0
d29ya19zZXNzaW9uX3NldF9wcm94eV9zZXR0aW5ncyAgICAgICAgICAgICAgICAgICAgICAgIChX
ZWJLaXROZXR3b3JrU2Vzc2lvbiAgICAgICAgICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0TmV0
d29ya1Byb3h5TW9kZSAgICAgICAgcHJveHlfbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdE5ldHdvcmtQ
cm94eVNldHRpbmdzICAgKnByb3h5X3NldHRpbmdzKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfbmV0d29ya19zZXNzaW9uX3NldF9tZW1vcnlfcHJlc3N1cmVfc2V0dGluZ3MgICAgICAgICAg
ICAgIChXZWJLaXRNZW1vcnlQcmVzc3VyZVNldHRpbmdzICpzZXR0aW5ncyk7CisKK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfaXRwX3N1bW1hcnkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoV2ViS2l0TmV0d29ya1Nlc3Npb24gICAgICAgICAqc2Vzc2lvbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICAgICAgICAgKmNhbmNlbGxhYmxlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0FzeW5jUmVhZHlDYWxsYmFjayAgICAgICAgICAgY2FsbGJhY2ssCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
cG9pbnRlciAgICAgICAgICAgICAgICAgICAgICB1c2VyX2RhdGEpOworV0VCS0lUX0FQSSBHTGlz
dCAqCit3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF9pdHBfc3VtbWFyeV9maW5pc2ggICAgICAg
ICAgICAgICAgICAgIChXZWJLaXROZXR3b3JrU2Vzc2lvbiAgICAgICAgICpzZXNzaW9uLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0FzeW5jUmVzdWx0ICAgICAgICAgICAgICAgICAqcmVzdWx0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vy
cm9yICAgICAgICAgICAgICAgICAgICAgICoqZXJyb3IpOworV0VCS0lUX0FQSSBXZWJLaXREb3du
bG9hZCAqCit3ZWJraXRfbmV0d29ya19zZXNzaW9uX2Rvd25sb2FkX3VyaSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChXZWJLaXROZXR3b3JrU2Vzc2lvbiAgICAgICAgICpzZXNzaW9uLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICAgICAgICAgICAqdXJpKTsKKworR19FTkRfREVD
TFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xp
Yi9XZWJLaXROZXR3b3JrU2Vzc2lvblByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdE5ldHdvcmtTZXNzaW9uUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uY2IwMWVlOGY4MDUyCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0TmV0d29ya1Nlc3Npb25Qcml2
YXRlLmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBJZ2FsaWEg
Uy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldlYktpdERvd25sb2FkLmgiCisjaW5jbHVk
ZSAiV2ViS2l0TmV0d29ya1Nlc3Npb24uaCIKKwordm9pZCB3ZWJraXROZXR3b3JrU2Vzc2lvbkRv
d25sb2FkU3RhcnRlZChXZWJLaXROZXR3b3JrU2Vzc2lvbiosIFdlYktpdERvd25sb2FkKik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250
ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRl
eHQuY3BwCmluZGV4IDIyZTc1MWMyOWI4Yy4uMDEzZWUwZjVjYzI0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmNwcApAQCAt
ODAsNiArODAsMTAgQEAKICNpbmNsdWRlICJXZWJLaXRSZW1vdGVJbnNwZWN0b3JQcm90b2NvbEhh
bmRsZXIuaCIKICNlbmRpZgogCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisjaW5jbHVkZSAi
V2ViS2l0TmV0d29ya1Nlc3Npb24uaCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0
OwogCiAvKioKQEAgLTExOCw3ICsxMjIsOSBAQCBlbnVtIHsKICNpZiBQTEFURk9STShHVEspICYm
ICFVU0UoR1RLNCkKICAgICBQUk9QX0xPQ0FMX1NUT1JBR0VfRElSRUNUT1JZLAogI2VuZGlmCisj
aWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogICAgIFBST1BfV0VCU0lURV9EQVRBX01BTkFHRVIs
CisjZW5kaWYKICNpZiBQTEFURk9STShHVEspICYmICFVU0UoR1RLNCkKICAgICBQUk9QX1BTT05f
RU5BQkxFRCwKICAgICBQUk9QX1VTRV9TWVNURU1fQVBQRUFSQU5DRV9GT1JfU0NST0xMQkFSUywK
QEAgLTEzMSw3ICsxMzcsOSBAQCBlbnVtIHsKIHN0YXRpYyBHUGFyYW1TcGVjKiBzT2JqUHJvcGVy
dGllc1tOX1BST1BFUlRJRVNdID0geyBudWxscHRyLCB9OwogCiBlbnVtIHsKKyNpZiAhRU5BQkxF
KDIwMjJfR0xJQl9BUEkpCiAgICAgRE9XTkxPQURfU1RBUlRFRCwKKyNlbmRpZgogICAgIElOSVRJ
QUxJWkVfV0VCX0VYVEVOU0lPTlMsCiAgICAgSU5JVElBTElaRV9OT1RJRklDQVRJT05fUEVSTUlT
U0lPTlMsCiAgICAgQVVUT01BVElPTl9TVEFSVEVELApAQCAtMjAwLDEwICsyMDgsMTIgQEAgdHlw
ZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFdlYktpdFVSSVNjaGVtZUhhbmRsZXI+ID4gVVJJ
U2NoZW1lSGFuZGxlck1hcDsKIGNsYXNzIFdlYktpdEF1dG9tYXRpb25DbGllbnQ7CiAKIHN0cnVj
dCBfV2ViS2l0V2ViQ29udGV4dFByaXZhdGUgeworI2lmICFFTkFCTEUoMjAyMl9HTElCX0FQSSkK
ICAgICBfV2ViS2l0V2ViQ29udGV4dFByaXZhdGUoKQogICAgICAgICA6IGRuc1ByZWZldGNoSHlz
dGVyZXJpcyhbdGhpc10oUEFMOjpIeXN0ZXJlc2lzU3RhdGUgc3RhdGUpIHsgaWYgKHN0YXRlID09
IFBBTDo6SHlzdGVyZXNpc1N0YXRlOjpTdG9wcGVkKSBkbnNQcmVmZXRjaGVkSG9zdHMuY2xlYXIo
KTsgfSkKICAgICB7CiAgICAgfQorI2VuZGlmCiAKICAgICBSZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+
IHByb2Nlc3NQb29sOwogICAgIGJvb2wgY2xpZW50c0RldGFjaGVkOwpAQCAtMjE3LDcgKzIyNyw5
IEBAIHN0cnVjdCBfV2ViS2l0V2ViQ29udGV4dFByaXZhdGUgewogICAgIFVSSVNjaGVtZUhhbmRs
ZXJNYXAgdXJpU2NoZW1lSGFuZGxlcnM7CiAgICAgR1JlZlB0cjxXZWJLaXRHZW9sb2NhdGlvbk1h
bmFnZXI+IGdlb2xvY2F0aW9uTWFuYWdlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViS2l0Tm90
aWZpY2F0aW9uUHJvdmlkZXI+IG5vdGlmaWNhdGlvblByb3ZpZGVyOworI2lmICFFTkFCTEUoMjAy
Ml9HTElCX0FQSSkKICAgICBHUmVmUHRyPFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlcj4gd2Vic2l0
ZURhdGFNYW5hZ2VyOworI2VuZGlmCiAKICAgICBDU3RyaW5nIGZhdmljb25EYXRhYmFzZURpcmVj
dG9yeTsKICAgICBXZWJLaXRQcm9jZXNzTW9kZWwgcHJvY2Vzc01vZGVsOwpAQCAtMjM0LDExICsy
NDYsMTYgQEAgc3RydWN0IF9XZWJLaXRXZWJDb250ZXh0UHJpdmF0ZSB7CiAjZW5kaWYKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8V2ViS2l0QXV0b21hdGlvbkNsaWVudD4gYXV0b21hdGlvbkNsaWVudDsK
ICAgICBHUmVmUHRyPFdlYktpdEF1dG9tYXRpb25TZXNzaW9uPiBhdXRvbWF0aW9uU2Vzc2lvbjsK
KyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICBHUmVmUHRyPFdlYktpdE5ldHdvcmtTZXNz
aW9uPiBhdXRvbWF0aW9uTmV0d29ya1Nlc3Npb247CisjZW5kaWYKICNlbmRpZgogICAgIHN0ZDo6
dW5pcXVlX3B0cjxXZWJLaXRQcm90b2NvbEhhbmRsZXI+IHdlYmtpdFByb3RvY29sSGFuZGxlcjsK
IAorI2lmICFFTkFCTEUoMjAyMl9HTElCX0FQSSkKICAgICBIYXNoU2V0PFN0cmluZz4gZG5zUHJl
ZmV0Y2hlZEhvc3RzOwogICAgIFBBTDo6SHlzdGVyZXNpc0FjdGl2aXR5IGRuc1ByZWZldGNoSHlz
dGVyZXJpczsKKyNlbmRpZgogCiAgICAgV2ViS2l0TWVtb3J5UHJlc3N1cmVTZXR0aW5ncyogbWVt
b3J5UHJlc3N1cmVTZXR0aW5nczsKIApAQCAtMjk4LDcgKzMxNSwxNyBAQCB2b2lkIHdlYmtpdFdl
YkNvbnRleHRXaWxsQ2xvc2VBdXRvbWF0aW9uU2Vzc2lvbihXZWJLaXRXZWJDb250ZXh0KiB3ZWJD
b250ZXh0KQogewogICAgIHdlYkNvbnRleHQtPnByaXYtPnByb2Nlc3NQb29sLT5zZXRBdXRvbWF0
aW9uU2Vzc2lvbihudWxscHRyKTsKICAgICB3ZWJDb250ZXh0LT5wcml2LT5hdXRvbWF0aW9uU2Vz
c2lvbiA9IG51bGxwdHI7CisgICAgd2ViQ29udGV4dC0+cHJpdi0+YXV0b21hdGlvbk5ldHdvcmtT
ZXNzaW9uID0gbnVsbHB0cjsKIH0KKworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorV2ViS2l0
TmV0d29ya1Nlc3Npb24qIHdlYmtpdFdlYkNvbnRleHRHZXROZXR3b3JrU2Vzc2lvbkZvckF1dG9t
YXRpb24oV2ViS2l0V2ViQ29udGV4dCogd2ViQ29udGV4dCkKK3sKKyAgICBpZiAoIXdlYkNvbnRl
eHQtPnByaXYtPmF1dG9tYXRpb25OZXR3b3JrU2Vzc2lvbiAmJiB3ZWJDb250ZXh0LT5wcml2LT5h
dXRvbWF0aW9uQ2xpZW50KQorICAgICAgICB3ZWJDb250ZXh0LT5wcml2LT5hdXRvbWF0aW9uTmV0
d29ya1Nlc3Npb24gPSBhZG9wdEdSZWYod2Via2l0X25ldHdvcmtfc2Vzc2lvbl9uZXdfZXBoZW1l
cmFsKCkpOworICAgIHJldHVybiB3ZWJDb250ZXh0LT5wcml2LT5hdXRvbWF0aW9uTmV0d29ya1Nl
c3Npb24uZ2V0KCk7Cit9CisjZW5kaWYKICNlbmRpZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RP
UikKIAogV0VCS0lUX0RFRklORV9UWVBFKFdlYktpdFdlYkNvbnRleHQsIHdlYmtpdF93ZWJfY29u
dGV4dCwgR19UWVBFX09CSkVDVCkKQEAgLTMzNyw5ICszNjQsMTEgQEAgc3RhdGljIHZvaWQgd2Vi
a2l0V2ViQ29udGV4dEdldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElELCBH
VmFsdWUqIHYKICAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCBjb250ZXh0LT5wcml2
LT5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkuZGF0YSgpKTsKICAgICAgICAgYnJlYWs7CiAjZW5kaWYK
KyNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAgICAgY2FzZSBQUk9QX1dFQlNJVEVfREFUQV9N
QU5BR0VSOgogICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF93ZWJfY29u
dGV4dF9nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIoY29udGV4dCkpOwogICAgICAgICBicmVhazsK
KyNlbmRpZgogI2lmIFBMQVRGT1JNKEdUSykgJiYgIVVTRShHVEs0KQogICAgIGNhc2UgUFJPUF9Q
U09OX0VOQUJMRUQ6CiAgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIGNvbnRleHQt
PnByaXYtPnBzb25FbmFibGVkKTsKQEAgLTM2NiwxMSArMzk1LDEzIEBAIHN0YXRpYyB2b2lkIHdl
YmtpdFdlYkNvbnRleHRTZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJRCwg
Y29uc3QgR1ZhCiAgICAgICAgIGNvbnRleHQtPnByaXYtPmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9
IGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSk7CiAgICAgICAgIGJyZWFrOwogI2VuZGlmCisjaWYg
IUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogICAgIGNhc2UgUFJPUF9XRUJTSVRFX0RBVEFfTUFOQUdF
UjogewogICAgICAgICBncG9pbnRlciBtYW5hZ2VyID0gZ192YWx1ZV9nZXRfb2JqZWN0KHZhbHVl
KTsKICAgICAgICAgY29udGV4dC0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyID0gbWFuYWdlciA/
IFdFQktJVF9XRUJTSVRFX0RBVEFfTUFOQUdFUihtYW5hZ2VyKSA6IG51bGxwdHI7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KKyNlbmRpZgogI2lmIFBMQVRGT1JNKEdUSykgJiYgIVVTRShHVEs0KQog
ICAgIGNhc2UgUFJPUF9QU09OX0VOQUJMRUQ6CiAgICAgICAgIGNvbnRleHQtPnByaXYtPnBzb25F
bmFibGVkID0gZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSk7CkBAIC00MjAsMTMgKzQ1MSwxMCBA
QCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJDb250ZXh0Q29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0
KQogICAgIH0KICAgICBjb25maWd1cmF0aW9uLnNldFRpbWVab25lT3ZlcnJpZGUoU3RyaW5nOjpm
cm9tVVRGOChwcml2LT50aW1lWm9uZU92ZXJyaWRlLmRhdGEoKSwgcHJpdi0+dGltZVpvbmVPdmVy
cmlkZS5sZW5ndGgoKSkpOwogCi0gICAgaWYgKCFwcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIpIHsK
LSAgICAgICAgcHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJz
aXRlX2RhdGFfbWFuYWdlcl9uZXcoCiAjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQotICAgICAg
ICAgICAgICAgICAgICAibG9jYWwtc3RvcmFnZS1kaXJlY3RvcnkiLCBwcml2LT5sb2NhbFN0b3Jh
Z2VEaXJlY3RvcnkuZGF0YSgpLAorICAgIGlmICghcHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyKQor
ICAgICAgICBwcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIgPSBhZG9wdEdSZWYod2Via2l0X3dlYnNp
dGVfZGF0YV9tYW5hZ2VyX25ldygibG9jYWwtc3RvcmFnZS1kaXJlY3RvcnkiLCBwcml2LT5sb2Nh
bFN0b3JhZ2VEaXJlY3RvcnkuZGF0YSgpLCBudWxscHRyKSk7CiAjZW5kaWYKLSAgICAgICAgbnVs
bHB0cikpOwotICAgIH0KIAogICAgIHByaXYtPnByb2Nlc3NQb29sID0gV2ViUHJvY2Vzc1Bvb2w6
OmNyZWF0ZShjb25maWd1cmF0aW9uKTsKICAgICBwcml2LT5wcm9jZXNzUG9vbC0+c2V0VXNlck1l
c3NhZ2VIYW5kbGVyKFt3ZWJDb250ZXh0XShVc2VyTWVzc2FnZSYmIG1lc3NhZ2UsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoVXNlck1lc3NhZ2UmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpIHsKQEAg
LTUxMiw2ICs1NDAsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2NvbnRleHRfY2xhc3NfaW5p
dChXZWJLaXRXZWJDb250ZXh0Q2xhc3MqIHdlYkNvbnRleHRDbGFzcwogICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KFdFQktJVF9QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NP
TlNUUlVDVF9PTkxZKSk7CiAjZW5kaWYKIAorI2lmICFFTkFCTEUoMjAyMl9HTElCX0FQSSkKICAg
ICAvKioKICAgICAgKiBXZWJLaXRXZWJDb250ZXh0OndlYnNpdGUtZGF0YS1tYW5hZ2VyOgogICAg
ICAqCkBAIC01MjUsNiArNTU0LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl9jb250ZXh0X2Ns
YXNzX2luaXQoV2ViS2l0V2ViQ29udGV4dENsYXNzKiB3ZWJDb250ZXh0Q2xhc3MKICAgICAgICAg
ICAgIG51bGxwdHIsIG51bGxwdHIsCiAgICAgICAgICAgICBXRUJLSVRfVFlQRV9XRUJTSVRFX0RB
VEFfTUFOQUdFUiwKICAgICAgICAgICAgIHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpOworI2VuZGlmCiAKICNp
ZiBQTEFURk9STShHVEspICYmICFVU0UoR1RLNCkKICAgICAvKioKQEAgLTYwMyw2ICs2MzMsNyBA
QCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2NvbnRleHRfY2xhc3NfaW5pdChXZWJLaXRXZWJDb250
ZXh0Q2xhc3MqIHdlYkNvbnRleHRDbGFzcwogCiAgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0aWVzKGdPYmplY3RDbGFzcywgTl9QUk9QRVJUSUVTLCBzT2JqUHJvcGVydGllcyk7CiAK
KyNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAgICAgLyoqCiAgICAgICogV2ViS2l0V2ViQ29u
dGV4dDo6ZG93bmxvYWQtc3RhcnRlZDoKICAgICAgKiBAY29udGV4dDogdGhlICNXZWJLaXRXZWJD
b250ZXh0CkBAIC02MTksNiArNjUwLDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl9jb250ZXh0
X2NsYXNzX2luaXQoV2ViS2l0V2ViQ29udGV4dENsYXNzKiB3ZWJDb250ZXh0Q2xhc3MKICAgICAg
ICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19PQkpFQ1QsCiAgICAgICAgICAgICBHX1RZ
UEVfTk9ORSwgMSwKICAgICAgICAgICAgIFdFQktJVF9UWVBFX0RPV05MT0FEKTsKKyNlbmRpZgog
CiAgICAgLyoqCiAgICAgICogV2ViS2l0V2ViQ29udGV4dDo6aW5pdGlhbGl6ZS13ZWItZXh0ZW5z
aW9uczoKQEAgLTc0NSw2ICs3NzcsNyBAQCBXZWJLaXRXZWJDb250ZXh0KiB3ZWJraXRfd2ViX2Nv
bnRleHRfbmV3KHZvaWQpCiAgICAgcmV0dXJuIFdFQktJVF9XRUJfQ09OVEVYVChnX29iamVjdF9u
ZXcoV0VCS0lUX1RZUEVfV0VCX0NPTlRFWFQsIG51bGxwdHIpKTsKIH0KIAorI2lmICFFTkFCTEUo
MjAyMl9HTElCX0FQSSkKIC8qKgogICogd2Via2l0X3dlYl9jb250ZXh0X25ld19lcGhlbWVyYWw6
CiAgKgpAQCAtODE3LDYgKzg1MCw3IEBAIGdib29sZWFuIHdlYmtpdF93ZWJfY29udGV4dF9pc19l
cGhlbWVyYWwoV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCkKIAogICAgIHJldHVybiB3ZWJraXRf
d2Vic2l0ZV9kYXRhX21hbmFnZXJfaXNfZXBoZW1lcmFsKGNvbnRleHQtPnByaXYtPndlYnNpdGVE
YXRhTWFuYWdlci5nZXQoKSk7CiB9CisjZW5kaWYKIAogLyoqCiAgKiB3ZWJraXRfd2ViX2NvbnRl
eHRfaXNfYXV0b21hdGlvbl9hbGxvd2VkOgpAQCAtOTU1LDYgKzk4OSw3IEBAIFdlYktpdENhY2hl
TW9kZWwgd2Via2l0X3dlYl9jb250ZXh0X2dldF9jYWNoZV9tb2RlbChXZWJLaXRXZWJDb250ZXh0
KiBjb250ZXh0KQogICAgIHJldHVybiBXRUJLSVRfQ0FDSEVfTU9ERUxfV0VCX0JST1dTRVI7CiB9
CiAKKyNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAvKioKICAqIHdlYmtpdF93ZWJfY29udGV4
dF9jbGVhcl9jYWNoZToKICAqIEBjb250ZXh0OiBhICNXZWJLaXRXZWJDb250ZXh0CkBAIC05NzQs
NyArMTAwOSw2IEBAIHZvaWQgd2Via2l0X3dlYl9jb250ZXh0X2NsZWFyX2NhY2hlKFdlYktpdFdl
YkNvbnRleHQqIGNvbnRleHQpCiAgICAgd2Vic2l0ZURhdGFTdG9yZS5yZW1vdmVEYXRhKHdlYnNp
dGVEYXRhVHlwZXMsIC1XYWxsVGltZTo6aW5maW5pdHkoKSwgW10geyB9KTsKIH0KIAotI2lmICFF
TkFCTEUoMjAyMl9HTElCX0FQSSkKIC8qKgogICogd2Via2l0X3dlYl9jb250ZXh0X3NldF9uZXR3
b3JrX3Byb3h5X3NldHRpbmdzOgogICogQGNvbnRleHQ6IGEgI1dlYktpdFdlYkNvbnRleHQKQEAg
LTEwMDEsNyArMTAzNSw2IEBAIHZvaWQgd2Via2l0X3dlYl9jb250ZXh0X3NldF9uZXR3b3JrX3By
b3h5X3NldHRpbmdzKFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQsIFdlCiAKICAgICB3ZWJraXRf
d2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X25ldHdvcmtfcHJveHlfc2V0dGluZ3MoY29udGV4dC0+
cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpLCBwcm94eU1vZGUsIHByb3h5U2V0dGluZ3Mp
OwogfQotI2VuZGlmCiAKIC8qKgogICogd2Via2l0X3dlYl9jb250ZXh0X2Rvd25sb2FkX3VyaToK
QEAgLTEwNTAsNiArMTA4Myw3IEBAIFdlYktpdENvb2tpZU1hbmFnZXIqIHdlYmtpdF93ZWJfY29u
dGV4dF9nZXRfY29va2llX21hbmFnZXIoV2ViS2l0V2ViQ29udGV4dCogY29uCiAKICAgICByZXR1
cm4gd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9jb29raWVfbWFuYWdlcihjb250ZXh0
LT5wcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkpOwogfQorI2VuZGlmCiAKIC8qKgogICog
d2Via2l0X3dlYl9jb250ZXh0X2dldF9nZW9sb2NhdGlvbl9tYW5hZ2VyOgpAQCAtMTExOCw4ICsx
MTUyLDEwIEBAIHZvaWQgd2Via2l0X3dlYl9jb250ZXh0X3NldF9mYXZpY29uX2RhdGFiYXNlX2Rp
cmVjdG9yeShXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0CiAgICAgR1VuaXF1ZVB0cjxnY2hhcj4g
ZmF2aWNvbkRhdGFiYXNlUGF0aChnX2J1aWxkX2ZpbGVuYW1lKHByaXYtPmZhdmljb25EYXRhYmFz
ZURpcmVjdG9yeS5kYXRhKCksCiAgICAgICAgICJXZWJwYWdlSWNvbnMuZGIiLCBudWxscHRyKSk7
CiAKKyNpZiAwIC8vIEZJWE1FCiAgICAgLy8gU2V0dGluZyB0aGUgcGF0aCB3aWxsIGNhdXNlIHRo
ZSBpY29uIGRhdGFiYXNlIHRvIGJlIG9wZW5lZC4KICAgICB3ZWJraXRGYXZpY29uRGF0YWJhc2VP
cGVuKHByaXYtPmZhdmljb25EYXRhYmFzZS5nZXQoKSwgRmlsZVN5c3RlbTo6c3RyaW5nRnJvbUZp
bGVTeXN0ZW1SZXByZXNlbnRhdGlvbihmYXZpY29uRGF0YWJhc2VQYXRoLmdldCgpKSwgd2Via2l0
X3dlYl9jb250ZXh0X2lzX2VwaGVtZXJhbChjb250ZXh0KSk7CisjZW5kaWYKIH0KIAogLyoqCkBA
IC0xNjU2LDYgKzE2OTIsNyBAQCB2b2lkIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfZGlza19jYWNo
ZV9kaXJlY3RvcnkoV2ViS2l0V2ViQ29udGV4dCosIGNvbnN0IGNoYXIqKQogfQogI2VuZGlmCiAK
KyNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAvKioKICAqIHdlYmtpdF93ZWJfY29udGV4dF9w
cmVmZXRjaF9kbnM6CiAgKiBAY29udGV4dDogYSAjV2ViS2l0V2ViQ29udGV4dApAQCAtMTY3MSw4
ICsxNzA4LDEwIEBAIHZvaWQgd2Via2l0X3dlYl9jb250ZXh0X3ByZWZldGNoX2RucyhXZWJLaXRX
ZWJDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiBob3N0CiAgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfSVNfV0VCX0NPTlRFWFQoY29udGV4dCkpOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwo
aG9zdG5hbWUpOwogCi0gICAgYXV0byYgd2Vic2l0ZURhdGFTdG9yZSA9IHdlYmtpdFdlYnNpdGVE
YXRhTWFuYWdlckdldERhdGFTdG9yZShjb250ZXh0LT5wcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIu
Z2V0KCkpOwotICAgIHdlYnNpdGVEYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJlZmV0Y2hETlMoU3RyaW5nOjpmcm9tVVRGOChob3N0bmFt
ZSkpLCAwKTsKKyAgICBpZiAoY29udGV4dC0+cHJpdi0+ZG5zUHJlZmV0Y2hlZEhvc3RzLmFkZCho
b3N0bmFtZSkuaXNOZXdFbnRyeSkgeworICAgICAgICBhdXRvJiB3ZWJzaXRlRGF0YVN0b3JlID0g
d2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKGNvbnRleHQtPnByaXYtPndlYnNp
dGVEYXRhTWFuYWdlci5nZXQoKSk7CisgICAgICAgIHdlYnNpdGVEYXRhU3RvcmUubmV0d29ya1By
b2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJlZmV0Y2hETlMoU3RyaW5n
Ojpmcm9tVVRGOChob3N0bmFtZSkpLCAwKTsKKyAgICB9CiAgICAgY29udGV4dC0+cHJpdi0+ZG5z
UHJlZmV0Y2hIeXN0ZXJlcmlzLmltcHVsc2UoKTsKIH0KIApAQCAtMTY5Niw2ICsxNzM1LDcgQEAg
dm9pZCB3ZWJraXRfd2ViX2NvbnRleHRfYWxsb3dfdGxzX2NlcnRpZmljYXRlX2Zvcl9ob3N0KFdl
YktpdFdlYkNvbnRleHQqIGNvbnRleHQKICAgICBhdXRvJiB3ZWJzaXRlRGF0YVN0b3JlID0gd2Vi
a2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKGNvbnRleHQtPnByaXYtPndlYnNpdGVE
YXRhTWFuYWdlci5nZXQoKSk7CiAgICAgd2Vic2l0ZURhdGFTdG9yZS5hbGxvd1NwZWNpZmljSFRU
UFNDZXJ0aWZpY2F0ZUZvckhvc3QoY2VydGlmaWNhdGVJbmZvLCBTdHJpbmc6OmZyb21VVEY4KGhv
c3QpKTsKIH0KKyNlbmRpZgogCiAvKioKICAqIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfcHJvY2Vz
c19tb2RlbDoKQEAgLTE5MzYsMTAgKzE5NzYsMTIgQEAgdm9pZCB3ZWJraXRXZWJDb250ZXh0SW5p
dGlhbGl6ZU5vdGlmaWNhdGlvblBlcm1pc3Npb25zKFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQK
ICAgICBnX3NpZ25hbF9lbWl0KGNvbnRleHQsIHNpZ25hbHNbSU5JVElBTElaRV9OT1RJRklDQVRJ
T05fUEVSTUlTU0lPTlNdLCAwKTsKIH0KIAorI2lmICFFTkFCTEUoMjAyMl9HTElCX0FQSSkKIHZv
aWQgd2Via2l0V2ViQ29udGV4dERvd25sb2FkU3RhcnRlZChXZWJLaXRXZWJDb250ZXh0KiBjb250
ZXh0LCBXZWJLaXREb3dubG9hZCogZG93bmxvYWQpCiB7CiAgICAgZ19zaWduYWxfZW1pdChjb250
ZXh0LCBzaWduYWxzW0RPV05MT0FEX1NUQVJURURdLCAwLCBkb3dubG9hZCk7CiB9CisjZW5kaWYK
IAogR1ZhcmlhbnQqIHdlYmtpdFdlYkNvbnRleHRJbml0aWFsaXplV2ViRXh0ZW5zaW9ucyhXZWJL
aXRXZWJDb250ZXh0KiBjb250ZXh0KQogewpAQCAtMTk3Nyw4ICsyMDE5LDEwIEBAIHZvaWQgd2Vi
a2l0V2ViQ29udGV4dENyZWF0ZVBhZ2VGb3JXZWJWaWV3KFdlYktpdFdlYkNvbnRleHQqIGNvbnRl
eHQsIFdlYktpdFdlYlZpCiAgICAgICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRPdmVycmlkZUNv
bnRlbnRTZWN1cml0eVBvbGljeShTdHJpbmc6OmZyb21VVEY4KGRlZmF1bHRDb250ZW50U2VjdXJp
dHlQb2xpY3kpKTsKIAogICAgIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogbWFuYWdlciA9IHdl
YmtpdFdlYlZpZXdHZXRXZWJzaXRlRGF0YU1hbmFnZXIod2ViVmlldyk7CisjaWYgIUVOQUJMRSgy
MDIyX0dMSUJfQVBJKQogICAgIGlmICghbWFuYWdlcikKICAgICAgICAgbWFuYWdlciA9IGNvbnRl
eHQtPnByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKTsKKyNlbmRpZgogICAgIHBhZ2VDb25m
aWd1cmF0aW9uLT5zZXRXZWJzaXRlRGF0YVN0b3JlKCZ3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJH
ZXREYXRhU3RvcmUobWFuYWdlcikpOwogICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXREZWZhdWx0
V2Vic2l0ZVBvbGljaWVzKHdlYmtpdFdlYnNpdGVQb2xpY2llc0dldFdlYnNpdGVQb2xpY2llcyhk
ZWZhdWx0V2Vic2l0ZVBvbGljaWVzKSk7CiAgICAgd2Via2l0V2ViVmlld0NyZWF0ZVBhZ2Uod2Vi
VmlldywgV1RGTW92ZShwYWdlQ29uZmlndXJhdGlvbikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5oLmluIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5oLmluCmluZGV4IDE2NTdk
ZDNiMmIyOC4uNzJiMDRhMWI3NGZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0LmguaW4KKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5oLmluCkBAIC0xMzYsNiArMTM2LDcgQEAg
d2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0ICAgICAgICAgICAgICAgICAgICAgICh2b2lk
KTsKIFdFQktJVF9BUEkgV2ViS2l0V2ViQ29udGV4dCAqCiB3ZWJraXRfd2ViX2NvbnRleHRfbmV3
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOwogCisjaWYgIUVOQUJMRSgyMDIy
X0dMSUJfQVBJKQogV0VCS0lUX0FQSSBXZWJLaXRXZWJDb250ZXh0ICoKIHdlYmtpdF93ZWJfY29u
dGV4dF9uZXdfZXBoZW1lcmFsICAgICAgICAgICAgICAgICAgICAodm9pZCk7CiAKQEAgLTE0Nyw2
ICsxNDgsNyBAQCB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyICAg
ICAgICAgKFdlYktpdFdlYkNvbnRleHQKIAogV0VCS0lUX0FQSSBnYm9vbGVhbgogd2Via2l0X3dl
Yl9jb250ZXh0X2lzX2VwaGVtZXJhbCAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJDb250
ZXh0ICAgICAgICAgICAgICAqY29udGV4dCk7CisjZW5kaWYKIAogV0VCS0lUX0FQSSBnYm9vbGVh
bgogd2Via2l0X3dlYl9jb250ZXh0X2lzX2F1dG9tYXRpb25fYWxsb3dlZCAgICAgICAgICAgIChX
ZWJLaXRXZWJDb250ZXh0ICAgICAgICAgICAgICAqY29udGV4dCk7CkBAIC0xNjksMTUgKzE3MSwx
NCBAQCBXRUJLSVRfREVQUkVDQVRFRCBndWludAogd2Via2l0X3dlYl9jb250ZXh0X2dldF93ZWJf
cHJvY2Vzc19jb3VudF9saW1pdCAgICAgIChXZWJLaXRXZWJDb250ZXh0ICAgICAgICAgICAgICAq
Y29udGV4dCk7CiAjZW5kaWYKIAorI2lmICFFTkFCTEUoMjAyMl9HTElCX0FQSSkKIFdFQktJVF9B
UEkgdm9pZAogd2Via2l0X3dlYl9jb250ZXh0X2NsZWFyX2NhY2hlICAgICAgICAgICAgICAgICAg
ICAgIChXZWJLaXRXZWJDb250ZXh0ICAgICAgICAgICAgICAqY29udGV4dCk7CiAKLSNpZiAhRU5B
QkxFKDIwMjJfR0xJQl9BUEkpCiBXRUJLSVRfREVQUkVDQVRFRF9GT1Iod2Via2l0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyX3NldF9uZXR3b3JrX3Byb3h5X3NldHRpbmdzKSB2b2lkCiB3ZWJraXRfd2Vi
X2NvbnRleHRfc2V0X25ldHdvcmtfcHJveHlfc2V0dGluZ3MgICAgICAgKFdlYktpdFdlYkNvbnRl
eHQgICAgICAgICAgICAgICpjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXROZXR3b3JrUHJveHlNb2RlICAgICAgICAgcHJv
eHlfbW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV2ViS2l0TmV0d29ya1Byb3h5U2V0dGluZ3MgICAgKnByb3h5X3NldHRpbmdzKTsKLSNl
bmRpZgogCiBXRUJLSVRfQVBJIFdlYktpdERvd25sb2FkICoKIHdlYmtpdF93ZWJfY29udGV4dF9k
b3dubG9hZF91cmkgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViQ29udGV4dCAgICAgICAg
ICAgICAgKmNvbnRleHQsCkBAIC0xODUsNiArMTg2LDcgQEAgd2Via2l0X3dlYl9jb250ZXh0X2Rv
d25sb2FkX3VyaSAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJDb250ZXh0CiAKIFdFQktJ
VF9BUEkgV2ViS2l0Q29va2llTWFuYWdlciAqCiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Nvb2tp
ZV9tYW5hZ2VyICAgICAgICAgICAgICAgKFdlYktpdFdlYkNvbnRleHQgICAgICAgICAgICAgICpj
b250ZXh0KTsKKyNlbmRpZgogCiBXRUJLSVRfQVBJIFdlYktpdEdlb2xvY2F0aW9uTWFuYWdlciAq
CiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2dlb2xvY2F0aW9uX21hbmFnZXIgICAgICAgICAgKFdl
YktpdFdlYkNvbnRleHQgICAgICAgICAgICAgICpjb250ZXh0KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHRQcml2YXRlLmggYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0UHJpdmF0ZS5o
CmluZGV4IDUzY2UzNTQ3MTIxMS4uYWE3ZTY2MGFlNjE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0UHJpdmF0ZS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHRQcml2YXRlLmgK
QEAgLTMxLDggKzMxLDE0IEBACiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKICNpbmNsdWRl
IDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgogCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkp
CisjaW5jbHVkZSAiV2ViS2l0TmV0d29ya1Nlc3Npb24uaCIKKyNlbmRpZgorCiBXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sJiB3ZWJraXRXZWJDb250ZXh0R2V0UHJvY2Vzc1Bvb2woV2ViS2l0V2ViQ29u
dGV4dCopOworI2lmICFFTkFCTEUoMjAyMl9HTElCX0FQSSkKIHZvaWQgd2Via2l0V2ViQ29udGV4
dERvd25sb2FkU3RhcnRlZChXZWJLaXRXZWJDb250ZXh0KiwgV2ViS2l0RG93bmxvYWQqKTsKKyNl
bmRpZgogdm9pZCB3ZWJraXRXZWJDb250ZXh0Q3JlYXRlUGFnZUZvcldlYlZpZXcoV2ViS2l0V2Vi
Q29udGV4dCosIFdlYktpdFdlYlZpZXcqLCBXZWJLaXRVc2VyQ29udGVudE1hbmFnZXIqLCBXZWJL
aXRXZWJWaWV3KiwgV2ViS2l0V2Vic2l0ZVBvbGljaWVzKik7CiB2b2lkIHdlYmtpdFdlYkNvbnRl
eHRXZWJWaWV3RGVzdHJveWVkKFdlYktpdFdlYkNvbnRleHQqLCBXZWJLaXRXZWJWaWV3Kik7CiBX
ZWJLaXRXZWJWaWV3KiB3ZWJraXRXZWJDb250ZXh0R2V0V2ViVmlld0ZvclBhZ2UoV2ViS2l0V2Vi
Q29udGV4dCosIFdlYktpdDo6V2ViUGFnZVByb3h5Kik7CkBAIC00MCw0ICs0Niw3IEBAIEdWYXJp
YW50KiB3ZWJraXRXZWJDb250ZXh0SW5pdGlhbGl6ZVdlYkV4dGVuc2lvbnMoV2ViS2l0V2ViQ29u
dGV4dCopOwogdm9pZCB3ZWJraXRXZWJDb250ZXh0SW5pdGlhbGl6ZU5vdGlmaWNhdGlvblBlcm1p
c3Npb25zKFdlYktpdFdlYkNvbnRleHQqKTsKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikK
IHZvaWQgd2Via2l0V2ViQ29udGV4dFdpbGxDbG9zZUF1dG9tYXRpb25TZXNzaW9uKFdlYktpdFdl
YkNvbnRleHQqKTsKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKK1dlYktpdE5ldHdvcmtTZXNz
aW9uKiB3ZWJraXRXZWJDb250ZXh0R2V0TmV0d29ya1Nlc3Npb25Gb3JBdXRvbWF0aW9uKFdlYktp
dFdlYkNvbnRleHQqKTsKKyNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXcuY3BwCmluZGV4IDIzMWUyMGZlNmJmOC4uYjY0
MWM4ODQwNjQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9X
ZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9X
ZWJLaXRXZWJWaWV3LmNwcApAQCAtMTAyLDYgKzEwMiwxMCBAQAogI2luY2x1ZGUgIldlYktpdFdl
YlZpZXdDbGllbnQuaCIKICNlbmRpZgogCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisjaW5j
bHVkZSAiV2ViS2l0TmV0d29ya1Nlc3Npb25Qcml2YXRlLmgiCisjZW5kaWYKKwogdXNpbmcgbmFt
ZXNwYWNlIFdlYktpdDsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0xODcsNiArMTkx
LDkgQEAgZW51bSB7CiAgICAgUFJPUF9SRUxBVEVEX1ZJRVcsCiAgICAgUFJPUF9TRVRUSU5HUywK
ICAgICBQUk9QX1VTRVJfQ09OVEVOVF9NQU5BR0VSLAorI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJ
KQorICAgIFBST1BfTkVUV09SS19TRVNTSU9OLAorI2VuZGlmCiAgICAgUFJPUF9USVRMRSwKICAg
ICBQUk9QX0VTVElNQVRFRF9MT0FEX1BST0dSRVNTLAogCkBAIC0xOTgsNyArMjA1LDkgQEAgZW51
bSB7CiAgICAgUFJPUF9aT09NX0xFVkVMLAogICAgIFBST1BfSVNfTE9BRElORywKICAgICBQUk9Q
X0lTX1BMQVlJTkdfQVVESU8sCisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogICAgIFBST1Bf
SVNfRVBIRU1FUkFMLAorI2VuZGlmCiAgICAgUFJPUF9JU19DT05UUk9MTEVEX0JZX0FVVE9NQVRJ
T04sCiAgICAgUFJPUF9BVVRPTUFUSU9OX1BSRVNFTlRBVElPTl9UWVBFLAogICAgIFBST1BfRURJ
VEFCTEUsCkBAIC0yNzMsNyArMjgyLDkgQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3UHJpdmF0ZSB7
CiAgICAgQ1N0cmluZyBhY3RpdmVVUkk7CiAgICAgYm9vbCBpc0FjdGl2ZVVSSUNoYW5nZUJsb2Nr
ZWQ7CiAgICAgYm9vbCBpc0xvYWRpbmc7CisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogICAg
IGJvb2wgaXNFcGhlbWVyYWw7CisjZW5kaWYKICAgICBib29sIGlzQ29udHJvbGxlZEJ5QXV0b21h
dGlvbjsKICAgICBXZWJLaXRBdXRvbWF0aW9uQnJvd3NpbmdDb250ZXh0UHJlc2VudGF0aW9uIGF1
dG9tYXRpb25QcmVzZW50YXRpb25UeXBlOwogCkBAIC0zMTIsNyArMzIzLDExIEBAIHN0cnVjdCBf
V2ViS2l0V2ViVmlld1ByaXZhdGUgewogCiAgICAgR1JlZlB0cjxXZWJLaXRBdXRoZW50aWNhdGlv
blJlcXVlc3Q+IGF1dGhlbnRpY2F0aW9uUmVxdWVzdDsKIAorI2lmIEVOQUJMRSgyMDIyX0dMSUJf
QVBJKQorICAgIEdSZWZQdHI8V2ViS2l0TmV0d29ya1Nlc3Npb24+IG5ldHdvcmtTZXNzaW9uOwor
I2Vsc2UKICAgICBHUmVmUHRyPFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlcj4gd2Vic2l0ZURhdGFN
YW5hZ2VyOworI2VuZGlmCiAgICAgR1JlZlB0cjxXZWJLaXRXZWJzaXRlUG9saWNpZXM+IHdlYnNp
dGVQb2xpY2llczsKIAogICAgIENTdHJpbmcgZGVmYXVsdENvbnRlbnRTZWN1cml0eVBvbGljeTsK
QEAgLTU4MSw2ICs1OTYsMTUgQEAgc3RhdGljIHZvaWQgdXNlckFnZW50Q2hhbmdlZChXZWJLaXRT
ZXR0aW5ncyogc2V0dGluZ3MsIEdQYXJhbVNwZWMqLCBXZWJLaXRXZWJWaWUKICAgICBnZXRQYWdl
KHdlYlZpZXcpLnNldEN1c3RvbVVzZXJBZ2VudChTdHJpbmc6OmZyb21VVEY4KHdlYmtpdF9zZXR0
aW5nc19nZXRfdXNlcl9hZ2VudChzZXR0aW5ncykpKTsKIH0KIAorc3RhdGljIGdib29sZWFuIHdl
YmtpdFdlYlZpZXdJc0VwaGVtZXJhbChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworI2lmIEVO
QUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIHJldHVybiB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2lz
X2VwaGVtZXJhbCh3ZWJWaWV3LT5wcml2LT5uZXR3b3JrU2Vzc2lvbi5nZXQoKSk7CisjZWxzZQor
ICAgIHJldHVybiB3ZWJWaWV3LT5wcml2LT5pc0VwaGVtZXJhbDsKKyNlbmRpZgorfQorCiAjaWYg
UExBVEZPUk0oR1RLKQogc3RhdGljIHZvaWQgZW5hYmxlQmFja0ZvcndhcmROYXZpZ2F0aW9uR2Vz
dHVyZXNDaGFuZ2VkKFdlYktpdFNldHRpbmdzKiBzZXR0aW5ncywgR1BhcmFtU3BlYyosIFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcpCiB7CkBAIC02MjYsNyArNjUwLDcgQEAgc3RhdGljIHZvaWQgd2Vi
a2l0V2ViVmlld1JlcXVlc3RGYXZpY29uKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgV2Vi
S2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSB3ZWJWaWV3LT5wcml2OwogICAgIHByaXYtPmZhdmlj
b25DYW5jZWxsYWJsZSA9IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKTsKICAgICBXZWJL
aXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZp
Y29uX2RhdGFiYXNlKHByaXYtPmNvbnRleHQuZ2V0KCkpOwotICAgIHdlYmtpdEZhdmljb25EYXRh
YmFzZUdldEZhdmljb25JbnRlcm5hbChkYXRhYmFzZSwgcHJpdi0+YWN0aXZlVVJJLmRhdGEoKSwg
cHJpdi0+aXNFcGhlbWVyYWwsIHByaXYtPmZhdmljb25DYW5jZWxsYWJsZS5nZXQoKSwgZ290RmF2
aWNvbkNhbGxiYWNrLCB3ZWJWaWV3KTsKKyAgICB3ZWJraXRGYXZpY29uRGF0YWJhc2VHZXRGYXZp
Y29uSW50ZXJuYWwoZGF0YWJhc2UsIHByaXYtPmFjdGl2ZVVSSS5kYXRhKCksIHdlYmtpdFdlYlZp
ZXdJc0VwaGVtZXJhbCh3ZWJWaWV3KSwgcHJpdi0+ZmF2aWNvbkNhbmNlbGxhYmxlLmdldCgpLCBn
b3RGYXZpY29uQ2FsbGJhY2ssIHdlYlZpZXcpOwogfQogCiBzdGF0aWMgdm9pZCB3ZWJraXRXZWJW
aWV3VXBkYXRlRmF2aWNvblVSSShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBjaGFyKiBm
YXZpY29uVVJJKQpAQCAtNzIyLDEyICs3NDYsMTcgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmll
d0NvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKICAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSog
cHJpdiA9IHdlYlZpZXctPnByaXY7CiAgICAgaWYgKHByaXYtPnJlbGF0ZWRWaWV3KSB7CiAgICAg
ICAgIHByaXYtPmNvbnRleHQgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQocHJpdi0+cmVs
YXRlZFZpZXcpOworICAgICAgICBwcml2LT5uZXR3b3JrU2Vzc2lvbiA9IHdlYmtpdF93ZWJfdmll
d19nZXRfbmV0d29ya19zZXNzaW9uKHByaXYtPnJlbGF0ZWRWaWV3KTsKKyNpZiAhRU5BQkxFKDIw
MjJfR0xJQl9BUEkpCiAgICAgICAgIHByaXYtPmlzRXBoZW1lcmFsID0gd2Via2l0X3dlYl92aWV3
X2lzX2VwaGVtZXJhbChwcml2LT5yZWxhdGVkVmlldyk7CisjZW5kaWYKICAgICAgICAgcHJpdi0+
aXNDb250cm9sbGVkQnlBdXRvbWF0aW9uID0gd2Via2l0X3dlYl92aWV3X2lzX2NvbnRyb2xsZWRf
YnlfYXV0b21hdGlvbihwcml2LT5yZWxhdGVkVmlldyk7CiAgICAgfSBlbHNlIGlmICghcHJpdi0+
Y29udGV4dCkKICAgICAgICAgcHJpdi0+Y29udGV4dCA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRf
ZGVmYXVsdCgpOworI2lmICFFTkFCTEUoMjAyMl9HTElCX0FQSSkKICAgICBlbHNlIGlmICghcHJp
di0+aXNFcGhlbWVyYWwpCiAgICAgICAgIHByaXYtPmlzRXBoZW1lcmFsID0gd2Via2l0X3dlYl9j
b250ZXh0X2lzX2VwaGVtZXJhbChwcml2LT5jb250ZXh0LmdldCgpKTsKKyNlbmRpZgogCiAgICAg
aWYgKCFwcml2LT5zZXR0aW5ncykKICAgICAgICAgcHJpdi0+c2V0dGluZ3MgPSBhZG9wdEdSZWYo
d2Via2l0X3NldHRpbmdzX25ldygpKTsKQEAgLTczNSw2ICs3NjQsMTQgQEAgc3RhdGljIHZvaWQg
d2Via2l0V2ViVmlld0NvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKICAgICBpZiAoIXByaXYt
PnVzZXJDb250ZW50TWFuYWdlcikKICAgICAgICAgcHJpdi0+dXNlckNvbnRlbnRNYW5hZ2VyID0g
YWRvcHRHUmVmKHdlYmtpdF91c2VyX2NvbnRlbnRfbWFuYWdlcl9uZXcoKSk7CiAKKyNpZiBFTkFC
TEUoMjAyMl9HTElCX0FQSSkKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKyAgICBpZiAo
cHJpdi0+aXNDb250cm9sbGVkQnlBdXRvbWF0aW9uKQorICAgICAgICBwcml2LT5uZXR3b3JrU2Vz
c2lvbiA9IHdlYmtpdFdlYkNvbnRleHRHZXROZXR3b3JrU2Vzc2lvbkZvckF1dG9tYXRpb24ocHJp
di0+Y29udGV4dC5nZXQoKSk7CisjZW5kaWYKKyAgICBpZiAoIXByaXYtPm5ldHdvcmtTZXNzaW9u
KQorICAgICAgICBwcml2LT5uZXR3b3JrU2Vzc2lvbiA9IHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25f
Z2V0X2RlZmF1bHQoKTsKKyNlbHNlCiAgICAgaWYgKHByaXYtPmlzRXBoZW1lcmFsICYmICF3ZWJr
aXRfd2ViX2NvbnRleHRfaXNfZXBoZW1lcmFsKHByaXYtPmNvbnRleHQuZ2V0KCkpKSB7CiAgICAg
ICAgIHByaXYtPndlYnNpdGVEYXRhTWFuYWdlciA9IGFkb3B0R1JlZih3ZWJraXRfd2Vic2l0ZV9k
YXRhX21hbmFnZXJfbmV3X2VwaGVtZXJhbCgpKTsKICAgICAgICAgYXV0byogY29udGV4dERhdGFN
YW5hZ2VyID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcihwcml2
LT5jb250ZXh0LmdldCgpKTsKQEAgLTc0Miw2ICs3NzksNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRX
ZWJWaWV3Q29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQogICAgICAgICBhdXRvIHByb3h5U2V0
dGluZ3MgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUoY29udGV4dERhdGFN
YW5hZ2VyKS5uZXR3b3JrUHJveHlTZXR0aW5ncygpOwogICAgICAgICB3ZWJraXRXZWJzaXRlRGF0
YU1hbmFnZXJHZXREYXRhU3RvcmUocHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKS5zZXRO
ZXR3b3JrUHJveHlTZXR0aW5ncyhXVEZNb3ZlKHByb3h5U2V0dGluZ3MpKTsKICAgICB9CisjZW5k
aWYKIAogICAgIGlmICghcHJpdi0+d2Vic2l0ZVBvbGljaWVzKQogICAgICAgICBwcml2LT53ZWJz
aXRlUG9saWNpZXMgPSBhZG9wdEdSZWYod2Via2l0X3dlYnNpdGVfcG9saWNpZXNfbmV3KCkpOwpA
QCAtODI0LDEyICs4NjIsMjEgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld1NldFByb3BlcnR5
KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElkLCBjb25zdCBHVmFsdWUKICAgICAgICAgd2Vi
Vmlldy0+cHJpdi0+dXNlckNvbnRlbnRNYW5hZ2VyID0gdXNlckNvbnRlbnRNYW5hZ2VyID8gV0VC
S0lUX1VTRVJfQ09OVEVOVF9NQU5BR0VSKHVzZXJDb250ZW50TWFuYWdlcikgOiBudWxscHRyOwog
ICAgICAgICBicmVhazsKICAgICB9CisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgY2Fz
ZSBQUk9QX05FVFdPUktfU0VTU0lPTjogeworICAgICAgICBncG9pbnRlciBuZXR3b3JrU2Vzc2lv
biA9IGdfdmFsdWVfZ2V0X29iamVjdCh2YWx1ZSk7CisgICAgICAgIHdlYlZpZXctPnByaXYtPm5l
dHdvcmtTZXNzaW9uID0gbmV0d29ya1Nlc3Npb24gPyBXRUJLSVRfTkVUV09SS19TRVNTSU9OKG5l
dHdvcmtTZXNzaW9uKSA6IG51bGxwdHI7CisgICAgICAgIGJyZWFrOworICAgIH0KKyNlbmRpZgog
ICAgIGNhc2UgUFJPUF9aT09NX0xFVkVMOgogICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3pv
b21fbGV2ZWwod2ViVmlldywgZ192YWx1ZV9nZXRfZG91YmxlKHZhbHVlKSk7CiAgICAgICAgIGJy
ZWFrOworI2lmICFFTkFCTEUoMjAyMl9HTElCX0FQSSkKICAgICBjYXNlIFBST1BfSVNfRVBIRU1F
UkFMOgogICAgICAgICB3ZWJWaWV3LT5wcml2LT5pc0VwaGVtZXJhbCA9IGdfdmFsdWVfZ2V0X2Jv
b2xlYW4odmFsdWUpOwogICAgICAgICBicmVhazsKKyNlbmRpZgogICAgIGNhc2UgUFJPUF9JU19D
T05UUk9MTEVEX0JZX0FVVE9NQVRJT046CiAgICAgICAgIHdlYlZpZXctPnByaXYtPmlzQ29udHJv
bGxlZEJ5QXV0b21hdGlvbiA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpOwogICAgICAgICBi
cmVhazsKQEAgLTg4NCw2ICs5MzEsMTEgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0dldFBy
b3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElkLCBHVmFsdWUqIHZhbHUKICAgICBj
YXNlIFBST1BfVVNFUl9DT05URU5UX01BTkFHRVI6CiAgICAgICAgIGdfdmFsdWVfc2V0X29iamVj
dCh2YWx1ZSwgd2Via2l0X3dlYl92aWV3X2dldF91c2VyX2NvbnRlbnRfbWFuYWdlcih3ZWJWaWV3
KSk7CiAgICAgICAgIGJyZWFrOworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIGNhc2Ug
UFJPUF9ORVRXT1JLX1NFU1NJT046CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwg
d2Via2l0X3dlYl92aWV3X2dldF9uZXR3b3JrX3Nlc3Npb24od2ViVmlldykpOworICAgICAgICBi
cmVhazsKKyNlbmRpZgogICAgIGNhc2UgUFJPUF9USVRMRToKICAgICAgICAgZ192YWx1ZV9zZXRf
c3RyaW5nKHZhbHVlLCB3ZWJWaWV3LT5wcml2LT50aXRsZS5kYXRhKCkpOwogICAgICAgICBicmVh
azsKQEAgLTkwNyw5ICs5NTksMTEgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0dldFByb3Bl
cnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElkLCBHVmFsdWUqIHZhbHUKICAgICBjYXNl
IFBST1BfSVNfUExBWUlOR19BVURJTzoKICAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1
ZSwgd2Via2l0X3dlYl92aWV3X2lzX3BsYXlpbmdfYXVkaW8od2ViVmlldykpOwogICAgICAgICBi
cmVhazsKKyNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAgICAgY2FzZSBQUk9QX0lTX0VQSEVN
RVJBTDoKICAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X3dlYl92aWV3
X2lzX2VwaGVtZXJhbCh3ZWJWaWV3KSk7CiAgICAgICAgIGJyZWFrOworI2VuZGlmCiAgICAgY2Fz
ZSBQUk9QX0lTX0NPTlRST0xMRURfQllfQVVUT01BVElPTjoKICAgICAgICAgZ192YWx1ZV9zZXRf
Ym9vbGVhbih2YWx1ZSwgd2Via2l0X3dlYl92aWV3X2lzX2NvbnRyb2xsZWRfYnlfYXV0b21hdGlv
bih3ZWJWaWV3KSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTA4Myw2ICsxMTM3LDIzIEBAIHN0YXRp
YyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyogd2Vi
Vmlld0NsYXNzKQogICAgICAgICAgICAgV0VCS0lUX1RZUEVfVVNFUl9DT05URU5UX01BTkFHRVIs
CiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxHUGFyYW1GbGFncz4oV0VCS0lUX1BBUkFNX1JFQURX
UklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKTsKIAorI2lmIEVOQUJMRSgyMDIyX0dMSUJf
QVBJKQorICAgIC8qKgorICAgICAqIFdlYktpdFdlYlZpZXc6bmV0d29yay1zZXNzaW9uOgorICAg
ICAqCisgICAgICogVGhlICNXZWJLaXROZXR3b3JrU2Vzc2lvbiBvZiB0aGUgdmlldworICAgICAq
CisgICAgICogU2luY2U6IDIuNDAKKyAgICAgKi8KKyAgICBzT2JqUHJvcGVydGllc1tQUk9QX05F
VFdPUktfU0VTU0lPTl09CisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoCisgICAgICAgICAg
ICAibmV0d29yay1zZXNzaW9uIiwKKyAgICAgICAgICAgIF8oIldlYlZpZXcgbmV0d29yayBzZXNz
aW9uIiksCisgICAgICAgICAgICBfKCJUaGUgV2ViS2l0TmV0d29ya1Nlc3Npb24gb2YgdGhlIHZp
ZXciKSwKKyAgICAgICAgICAgIFdFQktJVF9UWVBFX05FVFdPUktfU0VTU0lPTiwKKyAgICAgICAg
ICAgIHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihXRUJLSVRfUEFSQU1fUkVBRFdSSVRFIHwgR19Q
QVJBTV9DT05TVFJVQ1RfT05MWSkpOworI2VuZGlmCisKICAgICAvKioKICAgICAgKiBXZWJLaXRX
ZWJWaWV3OnRpdGxlOgogICAgICAqCkBAIC0xMTg4LDYgKzEyNTksNyBAQCBzdGF0aWMgdm9pZCB3
ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFz
cykKICAgICAgICAgICAgIEZBTFNFLAogICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxF
KTsKIAorI2lmICFFTkFCTEUoMjAyMl9HTElCX0FQSSkKICAgICAvKioKICAgICAgKiBXZWJLaXRX
ZWJWaWV3OmlzLWVwaGVtZXJhbDoKICAgICAgKgpAQCAtMTIxMiw2ICsxMjg0LDcgQEAgc3RhdGlj
IHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0NsYXNzKiB3ZWJW
aWV3Q2xhc3MpCiAgICAgICAgICAgICBudWxscHRyLCBudWxscHRyLAogICAgICAgICAgICAgRkFM
U0UsCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxHUGFyYW1GbGFncz4oV0VCS0lUX1BBUkFNX1JF
QURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKTsKKyNlbmRpZgogCiAgICAgLyoqCiAg
ICAgICogV2ViS2l0V2ViVmlldzppcy1jb250cm9sbGVkLWJ5LWF1dG9tYXRpb246CkBAIC0yMzYz
LDggKzI0MzYsMTIgQEAgdm9pZCB3ZWJraXRXZWJWaWV3TG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMo
V2ViS2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgY2hhciogZmEKIHsKICAgICB3ZWJraXRXZWJW
aWV3Q29tcGxldGVBdXRoZW50aWNhdGlvblJlcXVlc3Qod2ViVmlldyk7CiAKKyNpZiBFTkFCTEUo
MjAyMl9HTElCX0FQSSkKKyAgICBXZWJLaXRUTFNFcnJvcnNQb2xpY3kgdGxzRXJyb3JzUG9saWN5
ID0gd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfdGxzX2Vycm9yc19wb2xpY3kod2ViVmlldy0+
cHJpdi0+bmV0d29ya1Nlc3Npb24uZ2V0KCkpOworI2Vsc2UKICAgICBhdXRvKiB3ZWJzaXRlRGF0
YU1hbmFnZXIgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYlZp
ZXcpOwogICAgIFdlYktpdFRMU0Vycm9yc1BvbGljeSB0bHNFcnJvcnNQb2xpY3kgPSB3ZWJraXRf
d2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X3Rsc19lcnJvcnNfcG9saWN5KHdlYnNpdGVEYXRhTWFu
YWdlcik7CisjZW5kaWYKICAgICBpZiAodGxzRXJyb3JzUG9saWN5ID09IFdFQktJVF9UTFNfRVJS
T1JTX1BPTElDWV9GQUlMKSB7CiAgICAgICAgIGdib29sZWFuIHJldHVyblZhbHVlOwogICAgICAg
ICBnX3NpZ25hbF9lbWl0KHdlYlZpZXcsIHNpZ25hbHNbTE9BRF9GQUlMRURfV0lUSF9UTFNfRVJS
T1JTXSwgMCwgZmFpbGluZ1VSSSwgY2VydGlmaWNhdGUsIHRsc0Vycm9ycywgJnJldHVyblZhbHVl
KTsKQEAgLTIzODQsMTMgKzI0NjEsMTMgQEAgdm9pZCB3ZWJraXRXZWJWaWV3R2V0TG9hZERlY2lz
aW9uRm9ySWNvbihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBMaW5rSWNvbiYKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlID0g
d2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlKHdlYlZpZXctPnByaXYtPmNv
bnRleHQuZ2V0KCkpOwotICAgIHdlYmtpdEZhdmljb25EYXRhYmFzZUdldExvYWREZWNpc2lvbkZv
ckljb24oZGF0YWJhc2UsIGljb24sIGdldFBhZ2Uod2ViVmlldykucGFnZUxvYWRTdGF0ZSgpLmFj
dGl2ZVVSTCgpLCB3ZWJWaWV3LT5wcml2LT5pc0VwaGVtZXJhbCwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOworICAgIHdlYmtpdEZhdmljb25EYXRhYmFzZUdldExvYWREZWNpc2lvbkZvcklj
b24oZGF0YWJhc2UsIGljb24sIGdldFBhZ2Uod2ViVmlldykucGFnZUxvYWRTdGF0ZSgpLmFjdGl2
ZVVSTCgpLCB3ZWJraXRXZWJWaWV3SXNFcGhlbWVyYWwod2ViVmlldyksIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCB3ZWJraXRXZWJWaWV3U2V0SWNvbihXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3LCBjb25zdCBMaW5rSWNvbiYgaWNvbiwgQVBJOjpEYXRhJiBpY29uRGF0YSkK
IHsKICAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X3dlYl9jb250
ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlKHdlYlZpZXctPnByaXYtPmNvbnRleHQuZ2V0KCkpOwot
ICAgIHdlYmtpdEZhdmljb25EYXRhYmFzZVNldEljb25Gb3JQYWdlVVJMKGRhdGFiYXNlLCBpY29u
LCBpY29uRGF0YSwgZ2V0UGFnZSh3ZWJWaWV3KS5wYWdlTG9hZFN0YXRlKCkuYWN0aXZlVVJMKCks
IHdlYlZpZXctPnByaXYtPmlzRXBoZW1lcmFsKTsKKyAgICB3ZWJraXRGYXZpY29uRGF0YWJhc2VT
ZXRJY29uRm9yUGFnZVVSTChkYXRhYmFzZSwgaWNvbiwgaWNvbkRhdGEsIGdldFBhZ2Uod2ViVmll
dykucGFnZUxvYWRTdGF0ZSgpLmFjdGl2ZVVSTCgpLCB3ZWJraXRXZWJWaWV3SXNFcGhlbWVyYWwo
d2ViVmlldykpOwogfQogI2VuZGlmCiAKQEAgLTI3MDIsOSArMjc3OSwxMyBAQCB2b2lkIHdlYmtp
dFdlYlZpZXdTdWJtaXRGb3JtUmVxdWVzdChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRG
b3JtU3VibWlzc2lvbgogCiB2b2lkIHdlYmtpdFdlYlZpZXdIYW5kbGVBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVBy
b3h5KiBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSkKIHsKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQ
SSkKKyAgICBib29sIGNyZWRlbmlhbFN0b3JhZ2VFbmFibGVkID0gd2Via2l0X25ldHdvcmtfc2Vz
c2lvbl9nZXRfcGVyc2lzdGVudF9jcmVkZW50aWFsX3N0b3JhZ2VfZW5hYmxlZCh3ZWJWaWV3LT5w
cml2LT5uZXR3b3JrU2Vzc2lvbi5nZXQoKSk7CisjZWxzZQogICAgIGF1dG8qIHdlYnNpdGVEYXRh
TWFuYWdlciA9IHdlYmtpdF93ZWJfdmlld19nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIod2ViVmll
dyk7Ci0gICAgd2ViVmlldy0+cHJpdi0+YXV0aGVudGljYXRpb25SZXF1ZXN0ID0gYWRvcHRHUmVm
KHdlYmtpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdENyZWF0ZShhdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSwKLSAgICAgICAgd2ViVmlldy0+cHJpdi0+aXNFcGhlbWVyYWwsIHdlYmtpdF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcl9nZXRfcGVyc2lzdGVudF9jcmVkZW50aWFsX3N0b3JhZ2VfZW5hYmxlZCh3ZWJz
aXRlRGF0YU1hbmFnZXIpKSk7CisgICAgYm9vbCBjcmVkZW5pYWxTdG9yYWdlRW5hYmxlZCA9IHdl
YmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfcGVyc2lzdGVudF9jcmVkZW50aWFsX3N0b3Jh
Z2VfZW5hYmxlZCh3ZWJzaXRlRGF0YU1hbmFnZXIpOworI2VuZGlmCisgICAgd2ViVmlldy0+cHJp
di0+YXV0aGVudGljYXRpb25SZXF1ZXN0ID0gYWRvcHRHUmVmKHdlYmtpdEF1dGhlbnRpY2F0aW9u
UmVxdWVzdENyZWF0ZShhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSwgd2Via2l0V2ViVmlld0lzRXBo
ZW1lcmFsKHdlYlZpZXcpLCBjcmVkZW5pYWxTdG9yYWdlRW5hYmxlZCkpOwogICAgIGdib29sZWFu
IHJldHVyblZhbHVlOwogICAgIGdfc2lnbmFsX2VtaXQod2ViVmlldywgc2lnbmFsc1tBVVRIRU5U
SUNBVEVdLCAwLCB3ZWJWaWV3LT5wcml2LT5hdXRoZW50aWNhdGlvblJlcXVlc3QuZ2V0KCksICZy
ZXR1cm5WYWx1ZSk7CiB9CkBAIC0yNzQwLDcgKzI4MjEsMTEgQEAgdm9pZCB3ZWJraXRXZWJWaWV3
U2VsZWN0aW9uRGlkQ2hhbmdlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAKIFdlYktpdFdlYnNp
dGVEYXRhTWFuYWdlciogd2Via2l0V2ViVmlld0dldFdlYnNpdGVEYXRhTWFuYWdlcihXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3KQogeworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIHJldHVy
biB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcih3ZWJWaWV3
LT5wcml2LT5uZXR3b3JrU2Vzc2lvbi5nZXQoKSk7CisjZWxzZQogICAgIHJldHVybiB3ZWJWaWV3
LT5wcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCk7CisjZW5kaWYKIH0KIAogI2lmIFBMQVRG
T1JNKEdUSykKQEAgLTI4ODgsNiArMjk3Myw3IEBAIFdlYktpdFVzZXJDb250ZW50TWFuYWdlciog
d2Via2l0X3dlYl92aWV3X2dldF91c2VyX2NvbnRlbnRfbWFuYWdlcihXZWJLaXRXZWJWaWV3CiAg
ICAgcmV0dXJuIHdlYlZpZXctPnByaXYtPnVzZXJDb250ZW50TWFuYWdlci5nZXQoKTsKIH0KIAor
I2lmICFFTkFCTEUoMjAyMl9HTElCX0FQSSkKIC8qKgogICogd2Via2l0X3dlYl92aWV3X2lzX2Vw
aGVtZXJhbDoKICAqIEB3ZWJfdmlldzogYSAjV2ViS2l0V2ViVmlldwpAQCAtMjkxMCw2ICsyOTk2
LDcgQEAgZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X2lzX2VwaGVtZXJhbChXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3KQogCiAgICAgcmV0dXJuIHdlYlZpZXctPnByaXYtPmlzRXBoZW1lcmFsOwogfQor
I2VuZGlmCiAKIC8qKgogICogd2Via2l0X3dlYl92aWV3X2lzX2NvbnRyb2xsZWRfYnlfYXV0b21h
dGlvbjoKQEAgLTI5NDksNiArMzAzNiwyNCBAQCBXZWJLaXRBdXRvbWF0aW9uQnJvd3NpbmdDb250
ZXh0UHJlc2VudGF0aW9uIHdlYmtpdF93ZWJfdmlld19nZXRfYXV0b21hdGlvbl9wcmVzZQogICAg
IHJldHVybiB3ZWJWaWV3LT5wcml2LT5hdXRvbWF0aW9uUHJlc2VudGF0aW9uVHlwZTsKIH0KIAor
I2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X25l
dHdvcmtfc2Vzc2lvbjoKKyAqIEB3ZWJfdmlldzogYSAjV2ViS2l0V2ViVmlldworICoKKyAqIEdl
dCB0aGUgI1dlYktpdE5ldHdvcmtTZXNzaW9uIGFzc29jaWF0ZWQgdG8gQHdlYl92aWV3LgorICoK
KyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogYSAjV2ViS2l0TmV0d29ya1Nlc3Npb24KKyAq
CisgKiBTaW5jZTogMi40MAorICovCitXZWJLaXROZXR3b3JrU2Vzc2lvbiogd2Via2l0X3dlYl92
aWV3X2dldF9uZXR3b3JrX3Nlc3Npb24oV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldyksIG51bGxwdHIp
OworCisgICAgcmV0dXJuIHdlYlZpZXctPnByaXYtPm5ldHdvcmtTZXNzaW9uLmdldCgpOworfQor
I2Vsc2UKIC8qKgogICogd2Via2l0X3dlYl92aWV3X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcjoK
ICAqIEB3ZWJfdmlldzogYSAjV2ViS2l0V2ViVmlldwpAQCAtMjk3Miw2ICszMDc3LDcgQEAgV2Vi
S2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dlYnNpdGVfZGF0YV9t
YW5hZ2VyKFdlYktpdFdlYlZpZXcKIAogICAgIHJldHVybiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0
X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYlZpZXctPnByaXYtPmNvbnRleHQuZ2V0KCkpOwogfQor
I2VuZGlmCiAKIC8qKgogICogd2Via2l0X3dlYl92aWV3X3RyeV9jbG9zZToKQEAgLTQ0MTQsMTIg
KzQ1MjAsMjAgQEAgV2ViS2l0RG93bmxvYWQqIHdlYmtpdF93ZWJfdmlld19kb3dubG9hZF91cmko
V2ViS2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgY2hhcioKICAgICBhdXRvJiBwYWdlID0gZ2V0
UGFnZSh3ZWJWaWV3KTsKICAgICBhdXRvJiBkb3dubG9hZFByb3h5ID0gcGFnZS5wcm9jZXNzKCku
cHJvY2Vzc1Bvb2woKS5kb3dubG9hZChwYWdlLndlYnNpdGVEYXRhU3RvcmUoKSwgJnBhZ2UsIFJl
c291cmNlUmVxdWVzdCB7IFN0cmluZzo6ZnJvbVVURjgodXJpKSB9KTsKICAgICBhdXRvIGRvd25s
b2FkID0gd2Via2l0RG93bmxvYWRDcmVhdGUoZG93bmxvYWRQcm94eSwgd2ViVmlldyk7CisjaWYg
RU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgZG93bmxvYWRQcm94eS5zZXREaWRTdGFydENhbGxi
YWNrKFtzZXNzaW9uID0gR1JlZlB0cjxXZWJLaXROZXR3b3JrU2Vzc2lvbj4geyB3ZWJWaWV3LT5w
cml2LT5uZXR3b3JrU2Vzc2lvbiB9LCBkb3dubG9hZCA9IGRvd25sb2FkLmdldCgpXShhdXRvKiBk
b3dubG9hZFByb3h5KSB7CisjZWxzZQogICAgIGRvd25sb2FkUHJveHkuc2V0RGlkU3RhcnRDYWxs
YmFjayhbY29udGV4dCA9IEdSZWZQdHI8V2ViS2l0V2ViQ29udGV4dD4geyB3ZWJWaWV3LT5wcml2
LT5jb250ZXh0IH0sIGRvd25sb2FkID0gZG93bmxvYWQuZ2V0KCldKGF1dG8qIGRvd25sb2FkUHJv
eHkpIHsKKyNlbmRpZgogICAgICAgICBpZiAoIWRvd25sb2FkUHJveHkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAKICAgICAgICAgd2Via2l0RG93bmxvYWRTdGFydGVkKGRvd25sb2FkKTsKKyNpZiBF
TkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICAgICAgd2Via2l0TmV0d29ya1Nlc3Npb25Eb3dubG9h
ZFN0YXJ0ZWQoc2Vzc2lvbi5nZXQoKSwgZG93bmxvYWQpOworI2Vsc2UKICAgICAgICAgd2Via2l0
V2ViQ29udGV4dERvd25sb2FkU3RhcnRlZChjb250ZXh0LmdldCgpLCBkb3dubG9hZCk7CisjZW5k
aWYKICAgICB9KTsKIAogICAgIHJldHVybiBkb3dubG9hZC5sZWFrUmVmKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmguaW4gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmguaW4KaW5kZXgg
Njc1N2FmMzRiNTQxLi43NmY1OTdlNTU0ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXcuaC5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmguaW4KQEAgLTU0LDYgKzU0LDEwIEBACiAj
aW5jbHVkZSA8QEFQSV9JTkNMVURFX1BSRUZJWEAvV2ViS2l0V2Vic2l0ZVBvbGljaWVzLmg+CiAj
aW5jbHVkZSA8QEFQSV9JTkNMVURFX1BSRUZJWEAvV2ViS2l0V2luZG93UHJvcGVydGllcy5oPgog
CisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisjaW5jbHVkZSA8QEFQSV9JTkNMVURFX1BSRUZJ
WEAvV2ViS2l0TmV0d29ya1Nlc3Npb24uaD4KKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oR1RLKQog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQmFzZS5oPgogI2luY2x1ZGUgPHdlYmtpdC9XZWJL
aXRDb2xvckNob29zZXJSZXF1ZXN0Lmg+CkBAIC00MzIsOCArNDM2LDEwIEBAIFdFQktJVF9BUEkg
V2ViS2l0V2ViVmlld0JhY2tlbmQgKgogd2Via2l0X3dlYl92aWV3X2dldF9iYWNrZW5kICAgICAg
ICAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcp
OwogI2VuZGlmCiAKKyNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiBXRUJLSVRfQVBJIGdib29s
ZWFuCiB3ZWJraXRfd2ViX3ZpZXdfaXNfZXBoZW1lcmFsICAgICAgICAgICAgICAgICAgICAgICAg
IChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7CisjZW5kaWYKIAogV0VCS0lU
X0FQSSBnYm9vbGVhbgogd2Via2l0X3dlYl92aWV3X2lzX2NvbnRyb2xsZWRfYnlfYXV0b21hdGlv
biAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcpOwpAQCAtNDQx
LDggKzQ0NywxMyBAQCB3ZWJraXRfd2ViX3ZpZXdfaXNfY29udHJvbGxlZF9ieV9hdXRvbWF0aW9u
ICAgICAgICAgIChXZWJLaXRXZWJWaWV3CiBXRUJLSVRfQVBJIFdlYktpdEF1dG9tYXRpb25Ccm93
c2luZ0NvbnRleHRQcmVzZW50YXRpb24KIHdlYmtpdF93ZWJfdmlld19nZXRfYXV0b21hdGlvbl9w
cmVzZW50YXRpb25fdHlwZSAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3
KTsKIAorI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorV0VCS0lUX0FQSSBXZWJLaXROZXR3b3Jr
U2Vzc2lvbiAqCit3ZWJraXRfd2ViX3ZpZXdfZ2V0X25ldHdvcmtfc2Vzc2lvbiAgICAgICAgICAg
ICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7CisjZWxzZQogV0VC
S0lUX0FQSSBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKgogd2Via2l0X3dlYl92aWV3X2dldF93
ZWJzaXRlX2RhdGFfbWFuYWdlciAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAg
ICAqd2ViX3ZpZXcpOworI2VuZGlmCiAKIFdFQktJVF9BUEkgV2ViS2l0V2ViQ29udGV4dCAqCiB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQgICAgICAgICAgICAgICAgICAgICAgICAgIChXZWJL
aXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmNw
cAppbmRleCAzMzk1OTM0OTY5MGQuLjdhMWU1MjdiNWM2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0YU1hbmFn
ZXIuY3BwCkBAIC05NCwxMSArOTQsMTEgQEAgc3RydWN0IF9XZWJLaXRXZWJzaXRlRGF0YU1hbmFn
ZXJQcml2YXRlIHsKICAgICBHVW5pcXVlUHRyPGNoYXI+IGJhc2VEYXRhRGlyZWN0b3J5OwogICAg
IEdVbmlxdWVQdHI8Y2hhcj4gYmFzZUNhY2hlRGlyZWN0b3J5OwogCisjaWYgIUVOQUJMRSgyMDIy
X0dMSUJfQVBJKQogICAgIFdlYktpdFRMU0Vycm9yc1BvbGljeSB0bHNFcnJvcnNQb2xpY3k7CiAK
ICAgICBHUmVmUHRyPFdlYktpdENvb2tpZU1hbmFnZXI+IGNvb2tpZU1hbmFnZXI7CiAKLSNpZiAh
RU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAgICAgLy8gVGhlc2UgbWFudWFsIGRpcmVjdG9yeSBvdmVy
cmlkZXMgYXJlIGRlcHJlY2F0ZWQuIFBsZWFzZSBkb24ndCBhZGQgbW9yZS4KICAgICBHVW5pcXVl
UHRyPGNoYXI+IGxvY2FsU3RvcmFnZURpcmVjdG9yeTsKICAgICBHVW5pcXVlUHRyPGNoYXI+IGRp
c2tDYWNoZURpcmVjdG9yeTsKQEAgLTIxNywxMiArMjE3LDEyIEBAIHN0YXRpYyB2b2lkIHdlYmtp
dFdlYnNpdGVEYXRhTWFuYWdlclNldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJv
cElELCBjCiAgICAgfQogfQogCisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogc3RhdGljIHZv
aWQgd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyQ29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQog
ewogICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9wYXJlbnRf
Y2xhc3MpLT5jb25zdHJ1Y3RlZChvYmplY3QpOwogCiAgICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5h
Z2VyUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9XRUJTSVRFX0RBVEFfTUFOQUdFUihvYmplY3QpLT5w
cml2OwotI2lmICFFTkFCTEUoMjAyMl9HTElCX0FQSSkKICAgICBpZiAocHJpdi0+YmFzZURhdGFE
aXJlY3RvcnkpIHsKICAgICAgICAgaWYgKCFwcml2LT5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkpCiAg
ICAgICAgICAgICBwcml2LT5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkucmVzZXQoZ19idWlsZF9maWxl
bmFtZShwcml2LT5iYXNlRGF0YURpcmVjdG9yeS5nZXQoKSwgImxvY2Fsc3RvcmFnZSIsIG51bGxw
dHIpKTsKQEAgLTI0NiwyMiArMjQ2LDIzIEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYnNpdGVEYXRh
TWFuYWdlckNvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKICAgICAgICAgaWYgKCFwcml2LT5k
b21DYWNoZURpcmVjdG9yeSkKICAgICAgICAgICAgIHByaXYtPmRvbUNhY2hlRGlyZWN0b3J5LnJl
c2V0KGdfYnVpbGRfZmlsZW5hbWUocHJpdi0+YmFzZUNhY2hlRGlyZWN0b3J5LmdldCgpLCAiQ2Fj
aGVTdG9yYWdlIiwgbnVsbHB0cikpOwogICAgIH0KLSNlbmRpZgogCiAgICAgcHJpdi0+dGxzRXJy
b3JzUG9saWN5ID0gV0VCS0lUX1RMU19FUlJPUlNfUE9MSUNZX0ZBSUw7CiAgICAgaWYgKHByaXYt
PndlYnNpdGVEYXRhU3RvcmUpCiAgICAgICAgIHByaXYtPndlYnNpdGVEYXRhU3RvcmUtPnNldEln
bm9yZVRMU0Vycm9ycyhmYWxzZSk7CiB9CisjZW5kaWYKIAogc3RhdGljIHZvaWQgd2Via2l0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyX2NsYXNzX2luaXQoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyQ2xh
c3MqIGZpbmRDbGFzcykKIHsKICAgICB3ZWJraXRJbml0aWFsaXplKCk7CiAKICAgICBHT2JqZWN0
Q2xhc3MqIGdPYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGZpbmRDbGFzcyk7Ci0KICAgICBn
T2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFBy
b3BlcnR5OwogICAgIGdPYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0V2Vic2l0ZURh
dGFNYW5hZ2VyU2V0UHJvcGVydHk7CisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogICAgIGdP
YmplY3RDbGFzcy0+Y29uc3RydWN0ZWQgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJDb25zdHJ1
Y3RlZDsKKyNlbmRpZgogCiAgICAgLyoqCiAgICAgICogV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2Vy
OmJhc2UtZGF0YS1kaXJlY3Rvcnk6CkBAIC01MDUsMTIgKzUwNiwyMyBAQCBXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmUmIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShXZWJLaXRX
ZWJzaXRlRGF0YQogICAgICAgICAgICAgY29uZmlndXJhdGlvbi0+c2V0Q2FjaGVTdG9yYWdlRGly
ZWN0b3J5KEZpbGVTeXN0ZW06OnN0cmluZ0Zyb21GaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocHJp
di0+ZG9tQ2FjaGVEaXJlY3RvcnkuZ2V0KCkpKTsKICNlbmRpZgogICAgICAgICBwcml2LT53ZWJz
aXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGUoV1RGTW92ZShj
b25maWd1cmF0aW9uKSwgUEFMOjpTZXNzaW9uSUQ6OmdlbmVyYXRlUGVyc2lzdGVudFNlc3Npb25J
RCgpKTsKKyNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAgICAgICAgIHByaXYtPndlYnNpdGVE
YXRhU3RvcmUtPnNldElnbm9yZVRMU0Vycm9ycyhwcml2LT50bHNFcnJvcnNQb2xpY3kgPT0gV0VC
S0lUX1RMU19FUlJPUlNfUE9MSUNZX0lHTk9SRSk7CisjZW5kaWYKICAgICB9CiAKICAgICByZXR1
cm4gKnByaXYtPndlYnNpdGVEYXRhU3RvcmU7CiB9CiAKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQ
SSkKK1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyQ3Jl
YXRlKEdVbmlxdWVQdHI8Y2hhcj4mJiBiYXNlRGF0YURpcmVjdG9yeSwgR1VuaXF1ZVB0cjxjaGFy
PiYmIGJhc2VDYWNoZURpcmVjdG9yeSkKK3sKKyAgICBhdXRvKiBtYW5hZ2VyID0gV0VCS0lUX1dF
QlNJVEVfREFUQV9NQU5BR0VSKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJTSVRFX0RBVEFf
TUFOQUdFUiwgbnVsbHB0cikpOworICAgIG1hbmFnZXItPnByaXYtPmJhc2VEYXRhRGlyZWN0b3J5
ID0gV1RGTW92ZShiYXNlRGF0YURpcmVjdG9yeSk7CisgICAgbWFuYWdlci0+cHJpdi0+YmFzZUNh
Y2hlRGlyZWN0b3J5ID0gV1RGTW92ZShiYXNlQ2FjaGVEaXJlY3RvcnkpOworICAgIHJldHVybiBt
YW5hZ2VyOworfQorI2Vsc2UKIC8qKgogICogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX25l
dzoKICAqIEBmaXJzdF9vcHRpb25fbmFtZTogbmFtZSBvZiB0aGUgZmlyc3Qgb3B0aW9uIHRvIHNl
dApAQCAtNTQ5LDYgKzU2MSw3IEBAIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogd2Via2l0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyX25ld19lcGhlbWVyYWwoKQogewogICAgIHJldHVybiBXRUJLSVRf
V0VCU0lURV9EQVRBX01BTkFHRVIoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQlNJVEVfREFU
QV9NQU5BR0VSLCAiaXMtZXBoZW1lcmFsIiwgVFJVRSwgbnVsbHB0cikpOwogfQorI2VuZGlmCiAK
IC8qKgogICogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2lzX2VwaGVtZXJhbDoKQEAgLTgz
OCw3ICs4NTEsNiBAQCBjb25zdCBnY2hhciogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dl
dF9kb21fY2FjaGVfZGlyZWN0b3J5KFdlYktpdFdlYnNpdGVEYQogICAgICAgICBwcml2LT5kb21D
YWNoZURpcmVjdG9yeS5yZXNldChnX3N0cmR1cChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRl
ZmF1bHRDYWNoZVN0b3JhZ2VEaXJlY3RvcnkoKS51dGY4KCkuZGF0YSgpKSk7CiAgICAgcmV0dXJu
IHByaXYtPmRvbUNhY2hlRGlyZWN0b3J5LmdldCgpOwogfQotI2VuZGlmCiAKIC8qKgogICogd2Vi
a2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9jb29raWVfbWFuYWdlcjoKQEAgLTEwMTUsNiAr
MTAyNyw3IEBAIHZvaWQgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX3NldF9uZXR3b3JrX3By
b3h5X3NldHRpbmdzKFdlYktpdFdlYnNpdGVEYXRhTWFuCiAgICAgICAgIGJyZWFrOwogICAgIH0K
IH0KKyNlbmRpZgogCiBzdGF0aWMgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdG9XZWJzaXRl
RGF0YVR5cGVzKFdlYktpdFdlYnNpdGVEYXRhVHlwZXMgdHlwZXMpCiB7CkBAIC0xMjQ3LDYgKzEy
NjAsNyBAQCBzdHJ1Y3QgX1dlYktpdElUUEZpcnN0UGFydHkgewogICAgIGludCByZWZlcmVuY2VD
b3VudCB7IDEgfTsKIH07CiAKKyNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAvKioKICAqIHdl
YmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9zZXRfbWVtb3J5X3ByZXNzdXJlX3NldHRpbmdzOgog
ICogQHNldHRpbmdzOiBhIFdlYktpdE1lbW9yeVByZXNzdXJlU2V0dGluZ3MuCkBAIC0xMjcyLDYg
KzEyODYsNyBAQCB2b2lkIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9zZXRfbWVtb3J5X3By
ZXNzdXJlX3NldHRpbmdzKFdlYktpdE1lbW9yeVByZXNzdQogICAgIHN0ZDo6b3B0aW9uYWw8TWVt
b3J5UHJlc3N1cmVIYW5kbGVyOjpDb25maWd1cmF0aW9uPiBjb25maWcgPSBzZXR0aW5ncyA/IHN0
ZDo6bWFrZV9vcHRpb25hbCh3ZWJraXRNZW1vcnlQcmVzc3VyZVNldHRpbmdzR2V0TWVtb3J5UHJl
c3N1cmVIYW5kbGVyQ29uZmlndXJhdGlvbihzZXR0aW5ncykpIDogc3RkOjpudWxsb3B0OwogICAg
IFdlYlByb2Nlc3NQb29sOjpzZXROZXR3b3JrUHJvY2Vzc01lbW9yeVByZXNzdXJlSGFuZGxlckNv
bmZpZ3VyYXRpb24oY29uZmlnKTsKIH0KKyNlbmRpZgogCiBHX0RFRklORV9CT1hFRF9UWVBFKFdl
YktpdElUUEZpcnN0UGFydHksIHdlYmtpdF9pdHBfZmlyc3RfcGFydHksIHdlYmtpdF9pdHBfZmly
c3RfcGFydHlfcmVmLCB3ZWJraXRfaXRwX2ZpcnN0X3BhcnR5X3VucmVmKQogCkBAIC0xNDEwLDcg
KzE0MjUsNyBAQCBzdHJ1Y3QgX1dlYktpdElUUFRoaXJkUGFydHkgewogCiBHX0RFRklORV9CT1hF
RF9UWVBFKFdlYktpdElUUFRoaXJkUGFydHksIHdlYmtpdF9pdHBfdGhpcmRfcGFydHksIHdlYmtp
dF9pdHBfdGhpcmRfcGFydHlfcmVmLCB3ZWJraXRfaXRwX3RoaXJkX3BhcnR5X3VucmVmKQogCi1z
dGF0aWMgV2ViS2l0SVRQVGhpcmRQYXJ0eSogd2Via2l0SVRQVGhpcmRQYXJ0eUNyZWF0ZShXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhJiYgZGF0YSkKK1dlYktp
dElUUFRoaXJkUGFydHkqIHdlYmtpdElUUFRoaXJkUGFydHlDcmVhdGUoV2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YSYmIGRhdGEpCiB7CiAgICAgYXV0byogdGhp
cmRQYXJ0eSA9IHN0YXRpY19jYXN0PFdlYktpdElUUFRoaXJkUGFydHkqPihmYXN0TWFsbG9jKHNp
emVvZihXZWJLaXRJVFBUaGlyZFBhcnR5KSkpOwogICAgIG5ldyAodGhpcmRQYXJ0eSkgV2ViS2l0
SVRQVGhpcmRQYXJ0eShXVEZNb3ZlKGRhdGEpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5oLmluIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmguaW4K
aW5kZXggNDE0ODcyMmE3NjliLi5mMmE5ZTk0ZTJhN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5oLmluCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdl
ci5oLmluCkBAIC03NywxMSArNzcsMTMgQEAgc3RydWN0IF9XZWJLaXRXZWJzaXRlRGF0YU1hbmFn
ZXJDbGFzcyB7CiBXRUJLSVRfQVBJIEdUeXBlCiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJf
Z2V0X3R5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOwogCisjaWYg
IUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogV0VCS0lUX0FQSSBXZWJLaXRXZWJzaXRlRGF0YU1hbmFn
ZXIgKgogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX25ldyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChjb25zdCBnY2hhciAgICAgICAgICAgICAgKmZpcnN0X29wdGlv
bl9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAuLi4pOwogV0VCS0lUX0FQSSBXZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXIgKgogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX25ld19lcGhlbWVyYWwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKTsKKyNlbmRpZgogCiBXRUJLSVRfQVBJIGdi
b29sZWFuCiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfaXNfZXBoZW1lcmFsICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogbWFuYWdlcik7
CkBAIC0xMTksNyArMTIxLDYgQEAgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9zZXJ2
aWNlX3dvcmtlcl9yZWdpc3RyYXRpb25zX2RpcmVjdG9yeShXZWJLaXRXZWIKIAogV0VCS0lUX0RF
UFJFQ0FURUQgY29uc3QgZ2NoYXIgKgogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9k
b21fY2FjaGVfZGlyZWN0b3J5ICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJzaXRlRGF0YU1h
bmFnZXIgKm1hbmFnZXIpOwotI2VuZGlmCiAKIFdFQktJVF9BUEkgV2ViS2l0Q29va2llTWFuYWdl
ciAqCiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Nvb2tpZV9tYW5hZ2VyICAgICAg
ICAgICAgICAgICAgICAgICAgKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlcik7CkBA
IC0xNDksNiArMTUwLDcgQEAgV0VCS0lUX0FQSSB2b2lkCiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21h
bmFnZXJfc2V0X25ldHdvcmtfcHJveHlfc2V0dGluZ3MgICAgICAgICAgICAgICAgKFdlYktpdFdl
YnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0TmV0d29ya1By
b3h5TW9kZSAgICBwcm94eV9tb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXROZXR3b3JrUHJveHlT
ZXR0aW5ncyAqcHJveHlfc2V0dGluZ3MpOworI2VuZGlmCiAKIFdFQktJVF9BUEkgdm9pZAogd2Vi
a2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2ZldGNoICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIsCkBAIC0xODYsOCAr
MTg4LDEwIEBAIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9jbGVhcl9maW5pc2ggICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKFdlYktpdFdlCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNS
ZXN1bHQgICAgICAgICAgICAgKnJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAg
ICAgICAgICAgICoqZXJyb3IpOwogCisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogV0VCS0lU
X0FQSSB2b2lkCiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X21lbW9yeV9wcmVzc3Vy
ZV9zZXR0aW5ncyAgICAgICAgICAgICAgIChXZWJLaXRNZW1vcnlQcmVzc3VyZVNldHRpbmdzICpz
ZXR0aW5ncyk7CisjZW5kaWYKIAogCiAjZGVmaW5lIFdFQktJVF9UWVBFX0lUUF9GSVJTVF9QQVJU
WSAgICh3ZWJraXRfaXRwX2ZpcnN0X3BhcnR5X2dldF90eXBlKCkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJQcml2
YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXJQcml2YXRlLmgKaW5kZXggZmM5ZTgyMjZmYmI4Li44NjZhY2FhNzcwMDYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRh
TWFuYWdlclByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9X
ZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJQcml2YXRlLmgKQEAgLTE5LDYgKzE5LDEyIEBACiAKICNw
cmFnbWEgb25jZQogCisjaW5jbHVkZSAiV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgi
CiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZS5oIgorI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlx
dWVQdHIuaD4KIAorI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorV2ViS2l0V2Vic2l0ZURhdGFN
YW5hZ2VyKiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJDcmVhdGUoR1VuaXF1ZVB0cjxjaGFyPiYm
LCBHVW5pcXVlUHRyPGNoYXI+JiYpOworI2VuZGlmCiBXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmUm
IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShXZWJLaXRXZWJzaXRlRGF0YU1h
bmFnZXIqKTsKK1dlYktpdElUUFRoaXJkUGFydHkqIHdlYmtpdElUUFRoaXJkUGFydHlDcmVhdGUo
V2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhJiYp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvd2Via2l0Lmgu
aW4gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi93ZWJraXQuaC5pbgppbmRleCA0
N2I2NWJjN2YwZDEuLjM1OGU2NWMwOTViZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2dsaWIvd2Via2l0LmguaW4KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2dsaWIvd2Via2l0LmguaW4KQEAgLTc2LDYgKzc2LDkgQEAKICNpbmNsdWRlIDxAQVBJX0lO
Q0xVREVfUFJFRklYQC9XZWJLaXROYXZpZ2F0aW9uQWN0aW9uLmg+CiAjaW5jbHVkZSA8QEFQSV9J
TkNMVURFX1BSRUZJWEAvV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLmg+CiAjaW5jbHVk
ZSA8QEFQSV9JTkNMVURFX1BSRUZJWEAvV2ViS2l0TmV0d29ya1Byb3h5U2V0dGluZ3MuaD4KKyNp
ZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyNpbmNsdWRlIDxAQVBJX0lOQ0xVREVfUFJFRklYQC9X
ZWJLaXROZXR3b3JrU2Vzc2lvbi5oPgorI2VuZGlmCiAjaW5jbHVkZSA8QEFQSV9JTkNMVURFX1BS
RUZJWEAvV2ViS2l0Tm90aWZpY2F0aW9uLmg+CiAjaW5jbHVkZSA8QEFQSV9JTkNMVURFX1BSRUZJ
WEAvV2ViS2l0Tm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3QuaD4KICNpbmNsdWRlIDxAQVBJ
X0lOQ0xVREVfUFJFRklYQC9XZWJLaXRPcHRpb25NZW51Lmg+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdHdGsuY3BwIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3R3RrLmNwcAppbmRleCAxMDM3MmRl
MzhkMGIuLjBjMDRmMWRkZGY5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJWaWV3R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdHdGsuY3BwCkBAIC0zNTEsNyArMzUxLDkgQEAgR3RrV2lk
Z2V0KiB3ZWJraXRfd2ViX3ZpZXdfbmV3X3dpdGhfY29udGV4dChXZWJLaXRXZWJDb250ZXh0KiBj
b250ZXh0KQogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfQ09OVEVYVChj
b250ZXh0KSwgMCk7CiAKICAgICByZXR1cm4gR1RLX1dJREdFVChnX29iamVjdF9uZXcoV0VCS0lU
X1RZUEVfV0VCX1ZJRVcsCisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogICAgICAgICAiaXMt
ZXBoZW1lcmFsIiwgd2Via2l0X3dlYl9jb250ZXh0X2lzX2VwaGVtZXJhbChjb250ZXh0KSwKKyNl
bmRpZgogICAgICAgICAid2ViLWNvbnRleHQiLCBjb250ZXh0LAogICAgICAgICBudWxscHRyKSk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdl
YlZpZXdXUEUuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRXZWJW
aWV3V1BFLmNwcAppbmRleCBkNGEzODFiZGU2OGIuLjQ2ODMzZjMzNTU2NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRXZWJWaWV3V1BFLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYlZpZXdXUEUuY3BwCkBA
IC0xMDksNyArMTA5LDkgQEAgV2ViS2l0V2ViVmlldyogd2Via2l0X3dlYl92aWV3X25ld193aXRo
X2NvbnRleHQoV2ViS2l0V2ViVmlld0JhY2tlbmQqIGJhY2tlbmQsIFcKIAogICAgIHJldHVybiBX
RUJLSVRfV0VCX1ZJRVcoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9WSUVXLAogICAgICAg
ICAiYmFja2VuZCIsIGJhY2tlbmQsCisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogICAgICAg
ICAiaXMtZXBoZW1lcmFsIiwgd2Via2l0X3dlYl9jb250ZXh0X2lzX2VwaGVtZXJhbChjb250ZXh0
KSwKKyNlbmRpZgogICAgICAgICAid2ViLWNvbnRleHQiLCBjb250ZXh0LAogICAgICAgICBudWxs
cHRyKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0
YS9XZWJzaXRlRGF0YVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCmluZGV4IGU0NDUyNjVjNzk1My4uNDUwMGZkNmYwYjYy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRl
RGF0YVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9X
ZWJzaXRlRGF0YVN0b3JlLmNwcApAQCAtMjUzLDcgKzI1Myw3IEBAIFNPQXV0aG9yaXphdGlvbkNv
b3JkaW5hdG9yJiBXZWJzaXRlRGF0YVN0b3JlOjpzb0F1dGhvcml6YXRpb25Db29yZGluYXRvcihj
b25zdCBXCiAKIHN0YXRpYyBSZWY8TmV0d29ya1Byb2Nlc3NQcm94eT4gbmV0d29ya1Byb2Nlc3NG
b3JTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSNpZiBQTEFURk9STShHVEsp
IHx8IFBMQVRGT1JNKFdQRSkKKyNpZiAoKFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKSkg
JiYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKSkKICAgICBpZiAoc2Vzc2lvbklELmlzRXBoZW1lcmFs
KCkpIHsKICAgICAgICAgLy8gUmV1c2UgYSBwcmV2aW91cyBwZXJzaXN0ZW50IHNlc3Npb24gbmV0
d29yayBwcm9jZXNzIGZvciBlcGhlbWVyYWwgc2Vzc2lvbnMuCiAgICAgICAgIGZvciAoYXV0byog
ZGF0YVN0b3JlIDogYWxsRGF0YVN0b3JlcygpLnZhbHVlcygpKSB7CmRpZmYgLS1naXQgYS9Ub29s
cy9NaW5pQnJvd3Nlci9ndGsvQnJvd3NlclRhYi5jIGIvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL0Jy
b3dzZXJUYWIuYwppbmRleCBjMDIyNDdhZWVmZjYuLjhhNzkyODdmNDQyMCAxMDA2NDQKLS0tIGEv
VG9vbHMvTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJUYWIuYworKysgYi9Ub29scy9NaW5pQnJvd3Nl
ci9ndGsvQnJvd3NlclRhYi5jCkBAIC0yMTgsNyArMjE4LDExIEBAIHN0YXRpYyB2b2lkIHRsc0Vy
cm9yc0RpYWxvZ1Jlc3BvbnNlKEd0a1dpZGdldCAqZGlhbG9nLCBnaW50IHJlc3BvbnNlLCBCcm93
c2VyVGFiCiAgICAgICAgIEdUbHNDZXJ0aWZpY2F0ZSAqY2VydGlmaWNhdGUgPSAoR1Rsc0NlcnRp
ZmljYXRlICopZ19vYmplY3RfZ2V0X2RhdGEoR19PQkpFQ1QoZGlhbG9nKSwgImNlcnRpZmljYXRl
Iik7CiAjaWYgU09VUF9DSEVDS19WRVJTSU9OKDIsIDkxLCAwKQogICAgICAgICBHVXJpICp1cmkg
PSBnX3VyaV9wYXJzZShmYWlsaW5nVVJJLCBTT1VQX0hUVFBfVVJJX0ZMQUdTLCBOVUxMKTsKKyNp
ZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCA5OCwgNSkKKyAgICAgICAgd2Via2l0X25ldHdvcmtfc2Vz
c2lvbl9hbGxvd190bHNfY2VydGlmaWNhdGVfZm9yX2hvc3Qod2Via2l0X3dlYl92aWV3X2dldF9u
ZXR3b3JrX3Nlc3Npb24odGFiLT53ZWJWaWV3KSwgY2VydGlmaWNhdGUsIGdfdXJpX2dldF9ob3N0
KHVyaSkpOworI2Vsc2UKICAgICAgICAgd2Via2l0X3dlYl9jb250ZXh0X2FsbG93X3Rsc19jZXJ0
aWZpY2F0ZV9mb3JfaG9zdCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQodGFiLT53ZWJWaWV3
KSwgY2VydGlmaWNhdGUsIGdfdXJpX2dldF9ob3N0KHVyaSkpOworI2VuZGlmCiAgICAgICAgIGdf
dXJpX3VucmVmKHVyaSk7CiAjZWxzZQogICAgICAgICBTb3VwVVJJICp1cmkgPSBzb3VwX3VyaV9u
ZXcoZmFpbGluZ1VSSSk7CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9ndGsvQnJvd3Nl
cldpbmRvdy5jIGIvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJXaW5kb3cuYwppbmRleCA4
ODE2MDljOWZlOGYuLjM3MDEwMDMyZmZiOSAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIv
Z3RrL0Jyb3dzZXJXaW5kb3cuYworKysgYi9Ub29scy9NaW5pQnJvd3Nlci9ndGsvQnJvd3Nlcldp
bmRvdy5jCkBAIC00MCw2ICs0MCw5IEBAIHN0cnVjdCBfQnJvd3NlcldpbmRvdyB7CiAgICAgR3Rr
QXBwbGljYXRpb25XaW5kb3cgcGFyZW50OwogCiAgICAgV2ViS2l0V2ViQ29udGV4dCAqd2ViQ29u
dGV4dDsKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCA5OCwgMCkKKyAgICBXZWJLaXROZXR3b3Jr
U2Vzc2lvbiAqbmV0d29ya1Nlc3Npb247CisjZW5kaWYKIAogICAgIEd0a1dpZGdldCAqbWFpbkJv
eDsKICAgICBHdGtXaWRnZXQgKnRvb2xiYXI7CkBAIC0xNTksNyArMTYyLDExIEBAIHN0YXRpYyB2
b2lkIHdlYlZpZXdUaXRsZUNoYW5nZWQoV2ViS2l0V2ViVmlldyAqd2ViVmlldywgR1BhcmFtU3Bl
YyAqcHNwZWMsIEJyb3dzCiAgICAgY2hhciAqcHJpdmF0ZVRpdGxlID0gTlVMTDsKICAgICBpZiAo
d2Via2l0X3dlYl92aWV3X2lzX2NvbnRyb2xsZWRfYnlfYXV0b21hdGlvbih3ZWJWaWV3KSkKICAg
ICAgICAgcHJpdmF0ZVRpdGxlID0gZ19zdHJkdXBfcHJpbnRmKCJbQXV0b21hdGlvbl0gJXMiLCB0
aXRsZSk7CisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgOTgsIDApCisgICAgZWxzZSBpZiAod2Vi
a2l0X25ldHdvcmtfc2Vzc2lvbl9pc19lcGhlbWVyYWwod2Via2l0X3dlYl92aWV3X2dldF9uZXR3
b3JrX3Nlc3Npb24od2ViVmlldykpKQorI2Vsc2UKICAgICBlbHNlIGlmICh3ZWJraXRfd2ViX3Zp
ZXdfaXNfZXBoZW1lcmFsKHdlYlZpZXcpKQorI2VuZGlmCiAgICAgICAgIHByaXZhdGVUaXRsZSA9
IGdfc3RyZHVwX3ByaW50ZigiW1ByaXZhdGVdICVzIiwgdGl0bGUpOwogICAgIGd0a193aW5kb3df
c2V0X3RpdGxlKEdUS19XSU5ET1cod2luZG93KSwgcHJpdmF0ZVRpdGxlID8gcHJpdmF0ZVRpdGxl
IDogdGl0bGUpOwogICAgIGdfZnJlZShwcml2YXRlVGl0bGUpOwpAQCAtMTg1LDkgKzE5Miw5IEBA
IHN0YXRpYyB2b2lkIHdlYlZpZXdMb2FkUHJvZ3Jlc3NDaGFuZ2VkKFdlYktpdFdlYlZpZXcgKndl
YlZpZXcsIEdQYXJhbVNwZWMgKnBzcGVjCiAgICAgfQogfQogCisjaWYgIUdUS19DSEVDS19WRVJT
SU9OKDMsIDk4LCAwKQogc3RhdGljIHZvaWQgZG93bmxvYWRTdGFydGVkKFdlYktpdFdlYkNvbnRl
eHQgKndlYkNvbnRleHQsIFdlYktpdERvd25sb2FkICpkb3dubG9hZCwgQnJvd3NlcldpbmRvdyAq
d2luZG93KQogewotI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigzLCA5OCwgMCkKICAgICBpZiAoIXdp
bmRvdy0+ZG93bmxvYWRzQmFyKSB7CiAgICAgICAgIHdpbmRvdy0+ZG93bmxvYWRzQmFyID0gYnJv
d3Nlcl9kb3dubG9hZHNfYmFyX25ldygpOwogICAgICAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RL
X0JPWCh3aW5kb3ctPm1haW5Cb3gpLCB3aW5kb3ctPmRvd25sb2Fkc0JhciwgRkFMU0UsIEZBTFNF
LCAwKTsKQEAgLTE5Niw4ICsyMDMsOCBAQCBzdGF0aWMgdm9pZCBkb3dubG9hZFN0YXJ0ZWQoV2Vi
S2l0V2ViQ29udGV4dCAqd2ViQ29udGV4dCwgV2ViS2l0RG93bmxvYWQgKmRvd25sbwogICAgICAg
ICBndGtfd2lkZ2V0X3Nob3cod2luZG93LT5kb3dubG9hZHNCYXIpOwogICAgIH0KICAgICBicm93
c2VyX2Rvd25sb2Fkc19iYXJfYWRkX2Rvd25sb2FkKEJST1dTRVJfRE9XTkxPQURTX0JBUih3aW5k
b3ctPmRvd25sb2Fkc0JhciksIGRvd25sb2FkKTsKLSNlbmRpZgogfQorI2VuZGlmCiAKIHN0YXRp
YyB2b2lkIGJyb3dzZXJXaW5kb3dIaXN0b3J5SXRlbUFjdGl2YXRlZChCcm93c2VyV2luZG93ICp3
aW5kb3csIEdWYXJpYW50ICpwYXJhbWV0ZXIsIEdBY3Rpb24gKmFjdGlvbikKIHsKQEAgLTQ1OCw3
ICs0NjUsMTEgQEAgc3RhdGljIEd0a1dpZGdldCAqd2ViVmlld0NyZWF0ZShXZWJLaXRXZWJWaWV3
ICp3ZWJWaWV3LCBXZWJLaXROYXZpZ2F0aW9uQWN0aW9uICoKICAgICBXZWJLaXRXZWJWaWV3ICpu
ZXdXZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXdfd2l0aF9yZWxh
dGVkX3ZpZXcod2ViVmlldykpOwogICAgIHdlYmtpdF93ZWJfdmlld19zZXRfc2V0dGluZ3MobmV3
V2ViVmlldywgd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3KSk7CiAKKyNpZiBH
VEtfQ0hFQ0tfVkVSU0lPTigzLCA5OCwgMCkKKyAgICBHdGtXaWRnZXQgKm5ld1dpbmRvdyA9IGJy
b3dzZXJfd2luZG93X25ldyhHVEtfV0lORE9XKHdpbmRvdyksIHdpbmRvdy0+d2ViQ29udGV4dCwg
d2luZG93LT5uZXR3b3JrU2Vzc2lvbik7CisjZWxzZQogICAgIEd0a1dpZGdldCAqbmV3V2luZG93
ID0gYnJvd3Nlcl93aW5kb3dfbmV3KEdUS19XSU5ET1cod2luZG93KSwgd2luZG93LT53ZWJDb250
ZXh0KTsKKyNlbmRpZgogICAgIGd0a193aW5kb3dfc2V0X2FwcGxpY2F0aW9uKEdUS19XSU5ET1co
bmV3V2luZG93KSwgZ3RrX3dpbmRvd19nZXRfYXBwbGljYXRpb24oR1RLX1dJTkRPVyh3aW5kb3cp
KSk7CiAgICAgYnJvd3Nlcl93aW5kb3dfYXBwZW5kX3ZpZXcoQlJPV1NFUl9XSU5ET1cobmV3V2lu
ZG93KSwgbmV3V2ViVmlldyk7CiAgICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKEdUS19XSURHRVQo
bmV3V2ViVmlldykpOwpAQCAtNTA0LDYgKzUxNSw5IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3
RGVjaWRlUG9saWN5KFdlYktpdFdlYlZpZXcgKndlYlZpZXcsIFdlYktpdFBvbGljeURlY2lzaW9u
CiAgICAgLyogT3BlbmluZyBhIG5ldyB0YWIgaWYgbGluayBjbGlja2VkIHdpdGggdGhlIG1pZGRs
ZSBidXR0b24uICovCiAgICAgV2ViS2l0V2ViVmlldyAqbmV3V2ViVmlldyA9IFdFQktJVF9XRUJf
VklFVyhnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX1ZJRVcsCiAgICAgICAgICJ3ZWItY29u
dGV4dCIsIHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dCh3ZWJWaWV3KSwKKyNpZiBHVEtfQ0hF
Q0tfVkVSU0lPTigzLCA5OCwgMCkKKyAgICAgICAgIm5ldHdvcmstc2Vzc2lvbiIsIHdlYmtpdF93
ZWJfdmlld19nZXRfbmV0d29ya19zZXNzaW9uKHdlYlZpZXcpLAorI2VuZGlmCiAgICAgICAgICJz
ZXR0aW5ncyIsIHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldyksCiAgICAgICAg
ICJ1c2VyLWNvbnRlbnQtbWFuYWdlciIsIHdlYmtpdF93ZWJfdmlld19nZXRfdXNlcl9jb250ZW50
X21hbmFnZXIod2ViVmlldyksCiAgICAgICAgICJpcy1jb250cm9sbGVkLWJ5LWF1dG9tYXRpb24i
LCB3ZWJraXRfd2ViX3ZpZXdfaXNfY29udHJvbGxlZF9ieV9hdXRvbWF0aW9uKHdlYlZpZXcpLApA
QCAtNzU2LDYgKzc3MCw5IEBAIHN0YXRpYyB2b2lkIG5ld1RhYkNhbGxiYWNrKEdTaW1wbGVBY3Rp
b24gKmFjdGlvbiwgR1ZhcmlhbnQgKnBhcmFtZXRlciwgZ3BvaW50ZXIKIAogICAgIGJyb3dzZXJf
d2luZG93X2FwcGVuZF92aWV3KHdpbmRvdywgV0VCS0lUX1dFQl9WSUVXKGdfb2JqZWN0X25ldyhX
RUJLSVRfVFlQRV9XRUJfVklFVywKICAgICAgICAgIndlYi1jb250ZXh0Iiwgd2Via2l0X3dlYl92
aWV3X2dldF9jb250ZXh0KHdlYlZpZXcpLAorI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDk4LCAw
KQorICAgICAgICAibmV0d29yay1zZXNzaW9uIiwgd2luZG93LT5uZXR3b3JrU2Vzc2lvbiwKKyNl
bmRpZgogICAgICAgICAic2V0dGluZ3MiLCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdl
YlZpZXcpLAogICAgICAgICAidXNlci1jb250ZW50LW1hbmFnZXIiLCB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X3VzZXJfY29udGVudF9tYW5hZ2VyKHdlYlZpZXcpLAogICAgICAgICAiaXMtY29udHJvbGxl
ZC1ieS1hdXRvbWF0aW9uIiwgd2Via2l0X3dlYl92aWV3X2lzX2NvbnRyb2xsZWRfYnlfYXV0b21h
dGlvbih3ZWJWaWV3KSwKQEAgLTc3NCwxNSArNzkxLDMzIEBAIHN0YXRpYyB2b2lkIG9wZW5Qcml2
YXRlV2luZG93KEdTaW1wbGVBY3Rpb24gKmFjdGlvbiwgR1ZhcmlhbnQgKnBhcmFtZXRlciwgZ3Bv
aW50CiB7CiAgICAgQnJvd3NlcldpbmRvdyAqd2luZG93ID0gQlJPV1NFUl9XSU5ET1codXNlckRh
dGEpOwogICAgIFdlYktpdFdlYlZpZXcgKndlYlZpZXcgPSBicm93c2VyX3RhYl9nZXRfd2ViX3Zp
ZXcod2luZG93LT5hY3RpdmVUYWIpOworCisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgOTgsIDAp
CisgICAgV2ViS2l0TmV0d29ya1Nlc3Npb24gKm5ldHdvcmtTZXNzaW9uID0gTlVMTDsKKyAgICBp
ZiAoIXdlYmtpdF93ZWJfdmlld19pc19jb250cm9sbGVkX2J5X2F1dG9tYXRpb24od2ViVmlldykp
IHsKKyAgICAgICAgbmV0d29ya1Nlc3Npb24gPSB3ZWJraXRfbmV0d29ya19zZXNzaW9uX25ld19l
cGhlbWVyYWwoKTsKKyAgICAgICAgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfdGxzX2Vycm9y
c19wb2xpY3kobmV0d29ya1Nlc3Npb24sIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X3Rsc19l
cnJvcnNfcG9saWN5KHdpbmRvdy0+bmV0d29ya1Nlc3Npb24pKTsKKyAgICAgICAgLy8gRklYTUU6
IHdlIG5lZWQgcHVibGljIGFwaSB0byBnZXQgcHJveHkgc2V0dGluZ3MuCisgICAgfQorI2VuZGlm
CiAgICAgV2ViS2l0V2ViVmlldyAqbmV3V2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyhnX29iamVj
dF9uZXcoV0VCS0lUX1RZUEVfV0VCX1ZJRVcsCiAgICAgICAgICJ3ZWItY29udGV4dCIsIHdlYmtp
dF93ZWJfdmlld19nZXRfY29udGV4dCh3ZWJWaWV3KSwKICAgICAgICAgInNldHRpbmdzIiwgd2Vi
a2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3KSwKICAgICAgICAgInVzZXItY29udGVu
dC1tYW5hZ2VyIiwgd2Via2l0X3dlYl92aWV3X2dldF91c2VyX2NvbnRlbnRfbWFuYWdlcih3ZWJW
aWV3KSwKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCA5OCwgMCkKKyAgICAgICAgIm5ldHdvcmst
c2Vzc2lvbiIsIG5ldHdvcmtTZXNzaW9uLAorI2Vsc2UKICAgICAgICAgImlzLWVwaGVtZXJhbCIs
IFRSVUUsCisjZW5kaWYKICAgICAgICAgImlzLWNvbnRyb2xsZWQtYnktYXV0b21hdGlvbiIsIHdl
YmtpdF93ZWJfdmlld19pc19jb250cm9sbGVkX2J5X2F1dG9tYXRpb24od2ViVmlldyksCiAgICAg
ICAgICJ3ZWJzaXRlLXBvbGljaWVzIiwgd2Via2l0X3dlYl92aWV3X2dldF93ZWJzaXRlX3BvbGlj
aWVzKHdlYlZpZXcpLAogICAgICAgICBOVUxMKSk7CisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywg
OTgsIDApCisgICAgR3RrV2lkZ2V0ICpuZXdXaW5kb3cgPSBicm93c2VyX3dpbmRvd19uZXcoR1RL
X1dJTkRPVyh3aW5kb3cpLCB3aW5kb3ctPndlYkNvbnRleHQsIG5ldHdvcmtTZXNzaW9uKTsKKyAg
ICBnX2NsZWFyX29iamVjdCgmbmV0d29ya1Nlc3Npb24pOworI2Vsc2UKICAgICBHdGtXaWRnZXQg
Km5ld1dpbmRvdyA9IGJyb3dzZXJfd2luZG93X25ldyhHVEtfV0lORE9XKHdpbmRvdyksIHdpbmRv
dy0+d2ViQ29udGV4dCk7CisjZW5kaWYKICAgICBndGtfd2luZG93X3NldF9hcHBsaWNhdGlvbihH
VEtfV0lORE9XKG5ld1dpbmRvdyksIGd0a193aW5kb3dfZ2V0X2FwcGxpY2F0aW9uKEdUS19XSU5E
T1cod2luZG93KSkpOwogICAgIGJyb3dzZXJfd2luZG93X2FwcGVuZF92aWV3KEJST1dTRVJfV0lO
RE9XKG5ld1dpbmRvdyksIG5ld1dlYlZpZXcpOwogICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyhH
VEtfV0lER0VUKG5ld1dlYlZpZXcpKTsKQEAgLTk2Miw2ICs5OTcsMTAgQEAgc3RhdGljIHZvaWQg
YnJvd3NlcldpbmRvd0ZpbmFsaXplKEdPYmplY3QgKmdPYmplY3QpCiAgICAgZ19zaWduYWxfaGFu
ZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKHdpbmRvdy0+d2ViQ29udGV4dCwgR19TSUdOQUxfTUFU
Q0hfREFUQSwgMCwgMCwgTlVMTCwgTlVMTCwgd2luZG93KTsKICAgICBnX29iamVjdF91bnJlZih3
aW5kb3ctPndlYkNvbnRleHQpOwogCisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgOTgsIDUpCisg
ICAgZ19jbGVhcl9vYmplY3QoJndpbmRvdy0+bmV0d29ya1Nlc3Npb24pOworI2VuZGlmCisKICAg
ICBpZiAod2luZG93LT5mYXZpY29uKSB7CiAgICAgICAgIGdfb2JqZWN0X3VucmVmKHdpbmRvdy0+
ZmF2aWNvbik7CiAgICAgICAgIHdpbmRvdy0+ZmF2aWNvbiA9IE5VTEw7CkBAIC0xNDYxLDcgKzE1
MDAsMTEgQEAgc3RhdGljIHZvaWQgYnJvd3Nlcl93aW5kb3dfY2xhc3NfaW5pdChCcm93c2VyV2lu
ZG93Q2xhc3MgKmtsYXNzKQogfQogCiAvKiBQdWJsaWMgQVBJLiAqLworI2lmIEdUS19DSEVDS19W
RVJTSU9OKDMsIDk4LCAwKQorR3RrV2lkZ2V0ICpicm93c2VyX3dpbmRvd19uZXcoR3RrV2luZG93
ICpwYXJlbnQsIFdlYktpdFdlYkNvbnRleHQgKndlYkNvbnRleHQsIFdlYktpdE5ldHdvcmtTZXNz
aW9uICpuZXR3b3JrU2Vzc2lvbikKKyNlbHNlCiBHdGtXaWRnZXQgKmJyb3dzZXJfd2luZG93X25l
dyhHdGtXaW5kb3cgKnBhcmVudCwgV2ViS2l0V2ViQ29udGV4dCAqd2ViQ29udGV4dCkKKyNlbmRp
ZgogewogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfQ09OVEVYVCh3ZWJD
b250ZXh0KSwgTlVMTCk7CiAKQEAgLTE0NzIsNyArMTUxNSwxMiBAQCBHdGtXaWRnZXQgKmJyb3dz
ZXJfd2luZG93X25ldyhHdGtXaW5kb3cgKnBhcmVudCwgV2ViS2l0V2ViQ29udGV4dCAqd2ViQ29u
dGV4dCkKICAgICAgICAgTlVMTCkpOwogCiAgICAgd2luZG93LT53ZWJDb250ZXh0ID0gZ19vYmpl
Y3RfcmVmKHdlYkNvbnRleHQpOworI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDk4LCAwKQorICAg
IHdpbmRvdy0+bmV0d29ya1Nlc3Npb24gPSBuZXR3b3JrU2Vzc2lvbiA/IGdfb2JqZWN0X3JlZihu
ZXR3b3JrU2Vzc2lvbikgOiBOVUxMOworI2Vsc2UKICAgICBnX3NpZ25hbF9jb25uZWN0KHdpbmRv
dy0+d2ViQ29udGV4dCwgImRvd25sb2FkLXN0YXJ0ZWQiLCBHX0NBTExCQUNLKGRvd25sb2FkU3Rh
cnRlZCksIHdpbmRvdyk7CisjZW5kaWYKKwogICAgIGlmIChwYXJlbnQpIHsKICAgICAgICAgd2lu
ZG93LT5wYXJlbnRXaW5kb3cgPSBwYXJlbnQ7CiAgICAgICAgIGdfb2JqZWN0X2FkZF93ZWFrX3Bv
aW50ZXIoR19PQkpFQ1QocGFyZW50KSwgKGdwb2ludGVyICopJndpbmRvdy0+cGFyZW50V2luZG93
KTsKQEAgLTE0ODEsNiArMTUyOSwxNSBAQCBHdGtXaWRnZXQgKmJyb3dzZXJfd2luZG93X25ldyhH
dGtXaW5kb3cgKnBhcmVudCwgV2ViS2l0V2ViQ29udGV4dCAqd2ViQ29udGV4dCkKICAgICByZXR1
cm4gR1RLX1dJREdFVCh3aW5kb3cpOwogfQogCisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgOTgs
IDApCitXZWJLaXROZXR3b3JrU2Vzc2lvbiogYnJvd3Nlcl93aW5kb3dfZ2V0X25ldHdvcmtfc2Vz
c2lvbihCcm93c2VyV2luZG93ICp3aW5kb3cpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
QlJPV1NFUl9JU19XSU5ET1cod2luZG93KSwgTlVMTCk7CisKKyAgICByZXR1cm4gd2luZG93LT5u
ZXR3b3JrU2Vzc2lvbjsKK30KKyNlbmRpZgorCiBXZWJLaXRXZWJDb250ZXh0ICpicm93c2VyX3dp
bmRvd19nZXRfd2ViX2NvbnRleHQoQnJvd3NlcldpbmRvdyAqd2luZG93KQogewogICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKEJST1dTRVJfSVNfV0lORE9XKHdpbmRvdyksIE5VTEwpOwpAQCAtMTU2
OCw2ICsxNjI1LDkgQEAgdm9pZCBicm93c2VyX3dpbmRvd19sb2FkX3Nlc3Npb24oQnJvd3Nlcldp
bmRvdyAqd2luZG93LCBjb25zdCBjaGFyICpzZXNzaW9uRmlsZSkKICAgICAgICAgaWYgKCF3ZWJW
aWV3KSB7CiAgICAgICAgICAgICB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKGdfb2JqZWN0X25l
dyhXRUJLSVRfVFlQRV9XRUJfVklFVywKICAgICAgICAgICAgICAgICAid2ViLWNvbnRleHQiLCB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQocHJldmlvdXNXZWJWaWV3KSwKKyNpZiBHVEtfQ0hF
Q0tfVkVSU0lPTigzLCA5OCwgMCkKKyAgICAgICAgICAgICAgICAibmV0d29yay1zZXNzaW9uIiwg
d2Via2l0X3dlYl92aWV3X2dldF9uZXR3b3JrX3Nlc3Npb24ocHJldmlvdXNXZWJWaWV3KSwKKyNl
bmRpZgogICAgICAgICAgICAgICAgICJzZXR0aW5ncyIsIHdlYmtpdF93ZWJfdmlld19nZXRfc2V0
dGluZ3MocHJldmlvdXNXZWJWaWV3KSwKICAgICAgICAgICAgICAgICAidXNlci1jb250ZW50LW1h
bmFnZXIiLCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3VzZXJfY29udGVudF9tYW5hZ2VyKHByZXZpb3Vz
V2ViVmlldyksCiAgICAgICAgICAgICAgICAgIndlYnNpdGUtcG9saWNpZXMiLCB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X3dlYnNpdGVfcG9saWNpZXMocHJldmlvdXNXZWJWaWV3KSwKQEAgLTE2MzcsNyAr
MTY5NywxMSBAQCBXZWJLaXRXZWJWaWV3ICpicm93c2VyX3dpbmRvd19nZXRfb3JfY3JlYXRlX3dl
Yl92aWV3X2Zvcl9hdXRvbWF0aW9uKEJyb3dzZXJXaW5kbwogICAgICAgICAiaXMtY29udHJvbGxl
ZC1ieS1hdXRvbWF0aW9uIiwgVFJVRSwKICAgICAgICAgIndlYnNpdGUtcG9saWNpZXMiLCB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3dlYnNpdGVfcG9saWNpZXMod2ViVmlldyksCiAgICAgICAgIE5VTEwp
KTsKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCA5OCwgMCkKKyAgICBHdGtXaWRnZXQgKm5ld1dp
bmRvdyA9IGJyb3dzZXJfd2luZG93X25ldyhHVEtfV0lORE9XKHdpbmRvdyksIHdpbmRvdy0+d2Vi
Q29udGV4dCwgd2luZG93LT5uZXR3b3JrU2Vzc2lvbik7CisjZWxzZQogICAgIEd0a1dpZGdldCAq
bmV3V2luZG93ID0gYnJvd3Nlcl93aW5kb3dfbmV3KEdUS19XSU5ET1cod2luZG93KSwgd2luZG93
LT53ZWJDb250ZXh0KTsKKyNlbmRpZgogICAgIGd0a193aW5kb3dfc2V0X2FwcGxpY2F0aW9uKEdU
S19XSU5ET1cobmV3V2luZG93KSwgZ3RrX3dpbmRvd19nZXRfYXBwbGljYXRpb24oR1RLX1dJTkRP
Vyh3aW5kb3cpKSk7CiAjaWYgIUdUS19DSEVDS19WRVJTSU9OKDMsIDk4LCAwKQogICAgIGd0a193
aW5kb3dfc2V0X2ZvY3VzX29uX21hcChHVEtfV0lORE9XKG5ld1dpbmRvdyksIEZBTFNFKTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9Ccm93c2VyV2luZG93LmggYi9Ub29scy9N
aW5pQnJvd3Nlci9ndGsvQnJvd3NlcldpbmRvdy5oCmluZGV4IDcyODMxODczZDVmZC4uYzU4ZWJj
MmJlZWM3IDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9ndGsvQnJvd3NlcldpbmRvdy5o
CisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9Ccm93c2VyV2luZG93LmgKQEAgLTUwLDcgKzUw
LDEyIEBAIHR5cGVkZWYgc3RydWN0IF9Ccm93c2VyV2luZG93Q2xhc3MgICBCcm93c2VyV2luZG93
Q2xhc3M7CiAKIEdUeXBlIGJyb3dzZXJfd2luZG93X2dldF90eXBlKHZvaWQpOwogCisjaWYgR1RL
X0NIRUNLX1ZFUlNJT04oMywgOTgsIDApCitHdGtXaWRnZXQqIGJyb3dzZXJfd2luZG93X25ldyhH
dGtXaW5kb3cqLCBXZWJLaXRXZWJDb250ZXh0KiwgV2ViS2l0TmV0d29ya1Nlc3Npb24qKTsKK1dl
YktpdE5ldHdvcmtTZXNzaW9uKiBicm93c2VyX3dpbmRvd19nZXRfbmV0d29ya19zZXNzaW9uKEJy
b3dzZXJXaW5kb3cqKTsKKyNlbHNlCiBHdGtXaWRnZXQqIGJyb3dzZXJfd2luZG93X25ldyhHdGtX
aW5kb3cqLCBXZWJLaXRXZWJDb250ZXh0Kik7CisjZW5kaWYKIFdlYktpdFdlYkNvbnRleHQqIGJy
b3dzZXJfd2luZG93X2dldF93ZWJfY29udGV4dChCcm93c2VyV2luZG93Kik7CiB2b2lkIGJyb3dz
ZXJfd2luZG93X2FwcGVuZF92aWV3KEJyb3dzZXJXaW5kb3cqLCBXZWJLaXRXZWJWaWV3Kik7CiB2
b2lkIGJyb3dzZXJfd2luZG93X2xvYWRfdXJpKEJyb3dzZXJXaW5kb3cqLCBjb25zdCBjaGFyICp1
cmkpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL21haW4uYyBiL1Rvb2xzL01p
bmlCcm93c2VyL2d0ay9tYWluLmMKaW5kZXggYTQzNjAwMWYzZTQyLi5mMTVjZWRlNjAwNmEgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9tYWluLmMKKysrIGIvVG9vbHMvTWluaUJy
b3dzZXIvZ3RrL21haW4uYwpAQCAtOTYsNiArOTYsOSBAQCBzdGF0aWMgV2ViS2l0V2ViVmlldyAq
Y3JlYXRlQnJvd3NlclRhYihCcm93c2VyV2luZG93ICp3aW5kb3csIFdlYktpdFNldHRpbmdzICp3
ZQogewogICAgIFdlYktpdFdlYlZpZXcgKndlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcoZ19vYmpl
Y3RfbmV3KFdFQktJVF9UWVBFX1dFQl9WSUVXLAogICAgICAgICAid2ViLWNvbnRleHQiLCBicm93
c2VyX3dpbmRvd19nZXRfd2ViX2NvbnRleHQod2luZG93KSwKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lP
TigzLCA5OCwgMCkKKyAgICAgICAgIm5ldHdvcmstc2Vzc2lvbiIsIGJyb3dzZXJfd2luZG93X2dl
dF9uZXR3b3JrX3Nlc3Npb24od2luZG93KSwKKyNlbmRpZgogICAgICAgICAic2V0dGluZ3MiLCB3
ZWJraXRTZXR0aW5ncywKICAgICAgICAgInVzZXItY29udGVudC1tYW5hZ2VyIiwgdXNlckNvbnRl
bnRNYW5hZ2VyLAogICAgICAgICAiaXMtY29udHJvbGxlZC1ieS1hdXRvbWF0aW9uIiwgYXV0b21h
dGlvbk1vZGUsCkBAIC0zNTQsNyArMzU3LDcgQEAgc3RhdGljIHZvaWQgd2Vic2l0ZURhdGFDbGVh
cmVkQ2FsbGJhY2soV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICptYW5hZ2VyLCBHQXN5bmMKICAg
ICAgICAgd2Via2l0X3dlYl92aWV3X3JlbG9hZCh3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dl
dF93ZWJfdmlldyhkYXRhUmVxdWVzdC0+cmVxdWVzdCkpOwogfQogCi1zdGF0aWMgdm9pZCBhYm91
dERhdGFTY3JpcHRNZXNzYWdlUmVjZWl2ZWRDYWxsYmFjayhXZWJLaXRVc2VyQ29udGVudE1hbmFn
ZXIgKnVzZXJDb250ZW50TWFuYWdlciwgV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCAqbWVzc2FnZSwg
V2ViS2l0V2ViQ29udGV4dCAqd2ViQ29udGV4dCkKK3N0YXRpYyB2b2lkIGFib3V0RGF0YVNjcmlw
dE1lc3NhZ2VSZWNlaXZlZENhbGxiYWNrKFdlYktpdFVzZXJDb250ZW50TWFuYWdlciAqdXNlckNv
bnRlbnRNYW5hZ2VyLCBXZWJLaXRKYXZhc2NyaXB0UmVzdWx0ICptZXNzYWdlLCBXZWJLaXRXZWJz
aXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIpCiB7CiAgICAgY2hhciAqbWVzc2FnZVN0cmluZyA9IGpz
Y192YWx1ZV90b19zdHJpbmcod2Via2l0X2phdmFzY3JpcHRfcmVzdWx0X2dldF9qc192YWx1ZSht
ZXNzYWdlKSk7CiAgICAgY2hhciAqKnRva2VucyA9IGdfc3Ryc3BsaXQobWVzc2FnZVN0cmluZywg
IjoiLCAzKTsKQEAgLTM3Myw3ICszNzYsNiBAQCBzdGF0aWMgdm9pZCBhYm91dERhdGFTY3JpcHRN
ZXNzYWdlUmVjZWl2ZWRDYWxsYmFjayhXZWJLaXRVc2VyQ29udGVudE1hbmFnZXIgKnVzZQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICptYW5h
Z2VyID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcih3ZWJDb250
ZXh0KTsKICAgICBndWludDY0IHR5cGVzID0gZ19hc2NpaV9zdHJ0b3VsbCh0b2tlbnNbMV0sIE5V
TEwsIDEwKTsKICAgICBpZiAodG9rZW5Db3VudCA9PSAyKQogICAgICAgICB3ZWJraXRfd2Vic2l0
ZV9kYXRhX21hbmFnZXJfY2xlYXIobWFuYWdlciwgdHlwZXMsIDAsIE5VTEwsIChHQXN5bmNSZWFk
eUNhbGxiYWNrKXdlYnNpdGVEYXRhQ2xlYXJlZENhbGxiYWNrLCBkYXRhUmVxdWVzdCk7CkBAIC00
NzUsMTAgKzQ3NywxNSBAQCBzdGF0aWMgdm9pZCBnb3RXZWJzaXRlRGF0YUNhbGxiYWNrKFdlYktp
dFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlciwgR0FzeW5jUmVzdQogICAgIGdfbGlzdF9mcmVl
X2Z1bGwoZGF0YUxpc3QsIChHRGVzdHJveU5vdGlmeSl3ZWJraXRfd2Vic2l0ZV9kYXRhX3VucmVm
KTsKIH0KIAotc3RhdGljIHZvaWQgYWJvdXREYXRhSGFuZGxlUmVxdWVzdChXZWJLaXRVUklTY2hl
bWVSZXF1ZXN0ICpyZXF1ZXN0LCBXZWJLaXRXZWJDb250ZXh0ICp3ZWJDb250ZXh0KQorc3RhdGlj
IHZvaWQgYWJvdXREYXRhSGFuZGxlUmVxdWVzdChXZWJLaXRVUklTY2hlbWVSZXF1ZXN0ICpyZXF1
ZXN0KQogewogICAgIEFib3V0RGF0YVJlcXVlc3QgKmRhdGFSZXF1ZXN0ID0gYWJvdXREYXRhUmVx
dWVzdE5ldyhyZXF1ZXN0KTsKLSAgICBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIg
PSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYkNvbnRleHQp
OworICAgIFdlYktpdFdlYlZpZXcgKndlYlZpZXcgPSB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0
X2dldF93ZWJfdmlldyhyZXF1ZXN0KTsKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCA5OCwgMCkK
KyAgICBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIgPSB3ZWJraXRfbmV0d29ya19z
ZXNzaW9uX2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcih3ZWJraXRfd2ViX3ZpZXdfZ2V0X25ldHdv
cmtfc2Vzc2lvbih3ZWJWaWV3KSk7CisjZWxzZQorICAgIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdl
ciAqbWFuYWdlciA9IHdlYmtpdF93ZWJfdmlld19nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIod2Vi
Vmlldyk7CisjZW5kaWYKICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZmV0Y2gobWFu
YWdlciwgV0VCS0lUX1dFQlNJVEVfREFUQV9BTEwsIE5VTEwsIChHQXN5bmNSZWFkeUNhbGxiYWNr
KWdvdFdlYnNpdGVEYXRhQ2FsbGJhY2ssIGRhdGFSZXF1ZXN0KTsKIH0KIApAQCAtNTMwLDE0ICs1
MzcsMTkgQEAgc3RhdGljIHZvaWQgZ290SVRQU3VtbWFyeUNhbGxiYWNrKFdlYktpdFdlYnNpdGVE
YXRhTWFuYWdlciAqbWFuYWdlciwgR0FzeW5jUmVzdWwKICAgICBhYm91dElUUFJlcXVlc3RGcmVl
KGl0cFJlcXVlc3QpOwogfQogCi1zdGF0aWMgdm9pZCBhYm91dElUUEhhbmRsZVJlcXVlc3QoV2Vi
S2l0VVJJU2NoZW1lUmVxdWVzdCAqcmVxdWVzdCwgV2ViS2l0V2ViQ29udGV4dCAqd2ViQ29udGV4
dCkKK3N0YXRpYyB2b2lkIGFib3V0SVRQSGFuZGxlUmVxdWVzdChXZWJLaXRVUklTY2hlbWVSZXF1
ZXN0ICpyZXF1ZXN0KQogewogICAgIEFib3V0SVRQUmVxdWVzdCAqaXRwUmVxdWVzdCA9IGFib3V0
SVRQUmVxdWVzdE5ldyhyZXF1ZXN0KTsKLSAgICBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1h
bmFnZXIgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYkNv
bnRleHQpOworICAgIFdlYktpdFdlYlZpZXcgKndlYlZpZXcgPSB3ZWJraXRfdXJpX3NjaGVtZV9y
ZXF1ZXN0X2dldF93ZWJfdmlldyhyZXF1ZXN0KTsKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCA5
OCwgMCkKKyAgICBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIgPSB3ZWJraXRfbmV0
d29ya19zZXNzaW9uX2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcih3ZWJraXRfd2ViX3ZpZXdfZ2V0
X25ldHdvcmtfc2Vzc2lvbih3ZWJWaWV3KSk7CisjZWxzZQorICAgIFdlYktpdFdlYnNpdGVEYXRh
TWFuYWdlciAqbWFuYWdlciA9IHdlYmtpdF93ZWJfdmlld19nZXRfd2Vic2l0ZV9kYXRhX21hbmFn
ZXIod2ViVmlldyk7CisjZW5kaWYKICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0
X2l0cF9zdW1tYXJ5KG1hbmFnZXIsIE5VTEwsIChHQXN5bmNSZWFkeUNhbGxiYWNrKWdvdElUUFN1
bW1hcnlDYWxsYmFjaywgaXRwUmVxdWVzdCk7CiB9CiAKLXN0YXRpYyB2b2lkIGFib3V0VVJJU2No
ZW1lUmVxdWVzdENhbGxiYWNrKFdlYktpdFVSSVNjaGVtZVJlcXVlc3QgKnJlcXVlc3QsIFdlYktp
dFdlYkNvbnRleHQgKndlYkNvbnRleHQpCitzdGF0aWMgdm9pZCBhYm91dFVSSVNjaGVtZVJlcXVl
c3RDYWxsYmFjayhXZWJLaXRVUklTY2hlbWVSZXF1ZXN0ICpyZXF1ZXN0LCBncG9pbnRlciB1c2Vy
RGF0YSkKIHsKICAgICBHSW5wdXRTdHJlYW0gKnN0cmVhbTsKICAgICBnc2l6ZSBzdHJlYW1MZW5n
dGg7CkBAIC01NTcsOSArNTY5LDkgQEAgc3RhdGljIHZvaWQgYWJvdXRVUklTY2hlbWVSZXF1ZXN0
Q2FsbGJhY2soV2ViS2l0VVJJU2NoZW1lUmVxdWVzdCAqcmVxdWVzdCwgV2ViS2kKICAgICAgICAg
d2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9maW5pc2gocmVxdWVzdCwgc3RyZWFtLCBzdHJlYW1M
ZW5ndGgsICJ0ZXh0L2h0bWwiKTsKICAgICAgICAgZ19vYmplY3RfdW5yZWYoc3RyZWFtKTsKICAg
ICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAocGF0aCwgImRhdGEiKSkKLSAgICAgICAgYWJvdXREYXRh
SGFuZGxlUmVxdWVzdChyZXF1ZXN0LCB3ZWJDb250ZXh0KTsKKyAgICAgICAgYWJvdXREYXRhSGFu
ZGxlUmVxdWVzdChyZXF1ZXN0KTsKICAgICBlbHNlIGlmICghZ19zdHJjbXAwKHBhdGgsICJpdHAi
KSkKLSAgICAgICAgYWJvdXRJVFBIYW5kbGVSZXF1ZXN0KHJlcXVlc3QsIHdlYkNvbnRleHQpOwor
ICAgICAgICBhYm91dElUUEhhbmRsZVJlcXVlc3QocmVxdWVzdCk7CiAgICAgZWxzZSB7CiAgICAg
ICAgIGVycm9yID0gZ19lcnJvcl9uZXcoTUlOSV9CUk9XU0VSX0VSUk9SLCBNSU5JX0JST1dTRVJf
RVJST1JfSU5WQUxJRF9BQk9VVF9QQVRILCAiSW52YWxpZCBhYm91dDolcyBwYWdlLiIsIHBhdGgp
OwogICAgICAgICB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2ZpbmlzaF9lcnJvcihyZXF1ZXN0
LCBlcnJvcik7CkBAIC02NjAsNiArNjcyLDQ2IEBAIHN0YXRpYyB2b2lkIHN0YXJ0dXAoR0FwcGxp
Y2F0aW9uICphcHBsaWNhdGlvbikKIAogc3RhdGljIHZvaWQgYWN0aXZhdGUoR0FwcGxpY2F0aW9u
ICphcHBsaWNhdGlvbiwgV2ViS2l0U2V0dGluZ3MgKndlYmtpdFNldHRpbmdzKQogeworI2lmIEdU
S19DSEVDS19WRVJTSU9OKDMsIDk4LCAwKQorICAgIFdlYktpdE5ldHdvcmtTZXNzaW9uICpuZXR3
b3JrU2Vzc2lvbiA9IE5VTEw7CisgICAgaWYgKCFhdXRvbWF0aW9uTW9kZSkgeworICAgICAgICBp
ZiAocHJpdmF0ZU1vZGUpCisgICAgICAgICAgICBuZXR3b3JrU2Vzc2lvbiA9IHdlYmtpdF9uZXR3
b3JrX3Nlc3Npb25fbmV3X2VwaGVtZXJhbCgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IGNoYXIgKmRhdGFEaXJlY3RvcnkgPSBnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3VzZXJfZGF0YV9k
aXIoKSwgIndlYmtpdGd0ay0iIFdFQktJVEdUS19BUElfVkVSU0lPTiwgIk1pbmlCcm93c2VyIiwg
TlVMTCk7CisgICAgICAgICAgICBjaGFyICpjYWNoZURpcmVjdG9yeSA9IGdfYnVpbGRfZmlsZW5h
bWUoZ19nZXRfdXNlcl9jYWNoZV9kaXIoKSwgIndlYmtpdGd0ay0iIFdFQktJVEdUS19BUElfVkVS
U0lPTiwgIk1pbmlCcm93c2VyIiwgTlVMTCk7CisgICAgICAgICAgICBuZXR3b3JrU2Vzc2lvbiA9
IHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fbmV3KGRhdGFEaXJlY3RvcnksIGNhY2hlRGlyZWN0b3J5
KTsKKyAgICAgICAgICAgIGdfZnJlZShkYXRhRGlyZWN0b3J5KTsKKyAgICAgICAgICAgIGdfZnJl
ZShjYWNoZURpcmVjdG9yeSk7CisgICAgICAgIH0KKworICAgICAgICB3ZWJraXRfbmV0d29ya19z
ZXNzaW9uX3NldF9pdHBfZW5hYmxlZChuZXR3b3JrU2Vzc2lvbiwgZW5hYmxlSVRQKTsKKworICAg
ICAgICBpZiAocHJveHkpIHsKKyAgICAgICAgICAgIFdlYktpdE5ldHdvcmtQcm94eVNldHRpbmdz
ICp3ZWJraXRQcm94eVNldHRpbmdzID0gd2Via2l0X25ldHdvcmtfcHJveHlfc2V0dGluZ3NfbmV3
KHByb3h5LCBpZ25vcmVIb3N0cyk7CisgICAgICAgICAgICB3ZWJraXRfbmV0d29ya19zZXNzaW9u
X3NldF9wcm94eV9zZXR0aW5ncyhuZXR3b3JrU2Vzc2lvbiwgV0VCS0lUX05FVFdPUktfUFJPWFlf
TU9ERV9DVVNUT00sIHdlYmtpdFByb3h5U2V0dGluZ3MpOworICAgICAgICAgICAgd2Via2l0X25l
dHdvcmtfcHJveHlfc2V0dGluZ3NfZnJlZSh3ZWJraXRQcm94eVNldHRpbmdzKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChpZ25vcmVUTFNFcnJvcnMpCisgICAgICAgICAgICB3ZWJraXRfbmV0
d29ya19zZXNzaW9uX3NldF90bHNfZXJyb3JzX3BvbGljeShuZXR3b3JrU2Vzc2lvbiwgV0VCS0lU
X1RMU19FUlJPUlNfUE9MSUNZX0lHTk9SRSk7CisKKyAgICAgICAgaWYgKGNvb2tpZXNQb2xpY3kp
IHsKKyAgICAgICAgICAgIFdlYktpdENvb2tpZU1hbmFnZXIgKmNvb2tpZU1hbmFnZXIgPSB3ZWJr
aXRfbmV0d29ya19zZXNzaW9uX2dldF9jb29raWVfbWFuYWdlcihuZXR3b3JrU2Vzc2lvbik7Cisg
ICAgICAgICAgICBHRW51bUNsYXNzICplbnVtQ2xhc3MgPSBnX3R5cGVfY2xhc3NfcmVmKFdFQktJ
VF9UWVBFX0NPT0tJRV9BQ0NFUFRfUE9MSUNZKTsKKyAgICAgICAgICAgIEdFbnVtVmFsdWUgKmVu
dW1WYWx1ZSA9IGdfZW51bV9nZXRfdmFsdWVfYnlfbmljayhlbnVtQ2xhc3MsIGNvb2tpZXNQb2xp
Y3kpOworICAgICAgICAgICAgaWYgKGVudW1WYWx1ZSkKKyAgICAgICAgICAgICAgICB3ZWJraXRf
Y29va2llX21hbmFnZXJfc2V0X2FjY2VwdF9wb2xpY3koY29va2llTWFuYWdlciwgZW51bVZhbHVl
LT52YWx1ZSk7CisgICAgICAgICAgICBnX3R5cGVfY2xhc3NfdW5yZWYoZW51bUNsYXNzKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChjb29raWVzRmlsZSAmJiAhd2Via2l0X25ldHdvcmtfc2Vz
c2lvbl9pc19lcGhlbWVyYWwobmV0d29ya1Nlc3Npb24pKSB7CisgICAgICAgICAgICBXZWJLaXRD
b29raWVNYW5hZ2VyICpjb29raWVNYW5hZ2VyID0gd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRf
Y29va2llX21hbmFnZXIobmV0d29ya1Nlc3Npb24pOworICAgICAgICAgICAgV2ViS2l0Q29va2ll
UGVyc2lzdGVudFN0b3JhZ2Ugc3RvcmFnZVR5cGUgPSBnX3N0cl9oYXNfc3VmZml4KGNvb2tpZXNG
aWxlLCAiLnR4dCIpID8gV0VCS0lUX0NPT0tJRV9QRVJTSVNURU5UX1NUT1JBR0VfVEVYVCA6IFdF
QktJVF9DT09LSUVfUEVSU0lTVEVOVF9TVE9SQUdFX1NRTElURTsKKyAgICAgICAgICAgIHdlYmtp
dF9jb29raWVfbWFuYWdlcl9zZXRfcGVyc2lzdGVudF9zdG9yYWdlKGNvb2tpZU1hbmFnZXIsIGNv
b2tpZXNGaWxlLCBzdG9yYWdlVHlwZSk7CisgICAgICAgIH0KKyAgICB9CisjZWxzZQogICAgIFdl
YktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlcjsKICAgICBpZiAocHJpdmF0ZU1vZGUgfHwg
YXV0b21hdGlvbk1vZGUpCiAgICAgICAgIG1hbmFnZXIgPSB3ZWJraXRfd2Vic2l0ZV9kYXRhX21h
bmFnZXJfbmV3X2VwaGVtZXJhbCgpOwpAQCAtNjgxLDIxICs3MzMsMjYgQEAgc3RhdGljIHZvaWQg
YWN0aXZhdGUoR0FwcGxpY2F0aW9uICphcHBsaWNhdGlvbiwgV2ViS2l0U2V0dGluZ3MgKndlYmtp
dFNldHRpbmdzKQogCiAgICAgaWYgKGlnbm9yZVRMU0Vycm9ycykKICAgICAgICAgd2Via2l0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyX3NldF90bHNfZXJyb3JzX3BvbGljeShtYW5hZ2VyLCBXRUJLSVRf
VExTX0VSUk9SU19QT0xJQ1lfSUdOT1JFKTsKKyNlbmRpZgogCi0gICAgV2ViS2l0V2ViQ29udGV4
dCAqd2ViQ29udGV4dCA9IGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfQ09OVEVYVCwgIndl
YnNpdGUtZGF0YS1tYW5hZ2VyIiwgbWFuYWdlciwKKyAgICBXZWJLaXRXZWJDb250ZXh0ICp3ZWJD
b250ZXh0ID0gZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9DT05URVhULAogI2lmICFHVEtf
Q0hFQ0tfVkVSU0lPTigzLCA5OCwgMCkKKyAgICAgICAgIndlYnNpdGUtZGF0YS1tYW5hZ2VyIiwg
bWFuYWdlciwKICAgICAgICAgInByb2Nlc3Mtc3dhcC1vbi1jcm9zcy1zaXRlLW5hdmlnYXRpb24t
ZW5hYmxlZCIsIFRSVUUsCiAgICAgICAgICJ1c2Utc3lzdGVtLWFwcGVhcmFuY2UtZm9yLXNjcm9s
bGJhcnMiLCBGQUxTRSwKICNlbmRpZgogICAgICAgICAidGltZS16b25lLW92ZXJyaWRlIiwgdGlt
ZVpvbmUsCiAgICAgICAgIE5VTEwpOworI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigzLCA5OCwgMCkK
ICAgICBnX29iamVjdF91bnJlZihtYW5hZ2VyKTsKKyNlbmRpZgogCiAjaWYgIUdUS19DSEVDS19W
RVJTSU9OKDMsIDk4LCAwKQogICAgIGlmIChlbmFibGVTYW5kYm94KQogICAgICAgICB3ZWJraXRf
d2ViX2NvbnRleHRfc2V0X3NhbmRib3hfZW5hYmxlZCh3ZWJDb250ZXh0LCBUUlVFKTsKICNlbmRp
ZgogCisjaWYgIUdUS19DSEVDS19WRVJTSU9OKDMsIDk4LCAwKQogICAgIGlmIChjb29raWVzUG9s
aWN5KSB7CiAgICAgICAgIFdlYktpdENvb2tpZU1hbmFnZXIgKmNvb2tpZU1hbmFnZXIgPSB3ZWJr
aXRfd2ViX2NvbnRleHRfZ2V0X2Nvb2tpZV9tYW5hZ2VyKHdlYkNvbnRleHQpOwogICAgICAgICBH
RW51bUNsYXNzICplbnVtQ2xhc3MgPSBnX3R5cGVfY2xhc3NfcmVmKFdFQktJVF9UWVBFX0NPT0tJ
RV9BQ0NFUFRfUE9MSUNZKTsKQEAgLTcxMCwxNSArNzY3LDIyIEBAIHN0YXRpYyB2b2lkIGFjdGl2
YXRlKEdBcHBsaWNhdGlvbiAqYXBwbGljYXRpb24sIFdlYktpdFNldHRpbmdzICp3ZWJraXRTZXR0
aW5ncykKICAgICAgICAgV2ViS2l0Q29va2llUGVyc2lzdGVudFN0b3JhZ2Ugc3RvcmFnZVR5cGUg
PSBnX3N0cl9oYXNfc3VmZml4KGNvb2tpZXNGaWxlLCAiLnR4dCIpID8gV0VCS0lUX0NPT0tJRV9Q
RVJTSVNURU5UX1NUT1JBR0VfVEVYVCA6IFdFQktJVF9DT09LSUVfUEVSU0lTVEVOVF9TVE9SQUdF
X1NRTElURTsKICAgICAgICAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX3NldF9wZXJzaXN0ZW50X3N0
b3JhZ2UoY29va2llTWFuYWdlciwgY29va2llc0ZpbGUsIHN0b3JhZ2VUeXBlKTsKICAgICB9Cisj
ZW5kaWYKIAogICAgIC8vIEVuYWJsZSB0aGUgZmF2aWNvbiBkYXRhYmFzZSwgYnkgc3BlY2lmeWlu
ZyB0aGUgZGVmYXVsdCBkaXJlY3RvcnkuCiAgICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF9mYXZp
Y29uX2RhdGFiYXNlX2RpcmVjdG9yeSh3ZWJDb250ZXh0LCBOVUxMKTsKIAotICAgIHdlYmtpdF93
ZWJfY29udGV4dF9yZWdpc3Rlcl91cmlfc2NoZW1lKHdlYkNvbnRleHQsIEJST1dTRVJfQUJPVVRf
U0NIRU1FLCAoV2ViS2l0VVJJU2NoZW1lUmVxdWVzdENhbGxiYWNrKWFib3V0VVJJU2NoZW1lUmVx
dWVzdENhbGxiYWNrLCB3ZWJDb250ZXh0LCBOVUxMKTsKKyAgICB3ZWJraXRfd2ViX2NvbnRleHRf
cmVnaXN0ZXJfdXJpX3NjaGVtZSh3ZWJDb250ZXh0LCBCUk9XU0VSX0FCT1VUX1NDSEVNRSwgKFdl
YktpdFVSSVNjaGVtZVJlcXVlc3RDYWxsYmFjaylhYm91dFVSSVNjaGVtZVJlcXVlc3RDYWxsYmFj
aywgTlVMTCwgTlVMTCk7CiAKICAgICBXZWJLaXRVc2VyQ29udGVudE1hbmFnZXIgKnVzZXJDb250
ZW50TWFuYWdlciA9IHdlYmtpdF91c2VyX2NvbnRlbnRfbWFuYWdlcl9uZXcoKTsKICAgICB3ZWJr
aXRfdXNlcl9jb250ZW50X21hbmFnZXJfcmVnaXN0ZXJfc2NyaXB0X21lc3NhZ2VfaGFuZGxlcih1
c2VyQ29udGVudE1hbmFnZXIsICJhYm91dERhdGEiKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHVz
ZXJDb250ZW50TWFuYWdlciwgInNjcmlwdC1tZXNzYWdlLXJlY2VpdmVkOjphYm91dERhdGEiLCBH
X0NBTExCQUNLKGFib3V0RGF0YVNjcmlwdE1lc3NhZ2VSZWNlaXZlZENhbGxiYWNrKSwgd2ViQ29u
dGV4dCk7CisgICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICpkYXRhTWFuYWdlcjsKKyNpZiBH
VEtfQ0hFQ0tfVkVSU0lPTigzLCA5OCwgMCkKKyAgICBkYXRhTWFuYWdlciA9IG5ldHdvcmtTZXNz
aW9uID8gd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIobmV0
d29ya1Nlc3Npb24pIDogTlVMTDsKKyNlbHNlCisgICAgZGF0YU1hbmFnZXIgPSB3ZWJraXRfd2Vi
X2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYkNvbnRleHQpOworI2VuZGlmCisg
ICAgZ19zaWduYWxfY29ubmVjdCh1c2VyQ29udGVudE1hbmFnZXIsICJzY3JpcHQtbWVzc2FnZS1y
ZWNlaXZlZDo6YWJvdXREYXRhIiwgR19DQUxMQkFDSyhhYm91dERhdGFTY3JpcHRNZXNzYWdlUmVj
ZWl2ZWRDYWxsYmFjayksIGRhdGFNYW5hZ2VyKTsKIAogICAgIFdlYktpdFdlYnNpdGVQb2xpY2ll
cyAqZGVmYXVsdFdlYnNpdGVQb2xpY2llcyA9IHdlYmtpdF93ZWJzaXRlX3BvbGljaWVzX25ld193
aXRoX3BvbGljaWVzKAogICAgICAgICAiYXV0b3BsYXkiLCBhdXRvcGxheVBvbGljeSwKQEAgLTc1
MSw3ICs4MTUsMTEgQEAgc3RhdGljIHZvaWQgYWN0aXZhdGUoR0FwcGxpY2F0aW9uICphcHBsaWNh
dGlvbiwgV2ViS2l0U2V0dGluZ3MgKndlYmtpdFNldHRpbmdzKQogICAgIHdlYmtpdF93ZWJfY29u
dGV4dF9zZXRfYXV0b21hdGlvbl9hbGxvd2VkKHdlYkNvbnRleHQsIGF1dG9tYXRpb25Nb2RlKTsK
ICAgICBnX3NpZ25hbF9jb25uZWN0KHdlYkNvbnRleHQsICJhdXRvbWF0aW9uLXN0YXJ0ZWQiLCBH
X0NBTExCQUNLKGF1dG9tYXRpb25TdGFydGVkQ2FsbGJhY2spLCBhcHBsaWNhdGlvbik7CiAKKyNp
ZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCA5OCwgMCkKKyAgICBCcm93c2VyV2luZG93ICptYWluV2lu
ZG93ID0gQlJPV1NFUl9XSU5ET1coYnJvd3Nlcl93aW5kb3dfbmV3KE5VTEwsIHdlYkNvbnRleHQs
IG5ldHdvcmtTZXNzaW9uKSk7CisjZWxzZQogICAgIEJyb3dzZXJXaW5kb3cgKm1haW5XaW5kb3cg
PSBCUk9XU0VSX1dJTkRPVyhicm93c2VyX3dpbmRvd19uZXcoTlVMTCwgd2ViQ29udGV4dCkpOwor
I2VuZGlmCiAgICAgZ3RrX2FwcGxpY2F0aW9uX2FkZF93aW5kb3coR1RLX0FQUExJQ0FUSU9OKGFw
cGxpY2F0aW9uKSwgR1RLX1dJTkRPVyhtYWluV2luZG93KSk7CiAgICAgaWYgKGRhcmtNb2RlKQog
ICAgICAgICBnX29iamVjdF9zZXQoZ3RrX3dpZGdldF9nZXRfc2V0dGluZ3MoR1RLX1dJREdFVCht
YWluV2luZG93KSksICJndGstYXBwbGljYXRpb24tcHJlZmVyLWRhcmstdGhlbWUiLCBUUlVFLCBO
VUxMKTsKQEAgLTc5NSw2ICs4NjMsOSBAQCBzdGF0aWMgdm9pZCBhY3RpdmF0ZShHQXBwbGljYXRp
b24gKmFwcGxpY2F0aW9uLCBXZWJLaXRTZXR0aW5ncyAqd2Via2l0U2V0dGluZ3MpCiAgICAgZ19v
YmplY3RfdW5yZWYod2ViQ29udGV4dCk7CiAgICAgZ19vYmplY3RfdW5yZWYodXNlckNvbnRlbnRN
YW5hZ2VyKTsKICAgICBnX29iamVjdF91bnJlZihkZWZhdWx0V2Vic2l0ZVBvbGljaWVzKTsKKyNp
ZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCA5OCwgMCkKKyAgICBnX2NsZWFyX29iamVjdCgmbmV0d29y
a1Nlc3Npb24pOworI2VuZGlmCiAKICAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMoZmlyc3RUYWIp
OwogICAgIGd0a193aWRnZXRfc2hvdyhHVEtfV0lER0VUKG1haW5XaW5kb3cpKTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0QXV0aGVudGljYXRp
b24uY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RBdXRoZW50
aWNhdGlvbi5jcHAKaW5kZXggYjQzMTM5ODAyZDkyLi4yZWFhMDE2MDhlYzQgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0QXV0aGVudGljYXRpb24u
Y3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0QXV0aGVu
dGljYXRpb24uY3BwCkBAIC0yNTQsMTAgKzI1NCwxNyBAQCBzdGF0aWMgdm9pZCB0ZXN0V2ViVmll
d0F1dGhlbnRpY2F0aW9uU3RvcmFnZShBdXRoZW50aWNhdGlvblRlc3QqIHRlc3QsIGdjb25zdHBv
aQogICAgIGdfYXNzZXJ0X2ZhbHNlKHRlc3QtPm1fYXV0aGVudGljYXRpb25TdWNjZWVkZWRSZWNl
aXZlZCk7CiAjZW5kaWYKIAorI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIGF1dG8qIG5l
dHdvcmtTZXNzaW9uID0gd2Via2l0X3dlYl92aWV3X2dldF9uZXR3b3JrX3Nlc3Npb24odGVzdC0+
bV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0
X3BlcnNpc3RlbnRfY3JlZGVudGlhbF9zdG9yYWdlX2VuYWJsZWQobmV0d29ya1Nlc3Npb24pKTsK
KyAgICB3ZWJraXRfbmV0d29ya19zZXNzaW9uX3NldF9wZXJzaXN0ZW50X2NyZWRlbnRpYWxfc3Rv
cmFnZV9lbmFibGVkKG5ldHdvcmtTZXNzaW9uLCBGQUxTRSk7CisgICAgZ19hc3NlcnRfZmFsc2Uo
d2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfcGVyc2lzdGVudF9jcmVkZW50aWFsX3N0b3JhZ2Vf
ZW5hYmxlZChuZXR3b3JrU2Vzc2lvbikpOworI2Vsc2UKICAgICBhdXRvKiB3ZWJzaXRlRGF0YU1h
bmFnZXIgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHRlc3QtPm1f
d2ViVmlldyk7CiAgICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJf
Z2V0X3BlcnNpc3RlbnRfY3JlZGVudGlhbF9zdG9yYWdlX2VuYWJsZWQod2Vic2l0ZURhdGFNYW5h
Z2VyKSk7CiAgICAgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX3NldF9wZXJzaXN0ZW50X2Ny
ZWRlbnRpYWxfc3RvcmFnZV9lbmFibGVkKHdlYnNpdGVEYXRhTWFuYWdlciwgRkFMU0UpOwogICAg
IGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfcGVyc2lzdGVu
dF9jcmVkZW50aWFsX3N0b3JhZ2VfZW5hYmxlZCh3ZWJzaXRlRGF0YU1hbmFnZXIpKTsKKyNlbmRp
ZgogCiAgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYXV0aC10ZXN0
Lmh0bWwiKS5kYXRhKCkpOwogICAgIHJlcXVlc3QgPSB0ZXN0LT53YWl0Rm9yQXV0aGVudGljYXRp
b25SZXF1ZXN0KCk7CkBAIC0yODAsNyArMjg3LDExIEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3
QXV0aGVudGljYXRpb25TdG9yYWdlKEF1dGhlbnRpY2F0aW9uVGVzdCogdGVzdCwgZ2NvbnN0cG9p
CiAgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CiAgICAgZ19hc3NlcnRfZmFsc2Uo
dGVzdC0+bV9hdXRoZW50aWNhdGlvbkNhbmNlbGxlZFJlY2VpdmVkKTsKICAgICBnX2Fzc2VydF90
cnVlKHRlc3QtPm1fYXV0aGVudGljYXRpb25TdWNjZWVkZWRSZWNlaXZlZCk7CisjaWYgRU5BQkxF
KDIwMjJfR0xJQl9BUEkpCisgICAgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfcGVyc2lzdGVu
dF9jcmVkZW50aWFsX3N0b3JhZ2VfZW5hYmxlZChuZXR3b3JrU2Vzc2lvbiwgVFJVRSk7CisjZWxz
ZQogICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9zZXRfcGVyc2lzdGVudF9jcmVkZW50
aWFsX3N0b3JhZ2VfZW5hYmxlZCh3ZWJzaXRlRGF0YU1hbmFnZXIsIFRSVUUpOworI2VuZGlmCiB9
CiAKIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25TdWNjZXNzKEF1dGhlbnRp
Y2F0aW9uVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKQEAgLTQ2Nyw4ICs0NzgsMTIgQEAgcHVi
bGljOgogICAgICAgICBnX2Fzc2VydF9mYWxzZShtX3Byb3h5U2VydmVyLmJhc2VVUkwoKS5pc051
bGwoKSk7CiAgICAgICAgIGdQcm94eVNlcnZlclBvcnQgPSBtX3Byb3h5U2VydmVyLnBvcnQoKTsK
ICAgICAgICAgV2ViS2l0TmV0d29ya1Byb3h5U2V0dGluZ3MqIHNldHRpbmdzID0gd2Via2l0X25l
dHdvcmtfcHJveHlfc2V0dGluZ3NfbmV3KG1fcHJveHlTZXJ2ZXIuYmFzZVVSTCgpLnN0cmluZygp
LnV0ZjgoKS5kYXRhKCksIG51bGxwdHIpOworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAg
ICAgICB3ZWJraXRfbmV0d29ya19zZXNzaW9uX3NldF9wcm94eV9zZXR0aW5ncyhtX25ldHdvcmtT
ZXNzaW9uLmdldCgpLCBXRUJLSVRfTkVUV09SS19QUk9YWV9NT0RFX0NVU1RPTSwgc2V0dGluZ3Mp
OworI2Vsc2UKICAgICAgICAgYXV0byogd2Vic2l0ZURhdGFNYW5hZ2VyID0gd2Via2l0X3dlYl9j
b250ZXh0X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcihtX3dlYkNvbnRleHQuZ2V0KCkpOwogICAg
ICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X25ldHdvcmtfcHJveHlfc2V0dGlu
Z3Mod2Vic2l0ZURhdGFNYW5hZ2VyLCBXRUJLSVRfTkVUV09SS19QUk9YWV9NT0RFX0NVU1RPTSwg
c2V0dGluZ3MpOworI2VuZGlmCiAgICAgICAgIHdlYmtpdF9uZXR3b3JrX3Byb3h5X3NldHRpbmdz
X2ZyZWUoc2V0dGluZ3MpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RBdXRvbWF0aW9uU2Vzc2lvbi5jcHAgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdEF1dG9tYXRpb25TZXNzaW9uLmNwcAppbmRl
eCAyZjE5NTJjMjk4OWIuLjAwYjU1MDg4ZjcyZCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RBdXRvbWF0aW9uU2Vzc2lvbi5j
cHAKQEAgLTM0MCw2ICszNDAsMTIgQEAgc3RhdGljIHZvaWQgdGVzdEF1dG9tYXRpb25TZXNzaW9u
UmVxdWVzdFNlc3Npb24oQXV0b21hdGlvblRlc3QqIHRlc3QsIGdjb25zdHBvaW4KICAgICAgICAg
bnVsbHB0cikpOwogICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X3dlYl92aWV3X2lzX2NvbnRyb2xs
ZWRfYnlfYXV0b21hdGlvbih3ZWJWaWV3LmdldCgpKSk7CiAgICAgZ19hc3NlcnRfY21wdWludCh3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2F1dG9tYXRpb25fcHJlc2VudGF0aW9uX3R5cGUod2ViVmlldy5n
ZXQoKSksID09LCBXRUJLSVRfQVVUT01BVElPTl9CUk9XU0lOR19DT05URVhUX1BSRVNFTlRBVElP
Tl9XSU5ET1cpOworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIC8vIEF1dG9tYXRpb24g
c2Vzc2lvbiBoYXMgaXRzIG93biBlcGhlbWVyYWwgc2Vzc2lvbi4KKyAgICBhdXRvKiBuZXR3b3Jr
U2Vzc2lvbiA9IHdlYmtpdF93ZWJfdmlld19nZXRfbmV0d29ya19zZXNzaW9uKHdlYlZpZXcuZ2V0
KCkpOworICAgIGdfYXNzZXJ0X2ZhbHNlKG5ldHdvcmtTZXNzaW9uID09IHRlc3QtPm1fbmV0d29y
a1Nlc3Npb24uZ2V0KCkpOworICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X25ldHdvcmtfc2Vzc2lv
bl9pc19lcGhlbWVyYWwobmV0d29ya1Nlc3Npb24pKTsKKyNlbmRpZgogICAgIGdfYXNzZXJ0X3Ry
dWUodGVzdC0+Y3JlYXRlVG9wTGV2ZWxCcm93c2luZ0NvbnRleHQod2ViVmlldy5nZXQoKSkpOwog
CiAgICAgYXV0byBuZXdXZWJWaWV3SW5XaW5kb3cgPSBUZXN0OjphZG9wdFZpZXcoZ19vYmplY3Rf
bmV3KFdFQktJVF9UWVBFX1dFQl9WSUVXLApAQCAtMzQ3LDEwICszNTMsMTcgQEAgc3RhdGljIHZv
aWQgdGVzdEF1dG9tYXRpb25TZXNzaW9uUmVxdWVzdFNlc3Npb24oQXV0b21hdGlvblRlc3QqIHRl
c3QsIGdjb25zdHBvaW4KICAgICAgICAgImJhY2tlbmQiLCBUZXN0OjpjcmVhdGVXZWJWaWV3QmFj
a2VuZCgpLAogI2VuZGlmCiAgICAgICAgICJ3ZWItY29udGV4dCIsIHRlc3QtPm1fd2ViQ29udGV4
dC5nZXQoKSwKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICAgICAgLy8gQ2hlY2sgYWxz
byBoZXJlIHRoYXQgbmV0d29yayBzZXNzaW9uIHByb3BlcnR5IGlzIGlnbm9yZWQgd2hlbiBpcy1j
b250cm9sbGVkLWJ5LWF1dG9tYXRpb24gaXMgdHJ1ZS4KKyAgICAgICAgIm5ldHdvcmstc2Vzc2lv
biIsIHRlc3QtPm1fbmV0d29ya1Nlc3Npb24uZ2V0KCksCisjZW5kaWYKICAgICAgICAgImlzLWNv
bnRyb2xsZWQtYnktYXV0b21hdGlvbiIsIFRSVUUsCiAgICAgICAgIG51bGxwdHIpKTsKICAgICBn
X2Fzc2VydF90cnVlKHdlYmtpdF93ZWJfdmlld19pc19jb250cm9sbGVkX2J5X2F1dG9tYXRpb24o
bmV3V2ViVmlld0luV2luZG93LmdldCgpKSk7CiAgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRf
d2ViX3ZpZXdfZ2V0X2F1dG9tYXRpb25fcHJlc2VudGF0aW9uX3R5cGUobmV3V2ViVmlld0luV2lu
ZG93LmdldCgpKSwgPT0sIFdFQktJVF9BVVRPTUFUSU9OX0JST1dTSU5HX0NPTlRFWFRfUFJFU0VO
VEFUSU9OX1dJTkRPVyk7CisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgZ19hc3NlcnRf
dHJ1ZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X25ldHdvcmtfc2Vzc2lvbihuZXdXZWJWaWV3SW5XaW5k
b3cuZ2V0KCkpID09IG5ldHdvcmtTZXNzaW9uKTsKKyNlbmRpZgogICAgIGdfYXNzZXJ0X3RydWUo
dGVzdC0+Y3JlYXRlTmV3V2luZG93KG5ld1dlYlZpZXdJbldpbmRvdy5nZXQoKSkpOwogCiAgICAg
YXV0byBuZXdXZWJWaWV3SW5UYWIgPSBUZXN0OjphZG9wdFZpZXcoZ19vYmplY3RfbmV3KFdFQktJ
VF9UWVBFX1dFQl9WSUVXLApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRHTGliL1Rlc3REb3dubG9hZHMuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRHTGliL1Rlc3REb3dubG9hZHMuY3BwCmluZGV4IGMzYWRkNGU0ZTJhOC4uOWM4ZTVhOTYx
MzE3IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVz
dERvd25sb2Fkcy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGli
L1Rlc3REb3dubG9hZHMuY3BwCkBAIC04OSw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIFRSVUU7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgZG93bmxvYWRTdGFydGVkQ2FsbGJh
Y2soV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCwgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBE
b3dubG9hZFRlc3QqIHRlc3QpCisgICAgc3RhdGljIHZvaWQgZG93bmxvYWRTdGFydGVkQ2FsbGJh
Y2soRG93bmxvYWRUZXN0KiB0ZXN0LCBXZWJLaXREb3dubG9hZCogZG93bmxvYWQpCiAgICAgewog
ICAgICAgICBnX2Fzc2VydF9ub25udWxsKHdlYmtpdF9kb3dubG9hZF9nZXRfcmVxdWVzdChkb3du
bG9hZCkpOwogICAgICAgICB0ZXN0LT5zdGFydGVkKGRvd25sb2FkKTsKQEAgLTEwNiwxMiArMTA2
LDIwIEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2Rvd25sb2FkU2l6ZSgwKQogICAgICAgICAsIG1f
YWxsb3dPdmVyd3JpdGUoZmFsc2UpCiAgICAgewotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1f
d2ViQ29udGV4dC5nZXQoKSwgImRvd25sb2FkLXN0YXJ0ZWQiLCBHX0NBTExCQUNLKGRvd25sb2Fk
U3RhcnRlZENhbGxiYWNrKSwgdGhpcyk7CisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAg
ICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX25ldHdvcmtTZXNzaW9uLmdldCgpLCAiZG93
bmxvYWQtc3RhcnRlZCIsIEdfQ0FMTEJBQ0soZG93bmxvYWRTdGFydGVkQ2FsbGJhY2spLCB0aGlz
KTsKKyNlbHNlCisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3dlYkNvbnRleHQu
Z2V0KCksICJkb3dubG9hZC1zdGFydGVkIiwgR19DQUxMQkFDSyhkb3dubG9hZFN0YXJ0ZWRDYWxs
YmFjayksIHRoaXMpOworI2VuZGlmCiAgICAgfQogCiAgICAgfkRvd25sb2FkVGVzdCgpCiAgICAg
ewotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV93ZWJDb250
ZXh0LmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKKyNpZiBF
TkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVj
dF9tYXRjaGVkKG1fbmV0d29ya1Nlc3Npb24uZ2V0KCksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAs
IDAsIG51bGxwdHIsIG51bGxwdHIsIHRoaXMpOworI2Vsc2UKKyAgICAgICAgZ19zaWduYWxfaGFu
ZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fd2ViQ29udGV4dC5nZXQoKSwgR19TSUdOQUxfTUFU
Q0hfREFUQSwgMCwgMCwgbnVsbHB0ciwgbnVsbHB0ciwgdGhpcyk7CisjZW5kaWYKICAgICAgICAg
Z19tYWluX2xvb3BfdW5yZWYobV9tYWluTG9vcCk7CiAgICAgfQogCkBAIC0xNjAsNyArMTY4LDEx
IEBAIHB1YmxpYzoKIAogICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkVVJJQW5k
V2FpdFVudGlsRmluaXNoZXMoY29uc3QgQ1N0cmluZyYgcmVxdWVzdFVSSSkKICAgICB7CisjaWYg
RU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRv
d25sb2FkID0gYWRvcHRHUmVmKHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZG93bmxvYWRfdXJpKG1f
bmV0d29ya1Nlc3Npb24uZ2V0KCksIHJlcXVlc3RVUkkuZGF0YSgpKSk7CisjZWxzZQogICAgICAg
ICBHUmVmUHRyPFdlYktpdERvd25sb2FkPiBkb3dubG9hZCA9IGFkb3B0R1JlZih3ZWJraXRfd2Vi
X2NvbnRleHRfZG93bmxvYWRfdXJpKG1fd2ViQ29udGV4dC5nZXQoKSwgcmVxdWVzdFVSSS5kYXRh
KCkpKTsKKyNlbmRpZgogICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlz
aGVzKEdfT0JKRUNUKGRvd25sb2FkLmdldCgpKSk7CiAKICAgICAgICAgZ19hc3NlcnRfZmFsc2Uo
d2Via2l0X2Rvd25sb2FkX2dldF9hbGxvd19vdmVyd3JpdGUoZG93bmxvYWQuZ2V0KCkpKTsKQEAg
LTUzOSw3ICs1NTEsNyBAQCBjbGFzcyBXZWJWaWV3RG93bmxvYWRUZXN0OiBwdWJsaWMgV2ViVmll
d1Rlc3QgewogcHVibGljOgogICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoV2ViVmlld0Rvd25s
b2FkVGVzdCk7CiAKLSAgICBzdGF0aWMgdm9pZCBkb3dubG9hZFN0YXJ0ZWRDYWxsYmFjayhXZWJL
aXRXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIFdlYlZpZXdE
b3dubG9hZFRlc3QqIHRlc3QpCisgICAgc3RhdGljIHZvaWQgZG93bmxvYWRTdGFydGVkQ2FsbGJh
Y2soV2ViVmlld0Rvd25sb2FkVGVzdCogdGVzdCwgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQog
ICAgIHsKICAgICAgICAgdGVzdC0+bV9kb3dubG9hZCA9IGRvd25sb2FkOwogICAgICAgICB0ZXN0
LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKGRvd25sb2Fk
KSk7CkBAIC01NTAsMTIgKzU2MiwyMCBAQCBwdWJsaWM6CiAKICAgICBXZWJWaWV3RG93bmxvYWRU
ZXN0KCkKICAgICB7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2Via2l0X3dlYl92aWV3X2dl
dF9jb250ZXh0KG1fd2ViVmlldyksICJkb3dubG9hZC1zdGFydGVkIiwgR19DQUxMQkFDSyhkb3du
bG9hZFN0YXJ0ZWRDYWxsYmFjayksIHRoaXMpOworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQor
ICAgICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQod2Via2l0X3dlYl92aWV3X2dldF9uZXR3
b3JrX3Nlc3Npb24obV93ZWJWaWV3KSwgImRvd25sb2FkLXN0YXJ0ZWQiLCBHX0NBTExCQUNLKGRv
d25sb2FkU3RhcnRlZENhbGxiYWNrKSwgdGhpcyk7CisjZWxzZQorICAgICAgICBnX3NpZ25hbF9j
b25uZWN0X3N3YXBwZWQod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KG1fd2ViVmlldyksICJk
b3dubG9hZC1zdGFydGVkIiwgR19DQUxMQkFDSyhkb3dubG9hZFN0YXJ0ZWRDYWxsYmFjayksIHRo
aXMpOworI2VuZGlmCiAgICAgfQogCiAgICAgfldlYlZpZXdEb3dubG9hZFRlc3QoKQogICAgIHsK
LSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKHdlYmtpdF93ZWJf
dmlld19nZXRfY29udGV4dChtX3dlYlZpZXcpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAw
LCAwLCB0aGlzKTsKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICAgICAgZ19zaWduYWxf
aGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKHdlYmtpdF93ZWJfdmlld19nZXRfbmV0d29ya19z
ZXNzaW9uKG1fd2ViVmlldyksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIG51bGxwdHIsIG51
bGxwdHIsIHRoaXMpOworI2Vsc2UKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVj
dF9tYXRjaGVkKHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dChtX3dlYlZpZXcpLCBHX1NJR05B
TF9NQVRDSF9EQVRBLCAwLCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlzKTsKKyNlbmRpZgogICAg
IH0KIAogICAgIHZvaWQgd2FpdFVudGlsRG93bmxvYWRTdGFydGVkKCkKQEAgLTU4Niw3ICs2MDYs
MTEgQEAgcHVibGljOgogICAgIH0KIAogI2lmIFBMQVRGT1JNKEdUSykKKyNpZiBFTkFCTEUoMjAy
Ml9HTElCX0FQSSkKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gY29udGV4dE1lbnVDYWxsYmFjayhXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRDb250ZXh0TWVudSogY29udGV4dE1lbnUsIFdlYktp
dEhpdFRlc3RSZXN1bHQqIGhpdFRlc3RSZXN1bHQsIFdlYlZpZXdEb3dubG9hZFRlc3QqIHRlc3Qp
CisjZWxzZQogICAgIHN0YXRpYyBnYm9vbGVhbiBjb250ZXh0TWVudUNhbGxiYWNrKFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcsIFdlYktpdENvbnRleHRNZW51KiBjb250ZXh0TWVudSwgR2RrRXZlbnQq
LCBXZWJLaXRIaXRUZXN0UmVzdWx0KiBoaXRUZXN0UmVzdWx0LCBXZWJWaWV3RG93bmxvYWRUZXN0
KiB0ZXN0KQorI2VuZGlmCiAgICAgewogICAgICAgICBnX2Fzc2VydF90cnVlKFdFQktJVF9JU19I
SVRfVEVTVF9SRVNVTFQoaGl0VGVzdFJlc3VsdCkpOwogICAgICAgICBHTGlzdCogaXRlbXMgPSB3
ZWJraXRfY29udGV4dF9tZW51X2dldF9pdGVtcyhjb250ZXh0TWVudSk7CkBAIC04MDMsMTQgKzgy
NywyMyBAQCBzdGF0aWMgdm9pZCB0ZXN0RG93bmxvYWRVc2VyQWdlbnQoRG93bmxvYWRUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQogCiBzdGF0aWMgdm9pZCB0ZXN0RG93bmxvYWRFcGhlbWVyYWxD
b250ZXh0KFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiB7CisjaWYgRU5BQkxFKDIwMjJfR0xJ
Ql9BUEkpCisgICAgR1JlZlB0cjxXZWJLaXROZXR3b3JrU2Vzc2lvbj4gbmV0d29ya1Nlc3Npb24g
PSBhZG9wdEdSZWYod2Via2l0X25ldHdvcmtfc2Vzc2lvbl9uZXdfZXBoZW1lcmFsKCkpOworICAg
IHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QobmV0
d29ya1Nlc3Npb24uZ2V0KCkpKTsKKyNlbHNlCiAgICAgR1JlZlB0cjxXZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXI+IG1hbmFnZXIgPSBhZG9wdEdSZWYod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X25ld19lcGhlbWVyYWwoKSk7CiAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRl
c3RGaW5pc2hlcyhHX09CSkVDVChtYW5hZ2VyLmdldCgpKSk7CiAgICAgR1JlZlB0cjxXZWJLaXRX
ZWJDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJfY29udGV4dF9uZXdfd2l0
aF93ZWJzaXRlX2RhdGFfbWFuYWdlcihtYW5hZ2VyLmdldCgpKSk7CiAgICAgdGVzdC0+YXNzZXJ0
T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChjb250ZXh0LmdldCgpKSk7
CiAgICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfd2ViX2NvbnRleHRfaXNfZXBoZW1lcmFsKGNvbnRl
eHQuZ2V0KCkpKTsKKyNlbmRpZgogCiAgICAgR1JlZlB0cjxHTWFpbkxvb3A+IG1haW5Mb29wID0g
YWRvcHRHUmVmKGdfbWFpbl9sb29wX25ldyhudWxscHRyLCBUUlVFKSk7CisjaWYgRU5BQkxFKDIw
MjJfR0xJQl9BUEkpCisgICAgR1JlZlB0cjxXZWJLaXREb3dubG9hZD4gZG93bmxvYWQgPSBhZG9w
dEdSZWYod2Via2l0X25ldHdvcmtfc2Vzc2lvbl9kb3dubG9hZF91cmkobmV0d29ya1Nlc3Npb24u
Z2V0KCksIGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi90ZXN0LnBkZiIpLmRhdGEoKSkpOworI2Vs
c2UKICAgICBHUmVmUHRyPFdlYktpdERvd25sb2FkPiBkb3dubG9hZCA9IGFkb3B0R1JlZih3ZWJr
aXRfd2ViX2NvbnRleHRfZG93bmxvYWRfdXJpKGNvbnRleHQuZ2V0KCksIGtTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi90ZXN0LnBkZiIpLmRhdGEoKSkpOworI2VuZGlmCiAgICAgdGVzdC0+YXNzZXJ0
T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChkb3dubG9hZC5nZXQoKSkp
OwogICAgIGdfc2lnbmFsX2Nvbm5lY3QoZG93bmxvYWQuZ2V0KCksICJkZWNpZGUtZGVzdGluYXRp
b24iLCBHX0NBTExCQUNLKCtbXShXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGdjaGFy
KiBzdWdnZXN0ZWRGaWxlbmFtZSwgZ3BvaW50ZXIpIHsKICAgICAgICAgR1VuaXF1ZVB0cjxjaGFy
PiBkZXN0aW5hdGlvbihnX2J1aWxkX2ZpbGVuYW1lKFRlc3Q6OmRhdGFEaXJlY3RvcnkoKSwgc3Vn
Z2VzdGVkRmlsZW5hbWUsIG51bGxwdHIpKTsKQEAgLTgyNyw3ICs4NjAsNyBAQCBzdGF0aWMgdm9p
ZCB0ZXN0RG93bmxvYWRFcGhlbWVyYWxDb250ZXh0KFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
CiAgICAgZ19maWxlX2RlbGV0ZShkZXN0RmlsZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CiB9
CiAKLSNpZiBQTEFURk9STShHVEspICYmICFVU0UoR1RLNCkKKyNpZiBQTEFURk9STShHVEspCiBz
dGF0aWMgdm9pZCB0ZXN0Q29udGV4dE1lbnVEb3dubG9hZEFjdGlvbnMoV2ViVmlld0Rvd25sb2Fk
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKIHsKICAgICB0ZXN0LT5zaG93SW5XaW5kb3coKTsK
QEAgLTg1OCw3ICs4OTEsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0Q29udGV4dE1lbnVEb3dubG9hZEFj
dGlvbnMoV2ViVmlld0Rvd25sb2FkVGVzdCogdGVzdCwgZ2NvbnN0cG9pbgogICAgIGdfYXNzZXJ0
X2NtcGludChnX2ZpbGVfaW5mb19nZXRfc2l6ZShkb3dubG9hZEZpbGVJbmZvLmdldCgpKSwgPiwg
MCk7CiAgICAgZ19maWxlX2RlbGV0ZShkb3dubG9hZEZpbGUuZ2V0KCksIG51bGxwdHIsIG51bGxw
dHIpOwogfQotI2VuZGlmIC8vIFBMQVRGT1JNKEdUSykgJiYgIVVTRShHVEs0KQorI2VuZGlmIC8v
IFBMQVRGT1JNKEdUSykKIAogI2lmIFBMQVRGT1JNKEdUSykKIHN0YXRpYyB2b2lkIHRlc3RCbG9i
RG93bmxvYWQoV2ViVmlld0Rvd25sb2FkVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKQEAgLTkx
NiwxMiArOTQ5LDkgQEAgdm9pZCBiZWZvcmVBbGwoKQogICAgIERvd25sb2FkVGVzdDo6YWRkKCJE
b3dubG9hZHMiLCAidGV4dC1wbGFpbi1taW1lLXR5cGUiLCB0ZXN0RG93bmxvYWRUZXh0UGxhaW5N
SU1FVHlwZSk7CiAgICAgRG93bmxvYWRUZXN0OjphZGQoIkRvd25sb2FkcyIsICJ1c2VyLWFnZW50
IiwgdGVzdERvd25sb2FkVXNlckFnZW50KTsKICAgICBUZXN0OjphZGQoIkRvd25sb2FkcyIsICJl
cGhlbWVyYWwtY29udGV4dCIsIHRlc3REb3dubG9hZEVwaGVtZXJhbENvbnRleHQpOwotICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQga2V5U3Ryb2tlIGluIFdQRS4KICNpZiBQTEFURk9STShHVEspCi0j
aWYgIVVTRShHVEs0KQotICAgIC8vIEZJWE1FOiBSZXdvcmsgY29udGV4dCBtZW51IEFQSSBpbiBH
VEs0IHRvIG5vdCBleHBvc2UgR2RrRXZlbnQuCisgICAgLy8gRklYTUU6IEltcGxlbWVudCBrZXlT
dHJva2UgaW4gV1BFLgogICAgIFdlYlZpZXdEb3dubG9hZFRlc3Q6OmFkZCgiRG93bmxvYWRzIiwg
ImNvbnRleC1tZW51LWRvd25sb2FkLWFjdGlvbnMiLCB0ZXN0Q29udGV4dE1lbnVEb3dubG9hZEFj
dGlvbnMpOwotI2VuZGlmCiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBtb3VzZSBjbGljayBpbiBX
UEUuCiAgICAgV2ViVmlld0Rvd25sb2FkVGVzdDo6YWRkKCJEb3dubG9hZHMiLCAiYmxvYi1kb3du
bG9hZCIsIHRlc3RCbG9iRG93bmxvYWQpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFNTTC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFNTTC5jcHAKaW5kZXggYmFiYWRhZjA1OWQ2Li40ODg0
MTIyMjEwNTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xp
Yi9UZXN0U1NMLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIv
VGVzdFNTTC5jcHAKQEAgLTY3LDkgKzY3LDE0IEBAIHB1YmxpYzoKIAogc3RhdGljIHZvaWQgdGVz
dFNTTChTU0xUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogeworI2lmIEVOQUJMRSgyMDIyX0dM
SUJfQVBJKQorICAgIFdlYktpdFRMU0Vycm9yc1BvbGljeSBvcmlnaW5hbFBvbGljeSA9IHdlYmtp
dF9uZXR3b3JrX3Nlc3Npb25fZ2V0X3Rsc19lcnJvcnNfcG9saWN5KHRlc3QtPm1fbmV0d29ya1Nl
c3Npb24uZ2V0KCkpOworICAgIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fc2V0X3Rsc19lcnJvcnNf
cG9saWN5KHRlc3QtPm1fbmV0d29ya1Nlc3Npb24uZ2V0KCksIFdFQktJVF9UTFNfRVJST1JTX1BP
TElDWV9JR05PUkUpOworI2Vsc2UKICAgICBhdXRvKiB3ZWJzaXRlRGF0YU1hbmFnZXIgPSB3ZWJr
aXRfd2ViX2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHRlc3QtPm1fd2ViQ29udGV4
dC5nZXQoKSk7CiAgICAgV2ViS2l0VExTRXJyb3JzUG9saWN5IG9yaWdpbmFsUG9saWN5ID0gd2Vi
a2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF90bHNfZXJyb3JzX3BvbGljeSh3ZWJzaXRlRGF0
YU1hbmFnZXIpOwogICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9zZXRfdGxzX2Vycm9y
c19wb2xpY3kod2Vic2l0ZURhdGFNYW5hZ2VyLCBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfSUdO
T1JFKTsKKyNlbmRpZgogCiAgICAgdGVzdC0+bG9hZFVSSShrSHR0cHNTZXJ2ZXItPmdldFVSSUZv
clBhdGgoIi8iKS5kYXRhKCkpOwogICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwpA
QCAtODYsNyArOTEsMTEgQEAgc3RhdGljIHZvaWQgdGVzdFNTTChTU0xUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQogICAgIGdfYXNzZXJ0X251bGwodGVzdC0+bV9jZXJ0aWZpY2F0ZSk7CiAgICAg
Z19hc3NlcnRfY21wdWludCh0ZXN0LT5tX3Rsc0Vycm9ycywgPT0sIDApOwogCisjaWYgRU5BQkxF
KDIwMjJfR0xJQl9BUEkpCisgICAgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfdGxzX2Vycm9y
c19wb2xpY3kodGVzdC0+bV9uZXR3b3JrU2Vzc2lvbi5nZXQoKSwgb3JpZ2luYWxQb2xpY3kpOwor
I2Vsc2UKICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X3Rsc19lcnJvcnNfcG9s
aWN5KHdlYnNpdGVEYXRhTWFuYWdlciwgb3JpZ2luYWxQb2xpY3kpOworI2VuZGlmCiB9CiAKIGNs
YXNzIEluc2VjdXJlQ29udGVudFRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7CkBAIC0xMTcsOSAr
MTI2LDE0IEBAIHB1YmxpYzoKIAogc3RhdGljIHZvaWQgdGVzdEluc2VjdXJlQ29udGVudChJbnNl
Y3VyZUNvbnRlbnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogeworI2lmIEVOQUJMRSgyMDIy
X0dMSUJfQVBJKQorICAgIFdlYktpdFRMU0Vycm9yc1BvbGljeSBvcmlnaW5hbFBvbGljeSA9IHdl
YmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X3Rsc19lcnJvcnNfcG9saWN5KHRlc3QtPm1fbmV0d29y
a1Nlc3Npb24uZ2V0KCkpOworICAgIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fc2V0X3Rsc19lcnJv
cnNfcG9saWN5KHRlc3QtPm1fbmV0d29ya1Nlc3Npb24uZ2V0KCksIFdFQktJVF9UTFNfRVJST1JT
X1BPTElDWV9JR05PUkUpOworI2Vsc2UKICAgICBhdXRvKiB3ZWJzaXRlRGF0YU1hbmFnZXIgPSB3
ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHRlc3QtPm1fd2ViQ29u
dGV4dC5nZXQoKSk7CiAgICAgV2ViS2l0VExTRXJyb3JzUG9saWN5IG9yaWdpbmFsUG9saWN5ID0g
d2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF90bHNfZXJyb3JzX3BvbGljeSh3ZWJzaXRl
RGF0YU1hbmFnZXIpOwogICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9zZXRfdGxzX2Vy
cm9yc19wb2xpY3kod2Vic2l0ZURhdGFNYW5hZ2VyLCBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lf
SUdOT1JFKTsKKyNlbmRpZgogCiAgICAgdGVzdC0+bG9hZFVSSShrSHR0cHNTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi9pbnNlY3VyZS1jb250ZW50LyIpLmRhdGEoKSk7CiAgICAgdGVzdC0+d2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7CkBAIC0xMjksMTYgKzE0MywyNCBAQCBzdGF0aWMgdm9pZCB0ZXN0
SW5zZWN1cmVDb250ZW50KEluc2VjdXJlQ29udGVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjQ2OQog
ICAgIGdfYXNzZXJ0X3RydWUodGVzdC0+bV9pbnNlY3VyZUNvbnRlbnREaXNwbGF5ZWQpOwogCisj
aWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRf
dGxzX2Vycm9yc19wb2xpY3kodGVzdC0+bV9uZXR3b3JrU2Vzc2lvbi5nZXQoKSwgb3JpZ2luYWxQ
b2xpY3kpOworI2Vsc2UKICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X3Rsc19l
cnJvcnNfcG9saWN5KHdlYnNpdGVEYXRhTWFuYWdlciwgb3JpZ2luYWxQb2xpY3kpOworI2VuZGlm
CiB9CiAKIHN0YXRpYyBib29sIGFzc2VydElmU1NMUmVxdWVzdFByb2Nlc3NlZCA9IGZhbHNlOwog
CiBzdGF0aWMgdm9pZCB0ZXN0VExTRXJyb3JzUG9saWN5KFNTTFRlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCiB7Ci0gICAgYXV0byogd2Vic2l0ZURhdGFNYW5hZ2VyID0gd2Via2l0X3dlYl9jb250
ZXh0X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcih0ZXN0LT5tX3dlYkNvbnRleHQuZ2V0KCkpOwog
ICAgIC8vIFRMUyBlcnJvcnMgYXJlIHRyZWF0ZWQgYXMgdHJhbnNwb3J0IGZhaWx1cmVzIGJ5IGRl
ZmF1bHQuCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgZ19hc3NlcnRfY21waW50KHdl
YmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X3Rsc19lcnJvcnNfcG9saWN5KHRlc3QtPm1fbmV0d29y
a1Nlc3Npb24uZ2V0KCkpLCA9PSwgV0VCS0lUX1RMU19FUlJPUlNfUE9MSUNZX0ZBSUwpOworI2Vs
c2UKKyAgICBhdXRvKiB3ZWJzaXRlRGF0YU1hbmFnZXIgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0
X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHRlc3QtPm1fd2ViQ29udGV4dC5nZXQoKSk7CiAgICAgZ19h
c3NlcnRfY21waW50KHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfdGxzX2Vycm9yc19w
b2xpY3kod2Vic2l0ZURhdGFNYW5hZ2VyKSwgPT0sIFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9G
QUlMKTsKKyNlbmRpZgogCiAgICAgYXNzZXJ0SWZTU0xSZXF1ZXN0UHJvY2Vzc2VkID0gdHJ1ZTsK
ICAgICB0ZXN0LT5sb2FkVVJJKGtIdHRwc1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEo
KSk7CkBAIC0xNDgsMzcgKzE3MCw2NCBAQCBzdGF0aWMgdm9pZCB0ZXN0VExTRXJyb3JzUG9saWN5
KFNTTFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgZ19hc3NlcnRfZmFsc2UodGVzdC0+
bV9sb2FkRXZlbnRzLmNvbnRhaW5zKExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRDb21taXR0ZWQpKTsK
ICAgICBhc3NlcnRJZlNTTFJlcXVlc3RQcm9jZXNzZWQgPSBmYWxzZTsKIAorI2lmIEVOQUJMRSgy
MDIyX0dMSUJfQVBJKQorICAgIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fc2V0X3Rsc19lcnJvcnNf
cG9saWN5KHRlc3QtPm1fbmV0d29ya1Nlc3Npb24uZ2V0KCksIFdFQktJVF9UTFNfRVJST1JTX1BP
TElDWV9JR05PUkUpOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfbmV0d29ya19zZXNzaW9u
X2dldF90bHNfZXJyb3JzX3BvbGljeSh0ZXN0LT5tX25ldHdvcmtTZXNzaW9uLmdldCgpKSwgPT0s
IFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9JR05PUkUpOworI2Vsc2UKICAgICB3ZWJraXRfd2Vi
c2l0ZV9kYXRhX21hbmFnZXJfc2V0X3Rsc19lcnJvcnNfcG9saWN5KHdlYnNpdGVEYXRhTWFuYWdl
ciwgV0VCS0lUX1RMU19FUlJPUlNfUE9MSUNZX0lHTk9SRSk7CiAgICAgZ19hc3NlcnRfY21waW50
KHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfdGxzX2Vycm9yc19wb2xpY3kod2Vic2l0
ZURhdGFNYW5hZ2VyKSwgPT0sIFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9JR05PUkUpOworI2Vu
ZGlmCiAKICAgICB0ZXN0LT5tX2xvYWRGYWlsZWQgPSBmYWxzZTsKICAgICB0ZXN0LT5sb2FkVVJJ
KGtIdHRwc1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CiAgICAgdGVzdC0+d2Fp
dFVudGlsTG9hZEZpbmlzaGVkKCk7CiAgICAgZ19hc3NlcnRfZmFsc2UodGVzdC0+bV9sb2FkRmFp
bGVkKTsKIAotICAgIC8vIEFuIGVwaGVtZXJhbCB3ZWIgdmlldyBzaG91bGQga2VlcCB0aGUgc2Ft
ZSBuZXR3b3JrIHNldHRpbmdzIGJ5IGRlZmF1bHQuCisgICAgLy8gQW4gZXBoZW1lcmFsIHdlYiB2
aWV3IHNob3VsZCBrZWVwIHRoZSBzYW1lIG5ldHdvcmsgc2V0dGluZ3MuCisjaWYgRU5BQkxFKDIw
MjJfR0xJQl9BUEkpCisgICAgR1JlZlB0cjxXZWJLaXROZXR3b3JrU2Vzc2lvbj4gZXBoZW1lcmFs
U2Vzc2lvbiA9IGFkb3B0R1JlZih3ZWJraXRfbmV0d29ya19zZXNzaW9uX25ld19lcGhlbWVyYWwo
KSk7CisgICAgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfdGxzX2Vycm9yc19wb2xpY3koZXBo
ZW1lcmFsU2Vzc2lvbi5nZXQoKSwgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfdGxzX2Vycm9y
c19wb2xpY3kodGVzdC0+bV9uZXR3b3JrU2Vzc2lvbi5nZXQoKSkpOworI2VuZGlmCiAgICAgYXV0
byB3ZWJWaWV3ID0gVGVzdDo6YWRvcHRWaWV3KGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJf
VklFVywKICNpZiBQTEFURk9STShXUEUpCiAgICAgICAgICJiYWNrZW5kIiwgVGVzdDo6Y3JlYXRl
V2ViVmlld0JhY2tlbmQoKSwKICNlbmRpZgogICAgICAgICAid2ViLWNvbnRleHQiLCB0ZXN0LT5t
X3dlYkNvbnRleHQuZ2V0KCksCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgICAgICJu
ZXR3b3JrLXNlc3Npb24iLCBlcGhlbWVyYWxTZXNzaW9uLmdldCgpLAorI2Vsc2UKICAgICAgICAg
ImlzLWVwaGVtZXJhbCIsIFRSVUUsCisjZW5kaWYKICAgICAgICAgbnVsbHB0cikpOworI2lmIEVO
QUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X3dlYl92aWV3X2dl
dF9uZXR3b3JrX3Nlc3Npb24od2ViVmlldy5nZXQoKSkgPT0gZXBoZW1lcmFsU2Vzc2lvbi5nZXQo
KSk7CisjZWxzZQogICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X3dlYl92aWV3X2lzX2VwaGVtZXJh
bCh3ZWJWaWV3LmdldCgpKSk7CiAgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X3dlYl9jb250ZXh0
X2lzX2VwaGVtZXJhbCh0ZXN0LT5tX3dlYkNvbnRleHQuZ2V0KCkpKTsKICAgICBhdXRvKiB3ZWJW
aWV3RGF0YU1hbmFnZXIgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
KHdlYlZpZXcuZ2V0KCkpOwogICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYnNpdGVEYXRhTWFuYWdlciA9
PSB3ZWJWaWV3RGF0YU1hbmFnZXIpOwogICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2Vic2l0
ZV9kYXRhX21hbmFnZXJfZ2V0X3Rsc19lcnJvcnNfcG9saWN5KHdlYnNpdGVEYXRhTWFuYWdlciks
ID09LCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X3Rsc19lcnJvcnNfcG9saWN5KHdl
YlZpZXdEYXRhTWFuYWdlcikpOworI2VuZGlmCiAKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkK
KyAgICB3ZWJraXRfbmV0d29ya19zZXNzaW9uX3NldF90bHNfZXJyb3JzX3BvbGljeSh0ZXN0LT5t
X25ldHdvcmtTZXNzaW9uLmdldCgpLCBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfRkFJTCk7Cisg
ICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X3Rsc19lcnJvcnNf
cG9saWN5KHRlc3QtPm1fbmV0d29ya1Nlc3Npb24uZ2V0KCkpLCA9PSwgV0VCS0lUX1RMU19FUlJP
UlNfUE9MSUNZX0ZBSUwpOworI2Vsc2UKICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJf
c2V0X3Rsc19lcnJvcnNfcG9saWN5KHdlYnNpdGVEYXRhTWFuYWdlciwgV0VCS0lUX1RMU19FUlJP
UlNfUE9MSUNZX0ZBSUwpOwogICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2Vic2l0ZV9kYXRh
X21hbmFnZXJfZ2V0X3Rsc19lcnJvcnNfcG9saWN5KHdlYnNpdGVEYXRhTWFuYWdlciksID09LCBX
RUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfRkFJTCk7CisjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQg
dGVzdFRMU0Vycm9yc1JlZGlyZWN0KFNTTFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiB7Cisj
aWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgV2ViS2l0VExTRXJyb3JzUG9saWN5IG9yaWdp
bmFsUG9saWN5ID0gd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfdGxzX2Vycm9yc19wb2xpY3ko
dGVzdC0+bV9uZXR3b3JrU2Vzc2lvbi5nZXQoKSk7CisgICAgd2Via2l0X25ldHdvcmtfc2Vzc2lv
bl9zZXRfdGxzX2Vycm9yc19wb2xpY3kodGVzdC0+bV9uZXR3b3JrU2Vzc2lvbi5nZXQoKSwgV0VC
S0lUX1RMU19FUlJPUlNfUE9MSUNZX0ZBSUwpOworI2Vsc2UKICAgICBhdXRvKiB3ZWJzaXRlRGF0
YU1hbmFnZXIgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHRl
c3QtPm1fd2ViQ29udGV4dC5nZXQoKSk7CiAgICAgV2ViS2l0VExTRXJyb3JzUG9saWN5IG9yaWdp
bmFsUG9saWN5ID0gd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF90bHNfZXJyb3JzX3Bv
bGljeSh3ZWJzaXRlRGF0YU1hbmFnZXIpOwogICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdl
cl9zZXRfdGxzX2Vycm9yc19wb2xpY3kod2Vic2l0ZURhdGFNYW5hZ2VyLCBXRUJLSVRfVExTX0VS
Uk9SU19QT0xJQ1lfRkFJTCk7CisjZW5kaWYKIAogICAgIGFzc2VydElmU1NMUmVxdWVzdFByb2Nl
c3NlZCA9IHRydWU7CiAgICAgdGVzdC0+bG9hZFVSSShrSHR0cHNTZXJ2ZXItPmdldFVSSUZvclBh
dGgoIi9yZWRpcmVjdCIpLmRhdGEoKSk7CkBAIC0xODgsNyArMjM3LDExIEBAIHN0YXRpYyB2b2lk
IHRlc3RUTFNFcnJvcnNSZWRpcmVjdChTU0xUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAg
IGdfYXNzZXJ0X2ZhbHNlKHRlc3QtPm1fbG9hZEV2ZW50cy5jb250YWlucyhMb2FkVHJhY2tpbmdU
ZXN0OjpMb2FkQ29tbWl0dGVkKSk7CiAgICAgYXNzZXJ0SWZTU0xSZXF1ZXN0UHJvY2Vzc2VkID0g
ZmFsc2U7CiAKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICB3ZWJraXRfbmV0d29ya19z
ZXNzaW9uX3NldF90bHNfZXJyb3JzX3BvbGljeSh0ZXN0LT5tX25ldHdvcmtTZXNzaW9uLmdldCgp
LCBvcmlnaW5hbFBvbGljeSk7CisjZWxzZQogICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdl
cl9zZXRfdGxzX2Vycm9yc19wb2xpY3kod2Vic2l0ZURhdGFNYW5hZ2VyLCBvcmlnaW5hbFBvbGlj
eSk7CisjZW5kaWYKIH0KIAogc3RhdGljIGdib29sZWFuIHdlYlZpZXdBdXRoZW50aWNhdGlvbkNh
bGxiYWNrKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVl
c3QpCkBAIC0yMDAsOSArMjUzLDE0IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3QXV0aGVudGlj
YXRpb25DYWxsYmFjayhXZWJLaXRXZWJWaWV3KiwgV2ViS2l0QXV0aGVudGljYXRpCiAKIHN0YXRp
YyB2b2lkIHRlc3RUTFNFcnJvcnNIVFRQQXV0aChTU0xUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQogeworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIFdlYktpdFRMU0Vycm9yc1BvbGlj
eSBvcmlnaW5hbFBvbGljeSA9IHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X3Rsc19lcnJvcnNf
cG9saWN5KHRlc3QtPm1fbmV0d29ya1Nlc3Npb24uZ2V0KCkpOworICAgIHdlYmtpdF9uZXR3b3Jr
X3Nlc3Npb25fc2V0X3Rsc19lcnJvcnNfcG9saWN5KHRlc3QtPm1fbmV0d29ya1Nlc3Npb24uZ2V0
KCksIFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9GQUlMKTsKKyNlbHNlCiAgICAgYXV0byogd2Vi
c2l0ZURhdGFNYW5hZ2VyID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF93ZWJzaXRlX2RhdGFfbWFu
YWdlcih0ZXN0LT5tX3dlYkNvbnRleHQuZ2V0KCkpOwogICAgIFdlYktpdFRMU0Vycm9yc1BvbGlj
eSBvcmlnaW5hbFBvbGljeSA9IHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfdGxzX2Vy
cm9yc19wb2xpY3kod2Vic2l0ZURhdGFNYW5hZ2VyKTsKICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRh
X21hbmFnZXJfc2V0X3Rsc19lcnJvcnNfcG9saWN5KHdlYnNpdGVEYXRhTWFuYWdlciwgV0VCS0lU
X1RMU19FUlJPUlNfUE9MSUNZX0ZBSUwpOworI2VuZGlmCiAKICAgICBhc3NlcnRJZlNTTFJlcXVl
c3RQcm9jZXNzZWQgPSB0cnVlOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QodGVzdC0+bV93ZWJWaWV3
LCAiYXV0aGVudGljYXRlIiwgR19DQUxMQkFDSyh3ZWJWaWV3QXV0aGVudGljYXRpb25DYWxsYmFj
ayksIE5VTEwpOwpAQCAtMjEzLDcgKzI3MSwxMSBAQCBzdGF0aWMgdm9pZCB0ZXN0VExTRXJyb3Jz
SFRUUEF1dGgoU1NMVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICBnX2Fzc2VydF9mYWxz
ZSh0ZXN0LT5tX2xvYWRFdmVudHMuY29udGFpbnMoTG9hZFRyYWNraW5nVGVzdDo6TG9hZENvbW1p
dHRlZCkpOwogICAgIGFzc2VydElmU1NMUmVxdWVzdFByb2Nlc3NlZCA9IGZhbHNlOwogCisjaWYg
RU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfdGxz
X2Vycm9yc19wb2xpY3kodGVzdC0+bV9uZXR3b3JrU2Vzc2lvbi5nZXQoKSwgb3JpZ2luYWxQb2xp
Y3kpOworI2Vsc2UKICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X3Rsc19lcnJv
cnNfcG9saWN5KHdlYnNpdGVEYXRhTWFuYWdlciwgb3JpZ2luYWxQb2xpY3kpOworI2VuZGlmCiB9
CiAKIGNsYXNzIFRMU0Vycm9yc1Rlc3Q6IHB1YmxpYyBTU0xUZXN0IHsKQEAgLTI0OCw5ICszMTAs
MTQgQEAgcHJpdmF0ZToKIAogc3RhdGljIHZvaWQgdGVzdExvYWRGYWlsZWRXaXRoVExTRXJyb3Jz
KFRMU0Vycm9yc1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiB7CisjaWYgRU5BQkxFKDIwMjJf
R0xJQl9BUEkpCisgICAgV2ViS2l0VExTRXJyb3JzUG9saWN5IG9yaWdpbmFsUG9saWN5ID0gd2Vi
a2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfdGxzX2Vycm9yc19wb2xpY3kodGVzdC0+bV9uZXR3b3Jr
U2Vzc2lvbi5nZXQoKSk7CisgICAgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfdGxzX2Vycm9y
c19wb2xpY3kodGVzdC0+bV9uZXR3b3JrU2Vzc2lvbi5nZXQoKSwgV0VCS0lUX1RMU19FUlJPUlNf
UE9MSUNZX0ZBSUwpOworI2Vsc2UKICAgICBhdXRvKiB3ZWJzaXRlRGF0YU1hbmFnZXIgPSB3ZWJr
aXRfd2ViX2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHRlc3QtPm1fd2ViQ29udGV4
dC5nZXQoKSk7CiAgICAgV2ViS2l0VExTRXJyb3JzUG9saWN5IG9yaWdpbmFsUG9saWN5ID0gd2Vi
a2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF90bHNfZXJyb3JzX3BvbGljeSh3ZWJzaXRlRGF0
YU1hbmFnZXIpOwogICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9zZXRfdGxzX2Vycm9y
c19wb2xpY3kod2Vic2l0ZURhdGFNYW5hZ2VyLCBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfRkFJ
TCk7CisjZW5kaWYKIAogICAgIGFzc2VydElmU1NMUmVxdWVzdFByb2Nlc3NlZCA9IHRydWU7CiAg
ICAgLy8gVGhlIGxvYWQtZmFpbGVkLXdpdGgtdGxzLWVycm9ycyBzaWduYWwgc2hvdWxkIGJlIGVt
aXR0ZWQgd2hlbiB0aGVyZSBpcyBhIFRMUyBmYWlsdXJlLgpAQCAtMjY1LDcgKzMzMiwxMSBAQCBz
dGF0aWMgdm9pZCB0ZXN0TG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMoVExTRXJyb3JzVGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKICAgICBhc3NlcnRJZlNTTFJlcXVlc3RQcm9jZXNzZWQgPSBmYWxz
ZTsKIAogICAgIC8vIFRlc3QgYWxsb3dpbmcgYW4gZXhjZXB0aW9uIGZvciB0aGlzIGNlcnRpZmlj
YXRlIG9uIHRoaXMgaG9zdC4KKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICB3ZWJraXRf
bmV0d29ya19zZXNzaW9uX2FsbG93X3Rsc19jZXJ0aWZpY2F0ZV9mb3JfaG9zdCh0ZXN0LT5tX25l
dHdvcmtTZXNzaW9uLmdldCgpLCB0ZXN0LT5jZXJ0aWZpY2F0ZSgpLCB0ZXN0LT5ob3N0KCkuZGF0
YSgpKTsKKyNlbHNlCiAgICAgd2Via2l0X3dlYl9jb250ZXh0X2FsbG93X3Rsc19jZXJ0aWZpY2F0
ZV9mb3JfaG9zdCh0ZXN0LT5tX3dlYkNvbnRleHQuZ2V0KCksIHRlc3QtPmNlcnRpZmljYXRlKCks
IHRlc3QtPmhvc3QoKS5kYXRhKCkpOworI2VuZGlmCiAgICAgLy8gVGhlIHBhZ2Ugc2hvdWxkIG5v
dyBsb2FkIHdpdGhvdXQgZXJyb3JzLgogICAgIHRlc3QtPmxvYWRVUkkoa0h0dHBzU2VydmVyLT5n
ZXRVUklGb3JQYXRoKCIvdGVzdC10bHMvIikuZGF0YSgpKTsKICAgICB0ZXN0LT53YWl0VW50aWxU
aXRsZUNoYW5nZWQoKTsKQEAgLTI3NSw3ICszNDYsMTEgQEAgc3RhdGljIHZvaWQgdGVzdExvYWRG
YWlsZWRXaXRoVExTRXJyb3JzKFRMU0Vycm9yc1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAg
ICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1syXSwgPT0sIExvYWRUcmFja2lu
Z1Rlc3Q6OkxvYWRGaW5pc2hlZCk7CiAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmll
d19nZXRfdGl0bGUodGVzdC0+bV93ZWJWaWV3KSwgPT0sIFRMU0V4cGVjdGVkU3VjY2Vzc1RpdGxl
KTsKIAorI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIHdlYmtpdF9uZXR3b3JrX3Nlc3Np
b25fc2V0X3Rsc19lcnJvcnNfcG9saWN5KHRlc3QtPm1fbmV0d29ya1Nlc3Npb24uZ2V0KCksIG9y
aWdpbmFsUG9saWN5KTsKKyNlbHNlCiAgICAgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX3Nl
dF90bHNfZXJyb3JzX3BvbGljeSh3ZWJzaXRlRGF0YU1hbmFnZXIsIG9yaWdpbmFsUG9saWN5KTsK
KyNlbmRpZgogfQogCiBjbGFzcyBUTFNTdWJyZXNvdXJjZVRlc3QgOiBwdWJsaWMgV2ViVmlld1Rl
c3QgewpAQCAtMzM0LDggKzQwOSwxNCBAQCBwdWJsaWM6CiAKIHN0YXRpYyB2b2lkIHRlc3RTdWJy
ZXNvdXJjZUxvYWRGYWlsZWRXaXRoVExTRXJyb3JzKFRMU1N1YnJlc291cmNlVGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKIHsKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICBXZWJLaXRU
TFNFcnJvcnNQb2xpY3kgb3JpZ2luYWxQb2xpY3kgPSB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dl
dF90bHNfZXJyb3JzX3BvbGljeSh0ZXN0LT5tX25ldHdvcmtTZXNzaW9uLmdldCgpKTsKKyAgICB3
ZWJraXRfbmV0d29ya19zZXNzaW9uX3NldF90bHNfZXJyb3JzX3BvbGljeSh0ZXN0LT5tX25ldHdv
cmtTZXNzaW9uLmdldCgpLCBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfRkFJTCk7CisjZWxzZQog
ICAgIGF1dG8qIHdlYnNpdGVEYXRhTWFuYWdlciA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfd2Vi
c2l0ZV9kYXRhX21hbmFnZXIodGVzdC0+bV93ZWJDb250ZXh0LmdldCgpKTsKKyAgICBXZWJLaXRU
TFNFcnJvcnNQb2xpY3kgb3JpZ2luYWxQb2xpY3kgPSB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFn
ZXJfZ2V0X3Rsc19lcnJvcnNfcG9saWN5KHdlYnNpdGVEYXRhTWFuYWdlcik7CiAgICAgd2Via2l0
X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX3NldF90bHNfZXJyb3JzX3BvbGljeSh3ZWJzaXRlRGF0YU1h
bmFnZXIsIFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9GQUlMKTsKKyNlbmRpZgogCiAgICAgYXNz
ZXJ0SWZTU0xSZXF1ZXN0UHJvY2Vzc2VkID0gdHJ1ZTsKICAgICB0ZXN0LT5sb2FkVVJJKGtIdHRw
U2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikuZGF0YSgpKTsKQEAgLTM0Myw2ICs0MjQsMTMgQEAg
c3RhdGljIHZvaWQgdGVzdFN1YnJlc291cmNlTG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMoVExTU3Vi
cmVzb3VyY2VUZXN0KiB0ZXN0LCBnY28KICAgICBnX2Fzc2VydF90cnVlKEdfSVNfVExTX0NFUlRJ
RklDQVRFKHRlc3QtPm1fY2VydGlmaWNhdGUuZ2V0KCkpKTsKICAgICBnX2Fzc2VydF9jbXB1aW50
KHRlc3QtPm1fdGxzRXJyb3JzLCA9PSwgR19UTFNfQ0VSVElGSUNBVEVfVU5LTk9XTl9DQSk7CiAg
ICAgYXNzZXJ0SWZTU0xSZXF1ZXN0UHJvY2Vzc2VkID0gZmFsc2U7CisKKyNpZiBFTkFCTEUoMjAy
Ml9HTElCX0FQSSkKKyAgICB3ZWJraXRfbmV0d29ya19zZXNzaW9uX3NldF90bHNfZXJyb3JzX3Bv
bGljeSh0ZXN0LT5tX25ldHdvcmtTZXNzaW9uLmdldCgpLCBvcmlnaW5hbFBvbGljeSk7CisjZWxz
ZQorICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9zZXRfdGxzX2Vycm9yc19wb2xpY3ko
d2Vic2l0ZURhdGFNYW5hZ2VyLCBvcmlnaW5hbFBvbGljeSk7CisjZW5kaWYKKwogfQogCiBjbGFz
cyBXZWJTb2NrZXRUZXN0IDogcHVibGljIFdlYlZpZXdUZXN0IHsKQEAgLTQyMCw5ICs1MDgsMTQg
QEAgcHVibGljOgogCiBzdGF0aWMgdm9pZCB0ZXN0V2ViU29ja2V0VExTRXJyb3JzKFdlYlNvY2tl
dFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiB7CisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkp
CisgICAgV2ViS2l0VExTRXJyb3JzUG9saWN5IG9yaWdpbmFsUG9saWN5ID0gd2Via2l0X25ldHdv
cmtfc2Vzc2lvbl9nZXRfdGxzX2Vycm9yc19wb2xpY3kodGVzdC0+bV9uZXR3b3JrU2Vzc2lvbi5n
ZXQoKSk7CisgICAgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfdGxzX2Vycm9yc19wb2xpY3ko
dGVzdC0+bV9uZXR3b3JrU2Vzc2lvbi5nZXQoKSwgV0VCS0lUX1RMU19FUlJPUlNfUE9MSUNZX0ZB
SUwpOworI2Vsc2UKICAgICBhdXRvKiB3ZWJzaXRlRGF0YU1hbmFnZXIgPSB3ZWJraXRfd2ViX2Nv
bnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHRlc3QtPm1fd2ViQ29udGV4dC5nZXQoKSk7
CiAgICAgV2ViS2l0VExTRXJyb3JzUG9saWN5IG9yaWdpbmFsUG9saWN5ID0gd2Via2l0X3dlYnNp
dGVfZGF0YV9tYW5hZ2VyX2dldF90bHNfZXJyb3JzX3BvbGljeSh3ZWJzaXRlRGF0YU1hbmFnZXIp
OwogICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9zZXRfdGxzX2Vycm9yc19wb2xpY3ko
d2Vic2l0ZURhdGFNYW5hZ2VyLCBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfRkFJTCk7CisjZW5k
aWYKIAogICAgIC8vIEZpcnN0LCBjaGVjayB0aGF0IGluc2VjdXJlIHdzOi8vIHdlYiBzb2NrZXRz
IHdvcmsgZmluZS4KICAgICB1bnNpZ25lZCBldmVudHMgPSB0ZXN0LT5jb25uZWN0VG9TZXJ2ZXJB
bmRXYWl0Rm9yRXZlbnRzKGtIdHRwU2VydmVyKTsKQEAgLTQ0MCwxMyArNTMzLDIxIEBAIHN0YXRp
YyB2b2lkIHRlc3RXZWJTb2NrZXRUTFNFcnJvcnMoV2ViU29ja2V0VGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKICAgICBnX2Fzc2VydF90cnVlKGV2ZW50cyAmIFdlYlNvY2tldFRlc3Q6OkV2ZW50
RmxhZ3M6OkRpZENsb3NlKTsKIAogICAgIC8vIE5vdyB0cnkgd3NzOi8vIGFnYWluLCB0aGlzIHRp
bWUgaWdub3JpbmcgVExTIGVycm9ycy4KKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICB3
ZWJraXRfbmV0d29ya19zZXNzaW9uX3NldF90bHNfZXJyb3JzX3BvbGljeSh0ZXN0LT5tX25ldHdv
cmtTZXNzaW9uLmdldCgpLCBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfSUdOT1JFKTsKKyNlbHNl
CiAgICAgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX3NldF90bHNfZXJyb3JzX3BvbGljeSh3
ZWJzaXRlRGF0YU1hbmFnZXIsIFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9JR05PUkUpOworI2Vu
ZGlmCiAgICAgZXZlbnRzID0gdGVzdC0+Y29ubmVjdFRvU2VydmVyQW5kV2FpdEZvckV2ZW50cyhr
SHR0cHNTZXJ2ZXIpOwogICAgIGdfYXNzZXJ0X3RydWUoZXZlbnRzICYgV2ViU29ja2V0VGVzdDo6
RXZlbnRGbGFnczo6RGlkU2VydmVyQ29tcGxldGVIYW5kc2hha2UpOwogICAgIGdfYXNzZXJ0X3Ry
dWUoZXZlbnRzICYgV2ViU29ja2V0VGVzdDo6RXZlbnRGbGFnczo6RGlkT3Blbik7CiAgICAgZ19h
c3NlcnRfZmFsc2UoZXZlbnRzICYgV2ViU29ja2V0VGVzdDo6RXZlbnRGbGFnczo6RGlkQ2xvc2Up
OwogCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgd2Via2l0X25ldHdvcmtfc2Vzc2lv
bl9zZXRfdGxzX2Vycm9yc19wb2xpY3kodGVzdC0+bV9uZXR3b3JrU2Vzc2lvbi5nZXQoKSwgb3Jp
Z2luYWxQb2xpY3kpOworI2Vsc2UKICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0
X3Rsc19lcnJvcnNfcG9saWN5KHdlYnNpdGVEYXRhTWFuYWdlciwgb3JpZ2luYWxQb2xpY3kpOwor
I2VuZGlmCiB9CiAKIGNsYXNzIEVwaGVtZXJhbFNTTFRlc3QgOiBwdWJsaWMgU1NMVGVzdCB7CkBA
IC00NjYsOSArNTY3LDE1IEBAIHB1YmxpYzoKIAogc3RhdGljIHZvaWQgdGVzdFRMU0Vycm9yc0Vw
aGVtZXJhbChFcGhlbWVyYWxTU0xUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogeworI2lmIEVO
QUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIGF1dG8qIG5ldHdvcmtTZXNzaW9uID0gd2Via2l0X3dl
Yl92aWV3X2dldF9uZXR3b3JrX3Nlc3Npb24odGVzdC0+bV93ZWJWaWV3KTsKKyAgICBnX2Fzc2Vy
dF90cnVlKHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25faXNfZXBoZW1lcmFsKG5ldHdvcmtTZXNzaW9u
KSk7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X3Rsc19l
cnJvcnNfcG9saWN5KG5ldHdvcmtTZXNzaW9uKSwgPT0sIFdFQktJVF9UTFNfRVJST1JTX1BPTElD
WV9GQUlMKTsKKyNlbHNlCiAgICAgYXV0byogd2Vic2l0ZURhdGFNYW5hZ2VyID0gd2Via2l0X3dl
Yl92aWV3X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcih0ZXN0LT5tX3dlYlZpZXcpOwogICAgIGdf
YXNzZXJ0X3RydWUod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2lzX2VwaGVtZXJhbCh3ZWJz
aXRlRGF0YU1hbmFnZXIpKTsKICAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYnNpdGVfZGF0
YV9tYW5hZ2VyX2dldF90bHNfZXJyb3JzX3BvbGljeSh3ZWJzaXRlRGF0YU1hbmFnZXIpLCA9PSwg
V0VCS0lUX1RMU19FUlJPUlNfUE9MSUNZX0ZBSUwpOworI2VuZGlmCiAKICAgICB0ZXN0LT5sb2Fk
VVJJKGtIdHRwc1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CiAgICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CkBAIC01NjQsOSArNjcxLDE0IEBAIHB1YmxpYzoKIHN0
YXRpYyB2b2lkIHRlc3RDbGllbnRTaWRlQ2VydGlmaWNhdGUoQ2xpZW50U2lkZUNlcnRpZmljYXRl
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKIHsKICAgICAvLyBJZ25vcmUgc2VydmVyIGNlcnRp
ZmljYXRlIGVycm9ycy4KKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICBXZWJLaXRUTFNF
cnJvcnNQb2xpY3kgb3JpZ2luYWxQb2xpY3kgPSB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF90
bHNfZXJyb3JzX3BvbGljeSh0ZXN0LT5tX25ldHdvcmtTZXNzaW9uLmdldCgpKTsKKyAgICB3ZWJr
aXRfbmV0d29ya19zZXNzaW9uX3NldF90bHNfZXJyb3JzX3BvbGljeSh0ZXN0LT5tX25ldHdvcmtT
ZXNzaW9uLmdldCgpLCBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfSUdOT1JFKTsKKyNlbHNlCiAg
ICAgYXV0byogd2Vic2l0ZURhdGFNYW5hZ2VyID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF93ZWJz
aXRlX2RhdGFfbWFuYWdlcih0ZXN0LT5tX3dlYkNvbnRleHQuZ2V0KCkpOwogICAgIFdlYktpdFRM
U0Vycm9yc1BvbGljeSBvcmlnaW5hbFBvbGljeSA9IHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdl
cl9nZXRfdGxzX2Vycm9yc19wb2xpY3kod2Vic2l0ZURhdGFNYW5hZ2VyKTsKICAgICB3ZWJraXRf
d2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X3Rsc19lcnJvcnNfcG9saWN5KHdlYnNpdGVEYXRhTWFu
YWdlciwgV0VCS0lUX1RMU19FUlJPUlNfUE9MSUNZX0lHTk9SRSk7CisjZW5kaWYKIAogICAgIC8v
IENhbmNlbCB0aGUgYXV0aGVudGlhdGlvbiByZXF1ZXN0LgogICAgIHRlc3QtPmxvYWRVUkkoa0h0
dHBzU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikuZGF0YSgpKTsKQEAgLTY1MCw3ICs3NjIsMTEg
QEAgc3RhdGljIHZvaWQgdGVzdENsaWVudFNpZGVDZXJ0aWZpY2F0ZShDbGllbnRTaWRlQ2VydGlm
aWNhdGVUZXN0KiB0ZXN0LCBnY29uc3Rwb2kKICAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9s
b2FkRXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKICAgICB0
ZXN0LT5tX2xvYWRFdmVudHMuY2xlYXIoKTsKIAorI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQor
ICAgIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fc2V0X3Rsc19lcnJvcnNfcG9saWN5KHRlc3QtPm1f
bmV0d29ya1Nlc3Npb24uZ2V0KCksIG9yaWdpbmFsUG9saWN5KTsKKyNlbHNlCiAgICAgd2Via2l0
X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX3NldF90bHNfZXJyb3JzX3BvbGljeSh3ZWJzaXRlRGF0YU1h
bmFnZXIsIG9yaWdpbmFsUG9saWN5KTsKKyNlbmRpZgogfQogCiBjbGFzcyBXZWJTb2NrZXRDbGll
bnRTaWRlQ2VydGlmaWNhdGVUZXN0IGZpbmFsIDogcHVibGljIFdlYlNvY2tldFRlc3QsIHB1Ymxp
YyBDbGllbnRTaWRlQ2VydGlmaWNhdGVUZXN0QmFzZSB7CkBAIC02NzYsOSArNzkyLDE0IEBAIHB1
YmxpYzoKIHN0YXRpYyB2b2lkIHRlc3RXZWJTb2NrZXRDbGllbnRTaWRlQ2VydGlmaWNhdGUoV2Vi
U29ja2V0Q2xpZW50U2lkZUNlcnRpZmljYXRlVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKIHsK
ICAgICAvLyBJZ25vcmUgc2VydmVyIGNlcnRpZmljYXRlIGVycm9ycy4KKyNpZiBFTkFCTEUoMjAy
Ml9HTElCX0FQSSkKKyAgICBXZWJLaXRUTFNFcnJvcnNQb2xpY3kgb3JpZ2luYWxQb2xpY3kgPSB3
ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF90bHNfZXJyb3JzX3BvbGljeSh0ZXN0LT5tX25ldHdv
cmtTZXNzaW9uLmdldCgpKTsKKyAgICB3ZWJraXRfbmV0d29ya19zZXNzaW9uX3NldF90bHNfZXJy
b3JzX3BvbGljeSh0ZXN0LT5tX25ldHdvcmtTZXNzaW9uLmdldCgpLCBXRUJLSVRfVExTX0VSUk9S
U19QT0xJQ1lfSUdOT1JFKTsKKyNlbHNlCiAgICAgYXV0byogd2Vic2l0ZURhdGFNYW5hZ2VyID0g
d2Via2l0X3dlYl9jb250ZXh0X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcih0ZXN0LT5tX3dlYkNv
bnRleHQuZ2V0KCkpOwogICAgIFdlYktpdFRMU0Vycm9yc1BvbGljeSBvcmlnaW5hbFBvbGljeSA9
IHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfdGxzX2Vycm9yc19wb2xpY3kod2Vic2l0
ZURhdGFNYW5hZ2VyKTsKICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X3Rsc19l
cnJvcnNfcG9saWN5KHdlYnNpdGVEYXRhTWFuYWdlciwgV0VCS0lUX1RMU19FUlJPUlNfUE9MSUNZ
X0lHTk9SRSk7CisjZW5kaWYKIAogICAgIC8vIFRyeSBmaXJzdCB3aXRob3V0IGhhdmluZyB0aGUg
Y2VydGlmaWNhdGUgaW4gY3JlZGVudGlhbCBzdG9yYWdlLgogICAgIGF1dG8gZXZlbnRzID0gdGVz
dC0+Y29ubmVjdFRvU2VydmVyQW5kV2FpdEZvckV2ZW50cyhrSHR0cHNTZXJ2ZXIpOwpAQCAtNjk4
LDcgKzgxOSwxMSBAQCBzdGF0aWMgdm9pZCB0ZXN0V2ViU29ja2V0Q2xpZW50U2lkZUNlcnRpZmlj
YXRlKFdlYlNvY2tldENsaWVudFNpZGVDZXJ0aWZpY2F0ZVRlcwogICAgIGdfYXNzZXJ0X3RydWUo
ZXZlbnRzICYgV2ViU29ja2V0VGVzdDo6RXZlbnRGbGFnczo6RGlkT3Blbik7CiAgICAgZ19hc3Nl
cnRfZmFsc2UoZXZlbnRzICYgV2ViU29ja2V0VGVzdDo6RXZlbnRGbGFnczo6RGlkQ2xvc2UpOwog
CisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9z
ZXRfdGxzX2Vycm9yc19wb2xpY3kodGVzdC0+bV9uZXR3b3JrU2Vzc2lvbi5nZXQoKSwgb3JpZ2lu
YWxQb2xpY3kpOworI2Vsc2UKICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X3Rs
c19lcnJvcnNfcG9saWN5KHdlYnNpdGVEYXRhTWFuYWdlciwgb3JpZ2luYWxQb2xpY3kpOworI2Vu
ZGlmCiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRHTGliL1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2UuY3BwIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2UuY3BwCmluZGV4
IDdiYmI0ZTBjY2IwYi4uYTdjODhmM2IwOTljIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZS5jcHAKKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RXZWJLaXRGYXZpY29uRGF0
YWJhc2UuY3BwCkBAIC0yNDksNiArMjQ5LDcgQEAgc3RhdGljIHZvaWQgZXBoZW1lcmFsVmlld0Zh
dmljb25DaGFuZ2VkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEdQYXJhbVNwZWMqLCBXZWIKIAog
c3RhdGljIHZvaWQgdGVzdEZhdmljb25EYXRhYmFzZUVwaGVtZXJhbChGYXZpY29uRGF0YWJhc2VU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogeworI2lmICFFTkFCTEUoMjAyMl9HTElCX0FQSSkK
ICAgICAvLyBJZiB0aGUgY29udGV4dCBpcyBlcGhlbWVyYWwsIHRoZSBkYXRhYmFzZSBpcyBub3Qg
Y3JlYXRlZCBpZiBpdCBkb2Vzbid0IGV4aXN0LgogICAgIEdSZWZQdHI8V2ViS2l0V2ViQ29udGV4
dD4gZXBoZW1lcmFsQ29udGV4dCA9IGFkb3B0R1JlZih3ZWJraXRfd2ViX2NvbnRleHRfbmV3X2Vw
aGVtZXJhbCgpKTsKICAgICBHVW5pcXVlUHRyPGNoYXI+IGRhdGFiYXNlRGlyZWN0b3J5KGdfYnVp
bGRfZmlsZW5hbWUoVGVzdDo6ZGF0YURpcmVjdG9yeSgpLCAidGVzdEZhdmljb25EYXRhYmFzZUVw
aGVtZXJhbCIsIG51bGxwdHIpKTsKQEAgLTI4Myw2ICsyODQsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0
RmF2aWNvbkRhdGFiYXNlRXBoZW1lcmFsKEZhdmljb25EYXRhYmFzZVRlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZQogICAgIC8vIFBhZ2UgVVJMIGxvYWRlZCBpbiBlcGhlbWVyYWwgd2ViIHZpZXcgaXMg
bm90IGluIHRoZSBkYXRhYmFzZS4KICAgICBnX2Fzc2VydF9udWxsKHdlYmtpdF9mYXZpY29uX2Rh
dGFiYXNlX2dldF9mYXZpY29uX3VyaShlcGhlbWVyYWxEYXRhYmFzZSwga1NlcnZlci0+Z2V0VVJJ
Rm9yUGF0aCgiL2JhciIpLmRhdGEoKSkpOwogICAgIGVwaGVtZXJhbENvbnRleHQgPSBudWxscHRy
OworI2VuZGlmCiB9CiAKIHZvaWQgdGVzdEZhdmljb25EYXRhYmFzZUNsZWFyKEZhdmljb25EYXRh
YmFzZVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNwcApp
bmRleCAwYmJkMWE5MzY1ZWYuLjI4ZTdjNWRjMDRlMyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNwcAorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFdlYktpdFdlYkNvbnRleHQu
Y3BwCkBAIC00MSw2ICs0MSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJDb250ZXh0RGVmYXVsdChU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X3dlYl9j
b250ZXh0X2dldF9kZWZhdWx0KCkgIT0gdGVzdC0+bV93ZWJDb250ZXh0LmdldCgpKTsKIH0KIAor
I2lmICFFTkFCTEUoMjAyMl9HTElCX0FQSSkKIHN0YXRpYyB2b2lkIHRlc3RXZWJDb250ZXh0RXBo
ZW1lcmFsKFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiB7CiAgICAgLy8gQnkgZGVmYXVsdCB3
ZWIgY29udGV4dHMgYXJlIG5vdCBlcGhlbWVyYWwuCkBAIC03OCw2ICs3OSw3IEBAIHN0YXRpYyB2
b2lkIHRlc3RXZWJDb250ZXh0RXBoZW1lcmFsKFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAg
ICAgY29udGV4dCA9IGFkb3B0R1JlZih3ZWJraXRfd2ViX2NvbnRleHRfbmV3X3dpdGhfd2Vic2l0
ZV9kYXRhX21hbmFnZXIoZXBoZW1lcmFsTWFuYWdlci5nZXQoKSkpOwogICAgIGdfYXNzZXJ0X3Ry
dWUod2Via2l0X3dlYl9jb250ZXh0X2lzX2VwaGVtZXJhbChjb250ZXh0LmdldCgpKSk7CiB9Cisj
ZW5kaWYKIAogc3RhdGljIGNvbnN0IGNoYXIqIGtCYXJIVE1MID0gIjxodG1sPjxib2R5PkJhcjwv
Ym9keT48L2h0bWw+IjsKIHN0YXRpYyBjb25zdCBjaGFyKiBrRWNob0hUTUxGb3JtYXQgPSAiPGh0
bWw+PGJvZHk+JXM8L2JvZHk+PC9odG1sPiI7CkBAIC03NjgsNiArNzcwLDcgQEAgcHVibGljOgog
I2VuZGlmCiB9OwogCisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogI2lmIFNPVVBfQ0hFQ0tf
VkVSU0lPTigyLCA2MSwgOTApCiAjaWYgVVNFKFNPVVAyKQogc3RhdGljIHZvaWQgd2ViU29ja2V0
U2VydmVyQ2FsbGJhY2soU291cFNlcnZlciosIFNvdXBXZWJzb2NrZXRDb25uZWN0aW9uKiwgY29u
c3QgY2hhciosIFNvdXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIgdXNlckRhdGEpCkBAIC04ODEs
NiArODg0LDcgQEAgc3RhdGljIHZvaWQgdGVzdFdlYkNvbnRleHRQcm94eVNldHRpbmdzKFByb3h5
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICBrU2VydmVyLT5yZW1vdmVXZWJTb2NrZXRI
YW5kbGVyKCk7CiAjZW5kaWYKIH0KKyNlbmRpZgogCiBjbGFzcyBNZW1vcnlQcmVzc3VyZVRlc3Qg
OiBwdWJsaWMgV2ViVmlld1Rlc3QgewogcHVibGljOgpAQCAtMTA2Niw3ICsxMDcwLDkgQEAgdm9p
ZCBiZWZvcmVBbGwoKQogICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7CiAKICAgICBU
ZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQiLCAiZGVmYXVsdC1jb250ZXh0IiwgdGVzdFdlYkNv
bnRleHREZWZhdWx0KTsKKyNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAgICAgVGVzdDo6YWRk
KCJXZWJLaXRXZWJDb250ZXh0IiwgImVwaGVtZXJhbCIsIHRlc3RXZWJDb250ZXh0RXBoZW1lcmFs
KTsKKyNlbmRpZgogICAgIFVSSVNjaGVtZVRlc3Q6OmFkZCgiV2ViS2l0V2ViQ29udGV4dCIsICJ1
cmktc2NoZW1lIiwgdGVzdFdlYkNvbnRleHRVUklTY2hlbWUpOwogICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQgc3BlbGxjaGVja2VyIGluIFdQRS4KICNpZiBQTEFURk9STShHVEspCkBAIC0xMDc1LDcg
KzEwODEsOSBAQCB2b2lkIGJlZm9yZUFsbCgpCiAgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0
V2ViQ29udGV4dCIsICJsYW5ndWFnZXMiLCB0ZXN0V2ViQ29udGV4dExhbmd1YWdlcyk7CiAgICAg
U2VjdXJpdHlQb2xpY3lUZXN0OjphZGQoIldlYktpdFNlY3VyaXR5TWFuYWdlciIsICJzZWN1cml0
eS1wb2xpY3kiLCB0ZXN0V2ViQ29udGV4dFNlY3VyaXR5UG9saWN5KTsKICAgICBXZWJWaWV3VGVz
dDo6YWRkKCJXZWJLaXRTZWN1cml0eU1hbmFnZXIiLCAiZmlsZS14aHIiLCB0ZXN0V2ViQ29udGV4
dFNlY3VyaXR5RmlsZVhIUik7CisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogICAgIFByb3h5
VGVzdDo6YWRkKCJXZWJLaXRXZWJDb250ZXh0IiwgInByb3h5IiwgdGVzdFdlYkNvbnRleHRQcm94
eVNldHRpbmdzKTsKKyNlbmRpZgogICAgIE1lbW9yeVByZXNzdXJlVGVzdDo6YWRkKCJXZWJLaXRX
ZWJDb250ZXh0IiwgIm1lbW9yeS1wcmVzc3VyZSIsIHRlc3RNZW1vcnlQcmVzc3VyZVNldHRpbmdz
KTsKICAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJDb250ZXh0IiwgInRpbWV6b25lIiwg
dGVzdFdlYkNvbnRleHRUaW1lWm9uZU92ZXJyaWRlKTsKICAgICBXZWJWaWV3VGVzdDo6YWRkKCJX
ZWJLaXRXZWJDb250ZXh0IiwgInRpbWV6b25lLXdvcmtlciIsIHRlc3RXZWJDb250ZXh0VGltZVpv
bmVPdmVycmlkZUluV29ya2VyKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0R0xpYi9UZXN0V2ViS2l0V2ViVmlldy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdEdMaWIvVGVzdFdlYktpdFdlYlZpZXcuY3BwCmluZGV4IDRkOTYwOTFlMmM2
MC4uNmJmOGRjNzkyNzMzIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdEdMaWIvVGVzdFdlYktpdFdlYlZpZXcuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0R0xpYi9UZXN0V2ViS2l0V2ViVmlldy5jcHAKQEAgLTIxOSwxMSArMjE5LDE5
IEBAIHN0YXRpYyB2b2lkIGVwaGVtZXJhbFZpZXdsb2FkQ2hhbmdlZChXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3LCBXZWJLaXRMb2FkRXZlbnQgbG9hCiAKIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RXBo
ZW1lcmFsKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogeworI2lmIEVOQUJMRSgy
MDIyX0dMSUJfQVBJKQorICAgIGF1dG8qIG5ldHdvcmtTZXNzaW9uID0gd2Via2l0X3dlYl92aWV3
X2dldF9uZXR3b3JrX3Nlc3Npb24odGVzdC0+bV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydF9mYWxz
ZSh3ZWJraXRfbmV0d29ya19zZXNzaW9uX2lzX2VwaGVtZXJhbChuZXR3b3JrU2Vzc2lvbikpOwor
ICAgIGF1dG8qIG1hbmFnZXIgPSB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcihuZXR3b3JrU2Vzc2lvbik7CisgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyX2lzX2VwaGVtZXJhbChtYW5hZ2VyKSk7CisgICAgR1JlZlB0cjxX
ZWJLaXROZXR3b3JrU2Vzc2lvbj4gZXBoZW1lcmFsU2Vzc2lvbiA9IGFkb3B0R1JlZih3ZWJraXRf
bmV0d29ya19zZXNzaW9uX25ld19lcGhlbWVyYWwoKSk7CisjZWxzZQogICAgIGdfYXNzZXJ0X2Zh
bHNlKHdlYmtpdF93ZWJfdmlld19pc19lcGhlbWVyYWwodGVzdC0+bV93ZWJWaWV3KSk7CiAgICAg
Z19hc3NlcnRfZmFsc2Uod2Via2l0X3dlYl9jb250ZXh0X2lzX2VwaGVtZXJhbCh3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2NvbnRleHQodGVzdC0+bV93ZWJWaWV3KSkpOwogICAgIGF1dG8qIG1hbmFnZXIg
PSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHRlc3QtPm1fd2Vi
Q29udGV4dC5nZXQoKSk7CiAgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X3dlYnNpdGVfZGF0YV9t
YW5hZ2VyX2lzX2VwaGVtZXJhbChtYW5hZ2VyKSk7CiAgICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHRlc3QtPm1fd2ViVmlldykgPT0gbWFu
YWdlcik7CisjZW5kaWYKICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfY2xlYXIobWFu
YWdlciwgV0VCS0lUX1dFQlNJVEVfREFUQV9ESVNLX0NBQ0hFLCAwLCBudWxscHRyLCBbXShHT2Jq
ZWN0KiBtYW5hZ2VyLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpIHsK
ICAgICAgICAgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2NsZWFyX2ZpbmlzaChXRUJLSVRf
V0VCU0lURV9EQVRBX01BTkFHRVIobWFuYWdlciksIHJlc3VsdCwgbnVsbHB0cik7CiAgICAgICAg
IHN0YXRpY19jYXN0PFdlYlZpZXdUZXN0Kj4odXNlckRhdGEpLT5xdWl0TWFpbkxvb3AoKTsKQEAg
LTIzNiwxMSArMjQ0LDIwIEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RXBoZW1lcmFsKFdlYlZp
ZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgICAgICAiYmFja2VuZCIsIFRlc3Q6OmNy
ZWF0ZVdlYlZpZXdCYWNrZW5kKCksCiAjZW5kaWYKICAgICAgICAgIndlYi1jb250ZXh0Iiwgd2Vi
a2l0X3dlYl92aWV3X2dldF9jb250ZXh0KHRlc3QtPm1fd2ViVmlldyksCisjaWYgRU5BQkxFKDIw
MjJfR0xJQl9BUEkpCisgICAgICAgICJuZXR3b3JrLXNlc3Npb24iLCBlcGhlbWVyYWxTZXNzaW9u
LmdldCgpLAorI2Vsc2UKICAgICAgICAgImlzLWVwaGVtZXJhbCIsIFRSVUUsCisjZW5kaWYKICAg
ICAgICAgbnVsbHB0cikpOworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIGdfYXNzZXJ0
X3RydWUod2Via2l0X25ldHdvcmtfc2Vzc2lvbl9pc19lcGhlbWVyYWwod2Via2l0X3dlYl92aWV3
X2dldF9uZXR3b3JrX3Nlc3Npb24od2ViVmlldy5nZXQoKSkpKTsKKyAgICBnX2Fzc2VydF90cnVl
KHdlYmtpdF93ZWJfdmlld19nZXRfbmV0d29ya19zZXNzaW9uKHdlYlZpZXcuZ2V0KCkpICE9IG5l
dHdvcmtTZXNzaW9uKTsKKyNlbHNlCiAgICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfd2ViX3ZpZXdf
aXNfZXBoZW1lcmFsKHdlYlZpZXcuZ2V0KCkpKTsKICAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRf
d2ViX2NvbnRleHRfaXNfZXBoZW1lcmFsKHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dCh3ZWJW
aWV3LmdldCgpKSkpOwogICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X3dlYl92aWV3X2dldF93ZWJz
aXRlX2RhdGFfbWFuYWdlcih3ZWJWaWV3LmdldCgpKSAhPSBtYW5hZ2VyKTsKKyNlbmRpZgogCiAg
ICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LmdldCgpLCAibG9hZC1jaGFuZ2VkIiwgR19DQUxM
QkFDSyhlcGhlbWVyYWxWaWV3bG9hZENoYW5nZWQpLCB0ZXN0KTsKICAgICB3ZWJraXRfd2ViX3Zp
ZXdfbG9hZF91cmkod2ViVmlldy5nZXQoKSwgZ1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRh
dGEoKSk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIv
VGVzdFdlYnNpdGVEYXRhLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xp
Yi9UZXN0V2Vic2l0ZURhdGEuY3BwCmluZGV4IDlkNGRiYjA1OTFlZi4uNDNmZTQ2MzY5YjYzIDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFdlYnNp
dGVEYXRhLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVz
dFdlYnNpdGVEYXRhLmNwcApAQCAtMTA0LDkgKzEwNCwxMiBAQCBjbGFzcyBXZWJzaXRlRGF0YVRl
c3QgOiBwdWJsaWMgV2ViVmlld1Rlc3QgewogcHVibGljOgogICAgIE1BS0VfR0xJQl9URVNUX0ZJ
WFRVUkUoV2Vic2l0ZURhdGFUZXN0KTsKIAotCiAgICAgV2Vic2l0ZURhdGFUZXN0KCkKKyNpZiBF
TkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICAgICAgOiBtX21hbmFnZXIod2Via2l0X25ldHdvcmtf
c2Vzc2lvbl9nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIod2Via2l0X3dlYl92aWV3X2dldF9uZXR3
b3JrX3Nlc3Npb24obV93ZWJWaWV3KSkpCisjZWxzZQogICAgICAgICA6IG1fbWFuYWdlcih3ZWJr
aXRfd2ViX2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYmtpdF93ZWJfdmlld19n
ZXRfY29udGV4dChtX3dlYlZpZXcpKSkKKyNlbmRpZgogICAgIHsKICAgICAgICAgZ19hc3NlcnRf
dHJ1ZShXRUJLSVRfSVNfV0VCU0lURV9EQVRBX01BTkFHRVIobV9tYW5hZ2VyKSk7CiAgICAgICAg
IGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QobV9tYW5hZ2Vy
KSk7CkBAIC0xNjAsMTAgKzE2MywxMSBAQCBwdWJsaWM6CiAgICAgR0xpc3QqIG1fZGF0YUxpc3Qg
eyBudWxscHRyIH07CiB9OwogCi0jaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogc3RhdGljIHZv
aWQgdGVzdFdlYnNpdGVEYXRhQ29uZmlndXJhdGlvbihXZWJzaXRlRGF0YVRlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCiB7CisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogICAgIEFMTE9XX0RF
UFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCisjZW5kaWYKIAogICAgIGdfYXNzZXJ0X2NtcHN0
cih3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Jhc2VfZGF0YV9kaXJlY3RvcnkodGVz
dC0+bV9tYW5hZ2VyKSwgPT0sIFRlc3Q6OmRhdGFEaXJlY3RvcnkoKSk7CiAgICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfYmFzZV9jYWNoZV9kaXJlY3Rv
cnkodGVzdC0+bV9tYW5hZ2VyKSwgPT0sIFRlc3Q6OmRhdGFEaXJlY3RvcnkoKSk7CkBAIC0xNzIs
NyArMTc2LDkgQEAgc3RhdGljIHZvaWQgdGVzdFdlYnNpdGVEYXRhQ29uZmlndXJhdGlvbihXZWJz
aXRlRGF0YVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7CiAgICAgdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVk
KCJ3aW5kb3cubG9jYWxTdG9yYWdlLm15cHJvcGVydHkgPSA0MjsiLCBudWxscHRyKTsKICAgICBH
VW5pcXVlUHRyPGNoYXI+IGxvY2FsU3RvcmFnZURpcmVjdG9yeShnX2J1aWxkX2ZpbGVuYW1lKFRl
c3Q6OmRhdGFEaXJlY3RvcnkoKSwgImxvY2Fsc3RvcmFnZSIsIG51bGxwdHIpKTsKKyNpZiAhRU5B
QkxFKDIwMjJfR0xJQl9BUEkpCiAgICAgZ19hc3NlcnRfY21wc3RyKGxvY2FsU3RvcmFnZURpcmVj
dG9yeS5nZXQoKSwgPT0sIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfbG9jYWxfc3Rv
cmFnZV9kaXJlY3RvcnkodGVzdC0+bV9tYW5hZ2VyKSk7CisjZW5kaWYKICAgICB0ZXN0LT5hc3Nl
cnRGaWxlSXNDcmVhdGVkKGxvY2FsU3RvcmFnZURpcmVjdG9yeS5nZXQoKSk7CiAgICAgZ19hc3Nl
cnRfdHJ1ZShnX2ZpbGVfdGVzdChsb2NhbFN0b3JhZ2VEaXJlY3RvcnkuZ2V0KCksIEdfRklMRV9U
RVNUX0lTX0RJUikpOwogICAgIHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hl
ZCgid2luZG93LmxvY2FsU3RvcmFnZS5jbGVhcigpOyIsIG51bGxwdHIpOwpAQCAtMTgxLDM3ICsx
ODcsNTEgQEAgc3RhdGljIHZvaWQgdGVzdFdlYnNpdGVEYXRhQ29uZmlndXJhdGlvbihXZWJzaXRl
RGF0YVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZp
bmlzaGVkKCk7CiAgICAgdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJ3
aW5kb3cuaW5kZXhlZERCLm9wZW4oJ1Rlc3REYXRhYmFzZScpOyIsIG51bGxwdHIpOwogICAgIEdV
bmlxdWVQdHI8Y2hhcj4gaW5kZXhlZERCRGlyZWN0b3J5KGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6
ZGF0YURpcmVjdG9yeSgpLCAiZGF0YWJhc2VzIiwgImluZGV4ZWRkYiIsIG51bGxwdHIpKTsKKyNp
ZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAgICAgZ19hc3NlcnRfY21wc3RyKGluZGV4ZWREQkRp
cmVjdG9yeS5nZXQoKSwgPT0sIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfaW5kZXhl
ZGRiX2RpcmVjdG9yeSh0ZXN0LT5tX21hbmFnZXIpKTsKKyNlbmRpZgogICAgIHRlc3QtPmFzc2Vy
dEZpbGVJc0NyZWF0ZWQoaW5kZXhlZERCRGlyZWN0b3J5LmdldCgpKTsKICAgICBnX2Fzc2VydF90
cnVlKGdfZmlsZV90ZXN0KGluZGV4ZWREQkRpcmVjdG9yeS5nZXQoKSwgR19GSUxFX1RFU1RfSVNf
RElSKSk7CiAKICAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9hcHBj
YWNoZSIpLmRhdGEoKSk7CiAgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CiAgICAg
R1VuaXF1ZVB0cjxjaGFyPiBhcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5KGdfYnVpbGRfZmlsZW5h
bWUoVGVzdDo6ZGF0YURpcmVjdG9yeSgpLCAiYXBwbGljYXRpb25zIiwgbnVsbHB0cikpOworI2lm
ICFFTkFCTEUoMjAyMl9HTElCX0FQSSkKICAgICBnX2Fzc2VydF9jbXBzdHIoYXBwbGljYXRpb25D
YWNoZURpcmVjdG9yeS5nZXQoKSwgPT0sIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRf
b2ZmbGluZV9hcHBsaWNhdGlvbl9jYWNoZV9kaXJlY3RvcnkodGVzdC0+bV9tYW5hZ2VyKSk7Cisj
ZW5kaWYKICAgICBHVW5pcXVlUHRyPGNoYXI+IGFwcGxpY2F0aW9uQ2FjaGVEYXRhYmFzZShnX2J1
aWxkX2ZpbGVuYW1lKGFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkuZ2V0KCksICJBcHBsaWNhdGlv
bkNhY2hlLmRiIiwgbnVsbHB0cikpOwogICAgIHRlc3QtPmFzc2VydEZpbGVJc0NyZWF0ZWQoYXBw
bGljYXRpb25DYWNoZURhdGFiYXNlLmdldCgpKTsKIAogICAgIEdVbmlxdWVQdHI8Y2hhcj4gZGlz
a0NhY2hlRGlyZWN0b3J5KGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6ZGF0YURpcmVjdG9yeSgpLCBu
dWxscHRyKSk7CisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogICAgIGdfYXNzZXJ0X2NtcHN0
cihkaXNrQ2FjaGVEaXJlY3RvcnkuZ2V0KCksID09LCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFn
ZXJfZ2V0X2Rpc2tfY2FjaGVfZGlyZWN0b3J5KHRlc3QtPm1fbWFuYWdlcikpOworI2VuZGlmCiAg
ICAgZ19hc3NlcnRfdHJ1ZShnX2ZpbGVfdGVzdChkaXNrQ2FjaGVEaXJlY3RvcnkuZ2V0KCksIEdf
RklMRV9URVNUX0lTX0RJUikpOwogCiAgICAgR1VuaXF1ZVB0cjxjaGFyPiBoc3RzQ2FjaGVEaXJl
Y3RvcnkoZ19idWlsZF9maWxlbmFtZShUZXN0OjpkYXRhRGlyZWN0b3J5KCksIG51bGxwdHIpKTsK
KyNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAgICAgZ19hc3NlcnRfY21wc3RyKGhzdHNDYWNo
ZURpcmVjdG9yeS5nZXQoKSwgPT0sIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfaHN0
c19jYWNoZV9kaXJlY3RvcnkodGVzdC0+bV9tYW5hZ2VyKSk7CisjZW5kaWYKICAgICBnX2Fzc2Vy
dF90cnVlKGdfZmlsZV90ZXN0KGhzdHNDYWNoZURpcmVjdG9yeS5nZXQoKSwgR19GSUxFX1RFU1Rf
SVNfRElSKSk7CiAKKyNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAgICAgR1VuaXF1ZVB0cjxj
aGFyPiBpdHBEaXJlY3RvcnkoZ19idWlsZF9maWxlbmFtZShUZXN0OjpkYXRhRGlyZWN0b3J5KCks
ICJpdHAiLCBudWxscHRyKSk7CiAgICAgZ19hc3NlcnRfY21wc3RyKGl0cERpcmVjdG9yeS5nZXQo
KSwgPT0sIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfaXRwX2RpcmVjdG9yeSh0ZXN0
LT5tX21hbmFnZXIpKTsKKyNlbmRpZgogCiAgICAgdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRV
bnRpbEZpbmlzaGVkKCJuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWdpc3RlcignLi9zb21lLWR1
bW15LmpzJyk7IiwgbnVsbHB0cik7CiAgICAgR1VuaXF1ZVB0cjxjaGFyPiBzd1JlZ2lzdHJhdGlv
bnNEaXJlY3RvcnkoZ19idWlsZF9maWxlbmFtZShUZXN0OjpkYXRhRGlyZWN0b3J5KCksICJzZXJ2
aWNld29ya2VycyIsIG51bGxwdHIpKTsKKyNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAgICAg
Z19hc3NlcnRfY21wc3RyKHN3UmVnaXN0cmF0aW9uc0RpcmVjdG9yeS5nZXQoKSwgPT0sIHdlYmtp
dF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfc2VydmljZV93b3JrZXJfcmVnaXN0cmF0aW9uc19k
aXJlY3RvcnkodGVzdC0+bV9tYW5hZ2VyKSk7CisjZW5kaWYKICAgICB0ZXN0LT5hc3NlcnRGaWxl
SXNDcmVhdGVkKHN3UmVnaXN0cmF0aW9uc0RpcmVjdG9yeS5nZXQoKSk7CiAgICAgZ19hc3NlcnRf
dHJ1ZShnX2ZpbGVfdGVzdChzd1JlZ2lzdHJhdGlvbnNEaXJlY3RvcnkuZ2V0KCksIEdfRklMRV9U
RVNUX0lTX0RJUikpOwogCiAgICAgdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlz
aGVkKCJsZXQgZG9tQ2FjaGVPcGVuZWQgPSBmYWxzZTsgY2FjaGVzLm9wZW4oJ215LWNhY2hlJyku
dGhlbigoKSA9PiB7IGRvbUNhY2hlT3BlbmVkID0gdHJ1ZX0pOyIsIG51bGxwdHIpOwogICAgIEdV
bmlxdWVQdHI8Y2hhcj4gZG9tQ2FjaGVEaXJlY3RvcnkoZ19idWlsZF9maWxlbmFtZShUZXN0Ojpk
YXRhRGlyZWN0b3J5KCksICJDYWNoZVN0b3JhZ2UiLCBudWxscHRyKSk7CisjaWYgIUVOQUJMRSgy
MDIyX0dMSUJfQVBJKQogICAgIGdfYXNzZXJ0X2NtcHN0cihkb21DYWNoZURpcmVjdG9yeS5nZXQo
KSwgPT0sIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfZG9tX2NhY2hlX2RpcmVjdG9y
eSh0ZXN0LT5tX21hbmFnZXIpKTsKKyNlbmRpZgogICAgIHRlc3QtPmFzc2VydEZpbGVJc0NyZWF0
ZWQoZG9tQ2FjaGVEaXJlY3RvcnkuZ2V0KCkpOwogICAgIGdfYXNzZXJ0X3RydWUoZ19maWxlX3Rl
c3QoZG9tQ2FjaGVEaXJlY3RvcnkuZ2V0KCksIEdfRklMRV9URVNUX0lTX0RJUikpOwogCkBAIC0y
MjYsMTAgKzI0NiwxNyBAQCBzdGF0aWMgdm9pZCB0ZXN0V2Vic2l0ZURhdGFDb25maWd1cmF0aW9u
KFdlYnNpdGVEYXRhVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICB0ZXN0LT5jbGVhcihw
ZXJzaXN0ZW50Q2FjaGVzLCAwKTsKICAgICBnX2Fzc2VydF9udWxsKHRlc3QtPmZldGNoKHBlcnNp
c3RlbnRDYWNoZXMpKTsKIAotICAgIC8vIFRoZSBkZWZhdWx0IGNvbnRleHQgc2hvdWxkIGhhdmUg
YSBkaWZmZXJlbnQgbWFuYWdlciB3aXRoIGRpZmZlcmVudCBjb25maWd1cmF0aW9uLgotICAgIFdl
YktpdFdlYnNpdGVEYXRhTWFuYWdlciogZGVmYXVsdE1hbmFnZXIgPSB3ZWJraXRfd2ViX2NvbnRl
eHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVs
dCgpKTsKKyAgICAvLyBUaGUgZGVmYXVsdCBjb250ZXh0IG9yIHNlc3Npb24gc2hvdWxkIGhhdmUg
YSBkaWZmZXJlbnQgbWFuYWdlciB3aXRoIGRpZmZlcmVudCBjb25maWd1cmF0aW9uLgorI2lmIEVO
QUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIGF1dG8qIGRlZmF1bHRNYW5hZ2VyID0gd2Via2l0X25l
dHdvcmtfc2Vzc2lvbl9nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIod2Via2l0X25ldHdvcmtfc2Vz
c2lvbl9nZXRfZGVmYXVsdCgpKTsKKyNlbHNlCisgICAgYXV0byogZGVmYXVsdE1hbmFnZXIgPSB3
ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYmtpdF93ZWJfY29u
dGV4dF9nZXRfZGVmYXVsdCgpKTsKKyNlbmRpZgogICAgIGdfYXNzZXJ0X3RydWUoV0VCS0lUX0lT
X1dFQlNJVEVfREFUQV9NQU5BR0VSKGRlZmF1bHRNYW5hZ2VyKSk7CiAgICAgZ19hc3NlcnRfdHJ1
ZSh0ZXN0LT5tX21hbmFnZXIgIT0gZGVmYXVsdE1hbmFnZXIpOworICAgIGdfYXNzZXJ0X2NtcHN0
cih3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Jhc2VfZGF0YV9kaXJlY3RvcnkodGVz
dC0+bV9tYW5hZ2VyKSwgIT0sIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfYmFzZV9k
YXRhX2RpcmVjdG9yeShkZWZhdWx0TWFuYWdlcikpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJr
aXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Jhc2VfY2FjaGVfZGlyZWN0b3J5KHRlc3QtPm1f
bWFuYWdlciksICE9LCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Jhc2VfY2FjaGVf
ZGlyZWN0b3J5KGRlZmF1bHRNYW5hZ2VyKSk7CisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQog
ICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2xvY2Fs
X3N0b3JhZ2VfZGlyZWN0b3J5KHRlc3QtPm1fbWFuYWdlciksICE9LCB3ZWJraXRfd2Vic2l0ZV9k
YXRhX21hbmFnZXJfZ2V0X2xvY2FsX3N0b3JhZ2VfZGlyZWN0b3J5KGRlZmF1bHRNYW5hZ2VyKSk7
CiAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfaW5k
ZXhlZGRiX2RpcmVjdG9yeSh0ZXN0LT5tX21hbmFnZXIpLCAhPSwgd2Via2l0X3dlYnNpdGVfZGF0
YV9tYW5hZ2VyX2dldF9pbmRleGVkZGJfZGlyZWN0b3J5KGRlZmF1bHRNYW5hZ2VyKSk7CiAgICAg
Z19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfZGlza19jYWNo
ZV9kaXJlY3RvcnkodGVzdC0+bV9tYW5hZ2VyKSwgIT0sIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFu
YWdlcl9nZXRfZGlza19jYWNoZV9kaXJlY3RvcnkoZGVmYXVsdE1hbmFnZXIpKTsKQEAgLTIzOCw3
ICsyNjUsOSBAQCBzdGF0aWMgdm9pZCB0ZXN0V2Vic2l0ZURhdGFDb25maWd1cmF0aW9uKFdlYnNp
dGVEYXRhVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9pdHBfZGlyZWN0b3J5KHRlc3QtPm1fbWFuYWdl
ciksICE9LCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2l0cF9kaXJlY3RvcnkoZGVm
YXVsdE1hbmFnZXIpKTsKICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYnNpdGVfZGF0YV9t
YW5hZ2VyX2dldF9zZXJ2aWNlX3dvcmtlcl9yZWdpc3RyYXRpb25zX2RpcmVjdG9yeSh0ZXN0LT5t
X21hbmFnZXIpLCAhPSwgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9zZXJ2aWNlX3dv
cmtlcl9yZWdpc3RyYXRpb25zX2RpcmVjdG9yeShkZWZhdWx0TWFuYWdlcikpOwogICAgIGdfYXNz
ZXJ0X2NtcHN0cih3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2RvbV9jYWNoZV9kaXJl
Y3RvcnkodGVzdC0+bV9tYW5hZ2VyKSwgIT0sIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9n
ZXRfZG9tX2NhY2hlX2RpcmVjdG9yeShkZWZhdWx0TWFuYWdlcikpOworI2VuZGlmCiAKKyNpZiAh
RU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAgICAgLy8gQW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24g
cHJvdmlkZWQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGJhc2UgZGlycy4KICAgICBpbmRleGVkREJE
aXJlY3RvcnkucmVzZXQoZ19idWlsZF9maWxlbmFtZShUZXN0OjpkYXRhRGlyZWN0b3J5KCksICJt
eWN1c3RvbWluZGV4ZWRkYiIsIG51bGxwdHIpKTsKICAgICBhcHBsaWNhdGlvbkNhY2hlRGlyZWN0
b3J5LnJlc2V0KGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6ZGF0YURpcmVjdG9yeSgpLCAibXljdXN0
b21hcHBjYWNoZSIsIG51bGxwdHIpKTsKQEAgLTI1OCw4ICsyODcsOCBAQCBzdGF0aWMgdm9pZCB0
ZXN0V2Vic2l0ZURhdGFDb25maWd1cmF0aW9uKFdlYnNpdGVEYXRhVGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X2dldF9kaXNrX2NhY2hlX2RpcmVjdG9yeShiYXNlRGF0YU1hbmFnZXIuZ2V0KCkpLCA9PSwgZGlz
a0NhY2hlRGlyZWN0b3J5LmdldCgpKTsKIAogICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJ
T05TX0VORAotfQogI2VuZGlmCit9CiAKIHN0YXRpYyB2b2lkIGVwaGVtZXJhbFZpZXdsb2FkQ2hh
bmdlZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRMb2FkRXZlbnQgbG9hZEV2ZW50LCBX
ZWJWaWV3VGVzdCogdGVzdCkKIHsKQEAgLTI3MSw4ICszMDAsMTMgQEAgc3RhdGljIHZvaWQgZXBo
ZW1lcmFsVmlld2xvYWRDaGFuZ2VkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdExvYWRF
dmVudCBsb2EKIAogc3RhdGljIHZvaWQgdGVzdFdlYnNpdGVEYXRhRXBoZW1lcmFsKFdlYlZpZXdU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogeworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQor
ICAgIEdSZWZQdHI8V2ViS2l0TmV0d29ya1Nlc3Npb24+IHNlc3Npb24gPSBhZG9wdEdSZWYod2Vi
a2l0X25ldHdvcmtfc2Vzc2lvbl9uZXdfZXBoZW1lcmFsKCkpOworICAgIEdSZWZQdHI8V2ViS2l0
V2Vic2l0ZURhdGFNYW5hZ2VyPiBtYW5hZ2VyID0gd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRf
d2Vic2l0ZV9kYXRhX21hbmFnZXIoc2Vzc2lvbi5nZXQoKSk7CisjZWxzZQogICAgIEdSZWZQdHI8
V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyPiBtYW5hZ2VyID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJz
aXRlX2RhdGFfbWFuYWdlcl9uZXdfZXBoZW1lcmFsKCkpOwogICAgIGdfYXNzZXJ0X3RydWUod2Vi
a2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2lzX2VwaGVtZXJhbChtYW5hZ2VyLmdldCgpKSk7Cisj
ZW5kaWYKICAgICBnX2Fzc2VydF9udWxsKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRf
YmFzZV9kYXRhX2RpcmVjdG9yeShtYW5hZ2VyLmdldCgpKSk7CiAgICAgZ19hc3NlcnRfbnVsbCh3
ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Jhc2VfY2FjaGVfZGlyZWN0b3J5KG1hbmFn
ZXIuZ2V0KCkpKTsKIApAQCAtMjg2LDIyICszMjAsMzUgQEAgc3RhdGljIHZvaWQgdGVzdFdlYnNp
dGVEYXRhRXBoZW1lcmFsKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGdf
YXNzZXJ0X251bGwod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9pdHBfZGlyZWN0b3J5
KG1hbmFnZXIuZ2V0KCkpKTsKICAgICBnX2Fzc2VydF9udWxsKHdlYmtpdF93ZWJzaXRlX2RhdGFf
bWFuYWdlcl9nZXRfc2VydmljZV93b3JrZXJfcmVnaXN0cmF0aW9uc19kaXJlY3RvcnkobWFuYWdl
ci5nZXQoKSkpOwogICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAotI2VuZGlm
CiAKICAgICAvLyBDb25maWd1cmF0aW9uIGlzIGlnbm9yZWQgd2hlbiBpcy1lcGhlbWVyYWwgaXMg
dXNlZC4KICAgICBtYW5hZ2VyID0gYWRvcHRHUmVmKFdFQktJVF9XRUJTSVRFX0RBVEFfTUFOQUdF
UihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCU0lURV9EQVRBX01BTkFHRVIsICJiYXNlLWRh
dGEtZGlyZWN0b3J5IiwgVGVzdDo6ZGF0YURpcmVjdG9yeSgpLCAiaXMtZXBoZW1lcmFsIiwgVFJV
RSwgbnVsbHB0cikpKTsKICAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFu
YWdlcl9pc19lcGhlbWVyYWwobWFuYWdlci5nZXQoKSkpOwogICAgIGdfYXNzZXJ0X251bGwod2Vi
a2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9iYXNlX2RhdGFfZGlyZWN0b3J5KG1hbmFnZXIu
Z2V0KCkpKTsKKyNlbmRpZgogCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgd2Via2l0
X25ldHdvcmtfc2Vzc2lvbl9zZXRfaXRwX2VuYWJsZWQoc2Vzc2lvbi5nZXQoKSwgVFJVRSk7Cisg
ICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF9pdHBfZW5hYmxlZChz
ZXNzaW9uLmdldCgpKSk7CisjZWxzZQogICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9z
ZXRfaXRwX2VuYWJsZWQobWFuYWdlci5nZXQoKSwgVFJVRSk7Ci0gICAgZ19hc3NlcnQod2Via2l0
X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9pdHBfZW5hYmxlZChtYW5hZ2VyLmdldCgpKSk7Cisg
ICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2l0cF9lbmFi
bGVkKG1hbmFnZXIuZ2V0KCkpKTsKKyNlbmRpZgogCiAgICAgLy8gTm9uIHBlcnNpc3RlbnQgZGF0
YSBjYW4gYmUgcXVlcmllZCBpbiBhbiBlcGhlbWVyYWwgbWFuYWdlci4KKyNpZiBFTkFCTEUoMjAy
Ml9HTElCX0FQSSkKKyAgICBhdXRvIHdlYlZpZXcgPSBUZXN0OjphZG9wdFZpZXcoZ19vYmplY3Rf
bmV3KFdFQktJVF9UWVBFX1dFQl9WSUVXLAorICAgICAgICAid2ViLWNvbnRleHQiLCB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X2NvbnRleHQodGVzdC0+bV93ZWJWaWV3KSwKKyAgICAgICAgIm5ldHdvcmst
c2Vzc2lvbiIsIHNlc3Npb24uZ2V0KCksCisgICAgICAgIG51bGxwdHIpKTsKKyAgICBnX2Fzc2Vy
dF90cnVlKHdlYmtpdF93ZWJfdmlld19nZXRfbmV0d29ya19zZXNzaW9uKHdlYlZpZXcuZ2V0KCkp
ID09IHNlc3Npb24uZ2V0KCkpOworI2Vsc2UKICAgICBHUmVmUHRyPFdlYktpdFdlYkNvbnRleHQ+
IHdlYkNvbnRleHQgPSBhZG9wdEdSZWYod2Via2l0X3dlYl9jb250ZXh0X25ld193aXRoX3dlYnNp
dGVfZGF0YV9tYW5hZ2VyKG1hbmFnZXIuZ2V0KCkpKTsKICAgICBnX2Fzc2VydF90cnVlKHdlYmtp
dF93ZWJfY29udGV4dF9pc19lcGhlbWVyYWwod2ViQ29udGV4dC5nZXQoKSkpOwogICAgIGF1dG8g
d2ViVmlldyA9IFRlc3Q6OmFkb3B0VmlldyhUZXN0OjpjcmVhdGVXZWJWaWV3KHdlYkNvbnRleHQu
Z2V0KCkpKTsKICAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF93ZWJfdmlld19pc19lcGhlbWVyYWwo
d2ViVmlldy5nZXQoKSkpOwogICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X3dlYl92aWV3X2dldF93
ZWJzaXRlX2RhdGFfbWFuYWdlcih3ZWJWaWV3LmdldCgpKSA9PSBtYW5hZ2VyLmdldCgpKTsKKyNl
bmRpZgogCiAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LmdldCgpLCAibG9hZC1jaGFuZ2Vk
IiwgR19DQUxMQkFDSyhlcGhlbWVyYWxWaWV3bG9hZENoYW5nZWQpLCB0ZXN0KTsKICAgICB3ZWJr
aXRfd2ViX3ZpZXdfbG9hZF91cmkod2ViVmlldy5nZXQoKSwga1NlcnZlci0+Z2V0VVJJRm9yUGF0
aCgiL2VtcHR5IikuZGF0YSgpKTsKQEAgLTMyNSw3ICszNzIsMTEgQEAgc3RhdGljIHZvaWQgdGVz
dFdlYnNpdGVEYXRhRXBoZW1lcmFsKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQog
ICAgIH0sIHRlc3QpOwogICAgIGdfbWFpbl9sb29wX3J1bih0ZXN0LT5tX21haW5Mb29wKTsKIAor
I2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fc2V0
X2l0cF9lbmFibGVkKHNlc3Npb24uZ2V0KCksIEZBTFNFKTsKKyNlbHNlCiAgICAgd2Via2l0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyX3NldF9pdHBfZW5hYmxlZChtYW5hZ2VyLmdldCgpLCBGQUxTRSk7
CisjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgdGVzdFdlYnNpdGVEYXRhQ2FjaGUoV2Vic2l0ZURh
dGFUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQpAQCAtNjgyLDMxICs3MzMsMzcgQEAgc3RhdGlj
IHZvaWQgdGVzdFdlYnNpdGVEYXRhRGV2aWNlSWRIYXNoU2FsdChXZWJzaXRlRGF0YVRlc3QqIHRl
c3QsIGdjb25zdHBvaW50ZXIKICAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9tb2NrX2Nh
cHR1cmVfZGV2aWNlcyhzZXR0aW5ncywgZW5hYmxlZCk7CiB9CiAKLSNpZiAhRU5BQkxFKDIwMjJf
R0xJQl9BUEkpCiBzdGF0aWMgdm9pZCB0ZXN0V2Vic2l0ZURhdGFJVFAoV2Vic2l0ZURhdGFUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogewotICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJ
T05TX0JFR0lOCi0gICAgY29uc3QgY2hhciogaXRwRGlyZWN0b3J5ID0gd2Via2l0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyX2dldF9pdHBfZGlyZWN0b3J5KHRlc3QtPm1fbWFuYWdlcik7Ci0gICAgQUxM
T1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECi0gICAgR1VuaXF1ZVB0cjxjaGFyPiBpdHBE
YXRhYmFzZUZpbGUoZ19idWlsZF9maWxlbmFtZShpdHBEaXJlY3RvcnksICJvYnNlcnZhdGlvbnMu
ZGIiLCBudWxscHRyKSk7CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBpdHBEaXJlY3RvcnkoZ19idWls
ZF9maWxlbmFtZShUZXN0OjpkYXRhRGlyZWN0b3J5KCksICJpdHAiLCBudWxscHRyKSk7CisgICAg
R1VuaXF1ZVB0cjxjaGFyPiBpdHBEYXRhYmFzZUZpbGUoZ19idWlsZF9maWxlbmFtZShpdHBEaXJl
Y3RvcnkuZ2V0KCksICJvYnNlcnZhdGlvbnMuZGIiLCBudWxscHRyKSk7CiAKICAgICAvLyBEZWxl
dGUgYW55IHByZXZpb3VzIGRhdGEuCiAgICAgZ191bmxpbmsoaXRwRGF0YWJhc2VGaWxlLmdldCgp
KTsKLSAgICBnX3JtZGlyKGl0cERpcmVjdG9yeSk7CisgICAgZ19ybWRpcihpdHBEaXJlY3Rvcnku
Z2V0KCkpOwogCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgZ19hc3NlcnRfZmFsc2Uo
d2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfaXRwX2VuYWJsZWQodGVzdC0+bV9uZXR3b3JrU2Vz
c2lvbi5nZXQoKSkpOworI2Vsc2UKICAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfd2Vic2l0ZV9k
YXRhX21hbmFnZXJfZ2V0X2l0cF9lbmFibGVkKHRlc3QtPm1fbWFuYWdlcikpOworI2VuZGlmCiAg
ICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZW1wdHkiKS5kYXRhKCkp
OwogICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwogCisjaWYgRU5BQkxFKDIwMjJf
R0xJQl9BUEkpCisgICAgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfaXRwX2VuYWJsZWQodGVz
dC0+bV9uZXR3b3JrU2Vzc2lvbi5nZXQoKSwgVFJVRSk7CisgICAgZ19hc3NlcnRfdHJ1ZSh3ZWJr
aXRfbmV0d29ya19zZXNzaW9uX2dldF9pdHBfZW5hYmxlZCh0ZXN0LT5tX25ldHdvcmtTZXNzaW9u
LmdldCgpKSk7CisjZWxzZQogICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9zZXRfaXRw
X2VuYWJsZWQodGVzdC0+bV9tYW5hZ2VyLCBUUlVFKTsKICAgICBnX2Fzc2VydF90cnVlKHdlYmtp
dF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfaXRwX2VuYWJsZWQodGVzdC0+bV9tYW5hZ2VyKSk7
Ci0gICAgZ19hc3NlcnRfZmFsc2UoZ19maWxlX3Rlc3QoaXRwRGlyZWN0b3J5LCBHX0ZJTEVfVEVT
VF9JU19ESVIpKTsKKyNlbmRpZgorICAgIGdfYXNzZXJ0X2ZhbHNlKGdfZmlsZV90ZXN0KGl0cERp
cmVjdG9yeS5nZXQoKSwgR19GSUxFX1RFU1RfSVNfRElSKSk7CiAgICAgZ19hc3NlcnRfZmFsc2Uo
Z19maWxlX3Rlc3QoaXRwRGF0YWJhc2VGaWxlLmdldCgpLCBHX0ZJTEVfVEVTVF9JU19SRUdVTEFS
KSk7CiAKICAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9lbXB0eSIp
LmRhdGEoKSk7CiAgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CiAgICAgdGVzdC0+
YXNzZXJ0RmlsZUlzQ3JlYXRlZChpdHBEYXRhYmFzZUZpbGUuZ2V0KCkpOwotICAgIGdfYXNzZXJ0
X3RydWUoZ19maWxlX3Rlc3QoaXRwRGlyZWN0b3J5LCBHX0ZJTEVfVEVTVF9JU19ESVIpKTsKKyAg
ICBnX2Fzc2VydF90cnVlKGdfZmlsZV90ZXN0KGl0cERpcmVjdG9yeS5nZXQoKSwgR19GSUxFX1RF
U1RfSVNfRElSKSk7CiAgICAgZ19hc3NlcnRfdHJ1ZShnX2ZpbGVfdGVzdChpdHBEYXRhYmFzZUZp
bGUuZ2V0KCksIEdfRklMRV9URVNUX0lTX1JFR1VMQVIpKTsKIAogICAgIC8vIEdpdmUgc29tZSB0
aW1lIGZvciB0aGUgZGF0YWJhc2UgdG8gYmUgdXBkYXRlZC4KQEAgLTczMSwxMiArNzg4LDE2IEBA
IHN0YXRpYyB2b2lkIHRlc3RXZWJzaXRlRGF0YUlUUChXZWJzaXRlRGF0YVRlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCiAgICAgc3RhdGljIGNvbnN0IFdlYktpdFdlYnNpdGVEYXRhVHlwZXMgY2Fj
aGVBbmRJVFAgPSBzdGF0aWNfY2FzdDxXZWJLaXRXZWJzaXRlRGF0YVR5cGVzPihXRUJLSVRfV0VC
U0lURV9EQVRBX0lUUCB8IFdFQktJVF9XRUJTSVRFX0RBVEFfTUVNT1JZX0NBQ0hFIHwgV0VCS0lU
X1dFQlNJVEVfREFUQV9ESVNLX0NBQ0hFKTsKICAgICB0ZXN0LT5jbGVhcihjYWNoZUFuZElUUCwg
MCk7CiAKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICB3ZWJraXRfbmV0d29ya19zZXNz
aW9uX3NldF9pdHBfZW5hYmxlZCh0ZXN0LT5tX25ldHdvcmtTZXNzaW9uLmdldCgpLCBGQUxTRSk7
CisgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfaXRwX2VuYWJs
ZWQodGVzdC0+bV9uZXR3b3JrU2Vzc2lvbi5nZXQoKSkpOworI2Vsc2UKICAgICB3ZWJraXRfd2Vi
c2l0ZV9kYXRhX21hbmFnZXJfc2V0X2l0cF9lbmFibGVkKHRlc3QtPm1fbWFuYWdlciwgRkFMU0Up
OwogICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfaXRw
X2VuYWJsZWQodGVzdC0+bV9tYW5hZ2VyKSk7CisjZW5kaWYKIAotICAgIGdfcm1kaXIoaXRwRGly
ZWN0b3J5KTsKKyAgICBnX3JtZGlyKGl0cERpcmVjdG9yeS5nZXQoKSk7CiB9Ci0jZW5kaWYKIAog
c3RhdGljIHZvaWQgdGVzdFdlYnNpdGVEYXRhU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbnMoV2Vi
c2l0ZURhdGFUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogewpAQCAtODE0LDEzICs4NzUsMjEg
QEAgcHVibGljOgogICAgICAgICB3ZWJraXRfbWVtb3J5X3ByZXNzdXJlX3NldHRpbmdzX3NldF9r
aWxsX3RocmVzaG9sZChzZXR0aW5ncywgMSk7CiAgICAgICAgIHdlYmtpdF9tZW1vcnlfcHJlc3N1
cmVfc2V0dGluZ3Nfc2V0X3N0cmljdF90aHJlc2hvbGQoc2V0dGluZ3MsIDAuNzUpOwogICAgICAg
ICB3ZWJraXRfbWVtb3J5X3ByZXNzdXJlX3NldHRpbmdzX3NldF9jb25zZXJ2YXRpdmVfdGhyZXNo
b2xkKHNldHRpbmdzLCAwLjUpOworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgICAgICB3
ZWJraXRfbmV0d29ya19zZXNzaW9uX3NldF9tZW1vcnlfcHJlc3N1cmVfc2V0dGluZ3Moc2V0dGlu
Z3MpOworI2Vsc2UKICAgICAgICAgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX3NldF9tZW1v
cnlfcHJlc3N1cmVfc2V0dGluZ3Moc2V0dGluZ3MpOworI2VuZGlmCiAgICAgICAgIHdlYmtpdF9t
ZW1vcnlfcHJlc3N1cmVfc2V0dGluZ3NfZnJlZShzZXR0aW5ncyk7CiAgICAgfQogCiAgICAgc3Rh
dGljIHZvaWQgdGVhcmRvd24oKQogICAgIHsKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAg
ICAgICAgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfbWVtb3J5X3ByZXNzdXJlX3NldHRpbmdz
KG51bGxwdHIpOworI2Vsc2UKICAgICAgICAgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX3Nl
dF9tZW1vcnlfcHJlc3N1cmVfc2V0dGluZ3MobnVsbHB0cik7CisjZW5kaWYKICAgICB9CiAKICAg
ICBzdGF0aWMgZ2Jvb2xlYW4gbG9hZEZhaWxlZENhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcsIFdlYktpdExvYWRFdmVudCBsb2FkRXZlbnQsIGNvbnN0IGNoYXIqIGZhaWxpbmdVUkksIEdF
cnJvciogZXJyb3IsIE1lbW9yeVByZXNzdXJlVGVzdCogdGVzdCkKQEAgLTg1OSw5ICs5MjgsNyBA
QCB2b2lkIGJlZm9yZUFsbCgpCiAgICAgcHJlcG9wdWxhdGVIc3RzRGF0YSgpOwogI2VuZGlmCiAK
LSNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAgICAgV2Vic2l0ZURhdGFUZXN0OjphZGQoIldl
YktpdFdlYnNpdGVEYXRhIiwgImNvbmZpZ3VyYXRpb24iLCB0ZXN0V2Vic2l0ZURhdGFDb25maWd1
cmF0aW9uKTsKLSNlbmRpZgogICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYnNpdGVEYXRh
IiwgImVwaGVtZXJhbCIsIHRlc3RXZWJzaXRlRGF0YUVwaGVtZXJhbCk7CiAgICAgV2Vic2l0ZURh
dGFUZXN0OjphZGQoIldlYktpdFdlYnNpdGVEYXRhIiwgImNhY2hlIiwgdGVzdFdlYnNpdGVEYXRh
Q2FjaGUpOwogICAgIFdlYnNpdGVEYXRhVGVzdDo6YWRkKCJXZWJLaXRXZWJzaXRlRGF0YSIsICJz
dG9yYWdlIiwgdGVzdFdlYnNpdGVEYXRhU3RvcmFnZSk7CkBAIC04NzIsMTAgKzkzOSw3IEBAIHZv
aWQgYmVmb3JlQWxsKCkKICAgICBXZWJzaXRlRGF0YVRlc3Q6OmFkZCgiV2ViS2l0V2Vic2l0ZURh
dGEiLCAiaHN0cyIsIHRlc3RXZWJzaXRlRGF0YUhzdHMpOwogI2VuZGlmCiAgICAgV2Vic2l0ZURh
dGFUZXN0OjphZGQoIldlYktpdFdlYnNpdGVEYXRhIiwgImRldmljZWlkaGFzaHNhbHQiLCB0ZXN0
V2Vic2l0ZURhdGFEZXZpY2VJZEhhc2hTYWx0KTsKLSNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkp
Ci0gICAgLy8gRklYTUU6IGZpbmQgYSB3YXkgdG8gdGVzdCB0aGlzIHdpdGhvdXQgZGVwcmVjYXRl
ZCBBUEkuCiAgICAgV2Vic2l0ZURhdGFUZXN0OjphZGQoIldlYktpdFdlYnNpdGVEYXRhIiwgIml0
cCIsIHRlc3RXZWJzaXRlRGF0YUlUUCk7Ci0jZW5kaWYKICAgICBXZWJzaXRlRGF0YVRlc3Q6OmFk
ZCgiV2ViS2l0V2Vic2l0ZURhdGEiLCAic2VydmljZS13b3JrZXItcmVnaXN0cmF0aW9ucyIsIHRl
c3RXZWJzaXRlRGF0YVNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25zKTsKICAgICBXZWJzaXRlRGF0
YVRlc3Q6OmFkZCgiV2ViS2l0V2Vic2l0ZURhdGEiLCAiZG9tLWNhY2hlIiwgdGVzdFdlYnNpdGVE
YXRhRE9NQ2FjaGUpOwogICAgIE1lbW9yeVByZXNzdXJlVGVzdDo6YWRkKCJXZWJLaXRXZWJzaXRl
RGF0YSIsICJtZW1vcnktcHJlc3N1cmUiLCB0ZXN0TWVtb3J5UHJlc3N1cmVTZXR0aW5ncyk7CmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0QXV0b2Ns
ZWFudXBzLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL1Rlc3RBdXRv
Y2xlYW51cHMuY3BwCmluZGV4IDQyMDUwNWY0ZTI0ZS4uZGNjNGRmOWI0MDkxIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0QXV0b2NsZWFudXBzLmNw
cAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0QXV0b2NsZWFu
dXBzLmNwcApAQCAtMzYsOSArMzYsMTUgQEAgc3RhdGljIHZvaWQgdGVzdFVJUHJvY2Vzc0F1dG9j
bGVhbnVwcyhXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICBnX2Fzc2VydF90
cnVlKFdFQktJVF9JU19XRUJfQ09OVEVYVChjb250ZXh0KSk7CiAgICAgdGVzdC0+YXNzZXJ0T2Jq
ZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChjb250ZXh0KSk7CiAKKyNpZiBF
TkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICBnX2F1dG9wdHIoV2ViS2l0TmV0d29ya1Nlc3Npb24p
IHNlc3Npb24gPSB3ZWJraXRfbmV0d29ya19zZXNzaW9uX25ldyhudWxscHRyLCBudWxscHRyKTsK
KyAgICBnX2Fzc2VydF90cnVlKFdFQktJVF9JU19ORVRXT1JLX1NFU1NJT04oc2Vzc2lvbikpOwor
ICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1Qo
c2Vzc2lvbikpOworI2Vsc2UKICAgICBnX2F1dG9wdHIoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2Vy
KSBtYW5hZ2VyID0gd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX25ldyhudWxscHRyKTsKICAg
ICBnX2Fzc2VydF90cnVlKFdFQktJVF9JU19XRUJTSVRFX0RBVEFfTUFOQUdFUihtYW5hZ2VyKSk7
Ci0gICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVD
VChjb250ZXh0KSk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5p
c2hlcyhHX09CSkVDVChtYW5hZ2VyKSk7CisjZW5kaWYKIAogICAgIGdfYXV0b3B0cihXZWJLaXRV
c2VyU2NyaXB0KSB1c2VyU2NyaXB0ID0gd2Via2l0X3VzZXJfc2NyaXB0X25ldygiIiwKICAgICAg
ICAgV0VCS0lUX1VTRVJfQ09OVEVOVF9JTkpFQ1RfQUxMX0ZSQU1FUywgV0VCS0lUX1VTRVJfU0NS
SVBUX0lOSkVDVF9BVF9ET0NVTUVOVF9TVEFSVCwKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvZ2xpYi9XZWJLaXRHTGliL1Rlc3RNYWluLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
Z2xpYi9XZWJLaXRHTGliL1Rlc3RNYWluLmNwcAppbmRleCAzOTc0MTc0NmE3NTYuLmEwYzBiNTNi
ZDRkNSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9nbGliL1dlYktpdEdMaWIvVGVz
dE1haW4uY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ2xpYi9XZWJLaXRHTGliL1Rlc3RN
YWluLmNwcApAQCAtMTI3LDYgKzEyNyw4IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJn
dikKICAgICBnX3NldF9wcmduYW1lKEZpbGVTeXN0ZW06OmN1cnJlbnRFeGVjdXRhYmxlTmFtZSgp
LmRhdGEoKSk7CiAgICAgZ19zZXRlbnYoIldFQktJVF9FWEVDX1BBVEgiLCBXRUJLSVRfRVhFQ19Q
QVRILCBGQUxTRSk7CiAgICAgZ19zZXRlbnYoIldFQktJVF9JTkpFQ1RFRF9CVU5ETEVfUEFUSCIs
IFdFQktJVF9JTkpFQ1RFRF9CVU5ETEVfUEFUSCwgRkFMU0UpOworICAgIC8vIFNhbmRib3ggcmVx
dWlyZXMgdXNpbmcgR0FwcGxpY2F0aW9uLgorICAgIGdfc2V0ZW52KCJXRUJLSVRfRElTQUJMRV9T
QU5EQk9YX1RISVNfSVNfREFOR0VST1VTIiwgIjEiLCBUUlVFKTsKICAgICBnX3NldGVudigiTENf
QUxMIiwgIkMiLCBUUlVFKTsKICAgICBnX3NldGVudigiR0lPX1VTRV9WRlMiLCAibG9jYWwiLCBU
UlVFKTsKICAgICBnX3NldGVudigiR1NFVFRJTkdTX0JBQ0tFTkQiLCAibWVtb3J5IiwgVFJVRSk7
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2dsaWIvV2ViS2l0R0xpYi9UZXN0TWFp
bi5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9nbGliL1dlYktpdEdMaWIvVGVzdE1haW4uaAppbmRl
eCAwY2ViYTBkYzRkNTMuLmIwYmYzYjJhMmVmMCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9nbGliL1dlYktpdEdMaWIvVGVzdE1haW4uaAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L2dsaWIvV2ViS2l0R0xpYi9UZXN0TWFpbi5oCkBAIC0xMjAsNiArMTIwLDEyIEBAIHB1YmxpYzoK
IAogICAgIFRlc3QoKQogICAgIHsKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICAgICAg
bV9uZXR3b3JrU2Vzc2lvbiA9IGFkb3B0R1JlZih3ZWJraXRfbmV0d29ya19zZXNzaW9uX25ldyhk
YXRhRGlyZWN0b3J5KCksIGRhdGFEaXJlY3RvcnkoKSkpOworICAgICAgICBhc3NlcnRPYmplY3RJ
c0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKG1fbmV0d29ya1Nlc3Npb24uZ2V0KCkp
KTsKKworICAgICAgICBtX3dlYkNvbnRleHQgPSBhZG9wdEdSZWYoV0VCS0lUX1dFQl9DT05URVhU
KGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfQ09OVEVYVCwgIm1lbW9yeS1wcmVzc3VyZS1z
ZXR0aW5ncyIsIHNfbWVtb3J5UHJlc3N1cmVTZXR0aW5ncywgbnVsbHB0cikpKTsKKyNlbHNlCiAg
ICAgICAgIEdSZWZQdHI8V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyPiB3ZWJzaXRlRGF0YU1hbmFn
ZXIgPSBhZG9wdEdSZWYod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX25ldygKICAgICAgICAg
ICAgICJiYXNlLWRhdGEtZGlyZWN0b3J5IiwgZGF0YURpcmVjdG9yeSgpLAogICAgICAgICAgICAg
ImJhc2UtY2FjaGUtZGlyZWN0b3J5IiwgZGF0YURpcmVjdG9yeSgpLApAQCAtMTI3LDEyICsxMzMs
MTMgQEAgcHVibGljOgogCiAgICAgICAgIG1fd2ViQ29udGV4dCA9IGFkb3B0R1JlZihXRUJLSVRf
V0VCX0NPTlRFWFQoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9DT05URVhULAogICAgICAg
ICAgICAgIndlYnNpdGUtZGF0YS1tYW5hZ2VyIiwgd2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpLAot
I2lmIFBMQVRGT1JNKEdUSykgJiYgIVVTRShHVEs0KQorI2lmIFBMQVRGT1JNKEdUSykKICAgICAg
ICAgICAgICJwcm9jZXNzLXN3YXAtb24tY3Jvc3Mtc2l0ZS1uYXZpZ2F0aW9uLWVuYWJsZWQiLCBU
UlVFLAogICAgICAgICAgICAgInVzZS1zeXN0ZW0tYXBwZWFyYW5jZS1mb3Itc2Nyb2xsYmFycyIs
IEZBTFNFLAogI2VuZGlmCiAgICAgICAgICAgICAibWVtb3J5LXByZXNzdXJlLXNldHRpbmdzIiwg
c19tZW1vcnlQcmVzc3VyZVNldHRpbmdzLAogICAgICAgICAgICAgbnVsbHB0cikpKTsKKyNlbmRp
ZgogICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNU
KG1fd2ViQ29udGV4dC5nZXQoKSkpOwogICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViQ29u
dGV4dC5nZXQoKSwgImluaXRpYWxpemUtd2ViLWV4dGVuc2lvbnMiLCBHX0NBTExCQUNLKGluaXRp
YWxpemVXZWJFeHRlbnNpb25zQ2FsbGJhY2spLCB0aGlzKTsKICAgICB9CkBAIC0xNDEsNiArMTQ4
LDkgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVj
dF9tYXRjaGVkKG1fd2ViQ29udGV4dC5nZXQoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwg
bnVsbHB0ciwgbnVsbHB0ciwgdGhpcyk7CiAgICAgICAgIG1fd2ViQ29udGV4dCA9IG51bGxwdHI7
CisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgICAgIG1fbmV0d29ya1Nlc3Npb24gPSBu
dWxscHRyOworI2VuZGlmCiAgICAgICAgIGlmIChtX3dhdGNoZWRPYmplY3RzLmlzRW1wdHkoKSkK
ICAgICAgICAgICAgIHJldHVybjsKIApAQCAtMjc5LDYgKzI4OSw5IEBAIHB1YmxpYzoKIAogICAg
IEhhc2hTZXQ8R09iamVjdCo+IG1fd2F0Y2hlZE9iamVjdHM7CiAgICAgR1JlZlB0cjxXZWJLaXRX
ZWJDb250ZXh0PiBtX3dlYkNvbnRleHQ7CisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAg
R1JlZlB0cjxXZWJLaXROZXR3b3JrU2Vzc2lvbj4gbV9uZXR3b3JrU2Vzc2lvbjsKKyNlbmRpZgog
ICAgIHN0YXRpYyBHUmVmUHRyPEdEQnVzU2VydmVyPiBzX2RidXNTZXJ2ZXI7CiAgICAgc3RhdGlj
IFZlY3RvcjxHUmVmUHRyPEdEQnVzQ29ubmVjdGlvbj4+IHNfZGJ1c0Nvbm5lY3Rpb25zOwogICAg
IHN0YXRpYyBIYXNoTWFwPHVpbnQ2NF90LCBHREJ1c0Nvbm5lY3Rpb24qPiBzX2RidXNDb25uZWN0
aW9uUGFnZU1hcDsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ2xpYi9XZWJLaXRH
TGliL1dlYlZpZXdUZXN0LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ2xpYi9XZWJLaXRHTGli
L1dlYlZpZXdUZXN0LmNwcAppbmRleCBlZjIyMzc5YTFhNmQuLmFiN2RiYTU0ZGZhNyAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9nbGliL1dlYktpdEdMaWIvV2ViVmlld1Rlc3QuY3Bw
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ2xpYi9XZWJLaXRHTGliL1dlYlZpZXdUZXN0LmNw
cApAQCAtNTIsMTMgKzUyLDIxIEBAIHZvaWQgV2ViVmlld1Rlc3Q6OmluaXRpYWxpemVXZWJWaWV3
KCkKIHsKICAgICBnX2Fzc2VydF9udWxsKG1fd2ViVmlldyk7CiAKKyNpZiBFTkFCTEUoMjAyMl9H
TElCX0FQSSkKKyAgICBHUmVmUHRyPFdlYktpdE5ldHdvcmtTZXNzaW9uPiBuZXR3b3JrU2Vzc2lv
biA9IHNob3VsZENyZWF0ZUVwaGVtZXJhbFdlYlZpZXcgPyBhZG9wdEdSZWYod2Via2l0X25ldHdv
cmtfc2Vzc2lvbl9uZXdfZXBoZW1lcmFsKCkpIDogbV9uZXR3b3JrU2Vzc2lvbjsKKyNlbmRpZgor
CiAgICAgbV93ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQ
RV9XRUJfVklFVywKICNpZiBQTEFURk9STShXUEUpCiAgICAgICAgICJiYWNrZW5kIiwgVGVzdDo6
Y3JlYXRlV2ViVmlld0JhY2tlbmQoKSwKICNlbmRpZgogICAgICAgICAid2ViLWNvbnRleHQiLCBt
X3dlYkNvbnRleHQuZ2V0KCksCiAgICAgICAgICJ1c2VyLWNvbnRlbnQtbWFuYWdlciIsIG1fdXNl
ckNvbnRlbnRNYW5hZ2VyLmdldCgpLAorI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgICAg
ICAibmV0d29yay1zZXNzaW9uIiwgbmV0d29ya1Nlc3Npb24uZ2V0KCksCisjZWxzZQogICAgICAg
ICAiaXMtZXBoZW1lcmFsIiwgc2hvdWxkQ3JlYXRlRXBoZW1lcmFsV2ViVmlldywKKyNlbmRpZgog
ICAgICAgICBudWxscHRyKSk7CiAKICAgICBwbGF0Zm9ybUluaXRpYWxpemVXZWJWaWV3KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>464608</attachid>
            <date>2023-01-23 06:19:46 -0800</date>
            <delta_ts>2023-01-24 06:57:07 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>wk-network-session.diff</filename>
            <type>text/plain</type>
            <size>186555</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDNhODU2NmFmZWRjNC4uZjhkZmQ0MzBlMmU2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTE4Myw2ICsxODMsMTIgQEAgc2V0KFdlYktpdEdU
S19IRUFERVJfVEVNUExBVEVTCiAgICAgJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3QmFzZS5oLmluCiApCiAKK2lmIChFTkFCTEVfMjAyMl9HTElCX0FQSSkKKyAg
ICBsaXN0KEFQUEVORCBXZWJLaXRHVEtfSEVBREVSX1RFTVBMQVRFUworICAgICAgICAke1dFQktJ
VF9ESVJ9L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXROZXR3b3JrU2Vzc2lvbi5oLmluCisgICAg
KQorZW5kaWYgKCkKKwogc2V0KFdlYktpdEdUS19JTlNUQUxMRURfSEVBREVSUwogICAgICR7V2Vi
S2l0R1RLX0RFUklWRURfU09VUkNFU19ESVJ9L3dlYmtpdC9XZWJLaXRFbnVtVHlwZXMuaAogICAg
ICR7V2ViS2l0R1RLX0RFUklWRURfU09VUkNFU19ESVJ9L3dlYmtpdC9XZWJLaXRWZXJzaW9uLmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQgYi9Tb3VyY2UvV2ViS2l0
L1NvdXJjZXNHVEsudHh0CmluZGV4IDNjMmI5NzBjNDlmNS4uZTVmYmRjMTdiMWZhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291
cmNlc0dUSy50eHQKQEAgLTE1Nyw2ICsxNTcsNyBAQCBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0
TmF2aWdhdGlvbkFjdGlvbi5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0
TmF2aWdhdGlvbkNsaWVudC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0
TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ2xp
Yi9XZWJLaXROZXR3b3JrUHJveHlTZXR0aW5ncy5jcHAgQG5vLXVuaWZ5CitVSVByb2Nlc3MvQVBJ
L2dsaWIvV2ViS2l0TmV0d29ya1Nlc3Npb24uY3BwIEBuby11bmlmeQogVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdE5vdGlmaWNhdGlvbi5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIv
V2ViS2l0Tm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3QuY3BwIEBuby11bmlmeQogVUlQcm9j
ZXNzL0FQSS9nbGliL1dlYktpdE5vdGlmaWNhdGlvblByb3ZpZGVyLmNwcCBAbm8tdW5pZnkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL0ljb25EYXRhYmFzZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9JY29uRGF0YWJhc2UuY3BwCmlu
ZGV4IDRjYTdhYjIwMDg0Ni4uOTFlOWEyYzViNzFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvZ2xpYi9JY29uRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9nbGliL0ljb25EYXRhYmFzZS5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgSWNv
bkRhdGFiYXNlOjpJY29uRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBwYXRoLCBBbGxvd0RhdGFiYXNl
V3JpdGUgYWxsb3dEYXRhYmFzZVcKICAgICAvLyBXZSBpbml0aWFsaXplIHRoZSBkYXRhYmFzZSBz
eW5jaHJvbm91c2x5LCBpdCdzIGhvcGVmdWxseSBmYXN0IGVub3VnaCBiZWNhdXNlIGl0IG1ha2Vz
CiAgICAgLy8gdGhlIGltcGxlbWVudGF0aW9uIGEgbG90IHNpbXBsZXIuCiAgICAgbV93b3JrUXVl
dWUtPmRpc3BhdGNoU3luYyhbJl0gewotICAgICAgICBpZiAoYWxsb3dEYXRhYmFzZVdyaXRlID09
IEFsbG93RGF0YWJhc2VXcml0ZTo6Tm8gJiYgIUZpbGVTeXN0ZW06OmZpbGVFeGlzdHMocGF0aCkp
CisgICAgICAgIGlmIChhbGxvd0RhdGFiYXNlV3JpdGUgPT0gQWxsb3dEYXRhYmFzZVdyaXRlOjpO
byAmJiAoIXBhdGguaXNOdWxsKCkgfHwgIUZpbGVTeXN0ZW06OmZpbGVFeGlzdHMocGF0aCkpKQog
ICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGF1dG8gZGF0YWJhc2VEaXJlY3RvcnkgPSBG
aWxlU3lzdGVtOjpwYXJlbnRQYXRoKHBhdGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0QXV0b2NsZWFudXBzLmguaW4gYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRBdXRvY2xlYW51cHMuaC5pbgppbmRleCA0OTBiOWRl
NzA1ZWYuLmM4ODViMGRmODFmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2dsaWIvV2ViS2l0QXV0b2NsZWFudXBzLmguaW4KKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2dsaWIvV2ViS2l0QXV0b2NsZWFudXBzLmguaW4KQEAgLTQ1LDYgKzQ1LDkgQEAg
R19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdElucHV0TWV0aG9kQ29udGV4dCwg
Z19vYmplY3RfdW5yZWYpCiBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0SW5z
dGFsbE1pc3NpbmdNZWRpYVBsdWdpbnNQZXJtaXNzaW9uUmVxdWVzdCwgZ19vYmplY3RfdW5yZWYp
CiAjZW5kaWYKIEdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXROYXZpZ2F0aW9u
UG9saWN5RGVjaXNpb24sIGdfb2JqZWN0X3VucmVmKQorI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJ
KQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdE5ldHdvcmtTZXNzaW9uLCBn
X29iamVjdF91bnJlZikKKyNlbmRpZgogR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdl
YktpdE5vdGlmaWNhdGlvbiwgZ19vYmplY3RfdW5yZWYpCiBHX0RFRklORV9BVVRPUFRSX0NMRUFO
VVBfRlVOQyAoV2ViS2l0Tm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3QsIGdfb2JqZWN0X3Vu
cmVmKQogR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdFBlcm1pc3Npb25SZXF1
ZXN0LCBnX29iamVjdF91bnJlZikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdEF1dG9tYXRpb25TZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdEF1dG9tYXRpb25TZXNzaW9uLmNwcAppbmRleCA2YTc1Yjlk
ZDMxYzUuLjFjMDU0ZjQ1YjQ5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2dsaWIvV2ViS2l0QXV0b21hdGlvblNlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdEF1dG9tYXRpb25TZXNzaW9uLmNwcApAQCAtMzEsNiAr
MzEsMTAgQEAKICNpbmNsdWRlIDx3dGYvZ2xpYi9XVEZHVHlwZS5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KIAorI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorI2luY2x1ZGUgIldl
YktpdE5ldHdvcmtTZXNzaW9uLmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsK
IAogLyoqCkBAIC0zNTAsMTMgKzM1NCwyNyBAQCBXZWJLaXRBdXRvbWF0aW9uU2Vzc2lvbiogd2Vi
a2l0QXV0b21hdGlvblNlc3Npb25DcmVhdGUoV2ViS2l0V2ViQ29udGV4dCogd2ViQ29udAogewog
ICAgIGF1dG8qIHNlc3Npb24gPSBXRUJLSVRfQVVUT01BVElPTl9TRVNTSU9OKGdfb2JqZWN0X25l
dyhXRUJLSVRfVFlQRV9BVVRPTUFUSU9OX1NFU1NJT04sICJpZCIsIHNlc3Npb25JRCwgbnVsbHB0
cikpOwogICAgIHNlc3Npb24tPnByaXYtPndlYkNvbnRleHQgPSB3ZWJDb250ZXh0OwotICAgIGlm
IChjYXBhYmlsaXRpZXMuYWNjZXB0SW5zZWN1cmVDZXJ0aWZpY2F0ZXMpCisjaWYgRU5BQkxFKDIw
MjJfR0xJQl9BUEkpCisgICAgV2ViS2l0TmV0d29ya1Nlc3Npb24qIG5ldHdvcmtTZXNzaW9uID0g
d2Via2l0V2ViQ29udGV4dEdldE5ldHdvcmtTZXNzaW9uRm9yQXV0b21hdGlvbih3ZWJDb250ZXh0
KTsKKyNlbmRpZgorCisgICAgaWYgKGNhcGFiaWxpdGllcy5hY2NlcHRJbnNlY3VyZUNlcnRpZmlj
YXRlcykgeworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgICAgICB3ZWJraXRfbmV0d29y
a19zZXNzaW9uX3NldF90bHNfZXJyb3JzX3BvbGljeShuZXR3b3JrU2Vzc2lvbiwgV0VCS0lUX1RM
U19FUlJPUlNfUE9MSUNZX0lHTk9SRSk7CisjZWxzZQogICAgICAgICB3ZWJraXRfd2Vic2l0ZV9k
YXRhX21hbmFnZXJfc2V0X3Rsc19lcnJvcnNfcG9saWN5KHdlYmtpdF93ZWJfY29udGV4dF9nZXRf
d2Vic2l0ZV9kYXRhX21hbmFnZXIod2ViQ29udGV4dCksIFdFQktJVF9UTFNfRVJST1JTX1BPTElD
WV9JR05PUkUpOworI2VuZGlmCisgICAgfQogCiAgICAgZm9yIChhdXRvJiBjZXJ0aWZpY2F0ZSA6
IGNhcGFiaWxpdGllcy5jZXJ0aWZpY2F0ZXMpIHsKICAgICAgICAgR1JlZlB0cjxHVGxzQ2VydGlm
aWNhdGU+IHRsc0NlcnRpZmljYXRlID0gYWRvcHRHUmVmKGdfdGxzX2NlcnRpZmljYXRlX25ld19m
cm9tX2ZpbGUoY2VydGlmaWNhdGUuc2Vjb25kLnV0ZjgoKS5kYXRhKCksIG51bGxwdHIpKTsKLSAg
ICAgICAgaWYgKHRsc0NlcnRpZmljYXRlKQorICAgICAgICBpZiAodGxzQ2VydGlmaWNhdGUpIHsK
KyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICAgICAgICAgIHdlYmtpdF9uZXR3b3JrX3Nl
c3Npb25fYWxsb3dfdGxzX2NlcnRpZmljYXRlX2Zvcl9ob3N0KG5ldHdvcmtTZXNzaW9uLCB0bHND
ZXJ0aWZpY2F0ZS5nZXQoKSwgY2VydGlmaWNhdGUuZmlyc3QudXRmOCgpLmRhdGEoKSk7CisjZWxz
ZQogICAgICAgICAgICAgd2Via2l0X3dlYl9jb250ZXh0X2FsbG93X3Rsc19jZXJ0aWZpY2F0ZV9m
b3JfaG9zdCh3ZWJDb250ZXh0LCB0bHNDZXJ0aWZpY2F0ZS5nZXQoKSwgY2VydGlmaWNhdGUuZmly
c3QudXRmOCgpLmRhdGEoKSk7CisjZW5kaWYKKyAgICAgICAgfQogICAgIH0KICAgICBpZiAoY2Fw
YWJpbGl0aWVzLnByb3h5KSB7CiAgICAgICAgIGlmIChjYXBhYmlsaXRpZXMucHJveHktPnR5cGUg
PT0gInBhYyJfcykgewpAQCAtMzY1LDEzICszODMsMjEgQEAgV2ViS2l0QXV0b21hdGlvblNlc3Np
b24qIHdlYmtpdEF1dG9tYXRpb25TZXNzaW9uQ3JlYXRlKFdlYktpdFdlYkNvbnRleHQqIHdlYkNv
bnQKICAgICAgICAgICAgIGlmIChjYXBhYmlsaXRpZXMucHJveHktPmF1dG9jb25maWdVUkwpCiAg
ICAgICAgICAgICAgICAgc2V0dGluZ3MuZGVmYXVsdFByb3h5VVJMID0gY2FwYWJpbGl0aWVzLnBy
b3h5LT5hdXRvY29uZmlnVVJMLT51dGY4KCk7CiAgICAgICAgICAgICBpZiAoIXNldHRpbmdzLmlz
RW1wdHkoKSkgeworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgICAgICAgICAgICAgIGF1
dG8mIGRhdGFTdG9yZSA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZSh3ZWJr
aXRfbmV0d29ya19zZXNzaW9uX2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcihuZXR3b3JrU2Vzc2lv
bikpOworI2Vsc2UKICAgICAgICAgICAgICAgICBhdXRvJiBkYXRhU3RvcmUgPSB3ZWJraXRXZWJz
aXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUod2Via2l0X3dlYl9jb250ZXh0X2dldF93ZWJzaXRl
X2RhdGFfbWFuYWdlcih3ZWJDb250ZXh0KSk7CisjZW5kaWYKICAgICAgICAgICAgICAgICBkYXRh
U3RvcmUuc2V0TmV0d29ya1Byb3h5U2V0dGluZ3MoV1RGTW92ZShzZXR0aW5ncykpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgV2ViS2l0TmV0d29ya1Byb3h5
U2V0dGluZ3MqIHByb3h5U2V0dGluZ3MgPSBudWxscHRyOwogICAgICAgICAgICAgYXV0byBwcm94
eU1vZGUgPSBwYXJzZVByb3h5Q2FwYWJpbGl0aWVzKCpjYXBhYmlsaXRpZXMucHJveHksICZwcm94
eVNldHRpbmdzKTsKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICAgICAgICAgIHdlYmtp
dF9uZXR3b3JrX3Nlc3Npb25fc2V0X3Byb3h5X3NldHRpbmdzKG5ldHdvcmtTZXNzaW9uLCBwcm94
eU1vZGUsIHByb3h5U2V0dGluZ3MpOworI2Vsc2UKICAgICAgICAgICAgIHdlYmtpdF93ZWJzaXRl
X2RhdGFfbWFuYWdlcl9zZXRfbmV0d29ya19wcm94eV9zZXR0aW5ncyh3ZWJraXRfd2ViX2NvbnRl
eHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYkNvbnRleHQpLCBwcm94eU1vZGUsIHByb3h5
U2V0dGluZ3MpOworI2VuZGlmCiAgICAgICAgICAgICBpZiAocHJveHlTZXR0aW5ncykKICAgICAg
ICAgICAgICAgICB3ZWJraXRfbmV0d29ya19wcm94eV9zZXR0aW5nc19mcmVlKHByb3h5U2V0dGlu
Z3MpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Z2xpYi9XZWJLaXROYXZpZ2F0aW9uQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9nbGliL1dlYktpdE5hdmlnYXRpb25DbGllbnQuY3BwCmluZGV4IDQ1ZDRmNDY1NGM2MS4u
MWM0NmI5Yjk4MmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xp
Yi9XZWJLaXROYXZpZ2F0aW9uQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvZ2xpYi9XZWJLaXROYXZpZ2F0aW9uQ2xpZW50LmNwcApAQCAtMzQsNiArMzQsMTAgQEAK
ICNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgogCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisjaW5jbHVkZSAiV2ViS2l0TmV0
d29ya1Nlc3Npb25Qcml2YXRlLmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0xNTgsMTkgKzE2MiwzMSBAQCBwcml2YXRl
OgogICAgIHZvaWQgbmF2aWdhdGlvbkFjdGlvbkRpZEJlY29tZURvd25sb2FkKFdlYlBhZ2VQcm94
eSYsIEFQSTo6TmF2aWdhdGlvbkFjdGlvbiYsIERvd25sb2FkUHJveHkmIGRvd25sb2FkUHJveHkp
IG92ZXJyaWRlCiAgICAgewogICAgICAgICBhdXRvIGRvd25sb2FkID0gd2Via2l0RG93bmxvYWRD
cmVhdGUoZG93bmxvYWRQcm94eSwgbV93ZWJWaWV3KTsKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQ
SSkKKyAgICAgICAgd2Via2l0TmV0d29ya1Nlc3Npb25Eb3dubG9hZFN0YXJ0ZWQod2Via2l0X3dl
Yl92aWV3X2dldF9uZXR3b3JrX3Nlc3Npb24obV93ZWJWaWV3KSwgZG93bmxvYWQuZ2V0KCkpOwor
I2Vsc2UKICAgICAgICAgd2Via2l0V2ViQ29udGV4dERvd25sb2FkU3RhcnRlZCh3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2NvbnRleHQobV93ZWJWaWV3KSwgZG93bmxvYWQuZ2V0KCkpOworI2VuZGlmCiAg
ICAgfQogCiAgICAgdm9pZCBuYXZpZ2F0aW9uUmVzcG9uc2VEaWRCZWNvbWVEb3dubG9hZChXZWJQ
YWdlUHJveHkmLCBBUEk6Ok5hdmlnYXRpb25SZXNwb25zZSYsIERvd25sb2FkUHJveHkmIGRvd25s
b2FkUHJveHkpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBhdXRvIGRvd25sb2FkID0gd2Via2l0
RG93bmxvYWRDcmVhdGUoZG93bmxvYWRQcm94eSwgbV93ZWJWaWV3KTsKKyNpZiBFTkFCTEUoMjAy
Ml9HTElCX0FQSSkKKyAgICAgICAgd2Via2l0TmV0d29ya1Nlc3Npb25Eb3dubG9hZFN0YXJ0ZWQo
d2Via2l0X3dlYl92aWV3X2dldF9uZXR3b3JrX3Nlc3Npb24obV93ZWJWaWV3KSwgZG93bmxvYWQu
Z2V0KCkpOworI2Vsc2UKICAgICAgICAgd2Via2l0V2ViQ29udGV4dERvd25sb2FkU3RhcnRlZCh3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQobV93ZWJWaWV3KSwgZG93bmxvYWQuZ2V0KCkpOwor
I2VuZGlmCiAgICAgfQogCiAgICAgdm9pZCBjb250ZXh0TWVudURpZENyZWF0ZURvd25sb2FkKFdl
YlBhZ2VQcm94eSYsIERvd25sb2FkUHJveHkmIGRvd25sb2FkUHJveHkpIG92ZXJyaWRlCiAgICAg
ewogICAgICAgICBhdXRvIGRvd25sb2FkID0gd2Via2l0RG93bmxvYWRDcmVhdGUoZG93bmxvYWRQ
cm94eSwgbV93ZWJWaWV3KTsKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICAgICAgd2Vi
a2l0TmV0d29ya1Nlc3Npb25Eb3dubG9hZFN0YXJ0ZWQod2Via2l0X3dlYl92aWV3X2dldF9uZXR3
b3JrX3Nlc3Npb24obV93ZWJWaWV3KSwgZG93bmxvYWQuZ2V0KCkpOworI2Vsc2UKICAgICAgICAg
d2Via2l0V2ViQ29udGV4dERvd25sb2FkU3RhcnRlZCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRl
eHQobV93ZWJWaWV3KSwgZG93bmxvYWQuZ2V0KCkpOworI2VuZGlmCiAgICAgfQogCiAgICAgV2Vi
S2l0V2ViVmlldyogbV93ZWJWaWV3OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL2dsaWIvV2ViS2l0TmV0d29ya1Nlc3Npb24uY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2dsaWIvV2ViS2l0TmV0d29ya1Nlc3Npb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNjJlNGYxNTUyZDZjCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0TmV0d29ya1Nlc3Npb24uY3Bw
CkBAIC0wLDAgKzEsNjUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIzIElnYWxpYSBTLkwu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXZWJLaXROZXR3b3JrU2Vzc2lvbi5oIgorCisjaW5jbHVkZSAiQVBJRG93bmxvYWRDbGll
bnQuaCIKKyNpbmNsdWRlICJGcmFtZUluZm9EYXRhLmgiCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nl
c3NNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViS2l0RG93bmxvYWRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0SW5pdGlh
bGl6ZS5oIgorI2luY2x1ZGUgIldlYktpdE1lbW9yeVByZXNzdXJlU2V0dGluZ3MuaCIKKyNpbmNs
dWRlICJXZWJLaXRNZW1vcnlQcmVzc3VyZVNldHRpbmdzUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldl
YktpdE5ldHdvcmtQcm94eVNldHRpbmdzUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdFByaXZh
dGUuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJQcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKKyNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgorI2lu
Y2x1ZGUgPHBhbC9IeXN0ZXJlc2lzQWN0aXZpdHkuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgorI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5p
cXVlUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvV1RGR1R5cGUuaD4KKwordXNpbmcgbmFtZXNw
YWNlIFdlYktpdDsKKworLyoqCisgKiBXZWJLaXROZXR3b3JrU2Vzc2lvbjoKKyAqIEBzZWVfYWxz
bzogI1dlYktpdFdlYkNvbnRleHQsICNXZWJLaXRXZWJzaXRlRGF0YQorICoKKyAqIE1hbmFnZXMg
bmV0d29yayBjb25maWd1cmF0aW9uLgorICoKKyAqCisgKiBTaW5jZTogMi40MAorICovCisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK2VudW0geworICAgIFBST1BfMCwKKworICAgIFBST1Bf
REFUQV9ESVJFQ1RPUlksCisgICAgUFJPUF9DQUNIRV9ESVJFQ1RPUlksCisgICAgUFJPUF9JU19F
UEhFTUVSQUwsCisKKyAgICBOX1BST1BFUlRJRVMKK307CisKK3N0YXRpYyBHUGFyYW1TcGVjKiBz
T2JqUHJvcGVydGllc1tOX1BST1BFUlRJRVNdID0geyBudWxscHRyLCB9OworCitlbnVtIHsKKyAg
ICBET1dOTE9BRF9TVEFSVEVELAorCisgICAgTEFTVF9TSUdOQUwKK307CisKK3N0YXRpYyBndWlu
dCBzaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCwgfTsKKworc3RydWN0IF9XZWJLaXROZXR3b3Jr
U2Vzc2lvblByaXZhdGUgeworICAgIF9XZWJLaXROZXR3b3JrU2Vzc2lvblByaXZhdGUoKQorICAg
ICAgICA6IGRuc1ByZWZldGNoSHlzdGVyZXJpcyhbdGhpc10oUEFMOjpIeXN0ZXJlc2lzU3RhdGUg
c3RhdGUpIHsgaWYgKHN0YXRlID09IFBBTDo6SHlzdGVyZXNpc1N0YXRlOjpTdG9wcGVkKSBkbnNQ
cmVmZXRjaGVkSG9zdHMuY2xlYXIoKTsgfSkKKyAgICB7CisgICAgfQorCisgICAgR1JlZlB0cjxX
ZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXI+IHdlYnNpdGVEYXRhTWFuYWdlcjsKKyAgICBHUmVmUHRy
PFdlYktpdENvb2tpZU1hbmFnZXI+IGNvb2tpZU1hbmFnZXI7CisgICAgV2ViS2l0VExTRXJyb3Jz
UG9saWN5IHRsc0Vycm9yc1BvbGljeTsKKworICAgIEdVbmlxdWVQdHI8Y2hhcj4gZGF0YURpcmVj
dG9yeTsKKyAgICBHVW5pcXVlUHRyPGNoYXI+IGNhY2hlRGlyZWN0b3J5OworCisgICAgSGFzaFNl
dDxTdHJpbmc+IGRuc1ByZWZldGNoZWRIb3N0czsKKyAgICBQQUw6Okh5c3RlcmVzaXNBY3Rpdml0
eSBkbnNQcmVmZXRjaEh5c3RlcmVyaXM7Cit9OworCitXRUJLSVRfREVGSU5FX1RZUEUoV2ViS2l0
TmV0d29ya1Nlc3Npb24sIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb24sIEdfVFlQRV9PQkpFQ1QpCisK
K3N0YXRpYyB2b2lkIHdlYmtpdE5ldHdvcmtTZXNzaW9uR2V0UHJvcGVydHkoR09iamVjdCogb2Jq
ZWN0LCBndWludCBwcm9wSUQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBhcmFtU3BlYykK
K3sKKyAgICBXZWJLaXROZXR3b3JrU2Vzc2lvbiogc2Vzc2lvbiA9IFdFQktJVF9ORVRXT1JLX1NF
U1NJT04ob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcElEKSB7CisgICAgY2FzZSBQUk9QX0lT
X0VQSEVNRVJBTDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X25l
dHdvcmtfc2Vzc2lvbl9pc19lcGhlbWVyYWwoc2Vzc2lvbikpOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2Jq
ZWN0LCBwcm9wSUQsIHBhcmFtU3BlYyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRO
ZXR3b3JrU2Vzc2lvblNldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElELCBj
b25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwYXJhbVNwZWMpCit7CisgICAgV2ViS2l0
TmV0d29ya1Nlc3Npb24qIHNlc3Npb24gPSBXRUJLSVRfTkVUV09SS19TRVNTSU9OKG9iamVjdCk7
CisKKyAgICBzd2l0Y2ggKHByb3BJRCkgeworICAgIGNhc2UgUFJPUF9EQVRBX0RJUkVDVE9SWToK
KyAgICAgICAgc2Vzc2lvbi0+cHJpdi0+ZGF0YURpcmVjdG9yeS5yZXNldChnX3ZhbHVlX2R1cF9z
dHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0NBQ0hFX0RJUkVD
VE9SWToKKyAgICAgICAgc2Vzc2lvbi0+cHJpdi0+Y2FjaGVEaXJlY3RvcnkucmVzZXQoZ192YWx1
ZV9kdXBfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9JU19F
UEhFTUVSQUw6CisgICAgICAgIGlmIChnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSkKKyAgICAg
ICAgICAgIHNlc3Npb24tPnByaXYtPndlYnNpdGVEYXRhTWFuYWdlciA9IGFkb3B0R1JlZihXRUJL
SVRfV0VCU0lURV9EQVRBX01BTkFHRVIoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQlNJVEVf
REFUQV9NQU5BR0VSLCAiaXMtZXBoZW1lcmFsIiwgVFJVRSwgbnVsbHB0cikpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BF
UlRZX0lEKG9iamVjdCwgcHJvcElELCBwYXJhbVNwZWMpOworICAgIH0KK30KKworc3RhdGljIHZv
aWQgd2Via2l0TmV0d29ya1Nlc3Npb25Db25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCit7Cisg
ICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X25ldHdvcmtfc2Vzc2lvbl9wYXJlbnRfY2xhc3MpLT5j
b25zdHJ1Y3RlZChvYmplY3QpOworCisgICAgV2ViS2l0TmV0d29ya1Nlc3Npb25Qcml2YXRlKiBw
cml2ID0gV0VCS0lUX05FVFdPUktfU0VTU0lPTihvYmplY3QpLT5wcml2OworICAgIGlmICghcHJp
di0+d2Vic2l0ZURhdGFNYW5hZ2VyKQorICAgICAgICBwcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIg
PSBhZG9wdEdSZWYod2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyQ3JlYXRlKFdURk1vdmUocHJpdi0+
ZGF0YURpcmVjdG9yeSksIFdURk1vdmUocHJpdi0+Y2FjaGVEaXJlY3RvcnkpKSk7CisKKyAgICBw
cml2LT50bHNFcnJvcnNQb2xpY3kgPSBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfRkFJTDsKKyAg
ICB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUocHJpdi0+d2Vic2l0ZURhdGFN
YW5hZ2VyLmdldCgpKS5zZXRJZ25vcmVUTFNFcnJvcnMoZmFsc2UpOworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2NsYXNzX2luaXQoV2ViS2l0TmV0d29ya1Nlc3Npb25D
bGFzcyogc2Vzc2lvbkNsYXNzKQoreworICAgIHdlYmtpdEluaXRpYWxpemUoKTsKKworICAgIEdP
YmplY3RDbGFzcyogZ09iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Moc2Vzc2lvbkNsYXNzKTsK
KyAgICBnT2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdE5ldHdvcmtTZXNzaW9uR2V0
UHJvcGVydHk7CisgICAgZ09iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXROZXR3b3Jr
U2Vzc2lvblNldFByb3BlcnR5OworICAgIGdPYmplY3RDbGFzcy0+Y29uc3RydWN0ZWQgPSB3ZWJr
aXROZXR3b3JrU2Vzc2lvbkNvbnN0cnVjdGVkOworCisgICAgLyoqCisgICAgICogV2ViS2l0TmV0
d29ya1Nlc3Npb246ZGF0YS1kaXJlY3Rvcnk6CisgICAgICoKKyAgICAgKiBUaGUgYmFzZSBkYXRh
IGRpcmVjdG9yeSB1c2VkIHRvIGNyZWF0ZSB0aGUgI1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci4g
SWYgJU5VTEwsIGEgZGVmYXVsdCBsb2NhdGlvbiB3aWxsIGJlIHVzZWQuCisgICAgICoKKyAgICAg
KiBTaW5jZTogMi40MAorICAgICAqLworICAgIHNPYmpQcm9wZXJ0aWVzW1BST1BfREFUQV9ESVJF
Q1RPUlldID0KKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJkYXRh
LWRpcmVjdG9yeSIsCisgICAgICAgICAgICBudWxscHRyLCBudWxscHRyLAorICAgICAgICAgICAg
bnVsbHB0ciwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihXRUJLSVRfUEFS
QU1fV1JJVEFCTEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSk7CisKKyAgICAvKioKKyAgICAg
KiBXZWJLaXROZXR3b3JrU2Vzc2lvbjpjYWNoZS1kaXJlY3Rvcnk6CisgICAgICoKKyAgICAgKiBU
aGUgYmFzZSBjYWNoZXMgZGlyZWN0b3J5IHVzZWQgdG8gY3JlYXRlIHRoZSAjV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyLiBJZiAlTlVMTCwgYSBkZWZhdWx0IGxvY2F0aW9uIHdpbGwgYmUgdXNlZC4K
KyAgICAgKgorICAgICAqIFNpbmNlOiAyLjQwCisgICAgICovCisgICAgc09ialByb3BlcnRpZXNb
UFJPUF9DQUNIRV9ESVJFQ1RPUlldID0KKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAg
ICAgICAgICAgICJjYWNoZS1kaXJlY3RvcnkiLAorICAgICAgICAgICAgbnVsbHB0ciwgbnVsbHB0
ciwKKyAgICAgICAgICAgIG51bGxwdHIsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxHUGFyYW1G
bGFncz4oV0VCS0lUX1BBUkFNX1dSSVRBQkxFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpOwor
CisgICAgLyoqCisgICAgICogV2ViS2l0TmV0d29ya1Nlc3Npb246aXMtZXBoZW1lcmFsOgorICAg
ICAqCisgICAgICogV2hldGhlciB0byBjcmVhdGUgYW4gZXBoZXJtZXJhbCAjV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyIGZvciB0aGUgc2Vzc2lvbi4KKyAgICAgKgorICAgICAqIFNpbmNlOiAyLjQw
CisgICAgICovCisgICAgc09ialByb3BlcnRpZXNbUFJPUF9JU19FUEhFTUVSQUxdID0KKyAgICAg
ICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAiaXMtZXBoZW1lcmFsIiwKKyAg
ICAgICAgICAgIG51bGxwdHIsIG51bGxwdHIsCisgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAg
ICAgIHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihXRUJLSVRfUEFSQU1fUkVBRFdSSVRFIHwgR19Q
QVJBTV9DT05TVFJVQ1RfT05MWSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0aWVzKGdPYmplY3RDbGFzcywgTl9QUk9QRVJUSUVTLCBzT2JqUHJvcGVydGllcyk7CisKKyAg
ICAvKioKKyAgICAgKiBXZWJLaXROZXR3b3JrU2Vzc2lvbjo6ZG93bmxvYWQtc3RhcnRlZDoKKyAg
ICAgKiBAc2Vzc2lvbjogdGhlICNXZWJLaXROZXR3b3JrU2Vzc2lvbgorICAgICAqIEBkb3dubG9h
ZDogdGhlICNXZWJLaXREb3dubG9hZCBhc3NvY2lhdGVkIHdpdGggdGhpcyBldmVudAorICAgICAq
CisgICAgICogVGhpcyBzaWduYWwgaXMgZW1pdHRlZCB3aGVuIGEgbmV3IGRvd25sb2FkIHJlcXVl
c3QgaXMgbWFkZS4KKyAgICAgKgorICAgICAqIFNpbmNlOiAyLjQwCisgICAgICovCisgICAgc2ln
bmFsc1tET1dOTE9BRF9TVEFSVEVEXSA9CisgICAgICAgIGdfc2lnbmFsX25ldygiZG93bmxvYWQt
c3RhcnRlZCIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhnT2JqZWN0Q2xhc3MpLAor
ICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAwLCBudWxscHRyLCBu
dWxscHRyLAorICAgICAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAx
LAorICAgICAgICAgICAgV0VCS0lUX1RZUEVfRE9XTkxPQUQpOworfQorCit2b2lkIHdlYmtpdE5l
dHdvcmtTZXNzaW9uRG93bmxvYWRTdGFydGVkKFdlYktpdE5ldHdvcmtTZXNzaW9uKiBzZXNzaW9u
LCBXZWJLaXREb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgZ19zaWduYWxfZW1pdChzZXNzaW9u
LCBzaWduYWxzW0RPV05MT0FEX1NUQVJURURdLCAwLCBkb3dubG9hZCk7Cit9CisKK3N0YXRpYyBn
cG9pbnRlciBjcmVhdGVEZWZhdWx0TmV0d29ya1Nlc3Npb24oZ3BvaW50ZXIpCit7CisgICAgc3Rh
dGljIEdSZWZQdHI8V2ViS2l0TmV0d29ya1Nlc3Npb24+IHNlc3Npb24gPSBhZG9wdEdSZWYod2Vi
a2l0X25ldHdvcmtfc2Vzc2lvbl9uZXcobnVsbHB0ciwgbnVsbHB0cikpOworICAgIHJldHVybiBz
ZXNzaW9uLmdldCgpOworfQorCisvKioKKyAqIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X2Rl
ZmF1bHQ6CisgKgorICogR2V0IHRoZSBkZWZhdWx0IG5ldHdvcmsgc2Vzc2lvbi4KKyAqIFRoZSBk
ZWZhdWx0IG5ldHdvcmsgc2Vzc2lvbiBpcyBjcmVhdGVkIHVzaW5nIHdlYmtpdF9uZXR3b3JrX3Nl
c3Npb25fbmV3KCkgYW5kIHBhc3NpbmcKKyAqICVOVUxMIGFzIGRhdGEgYW5kIGNhY2hlIGRpcmVj
dG9yaWVzLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogYSAjV2ViS2l0TmV0d29y
a1Nlc3Npb24KKyAqCisgKiBTaW5jZTogMi40MAorICovCitXZWJLaXROZXR3b3JrU2Vzc2lvbiog
d2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfZGVmYXVsdCgpCit7CisgICAgc3RhdGljIEdPbmNl
IG9uY2VJbml0ID0gR19PTkNFX0lOSVQ7CisgICAgcmV0dXJuIFdFQktJVF9ORVRXT1JLX1NFU1NJ
T04oZ19vbmNlKCZvbmNlSW5pdCwgY3JlYXRlRGVmYXVsdE5ldHdvcmtTZXNzaW9uLCBudWxscHRy
KSk7Cit9CisKKy8qKgorICogd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9uZXc6CisgKiBAZGF0YV9k
aXJlY3Rvcnk6IChudWxsYWJsZSk6IGEgYmFzZSBkaXJlY3RvcnkgZm9yIGRhdGEsIG9yICVOVUxM
CisgKiBAY2FjaGVfZGlyZWN0cm9yeTogKG51bGxhYmxlKTogYSBiYXNlIGRpcmVmY3RvcnkgZm9y
IGNhY2hlcywgb3IgJU5VTEwKKyAqCisgKiBDcmVhdGVzIGEgbmV3ICNXZWJLaXROZXR3b3JrU2Vz
c2lvbiB3aXRoIGEgcGVyc2lzdGVudCAjV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLgorICoKKyAq
IEl0IG11c3QgYmUgcGFzc2VkIGFzIGNvbnN0cnVjdGlvbiBwYXJhbWV0ZXIgb2YgYSAjV2ViS2l0
V2ViVmlldy4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRoZSBuZXdseSBjcmVh
dGVkICNXZWJLaXROZXR3b3JrU2Vzc2lvbgorICoKKyAqIFNpbmNlOiAyLjQwCisgKi8KK1dlYktp
dE5ldHdvcmtTZXNzaW9uKiB3ZWJraXRfbmV0d29ya19zZXNzaW9uX25ldyhjb25zdCBjaGFyKiBk
YXRhRGlyZWN0b3J5LCBjb25zdCBjaGFyKiBjYWNoZURpcmVjdG9yeSkKK3sKKyAgICByZXR1cm4g
V0VCS0lUX05FVFdPUktfU0VTU0lPTihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfTkVUV09SS19T
RVNTSU9OLCAiZGF0YS1kaXJlY3RvcnkiLCBkYXRhRGlyZWN0b3J5LCAiY2FjaGUtZGlyZWN0b3J5
IiwgY2FjaGVEaXJlY3RvcnksIG51bGxwdHIpKTsKK30KKworLyoqCisgKiB3ZWJraXRfbmV0d29y
a19zZXNzaW9uX25ld19lcGhlbWVyYWw6CisgKgorICogQ3JlYXRlcyBhIG5ldyAjV2ViS2l0TmV0
d29ya1Nlc3Npb24gd2l0aCBhbiBlcGhlbWVyYWwgI1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci4K
KyAqCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBhIG5ldyBlcGhlbWVyYWwgI1dl
YktpdE5ldHdvcmtTZXNzaW9uLgorICoKKyAqIFNpbmNlOiAyLjQwCisgKi8KK1dlYktpdE5ldHdv
cmtTZXNzaW9uKiB3ZWJraXRfbmV0d29ya19zZXNzaW9uX25ld19lcGhlbWVyYWwoKQoreworICAg
IHJldHVybiBXRUJLSVRfTkVUV09SS19TRVNTSU9OKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9O
RVRXT1JLX1NFU1NJT04sICJpcy1lcGhlbWVyYWwiLCBUUlVFLCBudWxscHRyKSk7Cit9CisKKy8q
KgorICogd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9pc19lcGhlbWVyYWw6CisgKiBAc2Vzc2lvbjog
YSAjV2ViS2l0TmV0d29ya1Nlc3Npb24KKyAqCisgKiBHZXQgd2hldGhlciBAc2Vzc2lvbiBpcyBl
cGhlbWVyYWwuCisgKiBBICNXZWJLaXROZXR3b3JrU2Vzc2lvbiBpcyBlcGhlbWVyYWwgd2hlbiBp
dHMgI1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlciBpcyBlcGhlbWVyYWwuCisgKiBTZWUgI1dlYktp
dFdlYnNpdGVEYXRhTWFuYWdlcjppcy1lcGhlbWVyYWwgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBSZXR1cm5zOiAlVFJVRSBpZiBAc2Vzc2lvbiBpcyBwZWhtZXJhbCwgb3IgJUZBTFNFIG90aGVy
d2lzZQorICoKKyAqIFNpbmNlOiAyLjQwCisgKi8KK2dib29sZWFuIHdlYmtpdF9uZXR3b3JrX3Nl
c3Npb25faXNfZXBoZW1lcmFsKFdlYktpdE5ldHdvcmtTZXNzaW9uKiBzZXNzaW9uKQoreworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19ORVRXT1JLX1NFU1NJT04oc2Vzc2lvbiks
IEZBTFNFKTsKKworICAgIHJldHVybiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfaXNfZXBo
ZW1lcmFsKHNlc3Npb24tPnByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSk7Cit9CisKKy8q
KgorICogd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXI6Cisg
KiBAc2Vzc2lvbjogYSAjV2ViS2l0TmV0d29ya1Nlc3Npb24KKyAqCisgKiBHZXQgdGhlICNXZWJL
aXRXZWJzaXRlRGF0YU1hbmFnZXIgb2YgQHNlc3Npb24uCisgKgorICogUmV0dXJuczogKHRyYW5z
ZmVyIG5vbmUpOiBhICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIKKyAqCisgKiBTaW5jZTogMi40
MAorICovCitXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25f
Z2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKFdlYktpdE5ldHdvcmtTZXNzaW9uKiBzZXNzaW9uKQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19ORVRXT1JLX1NFU1NJT04oc2Vz
c2lvbiksIG51bGxwdHIpOworCisgICAgcmV0dXJuIHNlc3Npb24tPnByaXYtPndlYnNpdGVEYXRh
TWFuYWdlci5nZXQoKTsKK30KKworLyoqCisgKiB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF9j
b29raWVfbWFuYWdlcjoKKyAqIEBzZXNzaW9uOiBhICNXZWJLaXROZXR3b3JrU2Vzc2lvbgorICoK
KyAqIEdldCB0aGUgI1dlYktpdENvb2tpZU1hbmFnZXIgb2YgQHNlc3Npb24uCisgKgorICogUmV0
dXJuczogKHRyYW5zZmVyIG5vbmUpOiBhICNXZWJLaXRDb29raWVNYW5hZ2VyCisgKgorICogU2lu
Y2U6IDIuNDAKKyAqLworV2ViS2l0Q29va2llTWFuYWdlciogd2Via2l0X25ldHdvcmtfc2Vzc2lv
bl9nZXRfY29va2llX21hbmFnZXIoV2ViS2l0TmV0d29ya1Nlc3Npb24qIHNlc3Npb24pCit7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX05FVFdPUktfU0VTU0lPTihzZXNzaW9u
KSwgbnVsbHB0cik7CisKKyAgICBpZiAoIXNlc3Npb24tPnByaXYtPmNvb2tpZU1hbmFnZXIpCisg
ICAgICAgIHNlc3Npb24tPnByaXYtPmNvb2tpZU1hbmFnZXIgPSBhZG9wdEdSZWYod2Via2l0Q29v
a2llTWFuYWdlckNyZWF0ZShzZXNzaW9uLT5wcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkp
KTsKKworICAgIHJldHVybiBzZXNzaW9uLT5wcml2LT5jb29raWVNYW5hZ2VyLmdldCgpOworfQor
CisvKioKKyAqIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fc2V0X2l0cF9lbmFibGVkOgorICogQHNl
c3Npb246IGEgI1dlYktpdE5ldHdvcmtTZXNzaW9uCisgKiBAZW5hYmxlZDogdmFsdWUgdG8gc2V0
CisgKgorICogRW5hYmxlIG9yIGRpc2FibGUgSW50ZWxsaWdlbnQgVHJhY2tpbmcgUHJldmVudGlv
biAoSVRQKS4KKyAqCisgKiBXaGVuIElUUCBpcyBlbmFibGVkIHJlc291cmNlIGxvYWQgc3RhdGlz
dGljcworICogYXJlIGNvbGxlY3RlZCBhbmQgdXNlZCB0byBkZWNpZGUgd2hldGhlciB0byBhbGxv
dyBvciBibG9jayB0aGlyZC1wYXJ0eSBjb29raWVzIGFuZCBwcmV2ZW50IHVzZXIgdHJhY2tpbmcu
CisgKiBOb3RlIHRoYXQgd2hpbGUgSVRQIGlzIGVuYWJsZWQgdGhlIGFjY2VwdCBwb2xpY3kgJVdF
QktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9OT19USElSRF9QQVJUWSBpcyBpZ25vcmVkIGFuZAor
ICogJVdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9BTFdBWVMgaXMgdXNlZCBpbnN0ZWFkLiBT
ZWUgYWxzbyB3ZWJraXRfY29va2llX3Nlc3Npb25fc2V0X2FjY2VwdF9wb2xpY3koKS4KKyAqCisg
KiBTaW5jZTogMi40MAorICovCit2b2lkIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fc2V0X2l0cF9l
bmFibGVkKFdlYktpdE5ldHdvcmtTZXNzaW9uKiBzZXNzaW9uLCBnYm9vbGVhbiBlbmFibGVkKQor
eworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX05FVFdPUktfU0VTU0lPTihzZXNzaW9u
KSk7CisKKyAgICBhdXRvJiB3ZWJzaXRlRGF0YVN0b3JlID0gd2Via2l0V2Vic2l0ZURhdGFNYW5h
Z2VyR2V0RGF0YVN0b3JlKHNlc3Npb24tPnByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSk7
CisgICAgd2Vic2l0ZURhdGFTdG9yZS5zZXRUcmFja2luZ1ByZXZlbnRpb25FbmFibGVkKGVuYWJs
ZWQpOworfQorCisvKioKKyAqIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X2l0cF9lbmFibGVk
OgorICogQHNlc3Npb246IGEgI1dlYktpdE5ldHdvcmtTZXNzaW9uCisgKgorICogR2V0IHdoZXRo
ZXIgSW50ZWxsaWdlbnQgVHJhY2tpbmcgUHJldmVudGlvbiAoSVRQKSBpcyBlbmFibGVkIG9yIG5v
dC4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiBJVFAgaXMgZW5hYmxlZCwgb3IgJUZBTFNFIG90
aGVyd2lzZS4KKyAqCisgKiBTaW5jZTogMi40MAorICovCitnYm9vbGVhbiB3ZWJraXRfbmV0d29y
a19zZXNzaW9uX2dldF9pdHBfZW5hYmxlZChXZWJLaXROZXR3b3JrU2Vzc2lvbiogc2Vzc2lvbikK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfTkVUV09SS19TRVNTSU9OKHNl
c3Npb24pLCBGQUxTRSk7CisKKyAgICBhdXRvJiB3ZWJzaXRlRGF0YVN0b3JlID0gd2Via2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKHNlc3Npb24tPnByaXYtPndlYnNpdGVEYXRhTWFu
YWdlci5nZXQoKSk7CisgICAgcmV0dXJuIHdlYnNpdGVEYXRhU3RvcmUudHJhY2tpbmdQcmV2ZW50
aW9uRW5hYmxlZCgpOworfQorCisvKioKKyAqIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fc2V0X3Bl
cnNpc3RlbnRfY3JlZGVudGlhbF9zdG9yYWdlX2VuYWJsZWQ6CisgKiBAc2Vzc2lvbjogYSAjV2Vi
S2l0TmV0d29ya1Nlc3Npb24KKyAqIEBlbmFibGVkOiB2YWx1ZSB0byBzZXQKKyAqCisgKiBFbmFi
bGUgb3IgZGlzYWJsZSBwZXJzaXN0ZW50IGNyZWRlbnRpYWwgc3RvcmFnZS4KKyAqCisgKiBXaGVu
IGVuYWJsZWQsIHdoaWNoIGlzIHRoZSBkZWZhdWx0IGZvcgorICogbm9uLWVwaGVtZXJhbCBzZXNz
aW9ucywgdGhlIG5ldHdvcmsgcHJvY2VzcyB3aWxsIHRyeSB0byByZWFkIGFuZCB3cml0ZSBIVFRQ
IGF1dGhlbnRpYWNhdGlvbgorICogY3JlZGVudGlhbHMgZnJvbSBwZXJzaXN0ZW50IHN0b3JhZ2Uu
CisgKgorICogU2luY2U6IDIuNDAKKyAqLwordm9pZCB3ZWJraXRfbmV0d29ya19zZXNzaW9uX3Nl
dF9wZXJzaXN0ZW50X2NyZWRlbnRpYWxfc3RvcmFnZV9lbmFibGVkKFdlYktpdE5ldHdvcmtTZXNz
aW9uKiBzZXNzaW9uLCBnYm9vbGVhbiBlbmFibGVkKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0lTX05FVFdPUktfU0VTU0lPTihzZXNzaW9uKSk7CisKKyAgICBhdXRvJiB3ZWJzaXRl
RGF0YVN0b3JlID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKHNlc3Npb24t
PnByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZS5z
ZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKGVuYWJsZWQpOworfQorCisvKioK
KyAqIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X3BlcnNpc3RlbnRfY3JlZGVudGlhbF9zdG9y
YWdlX2VuYWJsZWQ6CisgKiBAc2Vzc2lvbjogYSAjV2ViS2l0TmV0d29ya1Nlc3Npb24KKyAqCisg
KiBHZXQgd2hldGhlciBwZXJzaXN0ZW50IGNyZWRlbnRpYWwgc3RvcmFnZSBpcyBlbmFibGVkIG9y
IG5vdC4KKyAqCisgKiBTZWUgYWxzbyB3ZWJraXRfbmV0d29ya19zZXNzaW9uX3NldF9wZXJzaXN0
ZW50X2NyZWRlbnRpYWxfc3RvcmFnZV9lbmFibGVkKCkuCisgKgorICogUmV0dXJuczogJVRSVUUg
aWYgcGVyc2lzdGVudCBjcmVkZW50aWFsIHN0b3JhZ2UgaXMgZW5hYmxlZCwgb3IgJUZBTFNFIG90
aGVyd2lzZS4KKyAqCisgKiBTaW5jZTogMi40MAorICovCitnYm9vbGVhbiB3ZWJraXRfbmV0d29y
a19zZXNzaW9uX2dldF9wZXJzaXN0ZW50X2NyZWRlbnRpYWxfc3RvcmFnZV9lbmFibGVkKFdlYktp
dE5ldHdvcmtTZXNzaW9uKiBzZXNzaW9uKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9JU19ORVRXT1JLX1NFU1NJT04oc2Vzc2lvbiksIEZBTFNFKTsKKworICAgIGF1dG8mIHdl
YnNpdGVEYXRhU3RvcmUgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUoc2Vz
c2lvbi0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKTsKKyAgICByZXR1cm4gd2Vic2l0
ZURhdGFTdG9yZS5wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKCk7Cit9CisKKy8q
KgorICogd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfdGxzX2Vycm9yc19wb2xpY3k6CisgKiBA
c2Vzc2lvbjogYSAjV2ViS2l0TmV0d29ya1Nlc3Npb24KKyAqIEBwb2xpY3k6IGEgI1dlYktpdFRM
U0Vycm9yc1BvbGljeQorICoKKyAqIFNldCB0aGUgVExTIGVycm9ycyBwb2xpY3kgb2YgQHNlc3Np
b24gYXMgQHBvbGljeS4KKyAqCisgKiBTaW5jZTogMi40MAorICovCit2b2lkIHdlYmtpdF9uZXR3
b3JrX3Nlc3Npb25fc2V0X3Rsc19lcnJvcnNfcG9saWN5KFdlYktpdE5ldHdvcmtTZXNzaW9uKiBz
ZXNzaW9uLCBXZWJLaXRUTFNFcnJvcnNQb2xpY3kgcG9saWN5KQoreworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0lTX05FVFdPUktfU0VTU0lPTihzZXNzaW9uKSk7CisKKyAgICBpZiAoc2Vz
c2lvbi0+cHJpdi0+dGxzRXJyb3JzUG9saWN5ID09IHBvbGljeSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgc2Vzc2lvbi0+cHJpdi0+dGxzRXJyb3JzUG9saWN5ID0gcG9saWN5OworICAgIGF1dG8m
IHdlYnNpdGVEYXRhU3RvcmUgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUo
c2Vzc2lvbi0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKTsKKyAgICB3ZWJzaXRlRGF0
YVN0b3JlLnNldElnbm9yZVRMU0Vycm9ycyhwb2xpY3kgPT0gV0VCS0lUX1RMU19FUlJPUlNfUE9M
SUNZX0lHTk9SRSk7Cit9CisKKy8qKgorICogd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfdGxz
X2Vycm9yc19wb2xpY3k6CisgKiBAc2Vzc2lvbjogYSAjV2ViS2l0TmV0d29ya1Nlc3Npb24KKyAq
CisgKiBHZXQgdGhlIFRMUyBlcnJvcnMgcG9saWN5IG9mIEBzZXNzaW9uLgorICoKKyAqIFJldHVy
bnM6IGEgI1dlYktpdFRMU0Vycm9yc1BvbGljeQorICoKKyAqIFNpbmNlOiAyLjQwCisgKi8KK1dl
YktpdFRMU0Vycm9yc1BvbGljeSB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF90bHNfZXJyb3Jz
X3BvbGljeShXZWJLaXROZXR3b3JrU2Vzc2lvbiogc2Vzc2lvbikKK3sKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfSVNfTkVUV09SS19TRVNTSU9OKHNlc3Npb24pLCBXRUJLSVRfVExT
X0VSUk9SU19QT0xJQ1lfRkFJTCk7CisKKyAgICByZXR1cm4gc2Vzc2lvbi0+cHJpdi0+dGxzRXJy
b3JzUG9saWN5OworfQorCisvKioKKyAqIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fYWxsb3dfdGxz
X2NlcnRpZmljYXRlX2Zvcl9ob3N0OgorICogQHNlc3Npb246IGEgI1dlYktpdE5ldHdvcmtTZXNz
aW9uCisgKiBAY2VydGlmaWNhdGU6IGEgI0dUbHNDZXJ0aWZpY2F0ZQorICogQGhvc3Q6IHRoZSBo
b3N0IGZvciB3aGljaCBhIGNlcnRpZmljYXRlIGlzIHRvIGJlIGFsbG93ZWQKKyAqCisgKiBJZ25v
cmUgZnVydGhlciBUTFMgZXJyb3JzIG9uIHRoZSBAaG9zdCBmb3IgdGhlIGNlcnRpZmljYXRlIHBy
ZXNlbnQgaW4gQGluZm8uCisgKgorICogU2luY2U6IDIuNDAKKyAqLwordm9pZCB3ZWJraXRfbmV0
d29ya19zZXNzaW9uX2FsbG93X3Rsc19jZXJ0aWZpY2F0ZV9mb3JfaG9zdChXZWJLaXROZXR3b3Jr
U2Vzc2lvbiogc2Vzc2lvbiwgR1Rsc0NlcnRpZmljYXRlKiBjZXJ0aWZpY2F0ZSwgY29uc3QgY2hh
ciogaG9zdCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19ORVRXT1JLX1NFU1NJ
T04oc2Vzc2lvbikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoR19JU19UTFNfQ0VSVElGSUNBVEUo
Y2VydGlmaWNhdGUpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGhvc3QpOworCisgICAgYXV0byBj
ZXJ0aWZpY2F0ZUluZm8gPSBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8oY2VydGlmaWNhdGUsIHN0
YXRpY19jYXN0PEdUbHNDZXJ0aWZpY2F0ZUZsYWdzPigwKSk7CisgICAgYXV0byYgd2Vic2l0ZURh
dGFTdG9yZSA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShzZXNzaW9uLT5w
cml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkpOworICAgIHdlYnNpdGVEYXRhU3RvcmUuYWxs
b3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNlcnRpZmljYXRlSW5mbywgU3RyaW5n
Ojpmcm9tVVRGOChob3N0KSk7Cit9CisKKy8qKgorICogd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9z
ZXRfcHJveHlfc2V0dGluZ3M6CisgKiBAc2Vzc2lvbjogYSAjV2ViS2l0TmV0d29ya1Nlc3Npb24K
KyAqIEBwcm94eV9tb2RlOiBhICNXZWJLaXROZXR3b3JrUHJveHlNb2RlCisgKiBAcHJveHlfc2V0
dGluZ3M6IChhbGxvdy1ub25lKTogYSAjV2ViS2l0TmV0d29ya1Byb3h5U2V0dGluZ3MsIG9yICVO
VUxMCisgKgorICogU2V0IHRoZSBuZXR3b3JrIHByb3h5IHNldHRpbmdzIHRvIGJlIHVzZWQgYnkg
Y29ubmVjdGlvbnMgc3RhcnRlZCBpbiBAc2Vzc2lvbiBzZXNzaW9uLgorICoKKyAqIEJ5IGRlZmF1
bHQgJVdFQktJVF9ORVRXT1JLX1BST1hZX01PREVfREVGQVVMVCBpcyB1c2VkLCB3aGljaCBtZWFu
cyB0aGF0IHRoZQorICogc3lzdGVtIHNldHRpbmdzIHdpbGwgYmUgdXNlZCAoZ19wcm94eV9yZXNv
bHZlcl9nZXRfZGVmYXVsdCgpKS4KKyAqIElmIHlvdSB3YW50IHRvIG92ZXJyaWRlIHRoZSBzeXN0
ZW0gZGVmYXVsdCBzZXR0aW5ncywgeW91IGNhbiBlaXRoZXIgdXNlCisgKiAlV0VCS0lUX05FVFdP
UktfUFJPWFlfTU9ERV9OT19QUk9YWSB0byBtYWtlIHN1cmUgbm8gcHJveGllcyBhcmUgdXNlZCBh
dCBhbGwsCisgKiBvciAlV0VCS0lUX05FVFdPUktfUFJPWFlfTU9ERV9DVVNUT00gdG8gcHJvdmlk
ZSB5b3VyIG93biBwcm94eSBzZXR0aW5ncy4KKyAqIFdoZW4gQHByb3h5X21vZGUgaXMgJVdFQktJ
VF9ORVRXT1JLX1BST1hZX01PREVfQ1VTVE9NIEBwcm94eV9zZXR0aW5ncyBtdXN0IGJlCisgKiBh
IHZhbGlkICNXZWJLaXROZXR3b3JrUHJveHlTZXR0aW5nczsgb3RoZXJ3aXNlLCBAcHJveHlfc2V0
dGluZ3MgbXVzdCBiZSAlTlVMTC4KKyAqCisgKiBTaW5jZTogMi40MAorICovCit2b2lkIHdlYmtp
dF9uZXR3b3JrX3Nlc3Npb25fc2V0X3Byb3h5X3NldHRpbmdzKFdlYktpdE5ldHdvcmtTZXNzaW9u
KiBzZXNzaW9uLCBXZWJLaXROZXR3b3JrUHJveHlNb2RlIHByb3h5TW9kZSwgV2ViS2l0TmV0d29y
a1Byb3h5U2V0dGluZ3MqIHByb3h5U2V0dGluZ3MpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfSVNfTkVUV09SS19TRVNTSU9OKHNlc3Npb24pKTsKKyAgICBnX3JldHVybl9pZl9mYWls
KChwcm94eU1vZGUgIT0gV0VCS0lUX05FVFdPUktfUFJPWFlfTU9ERV9DVVNUT00gJiYgIXByb3h5
U2V0dGluZ3MpIHx8IChwcm94eU1vZGUgPT0gV0VCS0lUX05FVFdPUktfUFJPWFlfTU9ERV9DVVNU
T00gJiYgcHJveHlTZXR0aW5ncykpOworCisgICAgYXV0byYgd2Vic2l0ZURhdGFTdG9yZSA9IHdl
YmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShzZXNzaW9uLT5wcml2LT53ZWJzaXRl
RGF0YU1hbmFnZXIuZ2V0KCkpOworICAgIHN3aXRjaCAocHJveHlNb2RlKSB7CisgICAgY2FzZSBX
RUJLSVRfTkVUV09SS19QUk9YWV9NT0RFX0RFRkFVTFQ6CisgICAgICAgIHdlYnNpdGVEYXRhU3Rv
cmUuc2V0TmV0d29ya1Byb3h5U2V0dGluZ3MoeyB9KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBXRUJLSVRfTkVUV09SS19QUk9YWV9NT0RFX05PX1BST1hZOgorICAgICAgICB3ZWJzaXRlRGF0
YVN0b3JlLnNldE5ldHdvcmtQcm94eVNldHRpbmdzKFdlYkNvcmU6OlNvdXBOZXR3b3JrUHJveHlT
ZXR0aW5ncyhXZWJDb3JlOjpTb3VwTmV0d29ya1Byb3h5U2V0dGluZ3M6Ok1vZGU6Ok5vUHJveHkp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBXRUJLSVRfTkVUV09SS19QUk9YWV9NT0RFX0NV
U1RPTToKKyAgICAgICAgYXV0byBzZXR0aW5ncyA9IHdlYmtpdE5ldHdvcmtQcm94eVNldHRpbmdz
R2V0TmV0d29ya1Byb3h5U2V0dGluZ3MocHJveHlTZXR0aW5ncyk7CisgICAgICAgIGlmIChzZXR0
aW5ncy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGdfd2FybmluZygiSW52YWxpZCBhdHRlbXB0
IHRvIHNldCBjdXN0b20gbmV0d29yayBwcm94eSBzZXR0aW5ncyB3aXRoIGFuIGVtcHR5IFdlYktp
dE5ldHdvcmtQcm94eVNldHRpbmdzLiBVc2UgIgorICAgICAgICAgICAgICAgICJXRUJLSVRfTkVU
V09SS19QUk9YWV9NT0RFX05PX1BST1hZIHRvIG5vdCB1c2UgYW55IHByb3h5IG9yIFdFQktJVF9O
RVRXT1JLX1BST1hZX01PREVfREVGQVVMVCB0byB1c2UgdGhlIGRlZmF1bHQgc3lzdGVtIHNldHRp
bmdzIik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgd2Vic2l0ZURhdGFTdG9yZS5zZXRO
ZXR3b3JrUHJveHlTZXR0aW5ncyhXVEZNb3ZlKHNldHRpbmdzKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKworLyoqCisgKiB3ZWJraXRfbmV0d29ya19zZXNzaW9uX3NldF9tZW1vcnlfcHJl
c3N1cmVfc2V0dGluZ3M6CisgKiBAc2V0dGluZ3M6IGEgV2ViS2l0TWVtb3J5UHJlc3N1cmVTZXR0
aW5ncy4KKyAqCisgKiBTZXRzIEBzZXR0aW5ncyBhcyB0aGUgI1dlYktpdE1lbW9yeVByZXNzdXJl
U2V0dGluZ3MuCisgKgorICogU2V0cyBAc2V0dGluZ3MgYXMgdGhlICNXZWJLaXRNZW1vcnlQcmVz
c3VyZVNldHRpbmdzIHRvIGJlIHVzZWQgYnkgdGhlIG5ldHdvcmsKKyAqIHByb2Nlc3MgY3JlYXRl
ZCBieSBhbnkgaW5zdGFuY2Ugb2YgI1dlYktpdE5ldHdvcmtTZXNzaW9uIGFmdGVyIHRoaXMgZnVu
Y3Rpb24KKyAqIGlzIGNhbGxlZC4KKyAqCisgKiBCZSBzdXJlIHRvIGNhbGwgdGhpcyBmdW5jdGlv
biBiZWZvcmUgY3JlYXRpbmcgYW55ICNXZWJLaXROZXR3b3JrU2Vzc2lvbi4KKyAqCisgKiBUaGUg
cGVyaW9kaWMgY2hlY2sgZm9yIHVzZWQgbWVtb3J5IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQgb24g
bmV0d29yayBwcm9jZXNzZXMuIFRoaXMgd2lsbAorICogYmUgZW5hYmxlZCBvbmx5IGlmIGN1c3Rv
bSBzZXR0aW5ncyBoYXZlIGJlZW4gc2V0IHVzaW5nIHRoaXMgZnVuY3Rpb24uIEFmdGVyIHRoYXQs
IGluIG9yZGVyCisgKiB0byByZW1vdmUgdGhlIGN1c3RvbSBzZXR0aW5ncyBhbmQgZGlzYWJsZSB0
aGUgcGVyaW9kaWMgY2hlY2ssIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQKKyAqIHBhc3Np
bmcgJU5VTEwgYXMgdGhlIHZhbHVlIG9mIEBzZXR0aW5ncy4KKyAqCisgKiBTaW5jZTogMi40MAor
ICovCit2b2lkIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fc2V0X21lbW9yeV9wcmVzc3VyZV9zZXR0
aW5ncyhXZWJLaXRNZW1vcnlQcmVzc3VyZVNldHRpbmdzKiBzZXR0aW5ncykKK3sKKyAgICBzdGQ6
Om9wdGlvbmFsPE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6Q29uZmlndXJhdGlvbj4gY29uZmlnID0g
c2V0dGluZ3MgPyBzdGQ6Om1ha2Vfb3B0aW9uYWwod2Via2l0TWVtb3J5UHJlc3N1cmVTZXR0aW5n
c0dldE1lbW9yeVByZXNzdXJlSGFuZGxlckNvbmZpZ3VyYXRpb24oc2V0dGluZ3MpKSA6IHN0ZDo6
bnVsbG9wdDsKKyAgICBXZWJQcm9jZXNzUG9vbDo6c2V0TmV0d29ya1Byb2Nlc3NNZW1vcnlQcmVz
c3VyZUhhbmRsZXJDb25maWd1cmF0aW9uKGNvbmZpZyk7Cit9CisKKy8qKgorICogd2Via2l0X25l
dHdvcmtfc2Vzc2lvbl9nZXRfaXRwX3N1bW1hcnk6CisgKiBAc2Vzc2lvbjogYSAjV2ViS2l0TmV0
d29ya1Nlc3Npb24KKyAqIEBjYW5jZWxsYWJsZTogKGFsbG93LW5vbmUpOiBhICNHQ2FuY2VsbGFi
bGUgb3IgJU5VTEwgdG8gaWdub3JlCisgKiBAY2FsbGJhY2s6IChzY29wZSBhc3luYyk6IGEgI0dB
c3luY1JlYWR5Q2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSByZXF1ZXN0IGlzIHNhdGlzZmllZAor
ICogQHVzZXJfZGF0YTogKGNsb3N1cmUpOiB0aGUgZGF0YSB0byBwYXNzIHRvIGNhbGxiYWNrIGZ1
bmN0aW9uCisgKgorICogQXN5bmNocm9ub3VzbHkgZ2V0IHRoZSBsaXN0IG9mICNXZWJLaXRJVFBU
aGlyZFBhcnR5IHNlZW4gZm9yIEBzZXNzaW9uLgorICoKKyAqIEV2ZXJ5ICNXZWJLaXRJVFBUaGly
ZFBhcnR5CisgKiBjb250YWlucyB0aGUgbGlzdCBvZiAjV2ViS2l0SVRQRmlyc3RQYXJ0eSB1bmRl
ciB3aGljaCBpdCBoYXMgYmVlbiBzZWVuLgorICoKKyAqIFdoZW4gdGhlIG9wZXJhdGlvbiBpcyBm
aW5pc2hlZCwgQGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkLiBZb3UgY2FuIHRoZW4gY2FsbAorICog
d2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfaXRwX3N1bW1hcnlfZmluaXNoKCkgdG8gZ2V0IHRo
ZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KKyAqCisgKiBTaW5jZTogMi40MAorICovCit2b2lk
IHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X2l0cF9zdW1tYXJ5KFdlYktpdE5ldHdvcmtTZXNz
aW9uKiBzZXNzaW9uLCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlLCBHQXN5bmNSZWFkeUNhbGxi
YWNrIGNhbGxiYWNrLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9JU19ORVRXT1JLX1NFU1NJT04oc2Vzc2lvbikpOworCisgICAgYXV0byYgd2Vic2l0
ZURhdGFTdG9yZSA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShzZXNzaW9u
LT5wcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkpOworICAgIEdSZWZQdHI8R1Rhc2s+IHRh
c2sgPSBhZG9wdEdSZWYoZ190YXNrX25ldyhzZXNzaW9uLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ss
IHVzZXJEYXRhKSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZS5nZXRSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGF0YVN1bW1hcnkoW3Rhc2sgPSBXVEZNb3ZlKHRhc2spXShWZWN0b3I8V2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YT4mJiB0aGlyZFBhcnR5TGlzdCkgewor
ICAgICAgICBHTGlzdCogcmVzdWx0ID0gbnVsbHB0cjsKKyAgICAgICAgd2hpbGUgKCF0aGlyZFBh
cnR5TGlzdC5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXN1bHQgPSBnX2xpc3RfcHJlcGVuZChy
ZXN1bHQsIHdlYmtpdElUUFRoaXJkUGFydHlDcmVhdGUodGhpcmRQYXJ0eUxpc3QudGFrZUxhc3Qo
KSkpOworICAgICAgICBnX3Rhc2tfcmV0dXJuX3BvaW50ZXIodGFzay5nZXQoKSwgcmVzdWx0LCBb
XShncG9pbnRlciBkYXRhKSB7CisgICAgICAgICAgICBnX2xpc3RfZnJlZV9mdWxsKHN0YXRpY19j
YXN0PEdMaXN0Kj4oZGF0YSksIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KHdlYmtp
dF9pdHBfdGhpcmRfcGFydHlfdW5yZWYpKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKKy8q
KgorICogd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfaXRwX3N1bW1hcnlfZmluaXNoOgorICog
QHNlc3Npb246IGEgI1dlYktpdE5ldHdvcmtTZXNzaW9uCisgKiBAcmVzdWx0OiBhICNHQXN5bmNS
ZXN1bHQKKyAqIEBlcnJvcjogcmV0dXJuIGxvY2F0aW9uIGZvciBlcnJvciBvciAlTlVMTCB0byBp
Z25vcmUKKyAqCisgKiBGaW5pc2ggYW4gYXN5bmNocm9ub3VzIG9wZXJhdGlvbiBzdGFydGVkIHdp
dGggd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfaXRwX3N1bW1hcnkoKS4KKyAqCisgKiBSZXR1
cm5zOiAodHJhbnNmZXIgZnVsbCkgKGVsZW1lbnQtdHlwZSBXZWJLaXRJVFBUaGlyZFBhcnR5KTog
YSAjR0xpc3Qgb2YgI1dlYktpdElUUFRoaXJkUGFydHkuCisgKiAgICBZb3UgbXVzdCBmcmVlIHRo
ZSAjR0xpc3Qgd2l0aCBnX2xpc3RfZnJlZSgpIGFuZCB1bnJlZiB0aGUgI1dlYktpdElUUFRoaXJk
UGFydHk8IS0tIC0tPnMgd2l0aAorICogICAgd2Via2l0X2l0cF90aGlyZF9wYXJ0eV91bnJlZigp
IHdoZW4geW91J3JlIGRvbmUgd2l0aCB0aGVtLgorICoKKyAqIFNpbmNlOiAyLjQwCisgKi8KK0dM
aXN0KiB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF9pdHBfc3VtbWFyeV9maW5pc2goV2ViS2l0
TmV0d29ya1Nlc3Npb24qIHNlc3Npb24sIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBHRXJyb3IqKiBl
cnJvcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfTkVUV09SS19TRVNT
SU9OKHNlc3Npb24pLCBudWxscHRyKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChnX3Rhc2tf
aXNfdmFsaWQocmVzdWx0LCBzZXNzaW9uKSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8R0xpc3QqPihnX3Rhc2tfcHJvcGFnYXRlX3BvaW50ZXIoR19UQVNLKHJlc3VsdCksIGVy
cm9yKSk7Cit9CisKKy8qKgorICogd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9wcmVmZXRjaF9kbnM6
CisgKiBAc2Vzc2lvbjogYSAjV2ViS2l0TmV0d29ya1Nlc3Npb24KKyAqIEBob3N0bmFtZTogYSBo
b3N0bmFtZSB0byBiZSByZXNvbHZlZAorICoKKyAqIFJlc29sdmUgdGhlIGRvbWFpbiBuYW1lIG9m
IHRoZSBnaXZlbiBAaG9zdG5hbWUgaW4gYWR2YW5jZSwgc28gdGhhdCBpZiBhIFVSSQorICogb2Yg
QGhvc3RuYW1lIGlzIHJlcXVlc3RlZCB0aGUgbG9hZCB3aWxsIGJlIHBlcmZvcm1lZCBtb3JlIHF1
aWNrbHkuCisgKgorICogU2luY2U6IDIuNDAKKyAqLwordm9pZCB3ZWJraXRfbmV0d29ya19zZXNz
aW9uX3ByZWZldGNoX2RucyhXZWJLaXROZXR3b3JrU2Vzc2lvbiogc2Vzc2lvbiwgY29uc3QgY2hh
ciogaG9zdG5hbWUpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfTkVUV09SS19T
RVNTSU9OKHNlc3Npb24pKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGhvc3RuYW1lKTsKKworICAg
IGlmIChzZXNzaW9uLT5wcml2LT5kbnNQcmVmZXRjaGVkSG9zdHMuYWRkKFN0cmluZzo6ZnJvbVVU
RjgoaG9zdG5hbWUpKS5pc05ld0VudHJ5KSB7CisgICAgICAgIGF1dG8mIHdlYnNpdGVEYXRhU3Rv
cmUgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUoc2Vzc2lvbi0+cHJpdi0+
d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKTsKKyAgICAgICAgd2Vic2l0ZURhdGFTdG9yZS5uZXR3
b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQcmVmZXRjaEROUyhT
dHJpbmc6OmZyb21VVEY4KGhvc3RuYW1lKSksIDApOworICAgIH0KKyAgICBzZXNzaW9uLT5wcml2
LT5kbnNQcmVmZXRjaEh5c3RlcmVyaXMuaW1wdWxzZSgpOworfQorCisvKioKKyAqIHdlYmtpdF9u
ZXR3b3JrX3Nlc3Npb25fZG93bmxvYWRfdXJpOgorICogQHNlc3Npb246IGEgI1dlYktpdE5ldHdv
cmtTZXNzaW9uCisgKiBAdXJpOiB0aGUgVVJJIHRvIGRvd25sb2FkCisgKgorICogUmVxdWVzdHMg
ZG93bmxvYWRpbmcgb2YgdGhlIHNwZWNpZmllZCBVUkkgc3RyaW5nLgorICoKKyAqIFRoZSBkb3du
bG9hZCBvcGVyYXRpb24gd2lsbCBub3QgYmUgYXNzb2NpYXRlZCB0byBhbnkgI1dlYktpdFdlYlZp
ZXcsCisgKiBpZiB5b3UgYXJlIGludGVyZXN0ZWQgaW4gc3RhcnRpbmcgYSBkb3dubG9hZCBmcm9t
IGEgcGFydGljdWxhciAjV2ViS2l0V2ViVmlldyB1c2UKKyAqIHdlYmtpdF93ZWJfdmlld19kb3du
bG9hZF91cmkoKSBpbnN0ZWFkLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBmdWxsKTogYSBu
ZXcgI1dlYktpdERvd25sb2FkIHJlcHJlc2VudGluZworICogICAgdGhlIGRvd25sb2FkIG9wZXJh
dGlvbi4KKyAqCisgKiBTaW5jZTogMi40MAorICovCitXZWJLaXREb3dubG9hZCogd2Via2l0X25l
dHdvcmtfc2Vzc2lvbl9kb3dubG9hZF91cmkoV2ViS2l0TmV0d29ya1Nlc3Npb24qIHNlc3Npb24s
IGNvbnN0IGNoYXIqIHVyaSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNf
TkVUV09SS19TRVNTSU9OKHNlc3Npb24pLCBudWxscHRyKTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbCh1cmksIG51bGxwdHIpOworCisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVl
c3QoU3RyaW5nOjpmcm9tVVRGOCh1cmkpKTsKKyAgICBhdXRvJiB3ZWJzaXRlRGF0YVN0b3JlID0g
d2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKHNlc3Npb24tPnByaXYtPndlYnNp
dGVEYXRhTWFuYWdlci5nZXQoKSk7CisgICAgYXV0byYgZG93bmxvYWRQcm94eSA9IHdlYnNpdGVE
YXRhU3RvcmUuY3JlYXRlRG93bmxvYWRQcm94eShhZG9wdFJlZigqbmV3IEFQSTo6RG93bmxvYWRD
bGllbnQpLCByZXF1ZXN0LCBudWxscHRyLCB7IH0pOworICAgIGF1dG8gZG93bmxvYWQgPSB3ZWJr
aXREb3dubG9hZENyZWF0ZShkb3dubG9hZFByb3h5KTsKKyAgICBkb3dubG9hZFByb3h5LnNldERp
ZFN0YXJ0Q2FsbGJhY2soW3Nlc3Npb24gPSBHUmVmUHRyPFdlYktpdE5ldHdvcmtTZXNzaW9uPiB7
IHNlc3Npb24gfSwgZG93bmxvYWQgPSBkb3dubG9hZC5nZXQoKV0oYXV0byogZG93bmxvYWRQcm94
eSkgeworICAgICAgICBpZiAoIWRvd25sb2FkUHJveHkpCisgICAgICAgICAgICByZXR1cm47CisK
Kwl3ZWJraXREb3dubG9hZFN0YXJ0ZWQoZG93bmxvYWQpOworICAgICAgICB3ZWJraXROZXR3b3Jr
U2Vzc2lvbkRvd25sb2FkU3RhcnRlZChzZXNzaW9uLmdldCgpLCBkb3dubG9hZCk7CisgICAgfSk7
CisgICAgd2Vic2l0ZURhdGFTdG9yZS5kb3dubG9hZChkb3dubG9hZFByb3h5LCB7IH0pOworICAg
IHJldHVybiBkb3dubG9hZC5sZWFrUmVmKCk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoMjAyMl9H
TElCX0FQSSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dl
YktpdE5ldHdvcmtTZXNzaW9uLmguaW4gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xp
Yi9XZWJLaXROZXR3b3JrU2Vzc2lvbi5oLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMC4uODIyYzM5NGNiZGI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0TmV0d29ya1Nlc3Npb24uaC5pbgpAQCAtMCwwICsx
LDEzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMyBJZ2FsaWEgUy5MLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworQEFQSV9TSU5H
TEVfSEVBREVSX0NIRUNLQAorCisjaWZuZGVmIFdlYktpdE5ldHdvcmtTZXNzaW9uX2gKKyNkZWZp
bmUgV2ViS2l0TmV0d29ya1Nlc3Npb25faAorCisjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2luY2x1
ZGUgPEBBUElfSU5DTFVERV9QUkVGSVhAL1dlYktpdENvb2tpZU1hbmFnZXIuaD4KKyNpbmNsdWRl
IDxAQVBJX0lOQ0xVREVfUFJFRklYQC9XZWJLaXREZWZpbmVzLmg+CisjaW5jbHVkZSA8QEFQSV9J
TkNMVURFX1BSRUZJWEAvV2ViS2l0RG93bmxvYWQuaD4KKyNpbmNsdWRlIDxAQVBJX0lOQ0xVREVf
UFJFRklYQC9XZWJLaXRNZW1vcnlQcmVzc3VyZVNldHRpbmdzLmg+CisjaW5jbHVkZSA8QEFQSV9J
TkNMVURFX1BSRUZJWEAvV2ViS2l0TmV0d29ya1Byb3h5U2V0dGluZ3MuaD4KKyNpbmNsdWRlIDxA
QVBJX0lOQ0xVREVfUFJFRklYQC9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuaD4KKworR19CRUdJ
Tl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX05FVFdPUktfU0VTU0lPTiAgICAgICAgICAg
ICh3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ORVRX
T1JLX1NFU1NJT04ob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgo
b2JqKSwgV0VCS0lUX1RZUEVfTkVUV09SS19TRVNTSU9OLCBXZWJLaXROZXR3b3JrU2Vzc2lvbikp
CisjZGVmaW5lIFdFQktJVF9JU19ORVRXT1JLX1NFU1NJT04ob2JqKSAgICAgICAgIChHX1RZUEVf
Q0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfTkVUV09SS19TRVNTSU9OKSkK
KyNkZWZpbmUgV0VCS0lUX05FVFdPUktfU0VTU0lPTl9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9D
SEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9ORVRXT1JLX1NFU1NJT04sIFdl
YktpdE5ldHdvcmtTZXNzaW9uQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfTkVUV09SS19TRVNT
SU9OX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJ
VF9UWVBFX05FVFdPUktfU0VTU0lPTikpCisjZGVmaW5lIFdFQktJVF9ORVRXT1JLX1NFU1NJT05f
R0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lU
X1RZUEVfTkVUV09SS19TRVNTSU9OLCBXZWJLaXROZXR3b3JrU2Vzc2lvbkNsYXNzKSkKKwordHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdE5ldHdvcmtTZXNzaW9uICAgICAgICBXZWJLaXROZXR3b3JrU2Vz
c2lvbjsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXROZXR3b3JrU2Vzc2lvbkNsYXNzICAgV2ViS2l0
TmV0d29ya1Nlc3Npb25DbGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXROZXR3b3JrU2Vzc2lv
blByaXZhdGUgV2ViS2l0TmV0d29ya1Nlc3Npb25Qcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdE5l
dHdvcmtTZXNzaW9uIHsKKyAgICBHT2JqZWN0IHBhcmVudDsKKworICAgIC8qPCBwcml2YXRlID4q
LworICAgIFdlYktpdE5ldHdvcmtTZXNzaW9uUHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBf
V2ViS2l0TmV0d29ya1Nlc3Npb25DbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFz
czsKKworICAgIC8qPCBwcml2YXRlID4qLworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMCkg
KHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMSkgKHZvaWQpOworICAgIHZvaWQg
KCpfd2Via2l0X3Jlc2VydmVkMikgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVk
MykgKHZvaWQpOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X25ldHdvcmtfc2Vzc2lv
bl9nZXRfdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCk7CisKK1dF
QktJVF9BUEkgV2ViS2l0TmV0d29ya1Nlc3Npb24gKgord2Via2l0X25ldHdvcmtfc2Vzc2lvbl9n
ZXRfZGVmYXVsdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCk7CisKK1dFQktJ
VF9BUEkgV2ViS2l0TmV0d29ya1Nlc3Npb24gKgord2Via2l0X25ldHdvcmtfc2Vzc2lvbl9uZXcg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAgICAgICAg
ICAgICAgICAgICAqZGF0YV9kaXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAgICAg
ICAgICAgICAgICpjYWNoZV9kaXJlY3Ryb3J5KTsKK1dFQktJVF9BUEkgV2ViS2l0TmV0d29ya1Nl
c3Npb24gKgord2Via2l0X25ldHdvcmtfc2Vzc2lvbl9uZXdfZXBoZW1lcmFsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF9u
ZXR3b3JrX3Nlc3Npb25faXNfZXBoZW1lcmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KFdlYktpdE5ldHdvcmtTZXNzaW9uICAgICAgICAgKnNlc3Npb24pOworCitXRUJLSVRfQVBJIFdl
YktpdFdlYnNpdGVEYXRhTWFuYWdlciAqCit3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF93ZWJz
aXRlX2RhdGFfbWFuYWdlciAgICAgICAgICAgICAgICAgIChXZWJLaXROZXR3b3JrU2Vzc2lvbiAg
ICAgICAgICpzZXNzaW9uKTsKKworV0VCS0lUX0FQSSBXZWJLaXRDb29raWVNYW5hZ2VyICoKK3dl
YmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X2Nvb2tpZV9tYW5hZ2VyICAgICAgICAgICAgICAgICAg
ICAgICAgKFdlYktpdE5ldHdvcmtTZXNzaW9uICAgICAgICAgKnNlc3Npb24pOworCitXRUJLSVRf
QVBJIHZvaWQKK3dlYmtpdF9uZXR3b3JrX3Nlc3Npb25fc2V0X2l0cF9lbmFibGVkICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKFdlYktpdE5ldHdvcmtTZXNzaW9uICAgICAgICAgKnNlc3Npb24s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnYm9vbGVhbiAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkKTsKKworV0VC
S0lUX0FQSSBnYm9vbGVhbgord2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfaXRwX2VuYWJsZWQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0TmV0d29ya1Nlc3Npb24gICAgICAgICAq
c2Vzc2lvbik7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRf
cGVyc2lzdGVudF9jcmVkZW50aWFsX3N0b3JhZ2VfZW5hYmxlZCAoV2ViS2l0TmV0d29ya1Nlc3Np
b24gICAgICAgICAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdib29sZWFuICAgICAgICAgICAgICAgICAg
ICAgIGVuYWJsZWQpOworCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfbmV0d29ya19zZXNz
aW9uX2dldF9wZXJzaXN0ZW50X2NyZWRlbnRpYWxfc3RvcmFnZV9lbmFibGVkIChXZWJLaXROZXR3
b3JrU2Vzc2lvbiAgICAgICAgICpzZXNzaW9uKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRf
bmV0d29ya19zZXNzaW9uX3NldF90bHNfZXJyb3JzX3BvbGljeSAgICAgICAgICAgICAgICAgICAg
IChXZWJLaXROZXR3b3JrU2Vzc2lvbiAgICAgICAgICpzZXNzaW9uLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0
VExTRXJyb3JzUG9saWN5ICAgICAgICAgcG9saWN5KTsKKworV0VCS0lUX0FQSSBXZWJLaXRUTFNF
cnJvcnNQb2xpY3kKK3dlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X3Rsc19lcnJvcnNfcG9saWN5
ICAgICAgICAgICAgICAgICAgICAgKFdlYktpdE5ldHdvcmtTZXNzaW9uICAgICAgICAgKnNlc3Np
b24pOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9uZXR3b3JrX3Nlc3Npb25fYWxsb3dfdGxz
X2NlcnRpZmljYXRlX2Zvcl9ob3N0ICAgICAgICAgICAgKFdlYktpdE5ldHdvcmtTZXNzaW9uICAg
ICAgICAgKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHVGxzQ2VydGlmaWNhdGUgICAgICAgICAgICAgICpj
ZXJ0aWZpY2F0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAgICAgICAgICAgKmhvc3Qp
OworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9uZXR3b3JrX3Nlc3Npb25fc2V0X3Byb3h5X3Nl
dHRpbmdzICAgICAgICAgICAgICAgICAgICAgICAgKFdlYktpdE5ldHdvcmtTZXNzaW9uICAgICAg
ICAgKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXROZXR3b3JrUHJveHlNb2RlICAgICAgICBwcm94
eV9tb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViS2l0TmV0d29ya1Byb3h5U2V0dGluZ3MgICAqcHJveHlfc2V0
dGluZ3MpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9uZXR3b3JrX3Nlc3Npb25fc2V0X21l
bW9yeV9wcmVzc3VyZV9zZXR0aW5ncyAgICAgICAgICAgICAgKFdlYktpdE1lbW9yeVByZXNzdXJl
U2V0dGluZ3MgKnNldHRpbmdzKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfbmV0d29ya19z
ZXNzaW9uX2dldF9pdHBfc3VtbWFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRO
ZXR3b3JrU2Vzc2lvbiAgICAgICAgICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NhbmNlbGxhYmxlICAg
ICAgICAgICAgICAgICAqY2FuY2VsbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZWFkeUNhbGxiYWNr
ICAgICAgICAgICBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgICAgICAg
ICAgIHVzZXJfZGF0YSk7CitXRUJLSVRfQVBJIEdMaXN0ICoKK3dlYmtpdF9uZXR3b3JrX3Nlc3Np
b25fZ2V0X2l0cF9zdW1tYXJ5X2ZpbmlzaCAgICAgICAgICAgICAgICAgICAgKFdlYktpdE5ldHdv
cmtTZXNzaW9uICAgICAgICAgKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZXN1bHQgICAgICAg
ICAgICAgICAgICpyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgICAgICAgICAgICAg
KiplcnJvcik7CitXRUJLSVRfQVBJIFdlYktpdERvd25sb2FkICoKK3dlYmtpdF9uZXR3b3JrX3Nl
c3Npb25fZG93bmxvYWRfdXJpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFdlYktpdE5l
dHdvcmtTZXNzaW9uICAgICAgICAgKnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICAgICAg
ICAgICAgICAgICAgICp1cmkpOworCitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdE5ldHdvcmtTZXNzaW9uUHJp
dmF0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0TmV0d29ya1Nl
c3Npb25Qcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5j
YjAxZWU4ZjgwNTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvZ2xpYi9XZWJLaXROZXR3b3JrU2Vzc2lvblByaXZhdGUuaApAQCAtMCwwICsxLDI1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiV2ViS2l0RG93bmxvYWQuaCIKKyNpbmNsdWRlICJXZWJLaXROZXR3b3JrU2Vzc2lvbi5o
IgorCit2b2lkIHdlYmtpdE5ldHdvcmtTZXNzaW9uRG93bmxvYWRTdGFydGVkKFdlYktpdE5ldHdv
cmtTZXNzaW9uKiwgV2ViS2l0RG93bmxvYWQqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5jcHAKaW5kZXggMjJlNzUxYzI5Yjhj
Li42MTJlMzI1OTJjNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdFdlYkNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9nbGliL1dlYktpdFdlYkNvbnRleHQuY3BwCkBAIC04MCw2ICs4MCwxMCBAQAogI2luY2x1ZGUg
IldlYktpdFJlbW90ZUluc3BlY3RvclByb3RvY29sSGFuZGxlci5oIgogI2VuZGlmCiAKKyNpZiBF
TkFCTEUoMjAyMl9HTElCX0FQSSkKKyNpbmNsdWRlICJXZWJLaXROZXR3b3JrU2Vzc2lvbi5oIgor
I2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIC8qKgpAQCAtMTE4LDcgKzEyMiw5
IEBAIGVudW0gewogI2lmIFBMQVRGT1JNKEdUSykgJiYgIVVTRShHVEs0KQogICAgIFBST1BfTE9D
QUxfU1RPUkFHRV9ESVJFQ1RPUlksCiAjZW5kaWYKKyNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkp
CiAgICAgUFJPUF9XRUJTSVRFX0RBVEFfTUFOQUdFUiwKKyNlbmRpZgogI2lmIFBMQVRGT1JNKEdU
SykgJiYgIVVTRShHVEs0KQogICAgIFBST1BfUFNPTl9FTkFCTEVELAogICAgIFBST1BfVVNFX1NZ
U1RFTV9BUFBFQVJBTkNFX0ZPUl9TQ1JPTExCQVJTLApAQCAtMTMxLDcgKzEzNyw5IEBAIGVudW0g
ewogc3RhdGljIEdQYXJhbVNwZWMqIHNPYmpQcm9wZXJ0aWVzW05fUFJPUEVSVElFU10gPSB7IG51
bGxwdHIsIH07CiAKIGVudW0geworI2lmICFFTkFCTEUoMjAyMl9HTElCX0FQSSkKICAgICBET1dO
TE9BRF9TVEFSVEVELAorI2VuZGlmCiAgICAgSU5JVElBTElaRV9XRUJfRVhURU5TSU9OUywKICAg
ICBJTklUSUFMSVpFX05PVElGSUNBVElPTl9QRVJNSVNTSU9OUywKICAgICBBVVRPTUFUSU9OX1NU
QVJURUQsCkBAIC0yMDAsMTAgKzIwOCwxMiBAQCB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQ
dHI8V2ViS2l0VVJJU2NoZW1lSGFuZGxlcj4gPiBVUklTY2hlbWVIYW5kbGVyTWFwOwogY2xhc3Mg
V2ViS2l0QXV0b21hdGlvbkNsaWVudDsKIAogc3RydWN0IF9XZWJLaXRXZWJDb250ZXh0UHJpdmF0
ZSB7CisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogICAgIF9XZWJLaXRXZWJDb250ZXh0UHJp
dmF0ZSgpCiAgICAgICAgIDogZG5zUHJlZmV0Y2hIeXN0ZXJlcmlzKFt0aGlzXShQQUw6Okh5c3Rl
cmVzaXNTdGF0ZSBzdGF0ZSkgeyBpZiAoc3RhdGUgPT0gUEFMOjpIeXN0ZXJlc2lzU3RhdGU6OlN0
b3BwZWQpIGRuc1ByZWZldGNoZWRIb3N0cy5jbGVhcigpOyB9KQogICAgIHsKICAgICB9CisjZW5k
aWYKIAogICAgIFJlZlB0cjxXZWJQcm9jZXNzUG9vbD4gcHJvY2Vzc1Bvb2w7CiAgICAgYm9vbCBj
bGllbnRzRGV0YWNoZWQ7CkBAIC0yMTIsMTQgKzIyMiwxOCBAQCBzdHJ1Y3QgX1dlYktpdFdlYkNv
bnRleHRQcml2YXRlIHsKICAgICBib29sIHVzZVN5c3RlbUFwcGVhcmFuY2VGb3JTY3JvbGxiYXJz
OwogI2VuZGlmCiAKKyNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAgICAgR1JlZlB0cjxXZWJL
aXRGYXZpY29uRGF0YWJhc2U+IGZhdmljb25EYXRhYmFzZTsKKyAgICBDU3RyaW5nIGZhdmljb25E
YXRhYmFzZURpcmVjdG9yeTsKKyNlbmRpZgogICAgIEdSZWZQdHI8V2ViS2l0U2VjdXJpdHlNYW5h
Z2VyPiBzZWN1cml0eU1hbmFnZXI7CiAgICAgVVJJU2NoZW1lSGFuZGxlck1hcCB1cmlTY2hlbWVI
YW5kbGVyczsKICAgICBHUmVmUHRyPFdlYktpdEdlb2xvY2F0aW9uTWFuYWdlcj4gZ2VvbG9jYXRp
b25NYW5hZ2VyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXROb3RpZmljYXRpb25Qcm92aWRl
cj4gbm90aWZpY2F0aW9uUHJvdmlkZXI7CisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogICAg
IEdSZWZQdHI8V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyPiB3ZWJzaXRlRGF0YU1hbmFnZXI7Cisj
ZW5kaWYKIAotICAgIENTdHJpbmcgZmF2aWNvbkRhdGFiYXNlRGlyZWN0b3J5OwogICAgIFdlYktp
dFByb2Nlc3NNb2RlbCBwcm9jZXNzTW9kZWw7CiAKICAgICBIYXNoTWFwPFdlYlBhZ2VQcm94eUlk
ZW50aWZpZXIsIFdlYktpdFdlYlZpZXcqPiB3ZWJWaWV3czsKQEAgLTIzNCwxMSArMjQ4LDE2IEBA
IHN0cnVjdCBfV2ViS2l0V2ViQ29udGV4dFByaXZhdGUgewogI2VuZGlmCiAgICAgc3RkOjp1bmlx
dWVfcHRyPFdlYktpdEF1dG9tYXRpb25DbGllbnQ+IGF1dG9tYXRpb25DbGllbnQ7CiAgICAgR1Jl
ZlB0cjxXZWJLaXRBdXRvbWF0aW9uU2Vzc2lvbj4gYXV0b21hdGlvblNlc3Npb247CisjaWYgRU5B
QkxFKDIwMjJfR0xJQl9BUEkpCisgICAgR1JlZlB0cjxXZWJLaXROZXR3b3JrU2Vzc2lvbj4gYXV0
b21hdGlvbk5ldHdvcmtTZXNzaW9uOworI2VuZGlmCiAjZW5kaWYKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8V2ViS2l0UHJvdG9jb2xIYW5kbGVyPiB3ZWJraXRQcm90b2NvbEhhbmRsZXI7CiAKKyNpZiAh
RU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAgICAgSGFzaFNldDxTdHJpbmc+IGRuc1ByZWZldGNoZWRI
b3N0czsKICAgICBQQUw6Okh5c3RlcmVzaXNBY3Rpdml0eSBkbnNQcmVmZXRjaEh5c3RlcmVyaXM7
CisjZW5kaWYKIAogICAgIFdlYktpdE1lbW9yeVByZXNzdXJlU2V0dGluZ3MqIG1lbW9yeVByZXNz
dXJlU2V0dGluZ3M7CiAKQEAgLTI5OCw3ICszMTcsMTcgQEAgdm9pZCB3ZWJraXRXZWJDb250ZXh0
V2lsbENsb3NlQXV0b21hdGlvblNlc3Npb24oV2ViS2l0V2ViQ29udGV4dCogd2ViQ29udGV4dCkK
IHsKICAgICB3ZWJDb250ZXh0LT5wcml2LT5wcm9jZXNzUG9vbC0+c2V0QXV0b21hdGlvblNlc3Np
b24obnVsbHB0cik7CiAgICAgd2ViQ29udGV4dC0+cHJpdi0+YXV0b21hdGlvblNlc3Npb24gPSBu
dWxscHRyOworICAgIHdlYkNvbnRleHQtPnByaXYtPmF1dG9tYXRpb25OZXR3b3JrU2Vzc2lvbiA9
IG51bGxwdHI7CiB9CisKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKK1dlYktpdE5ldHdvcmtT
ZXNzaW9uKiB3ZWJraXRXZWJDb250ZXh0R2V0TmV0d29ya1Nlc3Npb25Gb3JBdXRvbWF0aW9uKFdl
YktpdFdlYkNvbnRleHQqIHdlYkNvbnRleHQpCit7CisgICAgaWYgKCF3ZWJDb250ZXh0LT5wcml2
LT5hdXRvbWF0aW9uTmV0d29ya1Nlc3Npb24gJiYgd2ViQ29udGV4dC0+cHJpdi0+YXV0b21hdGlv
bkNsaWVudCkKKyAgICAgICAgd2ViQ29udGV4dC0+cHJpdi0+YXV0b21hdGlvbk5ldHdvcmtTZXNz
aW9uID0gYWRvcHRHUmVmKHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fbmV3X2VwaGVtZXJhbCgpKTsK
KyAgICByZXR1cm4gd2ViQ29udGV4dC0+cHJpdi0+YXV0b21hdGlvbk5ldHdvcmtTZXNzaW9uLmdl
dCgpOworfQorI2VuZGlmCiAjZW5kaWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCiAKIFdF
QktJVF9ERUZJTkVfVFlQRShXZWJLaXRXZWJDb250ZXh0LCB3ZWJraXRfd2ViX2NvbnRleHQsIEdf
VFlQRV9PQkpFQ1QpCkBAIC0zMzcsOSArMzY2LDExIEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYkNv
bnRleHRHZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJRCwgR1ZhbHVlKiB2
CiAgICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyh2YWx1ZSwgY29udGV4dC0+cHJpdi0+bG9jYWxT
dG9yYWdlRGlyZWN0b3J5LmRhdGEoKSk7CiAgICAgICAgIGJyZWFrOwogI2VuZGlmCisjaWYgIUVO
QUJMRSgyMDIyX0dMSUJfQVBJKQogICAgIGNhc2UgUFJPUF9XRUJTSVRFX0RBVEFfTUFOQUdFUjoK
ICAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0
X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKGNvbnRleHQpKTsKICAgICAgICAgYnJlYWs7CisjZW5kaWYK
ICNpZiBQTEFURk9STShHVEspICYmICFVU0UoR1RLNCkKICAgICBjYXNlIFBST1BfUFNPTl9FTkFC
TEVEOgogICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCBjb250ZXh0LT5wcml2LT5w
c29uRW5hYmxlZCk7CkBAIC0zNjYsMTEgKzM5NywxMyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJD
b250ZXh0U2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSUQsIGNvbnN0IEdW
YQogICAgICAgICBjb250ZXh0LT5wcml2LT5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSBnX3ZhbHVl
X2dldF9zdHJpbmcodmFsdWUpOwogICAgICAgICBicmVhazsKICNlbmRpZgorI2lmICFFTkFCTEUo
MjAyMl9HTElCX0FQSSkKICAgICBjYXNlIFBST1BfV0VCU0lURV9EQVRBX01BTkFHRVI6IHsKICAg
ICAgICAgZ3BvaW50ZXIgbWFuYWdlciA9IGdfdmFsdWVfZ2V0X29iamVjdCh2YWx1ZSk7CiAgICAg
ICAgIGNvbnRleHQtPnByaXYtPndlYnNpdGVEYXRhTWFuYWdlciA9IG1hbmFnZXIgPyBXRUJLSVRf
V0VCU0lURV9EQVRBX01BTkFHRVIobWFuYWdlcikgOiBudWxscHRyOwogICAgICAgICBicmVhazsK
ICAgICB9CisjZW5kaWYKICNpZiBQTEFURk9STShHVEspICYmICFVU0UoR1RLNCkKICAgICBjYXNl
IFBST1BfUFNPTl9FTkFCTEVEOgogICAgICAgICBjb250ZXh0LT5wcml2LT5wc29uRW5hYmxlZCA9
IGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpOwpAQCAtNDIwLDEzICs0NTMsMTAgQEAgc3RhdGlj
IHZvaWQgd2Via2l0V2ViQ29udGV4dENvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKICAgICB9
CiAgICAgY29uZmlndXJhdGlvbi5zZXRUaW1lWm9uZU92ZXJyaWRlKFN0cmluZzo6ZnJvbVVURjgo
cHJpdi0+dGltZVpvbmVPdmVycmlkZS5kYXRhKCksIHByaXYtPnRpbWVab25lT3ZlcnJpZGUubGVu
Z3RoKCkpKTsKIAotICAgIGlmICghcHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyKSB7Ci0gICAgICAg
IHByaXYtPndlYnNpdGVEYXRhTWFuYWdlciA9IGFkb3B0R1JlZih3ZWJraXRfd2Vic2l0ZV9kYXRh
X21hbmFnZXJfbmV3KAogI2lmICFFTkFCTEUoMjAyMl9HTElCX0FQSSkKLSAgICAgICAgICAgICAg
ICAgICAgImxvY2FsLXN0b3JhZ2UtZGlyZWN0b3J5IiwgcHJpdi0+bG9jYWxTdG9yYWdlRGlyZWN0
b3J5LmRhdGEoKSwKKyAgICBpZiAoIXByaXYtPndlYnNpdGVEYXRhTWFuYWdlcikKKyAgICAgICAg
cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJzaXRlX2RhdGFf
bWFuYWdlcl9uZXcoImxvY2FsLXN0b3JhZ2UtZGlyZWN0b3J5IiwgcHJpdi0+bG9jYWxTdG9yYWdl
RGlyZWN0b3J5LmRhdGEoKSwgbnVsbHB0cikpOwogI2VuZGlmCi0gICAgICAgIG51bGxwdHIpKTsK
LSAgICB9CiAKICAgICBwcml2LT5wcm9jZXNzUG9vbCA9IFdlYlByb2Nlc3NQb29sOjpjcmVhdGUo
Y29uZmlndXJhdGlvbik7CiAgICAgcHJpdi0+cHJvY2Vzc1Bvb2wtPnNldFVzZXJNZXNzYWdlSGFu
ZGxlcihbd2ViQ29udGV4dF0oVXNlck1lc3NhZ2UmJiBtZXNzYWdlLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFVzZXJNZXNzYWdlJiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSB7CkBAIC00NjUsMTAg
KzQ5NSwxMiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJDb250ZXh0RGlzcG9zZShHT2JqZWN0KiBv
YmplY3QpCiAgICAgICAgIHByaXYtPnByb2Nlc3NQb29sLT5zZXRJbmplY3RlZEJ1bmRsZUNsaWVu
dChudWxscHRyKTsKICAgICB9CiAKKyNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAgICAgaWYg
KHByaXYtPmZhdmljb25EYXRhYmFzZSkgewogICAgICAgICB3ZWJraXRGYXZpY29uRGF0YWJhc2VD
bG9zZShwcml2LT5mYXZpY29uRGF0YWJhc2UuZ2V0KCkpOwogICAgICAgICBwcml2LT5mYXZpY29u
RGF0YWJhc2UgPSBudWxscHRyOwogICAgIH0KKyNlbmRpZgogCiAgICAgaWYgKHByaXYtPnByb2Nl
c3NQb29sKSB7CiAgICAgICAgIHByaXYtPnByb2Nlc3NQb29sLT5zZXRVc2VyTWVzc2FnZUhhbmRs
ZXIobnVsbHB0cik7CkBAIC01MTIsNiArNTQ0LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl9j
b250ZXh0X2NsYXNzX2luaXQoV2ViS2l0V2ViQ29udGV4dENsYXNzKiB3ZWJDb250ZXh0Q2xhc3MK
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihXRUJLSVRfUEFSQU1fUkVBRFdS
SVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpOwogI2VuZGlmCiAKKyNpZiAhRU5BQkxFKDIw
MjJfR0xJQl9BUEkpCiAgICAgLyoqCiAgICAgICogV2ViS2l0V2ViQ29udGV4dDp3ZWJzaXRlLWRh
dGEtbWFuYWdlcjoKICAgICAgKgpAQCAtNTI1LDYgKzU1OCw3IEBAIHN0YXRpYyB2b2lkIHdlYmtp
dF93ZWJfY29udGV4dF9jbGFzc19pbml0KFdlYktpdFdlYkNvbnRleHRDbGFzcyogd2ViQ29udGV4
dENsYXNzCiAgICAgICAgICAgICBudWxscHRyLCBudWxscHRyLAogICAgICAgICAgICAgV0VCS0lU
X1RZUEVfV0VCU0lURV9EQVRBX01BTkFHRVIsCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxHUGFy
YW1GbGFncz4oV0VCS0lUX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkp
KTsKKyNlbmRpZgogCiAjaWYgUExBVEZPUk0oR1RLKSAmJiAhVVNFKEdUSzQpCiAgICAgLyoqCkBA
IC02MDMsNiArNjM3LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl9jb250ZXh0X2NsYXNzX2lu
aXQoV2ViS2l0V2ViQ29udGV4dENsYXNzKiB3ZWJDb250ZXh0Q2xhc3MKIAogICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydGllcyhnT2JqZWN0Q2xhc3MsIE5fUFJPUEVSVElFUywgc09i
alByb3BlcnRpZXMpOwogCisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogICAgIC8qKgogICAg
ICAqIFdlYktpdFdlYkNvbnRleHQ6OmRvd25sb2FkLXN0YXJ0ZWQ6CiAgICAgICogQGNvbnRleHQ6
IHRoZSAjV2ViS2l0V2ViQ29udGV4dApAQCAtNjE5LDYgKzY1NCw3IEBAIHN0YXRpYyB2b2lkIHdl
YmtpdF93ZWJfY29udGV4dF9jbGFzc19pbml0KFdlYktpdFdlYkNvbnRleHRDbGFzcyogd2ViQ29u
dGV4dENsYXNzCiAgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fT0JKRUNULAog
ICAgICAgICAgICAgR19UWVBFX05PTkUsIDEsCiAgICAgICAgICAgICBXRUJLSVRfVFlQRV9ET1dO
TE9BRCk7CisjZW5kaWYKIAogICAgIC8qKgogICAgICAqIFdlYktpdFdlYkNvbnRleHQ6OmluaXRp
YWxpemUtd2ViLWV4dGVuc2lvbnM6CkBAIC03NDUsNiArNzgxLDcgQEAgV2ViS2l0V2ViQ29udGV4
dCogd2Via2l0X3dlYl9jb250ZXh0X25ldyh2b2lkKQogICAgIHJldHVybiBXRUJLSVRfV0VCX0NP
TlRFWFQoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9DT05URVhULCBudWxscHRyKSk7CiB9
CiAKKyNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAvKioKICAqIHdlYmtpdF93ZWJfY29udGV4
dF9uZXdfZXBoZW1lcmFsOgogICoKQEAgLTgxNyw2ICs4NTQsNyBAQCBnYm9vbGVhbiB3ZWJraXRf
d2ViX2NvbnRleHRfaXNfZXBoZW1lcmFsKFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQpCiAKICAg
ICByZXR1cm4gd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2lzX2VwaGVtZXJhbChjb250ZXh0
LT5wcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkpOwogfQorI2VuZGlmCiAKIC8qKgogICog
d2Via2l0X3dlYl9jb250ZXh0X2lzX2F1dG9tYXRpb25fYWxsb3dlZDoKQEAgLTk1NSw2ICs5OTMs
NyBAQCBXZWJLaXRDYWNoZU1vZGVsIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfY2FjaGVfbW9kZWwo
V2ViS2l0V2ViQ29udGV4dCogY29udGV4dCkKICAgICByZXR1cm4gV0VCS0lUX0NBQ0hFX01PREVM
X1dFQl9CUk9XU0VSOwogfQogCisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogLyoqCiAgKiB3
ZWJraXRfd2ViX2NvbnRleHRfY2xlYXJfY2FjaGU6CiAgKiBAY29udGV4dDogYSAjV2ViS2l0V2Vi
Q29udGV4dApAQCAtOTc0LDcgKzEwMTMsNiBAQCB2b2lkIHdlYmtpdF93ZWJfY29udGV4dF9jbGVh
cl9jYWNoZShXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0KQogICAgIHdlYnNpdGVEYXRhU3RvcmUu
cmVtb3ZlRGF0YSh3ZWJzaXRlRGF0YVR5cGVzLCAtV2FsbFRpbWU6OmluZmluaXR5KCksIFtdIHsg
fSk7CiB9CiAKLSNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAvKioKICAqIHdlYmtpdF93ZWJf
Y29udGV4dF9zZXRfbmV0d29ya19wcm94eV9zZXR0aW5nczoKICAqIEBjb250ZXh0OiBhICNXZWJL
aXRXZWJDb250ZXh0CkBAIC0xMDAxLDcgKzEwMzksNiBAQCB2b2lkIHdlYmtpdF93ZWJfY29udGV4
dF9zZXRfbmV0d29ya19wcm94eV9zZXR0aW5ncyhXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0LCBX
ZQogCiAgICAgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX3NldF9uZXR3b3JrX3Byb3h5X3Nl
dHRpbmdzKGNvbnRleHQtPnByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSwgcHJveHlNb2Rl
LCBwcm94eVNldHRpbmdzKTsKIH0KLSNlbmRpZgogCiAvKioKICAqIHdlYmtpdF93ZWJfY29udGV4
dF9kb3dubG9hZF91cmk6CkBAIC0xMDUwLDYgKzEwODcsNyBAQCBXZWJLaXRDb29raWVNYW5hZ2Vy
KiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Nvb2tpZV9tYW5hZ2VyKFdlYktpdFdlYkNvbnRleHQq
IGNvbgogCiAgICAgcmV0dXJuIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfY29va2ll
X21hbmFnZXIoY29udGV4dC0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKTsKIH0KKyNl
bmRpZgogCiAvKioKICAqIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZ2VvbG9jYXRpb25fbWFuYWdl
cjoKQEAgLTEwNjgsNiArMTEwNiw3IEBAIFdlYktpdEdlb2xvY2F0aW9uTWFuYWdlciogd2Via2l0
X3dlYl9jb250ZXh0X2dldF9nZW9sb2NhdGlvbl9tYW5hZ2VyKFdlYktpdFdlYkNvCiAgICAgcmV0
dXJuIGNvbnRleHQtPnByaXYtPmdlb2xvY2F0aW9uTWFuYWdlci5nZXQoKTsKIH0KIAorI2lmICFF
TkFCTEUoMjAyMl9HTElCX0FQSSkKIHN0YXRpYyB2b2lkIGVuc3VyZUZhdmljb25EYXRhYmFzZShX
ZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0KQogewogICAgIFdlYktpdFdlYkNvbnRleHRQcml2YXRl
KiBwcml2ID0gY29udGV4dC0+cHJpdjsKQEAgLTExNjksNiArMTIwOCw3IEBAIFdlYktpdEZhdmlj
b25EYXRhYmFzZSogd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlKFdlYktp
dFdlYkNvbnRleHQqCiAgICAgZW5zdXJlRmF2aWNvbkRhdGFiYXNlKGNvbnRleHQpOwogICAgIHJl
dHVybiBjb250ZXh0LT5wcml2LT5mYXZpY29uRGF0YWJhc2UuZ2V0KCk7CiB9CisjZW5kaWYKIAog
LyoqCiAgKiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NlY3VyaXR5X21hbmFnZXI6CkBAIC0xNjU2
LDYgKzE2OTYsNyBAQCB2b2lkIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfZGlza19jYWNoZV9kaXJl
Y3RvcnkoV2ViS2l0V2ViQ29udGV4dCosIGNvbnN0IGNoYXIqKQogfQogI2VuZGlmCiAKKyNpZiAh
RU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAvKioKICAqIHdlYmtpdF93ZWJfY29udGV4dF9wcmVmZXRj
aF9kbnM6CiAgKiBAY29udGV4dDogYSAjV2ViS2l0V2ViQ29udGV4dApAQCAtMTY3MSw4ICsxNzEy
LDEwIEBAIHZvaWQgd2Via2l0X3dlYl9jb250ZXh0X3ByZWZldGNoX2RucyhXZWJLaXRXZWJDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiBob3N0CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfSVNfV0VCX0NPTlRFWFQoY29udGV4dCkpOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoaG9zdG5h
bWUpOwogCi0gICAgYXV0byYgd2Vic2l0ZURhdGFTdG9yZSA9IHdlYmtpdFdlYnNpdGVEYXRhTWFu
YWdlckdldERhdGFTdG9yZShjb250ZXh0LT5wcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkp
OwotICAgIHdlYnNpdGVEYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6UHJlZmV0Y2hETlMoU3RyaW5nOjpmcm9tVVRGOChob3N0bmFtZSkpLCAw
KTsKKyAgICBpZiAoY29udGV4dC0+cHJpdi0+ZG5zUHJlZmV0Y2hlZEhvc3RzLmFkZChob3N0bmFt
ZSkuaXNOZXdFbnRyeSkgeworICAgICAgICBhdXRvJiB3ZWJzaXRlRGF0YVN0b3JlID0gd2Via2l0
V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKGNvbnRleHQtPnByaXYtPndlYnNpdGVEYXRh
TWFuYWdlci5nZXQoKSk7CisgICAgICAgIHdlYnNpdGVEYXRhU3RvcmUubmV0d29ya1Byb2Nlc3Mo
KS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJlZmV0Y2hETlMoU3RyaW5nOjpmcm9t
VVRGOChob3N0bmFtZSkpLCAwKTsKKyAgICB9CiAgICAgY29udGV4dC0+cHJpdi0+ZG5zUHJlZmV0
Y2hIeXN0ZXJlcmlzLmltcHVsc2UoKTsKIH0KIApAQCAtMTY5Niw2ICsxNzM5LDcgQEAgdm9pZCB3
ZWJraXRfd2ViX2NvbnRleHRfYWxsb3dfdGxzX2NlcnRpZmljYXRlX2Zvcl9ob3N0KFdlYktpdFdl
YkNvbnRleHQqIGNvbnRleHQKICAgICBhdXRvJiB3ZWJzaXRlRGF0YVN0b3JlID0gd2Via2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKGNvbnRleHQtPnByaXYtPndlYnNpdGVEYXRhTWFu
YWdlci5nZXQoKSk7CiAgICAgd2Vic2l0ZURhdGFTdG9yZS5hbGxvd1NwZWNpZmljSFRUUFNDZXJ0
aWZpY2F0ZUZvckhvc3QoY2VydGlmaWNhdGVJbmZvLCBTdHJpbmc6OmZyb21VVEY4KGhvc3QpKTsK
IH0KKyNlbmRpZgogCiAvKioKICAqIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfcHJvY2Vzc19tb2Rl
bDoKQEAgLTE5MzYsMTAgKzE5ODAsMTIgQEAgdm9pZCB3ZWJraXRXZWJDb250ZXh0SW5pdGlhbGl6
ZU5vdGlmaWNhdGlvblBlcm1pc3Npb25zKFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQKICAgICBn
X3NpZ25hbF9lbWl0KGNvbnRleHQsIHNpZ25hbHNbSU5JVElBTElaRV9OT1RJRklDQVRJT05fUEVS
TUlTU0lPTlNdLCAwKTsKIH0KIAorI2lmICFFTkFCTEUoMjAyMl9HTElCX0FQSSkKIHZvaWQgd2Vi
a2l0V2ViQ29udGV4dERvd25sb2FkU3RhcnRlZChXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0LCBX
ZWJLaXREb3dubG9hZCogZG93bmxvYWQpCiB7CiAgICAgZ19zaWduYWxfZW1pdChjb250ZXh0LCBz
aWduYWxzW0RPV05MT0FEX1NUQVJURURdLCAwLCBkb3dubG9hZCk7CiB9CisjZW5kaWYKIAogR1Zh
cmlhbnQqIHdlYmtpdFdlYkNvbnRleHRJbml0aWFsaXplV2ViRXh0ZW5zaW9ucyhXZWJLaXRXZWJD
b250ZXh0KiBjb250ZXh0KQogewpAQCAtMTk3Nyw4ICsyMDIzLDEwIEBAIHZvaWQgd2Via2l0V2Vi
Q29udGV4dENyZWF0ZVBhZ2VGb3JXZWJWaWV3KFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQsIFdl
YktpdFdlYlZpCiAgICAgICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRPdmVycmlkZUNvbnRlbnRT
ZWN1cml0eVBvbGljeShTdHJpbmc6OmZyb21VVEY4KGRlZmF1bHRDb250ZW50U2VjdXJpdHlQb2xp
Y3kpKTsKIAogICAgIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogbWFuYWdlciA9IHdlYmtpdFdl
YlZpZXdHZXRXZWJzaXRlRGF0YU1hbmFnZXIod2ViVmlldyk7CisjaWYgIUVOQUJMRSgyMDIyX0dM
SUJfQVBJKQogICAgIGlmICghbWFuYWdlcikKICAgICAgICAgbWFuYWdlciA9IGNvbnRleHQtPnBy
aXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKTsKKyNlbmRpZgogICAgIHBhZ2VDb25maWd1cmF0
aW9uLT5zZXRXZWJzaXRlRGF0YVN0b3JlKCZ3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRh
U3RvcmUobWFuYWdlcikpOwogICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXREZWZhdWx0V2Vic2l0
ZVBvbGljaWVzKHdlYmtpdFdlYnNpdGVQb2xpY2llc0dldFdlYnNpdGVQb2xpY2llcyhkZWZhdWx0
V2Vic2l0ZVBvbGljaWVzKSk7CiAgICAgd2Via2l0V2ViVmlld0NyZWF0ZVBhZ2Uod2ViVmlldywg
V1RGTW92ZShwYWdlQ29uZmlndXJhdGlvbikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5oLmluIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5oLmluCmluZGV4IDE2NTdkZDNiMmIy
OC4uZGYxNmYzYTJkZTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Z2xpYi9XZWJLaXRXZWJDb250ZXh0LmguaW4KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dC5oLmluCkBAIC0yNyw3ICsyNyw5IEBACiAjaW5jbHVk
ZSA8QEFQSV9JTkNMVURFX1BSRUZJWEAvV2ViS2l0Q29va2llTWFuYWdlci5oPgogI2luY2x1ZGUg
PEBBUElfSU5DTFVERV9QUkVGSVhAL1dlYktpdERlZmluZXMuaD4KICNpbmNsdWRlIDxAQVBJX0lO
Q0xVREVfUFJFRklYQC9XZWJLaXREb3dubG9hZC5oPgorI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJ
KQogI2luY2x1ZGUgPEBBUElfSU5DTFVERV9QUkVGSVhAL1dlYktpdEZhdmljb25EYXRhYmFzZS5o
PgorI2VuZGlmCiAjaW5jbHVkZSA8QEFQSV9JTkNMVURFX1BSRUZJWEAvV2ViS2l0R2VvbG9jYXRp
b25NYW5hZ2VyLmg+CiAjaW5jbHVkZSA8QEFQSV9JTkNMVURFX1BSRUZJWEAvV2ViS2l0TmV0d29y
a1Byb3h5U2V0dGluZ3MuaD4KICNpbmNsdWRlIDxAQVBJX0lOQ0xVREVfUFJFRklYQC9XZWJLaXRT
ZWN1cml0eU1hbmFnZXIuaD4KQEAgLTEzNiw2ICsxMzgsNyBAQCB3ZWJraXRfd2ViX2NvbnRleHRf
Z2V0X2RlZmF1bHQgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOwogV0VCS0lUX0FQSSBXZWJL
aXRXZWJDb250ZXh0ICoKIHdlYmtpdF93ZWJfY29udGV4dF9uZXcgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAodm9pZCk7CiAKKyNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiBXRUJLSVRf
QVBJIFdlYktpdFdlYkNvbnRleHQgKgogd2Via2l0X3dlYl9jb250ZXh0X25ld19lcGhlbWVyYWwg
ICAgICAgICAgICAgICAgICAgICh2b2lkKTsKIApAQCAtMTQ3LDYgKzE1MCw3IEBAIHdlYmtpdF93
ZWJfY29udGV4dF9nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIgICAgICAgICAoV2ViS2l0V2ViQ29u
dGV4dAogCiBXRUJLSVRfQVBJIGdib29sZWFuCiB3ZWJraXRfd2ViX2NvbnRleHRfaXNfZXBoZW1l
cmFsICAgICAgICAgICAgICAgICAgICAgKFdlYktpdFdlYkNvbnRleHQgICAgICAgICAgICAgICpj
b250ZXh0KTsKKyNlbmRpZgogCiBXRUJLSVRfQVBJIGdib29sZWFuCiB3ZWJraXRfd2ViX2NvbnRl
eHRfaXNfYXV0b21hdGlvbl9hbGxvd2VkICAgICAgICAgICAgKFdlYktpdFdlYkNvbnRleHQgICAg
ICAgICAgICAgICpjb250ZXh0KTsKQEAgLTE2OSwxNSArMTczLDE0IEBAIFdFQktJVF9ERVBSRUNB
VEVEIGd1aW50CiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3dlYl9wcm9jZXNzX2NvdW50X2xpbWl0
ICAgICAgKFdlYktpdFdlYkNvbnRleHQgICAgICAgICAgICAgICpjb250ZXh0KTsKICNlbmRpZgog
CisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogV0VCS0lUX0FQSSB2b2lkCiB3ZWJraXRfd2Vi
X2NvbnRleHRfY2xlYXJfY2FjaGUgICAgICAgICAgICAgICAgICAgICAgKFdlYktpdFdlYkNvbnRl
eHQgICAgICAgICAgICAgICpjb250ZXh0KTsKIAotI2lmICFFTkFCTEUoMjAyMl9HTElCX0FQSSkK
IFdFQktJVF9ERVBSRUNBVEVEX0ZPUih3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X25l
dHdvcmtfcHJveHlfc2V0dGluZ3MpIHZvaWQKIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfbmV0d29y
a19wcm94eV9zZXR0aW5ncyAgICAgICAoV2ViS2l0V2ViQ29udGV4dCAgICAgICAgICAgICAgKmNv
bnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdlYktpdE5ldHdvcmtQcm94eU1vZGUgICAgICAgICBwcm94eV9tb2RlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXROZXR3b3Jr
UHJveHlTZXR0aW5ncyAgICAqcHJveHlfc2V0dGluZ3MpOwotI2VuZGlmCiAKIFdFQktJVF9BUEkg
V2ViS2l0RG93bmxvYWQgKgogd2Via2l0X3dlYl9jb250ZXh0X2Rvd25sb2FkX3VyaSAgICAgICAg
ICAgICAgICAgICAgIChXZWJLaXRXZWJDb250ZXh0ICAgICAgICAgICAgICAqY29udGV4dCwKQEAg
LTE4NSwxMCArMTg4LDEyIEBAIHdlYmtpdF93ZWJfY29udGV4dF9kb3dubG9hZF91cmkgICAgICAg
ICAgICAgICAgICAgICAoV2ViS2l0V2ViQ29udGV4dAogCiBXRUJLSVRfQVBJIFdlYktpdENvb2tp
ZU1hbmFnZXIgKgogd2Via2l0X3dlYl9jb250ZXh0X2dldF9jb29raWVfbWFuYWdlciAgICAgICAg
ICAgICAgIChXZWJLaXRXZWJDb250ZXh0ICAgICAgICAgICAgICAqY29udGV4dCk7CisjZW5kaWYK
IAogV0VCS0lUX0FQSSBXZWJLaXRHZW9sb2NhdGlvbk1hbmFnZXIgKgogd2Via2l0X3dlYl9jb250
ZXh0X2dldF9nZW9sb2NhdGlvbl9tYW5hZ2VyICAgICAgICAgIChXZWJLaXRXZWJDb250ZXh0ICAg
ICAgICAgICAgICAqY29udGV4dCk7CiAKKyNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiBXRUJL
SVRfQVBJIFdlYktpdEZhdmljb25EYXRhYmFzZSAqCiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zh
dmljb25fZGF0YWJhc2UgICAgICAgICAgICAgKFdlYktpdFdlYkNvbnRleHQgICAgICAgICAgICAg
ICpjb250ZXh0KTsKIApAQCAtMTk3LDYgKzIwMiw3IEBAIHdlYmtpdF93ZWJfY29udGV4dF9zZXRf
ZmF2aWNvbl9kYXRhYmFzZV9kaXJlY3RvcnkgICAoV2ViS2l0V2ViQ29udGV4dAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAg
ICAgICAgICAgICAgICAgICAqcGF0aCk7CiBXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICoKIHdlYmtp
dF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFzZV9kaXJlY3RvcnkgICAoV2ViS2l0V2Vi
Q29udGV4dCAgICAgICAgICAgICAgKmNvbnRleHQpOworI2VuZGlmCiAKIFdFQktJVF9BUEkgV2Vi
S2l0U2VjdXJpdHlNYW5hZ2VyICoKIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfc2VjdXJpdHlfbWFu
YWdlciAgICAgICAgICAgICAoV2ViS2l0V2ViQ29udGV4dCAgICAgICAgICAgICAgKmNvbnRleHQp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vi
Q29udGV4dFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktp
dFdlYkNvbnRleHRQcml2YXRlLmgKaW5kZXggNTNjZTM1NDcxMjExLi5hYTdlNjYwYWU2MTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYkNvbnRl
eHRQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0
V2ViQ29udGV4dFByaXZhdGUuaApAQCAtMzEsOCArMzEsMTQgQEAKICNpbmNsdWRlICJXZWJQcm9j
ZXNzUG9vbC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CiAKKyNpZiBF
TkFCTEUoMjAyMl9HTElCX0FQSSkKKyNpbmNsdWRlICJXZWJLaXROZXR3b3JrU2Vzc2lvbi5oIgor
I2VuZGlmCisKIFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2wmIHdlYmtpdFdlYkNvbnRleHRHZXRQcm9j
ZXNzUG9vbChXZWJLaXRXZWJDb250ZXh0Kik7CisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQog
dm9pZCB3ZWJraXRXZWJDb250ZXh0RG93bmxvYWRTdGFydGVkKFdlYktpdFdlYkNvbnRleHQqLCBX
ZWJLaXREb3dubG9hZCopOworI2VuZGlmCiB2b2lkIHdlYmtpdFdlYkNvbnRleHRDcmVhdGVQYWdl
Rm9yV2ViVmlldyhXZWJLaXRXZWJDb250ZXh0KiwgV2ViS2l0V2ViVmlldyosIFdlYktpdFVzZXJD
b250ZW50TWFuYWdlciosIFdlYktpdFdlYlZpZXcqLCBXZWJLaXRXZWJzaXRlUG9saWNpZXMqKTsK
IHZvaWQgd2Via2l0V2ViQ29udGV4dFdlYlZpZXdEZXN0cm95ZWQoV2ViS2l0V2ViQ29udGV4dCos
IFdlYktpdFdlYlZpZXcqKTsKIFdlYktpdFdlYlZpZXcqIHdlYmtpdFdlYkNvbnRleHRHZXRXZWJW
aWV3Rm9yUGFnZShXZWJLaXRXZWJDb250ZXh0KiwgV2ViS2l0OjpXZWJQYWdlUHJveHkqKTsKQEAg
LTQwLDQgKzQ2LDcgQEAgR1ZhcmlhbnQqIHdlYmtpdFdlYkNvbnRleHRJbml0aWFsaXplV2ViRXh0
ZW5zaW9ucyhXZWJLaXRXZWJDb250ZXh0Kik7CiB2b2lkIHdlYmtpdFdlYkNvbnRleHRJbml0aWFs
aXplTm90aWZpY2F0aW9uUGVybWlzc2lvbnMoV2ViS2l0V2ViQ29udGV4dCopOwogI2lmIEVOQUJM
RShSRU1PVEVfSU5TUEVDVE9SKQogdm9pZCB3ZWJraXRXZWJDb250ZXh0V2lsbENsb3NlQXV0b21h
dGlvblNlc3Npb24oV2ViS2l0V2ViQ29udGV4dCopOworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJ
KQorV2ViS2l0TmV0d29ya1Nlc3Npb24qIHdlYmtpdFdlYkNvbnRleHRHZXROZXR3b3JrU2Vzc2lv
bkZvckF1dG9tYXRpb24oV2ViS2l0V2ViQ29udGV4dCopOworI2VuZGlmCiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXcuY3Bw
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5jcHAKaW5k
ZXggMjMxZTIwZmU2YmY4Li4yZmQ5YzBhMzVmODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXcuY3BwCkBAIC0xMDIsNiArMTAyLDEwIEBA
CiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0NsaWVudC5oIgogI2VuZGlmCiAKKyNpZiBFTkFCTEUo
MjAyMl9HTElCX0FQSSkKKyNpbmNsdWRlICJXZWJLaXROZXR3b3JrU2Vzc2lvblByaXZhdGUuaCIK
KyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKQEAgLTE4Nyw2ICsxOTEsOSBAQCBlbnVtIHsKICAgICBQUk9QX1JFTEFURURfVklFVywK
ICAgICBQUk9QX1NFVFRJTkdTLAogICAgIFBST1BfVVNFUl9DT05URU5UX01BTkFHRVIsCisjaWYg
RU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgUFJPUF9ORVRXT1JLX1NFU1NJT04sCisjZW5kaWYK
ICAgICBQUk9QX1RJVExFLAogICAgIFBST1BfRVNUSU1BVEVEX0xPQURfUFJPR1JFU1MsCiAKQEAg
LTE5OCw3ICsyMDUsOSBAQCBlbnVtIHsKICAgICBQUk9QX1pPT01fTEVWRUwsCiAgICAgUFJPUF9J
U19MT0FESU5HLAogICAgIFBST1BfSVNfUExBWUlOR19BVURJTywKKyNpZiAhRU5BQkxFKDIwMjJf
R0xJQl9BUEkpCiAgICAgUFJPUF9JU19FUEhFTUVSQUwsCisjZW5kaWYKICAgICBQUk9QX0lTX0NP
TlRST0xMRURfQllfQVVUT01BVElPTiwKICAgICBQUk9QX0FVVE9NQVRJT05fUFJFU0VOVEFUSU9O
X1RZUEUsCiAgICAgUFJPUF9FRElUQUJMRSwKQEAgLTI3Myw3ICsyODIsOSBAQCBzdHJ1Y3QgX1dl
YktpdFdlYlZpZXdQcml2YXRlIHsKICAgICBDU3RyaW5nIGFjdGl2ZVVSSTsKICAgICBib29sIGlz
QWN0aXZlVVJJQ2hhbmdlQmxvY2tlZDsKICAgICBib29sIGlzTG9hZGluZzsKKyNpZiAhRU5BQkxF
KDIwMjJfR0xJQl9BUEkpCiAgICAgYm9vbCBpc0VwaGVtZXJhbDsKKyNlbmRpZgogICAgIGJvb2wg
aXNDb250cm9sbGVkQnlBdXRvbWF0aW9uOwogICAgIFdlYktpdEF1dG9tYXRpb25Ccm93c2luZ0Nv
bnRleHRQcmVzZW50YXRpb24gYXV0b21hdGlvblByZXNlbnRhdGlvblR5cGU7CiAKQEAgLTMxMiw3
ICszMjMsMTEgQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3UHJpdmF0ZSB7CiAKICAgICBHUmVmUHRy
PFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdD4gYXV0aGVudGljYXRpb25SZXF1ZXN0OwogCisj
aWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgR1JlZlB0cjxXZWJLaXROZXR3b3JrU2Vzc2lv
bj4gbmV0d29ya1Nlc3Npb247CisjZWxzZQogICAgIEdSZWZQdHI8V2ViS2l0V2Vic2l0ZURhdGFN
YW5hZ2VyPiB3ZWJzaXRlRGF0YU1hbmFnZXI7CisjZW5kaWYKICAgICBHUmVmUHRyPFdlYktpdFdl
YnNpdGVQb2xpY2llcz4gd2Vic2l0ZVBvbGljaWVzOwogCiAgICAgQ1N0cmluZyBkZWZhdWx0Q29u
dGVudFNlY3VyaXR5UG9saWN5OwpAQCAtNTgxLDYgKzU5NiwxNSBAQCBzdGF0aWMgdm9pZCB1c2Vy
QWdlbnRDaGFuZ2VkKFdlYktpdFNldHRpbmdzKiBzZXR0aW5ncywgR1BhcmFtU3BlYyosIFdlYktp
dFdlYlZpZQogICAgIGdldFBhZ2Uod2ViVmlldykuc2V0Q3VzdG9tVXNlckFnZW50KFN0cmluZzo6
ZnJvbVVURjgod2Via2l0X3NldHRpbmdzX2dldF91c2VyX2FnZW50KHNldHRpbmdzKSkpOwogfQog
CitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0lzRXBoZW1lcmFsKFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcpCit7CisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgcmV0dXJuIHdlYmtp
dF9uZXR3b3JrX3Nlc3Npb25faXNfZXBoZW1lcmFsKHdlYlZpZXctPnByaXYtPm5ldHdvcmtTZXNz
aW9uLmdldCgpKTsKKyNlbHNlCisgICAgcmV0dXJuIHdlYlZpZXctPnByaXYtPmlzRXBoZW1lcmFs
OworI2VuZGlmCit9CisKICNpZiBQTEFURk9STShHVEspCiBzdGF0aWMgdm9pZCBlbmFibGVCYWNr
Rm9yd2FyZE5hdmlnYXRpb25HZXN0dXJlc0NoYW5nZWQoV2ViS2l0U2V0dGluZ3MqIHNldHRpbmdz
LCBHUGFyYW1TcGVjKiwgV2ViS2l0V2ViVmlldyogd2ViVmlldykKIHsKQEAgLTYxOSwxNCArNjQz
LDI2IEBAIHN0YXRpYyB2b2lkIGdvdEZhdmljb25DYWxsYmFjayhHT2JqZWN0KiBvYmplY3QsIEdB
c3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1CiAgICAgd2ViVmlldy0+cHJpdi0+ZmF2aWNv
bkNhbmNlbGxhYmxlID0gMDsKIH0KIAorc3RhdGljIFdlYktpdEZhdmljb25EYXRhYmFzZSogd2Vi
a2l0V2ViVmlld0dldEZhdmljb25EYXRhYmFzZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQorewor
I2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIHJldHVybiB3ZWJraXRfd2Vic2l0ZV9kYXRh
X21hbmFnZXJfZ2V0X2Zhdmljb25fZGF0YWJhc2Uod2Via2l0V2ViVmlld0dldFdlYnNpdGVEYXRh
TWFuYWdlcih3ZWJWaWV3KSk7CisjZWxzZQorICAgIHJldHVybiB3ZWJraXRfd2ViX2NvbnRleHRf
Z2V0X2Zhdmljb25fZGF0YWJhc2UocHJpdi0+Y29udGV4dC5nZXQoKSk7CisjZW5kaWYKK30KKwog
c3RhdGljIHZvaWQgd2Via2l0V2ViVmlld1JlcXVlc3RGYXZpY29uKFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcpCiB7CiAgICAgd2Via2l0V2ViVmlld0NhbmNlbEZhdmljb25SZXF1ZXN0KHdlYlZpZXcp
OwogCiAgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSB3ZWJWaWV3LT5wcml2OworICAg
IGF1dG8qIGRhdGFiYXNlID0gd2Via2l0V2ViVmlld0dldEZhdmljb25EYXRhYmFzZSh3ZWJWaWV3
KTsKKyAgICBpZiAoIWRhdGFiYXNlKQorICAgICAgICByZXR1cm47CisKICAgICBwcml2LT5mYXZp
Y29uQ2FuY2VsbGFibGUgPSBhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSk7Ci0gICAgV2Vi
S2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2
aWNvbl9kYXRhYmFzZShwcml2LT5jb250ZXh0LmdldCgpKTsKLSAgICB3ZWJraXRGYXZpY29uRGF0
YWJhc2VHZXRGYXZpY29uSW50ZXJuYWwoZGF0YWJhc2UsIHByaXYtPmFjdGl2ZVVSSS5kYXRhKCks
IHByaXYtPmlzRXBoZW1lcmFsLCBwcml2LT5mYXZpY29uQ2FuY2VsbGFibGUuZ2V0KCksIGdvdEZh
dmljb25DYWxsYmFjaywgd2ViVmlldyk7CisgICAgd2Via2l0RmF2aWNvbkRhdGFiYXNlR2V0RmF2
aWNvbkludGVybmFsKGRhdGFiYXNlLCBwcml2LT5hY3RpdmVVUkkuZGF0YSgpLCB3ZWJraXRXZWJW
aWV3SXNFcGhlbWVyYWwod2ViVmlldyksIHByaXYtPmZhdmljb25DYW5jZWxsYWJsZS5nZXQoKSwg
Z290RmF2aWNvbkNhbGxiYWNrLCB3ZWJWaWV3KTsKIH0KIAogc3RhdGljIHZvaWQgd2Via2l0V2Vi
Vmlld1VwZGF0ZUZhdmljb25VUkkoV2ViS2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgY2hhciog
ZmF2aWNvblVSSSkKQEAgLTcwMSwxNiArNzM3LDExIEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZp
ZXdXYXRjaEZvckNoYW5nZXNJbkZhdmljb24oV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAgICBp
ZiAocHJpdi0+ZmF2aWNvbkNoYW5nZWRIYW5kbGVySUQpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0
X2Zhdmljb25fZGF0YWJhc2UocHJpdi0+Y29udGV4dC5nZXQoKSk7Ci0gICAgcHJpdi0+ZmF2aWNv
bkNoYW5nZWRIYW5kbGVySUQgPSBnX3NpZ25hbF9jb25uZWN0KGRhdGFiYXNlLCAiZmF2aWNvbi1j
aGFuZ2VkIiwgR19DQUxMQkFDSyhmYXZpY29uQ2hhbmdlZENhbGxiYWNrKSwgd2ViVmlldyk7Ci19
CisgICAgYXV0byogZGF0YWJhc2UgPSB3ZWJraXRXZWJWaWV3R2V0RmF2aWNvbkRhdGFiYXNlKHdl
YlZpZXcpOworICAgIGlmICghZGF0YWJhc2UpCisgICAgICAgIHJldHVybjsKIAotc3RhdGljIHZv
aWQgd2Via2l0V2ViVmlld0Rpc2Nvbm5lY3RGYXZpY29uRGF0YWJhc2VTaWduYWxIYW5kbGVycyhX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQotewotICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2
ID0gd2ViVmlldy0+cHJpdjsKLSAgICBpZiAocHJpdi0+ZmF2aWNvbkNoYW5nZWRIYW5kbGVySUQp
Ci0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCh3ZWJraXRfd2ViX2NvbnRleHRf
Z2V0X2Zhdmljb25fZGF0YWJhc2UocHJpdi0+Y29udGV4dC5nZXQoKSksIHByaXYtPmZhdmljb25D
aGFuZ2VkSGFuZGxlcklEKTsKLSAgICBwcml2LT5mYXZpY29uQ2hhbmdlZEhhbmRsZXJJRCA9IDA7
CisgICAgcHJpdi0+ZmF2aWNvbkNoYW5nZWRIYW5kbGVySUQgPSBnX3NpZ25hbF9jb25uZWN0X29i
amVjdChkYXRhYmFzZSwgImZhdmljb24tY2hhbmdlZCIsIEdfQ0FMTEJBQ0soZmF2aWNvbkNoYW5n
ZWRDYWxsYmFjayksIHdlYlZpZXcsIEdfQ09OTkVDVF9ERUZBVUxUKTsKIH0KICNlbmRpZgogCkBA
IC03MjIsMTIgKzc1MywxNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3Q29uc3RydWN0ZWQo
R09iamVjdCogb2JqZWN0KQogICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gd2ViVmll
dy0+cHJpdjsKICAgICBpZiAocHJpdi0+cmVsYXRlZFZpZXcpIHsKICAgICAgICAgcHJpdi0+Y29u
dGV4dCA9IHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dChwcml2LT5yZWxhdGVkVmlldyk7Cisg
ICAgICAgIHByaXYtPm5ldHdvcmtTZXNzaW9uID0gd2Via2l0X3dlYl92aWV3X2dldF9uZXR3b3Jr
X3Nlc3Npb24ocHJpdi0+cmVsYXRlZFZpZXcpOworI2lmICFFTkFCTEUoMjAyMl9HTElCX0FQSSkK
ICAgICAgICAgcHJpdi0+aXNFcGhlbWVyYWwgPSB3ZWJraXRfd2ViX3ZpZXdfaXNfZXBoZW1lcmFs
KHByaXYtPnJlbGF0ZWRWaWV3KTsKKyNlbmRpZgogICAgICAgICBwcml2LT5pc0NvbnRyb2xsZWRC
eUF1dG9tYXRpb24gPSB3ZWJraXRfd2ViX3ZpZXdfaXNfY29udHJvbGxlZF9ieV9hdXRvbWF0aW9u
KHByaXYtPnJlbGF0ZWRWaWV3KTsKICAgICB9IGVsc2UgaWYgKCFwcml2LT5jb250ZXh0KQogICAg
ICAgICBwcml2LT5jb250ZXh0ID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCk7Cisj
aWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogICAgIGVsc2UgaWYgKCFwcml2LT5pc0VwaGVtZXJh
bCkKICAgICAgICAgcHJpdi0+aXNFcGhlbWVyYWwgPSB3ZWJraXRfd2ViX2NvbnRleHRfaXNfZXBo
ZW1lcmFsKHByaXYtPmNvbnRleHQuZ2V0KCkpOworI2VuZGlmCiAKICAgICBpZiAoIXByaXYtPnNl
dHRpbmdzKQogICAgICAgICBwcml2LT5zZXR0aW5ncyA9IGFkb3B0R1JlZih3ZWJraXRfc2V0dGlu
Z3NfbmV3KCkpOwpAQCAtNzM1LDYgKzc3MSwxNCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3
Q29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQogICAgIGlmICghcHJpdi0+dXNlckNvbnRlbnRN
YW5hZ2VyKQogICAgICAgICBwcml2LT51c2VyQ29udGVudE1hbmFnZXIgPSBhZG9wdEdSZWYod2Vi
a2l0X3VzZXJfY29udGVudF9tYW5hZ2VyX25ldygpKTsKIAorI2lmIEVOQUJMRSgyMDIyX0dMSUJf
QVBJKQorI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQorICAgIGlmIChwcml2LT5pc0NvbnRy
b2xsZWRCeUF1dG9tYXRpb24pCisgICAgICAgIHByaXYtPm5ldHdvcmtTZXNzaW9uID0gd2Via2l0
V2ViQ29udGV4dEdldE5ldHdvcmtTZXNzaW9uRm9yQXV0b21hdGlvbihwcml2LT5jb250ZXh0Lmdl
dCgpKTsKKyNlbmRpZgorICAgIGlmICghcHJpdi0+bmV0d29ya1Nlc3Npb24pCisgICAgICAgIHBy
aXYtPm5ldHdvcmtTZXNzaW9uID0gd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfZGVmYXVsdCgp
OworI2Vsc2UKICAgICBpZiAocHJpdi0+aXNFcGhlbWVyYWwgJiYgIXdlYmtpdF93ZWJfY29udGV4
dF9pc19lcGhlbWVyYWwocHJpdi0+Y29udGV4dC5nZXQoKSkpIHsKICAgICAgICAgcHJpdi0+d2Vi
c2l0ZURhdGFNYW5hZ2VyID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9u
ZXdfZXBoZW1lcmFsKCkpOwogICAgICAgICBhdXRvKiBjb250ZXh0RGF0YU1hbmFnZXIgPSB3ZWJr
aXRfd2ViX2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHByaXYtPmNvbnRleHQuZ2V0
KCkpOwpAQCAtNzQyLDYgKzc4Niw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdDb25zdHJ1
Y3RlZChHT2JqZWN0KiBvYmplY3QpCiAgICAgICAgIGF1dG8gcHJveHlTZXR0aW5ncyA9IHdlYmtp
dFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShjb250ZXh0RGF0YU1hbmFnZXIpLm5ldHdv
cmtQcm94eVNldHRpbmdzKCk7CiAgICAgICAgIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERh
dGFTdG9yZShwcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkpLnNldE5ldHdvcmtQcm94eVNl
dHRpbmdzKFdURk1vdmUocHJveHlTZXR0aW5ncykpOwogICAgIH0KKyNlbmRpZgogCiAgICAgaWYg
KCFwcml2LT53ZWJzaXRlUG9saWNpZXMpCiAgICAgICAgIHByaXYtPndlYnNpdGVQb2xpY2llcyA9
IGFkb3B0R1JlZih3ZWJraXRfd2Vic2l0ZV9wb2xpY2llc19uZXcoKSk7CkBAIC04MjQsMTIgKzg2
OSwyMSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3U2V0UHJvcGVydHkoR09iamVjdCogb2Jq
ZWN0LCBndWludCBwcm9wSWQsIGNvbnN0IEdWYWx1ZQogICAgICAgICB3ZWJWaWV3LT5wcml2LT51
c2VyQ29udGVudE1hbmFnZXIgPSB1c2VyQ29udGVudE1hbmFnZXIgPyBXRUJLSVRfVVNFUl9DT05U
RU5UX01BTkFHRVIodXNlckNvbnRlbnRNYW5hZ2VyKSA6IG51bGxwdHI7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICBjYXNlIFBST1BfTkVUV09S
S19TRVNTSU9OOiB7CisgICAgICAgIGdwb2ludGVyIG5ldHdvcmtTZXNzaW9uID0gZ192YWx1ZV9n
ZXRfb2JqZWN0KHZhbHVlKTsKKyAgICAgICAgd2ViVmlldy0+cHJpdi0+bmV0d29ya1Nlc3Npb24g
PSBuZXR3b3JrU2Vzc2lvbiA/IFdFQktJVF9ORVRXT1JLX1NFU1NJT04obmV0d29ya1Nlc3Npb24p
IDogbnVsbHB0cjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorI2VuZGlmCiAgICAgY2FzZSBQUk9Q
X1pPT01fTEVWRUw6CiAgICAgICAgIHdlYmtpdF93ZWJfdmlld19zZXRfem9vbV9sZXZlbCh3ZWJW
aWV3LCBnX3ZhbHVlX2dldF9kb3VibGUodmFsdWUpKTsKICAgICAgICAgYnJlYWs7CisjaWYgIUVO
QUJMRSgyMDIyX0dMSUJfQVBJKQogICAgIGNhc2UgUFJPUF9JU19FUEhFTUVSQUw6CiAgICAgICAg
IHdlYlZpZXctPnByaXYtPmlzRXBoZW1lcmFsID0gZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSk7
CiAgICAgICAgIGJyZWFrOworI2VuZGlmCiAgICAgY2FzZSBQUk9QX0lTX0NPTlRST0xMRURfQllf
QVVUT01BVElPTjoKICAgICAgICAgd2ViVmlldy0+cHJpdi0+aXNDb250cm9sbGVkQnlBdXRvbWF0
aW9uID0gZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSk7CiAgICAgICAgIGJyZWFrOwpAQCAtODg0
LDYgKzkzOCwxMSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3R2V0UHJvcGVydHkoR09iamVj
dCogb2JqZWN0LCBndWludCBwcm9wSWQsIEdWYWx1ZSogdmFsdQogICAgIGNhc2UgUFJPUF9VU0VS
X0NPTlRFTlRfTUFOQUdFUjoKICAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3VzZXJfY29udGVudF9tYW5hZ2VyKHdlYlZpZXcpKTsKICAgICAgICAg
YnJlYWs7CisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgY2FzZSBQUk9QX05FVFdPUktf
U0VTU0lPTjoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X25ldHdvcmtfc2Vzc2lvbih3ZWJWaWV3KSk7CisgICAgICAgIGJyZWFrOworI2VuZGlm
CiAgICAgY2FzZSBQUk9QX1RJVExFOgogICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUs
IHdlYlZpZXctPnByaXYtPnRpdGxlLmRhdGEoKSk7CiAgICAgICAgIGJyZWFrOwpAQCAtOTA3LDkg
Kzk2NiwxMSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3R2V0UHJvcGVydHkoR09iamVjdCog
b2JqZWN0LCBndWludCBwcm9wSWQsIEdWYWx1ZSogdmFsdQogICAgIGNhc2UgUFJPUF9JU19QTEFZ
SU5HX0FVRElPOgogICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfd2Vi
X3ZpZXdfaXNfcGxheWluZ19hdWRpbyh3ZWJWaWV3KSk7CiAgICAgICAgIGJyZWFrOworI2lmICFF
TkFCTEUoMjAyMl9HTElCX0FQSSkKICAgICBjYXNlIFBST1BfSVNfRVBIRU1FUkFMOgogICAgICAg
ICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfd2ViX3ZpZXdfaXNfZXBoZW1lcmFs
KHdlYlZpZXcpKTsKICAgICAgICAgYnJlYWs7CisjZW5kaWYKICAgICBjYXNlIFBST1BfSVNfQ09O
VFJPTExFRF9CWV9BVVRPTUFUSU9OOgogICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVl
LCB3ZWJraXRfd2ViX3ZpZXdfaXNfY29udHJvbGxlZF9ieV9hdXRvbWF0aW9uKHdlYlZpZXcpKTsK
ICAgICAgICAgYnJlYWs7CkBAIC05NTcsNyArMTAxOCw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdl
YlZpZXdEaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKIAogI2lmIFBMQVRGT1JNKEdUSykKICAgICB3
ZWJraXRXZWJWaWV3Q2FuY2VsRmF2aWNvblJlcXVlc3Qod2ViVmlldyk7Ci0gICAgd2Via2l0V2Vi
Vmlld0Rpc2Nvbm5lY3RGYXZpY29uRGF0YWJhc2VTaWduYWxIYW5kbGVycyh3ZWJWaWV3KTsKKyAg
ICB3ZWJWaWV3LT5wcml2LT5mYXZpY29uQ2hhbmdlZEhhbmRsZXJJRCA9IDA7CiAjZW5kaWYKIAog
ICAgIHdlYmtpdFdlYlZpZXdEaXNjb25uZWN0U2V0dGluZ3NTaWduYWxIYW5kbGVycyh3ZWJWaWV3
KTsKQEAgLTEwODMsNiArMTE0NCwyMyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xh
c3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICAgICAgICAgIFdF
QktJVF9UWVBFX1VTRVJfQ09OVEVOVF9NQU5BR0VSLAogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
R1BhcmFtRmxhZ3M+KFdFQktJVF9QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9P
TkxZKSk7CiAKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICAvKioKKyAgICAgKiBXZWJL
aXRXZWJWaWV3Om5ldHdvcmstc2Vzc2lvbjoKKyAgICAgKgorICAgICAqIFRoZSAjV2ViS2l0TmV0
d29ya1Nlc3Npb24gb2YgdGhlIHZpZXcKKyAgICAgKgorICAgICAqIFNpbmNlOiAyLjQwCisgICAg
ICovCisgICAgc09ialByb3BlcnRpZXNbUFJPUF9ORVRXT1JLX1NFU1NJT05dPQorICAgICAgICBn
X3BhcmFtX3NwZWNfb2JqZWN0KAorICAgICAgICAgICAgIm5ldHdvcmstc2Vzc2lvbiIsCisgICAg
ICAgICAgICBfKCJXZWJWaWV3IG5ldHdvcmsgc2Vzc2lvbiIpLAorICAgICAgICAgICAgXygiVGhl
IFdlYktpdE5ldHdvcmtTZXNzaW9uIG9mIHRoZSB2aWV3IiksCisgICAgICAgICAgICBXRUJLSVRf
VFlQRV9ORVRXT1JLX1NFU1NJT04sCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxHUGFyYW1GbGFn
cz4oV0VCS0lUX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKTsKKyNl
bmRpZgorCiAgICAgLyoqCiAgICAgICogV2ViS2l0V2ViVmlldzp0aXRsZToKICAgICAgKgpAQCAt
MTE4OCw2ICsxMjY2LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQo
V2ViS2l0V2ViVmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiAgICAgICAgICAgICBGQUxTRSwKICAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSk7CiAKKyNpZiAhRU5BQkxFKDIwMjJfR0xJ
Ql9BUEkpCiAgICAgLyoqCiAgICAgICogV2ViS2l0V2ViVmlldzppcy1lcGhlbWVyYWw6CiAgICAg
ICoKQEAgLTEyMTIsNiArMTI5MSw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFz
c19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQogICAgICAgICAgICAgbnVs
bHB0ciwgbnVsbHB0ciwKICAgICAgICAgICAgIEZBTFNFLAogICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8R1BhcmFtRmxhZ3M+KFdFQktJVF9QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVD
VF9PTkxZKSk7CisjZW5kaWYKIAogICAgIC8qKgogICAgICAqIFdlYktpdFdlYlZpZXc6aXMtY29u
dHJvbGxlZC1ieS1hdXRvbWF0aW9uOgpAQCAtMjMzNCw5ICsyNDE0LDEwIEBAIHZvaWQgd2Via2l0
V2ViVmlld0xvYWRDaGFuZ2VkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdExvYWRFdmVu
dCBsb2FkRXZlbnQpCiAgICAgICAgICAgICBnX29iamVjdF9ub3RpZnlfYnlfcHNwZWMoR19PQkpF
Q1Qod2ViVmlldyksIHNPYmpQcm9wZXJ0aWVzW1BST1BfVVJJXSk7CiAgICAgICAgIH0KICNpZiBQ
TEFURk9STShHVEspCi0gICAgICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3
ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2UocHJpdi0+Y29udGV4dC5nZXQo
KSk7Ci0gICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gZmF2aWNvblVSSSh3ZWJraXRfZmF2aWNvbl9k
YXRhYmFzZV9nZXRfZmF2aWNvbl91cmkoZGF0YWJhc2UsIHByaXYtPmFjdGl2ZVVSSS5kYXRhKCkp
KTsKLSAgICAgICAgd2Via2l0V2ViVmlld1VwZGF0ZUZhdmljb25VUkkod2ViVmlldywgZmF2aWNv
blVSSS5nZXQoKSk7CisgICAgICAgIGlmIChhdXRvKiBkYXRhYmFzZSA9IHdlYmtpdFdlYlZpZXdH
ZXRGYXZpY29uRGF0YWJhc2Uod2ViVmlldykpIHsKKyAgICAgICAgICAgIEdVbmlxdWVQdHI8Y2hh
cj4gZmF2aWNvblVSSSh3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl91cmkoZGF0
YWJhc2UsIHByaXYtPmFjdGl2ZVVSSS5kYXRhKCkpKTsKKyAgICAgICAgICAgIHdlYmtpdFdlYlZp
ZXdVcGRhdGVGYXZpY29uVVJJKHdlYlZpZXcsIGZhdmljb25VUkkuZ2V0KCkpOworICAgICAgICB9
CiAjZW5kaWYKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMjM2Myw4ICsyNDQ0LDEyIEBAIHZv
aWQgd2Via2l0V2ViVmlld0xvYWRGYWlsZWRXaXRoVExTRXJyb3JzKFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcsIGNvbnN0IGNoYXIqIGZhCiB7CiAgICAgd2Via2l0V2ViVmlld0NvbXBsZXRlQXV0aGVu
dGljYXRpb25SZXF1ZXN0KHdlYlZpZXcpOwogCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisg
ICAgV2ViS2l0VExTRXJyb3JzUG9saWN5IHRsc0Vycm9yc1BvbGljeSA9IHdlYmtpdF9uZXR3b3Jr
X3Nlc3Npb25fZ2V0X3Rsc19lcnJvcnNfcG9saWN5KHdlYlZpZXctPnByaXYtPm5ldHdvcmtTZXNz
aW9uLmdldCgpKTsKKyNlbHNlCiAgICAgYXV0byogd2Vic2l0ZURhdGFNYW5hZ2VyID0gd2Via2l0
X3dlYl92aWV3X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcih3ZWJWaWV3KTsKICAgICBXZWJLaXRU
TFNFcnJvcnNQb2xpY3kgdGxzRXJyb3JzUG9saWN5ID0gd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5h
Z2VyX2dldF90bHNfZXJyb3JzX3BvbGljeSh3ZWJzaXRlRGF0YU1hbmFnZXIpOworI2VuZGlmCiAg
ICAgaWYgKHRsc0Vycm9yc1BvbGljeSA9PSBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfRkFJTCkg
ewogICAgICAgICBnYm9vbGVhbiByZXR1cm5WYWx1ZTsKICAgICAgICAgZ19zaWduYWxfZW1pdCh3
ZWJWaWV3LCBzaWduYWxzW0xPQURfRkFJTEVEX1dJVEhfVExTX0VSUk9SU10sIDAsIGZhaWxpbmdV
UkksIGNlcnRpZmljYXRlLCB0bHNFcnJvcnMsICZyZXR1cm5WYWx1ZSk7CkBAIC0yMzgzLDE0ICsy
NDY4LDIxIEBAIHZvaWQgd2Via2l0V2ViVmlld0dldExvYWREZWNpc2lvbkZvckljb24oV2ViS2l0
V2ViVmlldyogd2ViVmlldywgY29uc3QgTGlua0ljb24mCiAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBXZWJLaXRGYXZpY29uRGF0
YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNl
KHdlYlZpZXctPnByaXYtPmNvbnRleHQuZ2V0KCkpOwotICAgIHdlYmtpdEZhdmljb25EYXRhYmFz
ZUdldExvYWREZWNpc2lvbkZvckljb24oZGF0YWJhc2UsIGljb24sIGdldFBhZ2Uod2ViVmlldyku
cGFnZUxvYWRTdGF0ZSgpLmFjdGl2ZVVSTCgpLCB3ZWJWaWV3LT5wcml2LT5pc0VwaGVtZXJhbCwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworCisgICAgYXV0byogZGF0YWJhc2UgPSB3ZWJr
aXRXZWJWaWV3R2V0RmF2aWNvbkRhdGFiYXNlKHdlYlZpZXcpOworICAgIGlmICghZGF0YWJhc2Up
CisgICAgICAgIHJldHVybjsKKworICAgIHdlYmtpdEZhdmljb25EYXRhYmFzZUdldExvYWREZWNp
c2lvbkZvckljb24oZGF0YWJhc2UsIGljb24sIGdldFBhZ2Uod2ViVmlldykucGFnZUxvYWRTdGF0
ZSgpLmFjdGl2ZVVSTCgpLCB3ZWJraXRXZWJWaWV3SXNFcGhlbWVyYWwod2ViVmlldyksIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAogdm9pZCB3ZWJraXRXZWJWaWV3U2V0SWNvbihX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBMaW5rSWNvbiYgaWNvbiwgQVBJOjpEYXRhJiBp
Y29uRGF0YSkKIHsKLSAgICBXZWJLaXRGYXZpY29uRGF0YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0
X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlKHdlYlZpZXctPnByaXYtPmNvbnRleHQu
Z2V0KCkpOwotICAgIHdlYmtpdEZhdmljb25EYXRhYmFzZVNldEljb25Gb3JQYWdlVVJMKGRhdGFi
YXNlLCBpY29uLCBpY29uRGF0YSwgZ2V0UGFnZSh3ZWJWaWV3KS5wYWdlTG9hZFN0YXRlKCkuYWN0
aXZlVVJMKCksIHdlYlZpZXctPnByaXYtPmlzRXBoZW1lcmFsKTsKKyAgICBhdXRvKiBkYXRhYmFz
ZSA9IHdlYmtpdFdlYlZpZXdHZXRGYXZpY29uRGF0YWJhc2Uod2ViVmlldyk7CisgICAgaWYgKCFk
YXRhYmFzZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgd2Via2l0RmF2aWNvbkRhdGFiYXNlU2V0
SWNvbkZvclBhZ2VVUkwoZGF0YWJhc2UsIGljb24sIGljb25EYXRhLCBnZXRQYWdlKHdlYlZpZXcp
LnBhZ2VMb2FkU3RhdGUoKS5hY3RpdmVVUkwoKSwgd2Via2l0V2ViVmlld0lzRXBoZW1lcmFsKHdl
YlZpZXcpKTsKIH0KICNlbmRpZgogCkBAIC0yNzAyLDkgKzI3OTQsMTMgQEAgdm9pZCB3ZWJraXRX
ZWJWaWV3U3VibWl0Rm9ybVJlcXVlc3QoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0Rm9y
bVN1Ym1pc3Npb24KIAogdm9pZCB3ZWJraXRXZWJWaWV3SGFuZGxlQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UoV2ViS2l0V2ViVmlldyogd2ViVmlldywgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94
eSogYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpCiB7CisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkp
CisgICAgYm9vbCBjcmVkZW5pYWxTdG9yYWdlRW5hYmxlZCA9IHdlYmtpdF9uZXR3b3JrX3Nlc3Np
b25fZ2V0X3BlcnNpc3RlbnRfY3JlZGVudGlhbF9zdG9yYWdlX2VuYWJsZWQod2ViVmlldy0+cHJp
di0+bmV0d29ya1Nlc3Npb24uZ2V0KCkpOworI2Vsc2UKICAgICBhdXRvKiB3ZWJzaXRlRGF0YU1h
bmFnZXIgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYlZpZXcp
OwotICAgIHdlYlZpZXctPnByaXYtPmF1dGhlbnRpY2F0aW9uUmVxdWVzdCA9IGFkb3B0R1JlZih3
ZWJraXRBdXRoZW50aWNhdGlvblJlcXVlc3RDcmVhdGUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2Us
Ci0gICAgICAgIHdlYlZpZXctPnByaXYtPmlzRXBoZW1lcmFsLCB3ZWJraXRfd2Vic2l0ZV9kYXRh
X21hbmFnZXJfZ2V0X3BlcnNpc3RlbnRfY3JlZGVudGlhbF9zdG9yYWdlX2VuYWJsZWQod2Vic2l0
ZURhdGFNYW5hZ2VyKSkpOworICAgIGJvb2wgY3JlZGVuaWFsU3RvcmFnZUVuYWJsZWQgPSB3ZWJr
aXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X3BlcnNpc3RlbnRfY3JlZGVudGlhbF9zdG9yYWdl
X2VuYWJsZWQod2Vic2l0ZURhdGFNYW5hZ2VyKTsKKyNlbmRpZgorICAgIHdlYlZpZXctPnByaXYt
PmF1dGhlbnRpY2F0aW9uUmVxdWVzdCA9IGFkb3B0R1JlZih3ZWJraXRBdXRoZW50aWNhdGlvblJl
cXVlc3RDcmVhdGUoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UsIHdlYmtpdFdlYlZpZXdJc0VwaGVt
ZXJhbCh3ZWJWaWV3KSwgY3JlZGVuaWFsU3RvcmFnZUVuYWJsZWQpKTsKICAgICBnYm9vbGVhbiBy
ZXR1cm5WYWx1ZTsKICAgICBnX3NpZ25hbF9lbWl0KHdlYlZpZXcsIHNpZ25hbHNbQVVUSEVOVElD
QVRFXSwgMCwgd2ViVmlldy0+cHJpdi0+YXV0aGVudGljYXRpb25SZXF1ZXN0LmdldCgpLCAmcmV0
dXJuVmFsdWUpOwogfQpAQCAtMjc0MCw3ICsyODM2LDExIEBAIHZvaWQgd2Via2l0V2ViVmlld1Nl
bGVjdGlvbkRpZENoYW5nZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogCiBXZWJLaXRXZWJzaXRl
RGF0YU1hbmFnZXIqIHdlYmtpdFdlYlZpZXdHZXRXZWJzaXRlRGF0YU1hbmFnZXIoV2ViS2l0V2Vi
Vmlldyogd2ViVmlldykKIHsKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICByZXR1cm4g
d2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIod2ViVmlldy0+
cHJpdi0+bmV0d29ya1Nlc3Npb24uZ2V0KCkpOworI2Vsc2UKICAgICByZXR1cm4gd2ViVmlldy0+
cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpOworI2VuZGlmCiB9CiAKICNpZiBQTEFURk9S
TShHVEspCkBAIC0yODg4LDYgKzI5ODgsNyBAQCBXZWJLaXRVc2VyQ29udGVudE1hbmFnZXIqIHdl
YmtpdF93ZWJfdmlld19nZXRfdXNlcl9jb250ZW50X21hbmFnZXIoV2ViS2l0V2ViVmlldwogICAg
IHJldHVybiB3ZWJWaWV3LT5wcml2LT51c2VyQ29udGVudE1hbmFnZXIuZ2V0KCk7CiB9CiAKKyNp
ZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAvKioKICAqIHdlYmtpdF93ZWJfdmlld19pc19lcGhl
bWVyYWw6CiAgKiBAd2ViX3ZpZXc6IGEgI1dlYktpdFdlYlZpZXcKQEAgLTI5MTAsNiArMzAxMSw3
IEBAIGdib29sZWFuIHdlYmtpdF93ZWJfdmlld19pc19lcGhlbWVyYWwoV2ViS2l0V2ViVmlldyog
d2ViVmlldykKIAogICAgIHJldHVybiB3ZWJWaWV3LT5wcml2LT5pc0VwaGVtZXJhbDsKIH0KKyNl
bmRpZgogCiAvKioKICAqIHdlYmtpdF93ZWJfdmlld19pc19jb250cm9sbGVkX2J5X2F1dG9tYXRp
b246CkBAIC0yOTQ5LDYgKzMwNTEsMjQgQEAgV2ViS2l0QXV0b21hdGlvbkJyb3dzaW5nQ29udGV4
dFByZXNlbnRhdGlvbiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2F1dG9tYXRpb25fcHJlc2UKICAgICBy
ZXR1cm4gd2ViVmlldy0+cHJpdi0+YXV0b21hdGlvblByZXNlbnRhdGlvblR5cGU7CiB9CiAKKyNp
ZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKy8qKgorICogd2Via2l0X3dlYl92aWV3X2dldF9uZXR3
b3JrX3Nlc3Npb246CisgKiBAd2ViX3ZpZXc6IGEgI1dlYktpdFdlYlZpZXcKKyAqCisgKiBHZXQg
dGhlICNXZWJLaXROZXR3b3JrU2Vzc2lvbiBhc3NvY2lhdGVkIHRvIEB3ZWJfdmlldy4KKyAqCisg
KiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IGEgI1dlYktpdE5ldHdvcmtTZXNzaW9uCisgKgor
ICogU2luY2U6IDIuNDAKKyAqLworV2ViS2l0TmV0d29ya1Nlc3Npb24qIHdlYmtpdF93ZWJfdmll
d19nZXRfbmV0d29ya19zZXNzaW9uKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCBudWxscHRyKTsK
KworICAgIHJldHVybiB3ZWJWaWV3LT5wcml2LT5uZXR3b3JrU2Vzc2lvbi5nZXQoKTsKK30KKyNl
bHNlCiAvKioKICAqIHdlYmtpdF93ZWJfdmlld19nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXI6CiAg
KiBAd2ViX3ZpZXc6IGEgI1dlYktpdFdlYlZpZXcKQEAgLTI5NzIsNiArMzA5Miw3IEBAIFdlYktp
dFdlYnNpdGVEYXRhTWFuYWdlciogd2Via2l0X3dlYl92aWV3X2dldF93ZWJzaXRlX2RhdGFfbWFu
YWdlcihXZWJLaXRXZWJWaWV3CiAKICAgICByZXR1cm4gd2Via2l0X3dlYl9jb250ZXh0X2dldF93
ZWJzaXRlX2RhdGFfbWFuYWdlcih3ZWJWaWV3LT5wcml2LT5jb250ZXh0LmdldCgpKTsKIH0KKyNl
bmRpZgogCiAvKioKICAqIHdlYmtpdF93ZWJfdmlld190cnlfY2xvc2U6CkBAIC00NDE0LDEyICs0
NTM1LDIwIEBAIFdlYktpdERvd25sb2FkKiB3ZWJraXRfd2ViX3ZpZXdfZG93bmxvYWRfdXJpKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IGNoYXIqCiAgICAgYXV0byYgcGFnZSA9IGdldFBh
Z2Uod2ViVmlldyk7CiAgICAgYXV0byYgZG93bmxvYWRQcm94eSA9IHBhZ2UucHJvY2VzcygpLnBy
b2Nlc3NQb29sKCkuZG93bmxvYWQocGFnZS53ZWJzaXRlRGF0YVN0b3JlKCksICZwYWdlLCBSZXNv
dXJjZVJlcXVlc3QgeyBTdHJpbmc6OmZyb21VVEY4KHVyaSkgfSk7CiAgICAgYXV0byBkb3dubG9h
ZCA9IHdlYmtpdERvd25sb2FkQ3JlYXRlKGRvd25sb2FkUHJveHksIHdlYlZpZXcpOworI2lmIEVO
QUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIGRvd25sb2FkUHJveHkuc2V0RGlkU3RhcnRDYWxsYmFj
ayhbc2Vzc2lvbiA9IEdSZWZQdHI8V2ViS2l0TmV0d29ya1Nlc3Npb24+IHsgd2ViVmlldy0+cHJp
di0+bmV0d29ya1Nlc3Npb24gfSwgZG93bmxvYWQgPSBkb3dubG9hZC5nZXQoKV0oYXV0byogZG93
bmxvYWRQcm94eSkgeworI2Vsc2UKICAgICBkb3dubG9hZFByb3h5LnNldERpZFN0YXJ0Q2FsbGJh
Y2soW2NvbnRleHQgPSBHUmVmUHRyPFdlYktpdFdlYkNvbnRleHQ+IHsgd2ViVmlldy0+cHJpdi0+
Y29udGV4dCB9LCBkb3dubG9hZCA9IGRvd25sb2FkLmdldCgpXShhdXRvKiBkb3dubG9hZFByb3h5
KSB7CisjZW5kaWYKICAgICAgICAgaWYgKCFkb3dubG9hZFByb3h5KQogICAgICAgICAgICAgcmV0
dXJuOwogCiAgICAgICAgIHdlYmtpdERvd25sb2FkU3RhcnRlZChkb3dubG9hZCk7CisjaWYgRU5B
QkxFKDIwMjJfR0xJQl9BUEkpCisgICAgICAgIHdlYmtpdE5ldHdvcmtTZXNzaW9uRG93bmxvYWRT
dGFydGVkKHNlc3Npb24uZ2V0KCksIGRvd25sb2FkKTsKKyNlbHNlCiAgICAgICAgIHdlYmtpdFdl
YkNvbnRleHREb3dubG9hZFN0YXJ0ZWQoY29udGV4dC5nZXQoKSwgZG93bmxvYWQpOworI2VuZGlm
CiAgICAgfSk7CiAKICAgICByZXR1cm4gZG93bmxvYWQubGVha1JlZigpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5oLmluIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5oLmluCmluZGV4IDY3
NTdhZjM0YjU0MS4uNzZmNTk3ZTU1NGUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmguaW4KKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5oLmluCkBAIC01NCw2ICs1NCwxMCBAQAogI2lu
Y2x1ZGUgPEBBUElfSU5DTFVERV9QUkVGSVhAL1dlYktpdFdlYnNpdGVQb2xpY2llcy5oPgogI2lu
Y2x1ZGUgPEBBUElfSU5DTFVERV9QUkVGSVhAL1dlYktpdFdpbmRvd1Byb3BlcnRpZXMuaD4KIAor
I2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorI2luY2x1ZGUgPEBBUElfSU5DTFVERV9QUkVGSVhA
L1dlYktpdE5ldHdvcmtTZXNzaW9uLmg+CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKEdUSykKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Jhc2UuaD4KICNpbmNsdWRlIDx3ZWJraXQvV2ViS2l0
Q29sb3JDaG9vc2VyUmVxdWVzdC5oPgpAQCAtNDMyLDggKzQzNiwxMCBAQCBXRUJLSVRfQVBJIFdl
YktpdFdlYlZpZXdCYWNrZW5kICoKIHdlYmtpdF93ZWJfdmlld19nZXRfYmFja2VuZCAgICAgICAg
ICAgICAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3KTsK
ICNlbmRpZgogCisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogV0VCS0lUX0FQSSBnYm9vbGVh
bgogd2Via2l0X3dlYl92aWV3X2lzX2VwaGVtZXJhbCAgICAgICAgICAgICAgICAgICAgICAgICAo
V2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcpOworI2VuZGlmCiAKIFdFQktJVF9B
UEkgZ2Jvb2xlYW4KIHdlYmtpdF93ZWJfdmlld19pc19jb250cm9sbGVkX2J5X2F1dG9tYXRpb24g
ICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3KTsKQEAgLTQ0MSw4
ICs0NDcsMTMgQEAgd2Via2l0X3dlYl92aWV3X2lzX2NvbnRyb2xsZWRfYnlfYXV0b21hdGlvbiAg
ICAgICAgICAoV2ViS2l0V2ViVmlldwogV0VCS0lUX0FQSSBXZWJLaXRBdXRvbWF0aW9uQnJvd3Np
bmdDb250ZXh0UHJlc2VudGF0aW9uCiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2F1dG9tYXRpb25fcHJl
c2VudGF0aW9uX3R5cGUgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7
CiAKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKK1dFQktJVF9BUEkgV2ViS2l0TmV0d29ya1Nl
c3Npb24gKgord2Via2l0X3dlYl92aWV3X2dldF9uZXR3b3JrX3Nlc3Npb24gICAgICAgICAgICAg
ICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcpOworI2Vsc2UKIFdFQktJ
VF9BUEkgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICoKIHdlYmtpdF93ZWJfdmlld19nZXRfd2Vi
c2l0ZV9kYXRhX21hbmFnZXIgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAg
KndlYl92aWV3KTsKKyNlbmRpZgogCiBXRUJLSVRfQVBJIFdlYktpdFdlYkNvbnRleHQgKgogd2Vi
a2l0X3dlYl92aWV3X2dldF9jb250ZXh0ICAgICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0
V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5jcHAK
aW5kZXggMzM5NTkzNDk2OTBkLi5hODAwNjE3M2JkNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2Vy
LmNwcApAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgIldlYktpdFdlYnNpdGVEYXRhTWFuYWdl
ci5oIgogCiAjaW5jbHVkZSAiV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRGYXZpY29uRGF0YWJhc2VQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0SW5pdGlh
bGl6ZS5oIgogI2luY2x1ZGUgIldlYktpdE1lbW9yeVByZXNzdXJlU2V0dGluZ3MuaCIKICNpbmNs
dWRlICJXZWJLaXRNZW1vcnlQcmVzc3VyZVNldHRpbmdzUHJpdmF0ZS5oIgpAQCAtOTQsMTEgKzk1
LDE1IEBAIHN0cnVjdCBfV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZSB7CiAgICAgR1Vu
aXF1ZVB0cjxjaGFyPiBiYXNlRGF0YURpcmVjdG9yeTsKICAgICBHVW5pcXVlUHRyPGNoYXI+IGJh
c2VDYWNoZURpcmVjdG9yeTsKIAorI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIEdSZWZQ
dHI8V2ViS2l0RmF2aWNvbkRhdGFiYXNlPiBmYXZpY29uRGF0YWJhc2U7CisjZW5kaWYKKworI2lm
ICFFTkFCTEUoMjAyMl9HTElCX0FQSSkKICAgICBXZWJLaXRUTFNFcnJvcnNQb2xpY3kgdGxzRXJy
b3JzUG9saWN5OwogCiAgICAgR1JlZlB0cjxXZWJLaXRDb29raWVNYW5hZ2VyPiBjb29raWVNYW5h
Z2VyOwogCi0jaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogICAgIC8vIFRoZXNlIG1hbnVhbCBk
aXJlY3Rvcnkgb3ZlcnJpZGVzIGFyZSBkZXByZWNhdGVkLiBQbGVhc2UgZG9uJ3QgYWRkIG1vcmUu
CiAgICAgR1VuaXF1ZVB0cjxjaGFyPiBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7CiAgICAgR1VuaXF1
ZVB0cjxjaGFyPiBkaXNrQ2FjaGVEaXJlY3Rvcnk7CkBAIC0yMTcsMTIgKzIyMiwxMiBAQCBzdGF0
aWMgdm9pZCB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJTZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmpl
Y3QsIGd1aW50IHByb3BJRCwgYwogICAgIH0KIH0KIAorI2lmICFFTkFCTEUoMjAyMl9HTElCX0FQ
SSkKIHN0YXRpYyB2b2lkIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckNvbnN0cnVjdGVkKEdPYmpl
Y3QqIG9iamVjdCkKIHsKICAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfd2Vic2l0ZV9kYXRhX21h
bmFnZXJfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0ZWQob2JqZWN0KTsKIAogICAgIFdlYktpdFdl
YnNpdGVEYXRhTWFuYWdlclByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCU0lURV9EQVRBX01BTkFH
RVIob2JqZWN0KS0+cHJpdjsKLSNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAgICAgaWYgKHBy
aXYtPmJhc2VEYXRhRGlyZWN0b3J5KSB7CiAgICAgICAgIGlmICghcHJpdi0+bG9jYWxTdG9yYWdl
RGlyZWN0b3J5KQogICAgICAgICAgICAgcHJpdi0+bG9jYWxTdG9yYWdlRGlyZWN0b3J5LnJlc2V0
KGdfYnVpbGRfZmlsZW5hbWUocHJpdi0+YmFzZURhdGFEaXJlY3RvcnkuZ2V0KCksICJsb2NhbHN0
b3JhZ2UiLCBudWxscHRyKSk7CkBAIC0yNDYsMjIgKzI1MSwyMyBAQCBzdGF0aWMgdm9pZCB3ZWJr
aXRXZWJzaXRlRGF0YU1hbmFnZXJDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCiAgICAgICAg
IGlmICghcHJpdi0+ZG9tQ2FjaGVEaXJlY3RvcnkpCiAgICAgICAgICAgICBwcml2LT5kb21DYWNo
ZURpcmVjdG9yeS5yZXNldChnX2J1aWxkX2ZpbGVuYW1lKHByaXYtPmJhc2VDYWNoZURpcmVjdG9y
eS5nZXQoKSwgIkNhY2hlU3RvcmFnZSIsIG51bGxwdHIpKTsKICAgICB9Ci0jZW5kaWYKIAogICAg
IHByaXYtPnRsc0Vycm9yc1BvbGljeSA9IFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9GQUlMOwog
ICAgIGlmIChwcml2LT53ZWJzaXRlRGF0YVN0b3JlKQogICAgICAgICBwcml2LT53ZWJzaXRlRGF0
YVN0b3JlLT5zZXRJZ25vcmVUTFNFcnJvcnMoZmFsc2UpOwogfQorI2VuZGlmCiAKIHN0YXRpYyB2
b2lkIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9jbGFzc19pbml0KFdlYktpdFdlYnNpdGVE
YXRhTWFuYWdlckNsYXNzKiBmaW5kQ2xhc3MpCiB7CiAgICAgd2Via2l0SW5pdGlhbGl6ZSgpOwog
CiAgICAgR09iamVjdENsYXNzKiBnT2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhmaW5kQ2xh
c3MpOwotCiAgICAgZ09iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRXZWJzaXRlRGF0
YU1hbmFnZXJHZXRQcm9wZXJ0eTsKICAgICBnT2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdl
YmtpdFdlYnNpdGVEYXRhTWFuYWdlclNldFByb3BlcnR5OworI2lmICFFTkFCTEUoMjAyMl9HTElC
X0FQSSkKICAgICBnT2JqZWN0Q2xhc3MtPmNvbnN0cnVjdGVkID0gd2Via2l0V2Vic2l0ZURhdGFN
YW5hZ2VyQ29uc3RydWN0ZWQ7CisjZW5kaWYKIAogICAgIC8qKgogICAgICAqIFdlYktpdFdlYnNp
dGVEYXRhTWFuYWdlcjpiYXNlLWRhdGEtZGlyZWN0b3J5OgpAQCAtNTA1LDEyICs1MTEsMjMgQEAg
V2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRh
U3RvcmUoV2ViS2l0V2Vic2l0ZURhdGEKICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24tPnNldENh
Y2hlU3RvcmFnZURpcmVjdG9yeShGaWxlU3lzdGVtOjpzdHJpbmdGcm9tRmlsZVN5c3RlbVJlcHJl
c2VudGF0aW9uKHByaXYtPmRvbUNhY2hlRGlyZWN0b3J5LmdldCgpKSk7CiAjZW5kaWYKICAgICAg
ICAgcHJpdi0+d2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Y3Jl
YXRlKFdURk1vdmUoY29uZmlndXJhdGlvbiksIFBBTDo6U2Vzc2lvbklEOjpnZW5lcmF0ZVBlcnNp
c3RlbnRTZXNzaW9uSUQoKSk7CisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogICAgICAgICBw
cml2LT53ZWJzaXRlRGF0YVN0b3JlLT5zZXRJZ25vcmVUTFNFcnJvcnMocHJpdi0+dGxzRXJyb3Jz
UG9saWN5ID09IFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9JR05PUkUpOworI2VuZGlmCiAgICAg
fQogCiAgICAgcmV0dXJuICpwcml2LT53ZWJzaXRlRGF0YVN0b3JlOwogfQogCisjaWYgRU5BQkxF
KDIwMjJfR0xJQl9BUEkpCitXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIHdlYmtpdFdlYnNpdGVE
YXRhTWFuYWdlckNyZWF0ZShHVW5pcXVlUHRyPGNoYXI+JiYgYmFzZURhdGFEaXJlY3RvcnksIEdV
bmlxdWVQdHI8Y2hhcj4mJiBiYXNlQ2FjaGVEaXJlY3RvcnkpCit7CisgICAgYXV0byogbWFuYWdl
ciA9IFdFQktJVF9XRUJTSVRFX0RBVEFfTUFOQUdFUihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVf
V0VCU0lURV9EQVRBX01BTkFHRVIsIG51bGxwdHIpKTsKKyAgICBtYW5hZ2VyLT5wcml2LT5iYXNl
RGF0YURpcmVjdG9yeSA9IFdURk1vdmUoYmFzZURhdGFEaXJlY3RvcnkpOworICAgIG1hbmFnZXIt
PnByaXYtPmJhc2VDYWNoZURpcmVjdG9yeSA9IFdURk1vdmUoYmFzZUNhY2hlRGlyZWN0b3J5KTsK
KyAgICByZXR1cm4gbWFuYWdlcjsKK30KKyNlbHNlCiAvKioKICAqIHdlYmtpdF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcl9uZXc6CiAgKiBAZmlyc3Rfb3B0aW9uX25hbWU6IG5hbWUgb2YgdGhlIGZpcnN0
IG9wdGlvbiB0byBzZXQKQEAgLTU0OSw2ICs1NjYsNyBAQCBXZWJLaXRXZWJzaXRlRGF0YU1hbmFn
ZXIqIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9uZXdfZXBoZW1lcmFsKCkKIHsKICAgICBy
ZXR1cm4gV0VCS0lUX1dFQlNJVEVfREFUQV9NQU5BR0VSKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQ
RV9XRUJTSVRFX0RBVEFfTUFOQUdFUiwgImlzLWVwaGVtZXJhbCIsIFRSVUUsIG51bGxwdHIpKTsK
IH0KKyNlbmRpZgogCiAvKioKICAqIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9pc19lcGhl
bWVyYWw6CkBAIC04MzgsNyArODU2LDYgQEAgY29uc3QgZ2NoYXIqIHdlYmtpdF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcl9nZXRfZG9tX2NhY2hlX2RpcmVjdG9yeShXZWJLaXRXZWJzaXRlRGEKICAgICAg
ICAgcHJpdi0+ZG9tQ2FjaGVEaXJlY3RvcnkucmVzZXQoZ19zdHJkdXAoV2ViS2l0OjpXZWJzaXRl
RGF0YVN0b3JlOjpkZWZhdWx0Q2FjaGVTdG9yYWdlRGlyZWN0b3J5KCkudXRmOCgpLmRhdGEoKSkp
OwogICAgIHJldHVybiBwcml2LT5kb21DYWNoZURpcmVjdG9yeS5nZXQoKTsKIH0KLSNlbmRpZgog
CiAvKioKICAqIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfY29va2llX21hbmFnZXI6
CkBAIC0xMDE1LDYgKzEwMzIsODggQEAgdm9pZCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJf
c2V0X25ldHdvcmtfcHJveHlfc2V0dGluZ3MoV2ViS2l0V2Vic2l0ZURhdGFNYW4KICAgICAgICAg
YnJlYWs7CiAgICAgfQogfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKK3N0
YXRpYyBTdHJpbmcgd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RmF2aWNvbkRhdGFiYXNlUGF0
aChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIG1hbmFnZXIpCit7CisgICAgaWYgKHdlYmtpdF93
ZWJzaXRlX2RhdGFfbWFuYWdlcl9pc19lcGhlbWVyYWwobWFuYWdlcikpCisgICAgICAgIHJldHVy
biB7IH07CisKKyAgICBpZiAobWFuYWdlci0+cHJpdi0+YmFzZUNhY2hlRGlyZWN0b3J5KQorICAg
ICAgICByZXR1cm4gRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50cyhGaWxlU3lz
dGVtOjpzdHJpbmdGcm9tRmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKG1hbmFnZXItPnByaXYtPmJh
c2VDYWNoZURpcmVjdG9yeS5nZXQoKSksIHsgImljb25kYXRhYmFzZSJfcywgIldlYnBhZ2VJY29u
cy5kYiJfcyB9KTsKKworICAgIGF1dG8gcHJvZ3JhbU5hbWUgPSBbXSgpIC0+IFN0cmluZyB7Cisg
ICAgICAgIGlmIChhdXRvKiBwcmduYW1lID0gZ19nZXRfcHJnbmFtZSgpKQorICAgICAgICAgICAg
cmV0dXJuIFN0cmluZzo6ZnJvbVVURjgocHJnbmFtZSk7CisjaWYgUExBVEZPUk0oR1RLKQorICAg
ICAgICByZXR1cm4gIndlYmtpdGd0ayJfczsKKyNlbGlmIFBMQVRGT1JNKFdQRSkKKyAgICAgICAg
cmV0dXJuICJ3cGUiX3M7CisjZW5kaWYKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICB9OworICAgIHJldHVybiBGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21w
b25lbnRzKEZpbGVTeXN0ZW06OnVzZXJDYWNoZURpcmVjdG9yeSgpLCB7IHByb2dyYW1OYW1lKCks
ICJpY29uZGF0YWJhc2UiX3MsICJXZWJwYWdlSWNvbnMuZGIiX3MgfSk7Cit9CisKKy8qKgorICog
d2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX3NldF9mYXZpY29uc19lbmFibGVkXworICogQG1h
bmFnZXI6IGEgI1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlcgorICogQGVuYWJsZWQ6IHZhbHVlIHRv
IHNldAorICoKKyAqIEVuYWJsZSB3ZWJzaXRlIGljb25zCisgKgorICogU2luY2U6IDIuNDAKKyAq
Lwordm9pZCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X2Zhdmljb25zX2VuYWJsZWQo
V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBtYW5hZ2VyLCBnYm9vbGVhbiBlbmFibGVkKQorewor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQlNJVEVfREFUQV9NQU5BR0VSKG1hbmFn
ZXIpKTsKKworICAgIGlmIChlbmFibGVkKSB7CisgICAgICAgIGlmICghbWFuYWdlci0+cHJpdi0+
ZmF2aWNvbkRhdGFiYXNlKQorICAgICAgICAgICAgbWFuYWdlci0+cHJpdi0+ZmF2aWNvbkRhdGFi
YXNlID0gd2Via2l0RmF2aWNvbkRhdGFiYXNlQ3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGF0aCA9
IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldEZhdmljb25EYXRhYmFzZVBhdGgobWFuYWdlcik7
CisgICAgICAgIHdlYmtpdEZhdmljb25EYXRhYmFzZU9wZW4obWFuYWdlci0+cHJpdi0+ZmF2aWNv
bkRhdGFiYXNlLmdldCgpLCBwYXRoLCBwYXRoLmlzTnVsbCgpKTsKKyAgICB9IGVsc2UgaWYgKG1h
bmFnZXItPnByaXYtPmZhdmljb25EYXRhYmFzZSkgeworICAgICAgICB3ZWJraXRGYXZpY29uRGF0
YWJhc2VDbG9zZShtYW5hZ2VyLT5wcml2LT5mYXZpY29uRGF0YWJhc2UuZ2V0KCkpOworICAgICAg
ICBtYW5hZ2VyLT5wcml2LT5mYXZpY29uRGF0YWJhc2UgPSBudWxscHRyOworICAgIH0KK30KKwor
LyoqCisgKiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Zhdmljb25zX2VuYWJsZWQ6
CisgKiBAbWFuYWdlcjogYSAjV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyCisgKgorICogR2V0IHdo
ZXRoZXIgd2Vic2l0ZSBpY29ucyBhcmUgZW5hYmxlZC4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBp
ZiB3ZWJzaXRlIGljb25zIGFyZSBlbmFibGVkLCBvciAlRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAq
IFNpbmNlOiAyLjQwCisgKi8KK2dib29sZWFuIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9n
ZXRfZmF2aWNvbnNfZW5hYmxlZChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIG1hbmFnZXIpCit7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQlNJVEVfREFUQV9NQU5BR0VS
KG1hbmFnZXIpLCBGQUxTRSk7CisKKyAgICByZXR1cm4gISFtYW5hZ2VyLT5wcml2LT5mYXZpY29u
RGF0YWJhc2U7Cit9CisKKy8qKgorICogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9m
YXZpY29uX2RhdGFiYXNlOgorICogQG1hbmFnZXI6IGEgI1dlYktpdFdlYnNpdGVEYXRhTWFuYWdl
cgorICoKKyAqIEdldCB0aGUgI1dlYktpdEZhdmljb25EYXRhYmFzZSBvZiBAbWFuYWdlci4KKyAq
CisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSkgKG51bGxhYmxlKTogYSAjV2ViS2l0RmF2aWNv
bkRhdGFiYXNlLCBvciAlTlVMTCBpZiB3ZWJzaXRlIGljb25zIGFyZSBkaXNhYmxlZAorICoKKyAq
IFNpbmNlOiAyLjQwCisgKi8KK1dlYktpdEZhdmljb25EYXRhYmFzZSogd2Via2l0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyX2dldF9mYXZpY29uX2RhdGFiYXNlKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdl
ciogbWFuYWdlcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCU0lU
RV9EQVRBX01BTkFHRVIobWFuYWdlciksIG51bGxwdHIpOworCisgICAgcmV0dXJuIG1hbmFnZXIt
PnByaXYtPmZhdmljb25EYXRhYmFzZS5nZXQoKTsKK30KKyNlbmRpZgogCiBzdGF0aWMgT3B0aW9u
U2V0PFdlYnNpdGVEYXRhVHlwZT4gdG9XZWJzaXRlRGF0YVR5cGVzKFdlYktpdFdlYnNpdGVEYXRh
VHlwZXMgdHlwZXMpCiB7CkBAIC0xMjQ3LDYgKzEzNDYsNyBAQCBzdHJ1Y3QgX1dlYktpdElUUEZp
cnN0UGFydHkgewogICAgIGludCByZWZlcmVuY2VDb3VudCB7IDEgfTsKIH07CiAKKyNpZiAhRU5B
QkxFKDIwMjJfR0xJQl9BUEkpCiAvKioKICAqIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9z
ZXRfbWVtb3J5X3ByZXNzdXJlX3NldHRpbmdzOgogICogQHNldHRpbmdzOiBhIFdlYktpdE1lbW9y
eVByZXNzdXJlU2V0dGluZ3MuCkBAIC0xMjcyLDYgKzEzNzIsNyBAQCB2b2lkIHdlYmtpdF93ZWJz
aXRlX2RhdGFfbWFuYWdlcl9zZXRfbWVtb3J5X3ByZXNzdXJlX3NldHRpbmdzKFdlYktpdE1lbW9y
eVByZXNzdQogICAgIHN0ZDo6b3B0aW9uYWw8TWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpDb25maWd1
cmF0aW9uPiBjb25maWcgPSBzZXR0aW5ncyA/IHN0ZDo6bWFrZV9vcHRpb25hbCh3ZWJraXRNZW1v
cnlQcmVzc3VyZVNldHRpbmdzR2V0TWVtb3J5UHJlc3N1cmVIYW5kbGVyQ29uZmlndXJhdGlvbihz
ZXR0aW5ncykpIDogc3RkOjpudWxsb3B0OwogICAgIFdlYlByb2Nlc3NQb29sOjpzZXROZXR3b3Jr
UHJvY2Vzc01lbW9yeVByZXNzdXJlSGFuZGxlckNvbmZpZ3VyYXRpb24oY29uZmlnKTsKIH0KKyNl
bmRpZgogCiBHX0RFRklORV9CT1hFRF9UWVBFKFdlYktpdElUUEZpcnN0UGFydHksIHdlYmtpdF9p
dHBfZmlyc3RfcGFydHksIHdlYmtpdF9pdHBfZmlyc3RfcGFydHlfcmVmLCB3ZWJraXRfaXRwX2Zp
cnN0X3BhcnR5X3VucmVmKQogCkBAIC0xNDEwLDcgKzE1MTEsNyBAQCBzdHJ1Y3QgX1dlYktpdElU
UFRoaXJkUGFydHkgewogCiBHX0RFRklORV9CT1hFRF9UWVBFKFdlYktpdElUUFRoaXJkUGFydHks
IHdlYmtpdF9pdHBfdGhpcmRfcGFydHksIHdlYmtpdF9pdHBfdGhpcmRfcGFydHlfcmVmLCB3ZWJr
aXRfaXRwX3RoaXJkX3BhcnR5X3VucmVmKQogCi1zdGF0aWMgV2ViS2l0SVRQVGhpcmRQYXJ0eSog
d2Via2l0SVRQVGhpcmRQYXJ0eUNyZWF0ZShXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6
OlRoaXJkUGFydHlEYXRhJiYgZGF0YSkKK1dlYktpdElUUFRoaXJkUGFydHkqIHdlYmtpdElUUFRo
aXJkUGFydHlDcmVhdGUoV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5
RGF0YSYmIGRhdGEpCiB7CiAgICAgYXV0byogdGhpcmRQYXJ0eSA9IHN0YXRpY19jYXN0PFdlYktp
dElUUFRoaXJkUGFydHkqPihmYXN0TWFsbG9jKHNpemVvZihXZWJLaXRJVFBUaGlyZFBhcnR5KSkp
OwogICAgIG5ldyAodGhpcmRQYXJ0eSkgV2ViS2l0SVRQVGhpcmRQYXJ0eShXVEZNb3ZlKGRhdGEp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdl
YnNpdGVEYXRhTWFuYWdlci5oLmluIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIv
V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmguaW4KaW5kZXggNDE0ODcyMmE3NjliLi5hNGRlNWQ1
NjBlYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktp
dFdlYnNpdGVEYXRhTWFuYWdlci5oLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9nbGliL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5oLmluCkBAIC0yNSw2ICsyNSw5IEBACiAj
aW5jbHVkZSA8Z2lvL2dpby5oPgogI2luY2x1ZGUgPEBBUElfSU5DTFVERV9QUkVGSVhAL1dlYktp
dENvb2tpZU1hbmFnZXIuaD4KICNpbmNsdWRlIDxAQVBJX0lOQ0xVREVfUFJFRklYQC9XZWJLaXRE
ZWZpbmVzLmg+CisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisjaW5jbHVkZSA8QEFQSV9JTkNM
VURFX1BSRUZJWEAvV2ViS2l0RmF2aWNvbkRhdGFiYXNlLmg+CisjZW5kaWYKICNpbmNsdWRlIDxA
QVBJX0lOQ0xVREVfUFJFRklYQC9XZWJLaXRNZW1vcnlQcmVzc3VyZVNldHRpbmdzLmg+CiAjaW5j
bHVkZSA8QEFQSV9JTkNMVURFX1BSRUZJWEAvV2ViS2l0TmV0d29ya1Byb3h5U2V0dGluZ3MuaD4K
ICNpbmNsdWRlIDxAQVBJX0lOQ0xVREVfUFJFRklYQC9XZWJLaXRXZWJzaXRlRGF0YS5oPgpAQCAt
NzcsMTEgKzgwLDEzIEBAIHN0cnVjdCBfV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyQ2xhc3Mgewog
V0VCS0lUX0FQSSBHVHlwZQogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF90eXBlICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKTsKIAorI2lmICFFTkFCTEUoMjAy
Ml9HTElCX0FQSSkKIFdFQktJVF9BUEkgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICoKIHdlYmtp
dF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9uZXcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoY29uc3QgZ2NoYXIgICAgICAgICAgICAgICpmaXJzdF9vcHRpb25fbmFtZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLi4uKTsKIFdFQktJVF9BUEkgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICoK
IHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9uZXdfZXBoZW1lcmFsICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAodm9pZCk7CisjZW5kaWYKIAogV0VCS0lUX0FQSSBnYm9vbGVhbgogd2Vi
a2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2lzX2VwaGVtZXJhbCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIG1hbmFnZXIpOwpAQCAtOTIsNiAr
OTcsMTggQEAgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9iYXNlX2RhdGFfZGlyZWN0
b3J5ICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWIKIFdFQktJVF9BUEkgY29uc3QgZ2NoYXIg
Kgogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9iYXNlX2NhY2hlX2RpcmVjdG9yeSAg
ICAgICAgICAgICAgICAgIChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIpOwogCisj
aWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJzaXRl
X2RhdGFfbWFuYWdlcl9zZXRfZmF2aWNvbnNfZW5hYmxlZCAgICAgICAgICAgICAgICAgICAgICAo
V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICptYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVh
biAgICAgICAgICAgICAgICAgIGVuYWJsZWQpOworCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJr
aXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Zhdmljb25zX2VuYWJsZWQgICAgICAgICAgICAg
ICAgICAgICAgKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlcik7CisKK1dFQktJVF9B
UEkgV2ViS2l0RmF2aWNvbkRhdGFiYXNlICoKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9n
ZXRfZmF2aWNvbl9kYXRhYmFzZSAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2Vic2l0ZURh
dGFNYW5hZ2VyICptYW5hZ2VyKTsKKyNlbmRpZgorCiAjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJ
KQogV0VCS0lUX0RFUFJFQ0FURUQgY29uc3QgZ2NoYXIgKgogd2Via2l0X3dlYnNpdGVfZGF0YV9t
YW5hZ2VyX2dldF9sb2NhbF9zdG9yYWdlX2RpcmVjdG9yeSAgICAgICAgICAgICAgIChXZWJLaXRX
ZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIpOwpAQCAtMTE5LDcgKzEzNiw2IEBAIHdlYmtpdF93
ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfc2VydmljZV93b3JrZXJfcmVnaXN0cmF0aW9uc19kaXJl
Y3RvcnkoV2ViS2l0V2ViCiAKIFdFQktJVF9ERVBSRUNBVEVEIGNvbnN0IGdjaGFyICoKIHdlYmtp
dF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfZG9tX2NhY2hlX2RpcmVjdG9yeSAgICAgICAgICAg
ICAgICAgICAoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICptYW5hZ2VyKTsKLSNlbmRpZgogCiBX
RUJLSVRfQVBJIFdlYktpdENvb2tpZU1hbmFnZXIgKgogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5h
Z2VyX2dldF9jb29raWVfbWFuYWdlciAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJz
aXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIpOwpAQCAtMTQ5LDYgKzE2NSw3IEBAIFdFQktJVF9BUEkg
dm9pZAogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX3NldF9uZXR3b3JrX3Byb3h5X3NldHRp
bmdzICAgICAgICAgICAgICAgIChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdlYktpdE5ldHdvcmtQcm94eU1vZGUgICAgcHJveHlfbW9kZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgV2ViS2l0TmV0d29ya1Byb3h5U2V0dGluZ3MgKnByb3h5X3NldHRpbmdzKTsKKyNl
bmRpZgogCiBXRUJLSVRfQVBJIHZvaWQKIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9mZXRj
aCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2Vic2l0ZURhdGFN
YW5hZ2VyICptYW5hZ2VyLApAQCAtMTg2LDggKzIwMywxMCBAQCB3ZWJraXRfd2Vic2l0ZV9kYXRh
X21hbmFnZXJfY2xlYXJfZmluaXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChXZWJL
aXRXZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVzdWx0ICAgICAgICAgICAgICpyZXN1bHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgICAgICAgICAqKmVycm9yKTsKIAorI2lmICFF
TkFCTEUoMjAyMl9HTElCX0FQSSkKIFdFQktJVF9BUEkgdm9pZAogd2Via2l0X3dlYnNpdGVfZGF0
YV9tYW5hZ2VyX3NldF9tZW1vcnlfcHJlc3N1cmVfc2V0dGluZ3MgICAgICAgICAgICAgICAoV2Vi
S2l0TWVtb3J5UHJlc3N1cmVTZXR0aW5ncyAqc2V0dGluZ3MpOworI2VuZGlmCiAKIAogI2RlZmlu
ZSBXRUJLSVRfVFlQRV9JVFBfRklSU1RfUEFSVFkgICAod2Via2l0X2l0cF9maXJzdF9wYXJ0eV9n
ZXRfdHlwZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIv
V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZS5oCmluZGV4IGZjOWU4
MjI2ZmJiOC4uODY2YWNhYTc3MDA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJQcml2YXRlLmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0
ZS5oCkBAIC0xOSw2ICsxOSwxMiBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIldlYlJl
c291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmUu
aCIKKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CiAKKyNpZiBFTkFCTEUoMjAyMl9H
TElCX0FQSSkKK1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogd2Via2l0V2Vic2l0ZURhdGFNYW5h
Z2VyQ3JlYXRlKEdVbmlxdWVQdHI8Y2hhcj4mJiwgR1VuaXF1ZVB0cjxjaGFyPiYmKTsKKyNlbmRp
ZgogV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRE
YXRhU3RvcmUoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKik7CitXZWJLaXRJVFBUaGlyZFBhcnR5
KiB3ZWJraXRJVFBUaGlyZFBhcnR5Q3JlYXRlKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YSYmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9nbGliL3dlYmtpdC5oLmluIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2dsaWIvd2Via2l0LmguaW4KaW5kZXggNDdiNjViYzdmMGQxLi4zNThlNjVjMDk1YmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL3dlYmtpdC5oLmluCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL3dlYmtpdC5oLmluCkBAIC03Niw2
ICs3Niw5IEBACiAjaW5jbHVkZSA8QEFQSV9JTkNMVURFX1BSRUZJWEAvV2ViS2l0TmF2aWdhdGlv
bkFjdGlvbi5oPgogI2luY2x1ZGUgPEBBUElfSU5DTFVERV9QUkVGSVhAL1dlYktpdE5hdmlnYXRp
b25Qb2xpY3lEZWNpc2lvbi5oPgogI2luY2x1ZGUgPEBBUElfSU5DTFVERV9QUkVGSVhAL1dlYktp
dE5ldHdvcmtQcm94eVNldHRpbmdzLmg+CisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisjaW5j
bHVkZSA8QEFQSV9JTkNMVURFX1BSRUZJWEAvV2ViS2l0TmV0d29ya1Nlc3Npb24uaD4KKyNlbmRp
ZgogI2luY2x1ZGUgPEBBUElfSU5DTFVERV9QUkVGSVhAL1dlYktpdE5vdGlmaWNhdGlvbi5oPgog
I2luY2x1ZGUgPEBBUElfSU5DTFVERV9QUkVGSVhAL1dlYktpdE5vdGlmaWNhdGlvblBlcm1pc3Np
b25SZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8QEFQSV9JTkNMVURFX1BSRUZJWEAvV2ViS2l0T3B0aW9u
TWVudS5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJWaWV3R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2ViVmlld0d0ay5jcHAKaW5kZXggMTAzNzJkZTM4ZDBiLi4wYzA0ZjFkZGRmOTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0d0ay5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3R3RrLmNw
cApAQCAtMzUxLDcgKzM1MSw5IEBAIEd0a1dpZGdldCogd2Via2l0X3dlYl92aWV3X25ld193aXRo
X2NvbnRleHQoV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCkKICAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfSVNfV0VCX0NPTlRFWFQoY29udGV4dCksIDApOwogCiAgICAgcmV0dXJuIEdU
S19XSURHRVQoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9WSUVXLAorI2lmICFFTkFCTEUo
MjAyMl9HTElCX0FQSSkKICAgICAgICAgImlzLWVwaGVtZXJhbCIsIHdlYmtpdF93ZWJfY29udGV4
dF9pc19lcGhlbWVyYWwoY29udGV4dCksCisjZW5kaWYKICAgICAgICAgIndlYi1jb250ZXh0Iiwg
Y29udGV4dCwKICAgICAgICAgbnVsbHB0cikpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRXZWJWaWV3V1BFLmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0V2ViVmlld1dQRS5jcHAKaW5kZXggZDRhMzgxYmRlNjhi
Li40NjgzM2YzMzU1NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93
cGUvV2ViS2l0V2ViVmlld1dQRS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L3dwZS9XZWJLaXRXZWJWaWV3V1BFLmNwcApAQCAtMTA5LDcgKzEwOSw5IEBAIFdlYktpdFdlYlZp
ZXcqIHdlYmtpdF93ZWJfdmlld19uZXdfd2l0aF9jb250ZXh0KFdlYktpdFdlYlZpZXdCYWNrZW5k
KiBiYWNrZW5kLCBXCiAKICAgICByZXR1cm4gV0VCS0lUX1dFQl9WSUVXKGdfb2JqZWN0X25ldyhX
RUJLSVRfVFlQRV9XRUJfVklFVywKICAgICAgICAgImJhY2tlbmQiLCBiYWNrZW5kLAorI2lmICFF
TkFCTEUoMjAyMl9HTElCX0FQSSkKICAgICAgICAgImlzLWVwaGVtZXJhbCIsIHdlYmtpdF93ZWJf
Y29udGV4dF9pc19lcGhlbWVyYWwoY29udGV4dCksCisjZW5kaWYKICAgICAgICAgIndlYi1jb250
ZXh0IiwgY29udGV4dCwKICAgICAgICAgbnVsbHB0cikpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAppbmRl
eCBlNDQ1MjY1Yzc5NTMuLjQ1MDBmZDZmMGI2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKQEAgLTI1Myw3
ICsyNTMsNyBAQCBTT0F1dGhvcml6YXRpb25Db29yZGluYXRvciYgV2Vic2l0ZURhdGFTdG9yZTo6
c29BdXRob3JpemF0aW9uQ29vcmRpbmF0b3IoY29uc3QgVwogCiBzdGF0aWMgUmVmPE5ldHdvcmtQ
cm9jZXNzUHJveHk+IG5ldHdvcmtQcm9jZXNzRm9yU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQpCiB7Ci0jaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUpCisjaWYgKChQTEFU
Rk9STShHVEspIHx8IFBMQVRGT1JNKFdQRSkpICYmICFFTkFCTEUoMjAyMl9HTElCX0FQSSkpCiAg
ICAgaWYgKHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKSB7CiAgICAgICAgIC8vIFJldXNlIGEgcHJl
dmlvdXMgcGVyc2lzdGVudCBzZXNzaW9uIG5ldHdvcmsgcHJvY2VzcyBmb3IgZXBoZW1lcmFsIHNl
c3Npb25zLgogICAgICAgICBmb3IgKGF1dG8qIGRhdGFTdG9yZSA6IGFsbERhdGFTdG9yZXMoKS52
YWx1ZXMoKSkgewpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJUYWIu
YyBiL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9Ccm93c2VyVGFiLmMKaW5kZXggYzAyMjQ3YWVlZmY2
Li44YTc5Mjg3ZjQ0MjAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9Ccm93c2Vy
VGFiLmMKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJUYWIuYwpAQCAtMjE4LDcg
KzIxOCwxMSBAQCBzdGF0aWMgdm9pZCB0bHNFcnJvcnNEaWFsb2dSZXNwb25zZShHdGtXaWRnZXQg
KmRpYWxvZywgZ2ludCByZXNwb25zZSwgQnJvd3NlclRhYgogICAgICAgICBHVGxzQ2VydGlmaWNh
dGUgKmNlcnRpZmljYXRlID0gKEdUbHNDZXJ0aWZpY2F0ZSAqKWdfb2JqZWN0X2dldF9kYXRhKEdf
T0JKRUNUKGRpYWxvZyksICJjZXJ0aWZpY2F0ZSIpOwogI2lmIFNPVVBfQ0hFQ0tfVkVSU0lPTigy
LCA5MSwgMCkKICAgICAgICAgR1VyaSAqdXJpID0gZ191cmlfcGFyc2UoZmFpbGluZ1VSSSwgU09V
UF9IVFRQX1VSSV9GTEFHUywgTlVMTCk7CisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgOTgsIDUp
CisgICAgICAgIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fYWxsb3dfdGxzX2NlcnRpZmljYXRlX2Zv
cl9ob3N0KHdlYmtpdF93ZWJfdmlld19nZXRfbmV0d29ya19zZXNzaW9uKHRhYi0+d2ViVmlldyks
IGNlcnRpZmljYXRlLCBnX3VyaV9nZXRfaG9zdCh1cmkpKTsKKyNlbHNlCiAgICAgICAgIHdlYmtp
dF93ZWJfY29udGV4dF9hbGxvd190bHNfY2VydGlmaWNhdGVfZm9yX2hvc3Qod2Via2l0X3dlYl92
aWV3X2dldF9jb250ZXh0KHRhYi0+d2ViVmlldyksIGNlcnRpZmljYXRlLCBnX3VyaV9nZXRfaG9z
dCh1cmkpKTsKKyNlbmRpZgogICAgICAgICBnX3VyaV91bnJlZih1cmkpOwogI2Vsc2UKICAgICAg
ICAgU291cFVSSSAqdXJpID0gc291cF91cmlfbmV3KGZhaWxpbmdVUkkpOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJXaW5kb3cuYyBiL1Rvb2xzL01pbmlCcm93c2Vy
L2d0ay9Ccm93c2VyV2luZG93LmMKaW5kZXggODgxNjA5YzlmZThmLi4wMTI3MWU1MWRiOGUgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9Ccm93c2VyV2luZG93LmMKKysrIGIvVG9v
bHMvTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJXaW5kb3cuYwpAQCAtNDAsNiArNDAsOSBAQCBzdHJ1
Y3QgX0Jyb3dzZXJXaW5kb3cgewogICAgIEd0a0FwcGxpY2F0aW9uV2luZG93IHBhcmVudDsKIAog
ICAgIFdlYktpdFdlYkNvbnRleHQgKndlYkNvbnRleHQ7CisjaWYgR1RLX0NIRUNLX1ZFUlNJT04o
MywgOTgsIDApCisgICAgV2ViS2l0TmV0d29ya1Nlc3Npb24gKm5ldHdvcmtTZXNzaW9uOworI2Vu
ZGlmCiAKICAgICBHdGtXaWRnZXQgKm1haW5Cb3g7CiAgICAgR3RrV2lkZ2V0ICp0b29sYmFyOwpA
QCAtMTU5LDcgKzE2MiwxMSBAQCBzdGF0aWMgdm9pZCB3ZWJWaWV3VGl0bGVDaGFuZ2VkKFdlYktp
dFdlYlZpZXcgKndlYlZpZXcsIEdQYXJhbVNwZWMgKnBzcGVjLCBCcm93cwogICAgIGNoYXIgKnBy
aXZhdGVUaXRsZSA9IE5VTEw7CiAgICAgaWYgKHdlYmtpdF93ZWJfdmlld19pc19jb250cm9sbGVk
X2J5X2F1dG9tYXRpb24od2ViVmlldykpCiAgICAgICAgIHByaXZhdGVUaXRsZSA9IGdfc3RyZHVw
X3ByaW50ZigiW0F1dG9tYXRpb25dICVzIiwgdGl0bGUpOworI2lmIEdUS19DSEVDS19WRVJTSU9O
KDMsIDk4LCAwKQorICAgIGVsc2UgaWYgKHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25faXNfZXBoZW1l
cmFsKHdlYmtpdF93ZWJfdmlld19nZXRfbmV0d29ya19zZXNzaW9uKHdlYlZpZXcpKSkKKyNlbHNl
CiAgICAgZWxzZSBpZiAod2Via2l0X3dlYl92aWV3X2lzX2VwaGVtZXJhbCh3ZWJWaWV3KSkKKyNl
bmRpZgogICAgICAgICBwcml2YXRlVGl0bGUgPSBnX3N0cmR1cF9wcmludGYoIltQcml2YXRlXSAl
cyIsIHRpdGxlKTsKICAgICBndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lORE9XKHdpbmRvdyks
IHByaXZhdGVUaXRsZSA/IHByaXZhdGVUaXRsZSA6IHRpdGxlKTsKICAgICBnX2ZyZWUocHJpdmF0
ZVRpdGxlKTsKQEAgLTE4NSw5ICsxOTIsOSBAQCBzdGF0aWMgdm9pZCB3ZWJWaWV3TG9hZFByb2dy
ZXNzQ2hhbmdlZChXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3LCBHUGFyYW1TcGVjICpwc3BlYwogICAg
IH0KIH0KIAorI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigzLCA5OCwgMCkKIHN0YXRpYyB2b2lkIGRv
d25sb2FkU3RhcnRlZChXZWJLaXRXZWJDb250ZXh0ICp3ZWJDb250ZXh0LCBXZWJLaXREb3dubG9h
ZCAqZG93bmxvYWQsIEJyb3dzZXJXaW5kb3cgKndpbmRvdykKIHsKLSNpZiAhR1RLX0NIRUNLX1ZF
UlNJT04oMywgOTgsIDApCiAgICAgaWYgKCF3aW5kb3ctPmRvd25sb2Fkc0JhcikgewogICAgICAg
ICB3aW5kb3ctPmRvd25sb2Fkc0JhciA9IGJyb3dzZXJfZG93bmxvYWRzX2Jhcl9uZXcoKTsKICAg
ICAgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1god2luZG93LT5tYWluQm94KSwgd2luZG93
LT5kb3dubG9hZHNCYXIsIEZBTFNFLCBGQUxTRSwgMCk7CkBAIC0xOTYsOCArMjAzLDggQEAgc3Rh
dGljIHZvaWQgZG93bmxvYWRTdGFydGVkKFdlYktpdFdlYkNvbnRleHQgKndlYkNvbnRleHQsIFdl
YktpdERvd25sb2FkICpkb3dubG8KICAgICAgICAgZ3RrX3dpZGdldF9zaG93KHdpbmRvdy0+ZG93
bmxvYWRzQmFyKTsKICAgICB9CiAgICAgYnJvd3Nlcl9kb3dubG9hZHNfYmFyX2FkZF9kb3dubG9h
ZChCUk9XU0VSX0RPV05MT0FEU19CQVIod2luZG93LT5kb3dubG9hZHNCYXIpLCBkb3dubG9hZCk7
Ci0jZW5kaWYKIH0KKyNlbmRpZgogCiBzdGF0aWMgdm9pZCBicm93c2VyV2luZG93SGlzdG9yeUl0
ZW1BY3RpdmF0ZWQoQnJvd3NlcldpbmRvdyAqd2luZG93LCBHVmFyaWFudCAqcGFyYW1ldGVyLCBH
QWN0aW9uICphY3Rpb24pCiB7CkBAIC00NTgsNyArNDY1LDExIEBAIHN0YXRpYyBHdGtXaWRnZXQg
KndlYlZpZXdDcmVhdGUoV2ViS2l0V2ViVmlldyAqd2ViVmlldywgV2ViS2l0TmF2aWdhdGlvbkFj
dGlvbiAqCiAgICAgV2ViS2l0V2ViVmlldyAqbmV3V2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3
ZWJraXRfd2ViX3ZpZXdfbmV3X3dpdGhfcmVsYXRlZF92aWV3KHdlYlZpZXcpKTsKICAgICB3ZWJr
aXRfd2ViX3ZpZXdfc2V0X3NldHRpbmdzKG5ld1dlYlZpZXcsIHdlYmtpdF93ZWJfdmlld19nZXRf
c2V0dGluZ3Mod2ViVmlldykpOwogCisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgOTgsIDApCisg
ICAgR3RrV2lkZ2V0ICpuZXdXaW5kb3cgPSBicm93c2VyX3dpbmRvd19uZXcoR1RLX1dJTkRPVyh3
aW5kb3cpLCB3aW5kb3ctPndlYkNvbnRleHQsIHdpbmRvdy0+bmV0d29ya1Nlc3Npb24pOworI2Vs
c2UKICAgICBHdGtXaWRnZXQgKm5ld1dpbmRvdyA9IGJyb3dzZXJfd2luZG93X25ldyhHVEtfV0lO
RE9XKHdpbmRvdyksIHdpbmRvdy0+d2ViQ29udGV4dCk7CisjZW5kaWYKICAgICBndGtfd2luZG93
X3NldF9hcHBsaWNhdGlvbihHVEtfV0lORE9XKG5ld1dpbmRvdyksIGd0a193aW5kb3dfZ2V0X2Fw
cGxpY2F0aW9uKEdUS19XSU5ET1cod2luZG93KSkpOwogICAgIGJyb3dzZXJfd2luZG93X2FwcGVu
ZF92aWV3KEJST1dTRVJfV0lORE9XKG5ld1dpbmRvdyksIG5ld1dlYlZpZXcpOwogICAgIGd0a193
aWRnZXRfZ3JhYl9mb2N1cyhHVEtfV0lER0VUKG5ld1dlYlZpZXcpKTsKQEAgLTUwNCw2ICs1MTUs
OSBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2ViVmlld0RlY2lkZVBvbGljeShXZWJLaXRXZWJWaWV3ICp3
ZWJWaWV3LCBXZWJLaXRQb2xpY3lEZWNpc2lvbgogICAgIC8qIE9wZW5pbmcgYSBuZXcgdGFiIGlm
IGxpbmsgY2xpY2tlZCB3aXRoIHRoZSBtaWRkbGUgYnV0dG9uLiAqLwogICAgIFdlYktpdFdlYlZp
ZXcgKm5ld1dlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBF
X1dFQl9WSUVXLAogICAgICAgICAid2ViLWNvbnRleHQiLCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2Nv
bnRleHQod2ViVmlldyksCisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgOTgsIDApCisgICAgICAg
ICJuZXR3b3JrLXNlc3Npb24iLCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X25ldHdvcmtfc2Vzc2lvbih3
ZWJWaWV3KSwKKyNlbmRpZgogICAgICAgICAic2V0dGluZ3MiLCB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X3NldHRpbmdzKHdlYlZpZXcpLAogICAgICAgICAidXNlci1jb250ZW50LW1hbmFnZXIiLCB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3VzZXJfY29udGVudF9tYW5hZ2VyKHdlYlZpZXcpLAogICAgICAgICAi
aXMtY29udHJvbGxlZC1ieS1hdXRvbWF0aW9uIiwgd2Via2l0X3dlYl92aWV3X2lzX2NvbnRyb2xs
ZWRfYnlfYXV0b21hdGlvbih3ZWJWaWV3KSwKQEAgLTc1Niw2ICs3NzAsOSBAQCBzdGF0aWMgdm9p
ZCBuZXdUYWJDYWxsYmFjayhHU2ltcGxlQWN0aW9uICphY3Rpb24sIEdWYXJpYW50ICpwYXJhbWV0
ZXIsIGdwb2ludGVyCiAKICAgICBicm93c2VyX3dpbmRvd19hcHBlbmRfdmlldyh3aW5kb3csIFdF
QktJVF9XRUJfVklFVyhnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX1ZJRVcsCiAgICAgICAg
ICJ3ZWItY29udGV4dCIsIHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dCh3ZWJWaWV3KSwKKyNp
ZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCA5OCwgMCkKKyAgICAgICAgIm5ldHdvcmstc2Vzc2lvbiIs
IHdpbmRvdy0+bmV0d29ya1Nlc3Npb24sCisjZW5kaWYKICAgICAgICAgInNldHRpbmdzIiwgd2Vi
a2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyh3ZWJWaWV3KSwKICAgICAgICAgInVzZXItY29udGVu
dC1tYW5hZ2VyIiwgd2Via2l0X3dlYl92aWV3X2dldF91c2VyX2NvbnRlbnRfbWFuYWdlcih3ZWJW
aWV3KSwKICAgICAgICAgImlzLWNvbnRyb2xsZWQtYnktYXV0b21hdGlvbiIsIHdlYmtpdF93ZWJf
dmlld19pc19jb250cm9sbGVkX2J5X2F1dG9tYXRpb24od2ViVmlldyksCkBAIC03NzQsMTUgKzc5
MSwzNCBAQCBzdGF0aWMgdm9pZCBvcGVuUHJpdmF0ZVdpbmRvdyhHU2ltcGxlQWN0aW9uICphY3Rp
b24sIEdWYXJpYW50ICpwYXJhbWV0ZXIsIGdwb2ludAogewogICAgIEJyb3dzZXJXaW5kb3cgKndp
bmRvdyA9IEJST1dTRVJfV0lORE9XKHVzZXJEYXRhKTsKICAgICBXZWJLaXRXZWJWaWV3ICp3ZWJW
aWV3ID0gYnJvd3Nlcl90YWJfZ2V0X3dlYl92aWV3KHdpbmRvdy0+YWN0aXZlVGFiKTsKKworI2lm
IEdUS19DSEVDS19WRVJTSU9OKDMsIDk4LCAwKQorICAgIFdlYktpdE5ldHdvcmtTZXNzaW9uICpu
ZXR3b3JrU2Vzc2lvbiA9IE5VTEw7CisgICAgaWYgKCF3ZWJraXRfd2ViX3ZpZXdfaXNfY29udHJv
bGxlZF9ieV9hdXRvbWF0aW9uKHdlYlZpZXcpKSB7CisgICAgICAgIG5ldHdvcmtTZXNzaW9uID0g
d2Via2l0X25ldHdvcmtfc2Vzc2lvbl9uZXdfZXBoZW1lcmFsKCk7CisgICAgICAgIHdlYmtpdF93
ZWJzaXRlX2RhdGFfbWFuYWdlcl9zZXRfZmF2aWNvbnNfZW5hYmxlZCh3ZWJraXRfbmV0d29ya19z
ZXNzaW9uX2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcihuZXR3b3JrU2Vzc2lvbiksIFRSVUUpOwor
ICAgICAgICB3ZWJraXRfbmV0d29ya19zZXNzaW9uX3NldF90bHNfZXJyb3JzX3BvbGljeShuZXR3
b3JrU2Vzc2lvbiwgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfdGxzX2Vycm9yc19wb2xpY3ko
d2luZG93LT5uZXR3b3JrU2Vzc2lvbikpOworICAgICAgICAvLyBGSVhNRTogd2UgbmVlZCBwdWJs
aWMgYXBpIHRvIGdldCBwcm94eSBzZXR0aW5ncy4KKyAgICB9CisjZW5kaWYKICAgICBXZWJLaXRX
ZWJWaWV3ICpuZXdXZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKGdfb2JqZWN0X25ldyhXRUJLSVRf
VFlQRV9XRUJfVklFVywKICAgICAgICAgIndlYi1jb250ZXh0Iiwgd2Via2l0X3dlYl92aWV3X2dl
dF9jb250ZXh0KHdlYlZpZXcpLAogICAgICAgICAic2V0dGluZ3MiLCB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X3NldHRpbmdzKHdlYlZpZXcpLAogICAgICAgICAidXNlci1jb250ZW50LW1hbmFnZXIiLCB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X3VzZXJfY29udGVudF9tYW5hZ2VyKHdlYlZpZXcpLAorI2lmIEdU
S19DSEVDS19WRVJTSU9OKDMsIDk4LCAwKQorICAgICAgICAibmV0d29yay1zZXNzaW9uIiwgbmV0
d29ya1Nlc3Npb24sCisjZWxzZQogICAgICAgICAiaXMtZXBoZW1lcmFsIiwgVFJVRSwKKyNlbmRp
ZgogICAgICAgICAiaXMtY29udHJvbGxlZC1ieS1hdXRvbWF0aW9uIiwgd2Via2l0X3dlYl92aWV3
X2lzX2NvbnRyb2xsZWRfYnlfYXV0b21hdGlvbih3ZWJWaWV3KSwKICAgICAgICAgIndlYnNpdGUt
cG9saWNpZXMiLCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dlYnNpdGVfcG9saWNpZXMod2ViVmlldyks
CiAgICAgICAgIE5VTEwpKTsKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCA5OCwgMCkKKyAgICBH
dGtXaWRnZXQgKm5ld1dpbmRvdyA9IGJyb3dzZXJfd2luZG93X25ldyhHVEtfV0lORE9XKHdpbmRv
dyksIHdpbmRvdy0+d2ViQ29udGV4dCwgbmV0d29ya1Nlc3Npb24pOworICAgIGdfY2xlYXJfb2Jq
ZWN0KCZuZXR3b3JrU2Vzc2lvbik7CisjZWxzZQogICAgIEd0a1dpZGdldCAqbmV3V2luZG93ID0g
YnJvd3Nlcl93aW5kb3dfbmV3KEdUS19XSU5ET1cod2luZG93KSwgd2luZG93LT53ZWJDb250ZXh0
KTsKKyNlbmRpZgogICAgIGd0a193aW5kb3dfc2V0X2FwcGxpY2F0aW9uKEdUS19XSU5ET1cobmV3
V2luZG93KSwgZ3RrX3dpbmRvd19nZXRfYXBwbGljYXRpb24oR1RLX1dJTkRPVyh3aW5kb3cpKSk7
CiAgICAgYnJvd3Nlcl93aW5kb3dfYXBwZW5kX3ZpZXcoQlJPV1NFUl9XSU5ET1cobmV3V2luZG93
KSwgbmV3V2ViVmlldyk7CiAgICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKEdUS19XSURHRVQobmV3
V2ViVmlldykpOwpAQCAtOTYyLDYgKzk5OCwxMCBAQCBzdGF0aWMgdm9pZCBicm93c2VyV2luZG93
RmluYWxpemUoR09iamVjdCAqZ09iamVjdCkKICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25u
ZWN0X21hdGNoZWQod2luZG93LT53ZWJDb250ZXh0LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAw
LCBOVUxMLCBOVUxMLCB3aW5kb3cpOwogICAgIGdfb2JqZWN0X3VucmVmKHdpbmRvdy0+d2ViQ29u
dGV4dCk7CiAKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCA5OCwgNSkKKyAgICBnX2NsZWFyX29i
amVjdCgmd2luZG93LT5uZXR3b3JrU2Vzc2lvbik7CisjZW5kaWYKKwogICAgIGlmICh3aW5kb3ct
PmZhdmljb24pIHsKICAgICAgICAgZ19vYmplY3RfdW5yZWYod2luZG93LT5mYXZpY29uKTsKICAg
ICAgICAgd2luZG93LT5mYXZpY29uID0gTlVMTDsKQEAgLTE0NjEsNyArMTUwMSwxMSBAQCBzdGF0
aWMgdm9pZCBicm93c2VyX3dpbmRvd19jbGFzc19pbml0KEJyb3dzZXJXaW5kb3dDbGFzcyAqa2xh
c3MpCiB9CiAKIC8qIFB1YmxpYyBBUEkuICovCisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgOTgs
IDApCitHdGtXaWRnZXQgKmJyb3dzZXJfd2luZG93X25ldyhHdGtXaW5kb3cgKnBhcmVudCwgV2Vi
S2l0V2ViQ29udGV4dCAqd2ViQ29udGV4dCwgV2ViS2l0TmV0d29ya1Nlc3Npb24gKm5ldHdvcmtT
ZXNzaW9uKQorI2Vsc2UKIEd0a1dpZGdldCAqYnJvd3Nlcl93aW5kb3dfbmV3KEd0a1dpbmRvdyAq
cGFyZW50LCBXZWJLaXRXZWJDb250ZXh0ICp3ZWJDb250ZXh0KQorI2VuZGlmCiB7CiAgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9DT05URVhUKHdlYkNvbnRleHQpLCBOVUxM
KTsKIApAQCAtMTQ3Miw3ICsxNTE2LDEyIEBAIEd0a1dpZGdldCAqYnJvd3Nlcl93aW5kb3dfbmV3
KEd0a1dpbmRvdyAqcGFyZW50LCBXZWJLaXRXZWJDb250ZXh0ICp3ZWJDb250ZXh0KQogICAgICAg
ICBOVUxMKSk7CiAKICAgICB3aW5kb3ctPndlYkNvbnRleHQgPSBnX29iamVjdF9yZWYod2ViQ29u
dGV4dCk7CisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgOTgsIDApCisgICAgd2luZG93LT5uZXR3
b3JrU2Vzc2lvbiA9IG5ldHdvcmtTZXNzaW9uID8gZ19vYmplY3RfcmVmKG5ldHdvcmtTZXNzaW9u
KSA6IE5VTEw7CisjZWxzZQogICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2luZG93LT53ZWJDb250ZXh0
LCAiZG93bmxvYWQtc3RhcnRlZCIsIEdfQ0FMTEJBQ0soZG93bmxvYWRTdGFydGVkKSwgd2luZG93
KTsKKyNlbmRpZgorCiAgICAgaWYgKHBhcmVudCkgewogICAgICAgICB3aW5kb3ctPnBhcmVudFdp
bmRvdyA9IHBhcmVudDsKICAgICAgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09CSkVD
VChwYXJlbnQpLCAoZ3BvaW50ZXIgKikmd2luZG93LT5wYXJlbnRXaW5kb3cpOwpAQCAtMTQ4MSw2
ICsxNTMwLDE1IEBAIEd0a1dpZGdldCAqYnJvd3Nlcl93aW5kb3dfbmV3KEd0a1dpbmRvdyAqcGFy
ZW50LCBXZWJLaXRXZWJDb250ZXh0ICp3ZWJDb250ZXh0KQogICAgIHJldHVybiBHVEtfV0lER0VU
KHdpbmRvdyk7CiB9CiAKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCA5OCwgMCkKK1dlYktpdE5l
dHdvcmtTZXNzaW9uKiBicm93c2VyX3dpbmRvd19nZXRfbmV0d29ya19zZXNzaW9uKEJyb3dzZXJX
aW5kb3cgKndpbmRvdykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChCUk9XU0VSX0lTX1dJ
TkRPVyh3aW5kb3cpLCBOVUxMKTsKKworICAgIHJldHVybiB3aW5kb3ctPm5ldHdvcmtTZXNzaW9u
OworfQorI2VuZGlmCisKIFdlYktpdFdlYkNvbnRleHQgKmJyb3dzZXJfd2luZG93X2dldF93ZWJf
Y29udGV4dChCcm93c2VyV2luZG93ICp3aW5kb3cpCiB7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoQlJPV1NFUl9JU19XSU5ET1cod2luZG93KSwgTlVMTCk7CkBAIC0xNTY4LDYgKzE2MjYsOSBA
QCB2b2lkIGJyb3dzZXJfd2luZG93X2xvYWRfc2Vzc2lvbihCcm93c2VyV2luZG93ICp3aW5kb3cs
IGNvbnN0IGNoYXIgKnNlc3Npb25GaWxlKQogICAgICAgICBpZiAoIXdlYlZpZXcpIHsKICAgICAg
ICAgICAgIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBF
X1dFQl9WSUVXLAogICAgICAgICAgICAgICAgICJ3ZWItY29udGV4dCIsIHdlYmtpdF93ZWJfdmll
d19nZXRfY29udGV4dChwcmV2aW91c1dlYlZpZXcpLAorI2lmIEdUS19DSEVDS19WRVJTSU9OKDMs
IDk4LCAwKQorICAgICAgICAgICAgICAgICJuZXR3b3JrLXNlc3Npb24iLCB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X25ldHdvcmtfc2Vzc2lvbihwcmV2aW91c1dlYlZpZXcpLAorI2VuZGlmCiAgICAgICAg
ICAgICAgICAgInNldHRpbmdzIiwgd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyhwcmV2aW91
c1dlYlZpZXcpLAogICAgICAgICAgICAgICAgICJ1c2VyLWNvbnRlbnQtbWFuYWdlciIsIHdlYmtp
dF93ZWJfdmlld19nZXRfdXNlcl9jb250ZW50X21hbmFnZXIocHJldmlvdXNXZWJWaWV3KSwKICAg
ICAgICAgICAgICAgICAid2Vic2l0ZS1wb2xpY2llcyIsIHdlYmtpdF93ZWJfdmlld19nZXRfd2Vi
c2l0ZV9wb2xpY2llcyhwcmV2aW91c1dlYlZpZXcpLApAQCAtMTYzNyw3ICsxNjk4LDExIEBAIFdl
YktpdFdlYlZpZXcgKmJyb3dzZXJfd2luZG93X2dldF9vcl9jcmVhdGVfd2ViX3ZpZXdfZm9yX2F1
dG9tYXRpb24oQnJvd3NlcldpbmRvCiAgICAgICAgICJpcy1jb250cm9sbGVkLWJ5LWF1dG9tYXRp
b24iLCBUUlVFLAogICAgICAgICAid2Vic2l0ZS1wb2xpY2llcyIsIHdlYmtpdF93ZWJfdmlld19n
ZXRfd2Vic2l0ZV9wb2xpY2llcyh3ZWJWaWV3KSwKICAgICAgICAgTlVMTCkpOworI2lmIEdUS19D
SEVDS19WRVJTSU9OKDMsIDk4LCAwKQorICAgIEd0a1dpZGdldCAqbmV3V2luZG93ID0gYnJvd3Nl
cl93aW5kb3dfbmV3KEdUS19XSU5ET1cod2luZG93KSwgd2luZG93LT53ZWJDb250ZXh0LCB3aW5k
b3ctPm5ldHdvcmtTZXNzaW9uKTsKKyNlbHNlCiAgICAgR3RrV2lkZ2V0ICpuZXdXaW5kb3cgPSBi
cm93c2VyX3dpbmRvd19uZXcoR1RLX1dJTkRPVyh3aW5kb3cpLCB3aW5kb3ctPndlYkNvbnRleHQp
OworI2VuZGlmCiAgICAgZ3RrX3dpbmRvd19zZXRfYXBwbGljYXRpb24oR1RLX1dJTkRPVyhuZXdX
aW5kb3cpLCBndGtfd2luZG93X2dldF9hcHBsaWNhdGlvbihHVEtfV0lORE9XKHdpbmRvdykpKTsK
ICNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMywgOTgsIDApCiAgICAgZ3RrX3dpbmRvd19zZXRfZm9j
dXNfb25fbWFwKEdUS19XSU5ET1cobmV3V2luZG93KSwgRkFMU0UpOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJXaW5kb3cuaCBiL1Rvb2xzL01pbmlCcm93c2VyL2d0
ay9Ccm93c2VyV2luZG93LmgKaW5kZXggNzI4MzE4NzNkNWZkLi5jNThlYmMyYmVlYzcgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9Ccm93c2VyV2luZG93LmgKKysrIGIvVG9vbHMv
TWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJXaW5kb3cuaApAQCAtNTAsNyArNTAsMTIgQEAgdHlwZWRl
ZiBzdHJ1Y3QgX0Jyb3dzZXJXaW5kb3dDbGFzcyAgIEJyb3dzZXJXaW5kb3dDbGFzczsKIAogR1R5
cGUgYnJvd3Nlcl93aW5kb3dfZ2V0X3R5cGUodm9pZCk7CiAKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lP
TigzLCA5OCwgMCkKK0d0a1dpZGdldCogYnJvd3Nlcl93aW5kb3dfbmV3KEd0a1dpbmRvdyosIFdl
YktpdFdlYkNvbnRleHQqLCBXZWJLaXROZXR3b3JrU2Vzc2lvbiopOworV2ViS2l0TmV0d29ya1Nl
c3Npb24qIGJyb3dzZXJfd2luZG93X2dldF9uZXR3b3JrX3Nlc3Npb24oQnJvd3NlcldpbmRvdyop
OworI2Vsc2UKIEd0a1dpZGdldCogYnJvd3Nlcl93aW5kb3dfbmV3KEd0a1dpbmRvdyosIFdlYktp
dFdlYkNvbnRleHQqKTsKKyNlbmRpZgogV2ViS2l0V2ViQ29udGV4dCogYnJvd3Nlcl93aW5kb3df
Z2V0X3dlYl9jb250ZXh0KEJyb3dzZXJXaW5kb3cqKTsKIHZvaWQgYnJvd3Nlcl93aW5kb3dfYXBw
ZW5kX3ZpZXcoQnJvd3NlcldpbmRvdyosIFdlYktpdFdlYlZpZXcqKTsKIHZvaWQgYnJvd3Nlcl93
aW5kb3dfbG9hZF91cmkoQnJvd3NlcldpbmRvdyosIGNvbnN0IGNoYXIgKnVyaSk7CmRpZmYgLS1n
aXQgYS9Ub29scy9NaW5pQnJvd3Nlci9ndGsvbWFpbi5jIGIvVG9vbHMvTWluaUJyb3dzZXIvZ3Rr
L21haW4uYwppbmRleCBhNDM2MDAxZjNlNDIuLmUwYzQyNjk2MDEwOSAxMDA2NDQKLS0tIGEvVG9v
bHMvTWluaUJyb3dzZXIvZ3RrL21haW4uYworKysgYi9Ub29scy9NaW5pQnJvd3Nlci9ndGsvbWFp
bi5jCkBAIC05Niw2ICs5Niw5IEBAIHN0YXRpYyBXZWJLaXRXZWJWaWV3ICpjcmVhdGVCcm93c2Vy
VGFiKEJyb3dzZXJXaW5kb3cgKndpbmRvdywgV2ViS2l0U2V0dGluZ3MgKndlCiB7CiAgICAgV2Vi
S2l0V2ViVmlldyAqd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyhnX29iamVjdF9uZXcoV0VCS0lU
X1RZUEVfV0VCX1ZJRVcsCiAgICAgICAgICJ3ZWItY29udGV4dCIsIGJyb3dzZXJfd2luZG93X2dl
dF93ZWJfY29udGV4dCh3aW5kb3cpLAorI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDk4LCAwKQor
ICAgICAgICAibmV0d29yay1zZXNzaW9uIiwgYnJvd3Nlcl93aW5kb3dfZ2V0X25ldHdvcmtfc2Vz
c2lvbih3aW5kb3cpLAorI2VuZGlmCiAgICAgICAgICJzZXR0aW5ncyIsIHdlYmtpdFNldHRpbmdz
LAogICAgICAgICAidXNlci1jb250ZW50LW1hbmFnZXIiLCB1c2VyQ29udGVudE1hbmFnZXIsCiAg
ICAgICAgICJpcy1jb250cm9sbGVkLWJ5LWF1dG9tYXRpb24iLCBhdXRvbWF0aW9uTW9kZSwKQEAg
LTM1NCw3ICszNTcsNyBAQCBzdGF0aWMgdm9pZCB3ZWJzaXRlRGF0YUNsZWFyZWRDYWxsYmFjayhX
ZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIsIEdBc3luYwogICAgICAgICB3ZWJraXRf
d2ViX3ZpZXdfcmVsb2FkKHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3dlYl92aWV3KGRh
dGFSZXF1ZXN0LT5yZXF1ZXN0KSk7CiB9CiAKLXN0YXRpYyB2b2lkIGFib3V0RGF0YVNjcmlwdE1l
c3NhZ2VSZWNlaXZlZENhbGxiYWNrKFdlYktpdFVzZXJDb250ZW50TWFuYWdlciAqdXNlckNvbnRl
bnRNYW5hZ2VyLCBXZWJLaXRKYXZhc2NyaXB0UmVzdWx0ICptZXNzYWdlLCBXZWJLaXRXZWJDb250
ZXh0ICp3ZWJDb250ZXh0KQorc3RhdGljIHZvaWQgYWJvdXREYXRhU2NyaXB0TWVzc2FnZVJlY2Vp
dmVkQ2FsbGJhY2soV2ViS2l0VXNlckNvbnRlbnRNYW5hZ2VyICp1c2VyQ29udGVudE1hbmFnZXIs
IFdlYktpdEphdmFzY3JpcHRSZXN1bHQgKm1lc3NhZ2UsIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdl
ciAqbWFuYWdlcikKIHsKICAgICBjaGFyICptZXNzYWdlU3RyaW5nID0ganNjX3ZhbHVlX3RvX3N0
cmluZyh3ZWJraXRfamF2YXNjcmlwdF9yZXN1bHRfZ2V0X2pzX3ZhbHVlKG1lc3NhZ2UpKTsKICAg
ICBjaGFyICoqdG9rZW5zID0gZ19zdHJzcGxpdChtZXNzYWdlU3RyaW5nLCAiOiIsIDMpOwpAQCAt
MzczLDcgKzM3Niw2IEBAIHN0YXRpYyB2b2lkIGFib3V0RGF0YVNjcmlwdE1lc3NhZ2VSZWNlaXZl
ZENhbGxiYWNrKFdlYktpdFVzZXJDb250ZW50TWFuYWdlciAqdXNlCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIgPSB3ZWJraXRf
d2ViX2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYkNvbnRleHQpOwogICAgIGd1
aW50NjQgdHlwZXMgPSBnX2FzY2lpX3N0cnRvdWxsKHRva2Vuc1sxXSwgTlVMTCwgMTApOwogICAg
IGlmICh0b2tlbkNvdW50ID09IDIpCiAgICAgICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdl
cl9jbGVhcihtYW5hZ2VyLCB0eXBlcywgMCwgTlVMTCwgKEdBc3luY1JlYWR5Q2FsbGJhY2spd2Vi
c2l0ZURhdGFDbGVhcmVkQ2FsbGJhY2ssIGRhdGFSZXF1ZXN0KTsKQEAgLTQ3NSwxMCArNDc3LDE1
IEBAIHN0YXRpYyB2b2lkIGdvdFdlYnNpdGVEYXRhQ2FsbGJhY2soV2ViS2l0V2Vic2l0ZURhdGFN
YW5hZ2VyICptYW5hZ2VyLCBHQXN5bmNSZXN1CiAgICAgZ19saXN0X2ZyZWVfZnVsbChkYXRhTGlz
dCwgKEdEZXN0cm95Tm90aWZ5KXdlYmtpdF93ZWJzaXRlX2RhdGFfdW5yZWYpOwogfQogCi1zdGF0
aWMgdm9pZCBhYm91dERhdGFIYW5kbGVSZXF1ZXN0KFdlYktpdFVSSVNjaGVtZVJlcXVlc3QgKnJl
cXVlc3QsIFdlYktpdFdlYkNvbnRleHQgKndlYkNvbnRleHQpCitzdGF0aWMgdm9pZCBhYm91dERh
dGFIYW5kbGVSZXF1ZXN0KFdlYktpdFVSSVNjaGVtZVJlcXVlc3QgKnJlcXVlc3QpCiB7CiAgICAg
QWJvdXREYXRhUmVxdWVzdCAqZGF0YVJlcXVlc3QgPSBhYm91dERhdGFSZXF1ZXN0TmV3KHJlcXVl
c3QpOwotICAgIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlciA9IHdlYmtpdF93ZWJf
Y29udGV4dF9nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIod2ViQ29udGV4dCk7CisgICAgV2ViS2l0
V2ViVmlldyAqd2ViVmlldyA9IHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3dlYl92aWV3
KHJlcXVlc3QpOworI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDk4LCAwKQorICAgIFdlYktpdFdl
YnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlciA9IHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyKHdlYmtpdF93ZWJfdmlld19nZXRfbmV0d29ya19zZXNzaW9uKHdl
YlZpZXcpKTsKKyNlbHNlCisgICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICptYW5hZ2VyID0g
d2Via2l0X3dlYl92aWV3X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcih3ZWJWaWV3KTsKKyNlbmRp
ZgogICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9mZXRjaChtYW5hZ2VyLCBXRUJLSVRf
V0VCU0lURV9EQVRBX0FMTCwgTlVMTCwgKEdBc3luY1JlYWR5Q2FsbGJhY2spZ290V2Vic2l0ZURh
dGFDYWxsYmFjaywgZGF0YVJlcXVlc3QpOwogfQogCkBAIC01MzAsMTQgKzUzNywxOSBAQCBzdGF0
aWMgdm9pZCBnb3RJVFBTdW1tYXJ5Q2FsbGJhY2soV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICpt
YW5hZ2VyLCBHQXN5bmNSZXN1bAogICAgIGFib3V0SVRQUmVxdWVzdEZyZWUoaXRwUmVxdWVzdCk7
CiB9CiAKLXN0YXRpYyB2b2lkIGFib3V0SVRQSGFuZGxlUmVxdWVzdChXZWJLaXRVUklTY2hlbWVS
ZXF1ZXN0ICpyZXF1ZXN0LCBXZWJLaXRXZWJDb250ZXh0ICp3ZWJDb250ZXh0KQorc3RhdGljIHZv
aWQgYWJvdXRJVFBIYW5kbGVSZXF1ZXN0KFdlYktpdFVSSVNjaGVtZVJlcXVlc3QgKnJlcXVlc3Qp
CiB7CiAgICAgQWJvdXRJVFBSZXF1ZXN0ICppdHBSZXF1ZXN0ID0gYWJvdXRJVFBSZXF1ZXN0TmV3
KHJlcXVlc3QpOwotICAgIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlciA9IHdlYmtp
dF93ZWJfY29udGV4dF9nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIod2ViQ29udGV4dCk7CisgICAg
V2ViS2l0V2ViVmlldyAqd2ViVmlldyA9IHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3dl
Yl92aWV3KHJlcXVlc3QpOworI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDk4LCAwKQorICAgIFdl
YktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlciA9IHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25f
Z2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYmtpdF93ZWJfdmlld19nZXRfbmV0d29ya19zZXNz
aW9uKHdlYlZpZXcpKTsKKyNlbHNlCisgICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICptYW5h
Z2VyID0gd2Via2l0X3dlYl92aWV3X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcih3ZWJWaWV3KTsK
KyNlbmRpZgogICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfaXRwX3N1bW1hcnko
bWFuYWdlciwgTlVMTCwgKEdBc3luY1JlYWR5Q2FsbGJhY2spZ290SVRQU3VtbWFyeUNhbGxiYWNr
LCBpdHBSZXF1ZXN0KTsKIH0KIAotc3RhdGljIHZvaWQgYWJvdXRVUklTY2hlbWVSZXF1ZXN0Q2Fs
bGJhY2soV2ViS2l0VVJJU2NoZW1lUmVxdWVzdCAqcmVxdWVzdCwgV2ViS2l0V2ViQ29udGV4dCAq
d2ViQ29udGV4dCkKK3N0YXRpYyB2b2lkIGFib3V0VVJJU2NoZW1lUmVxdWVzdENhbGxiYWNrKFdl
YktpdFVSSVNjaGVtZVJlcXVlc3QgKnJlcXVlc3QsIGdwb2ludGVyIHVzZXJEYXRhKQogewogICAg
IEdJbnB1dFN0cmVhbSAqc3RyZWFtOwogICAgIGdzaXplIHN0cmVhbUxlbmd0aDsKQEAgLTU1Nyw5
ICs1NjksOSBAQCBzdGF0aWMgdm9pZCBhYm91dFVSSVNjaGVtZVJlcXVlc3RDYWxsYmFjayhXZWJL
aXRVUklTY2hlbWVSZXF1ZXN0ICpyZXF1ZXN0LCBXZWJLaQogICAgICAgICB3ZWJraXRfdXJpX3Nj
aGVtZV9yZXF1ZXN0X2ZpbmlzaChyZXF1ZXN0LCBzdHJlYW0sIHN0cmVhbUxlbmd0aCwgInRleHQv
aHRtbCIpOwogICAgICAgICBnX29iamVjdF91bnJlZihzdHJlYW0pOwogICAgIH0gZWxzZSBpZiAo
IWdfc3RyY21wMChwYXRoLCAiZGF0YSIpKQotICAgICAgICBhYm91dERhdGFIYW5kbGVSZXF1ZXN0
KHJlcXVlc3QsIHdlYkNvbnRleHQpOworICAgICAgICBhYm91dERhdGFIYW5kbGVSZXF1ZXN0KHJl
cXVlc3QpOwogICAgIGVsc2UgaWYgKCFnX3N0cmNtcDAocGF0aCwgIml0cCIpKQotICAgICAgICBh
Ym91dElUUEhhbmRsZVJlcXVlc3QocmVxdWVzdCwgd2ViQ29udGV4dCk7CisgICAgICAgIGFib3V0
SVRQSGFuZGxlUmVxdWVzdChyZXF1ZXN0KTsKICAgICBlbHNlIHsKICAgICAgICAgZXJyb3IgPSBn
X2Vycm9yX25ldyhNSU5JX0JST1dTRVJfRVJST1IsIE1JTklfQlJPV1NFUl9FUlJPUl9JTlZBTElE
X0FCT1VUX1BBVEgsICJJbnZhbGlkIGFib3V0OiVzIHBhZ2UuIiwgcGF0aCk7CiAgICAgICAgIHdl
YmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZmluaXNoX2Vycm9yKHJlcXVlc3QsIGVycm9yKTsKQEAg
LTY2MCw2ICs2NzIsNDYgQEAgc3RhdGljIHZvaWQgc3RhcnR1cChHQXBwbGljYXRpb24gKmFwcGxp
Y2F0aW9uKQogCiBzdGF0aWMgdm9pZCBhY3RpdmF0ZShHQXBwbGljYXRpb24gKmFwcGxpY2F0aW9u
LCBXZWJLaXRTZXR0aW5ncyAqd2Via2l0U2V0dGluZ3MpCiB7CisjaWYgR1RLX0NIRUNLX1ZFUlNJ
T04oMywgOTgsIDApCisgICAgV2ViS2l0TmV0d29ya1Nlc3Npb24gKm5ldHdvcmtTZXNzaW9uID0g
TlVMTDsKKyAgICBpZiAoIWF1dG9tYXRpb25Nb2RlKSB7CisgICAgICAgIGlmIChwcml2YXRlTW9k
ZSkKKyAgICAgICAgICAgIG5ldHdvcmtTZXNzaW9uID0gd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9u
ZXdfZXBoZW1lcmFsKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgY2hhciAqZGF0YURp
cmVjdG9yeSA9IGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfdXNlcl9kYXRhX2RpcigpLCAid2Via2l0
Z3RrLSIgV0VCS0lUR1RLX0FQSV9WRVJTSU9OLCAiTWluaUJyb3dzZXIiLCBOVUxMKTsKKyAgICAg
ICAgICAgIGNoYXIgKmNhY2hlRGlyZWN0b3J5ID0gZ19idWlsZF9maWxlbmFtZShnX2dldF91c2Vy
X2NhY2hlX2RpcigpLCAid2Via2l0Z3RrLSIgV0VCS0lUR1RLX0FQSV9WRVJTSU9OLCAiTWluaUJy
b3dzZXIiLCBOVUxMKTsKKyAgICAgICAgICAgIG5ldHdvcmtTZXNzaW9uID0gd2Via2l0X25ldHdv
cmtfc2Vzc2lvbl9uZXcoZGF0YURpcmVjdG9yeSwgY2FjaGVEaXJlY3RvcnkpOworICAgICAgICAg
ICAgZ19mcmVlKGRhdGFEaXJlY3RvcnkpOworICAgICAgICAgICAgZ19mcmVlKGNhY2hlRGlyZWN0
b3J5KTsKKyAgICAgICAgfQorCisgICAgICAgIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fc2V0X2l0
cF9lbmFibGVkKG5ldHdvcmtTZXNzaW9uLCBlbmFibGVJVFApOworCisgICAgICAgIGlmIChwcm94
eSkgeworICAgICAgICAgICAgV2ViS2l0TmV0d29ya1Byb3h5U2V0dGluZ3MgKndlYmtpdFByb3h5
U2V0dGluZ3MgPSB3ZWJraXRfbmV0d29ya19wcm94eV9zZXR0aW5nc19uZXcocHJveHksIGlnbm9y
ZUhvc3RzKTsKKyAgICAgICAgICAgIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fc2V0X3Byb3h5X3Nl
dHRpbmdzKG5ldHdvcmtTZXNzaW9uLCBXRUJLSVRfTkVUV09SS19QUk9YWV9NT0RFX0NVU1RPTSwg
d2Via2l0UHJveHlTZXR0aW5ncyk7CisgICAgICAgICAgICB3ZWJraXRfbmV0d29ya19wcm94eV9z
ZXR0aW5nc19mcmVlKHdlYmtpdFByb3h5U2V0dGluZ3MpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGlnbm9yZVRMU0Vycm9ycykKKyAgICAgICAgICAgIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25f
c2V0X3Rsc19lcnJvcnNfcG9saWN5KG5ldHdvcmtTZXNzaW9uLCBXRUJLSVRfVExTX0VSUk9SU19Q
T0xJQ1lfSUdOT1JFKTsKKworICAgICAgICBpZiAoY29va2llc1BvbGljeSkgeworICAgICAgICAg
ICAgV2ViS2l0Q29va2llTWFuYWdlciAqY29va2llTWFuYWdlciA9IHdlYmtpdF9uZXR3b3JrX3Nl
c3Npb25fZ2V0X2Nvb2tpZV9tYW5hZ2VyKG5ldHdvcmtTZXNzaW9uKTsKKyAgICAgICAgICAgIEdF
bnVtQ2xhc3MgKmVudW1DbGFzcyA9IGdfdHlwZV9jbGFzc19yZWYoV0VCS0lUX1RZUEVfQ09PS0lF
X0FDQ0VQVF9QT0xJQ1kpOworICAgICAgICAgICAgR0VudW1WYWx1ZSAqZW51bVZhbHVlID0gZ19l
bnVtX2dldF92YWx1ZV9ieV9uaWNrKGVudW1DbGFzcywgY29va2llc1BvbGljeSk7CisgICAgICAg
ICAgICBpZiAoZW51bVZhbHVlKQorICAgICAgICAgICAgICAgIHdlYmtpdF9jb29raWVfbWFuYWdl
cl9zZXRfYWNjZXB0X3BvbGljeShjb29raWVNYW5hZ2VyLCBlbnVtVmFsdWUtPnZhbHVlKTsKKyAg
ICAgICAgICAgIGdfdHlwZV9jbGFzc191bnJlZihlbnVtQ2xhc3MpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGNvb2tpZXNGaWxlICYmICF3ZWJraXRfbmV0d29ya19zZXNzaW9uX2lzX2VwaGVt
ZXJhbChuZXR3b3JrU2Vzc2lvbikpIHsKKyAgICAgICAgICAgIFdlYktpdENvb2tpZU1hbmFnZXIg
KmNvb2tpZU1hbmFnZXIgPSB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF9jb29raWVfbWFuYWdl
cihuZXR3b3JrU2Vzc2lvbik7CisgICAgICAgICAgICBXZWJLaXRDb29raWVQZXJzaXN0ZW50U3Rv
cmFnZSBzdG9yYWdlVHlwZSA9IGdfc3RyX2hhc19zdWZmaXgoY29va2llc0ZpbGUsICIudHh0Iikg
PyBXRUJLSVRfQ09PS0lFX1BFUlNJU1RFTlRfU1RPUkFHRV9URVhUIDogV0VCS0lUX0NPT0tJRV9Q
RVJTSVNURU5UX1NUT1JBR0VfU1FMSVRFOworICAgICAgICAgICAgd2Via2l0X2Nvb2tpZV9tYW5h
Z2VyX3NldF9wZXJzaXN0ZW50X3N0b3JhZ2UoY29va2llTWFuYWdlciwgY29va2llc0ZpbGUsIHN0
b3JhZ2VUeXBlKTsKKyAgICAgICAgfQorICAgIH0KKyNlbHNlCiAgICAgV2ViS2l0V2Vic2l0ZURh
dGFNYW5hZ2VyICptYW5hZ2VyOwogICAgIGlmIChwcml2YXRlTW9kZSB8fCBhdXRvbWF0aW9uTW9k
ZSkKICAgICAgICAgbWFuYWdlciA9IHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9uZXdfZXBo
ZW1lcmFsKCk7CkBAIC02ODEsMjEgKzczMywyNiBAQCBzdGF0aWMgdm9pZCBhY3RpdmF0ZShHQXBw
bGljYXRpb24gKmFwcGxpY2F0aW9uLCBXZWJLaXRTZXR0aW5ncyAqd2Via2l0U2V0dGluZ3MpCiAK
ICAgICBpZiAoaWdub3JlVExTRXJyb3JzKQogICAgICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21h
bmFnZXJfc2V0X3Rsc19lcnJvcnNfcG9saWN5KG1hbmFnZXIsIFdFQktJVF9UTFNfRVJST1JTX1BP
TElDWV9JR05PUkUpOworI2VuZGlmCiAKLSAgICBXZWJLaXRXZWJDb250ZXh0ICp3ZWJDb250ZXh0
ID0gZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9DT05URVhULCAid2Vic2l0ZS1kYXRhLW1h
bmFnZXIiLCBtYW5hZ2VyLAorICAgIFdlYktpdFdlYkNvbnRleHQgKndlYkNvbnRleHQgPSBnX29i
amVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX0NPTlRFWFQsCiAjaWYgIUdUS19DSEVDS19WRVJTSU9O
KDMsIDk4LCAwKQorICAgICAgICAid2Vic2l0ZS1kYXRhLW1hbmFnZXIiLCBtYW5hZ2VyLAogICAg
ICAgICAicHJvY2Vzcy1zd2FwLW9uLWNyb3NzLXNpdGUtbmF2aWdhdGlvbi1lbmFibGVkIiwgVFJV
RSwKICAgICAgICAgInVzZS1zeXN0ZW0tYXBwZWFyYW5jZS1mb3Itc2Nyb2xsYmFycyIsIEZBTFNF
LAogI2VuZGlmCiAgICAgICAgICJ0aW1lLXpvbmUtb3ZlcnJpZGUiLCB0aW1lWm9uZSwKICAgICAg
ICAgTlVMTCk7CisjaWYgIUdUS19DSEVDS19WRVJTSU9OKDMsIDk4LCAwKQogICAgIGdfb2JqZWN0
X3VucmVmKG1hbmFnZXIpOworI2VuZGlmCiAKICNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMywgOTgs
IDApCiAgICAgaWYgKGVuYWJsZVNhbmRib3gpCiAgICAgICAgIHdlYmtpdF93ZWJfY29udGV4dF9z
ZXRfc2FuZGJveF9lbmFibGVkKHdlYkNvbnRleHQsIFRSVUUpOwogI2VuZGlmCiAKKyNpZiAhR1RL
X0NIRUNLX1ZFUlNJT04oMywgOTgsIDApCiAgICAgaWYgKGNvb2tpZXNQb2xpY3kpIHsKICAgICAg
ICAgV2ViS2l0Q29va2llTWFuYWdlciAqY29va2llTWFuYWdlciA9IHdlYmtpdF93ZWJfY29udGV4
dF9nZXRfY29va2llX21hbmFnZXIod2ViQ29udGV4dCk7CiAgICAgICAgIEdFbnVtQ2xhc3MgKmVu
dW1DbGFzcyA9IGdfdHlwZV9jbGFzc19yZWYoV0VCS0lUX1RZUEVfQ09PS0lFX0FDQ0VQVF9QT0xJ
Q1kpOwpAQCAtNzEwLDE1ICs3NjcsMjcgQEAgc3RhdGljIHZvaWQgYWN0aXZhdGUoR0FwcGxpY2F0
aW9uICphcHBsaWNhdGlvbiwgV2ViS2l0U2V0dGluZ3MgKndlYmtpdFNldHRpbmdzKQogICAgICAg
ICBXZWJLaXRDb29raWVQZXJzaXN0ZW50U3RvcmFnZSBzdG9yYWdlVHlwZSA9IGdfc3RyX2hhc19z
dWZmaXgoY29va2llc0ZpbGUsICIudHh0IikgPyBXRUJLSVRfQ09PS0lFX1BFUlNJU1RFTlRfU1RP
UkFHRV9URVhUIDogV0VCS0lUX0NPT0tJRV9QRVJTSVNURU5UX1NUT1JBR0VfU1FMSVRFOwogICAg
ICAgICB3ZWJraXRfY29va2llX21hbmFnZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZShjb29raWVN
YW5hZ2VyLCBjb29raWVzRmlsZSwgc3RvcmFnZVR5cGUpOwogICAgIH0KKyNlbmRpZgorCisgICAg
V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICpkYXRhTWFuYWdlcjsKKyNpZiBHVEtfQ0hFQ0tfVkVS
U0lPTigzLCA5OCwgMCkKKyAgICBkYXRhTWFuYWdlciA9IG5ldHdvcmtTZXNzaW9uID8gd2Via2l0
X25ldHdvcmtfc2Vzc2lvbl9nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIobmV0d29ya1Nlc3Npb24p
IDogTlVMTDsKKyNlbHNlCisgICAgZGF0YU1hbmFnZXIgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0
X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYkNvbnRleHQpOworI2VuZGlmCiAKLSAgICAvLyBFbmFi
bGUgdGhlIGZhdmljb24gZGF0YWJhc2UsIGJ5IHNwZWNpZnlpbmcgdGhlIGRlZmF1bHQgZGlyZWN0
b3J5LgorICAgIC8vIEVuYWJsZSB0aGUgZmF2aWNvbiBkYXRhYmFzZS4KKyNpZiBHVEtfQ0hFQ0tf
VkVSU0lPTigzLCA5OCwgMCkKKyAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X2Zh
dmljb25zX2VuYWJsZWQoZGF0YU1hbmFnZXIsIFRSVUUpOworI2Vsc2UKICAgICB3ZWJraXRfd2Vi
X2NvbnRleHRfc2V0X2Zhdmljb25fZGF0YWJhc2VfZGlyZWN0b3J5KHdlYkNvbnRleHQsIE5VTEwp
OworI2VuZGlmCiAKLSAgICB3ZWJraXRfd2ViX2NvbnRleHRfcmVnaXN0ZXJfdXJpX3NjaGVtZSh3
ZWJDb250ZXh0LCBCUk9XU0VSX0FCT1VUX1NDSEVNRSwgKFdlYktpdFVSSVNjaGVtZVJlcXVlc3RD
YWxsYmFjaylhYm91dFVSSVNjaGVtZVJlcXVlc3RDYWxsYmFjaywgd2ViQ29udGV4dCwgTlVMTCk7
CisgICAgd2Via2l0X3dlYl9jb250ZXh0X3JlZ2lzdGVyX3VyaV9zY2hlbWUod2ViQ29udGV4dCwg
QlJPV1NFUl9BQk9VVF9TQ0hFTUUsIChXZWJLaXRVUklTY2hlbWVSZXF1ZXN0Q2FsbGJhY2spYWJv
dXRVUklTY2hlbWVSZXF1ZXN0Q2FsbGJhY2ssIE5VTEwsIE5VTEwpOwogCiAgICAgV2ViS2l0VXNl
ckNvbnRlbnRNYW5hZ2VyICp1c2VyQ29udGVudE1hbmFnZXIgPSB3ZWJraXRfdXNlcl9jb250ZW50
X21hbmFnZXJfbmV3KCk7CiAgICAgd2Via2l0X3VzZXJfY29udGVudF9tYW5hZ2VyX3JlZ2lzdGVy
X3NjcmlwdF9tZXNzYWdlX2hhbmRsZXIodXNlckNvbnRlbnRNYW5hZ2VyLCAiYWJvdXREYXRhIik7
Ci0gICAgZ19zaWduYWxfY29ubmVjdCh1c2VyQ29udGVudE1hbmFnZXIsICJzY3JpcHQtbWVzc2Fn
ZS1yZWNlaXZlZDo6YWJvdXREYXRhIiwgR19DQUxMQkFDSyhhYm91dERhdGFTY3JpcHRNZXNzYWdl
UmVjZWl2ZWRDYWxsYmFjayksIHdlYkNvbnRleHQpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QodXNl
ckNvbnRlbnRNYW5hZ2VyLCAic2NyaXB0LW1lc3NhZ2UtcmVjZWl2ZWQ6OmFib3V0RGF0YSIsIEdf
Q0FMTEJBQ0soYWJvdXREYXRhU2NyaXB0TWVzc2FnZVJlY2VpdmVkQ2FsbGJhY2spLCBkYXRhTWFu
YWdlcik7CiAKICAgICBXZWJLaXRXZWJzaXRlUG9saWNpZXMgKmRlZmF1bHRXZWJzaXRlUG9saWNp
ZXMgPSB3ZWJraXRfd2Vic2l0ZV9wb2xpY2llc19uZXdfd2l0aF9wb2xpY2llcygKICAgICAgICAg
ImF1dG9wbGF5IiwgYXV0b3BsYXlQb2xpY3ksCkBAIC03NTEsNyArODIwLDExIEBAIHN0YXRpYyB2
b2lkIGFjdGl2YXRlKEdBcHBsaWNhdGlvbiAqYXBwbGljYXRpb24sIFdlYktpdFNldHRpbmdzICp3
ZWJraXRTZXR0aW5ncykKICAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2F1dG9tYXRpb25fYWxs
b3dlZCh3ZWJDb250ZXh0LCBhdXRvbWF0aW9uTW9kZSk7CiAgICAgZ19zaWduYWxfY29ubmVjdCh3
ZWJDb250ZXh0LCAiYXV0b21hdGlvbi1zdGFydGVkIiwgR19DQUxMQkFDSyhhdXRvbWF0aW9uU3Rh
cnRlZENhbGxiYWNrKSwgYXBwbGljYXRpb24pOwogCisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywg
OTgsIDApCisgICAgQnJvd3NlcldpbmRvdyAqbWFpbldpbmRvdyA9IEJST1dTRVJfV0lORE9XKGJy
b3dzZXJfd2luZG93X25ldyhOVUxMLCB3ZWJDb250ZXh0LCBuZXR3b3JrU2Vzc2lvbikpOworI2Vs
c2UKICAgICBCcm93c2VyV2luZG93ICptYWluV2luZG93ID0gQlJPV1NFUl9XSU5ET1coYnJvd3Nl
cl93aW5kb3dfbmV3KE5VTEwsIHdlYkNvbnRleHQpKTsKKyNlbmRpZgogICAgIGd0a19hcHBsaWNh
dGlvbl9hZGRfd2luZG93KEdUS19BUFBMSUNBVElPTihhcHBsaWNhdGlvbiksIEdUS19XSU5ET1co
bWFpbldpbmRvdykpOwogICAgIGlmIChkYXJrTW9kZSkKICAgICAgICAgZ19vYmplY3Rfc2V0KGd0
a193aWRnZXRfZ2V0X3NldHRpbmdzKEdUS19XSURHRVQobWFpbldpbmRvdykpLCAiZ3RrLWFwcGxp
Y2F0aW9uLXByZWZlci1kYXJrLXRoZW1lIiwgVFJVRSwgTlVMTCk7CkBAIC03OTUsNiArODY4LDkg
QEAgc3RhdGljIHZvaWQgYWN0aXZhdGUoR0FwcGxpY2F0aW9uICphcHBsaWNhdGlvbiwgV2ViS2l0
U2V0dGluZ3MgKndlYmtpdFNldHRpbmdzKQogICAgIGdfb2JqZWN0X3VucmVmKHdlYkNvbnRleHQp
OwogICAgIGdfb2JqZWN0X3VucmVmKHVzZXJDb250ZW50TWFuYWdlcik7CiAgICAgZ19vYmplY3Rf
dW5yZWYoZGVmYXVsdFdlYnNpdGVQb2xpY2llcyk7CisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywg
OTgsIDApCisgICAgZ19jbGVhcl9vYmplY3QoJm5ldHdvcmtTZXNzaW9uKTsKKyNlbmRpZgogCiAg
ICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKGZpcnN0VGFiKTsKICAgICBndGtfd2lkZ2V0X3Nob3co
R1RLX1dJREdFVChtYWluV2luZG93KSk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdEdMaWIvVGVzdEF1dGhlbnRpY2F0aW9uLmNwcCBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0QXV0aGVudGljYXRpb24uY3BwCmluZGV4IGI0MzEz
OTgwMmQ5Mi4uMmVhYTAxNjA4ZWM0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdEdMaWIvVGVzdEF1dGhlbnRpY2F0aW9uLmNwcAorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdEF1dGhlbnRpY2F0aW9uLmNwcApAQCAtMjU0LDEw
ICsyNTQsMTcgQEAgc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvblN0b3JhZ2Uo
QXV0aGVudGljYXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rwb2kKICAgICBnX2Fzc2VydF9mYWxzZSh0
ZXN0LT5tX2F1dGhlbnRpY2F0aW9uU3VjY2VlZGVkUmVjZWl2ZWQpOwogI2VuZGlmCiAKKyNpZiBF
TkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICBhdXRvKiBuZXR3b3JrU2Vzc2lvbiA9IHdlYmtpdF93
ZWJfdmlld19nZXRfbmV0d29ya19zZXNzaW9uKHRlc3QtPm1fd2ViVmlldyk7CisgICAgZ19hc3Nl
cnRfdHJ1ZSh3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF9wZXJzaXN0ZW50X2NyZWRlbnRpYWxf
c3RvcmFnZV9lbmFibGVkKG5ldHdvcmtTZXNzaW9uKSk7CisgICAgd2Via2l0X25ldHdvcmtfc2Vz
c2lvbl9zZXRfcGVyc2lzdGVudF9jcmVkZW50aWFsX3N0b3JhZ2VfZW5hYmxlZChuZXR3b3JrU2Vz
c2lvbiwgRkFMU0UpOworICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25f
Z2V0X3BlcnNpc3RlbnRfY3JlZGVudGlhbF9zdG9yYWdlX2VuYWJsZWQobmV0d29ya1Nlc3Npb24p
KTsKKyNlbHNlCiAgICAgYXV0byogd2Vic2l0ZURhdGFNYW5hZ2VyID0gd2Via2l0X3dlYl92aWV3
X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcih0ZXN0LT5tX3dlYlZpZXcpOwogICAgIGdfYXNzZXJ0
X3RydWUod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9wZXJzaXN0ZW50X2NyZWRlbnRp
YWxfc3RvcmFnZV9lbmFibGVkKHdlYnNpdGVEYXRhTWFuYWdlcikpOwogICAgIHdlYmtpdF93ZWJz
aXRlX2RhdGFfbWFuYWdlcl9zZXRfcGVyc2lzdGVudF9jcmVkZW50aWFsX3N0b3JhZ2VfZW5hYmxl
ZCh3ZWJzaXRlRGF0YU1hbmFnZXIsIEZBTFNFKTsKICAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRf
d2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X3BlcnNpc3RlbnRfY3JlZGVudGlhbF9zdG9yYWdlX2Vu
YWJsZWQod2Vic2l0ZURhdGFNYW5hZ2VyKSk7CisjZW5kaWYKIAogICAgIHRlc3QtPmxvYWRVUkko
a1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2F1dGgtdGVzdC5odG1sIikuZGF0YSgpKTsKICAgICBy
ZXF1ZXN0ID0gdGVzdC0+d2FpdEZvckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpOwpAQCAtMjgwLDcg
KzI4NywxMSBAQCBzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uU3RvcmFnZShB
dXRoZW50aWNhdGlvblRlc3QqIHRlc3QsIGdjb25zdHBvaQogICAgIHRlc3QtPndhaXRVbnRpbExv
YWRGaW5pc2hlZCgpOwogICAgIGdfYXNzZXJ0X2ZhbHNlKHRlc3QtPm1fYXV0aGVudGljYXRpb25D
YW5jZWxsZWRSZWNlaXZlZCk7CiAgICAgZ19hc3NlcnRfdHJ1ZSh0ZXN0LT5tX2F1dGhlbnRpY2F0
aW9uU3VjY2VlZGVkUmVjZWl2ZWQpOworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIHdl
YmtpdF9uZXR3b3JrX3Nlc3Npb25fc2V0X3BlcnNpc3RlbnRfY3JlZGVudGlhbF9zdG9yYWdlX2Vu
YWJsZWQobmV0d29ya1Nlc3Npb24sIFRSVUUpOworI2Vsc2UKICAgICB3ZWJraXRfd2Vic2l0ZV9k
YXRhX21hbmFnZXJfc2V0X3BlcnNpc3RlbnRfY3JlZGVudGlhbF9zdG9yYWdlX2VuYWJsZWQod2Vi
c2l0ZURhdGFNYW5hZ2VyLCBUUlVFKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCB0ZXN0V2Vi
Vmlld0F1dGhlbnRpY2F0aW9uU3VjY2VzcyhBdXRoZW50aWNhdGlvblRlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCkBAIC00NjcsOCArNDc4LDEyIEBAIHB1YmxpYzoKICAgICAgICAgZ19hc3NlcnRf
ZmFsc2UobV9wcm94eVNlcnZlci5iYXNlVVJMKCkuaXNOdWxsKCkpOwogICAgICAgICBnUHJveHlT
ZXJ2ZXJQb3J0ID0gbV9wcm94eVNlcnZlci5wb3J0KCk7CiAgICAgICAgIFdlYktpdE5ldHdvcmtQ
cm94eVNldHRpbmdzKiBzZXR0aW5ncyA9IHdlYmtpdF9uZXR3b3JrX3Byb3h5X3NldHRpbmdzX25l
dyhtX3Byb3h5U2VydmVyLmJhc2VVUkwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBudWxscHRy
KTsKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICAgICAgd2Via2l0X25ldHdvcmtfc2Vz
c2lvbl9zZXRfcHJveHlfc2V0dGluZ3MobV9uZXR3b3JrU2Vzc2lvbi5nZXQoKSwgV0VCS0lUX05F
VFdPUktfUFJPWFlfTU9ERV9DVVNUT00sIHNldHRpbmdzKTsKKyNlbHNlCiAgICAgICAgIGF1dG8q
IHdlYnNpdGVEYXRhTWFuYWdlciA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfd2Vic2l0ZV9kYXRh
X21hbmFnZXIobV93ZWJDb250ZXh0LmdldCgpKTsKICAgICAgICAgd2Via2l0X3dlYnNpdGVfZGF0
YV9tYW5hZ2VyX3NldF9uZXR3b3JrX3Byb3h5X3NldHRpbmdzKHdlYnNpdGVEYXRhTWFuYWdlciwg
V0VCS0lUX05FVFdPUktfUFJPWFlfTU9ERV9DVVNUT00sIHNldHRpbmdzKTsKKyNlbmRpZgogICAg
ICAgICB3ZWJraXRfbmV0d29ya19wcm94eV9zZXR0aW5nc19mcmVlKHNldHRpbmdzKTsKICAgICB9
CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0
QXV0b21hdGlvblNlc3Npb24uY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRH
TGliL1Rlc3RBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKaW5kZXggMmYxOTUyYzI5ODliLi4wMGI1NTA4
OGY3MmQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9U
ZXN0QXV0b21hdGlvblNlc3Npb24uY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0R0xpYi9UZXN0QXV0b21hdGlvblNlc3Npb24uY3BwCkBAIC0zNDAsNiArMzQwLDEyIEBA
IHN0YXRpYyB2b2lkIHRlc3RBdXRvbWF0aW9uU2Vzc2lvblJlcXVlc3RTZXNzaW9uKEF1dG9tYXRp
b25UZXN0KiB0ZXN0LCBnY29uc3Rwb2luCiAgICAgICAgIG51bGxwdHIpKTsKICAgICBnX2Fzc2Vy
dF90cnVlKHdlYmtpdF93ZWJfdmlld19pc19jb250cm9sbGVkX2J5X2F1dG9tYXRpb24od2ViVmll
dy5nZXQoKSkpOwogICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X3dlYl92aWV3X2dldF9hdXRv
bWF0aW9uX3ByZXNlbnRhdGlvbl90eXBlKHdlYlZpZXcuZ2V0KCkpLCA9PSwgV0VCS0lUX0FVVE9N
QVRJT05fQlJPV1NJTkdfQ09OVEVYVF9QUkVTRU5UQVRJT05fV0lORE9XKTsKKyNpZiBFTkFCTEUo
MjAyMl9HTElCX0FQSSkKKyAgICAvLyBBdXRvbWF0aW9uIHNlc3Npb24gaGFzIGl0cyBvd24gZXBo
ZW1lcmFsIHNlc3Npb24uCisgICAgYXV0byogbmV0d29ya1Nlc3Npb24gPSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X25ldHdvcmtfc2Vzc2lvbih3ZWJWaWV3LmdldCgpKTsKKyAgICBnX2Fzc2VydF9mYWxz
ZShuZXR3b3JrU2Vzc2lvbiA9PSB0ZXN0LT5tX25ldHdvcmtTZXNzaW9uLmdldCgpKTsKKyAgICBn
X2Fzc2VydF90cnVlKHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25faXNfZXBoZW1lcmFsKG5ldHdvcmtT
ZXNzaW9uKSk7CisjZW5kaWYKICAgICBnX2Fzc2VydF90cnVlKHRlc3QtPmNyZWF0ZVRvcExldmVs
QnJvd3NpbmdDb250ZXh0KHdlYlZpZXcuZ2V0KCkpKTsKIAogICAgIGF1dG8gbmV3V2ViVmlld0lu
V2luZG93ID0gVGVzdDo6YWRvcHRWaWV3KGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfVklF
VywKQEAgLTM0NywxMCArMzUzLDE3IEBAIHN0YXRpYyB2b2lkIHRlc3RBdXRvbWF0aW9uU2Vzc2lv
blJlcXVlc3RTZXNzaW9uKEF1dG9tYXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rwb2luCiAgICAgICAg
ICJiYWNrZW5kIiwgVGVzdDo6Y3JlYXRlV2ViVmlld0JhY2tlbmQoKSwKICNlbmRpZgogICAgICAg
ICAid2ViLWNvbnRleHQiLCB0ZXN0LT5tX3dlYkNvbnRleHQuZ2V0KCksCisjaWYgRU5BQkxFKDIw
MjJfR0xJQl9BUEkpCisgICAgICAgIC8vIENoZWNrIGFsc28gaGVyZSB0aGF0IG5ldHdvcmsgc2Vz
c2lvbiBwcm9wZXJ0eSBpcyBpZ25vcmVkIHdoZW4gaXMtY29udHJvbGxlZC1ieS1hdXRvbWF0aW9u
IGlzIHRydWUuCisgICAgICAgICJuZXR3b3JrLXNlc3Npb24iLCB0ZXN0LT5tX25ldHdvcmtTZXNz
aW9uLmdldCgpLAorI2VuZGlmCiAgICAgICAgICJpcy1jb250cm9sbGVkLWJ5LWF1dG9tYXRpb24i
LCBUUlVFLAogICAgICAgICBudWxscHRyKSk7CiAgICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfd2Vi
X3ZpZXdfaXNfY29udHJvbGxlZF9ieV9hdXRvbWF0aW9uKG5ld1dlYlZpZXdJbldpbmRvdy5nZXQo
KSkpOwogICAgIGdfYXNzZXJ0X2NtcHVpbnQod2Via2l0X3dlYl92aWV3X2dldF9hdXRvbWF0aW9u
X3ByZXNlbnRhdGlvbl90eXBlKG5ld1dlYlZpZXdJbldpbmRvdy5nZXQoKSksID09LCBXRUJLSVRf
QVVUT01BVElPTl9CUk9XU0lOR19DT05URVhUX1BSRVNFTlRBVElPTl9XSU5ET1cpOworI2lmIEVO
QUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X3dlYl92aWV3X2dl
dF9uZXR3b3JrX3Nlc3Npb24obmV3V2ViVmlld0luV2luZG93LmdldCgpKSA9PSBuZXR3b3JrU2Vz
c2lvbik7CisjZW5kaWYKICAgICBnX2Fzc2VydF90cnVlKHRlc3QtPmNyZWF0ZU5ld1dpbmRvdyhu
ZXdXZWJWaWV3SW5XaW5kb3cuZ2V0KCkpKTsKIAogICAgIGF1dG8gbmV3V2ViVmlld0luVGFiID0g
VGVzdDo6YWRvcHRWaWV3KGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfVklFVywKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0Q29va2llTWFu
YWdlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdENvb2tp
ZU1hbmFnZXIuY3BwCmluZGV4IDU4ZjIzNzBiOWEyMC4uMzQ1NTljMmVjODA0IDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdENvb2tpZU1hbmFnZXIu
Y3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0Q29va2ll
TWFuYWdlci5jcHAKQEAgLTU3LDkgKzU3LDE3IEBAIHB1YmxpYzoKIAogICAgIENvb2tpZU1hbmFn
ZXJUZXN0KCkKICAgICAgICAgOiBXZWJWaWV3VGVzdCgpCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9B
UEkpCisgICAgICAgICwgbV9jb29raWVNYW5hZ2VyKHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0
X2Nvb2tpZV9tYW5hZ2VyKG1fbmV0d29ya1Nlc3Npb24uZ2V0KCkpKQorICAgICAgICAsIG1fd2Vi
c2l0ZURhdGFNYW5hZ2VyKHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X3dlYnNpdGVfZGF0YV9t
YW5hZ2VyKG1fbmV0d29ya1Nlc3Npb24uZ2V0KCkpKQorI2Vsc2UKICAgICAgICAgLCBtX2Nvb2tp
ZU1hbmFnZXIod2Via2l0X3dlYl9jb250ZXh0X2dldF9jb29raWVfbWFuYWdlcihtX3dlYkNvbnRl
eHQuZ2V0KCkpKQorICAgICAgICAsIG1fd2Vic2l0ZURhdGFNYW5hZ2VyKHdlYmtpdF93ZWJfY29u
dGV4dF9nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIobV93ZWJDb250ZXh0LmdldCgpKSkKKyNlbmRp
ZgogICAgIHsKLSAgICAgICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFn
ZXJfZ2V0X2Nvb2tpZV9tYW5hZ2VyKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfd2Vic2l0ZV9kYXRh
X21hbmFnZXIobV93ZWJDb250ZXh0LmdldCgpKSkgPT0gbV9jb29raWVNYW5hZ2VyKTsKKyNpZiAh
RU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X3dlYnNp
dGVfZGF0YV9tYW5hZ2VyX2dldF9jb29raWVfbWFuYWdlcihtX3dlYnNpdGVEYXRhTWFuYWdlcikg
PT0gbV9jb29raWVNYW5hZ2VyKTsKKyNlbmRpZgogICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1f
Y29va2llTWFuYWdlciwgImNoYW5nZWQiLCBHX0NBTExCQUNLKGNvb2tpZXNDaGFuZ2VkQ2FsbGJh
Y2spLCB0aGlzKTsKICAgICB9CiAKQEAgLTE3NSwyOCArMTgzLDM3IEBAIHB1YmxpYzoKICAgICAg
ICAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX3NldF9hY2NlcHRfcG9saWN5KG1fY29va2llTWFuYWdl
ciwgcG9saWN5KTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBnZXREb21haW5zUmVhZHlDYWxs
YmFjayhHT2JqZWN0KiBvYmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2Vy
RGF0YSkKKyAgICBHVW5pcXVlUHRyPEdMaXN0PiBmZXRjaCgpCiAgICAgewotICAgICAgICBHVW5p
cXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgICAgIEdfR05VQ19CRUdJTl9JR05PUkVfREVQ
UkVDQVRJT05TOwotICAgICAgICBjaGFyKiogZG9tYWlucyA9IHdlYmtpdF9jb29raWVfbWFuYWdl
cl9nZXRfZG9tYWluc193aXRoX2Nvb2tpZXNfZmluaXNoKFdFQktJVF9DT09LSUVfTUFOQUdFUihv
YmplY3QpLCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgICAgIEdfR05VQ19FTkRfSUdO
T1JFX0RFUFJFQ0FUSU9OUzsKLSAgICAgICAgZ19hc3NlcnRfbm9fZXJyb3IoZXJyb3IuZ2V0KCkp
OwotCi0gICAgICAgIENvb2tpZU1hbmFnZXJUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8Q29va2ll
TWFuYWdlclRlc3QqPih1c2VyRGF0YSk7Ci0gICAgICAgIHRlc3QtPm1fZG9tYWlucyA9IGRvbWFp
bnM7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7CisgICAgICAg
IHN0cnVjdCBUZXN0RGF0YSB7CisgICAgICAgICAgICBHVW5pcXVlUHRyPEdMaXN0PiBkYXRhTGlz
dDsKKyAgICAgICAgICAgIEdNYWluTG9vcCogbWFpbkxvb3A7CisgICAgICAgIH0gZGF0YSA9IHsg
bnVsbHB0ciwgbV9tYWluTG9vcCB9OworCisgICAgICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFu
YWdlcl9mZXRjaChtX3dlYnNpdGVEYXRhTWFuYWdlciwgV0VCS0lUX1dFQlNJVEVfREFUQV9DT09L
SUVTLCBudWxscHRyLCBbXShHT2JqZWN0KiBvYmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBn
cG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICAgICAgYXV0byogZGF0YSA9IHN0YXRpY19jYXN0
PFRlc3REYXRhKj4odXNlckRhdGEpOworICAgICAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+
IGVycm9yOworICAgICAgICAgICAgZGF0YS0+ZGF0YUxpc3QucmVzZXQod2Via2l0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyX2ZldGNoX2ZpbmlzaChXRUJLSVRfV0VCU0lURV9EQVRBX01BTkFHRVIob2Jq
ZWN0KSwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X25v
X2Vycm9yKGVycm9yLmdldCgpKTsKKyAgICAgICAgICAgIGdfbWFpbl9sb29wX3F1aXQoZGF0YS0+
bWFpbkxvb3ApOworICAgICAgICB9LCAmZGF0YSk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1biht
X21haW5Mb29wKTsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUoZGF0YS5kYXRhTGlzdCk7CiAgICAg
fQogCiAgICAgY2hhcioqIGdldERvbWFpbnMoKQogICAgIHsKLSAgICAgICAgZ19zdHJmcmVldiht
X2RvbWFpbnMpOwotICAgICAgICBtX2RvbWFpbnMgPSAwOwotICAgICAgICBHX0dOVUNfQkVHSU5f
SUdOT1JFX0RFUFJFQ0FUSU9OUzsKLSAgICAgICAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9k
b21haW5zX3dpdGhfY29va2llcyhtX2Nvb2tpZU1hbmFnZXIsIDAsIGdldERvbWFpbnNSZWFkeUNh
bGxiYWNrLCB0aGlzKTsKLSAgICAgICAgR19HTlVDX0VORF9JR05PUkVfREVQUkVDQVRJT05TOwot
ICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgICAgIGdfY2xlYXJfcG9p
bnRlcigmbV9kb21haW5zLCBnX3N0cmZyZWV2KTsKKyAgICAgICAgR1VuaXF1ZVB0cjxHTGlzdD4g
ZGF0YUxpc3QgPSBmZXRjaCgpOworICAgICAgICBHUHRyQXJyYXkqIGRvbWFpbnMgPSBnX3B0cl9h
cnJheV9zaXplZF9uZXcoZ19saXN0X2xlbmd0aChkYXRhTGlzdC5nZXQoKSkpOworICAgICAgICBm
b3IgKEdMaXN0KiBpdGVtID0gZGF0YUxpc3QuZ2V0KCk7IGl0ZW07IGl0ZW0gPSBnX2xpc3RfbmV4
dChpdGVtKSkgeworICAgICAgICAgICAgYXV0byogZGF0YSA9IHN0YXRpY19jYXN0PFdlYktpdFdl
YnNpdGVEYXRhKj4oaXRlbS0+ZGF0YSk7CisgICAgICAgICAgICBnX3B0cl9hcnJheV9hZGQoZG9t
YWlucywgZ19zdHJkdXAod2Via2l0X3dlYnNpdGVfZGF0YV9nZXRfbmFtZShkYXRhKSkpOworICAg
ICAgICAgICAgd2Via2l0X3dlYnNpdGVfZGF0YV91bnJlZihkYXRhKTsKKyAgICAgICAgfQorICAg
ICAgICBnX3B0cl9hcnJheV9hZGQoZG9tYWlucywgbnVsbHB0cik7CiAKKyAgICAgICAgbV9kb21h
aW5zID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKio+KGdfcHRyX2FycmF5X2ZyZWUoZG9tYWlucywg
RkFMU0UpKTsKICAgICAgICAgcmV0dXJuIG1fZG9tYWluczsKICAgICB9CiAKQEAgLTIxNCwxNiAr
MjMxLDIzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGVsZXRlQ29va2llc0ZvckRvbWFpbihjb25z
dCBjaGFyKiBkb21haW4pCiAgICAgewotICAgICAgICBHX0dOVUNfQkVHSU5fSUdOT1JFX0RFUFJF
Q0FUSU9OUzsKLSAgICAgICAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWVzX2Zv
cl9kb21haW4obV9jb29raWVNYW5hZ2VyLCBkb21haW4pOwotICAgICAgICBHX0dOVUNfRU5EX0lH
Tk9SRV9ERVBSRUNBVElPTlM7CisgICAgICAgIEdVbmlxdWVQdHI8R0xpc3Q+IGRhdGFMaXN0ID0g
ZmV0Y2goKTsKKyAgICAgICAgR1VuaXF1ZVB0cjxHTGlzdD4gY29va2llczsKKyAgICAgICAgZm9y
IChHTGlzdCogaXRlbSA9IGRhdGFMaXN0LmdldCgpOyBpdGVtOyBpdGVtID0gZ19saXN0X25leHQo
aXRlbSkpIHsKKyAgICAgICAgICAgIGF1dG8qIGRhdGEgPSBzdGF0aWNfY2FzdDxXZWJLaXRXZWJz
aXRlRGF0YSo+KGl0ZW0tPmRhdGEpOworICAgICAgICAgICAgaWYgKCFnX3N0cmNtcDAod2Via2l0
X3dlYnNpdGVfZGF0YV9nZXRfbmFtZShkYXRhKSwgZG9tYWluKSkKKyAgICAgICAgICAgICAgICBj
b29raWVzLnJlc2V0KGdfbGlzdF9wcmVwZW5kKGNvb2tpZXMuZ2V0KCksIHdlYmtpdF93ZWJzaXRl
X2RhdGFfcmVmKGRhdGEpKSk7CisgICAgICAgICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX3VucmVm
KGRhdGEpOworICAgICAgICB9CisgICAgICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9y
ZW1vdmUobV93ZWJzaXRlRGF0YU1hbmFnZXIsIFdFQktJVF9XRUJTSVRFX0RBVEFfQ09PS0lFUywg
Y29va2llcy5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIGdfbGlz
dF9mb3JlYWNoKGNvb2tpZXMuZ2V0KCksIFtdKGdwb2ludGVyIGRhdGEsIGdwb2ludGVyKSB7Cisg
ICAgICAgICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX3VucmVmKHN0YXRpY19jYXN0PFdlYktpdFdl
YnNpdGVEYXRhKj4oZGF0YSkpOworICAgICAgICB9LCBudWxscHRyKTsKICAgICB9CiAKICAgICB2
b2lkIGRlbGV0ZUFsbENvb2tpZXMoKQogICAgIHsKLSAgICAgICAgR19HTlVDX0JFR0lOX0lHTk9S
RV9ERVBSRUNBVElPTlM7Ci0gICAgICAgIHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfYWxs
X2Nvb2tpZXMobV9jb29raWVNYW5hZ2VyKTsKLSAgICAgICAgR19HTlVDX0VORF9JR05PUkVfREVQ
UkVDQVRJT05TOworICAgICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfY2xlYXIobV93
ZWJzaXRlRGF0YU1hbmFnZXIsIFdFQktJVF9XRUJTSVRFX0RBVEFfQ09PS0lFUywgMCwgbnVsbHB0
ciwgbnVsbHB0ciwgbnVsbHB0cik7CiAgICAgfQogCiAgICAgdm9pZCB3YWl0VW50aWxDb29raWVz
Q2hhbmdlZChpbnQgY29va2llc0V4cGVjdGVkVG9DaGFuZ2VDb3VudCA9IDEpCkBAIC0yMzUsNyAr
MjU5LDE3IEBAIHB1YmxpYzoKICAgICAgICAgbV9maW5pc2hMb29wV2hlbkNvb2tpZXNDaGFuZ2Ug
PSBmYWxzZTsKICAgICB9CiAKKyAgICB2b2lkIHNldElUUEVuYWJsZShib29sIGVuYWJsZSkKKyAg
ICB7CisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgICAgIHdlYmtpdF9uZXR3b3JrX3Nl
c3Npb25fc2V0X2l0cF9lbmFibGVkKG1fbmV0d29ya1Nlc3Npb24uZ2V0KCksIGVuYWJsZSk7Cisj
ZWxzZQorICAgICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X2l0cF9lbmFibGVk
KG1fd2Vic2l0ZURhdGFNYW5hZ2VyLCBlbmFibGUpOworI2VuZGlmCisgICAgfQorCiAgICAgV2Vi
S2l0Q29va2llTWFuYWdlciogbV9jb29raWVNYW5hZ2VyIHsgbnVsbHB0ciB9OworICAgIFdlYktp
dFdlYnNpdGVEYXRhTWFuYWdlciogbV93ZWJzaXRlRGF0YU1hbmFnZXIgeyBudWxscHRyIH07CiAg
ICAgV2ViS2l0Q29va2llQWNjZXB0UG9saWN5IG1fYWNjZXB0UG9saWN5IHsgV0VCS0lUX0NPT0tJ
RV9QT0xJQ1lfQUNDRVBUX05PX1RISVJEX1BBUlRZIH07CiAgICAgY2hhcioqIG1fZG9tYWlucyB7
IG51bGxwdHIgfTsKICAgICBHTGlzdCogbV9jb29raWVzIHsgbnVsbHB0ciB9OwpAQCAtMjc4LDIz
ICszMTIsMjIgQEAgc3RhdGljIHZvaWQgdGVzdENvb2tpZU1hbmFnZXJBY2NlcHRQb2xpY3koQ29v
a2llTWFuYWdlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIKICAgICBnX2Fzc2VydF9jbXBpbnQo
Z19zdHJ2X2xlbmd0aChkb21haW5zKSwgPT0sIDApOwogCiAgICAgLy8gSVRQIG5ldmVyIHVzZXMg
Tk9fVEhJUkRfUEFSVFkuCi0gICAgYXV0byogbWFuYWdlciA9IHdlYmtpdF93ZWJfY29udGV4dF9n
ZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIodGVzdC0+bV93ZWJDb250ZXh0LmdldCgpKTsKLSAgICB3
ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X2l0cF9lbmFibGVkKG1hbmFnZXIsIFRSVUUp
OworICAgIHRlc3QtPnNldElUUEVuYWJsZSh0cnVlKTsKICAgICBnX2Fzc2VydF9jbXBpbnQodGVz
dC0+Z2V0QWNjZXB0UG9saWN5KCksID09LCBXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfTkVW
RVIpOwogICAgIHRlc3QtPnNldEFjY2VwdFBvbGljeShXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NF
UFRfTk9fVEhJUkRfUEFSVFkpOwogICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5nZXRBY2NlcHRQ
b2xpY3koKSwgPT0sIFdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9BTFdBWVMpOwotICAgIHdl
YmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9zZXRfaXRwX2VuYWJsZWQobWFuYWdlciwgRkFMU0Up
OworICAgIHRlc3QtPnNldElUUEVuYWJsZShmYWxzZSk7CiAgICAgZ19hc3NlcnRfY21waW50KHRl
c3QtPmdldEFjY2VwdFBvbGljeSgpLCA9PSwgV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX05P
X1RISVJEX1BBUlRZKTsKLSAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X2l0cF9l
bmFibGVkKG1hbmFnZXIsIFRSVUUpOworICAgIHRlc3QtPnNldElUUEVuYWJsZSh0cnVlKTsKICAg
ICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+Z2V0QWNjZXB0UG9saWN5KCksID09LCBXRUJLSVRfQ09P
S0lFX1BPTElDWV9BQ0NFUFRfQUxXQVlTKTsKLSAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFn
ZXJfc2V0X2l0cF9lbmFibGVkKG1hbmFnZXIsIEZBTFNFKTsKKyAgICB0ZXN0LT5zZXRJVFBFbmFi
bGUoZmFsc2UpOwogICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5nZXRBY2NlcHRQb2xpY3koKSwg
PT0sIFdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9OT19USElSRF9QQVJUWSk7CiAgICAgdGVz
dC0+c2V0QWNjZXB0UG9saWN5KFdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9BTFdBWVMpOwot
ICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9zZXRfaXRwX2VuYWJsZWQobWFuYWdlciwg
VFJVRSk7CisgICAgdGVzdC0+c2V0SVRQRW5hYmxlKHRydWUpOwogICAgIGdfYXNzZXJ0X2NtcGlu
dCh0ZXN0LT5nZXRBY2NlcHRQb2xpY3koKSwgPT0sIFdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQ
VF9BTFdBWVMpOwogICAgIHRlc3QtPnNldEFjY2VwdFBvbGljeShXRUJLSVRfQ09PS0lFX1BPTElD
WV9BQ0NFUFRfTkVWRVIpOwogICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5nZXRBY2NlcHRQb2xp
Y3koKSwgPT0sIFdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9ORVZFUik7Ci0gICAgd2Via2l0
X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX3NldF9pdHBfZW5hYmxlZChtYW5hZ2VyLCBGQUxTRSk7Cisg
ICAgdGVzdC0+c2V0SVRQRW5hYmxlKGZhbHNlKTsKICAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+
Z2V0QWNjZXB0UG9saWN5KCksID09LCBXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfTkVWRVIp
OwogfQogCkBAIC02NjcsMTUgKzcwMCwyNiBAQCBzdGF0aWMgdm9pZCB0ZXN0Q29va2llTWFuYWdl
ckVwaGVtZXJhbChDb29raWVNYW5hZ2VyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICBn
X2Fzc2VydF9ub25udWxsKGRvbWFpbnMpOwogICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVu
Z3RoKGRvbWFpbnMpLCA9PSwgMCk7CiAKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICBH
UmVmUHRyPFdlYktpdE5ldHdvcmtTZXNzaW9uPiBlcGhlbWVyYWxTZXNzaW9uID0gYWRvcHRHUmVm
KHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fbmV3X2VwaGVtZXJhbCgpKTsKKyNlbmRpZgogICAgIGF1
dG8gd2ViVmlldyA9IFRlc3Q6OmFkb3B0VmlldyhnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VC
X1ZJRVcsCiAjaWYgUExBVEZPUk0oV1BFKQogICAgICAgICAiYmFja2VuZCIsIFRlc3Q6OmNyZWF0
ZVdlYlZpZXdCYWNrZW5kKCksCiAjZW5kaWYKICAgICAgICAgIndlYi1jb250ZXh0Iiwgd2Via2l0
X3dlYl92aWV3X2dldF9jb250ZXh0KHRlc3QtPm1fd2ViVmlldyksCisjaWYgRU5BQkxFKDIwMjJf
R0xJQl9BUEkpCisgICAgICAgICJuZXR3b3JrLXNlc3Npb24iLCBlcGhlbWVyYWxTZXNzaW9uLmdl
dCgpLAorI2Vsc2UKICAgICAgICAgImlzLWVwaGVtZXJhbCIsIFRSVUUsCisjZW5kaWYKICAgICAg
ICAgbnVsbHB0cikpOworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIGdfYXNzZXJ0X3Ry
dWUod2Via2l0X3dlYl92aWV3X2dldF9uZXR3b3JrX3Nlc3Npb24od2ViVmlldy5nZXQoKSkgPT0g
ZXBoZW1lcmFsU2Vzc2lvbi5nZXQoKSk7CisjZWxzZQogICAgIGdfYXNzZXJ0X3RydWUod2Via2l0
X3dlYl92aWV3X2lzX2VwaGVtZXJhbCh3ZWJWaWV3LmdldCgpKSk7CiAgICAgZ19hc3NlcnRfZmFs
c2Uod2Via2l0X3dlYl9jb250ZXh0X2lzX2VwaGVtZXJhbCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2Nv
bnRleHQod2ViVmlldy5nZXQoKSkpKTsKKyNlbmRpZgogCiAgICAgZ19zaWduYWxfY29ubmVjdCh3
ZWJWaWV3LmdldCgpLCAibG9hZC1jaGFuZ2VkIiwgR19DQUxMQkFDSyhlcGhlbWVyYWxWaWV3bG9h
ZENoYW5nZWQpLCB0ZXN0KTsKICAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkod2ViVmlldy5n
ZXQoKSwga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2luZGV4Lmh0bWwiKS5kYXRhKCkpOwpAQCAt
Njg1LDI0ICs3MjksMzIgQEAgc3RhdGljIHZvaWQgdGVzdENvb2tpZU1hbmFnZXJFcGhlbWVyYWwo
Q29va2llTWFuYWdlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgZ19hc3NlcnRfbm9u
bnVsbChkb21haW5zKTsKICAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aChkb21haW5z
KSwgPT0sIDApOwogCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgYXV0byogdmlld0Rh
dGFNYW5hZ2VyID0gd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfd2Vic2l0ZV9kYXRhX21hbmFn
ZXIoZXBoZW1lcmFsU2Vzc2lvbi5nZXQoKSk7CisjZWxzZQogICAgIGF1dG8qIHZpZXdEYXRhTWFu
YWdlciA9IHdlYmtpdF93ZWJfdmlld19nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIod2ViVmlldy5n
ZXQoKSk7CisjZW5kaWYKICAgICBnX2Fzc2VydF90cnVlKFdFQktJVF9JU19XRUJTSVRFX0RBVEFf
TUFOQUdFUih2aWV3RGF0YU1hbmFnZXIpKTsKICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0
ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHZpZXdEYXRhTWFuYWdlcikpOworI2lmIEVOQUJM
RSgyMDIyX0dMSUJfQVBJKQorICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSB3ZWJraXRfbmV0d29y
a19zZXNzaW9uX2dldF9jb29raWVfbWFuYWdlcihlcGhlbWVyYWxTZXNzaW9uLmdldCgpKTsKKyNl
bHNlCiAgICAgZ19hc3NlcnRfdHJ1ZSh2aWV3RGF0YU1hbmFnZXIgIT0gd2Via2l0X3dlYl9jb250
ZXh0X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcih3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQo
dGVzdC0+bV93ZWJWaWV3KSkpOwogICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSB3ZWJraXRfd2Vi
c2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Nvb2tpZV9tYW5hZ2VyKHZpZXdEYXRhTWFuYWdlcik7Cisj
ZW5kaWYKICAgICBnX2Fzc2VydF90cnVlKFdFQktJVF9JU19DT09LSUVfTUFOQUdFUihjb29raWVN
YW5hZ2VyKSk7CiAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hl
cyhHX09CSkVDVChjb29raWVNYW5hZ2VyKSk7CiAgICAgZ19hc3NlcnRfdHJ1ZShjb29raWVNYW5h
Z2VyICE9IHRlc3QtPm1fY29va2llTWFuYWdlcik7Ci0gICAgR19HTlVDX0JFR0lOX0lHTk9SRV9E
RVBSRUNBVElPTlM7Ci0gICAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9kb21haW5zX3dpdGhf
Y29va2llcyhjb29raWVNYW5hZ2VyLCBudWxscHRyLCBbXShHT2JqZWN0KiBvYmplY3QsIEdBc3lu
Y1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgIHdlYmtpdF93ZWJzaXRl
X2RhdGFfbWFuYWdlcl9mZXRjaCh2aWV3RGF0YU1hbmFnZXIsIFdFQktJVF9XRUJTSVRFX0RBVEFf
Q09PS0lFUywgbnVsbHB0ciwgW10oR09iamVjdCogb2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3Vs
dCwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKICAgICAgICAgYXV0byogdGVzdCA9IHN0YXRpY19jYXN0
PENvb2tpZU1hbmFnZXJUZXN0Kj4odXNlckRhdGEpOwotICAgICAgICBHVW5pcXVlUHRyPGNoYXIq
PiBkb21haW5zKHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfZG9tYWluc193aXRoX2Nvb2tpZXNf
ZmluaXNoKFdFQktJVF9DT09LSUVfTUFOQUdFUihvYmplY3QpLCByZXN1bHQsIG51bGxwdHIpKTsK
KyAgICAgICAgR1VuaXF1ZVB0cjxHTGlzdD4gZG9tYWlucyh3ZWJraXRfd2Vic2l0ZV9kYXRhX21h
bmFnZXJfZmV0Y2hfZmluaXNoKFdFQktJVF9XRUJTSVRFX0RBVEFfTUFOQUdFUihvYmplY3QpLCBy
ZXN1bHQsIG51bGxwdHIpKTsKICAgICAgICAgZ19hc3NlcnRfbm9ubnVsbChkb21haW5zKTsKLSAg
ICAgICAgZ19hc3NlcnRfY21waW50KGdfc3Rydl9sZW5ndGgoZG9tYWlucy5nZXQoKSksID09LCAx
KTsKLSAgICAgICAgZ19hc3NlcnRfY21wc3RyKGRvbWFpbnMuZ2V0KClbMF0sID09LCBrRmlyc3RQ
YXJ0eURvbWFpbik7CisgICAgICAgIGdfYXNzZXJ0X2NtcGludChnX2xpc3RfbGVuZ3RoKGRvbWFp
bnMuZ2V0KCkpLCA9PSwgMSk7CisgICAgICAgIGF1dG8qIGRhdGEgPSBzdGF0aWNfY2FzdDxXZWJL
aXRXZWJzaXRlRGF0YSo+KGRvbWFpbnMuZ2V0KCktPmRhdGEpOworICAgICAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X3dlYnNpdGVfZGF0YV9nZXRfbmFtZShkYXRhKSwgPT0sIGtGaXJzdFBhcnR5
RG9tYWluKTsKKyAgICAgICAgd2Via2l0X3dlYnNpdGVfZGF0YV91bnJlZihkYXRhKTsKICAgICAg
ICAgdGVzdC0+cXVpdE1haW5Mb29wKCk7CiAgICAgfSwgdGVzdCk7Ci0gICAgR19HTlVDX0VORF9J
R05PUkVfREVQUkVDQVRJT05TOwogICAgIGdfbWFpbl9sb29wX3J1bih0ZXN0LT5tX21haW5Mb29w
KTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGli
L1Rlc3REb3dubG9hZHMuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGli
L1Rlc3REb3dubG9hZHMuY3BwCmluZGV4IGMzYWRkNGU0ZTJhOC4uOWM4ZTVhOTYxMzE3IDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdERvd25sb2Fk
cy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3REb3du
bG9hZHMuY3BwCkBAIC04OSw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFRSVUU7
CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgZG93bmxvYWRTdGFydGVkQ2FsbGJhY2soV2ViS2l0
V2ViQ29udGV4dCogY29udGV4dCwgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBEb3dubG9hZFRl
c3QqIHRlc3QpCisgICAgc3RhdGljIHZvaWQgZG93bmxvYWRTdGFydGVkQ2FsbGJhY2soRG93bmxv
YWRUZXN0KiB0ZXN0LCBXZWJLaXREb3dubG9hZCogZG93bmxvYWQpCiAgICAgewogICAgICAgICBn
X2Fzc2VydF9ub25udWxsKHdlYmtpdF9kb3dubG9hZF9nZXRfcmVxdWVzdChkb3dubG9hZCkpOwog
ICAgICAgICB0ZXN0LT5zdGFydGVkKGRvd25sb2FkKTsKQEAgLTEwNiwxMiArMTA2LDIwIEBAIHB1
YmxpYzoKICAgICAgICAgLCBtX2Rvd25sb2FkU2l6ZSgwKQogICAgICAgICAsIG1fYWxsb3dPdmVy
d3JpdGUoZmFsc2UpCiAgICAgewotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViQ29udGV4
dC5nZXQoKSwgImRvd25sb2FkLXN0YXJ0ZWQiLCBHX0NBTExCQUNLKGRvd25sb2FkU3RhcnRlZENh
bGxiYWNrKSwgdGhpcyk7CisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgICAgIGdfc2ln
bmFsX2Nvbm5lY3Rfc3dhcHBlZChtX25ldHdvcmtTZXNzaW9uLmdldCgpLCAiZG93bmxvYWQtc3Rh
cnRlZCIsIEdfQ0FMTEJBQ0soZG93bmxvYWRTdGFydGVkQ2FsbGJhY2spLCB0aGlzKTsKKyNlbHNl
CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3dlYkNvbnRleHQuZ2V0KCksICJk
b3dubG9hZC1zdGFydGVkIiwgR19DQUxMQkFDSyhkb3dubG9hZFN0YXJ0ZWRDYWxsYmFjayksIHRo
aXMpOworI2VuZGlmCiAgICAgfQogCiAgICAgfkRvd25sb2FkVGVzdCgpCiAgICAgewotICAgICAg
ICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV93ZWJDb250ZXh0LmdldCgp
LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKKyNpZiBFTkFCTEUoMjAy
Ml9HTElCX0FQSSkKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVk
KG1fbmV0d29ya1Nlc3Npb24uZ2V0KCksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIG51bGxw
dHIsIG51bGxwdHIsIHRoaXMpOworI2Vsc2UKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlz
Y29ubmVjdF9tYXRjaGVkKG1fd2ViQ29udGV4dC5nZXQoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwg
MCwgMCwgbnVsbHB0ciwgbnVsbHB0ciwgdGhpcyk7CisjZW5kaWYKICAgICAgICAgZ19tYWluX2xv
b3BfdW5yZWYobV9tYWluTG9vcCk7CiAgICAgfQogCkBAIC0xNjAsNyArMTY4LDExIEBAIHB1Ymxp
YzoKIAogICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkVVJJQW5kV2FpdFVudGls
RmluaXNoZXMoY29uc3QgQ1N0cmluZyYgcmVxdWVzdFVSSSkKICAgICB7CisjaWYgRU5BQkxFKDIw
MjJfR0xJQl9BUEkpCisgICAgICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0g
YWRvcHRHUmVmKHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZG93bmxvYWRfdXJpKG1fbmV0d29ya1Nl
c3Npb24uZ2V0KCksIHJlcXVlc3RVUkkuZGF0YSgpKSk7CisjZWxzZQogICAgICAgICBHUmVmUHRy
PFdlYktpdERvd25sb2FkPiBkb3dubG9hZCA9IGFkb3B0R1JlZih3ZWJraXRfd2ViX2NvbnRleHRf
ZG93bmxvYWRfdXJpKG1fd2ViQ29udGV4dC5nZXQoKSwgcmVxdWVzdFVSSS5kYXRhKCkpKTsKKyNl
bmRpZgogICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JK
RUNUKGRvd25sb2FkLmdldCgpKSk7CiAKICAgICAgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X2Rv
d25sb2FkX2dldF9hbGxvd19vdmVyd3JpdGUoZG93bmxvYWQuZ2V0KCkpKTsKQEAgLTUzOSw3ICs1
NTEsNyBAQCBjbGFzcyBXZWJWaWV3RG93bmxvYWRUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3Qgewog
cHVibGljOgogICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoV2ViVmlld0Rvd25sb2FkVGVzdCk7
CiAKLSAgICBzdGF0aWMgdm9pZCBkb3dubG9hZFN0YXJ0ZWRDYWxsYmFjayhXZWJLaXRXZWJDb250
ZXh0KiBjb250ZXh0LCBXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIFdlYlZpZXdEb3dubG9hZFRl
c3QqIHRlc3QpCisgICAgc3RhdGljIHZvaWQgZG93bmxvYWRTdGFydGVkQ2FsbGJhY2soV2ViVmll
d0Rvd25sb2FkVGVzdCogdGVzdCwgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQogICAgIHsKICAg
ICAgICAgdGVzdC0+bV9kb3dubG9hZCA9IGRvd25sb2FkOwogICAgICAgICB0ZXN0LT5hc3NlcnRP
YmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKGRvd25sb2FkKSk7CkBAIC01
NTAsMTIgKzU2MiwyMCBAQCBwdWJsaWM6CiAKICAgICBXZWJWaWV3RG93bmxvYWRUZXN0KCkKICAg
ICB7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0
KG1fd2ViVmlldyksICJkb3dubG9hZC1zdGFydGVkIiwgR19DQUxMQkFDSyhkb3dubG9hZFN0YXJ0
ZWRDYWxsYmFjayksIHRoaXMpOworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgICAgICBn
X3NpZ25hbF9jb25uZWN0X3N3YXBwZWQod2Via2l0X3dlYl92aWV3X2dldF9uZXR3b3JrX3Nlc3Np
b24obV93ZWJWaWV3KSwgImRvd25sb2FkLXN0YXJ0ZWQiLCBHX0NBTExCQUNLKGRvd25sb2FkU3Rh
cnRlZENhbGxiYWNrKSwgdGhpcyk7CisjZWxzZQorICAgICAgICBnX3NpZ25hbF9jb25uZWN0X3N3
YXBwZWQod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KG1fd2ViVmlldyksICJkb3dubG9hZC1z
dGFydGVkIiwgR19DQUxMQkFDSyhkb3dubG9hZFN0YXJ0ZWRDYWxsYmFjayksIHRoaXMpOworI2Vu
ZGlmCiAgICAgfQogCiAgICAgfldlYlZpZXdEb3dubG9hZFRlc3QoKQogICAgIHsKLSAgICAgICAg
Z19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKHdlYmtpdF93ZWJfdmlld19nZXRf
Y29udGV4dChtX3dlYlZpZXcpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlz
KTsKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNf
ZGlzY29ubmVjdF9tYXRjaGVkKHdlYmtpdF93ZWJfdmlld19nZXRfbmV0d29ya19zZXNzaW9uKG1f
d2ViVmlldyksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIG51bGxwdHIsIG51bGxwdHIsIHRo
aXMpOworI2Vsc2UKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVk
KHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dChtX3dlYlZpZXcpLCBHX1NJR05BTF9NQVRDSF9E
QVRBLCAwLCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlzKTsKKyNlbmRpZgogICAgIH0KIAogICAg
IHZvaWQgd2FpdFVudGlsRG93bmxvYWRTdGFydGVkKCkKQEAgLTU4Niw3ICs2MDYsMTEgQEAgcHVi
bGljOgogICAgIH0KIAogI2lmIFBMQVRGT1JNKEdUSykKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQ
SSkKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gY29udGV4dE1lbnVDYWxsYmFjayhXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3LCBXZWJLaXRDb250ZXh0TWVudSogY29udGV4dE1lbnUsIFdlYktpdEhpdFRlc3RS
ZXN1bHQqIGhpdFRlc3RSZXN1bHQsIFdlYlZpZXdEb3dubG9hZFRlc3QqIHRlc3QpCisjZWxzZQog
ICAgIHN0YXRpYyBnYm9vbGVhbiBjb250ZXh0TWVudUNhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcsIFdlYktpdENvbnRleHRNZW51KiBjb250ZXh0TWVudSwgR2RrRXZlbnQqLCBXZWJLaXRI
aXRUZXN0UmVzdWx0KiBoaXRUZXN0UmVzdWx0LCBXZWJWaWV3RG93bmxvYWRUZXN0KiB0ZXN0KQor
I2VuZGlmCiAgICAgewogICAgICAgICBnX2Fzc2VydF90cnVlKFdFQktJVF9JU19ISVRfVEVTVF9S
RVNVTFQoaGl0VGVzdFJlc3VsdCkpOwogICAgICAgICBHTGlzdCogaXRlbXMgPSB3ZWJraXRfY29u
dGV4dF9tZW51X2dldF9pdGVtcyhjb250ZXh0TWVudSk7CkBAIC04MDMsMTQgKzgyNywyMyBAQCBz
dGF0aWMgdm9pZCB0ZXN0RG93bmxvYWRVc2VyQWdlbnQoRG93bmxvYWRUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQogCiBzdGF0aWMgdm9pZCB0ZXN0RG93bmxvYWRFcGhlbWVyYWxDb250ZXh0KFRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiB7CisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisg
ICAgR1JlZlB0cjxXZWJLaXROZXR3b3JrU2Vzc2lvbj4gbmV0d29ya1Nlc3Npb24gPSBhZG9wdEdS
ZWYod2Via2l0X25ldHdvcmtfc2Vzc2lvbl9uZXdfZXBoZW1lcmFsKCkpOworICAgIHRlc3QtPmFz
c2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QobmV0d29ya1Nlc3Np
b24uZ2V0KCkpKTsKKyNlbHNlCiAgICAgR1JlZlB0cjxXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXI+
IG1hbmFnZXIgPSBhZG9wdEdSZWYod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX25ld19lcGhl
bWVyYWwoKSk7CiAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hl
cyhHX09CSkVDVChtYW5hZ2VyLmdldCgpKSk7CiAgICAgR1JlZlB0cjxXZWJLaXRXZWJDb250ZXh0
PiBjb250ZXh0ID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJfY29udGV4dF9uZXdfd2l0aF93ZWJzaXRl
X2RhdGFfbWFuYWdlcihtYW5hZ2VyLmdldCgpKSk7CiAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNE
ZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChjb250ZXh0LmdldCgpKSk7CiAgICAgZ19h
c3NlcnRfdHJ1ZSh3ZWJraXRfd2ViX2NvbnRleHRfaXNfZXBoZW1lcmFsKGNvbnRleHQuZ2V0KCkp
KTsKKyNlbmRpZgogCiAgICAgR1JlZlB0cjxHTWFpbkxvb3A+IG1haW5Mb29wID0gYWRvcHRHUmVm
KGdfbWFpbl9sb29wX25ldyhudWxscHRyLCBUUlVFKSk7CisjaWYgRU5BQkxFKDIwMjJfR0xJQl9B
UEkpCisgICAgR1JlZlB0cjxXZWJLaXREb3dubG9hZD4gZG93bmxvYWQgPSBhZG9wdEdSZWYod2Vi
a2l0X25ldHdvcmtfc2Vzc2lvbl9kb3dubG9hZF91cmkobmV0d29ya1Nlc3Npb24uZ2V0KCksIGtT
ZXJ2ZXItPmdldFVSSUZvclBhdGgoIi90ZXN0LnBkZiIpLmRhdGEoKSkpOworI2Vsc2UKICAgICBH
UmVmUHRyPFdlYktpdERvd25sb2FkPiBkb3dubG9hZCA9IGFkb3B0R1JlZih3ZWJraXRfd2ViX2Nv
bnRleHRfZG93bmxvYWRfdXJpKGNvbnRleHQuZ2V0KCksIGtTZXJ2ZXItPmdldFVSSUZvclBhdGgo
Ii90ZXN0LnBkZiIpLmRhdGEoKSkpOworI2VuZGlmCiAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNE
ZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChkb3dubG9hZC5nZXQoKSkpOwogICAgIGdf
c2lnbmFsX2Nvbm5lY3QoZG93bmxvYWQuZ2V0KCksICJkZWNpZGUtZGVzdGluYXRpb24iLCBHX0NB
TExCQUNLKCtbXShXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGdjaGFyKiBzdWdnZXN0
ZWRGaWxlbmFtZSwgZ3BvaW50ZXIpIHsKICAgICAgICAgR1VuaXF1ZVB0cjxjaGFyPiBkZXN0aW5h
dGlvbihnX2J1aWxkX2ZpbGVuYW1lKFRlc3Q6OmRhdGFEaXJlY3RvcnkoKSwgc3VnZ2VzdGVkRmls
ZW5hbWUsIG51bGxwdHIpKTsKQEAgLTgyNyw3ICs4NjAsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0RG93
bmxvYWRFcGhlbWVyYWxDb250ZXh0KFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgZ19m
aWxlX2RlbGV0ZShkZXN0RmlsZS5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CiB9CiAKLSNpZiBQ
TEFURk9STShHVEspICYmICFVU0UoR1RLNCkKKyNpZiBQTEFURk9STShHVEspCiBzdGF0aWMgdm9p
ZCB0ZXN0Q29udGV4dE1lbnVEb3dubG9hZEFjdGlvbnMoV2ViVmlld0Rvd25sb2FkVGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKIHsKICAgICB0ZXN0LT5zaG93SW5XaW5kb3coKTsKQEAgLTg1OCw3
ICs4OTEsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0Q29udGV4dE1lbnVEb3dubG9hZEFjdGlvbnMoV2Vi
Vmlld0Rvd25sb2FkVGVzdCogdGVzdCwgZ2NvbnN0cG9pbgogICAgIGdfYXNzZXJ0X2NtcGludChn
X2ZpbGVfaW5mb19nZXRfc2l6ZShkb3dubG9hZEZpbGVJbmZvLmdldCgpKSwgPiwgMCk7CiAgICAg
Z19maWxlX2RlbGV0ZShkb3dubG9hZEZpbGUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOwogfQot
I2VuZGlmIC8vIFBMQVRGT1JNKEdUSykgJiYgIVVTRShHVEs0KQorI2VuZGlmIC8vIFBMQVRGT1JN
KEdUSykKIAogI2lmIFBMQVRGT1JNKEdUSykKIHN0YXRpYyB2b2lkIHRlc3RCbG9iRG93bmxvYWQo
V2ViVmlld0Rvd25sb2FkVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKQEAgLTkxNiwxMiArOTQ5
LDkgQEAgdm9pZCBiZWZvcmVBbGwoKQogICAgIERvd25sb2FkVGVzdDo6YWRkKCJEb3dubG9hZHMi
LCAidGV4dC1wbGFpbi1taW1lLXR5cGUiLCB0ZXN0RG93bmxvYWRUZXh0UGxhaW5NSU1FVHlwZSk7
CiAgICAgRG93bmxvYWRUZXN0OjphZGQoIkRvd25sb2FkcyIsICJ1c2VyLWFnZW50IiwgdGVzdERv
d25sb2FkVXNlckFnZW50KTsKICAgICBUZXN0OjphZGQoIkRvd25sb2FkcyIsICJlcGhlbWVyYWwt
Y29udGV4dCIsIHRlc3REb3dubG9hZEVwaGVtZXJhbENvbnRleHQpOwotICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQga2V5U3Ryb2tlIGluIFdQRS4KICNpZiBQTEFURk9STShHVEspCi0jaWYgIVVTRShH
VEs0KQotICAgIC8vIEZJWE1FOiBSZXdvcmsgY29udGV4dCBtZW51IEFQSSBpbiBHVEs0IHRvIG5v
dCBleHBvc2UgR2RrRXZlbnQuCisgICAgLy8gRklYTUU6IEltcGxlbWVudCBrZXlTdHJva2UgaW4g
V1BFLgogICAgIFdlYlZpZXdEb3dubG9hZFRlc3Q6OmFkZCgiRG93bmxvYWRzIiwgImNvbnRleC1t
ZW51LWRvd25sb2FkLWFjdGlvbnMiLCB0ZXN0Q29udGV4dE1lbnVEb3dubG9hZEFjdGlvbnMpOwot
I2VuZGlmCiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBtb3VzZSBjbGljayBpbiBXUEUuCiAgICAg
V2ViVmlld0Rvd25sb2FkVGVzdDo6YWRkKCJEb3dubG9hZHMiLCAiYmxvYi1kb3dubG9hZCIsIHRl
c3RCbG9iRG93bmxvYWQpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdEdMaWIvVGVzdFNTTC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdEdMaWIvVGVzdFNTTC5jcHAKaW5kZXggYmFiYWRhZjA1OWQ2Li40ODg0MTIyMjEwNTUg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0U1NM
LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFNTTC5j
cHAKQEAgLTY3LDkgKzY3LDE0IEBAIHB1YmxpYzoKIAogc3RhdGljIHZvaWQgdGVzdFNTTChTU0xU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogeworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQor
ICAgIFdlYktpdFRMU0Vycm9yc1BvbGljeSBvcmlnaW5hbFBvbGljeSA9IHdlYmtpdF9uZXR3b3Jr
X3Nlc3Npb25fZ2V0X3Rsc19lcnJvcnNfcG9saWN5KHRlc3QtPm1fbmV0d29ya1Nlc3Npb24uZ2V0
KCkpOworICAgIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fc2V0X3Rsc19lcnJvcnNfcG9saWN5KHRl
c3QtPm1fbmV0d29ya1Nlc3Npb24uZ2V0KCksIFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9JR05P
UkUpOworI2Vsc2UKICAgICBhdXRvKiB3ZWJzaXRlRGF0YU1hbmFnZXIgPSB3ZWJraXRfd2ViX2Nv
bnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHRlc3QtPm1fd2ViQ29udGV4dC5nZXQoKSk7
CiAgICAgV2ViS2l0VExTRXJyb3JzUG9saWN5IG9yaWdpbmFsUG9saWN5ID0gd2Via2l0X3dlYnNp
dGVfZGF0YV9tYW5hZ2VyX2dldF90bHNfZXJyb3JzX3BvbGljeSh3ZWJzaXRlRGF0YU1hbmFnZXIp
OwogICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9zZXRfdGxzX2Vycm9yc19wb2xpY3ko
d2Vic2l0ZURhdGFNYW5hZ2VyLCBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfSUdOT1JFKTsKKyNl
bmRpZgogCiAgICAgdGVzdC0+bG9hZFVSSShrSHR0cHNTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi8i
KS5kYXRhKCkpOwogICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwpAQCAtODYsNyAr
OTEsMTEgQEAgc3RhdGljIHZvaWQgdGVzdFNTTChTU0xUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQogICAgIGdfYXNzZXJ0X251bGwodGVzdC0+bV9jZXJ0aWZpY2F0ZSk7CiAgICAgZ19hc3NlcnRf
Y21wdWludCh0ZXN0LT5tX3Rsc0Vycm9ycywgPT0sIDApOwogCisjaWYgRU5BQkxFKDIwMjJfR0xJ
Ql9BUEkpCisgICAgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfdGxzX2Vycm9yc19wb2xpY3ko
dGVzdC0+bV9uZXR3b3JrU2Vzc2lvbi5nZXQoKSwgb3JpZ2luYWxQb2xpY3kpOworI2Vsc2UKICAg
ICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X3Rsc19lcnJvcnNfcG9saWN5KHdlYnNp
dGVEYXRhTWFuYWdlciwgb3JpZ2luYWxQb2xpY3kpOworI2VuZGlmCiB9CiAKIGNsYXNzIEluc2Vj
dXJlQ29udGVudFRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7CkBAIC0xMTcsOSArMTI2LDE0IEBA
IHB1YmxpYzoKIAogc3RhdGljIHZvaWQgdGVzdEluc2VjdXJlQ29udGVudChJbnNlY3VyZUNvbnRl
bnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogeworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJ
KQorICAgIFdlYktpdFRMU0Vycm9yc1BvbGljeSBvcmlnaW5hbFBvbGljeSA9IHdlYmtpdF9uZXR3
b3JrX3Nlc3Npb25fZ2V0X3Rsc19lcnJvcnNfcG9saWN5KHRlc3QtPm1fbmV0d29ya1Nlc3Npb24u
Z2V0KCkpOworICAgIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fc2V0X3Rsc19lcnJvcnNfcG9saWN5
KHRlc3QtPm1fbmV0d29ya1Nlc3Npb24uZ2V0KCksIFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9J
R05PUkUpOworI2Vsc2UKICAgICBhdXRvKiB3ZWJzaXRlRGF0YU1hbmFnZXIgPSB3ZWJraXRfd2Vi
X2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHRlc3QtPm1fd2ViQ29udGV4dC5nZXQo
KSk7CiAgICAgV2ViS2l0VExTRXJyb3JzUG9saWN5IG9yaWdpbmFsUG9saWN5ID0gd2Via2l0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyX2dldF90bHNfZXJyb3JzX3BvbGljeSh3ZWJzaXRlRGF0YU1hbmFn
ZXIpOwogICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9zZXRfdGxzX2Vycm9yc19wb2xp
Y3kod2Vic2l0ZURhdGFNYW5hZ2VyLCBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfSUdOT1JFKTsK
KyNlbmRpZgogCiAgICAgdGVzdC0+bG9hZFVSSShrSHR0cHNTZXJ2ZXItPmdldFVSSUZvclBhdGgo
Ii9pbnNlY3VyZS1jb250ZW50LyIpLmRhdGEoKSk7CiAgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZp
bmlzaGVkKCk7CkBAIC0xMjksMTYgKzE0MywyNCBAQCBzdGF0aWMgdm9pZCB0ZXN0SW5zZWN1cmVD
b250ZW50KEluc2VjdXJlQ29udGVudFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjQ2OQogICAgIGdfYXNz
ZXJ0X3RydWUodGVzdC0+bV9pbnNlY3VyZUNvbnRlbnREaXNwbGF5ZWQpOwogCisjaWYgRU5BQkxF
KDIwMjJfR0xJQl9BUEkpCisgICAgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfdGxzX2Vycm9y
c19wb2xpY3kodGVzdC0+bV9uZXR3b3JrU2Vzc2lvbi5nZXQoKSwgb3JpZ2luYWxQb2xpY3kpOwor
I2Vsc2UKICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X3Rsc19lcnJvcnNfcG9s
aWN5KHdlYnNpdGVEYXRhTWFuYWdlciwgb3JpZ2luYWxQb2xpY3kpOworI2VuZGlmCiB9CiAKIHN0
YXRpYyBib29sIGFzc2VydElmU1NMUmVxdWVzdFByb2Nlc3NlZCA9IGZhbHNlOwogCiBzdGF0aWMg
dm9pZCB0ZXN0VExTRXJyb3JzUG9saWN5KFNTTFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiB7
Ci0gICAgYXV0byogd2Vic2l0ZURhdGFNYW5hZ2VyID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF93
ZWJzaXRlX2RhdGFfbWFuYWdlcih0ZXN0LT5tX3dlYkNvbnRleHQuZ2V0KCkpOwogICAgIC8vIFRM
UyBlcnJvcnMgYXJlIHRyZWF0ZWQgYXMgdHJhbnNwb3J0IGZhaWx1cmVzIGJ5IGRlZmF1bHQuCisj
aWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9uZXR3
b3JrX3Nlc3Npb25fZ2V0X3Rsc19lcnJvcnNfcG9saWN5KHRlc3QtPm1fbmV0d29ya1Nlc3Npb24u
Z2V0KCkpLCA9PSwgV0VCS0lUX1RMU19FUlJPUlNfUE9MSUNZX0ZBSUwpOworI2Vsc2UKKyAgICBh
dXRvKiB3ZWJzaXRlRGF0YU1hbmFnZXIgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyKHRlc3QtPm1fd2ViQ29udGV4dC5nZXQoKSk7CiAgICAgZ19hc3NlcnRfY21w
aW50KHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfdGxzX2Vycm9yc19wb2xpY3kod2Vi
c2l0ZURhdGFNYW5hZ2VyKSwgPT0sIFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9GQUlMKTsKKyNl
bmRpZgogCiAgICAgYXNzZXJ0SWZTU0xSZXF1ZXN0UHJvY2Vzc2VkID0gdHJ1ZTsKICAgICB0ZXN0
LT5sb2FkVVJJKGtIdHRwc1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CkBAIC0x
NDgsMzcgKzE3MCw2NCBAQCBzdGF0aWMgdm9pZCB0ZXN0VExTRXJyb3JzUG9saWN5KFNTTFRlc3Qq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgZ19hc3NlcnRfZmFsc2UodGVzdC0+bV9sb2FkRXZl
bnRzLmNvbnRhaW5zKExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRDb21taXR0ZWQpKTsKICAgICBhc3Nl
cnRJZlNTTFJlcXVlc3RQcm9jZXNzZWQgPSBmYWxzZTsKIAorI2lmIEVOQUJMRSgyMDIyX0dMSUJf
QVBJKQorICAgIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fc2V0X3Rsc19lcnJvcnNfcG9saWN5KHRl
c3QtPm1fbmV0d29ya1Nlc3Npb24uZ2V0KCksIFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9JR05P
UkUpOworICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF90bHNf
ZXJyb3JzX3BvbGljeSh0ZXN0LT5tX25ldHdvcmtTZXNzaW9uLmdldCgpKSwgPT0sIFdFQktJVF9U
TFNfRVJST1JTX1BPTElDWV9JR05PUkUpOworI2Vsc2UKICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRh
X21hbmFnZXJfc2V0X3Rsc19lcnJvcnNfcG9saWN5KHdlYnNpdGVEYXRhTWFuYWdlciwgV0VCS0lU
X1RMU19FUlJPUlNfUE9MSUNZX0lHTk9SRSk7CiAgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93
ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfdGxzX2Vycm9yc19wb2xpY3kod2Vic2l0ZURhdGFNYW5h
Z2VyKSwgPT0sIFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9JR05PUkUpOworI2VuZGlmCiAKICAg
ICB0ZXN0LT5tX2xvYWRGYWlsZWQgPSBmYWxzZTsKICAgICB0ZXN0LT5sb2FkVVJJKGtIdHRwc1Nl
cnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CiAgICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7CiAgICAgZ19hc3NlcnRfZmFsc2UodGVzdC0+bV9sb2FkRmFpbGVkKTsKIAot
ICAgIC8vIEFuIGVwaGVtZXJhbCB3ZWIgdmlldyBzaG91bGQga2VlcCB0aGUgc2FtZSBuZXR3b3Jr
IHNldHRpbmdzIGJ5IGRlZmF1bHQuCisgICAgLy8gQW4gZXBoZW1lcmFsIHdlYiB2aWV3IHNob3Vs
ZCBrZWVwIHRoZSBzYW1lIG5ldHdvcmsgc2V0dGluZ3MuCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9B
UEkpCisgICAgR1JlZlB0cjxXZWJLaXROZXR3b3JrU2Vzc2lvbj4gZXBoZW1lcmFsU2Vzc2lvbiA9
IGFkb3B0R1JlZih3ZWJraXRfbmV0d29ya19zZXNzaW9uX25ld19lcGhlbWVyYWwoKSk7CisgICAg
d2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfdGxzX2Vycm9yc19wb2xpY3koZXBoZW1lcmFsU2Vz
c2lvbi5nZXQoKSwgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfdGxzX2Vycm9yc19wb2xpY3ko
dGVzdC0+bV9uZXR3b3JrU2Vzc2lvbi5nZXQoKSkpOworI2VuZGlmCiAgICAgYXV0byB3ZWJWaWV3
ID0gVGVzdDo6YWRvcHRWaWV3KGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfVklFVywKICNp
ZiBQTEFURk9STShXUEUpCiAgICAgICAgICJiYWNrZW5kIiwgVGVzdDo6Y3JlYXRlV2ViVmlld0Jh
Y2tlbmQoKSwKICNlbmRpZgogICAgICAgICAid2ViLWNvbnRleHQiLCB0ZXN0LT5tX3dlYkNvbnRl
eHQuZ2V0KCksCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgICAgICJuZXR3b3JrLXNl
c3Npb24iLCBlcGhlbWVyYWxTZXNzaW9uLmdldCgpLAorI2Vsc2UKICAgICAgICAgImlzLWVwaGVt
ZXJhbCIsIFRSVUUsCisjZW5kaWYKICAgICAgICAgbnVsbHB0cikpOworI2lmIEVOQUJMRSgyMDIy
X0dMSUJfQVBJKQorICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X3dlYl92aWV3X2dldF9uZXR3b3Jr
X3Nlc3Npb24od2ViVmlldy5nZXQoKSkgPT0gZXBoZW1lcmFsU2Vzc2lvbi5nZXQoKSk7CisjZWxz
ZQogICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X3dlYl92aWV3X2lzX2VwaGVtZXJhbCh3ZWJWaWV3
LmdldCgpKSk7CiAgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X3dlYl9jb250ZXh0X2lzX2VwaGVt
ZXJhbCh0ZXN0LT5tX3dlYkNvbnRleHQuZ2V0KCkpKTsKICAgICBhdXRvKiB3ZWJWaWV3RGF0YU1h
bmFnZXIgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYlZpZXcu
Z2V0KCkpOwogICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYnNpdGVEYXRhTWFuYWdlciA9PSB3ZWJWaWV3
RGF0YU1hbmFnZXIpOwogICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2Vic2l0ZV9kYXRhX21h
bmFnZXJfZ2V0X3Rsc19lcnJvcnNfcG9saWN5KHdlYnNpdGVEYXRhTWFuYWdlciksID09LCB3ZWJr
aXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X3Rsc19lcnJvcnNfcG9saWN5KHdlYlZpZXdEYXRh
TWFuYWdlcikpOworI2VuZGlmCiAKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICB3ZWJr
aXRfbmV0d29ya19zZXNzaW9uX3NldF90bHNfZXJyb3JzX3BvbGljeSh0ZXN0LT5tX25ldHdvcmtT
ZXNzaW9uLmdldCgpLCBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfRkFJTCk7CisgICAgZ19hc3Nl
cnRfY21waW50KHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X3Rsc19lcnJvcnNfcG9saWN5KHRl
c3QtPm1fbmV0d29ya1Nlc3Npb24uZ2V0KCkpLCA9PSwgV0VCS0lUX1RMU19FUlJPUlNfUE9MSUNZ
X0ZBSUwpOworI2Vsc2UKICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X3Rsc19l
cnJvcnNfcG9saWN5KHdlYnNpdGVEYXRhTWFuYWdlciwgV0VCS0lUX1RMU19FUlJPUlNfUE9MSUNZ
X0ZBSUwpOwogICAgIGdfYXNzZXJ0X2NtcGludCh3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJf
Z2V0X3Rsc19lcnJvcnNfcG9saWN5KHdlYnNpdGVEYXRhTWFuYWdlciksID09LCBXRUJLSVRfVExT
X0VSUk9SU19QT0xJQ1lfRkFJTCk7CisjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgdGVzdFRMU0Vy
cm9yc1JlZGlyZWN0KFNTTFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiB7CisjaWYgRU5BQkxF
KDIwMjJfR0xJQl9BUEkpCisgICAgV2ViS2l0VExTRXJyb3JzUG9saWN5IG9yaWdpbmFsUG9saWN5
ID0gd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfdGxzX2Vycm9yc19wb2xpY3kodGVzdC0+bV9u
ZXR3b3JrU2Vzc2lvbi5nZXQoKSk7CisgICAgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfdGxz
X2Vycm9yc19wb2xpY3kodGVzdC0+bV9uZXR3b3JrU2Vzc2lvbi5nZXQoKSwgV0VCS0lUX1RMU19F
UlJPUlNfUE9MSUNZX0ZBSUwpOworI2Vsc2UKICAgICBhdXRvKiB3ZWJzaXRlRGF0YU1hbmFnZXIg
PSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHRlc3QtPm1fd2Vi
Q29udGV4dC5nZXQoKSk7CiAgICAgV2ViS2l0VExTRXJyb3JzUG9saWN5IG9yaWdpbmFsUG9saWN5
ID0gd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF90bHNfZXJyb3JzX3BvbGljeSh3ZWJz
aXRlRGF0YU1hbmFnZXIpOwogICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9zZXRfdGxz
X2Vycm9yc19wb2xpY3kod2Vic2l0ZURhdGFNYW5hZ2VyLCBXRUJLSVRfVExTX0VSUk9SU19QT0xJ
Q1lfRkFJTCk7CisjZW5kaWYKIAogICAgIGFzc2VydElmU1NMUmVxdWVzdFByb2Nlc3NlZCA9IHRy
dWU7CiAgICAgdGVzdC0+bG9hZFVSSShrSHR0cHNTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9yZWRp
cmVjdCIpLmRhdGEoKSk7CkBAIC0xODgsNyArMjM3LDExIEBAIHN0YXRpYyB2b2lkIHRlc3RUTFNF
cnJvcnNSZWRpcmVjdChTU0xUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGdfYXNzZXJ0
X2ZhbHNlKHRlc3QtPm1fbG9hZEV2ZW50cy5jb250YWlucyhMb2FkVHJhY2tpbmdUZXN0OjpMb2Fk
Q29tbWl0dGVkKSk7CiAgICAgYXNzZXJ0SWZTU0xSZXF1ZXN0UHJvY2Vzc2VkID0gZmFsc2U7CiAK
KyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICB3ZWJraXRfbmV0d29ya19zZXNzaW9uX3Nl
dF90bHNfZXJyb3JzX3BvbGljeSh0ZXN0LT5tX25ldHdvcmtTZXNzaW9uLmdldCgpLCBvcmlnaW5h
bFBvbGljeSk7CisjZWxzZQogICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9zZXRfdGxz
X2Vycm9yc19wb2xpY3kod2Vic2l0ZURhdGFNYW5hZ2VyLCBvcmlnaW5hbFBvbGljeSk7CisjZW5k
aWYKIH0KIAogc3RhdGljIGdib29sZWFuIHdlYlZpZXdBdXRoZW50aWNhdGlvbkNhbGxiYWNrKFdl
YktpdFdlYlZpZXcqLCBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QpCkBAIC0y
MDAsOSArMjUzLDE0IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJWaWV3QXV0aGVudGljYXRpb25DYWxs
YmFjayhXZWJLaXRXZWJWaWV3KiwgV2ViS2l0QXV0aGVudGljYXRpCiAKIHN0YXRpYyB2b2lkIHRl
c3RUTFNFcnJvcnNIVFRQQXV0aChTU0xUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogeworI2lm
IEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIFdlYktpdFRMU0Vycm9yc1BvbGljeSBvcmlnaW5h
bFBvbGljeSA9IHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X3Rsc19lcnJvcnNfcG9saWN5KHRl
c3QtPm1fbmV0d29ya1Nlc3Npb24uZ2V0KCkpOworICAgIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25f
c2V0X3Rsc19lcnJvcnNfcG9saWN5KHRlc3QtPm1fbmV0d29ya1Nlc3Npb24uZ2V0KCksIFdFQktJ
VF9UTFNfRVJST1JTX1BPTElDWV9GQUlMKTsKKyNlbHNlCiAgICAgYXV0byogd2Vic2l0ZURhdGFN
YW5hZ2VyID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcih0ZXN0
LT5tX3dlYkNvbnRleHQuZ2V0KCkpOwogICAgIFdlYktpdFRMU0Vycm9yc1BvbGljeSBvcmlnaW5h
bFBvbGljeSA9IHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfdGxzX2Vycm9yc19wb2xp
Y3kod2Vic2l0ZURhdGFNYW5hZ2VyKTsKICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJf
c2V0X3Rsc19lcnJvcnNfcG9saWN5KHdlYnNpdGVEYXRhTWFuYWdlciwgV0VCS0lUX1RMU19FUlJP
UlNfUE9MSUNZX0ZBSUwpOworI2VuZGlmCiAKICAgICBhc3NlcnRJZlNTTFJlcXVlc3RQcm9jZXNz
ZWQgPSB0cnVlOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QodGVzdC0+bV93ZWJWaWV3LCAiYXV0aGVu
dGljYXRlIiwgR19DQUxMQkFDSyh3ZWJWaWV3QXV0aGVudGljYXRpb25DYWxsYmFjayksIE5VTEwp
OwpAQCAtMjEzLDcgKzI3MSwxMSBAQCBzdGF0aWMgdm9pZCB0ZXN0VExTRXJyb3JzSFRUUEF1dGgo
U1NMVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICBnX2Fzc2VydF9mYWxzZSh0ZXN0LT5t
X2xvYWRFdmVudHMuY29udGFpbnMoTG9hZFRyYWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCkpOwog
ICAgIGFzc2VydElmU1NMUmVxdWVzdFByb2Nlc3NlZCA9IGZhbHNlOwogCisjaWYgRU5BQkxFKDIw
MjJfR0xJQl9BUEkpCisgICAgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfdGxzX2Vycm9yc19w
b2xpY3kodGVzdC0+bV9uZXR3b3JrU2Vzc2lvbi5nZXQoKSwgb3JpZ2luYWxQb2xpY3kpOworI2Vs
c2UKICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X3Rsc19lcnJvcnNfcG9saWN5
KHdlYnNpdGVEYXRhTWFuYWdlciwgb3JpZ2luYWxQb2xpY3kpOworI2VuZGlmCiB9CiAKIGNsYXNz
IFRMU0Vycm9yc1Rlc3Q6IHB1YmxpYyBTU0xUZXN0IHsKQEAgLTI0OCw5ICszMTAsMTQgQEAgcHJp
dmF0ZToKIAogc3RhdGljIHZvaWQgdGVzdExvYWRGYWlsZWRXaXRoVExTRXJyb3JzKFRMU0Vycm9y
c1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiB7CisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkp
CisgICAgV2ViS2l0VExTRXJyb3JzUG9saWN5IG9yaWdpbmFsUG9saWN5ID0gd2Via2l0X25ldHdv
cmtfc2Vzc2lvbl9nZXRfdGxzX2Vycm9yc19wb2xpY3kodGVzdC0+bV9uZXR3b3JrU2Vzc2lvbi5n
ZXQoKSk7CisgICAgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfdGxzX2Vycm9yc19wb2xpY3ko
dGVzdC0+bV9uZXR3b3JrU2Vzc2lvbi5nZXQoKSwgV0VCS0lUX1RMU19FUlJPUlNfUE9MSUNZX0ZB
SUwpOworI2Vsc2UKICAgICBhdXRvKiB3ZWJzaXRlRGF0YU1hbmFnZXIgPSB3ZWJraXRfd2ViX2Nv
bnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHRlc3QtPm1fd2ViQ29udGV4dC5nZXQoKSk7
CiAgICAgV2ViS2l0VExTRXJyb3JzUG9saWN5IG9yaWdpbmFsUG9saWN5ID0gd2Via2l0X3dlYnNp
dGVfZGF0YV9tYW5hZ2VyX2dldF90bHNfZXJyb3JzX3BvbGljeSh3ZWJzaXRlRGF0YU1hbmFnZXIp
OwogICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9zZXRfdGxzX2Vycm9yc19wb2xpY3ko
d2Vic2l0ZURhdGFNYW5hZ2VyLCBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfRkFJTCk7CisjZW5k
aWYKIAogICAgIGFzc2VydElmU1NMUmVxdWVzdFByb2Nlc3NlZCA9IHRydWU7CiAgICAgLy8gVGhl
IGxvYWQtZmFpbGVkLXdpdGgtdGxzLWVycm9ycyBzaWduYWwgc2hvdWxkIGJlIGVtaXR0ZWQgd2hl
biB0aGVyZSBpcyBhIFRMUyBmYWlsdXJlLgpAQCAtMjY1LDcgKzMzMiwxMSBAQCBzdGF0aWMgdm9p
ZCB0ZXN0TG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMoVExTRXJyb3JzVGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKICAgICBhc3NlcnRJZlNTTFJlcXVlc3RQcm9jZXNzZWQgPSBmYWxzZTsKIAogICAg
IC8vIFRlc3QgYWxsb3dpbmcgYW4gZXhjZXB0aW9uIGZvciB0aGlzIGNlcnRpZmljYXRlIG9uIHRo
aXMgaG9zdC4KKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICB3ZWJraXRfbmV0d29ya19z
ZXNzaW9uX2FsbG93X3Rsc19jZXJ0aWZpY2F0ZV9mb3JfaG9zdCh0ZXN0LT5tX25ldHdvcmtTZXNz
aW9uLmdldCgpLCB0ZXN0LT5jZXJ0aWZpY2F0ZSgpLCB0ZXN0LT5ob3N0KCkuZGF0YSgpKTsKKyNl
bHNlCiAgICAgd2Via2l0X3dlYl9jb250ZXh0X2FsbG93X3Rsc19jZXJ0aWZpY2F0ZV9mb3JfaG9z
dCh0ZXN0LT5tX3dlYkNvbnRleHQuZ2V0KCksIHRlc3QtPmNlcnRpZmljYXRlKCksIHRlc3QtPmhv
c3QoKS5kYXRhKCkpOworI2VuZGlmCiAgICAgLy8gVGhlIHBhZ2Ugc2hvdWxkIG5vdyBsb2FkIHdp
dGhvdXQgZXJyb3JzLgogICAgIHRlc3QtPmxvYWRVUkkoa0h0dHBzU2VydmVyLT5nZXRVUklGb3JQ
YXRoKCIvdGVzdC10bHMvIikuZGF0YSgpKTsKICAgICB0ZXN0LT53YWl0VW50aWxUaXRsZUNoYW5n
ZWQoKTsKQEAgLTI3NSw3ICszNDYsMTEgQEAgc3RhdGljIHZvaWQgdGVzdExvYWRGYWlsZWRXaXRo
VExTRXJyb3JzKFRMU0Vycm9yc1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgZ19hc3Nl
cnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6Okxv
YWRGaW5pc2hlZCk7CiAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdGl0
bGUodGVzdC0+bV93ZWJWaWV3KSwgPT0sIFRMU0V4cGVjdGVkU3VjY2Vzc1RpdGxlKTsKIAorI2lm
IEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fc2V0X3Rs
c19lcnJvcnNfcG9saWN5KHRlc3QtPm1fbmV0d29ya1Nlc3Npb24uZ2V0KCksIG9yaWdpbmFsUG9s
aWN5KTsKKyNlbHNlCiAgICAgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX3NldF90bHNfZXJy
b3JzX3BvbGljeSh3ZWJzaXRlRGF0YU1hbmFnZXIsIG9yaWdpbmFsUG9saWN5KTsKKyNlbmRpZgog
fQogCiBjbGFzcyBUTFNTdWJyZXNvdXJjZVRlc3QgOiBwdWJsaWMgV2ViVmlld1Rlc3QgewpAQCAt
MzM0LDggKzQwOSwxNCBAQCBwdWJsaWM6CiAKIHN0YXRpYyB2b2lkIHRlc3RTdWJyZXNvdXJjZUxv
YWRGYWlsZWRXaXRoVExTRXJyb3JzKFRMU1N1YnJlc291cmNlVGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKIHsKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICBXZWJLaXRUTFNFcnJvcnNQ
b2xpY3kgb3JpZ2luYWxQb2xpY3kgPSB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF90bHNfZXJy
b3JzX3BvbGljeSh0ZXN0LT5tX25ldHdvcmtTZXNzaW9uLmdldCgpKTsKKyAgICB3ZWJraXRfbmV0
d29ya19zZXNzaW9uX3NldF90bHNfZXJyb3JzX3BvbGljeSh0ZXN0LT5tX25ldHdvcmtTZXNzaW9u
LmdldCgpLCBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfRkFJTCk7CisjZWxzZQogICAgIGF1dG8q
IHdlYnNpdGVEYXRhTWFuYWdlciA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfd2Vic2l0ZV9kYXRh
X21hbmFnZXIodGVzdC0+bV93ZWJDb250ZXh0LmdldCgpKTsKKyAgICBXZWJLaXRUTFNFcnJvcnNQ
b2xpY3kgb3JpZ2luYWxQb2xpY3kgPSB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X3Rs
c19lcnJvcnNfcG9saWN5KHdlYnNpdGVEYXRhTWFuYWdlcik7CiAgICAgd2Via2l0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyX3NldF90bHNfZXJyb3JzX3BvbGljeSh3ZWJzaXRlRGF0YU1hbmFnZXIsIFdF
QktJVF9UTFNfRVJST1JTX1BPTElDWV9GQUlMKTsKKyNlbmRpZgogCiAgICAgYXNzZXJ0SWZTU0xS
ZXF1ZXN0UHJvY2Vzc2VkID0gdHJ1ZTsKICAgICB0ZXN0LT5sb2FkVVJJKGtIdHRwU2VydmVyLT5n
ZXRVUklGb3JQYXRoKCIvIikuZGF0YSgpKTsKQEAgLTM0Myw2ICs0MjQsMTMgQEAgc3RhdGljIHZv
aWQgdGVzdFN1YnJlc291cmNlTG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMoVExTU3VicmVzb3VyY2VU
ZXN0KiB0ZXN0LCBnY28KICAgICBnX2Fzc2VydF90cnVlKEdfSVNfVExTX0NFUlRJRklDQVRFKHRl
c3QtPm1fY2VydGlmaWNhdGUuZ2V0KCkpKTsKICAgICBnX2Fzc2VydF9jbXB1aW50KHRlc3QtPm1f
dGxzRXJyb3JzLCA9PSwgR19UTFNfQ0VSVElGSUNBVEVfVU5LTk9XTl9DQSk7CiAgICAgYXNzZXJ0
SWZTU0xSZXF1ZXN0UHJvY2Vzc2VkID0gZmFsc2U7CisKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQ
SSkKKyAgICB3ZWJraXRfbmV0d29ya19zZXNzaW9uX3NldF90bHNfZXJyb3JzX3BvbGljeSh0ZXN0
LT5tX25ldHdvcmtTZXNzaW9uLmdldCgpLCBvcmlnaW5hbFBvbGljeSk7CisjZWxzZQorICAgIHdl
YmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9zZXRfdGxzX2Vycm9yc19wb2xpY3kod2Vic2l0ZURh
dGFNYW5hZ2VyLCBvcmlnaW5hbFBvbGljeSk7CisjZW5kaWYKKwogfQogCiBjbGFzcyBXZWJTb2Nr
ZXRUZXN0IDogcHVibGljIFdlYlZpZXdUZXN0IHsKQEAgLTQyMCw5ICs1MDgsMTQgQEAgcHVibGlj
OgogCiBzdGF0aWMgdm9pZCB0ZXN0V2ViU29ja2V0VExTRXJyb3JzKFdlYlNvY2tldFRlc3QqIHRl
c3QsIGdjb25zdHBvaW50ZXIpCiB7CisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgV2Vi
S2l0VExTRXJyb3JzUG9saWN5IG9yaWdpbmFsUG9saWN5ID0gd2Via2l0X25ldHdvcmtfc2Vzc2lv
bl9nZXRfdGxzX2Vycm9yc19wb2xpY3kodGVzdC0+bV9uZXR3b3JrU2Vzc2lvbi5nZXQoKSk7Cisg
ICAgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfdGxzX2Vycm9yc19wb2xpY3kodGVzdC0+bV9u
ZXR3b3JrU2Vzc2lvbi5nZXQoKSwgV0VCS0lUX1RMU19FUlJPUlNfUE9MSUNZX0ZBSUwpOworI2Vs
c2UKICAgICBhdXRvKiB3ZWJzaXRlRGF0YU1hbmFnZXIgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0
X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHRlc3QtPm1fd2ViQ29udGV4dC5nZXQoKSk7CiAgICAgV2Vi
S2l0VExTRXJyb3JzUG9saWN5IG9yaWdpbmFsUG9saWN5ID0gd2Via2l0X3dlYnNpdGVfZGF0YV9t
YW5hZ2VyX2dldF90bHNfZXJyb3JzX3BvbGljeSh3ZWJzaXRlRGF0YU1hbmFnZXIpOwogICAgIHdl
YmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9zZXRfdGxzX2Vycm9yc19wb2xpY3kod2Vic2l0ZURh
dGFNYW5hZ2VyLCBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfRkFJTCk7CisjZW5kaWYKIAogICAg
IC8vIEZpcnN0LCBjaGVjayB0aGF0IGluc2VjdXJlIHdzOi8vIHdlYiBzb2NrZXRzIHdvcmsgZmlu
ZS4KICAgICB1bnNpZ25lZCBldmVudHMgPSB0ZXN0LT5jb25uZWN0VG9TZXJ2ZXJBbmRXYWl0Rm9y
RXZlbnRzKGtIdHRwU2VydmVyKTsKQEAgLTQ0MCwxMyArNTMzLDIxIEBAIHN0YXRpYyB2b2lkIHRl
c3RXZWJTb2NrZXRUTFNFcnJvcnMoV2ViU29ja2V0VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikK
ICAgICBnX2Fzc2VydF90cnVlKGV2ZW50cyAmIFdlYlNvY2tldFRlc3Q6OkV2ZW50RmxhZ3M6OkRp
ZENsb3NlKTsKIAogICAgIC8vIE5vdyB0cnkgd3NzOi8vIGFnYWluLCB0aGlzIHRpbWUgaWdub3Jp
bmcgVExTIGVycm9ycy4KKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICB3ZWJraXRfbmV0
d29ya19zZXNzaW9uX3NldF90bHNfZXJyb3JzX3BvbGljeSh0ZXN0LT5tX25ldHdvcmtTZXNzaW9u
LmdldCgpLCBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfSUdOT1JFKTsKKyNlbHNlCiAgICAgd2Vi
a2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX3NldF90bHNfZXJyb3JzX3BvbGljeSh3ZWJzaXRlRGF0
YU1hbmFnZXIsIFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9JR05PUkUpOworI2VuZGlmCiAgICAg
ZXZlbnRzID0gdGVzdC0+Y29ubmVjdFRvU2VydmVyQW5kV2FpdEZvckV2ZW50cyhrSHR0cHNTZXJ2
ZXIpOwogICAgIGdfYXNzZXJ0X3RydWUoZXZlbnRzICYgV2ViU29ja2V0VGVzdDo6RXZlbnRGbGFn
czo6RGlkU2VydmVyQ29tcGxldGVIYW5kc2hha2UpOwogICAgIGdfYXNzZXJ0X3RydWUoZXZlbnRz
ICYgV2ViU29ja2V0VGVzdDo6RXZlbnRGbGFnczo6RGlkT3Blbik7CiAgICAgZ19hc3NlcnRfZmFs
c2UoZXZlbnRzICYgV2ViU29ja2V0VGVzdDo6RXZlbnRGbGFnczo6RGlkQ2xvc2UpOwogCisjaWYg
RU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfdGxz
X2Vycm9yc19wb2xpY3kodGVzdC0+bV9uZXR3b3JrU2Vzc2lvbi5nZXQoKSwgb3JpZ2luYWxQb2xp
Y3kpOworI2Vsc2UKICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X3Rsc19lcnJv
cnNfcG9saWN5KHdlYnNpdGVEYXRhTWFuYWdlciwgb3JpZ2luYWxQb2xpY3kpOworI2VuZGlmCiB9
CiAKIGNsYXNzIEVwaGVtZXJhbFNTTFRlc3QgOiBwdWJsaWMgU1NMVGVzdCB7CkBAIC00NjYsOSAr
NTY3LDE1IEBAIHB1YmxpYzoKIAogc3RhdGljIHZvaWQgdGVzdFRMU0Vycm9yc0VwaGVtZXJhbChF
cGhlbWVyYWxTU0xUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogeworI2lmIEVOQUJMRSgyMDIy
X0dMSUJfQVBJKQorICAgIGF1dG8qIG5ldHdvcmtTZXNzaW9uID0gd2Via2l0X3dlYl92aWV3X2dl
dF9uZXR3b3JrX3Nlc3Npb24odGVzdC0+bV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydF90cnVlKHdl
YmtpdF9uZXR3b3JrX3Nlc3Npb25faXNfZXBoZW1lcmFsKG5ldHdvcmtTZXNzaW9uKSk7CisgICAg
Z19hc3NlcnRfY21waW50KHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X3Rsc19lcnJvcnNfcG9s
aWN5KG5ldHdvcmtTZXNzaW9uKSwgPT0sIFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9GQUlMKTsK
KyNlbHNlCiAgICAgYXV0byogd2Vic2l0ZURhdGFNYW5hZ2VyID0gd2Via2l0X3dlYl92aWV3X2dl
dF93ZWJzaXRlX2RhdGFfbWFuYWdlcih0ZXN0LT5tX3dlYlZpZXcpOwogICAgIGdfYXNzZXJ0X3Ry
dWUod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2lzX2VwaGVtZXJhbCh3ZWJzaXRlRGF0YU1h
bmFnZXIpKTsKICAgICBnX2Fzc2VydF9jbXBpbnQod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X2dldF90bHNfZXJyb3JzX3BvbGljeSh3ZWJzaXRlRGF0YU1hbmFnZXIpLCA9PSwgV0VCS0lUX1RM
U19FUlJPUlNfUE9MSUNZX0ZBSUwpOworI2VuZGlmCiAKICAgICB0ZXN0LT5sb2FkVVJJKGtIdHRw
c1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CiAgICAgdGVzdC0+d2FpdFVudGls
TG9hZEZpbmlzaGVkKCk7CkBAIC01NjQsOSArNjcxLDE0IEBAIHB1YmxpYzoKIHN0YXRpYyB2b2lk
IHRlc3RDbGllbnRTaWRlQ2VydGlmaWNhdGUoQ2xpZW50U2lkZUNlcnRpZmljYXRlVGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKIHsKICAgICAvLyBJZ25vcmUgc2VydmVyIGNlcnRpZmljYXRlIGVy
cm9ycy4KKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICBXZWJLaXRUTFNFcnJvcnNQb2xp
Y3kgb3JpZ2luYWxQb2xpY3kgPSB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF90bHNfZXJyb3Jz
X3BvbGljeSh0ZXN0LT5tX25ldHdvcmtTZXNzaW9uLmdldCgpKTsKKyAgICB3ZWJraXRfbmV0d29y
a19zZXNzaW9uX3NldF90bHNfZXJyb3JzX3BvbGljeSh0ZXN0LT5tX25ldHdvcmtTZXNzaW9uLmdl
dCgpLCBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfSUdOT1JFKTsKKyNlbHNlCiAgICAgYXV0byog
d2Vic2l0ZURhdGFNYW5hZ2VyID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF93ZWJzaXRlX2RhdGFf
bWFuYWdlcih0ZXN0LT5tX3dlYkNvbnRleHQuZ2V0KCkpOwogICAgIFdlYktpdFRMU0Vycm9yc1Bv
bGljeSBvcmlnaW5hbFBvbGljeSA9IHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfdGxz
X2Vycm9yc19wb2xpY3kod2Vic2l0ZURhdGFNYW5hZ2VyKTsKICAgICB3ZWJraXRfd2Vic2l0ZV9k
YXRhX21hbmFnZXJfc2V0X3Rsc19lcnJvcnNfcG9saWN5KHdlYnNpdGVEYXRhTWFuYWdlciwgV0VC
S0lUX1RMU19FUlJPUlNfUE9MSUNZX0lHTk9SRSk7CisjZW5kaWYKIAogICAgIC8vIENhbmNlbCB0
aGUgYXV0aGVudGlhdGlvbiByZXF1ZXN0LgogICAgIHRlc3QtPmxvYWRVUkkoa0h0dHBzU2VydmVy
LT5nZXRVUklGb3JQYXRoKCIvIikuZGF0YSgpKTsKQEAgLTY1MCw3ICs3NjIsMTEgQEAgc3RhdGlj
IHZvaWQgdGVzdENsaWVudFNpZGVDZXJ0aWZpY2F0ZShDbGllbnRTaWRlQ2VydGlmaWNhdGVUZXN0
KiB0ZXN0LCBnY29uc3Rwb2kKICAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRz
WzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKICAgICB0ZXN0LT5tX2xv
YWRFdmVudHMuY2xlYXIoKTsKIAorI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIHdlYmtp
dF9uZXR3b3JrX3Nlc3Npb25fc2V0X3Rsc19lcnJvcnNfcG9saWN5KHRlc3QtPm1fbmV0d29ya1Nl
c3Npb24uZ2V0KCksIG9yaWdpbmFsUG9saWN5KTsKKyNlbHNlCiAgICAgd2Via2l0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyX3NldF90bHNfZXJyb3JzX3BvbGljeSh3ZWJzaXRlRGF0YU1hbmFnZXIsIG9y
aWdpbmFsUG9saWN5KTsKKyNlbmRpZgogfQogCiBjbGFzcyBXZWJTb2NrZXRDbGllbnRTaWRlQ2Vy
dGlmaWNhdGVUZXN0IGZpbmFsIDogcHVibGljIFdlYlNvY2tldFRlc3QsIHB1YmxpYyBDbGllbnRT
aWRlQ2VydGlmaWNhdGVUZXN0QmFzZSB7CkBAIC02NzYsOSArNzkyLDE0IEBAIHB1YmxpYzoKIHN0
YXRpYyB2b2lkIHRlc3RXZWJTb2NrZXRDbGllbnRTaWRlQ2VydGlmaWNhdGUoV2ViU29ja2V0Q2xp
ZW50U2lkZUNlcnRpZmljYXRlVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKIHsKICAgICAvLyBJ
Z25vcmUgc2VydmVyIGNlcnRpZmljYXRlIGVycm9ycy4KKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQ
SSkKKyAgICBXZWJLaXRUTFNFcnJvcnNQb2xpY3kgb3JpZ2luYWxQb2xpY3kgPSB3ZWJraXRfbmV0
d29ya19zZXNzaW9uX2dldF90bHNfZXJyb3JzX3BvbGljeSh0ZXN0LT5tX25ldHdvcmtTZXNzaW9u
LmdldCgpKTsKKyAgICB3ZWJraXRfbmV0d29ya19zZXNzaW9uX3NldF90bHNfZXJyb3JzX3BvbGlj
eSh0ZXN0LT5tX25ldHdvcmtTZXNzaW9uLmdldCgpLCBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lf
SUdOT1JFKTsKKyNlbHNlCiAgICAgYXV0byogd2Vic2l0ZURhdGFNYW5hZ2VyID0gd2Via2l0X3dl
Yl9jb250ZXh0X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcih0ZXN0LT5tX3dlYkNvbnRleHQuZ2V0
KCkpOwogICAgIFdlYktpdFRMU0Vycm9yc1BvbGljeSBvcmlnaW5hbFBvbGljeSA9IHdlYmtpdF93
ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfdGxzX2Vycm9yc19wb2xpY3kod2Vic2l0ZURhdGFNYW5h
Z2VyKTsKICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X3Rsc19lcnJvcnNfcG9s
aWN5KHdlYnNpdGVEYXRhTWFuYWdlciwgV0VCS0lUX1RMU19FUlJPUlNfUE9MSUNZX0lHTk9SRSk7
CisjZW5kaWYKIAogICAgIC8vIFRyeSBmaXJzdCB3aXRob3V0IGhhdmluZyB0aGUgY2VydGlmaWNh
dGUgaW4gY3JlZGVudGlhbCBzdG9yYWdlLgogICAgIGF1dG8gZXZlbnRzID0gdGVzdC0+Y29ubmVj
dFRvU2VydmVyQW5kV2FpdEZvckV2ZW50cyhrSHR0cHNTZXJ2ZXIpOwpAQCAtNjk4LDcgKzgxOSwx
MSBAQCBzdGF0aWMgdm9pZCB0ZXN0V2ViU29ja2V0Q2xpZW50U2lkZUNlcnRpZmljYXRlKFdlYlNv
Y2tldENsaWVudFNpZGVDZXJ0aWZpY2F0ZVRlcwogICAgIGdfYXNzZXJ0X3RydWUoZXZlbnRzICYg
V2ViU29ja2V0VGVzdDo6RXZlbnRGbGFnczo6RGlkT3Blbik7CiAgICAgZ19hc3NlcnRfZmFsc2Uo
ZXZlbnRzICYgV2ViU29ja2V0VGVzdDo6RXZlbnRGbGFnczo6RGlkQ2xvc2UpOwogCisjaWYgRU5B
QkxFKDIwMjJfR0xJQl9BUEkpCisgICAgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfdGxzX2Vy
cm9yc19wb2xpY3kodGVzdC0+bV9uZXR3b3JrU2Vzc2lvbi5nZXQoKSwgb3JpZ2luYWxQb2xpY3kp
OworI2Vsc2UKICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X3Rsc19lcnJvcnNf
cG9saWN5KHdlYnNpdGVEYXRhTWFuYWdlciwgb3JpZ2luYWxQb2xpY3kpOworI2VuZGlmCiB9CiAj
ZW5kaWYKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGli
L1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2UuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRHTGliL1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2UuY3BwCmluZGV4IDdiYmI0ZTBj
Y2IwYi4uYTdjODhmM2IwOTljIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdEdMaWIvVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZS5jcHAKKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2UuY3Bw
CkBAIC0yNDksNiArMjQ5LDcgQEAgc3RhdGljIHZvaWQgZXBoZW1lcmFsVmlld0Zhdmljb25DaGFu
Z2VkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIEdQYXJhbVNwZWMqLCBXZWIKIAogc3RhdGljIHZv
aWQgdGVzdEZhdmljb25EYXRhYmFzZUVwaGVtZXJhbChGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQogeworI2lmICFFTkFCTEUoMjAyMl9HTElCX0FQSSkKICAgICAvLyBJ
ZiB0aGUgY29udGV4dCBpcyBlcGhlbWVyYWwsIHRoZSBkYXRhYmFzZSBpcyBub3QgY3JlYXRlZCBp
ZiBpdCBkb2Vzbid0IGV4aXN0LgogICAgIEdSZWZQdHI8V2ViS2l0V2ViQ29udGV4dD4gZXBoZW1l
cmFsQ29udGV4dCA9IGFkb3B0R1JlZih3ZWJraXRfd2ViX2NvbnRleHRfbmV3X2VwaGVtZXJhbCgp
KTsKICAgICBHVW5pcXVlUHRyPGNoYXI+IGRhdGFiYXNlRGlyZWN0b3J5KGdfYnVpbGRfZmlsZW5h
bWUoVGVzdDo6ZGF0YURpcmVjdG9yeSgpLCAidGVzdEZhdmljb25EYXRhYmFzZUVwaGVtZXJhbCIs
IG51bGxwdHIpKTsKQEAgLTI4Myw2ICsyODQsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0RmF2aWNvbkRh
dGFiYXNlRXBoZW1lcmFsKEZhdmljb25EYXRhYmFzZVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZQog
ICAgIC8vIFBhZ2UgVVJMIGxvYWRlZCBpbiBlcGhlbWVyYWwgd2ViIHZpZXcgaXMgbm90IGluIHRo
ZSBkYXRhYmFzZS4KICAgICBnX2Fzc2VydF9udWxsKHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dl
dF9mYXZpY29uX3VyaShlcGhlbWVyYWxEYXRhYmFzZSwga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgi
L2JhciIpLmRhdGEoKSkpOwogICAgIGVwaGVtZXJhbENvbnRleHQgPSBudWxscHRyOworI2VuZGlm
CiB9CiAKIHZvaWQgdGVzdEZhdmljb25EYXRhYmFzZUNsZWFyKEZhdmljb25EYXRhYmFzZVRlc3Qq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdEdMaWIvVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNwcAppbmRleCAwYmJk
MWE5MzY1ZWYuLjI4ZTdjNWRjMDRlMyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRHTGliL1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNwcAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwCkBAIC00
MSw2ICs0MSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJDb250ZXh0RGVmYXVsdChUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQogICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X3dlYl9jb250ZXh0X2dl
dF9kZWZhdWx0KCkgIT0gdGVzdC0+bV93ZWJDb250ZXh0LmdldCgpKTsKIH0KIAorI2lmICFFTkFC
TEUoMjAyMl9HTElCX0FQSSkKIHN0YXRpYyB2b2lkIHRlc3RXZWJDb250ZXh0RXBoZW1lcmFsKFRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiB7CiAgICAgLy8gQnkgZGVmYXVsdCB3ZWIgY29udGV4
dHMgYXJlIG5vdCBlcGhlbWVyYWwuCkBAIC03OCw2ICs3OSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RX
ZWJDb250ZXh0RXBoZW1lcmFsKFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgY29udGV4
dCA9IGFkb3B0R1JlZih3ZWJraXRfd2ViX2NvbnRleHRfbmV3X3dpdGhfd2Vic2l0ZV9kYXRhX21h
bmFnZXIoZXBoZW1lcmFsTWFuYWdlci5nZXQoKSkpOwogICAgIGdfYXNzZXJ0X3RydWUod2Via2l0
X3dlYl9jb250ZXh0X2lzX2VwaGVtZXJhbChjb250ZXh0LmdldCgpKSk7CiB9CisjZW5kaWYKIAog
c3RhdGljIGNvbnN0IGNoYXIqIGtCYXJIVE1MID0gIjxodG1sPjxib2R5PkJhcjwvYm9keT48L2h0
bWw+IjsKIHN0YXRpYyBjb25zdCBjaGFyKiBrRWNob0hUTUxGb3JtYXQgPSAiPGh0bWw+PGJvZHk+
JXM8L2JvZHk+PC9odG1sPiI7CkBAIC03NjgsNiArNzcwLDcgQEAgcHVibGljOgogI2VuZGlmCiB9
OwogCisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogI2lmIFNPVVBfQ0hFQ0tfVkVSU0lPTigy
LCA2MSwgOTApCiAjaWYgVVNFKFNPVVAyKQogc3RhdGljIHZvaWQgd2ViU29ja2V0U2VydmVyQ2Fs
bGJhY2soU291cFNlcnZlciosIFNvdXBXZWJzb2NrZXRDb25uZWN0aW9uKiwgY29uc3QgY2hhcios
IFNvdXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIgdXNlckRhdGEpCkBAIC04ODEsNiArODg0LDcg
QEAgc3RhdGljIHZvaWQgdGVzdFdlYkNvbnRleHRQcm94eVNldHRpbmdzKFByb3h5VGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKICAgICBrU2VydmVyLT5yZW1vdmVXZWJTb2NrZXRIYW5kbGVyKCk7
CiAjZW5kaWYKIH0KKyNlbmRpZgogCiBjbGFzcyBNZW1vcnlQcmVzc3VyZVRlc3QgOiBwdWJsaWMg
V2ViVmlld1Rlc3QgewogcHVibGljOgpAQCAtMTA2Niw3ICsxMDcwLDkgQEAgdm9pZCBiZWZvcmVB
bGwoKQogICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7CiAKICAgICBUZXN0OjphZGQo
IldlYktpdFdlYkNvbnRleHQiLCAiZGVmYXVsdC1jb250ZXh0IiwgdGVzdFdlYkNvbnRleHREZWZh
dWx0KTsKKyNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAgICAgVGVzdDo6YWRkKCJXZWJLaXRX
ZWJDb250ZXh0IiwgImVwaGVtZXJhbCIsIHRlc3RXZWJDb250ZXh0RXBoZW1lcmFsKTsKKyNlbmRp
ZgogICAgIFVSSVNjaGVtZVRlc3Q6OmFkZCgiV2ViS2l0V2ViQ29udGV4dCIsICJ1cmktc2NoZW1l
IiwgdGVzdFdlYkNvbnRleHRVUklTY2hlbWUpOwogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgc3Bl
bGxjaGVja2VyIGluIFdQRS4KICNpZiBQTEFURk9STShHVEspCkBAIC0xMDc1LDcgKzEwODEsOSBA
QCB2b2lkIGJlZm9yZUFsbCgpCiAgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViQ29udGV4
dCIsICJsYW5ndWFnZXMiLCB0ZXN0V2ViQ29udGV4dExhbmd1YWdlcyk7CiAgICAgU2VjdXJpdHlQ
b2xpY3lUZXN0OjphZGQoIldlYktpdFNlY3VyaXR5TWFuYWdlciIsICJzZWN1cml0eS1wb2xpY3ki
LCB0ZXN0V2ViQ29udGV4dFNlY3VyaXR5UG9saWN5KTsKICAgICBXZWJWaWV3VGVzdDo6YWRkKCJX
ZWJLaXRTZWN1cml0eU1hbmFnZXIiLCAiZmlsZS14aHIiLCB0ZXN0V2ViQ29udGV4dFNlY3VyaXR5
RmlsZVhIUik7CisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogICAgIFByb3h5VGVzdDo6YWRk
KCJXZWJLaXRXZWJDb250ZXh0IiwgInByb3h5IiwgdGVzdFdlYkNvbnRleHRQcm94eVNldHRpbmdz
KTsKKyNlbmRpZgogICAgIE1lbW9yeVByZXNzdXJlVGVzdDo6YWRkKCJXZWJLaXRXZWJDb250ZXh0
IiwgIm1lbW9yeS1wcmVzc3VyZSIsIHRlc3RNZW1vcnlQcmVzc3VyZVNldHRpbmdzKTsKICAgICBX
ZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJDb250ZXh0IiwgInRpbWV6b25lIiwgdGVzdFdlYkNv
bnRleHRUaW1lWm9uZU92ZXJyaWRlKTsKICAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJD
b250ZXh0IiwgInRpbWV6b25lLXdvcmtlciIsIHRlc3RXZWJDb250ZXh0VGltZVpvbmVPdmVycmlk
ZUluV29ya2VyKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
R0xpYi9UZXN0V2ViS2l0V2ViVmlldy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdEdMaWIvVGVzdFdlYktpdFdlYlZpZXcuY3BwCmluZGV4IDRkOTYwOTFlMmM2MC4uNmJmOGRj
NzkyNzMzIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIv
VGVzdFdlYktpdFdlYlZpZXcuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0R0xpYi9UZXN0V2ViS2l0V2ViVmlldy5jcHAKQEAgLTIxOSwxMSArMjE5LDE5IEBAIHN0YXRp
YyB2b2lkIGVwaGVtZXJhbFZpZXdsb2FkQ2hhbmdlZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBX
ZWJLaXRMb2FkRXZlbnQgbG9hCiAKIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RXBoZW1lcmFsKFdl
YlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogeworI2lmIEVOQUJMRSgyMDIyX0dMSUJf
QVBJKQorICAgIGF1dG8qIG5ldHdvcmtTZXNzaW9uID0gd2Via2l0X3dlYl92aWV3X2dldF9uZXR3
b3JrX3Nlc3Npb24odGVzdC0+bV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRf
bmV0d29ya19zZXNzaW9uX2lzX2VwaGVtZXJhbChuZXR3b3JrU2Vzc2lvbikpOworICAgIGF1dG8q
IG1hbmFnZXIgPSB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF93ZWJzaXRlX2RhdGFfbWFuYWdl
cihuZXR3b3JrU2Vzc2lvbik7CisgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X3dlYnNpdGVfZGF0
YV9tYW5hZ2VyX2lzX2VwaGVtZXJhbChtYW5hZ2VyKSk7CisgICAgR1JlZlB0cjxXZWJLaXROZXR3
b3JrU2Vzc2lvbj4gZXBoZW1lcmFsU2Vzc2lvbiA9IGFkb3B0R1JlZih3ZWJraXRfbmV0d29ya19z
ZXNzaW9uX25ld19lcGhlbWVyYWwoKSk7CisjZWxzZQogICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtp
dF93ZWJfdmlld19pc19lcGhlbWVyYWwodGVzdC0+bV93ZWJWaWV3KSk7CiAgICAgZ19hc3NlcnRf
ZmFsc2Uod2Via2l0X3dlYl9jb250ZXh0X2lzX2VwaGVtZXJhbCh3ZWJraXRfd2ViX3ZpZXdfZ2V0
X2NvbnRleHQodGVzdC0+bV93ZWJWaWV3KSkpOwogICAgIGF1dG8qIG1hbmFnZXIgPSB3ZWJraXRf
d2ViX2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHRlc3QtPm1fd2ViQ29udGV4dC5n
ZXQoKSk7CiAgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2lz
X2VwaGVtZXJhbChtYW5hZ2VyKSk7CiAgICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfd2ViX3ZpZXdf
Z2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHRlc3QtPm1fd2ViVmlldykgPT0gbWFuYWdlcik7Cisj
ZW5kaWYKICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfY2xlYXIobWFuYWdlciwgV0VC
S0lUX1dFQlNJVEVfREFUQV9ESVNLX0NBQ0hFLCAwLCBudWxscHRyLCBbXShHT2JqZWN0KiBtYW5h
Z2VyLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKICAgICAgICAg
d2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2NsZWFyX2ZpbmlzaChXRUJLSVRfV0VCU0lURV9E
QVRBX01BTkFHRVIobWFuYWdlciksIHJlc3VsdCwgbnVsbHB0cik7CiAgICAgICAgIHN0YXRpY19j
YXN0PFdlYlZpZXdUZXN0Kj4odXNlckRhdGEpLT5xdWl0TWFpbkxvb3AoKTsKQEAgLTIzNiwxMSAr
MjQ0LDIwIEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RXBoZW1lcmFsKFdlYlZpZXdUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgICAgICAiYmFja2VuZCIsIFRlc3Q6OmNyZWF0ZVdlYlZp
ZXdCYWNrZW5kKCksCiAjZW5kaWYKICAgICAgICAgIndlYi1jb250ZXh0Iiwgd2Via2l0X3dlYl92
aWV3X2dldF9jb250ZXh0KHRlc3QtPm1fd2ViVmlldyksCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9B
UEkpCisgICAgICAgICJuZXR3b3JrLXNlc3Npb24iLCBlcGhlbWVyYWxTZXNzaW9uLmdldCgpLAor
I2Vsc2UKICAgICAgICAgImlzLWVwaGVtZXJhbCIsIFRSVUUsCisjZW5kaWYKICAgICAgICAgbnVs
bHB0cikpOworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIGdfYXNzZXJ0X3RydWUod2Vi
a2l0X25ldHdvcmtfc2Vzc2lvbl9pc19lcGhlbWVyYWwod2Via2l0X3dlYl92aWV3X2dldF9uZXR3
b3JrX3Nlc3Npb24od2ViVmlldy5nZXQoKSkpKTsKKyAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF93
ZWJfdmlld19nZXRfbmV0d29ya19zZXNzaW9uKHdlYlZpZXcuZ2V0KCkpICE9IG5ldHdvcmtTZXNz
aW9uKTsKKyNlbHNlCiAgICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfd2ViX3ZpZXdfaXNfZXBoZW1l
cmFsKHdlYlZpZXcuZ2V0KCkpKTsKICAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfd2ViX2NvbnRl
eHRfaXNfZXBoZW1lcmFsKHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dCh3ZWJWaWV3LmdldCgp
KSkpOwogICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X3dlYl92aWV3X2dldF93ZWJzaXRlX2RhdGFf
bWFuYWdlcih3ZWJWaWV3LmdldCgpKSAhPSBtYW5hZ2VyKTsKKyNlbmRpZgogCiAgICAgZ19zaWdu
YWxfY29ubmVjdCh3ZWJWaWV3LmdldCgpLCAibG9hZC1jaGFuZ2VkIiwgR19DQUxMQkFDSyhlcGhl
bWVyYWxWaWV3bG9hZENoYW5nZWQpLCB0ZXN0KTsKICAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91
cmkod2ViVmlldy5nZXQoKSwgZ1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFdlYnNp
dGVEYXRhLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0V2Vi
c2l0ZURhdGEuY3BwCmluZGV4IDlkNGRiYjA1OTFlZi4uNDNmZTQ2MzY5YjYzIDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFdlYnNpdGVEYXRhLmNw
cAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFdlYnNpdGVE
YXRhLmNwcApAQCAtMTA0LDkgKzEwNCwxMiBAQCBjbGFzcyBXZWJzaXRlRGF0YVRlc3QgOiBwdWJs
aWMgV2ViVmlld1Rlc3QgewogcHVibGljOgogICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoV2Vi
c2l0ZURhdGFUZXN0KTsKIAotCiAgICAgV2Vic2l0ZURhdGFUZXN0KCkKKyNpZiBFTkFCTEUoMjAy
Ml9HTElCX0FQSSkKKyAgICAgICAgOiBtX21hbmFnZXIod2Via2l0X25ldHdvcmtfc2Vzc2lvbl9n
ZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIod2Via2l0X3dlYl92aWV3X2dldF9uZXR3b3JrX3Nlc3Np
b24obV93ZWJWaWV3KSkpCisjZWxzZQogICAgICAgICA6IG1fbWFuYWdlcih3ZWJraXRfd2ViX2Nv
bnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4
dChtX3dlYlZpZXcpKSkKKyNlbmRpZgogICAgIHsKICAgICAgICAgZ19hc3NlcnRfdHJ1ZShXRUJL
SVRfSVNfV0VCU0lURV9EQVRBX01BTkFHRVIobV9tYW5hZ2VyKSk7CiAgICAgICAgIGFzc2VydE9i
amVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QobV9tYW5hZ2VyKSk7CkBAIC0x
NjAsMTAgKzE2MywxMSBAQCBwdWJsaWM6CiAgICAgR0xpc3QqIG1fZGF0YUxpc3QgeyBudWxscHRy
IH07CiB9OwogCi0jaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogc3RhdGljIHZvaWQgdGVzdFdl
YnNpdGVEYXRhQ29uZmlndXJhdGlvbihXZWJzaXRlRGF0YVRlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCiB7CisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogICAgIEFMTE9XX0RFUFJFQ0FURURf
REVDTEFSQVRJT05TX0JFR0lOCisjZW5kaWYKIAogICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRf
d2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Jhc2VfZGF0YV9kaXJlY3RvcnkodGVzdC0+bV9tYW5h
Z2VyKSwgPT0sIFRlc3Q6OmRhdGFEaXJlY3RvcnkoKSk7CiAgICAgZ19hc3NlcnRfY21wc3RyKHdl
YmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfYmFzZV9jYWNoZV9kaXJlY3RvcnkodGVzdC0+
bV9tYW5hZ2VyKSwgPT0sIFRlc3Q6OmRhdGFEaXJlY3RvcnkoKSk7CkBAIC0xNzIsNyArMTc2LDkg
QEAgc3RhdGljIHZvaWQgdGVzdFdlYnNpdGVEYXRhQ29uZmlndXJhdGlvbihXZWJzaXRlRGF0YVRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7CiAgICAgdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJ3aW5kb3cu
bG9jYWxTdG9yYWdlLm15cHJvcGVydHkgPSA0MjsiLCBudWxscHRyKTsKICAgICBHVW5pcXVlUHRy
PGNoYXI+IGxvY2FsU3RvcmFnZURpcmVjdG9yeShnX2J1aWxkX2ZpbGVuYW1lKFRlc3Q6OmRhdGFE
aXJlY3RvcnkoKSwgImxvY2Fsc3RvcmFnZSIsIG51bGxwdHIpKTsKKyNpZiAhRU5BQkxFKDIwMjJf
R0xJQl9BUEkpCiAgICAgZ19hc3NlcnRfY21wc3RyKGxvY2FsU3RvcmFnZURpcmVjdG9yeS5nZXQo
KSwgPT0sIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfbG9jYWxfc3RvcmFnZV9kaXJl
Y3RvcnkodGVzdC0+bV9tYW5hZ2VyKSk7CisjZW5kaWYKICAgICB0ZXN0LT5hc3NlcnRGaWxlSXND
cmVhdGVkKGxvY2FsU3RvcmFnZURpcmVjdG9yeS5nZXQoKSk7CiAgICAgZ19hc3NlcnRfdHJ1ZShn
X2ZpbGVfdGVzdChsb2NhbFN0b3JhZ2VEaXJlY3RvcnkuZ2V0KCksIEdfRklMRV9URVNUX0lTX0RJ
UikpOwogICAgIHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgid2luZG93
LmxvY2FsU3RvcmFnZS5jbGVhcigpOyIsIG51bGxwdHIpOwpAQCAtMTgxLDM3ICsxODcsNTEgQEAg
c3RhdGljIHZvaWQgdGVzdFdlYnNpdGVEYXRhQ29uZmlndXJhdGlvbihXZWJzaXRlRGF0YVRlc3Qq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7
CiAgICAgdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJ3aW5kb3cuaW5k
ZXhlZERCLm9wZW4oJ1Rlc3REYXRhYmFzZScpOyIsIG51bGxwdHIpOwogICAgIEdVbmlxdWVQdHI8
Y2hhcj4gaW5kZXhlZERCRGlyZWN0b3J5KGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6ZGF0YURpcmVj
dG9yeSgpLCAiZGF0YWJhc2VzIiwgImluZGV4ZWRkYiIsIG51bGxwdHIpKTsKKyNpZiAhRU5BQkxF
KDIwMjJfR0xJQl9BUEkpCiAgICAgZ19hc3NlcnRfY21wc3RyKGluZGV4ZWREQkRpcmVjdG9yeS5n
ZXQoKSwgPT0sIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfaW5kZXhlZGRiX2RpcmVj
dG9yeSh0ZXN0LT5tX21hbmFnZXIpKTsKKyNlbmRpZgogICAgIHRlc3QtPmFzc2VydEZpbGVJc0Ny
ZWF0ZWQoaW5kZXhlZERCRGlyZWN0b3J5LmdldCgpKTsKICAgICBnX2Fzc2VydF90cnVlKGdfZmls
ZV90ZXN0KGluZGV4ZWREQkRpcmVjdG9yeS5nZXQoKSwgR19GSUxFX1RFU1RfSVNfRElSKSk7CiAK
ICAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9hcHBjYWNoZSIpLmRh
dGEoKSk7CiAgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CiAgICAgR1VuaXF1ZVB0
cjxjaGFyPiBhcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5KGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6
ZGF0YURpcmVjdG9yeSgpLCAiYXBwbGljYXRpb25zIiwgbnVsbHB0cikpOworI2lmICFFTkFCTEUo
MjAyMl9HTElCX0FQSSkKICAgICBnX2Fzc2VydF9jbXBzdHIoYXBwbGljYXRpb25DYWNoZURpcmVj
dG9yeS5nZXQoKSwgPT0sIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfb2ZmbGluZV9h
cHBsaWNhdGlvbl9jYWNoZV9kaXJlY3RvcnkodGVzdC0+bV9tYW5hZ2VyKSk7CisjZW5kaWYKICAg
ICBHVW5pcXVlUHRyPGNoYXI+IGFwcGxpY2F0aW9uQ2FjaGVEYXRhYmFzZShnX2J1aWxkX2ZpbGVu
YW1lKGFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkuZ2V0KCksICJBcHBsaWNhdGlvbkNhY2hlLmRi
IiwgbnVsbHB0cikpOwogICAgIHRlc3QtPmFzc2VydEZpbGVJc0NyZWF0ZWQoYXBwbGljYXRpb25D
YWNoZURhdGFiYXNlLmdldCgpKTsKIAogICAgIEdVbmlxdWVQdHI8Y2hhcj4gZGlza0NhY2hlRGly
ZWN0b3J5KGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6ZGF0YURpcmVjdG9yeSgpLCBudWxscHRyKSk7
CisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogICAgIGdfYXNzZXJ0X2NtcHN0cihkaXNrQ2Fj
aGVEaXJlY3RvcnkuZ2V0KCksID09LCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Rp
c2tfY2FjaGVfZGlyZWN0b3J5KHRlc3QtPm1fbWFuYWdlcikpOworI2VuZGlmCiAgICAgZ19hc3Nl
cnRfdHJ1ZShnX2ZpbGVfdGVzdChkaXNrQ2FjaGVEaXJlY3RvcnkuZ2V0KCksIEdfRklMRV9URVNU
X0lTX0RJUikpOwogCiAgICAgR1VuaXF1ZVB0cjxjaGFyPiBoc3RzQ2FjaGVEaXJlY3RvcnkoZ19i
dWlsZF9maWxlbmFtZShUZXN0OjpkYXRhRGlyZWN0b3J5KCksIG51bGxwdHIpKTsKKyNpZiAhRU5B
QkxFKDIwMjJfR0xJQl9BUEkpCiAgICAgZ19hc3NlcnRfY21wc3RyKGhzdHNDYWNoZURpcmVjdG9y
eS5nZXQoKSwgPT0sIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfaHN0c19jYWNoZV9k
aXJlY3RvcnkodGVzdC0+bV9tYW5hZ2VyKSk7CisjZW5kaWYKICAgICBnX2Fzc2VydF90cnVlKGdf
ZmlsZV90ZXN0KGhzdHNDYWNoZURpcmVjdG9yeS5nZXQoKSwgR19GSUxFX1RFU1RfSVNfRElSKSk7
CiAKKyNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAgICAgR1VuaXF1ZVB0cjxjaGFyPiBpdHBE
aXJlY3RvcnkoZ19idWlsZF9maWxlbmFtZShUZXN0OjpkYXRhRGlyZWN0b3J5KCksICJpdHAiLCBu
dWxscHRyKSk7CiAgICAgZ19hc3NlcnRfY21wc3RyKGl0cERpcmVjdG9yeS5nZXQoKSwgPT0sIHdl
YmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfaXRwX2RpcmVjdG9yeSh0ZXN0LT5tX21hbmFn
ZXIpKTsKKyNlbmRpZgogCiAgICAgdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlz
aGVkKCJuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWdpc3RlcignLi9zb21lLWR1bW15LmpzJyk7
IiwgbnVsbHB0cik7CiAgICAgR1VuaXF1ZVB0cjxjaGFyPiBzd1JlZ2lzdHJhdGlvbnNEaXJlY3Rv
cnkoZ19idWlsZF9maWxlbmFtZShUZXN0OjpkYXRhRGlyZWN0b3J5KCksICJzZXJ2aWNld29ya2Vy
cyIsIG51bGxwdHIpKTsKKyNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAgICAgZ19hc3NlcnRf
Y21wc3RyKHN3UmVnaXN0cmF0aW9uc0RpcmVjdG9yeS5nZXQoKSwgPT0sIHdlYmtpdF93ZWJzaXRl
X2RhdGFfbWFuYWdlcl9nZXRfc2VydmljZV93b3JrZXJfcmVnaXN0cmF0aW9uc19kaXJlY3Rvcnko
dGVzdC0+bV9tYW5hZ2VyKSk7CisjZW5kaWYKICAgICB0ZXN0LT5hc3NlcnRGaWxlSXNDcmVhdGVk
KHN3UmVnaXN0cmF0aW9uc0RpcmVjdG9yeS5nZXQoKSk7CiAgICAgZ19hc3NlcnRfdHJ1ZShnX2Zp
bGVfdGVzdChzd1JlZ2lzdHJhdGlvbnNEaXJlY3RvcnkuZ2V0KCksIEdfRklMRV9URVNUX0lTX0RJ
UikpOwogCiAgICAgdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJsZXQg
ZG9tQ2FjaGVPcGVuZWQgPSBmYWxzZTsgY2FjaGVzLm9wZW4oJ215LWNhY2hlJykudGhlbigoKSA9
PiB7IGRvbUNhY2hlT3BlbmVkID0gdHJ1ZX0pOyIsIG51bGxwdHIpOwogICAgIEdVbmlxdWVQdHI8
Y2hhcj4gZG9tQ2FjaGVEaXJlY3RvcnkoZ19idWlsZF9maWxlbmFtZShUZXN0OjpkYXRhRGlyZWN0
b3J5KCksICJDYWNoZVN0b3JhZ2UiLCBudWxscHRyKSk7CisjaWYgIUVOQUJMRSgyMDIyX0dMSUJf
QVBJKQogICAgIGdfYXNzZXJ0X2NtcHN0cihkb21DYWNoZURpcmVjdG9yeS5nZXQoKSwgPT0sIHdl
YmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfZG9tX2NhY2hlX2RpcmVjdG9yeSh0ZXN0LT5t
X21hbmFnZXIpKTsKKyNlbmRpZgogICAgIHRlc3QtPmFzc2VydEZpbGVJc0NyZWF0ZWQoZG9tQ2Fj
aGVEaXJlY3RvcnkuZ2V0KCkpOwogICAgIGdfYXNzZXJ0X3RydWUoZ19maWxlX3Rlc3QoZG9tQ2Fj
aGVEaXJlY3RvcnkuZ2V0KCksIEdfRklMRV9URVNUX0lTX0RJUikpOwogCkBAIC0yMjYsMTAgKzI0
NiwxNyBAQCBzdGF0aWMgdm9pZCB0ZXN0V2Vic2l0ZURhdGFDb25maWd1cmF0aW9uKFdlYnNpdGVE
YXRhVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICB0ZXN0LT5jbGVhcihwZXJzaXN0ZW50
Q2FjaGVzLCAwKTsKICAgICBnX2Fzc2VydF9udWxsKHRlc3QtPmZldGNoKHBlcnNpc3RlbnRDYWNo
ZXMpKTsKIAotICAgIC8vIFRoZSBkZWZhdWx0IGNvbnRleHQgc2hvdWxkIGhhdmUgYSBkaWZmZXJl
bnQgbWFuYWdlciB3aXRoIGRpZmZlcmVudCBjb25maWd1cmF0aW9uLgotICAgIFdlYktpdFdlYnNp
dGVEYXRhTWFuYWdlciogZGVmYXVsdE1hbmFnZXIgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKTsKKyAg
ICAvLyBUaGUgZGVmYXVsdCBjb250ZXh0IG9yIHNlc3Npb24gc2hvdWxkIGhhdmUgYSBkaWZmZXJl
bnQgbWFuYWdlciB3aXRoIGRpZmZlcmVudCBjb25maWd1cmF0aW9uLgorI2lmIEVOQUJMRSgyMDIy
X0dMSUJfQVBJKQorICAgIGF1dG8qIGRlZmF1bHRNYW5hZ2VyID0gd2Via2l0X25ldHdvcmtfc2Vz
c2lvbl9nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIod2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRf
ZGVmYXVsdCgpKTsKKyNlbHNlCisgICAgYXV0byogZGVmYXVsdE1hbmFnZXIgPSB3ZWJraXRfd2Vi
X2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYmtpdF93ZWJfY29udGV4dF9nZXRf
ZGVmYXVsdCgpKTsKKyNlbmRpZgogICAgIGdfYXNzZXJ0X3RydWUoV0VCS0lUX0lTX1dFQlNJVEVf
REFUQV9NQU5BR0VSKGRlZmF1bHRNYW5hZ2VyKSk7CiAgICAgZ19hc3NlcnRfdHJ1ZSh0ZXN0LT5t
X21hbmFnZXIgIT0gZGVmYXVsdE1hbmFnZXIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRf
d2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Jhc2VfZGF0YV9kaXJlY3RvcnkodGVzdC0+bV9tYW5h
Z2VyKSwgIT0sIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfYmFzZV9kYXRhX2RpcmVj
dG9yeShkZWZhdWx0TWFuYWdlcikpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2Vic2l0
ZV9kYXRhX21hbmFnZXJfZ2V0X2Jhc2VfY2FjaGVfZGlyZWN0b3J5KHRlc3QtPm1fbWFuYWdlciks
ICE9LCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Jhc2VfY2FjaGVfZGlyZWN0b3J5
KGRlZmF1bHRNYW5hZ2VyKSk7CisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogICAgIGdfYXNz
ZXJ0X2NtcHN0cih3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2xvY2FsX3N0b3JhZ2Vf
ZGlyZWN0b3J5KHRlc3QtPm1fbWFuYWdlciksICE9LCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFn
ZXJfZ2V0X2xvY2FsX3N0b3JhZ2VfZGlyZWN0b3J5KGRlZmF1bHRNYW5hZ2VyKSk7CiAgICAgZ19h
c3NlcnRfY21wc3RyKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfaW5kZXhlZGRiX2Rp
cmVjdG9yeSh0ZXN0LT5tX21hbmFnZXIpLCAhPSwgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X2dldF9pbmRleGVkZGJfZGlyZWN0b3J5KGRlZmF1bHRNYW5hZ2VyKSk7CiAgICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfZGlza19jYWNoZV9kaXJlY3Rv
cnkodGVzdC0+bV9tYW5hZ2VyKSwgIT0sIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRf
ZGlza19jYWNoZV9kaXJlY3RvcnkoZGVmYXVsdE1hbmFnZXIpKTsKQEAgLTIzOCw3ICsyNjUsOSBA
QCBzdGF0aWMgdm9pZCB0ZXN0V2Vic2l0ZURhdGFDb25maWd1cmF0aW9uKFdlYnNpdGVEYXRhVGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYnNp
dGVfZGF0YV9tYW5hZ2VyX2dldF9pdHBfZGlyZWN0b3J5KHRlc3QtPm1fbWFuYWdlciksICE9LCB3
ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2l0cF9kaXJlY3RvcnkoZGVmYXVsdE1hbmFn
ZXIpKTsKICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dl
dF9zZXJ2aWNlX3dvcmtlcl9yZWdpc3RyYXRpb25zX2RpcmVjdG9yeSh0ZXN0LT5tX21hbmFnZXIp
LCAhPSwgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9zZXJ2aWNlX3dvcmtlcl9yZWdp
c3RyYXRpb25zX2RpcmVjdG9yeShkZWZhdWx0TWFuYWdlcikpOwogICAgIGdfYXNzZXJ0X2NtcHN0
cih3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2RvbV9jYWNoZV9kaXJlY3RvcnkodGVz
dC0+bV9tYW5hZ2VyKSwgIT0sIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfZG9tX2Nh
Y2hlX2RpcmVjdG9yeShkZWZhdWx0TWFuYWdlcikpOworI2VuZGlmCiAKKyNpZiAhRU5BQkxFKDIw
MjJfR0xJQl9BUEkpCiAgICAgLy8gQW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gcHJvdmlkZWQg
dGFrZXMgcHJlY2VkZW5jZSBvdmVyIGJhc2UgZGlycy4KICAgICBpbmRleGVkREJEaXJlY3Rvcnku
cmVzZXQoZ19idWlsZF9maWxlbmFtZShUZXN0OjpkYXRhRGlyZWN0b3J5KCksICJteWN1c3RvbWlu
ZGV4ZWRkYiIsIG51bGxwdHIpKTsKICAgICBhcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5LnJlc2V0
KGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6ZGF0YURpcmVjdG9yeSgpLCAibXljdXN0b21hcHBjYWNo
ZSIsIG51bGxwdHIpKTsKQEAgLTI1OCw4ICsyODcsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0V2Vic2l0
ZURhdGFDb25maWd1cmF0aW9uKFdlYnNpdGVEYXRhVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikK
ICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9kaXNr
X2NhY2hlX2RpcmVjdG9yeShiYXNlRGF0YU1hbmFnZXIuZ2V0KCkpLCA9PSwgZGlza0NhY2hlRGly
ZWN0b3J5LmdldCgpKTsKIAogICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAot
fQogI2VuZGlmCit9CiAKIHN0YXRpYyB2b2lkIGVwaGVtZXJhbFZpZXdsb2FkQ2hhbmdlZChXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRMb2FkRXZlbnQgbG9hZEV2ZW50LCBXZWJWaWV3VGVz
dCogdGVzdCkKIHsKQEAgLTI3MSw4ICszMDAsMTMgQEAgc3RhdGljIHZvaWQgZXBoZW1lcmFsVmll
d2xvYWRDaGFuZ2VkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdExvYWRFdmVudCBsb2EK
IAogc3RhdGljIHZvaWQgdGVzdFdlYnNpdGVEYXRhRXBoZW1lcmFsKFdlYlZpZXdUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQogeworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIEdSZWZQ
dHI8V2ViS2l0TmV0d29ya1Nlc3Npb24+IHNlc3Npb24gPSBhZG9wdEdSZWYod2Via2l0X25ldHdv
cmtfc2Vzc2lvbl9uZXdfZXBoZW1lcmFsKCkpOworICAgIEdSZWZQdHI8V2ViS2l0V2Vic2l0ZURh
dGFNYW5hZ2VyPiBtYW5hZ2VyID0gd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfd2Vic2l0ZV9k
YXRhX21hbmFnZXIoc2Vzc2lvbi5nZXQoKSk7CisjZWxzZQogICAgIEdSZWZQdHI8V2ViS2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyPiBtYW5hZ2VyID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJzaXRlX2RhdGFf
bWFuYWdlcl9uZXdfZXBoZW1lcmFsKCkpOwogICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X3dlYnNp
dGVfZGF0YV9tYW5hZ2VyX2lzX2VwaGVtZXJhbChtYW5hZ2VyLmdldCgpKSk7CisjZW5kaWYKICAg
ICBnX2Fzc2VydF9udWxsKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfYmFzZV9kYXRh
X2RpcmVjdG9yeShtYW5hZ2VyLmdldCgpKSk7CiAgICAgZ19hc3NlcnRfbnVsbCh3ZWJraXRfd2Vi
c2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Jhc2VfY2FjaGVfZGlyZWN0b3J5KG1hbmFnZXIuZ2V0KCkp
KTsKIApAQCAtMjg2LDIyICszMjAsMzUgQEAgc3RhdGljIHZvaWQgdGVzdFdlYnNpdGVEYXRhRXBo
ZW1lcmFsKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGdfYXNzZXJ0X251
bGwod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9pdHBfZGlyZWN0b3J5KG1hbmFnZXIu
Z2V0KCkpKTsKICAgICBnX2Fzc2VydF9udWxsKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9n
ZXRfc2VydmljZV93b3JrZXJfcmVnaXN0cmF0aW9uc19kaXJlY3RvcnkobWFuYWdlci5nZXQoKSkp
OwogICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAotI2VuZGlmCiAKICAgICAv
LyBDb25maWd1cmF0aW9uIGlzIGlnbm9yZWQgd2hlbiBpcy1lcGhlbWVyYWwgaXMgdXNlZC4KICAg
ICBtYW5hZ2VyID0gYWRvcHRHUmVmKFdFQktJVF9XRUJTSVRFX0RBVEFfTUFOQUdFUihnX29iamVj
dF9uZXcoV0VCS0lUX1RZUEVfV0VCU0lURV9EQVRBX01BTkFHRVIsICJiYXNlLWRhdGEtZGlyZWN0
b3J5IiwgVGVzdDo6ZGF0YURpcmVjdG9yeSgpLCAiaXMtZXBoZW1lcmFsIiwgVFJVRSwgbnVsbHB0
cikpKTsKICAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9pc19l
cGhlbWVyYWwobWFuYWdlci5nZXQoKSkpOwogICAgIGdfYXNzZXJ0X251bGwod2Via2l0X3dlYnNp
dGVfZGF0YV9tYW5hZ2VyX2dldF9iYXNlX2RhdGFfZGlyZWN0b3J5KG1hbmFnZXIuZ2V0KCkpKTsK
KyNlbmRpZgogCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgd2Via2l0X25ldHdvcmtf
c2Vzc2lvbl9zZXRfaXRwX2VuYWJsZWQoc2Vzc2lvbi5nZXQoKSwgVFJVRSk7CisgICAgZ19hc3Nl
cnRfdHJ1ZSh3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF9pdHBfZW5hYmxlZChzZXNzaW9uLmdl
dCgpKSk7CisjZWxzZQogICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9zZXRfaXRwX2Vu
YWJsZWQobWFuYWdlci5nZXQoKSwgVFJVRSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyX2dldF9pdHBfZW5hYmxlZChtYW5hZ2VyLmdldCgpKSk7CisgICAgZ19hc3Nl
cnRfdHJ1ZSh3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2l0cF9lbmFibGVkKG1hbmFn
ZXIuZ2V0KCkpKTsKKyNlbmRpZgogCiAgICAgLy8gTm9uIHBlcnNpc3RlbnQgZGF0YSBjYW4gYmUg
cXVlcmllZCBpbiBhbiBlcGhlbWVyYWwgbWFuYWdlci4KKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQ
SSkKKyAgICBhdXRvIHdlYlZpZXcgPSBUZXN0OjphZG9wdFZpZXcoZ19vYmplY3RfbmV3KFdFQktJ
VF9UWVBFX1dFQl9WSUVXLAorICAgICAgICAid2ViLWNvbnRleHQiLCB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X2NvbnRleHQodGVzdC0+bV93ZWJWaWV3KSwKKyAgICAgICAgIm5ldHdvcmstc2Vzc2lvbiIs
IHNlc3Npb24uZ2V0KCksCisgICAgICAgIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF90cnVlKHdl
YmtpdF93ZWJfdmlld19nZXRfbmV0d29ya19zZXNzaW9uKHdlYlZpZXcuZ2V0KCkpID09IHNlc3Np
b24uZ2V0KCkpOworI2Vsc2UKICAgICBHUmVmUHRyPFdlYktpdFdlYkNvbnRleHQ+IHdlYkNvbnRl
eHQgPSBhZG9wdEdSZWYod2Via2l0X3dlYl9jb250ZXh0X25ld193aXRoX3dlYnNpdGVfZGF0YV9t
YW5hZ2VyKG1hbmFnZXIuZ2V0KCkpKTsKICAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF93ZWJfY29u
dGV4dF9pc19lcGhlbWVyYWwod2ViQ29udGV4dC5nZXQoKSkpOwogICAgIGF1dG8gd2ViVmlldyA9
IFRlc3Q6OmFkb3B0VmlldyhUZXN0OjpjcmVhdGVXZWJWaWV3KHdlYkNvbnRleHQuZ2V0KCkpKTsK
ICAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF93ZWJfdmlld19pc19lcGhlbWVyYWwod2ViVmlldy5n
ZXQoKSkpOwogICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X3dlYl92aWV3X2dldF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcih3ZWJWaWV3LmdldCgpKSA9PSBtYW5hZ2VyLmdldCgpKTsKKyNlbmRpZgogCiAg
ICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LmdldCgpLCAibG9hZC1jaGFuZ2VkIiwgR19DQUxM
QkFDSyhlcGhlbWVyYWxWaWV3bG9hZENoYW5nZWQpLCB0ZXN0KTsKICAgICB3ZWJraXRfd2ViX3Zp
ZXdfbG9hZF91cmkod2ViVmlldy5nZXQoKSwga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2VtcHR5
IikuZGF0YSgpKTsKQEAgLTMyNSw3ICszNzIsMTEgQEAgc3RhdGljIHZvaWQgdGVzdFdlYnNpdGVE
YXRhRXBoZW1lcmFsKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIH0sIHRl
c3QpOwogICAgIGdfbWFpbl9sb29wX3J1bih0ZXN0LT5tX21haW5Mb29wKTsKIAorI2lmIEVOQUJM
RSgyMDIyX0dMSUJfQVBJKQorICAgIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fc2V0X2l0cF9lbmFi
bGVkKHNlc3Npb24uZ2V0KCksIEZBTFNFKTsKKyNlbHNlCiAgICAgd2Via2l0X3dlYnNpdGVfZGF0
YV9tYW5hZ2VyX3NldF9pdHBfZW5hYmxlZChtYW5hZ2VyLmdldCgpLCBGQUxTRSk7CisjZW5kaWYK
IH0KIAogc3RhdGljIHZvaWQgdGVzdFdlYnNpdGVEYXRhQ2FjaGUoV2Vic2l0ZURhdGFUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQpAQCAtNjgyLDMxICs3MzMsMzcgQEAgc3RhdGljIHZvaWQgdGVz
dFdlYnNpdGVEYXRhRGV2aWNlSWRIYXNoU2FsdChXZWJzaXRlRGF0YVRlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIKICAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9tb2NrX2NhcHR1cmVfZGV2
aWNlcyhzZXR0aW5ncywgZW5hYmxlZCk7CiB9CiAKLSNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkp
CiBzdGF0aWMgdm9pZCB0ZXN0V2Vic2l0ZURhdGFJVFAoV2Vic2l0ZURhdGFUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQogewotICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lO
Ci0gICAgY29uc3QgY2hhciogaXRwRGlyZWN0b3J5ID0gd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5h
Z2VyX2dldF9pdHBfZGlyZWN0b3J5KHRlc3QtPm1fbWFuYWdlcik7Ci0gICAgQUxMT1dfREVQUkVD
QVRFRF9ERUNMQVJBVElPTlNfRU5ECi0gICAgR1VuaXF1ZVB0cjxjaGFyPiBpdHBEYXRhYmFzZUZp
bGUoZ19idWlsZF9maWxlbmFtZShpdHBEaXJlY3RvcnksICJvYnNlcnZhdGlvbnMuZGIiLCBudWxs
cHRyKSk7CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBpdHBEaXJlY3RvcnkoZ19idWlsZF9maWxlbmFt
ZShUZXN0OjpkYXRhRGlyZWN0b3J5KCksICJpdHAiLCBudWxscHRyKSk7CisgICAgR1VuaXF1ZVB0
cjxjaGFyPiBpdHBEYXRhYmFzZUZpbGUoZ19idWlsZF9maWxlbmFtZShpdHBEaXJlY3RvcnkuZ2V0
KCksICJvYnNlcnZhdGlvbnMuZGIiLCBudWxscHRyKSk7CiAKICAgICAvLyBEZWxldGUgYW55IHBy
ZXZpb3VzIGRhdGEuCiAgICAgZ191bmxpbmsoaXRwRGF0YWJhc2VGaWxlLmdldCgpKTsKLSAgICBn
X3JtZGlyKGl0cERpcmVjdG9yeSk7CisgICAgZ19ybWRpcihpdHBEaXJlY3RvcnkuZ2V0KCkpOwog
CisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X25l
dHdvcmtfc2Vzc2lvbl9nZXRfaXRwX2VuYWJsZWQodGVzdC0+bV9uZXR3b3JrU2Vzc2lvbi5nZXQo
KSkpOworI2Vsc2UKICAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFn
ZXJfZ2V0X2l0cF9lbmFibGVkKHRlc3QtPm1fbWFuYWdlcikpOworI2VuZGlmCiAgICAgdGVzdC0+
bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZW1wdHkiKS5kYXRhKCkpOwogICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwogCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkp
CisgICAgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfaXRwX2VuYWJsZWQodGVzdC0+bV9uZXR3
b3JrU2Vzc2lvbi5nZXQoKSwgVFJVRSk7CisgICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfbmV0d29y
a19zZXNzaW9uX2dldF9pdHBfZW5hYmxlZCh0ZXN0LT5tX25ldHdvcmtTZXNzaW9uLmdldCgpKSk7
CisjZWxzZQogICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9zZXRfaXRwX2VuYWJsZWQo
dGVzdC0+bV9tYW5hZ2VyLCBUUlVFKTsKICAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF93ZWJzaXRl
X2RhdGFfbWFuYWdlcl9nZXRfaXRwX2VuYWJsZWQodGVzdC0+bV9tYW5hZ2VyKSk7Ci0gICAgZ19h
c3NlcnRfZmFsc2UoZ19maWxlX3Rlc3QoaXRwRGlyZWN0b3J5LCBHX0ZJTEVfVEVTVF9JU19ESVIp
KTsKKyNlbmRpZgorICAgIGdfYXNzZXJ0X2ZhbHNlKGdfZmlsZV90ZXN0KGl0cERpcmVjdG9yeS5n
ZXQoKSwgR19GSUxFX1RFU1RfSVNfRElSKSk7CiAgICAgZ19hc3NlcnRfZmFsc2UoZ19maWxlX3Rl
c3QoaXRwRGF0YWJhc2VGaWxlLmdldCgpLCBHX0ZJTEVfVEVTVF9JU19SRUdVTEFSKSk7CiAKICAg
ICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9lbXB0eSIpLmRhdGEoKSk7
CiAgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CiAgICAgdGVzdC0+YXNzZXJ0Rmls
ZUlzQ3JlYXRlZChpdHBEYXRhYmFzZUZpbGUuZ2V0KCkpOwotICAgIGdfYXNzZXJ0X3RydWUoZ19m
aWxlX3Rlc3QoaXRwRGlyZWN0b3J5LCBHX0ZJTEVfVEVTVF9JU19ESVIpKTsKKyAgICBnX2Fzc2Vy
dF90cnVlKGdfZmlsZV90ZXN0KGl0cERpcmVjdG9yeS5nZXQoKSwgR19GSUxFX1RFU1RfSVNfRElS
KSk7CiAgICAgZ19hc3NlcnRfdHJ1ZShnX2ZpbGVfdGVzdChpdHBEYXRhYmFzZUZpbGUuZ2V0KCks
IEdfRklMRV9URVNUX0lTX1JFR1VMQVIpKTsKIAogICAgIC8vIEdpdmUgc29tZSB0aW1lIGZvciB0
aGUgZGF0YWJhc2UgdG8gYmUgdXBkYXRlZC4KQEAgLTczMSwxMiArNzg4LDE2IEBAIHN0YXRpYyB2
b2lkIHRlc3RXZWJzaXRlRGF0YUlUUChXZWJzaXRlRGF0YVRlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCiAgICAgc3RhdGljIGNvbnN0IFdlYktpdFdlYnNpdGVEYXRhVHlwZXMgY2FjaGVBbmRJVFAg
PSBzdGF0aWNfY2FzdDxXZWJLaXRXZWJzaXRlRGF0YVR5cGVzPihXRUJLSVRfV0VCU0lURV9EQVRB
X0lUUCB8IFdFQktJVF9XRUJTSVRFX0RBVEFfTUVNT1JZX0NBQ0hFIHwgV0VCS0lUX1dFQlNJVEVf
REFUQV9ESVNLX0NBQ0hFKTsKICAgICB0ZXN0LT5jbGVhcihjYWNoZUFuZElUUCwgMCk7CiAKKyNp
ZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICB3ZWJraXRfbmV0d29ya19zZXNzaW9uX3NldF9p
dHBfZW5hYmxlZCh0ZXN0LT5tX25ldHdvcmtTZXNzaW9uLmdldCgpLCBGQUxTRSk7CisgICAgZ19h
c3NlcnRfZmFsc2Uod2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfaXRwX2VuYWJsZWQodGVzdC0+
bV9uZXR3b3JrU2Vzc2lvbi5nZXQoKSkpOworI2Vsc2UKICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRh
X21hbmFnZXJfc2V0X2l0cF9lbmFibGVkKHRlc3QtPm1fbWFuYWdlciwgRkFMU0UpOwogICAgIGdf
YXNzZXJ0X2ZhbHNlKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfaXRwX2VuYWJsZWQo
dGVzdC0+bV9tYW5hZ2VyKSk7CisjZW5kaWYKIAotICAgIGdfcm1kaXIoaXRwRGlyZWN0b3J5KTsK
KyAgICBnX3JtZGlyKGl0cERpcmVjdG9yeS5nZXQoKSk7CiB9Ci0jZW5kaWYKIAogc3RhdGljIHZv
aWQgdGVzdFdlYnNpdGVEYXRhU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbnMoV2Vic2l0ZURhdGFU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogewpAQCAtODE0LDEzICs4NzUsMjEgQEAgcHVibGlj
OgogICAgICAgICB3ZWJraXRfbWVtb3J5X3ByZXNzdXJlX3NldHRpbmdzX3NldF9raWxsX3RocmVz
aG9sZChzZXR0aW5ncywgMSk7CiAgICAgICAgIHdlYmtpdF9tZW1vcnlfcHJlc3N1cmVfc2V0dGlu
Z3Nfc2V0X3N0cmljdF90aHJlc2hvbGQoc2V0dGluZ3MsIDAuNzUpOwogICAgICAgICB3ZWJraXRf
bWVtb3J5X3ByZXNzdXJlX3NldHRpbmdzX3NldF9jb25zZXJ2YXRpdmVfdGhyZXNob2xkKHNldHRp
bmdzLCAwLjUpOworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgICAgICB3ZWJraXRfbmV0
d29ya19zZXNzaW9uX3NldF9tZW1vcnlfcHJlc3N1cmVfc2V0dGluZ3Moc2V0dGluZ3MpOworI2Vs
c2UKICAgICAgICAgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX3NldF9tZW1vcnlfcHJlc3N1
cmVfc2V0dGluZ3Moc2V0dGluZ3MpOworI2VuZGlmCiAgICAgICAgIHdlYmtpdF9tZW1vcnlfcHJl
c3N1cmVfc2V0dGluZ3NfZnJlZShzZXR0aW5ncyk7CiAgICAgfQogCiAgICAgc3RhdGljIHZvaWQg
dGVhcmRvd24oKQogICAgIHsKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICAgICAgd2Vi
a2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfbWVtb3J5X3ByZXNzdXJlX3NldHRpbmdzKG51bGxwdHIp
OworI2Vsc2UKICAgICAgICAgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX3NldF9tZW1vcnlf
cHJlc3N1cmVfc2V0dGluZ3MobnVsbHB0cik7CisjZW5kaWYKICAgICB9CiAKICAgICBzdGF0aWMg
Z2Jvb2xlYW4gbG9hZEZhaWxlZENhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktp
dExvYWRFdmVudCBsb2FkRXZlbnQsIGNvbnN0IGNoYXIqIGZhaWxpbmdVUkksIEdFcnJvciogZXJy
b3IsIE1lbW9yeVByZXNzdXJlVGVzdCogdGVzdCkKQEAgLTg1OSw5ICs5MjgsNyBAQCB2b2lkIGJl
Zm9yZUFsbCgpCiAgICAgcHJlcG9wdWxhdGVIc3RzRGF0YSgpOwogI2VuZGlmCiAKLSNpZiAhRU5B
QkxFKDIwMjJfR0xJQl9BUEkpCiAgICAgV2Vic2l0ZURhdGFUZXN0OjphZGQoIldlYktpdFdlYnNp
dGVEYXRhIiwgImNvbmZpZ3VyYXRpb24iLCB0ZXN0V2Vic2l0ZURhdGFDb25maWd1cmF0aW9uKTsK
LSNlbmRpZgogICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYnNpdGVEYXRhIiwgImVwaGVt
ZXJhbCIsIHRlc3RXZWJzaXRlRGF0YUVwaGVtZXJhbCk7CiAgICAgV2Vic2l0ZURhdGFUZXN0Ojph
ZGQoIldlYktpdFdlYnNpdGVEYXRhIiwgImNhY2hlIiwgdGVzdFdlYnNpdGVEYXRhQ2FjaGUpOwog
ICAgIFdlYnNpdGVEYXRhVGVzdDo6YWRkKCJXZWJLaXRXZWJzaXRlRGF0YSIsICJzdG9yYWdlIiwg
dGVzdFdlYnNpdGVEYXRhU3RvcmFnZSk7CkBAIC04NzIsMTAgKzkzOSw3IEBAIHZvaWQgYmVmb3Jl
QWxsKCkKICAgICBXZWJzaXRlRGF0YVRlc3Q6OmFkZCgiV2ViS2l0V2Vic2l0ZURhdGEiLCAiaHN0
cyIsIHRlc3RXZWJzaXRlRGF0YUhzdHMpOwogI2VuZGlmCiAgICAgV2Vic2l0ZURhdGFUZXN0Ojph
ZGQoIldlYktpdFdlYnNpdGVEYXRhIiwgImRldmljZWlkaGFzaHNhbHQiLCB0ZXN0V2Vic2l0ZURh
dGFEZXZpY2VJZEhhc2hTYWx0KTsKLSNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCi0gICAgLy8g
RklYTUU6IGZpbmQgYSB3YXkgdG8gdGVzdCB0aGlzIHdpdGhvdXQgZGVwcmVjYXRlZCBBUEkuCiAg
ICAgV2Vic2l0ZURhdGFUZXN0OjphZGQoIldlYktpdFdlYnNpdGVEYXRhIiwgIml0cCIsIHRlc3RX
ZWJzaXRlRGF0YUlUUCk7Ci0jZW5kaWYKICAgICBXZWJzaXRlRGF0YVRlc3Q6OmFkZCgiV2ViS2l0
V2Vic2l0ZURhdGEiLCAic2VydmljZS13b3JrZXItcmVnaXN0cmF0aW9ucyIsIHRlc3RXZWJzaXRl
RGF0YVNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25zKTsKICAgICBXZWJzaXRlRGF0YVRlc3Q6OmFk
ZCgiV2ViS2l0V2Vic2l0ZURhdGEiLCAiZG9tLWNhY2hlIiwgdGVzdFdlYnNpdGVEYXRhRE9NQ2Fj
aGUpOwogICAgIE1lbW9yeVByZXNzdXJlVGVzdDo6YWRkKCJXZWJLaXRXZWJzaXRlRGF0YSIsICJt
ZW1vcnktcHJlc3N1cmUiLCB0ZXN0TWVtb3J5UHJlc3N1cmVTZXR0aW5ncyk7CmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0QXV0b2NsZWFudXBzLmNw
cCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL1Rlc3RBdXRvY2xlYW51cHMu
Y3BwCmluZGV4IDQyMDUwNWY0ZTI0ZS4uZGNjNGRmOWI0MDkxIDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0QXV0b2NsZWFudXBzLmNwcAorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0QXV0b2NsZWFudXBzLmNwcApA
QCAtMzYsOSArMzYsMTUgQEAgc3RhdGljIHZvaWQgdGVzdFVJUHJvY2Vzc0F1dG9jbGVhbnVwcyhX
ZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICBnX2Fzc2VydF90cnVlKFdFQktJ
VF9JU19XRUJfQ09OVEVYVChjb250ZXh0KSk7CiAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxl
dGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChjb250ZXh0KSk7CiAKKyNpZiBFTkFCTEUoMjAy
Ml9HTElCX0FQSSkKKyAgICBnX2F1dG9wdHIoV2ViS2l0TmV0d29ya1Nlc3Npb24pIHNlc3Npb24g
PSB3ZWJraXRfbmV0d29ya19zZXNzaW9uX25ldyhudWxscHRyLCBudWxscHRyKTsKKyAgICBnX2Fz
c2VydF90cnVlKFdFQktJVF9JU19ORVRXT1JLX1NFU1NJT04oc2Vzc2lvbikpOworICAgIHRlc3Qt
PmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1Qoc2Vzc2lvbikp
OworI2Vsc2UKICAgICBnX2F1dG9wdHIoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKSBtYW5hZ2Vy
ID0gd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX25ldyhudWxscHRyKTsKICAgICBnX2Fzc2Vy
dF90cnVlKFdFQktJVF9JU19XRUJTSVRFX0RBVEFfTUFOQUdFUihtYW5hZ2VyKSk7Ci0gICAgdGVz
dC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChjb250ZXh0
KSk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09C
SkVDVChtYW5hZ2VyKSk7CisjZW5kaWYKIAogICAgIGdfYXV0b3B0cihXZWJLaXRVc2VyU2NyaXB0
KSB1c2VyU2NyaXB0ID0gd2Via2l0X3VzZXJfc2NyaXB0X25ldygiIiwKICAgICAgICAgV0VCS0lU
X1VTRVJfQ09OVEVOVF9JTkpFQ1RfQUxMX0ZSQU1FUywgV0VCS0lUX1VTRVJfU0NSSVBUX0lOSkVD
VF9BVF9ET0NVTUVOVF9TVEFSVCwKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ2xp
Yi9DTWFrZUxpc3RzLnR4dCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ2xpYi9DTWFrZUxpc3RzLnR4
dAppbmRleCAwOTU3ZGRlNzkzNjEuLmQzZTA0ZTZmZGFhYyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9nbGliL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
Z2xpYi9DTWFrZUxpc3RzLnR4dApAQCAtMTQ0LDYgKzE0NCw3IEBAIEFERF9XSzJfVEVTVF9XRUJf
RVhURU5TSU9OKFdlYlByb2Nlc3NUZXN0ICR7V2ViS2l0R0xpYkFQSVdlYlByb2Nlc3NUZXN0c30p
CiBBRERfV0syX1RFU1QoVGVzdEF1dGhlbnRpY2F0aW9uICR7VE9PTFNfRElSfS9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdEF1dGhlbnRpY2F0aW9uLmNwcCkKIEFERF9XSzJfVEVT
VChUZXN0QXV0b21hdGlvblNlc3Npb24gJHtUT09MU19ESVJ9L1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0R0xpYi9UZXN0QXV0b21hdGlvblNlc3Npb24uY3BwKQogQUREX1dLMl9URVNUKFRlc3RC
YWNrRm9yd2FyZExpc3QgJHtUT09MU19ESVJ9L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xp
Yi9UZXN0QmFja0ZvcndhcmRMaXN0LmNwcCkKK0FERF9XSzJfVEVTVChUZXN0Q29va2llTWFuYWdl
ciAke1RPT0xTX0RJUn0vVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RDb29raWVN
YW5hZ2VyLmNwcCkKIEFERF9XSzJfVEVTVChUZXN0RG93bmxvYWRzICR7VE9PTFNfRElSfS9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdERvd25sb2Fkcy5jcHApCiBBRERfV0syX1RF
U1QoVGVzdFdlYktpdEZpbmRDb250cm9sbGVyICR7VE9PTFNfRElSfS9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdEdMaWIvVGVzdFdlYktpdEZpbmRDb250cm9sbGVyLmNwcCkKIEFERF9XSzJfVEVT
VChUZXN0RWRpdG9yICR7VE9PTFNfRElSfS9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIv
VGVzdEVkaXRvci5jcHApCkBAIC0xNjgsMTEgKzE2OSw2IEBAIEFERF9XSzJfVEVTVChUZXN0RE9N
RWxlbWVudCAke1RPT0xTX0RJUn0vVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RE
T01FCiBBRERfV0syX1RFU1QoVGVzdEdlb2xvY2F0aW9uTWFuYWdlciAke1RPT0xTX0RJUn0vVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RHZW9sb2NhdGlvbk1hbmFnZXIuY3BwKQog
QUREX1dLMl9URVNUKFRlc3RJbnB1dE1ldGhvZENvbnRleHQgJHtUT09MU19ESVJ9L1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0SW5wdXRNZXRob2RDb250ZXh0LmNwcCkKIAotIyBG
SVhNRTogRW5hYmxlIGZvciBXUEUgYW5kIEdUSzQKLWlmIChQT1JUIFNUUkVRVUFMICJHVEsiIEFO
RCBOT1QgVVNFX0dUSzQpCi0gICAgQUREX1dLMl9URVNUKFRlc3RDb29raWVNYW5hZ2VyICR7VE9P
TFNfRElSfS9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdENvb2tpZU1hbmFnZXIu
Y3BwKQotZW5kaWYgKCkKLQogbWFjcm8oQUREX1dQRV9RVF9URVNUIHRlc3RfbmFtZSkKICAgICBh
ZGRfZXhlY3V0YWJsZSgke3Rlc3RfbmFtZX0gJHtBUkdOfSAke1RPT0xTX0RJUn0vVGVzdFdlYktp
dEFQSS9UZXN0cy9XUEVRdC9XUEVRdFRlc3QuY3BwKQogICAgIHNldF90YXJnZXRfcHJvcGVydGll
cygke3Rlc3RfbmFtZX0gUFJPUEVSVElFUwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9nbGliL1dlYktpdEdMaWIvVGVzdE1haW4uY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9nbGli
L1dlYktpdEdMaWIvVGVzdE1haW4uY3BwCmluZGV4IDM5NzQxNzQ2YTc1Ni4uYTBjMGI1M2JkNGQ1
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2dsaWIvV2ViS2l0R0xpYi9UZXN0TWFp
bi5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9nbGliL1dlYktpdEdMaWIvVGVzdE1haW4u
Y3BwCkBAIC0xMjcsNiArMTI3LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQog
ICAgIGdfc2V0X3ByZ25hbWUoRmlsZVN5c3RlbTo6Y3VycmVudEV4ZWN1dGFibGVOYW1lKCkuZGF0
YSgpKTsKICAgICBnX3NldGVudigiV0VCS0lUX0VYRUNfUEFUSCIsIFdFQktJVF9FWEVDX1BBVEgs
IEZBTFNFKTsKICAgICBnX3NldGVudigiV0VCS0lUX0lOSkVDVEVEX0JVTkRMRV9QQVRIIiwgV0VC
S0lUX0lOSkVDVEVEX0JVTkRMRV9QQVRILCBGQUxTRSk7CisgICAgLy8gU2FuZGJveCByZXF1aXJl
cyB1c2luZyBHQXBwbGljYXRpb24uCisgICAgZ19zZXRlbnYoIldFQktJVF9ESVNBQkxFX1NBTkRC
T1hfVEhJU19JU19EQU5HRVJPVVMiLCAiMSIsIFRSVUUpOwogICAgIGdfc2V0ZW52KCJMQ19BTEwi
LCAiQyIsIFRSVUUpOwogICAgIGdfc2V0ZW52KCJHSU9fVVNFX1ZGUyIsICJsb2NhbCIsIFRSVUUp
OwogICAgIGdfc2V0ZW52KCJHU0VUVElOR1NfQkFDS0VORCIsICJtZW1vcnkiLCBUUlVFKTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ2xpYi9XZWJLaXRHTGliL1Rlc3RNYWluLmgg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL2dsaWIvV2ViS2l0R0xpYi9UZXN0TWFpbi5oCmluZGV4IDBj
ZWJhMGRjNGQ1My4uYjBiZjNiMmEyZWYwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L2dsaWIvV2ViS2l0R0xpYi9UZXN0TWFpbi5oCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ2xp
Yi9XZWJLaXRHTGliL1Rlc3RNYWluLmgKQEAgLTEyMCw2ICsxMjAsMTIgQEAgcHVibGljOgogCiAg
ICAgVGVzdCgpCiAgICAgeworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgICAgICBtX25l
dHdvcmtTZXNzaW9uID0gYWRvcHRHUmVmKHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fbmV3KGRhdGFE
aXJlY3RvcnkoKSwgZGF0YURpcmVjdG9yeSgpKSk7CisgICAgICAgIGFzc2VydE9iamVjdElzRGVs
ZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QobV9uZXR3b3JrU2Vzc2lvbi5nZXQoKSkpOwor
CisgICAgICAgIG1fd2ViQ29udGV4dCA9IGFkb3B0R1JlZihXRUJLSVRfV0VCX0NPTlRFWFQoZ19v
YmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9DT05URVhULCAibWVtb3J5LXByZXNzdXJlLXNldHRp
bmdzIiwgc19tZW1vcnlQcmVzc3VyZVNldHRpbmdzLCBudWxscHRyKSkpOworI2Vsc2UKICAgICAg
ICAgR1JlZlB0cjxXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXI+IHdlYnNpdGVEYXRhTWFuYWdlciA9
IGFkb3B0R1JlZih3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfbmV3KAogICAgICAgICAgICAg
ImJhc2UtZGF0YS1kaXJlY3RvcnkiLCBkYXRhRGlyZWN0b3J5KCksCiAgICAgICAgICAgICAiYmFz
ZS1jYWNoZS1kaXJlY3RvcnkiLCBkYXRhRGlyZWN0b3J5KCksCkBAIC0xMjcsMTIgKzEzMywxMyBA
QCBwdWJsaWM6CiAKICAgICAgICAgbV93ZWJDb250ZXh0ID0gYWRvcHRHUmVmKFdFQktJVF9XRUJf
Q09OVEVYVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX0NPTlRFWFQsCiAgICAgICAgICAg
ICAid2Vic2l0ZS1kYXRhLW1hbmFnZXIiLCB3ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCksCi0jaWYg
UExBVEZPUk0oR1RLKSAmJiAhVVNFKEdUSzQpCisjaWYgUExBVEZPUk0oR1RLKQogICAgICAgICAg
ICAgInByb2Nlc3Mtc3dhcC1vbi1jcm9zcy1zaXRlLW5hdmlnYXRpb24tZW5hYmxlZCIsIFRSVUUs
CiAgICAgICAgICAgICAidXNlLXN5c3RlbS1hcHBlYXJhbmNlLWZvci1zY3JvbGxiYXJzIiwgRkFM
U0UsCiAjZW5kaWYKICAgICAgICAgICAgICJtZW1vcnktcHJlc3N1cmUtc2V0dGluZ3MiLCBzX21l
bW9yeVByZXNzdXJlU2V0dGluZ3MsCiAgICAgICAgICAgICBudWxscHRyKSkpOworI2VuZGlmCiAg
ICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QobV93
ZWJDb250ZXh0LmdldCgpKSk7CiAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJDb250ZXh0
LmdldCgpLCAiaW5pdGlhbGl6ZS13ZWItZXh0ZW5zaW9ucyIsIEdfQ0FMTEJBQ0soaW5pdGlhbGl6
ZVdlYkV4dGVuc2lvbnNDYWxsYmFjayksIHRoaXMpOwogICAgIH0KQEAgLTE0MSw2ICsxNDgsOSBA
QCBwdWJsaWM6CiAgICAgewogICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21h
dGNoZWQobV93ZWJDb250ZXh0LmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCBudWxs
cHRyLCBudWxscHRyLCB0aGlzKTsKICAgICAgICAgbV93ZWJDb250ZXh0ID0gbnVsbHB0cjsKKyNp
ZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICAgICAgbV9uZXR3b3JrU2Vzc2lvbiA9IG51bGxw
dHI7CisjZW5kaWYKICAgICAgICAgaWYgKG1fd2F0Y2hlZE9iamVjdHMuaXNFbXB0eSgpKQogICAg
ICAgICAgICAgcmV0dXJuOwogCkBAIC0yNzksNiArMjg5LDkgQEAgcHVibGljOgogCiAgICAgSGFz
aFNldDxHT2JqZWN0Kj4gbV93YXRjaGVkT2JqZWN0czsKICAgICBHUmVmUHRyPFdlYktpdFdlYkNv
bnRleHQ+IG1fd2ViQ29udGV4dDsKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICBHUmVm
UHRyPFdlYktpdE5ldHdvcmtTZXNzaW9uPiBtX25ldHdvcmtTZXNzaW9uOworI2VuZGlmCiAgICAg
c3RhdGljIEdSZWZQdHI8R0RCdXNTZXJ2ZXI+IHNfZGJ1c1NlcnZlcjsKICAgICBzdGF0aWMgVmVj
dG9yPEdSZWZQdHI8R0RCdXNDb25uZWN0aW9uPj4gc19kYnVzQ29ubmVjdGlvbnM7CiAgICAgc3Rh
dGljIEhhc2hNYXA8dWludDY0X3QsIEdEQnVzQ29ubmVjdGlvbio+IHNfZGJ1c0Nvbm5lY3Rpb25Q
YWdlTWFwOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9nbGliL1dlYktpdEdMaWIv
V2ViVmlld1Rlc3QuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9nbGliL1dlYktpdEdMaWIvV2Vi
Vmlld1Rlc3QuY3BwCmluZGV4IGVmMjIzNzlhMWE2ZC4uYWI3ZGJhNTRkZmE3IDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL2dsaWIvV2ViS2l0R0xpYi9XZWJWaWV3VGVzdC5jcHAKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9nbGliL1dlYktpdEdMaWIvV2ViVmlld1Rlc3QuY3BwCkBA
IC01MiwxMyArNTIsMjEgQEAgdm9pZCBXZWJWaWV3VGVzdDo6aW5pdGlhbGl6ZVdlYlZpZXcoKQog
ewogICAgIGdfYXNzZXJ0X251bGwobV93ZWJWaWV3KTsKIAorI2lmIEVOQUJMRSgyMDIyX0dMSUJf
QVBJKQorICAgIEdSZWZQdHI8V2ViS2l0TmV0d29ya1Nlc3Npb24+IG5ldHdvcmtTZXNzaW9uID0g
c2hvdWxkQ3JlYXRlRXBoZW1lcmFsV2ViVmlldyA/IGFkb3B0R1JlZih3ZWJraXRfbmV0d29ya19z
ZXNzaW9uX25ld19lcGhlbWVyYWwoKSkgOiBtX25ldHdvcmtTZXNzaW9uOworI2VuZGlmCisKICAg
ICBtX3dlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dF
Ql9WSUVXLAogI2lmIFBMQVRGT1JNKFdQRSkKICAgICAgICAgImJhY2tlbmQiLCBUZXN0OjpjcmVh
dGVXZWJWaWV3QmFja2VuZCgpLAogI2VuZGlmCiAgICAgICAgICJ3ZWItY29udGV4dCIsIG1fd2Vi
Q29udGV4dC5nZXQoKSwKICAgICAgICAgInVzZXItY29udGVudC1tYW5hZ2VyIiwgbV91c2VyQ29u
dGVudE1hbmFnZXIuZ2V0KCksCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgICAgICJu
ZXR3b3JrLXNlc3Npb24iLCBuZXR3b3JrU2Vzc2lvbi5nZXQoKSwKKyNlbHNlCiAgICAgICAgICJp
cy1lcGhlbWVyYWwiLCBzaG91bGRDcmVhdGVFcGhlbWVyYWxXZWJWaWV3LAorI2VuZGlmCiAgICAg
ICAgIG51bGxwdHIpKTsKIAogICAgIHBsYXRmb3JtSW5pdGlhbGl6ZVdlYlZpZXcoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>464630</attachid>
            <date>2023-01-24 06:57:07 -0800</date>
            <delta_ts>2023-01-24 06:57:07 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>wk-network-session.diff</filename>
            <type>text/plain</type>
            <size>219672</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDNhODU2NmFmZWRjNC4uZjhkZmQ0MzBlMmU2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTE4Myw2ICsxODMsMTIgQEAgc2V0KFdlYktpdEdU
S19IRUFERVJfVEVNUExBVEVTCiAgICAgJHtXRUJLSVRfRElSfS9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3QmFzZS5oLmluCiApCiAKK2lmIChFTkFCTEVfMjAyMl9HTElCX0FQSSkKKyAg
ICBsaXN0KEFQUEVORCBXZWJLaXRHVEtfSEVBREVSX1RFTVBMQVRFUworICAgICAgICAke1dFQktJ
VF9ESVJ9L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXROZXR3b3JrU2Vzc2lvbi5oLmluCisgICAg
KQorZW5kaWYgKCkKKwogc2V0KFdlYktpdEdUS19JTlNUQUxMRURfSEVBREVSUwogICAgICR7V2Vi
S2l0R1RLX0RFUklWRURfU09VUkNFU19ESVJ9L3dlYmtpdC9XZWJLaXRFbnVtVHlwZXMuaAogICAg
ICR7V2ViS2l0R1RLX0RFUklWRURfU09VUkNFU19ESVJ9L3dlYmtpdC9XZWJLaXRWZXJzaW9uLmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XUEUuY21ha2UgYi9Tb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtV1BFLmNtYWtlCmluZGV4IDBlNjNjZjMzYzQzOS4uZDFkMTk2Y2ZmMjgwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV1BFLmNtYWtlCisrKyBiL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm1XUEUuY21ha2UKQEAgLTE5NCw2ICsxOTQsMTIgQEAgc2V0KFdQRV9BUElf
SEVBREVSX1RFTVBMQVRFUwogICAgICR7V0VCS0lUX0RJUn0vVUlQcm9jZXNzL0FQSS9nbGliL3dl
YmtpdC5oLmluCiApCiAKK2lmIChFTkFCTEVfMjAyMl9HTElCX0FQSSkKKyAgICBsaXN0KEFQUEVO
RCBXUEVfQVBJX0hFQURFUl9URU1QTEFURVMKKyAgICAgICAgJHtXRUJLSVRfRElSfS9VSVByb2Nl
c3MvQVBJL2dsaWIvV2ViS2l0TmV0d29ya1Nlc3Npb24uaC5pbgorICAgICkKK2VuZGlmICgpCisK
IHNldChXUEVfQVBJX0lOU1RBTExFRF9IRUFERVJTCiAgICAgJHtERVJJVkVEX1NPVVJDRVNfV1BF
X0FQSV9ESVJ9L1dlYktpdEVudW1UeXBlcy5oCiAgICAgJHtERVJJVkVEX1NPVVJDRVNfV1BFX0FQ
SV9ESVJ9L1dlYktpdFZlcnNpb24uaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2Vz
R1RLLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQKaW5kZXggNDQ3Zjk5MDgwNTll
Li5lOGExNmE1MWYxOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQK
KysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dApAQCAtMTU3LDYgKzE1Nyw3IEBAIFVJ
UHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXROYXZpZ2F0aW9uQWN0aW9uLmNwcCBAbm8tdW5pZnkKIFVJ
UHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXROYXZpZ2F0aW9uQ2xpZW50LmNwcCBAbm8tdW5pZnkKIFVJ
UHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24uY3BwIEBuby11
bmlmeQogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdE5ldHdvcmtQcm94eVNldHRpbmdzLmNwcCBA
bm8tdW5pZnkKK1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXROZXR3b3JrU2Vzc2lvbi5jcHAgQG5v
LXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Tm90aWZpY2F0aW9uLmNwcCBAbm8tdW5p
ZnkKIFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXROb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVz
dC5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Tm90aWZpY2F0aW9uUHJv
dmlkZXIuY3BwIEBuby11bmlmeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzV1BF
LnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc1dQRS50eHQKaW5kZXggODUzM2NjZjVjYzc2Li40
OThhNDRlYWNiYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc1dQRS50eHQKKysr
IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzV1BFLnR4dApAQCAtMTQ5LDYgKzE0OSw3IEBAIFVJUHJv
Y2Vzcy9BUEkvZ2xpYi9XZWJLaXROYXZpZ2F0aW9uQWN0aW9uLmNwcCBAbm8tdW5pZnkKIFVJUHJv
Y2Vzcy9BUEkvZ2xpYi9XZWJLaXROYXZpZ2F0aW9uQ2xpZW50LmNwcCBAbm8tdW5pZnkKIFVJUHJv
Y2Vzcy9BUEkvZ2xpYi9XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24uY3BwIEBuby11bmlm
eQogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdE5ldHdvcmtQcm94eVNldHRpbmdzLmNwcCBAbm8t
dW5pZnkKK1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXROZXR3b3JrU2Vzc2lvbi5jcHAgQG5vLXVu
aWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Tm90aWZpY2F0aW9uLmNwcCBAbm8tdW5pZnkK
IFVJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXROb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdC5j
cHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0Tm90aWZpY2F0aW9uUHJvdmlk
ZXIuY3BwIEBuby11bmlmeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L2dsaWIvSWNvbkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGli
L0ljb25EYXRhYmFzZS5jcHAKaW5kZXggNGNhN2FiMjAwODQ2Li45MWU5YTJjNWI3MWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL0ljb25EYXRhYmFzZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvSWNvbkRhdGFiYXNlLmNwcApA
QCAtNTYsNyArNTYsNyBAQCBJY29uRGF0YWJhc2U6Okljb25EYXRhYmFzZShjb25zdCBTdHJpbmcm
IHBhdGgsIEFsbG93RGF0YWJhc2VXcml0ZSBhbGxvd0RhdGFiYXNlVwogICAgIC8vIFdlIGluaXRp
YWxpemUgdGhlIGRhdGFiYXNlIHN5bmNocm9ub3VzbHksIGl0J3MgaG9wZWZ1bGx5IGZhc3QgZW5v
dWdoIGJlY2F1c2UgaXQgbWFrZXMKICAgICAvLyB0aGUgaW1wbGVtZW50YXRpb24gYSBsb3Qgc2lt
cGxlci4KICAgICBtX3dvcmtRdWV1ZS0+ZGlzcGF0Y2hTeW5jKFsmXSB7Ci0gICAgICAgIGlmIChh
bGxvd0RhdGFiYXNlV3JpdGUgPT0gQWxsb3dEYXRhYmFzZVdyaXRlOjpObyAmJiAhRmlsZVN5c3Rl
bTo6ZmlsZUV4aXN0cyhwYXRoKSkKKyAgICAgICAgaWYgKGFsbG93RGF0YWJhc2VXcml0ZSA9PSBB
bGxvd0RhdGFiYXNlV3JpdGU6Ok5vICYmICghcGF0aC5pc051bGwoKSB8fCAhRmlsZVN5c3RlbTo6
ZmlsZUV4aXN0cyhwYXRoKSkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgYXV0byBk
YXRhYmFzZURpcmVjdG9yeSA9IEZpbGVTeXN0ZW06OnBhcmVudFBhdGgocGF0aCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRBdXRvY2xlYW51cHMu
aC5pbiBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdEF1dG9jbGVhbnVw
cy5oLmluCmluZGV4IDQ5MGI5ZGU3MDVlZi4uYzg4NWIwZGY4MWZlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRBdXRvY2xlYW51cHMuaC5pbgorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRBdXRvY2xlYW51cHMuaC5p
bgpAQCAtNDUsNiArNDUsOSBAQCBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0
SW5wdXRNZXRob2RDb250ZXh0LCBnX29iamVjdF91bnJlZikKIEdfREVGSU5FX0FVVE9QVFJfQ0xF
QU5VUF9GVU5DIChXZWJLaXRJbnN0YWxsTWlzc2luZ01lZGlhUGx1Z2luc1Blcm1pc3Npb25SZXF1
ZXN0LCBnX29iamVjdF91bnJlZikKICNlbmRpZgogR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZV
TkMgKFdlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiwgZ19vYmplY3RfdW5yZWYpCisjaWYg
RU5BQkxFKDIwMjJfR0xJQl9BUEkpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAoV2Vi
S2l0TmV0d29ya1Nlc3Npb24sIGdfb2JqZWN0X3VucmVmKQorI2VuZGlmCiBHX0RFRklORV9BVVRP
UFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0Tm90aWZpY2F0aW9uLCBnX29iamVjdF91bnJlZikKIEdf
REVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXROb3RpZmljYXRpb25QZXJtaXNzaW9u
UmVxdWVzdCwgZ19vYmplY3RfdW5yZWYpCiBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAo
V2ViS2l0UGVybWlzc2lvblJlcXVlc3QsIGdfb2JqZWN0X3VucmVmKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0QXV0b21hdGlvblNlc3Npb24uY3Bw
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0QXV0b21hdGlvblNlc3Np
b24uY3BwCmluZGV4IDZhNzViOWRkMzFjNS4uMWMwNTRmNDViNDk1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRBdXRvbWF0aW9uU2Vzc2lvbi5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0QXV0b21hdGlvblNl
c3Npb24uY3BwCkBAIC0zMSw2ICszMSwxMCBAQAogI2luY2x1ZGUgPHd0Zi9nbGliL1dURkdUeXBl
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCisjaWYgRU5BQkxFKDIwMjJfR0xJ
Ql9BUEkpCisjaW5jbHVkZSAiV2ViS2l0TmV0d29ya1Nlc3Npb24uaCIKKyNlbmRpZgorCiB1c2lu
ZyBuYW1lc3BhY2UgV2ViS2l0OwogCiAvKioKQEAgLTM1MCwxMyArMzU0LDI3IEBAIFdlYktpdEF1
dG9tYXRpb25TZXNzaW9uKiB3ZWJraXRBdXRvbWF0aW9uU2Vzc2lvbkNyZWF0ZShXZWJLaXRXZWJD
b250ZXh0KiB3ZWJDb250CiB7CiAgICAgYXV0byogc2Vzc2lvbiA9IFdFQktJVF9BVVRPTUFUSU9O
X1NFU1NJT04oZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0FVVE9NQVRJT05fU0VTU0lPTiwgImlk
Iiwgc2Vzc2lvbklELCBudWxscHRyKSk7CiAgICAgc2Vzc2lvbi0+cHJpdi0+d2ViQ29udGV4dCA9
IHdlYkNvbnRleHQ7Ci0gICAgaWYgKGNhcGFiaWxpdGllcy5hY2NlcHRJbnNlY3VyZUNlcnRpZmlj
YXRlcykKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICBXZWJLaXROZXR3b3JrU2Vzc2lv
biogbmV0d29ya1Nlc3Npb24gPSB3ZWJraXRXZWJDb250ZXh0R2V0TmV0d29ya1Nlc3Npb25Gb3JB
dXRvbWF0aW9uKHdlYkNvbnRleHQpOworI2VuZGlmCisKKyAgICBpZiAoY2FwYWJpbGl0aWVzLmFj
Y2VwdEluc2VjdXJlQ2VydGlmaWNhdGVzKSB7CisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisg
ICAgICAgIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fc2V0X3Rsc19lcnJvcnNfcG9saWN5KG5ldHdv
cmtTZXNzaW9uLCBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfSUdOT1JFKTsKKyNlbHNlCiAgICAg
ICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9zZXRfdGxzX2Vycm9yc19wb2xpY3kod2Vi
a2l0X3dlYl9jb250ZXh0X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcih3ZWJDb250ZXh0KSwgV0VC
S0lUX1RMU19FUlJPUlNfUE9MSUNZX0lHTk9SRSk7CisjZW5kaWYKKyAgICB9CiAKICAgICBmb3Ig
KGF1dG8mIGNlcnRpZmljYXRlIDogY2FwYWJpbGl0aWVzLmNlcnRpZmljYXRlcykgewogICAgICAg
ICBHUmVmUHRyPEdUbHNDZXJ0aWZpY2F0ZT4gdGxzQ2VydGlmaWNhdGUgPSBhZG9wdEdSZWYoZ190
bHNfY2VydGlmaWNhdGVfbmV3X2Zyb21fZmlsZShjZXJ0aWZpY2F0ZS5zZWNvbmQudXRmOCgpLmRh
dGEoKSwgbnVsbHB0cikpOwotICAgICAgICBpZiAodGxzQ2VydGlmaWNhdGUpCisgICAgICAgIGlm
ICh0bHNDZXJ0aWZpY2F0ZSkgeworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgICAgICAg
ICAgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9hbGxvd190bHNfY2VydGlmaWNhdGVfZm9yX2hvc3Qo
bmV0d29ya1Nlc3Npb24sIHRsc0NlcnRpZmljYXRlLmdldCgpLCBjZXJ0aWZpY2F0ZS5maXJzdC51
dGY4KCkuZGF0YSgpKTsKKyNlbHNlCiAgICAgICAgICAgICB3ZWJraXRfd2ViX2NvbnRleHRfYWxs
b3dfdGxzX2NlcnRpZmljYXRlX2Zvcl9ob3N0KHdlYkNvbnRleHQsIHRsc0NlcnRpZmljYXRlLmdl
dCgpLCBjZXJ0aWZpY2F0ZS5maXJzdC51dGY4KCkuZGF0YSgpKTsKKyNlbmRpZgorICAgICAgICB9
CiAgICAgfQogICAgIGlmIChjYXBhYmlsaXRpZXMucHJveHkpIHsKICAgICAgICAgaWYgKGNhcGFi
aWxpdGllcy5wcm94eS0+dHlwZSA9PSAicGFjIl9zKSB7CkBAIC0zNjUsMTMgKzM4MywyMSBAQCBX
ZWJLaXRBdXRvbWF0aW9uU2Vzc2lvbiogd2Via2l0QXV0b21hdGlvblNlc3Npb25DcmVhdGUoV2Vi
S2l0V2ViQ29udGV4dCogd2ViQ29udAogICAgICAgICAgICAgaWYgKGNhcGFiaWxpdGllcy5wcm94
eS0+YXV0b2NvbmZpZ1VSTCkKICAgICAgICAgICAgICAgICBzZXR0aW5ncy5kZWZhdWx0UHJveHlV
UkwgPSBjYXBhYmlsaXRpZXMucHJveHktPmF1dG9jb25maWdVUkwtPnV0ZjgoKTsKICAgICAgICAg
ICAgIGlmICghc2V0dGluZ3MuaXNFbXB0eSgpKSB7CisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkp
CisgICAgICAgICAgICAgICAgYXV0byYgZGF0YVN0b3JlID0gd2Via2l0V2Vic2l0ZURhdGFNYW5h
Z2VyR2V0RGF0YVN0b3JlKHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X3dlYnNpdGVfZGF0YV9t
YW5hZ2VyKG5ldHdvcmtTZXNzaW9uKSk7CisjZWxzZQogICAgICAgICAgICAgICAgIGF1dG8mIGRh
dGFTdG9yZSA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZSh3ZWJraXRfd2Vi
X2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYkNvbnRleHQpKTsKKyNlbmRpZgog
ICAgICAgICAgICAgICAgIGRhdGFTdG9yZS5zZXROZXR3b3JrUHJveHlTZXR0aW5ncyhXVEZNb3Zl
KHNldHRpbmdzKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICBXZWJLaXROZXR3b3JrUHJveHlTZXR0aW5ncyogcHJveHlTZXR0aW5ncyA9IG51bGxwdHI7CiAg
ICAgICAgICAgICBhdXRvIHByb3h5TW9kZSA9IHBhcnNlUHJveHlDYXBhYmlsaXRpZXMoKmNhcGFi
aWxpdGllcy5wcm94eSwgJnByb3h5U2V0dGluZ3MpOworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJ
KQorICAgICAgICAgICAgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfcHJveHlfc2V0dGluZ3Mo
bmV0d29ya1Nlc3Npb24sIHByb3h5TW9kZSwgcHJveHlTZXR0aW5ncyk7CisjZWxzZQogICAgICAg
ICAgICAgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX3NldF9uZXR3b3JrX3Byb3h5X3NldHRp
bmdzKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIod2ViQ29udGV4
dCksIHByb3h5TW9kZSwgcHJveHlTZXR0aW5ncyk7CisjZW5kaWYKICAgICAgICAgICAgIGlmIChw
cm94eVNldHRpbmdzKQogICAgICAgICAgICAgICAgIHdlYmtpdF9uZXR3b3JrX3Byb3h5X3NldHRp
bmdzX2ZyZWUocHJveHlTZXR0aW5ncyk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdE5hdmlnYXRpb25DbGllbnQuY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0TmF2aWdhdGlvbkNsaWVudC5jcHAK
aW5kZXggNDVkNGY0NjU0YzYxLi4xYzQ2YjliOTgyZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdE5hdmlnYXRpb25DbGllbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdE5hdmlnYXRpb25DbGllbnQuY3Bw
CkBAIC0zNCw2ICszNCwxMCBAQAogI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkK
KyNpbmNsdWRlICJXZWJLaXROZXR3b3JrU2Vzc2lvblByaXZhdGUuaCIKKyNlbmRpZgorCiB1c2lu
ZyBuYW1lc3BhY2UgV2ViS2l0OwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTE1OCwx
OSArMTYyLDMxIEBAIHByaXZhdGU6CiAgICAgdm9pZCBuYXZpZ2F0aW9uQWN0aW9uRGlkQmVjb21l
RG93bmxvYWQoV2ViUGFnZVByb3h5JiwgQVBJOjpOYXZpZ2F0aW9uQWN0aW9uJiwgRG93bmxvYWRQ
cm94eSYgZG93bmxvYWRQcm94eSkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGF1dG8gZG93bmxv
YWQgPSB3ZWJraXREb3dubG9hZENyZWF0ZShkb3dubG9hZFByb3h5LCBtX3dlYlZpZXcpOworI2lm
IEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgICAgICB3ZWJraXROZXR3b3JrU2Vzc2lvbkRvd25s
b2FkU3RhcnRlZCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X25ldHdvcmtfc2Vzc2lvbihtX3dlYlZpZXcp
LCBkb3dubG9hZC5nZXQoKSk7CisjZWxzZQogICAgICAgICB3ZWJraXRXZWJDb250ZXh0RG93bmxv
YWRTdGFydGVkKHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dChtX3dlYlZpZXcpLCBkb3dubG9h
ZC5nZXQoKSk7CisjZW5kaWYKICAgICB9CiAKICAgICB2b2lkIG5hdmlnYXRpb25SZXNwb25zZURp
ZEJlY29tZURvd25sb2FkKFdlYlBhZ2VQcm94eSYsIEFQSTo6TmF2aWdhdGlvblJlc3BvbnNlJiwg
RG93bmxvYWRQcm94eSYgZG93bmxvYWRQcm94eSkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGF1
dG8gZG93bmxvYWQgPSB3ZWJraXREb3dubG9hZENyZWF0ZShkb3dubG9hZFByb3h5LCBtX3dlYlZp
ZXcpOworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgICAgICB3ZWJraXROZXR3b3JrU2Vz
c2lvbkRvd25sb2FkU3RhcnRlZCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X25ldHdvcmtfc2Vzc2lvbiht
X3dlYlZpZXcpLCBkb3dubG9hZC5nZXQoKSk7CisjZWxzZQogICAgICAgICB3ZWJraXRXZWJDb250
ZXh0RG93bmxvYWRTdGFydGVkKHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dChtX3dlYlZpZXcp
LCBkb3dubG9hZC5nZXQoKSk7CisjZW5kaWYKICAgICB9CiAKICAgICB2b2lkIGNvbnRleHRNZW51
RGlkQ3JlYXRlRG93bmxvYWQoV2ViUGFnZVByb3h5JiwgRG93bmxvYWRQcm94eSYgZG93bmxvYWRQ
cm94eSkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIGF1dG8gZG93bmxvYWQgPSB3ZWJraXREb3du
bG9hZENyZWF0ZShkb3dubG9hZFByb3h5LCBtX3dlYlZpZXcpOworI2lmIEVOQUJMRSgyMDIyX0dM
SUJfQVBJKQorICAgICAgICB3ZWJraXROZXR3b3JrU2Vzc2lvbkRvd25sb2FkU3RhcnRlZCh3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X25ldHdvcmtfc2Vzc2lvbihtX3dlYlZpZXcpLCBkb3dubG9hZC5nZXQo
KSk7CisjZWxzZQogICAgICAgICB3ZWJraXRXZWJDb250ZXh0RG93bmxvYWRTdGFydGVkKHdlYmtp
dF93ZWJfdmlld19nZXRfY29udGV4dChtX3dlYlZpZXcpLCBkb3dubG9hZC5nZXQoKSk7CisjZW5k
aWYKICAgICB9CiAKICAgICBXZWJLaXRXZWJWaWV3KiBtX3dlYlZpZXc7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXROZXR3b3JrU2Vzc2lvbi5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXROZXR3b3JrU2Vzc2lvbi5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41ZDc1OTY3YTM0YzgK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJL
aXROZXR3b3JrU2Vzc2lvbi5jcHAKQEAgLTAsMCArMSw2NTQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjMgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdE5ldHdvcmtTZXNzaW9uLmgiCisKKyNpbmNs
dWRlICJBUElEb3dubG9hZENsaWVudC5oIgorI2luY2x1ZGUgIkZyYW1lSW5mb0RhdGEuaCIKKyNp
bmNsdWRlICJOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiV2ViS2l0Q29va2ll
TWFuYWdlclByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXREb3dubG9hZFByaXZhdGUuaCIKKyNp
bmNsdWRlICJXZWJLaXRJbml0aWFsaXplLmgiCisjaW5jbHVkZSAiV2ViS2l0TWVtb3J5UHJlc3N1
cmVTZXR0aW5ncy5oIgorI2luY2x1ZGUgIldlYktpdE1lbW9yeVByZXNzdXJlU2V0dGluZ3NQcml2
YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0TmV0d29ya1Byb3h5U2V0dGluZ3NQcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdFdlYnNpdGVEYXRhTWFu
YWdlclByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgorI2luY2x1ZGUgPGds
aWIvZ2kxOG4tbGliLmg+CisjaW5jbHVkZSA8cGFsL0h5c3RlcmVzaXNBY3Rpdml0eS5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9XVEZHVHlw
ZS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCisvKioKKyAqIFdlYktpdE5ldHdvcmtT
ZXNzaW9uOgorICogQHNlZV9hbHNvOiAjV2ViS2l0V2ViQ29udGV4dCwgI1dlYktpdFdlYnNpdGVE
YXRhCisgKgorICogTWFuYWdlcyBuZXR3b3JrIGNvbmZpZ3VyYXRpb24uCisgKgorICoKKyAqIFNp
bmNlOiAyLjQwCisgKi8KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworZW51bSB7CisgICAg
UFJPUF8wLAorCisgICAgUFJPUF9EQVRBX0RJUkVDVE9SWSwKKyAgICBQUk9QX0NBQ0hFX0RJUkVD
VE9SWSwKKyAgICBQUk9QX0lTX0VQSEVNRVJBTCwKKworICAgIE5fUFJPUEVSVElFUworfTsKKwor
c3RhdGljIEdQYXJhbVNwZWMqIHNPYmpQcm9wZXJ0aWVzW05fUFJPUEVSVElFU10gPSB7IG51bGxw
dHIsIH07CisKK2VudW0geworICAgIERPV05MT0FEX1NUQVJURUQsCisKKyAgICBMQVNUX1NJR05B
TAorfTsKKworc3RhdGljIGd1aW50IHNpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OworCitz
dHJ1Y3QgX1dlYktpdE5ldHdvcmtTZXNzaW9uUHJpdmF0ZSB7CisgICAgX1dlYktpdE5ldHdvcmtT
ZXNzaW9uUHJpdmF0ZSgpCisgICAgICAgIDogZG5zUHJlZmV0Y2hIeXN0ZXJlcmlzKFt0aGlzXShQ
QUw6Okh5c3RlcmVzaXNTdGF0ZSBzdGF0ZSkgeyBpZiAoc3RhdGUgPT0gUEFMOjpIeXN0ZXJlc2lz
U3RhdGU6OlN0b3BwZWQpIGRuc1ByZWZldGNoZWRIb3N0cy5jbGVhcigpOyB9KQorICAgIHsKKyAg
ICB9CisKKyAgICBHUmVmUHRyPFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlcj4gd2Vic2l0ZURhdGFN
YW5hZ2VyOworICAgIEdSZWZQdHI8V2ViS2l0Q29va2llTWFuYWdlcj4gY29va2llTWFuYWdlcjsK
KyAgICBXZWJLaXRUTFNFcnJvcnNQb2xpY3kgdGxzRXJyb3JzUG9saWN5OworCisgICAgR1VuaXF1
ZVB0cjxjaGFyPiBkYXRhRGlyZWN0b3J5OworICAgIEdVbmlxdWVQdHI8Y2hhcj4gY2FjaGVEaXJl
Y3Rvcnk7CisKKyAgICBIYXNoU2V0PFN0cmluZz4gZG5zUHJlZmV0Y2hlZEhvc3RzOworICAgIFBB
TDo6SHlzdGVyZXNpc0FjdGl2aXR5IGRuc1ByZWZldGNoSHlzdGVyZXJpczsKK307CisKK1dFQktJ
VF9ERUZJTkVfVFlQRShXZWJLaXROZXR3b3JrU2Vzc2lvbiwgd2Via2l0X25ldHdvcmtfc2Vzc2lv
biwgR19UWVBFX09CSkVDVCkKKworc3RhdGljIHZvaWQgd2Via2l0TmV0d29ya1Nlc3Npb25HZXRQ
cm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJRCwgR1ZhbHVlKiB2YWx1ZSwgR1Bh
cmFtU3BlYyogcGFyYW1TcGVjKQoreworICAgIFdlYktpdE5ldHdvcmtTZXNzaW9uKiBzZXNzaW9u
ID0gV0VCS0lUX05FVFdPUktfU0VTU0lPTihvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wSUQp
IHsKKyAgICBjYXNlIFBST1BfSVNfRVBIRU1FUkFMOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29s
ZWFuKHZhbHVlLCB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2lzX2VwaGVtZXJhbChzZXNzaW9uKSk7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5W
QUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJRCwgcGFyYW1TcGVjKTsKKyAgICB9Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdE5ldHdvcmtTZXNzaW9uU2V0UHJvcGVydHkoR09iamVjdCogb2Jq
ZWN0LCBndWludCBwcm9wSUQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBhcmFt
U3BlYykKK3sKKyAgICBXZWJLaXROZXR3b3JrU2Vzc2lvbiogc2Vzc2lvbiA9IFdFQktJVF9ORVRX
T1JLX1NFU1NJT04ob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcElEKSB7CisgICAgY2FzZSBQ
Uk9QX0RBVEFfRElSRUNUT1JZOgorICAgICAgICBzZXNzaW9uLT5wcml2LT5kYXRhRGlyZWN0b3J5
LnJlc2V0KGdfdmFsdWVfZHVwX3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfQ0FDSEVfRElSRUNUT1JZOgorICAgICAgICBzZXNzaW9uLT5wcml2LT5jYWNoZURp
cmVjdG9yeS5yZXNldChnX3ZhbHVlX2R1cF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0lTX0VQSEVNRVJBTDoKKyAgICAgICAgaWYgKGdfdmFsdWVfZ2V0X2Jv
b2xlYW4odmFsdWUpKQorICAgICAgICAgICAgc2Vzc2lvbi0+cHJpdi0+d2Vic2l0ZURhdGFNYW5h
Z2VyID0gYWRvcHRHUmVmKFdFQktJVF9XRUJTSVRFX0RBVEFfTUFOQUdFUihnX29iamVjdF9uZXco
V0VCS0lUX1RZUEVfV0VCU0lURV9EQVRBX01BTkFHRVIsICJpcy1lcGhlbWVyYWwiLCBUUlVFLCBu
dWxscHRyKSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVD
VF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSUQsIHBhcmFtU3BlYyk7Cisg
ICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXROZXR3b3JrU2Vzc2lvbkNvbnN0cnVjdGVkKEdP
YmplY3QqIG9iamVjdCkKK3sKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfbmV0d29ya19zZXNz
aW9uX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkKG9iamVjdCk7CisKKyAgICBXZWJLaXROZXR3
b3JrU2Vzc2lvblByaXZhdGUqIHByaXYgPSBXRUJLSVRfTkVUV09SS19TRVNTSU9OKG9iamVjdCkt
PnByaXY7CisgICAgaWYgKCFwcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIpCisgICAgICAgIHByaXYt
PndlYnNpdGVEYXRhTWFuYWdlciA9IGFkb3B0R1JlZih3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJD
cmVhdGUoV1RGTW92ZShwcml2LT5kYXRhRGlyZWN0b3J5KSwgV1RGTW92ZShwcml2LT5jYWNoZURp
cmVjdG9yeSkpKTsKKworICAgIHByaXYtPnRsc0Vycm9yc1BvbGljeSA9IFdFQktJVF9UTFNfRVJS
T1JTX1BPTElDWV9GQUlMOworICAgIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9y
ZShwcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkpLnNldElnbm9yZVRMU0Vycm9ycyhmYWxz
ZSk7CisKKyAgICAvLyBFbmFibGUgZmF2aWNvbnMgYnkgZGVmYXVsdC4KKyAgICB3ZWJraXRfd2Vi
c2l0ZV9kYXRhX21hbmFnZXJfc2V0X2Zhdmljb25zX2VuYWJsZWQocHJpdi0+d2Vic2l0ZURhdGFN
YW5hZ2VyLmdldCgpLCBUUlVFKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X25ldHdvcmtfc2Vz
c2lvbl9jbGFzc19pbml0KFdlYktpdE5ldHdvcmtTZXNzaW9uQ2xhc3MqIHNlc3Npb25DbGFzcykK
K3sKKyAgICB3ZWJraXRJbml0aWFsaXplKCk7CisKKyAgICBHT2JqZWN0Q2xhc3MqIGdPYmplY3RD
bGFzcyA9IEdfT0JKRUNUX0NMQVNTKHNlc3Npb25DbGFzcyk7CisgICAgZ09iamVjdENsYXNzLT5n
ZXRfcHJvcGVydHkgPSB3ZWJraXROZXR3b3JrU2Vzc2lvbkdldFByb3BlcnR5OworICAgIGdPYmpl
Y3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0TmV0d29ya1Nlc3Npb25TZXRQcm9wZXJ0eTsK
KyAgICBnT2JqZWN0Q2xhc3MtPmNvbnN0cnVjdGVkID0gd2Via2l0TmV0d29ya1Nlc3Npb25Db25z
dHJ1Y3RlZDsKKworICAgIC8qKgorICAgICAqIFdlYktpdE5ldHdvcmtTZXNzaW9uOmRhdGEtZGly
ZWN0b3J5OgorICAgICAqCisgICAgICogVGhlIGJhc2UgZGF0YSBkaXJlY3RvcnkgdXNlZCB0byBj
cmVhdGUgdGhlICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuIElmICVOVUxMLCBhIGRlZmF1bHQg
bG9jYXRpb24gd2lsbCBiZSB1c2VkLgorICAgICAqCisgICAgICogU2luY2U6IDIuNDAKKyAgICAg
Ki8KKyAgICBzT2JqUHJvcGVydGllc1tQUk9QX0RBVEFfRElSRUNUT1JZXSA9CisgICAgICAgIGdf
cGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiZGF0YS1kaXJlY3RvcnkiLAorICAgICAg
ICAgICAgbnVsbHB0ciwgbnVsbHB0ciwKKyAgICAgICAgICAgIG51bGxwdHIsCisgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxHUGFyYW1GbGFncz4oV0VCS0lUX1BBUkFNX1dSSVRBQkxFIHwgR19QQVJB
TV9DT05TVFJVQ1RfT05MWSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0TmV0d29ya1Nlc3Np
b246Y2FjaGUtZGlyZWN0b3J5OgorICAgICAqCisgICAgICogVGhlIGJhc2UgY2FjaGVzIGRpcmVj
dG9yeSB1c2VkIHRvIGNyZWF0ZSB0aGUgI1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci4gSWYgJU5V
TEwsIGEgZGVmYXVsdCBsb2NhdGlvbiB3aWxsIGJlIHVzZWQuCisgICAgICoKKyAgICAgKiBTaW5j
ZTogMi40MAorICAgICAqLworICAgIHNPYmpQcm9wZXJ0aWVzW1BST1BfQ0FDSEVfRElSRUNUT1JZ
XSA9CisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiY2FjaGUtZGly
ZWN0b3J5IiwKKyAgICAgICAgICAgIG51bGxwdHIsIG51bGxwdHIsCisgICAgICAgICAgICBudWxs
cHRyLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KFdFQktJVF9QQVJBTV9X
UklUQUJMRSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKTsKKworICAgIC8qKgorICAgICAqIFdl
YktpdE5ldHdvcmtTZXNzaW9uOmlzLWVwaGVtZXJhbDoKKyAgICAgKgorICAgICAqIFdoZXRoZXIg
dG8gY3JlYXRlIGFuIGVwaGVybWVyYWwgI1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlciBmb3IgdGhl
IHNlc3Npb24uCisgICAgICoKKyAgICAgKiBTaW5jZTogMi40MAorICAgICAqLworICAgIHNPYmpQ
cm9wZXJ0aWVzW1BST1BfSVNfRVBIRU1FUkFMXSA9CisgICAgICAgIGdfcGFyYW1fc3BlY19ib29s
ZWFuKAorICAgICAgICAgICAgImlzLWVwaGVtZXJhbCIsCisgICAgICAgICAgICBudWxscHRyLCBu
dWxscHRyLAorICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxHUGFy
YW1GbGFncz4oV0VCS0lUX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydGllcyhnT2JqZWN0Q2xhc3Ms
IE5fUFJPUEVSVElFUywgc09ialByb3BlcnRpZXMpOworCisgICAgLyoqCisgICAgICogV2ViS2l0
TmV0d29ya1Nlc3Npb246OmRvd25sb2FkLXN0YXJ0ZWQ6CisgICAgICogQHNlc3Npb246IHRoZSAj
V2ViS2l0TmV0d29ya1Nlc3Npb24KKyAgICAgKiBAZG93bmxvYWQ6IHRoZSAjV2ViS2l0RG93bmxv
YWQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZXZlbnQKKyAgICAgKgorICAgICAqIFRoaXMgc2lnbmFs
IGlzIGVtaXR0ZWQgd2hlbiBhIG5ldyBkb3dubG9hZCByZXF1ZXN0IGlzIG1hZGUuCisgICAgICoK
KyAgICAgKiBTaW5jZTogMi40MAorICAgICAqLworICAgIHNpZ25hbHNbRE9XTkxPQURfU1RBUlRF
RF0gPQorICAgICAgICBnX3NpZ25hbF9uZXcoImRvd25sb2FkLXN0YXJ0ZWQiLAorICAgICAgICAg
ICAgR19UWVBFX0ZST01fQ0xBU1MoZ09iamVjdENsYXNzKSwKKyAgICAgICAgICAgIEdfU0lHTkFM
X1JVTl9MQVNULAorICAgICAgICAgICAgMCwgbnVsbHB0ciwgbnVsbHB0ciwKKyAgICAgICAgICAg
IG51bGxwdHIsCisgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwKKyAgICAgICAgICAgIFdFQktJ
VF9UWVBFX0RPV05MT0FEKTsKK30KKwordm9pZCB3ZWJraXROZXR3b3JrU2Vzc2lvbkRvd25sb2Fk
U3RhcnRlZChXZWJLaXROZXR3b3JrU2Vzc2lvbiogc2Vzc2lvbiwgV2ViS2l0RG93bmxvYWQqIGRv
d25sb2FkKQoreworICAgIGdfc2lnbmFsX2VtaXQoc2Vzc2lvbiwgc2lnbmFsc1tET1dOTE9BRF9T
VEFSVEVEXSwgMCwgZG93bmxvYWQpOworfQorCitzdGF0aWMgZ3BvaW50ZXIgY3JlYXRlRGVmYXVs
dE5ldHdvcmtTZXNzaW9uKGdwb2ludGVyKQoreworICAgIHN0YXRpYyBHUmVmUHRyPFdlYktpdE5l
dHdvcmtTZXNzaW9uPiBzZXNzaW9uID0gYWRvcHRHUmVmKHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25f
bmV3KG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICByZXR1cm4gc2Vzc2lvbi5nZXQoKTsKK30KKwor
LyoqCisgKiB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF9kZWZhdWx0OgorICoKKyAqIEdldCB0
aGUgZGVmYXVsdCBuZXR3b3JrIHNlc3Npb24uCisgKiBUaGUgZGVmYXVsdCBuZXR3b3JrIHNlc3Np
b24gaXMgY3JlYXRlZCB1c2luZyB3ZWJraXRfbmV0d29ya19zZXNzaW9uX25ldygpIGFuZCBwYXNz
aW5nCisgKiAlTlVMTCBhcyBkYXRhIGFuZCBjYWNoZSBkaXJlY3Rvcmllcy4KKyAqCisgKiBSZXR1
cm5zOiAodHJhbnNmZXIgbm9uZSk6IGEgI1dlYktpdE5ldHdvcmtTZXNzaW9uCisgKgorICogU2lu
Y2U6IDIuNDAKKyAqLworV2ViS2l0TmV0d29ya1Nlc3Npb24qIHdlYmtpdF9uZXR3b3JrX3Nlc3Np
b25fZ2V0X2RlZmF1bHQoKQoreworICAgIHN0YXRpYyBHT25jZSBvbmNlSW5pdCA9IEdfT05DRV9J
TklUOworICAgIHJldHVybiBXRUJLSVRfTkVUV09SS19TRVNTSU9OKGdfb25jZSgmb25jZUluaXQs
IGNyZWF0ZURlZmF1bHROZXR3b3JrU2Vzc2lvbiwgbnVsbHB0cikpOworfQorCisvKioKKyAqIHdl
YmtpdF9uZXR3b3JrX3Nlc3Npb25fbmV3OgorICogQGRhdGFfZGlyZWN0b3J5OiAobnVsbGFibGUp
OiBhIGJhc2UgZGlyZWN0b3J5IGZvciBkYXRhLCBvciAlTlVMTAorICogQGNhY2hlX2RpcmVjdHJv
cnk6IChudWxsYWJsZSk6IGEgYmFzZSBkaXJlZmN0b3J5IGZvciBjYWNoZXMsIG9yICVOVUxMCisg
KgorICogQ3JlYXRlcyBhIG5ldyAjV2ViS2l0TmV0d29ya1Nlc3Npb24gd2l0aCBhIHBlcnNpc3Rl
bnQgI1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci4KKyAqCisgKiBJdCBtdXN0IGJlIHBhc3NlZCBh
cyBjb25zdHJ1Y3Rpb24gcGFyYW1ldGVyIG9mIGEgI1dlYktpdFdlYlZpZXcuCisgKgorICogUmV0
dXJuczogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbmV3bHkgY3JlYXRlZCAjV2ViS2l0TmV0d29ya1Nl
c3Npb24KKyAqCisgKiBTaW5jZTogMi40MAorICovCitXZWJLaXROZXR3b3JrU2Vzc2lvbiogd2Vi
a2l0X25ldHdvcmtfc2Vzc2lvbl9uZXcoY29uc3QgY2hhciogZGF0YURpcmVjdG9yeSwgY29uc3Qg
Y2hhciogY2FjaGVEaXJlY3RvcnkpCit7CisgICAgcmV0dXJuIFdFQktJVF9ORVRXT1JLX1NFU1NJ
T04oZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX05FVFdPUktfU0VTU0lPTiwgImRhdGEtZGlyZWN0
b3J5IiwgZGF0YURpcmVjdG9yeSwgImNhY2hlLWRpcmVjdG9yeSIsIGNhY2hlRGlyZWN0b3J5LCBu
dWxscHRyKSk7Cit9CisKKy8qKgorICogd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9uZXdfZXBoZW1l
cmFsOgorICoKKyAqIENyZWF0ZXMgYSBuZXcgI1dlYktpdE5ldHdvcmtTZXNzaW9uIHdpdGggYW4g
ZXBoZW1lcmFsICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuCisgKgorICoKKyAqIFJldHVybnM6
ICh0cmFuc2ZlciBmdWxsKTogYSBuZXcgZXBoZW1lcmFsICNXZWJLaXROZXR3b3JrU2Vzc2lvbi4K
KyAqCisgKiBTaW5jZTogMi40MAorICovCitXZWJLaXROZXR3b3JrU2Vzc2lvbiogd2Via2l0X25l
dHdvcmtfc2Vzc2lvbl9uZXdfZXBoZW1lcmFsKCkKK3sKKyAgICByZXR1cm4gV0VCS0lUX05FVFdP
UktfU0VTU0lPTihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfTkVUV09SS19TRVNTSU9OLCAiaXMt
ZXBoZW1lcmFsIiwgVFJVRSwgbnVsbHB0cikpOworfQorCisvKioKKyAqIHdlYmtpdF9uZXR3b3Jr
X3Nlc3Npb25faXNfZXBoZW1lcmFsOgorICogQHNlc3Npb246IGEgI1dlYktpdE5ldHdvcmtTZXNz
aW9uCisgKgorICogR2V0IHdoZXRoZXIgQHNlc3Npb24gaXMgZXBoZW1lcmFsLgorICogQSAjV2Vi
S2l0TmV0d29ya1Nlc3Npb24gaXMgZXBoZW1lcmFsIHdoZW4gaXRzICNXZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXIgaXMgZXBoZW1lcmFsLgorICogU2VlICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXI6
aXMtZXBoZW1lcmFsIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYg
QHNlc3Npb24gaXMgcGVobWVyYWwsIG9yICVGQUxTRSBvdGhlcndpc2UKKyAqCisgKiBTaW5jZTog
Mi40MAorICovCitnYm9vbGVhbiB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2lzX2VwaGVtZXJhbChX
ZWJLaXROZXR3b3JrU2Vzc2lvbiogc2Vzc2lvbikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfSVNfTkVUV09SS19TRVNTSU9OKHNlc3Npb24pLCBGQUxTRSk7CisKKyAgICByZXR1
cm4gd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2lzX2VwaGVtZXJhbChzZXNzaW9uLT5wcml2
LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkpOworfQorCisvKioKKyAqIHdlYmtpdF9uZXR3b3Jr
X3Nlc3Npb25fZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyOgorICogQHNlc3Npb246IGEgI1dlYktp
dE5ldHdvcmtTZXNzaW9uCisgKgorICogR2V0IHRoZSAjV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2Vy
IG9mIEBzZXNzaW9uLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogYSAjV2ViS2l0
V2Vic2l0ZURhdGFNYW5hZ2VyCisgKgorICogU2luY2U6IDIuNDAKKyAqLworV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyKiB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF93ZWJzaXRlX2RhdGFfbWFu
YWdlcihXZWJLaXROZXR3b3JrU2Vzc2lvbiogc2Vzc2lvbikKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfSVNfTkVUV09SS19TRVNTSU9OKHNlc3Npb24pLCBudWxscHRyKTsKKwor
ICAgIHJldHVybiBzZXNzaW9uLT5wcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCk7Cit9CisK
Ky8qKgorICogd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfY29va2llX21hbmFnZXI6CisgKiBA
c2Vzc2lvbjogYSAjV2ViS2l0TmV0d29ya1Nlc3Npb24KKyAqCisgKiBHZXQgdGhlICNXZWJLaXRD
b29raWVNYW5hZ2VyIG9mIEBzZXNzaW9uLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25l
KTogYSAjV2ViS2l0Q29va2llTWFuYWdlcgorICoKKyAqIFNpbmNlOiAyLjQwCisgKi8KK1dlYktp
dENvb2tpZU1hbmFnZXIqIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X2Nvb2tpZV9tYW5hZ2Vy
KFdlYktpdE5ldHdvcmtTZXNzaW9uKiBzZXNzaW9uKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9JU19ORVRXT1JLX1NFU1NJT04oc2Vzc2lvbiksIG51bGxwdHIpOworCisgICAg
aWYgKCFzZXNzaW9uLT5wcml2LT5jb29raWVNYW5hZ2VyKQorICAgICAgICBzZXNzaW9uLT5wcml2
LT5jb29raWVNYW5hZ2VyID0gYWRvcHRHUmVmKHdlYmtpdENvb2tpZU1hbmFnZXJDcmVhdGUoc2Vz
c2lvbi0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKSk7CisKKyAgICByZXR1cm4gc2Vz
c2lvbi0+cHJpdi0+Y29va2llTWFuYWdlci5nZXQoKTsKK30KKworLyoqCisgKiB3ZWJraXRfbmV0
d29ya19zZXNzaW9uX3NldF9pdHBfZW5hYmxlZDoKKyAqIEBzZXNzaW9uOiBhICNXZWJLaXROZXR3
b3JrU2Vzc2lvbgorICogQGVuYWJsZWQ6IHZhbHVlIHRvIHNldAorICoKKyAqIEVuYWJsZSBvciBk
aXNhYmxlIEludGVsbGlnZW50IFRyYWNraW5nIFByZXZlbnRpb24gKElUUCkuCisgKgorICogV2hl
biBJVFAgaXMgZW5hYmxlZCByZXNvdXJjZSBsb2FkIHN0YXRpc3RpY3MKKyAqIGFyZSBjb2xsZWN0
ZWQgYW5kIHVzZWQgdG8gZGVjaWRlIHdoZXRoZXIgdG8gYWxsb3cgb3IgYmxvY2sgdGhpcmQtcGFy
dHkgY29va2llcyBhbmQgcHJldmVudCB1c2VyIHRyYWNraW5nLgorICogTm90ZSB0aGF0IHdoaWxl
IElUUCBpcyBlbmFibGVkIHRoZSBhY2NlcHQgcG9saWN5ICVXRUJLSVRfQ09PS0lFX1BPTElDWV9B
Q0NFUFRfTk9fVEhJUkRfUEFSVFkgaXMgaWdub3JlZCBhbmQKKyAqICVXRUJLSVRfQ09PS0lFX1BP
TElDWV9BQ0NFUFRfQUxXQVlTIGlzIHVzZWQgaW5zdGVhZC4gU2VlIGFsc28gd2Via2l0X2Nvb2tp
ZV9zZXNzaW9uX3NldF9hY2NlcHRfcG9saWN5KCkuCisgKgorICogU2luY2U6IDIuNDAKKyAqLwor
dm9pZCB3ZWJraXRfbmV0d29ya19zZXNzaW9uX3NldF9pdHBfZW5hYmxlZChXZWJLaXROZXR3b3Jr
U2Vzc2lvbiogc2Vzc2lvbiwgZ2Jvb2xlYW4gZW5hYmxlZCkKK3sKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9JU19ORVRXT1JLX1NFU1NJT04oc2Vzc2lvbikpOworCisgICAgYXV0byYgd2Vi
c2l0ZURhdGFTdG9yZSA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShzZXNz
aW9uLT5wcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkpOworICAgIHdlYnNpdGVEYXRhU3Rv
cmUuc2V0VHJhY2tpbmdQcmV2ZW50aW9uRW5hYmxlZChlbmFibGVkKTsKK30KKworLyoqCisgKiB3
ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF9pdHBfZW5hYmxlZDoKKyAqIEBzZXNzaW9uOiBhICNX
ZWJLaXROZXR3b3JrU2Vzc2lvbgorICoKKyAqIEdldCB3aGV0aGVyIEludGVsbGlnZW50IFRyYWNr
aW5nIFByZXZlbnRpb24gKElUUCkgaXMgZW5hYmxlZCBvciBub3QuCisgKgorICogUmV0dXJuczog
JVRSVUUgaWYgSVRQIGlzIGVuYWJsZWQsIG9yICVGQUxTRSBvdGhlcndpc2UuCisgKgorICogU2lu
Y2U6IDIuNDAKKyAqLworZ2Jvb2xlYW4gd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfaXRwX2Vu
YWJsZWQoV2ViS2l0TmV0d29ya1Nlc3Npb24qIHNlc3Npb24pCit7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0lTX05FVFdPUktfU0VTU0lPTihzZXNzaW9uKSwgRkFMU0UpOworCisg
ICAgYXV0byYgd2Vic2l0ZURhdGFTdG9yZSA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERh
dGFTdG9yZShzZXNzaW9uLT5wcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkpOworICAgIHJl
dHVybiB3ZWJzaXRlRGF0YVN0b3JlLnRyYWNraW5nUHJldmVudGlvbkVuYWJsZWQoKTsKK30KKwor
LyoqCisgKiB3ZWJraXRfbmV0d29ya19zZXNzaW9uX3NldF9wZXJzaXN0ZW50X2NyZWRlbnRpYWxf
c3RvcmFnZV9lbmFibGVkOgorICogQHNlc3Npb246IGEgI1dlYktpdE5ldHdvcmtTZXNzaW9uCisg
KiBAZW5hYmxlZDogdmFsdWUgdG8gc2V0CisgKgorICogRW5hYmxlIG9yIGRpc2FibGUgcGVyc2lz
dGVudCBjcmVkZW50aWFsIHN0b3JhZ2UuCisgKgorICogV2hlbiBlbmFibGVkLCB3aGljaCBpcyB0
aGUgZGVmYXVsdCBmb3IKKyAqIG5vbi1lcGhlbWVyYWwgc2Vzc2lvbnMsIHRoZSBuZXR3b3JrIHBy
b2Nlc3Mgd2lsbCB0cnkgdG8gcmVhZCBhbmQgd3JpdGUgSFRUUCBhdXRoZW50aWFjYXRpb24KKyAq
IGNyZWRlbnRpYWxzIGZyb20gcGVyc2lzdGVudCBzdG9yYWdlLgorICoKKyAqIFNpbmNlOiAyLjQw
CisgKi8KK3ZvaWQgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfcGVyc2lzdGVudF9jcmVkZW50
aWFsX3N0b3JhZ2VfZW5hYmxlZChXZWJLaXROZXR3b3JrU2Vzc2lvbiogc2Vzc2lvbiwgZ2Jvb2xl
YW4gZW5hYmxlZCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19ORVRXT1JLX1NF
U1NJT04oc2Vzc2lvbikpOworCisgICAgYXV0byYgd2Vic2l0ZURhdGFTdG9yZSA9IHdlYmtpdFdl
YnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShzZXNzaW9uLT5wcml2LT53ZWJzaXRlRGF0YU1h
bmFnZXIuZ2V0KCkpOworICAgIHdlYnNpdGVEYXRhU3RvcmUuc2V0UGVyc2lzdGVudENyZWRlbnRp
YWxTdG9yYWdlRW5hYmxlZChlbmFibGVkKTsKK30KKworLyoqCisgKiB3ZWJraXRfbmV0d29ya19z
ZXNzaW9uX2dldF9wZXJzaXN0ZW50X2NyZWRlbnRpYWxfc3RvcmFnZV9lbmFibGVkOgorICogQHNl
c3Npb246IGEgI1dlYktpdE5ldHdvcmtTZXNzaW9uCisgKgorICogR2V0IHdoZXRoZXIgcGVyc2lz
dGVudCBjcmVkZW50aWFsIHN0b3JhZ2UgaXMgZW5hYmxlZCBvciBub3QuCisgKgorICogU2VlIGFs
c28gd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfcGVyc2lzdGVudF9jcmVkZW50aWFsX3N0b3Jh
Z2VfZW5hYmxlZCgpLgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHBlcnNpc3RlbnQgY3JlZGVu
dGlhbCBzdG9yYWdlIGlzIGVuYWJsZWQsIG9yICVGQUxTRSBvdGhlcndpc2UuCisgKgorICogU2lu
Y2U6IDIuNDAKKyAqLworZ2Jvb2xlYW4gd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfcGVyc2lz
dGVudF9jcmVkZW50aWFsX3N0b3JhZ2VfZW5hYmxlZChXZWJLaXROZXR3b3JrU2Vzc2lvbiogc2Vz
c2lvbikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfTkVUV09SS19TRVNT
SU9OKHNlc3Npb24pLCBGQUxTRSk7CisKKyAgICBhdXRvJiB3ZWJzaXRlRGF0YVN0b3JlID0gd2Vi
a2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKHNlc3Npb24tPnByaXYtPndlYnNpdGVE
YXRhTWFuYWdlci5nZXQoKSk7CisgICAgcmV0dXJuIHdlYnNpdGVEYXRhU3RvcmUucGVyc2lzdGVu
dENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCgpOworfQorCisvKioKKyAqIHdlYmtpdF9uZXR3b3Jr
X3Nlc3Npb25fc2V0X3Rsc19lcnJvcnNfcG9saWN5OgorICogQHNlc3Npb246IGEgI1dlYktpdE5l
dHdvcmtTZXNzaW9uCisgKiBAcG9saWN5OiBhICNXZWJLaXRUTFNFcnJvcnNQb2xpY3kKKyAqCisg
KiBTZXQgdGhlIFRMUyBlcnJvcnMgcG9saWN5IG9mIEBzZXNzaW9uIGFzIEBwb2xpY3kuCisgKgor
ICogU2luY2U6IDIuNDAKKyAqLwordm9pZCB3ZWJraXRfbmV0d29ya19zZXNzaW9uX3NldF90bHNf
ZXJyb3JzX3BvbGljeShXZWJLaXROZXR3b3JrU2Vzc2lvbiogc2Vzc2lvbiwgV2ViS2l0VExTRXJy
b3JzUG9saWN5IHBvbGljeSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19ORVRX
T1JLX1NFU1NJT04oc2Vzc2lvbikpOworCisgICAgaWYgKHNlc3Npb24tPnByaXYtPnRsc0Vycm9y
c1BvbGljeSA9PSBwb2xpY3kpCisgICAgICAgIHJldHVybjsKKworICAgIHNlc3Npb24tPnByaXYt
PnRsc0Vycm9yc1BvbGljeSA9IHBvbGljeTsKKyAgICBhdXRvJiB3ZWJzaXRlRGF0YVN0b3JlID0g
d2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKHNlc3Npb24tPnByaXYtPndlYnNp
dGVEYXRhTWFuYWdlci5nZXQoKSk7CisgICAgd2Vic2l0ZURhdGFTdG9yZS5zZXRJZ25vcmVUTFNF
cnJvcnMocG9saWN5ID09IFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9JR05PUkUpOworfQorCisv
KioKKyAqIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X3Rsc19lcnJvcnNfcG9saWN5OgorICog
QHNlc3Npb246IGEgI1dlYktpdE5ldHdvcmtTZXNzaW9uCisgKgorICogR2V0IHRoZSBUTFMgZXJy
b3JzIHBvbGljeSBvZiBAc2Vzc2lvbi4KKyAqCisgKiBSZXR1cm5zOiBhICNXZWJLaXRUTFNFcnJv
cnNQb2xpY3kKKyAqCisgKiBTaW5jZTogMi40MAorICovCitXZWJLaXRUTFNFcnJvcnNQb2xpY3kg
d2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfdGxzX2Vycm9yc19wb2xpY3koV2ViS2l0TmV0d29y
a1Nlc3Npb24qIHNlc3Npb24pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lT
X05FVFdPUktfU0VTU0lPTihzZXNzaW9uKSwgV0VCS0lUX1RMU19FUlJPUlNfUE9MSUNZX0ZBSUwp
OworCisgICAgcmV0dXJuIHNlc3Npb24tPnByaXYtPnRsc0Vycm9yc1BvbGljeTsKK30KKworLyoq
CisgKiB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2FsbG93X3Rsc19jZXJ0aWZpY2F0ZV9mb3JfaG9z
dDoKKyAqIEBzZXNzaW9uOiBhICNXZWJLaXROZXR3b3JrU2Vzc2lvbgorICogQGNlcnRpZmljYXRl
OiBhICNHVGxzQ2VydGlmaWNhdGUKKyAqIEBob3N0OiB0aGUgaG9zdCBmb3Igd2hpY2ggYSBjZXJ0
aWZpY2F0ZSBpcyB0byBiZSBhbGxvd2VkCisgKgorICogSWdub3JlIGZ1cnRoZXIgVExTIGVycm9y
cyBvbiB0aGUgQGhvc3QgZm9yIHRoZSBjZXJ0aWZpY2F0ZSBwcmVzZW50IGluIEBpbmZvLgorICoK
KyAqIFNpbmNlOiAyLjQwCisgKi8KK3ZvaWQgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9hbGxvd190
bHNfY2VydGlmaWNhdGVfZm9yX2hvc3QoV2ViS2l0TmV0d29ya1Nlc3Npb24qIHNlc3Npb24sIEdU
bHNDZXJ0aWZpY2F0ZSogY2VydGlmaWNhdGUsIGNvbnN0IGNoYXIqIGhvc3QpCit7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfTkVUV09SS19TRVNTSU9OKHNlc3Npb24pKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKEdfSVNfVExTX0NFUlRJRklDQVRFKGNlcnRpZmljYXRlKSk7CisgICAg
Z19yZXR1cm5faWZfZmFpbChob3N0KTsKKworICAgIGF1dG8gY2VydGlmaWNhdGVJbmZvID0gV2Vi
Q29yZTo6Q2VydGlmaWNhdGVJbmZvKGNlcnRpZmljYXRlLCBzdGF0aWNfY2FzdDxHVGxzQ2VydGlm
aWNhdGVGbGFncz4oMCkpOworICAgIGF1dG8mIHdlYnNpdGVEYXRhU3RvcmUgPSB3ZWJraXRXZWJz
aXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUoc2Vzc2lvbi0+cHJpdi0+d2Vic2l0ZURhdGFNYW5h
Z2VyLmdldCgpKTsKKyAgICB3ZWJzaXRlRGF0YVN0b3JlLmFsbG93U3BlY2lmaWNIVFRQU0NlcnRp
ZmljYXRlRm9ySG9zdChjZXJ0aWZpY2F0ZUluZm8sIFN0cmluZzo6ZnJvbVVURjgoaG9zdCkpOwor
fQorCisvKioKKyAqIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fc2V0X3Byb3h5X3NldHRpbmdzOgor
ICogQHNlc3Npb246IGEgI1dlYktpdE5ldHdvcmtTZXNzaW9uCisgKiBAcHJveHlfbW9kZTogYSAj
V2ViS2l0TmV0d29ya1Byb3h5TW9kZQorICogQHByb3h5X3NldHRpbmdzOiAoYWxsb3ctbm9uZSk6
IGEgI1dlYktpdE5ldHdvcmtQcm94eVNldHRpbmdzLCBvciAlTlVMTAorICoKKyAqIFNldCB0aGUg
bmV0d29yayBwcm94eSBzZXR0aW5ncyB0byBiZSB1c2VkIGJ5IGNvbm5lY3Rpb25zIHN0YXJ0ZWQg
aW4gQHNlc3Npb24gc2Vzc2lvbi4KKyAqCisgKiBCeSBkZWZhdWx0ICVXRUJLSVRfTkVUV09SS19Q
Uk9YWV9NT0RFX0RFRkFVTFQgaXMgdXNlZCwgd2hpY2ggbWVhbnMgdGhhdCB0aGUKKyAqIHN5c3Rl
bSBzZXR0aW5ncyB3aWxsIGJlIHVzZWQgKGdfcHJveHlfcmVzb2x2ZXJfZ2V0X2RlZmF1bHQoKSku
CisgKiBJZiB5b3Ugd2FudCB0byBvdmVycmlkZSB0aGUgc3lzdGVtIGRlZmF1bHQgc2V0dGluZ3Ms
IHlvdSBjYW4gZWl0aGVyIHVzZQorICogJVdFQktJVF9ORVRXT1JLX1BST1hZX01PREVfTk9fUFJP
WFkgdG8gbWFrZSBzdXJlIG5vIHByb3hpZXMgYXJlIHVzZWQgYXQgYWxsLAorICogb3IgJVdFQktJ
VF9ORVRXT1JLX1BST1hZX01PREVfQ1VTVE9NIHRvIHByb3ZpZGUgeW91ciBvd24gcHJveHkgc2V0
dGluZ3MuCisgKiBXaGVuIEBwcm94eV9tb2RlIGlzICVXRUJLSVRfTkVUV09SS19QUk9YWV9NT0RF
X0NVU1RPTSBAcHJveHlfc2V0dGluZ3MgbXVzdCBiZQorICogYSB2YWxpZCAjV2ViS2l0TmV0d29y
a1Byb3h5U2V0dGluZ3M7IG90aGVyd2lzZSwgQHByb3h5X3NldHRpbmdzIG11c3QgYmUgJU5VTEwu
CisgKgorICogU2luY2U6IDIuNDAKKyAqLwordm9pZCB3ZWJraXRfbmV0d29ya19zZXNzaW9uX3Nl
dF9wcm94eV9zZXR0aW5ncyhXZWJLaXROZXR3b3JrU2Vzc2lvbiogc2Vzc2lvbiwgV2ViS2l0TmV0
d29ya1Byb3h5TW9kZSBwcm94eU1vZGUsIFdlYktpdE5ldHdvcmtQcm94eVNldHRpbmdzKiBwcm94
eVNldHRpbmdzKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX05FVFdPUktfU0VT
U0lPTihzZXNzaW9uKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCgocHJveHlNb2RlICE9IFdFQktJ
VF9ORVRXT1JLX1BST1hZX01PREVfQ1VTVE9NICYmICFwcm94eVNldHRpbmdzKSB8fCAocHJveHlN
b2RlID09IFdFQktJVF9ORVRXT1JLX1BST1hZX01PREVfQ1VTVE9NICYmIHByb3h5U2V0dGluZ3Mp
KTsKKworICAgIGF1dG8mIHdlYnNpdGVEYXRhU3RvcmUgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFn
ZXJHZXREYXRhU3RvcmUoc2Vzc2lvbi0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKTsK
KyAgICBzd2l0Y2ggKHByb3h5TW9kZSkgeworICAgIGNhc2UgV0VCS0lUX05FVFdPUktfUFJPWFlf
TU9ERV9ERUZBVUxUOgorICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlLnNldE5ldHdvcmtQcm94eVNl
dHRpbmdzKHsgfSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV0VCS0lUX05FVFdPUktfUFJP
WFlfTU9ERV9OT19QUk9YWToKKyAgICAgICAgd2Vic2l0ZURhdGFTdG9yZS5zZXROZXR3b3JrUHJv
eHlTZXR0aW5ncyhXZWJDb3JlOjpTb3VwTmV0d29ya1Byb3h5U2V0dGluZ3MoV2ViQ29yZTo6U291
cE5ldHdvcmtQcm94eVNldHRpbmdzOjpNb2RlOjpOb1Byb3h5KSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgV0VCS0lUX05FVFdPUktfUFJPWFlfTU9ERV9DVVNUT006CisgICAgICAgIGF1dG8g
c2V0dGluZ3MgPSB3ZWJraXROZXR3b3JrUHJveHlTZXR0aW5nc0dldE5ldHdvcmtQcm94eVNldHRp
bmdzKHByb3h5U2V0dGluZ3MpOworICAgICAgICBpZiAoc2V0dGluZ3MuaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICBnX3dhcm5pbmcoIkludmFsaWQgYXR0ZW1wdCB0byBzZXQgY3VzdG9tIG5ldHdv
cmsgcHJveHkgc2V0dGluZ3Mgd2l0aCBhbiBlbXB0eSBXZWJLaXROZXR3b3JrUHJveHlTZXR0aW5n
cy4gVXNlICIKKyAgICAgICAgICAgICAgICAiV0VCS0lUX05FVFdPUktfUFJPWFlfTU9ERV9OT19Q
Uk9YWSB0byBub3QgdXNlIGFueSBwcm94eSBvciBXRUJLSVRfTkVUV09SS19QUk9YWV9NT0RFX0RF
RkFVTFQgdG8gdXNlIHRoZSBkZWZhdWx0IHN5c3RlbSBzZXR0aW5ncyIpOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIHdlYnNpdGVEYXRhU3RvcmUuc2V0TmV0d29ya1Byb3h5U2V0dGluZ3Mo
V1RGTW92ZShzZXR0aW5ncykpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKKy8qKgorICog
d2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfbWVtb3J5X3ByZXNzdXJlX3NldHRpbmdzOgorICog
QHNldHRpbmdzOiBhIFdlYktpdE1lbW9yeVByZXNzdXJlU2V0dGluZ3MuCisgKgorICogU2V0cyBA
c2V0dGluZ3MgYXMgdGhlICNXZWJLaXRNZW1vcnlQcmVzc3VyZVNldHRpbmdzLgorICoKKyAqIFNl
dHMgQHNldHRpbmdzIGFzIHRoZSAjV2ViS2l0TWVtb3J5UHJlc3N1cmVTZXR0aW5ncyB0byBiZSB1
c2VkIGJ5IHRoZSBuZXR3b3JrCisgKiBwcm9jZXNzIGNyZWF0ZWQgYnkgYW55IGluc3RhbmNlIG9m
ICNXZWJLaXROZXR3b3JrU2Vzc2lvbiBhZnRlciB0aGlzIGZ1bmN0aW9uCisgKiBpcyBjYWxsZWQu
CisgKgorICogQmUgc3VyZSB0byBjYWxsIHRoaXMgZnVuY3Rpb24gYmVmb3JlIGNyZWF0aW5nIGFu
eSAjV2ViS2l0TmV0d29ya1Nlc3Npb24uCisgKgorICogVGhlIHBlcmlvZGljIGNoZWNrIGZvciB1
c2VkIG1lbW9yeSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0IG9uIG5ldHdvcmsgcHJvY2Vzc2VzLiBU
aGlzIHdpbGwKKyAqIGJlIGVuYWJsZWQgb25seSBpZiBjdXN0b20gc2V0dGluZ3MgaGF2ZSBiZWVu
IHNldCB1c2luZyB0aGlzIGZ1bmN0aW9uLiBBZnRlciB0aGF0LCBpbiBvcmRlcgorICogdG8gcmVt
b3ZlIHRoZSBjdXN0b20gc2V0dGluZ3MgYW5kIGRpc2FibGUgdGhlIHBlcmlvZGljIGNoZWNrLCB0
aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkCisgKiBwYXNzaW5nICVOVUxMIGFzIHRoZSB2YWx1
ZSBvZiBAc2V0dGluZ3MuCisgKgorICogU2luY2U6IDIuNDAKKyAqLwordm9pZCB3ZWJraXRfbmV0
d29ya19zZXNzaW9uX3NldF9tZW1vcnlfcHJlc3N1cmVfc2V0dGluZ3MoV2ViS2l0TWVtb3J5UHJl
c3N1cmVTZXR0aW5ncyogc2V0dGluZ3MpCit7CisgICAgc3RkOjpvcHRpb25hbDxNZW1vcnlQcmVz
c3VyZUhhbmRsZXI6OkNvbmZpZ3VyYXRpb24+IGNvbmZpZyA9IHNldHRpbmdzID8gc3RkOjptYWtl
X29wdGlvbmFsKHdlYmtpdE1lbW9yeVByZXNzdXJlU2V0dGluZ3NHZXRNZW1vcnlQcmVzc3VyZUhh
bmRsZXJDb25maWd1cmF0aW9uKHNldHRpbmdzKSkgOiBzdGQ6Om51bGxvcHQ7CisgICAgV2ViUHJv
Y2Vzc1Bvb2w6OnNldE5ldHdvcmtQcm9jZXNzTWVtb3J5UHJlc3N1cmVIYW5kbGVyQ29uZmlndXJh
dGlvbihjb25maWcpOworfQorCisvKioKKyAqIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X2l0
cF9zdW1tYXJ5OgorICogQHNlc3Npb246IGEgI1dlYktpdE5ldHdvcmtTZXNzaW9uCisgKiBAY2Fu
Y2VsbGFibGU6IChhbGxvdy1ub25lKTogYSAjR0NhbmNlbGxhYmxlIG9yICVOVUxMIHRvIGlnbm9y
ZQorICogQGNhbGxiYWNrOiAoc2NvcGUgYXN5bmMpOiBhICNHQXN5bmNSZWFkeUNhbGxiYWNrIHRv
IGNhbGwgd2hlbiB0aGUgcmVxdWVzdCBpcyBzYXRpc2ZpZWQKKyAqIEB1c2VyX2RhdGE6IChjbG9z
dXJlKTogdGhlIGRhdGEgdG8gcGFzcyB0byBjYWxsYmFjayBmdW5jdGlvbgorICoKKyAqIEFzeW5j
aHJvbm91c2x5IGdldCB0aGUgbGlzdCBvZiAjV2ViS2l0SVRQVGhpcmRQYXJ0eSBzZWVuIGZvciBA
c2Vzc2lvbi4KKyAqCisgKiBFdmVyeSAjV2ViS2l0SVRQVGhpcmRQYXJ0eQorICogY29udGFpbnMg
dGhlIGxpc3Qgb2YgI1dlYktpdElUUEZpcnN0UGFydHkgdW5kZXIgd2hpY2ggaXQgaGFzIGJlZW4g
c2Vlbi4KKyAqCisgKiBXaGVuIHRoZSBvcGVyYXRpb24gaXMgZmluaXNoZWQsIEBjYWxsYmFjayB3
aWxsIGJlIGNhbGxlZC4gWW91IGNhbiB0aGVuIGNhbGwKKyAqIHdlYmtpdF9uZXR3b3JrX3Nlc3Np
b25fZ2V0X2l0cF9zdW1tYXJ5X2ZpbmlzaCgpIHRvIGdldCB0aGUgcmVzdWx0IG9mIHRoZSBvcGVy
YXRpb24uCisgKgorICogU2luY2U6IDIuNDAKKyAqLwordm9pZCB3ZWJraXRfbmV0d29ya19zZXNz
aW9uX2dldF9pdHBfc3VtbWFyeShXZWJLaXROZXR3b3JrU2Vzc2lvbiogc2Vzc2lvbiwgR0NhbmNl
bGxhYmxlKiBjYW5jZWxsYWJsZSwgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50
ZXIgdXNlckRhdGEpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfTkVUV09SS19T
RVNTSU9OKHNlc3Npb24pKTsKKworICAgIGF1dG8mIHdlYnNpdGVEYXRhU3RvcmUgPSB3ZWJraXRX
ZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUoc2Vzc2lvbi0+cHJpdi0+d2Vic2l0ZURhdGFN
YW5hZ2VyLmdldCgpKTsKKyAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFz
a19uZXcoc2Vzc2lvbiwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOworICAgIHdl
YnNpdGVEYXRhU3RvcmUuZ2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0RhdGFTdW1tYXJ5KFt0YXNr
ID0gV1RGTW92ZSh0YXNrKV0oVmVjdG9yPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6
VGhpcmRQYXJ0eURhdGE+JiYgdGhpcmRQYXJ0eUxpc3QpIHsKKyAgICAgICAgR0xpc3QqIHJlc3Vs
dCA9IG51bGxwdHI7CisgICAgICAgIHdoaWxlICghdGhpcmRQYXJ0eUxpc3QuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgcmVzdWx0ID0gZ19saXN0X3ByZXBlbmQocmVzdWx0LCB3ZWJraXRJVFBUaGly
ZFBhcnR5Q3JlYXRlKHRoaXJkUGFydHlMaXN0LnRha2VMYXN0KCkpKTsKKyAgICAgICAgZ190YXNr
X3JldHVybl9wb2ludGVyKHRhc2suZ2V0KCksIHJlc3VsdCwgW10oZ3BvaW50ZXIgZGF0YSkgewor
ICAgICAgICAgICAgZ19saXN0X2ZyZWVfZnVsbChzdGF0aWNfY2FzdDxHTGlzdCo+KGRhdGEpLCBy
ZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5Pih3ZWJraXRfaXRwX3RoaXJkX3BhcnR5X3Vu
cmVmKSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCisvKioKKyAqIHdlYmtpdF9uZXR3b3Jr
X3Nlc3Npb25fZ2V0X2l0cF9zdW1tYXJ5X2ZpbmlzaDoKKyAqIEBzZXNzaW9uOiBhICNXZWJLaXRO
ZXR3b3JrU2Vzc2lvbgorICogQHJlc3VsdDogYSAjR0FzeW5jUmVzdWx0CisgKiBAZXJyb3I6IHJl
dHVybiBsb2NhdGlvbiBmb3IgZXJyb3Igb3IgJU5VTEwgdG8gaWdub3JlCisgKgorICogRmluaXNo
IGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24gc3RhcnRlZCB3aXRoIHdlYmtpdF9uZXR3b3JrX3Nl
c3Npb25fZ2V0X2l0cF9zdW1tYXJ5KCkuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwp
IChlbGVtZW50LXR5cGUgV2ViS2l0SVRQVGhpcmRQYXJ0eSk6IGEgI0dMaXN0IG9mICNXZWJLaXRJ
VFBUaGlyZFBhcnR5LgorICogICAgWW91IG11c3QgZnJlZSB0aGUgI0dMaXN0IHdpdGggZ19saXN0
X2ZyZWUoKSBhbmQgdW5yZWYgdGhlICNXZWJLaXRJVFBUaGlyZFBhcnR5PCEtLSAtLT5zIHdpdGgK
KyAqICAgIHdlYmtpdF9pdHBfdGhpcmRfcGFydHlfdW5yZWYoKSB3aGVuIHlvdSdyZSBkb25lIHdp
dGggdGhlbS4KKyAqCisgKiBTaW5jZTogMi40MAorICovCitHTGlzdCogd2Via2l0X25ldHdvcmtf
c2Vzc2lvbl9nZXRfaXRwX3N1bW1hcnlfZmluaXNoKFdlYktpdE5ldHdvcmtTZXNzaW9uKiBzZXNz
aW9uLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX05FVFdPUktfU0VTU0lPTihzZXNzaW9uKSwgbnVsbHB0
cik7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZ190YXNrX2lzX3ZhbGlkKHJlc3VsdCwgc2Vz
c2lvbiksIG51bGxwdHIpOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdMaXN0Kj4oZ190YXNr
X3Byb3BhZ2F0ZV9wb2ludGVyKEdfVEFTSyhyZXN1bHQpLCBlcnJvcikpOworfQorCisvKioKKyAq
IHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fcHJlZmV0Y2hfZG5zOgorICogQHNlc3Npb246IGEgI1dl
YktpdE5ldHdvcmtTZXNzaW9uCisgKiBAaG9zdG5hbWU6IGEgaG9zdG5hbWUgdG8gYmUgcmVzb2x2
ZWQKKyAqCisgKiBSZXNvbHZlIHRoZSBkb21haW4gbmFtZSBvZiB0aGUgZ2l2ZW4gQGhvc3RuYW1l
IGluIGFkdmFuY2UsIHNvIHRoYXQgaWYgYSBVUkkKKyAqIG9mIEBob3N0bmFtZSBpcyByZXF1ZXN0
ZWQgdGhlIGxvYWQgd2lsbCBiZSBwZXJmb3JtZWQgbW9yZSBxdWlja2x5LgorICoKKyAqIFNpbmNl
OiAyLjQwCisgKi8KK3ZvaWQgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9wcmVmZXRjaF9kbnMoV2Vi
S2l0TmV0d29ya1Nlc3Npb24qIHNlc3Npb24sIGNvbnN0IGNoYXIqIGhvc3RuYW1lKQoreworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX05FVFdPUktfU0VTU0lPTihzZXNzaW9uKSk7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChob3N0bmFtZSk7CisKKyAgICBpZiAoc2Vzc2lvbi0+cHJpdi0+
ZG5zUHJlZmV0Y2hlZEhvc3RzLmFkZChTdHJpbmc6OmZyb21VVEY4KGhvc3RuYW1lKSkuaXNOZXdF
bnRyeSkgeworICAgICAgICBhdXRvJiB3ZWJzaXRlRGF0YVN0b3JlID0gd2Via2l0V2Vic2l0ZURh
dGFNYW5hZ2VyR2V0RGF0YVN0b3JlKHNlc3Npb24tPnByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5n
ZXQoKSk7CisgICAgICAgIHdlYnNpdGVEYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJlZmV0Y2hETlMoU3RyaW5nOjpmcm9tVVRGOChob3N0
bmFtZSkpLCAwKTsKKyAgICB9CisgICAgc2Vzc2lvbi0+cHJpdi0+ZG5zUHJlZmV0Y2hIeXN0ZXJl
cmlzLmltcHVsc2UoKTsKK30KKworLyoqCisgKiB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2Rvd25s
b2FkX3VyaToKKyAqIEBzZXNzaW9uOiBhICNXZWJLaXROZXR3b3JrU2Vzc2lvbgorICogQHVyaTog
dGhlIFVSSSB0byBkb3dubG9hZAorICoKKyAqIFJlcXVlc3RzIGRvd25sb2FkaW5nIG9mIHRoZSBz
cGVjaWZpZWQgVVJJIHN0cmluZy4KKyAqCisgKiBUaGUgZG93bmxvYWQgb3BlcmF0aW9uIHdpbGwg
bm90IGJlIGFzc29jaWF0ZWQgdG8gYW55ICNXZWJLaXRXZWJWaWV3LAorICogaWYgeW91IGFyZSBp
bnRlcmVzdGVkIGluIHN0YXJ0aW5nIGEgZG93bmxvYWQgZnJvbSBhIHBhcnRpY3VsYXIgI1dlYktp
dFdlYlZpZXcgdXNlCisgKiB3ZWJraXRfd2ViX3ZpZXdfZG93bmxvYWRfdXJpKCkgaW5zdGVhZC4K
KyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNXZWJLaXREb3dubG9hZCBy
ZXByZXNlbnRpbmcKKyAqICAgIHRoZSBkb3dubG9hZCBvcGVyYXRpb24uCisgKgorICogU2luY2U6
IDIuNDAKKyAqLworV2ViS2l0RG93bmxvYWQqIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZG93bmxv
YWRfdXJpKFdlYktpdE5ldHdvcmtTZXNzaW9uKiBzZXNzaW9uLCBjb25zdCBjaGFyKiB1cmkpCit7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX05FVFdPUktfU0VTU0lPTihzZXNz
aW9uKSwgbnVsbHB0cik7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwodXJpLCBudWxscHRyKTsK
KworICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXF1ZXN0KFN0cmluZzo6ZnJvbVVURjgo
dXJpKSk7CisgICAgYXV0byYgd2Vic2l0ZURhdGFTdG9yZSA9IHdlYmtpdFdlYnNpdGVEYXRhTWFu
YWdlckdldERhdGFTdG9yZShzZXNzaW9uLT5wcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkp
OworICAgIGF1dG8mIGRvd25sb2FkUHJveHkgPSB3ZWJzaXRlRGF0YVN0b3JlLmNyZWF0ZURvd25s
b2FkUHJveHkoYWRvcHRSZWYoKm5ldyBBUEk6OkRvd25sb2FkQ2xpZW50KSwgcmVxdWVzdCwgbnVs
bHB0ciwgeyB9KTsKKyAgICBhdXRvIGRvd25sb2FkID0gd2Via2l0RG93bmxvYWRDcmVhdGUoZG93
bmxvYWRQcm94eSk7CisgICAgZG93bmxvYWRQcm94eS5zZXREaWRTdGFydENhbGxiYWNrKFtzZXNz
aW9uID0gR1JlZlB0cjxXZWJLaXROZXR3b3JrU2Vzc2lvbj4geyBzZXNzaW9uIH0sIGRvd25sb2Fk
ID0gZG93bmxvYWQuZ2V0KCldKGF1dG8qIGRvd25sb2FkUHJveHkpIHsKKyAgICAgICAgaWYgKCFk
b3dubG9hZFByb3h5KQorICAgICAgICAgICAgcmV0dXJuOworCisJd2Via2l0RG93bmxvYWRTdGFy
dGVkKGRvd25sb2FkKTsKKyAgICAgICAgd2Via2l0TmV0d29ya1Nlc3Npb25Eb3dubG9hZFN0YXJ0
ZWQoc2Vzc2lvbi5nZXQoKSwgZG93bmxvYWQpOworICAgIH0pOworICAgIHdlYnNpdGVEYXRhU3Rv
cmUuZG93bmxvYWQoZG93bmxvYWRQcm94eSwgeyB9KTsKKyAgICByZXR1cm4gZG93bmxvYWQubGVh
a1JlZigpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKDIwMjJfR0xJQl9BUEkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXROZXR3b3JrU2Vzc2lvbi5o
LmluIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0TmV0d29ya1Nlc3Np
b24uaC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjgyMmMzOTRj
YmRiNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGli
L1dlYktpdE5ldHdvcmtTZXNzaW9uLmguaW4KQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjMgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKK0BBUElfU0lOR0xFX0hFQURFUl9DSEVDS0AKKwor
I2lmbmRlZiBXZWJLaXROZXR3b3JrU2Vzc2lvbl9oCisjZGVmaW5lIFdlYktpdE5ldHdvcmtTZXNz
aW9uX2gKKworI2luY2x1ZGUgPGdpby9naW8uaD4KKyNpbmNsdWRlIDxAQVBJX0lOQ0xVREVfUFJF
RklYQC9XZWJLaXRDb29raWVNYW5hZ2VyLmg+CisjaW5jbHVkZSA8QEFQSV9JTkNMVURFX1BSRUZJ
WEAvV2ViS2l0RGVmaW5lcy5oPgorI2luY2x1ZGUgPEBBUElfSU5DTFVERV9QUkVGSVhAL1dlYktp
dERvd25sb2FkLmg+CisjaW5jbHVkZSA8QEFQSV9JTkNMVURFX1BSRUZJWEAvV2ViS2l0TWVtb3J5
UHJlc3N1cmVTZXR0aW5ncy5oPgorI2luY2x1ZGUgPEBBUElfSU5DTFVERV9QUkVGSVhAL1dlYktp
dE5ldHdvcmtQcm94eVNldHRpbmdzLmg+CisjaW5jbHVkZSA8QEFQSV9JTkNMVURFX1BSRUZJWEAv
V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBX
RUJLSVRfVFlQRV9ORVRXT1JLX1NFU1NJT04gICAgICAgICAgICAod2Via2l0X25ldHdvcmtfc2Vz
c2lvbl9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfTkVUV09SS19TRVNTSU9OKG9iaikgICAg
ICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX05F
VFdPUktfU0VTU0lPTiwgV2ViS2l0TmV0d29ya1Nlc3Npb24pKQorI2RlZmluZSBXRUJLSVRfSVNf
TkVUV09SS19TRVNTSU9OKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUo
KG9iaiksIFdFQktJVF9UWVBFX05FVFdPUktfU0VTU0lPTikpCisjZGVmaW5lIFdFQktJVF9ORVRX
T1JLX1NFU1NJT05fQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xh
c3MpLCAgV0VCS0lUX1RZUEVfTkVUV09SS19TRVNTSU9OLCBXZWJLaXROZXR3b3JrU2Vzc2lvbkNs
YXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX05FVFdPUktfU0VTU0lPTl9DTEFTUyhrbGFzcykgKEdf
VFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9ORVRXT1JLX1NFU1NJ
T04pKQorI2RlZmluZSBXRUJLSVRfTkVUV09SS19TRVNTSU9OX0dFVF9DTEFTUyhvYmopICAoR19U
WVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX05FVFdPUktfU0VTU0lP
TiwgV2ViS2l0TmV0d29ya1Nlc3Npb25DbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRO
ZXR3b3JrU2Vzc2lvbiAgICAgICAgV2ViS2l0TmV0d29ya1Nlc3Npb247Cit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0TmV0d29ya1Nlc3Npb25DbGFzcyAgIFdlYktpdE5ldHdvcmtTZXNzaW9uQ2xhc3M7
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0TmV0d29ya1Nlc3Npb25Qcml2YXRlIFdlYktpdE5ldHdv
cmtTZXNzaW9uUHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXROZXR3b3JrU2Vzc2lvbiB7CisgICAg
R09iamVjdCBwYXJlbnQ7CisKKyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBXZWJLaXROZXR3b3Jr
U2Vzc2lvblByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdE5ldHdvcmtTZXNzaW9u
Q2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgICAvKjwgcHJpdmF0
ZSA+Ki8KKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDApICh2b2lkKTsKKyAgICB2b2lkICgq
X3dlYmtpdF9yZXNlcnZlZDEpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDIp
ICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDMpICh2b2lkKTsKK307CisKK1dF
QktJVF9BUEkgR1R5cGUKK3dlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X3R5cGUgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJIFdlYktpdE5ldHdv
cmtTZXNzaW9uICoKK3dlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X2RlZmF1bHQgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJIFdlYktpdE5ldHdvcmtT
ZXNzaW9uICoKK3dlYmtpdF9uZXR3b3JrX3Nlc3Npb25fbmV3ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgICAgICAgICAgICAgICAgICAgKmRhdGFfZGly
ZWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICAgICAgICAgICAqY2FjaGVfZGly
ZWN0cm9yeSk7CitXRUJLSVRfQVBJIFdlYktpdE5ldHdvcmtTZXNzaW9uICoKK3dlYmtpdF9uZXR3
b3JrX3Nlc3Npb25fbmV3X2VwaGVtZXJhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZv
aWQpOworCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfbmV0d29ya19zZXNzaW9uX2lzX2Vw
aGVtZXJhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXROZXR3b3JrU2Vzc2lv
biAgICAgICAgICpzZXNzaW9uKTsKKworV0VCS0lUX0FQSSBXZWJLaXRXZWJzaXRlRGF0YU1hbmFn
ZXIgKgord2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIgICAg
ICAgICAgICAgICAgICAoV2ViS2l0TmV0d29ya1Nlc3Npb24gICAgICAgICAqc2Vzc2lvbik7CisK
K1dFQktJVF9BUEkgV2ViS2l0Q29va2llTWFuYWdlciAqCit3ZWJraXRfbmV0d29ya19zZXNzaW9u
X2dldF9jb29raWVfbWFuYWdlciAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXROZXR3b3Jr
U2Vzc2lvbiAgICAgICAgICpzZXNzaW9uKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfbmV0
d29ya19zZXNzaW9uX3NldF9pdHBfZW5hYmxlZCAgICAgICAgICAgICAgICAgICAgICAgICAgIChX
ZWJLaXROZXR3b3JrU2Vzc2lvbiAgICAgICAgICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4g
ICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZCk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dl
YmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X2l0cF9lbmFibGVkICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKFdlYktpdE5ldHdvcmtTZXNzaW9uICAgICAgICAgKnNlc3Npb24pOworCitXRUJLSVRf
QVBJIHZvaWQKK3dlYmtpdF9uZXR3b3JrX3Nlc3Npb25fc2V0X3BlcnNpc3RlbnRfY3JlZGVudGlh
bF9zdG9yYWdlX2VuYWJsZWQgKFdlYktpdE5ldHdvcmtTZXNzaW9uICAgICAgICAgKnNlc3Npb24s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnYm9vbGVhbiAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkKTsKKworV0VC
S0lUX0FQSSBnYm9vbGVhbgord2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfcGVyc2lzdGVudF9j
cmVkZW50aWFsX3N0b3JhZ2VfZW5hYmxlZCAoV2ViS2l0TmV0d29ya1Nlc3Npb24gICAgICAgICAq
c2Vzc2lvbik7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRf
dGxzX2Vycm9yc19wb2xpY3kgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0TmV0d29ya1Nlc3Np
b24gICAgICAgICAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFRMU0Vycm9yc1BvbGljeSAgICAg
ICAgIHBvbGljeSk7CisKK1dFQktJVF9BUEkgV2ViS2l0VExTRXJyb3JzUG9saWN5Cit3ZWJraXRf
bmV0d29ya19zZXNzaW9uX2dldF90bHNfZXJyb3JzX3BvbGljeSAgICAgICAgICAgICAgICAgICAg
IChXZWJLaXROZXR3b3JrU2Vzc2lvbiAgICAgICAgICpzZXNzaW9uKTsKKworV0VCS0lUX0FQSSB2
b2lkCit3ZWJraXRfbmV0d29ya19zZXNzaW9uX2FsbG93X3Rsc19jZXJ0aWZpY2F0ZV9mb3JfaG9z
dCAgICAgICAgICAgIChXZWJLaXROZXR3b3JrU2Vzc2lvbiAgICAgICAgICpzZXNzaW9uLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR1Rsc0NlcnRpZmljYXRlICAgICAgICAgICAgICAqY2VydGlmaWNhdGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyICAgICAgICAgICAgICAgICAgICpob3N0KTsKKworV0VCS0lUX0FQSSB2b2lk
Cit3ZWJraXRfbmV0d29ya19zZXNzaW9uX3NldF9wcm94eV9zZXR0aW5ncyAgICAgICAgICAgICAg
ICAgICAgICAgIChXZWJLaXROZXR3b3JrU2Vzc2lvbiAgICAgICAgICpzZXNzaW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV2ViS2l0TmV0d29ya1Byb3h5TW9kZSAgICAgICAgcHJveHlfbW9kZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdl
YktpdE5ldHdvcmtQcm94eVNldHRpbmdzICAgKnByb3h5X3NldHRpbmdzKTsKKworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfbmV0d29ya19zZXNzaW9uX3NldF9tZW1vcnlfcHJlc3N1cmVfc2V0dGlu
Z3MgICAgICAgICAgICAgIChXZWJLaXRNZW1vcnlQcmVzc3VyZVNldHRpbmdzICpzZXR0aW5ncyk7
CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfaXRwX3N1bW1h
cnkgICAgICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0TmV0d29ya1Nlc3Npb24gICAgICAg
ICAqc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICAgICAgICAgKmNhbmNl
bGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0FzeW5jUmVhZHlDYWxsYmFjayAgICAgICAgICAgY2FsbGJhY2ss
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgICAgICAgICAgICB1c2VyX2RhdGEpOworV0VC
S0lUX0FQSSBHTGlzdCAqCit3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF9pdHBfc3VtbWFyeV9m
aW5pc2ggICAgICAgICAgICAgICAgICAgIChXZWJLaXROZXR3b3JrU2Vzc2lvbiAgICAgICAgICpz
ZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0FzeW5jUmVzdWx0ICAgICAgICAgICAgICAgICAqcmVzdWx0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICAgICAgICAgICoqZXJyb3IpOworV0VCS0lUX0FQ
SSBXZWJLaXREb3dubG9hZCAqCit3ZWJraXRfbmV0d29ya19zZXNzaW9uX2Rvd25sb2FkX3VyaSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXROZXR3b3JrU2Vzc2lvbiAgICAgICAg
ICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAgICAgICAgICAgICAgICAgICAqdXJpKTsK
KworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvZ2xpYi9XZWJLaXROZXR3b3JrU2Vzc2lvblByaXZhdGUuaCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdE5ldHdvcmtTZXNzaW9uUHJpdmF0ZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uY2IwMWVlOGY4MDUyCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0TmV0d29y
a1Nlc3Npb25Qcml2YXRlLmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldlYktpdERvd25sb2Fk
LmgiCisjaW5jbHVkZSAiV2ViS2l0TmV0d29ya1Nlc3Npb24uaCIKKwordm9pZCB3ZWJraXROZXR3
b3JrU2Vzc2lvbkRvd25sb2FkU3RhcnRlZChXZWJLaXROZXR3b3JrU2Vzc2lvbiosIFdlYktpdERv
d25sb2FkKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9X
ZWJLaXRXZWJDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dl
YktpdFdlYkNvbnRleHQuY3BwCmluZGV4IDE1MTFkZTcyNDExMS4uMWFkOTg1ZjFjYTFiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250
ZXh0LmNwcApAQCAtODAsNiArODAsMTAgQEAKICNpbmNsdWRlICJXZWJLaXRSZW1vdGVJbnNwZWN0
b3JQcm90b2NvbEhhbmRsZXIuaCIKICNlbmRpZgogCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkp
CisjaW5jbHVkZSAiV2ViS2l0TmV0d29ya1Nlc3Npb24uaCIKKyNlbmRpZgorCiB1c2luZyBuYW1l
c3BhY2UgV2ViS2l0OwogCiAvKioKQEAgLTExNyw3ICsxMjEsOSBAQCBlbnVtIHsKICNpZiBQTEFU
Rk9STShHVEspICYmICFVU0UoR1RLNCkKICAgICBQUk9QX0xPQ0FMX1NUT1JBR0VfRElSRUNUT1JZ
LAogI2VuZGlmCisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogICAgIFBST1BfV0VCU0lURV9E
QVRBX01BTkFHRVIsCisjZW5kaWYKICNpZiBQTEFURk9STShHVEspICYmICFVU0UoR1RLNCkKICAg
ICBQUk9QX1BTT05fRU5BQkxFRCwKICAgICBQUk9QX1VTRV9TWVNURU1fQVBQRUFSQU5DRV9GT1Jf
U0NST0xMQkFSUywKQEAgLTEzMCw3ICsxMzYsOSBAQCBlbnVtIHsKIHN0YXRpYyBHUGFyYW1TcGVj
KiBzT2JqUHJvcGVydGllc1tOX1BST1BFUlRJRVNdID0geyBudWxscHRyLCB9OwogCiBlbnVtIHsK
KyNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAgICAgRE9XTkxPQURfU1RBUlRFRCwKKyNlbmRp
ZgogICAgIElOSVRJQUxJWkVfV0VCX0VYVEVOU0lPTlMsCiAgICAgSU5JVElBTElaRV9OT1RJRklD
QVRJT05fUEVSTUlTU0lPTlMsCiAgICAgQVVUT01BVElPTl9TVEFSVEVELApAQCAtMTk5LDEwICsy
MDcsMTIgQEAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFdlYktpdFVSSVNjaGVtZUhh
bmRsZXI+ID4gVVJJU2NoZW1lSGFuZGxlck1hcDsKIGNsYXNzIFdlYktpdEF1dG9tYXRpb25DbGll
bnQ7CiAKIHN0cnVjdCBfV2ViS2l0V2ViQ29udGV4dFByaXZhdGUgeworI2lmICFFTkFCTEUoMjAy
Ml9HTElCX0FQSSkKICAgICBfV2ViS2l0V2ViQ29udGV4dFByaXZhdGUoKQogICAgICAgICA6IGRu
c1ByZWZldGNoSHlzdGVyZXJpcyhbdGhpc10oUEFMOjpIeXN0ZXJlc2lzU3RhdGUgc3RhdGUpIHsg
aWYgKHN0YXRlID09IFBBTDo6SHlzdGVyZXNpc1N0YXRlOjpTdG9wcGVkKSBkbnNQcmVmZXRjaGVk
SG9zdHMuY2xlYXIoKTsgfSkKICAgICB7CiAgICAgfQorI2VuZGlmCiAKICAgICBSZWZQdHI8V2Vi
UHJvY2Vzc1Bvb2w+IHByb2Nlc3NQb29sOwogICAgIGJvb2wgY2xpZW50c0RldGFjaGVkOwpAQCAt
MjExLDE0ICsyMjEsMTcgQEAgc3RydWN0IF9XZWJLaXRXZWJDb250ZXh0UHJpdmF0ZSB7CiAgICAg
Ym9vbCB1c2VTeXN0ZW1BcHBlYXJhbmNlRm9yU2Nyb2xsYmFyczsKICNlbmRpZgogCisjaWYgIUVO
QUJMRSgyMDIyX0dMSUJfQVBJKQogICAgIEdSZWZQdHI8V2ViS2l0RmF2aWNvbkRhdGFiYXNlPiBm
YXZpY29uRGF0YWJhc2U7CisgICAgQ1N0cmluZyBmYXZpY29uRGF0YWJhc2VEaXJlY3Rvcnk7Cisj
ZW5kaWYKICAgICBHUmVmUHRyPFdlYktpdFNlY3VyaXR5TWFuYWdlcj4gc2VjdXJpdHlNYW5hZ2Vy
OwogICAgIFVSSVNjaGVtZUhhbmRsZXJNYXAgdXJpU2NoZW1lSGFuZGxlcnM7CiAgICAgR1JlZlB0
cjxXZWJLaXRHZW9sb2NhdGlvbk1hbmFnZXI+IGdlb2xvY2F0aW9uTWFuYWdlcjsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8V2ViS2l0Tm90aWZpY2F0aW9uUHJvdmlkZXI+IG5vdGlmaWNhdGlvblByb3Zp
ZGVyOworI2lmICFFTkFCTEUoMjAyMl9HTElCX0FQSSkKICAgICBHUmVmUHRyPFdlYktpdFdlYnNp
dGVEYXRhTWFuYWdlcj4gd2Vic2l0ZURhdGFNYW5hZ2VyOwotCi0gICAgQ1N0cmluZyBmYXZpY29u
RGF0YWJhc2VEaXJlY3Rvcnk7CisjZW5kaWYKIAogICAgIEhhc2hNYXA8V2ViUGFnZVByb3h5SWRl
bnRpZmllciwgV2ViS2l0V2ViVmlldyo+IHdlYlZpZXdzOwogCkBAIC0yMzIsMTEgKzI0NSwxNiBA
QCBzdHJ1Y3QgX1dlYktpdFdlYkNvbnRleHRQcml2YXRlIHsKICNlbmRpZgogICAgIHN0ZDo6dW5p
cXVlX3B0cjxXZWJLaXRBdXRvbWF0aW9uQ2xpZW50PiBhdXRvbWF0aW9uQ2xpZW50OwogICAgIEdS
ZWZQdHI8V2ViS2l0QXV0b21hdGlvblNlc3Npb24+IGF1dG9tYXRpb25TZXNzaW9uOworI2lmIEVO
QUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIEdSZWZQdHI8V2ViS2l0TmV0d29ya1Nlc3Npb24+IGF1
dG9tYXRpb25OZXR3b3JrU2Vzc2lvbjsKKyNlbmRpZgogI2VuZGlmCiAgICAgc3RkOjp1bmlxdWVf
cHRyPFdlYktpdFByb3RvY29sSGFuZGxlcj4gd2Via2l0UHJvdG9jb2xIYW5kbGVyOwogCisjaWYg
IUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogICAgIEhhc2hTZXQ8U3RyaW5nPiBkbnNQcmVmZXRjaGVk
SG9zdHM7CiAgICAgUEFMOjpIeXN0ZXJlc2lzQWN0aXZpdHkgZG5zUHJlZmV0Y2hIeXN0ZXJlcmlz
OworI2VuZGlmCiAKICAgICBXZWJLaXRNZW1vcnlQcmVzc3VyZVNldHRpbmdzKiBtZW1vcnlQcmVz
c3VyZVNldHRpbmdzOwogCkBAIC0yOTYsNyArMzE0LDE3IEBAIHZvaWQgd2Via2l0V2ViQ29udGV4
dFdpbGxDbG9zZUF1dG9tYXRpb25TZXNzaW9uKFdlYktpdFdlYkNvbnRleHQqIHdlYkNvbnRleHQp
CiB7CiAgICAgd2ViQ29udGV4dC0+cHJpdi0+cHJvY2Vzc1Bvb2wtPnNldEF1dG9tYXRpb25TZXNz
aW9uKG51bGxwdHIpOwogICAgIHdlYkNvbnRleHQtPnByaXYtPmF1dG9tYXRpb25TZXNzaW9uID0g
bnVsbHB0cjsKKyAgICB3ZWJDb250ZXh0LT5wcml2LT5hdXRvbWF0aW9uTmV0d29ya1Nlc3Npb24g
PSBudWxscHRyOwogfQorCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCitXZWJLaXROZXR3b3Jr
U2Vzc2lvbiogd2Via2l0V2ViQ29udGV4dEdldE5ldHdvcmtTZXNzaW9uRm9yQXV0b21hdGlvbihX
ZWJLaXRXZWJDb250ZXh0KiB3ZWJDb250ZXh0KQoreworICAgIGlmICghd2ViQ29udGV4dC0+cHJp
di0+YXV0b21hdGlvbk5ldHdvcmtTZXNzaW9uICYmIHdlYkNvbnRleHQtPnByaXYtPmF1dG9tYXRp
b25DbGllbnQpCisgICAgICAgIHdlYkNvbnRleHQtPnByaXYtPmF1dG9tYXRpb25OZXR3b3JrU2Vz
c2lvbiA9IGFkb3B0R1JlZih3ZWJraXRfbmV0d29ya19zZXNzaW9uX25ld19lcGhlbWVyYWwoKSk7
CisgICAgcmV0dXJuIHdlYkNvbnRleHQtPnByaXYtPmF1dG9tYXRpb25OZXR3b3JrU2Vzc2lvbi5n
ZXQoKTsKK30KKyNlbmRpZgogI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQogCiBX
RUJLSVRfREVGSU5FX1RZUEUoV2ViS2l0V2ViQ29udGV4dCwgd2Via2l0X3dlYl9jb250ZXh0LCBH
X1RZUEVfT0JKRUNUKQpAQCAtMzM1LDkgKzM2MywxMSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJD
b250ZXh0R2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSUQsIEdWYWx1ZSog
dgogICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIGNvbnRleHQtPnByaXYtPmxvY2Fs
U3RvcmFnZURpcmVjdG9yeS5kYXRhKCkpOwogICAgICAgICBicmVhazsKICNlbmRpZgorI2lmICFF
TkFCTEUoMjAyMl9HTElCX0FQSSkKICAgICBjYXNlIFBST1BfV0VCU0lURV9EQVRBX01BTkFHRVI6
CiAgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X3dlYl9jb250ZXh0X2dl
dF93ZWJzaXRlX2RhdGFfbWFuYWdlcihjb250ZXh0KSk7CiAgICAgICAgIGJyZWFrOworI2VuZGlm
CiAjaWYgUExBVEZPUk0oR1RLKSAmJiAhVVNFKEdUSzQpCiAgICAgY2FzZSBQUk9QX1BTT05fRU5B
QkxFRDoKICAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgY29udGV4dC0+cHJpdi0+
cHNvbkVuYWJsZWQpOwpAQCAtMzY0LDExICszOTQsMTMgQEAgc3RhdGljIHZvaWQgd2Via2l0V2Vi
Q29udGV4dFNldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElELCBjb25zdCBH
VmEKICAgICAgICAgY29udGV4dC0+cHJpdi0+bG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gZ192YWx1
ZV9nZXRfc3RyaW5nKHZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAjZW5kaWYKKyNpZiAhRU5BQkxF
KDIwMjJfR0xJQl9BUEkpCiAgICAgY2FzZSBQUk9QX1dFQlNJVEVfREFUQV9NQU5BR0VSOiB7CiAg
ICAgICAgIGdwb2ludGVyIG1hbmFnZXIgPSBnX3ZhbHVlX2dldF9vYmplY3QodmFsdWUpOwogICAg
ICAgICBjb250ZXh0LT5wcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIgPSBtYW5hZ2VyID8gV0VCS0lU
X1dFQlNJVEVfREFUQV9NQU5BR0VSKG1hbmFnZXIpIDogbnVsbHB0cjsKICAgICAgICAgYnJlYWs7
CiAgICAgfQorI2VuZGlmCiAjaWYgUExBVEZPUk0oR1RLKSAmJiAhVVNFKEdUSzQpCiAgICAgY2Fz
ZSBQUk9QX1BTT05fRU5BQkxFRDoKICAgICAgICAgY29udGV4dC0+cHJpdi0+cHNvbkVuYWJsZWQg
PSBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKTsKQEAgLTQxOCwxMyArNDUwLDEwIEBAIHN0YXRp
YyB2b2lkIHdlYmtpdFdlYkNvbnRleHRDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCiAgICAg
fQogICAgIGNvbmZpZ3VyYXRpb24uc2V0VGltZVpvbmVPdmVycmlkZShTdHJpbmc6OmZyb21VVEY4
KHByaXYtPnRpbWVab25lT3ZlcnJpZGUuZGF0YSgpLCBwcml2LT50aW1lWm9uZU92ZXJyaWRlLmxl
bmd0aCgpKSk7CiAKLSAgICBpZiAoIXByaXYtPndlYnNpdGVEYXRhTWFuYWdlcikgewotICAgICAg
ICBwcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIgPSBhZG9wdEdSZWYod2Via2l0X3dlYnNpdGVfZGF0
YV9tYW5hZ2VyX25ldygKICNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCi0gICAgICAgICAgICAg
ICAgICAgICJsb2NhbC1zdG9yYWdlLWRpcmVjdG9yeSIsIHByaXYtPmxvY2FsU3RvcmFnZURpcmVj
dG9yeS5kYXRhKCksCisgICAgaWYgKCFwcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIpCisgICAgICAg
IHByaXYtPndlYnNpdGVEYXRhTWFuYWdlciA9IGFkb3B0R1JlZih3ZWJraXRfd2Vic2l0ZV9kYXRh
X21hbmFnZXJfbmV3KCJsb2NhbC1zdG9yYWdlLWRpcmVjdG9yeSIsIHByaXYtPmxvY2FsU3RvcmFn
ZURpcmVjdG9yeS5kYXRhKCksIG51bGxwdHIpKTsKICNlbmRpZgotICAgICAgICBudWxscHRyKSk7
Ci0gICAgfQogCiAgICAgcHJpdi0+cHJvY2Vzc1Bvb2wgPSBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRl
KGNvbmZpZ3VyYXRpb24pOwogICAgIHByaXYtPnByb2Nlc3NQb29sLT5zZXRVc2VyTWVzc2FnZUhh
bmRsZXIoW3dlYkNvbnRleHRdKFVzZXJNZXNzYWdlJiYgbWVzc2FnZSwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChVc2VyTWVzc2FnZSYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikgewpAQCAtNDYxLDEw
ICs0OTAsMTIgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViQ29udGV4dERpc3Bvc2UoR09iamVjdCog
b2JqZWN0KQogICAgICAgICBwcml2LT5wcm9jZXNzUG9vbC0+c2V0SW5qZWN0ZWRCdW5kbGVDbGll
bnQobnVsbHB0cik7CiAgICAgfQogCisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogICAgIGlm
IChwcml2LT5mYXZpY29uRGF0YWJhc2UpIHsKICAgICAgICAgd2Via2l0RmF2aWNvbkRhdGFiYXNl
Q2xvc2UocHJpdi0+ZmF2aWNvbkRhdGFiYXNlLmdldCgpKTsKICAgICAgICAgcHJpdi0+ZmF2aWNv
bkRhdGFiYXNlID0gbnVsbHB0cjsKICAgICB9CisjZW5kaWYKIAogICAgIGlmIChwcml2LT5wcm9j
ZXNzUG9vbCkgewogICAgICAgICBwcml2LT5wcm9jZXNzUG9vbC0+c2V0VXNlck1lc3NhZ2VIYW5k
bGVyKG51bGxwdHIpOwpAQCAtNTA4LDYgKzUzOSw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJf
Y29udGV4dF9jbGFzc19pbml0KFdlYktpdFdlYkNvbnRleHRDbGFzcyogd2ViQ29udGV4dENsYXNz
CiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxHUGFyYW1GbGFncz4oV0VCS0lUX1BBUkFNX1JFQURX
UklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKTsKICNlbmRpZgogCisjaWYgIUVOQUJMRSgy
MDIyX0dMSUJfQVBJKQogICAgIC8qKgogICAgICAqIFdlYktpdFdlYkNvbnRleHQ6d2Vic2l0ZS1k
YXRhLW1hbmFnZXI6CiAgICAgICoKQEAgLTUyMSw2ICs1NTMsNyBAQCBzdGF0aWMgdm9pZCB3ZWJr
aXRfd2ViX2NvbnRleHRfY2xhc3NfaW5pdChXZWJLaXRXZWJDb250ZXh0Q2xhc3MqIHdlYkNvbnRl
eHRDbGFzcwogICAgICAgICAgICAgbnVsbHB0ciwgbnVsbHB0ciwKICAgICAgICAgICAgIFdFQktJ
VF9UWVBFX1dFQlNJVEVfREFUQV9NQU5BR0VSLAogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R1Bh
cmFtRmxhZ3M+KFdFQktJVF9QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZ
KSk7CisjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEdUSykgJiYgIVVTRShHVEs0KQogICAgIC8qKgpA
QCAtNTk5LDYgKzYzMiw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfY29udGV4dF9jbGFzc19p
bml0KFdlYktpdFdlYkNvbnRleHRDbGFzcyogd2ViQ29udGV4dENsYXNzCiAKICAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnRpZXMoZ09iamVjdENsYXNzLCBOX1BST1BFUlRJRVMsIHNP
YmpQcm9wZXJ0aWVzKTsKIAorI2lmICFFTkFCTEUoMjAyMl9HTElCX0FQSSkKICAgICAvKioKICAg
ICAgKiBXZWJLaXRXZWJDb250ZXh0Ojpkb3dubG9hZC1zdGFydGVkOgogICAgICAqIEBjb250ZXh0
OiB0aGUgI1dlYktpdFdlYkNvbnRleHQKQEAgLTYxNSw2ICs2NDksNyBAQCBzdGF0aWMgdm9pZCB3
ZWJraXRfd2ViX2NvbnRleHRfY2xhc3NfaW5pdChXZWJLaXRXZWJDb250ZXh0Q2xhc3MqIHdlYkNv
bnRleHRDbGFzcwogICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX09CSkVDVCwK
ICAgICAgICAgICAgIEdfVFlQRV9OT05FLCAxLAogICAgICAgICAgICAgV0VCS0lUX1RZUEVfRE9X
TkxPQUQpOworI2VuZGlmCiAKICAgICAvKioKICAgICAgKiBXZWJLaXRXZWJDb250ZXh0Ojppbml0
aWFsaXplLXdlYi1leHRlbnNpb25zOgpAQCAtNzQxLDYgKzc3Niw3IEBAIFdlYktpdFdlYkNvbnRl
eHQqIHdlYmtpdF93ZWJfY29udGV4dF9uZXcodm9pZCkKICAgICByZXR1cm4gV0VCS0lUX1dFQl9D
T05URVhUKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfQ09OVEVYVCwgbnVsbHB0cikpOwog
fQogCisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogLyoqCiAgKiB3ZWJraXRfd2ViX2NvbnRl
eHRfbmV3X2VwaGVtZXJhbDoKICAqCkBAIC04MTMsNiArODQ5LDcgQEAgZ2Jvb2xlYW4gd2Via2l0
X3dlYl9jb250ZXh0X2lzX2VwaGVtZXJhbChXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0KQogCiAg
ICAgcmV0dXJuIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9pc19lcGhlbWVyYWwoY29udGV4
dC0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKTsKIH0KKyNlbmRpZgogCiAvKioKICAq
IHdlYmtpdF93ZWJfY29udGV4dF9pc19hdXRvbWF0aW9uX2FsbG93ZWQ6CkBAIC05NTEsNiArOTg4
LDcgQEAgV2ViS2l0Q2FjaGVNb2RlbCB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2NhY2hlX21vZGVs
KFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQpCiAgICAgcmV0dXJuIFdFQktJVF9DQUNIRV9NT0RF
TF9XRUJfQlJPV1NFUjsKIH0KIAorI2lmICFFTkFCTEUoMjAyMl9HTElCX0FQSSkKIC8qKgogICog
d2Via2l0X3dlYl9jb250ZXh0X2NsZWFyX2NhY2hlOgogICogQGNvbnRleHQ6IGEgI1dlYktpdFdl
YkNvbnRleHQKQEAgLTk3MCw3ICsxMDA4LDYgQEAgdm9pZCB3ZWJraXRfd2ViX2NvbnRleHRfY2xl
YXJfY2FjaGUoV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCkKICAgICB3ZWJzaXRlRGF0YVN0b3Jl
LnJlbW92ZURhdGEod2Vic2l0ZURhdGFUeXBlcywgLVdhbGxUaW1lOjppbmZpbml0eSgpLCBbXSB7
IH0pOwogfQogCi0jaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogLyoqCiAgKiB3ZWJraXRfd2Vi
X2NvbnRleHRfc2V0X25ldHdvcmtfcHJveHlfc2V0dGluZ3M6CiAgKiBAY29udGV4dDogYSAjV2Vi
S2l0V2ViQ29udGV4dApAQCAtOTk3LDcgKzEwMzQsNiBAQCB2b2lkIHdlYmtpdF93ZWJfY29udGV4
dF9zZXRfbmV0d29ya19wcm94eV9zZXR0aW5ncyhXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0LCBX
ZQogCiAgICAgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX3NldF9uZXR3b3JrX3Byb3h5X3Nl
dHRpbmdzKGNvbnRleHQtPnByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSwgcHJveHlNb2Rl
LCBwcm94eVNldHRpbmdzKTsKIH0KLSNlbmRpZgogCiAvKioKICAqIHdlYmtpdF93ZWJfY29udGV4
dF9kb3dubG9hZF91cmk6CkBAIC0xMDQ2LDYgKzEwODIsNyBAQCBXZWJLaXRDb29raWVNYW5hZ2Vy
KiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Nvb2tpZV9tYW5hZ2VyKFdlYktpdFdlYkNvbnRleHQq
IGNvbgogCiAgICAgcmV0dXJuIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfY29va2ll
X21hbmFnZXIoY29udGV4dC0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKTsKIH0KKyNl
bmRpZgogCiAvKioKICAqIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZ2VvbG9jYXRpb25fbWFuYWdl
cjoKQEAgLTEwNjQsNiArMTEwMSw3IEBAIFdlYktpdEdlb2xvY2F0aW9uTWFuYWdlciogd2Via2l0
X3dlYl9jb250ZXh0X2dldF9nZW9sb2NhdGlvbl9tYW5hZ2VyKFdlYktpdFdlYkNvCiAgICAgcmV0
dXJuIGNvbnRleHQtPnByaXYtPmdlb2xvY2F0aW9uTWFuYWdlci5nZXQoKTsKIH0KIAorI2lmICFF
TkFCTEUoMjAyMl9HTElCX0FQSSkKIHN0YXRpYyB2b2lkIGVuc3VyZUZhdmljb25EYXRhYmFzZShX
ZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0KQogewogICAgIFdlYktpdFdlYkNvbnRleHRQcml2YXRl
KiBwcml2ID0gY29udGV4dC0+cHJpdjsKQEAgLTExNjUsNiArMTIwMyw3IEBAIFdlYktpdEZhdmlj
b25EYXRhYmFzZSogd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNlKFdlYktp
dFdlYkNvbnRleHQqCiAgICAgZW5zdXJlRmF2aWNvbkRhdGFiYXNlKGNvbnRleHQpOwogICAgIHJl
dHVybiBjb250ZXh0LT5wcml2LT5mYXZpY29uRGF0YWJhc2UuZ2V0KCk7CiB9CisjZW5kaWYKIAog
LyoqCiAgKiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NlY3VyaXR5X21hbmFnZXI6CkBAIC0xNjUy
LDYgKzE2OTEsNyBAQCB2b2lkIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfZGlza19jYWNoZV9kaXJl
Y3RvcnkoV2ViS2l0V2ViQ29udGV4dCosIGNvbnN0IGNoYXIqKQogfQogI2VuZGlmCiAKKyNpZiAh
RU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAvKioKICAqIHdlYmtpdF93ZWJfY29udGV4dF9wcmVmZXRj
aF9kbnM6CiAgKiBAY29udGV4dDogYSAjV2ViS2l0V2ViQ29udGV4dApAQCAtMTY2Nyw4ICsxNzA3
LDEwIEBAIHZvaWQgd2Via2l0X3dlYl9jb250ZXh0X3ByZWZldGNoX2RucyhXZWJLaXRXZWJDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiBob3N0CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfSVNfV0VCX0NPTlRFWFQoY29udGV4dCkpOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoaG9zdG5h
bWUpOwogCi0gICAgYXV0byYgd2Vic2l0ZURhdGFTdG9yZSA9IHdlYmtpdFdlYnNpdGVEYXRhTWFu
YWdlckdldERhdGFTdG9yZShjb250ZXh0LT5wcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCkp
OwotICAgIHdlYnNpdGVEYXRhU3RvcmUubmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrUHJvY2Vzczo6UHJlZmV0Y2hETlMoU3RyaW5nOjpmcm9tVVRGOChob3N0bmFtZSkpLCAw
KTsKKyAgICBpZiAoY29udGV4dC0+cHJpdi0+ZG5zUHJlZmV0Y2hlZEhvc3RzLmFkZChob3N0bmFt
ZSkuaXNOZXdFbnRyeSkgeworICAgICAgICBhdXRvJiB3ZWJzaXRlRGF0YVN0b3JlID0gd2Via2l0
V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKGNvbnRleHQtPnByaXYtPndlYnNpdGVEYXRh
TWFuYWdlci5nZXQoKSk7CisgICAgICAgIHdlYnNpdGVEYXRhU3RvcmUubmV0d29ya1Byb2Nlc3Mo
KS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6UHJlZmV0Y2hETlMoU3RyaW5nOjpmcm9t
VVRGOChob3N0bmFtZSkpLCAwKTsKKyAgICB9CiAgICAgY29udGV4dC0+cHJpdi0+ZG5zUHJlZmV0
Y2hIeXN0ZXJlcmlzLmltcHVsc2UoKTsKIH0KIApAQCAtMTY5Miw2ICsxNzM0LDcgQEAgdm9pZCB3
ZWJraXRfd2ViX2NvbnRleHRfYWxsb3dfdGxzX2NlcnRpZmljYXRlX2Zvcl9ob3N0KFdlYktpdFdl
YkNvbnRleHQqIGNvbnRleHQKICAgICBhdXRvJiB3ZWJzaXRlRGF0YVN0b3JlID0gd2Via2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKGNvbnRleHQtPnByaXYtPndlYnNpdGVEYXRhTWFu
YWdlci5nZXQoKSk7CiAgICAgd2Vic2l0ZURhdGFTdG9yZS5hbGxvd1NwZWNpZmljSFRUUFNDZXJ0
aWZpY2F0ZUZvckhvc3QoY2VydGlmaWNhdGVJbmZvLCBTdHJpbmc6OmZyb21VVEY4KGhvc3QpKTsK
IH0KKyNlbmRpZgogCiAjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogLyoqCkBAIC0xOTE0LDEw
ICsxOTU3LDEyIEBAIHZvaWQgd2Via2l0V2ViQ29udGV4dEluaXRpYWxpemVOb3RpZmljYXRpb25Q
ZXJtaXNzaW9ucyhXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0CiAgICAgZ19zaWduYWxfZW1pdChj
b250ZXh0LCBzaWduYWxzW0lOSVRJQUxJWkVfTk9USUZJQ0FUSU9OX1BFUk1JU1NJT05TXSwgMCk7
CiB9CiAKKyNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiB2b2lkIHdlYmtpdFdlYkNvbnRleHRE
b3dubG9hZFN0YXJ0ZWQoV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCwgV2ViS2l0RG93bmxvYWQq
IGRvd25sb2FkKQogewogICAgIGdfc2lnbmFsX2VtaXQoY29udGV4dCwgc2lnbmFsc1tET1dOTE9B
RF9TVEFSVEVEXSwgMCwgZG93bmxvYWQpOwogfQorI2VuZGlmCiAKIEdWYXJpYW50KiB3ZWJraXRX
ZWJDb250ZXh0SW5pdGlhbGl6ZVdlYkV4dGVuc2lvbnMoV2ViS2l0V2ViQ29udGV4dCogY29udGV4
dCkKIHsKQEAgLTE5NTUsOCArMjAwMCwxMCBAQCB2b2lkIHdlYmtpdFdlYkNvbnRleHRDcmVhdGVQ
YWdlRm9yV2ViVmlldyhXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJLaXRXZWJWaQogICAg
ICAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0T3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3ko
U3RyaW5nOjpmcm9tVVRGOChkZWZhdWx0Q29udGVudFNlY3VyaXR5UG9saWN5KSk7CiAKICAgICBX
ZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIG1hbmFnZXIgPSB3ZWJraXRXZWJWaWV3R2V0V2Vic2l0
ZURhdGFNYW5hZ2VyKHdlYlZpZXcpOworI2lmICFFTkFCTEUoMjAyMl9HTElCX0FQSSkKICAgICBp
ZiAoIW1hbmFnZXIpCiAgICAgICAgIG1hbmFnZXIgPSBjb250ZXh0LT5wcml2LT53ZWJzaXRlRGF0
YU1hbmFnZXIuZ2V0KCk7CisjZW5kaWYKICAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0V2Vic2l0
ZURhdGFTdG9yZSgmd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKG1hbmFnZXIp
KTsKICAgICBwYWdlQ29uZmlndXJhdGlvbi0+c2V0RGVmYXVsdFdlYnNpdGVQb2xpY2llcyh3ZWJr
aXRXZWJzaXRlUG9saWNpZXNHZXRXZWJzaXRlUG9saWNpZXMoZGVmYXVsdFdlYnNpdGVQb2xpY2ll
cykpOwogICAgIHdlYmtpdFdlYlZpZXdDcmVhdGVQYWdlKHdlYlZpZXcsIFdURk1vdmUocGFnZUNv
bmZpZ3VyYXRpb24pKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdFdlYkNvbnRleHQuaC5pbiBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
bGliL1dlYktpdFdlYkNvbnRleHQuaC5pbgppbmRleCBlNGIzOGIyYjRhMTIuLmYzOTBlMzdjOWVi
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vi
Q29udGV4dC5oLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktp
dFdlYkNvbnRleHQuaC5pbgpAQCAtMjcsNyArMjcsOSBAQAogI2luY2x1ZGUgPEBBUElfSU5DTFVE
RV9QUkVGSVhAL1dlYktpdENvb2tpZU1hbmFnZXIuaD4KICNpbmNsdWRlIDxAQVBJX0lOQ0xVREVf
UFJFRklYQC9XZWJLaXREZWZpbmVzLmg+CiAjaW5jbHVkZSA8QEFQSV9JTkNMVURFX1BSRUZJWEAv
V2ViS2l0RG93bmxvYWQuaD4KKyNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAjaW5jbHVkZSA8
QEFQSV9JTkNMVURFX1BSRUZJWEAvV2ViS2l0RmF2aWNvbkRhdGFiYXNlLmg+CisjZW5kaWYKICNp
bmNsdWRlIDxAQVBJX0lOQ0xVREVfUFJFRklYQC9XZWJLaXRHZW9sb2NhdGlvbk1hbmFnZXIuaD4K
ICNpbmNsdWRlIDxAQVBJX0lOQ0xVREVfUFJFRklYQC9XZWJLaXROZXR3b3JrUHJveHlTZXR0aW5n
cy5oPgogI2luY2x1ZGUgPEBBUElfSU5DTFVERV9QUkVGSVhAL1dlYktpdFNlY3VyaXR5TWFuYWdl
ci5oPgpAQCAtMTQwLDYgKzE0Miw3IEBAIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCAg
ICAgICAgICAgICAgICAgICAgICAodm9pZCk7CiBXRUJLSVRfQVBJIFdlYktpdFdlYkNvbnRleHQg
Kgogd2Via2l0X3dlYl9jb250ZXh0X25ldyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2
b2lkKTsKIAorI2lmICFFTkFCTEUoMjAyMl9HTElCX0FQSSkKIFdFQktJVF9BUEkgV2ViS2l0V2Vi
Q29udGV4dCAqCiB3ZWJraXRfd2ViX2NvbnRleHRfbmV3X2VwaGVtZXJhbCAgICAgICAgICAgICAg
ICAgICAgKHZvaWQpOwogCkBAIC0xNTEsNiArMTU0LDcgQEAgd2Via2l0X3dlYl9jb250ZXh0X2dl
dF93ZWJzaXRlX2RhdGFfbWFuYWdlciAgICAgICAgIChXZWJLaXRXZWJDb250ZXh0CiAKIFdFQktJ
VF9BUEkgZ2Jvb2xlYW4KIHdlYmtpdF93ZWJfY29udGV4dF9pc19lcGhlbWVyYWwgICAgICAgICAg
ICAgICAgICAgICAoV2ViS2l0V2ViQ29udGV4dCAgICAgICAgICAgICAgKmNvbnRleHQpOworI2Vu
ZGlmCiAKIFdFQktJVF9BUEkgZ2Jvb2xlYW4KIHdlYmtpdF93ZWJfY29udGV4dF9pc19hdXRvbWF0
aW9uX2FsbG93ZWQgICAgICAgICAgICAoV2ViS2l0V2ViQ29udGV4dCAgICAgICAgICAgICAgKmNv
bnRleHQpOwpAQCAtMTczLDE1ICsxNzcsMTQgQEAgV0VCS0lUX0RFUFJFQ0FURUQgZ3VpbnQKIHdl
YmtpdF93ZWJfY29udGV4dF9nZXRfd2ViX3Byb2Nlc3NfY291bnRfbGltaXQgICAgICAoV2ViS2l0
V2ViQ29udGV4dCAgICAgICAgICAgICAgKmNvbnRleHQpOwogI2VuZGlmCiAKKyNpZiAhRU5BQkxF
KDIwMjJfR0xJQl9BUEkpCiBXRUJLSVRfQVBJIHZvaWQKIHdlYmtpdF93ZWJfY29udGV4dF9jbGVh
cl9jYWNoZSAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViQ29udGV4dCAgICAgICAgICAg
ICAgKmNvbnRleHQpOwogCi0jaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogV0VCS0lUX0RFUFJF
Q0FURURfRk9SKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9zZXRfbmV0d29ya19wcm94eV9z
ZXR0aW5ncykgdm9pZAogd2Via2l0X3dlYl9jb250ZXh0X3NldF9uZXR3b3JrX3Byb3h5X3NldHRp
bmdzICAgICAgIChXZWJLaXRXZWJDb250ZXh0ICAgICAgICAgICAgICAqY29udGV4dCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0TmV0
d29ya1Byb3h5TW9kZSAgICAgICAgIHByb3h5X21vZGUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdE5ldHdvcmtQcm94eVNldHRpbmdz
ICAgICpwcm94eV9zZXR0aW5ncyk7Ci0jZW5kaWYKIAogV0VCS0lUX0FQSSBXZWJLaXREb3dubG9h
ZCAqCiB3ZWJraXRfd2ViX2NvbnRleHRfZG93bmxvYWRfdXJpICAgICAgICAgICAgICAgICAgICAg
KFdlYktpdFdlYkNvbnRleHQgICAgICAgICAgICAgICpjb250ZXh0LApAQCAtMTg5LDEwICsxOTIs
MTIgQEAgd2Via2l0X3dlYl9jb250ZXh0X2Rvd25sb2FkX3VyaSAgICAgICAgICAgICAgICAgICAg
IChXZWJLaXRXZWJDb250ZXh0CiAKIFdFQktJVF9BUEkgV2ViS2l0Q29va2llTWFuYWdlciAqCiB3
ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Nvb2tpZV9tYW5hZ2VyICAgICAgICAgICAgICAgKFdlYktp
dFdlYkNvbnRleHQgICAgICAgICAgICAgICpjb250ZXh0KTsKKyNlbmRpZgogCiBXRUJLSVRfQVBJ
IFdlYktpdEdlb2xvY2F0aW9uTWFuYWdlciAqCiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2dlb2xv
Y2F0aW9uX21hbmFnZXIgICAgICAgICAgKFdlYktpdFdlYkNvbnRleHQgICAgICAgICAgICAgICpj
b250ZXh0KTsKIAorI2lmICFFTkFCTEUoMjAyMl9HTElCX0FQSSkKIFdFQktJVF9BUEkgV2ViS2l0
RmF2aWNvbkRhdGFiYXNlICoKIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFz
ZSAgICAgICAgICAgICAoV2ViS2l0V2ViQ29udGV4dCAgICAgICAgICAgICAgKmNvbnRleHQpOwog
CkBAIC0yMDEsNiArMjA2LDcgQEAgd2Via2l0X3dlYl9jb250ZXh0X3NldF9mYXZpY29uX2RhdGFi
YXNlX2RpcmVjdG9yeSAgIChXZWJLaXRXZWJDb250ZXh0CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAg
ICAgICpwYXRoKTsKIFdFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgogd2Via2l0X3dlYl9jb250ZXh0
X2dldF9mYXZpY29uX2RhdGFiYXNlX2RpcmVjdG9yeSAgIChXZWJLaXRXZWJDb250ZXh0ICAgICAg
ICAgICAgICAqY29udGV4dCk7CisjZW5kaWYKIAogV0VCS0lUX0FQSSBXZWJLaXRTZWN1cml0eU1h
bmFnZXIgKgogd2Via2l0X3dlYl9jb250ZXh0X2dldF9zZWN1cml0eV9tYW5hZ2VyICAgICAgICAg
ICAgIChXZWJLaXRXZWJDb250ZXh0ICAgICAgICAgICAgICAqY29udGV4dCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0UHJpdmF0
ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dFBy
aXZhdGUuaAppbmRleCA1M2NlMzU0NzEyMTEuLmFhN2U2NjBhZTYxOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViQ29udGV4dFByaXZhdGUuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJDb250ZXh0UHJp
dmF0ZS5oCkBAIC0zMSw4ICszMSwxNCBAQAogI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCiAj
aW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVlc3QuaD4KIAorI2lmIEVOQUJMRSgyMDIyX0dM
SUJfQVBJKQorI2luY2x1ZGUgIldlYktpdE5ldHdvcmtTZXNzaW9uLmgiCisjZW5kaWYKKwogV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbCYgd2Via2l0V2ViQ29udGV4dEdldFByb2Nlc3NQb29sKFdlYktp
dFdlYkNvbnRleHQqKTsKKyNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiB2b2lkIHdlYmtpdFdl
YkNvbnRleHREb3dubG9hZFN0YXJ0ZWQoV2ViS2l0V2ViQ29udGV4dCosIFdlYktpdERvd25sb2Fk
Kik7CisjZW5kaWYKIHZvaWQgd2Via2l0V2ViQ29udGV4dENyZWF0ZVBhZ2VGb3JXZWJWaWV3KFdl
YktpdFdlYkNvbnRleHQqLCBXZWJLaXRXZWJWaWV3KiwgV2ViS2l0VXNlckNvbnRlbnRNYW5hZ2Vy
KiwgV2ViS2l0V2ViVmlldyosIFdlYktpdFdlYnNpdGVQb2xpY2llcyopOwogdm9pZCB3ZWJraXRX
ZWJDb250ZXh0V2ViVmlld0Rlc3Ryb3llZChXZWJLaXRXZWJDb250ZXh0KiwgV2ViS2l0V2ViVmll
dyopOwogV2ViS2l0V2ViVmlldyogd2Via2l0V2ViQ29udGV4dEdldFdlYlZpZXdGb3JQYWdlKFdl
YktpdFdlYkNvbnRleHQqLCBXZWJLaXQ6OldlYlBhZ2VQcm94eSopOwpAQCAtNDAsNCArNDYsNyBA
QCBHVmFyaWFudCogd2Via2l0V2ViQ29udGV4dEluaXRpYWxpemVXZWJFeHRlbnNpb25zKFdlYktp
dFdlYkNvbnRleHQqKTsKIHZvaWQgd2Via2l0V2ViQ29udGV4dEluaXRpYWxpemVOb3RpZmljYXRp
b25QZXJtaXNzaW9ucyhXZWJLaXRXZWJDb250ZXh0Kik7CiAjaWYgRU5BQkxFKFJFTU9URV9JTlNQ
RUNUT1IpCiB2b2lkIHdlYmtpdFdlYkNvbnRleHRXaWxsQ2xvc2VBdXRvbWF0aW9uU2Vzc2lvbihX
ZWJLaXRXZWJDb250ZXh0Kik7CisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCitXZWJLaXROZXR3
b3JrU2Vzc2lvbiogd2Via2l0V2ViQ29udGV4dEdldE5ldHdvcmtTZXNzaW9uRm9yQXV0b21hdGlv
bihXZWJLaXRXZWJDb250ZXh0Kik7CisjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmNwcAppbmRleCAyMzFlMjBmZTZi
ZjguLjJmZDljMGEzNWY4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L2dsaWIvV2ViS2l0V2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L2dsaWIvV2ViS2l0V2ViVmlldy5jcHAKQEAgLTEwMiw2ICsxMDIsMTAgQEAKICNpbmNsdWRlICJX
ZWJLaXRXZWJWaWV3Q2xpZW50LmgiCiAjZW5kaWYKIAorI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJ
KQorI2luY2x1ZGUgIldlYktpdE5ldHdvcmtTZXNzaW9uUHJpdmF0ZS5oIgorI2VuZGlmCisKIHVz
aW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtMTg3
LDYgKzE5MSw5IEBAIGVudW0gewogICAgIFBST1BfUkVMQVRFRF9WSUVXLAogICAgIFBST1BfU0VU
VElOR1MsCiAgICAgUFJPUF9VU0VSX0NPTlRFTlRfTUFOQUdFUiwKKyNpZiBFTkFCTEUoMjAyMl9H
TElCX0FQSSkKKyAgICBQUk9QX05FVFdPUktfU0VTU0lPTiwKKyNlbmRpZgogICAgIFBST1BfVElU
TEUsCiAgICAgUFJPUF9FU1RJTUFURURfTE9BRF9QUk9HUkVTUywKIApAQCAtMTk4LDcgKzIwNSw5
IEBAIGVudW0gewogICAgIFBST1BfWk9PTV9MRVZFTCwKICAgICBQUk9QX0lTX0xPQURJTkcsCiAg
ICAgUFJPUF9JU19QTEFZSU5HX0FVRElPLAorI2lmICFFTkFCTEUoMjAyMl9HTElCX0FQSSkKICAg
ICBQUk9QX0lTX0VQSEVNRVJBTCwKKyNlbmRpZgogICAgIFBST1BfSVNfQ09OVFJPTExFRF9CWV9B
VVRPTUFUSU9OLAogICAgIFBST1BfQVVUT01BVElPTl9QUkVTRU5UQVRJT05fVFlQRSwKICAgICBQ
Uk9QX0VESVRBQkxFLApAQCAtMjczLDcgKzI4Miw5IEBAIHN0cnVjdCBfV2ViS2l0V2ViVmlld1By
aXZhdGUgewogICAgIENTdHJpbmcgYWN0aXZlVVJJOwogICAgIGJvb2wgaXNBY3RpdmVVUklDaGFu
Z2VCbG9ja2VkOwogICAgIGJvb2wgaXNMb2FkaW5nOworI2lmICFFTkFCTEUoMjAyMl9HTElCX0FQ
SSkKICAgICBib29sIGlzRXBoZW1lcmFsOworI2VuZGlmCiAgICAgYm9vbCBpc0NvbnRyb2xsZWRC
eUF1dG9tYXRpb247CiAgICAgV2ViS2l0QXV0b21hdGlvbkJyb3dzaW5nQ29udGV4dFByZXNlbnRh
dGlvbiBhdXRvbWF0aW9uUHJlc2VudGF0aW9uVHlwZTsKIApAQCAtMzEyLDcgKzMyMywxMSBAQCBz
dHJ1Y3QgX1dlYktpdFdlYlZpZXdQcml2YXRlIHsKIAogICAgIEdSZWZQdHI8V2ViS2l0QXV0aGVu
dGljYXRpb25SZXF1ZXN0PiBhdXRoZW50aWNhdGlvblJlcXVlc3Q7CiAKKyNpZiBFTkFCTEUoMjAy
Ml9HTElCX0FQSSkKKyAgICBHUmVmUHRyPFdlYktpdE5ldHdvcmtTZXNzaW9uPiBuZXR3b3JrU2Vz
c2lvbjsKKyNlbHNlCiAgICAgR1JlZlB0cjxXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXI+IHdlYnNp
dGVEYXRhTWFuYWdlcjsKKyNlbmRpZgogICAgIEdSZWZQdHI8V2ViS2l0V2Vic2l0ZVBvbGljaWVz
PiB3ZWJzaXRlUG9saWNpZXM7CiAKICAgICBDU3RyaW5nIGRlZmF1bHRDb250ZW50U2VjdXJpdHlQ
b2xpY3k7CkBAIC01ODEsNiArNTk2LDE1IEBAIHN0YXRpYyB2b2lkIHVzZXJBZ2VudENoYW5nZWQo
V2ViS2l0U2V0dGluZ3MqIHNldHRpbmdzLCBHUGFyYW1TcGVjKiwgV2ViS2l0V2ViVmllCiAgICAg
Z2V0UGFnZSh3ZWJWaWV3KS5zZXRDdXN0b21Vc2VyQWdlbnQoU3RyaW5nOjpmcm9tVVRGOCh3ZWJr
aXRfc2V0dGluZ3NfZ2V0X3VzZXJfYWdlbnQoc2V0dGluZ3MpKSk7CiB9CiAKK3N0YXRpYyBnYm9v
bGVhbiB3ZWJraXRXZWJWaWV3SXNFcGhlbWVyYWwoV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sK
KyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICByZXR1cm4gd2Via2l0X25ldHdvcmtfc2Vz
c2lvbl9pc19lcGhlbWVyYWwod2ViVmlldy0+cHJpdi0+bmV0d29ya1Nlc3Npb24uZ2V0KCkpOwor
I2Vsc2UKKyAgICByZXR1cm4gd2ViVmlldy0+cHJpdi0+aXNFcGhlbWVyYWw7CisjZW5kaWYKK30K
KwogI2lmIFBMQVRGT1JNKEdUSykKIHN0YXRpYyB2b2lkIGVuYWJsZUJhY2tGb3J3YXJkTmF2aWdh
dGlvbkdlc3R1cmVzQ2hhbmdlZChXZWJLaXRTZXR0aW5ncyogc2V0dGluZ3MsIEdQYXJhbVNwZWMq
LCBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogewpAQCAtNjE5LDE0ICs2NDMsMjYgQEAgc3RhdGlj
IHZvaWQgZ290RmF2aWNvbkNhbGxiYWNrKEdPYmplY3QqIG9iamVjdCwgR0FzeW5jUmVzdWx0KiBy
ZXN1bHQsIGdwb2ludGVyIHUKICAgICB3ZWJWaWV3LT5wcml2LT5mYXZpY29uQ2FuY2VsbGFibGUg
PSAwOwogfQogCitzdGF0aWMgV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiB3ZWJraXRXZWJWaWV3R2V0
RmF2aWNvbkRhdGFiYXNlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisjaWYgRU5BQkxFKDIw
MjJfR0xJQl9BUEkpCisgICAgcmV0dXJuIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRf
ZmF2aWNvbl9kYXRhYmFzZSh3ZWJraXRXZWJWaWV3R2V0V2Vic2l0ZURhdGFNYW5hZ2VyKHdlYlZp
ZXcpKTsKKyNlbHNlCisgICAgcmV0dXJuIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9k
YXRhYmFzZShwcml2LT5jb250ZXh0LmdldCgpKTsKKyNlbmRpZgorfQorCiBzdGF0aWMgdm9pZCB3
ZWJraXRXZWJWaWV3UmVxdWVzdEZhdmljb24oV2ViS2l0V2ViVmlldyogd2ViVmlldykKIHsKICAg
ICB3ZWJraXRXZWJWaWV3Q2FuY2VsRmF2aWNvblJlcXVlc3Qod2ViVmlldyk7CiAKICAgICBXZWJL
aXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7CisgICAgYXV0byogZGF0YWJh
c2UgPSB3ZWJraXRXZWJWaWV3R2V0RmF2aWNvbkRhdGFiYXNlKHdlYlZpZXcpOworICAgIGlmICgh
ZGF0YWJhc2UpCisgICAgICAgIHJldHVybjsKKwogICAgIHByaXYtPmZhdmljb25DYW5jZWxsYWJs
ZSA9IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKTsKLSAgICBXZWJLaXRGYXZpY29uRGF0
YWJhc2UqIGRhdGFiYXNlID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9mYXZpY29uX2RhdGFiYXNl
KHByaXYtPmNvbnRleHQuZ2V0KCkpOwotICAgIHdlYmtpdEZhdmljb25EYXRhYmFzZUdldEZhdmlj
b25JbnRlcm5hbChkYXRhYmFzZSwgcHJpdi0+YWN0aXZlVVJJLmRhdGEoKSwgcHJpdi0+aXNFcGhl
bWVyYWwsIHByaXYtPmZhdmljb25DYW5jZWxsYWJsZS5nZXQoKSwgZ290RmF2aWNvbkNhbGxiYWNr
LCB3ZWJWaWV3KTsKKyAgICB3ZWJraXRGYXZpY29uRGF0YWJhc2VHZXRGYXZpY29uSW50ZXJuYWwo
ZGF0YWJhc2UsIHByaXYtPmFjdGl2ZVVSSS5kYXRhKCksIHdlYmtpdFdlYlZpZXdJc0VwaGVtZXJh
bCh3ZWJWaWV3KSwgcHJpdi0+ZmF2aWNvbkNhbmNlbGxhYmxlLmdldCgpLCBnb3RGYXZpY29uQ2Fs
bGJhY2ssIHdlYlZpZXcpOwogfQogCiBzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3VXBkYXRlRmF2
aWNvblVSSShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBjaGFyKiBmYXZpY29uVVJJKQpA
QCAtNzAxLDE2ICs3MzcsMTEgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld1dhdGNoRm9yQ2hh
bmdlc0luRmF2aWNvbihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgIGlmIChwcml2LT5mYXZp
Y29uQ2hhbmdlZEhhbmRsZXJJRCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgV2ViS2l0RmF2aWNv
bkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRh
YmFzZShwcml2LT5jb250ZXh0LmdldCgpKTsKLSAgICBwcml2LT5mYXZpY29uQ2hhbmdlZEhhbmRs
ZXJJRCA9IGdfc2lnbmFsX2Nvbm5lY3QoZGF0YWJhc2UsICJmYXZpY29uLWNoYW5nZWQiLCBHX0NB
TExCQUNLKGZhdmljb25DaGFuZ2VkQ2FsbGJhY2spLCB3ZWJWaWV3KTsKLX0KKyAgICBhdXRvKiBk
YXRhYmFzZSA9IHdlYmtpdFdlYlZpZXdHZXRGYXZpY29uRGF0YWJhc2Uod2ViVmlldyk7CisgICAg
aWYgKCFkYXRhYmFzZSkKKyAgICAgICAgcmV0dXJuOwogCi1zdGF0aWMgdm9pZCB3ZWJraXRXZWJW
aWV3RGlzY29ubmVjdEZhdmljb25EYXRhYmFzZVNpZ25hbEhhbmRsZXJzKFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcpCi17Ci0gICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSB3ZWJWaWV3LT5w
cml2OwotICAgIGlmIChwcml2LT5mYXZpY29uQ2hhbmdlZEhhbmRsZXJJRCkKLSAgICAgICAgZ19z
aWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9k
YXRhYmFzZShwcml2LT5jb250ZXh0LmdldCgpKSwgcHJpdi0+ZmF2aWNvbkNoYW5nZWRIYW5kbGVy
SUQpOwotICAgIHByaXYtPmZhdmljb25DaGFuZ2VkSGFuZGxlcklEID0gMDsKKyAgICBwcml2LT5m
YXZpY29uQ2hhbmdlZEhhbmRsZXJJRCA9IGdfc2lnbmFsX2Nvbm5lY3Rfb2JqZWN0KGRhdGFiYXNl
LCAiZmF2aWNvbi1jaGFuZ2VkIiwgR19DQUxMQkFDSyhmYXZpY29uQ2hhbmdlZENhbGxiYWNrKSwg
d2ViVmlldywgR19DT05ORUNUX0RFRkFVTFQpOwogfQogI2VuZGlmCiAKQEAgLTcyMiwxMiArNzUz
LDE3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmpl
Y3QpCiAgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSB3ZWJWaWV3LT5wcml2OwogICAg
IGlmIChwcml2LT5yZWxhdGVkVmlldykgewogICAgICAgICBwcml2LT5jb250ZXh0ID0gd2Via2l0
X3dlYl92aWV3X2dldF9jb250ZXh0KHByaXYtPnJlbGF0ZWRWaWV3KTsKKyAgICAgICAgcHJpdi0+
bmV0d29ya1Nlc3Npb24gPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X25ldHdvcmtfc2Vzc2lvbihwcml2
LT5yZWxhdGVkVmlldyk7CisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogICAgICAgICBwcml2
LT5pc0VwaGVtZXJhbCA9IHdlYmtpdF93ZWJfdmlld19pc19lcGhlbWVyYWwocHJpdi0+cmVsYXRl
ZFZpZXcpOworI2VuZGlmCiAgICAgICAgIHByaXYtPmlzQ29udHJvbGxlZEJ5QXV0b21hdGlvbiA9
IHdlYmtpdF93ZWJfdmlld19pc19jb250cm9sbGVkX2J5X2F1dG9tYXRpb24ocHJpdi0+cmVsYXRl
ZFZpZXcpOwogICAgIH0gZWxzZSBpZiAoIXByaXYtPmNvbnRleHQpCiAgICAgICAgIHByaXYtPmNv
bnRleHQgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKTsKKyNpZiAhRU5BQkxFKDIw
MjJfR0xJQl9BUEkpCiAgICAgZWxzZSBpZiAoIXByaXYtPmlzRXBoZW1lcmFsKQogICAgICAgICBw
cml2LT5pc0VwaGVtZXJhbCA9IHdlYmtpdF93ZWJfY29udGV4dF9pc19lcGhlbWVyYWwocHJpdi0+
Y29udGV4dC5nZXQoKSk7CisjZW5kaWYKIAogICAgIGlmICghcHJpdi0+c2V0dGluZ3MpCiAgICAg
ICAgIHByaXYtPnNldHRpbmdzID0gYWRvcHRHUmVmKHdlYmtpdF9zZXR0aW5nc19uZXcoKSk7CkBA
IC03MzUsNiArNzcxLDE0IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdDb25zdHJ1Y3RlZChH
T2JqZWN0KiBvYmplY3QpCiAgICAgaWYgKCFwcml2LT51c2VyQ29udGVudE1hbmFnZXIpCiAgICAg
ICAgIHByaXYtPnVzZXJDb250ZW50TWFuYWdlciA9IGFkb3B0R1JlZih3ZWJraXRfdXNlcl9jb250
ZW50X21hbmFnZXJfbmV3KCkpOwogCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisjaWYgRU5B
QkxFKFJFTU9URV9JTlNQRUNUT1IpCisgICAgaWYgKHByaXYtPmlzQ29udHJvbGxlZEJ5QXV0b21h
dGlvbikKKyAgICAgICAgcHJpdi0+bmV0d29ya1Nlc3Npb24gPSB3ZWJraXRXZWJDb250ZXh0R2V0
TmV0d29ya1Nlc3Npb25Gb3JBdXRvbWF0aW9uKHByaXYtPmNvbnRleHQuZ2V0KCkpOworI2VuZGlm
CisgICAgaWYgKCFwcml2LT5uZXR3b3JrU2Vzc2lvbikKKyAgICAgICAgcHJpdi0+bmV0d29ya1Nl
c3Npb24gPSB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF9kZWZhdWx0KCk7CisjZWxzZQogICAg
IGlmIChwcml2LT5pc0VwaGVtZXJhbCAmJiAhd2Via2l0X3dlYl9jb250ZXh0X2lzX2VwaGVtZXJh
bChwcml2LT5jb250ZXh0LmdldCgpKSkgewogICAgICAgICBwcml2LT53ZWJzaXRlRGF0YU1hbmFn
ZXIgPSBhZG9wdEdSZWYod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX25ld19lcGhlbWVyYWwo
KSk7CiAgICAgICAgIGF1dG8qIGNvbnRleHREYXRhTWFuYWdlciA9IHdlYmtpdF93ZWJfY29udGV4
dF9nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIocHJpdi0+Y29udGV4dC5nZXQoKSk7CkBAIC03NDIs
NiArNzg2LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0NvbnN0cnVjdGVkKEdPYmplY3Qq
IG9iamVjdCkKICAgICAgICAgYXV0byBwcm94eVNldHRpbmdzID0gd2Via2l0V2Vic2l0ZURhdGFN
YW5hZ2VyR2V0RGF0YVN0b3JlKGNvbnRleHREYXRhTWFuYWdlcikubmV0d29ya1Byb3h5U2V0dGlu
Z3MoKTsKICAgICAgICAgd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKHByaXYt
PndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSkuc2V0TmV0d29ya1Byb3h5U2V0dGluZ3MoV1RGTW92
ZShwcm94eVNldHRpbmdzKSk7CiAgICAgfQorI2VuZGlmCiAKICAgICBpZiAoIXByaXYtPndlYnNp
dGVQb2xpY2llcykKICAgICAgICAgcHJpdi0+d2Vic2l0ZVBvbGljaWVzID0gYWRvcHRHUmVmKHdl
YmtpdF93ZWJzaXRlX3BvbGljaWVzX25ldygpKTsKQEAgLTgyNCwxMiArODY5LDIxIEBAIHN0YXRp
YyB2b2lkIHdlYmtpdFdlYlZpZXdTZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHBy
b3BJZCwgY29uc3QgR1ZhbHVlCiAgICAgICAgIHdlYlZpZXctPnByaXYtPnVzZXJDb250ZW50TWFu
YWdlciA9IHVzZXJDb250ZW50TWFuYWdlciA/IFdFQktJVF9VU0VSX0NPTlRFTlRfTUFOQUdFUih1
c2VyQ29udGVudE1hbmFnZXIpIDogbnVsbHB0cjsKICAgICAgICAgYnJlYWs7CiAgICAgfQorI2lm
IEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIGNhc2UgUFJPUF9ORVRXT1JLX1NFU1NJT046IHsK
KyAgICAgICAgZ3BvaW50ZXIgbmV0d29ya1Nlc3Npb24gPSBnX3ZhbHVlX2dldF9vYmplY3QodmFs
dWUpOworICAgICAgICB3ZWJWaWV3LT5wcml2LT5uZXR3b3JrU2Vzc2lvbiA9IG5ldHdvcmtTZXNz
aW9uID8gV0VCS0lUX05FVFdPUktfU0VTU0lPTihuZXR3b3JrU2Vzc2lvbikgOiBudWxscHRyOwor
ICAgICAgICBicmVhazsKKyAgICB9CisjZW5kaWYKICAgICBjYXNlIFBST1BfWk9PTV9MRVZFTDoK
ICAgICAgICAgd2Via2l0X3dlYl92aWV3X3NldF96b29tX2xldmVsKHdlYlZpZXcsIGdfdmFsdWVf
Z2V0X2RvdWJsZSh2YWx1ZSkpOwogICAgICAgICBicmVhazsKKyNpZiAhRU5BQkxFKDIwMjJfR0xJ
Ql9BUEkpCiAgICAgY2FzZSBQUk9QX0lTX0VQSEVNRVJBTDoKICAgICAgICAgd2ViVmlldy0+cHJp
di0+aXNFcGhlbWVyYWwgPSBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKTsKICAgICAgICAgYnJl
YWs7CisjZW5kaWYKICAgICBjYXNlIFBST1BfSVNfQ09OVFJPTExFRF9CWV9BVVRPTUFUSU9OOgog
ICAgICAgICB3ZWJWaWV3LT5wcml2LT5pc0NvbnRyb2xsZWRCeUF1dG9tYXRpb24gPSBnX3ZhbHVl
X2dldF9ib29sZWFuKHZhbHVlKTsKICAgICAgICAgYnJlYWs7CkBAIC04ODQsNiArOTM4LDExIEBA
IHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdHZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1
aW50IHByb3BJZCwgR1ZhbHVlKiB2YWx1CiAgICAgY2FzZSBQUk9QX1VTRVJfQ09OVEVOVF9NQU5B
R0VSOgogICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF93ZWJfdmlld19n
ZXRfdXNlcl9jb250ZW50X21hbmFnZXIod2ViVmlldykpOwogICAgICAgICBicmVhazsKKyNpZiBF
TkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICBjYXNlIFBST1BfTkVUV09SS19TRVNTSU9OOgorICAg
ICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF93ZWJfdmlld19nZXRfbmV0d29y
a19zZXNzaW9uKHdlYlZpZXcpKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKICAgICBjYXNlIFBS
T1BfVElUTEU6CiAgICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyh2YWx1ZSwgd2ViVmlldy0+cHJp
di0+dGl0bGUuZGF0YSgpKTsKICAgICAgICAgYnJlYWs7CkBAIC05MDcsOSArOTY2LDExIEBAIHN0
YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdHZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50
IHByb3BJZCwgR1ZhbHVlKiB2YWx1CiAgICAgY2FzZSBQUk9QX0lTX1BMQVlJTkdfQVVESU86CiAg
ICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF93ZWJfdmlld19pc19wbGF5
aW5nX2F1ZGlvKHdlYlZpZXcpKTsKICAgICAgICAgYnJlYWs7CisjaWYgIUVOQUJMRSgyMDIyX0dM
SUJfQVBJKQogICAgIGNhc2UgUFJPUF9JU19FUEhFTUVSQUw6CiAgICAgICAgIGdfdmFsdWVfc2V0
X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF93ZWJfdmlld19pc19lcGhlbWVyYWwod2ViVmlldykpOwog
ICAgICAgICBicmVhazsKKyNlbmRpZgogICAgIGNhc2UgUFJPUF9JU19DT05UUk9MTEVEX0JZX0FV
VE9NQVRJT046CiAgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF93ZWJf
dmlld19pc19jb250cm9sbGVkX2J5X2F1dG9tYXRpb24od2ViVmlldykpOwogICAgICAgICBicmVh
azsKQEAgLTk1Nyw3ICsxMDE4LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Rpc3Bvc2Uo
R09iamVjdCogb2JqZWN0KQogCiAjaWYgUExBVEZPUk0oR1RLKQogICAgIHdlYmtpdFdlYlZpZXdD
YW5jZWxGYXZpY29uUmVxdWVzdCh3ZWJWaWV3KTsKLSAgICB3ZWJraXRXZWJWaWV3RGlzY29ubmVj
dEZhdmljb25EYXRhYmFzZVNpZ25hbEhhbmRsZXJzKHdlYlZpZXcpOworICAgIHdlYlZpZXctPnBy
aXYtPmZhdmljb25DaGFuZ2VkSGFuZGxlcklEID0gMDsKICNlbmRpZgogCiAgICAgd2Via2l0V2Vi
Vmlld0Rpc2Nvbm5lY3RTZXR0aW5nc1NpZ25hbEhhbmRsZXJzKHdlYlZpZXcpOwpAQCAtMTA4Myw2
ICsxMTQ0LDIzIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktp
dFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQogICAgICAgICAgICAgV0VCS0lUX1RZUEVfVVNF
Ul9DT05URU5UX01BTkFHRVIsCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxHUGFyYW1GbGFncz4o
V0VCS0lUX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKTsKIAorI2lm
IEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIC8qKgorICAgICAqIFdlYktpdFdlYlZpZXc6bmV0
d29yay1zZXNzaW9uOgorICAgICAqCisgICAgICogVGhlICNXZWJLaXROZXR3b3JrU2Vzc2lvbiBv
ZiB0aGUgdmlldworICAgICAqCisgICAgICogU2luY2U6IDIuNDAKKyAgICAgKi8KKyAgICBzT2Jq
UHJvcGVydGllc1tQUk9QX05FVFdPUktfU0VTU0lPTl09CisgICAgICAgIGdfcGFyYW1fc3BlY19v
YmplY3QoCisgICAgICAgICAgICAibmV0d29yay1zZXNzaW9uIiwKKyAgICAgICAgICAgIF8oIldl
YlZpZXcgbmV0d29yayBzZXNzaW9uIiksCisgICAgICAgICAgICBfKCJUaGUgV2ViS2l0TmV0d29y
a1Nlc3Npb24gb2YgdGhlIHZpZXciKSwKKyAgICAgICAgICAgIFdFQktJVF9UWVBFX05FVFdPUktf
U0VTU0lPTiwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihXRUJLSVRfUEFS
QU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpOworI2VuZGlmCisKICAgICAv
KioKICAgICAgKiBXZWJLaXRXZWJWaWV3OnRpdGxlOgogICAgICAqCkBAIC0xMTg4LDYgKzEyNjYs
NyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3
Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICAgICAgICAgIEZBTFNFLAogICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURBQkxFKTsKIAorI2lmICFFTkFCTEUoMjAyMl9HTElCX0FQSSkKICAgICAv
KioKICAgICAgKiBXZWJLaXRXZWJWaWV3OmlzLWVwaGVtZXJhbDoKICAgICAgKgpAQCAtMTIxMiw2
ICsxMjkxLDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0
V2ViVmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiAgICAgICAgICAgICBudWxscHRyLCBudWxscHRy
LAogICAgICAgICAgICAgRkFMU0UsCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxHUGFyYW1GbGFn
cz4oV0VCS0lUX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKTsKKyNl
bmRpZgogCiAgICAgLyoqCiAgICAgICogV2ViS2l0V2ViVmlldzppcy1jb250cm9sbGVkLWJ5LWF1
dG9tYXRpb246CkBAIC0yMzM0LDkgKzI0MTQsMTAgQEAgdm9pZCB3ZWJraXRXZWJWaWV3TG9hZENo
YW5nZWQoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0TG9hZEV2ZW50IGxvYWRFdmVudCkK
ICAgICAgICAgICAgIGdfb2JqZWN0X25vdGlmeV9ieV9wc3BlYyhHX09CSkVDVCh3ZWJWaWV3KSwg
c09ialByb3BlcnRpZXNbUFJPUF9VUkldKTsKICAgICAgICAgfQogI2lmIFBMQVRGT1JNKEdUSykK
LSAgICAgICAgV2ViS2l0RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSA9IHdlYmtpdF93ZWJfY29u
dGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFzZShwcml2LT5jb250ZXh0LmdldCgpKTsKLSAgICAgICAg
R1VuaXF1ZVB0cjxjaGFyPiBmYXZpY29uVVJJKHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9m
YXZpY29uX3VyaShkYXRhYmFzZSwgcHJpdi0+YWN0aXZlVVJJLmRhdGEoKSkpOwotICAgICAgICB3
ZWJraXRXZWJWaWV3VXBkYXRlRmF2aWNvblVSSSh3ZWJWaWV3LCBmYXZpY29uVVJJLmdldCgpKTsK
KyAgICAgICAgaWYgKGF1dG8qIGRhdGFiYXNlID0gd2Via2l0V2ViVmlld0dldEZhdmljb25EYXRh
YmFzZSh3ZWJWaWV3KSkgeworICAgICAgICAgICAgR1VuaXF1ZVB0cjxjaGFyPiBmYXZpY29uVVJJ
KHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3VyaShkYXRhYmFzZSwgcHJpdi0+
YWN0aXZlVVJJLmRhdGEoKSkpOworICAgICAgICAgICAgd2Via2l0V2ViVmlld1VwZGF0ZUZhdmlj
b25VUkkod2ViVmlldywgZmF2aWNvblVSSS5nZXQoKSk7CisgICAgICAgIH0KICNlbmRpZgogICAg
ICAgICBicmVhazsKICAgICB9CkBAIC0yMzYzLDggKzI0NDQsMTIgQEAgdm9pZCB3ZWJraXRXZWJW
aWV3TG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMoV2ViS2l0V2ViVmlldyogd2ViVmlldywgY29uc3Qg
Y2hhciogZmEKIHsKICAgICB3ZWJraXRXZWJWaWV3Q29tcGxldGVBdXRoZW50aWNhdGlvblJlcXVl
c3Qod2ViVmlldyk7CiAKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICBXZWJLaXRUTFNF
cnJvcnNQb2xpY3kgdGxzRXJyb3JzUG9saWN5ID0gd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRf
dGxzX2Vycm9yc19wb2xpY3kod2ViVmlldy0+cHJpdi0+bmV0d29ya1Nlc3Npb24uZ2V0KCkpOwor
I2Vsc2UKICAgICBhdXRvKiB3ZWJzaXRlRGF0YU1hbmFnZXIgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYlZpZXcpOwogICAgIFdlYktpdFRMU0Vycm9yc1BvbGlj
eSB0bHNFcnJvcnNQb2xpY3kgPSB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X3Rsc19l
cnJvcnNfcG9saWN5KHdlYnNpdGVEYXRhTWFuYWdlcik7CisjZW5kaWYKICAgICBpZiAodGxzRXJy
b3JzUG9saWN5ID09IFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9GQUlMKSB7CiAgICAgICAgIGdi
b29sZWFuIHJldHVyblZhbHVlOwogICAgICAgICBnX3NpZ25hbF9lbWl0KHdlYlZpZXcsIHNpZ25h
bHNbTE9BRF9GQUlMRURfV0lUSF9UTFNfRVJST1JTXSwgMCwgZmFpbGluZ1VSSSwgY2VydGlmaWNh
dGUsIHRsc0Vycm9ycywgJnJldHVyblZhbHVlKTsKQEAgLTIzODMsMTQgKzI0NjgsMjEgQEAgdm9p
ZCB3ZWJraXRXZWJWaWV3R2V0TG9hZERlY2lzaW9uRm9ySWNvbihXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3LCBjb25zdCBMaW5rSWNvbiYKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJh
c2UgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Zhdmljb25fZGF0YWJhc2Uod2ViVmlldy0+cHJp
di0+Y29udGV4dC5nZXQoKSk7Ci0gICAgd2Via2l0RmF2aWNvbkRhdGFiYXNlR2V0TG9hZERlY2lz
aW9uRm9ySWNvbihkYXRhYmFzZSwgaWNvbiwgZ2V0UGFnZSh3ZWJWaWV3KS5wYWdlTG9hZFN0YXRl
KCkuYWN0aXZlVVJMKCksIHdlYlZpZXctPnByaXYtPmlzRXBoZW1lcmFsLCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CisKKyAgICBhdXRvKiBkYXRhYmFzZSA9IHdlYmtpdFdlYlZpZXdHZXRG
YXZpY29uRGF0YWJhc2Uod2ViVmlldyk7CisgICAgaWYgKCFkYXRhYmFzZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgd2Via2l0RmF2aWNvbkRhdGFiYXNlR2V0TG9hZERlY2lzaW9uRm9ySWNvbihk
YXRhYmFzZSwgaWNvbiwgZ2V0UGFnZSh3ZWJWaWV3KS5wYWdlTG9hZFN0YXRlKCkuYWN0aXZlVVJM
KCksIHdlYmtpdFdlYlZpZXdJc0VwaGVtZXJhbCh3ZWJWaWV3KSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogfQogCiB2b2lkIHdlYmtpdFdlYlZpZXdTZXRJY29uKFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcsIGNvbnN0IExpbmtJY29uJiBpY29uLCBBUEk6OkRhdGEmIGljb25EYXRhKQogewot
ICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UgPSB3ZWJraXRfd2ViX2NvbnRleHRf
Z2V0X2Zhdmljb25fZGF0YWJhc2Uod2ViVmlldy0+cHJpdi0+Y29udGV4dC5nZXQoKSk7Ci0gICAg
d2Via2l0RmF2aWNvbkRhdGFiYXNlU2V0SWNvbkZvclBhZ2VVUkwoZGF0YWJhc2UsIGljb24sIGlj
b25EYXRhLCBnZXRQYWdlKHdlYlZpZXcpLnBhZ2VMb2FkU3RhdGUoKS5hY3RpdmVVUkwoKSwgd2Vi
Vmlldy0+cHJpdi0+aXNFcGhlbWVyYWwpOworICAgIGF1dG8qIGRhdGFiYXNlID0gd2Via2l0V2Vi
Vmlld0dldEZhdmljb25EYXRhYmFzZSh3ZWJWaWV3KTsKKyAgICBpZiAoIWRhdGFiYXNlKQorICAg
ICAgICByZXR1cm47CisKKyAgICB3ZWJraXRGYXZpY29uRGF0YWJhc2VTZXRJY29uRm9yUGFnZVVS
TChkYXRhYmFzZSwgaWNvbiwgaWNvbkRhdGEsIGdldFBhZ2Uod2ViVmlldykucGFnZUxvYWRTdGF0
ZSgpLmFjdGl2ZVVSTCgpLCB3ZWJraXRXZWJWaWV3SXNFcGhlbWVyYWwod2ViVmlldykpOwogfQog
I2VuZGlmCiAKQEAgLTI3MDIsOSArMjc5NCwxMyBAQCB2b2lkIHdlYmtpdFdlYlZpZXdTdWJtaXRG
b3JtUmVxdWVzdChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRGb3JtU3VibWlzc2lvbgog
CiB2b2lkIHdlYmtpdFdlYlZpZXdIYW5kbGVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3LCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5KiBhdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSkKIHsKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICBib29sIGNy
ZWRlbmlhbFN0b3JhZ2VFbmFibGVkID0gd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfcGVyc2lz
dGVudF9jcmVkZW50aWFsX3N0b3JhZ2VfZW5hYmxlZCh3ZWJWaWV3LT5wcml2LT5uZXR3b3JrU2Vz
c2lvbi5nZXQoKSk7CisjZWxzZQogICAgIGF1dG8qIHdlYnNpdGVEYXRhTWFuYWdlciA9IHdlYmtp
dF93ZWJfdmlld19nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIod2ViVmlldyk7Ci0gICAgd2ViVmll
dy0+cHJpdi0+YXV0aGVudGljYXRpb25SZXF1ZXN0ID0gYWRvcHRHUmVmKHdlYmtpdEF1dGhlbnRp
Y2F0aW9uUmVxdWVzdENyZWF0ZShhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSwKLSAgICAgICAgd2Vi
Vmlldy0+cHJpdi0+aXNFcGhlbWVyYWwsIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRf
cGVyc2lzdGVudF9jcmVkZW50aWFsX3N0b3JhZ2VfZW5hYmxlZCh3ZWJzaXRlRGF0YU1hbmFnZXIp
KSk7CisgICAgYm9vbCBjcmVkZW5pYWxTdG9yYWdlRW5hYmxlZCA9IHdlYmtpdF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcl9nZXRfcGVyc2lzdGVudF9jcmVkZW50aWFsX3N0b3JhZ2VfZW5hYmxlZCh3ZWJz
aXRlRGF0YU1hbmFnZXIpOworI2VuZGlmCisgICAgd2ViVmlldy0+cHJpdi0+YXV0aGVudGljYXRp
b25SZXF1ZXN0ID0gYWRvcHRHUmVmKHdlYmtpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdENyZWF0ZShh
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSwgd2Via2l0V2ViVmlld0lzRXBoZW1lcmFsKHdlYlZpZXcp
LCBjcmVkZW5pYWxTdG9yYWdlRW5hYmxlZCkpOwogICAgIGdib29sZWFuIHJldHVyblZhbHVlOwog
ICAgIGdfc2lnbmFsX2VtaXQod2ViVmlldywgc2lnbmFsc1tBVVRIRU5USUNBVEVdLCAwLCB3ZWJW
aWV3LT5wcml2LT5hdXRoZW50aWNhdGlvblJlcXVlc3QuZ2V0KCksICZyZXR1cm5WYWx1ZSk7CiB9
CkBAIC0yNzQwLDcgKzI4MzYsMTEgQEAgdm9pZCB3ZWJraXRXZWJWaWV3U2VsZWN0aW9uRGlkQ2hh
bmdlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAKIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciog
d2Via2l0V2ViVmlld0dldFdlYnNpdGVEYXRhTWFuYWdlcihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
KQogeworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIHJldHVybiB3ZWJraXRfbmV0d29y
a19zZXNzaW9uX2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcih3ZWJWaWV3LT5wcml2LT5uZXR3b3Jr
U2Vzc2lvbi5nZXQoKSk7CisjZWxzZQogICAgIHJldHVybiB3ZWJWaWV3LT5wcml2LT53ZWJzaXRl
RGF0YU1hbmFnZXIuZ2V0KCk7CisjZW5kaWYKIH0KIAogI2lmIFBMQVRGT1JNKEdUSykKQEAgLTI4
ODgsNiArMjk4OCw3IEBAIFdlYktpdFVzZXJDb250ZW50TWFuYWdlciogd2Via2l0X3dlYl92aWV3
X2dldF91c2VyX2NvbnRlbnRfbWFuYWdlcihXZWJLaXRXZWJWaWV3CiAgICAgcmV0dXJuIHdlYlZp
ZXctPnByaXYtPnVzZXJDb250ZW50TWFuYWdlci5nZXQoKTsKIH0KIAorI2lmICFFTkFCTEUoMjAy
Ml9HTElCX0FQSSkKIC8qKgogICogd2Via2l0X3dlYl92aWV3X2lzX2VwaGVtZXJhbDoKICAqIEB3
ZWJfdmlldzogYSAjV2ViS2l0V2ViVmlldwpAQCAtMjkxMCw2ICszMDExLDcgQEAgZ2Jvb2xlYW4g
d2Via2l0X3dlYl92aWV3X2lzX2VwaGVtZXJhbChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogCiAg
ICAgcmV0dXJuIHdlYlZpZXctPnByaXYtPmlzRXBoZW1lcmFsOwogfQorI2VuZGlmCiAKIC8qKgog
ICogd2Via2l0X3dlYl92aWV3X2lzX2NvbnRyb2xsZWRfYnlfYXV0b21hdGlvbjoKQEAgLTI5NDks
NiArMzA1MSwyNCBAQCBXZWJLaXRBdXRvbWF0aW9uQnJvd3NpbmdDb250ZXh0UHJlc2VudGF0aW9u
IHdlYmtpdF93ZWJfdmlld19nZXRfYXV0b21hdGlvbl9wcmVzZQogICAgIHJldHVybiB3ZWJWaWV3
LT5wcml2LT5hdXRvbWF0aW9uUHJlc2VudGF0aW9uVHlwZTsKIH0KIAorI2lmIEVOQUJMRSgyMDIy
X0dMSUJfQVBJKQorLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X25ldHdvcmtfc2Vzc2lvbjoK
KyAqIEB3ZWJfdmlldzogYSAjV2ViS2l0V2ViVmlldworICoKKyAqIEdldCB0aGUgI1dlYktpdE5l
dHdvcmtTZXNzaW9uIGFzc29jaWF0ZWQgdG8gQHdlYl92aWV3LgorICoKKyAqIFJldHVybnM6ICh0
cmFuc2ZlciBub25lKTogYSAjV2ViS2l0TmV0d29ya1Nlc3Npb24KKyAqCisgKiBTaW5jZTogMi40
MAorICovCitXZWJLaXROZXR3b3JrU2Vzc2lvbiogd2Via2l0X3dlYl92aWV3X2dldF9uZXR3b3Jr
X3Nlc3Npb24oV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldyksIG51bGxwdHIpOworCisgICAgcmV0dXJu
IHdlYlZpZXctPnByaXYtPm5ldHdvcmtTZXNzaW9uLmdldCgpOworfQorI2Vsc2UKIC8qKgogICog
d2Via2l0X3dlYl92aWV3X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcjoKICAqIEB3ZWJfdmlldzog
YSAjV2ViS2l0V2ViVmlldwpAQCAtMjk3Miw2ICszMDkyLDcgQEAgV2ViS2l0V2Vic2l0ZURhdGFN
YW5hZ2VyKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKFdlYktpdFdl
YlZpZXcKIAogICAgIHJldHVybiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9t
YW5hZ2VyKHdlYlZpZXctPnByaXYtPmNvbnRleHQuZ2V0KCkpOwogfQorI2VuZGlmCiAKIC8qKgog
ICogd2Via2l0X3dlYl92aWV3X3RyeV9jbG9zZToKQEAgLTQ0MTQsMTIgKzQ1MzUsMjAgQEAgV2Vi
S2l0RG93bmxvYWQqIHdlYmtpdF93ZWJfdmlld19kb3dubG9hZF91cmkoV2ViS2l0V2ViVmlldyog
d2ViVmlldywgY29uc3QgY2hhcioKICAgICBhdXRvJiBwYWdlID0gZ2V0UGFnZSh3ZWJWaWV3KTsK
ICAgICBhdXRvJiBkb3dubG9hZFByb3h5ID0gcGFnZS5wcm9jZXNzKCkucHJvY2Vzc1Bvb2woKS5k
b3dubG9hZChwYWdlLndlYnNpdGVEYXRhU3RvcmUoKSwgJnBhZ2UsIFJlc291cmNlUmVxdWVzdCB7
IFN0cmluZzo6ZnJvbVVURjgodXJpKSB9KTsKICAgICBhdXRvIGRvd25sb2FkID0gd2Via2l0RG93
bmxvYWRDcmVhdGUoZG93bmxvYWRQcm94eSwgd2ViVmlldyk7CisjaWYgRU5BQkxFKDIwMjJfR0xJ
Ql9BUEkpCisgICAgZG93bmxvYWRQcm94eS5zZXREaWRTdGFydENhbGxiYWNrKFtzZXNzaW9uID0g
R1JlZlB0cjxXZWJLaXROZXR3b3JrU2Vzc2lvbj4geyB3ZWJWaWV3LT5wcml2LT5uZXR3b3JrU2Vz
c2lvbiB9LCBkb3dubG9hZCA9IGRvd25sb2FkLmdldCgpXShhdXRvKiBkb3dubG9hZFByb3h5KSB7
CisjZWxzZQogICAgIGRvd25sb2FkUHJveHkuc2V0RGlkU3RhcnRDYWxsYmFjayhbY29udGV4dCA9
IEdSZWZQdHI8V2ViS2l0V2ViQ29udGV4dD4geyB3ZWJWaWV3LT5wcml2LT5jb250ZXh0IH0sIGRv
d25sb2FkID0gZG93bmxvYWQuZ2V0KCldKGF1dG8qIGRvd25sb2FkUHJveHkpIHsKKyNlbmRpZgog
ICAgICAgICBpZiAoIWRvd25sb2FkUHJveHkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAg
ICAgd2Via2l0RG93bmxvYWRTdGFydGVkKGRvd25sb2FkKTsKKyNpZiBFTkFCTEUoMjAyMl9HTElC
X0FQSSkKKyAgICAgICAgd2Via2l0TmV0d29ya1Nlc3Npb25Eb3dubG9hZFN0YXJ0ZWQoc2Vzc2lv
bi5nZXQoKSwgZG93bmxvYWQpOworI2Vsc2UKICAgICAgICAgd2Via2l0V2ViQ29udGV4dERvd25s
b2FkU3RhcnRlZChjb250ZXh0LmdldCgpLCBkb3dubG9hZCk7CisjZW5kaWYKICAgICB9KTsKIAog
ICAgIHJldHVybiBkb3dubG9hZC5sZWFrUmVmKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmguaW4gYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmguaW4KaW5kZXggNjc1N2FmMzRiNTQxLi43
NmY1OTdlNTU0ZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGli
L1dlYktpdFdlYlZpZXcuaC5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xp
Yi9XZWJLaXRXZWJWaWV3LmguaW4KQEAgLTU0LDYgKzU0LDEwIEBACiAjaW5jbHVkZSA8QEFQSV9J
TkNMVURFX1BSRUZJWEAvV2ViS2l0V2Vic2l0ZVBvbGljaWVzLmg+CiAjaW5jbHVkZSA8QEFQSV9J
TkNMVURFX1BSRUZJWEAvV2ViS2l0V2luZG93UHJvcGVydGllcy5oPgogCisjaWYgRU5BQkxFKDIw
MjJfR0xJQl9BUEkpCisjaW5jbHVkZSA8QEFQSV9JTkNMVURFX1BSRUZJWEAvV2ViS2l0TmV0d29y
a1Nlc3Npb24uaD4KKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oR1RLKQogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0pTQmFzZS5oPgogI2luY2x1ZGUgPHdlYmtpdC9XZWJLaXRDb2xvckNob29zZXJS
ZXF1ZXN0Lmg+CkBAIC00MzIsOCArNDM2LDEwIEBAIFdFQktJVF9BUEkgV2ViS2l0V2ViVmlld0Jh
Y2tlbmQgKgogd2Via2l0X3dlYl92aWV3X2dldF9iYWNrZW5kICAgICAgICAgICAgICAgICAgICAg
ICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcpOwogI2VuZGlmCiAKKyNp
ZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiBXRUJLSVRfQVBJIGdib29sZWFuCiB3ZWJraXRfd2Vi
X3ZpZXdfaXNfZXBoZW1lcmFsICAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3
ICAgICAgICAgICAgICp3ZWJfdmlldyk7CisjZW5kaWYKIAogV0VCS0lUX0FQSSBnYm9vbGVhbgog
d2Via2l0X3dlYl92aWV3X2lzX2NvbnRyb2xsZWRfYnlfYXV0b21hdGlvbiAgICAgICAgICAoV2Vi
S2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcpOwpAQCAtNDQxLDggKzQ0NywxMyBAQCB3
ZWJraXRfd2ViX3ZpZXdfaXNfY29udHJvbGxlZF9ieV9hdXRvbWF0aW9uICAgICAgICAgIChXZWJL
aXRXZWJWaWV3CiBXRUJLSVRfQVBJIFdlYktpdEF1dG9tYXRpb25Ccm93c2luZ0NvbnRleHRQcmVz
ZW50YXRpb24KIHdlYmtpdF93ZWJfdmlld19nZXRfYXV0b21hdGlvbl9wcmVzZW50YXRpb25fdHlw
ZSAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3KTsKIAorI2lmIEVOQUJM
RSgyMDIyX0dMSUJfQVBJKQorV0VCS0lUX0FQSSBXZWJLaXROZXR3b3JrU2Vzc2lvbiAqCit3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X25ldHdvcmtfc2Vzc2lvbiAgICAgICAgICAgICAgICAgIChXZWJLaXRX
ZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7CisjZWxzZQogV0VCS0lUX0FQSSBXZWJLaXRX
ZWJzaXRlRGF0YU1hbmFnZXIgKgogd2Via2l0X3dlYl92aWV3X2dldF93ZWJzaXRlX2RhdGFfbWFu
YWdlciAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcpOwor
I2VuZGlmCiAKIFdFQktJVF9BUEkgV2ViS2l0V2ViQ29udGV4dCAqCiB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X2NvbnRleHQgICAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAg
ICAgICAgICp3ZWJfdmlldyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmNwcAppbmRleCAzMzk1OTM0
OTY5MGQuLjJmZWJjMjJmMmY5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuY3BwCkBAIC0yMSw2
ICsyMSw3IEBACiAjaW5jbHVkZSAiV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmgiCiAKICNpbmNs
dWRlICJXZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdEZhdmlj
b25EYXRhYmFzZVByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRJbml0aWFsaXplLmgiCiAjaW5j
bHVkZSAiV2ViS2l0TWVtb3J5UHJlc3N1cmVTZXR0aW5ncy5oIgogI2luY2x1ZGUgIldlYktpdE1l
bW9yeVByZXNzdXJlU2V0dGluZ3NQcml2YXRlLmgiCkBAIC05NCwxMSArOTUsMTUgQEAgc3RydWN0
IF9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJQcml2YXRlIHsKICAgICBHVW5pcXVlUHRyPGNoYXI+
IGJhc2VEYXRhRGlyZWN0b3J5OwogICAgIEdVbmlxdWVQdHI8Y2hhcj4gYmFzZUNhY2hlRGlyZWN0
b3J5OwogCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgR1JlZlB0cjxXZWJLaXRGYXZp
Y29uRGF0YWJhc2U+IGZhdmljb25EYXRhYmFzZTsKKyNlbmRpZgorCisjaWYgIUVOQUJMRSgyMDIy
X0dMSUJfQVBJKQogICAgIFdlYktpdFRMU0Vycm9yc1BvbGljeSB0bHNFcnJvcnNQb2xpY3k7CiAK
ICAgICBHUmVmUHRyPFdlYktpdENvb2tpZU1hbmFnZXI+IGNvb2tpZU1hbmFnZXI7CiAKLSNpZiAh
RU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAgICAgLy8gVGhlc2UgbWFudWFsIGRpcmVjdG9yeSBvdmVy
cmlkZXMgYXJlIGRlcHJlY2F0ZWQuIFBsZWFzZSBkb24ndCBhZGQgbW9yZS4KICAgICBHVW5pcXVl
UHRyPGNoYXI+IGxvY2FsU3RvcmFnZURpcmVjdG9yeTsKICAgICBHVW5pcXVlUHRyPGNoYXI+IGRp
c2tDYWNoZURpcmVjdG9yeTsKQEAgLTIxNywxMiArMjIyLDEyIEBAIHN0YXRpYyB2b2lkIHdlYmtp
dFdlYnNpdGVEYXRhTWFuYWdlclNldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJv
cElELCBjCiAgICAgfQogfQogCisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogc3RhdGljIHZv
aWQgd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyQ29uc3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQog
ewogICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9wYXJlbnRf
Y2xhc3MpLT5jb25zdHJ1Y3RlZChvYmplY3QpOwogCiAgICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5h
Z2VyUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9XRUJTSVRFX0RBVEFfTUFOQUdFUihvYmplY3QpLT5w
cml2OwotI2lmICFFTkFCTEUoMjAyMl9HTElCX0FQSSkKICAgICBpZiAocHJpdi0+YmFzZURhdGFE
aXJlY3RvcnkpIHsKICAgICAgICAgaWYgKCFwcml2LT5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkpCiAg
ICAgICAgICAgICBwcml2LT5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkucmVzZXQoZ19idWlsZF9maWxl
bmFtZShwcml2LT5iYXNlRGF0YURpcmVjdG9yeS5nZXQoKSwgImxvY2Fsc3RvcmFnZSIsIG51bGxw
dHIpKTsKQEAgLTI0NiwyMiArMjUxLDIzIEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYnNpdGVEYXRh
TWFuYWdlckNvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKICAgICAgICAgaWYgKCFwcml2LT5k
b21DYWNoZURpcmVjdG9yeSkKICAgICAgICAgICAgIHByaXYtPmRvbUNhY2hlRGlyZWN0b3J5LnJl
c2V0KGdfYnVpbGRfZmlsZW5hbWUocHJpdi0+YmFzZUNhY2hlRGlyZWN0b3J5LmdldCgpLCAiQ2Fj
aGVTdG9yYWdlIiwgbnVsbHB0cikpOwogICAgIH0KLSNlbmRpZgogCiAgICAgcHJpdi0+dGxzRXJy
b3JzUG9saWN5ID0gV0VCS0lUX1RMU19FUlJPUlNfUE9MSUNZX0ZBSUw7CiAgICAgaWYgKHByaXYt
PndlYnNpdGVEYXRhU3RvcmUpCiAgICAgICAgIHByaXYtPndlYnNpdGVEYXRhU3RvcmUtPnNldEln
bm9yZVRMU0Vycm9ycyhmYWxzZSk7CiB9CisjZW5kaWYKIAogc3RhdGljIHZvaWQgd2Via2l0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyX2NsYXNzX2luaXQoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyQ2xh
c3MqIGZpbmRDbGFzcykKIHsKICAgICB3ZWJraXRJbml0aWFsaXplKCk7CiAKICAgICBHT2JqZWN0
Q2xhc3MqIGdPYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGZpbmRDbGFzcyk7Ci0KICAgICBn
T2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFBy
b3BlcnR5OwogICAgIGdPYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0V2Vic2l0ZURh
dGFNYW5hZ2VyU2V0UHJvcGVydHk7CisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogICAgIGdP
YmplY3RDbGFzcy0+Y29uc3RydWN0ZWQgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJDb25zdHJ1
Y3RlZDsKKyNlbmRpZgogCiAgICAgLyoqCiAgICAgICogV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2Vy
OmJhc2UtZGF0YS1kaXJlY3Rvcnk6CkBAIC01MDUsMTIgKzUxMSwyMyBAQCBXZWJLaXQ6OldlYnNp
dGVEYXRhU3RvcmUmIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShXZWJLaXRX
ZWJzaXRlRGF0YQogICAgICAgICAgICAgY29uZmlndXJhdGlvbi0+c2V0Q2FjaGVTdG9yYWdlRGly
ZWN0b3J5KEZpbGVTeXN0ZW06OnN0cmluZ0Zyb21GaWxlU3lzdGVtUmVwcmVzZW50YXRpb24ocHJp
di0+ZG9tQ2FjaGVEaXJlY3RvcnkuZ2V0KCkpKTsKICNlbmRpZgogICAgICAgICBwcml2LT53ZWJz
aXRlRGF0YVN0b3JlID0gV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGUoV1RGTW92ZShj
b25maWd1cmF0aW9uKSwgUEFMOjpTZXNzaW9uSUQ6OmdlbmVyYXRlUGVyc2lzdGVudFNlc3Npb25J
RCgpKTsKKyNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAgICAgICAgIHByaXYtPndlYnNpdGVE
YXRhU3RvcmUtPnNldElnbm9yZVRMU0Vycm9ycyhwcml2LT50bHNFcnJvcnNQb2xpY3kgPT0gV0VC
S0lUX1RMU19FUlJPUlNfUE9MSUNZX0lHTk9SRSk7CisjZW5kaWYKICAgICB9CiAKICAgICByZXR1
cm4gKnByaXYtPndlYnNpdGVEYXRhU3RvcmU7CiB9CiAKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQ
SSkKK1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyQ3Jl
YXRlKEdVbmlxdWVQdHI8Y2hhcj4mJiBiYXNlRGF0YURpcmVjdG9yeSwgR1VuaXF1ZVB0cjxjaGFy
PiYmIGJhc2VDYWNoZURpcmVjdG9yeSkKK3sKKyAgICBhdXRvKiBtYW5hZ2VyID0gV0VCS0lUX1dF
QlNJVEVfREFUQV9NQU5BR0VSKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJTSVRFX0RBVEFf
TUFOQUdFUiwgbnVsbHB0cikpOworICAgIG1hbmFnZXItPnByaXYtPmJhc2VEYXRhRGlyZWN0b3J5
ID0gV1RGTW92ZShiYXNlRGF0YURpcmVjdG9yeSk7CisgICAgbWFuYWdlci0+cHJpdi0+YmFzZUNh
Y2hlRGlyZWN0b3J5ID0gV1RGTW92ZShiYXNlQ2FjaGVEaXJlY3RvcnkpOworICAgIHJldHVybiBt
YW5hZ2VyOworfQorI2Vsc2UKIC8qKgogICogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX25l
dzoKICAqIEBmaXJzdF9vcHRpb25fbmFtZTogbmFtZSBvZiB0aGUgZmlyc3Qgb3B0aW9uIHRvIHNl
dApAQCAtNTQ5LDYgKzU2Niw3IEBAIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogd2Via2l0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyX25ld19lcGhlbWVyYWwoKQogewogICAgIHJldHVybiBXRUJLSVRf
V0VCU0lURV9EQVRBX01BTkFHRVIoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQlNJVEVfREFU
QV9NQU5BR0VSLCAiaXMtZXBoZW1lcmFsIiwgVFJVRSwgbnVsbHB0cikpOwogfQorI2VuZGlmCiAK
IC8qKgogICogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2lzX2VwaGVtZXJhbDoKQEAgLTgz
OCw3ICs4NTYsNiBAQCBjb25zdCBnY2hhciogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dl
dF9kb21fY2FjaGVfZGlyZWN0b3J5KFdlYktpdFdlYnNpdGVEYQogICAgICAgICBwcml2LT5kb21D
YWNoZURpcmVjdG9yeS5yZXNldChnX3N0cmR1cChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmRl
ZmF1bHRDYWNoZVN0b3JhZ2VEaXJlY3RvcnkoKS51dGY4KCkuZGF0YSgpKSk7CiAgICAgcmV0dXJu
IHByaXYtPmRvbUNhY2hlRGlyZWN0b3J5LmdldCgpOwogfQotI2VuZGlmCiAKIC8qKgogICogd2Vi
a2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9jb29raWVfbWFuYWdlcjoKQEAgLTEwMTUsNiAr
MTAzMiw5MiBAQCB2b2lkIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9zZXRfbmV0d29ya19w
cm94eV9zZXR0aW5ncyhXZWJLaXRXZWJzaXRlRGF0YU1hbgogICAgICAgICBicmVhazsKICAgICB9
CiB9CisjZW5kaWYKKworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorc3RhdGljIFN0cmluZyB3
ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRGYXZpY29uRGF0YWJhc2VQYXRoKFdlYktpdFdlYnNp
dGVEYXRhTWFuYWdlciogbWFuYWdlcikKK3sKKyAgICBpZiAod2Via2l0X3dlYnNpdGVfZGF0YV9t
YW5hZ2VyX2lzX2VwaGVtZXJhbChtYW5hZ2VyKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAg
IGlmIChtYW5hZ2VyLT5wcml2LT5iYXNlQ2FjaGVEaXJlY3RvcnkpCisgICAgICAgIHJldHVybiBG
aWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnRzKEZpbGVTeXN0ZW06OnN0cmluZ0Zy
b21GaWxlU3lzdGVtUmVwcmVzZW50YXRpb24obWFuYWdlci0+cHJpdi0+YmFzZUNhY2hlRGlyZWN0
b3J5LmdldCgpKSwgeyAiaWNvbmRhdGFiYXNlIl9zLCAiV2VicGFnZUljb25zLmRiIl9zIH0pOwor
CisgICAgYXV0byBwcm9ncmFtTmFtZSA9IFtdKCkgLT4gU3RyaW5nIHsKKyAgICAgICAgaWYgKGF1
dG8qIHByZ25hbWUgPSBnX2dldF9wcmduYW1lKCkpCisgICAgICAgICAgICByZXR1cm4gU3RyaW5n
Ojpmcm9tVVRGOChwcmduYW1lKTsKKyNpZiBQTEFURk9STShHVEspCisgICAgICAgIHJldHVybiAi
d2Via2l0Z3RrIl9zOworI2VsaWYgUExBVEZPUk0oV1BFKQorICAgICAgICByZXR1cm4gIndwZSJf
czsKKyNlbmRpZgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH07
CisgICAgcmV0dXJuIEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudHMoRmlsZVN5
c3RlbTo6dXNlckNhY2hlRGlyZWN0b3J5KCksIHsgcHJvZ3JhbU5hbWUoKSwgImljb25kYXRhYmFz
ZSJfcywgIldlYnBhZ2VJY29ucy5kYiJfcyB9KTsKK30KKworLyoqCisgKiB3ZWJraXRfd2Vic2l0
ZV9kYXRhX21hbmFnZXJfc2V0X2Zhdmljb25zX2VuYWJsZWQ6CisgKiBAbWFuYWdlcjogYSAjV2Vi
S2l0V2Vic2l0ZURhdGFNYW5hZ2VyCisgKiBAZW5hYmxlZDogdmFsdWUgdG8gc2V0CisgKgorICog
U2V0IHdoZXRoZXIgd2Vic2l0ZSBpY29ucyBhcmUgZW5hYmxlZC4gV2Vic2l0ZSBpY29ucyBhcmUg
ZW5hYmxlZCBieSBkZWZhdWx0LgorICogV2hlbiB3ZWJzaXRlIGljb25zIGFyZSBkaXNhYmxlZCwg
dGhlICNXZWJLaXRGYXZpY29uRGF0YWJhc2Ugb2YgQG1hbmFnZXIgaXMgY2xvc2VkCisgKiBpdHMg
cmVmZXJlbmNlIHJlbW92ZWQsIHNvIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfZmF2
aWNvbl9kYXRhYmFzZSgpIHdpbGwKKyAqIHJldHVybiAlTlVMTC4gSWYgd2Vic2l0ZSBpY29ucyBh
cmUgZW5hYmxlZCBhZ2FpbiwgYSBuZXcgI1dlYktpdEZhdmljb25EYXRhYmFzZSB3aWxsCisgKiBi
ZSBjcmVhdGVkLgorICoKKyAqIFNpbmNlOiAyLjQwCisgKi8KK3ZvaWQgd2Via2l0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyX3NldF9mYXZpY29uc19lbmFibGVkKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdl
ciogbWFuYWdlciwgZ2Jvb2xlYW4gZW5hYmxlZCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9JU19XRUJTSVRFX0RBVEFfTUFOQUdFUihtYW5hZ2VyKSk7CisKKyAgICBpZiAoZW5hYmxl
ZCkgeworICAgICAgICBpZiAoIW1hbmFnZXItPnByaXYtPmZhdmljb25EYXRhYmFzZSkKKyAgICAg
ICAgICAgIG1hbmFnZXItPnByaXYtPmZhdmljb25EYXRhYmFzZSA9IGFkb3B0R1JlZih3ZWJraXRG
YXZpY29uRGF0YWJhc2VDcmVhdGUoKSk7CisgICAgICAgIGF1dG8gcGF0aCA9IHdlYmtpdFdlYnNp
dGVEYXRhTWFuYWdlckdldEZhdmljb25EYXRhYmFzZVBhdGgobWFuYWdlcik7CisgICAgICAgIHdl
YmtpdEZhdmljb25EYXRhYmFzZU9wZW4obWFuYWdlci0+cHJpdi0+ZmF2aWNvbkRhdGFiYXNlLmdl
dCgpLCBwYXRoLCBwYXRoLmlzTnVsbCgpKTsKKyAgICB9IGVsc2UgaWYgKG1hbmFnZXItPnByaXYt
PmZhdmljb25EYXRhYmFzZSkgeworICAgICAgICB3ZWJraXRGYXZpY29uRGF0YWJhc2VDbG9zZSht
YW5hZ2VyLT5wcml2LT5mYXZpY29uRGF0YWJhc2UuZ2V0KCkpOworICAgICAgICBtYW5hZ2VyLT5w
cml2LT5mYXZpY29uRGF0YWJhc2UgPSBudWxscHRyOworICAgIH0KK30KKworLyoqCisgKiB3ZWJr
aXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Zhdmljb25zX2VuYWJsZWQ6CisgKiBAbWFuYWdl
cjogYSAjV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyCisgKgorICogR2V0IHdoZXRoZXIgd2Vic2l0
ZSBpY29ucyBhcmUgZW5hYmxlZC4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiB3ZWJzaXRlIGlj
b25zIGFyZSBlbmFibGVkLCBvciAlRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAqIFNpbmNlOiAyLjQw
CisgKi8KK2dib29sZWFuIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfZmF2aWNvbnNf
ZW5hYmxlZChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIG1hbmFnZXIpCit7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQlNJVEVfREFUQV9NQU5BR0VSKG1hbmFnZXIpLCBG
QUxTRSk7CisKKyAgICByZXR1cm4gISFtYW5hZ2VyLT5wcml2LT5mYXZpY29uRGF0YWJhc2U7Cit9
CisKKy8qKgorICogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9mYXZpY29uX2RhdGFi
YXNlOgorICogQG1hbmFnZXI6IGEgI1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlcgorICoKKyAqIEdl
dCB0aGUgI1dlYktpdEZhdmljb25EYXRhYmFzZSBvZiBAbWFuYWdlci4KKyAqCisgKiBSZXR1cm5z
OiAodHJhbnNmZXIgbm9uZSkgKG51bGxhYmxlKTogYSAjV2ViS2l0RmF2aWNvbkRhdGFiYXNlLCBv
ciAlTlVMTCBpZiB3ZWJzaXRlIGljb25zIGFyZSBkaXNhYmxlZAorICoKKyAqIFNpbmNlOiAyLjQw
CisgKi8KK1dlYktpdEZhdmljb25EYXRhYmFzZSogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X2dldF9mYXZpY29uX2RhdGFiYXNlKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogbWFuYWdlcikK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCU0lURV9EQVRBX01BTkFH
RVIobWFuYWdlciksIG51bGxwdHIpOworCisgICAgcmV0dXJuIG1hbmFnZXItPnByaXYtPmZhdmlj
b25EYXRhYmFzZS5nZXQoKTsKK30KKyNlbmRpZgogCiBzdGF0aWMgT3B0aW9uU2V0PFdlYnNpdGVE
YXRhVHlwZT4gdG9XZWJzaXRlRGF0YVR5cGVzKFdlYktpdFdlYnNpdGVEYXRhVHlwZXMgdHlwZXMp
CiB7CkBAIC0xMjQ3LDYgKzEzNTAsNyBAQCBzdHJ1Y3QgX1dlYktpdElUUEZpcnN0UGFydHkgewog
ICAgIGludCByZWZlcmVuY2VDb3VudCB7IDEgfTsKIH07CiAKKyNpZiAhRU5BQkxFKDIwMjJfR0xJ
Ql9BUEkpCiAvKioKICAqIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9zZXRfbWVtb3J5X3By
ZXNzdXJlX3NldHRpbmdzOgogICogQHNldHRpbmdzOiBhIFdlYktpdE1lbW9yeVByZXNzdXJlU2V0
dGluZ3MuCkBAIC0xMjcyLDYgKzEzNzYsNyBAQCB2b2lkIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFu
YWdlcl9zZXRfbWVtb3J5X3ByZXNzdXJlX3NldHRpbmdzKFdlYktpdE1lbW9yeVByZXNzdQogICAg
IHN0ZDo6b3B0aW9uYWw8TWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpDb25maWd1cmF0aW9uPiBjb25m
aWcgPSBzZXR0aW5ncyA/IHN0ZDo6bWFrZV9vcHRpb25hbCh3ZWJraXRNZW1vcnlQcmVzc3VyZVNl
dHRpbmdzR2V0TWVtb3J5UHJlc3N1cmVIYW5kbGVyQ29uZmlndXJhdGlvbihzZXR0aW5ncykpIDog
c3RkOjpudWxsb3B0OwogICAgIFdlYlByb2Nlc3NQb29sOjpzZXROZXR3b3JrUHJvY2Vzc01lbW9y
eVByZXNzdXJlSGFuZGxlckNvbmZpZ3VyYXRpb24oY29uZmlnKTsKIH0KKyNlbmRpZgogCiBHX0RF
RklORV9CT1hFRF9UWVBFKFdlYktpdElUUEZpcnN0UGFydHksIHdlYmtpdF9pdHBfZmlyc3RfcGFy
dHksIHdlYmtpdF9pdHBfZmlyc3RfcGFydHlfcmVmLCB3ZWJraXRfaXRwX2ZpcnN0X3BhcnR5X3Vu
cmVmKQogCkBAIC0xNDEwLDcgKzE1MTUsNyBAQCBzdHJ1Y3QgX1dlYktpdElUUFRoaXJkUGFydHkg
ewogCiBHX0RFRklORV9CT1hFRF9UWVBFKFdlYktpdElUUFRoaXJkUGFydHksIHdlYmtpdF9pdHBf
dGhpcmRfcGFydHksIHdlYmtpdF9pdHBfdGhpcmRfcGFydHlfcmVmLCB3ZWJraXRfaXRwX3RoaXJk
X3BhcnR5X3VucmVmKQogCi1zdGF0aWMgV2ViS2l0SVRQVGhpcmRQYXJ0eSogd2Via2l0SVRQVGhp
cmRQYXJ0eUNyZWF0ZShXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlE
YXRhJiYgZGF0YSkKK1dlYktpdElUUFRoaXJkUGFydHkqIHdlYmtpdElUUFRoaXJkUGFydHlDcmVh
dGUoV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YSYmIGRhdGEp
CiB7CiAgICAgYXV0byogdGhpcmRQYXJ0eSA9IHN0YXRpY19jYXN0PFdlYktpdElUUFRoaXJkUGFy
dHkqPihmYXN0TWFsbG9jKHNpemVvZihXZWJLaXRJVFBUaGlyZFBhcnR5KSkpOwogICAgIG5ldyAo
dGhpcmRQYXJ0eSkgV2ViS2l0SVRQVGhpcmRQYXJ0eShXVEZNb3ZlKGRhdGEpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRhTWFu
YWdlci5oLmluIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyLmguaW4KaW5kZXggNDE0ODcyMmE3NjliLi5hNGRlNWQ1NjBlYTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYnNpdGVEYXRh
TWFuYWdlci5oLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktp
dFdlYnNpdGVEYXRhTWFuYWdlci5oLmluCkBAIC0yNSw2ICsyNSw5IEBACiAjaW5jbHVkZSA8Z2lv
L2dpby5oPgogI2luY2x1ZGUgPEBBUElfSU5DTFVERV9QUkVGSVhAL1dlYktpdENvb2tpZU1hbmFn
ZXIuaD4KICNpbmNsdWRlIDxAQVBJX0lOQ0xVREVfUFJFRklYQC9XZWJLaXREZWZpbmVzLmg+Cisj
aWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisjaW5jbHVkZSA8QEFQSV9JTkNMVURFX1BSRUZJWEAv
V2ViS2l0RmF2aWNvbkRhdGFiYXNlLmg+CisjZW5kaWYKICNpbmNsdWRlIDxAQVBJX0lOQ0xVREVf
UFJFRklYQC9XZWJLaXRNZW1vcnlQcmVzc3VyZVNldHRpbmdzLmg+CiAjaW5jbHVkZSA8QEFQSV9J
TkNMVURFX1BSRUZJWEAvV2ViS2l0TmV0d29ya1Byb3h5U2V0dGluZ3MuaD4KICNpbmNsdWRlIDxA
QVBJX0lOQ0xVREVfUFJFRklYQC9XZWJLaXRXZWJzaXRlRGF0YS5oPgpAQCAtNzcsMTEgKzgwLDEz
IEBAIHN0cnVjdCBfV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyQ2xhc3MgewogV0VCS0lUX0FQSSBH
VHlwZQogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF90eXBlICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICh2b2lkKTsKIAorI2lmICFFTkFCTEUoMjAyMl9HTElCX0FQSSkK
IFdFQktJVF9BUEkgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICoKIHdlYmtpdF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcl9uZXcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29u
c3QgZ2NoYXIgICAgICAgICAgICAgICpmaXJzdF9vcHRpb25fbmFtZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Li4uKTsKIFdFQktJVF9BUEkgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICoKIHdlYmtpdF93ZWJz
aXRlX2RhdGFfbWFuYWdlcl9uZXdfZXBoZW1lcmFsICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAodm9pZCk7CisjZW5kaWYKIAogV0VCS0lUX0FQSSBnYm9vbGVhbgogd2Via2l0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyX2lzX2VwaGVtZXJhbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChX
ZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIG1hbmFnZXIpOwpAQCAtOTIsNiArOTcsMTggQEAgd2Vi
a2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9iYXNlX2RhdGFfZGlyZWN0b3J5ICAgICAgICAg
ICAgICAgICAgIChXZWJLaXRXZWIKIFdFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgogd2Via2l0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9iYXNlX2NhY2hlX2RpcmVjdG9yeSAgICAgICAgICAgICAg
ICAgIChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIpOwogCisjaWYgRU5BQkxFKDIw
MjJfR0xJQl9BUEkpCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdl
cl9zZXRfZmF2aWNvbnNfZW5hYmxlZCAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyICptYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiAgICAgICAgICAg
ICAgICAgIGVuYWJsZWQpOworCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfd2Vic2l0ZV9k
YXRhX21hbmFnZXJfZ2V0X2Zhdmljb25zX2VuYWJsZWQgICAgICAgICAgICAgICAgICAgICAgKFdl
YktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlcik7CisKK1dFQktJVF9BUEkgV2ViS2l0RmF2
aWNvbkRhdGFiYXNlICoKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfZmF2aWNvbl9k
YXRhYmFzZSAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICpt
YW5hZ2VyKTsKKyNlbmRpZgorCiAjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogV0VCS0lUX0RF
UFJFQ0FURUQgY29uc3QgZ2NoYXIgKgogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9s
b2NhbF9zdG9yYWdlX2RpcmVjdG9yeSAgICAgICAgICAgICAgIChXZWJLaXRXZWJzaXRlRGF0YU1h
bmFnZXIgKm1hbmFnZXIpOwpAQCAtMTE5LDcgKzEzNiw2IEBAIHdlYmtpdF93ZWJzaXRlX2RhdGFf
bWFuYWdlcl9nZXRfc2VydmljZV93b3JrZXJfcmVnaXN0cmF0aW9uc19kaXJlY3RvcnkoV2ViS2l0
V2ViCiAKIFdFQktJVF9ERVBSRUNBVEVEIGNvbnN0IGdjaGFyICoKIHdlYmtpdF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcl9nZXRfZG9tX2NhY2hlX2RpcmVjdG9yeSAgICAgICAgICAgICAgICAgICAoV2Vi
S2l0V2Vic2l0ZURhdGFNYW5hZ2VyICptYW5hZ2VyKTsKLSNlbmRpZgogCiBXRUJLSVRfQVBJIFdl
YktpdENvb2tpZU1hbmFnZXIgKgogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9jb29r
aWVfbWFuYWdlciAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJzaXRlRGF0YU1hbmFn
ZXIgKm1hbmFnZXIpOwpAQCAtMTQ5LDYgKzE2NSw3IEBAIFdFQktJVF9BUEkgdm9pZAogd2Via2l0
X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX3NldF9uZXR3b3JrX3Byb3h5X3NldHRpbmdzICAgICAgICAg
ICAgICAgIChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdlYktpdE5ldHdvcmtQcm94eU1vZGUgICAgcHJveHlfbW9kZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2Vi
S2l0TmV0d29ya1Byb3h5U2V0dGluZ3MgKnByb3h5X3NldHRpbmdzKTsKKyNlbmRpZgogCiBXRUJL
SVRfQVBJIHZvaWQKIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9mZXRjaCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICptYW5h
Z2VyLApAQCAtMTg2LDggKzIwMywxMCBAQCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfY2xl
YXJfZmluaXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0FzeW5jUmVzdWx0ICAgICAgICAgICAgICpyZXN1bHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHRXJyb3IgICAgICAgICAgICAgICAgICAqKmVycm9yKTsKIAorI2lmICFFTkFCTEUoMjAyMl9H
TElCX0FQSSkKIFdFQktJVF9BUEkgdm9pZAogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX3Nl
dF9tZW1vcnlfcHJlc3N1cmVfc2V0dGluZ3MgICAgICAgICAgICAgICAoV2ViS2l0TWVtb3J5UHJl
c3N1cmVTZXR0aW5ncyAqc2V0dGluZ3MpOworI2VuZGlmCiAKIAogI2RlZmluZSBXRUJLSVRfVFlQ
RV9JVFBfRklSU1RfUEFSVFkgICAod2Via2l0X2l0cF9maXJzdF9wYXJ0eV9nZXRfdHlwZSgpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIv
V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZS5oCmluZGV4IGZjOWU4MjI2ZmJiOC4uODY2
YWNhYTc3MDA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9X
ZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZS5oCkBAIC0xOSw2
ICsxOSwxMiBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIldlYlJlc291cmNlTG9hZFN0
YXRpc3RpY3NTdG9yZS5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRhU3RvcmUuaCIKKyNpbmNsdWRl
IDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CiAKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKK1dl
YktpdFdlYnNpdGVEYXRhTWFuYWdlciogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyQ3JlYXRlKEdV
bmlxdWVQdHI8Y2hhcj4mJiwgR1VuaXF1ZVB0cjxjaGFyPiYmKTsKKyNlbmRpZgogV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlJiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUoV2Vi
S2l0V2Vic2l0ZURhdGFNYW5hZ2VyKik7CitXZWJLaXRJVFBUaGlyZFBhcnR5KiB3ZWJraXRJVFBU
aGlyZFBhcnR5Q3JlYXRlKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpU
aGlyZFBhcnR5RGF0YSYmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9nbGliL3dlYmtpdC5oLmluIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvd2Vi
a2l0LmguaW4KaW5kZXggNDdiNjViYzdmMGQxLi4zNThlNjVjMDk1YmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL3dlYmtpdC5oLmluCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL3dlYmtpdC5oLmluCkBAIC03Niw2ICs3Niw5IEBACiAj
aW5jbHVkZSA8QEFQSV9JTkNMVURFX1BSRUZJWEAvV2ViS2l0TmF2aWdhdGlvbkFjdGlvbi5oPgog
I2luY2x1ZGUgPEBBUElfSU5DTFVERV9QUkVGSVhAL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNp
c2lvbi5oPgogI2luY2x1ZGUgPEBBUElfSU5DTFVERV9QUkVGSVhAL1dlYktpdE5ldHdvcmtQcm94
eVNldHRpbmdzLmg+CisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisjaW5jbHVkZSA8QEFQSV9J
TkNMVURFX1BSRUZJWEAvV2ViS2l0TmV0d29ya1Nlc3Npb24uaD4KKyNlbmRpZgogI2luY2x1ZGUg
PEBBUElfSU5DTFVERV9QUkVGSVhAL1dlYktpdE5vdGlmaWNhdGlvbi5oPgogI2luY2x1ZGUgPEBB
UElfSU5DTFVERV9QUkVGSVhAL1dlYktpdE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0Lmg+
CiAjaW5jbHVkZSA8QEFQSV9JTkNMVURFX1BSRUZJWEAvV2ViS2l0T3B0aW9uTWVudS5oPgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3R3Rr
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0d0ay5j
cHAKaW5kZXggMTAzNzJkZTM4ZDBiLi4wYzA0ZjFkZGRmOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0d0ay5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3R3RrLmNwcApAQCAtMzUxLDcg
KzM1MSw5IEBAIEd0a1dpZGdldCogd2Via2l0X3dlYl92aWV3X25ld193aXRoX2NvbnRleHQoV2Vi
S2l0V2ViQ29udGV4dCogY29udGV4dCkKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
SVNfV0VCX0NPTlRFWFQoY29udGV4dCksIDApOwogCiAgICAgcmV0dXJuIEdUS19XSURHRVQoZ19v
YmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9WSUVXLAorI2lmICFFTkFCTEUoMjAyMl9HTElCX0FQ
SSkKICAgICAgICAgImlzLWVwaGVtZXJhbCIsIHdlYmtpdF93ZWJfY29udGV4dF9pc19lcGhlbWVy
YWwoY29udGV4dCksCisjZW5kaWYKICAgICAgICAgIndlYi1jb250ZXh0IiwgY29udGV4dCwKICAg
ICAgICAgbnVsbHB0cikpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL3dwZS9XZWJLaXRXZWJWaWV3V1BFLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS93cGUvV2ViS2l0V2ViVmlld1dQRS5jcHAKaW5kZXggZDRhMzgxYmRlNjhiLi40NjgzM2YzMzU1
NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0V2Vi
Vmlld1dQRS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRX
ZWJWaWV3V1BFLmNwcApAQCAtMTA5LDcgKzEwOSw5IEBAIFdlYktpdFdlYlZpZXcqIHdlYmtpdF93
ZWJfdmlld19uZXdfd2l0aF9jb250ZXh0KFdlYktpdFdlYlZpZXdCYWNrZW5kKiBiYWNrZW5kLCBX
CiAKICAgICByZXR1cm4gV0VCS0lUX1dFQl9WSUVXKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9X
RUJfVklFVywKICAgICAgICAgImJhY2tlbmQiLCBiYWNrZW5kLAorI2lmICFFTkFCTEUoMjAyMl9H
TElCX0FQSSkKICAgICAgICAgImlzLWVwaGVtZXJhbCIsIHdlYmtpdF93ZWJfY29udGV4dF9pc19l
cGhlbWVyYWwoY29udGV4dCksCisjZW5kaWYKICAgICAgICAgIndlYi1jb250ZXh0IiwgY29udGV4
dCwKICAgICAgICAgbnVsbHB0cikpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcAppbmRleCA3ODNlZjdlNDdl
NDAuLmRjYmJkNTA0MzE1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAKQEAgLTI1Myw3ICsyNTMsNyBAQCBT
T0F1dGhvcml6YXRpb25Db29yZGluYXRvciYgV2Vic2l0ZURhdGFTdG9yZTo6c29BdXRob3JpemF0
aW9uQ29vcmRpbmF0b3IoY29uc3QgVwogCiBzdGF0aWMgUmVmPE5ldHdvcmtQcm9jZXNzUHJveHk+
IG5ldHdvcmtQcm9jZXNzRm9yU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0j
aWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXUEUpCisjaWYgKChQTEFURk9STShHVEspIHx8
IFBMQVRGT1JNKFdQRSkpICYmICFFTkFCTEUoMjAyMl9HTElCX0FQSSkpCiAgICAgaWYgKHNlc3Np
b25JRC5pc0VwaGVtZXJhbCgpKSB7CiAgICAgICAgIC8vIFJldXNlIGEgcHJldmlvdXMgcGVyc2lz
dGVudCBzZXNzaW9uIG5ldHdvcmsgcHJvY2VzcyBmb3IgZXBoZW1lcmFsIHNlc3Npb25zLgogICAg
ICAgICBmb3IgKGF1dG8qIGRhdGFTdG9yZSA6IGFsbERhdGFTdG9yZXMoKS52YWx1ZXMoKSkgewpk
aWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJUYWIuYyBiL1Rvb2xzL01p
bmlCcm93c2VyL2d0ay9Ccm93c2VyVGFiLmMKaW5kZXggYzAyMjQ3YWVlZmY2Li44YTc5Mjg3ZjQ0
MjAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9Ccm93c2VyVGFiLmMKKysrIGIv
VG9vbHMvTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJUYWIuYwpAQCAtMjE4LDcgKzIxOCwxMSBAQCBz
dGF0aWMgdm9pZCB0bHNFcnJvcnNEaWFsb2dSZXNwb25zZShHdGtXaWRnZXQgKmRpYWxvZywgZ2lu
dCByZXNwb25zZSwgQnJvd3NlclRhYgogICAgICAgICBHVGxzQ2VydGlmaWNhdGUgKmNlcnRpZmlj
YXRlID0gKEdUbHNDZXJ0aWZpY2F0ZSAqKWdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKGRpYWxv
ZyksICJjZXJ0aWZpY2F0ZSIpOwogI2lmIFNPVVBfQ0hFQ0tfVkVSU0lPTigyLCA5MSwgMCkKICAg
ICAgICAgR1VyaSAqdXJpID0gZ191cmlfcGFyc2UoZmFpbGluZ1VSSSwgU09VUF9IVFRQX1VSSV9G
TEFHUywgTlVMTCk7CisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgOTgsIDUpCisgICAgICAgIHdl
YmtpdF9uZXR3b3JrX3Nlc3Npb25fYWxsb3dfdGxzX2NlcnRpZmljYXRlX2Zvcl9ob3N0KHdlYmtp
dF93ZWJfdmlld19nZXRfbmV0d29ya19zZXNzaW9uKHRhYi0+d2ViVmlldyksIGNlcnRpZmljYXRl
LCBnX3VyaV9nZXRfaG9zdCh1cmkpKTsKKyNlbHNlCiAgICAgICAgIHdlYmtpdF93ZWJfY29udGV4
dF9hbGxvd190bHNfY2VydGlmaWNhdGVfZm9yX2hvc3Qod2Via2l0X3dlYl92aWV3X2dldF9jb250
ZXh0KHRhYi0+d2ViVmlldyksIGNlcnRpZmljYXRlLCBnX3VyaV9nZXRfaG9zdCh1cmkpKTsKKyNl
bmRpZgogICAgICAgICBnX3VyaV91bnJlZih1cmkpOwogI2Vsc2UKICAgICAgICAgU291cFVSSSAq
dXJpID0gc291cF91cmlfbmV3KGZhaWxpbmdVUkkpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJy
b3dzZXIvZ3RrL0Jyb3dzZXJXaW5kb3cuYyBiL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9Ccm93c2Vy
V2luZG93LmMKaW5kZXggODgxNjA5YzlmZThmLi4zNzAxMDAzMmZmYjkgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL01pbmlCcm93c2VyL2d0ay9Ccm93c2VyV2luZG93LmMKKysrIGIvVG9vbHMvTWluaUJyb3dz
ZXIvZ3RrL0Jyb3dzZXJXaW5kb3cuYwpAQCAtNDAsNiArNDAsOSBAQCBzdHJ1Y3QgX0Jyb3dzZXJX
aW5kb3cgewogICAgIEd0a0FwcGxpY2F0aW9uV2luZG93IHBhcmVudDsKIAogICAgIFdlYktpdFdl
YkNvbnRleHQgKndlYkNvbnRleHQ7CisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgOTgsIDApCisg
ICAgV2ViS2l0TmV0d29ya1Nlc3Npb24gKm5ldHdvcmtTZXNzaW9uOworI2VuZGlmCiAKICAgICBH
dGtXaWRnZXQgKm1haW5Cb3g7CiAgICAgR3RrV2lkZ2V0ICp0b29sYmFyOwpAQCAtMTU5LDcgKzE2
MiwxMSBAQCBzdGF0aWMgdm9pZCB3ZWJWaWV3VGl0bGVDaGFuZ2VkKFdlYktpdFdlYlZpZXcgKndl
YlZpZXcsIEdQYXJhbVNwZWMgKnBzcGVjLCBCcm93cwogICAgIGNoYXIgKnByaXZhdGVUaXRsZSA9
IE5VTEw7CiAgICAgaWYgKHdlYmtpdF93ZWJfdmlld19pc19jb250cm9sbGVkX2J5X2F1dG9tYXRp
b24od2ViVmlldykpCiAgICAgICAgIHByaXZhdGVUaXRsZSA9IGdfc3RyZHVwX3ByaW50ZigiW0F1
dG9tYXRpb25dICVzIiwgdGl0bGUpOworI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDk4LCAwKQor
ICAgIGVsc2UgaWYgKHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25faXNfZXBoZW1lcmFsKHdlYmtpdF93
ZWJfdmlld19nZXRfbmV0d29ya19zZXNzaW9uKHdlYlZpZXcpKSkKKyNlbHNlCiAgICAgZWxzZSBp
ZiAod2Via2l0X3dlYl92aWV3X2lzX2VwaGVtZXJhbCh3ZWJWaWV3KSkKKyNlbmRpZgogICAgICAg
ICBwcml2YXRlVGl0bGUgPSBnX3N0cmR1cF9wcmludGYoIltQcml2YXRlXSAlcyIsIHRpdGxlKTsK
ICAgICBndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lORE9XKHdpbmRvdyksIHByaXZhdGVUaXRs
ZSA/IHByaXZhdGVUaXRsZSA6IHRpdGxlKTsKICAgICBnX2ZyZWUocHJpdmF0ZVRpdGxlKTsKQEAg
LTE4NSw5ICsxOTIsOSBAQCBzdGF0aWMgdm9pZCB3ZWJWaWV3TG9hZFByb2dyZXNzQ2hhbmdlZChX
ZWJLaXRXZWJWaWV3ICp3ZWJWaWV3LCBHUGFyYW1TcGVjICpwc3BlYwogICAgIH0KIH0KIAorI2lm
ICFHVEtfQ0hFQ0tfVkVSU0lPTigzLCA5OCwgMCkKIHN0YXRpYyB2b2lkIGRvd25sb2FkU3RhcnRl
ZChXZWJLaXRXZWJDb250ZXh0ICp3ZWJDb250ZXh0LCBXZWJLaXREb3dubG9hZCAqZG93bmxvYWQs
IEJyb3dzZXJXaW5kb3cgKndpbmRvdykKIHsKLSNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMywgOTgs
IDApCiAgICAgaWYgKCF3aW5kb3ctPmRvd25sb2Fkc0JhcikgewogICAgICAgICB3aW5kb3ctPmRv
d25sb2Fkc0JhciA9IGJyb3dzZXJfZG93bmxvYWRzX2Jhcl9uZXcoKTsKICAgICAgICAgZ3RrX2Jv
eF9wYWNrX3N0YXJ0KEdUS19CT1god2luZG93LT5tYWluQm94KSwgd2luZG93LT5kb3dubG9hZHNC
YXIsIEZBTFNFLCBGQUxTRSwgMCk7CkBAIC0xOTYsOCArMjAzLDggQEAgc3RhdGljIHZvaWQgZG93
bmxvYWRTdGFydGVkKFdlYktpdFdlYkNvbnRleHQgKndlYkNvbnRleHQsIFdlYktpdERvd25sb2Fk
ICpkb3dubG8KICAgICAgICAgZ3RrX3dpZGdldF9zaG93KHdpbmRvdy0+ZG93bmxvYWRzQmFyKTsK
ICAgICB9CiAgICAgYnJvd3Nlcl9kb3dubG9hZHNfYmFyX2FkZF9kb3dubG9hZChCUk9XU0VSX0RP
V05MT0FEU19CQVIod2luZG93LT5kb3dubG9hZHNCYXIpLCBkb3dubG9hZCk7Ci0jZW5kaWYKIH0K
KyNlbmRpZgogCiBzdGF0aWMgdm9pZCBicm93c2VyV2luZG93SGlzdG9yeUl0ZW1BY3RpdmF0ZWQo
QnJvd3NlcldpbmRvdyAqd2luZG93LCBHVmFyaWFudCAqcGFyYW1ldGVyLCBHQWN0aW9uICphY3Rp
b24pCiB7CkBAIC00NTgsNyArNDY1LDExIEBAIHN0YXRpYyBHdGtXaWRnZXQgKndlYlZpZXdDcmVh
dGUoV2ViS2l0V2ViVmlldyAqd2ViVmlldywgV2ViS2l0TmF2aWdhdGlvbkFjdGlvbiAqCiAgICAg
V2ViS2l0V2ViVmlldyAqbmV3V2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3ZWJraXRfd2ViX3Zp
ZXdfbmV3X3dpdGhfcmVsYXRlZF92aWV3KHdlYlZpZXcpKTsKICAgICB3ZWJraXRfd2ViX3ZpZXdf
c2V0X3NldHRpbmdzKG5ld1dlYlZpZXcsIHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2Vi
VmlldykpOwogCisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgOTgsIDApCisgICAgR3RrV2lkZ2V0
ICpuZXdXaW5kb3cgPSBicm93c2VyX3dpbmRvd19uZXcoR1RLX1dJTkRPVyh3aW5kb3cpLCB3aW5k
b3ctPndlYkNvbnRleHQsIHdpbmRvdy0+bmV0d29ya1Nlc3Npb24pOworI2Vsc2UKICAgICBHdGtX
aWRnZXQgKm5ld1dpbmRvdyA9IGJyb3dzZXJfd2luZG93X25ldyhHVEtfV0lORE9XKHdpbmRvdyks
IHdpbmRvdy0+d2ViQ29udGV4dCk7CisjZW5kaWYKICAgICBndGtfd2luZG93X3NldF9hcHBsaWNh
dGlvbihHVEtfV0lORE9XKG5ld1dpbmRvdyksIGd0a193aW5kb3dfZ2V0X2FwcGxpY2F0aW9uKEdU
S19XSU5ET1cod2luZG93KSkpOwogICAgIGJyb3dzZXJfd2luZG93X2FwcGVuZF92aWV3KEJST1dT
RVJfV0lORE9XKG5ld1dpbmRvdyksIG5ld1dlYlZpZXcpOwogICAgIGd0a193aWRnZXRfZ3JhYl9m
b2N1cyhHVEtfV0lER0VUKG5ld1dlYlZpZXcpKTsKQEAgLTUwNCw2ICs1MTUsOSBAQCBzdGF0aWMg
Z2Jvb2xlYW4gd2ViVmlld0RlY2lkZVBvbGljeShXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3LCBXZWJL
aXRQb2xpY3lEZWNpc2lvbgogICAgIC8qIE9wZW5pbmcgYSBuZXcgdGFiIGlmIGxpbmsgY2xpY2tl
ZCB3aXRoIHRoZSBtaWRkbGUgYnV0dG9uLiAqLwogICAgIFdlYktpdFdlYlZpZXcgKm5ld1dlYlZp
ZXcgPSBXRUJLSVRfV0VCX1ZJRVcoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9WSUVXLAog
ICAgICAgICAid2ViLWNvbnRleHQiLCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQod2ViVmll
dyksCisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgOTgsIDApCisgICAgICAgICJuZXR3b3JrLXNl
c3Npb24iLCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X25ldHdvcmtfc2Vzc2lvbih3ZWJWaWV3KSwKKyNl
bmRpZgogICAgICAgICAic2V0dGluZ3MiLCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHdl
YlZpZXcpLAogICAgICAgICAidXNlci1jb250ZW50LW1hbmFnZXIiLCB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X3VzZXJfY29udGVudF9tYW5hZ2VyKHdlYlZpZXcpLAogICAgICAgICAiaXMtY29udHJvbGxl
ZC1ieS1hdXRvbWF0aW9uIiwgd2Via2l0X3dlYl92aWV3X2lzX2NvbnRyb2xsZWRfYnlfYXV0b21h
dGlvbih3ZWJWaWV3KSwKQEAgLTc1Niw2ICs3NzAsOSBAQCBzdGF0aWMgdm9pZCBuZXdUYWJDYWxs
YmFjayhHU2ltcGxlQWN0aW9uICphY3Rpb24sIEdWYXJpYW50ICpwYXJhbWV0ZXIsIGdwb2ludGVy
CiAKICAgICBicm93c2VyX3dpbmRvd19hcHBlbmRfdmlldyh3aW5kb3csIFdFQktJVF9XRUJfVklF
VyhnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX1ZJRVcsCiAgICAgICAgICJ3ZWItY29udGV4
dCIsIHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dCh3ZWJWaWV3KSwKKyNpZiBHVEtfQ0hFQ0tf
VkVSU0lPTigzLCA5OCwgMCkKKyAgICAgICAgIm5ldHdvcmstc2Vzc2lvbiIsIHdpbmRvdy0+bmV0
d29ya1Nlc3Npb24sCisjZW5kaWYKICAgICAgICAgInNldHRpbmdzIiwgd2Via2l0X3dlYl92aWV3
X2dldF9zZXR0aW5ncyh3ZWJWaWV3KSwKICAgICAgICAgInVzZXItY29udGVudC1tYW5hZ2VyIiwg
d2Via2l0X3dlYl92aWV3X2dldF91c2VyX2NvbnRlbnRfbWFuYWdlcih3ZWJWaWV3KSwKICAgICAg
ICAgImlzLWNvbnRyb2xsZWQtYnktYXV0b21hdGlvbiIsIHdlYmtpdF93ZWJfdmlld19pc19jb250
cm9sbGVkX2J5X2F1dG9tYXRpb24od2ViVmlldyksCkBAIC03NzQsMTUgKzc5MSwzMyBAQCBzdGF0
aWMgdm9pZCBvcGVuUHJpdmF0ZVdpbmRvdyhHU2ltcGxlQWN0aW9uICphY3Rpb24sIEdWYXJpYW50
ICpwYXJhbWV0ZXIsIGdwb2ludAogewogICAgIEJyb3dzZXJXaW5kb3cgKndpbmRvdyA9IEJST1dT
RVJfV0lORE9XKHVzZXJEYXRhKTsKICAgICBXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3ID0gYnJvd3Nl
cl90YWJfZ2V0X3dlYl92aWV3KHdpbmRvdy0+YWN0aXZlVGFiKTsKKworI2lmIEdUS19DSEVDS19W
RVJTSU9OKDMsIDk4LCAwKQorICAgIFdlYktpdE5ldHdvcmtTZXNzaW9uICpuZXR3b3JrU2Vzc2lv
biA9IE5VTEw7CisgICAgaWYgKCF3ZWJraXRfd2ViX3ZpZXdfaXNfY29udHJvbGxlZF9ieV9hdXRv
bWF0aW9uKHdlYlZpZXcpKSB7CisgICAgICAgIG5ldHdvcmtTZXNzaW9uID0gd2Via2l0X25ldHdv
cmtfc2Vzc2lvbl9uZXdfZXBoZW1lcmFsKCk7CisgICAgICAgIHdlYmtpdF9uZXR3b3JrX3Nlc3Np
b25fc2V0X3Rsc19lcnJvcnNfcG9saWN5KG5ldHdvcmtTZXNzaW9uLCB3ZWJraXRfbmV0d29ya19z
ZXNzaW9uX2dldF90bHNfZXJyb3JzX3BvbGljeSh3aW5kb3ctPm5ldHdvcmtTZXNzaW9uKSk7Cisg
ICAgICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHB1YmxpYyBhcGkgdG8gZ2V0IHByb3h5IHNldHRpbmdz
LgorICAgIH0KKyNlbmRpZgogICAgIFdlYktpdFdlYlZpZXcgKm5ld1dlYlZpZXcgPSBXRUJLSVRf
V0VCX1ZJRVcoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9WSUVXLAogICAgICAgICAid2Vi
LWNvbnRleHQiLCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQod2ViVmlldyksCiAgICAgICAg
ICJzZXR0aW5ncyIsIHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldyksCiAgICAg
ICAgICJ1c2VyLWNvbnRlbnQtbWFuYWdlciIsIHdlYmtpdF93ZWJfdmlld19nZXRfdXNlcl9jb250
ZW50X21hbmFnZXIod2ViVmlldyksCisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgOTgsIDApCisg
ICAgICAgICJuZXR3b3JrLXNlc3Npb24iLCBuZXR3b3JrU2Vzc2lvbiwKKyNlbHNlCiAgICAgICAg
ICJpcy1lcGhlbWVyYWwiLCBUUlVFLAorI2VuZGlmCiAgICAgICAgICJpcy1jb250cm9sbGVkLWJ5
LWF1dG9tYXRpb24iLCB3ZWJraXRfd2ViX3ZpZXdfaXNfY29udHJvbGxlZF9ieV9hdXRvbWF0aW9u
KHdlYlZpZXcpLAogICAgICAgICAid2Vic2l0ZS1wb2xpY2llcyIsIHdlYmtpdF93ZWJfdmlld19n
ZXRfd2Vic2l0ZV9wb2xpY2llcyh3ZWJWaWV3KSwKICAgICAgICAgTlVMTCkpOworI2lmIEdUS19D
SEVDS19WRVJTSU9OKDMsIDk4LCAwKQorICAgIEd0a1dpZGdldCAqbmV3V2luZG93ID0gYnJvd3Nl
cl93aW5kb3dfbmV3KEdUS19XSU5ET1cod2luZG93KSwgd2luZG93LT53ZWJDb250ZXh0LCBuZXR3
b3JrU2Vzc2lvbik7CisgICAgZ19jbGVhcl9vYmplY3QoJm5ldHdvcmtTZXNzaW9uKTsKKyNlbHNl
CiAgICAgR3RrV2lkZ2V0ICpuZXdXaW5kb3cgPSBicm93c2VyX3dpbmRvd19uZXcoR1RLX1dJTkRP
Vyh3aW5kb3cpLCB3aW5kb3ctPndlYkNvbnRleHQpOworI2VuZGlmCiAgICAgZ3RrX3dpbmRvd19z
ZXRfYXBwbGljYXRpb24oR1RLX1dJTkRPVyhuZXdXaW5kb3cpLCBndGtfd2luZG93X2dldF9hcHBs
aWNhdGlvbihHVEtfV0lORE9XKHdpbmRvdykpKTsKICAgICBicm93c2VyX3dpbmRvd19hcHBlbmRf
dmlldyhCUk9XU0VSX1dJTkRPVyhuZXdXaW5kb3cpLCBuZXdXZWJWaWV3KTsKICAgICBndGtfd2lk
Z2V0X2dyYWJfZm9jdXMoR1RLX1dJREdFVChuZXdXZWJWaWV3KSk7CkBAIC05NjIsNiArOTk3LDEw
IEBAIHN0YXRpYyB2b2lkIGJyb3dzZXJXaW5kb3dGaW5hbGl6ZShHT2JqZWN0ICpnT2JqZWN0KQog
ICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZCh3aW5kb3ctPndlYkNvbnRl
eHQsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIE5VTEwsIE5VTEwsIHdpbmRvdyk7CiAgICAg
Z19vYmplY3RfdW5yZWYod2luZG93LT53ZWJDb250ZXh0KTsKIAorI2lmIEdUS19DSEVDS19WRVJT
SU9OKDMsIDk4LCA1KQorICAgIGdfY2xlYXJfb2JqZWN0KCZ3aW5kb3ctPm5ldHdvcmtTZXNzaW9u
KTsKKyNlbmRpZgorCiAgICAgaWYgKHdpbmRvdy0+ZmF2aWNvbikgewogICAgICAgICBnX29iamVj
dF91bnJlZih3aW5kb3ctPmZhdmljb24pOwogICAgICAgICB3aW5kb3ctPmZhdmljb24gPSBOVUxM
OwpAQCAtMTQ2MSw3ICsxNTAwLDExIEBAIHN0YXRpYyB2b2lkIGJyb3dzZXJfd2luZG93X2NsYXNz
X2luaXQoQnJvd3NlcldpbmRvd0NsYXNzICprbGFzcykKIH0KIAogLyogUHVibGljIEFQSS4gKi8K
KyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCA5OCwgMCkKK0d0a1dpZGdldCAqYnJvd3Nlcl93aW5k
b3dfbmV3KEd0a1dpbmRvdyAqcGFyZW50LCBXZWJLaXRXZWJDb250ZXh0ICp3ZWJDb250ZXh0LCBX
ZWJLaXROZXR3b3JrU2Vzc2lvbiAqbmV0d29ya1Nlc3Npb24pCisjZWxzZQogR3RrV2lkZ2V0ICpi
cm93c2VyX3dpbmRvd19uZXcoR3RrV2luZG93ICpwYXJlbnQsIFdlYktpdFdlYkNvbnRleHQgKndl
YkNvbnRleHQpCisjZW5kaWYKIHsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNf
V0VCX0NPTlRFWFQod2ViQ29udGV4dCksIE5VTEwpOwogCkBAIC0xNDcyLDcgKzE1MTUsMTIgQEAg
R3RrV2lkZ2V0ICpicm93c2VyX3dpbmRvd19uZXcoR3RrV2luZG93ICpwYXJlbnQsIFdlYktpdFdl
YkNvbnRleHQgKndlYkNvbnRleHQpCiAgICAgICAgIE5VTEwpKTsKIAogICAgIHdpbmRvdy0+d2Vi
Q29udGV4dCA9IGdfb2JqZWN0X3JlZih3ZWJDb250ZXh0KTsKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lP
TigzLCA5OCwgMCkKKyAgICB3aW5kb3ctPm5ldHdvcmtTZXNzaW9uID0gbmV0d29ya1Nlc3Npb24g
PyBnX29iamVjdF9yZWYobmV0d29ya1Nlc3Npb24pIDogTlVMTDsKKyNlbHNlCiAgICAgZ19zaWdu
YWxfY29ubmVjdCh3aW5kb3ctPndlYkNvbnRleHQsICJkb3dubG9hZC1zdGFydGVkIiwgR19DQUxM
QkFDSyhkb3dubG9hZFN0YXJ0ZWQpLCB3aW5kb3cpOworI2VuZGlmCisKICAgICBpZiAocGFyZW50
KSB7CiAgICAgICAgIHdpbmRvdy0+cGFyZW50V2luZG93ID0gcGFyZW50OwogICAgICAgICBnX29i
amVjdF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKHBhcmVudCksIChncG9pbnRlciAqKSZ3aW5k
b3ctPnBhcmVudFdpbmRvdyk7CkBAIC0xNDgxLDYgKzE1MjksMTUgQEAgR3RrV2lkZ2V0ICpicm93
c2VyX3dpbmRvd19uZXcoR3RrV2luZG93ICpwYXJlbnQsIFdlYktpdFdlYkNvbnRleHQgKndlYkNv
bnRleHQpCiAgICAgcmV0dXJuIEdUS19XSURHRVQod2luZG93KTsKIH0KIAorI2lmIEdUS19DSEVD
S19WRVJTSU9OKDMsIDk4LCAwKQorV2ViS2l0TmV0d29ya1Nlc3Npb24qIGJyb3dzZXJfd2luZG93
X2dldF9uZXR3b3JrX3Nlc3Npb24oQnJvd3NlcldpbmRvdyAqd2luZG93KQoreworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKEJST1dTRVJfSVNfV0lORE9XKHdpbmRvdyksIE5VTEwpOworCisgICAg
cmV0dXJuIHdpbmRvdy0+bmV0d29ya1Nlc3Npb247Cit9CisjZW5kaWYKKwogV2ViS2l0V2ViQ29u
dGV4dCAqYnJvd3Nlcl93aW5kb3dfZ2V0X3dlYl9jb250ZXh0KEJyb3dzZXJXaW5kb3cgKndpbmRv
dykKIHsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChCUk9XU0VSX0lTX1dJTkRPVyh3aW5kb3cp
LCBOVUxMKTsKQEAgLTE1NjgsNiArMTYyNSw5IEBAIHZvaWQgYnJvd3Nlcl93aW5kb3dfbG9hZF9z
ZXNzaW9uKEJyb3dzZXJXaW5kb3cgKndpbmRvdywgY29uc3QgY2hhciAqc2Vzc2lvbkZpbGUpCiAg
ICAgICAgIGlmICghd2ViVmlldykgewogICAgICAgICAgICAgd2ViVmlldyA9IFdFQktJVF9XRUJf
VklFVyhnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX1ZJRVcsCiAgICAgICAgICAgICAgICAg
IndlYi1jb250ZXh0Iiwgd2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KHByZXZpb3VzV2ViVmll
dyksCisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgOTgsIDApCisgICAgICAgICAgICAgICAgIm5l
dHdvcmstc2Vzc2lvbiIsIHdlYmtpdF93ZWJfdmlld19nZXRfbmV0d29ya19zZXNzaW9uKHByZXZp
b3VzV2ViVmlldyksCisjZW5kaWYKICAgICAgICAgICAgICAgICAic2V0dGluZ3MiLCB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3NldHRpbmdzKHByZXZpb3VzV2ViVmlldyksCiAgICAgICAgICAgICAgICAg
InVzZXItY29udGVudC1tYW5hZ2VyIiwgd2Via2l0X3dlYl92aWV3X2dldF91c2VyX2NvbnRlbnRf
bWFuYWdlcihwcmV2aW91c1dlYlZpZXcpLAogICAgICAgICAgICAgICAgICJ3ZWJzaXRlLXBvbGlj
aWVzIiwgd2Via2l0X3dlYl92aWV3X2dldF93ZWJzaXRlX3BvbGljaWVzKHByZXZpb3VzV2ViVmll
dyksCkBAIC0xNjM3LDcgKzE2OTcsMTEgQEAgV2ViS2l0V2ViVmlldyAqYnJvd3Nlcl93aW5kb3df
Z2V0X29yX2NyZWF0ZV93ZWJfdmlld19mb3JfYXV0b21hdGlvbihCcm93c2VyV2luZG8KICAgICAg
ICAgImlzLWNvbnRyb2xsZWQtYnktYXV0b21hdGlvbiIsIFRSVUUsCiAgICAgICAgICJ3ZWJzaXRl
LXBvbGljaWVzIiwgd2Via2l0X3dlYl92aWV3X2dldF93ZWJzaXRlX3BvbGljaWVzKHdlYlZpZXcp
LAogICAgICAgICBOVUxMKSk7CisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgOTgsIDApCisgICAg
R3RrV2lkZ2V0ICpuZXdXaW5kb3cgPSBicm93c2VyX3dpbmRvd19uZXcoR1RLX1dJTkRPVyh3aW5k
b3cpLCB3aW5kb3ctPndlYkNvbnRleHQsIHdpbmRvdy0+bmV0d29ya1Nlc3Npb24pOworI2Vsc2UK
ICAgICBHdGtXaWRnZXQgKm5ld1dpbmRvdyA9IGJyb3dzZXJfd2luZG93X25ldyhHVEtfV0lORE9X
KHdpbmRvdyksIHdpbmRvdy0+d2ViQ29udGV4dCk7CisjZW5kaWYKICAgICBndGtfd2luZG93X3Nl
dF9hcHBsaWNhdGlvbihHVEtfV0lORE9XKG5ld1dpbmRvdyksIGd0a193aW5kb3dfZ2V0X2FwcGxp
Y2F0aW9uKEdUS19XSU5ET1cod2luZG93KSkpOwogI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigzLCA5
OCwgMCkKICAgICBndGtfd2luZG93X3NldF9mb2N1c19vbl9tYXAoR1RLX1dJTkRPVyhuZXdXaW5k
b3cpLCBGQUxTRSk7CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9ndGsvQnJvd3Nlcldp
bmRvdy5oIGIvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL0Jyb3dzZXJXaW5kb3cuaAppbmRleCA3Mjgz
MTg3M2Q1ZmQuLmM1OGViYzJiZWVjNyAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvZ3Rr
L0Jyb3dzZXJXaW5kb3cuaAorKysgYi9Ub29scy9NaW5pQnJvd3Nlci9ndGsvQnJvd3NlcldpbmRv
dy5oCkBAIC01MCw3ICs1MCwxMiBAQCB0eXBlZGVmIHN0cnVjdCBfQnJvd3NlcldpbmRvd0NsYXNz
ICAgQnJvd3NlcldpbmRvd0NsYXNzOwogCiBHVHlwZSBicm93c2VyX3dpbmRvd19nZXRfdHlwZSh2
b2lkKTsKIAorI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDk4LCAwKQorR3RrV2lkZ2V0KiBicm93
c2VyX3dpbmRvd19uZXcoR3RrV2luZG93KiwgV2ViS2l0V2ViQ29udGV4dCosIFdlYktpdE5ldHdv
cmtTZXNzaW9uKik7CitXZWJLaXROZXR3b3JrU2Vzc2lvbiogYnJvd3Nlcl93aW5kb3dfZ2V0X25l
dHdvcmtfc2Vzc2lvbihCcm93c2VyV2luZG93Kik7CisjZWxzZQogR3RrV2lkZ2V0KiBicm93c2Vy
X3dpbmRvd19uZXcoR3RrV2luZG93KiwgV2ViS2l0V2ViQ29udGV4dCopOworI2VuZGlmCiBXZWJL
aXRXZWJDb250ZXh0KiBicm93c2VyX3dpbmRvd19nZXRfd2ViX2NvbnRleHQoQnJvd3NlcldpbmRv
dyopOwogdm9pZCBicm93c2VyX3dpbmRvd19hcHBlbmRfdmlldyhCcm93c2VyV2luZG93KiwgV2Vi
S2l0V2ViVmlldyopOwogdm9pZCBicm93c2VyX3dpbmRvd19sb2FkX3VyaShCcm93c2VyV2luZG93
KiwgY29uc3QgY2hhciAqdXJpKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9t
YWluLmMgYi9Ub29scy9NaW5pQnJvd3Nlci9ndGsvbWFpbi5jCmluZGV4IGE0MzYwMDFmM2U0Mi4u
MjE3MjZmMGMzOWI0IDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9ndGsvbWFpbi5jCisr
KyBiL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9tYWluLmMKQEAgLTk2LDYgKzk2LDkgQEAgc3RhdGlj
IFdlYktpdFdlYlZpZXcgKmNyZWF0ZUJyb3dzZXJUYWIoQnJvd3NlcldpbmRvdyAqd2luZG93LCBX
ZWJLaXRTZXR0aW5ncyAqd2UKIHsKICAgICBXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3ID0gV0VCS0lU
X1dFQl9WSUVXKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfVklFVywKICAgICAgICAgIndl
Yi1jb250ZXh0IiwgYnJvd3Nlcl93aW5kb3dfZ2V0X3dlYl9jb250ZXh0KHdpbmRvdyksCisjaWYg
R1RLX0NIRUNLX1ZFUlNJT04oMywgOTgsIDApCisgICAgICAgICJuZXR3b3JrLXNlc3Npb24iLCBi
cm93c2VyX3dpbmRvd19nZXRfbmV0d29ya19zZXNzaW9uKHdpbmRvdyksCisjZW5kaWYKICAgICAg
ICAgInNldHRpbmdzIiwgd2Via2l0U2V0dGluZ3MsCiAgICAgICAgICJ1c2VyLWNvbnRlbnQtbWFu
YWdlciIsIHVzZXJDb250ZW50TWFuYWdlciwKICAgICAgICAgImlzLWNvbnRyb2xsZWQtYnktYXV0
b21hdGlvbiIsIGF1dG9tYXRpb25Nb2RlLApAQCAtMzU0LDcgKzM1Nyw3IEBAIHN0YXRpYyB2b2lk
IHdlYnNpdGVEYXRhQ2xlYXJlZENhbGxiYWNrKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFu
YWdlciwgR0FzeW5jCiAgICAgICAgIHdlYmtpdF93ZWJfdmlld19yZWxvYWQod2Via2l0X3VyaV9z
Y2hlbWVfcmVxdWVzdF9nZXRfd2ViX3ZpZXcoZGF0YVJlcXVlc3QtPnJlcXVlc3QpKTsKIH0KIAot
c3RhdGljIHZvaWQgYWJvdXREYXRhU2NyaXB0TWVzc2FnZVJlY2VpdmVkQ2FsbGJhY2soV2ViS2l0
VXNlckNvbnRlbnRNYW5hZ2VyICp1c2VyQ29udGVudE1hbmFnZXIsIFdlYktpdEphdmFzY3JpcHRS
ZXN1bHQgKm1lc3NhZ2UsIFdlYktpdFdlYkNvbnRleHQgKndlYkNvbnRleHQpCitzdGF0aWMgdm9p
ZCBhYm91dERhdGFTY3JpcHRNZXNzYWdlUmVjZWl2ZWRDYWxsYmFjayhXZWJLaXRVc2VyQ29udGVu
dE1hbmFnZXIgKnVzZXJDb250ZW50TWFuYWdlciwgV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCAqbWVz
c2FnZSwgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICptYW5hZ2VyKQogewogICAgIGNoYXIgKm1l
c3NhZ2VTdHJpbmcgPSBqc2NfdmFsdWVfdG9fc3RyaW5nKHdlYmtpdF9qYXZhc2NyaXB0X3Jlc3Vs
dF9nZXRfanNfdmFsdWUobWVzc2FnZSkpOwogICAgIGNoYXIgKip0b2tlbnMgPSBnX3N0cnNwbGl0
KG1lc3NhZ2VTdHJpbmcsICI6IiwgMyk7CkBAIC0zNzMsNyArMzc2LDYgQEAgc3RhdGljIHZvaWQg
YWJvdXREYXRhU2NyaXB0TWVzc2FnZVJlY2VpdmVkQ2FsbGJhY2soV2ViS2l0VXNlckNvbnRlbnRN
YW5hZ2VyICp1c2UKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFdlYktpdFdlYnNpdGVE
YXRhTWFuYWdlciAqbWFuYWdlciA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfd2Vic2l0ZV9kYXRh
X21hbmFnZXIod2ViQ29udGV4dCk7CiAgICAgZ3VpbnQ2NCB0eXBlcyA9IGdfYXNjaWlfc3RydG91
bGwodG9rZW5zWzFdLCBOVUxMLCAxMCk7CiAgICAgaWYgKHRva2VuQ291bnQgPT0gMikKICAgICAg
ICAgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2NsZWFyKG1hbmFnZXIsIHR5cGVzLCAwLCBO
VUxMLCAoR0FzeW5jUmVhZHlDYWxsYmFjayl3ZWJzaXRlRGF0YUNsZWFyZWRDYWxsYmFjaywgZGF0
YVJlcXVlc3QpOwpAQCAtNDc1LDEwICs0NzcsMTUgQEAgc3RhdGljIHZvaWQgZ290V2Vic2l0ZURh
dGFDYWxsYmFjayhXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIsIEdBc3luY1Jlc3UK
ICAgICBnX2xpc3RfZnJlZV9mdWxsKGRhdGFMaXN0LCAoR0Rlc3Ryb3lOb3RpZnkpd2Via2l0X3dl
YnNpdGVfZGF0YV91bnJlZik7CiB9CiAKLXN0YXRpYyB2b2lkIGFib3V0RGF0YUhhbmRsZVJlcXVl
c3QoV2ViS2l0VVJJU2NoZW1lUmVxdWVzdCAqcmVxdWVzdCwgV2ViS2l0V2ViQ29udGV4dCAqd2Vi
Q29udGV4dCkKK3N0YXRpYyB2b2lkIGFib3V0RGF0YUhhbmRsZVJlcXVlc3QoV2ViS2l0VVJJU2No
ZW1lUmVxdWVzdCAqcmVxdWVzdCkKIHsKICAgICBBYm91dERhdGFSZXF1ZXN0ICpkYXRhUmVxdWVz
dCA9IGFib3V0RGF0YVJlcXVlc3ROZXcocmVxdWVzdCk7Ci0gICAgV2ViS2l0V2Vic2l0ZURhdGFN
YW5hZ2VyICptYW5hZ2VyID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF93ZWJzaXRlX2RhdGFfbWFu
YWdlcih3ZWJDb250ZXh0KTsKKyAgICBXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3ID0gd2Via2l0X3Vy
aV9zY2hlbWVfcmVxdWVzdF9nZXRfd2ViX3ZpZXcocmVxdWVzdCk7CisjaWYgR1RLX0NIRUNLX1ZF
UlNJT04oMywgOTgsIDApCisgICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICptYW5hZ2VyID0g
d2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIod2Via2l0X3dl
Yl92aWV3X2dldF9uZXR3b3JrX3Nlc3Npb24od2ViVmlldykpOworI2Vsc2UKKyAgICBXZWJLaXRX
ZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyKHdlYlZpZXcpOworI2VuZGlmCiAgICAgd2Via2l0X3dlYnNpdGVfZGF0YV9t
YW5hZ2VyX2ZldGNoKG1hbmFnZXIsIFdFQktJVF9XRUJTSVRFX0RBVEFfQUxMLCBOVUxMLCAoR0Fz
eW5jUmVhZHlDYWxsYmFjaylnb3RXZWJzaXRlRGF0YUNhbGxiYWNrLCBkYXRhUmVxdWVzdCk7CiB9
CiAKQEAgLTUzMCwxNCArNTM3LDE5IEBAIHN0YXRpYyB2b2lkIGdvdElUUFN1bW1hcnlDYWxsYmFj
ayhXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIsIEdBc3luY1Jlc3VsCiAgICAgYWJv
dXRJVFBSZXF1ZXN0RnJlZShpdHBSZXF1ZXN0KTsKIH0KIAotc3RhdGljIHZvaWQgYWJvdXRJVFBI
YW5kbGVSZXF1ZXN0KFdlYktpdFVSSVNjaGVtZVJlcXVlc3QgKnJlcXVlc3QsIFdlYktpdFdlYkNv
bnRleHQgKndlYkNvbnRleHQpCitzdGF0aWMgdm9pZCBhYm91dElUUEhhbmRsZVJlcXVlc3QoV2Vi
S2l0VVJJU2NoZW1lUmVxdWVzdCAqcmVxdWVzdCkKIHsKICAgICBBYm91dElUUFJlcXVlc3QgKml0
cFJlcXVlc3QgPSBhYm91dElUUFJlcXVlc3ROZXcocmVxdWVzdCk7Ci0gICAgV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyICptYW5hZ2VyID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcih3ZWJDb250ZXh0KTsKKyAgICBXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3ID0gd2Vi
a2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfd2ViX3ZpZXcocmVxdWVzdCk7CisjaWYgR1RLX0NI
RUNLX1ZFUlNJT04oMywgOTgsIDApCisgICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICptYW5h
Z2VyID0gd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIod2Vi
a2l0X3dlYl92aWV3X2dldF9uZXR3b3JrX3Nlc3Npb24od2ViVmlldykpOworI2Vsc2UKKyAgICBX
ZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyKHdlYlZpZXcpOworI2VuZGlmCiAgICAgd2Via2l0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyX2dldF9pdHBfc3VtbWFyeShtYW5hZ2VyLCBOVUxMLCAoR0FzeW5jUmVhZHlD
YWxsYmFjaylnb3RJVFBTdW1tYXJ5Q2FsbGJhY2ssIGl0cFJlcXVlc3QpOwogfQogCi1zdGF0aWMg
dm9pZCBhYm91dFVSSVNjaGVtZVJlcXVlc3RDYWxsYmFjayhXZWJLaXRVUklTY2hlbWVSZXF1ZXN0
ICpyZXF1ZXN0LCBXZWJLaXRXZWJDb250ZXh0ICp3ZWJDb250ZXh0KQorc3RhdGljIHZvaWQgYWJv
dXRVUklTY2hlbWVSZXF1ZXN0Q2FsbGJhY2soV2ViS2l0VVJJU2NoZW1lUmVxdWVzdCAqcmVxdWVz
dCwgZ3BvaW50ZXIgdXNlckRhdGEpCiB7CiAgICAgR0lucHV0U3RyZWFtICpzdHJlYW07CiAgICAg
Z3NpemUgc3RyZWFtTGVuZ3RoOwpAQCAtNTU3LDkgKzU2OSw5IEBAIHN0YXRpYyB2b2lkIGFib3V0
VVJJU2NoZW1lUmVxdWVzdENhbGxiYWNrKFdlYktpdFVSSVNjaGVtZVJlcXVlc3QgKnJlcXVlc3Qs
IFdlYktpCiAgICAgICAgIHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZmluaXNoKHJlcXVlc3Qs
IHN0cmVhbSwgc3RyZWFtTGVuZ3RoLCAidGV4dC9odG1sIik7CiAgICAgICAgIGdfb2JqZWN0X3Vu
cmVmKHN0cmVhbSk7CiAgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKHBhdGgsICJkYXRhIikpCi0g
ICAgICAgIGFib3V0RGF0YUhhbmRsZVJlcXVlc3QocmVxdWVzdCwgd2ViQ29udGV4dCk7CisgICAg
ICAgIGFib3V0RGF0YUhhbmRsZVJlcXVlc3QocmVxdWVzdCk7CiAgICAgZWxzZSBpZiAoIWdfc3Ry
Y21wMChwYXRoLCAiaXRwIikpCi0gICAgICAgIGFib3V0SVRQSGFuZGxlUmVxdWVzdChyZXF1ZXN0
LCB3ZWJDb250ZXh0KTsKKyAgICAgICAgYWJvdXRJVFBIYW5kbGVSZXF1ZXN0KHJlcXVlc3QpOwog
ICAgIGVsc2UgewogICAgICAgICBlcnJvciA9IGdfZXJyb3JfbmV3KE1JTklfQlJPV1NFUl9FUlJP
UiwgTUlOSV9CUk9XU0VSX0VSUk9SX0lOVkFMSURfQUJPVVRfUEFUSCwgIkludmFsaWQgYWJvdXQ6
JXMgcGFnZS4iLCBwYXRoKTsKICAgICAgICAgd2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9maW5p
c2hfZXJyb3IocmVxdWVzdCwgZXJyb3IpOwpAQCAtNjYwLDYgKzY3Miw0NiBAQCBzdGF0aWMgdm9p
ZCBzdGFydHVwKEdBcHBsaWNhdGlvbiAqYXBwbGljYXRpb24pCiAKIHN0YXRpYyB2b2lkIGFjdGl2
YXRlKEdBcHBsaWNhdGlvbiAqYXBwbGljYXRpb24sIFdlYktpdFNldHRpbmdzICp3ZWJraXRTZXR0
aW5ncykKIHsKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCA5OCwgMCkKKyAgICBXZWJLaXROZXR3
b3JrU2Vzc2lvbiAqbmV0d29ya1Nlc3Npb24gPSBOVUxMOworICAgIGlmICghYXV0b21hdGlvbk1v
ZGUpIHsKKyAgICAgICAgaWYgKHByaXZhdGVNb2RlKQorICAgICAgICAgICAgbmV0d29ya1Nlc3Np
b24gPSB3ZWJraXRfbmV0d29ya19zZXNzaW9uX25ld19lcGhlbWVyYWwoKTsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBjaGFyICpkYXRhRGlyZWN0b3J5ID0gZ19idWlsZF9maWxlbmFtZShn
X2dldF91c2VyX2RhdGFfZGlyKCksICJ3ZWJraXRndGstIiBXRUJLSVRHVEtfQVBJX1ZFUlNJT04s
ICJNaW5pQnJvd3NlciIsIE5VTEwpOworICAgICAgICAgICAgY2hhciAqY2FjaGVEaXJlY3Rvcnkg
PSBnX2J1aWxkX2ZpbGVuYW1lKGdfZ2V0X3VzZXJfY2FjaGVfZGlyKCksICJ3ZWJraXRndGstIiBX
RUJLSVRHVEtfQVBJX1ZFUlNJT04sICJNaW5pQnJvd3NlciIsIE5VTEwpOworICAgICAgICAgICAg
bmV0d29ya1Nlc3Npb24gPSB3ZWJraXRfbmV0d29ya19zZXNzaW9uX25ldyhkYXRhRGlyZWN0b3J5
LCBjYWNoZURpcmVjdG9yeSk7CisgICAgICAgICAgICBnX2ZyZWUoZGF0YURpcmVjdG9yeSk7Cisg
ICAgICAgICAgICBnX2ZyZWUoY2FjaGVEaXJlY3RvcnkpOworICAgICAgICB9CisKKyAgICAgICAg
d2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfaXRwX2VuYWJsZWQobmV0d29ya1Nlc3Npb24sIGVu
YWJsZUlUUCk7CisKKyAgICAgICAgaWYgKHByb3h5KSB7CisgICAgICAgICAgICBXZWJLaXROZXR3
b3JrUHJveHlTZXR0aW5ncyAqd2Via2l0UHJveHlTZXR0aW5ncyA9IHdlYmtpdF9uZXR3b3JrX3By
b3h5X3NldHRpbmdzX25ldyhwcm94eSwgaWdub3JlSG9zdHMpOworICAgICAgICAgICAgd2Via2l0
X25ldHdvcmtfc2Vzc2lvbl9zZXRfcHJveHlfc2V0dGluZ3MobmV0d29ya1Nlc3Npb24sIFdFQktJ
VF9ORVRXT1JLX1BST1hZX01PREVfQ1VTVE9NLCB3ZWJraXRQcm94eVNldHRpbmdzKTsKKyAgICAg
ICAgICAgIHdlYmtpdF9uZXR3b3JrX3Byb3h5X3NldHRpbmdzX2ZyZWUod2Via2l0UHJveHlTZXR0
aW5ncyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaWdub3JlVExTRXJyb3JzKQorICAgICAg
ICAgICAgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfdGxzX2Vycm9yc19wb2xpY3kobmV0d29y
a1Nlc3Npb24sIFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9JR05PUkUpOworCisgICAgICAgIGlm
IChjb29raWVzUG9saWN5KSB7CisgICAgICAgICAgICBXZWJLaXRDb29raWVNYW5hZ2VyICpjb29r
aWVNYW5hZ2VyID0gd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfY29va2llX21hbmFnZXIobmV0
d29ya1Nlc3Npb24pOworICAgICAgICAgICAgR0VudW1DbGFzcyAqZW51bUNsYXNzID0gZ190eXBl
X2NsYXNzX3JlZihXRUJLSVRfVFlQRV9DT09LSUVfQUNDRVBUX1BPTElDWSk7CisgICAgICAgICAg
ICBHRW51bVZhbHVlICplbnVtVmFsdWUgPSBnX2VudW1fZ2V0X3ZhbHVlX2J5X25pY2soZW51bUNs
YXNzLCBjb29raWVzUG9saWN5KTsKKyAgICAgICAgICAgIGlmIChlbnVtVmFsdWUpCisgICAgICAg
ICAgICAgICAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX3NldF9hY2NlcHRfcG9saWN5KGNvb2tpZU1h
bmFnZXIsIGVudW1WYWx1ZS0+dmFsdWUpOworICAgICAgICAgICAgZ190eXBlX2NsYXNzX3VucmVm
KGVudW1DbGFzcyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY29va2llc0ZpbGUgJiYgIXdl
YmtpdF9uZXR3b3JrX3Nlc3Npb25faXNfZXBoZW1lcmFsKG5ldHdvcmtTZXNzaW9uKSkgeworICAg
ICAgICAgICAgV2ViS2l0Q29va2llTWFuYWdlciAqY29va2llTWFuYWdlciA9IHdlYmtpdF9uZXR3
b3JrX3Nlc3Npb25fZ2V0X2Nvb2tpZV9tYW5hZ2VyKG5ldHdvcmtTZXNzaW9uKTsKKyAgICAgICAg
ICAgIFdlYktpdENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlIHN0b3JhZ2VUeXBlID0gZ19zdHJfaGFz
X3N1ZmZpeChjb29raWVzRmlsZSwgIi50eHQiKSA/IFdFQktJVF9DT09LSUVfUEVSU0lTVEVOVF9T
VE9SQUdFX1RFWFQgOiBXRUJLSVRfQ09PS0lFX1BFUlNJU1RFTlRfU1RPUkFHRV9TUUxJVEU7Cisg
ICAgICAgICAgICB3ZWJraXRfY29va2llX21hbmFnZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZShj
b29raWVNYW5hZ2VyLCBjb29raWVzRmlsZSwgc3RvcmFnZVR5cGUpOworICAgICAgICB9CisgICAg
fQorI2Vsc2UKICAgICBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXI7CiAgICAgaWYg
KHByaXZhdGVNb2RlIHx8IGF1dG9tYXRpb25Nb2RlKQogICAgICAgICBtYW5hZ2VyID0gd2Via2l0
X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX25ld19lcGhlbWVyYWwoKTsKQEAgLTY4MSwyMSArNzMzLDI2
IEBAIHN0YXRpYyB2b2lkIGFjdGl2YXRlKEdBcHBsaWNhdGlvbiAqYXBwbGljYXRpb24sIFdlYktp
dFNldHRpbmdzICp3ZWJraXRTZXR0aW5ncykKIAogICAgIGlmIChpZ25vcmVUTFNFcnJvcnMpCiAg
ICAgICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9zZXRfdGxzX2Vycm9yc19wb2xpY3ko
bWFuYWdlciwgV0VCS0lUX1RMU19FUlJPUlNfUE9MSUNZX0lHTk9SRSk7CisjZW5kaWYKIAotICAg
IFdlYktpdFdlYkNvbnRleHQgKndlYkNvbnRleHQgPSBnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVf
V0VCX0NPTlRFWFQsICJ3ZWJzaXRlLWRhdGEtbWFuYWdlciIsIG1hbmFnZXIsCisgICAgV2ViS2l0
V2ViQ29udGV4dCAqd2ViQ29udGV4dCA9IGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfQ09O
VEVYVCwKICNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMywgOTgsIDApCisgICAgICAgICJ3ZWJzaXRl
LWRhdGEtbWFuYWdlciIsIG1hbmFnZXIsCiAgICAgICAgICJwcm9jZXNzLXN3YXAtb24tY3Jvc3Mt
c2l0ZS1uYXZpZ2F0aW9uLWVuYWJsZWQiLCBUUlVFLAogICAgICAgICAidXNlLXN5c3RlbS1hcHBl
YXJhbmNlLWZvci1zY3JvbGxiYXJzIiwgRkFMU0UsCiAjZW5kaWYKICAgICAgICAgInRpbWUtem9u
ZS1vdmVycmlkZSIsIHRpbWVab25lLAogICAgICAgICBOVUxMKTsKKyNpZiAhR1RLX0NIRUNLX1ZF
UlNJT04oMywgOTgsIDApCiAgICAgZ19vYmplY3RfdW5yZWYobWFuYWdlcik7CisjZW5kaWYKIAog
I2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigzLCA5OCwgMCkKICAgICBpZiAoZW5hYmxlU2FuZGJveCkK
ICAgICAgICAgd2Via2l0X3dlYl9jb250ZXh0X3NldF9zYW5kYm94X2VuYWJsZWQod2ViQ29udGV4
dCwgVFJVRSk7CiAjZW5kaWYKIAorI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigzLCA5OCwgMCkKICAg
ICBpZiAoY29va2llc1BvbGljeSkgewogICAgICAgICBXZWJLaXRDb29raWVNYW5hZ2VyICpjb29r
aWVNYW5hZ2VyID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF9jb29raWVfbWFuYWdlcih3ZWJDb250
ZXh0KTsKICAgICAgICAgR0VudW1DbGFzcyAqZW51bUNsYXNzID0gZ190eXBlX2NsYXNzX3JlZihX
RUJLSVRfVFlQRV9DT09LSUVfQUNDRVBUX1BPTElDWSk7CkBAIC03MTAsMTUgKzc2NywyNCBAQCBz
dGF0aWMgdm9pZCBhY3RpdmF0ZShHQXBwbGljYXRpb24gKmFwcGxpY2F0aW9uLCBXZWJLaXRTZXR0
aW5ncyAqd2Via2l0U2V0dGluZ3MpCiAgICAgICAgIFdlYktpdENvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlIHN0b3JhZ2VUeXBlID0gZ19zdHJfaGFzX3N1ZmZpeChjb29raWVzRmlsZSwgIi50eHQiKSA/
IFdFQktJVF9DT09LSUVfUEVSU0lTVEVOVF9TVE9SQUdFX1RFWFQgOiBXRUJLSVRfQ09PS0lFX1BF
UlNJU1RFTlRfU1RPUkFHRV9TUUxJVEU7CiAgICAgICAgIHdlYmtpdF9jb29raWVfbWFuYWdlcl9z
ZXRfcGVyc2lzdGVudF9zdG9yYWdlKGNvb2tpZU1hbmFnZXIsIGNvb2tpZXNGaWxlLCBzdG9yYWdl
VHlwZSk7CiAgICAgfQorI2VuZGlmCiAKLSAgICAvLyBFbmFibGUgdGhlIGZhdmljb24gZGF0YWJh
c2UsIGJ5IHNwZWNpZnlpbmcgdGhlIGRlZmF1bHQgZGlyZWN0b3J5LgorICAgIC8vIEVuYWJsZSB0
aGUgZmF2aWNvbiBkYXRhYmFzZS4gSW4gR1RLNCBBUEkgdGhleSBhcmUgZW5hYmxlZCBieSBkZWZh
dWx0LgorI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigzLCA5OCwgMCkKICAgICB3ZWJraXRfd2ViX2Nv
bnRleHRfc2V0X2Zhdmljb25fZGF0YWJhc2VfZGlyZWN0b3J5KHdlYkNvbnRleHQsIE5VTEwpOwor
I2VuZGlmCiAKLSAgICB3ZWJraXRfd2ViX2NvbnRleHRfcmVnaXN0ZXJfdXJpX3NjaGVtZSh3ZWJD
b250ZXh0LCBCUk9XU0VSX0FCT1VUX1NDSEVNRSwgKFdlYktpdFVSSVNjaGVtZVJlcXVlc3RDYWxs
YmFjaylhYm91dFVSSVNjaGVtZVJlcXVlc3RDYWxsYmFjaywgd2ViQ29udGV4dCwgTlVMTCk7Cisg
ICAgd2Via2l0X3dlYl9jb250ZXh0X3JlZ2lzdGVyX3VyaV9zY2hlbWUod2ViQ29udGV4dCwgQlJP
V1NFUl9BQk9VVF9TQ0hFTUUsIChXZWJLaXRVUklTY2hlbWVSZXF1ZXN0Q2FsbGJhY2spYWJvdXRV
UklTY2hlbWVSZXF1ZXN0Q2FsbGJhY2ssIE5VTEwsIE5VTEwpOwogCiAgICAgV2ViS2l0VXNlckNv
bnRlbnRNYW5hZ2VyICp1c2VyQ29udGVudE1hbmFnZXIgPSB3ZWJraXRfdXNlcl9jb250ZW50X21h
bmFnZXJfbmV3KCk7CiAgICAgd2Via2l0X3VzZXJfY29udGVudF9tYW5hZ2VyX3JlZ2lzdGVyX3Nj
cmlwdF9tZXNzYWdlX2hhbmRsZXIodXNlckNvbnRlbnRNYW5hZ2VyLCAiYWJvdXREYXRhIik7Ci0g
ICAgZ19zaWduYWxfY29ubmVjdCh1c2VyQ29udGVudE1hbmFnZXIsICJzY3JpcHQtbWVzc2FnZS1y
ZWNlaXZlZDo6YWJvdXREYXRhIiwgR19DQUxMQkFDSyhhYm91dERhdGFTY3JpcHRNZXNzYWdlUmVj
ZWl2ZWRDYWxsYmFjayksIHdlYkNvbnRleHQpOworICAgIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdl
ciAqZGF0YU1hbmFnZXI7CisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgOTgsIDApCisgICAgZGF0
YU1hbmFnZXIgPSBuZXR3b3JrU2Vzc2lvbiA/IHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyKG5ldHdvcmtTZXNzaW9uKSA6IE5VTEw7CisjZWxzZQorICAgIGRh
dGFNYW5hZ2VyID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcih3
ZWJDb250ZXh0KTsKKyNlbmRpZgorICAgIGdfc2lnbmFsX2Nvbm5lY3QodXNlckNvbnRlbnRNYW5h
Z2VyLCAic2NyaXB0LW1lc3NhZ2UtcmVjZWl2ZWQ6OmFib3V0RGF0YSIsIEdfQ0FMTEJBQ0soYWJv
dXREYXRhU2NyaXB0TWVzc2FnZVJlY2VpdmVkQ2FsbGJhY2spLCBkYXRhTWFuYWdlcik7CiAKICAg
ICBXZWJLaXRXZWJzaXRlUG9saWNpZXMgKmRlZmF1bHRXZWJzaXRlUG9saWNpZXMgPSB3ZWJraXRf
d2Vic2l0ZV9wb2xpY2llc19uZXdfd2l0aF9wb2xpY2llcygKICAgICAgICAgImF1dG9wbGF5Iiwg
YXV0b3BsYXlQb2xpY3ksCkBAIC03NTEsNyArODE3LDExIEBAIHN0YXRpYyB2b2lkIGFjdGl2YXRl
KEdBcHBsaWNhdGlvbiAqYXBwbGljYXRpb24sIFdlYktpdFNldHRpbmdzICp3ZWJraXRTZXR0aW5n
cykKICAgICB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2F1dG9tYXRpb25fYWxsb3dlZCh3ZWJDb250
ZXh0LCBhdXRvbWF0aW9uTW9kZSk7CiAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJDb250ZXh0LCAi
YXV0b21hdGlvbi1zdGFydGVkIiwgR19DQUxMQkFDSyhhdXRvbWF0aW9uU3RhcnRlZENhbGxiYWNr
KSwgYXBwbGljYXRpb24pOwogCisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgOTgsIDApCisgICAg
QnJvd3NlcldpbmRvdyAqbWFpbldpbmRvdyA9IEJST1dTRVJfV0lORE9XKGJyb3dzZXJfd2luZG93
X25ldyhOVUxMLCB3ZWJDb250ZXh0LCBuZXR3b3JrU2Vzc2lvbikpOworI2Vsc2UKICAgICBCcm93
c2VyV2luZG93ICptYWluV2luZG93ID0gQlJPV1NFUl9XSU5ET1coYnJvd3Nlcl93aW5kb3dfbmV3
KE5VTEwsIHdlYkNvbnRleHQpKTsKKyNlbmRpZgogICAgIGd0a19hcHBsaWNhdGlvbl9hZGRfd2lu
ZG93KEdUS19BUFBMSUNBVElPTihhcHBsaWNhdGlvbiksIEdUS19XSU5ET1cobWFpbldpbmRvdykp
OwogICAgIGlmIChkYXJrTW9kZSkKICAgICAgICAgZ19vYmplY3Rfc2V0KGd0a193aWRnZXRfZ2V0
X3NldHRpbmdzKEdUS19XSURHRVQobWFpbldpbmRvdykpLCAiZ3RrLWFwcGxpY2F0aW9uLXByZWZl
ci1kYXJrLXRoZW1lIiwgVFJVRSwgTlVMTCk7CkBAIC03OTUsNiArODY1LDkgQEAgc3RhdGljIHZv
aWQgYWN0aXZhdGUoR0FwcGxpY2F0aW9uICphcHBsaWNhdGlvbiwgV2ViS2l0U2V0dGluZ3MgKndl
YmtpdFNldHRpbmdzKQogICAgIGdfb2JqZWN0X3VucmVmKHdlYkNvbnRleHQpOwogICAgIGdfb2Jq
ZWN0X3VucmVmKHVzZXJDb250ZW50TWFuYWdlcik7CiAgICAgZ19vYmplY3RfdW5yZWYoZGVmYXVs
dFdlYnNpdGVQb2xpY2llcyk7CisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgOTgsIDApCisgICAg
Z19jbGVhcl9vYmplY3QoJm5ldHdvcmtTZXNzaW9uKTsKKyNlbmRpZgogCiAgICAgZ3RrX3dpZGdl
dF9ncmFiX2ZvY3VzKGZpcnN0VGFiKTsKICAgICBndGtfd2lkZ2V0X3Nob3coR1RLX1dJREdFVCht
YWluV2luZG93KSk7CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci93cGUvbWFpbi5jcHAg
Yi9Ub29scy9NaW5pQnJvd3Nlci93cGUvbWFpbi5jcHAKaW5kZXggYzM1MjY1MjBlYWVjLi5hNDAy
ODA2NzQxMTcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL3dwZS9tYWluLmNwcAorKysg
Yi9Ub29scy9NaW5pQnJvd3Nlci93cGUvbWFpbi5jcHAKQEAgLTc2LDggKzc2LDggQEAgc3RhdGlj
IGNvbnN0IEdPcHRpb25FbnRyeSBjb21tYW5kTGluZU9wdGlvbnNbXSA9CiAKIGNsYXNzIElucHV0
Q2xpZW50IGZpbmFsIDogcHVibGljIFdQRVRvb2xpbmdCYWNrZW5kczo6Vmlld0JhY2tlbmQ6Oklu
cHV0Q2xpZW50IHsKIHB1YmxpYzoKLSAgICBJbnB1dENsaWVudChHTWFpbkxvb3AqIGxvb3AsIFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcpCi0gICAgICAgIDogbV9sb29wKGxvb3ApCisgICAgSW5wdXRD
bGllbnQoR0FwcGxpY2F0aW9uKiBhcHBsaWNhdGlvbiwgV2ViS2l0V2ViVmlldyogd2ViVmlldykK
KyAgICAgICAgOiBtX2FwcGxpY2F0aW9uKGFwcGxpY2F0aW9uKQogICAgICAgICAsIG1fd2ViVmll
dyh3ZWJWaWV3KQogICAgIHsKICAgICB9CkBAIC04OCw3ICs4OCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBpZiAoZXZlbnQtPm1vZGlmaWVycyAmIHdw
ZV9pbnB1dF9rZXlib2FyZF9tb2RpZmllcl9jb250cm9sICYmIGV2ZW50LT5rZXlfY29kZSA9PSBX
UEVfS0VZX3EpIHsKLSAgICAgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9sb29wKTsKKyAgICAg
ICAgICAgIGdfYXBwbGljYXRpb25fcXVpdChtX2FwcGxpY2F0aW9uKTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CiAKQEAgLTEwOCw3ICsxMDgsNyBAQCBwdWJsaWM6CiAgICAg
fQogCiBwcml2YXRlOgotICAgIEdNYWluTG9vcCogbV9sb29wIHsgbnVsbHB0ciB9OworICAgIEdB
cHBsaWNhdGlvbiogbV9hcHBsaWNhdGlvbiB7IG51bGxwdHIgfTsKICAgICBXZWJLaXRXZWJWaWV3
KiBtX3dlYlZpZXcgeyBudWxscHRyIH07CiB9OwogCkBAIC0xODMsNTAgKzE4Myw0MiBAQCBzdGF0
aWMgV2ViS2l0V2ViVmlldyogY3JlYXRlV2ViVmlldyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBX
ZWJLaXROYXZpZ2F0aW9uQWN0aQogICAgIHJldHVybiBuZXdXZWJWaWV3OwogfQogCi1pbnQgbWFp
bihpbnQgYXJnYywgY2hhciAqYXJndltdKQorc3RhdGljIHZvaWQgYWN0aXZhdGUoR0FwcGxpY2F0
aW9uKiBhcHBsaWNhdGlvbiwgV1BFVG9vbGluZ0JhY2tlbmRzOjpWaWV3QmFja2VuZCogYmFja2Vu
ZCkKIHsKLSNpZiBFTkFCTEVfREVWRUxPUEVSX01PREUKLSAgICBnX3NldGVudigiV0VCS0lUX0lO
SkVDVEVEX0JVTkRMRV9QQVRIIiwgV0VCS0lUX0lOSkVDVEVEX0JVTkRMRV9QQVRILCBGQUxTRSk7
Ci0jZW5kaWYKLQotICAgIEdPcHRpb25Db250ZXh0KiBjb250ZXh0ID0gZ19vcHRpb25fY29udGV4
dF9uZXcobnVsbHB0cik7Ci0gICAgZ19vcHRpb25fY29udGV4dF9hZGRfbWFpbl9lbnRyaWVzKGNv
bnRleHQsIGNvbW1hbmRMaW5lT3B0aW9ucywgbnVsbHB0cik7Ci0KLSNpZiAhVVNFX0dTVFJFQU1F
Ul9GVUxMICYmIChFTkFCTEVfV0VCX0FVRElPIHx8IEVOQUJMRV9WSURFTykKLSAgICBnX29wdGlv
bl9jb250ZXh0X2FkZF9ncm91cChjb250ZXh0LCBnc3RfaW5pdF9nZXRfb3B0aW9uX2dyb3VwKCkp
OwotI2VuZGlmCi0KLSAgICBHRXJyb3IqIGVycm9yID0gbnVsbHB0cjsKLSAgICBpZiAoIWdfb3B0
aW9uX2NvbnRleHRfcGFyc2UoY29udGV4dCwgJmFyZ2MsICZhcmd2LCAmZXJyb3IpKSB7Ci0gICAg
ICAgIGdfcHJpbnRlcnIoIkNhbm5vdCBwYXJzZSBhcmd1bWVudHM6ICVzXG4iLCBlcnJvci0+bWVz
c2FnZSk7Ci0gICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7Ci0gICAgICAgIGdfb3B0aW9uX2Nv
bnRleHRfZnJlZShjb250ZXh0KTsKKyAgICBnX2FwcGxpY2F0aW9uX2hvbGQoYXBwbGljYXRpb24p
OworI2lmIEVOQUJMRV8yMDIyX0dMSUJfQVBJCisgICAgV2ViS2l0TmV0d29ya1Nlc3Npb24qIG5l
dHdvcmtTZXNzaW9uID0gbnVsbHB0cjsKKyAgICBpZiAoIWF1dG9tYXRpb25Nb2RlKSB7CisgICAg
ICAgIG5ldHdvcmtTZXNzaW9uID0gcHJpdmF0ZU1vZGUgPyB3ZWJraXRfbmV0d29ya19zZXNzaW9u
X25ld19lcGhlbWVyYWwoKSA6IHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fbmV3KG51bGxwdHIsIG51
bGxwdHIpOworICAgICAgICB3ZWJraXRfbmV0d29ya19zZXNzaW9uX3NldF9pdHBfZW5hYmxlZChu
ZXR3b3JrU2Vzc2lvbiwgZW5hYmxlSVRQKTsKKworICAgICAgICBpZiAocHJveHkpIHsKKyAgICAg
ICAgICAgIGF1dG8qIHdlYmtpdFByb3h5U2V0dGluZ3MgPSB3ZWJraXRfbmV0d29ya19wcm94eV9z
ZXR0aW5nc19uZXcocHJveHksIGlnbm9yZUhvc3RzKTsKKyAgICAgICAgICAgIHdlYmtpdF9uZXR3
b3JrX3Nlc3Npb25fc2V0X3Byb3h5X3NldHRpbmdzKG5ldHdvcmtTZXNzaW9uLCBXRUJLSVRfTkVU
V09SS19QUk9YWV9NT0RFX0NVU1RPTSwgd2Via2l0UHJveHlTZXR0aW5ncyk7CisgICAgICAgICAg
ICB3ZWJraXRfbmV0d29ya19wcm94eV9zZXR0aW5nc19mcmVlKHdlYmtpdFByb3h5U2V0dGluZ3Mp
OworICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIGdfb3B0aW9uX2Nv
bnRleHRfZnJlZShjb250ZXh0KTsKKyAgICAgICAgaWYgKGlnbm9yZVRMU0Vycm9ycykKKyAgICAg
ICAgICAgIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fc2V0X3Rsc19lcnJvcnNfcG9saWN5KG5ldHdv
cmtTZXNzaW9uLCBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfSUdOT1JFKTsKIAotICAgIGlmIChw
cmludFZlcnNpb24pIHsKLSAgICAgICAgZ19wcmludCgiV1BFIFdlYktpdCAldS4ldS4ldSIsCi0g
ICAgICAgICAgICB3ZWJraXRfZ2V0X21ham9yX3ZlcnNpb24oKSwKLSAgICAgICAgICAgIHdlYmtp
dF9nZXRfbWlub3JfdmVyc2lvbigpLAotICAgICAgICAgICAgd2Via2l0X2dldF9taWNyb192ZXJz
aW9uKCkpOwotICAgICAgICBpZiAoZ19zdHJjbXAwKEJVSUxEX1JFVklTSU9OLCAidGFyYmFsbCIp
KQotICAgICAgICAgICAgZ19wcmludCgiICglcykiLCBCVUlMRF9SRVZJU0lPTik7Ci0gICAgICAg
IGdfcHJpbnQoIlxuIik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGF1dG8qIGxv
b3AgPSBnX21haW5fbG9vcF9uZXcobnVsbHB0ciwgRkFMU0UpOworICAgICAgICBpZiAoY29va2ll
c1BvbGljeSkgeworICAgICAgICAgICAgYXV0byogY29va2llTWFuYWdlciA9IHdlYmtpdF9uZXR3
b3JrX3Nlc3Npb25fZ2V0X2Nvb2tpZV9tYW5hZ2VyKG5ldHdvcmtTZXNzaW9uKTsKKyAgICAgICAg
ICAgIGF1dG8qIGVudW1DbGFzcyA9IHN0YXRpY19jYXN0PEdFbnVtQ2xhc3MqPihnX3R5cGVfY2xh
c3NfcmVmKFdFQktJVF9UWVBFX0NPT0tJRV9BQ0NFUFRfUE9MSUNZKSk7CisgICAgICAgICAgICBH
RW51bVZhbHVlKiBlbnVtVmFsdWUgPSBnX2VudW1fZ2V0X3ZhbHVlX2J5X25pY2soZW51bUNsYXNz
LCBjb29raWVzUG9saWN5KTsKKyAgICAgICAgICAgIGlmIChlbnVtVmFsdWUpCisgICAgICAgICAg
ICAgICAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX3NldF9hY2NlcHRfcG9saWN5KGNvb2tpZU1hbmFn
ZXIsIHN0YXRpY19jYXN0PFdlYktpdENvb2tpZUFjY2VwdFBvbGljeT4oZW51bVZhbHVlLT52YWx1
ZSkpOworICAgICAgICAgICAgZ190eXBlX2NsYXNzX3VucmVmKGVudW1DbGFzcyk7CisgICAgICAg
IH0KIAotICAgIGF1dG8gYmFja2VuZCA9IGNyZWF0ZVZpZXdCYWNrZW5kKDEyODAsIDcyMCk7Ci0g
ICAgc3RydWN0IHdwZV92aWV3X2JhY2tlbmQqIHdwZUJhY2tlbmQgPSBiYWNrZW5kLT5iYWNrZW5k
KCk7Ci0gICAgaWYgKCF3cGVCYWNrZW5kKSB7Ci0gICAgICAgIGdfd2FybmluZygiRmFpbGVkIHRv
IGNyZWF0ZSBXUEUgdmlldyBiYWNrZW5kIik7Ci0gICAgICAgIGdfbWFpbl9sb29wX3VucmVmKGxv
b3ApOwotICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgaWYgKGNvb2tpZXNGaWxlICYmICF3ZWJr
aXRfbmV0d29ya19zZXNzaW9uX2lzX2VwaGVtZXJhbChuZXR3b3JrU2Vzc2lvbikpIHsKKyAgICAg
ICAgICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF9j
b29raWVfbWFuYWdlcihuZXR3b3JrU2Vzc2lvbik7CisgICAgICAgICAgICBhdXRvIHN0b3JhZ2VU
eXBlID0gZ19zdHJfaGFzX3N1ZmZpeChjb29raWVzRmlsZSwgIi50eHQiKSA/IFdFQktJVF9DT09L
SUVfUEVSU0lTVEVOVF9TVE9SQUdFX1RFWFQgOiBXRUJLSVRfQ09PS0lFX1BFUlNJU1RFTlRfU1RP
UkFHRV9TUUxJVEU7CisgICAgICAgICAgICB3ZWJraXRfY29va2llX21hbmFnZXJfc2V0X3BlcnNp
c3RlbnRfc3RvcmFnZShjb29raWVNYW5hZ2VyLCBjb29raWVzRmlsZSwgc3RvcmFnZVR5cGUpOwor
ICAgICAgICB9CiAgICAgfQogCisgICAgYXV0byogd2ViQ29udGV4dCA9IFdFQktJVF9XRUJfQ09O
VEVYVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX0NPTlRFWFQsICJ0aW1lLXpvbmUtb3Zl
cnJpZGUiLCB0aW1lWm9uZSwgbnVsbHB0cikpOworI2Vsc2UKICAgICBhdXRvKiBtYW5hZ2VyID0g
KHByaXZhdGVNb2RlIHx8IGF1dG9tYXRpb25Nb2RlKSA/IHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFu
YWdlcl9uZXdfZXBoZW1lcmFsKCkgOiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfbmV3KG51
bGxwdHIpOwogICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9zZXRfaXRwX2VuYWJsZWQo
bWFuYWdlciwgZW5hYmxlSVRQKTsKIApAQCAtMjU2LDYgKzI0OCw3IEBAIGludCBtYWluKGludCBh
cmdjLCBjaGFyICphcmd2W10pCiAgICAgICAgIGF1dG8gc3RvcmFnZVR5cGUgPSBnX3N0cl9oYXNf
c3VmZml4KGNvb2tpZXNGaWxlLCAiLnR4dCIpID8gV0VCS0lUX0NPT0tJRV9QRVJTSVNURU5UX1NU
T1JBR0VfVEVYVCA6IFdFQktJVF9DT09LSUVfUEVSU0lTVEVOVF9TVE9SQUdFX1NRTElURTsKICAg
ICAgICAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX3NldF9wZXJzaXN0ZW50X3N0b3JhZ2UoY29va2ll
TWFuYWdlciwgY29va2llc0ZpbGUsIHN0b3JhZ2VUeXBlKTsKICAgICB9CisjZW5kaWYKIAogICAg
IFdlYktpdFVzZXJDb250ZW50TWFuYWdlciogdXNlckNvbnRlbnRNYW5hZ2VyID0gbnVsbHB0cjsK
ICAgICBpZiAoY29udGVudEZpbHRlcikgewpAQCAtMjkwLDI1ICsyODMsMjcgQEAgaW50IG1haW4o
aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKICAgICAgICAgImVuYWJsZS1lbmNyeXB0ZWQtbWVkaWEi
LCBUUlVFLAogICAgICAgICBudWxscHRyKTsKIAotICAgIGF1dG8qIGJhY2tlbmRQdHIgPSBiYWNr
ZW5kLmdldCgpOwotICAgIGF1dG8qIHZpZXdCYWNrZW5kID0gd2Via2l0X3dlYl92aWV3X2JhY2tl
bmRfbmV3KHdwZUJhY2tlbmQsIFtdKGdwb2ludGVyIGRhdGEpIHsKKyAgICBhdXRvKiB2aWV3QmFj
a2VuZCA9IHdlYmtpdF93ZWJfdmlld19iYWNrZW5kX25ldyhiYWNrZW5kLT5iYWNrZW5kKCksIFtd
KGdwb2ludGVyIGRhdGEpIHsKICAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PFdQRVRvb2xpbmdC
YWNrZW5kczo6Vmlld0JhY2tlbmQqPihkYXRhKTsKLSAgICB9LCBiYWNrZW5kLnJlbGVhc2UoKSk7
CisgICAgfSwgYmFja2VuZCk7CiAKICAgICBhdXRvKiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVX
KGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfVklFVywKICAgICAgICAgImJhY2tlbmQiLCB2
aWV3QmFja2VuZCwKICAgICAgICAgIndlYi1jb250ZXh0Iiwgd2ViQ29udGV4dCwKKyNpZiBFTkFC
TEVfMjAyMl9HTElCX0FQSQorICAgICAgICAibmV0d29yay1zZXNzaW9uIiwgbmV0d29ya1Nlc3Np
b24sCisjZW5kaWYKICAgICAgICAgInNldHRpbmdzIiwgc2V0dGluZ3MsCiAgICAgICAgICJ1c2Vy
LWNvbnRlbnQtbWFuYWdlciIsIHVzZXJDb250ZW50TWFuYWdlciwKICAgICAgICAgImlzLWNvbnRy
b2xsZWQtYnktYXV0b21hdGlvbiIsIGF1dG9tYXRpb25Nb2RlLAogICAgICAgICBudWxscHRyKSk7
CiAgICAgZ19vYmplY3RfdW5yZWYoc2V0dGluZ3MpOwogCi0gICAgYmFja2VuZFB0ci0+c2V0SW5w
dXRDbGllbnQoc3RkOjptYWtlX3VuaXF1ZTxJbnB1dENsaWVudD4obG9vcCwgd2ViVmlldykpOwor
ICAgIGJhY2tlbmQtPnNldElucHV0Q2xpZW50KHN0ZDo6bWFrZV91bmlxdWU8SW5wdXRDbGllbnQ+
KGFwcGxpY2F0aW9uLCB3ZWJWaWV3KSk7CiAjaWYgZGVmaW5lZChFTkFCTEVfQUNDRVNTSUJJTElU
WSkgJiYgRU5BQkxFX0FDQ0VTU0lCSUxJVFkKLSAgICBhdXRvKiBhY2Nlc3NpYmxlID0gd3BlX3Zp
ZXdfYmFja2VuZF9kaXNwYXRjaF9nZXRfYWNjZXNzaWJsZSh3cGVCYWNrZW5kKTsKKyAgICBhdXRv
KiBhY2Nlc3NpYmxlID0gd3BlX3ZpZXdfYmFja2VuZF9kaXNwYXRjaF9nZXRfYWNjZXNzaWJsZShi
YWNrZW5kLT5iYWNrZW5kKCkpOwogICAgIGlmIChBVEtfSVNfT0JKRUNUKGFjY2Vzc2libGUpKQot
ICAgICAgICBiYWNrZW5kUHRyLT5zZXRBY2Nlc3NpYmxlQ2hpbGQoQVRLX09CSkVDVChhY2Nlc3Np
YmxlKSk7CisgICAgICAgIGJhY2tlbmQtPnNldEFjY2Vzc2libGVDaGlsZChBVEtfT0JKRUNUKGFj
Y2Vzc2libGUpKTsKICNlbmRpZgogCiAgICAgb3BlblZpZXdzID0gZ19oYXNoX3RhYmxlX25ld19m
dWxsKG51bGxwdHIsIG51bGxwdHIsIGdfb2JqZWN0X3VucmVmLCBudWxscHRyKTsKQEAgLTMzOSwx
NCArMzM0LDU5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAgICAgZWxzZQog
ICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkod2ViVmlldywgImh0dHBzOi8vd3Bld2Vi
a2l0Lm9yZyIpOwogCi0gICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworICAgIGdfb2JqZWN0X3Vu
cmVmKHdlYkNvbnRleHQpOworI2lmIEVOQUJMRV8yMDIyX0dMSUJfQVBJCisgICAgZ19jbGVhcl9v
YmplY3QoJm5ldHdvcmtTZXNzaW9uKTsKKyNlbmRpZgorfQogCi0gICAgZ19oYXNoX3RhYmxlX2Rl
c3Ryb3kob3BlblZpZXdzKTsKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7Cisj
aWYgRU5BQkxFX0RFVkVMT1BFUl9NT0RFCisgICAgZ19zZXRlbnYoIldFQktJVF9JTkpFQ1RFRF9C
VU5ETEVfUEFUSCIsIFdFQktJVF9JTkpFQ1RFRF9CVU5ETEVfUEFUSCwgRkFMU0UpOworI2VuZGlm
CisKKyAgICBHT3B0aW9uQ29udGV4dCogY29udGV4dCA9IGdfb3B0aW9uX2NvbnRleHRfbmV3KG51
bGxwdHIpOworICAgIGdfb3B0aW9uX2NvbnRleHRfYWRkX21haW5fZW50cmllcyhjb250ZXh0LCBj
b21tYW5kTGluZU9wdGlvbnMsIG51bGxwdHIpOworCisjaWYgIVVTRV9HU1RSRUFNRVJfRlVMTCAm
JiAoRU5BQkxFX1dFQl9BVURJTyB8fCBFTkFCTEVfVklERU8pCisgICAgZ19vcHRpb25fY29udGV4
dF9hZGRfZ3JvdXAoY29udGV4dCwgZ3N0X2luaXRfZ2V0X29wdGlvbl9ncm91cCgpKTsKKyNlbmRp
ZgorCisgICAgR0Vycm9yKiBlcnJvciA9IG51bGxwdHI7CisgICAgaWYgKCFnX29wdGlvbl9jb250
ZXh0X3BhcnNlKGNvbnRleHQsICZhcmdjLCAmYXJndiwgJmVycm9yKSkgeworICAgICAgICBnX3By
aW50ZXJyKCJDYW5ub3QgcGFyc2UgYXJndW1lbnRzOiAlc1xuIiwgZXJyb3ItPm1lc3NhZ2UpOwor
ICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOworICAgICAgICBnX29wdGlvbl9jb250ZXh0X2Zy
ZWUoY29udGV4dCk7CisKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGdfb3B0aW9uX2Nv
bnRleHRfZnJlZShjb250ZXh0KTsKIAorICAgIGlmIChwcmludFZlcnNpb24pIHsKKyAgICAgICAg
Z19wcmludCgiV1BFIFdlYktpdCAldS4ldS4ldSIsCisgICAgICAgICAgICB3ZWJraXRfZ2V0X21h
am9yX3ZlcnNpb24oKSwKKyAgICAgICAgICAgIHdlYmtpdF9nZXRfbWlub3JfdmVyc2lvbigpLAor
ICAgICAgICAgICAgd2Via2l0X2dldF9taWNyb192ZXJzaW9uKCkpOworICAgICAgICBpZiAoZ19z
dHJjbXAwKEJVSUxEX1JFVklTSU9OLCAidGFyYmFsbCIpKQorICAgICAgICAgICAgZ19wcmludCgi
ICglcykiLCBCVUlMRF9SRVZJU0lPTik7CisgICAgICAgIGdfcHJpbnQoIlxuIik7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKworICAgIGF1dG8gYmFja2VuZCA9IGNyZWF0ZVZpZXdCYWNrZW5k
KDEyODAsIDcyMCk7CisgICAgc3RydWN0IHdwZV92aWV3X2JhY2tlbmQqIHdwZUJhY2tlbmQgPSBi
YWNrZW5kLT5iYWNrZW5kKCk7CisgICAgaWYgKCF3cGVCYWNrZW5kKSB7CisgICAgICAgIGdfd2Fy
bmluZygiRmFpbGVkIHRvIGNyZWF0ZSBXUEUgdmlldyBiYWNrZW5kIik7CisgICAgICAgIHJldHVy
biAxOworICAgIH0KIAotICAgIGlmIChwcml2YXRlTW9kZSB8fCBhdXRvbWF0aW9uTW9kZSkKLSAg
ICAgICAgZ19vYmplY3RfdW5yZWYod2ViQ29udGV4dCk7Ci0gICAgZ19tYWluX2xvb3BfdW5yZWYo
bG9vcCk7CisgICAgR0FwcGxpY2F0aW9uICphcHBsaWNhdGlvbiA9IGdfYXBwbGljYXRpb25fbmV3
KCJvcmcud3Bld2Via2l0Lk1pbmlCcm93c2VyIiwgR19BUFBMSUNBVElPTl9OT05fVU5JUVVFKTsK
KyAgICBnX3NpZ25hbF9jb25uZWN0KGFwcGxpY2F0aW9uLCAiYWN0aXZhdGUiLCBHX0NBTExCQUNL
KGFjdGl2YXRlKSwgYmFja2VuZC5yZWxlYXNlKCkpOworICAgIGdfYXBwbGljYXRpb25fcnVuKGFw
cGxpY2F0aW9uLCAwLCBudWxscHRyKTsKKyAgICBnX29iamVjdF91bnJlZihhcHBsaWNhdGlvbik7
CisKKyAgICBnX2hhc2hfdGFibGVfZGVzdHJveShvcGVuVmlld3MpOwogCiAgICAgcmV0dXJuIDA7
CiB9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVz
dEF1dGhlbnRpY2F0aW9uLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xp
Yi9UZXN0QXV0aGVudGljYXRpb24uY3BwCmluZGV4IGI0MzEzOTgwMmQ5Mi4uMmVhYTAxNjA4ZWM0
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdEF1
dGhlbnRpY2F0aW9uLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdM
aWIvVGVzdEF1dGhlbnRpY2F0aW9uLmNwcApAQCAtMjU0LDEwICsyNTQsMTcgQEAgc3RhdGljIHZv
aWQgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvblN0b3JhZ2UoQXV0aGVudGljYXRpb25UZXN0KiB0
ZXN0LCBnY29uc3Rwb2kKICAgICBnX2Fzc2VydF9mYWxzZSh0ZXN0LT5tX2F1dGhlbnRpY2F0aW9u
U3VjY2VlZGVkUmVjZWl2ZWQpOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkK
KyAgICBhdXRvKiBuZXR3b3JrU2Vzc2lvbiA9IHdlYmtpdF93ZWJfdmlld19nZXRfbmV0d29ya19z
ZXNzaW9uKHRlc3QtPm1fd2ViVmlldyk7CisgICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfbmV0d29y
a19zZXNzaW9uX2dldF9wZXJzaXN0ZW50X2NyZWRlbnRpYWxfc3RvcmFnZV9lbmFibGVkKG5ldHdv
cmtTZXNzaW9uKSk7CisgICAgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfcGVyc2lzdGVudF9j
cmVkZW50aWFsX3N0b3JhZ2VfZW5hYmxlZChuZXR3b3JrU2Vzc2lvbiwgRkFMU0UpOworICAgIGdf
YXNzZXJ0X2ZhbHNlKHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X3BlcnNpc3RlbnRfY3JlZGVu
dGlhbF9zdG9yYWdlX2VuYWJsZWQobmV0d29ya1Nlc3Npb24pKTsKKyNlbHNlCiAgICAgYXV0byog
d2Vic2l0ZURhdGFNYW5hZ2VyID0gd2Via2l0X3dlYl92aWV3X2dldF93ZWJzaXRlX2RhdGFfbWFu
YWdlcih0ZXN0LT5tX3dlYlZpZXcpOwogICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyX2dldF9wZXJzaXN0ZW50X2NyZWRlbnRpYWxfc3RvcmFnZV9lbmFibGVkKHdl
YnNpdGVEYXRhTWFuYWdlcikpOwogICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9zZXRf
cGVyc2lzdGVudF9jcmVkZW50aWFsX3N0b3JhZ2VfZW5hYmxlZCh3ZWJzaXRlRGF0YU1hbmFnZXIs
IEZBTFNFKTsKICAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJf
Z2V0X3BlcnNpc3RlbnRfY3JlZGVudGlhbF9zdG9yYWdlX2VuYWJsZWQod2Vic2l0ZURhdGFNYW5h
Z2VyKSk7CisjZW5kaWYKIAogICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0
aCgiL2F1dGgtdGVzdC5odG1sIikuZGF0YSgpKTsKICAgICByZXF1ZXN0ID0gdGVzdC0+d2FpdEZv
ckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpOwpAQCAtMjgwLDcgKzI4NywxMSBAQCBzdGF0aWMgdm9p
ZCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uU3RvcmFnZShBdXRoZW50aWNhdGlvblRlc3QqIHRl
c3QsIGdjb25zdHBvaQogICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwogICAgIGdf
YXNzZXJ0X2ZhbHNlKHRlc3QtPm1fYXV0aGVudGljYXRpb25DYW5jZWxsZWRSZWNlaXZlZCk7CiAg
ICAgZ19hc3NlcnRfdHJ1ZSh0ZXN0LT5tX2F1dGhlbnRpY2F0aW9uU3VjY2VlZGVkUmVjZWl2ZWQp
OworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25f
c2V0X3BlcnNpc3RlbnRfY3JlZGVudGlhbF9zdG9yYWdlX2VuYWJsZWQobmV0d29ya1Nlc3Npb24s
IFRSVUUpOworI2Vsc2UKICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X3BlcnNp
c3RlbnRfY3JlZGVudGlhbF9zdG9yYWdlX2VuYWJsZWQod2Vic2l0ZURhdGFNYW5hZ2VyLCBUUlVF
KTsKKyNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uU3Vj
Y2VzcyhBdXRoZW50aWNhdGlvblRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCkBAIC00NjcsOCAr
NDc4LDEyIEBAIHB1YmxpYzoKICAgICAgICAgZ19hc3NlcnRfZmFsc2UobV9wcm94eVNlcnZlci5i
YXNlVVJMKCkuaXNOdWxsKCkpOwogICAgICAgICBnUHJveHlTZXJ2ZXJQb3J0ID0gbV9wcm94eVNl
cnZlci5wb3J0KCk7CiAgICAgICAgIFdlYktpdE5ldHdvcmtQcm94eVNldHRpbmdzKiBzZXR0aW5n
cyA9IHdlYmtpdF9uZXR3b3JrX3Byb3h5X3NldHRpbmdzX25ldyhtX3Byb3h5U2VydmVyLmJhc2VV
UkwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBudWxscHRyKTsKKyNpZiBFTkFCTEUoMjAyMl9H
TElCX0FQSSkKKyAgICAgICAgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfcHJveHlfc2V0dGlu
Z3MobV9uZXR3b3JrU2Vzc2lvbi5nZXQoKSwgV0VCS0lUX05FVFdPUktfUFJPWFlfTU9ERV9DVVNU
T00sIHNldHRpbmdzKTsKKyNlbHNlCiAgICAgICAgIGF1dG8qIHdlYnNpdGVEYXRhTWFuYWdlciA9
IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIobV93ZWJDb250ZXh0
LmdldCgpKTsKICAgICAgICAgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX3NldF9uZXR3b3Jr
X3Byb3h5X3NldHRpbmdzKHdlYnNpdGVEYXRhTWFuYWdlciwgV0VCS0lUX05FVFdPUktfUFJPWFlf
TU9ERV9DVVNUT00sIHNldHRpbmdzKTsKKyNlbmRpZgogICAgICAgICB3ZWJraXRfbmV0d29ya19w
cm94eV9zZXR0aW5nc19mcmVlKHNldHRpbmdzKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0QXV0b21hdGlvblNlc3Npb24uY3Bw
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RBdXRvbWF0aW9uU2Vz
c2lvbi5jcHAKaW5kZXggMmYxOTUyYzI5ODliLi4wMGI1NTA4OGY3MmQgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0QXV0b21hdGlvblNlc3Npb24u
Y3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0QXV0b21h
dGlvblNlc3Npb24uY3BwCkBAIC0zNDAsNiArMzQwLDEyIEBAIHN0YXRpYyB2b2lkIHRlc3RBdXRv
bWF0aW9uU2Vzc2lvblJlcXVlc3RTZXNzaW9uKEF1dG9tYXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rw
b2luCiAgICAgICAgIG51bGxwdHIpKTsKICAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF93ZWJfdmll
d19pc19jb250cm9sbGVkX2J5X2F1dG9tYXRpb24od2ViVmlldy5nZXQoKSkpOwogICAgIGdfYXNz
ZXJ0X2NtcHVpbnQod2Via2l0X3dlYl92aWV3X2dldF9hdXRvbWF0aW9uX3ByZXNlbnRhdGlvbl90
eXBlKHdlYlZpZXcuZ2V0KCkpLCA9PSwgV0VCS0lUX0FVVE9NQVRJT05fQlJPV1NJTkdfQ09OVEVY
VF9QUkVTRU5UQVRJT05fV0lORE9XKTsKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICAv
LyBBdXRvbWF0aW9uIHNlc3Npb24gaGFzIGl0cyBvd24gZXBoZW1lcmFsIHNlc3Npb24uCisgICAg
YXV0byogbmV0d29ya1Nlc3Npb24gPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X25ldHdvcmtfc2Vzc2lv
bih3ZWJWaWV3LmdldCgpKTsKKyAgICBnX2Fzc2VydF9mYWxzZShuZXR3b3JrU2Vzc2lvbiA9PSB0
ZXN0LT5tX25ldHdvcmtTZXNzaW9uLmdldCgpKTsKKyAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF9u
ZXR3b3JrX3Nlc3Npb25faXNfZXBoZW1lcmFsKG5ldHdvcmtTZXNzaW9uKSk7CisjZW5kaWYKICAg
ICBnX2Fzc2VydF90cnVlKHRlc3QtPmNyZWF0ZVRvcExldmVsQnJvd3NpbmdDb250ZXh0KHdlYlZp
ZXcuZ2V0KCkpKTsKIAogICAgIGF1dG8gbmV3V2ViVmlld0luV2luZG93ID0gVGVzdDo6YWRvcHRW
aWV3KGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfVklFVywKQEAgLTM0NywxMCArMzUzLDE3
IEBAIHN0YXRpYyB2b2lkIHRlc3RBdXRvbWF0aW9uU2Vzc2lvblJlcXVlc3RTZXNzaW9uKEF1dG9t
YXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rwb2luCiAgICAgICAgICJiYWNrZW5kIiwgVGVzdDo6Y3Jl
YXRlV2ViVmlld0JhY2tlbmQoKSwKICNlbmRpZgogICAgICAgICAid2ViLWNvbnRleHQiLCB0ZXN0
LT5tX3dlYkNvbnRleHQuZ2V0KCksCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgICAg
IC8vIENoZWNrIGFsc28gaGVyZSB0aGF0IG5ldHdvcmsgc2Vzc2lvbiBwcm9wZXJ0eSBpcyBpZ25v
cmVkIHdoZW4gaXMtY29udHJvbGxlZC1ieS1hdXRvbWF0aW9uIGlzIHRydWUuCisgICAgICAgICJu
ZXR3b3JrLXNlc3Npb24iLCB0ZXN0LT5tX25ldHdvcmtTZXNzaW9uLmdldCgpLAorI2VuZGlmCiAg
ICAgICAgICJpcy1jb250cm9sbGVkLWJ5LWF1dG9tYXRpb24iLCBUUlVFLAogICAgICAgICBudWxs
cHRyKSk7CiAgICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfd2ViX3ZpZXdfaXNfY29udHJvbGxlZF9i
eV9hdXRvbWF0aW9uKG5ld1dlYlZpZXdJbldpbmRvdy5nZXQoKSkpOwogICAgIGdfYXNzZXJ0X2Nt
cHVpbnQod2Via2l0X3dlYl92aWV3X2dldF9hdXRvbWF0aW9uX3ByZXNlbnRhdGlvbl90eXBlKG5l
d1dlYlZpZXdJbldpbmRvdy5nZXQoKSksID09LCBXRUJLSVRfQVVUT01BVElPTl9CUk9XU0lOR19D
T05URVhUX1BSRVNFTlRBVElPTl9XSU5ET1cpOworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQor
ICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X3dlYl92aWV3X2dldF9uZXR3b3JrX3Nlc3Npb24obmV3
V2ViVmlld0luV2luZG93LmdldCgpKSA9PSBuZXR3b3JrU2Vzc2lvbik7CisjZW5kaWYKICAgICBn
X2Fzc2VydF90cnVlKHRlc3QtPmNyZWF0ZU5ld1dpbmRvdyhuZXdXZWJWaWV3SW5XaW5kb3cuZ2V0
KCkpKTsKIAogICAgIGF1dG8gbmV3V2ViVmlld0luVGFiID0gVGVzdDo6YWRvcHRWaWV3KGdfb2Jq
ZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfVklFVywKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0Q29va2llTWFuYWdlci5jcHAgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdENvb2tpZU1hbmFnZXIuY3BwCmluZGV4IDU4
ZjIzNzBiOWEyMC4uMzQ1NTljMmVjODA0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdEdMaWIvVGVzdENvb2tpZU1hbmFnZXIuY3BwCisrKyBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0Q29va2llTWFuYWdlci5jcHAKQEAgLTU3LDkg
KzU3LDE3IEBAIHB1YmxpYzoKIAogICAgIENvb2tpZU1hbmFnZXJUZXN0KCkKICAgICAgICAgOiBX
ZWJWaWV3VGVzdCgpCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgICAgICwgbV9jb29r
aWVNYW5hZ2VyKHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X2Nvb2tpZV9tYW5hZ2VyKG1fbmV0
d29ya1Nlc3Npb24uZ2V0KCkpKQorICAgICAgICAsIG1fd2Vic2l0ZURhdGFNYW5hZ2VyKHdlYmtp
dF9uZXR3b3JrX3Nlc3Npb25fZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKG1fbmV0d29ya1Nlc3Np
b24uZ2V0KCkpKQorI2Vsc2UKICAgICAgICAgLCBtX2Nvb2tpZU1hbmFnZXIod2Via2l0X3dlYl9j
b250ZXh0X2dldF9jb29raWVfbWFuYWdlcihtX3dlYkNvbnRleHQuZ2V0KCkpKQorICAgICAgICAs
IG1fd2Vic2l0ZURhdGFNYW5hZ2VyKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfd2Vic2l0ZV9kYXRh
X21hbmFnZXIobV93ZWJDb250ZXh0LmdldCgpKSkKKyNlbmRpZgogICAgIHsKLSAgICAgICAgZ19h
c3NlcnRfdHJ1ZSh3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Nvb2tpZV9tYW5hZ2Vy
KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIobV93ZWJDb250ZXh0
LmdldCgpKSkgPT0gbV9jb29raWVNYW5hZ2VyKTsKKyNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkp
CisgICAgICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9j
b29raWVfbWFuYWdlcihtX3dlYnNpdGVEYXRhTWFuYWdlcikgPT0gbV9jb29raWVNYW5hZ2VyKTsK
KyNlbmRpZgogICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fY29va2llTWFuYWdlciwgImNoYW5n
ZWQiLCBHX0NBTExCQUNLKGNvb2tpZXNDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKICAgICB9CiAK
QEAgLTE3NSwyOCArMTgzLDM3IEBAIHB1YmxpYzoKICAgICAgICAgd2Via2l0X2Nvb2tpZV9tYW5h
Z2VyX3NldF9hY2NlcHRfcG9saWN5KG1fY29va2llTWFuYWdlciwgcG9saWN5KTsKICAgICB9CiAK
LSAgICBzdGF0aWMgdm9pZCBnZXREb21haW5zUmVhZHlDYWxsYmFjayhHT2JqZWN0KiBvYmplY3Qs
IEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkKKyAgICBHVW5pcXVlUHRy
PEdMaXN0PiBmZXRjaCgpCiAgICAgewotICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJy
b3I7Ci0gICAgICAgIEdfR05VQ19CRUdJTl9JR05PUkVfREVQUkVDQVRJT05TOwotICAgICAgICBj
aGFyKiogZG9tYWlucyA9IHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfZG9tYWluc193aXRoX2Nv
b2tpZXNfZmluaXNoKFdFQktJVF9DT09LSUVfTUFOQUdFUihvYmplY3QpLCByZXN1bHQsICZlcnJv
ci5vdXRQdHIoKSk7Ci0gICAgICAgIEdfR05VQ19FTkRfSUdOT1JFX0RFUFJFQ0FUSU9OUzsKLSAg
ICAgICAgZ19hc3NlcnRfbm9fZXJyb3IoZXJyb3IuZ2V0KCkpOwotCi0gICAgICAgIENvb2tpZU1h
bmFnZXJUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8Q29va2llTWFuYWdlclRlc3QqPih1c2VyRGF0
YSk7Ci0gICAgICAgIHRlc3QtPm1fZG9tYWlucyA9IGRvbWFpbnM7Ci0gICAgICAgIGdfbWFpbl9s
b29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7CisgICAgICAgIHN0cnVjdCBUZXN0RGF0YSB7Cisg
ICAgICAgICAgICBHVW5pcXVlUHRyPEdMaXN0PiBkYXRhTGlzdDsKKyAgICAgICAgICAgIEdNYWlu
TG9vcCogbWFpbkxvb3A7CisgICAgICAgIH0gZGF0YSA9IHsgbnVsbHB0ciwgbV9tYWluTG9vcCB9
OworCisgICAgICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9mZXRjaChtX3dlYnNpdGVE
YXRhTWFuYWdlciwgV0VCS0lUX1dFQlNJVEVfREFUQV9DT09LSUVTLCBudWxscHRyLCBbXShHT2Jq
ZWN0KiBvYmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkgewor
ICAgICAgICAgICAgYXV0byogZGF0YSA9IHN0YXRpY19jYXN0PFRlc3REYXRhKj4odXNlckRhdGEp
OworICAgICAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOworICAgICAgICAgICAg
ZGF0YS0+ZGF0YUxpc3QucmVzZXQod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2ZldGNoX2Zp
bmlzaChXRUJLSVRfV0VCU0lURV9EQVRBX01BTkFHRVIob2JqZWN0KSwgcmVzdWx0LCAmZXJyb3Iu
b3V0UHRyKCkpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0X25vX2Vycm9yKGVycm9yLmdldCgpKTsK
KyAgICAgICAgICAgIGdfbWFpbl9sb29wX3F1aXQoZGF0YS0+bWFpbkxvb3ApOworICAgICAgICB9
LCAmZGF0YSk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICAgICAg
cmV0dXJuIFdURk1vdmUoZGF0YS5kYXRhTGlzdCk7CiAgICAgfQogCiAgICAgY2hhcioqIGdldERv
bWFpbnMoKQogICAgIHsKLSAgICAgICAgZ19zdHJmcmVldihtX2RvbWFpbnMpOwotICAgICAgICBt
X2RvbWFpbnMgPSAwOwotICAgICAgICBHX0dOVUNfQkVHSU5fSUdOT1JFX0RFUFJFQ0FUSU9OUzsK
LSAgICAgICAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9kb21haW5zX3dpdGhfY29va2llcyht
X2Nvb2tpZU1hbmFnZXIsIDAsIGdldERvbWFpbnNSZWFkeUNhbGxiYWNrLCB0aGlzKTsKLSAgICAg
ICAgR19HTlVDX0VORF9JR05PUkVfREVQUkVDQVRJT05TOwotICAgICAgICBnX21haW5fbG9vcF9y
dW4obV9tYWluTG9vcCk7CisgICAgICAgIGdfY2xlYXJfcG9pbnRlcigmbV9kb21haW5zLCBnX3N0
cmZyZWV2KTsKKyAgICAgICAgR1VuaXF1ZVB0cjxHTGlzdD4gZGF0YUxpc3QgPSBmZXRjaCgpOwor
ICAgICAgICBHUHRyQXJyYXkqIGRvbWFpbnMgPSBnX3B0cl9hcnJheV9zaXplZF9uZXcoZ19saXN0
X2xlbmd0aChkYXRhTGlzdC5nZXQoKSkpOworICAgICAgICBmb3IgKEdMaXN0KiBpdGVtID0gZGF0
YUxpc3QuZ2V0KCk7IGl0ZW07IGl0ZW0gPSBnX2xpc3RfbmV4dChpdGVtKSkgeworICAgICAgICAg
ICAgYXV0byogZGF0YSA9IHN0YXRpY19jYXN0PFdlYktpdFdlYnNpdGVEYXRhKj4oaXRlbS0+ZGF0
YSk7CisgICAgICAgICAgICBnX3B0cl9hcnJheV9hZGQoZG9tYWlucywgZ19zdHJkdXAod2Via2l0
X3dlYnNpdGVfZGF0YV9nZXRfbmFtZShkYXRhKSkpOworICAgICAgICAgICAgd2Via2l0X3dlYnNp
dGVfZGF0YV91bnJlZihkYXRhKTsKKyAgICAgICAgfQorICAgICAgICBnX3B0cl9hcnJheV9hZGQo
ZG9tYWlucywgbnVsbHB0cik7CiAKKyAgICAgICAgbV9kb21haW5zID0gcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKio+KGdfcHRyX2FycmF5X2ZyZWUoZG9tYWlucywgRkFMU0UpKTsKICAgICAgICAgcmV0
dXJuIG1fZG9tYWluczsKICAgICB9CiAKQEAgLTIxNCwxNiArMjMxLDIzIEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgZGVsZXRlQ29va2llc0ZvckRvbWFpbihjb25zdCBjaGFyKiBkb21haW4pCiAgICAg
ewotICAgICAgICBHX0dOVUNfQkVHSU5fSUdOT1JFX0RFUFJFQ0FUSU9OUzsKLSAgICAgICAgd2Vi
a2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWVzX2Zvcl9kb21haW4obV9jb29raWVNYW5h
Z2VyLCBkb21haW4pOwotICAgICAgICBHX0dOVUNfRU5EX0lHTk9SRV9ERVBSRUNBVElPTlM7Cisg
ICAgICAgIEdVbmlxdWVQdHI8R0xpc3Q+IGRhdGFMaXN0ID0gZmV0Y2goKTsKKyAgICAgICAgR1Vu
aXF1ZVB0cjxHTGlzdD4gY29va2llczsKKyAgICAgICAgZm9yIChHTGlzdCogaXRlbSA9IGRhdGFM
aXN0LmdldCgpOyBpdGVtOyBpdGVtID0gZ19saXN0X25leHQoaXRlbSkpIHsKKyAgICAgICAgICAg
IGF1dG8qIGRhdGEgPSBzdGF0aWNfY2FzdDxXZWJLaXRXZWJzaXRlRGF0YSo+KGl0ZW0tPmRhdGEp
OworICAgICAgICAgICAgaWYgKCFnX3N0cmNtcDAod2Via2l0X3dlYnNpdGVfZGF0YV9nZXRfbmFt
ZShkYXRhKSwgZG9tYWluKSkKKyAgICAgICAgICAgICAgICBjb29raWVzLnJlc2V0KGdfbGlzdF9w
cmVwZW5kKGNvb2tpZXMuZ2V0KCksIHdlYmtpdF93ZWJzaXRlX2RhdGFfcmVmKGRhdGEpKSk7Cisg
ICAgICAgICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX3VucmVmKGRhdGEpOworICAgICAgICB9Cisg
ICAgICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9yZW1vdmUobV93ZWJzaXRlRGF0YU1h
bmFnZXIsIFdFQktJVF9XRUJTSVRFX0RBVEFfQ09PS0lFUywgY29va2llcy5nZXQoKSwgbnVsbHB0
ciwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIGdfbGlzdF9mb3JlYWNoKGNvb2tpZXMuZ2V0
KCksIFtdKGdwb2ludGVyIGRhdGEsIGdwb2ludGVyKSB7CisgICAgICAgICAgICB3ZWJraXRfd2Vi
c2l0ZV9kYXRhX3VucmVmKHN0YXRpY19jYXN0PFdlYktpdFdlYnNpdGVEYXRhKj4oZGF0YSkpOwor
ICAgICAgICB9LCBudWxscHRyKTsKICAgICB9CiAKICAgICB2b2lkIGRlbGV0ZUFsbENvb2tpZXMo
KQogICAgIHsKLSAgICAgICAgR19HTlVDX0JFR0lOX0lHTk9SRV9ERVBSRUNBVElPTlM7Ci0gICAg
ICAgIHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfYWxsX2Nvb2tpZXMobV9jb29raWVNYW5h
Z2VyKTsKLSAgICAgICAgR19HTlVDX0VORF9JR05PUkVfREVQUkVDQVRJT05TOworICAgICAgICB3
ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfY2xlYXIobV93ZWJzaXRlRGF0YU1hbmFnZXIsIFdF
QktJVF9XRUJTSVRFX0RBVEFfQ09PS0lFUywgMCwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0cik7
CiAgICAgfQogCiAgICAgdm9pZCB3YWl0VW50aWxDb29raWVzQ2hhbmdlZChpbnQgY29va2llc0V4
cGVjdGVkVG9DaGFuZ2VDb3VudCA9IDEpCkBAIC0yMzUsNyArMjU5LDE3IEBAIHB1YmxpYzoKICAg
ICAgICAgbV9maW5pc2hMb29wV2hlbkNvb2tpZXNDaGFuZ2UgPSBmYWxzZTsKICAgICB9CiAKKyAg
ICB2b2lkIHNldElUUEVuYWJsZShib29sIGVuYWJsZSkKKyAgICB7CisjaWYgRU5BQkxFKDIwMjJf
R0xJQl9BUEkpCisgICAgICAgIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fc2V0X2l0cF9lbmFibGVk
KG1fbmV0d29ya1Nlc3Npb24uZ2V0KCksIGVuYWJsZSk7CisjZWxzZQorICAgICAgICB3ZWJraXRf
d2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X2l0cF9lbmFibGVkKG1fd2Vic2l0ZURhdGFNYW5hZ2Vy
LCBlbmFibGUpOworI2VuZGlmCisgICAgfQorCiAgICAgV2ViS2l0Q29va2llTWFuYWdlciogbV9j
b29raWVNYW5hZ2VyIHsgbnVsbHB0ciB9OworICAgIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciog
bV93ZWJzaXRlRGF0YU1hbmFnZXIgeyBudWxscHRyIH07CiAgICAgV2ViS2l0Q29va2llQWNjZXB0
UG9saWN5IG1fYWNjZXB0UG9saWN5IHsgV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX05PX1RI
SVJEX1BBUlRZIH07CiAgICAgY2hhcioqIG1fZG9tYWlucyB7IG51bGxwdHIgfTsKICAgICBHTGlz
dCogbV9jb29raWVzIHsgbnVsbHB0ciB9OwpAQCAtMjc4LDIzICszMTIsMjIgQEAgc3RhdGljIHZv
aWQgdGVzdENvb2tpZU1hbmFnZXJBY2NlcHRQb2xpY3koQ29va2llTWFuYWdlclRlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIKICAgICBnX2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aChkb21haW5z
KSwgPT0sIDApOwogCiAgICAgLy8gSVRQIG5ldmVyIHVzZXMgTk9fVEhJUkRfUEFSVFkuCi0gICAg
YXV0byogbWFuYWdlciA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfd2Vic2l0ZV9kYXRhX21hbmFn
ZXIodGVzdC0+bV93ZWJDb250ZXh0LmdldCgpKTsKLSAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21h
bmFnZXJfc2V0X2l0cF9lbmFibGVkKG1hbmFnZXIsIFRSVUUpOworICAgIHRlc3QtPnNldElUUEVu
YWJsZSh0cnVlKTsKICAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+Z2V0QWNjZXB0UG9saWN5KCks
ID09LCBXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfTkVWRVIpOwogICAgIHRlc3QtPnNldEFj
Y2VwdFBvbGljeShXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfTk9fVEhJUkRfUEFSVFkpOwog
ICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5nZXRBY2NlcHRQb2xpY3koKSwgPT0sIFdFQktJVF9D
T09LSUVfUE9MSUNZX0FDQ0VQVF9BTFdBWVMpOwotICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFu
YWdlcl9zZXRfaXRwX2VuYWJsZWQobWFuYWdlciwgRkFMU0UpOworICAgIHRlc3QtPnNldElUUEVu
YWJsZShmYWxzZSk7CiAgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPmdldEFjY2VwdFBvbGljeSgp
LCA9PSwgV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX05PX1RISVJEX1BBUlRZKTsKLSAgICB3
ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X2l0cF9lbmFibGVkKG1hbmFnZXIsIFRSVUUp
OworICAgIHRlc3QtPnNldElUUEVuYWJsZSh0cnVlKTsKICAgICBnX2Fzc2VydF9jbXBpbnQodGVz
dC0+Z2V0QWNjZXB0UG9saWN5KCksID09LCBXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfQUxX
QVlTKTsKLSAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X2l0cF9lbmFibGVkKG1h
bmFnZXIsIEZBTFNFKTsKKyAgICB0ZXN0LT5zZXRJVFBFbmFibGUoZmFsc2UpOwogICAgIGdfYXNz
ZXJ0X2NtcGludCh0ZXN0LT5nZXRBY2NlcHRQb2xpY3koKSwgPT0sIFdFQktJVF9DT09LSUVfUE9M
SUNZX0FDQ0VQVF9OT19USElSRF9QQVJUWSk7CiAgICAgdGVzdC0+c2V0QWNjZXB0UG9saWN5KFdF
QktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9BTFdBWVMpOwotICAgIHdlYmtpdF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcl9zZXRfaXRwX2VuYWJsZWQobWFuYWdlciwgVFJVRSk7CisgICAgdGVzdC0+c2V0
SVRQRW5hYmxlKHRydWUpOwogICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5nZXRBY2NlcHRQb2xp
Y3koKSwgPT0sIFdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9BTFdBWVMpOwogICAgIHRlc3Qt
PnNldEFjY2VwdFBvbGljeShXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfTkVWRVIpOwogICAg
IGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5nZXRBY2NlcHRQb2xpY3koKSwgPT0sIFdFQktJVF9DT09L
SUVfUE9MSUNZX0FDQ0VQVF9ORVZFUik7Ci0gICAgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X3NldF9pdHBfZW5hYmxlZChtYW5hZ2VyLCBGQUxTRSk7CisgICAgdGVzdC0+c2V0SVRQRW5hYmxl
KGZhbHNlKTsKICAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+Z2V0QWNjZXB0UG9saWN5KCksID09
LCBXRUJLSVRfQ09PS0lFX1BPTElDWV9BQ0NFUFRfTkVWRVIpOwogfQogCkBAIC02NjcsMTUgKzcw
MCwyNiBAQCBzdGF0aWMgdm9pZCB0ZXN0Q29va2llTWFuYWdlckVwaGVtZXJhbChDb29raWVNYW5h
Z2VyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICBnX2Fzc2VydF9ub25udWxsKGRvbWFp
bnMpOwogICAgIGdfYXNzZXJ0X2NtcGludChnX3N0cnZfbGVuZ3RoKGRvbWFpbnMpLCA9PSwgMCk7
CiAKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICBHUmVmUHRyPFdlYktpdE5ldHdvcmtT
ZXNzaW9uPiBlcGhlbWVyYWxTZXNzaW9uID0gYWRvcHRHUmVmKHdlYmtpdF9uZXR3b3JrX3Nlc3Np
b25fbmV3X2VwaGVtZXJhbCgpKTsKKyNlbmRpZgogICAgIGF1dG8gd2ViVmlldyA9IFRlc3Q6OmFk
b3B0VmlldyhnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX1ZJRVcsCiAjaWYgUExBVEZPUk0o
V1BFKQogICAgICAgICAiYmFja2VuZCIsIFRlc3Q6OmNyZWF0ZVdlYlZpZXdCYWNrZW5kKCksCiAj
ZW5kaWYKICAgICAgICAgIndlYi1jb250ZXh0Iiwgd2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0
KHRlc3QtPm1fd2ViVmlldyksCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgICAgICJu
ZXR3b3JrLXNlc3Npb24iLCBlcGhlbWVyYWxTZXNzaW9uLmdldCgpLAorI2Vsc2UKICAgICAgICAg
ImlzLWVwaGVtZXJhbCIsIFRSVUUsCisjZW5kaWYKICAgICAgICAgbnVsbHB0cikpOworI2lmIEVO
QUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X3dlYl92aWV3X2dl
dF9uZXR3b3JrX3Nlc3Npb24od2ViVmlldy5nZXQoKSkgPT0gZXBoZW1lcmFsU2Vzc2lvbi5nZXQo
KSk7CisjZWxzZQogICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X3dlYl92aWV3X2lzX2VwaGVtZXJh
bCh3ZWJWaWV3LmdldCgpKSk7CiAgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X3dlYl9jb250ZXh0
X2lzX2VwaGVtZXJhbCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQod2ViVmlldy5nZXQoKSkp
KTsKKyNlbmRpZgogCiAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LmdldCgpLCAibG9hZC1j
aGFuZ2VkIiwgR19DQUxMQkFDSyhlcGhlbWVyYWxWaWV3bG9hZENoYW5nZWQpLCB0ZXN0KTsKICAg
ICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkod2ViVmlldy5nZXQoKSwga1NlcnZlci0+Z2V0VVJJ
Rm9yUGF0aCgiL2luZGV4Lmh0bWwiKS5kYXRhKCkpOwpAQCAtNjg1LDI0ICs3MjksMzIgQEAgc3Rh
dGljIHZvaWQgdGVzdENvb2tpZU1hbmFnZXJFcGhlbWVyYWwoQ29va2llTWFuYWdlclRlc3QqIHRl
c3QsIGdjb25zdHBvaW50ZXIpCiAgICAgZ19hc3NlcnRfbm9ubnVsbChkb21haW5zKTsKICAgICBn
X2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aChkb21haW5zKSwgPT0sIDApOwogCisjaWYgRU5B
QkxFKDIwMjJfR0xJQl9BUEkpCisgICAgYXV0byogdmlld0RhdGFNYW5hZ2VyID0gd2Via2l0X25l
dHdvcmtfc2Vzc2lvbl9nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIoZXBoZW1lcmFsU2Vzc2lvbi5n
ZXQoKSk7CisjZWxzZQogICAgIGF1dG8qIHZpZXdEYXRhTWFuYWdlciA9IHdlYmtpdF93ZWJfdmll
d19nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIod2ViVmlldy5nZXQoKSk7CisjZW5kaWYKICAgICBn
X2Fzc2VydF90cnVlKFdFQktJVF9JU19XRUJTSVRFX0RBVEFfTUFOQUdFUih2aWV3RGF0YU1hbmFn
ZXIpKTsKICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdf
T0JKRUNUKHZpZXdEYXRhTWFuYWdlcikpOworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAg
IGF1dG8qIGNvb2tpZU1hbmFnZXIgPSB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF9jb29raWVf
bWFuYWdlcihlcGhlbWVyYWxTZXNzaW9uLmdldCgpKTsKKyNlbHNlCiAgICAgZ19hc3NlcnRfdHJ1
ZSh2aWV3RGF0YU1hbmFnZXIgIT0gd2Via2l0X3dlYl9jb250ZXh0X2dldF93ZWJzaXRlX2RhdGFf
bWFuYWdlcih3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQodGVzdC0+bV93ZWJWaWV3KSkpOwog
ICAgIGF1dG8qIGNvb2tpZU1hbmFnZXIgPSB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0
X2Nvb2tpZV9tYW5hZ2VyKHZpZXdEYXRhTWFuYWdlcik7CisjZW5kaWYKICAgICBnX2Fzc2VydF90
cnVlKFdFQktJVF9JU19DT09LSUVfTUFOQUdFUihjb29raWVNYW5hZ2VyKSk7CiAgICAgdGVzdC0+
YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChjb29raWVNYW5h
Z2VyKSk7CiAgICAgZ19hc3NlcnRfdHJ1ZShjb29raWVNYW5hZ2VyICE9IHRlc3QtPm1fY29va2ll
TWFuYWdlcik7Ci0gICAgR19HTlVDX0JFR0lOX0lHTk9SRV9ERVBSRUNBVElPTlM7Ci0gICAgd2Vi
a2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9kb21haW5zX3dpdGhfY29va2llcyhjb29raWVNYW5hZ2Vy
LCBudWxscHRyLCBbXShHT2JqZWN0KiBvYmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9p
bnRlciB1c2VyRGF0YSkgeworICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9mZXRjaCh2
aWV3RGF0YU1hbmFnZXIsIFdFQktJVF9XRUJTSVRFX0RBVEFfQ09PS0lFUywgbnVsbHB0ciwgW10o
R09iamVjdCogb2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEp
IHsKICAgICAgICAgYXV0byogdGVzdCA9IHN0YXRpY19jYXN0PENvb2tpZU1hbmFnZXJUZXN0Kj4o
dXNlckRhdGEpOwotICAgICAgICBHVW5pcXVlUHRyPGNoYXIqPiBkb21haW5zKHdlYmtpdF9jb29r
aWVfbWFuYWdlcl9nZXRfZG9tYWluc193aXRoX2Nvb2tpZXNfZmluaXNoKFdFQktJVF9DT09LSUVf
TUFOQUdFUihvYmplY3QpLCByZXN1bHQsIG51bGxwdHIpKTsKKyAgICAgICAgR1VuaXF1ZVB0cjxH
TGlzdD4gZG9tYWlucyh3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZmV0Y2hfZmluaXNoKFdF
QktJVF9XRUJTSVRFX0RBVEFfTUFOQUdFUihvYmplY3QpLCByZXN1bHQsIG51bGxwdHIpKTsKICAg
ICAgICAgZ19hc3NlcnRfbm9ubnVsbChkb21haW5zKTsKLSAgICAgICAgZ19hc3NlcnRfY21waW50
KGdfc3Rydl9sZW5ndGgoZG9tYWlucy5nZXQoKSksID09LCAxKTsKLSAgICAgICAgZ19hc3NlcnRf
Y21wc3RyKGRvbWFpbnMuZ2V0KClbMF0sID09LCBrRmlyc3RQYXJ0eURvbWFpbik7CisgICAgICAg
IGdfYXNzZXJ0X2NtcGludChnX2xpc3RfbGVuZ3RoKGRvbWFpbnMuZ2V0KCkpLCA9PSwgMSk7Cisg
ICAgICAgIGF1dG8qIGRhdGEgPSBzdGF0aWNfY2FzdDxXZWJLaXRXZWJzaXRlRGF0YSo+KGRvbWFp
bnMuZ2V0KCktPmRhdGEpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYnNpdGVf
ZGF0YV9nZXRfbmFtZShkYXRhKSwgPT0sIGtGaXJzdFBhcnR5RG9tYWluKTsKKyAgICAgICAgd2Vi
a2l0X3dlYnNpdGVfZGF0YV91bnJlZihkYXRhKTsKICAgICAgICAgdGVzdC0+cXVpdE1haW5Mb29w
KCk7CiAgICAgfSwgdGVzdCk7Ci0gICAgR19HTlVDX0VORF9JR05PUkVfREVQUkVDQVRJT05TOwog
ICAgIGdfbWFpbl9sb29wX3J1bih0ZXN0LT5tX21haW5Mb29wKTsKIH0KIApkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3REb3dubG9hZHMuY3BwIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3REb3dubG9hZHMuY3BwCmlu
ZGV4IGMzYWRkNGU0ZTJhOC4uOWM4ZTVhOTYxMzE3IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdERvd25sb2Fkcy5jcHAKKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3REb3dubG9hZHMuY3BwCkBAIC04OSw3ICs4
OSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFRSVUU7CiAgICAgfQogCi0gICAgc3RhdGlj
IHZvaWQgZG93bmxvYWRTdGFydGVkQ2FsbGJhY2soV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCwg
V2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBEb3dubG9hZFRlc3QqIHRlc3QpCisgICAgc3RhdGlj
IHZvaWQgZG93bmxvYWRTdGFydGVkQ2FsbGJhY2soRG93bmxvYWRUZXN0KiB0ZXN0LCBXZWJLaXRE
b3dubG9hZCogZG93bmxvYWQpCiAgICAgewogICAgICAgICBnX2Fzc2VydF9ub25udWxsKHdlYmtp
dF9kb3dubG9hZF9nZXRfcmVxdWVzdChkb3dubG9hZCkpOwogICAgICAgICB0ZXN0LT5zdGFydGVk
KGRvd25sb2FkKTsKQEAgLTEwNiwxMiArMTA2LDIwIEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2Rv
d25sb2FkU2l6ZSgwKQogICAgICAgICAsIG1fYWxsb3dPdmVyd3JpdGUoZmFsc2UpCiAgICAgewot
ICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViQ29udGV4dC5nZXQoKSwgImRvd25sb2FkLXN0
YXJ0ZWQiLCBHX0NBTExCQUNLKGRvd25sb2FkU3RhcnRlZENhbGxiYWNrKSwgdGhpcyk7CisjaWYg
RU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZCht
X25ldHdvcmtTZXNzaW9uLmdldCgpLCAiZG93bmxvYWQtc3RhcnRlZCIsIEdfQ0FMTEJBQ0soZG93
bmxvYWRTdGFydGVkQ2FsbGJhY2spLCB0aGlzKTsKKyNlbHNlCisgICAgICAgIGdfc2lnbmFsX2Nv
bm5lY3Rfc3dhcHBlZChtX3dlYkNvbnRleHQuZ2V0KCksICJkb3dubG9hZC1zdGFydGVkIiwgR19D
QUxMQkFDSyhkb3dubG9hZFN0YXJ0ZWRDYWxsYmFjayksIHRoaXMpOworI2VuZGlmCiAgICAgfQog
CiAgICAgfkRvd25sb2FkVGVzdCgpCiAgICAgewotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19k
aXNjb25uZWN0X21hdGNoZWQobV93ZWJDb250ZXh0LmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRB
LCAwLCAwLCAwLCAwLCB0aGlzKTsKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICAgICAg
Z19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fbmV0d29ya1Nlc3Npb24uZ2V0
KCksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIG51bGxwdHIsIG51bGxwdHIsIHRoaXMpOwor
I2Vsc2UKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fd2Vi
Q29udGV4dC5nZXQoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgbnVsbHB0ciwgbnVsbHB0
ciwgdGhpcyk7CisjZW5kaWYKICAgICAgICAgZ19tYWluX2xvb3BfdW5yZWYobV9tYWluTG9vcCk7
CiAgICAgfQogCkBAIC0xNjAsNyArMTY4LDExIEBAIHB1YmxpYzoKIAogICAgIEdSZWZQdHI8V2Vi
S2l0RG93bmxvYWQ+IGRvd25sb2FkVVJJQW5kV2FpdFVudGlsRmluaXNoZXMoY29uc3QgQ1N0cmlu
ZyYgcmVxdWVzdFVSSSkKICAgICB7CisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgICAg
IEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0gYWRvcHRHUmVmKHdlYmtpdF9uZXR3
b3JrX3Nlc3Npb25fZG93bmxvYWRfdXJpKG1fbmV0d29ya1Nlc3Npb24uZ2V0KCksIHJlcXVlc3RV
UkkuZGF0YSgpKSk7CisjZWxzZQogICAgICAgICBHUmVmUHRyPFdlYktpdERvd25sb2FkPiBkb3du
bG9hZCA9IGFkb3B0R1JlZih3ZWJraXRfd2ViX2NvbnRleHRfZG93bmxvYWRfdXJpKG1fd2ViQ29u
dGV4dC5nZXQoKSwgcmVxdWVzdFVSSS5kYXRhKCkpKTsKKyNlbmRpZgogICAgICAgICBhc3NlcnRP
YmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKGRvd25sb2FkLmdldCgpKSk7
CiAKICAgICAgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X2Rvd25sb2FkX2dldF9hbGxvd19vdmVy
d3JpdGUoZG93bmxvYWQuZ2V0KCkpKTsKQEAgLTUzOSw3ICs1NTEsNyBAQCBjbGFzcyBXZWJWaWV3
RG93bmxvYWRUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgewogcHVibGljOgogICAgIE1BS0VfR0xJ
Ql9URVNUX0ZJWFRVUkUoV2ViVmlld0Rvd25sb2FkVGVzdCk7CiAKLSAgICBzdGF0aWMgdm9pZCBk
b3dubG9hZFN0YXJ0ZWRDYWxsYmFjayhXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJLaXRE
b3dubG9hZCogZG93bmxvYWQsIFdlYlZpZXdEb3dubG9hZFRlc3QqIHRlc3QpCisgICAgc3RhdGlj
IHZvaWQgZG93bmxvYWRTdGFydGVkQ2FsbGJhY2soV2ViVmlld0Rvd25sb2FkVGVzdCogdGVzdCwg
V2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQogICAgIHsKICAgICAgICAgdGVzdC0+bV9kb3dubG9h
ZCA9IGRvd25sb2FkOwogICAgICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVz
dEZpbmlzaGVzKEdfT0JKRUNUKGRvd25sb2FkKSk7CkBAIC01NTAsMTIgKzU2MiwyMCBAQCBwdWJs
aWM6CiAKICAgICBXZWJWaWV3RG93bmxvYWRUZXN0KCkKICAgICB7Ci0gICAgICAgIGdfc2lnbmFs
X2Nvbm5lY3Qod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0KG1fd2ViVmlldyksICJkb3dubG9h
ZC1zdGFydGVkIiwgR19DQUxMQkFDSyhkb3dubG9hZFN0YXJ0ZWRDYWxsYmFjayksIHRoaXMpOwor
I2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBw
ZWQod2Via2l0X3dlYl92aWV3X2dldF9uZXR3b3JrX3Nlc3Npb24obV93ZWJWaWV3KSwgImRvd25s
b2FkLXN0YXJ0ZWQiLCBHX0NBTExCQUNLKGRvd25sb2FkU3RhcnRlZENhbGxiYWNrKSwgdGhpcyk7
CisjZWxzZQorICAgICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQod2Via2l0X3dlYl92aWV3
X2dldF9jb250ZXh0KG1fd2ViVmlldyksICJkb3dubG9hZC1zdGFydGVkIiwgR19DQUxMQkFDSyhk
b3dubG9hZFN0YXJ0ZWRDYWxsYmFjayksIHRoaXMpOworI2VuZGlmCiAgICAgfQogCiAgICAgfldl
YlZpZXdEb3dubG9hZFRlc3QoKQogICAgIHsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlz
Y29ubmVjdF9tYXRjaGVkKHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dChtX3dlYlZpZXcpLCBH
X1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKKyNpZiBFTkFCTEUoMjAyMl9H
TElCX0FQSSkKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKHdl
YmtpdF93ZWJfdmlld19nZXRfbmV0d29ya19zZXNzaW9uKG1fd2ViVmlldyksIEdfU0lHTkFMX01B
VENIX0RBVEEsIDAsIDAsIG51bGxwdHIsIG51bGxwdHIsIHRoaXMpOworI2Vsc2UKKyAgICAgICAg
Z19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKHdlYmtpdF93ZWJfdmlld19nZXRf
Y29udGV4dChtX3dlYlZpZXcpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCBudWxscHRyLCBu
dWxscHRyLCB0aGlzKTsKKyNlbmRpZgogICAgIH0KIAogICAgIHZvaWQgd2FpdFVudGlsRG93bmxv
YWRTdGFydGVkKCkKQEAgLTU4Niw3ICs2MDYsMTEgQEAgcHVibGljOgogICAgIH0KIAogI2lmIFBM
QVRGT1JNKEdUSykKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICBzdGF0aWMgZ2Jvb2xl
YW4gY29udGV4dE1lbnVDYWxsYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRDb250
ZXh0TWVudSogY29udGV4dE1lbnUsIFdlYktpdEhpdFRlc3RSZXN1bHQqIGhpdFRlc3RSZXN1bHQs
IFdlYlZpZXdEb3dubG9hZFRlc3QqIHRlc3QpCisjZWxzZQogICAgIHN0YXRpYyBnYm9vbGVhbiBj
b250ZXh0TWVudUNhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdENvbnRleHRN
ZW51KiBjb250ZXh0TWVudSwgR2RrRXZlbnQqLCBXZWJLaXRIaXRUZXN0UmVzdWx0KiBoaXRUZXN0
UmVzdWx0LCBXZWJWaWV3RG93bmxvYWRUZXN0KiB0ZXN0KQorI2VuZGlmCiAgICAgewogICAgICAg
ICBnX2Fzc2VydF90cnVlKFdFQktJVF9JU19ISVRfVEVTVF9SRVNVTFQoaGl0VGVzdFJlc3VsdCkp
OwogICAgICAgICBHTGlzdCogaXRlbXMgPSB3ZWJraXRfY29udGV4dF9tZW51X2dldF9pdGVtcyhj
b250ZXh0TWVudSk7CkBAIC04MDMsMTQgKzgyNywyMyBAQCBzdGF0aWMgdm9pZCB0ZXN0RG93bmxv
YWRVc2VyQWdlbnQoRG93bmxvYWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogCiBzdGF0aWMg
dm9pZCB0ZXN0RG93bmxvYWRFcGhlbWVyYWxDb250ZXh0KFRlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCiB7CisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgR1JlZlB0cjxXZWJLaXROZXR3
b3JrU2Vzc2lvbj4gbmV0d29ya1Nlc3Npb24gPSBhZG9wdEdSZWYod2Via2l0X25ldHdvcmtfc2Vz
c2lvbl9uZXdfZXBoZW1lcmFsKCkpOworICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdo
ZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QobmV0d29ya1Nlc3Npb24uZ2V0KCkpKTsKKyNlbHNlCiAg
ICAgR1JlZlB0cjxXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXI+IG1hbmFnZXIgPSBhZG9wdEdSZWYo
d2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX25ld19lcGhlbWVyYWwoKSk7CiAgICAgdGVzdC0+
YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChtYW5hZ2VyLmdl
dCgpKSk7CiAgICAgR1JlZlB0cjxXZWJLaXRXZWJDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVm
KHdlYmtpdF93ZWJfY29udGV4dF9uZXdfd2l0aF93ZWJzaXRlX2RhdGFfbWFuYWdlcihtYW5hZ2Vy
LmdldCgpKSk7CiAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hl
cyhHX09CSkVDVChjb250ZXh0LmdldCgpKSk7CiAgICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfd2Vi
X2NvbnRleHRfaXNfZXBoZW1lcmFsKGNvbnRleHQuZ2V0KCkpKTsKKyNlbmRpZgogCiAgICAgR1Jl
ZlB0cjxHTWFpbkxvb3A+IG1haW5Mb29wID0gYWRvcHRHUmVmKGdfbWFpbl9sb29wX25ldyhudWxs
cHRyLCBUUlVFKSk7CisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgR1JlZlB0cjxXZWJL
aXREb3dubG9hZD4gZG93bmxvYWQgPSBhZG9wdEdSZWYod2Via2l0X25ldHdvcmtfc2Vzc2lvbl9k
b3dubG9hZF91cmkobmV0d29ya1Nlc3Npb24uZ2V0KCksIGtTZXJ2ZXItPmdldFVSSUZvclBhdGgo
Ii90ZXN0LnBkZiIpLmRhdGEoKSkpOworI2Vsc2UKICAgICBHUmVmUHRyPFdlYktpdERvd25sb2Fk
PiBkb3dubG9hZCA9IGFkb3B0R1JlZih3ZWJraXRfd2ViX2NvbnRleHRfZG93bmxvYWRfdXJpKGNv
bnRleHQuZ2V0KCksIGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi90ZXN0LnBkZiIpLmRhdGEoKSkp
OworI2VuZGlmCiAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hl
cyhHX09CSkVDVChkb3dubG9hZC5nZXQoKSkpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QoZG93bmxv
YWQuZ2V0KCksICJkZWNpZGUtZGVzdGluYXRpb24iLCBHX0NBTExCQUNLKCtbXShXZWJLaXREb3du
bG9hZCogZG93bmxvYWQsIGNvbnN0IGdjaGFyKiBzdWdnZXN0ZWRGaWxlbmFtZSwgZ3BvaW50ZXIp
IHsKICAgICAgICAgR1VuaXF1ZVB0cjxjaGFyPiBkZXN0aW5hdGlvbihnX2J1aWxkX2ZpbGVuYW1l
KFRlc3Q6OmRhdGFEaXJlY3RvcnkoKSwgc3VnZ2VzdGVkRmlsZW5hbWUsIG51bGxwdHIpKTsKQEAg
LTgyNyw3ICs4NjAsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0RG93bmxvYWRFcGhlbWVyYWxDb250ZXh0
KFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgZ19maWxlX2RlbGV0ZShkZXN0RmlsZS5n
ZXQoKSwgbnVsbHB0ciwgbnVsbHB0cik7CiB9CiAKLSNpZiBQTEFURk9STShHVEspICYmICFVU0Uo
R1RLNCkKKyNpZiBQTEFURk9STShHVEspCiBzdGF0aWMgdm9pZCB0ZXN0Q29udGV4dE1lbnVEb3du
bG9hZEFjdGlvbnMoV2ViVmlld0Rvd25sb2FkVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKIHsK
ICAgICB0ZXN0LT5zaG93SW5XaW5kb3coKTsKQEAgLTg1OCw3ICs4OTEsNyBAQCBzdGF0aWMgdm9p
ZCB0ZXN0Q29udGV4dE1lbnVEb3dubG9hZEFjdGlvbnMoV2ViVmlld0Rvd25sb2FkVGVzdCogdGVz
dCwgZ2NvbnN0cG9pbgogICAgIGdfYXNzZXJ0X2NtcGludChnX2ZpbGVfaW5mb19nZXRfc2l6ZShk
b3dubG9hZEZpbGVJbmZvLmdldCgpKSwgPiwgMCk7CiAgICAgZ19maWxlX2RlbGV0ZShkb3dubG9h
ZEZpbGUuZ2V0KCksIG51bGxwdHIsIG51bGxwdHIpOwogfQotI2VuZGlmIC8vIFBMQVRGT1JNKEdU
SykgJiYgIVVTRShHVEs0KQorI2VuZGlmIC8vIFBMQVRGT1JNKEdUSykKIAogI2lmIFBMQVRGT1JN
KEdUSykKIHN0YXRpYyB2b2lkIHRlc3RCbG9iRG93bmxvYWQoV2ViVmlld0Rvd25sb2FkVGVzdCog
dGVzdCwgZ2NvbnN0cG9pbnRlcikKQEAgLTkxNiwxMiArOTQ5LDkgQEAgdm9pZCBiZWZvcmVBbGwo
KQogICAgIERvd25sb2FkVGVzdDo6YWRkKCJEb3dubG9hZHMiLCAidGV4dC1wbGFpbi1taW1lLXR5
cGUiLCB0ZXN0RG93bmxvYWRUZXh0UGxhaW5NSU1FVHlwZSk7CiAgICAgRG93bmxvYWRUZXN0Ojph
ZGQoIkRvd25sb2FkcyIsICJ1c2VyLWFnZW50IiwgdGVzdERvd25sb2FkVXNlckFnZW50KTsKICAg
ICBUZXN0OjphZGQoIkRvd25sb2FkcyIsICJlcGhlbWVyYWwtY29udGV4dCIsIHRlc3REb3dubG9h
ZEVwaGVtZXJhbENvbnRleHQpOwotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQga2V5U3Ryb2tlIGlu
IFdQRS4KICNpZiBQTEFURk9STShHVEspCi0jaWYgIVVTRShHVEs0KQotICAgIC8vIEZJWE1FOiBS
ZXdvcmsgY29udGV4dCBtZW51IEFQSSBpbiBHVEs0IHRvIG5vdCBleHBvc2UgR2RrRXZlbnQuCisg
ICAgLy8gRklYTUU6IEltcGxlbWVudCBrZXlTdHJva2UgaW4gV1BFLgogICAgIFdlYlZpZXdEb3du
bG9hZFRlc3Q6OmFkZCgiRG93bmxvYWRzIiwgImNvbnRleC1tZW51LWRvd25sb2FkLWFjdGlvbnMi
LCB0ZXN0Q29udGV4dE1lbnVEb3dubG9hZEFjdGlvbnMpOwotI2VuZGlmCiAgICAgLy8gRklYTUU6
IEltcGxlbWVudCBtb3VzZSBjbGljayBpbiBXUEUuCiAgICAgV2ViVmlld0Rvd25sb2FkVGVzdDo6
YWRkKCJEb3dubG9hZHMiLCAiYmxvYi1kb3dubG9hZCIsIHRlc3RCbG9iRG93bmxvYWQpOwogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVz
dFNTTC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFNTTC5j
cHAKaW5kZXggYmFiYWRhZjA1OWQ2Li40ODg0MTIyMjEwNTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0U1NMLmNwcAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFNTTC5jcHAKQEAgLTY3LDkgKzY3LDE0IEBA
IHB1YmxpYzoKIAogc3RhdGljIHZvaWQgdGVzdFNTTChTU0xUZXN0KiB0ZXN0LCBnY29uc3Rwb2lu
dGVyKQogeworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIFdlYktpdFRMU0Vycm9yc1Bv
bGljeSBvcmlnaW5hbFBvbGljeSA9IHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X3Rsc19lcnJv
cnNfcG9saWN5KHRlc3QtPm1fbmV0d29ya1Nlc3Npb24uZ2V0KCkpOworICAgIHdlYmtpdF9uZXR3
b3JrX3Nlc3Npb25fc2V0X3Rsc19lcnJvcnNfcG9saWN5KHRlc3QtPm1fbmV0d29ya1Nlc3Npb24u
Z2V0KCksIFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9JR05PUkUpOworI2Vsc2UKICAgICBhdXRv
KiB3ZWJzaXRlRGF0YU1hbmFnZXIgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0
YV9tYW5hZ2VyKHRlc3QtPm1fd2ViQ29udGV4dC5nZXQoKSk7CiAgICAgV2ViS2l0VExTRXJyb3Jz
UG9saWN5IG9yaWdpbmFsUG9saWN5ID0gd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF90
bHNfZXJyb3JzX3BvbGljeSh3ZWJzaXRlRGF0YU1hbmFnZXIpOwogICAgIHdlYmtpdF93ZWJzaXRl
X2RhdGFfbWFuYWdlcl9zZXRfdGxzX2Vycm9yc19wb2xpY3kod2Vic2l0ZURhdGFNYW5hZ2VyLCBX
RUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfSUdOT1JFKTsKKyNlbmRpZgogCiAgICAgdGVzdC0+bG9h
ZFVSSShrSHR0cHNTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi8iKS5kYXRhKCkpOwogICAgIHRlc3Qt
PndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwpAQCAtODYsNyArOTEsMTEgQEAgc3RhdGljIHZvaWQg
dGVzdFNTTChTU0xUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGdfYXNzZXJ0X251bGwo
dGVzdC0+bV9jZXJ0aWZpY2F0ZSk7CiAgICAgZ19hc3NlcnRfY21wdWludCh0ZXN0LT5tX3Rsc0Vy
cm9ycywgPT0sIDApOwogCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgd2Via2l0X25l
dHdvcmtfc2Vzc2lvbl9zZXRfdGxzX2Vycm9yc19wb2xpY3kodGVzdC0+bV9uZXR3b3JrU2Vzc2lv
bi5nZXQoKSwgb3JpZ2luYWxQb2xpY3kpOworI2Vsc2UKICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRh
X21hbmFnZXJfc2V0X3Rsc19lcnJvcnNfcG9saWN5KHdlYnNpdGVEYXRhTWFuYWdlciwgb3JpZ2lu
YWxQb2xpY3kpOworI2VuZGlmCiB9CiAKIGNsYXNzIEluc2VjdXJlQ29udGVudFRlc3Q6IHB1Ymxp
YyBXZWJWaWV3VGVzdCB7CkBAIC0xMTcsOSArMTI2LDE0IEBAIHB1YmxpYzoKIAogc3RhdGljIHZv
aWQgdGVzdEluc2VjdXJlQ29udGVudChJbnNlY3VyZUNvbnRlbnRUZXN0KiB0ZXN0LCBnY29uc3Rw
b2ludGVyKQogeworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIFdlYktpdFRMU0Vycm9y
c1BvbGljeSBvcmlnaW5hbFBvbGljeSA9IHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X3Rsc19l
cnJvcnNfcG9saWN5KHRlc3QtPm1fbmV0d29ya1Nlc3Npb24uZ2V0KCkpOworICAgIHdlYmtpdF9u
ZXR3b3JrX3Nlc3Npb25fc2V0X3Rsc19lcnJvcnNfcG9saWN5KHRlc3QtPm1fbmV0d29ya1Nlc3Np
b24uZ2V0KCksIFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9JR05PUkUpOworI2Vsc2UKICAgICBh
dXRvKiB3ZWJzaXRlRGF0YU1hbmFnZXIgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyKHRlc3QtPm1fd2ViQ29udGV4dC5nZXQoKSk7CiAgICAgV2ViS2l0VExTRXJy
b3JzUG9saWN5IG9yaWdpbmFsUG9saWN5ID0gd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dl
dF90bHNfZXJyb3JzX3BvbGljeSh3ZWJzaXRlRGF0YU1hbmFnZXIpOwogICAgIHdlYmtpdF93ZWJz
aXRlX2RhdGFfbWFuYWdlcl9zZXRfdGxzX2Vycm9yc19wb2xpY3kod2Vic2l0ZURhdGFNYW5hZ2Vy
LCBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfSUdOT1JFKTsKKyNlbmRpZgogCiAgICAgdGVzdC0+
bG9hZFVSSShrSHR0cHNTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9pbnNlY3VyZS1jb250ZW50LyIp
LmRhdGEoKSk7CiAgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CkBAIC0xMjksMTYg
KzE0MywyNCBAQCBzdGF0aWMgdm9pZCB0ZXN0SW5zZWN1cmVDb250ZW50KEluc2VjdXJlQ29udGVu
dFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0MjQ2OQogICAgIGdfYXNzZXJ0X3RydWUodGVzdC0+bV9pbnNl
Y3VyZUNvbnRlbnREaXNwbGF5ZWQpOwogCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAg
d2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfdGxzX2Vycm9yc19wb2xpY3kodGVzdC0+bV9uZXR3
b3JrU2Vzc2lvbi5nZXQoKSwgb3JpZ2luYWxQb2xpY3kpOworI2Vsc2UKICAgICB3ZWJraXRfd2Vi
c2l0ZV9kYXRhX21hbmFnZXJfc2V0X3Rsc19lcnJvcnNfcG9saWN5KHdlYnNpdGVEYXRhTWFuYWdl
ciwgb3JpZ2luYWxQb2xpY3kpOworI2VuZGlmCiB9CiAKIHN0YXRpYyBib29sIGFzc2VydElmU1NM
UmVxdWVzdFByb2Nlc3NlZCA9IGZhbHNlOwogCiBzdGF0aWMgdm9pZCB0ZXN0VExTRXJyb3JzUG9s
aWN5KFNTTFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiB7Ci0gICAgYXV0byogd2Vic2l0ZURh
dGFNYW5hZ2VyID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcih0
ZXN0LT5tX3dlYkNvbnRleHQuZ2V0KCkpOwogICAgIC8vIFRMUyBlcnJvcnMgYXJlIHRyZWF0ZWQg
YXMgdHJhbnNwb3J0IGZhaWx1cmVzIGJ5IGRlZmF1bHQuCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9B
UEkpCisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X3Rsc19l
cnJvcnNfcG9saWN5KHRlc3QtPm1fbmV0d29ya1Nlc3Npb24uZ2V0KCkpLCA9PSwgV0VCS0lUX1RM
U19FUlJPUlNfUE9MSUNZX0ZBSUwpOworI2Vsc2UKKyAgICBhdXRvKiB3ZWJzaXRlRGF0YU1hbmFn
ZXIgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHRlc3QtPm1f
d2ViQ29udGV4dC5nZXQoKSk7CiAgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcl9nZXRfdGxzX2Vycm9yc19wb2xpY3kod2Vic2l0ZURhdGFNYW5hZ2VyKSwgPT0s
IFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9GQUlMKTsKKyNlbmRpZgogCiAgICAgYXNzZXJ0SWZT
U0xSZXF1ZXN0UHJvY2Vzc2VkID0gdHJ1ZTsKICAgICB0ZXN0LT5sb2FkVVJJKGtIdHRwc1NlcnZl
ci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CkBAIC0xNDgsMzcgKzE3MCw2NCBAQCBzdGF0
aWMgdm9pZCB0ZXN0VExTRXJyb3JzUG9saWN5KFNTTFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
CiAgICAgZ19hc3NlcnRfZmFsc2UodGVzdC0+bV9sb2FkRXZlbnRzLmNvbnRhaW5zKExvYWRUcmFj
a2luZ1Rlc3Q6OkxvYWRDb21taXR0ZWQpKTsKICAgICBhc3NlcnRJZlNTTFJlcXVlc3RQcm9jZXNz
ZWQgPSBmYWxzZTsKIAorI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIHdlYmtpdF9uZXR3
b3JrX3Nlc3Npb25fc2V0X3Rsc19lcnJvcnNfcG9saWN5KHRlc3QtPm1fbmV0d29ya1Nlc3Npb24u
Z2V0KCksIFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9JR05PUkUpOworICAgIGdfYXNzZXJ0X2Nt
cGludCh3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF90bHNfZXJyb3JzX3BvbGljeSh0ZXN0LT5t
X25ldHdvcmtTZXNzaW9uLmdldCgpKSwgPT0sIFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9JR05P
UkUpOworI2Vsc2UKICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X3Rsc19lcnJv
cnNfcG9saWN5KHdlYnNpdGVEYXRhTWFuYWdlciwgV0VCS0lUX1RMU19FUlJPUlNfUE9MSUNZX0lH
Tk9SRSk7CiAgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9n
ZXRfdGxzX2Vycm9yc19wb2xpY3kod2Vic2l0ZURhdGFNYW5hZ2VyKSwgPT0sIFdFQktJVF9UTFNf
RVJST1JTX1BPTElDWV9JR05PUkUpOworI2VuZGlmCiAKICAgICB0ZXN0LT5tX2xvYWRGYWlsZWQg
PSBmYWxzZTsKICAgICB0ZXN0LT5sb2FkVVJJKGtIdHRwc1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgi
LyIpLmRhdGEoKSk7CiAgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CiAgICAgZ19h
c3NlcnRfZmFsc2UodGVzdC0+bV9sb2FkRmFpbGVkKTsKIAotICAgIC8vIEFuIGVwaGVtZXJhbCB3
ZWIgdmlldyBzaG91bGQga2VlcCB0aGUgc2FtZSBuZXR3b3JrIHNldHRpbmdzIGJ5IGRlZmF1bHQu
CisgICAgLy8gQW4gZXBoZW1lcmFsIHdlYiB2aWV3IHNob3VsZCBrZWVwIHRoZSBzYW1lIG5ldHdv
cmsgc2V0dGluZ3MuCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgR1JlZlB0cjxXZWJL
aXROZXR3b3JrU2Vzc2lvbj4gZXBoZW1lcmFsU2Vzc2lvbiA9IGFkb3B0R1JlZih3ZWJraXRfbmV0
d29ya19zZXNzaW9uX25ld19lcGhlbWVyYWwoKSk7CisgICAgd2Via2l0X25ldHdvcmtfc2Vzc2lv
bl9zZXRfdGxzX2Vycm9yc19wb2xpY3koZXBoZW1lcmFsU2Vzc2lvbi5nZXQoKSwgd2Via2l0X25l
dHdvcmtfc2Vzc2lvbl9nZXRfdGxzX2Vycm9yc19wb2xpY3kodGVzdC0+bV9uZXR3b3JrU2Vzc2lv
bi5nZXQoKSkpOworI2VuZGlmCiAgICAgYXV0byB3ZWJWaWV3ID0gVGVzdDo6YWRvcHRWaWV3KGdf
b2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfVklFVywKICNpZiBQTEFURk9STShXUEUpCiAgICAg
ICAgICJiYWNrZW5kIiwgVGVzdDo6Y3JlYXRlV2ViVmlld0JhY2tlbmQoKSwKICNlbmRpZgogICAg
ICAgICAid2ViLWNvbnRleHQiLCB0ZXN0LT5tX3dlYkNvbnRleHQuZ2V0KCksCisjaWYgRU5BQkxF
KDIwMjJfR0xJQl9BUEkpCisgICAgICAgICJuZXR3b3JrLXNlc3Npb24iLCBlcGhlbWVyYWxTZXNz
aW9uLmdldCgpLAorI2Vsc2UKICAgICAgICAgImlzLWVwaGVtZXJhbCIsIFRSVUUsCisjZW5kaWYK
ICAgICAgICAgbnVsbHB0cikpOworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIGdfYXNz
ZXJ0X3RydWUod2Via2l0X3dlYl92aWV3X2dldF9uZXR3b3JrX3Nlc3Npb24od2ViVmlldy5nZXQo
KSkgPT0gZXBoZW1lcmFsU2Vzc2lvbi5nZXQoKSk7CisjZWxzZQogICAgIGdfYXNzZXJ0X3RydWUo
d2Via2l0X3dlYl92aWV3X2lzX2VwaGVtZXJhbCh3ZWJWaWV3LmdldCgpKSk7CiAgICAgZ19hc3Nl
cnRfZmFsc2Uod2Via2l0X3dlYl9jb250ZXh0X2lzX2VwaGVtZXJhbCh0ZXN0LT5tX3dlYkNvbnRl
eHQuZ2V0KCkpKTsKICAgICBhdXRvKiB3ZWJWaWV3RGF0YU1hbmFnZXIgPSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYlZpZXcuZ2V0KCkpOwogICAgIGdfYXNzZXJ0
X2ZhbHNlKHdlYnNpdGVEYXRhTWFuYWdlciA9PSB3ZWJWaWV3RGF0YU1hbmFnZXIpOwogICAgIGdf
YXNzZXJ0X2NtcGludCh3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X3Rsc19lcnJvcnNf
cG9saWN5KHdlYnNpdGVEYXRhTWFuYWdlciksID09LCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFn
ZXJfZ2V0X3Rsc19lcnJvcnNfcG9saWN5KHdlYlZpZXdEYXRhTWFuYWdlcikpOworI2VuZGlmCiAK
KyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICB3ZWJraXRfbmV0d29ya19zZXNzaW9uX3Nl
dF90bHNfZXJyb3JzX3BvbGljeSh0ZXN0LT5tX25ldHdvcmtTZXNzaW9uLmdldCgpLCBXRUJLSVRf
VExTX0VSUk9SU19QT0xJQ1lfRkFJTCk7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF9uZXR3
b3JrX3Nlc3Npb25fZ2V0X3Rsc19lcnJvcnNfcG9saWN5KHRlc3QtPm1fbmV0d29ya1Nlc3Npb24u
Z2V0KCkpLCA9PSwgV0VCS0lUX1RMU19FUlJPUlNfUE9MSUNZX0ZBSUwpOworI2Vsc2UKICAgICB3
ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X3Rsc19lcnJvcnNfcG9saWN5KHdlYnNpdGVE
YXRhTWFuYWdlciwgV0VCS0lUX1RMU19FUlJPUlNfUE9MSUNZX0ZBSUwpOwogICAgIGdfYXNzZXJ0
X2NtcGludCh3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X3Rsc19lcnJvcnNfcG9saWN5
KHdlYnNpdGVEYXRhTWFuYWdlciksID09LCBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfRkFJTCk7
CisjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgdGVzdFRMU0Vycm9yc1JlZGlyZWN0KFNTTFRlc3Qq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCiB7CisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAg
V2ViS2l0VExTRXJyb3JzUG9saWN5IG9yaWdpbmFsUG9saWN5ID0gd2Via2l0X25ldHdvcmtfc2Vz
c2lvbl9nZXRfdGxzX2Vycm9yc19wb2xpY3kodGVzdC0+bV9uZXR3b3JrU2Vzc2lvbi5nZXQoKSk7
CisgICAgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfdGxzX2Vycm9yc19wb2xpY3kodGVzdC0+
bV9uZXR3b3JrU2Vzc2lvbi5nZXQoKSwgV0VCS0lUX1RMU19FUlJPUlNfUE9MSUNZX0ZBSUwpOwor
I2Vsc2UKICAgICBhdXRvKiB3ZWJzaXRlRGF0YU1hbmFnZXIgPSB3ZWJraXRfd2ViX2NvbnRleHRf
Z2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHRlc3QtPm1fd2ViQ29udGV4dC5nZXQoKSk7CiAgICAg
V2ViS2l0VExTRXJyb3JzUG9saWN5IG9yaWdpbmFsUG9saWN5ID0gd2Via2l0X3dlYnNpdGVfZGF0
YV9tYW5hZ2VyX2dldF90bHNfZXJyb3JzX3BvbGljeSh3ZWJzaXRlRGF0YU1hbmFnZXIpOwogICAg
IHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9zZXRfdGxzX2Vycm9yc19wb2xpY3kod2Vic2l0
ZURhdGFNYW5hZ2VyLCBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfRkFJTCk7CisjZW5kaWYKIAog
ICAgIGFzc2VydElmU1NMUmVxdWVzdFByb2Nlc3NlZCA9IHRydWU7CiAgICAgdGVzdC0+bG9hZFVS
SShrSHR0cHNTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9yZWRpcmVjdCIpLmRhdGEoKSk7CkBAIC0x
ODgsNyArMjM3LDExIEBAIHN0YXRpYyB2b2lkIHRlc3RUTFNFcnJvcnNSZWRpcmVjdChTU0xUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGdfYXNzZXJ0X2ZhbHNlKHRlc3QtPm1fbG9hZEV2
ZW50cy5jb250YWlucyhMb2FkVHJhY2tpbmdUZXN0OjpMb2FkQ29tbWl0dGVkKSk7CiAgICAgYXNz
ZXJ0SWZTU0xSZXF1ZXN0UHJvY2Vzc2VkID0gZmFsc2U7CiAKKyNpZiBFTkFCTEUoMjAyMl9HTElC
X0FQSSkKKyAgICB3ZWJraXRfbmV0d29ya19zZXNzaW9uX3NldF90bHNfZXJyb3JzX3BvbGljeSh0
ZXN0LT5tX25ldHdvcmtTZXNzaW9uLmdldCgpLCBvcmlnaW5hbFBvbGljeSk7CisjZWxzZQogICAg
IHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9zZXRfdGxzX2Vycm9yc19wb2xpY3kod2Vic2l0
ZURhdGFNYW5hZ2VyLCBvcmlnaW5hbFBvbGljeSk7CisjZW5kaWYKIH0KIAogc3RhdGljIGdib29s
ZWFuIHdlYlZpZXdBdXRoZW50aWNhdGlvbkNhbGxiYWNrKFdlYktpdFdlYlZpZXcqLCBXZWJLaXRB
dXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QpCkBAIC0yMDAsOSArMjUzLDE0IEBAIHN0YXRp
YyBnYm9vbGVhbiB3ZWJWaWV3QXV0aGVudGljYXRpb25DYWxsYmFjayhXZWJLaXRXZWJWaWV3Kiwg
V2ViS2l0QXV0aGVudGljYXRpCiAKIHN0YXRpYyB2b2lkIHRlc3RUTFNFcnJvcnNIVFRQQXV0aChT
U0xUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogeworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJ
KQorICAgIFdlYktpdFRMU0Vycm9yc1BvbGljeSBvcmlnaW5hbFBvbGljeSA9IHdlYmtpdF9uZXR3
b3JrX3Nlc3Npb25fZ2V0X3Rsc19lcnJvcnNfcG9saWN5KHRlc3QtPm1fbmV0d29ya1Nlc3Npb24u
Z2V0KCkpOworICAgIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fc2V0X3Rsc19lcnJvcnNfcG9saWN5
KHRlc3QtPm1fbmV0d29ya1Nlc3Npb24uZ2V0KCksIFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9G
QUlMKTsKKyNlbHNlCiAgICAgYXV0byogd2Vic2l0ZURhdGFNYW5hZ2VyID0gd2Via2l0X3dlYl9j
b250ZXh0X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcih0ZXN0LT5tX3dlYkNvbnRleHQuZ2V0KCkp
OwogICAgIFdlYktpdFRMU0Vycm9yc1BvbGljeSBvcmlnaW5hbFBvbGljeSA9IHdlYmtpdF93ZWJz
aXRlX2RhdGFfbWFuYWdlcl9nZXRfdGxzX2Vycm9yc19wb2xpY3kod2Vic2l0ZURhdGFNYW5hZ2Vy
KTsKICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X3Rsc19lcnJvcnNfcG9saWN5
KHdlYnNpdGVEYXRhTWFuYWdlciwgV0VCS0lUX1RMU19FUlJPUlNfUE9MSUNZX0ZBSUwpOworI2Vu
ZGlmCiAKICAgICBhc3NlcnRJZlNTTFJlcXVlc3RQcm9jZXNzZWQgPSB0cnVlOwogICAgIGdfc2ln
bmFsX2Nvbm5lY3QodGVzdC0+bV93ZWJWaWV3LCAiYXV0aGVudGljYXRlIiwgR19DQUxMQkFDSyh3
ZWJWaWV3QXV0aGVudGljYXRpb25DYWxsYmFjayksIE5VTEwpOwpAQCAtMjEzLDcgKzI3MSwxMSBA
QCBzdGF0aWMgdm9pZCB0ZXN0VExTRXJyb3JzSFRUUEF1dGgoU1NMVGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKICAgICBnX2Fzc2VydF9mYWxzZSh0ZXN0LT5tX2xvYWRFdmVudHMuY29udGFpbnMo
TG9hZFRyYWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCkpOwogICAgIGFzc2VydElmU1NMUmVxdWVz
dFByb2Nlc3NlZCA9IGZhbHNlOwogCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgd2Vi
a2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfdGxzX2Vycm9yc19wb2xpY3kodGVzdC0+bV9uZXR3b3Jr
U2Vzc2lvbi5nZXQoKSwgb3JpZ2luYWxQb2xpY3kpOworI2Vsc2UKICAgICB3ZWJraXRfd2Vic2l0
ZV9kYXRhX21hbmFnZXJfc2V0X3Rsc19lcnJvcnNfcG9saWN5KHdlYnNpdGVEYXRhTWFuYWdlciwg
b3JpZ2luYWxQb2xpY3kpOworI2VuZGlmCiB9CiAKIGNsYXNzIFRMU0Vycm9yc1Rlc3Q6IHB1Ymxp
YyBTU0xUZXN0IHsKQEAgLTI0OCw5ICszMTAsMTQgQEAgcHJpdmF0ZToKIAogc3RhdGljIHZvaWQg
dGVzdExvYWRGYWlsZWRXaXRoVExTRXJyb3JzKFRMU0Vycm9yc1Rlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCiB7CisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgV2ViS2l0VExTRXJyb3Jz
UG9saWN5IG9yaWdpbmFsUG9saWN5ID0gd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfdGxzX2Vy
cm9yc19wb2xpY3kodGVzdC0+bV9uZXR3b3JrU2Vzc2lvbi5nZXQoKSk7CisgICAgd2Via2l0X25l
dHdvcmtfc2Vzc2lvbl9zZXRfdGxzX2Vycm9yc19wb2xpY3kodGVzdC0+bV9uZXR3b3JrU2Vzc2lv
bi5nZXQoKSwgV0VCS0lUX1RMU19FUlJPUlNfUE9MSUNZX0ZBSUwpOworI2Vsc2UKICAgICBhdXRv
KiB3ZWJzaXRlRGF0YU1hbmFnZXIgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0
YV9tYW5hZ2VyKHRlc3QtPm1fd2ViQ29udGV4dC5nZXQoKSk7CiAgICAgV2ViS2l0VExTRXJyb3Jz
UG9saWN5IG9yaWdpbmFsUG9saWN5ID0gd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF90
bHNfZXJyb3JzX3BvbGljeSh3ZWJzaXRlRGF0YU1hbmFnZXIpOwogICAgIHdlYmtpdF93ZWJzaXRl
X2RhdGFfbWFuYWdlcl9zZXRfdGxzX2Vycm9yc19wb2xpY3kod2Vic2l0ZURhdGFNYW5hZ2VyLCBX
RUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfRkFJTCk7CisjZW5kaWYKIAogICAgIGFzc2VydElmU1NM
UmVxdWVzdFByb2Nlc3NlZCA9IHRydWU7CiAgICAgLy8gVGhlIGxvYWQtZmFpbGVkLXdpdGgtdGxz
LWVycm9ycyBzaWduYWwgc2hvdWxkIGJlIGVtaXR0ZWQgd2hlbiB0aGVyZSBpcyBhIFRMUyBmYWls
dXJlLgpAQCAtMjY1LDcgKzMzMiwxMSBAQCBzdGF0aWMgdm9pZCB0ZXN0TG9hZEZhaWxlZFdpdGhU
TFNFcnJvcnMoVExTRXJyb3JzVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICBhc3NlcnRJ
ZlNTTFJlcXVlc3RQcm9jZXNzZWQgPSBmYWxzZTsKIAogICAgIC8vIFRlc3QgYWxsb3dpbmcgYW4g
ZXhjZXB0aW9uIGZvciB0aGlzIGNlcnRpZmljYXRlIG9uIHRoaXMgaG9zdC4KKyNpZiBFTkFCTEUo
MjAyMl9HTElCX0FQSSkKKyAgICB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2FsbG93X3Rsc19jZXJ0
aWZpY2F0ZV9mb3JfaG9zdCh0ZXN0LT5tX25ldHdvcmtTZXNzaW9uLmdldCgpLCB0ZXN0LT5jZXJ0
aWZpY2F0ZSgpLCB0ZXN0LT5ob3N0KCkuZGF0YSgpKTsKKyNlbHNlCiAgICAgd2Via2l0X3dlYl9j
b250ZXh0X2FsbG93X3Rsc19jZXJ0aWZpY2F0ZV9mb3JfaG9zdCh0ZXN0LT5tX3dlYkNvbnRleHQu
Z2V0KCksIHRlc3QtPmNlcnRpZmljYXRlKCksIHRlc3QtPmhvc3QoKS5kYXRhKCkpOworI2VuZGlm
CiAgICAgLy8gVGhlIHBhZ2Ugc2hvdWxkIG5vdyBsb2FkIHdpdGhvdXQgZXJyb3JzLgogICAgIHRl
c3QtPmxvYWRVUkkoa0h0dHBzU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvdGVzdC10bHMvIikuZGF0
YSgpKTsKICAgICB0ZXN0LT53YWl0VW50aWxUaXRsZUNoYW5nZWQoKTsKQEAgLTI3NSw3ICszNDYs
MTEgQEAgc3RhdGljIHZvaWQgdGVzdExvYWRGYWlsZWRXaXRoVExTRXJyb3JzKFRMU0Vycm9yc1Rl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9h
ZEV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7CiAgICAgZ19h
c3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdGl0bGUodGVzdC0+bV93ZWJWaWV3KSwg
PT0sIFRMU0V4cGVjdGVkU3VjY2Vzc1RpdGxlKTsKIAorI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJ
KQorICAgIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fc2V0X3Rsc19lcnJvcnNfcG9saWN5KHRlc3Qt
Pm1fbmV0d29ya1Nlc3Npb24uZ2V0KCksIG9yaWdpbmFsUG9saWN5KTsKKyNlbHNlCiAgICAgd2Vi
a2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX3NldF90bHNfZXJyb3JzX3BvbGljeSh3ZWJzaXRlRGF0
YU1hbmFnZXIsIG9yaWdpbmFsUG9saWN5KTsKKyNlbmRpZgogfQogCiBjbGFzcyBUTFNTdWJyZXNv
dXJjZVRlc3QgOiBwdWJsaWMgV2ViVmlld1Rlc3QgewpAQCAtMzM0LDggKzQwOSwxNCBAQCBwdWJs
aWM6CiAKIHN0YXRpYyB2b2lkIHRlc3RTdWJyZXNvdXJjZUxvYWRGYWlsZWRXaXRoVExTRXJyb3Jz
KFRMU1N1YnJlc291cmNlVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKIHsKKyNpZiBFTkFCTEUo
MjAyMl9HTElCX0FQSSkKKyAgICBXZWJLaXRUTFNFcnJvcnNQb2xpY3kgb3JpZ2luYWxQb2xpY3kg
PSB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF90bHNfZXJyb3JzX3BvbGljeSh0ZXN0LT5tX25l
dHdvcmtTZXNzaW9uLmdldCgpKTsKKyAgICB3ZWJraXRfbmV0d29ya19zZXNzaW9uX3NldF90bHNf
ZXJyb3JzX3BvbGljeSh0ZXN0LT5tX25ldHdvcmtTZXNzaW9uLmdldCgpLCBXRUJLSVRfVExTX0VS
Uk9SU19QT0xJQ1lfRkFJTCk7CisjZWxzZQogICAgIGF1dG8qIHdlYnNpdGVEYXRhTWFuYWdlciA9
IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIodGVzdC0+bV93ZWJD
b250ZXh0LmdldCgpKTsKKyAgICBXZWJLaXRUTFNFcnJvcnNQb2xpY3kgb3JpZ2luYWxQb2xpY3kg
PSB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X3Rsc19lcnJvcnNfcG9saWN5KHdlYnNp
dGVEYXRhTWFuYWdlcik7CiAgICAgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX3NldF90bHNf
ZXJyb3JzX3BvbGljeSh3ZWJzaXRlRGF0YU1hbmFnZXIsIFdFQktJVF9UTFNfRVJST1JTX1BPTElD
WV9GQUlMKTsKKyNlbmRpZgogCiAgICAgYXNzZXJ0SWZTU0xSZXF1ZXN0UHJvY2Vzc2VkID0gdHJ1
ZTsKICAgICB0ZXN0LT5sb2FkVVJJKGtIdHRwU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIikuZGF0
YSgpKTsKQEAgLTM0Myw2ICs0MjQsMTMgQEAgc3RhdGljIHZvaWQgdGVzdFN1YnJlc291cmNlTG9h
ZEZhaWxlZFdpdGhUTFNFcnJvcnMoVExTU3VicmVzb3VyY2VUZXN0KiB0ZXN0LCBnY28KICAgICBn
X2Fzc2VydF90cnVlKEdfSVNfVExTX0NFUlRJRklDQVRFKHRlc3QtPm1fY2VydGlmaWNhdGUuZ2V0
KCkpKTsKICAgICBnX2Fzc2VydF9jbXB1aW50KHRlc3QtPm1fdGxzRXJyb3JzLCA9PSwgR19UTFNf
Q0VSVElGSUNBVEVfVU5LTk9XTl9DQSk7CiAgICAgYXNzZXJ0SWZTU0xSZXF1ZXN0UHJvY2Vzc2Vk
ID0gZmFsc2U7CisKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICB3ZWJraXRfbmV0d29y
a19zZXNzaW9uX3NldF90bHNfZXJyb3JzX3BvbGljeSh0ZXN0LT5tX25ldHdvcmtTZXNzaW9uLmdl
dCgpLCBvcmlnaW5hbFBvbGljeSk7CisjZWxzZQorICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFu
YWdlcl9zZXRfdGxzX2Vycm9yc19wb2xpY3kod2Vic2l0ZURhdGFNYW5hZ2VyLCBvcmlnaW5hbFBv
bGljeSk7CisjZW5kaWYKKwogfQogCiBjbGFzcyBXZWJTb2NrZXRUZXN0IDogcHVibGljIFdlYlZp
ZXdUZXN0IHsKQEAgLTQyMCw5ICs1MDgsMTQgQEAgcHVibGljOgogCiBzdGF0aWMgdm9pZCB0ZXN0
V2ViU29ja2V0VExTRXJyb3JzKFdlYlNvY2tldFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiB7
CisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgV2ViS2l0VExTRXJyb3JzUG9saWN5IG9y
aWdpbmFsUG9saWN5ID0gd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfdGxzX2Vycm9yc19wb2xp
Y3kodGVzdC0+bV9uZXR3b3JrU2Vzc2lvbi5nZXQoKSk7CisgICAgd2Via2l0X25ldHdvcmtfc2Vz
c2lvbl9zZXRfdGxzX2Vycm9yc19wb2xpY3kodGVzdC0+bV9uZXR3b3JrU2Vzc2lvbi5nZXQoKSwg
V0VCS0lUX1RMU19FUlJPUlNfUE9MSUNZX0ZBSUwpOworI2Vsc2UKICAgICBhdXRvKiB3ZWJzaXRl
RGF0YU1hbmFnZXIgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
KHRlc3QtPm1fd2ViQ29udGV4dC5nZXQoKSk7CiAgICAgV2ViS2l0VExTRXJyb3JzUG9saWN5IG9y
aWdpbmFsUG9saWN5ID0gd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF90bHNfZXJyb3Jz
X3BvbGljeSh3ZWJzaXRlRGF0YU1hbmFnZXIpOwogICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFu
YWdlcl9zZXRfdGxzX2Vycm9yc19wb2xpY3kod2Vic2l0ZURhdGFNYW5hZ2VyLCBXRUJLSVRfVExT
X0VSUk9SU19QT0xJQ1lfRkFJTCk7CisjZW5kaWYKIAogICAgIC8vIEZpcnN0LCBjaGVjayB0aGF0
IGluc2VjdXJlIHdzOi8vIHdlYiBzb2NrZXRzIHdvcmsgZmluZS4KICAgICB1bnNpZ25lZCBldmVu
dHMgPSB0ZXN0LT5jb25uZWN0VG9TZXJ2ZXJBbmRXYWl0Rm9yRXZlbnRzKGtIdHRwU2VydmVyKTsK
QEAgLTQ0MCwxMyArNTMzLDIxIEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJTb2NrZXRUTFNFcnJvcnMo
V2ViU29ja2V0VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICBnX2Fzc2VydF90cnVlKGV2
ZW50cyAmIFdlYlNvY2tldFRlc3Q6OkV2ZW50RmxhZ3M6OkRpZENsb3NlKTsKIAogICAgIC8vIE5v
dyB0cnkgd3NzOi8vIGFnYWluLCB0aGlzIHRpbWUgaWdub3JpbmcgVExTIGVycm9ycy4KKyNpZiBF
TkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICB3ZWJraXRfbmV0d29ya19zZXNzaW9uX3NldF90bHNf
ZXJyb3JzX3BvbGljeSh0ZXN0LT5tX25ldHdvcmtTZXNzaW9uLmdldCgpLCBXRUJLSVRfVExTX0VS
Uk9SU19QT0xJQ1lfSUdOT1JFKTsKKyNlbHNlCiAgICAgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5h
Z2VyX3NldF90bHNfZXJyb3JzX3BvbGljeSh3ZWJzaXRlRGF0YU1hbmFnZXIsIFdFQktJVF9UTFNf
RVJST1JTX1BPTElDWV9JR05PUkUpOworI2VuZGlmCiAgICAgZXZlbnRzID0gdGVzdC0+Y29ubmVj
dFRvU2VydmVyQW5kV2FpdEZvckV2ZW50cyhrSHR0cHNTZXJ2ZXIpOwogICAgIGdfYXNzZXJ0X3Ry
dWUoZXZlbnRzICYgV2ViU29ja2V0VGVzdDo6RXZlbnRGbGFnczo6RGlkU2VydmVyQ29tcGxldGVI
YW5kc2hha2UpOwogICAgIGdfYXNzZXJ0X3RydWUoZXZlbnRzICYgV2ViU29ja2V0VGVzdDo6RXZl
bnRGbGFnczo6RGlkT3Blbik7CiAgICAgZ19hc3NlcnRfZmFsc2UoZXZlbnRzICYgV2ViU29ja2V0
VGVzdDo6RXZlbnRGbGFnczo6RGlkQ2xvc2UpOwogCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkp
CisgICAgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfdGxzX2Vycm9yc19wb2xpY3kodGVzdC0+
bV9uZXR3b3JrU2Vzc2lvbi5nZXQoKSwgb3JpZ2luYWxQb2xpY3kpOworI2Vsc2UKICAgICB3ZWJr
aXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X3Rsc19lcnJvcnNfcG9saWN5KHdlYnNpdGVEYXRh
TWFuYWdlciwgb3JpZ2luYWxQb2xpY3kpOworI2VuZGlmCiB9CiAKIGNsYXNzIEVwaGVtZXJhbFNT
TFRlc3QgOiBwdWJsaWMgU1NMVGVzdCB7CkBAIC00NjYsOSArNTY3LDE1IEBAIHB1YmxpYzoKIAog
c3RhdGljIHZvaWQgdGVzdFRMU0Vycm9yc0VwaGVtZXJhbChFcGhlbWVyYWxTU0xUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQogeworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIGF1dG8q
IG5ldHdvcmtTZXNzaW9uID0gd2Via2l0X3dlYl92aWV3X2dldF9uZXR3b3JrX3Nlc3Npb24odGVz
dC0+bV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25f
aXNfZXBoZW1lcmFsKG5ldHdvcmtTZXNzaW9uKSk7CisgICAgZ19hc3NlcnRfY21waW50KHdlYmtp
dF9uZXR3b3JrX3Nlc3Npb25fZ2V0X3Rsc19lcnJvcnNfcG9saWN5KG5ldHdvcmtTZXNzaW9uKSwg
PT0sIFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9GQUlMKTsKKyNlbHNlCiAgICAgYXV0byogd2Vi
c2l0ZURhdGFNYW5hZ2VyID0gd2Via2l0X3dlYl92aWV3X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdl
cih0ZXN0LT5tX3dlYlZpZXcpOwogICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X3dlYnNpdGVfZGF0
YV9tYW5hZ2VyX2lzX2VwaGVtZXJhbCh3ZWJzaXRlRGF0YU1hbmFnZXIpKTsKICAgICBnX2Fzc2Vy
dF9jbXBpbnQod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF90bHNfZXJyb3JzX3BvbGlj
eSh3ZWJzaXRlRGF0YU1hbmFnZXIpLCA9PSwgV0VCS0lUX1RMU19FUlJPUlNfUE9MSUNZX0ZBSUwp
OworI2VuZGlmCiAKICAgICB0ZXN0LT5sb2FkVVJJKGtIdHRwc1NlcnZlci0+Z2V0VVJJRm9yUGF0
aCgiLyIpLmRhdGEoKSk7CiAgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CkBAIC01
NjQsOSArNjcxLDE0IEBAIHB1YmxpYzoKIHN0YXRpYyB2b2lkIHRlc3RDbGllbnRTaWRlQ2VydGlm
aWNhdGUoQ2xpZW50U2lkZUNlcnRpZmljYXRlVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKIHsK
ICAgICAvLyBJZ25vcmUgc2VydmVyIGNlcnRpZmljYXRlIGVycm9ycy4KKyNpZiBFTkFCTEUoMjAy
Ml9HTElCX0FQSSkKKyAgICBXZWJLaXRUTFNFcnJvcnNQb2xpY3kgb3JpZ2luYWxQb2xpY3kgPSB3
ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF90bHNfZXJyb3JzX3BvbGljeSh0ZXN0LT5tX25ldHdv
cmtTZXNzaW9uLmdldCgpKTsKKyAgICB3ZWJraXRfbmV0d29ya19zZXNzaW9uX3NldF90bHNfZXJy
b3JzX3BvbGljeSh0ZXN0LT5tX25ldHdvcmtTZXNzaW9uLmdldCgpLCBXRUJLSVRfVExTX0VSUk9S
U19QT0xJQ1lfSUdOT1JFKTsKKyNlbHNlCiAgICAgYXV0byogd2Vic2l0ZURhdGFNYW5hZ2VyID0g
d2Via2l0X3dlYl9jb250ZXh0X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcih0ZXN0LT5tX3dlYkNv
bnRleHQuZ2V0KCkpOwogICAgIFdlYktpdFRMU0Vycm9yc1BvbGljeSBvcmlnaW5hbFBvbGljeSA9
IHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfdGxzX2Vycm9yc19wb2xpY3kod2Vic2l0
ZURhdGFNYW5hZ2VyKTsKICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X3Rsc19l
cnJvcnNfcG9saWN5KHdlYnNpdGVEYXRhTWFuYWdlciwgV0VCS0lUX1RMU19FUlJPUlNfUE9MSUNZ
X0lHTk9SRSk7CisjZW5kaWYKIAogICAgIC8vIENhbmNlbCB0aGUgYXV0aGVudGlhdGlvbiByZXF1
ZXN0LgogICAgIHRlc3QtPmxvYWRVUkkoa0h0dHBzU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvIiku
ZGF0YSgpKTsKQEAgLTY1MCw3ICs3NjIsMTEgQEAgc3RhdGljIHZvaWQgdGVzdENsaWVudFNpZGVD
ZXJ0aWZpY2F0ZShDbGllbnRTaWRlQ2VydGlmaWNhdGVUZXN0KiB0ZXN0LCBnY29uc3Rwb2kKICAg
ICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5n
VGVzdDo6TG9hZEZpbmlzaGVkKTsKICAgICB0ZXN0LT5tX2xvYWRFdmVudHMuY2xlYXIoKTsKIAor
I2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fc2V0
X3Rsc19lcnJvcnNfcG9saWN5KHRlc3QtPm1fbmV0d29ya1Nlc3Npb24uZ2V0KCksIG9yaWdpbmFs
UG9saWN5KTsKKyNlbHNlCiAgICAgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX3NldF90bHNf
ZXJyb3JzX3BvbGljeSh3ZWJzaXRlRGF0YU1hbmFnZXIsIG9yaWdpbmFsUG9saWN5KTsKKyNlbmRp
ZgogfQogCiBjbGFzcyBXZWJTb2NrZXRDbGllbnRTaWRlQ2VydGlmaWNhdGVUZXN0IGZpbmFsIDog
cHVibGljIFdlYlNvY2tldFRlc3QsIHB1YmxpYyBDbGllbnRTaWRlQ2VydGlmaWNhdGVUZXN0QmFz
ZSB7CkBAIC02NzYsOSArNzkyLDE0IEBAIHB1YmxpYzoKIHN0YXRpYyB2b2lkIHRlc3RXZWJTb2Nr
ZXRDbGllbnRTaWRlQ2VydGlmaWNhdGUoV2ViU29ja2V0Q2xpZW50U2lkZUNlcnRpZmljYXRlVGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKIHsKICAgICAvLyBJZ25vcmUgc2VydmVyIGNlcnRpZmlj
YXRlIGVycm9ycy4KKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICBXZWJLaXRUTFNFcnJv
cnNQb2xpY3kgb3JpZ2luYWxQb2xpY3kgPSB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF90bHNf
ZXJyb3JzX3BvbGljeSh0ZXN0LT5tX25ldHdvcmtTZXNzaW9uLmdldCgpKTsKKyAgICB3ZWJraXRf
bmV0d29ya19zZXNzaW9uX3NldF90bHNfZXJyb3JzX3BvbGljeSh0ZXN0LT5tX25ldHdvcmtTZXNz
aW9uLmdldCgpLCBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfSUdOT1JFKTsKKyNlbHNlCiAgICAg
YXV0byogd2Vic2l0ZURhdGFNYW5hZ2VyID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF93ZWJzaXRl
X2RhdGFfbWFuYWdlcih0ZXN0LT5tX3dlYkNvbnRleHQuZ2V0KCkpOwogICAgIFdlYktpdFRMU0Vy
cm9yc1BvbGljeSBvcmlnaW5hbFBvbGljeSA9IHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9n
ZXRfdGxzX2Vycm9yc19wb2xpY3kod2Vic2l0ZURhdGFNYW5hZ2VyKTsKICAgICB3ZWJraXRfd2Vi
c2l0ZV9kYXRhX21hbmFnZXJfc2V0X3Rsc19lcnJvcnNfcG9saWN5KHdlYnNpdGVEYXRhTWFuYWdl
ciwgV0VCS0lUX1RMU19FUlJPUlNfUE9MSUNZX0lHTk9SRSk7CisjZW5kaWYKIAogICAgIC8vIFRy
eSBmaXJzdCB3aXRob3V0IGhhdmluZyB0aGUgY2VydGlmaWNhdGUgaW4gY3JlZGVudGlhbCBzdG9y
YWdlLgogICAgIGF1dG8gZXZlbnRzID0gdGVzdC0+Y29ubmVjdFRvU2VydmVyQW5kV2FpdEZvckV2
ZW50cyhrSHR0cHNTZXJ2ZXIpOwpAQCAtNjk4LDcgKzgxOSwxMSBAQCBzdGF0aWMgdm9pZCB0ZXN0
V2ViU29ja2V0Q2xpZW50U2lkZUNlcnRpZmljYXRlKFdlYlNvY2tldENsaWVudFNpZGVDZXJ0aWZp
Y2F0ZVRlcwogICAgIGdfYXNzZXJ0X3RydWUoZXZlbnRzICYgV2ViU29ja2V0VGVzdDo6RXZlbnRG
bGFnczo6RGlkT3Blbik7CiAgICAgZ19hc3NlcnRfZmFsc2UoZXZlbnRzICYgV2ViU29ja2V0VGVz
dDo6RXZlbnRGbGFnczo6RGlkQ2xvc2UpOwogCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisg
ICAgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfdGxzX2Vycm9yc19wb2xpY3kodGVzdC0+bV9u
ZXR3b3JrU2Vzc2lvbi5nZXQoKSwgb3JpZ2luYWxQb2xpY3kpOworI2Vsc2UKICAgICB3ZWJraXRf
d2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X3Rsc19lcnJvcnNfcG9saWN5KHdlYnNpdGVEYXRhTWFu
YWdlciwgb3JpZ2luYWxQb2xpY3kpOworI2VuZGlmCiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RXZWJLaXRGYXZpY29uRGF0
YWJhc2UuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RXZWJL
aXRGYXZpY29uRGF0YWJhc2UuY3BwCmluZGV4IDdiYmI0ZTBjY2IwYi4uOWYwODg1NmYzYjBhIDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFdlYktp
dEZhdmljb25EYXRhYmFzZS5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRHTGliL1Rlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2UuY3BwCkBAIC0xLDMgKzEsNCBAQAorCiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE3IElnYWxpYSBTLkwuCiAgKgpAQCAtMzUsMTEg
KzM2LDE1IEBAIHB1YmxpYzoKICAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKEZhdmljb25EYXRh
YmFzZVRlc3QpOwogCiAgICAgRmF2aWNvbkRhdGFiYXNlVGVzdCgpCisjaWYgRU5BQkxFKDIwMjJf
R0xJQl9BUEkpCisgICAgICAgIDogbV9kYXRhYmFzZSh3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFn
ZXJfZ2V0X2Zhdmljb25fZGF0YWJhc2Uod2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfd2Vic2l0
ZV9kYXRhX21hbmFnZXIobV9uZXR3b3JrU2Vzc2lvbi5nZXQoKSkpKQorI2Vsc2UKICAgICAgICAg
OiBtX2RhdGFiYXNlKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFzZShtX3dl
YkNvbnRleHQuZ2V0KCkpKQorI2VuZGlmCiAgICAgewotICAgICAgICBnX2Fzc2VydF90cnVlKFdF
QktJVF9JU19GQVZJQ09OX0RBVEFCQVNFKG1fZGF0YWJhc2UpKTsKLSAgICAgICAgYXNzZXJ0T2Jq
ZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChtX2RhdGFiYXNlKSk7Ci0gICAg
ICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9kYXRhYmFzZSwgImZhdmljb24tY2hhbmdlZCIsIEdfQ0FM
TEJBQ0soZmF2aWNvbkNoYW5nZWRDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX2Fzc2VydF90
cnVlKFdFQktJVF9JU19GQVZJQ09OX0RBVEFCQVNFKG1fZGF0YWJhc2UuZ2V0KCkpKTsKKyAgICAg
ICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChtX2RhdGFi
YXNlLmdldCgpKSk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9kYXRhYmFzZS5nZXQoKSwg
ImZhdmljb24tY2hhbmdlZCIsIEdfQ0FMTEJBQ0soZmF2aWNvbkNoYW5nZWRDYWxsYmFjayksIHRo
aXMpOwogICAgIH0KIAogICAgIH5GYXZpY29uRGF0YWJhc2VUZXN0KCkKQEAgLTQ3LDE1ICs1Miwz
NiBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChtX2Zhdmljb24pCiAgICAgICAgICAgICBjYWlyb19z
dXJmYWNlX2Rlc3Ryb3kobV9mYXZpY29uKTsKIAotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19k
aXNjb25uZWN0X21hdGNoZWQobV9kYXRhYmFzZSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwg
MCwgMCwgdGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hl
ZChtX2RhdGFiYXNlLmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlz
KTsKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICAgICAgR1VuaXF1ZVB0cjxjaGFyPiBk
YXRhYmFzZURpcmVjdG9yeShnX2J1aWxkX2ZpbGVuYW1lKFRlc3Q6OmRhdGFEaXJlY3RvcnkoKSwg
Imljb25kYXRhYmFzZSIsIG51bGxwdHIpKTsKKyAgICAgICAgaWYgKEdEaXIqIGRpcmVjdG9yeSA9
IGdfZGlyX29wZW4oZGF0YWJhc2VEaXJlY3RvcnkuZ2V0KCksIDAsIG51bGxwdHIpKSB7CisgICAg
ICAgICAgICBjb25zdCBjaGFyKiBmaWxlTmFtZTsKKyAgICAgICAgICAgIHdoaWxlICgoZmlsZU5h
bWUgPSBnX2Rpcl9yZWFkX25hbWUoZGlyZWN0b3J5KSkpIHsKKyAgICAgICAgICAgICAgICBHVW5p
cXVlUHRyPGNoYXI+IGZpbGVQYXRoKGdfYnVpbGRfZmlsZW5hbWUoZGF0YWJhc2VEaXJlY3Rvcnku
Z2V0KCksIGZpbGVOYW1lLCBudWxscHRyKSk7CisgICAgICAgICAgICAgICAgZ191bmxpbmsoZmls
ZVBhdGguZ2V0KCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZ19kaXJfY2xvc2UoZGly
ZWN0b3J5KTsKKyAgICAgICAgfQorICAgICAgICBnX3JtZGlyKGRhdGFiYXNlRGlyZWN0b3J5Lmdl
dCgpKTsKKyNlbmRpZgogICAgIH0KIAorI2lmICFFTkFCTEUoMjAyMl9HTElCX0FQSSkKICAgICB2
b2lkIG9wZW4oY29uc3QgY2hhciogZGlyZWN0b3J5KQogICAgIHsKICAgICAgICAgR1VuaXF1ZVB0
cjxjaGFyPiBkYXRhYmFzZURpcmVjdG9yeShnX2J1aWxkX2ZpbGVuYW1lKGRhdGFEaXJlY3Rvcnko
KSwgZGlyZWN0b3J5LCBudWxscHRyKSk7CiAgICAgICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRf
ZmF2aWNvbl9kYXRhYmFzZV9kaXJlY3RvcnkobV93ZWJDb250ZXh0LmdldCgpLCBkYXRhYmFzZURp
cmVjdG9yeS5nZXQoKSk7CiAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cihkYXRhYmFzZURpcmVjdG9y
eS5nZXQoKSwgPT0sIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFzZV9kaXJl
Y3RvcnkobV93ZWJDb250ZXh0LmdldCgpKSk7CiAgICAgfQorI2Vsc2UKKyAgICB2b2lkIGNsb3Nl
KCkKKyAgICB7CisgICAgICAgIGF1dG8qIG1hbmFnZXIgPSB3ZWJraXRfbmV0d29ya19zZXNzaW9u
X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcihtX25ldHdvcmtTZXNzaW9uLmdldCgpKTsKKyAgICAg
ICAgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX3NldF9mYXZpY29uc19lbmFibGVkKG1hbmFn
ZXIsIEZBTFNFKTsKKyAgICAgICAgZ19hc3NlcnRfbnVsbCh3ZWJraXRfd2Vic2l0ZV9kYXRhX21h
bmFnZXJfZ2V0X2Zhdmljb25fZGF0YWJhc2UobWFuYWdlcikpOworICAgIH0KKyNlbmRpZgogCiAg
ICAgc3RhdGljIHZvaWQgZmF2aWNvbkNoYW5nZWRDYWxsYmFjayhXZWJLaXRGYXZpY29uRGF0YWJh
c2UqIGRhdGFiYXNlLCBjb25zdCBjaGFyKiBwYWdlVVJJLCBjb25zdCBjaGFyKiBmYXZpY29uVVJJ
LCBGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0KQogICAgIHsKQEAgLTg5LDcgKzExNSw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgdm9pZCBnZXRGYXZpY29uQ2FsbGJhY2soR09iamVjdCogc291cmNl
T2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgdm9pZCogZGF0YSkKICAgICB7CiAgICAgICAg
IEZhdmljb25EYXRhYmFzZVRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxGYXZpY29uRGF0YWJhc2VU
ZXN0Kj4oZGF0YSk7Ci0gICAgICAgIHRlc3QtPm1fZmF2aWNvbiA9IHdlYmtpdF9mYXZpY29uX2Rh
dGFiYXNlX2dldF9mYXZpY29uX2ZpbmlzaCh0ZXN0LT5tX2RhdGFiYXNlLCByZXN1bHQsICZ0ZXN0
LT5tX2Vycm9yLm91dFB0cigpKTsKKyAgICAgICAgdGVzdC0+bV9mYXZpY29uID0gd2Via2l0X2Zh
dmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fZmluaXNoKHRlc3QtPm1fZGF0YWJhc2UuZ2V0KCks
IHJlc3VsdCwgJnRlc3QtPm1fZXJyb3Iub3V0UHRyKCkpOwogICAgICAgICB0ZXN0LT5xdWl0TWFp
bkxvb3AoKTsKICAgICB9CiAKQEAgLTEyMyw3ICsxNDksNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBtX2Zhdmljb24gPSBudWxscHRyOwogICAgICAgICB9CiAKLSAgICAgICAgd2Via2l0X2Zhdmlj
b25fZGF0YWJhc2VfZ2V0X2Zhdmljb24obV9kYXRhYmFzZSwgcGFnZVVSSSwgMCwgZ2V0RmF2aWNv
bkNhbGxiYWNrLCB0aGlzKTsKKyAgICAgICAgd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zh
dmljb24obV9kYXRhYmFzZS5nZXQoKSwgcGFnZVVSSSwgMCwgZ2V0RmF2aWNvbkNhbGxiYWNrLCB0
aGlzKTsKICAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwogICAgIH0KIApAQCAt
MTM2LDcgKzE2Miw3IEBAIHB1YmxpYzoKICAgICAgICAgbV93YWl0aW5nRm9yRmF2aWNvblVSSSA9
IGZhbHNlOwogICAgIH0KIAotICAgIFdlYktpdEZhdmljb25EYXRhYmFzZSogbV9kYXRhYmFzZSB7
IG51bGxwdHIgfTsKKyAgICBHUmVmUHRyPFdlYktpdEZhdmljb25EYXRhYmFzZT4gbV9kYXRhYmFz
ZTsKICAgICBjYWlyb19zdXJmYWNlX3QqIG1fZmF2aWNvbiB7IG51bGxwdHIgfTsKICAgICBDU3Ry
aW5nIG1fZmF2aWNvblVSSTsKICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gbV9lcnJvcjsKQEAg
LTE4NCwxOCArMjEwLDM1IEBAIHN0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIq
LCBTb3VwU2VydmVyTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhcioKIAogc3RhdGljIHZvaWQg
dGVzdEZhdmljb25EYXRhYmFzZUluaXRpYWxpemF0aW9uKEZhdmljb25EYXRhYmFzZVRlc3QqIHRl
c3QsIGdjb25zdHBvaW50ZXIpCiB7CisgICAgLy8gSW4gMjAyMiBBUEkgZmF2aWNvbnMgYXJlIGVu
YWJsZWQgYnkgZGVmYXVsdC4KKyNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAgICAgdGVzdC0+
Z2V0RmF2aWNvbkZvclBhZ2VVUklBbmRXYWl0VW50aWxSZWFkeShrU2VydmVyLT5nZXRVUklGb3JQ
YXRoKCIvZm9vIikuZGF0YSgpKTsKICAgICBnX2Fzc2VydF9udWxsKHRlc3QtPm1fZmF2aWNvbik7
CiAgICAgZ19hc3NlcnRfZXJyb3IodGVzdC0+bV9lcnJvci5nZXQoKSwgV0VCS0lUX0ZBVklDT05f
REFUQUJBU0VfRVJST1IsIFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFX0VSUk9SX05PVF9JTklUSUFM
SVpFRCk7CiAKICAgICB0ZXN0LT5vcGVuKCJ0ZXN0RmF2aWNvbkRhdGFiYXNlSW5pdGlhbGl6YXRp
b24iKTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgR1VuaXF1ZVB0
cjxjaGFyPiBkYXRhYmFzZUZpbGUoZ19idWlsZF9maWxlbmFtZShUZXN0OjpkYXRhRGlyZWN0b3J5
KCksICJpY29uZGF0YWJhc2UiLCAiV2VicGFnZUljb25zLmRiIiwgbnVsbHB0cikpOworI2Vsc2UK
ICAgICBHVW5pcXVlUHRyPGNoYXI+IGRhdGFiYXNlRmlsZShnX2J1aWxkX2ZpbGVuYW1lKHdlYmtp
dF93ZWJfY29udGV4dF9nZXRfZmF2aWNvbl9kYXRhYmFzZV9kaXJlY3RvcnkodGVzdC0+bV93ZWJD
b250ZXh0LmdldCgpKSwgIldlYnBhZ2VJY29ucy5kYiIsIG51bGxwdHIpKTsKKyNlbmRpZgogICAg
IGdfYXNzZXJ0X3RydWUoZ19maWxlX3Rlc3QoZGF0YWJhc2VGaWxlLmdldCgpLCBHX0ZJTEVfVEVT
VF9JU19SRUdVTEFSKSk7CisKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICB0ZXN0LT5j
bG9zZSgpOworICAgIHRlc3QtPmdldEZhdmljb25Gb3JQYWdlVVJJQW5kV2FpdFVudGlsUmVhZHko
a1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ZvbyIpLmRhdGEoKSk7CisgICAgZ19hc3NlcnRfbnVs
bCh0ZXN0LT5tX2Zhdmljb24pOworICAgIGdfYXNzZXJ0X2Vycm9yKHRlc3QtPm1fZXJyb3IuZ2V0
KCksIFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFX0VSUk9SLCBXRUJLSVRfRkFWSUNPTl9EQVRBQkFT
RV9FUlJPUl9OT1RfSU5JVElBTElaRUQpOworI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIHRlc3RG
YXZpY29uRGF0YWJhc2VHZXRGYXZpY29uKEZhdmljb25EYXRhYmFzZVRlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCiB7CisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogICAgIHRlc3QtPm9wZW4o
InRlc3RGYXZpY29uRGF0YWJhc2VHZXRGYXZpY29uIik7CisjZW5kaWYKIAogICAgIHRlc3QtPmxv
YWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ZvbyIpLmRhdGEoKSk7CiAgICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZpbmlzaGVkQW5kRmF2aWNvbkNoYW5nZWQoKTsKQEAgLTI0OSw3ICsyOTIs
OCBAQCBzdGF0aWMgdm9pZCBlcGhlbWVyYWxWaWV3RmF2aWNvbkNoYW5nZWQoV2ViS2l0V2ViVmll
dyogd2ViVmlldywgR1BhcmFtU3BlYyosIFdlYgogCiBzdGF0aWMgdm9pZCB0ZXN0RmF2aWNvbkRh
dGFiYXNlRXBoZW1lcmFsKEZhdmljb25EYXRhYmFzZVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
CiB7Ci0gICAgLy8gSWYgdGhlIGNvbnRleHQgaXMgZXBoZW1lcmFsLCB0aGUgZGF0YWJhc2UgaXMg
bm90IGNyZWF0ZWQgaWYgaXQgZG9lc24ndCBleGlzdC4KKyNpZiAhRU5BQkxFKDIwMjJfR0xJQl9B
UEkpCisgICAgLy8gSWYgdGhlIGNvbnRleHQgaXMgZXBoZW1lcmFsLCB0aGUgZGF0YWJhc2UgaXMg
bm90IGNyZWF0ZWQuCiAgICAgR1JlZlB0cjxXZWJLaXRXZWJDb250ZXh0PiBlcGhlbWVyYWxDb250
ZXh0ID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJfY29udGV4dF9uZXdfZXBoZW1lcmFsKCkpOwogICAg
IEdVbmlxdWVQdHI8Y2hhcj4gZGF0YWJhc2VEaXJlY3RvcnkoZ19idWlsZF9maWxlbmFtZShUZXN0
OjpkYXRhRGlyZWN0b3J5KCksICJ0ZXN0RmF2aWNvbkRhdGFiYXNlRXBoZW1lcmFsIiwgbnVsbHB0
cikpOwogICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfZmF2aWNvbl9kYXRhYmFzZV9kaXJlY3Rv
cnkoZXBoZW1lcmFsQ29udGV4dC5nZXQoKSwgZGF0YWJhc2VEaXJlY3RvcnkuZ2V0KCkpOwpAQCAt
MjYwLDIwICszMDQsMzggQEAgc3RhdGljIHZvaWQgdGVzdEZhdmljb25EYXRhYmFzZUVwaGVtZXJh
bChGYXZpY29uRGF0YWJhc2VUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGUKIAogICAgIHRlc3QtPm9w
ZW4oInRlc3RGYXZpY29uRGF0YWJhc2VFcGhlbWVyYWwiKTsKICAgICBnX2Fzc2VydF90cnVlKGdf
ZmlsZV90ZXN0KGRhdGFiYXNlRmlsZS5nZXQoKSwgR19GSUxFX1RFU1RfRVhJU1RTKSk7CisjZW5k
aWYKIAogICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ZvbyIpLmRh
dGEoKSk7CiAgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkQW5kRmF2aWNvbkNoYW5nZWQo
KTsKIAogICAgIC8vIEFuIGVwaGVtZXJhbCB3ZWIgdmlldyBkb2Vzbid0IHdyaXRlIHRvIHRoZSBk
YXRhYmFzZS4KKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICBHUmVmUHRyPFdlYktpdE5l
dHdvcmtTZXNzaW9uPiBlcGhlbWVyYWxTZXNzaW9uID0gYWRvcHRHUmVmKHdlYmtpdF9uZXR3b3Jr
X3Nlc3Npb25fbmV3X2VwaGVtZXJhbCgpKTsKKyNlbmRpZgogICAgIGF1dG8gd2ViVmlldyA9IFRl
c3Q6OmFkb3B0VmlldyhnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX1ZJRVcsCi0gICAgICAg
ICJ3ZWItY29udGV4dCIsIHRlc3QtPm1fd2ViQ29udGV4dC5nZXQoKSwgImlzLWVwaGVtZXJhbCIs
IFRSVUUsIG51bGxwdHIpKTsKKyAgICAgICAgIndlYi1jb250ZXh0IiwgdGVzdC0+bV93ZWJDb250
ZXh0LmdldCgpLAorI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgICAgICAibmV0d29yay1z
ZXNzaW9uIiwgZXBoZW1lcmFsU2Vzc2lvbi5nZXQoKSwKKyNlbHNlCisgICAgICAgICJpcy1lcGhl
bWVyYWwiLCBUUlVFLAorI2VuZGlmCisgICAgICAgbnVsbHB0cikpOwogICAgIGdfc2lnbmFsX2Nv
bm5lY3Qod2ViVmlldy5nZXQoKSwgIm5vdGlmeTo6ZmF2aWNvbiIsIEdfQ0FMTEJBQ0soZXBoZW1l
cmFsVmlld0Zhdmljb25DaGFuZ2VkKSwgdGVzdCk7CiAgICAgd2Via2l0X3dlYl92aWV3X2xvYWRf
dXJpKHdlYlZpZXcuZ2V0KCksIGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9iYXIiKS5kYXRhKCkp
OwogICAgIGdfbWFpbl9sb29wX3J1bih0ZXN0LT5tX21haW5Mb29wKTsKIAorI2lmIEVOQUJMRSgy
MDIyX0dMSUJfQVBJKQorICAgIGF1dG8qIGRhdGFiYXNlID0gd2Via2l0X3dlYnNpdGVfZGF0YV9t
YW5hZ2VyX2dldF9mYXZpY29uX2RhdGFiYXNlKHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyKGVwaGVtZXJhbFNlc3Npb24uZ2V0KCkpKTsKKyAgICAvLyBQZXJz
aXN0ZW50IHNlc3Npb24gZGF0YWJhc2UgaXMgbm90IG1vZGlmaWVkIGJ5IGVwaGVtZXJhbCB3ZWIg
dmlld3MuCisgICAgZ19hc3NlcnRfbnVsbCh3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2
aWNvbl91cmkodGVzdC0+bV9kYXRhYmFzZS5nZXQoKSwga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgi
L2JhciIpLmRhdGEoKSkpOworI2Vsc2UKKyAgICBhdXRvKiBkYXRhYmFzZSA9IHRlc3QtPm1fZGF0
YWJhc2UuZ2V0KCk7CisjZW5kaWYKICAgICAvLyBXZSBnZXQgYSBmYXZpY29uLCBidXQgaXQncyBv
bmx5IGluIGRhdGFiYXNlIG1lbW9yeSBjYWNoZS4KLSAgICBnX2Fzc2VydF9ub25udWxsKHdlYmtp
dF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3VyaSh0ZXN0LT5tX2RhdGFiYXNlLCBrU2Vy
dmVyLT5nZXRVUklGb3JQYXRoKCIvYmFyIikuZGF0YSgpKSk7CisgICAgZ19hc3NlcnRfbm9ubnVs
bCh3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbl91cmkoZGF0YWJhc2UsIGtTZXJ2
ZXItPmdldFVSSUZvclBhdGgoIi9iYXIiKS5kYXRhKCkpKTsKIAorI2lmICFFTkFCTEUoMjAyMl9H
TElCX0FQSSkKICAgICAvLyBJZiB0aGUgZGF0YWJhc2UgZXhpc3RzLCBpdCdzIHVzZWQgaW4gcmVh
ZCBvbmx5IG1vZGUgZm9yIGVwZWhlcmFsIGNvbnRleHRzLgogICAgIGVwaGVtZXJhbENvbnRleHQg
PSBhZG9wdEdSZWYod2Via2l0X3dlYl9jb250ZXh0X25ld19lcGhlbWVyYWwoKSk7CiAgICAgd2Vi
a2l0X3dlYl9jb250ZXh0X3NldF9mYXZpY29uX2RhdGFiYXNlX2RpcmVjdG9yeShlcGhlbWVyYWxD
b250ZXh0LmdldCgpLCBkYXRhYmFzZURpcmVjdG9yeS5nZXQoKSk7CkBAIC0yODMsMjIgKzM0NSwy
NSBAQCBzdGF0aWMgdm9pZCB0ZXN0RmF2aWNvbkRhdGFiYXNlRXBoZW1lcmFsKEZhdmljb25EYXRh
YmFzZVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZQogICAgIC8vIFBhZ2UgVVJMIGxvYWRlZCBpbiBl
cGhlbWVyYWwgd2ViIHZpZXcgaXMgbm90IGluIHRoZSBkYXRhYmFzZS4KICAgICBnX2Fzc2VydF9u
dWxsKHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3VyaShlcGhlbWVyYWxEYXRh
YmFzZSwga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2JhciIpLmRhdGEoKSkpOwogICAgIGVwaGVt
ZXJhbENvbnRleHQgPSBudWxscHRyOworI2VuZGlmCiB9CiAKIHZvaWQgdGVzdEZhdmljb25EYXRh
YmFzZUNsZWFyKEZhdmljb25EYXRhYmFzZVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiB7Cisj
aWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogICAgIHRlc3QtPm9wZW4oInRlc3RGYXZpY29uRGF0
YWJhc2VDbGVhciIpOworI2VuZGlmCiAgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklG
b3JQYXRoKCIvZm9vIikuZGF0YSgpKTsKICAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWRB
bmRGYXZpY29uQ2hhbmdlZCgpOwogICAgIHRlc3QtPmdldEZhdmljb25Gb3JQYWdlVVJJQW5kV2Fp
dFVudGlsUmVhZHkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ZvbyIpLmRhdGEoKSk7CiAgICAg
Z19hc3NlcnRfbm9ubnVsbCh0ZXN0LT5tX2Zhdmljb24pOwotICAgIGdfYXNzZXJ0X25vbm51bGwo
d2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fdXJpKHRlc3QtPm1fZGF0YWJhc2Us
IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9mb28iKS5kYXRhKCkpKTsKKyAgICBnX2Fzc2VydF9u
b25udWxsKHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX3VyaSh0ZXN0LT5tX2Rh
dGFiYXNlLmdldCgpLCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZm9vIikuZGF0YSgpKSk7CiAK
LSAgICB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9jbGVhcih0ZXN0LT5tX2RhdGFiYXNlKTsKKyAg
ICB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9jbGVhcih0ZXN0LT5tX2RhdGFiYXNlLmdldCgpKTsK
IAogICAgIHRlc3QtPmdldEZhdmljb25Gb3JQYWdlVVJJQW5kV2FpdFVudGlsUmVhZHkoa1NlcnZl
ci0+Z2V0VVJJRm9yUGF0aCgiL2ZvbyIpLmRhdGEoKSk7CiAgICAgZ19hc3NlcnRfbnVsbCh0ZXN0
LT5tX2Zhdmljb24pOwotICAgIGdfYXNzZXJ0X251bGwod2Via2l0X2Zhdmljb25fZGF0YWJhc2Vf
Z2V0X2Zhdmljb25fdXJpKHRlc3QtPm1fZGF0YWJhc2UsIGtTZXJ2ZXItPmdldFVSSUZvclBhdGgo
Ii9mb28iKS5kYXRhKCkpKTsKKyAgICBnX2Fzc2VydF9udWxsKHdlYmtpdF9mYXZpY29uX2RhdGFi
YXNlX2dldF9mYXZpY29uX3VyaSh0ZXN0LT5tX2RhdGFiYXNlLmdldCgpLCBrU2VydmVyLT5nZXRV
UklGb3JQYXRoKCIvZm9vIikuZGF0YSgpKSk7CiB9CiAKIHZvaWQgYmVmb3JlQWxsKCkKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0V2ViS2l0TmV0
d29ya1Nlc3Npb24uY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rl
c3RXZWJLaXROZXR3b3JrU2Vzc2lvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwLi5kZmY2NzJhZTMzZTEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFdlYktpdE5ldHdvcmtTZXNzaW9uLmNwcApAQCAt
MCwwICsxLDI3OCBAQAorCisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjMgSWdhbGlhIFMuTC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIldlYktpdFRlc3RTZXJ2ZXIuaCIKKyNp
bmNsdWRlICJXZWJWaWV3VGVzdC5oIgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorI2luY2x1
ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+
CisKK3N0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBrU2VydmVyOworCitzdGF0aWMgdm9pZCB0ZXN0
TmV0d29ya1Nlc3Npb25EZWZhdWx0KFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAg
Ly8gQ2hlY2sgdGhlcmUncyBhIHNpbmdsZSBpbnN0YW5jZSBvZiB0aGUgZGVmYXVsdCBuZXR3b3Jr
IHNlc3Npb24uCisgICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF9k
ZWZhdWx0KCkgPT0gd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfZGVmYXVsdCgpKTsKKyAgICBn
X2Fzc2VydF90cnVlKHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X2RlZmF1bHQoKSAhPSB0ZXN0
LT5tX25ldHdvcmtTZXNzaW9uLmdldCgpKTsKK30KKworc3RhdGljIHZvaWQgdGVzdE5ldHdvcmtT
ZXNzaW9uRXBoZW1lcmFsKFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gQnkg
ZGVmYXVsdCBuZXR3b3JrIHNlc3Npb25zIGFyZSBub3QgZXBoZW1lcmFsLgorICAgIGdfYXNzZXJ0
X2ZhbHNlKHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25faXNfZXBoZW1lcmFsKHdlYmtpdF9uZXR3b3Jr
X3Nlc3Npb25fZ2V0X2RlZmF1bHQoKSkpOworICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9uZXR3
b3JrX3Nlc3Npb25faXNfZXBoZW1lcmFsKHRlc3QtPm1fbmV0d29ya1Nlc3Npb24uZ2V0KCkpKTsK
KworICAgIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogbWFuYWdlciA9IHdlYmtpdF9uZXR3b3Jr
X3Nlc3Npb25fZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25f
Z2V0X2RlZmF1bHQoKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShXRUJLSVRfSVNfV0VCU0lURV9EQVRB
X01BTkFHRVIobWFuYWdlcikpOworICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcl9pc19lcGhlbWVyYWwobWFuYWdlcikpOworICAgIG1hbmFnZXIgPSB3ZWJraXRf
bmV0d29ya19zZXNzaW9uX2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcih0ZXN0LT5tX25ldHdvcmtT
ZXNzaW9uLmdldCgpKTsKKyAgICBnX2Fzc2VydF90cnVlKFdFQktJVF9JU19XRUJTSVRFX0RBVEFf
TUFOQUdFUihtYW5hZ2VyKSk7CisgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X3dlYnNpdGVfZGF0
YV9tYW5hZ2VyX2lzX2VwaGVtZXJhbChtYW5hZ2VyKSk7CisKKyAgICBhdXRvIHdlYlZpZXcgPSBU
ZXN0OjphZG9wdFZpZXcoVGVzdDo6Y3JlYXRlV2ViVmlldygpKTsKKyAgICBnX2Fzc2VydF90cnVl
KHdlYmtpdF93ZWJfdmlld19nZXRfbmV0d29ya19zZXNzaW9uKHdlYlZpZXcuZ2V0KCkpID09IHdl
YmtpdF9uZXR3b3JrX3Nlc3Npb25fZ2V0X2RlZmF1bHQoKSk7CisKKyAgICB3ZWJWaWV3ID0gVGVz
dDo6YWRvcHRWaWV3KGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfVklFVywKKyNpZiBQTEFU
Rk9STShXUEUpCisgICAgICAgICJiYWNrZW5kIiwgVGVzdDo6Y3JlYXRlV2ViVmlld0JhY2tlbmQo
KSwKKyNlbmRpZgorICAgICAgICAid2ViLWNvbnRleHQiLCB0ZXN0LT5tX3dlYkNvbnRleHQuZ2V0
KCksCisgICAgICAgICJuZXR3b3JrLXNlc3Npb24iLCB0ZXN0LT5tX25ldHdvcmtTZXNzaW9uLmdl
dCgpLAorICAgICAgICBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X25ldHdvcmtfc2Vzc2lvbih3ZWJWaWV3LmdldCgpKSA9PSB0ZXN0LT5tX25ldHdvcmtT
ZXNzaW9uLmdldCgpKTsKKworICAgIEdSZWZQdHI8V2ViS2l0TmV0d29ya1Nlc3Npb24+IHNlc3Np
b24gPSBhZG9wdEdSZWYod2Via2l0X25ldHdvcmtfc2Vzc2lvbl9uZXdfZXBoZW1lcmFsKCkpOwor
ICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X25ldHdvcmtfc2Vzc2lvbl9pc19lcGhlbWVyYWwoc2Vz
c2lvbi5nZXQoKSkpOworICAgIG1hbmFnZXIgPSB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF93
ZWJzaXRlX2RhdGFfbWFuYWdlcihzZXNzaW9uLmdldCgpKTsKKyAgICBnX2Fzc2VydF90cnVlKFdF
QktJVF9JU19XRUJTSVRFX0RBVEFfTUFOQUdFUihtYW5hZ2VyKSk7CisgICAgZ19hc3NlcnRfdHJ1
ZSh3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfaXNfZXBoZW1lcmFsKG1hbmFnZXIpKTsKKyAg
ICBnX2Fzc2VydF90cnVlKHdlYmtpdF93ZWJfdmlld19nZXRfbmV0d29ya19zZXNzaW9uKHdlYlZp
ZXcuZ2V0KCkpICE9IHNlc3Npb24uZ2V0KCkpOworCisgICAgd2ViVmlldyA9IFRlc3Q6OmFkb3B0
VmlldyhnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX1ZJRVcsCisjaWYgUExBVEZPUk0oV1BF
KQorICAgICAgICAiYmFja2VuZCIsIFRlc3Q6OmNyZWF0ZVdlYlZpZXdCYWNrZW5kKCksCisjZW5k
aWYKKyAgICAgICAgIndlYi1jb250ZXh0IiwgdGVzdC0+bV93ZWJDb250ZXh0LmdldCgpLAorICAg
ICAgICAibmV0d29yay1zZXNzaW9uIiwgc2Vzc2lvbi5nZXQoKSwKKyAgICAgICAgbnVsbHB0cikp
OworICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X3dlYl92aWV3X2dldF9uZXR3b3JrX3Nlc3Npb24o
d2ViVmlldy5nZXQoKSkgPT0gc2Vzc2lvbi5nZXQoKSk7Cit9CisKK3N0YXRpYyB2b2lkIHNlcnZl
ckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cFNlcnZlck1lc3NhZ2UqIG1lc3NhZ2Us
IGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqLCBncG9pbnRlcikKK3sKKyAgICBpZiAoc291
cF9zZXJ2ZXJfbWVzc2FnZV9nZXRfbWV0aG9kKG1lc3NhZ2UpICE9IFNPVVBfTUVUSE9EX0dFVCkg
eworICAgICAgICBzb3VwX3NlcnZlcl9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9T
VEFUVVNfTk9UX0lNUExFTUVOVEVELCBudWxscHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGF1dG8qIHJlc3BvbnNlQm9keSA9IHNvdXBfc2VydmVyX21lc3NhZ2VfZ2V0X3Jlc3Bv
bnNlX2JvZHkobWVzc2FnZSk7CisKKyAgICBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9lY2hvUG9y
dCIpKSB7CisgICAgICAgIGNoYXIqIHBvcnQgPSBnX3N0cmR1cF9wcmludGYoIiV1IiwgZ19pbmV0
X3NvY2tldF9hZGRyZXNzX2dldF9wb3J0KEdfSU5FVF9TT0NLRVRfQUREUkVTUyhzb3VwX3NlcnZl
cl9tZXNzYWdlX2dldF9sb2NhbF9hZGRyZXNzKG1lc3NhZ2UpKSkpOworICAgICAgICBzb3VwX21l
c3NhZ2VfYm9keV9hcHBlbmQocmVzcG9uc2VCb2R5LCBTT1VQX01FTU9SWV9UQUtFLCBwb3J0LCBz
dHJsZW4ocG9ydCkpOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShyZXNwb25z
ZUJvZHkpOworICAgICAgICBzb3VwX3NlcnZlcl9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwg
U09VUF9TVEFUVVNfT0ssIG51bGxwdHIpOworICAgIH0gZWxzZQorICAgICAgICBzb3VwX3NlcnZl
cl9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5ELCBudWxs
cHRyKTsKK30KKworY2xhc3MgUHJveHlUZXN0IDogcHVibGljIFdlYlZpZXdUZXN0IHsKK3B1Ymxp
YzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFByb3h5VGVzdCk7CisKKyAgICBlbnVtIGNs
YXNzIFdlYlNvY2tldFNlcnZlclR5cGUgeworICAgICAgICBVbmtub3duLAorICAgICAgICBOb1By
b3h5LAorICAgICAgICBQcm94eQorICAgIH07CisKKyAgICBzdGF0aWMgdm9pZCB3ZWJTb2NrZXRQ
cm94eVNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqLCBTb3VwU2VydmVyTWVzc2FnZSosIGNvbnN0
IGNoYXIqIHBhdGgsIFNvdXBXZWJzb2NrZXRDb25uZWN0aW9uKiwgZ3BvaW50ZXIgdXNlckRhdGEp
CisgICAgeworICAgICAgICBzdGF0aWNfY2FzdDxQcm94eVRlc3QqPih1c2VyRGF0YSktPndlYlNv
Y2tldENvbm5lY3RlZChQcm94eVRlc3Q6OldlYlNvY2tldFNlcnZlclR5cGU6OlByb3h5KTsKKyAg
ICB9CisKKyAgICBQcm94eVRlc3QoKQorICAgIHsKKyAgICAgICAgLy8gVGhpcyAicHJveHkgc2Vy
dmVyIiBpcyBhY3R1YWxseSBqdXN0IGEgZGlmZmVyZW50IGluc3RhbmNlIG9mIHRoZSBtYWluCisg
ICAgICAgIC8vIHRlc3Qgc2VydmVyIChrU2VydmVyKSwgbGlzdGVuaW5nIG9uIGEgZGlmZmVyZW50
IHBvcnQuIFJlcXVlc3RzCisgICAgICAgIC8vIHdpbGwgbm90IGFjdHVhbGx5IGJlIHByb3hpZWQg
dG8ga1NlcnZlciBiZWNhdXNlIHByb3h5U2VydmVyIGlzIG5vdAorICAgICAgICAvLyBhY3R1YWxs
eSBhIHByb3h5IHNlcnZlci4gV2UncmUgdGVzdGluZyB3aGV0aGVyIHRoZSBwcm94eSBzZXR0aW5n
cworICAgICAgICAvLyB3b3JrLCBub3Qgd2hldGhlciB3ZSBjYW4gd3JpdGUgYSBzb3VwIHByb3h5
IHNlcnZlci4KKyAgICAgICAgbV9wcm94eVNlcnZlci5ydW4oc2VydmVyQ2FsbGJhY2spOworICAg
ICAgICBnX2Fzc2VydF9mYWxzZShtX3Byb3h5U2VydmVyLmJhc2VVUkwoKS5pc051bGwoKSk7CisK
KyAgICAgICAgbV9wcm94eVNlcnZlci5hZGRXZWJTb2NrZXRIYW5kbGVyKHdlYlNvY2tldFByb3h5
U2VydmVyQ2FsbGJhY2ssIHRoaXMpOworICAgICAgICBnX2Fzc2VydF9mYWxzZShtX3Byb3h5U2Vy
dmVyLmJhc2VXZWJTb2NrZXRVUkwoKS5pc051bGwoKSk7CisgICAgfQorCisgICAgQ1N0cmluZyBs
b2FkVVJJQW5kR2V0TWFpblJlc291cmNlRGF0YShjb25zdCBjaGFyKiB1cmkpCisgICAgeworICAg
ICAgICBsb2FkVVJJKHVyaSk7CisgICAgICAgIHdhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAg
ICAgICBzaXplX3QgZGF0YVNpemUgPSAwOworICAgICAgICBjb25zdCBjaGFyKiBkYXRhID0gbWFp
blJlc291cmNlRGF0YShkYXRhU2l6ZSk7CisgICAgICAgIHJldHVybiBDU3RyaW5nKGRhdGEsIGRh
dGFTaXplKTsKKyAgICB9CisKKyAgICBHVW5pcXVlUHRyPGNoYXI+IHByb3h5U2VydmVyUG9ydEFz
U3RyaW5nKCkKKyAgICB7CisgICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gcG9ydChnX3N0cmR1cF9w
cmludGYoIiV1IiwgbV9wcm94eVNlcnZlci5wb3J0KCkpKTsKKyAgICAgICAgcmV0dXJuIHBvcnQ7
CisgICAgfQorCisgICAgdm9pZCB3ZWJTb2NrZXRDb25uZWN0ZWQoV2ViU29ja2V0U2VydmVyVHlw
ZSBzZXJ2ZXJUeXBlKQorICAgIHsKKyAgICAgICAgbV93ZWJTb2NrZXRSZXF1ZXN0UmVjZWl2ZWQg
PSBzZXJ2ZXJUeXBlOworICAgICAgICBxdWl0TWFpbkxvb3AoKTsKKyAgICB9CisKKyAgICBXZWJT
b2NrZXRTZXJ2ZXJUeXBlIGNyZWF0ZVdlYlNvY2tldEFuZFdhaXRVbnRpbENvbm5lY3RlZCgpCisg
ICAgeworICAgICAgICBtX3dlYlNvY2tldFJlcXVlc3RSZWNlaXZlZCA9IFdlYlNvY2tldFNlcnZl
clR5cGU6OlVua25vd247CisgICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gY3JlYXRlV2ViU29ja2V0
KGdfc3RyZHVwX3ByaW50ZigidmFyIHdzID0gbmV3IFdlYlNvY2tldCgnJXMnKTsiLCBrU2VydmVy
LT5nZXRXZWJTb2NrZXRVUklGb3JQYXRoKCIvZm9vIikuZGF0YSgpKSk7CisgICAgICAgIHJ1bkph
dmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZChjcmVhdGVXZWJTb2NrZXQuZ2V0KCksIG51bGxw
dHIpOworICAgICAgICBpZiAobV93ZWJTb2NrZXRSZXF1ZXN0UmVjZWl2ZWQgPT0gV2ViU29ja2V0
U2VydmVyVHlwZTo6VW5rbm93bikKKyAgICAgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5M
b29wKTsKKyAgICAgICAgcmV0dXJuIG1fd2ViU29ja2V0UmVxdWVzdFJlY2VpdmVkOworICAgIH0K
KworICAgIFdlYktpdFRlc3RTZXJ2ZXIgbV9wcm94eVNlcnZlcjsKKyAgICBXZWJTb2NrZXRTZXJ2
ZXJUeXBlIG1fd2ViU29ja2V0UmVxdWVzdFJlY2VpdmVkIHsgV2ViU29ja2V0U2VydmVyVHlwZTo6
VW5rbm93biB9OworfTsKKworc3RhdGljIHZvaWQgd2ViU29ja2V0U2VydmVyQ2FsbGJhY2soU291
cFNlcnZlciosIFNvdXBTZXJ2ZXJNZXNzYWdlKiwgY29uc3QgY2hhciosIFNvdXBXZWJzb2NrZXRD
b25uZWN0aW9uKiwgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgc3RhdGljX2Nhc3Q8UHJveHlU
ZXN0Kj4odXNlckRhdGEpLT53ZWJTb2NrZXRDb25uZWN0ZWQoUHJveHlUZXN0OjpXZWJTb2NrZXRT
ZXJ2ZXJUeXBlOjpOb1Byb3h5KTsKK30KKworc3RhdGljIHZvaWQgZXBoZW1lcmFsVmlld2xvYWRD
aGFuZ2VkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdExvYWRFdmVudCBsb2FkRXZlbnQs
IFByb3h5VGVzdCogdGVzdCkKK3sKKyAgICBpZiAobG9hZEV2ZW50ICE9IFdFQktJVF9MT0FEX0ZJ
TklTSEVEKQorICAgICAgICByZXR1cm47CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVj
dF9ieV9mdW5jKHdlYlZpZXcsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGVwaGVtZXJhbFZpZXds
b2FkQ2hhbmdlZCksIHRlc3QpOworICAgIHRlc3QtPnF1aXRNYWluTG9vcCgpOworfQorCitzdGF0
aWMgdm9pZCB0ZXN0TmV0d29ya1Nlc3Npb25Qcm94eVNldHRpbmdzKFByb3h5VGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKK3sKKyAgICAvLyBQcm94eSBVUkkgaXMgdW5zZXQgYnkgZGVmYXVsdC4g
UmVxdWVzdHMgdG8ga1NlcnZlciBzaG91bGQgYmUgcmVjZWl2ZWQgYnkga1NlcnZlci4KKyAgICBH
VW5pcXVlUHRyPGNoYXI+IHNlcnZlclBvcnRBc1N0cmluZyhnX3N0cmR1cF9wcmludGYoIiV1Iiwg
a1NlcnZlci0+cG9ydCgpKSk7CisgICAgYXV0byBtYWluUmVzb3VyY2VEYXRhID0gdGVzdC0+bG9h
ZFVSSUFuZEdldE1haW5SZXNvdXJjZURhdGEoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2VjaG9Q
b3J0IikuZGF0YSgpKTsKKyAgICBBU1NFUlRfQ01QX0NTVFJJTkcobWFpblJlc291cmNlRGF0YSwg
PT0sIHNlcnZlclBvcnRBc1N0cmluZy5nZXQoKSk7CisKKyAgICAvLyBXZWJTb2NrZXQgcmVxdWVz
dHMgc2hvdWxkIGFsc28gYmUgcmVjZWl2ZWQgYnkga1NlcnZlci4KKyAgICBrU2VydmVyLT5hZGRX
ZWJTb2NrZXRIYW5kbGVyKHdlYlNvY2tldFNlcnZlckNhbGxiYWNrLCB0ZXN0KTsKKyAgICBhdXRv
IHNlcnZlclR5cGUgPSB0ZXN0LT5jcmVhdGVXZWJTb2NrZXRBbmRXYWl0VW50aWxDb25uZWN0ZWQo
KTsKKyAgICBnX2Fzc2VydF90cnVlKHNlcnZlclR5cGUgPT0gUHJveHlUZXN0OjpXZWJTb2NrZXRT
ZXJ2ZXJUeXBlOjpOb1Byb3h5KTsKKworICAgIC8vIFNldCBkZWZhdWx0IHByb3h5IFVSSSB0byBw
b2ludCB0byBwcm94eVNlcnZlci4gUmVxdWVzdHMgdG8ga1NlcnZlciBzaG91bGQgYmUgcmVjZWl2
ZWQgYnkgcHJveHlTZXJ2ZXIgaW5zdGVhZC4KKyAgICBXZWJLaXROZXR3b3JrUHJveHlTZXR0aW5n
cyogc2V0dGluZ3MgPSB3ZWJraXRfbmV0d29ya19wcm94eV9zZXR0aW5nc19uZXcodGVzdC0+bV9w
cm94eVNlcnZlci5iYXNlVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbnVsbHB0cik7Cisg
ICAgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfcHJveHlfc2V0dGluZ3ModGVzdC0+bV9uZXR3
b3JrU2Vzc2lvbi5nZXQoKSwgV0VCS0lUX05FVFdPUktfUFJPWFlfTU9ERV9DVVNUT00sIHNldHRp
bmdzKTsKKyAgICBHVW5pcXVlUHRyPGNoYXI+IHByb3h5U2VydmVyUG9ydEFzU3RyaW5nID0gdGVz
dC0+cHJveHlTZXJ2ZXJQb3J0QXNTdHJpbmcoKTsKKyAgICBtYWluUmVzb3VyY2VEYXRhID0gdGVz
dC0+bG9hZFVSSUFuZEdldE1haW5SZXNvdXJjZURhdGEoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgi
L2VjaG9Qb3J0IikuZGF0YSgpKTsKKyAgICBBU1NFUlRfQ01QX0NTVFJJTkcobWFpblJlc291cmNl
RGF0YSwgPT0sIHByb3h5U2VydmVyUG9ydEFzU3RyaW5nLmdldCgpKTsKKworICAgIC8vIFdlYlNv
Y2tldCByZXF1ZXN0cyBzaG91bGQgYWxzbyBiZSByZWNlaXZlZCBieSBwcm94eVNlcnZlci4KKyAg
ICBzZXJ2ZXJUeXBlID0gdGVzdC0+Y3JlYXRlV2ViU29ja2V0QW5kV2FpdFVudGlsQ29ubmVjdGVk
KCk7CisgICAgZ19hc3NlcnRfdHJ1ZShzZXJ2ZXJUeXBlID09IFByb3h5VGVzdDo6V2ViU29ja2V0
U2VydmVyVHlwZTo6UHJveHkpOworCisgICAgLy8gUHJveHkgc2V0dGluZ3MgYWxzbyBhZmZlY3Qg
ZXBoZW1lcmFsIHdlYiB2aWV3cy4KKyAgICBHUmVmUHRyPFdlYktpdE5ldHdvcmtTZXNzaW9uPiBl
cGhlbWVyYWxTZXNzaW9uID0gYWRvcHRHUmVmKHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fbmV3X2Vw
aGVtZXJhbCgpKTsKKyAgICB3ZWJraXRfbmV0d29ya19zZXNzaW9uX3NldF9wcm94eV9zZXR0aW5n
cyhlcGhlbWVyYWxTZXNzaW9uLmdldCgpLCBXRUJLSVRfTkVUV09SS19QUk9YWV9NT0RFX0NVU1RP
TSwgc2V0dGluZ3MpOworICAgIHdlYmtpdF9uZXR3b3JrX3Byb3h5X3NldHRpbmdzX2ZyZWUoc2V0
dGluZ3MpOworICAgIGF1dG8gd2ViVmlldyA9IFRlc3Q6OmFkb3B0VmlldyhnX29iamVjdF9uZXco
V0VCS0lUX1RZUEVfV0VCX1ZJRVcsCisjaWYgUExBVEZPUk0oV1BFKQorICAgICAgICAiYmFja2Vu
ZCIsIFRlc3Q6OmNyZWF0ZVdlYlZpZXdCYWNrZW5kKCksCisjZW5kaWYKKyAgICAgICAgIndlYi1j
b250ZXh0IiwgdGVzdC0+bV93ZWJDb250ZXh0LmdldCgpLAorICAgICAgICAibmV0d29yay1zZXNz
aW9uIiwgZXBoZW1lcmFsU2Vzc2lvbi5nZXQoKSwKKyAgICAgICAgbnVsbHB0cikpOworICAgIGdf
YXNzZXJ0X3RydWUod2Via2l0X3dlYl92aWV3X2dldF9uZXR3b3JrX3Nlc3Npb24od2ViVmlldy5n
ZXQoKSkgPT0gZXBoZW1lcmFsU2Vzc2lvbi5nZXQoKSk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0
KHdlYlZpZXcuZ2V0KCksICJsb2FkLWNoYW5nZWQiLCBHX0NBTExCQUNLKGVwaGVtZXJhbFZpZXds
b2FkQ2hhbmdlZCksIHRlc3QpOworICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh3ZWJWaWV3
LmdldCgpLCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZWNob1BvcnQiKS5kYXRhKCkpOworICAg
IGdfbWFpbl9sb29wX3J1bih0ZXN0LT5tX21haW5Mb29wKTsKKyAgICBXZWJLaXRXZWJSZXNvdXJj
ZSogcmVzb3VyY2UgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2Uod2ViVmlldy5n
ZXQoKSk7CisgICAgZ19hc3NlcnRfdHJ1ZShXRUJLSVRfSVNfV0VCX1JFU09VUkNFKHJlc291cmNl
KSk7CisgICAgd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZGF0YShyZXNvdXJjZSwgbnVsbHB0ciwg
W10oR09iamVjdCogb2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRh
dGEpIHsKKyAgICAgICAgc2l6ZV90IGRhdGFTaXplOworICAgICAgICBHVW5pcXVlUHRyPGNoYXI+
IGRhdGEocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4od2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZGF0
YV9maW5pc2goV0VCS0lUX1dFQl9SRVNPVVJDRShvYmplY3QpLCByZXN1bHQsICZkYXRhU2l6ZSwg
bnVsbHB0cikpKTsKKyAgICAgICAgZ19hc3NlcnRfbm9ubnVsbChkYXRhKTsKKyAgICAgICAgYXV0
byogdGVzdCA9IHN0YXRpY19jYXN0PFByb3h5VGVzdCo+KHVzZXJEYXRhKTsKKyAgICAgICAgR1Vu
aXF1ZVB0cjxjaGFyPiBwcm94eVNlcnZlclBvcnRBc1N0cmluZyA9IHRlc3QtPnByb3h5U2VydmVy
UG9ydEFzU3RyaW5nKCk7CisgICAgICAgIEFTU0VSVF9DTVBfQ1NUUklORyhDU3RyaW5nKGRhdGEu
Z2V0KCksIGRhdGFTaXplKSwgPT0sIHByb3h5U2VydmVyUG9ydEFzU3RyaW5nLmdldCgpKTsKKyAg
ICAgICAgdGVzdC0+cXVpdE1haW5Mb29wKCk7CisgICAgICAgIH0sIHRlc3QpOworICAgIGdfbWFp
bl9sb29wX3J1bih0ZXN0LT5tX21haW5Mb29wKTsKKworICAgIC8vIFJlbW92ZSB0aGUgcHJveHku
IFJlcXVlc3RzIHRvIGtTZXJ2ZXIgc2hvdWxkIGJlIHJlY2VpdmVkIGJ5IGtTZXJ2ZXIgYWdhaW4u
CisgICAgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfcHJveHlfc2V0dGluZ3ModGVzdC0+bV9u
ZXR3b3JrU2Vzc2lvbi5nZXQoKSwgV0VCS0lUX05FVFdPUktfUFJPWFlfTU9ERV9OT19QUk9YWSwg
bnVsbHB0cik7CisgICAgbWFpblJlc291cmNlRGF0YSA9IHRlc3QtPmxvYWRVUklBbmRHZXRNYWlu
UmVzb3VyY2VEYXRhKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9lY2hvUG9ydCIpLmRhdGEoKSk7
CisgICAgQVNTRVJUX0NNUF9DU1RSSU5HKG1haW5SZXNvdXJjZURhdGEsID09LCBzZXJ2ZXJQb3J0
QXNTdHJpbmcuZ2V0KCkpOworCisgICAgLy8gVXNlIGEgZGVmYXVsdCBwcm94eSB1cmksIGJ1dCBp
Z25vcmluZyByZXF1ZXN0cyB0byBsb2NhbGhvc3QuCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGln
bm9yZUhvc3RzW10gPSB7ICJsb2NhbGhvc3QiLCBudWxscHRyIH07CisgICAgc2V0dGluZ3MgPSB3
ZWJraXRfbmV0d29ya19wcm94eV9zZXR0aW5nc19uZXcodGVzdC0+bV9wcm94eVNlcnZlci5iYXNl
VVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgaWdub3JlSG9zdHMpOworICAgIHdlYmtpdF9u
ZXR3b3JrX3Nlc3Npb25fc2V0X3Byb3h5X3NldHRpbmdzKHRlc3QtPm1fbmV0d29ya1Nlc3Npb24u
Z2V0KCksIFdFQktJVF9ORVRXT1JLX1BST1hZX01PREVfQ1VTVE9NLCBzZXR0aW5ncyk7CisgICAg
bWFpblJlc291cmNlRGF0YSA9IHRlc3QtPmxvYWRVUklBbmRHZXRNYWluUmVzb3VyY2VEYXRhKGtT
ZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9lY2hvUG9ydCIpLmRhdGEoKSk7CisgICAgQVNTRVJUX0NN
UF9DU1RSSU5HKG1haW5SZXNvdXJjZURhdGEsID09LCBwcm94eVNlcnZlclBvcnRBc1N0cmluZy5n
ZXQoKSk7CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBsb2NhbGhvc3RFY2hvUG9ydFVSSShnX3N0cmR1
cF9wcmludGYoImh0dHA6Ly9sb2NhbGhvc3Q6JXMvZWNob1BvcnQiLCBzZXJ2ZXJQb3J0QXNTdHJp
bmcuZ2V0KCkpKTsKKyAgICBtYWluUmVzb3VyY2VEYXRhID0gdGVzdC0+bG9hZFVSSUFuZEdldE1h
aW5SZXNvdXJjZURhdGEobG9jYWxob3N0RWNob1BvcnRVUkkuZ2V0KCkpOworICAgIEFTU0VSVF9D
TVBfQ1NUUklORyhtYWluUmVzb3VyY2VEYXRhLCA9PSwgc2VydmVyUG9ydEFzU3RyaW5nLmdldCgp
KTsKKyAgICB3ZWJraXRfbmV0d29ya19wcm94eV9zZXR0aW5nc19mcmVlKHNldHRpbmdzKTsKKwor
ICAgIC8vIFJlbW92ZSB0aGUgcHJveHkgYWdhaW4gdG8gZW5zdXJlIG5leHQgdGVzdCBpcyBub3Qg
dXNpbmcgYW55IHByZXZpb3VzIHZhbHVlcy4KKyAgICB3ZWJraXRfbmV0d29ya19zZXNzaW9uX3Nl
dF9wcm94eV9zZXR0aW5ncyh0ZXN0LT5tX25ldHdvcmtTZXNzaW9uLmdldCgpLCBXRUJLSVRfTkVU
V09SS19QUk9YWV9NT0RFX05PX1BST1hZLCBudWxscHRyKTsKKyAgICBtYWluUmVzb3VyY2VEYXRh
ID0gdGVzdC0+bG9hZFVSSUFuZEdldE1haW5SZXNvdXJjZURhdGEoa1NlcnZlci0+Z2V0VVJJRm9y
UGF0aCgiL2VjaG9Qb3J0IikuZGF0YSgpKTsKKyAgICBBU1NFUlRfQ01QX0NTVFJJTkcobWFpblJl
c291cmNlRGF0YSwgPT0sIHNlcnZlclBvcnRBc1N0cmluZy5nZXQoKSk7CisKKyAgICAvLyBVc2Ug
c2NoZW1lIHNwZWNpZmljIHByb3h5IGluc3RlYWQgb2YgdGhlIGRlZmF1bHQuCisgICAgc2V0dGlu
Z3MgPSB3ZWJraXRfbmV0d29ya19wcm94eV9zZXR0aW5nc19uZXcobnVsbHB0ciwgbnVsbHB0cik7
CisgICAgd2Via2l0X25ldHdvcmtfcHJveHlfc2V0dGluZ3NfYWRkX3Byb3h5X2Zvcl9zY2hlbWUo
c2V0dGluZ3MsICJodHRwIiwgdGVzdC0+bV9wcm94eVNlcnZlci5iYXNlVVJMKCkuc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7CisgICAgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfcHJveHlfc2V0
dGluZ3ModGVzdC0+bV9uZXR3b3JrU2Vzc2lvbi5nZXQoKSwgV0VCS0lUX05FVFdPUktfUFJPWFlf
TU9ERV9DVVNUT00sIHNldHRpbmdzKTsKKyAgICBtYWluUmVzb3VyY2VEYXRhID0gdGVzdC0+bG9h
ZFVSSUFuZEdldE1haW5SZXNvdXJjZURhdGEoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2VjaG9Q
b3J0IikuZGF0YSgpKTsKKyAgICBBU1NFUlRfQ01QX0NTVFJJTkcobWFpblJlc291cmNlRGF0YSwg
PT0sIHByb3h5U2VydmVyUG9ydEFzU3RyaW5nLmdldCgpKTsKKyAgICB3ZWJraXRfbmV0d29ya19w
cm94eV9zZXR0aW5nc19mcmVlKHNldHRpbmdzKTsKKworICAgIC8vIFJlc2V0IHRvIHVzZSB0aGUg
ZGVmYXVsdCByZXNvbHZlci4KKyAgICB3ZWJraXRfbmV0d29ya19zZXNzaW9uX3NldF9wcm94eV9z
ZXR0aW5ncyh0ZXN0LT5tX25ldHdvcmtTZXNzaW9uLmdldCgpLCBXRUJLSVRfTkVUV09SS19QUk9Y
WV9NT0RFX0RFRkFVTFQsIG51bGxwdHIpOworICAgIG1haW5SZXNvdXJjZURhdGEgPSB0ZXN0LT5s
b2FkVVJJQW5kR2V0TWFpblJlc291cmNlRGF0YShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZWNo
b1BvcnQiKS5kYXRhKCkpOworICAgIEFTU0VSVF9DTVBfQ1NUUklORyhtYWluUmVzb3VyY2VEYXRh
LCA9PSwgc2VydmVyUG9ydEFzU3RyaW5nLmdldCgpKTsKKworICAgIGtTZXJ2ZXItPnJlbW92ZVdl
YlNvY2tldEhhbmRsZXIoKTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIGtTZXJ2ZXIg
PSBuZXcgV2ViS2l0VGVzdFNlcnZlcigpOworICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFj
ayk7CisKKyAgICBUZXN0OjphZGQoIldlYktpdE5ldHdvcmtTZXNzaW9uIiwgImRlZmF1bHQtc2Vz
c2lvbiIsIHRlc3ROZXR3b3JrU2Vzc2lvbkRlZmF1bHQpOworICAgIFRlc3Q6OmFkZCgiV2ViS2l0
TmV0d29ya1Nlc3Npb24iLCAiZXBoZW1lcmFsIiwgdGVzdE5ldHdvcmtTZXNzaW9uRXBoZW1lcmFs
KTsKKyAgICBQcm94eVRlc3Q6OmFkZCgiV2ViS2l0TmV0d29ya1Nlc3Npb24iLCAicHJveHkiLCB0
ZXN0TmV0d29ya1Nlc3Npb25Qcm94eVNldHRpbmdzKTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7
CisgICAgZGVsZXRlIGtTZXJ2ZXI7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdEdMaWIvVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNwcAppbmRleCAw
YmJkMWE5MzY1ZWYuLjI4ZTdjNWRjMDRlMyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNwcAorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwCkBA
IC00MSw2ICs0MSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJDb250ZXh0RGVmYXVsdChUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X3dlYl9jb250ZXh0
X2dldF9kZWZhdWx0KCkgIT0gdGVzdC0+bV93ZWJDb250ZXh0LmdldCgpKTsKIH0KIAorI2lmICFF
TkFCTEUoMjAyMl9HTElCX0FQSSkKIHN0YXRpYyB2b2lkIHRlc3RXZWJDb250ZXh0RXBoZW1lcmFs
KFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiB7CiAgICAgLy8gQnkgZGVmYXVsdCB3ZWIgY29u
dGV4dHMgYXJlIG5vdCBlcGhlbWVyYWwuCkBAIC03OCw2ICs3OSw3IEBAIHN0YXRpYyB2b2lkIHRl
c3RXZWJDb250ZXh0RXBoZW1lcmFsKFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgY29u
dGV4dCA9IGFkb3B0R1JlZih3ZWJraXRfd2ViX2NvbnRleHRfbmV3X3dpdGhfd2Vic2l0ZV9kYXRh
X21hbmFnZXIoZXBoZW1lcmFsTWFuYWdlci5nZXQoKSkpOwogICAgIGdfYXNzZXJ0X3RydWUod2Vi
a2l0X3dlYl9jb250ZXh0X2lzX2VwaGVtZXJhbChjb250ZXh0LmdldCgpKSk7CiB9CisjZW5kaWYK
IAogc3RhdGljIGNvbnN0IGNoYXIqIGtCYXJIVE1MID0gIjxodG1sPjxib2R5PkJhcjwvYm9keT48
L2h0bWw+IjsKIHN0YXRpYyBjb25zdCBjaGFyKiBrRWNob0hUTUxGb3JtYXQgPSAiPGh0bWw+PGJv
ZHk+JXM8L2JvZHk+PC9odG1sPiI7CkBAIC03NjgsNiArNzcwLDcgQEAgcHVibGljOgogI2VuZGlm
CiB9OwogCisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogI2lmIFNPVVBfQ0hFQ0tfVkVSU0lP
TigyLCA2MSwgOTApCiAjaWYgVVNFKFNPVVAyKQogc3RhdGljIHZvaWQgd2ViU29ja2V0U2VydmVy
Q2FsbGJhY2soU291cFNlcnZlciosIFNvdXBXZWJzb2NrZXRDb25uZWN0aW9uKiwgY29uc3QgY2hh
ciosIFNvdXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIgdXNlckRhdGEpCkBAIC04ODEsNiArODg0
LDcgQEAgc3RhdGljIHZvaWQgdGVzdFdlYkNvbnRleHRQcm94eVNldHRpbmdzKFByb3h5VGVzdCog
dGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICBrU2VydmVyLT5yZW1vdmVXZWJTb2NrZXRIYW5kbGVy
KCk7CiAjZW5kaWYKIH0KKyNlbmRpZgogCiBjbGFzcyBNZW1vcnlQcmVzc3VyZVRlc3QgOiBwdWJs
aWMgV2ViVmlld1Rlc3QgewogcHVibGljOgpAQCAtMTA2Niw3ICsxMDcwLDkgQEAgdm9pZCBiZWZv
cmVBbGwoKQogICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7CiAKICAgICBUZXN0Ojph
ZGQoIldlYktpdFdlYkNvbnRleHQiLCAiZGVmYXVsdC1jb250ZXh0IiwgdGVzdFdlYkNvbnRleHRE
ZWZhdWx0KTsKKyNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAgICAgVGVzdDo6YWRkKCJXZWJL
aXRXZWJDb250ZXh0IiwgImVwaGVtZXJhbCIsIHRlc3RXZWJDb250ZXh0RXBoZW1lcmFsKTsKKyNl
bmRpZgogICAgIFVSSVNjaGVtZVRlc3Q6OmFkZCgiV2ViS2l0V2ViQ29udGV4dCIsICJ1cmktc2No
ZW1lIiwgdGVzdFdlYkNvbnRleHRVUklTY2hlbWUpOwogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQg
c3BlbGxjaGVja2VyIGluIFdQRS4KICNpZiBQTEFURk9STShHVEspCkBAIC0xMDc1LDcgKzEwODEs
OSBAQCB2b2lkIGJlZm9yZUFsbCgpCiAgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViQ29u
dGV4dCIsICJsYW5ndWFnZXMiLCB0ZXN0V2ViQ29udGV4dExhbmd1YWdlcyk7CiAgICAgU2VjdXJp
dHlQb2xpY3lUZXN0OjphZGQoIldlYktpdFNlY3VyaXR5TWFuYWdlciIsICJzZWN1cml0eS1wb2xp
Y3kiLCB0ZXN0V2ViQ29udGV4dFNlY3VyaXR5UG9saWN5KTsKICAgICBXZWJWaWV3VGVzdDo6YWRk
KCJXZWJLaXRTZWN1cml0eU1hbmFnZXIiLCAiZmlsZS14aHIiLCB0ZXN0V2ViQ29udGV4dFNlY3Vy
aXR5RmlsZVhIUik7CisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogICAgIFByb3h5VGVzdDo6
YWRkKCJXZWJLaXRXZWJDb250ZXh0IiwgInByb3h5IiwgdGVzdFdlYkNvbnRleHRQcm94eVNldHRp
bmdzKTsKKyNlbmRpZgogICAgIE1lbW9yeVByZXNzdXJlVGVzdDo6YWRkKCJXZWJLaXRXZWJDb250
ZXh0IiwgIm1lbW9yeS1wcmVzc3VyZSIsIHRlc3RNZW1vcnlQcmVzc3VyZVNldHRpbmdzKTsKICAg
ICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRXZWJDb250ZXh0IiwgInRpbWV6b25lIiwgdGVzdFdl
YkNvbnRleHRUaW1lWm9uZU92ZXJyaWRlKTsKICAgICBXZWJWaWV3VGVzdDo6YWRkKCJXZWJLaXRX
ZWJDb250ZXh0IiwgInRpbWV6b25lLXdvcmtlciIsIHRlc3RXZWJDb250ZXh0VGltZVpvbmVPdmVy
cmlkZUluV29ya2VyKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0R0xpYi9UZXN0V2ViS2l0V2ViVmlldy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdEdMaWIvVGVzdFdlYktpdFdlYlZpZXcuY3BwCmluZGV4IDRkOTYwOTFlMmM2MC4uNmJm
OGRjNzkyNzMzIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdM
aWIvVGVzdFdlYktpdFdlYlZpZXcuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0R0xpYi9UZXN0V2ViS2l0V2ViVmlldy5jcHAKQEAgLTIxOSwxMSArMjE5LDE5IEBAIHN0
YXRpYyB2b2lkIGVwaGVtZXJhbFZpZXdsb2FkQ2hhbmdlZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
LCBXZWJLaXRMb2FkRXZlbnQgbG9hCiAKIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RXBoZW1lcmFs
KFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogeworI2lmIEVOQUJMRSgyMDIyX0dM
SUJfQVBJKQorICAgIGF1dG8qIG5ldHdvcmtTZXNzaW9uID0gd2Via2l0X3dlYl92aWV3X2dldF9u
ZXR3b3JrX3Nlc3Npb24odGVzdC0+bV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydF9mYWxzZSh3ZWJr
aXRfbmV0d29ya19zZXNzaW9uX2lzX2VwaGVtZXJhbChuZXR3b3JrU2Vzc2lvbikpOworICAgIGF1
dG8qIG1hbmFnZXIgPSB3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF93ZWJzaXRlX2RhdGFfbWFu
YWdlcihuZXR3b3JrU2Vzc2lvbik7CisgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyX2lzX2VwaGVtZXJhbChtYW5hZ2VyKSk7CisgICAgR1JlZlB0cjxXZWJLaXRO
ZXR3b3JrU2Vzc2lvbj4gZXBoZW1lcmFsU2Vzc2lvbiA9IGFkb3B0R1JlZih3ZWJraXRfbmV0d29y
a19zZXNzaW9uX25ld19lcGhlbWVyYWwoKSk7CisjZWxzZQogICAgIGdfYXNzZXJ0X2ZhbHNlKHdl
YmtpdF93ZWJfdmlld19pc19lcGhlbWVyYWwodGVzdC0+bV93ZWJWaWV3KSk7CiAgICAgZ19hc3Nl
cnRfZmFsc2Uod2Via2l0X3dlYl9jb250ZXh0X2lzX2VwaGVtZXJhbCh3ZWJraXRfd2ViX3ZpZXdf
Z2V0X2NvbnRleHQodGVzdC0+bV93ZWJWaWV3KSkpOwogICAgIGF1dG8qIG1hbmFnZXIgPSB3ZWJr
aXRfd2ViX2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHRlc3QtPm1fd2ViQ29udGV4
dC5nZXQoKSk7CiAgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X2lzX2VwaGVtZXJhbChtYW5hZ2VyKSk7CiAgICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHRlc3QtPm1fd2ViVmlldykgPT0gbWFuYWdlcik7
CisjZW5kaWYKICAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfY2xlYXIobWFuYWdlciwg
V0VCS0lUX1dFQlNJVEVfREFUQV9ESVNLX0NBQ0hFLCAwLCBudWxscHRyLCBbXShHT2JqZWN0KiBt
YW5hZ2VyLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKICAgICAg
ICAgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2NsZWFyX2ZpbmlzaChXRUJLSVRfV0VCU0lU
RV9EQVRBX01BTkFHRVIobWFuYWdlciksIHJlc3VsdCwgbnVsbHB0cik7CiAgICAgICAgIHN0YXRp
Y19jYXN0PFdlYlZpZXdUZXN0Kj4odXNlckRhdGEpLT5xdWl0TWFpbkxvb3AoKTsKQEAgLTIzNiwx
MSArMjQ0LDIwIEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3RXBoZW1lcmFsKFdlYlZpZXdUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgICAgICAiYmFja2VuZCIsIFRlc3Q6OmNyZWF0ZVdl
YlZpZXdCYWNrZW5kKCksCiAjZW5kaWYKICAgICAgICAgIndlYi1jb250ZXh0Iiwgd2Via2l0X3dl
Yl92aWV3X2dldF9jb250ZXh0KHRlc3QtPm1fd2ViVmlldyksCisjaWYgRU5BQkxFKDIwMjJfR0xJ
Ql9BUEkpCisgICAgICAgICJuZXR3b3JrLXNlc3Npb24iLCBlcGhlbWVyYWxTZXNzaW9uLmdldCgp
LAorI2Vsc2UKICAgICAgICAgImlzLWVwaGVtZXJhbCIsIFRSVUUsCisjZW5kaWYKICAgICAgICAg
bnVsbHB0cikpOworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIGdfYXNzZXJ0X3RydWUo
d2Via2l0X25ldHdvcmtfc2Vzc2lvbl9pc19lcGhlbWVyYWwod2Via2l0X3dlYl92aWV3X2dldF9u
ZXR3b3JrX3Nlc3Npb24od2ViVmlldy5nZXQoKSkpKTsKKyAgICBnX2Fzc2VydF90cnVlKHdlYmtp
dF93ZWJfdmlld19nZXRfbmV0d29ya19zZXNzaW9uKHdlYlZpZXcuZ2V0KCkpICE9IG5ldHdvcmtT
ZXNzaW9uKTsKKyNlbHNlCiAgICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfd2ViX3ZpZXdfaXNfZXBo
ZW1lcmFsKHdlYlZpZXcuZ2V0KCkpKTsKICAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfd2ViX2Nv
bnRleHRfaXNfZXBoZW1lcmFsKHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dCh3ZWJWaWV3Lmdl
dCgpKSkpOwogICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X3dlYl92aWV3X2dldF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcih3ZWJWaWV3LmdldCgpKSAhPSBtYW5hZ2VyKTsKKyNlbmRpZgogCiAgICAgZ19z
aWduYWxfY29ubmVjdCh3ZWJWaWV3LmdldCgpLCAibG9hZC1jaGFuZ2VkIiwgR19DQUxMQkFDSyhl
cGhlbWVyYWxWaWV3bG9hZENoYW5nZWQpLCB0ZXN0KTsKICAgICB3ZWJraXRfd2ViX3ZpZXdfbG9h
ZF91cmkod2ViVmlldy5nZXQoKSwgZ1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFdl
YnNpdGVEYXRhLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0
V2Vic2l0ZURhdGEuY3BwCmluZGV4IDlkNGRiYjA1OTFlZi4uNDNmZTQ2MzY5YjYzIDEwMDY0NAot
LS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFdlYnNpdGVEYXRh
LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdFdlYnNp
dGVEYXRhLmNwcApAQCAtMTA0LDkgKzEwNCwxMiBAQCBjbGFzcyBXZWJzaXRlRGF0YVRlc3QgOiBw
dWJsaWMgV2ViVmlld1Rlc3QgewogcHVibGljOgogICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUo
V2Vic2l0ZURhdGFUZXN0KTsKIAotCiAgICAgV2Vic2l0ZURhdGFUZXN0KCkKKyNpZiBFTkFCTEUo
MjAyMl9HTElCX0FQSSkKKyAgICAgICAgOiBtX21hbmFnZXIod2Via2l0X25ldHdvcmtfc2Vzc2lv
bl9nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIod2Via2l0X3dlYl92aWV3X2dldF9uZXR3b3JrX3Nl
c3Npb24obV93ZWJWaWV3KSkpCisjZWxzZQogICAgICAgICA6IG1fbWFuYWdlcih3ZWJraXRfd2Vi
X2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYmtpdF93ZWJfdmlld19nZXRfY29u
dGV4dChtX3dlYlZpZXcpKSkKKyNlbmRpZgogICAgIHsKICAgICAgICAgZ19hc3NlcnRfdHJ1ZShX
RUJLSVRfSVNfV0VCU0lURV9EQVRBX01BTkFHRVIobV9tYW5hZ2VyKSk7CiAgICAgICAgIGFzc2Vy
dE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QobV9tYW5hZ2VyKSk7CkBA
IC0xNjAsMTAgKzE2MywxMSBAQCBwdWJsaWM6CiAgICAgR0xpc3QqIG1fZGF0YUxpc3QgeyBudWxs
cHRyIH07CiB9OwogCi0jaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogc3RhdGljIHZvaWQgdGVz
dFdlYnNpdGVEYXRhQ29uZmlndXJhdGlvbihXZWJzaXRlRGF0YVRlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCiB7CisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogICAgIEFMTE9XX0RFUFJFQ0FU
RURfREVDTEFSQVRJT05TX0JFR0lOCisjZW5kaWYKIAogICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJr
aXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Jhc2VfZGF0YV9kaXJlY3RvcnkodGVzdC0+bV9t
YW5hZ2VyKSwgPT0sIFRlc3Q6OmRhdGFEaXJlY3RvcnkoKSk7CiAgICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfYmFzZV9jYWNoZV9kaXJlY3RvcnkodGVz
dC0+bV9tYW5hZ2VyKSwgPT0sIFRlc3Q6OmRhdGFEaXJlY3RvcnkoKSk7CkBAIC0xNzIsNyArMTc2
LDkgQEAgc3RhdGljIHZvaWQgdGVzdFdlYnNpdGVEYXRhQ29uZmlndXJhdGlvbihXZWJzaXRlRGF0
YVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7CiAgICAgdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJ3aW5k
b3cubG9jYWxTdG9yYWdlLm15cHJvcGVydHkgPSA0MjsiLCBudWxscHRyKTsKICAgICBHVW5pcXVl
UHRyPGNoYXI+IGxvY2FsU3RvcmFnZURpcmVjdG9yeShnX2J1aWxkX2ZpbGVuYW1lKFRlc3Q6OmRh
dGFEaXJlY3RvcnkoKSwgImxvY2Fsc3RvcmFnZSIsIG51bGxwdHIpKTsKKyNpZiAhRU5BQkxFKDIw
MjJfR0xJQl9BUEkpCiAgICAgZ19hc3NlcnRfY21wc3RyKGxvY2FsU3RvcmFnZURpcmVjdG9yeS5n
ZXQoKSwgPT0sIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfbG9jYWxfc3RvcmFnZV9k
aXJlY3RvcnkodGVzdC0+bV9tYW5hZ2VyKSk7CisjZW5kaWYKICAgICB0ZXN0LT5hc3NlcnRGaWxl
SXNDcmVhdGVkKGxvY2FsU3RvcmFnZURpcmVjdG9yeS5nZXQoKSk7CiAgICAgZ19hc3NlcnRfdHJ1
ZShnX2ZpbGVfdGVzdChsb2NhbFN0b3JhZ2VEaXJlY3RvcnkuZ2V0KCksIEdfRklMRV9URVNUX0lT
X0RJUikpOwogICAgIHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgid2lu
ZG93LmxvY2FsU3RvcmFnZS5jbGVhcigpOyIsIG51bGxwdHIpOwpAQCAtMTgxLDM3ICsxODcsNTEg
QEAgc3RhdGljIHZvaWQgdGVzdFdlYnNpdGVEYXRhQ29uZmlndXJhdGlvbihXZWJzaXRlRGF0YVRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7CiAgICAgdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJ3aW5kb3cu
aW5kZXhlZERCLm9wZW4oJ1Rlc3REYXRhYmFzZScpOyIsIG51bGxwdHIpOwogICAgIEdVbmlxdWVQ
dHI8Y2hhcj4gaW5kZXhlZERCRGlyZWN0b3J5KGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6ZGF0YURp
cmVjdG9yeSgpLCAiZGF0YWJhc2VzIiwgImluZGV4ZWRkYiIsIG51bGxwdHIpKTsKKyNpZiAhRU5B
QkxFKDIwMjJfR0xJQl9BUEkpCiAgICAgZ19hc3NlcnRfY21wc3RyKGluZGV4ZWREQkRpcmVjdG9y
eS5nZXQoKSwgPT0sIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfaW5kZXhlZGRiX2Rp
cmVjdG9yeSh0ZXN0LT5tX21hbmFnZXIpKTsKKyNlbmRpZgogICAgIHRlc3QtPmFzc2VydEZpbGVJ
c0NyZWF0ZWQoaW5kZXhlZERCRGlyZWN0b3J5LmdldCgpKTsKICAgICBnX2Fzc2VydF90cnVlKGdf
ZmlsZV90ZXN0KGluZGV4ZWREQkRpcmVjdG9yeS5nZXQoKSwgR19GSUxFX1RFU1RfSVNfRElSKSk7
CiAKICAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9hcHBjYWNoZSIp
LmRhdGEoKSk7CiAgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CiAgICAgR1VuaXF1
ZVB0cjxjaGFyPiBhcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5KGdfYnVpbGRfZmlsZW5hbWUoVGVz
dDo6ZGF0YURpcmVjdG9yeSgpLCAiYXBwbGljYXRpb25zIiwgbnVsbHB0cikpOworI2lmICFFTkFC
TEUoMjAyMl9HTElCX0FQSSkKICAgICBnX2Fzc2VydF9jbXBzdHIoYXBwbGljYXRpb25DYWNoZURp
cmVjdG9yeS5nZXQoKSwgPT0sIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfb2ZmbGlu
ZV9hcHBsaWNhdGlvbl9jYWNoZV9kaXJlY3RvcnkodGVzdC0+bV9tYW5hZ2VyKSk7CisjZW5kaWYK
ICAgICBHVW5pcXVlUHRyPGNoYXI+IGFwcGxpY2F0aW9uQ2FjaGVEYXRhYmFzZShnX2J1aWxkX2Zp
bGVuYW1lKGFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkuZ2V0KCksICJBcHBsaWNhdGlvbkNhY2hl
LmRiIiwgbnVsbHB0cikpOwogICAgIHRlc3QtPmFzc2VydEZpbGVJc0NyZWF0ZWQoYXBwbGljYXRp
b25DYWNoZURhdGFiYXNlLmdldCgpKTsKIAogICAgIEdVbmlxdWVQdHI8Y2hhcj4gZGlza0NhY2hl
RGlyZWN0b3J5KGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6ZGF0YURpcmVjdG9yeSgpLCBudWxscHRy
KSk7CisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogICAgIGdfYXNzZXJ0X2NtcHN0cihkaXNr
Q2FjaGVEaXJlY3RvcnkuZ2V0KCksID09LCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0
X2Rpc2tfY2FjaGVfZGlyZWN0b3J5KHRlc3QtPm1fbWFuYWdlcikpOworI2VuZGlmCiAgICAgZ19h
c3NlcnRfdHJ1ZShnX2ZpbGVfdGVzdChkaXNrQ2FjaGVEaXJlY3RvcnkuZ2V0KCksIEdfRklMRV9U
RVNUX0lTX0RJUikpOwogCiAgICAgR1VuaXF1ZVB0cjxjaGFyPiBoc3RzQ2FjaGVEaXJlY3Rvcnko
Z19idWlsZF9maWxlbmFtZShUZXN0OjpkYXRhRGlyZWN0b3J5KCksIG51bGxwdHIpKTsKKyNpZiAh
RU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAgICAgZ19hc3NlcnRfY21wc3RyKGhzdHNDYWNoZURpcmVj
dG9yeS5nZXQoKSwgPT0sIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfaHN0c19jYWNo
ZV9kaXJlY3RvcnkodGVzdC0+bV9tYW5hZ2VyKSk7CisjZW5kaWYKICAgICBnX2Fzc2VydF90cnVl
KGdfZmlsZV90ZXN0KGhzdHNDYWNoZURpcmVjdG9yeS5nZXQoKSwgR19GSUxFX1RFU1RfSVNfRElS
KSk7CiAKKyNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAgICAgR1VuaXF1ZVB0cjxjaGFyPiBp
dHBEaXJlY3RvcnkoZ19idWlsZF9maWxlbmFtZShUZXN0OjpkYXRhRGlyZWN0b3J5KCksICJpdHAi
LCBudWxscHRyKSk7CiAgICAgZ19hc3NlcnRfY21wc3RyKGl0cERpcmVjdG9yeS5nZXQoKSwgPT0s
IHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfaXRwX2RpcmVjdG9yeSh0ZXN0LT5tX21h
bmFnZXIpKTsKKyNlbmRpZgogCiAgICAgdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZp
bmlzaGVkKCJuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZWdpc3RlcignLi9zb21lLWR1bW15Lmpz
Jyk7IiwgbnVsbHB0cik7CiAgICAgR1VuaXF1ZVB0cjxjaGFyPiBzd1JlZ2lzdHJhdGlvbnNEaXJl
Y3RvcnkoZ19idWlsZF9maWxlbmFtZShUZXN0OjpkYXRhRGlyZWN0b3J5KCksICJzZXJ2aWNld29y
a2VycyIsIG51bGxwdHIpKTsKKyNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAgICAgZ19hc3Nl
cnRfY21wc3RyKHN3UmVnaXN0cmF0aW9uc0RpcmVjdG9yeS5nZXQoKSwgPT0sIHdlYmtpdF93ZWJz
aXRlX2RhdGFfbWFuYWdlcl9nZXRfc2VydmljZV93b3JrZXJfcmVnaXN0cmF0aW9uc19kaXJlY3Rv
cnkodGVzdC0+bV9tYW5hZ2VyKSk7CisjZW5kaWYKICAgICB0ZXN0LT5hc3NlcnRGaWxlSXNDcmVh
dGVkKHN3UmVnaXN0cmF0aW9uc0RpcmVjdG9yeS5nZXQoKSk7CiAgICAgZ19hc3NlcnRfdHJ1ZShn
X2ZpbGVfdGVzdChzd1JlZ2lzdHJhdGlvbnNEaXJlY3RvcnkuZ2V0KCksIEdfRklMRV9URVNUX0lT
X0RJUikpOwogCiAgICAgdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJs
ZXQgZG9tQ2FjaGVPcGVuZWQgPSBmYWxzZTsgY2FjaGVzLm9wZW4oJ215LWNhY2hlJykudGhlbigo
KSA9PiB7IGRvbUNhY2hlT3BlbmVkID0gdHJ1ZX0pOyIsIG51bGxwdHIpOwogICAgIEdVbmlxdWVQ
dHI8Y2hhcj4gZG9tQ2FjaGVEaXJlY3RvcnkoZ19idWlsZF9maWxlbmFtZShUZXN0OjpkYXRhRGly
ZWN0b3J5KCksICJDYWNoZVN0b3JhZ2UiLCBudWxscHRyKSk7CisjaWYgIUVOQUJMRSgyMDIyX0dM
SUJfQVBJKQogICAgIGdfYXNzZXJ0X2NtcHN0cihkb21DYWNoZURpcmVjdG9yeS5nZXQoKSwgPT0s
IHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfZG9tX2NhY2hlX2RpcmVjdG9yeSh0ZXN0
LT5tX21hbmFnZXIpKTsKKyNlbmRpZgogICAgIHRlc3QtPmFzc2VydEZpbGVJc0NyZWF0ZWQoZG9t
Q2FjaGVEaXJlY3RvcnkuZ2V0KCkpOwogICAgIGdfYXNzZXJ0X3RydWUoZ19maWxlX3Rlc3QoZG9t
Q2FjaGVEaXJlY3RvcnkuZ2V0KCksIEdfRklMRV9URVNUX0lTX0RJUikpOwogCkBAIC0yMjYsMTAg
KzI0NiwxNyBAQCBzdGF0aWMgdm9pZCB0ZXN0V2Vic2l0ZURhdGFDb25maWd1cmF0aW9uKFdlYnNp
dGVEYXRhVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICB0ZXN0LT5jbGVhcihwZXJzaXN0
ZW50Q2FjaGVzLCAwKTsKICAgICBnX2Fzc2VydF9udWxsKHRlc3QtPmZldGNoKHBlcnNpc3RlbnRD
YWNoZXMpKTsKIAotICAgIC8vIFRoZSBkZWZhdWx0IGNvbnRleHQgc2hvdWxkIGhhdmUgYSBkaWZm
ZXJlbnQgbWFuYWdlciB3aXRoIGRpZmZlcmVudCBjb25maWd1cmF0aW9uLgotICAgIFdlYktpdFdl
YnNpdGVEYXRhTWFuYWdlciogZGVmYXVsdE1hbmFnZXIgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0
X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKTsK
KyAgICAvLyBUaGUgZGVmYXVsdCBjb250ZXh0IG9yIHNlc3Npb24gc2hvdWxkIGhhdmUgYSBkaWZm
ZXJlbnQgbWFuYWdlciB3aXRoIGRpZmZlcmVudCBjb25maWd1cmF0aW9uLgorI2lmIEVOQUJMRSgy
MDIyX0dMSUJfQVBJKQorICAgIGF1dG8qIGRlZmF1bHRNYW5hZ2VyID0gd2Via2l0X25ldHdvcmtf
c2Vzc2lvbl9nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIod2Via2l0X25ldHdvcmtfc2Vzc2lvbl9n
ZXRfZGVmYXVsdCgpKTsKKyNlbHNlCisgICAgYXV0byogZGVmYXVsdE1hbmFnZXIgPSB3ZWJraXRf
d2ViX2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYmtpdF93ZWJfY29udGV4dF9n
ZXRfZGVmYXVsdCgpKTsKKyNlbmRpZgogICAgIGdfYXNzZXJ0X3RydWUoV0VCS0lUX0lTX1dFQlNJ
VEVfREFUQV9NQU5BR0VSKGRlZmF1bHRNYW5hZ2VyKSk7CiAgICAgZ19hc3NlcnRfdHJ1ZSh0ZXN0
LT5tX21hbmFnZXIgIT0gZGVmYXVsdE1hbmFnZXIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJr
aXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Jhc2VfZGF0YV9kaXJlY3RvcnkodGVzdC0+bV9t
YW5hZ2VyKSwgIT0sIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfYmFzZV9kYXRhX2Rp
cmVjdG9yeShkZWZhdWx0TWFuYWdlcikpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2Vi
c2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Jhc2VfY2FjaGVfZGlyZWN0b3J5KHRlc3QtPm1fbWFuYWdl
ciksICE9LCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Jhc2VfY2FjaGVfZGlyZWN0
b3J5KGRlZmF1bHRNYW5hZ2VyKSk7CisjaWYgIUVOQUJMRSgyMDIyX0dMSUJfQVBJKQogICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2xvY2FsX3N0b3Jh
Z2VfZGlyZWN0b3J5KHRlc3QtPm1fbWFuYWdlciksICE9LCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21h
bmFnZXJfZ2V0X2xvY2FsX3N0b3JhZ2VfZGlyZWN0b3J5KGRlZmF1bHRNYW5hZ2VyKSk7CiAgICAg
Z19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfaW5kZXhlZGRi
X2RpcmVjdG9yeSh0ZXN0LT5tX21hbmFnZXIpLCAhPSwgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5h
Z2VyX2dldF9pbmRleGVkZGJfZGlyZWN0b3J5KGRlZmF1bHRNYW5hZ2VyKSk7CiAgICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfZGlza19jYWNoZV9kaXJl
Y3RvcnkodGVzdC0+bV9tYW5hZ2VyKSwgIT0sIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9n
ZXRfZGlza19jYWNoZV9kaXJlY3RvcnkoZGVmYXVsdE1hbmFnZXIpKTsKQEAgLTIzOCw3ICsyNjUs
OSBAQCBzdGF0aWMgdm9pZCB0ZXN0V2Vic2l0ZURhdGFDb25maWd1cmF0aW9uKFdlYnNpdGVEYXRh
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9pdHBfZGlyZWN0b3J5KHRlc3QtPm1fbWFuYWdlciksICE9
LCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2l0cF9kaXJlY3RvcnkoZGVmYXVsdE1h
bmFnZXIpKTsKICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X2dldF9zZXJ2aWNlX3dvcmtlcl9yZWdpc3RyYXRpb25zX2RpcmVjdG9yeSh0ZXN0LT5tX21hbmFn
ZXIpLCAhPSwgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9zZXJ2aWNlX3dvcmtlcl9y
ZWdpc3RyYXRpb25zX2RpcmVjdG9yeShkZWZhdWx0TWFuYWdlcikpOwogICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2RvbV9jYWNoZV9kaXJlY3Rvcnko
dGVzdC0+bV9tYW5hZ2VyKSwgIT0sIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfZG9t
X2NhY2hlX2RpcmVjdG9yeShkZWZhdWx0TWFuYWdlcikpOworI2VuZGlmCiAKKyNpZiAhRU5BQkxF
KDIwMjJfR0xJQl9BUEkpCiAgICAgLy8gQW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gcHJvdmlk
ZWQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGJhc2UgZGlycy4KICAgICBpbmRleGVkREJEaXJlY3Rv
cnkucmVzZXQoZ19idWlsZF9maWxlbmFtZShUZXN0OjpkYXRhRGlyZWN0b3J5KCksICJteWN1c3Rv
bWluZGV4ZWRkYiIsIG51bGxwdHIpKTsKICAgICBhcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5LnJl
c2V0KGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6ZGF0YURpcmVjdG9yeSgpLCAibXljdXN0b21hcHBj
YWNoZSIsIG51bGxwdHIpKTsKQEAgLTI1OCw4ICsyODcsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0V2Vi
c2l0ZURhdGFDb25maWd1cmF0aW9uKFdlYnNpdGVEYXRhVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9k
aXNrX2NhY2hlX2RpcmVjdG9yeShiYXNlRGF0YU1hbmFnZXIuZ2V0KCkpLCA9PSwgZGlza0NhY2hl
RGlyZWN0b3J5LmdldCgpKTsKIAogICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VO
RAotfQogI2VuZGlmCit9CiAKIHN0YXRpYyB2b2lkIGVwaGVtZXJhbFZpZXdsb2FkQ2hhbmdlZChX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRMb2FkRXZlbnQgbG9hZEV2ZW50LCBXZWJWaWV3
VGVzdCogdGVzdCkKIHsKQEAgLTI3MSw4ICszMDAsMTMgQEAgc3RhdGljIHZvaWQgZXBoZW1lcmFs
Vmlld2xvYWRDaGFuZ2VkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdExvYWRFdmVudCBs
b2EKIAogc3RhdGljIHZvaWQgdGVzdFdlYnNpdGVEYXRhRXBoZW1lcmFsKFdlYlZpZXdUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQogeworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIEdS
ZWZQdHI8V2ViS2l0TmV0d29ya1Nlc3Npb24+IHNlc3Npb24gPSBhZG9wdEdSZWYod2Via2l0X25l
dHdvcmtfc2Vzc2lvbl9uZXdfZXBoZW1lcmFsKCkpOworICAgIEdSZWZQdHI8V2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyPiBtYW5hZ2VyID0gd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfd2Vic2l0
ZV9kYXRhX21hbmFnZXIoc2Vzc2lvbi5nZXQoKSk7CisjZWxzZQogICAgIEdSZWZQdHI8V2ViS2l0
V2Vic2l0ZURhdGFNYW5hZ2VyPiBtYW5hZ2VyID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcl9uZXdfZXBoZW1lcmFsKCkpOwogICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyX2lzX2VwaGVtZXJhbChtYW5hZ2VyLmdldCgpKSk7CisjZW5kaWYK
ICAgICBnX2Fzc2VydF9udWxsKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfYmFzZV9k
YXRhX2RpcmVjdG9yeShtYW5hZ2VyLmdldCgpKSk7CiAgICAgZ19hc3NlcnRfbnVsbCh3ZWJraXRf
d2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Jhc2VfY2FjaGVfZGlyZWN0b3J5KG1hbmFnZXIuZ2V0
KCkpKTsKIApAQCAtMjg2LDIyICszMjAsMzUgQEAgc3RhdGljIHZvaWQgdGVzdFdlYnNpdGVEYXRh
RXBoZW1lcmFsKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGdfYXNzZXJ0
X251bGwod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9pdHBfZGlyZWN0b3J5KG1hbmFn
ZXIuZ2V0KCkpKTsKICAgICBnX2Fzc2VydF9udWxsKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdl
cl9nZXRfc2VydmljZV93b3JrZXJfcmVnaXN0cmF0aW9uc19kaXJlY3RvcnkobWFuYWdlci5nZXQo
KSkpOwogICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAotI2VuZGlmCiAKICAg
ICAvLyBDb25maWd1cmF0aW9uIGlzIGlnbm9yZWQgd2hlbiBpcy1lcGhlbWVyYWwgaXMgdXNlZC4K
ICAgICBtYW5hZ2VyID0gYWRvcHRHUmVmKFdFQktJVF9XRUJTSVRFX0RBVEFfTUFOQUdFUihnX29i
amVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCU0lURV9EQVRBX01BTkFHRVIsICJiYXNlLWRhdGEtZGly
ZWN0b3J5IiwgVGVzdDo6ZGF0YURpcmVjdG9yeSgpLCAiaXMtZXBoZW1lcmFsIiwgVFJVRSwgbnVs
bHB0cikpKTsKICAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9p
c19lcGhlbWVyYWwobWFuYWdlci5nZXQoKSkpOwogICAgIGdfYXNzZXJ0X251bGwod2Via2l0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9iYXNlX2RhdGFfZGlyZWN0b3J5KG1hbmFnZXIuZ2V0KCkp
KTsKKyNlbmRpZgogCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgd2Via2l0X25ldHdv
cmtfc2Vzc2lvbl9zZXRfaXRwX2VuYWJsZWQoc2Vzc2lvbi5nZXQoKSwgVFJVRSk7CisgICAgZ19h
c3NlcnRfdHJ1ZSh3ZWJraXRfbmV0d29ya19zZXNzaW9uX2dldF9pdHBfZW5hYmxlZChzZXNzaW9u
LmdldCgpKSk7CisjZWxzZQogICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9zZXRfaXRw
X2VuYWJsZWQobWFuYWdlci5nZXQoKSwgVFJVRSk7Ci0gICAgZ19hc3NlcnQod2Via2l0X3dlYnNp
dGVfZGF0YV9tYW5hZ2VyX2dldF9pdHBfZW5hYmxlZChtYW5hZ2VyLmdldCgpKSk7CisgICAgZ19h
c3NlcnRfdHJ1ZSh3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2l0cF9lbmFibGVkKG1h
bmFnZXIuZ2V0KCkpKTsKKyNlbmRpZgogCiAgICAgLy8gTm9uIHBlcnNpc3RlbnQgZGF0YSBjYW4g
YmUgcXVlcmllZCBpbiBhbiBlcGhlbWVyYWwgbWFuYWdlci4KKyNpZiBFTkFCTEUoMjAyMl9HTElC
X0FQSSkKKyAgICBhdXRvIHdlYlZpZXcgPSBUZXN0OjphZG9wdFZpZXcoZ19vYmplY3RfbmV3KFdF
QktJVF9UWVBFX1dFQl9WSUVXLAorICAgICAgICAid2ViLWNvbnRleHQiLCB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2NvbnRleHQodGVzdC0+bV93ZWJWaWV3KSwKKyAgICAgICAgIm5ldHdvcmstc2Vzc2lv
biIsIHNlc3Npb24uZ2V0KCksCisgICAgICAgIG51bGxwdHIpKTsKKyAgICBnX2Fzc2VydF90cnVl
KHdlYmtpdF93ZWJfdmlld19nZXRfbmV0d29ya19zZXNzaW9uKHdlYlZpZXcuZ2V0KCkpID09IHNl
c3Npb24uZ2V0KCkpOworI2Vsc2UKICAgICBHUmVmUHRyPFdlYktpdFdlYkNvbnRleHQ+IHdlYkNv
bnRleHQgPSBhZG9wdEdSZWYod2Via2l0X3dlYl9jb250ZXh0X25ld193aXRoX3dlYnNpdGVfZGF0
YV9tYW5hZ2VyKG1hbmFnZXIuZ2V0KCkpKTsKICAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF93ZWJf
Y29udGV4dF9pc19lcGhlbWVyYWwod2ViQ29udGV4dC5nZXQoKSkpOwogICAgIGF1dG8gd2ViVmll
dyA9IFRlc3Q6OmFkb3B0VmlldyhUZXN0OjpjcmVhdGVXZWJWaWV3KHdlYkNvbnRleHQuZ2V0KCkp
KTsKICAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF93ZWJfdmlld19pc19lcGhlbWVyYWwod2ViVmll
dy5nZXQoKSkpOwogICAgIGdfYXNzZXJ0X3RydWUod2Via2l0X3dlYl92aWV3X2dldF93ZWJzaXRl
X2RhdGFfbWFuYWdlcih3ZWJWaWV3LmdldCgpKSA9PSBtYW5hZ2VyLmdldCgpKTsKKyNlbmRpZgog
CiAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LmdldCgpLCAibG9hZC1jaGFuZ2VkIiwgR19D
QUxMQkFDSyhlcGhlbWVyYWxWaWV3bG9hZENoYW5nZWQpLCB0ZXN0KTsKICAgICB3ZWJraXRfd2Vi
X3ZpZXdfbG9hZF91cmkod2ViVmlldy5nZXQoKSwga1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2Vt
cHR5IikuZGF0YSgpKTsKQEAgLTMyNSw3ICszNzIsMTEgQEAgc3RhdGljIHZvaWQgdGVzdFdlYnNp
dGVEYXRhRXBoZW1lcmFsKFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIH0s
IHRlc3QpOwogICAgIGdfbWFpbl9sb29wX3J1bih0ZXN0LT5tX21haW5Mb29wKTsKIAorI2lmIEVO
QUJMRSgyMDIyX0dMSUJfQVBJKQorICAgIHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fc2V0X2l0cF9l
bmFibGVkKHNlc3Npb24uZ2V0KCksIEZBTFNFKTsKKyNlbHNlCiAgICAgd2Via2l0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyX3NldF9pdHBfZW5hYmxlZChtYW5hZ2VyLmdldCgpLCBGQUxTRSk7CisjZW5k
aWYKIH0KIAogc3RhdGljIHZvaWQgdGVzdFdlYnNpdGVEYXRhQ2FjaGUoV2Vic2l0ZURhdGFUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQpAQCAtNjgyLDMxICs3MzMsMzcgQEAgc3RhdGljIHZvaWQg
dGVzdFdlYnNpdGVEYXRhRGV2aWNlSWRIYXNoU2FsdChXZWJzaXRlRGF0YVRlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIKICAgICB3ZWJraXRfc2V0dGluZ3Nfc2V0X2VuYWJsZV9tb2NrX2NhcHR1cmVf
ZGV2aWNlcyhzZXR0aW5ncywgZW5hYmxlZCk7CiB9CiAKLSNpZiAhRU5BQkxFKDIwMjJfR0xJQl9B
UEkpCiBzdGF0aWMgdm9pZCB0ZXN0V2Vic2l0ZURhdGFJVFAoV2Vic2l0ZURhdGFUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQogewotICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JF
R0lOCi0gICAgY29uc3QgY2hhciogaXRwRGlyZWN0b3J5ID0gd2Via2l0X3dlYnNpdGVfZGF0YV9t
YW5hZ2VyX2dldF9pdHBfZGlyZWN0b3J5KHRlc3QtPm1fbWFuYWdlcik7Ci0gICAgQUxMT1dfREVQ
UkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECi0gICAgR1VuaXF1ZVB0cjxjaGFyPiBpdHBEYXRhYmFz
ZUZpbGUoZ19idWlsZF9maWxlbmFtZShpdHBEaXJlY3RvcnksICJvYnNlcnZhdGlvbnMuZGIiLCBu
dWxscHRyKSk7CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBpdHBEaXJlY3RvcnkoZ19idWlsZF9maWxl
bmFtZShUZXN0OjpkYXRhRGlyZWN0b3J5KCksICJpdHAiLCBudWxscHRyKSk7CisgICAgR1VuaXF1
ZVB0cjxjaGFyPiBpdHBEYXRhYmFzZUZpbGUoZ19idWlsZF9maWxlbmFtZShpdHBEaXJlY3Rvcnku
Z2V0KCksICJvYnNlcnZhdGlvbnMuZGIiLCBudWxscHRyKSk7CiAKICAgICAvLyBEZWxldGUgYW55
IHByZXZpb3VzIGRhdGEuCiAgICAgZ191bmxpbmsoaXRwRGF0YWJhc2VGaWxlLmdldCgpKTsKLSAg
ICBnX3JtZGlyKGl0cERpcmVjdG9yeSk7CisgICAgZ19ybWRpcihpdHBEaXJlY3RvcnkuZ2V0KCkp
OwogCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0
X25ldHdvcmtfc2Vzc2lvbl9nZXRfaXRwX2VuYWJsZWQodGVzdC0+bV9uZXR3b3JrU2Vzc2lvbi5n
ZXQoKSkpOworI2Vsc2UKICAgICBnX2Fzc2VydF9mYWxzZSh3ZWJraXRfd2Vic2l0ZV9kYXRhX21h
bmFnZXJfZ2V0X2l0cF9lbmFibGVkKHRlc3QtPm1fbWFuYWdlcikpOworI2VuZGlmCiAgICAgdGVz
dC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZW1wdHkiKS5kYXRhKCkpOwogICAg
IHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwogCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9B
UEkpCisgICAgd2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfaXRwX2VuYWJsZWQodGVzdC0+bV9u
ZXR3b3JrU2Vzc2lvbi5nZXQoKSwgVFJVRSk7CisgICAgZ19hc3NlcnRfdHJ1ZSh3ZWJraXRfbmV0
d29ya19zZXNzaW9uX2dldF9pdHBfZW5hYmxlZCh0ZXN0LT5tX25ldHdvcmtTZXNzaW9uLmdldCgp
KSk7CisjZWxzZQogICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9zZXRfaXRwX2VuYWJs
ZWQodGVzdC0+bV9tYW5hZ2VyLCBUUlVFKTsKICAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF93ZWJz
aXRlX2RhdGFfbWFuYWdlcl9nZXRfaXRwX2VuYWJsZWQodGVzdC0+bV9tYW5hZ2VyKSk7Ci0gICAg
Z19hc3NlcnRfZmFsc2UoZ19maWxlX3Rlc3QoaXRwRGlyZWN0b3J5LCBHX0ZJTEVfVEVTVF9JU19E
SVIpKTsKKyNlbmRpZgorICAgIGdfYXNzZXJ0X2ZhbHNlKGdfZmlsZV90ZXN0KGl0cERpcmVjdG9y
eS5nZXQoKSwgR19GSUxFX1RFU1RfSVNfRElSKSk7CiAgICAgZ19hc3NlcnRfZmFsc2UoZ19maWxl
X3Rlc3QoaXRwRGF0YWJhc2VGaWxlLmdldCgpLCBHX0ZJTEVfVEVTVF9JU19SRUdVTEFSKSk7CiAK
ICAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9lbXB0eSIpLmRhdGEo
KSk7CiAgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CiAgICAgdGVzdC0+YXNzZXJ0
RmlsZUlzQ3JlYXRlZChpdHBEYXRhYmFzZUZpbGUuZ2V0KCkpOwotICAgIGdfYXNzZXJ0X3RydWUo
Z19maWxlX3Rlc3QoaXRwRGlyZWN0b3J5LCBHX0ZJTEVfVEVTVF9JU19ESVIpKTsKKyAgICBnX2Fz
c2VydF90cnVlKGdfZmlsZV90ZXN0KGl0cERpcmVjdG9yeS5nZXQoKSwgR19GSUxFX1RFU1RfSVNf
RElSKSk7CiAgICAgZ19hc3NlcnRfdHJ1ZShnX2ZpbGVfdGVzdChpdHBEYXRhYmFzZUZpbGUuZ2V0
KCksIEdfRklMRV9URVNUX0lTX1JFR1VMQVIpKTsKIAogICAgIC8vIEdpdmUgc29tZSB0aW1lIGZv
ciB0aGUgZGF0YWJhc2UgdG8gYmUgdXBkYXRlZC4KQEAgLTczMSwxMiArNzg4LDE2IEBAIHN0YXRp
YyB2b2lkIHRlc3RXZWJzaXRlRGF0YUlUUChXZWJzaXRlRGF0YVRlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCiAgICAgc3RhdGljIGNvbnN0IFdlYktpdFdlYnNpdGVEYXRhVHlwZXMgY2FjaGVBbmRJ
VFAgPSBzdGF0aWNfY2FzdDxXZWJLaXRXZWJzaXRlRGF0YVR5cGVzPihXRUJLSVRfV0VCU0lURV9E
QVRBX0lUUCB8IFdFQktJVF9XRUJTSVRFX0RBVEFfTUVNT1JZX0NBQ0hFIHwgV0VCS0lUX1dFQlNJ
VEVfREFUQV9ESVNLX0NBQ0hFKTsKICAgICB0ZXN0LT5jbGVhcihjYWNoZUFuZElUUCwgMCk7CiAK
KyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICB3ZWJraXRfbmV0d29ya19zZXNzaW9uX3Nl
dF9pdHBfZW5hYmxlZCh0ZXN0LT5tX25ldHdvcmtTZXNzaW9uLmdldCgpLCBGQUxTRSk7CisgICAg
Z19hc3NlcnRfZmFsc2Uod2Via2l0X25ldHdvcmtfc2Vzc2lvbl9nZXRfaXRwX2VuYWJsZWQodGVz
dC0+bV9uZXR3b3JrU2Vzc2lvbi5nZXQoKSkpOworI2Vsc2UKICAgICB3ZWJraXRfd2Vic2l0ZV9k
YXRhX21hbmFnZXJfc2V0X2l0cF9lbmFibGVkKHRlc3QtPm1fbWFuYWdlciwgRkFMU0UpOwogICAg
IGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfaXRwX2VuYWJs
ZWQodGVzdC0+bV9tYW5hZ2VyKSk7CisjZW5kaWYKIAotICAgIGdfcm1kaXIoaXRwRGlyZWN0b3J5
KTsKKyAgICBnX3JtZGlyKGl0cERpcmVjdG9yeS5nZXQoKSk7CiB9Ci0jZW5kaWYKIAogc3RhdGlj
IHZvaWQgdGVzdFdlYnNpdGVEYXRhU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbnMoV2Vic2l0ZURh
dGFUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogewpAQCAtODE0LDEzICs4NzUsMjEgQEAgcHVi
bGljOgogICAgICAgICB3ZWJraXRfbWVtb3J5X3ByZXNzdXJlX3NldHRpbmdzX3NldF9raWxsX3Ro
cmVzaG9sZChzZXR0aW5ncywgMSk7CiAgICAgICAgIHdlYmtpdF9tZW1vcnlfcHJlc3N1cmVfc2V0
dGluZ3Nfc2V0X3N0cmljdF90aHJlc2hvbGQoc2V0dGluZ3MsIDAuNzUpOwogICAgICAgICB3ZWJr
aXRfbWVtb3J5X3ByZXNzdXJlX3NldHRpbmdzX3NldF9jb25zZXJ2YXRpdmVfdGhyZXNob2xkKHNl
dHRpbmdzLCAwLjUpOworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgICAgICB3ZWJraXRf
bmV0d29ya19zZXNzaW9uX3NldF9tZW1vcnlfcHJlc3N1cmVfc2V0dGluZ3Moc2V0dGluZ3MpOwor
I2Vsc2UKICAgICAgICAgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX3NldF9tZW1vcnlfcHJl
c3N1cmVfc2V0dGluZ3Moc2V0dGluZ3MpOworI2VuZGlmCiAgICAgICAgIHdlYmtpdF9tZW1vcnlf
cHJlc3N1cmVfc2V0dGluZ3NfZnJlZShzZXR0aW5ncyk7CiAgICAgfQogCiAgICAgc3RhdGljIHZv
aWQgdGVhcmRvd24oKQogICAgIHsKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICAgICAg
d2Via2l0X25ldHdvcmtfc2Vzc2lvbl9zZXRfbWVtb3J5X3ByZXNzdXJlX3NldHRpbmdzKG51bGxw
dHIpOworI2Vsc2UKICAgICAgICAgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX3NldF9tZW1v
cnlfcHJlc3N1cmVfc2V0dGluZ3MobnVsbHB0cik7CisjZW5kaWYKICAgICB9CiAKICAgICBzdGF0
aWMgZ2Jvb2xlYW4gbG9hZEZhaWxlZENhbGxiYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdl
YktpdExvYWRFdmVudCBsb2FkRXZlbnQsIGNvbnN0IGNoYXIqIGZhaWxpbmdVUkksIEdFcnJvciog
ZXJyb3IsIE1lbW9yeVByZXNzdXJlVGVzdCogdGVzdCkKQEAgLTg1OSw5ICs5MjgsNyBAQCB2b2lk
IGJlZm9yZUFsbCgpCiAgICAgcHJlcG9wdWxhdGVIc3RzRGF0YSgpOwogI2VuZGlmCiAKLSNpZiAh
RU5BQkxFKDIwMjJfR0xJQl9BUEkpCiAgICAgV2Vic2l0ZURhdGFUZXN0OjphZGQoIldlYktpdFdl
YnNpdGVEYXRhIiwgImNvbmZpZ3VyYXRpb24iLCB0ZXN0V2Vic2l0ZURhdGFDb25maWd1cmF0aW9u
KTsKLSNlbmRpZgogICAgIFdlYlZpZXdUZXN0OjphZGQoIldlYktpdFdlYnNpdGVEYXRhIiwgImVw
aGVtZXJhbCIsIHRlc3RXZWJzaXRlRGF0YUVwaGVtZXJhbCk7CiAgICAgV2Vic2l0ZURhdGFUZXN0
OjphZGQoIldlYktpdFdlYnNpdGVEYXRhIiwgImNhY2hlIiwgdGVzdFdlYnNpdGVEYXRhQ2FjaGUp
OwogICAgIFdlYnNpdGVEYXRhVGVzdDo6YWRkKCJXZWJLaXRXZWJzaXRlRGF0YSIsICJzdG9yYWdl
IiwgdGVzdFdlYnNpdGVEYXRhU3RvcmFnZSk7CkBAIC04NzIsMTAgKzkzOSw3IEBAIHZvaWQgYmVm
b3JlQWxsKCkKICAgICBXZWJzaXRlRGF0YVRlc3Q6OmFkZCgiV2ViS2l0V2Vic2l0ZURhdGEiLCAi
aHN0cyIsIHRlc3RXZWJzaXRlRGF0YUhzdHMpOwogI2VuZGlmCiAgICAgV2Vic2l0ZURhdGFUZXN0
OjphZGQoIldlYktpdFdlYnNpdGVEYXRhIiwgImRldmljZWlkaGFzaHNhbHQiLCB0ZXN0V2Vic2l0
ZURhdGFEZXZpY2VJZEhhc2hTYWx0KTsKLSNpZiAhRU5BQkxFKDIwMjJfR0xJQl9BUEkpCi0gICAg
Ly8gRklYTUU6IGZpbmQgYSB3YXkgdG8gdGVzdCB0aGlzIHdpdGhvdXQgZGVwcmVjYXRlZCBBUEku
CiAgICAgV2Vic2l0ZURhdGFUZXN0OjphZGQoIldlYktpdFdlYnNpdGVEYXRhIiwgIml0cCIsIHRl
c3RXZWJzaXRlRGF0YUlUUCk7Ci0jZW5kaWYKICAgICBXZWJzaXRlRGF0YVRlc3Q6OmFkZCgiV2Vi
S2l0V2Vic2l0ZURhdGEiLCAic2VydmljZS13b3JrZXItcmVnaXN0cmF0aW9ucyIsIHRlc3RXZWJz
aXRlRGF0YVNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25zKTsKICAgICBXZWJzaXRlRGF0YVRlc3Q6
OmFkZCgiV2ViS2l0V2Vic2l0ZURhdGEiLCAiZG9tLWNhY2hlIiwgdGVzdFdlYnNpdGVEYXRhRE9N
Q2FjaGUpOwogICAgIE1lbW9yeVByZXNzdXJlVGVzdDo6YWRkKCJXZWJLaXRXZWJzaXRlRGF0YSIs
ICJtZW1vcnktcHJlc3N1cmUiLCB0ZXN0TWVtb3J5UHJlc3N1cmVTZXR0aW5ncyk7CmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0QXV0b2NsZWFudXBz
LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL1Rlc3RBdXRvY2xlYW51
cHMuY3BwCmluZGV4IDQyMDUwNWY0ZTI0ZS4uZGNjNGRmOWI0MDkxIDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0QXV0b2NsZWFudXBzLmNwcAorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0QXV0b2NsZWFudXBzLmNw
cApAQCAtMzYsOSArMzYsMTUgQEAgc3RhdGljIHZvaWQgdGVzdFVJUHJvY2Vzc0F1dG9jbGVhbnVw
cyhXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICBnX2Fzc2VydF90cnVlKFdF
QktJVF9JU19XRUJfQ09OVEVYVChjb250ZXh0KSk7CiAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNE
ZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChjb250ZXh0KSk7CiAKKyNpZiBFTkFCTEUo
MjAyMl9HTElCX0FQSSkKKyAgICBnX2F1dG9wdHIoV2ViS2l0TmV0d29ya1Nlc3Npb24pIHNlc3Np
b24gPSB3ZWJraXRfbmV0d29ya19zZXNzaW9uX25ldyhudWxscHRyLCBudWxscHRyKTsKKyAgICBn
X2Fzc2VydF90cnVlKFdFQktJVF9JU19ORVRXT1JLX1NFU1NJT04oc2Vzc2lvbikpOworICAgIHRl
c3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1Qoc2Vzc2lv
bikpOworI2Vsc2UKICAgICBnX2F1dG9wdHIoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKSBtYW5h
Z2VyID0gd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX25ldyhudWxscHRyKTsKICAgICBnX2Fz
c2VydF90cnVlKFdFQktJVF9JU19XRUJTSVRFX0RBVEFfTUFOQUdFUihtYW5hZ2VyKSk7Ci0gICAg
dGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChjb250
ZXh0KSk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhH
X09CSkVDVChtYW5hZ2VyKSk7CisjZW5kaWYKIAogICAgIGdfYXV0b3B0cihXZWJLaXRVc2VyU2Ny
aXB0KSB1c2VyU2NyaXB0ID0gd2Via2l0X3VzZXJfc2NyaXB0X25ldygiIiwKICAgICAgICAgV0VC
S0lUX1VTRVJfQ09OVEVOVF9JTkpFQ1RfQUxMX0ZSQU1FUywgV0VCS0lUX1VTRVJfU0NSSVBUX0lO
SkVDVF9BVF9ET0NVTUVOVF9TVEFSVCwKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
Z2xpYi9DTWFrZUxpc3RzLnR4dCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ2xpYi9DTWFrZUxpc3Rz
LnR4dAppbmRleCAwOTU3ZGRlNzkzNjEuLmQzN2ZkYTQyZTFlNyAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9nbGliL0NNYWtlTGlzdHMudHh0CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvZ2xpYi9DTWFrZUxpc3RzLnR4dApAQCAtMTQ0LDYgKzE0NCw3IEBAIEFERF9XSzJfVEVTVF9X
RUJfRVhURU5TSU9OKFdlYlByb2Nlc3NUZXN0ICR7V2ViS2l0R0xpYkFQSVdlYlByb2Nlc3NUZXN0
c30pCiBBRERfV0syX1RFU1QoVGVzdEF1dGhlbnRpY2F0aW9uICR7VE9PTFNfRElSfS9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdEF1dGhlbnRpY2F0aW9uLmNwcCkKIEFERF9XSzJf
VEVTVChUZXN0QXV0b21hdGlvblNlc3Npb24gJHtUT09MU19ESVJ9L1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0R0xpYi9UZXN0QXV0b21hdGlvblNlc3Npb24uY3BwKQogQUREX1dLMl9URVNUKFRl
c3RCYWNrRm9yd2FyZExpc3QgJHtUT09MU19ESVJ9L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
R0xpYi9UZXN0QmFja0ZvcndhcmRMaXN0LmNwcCkKK0FERF9XSzJfVEVTVChUZXN0Q29va2llTWFu
YWdlciAke1RPT0xTX0RJUn0vVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RDb29r
aWVNYW5hZ2VyLmNwcCkKIEFERF9XSzJfVEVTVChUZXN0RG93bmxvYWRzICR7VE9PTFNfRElSfS9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdERvd25sb2Fkcy5jcHApCiBBRERfV0sy
X1RFU1QoVGVzdFdlYktpdEZpbmRDb250cm9sbGVyICR7VE9PTFNfRElSfS9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdEdMaWIvVGVzdFdlYktpdEZpbmRDb250cm9sbGVyLmNwcCkKIEFERF9XSzJf
VEVTVChUZXN0RWRpdG9yICR7VE9PTFNfRElSfS9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdM
aWIvVGVzdEVkaXRvci5jcHApCkBAIC0xNjgsOSArMTY5LDggQEAgQUREX1dLMl9URVNUKFRlc3RE
T01FbGVtZW50ICR7VE9PTFNfRElSfS9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVz
dERPTUUKIEFERF9XSzJfVEVTVChUZXN0R2VvbG9jYXRpb25NYW5hZ2VyICR7VE9PTFNfRElSfS9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdEdlb2xvY2F0aW9uTWFuYWdlci5jcHAp
CiBBRERfV0syX1RFU1QoVGVzdElucHV0TWV0aG9kQ29udGV4dCAke1RPT0xTX0RJUn0vVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RJbnB1dE1ldGhvZENvbnRleHQuY3BwKQogCi0j
IEZJWE1FOiBFbmFibGUgZm9yIFdQRSBhbmQgR1RLNAotaWYgKFBPUlQgU1RSRVFVQUwgIkdUSyIg
QU5EIE5PVCBVU0VfR1RLNCkKLSAgICBBRERfV0syX1RFU1QoVGVzdENvb2tpZU1hbmFnZXIgJHtU
T09MU19ESVJ9L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0Q29va2llTWFuYWdl
ci5jcHApCitpZiAoRU5BQkxFXzIwMjJfR0xJQl9BUEkpCisgICAgQUREX1dLMl9URVNUKFRlc3RX
ZWJLaXROZXR3b3JrU2Vzc2lvbiAke1RPT0xTX0RJUn0vVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRHTGliL1Rlc3RXZWJLaXROZXR3b3JrU2Vzc2lvbi5jcHApCiBlbmRpZiAoKQogCiBtYWNybyhB
RERfV1BFX1FUX1RFU1QgdGVzdF9uYW1lKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9nbGliL1dlYktpdEdMaWIvVGVzdE1haW4uY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9nbGli
L1dlYktpdEdMaWIvVGVzdE1haW4uY3BwCmluZGV4IDM5NzQxNzQ2YTc1Ni4uYTBjMGI1M2JkNGQ1
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2dsaWIvV2ViS2l0R0xpYi9UZXN0TWFp
bi5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9nbGliL1dlYktpdEdMaWIvVGVzdE1haW4u
Y3BwCkBAIC0xMjcsNiArMTI3LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQog
ICAgIGdfc2V0X3ByZ25hbWUoRmlsZVN5c3RlbTo6Y3VycmVudEV4ZWN1dGFibGVOYW1lKCkuZGF0
YSgpKTsKICAgICBnX3NldGVudigiV0VCS0lUX0VYRUNfUEFUSCIsIFdFQktJVF9FWEVDX1BBVEgs
IEZBTFNFKTsKICAgICBnX3NldGVudigiV0VCS0lUX0lOSkVDVEVEX0JVTkRMRV9QQVRIIiwgV0VC
S0lUX0lOSkVDVEVEX0JVTkRMRV9QQVRILCBGQUxTRSk7CisgICAgLy8gU2FuZGJveCByZXF1aXJl
cyB1c2luZyBHQXBwbGljYXRpb24uCisgICAgZ19zZXRlbnYoIldFQktJVF9ESVNBQkxFX1NBTkRC
T1hfVEhJU19JU19EQU5HRVJPVVMiLCAiMSIsIFRSVUUpOwogICAgIGdfc2V0ZW52KCJMQ19BTEwi
LCAiQyIsIFRSVUUpOwogICAgIGdfc2V0ZW52KCJHSU9fVVNFX1ZGUyIsICJsb2NhbCIsIFRSVUUp
OwogICAgIGdfc2V0ZW52KCJHU0VUVElOR1NfQkFDS0VORCIsICJtZW1vcnkiLCBUUlVFKTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ2xpYi9XZWJLaXRHTGliL1Rlc3RNYWluLmgg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL2dsaWIvV2ViS2l0R0xpYi9UZXN0TWFpbi5oCmluZGV4IDBj
ZWJhMGRjNGQ1My4uYjBiZjNiMmEyZWYwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L2dsaWIvV2ViS2l0R0xpYi9UZXN0TWFpbi5oCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ2xp
Yi9XZWJLaXRHTGliL1Rlc3RNYWluLmgKQEAgLTEyMCw2ICsxMjAsMTIgQEAgcHVibGljOgogCiAg
ICAgVGVzdCgpCiAgICAgeworI2lmIEVOQUJMRSgyMDIyX0dMSUJfQVBJKQorICAgICAgICBtX25l
dHdvcmtTZXNzaW9uID0gYWRvcHRHUmVmKHdlYmtpdF9uZXR3b3JrX3Nlc3Npb25fbmV3KGRhdGFE
aXJlY3RvcnkoKSwgZGF0YURpcmVjdG9yeSgpKSk7CisgICAgICAgIGFzc2VydE9iamVjdElzRGVs
ZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QobV9uZXR3b3JrU2Vzc2lvbi5nZXQoKSkpOwor
CisgICAgICAgIG1fd2ViQ29udGV4dCA9IGFkb3B0R1JlZihXRUJLSVRfV0VCX0NPTlRFWFQoZ19v
YmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9DT05URVhULCAibWVtb3J5LXByZXNzdXJlLXNldHRp
bmdzIiwgc19tZW1vcnlQcmVzc3VyZVNldHRpbmdzLCBudWxscHRyKSkpOworI2Vsc2UKICAgICAg
ICAgR1JlZlB0cjxXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXI+IHdlYnNpdGVEYXRhTWFuYWdlciA9
IGFkb3B0R1JlZih3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfbmV3KAogICAgICAgICAgICAg
ImJhc2UtZGF0YS1kaXJlY3RvcnkiLCBkYXRhRGlyZWN0b3J5KCksCiAgICAgICAgICAgICAiYmFz
ZS1jYWNoZS1kaXJlY3RvcnkiLCBkYXRhRGlyZWN0b3J5KCksCkBAIC0xMjcsMTIgKzEzMywxMyBA
QCBwdWJsaWM6CiAKICAgICAgICAgbV93ZWJDb250ZXh0ID0gYWRvcHRHUmVmKFdFQktJVF9XRUJf
Q09OVEVYVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX0NPTlRFWFQsCiAgICAgICAgICAg
ICAid2Vic2l0ZS1kYXRhLW1hbmFnZXIiLCB3ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCksCi0jaWYg
UExBVEZPUk0oR1RLKSAmJiAhVVNFKEdUSzQpCisjaWYgUExBVEZPUk0oR1RLKQogICAgICAgICAg
ICAgInByb2Nlc3Mtc3dhcC1vbi1jcm9zcy1zaXRlLW5hdmlnYXRpb24tZW5hYmxlZCIsIFRSVUUs
CiAgICAgICAgICAgICAidXNlLXN5c3RlbS1hcHBlYXJhbmNlLWZvci1zY3JvbGxiYXJzIiwgRkFM
U0UsCiAjZW5kaWYKICAgICAgICAgICAgICJtZW1vcnktcHJlc3N1cmUtc2V0dGluZ3MiLCBzX21l
bW9yeVByZXNzdXJlU2V0dGluZ3MsCiAgICAgICAgICAgICBudWxscHRyKSkpOworI2VuZGlmCiAg
ICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QobV93
ZWJDb250ZXh0LmdldCgpKSk7CiAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJDb250ZXh0
LmdldCgpLCAiaW5pdGlhbGl6ZS13ZWItZXh0ZW5zaW9ucyIsIEdfQ0FMTEJBQ0soaW5pdGlhbGl6
ZVdlYkV4dGVuc2lvbnNDYWxsYmFjayksIHRoaXMpOwogICAgIH0KQEAgLTE0MSw2ICsxNDgsOSBA
QCBwdWJsaWM6CiAgICAgewogICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21h
dGNoZWQobV93ZWJDb250ZXh0LmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCBudWxs
cHRyLCBudWxscHRyLCB0aGlzKTsKICAgICAgICAgbV93ZWJDb250ZXh0ID0gbnVsbHB0cjsKKyNp
ZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICAgICAgbV9uZXR3b3JrU2Vzc2lvbiA9IG51bGxw
dHI7CisjZW5kaWYKICAgICAgICAgaWYgKG1fd2F0Y2hlZE9iamVjdHMuaXNFbXB0eSgpKQogICAg
ICAgICAgICAgcmV0dXJuOwogCkBAIC0yNzksNiArMjg5LDkgQEAgcHVibGljOgogCiAgICAgSGFz
aFNldDxHT2JqZWN0Kj4gbV93YXRjaGVkT2JqZWN0czsKICAgICBHUmVmUHRyPFdlYktpdFdlYkNv
bnRleHQ+IG1fd2ViQ29udGV4dDsKKyNpZiBFTkFCTEUoMjAyMl9HTElCX0FQSSkKKyAgICBHUmVm
UHRyPFdlYktpdE5ldHdvcmtTZXNzaW9uPiBtX25ldHdvcmtTZXNzaW9uOworI2VuZGlmCiAgICAg
c3RhdGljIEdSZWZQdHI8R0RCdXNTZXJ2ZXI+IHNfZGJ1c1NlcnZlcjsKICAgICBzdGF0aWMgVmVj
dG9yPEdSZWZQdHI8R0RCdXNDb25uZWN0aW9uPj4gc19kYnVzQ29ubmVjdGlvbnM7CiAgICAgc3Rh
dGljIEhhc2hNYXA8dWludDY0X3QsIEdEQnVzQ29ubmVjdGlvbio+IHNfZGJ1c0Nvbm5lY3Rpb25Q
YWdlTWFwOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9nbGliL1dlYktpdEdMaWIv
V2ViVmlld1Rlc3QuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9nbGliL1dlYktpdEdMaWIvV2Vi
Vmlld1Rlc3QuY3BwCmluZGV4IGVmMjIzNzlhMWE2ZC4uYWI3ZGJhNTRkZmE3IDEwMDY0NAotLS0g
YS9Ub29scy9UZXN0V2ViS2l0QVBJL2dsaWIvV2ViS2l0R0xpYi9XZWJWaWV3VGVzdC5jcHAKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9nbGliL1dlYktpdEdMaWIvV2ViVmlld1Rlc3QuY3BwCkBA
IC01MiwxMyArNTIsMjEgQEAgdm9pZCBXZWJWaWV3VGVzdDo6aW5pdGlhbGl6ZVdlYlZpZXcoKQog
ewogICAgIGdfYXNzZXJ0X251bGwobV93ZWJWaWV3KTsKIAorI2lmIEVOQUJMRSgyMDIyX0dMSUJf
QVBJKQorICAgIEdSZWZQdHI8V2ViS2l0TmV0d29ya1Nlc3Npb24+IG5ldHdvcmtTZXNzaW9uID0g
c2hvdWxkQ3JlYXRlRXBoZW1lcmFsV2ViVmlldyA/IGFkb3B0R1JlZih3ZWJraXRfbmV0d29ya19z
ZXNzaW9uX25ld19lcGhlbWVyYWwoKSkgOiBtX25ldHdvcmtTZXNzaW9uOworI2VuZGlmCisKICAg
ICBtX3dlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dF
Ql9WSUVXLAogI2lmIFBMQVRGT1JNKFdQRSkKICAgICAgICAgImJhY2tlbmQiLCBUZXN0OjpjcmVh
dGVXZWJWaWV3QmFja2VuZCgpLAogI2VuZGlmCiAgICAgICAgICJ3ZWItY29udGV4dCIsIG1fd2Vi
Q29udGV4dC5nZXQoKSwKICAgICAgICAgInVzZXItY29udGVudC1tYW5hZ2VyIiwgbV91c2VyQ29u
dGVudE1hbmFnZXIuZ2V0KCksCisjaWYgRU5BQkxFKDIwMjJfR0xJQl9BUEkpCisgICAgICAgICJu
ZXR3b3JrLXNlc3Npb24iLCBuZXR3b3JrU2Vzc2lvbi5nZXQoKSwKKyNlbHNlCiAgICAgICAgICJp
cy1lcGhlbWVyYWwiLCBzaG91bGRDcmVhdGVFcGhlbWVyYWxXZWJWaWV3LAorI2VuZGlmCiAgICAg
ICAgIG51bGxwdHIpKTsKIAogICAgIHBsYXRmb3JtSW5pdGlhbGl6ZVdlYlZpZXcoKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>