<?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>44261</bug_id>
          
          <creation_ts>2010-08-19 07:19:40 -0700</creation_ts>
          <short_desc>[GTK] Add HTTP caching support</short_desc>
          <delta_ts>2010-10-14 11:37:31 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>47547</dependson>
          <blocked>29299</blocked>
    
    <blocked>44158</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Sergio Villar Senin">svillar</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>alex</cc>
    
    <cc>a.renevier</cc>
    
    <cc>commit-queue</cc>
    
    <cc>danw</cc>
    
    <cc>gustavo</cc>
    
    <cc>hayato</cc>
    
    <cc>l.slachciak</cc>
    
    <cc>mpakulavelrutka</cc>
    
    <cc>mrobinson</cc>
    
    <cc>rawatgg</cc>
    
    <cc>rniwa</cc>
    
    <cc>svillar</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>266717</commentid>
    <comment_count>0</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-08-19 07:19:40 -0700</bug_when>
    <thetext>This bug comes from https://bugzilla.gnome.org/show_bug.cgi?id=523100.

Summarizing, a cache for libsoup was implemented using the SoupURILoader stuff that is under development. Dan Winship considered that the SoupURILoader stuff is not ready for trunk https://bugzilla.gnome.org/show_bug.cgi?id=523100#c27. That&apos;s why he suggested to move all the cache stuff to webkitgtk while the libsoup stuff does not land upstream. Since now it&apos;s purely a webkitgtk+ issue it&apos;s better to manage it here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266721</commentid>
    <comment_count>1</comment_count>
      <attachid>64849</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-08-19 07:35:29 -0700</bug_when>
    <thetext>Created attachment 64849
HTTP cache for WebKitGtk+

Basically this patch is made of:

   * changes to ResourceHandleSoup already reviewed in bug 40222
   * libsoup&apos;s URI loader code discussed here https://bugzilla.gnome.org/show_bug.cgi?id=557777
   * caching support https://bugzilla.gnome.org/show_bug.cgi?id=523100

Once applied to current trunk all the tests work fine except these two:
   * http/test/history/back-to-post.php: recently changed by http://trac.webkit.org/changeset/65340. Need to review what happens
   * fast/encoding/percent-escaping.html: as stated here https://bugzilla.gnome.org/show_bug.cgi?id=523100#c28 it needs some changes in libsoup to work properly, as libsoup incorrectly escapes file URL&apos;s with &apos;%&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266854</commentid>
    <comment_count>2</comment_count>
      <attachid>64849</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-08-19 11:28:10 -0700</bug_when>
    <thetext>Comment on attachment 64849
HTTP cache for WebKitGtk+

This patch is huge! I&apos;d really like to see it split up into at least
two parts.

1. The code drop from Soup, which should probably be separated somehow from
the rest of our source, so we can treat it specially (it will go away eventually, right?).
2. The bits that actually implement the cache in WebCore/WebKit.

That being said, I have a few comments on what I presume to be the second part.

&gt; +        GRefPtr&lt;WebKitSoupRequest&gt; m_req;
&gt; +	GRefPtr&lt;WebKitSoupRequester&gt; m_requester;

Please do not abbreviate member names. This could be m_request or, heck,
even m_soupRequest. Someone new will look at the code and know exactly what it is.
The indentation is a little funky here as well.

&gt;  #include &quot;SharedBuffer.h&quot;
&gt;  #include &quot;TextEncoding.h&quot;
&gt;  
&gt; +#include &quot;webkitsouprequesthttp.h&quot;
&gt; +
&gt;  #include &lt;errno.h&gt;
&gt;  #include &lt;fcntl.h&gt;
&gt;  #include &lt;gio/gio.h&gt;

Just remove all spaces in the list of includes per the style guidelines. There is
no need to separate them by include style.

&gt; +    if (m_req) {
&gt; +        g_object_set_data(G_OBJECT(m_req.get()), &quot;webkit-resource&quot;, 0);
&gt; +        m_req.clear();

There&apos;s no chance that this may be the last reference to m_req here?

&gt; +    GOwnPtr&lt;char&gt; uri(soup_uri_to_string(soup_message_get_uri(msg), false));
&gt; +    String location = String(uri.get());

Even though URL are generally URL-encoded, I don&apos;t know if we can rely on that
here. You should use String::fromUTF8.

&gt; +#define BUFFER_SIZE 8192

Why not move this to the top and make the name more descriptive?
INPUT_STREAM_BUFFER_SIZE or something like that.

&gt; +    GInputStream* in = webkitSoupRequestSend(d-&gt;m_req.get(), 0, &amp;error.outPtr());

This should be a full-blown variable name like inputStream.

&gt; -    d-&gt;m_idleHandler = g_timeout_add(0, parseDataUrl, handle);
&gt; +    d-&gt;m_idleHandler = g_idle_add(parseDataUrl, handle);

Why did you switch this to an idle? I think Gustavo is trying to move
away from that because they are often starved. Maybe ping him about this.

&gt;      g_object_set(session,
&gt;                   SOUP_SESSION_MAX_CONNS, MAX_CONNECTIONS,
&gt;                   SOUP_SESSION_MAX_CONNS_PER_HOST, MAX_CONNECTIONS_PER_HOST,
&gt; -                 NULL);
&gt; +                 0);

The style bot should not complain about this, because the missing NULL causes
a compiler warning. Please just use NULL here.

&gt; +
&gt; +    if (d-&gt;m_cancellable) {
&gt; +        g_object_unref(d-&gt;m_cancellable);
&gt; +        d-&gt;m_cancellable = 0;
&gt; +    }

m_cancellable can probably be a GRefPtr in another patch.

&gt; +    if (d-&gt;m_inputStream) {
&gt; +        g_object_set_data(G_OBJECT(d-&gt;m_inputStream), &quot;webkit-resource&quot;, 0);
&gt; +        g_object_unref(d-&gt;m_inputStream);
&gt; +        d-&gt;m_inputStream = 0;
&gt; +    }

Ditto for m_inputStream.

&gt; +
&gt; +    if (d-&gt;m_buffer) {
&gt; +        g_free(d-&gt;m_buffer);
&gt; +        d-&gt;m_buffer = 0;
&gt; +    }

Ditto for m_buffer, except GOwnPtr.

&gt; +    GInputStream* in = webkitSoupRequestSendFinish(d-&gt;m_req.get(), res, &amp;error.outPtr());

inputStream again. :)

&gt; +
&gt; +    if (error) {
&gt; +        if (d-&gt;m_msg &amp;&amp; SOUP_STATUS_IS_TRANSPORT_ERROR(d-&gt;m_msg-&gt;status_code)) {
&gt; +            SoupURI* uri = webkitSoupRequestGetUri(d-&gt;m_req.get());
&gt; +            GOwnPtr&lt;char&gt; uriStr(soup_uri_to_string(uri, false));

No need to abbreviate the variable name here. uriString is fine.

&gt;  
&gt; -    // Used to set the authentication dialog toplevel; may be NULL
&gt; +    // Used to set the authentication dialog toplevel; may be 0

I think &quot;null&quot; here is clearer and probably won&apos;t upset the style gods.

&gt; +        // We have to convert it to UTF-16 due to limitations in KURL
&gt; +        GOwnPtr&lt;gunichar2&gt; unicodeStr(g_utf8_to_utf16(d-&gt;m_buffer, bytesRead, 0, 0, 0));
&gt; +        client-&gt;didReceiveData(handle.get(), reinterpret_cast&lt;const char*&gt;(unicodeStr.get()), g_utf8_strlen(d-&gt;m_buffer, bytesRead) * sizeof(UChar), 0);

Okay, again this is kind of a nit, but unicodeStr is not entirely precise. It should
probably be utf16String.  g_utf8_strlen(d-&gt;m_buffer, bytesRead) * sizeof(UChar) seems
unsafe against encoding errors and is a little clunky. I think it&apos;s better to do something
like this:

    long wordsWritten;
    GOwnPtr&lt;gunichar2&gt; utf16String(g_utf8_to_utf16(d-&gt;m_buffer, bytesRead, 0, &amp;wordsWritten, 0));
    client-&gt;didReceiveData(handle.get(), reinterpret_cast&lt;const char*&gt;(utf16String()), wordsWritten * sizeof(UChar), 0);

&gt; +    g_object_set(soupMessage, SOUP_MESSAGE_METHOD, httpMethod().utf8().data(), 0);

NULL here instead of 0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267173</commentid>
    <comment_count>3</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-08-20 01:56:48 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 64849 [details])
&gt; This patch is huge! I&apos;d really like to see it split up into at least
&gt; two parts.
&gt; 
&gt; 1. The code drop from Soup, which should probably be separated somehow from
&gt; the rest of our source, so we can treat it specially (it will go away eventually, right?).
&gt; 2. The bits that actually implement the cache in WebCore/WebKit.

Thx for reviewing Martin.

Well basically the patch consists of:
   1) changes in ResourceHandleSoup/ResourceHandleInternal: basically adaptations to work with the URILoader stuff
   2) WebCore/platform/network/soup/webkitsoup*: all the stuff moved from webkit
   3) WebKit/Wekit/gtk/webkit/webkitsoupcache.[c|h]: the webkitgtk+ API for clients

Now some comments:

&gt; &gt; +    if (m_req) {
&gt; &gt; +        g_object_set_data(G_OBJECT(m_req.get()), &quot;webkit-resource&quot;, 0);
&gt; &gt; +        m_req.clear();
&gt; 
&gt; There&apos;s no chance that this may be the last reference to m_req here?

What&apos;s the problem then?
 
&gt; &gt; +    GOwnPtr&lt;char&gt; uri(soup_uri_to_string(soup_message_get_uri(msg), false));
&gt; &gt; +    String location = String(uri.get());
&gt; 
&gt; Even though URL are generally URL-encoded, I don&apos;t know if we can rely on that
&gt; here. You should use String::fromUTF8.

soup_uri_to_string always returns an URL encoded URL, do you think we still need to use ::fromUTF8 ?

&gt; &gt; -    d-&gt;m_idleHandler = g_timeout_add(0, parseDataUrl, handle);
&gt; &gt; +    d-&gt;m_idleHandler = g_idle_add(parseDataUrl, handle);
&gt; 
&gt; Why did you switch this to an idle? I think Gustavo is trying to move
&gt; away from that because they are often starved. Maybe ping him about this.

As stated here https://bugs.webkit.org/show_bug.cgi?id=40222#c11 there was 1 test that fails with timeout but not with idle. After a long time debugging it, it seems that it&apos;s just a matter of timing. All the signals and events are emitted properly but somehow in a different order depending on the function used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267383</commentid>
    <comment_count>4</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-08-20 13:29:58 -0700</bug_when>
    <thetext>
&gt; &gt; &gt; +    if (m_req) {
&gt; &gt; &gt; +        g_object_set_data(G_OBJECT(m_req.get()), &quot;webkit-resource&quot;, 0);
&gt; &gt; &gt; +        m_req.clear();
&gt; &gt; 
&gt; &gt; There&apos;s no chance that this may be the last reference to m_req here?
&gt; What&apos;s the problem then?

Sorry, misread this one! Looks fine actually.

&gt; &gt; here. You should use String::fromUTF8.
&gt; soup_uri_to_string always returns an URL encoded URL, do you think we still need to use ::fromUTF8 ?

Yes. Since GLib strings are UTF-8, you should still use the proper String constructor. For instance, do you know what Soup&apos;s behavior is with IDNs?

&gt; As stated here https://bugs.webkit.org/show_bug.cgi?id=40222#c11
&gt; there was 1 test that fails with timeout but not with idle. After
&gt; a long time debugging it, it seems that it&apos;s just a matter of timing.
&gt; All the signals and events are emitted properly but somehow in a
&gt; different order depending on the function used.

Interesting. I&apos;m convinced, but I&apos;d still like to get Gustavo&apos;s opinion
on it. He may have some further insights.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267787</commentid>
    <comment_count>5</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-08-23 01:06:06 -0700</bug_when>
    <thetext>(In reply to comment #4)

&gt; &gt; &gt; here. You should use String::fromUTF8.
&gt; &gt; soup_uri_to_string always returns an URL encoded URL, do you think we still need to use ::fromUTF8 ?
&gt; 
&gt; Yes. Since GLib strings are UTF-8, you should still use the proper String constructor. For instance, do you know what Soup&apos;s behavior is with IDNs?

OK will fix that. Regarding IDNs there is no specific code about them in libsoup AFAIK
 
&gt; &gt; As stated here https://bugs.webkit.org/show_bug.cgi?id=40222#c11
&gt; &gt; there was 1 test that fails with timeout but not with idle. After
&gt; &gt; a long time debugging it, it seems that it&apos;s just a matter of timing.
&gt; &gt; All the signals and events are emitted properly but somehow in a
&gt; &gt; different order depending on the function used.
&gt; 
&gt; Interesting. I&apos;m convinced, but I&apos;d still like to get Gustavo&apos;s opinion
&gt; on it. He may have some further insights.

I don&apos;t want to convince you :). Just sharing my conclussions after some investigation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267788</commentid>
    <comment_count>6</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-08-23 01:08:13 -0700</bug_when>
    <thetext>Gently added kov and xan to the Cc</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267965</commentid>
    <comment_count>7</comment_count>
      <attachid>65135</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-08-23 09:57:13 -0700</bug_when>
    <thetext>Created attachment 65135
SoupURILoader stuff as part of webkitgtk+ core network

This patch adds the objects used by SoupURILoader branch of libsoup. This code is required for the HTTP cache implementation. WebKit code style has been used when moving code to WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267967</commentid>
    <comment_count>8</comment_count>
      <attachid>65136</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-08-23 09:58:44 -0700</bug_when>
    <thetext>Created attachment 65136
Changes to WebKitGtk+ core network stuff to use the new API from the imported SoupURILoader code

See also https://bugs.webkit.org/show_bug.cgi?id=40222</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267968</commentid>
    <comment_count>9</comment_count>
      <attachid>65137</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-08-23 09:59:34 -0700</bug_when>
    <thetext>Created attachment 65137
New public API to enable clients to use the HTTP cache

Public API for the cache</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267969</commentid>
    <comment_count>10</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-08-23 10:00:03 -0700</bug_when>
    <thetext>Patch splitted as suggested by Martin</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267971</commentid>
    <comment_count>11</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-08-23 10:06:33 -0700</bug_when>
    <thetext>Great, I&apos;ll take a look at these later today, is there any specific reason why you did not mark the patches for review, though?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267982</commentid>
    <comment_count>12</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-08-23 10:34:27 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Great, I&apos;ll take a look at these later today, is there any specific reason why you did not mark the patches for review, though?

Cool! if you can review them

Regarding the r?, I always forget :/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267987</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-23 10:44:27 -0700</bug_when>
    <thetext>Attachment 65135 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
Last 3072 characters of output:
ty/naming] [4]
WebCore/platform/network/soup/webkitsouprequestdata.cpp:178:  request_data_class is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/network/soup/webkitsouprequestdata.cpp:180:  object_class is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/network/soup/webkitsouprequestdata.cpp:181:  request_class is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/network/soup/webkitsouprequestfile.cpp:47:  webkit_soup_request_file_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/network/soup/webkitsouprequestfile.cpp:54:  webkit_soup_request_file_finalize is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/network/soup/webkitsouprequestfile.cpp:268:  webkit_soup_request_file_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/network/soup/webkitsouprequest.h:57:  parent_class is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/network/soup/webkitsouprequest.h:65:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/network/soup/webkitsouprequest.h:66:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/network/soup/webkitsouprequest.h:67:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/network/soup/webkitsouprequest.h:76:  webkit_soup_request_get_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/network/soup/webkitsouprequester.cpp:39:  webkit_soup_requester_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/network/soup/webkitsouprequester.cpp:57:  webkit_soup_requester_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/network/soup/webkitsouprequester.cpp:57:  requester_class is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/network/soup/webkitsouprequester.cpp:59:  object_class is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/network/soup/webkitsouprequester.cpp:67:  init_request_types is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/network/soup/webkitsouprequester.cpp:93:  webkit_soup_requester_request is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/network/soup/webkitsouprequester.cpp:109:  webkit_soup_requester_request_uri is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 934 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267990</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-23 10:46:13 -0700</bug_when>
    <thetext>Attachment 65136 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/platform/network/ResourceHandleInternal.h:51:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/platform/network/ResourceHandleInternal.h:210:  Tab found; better to use spaces  [whitespace/tab] [1]
Total errors found: 2 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267991</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-23 10:47:05 -0700</bug_when>
    <thetext>Attachment 65137 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
Last 3072 characters of output:
kitsoupcache.cpp:107:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebKit/gtk/webkit/webkitsoupcache.cpp:108:  Tab found; better to use spaces  [whitespace/tab] [1]
WebKit/gtk/webkit/webkitsoupcache.cpp:112:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitsoupcache.cpp:114:  Tab found; better to use spaces  [whitespace/tab] [1]
WebKit/gtk/webkit/webkitsoupcache.cpp:114:  Declaration has space between type name and * in GObjectClass *gobject_class  [whitespace/declaration] [3]
WebKit/gtk/webkit/webkitsoupcache.cpp:116:  Tab found; better to use spaces  [whitespace/tab] [1]
WebKit/gtk/webkit/webkitsoupcache.cpp:118:  Tab found; better to use spaces  [whitespace/tab] [1]
WebKit/gtk/webkit/webkitsoupcache.cpp:118:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitsoupcache.cpp:133:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitsoupcache.cpp:136:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitsoupcache.cpp:141:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitsoupcache.cpp:157:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitsoupcache.cpp:159:  Tab found; better to use spaces  [whitespace/tab] [1]
WebKit/gtk/webkit/webkitsoupcache.cpp:159:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitsoupcache.cpp:170:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitsoupcache.cpp:172:  Tab found; better to use spaces  [whitespace/tab] [1]
WebKit/gtk/webkit/webkitsoupcache.cpp:172:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitsoupcache.cpp:176:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitsoupcache.cpp:178:  Tab found; better to use spaces  [whitespace/tab] [1]
WebKit/gtk/webkit/webkitsoupcache.cpp:178:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitsoupcache.cpp:182:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitsoupcache.cpp:184:  Tab found; better to use spaces  [whitespace/tab] [1]
WebKit/gtk/webkit/webkitsoupcache.cpp:184:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitsoupcache.cpp:188:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitsoupcache.cpp:189:  Tab found; better to use spaces  [whitespace/tab] [1]
WebKit/gtk/webkit/webkitsoupcache.cpp:191:  Tab found; better to use spaces  [whitespace/tab] [1]
WebKit/gtk/webkit/webkitsoupcache.cpp:191:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitsoupcache.cpp:195:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitsoupcache.cpp:197:  Tab found; better to use spaces  [whitespace/tab] [1]
Total errors found: 111 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268053</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-23 12:22:24 -0700</bug_when>
    <thetext>Attachment 65135 did not build on gtk:
Build output: http://queues.webkit.org/results/3757605</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268062</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-23 12:47:50 -0700</bug_when>
    <thetext>Attachment 65136 did not build on gtk:
Build output: http://queues.webkit.org/results/3725601</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268078</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-23 13:10:40 -0700</bug_when>
    <thetext>Attachment 65137 did not build on gtk:
Build output: http://queues.webkit.org/results/3751564</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268180</commentid>
    <comment_count>19</comment_count>
      <attachid>65135</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-08-23 16:45:21 -0700</bug_when>
    <thetext>Comment on attachment 65135
SoupURILoader stuff as part of webkitgtk+ core network

I have three main concerns:

1. I believe we should import the code without style changes into a subdirectory; I know you have probably been told to change it into webkit&apos;s style, but I think it would make backporting fixes into soup&apos;s version harder than needed - and it&apos;s not something we plan to keep in the tree for long, anyway
2. do we really need to import the TPL one-file library? I guess the answer is yes (though we could use GVariant?), but then we probably need to figure out a way of isolating it from the rest of the build as the build failure suggests it&apos;ll be problematic =(
3. There&apos;s API mixed in there (like  webkit_soup_http_input_stream_new/webkitSoupHttpInputStreamNew) - I think I would prefer having this code go to WebKit/soup/; the API should be kept in soup/GTK+-style even if we decide to move the rest (which is one more argument in favor of keeping the style)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268193</commentid>
    <comment_count>20</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-08-23 16:51:18 -0700</bug_when>
    <thetext>I&apos;m also in favor of keeping this in the original style, in the interest of  pushing fixes back into your soup branch. I&apos;d love to see this code isolated into Webkit/gtk/soup.

svillar, can you comment on the performance characteristics of the code which uses tpl? It may make more sense to use GVariant or sqlite, depending on what it does.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268316</commentid>
    <comment_count>21</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-08-23 22:57:12 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; I&apos;m also in favor of keeping this in the original style, in the interest of  pushing fixes back into your soup branch. I&apos;d love to see this code isolated into Webkit/gtk/soup.

If we are going to do this then let&apos;s open a bug right away to make the style bots ignore that bunch of code, otherwise this is going to be annoying. That way we&apos;ll also have something to point people to when they come asking why is there a ball of code not following the style inside the source tree (hello Mark! :)).

&gt; 
&gt; svillar, can you comment on the performance characteristics of the code which uses tpl? It may make more sense to use GVariant or sqlite, depending on what it does.

I agree with the sentiment. Did you talk with Dan and decided that using TPL made sense here? As suggested GVariant seems to be made exactly for this kind of task, so it would make sense to reuse it here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268365</commentid>
    <comment_count>22</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-08-24 00:30:23 -0700</bug_when>
    <thetext>Using Xan&apos;s comments for the answer the previous reviews

(In reply to comment #21)
&gt; (In reply to comment #20)
&gt; &gt; I&apos;m also in favor of keeping this in the original style, in the interest of  pushing fixes back into your soup branch. I&apos;d love to see this code isolated into Webkit/gtk/soup.
&gt; 
&gt; If we are going to do this then let&apos;s open a bug right away to make the style bots ignore that bunch of code, otherwise this is going to be annoying. That way we&apos;ll also have something to point people to when they come asking why is there a ball of code not following the style inside the source tree (hello Mark! :)).

Not really sure how to make bots ignore that, could you help on that?

Provided you all are in favour of keeping the style do you think it still makes sense to add a &quot;webkit_&quot; prefix to all the symbols?

&gt; &gt; 
&gt; &gt; svillar, can you comment on the performance characteristics of the code which uses tpl? It may make more sense to use GVariant or sqlite, depending on what it does.
&gt; 
&gt; I agree with the sentiment. Did you talk with Dan and decided that using TPL made sense here? As suggested GVariant seems to be made exactly for this kind of task, so it would make sense to reuse it here.

Regarding why I chose tpl, there are some reasons:
   * I had previously used it for a personal project
   * The API is quite compact, easy and understandable
   * No external dependencies needed
   * It&apos;s supposed to be fast

Most of them are likely valid for the GVariant stuff, I guess I was mostly biased by the first one. I don&apos;t know about performance using GVariant, but if it&apos;s acceptable I agree it makes sense to use it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268509</commentid>
    <comment_count>23</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-08-24 06:17:26 -0700</bug_when>
    <thetext>To make the bots ignore the path you need to add the path, + information about which rules are allowed to be broken on that path to WebKit/WebKitTools/Scripts/webkitpy/style/checker.py. If we agree on the path I can make the patch. WebCore/platform/network/soup/cache for the internal files and WebKit/gtk/soup for the API? Or should we go with WebKit/gtk/soup/ for everything, making this gtk-only, essentially?

As for the webkit_ prefix, I think it makes sense to add the prefix to public API, so it won&apos;t clash with the proper soup symbols in the future.

TPL/GVariant, I&apos;d like to go with GVariant. TPL does bring _1_ additional dependency, and that is the actual TPL files, which you then have to keep up-to-date yourself. GVariant on the other hand is a standard part of our platform, and will be maintained by the glib maintainers =).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268534</commentid>
    <comment_count>24</comment_count>
    <who name="Lukasz Slachciak">l.slachciak</who>
    <bug_when>2010-08-24 06:55:51 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; If we agree on the path I can make the patch. WebCore/platform/network/soup/cache for the internal files and WebKit/gtk/soup for the API? Or should we go with WebKit/gtk/soup/ for everything, making this gtk-only, essentially?

Please don&apos;t make it gtk-only  putting files into WebKit/gtk/soup/. Also EFL port is using soup as network backend, and this can be nice feature for EFL also.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268562</commentid>
    <comment_count>25</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-08-24 08:23:48 -0700</bug_when>
    <thetext>&gt; Please don&apos;t make it gtk-only  putting files into WebKit/gtk/soup/. Also EFL port is using soup as network backend, and this can be nice feature for EFL also.

That is why I initially suggested WebKit/soup/. I think for simplicity&apos;s sake we should use WebKit/soup for all files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268592</commentid>
    <comment_count>26</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-08-24 09:23:34 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; &gt; Please don&apos;t make it gtk-only  putting files into WebKit/gtk/soup/. Also EFL port is using soup as network backend, and this can be nice feature for EFL also.
&gt; That is why I initially suggested WebKit/soup/. I think for simplicity&apos;s sake we should use WebKit/soup for all files.

I can see why this is a good idea now. Here&apos;s another vote for WebKit/soup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269058</commentid>
    <comment_count>27</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-08-25 00:03:42 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; To make the bots ignore the path you need to add the path, + information about which rules are allowed to be broken on that path to WebKit/WebKitTools/Scripts/webkitpy/style/checker.py. If we agree on the path I can make the patch. WebCore/platform/network/soup/cache for the internal files and WebKit/gtk/soup for the API? Or should we go with WebKit/gtk/soup/ for everything, making this gtk-only, essentially?

I like the former. Basically because most of stuff is only needed by the ResourceHandleSoup. That&apos;s why having something under WebCore and the public API under WebKit makes a lot of sense to me. Regarding everything under WebKit/soup, I thought that being WebCore objects they should be under WebCore/ but I could be obviously wrong.
 
&gt; As for the webkit_ prefix, I think it makes sense to add the prefix to public API, so it won&apos;t clash with the proper soup symbols in the future.

Agree.
 
&gt; TPL/GVariant, I&apos;d like to go with GVariant. TPL does bring _1_ additional dependency, and that is the actual TPL files, which you then have to keep up-to-date yourself. GVariant on the other hand is a standard part of our platform, and will be maintained by the glib maintainers =).

Yep, I&apos;m moving the serialization/persistence stuff to GVariant and removing the tpl dependency.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269246</commentid>
    <comment_count>28</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-08-25 07:47:02 -0700</bug_when>
    <thetext>Some extra information regarding the GVariant/tpl stuff. I coded a couple of serialization/deserialization routines both using tpl and GVariant in order to evaluate the performance. For the test the data that I wanted to serialize was an array of structures with a uint32, a boolean and 2 strings (the amount of data in the cache is actually higher but both systems claim to be O(n)).

Then I registered the time for serializing/deserializing arrays of different sizes. The first size I chose was 5000 elements. Basically because if we take a typical cache size of 50MB and an average file size of 10k then that means 5000 cache entries. The other test I did was with 10 times that size (50000 elements), for quite extreme cases.

For the case of tpl I implemented it both using fixed-length arrays and variable-length arrays.

These are the numbers I got (average values after 10 runs):

Serialization
*************

      | tpl (fixed) | tpl     | gvariant |
      ------------------------------------
5000  | 0.02456     | 0.02606 | 0.1098   |
50000 | 0.16678     | 0.23968 | 1.0829   |


Deserialization
***************

      | tpl (fixed) | tpl     | gvariant |
      ------------------------------------
5000  | 0.02456     | 0.02606 | 0.1098   |
50000 | 0.16678     | 0.23968 | 1.0829   |

The most important numbers are the deserialization ones because that happens when the applications start while the serialization is typically performed on application exit.

It&apos;s pretty clear that tpl (even using the not-so-fast variable length arrays is way faster (~85%) than gvariant. But if we consider that 5000 is an accurate figure then the difference in time is less than 1/10 sec.

Maybe a figure in between the two I chose fits better with actual numbers. In that case application start will wait during 1/2 second for cache to start. That can be partially avoided if we perform the deserialization in a different thread keeping the cache in a not_available state. Deserialization will most likely finish before the user could even start typing a URL (home page load could be affected by the concurrent deserialization BTW).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269889</commentid>
    <comment_count>29</comment_count>
      <attachid>65567</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-08-26 08:12:08 -0700</bug_when>
    <thetext>Created attachment 65567
patch for check-webkit-style to ignore our new stuff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269890</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-26 08:16:23 -0700</bug_when>
    <thetext>Attachment 65567 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKitTools/Scripts/webkitpy/style/checker.py:218:  whitespace before &apos;]&apos;  [pep8/E202] [5]
Total errors found: 1 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269914</commentid>
    <comment_count>31</comment_count>
      <attachid>65567</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-08-26 08:56:29 -0700</bug_when>
    <thetext>Comment on attachment 65567
patch for check-webkit-style to ignore our new stuff

The style error seems like a false positive, so this looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270025</commentid>
    <comment_count>32</comment_count>
      <attachid>65567</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-08-26 12:19:04 -0700</bug_when>
    <thetext>Comment on attachment 65567
patch for check-webkit-style to ignore our new stuff

Landed as r66120. Turns out that the python style rules require a , after the last item of a list (the original code had it), so I added it, and the style checker is happy with itself again =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271376</commentid>
    <comment_count>33</comment_count>
      <attachid>65900</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-08-30 03:36:24 -0700</bug_when>
    <thetext>Created attachment 65900
Imported SoupURILoader to Webkit. New public API for HTTP cache

* Added files from libsoup with SoupURILoader stuff
* New API that adds WebKitSoupCache</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271377</commentid>
    <comment_count>34</comment_count>
      <attachid>65901</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-08-30 03:38:44 -0700</bug_when>
    <thetext>Created attachment 65901
Changes to WebKitGtk+ core network stuff to use the new API from the imported SoupURILoader code

WebKitGtk+ using SoupURILoader</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271379</commentid>
    <comment_count>35</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-30 04:04:11 -0700</bug_when>
    <thetext>Attachment 65900 did not build on gtk:
Build output: http://queues.webkit.org/results/3850142</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271390</commentid>
    <comment_count>36</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-30 04:44:05 -0700</bug_when>
    <thetext>Attachment 65901 did not build on gtk:
Build output: http://queues.webkit.org/results/3877142</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271425</commentid>
    <comment_count>37</comment_count>
      <attachid>65900</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-08-30 07:35:03 -0700</bug_when>
    <thetext>Comment on attachment 65900
Imported SoupURILoader to Webkit. New public API for HTTP cache

This will still need a changelog entry, and the build breakage implies we need to either depend on a newer glib or factor this code out if building with an oldish glib. There&apos;s a check in place to decide whether to use GSettings. I&apos;d recommend adding a check specifically for GVariant, to decide whether to build this new code or not. I won&apos;t bother reviewing the actual code, except for the public APIs. The identation in soup-cache.c is completely broken (no spaces at all in various places, 4-space indentation in others), I think you may want to run indent in all soup cache files to have them match the libsoup style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271426</commentid>
    <comment_count>38</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-08-30 07:36:09 -0700</bug_when>
    <thetext>Actually, I think trying to make this buildable with older glibs is going to pull us into hell, so I would go with making us depend on the earliest GVariant-providing glib.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272171</commentid>
    <comment_count>39</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-08-31 10:15:51 -0700</bug_when>
    <thetext>(In reply to comment #38)
&gt; Actually, I think trying to make this buildable with older glibs is going to pull us into hell, so I would go with making us depend on the earliest GVariant-providing glib.

Agree. I&apos;ll add changelog&apos;s and update the glib version</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272724</commentid>
    <comment_count>40</comment_count>
      <attachid>66189</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-09-01 03:34:01 -0700</bug_when>
    <thetext>Created attachment 66189
Imported SoupURILoader to Webkit. New public API for HTTP cache

Now with ChangeLogs. Files imported from libsoup have now the proper libsoup coding style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272725</commentid>
    <comment_count>41</comment_count>
      <attachid>66190</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-09-01 03:35:42 -0700</bug_when>
    <thetext>Created attachment 66190
WebKitGtk+ to use the new API from the imported SoupURILoader code

g_timeout_add is now back in place after replacing g_idle_add. BTW the test that was working only with g_idle_add is now working with the timeout_add too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272726</commentid>
    <comment_count>42</comment_count>
      <attachid>66191</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-09-01 03:38:22 -0700</bug_when>
    <thetext>Created attachment 66191
Added fast/encoding/percent-escaping.html to the list of Skipped

That test does not work with the new SoupURILoader stuff.

See https://bugzilla.gnome.org/show_bug.cgi?id=523100#c28 for further details. A small patch to libsoup will fix it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>272781</commentid>
    <comment_count>43</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-01 06:36:05 -0700</bug_when>
    <thetext>Attachment 66190 did not build on gtk:
Build output: http://queues.webkit.org/results/3921019</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274535</commentid>
    <comment_count>44</comment_count>
      <attachid>65901</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-09-06 03:52:05 -0700</bug_when>
    <thetext>Comment on attachment 65901
Changes to WebKitGtk+ core network stuff to use the new API from the imported SoupURILoader code

Marked as obsolete</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274659</commentid>
    <comment_count>45</comment_count>
      <attachid>66650</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-09-06 09:07:28 -0700</bug_when>
    <thetext>Created attachment 66650
Imported SoupURILoader to Webkit. New public API for HTTP cache

A few changes since the last version of the patch:

* glib dependency is now 2.24
* removed several data from cache that is not really needed (as it was saved anyway in the http headers)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274669</commentid>
    <comment_count>46</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-06 09:34:55 -0700</bug_when>
    <thetext>Attachment 66650 did not build on gtk:
Build output: http://queues.webkit.org/results/3914232</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274675</commentid>
    <comment_count>47</comment_count>
      <attachid>66190</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-09-06 09:51:44 -0700</bug_when>
    <thetext>Comment on attachment 66190
WebKitGtk+ to use the new API from the imported SoupURILoader code

This patch is looking good. I&apos;m excited for this to land.

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

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:138
&gt; +        m_soupRequest.clear();
m_soupRequest.clear(); is unecessary here, I believe. The destructor will take care of decrementing the smart pointer reference count. If this is needed otherwise there should really be a comment explaining why.

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:196
&gt; +    String location = String(uri.get());
Again, I believe this should be ::fromUTF8(...).

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:305
&gt; +#define BUFFER_SIZE 8192
If this is a constant, why do we need to store m_bufferSize? Let&apos;s just get rid of that member if possible. Again, I think this should be called READ_BUFFER_SIZE and be at the top of the file too.

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:689
&gt; +                            sendRequestCallback, 0);
This newline seems unecessary. I usually split the line when it goes over 120 characters.

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:846
&gt; +        client-&gt;didReceiveData(handle.get(), reinterpret_cast&lt;const char*&gt;(unicodeStr.get()), g_utf8_strlen(d-&gt;m_buffer, bytesRead) * sizeof(UChar), 0);
Would it be possible to simply use WTFString here?

String data = String::fromUTF8(d-&gt;m_buffer, bytesRead);
client-&gt;didReceiveData(handle.get(), reinterpret_cast&lt;const char*&gt;(data.characters()), data.length() * sizeof(UChar), 0);

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:867
&gt; +    GOwnPtr&lt;char&gt; urlStr;
Please use CString here, if possible. It was made just for this purpose.

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:901
&gt; +
Please remove the newline.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274901</commentid>
    <comment_count>48</comment_count>
      <attachid>66692</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-09-07 01:38:16 -0700</bug_when>
    <thetext>Created attachment 66692
WebKitGtk+ to use the new API from the imported SoupURILoader code

New version with fixes to the issues detected by Martin</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274930</commentid>
    <comment_count>49</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-07 03:09:05 -0700</bug_when>
    <thetext>Attachment 66692 did not build on gtk:
Build output: http://queues.webkit.org/results/3938283</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275595</commentid>
    <comment_count>50</comment_count>
      <attachid>66650</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-09-07 21:35:20 -0700</bug_when>
    <thetext>Comment on attachment 66650
Imported SoupURILoader to Webkit. New public API for HTTP cache

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

My major concern with this patch is exposing a public API that will not be compatible with some further Soup version. Is it possible to keep this API private for now?

&gt; GNUmakefile.am:325
&gt;  
Please keep this list in alphabetical order.

&gt; WebCore/GNUmakefile.am:2575
&gt;  	WebCore/plugins/gtk/PluginDataGtk.cpp \
Please keep the source lists in alphabetical order. I&apos;ve been ordered them by filtering them through sort.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276630</commentid>
    <comment_count>51</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-09-09 11:40:27 -0700</bug_when>
    <thetext>(In reply to comment #50)
&gt; (From update of attachment 66650 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=66650&amp;action=prettypatch
&gt; 
&gt; My major concern with this patch is exposing a public API that will not be compatible with some further Soup version. Is it possible to keep this API private for now?

The applications that uses WebKitGTK+ will need that API to setup the caching, so we can&apos;t make it private. That concern is why we are adding the WebKit prefix to the API bits, we should be fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277052</commentid>
    <comment_count>52</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-09-10 00:17:49 -0700</bug_when>
    <thetext>(In reply to comment #50)
&gt; (From update of attachment 66650 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=66650&amp;action=prettypatch
&gt; 
&gt; My major concern with this patch is exposing a public API that will not be compatible with some further Soup version. Is it possible to keep this API private for now?

As Gustavo said it&apos;s a must for clients.

&gt; &gt; GNUmakefile.am:325
&gt; &gt;  
&gt; Please keep this list in alphabetical order.

It&apos;s currently not properly sorted, do you think it makes sense to sort them in this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277152</commentid>
    <comment_count>53</comment_count>
      <attachid>66692</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-09-10 06:00:27 -0700</bug_when>
    <thetext>Comment on attachment 66692
WebKitGtk+ to use the new API from the imported SoupURILoader code

Removing the review request as I found a bug that could lead to a crash</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277496</commentid>
    <comment_count>54</comment_count>
      <attachid>67254</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-09-10 15:59:53 -0700</bug_when>
    <thetext>Created attachment 67254
Imported SoupURILoader to Webkit. New public API for HTTP cache

Fixed minor issues with sorting reported by Martin.

Apart from that several changes in cache *implementation* (no changes in pure WebKitGtk+ code or API)
   * Fixed crash caused by multiple free
   * Fixed memory leaks
   * LRU is now properly updated
   * Cache resources properly freed on finalize
   * Decreased cache&apos;s threads priority to priorize libsoup&apos;s and webkit&apos;s
   * GVariant does not like non-UTF8 strings. Validate them before serializing.

I won&apos;t be available next week so don&apos;t expect comments from my side till next Saturday at least :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277497</commentid>
    <comment_count>55</comment_count>
      <attachid>66692</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-09-10 16:01:33 -0700</bug_when>
    <thetext>Comment on attachment 66692
WebKitGtk+ to use the new API from the imported SoupURILoader code

Added missing r=?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277586</commentid>
    <comment_count>56</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-10 18:23:11 -0700</bug_when>
    <thetext>Attachment 67254 did not build on gtk:
Build output: http://queues.webkit.org/results/3897376</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280643</commentid>
    <comment_count>57</comment_count>
      <attachid>66191</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-09-17 08:05:17 -0700</bug_when>
    <thetext>Comment on attachment 66191
Added fast/encoding/percent-escaping.html to the list of Skipped

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

&gt; LayoutTests/platform/gtk/Skipped:1138
&gt; +fast/encoding/percent-escaping.html

I think I&apos;d rather see a work-around in our code than a regression. We should chat about this sometime.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>280693</commentid>
    <comment_count>58</comment_count>
    <who name="Michal Pakula vel Rutka">mpakulavelrutka</who>
    <bug_when>2010-09-17 09:51:11 -0700</bug_when>
    <thetext>As in WebKit-EFL we want to use your cache implementation could you tell me if it is already finished or are there any features that need to be implemented?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281441</commentid>
    <comment_count>59</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-09-20 01:28:46 -0700</bug_when>
    <thetext>(In reply to comment #57)
&gt; (From update of attachment 66191 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=66191&amp;action=prettypatch
&gt; 
&gt; &gt; LayoutTests/platform/gtk/Skipped:1138
&gt; &gt; +fast/encoding/percent-escaping.html
&gt; 
&gt; I think I&apos;d rather see a work-around in our code than a regression. We should chat about this sometime.

Unfortunatelly there is no work-around possible from our side without breaking all the new URI loader way of getting resources because the problem is how libsoup handles file: URLs. The fix should be added to libsoup, the patch is really small (see https://bugzilla.gnome.org/show_bug.cgi?id=523100#c28 for more details). I can talk with danw about that before pushing this upstream.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281442</commentid>
    <comment_count>60</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-09-20 01:29:33 -0700</bug_when>
    <thetext>(In reply to comment #58)
&gt; As in WebKit-EFL we want to use your cache implementation could you tell me if it is already finished or are there any features that need to be implemented?

It&apos;s finished but under review process, hopefully will land soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282148</commentid>
    <comment_count>61</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-09-21 01:46:29 -0700</bug_when>
    <thetext>(In reply to comment #59)
&gt; (In reply to comment #57)
&gt; &gt; (From update of attachment 66191 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=66191&amp;action=prettypatch
&gt; &gt; 
&gt; &gt; &gt; LayoutTests/platform/gtk/Skipped:1138
&gt; &gt; &gt; +fast/encoding/percent-escaping.html
&gt; &gt; 
&gt; &gt; I think I&apos;d rather see a work-around in our code than a regression. We should chat about this sometime.
&gt; 
&gt; Unfortunatelly there is no work-around possible from our side without breaking all the new URI loader way of getting resources because the problem is how libsoup handles file: URLs. The fix should be added to libsoup, the patch is really small (see https://bugzilla.gnome.org/show_bug.cgi?id=523100#c28 for more details). I can talk with danw about that before pushing this upstream.

Actually the problem is not with the percent signs but with the blank spaces in the filename. Soup will always try to convert them into &quot;%20&quot; because otherwise is won&apos;t be a valid URL. So even if you encode them before passing the url to libsoup you&apos;ll be generating a different filename and thus the test will fail. I think the best I can do is to have a little chat about this issue with danw and try to get the libsoup patch upstream.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282317</commentid>
    <comment_count>62</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-09-21 08:30:09 -0700</bug_when>
    <thetext>(In reply to comment #61)
&gt; Actually the problem is not with the percent signs but with the blank spaces in the filename. Soup will always try to convert them into &quot;%20&quot; because otherwise is won&apos;t be a valid URL. So even if you encode them before passing the url to libsoup you&apos;ll be generating a different filename and thus the test will fail. I think the best I can do is to have a little chat about this issue with danw and try to get the libsoup patch upstream.

So does this mean filenames with spaces will be inaccessible? That definitely seems like a blocker for merging this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282840</commentid>
    <comment_count>63</comment_count>
      <attachid>66191</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-09-22 01:51:15 -0700</bug_when>
    <thetext>Comment on attachment 66191
Added fast/encoding/percent-escaping.html to the list of Skipped

Removing as the test is working with the newest changes to be uploaded</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282850</commentid>
    <comment_count>64</comment_count>
      <attachid>68349</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-09-22 02:04:42 -0700</bug_when>
    <thetext>Created attachment 68349
Imported SoupURILoader to Webkit. New public API for HTTP cache

New version of the patch. Added fix for the test that started to fail</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282853</commentid>
    <comment_count>65</comment_count>
      <attachid>68350</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-09-22 02:07:40 -0700</bug_when>
    <thetext>Created attachment 68350
WebKitGtk+ to use the new API from the imported SoupURILoader code

New version of the patch. Rebased against latest changes to the master</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282854</commentid>
    <comment_count>66</comment_count>
      <attachid>66692</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-09-22 02:09:16 -0700</bug_when>
    <thetext>Comment on attachment 66692
WebKitGtk+ to use the new API from the imported SoupURILoader code

Marking this as obsolete, forgot to do it before</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282859</commentid>
    <comment_count>67</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-22 02:19:03 -0700</bug_when>
    <thetext>Attachment 68349 did not build on gtk:
Build output: http://queues.webkit.org/results/3996101</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282865</commentid>
    <comment_count>68</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-22 02:40:51 -0700</bug_when>
    <thetext>Attachment 68350 did not build on gtk:
Build output: http://queues.webkit.org/results/4092036</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282877</commentid>
    <comment_count>69</comment_count>
      <attachid>68349</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-09-22 03:50:18 -0700</bug_when>
    <thetext>Comment on attachment 68349
Imported SoupURILoader to Webkit. New public API for HTTP cache

Still one issue remaining. Removing the r? temporarily</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283557</commentid>
    <comment_count>70</comment_count>
      <attachid>68505</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-09-23 02:03:48 -0700</bug_when>
    <thetext>Created attachment 68505
Imported SoupURILoader to Webkit. New public API for HTTP cache

This is the right version of the (hopefully) final patch.

I managed to fix the issue with the percent-escaping.html test that was failing and the good news is that the fix is part of the imported soup uri loader code. That way no special code is needed by current WebKitGtk+ code, and if it eventually lands on libsoup, every client will take advantage of that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283570</commentid>
    <comment_count>71</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-23 03:16:05 -0700</bug_when>
    <thetext>Attachment 68505 did not build on gtk:
Build output: http://queues.webkit.org/results/4070098</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284093</commentid>
    <comment_count>72</comment_count>
      <attachid>68350</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-09-23 16:43:47 -0700</bug_when>
    <thetext>Comment on attachment 68350
WebKitGtk+ to use the new API from the imported SoupURILoader code

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

Looks good! I think we should merge this soon. I just have a few style nits.

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:128
&gt; +static void cleanupSoupRequestOperation(ResourceHandle* handle, bool isDestroying);
&gt; +static void sendRequestCallback(GObject* source, GAsyncResult* res, gpointer);
&gt; +static void readCallback(GObject* source, GAsyncResult* res, gpointer);
&gt; +static void closeCallback(GObject* source, GAsyncResult* res, gpointer);

I think all of these parameter names are unnecessary except for isDestroying.

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:381
&gt; +    handle-&gt;ref();

This really needs a comment describing where the balancing deref() is.

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:386
&gt; +    g_input_stream_read_async(d-&gt;m_inputStream, d-&gt;m_buffer, READ_BUFFER_SIZE,
&gt; +                              G_PRIORITY_DEFAULT, d-&gt;m_cancellable,
&gt; +                              readCallback, (isBase64) ? 0 : GINT_TO_POINTER(1));

Perhaps smoosh this down to two lines in the interest of vertical space?

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:403
&gt; +

This blank line seems accidental.

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:501
&gt; +            ResourceError resourceError(g_quark_to_string(SOUP_HTTP_ERROR),
&gt; +                                        d-&gt;m_msg-&gt;status_code,
&gt; +                                        uriStr.get(),
&gt; +                                        String::fromUTF8(d-&gt;m_msg-&gt;reason_phrase));

Once again, smoosh this down to two lines.

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:513
&gt; +            ResourceError resourceError(g_quark_to_string(G_IO_ERROR),
&gt; +                                        error-&gt;code,
&gt; +                                        uriStr.get(),
&gt; +                                        error ? String::fromUTF8(error-&gt;message) : String());

Ditto.

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:574
&gt; +    g_input_stream_read_async(d-&gt;m_inputStream, d-&gt;m_buffer, READ_BUFFER_SIZE,
&gt; +                              G_PRIORITY_DEFAULT, d-&gt;m_cancellable,
&gt; +                              readCallback, 0);

Ditto.

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:824
&gt;          ResourceError resourceError(g_quark_to_string(G_IO_ERROR),
&gt;                                      error-&gt;code,
&gt; -                                    uri,
&gt; +                                    uriStr.get(),
&gt;                                      error ? String::fromUTF8(error-&gt;message) : String());

Ditto.

&gt; WebCore/platform/network/soup/ResourceRequest.h:70
&gt; +        void updateSoupMessage(SoupMessage* soupMessage) const;

Please remove the parameter name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284304</commentid>
    <comment_count>73</comment_count>
      <attachid>68664</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-09-24 02:47:35 -0700</bug_when>
    <thetext>Created attachment 68664
WebKitGtk+ to use the new API from the imported SoupURILoader code

New version with Martin&apos;s style fix requests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284318</commentid>
    <comment_count>74</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-24 04:37:54 -0700</bug_when>
    <thetext>Attachment 68664 did not build on gtk:
Build output: http://queues.webkit.org/results/4068122</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284562</commentid>
    <comment_count>75</comment_count>
      <attachid>68717</attachid>
    <who name="Dan Winship">danw</who>
    <bug_when>2010-09-24 11:22:36 -0700</bug_when>
    <thetext>Created attachment 68717
patches to Sergio&apos;s patches

OK, the reason SoupRequester needed a special case to get file URIs working right was because there was already an incorrect special case for file URIs in ResourceHandleSoup::startGio() that was messing the URL up before it got to SoupRequester. So this patch removes both special cases (I didn&apos;t bother attaching it in the form of a git commit since it actually needs to be split between both of Sergio&apos;s existing patches.).

Additionally, to deal with the problem the startGio() hack was originally attempting to work around, we need to make soup_uri_decode() accept badly-%-encoded URIs rather than returning NULL (which is something we&apos;d already discussed in gnomebug 523100 anyway). There is now a patch for that in https://bugzilla.gnome.org/show_bug.cgi?id=630540 but it&apos;s not yet committed because we&apos;re in hard code freeze for 2.32.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284570</commentid>
    <comment_count>76</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-09-24 11:28:42 -0700</bug_when>
    <thetext>(In reply to comment #75)
&gt; OK, the reason SoupRequester needed a special case to get file URIs working right was because there was already an incorrect special case for file URIs in ResourceHandleSoup::startGio() that was messing the URL up before it got to SoupRequester. So this patch removes both special cases (I didn&apos;t bother attaching it in the form of a git commit since it actually needs to be split between both of Sergio&apos;s existing patches.).

Thank you! Sergio will just need to merge these fixes into his patches before the final r+.

&gt; Additionally, to deal with the problem the startGio() hack was originally attempting to work around, we need to make soup_uri_decode() accept badly-%-encoded URIs rather than returning NULL (which is something we&apos;d already discussed in gnomebug 523100 anyway). There is now a patch for that in https://bugzilla.gnome.org/show_bug.cgi?id=630540 but it&apos;s not yet committed because we&apos;re in hard code freeze for 2.32.

So, if I understand correctly, to avoid a regression we&apos;ll either need to:
1. Re-implement this logic in WebKit GTK+ for older soup versions.
2. Wait to land this until you release a new version of soup with this fix and then depend on that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284573</commentid>
    <comment_count>77</comment_count>
    <who name="Dan Winship">danw</who>
    <bug_when>2010-09-24 11:31:10 -0700</bug_when>
    <thetext>I haven&apos;t looked at the code in detail, but I think you probably want to rename all of the soup-prefixed stuff to be webkit-prefixed instead so that it doesn&apos;t start causing compile and run-time problems when the code lands in libsoup. (Even if it&apos;s not visible outside of libwebkit, you still have to worry about GType&apos;s type database; bad things will happen if libsoup and webkit both try to register a type with the name &quot;SoupRequest&quot;.)

I have not looked at the tpl-using code or the GVariant-using alternative, but it does seem like using GVariant instead of bringing in tpl would be nice... if there are performance issues presumably GVariant can still be optimized a bunch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284583</commentid>
    <comment_count>78</comment_count>
    <who name="Dan Winship">danw</who>
    <bug_when>2010-09-24 11:40:00 -0700</bug_when>
    <thetext>(In reply to comment #76)
&gt; So, if I understand correctly, to avoid a regression we&apos;ll either need to:
&gt; 1. Re-implement this logic in WebKit GTK+ for older soup versions.
&gt; 2. Wait to land this until you release a new version of soup with this fix and then depend on that.

Yes. For #1, you could make soup-request-file.c use KURL.h&apos;s decodeURLEscapeSequences() instead of soup_uri_decode(), assuming it&apos;s not too obnoxious to call that from C...

For #2, it will be in libsoup 2.32.1. Are you planning to try to get this in for GNOME 2.32.0 still? I&apos;m pretty sure it&apos;s too late to bump external dependency versions at this point...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284987</commentid>
    <comment_count>79</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-09-25 04:06:51 -0700</bug_when>
    <thetext>(In reply to comment #75)
&gt; Created an attachment (id=68717) [details]
&gt; patches to Sergio&apos;s patches
&gt; 
&gt; OK, the reason SoupRequester needed a special case to get file URIs working right was because there was already an incorrect special case for file URIs in ResourceHandleSoup::startGio() that was messing the URL up before it got to SoupRequester. So this patch removes both special cases (I didn&apos;t bother attaching it in the form of a git commit since it actually needs to be split between both of Sergio&apos;s existing patches.).
&gt; 

Well that&apos;s not really the reason. The special case in souprequester needs the special case in startGio. One cannot work without the other. With both of them it works fine.

&gt; Additionally, to deal with the problem the startGio() hack was originally attempting to work around, we need to make soup_uri_decode() accept badly-%-encoded URIs rather than returning NULL (which is something we&apos;d already discussed in gnomebug 523100 anyway). There is now a patch for that in https://bugzilla.gnome.org/show_bug.cgi?id=630540 but it&apos;s not yet committed because we&apos;re in hard code freeze for 2.32.

That&apos;s the real issue IMO. That&apos;s why my first thought was to modify the decoding in soup-uri.c although your changes seem indeed better than adding a special case for file: URL&apos;s. I also considered removing that fixup parametter but I was not sure about breaking current URI parsing in soup. Note that glib APIs do return NULL when they cannot decode URIs

One last question Dan, did you run the tests with both patches?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285112</commentid>
    <comment_count>80</comment_count>
      <attachid>68664</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-09-26 07:16:30 -0700</bug_when>
    <thetext>Comment on attachment 68664
WebKitGtk+ to use the new API from the imported SoupURILoader code

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

&gt; WebCore/platform/network/ResourceHandleInternal.h:51
&gt; +#include &lt;GRefPtr.h&gt;

Nitpick, but requester.h already includes request.h

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:196
&gt; +    String location = String::fromUTF8(uri.get());

Can&apos;t we just commit this bit now?

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:305
&gt;  // parseDataUrl() is taken from the CURL http backend.

I guess you want to remove this comment now, since the function is wildly different by now (or at least say &apos;originally&apos; or something).

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:387
&gt;  

GINT_TO_POINTER(!isBase64) ? Could fail?

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:453
&gt; +

Any reason not to use platform ptrs here too?

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:459
&gt; +

And here?

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:515
&gt; +

These two ifs are almost identical, I think they can be trivially merged.

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:544
&gt; +    d-&gt;m_buffer = static_cast&lt;char*&gt;(g_malloc(READ_BUFFER_SIZE));

Am I the only one worried that we malloc 8k for each outgoing HTTP request? or am I missing something here. Is this just making something explicit that was implicit before or we adding an extra copy to the whole process?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285373</commentid>
    <comment_count>81</comment_count>
      <attachid>68664</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-09-27 02:12:32 -0700</bug_when>
    <thetext>Comment on attachment 68664
WebKitGtk+ to use the new API from the imported SoupURILoader code

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

&gt;&gt; WebCore/platform/network/ResourceHandleInternal.h:51
&gt;&gt; +#include &lt;GRefPtr.h&gt;
&gt; 
&gt; Nitpick, but requester.h already includes request.h

Indeed. Will remove it.

&gt;&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:196
&gt;&gt; +    String location = String::fromUTF8(uri.get());
&gt; 
&gt; Can&apos;t we just commit this bit now?

Yes. Martin asked for the change, that&apos;s why it&apos;s included in this patch

&gt;&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:305
&gt;&gt;  // parseDataUrl() is taken from the CURL http backend.
&gt; 
&gt; I guess you want to remove this comment now, since the function is wildly different by now (or at least say &apos;originally&apos; or something).

True

&gt;&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:387
&gt;&gt;  
&gt; 
&gt; GINT_TO_POINTER(!isBase64) ? Could fail?

I just wanted to be ultra-explicit but what you propose would be the same.

&gt;&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:453
&gt;&gt; +
&gt; 
&gt; Any reason not to use platform ptrs here too?

They are not platform ptrs right now. Not sure if that change should be included in this patch. I thought it was a general rule not to include changes not directly related to the issue the patch tries to fix.

&gt;&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:515
&gt;&gt; +
&gt; 
&gt; These two ifs are almost identical, I think they can be trivially merged.

Indeed they can

&gt;&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:544
&gt;&gt; +    d-&gt;m_buffer = static_cast&lt;char*&gt;(g_malloc(READ_BUFFER_SIZE));
&gt; 
&gt; Am I the only one worried that we malloc 8k for each outgoing HTTP request? or am I missing something here. Is this just making something explicit that was implicit before or we adding an extra copy to the whole process?

:m really good point here. I think you&apos;re right and we&apos;re adding an extra copy for http requests when reading from the input stream. With the old code all the didReceiveData calls were using buffers provided by libsoup without any extra copy. I guess we need something better then...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285447</commentid>
    <comment_count>82</comment_count>
    <who name="Dan Winship">danw</who>
    <bug_when>2010-09-27 07:30:35 -0700</bug_when>
    <thetext>(In reply to comment #80)
&gt; &gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:544
&gt; &gt; +    d-&gt;m_buffer = static_cast&lt;char*&gt;(g_malloc(READ_BUFFER_SIZE));
&gt; 
&gt; Am I the only one worried that we malloc 8k for each outgoing HTTP request? or am I missing something here. Is this just making something explicit that was implicit before or we adding an extra copy to the whole process?

At the moment, given the kludginess of SoupHTTPInputStream, this is an additional malloc and an additional copy. When things are redone so that libsoup uses streams internally, then the malloc here will be replacing a malloc that is currently in soup-message-io.c, and libsoup will be reading directly from the network into your buffers.

At any rate, you can copy the buffer 10 times and it will still be unnoticeable compared to waiting for the network and rendering HTML, so, it&apos;s not that awful...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286170</commentid>
    <comment_count>83</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-09-28 04:24:49 -0700</bug_when>
    <thetext>(In reply to comment #82)
&gt; (In reply to comment #80)
&gt; &gt; &gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:544
&gt; &gt; &gt; +    d-&gt;m_buffer = static_cast&lt;char*&gt;(g_malloc(READ_BUFFER_SIZE));
&gt; &gt; 
&gt; &gt; Am I the only one worried that we malloc 8k for each outgoing HTTP request? or am I missing something here. Is this just making something explicit that was implicit before or we adding an extra copy to the whole process?
&gt; 
&gt; At the moment, given the kludginess of SoupHTTPInputStream, this is an additional malloc and an additional copy. When things are redone so that libsoup uses streams internally, then the malloc here will be replacing a malloc that is currently in soup-message-io.c, and libsoup will be reading directly from the network into your buffers.
&gt; 
&gt; At any rate, you can copy the buffer 10 times and it will still be unnoticeable compared to waiting for the network and rendering HTML, so, it&apos;s not that awful...

WebKit in general has a rule of never allowing performance regressions, even if new features are being added. I think it makes sense to enforce this rule in our port too.

If this is going to go away in the future and there&apos;s really no reasonably easy to avoid it I think we could make an exception, but it would still be unfortunate. FWIW talking with Holger some weeks ago he told me in QtWebKit the copying of data in the network stack is noticeable performance-wise in general, although in their case the number of copies was larger (something between 3 or 5 IIRC).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286251</commentid>
    <comment_count>84</comment_count>
    <who name="Dan Winship">danw</who>
    <bug_when>2010-09-28 08:21:07 -0700</bug_when>
    <thetext>(In reply to comment #83)
&gt; WebKit in general has a rule of never allowing performance regressions, even if new features are being added. I think it makes sense to enforce this rule in our port too.

But presumably that means &quot;measured performance regressions&quot;, not &quot;theoretical performance regressions&quot;. And one would hope that caching is going to increase performance by much more than an extra copy is going to decrease it... :)

&gt; If this is going to go away in the future and there&apos;s really no reasonably easy to avoid it

Duh, now that you mention it, there&apos;s an API designed exactly for avoiding this extra copy... soup_message_set_chunk_allocator() (added for the gstreamer guys when they were porting their http stream to use libsoup). SoupHTTPInputStream could be modified to use this to get libsoup to read directly into the buffers provided by webkit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286837</commentid>
    <comment_count>85</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-09-29 06:49:44 -0700</bug_when>
    <thetext>(In reply to comment #84)
&gt; (In reply to comment #83)
&gt; &gt; WebKit in general has a rule of never allowing performance regressions, even if new features are being added. I think it makes sense to enforce this rule in our port too.
&gt; 
&gt; But presumably that means &quot;measured performance regressions&quot;, not &quot;theoretical performance regressions&quot;. And one would hope that caching is going to increase performance by much more than an extra copy is going to decrease it... :)
&gt; 
&gt; &gt; If this is going to go away in the future and there&apos;s really no reasonably easy to avoid it
&gt; 
&gt; Duh, now that you mention it, there&apos;s an API designed exactly for avoiding this extra copy... soup_message_set_chunk_allocator() (added for the gstreamer guys when they were porting their http stream to use libsoup). SoupHTTPInputStream could be modified to use this to get libsoup to read directly into the buffers provided by webkit.

Unfortunately I don&apos;t think that will fix anything. First of all because I think the chunk_allocator thing it&apos;s not properly implemented in libsoup, because the SoupBuffer (and its data pointer) that comes with the got_chunk signal is not the same than the one returned by the allocator. That&apos;s because the decoding routines create a different buffer for each decoder.

Secondly, even if we fix the problem stated above, we&apos;d still have to copy the data returned by the decoders to the caller&apos;s buffer (soup_coding_apply_into wouldn&apos;t fix anything as input and output buffers must not overlap)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286932</commentid>
    <comment_count>86</comment_count>
      <attachid>69205</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-09-29 09:54:37 -0700</bug_when>
    <thetext>Created attachment 69205
Imported SoupURILoader to Webkit. New public API for HTTP cache

Includes Dan&apos;s patch that reverts the file: URIs hack</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286948</commentid>
    <comment_count>87</comment_count>
      <attachid>69209</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-09-29 10:17:55 -0700</bug_when>
    <thetext>Created attachment 69209
WebKitGtk+ to use the new API from the imported SoupURILoader code

New version with Dan&apos;s patch applied.

It also includes Xan&apos;s requested changes:
   * Moved m_inputStream and m_cancellable to platform ptrs
   * Refactored the 2 errors
   * GINT_TO_POINTER(!isBase64)
   * Removed duplicated include file

Apart from that I removed some glib2.21 #ifdef code as the required version for this patch is 2.24</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286997</commentid>
    <comment_count>88</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-29 11:07:07 -0700</bug_when>
    <thetext>Attachment 69205 did not build on gtk:
Build output: http://queues.webkit.org/results/4201011</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287084</commentid>
    <comment_count>89</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-29 13:07:41 -0700</bug_when>
    <thetext>Attachment 69209 did not build on gtk:
Build output: http://queues.webkit.org/results/4225012</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287460</commentid>
    <comment_count>90</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-09-30 03:07:14 -0700</bug_when>
    <thetext>(In reply to comment #77)
&gt; I haven&apos;t looked at the code in detail, but I think you probably want to rename all of the soup-prefixed stuff to be webkit-prefixed instead so that it doesn&apos;t start causing compile and run-time problems when the code lands in libsoup. (Even if it&apos;s not visible outside of libwebkit, you still have to worry about GType&apos;s type database; bad things will happen if libsoup and webkit both try to register a type with the name &quot;SoupRequest&quot;.)

I think it was kov the one that said that it&apos;d be better not to change them all in order to easen the migration to libsoup.

Anyway I agree that it could be an important issue. I have a patch that changes all those names so if everybody think it&apos;s interesting I can upload new versions of the patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287674</commentid>
    <comment_count>91</comment_count>
      <attachid>69355</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-09-30 11:13:32 -0700</bug_when>
    <thetext>Created attachment 69355
Imported SoupURILoader to Webkit. New public API for HTTP cache

Renamed all the new Soup* symbols to WebKitSoup*</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287676</commentid>
    <comment_count>92</comment_count>
      <attachid>69205</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-09-30 11:14:50 -0700</bug_when>
    <thetext>Comment on attachment 69205
Imported SoupURILoader to Webkit. New public API for HTTP cache

Forgot to mark this as obsolete</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287677</commentid>
    <comment_count>93</comment_count>
      <attachid>69356</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-09-30 11:16:06 -0700</bug_when>
    <thetext>Created attachment 69356
WebKitGtk+ to use the new API from the imported SoupURILoader code

Renamed new Soup* symbols to WebKitSoup*

Also refactored some duplicated code in parseDataUrl (nice catch Martin)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287762</commentid>
    <comment_count>94</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-30 13:04:58 -0700</bug_when>
    <thetext>Attachment 69355 did not build on gtk:
Build output: http://queues.webkit.org/results/4167023</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287769</commentid>
    <comment_count>95</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-09-30 13:29:07 -0700</bug_when>
    <thetext>As discussed on IRC, the fix for soup_uri_decode won&apos;t land on libsoup till 2.32.1 (mid November). As we want to release this first I&apos;ll copy&amp;pastet the soup-uri.c code (uri_decoded_copy function) into the imported SoupURILoader stuff.

We&apos;ll remove that code once the 2.32.1 is released.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287831</commentid>
    <comment_count>96</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-30 14:34:18 -0700</bug_when>
    <thetext>Attachment 69356 did not build on gtk:
Build output: http://queues.webkit.org/results/4219041</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287834</commentid>
    <comment_count>97</comment_count>
      <attachid>69384</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-09-30 14:35:38 -0700</bug_when>
    <thetext>Created attachment 69384
Imported SoupURILoader to Webkit. New public API for HTTP cache

New version of the patch:
   * A couple of indentation issues fixed
   * Do not need to decode base64 encoded data URLs
   * Imported uri_decoded_copy() with the fix that will land in libsoup 2.32.1. Use it instead of soup_uri_decode for file: and data: URLs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287879</commentid>
    <comment_count>98</comment_count>
      <attachid>69356</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-09-30 15:19:34 -0700</bug_when>
    <thetext>Comment on attachment 69356
WebKitGtk+ to use the new API from the imported SoupURILoader code

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

This patch is so very close, but I&apos;ve found some issues with memory leaks. When constructing a platformRefPtr, you should use adoptPlatformRef, unless you want the reference count to increase (the default constructor calls g_object_ref_sink).

&gt; WebCore/platform/network/ResourceHandleInternal.h:118
&gt; +            , m_soupRequest(0)
&gt; +            , m_requester(0)
&gt;              , m_inputStream(0)
&gt;              , m_cancellable(0)

Since these are now PlatformRefPtrs you don&apos;t need to initialize them. They are automatically 0.

&gt; WebCore/platform/network/ResourceHandleInternal.h:140
&gt; +            m_requester = webkit_soup_requester_new();

This should use adoptPlatformRef, see below for an extended note about this.

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:357
&gt; +    d-&gt;m_soupRequest = webkit_soup_requester_request(d-&gt;m_requester.get(), handle-&gt;firstRequest().url().string().utf8().data(), session, &amp;error.outPtr());

Ditto.

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:365
&gt; +    if (error)
&gt; +        return false;
&gt; +
&gt; +    d-&gt;m_inputStream = in;

Careful here. From the soup code it looks like it is the callers responsibility to unref the value that webkit_soup_request_send returns. Constructing a PlatformRefPtr without using adoptPlatformRef has the effect of calling g_object_ref another time on the GInputStream. 

d-&gt;m_inputStream = adoptPlatformRef(webkit_soup_request_send(d-&gt;m_soupRequest.get(), 0, &amp;error.outPtr()));
if (error) {
    d-&gt;m_inputStream = 0;
    return false;
}

and dispense with the intermediate &apos;in&apos; variable entirely.

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:373
&gt; +    d-&gt;m_cancellable = g_cancellable_new();

This should be d-&gt;m_cancellable = adoptPlatformRef(g_cancellable_new()); as well.

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:436
&gt; +static void cleanupSoupRequestOperation(ResourceHandle* handle, bool isDestroying = false)
&gt; +{
&gt; +    ResourceHandleInternal* d = handle-&gt;getInternal();
&gt; +
&gt; +    if (d-&gt;m_soupRequest) {
&gt; +        g_object_set_data(G_OBJECT(d-&gt;m_soupRequest.get()), &quot;webkit-resource&quot;, 0);
&gt; +        d-&gt;m_soupRequest.clear();
&gt; +    }

We still need to clear the m_cancellable here to ensure that the unref happens, right?

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:519
&gt; +    d-&gt;m_inputStream = in;

The same goes for this section. After this the reference count on d-&gt;m_inputStream will be 2.

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:564
&gt; +    d-&gt;m_soupRequest = webkit_soup_requester_request(d-&gt;m_requester.get(), url.string().utf8().data(), session, &amp;error.outPtr());

Ditto.

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:652
&gt; +    d-&gt;m_cancellable = g_cancellable_new();

Same issue here.

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:833
&gt;      // GIO doesn&apos;t know how to handle refs and queries, so remove them

Shouldn&apos;t this comment be changed to reflect the fact that we&apos;re using soup now?

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:839
&gt; +    urlStr = url.string().utf8().data();

This might as well be:
CString urlStr = url.string().utf8().data();

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:842
&gt; +    d-&gt;m_soupRequest = webkit_soup_requester_request(d-&gt;m_requester.get(), urlStr.data(), session, &amp;error.outPtr());

I think this should use adoptPlatformRef as well.

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:851
&gt;      d-&gt;m_cancellable = g_cancellable_new();

Same issue here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287912</commentid>
    <comment_count>99</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-30 16:18:52 -0700</bug_when>
    <thetext>Attachment 69384 did not build on gtk:
Build output: http://queues.webkit.org/results/4141040</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288132</commentid>
    <comment_count>100</comment_count>
      <attachid>69436</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-10-01 02:47:29 -0700</bug_when>
    <thetext>Created attachment 69436
WebKitGtk+ to use the new API from the imported SoupURILoader code

New version. Includes:
   * Added adoptPlatformRef where needed (thx Martin)
   * Renamed m_msg to m_soupMsg and converted it to PlatformRefPtr</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288133</commentid>
    <comment_count>101</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-01 02:48:38 -0700</bug_when>
    <thetext>Attachment 69436 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/platform/network/soup/ResourceHandleSoup.cpp:481:  Declaration has space between type name and * in SoupMessage *soupMsg  [whitespace/declaration] [3]
WebCore/platform/network/soup/ResourceHandleSoup.cpp:578:  Declaration has space between type name and * in SoupMessage *soupMsg  [whitespace/declaration] [3]
Total errors found: 2 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288137</commentid>
    <comment_count>102</comment_count>
      <attachid>69438</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-10-01 02:56:38 -0700</bug_when>
    <thetext>Created attachment 69438
WebKitGtk+ to use the new API from the imported SoupURILoader code

Sorry for the previous one. Fixed the style issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288155</commentid>
    <comment_count>103</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-01 03:53:32 -0700</bug_when>
    <thetext>Attachment 69436 did not build on gtk:
Build output: http://queues.webkit.org/results/4179041</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288161</commentid>
    <comment_count>104</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-01 04:18:16 -0700</bug_when>
    <thetext>Attachment 69438 did not build on gtk:
Build output: http://queues.webkit.org/results/4229039</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288304</commentid>
    <comment_count>105</comment_count>
      <attachid>69438</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-10-01 09:55:20 -0700</bug_when>
    <thetext>Comment on attachment 69438
WebKitGtk+ to use the new API from the imported SoupURILoader code

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

General comment: I&apos;m not as picky about this as others, but some reviewers would have you end all comments with a period. That&apos;s something to consider for this patch.

&gt; WebCore/platform/network/ResourceHandleInternal.h:189
&gt; +        PlatformRefPtr&lt;SoupMessage&gt; m_soupMsg;

This should probably be m_soupMessage, as the guideline is to avoid abbreviations in new code.

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:-132
&gt; -    if (m_msg) {
&gt; -        g_object_unref(m_msg);
&gt; -        m_msg = 0;
&gt; -    }

Nice change.

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:145
&gt; -    if (d-&gt;m_msg)
&gt; -        g_signal_handlers_disconnect_matched(d-&gt;m_msg, G_SIGNAL_MATCH_DATA,
&gt; +    if (d-&gt;m_soupMsg)
&gt; +        g_signal_handlers_disconnect_matched(d-&gt;m_soupMsg.get(), G_SIGNAL_MATCH_DATA,

I could be wrong about this, but shouldn&apos;t this be in cleanupSoupRequestOperation? Otherwise, we might get responses to messages for a no-longer-valid SoupMessage.

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:364
&gt; +    d-&gt;m_buffer = static_cast&lt;char*&gt;(g_malloc(READ_BUFFER_SIZE));

My intuition is that this allocation should either be done with the GLib slice allocator or with fastAlloc/fastFree. Perhaps someone else can chime in here.

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:445
&gt; +    if (d-&gt;m_cancellable)
&gt; +        d-&gt;m_cancellable.clear();
&gt; +
&gt; +    if (d-&gt;m_soupMsg)
&gt; +        d-&gt;m_soupMsg.clear();

No need to check these before clearing them. Just clear them.

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:506
&gt; +            // WebCore might have cancelled the job in the while
&gt; +            if (d-&gt;m_cancelled)
&gt; +                return;
&gt; +
&gt; +            if (soupMsg-&gt;response_body-&gt;data)
&gt; +                client-&gt;didReceiveData(handle.get(), soupMsg-&gt;response_body-&gt;data, soupMsg-&gt;response_body-&gt;length, true);

In the case that the request was cancelled this should be calling cleanupSoupRequestOperation(). So you might change 
    if (soupMsg-&gt;response_body-&gt;data)
to
    if (!d-&gt;m_cancelled &amp;&amp; soupMsg-&gt;response_body-&gt;data)
and remove the early return.

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:513
&gt; +        if (d-&gt;m_cancelled || !client) {
&gt; +          cleanupSoupRequestOperation(handle.get());
&gt; +          return;
&gt; +        }

The tab width here should be 4.

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:525
&gt; +    d-&gt;m_buffer = static_cast&lt;char*&gt;(g_malloc(READ_BUFFER_SIZE));

Same issue with the allocation.

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:578
&gt; +    SoupMessage* soupMsg = d-&gt;m_soupMsg.get();

Avoid abbreviations.

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:582
&gt; +    request.updateSoupMessage(soupMsg);
&gt; +
&gt; +    if (!d-&gt;m_soupMsg)
&gt;          return false;

It doesn&apos;t look like you want to call updateSoupMessage with a null message, so you should probably move this check up to line 578.

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:775
&gt; +static void readCallback(GObject* source, GAsyncResult* res, gpointer data)

Please change res to asyncResult.

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:826
&gt; +    g_input_stream_read_async(d-&gt;m_inputStream.get(), d-&gt;m_buffer, READ_BUFFER_SIZE,
&gt; +                              G_PRIORITY_DEFAULT, d-&gt;m_cancellable.get(),
&gt; +                              readCallback, data);

This can be two lines.

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:845
&gt; +    CString urlStr = url.string().utf8().data();

This can just be: CString urlStr = url.string().utf8(); I think I suggested .data() originally, sorry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288862</commentid>
    <comment_count>106</comment_count>
      <attachid>69611</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-10-04 03:35:40 -0700</bug_when>
    <thetext>Created attachment 69611
WebKitGtk+ to use the new API from the imported SoupURILoader code

Some more changes to the patch from Martin&apos;s comments:
   * renamed soupMsg to soupMessage
   * disconnect signals in cleanupSoupRequestOperation
   * replaced g_malloc by g_slice_alloc
   * some style fixes
   * moved early returns to better locations</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288865</commentid>
    <comment_count>107</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-04 04:00:53 -0700</bug_when>
    <thetext>Attachment 69611 did not build on gtk:
Build output: http://queues.webkit.org/results/4200074</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288935</commentid>
    <comment_count>108</comment_count>
      <attachid>69611</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-10-04 08:07:06 -0700</bug_when>
    <thetext>Comment on attachment 69611
WebKitGtk+ to use the new API from the imported SoupURILoader code

Great. I&apos;m going to wait for a nod from Kov or Xan to r+ the API changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289580</commentid>
    <comment_count>109</comment_count>
      <attachid>69384</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-10-05 07:08:59 -0700</bug_when>
    <thetext>Comment on attachment 69384
Imported SoupURILoader to Webkit. New public API for HTTP cache

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

&gt; WebCore/platform/network/soup/cache/webkit/soup-cache.c:1595
&gt; +	filename = g_build_filename (priv-&gt;cache_dir, WEBKIT_SOUP_CACHE_FILE, NULL);
&gt; +	if (!g_file_get_contents (filename, &amp;contents, &amp;length, NULL)) {
&gt; +		g_free (filename);
&gt; +		return;
&gt; +	}

There are several indentation inconsistencies like this one (2 spaces indentation for the first level, but 4 spaces in second-level indentation) in the soup files. If you could fix those when landing, that&apos;d be great. *nod* otherwise! (I&apos;ll leave the r+ for mrobinson)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289587</commentid>
    <comment_count>110</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-10-05 07:15:49 -0700</bug_when>
    <thetext>Just a reminder, but EWS needs to be updated before this can land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289742</commentid>
    <comment_count>111</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-10-05 10:56:58 -0700</bug_when>
    <thetext>(In reply to comment #109)
&gt; (From update of attachment 69384 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=69384&amp;action=review
&gt; 
&gt; &gt; WebCore/platform/network/soup/cache/webkit/soup-cache.c:1595
&gt; &gt; +	filename = g_build_filename (priv-&gt;cache_dir, WEBKIT_SOUP_CACHE_FILE, NULL);
&gt; &gt; +	if (!g_file_get_contents (filename, &amp;contents, &amp;length, NULL)) {
&gt; &gt; +		g_free (filename);
&gt; &gt; +		return;
&gt; &gt; +	}
&gt; 
&gt; There are several indentation inconsistencies like this one (2 spaces indentation for the first level, but 4 spaces in second-level indentation) in the soup files. If you could fix those when landing, that&apos;d be great. *nod* otherwise! (I&apos;ll leave the r+ for mrobinson)

I think you&apos;re cheat by the way bugzilla shows patches with tabs, as libsoup code is using tabs for indentation. I have double checked that the patches are properly indented with 8-space tabs, it&apos;s just how they&apos;re rendered when reviewed.

Anyway I&apos;ll upload a new version with emacs headers for indentation as libsoup uses.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289744</commentid>
    <comment_count>112</comment_count>
      <attachid>69810</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-10-05 10:59:08 -0700</bug_when>
    <thetext>Created attachment 69810
Imported SoupURILoader to Webkit. New public API for HTTP cache

Added emacs indentation headers as the originals in libsoup. I also fixed a couple of typos in the names of some macros</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289749</commentid>
    <comment_count>113</comment_count>
      <attachid>69810</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-10-05 11:05:38 -0700</bug_when>
    <thetext>Comment on attachment 69810
Imported SoupURILoader to Webkit. New public API for HTTP cache

I double-checked the patch and it seems it&apos;s tabbed properly. We need to update the EWS version of libsoup before we can land this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292888</commentid>
    <comment_count>114</comment_count>
    <who name="Gajendra singh">rawatgg</who>
    <bug_when>2010-10-12 02:09:43 -0700</bug_when>
    <thetext>Just out of curiosity, Would this cache implementation suffice in multiprocess environment, Say Two processes A and B are linked with webkit and having same Cache location, then how the synchronization would be done for &quot;soup.cache&quot; file, if A and B load same pages.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292996</commentid>
    <comment_count>115</comment_count>
      <attachid>69611</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-12 10:59:39 -0700</bug_when>
    <thetext>Comment on attachment 69611
WebKitGtk+ to use the new API from the imported SoupURILoader code

Clearing flags on attachment: 69611

Committed r69589: &lt;http://trac.webkit.org/changeset/69589&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293009</commentid>
    <comment_count>116</comment_count>
      <attachid>69611</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-10-12 11:33:25 -0700</bug_when>
    <thetext>Comment on attachment 69611
WebKitGtk+ to use the new API from the imported SoupURILoader code

Just realized that these patches don&apos;t have complete ChangeLogs. Flipping the review flag until Sergio can fix them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293309</commentid>
    <comment_count>117</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-10-13 01:39:03 -0700</bug_when>
    <thetext>(In reply to comment #114)
&gt; Just out of curiosity, Would this cache implementation suffice in multiprocess environment, Say Two processes A and B are linked with webkit and having same Cache location, then how the synchronization would be done for &quot;soup.cache&quot; file, if A and B load same pages.

There wouldn&apos;t be any kind of synchronization. The implementation assumes that every process will use it own directory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293520</commentid>
    <comment_count>118</comment_count>
      <attachid>70628</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-10-13 10:55:47 -0700</bug_when>
    <thetext>Created attachment 70628
Imported SoupURILoader to Webkit. New public API for HTTP cache

Corrected ChangeLogs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293522</commentid>
    <comment_count>119</comment_count>
      <attachid>70630</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-10-13 10:56:33 -0700</bug_when>
    <thetext>Created attachment 70630
WebKitGtk+ to use the new API from the imported SoupURILoader code

Updated ChangeLogs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293525</commentid>
    <comment_count>120</comment_count>
      <attachid>70628</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-10-13 10:58:35 -0700</bug_when>
    <thetext>Comment on attachment 70628
Imported SoupURILoader to Webkit. New public API for HTTP cache

Great. Thanks. I&apos;ll land these patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293536</commentid>
    <comment_count>121</comment_count>
      <attachid>69611</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-10-13 11:08:38 -0700</bug_when>
    <thetext>Comment on attachment 69611
WebKitGtk+ to use the new API from the imported SoupURILoader code

Obsolete actually</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293845</commentid>
    <comment_count>122</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-10-13 17:33:03 -0700</bug_when>
    <thetext>Committed r69718: &lt;http://trac.webkit.org/changeset/69718&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293877</commentid>
    <comment_count>123</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-13 18:02:49 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/69718 seems to have broken Gtk/Qt release builds:

../../WebCore/platform/network/soup/cache/soup-directory-input-stream.c:114: warning: comparison between signed and unsigned integer expressions
../../WebCore/platform/network/soup/cache/soup-directory-input-stream.c:127: warning: comparison between signed and unsigned integer expressions
../../WebCore/platform/network/soup/cache/soup-request-data.c:82: warning: comparison between signed and unsigned integer expressions
../../WebCore/platform/network/soup/cache/soup-request-data.c:82: warning: signed and unsigned type in conditional expression
../../WebCore/platform/network/soup/cache/soup-request-file.c:171: warning: implicit declaration of function ‘soup_uri_get_path’
../../WebCore/platform/network/soup/cache/soup-request-file.c:171: warning: initialization makes pointer from integer without a cast
../../WebCore/platform/network/soup/cache/webkit/soup-cache.c:271: warning: signed and unsigned type in conditional expression
../../WebCore/platform/network/soup/cache/webkit/soup-cache.c:1347: warning: comparison between signed and unsigned integer expressions
../../WebCore/platform/network/soup/cache/webkit/soup-cache.c:1366: warning: comparison between signed and unsigned integer expressions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293882</commentid>
    <comment_count>124</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-10-13 18:08:25 -0700</bug_when>
    <thetext>(In reply to comment #123)
&gt; http://trac.webkit.org/changeset/69718 seems to have broken Gtk/Qt release builds:


The issue here seems be that the Release bots do not have a new enough version of libsoup to have soup_uri_get_path. Here&apos;s the failure line:

make[1]: Entering directory `/var/lib/buildbot/build/gtk-linux-32-release/build/WebKitBuild/Release&apos;
  CC     WebKit/gtk/tests/Programs_unittests_testdomdocument-testdomdocument.o
  CCLD   Programs/unittests/testdomdocument
./.libs/libwebkitgtk-1.0.so: undefined reference to `soup_uri_get_path&apos;


&gt; ../../WebCore/platform/network/soup/cache/soup-directory-input-stream.c:114: warning: comparison between signed and unsigned integer expressions
&gt; ../../WebCore/platform/network/soup/cache/soup-directory-input-stream.c:127: warning: comparison between signed and unsigned integer expressions
&gt; ../../WebCore/platform/network/soup/cache/soup-request-data.c:82: warning: comparison between signed and unsigned integer expressions
&gt; ../../WebCore/platform/network/soup/cache/soup-request-data.c:82: warning: signed and unsigned type in conditional expression
&gt; ../../WebCore/platform/network/soup/cache/soup-request-file.c:171: warning: implicit declaration of function ‘soup_uri_get_path’
&gt; ../../WebCore/platform/network/soup/cache/soup-request-file.c:171: warning: initialization makes pointer from integer without a cast
&gt; ../../WebCore/platform/network/soup/cache/webkit/soup-cache.c:271: warning: signed and unsigned type in conditional expression
&gt; ../../WebCore/platform/network/soup/cache/webkit/soup-cache.c:1347: warning: comparison between signed and unsigned integer expressions
&gt; ../../WebCore/platform/network/soup/cache/webkit/soup-cache.c:1366: warning: comparison between signed and unsigned integer expressions

We should also fix these warnings before we try to land this patch again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293891</commentid>
    <comment_count>125</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-10-13 18:15:15 -0700</bug_when>
    <thetext>(In reply to comment #124)
&gt; (In reply to comment #123)
&gt; &gt; http://trac.webkit.org/changeset/69718 seems to have broken Gtk/Qt release builds:
&gt; 
&gt; 
&gt; The issue here seems be that the Release bots do not have a new enough version of libsoup to have soup_uri_get_path. Here&apos;s the failure line:
&gt; 
&gt; make[1]: Entering directory `/var/lib/buildbot/build/gtk-linux-32-release/build/WebKitBuild/Release&apos;
&gt;   CC     WebKit/gtk/tests/Programs_unittests_testdomdocument-testdomdocument.o
&gt;   CCLD   Programs/unittests/testdomdocument
&gt; ./.libs/libwebkitgtk-1.0.so: undefined reference to `soup_uri_get_path&apos;

Fix it in tree by accessing path directly (uri-&gt;path), the struct is public. The getter was added in 2.32 only for the benefit of the bindings AFAIK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293898</commentid>
    <comment_count>126</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-10-13 18:36:55 -0700</bug_when>
    <thetext>(In reply to comment #125)
&gt; Fix it in tree by accessing path directly (uri-&gt;path), the struct is public. The getter was added in 2.32 only for the benefit of the bindings AFAIK.

Okay. Fixed in the tree, but we really should fix those warnings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293976</commentid>
    <comment_count>127</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-10-13 23:35:08 -0700</bug_when>
    <thetext>Committed r69742: &lt;http://trac.webkit.org/changeset/69742&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294008</commentid>
    <comment_count>128</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2010-10-14 01:05:55 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/69742 seems to have broken Gtk builds:

http://build.webkit.org/builders/GTK%20Linux%2032-bit%20Release/builds/6599/steps/compile-webkit/logs

../../WebCore/platform/network/soup/ResourceHandleSoup.cpp: In function ‘void WebCore::sendRequestCallback(GObject*, GAsyncResult*, void*)’:
../../WebCore/platform/network/soup/ResourceHandleSoup.cpp:495: error: ‘soupMessage’ was not declared in this scope
make[1]: *** [WebCore/platform/network/soup/libwebkitgtk_1_0_la-ResourceHandleSoup.lo] Error 1
make[1]: Leaving directory `/var/lib/buildbot/build/gtk-linux-32-release/build/WebKitBuild/Release&apos;
make: *** [all] Error 2

(In reply to comment #127)
&gt; Committed r69742: &lt;http://trac.webkit.org/changeset/69742&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294020</commentid>
    <comment_count>129</comment_count>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2010-10-14 02:09:30 -0700</bug_when>
    <thetext>(In reply to comment #128)
&gt; http://trac.webkit.org/changeset/69742 seems to have broken Gtk builds:
&gt; 
&gt; http://build.webkit.org/builders/GTK%20Linux%2032-bit%20Release/builds/6599/steps/compile-webkit/logs
&gt; 
&gt; ../../WebCore/platform/network/soup/ResourceHandleSoup.cpp: In function ‘void WebCore::sendRequestCallback(GObject*, GAsyncResult*, void*)’:
&gt; ../../WebCore/platform/network/soup/ResourceHandleSoup.cpp:495: error: ‘soupMessage’ was not declared in this scope
&gt; make[1]: *** [WebCore/platform/network/soup/libwebkitgtk_1_0_la-ResourceHandleSoup.lo] Error 1
&gt; make[1]: Leaving directory `/var/lib/buildbot/build/gtk-linux-32-release/build/WebKitBuild/Release&apos;
&gt; make: *** [all] Error 2
&gt; 
&gt; (In reply to comment #127)
&gt; &gt; Committed r69742: &lt;http://trac.webkit.org/changeset/69742&gt;

Fixed here, thanks for the report:

http://trac.webkit.org/changeset/69748</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64849</attachid>
            <date>2010-08-19 07:35:29 -0700</date>
            <delta_ts>2010-08-23 09:57:13 -0700</delta_ts>
            <desc>HTTP cache for WebKitGtk+</desc>
            <filename>webkitgtk+-cache.patch</filename>
            <type>text/plain</type>
            <size>382964</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0dOVW1ha2VmaWxlLmFtIGIvR05VbWFrZWZpbGUuYW0KaW5kZXggOTE2NTNj
Zi4uMWM4MjU2MyAxMDA2NDQKLS0tIGEvR05VbWFrZWZpbGUuYW0KKysrIGIvR05VbWFrZWZpbGUu
YW0KQEAgLTMyMCw2ICszMjAsNyBAQCB3ZWJraXRndGtfc3RhdGljX2hfYXBpICs9IFwKIAkkKHNy
Y2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0bmV0d29ya3JlcXVlc3QuaCBcCiAJJChzcmNk
aXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdG5ldHdvcmtyZXNwb25zZS5oIFwKIAkkKHNyY2Rp
cikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c291cGF1dGhkaWFsb2cuaCBcCisJJChzcmNkaXIp
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNvdXBjYWNoZS5oIFwKIAkkKHNyY2RpcikvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0d2ViYmFja2ZvcndhcmRsaXN0LmggXAogCSQoc3JjZGlyKS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkYXRhc291cmNlLmggXAogCSQoc3JjZGlyKS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5oIFwKQEAgLTc1MSw2ICs3NTIsNyBAQCB3ZWJraXRn
dGtfc291cmNlcyArPSBcCiAJV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGll
bnRHdGsuaCBcCiAJV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9QYXN0ZWJvYXJkSGVscGVyR3Rr
LmNwcCBcCiAJV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9QYXN0ZWJvYXJkSGVscGVyR3RrLmgg
XAorCVdlYktpdC9ndGsvd2Via2l0L3RwbC5jIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRh
cHBsaWNhdGlvbmNhY2hlLmNwcCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQu
Y3BwIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRlcnJvci5jcHAgXApAQCAtNzYwLDYgKzc2
Miw3IEBAIHdlYmtpdGd0a19zb3VyY2VzICs9IFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRw
cml2YXRlLmNwcCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oIFwKIAlXZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXRzb3VwYXV0aGRpYWxvZy5jIFwKKwlXZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRzb3VwY2FjaGUuY3BwIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2ZXJzaW9u
LmNwcCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViYmFja2ZvcndhcmRsaXN0LmNwcCBc
CiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YXNvdXJjZS5jcHAgXApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXgg
NjIzN2ZjNy4uZDIwY2M5ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysg
Yi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0yNTM5LDYgKzI1MzksMjIgQEAgd2ViY29yZWd0
a19zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJl
cXVlc3RTb3VwLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VS
ZXNwb25zZS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlc3Bv
bnNlU291cC5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL3dlYmtpdHNvdXBj
YWNoZWNvcmUuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJraXRzb3Vw
ZGlyZWN0b3J5aW5wdXRzdHJlYW0uY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC93ZWJraXRzb3VwaHR0cGlucHV0c3RyZWFtLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvd2Via2l0c291cHJlcXVlc3QuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC93ZWJraXRzb3VwcmVxdWVzdGRhdGEuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC93ZWJraXRzb3VwcmVxdWVzdGVyLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvd2Via2l0c291cHJlcXVlc3RmaWxlLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvd2Via2l0c291cHJlcXVlc3RodHRwLmNwcCBcCisJV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvd2Via2l0c291cGNhY2hlY29yZS5oIFwKKwlXZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC93ZWJraXRzb3VwZGlyZWN0b3J5aW5wdXRzdHJlYW0uaCBcCisJV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvd2Via2l0c291cGh0dHBpbnB1dHN0cmVhbS5oIFwK
KwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJraXRzb3VwcmVxdWVzdC5oIFwKKwlX
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJraXRzb3VwcmVxdWVzdGRhdGEuaCBcCisJ
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvd2Via2l0c291cHJlcXVlc3Rlci5oIFwKKwlX
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJraXRzb3VwcmVxdWVzdGZpbGUuaCBcCisJ
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvd2Via2l0c291cHJlcXVlc3RodHRwLmggXAog
CVdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YUd0ay5jcHAgXAogCVdlYkNvcmUvcGx1Z2lu
cy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHAgXAogCVdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2lu
Vmlld0d0ay5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlSGFuZGxlSW50ZXJuYWwuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhh
bmRsZUludGVybmFsLmgKaW5kZXggN2I2ZTk2MC4uNDUyMWRlYyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCkBAIC00Niw3ICs0Niwx
MCBAQAogI2VuZGlmCiAKICNpZiBVU0UoU09VUCkKKyNpbmNsdWRlIDxHUmVmUHRyLmg+CiAjaW5j
bHVkZSA8bGlic291cC9zb3VwLmg+CisjaW5jbHVkZSAid2Via2l0c291cHJlcXVlc3QuaCIKKyNp
bmNsdWRlICJ3ZWJraXRzb3VwcmVxdWVzdGVyLmgiCiBjbGFzcyBGcmFtZTsKICNlbmRpZgogCkBA
IC0xMTUsNyArMTE4LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIFVTRShTT1VQKQogICAg
ICAgICAgICAgLCBtX21zZygwKQogICAgICAgICAgICAgLCBtX2NhbmNlbGxlZChmYWxzZSkKLSAg
ICAgICAgICAgICwgbV9nZmlsZSgwKQorICAgICAgICAgICAgLCBtX3JlcSgwKQorICAgICAgICAg
ICAgLCBtX3JlcXVlc3RlcigwKQogICAgICAgICAgICAgLCBtX2lucHV0U3RyZWFtKDApCiAgICAg
ICAgICAgICAsIG1fY2FuY2VsbGFibGUoMCkKICAgICAgICAgICAgICwgbV9idWZmZXIoMCkKQEAg
LTEyMyw2ICsxMjcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAsIG1fdG90
YWwoMCkKICAgICAgICAgICAgICwgbV9pZGxlSGFuZGxlcigwKQogICAgICAgICAgICAgLCBtX2Zy
YW1lKDApCisgICAgICAgICAgICAsIG1fZ290Q2h1bmtIYW5kbGVyKDApCiAjZW5kaWYKICNpZiBQ
TEFURk9STShRVCkKICAgICAgICAgICAgICwgbV9qb2IoMCkKQEAgLTE0MCw2ICsxNDUsOSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBtX3VzZXIgPSB1cmwudXNlcigpOwogICAg
ICAgICAgICAgbV9wYXNzID0gdXJsLnBhc3MoKTsKICAgICAgICAgICAgIG1fZmlyc3RSZXF1ZXN0
LnJlbW92ZUNyZWRlbnRpYWxzKCk7CisjaWYgVVNFKFNPVVApCisgICAgICAgICAgICBtX3JlcXVl
c3RlciA9IHdlYmtpdF9zb3VwX3JlcXVlc3Rlcl9uZXcoKTsKKyNlbmRpZgogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICB+UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCgpOwpAQCAtMTk4LDEzICsy
MDYsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTb3VwTWVzc2FnZSogbV9tc2c7
CiAgICAgICAgIFJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKICAgICAgICAgYm9vbCBtX2Nh
bmNlbGxlZDsKLSAgICAgICAgR0ZpbGUqIG1fZ2ZpbGU7CisgICAgICAgIEdSZWZQdHI8V2ViS2l0
U291cFJlcXVlc3Q+IG1fcmVxOworCUdSZWZQdHI8V2ViS2l0U291cFJlcXVlc3Rlcj4gbV9yZXF1
ZXN0ZXI7CiAgICAgICAgIEdJbnB1dFN0cmVhbSogbV9pbnB1dFN0cmVhbTsKICAgICAgICAgR0Nh
bmNlbGxhYmxlKiBtX2NhbmNlbGxhYmxlOwogICAgICAgICBjaGFyKiBtX2J1ZmZlcjsKICAgICAg
ICAgZ3NpemUgbV9idWZmZXJTaXplLCBtX3RvdGFsOwogICAgICAgICBndWludCBtX2lkbGVIYW5k
bGVyOwogICAgICAgICBGcmFtZSogbV9mcmFtZTsKKyAgICAgICAgZ3Vsb25nIG1fZ290Q2h1bmtI
YW5kbGVyOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oUVQpCiAgICAgICAgIFFOZXR3b3JrUmVwbHlI
YW5kbGVyKiBtX2pvYjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3Vw
L1Jlc291cmNlSGFuZGxlU291cC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9S
ZXNvdXJjZUhhbmRsZVNvdXAuY3BwCmluZGV4IDk2YTJmMjUuLmI1ODZlMjIgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcApA
QCAtNSw3ICs1LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOSBIb2xnZXIgSGFucyBQZXRlciBG
cmV5dGhlcgogICogQ29weXJpZ2h0IChDKSAyMDA5IEd1c3Rhdm8gTm9yb25oYSBTaWx2YSA8Z25z
QGdub21lLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOSBDaHJpc3RpYW4gRHl3YW4gPGNocmlz
dGlhbkBpbWVuZGlvLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBJZ2FsaWEgUy5MLgorICog
Q29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIElnYWxpYSBTLkwuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgSm9obiBLamVsbGJlcmcgPGpvaG4ua2plbGxiZXJnQHBvd2VyLmFsc3RvbS5jb20+CiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgpAQCAtNDcsNiArNDcsOCBAQAogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2lu
Y2x1ZGUgIlRleHRFbmNvZGluZy5oIgogCisjaW5jbHVkZSAid2Via2l0c291cHJlcXVlc3RodHRw
LmgiCisKICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8
Z2lvL2dpby5oPgpAQCAtMTIwLDggKzEyMiwxMCBAQCB2b2lkIFdlYkNvcmVTeW5jaHJvbm91c0xv
YWRlcjo6cnVuKCkKICAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwogfQogCi1z
dGF0aWMgdm9pZCBjbGVhbnVwR2lvT3BlcmF0aW9uKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGJv
b2wgaXNEZXN0cm95aW5nKTsKLXN0YXRpYyBib29sIHN0YXJ0RGF0YShSZXNvdXJjZUhhbmRsZSog
aGFuZGxlLCBTdHJpbmcgdXJsU3RyaW5nKTsKK3N0YXRpYyB2b2lkIGNsZWFudXBTb3VwUmVxdWVz
dE9wZXJhdGlvbihSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBib29sIGlzRGVzdHJveWluZyk7Citz
dGF0aWMgdm9pZCBzZW5kUmVxdWVzdENhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVz
dWx0KiByZXMsIGdwb2ludGVyKTsKK3N0YXRpYyB2b2lkIHJlYWRDYWxsYmFjayhHT2JqZWN0KiBz
b3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzLCBncG9pbnRlcik7CitzdGF0aWMgdm9pZCBjbG9zZUNh
bGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXMsIGdwb2ludGVyKTsKIHN0
YXRpYyBib29sIHN0YXJ0R2lvKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIEtVUkwgdXJsKTsKIAog
UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6flJlc291cmNlSGFuZGxlSW50ZXJuYWwoKQpAQCAtMTMx
LDYgKzEzNSwxMSBAQCBSZXNvdXJjZUhhbmRsZUludGVybmFsOjp+UmVzb3VyY2VIYW5kbGVJbnRl
cm5hbCgpCiAgICAgICAgIG1fbXNnID0gMDsKICAgICB9CiAKKyAgICBpZiAobV9yZXEpIHsKKyAg
ICAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QobV9yZXEuZ2V0KCkpLCAid2Via2l0LXJl
c291cmNlIiwgMCk7CisgICAgICAgIG1fcmVxLmNsZWFyKCk7CisgICAgfQorCiAgICAgaWYgKG1f
aWRsZUhhbmRsZXIpIHsKICAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1faWRsZUhhbmRsZXIpOwog
ICAgICAgICBtX2lkbGVIYW5kbGVyID0gMDsKQEAgLTE0Myw3ICsxNTIsNyBAQCBSZXNvdXJjZUhh
bmRsZTo6flJlc291cmNlSGFuZGxlKCkKICAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29u
bmVjdF9tYXRjaGVkKGQtPm1fbXNnLCBHX1NJR05BTF9NQVRDSF9EQVRBLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgdGhpcyk7CiAKLSAg
ICBjbGVhbnVwR2lvT3BlcmF0aW9uKHRoaXMsIHRydWUpOworICAgIGNsZWFudXBTb3VwUmVxdWVz
dE9wZXJhdGlvbih0aGlzLCB0cnVlKTsKIH0KIAogdm9pZCBSZXNvdXJjZUhhbmRsZTo6cHJlcGFy
ZUZvclVSTChjb25zdCBLVVJMICZ1cmwpCkBAIC0xODUsOSArMTk0LDggQEAgc3RhdGljIHZvaWQg
cmVzdGFydGVkQ2FsbGJhY2soU291cE1lc3NhZ2UqIG1zZywgZ3BvaW50ZXIgZGF0YSkKICAgICBp
ZiAoZC0+bV9jYW5jZWxsZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNoYXIqIHVyaSA9IHNv
dXBfdXJpX3RvX3N0cmluZyhzb3VwX21lc3NhZ2VfZ2V0X3VyaShtc2cpLCBmYWxzZSk7Ci0gICAg
U3RyaW5nIGxvY2F0aW9uID0gU3RyaW5nKHVyaSk7Ci0gICAgZ19mcmVlKHVyaSk7CisgICAgR093
blB0cjxjaGFyPiB1cmkoc291cF91cmlfdG9fc3RyaW5nKHNvdXBfbWVzc2FnZV9nZXRfdXJpKG1z
ZyksIGZhbHNlKSk7CisgICAgU3RyaW5nIGxvY2F0aW9uID0gU3RyaW5nKHVyaS5nZXQoKSk7CiAg
ICAgS1VSTCBuZXdVUkwgPSBLVVJMKGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCksIGxvY2F0
aW9uKTsKIAogICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0ID0gaGFuZGxlLT5maXJzdFJlcXVl
c3QoKTsKQEAgLTI5Myw1MiArMzAxLDExIEBAIHN0YXRpYyB2b2lkIGdvdENodW5rQ2FsbGJhY2so
U291cE1lc3NhZ2UqIG1zZywgU291cEJ1ZmZlciogY2h1bmssIGdwb2ludGVyIGRhdGEpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURhdGEoaGFuZGxlLmdldCgpLCBj
aHVuay0+ZGF0YSwgY2h1bmstPmxlbmd0aCwgZmFsc2UpOwotfQotCi0vLyBDYWxsZWQgYXQgdGhl
IGVuZCBvZiB0aGUgbWVzc2FnZSwgd2l0aCBhbGwgdGhlIG5lY2Vzc2FyeSBhYm91dCB0aGUgbGFz
dCBpbmZvcm1hdGlvbnMuCi0vLyBEb2Vzbid0IGdldCBjYWxsZWQgZm9yIHJlZGlyZWN0cy4KLXN0
YXRpYyB2b2lkIGZpbmlzaGVkQ2FsbGJhY2soU291cFNlc3Npb24gKnNlc3Npb24sIFNvdXBNZXNz
YWdlKiBtc2csIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBo
YW5kbGUgPSBhZG9wdFJlZihzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGRhdGEpKTsKLSAg
ICAvLyBUT0RPOiBtYXliZSB3ZSBzaG91bGQgcnVuIHRoaXMgY29kZSBldmVuIGlmIHRoZXJlJ3Mg
bm8gY2xpZW50PwotICAgIGlmICghaGFuZGxlKQotICAgICAgICByZXR1cm47CiAKLSAgICBSZXNv
dXJjZUhhbmRsZUludGVybmFsKiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOwotCi0gICAgUmVz
b3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCA9IGhhbmRsZS0+Y2xpZW50KCk7Ci0gICAgaWYgKCFj
bGllbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChkLT5tX2NhbmNlbGxlZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKFNPVVBfU1RBVFVTX0lTX1RSQU5TUE9SVF9FUlJPUihtc2ct
PnN0YXR1c19jb2RlKSkgewotICAgICAgICBjaGFyKiB1cmkgPSBzb3VwX3VyaV90b19zdHJpbmco
c291cF9tZXNzYWdlX2dldF91cmkobXNnKSwgZmFsc2UpOwotICAgICAgICBSZXNvdXJjZUVycm9y
IGVycm9yKGdfcXVhcmtfdG9fc3RyaW5nKFNPVVBfSFRUUF9FUlJPUiksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbXNnLT5zdGF0dXNfY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1cmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOjpmcm9tVVRGOCht
c2ctPnJlYXNvbl9waHJhc2UpKTsKLSAgICAgICAgZ19mcmVlKHVyaSk7Ci0gICAgICAgIGNsaWVu
dC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIGVycm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmIChtc2ctPnN0YXR1c19jb2RlID09IFNPVVBfU1RBVFVTX1VOQVVUSE9SSVpFRCkg
ewotICAgICAgICBmaWxsUmVzcG9uc2VGcm9tTWVzc2FnZShtc2csICZkLT5tX3Jlc3BvbnNlKTsK
LSAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UoaGFuZGxlLmdldCgpLCBkLT5tX3Jl
c3BvbnNlKTsKLQotICAgICAgICAvLyBXZWJDb3JlIG1pZ2h0IGhhdmUgY2FuY2VsbGVkIHRoZSBq
b2IgaW4gdGhlIHdoaWxlCi0gICAgICAgIGlmIChkLT5tX2NhbmNlbGxlZCkKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICBpZiAobXNnLT5yZXNwb25zZV9ib2R5LT5kYXRhKQotICAgICAg
ICAgICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0YShoYW5kbGUuZ2V0KCksIG1zZy0+cmVzcG9uc2Vf
Ym9keS0+ZGF0YSwgbXNnLT5yZXNwb25zZV9ib2R5LT5sZW5ndGgsIHRydWUpOwotICAgIH0KLQot
ICAgIGNsaWVudC0+ZGlkRmluaXNoTG9hZGluZyhoYW5kbGUuZ2V0KCkpOwogfQogCisjZGVmaW5l
IEJVRkZFUl9TSVpFIDgxOTIKKwogLy8gcGFyc2VEYXRhVXJsKCkgaXMgdGFrZW4gZnJvbSB0aGUg
Q1VSTCBodHRwIGJhY2tlbmQuCiBzdGF0aWMgZ2Jvb2xlYW4gcGFyc2VEYXRhVXJsKGdwb2ludGVy
IGNhbGxiYWNrRGF0YSkKIHsKQEAgLTM2NCw3ICszMzEsNiBAQCBzdGF0aWMgZ2Jvb2xlYW4gcGFy
c2VEYXRhVXJsKGdwb2ludGVyIGNhbGxiYWNrRGF0YSkKICAgICB9CiAKICAgICBTdHJpbmcgbWVk
aWFUeXBlID0gdXJsLnN1YnN0cmluZyg1LCBpbmRleCAtIDUpOwotICAgIFN0cmluZyBkYXRhID0g
dXJsLnN1YnN0cmluZyhpbmRleCArIDEpOwogCiAgICAgYm9vbCBpc0Jhc2U2NCA9IG1lZGlhVHlw
ZS5lbmRzV2l0aCgiO2Jhc2U2NCIsIGZhbHNlKTsKICAgICBpZiAoaXNCYXNlNjQpCkBAIC0zODEs
NyArMzQ3LDYgQEAgc3RhdGljIGdib29sZWFuIHBhcnNlRGF0YVVybChncG9pbnRlciBjYWxsYmFj
a0RhdGEpCiAgICAgcmVzcG9uc2Uuc2V0TWltZVR5cGUobWltZVR5cGUpOwogCiAgICAgaWYgKGlz
QmFzZTY0KSB7Ci0gICAgICAgIGRhdGEgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoZGF0YSk7
CiAgICAgICAgIHJlc3BvbnNlLnNldFRleHRFbmNvZGluZ05hbWUoY2hhcnNldCk7CiAgICAgICAg
IGNsaWVudC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGhhbmRsZSwgcmVzcG9uc2UpOwogCkBAIC0zOTAs
MzIgKzM1NSw0MSBAQCBzdGF0aWMgZ2Jvb2xlYW4gcGFyc2VEYXRhVXJsKGdwb2ludGVyIGNhbGxi
YWNrRGF0YSkKICAgICAgICAgLy8gb3V0IGluIGVpdGhlciBvZiB0aG9zZSBjYXNlcy4KICAgICAg
ICAgaWYgKGQtPm1fY2FuY2VsbGVkIHx8ICFoYW5kbGUtPmNsaWVudCgpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8vIFVzZSB0aGUgR0xpYiBCYXNlNjQsIHNpbmNlIFdl
YkNvcmUncyBkZWNvZGVyIGlzbid0Ci0gICAgICAgIC8vIGdlbmVyYWwtcHVycG9zZSBhbmQgZmFp
bHMgb24gQWNpZDMgdGVzdCA5NyAod2hpdGVzcGFjZSkuCi0gICAgICAgIHNpemVfdCBvdXRMZW5n
dGggPSAwOwotICAgICAgICBjaGFyKiBvdXREYXRhID0gMDsKLSAgICAgICAgb3V0RGF0YSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGdfYmFzZTY0X2RlY29kZShkYXRhLnV0ZjgoKS5kYXRhKCks
ICZvdXRMZW5ndGgpKTsKLSAgICAgICAgaWYgKG91dERhdGEgJiYgb3V0TGVuZ3RoID4gMCkKLSAg
ICAgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURhdGEoaGFuZGxlLCBvdXREYXRhLCBvdXRMZW5n
dGgsIDApOwotICAgICAgICBnX2ZyZWUob3V0RGF0YSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAg
Ly8gV2UgaGF2ZSB0byBjb252ZXJ0IHRvIFVURi0xNiBlYXJseSBkdWUgdG8gbGltaXRhdGlvbnMg
aW4gS1VSTAotICAgICAgICBkYXRhID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGRhdGEsIFRl
eHRFbmNvZGluZyhjaGFyc2V0KSk7CiAgICAgICAgIHJlc3BvbnNlLnNldFRleHRFbmNvZGluZ05h
bWUoIlVURi0xNiIpOwogICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShoYW5kbGUs
IHJlc3BvbnNlKTsKIAogICAgICAgICBpZiAoZC0+bV9jYW5jZWxsZWQgfHwgIWhhbmRsZS0+Y2xp
ZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKGRhdGEubGVu
Z3RoKCkgPiAwKQotICAgICAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0YShoYW5kbGUsIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEuY2hhcmFjdGVycygpKSwgZGF0YS5sZW5n
dGgoKSAqIHNpemVvZihVQ2hhciksIDApOwogICAgIH0KIAogICAgIGlmIChkLT5tX2NhbmNlbGxl
ZCB8fCAhaGFuZGxlLT5jbGllbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY2xp
ZW50LT5kaWRGaW5pc2hMb2FkaW5nKGhhbmRsZSk7CisgICAgU291cFNlc3Npb24qIHNlc3Npb24g
PSBoYW5kbGUtPmRlZmF1bHRTZXNzaW9uKCk7CisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOwor
CisgICAgZC0+bV9yZXEgPSB3ZWJraXRfc291cF9yZXF1ZXN0ZXJfcmVxdWVzdChkLT5tX3JlcXVl
c3Rlci5nZXQoKSwgaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpLCBzZXNzaW9uLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGlmIChlcnJvcikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgR0lucHV0U3RyZWFtKiBpbiA9IHdlYmtpdFNvdXBSZXF1
ZXN0U2VuZChkLT5tX3JlcS5nZXQoKSwgMCwgJmVycm9yLm91dFB0cigpKTsKKyAgICBpZiAoZXJy
b3IpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGQtPm1faW5wdXRTdHJlYW0gPSBpbjsK
KyAgICBkLT5tX2J1ZmZlclNpemUgPSBCVUZGRVJfU0laRTsKKyAgICBkLT5tX2J1ZmZlciA9IHN0
YXRpY19jYXN0PGNoYXIqPihnX21hbGxvYyhkLT5tX2J1ZmZlclNpemUpKTsKKyAgICBkLT5tX3Rv
dGFsID0gMDsKKworICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1faW5wdXRTdHJl
YW0pLCAid2Via2l0LXJlc291cmNlIiwgaGFuZGxlKTsKKyAgICBoYW5kbGUtPnJlZigpOworCisg
ICAgZC0+bV9jYW5jZWxsYWJsZSA9IGdfY2FuY2VsbGFibGVfbmV3KCk7CisgICAgZ19pbnB1dF9z
dHJlYW1fcmVhZF9hc3luYyhkLT5tX2lucHV0U3RyZWFtLCBkLT5tX2J1ZmZlciwgZC0+bV9idWZm
ZXJTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QUklPUklUWV9ERUZBVUxU
LCBkLT5tX2NhbmNlbGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZENh
bGxiYWNrLCAoaXNCYXNlNjQpID8gMCA6IEdJTlRfVE9fUE9JTlRFUigxKSk7CiAKICAgICByZXR1
cm4gZmFsc2U7CiB9CkBAIC00MjgsNyArNDAyLDcgQEAgc3RhdGljIGJvb2wgc3RhcnREYXRhKFJl
c291cmNlSGFuZGxlKiBoYW5kbGUsIFN0cmluZyB1cmxTdHJpbmcpCiAKICAgICAvLyBJZiBwYXJz
ZURhdGFVcmwgaXMgY2FsbGVkIHN5bmNocm9ub3VzbHkgdGhlIGpvYiBpcyBub3QgeWV0IGVmZmVj
dGl2ZWx5IHN0YXJ0ZWQKICAgICAvLyBhbmQgd2Via2l0IHdvbid0IG5ldmVyIGtub3cgdGhhdCB0
aGUgZGF0YSBoYXMgYmVlbiBwYXJzZWQgZXZlbiBkaWRGaW5pc2hMb2FkaW5nIGlzIGNhbGxlZC4K
LSAgICBkLT5tX2lkbGVIYW5kbGVyID0gZ190aW1lb3V0X2FkZCgwLCBwYXJzZURhdGFVcmwsIGhh
bmRsZSk7CisgICAgZC0+bV9pZGxlSGFuZGxlciA9IGdfaWRsZV9hZGQocGFyc2VEYXRhVXJsLCBo
YW5kbGUpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC00NjQsMTEgKzQzOCwxNDggQEAgc3Rh
dGljIHZvaWQgZW5zdXJlU2Vzc2lvbklzSW5pdGlhbGl6ZWQoU291cFNlc3Npb24qIHNlc3Npb24p
CiAgICAgZ19vYmplY3Rfc2V0KHNlc3Npb24sCiAgICAgICAgICAgICAgICAgIFNPVVBfU0VTU0lP
Tl9NQVhfQ09OTlMsIE1BWF9DT05ORUNUSU9OUywKICAgICAgICAgICAgICAgICAgU09VUF9TRVNT
SU9OX01BWF9DT05OU19QRVJfSE9TVCwgTUFYX0NPTk5FQ1RJT05TX1BFUl9IT1NULAotICAgICAg
ICAgICAgICAgICBOVUxMKTsKKyAgICAgICAgICAgICAgICAgMCk7CiAKICAgICBnX29iamVjdF9z
ZXRfZGF0YShHX09CSkVDVChzZXNzaW9uKSwgIndlYmtpdC1pbml0IiwgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oMHhkZWFkYmVlZikpOwogfQogCitzdGF0aWMgdm9pZCBjbGVhbnVwU291cFJlcXVl
c3RPcGVyYXRpb24oUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgYm9vbCBpc0Rlc3Ryb3lpbmcgPSBm
YWxzZSkKK3sKKyAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0gaGFuZGxlLT5nZXRJbnRl
cm5hbCgpOworCisgICAgaWYgKGQtPm1fcmVxKSB7CisgICAgICAgIGdfb2JqZWN0X3NldF9kYXRh
KEdfT0JKRUNUKGQtPm1fcmVxLmdldCgpKSwgIndlYmtpdC1yZXNvdXJjZSIsIDApOworICAgICAg
ICBkLT5tX3JlcS5jbGVhcigpOworICAgIH0KKworICAgIGlmIChkLT5tX2NhbmNlbGxhYmxlKSB7
CisgICAgICAgIGdfb2JqZWN0X3VucmVmKGQtPm1fY2FuY2VsbGFibGUpOworICAgICAgICBkLT5t
X2NhbmNlbGxhYmxlID0gMDsKKyAgICB9CisKKyAgICBpZiAoZC0+bV9pbnB1dFN0cmVhbSkgewor
ICAgICAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5tX2lucHV0U3RyZWFtKSwgIndl
YmtpdC1yZXNvdXJjZSIsIDApOworICAgICAgICBnX29iamVjdF91bnJlZihkLT5tX2lucHV0U3Ry
ZWFtKTsKKyAgICAgICAgZC0+bV9pbnB1dFN0cmVhbSA9IDA7CisgICAgfQorCisgICAgaWYgKGQt
Pm1fYnVmZmVyKSB7CisgICAgICAgIGdfZnJlZShkLT5tX2J1ZmZlcik7CisgICAgICAgIGQtPm1f
YnVmZmVyID0gMDsKKyAgICB9CisKKyAgICBpZiAoIWlzRGVzdHJveWluZykKKyAgICAgICAgaGFu
ZGxlLT5kZXJlZigpOworfQorCitzdGF0aWMgdm9pZCBzZW5kUmVxdWVzdENhbGxiYWNrKEdPYmpl
Y3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXMsIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAg
IFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5k
bGUqPihnX29iamVjdF9nZXRfZGF0YShzb3VyY2UsICJ3ZWJraXQtcmVzb3VyY2UiKSk7CisgICAg
aWYgKCFoYW5kbGUpCisgICAgICAgIHJldHVybjsKKworICAgIFJlc291cmNlSGFuZGxlSW50ZXJu
YWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFsKCk7CisgICAgUmVzb3VyY2VIYW5kbGVDbGllbnQq
IGNsaWVudCA9IGhhbmRsZS0+Y2xpZW50KCk7CisKKyAgICBpZiAoZC0+bV9nb3RDaHVua0hhbmRs
ZXIpIHsKKyAgICAgICAgLy8gTm8gbmVlZCB0byBjYWxsIGdvdENodW5rSGFuZGxlciBhbnltb3Jl
LiBSZWNlaXZlZCBkYXRhIHdpbGwKKyAgICAgICAgLy8gYmUgcmVwb3J0ZWQgYnkgcmVhZENhbGxi
YWNrCisgICAgICAgIGlmIChnX3NpZ25hbF9oYW5kbGVyX2lzX2Nvbm5lY3RlZChkLT5tX21zZywg
ZC0+bV9nb3RDaHVua0hhbmRsZXIpKQorICAgICAgICAgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNj
b25uZWN0KGQtPm1fbXNnLCBkLT5tX2dvdENodW5rSGFuZGxlcik7CisgICAgfQorCisgICAgaWYg
KGQtPm1fY2FuY2VsbGVkIHx8ICFjbGllbnQpIHsKKyAgICAgICAgY2xlYW51cFNvdXBSZXF1ZXN0
T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBH
T3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgR0lucHV0U3RyZWFtKiBpbiA9IHdlYmtpdFNvdXBS
ZXF1ZXN0U2VuZEZpbmlzaChkLT5tX3JlcS5nZXQoKSwgcmVzLCAmZXJyb3Iub3V0UHRyKCkpOwor
CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIGlmIChkLT5tX21zZyAmJiBTT1VQX1NUQVRVU19J
U19UUkFOU1BPUlRfRVJST1IoZC0+bV9tc2ctPnN0YXR1c19jb2RlKSkgeworICAgICAgICAgICAg
U291cFVSSSogdXJpID0gd2Via2l0U291cFJlcXVlc3RHZXRVcmkoZC0+bV9yZXEuZ2V0KCkpOwor
ICAgICAgICAgICAgR093blB0cjxjaGFyPiB1cmlTdHIoc291cF91cmlfdG9fc3RyaW5nKHVyaSwg
ZmFsc2UpKTsKKyAgICAgICAgICAgIFJlc291cmNlRXJyb3IgcmVzb3VyY2VFcnJvcihnX3F1YXJr
X3RvX3N0cmluZyhTT1VQX0hUVFBfRVJST1IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGQtPm1fbXNnLT5zdGF0dXNfY29kZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1cmlTdHIuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU3RyaW5nOjpmcm9tVVRGOChkLT5tX21zZy0+cmVhc29uX3BocmFz
ZSkpOworICAgICAgICAgICAgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKGhhbmRsZS5nZXQo
KSk7CisgICAgICAgICAgICBjbGllbnQtPmRpZEZhaWwoaGFuZGxlLmdldCgpLCByZXNvdXJjZUVy
cm9yKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlcnJv
ci0+ZG9tYWluID09IEdfSU9fRVJST1IpIHsKKyAgICAgICAgICAgIFNvdXBVUkkqIHVyaSA9IHdl
YmtpdFNvdXBSZXF1ZXN0R2V0VXJpKGQtPm1fcmVxLmdldCgpKTsKKyAgICAgICAgICAgIEdPd25Q
dHI8Y2hhcj4gdXJpU3RyKHNvdXBfdXJpX3RvX3N0cmluZyh1cmksIGZhbHNlKSk7CisgICAgICAg
ICAgICBSZXNvdXJjZUVycm9yIHJlc291cmNlRXJyb3IoZ19xdWFya190b19zdHJpbmcoR19JT19F
UlJPUiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3ItPmNv
ZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpU3RyLmdldCgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID8gU3RyaW5n
Ojpmcm9tVVRGOChlcnJvci0+bWVzc2FnZSkgOiBTdHJpbmcoKSk7CisgICAgICAgICAgICBjbGVh
bnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKKyAgICAgICAgICAgIGNsaWVu
dC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIHJlc291cmNlRXJyb3IpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGQtPm1fbXNnICYmIGQtPm1fbXNnLT5zdGF0
dXNfY29kZSA9PSBTT1VQX1NUQVRVU19VTkFVVEhPUklaRUQpIHsKKyAgICAgICAgICAgIGZpbGxS
ZXNwb25zZUZyb21NZXNzYWdlKGQtPm1fbXNnLCAmZC0+bV9yZXNwb25zZSk7CisgICAgICAgICAg
ICBjbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShoYW5kbGUuZ2V0KCksIGQtPm1fcmVzcG9uc2Up
OworCisgICAgICAgICAgICAvLyBXZWJDb3JlIG1pZ2h0IGhhdmUgY2FuY2VsbGVkIHRoZSBqb2Ig
aW4gdGhlIHdoaWxlCisgICAgICAgICAgICBpZiAoZC0+bV9jYW5jZWxsZWQpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoZC0+bV9tc2ctPnJlc3BvbnNlX2JvZHkt
PmRhdGEpCisgICAgICAgICAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0YShoYW5kbGUuZ2V0
KCksIGQtPm1fbXNnLT5yZXNwb25zZV9ib2R5LT5kYXRhLCBkLT5tX21zZy0+cmVzcG9uc2VfYm9k
eS0+bGVuZ3RoLCB0cnVlKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGRpZFJlY2VpdmVEYXRh
IGFib3ZlIG1pZ2h0IGhhdmUgY2FuY2VsbGVkIGl0CisgICAgICAgIGlmIChkLT5tX2NhbmNlbGxl
ZCB8fCAhY2xpZW50KSB7CisgICAgICAgICAgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKGhh
bmRsZS5nZXQoKSk7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY2xp
ZW50LT5kaWRGaW5pc2hMb2FkaW5nKGhhbmRsZS5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoZC0+bV9jYW5jZWxsZWQpIHsKKyAgICAgICAgY2xlYW51cFNvdXBSZXF1
ZXN0T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBkLT5tX2lucHV0U3RyZWFtID0gaW47CisgICAgZC0+bV9idWZmZXJTaXplID0gQlVGRkVSX1NJ
WkU7CisgICAgZC0+bV9idWZmZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oZ19tYWxsb2MoZC0+bV9i
dWZmZXJTaXplKSk7CisgICAgZC0+bV90b3RhbCA9IDA7CisKKyAgICAvLyByZWFkQ2FsbGJhY2sg
bmVlZHMgaXQKKyAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5tX2lucHV0U3RyZWFt
KSwgIndlYmtpdC1yZXNvdXJjZSIsIGhhbmRsZS5nZXQoKSk7CisKKyAgICAvLyBXZSBuZWVkIHRv
IGNoZWNrIGlmIGl0J3MgYSBmaWxlOiBVUkwgYW5kIGlmIGl0IGlzIGEgcmVndWxhcgorICAgIC8v
IGZpbGUgYXMgaXQgY291bGQgYmUgYSBkaXJlY3RvcnkuIEluIHRoYXQgY2FzZSBTb3VwIHByb3Bl
cmx5CisgICAgLy8gcmV0dXJucyBhIHN0cmVhbSB3aG9zZSBjb250ZW50IGlzIGEgSFRNTCB3aXRo
IGEgbGlzdCBvZiBmaWxlcworICAgIC8vIGluIHRoZSBkaXJlY3RvcnkKKyAgICBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2UoaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKS5wcm90b2NvbCgpLCAiZmls
ZSIpCisgICAgICAgICYmIEdfSVNfRklMRV9JTlBVVF9TVFJFQU0oaW4pKSB7CisgICAgICAgIFJl
c291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CisKKyAgICAgICAgcmVzcG9uc2Uuc2V0VVJMKGhhbmRs
ZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkpOworICAgICAgICByZXNwb25zZS5zZXRNaW1lVHlwZSh3
ZWJraXRTb3VwUmVxdWVzdEdldENvbnRlbnRUeXBlKGQtPm1fcmVxLmdldCgpKSk7CisgICAgICAg
IHJlc3BvbnNlLnNldEV4cGVjdGVkQ29udGVudExlbmd0aCh3ZWJraXRTb3VwUmVxdWVzdEdldENv
bnRlbnRMZW5ndGgoZC0+bV9yZXEuZ2V0KCkpKTsKKyAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZl
UmVzcG9uc2UoaGFuZGxlLmdldCgpLCByZXNwb25zZSk7CisKKyAgICAgICAgaWYgKGQtPm1fY2Fu
Y2VsbGVkKSB7CisgICAgICAgICAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxl
LmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGdf
aW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMoZC0+bV9pbnB1dFN0cmVhbSwgZC0+bV9idWZmZXIsIGQt
Pm1fYnVmZmVyU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUFJJT1JJVFlf
REVGQVVMVCwgZC0+bV9jYW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlYWRDYWxsYmFjaywgMCk7Cit9CisKIHN0YXRpYyBib29sIHN0YXJ0SHR0cChSZXNvdXJjZUhh
bmRsZSogaGFuZGxlKQogewogICAgIEFTU0VSVChoYW5kbGUpOwpAQCAtNDgzLDcgKzU5NCwxNiBA
QCBzdGF0aWMgYm9vbCBzdGFydEh0dHAoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKICAgICB1cmwu
cmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7CiAgICAgcmVxdWVzdC5zZXRVUkwodXJsKTsKIAot
ICAgIGQtPm1fbXNnID0gcmVxdWVzdC50b1NvdXBNZXNzYWdlKCk7CisgICAgR093blB0cjxHRXJy
b3I+IGVycm9yOworICAgIGQtPm1fcmVxID0gd2Via2l0X3NvdXBfcmVxdWVzdGVyX3JlcXVlc3Qo
ZC0+bV9yZXF1ZXN0ZXIuZ2V0KCksIHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBzZXNzaW9u
LCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGlmIChlcnJvcikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9yZXEuZ2V0KCkpLCAid2Vi
a2l0LXJlc291cmNlIiwgaGFuZGxlKTsKKworICAgIGQtPm1fbXNnID0gd2Via2l0U291cFJlcXVl
c3RIdHRwR2V0TWVzc2FnZShXRUJLSVRfU09VUF9SRVFVRVNUX0hUVFAoZC0+bV9yZXEuZ2V0KCkp
KTsKKyAgICByZXF1ZXN0LnVwZGF0ZVNvdXBNZXNzYWdlKGQtPm1fbXNnKTsKKwogICAgIGlmICgh
ZC0+bV9tc2cpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNDkzLDcgKzYxMyw3IEBAIHN0
YXRpYyBib29sIHN0YXJ0SHR0cChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQogICAgIGdfc2lnbmFs
X2Nvbm5lY3QoZC0+bV9tc2csICJyZXN0YXJ0ZWQiLCBHX0NBTExCQUNLKHJlc3RhcnRlZENhbGxi
YWNrKSwgaGFuZGxlKTsKICAgICBnX3NpZ25hbF9jb25uZWN0KGQtPm1fbXNnLCAiZ290LWhlYWRl
cnMiLCBHX0NBTExCQUNLKGdvdEhlYWRlcnNDYWxsYmFjayksIGhhbmRsZSk7CiAgICAgZ19zaWdu
YWxfY29ubmVjdChkLT5tX21zZywgImNvbnRlbnQtc25pZmZlZCIsIEdfQ0FMTEJBQ0soY29udGVu
dFNuaWZmZWRDYWxsYmFjayksIGhhbmRsZSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChkLT5tX21z
ZywgImdvdC1jaHVuayIsIEdfQ0FMTEJBQ0soZ290Q2h1bmtDYWxsYmFjayksIGhhbmRsZSk7Cisg
ICAgZC0+bV9nb3RDaHVua0hhbmRsZXIgPSBnX3NpZ25hbF9jb25uZWN0KGQtPm1fbXNnLCAiZ290
LWNodW5rIiwgR19DQUxMQkFDSyhnb3RDaHVua0NhbGxiYWNrKSwgaGFuZGxlKTsKIAogI2lmZGVm
IEhBVkVfTElCU09VUF8yXzI5XzkwCiAgICAgU3RyaW5nIGZpcnN0UGFydHlTdHJpbmcgPSByZXF1
ZXN0LmZpcnN0UGFydHlGb3JDb29raWVzKCkuc3RyaW5nKCk7CkBAIC01MDIsNyArNjIyLDYgQEAg
c3RhdGljIGJvb2wgc3RhcnRIdHRwKFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCiAgICAgICAgIHNv
dXBfbWVzc2FnZV9zZXRfZmlyc3RfcGFydHkoZC0+bV9tc2csIGZpcnN0UGFydHkuZ2V0KCkpOwog
ICAgIH0KICNlbmRpZgotICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1fbXNnKSwg
InJlc291cmNlSGFuZGxlIiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaGFuZGxlKSk7CiAKICAg
ICBGb3JtRGF0YSogaHR0cEJvZHkgPSBkLT5tX2ZpcnN0UmVxdWVzdC5odHRwQm9keSgpOwogICAg
IGlmIChodHRwQm9keSAmJiAhaHR0cEJvZHktPmlzRW1wdHkoKSkgewpAQCAtNTMyLDEyICs2NTEs
MTEgQEAgc3RhdGljIGJvb2wgc3RhcnRIdHRwKFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCiAgICAg
ICAgICAgICAgICAgICAgICAqIG1hcHBpbmcgZm9yIHVwbG9hZGVkIGZpbGVzIGNvZGUgaW5zcGly
ZWQgYnkgdGVjaG5pcXVlIHVzZWQgaW4KICAgICAgICAgICAgICAgICAgICAgICogbGlic291cCdz
IHNpbXBsZS1odHRwZCB0ZXN0CiAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAg
ICAgICAgICBHRXJyb3IqIGVycm9yID0gMDsKKyAgICAgICAgICAgICAgICAgICAgR093blB0cjxH
RXJyb3I+IGVycm9yOwogICAgICAgICAgICAgICAgICAgICBDU3RyaW5nIGZpbGVOYW1lID0gZmls
ZVN5c3RlbVJlcHJlc2VudGF0aW9uKGVsZW1lbnQubV9maWxlbmFtZSk7Ci0gICAgICAgICAgICAg
ICAgICAgIEdNYXBwZWRGaWxlKiBmaWxlTWFwcGluZyA9IGdfbWFwcGVkX2ZpbGVfbmV3KGZpbGVO
YW1lLmRhdGEoKSwgZmFsc2UsICZlcnJvcik7CisgICAgICAgICAgICAgICAgICAgIEdNYXBwZWRG
aWxlKiBmaWxlTWFwcGluZyA9IGdfbWFwcGVkX2ZpbGVfbmV3KGZpbGVOYW1lLmRhdGEoKSwgZmFs
c2UsICZlcnJvci5vdXRQdHIoKSk7CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKGQtPm1f
bXNnLCBHX1NJR05BTF9NQVRDSF9EQVRBLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsIGhhbmRsZSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBnX29iamVjdF91bnJlZihkLT5tX21zZyk7CkBAIC01NjksMTEg
KzY4Nyw5IEBAIHN0YXRpYyBib29sIHN0YXJ0SHR0cChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQog
ICAgIGlmICghc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X29uZShkLT5tX21zZy0+cmVxdWVzdF9o
ZWFkZXJzLCAiQWNjZXB0IikpCiAgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChk
LT5tX21zZy0+cmVxdWVzdF9oZWFkZXJzLCAiQWNjZXB0IiwgIiovKiIpOwogCi0gICAgLy8gQmFs
YW5jZWQgaW4gUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCdzIGRlc3RydWN0b3I7IHdlIG5lZWQgdG8K
LSAgICAvLyBrZWVwIG91ciBvd24gcmVmLCBiZWNhdXNlIGFmdGVyIHF1ZXVlaW5nIHRoZSBtZXNz
YWdlLCB0aGUKLSAgICAvLyBzZXNzaW9uIG93bnMgdGhlIGluaXRpYWwgcmVmZXJlbmNlLgotICAg
IGdfb2JqZWN0X3JlZihkLT5tX21zZyk7Ci0gICAgc291cF9zZXNzaW9uX3F1ZXVlX21lc3NhZ2Uo
c2Vzc2lvbiwgZC0+bV9tc2csIGZpbmlzaGVkQ2FsbGJhY2ssIGhhbmRsZSk7CisgICAgZC0+bV9j
YW5jZWxsYWJsZSA9IGdfY2FuY2VsbGFibGVfbmV3KCk7CisgICAgd2Via2l0U291cFJlcXVlc3RT
ZW5kQXN5bmMoZC0+bV9yZXEuZ2V0KCksIGQtPm1fY2FuY2VsbGFibGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VuZFJlcXVlc3RDYWxsYmFjaywgMCk7CiAKICAgICByZXR1cm4gdHJ1
ZTsKIH0KQEAgLTU5NCw3ICs3MTAsNyBAQCBib29sIFJlc291cmNlSGFuZGxlOjpzdGFydChGcmFt
ZSogZnJhbWUpCiAgICAgU3RyaW5nIHVybFN0cmluZyA9IHVybC5zdHJpbmcoKTsKICAgICBTdHJp
bmcgcHJvdG9jb2wgPSB1cmwucHJvdG9jb2woKTsKIAotICAgIC8vIFVzZWQgdG8gc2V0IHRoZSBh
dXRoZW50aWNhdGlvbiBkaWFsb2cgdG9wbGV2ZWw7IG1heSBiZSBOVUxMCisgICAgLy8gVXNlZCB0
byBzZXQgdGhlIGF1dGhlbnRpY2F0aW9uIGRpYWxvZyB0b3BsZXZlbDsgbWF5IGJlIDAKICAgICBk
LT5tX2ZyYW1lID0gZnJhbWU7CiAKICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UocHJvdG9jb2ws
ICJkYXRhIikpCkBAIC02NjcsMzggKzc4Myw2IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmxvYWRS
ZXNvdXJjZVN5bmNocm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTCiAg
ICAgc3luY0xvYWRlci5ydW4oKTsKIH0KIAotLy8gR0lPLWJhc2VkIGxvYWRlcgotCi1zdGF0aWMg
dm9pZCBjbGVhbnVwR2lvT3BlcmF0aW9uKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGJvb2wgaXNE
ZXN0cm95aW5nID0gZmFsc2UpCi17Ci0gICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhh
bmRsZS0+Z2V0SW50ZXJuYWwoKTsKLQotICAgIGlmIChkLT5tX2dmaWxlKSB7Ci0gICAgICAgIGdf
b2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1fZ2ZpbGUpLCAid2Via2l0LXJlc291cmNlIiwg
MCk7Ci0gICAgICAgIGdfb2JqZWN0X3VucmVmKGQtPm1fZ2ZpbGUpOwotICAgICAgICBkLT5tX2dm
aWxlID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoZC0+bV9jYW5jZWxsYWJsZSkgewotICAgICAgICBn
X29iamVjdF91bnJlZihkLT5tX2NhbmNlbGxhYmxlKTsKLSAgICAgICAgZC0+bV9jYW5jZWxsYWJs
ZSA9IDA7Ci0gICAgfQotCi0gICAgaWYgKGQtPm1faW5wdXRTdHJlYW0pIHsKLSAgICAgICAgZ19v
YmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9pbnB1dFN0cmVhbSksICJ3ZWJraXQtcmVzb3Vy
Y2UiLCAwKTsKLSAgICAgICAgZ19vYmplY3RfdW5yZWYoZC0+bV9pbnB1dFN0cmVhbSk7Ci0gICAg
ICAgIGQtPm1faW5wdXRTdHJlYW0gPSAwOwotICAgIH0KLQotICAgIGlmIChkLT5tX2J1ZmZlcikg
ewotICAgICAgICBnX2ZyZWUoZC0+bV9idWZmZXIpOwotICAgICAgICBkLT5tX2J1ZmZlciA9IDA7
Ci0gICAgfQotCi0gICAgaWYgKCFpc0Rlc3Ryb3lpbmcpCi0gICAgICAgIGhhbmRsZS0+ZGVyZWYo
KTsKLX0KLQogc3RhdGljIHZvaWQgY2xvc2VDYWxsYmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3lu
Y1Jlc3VsdCogcmVzLCBncG9pbnRlcikKIHsKICAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhh
bmRsZSA9IHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxlKj4oZ19vYmplY3RfZ2V0X2RhdGEoc291
cmNlLCAid2Via2l0LXJlc291cmNlIikpOwpAQCAtNzA5LDcgKzc5Myw3IEBAIHN0YXRpYyB2b2lk
IGNsb3NlQ2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50
ZXIpCiAgICAgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCA9IGhhbmRsZS0+Y2xpZW50KCk7
CiAKICAgICBnX2lucHV0X3N0cmVhbV9jbG9zZV9maW5pc2goZC0+bV9pbnB1dFN0cmVhbSwgcmVz
LCAwKTsKLSAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgY2xlYW51
cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CiAKICAgICAvLyBUaGUgbG9hZCBt
YXkgaGF2ZSBiZWVuIGNhbmNlbGxlZCwgdGhlIGNsaWVudCBtYXkgaGF2ZSBiZWVuCiAgICAgLy8g
ZGVzdHJveWVkIGFscmVhZHkuIEluIHN1Y2ggY2FzZXMgY2FsbGluZyBkaWRGaW5pc2hMb2FkaW5n
IGlzIGEKQEAgLTcyMCwzMiArODA0LDMyIEBAIHN0YXRpYyB2b2lkIGNsb3NlQ2FsbGJhY2soR09i
amVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIpCiAgICAgY2xpZW50LT5k
aWRGaW5pc2hMb2FkaW5nKGhhbmRsZS5nZXQoKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHJlYWRDYWxs
YmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzLCBncG9pbnRlcikKK3N0YXRp
YyB2b2lkIHJlYWRDYWxsYmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzLCBn
cG9pbnRlciBkYXRhKQogewogICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gc3Rh
dGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihnX29iamVjdF9nZXRfZGF0YShzb3VyY2UsICJ3ZWJr
aXQtcmVzb3VyY2UiKSk7CiAgICAgaWYgKCFoYW5kbGUpCiAgICAgICAgIHJldHVybjsKIAorICAg
IGJvb2wgY29udmVydFRvVVRGMTYgPSBzdGF0aWNfY2FzdDxib29sPihkYXRhKTsKICAgICBSZXNv
dXJjZUhhbmRsZUludGVybmFsKiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOwogICAgIFJlc291
cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQgPSBoYW5kbGUtPmNsaWVudCgpOwogCiAgICAgaWYgKGQt
Pm1fY2FuY2VsbGVkIHx8ICFjbGllbnQpIHsKLSAgICAgICAgY2xlYW51cEdpb09wZXJhdGlvbiho
YW5kbGUuZ2V0KCkpOworICAgICAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxl
LmdldCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEdFcnJvciogZXJyb3IgPSAw
OworICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKIAotICAgIGdzc2l6ZSBieXRlc1JlYWQgPSBn
X2lucHV0X3N0cmVhbV9yZWFkX2ZpbmlzaChkLT5tX2lucHV0U3RyZWFtLCByZXMsICZlcnJvcik7
CisgICAgZ3NzaXplIGJ5dGVzUmVhZCA9IGdfaW5wdXRfc3RyZWFtX3JlYWRfZmluaXNoKGQtPm1f
aW5wdXRTdHJlYW0sIHJlcywgJmVycm9yLm91dFB0cigpKTsKICAgICBpZiAoZXJyb3IpIHsKLSAg
ICAgICAgY2hhciogdXJpID0gZ19maWxlX2dldF91cmkoZC0+bV9nZmlsZSk7CisgICAgICAgIFNv
dXBVUkkqIHVyaSA9IHdlYmtpdFNvdXBSZXF1ZXN0R2V0VXJpKGQtPm1fcmVxLmdldCgpKTsKKyAg
ICAgICAgR093blB0cjxjaGFyPiB1cmlTdHIoc291cF91cmlfdG9fc3RyaW5nKHVyaSwgZmFsc2Up
KTsKICAgICAgICAgUmVzb3VyY2VFcnJvciByZXNvdXJjZUVycm9yKGdfcXVhcmtfdG9fc3RyaW5n
KEdfSU9fRVJST1IpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3It
PmNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmlTdHIuZ2V0KCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA/IFN0cmluZzo6ZnJvbVVURjgoZXJyb3ItPm1l
c3NhZ2UpIDogU3RyaW5nKCkpOwotICAgICAgICBnX2ZyZWUodXJpKTsKLSAgICAgICAgZ19lcnJv
cl9mcmVlKGVycm9yKTsKLSAgICAgICAgY2xlYW51cEdpb09wZXJhdGlvbihoYW5kbGUuZ2V0KCkp
OworICAgICAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKICAg
ICAgICAgY2xpZW50LT5kaWRGYWlsKGhhbmRsZS5nZXQoKSwgcmVzb3VyY2VFcnJvcik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC03NTcsMTQxICs4NDEsMzYgQEAgc3RhdGljIHZvaWQgcmVh
ZENhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXMsIGdwb2ludGVyKQog
ICAgIH0KIAogICAgIGQtPm1fdG90YWwgKz0gYnl0ZXNSZWFkOwotICAgIGNsaWVudC0+ZGlkUmVj
ZWl2ZURhdGEoaGFuZGxlLmdldCgpLCBkLT5tX2J1ZmZlciwgYnl0ZXNSZWFkLCBkLT5tX3RvdGFs
KTsKLQotICAgIC8vIGRpZFJlY2VpdmVEYXRhIG1heSBjYW5jZWwgdGhlIGxvYWQsIHdoaWNoIG1h
eSByZWxlYXNlIHRoZSBsYXN0IHJlZmVyZW5jZS4KLSAgICBpZiAoZC0+bV9jYW5jZWxsZWQpIHsK
LSAgICAgICAgY2xlYW51cEdpb09wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwotICAgICAgICByZXR1
cm47CisgICAgaWYgKEdfTElLRUxZKCFjb252ZXJ0VG9VVEYxNikpCisgICAgICAgIGNsaWVudC0+
ZGlkUmVjZWl2ZURhdGEoaGFuZGxlLmdldCgpLCBkLT5tX2J1ZmZlciwgYnl0ZXNSZWFkLCBkLT5t
X3RvdGFsKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gV2UgaGF2ZSB0byBjb252ZXJ0IGl0IHRv
IFVURi0xNiBkdWUgdG8gbGltaXRhdGlvbnMgaW4gS1VSTAorICAgICAgICBHT3duUHRyPGd1bmlj
aGFyMj4gdW5pY29kZVN0cihnX3V0ZjhfdG9fdXRmMTYoZC0+bV9idWZmZXIsIGJ5dGVzUmVhZCwg
MCwgMCwgMCkpOworICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVEYXRhKGhhbmRsZS5nZXQoKSwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odW5pY29kZVN0ci5nZXQoKSksIGdfdXRmOF9z
dHJsZW4oZC0+bV9idWZmZXIsIGJ5dGVzUmVhZCkgKiBzaXplb2YoVUNoYXIpLCAwKTsKICAgICB9
CiAKLSAgICBnX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jKGQtPm1faW5wdXRTdHJlYW0sIGQtPm1f
YnVmZmVyLCBkLT5tX2J1ZmZlclNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
X1BSSU9SSVRZX0RFRkFVTFQsIGQtPm1fY2FuY2VsbGFibGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZWFkQ2FsbGJhY2ssIDApOwotfQotCi1zdGF0aWMgdm9pZCBvcGVuQ2FsbGJh
Y2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIpCi17Ci0gICAg
UmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRs
ZSo+KGdfb2JqZWN0X2dldF9kYXRhKHNvdXJjZSwgIndlYmtpdC1yZXNvdXJjZSIpKTsKLSAgICBp
ZiAoIWhhbmRsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5h
bCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKLSAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCog
Y2xpZW50ID0gaGFuZGxlLT5jbGllbnQoKTsKLQorICAgIC8vIGRpZFJlY2VpdmVEYXRhIG1heSBj
YW5jZWwgdGhlIGxvYWQsIHdoaWNoIG1heSByZWxlYXNlIHRoZSBsYXN0IHJlZmVyZW5jZS4KICAg
ICBpZiAoZC0+bV9jYW5jZWxsZWQgfHwgIWNsaWVudCkgewotICAgICAgICBjbGVhbnVwR2lvT3Bl
cmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAgIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlv
bihoYW5kbGUuZ2V0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgR0Vycm9yKiBl
cnJvciA9IDA7Ci0gICAgR0ZpbGVJbnB1dFN0cmVhbSogaW4gPSBnX2ZpbGVfcmVhZF9maW5pc2go
R19GSUxFKHNvdXJjZSksIHJlcywgJmVycm9yKTsKLSAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAg
Y2hhciogdXJpID0gZ19maWxlX2dldF91cmkoZC0+bV9nZmlsZSk7Ci0gICAgICAgIFJlc291cmNl
RXJyb3IgcmVzb3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0cmluZyhHX0lPX0VSUk9SKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLT5jb2RlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdXJpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXJyb3IgPyBTdHJpbmc6OmZyb21VVEY4KGVycm9yLT5tZXNzYWdlKSA6IFN0cmlu
ZygpKTsKLSAgICAgICAgZ19mcmVlKHVyaSk7Ci0gICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7
Ci0gICAgICAgIGNsZWFudXBHaW9PcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKLSAgICAgICAgY2xp
ZW50LT5kaWRGYWlsKGhhbmRsZS5nZXQoKSwgcmVzb3VyY2VFcnJvcik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBkLT5tX2lucHV0U3RyZWFtID0gR19JTlBVVF9TVFJFQU0oaW4pOwot
ICAgIGQtPm1fYnVmZmVyU2l6ZSA9IDgxOTI7Ci0gICAgZC0+bV9idWZmZXIgPSBzdGF0aWNfY2Fz
dDxjaGFyKj4oZ19tYWxsb2MoZC0+bV9idWZmZXJTaXplKSk7Ci0gICAgZC0+bV90b3RhbCA9IDA7
Ci0KLSAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5tX2lucHV0U3RyZWFtKSwgIndl
YmtpdC1yZXNvdXJjZSIsIGhhbmRsZS5nZXQoKSk7CiAgICAgZ19pbnB1dF9zdHJlYW1fcmVhZF9h
c3luYyhkLT5tX2lucHV0U3RyZWFtLCBkLT5tX2J1ZmZlciwgZC0+bV9idWZmZXJTaXplLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QUklPUklUWV9ERUZBVUxULCBkLT5tX2NhbmNl
bGxhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZENhbGxiYWNrLCAwKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRDYWxsYmFjaywgZGF0YSk7CiB9CiAK
LXN0YXRpYyB2b2lkIHF1ZXJ5SW5mb0NhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVz
dWx0KiByZXMsIGdwb2ludGVyKQotewotICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxl
ID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihnX29iamVjdF9nZXRfZGF0YShzb3VyY2Us
ICJ3ZWJraXQtcmVzb3VyY2UiKSk7Ci0gICAgaWYgKCFoYW5kbGUpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFsKCk7
Ci0gICAgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCA9IGhhbmRsZS0+Y2xpZW50KCk7Ci0K
LSAgICBpZiAoZC0+bV9jYW5jZWxsZWQpIHsKLSAgICAgICAgY2xlYW51cEdpb09wZXJhdGlvbiho
YW5kbGUuZ2V0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVzb3VyY2VSZXNw
b25zZSByZXNwb25zZTsKLQotICAgIGNoYXIqIHVyaSA9IGdfZmlsZV9nZXRfdXJpKGQtPm1fZ2Zp
bGUpOwotICAgIHJlc3BvbnNlLnNldFVSTChLVVJMKEtVUkwoKSwgdXJpKSk7Ci0gICAgZ19mcmVl
KHVyaSk7Ci0KLSAgICBHRXJyb3IqIGVycm9yID0gMDsKLSAgICBHRmlsZUluZm8qIGluZm8gPSBn
X2ZpbGVfcXVlcnlfaW5mb19maW5pc2goZC0+bV9nZmlsZSwgcmVzLCAmZXJyb3IpOwotCi0gICAg
aWYgKGVycm9yKSB7Ci0gICAgICAgIC8vIEZJWE1FOiB0byBiZSBhYmxlIHRvIGhhbmRsZSBmdHAg
VVJJcyBwcm9wZXJseSwgd2UgbXVzdAotICAgICAgICAvLyBjaGVjayBpZiB0aGUgZXJyb3IgaXMg
R19JT19FUlJPUl9OT1RfTU9VTlRFRCwgYW5kIGlmIHNvLAotICAgICAgICAvLyBjYWxsIGdfZmls
ZV9tb3VudF9lbmNsb3Npbmdfdm9sdW1lKCkgdG8gbW91bnQgdGhlIGZ0cAotICAgICAgICAvLyBz
ZXJ2ZXIgKGFuZCB0aGVuIGtlZXAgdHJhY2sgb2YgdGhlIGZhY3QgdGhhdCB3ZSBtb3VudGVkIGl0
LAotICAgICAgICAvLyBhbmQgc2V0IGEgdGltZW91dCB0byB1bm1vdW50IGl0IGxhdGVyIGFmdGVy
IGl0J3MgYmVlbiBpZGxlCi0gICAgICAgIC8vIGZvciBhIHdoaWxlKS4KLSAgICAgICAgY2hhciog
dXJpID0gZ19maWxlX2dldF91cmkoZC0+bV9nZmlsZSk7Ci0gICAgICAgIFJlc291cmNlRXJyb3Ig
cmVzb3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0cmluZyhHX0lPX0VSUk9SKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLT5jb2RlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdXJpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXJyb3IgPyBTdHJpbmc6OmZyb21VVEY4KGVycm9yLT5tZXNzYWdlKSA6IFN0cmluZygpKTsK
LSAgICAgICAgZ19mcmVlKHVyaSk7Ci0gICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7Ci0gICAg
ICAgIGNsZWFudXBHaW9PcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKLSAgICAgICAgY2xpZW50LT5k
aWRGYWlsKGhhbmRsZS5nZXQoKSwgcmVzb3VyY2VFcnJvcik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpZiAoZ19maWxlX2luZm9fZ2V0X2ZpbGVfdHlwZShpbmZvKSAhPSBHX0ZJTEVf
VFlQRV9SRUdVTEFSKSB7Ci0gICAgICAgIC8vIEZJWE1FOiB3aGF0IGlmIHRoZSBVUkkgcG9pbnRz
IHRvIGEgZGlyZWN0b3J5PyBTaG91bGQgd2UKLSAgICAgICAgLy8gZ2VuZXJhdGUgYSBsaXN0aW5n
PyBIb3c/IFdoYXQgZG8gb3RoZXIgYmFja2VuZHMgZG8gaGVyZT8KLSAgICAgICAgY2hhciogdXJp
ID0gZ19maWxlX2dldF91cmkoZC0+bV9nZmlsZSk7Ci0gICAgICAgIFJlc291cmNlRXJyb3IgcmVz
b3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0cmluZyhHX0lPX0VSUk9SKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdfSU9fRVJST1JfRkFJTEVELAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdXJpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU3RyaW5nKCkpOwotICAgICAgICBnX2ZyZWUodXJpKTsKLSAgICAgICAgY2xlYW51cEdp
b09wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwotICAgICAgICBjbGllbnQtPmRpZEZhaWwoaGFuZGxl
LmdldCgpLCByZXNvdXJjZUVycm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHJl
c3BvbnNlLnNldE1pbWVUeXBlKGdfZmlsZV9pbmZvX2dldF9jb250ZW50X3R5cGUoaW5mbykpOwot
ICAgIHJlc3BvbnNlLnNldEV4cGVjdGVkQ29udGVudExlbmd0aChnX2ZpbGVfaW5mb19nZXRfc2l6
ZShpbmZvKSk7Ci0KLSAgICBHVGltZVZhbCB0djsKLSAgICBnX2ZpbGVfaW5mb19nZXRfbW9kaWZp
Y2F0aW9uX3RpbWUoaW5mbywgJnR2KTsKLSAgICByZXNwb25zZS5zZXRMYXN0TW9kaWZpZWREYXRl
KHR2LnR2X3NlYyk7Ci0KLSAgICBjbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShoYW5kbGUuZ2V0
KCksIHJlc3BvbnNlKTsKLQotICAgIGlmIChkLT5tX2NhbmNlbGxlZCkgewotICAgICAgICBjbGVh
bnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBnX2ZpbGVfcmVhZF9hc3luYyhkLT5tX2dmaWxlLCBHX1BSSU9SSVRZX0RFRkFVTFQsIGQt
Pm1fY2FuY2VsbGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BlbkNhbGxiYWNrLCAwKTsK
LX0KIHN0YXRpYyBib29sIHN0YXJ0R2lvKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIEtVUkwgdXJs
KQogewogICAgIEFTU0VSVChoYW5kbGUpOwogCi0gICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCog
ZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKLQogICAgIGlmIChoYW5kbGUtPmZpcnN0UmVxdWVz
dCgpLmh0dHBNZXRob2QoKSAhPSAiR0VUIiAmJiBoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmh0dHBN
ZXRob2QoKSAhPSAiUE9TVCIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIEdPd25QdHI8
Y2hhcj4gdXJsU3RyOworICAgIFNvdXBTZXNzaW9uKiBzZXNzaW9uID0gaGFuZGxlLT5kZWZhdWx0
U2Vzc2lvbigpOworICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldElu
dGVybmFsKCk7CisKICAgICAvLyBHSU8gZG9lc24ndCBrbm93IGhvdyB0byBoYW5kbGUgcmVmcyBh
bmQgcXVlcmllcywgc28gcmVtb3ZlIHRoZW0KICAgICAvLyBUT0RPOiB1c2UgS1VSTC5maWxlU3lz
dGVtUGF0aCBhZnRlciBLVVJMR3RrIGFuZCBGaWxlU3lzdGVtR3RrIGFyZQogICAgIC8vIHVzaW5n
IEdJTyBpbnRlcm5hbGx5LCBhbmQgcHJvdmlkaW5nIFVSSXMgaW5zdGVhZCBvZiBmaWxlIHBhdGhz
CkBAIC05MDQsMjMgKzg4MywyNSBAQCBzdGF0aWMgYm9vbCBzdGFydEdpbyhSZXNvdXJjZUhhbmRs
ZSogaGFuZGxlLCBLVVJMIHVybCkKICAgICAvLyBnX2ZpbGVuYW1lX2Zyb21fdXJpICh1c2VkIGlu
dGVybmFsbHkgYnkgR0ZpbGUpIGhhcyBwcm9ibGVtcwogICAgIC8vIGRlY29kaW5nIHN0cmluZ3Mg
d2l0aCBhcmJpdHJhcnkgcGVyY2VudCBzaWducwogICAgIGlmICh1cmwuaXNMb2NhbEZpbGUoKSkK
LSAgICAgICAgZC0+bV9nZmlsZSA9IGdfZmlsZV9uZXdfZm9yX3BhdGgodXJsLnByZXR0eVVSTCgp
LnV0ZjgoKS5kYXRhKCkgKyBzaXplb2YoImZpbGU6Ly8iKSAtIDEpOworICAgICAgICB1cmxTdHIu
c2V0KGdfc3RyZHVwKHVybC5wcmV0dHlVUkwoKS51dGY4KCkuZGF0YSgpKSk7CiAgICAgZWxzZQog
I2VuZGlmCi0gICAgICAgIGQtPm1fZ2ZpbGUgPSBnX2ZpbGVfbmV3X2Zvcl91cmkodXJsLnN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1f
Z2ZpbGUpLCAid2Via2l0LXJlc291cmNlIiwgaGFuZGxlKTsKKyAgICAgICAgdXJsU3RyLnNldChn
X3N0cmR1cCh1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSkpOwogCi0gICAgLy8gYmFsYW5jZWQg
YnkgYSBkZXJlZigpIGluIGNsZWFudXBHaW9PcGVyYXRpb24sIHdoaWNoIHNob3VsZCBhbHdheXMg
cnVuCisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgIGQtPm1fcmVxID0gd2Via2l0X3Nv
dXBfcmVxdWVzdGVyX3JlcXVlc3QoZC0+bV9yZXF1ZXN0ZXIuZ2V0KCksIHVybFN0ci5nZXQoKSwg
c2Vzc2lvbiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1fcmVxLmdldCgp
KSwgIndlYmtpdC1yZXNvdXJjZSIsIGhhbmRsZSk7CisKKyAgICAvLyBiYWxhbmNlZCBieSBhIGRl
cmVmKCkgaW4gY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uLCB3aGljaCBzaG91bGQgYWx3YXlz
IHJ1bgogICAgIGhhbmRsZS0+cmVmKCk7CiAKICAgICBkLT5tX2NhbmNlbGxhYmxlID0gZ19jYW5j
ZWxsYWJsZV9uZXcoKTsKLSAgICBnX2ZpbGVfcXVlcnlfaW5mb19hc3luYyhkLT5tX2dmaWxlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfVFlQ
RSAiLCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX0ZJTEVfQVRUUklCVVRFX1NUQU5E
QVJEX0NPTlRFTlRfVFlQRSAiLCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX0ZJTEVf
QVRUUklCVVRFX1NUQU5EQVJEX1NJWkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR19G
SUxFX1FVRVJZX0lORk9fTk9ORSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BSSU9S
SVRZX0RFRkFVTFQsIGQtPm1fY2FuY2VsbGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcXVlcnlJbmZvQ2FsbGJhY2ssIDApOworICAgIHdlYmtpdFNvdXBSZXF1ZXN0U2VuZEFzeW5j
KGQtPm1fcmVxLmdldCgpLCBkLT5tX2NhbmNlbGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNlbmRSZXF1ZXN0Q2FsbGJhY2ssIDApOworCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVx
dWVzdC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0LmgK
aW5kZXggYTFkOTE2Zi4uYzFjNzExNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvUmVzb3VyY2VSZXF1ZXN0LmgKQEAgLTY3LDYgKzY3LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICAgICAgdXBkYXRlRnJvbVNvdXBNZXNzYWdlKHNvdXBNZXNzYWdlKTsKICAg
ICAgICAgfQogCisgICAgICAgIHZvaWQgdXBkYXRlU291cE1lc3NhZ2UoU291cE1lc3NhZ2UqIHNv
dXBNZXNzYWdlKSBjb25zdDsKICAgICAgICAgU291cE1lc3NhZ2UqIHRvU291cE1lc3NhZ2UoKSBj
b25zdDsKICAgICAgICAgdm9pZCB1cGRhdGVGcm9tU291cE1lc3NhZ2UoU291cE1lc3NhZ2UqIHNv
dXBNZXNzYWdlKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
UmVzb3VyY2VSZXF1ZXN0U291cC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9S
ZXNvdXJjZVJlcXVlc3RTb3VwLmNwcAppbmRleCA2MmRlYjAxLi41Y2UzNWFjIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNw
cApAQCAtMjUsMTQgKzI1LDM2IEBACiAjaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKICNpbmNsdWRl
ICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KICNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAordm9pZCBSZXNvdXJjZVJlcXVlc3Q6OnVwZGF0ZVNvdXBNZXNz
YWdlKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSkgY29uc3QKK3sKKyAgICBnX29iamVjdF9zZXQo
c291cE1lc3NhZ2UsIFNPVVBfTUVTU0FHRV9NRVRIT0QsIGh0dHBNZXRob2QoKS51dGY4KCkuZGF0
YSgpLCAwKTsKKworICAgIGNvbnN0IEhUVFBIZWFkZXJNYXAmIGhlYWRlcnMgPSBodHRwSGVhZGVy
RmllbGRzKCk7CisgICAgU291cE1lc3NhZ2VIZWFkZXJzKiBzb3VwSGVhZGVycyA9IHNvdXBNZXNz
YWdlLT5yZXF1ZXN0X2hlYWRlcnM7CisgICAgaWYgKCFoZWFkZXJzLmlzRW1wdHkoKSkgeworICAg
ICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJzLmVuZCgpOwor
ICAgICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVy
c19hcHBlbmQoc291cEhlYWRlcnMsIGl0LT5maXJzdC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBp
dC0+c2Vjb25kLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKworI2lmZGVmIEhBVkVfTElCU09VUF8y
XzI5XzkwCisgICAgU3RyaW5nIGZpcnN0UGFydHlTdHJpbmcgPSBmaXJzdFBhcnR5Rm9yQ29va2ll
cygpLnN0cmluZygpOworICAgIGlmICghZmlyc3RQYXJ0eVN0cmluZy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgR093blB0cjxTb3VwVVJJPiBmaXJzdFBhcnR5KHNvdXBfdXJpX25ldyhmaXJzdFBhcnR5
U3RyaW5nLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9maXJzdF9w
YXJ0eShzb3VwTWVzc2FnZSwgZmlyc3RQYXJ0eS5nZXQoKSk7CisgICAgfQorI2VuZGlmCisKKyAg
ICBzb3VwX21lc3NhZ2Vfc2V0X2ZsYWdzKHNvdXBNZXNzYWdlLCBtX3NvdXBGbGFncyk7Cit9CisK
IFNvdXBNZXNzYWdlKiBSZXNvdXJjZVJlcXVlc3Q6OnRvU291cE1lc3NhZ2UoKSBjb25zdAogewog
ICAgIFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSA9IHNvdXBfbWVzc2FnZV9uZXcoaHR0cE1ldGhv
ZCgpLnV0ZjgoKS5kYXRhKCksIHVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvd2Via2l0c291cGNhY2hlY29yZS5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJraXRzb3VwY2FjaGVjb3JlLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzZlNGQ0Ci0tLSAvZGV2L251
bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvd2Via2l0c291cGNhY2hlY29y
ZS5jcHAKQEAgLTAsMCArMSwxNTE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEw
IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsCisgKiBC
b3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisvKiBUT0RPOgorICogLSBOZWVkIHRv
IGhvb2sgdGhlIGZlYXR1cmUgaW4gdGhlIHN5bmMgU291cFNlc3Npb24uCisgKiAtIE5lZWQgbW9y
ZSB0ZXN0cy4KKyAqLworCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ3ZWJraXRz
b3VwY2FjaGVjb3JlLmgiCisKKyNpbmNsdWRlICJ0cGwuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+
CisjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorI2luY2x1
ZGUgPHN0ZGxpYi5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBTb3VwU2Vzc2lv
bkZlYXR1cmVJbnRlcmZhY2UqIHdlYmtpdF9zb3VwX2NhY2hlX2NvcmVfZGVmYXVsdF9mZWF0dXJl
X2ludGVyZmFjZTsKK3N0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX2NhY2hlX2NvcmVfc2Vzc2lvbl9m
ZWF0dXJlX2luaXQoU291cFNlc3Npb25GZWF0dXJlSW50ZXJmYWNlKiBmZWF0dXJlSW50ZXJmYWNl
LCBncG9pbnRlciBpbnRlcmZhY2VEYXRhKTsKKworI2RlZmluZSBERUZBVUxUX01BWF9TSVpFIDUw
KiAxMDI0KiAxMDI0CisvKiBQZXJjZW50YWdlIG9mIHRoZSB0b3RhbCBzaXplIG9mIHRoZSBjYWNo
ZSB0aGF0IGNhbiBiZSBmaWxsZWQgYnkgYSBzaW5nbGUgZW50cnkgKi8KKyNkZWZpbmUgTUFYX0VO
VFJZX0RBVEFfUEVSQ0VOVEFHRSAxMAorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0U291cENhY2hl
Q29yZUVudHJ5IHsKKyAgICBjaGFyKiBrZXk7CisgICAgY2hhciogZmlsZW5hbWU7CisgICAgZ3Vp
bnQgZnJlc2huZXNzTGlmZXRpbWU7CisgICAgZ2Jvb2xlYW4gbXVzdFJldmFsaWRhdGU7CisgICAg
R1N0cmluZyogZGF0YTsKKyAgICBnc2l6ZSBwb3M7CisgICAgZ3NpemUgbGVuZ3RoOworICAgIHRp
bWVfdCBjb3JyZWN0ZWRJbml0aWFsQWdlOworICAgIHRpbWVfdCByZXNwb25zZVRpbWU7CisgICAg
Z2Jvb2xlYW4gd3JpdGluZzsKKyAgICBnYm9vbGVhbiBkaXJ0eTsKKyAgICBnYm9vbGVhbiBnb3RC
b2R5OworICAgIGdib29sZWFuIGJlaW5nVmFsaWRhdGVkOworICAgIFNvdXBNZXNzYWdlSGVhZGVy
cyogaGVhZGVyczsKKyAgICBHT3V0cHV0U3RyZWFtKiBzdHJlYW07CisgICAgR0Vycm9yKiBlcnJv
cjsKKyAgICBndWludCBoaXRzOworICAgIEdMaXN0KiBscnU7CisgICAgR0NhbmNlbGxhYmxlKiBj
YW5jZWxsYWJsZTsKK30gV2ViS2l0U291cENhY2hlQ29yZUVudHJ5OworCitzdHJ1Y3QgX1dlYktp
dFNvdXBDYWNoZUNvcmVQcml2YXRlIHsKKyAgICBjaGFyKiBjYWNoZURpcjsKKyAgICBHSGFzaFRh
YmxlKiBjYWNoZTsKKyAgICBndWludCBuUGVuZGluZzsKKyAgICBTb3VwU2Vzc2lvbiogc2Vzc2lv
bjsKKyAgICBXZWJLaXRTb3VwQ2FjaGVDb3JlVHlwZSBjYWNoZVR5cGU7CisgICAgZ3VpbnQgc2l6
ZTsKKyAgICBndWludCBtYXhTaXplOworICAgIGd1aW50IG1heEVudHJ5RGF0YVNpemU7ICAvKiBD
b21wdXRlZCB2YWx1ZS4gSGVyZSBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyAqLworICAgIEdMaXN0
KiBscnVTdGFydDsKKyAgICBHTGlzdCogbHJ1RW5kOworfTsKKwordHlwZWRlZiBzdHJ1Y3Qgewor
ICAgIFdlYktpdFNvdXBDYWNoZUNvcmUqIGNhY2hlOworICAgIFdlYktpdFNvdXBDYWNoZUNvcmVF
bnRyeSogZW50cnk7CisgICAgU291cE1lc3NhZ2UqIG1zZzsKKyAgICBndWxvbmcgZ290Q2h1bmtI
YW5kbGVyOworICAgIGd1bG9uZyBnb3RCb2R5SGFuZGxlcjsKKyAgICBndWxvbmcgcmVzdGFydGVk
SGFuZGxlcjsKK30gV2ViS2l0U291cENhY2hlQ29yZVdyaXRpbmdGaXh0dXJlOworCitlbnVtIHsK
KyAgICBQUk9QXzAsCisgICAgUFJPUF9DQUNIRV9ESVIsCisgICAgUFJPUF9DQUNIRV9UWVBFCit9
OworCisjZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX0NPUkVfR0VUX1BSSVZBVEUobykgKEdfVFlQ
RV9JTlNUQU5DRV9HRVRfUFJJVkFURSgobyksIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEVfQ09SRSwg
V2ViS2l0U291cENhY2hlQ29yZVByaXZhdGUpKQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShX
ZWJLaXRTb3VwQ2FjaGVDb3JlLCB3ZWJraXRfc291cF9jYWNoZV9jb3JlLCBHX1RZUEVfT0JKRUNU
LAorICAgICAgICAgICAgICAgICAgICAgICAgR19JTVBMRU1FTlRfSU5URVJGQUNFKFNPVVBfVFlQ
RV9TRVNTSU9OX0ZFQVRVUkUsIHdlYmtpdF9zb3VwX2NhY2hlX2NvcmVfc2Vzc2lvbl9mZWF0dXJl
X2luaXQpKQorCitzdGF0aWMgdm9pZCB3ZWJraXRfc291cF9jYWNoZV9jb3JlX2VudHJ5X2RlbGV0
ZShXZWJLaXRTb3VwQ2FjaGVDb3JlKiBjYWNoZSwgV2ViS2l0U291cENhY2hlQ29yZUVudHJ5KiBl
bnRyeSk7CitzdGF0aWMgdm9pZCBtYWtlUm9vbUZvck5ld0VudHJ5KFdlYktpdFNvdXBDYWNoZUNv
cmUqIGNhY2hlLCBndWludCBsZW5ndGhUb0FkZCk7CitzdGF0aWMgZ2Jvb2xlYW4gY2FjaGVBY2Nl
cHRzRW50cmllc09mU2l6ZShXZWJLaXRTb3VwQ2FjaGVDb3JlKiBjYWNoZSwgZ3VpbnQgbGVuZ3Ro
VG9BZGQpOworCitzdGF0aWMgV2ViS2l0U291cENhY2hlQ29yZWFiaWxpdHkgZ2V0Q2FjaGVhYmls
aXR5KFdlYktpdFNvdXBDYWNoZUNvcmUqIGNhY2hlLCBTb3VwTWVzc2FnZSogbXNnKQoreworICAg
IFdlYktpdFNvdXBDYWNoZUNvcmVhYmlsaXR5IGNhY2hlYWJpbGl0eTsKKyAgICBjb25zdCBjaGFy
KiBjYWNoZUNvbnRyb2w7CisKKyAgICAvKiAxLiBUaGUgcmVxdWVzdCBtZXRob2QgbXVzdCBiZSBj
YWNoZWFibGUgKi8KKyAgICBpZiAobXNnLT5tZXRob2QgPT0gU09VUF9NRVRIT0RfR0VUKQorICAg
ICAgICBjYWNoZWFiaWxpdHkgPSBXRUJLSVRfU09VUF9DQUNIRV9DT1JFX0NBQ0hFQUJMRTsKKyAg
ICBlbHNlIGlmIChtc2ctPm1ldGhvZCA9PSBTT1VQX01FVEhPRF9IRUFEIHx8IG1zZy0+bWV0aG9k
ID09IFNPVVBfTUVUSE9EX1RSQUNFIHx8IG1zZy0+bWV0aG9kID09IFNPVVBfTUVUSE9EX0NPTk5F
Q1QpCisgICAgICAgIHJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9DT1JFX1VOQ0FDSEVBQkxFOwor
ICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0IDwgV2ViS2l0U291cENhY2hlQ29y
ZWFiaWxpdHkgPiAoV0VCS0lUX1NPVVBfQ0FDSEVfQ09SRV9VTkNBQ0hFQUJMRSB8IFdFQktJVF9T
T1VQX0NBQ0hFX0NPUkVfSU5WQUxJREFURVMpOworCisgICAgY2FjaGVDb250cm9sID0gc291cF9t
ZXNzYWdlX2hlYWRlcnNfZ2V0KG1zZy0+cmVzcG9uc2VfaGVhZGVycywgIkNhY2hlLUNvbnRyb2wi
KTsKKyAgICBpZiAoY2FjaGVDb250cm9sKSB7CisgICAgICAgIEdIYXNoVGFibGUqIGhhc2g7Cisg
ICAgICAgIFdlYktpdFNvdXBDYWNoZUNvcmVQcml2YXRlKiBwcml2ID0gV0VCS0lUX1NPVVBfQ0FD
SEVfQ09SRV9HRVRfUFJJVkFURShjYWNoZSk7CisKKyAgICAgICAgaGFzaCA9IHNvdXBfaGVhZGVy
X3BhcnNlX3BhcmFtX2xpc3QoY2FjaGVDb250cm9sKTsKKworICAgICAgICAvKiBTaGFyZWQgY2Fj
aGVzIE1VU1QgTk9UIHN0b3JlIHByaXZhdGUgcmVzb3VyY2VzICovCisgICAgICAgIGlmIChwcml2
LT5jYWNoZVR5cGUgPT0gV0VCS0lUX1NPVVBfQ0FDSEVfQ09SRV9TSEFSRUQpIHsKKyAgICAgICAg
ICAgIGlmIChnX2hhc2hfdGFibGVfbG9va3VwX2V4dGVuZGVkKGhhc2gsICJwcml2YXRlIiwgMCwg
MCkpIHsKKyAgICAgICAgICAgICAgICBzb3VwX2hlYWRlcl9mcmVlX3BhcmFtX2xpc3QoaGFzaCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX0NPUkVfVU5DQUNIRUFC
TEU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiAyLiBUaGUgJ25vLXN0
b3JlJyBjYWNoZSBkaXJlY3RpdmUgZG9lcyBub3QgYXBwZWFyIGluIHRoZQorICAgICAgICAgKiBo
ZWFkZXJzCisgICAgICAgICAqLworICAgICAgICBpZiAoZ19oYXNoX3RhYmxlX2xvb2t1cF9leHRl
bmRlZChoYXNoLCAibm8tc3RvcmUiLCAwLCAwKSkgeworICAgICAgICAgICAgc291cF9oZWFkZXJf
ZnJlZV9wYXJhbV9saXN0KGhhc2gpOworICAgICAgICAgICAgcmV0dXJuIFdFQktJVF9TT1VQX0NB
Q0hFX0NPUkVfVU5DQUNIRUFCTEU7CisgICAgICAgIH0KKworICAgICAgICAvKiBUaGlzIGRvZXMg
bm90IGFwcGVhciBpbiBzZWN0aW9uIDIuMSwgYnV0IEkgdGhpbmsgaXQgbWFrZXMKKyAgICAgICAg
ICogc2Vuc2UgdG8gY2hlY2sgaXQgdG9vPworICAgICAgICAgKi8KKyAgICAgICAgaWYgKGdfaGFz
aF90YWJsZV9sb29rdXBfZXh0ZW5kZWQoaGFzaCwgIm5vLWNhY2hlIiwgMCwgMCkpIHsKKyAgICAg
ICAgICAgIHNvdXBfaGVhZGVyX2ZyZWVfcGFyYW1fbGlzdChoYXNoKTsKKyAgICAgICAgICAgIHJl
dHVybiBXRUJLSVRfU09VUF9DQUNIRV9DT1JFX1VOQ0FDSEVBQkxFOworICAgICAgICB9CisgICAg
fQorCisgICAgc3dpdGNoIChtc2ctPnN0YXR1c19jb2RlKSB7CisgICAgY2FzZSBTT1VQX1NUQVRV
U19QQVJUSUFMX0NPTlRFTlQ6CisgICAgICAgIC8qIFdlIGRvbid0IGNhY2hlIHBhcnRpYWwgcmVz
cG9uc2VzLCBidXQgdGhleSBvbmx5CisgICAgICAgICAqIGludmFsaWRhdGUgY2FjaGVkIGZ1bGwg
cmVzcG9uc2VzIGlmIHRoZSBoZWFkZXJzCisgICAgICAgICAqIGRvbid0IG1hdGNoLgorICAgICAg
ICAgKi8KKyAgICAgICAgY2FjaGVhYmlsaXR5ID0gV0VCS0lUX1NPVVBfQ0FDSEVfQ09SRV9VTkNB
Q0hFQUJMRTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNPVVBfU1RBVFVTX05PVF9NT0RJ
RklFRDoKKyAgICAgICAgLyogQSAzMDQgcmVzcG9uc2UgdmFsaWRhdGVzIGFuIGV4aXN0aW5nIGNh
Y2hlIGVudHJ5ICovCisgICAgICAgIGNhY2hlYWJpbGl0eSA9IFdFQktJVF9TT1VQX0NBQ0hFX0NP
UkVfVkFMSURBVEVTOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU09VUF9TVEFUVVNfTVVM
VElQTEVfQ0hPSUNFUzoKKyAgICBjYXNlIFNPVVBfU1RBVFVTX01PVkVEX1BFUk1BTkVOVExZOgor
ICAgIGNhc2UgU09VUF9TVEFUVVNfR09ORToKKyAgICAgICAgLyogRklYTUU6IGNhY2hlYWJsZSB1
bmxlc3MgaW5kaWNhdGVkIG90aGVyd2lzZSAqLworICAgICAgICBjYWNoZWFiaWxpdHkgPSBXRUJL
SVRfU09VUF9DQUNIRV9DT1JFX1VOQ0FDSEVBQkxFOworICAgICAgICBicmVhazsKKworICAgIGNh
c2UgU09VUF9TVEFUVVNfRk9VTkQ6CisgICAgY2FzZSBTT1VQX1NUQVRVU19URU1QT1JBUllfUkVE
SVJFQ1Q6CisgICAgICAgIC8qIEZJWE1FOiBjYWNoZWFibGUgaWYgZXhwbGljaXRseSBpbmRpY2F0
ZWQgKi8KKyAgICAgICAgY2FjaGVhYmlsaXR5ID0gV0VCS0lUX1NPVVBfQ0FDSEVfQ09SRV9VTkNB
Q0hFQUJMRTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNPVVBfU1RBVFVTX1NFRV9PVEhF
UjoKKyAgICBjYXNlIFNPVVBfU1RBVFVTX0ZPUkJJRERFTjoKKyAgICBjYXNlIFNPVVBfU1RBVFVT
X05PVF9GT1VORDoKKyAgICBjYXNlIFNPVVBfU1RBVFVTX01FVEhPRF9OT1RfQUxMT1dFRDoKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0IDwgV2ViS2l0U291cENhY2hlQ29yZWFiaWxpdHkgPiAo
V0VCS0lUX1NPVVBfQ0FDSEVfQ09SRV9VTkNBQ0hFQUJMRSB8IFdFQktJVF9TT1VQX0NBQ0hFX0NP
UkVfSU5WQUxJREFURVMpOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgLyogQW55IDV4eCBzdGF0
dXMgb3IgYW55IDR4eCBzdGF0dXMgbm90IGhhbmRsZWQgYWJvdmUKKyAgICAgICAgICogaXMgdW5j
YWNoZWFibGUgYnV0IGRvZXNuJ3QgYnJlYWsgdGhlIGNhY2hlLgorICAgICAgICAgKi8KKyAgICAg
ICAgaWYgKChtc2ctPnN0YXR1c19jb2RlID49IFNPVVBfU1RBVFVTX0JBRF9SRVFVRVNUICYmIG1z
Zy0+c3RhdHVzX2NvZGUgPD0gU09VUF9TVEFUVVNfRkFJTEVEX0RFUEVOREVOQ1kpIHx8IG1zZy0+
c3RhdHVzX2NvZGUgPj0gU09VUF9TVEFUVVNfSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorICAgICAg
ICAgICAgcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX0NPUkVfVU5DQUNIRUFCTEU7CisKKyAgICAg
ICAgLyogQW4gdW5yZWNvZ25pemVkIDJ4eCwgM3h4LCBvciA0eHggcmVzcG9uc2UgYnJlYWtzCisg
ICAgICAgICAqIHRoZSBjYWNoZS4KKyAgICAgICAgICovCisgICAgICAgIGlmICgobXNnLT5zdGF0
dXNfY29kZSA+IFNPVVBfU1RBVFVTX1BBUlRJQUxfQ09OVEVOVCAmJiBtc2ctPnN0YXR1c19jb2Rl
IDwgU09VUF9TVEFUVVNfTVVMVElQTEVfQ0hPSUNFUykgfHwgKG1zZy0+c3RhdHVzX2NvZGUgPiBT
T1VQX1NUQVRVU19URU1QT1JBUllfUkVESVJFQ1QgJiYgbXNnLT5zdGF0dXNfY29kZSA8IFNPVVBf
U1RBVFVTX0lOVEVSTkFMX1NFUlZFUl9FUlJPUikpCisgICAgICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3QgPCBXZWJLaXRTb3VwQ2FjaGVDb3JlYWJpbGl0eSA+IChXRUJLSVRfU09VUF9DQUNIRV9D
T1JFX1VOQ0FDSEVBQkxFIHwgV0VCS0lUX1NPVVBfQ0FDSEVfQ09SRV9JTlZBTElEQVRFUyk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBjYWNoZWFiaWxpdHk7Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9zb3VwX2NhY2hlX2NvcmVfZW50cnlfZnJlZShXZWJLaXRTb3VwQ2Fj
aGVDb3JlRW50cnkqIGVudHJ5KQoreworICAgIGdfZnJlZShlbnRyeS0+ZmlsZW5hbWUpOworICAg
IGVudHJ5LT5maWxlbmFtZSA9IDA7CisgICAgZ19mcmVlKGVudHJ5LT5rZXkpOworICAgIGVudHJ5
LT5rZXkgPSAwOworCisgICAgaWYgKGVudHJ5LT5oZWFkZXJzKSB7CisgICAgICAgIHNvdXBfbWVz
c2FnZV9oZWFkZXJzX2ZyZWUoZW50cnktPmhlYWRlcnMpOworICAgICAgICBlbnRyeS0+aGVhZGVy
cyA9IDA7CisgICAgfQorCisgICAgaWYgKGVudHJ5LT5kYXRhKSB7CisgICAgICAgIGdfc3RyaW5n
X2ZyZWUoZW50cnktPmRhdGEsIFRSVUUpOworICAgICAgICBlbnRyeS0+ZGF0YSA9IDA7CisgICAg
fQorICAgIGlmIChlbnRyeS0+ZXJyb3IpIHsKKyAgICAgICAgZ19lcnJvcl9mcmVlKGVudHJ5LT5l
cnJvcik7CisgICAgICAgIGVudHJ5LT5lcnJvciA9IDA7CisgICAgfQorICAgIGlmIChlbnRyeS0+
Y2FuY2VsbGFibGUpIHsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYoZW50cnktPmNhbmNlbGxhYmxl
KTsKKyAgICAgICAgZW50cnktPmNhbmNlbGxhYmxlID0gMDsKKyAgICB9CisKKyAgICBnX3NsaWNl
X2ZyZWUoV2ViS2l0U291cENhY2hlQ29yZUVudHJ5LCBlbnRyeSk7Cit9CisKK3N0YXRpYyB2b2lk
IGNvcHlIZWFkZXJzKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIHZhbHVlLCBTb3VwTWVz
c2FnZUhlYWRlcnMqIGhlYWRlcnMpCit7CisgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5k
KGhlYWRlcnMsIG5hbWUsIHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlSGVhZGVycyhj
b25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiB2YWx1ZSwgU291cE1lc3NhZ2VIZWFkZXJzKiBo
ZWFkZXJzKQoreworICAgIGlmIChzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQoaGVhZGVycywgbmFt
ZSkpCisgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX3JlcGxhY2UoaGVhZGVycywgbmFtZSwg
dmFsdWUpOworICAgIGVsc2UKKyAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKGhl
YWRlcnMsIG5hbWUsIHZhbHVlKTsKK30KKworc3RhdGljIGd1aW50IHdlYmtpdF9zb3VwX2NhY2hl
X2NvcmVfZW50cnlfZ2V0X2N1cnJlbnRfYWdlKFdlYktpdFNvdXBDYWNoZUNvcmVFbnRyeSogZW50
cnkpCit7CisgICAgdGltZV90IG5vdyA9IHRpbWUoMCk7CisgICAgdGltZV90IHJlc2lkZW50VGlt
ZTsKKworICAgIHJlc2lkZW50VGltZSA9IG5vdyAtIGVudHJ5LT5yZXNwb25zZVRpbWU7CisgICAg
cmV0dXJuIGVudHJ5LT5jb3JyZWN0ZWRJbml0aWFsQWdlICsgcmVzaWRlbnRUaW1lOworfQorCitz
dGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3NvdXBfY2FjaGVfY29yZV9lbnRyeV9pc19mcmVzaF9lbm91
Z2goV2ViS2l0U291cENhY2hlQ29yZUVudHJ5KiBlbnRyeSwgaW50IG1pbkZyZXNoKQoreworICAg
IGd1aW50IGxpbWl0ID0gKG1pbkZyZXNoID09IC0xKSA/IHdlYmtpdF9zb3VwX2NhY2hlX2NvcmVf
ZW50cnlfZ2V0X2N1cnJlbnRfYWdlKGVudHJ5KSA6IChndWludCkgbWluRnJlc2g7CisKKyAgICBy
ZXR1cm4gZW50cnktPmZyZXNobmVzc0xpZmV0aW1lID4gbGltaXQ7Cit9CisKK3N0YXRpYyBjaGFy
ICogc291cE1lc3NhZ2VHZXRDYWNoZUtleShTb3VwTWVzc2FnZSogbXNnKQoreworICAgIFNvdXBV
UkkqIHVyaSA9IHNvdXBfbWVzc2FnZV9nZXRfdXJpKG1zZyk7CisKKyAgICByZXR1cm4gc291cF91
cmlfdG9fc3RyaW5nKHVyaSwgRkFMU0UpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfc291cF9j
YWNoZV9jb3JlX2VudHJ5X3NldF9mcmVzaG5lc3MoV2ViS2l0U291cENhY2hlQ29yZUVudHJ5KiBl
bnRyeSwgU291cE1lc3NhZ2UqIG1zZywgV2ViS2l0U291cENhY2hlQ29yZSogY2FjaGUpCit7Cisg
ICAgY29uc3QgY2hhciogY2FjaGVDb250cm9sOworICAgIGNvbnN0IGNoYXIqIGV4cGlyZXMsICog
ZGF0ZSwgKiBsYXN0TW9kaWZpZWQ7CisgICAgR0hhc2hUYWJsZSogaGFzaDsKKworICAgIGhhc2gg
PSAwOworCisgICAgY2FjaGVDb250cm9sID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0KGVudHJ5
LT5oZWFkZXJzLCAiQ2FjaGUtQ29udHJvbCIpOworICAgIGlmIChjYWNoZUNvbnRyb2wpIHsKKyAg
ICAgICAgY29uc3QgY2hhciogbWF4QWdlLCAqIHNNYXhBZ2U7CisgICAgICAgIGd1aW50IGZyZXNo
bmVzc0xpZmV0aW1lID0gMDsKKyAgICAgICAgV2ViS2l0U291cENhY2hlQ29yZVByaXZhdGUqIHBy
aXYgPSBXRUJLSVRfU09VUF9DQUNIRV9DT1JFX0dFVF9QUklWQVRFKGNhY2hlKTsKKworICAgICAg
ICBoYXNoID0gc291cF9oZWFkZXJfcGFyc2VfcGFyYW1fbGlzdChjYWNoZUNvbnRyb2wpOworCisg
ICAgICAgIC8qIFNob3VsZCB3ZSByZS12YWxpZGF0ZSB0aGUgZW50cnkgd2hlbiBpdCBnb2VzIHN0
YWxlICovCisgICAgICAgIGVudHJ5LT5tdXN0UmV2YWxpZGF0ZSA9IChnYm9vbGVhbikgZ19oYXNo
X3RhYmxlX2xvb2t1cChoYXNoLCAibXVzdC1yZXZhbGlkYXRlIik7CisKKyAgICAgICAgLyogU2Vj
dGlvbiAyLjMuMSAqLworICAgICAgICBpZiAocHJpdi0+Y2FjaGVUeXBlID09IFdFQktJVF9TT1VQ
X0NBQ0hFX0NPUkVfU0hBUkVEKSB7CisgICAgICAgICAgICBzTWF4QWdlID0gKGNvbnN0IGdjaGFy
KilnX2hhc2hfdGFibGVfbG9va3VwKGhhc2gsICJzLW1heGFnZSIpOworICAgICAgICAgICAgaWYg
KHNNYXhBZ2UpIHsKKyAgICAgICAgICAgICAgICBmcmVzaG5lc3NMaWZldGltZSA9IGdfYXNjaWlf
c3RydG9sbChzTWF4QWdlLCAwLCAxMCk7CisgICAgICAgICAgICAgICAgaWYgKGZyZXNobmVzc0xp
ZmV0aW1lKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIEltcGxpZXMgcHJveHktcmV2YWxpZGF0
ZS4gVE9ETzogaXMgaXQgdHJ1ZT8gKi8KKyAgICAgICAgICAgICAgICAgICAgZW50cnktPm11c3RS
ZXZhbGlkYXRlID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgc291cF9oZWFkZXJfZnJlZV9w
YXJhbV9saXN0KGhhc2gpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogSWYgJ21heC1h
Z2UnIGNhY2hlIGRpcmVjdGl2ZSBpcyBwcmVzZW50LCB1c2UgdGhhdCAqLworICAgICAgICBtYXhB
Z2UgPSAoY29uc3QgZ2NoYXIqKWdfaGFzaF90YWJsZV9sb29rdXAoaGFzaCwgIm1heC1hZ2UiKTsK
KyAgICAgICAgaWYgKG1heEFnZSkKKyAgICAgICAgICAgIGZyZXNobmVzc0xpZmV0aW1lID0gZ19h
c2NpaV9zdHJ0b2xsKG1heEFnZSwgMCwgMTApOworCisgICAgICAgIGlmIChmcmVzaG5lc3NMaWZl
dGltZSkgeworICAgICAgICAgICAgZW50cnktPmZyZXNobmVzc0xpZmV0aW1lID0gKGd1aW50KSBz
dGQ6Om1pbjxndWludD4oZnJlc2huZXNzTGlmZXRpbWUsIEdfTUFYVUlOVDMyKTsKKyAgICAgICAg
ICAgIHNvdXBfaGVhZGVyX2ZyZWVfcGFyYW1fbGlzdChoYXNoKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChoYXNoKQorICAgICAgICBzb3VwX2hlYWRl
cl9mcmVlX3BhcmFtX2xpc3QoaGFzaCk7CisKKyAgICAvKiBJZiB0aGUgJ0V4cGlyZXMnIHJlc3Bv
bnNlIGhlYWRlciBpcyBwcmVzZW50LCB1c2UgaXRzIHZhbHVlCisgICAgICogbWludXMgdGhlIHZh
bHVlIG9mIHRoZSAnRGF0ZScgcmVzcG9uc2UgaGVhZGVyCisgICAgICovCisgICAgZXhwaXJlcyA9
IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldChlbnRyeS0+aGVhZGVycywgIkV4cGlyZXMiKTsKKyAg
ICBkYXRlID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0KGVudHJ5LT5oZWFkZXJzLCAiRGF0ZSIp
OworICAgIGlmIChleHBpcmVzICYmIGRhdGUpIHsKKyAgICAgICAgU291cERhdGUqIGV4cGlyZXNE
YXRlLCAqIGRhdGVEYXRlOworICAgICAgICB0aW1lX3QgZXhwaXJlc1RpbWUsIGRhdGVUaW1lOwor
CisgICAgICAgIGV4cGlyZXNEYXRlID0gc291cF9kYXRlX25ld19mcm9tX3N0cmluZyhleHBpcmVz
KTsKKyAgICAgICAgaWYgKGV4cGlyZXNEYXRlKSB7CisgICAgICAgICAgICBkYXRlRGF0ZSA9IHNv
dXBfZGF0ZV9uZXdfZnJvbV9zdHJpbmcoZGF0ZSk7CisKKyAgICAgICAgICAgIGV4cGlyZXNUaW1l
ID0gc291cF9kYXRlX3RvX3RpbWVfdChleHBpcmVzRGF0ZSk7CisgICAgICAgICAgICBkYXRlVGlt
ZSA9IHNvdXBfZGF0ZV90b190aW1lX3QoZGF0ZURhdGUpOworCisgICAgICAgICAgICBzb3VwX2Rh
dGVfZnJlZShleHBpcmVzRGF0ZSk7CisgICAgICAgICAgICBzb3VwX2RhdGVfZnJlZShkYXRlRGF0
ZSk7CisKKyAgICAgICAgICAgIGlmIChleHBpcmVzVGltZSAmJiBkYXRlVGltZSkgeworICAgICAg
ICAgICAgICAgIGVudHJ5LT5mcmVzaG5lc3NMaWZldGltZSA9IHN0ZDo6bWF4PGd1aW50PihleHBp
cmVzVGltZSAtIGRhdGVUaW1lLCAwKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiBJZiBFeHBpcmVzIGlzIG5v
dCBhIHZhbGlkIGRhdGUgd2Ugc2hvdWxkCisgICAgICAgICAgICAgICB0cmVhdCBpdCBhcyBhbHJl
YWR5IGV4cGlyZWQsIHNlZSBzZWN0aW9uCisgICAgICAgICAgICAgICAzLjMgKi8KKyAgICAgICAg
ICAgIGVudHJ5LT5mcmVzaG5lc3NMaWZldGltZSA9IDA7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBPdGhlcndpc2UgYW4gaGV1cmlzdGljIG1heSBiZSB1
c2VkICovCisKKyAgICAvKiBIZXVyaXN0aWNzIE1VU1QgTk9UIGJlIHVzZWQgd2l0aCB0aGVzZSBz
dGF0dXMgY29kZXMKKyAgICAgICAoc2VjdGlvbiAyLjMuMS4xKSAqLworICAgIGlmIChtc2ctPnN0
YXR1c19jb2RlICE9IFNPVVBfU1RBVFVTX09LICYmIG1zZy0+c3RhdHVzX2NvZGUgIT0gU09VUF9T
VEFUVVNfTk9OX0FVVEhPUklUQVRJVkUgJiYgbXNnLT5zdGF0dXNfY29kZSAhPSBTT1VQX1NUQVRV
U19QQVJUSUFMX0NPTlRFTlQgJiYgbXNnLT5zdGF0dXNfY29kZSAhPSBTT1VQX1NUQVRVU19NVUxU
SVBMRV9DSE9JQ0VTICYmIG1zZy0+c3RhdHVzX2NvZGUgIT0gU09VUF9TVEFUVVNfTU9WRURfUEVS
TUFORU5UTFkgJiYgbXNnLT5zdGF0dXNfY29kZSAhPSBTT1VQX1NUQVRVU19HT05FKQorICAgICAg
ICBnb3RvIGV4cGlyZTsKKworICAgIC8qIFRPRE86IGF0dGFjaCB3YXJuaW5nIDExMyBpZiByZXNw
b25zZSdzIGN1cnJlbnRfYWdlIGlzIG1vcmUKKyAgICAgICB0aGFuIDI0aCAoc2VjdGlvbiAyLjMu
MS4xKSB3aGVuIHVzaW5nIGhldXJpc3RpY3MgKi8KKworICAgIC8qIExhc3QtTW9kaWZpZWQgYmFz
ZWQgaGV1cmlzdGljICovCisgICAgbGFzdE1vZGlmaWVkID0gc291cF9tZXNzYWdlX2hlYWRlcnNf
Z2V0KGVudHJ5LT5oZWFkZXJzLCAiTGFzdC1Nb2RpZmllZCIpOworICAgIGlmIChsYXN0TW9kaWZp
ZWQpIHsKKyAgICAgICAgU291cERhdGUqIHNvdXBEYXRlOworICAgICAgICB0aW1lX3Qgbm93LCBs
YXN0TW9kaWZpZWRUOworCisgICAgICAgIHNvdXBEYXRlID0gc291cF9kYXRlX25ld19mcm9tX3N0
cmluZyhsYXN0TW9kaWZpZWQpOworICAgICAgICBsYXN0TW9kaWZpZWRUID0gc291cF9kYXRlX3Rv
X3RpbWVfdChzb3VwRGF0ZSk7CisgICAgICAgIG5vdyA9IHRpbWUoMCk7CisKKyNkZWZpbmUgSEVV
UklTVElDX0ZBQ1RPUiAwLjEgICAgLyogRnJvbSBTZWN0aW9uIDIuMy4xLjEgKi8KKworICAgICAg
ICBlbnRyeS0+ZnJlc2huZXNzTGlmZXRpbWUgPSBzdGQ6Om1heDxndWludD4oMCwgKG5vdyAtIGxh
c3RNb2RpZmllZFQpKiBIRVVSSVNUSUNfRkFDVE9SKTsKKyAgICAgICAgc291cF9kYXRlX2ZyZWUo
c291cERhdGUpOworICAgIH0KKworICAgIHJldHVybjsKKworZXhwaXJlOgorICAgIC8qIElmIGFs
bCBlbHNlIGZhaWxzLCBtYWtlIHRoZSBlbnRyeSBleHBpcmUgaW1tZWRpYXRlbHkgKi8KKyAgICBl
bnRyeS0+ZnJlc2huZXNzTGlmZXRpbWUgPSAwOworfQorCitzdGF0aWMgV2ViS2l0U291cENhY2hl
Q29yZUVudHJ5ICogd2Via2l0X3NvdXBfY2FjaGVfY29yZV9lbnRyeV9uZXcoV2ViS2l0U291cENh
Y2hlQ29yZSogY2FjaGUsIFNvdXBNZXNzYWdlKiBtc2csIHRpbWVfdCByZXF1ZXN0X3RpbWUsIHRp
bWVfdCByZXNwb25zZV90aW1lKQoreworICAgIFdlYktpdFNvdXBDYWNoZUNvcmVFbnRyeSogZW50
cnk7CisgICAgU291cE1lc3NhZ2VIZWFkZXJzKiBoZWFkZXJzOworICAgIGNvbnN0IGNoYXIqIGRh
dGU7CisgICAgY2hhciogbWQ1OworCisgICAgZW50cnkgPSBnX3NsaWNlX25ldzAoV2ViS2l0U291
cENhY2hlQ29yZUVudHJ5KTsKKyAgICBlbnRyeS0+ZGlydHkgPSBGQUxTRTsKKyAgICBlbnRyeS0+
d3JpdGluZyA9IEZBTFNFOworICAgIGVudHJ5LT5nb3RCb2R5ID0gRkFMU0U7CisgICAgZW50cnkt
PmJlaW5nVmFsaWRhdGVkID0gRkFMU0U7CisgICAgZW50cnktPmRhdGEgPSBnX3N0cmluZ19uZXco
MCk7CisgICAgZW50cnktPnBvcyA9IDA7CisgICAgZW50cnktPmVycm9yID0gMDsKKworICAgIC8q
IGtleSAmIGZpbGVuYW1lICovCisgICAgZW50cnktPmtleSA9IHNvdXBNZXNzYWdlR2V0Q2FjaGVL
ZXkobXNnKTsKKyAgICBtZDUgPSBnX2NvbXB1dGVfY2hlY2tzdW1fZm9yX3N0cmluZyhHX0NIRUNL
U1VNX01ENSwgZW50cnktPmtleSwgLTEpOworICAgIGVudHJ5LT5maWxlbmFtZSA9IGdfYnVpbGRf
ZmlsZW5hbWUoY2FjaGUtPnByaXYtPmNhY2hlRGlyLCBtZDUsIDApOworICAgIGdfZnJlZShtZDUp
OworCisgICAgLyogSGVhZGVycyAqLworICAgIGhlYWRlcnMgPSBzb3VwX21lc3NhZ2VfaGVhZGVy
c19uZXcoU09VUF9NRVNTQUdFX0hFQURFUlNfUkVTUE9OU0UpOworICAgIHNvdXBfbWVzc2FnZV9o
ZWFkZXJzX2ZvcmVhY2gobXNnLT5yZXNwb25zZV9oZWFkZXJzLCAoU291cE1lc3NhZ2VIZWFkZXJz
Rm9yZWFjaEZ1bmMpIGNvcHlIZWFkZXJzLCBoZWFkZXJzKTsKKyAgICBlbnRyeS0+aGVhZGVycyA9
IGhlYWRlcnM7CisKKyAgICAvKiBMUlUgbGlzdCAqLworICAgIGVudHJ5LT5oaXRzID0gMDsKKwor
ICAgIC8qIFNlY3Rpb24gMi4zLjEsIEZyZXNobmVzcyBMaWZldGltZSAqLworICAgIHdlYmtpdF9z
b3VwX2NhY2hlX2NvcmVfZW50cnlfc2V0X2ZyZXNobmVzcyhlbnRyeSwgbXNnLCBjYWNoZSk7CisK
KyAgICAvKiBTZWN0aW9uIDIuMy4yLCBDYWxjdWxhdGluZyBBZ2UgKi8KKyAgICBkYXRlID0gc291
cF9tZXNzYWdlX2hlYWRlcnNfZ2V0KGVudHJ5LT5oZWFkZXJzLCAiRGF0ZSIpOworCisgICAgaWYg
KGRhdGUpIHsKKyAgICAgICAgU291cERhdGUqIHNvdXBEYXRlOworICAgICAgICBjb25zdCBjaGFy
KiBhZ2U7CisgICAgICAgIHRpbWVfdCBkYXRlVmFsdWUsIGFwcGFyZW50QWdlLCBjb3JyZWN0ZWRS
ZWNlaXZlZEFnZSwgcmVzcG9uc2VEZWxheSwgYWdlVmFsdWUgPSAwOworCisgICAgICAgIHNvdXBE
YXRlID0gc291cF9kYXRlX25ld19mcm9tX3N0cmluZyhkYXRlKTsKKyAgICAgICAgZGF0ZVZhbHVl
ID0gc291cF9kYXRlX3RvX3RpbWVfdChzb3VwRGF0ZSk7CisgICAgICAgIHNvdXBfZGF0ZV9mcmVl
KHNvdXBEYXRlKTsKKworICAgICAgICBhZ2UgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQoZW50
cnktPmhlYWRlcnMsICJBZ2UiKTsKKyAgICAgICAgaWYgKGFnZSkKKyAgICAgICAgICAgIGFnZVZh
bHVlID0gZ19hc2NpaV9zdHJ0b2xsKGFnZSwgMCwgMTApOworCisgICAgICAgIGVudHJ5LT5yZXNw
b25zZVRpbWUgPSByZXNwb25zZV90aW1lOworICAgICAgICBhcHBhcmVudEFnZSA9IHN0ZDo6bWF4
PHRpbWVfdD4oMCwgZW50cnktPnJlc3BvbnNlVGltZSAtIGRhdGVWYWx1ZSk7CisgICAgICAgIGNv
cnJlY3RlZFJlY2VpdmVkQWdlID0gc3RkOjptYXgoYXBwYXJlbnRBZ2UsIGFnZVZhbHVlKTsKKyAg
ICAgICAgcmVzcG9uc2VEZWxheSA9IGVudHJ5LT5yZXNwb25zZVRpbWUgLSByZXF1ZXN0X3RpbWU7
CisgICAgICAgIGVudHJ5LT5jb3JyZWN0ZWRJbml0aWFsQWdlID0gY29ycmVjdGVkUmVjZWl2ZWRB
Z2UgKyByZXNwb25zZURlbGF5OworICAgIH0gZWxzZSB7CisgICAgICAgIC8qIElzIHRoaXMgY29y
cmVjdCA/ICovCisgICAgICAgIGVudHJ5LT5jb3JyZWN0ZWRJbml0aWFsQWdlID0gdGltZSgwKTsK
KyAgICB9CisKKyAgICByZXR1cm4gZW50cnk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9zb3Vw
X2NhY2hlX2NvcmVfd3JpdGluZ19maXh0dXJlX2ZyZWUoV2ViS2l0U291cENhY2hlQ29yZVdyaXRp
bmdGaXh0dXJlKiBmaXh0dXJlKQoreworICAgIC8qIEZyZWUgZml4dHVyZS4gQW5kIGRpc2Nvbm5l
Y3Qgc2lnbmFscywgd2UgZG9uJ3Qgd2FudCB0bworICAgICAgIGxpc3RlbiB0byBtb3JlIFNvdXBN
ZXNzYWdlIGV2ZW50cyBhcyB3ZSdyZSBmaW5pc2hlZCB3aXRoCisgICAgICAgdGhpcyByZXNvdXJj
ZSAqLworICAgIGlmIChnX3NpZ25hbF9oYW5kbGVyX2lzX2Nvbm5lY3RlZChmaXh0dXJlLT5tc2cs
IGZpeHR1cmUtPmdvdENodW5rSGFuZGxlcikpCisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlz
Y29ubmVjdChmaXh0dXJlLT5tc2csIGZpeHR1cmUtPmdvdENodW5rSGFuZGxlcik7CisgICAgaWYg
KGdfc2lnbmFsX2hhbmRsZXJfaXNfY29ubmVjdGVkKGZpeHR1cmUtPm1zZywgZml4dHVyZS0+Z290
Qm9keUhhbmRsZXIpKQorICAgICAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QoZml4dHVy
ZS0+bXNnLCBmaXh0dXJlLT5nb3RCb2R5SGFuZGxlcik7CisgICAgaWYgKGdfc2lnbmFsX2hhbmRs
ZXJfaXNfY29ubmVjdGVkKGZpeHR1cmUtPm1zZywgZml4dHVyZS0+cmVzdGFydGVkSGFuZGxlcikp
CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdChmaXh0dXJlLT5tc2csIGZpeHR1
cmUtPnJlc3RhcnRlZEhhbmRsZXIpOworICAgIGdfb2JqZWN0X3VucmVmKGZpeHR1cmUtPm1zZyk7
CisgICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+Y2FjaGUpOworICAgIGdfc2xpY2VfZnJlZShX
ZWJLaXRTb3VwQ2FjaGVDb3JlV3JpdGluZ0ZpeHR1cmUsIGZpeHR1cmUpOworfQorCitzdGF0aWMg
dm9pZCBjbG9zZVJlYWR5Q2IoR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwg
V2ViS2l0U291cENhY2hlQ29yZVdyaXRpbmdGaXh0dXJlKiBmaXh0dXJlKQoreworICAgIFdlYktp
dFNvdXBDYWNoZUNvcmVFbnRyeSogZW50cnkgPSBmaXh0dXJlLT5lbnRyeTsKKyAgICBXZWJLaXRT
b3VwQ2FjaGVDb3JlKiBjYWNoZSA9IGZpeHR1cmUtPmNhY2hlOworICAgIEdPdXRwdXRTdHJlYW0q
IHN0cmVhbSA9IEdfT1VUUFVUX1NUUkVBTShzb3VyY2UpOworICAgIGdvZmZzZXQgY29udGVudExl
bmd0aDsKKworICAgIGdfd2Fybl9pZl9mYWlsKCFlbnRyeS0+ZXJyb3IpOworCisgICAgLyogRklY
TUU6IHdoYXQgZG8gd2UgZG8gb24gZXJyb3IgPyAqLworCisgICAgaWYgKHN0cmVhbSkgeworICAg
ICAgICBnX291dHB1dF9zdHJlYW1fY2xvc2VfZmluaXNoKHN0cmVhbSwgcmVzdWx0LCAwKTsKKyAg
ICAgICAgZ19vYmplY3RfdW5yZWYoc3RyZWFtKTsKKyAgICB9CisgICAgZW50cnktPnN0cmVhbSA9
IDA7CisKKyAgICBjb250ZW50TGVuZ3RoID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2NvbnRl
bnRfbGVuZ3RoKGVudHJ5LT5oZWFkZXJzKTsKKworICAgIC8qIElmIHRoZSBwcm9jZXNzIHdhcyBj
YW5jZWxsZWQsIHRoZW4gZGVsZXRlIHRoZSBlbnRyeSBmcm9tCisgICAgICAgdGhlIGNhY2hlLiBE
byBpdCBhbHNvIGlmIHRoZSBzaXplIG9mIGEgY2h1bmtlZCByZXNvdXJjZSBpcworICAgICAgIHRv
byBtdWNoIGZvciB0aGUgY2FjaGUgKi8KKyAgICBpZiAoZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxs
ZWQoZW50cnktPmNhbmNlbGxhYmxlKSkgeworICAgICAgICB3ZWJraXRfc291cF9jYWNoZV9jb3Jl
X2VudHJ5X2RlbGV0ZShjYWNoZSwgZW50cnkpOworICAgICAgICBlbnRyeSA9IDA7CisgICAgfSBl
bHNlIGlmICgoc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2VuY29kaW5nKGVudHJ5LT5oZWFkZXJz
KSA9PSBTT1VQX0VOQ09ESU5HX0NIVU5LRUQpIHx8IGVudHJ5LT5sZW5ndGggIT0gY29udGVudExl
bmd0aCkgeworCisgICAgICAgIC8qKiBUd28gb3B0aW9ucyBoZXJlOgorICAgICAgICAgKgorICAg
ICAgICAgKiAxLiAiY2h1bmtlZCIgZGF0YSwgZW50cnkgd2FzIHRlbXBvcmFyaWx5IGFkZGVkIHRv
CisgICAgICAgICAqIGNhY2hlIChhcyBjb250ZW50LWxlbmd0aCBpcyAwKSBhbmQgbm93IHRoYXQg
d2UgaGF2ZQorICAgICAgICAgKiB0aGUgYWN0dWFsIHNpemUgd2UgaGF2ZSB0byBldmFsdWF0ZSBp
ZiB3ZSB3YW50IGl0CisgICAgICAgICAqIGluIHRoZSBjYWNoZSBvciBub3QKKyAgICAgICAgICoK
KyAgICAgICAgICogMi4gQ29udGVudC1MZW5ndGggaGFzIGEgZGlmZmVyZW50IHZhbHVlIHRoYW4g
YWN0dWFsCisgICAgICAgICAqIGxlbmd0aCwgbWVhbnMgdGhhdCB0aGUgY29udGVudCB3YXMgZW5j
b2RlZCBmb3IKKyAgICAgICAgICogdHJhbnNtaXNzaW9uICh0eXBpY2FsbHkgY29tcHJlc3NlZCkg
YW5kIHRodXMgd2UKKyAgICAgICAgICogaGF2ZSB0byBzdWJzdHJhY3QgdGhlIGNvbnRlbnQtbGVu
Z3RoIHZhbHVlIHRoYXQgd2FzCisgICAgICAgICAqIGFkZGVkIHRvIHRoZSBjYWNoZSBhbmQgYWRk
IHRoZSB1bmVuY29kZWQgbGVuZ3RoCisgICAgICAgICAqICovCisgICAgICAgIGdpbnQgbGVuZ3Ro
VG9BZGQgPSBlbnRyeS0+bGVuZ3RoIC0gY29udGVudExlbmd0aDsKKworICAgICAgICAvKiBNYWtl
IHJvb20gaW4gY2FjaGUgaWYgbmVlZGVkICovCisgICAgICAgIGlmIChjYWNoZUFjY2VwdHNFbnRy
aWVzT2ZTaXplKGNhY2hlLCBsZW5ndGhUb0FkZCkpIHsKKyAgICAgICAgICAgIG1ha2VSb29tRm9y
TmV3RW50cnkoY2FjaGUsIGxlbmd0aFRvQWRkKTsKKworICAgICAgICAgICAgY2FjaGUtPnByaXYt
PnNpemUgKz0gbGVuZ3RoVG9BZGQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB3ZWJr
aXRfc291cF9jYWNoZV9jb3JlX2VudHJ5X2RlbGV0ZShjYWNoZSwgZW50cnkpOworICAgICAgICAg
ICAgZW50cnkgPSAwOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGVudHJ5KSB7CisgICAg
ICAgIC8qIEdldCByaWQgb2YgdGhlIEdTdHJpbmcgaW4gbWVtb3J5IGZvciB0aGUgcmVzb3VyY2Ug
bm93ICovCisgICAgICAgIGlmIChlbnRyeS0+ZGF0YSkgeworICAgICAgICAgICAgZ19zdHJpbmdf
ZnJlZShlbnRyeS0+ZGF0YSwgVFJVRSk7CisgICAgICAgICAgICBlbnRyeS0+ZGF0YSA9IDA7Cisg
ICAgICAgIH0KKworICAgICAgICBlbnRyeS0+ZGlydHkgPSBGQUxTRTsKKyAgICAgICAgZW50cnkt
PndyaXRpbmcgPSBGQUxTRTsKKyAgICAgICAgZW50cnktPmdvdEJvZHkgPSBGQUxTRTsKKyAgICAg
ICAgZW50cnktPnBvcyA9IDA7CisKKyAgICAgICAgZ19vYmplY3RfdW5yZWYoZW50cnktPmNhbmNl
bGxhYmxlKTsKKyAgICAgICAgZW50cnktPmNhbmNlbGxhYmxlID0gMDsKKyAgICB9CisKKyAgICBj
YWNoZS0+cHJpdi0+blBlbmRpbmctLTsKKworICAgIC8qIEZyZWVzICovCisgICAgd2Via2l0X3Nv
dXBfY2FjaGVfY29yZV93cml0aW5nX2ZpeHR1cmVfZnJlZShmaXh0dXJlKTsKK30KKworc3RhdGlj
IHZvaWQgd3JpdGVSZWFkeUNiKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXN1bHQs
IFdlYktpdFNvdXBDYWNoZUNvcmVXcml0aW5nRml4dHVyZSogZml4dHVyZSkKK3sKKyAgICBHT3V0
cHV0U3RyZWFtKiBzdHJlYW0gPSBHX09VVFBVVF9TVFJFQU0oc291cmNlKTsKKyAgICBHRXJyb3Iq
IGVycm9yID0gMDsKKyAgICBnc3NpemUgd3JpdGVTaXplOworICAgIFdlYktpdFNvdXBDYWNoZUNv
cmVFbnRyeSogZW50cnkgPSBmaXh0dXJlLT5lbnRyeTsKKworICAgIGlmIChnX2NhbmNlbGxhYmxl
X2lzX2NhbmNlbGxlZChlbnRyeS0+Y2FuY2VsbGFibGUpKSB7CisgICAgICAgIGdfb3V0cHV0X3N0
cmVhbV9jbG9zZV9hc3luYyhzdHJlYW0sIEdfUFJJT1JJVFlfREVGQVVMVCwgZW50cnktPmNhbmNl
bGxhYmxlLCAoR0FzeW5jUmVhZHlDYWxsYmFjaykgY2xvc2VSZWFkeUNiLCBmaXh0dXJlKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHdyaXRlU2l6ZSA9IGdfb3V0cHV0X3N0cmVhbV93
cml0ZV9maW5pc2goc3RyZWFtLCByZXN1bHQsICZlcnJvcik7CisgICAgaWYgKHdyaXRlU2l6ZSA8
PSAwIHx8IGVycm9yKSB7CisgICAgICAgIGlmIChlcnJvcikKKyAgICAgICAgICAgIGVudHJ5LT5l
cnJvciA9IGVycm9yOworICAgICAgICBnX291dHB1dF9zdHJlYW1fY2xvc2VfYXN5bmMoc3RyZWFt
LCBHX1BSSU9SSVRZX0RFRkFVTFQsIGVudHJ5LT5jYW5jZWxsYWJsZSwgKEdBc3luY1JlYWR5Q2Fs
bGJhY2spIGNsb3NlUmVhZHlDYiwgZml4dHVyZSk7CisgICAgICAgIC8qIEZJWE1FOiBXZSBzaG91
bGQgY29tcGxldGVseSBzdG9wIGNhY2hpbmcgdGhlCisgICAgICAgICAgIHJlc291cmNlIGF0IHRo
aXMgcG9pbnQgKi8KKyAgICB9IGVsc2UgeworICAgICAgICBlbnRyeS0+cG9zICs9IHdyaXRlU2l6
ZTsKKworICAgICAgICAvKiBBcmUgd2Ugc3RpbGwgd3JpdGluZyBhbmQgaXMgdGhlcmUgbmV3IGRh
dGEgdG8gd3JpdGUKKyAgICAgICAgICAgYWxyZWFkeSA/ICovCisgICAgICAgIGlmIChlbnRyeS0+
ZGF0YSAmJiBlbnRyeS0+cG9zIDwgZW50cnktPmRhdGEtPmxlbikKKyAgICAgICAgICAgIGdfb3V0
cHV0X3N0cmVhbV93cml0ZV9hc3luYyhlbnRyeS0+c3RyZWFtLCBlbnRyeS0+ZGF0YS0+c3RyICsg
ZW50cnktPnBvcywgZW50cnktPmRhdGEtPmxlbiAtIGVudHJ5LT5wb3MsIEdfUFJJT1JJVFlfREVG
QVVMVCwgZW50cnktPmNhbmNlbGxhYmxlLCAoR0FzeW5jUmVhZHlDYWxsYmFjaykgd3JpdGVSZWFk
eUNiLCBmaXh0dXJlKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBlbnRyeS0+d3JpdGlu
ZyA9IEZBTFNFOworCisgICAgICAgICAgICBpZiAoZW50cnktPmdvdEJvZHkpCisgICAgICAgICAg
ICAgICAgLyogSWYgd2UgYWxyZWFkeSByZWNlaXZlZCAnZ290LWJvZHknCisgICAgICAgICAgICAg
ICAgICAgYW5kIHdlIGhhdmUgd3JpdHRlbiBhbGwgdGhlIGRhdGEsCisgICAgICAgICAgICAgICAg
ICAgd2UgY2FuIGNsb3NlIHRoZSBzdHJlYW0gKi8KKyAgICAgICAgICAgICAgICBnX291dHB1dF9z
dHJlYW1fY2xvc2VfYXN5bmMoZW50cnktPnN0cmVhbSwgR19QUklPUklUWV9ERUZBVUxULCBlbnRy
eS0+Y2FuY2VsbGFibGUsIChHQXN5bmNSZWFkeUNhbGxiYWNrKSBjbG9zZVJlYWR5Q2IsIGZpeHR1
cmUpOworICAgICAgICB9CisKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIG1zZ0dvdENodW5rQ2Io
U291cE1lc3NhZ2UqIG1zZywgU291cEJ1ZmZlciogY2h1bmssIFdlYktpdFNvdXBDYWNoZUNvcmVX
cml0aW5nRml4dHVyZSogZml4dHVyZSkKK3sKKyAgICBXZWJLaXRTb3VwQ2FjaGVDb3JlRW50cnkq
IGVudHJ5ID0gZml4dHVyZS0+ZW50cnk7CisKKyAgICBnX3JldHVybl9pZl9mYWlsKGNodW5rLT5k
YXRhICYmIGNodW5rLT5sZW5ndGgpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoZW50cnkpOworCisg
ICAgLyogSWdub3JlIHRoaXMgaWYgdGhlIHdyaXRpbmcgb3IgYXBwZW5kaW5nIHdhcyBjYW5jZWxs
ZWQgKi8KKyAgICBpZiAoIWdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkKGVudHJ5LT5jYW5jZWxs
YWJsZSkpIHsKKworICAgICAgICBnX3N0cmluZ19hcHBlbmRfbGVuKGVudHJ5LT5kYXRhLCBjaHVu
ay0+ZGF0YSwgY2h1bmstPmxlbmd0aCk7CisgICAgICAgIGVudHJ5LT5sZW5ndGggPSBlbnRyeS0+
ZGF0YS0+bGVuOworCisgICAgICAgIGlmICghY2FjaGVBY2NlcHRzRW50cmllc09mU2l6ZShmaXh0
dXJlLT5jYWNoZSwgZW50cnktPmxlbmd0aCkpIHsKKyAgICAgICAgICAgIC8qIFF1aWNrbHkgY2Fu
Y2VsIHRoZSBjYWNoaW5nIG9mIHRoZSByZXNvdXJjZSAqLworICAgICAgICAgICAgZ19jYW5jZWxs
YWJsZV9jYW5jZWwoZW50cnktPmNhbmNlbGxhYmxlKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8qIEZJWE1FOiByZW1vdmUgdGhlIGVycm9yIGNoZWNrIHdoZW4gd2UgY2FuY2VsIHRoZSBjYWNo
aW5nIGF0CisgICAgICAgdGhlIGZpcnN0IHdyaXRlIGVycm9yICovCisgICAgLyogT25seSB3cml0
ZSBpZiB0aGUgZW50cnkgc3RyZWFtIGlzIHJlYWR5ICovCisgICAgaWYgKCFlbnRyeS0+d3JpdGlu
ZyAmJiAhZW50cnktPmVycm9yICYmIGVudHJ5LT5zdHJlYW0pIHsKKyAgICAgICAgR1N0cmluZyog
ZGF0YSA9IGVudHJ5LT5kYXRhOworICAgICAgICBlbnRyeS0+d3JpdGluZyA9IFRSVUU7CisgICAg
ICAgIGdfb3V0cHV0X3N0cmVhbV93cml0ZV9hc3luYyhlbnRyeS0+c3RyZWFtLCBkYXRhLT5zdHIg
KyBlbnRyeS0+cG9zLCBkYXRhLT5sZW4gLSBlbnRyeS0+cG9zLCBHX1BSSU9SSVRZX0RFRkFVTFQs
IGVudHJ5LT5jYW5jZWxsYWJsZSwgKEdBc3luY1JlYWR5Q2FsbGJhY2spIHdyaXRlUmVhZHlDYiwg
Zml4dHVyZSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBtc2dHb3RCb2R5Q2IoU291cE1lc3Nh
Z2UqIG1zZywgV2ViS2l0U291cENhY2hlQ29yZVdyaXRpbmdGaXh0dXJlKiBmaXh0dXJlKQorewor
ICAgIFdlYktpdFNvdXBDYWNoZUNvcmVFbnRyeSogZW50cnkgPSBmaXh0dXJlLT5lbnRyeTsKKwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoZW50cnkpOworCisgICAgZW50cnktPmdvdEJvZHkgPSBUUlVF
OworCisgICAgaWYgKCFlbnRyeS0+c3RyZWFtICYmIGVudHJ5LT5wb3MgIT0gZW50cnktPmxlbmd0
aCkKKyAgICAgICAgLyogVGhlIHN0cmVhbSBpcyBub3QgcmVhZHkgdG8gYmUgd3JpdHRlbiBidXQg
d2Ugc3RpbGwKKyAgICAgICAgICAgaGF2ZSBkYXRhIHRvIHdyaXRlLCB3ZSdsbCB3cml0ZSBpdCB3
aGVuIHRoZSBzdHJlYW0KKyAgICAgICAgICAgaXMgb3BlbmVkIGZvciB3cml0aW5nICovCisgICAg
ICAgIHJldHVybjsKKworCisgICAgaWYgKGVudHJ5LT5wb3MgIT0gZW50cnktPmxlbmd0aCkgewor
ICAgICAgICAvKiBJZiB3ZSBzdGlsbCBoYXZlIGRhdGEgdG8gd3JpdGUsIHdyaXRlIGl0LAorICAg
ICAgICAgICB3cml0ZVJlYWR5Q2Igd2lsbCBjbG9zZSB0aGUgc3RyZWFtICovCisgICAgICAgIGlm
ICghZW50cnktPndyaXRpbmcgJiYgIWVudHJ5LT5lcnJvciAmJiBlbnRyeS0+c3RyZWFtKQorICAg
ICAgICAgICAgZ19vdXRwdXRfc3RyZWFtX3dyaXRlX2FzeW5jKGVudHJ5LT5zdHJlYW0sIGVudHJ5
LT5kYXRhLT5zdHIgKyBlbnRyeS0+cG9zLCBlbnRyeS0+ZGF0YS0+bGVuIC0gZW50cnktPnBvcywg
R19QUklPUklUWV9ERUZBVUxULCBlbnRyeS0+Y2FuY2VsbGFibGUsIChHQXN5bmNSZWFkeUNhbGxi
YWNrKSB3cml0ZVJlYWR5Q2IsIGZpeHR1cmUpOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoZW50cnktPnN0cmVhbSkKKyAgICAgICAgZ19vdXRwdXRfc3RyZWFtX2Nsb3NlX2Fz
eW5jKGVudHJ5LT5zdHJlYW0sIEdfUFJJT1JJVFlfREVGQVVMVCwgZW50cnktPmNhbmNlbGxhYmxl
LCAoR0FzeW5jUmVhZHlDYWxsYmFjaykgY2xvc2VSZWFkeUNiLCBmaXh0dXJlKTsKK30KKworc3Rh
dGljIHZvaWQgd2Via2l0X3NvdXBfY2FjaGVfY29yZV9lbnRyeV9kZWxldGUoV2ViS2l0U291cENh
Y2hlQ29yZSogY2FjaGUsIFdlYktpdFNvdXBDYWNoZUNvcmVFbnRyeSogZW50cnkpCit7CisgICAg
R0ZpbGUqIGZpbGU7CisgICAgY2hhciogbWQ1LCAqIGZpbGVuYW1lOworCisgICAgLyogRGVsZXRl
IGNhY2hlIGZpbGUuIFdlIGRvbid0IHVzZSB0aGUgZW50cnktPmZpbGVuYW1lIGJlY2F1c2UKKyAg
ICAgICB3ZSB3YW50IHRvIGVuc3VyZSB0aGF0IGZpbGUgaXMgZGVsZXRlZCBldmVuIHRvdWdoIHRo
ZSBjYWNoZQorICAgICAgIGJlY2FtZSBzb21laG93IGNvcnJ1cHRlZCBhbmQgdGhlIGVudHJ5IGlz
IG5vdCB0aGVyZSAqLworICAgIG1kNSA9IGdfY29tcHV0ZV9jaGVja3N1bV9mb3Jfc3RyaW5nKEdf
Q0hFQ0tTVU1fTUQ1LCBlbnRyeS0+a2V5LCAtMSk7CisgICAgZmlsZW5hbWUgPSBnX2J1aWxkX2Zp
bGVuYW1lKGNhY2hlLT5wcml2LT5jYWNoZURpciwgbWQ1LCAwKTsKKyAgICBmaWxlID0gZ19maWxl
X25ld19mb3JfcGF0aChmaWxlbmFtZSk7CisgICAgZ19maWxlX2RlbGV0ZShmaWxlLCAwLCAwKTsK
KyAgICBnX2ZyZWUobWQ1KTsKKyAgICBnX2ZyZWUoZmlsZW5hbWUpOworICAgIGdfb2JqZWN0X3Vu
cmVmKGZpbGUpOworCisgICAgLyogUmVtb3ZlIGZyb20gTFJVICovCisgICAgY2FjaGUtPnByaXYt
PmxydVN0YXJ0ID0gZ19saXN0X2RlbGV0ZV9saW5rKGNhY2hlLT5wcml2LT5scnVTdGFydCwgZW50
cnktPmxydSk7CisKKyAgICAvKiBSZW1vdmUgZnJvbSBjYWNoZSAqLworICAgIGdfaGFzaF90YWJs
ZV9yZW1vdmUoY2FjaGUtPnByaXYtPmNhY2hlLCBlbnRyeS0+a2V5KTsKK30KKworc3RhdGljIGdp
bnQgbHJ1Q29tcGFyZUZ1bmMoZ2NvbnN0cG9pbnRlciBhLCBnY29uc3Rwb2ludGVyIGIpCit7Cisg
ICAgV2ViS2l0U291cENhY2hlQ29yZUVudHJ5KiBlbnRyeUEgPSAoV2ViS2l0U291cENhY2hlQ29y
ZUVudHJ5KikgYTsKKyAgICBXZWJLaXRTb3VwQ2FjaGVDb3JlRW50cnkqIGVudHJ5QiA9IChXZWJL
aXRTb3VwQ2FjaGVDb3JlRW50cnkqKSBiOworCisgICAgLyoqIFRoZSByYXRpb25hbGUgb2YgdGhp
cyBzb3J0aW5nIGZ1bmMgaXMKKyAgICAgKgorICAgICAqIDEuIHNvcnQgYnkgaGl0cyAtPiBMUlUg
YWxnb3JpdGhtLCB0aGVuCisgICAgICoKKyAgICAgKiAyLiBzb3J0IGJ5IGZyZXNobmVzcyBsaWZl
dGltZSwgd2UgYmV0dGVyIGRpc2NhcmQgZmlyc3QKKyAgICAgKiBlbnRyaWVzIHRoYXQgYXJlIGNs
b3NlIHRvIGV4cGlyZQorICAgICAqCisgICAgICogMy4gc29ydCBieSBzaXplLCByZXBsYWNlIGZp
cnN0IHNtYWxsIHNpemUgcmVzb3VyY2VzIGFzIHRoZXkKKyAgICAgKiBhcmUgY2hlYXBlciB0byBk
b3dubG9hZAorICAgICAqICovCisKKyAgICAvKiBTb3J0IGJ5IGhpdHMgKi8KKyAgICBpZiAoZW50
cnlBLT5oaXRzICE9IGVudHJ5Qi0+aGl0cykKKyAgICAgICAgcmV0dXJuIGVudHJ5QS0+aGl0cyAt
IGVudHJ5Qi0+aGl0czsKKworICAgIC8qIFNvcnQgYnkgZnJlc2huZXNzTGlmZXRpbWUgKi8KKyAg
ICBpZiAoZW50cnlBLT5mcmVzaG5lc3NMaWZldGltZSAhPSBlbnRyeUItPmZyZXNobmVzc0xpZmV0
aW1lKQorICAgICAgICByZXR1cm4gZW50cnlBLT5mcmVzaG5lc3NMaWZldGltZSAtIGVudHJ5Qi0+
ZnJlc2huZXNzTGlmZXRpbWU7CisKKyAgICAvKiBTb3J0IGJ5IHNpemUgKi8KKyAgICByZXR1cm4g
ZW50cnlBLT5sZW5ndGggLSBlbnRyeUItPmxlbmd0aDsKK30KKworc3RhdGljIGdib29sZWFuIGNh
Y2hlQWNjZXB0c0VudHJpZXNPZlNpemUoV2ViS2l0U291cENhY2hlQ29yZSogY2FjaGUsIGd1aW50
IGxlbmd0aFRvQWRkKQoreworICAgIC8qIFdlIGNvdWxkIGFkZCBoZXJlIHNvbWUgbW9yZSBoZXVy
aXN0aWNzLiBUT0RPOiByZXZpZXcgaG93CisgICAgICAgdGhpcyBpcyBkb25lIGJ5IG90aGVyIEhU
VFAgY2FjaGVzICovCisKKyAgICByZXR1cm4gbGVuZ3RoVG9BZGQgPD0gY2FjaGUtPnByaXYtPm1h
eEVudHJ5RGF0YVNpemU7Cit9CisKK3N0YXRpYyB2b2lkIG1ha2VSb29tRm9yTmV3RW50cnkoV2Vi
S2l0U291cENhY2hlQ29yZSogY2FjaGUsIGd1aW50IGxlbmd0aFRvQWRkKQoreworICAgIC8qIENo
ZWNrIHRoYXQgdGhlcmUgaXMgZW5vdWdoIHJvb20gZm9yIHRoZSBuZXcgZW50cnkuIFRoaXMgaXMK
KyAgICAgICBhbiBhcHByb3hpbWF0aW9uIGFzIHdlJ3JlIG5vdCB3b3JraW5nIG91dCB0aGUgc2l6
ZSBvZiB0aGUKKyAgICAgICB0cGwgZmlsZSBvciB0aGUgc2l6ZSBvZiB0aGUgaGVhZGVycyBmb3Ig
cGVyZm9ybWFuY2UKKyAgICAgICByZWFzb25zLiBUT0RPOiBjaGVjayBpZiB0aGF0IHdvdWxkIGJl
IHJlYWxseSB0aGF0IGV4cGVuc2l2ZSAqLworICAgIHdoaWxlIChjYWNoZS0+cHJpdi0+bHJ1U3Rh
cnQgJiYgKGxlbmd0aFRvQWRkICsgY2FjaGUtPnByaXYtPnNpemUgPiBjYWNoZS0+cHJpdi0+bWF4
U2l6ZSkpIHsKKyAgICAgICAgV2ViS2l0U291cENhY2hlQ29yZUVudHJ5KiBvbGRFbnRyeTsKKwor
ICAgICAgICAvKiBSZW1vdmUgZnJvbSBsaXN0ICovCisgICAgICAgIG9sZEVudHJ5ID0gKFdlYktp
dFNvdXBDYWNoZUNvcmVFbnRyeSopIGNhY2hlLT5wcml2LT5scnVTdGFydC0+ZGF0YTsKKyAgICAg
ICAgY2FjaGUtPnByaXYtPmxydVN0YXJ0ID0gZ19saXN0X2RlbGV0ZV9saW5rKGNhY2hlLT5wcml2
LT5scnVTdGFydCwgY2FjaGUtPnByaXYtPmxydVN0YXJ0KTsKKworICAgICAgICAvKiBEaXNjYXJk
IGVudHJpZXMuIE9uY2UgY2FuY2VsbGVkIHJlc291cmNlcyB3aWxsIGJlCisgICAgICAgICAgIGZy
ZWVkIGluIGNsb3NlUmVhZHlDYiAqLworICAgICAgICBnX2RlYnVnKCJEaXNjYXJkaW5nICgldSBi
eXRlcykuLi5cdChub3cgJXUpIiwgb2xkRW50cnktPmxlbmd0aCwgY2FjaGUtPnByaXYtPnNpemUp
OworICAgICAgICBjYWNoZS0+cHJpdi0+c2l6ZSAtPSBvbGRFbnRyeS0+bGVuZ3RoOworCisgICAg
ICAgIGlmIChvbGRFbnRyeS0+ZGlydHkpCisgICAgICAgICAgICBnX2NhbmNlbGxhYmxlX2NhbmNl
bChvbGRFbnRyeS0+Y2FuY2VsbGFibGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB3ZWJr
aXRfc291cF9jYWNoZV9jb3JlX2VudHJ5X2RlbGV0ZShjYWNoZSwgb2xkRW50cnkpOworICAgIH0K
KyAgICBpZiAoIUdfVU5MSUtFTFkoY2FjaGUtPnByaXYtPmxydVN0YXJ0KSkKKyAgICAgICAgY2Fj
aGUtPnByaXYtPmxydUVuZCA9IDA7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfc291cF9j
YWNoZV9jb3JlX2VudHJ5X2luc2VydF9ieV9rZXkoV2ViS2l0U291cENhY2hlQ29yZSogY2FjaGUs
IGNvbnN0IGNoYXIqIGtleSwgV2ViS2l0U291cENhY2hlQ29yZUVudHJ5KiBlbnRyeSkKK3sKKyAg
ICBndWludCBsZW5ndGhUb0FkZCA9IDA7CisKKyAgICBpZiAoc291cF9tZXNzYWdlX2hlYWRlcnNf
Z2V0X2VuY29kaW5nKGVudHJ5LT5oZWFkZXJzKSAhPSBTT1VQX0VOQ09ESU5HX0NIVU5LRUQpCisg
ICAgICAgIGxlbmd0aFRvQWRkID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2NvbnRlbnRfbGVu
Z3RoKGVudHJ5LT5oZWFkZXJzKTsKKworICAgIC8qIENoZWNrIGlmIHdlIGFyZSBnb2luZyB0byBz
dG9yZSB0aGUgcmVzb3VyY2UgZGVwZW5kaW5nIG9uIGl0cyBzaXplICovCisgICAgaWYgKGxlbmd0
aFRvQWRkKSB7CisgICAgICAgIGlmICghY2FjaGVBY2NlcHRzRW50cmllc09mU2l6ZShjYWNoZSwg
bGVuZ3RoVG9BZGQpKQorICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgICAgIC8qIE1h
a2Ugcm9vbSBmb3IgbmV3IGVudHJ5IGlmIG5lZWRlZCAqLworICAgICAgICBtYWtlUm9vbUZvck5l
d0VudHJ5KGNhY2hlLCBsZW5ndGhUb0FkZCk7CisgICAgfQorCisgICAgZ19oYXNoX3RhYmxlX2lu
c2VydChjYWNoZS0+cHJpdi0+Y2FjaGUsIGdfc3RyZHVwKGtleSksIGVudHJ5KTsKKworICAgIC8q
IENvbXB1dGUgbmV3IGNhY2hlIHNpemUgKi8KKyAgICBjYWNoZS0+cHJpdi0+c2l6ZSArPSBsZW5n
dGhUb0FkZDsKKworICAgIC8qIFVwZGF0ZSBMUlUgbGlzdHMgKi8KKyAgICBjYWNoZS0+cHJpdi0+
bHJ1U3RhcnQgPSBnX2xpc3RfaW5zZXJ0X3NvcnRlZChjYWNoZS0+cHJpdi0+bHJ1U3RhcnQsIGVu
dHJ5LCBscnVDb21wYXJlRnVuYyk7CisgICAgaWYgKEdfTElLRUxZKGNhY2hlLT5wcml2LT5scnVF
bmQpKSB7CisgICAgICAgIHdoaWxlIChjYWNoZS0+cHJpdi0+bHJ1RW5kLT5uZXh0KQorICAgICAg
ICAgICAgY2FjaGUtPnByaXYtPmxydUVuZCA9IGdfbGlzdF9uZXh0KGNhY2hlLT5wcml2LT5scnVF
bmQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGNhY2hlLT5wcml2LT5scnVFbmQgPSBjYWNoZS0+
cHJpdi0+bHJ1U3RhcnQ7CisgICAgfQorCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2
b2lkIG1zZ1Jlc3RhcnRlZENiKFNvdXBNZXNzYWdlKiBtc2csIFdlYktpdFNvdXBDYWNoZUNvcmVF
bnRyeSogZW50cnkpCit7CisgICAgLyogRklYTUU6IFdoYXQgc2hvdWxkIHdlIGRvIGhlcmUgZXhh
Y3RseT8gKi8KK30KKworc3RhdGljIHZvaWQgYXBwZW5kVG9SZWFkeUNiKEdPYmplY3QqIHNvdXJj
ZSwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIFdlYktpdFNvdXBDYWNoZUNvcmVXcml0aW5nRml4dHVy
ZSogZml4dHVyZSkKK3sKKyAgICBHRmlsZSogZmlsZSA9IChHRmlsZSopIHNvdXJjZTsKKyAgICBH
T3V0cHV0U3RyZWFtKiBzdHJlYW07CisgICAgV2ViS2l0U291cENhY2hlQ29yZUVudHJ5KiBlbnRy
eSA9IGZpeHR1cmUtPmVudHJ5OworCisgICAgc3RyZWFtID0gKEdPdXRwdXRTdHJlYW0qKSBnX2Zp
bGVfYXBwZW5kX3RvX2ZpbmlzaChmaWxlLCByZXN1bHQsICZlbnRyeS0+ZXJyb3IpOworCisgICAg
aWYgKGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkKGVudHJ5LT5jYW5jZWxsYWJsZSkgfHwgZW50
cnktPmVycm9yKSB7CisgICAgICAgIGZpeHR1cmUtPmNhY2hlLT5wcml2LT5zaXplIC09IHNvdXBf
bWVzc2FnZV9oZWFkZXJzX2dldF9jb250ZW50X2xlbmd0aChlbnRyeS0+aGVhZGVycyk7CisgICAg
ICAgIGZpeHR1cmUtPmNhY2hlLT5wcml2LT5uUGVuZGluZy0tOworICAgICAgICB3ZWJraXRfc291
cF9jYWNoZV9jb3JlX2VudHJ5X2RlbGV0ZShmaXh0dXJlLT5jYWNoZSwgZW50cnkpOworICAgICAg
ICB3ZWJraXRfc291cF9jYWNoZV9jb3JlX3dyaXRpbmdfZml4dHVyZV9mcmVlKGZpeHR1cmUpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZW50cnktPnN0cmVhbSA9IHN0YXRpY19jYXN0
IDwgR091dHB1dFN0cmVhbSogPihnX29iamVjdF9yZWYoc3RyZWFtKSk7CisgICAgZ19vYmplY3Rf
dW5yZWYoZmlsZSk7CisKKyAgICAvKiBJZiB3ZSBhbHJlYWR5IGdvdCBhbGwgdGhlIGRhdGEgd2Ug
aGF2ZSB0byBpbml0aWF0ZSB0aGUKKyAgICAgICB3cml0aW5nIGhlcmUsIHNpbmNlIHdlIHdvbid0
IGdldCBtb3JlICdnb3QtY2h1bmsnCisgICAgICAgc2lnbmFscyAqLworICAgIGlmIChlbnRyeS0+
Z290Qm9keSkgeworICAgICAgICBHU3RyaW5nKiBkYXRhID0gZW50cnktPmRhdGE7CisKKyAgICAg
ICAgLyogSXQgY291bGQgaGFwcGVuIHRoYXQgcmVhZGluZyB0aGUgZGF0YSBmcm9tIHNlcnZlcgor
ICAgICAgICAgICB3YXMgY29tcGxldGVkIGJlZm9yZSB0aGlzIGhhcHBlbnMuIEluIHRoYXQgY2Fz
ZQorICAgICAgICAgICB0aGVyZSBpcyBubyBkYXRhICovCisgICAgICAgIGlmIChkYXRhKSB7Cisg
ICAgICAgICAgICBlbnRyeS0+d3JpdGluZyA9IFRSVUU7CisgICAgICAgICAgICBnX291dHB1dF9z
dHJlYW1fd3JpdGVfYXN5bmMoZW50cnktPnN0cmVhbSwgZGF0YS0+c3RyICsgZW50cnktPnBvcywg
ZGF0YS0+bGVuIC0gZW50cnktPnBvcywgR19QUklPUklUWV9ERUZBVUxULCBlbnRyeS0+Y2FuY2Vs
bGFibGUsIChHQXN5bmNSZWFkeUNhbGxiYWNrKSB3cml0ZVJlYWR5Q2IsIGZpeHR1cmUpOworICAg
ICAgICB9CisgICAgfQorfQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgdGltZV90IHJlcXVlc3RU
aW1lOworICAgIFNvdXBTZXNzaW9uRmVhdHVyZSogZmVhdHVyZTsKKyAgICBndWxvbmcgZ290SGVh
ZGVyc0hhbmRsZXI7Cit9IFJlcXVlc3RIZWxwZXI7CisKK3N0YXRpYyB2b2lkIG1zZ0dvdEhlYWRl
cnNDYihTb3VwTWVzc2FnZSogbXNnLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBXZWJLaXRT
b3VwQ2FjaGVDb3JlKiBjYWNoZTsKKyAgICBXZWJLaXRTb3VwQ2FjaGVDb3JlYWJpbGl0eSBjYWNo
ZWFibGU7CisgICAgUmVxdWVzdEhlbHBlciogaGVscGVyOworICAgIHRpbWVfdCByZXF1ZXN0VGlt
ZSwgcmVzcG9uc2VUaW1lOworCisgICAgcmVzcG9uc2VUaW1lID0gdGltZSgwKTsKKworICAgIGhl
bHBlciA9IChSZXF1ZXN0SGVscGVyKikgdXNlckRhdGE7CisgICAgY2FjaGUgPSBXRUJLSVRfU09V
UF9DQUNIRV9DT1JFKGhlbHBlci0+ZmVhdHVyZSk7CisgICAgcmVxdWVzdFRpbWUgPSBoZWxwZXIt
PnJlcXVlc3RUaW1lOworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyht
c2csICh2b2lkKiltc2dHb3RIZWFkZXJzQ2IsIHVzZXJEYXRhKTsKKyAgICBnX3NsaWNlX2ZyZWUo
UmVxdWVzdEhlbHBlciwgaGVscGVyKTsKKworICAgIGNhY2hlYWJsZSA9IHdlYmtpdFNvdXBDYWNo
ZUNvcmVHZXRDYWNoZWFiaWxpdHkoY2FjaGUsIG1zZyk7CisKKyAgICBpZiAoY2FjaGVhYmxlICYg
V0VCS0lUX1NPVVBfQ0FDSEVfQ09SRV9DQUNIRUFCTEUpIHsKKyAgICAgICAgV2ViS2l0U291cENh
Y2hlQ29yZUVudHJ5KiBlbnRyeTsKKyAgICAgICAgY2hhcioga2V5OworICAgICAgICBHRmlsZSog
ZmlsZTsKKyAgICAgICAgV2ViS2l0U291cENhY2hlQ29yZVdyaXRpbmdGaXh0dXJlKiBmaXh0dXJl
OworCisgICAgICAgIC8qIENoZWNrIGlmIHdlIGFyZSBhbHJlYWR5IGNhY2hpbmcgdGhpcyByZXNv
dXJjZSAqLworICAgICAgICBrZXkgPSBzb3VwTWVzc2FnZUdldENhY2hlS2V5KG1zZyk7CisgICAg
ICAgIGVudHJ5ID0gc3RhdGljX2Nhc3QgPCBXZWJLaXRTb3VwQ2FjaGVDb3JlRW50cnkqID4oZ19o
YXNoX3RhYmxlX2xvb2t1cChjYWNoZS0+cHJpdi0+Y2FjaGUsIGtleSkpOworICAgICAgICBnX2Zy
ZWUoa2V5KTsKKworICAgICAgICBpZiAoZW50cnkgJiYgZW50cnktPmRpcnR5KQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIC8qIENyZWF0ZSBhIG5ldyBlbnRyeSwgZGVsZXRpbmcgYW55
IG9sZCBvbmUgaWYgcHJlc2VudCAqLworICAgICAgICBlbnRyeSA9IHdlYmtpdF9zb3VwX2NhY2hl
X2NvcmVfZW50cnlfbmV3KGNhY2hlLCBtc2csIHJlcXVlc3RUaW1lLCByZXNwb25zZVRpbWUpOwor
ICAgICAgICB3ZWJraXRfc291cF9jYWNoZV9jb3JlX2VudHJ5X2RlbGV0ZShjYWNoZSwgZW50cnkp
OworCisgICAgICAgIGVudHJ5LT5oaXRzID0gMTsKKworICAgICAgICAvKiBEbyBub3QgY29udGlu
dWUgaWYgaXQgY2FuIG5vdCBiZSBzdG9yZWQgKi8KKyAgICAgICAgaWYgKCF3ZWJraXRfc291cF9j
YWNoZV9jb3JlX2VudHJ5X2luc2VydF9ieV9rZXkoY2FjaGUsIChjb25zdCBnY2hhciopZW50cnkt
PmtleSwgZW50cnkpKSB7CisgICAgICAgICAgICB3ZWJraXRfc291cF9jYWNoZV9jb3JlX2VudHJ5
X2ZyZWUoZW50cnkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
Zml4dHVyZSA9IGdfc2xpY2VfbmV3KFdlYktpdFNvdXBDYWNoZUNvcmVXcml0aW5nRml4dHVyZSk7
CisgICAgICAgIGZpeHR1cmUtPmNhY2hlID0gc3RhdGljX2Nhc3QgPCBXZWJLaXRTb3VwQ2FjaGVD
b3JlKiA+KGdfb2JqZWN0X3JlZihjYWNoZSkpOworICAgICAgICBmaXh0dXJlLT5lbnRyeSA9IGVu
dHJ5OworICAgICAgICBmaXh0dXJlLT5tc2cgPSBzdGF0aWNfY2FzdCA8IFNvdXBNZXNzYWdlKiA+
KGdfb2JqZWN0X3JlZihtc2cpKTsKKworICAgICAgICAvKiBXZSBjb25uZWN0IG5vdyB0byB0aGVz
ZSBzaWduYWxzIGFuZCBidWZmZXIgdGhlIGRhdGEKKyAgICAgICAgICAgaWYgaXQgY29tZXMgYmVm
b3JlIHRoZSBmaWxlIGlzIHJlYWR5IGZvciB3cml0aW5nICovCisgICAgICAgIGZpeHR1cmUtPmdv
dENodW5rSGFuZGxlciA9IGdfc2lnbmFsX2Nvbm5lY3QobXNnLCAiZ290LWNodW5rIiwgR19DQUxM
QkFDSyhtc2dHb3RDaHVua0NiKSwgZml4dHVyZSk7CisgICAgICAgIGZpeHR1cmUtPmdvdEJvZHlI
YW5kbGVyID0gZ19zaWduYWxfY29ubmVjdChtc2csICJnb3QtYm9keSIsIEdfQ0FMTEJBQ0sobXNn
R290Qm9keUNiKSwgZml4dHVyZSk7CisgICAgICAgIGZpeHR1cmUtPnJlc3RhcnRlZEhhbmRsZXIg
PSBnX3NpZ25hbF9jb25uZWN0KG1zZywgInJlc3RhcnRlZCIsIEdfQ0FMTEJBQ0sobXNnUmVzdGFy
dGVkQ2IpLCBlbnRyeSk7CisKKyAgICAgICAgLyogUHJlcGFyZSBlbnRyeSAqLworICAgICAgICBm
aWxlID0gZ19maWxlX25ld19mb3JfcGF0aChlbnRyeS0+ZmlsZW5hbWUpOworICAgICAgICBjYWNo
ZS0+cHJpdi0+blBlbmRpbmcrKzsKKworICAgICAgICBlbnRyeS0+ZGlydHkgPSBUUlVFOworICAg
ICAgICBlbnRyeS0+Y2FuY2VsbGFibGUgPSBnX2NhbmNlbGxhYmxlX25ldygpOworICAgICAgICBn
X2ZpbGVfYXBwZW5kX3RvX2FzeW5jKGZpbGUsIHN0YXRpY19jYXN0IDwgR0ZpbGVDcmVhdGVGbGFn
cyA+ICgwKSwgR19QUklPUklUWV9ERUZBVUxULCBlbnRyeS0+Y2FuY2VsbGFibGUsIChHQXN5bmNS
ZWFkeUNhbGxiYWNrKSBhcHBlbmRUb1JlYWR5Q2IsIGZpeHR1cmUpOworICAgIH0gZWxzZSBpZiAo
Y2FjaGVhYmxlICYgV0VCS0lUX1NPVVBfQ0FDSEVfQ09SRV9JTlZBTElEQVRFUykgeworICAgICAg
ICBjaGFyKiBrZXk7CisgICAgICAgIFdlYktpdFNvdXBDYWNoZUNvcmVFbnRyeSogZW50cnk7CisK
KyAgICAgICAga2V5ID0gc291cE1lc3NhZ2VHZXRDYWNoZUtleShtc2cpOworICAgICAgICBlbnRy
eSA9IHN0YXRpY19jYXN0IDwgV2ViS2l0U291cENhY2hlQ29yZUVudHJ5KiA+KGdfaGFzaF90YWJs
ZV9sb29rdXAoY2FjaGUtPnByaXYtPmNhY2hlLCBrZXkpKTsKKyAgICAgICAgaWYgKGVudHJ5KQor
ICAgICAgICAgICAgd2Via2l0X3NvdXBfY2FjaGVfY29yZV9lbnRyeV9kZWxldGUoY2FjaGUsIGVu
dHJ5KTsKKyAgICAgICAgZ19mcmVlKGtleSk7CisgICAgfSBlbHNlIGlmIChjYWNoZWFibGUgJiBX
RUJLSVRfU09VUF9DQUNIRV9DT1JFX1ZBTElEQVRFUykgeworICAgICAgICBjaGFyKiBrZXk7Cisg
ICAgICAgIFdlYktpdFNvdXBDYWNoZUNvcmVFbnRyeSogZW50cnk7CisKKyAgICAgICAga2V5ID0g
c291cE1lc3NhZ2VHZXRDYWNoZUtleShtc2cpOworICAgICAgICBlbnRyeSA9IHN0YXRpY19jYXN0
IDwgV2ViS2l0U291cENhY2hlQ29yZUVudHJ5KiA+KGdfaGFzaF90YWJsZV9sb29rdXAoY2FjaGUt
PnByaXYtPmNhY2hlLCBrZXkpKTsKKyAgICAgICAgZ19mcmVlKGtleSk7CisKKyAgICAgICAgZ19y
ZXR1cm5faWZfZmFpbChlbnRyeSk7CisKKyAgICAgICAgZW50cnktPmJlaW5nVmFsaWRhdGVkID0g
RkFMU0U7CisKKyAgICAgICAgLyogV2UgdXBkYXRlIHRoZSBoZWFkZXJzIG9mIHRoZSBleGlzdGlu
ZyBjYWNoZSBpdGVtLAorICAgICAgICAgICBwbHVzIGl0cyBhZ2UgKi8KKyAgICAgICAgc291cF9t
ZXNzYWdlX2hlYWRlcnNfZm9yZWFjaChtc2ctPnJlc3BvbnNlX2hlYWRlcnMsIChTb3VwTWVzc2Fn
ZUhlYWRlcnNGb3JlYWNoRnVuYykgdXBkYXRlSGVhZGVycywgZW50cnktPmhlYWRlcnMpOworICAg
ICAgICB3ZWJraXRfc291cF9jYWNoZV9jb3JlX2VudHJ5X3NldF9mcmVzaG5lc3MoZW50cnksIG1z
ZywgY2FjaGUpOworICAgIH0KK30KKworR0lucHV0U3RyZWFtICogd2Via2l0U291cENhY2hlQ29y
ZVNlbmRSZXNwb25zZShXZWJLaXRTb3VwQ2FjaGVDb3JlKiBjYWNoZSwgU291cE1lc3NhZ2UqIG1z
ZykKK3sKKyAgICBjaGFyKiBrZXk7CisgICAgV2ViS2l0U291cENhY2hlQ29yZUVudHJ5KiBlbnRy
eTsKKyAgICBjaGFyKiBjdXJyZW50QWdlOworICAgIEdJbnB1dFN0cmVhbSogc3RyZWFtID0gMDsK
KyAgICBHRmlsZSogZmlsZTsKKworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9TT1VQ
X0lTX0NBQ0hFX0NPUkUoY2FjaGUpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChTT1VQ
X0lTX01FU1NBR0UobXNnKSwgMCk7CisKKyAgICBrZXkgPSBzb3VwTWVzc2FnZUdldENhY2hlS2V5
KG1zZyk7CisgICAgZW50cnkgPSBzdGF0aWNfY2FzdCA8IFdlYktpdFNvdXBDYWNoZUNvcmVFbnRy
eSogPihnX2hhc2hfdGFibGVfbG9va3VwKGNhY2hlLT5wcml2LT5jYWNoZSwga2V5KSk7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoZW50cnksIDApOworCisgICAgLyogSWYgd2UgYXJlIHRvbGQg
dG8gc2VuZCBhIHJlc3BvbnNlIGZyb20gY2FjaGUgYW55IHZhbGlkYXRpb24KKyAgICAgICBpbiBj
b3Vyc2UgaXMgb3ZlciBieSBub3cgKi8KKyAgICBlbnRyeS0+YmVpbmdWYWxpZGF0ZWQgPSBGQUxT
RTsKKworICAgIC8qIEhlYWRlcnMgKi8KKyAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19mb3JlYWNo
KGVudHJ5LT5oZWFkZXJzLCAoU291cE1lc3NhZ2VIZWFkZXJzRm9yZWFjaEZ1bmMpIHVwZGF0ZUhl
YWRlcnMsIG1zZy0+cmVzcG9uc2VfaGVhZGVycyk7CisKKyAgICAvKiBBZGQgJ0FnZScgaGVhZGVy
IHdpdGggdGhlIGN1cnJlbnQgYWdlICovCisgICAgY3VycmVudEFnZSA9IGdfc3RyZHVwX3ByaW50
ZigiJWQiLCB3ZWJraXRfc291cF9jYWNoZV9jb3JlX2VudHJ5X2dldF9jdXJyZW50X2FnZShlbnRy
eSkpOworICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX3JlcGxhY2UobXNnLT5yZXNwb25zZV9oZWFk
ZXJzLCAiQWdlIiwgY3VycmVudEFnZSk7CisgICAgZ19mcmVlKGN1cnJlbnRBZ2UpOworCisgICAg
LyogVE9ETzogdGhlIG9yaWdpbmFsIGlkZWEgd2FzIHRvIHNhdmUgcmVhZHMsIGJ1dCBjdXJyZW50
IGNvZGUKKyAgICAgICBhc3N1bWVzIHRoYXQgYSBzdHJlYW0gaXMgYWx3YXlzIHJldHVybmVkLiBO
ZWVkIHRvIHJlYWNoCisgICAgICAgc29tZSBhZ3JlZW1lbnQgaGVyZS4gQWxzbyB3ZSBoYXZlIHRv
IGhhbmRsZSB0aGUgc2l0dWF0aW9uCisgICAgICAgd2VyZSB0aGUgZmlsZSB3YXMgbm8gbG9uZ2Vy
IHRoZXJlIChmb3IgZXhhbXBsZSBmaWxlcworICAgICAgIHJlbW92ZWQgd2l0aG91dCBub3RpZnlp
bmcgdGhlIGNhY2hlICovCisgICAgZmlsZSA9IGdfZmlsZV9uZXdfZm9yX3BhdGgoZW50cnktPmZp
bGVuYW1lKTsKKyAgICBzdHJlYW0gPSAoR0lucHV0U3RyZWFtKikgZ19maWxlX3JlYWQoZmlsZSwg
MCwgMCk7CisKKyAgICByZXR1cm4gc3RyZWFtOworfQorCitzdGF0aWMgdm9pZCByZXF1ZXN0U3Rh
cnRlZChTb3VwU2Vzc2lvbkZlYXR1cmUqIGZlYXR1cmUsIFNvdXBTZXNzaW9uKiBzZXNzaW9uLCBT
b3VwTWVzc2FnZSogbXNnLCBTb3VwU29ja2V0KiBzb2NrZXQpCit7CisgICAgUmVxdWVzdEhlbHBl
ciogaGVscGVyID0gZ19zbGljZV9uZXcwKFJlcXVlc3RIZWxwZXIpOworCisgICAgaGVscGVyLT5y
ZXF1ZXN0VGltZSA9IHRpbWUoMCk7CisgICAgaGVscGVyLT5mZWF0dXJlID0gZmVhdHVyZTsKKyAg
ICBoZWxwZXItPmdvdEhlYWRlcnNIYW5kbGVyID0gZ19zaWduYWxfY29ubmVjdChtc2csICJnb3Qt
aGVhZGVycyIsIEdfQ0FMTEJBQ0sobXNnR290SGVhZGVyc0NiKSwgaGVscGVyKTsKK30KKworc3Rh
dGljIHZvaWQgYXR0YWNoKFNvdXBTZXNzaW9uRmVhdHVyZSogZmVhdHVyZSwgU291cFNlc3Npb24q
IHNlc3Npb24pCit7CisgICAgV2ViS2l0U291cENhY2hlQ29yZSogY2FjaGUgPSAoV2ViS2l0U291
cENhY2hlQ29yZSopIGZlYXR1cmU7CisKKyAgICBjYWNoZS0+cHJpdi0+c2Vzc2lvbiA9IHNlc3Np
b247CisKKyAgICB3ZWJraXRfc291cF9jYWNoZV9jb3JlX2RlZmF1bHRfZmVhdHVyZV9pbnRlcmZh
Y2UtPmF0dGFjaChmZWF0dXJlLCBzZXNzaW9uKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3Nv
dXBfY2FjaGVfY29yZV9zZXNzaW9uX2ZlYXR1cmVfaW5pdChTb3VwU2Vzc2lvbkZlYXR1cmVJbnRl
cmZhY2UqIGZlYXR1cmVJbnRlcmZhY2UsIGdwb2ludGVyIGludGVyZmFjZURhdGEpCit7CisgICAg
d2Via2l0X3NvdXBfY2FjaGVfY29yZV9kZWZhdWx0X2ZlYXR1cmVfaW50ZXJmYWNlID0gc3RhdGlj
X2Nhc3QgPCBTb3VwU2Vzc2lvbkZlYXR1cmVJbnRlcmZhY2UqID4oZ190eXBlX2RlZmF1bHRfaW50
ZXJmYWNlX3BlZWsoU09VUF9UWVBFX1NFU1NJT05fRkVBVFVSRSkpOworCisgICAgZmVhdHVyZUlu
dGVyZmFjZS0+YXR0YWNoID0gYXR0YWNoOworICAgIGZlYXR1cmVJbnRlcmZhY2UtPnJlcXVlc3Rf
c3RhcnRlZCA9IHJlcXVlc3RTdGFydGVkOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfc291cF9j
YWNoZV9jb3JlX2luaXQoV2ViS2l0U291cENhY2hlQ29yZSogY2FjaGUpCit7CisgICAgV2ViS2l0
U291cENhY2hlQ29yZVByaXZhdGUqIHByaXY7CisKKyAgICBwcml2ID0gY2FjaGUtPnByaXYgPSBX
RUJLSVRfU09VUF9DQUNIRV9DT1JFX0dFVF9QUklWQVRFKGNhY2hlKTsKKworICAgIHByaXYtPmNh
Y2hlID0gZ19oYXNoX3RhYmxlX25ld19mdWxsKGdfc3RyX2hhc2gsIGdfc3RyX2VxdWFsLCAoR0Rl
c3Ryb3lOb3RpZnkpIGdfZnJlZSwgKEdEZXN0cm95Tm90aWZ5KSB3ZWJraXRfc291cF9jYWNoZV9j
b3JlX2VudHJ5X2ZyZWUpOworCisgICAgLyogTFJVICovCisgICAgcHJpdi0+bHJ1U3RhcnQgPSAw
OworICAgIHByaXYtPmxydUVuZCA9IDA7CisKKyAgICAvKiAqLworICAgIHByaXYtPm5QZW5kaW5n
ID0gMDsKKworICAgIC8qIENhY2hlIHNpemUgKi8KKyAgICBwcml2LT5tYXhTaXplID0gREVGQVVM
VF9NQVhfU0laRTsKKyAgICBwcml2LT5tYXhFbnRyeURhdGFTaXplID0gcHJpdi0+bWF4U2l6ZSAv
IE1BWF9FTlRSWV9EQVRBX1BFUkNFTlRBR0U7CisgICAgcHJpdi0+c2l6ZSA9IDA7Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9zb3VwX2NhY2hlX2NvcmVfZmluYWxpemUoR09iamVjdCogb2JqZWN0
KQoreworICAgIFdlYktpdFNvdXBDYWNoZUNvcmVQcml2YXRlKiBwcml2OworCisgICAgcHJpdiA9
IFdFQktJVF9TT1VQX0NBQ0hFX0NPUkUob2JqZWN0KS0+cHJpdjsKKworICAgIGdfaGFzaF90YWJs
ZV9kZXN0cm95KHByaXYtPmNhY2hlKTsKKyAgICBnX2ZyZWUocHJpdi0+Y2FjaGVEaXIpOworCisg
ICAgZ19saXN0X2ZyZWUocHJpdi0+bHJ1U3RhcnQpOworICAgIHByaXYtPmxydVN0YXJ0ID0gMDsK
KyAgICBwcml2LT5scnVFbmQgPSAwOworCisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X3NvdXBf
Y2FjaGVfY29yZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfc291cF9jYWNoZV9jb3JlX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3Qs
IGd1aW50IHByb3BJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7
CisgICAgV2ViS2l0U291cENhY2hlQ29yZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfU09VUF9DQUNI
RV9DT1JFKG9iamVjdCktPnByaXY7CisKKyAgICBzd2l0Y2ggKHByb3BJZCkgeworICAgIGNhc2Ug
UFJPUF9DQUNIRV9ESVI6CisgICAgICAgIHByaXYtPmNhY2hlRGlyID0gZ192YWx1ZV9kdXBfc3Ry
aW5nKHZhbHVlKTsKKyAgICAgICAgLyogQ3JlYXRlIGRpcmVjdG9yeSBpZiBpdCBkb2VzIG5vdCBl
eGlzdCAoRklYTUU6IHNob3VsZCB3ZT8pICovCisgICAgICAgIGlmICghZ19maWxlX3Rlc3QocHJp
di0+Y2FjaGVEaXIsIHN0YXRpY19jYXN0IDwgR0ZpbGVUZXN0ID4gKEdfRklMRV9URVNUX0VYSVNU
UyB8IEdfRklMRV9URVNUX0lTX0RJUikpKQorICAgICAgICAgICAgZ19ta2Rpcl93aXRoX3BhcmVu
dHMocHJpdi0+Y2FjaGVEaXIsIDA3MDApOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
Q0FDSEVfVFlQRTogcHJpdi0+Y2FjaGVUeXBlID0gc3RhdGljX2Nhc3QgPCBXZWJLaXRTb3VwQ2Fj
aGVDb3JlVHlwZSA+IChnX3ZhbHVlX2dldF9lbnVtKHZhbHVlKSk7CisgICAgICAgIC8qIFRPRE86
IGNsZWFyIHByaXZhdGUgZW50cmllcyBhbmQgaXNzdWUgYSB3YXJuaW5nIGlmIG1vdmluZyB0byBz
aGFyZWQ/ICovCisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6IEdfT0JKRUNUX1dBUk5fSU5W
QUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJZCwgcHNwZWMpOworICAgICAgICBicmVhazsK
KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX2NhY2hlX2NvcmVfZ2V0X3Byb3Bl
cnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1T
cGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRTb3VwQ2FjaGVDb3JlUHJpdmF0ZSogcHJpdiA9IFdF
QktJVF9TT1VQX0NBQ0hFX0NPUkUob2JqZWN0KS0+cHJpdjsKKworICAgIHN3aXRjaCAocHJvcElk
KSB7CisgICAgY2FzZSBQUk9QX0NBQ0hFX0RJUjoKKyAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5n
KHZhbHVlLCBwcml2LT5jYWNoZURpcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9D
QUNIRV9UWVBFOgorICAgICAgICBnX3ZhbHVlX3NldF9lbnVtKHZhbHVlLCBwcml2LT5jYWNoZVR5
cGUpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJO
X0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSWQsIHBzcGVjKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfc291cF9jYWNoZV9jb3JlX2NvbnN0
cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRTb3VwQ2FjaGVDb3JlUHJpdmF0
ZSogcHJpdjsKKworICAgIHByaXYgPSBXRUJLSVRfU09VUF9DQUNIRV9DT1JFKG9iamVjdCktPnBy
aXY7CisKKyAgICBpZiAoIXByaXYtPmNhY2hlRGlyKSB7CisgICAgICAgIC8qIFNldCBhIGRlZmF1
bHQgY2FjaGUgZGlyLCBkaWZmZXJlbnQgZm9yIGVhY2ggdXNlciAqLworICAgICAgICBwcml2LT5j
YWNoZURpciA9IGdfYnVpbGRfZmlsZW5hbWUoZ19nZXRfdXNlcl9jYWNoZV9kaXIoKSwgImh0dHBj
YWNoZSIsIDApOworICAgICAgICBpZiAoIWdfZmlsZV90ZXN0KHByaXYtPmNhY2hlRGlyLCBzdGF0
aWNfY2FzdCA8IEdGaWxlVGVzdCA+IChHX0ZJTEVfVEVTVF9FWElTVFMgfCBHX0ZJTEVfVEVTVF9J
U19ESVIpKSkKKyAgICAgICAgICAgIGdfbWtkaXJfd2l0aF9wYXJlbnRzKHByaXYtPmNhY2hlRGly
LCAwNzAwKTsKKyAgICB9CisKKyAgICBpZiAoR19PQkpFQ1RfQ0xBU1Mod2Via2l0X3NvdXBfY2Fj
aGVfY29yZV9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3RlZCkKKyAgICAgICAgR19PQkpFQ1RfQ0xB
U1Mod2Via2l0X3NvdXBfY2FjaGVfY29yZV9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3RlZChvYmpl
Y3QpOworfQorCisjZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX0NPUkVfVFlQRV9UWVBFICh3ZWJr
aXRfc291cF9jYWNoZV9jb3JlX3R5cGVfZ2V0X3R5cGUoKSkKK3N0YXRpYyBHVHlwZSB3ZWJraXRf
c291cF9jYWNoZV9jb3JlX3R5cGVfZ2V0X3R5cGUodm9pZCkKK3sKKyAgICBzdGF0aWMgR1R5cGUg
Y2FjaGVUeXBlID0gMDsKKworICAgIHN0YXRpYyBjb25zdCBHRW51bVZhbHVlIGNhY2hlVHlwZXNb
XSA9IHsKKyAgICAgICAgeworICAgICAgICAgICAgV0VCS0lUX1NPVVBfQ0FDSEVfQ09SRV9TSU5H
TEVfVVNFUiwgIlNpbmdsZSB1c2VyIGNhY2hlIiwgInVzZXIiCisgICAgICAgIH0sIHsKKyAgICAg
ICAgICAgIFdFQktJVF9TT1VQX0NBQ0hFX0NPUkVfU0hBUkVELCAiU2hhcmVkIGNhY2hlIiwgInNo
YXJlZCIKKyAgICAgICAgfSwgeworICAgICAgICAgICAgMCwgMCwgMAorICAgICAgICB9CisgICAg
fTsKKworICAgIGlmICghY2FjaGVUeXBlKQorICAgICAgICBjYWNoZVR5cGUgPSBnX2VudW1fcmVn
aXN0ZXJfc3RhdGljKCJXZWJLaXRTb3VwQ2FjaGVDb3JlVHlwZSIsIGNhY2hlVHlwZXMpOworCisg
ICAgcmV0dXJuIGNhY2hlVHlwZTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3NvdXBfY2FjaGVf
Y29yZV9jbGFzc19pbml0KFdlYktpdFNvdXBDYWNoZUNvcmVDbGFzcyogY2FjaGVDbGFzcykKK3sK
KyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IChHT2JqZWN0Q2xhc3MqKSBjYWNoZUNs
YXNzOworCisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9zb3VwX2NhY2hlX2Nv
cmVfZmluYWxpemU7CisgICAgZ29iamVjdENsYXNzLT5jb25zdHJ1Y3RlZCA9IHdlYmtpdF9zb3Vw
X2NhY2hlX2NvcmVfY29uc3RydWN0ZWQ7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkg
PSB3ZWJraXRfc291cF9jYWNoZV9jb3JlX3NldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0Q2xhc3Mt
PmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9zb3VwX2NhY2hlX2NvcmVfZ2V0X3Byb3BlcnR5OworCisg
ICAgY2FjaGVDbGFzcy0+Z2V0Q2FjaGVhYmlsaXR5ID0gZ2V0Q2FjaGVhYmlsaXR5OworCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsIFBST1BfQ0FDSEVf
RElSLCBnX3BhcmFtX3NwZWNfc3RyaW5nKCJjYWNoZS1kaXIiLCAiQ2FjaGUgZGlyZWN0b3J5Iiwg
IlRoZSBkaXJlY3RvcnkgdG8gc3RvcmUgdGhlIGNhY2hlIGZpbGVzIiwgMCwgc3RhdGljX2Nhc3Qg
PCBHUGFyYW1GbGFncyA+IChHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09O
TFkpKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFz
cywgUFJPUF9DQUNIRV9UWVBFLCBnX3BhcmFtX3NwZWNfZW51bSgiY2FjaGUtdHlwZSIsICJDYWNo
ZSB0eXBlIiwgIldoZXRoZXIgdGhlIGNhY2hlIGlzIHByaXZhdGUgb3Igc2hhcmVkIiwgV0VCS0lU
X1NPVVBfQ0FDSEVfQ09SRV9UWVBFX1RZUEUsIFdFQktJVF9TT1VQX0NBQ0hFX0NPUkVfU0lOR0xF
X1VTRVIsIHN0YXRpY19jYXN0IDwgR1BhcmFtRmxhZ3MgPiAoR19QQVJBTV9SRUFEV1JJVEUgfCBH
X1BBUkFNX0NPTlNUUlVDVF9PTkxZKSkpOworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRl
KGNhY2hlQ2xhc3MsIHNpemVvZihXZWJLaXRTb3VwQ2FjaGVDb3JlUHJpdmF0ZSkpOworfQorCisv
KioKKyAqIHdlYmtpdF9zb3VwX2NhY2hlX2NvcmVfbmV3OgorICogQGNhY2hlX2RpcjogdGhlIGRp
cmVjdG9yeSB0byBzdG9yZSB0aGUgY2FjaGVkIGRhdGEsIG9yICUwIHRvIHVzZSB0aGUgZGVmYXVs
dCBvbmUKKyAqIEBjYWNoZV90eXBlOiB0aGUgI1dlYktpdFNvdXBDYWNoZUNvcmVUeXBlIG9mIHRo
ZSBjYWNoZQorICoKKyAqIENyZWF0ZXMgYSBuZXcgI1dlYktpdFNvdXBDYWNoZUNvcmUuCisgKgor
ICogUmV0dXJuczogYSBuZXcgI1dlYktpdFNvdXBDYWNoZUNvcmUKKyAqCisgKiBTaW5jZTogMi4y
OAorICoqLworV2ViS2l0U291cENhY2hlQ29yZSogd2Via2l0U291cENhY2hlQ29yZU5ldyhjb25z
dCBjaGFyKiBjYWNoZV9kaXIsIFdlYktpdFNvdXBDYWNoZUNvcmVUeXBlIGNhY2hlX3R5cGUpCit7
CisgICAgcmV0dXJuIChXZWJLaXRTb3VwQ2FjaGVDb3JlKikKKyAgICAgICAgICAgZ19vYmplY3Rf
bmV3KFdFQktJVF9UWVBFX1NPVVBfQ0FDSEVfQ09SRSwgImNhY2hlLWRpciIsIGNhY2hlX2Rpciwg
ImNhY2hlLXR5cGUiLCBjYWNoZV90eXBlLCAwKTsKK30KKworLyoqCisgKiB3ZWJraXRfc291cF9j
YWNoZV9jb3JlX2hhc19yZXNwb25zZToKKyAqIEBjYWNoZTogYSAjV2ViS2l0U291cENhY2hlQ29y
ZQorICogQG1zZzogYSAjU291cE1lc3NhZ2UKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0
ZXMgd2hldGhlciB0aGUgQGNhY2hlIG9iamVjdCBoYXMgYSBwcm9wZXIKKyAqIHJlc3BvbnNlIGZv
ciB0aGUgcmVxdWVzdCBAbXNnIGdpdmVuIHRoZSBmbGFncyBib3RoIGluIHRoZSByZXF1ZXN0Cisg
KiBhbmQgdGhlIGNhY2hlZCByZXBseSBhbmQgdGhlIHRpbWUgZWxsYXBzZWQgc2luY2UgaXQgd2Fz
IGNhY2hlZC4KKyAqCisgKiBSZXR1cm5zOiB3aGV0aGVyIG9yIG5vdCB0aGUgQGNhY2hlIGhhcyBh
IHZhbGlkIHJlc3BvbnNlIGZvciBAbXNnCisgKiovCitXZWJLaXRTb3VwQ2FjaGVDb3JlUmVzcG9u
c2Ugd2Via2l0U291cENhY2hlQ29yZUhhc1Jlc3BvbnNlKFdlYktpdFNvdXBDYWNoZUNvcmUqIGNh
Y2hlLCBTb3VwTWVzc2FnZSogbXNnKQoreworICAgIGNoYXIqIGtleTsKKyAgICBXZWJLaXRTb3Vw
Q2FjaGVDb3JlRW50cnkqIGVudHJ5OworICAgIGNvbnN0IGNoYXIqIGNhY2hlQ29udHJvbDsKKyAg
ICBHSGFzaFRhYmxlKiBoYXNoOworICAgIGdwb2ludGVyIHZhbHVlOworICAgIGdib29sZWFuIG11
c3RSZXZhbGlkYXRlOworICAgIGludCBtYXhBZ2UsIG1heFN0YWxlLCBtaW5GcmVzaDsKKworICAg
IGtleSA9IHNvdXBNZXNzYWdlR2V0Q2FjaGVLZXkobXNnKTsKKyAgICBlbnRyeSA9IHN0YXRpY19j
YXN0IDwgV2ViS2l0U291cENhY2hlQ29yZUVudHJ5KiA+KGdfaGFzaF90YWJsZV9sb29rdXAoY2Fj
aGUtPnByaXYtPmNhY2hlLCBrZXkpKTsKKworICAgIC8qIDEuIFRoZSBwcmVzZW50ZWQgUmVxdWVz
dC1VUkkgYW5kIHRoYXQgb2Ygc3RvcmVkIHJlc3BvbnNlCisgICAgICogbWF0Y2gKKyAgICAgKi8K
KyAgICBpZiAoIWVudHJ5KQorICAgICAgICByZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfQ09SRV9S
RVNQT05TRV9TVEFMRTsKKworICAgIC8qIEluY3JlYXNlIGhpdCBjb3VudCAqLworICAgIGVudHJ5
LT5oaXRzKys7CisKKyAgICBpZiAoZW50cnktPmRpcnR5IHx8IGVudHJ5LT5iZWluZ1ZhbGlkYXRl
ZCkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX0NPUkVfUkVTUE9OU0VfU1RBTEU7
CisKKyAgICAvKiAyLiBUaGUgcmVxdWVzdCBtZXRob2QgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdG9y
ZWQgcmVzcG9uc2UKKyAgICAgKiAgYWxsb3dzIGl0IHRvIGJlIHVzZWQgZm9yIHRoZSBwcmVzZW50
ZWQgcmVxdWVzdAorICAgICAqLworCisgICAgLyogSW4gcHJhY3RpY2UgdGhpcyBtZWFucyB3ZSBv
bmx5IHJldHVybiBvdXIgcmVzb3VyY2UgZm9yIEdFVCwKKyAgICAgKiBjYWNoZWFiaWxpdHkgZm9y
IG90aGVyIG1ldGhvZHMgaXMgYSBUT0RPIGluIHRoZSBSRkMKKyAgICAgKiAoVE9ETzogYWx0aG91
Z2ggd2UgY291bGQgcmV0dXJuIHRoZSBoZWFkZXJzIGZvciBIRUFECisgICAgICogcHJvYmFibHkp
LgorICAgICAqLworICAgIGlmIChtc2ctPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpCisgICAg
ICAgIHJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9DT1JFX1JFU1BPTlNFX1NUQUxFOworCisgICAg
LyogMy4gU2VsZWN0aW5nIHJlcXVlc3QtaGVhZGVycyBub21pbmF0ZWQgYnkgdGhlIHN0b3JlZAor
ICAgICAqIHJlc3BvbnNlIChpZiBhbnkpIG1hdGNoIHRob3NlIHByZXNlbnRlZC4KKyAgICAgKi8K
KworICAgIC8qIFRPRE8gKi8KKworICAgIC8qIDQuIFRoZSBwcmVzZW50ZWQgcmVxdWVzdCBhbmQg
c3RvcmVkIHJlc3BvbnNlIGFyZSBmcmVlIGZyb20KKyAgICAgKiBkaXJlY3RpdmVzIHRoYXQgd291
bGQgcHJldmVudCBpdHMgdXNlLgorICAgICAqLworCisgICAgbXVzdFJldmFsaWRhdGUgPSBGQUxT
RTsKKyAgICBtYXhBZ2UgPSBtYXhTdGFsZSA9IG1pbkZyZXNoID0gLTE7CisKKyAgICBjYWNoZUNv
bnRyb2wgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQobXNnLT5yZXF1ZXN0X2hlYWRlcnMsICJD
YWNoZS1Db250cm9sIik7CisgICAgaWYgKGNhY2hlQ29udHJvbCkgeworICAgICAgICBoYXNoID0g
c291cF9oZWFkZXJfcGFyc2VfcGFyYW1fbGlzdChjYWNoZUNvbnRyb2wpOworCisgICAgICAgIGlm
IChnX2hhc2hfdGFibGVfbG9va3VwX2V4dGVuZGVkKGhhc2gsICJuby1zdG9yZSIsIDAsIDApKSB7
CisgICAgICAgICAgICBnX2hhc2hfdGFibGVfZGVzdHJveShoYXNoKTsKKyAgICAgICAgICAgIHJl
dHVybiBXRUJLSVRfU09VUF9DQUNIRV9DT1JFX1JFU1BPTlNFX1NUQUxFOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGdfaGFzaF90YWJsZV9sb29rdXBfZXh0ZW5kZWQoaGFzaCwgIm5vLWNhY2hl
IiwgMCwgMCkpCisgICAgICAgICAgICBlbnRyeS0+bXVzdFJldmFsaWRhdGUgPSBUUlVFOworCisg
ICAgICAgIGlmIChnX2hhc2hfdGFibGVfbG9va3VwX2V4dGVuZGVkKGhhc2gsICJtYXgtYWdlIiwg
MCwgJnZhbHVlKSkKKyAgICAgICAgICAgIG1heEFnZSA9IChpbnQpc3RkOjptaW48Z3VpbnQ+KGdf
YXNjaWlfc3RydG9sbChzdGF0aWNfY2FzdCA8IGNvbnN0IGdjaGFyKiA+KHZhbHVlKSwgMCwgMTAp
LCBHX01BWElOVDMyKTsKKworICAgICAgICAvKiBtYXgtc3RhbGUgY2FuIGhhdmUgbm8gdmFsdWUg
c2V0LCB3ZSBuZWVkIHRvIHVzZSBfZXh0ZW5kZWQgKi8KKyAgICAgICAgaWYgKGdfaGFzaF90YWJs
ZV9sb29rdXBfZXh0ZW5kZWQoaGFzaCwgIm1heC1zdGFsZSIsIDAsICZ2YWx1ZSkpIHsKKyAgICAg
ICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgICAgICBtYXhTdGFsZSA9IChpbnQpc3RkOjpt
aW48Z3VpbnQ+KGdfYXNjaWlfc3RydG9sbChzdGF0aWNfY2FzdCA8IGNvbnN0IGdjaGFyKiA+KHZh
bHVlKSwgMCwgMTApLCBHX01BWElOVDMyKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBtYXhTdGFsZSA9IEdfTUFYSU5UMzI7CisgICAgICAgIH0KKworICAgICAgICB2YWx1ZSA9
IGdfaGFzaF90YWJsZV9sb29rdXAoaGFzaCwgIm1pbi1mcmVzaCIpOworICAgICAgICBpZiAodmFs
dWUpCisgICAgICAgICAgICBtaW5GcmVzaCA9IChpbnQpc3RkOjptaW48Z3VpbnQ+KGdfYXNjaWlf
c3RydG9sbChzdGF0aWNfY2FzdCA8IGNvbnN0IGdjaGFyKiA+KHZhbHVlKSwgMCwgMTApLCBHX01B
WElOVDMyKTsKKworICAgICAgICBnX2hhc2hfdGFibGVfZGVzdHJveShoYXNoKTsKKworICAgICAg
ICBpZiAobWF4QWdlICE9IC0xKSB7CisgICAgICAgICAgICBndWludCBjdXJyZW50QWdlID0gd2Vi
a2l0X3NvdXBfY2FjaGVfY29yZV9lbnRyeV9nZXRfY3VycmVudF9hZ2UoZW50cnkpOworCisgICAg
ICAgICAgICAvKiBJZiB3ZSBhcmUgb3ZlciBtYXgtYWdlIGFuZCBtYXgtc3RhbGUgaXMgbm90Cisg
ICAgICAgICAgICAgICBzZXQsIGRvIG5vdCB1c2UgdGhlIHZhbHVlIGZyb20gdGhlIGNhY2hlCisg
ICAgICAgICAgICAgICB3aXRob3V0IHZhbGlkYXRpb24gKi8KKyAgICAgICAgICAgIGlmICgoZ3Vp
bnQpIG1heEFnZSA8PSBjdXJyZW50QWdlICYmIG1heFN0YWxlID09IC0xKQorICAgICAgICAgICAg
ICAgIHJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9DT1JFX1JFU1BPTlNFX05FRURTX1ZBTElEQVRJ
T047CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiA1LiBUaGUgc3RvcmVkIHJlc3BvbnNlIGlz
IGVpdGhlcjogZnJlc2gsIGFsbG93ZWQgdG8gYmUKKyAgICAgKiBzZXJ2ZWQgc3RhbGUgb3Igc3Vj
Y2VzZnVsbHkgdmFsaWRhdGVkCisgICAgICovCisgICAgLyogVE9ETyBjb25zaWRlciBhbHNvIHBy
b3h5LXJldmFsaWRhdGUgJiBzLW1heGFnZSAqLworICAgIGlmIChlbnRyeS0+bXVzdFJldmFsaWRh
dGUpCisgICAgICAgIHJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9DT1JFX1JFU1BPTlNFX05FRURT
X1ZBTElEQVRJT047CisKKyAgICBpZiAoIXdlYmtpdF9zb3VwX2NhY2hlX2NvcmVfZW50cnlfaXNf
ZnJlc2hfZW5vdWdoKGVudHJ5LCBtaW5GcmVzaCkpIHsKKyAgICAgICAgLyogTm90IGZyZXNoLCBj
YW4gaXQgYmUgc2VydmVkIHN0YWxlPyAqLworICAgICAgICBpZiAobWF4U3RhbGUgIT0gLTEpIHsK
KyAgICAgICAgICAgIC8qIEdfTUFYSU5UMzIgbWVhbnMgd2UgYWNjZXB0IGFueSBzdGFsZW5lc3Mg
Ki8KKyAgICAgICAgICAgIGlmIChtYXhTdGFsZSA9PSBHX01BWElOVDMyKQorICAgICAgICAgICAg
ICAgIHJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9DT1JFX1JFU1BPTlNFX0ZSRVNIOworCisgICAg
ICAgICAgICBpZiAoKHdlYmtpdF9zb3VwX2NhY2hlX2NvcmVfZW50cnlfZ2V0X2N1cnJlbnRfYWdl
KGVudHJ5KSAtIGVudHJ5LT5mcmVzaG5lc3NMaWZldGltZSkgPD0gKGd1aW50KSBtYXhTdGFsZSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfQ09SRV9SRVNQT05TRV9G
UkVTSDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9DT1JF
X1JFU1BPTlNFX05FRURTX1ZBTElEQVRJT047CisgICAgfQorCisgICAgcmV0dXJuIFdFQktJVF9T
T1VQX0NBQ0hFX0NPUkVfUkVTUE9OU0VfRlJFU0g7Cit9CisKKy8qKgorICogd2Via2l0X3NvdXBf
Y2FjaGVfY29yZV9nZXRfY2FjaGVhYmlsaXR5OgorICogQGNhY2hlOiBhICNXZWJLaXRTb3VwQ2Fj
aGVDb3JlCisgKiBAbXNnOiBhICNTb3VwTWVzc2FnZQorICoKKyAqIENhbGN1bGF0ZXMgd2hldGhl
ciB0aGUgQG1zZyBjYW4gYmUgY2FjaGVkIG9yIG5vdC4KKyAqCisgKiBSZXR1cm5zOiBhICNXZWJL
aXRTb3VwQ2FjaGVDb3JlYWJpbGl0eSB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIEBtc2cg
Y2FuIGJlIGNhY2hlZCBvciBub3QuCisgKiovCitXZWJLaXRTb3VwQ2FjaGVDb3JlYWJpbGl0eSB3
ZWJraXRTb3VwQ2FjaGVDb3JlR2V0Q2FjaGVhYmlsaXR5KFdlYktpdFNvdXBDYWNoZUNvcmUqIGNh
Y2hlLCBTb3VwTWVzc2FnZSogbXNnKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9TT1VQX0lTX0NBQ0hFX0NPUkUoY2FjaGUpLCBXRUJLSVRfU09VUF9DQUNIRV9DT1JFX1VOQ0FD
SEVBQkxFKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChTT1VQX0lTX01FU1NBR0UobXNnKSwg
V0VCS0lUX1NPVVBfQ0FDSEVfQ09SRV9VTkNBQ0hFQUJMRSk7CisKKyAgICByZXR1cm4gV0VCS0lU
X1NPVVBfQ0FDSEVfQ09SRV9HRVRfQ0xBU1MoY2FjaGUpLT5nZXRDYWNoZWFiaWxpdHkoY2FjaGUs
IG1zZyk7Cit9CisKKy8qKgorICogd2Via2l0X3NvdXBfY2FjaGVfY29yZV9mbHVzaDoKKyAqIEBj
YWNoZTogYSAjV2ViS2l0U291cENhY2hlQ29yZQorICogQHNlc3Npb246IHRoZSAjU291cFNlc3Np
b24gYXNzb2NpYXRlZCB3aXRoIHRoZSBAY2FjaGUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwg
Zm9yY2UgYWxsIHBlbmRpbmcgd3JpdGVzIGluIHRoZSBAY2FjaGUgdG8gYmUKKyAqIGNvbW1pdHRl
ZCB0byBkaXNrLiBGb3IgZG9pbmcgc28gaXQgd2lsbCBpdGVyYXRlIHRoZSAjR01haW5Db250ZXh0
CisgKiBhc3NvY2lhdGVkIHdpdGggdGhlIEBzZXNzaW9uICh3aGljaCBjYW4gYmUgdGhlIGRlZmF1
bHQgb25lKSBhcyBsb25nCisgKiBhcyBuZWVkZWQuCisgKiovCit2b2lkIHdlYmtpdFNvdXBDYWNo
ZUNvcmVGbHVzaChXZWJLaXRTb3VwQ2FjaGVDb3JlKiBjYWNoZSkKK3sKKyAgICBHTWFpbkNvbnRl
eHQqIGFzeW5jQ29udGV4dDsKKyAgICBTb3VwU2Vzc2lvbiogc2Vzc2lvbjsKKworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX1NPVVBfSVNfQ0FDSEVfQ09SRShjYWNoZSkpOworCisgICAgc2Vz
c2lvbiA9IGNhY2hlLT5wcml2LT5zZXNzaW9uOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoU09VUF9J
U19TRVNTSU9OKHNlc3Npb24pKTsKKyAgICBhc3luY0NvbnRleHQgPSBzb3VwX3Nlc3Npb25fZ2V0
X2FzeW5jX2NvbnRleHQoc2Vzc2lvbik7CisKKyAgICB3aGlsZSAoY2FjaGUtPnByaXYtPm5QZW5k
aW5nID4gMCkKKyAgICAgICAgZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uKGFzeW5jQ29udGV4dCwg
VFJVRSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZUNhY2hlSXRlbShncG9pbnRlciBrZXksIGdw
b2ludGVyIHZhbHVlLCBXZWJLaXRTb3VwQ2FjaGVDb3JlKiBjYWNoZSkKK3sKKyAgICBXZWJLaXRT
b3VwQ2FjaGVDb3JlRW50cnkqIGVudHJ5ID0gc3RhdGljX2Nhc3QgPCBXZWJLaXRTb3VwQ2FjaGVD
b3JlRW50cnkqID4oZ19oYXNoX3RhYmxlX2xvb2t1cChjYWNoZS0+cHJpdi0+Y2FjaGUsIChjb25z
dCBnY2hhciopa2V5KSk7CisKKyAgICB3ZWJraXRfc291cF9jYWNoZV9jb3JlX2VudHJ5X2RlbGV0
ZShjYWNoZSwgZW50cnkpOworfQorCisvKioKKyAqIHdlYmtpdF9zb3VwX2NhY2hlX2NvcmVfY2xl
YXI6CisgKiBAY2FjaGU6IGEgI1dlYktpdFNvdXBDYWNoZUNvcmUKKyAqCisgKiBXaWxsIHJlbW92
ZSBhbGwgZW50cmllcyBpbiB0aGUgQGNhY2hlIHBsdXMgYWxsIHRoZSBjYWNoZSBmaWxlcworICog
YXNzb2NpYXRlZCB3aXRoIHRoZW0uCisgKiovCit2b2lkIHdlYmtpdFNvdXBDYWNoZUNvcmVDbGVh
cihXZWJLaXRTb3VwQ2FjaGVDb3JlKiBjYWNoZSkKK3sKKyAgICBHSGFzaFRhYmxlKiBoYXNoOwor
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfU09VUF9JU19DQUNIRV9DT1JFKGNhY2hlKSk7
CisKKyAgICBoYXNoID0gY2FjaGUtPnByaXYtPmNhY2hlOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
aGFzaCk7CisKKyAgICBnX2hhc2hfdGFibGVfZm9yZWFjaChoYXNoLCAoR0hGdW5jKXJlbW92ZUNh
Y2hlSXRlbSwgY2FjaGUpOworfQorCitTb3VwTWVzc2FnZSogd2Via2l0U291cENhY2hlQ29yZUdl
bmVyYXRlQ29uZGl0aW9uYWxSZXF1ZXN0KFdlYktpdFNvdXBDYWNoZUNvcmUqIGNhY2hlLCBTb3Vw
TWVzc2FnZSogb3JpZ2luYWwpCit7CisgICAgU291cE1lc3NhZ2UqIG1zZzsKKyAgICBTb3VwVVJJ
KiB1cmk7CisgICAgV2ViS2l0U291cENhY2hlQ29yZUVudHJ5KiBlbnRyeTsKKyAgICBjaGFyKiBr
ZXk7CisgICAgY29uc3QgY2hhciogdmFsdWU7CisKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfU09VUF9JU19DQUNIRV9DT1JFKGNhY2hlKSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoU09VUF9JU19NRVNTQUdFKG9yaWdpbmFsKSwgMCk7CisKKyAgICAvKiBGaXJzdCBjb3B5
IHRoZSBkYXRhIHdlIG5lZWQgZnJvbSB0aGUgb3JpZ2luYWwgbWVzc2FnZSAqLworICAgIHVyaSA9
IHNvdXBfbWVzc2FnZV9nZXRfdXJpKG9yaWdpbmFsKTsKKyAgICBtc2cgPSBzb3VwX21lc3NhZ2Vf
bmV3X2Zyb21fdXJpKG9yaWdpbmFsLT5tZXRob2QsIHVyaSk7CisKKyAgICBzb3VwX21lc3NhZ2Vf
aGVhZGVyc19mb3JlYWNoKG9yaWdpbmFsLT5yZXF1ZXN0X2hlYWRlcnMsIChTb3VwTWVzc2FnZUhl
YWRlcnNGb3JlYWNoRnVuYykgY29weUhlYWRlcnMsIG1zZy0+cmVxdWVzdF9oZWFkZXJzKTsKKwor
ICAgIC8qIE5vdyBhZGQgdGhlIHZhbGlkYXRvciBlbnRyaWVzIGluIHRoZSBoZWFkZXIgZnJvbSB0
aGUgY2FjaGVkCisgICAgICAgZGF0YSAqLworICAgIGtleSA9IHNvdXBNZXNzYWdlR2V0Q2FjaGVL
ZXkob3JpZ2luYWwpOworICAgIGVudHJ5ID0gc3RhdGljX2Nhc3QgPCBXZWJLaXRTb3VwQ2FjaGVD
b3JlRW50cnkqID4oZ19oYXNoX3RhYmxlX2xvb2t1cChjYWNoZS0+cHJpdi0+Y2FjaGUsIGtleSkp
OworICAgIGdfZnJlZShrZXkpOworCisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZW50cnksIDAp
OworCisgICAgZW50cnktPmJlaW5nVmFsaWRhdGVkID0gVFJVRTsKKworICAgIHZhbHVlID0gc291
cF9tZXNzYWdlX2hlYWRlcnNfZ2V0KGVudHJ5LT5oZWFkZXJzLCAiTGFzdC1Nb2RpZmllZCIpOwor
ICAgIGlmICh2YWx1ZSkKKyAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1zZy0+
cmVxdWVzdF9oZWFkZXJzLCAiSWYtTW9kaWZpZWQtU2luY2UiLCB2YWx1ZSk7CisgICAgdmFsdWUg
PSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQoZW50cnktPmhlYWRlcnMsICJFVGFnIik7CisgICAg
aWYgKHZhbHVlKQorICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobXNnLT5yZXF1
ZXN0X2hlYWRlcnMsICJJZi1Ob25lLU1hdGNoIiwgdmFsdWUpOworICAgIHJldHVybiBtc2c7Cit9
CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBjb25zdCBjaGFyKiBrZXk7CisgICAgY29uc3QgY2hh
ciogdmFsdWU7Cit9IFN0cmluZ1BhaXI7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBnb2Zmc2V0
IGNvbnRlbnRMZW5ndGg7CisgICAgY2hhciBudW1IZWFkZXJzOyAvLyBpbnRlZ2VyLCBleHBlY3Rl
ZCBsb3cgbnVtYmVyCisgICAgY2hhciB0eXBlOyAvLyBlbnVtIHR5cGUKKyAgICBjaGFyIGVuY29k
aW5nOyAvLyBlbnVtIHR5cGUKKyAgICBjaGFyIGV4cGVjdGF0aW9uczsgLy8gZW51bSB0eXBlCisg
ICAgY29uc3QgY2hhciogY29udGVudFR5cGU7Cit9IFNvdXBNZXNzYWdlUGVyc2lzdGVudEhlYWRl
cnM7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRTb3VwQ2FjaGVDb3JlUGVyc2lzdGVudEVudHJ5
IHsKKyAgICBjb25zdCBjaGFyKiBrZXk7CisgICAgY29uc3QgY2hhciogZmlsZW5hbWU7CisgICAg
Z2Jvb2xlYW4gbXVzdFJldmFsaWRhdGU7CisgICAgZ3VpbnQzMiBmcmVzaG5lc3NMaWZldGltZTsK
KyAgICB0aW1lX3QgY29ycmVjdGVkSW5pdGlhbEFnZTsKKyAgICB0aW1lX3QgcmVzcG9uc2VUaW1l
OworICAgIGd1aW50MzIgaGl0czsKKyAgICBndWludDMyIGxlbmd0aDsKKyAgICBTb3VwTWVzc2Fn
ZVBlcnNpc3RlbnRIZWFkZXJzIHBoZWFkZXJzOworfSBXZWJLaXRTb3VwQ2FjaGVDb3JlUGVyc2lz
dGVudEVudHJ5OworCisjZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX0NPUkVfVFBMX0ZPUk1BVCAi
Uyhzc2N1dXV1dSQoVWNjY2NzKSkjUyhzcykjIgorI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9D
T1JFX1RQTF9GSUxFICJzb3VwLWNhY2hlLnRwbCIKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIEdB
cnJheSogZW50cnlBcnJheTsKKyAgICBHQXJyYXkqIGhlYWRlcnNBcnJheTsKK30gQ2FjaGVIZWxw
ZXI7CisKK3N0YXRpYyB2b2lkIHBhY2tFbnRyeShncG9pbnRlciBrZXksIGdwb2ludGVyIHZhbHVl
LCBncG9pbnRlciBkYXRhKQoreworICAgIFdlYktpdFNvdXBDYWNoZUNvcmVQZXJzaXN0ZW50RW50
cnkgcGVudHJ5OworICAgIFN0cmluZ1BhaXIgcGFpcjsKKyAgICBXZWJLaXRTb3VwQ2FjaGVDb3Jl
RW50cnkqIGVudHJ5ID0gKFdlYktpdFNvdXBDYWNoZUNvcmVFbnRyeSopIHZhbHVlOworICAgIENh
Y2hlSGVscGVyKiBoZWxwZXIgPSAoQ2FjaGVIZWxwZXIqKSBkYXRhOworICAgIFNvdXBNZXNzYWdl
SGVhZGVyc0l0ZXIgaXRlcjsKKyAgICBndWludCBudW0gPSAwOworCisgICAgLyogRG8gbm90IHN0
b3JlIG5vbi1jb25zb2xpZGF0ZWQgZW50cmllcyAqLworICAgIGlmIChlbnRyeS0+ZGlydHkgfHwg
ZW50cnktPndyaXRpbmcgfHwgIWVudHJ5LT5rZXkpCisgICAgICAgIHJldHVybjsKKworICAgIC8q
IFBhY2sgaGVhZGVycyAqLworICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2l0ZXJfaW5pdCgmaXRl
ciwgZW50cnktPmhlYWRlcnMpOworICAgIHdoaWxlIChzb3VwX21lc3NhZ2VfaGVhZGVyc19pdGVy
X25leHQoJml0ZXIsICYocGFpci5rZXkpLCAmKHBhaXIudmFsdWUpKSkgeworICAgICAgICBnX2Fy
cmF5X2FwcGVuZF92YWwoaGVscGVyLT5oZWFkZXJzQXJyYXksIHBhaXIpOworICAgICAgICBudW0r
KzsKKyAgICB9CisKKyAgICAvKiBFbnRyeSBkYXRhICovCisgICAgcGVudHJ5LmtleSA9IGVudHJ5
LT5rZXk7CisgICAgcGVudHJ5LmZpbGVuYW1lID0gZW50cnktPmZpbGVuYW1lOworICAgIHBlbnRy
eS5tdXN0UmV2YWxpZGF0ZSA9IGVudHJ5LT5tdXN0UmV2YWxpZGF0ZTsKKyAgICBwZW50cnkuZnJl
c2huZXNzTGlmZXRpbWUgPSBlbnRyeS0+ZnJlc2huZXNzTGlmZXRpbWU7CisgICAgcGVudHJ5LmNv
cnJlY3RlZEluaXRpYWxBZ2UgPSBlbnRyeS0+Y29ycmVjdGVkSW5pdGlhbEFnZTsKKyAgICBwZW50
cnkucmVzcG9uc2VUaW1lID0gZW50cnktPnJlc3BvbnNlVGltZTsKKyAgICBwZW50cnkuaGl0cyA9
IGVudHJ5LT5oaXRzOworICAgIHBlbnRyeS5sZW5ndGggPSBlbnRyeS0+bGVuZ3RoOworCisgICAg
LyogSGVhZGVycyBkYXRhICovCisgICAgcGVudHJ5LnBoZWFkZXJzLmNvbnRlbnRMZW5ndGggPSBz
b3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfY29udGVudF9sZW5ndGgoZW50cnktPmhlYWRlcnMpOwor
ICAgIHBlbnRyeS5waGVhZGVycy50eXBlID0gU09VUF9NRVNTQUdFX0hFQURFUlNfUkVTUE9OU0U7
CisgICAgcGVudHJ5LnBoZWFkZXJzLmVuY29kaW5nID0gKGNoYXIpc291cF9tZXNzYWdlX2hlYWRl
cnNfZ2V0X2VuY29kaW5nKGVudHJ5LT5oZWFkZXJzKTsKKyAgICBwZW50cnkucGhlYWRlcnMuZXhw
ZWN0YXRpb25zID0gKGNoYXIpc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2V4cGVjdGF0aW9ucyhl
bnRyeS0+aGVhZGVycyk7CisgICAgcGVudHJ5LnBoZWFkZXJzLmNvbnRlbnRUeXBlID0gKGNoYXIq
KXNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9jb250ZW50X3R5cGUoZW50cnktPmhlYWRlcnMsIDAp
OworICAgIHBlbnRyeS5waGVhZGVycy5udW1IZWFkZXJzID0gKGNoYXIpbnVtOworCisgICAgZ19h
cnJheV9hcHBlbmRfdmFsKGhlbHBlci0+ZW50cnlBcnJheSwgcGVudHJ5KTsKK30KKwordm9pZCB3
ZWJraXRTb3VwQ2FjaGVDb3JlRHVtcChXZWJLaXRTb3VwQ2FjaGVDb3JlKiBjYWNoZSkKK3sKKyAg
ICB0cGxfbm9kZSogdG47CisgICAgZ3VpbnQgc2l6ZTsKKyAgICBDYWNoZUhlbHBlciogaGVscGVy
ID0gZ19zbGljZV9uZXcwKENhY2hlSGVscGVyKTsKKyAgICBXZWJLaXRTb3VwQ2FjaGVDb3JlUHJp
dmF0ZSogcHJpdiA9IFdFQktJVF9TT1VQX0NBQ0hFX0NPUkVfR0VUX1BSSVZBVEUoY2FjaGUpOwor
ICAgIGdjaGFyKiBmaWxlbmFtZTsKKworICAgIC8qIENyZWF0ZSB0ZW1wb3JhbCBkYXRhIHRvIGR1
bXAgY2FjaGUgY29udGVudHMgKi8KKyAgICBzaXplID0gZ19oYXNoX3RhYmxlX3NpemUoY2FjaGUt
PnByaXYtPmNhY2hlKTsKKyAgICBoZWxwZXItPmVudHJ5QXJyYXkgPSBnX2FycmF5X3NpemVkX25l
dyhGQUxTRSwgRkFMU0UsIHNpemVvZihXZWJLaXRTb3VwQ2FjaGVDb3JlUGVyc2lzdGVudEVudHJ5
KSwgc2l6ZSk7CisgICAgaGVscGVyLT5oZWFkZXJzQXJyYXkgPSBnX2FycmF5X3NpemVkX25ldyhG
QUxTRSwgRkFMU0UsIHNpemVvZihTdHJpbmdQYWlyKSwgc2l6ZSk7CisgICAgZ19oYXNoX3RhYmxl
X2ZvcmVhY2goY2FjaGUtPnByaXYtPmNhY2hlLCAoR0hGdW5jKSBwYWNrRW50cnksIGhlbHBlcik7
CisKKyAgICAvKiBNYXAsIHBhY2sgJiBkdW1wICovCisgICAgdG4gPSB0cGxfbWFwKChjaGFyKilX
RUJLSVRfU09VUF9DQUNIRV9DT1JFX1RQTF9GT1JNQVQsIGhlbHBlci0+ZW50cnlBcnJheS0+ZGF0
YSwgaGVscGVyLT5lbnRyeUFycmF5LT5sZW4sIGhlbHBlci0+aGVhZGVyc0FycmF5LT5kYXRhLCBo
ZWxwZXItPmhlYWRlcnNBcnJheS0+bGVuKTsKKyAgICB0cGxfcGFjayh0biwgMCk7CisgICAgZmls
ZW5hbWUgPSBnX2J1aWxkX2ZpbGVuYW1lKHByaXYtPmNhY2hlRGlyLCBXRUJLSVRfU09VUF9DQUNI
RV9DT1JFX1RQTF9GSUxFLCAwKTsKKyAgICB0cGxfZHVtcCh0biwgVFBMX0ZJTEUsIGZpbGVuYW1l
KTsKKyAgICBnX2ZyZWUoZmlsZW5hbWUpOworICAgIHRwbF9mcmVlKHRuKTsKKworICAgIC8qIEZy
ZWVzICovCisgICAgZ19hcnJheV9mcmVlKGhlbHBlci0+ZW50cnlBcnJheSwgVFJVRSk7CisgICAg
Z19hcnJheV9mcmVlKGhlbHBlci0+aGVhZGVyc0FycmF5LCBUUlVFKTsKKyAgICBnX3NsaWNlX2Zy
ZWUoQ2FjaGVIZWxwZXIsIGhlbHBlcik7Cit9CisKK3ZvaWQgd2Via2l0U291cENhY2hlQ29yZUxv
YWQoV2ViS2l0U291cENhY2hlQ29yZSogY2FjaGUpCit7CisgICAgdHBsX25vZGUqIHRuID0gMDsK
KyAgICBXZWJLaXRTb3VwQ2FjaGVDb3JlUGVyc2lzdGVudEVudHJ5KiBwZW50cnlBcnJheSA9IDA7
CisgICAgU3RyaW5nUGFpciogcGhlYWRlcnNBcnJheSA9IDA7CisgICAgZ3VpbnQgaSwgYmFzZUhl
YWRlcjsKKyAgICBXZWJLaXRTb3VwQ2FjaGVDb3JlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9TT1VQ
X0NBQ0hFX0NPUkVfR0VUX1BSSVZBVEUoY2FjaGUpOworICAgIGdjaGFyKiBmaWxlbmFtZSA9IDAs
ICogZm10OworICAgIHVpbnQzMl90IG51bUZ4bGVucywgKiBmeGxlbnM7CisKKyAgICAvKiBHZXQg
dGhlIGFycmF5IGxlbmd0aHMgdG8gdW5wYWNrIGRhdGEgKi8KKyAgICBmaWxlbmFtZSA9IGdfYnVp
bGRfZmlsZW5hbWUocHJpdi0+Y2FjaGVEaXIsIFdFQktJVF9TT1VQX0NBQ0hFX0NPUkVfVFBMX0ZJ
TEUsIDApOworICAgIGZtdCA9IHRwbF9wZWVrKFRQTF9GSUxFIHwgVFBMX0ZYTEVOUywgZmlsZW5h
bWUsICZudW1GeGxlbnMsICZmeGxlbnMpOworICAgIGlmICghZm10KQorICAgICAgICByZXR1cm47
CisgICAgaWYgKG51bUZ4bGVucyAhPSAyKQorICAgICAgICBnb3RvIGZyZWVzOworCisgICAgcGVu
dHJ5QXJyYXkgPSBzdGF0aWNfY2FzdCA8IFdlYktpdFNvdXBDYWNoZUNvcmVQZXJzaXN0ZW50RW50
cnkqID4oZ19zbGljZV9hbGxvYzAoc2l6ZW9mKFdlYktpdFNvdXBDYWNoZUNvcmVQZXJzaXN0ZW50
RW50cnkpKiBmeGxlbnNbMF0pKTsKKyAgICBwaGVhZGVyc0FycmF5ID0gc3RhdGljX2Nhc3QgPCBT
dHJpbmdQYWlyKiA+KGdfc2xpY2VfYWxsb2MwKHNpemVvZihTdHJpbmdQYWlyKSogZnhsZW5zWzFd
KSk7CisKKyAgICB0biA9IHRwbF9tYXAoZm10LCBwZW50cnlBcnJheSwgZnhsZW5zWzBdLCBwaGVh
ZGVyc0FycmF5LCBmeGxlbnNbMV0pOworCisgICAgLyogTG9hZCBmaWxlIGFuZCB1bnBhY2sgZml4
ZWQgbGVuZ3RoIGFycmF5cyAqLworICAgIGlmICh0cGxfbG9hZCh0biwgVFBMX0ZJTEUsIGZpbGVu
YW1lKSA9PSAtMSkKKyAgICAgICAgZ290byBmcmVlczsKKworICAgIHRwbF91bnBhY2sodG4sIDAp
OworCisgICAgYmFzZUhlYWRlciA9IDA7CisgICAgZm9yIChpID0gMDsgaSA8IGZ4bGVuc1swXTsg
aSsrKSB7CisgICAgICAgIGd1aW50IGhpdGVyOworCisgICAgICAgIC8qIENyZWF0ZSB0aGUgZW50
cnkgKi8KKyAgICAgICAgV2ViS2l0U291cENhY2hlQ29yZUVudHJ5KiBlbnRyeSA9IGdfc2xpY2Vf
bmV3MChXZWJLaXRTb3VwQ2FjaGVDb3JlRW50cnkpOworICAgICAgICBlbnRyeS0+a2V5ID0gKGNo
YXIqKXBlbnRyeUFycmF5W2ldLmtleTsKKyAgICAgICAgZ19hc3NlcnQoZW50cnktPmtleSk7CisK
KyAgICAgICAgZW50cnktPmZpbGVuYW1lID0gKGNoYXIqKXBlbnRyeUFycmF5W2ldLmZpbGVuYW1l
OworICAgICAgICBlbnRyeS0+bXVzdFJldmFsaWRhdGUgPSBwZW50cnlBcnJheVtpXS5tdXN0UmV2
YWxpZGF0ZTsKKyAgICAgICAgZW50cnktPmZyZXNobmVzc0xpZmV0aW1lID0gcGVudHJ5QXJyYXlb
aV0uZnJlc2huZXNzTGlmZXRpbWU7CisgICAgICAgIGVudHJ5LT5jb3JyZWN0ZWRJbml0aWFsQWdl
ID0gcGVudHJ5QXJyYXlbaV0uY29ycmVjdGVkSW5pdGlhbEFnZTsKKyAgICAgICAgZW50cnktPnJl
c3BvbnNlVGltZSA9IHBlbnRyeUFycmF5W2ldLnJlc3BvbnNlVGltZTsKKyAgICAgICAgZW50cnkt
PmhpdHMgPSBwZW50cnlBcnJheVtpXS5oaXRzOworICAgICAgICBlbnRyeS0+bGVuZ3RoID0gcGVu
dHJ5QXJyYXlbaV0ubGVuZ3RoOworCisgICAgICAgIC8qIFRvIGF2b2lkIGRvdWJsZSBmcmVlICov
CisgICAgICAgIHBlbnRyeUFycmF5W2ldLmtleSA9IDA7CisgICAgICAgIHBlbnRyeUFycmF5W2ld
LmZpbGVuYW1lID0gMDsKKworICAgICAgICAvKiBIZWFkZXIgKi8KKyAgICAgICAgZW50cnktPmhl
YWRlcnMgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19uZXcoKFNvdXBNZXNzYWdlSGVhZGVyc1R5cGUp
IHBlbnRyeUFycmF5W2ldLnBoZWFkZXJzLnR5cGUpOworICAgICAgICBzb3VwX21lc3NhZ2VfaGVh
ZGVyc19zZXRfY29udGVudF9sZW5ndGgoZW50cnktPmhlYWRlcnMsIHBlbnRyeUFycmF5W2ldLnBo
ZWFkZXJzLmNvbnRlbnRMZW5ndGgpOworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19zZXRf
Y29udGVudF90eXBlKGVudHJ5LT5oZWFkZXJzLCBwZW50cnlBcnJheVtpXS5waGVhZGVycy5jb250
ZW50VHlwZSwgMCk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX3NldF9lbmNvZGluZyhl
bnRyeS0+aGVhZGVycywgKFNvdXBFbmNvZGluZykgcGVudHJ5QXJyYXlbaV0ucGhlYWRlcnMuZW5j
b2RpbmcpOworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19zZXRfZXhwZWN0YXRpb25zKGVu
dHJ5LT5oZWFkZXJzLCAoU291cEV4cGVjdGF0aW9uKSBwZW50cnlBcnJheVtpXS5waGVhZGVycy5l
eHBlY3RhdGlvbnMpOworCisgICAgICAgIC8qIHVucGFjayBoZWFkZXJzICovCisgICAgICAgIGZv
ciAoaGl0ZXIgPSAwOyBoaXRlciA8IChndWludCkgcGVudHJ5QXJyYXlbaV0ucGhlYWRlcnMubnVt
SGVhZGVyczsgaGl0ZXIrKykgeworICAgICAgICAgICAgZ3VpbnQgcmVhbEluZGV4OworCisgICAg
ICAgICAgICByZWFsSW5kZXggPSBiYXNlSGVhZGVyICsgaGl0ZXI7CisgICAgICAgICAgICBzb3Vw
X21lc3NhZ2VfaGVhZGVyc19yZXBsYWNlKGVudHJ5LT5oZWFkZXJzLCBwaGVhZGVyc0FycmF5W3Jl
YWxJbmRleF0ua2V5LCBwaGVhZGVyc0FycmF5W3JlYWxJbmRleF0udmFsdWUpOworICAgICAgICB9
CisgICAgICAgIGJhc2VIZWFkZXIgKz0gcGVudHJ5QXJyYXlbaV0ucGhlYWRlcnMubnVtSGVhZGVy
czsKKworICAgICAgICAvKiBJbnNlcnQgaW4gY2FjaGUgKi8KKyAgICAgICAgaWYgKCF3ZWJraXRf
c291cF9jYWNoZV9jb3JlX2VudHJ5X2luc2VydF9ieV9rZXkoY2FjaGUsIChjb25zdCBnY2hhciop
ZW50cnktPmtleSwgZW50cnkpKQorICAgICAgICAgICAgd2Via2l0X3NvdXBfY2FjaGVfY29yZV9l
bnRyeV9mcmVlKGVudHJ5KTsKKyAgICB9CisKK2ZyZWVzOgorICAgIGZyZWUoZm10KTsKKyAgICBp
ZiAobnVtRnhsZW5zID4gMCkKKyAgICAgICAgZnJlZShmeGxlbnMpOworICAgIGlmIChmaWxlbmFt
ZSkKKyAgICAgICAgZ19mcmVlKGZpbGVuYW1lKTsKKworICAgIGlmICh0bikKKyAgICAgICAgdHBs
X2ZyZWUodG4pOworICAgIGlmIChwZW50cnlBcnJheSkKKyAgICAgICAgZ19zbGljZV9mcmVlMShz
aXplb2YoV2ViS2l0U291cENhY2hlQ29yZVBlcnNpc3RlbnRFbnRyeSksIHBlbnRyeUFycmF5KTsK
K30KKwordm9pZCB3ZWJraXRTb3VwQ2FjaGVDb3JlU2V0TWF4U2l6ZShXZWJLaXRTb3VwQ2FjaGVD
b3JlKiBjYWNoZSwgZ3VpbnQgbWF4U2l6ZSkKK3sKKyAgICBjYWNoZS0+cHJpdi0+bWF4U2l6ZSA9
IG1heFNpemU7CisgICAgY2FjaGUtPnByaXYtPm1heEVudHJ5RGF0YVNpemUgPSBjYWNoZS0+cHJp
di0+bWF4U2l6ZSAvIE1BWF9FTlRSWV9EQVRBX1BFUkNFTlRBR0U7Cit9CisKK2d1aW50IHdlYmtp
dFNvdXBDYWNoZUNvcmVHZXRNYXhTaXplKFdlYktpdFNvdXBDYWNoZUNvcmUqIGNhY2hlKQorewor
ICAgIHJldHVybiBjYWNoZS0+cHJpdi0+bWF4U2l6ZTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvd2Via2l0c291cGNhY2hlY29yZS5oIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvd2Via2l0c291cGNhY2hlY29yZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MzQwNTcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJraXRzb3VwY2FjaGVjb3JlLmgKQEAgLTAsMCAr
MSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBJZ2FsaWEgUy5MLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0x
MzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiB3ZWJraXRzb3VwY2FjaGVjb3JlX2gKKyNkZWZpbmUg
d2Via2l0c291cGNhY2hlY29yZV9oIDEKKworI2luY2x1ZGUgPGdpby9naW8uaD4KKyNpbmNsdWRl
IDxsaWJzb3VwL3NvdXAtdHlwZXMuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVmaW5lcy5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJL
SVRfVFlQRV9TT1VQX0NBQ0hFX0NPUkUgICAgICAgICAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hl
X2NvcmVfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FDSEVfQ09SRShvYmopICAg
ICAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZ
UEVfU09VUF9DQUNIRV9DT1JFLCBXZWJLaXRTb3VwQ2FjaGVDb3JlKSkKKyNkZWZpbmUgV0VCS0lU
X1NPVVBfQ0FDSEVfQ09SRV9DTEFTUyhrbGFzcykgICAgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
Q0FTVCgoa2xhc3MpLCBXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFX0NPUkUsIFdlYktpdFNvdXBDYWNo
ZUNvcmVDbGFzcykpCisjZGVmaW5lIFdFQktJVF9TT1VQX0lTX0NBQ0hFX0NPUkUob2JqKSAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX0NBQ0hF
X0NPUkUpKQorI2RlZmluZSBXRUJLSVRfU09VUF9JU19DQUNIRV9DT1JFX0NMQVNTKGtsYXNzKSAo
R19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEVfQ09S
RSkpCisjZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX0NPUkVfR0VUX0NMQVNTKG9iaikgIChHX1RZ
UEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFX0NPUkUs
IFdlYktpdFNvdXBDYWNoZUNvcmVDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRTb3Vw
Q2FjaGVDb3JlUHJpdmF0ZSBXZWJLaXRTb3VwQ2FjaGVDb3JlUHJpdmF0ZTsKKwordHlwZWRlZiBl
bnVtIHsKKyAgICBXRUJLSVRfU09VUF9DQUNIRV9DT1JFX0NBQ0hFQUJMRSAgID0gKDEgPDwgMCks
CisgICAgV0VCS0lUX1NPVVBfQ0FDSEVfQ09SRV9VTkNBQ0hFQUJMRSA9ICgxIDw8IDEpLAorICAg
IFdFQktJVF9TT1VQX0NBQ0hFX0NPUkVfSU5WQUxJREFURVMgPSAoMSA8PCAyKSwKKyAgICBXRUJL
SVRfU09VUF9DQUNIRV9DT1JFX1ZBTElEQVRFUyA9ICgxIDw8IDMpCit9IFdlYktpdFNvdXBDYWNo
ZUNvcmVhYmlsaXR5OworCit0eXBlZGVmIGVudW0geworICAgIFdFQktJVF9TT1VQX0NBQ0hFX0NP
UkVfUkVTUE9OU0VfRlJFU0gsCisgICAgV0VCS0lUX1NPVVBfQ0FDSEVfQ09SRV9SRVNQT05TRV9O
RUVEU19WQUxJREFUSU9OLAorICAgIFdFQktJVF9TT1VQX0NBQ0hFX0NPUkVfUkVTUE9OU0VfU1RB
TEUKK30gV2ViS2l0U291cENhY2hlQ29yZVJlc3BvbnNlOworCit0eXBlZGVmIGVudW0geworICAg
IFdFQktJVF9TT1VQX0NBQ0hFX0NPUkVfU0lOR0xFX1VTRVIsCisgICAgV0VCS0lUX1NPVVBfQ0FD
SEVfQ09SRV9TSEFSRUQKK30gV2ViS2l0U291cENhY2hlQ29yZVR5cGU7CisKK3R5cGVkZWYgc3Ry
dWN0IHsKKyAgICBHT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKKworICAgIFdlYktpdFNvdXBDYWNo
ZUNvcmVQcml2YXRlKiBwcml2OworfSBXZWJLaXRTb3VwQ2FjaGVDb3JlOworCit0eXBlZGVmIHN0
cnVjdCB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKKworICAgIC8qIG1ldGhvZHMg
Ki8KKyAgICBXZWJLaXRTb3VwQ2FjaGVDb3JlYWJpbGl0eSAoKiBnZXRDYWNoZWFiaWxpdHkpKFdl
YktpdFNvdXBDYWNoZUNvcmUqIGNhY2hlLCBTb3VwTWVzc2FnZSogbXNnKTsKKworICAgIC8qIFBh
ZGRpbmcgZm9yIGZ1dHVyZSBleHBhbnNpb24gKi8KKyAgICB2b2lkICgqIF9saWJzb3VwX3Jlc2Vy
dmVkMSkodm9pZCk7CisgICAgdm9pZCAoKiBfbGlic291cF9yZXNlcnZlZDIpKHZvaWQpOworICAg
IHZvaWQgKCogX2xpYnNvdXBfcmVzZXJ2ZWQzKSh2b2lkKTsKK30gV2ViS2l0U291cENhY2hlQ29y
ZUNsYXNzOworCitHVHlwZSB3ZWJraXRfc291cF9jYWNoZV9jb3JlX2dldF90eXBlKHZvaWQpOwor
V2ViS2l0U291cENhY2hlQ29yZSogIHdlYmtpdFNvdXBDYWNoZUNvcmVOZXcoY29uc3QgY2hhciog
Y2FjaGVfZGlyLCBXZWJLaXRTb3VwQ2FjaGVDb3JlVHlwZSBjYWNoZV90eXBlKTsKK1dlYktpdFNv
dXBDYWNoZUNvcmVSZXNwb25zZSB3ZWJraXRTb3VwQ2FjaGVDb3JlSGFzUmVzcG9uc2UoV2ViS2l0
U291cENhY2hlQ29yZSogY2FjaGUsIFNvdXBNZXNzYWdlKiBtc2cpOworR0lucHV0U3RyZWFtKiAg
ICAgd2Via2l0U291cENhY2hlQ29yZVNlbmRSZXNwb25zZShXZWJLaXRTb3VwQ2FjaGVDb3JlKiBj
YWNoZSwgU291cE1lc3NhZ2UqIG1zZyk7CitXZWJLaXRTb3VwQ2FjaGVDb3JlYWJpbGl0eSB3ZWJr
aXRTb3VwQ2FjaGVDb3JlR2V0Q2FjaGVhYmlsaXR5KFdlYktpdFNvdXBDYWNoZUNvcmUqIGNhY2hl
LCBTb3VwTWVzc2FnZSogbXNnKTsKK3ZvaWQgd2Via2l0U291cENhY2hlQ29yZUZsdXNoKFdlYktp
dFNvdXBDYWNoZUNvcmUqIGNhY2hlKTsKK3ZvaWQgd2Via2l0U291cENhY2hlQ29yZUNsZWFyKFdl
YktpdFNvdXBDYWNoZUNvcmUqIGNhY2hlKTsKK1NvdXBNZXNzYWdlKiAgICAgIHdlYmtpdFNvdXBD
YWNoZUNvcmVHZW5lcmF0ZUNvbmRpdGlvbmFsUmVxdWVzdChXZWJLaXRTb3VwQ2FjaGVDb3JlKiBj
YWNoZSwgU291cE1lc3NhZ2UqIG9yaWdpbmFsKTsKKwordm9pZCB3ZWJraXRTb3VwQ2FjaGVDb3Jl
RHVtcChXZWJLaXRTb3VwQ2FjaGVDb3JlKiBjYWNoZSk7Cit2b2lkIHdlYmtpdFNvdXBDYWNoZUNv
cmVMb2FkKFdlYktpdFNvdXBDYWNoZUNvcmUqIGNhY2hlKTsKKwordm9pZCB3ZWJraXRTb3VwQ2Fj
aGVDb3JlU2V0TWF4U2l6ZShXZWJLaXRTb3VwQ2FjaGVDb3JlKiBjYWNoZSwgZ3VpbnQgbWF4U2l6
ZSk7CitndWludCB3ZWJraXRTb3VwQ2FjaGVDb3JlR2V0TWF4U2l6ZShXZWJLaXRTb3VwQ2FjaGVD
b3JlKiBjYWNoZSk7CisKK3ZvaWQgd2Via2l0U291cENhY2hlQ29yZUF0dGFjaChXZWJLaXRTb3Vw
Q2FjaGVDb3JlKiBjYWNoZSwgU291cFNlc3Npb25GZWF0dXJlKiBmZWF0dXJlLCBTb3VwU2Vzc2lv
biogc2Vzc2lvbik7CisKK3ZvaWQgd2Via2l0U291cENhY2hlQ29yZVJlcXVlc3RTdGFydGVkKFdl
YktpdFNvdXBDYWNoZUNvcmUqIGNhY2hlLCBTb3VwU2Vzc2lvbkZlYXR1cmUqIGZlYXR1cmUsIFNv
dXBTZXNzaW9uKiBzZXNzaW9uLCBTb3VwTWVzc2FnZSogbXNnLCBTb3VwU29ja2V0KiBzb2NrZXQp
OworCitHX0VORF9ERUNMUworCit9CisKKyNlbmRpZiAvKiB3ZWJraXRzb3VwY2FjaGVjb3JlX2gg
Ki8KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL3dlYmtpdHNvdXBk
aXJlY3RvcnlpbnB1dHN0cmVhbS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC93
ZWJraXRzb3VwZGlyZWN0b3J5aW5wdXRzdHJlYW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmEzZjJhYzAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC93ZWJraXRzb3VwZGlyZWN0b3J5aW5wdXRzdHJlYW0uY3BwCkBAIC0wLDAg
KzEsMTg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFJlZCBIYXQsIEluYy4KKyAqIENv
cHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICog
UHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwg
U3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIndlYmtpdHNvdXBkaXJlY3RvcnlpbnB1dHN0cmVhbS5o
IgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC1tZXNzYWdl
LWJvZHkuaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAtdXJpLmg+CisjaW5jbHVkZSA8c3RkaW8u
aD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjZGVmaW5l
IElOSVRfU1RSSU5HICI8aHRtbD48aGVhZD48dGl0bGU+T01HITwvdGl0bGU+PC9oZWFkPjxib2R5
Pjx0YWJsZT4iCisjZGVmaW5lIEVYSVRfU1RSSU5HICI8L3RhYmxlPjwvaHRtbD4iCisKK0dfREVG
SU5FX1RZUEUoV2ViS2l0U291cERpcmVjdG9yeUlucHV0U3RyZWFtLCB3ZWJraXRfc291cF9kaXJl
Y3RvcnlfaW5wdXRfc3RyZWFtLCBHX1RZUEVfSU5QVVRfU1RSRUFNKQorCitzdGF0aWMgU291cEJ1
ZmZlciAqCit3ZWJraXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW1QYXJzZUluZm8oV2ViS2l0U291
cERpcmVjdG9yeUlucHV0U3RyZWFtKiBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0ZpbGVJbmZvKiBpbmZvKQoreworICAgIFNvdXBCdWZmZXIq
IGJ1ZmZlcjsKKyAgICBHU3RyaW5nKiBzdHJpbmc7CisgICAgY29uc3QgY2hhciogczsKKyAgICBj
aGFyKiBlc2NhcGVkLCAqIHBhdGgsICogeG1sX3N0cmluZzsKKworICAgIGlmICghZ19maWxlX2lu
Zm9fZ2V0X25hbWUoaW5mbykpCisgICAgICAgIHJldHVybiAwOworCisgICAgcyA9IGdfZmlsZV9p
bmZvX2dldF9kaXNwbGF5X25hbWUoaW5mbyk7CisgICAgaWYgKCFzKSB7CisgICAgICAgIHMgPSBn
X2ZpbGVfaW5mb19nZXRfbmFtZShpbmZvKTsKKyAgICAgICAgLyogRklYTUU6IGNvbnZlcnQgc29t
ZWhvdz8gKi8KKyAgICAgICAgaWYgKCFnX3V0ZjhfdmFsaWRhdGUocywgLTEsIDApKQorICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHN0cmluZyA9IGdfc3RyaW5nX25ldygiPHRyPiIp
OworCisgICAgeG1sX3N0cmluZyA9IGdfbWFya3VwX2VzY2FwZV90ZXh0KHMsIC0xKTsKKyAgICBl
c2NhcGVkID0gZ191cmlfZXNjYXBlX3N0cmluZyhnX2ZpbGVfaW5mb19nZXRfbmFtZShpbmZvKSwg
MCwgRkFMU0UpOworICAgIHBhdGggPSBnX3N0cmNvbmNhdChzdHJlYW0tPnVyaSwgIi8iLCBlc2Nh
cGVkLCAwKTsKKyAgICBnX2ZyZWUoZXNjYXBlZCk7CisgICAgZ19zdHJpbmdfYXBwZW5kX3ByaW50
ZihzdHJpbmcsICI8dGQ+PGEgaHJlZj1cIiVzXCI+JXM8L2E+PC90ZD4iLCBwYXRoLCB4bWxfc3Ry
aW5nKTsKKyAgICBnX2ZyZWUocGF0aCk7CisgICAgZ19mcmVlKHhtbF9zdHJpbmcpOworICAgIGdf
c3RyaW5nX2FwcGVuZChzdHJpbmcsICI8L3RyPiIpOworCisgICAgYnVmZmVyID0gc291cF9idWZm
ZXJfbmV3KFNPVVBfTUVNT1JZX1RBS0UsIHN0cmluZy0+c3RyLCBzdHJpbmctPmxlbik7CisgICAg
Z19zdHJpbmdfZnJlZShzdHJpbmcsIEZBTFNFKTsKKworICAgIHJldHVybiBidWZmZXI7Cit9CisK
K3N0YXRpYyBTb3VwQnVmZmVyKiB3ZWJraXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW1SZWFkTmV4
dEZpbGUoV2ViS2l0U291cERpcmVjdG9yeUlucHV0U3RyZWFtKiBzdHJlYW0sIEdDYW5jZWxsYWJs
ZSogY2FuY2VsbGFibGUsIEdFcnJvcioqIGVycm9yKQoreworICAgIEdGaWxlSW5mbyogaW5mbzsK
KyAgICBTb3VwQnVmZmVyKiBidWZmZXI7CisgICAgR0Vycm9yKiBlcnIgPSAwOworCisgICAgZG8g
eworICAgICAgICBpbmZvID0gZ19maWxlX2VudW1lcmF0b3JfbmV4dF9maWxlKHN0cmVhbS0+ZW51
bWVyYXRvciwgY2FuY2VsbGFibGUsICZlcnIpOworICAgICAgICBpZiAoIWluZm8pIHsKKyAgICAg
ICAgICAgIGlmIChlcnIpIHsKKyAgICAgICAgICAgICAgICBnX3Byb3BhZ2F0ZV9lcnJvcihlcnJv
ciwgZXJyKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmICghc3RyZWFtLT5kb25lKSB7CisgICAgICAgICAgICAgICAgc3RyZWFtLT5kb25l
ID0gVFJVRTsKKyAgICAgICAgICAgICAgICByZXR1cm4gc291cF9idWZmZXJfbmV3KFNPVVBfTUVN
T1JZX1NUQVRJQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYSVRf
U1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEVY
SVRfU1RSSU5HKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYnVmZmVyID0gd2Via2l0
U291cERpcmVjdG9yeUlucHV0U3RyZWFtUGFyc2VJbmZvKHN0cmVhbSwgaW5mbyk7CisgICAgfSB3
aGlsZSAoIWJ1ZmZlcik7CisKKyAgICByZXR1cm4gYnVmZmVyOworfQorCitzdGF0aWMgZ3NzaXpl
IHdlYmtpdFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbVJlYWQoR0lucHV0U3RyZWFtKiBpbnB1dCwg
dm9pZCogYnVmZmVyLCBnc2l6ZSBjb3VudCwgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwgR0Vy
cm9yKiogZXJyb3IpCit7CisgICAgV2ViS2l0U291cERpcmVjdG9yeUlucHV0U3RyZWFtKiBzdHJl
YW0gPSBXRUJLSVRfU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNKGlucHV0KTsKKyAgICBnc3Np
emUgdG90YWwsIHNpemU7CisKKyAgICBmb3IgKHRvdGFsID0gMDsgdG90YWwgPCBjb3VudDsgdG90
YWwgKz0gc2l6ZSkgeworICAgICAgICBpZiAoIXN0cmVhbS0+YnVmZmVyKSB7CisgICAgICAgICAg
ICBzdHJlYW0tPmJ1ZmZlciA9IHdlYmtpdFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbVJlYWROZXh0
RmlsZShzdHJlYW0sIGNhbmNlbGxhYmxlLCBlcnJvcik7CisgICAgICAgICAgICBpZiAoIXN0cmVh
bS0+YnVmZmVyKSB7CisgICAgICAgICAgICAgICAgLyogRklYTUU6IElzIHRoaXMgY29ycmVjdCBv
ciBzaG91bGQgd2UgZm9yd2FyZCB0aGUgZXJyb3I/ICovCisgICAgICAgICAgICAgICAgaWYgKHRv
dGFsKQorICAgICAgICAgICAgICAgICAgICBnX2NsZWFyX2Vycm9yKGVycm9yKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdG90YWw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBzaXplID0gc3RkOjptaW4oc3RyZWFtLT5idWZmZXItPmxlbmd0aCwgY291bnQgLSB0b3RhbCk7
CisgICAgICAgIG1lbWNweSgoY2hhciopIGJ1ZmZlciArIHRvdGFsLCBzdHJlYW0tPmJ1ZmZlci0+
ZGF0YSwgc2l6ZSk7CisgICAgICAgIGlmIChzaXplID09IHN0cmVhbS0+YnVmZmVyLT5sZW5ndGgp
IHsKKyAgICAgICAgICAgIHNvdXBfYnVmZmVyX2ZyZWUoc3RyZWFtLT5idWZmZXIpOworICAgICAg
ICAgICAgc3RyZWFtLT5idWZmZXIgPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
U291cEJ1ZmZlciogc3ViID0gc291cF9idWZmZXJfbmV3X3N1YmJ1ZmZlcihzdHJlYW0tPmJ1ZmZl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RyZWFtLT5idWZmZXItPmxlbmd0aCAtIHNpemUpOworICAgICAgICAgICAgc291
cF9idWZmZXJfZnJlZShzdHJlYW0tPmJ1ZmZlcik7CisgICAgICAgICAgICBzdHJlYW0tPmJ1ZmZl
ciA9IHN1YjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0b3RhbDsKK30KKworc3Rh
dGljIGdib29sZWFuIHdlYmtpdFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbUNsb3NlKEdJbnB1dFN0
cmVhbSogaW5wdXQsIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUsIEdFcnJvcioqIGVycm9yKQor
eworICAgIFdlYktpdFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbSogc3RyZWFtID0gV0VCS0lUX1NP
VVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTShpbnB1dCk7CisgICAgZ2Jvb2xlYW4gcmVzdWx0Owor
CisgICAgaWYgKHN0cmVhbS0+YnVmZmVyKSB7CisgICAgICAgIHNvdXBfYnVmZmVyX2ZyZWUoc3Ry
ZWFtLT5idWZmZXIpOworICAgICAgICBzdHJlYW0tPmJ1ZmZlciA9IDA7CisgICAgfQorCisgICAg
cmVzdWx0ID0gZ19maWxlX2VudW1lcmF0b3JfY2xvc2Uoc3RyZWFtLT5lbnVtZXJhdG9yLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbGxhYmxlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKTsKKyAgICBnX29iamVjdF91bnJlZihz
dHJlYW0tPmVudW1lcmF0b3IpOworICAgIHN0cmVhbS0+ZW51bWVyYXRvciA9IDA7CisKKyAgICBn
X2ZyZWUoc3RyZWFtLT51cmkpOworICAgIHN0cmVhbS0+dXJpID0gMDsKKworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJl
YW1fY2xhc3NfaW5pdChXZWJLaXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW1DbGFzcyogc3RyZWFt
Q2xhc3MpCit7CisgICAgR0lucHV0U3RyZWFtQ2xhc3MqIGlucHV0U3RyZWFtQ2xhc3MgPSBHX0lO
UFVUX1NUUkVBTV9DTEFTUyhzdHJlYW1DbGFzcyk7CisKKyAgICBpbnB1dFN0cmVhbUNsYXNzLT5y
ZWFkX2ZuID0gd2Via2l0U291cERpcmVjdG9yeUlucHV0U3RyZWFtUmVhZDsKKyAgICBpbnB1dFN0
cmVhbUNsYXNzLT5jbG9zZV9mbiA9IHdlYmtpdFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbUNsb3Nl
OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX2lu
aXQoV2ViS2l0U291cERpcmVjdG9yeUlucHV0U3RyZWFtKiBzdHJlYW0pCit7CisgICAgc3RyZWFt
LT5idWZmZXIgPSBzb3VwX2J1ZmZlcl9uZXcoU09VUF9NRU1PUllfU1RBVElDLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOSVRfU1RSSU5HLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihJTklUX1NUUklORykpOworfQorCitHSW5wdXRT
dHJlYW0qIHdlYmtpdFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbU5ldyhHRmlsZUVudW1lcmF0b3Iq
IGVudW1lcmF0b3IsIFNvdXBVUkkqIHVyaSkKK3sKKyAgICBHSW5wdXRTdHJlYW0qIHN0cmVhbTsK
KworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEdfSVNfRklMRV9FTlVNRVJBVE9SKGVudW1lcmF0
b3IpLCAwKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCh1cmksIDApOworCisgICAgc3RyZWFt
ID0gc3RhdGljX2Nhc3Q8R0lucHV0U3RyZWFtKj4oZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1NP
VVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTSwgMCkpOworCisgICAgV0VCS0lUX1NPVVBfRElSRUNU
T1JZX0lOUFVUX1NUUkVBTShzdHJlYW0pLT5lbnVtZXJhdG9yID0gc3RhdGljX2Nhc3Q8R0ZpbGVF
bnVtZXJhdG9yKj4oZ19vYmplY3RfcmVmKGVudW1lcmF0b3IpKTsKKyAgICBXRUJLSVRfU09VUF9E
SVJFQ1RPUllfSU5QVVRfU1RSRUFNKHN0cmVhbSktPnVyaSA9IHNvdXBfdXJpX3RvX3N0cmluZyh1
cmksIEZBTFNFKTsKKworICAgIHJldHVybiBzdHJlYW07Cit9CisKK30KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL3dlYmtpdHNvdXBkaXJlY3RvcnlpbnB1dHN0cmVh
bS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvd2Via2l0c291cGRpcmVjdG9yeWlu
cHV0c3RyZWFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDIzM2QzYQot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL3dlYmtpdHNv
dXBkaXJlY3RvcnlpbnB1dHN0cmVhbS5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYS4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIx
MTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgd2Via2l0c291cGRpcmVjdG9yeWlucHV0c3Ry
ZWFtX2gKKyNkZWZpbmUgd2Via2l0c291cGRpcmVjdG9yeWlucHV0c3RyZWFtX2ggMQorCisjaW5j
bHVkZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC1tZXNzYWdlLWJvZHkuaD4K
KyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAtdHlwZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfU09VUF9ESVJFQ1RPUllfSU5Q
VVRfU1RSRUFNICAgICAgICAgICAgKHdlYmtpdF9zb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1f
Z2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTShv
YmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRf
VFlQRV9TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0sIFdlYktpdFNvdXBEaXJlY3RvcnlJbnB1
dFN0cmVhbSkpCisjZGVmaW5lIFdFQktJVF9TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU1fQ0xB
U1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCBXRUJLSVRfVFlQ
RV9TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0sIFdlYktpdFNvdXBEaXJlY3RvcnlJbnB1dFN0
cmVhbUNsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfSVNfRElSRUNUT1JZX0lOUFVUX1NUUkVB
TShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRf
VFlQRV9TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0pKQorI2RlZmluZSBXRUJLSVRfU09VUF9J
U19ESVJFQ1RPUllfSU5QVVRfU1RSRUFNX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNT
X1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTSkpCisj
ZGVmaW5lIFdFQktJVF9TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU1fR0VUX0NMQVNTKG9iaikg
IChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX0RJUkVD
VE9SWV9JTlBVVF9TVFJFQU0sIFdlYktpdFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbUNsYXNzKSkK
KwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbSBXZWJLaXRT
b3VwRGlyZWN0b3J5SW5wdXRTdHJlYW07Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0U291cERpcmVj
dG9yeUlucHV0U3RyZWFtQ2xhc3MgV2ViS2l0U291cERpcmVjdG9yeUlucHV0U3RyZWFtQ2xhc3M7
CisKK3N0cnVjdCBfV2ViS2l0U291cERpcmVjdG9yeUlucHV0U3RyZWFtIHsKKyAgICBHSW5wdXRT
dHJlYW0gcGFyZW50OworCisgICAgR0ZpbGVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yOworICAgIGNo
YXIqIHVyaTsKKyAgICBTb3VwQnVmZmVyKiBidWZmZXI7CisgICAgZ2Jvb2xlYW4gZG9uZTsKK307
CisKK3N0cnVjdCBfV2ViS2l0U291cERpcmVjdG9yeUlucHV0U3RyZWFtQ2xhc3MgeworICAgIEdJ
bnB1dFN0cmVhbUNsYXNzIHBhcmVudF9jbGFzczsKK307CisKK0dUeXBlIHdlYmtpdF9zb3VwX2Rp
cmVjdG9yeV9pbnB1dF9zdHJlYW1fZ2V0X3R5cGUodm9pZCk7CisKK0dJbnB1dFN0cmVhbSogd2Vi
a2l0U291cERpcmVjdG9yeUlucHV0U3RyZWFtTmV3KEdGaWxlRW51bWVyYXRvciogZW51bWVyYXRv
ciwgU291cFVSSSogdXJpKTsKKworCitHX0VORF9ERUNMUworCit9CisKKyNlbmRpZiAvKiB3ZWJr
aXRzb3VwZGlyZWN0b3J5aW5wdXRzdHJlYW1faCAqLwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvd2Via2l0c291cGh0dHBpbnB1dHN0cmVhbS5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJraXRzb3VwaHR0cGlucHV0c3RyZWFtLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzI2NTI4Ci0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvd2Via2l0c291cGh0dHBpbnB1dHN0cmVh
bS5jcHAKQEAgLTAsMCArMSw4MDcgQEAKKy8qIHdlYmtpdHNvdXBodHRwaW5wdXRzdHJlYW0uY3Bw
LCBiYXNlZCBvbiBnc29ja2V0aW5wdXRzdHJlYW0uYworICoKKyAqIENvcHlyaWdodCAoQykgMjAw
Ni0yMDA3IFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjEx
MS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIndlYmtp
dHNvdXBodHRwaW5wdXRzdHJlYW0uaCIKKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRl
IDxnaW8vZ2lvLmg+CisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC5o
PgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGlj
IHZvaWQgd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2Vla2FibGVfaWZhY2VfaW5pdChH
U2Vla2FibGVJZmFjZSogc2Vla2FibGVJZmFjZSk7CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RF
KFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0sIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFt
LCBHX1RZUEVfSU5QVVRfU1RSRUFNLAorICAgICAgICAgICAgICAgICAgICAgICAgR19JTVBMRU1F
TlRfSU5URVJGQUNFKEdfVFlQRV9TRUVLQUJMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZWVrYWJs
ZV9pZmFjZV9pbml0KSkKKwordHlwZWRlZiB2b2lkICgqV2ViS2l0U291cEhUVFBJbnB1dFN0cmVh
bUNhbGxiYWNrKShHSW5wdXRTdHJlYW0qKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFNvdXBT
ZXNzaW9uKiBzZXNzaW9uOworICAgIEdNYWluQ29udGV4dCogYXN5bmNDb250ZXh0OworICAgIFNv
dXBNZXNzYWdlKiBtc2c7CisgICAgZ2Jvb2xlYW4gZ290SGVhZGVycywgZmluaXNoZWQ7CisgICAg
Z29mZnNldCBvZmZzZXQ7CisKKyAgICBHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlOworICAgIEdT
b3VyY2UqIGNhbmNlbFdhdGNoOworICAgIFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1DYWxsYmFj
ayBnb3RIZWFkZXJzQ2I7CisgICAgV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbUNhbGxiYWNrIGdv
dENodW5rQ2I7CisgICAgV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbUNhbGxiYWNrIGZpbmlzaGVk
Q2I7CisgICAgV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbUNhbGxiYWNrIGNhbmNlbGxlZENiOwor
CisgICAgZ3VjaGFyKiBsZWZ0b3ZlckJ1ZmZlcjsKKyAgICBnc2l6ZSBsZWZ0b3ZlckJ1ZnNpemUs
IGxlZnRvdmVyT2Zmc2V0OworCisgICAgZ3VjaGFyKiBjYWxsZXJCdWZmZXI7CisgICAgZ3NpemUg
Y2FsbGVyQnVmc2l6ZSwgY2FsbGVyTnJlYWQ7CisgICAgR0FzeW5jUmVhZHlDYWxsYmFjayBvdXRz
dGFuZGluZ0NhbGxiYWNrOworICAgIEdTaW1wbGVBc3luY1Jlc3VsdCogcmVzdWx0OworCit9IFdl
YktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlOworI2RlZmluZSBXRUJLSVRfU09VUF9IVFRQ
X0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURShvKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRF
KChvKSwgV0VCS0lUX1RZUEVfU09VUF9IVFRQX0lOUFVUX1NUUkVBTSwgV2ViS2l0U291cEhUVFBJ
bnB1dFN0cmVhbVByaXZhdGUpKQorCisKK3N0YXRpYyBnc3NpemUgd2Via2l0U291cEh0dHBJbnB1
dFN0cmVhbVJlYWQoR0lucHV0U3RyZWFtKiBzdHJlYW0sIHZvaWQqIGJ1ZmZlciwgZ3NpemUgY291
bnQsIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUsIEdFcnJvcioqIGVycm9yKTsKK3N0YXRpYyBn
Ym9vbGVhbiB3ZWJraXRTb3VwSHR0cElucHV0U3RyZWFtQ2xvc2UoR0lucHV0U3RyZWFtKiBzdHJl
YW0sIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUsIEdFcnJvcioqIGVycm9yKTsKK3N0YXRpYyB2
b2lkIHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1SZWFkQXN5bmMoR0lucHV0U3RyZWFtKiBzdHJl
YW0sIHZvaWQqIGJ1ZmZlciwgZ3NpemUgY291bnQsIGludCBpb1ByaW9yaXR5LCBHQ2FuY2VsbGFi
bGUqIGNhbmNlbGxhYmxlLCBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLCBncG9pbnRlciBk
YXRhKTsKK3N0YXRpYyBnc3NpemUgd2Via2l0U291cEh0dHBJbnB1dFN0cmVhbVJlYWRGaW5pc2go
R0lucHV0U3RyZWFtKiBzdHJlYW0sIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBHRXJyb3IqKiBlcnJv
cik7CitzdGF0aWMgdm9pZCB3ZWJraXRTb3VwSHR0cElucHV0U3RyZWFtQ2xvc2VBc3luYyhHSW5w
dXRTdHJlYW0qIHN0cmVhbSwgaW50IGlvUHJpb3JpdHksIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFi
bGUsIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssIGdwb2ludGVyIGRhdGEpOworc3RhdGlj
IGdib29sZWFuIHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1DbG9zZUZpbmlzaChHSW5wdXRTdHJl
YW0qIHN0cmVhbSwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIEdFcnJvcioqIGVycm9yKTsKKworc3Rh
dGljIGdvZmZzZXQgd2Via2l0U291cEh0dHBJbnB1dFN0cmVhbVRlbGwoR1NlZWthYmxlKiBzZWVr
YWJsZSk7CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRTb3VwSHR0cElucHV0U3RyZWFtQ2FuU2Vl
ayhHU2Vla2FibGUqIHNlZWthYmxlKTsKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRTb3VwSHR0cElu
cHV0U3RyZWFtU2VlayhHU2Vla2FibGUqIHNlZWthYmxlLCBnb2Zmc2V0IG9mZnNldCwgR1NlZWtU
eXBlIHR5cGUsIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUsIEdFcnJvcioqIGVycm9yKTsKKwor
c3RhdGljIGdib29sZWFuIHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1DYW5UcnVuY2F0ZShHU2Vl
a2FibGUqIHNlZWthYmxlKTsKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRTb3VwSHR0cElucHV0U3Ry
ZWFtVHJ1bmNhdGUoR1NlZWthYmxlKiBzZWVrYWJsZSwgZ29mZnNldCBvZmZzZXQsIEdDYW5jZWxs
YWJsZSogY2FuY2VsbGFibGUsIEdFcnJvcioqIGVycm9yKTsKKworc3RhdGljIHZvaWQgd2Via2l0
U291cEh0dHBJbnB1dFN0cmVhbUdvdEhlYWRlcnMoU291cE1lc3NhZ2UqIG1zZywgZ3BvaW50ZXIg
c3RyZWFtKTsKK3N0YXRpYyB2b2lkIHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1Hb3RDaHVuayhT
b3VwTWVzc2FnZSogbXNnLCBTb3VwQnVmZmVyKiBjaHVuaywgZ3BvaW50ZXIgc3RyZWFtKTsKK3N0
YXRpYyB2b2lkIHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1GaW5pc2hlZChTb3VwTWVzc2FnZSog
bXNnLCBncG9pbnRlciBzdHJlYW0pOworCitzdGF0aWMgdm9pZCB3ZWJraXRfc291cF9odHRwX2lu
cHV0X3N0cmVhbV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0U291cEhU
VFBJbnB1dFN0cmVhbSogc3RyZWFtID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU0ob2Jq
ZWN0KTsKKyAgICBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSogcHJpdiA9IFdFQktJ
VF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFKHN0cmVhbSk7CisKKyAgICBnX29i
amVjdF91bnJlZihwcml2LT5zZXNzaW9uKTsKKworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nv
bm5lY3RfYnlfZnVuYyhwcml2LT5tc2csIChHQ2FsbGJhY2sqKXdlYmtpdFNvdXBIdHRwSW5wdXRT
dHJlYW1Hb3RIZWFkZXJzLCBzdHJlYW0pOworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5l
Y3RfYnlfZnVuYyhwcml2LT5tc2csIChHQ2FsbGJhY2sqKXdlYmtpdFNvdXBIdHRwSW5wdXRTdHJl
YW1Hb3RDaHVuaywgc3RyZWFtKTsKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5
X2Z1bmMocHJpdi0+bXNnLCAoR0NhbGxiYWNrKil3ZWJraXRTb3VwSHR0cElucHV0U3RyZWFtRmlu
aXNoZWQsIHN0cmVhbSk7CisgICAgZ19vYmplY3RfdW5yZWYocHJpdi0+bXNnKTsKKyAgICBnX2Zy
ZWUocHJpdi0+bGVmdG92ZXJCdWZmZXIpOworCisgICAgaWYgKEdfT0JKRUNUX0NMQVNTKHdlYmtp
dF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKQorICAgICAg
ICAoKkdfT0JKRUNUX0NMQVNTKHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3BhcmVudF9j
bGFzcyktPmZpbmFsaXplKShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfc291cF9o
dHRwX2lucHV0X3N0cmVhbV9jbGFzc19pbml0KFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1DbGFz
cyoga2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9D
TEFTUyhrbGFzcyk7CisgICAgR0lucHV0U3RyZWFtQ2xhc3MqIHN0cmVhbUNsYXNzID0gR19JTlBV
VF9TVFJFQU1fQ0xBU1Moa2xhc3MpOworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGts
YXNzLCBzaXplb2YoV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUpKTsKKworICAgIGdv
YmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9maW5h
bGl6ZTsKKworICAgIHN0cmVhbUNsYXNzLT5yZWFkX2ZuID0gd2Via2l0U291cEh0dHBJbnB1dFN0
cmVhbVJlYWQ7CisgICAgc3RyZWFtQ2xhc3MtPmNsb3NlX2ZuID0gd2Via2l0U291cEh0dHBJbnB1
dFN0cmVhbUNsb3NlOworICAgIHN0cmVhbUNsYXNzLT5yZWFkX2FzeW5jID0gd2Via2l0U291cEh0
dHBJbnB1dFN0cmVhbVJlYWRBc3luYzsKKyAgICBzdHJlYW1DbGFzcy0+cmVhZF9maW5pc2ggPSB3
ZWJraXRTb3VwSHR0cElucHV0U3RyZWFtUmVhZEZpbmlzaDsKKyAgICBzdHJlYW1DbGFzcy0+Y2xv
c2VfYXN5bmMgPSB3ZWJraXRTb3VwSHR0cElucHV0U3RyZWFtQ2xvc2VBc3luYzsKKyAgICBzdHJl
YW1DbGFzcy0+Y2xvc2VfZmluaXNoID0gd2Via2l0U291cEh0dHBJbnB1dFN0cmVhbUNsb3NlRmlu
aXNoOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZWVr
YWJsZV9pZmFjZV9pbml0KEdTZWVrYWJsZUlmYWNlKiBzZWVrYWJsZUlmYWNlKQoreworICAgIHNl
ZWthYmxlSWZhY2UtPnRlbGwgPSB3ZWJraXRTb3VwSHR0cElucHV0U3RyZWFtVGVsbDsKKyAgICBz
ZWVrYWJsZUlmYWNlLT5jYW5fc2VlayA9IHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1DYW5TZWVr
OworICAgIHNlZWthYmxlSWZhY2UtPnNlZWsgPSB3ZWJraXRTb3VwSHR0cElucHV0U3RyZWFtU2Vl
azsKKyAgICBzZWVrYWJsZUlmYWNlLT5jYW5fdHJ1bmNhdGUgPSB3ZWJraXRTb3VwSHR0cElucHV0
U3RyZWFtQ2FuVHJ1bmNhdGU7CisgICAgc2Vla2FibGVJZmFjZS0+dHJ1bmNhdGVfZm4gPSB3ZWJr
aXRTb3VwSHR0cElucHV0U3RyZWFtVHJ1bmNhdGU7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9z
b3VwX2h0dHBfaW5wdXRfc3RyZWFtX2luaXQoV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSogc3Ry
ZWFtKQoreworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRTb3VwSHR0cElucHV0U3RyZWFtUXVldWVN
ZXNzYWdlKFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0qIHN0cmVhbSkKK3sKKyAgICBXZWJLaXRT
b3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRf
U1RSRUFNX0dFVF9QUklWQVRFKHN0cmVhbSk7CisKKyAgICBwcml2LT5nb3RIZWFkZXJzID0gcHJp
di0+ZmluaXNoZWQgPSBGQUxTRTsKKworICAgIC8qIEFkZCBhbiBleHRyYSByZWYgc2luY2Ugc291
cF9zZXNzaW9uX3F1ZXVlX21lc3NhZ2Ugc3RlYWxzIG9uZSAqLworICAgIGdfb2JqZWN0X3JlZihw
cml2LT5tc2cpOworICAgIHNvdXBfc2Vzc2lvbl9xdWV1ZV9tZXNzYWdlKHByaXYtPnNlc3Npb24s
IHByaXYtPm1zZywgMCwgMCk7Cit9CisKKy8qKgorICogd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fbmV3OgorICogQHNlc3Npb246IHRoZSAjU291cFNlc3Npb24gdG8gdXNlCisgKiBAbXNn
OiB0aGUgI1NvdXBNZXNzYWdlIHdob3NlIHJlc3BvbnNlIHdpbGwgYmUgc3RyZWFtZWQKKyAqCisg
KiBQcmVwYXJlcyB0byBzZW5kIEBtc2cgb3ZlciBAc2Vzc2lvbiwgYW5kIHJldHVybnMgYSAjR0lu
cHV0U3RyZWFtCisgKiB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlYWQgdGhlIHJlc3BvbnNlLgorICoK
KyAqIEBtc2cgbWF5IG5vdCBiZSBzZW50IHVudGlsIHRoZSBmaXJzdCByZWFkIGNhbGw7IGlmIHlv
dSBuZWVkIHRvIGxvb2sKKyAqIGF0IHRoZSBzdGF0dXMgY29kZSBvciByZXNwb25zZSBoZWFkZXJz
IGJlZm9yZSByZWFkaW5nIHRoZSBib2R5LCB5b3UKKyAqIGNhbiB1c2Ugd2Via2l0X3NvdXBfaHR0
cF9pbnB1dF9zdHJlYW1fc2VuZCgpIG9yIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3Nl
bmRfYXN5bmMoKQorICogdG8gZm9yY2UgdGhlIG1lc3NhZ2UgdG8gYmUgc2VudCBhbmQgdGhlIHJl
c3BvbnNlIGhlYWRlcnMgcmVhZC4KKyAqCisgKiBJZiBAbXNnIGdldHMgYSBub24tMnh4IHJlc3Vs
dCwgdGhlIGZpcnN0IHJlYWQgKG9yIHNlbmQpIHdpbGwgcmV0dXJuCisgKiBhbiBlcnJvciB3aXRo
IHR5cGUgJVdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0hUVFBfRVJST1IuCisgKgorICog
SW50ZXJuYWxseSwgI1dlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gaXMgaW1wbGVtZW50ZWQgdXNp
bmcgYXN5bmNocm9ub3VzIEkvTywKKyAqIHNvIGlmIHlvdSBhcmUgdXNpbmcgdGhlIHN5bmNocm9u
b3VzIEFQSSAoZWcsCisgKiBnX2lucHV0X3N0cmVhbV9yZWFkKCkpLCB5b3Ugc2hvdWxkIGNyZWF0
ZSBhIG5ldyAjR01haW5Db250ZXh0IGFuZAorICogc2V0IGl0IGFzIHRoZSAlU09VUF9TRVNTSU9O
X0FTWU5DX0NPTlRFWFQgcHJvcGVydHkgb24gQHNlc3Npb24uIChJZgorICogeW91IGRvbid0LCB0
aGVuIHN5bmNocm9ub3VzICNHSW5wdXRTdHJlYW0gY2FsbHMgd2lsbCBjYXVzZSB0aGUgbWFpbgor
ICogbG9vcCB0byBiZSBydW4gcmVjdXJzaXZlbHkuKSBUaGUgYXN5bmMgI0dJbnB1dFN0cmVhbSBB
UEkgd29ya3MgZmluZQorICogd2l0aCAlU09VUF9TRVNTSU9OX0FTWU5DX0NPTlRFWFQgZWl0aGVy
IHNldCBvciB1bnNldC4KKyAqCisgKiBSZXR1cm5zOiBhIG5ldyAjR0lucHV0U3RyZWFtLgorICoq
LworV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSogd2Via2l0U291cEh0dHBJbnB1dFN0cmVhbU5l
dyhTb3VwU2Vzc2lvbiogc2Vzc2lvbiwgU291cE1lc3NhZ2UqIG1zZykKK3sKKyAgICBXZWJLaXRT
b3VwSFRUUElucHV0U3RyZWFtKiBzdHJlYW07CisgICAgV2ViS2l0U291cEhUVFBJbnB1dFN0cmVh
bVByaXZhdGUqIHByaXY7CisKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChTT1VQX0lTX01FU1NB
R0UobXNnKSwgMCk7CisKKyAgICBzdHJlYW0gPSAoV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSop
Z19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU0sIDApOworICAg
IHByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURShzdHJlYW0p
OworCisgICAgcHJpdi0+c2Vzc2lvbiA9IChTb3VwU2Vzc2lvbiopZ19vYmplY3RfcmVmKHNlc3Np
b24pOworICAgIHByaXYtPmFzeW5jQ29udGV4dCA9IHNvdXBfc2Vzc2lvbl9nZXRfYXN5bmNfY29u
dGV4dChzZXNzaW9uKTsKKyAgICBwcml2LT5tc2cgPSAoU291cE1lc3NhZ2UqKWdfb2JqZWN0X3Jl
Zihtc2cpOworCisgICAgZ19zaWduYWxfY29ubmVjdChtc2csICJnb3RfaGVhZGVycyIsCisgICAg
ICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1Hb3RI
ZWFkZXJzKSwgc3RyZWFtKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1zZywgImdvdF9jaHVuayIs
CisgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJl
YW1Hb3RDaHVuayksIHN0cmVhbSk7CisgICAgZ19zaWduYWxfY29ubmVjdChtc2csICJmaW5pc2hl
ZCIsCisgICAgICAgICAgICAgICAgICAgICBHX0NBTExCQUNLKHdlYmtpdFNvdXBIdHRwSW5wdXRT
dHJlYW1GaW5pc2hlZCksIHN0cmVhbSk7CisKKyAgICB3ZWJraXRTb3VwSHR0cElucHV0U3RyZWFt
UXVldWVNZXNzYWdlKHN0cmVhbSk7CisgICAgcmV0dXJuIHN0cmVhbTsKK30KKworc3RhdGljIHZv
aWQgd2Via2l0U291cEh0dHBJbnB1dFN0cmVhbUdvdEhlYWRlcnMoU291cE1lc3NhZ2UqIG1zZywg
Z3BvaW50ZXIgc3RyZWFtKQoreworICAgIFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRl
KiBwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUoc3RyZWFt
KTsKKworICAgIC8qIElmIHRoZSBzdGF0dXMgaXMgdW5zdWNjZXNzZnVsLCB3ZSBqdXN0IGlnbm9y
ZSB0aGUgc2lnbmFsIGFuZCBsZXQKKyAgICAgKiBsaWJzb3VwIGtlZXAgZ29pbmcgKGV2ZW50dWFs
bHkgZWl0aGVyIGl0IHdpbGwgcmVxdWV1ZSB0aGUgcmVxdWVzdAorICAgICAqIChhZnRlciBoYW5k
bGluZyBhdXRoZW50aWNhdGlvbi9yZWRpcmVjdGlvbiksIG9yIGVsc2UgdGhlCisgICAgICogImZp
bmlzaGVkIiBoYW5kbGVyIHdpbGwgcnVuKS4KKyAgICAgKi8KKyAgICBpZiAoIVNPVVBfU1RBVFVT
X0lTX1NVQ0NFU1NGVUwobXNnLT5zdGF0dXNfY29kZSkpCisgICAgICAgIHJldHVybjsKKworICAg
IHByaXYtPmdvdEhlYWRlcnMgPSBUUlVFOworICAgIGlmICghcHJpdi0+Y2FsbGVyQnVmZmVyKSB7
CisgICAgICAgIC8qIE5vdCByZWFkeSB0byByZWFkIHRoZSBib2R5IHlldCAqLworICAgICAgICBz
b3VwX3Nlc3Npb25fcGF1c2VfbWVzc2FnZShwcml2LT5zZXNzaW9uLCBtc2cpOworICAgIH0KKwor
ICAgIGlmIChwcml2LT5nb3RIZWFkZXJzQ2IpCisgICAgICAgIHByaXYtPmdvdEhlYWRlcnNDYigo
R0lucHV0U3RyZWFtKilzdHJlYW0pOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRTb3VwSHR0cElu
cHV0U3RyZWFtR290Q2h1bmsoU291cE1lc3NhZ2UqIG1zZywgU291cEJ1ZmZlciogY2h1bmtCdWZm
ZXIsIGdwb2ludGVyIHN0cmVhbSkKK3sKKyAgICBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJp
dmF0ZSogcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFKHN0
cmVhbSk7CisgICAgY29uc3QgZ2NoYXIqIGNodW5rID0gY2h1bmtCdWZmZXItPmRhdGE7CisgICAg
Z3NpemUgY2h1bmtTaXplID0gY2h1bmtCdWZmZXItPmxlbmd0aDsKKworICAgIC8qIFdlIG9ubHkg
cGF5IGF0dGVudGlvbiB0byB0aGUgY2h1bmsgaWYgaXQncyBwYXJ0IG9mIGEgc3VjY2Vzc2Z1bAor
ICAgICAqIHJlc3BvbnNlLgorICAgICAqLworICAgIGlmICghU09VUF9TVEFUVVNfSVNfU1VDQ0VT
U0ZVTChtc2ctPnN0YXR1c19jb2RlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLyogU2FuaXR5
IGNoZWNrICovCisgICAgaWYgKCFwcml2LT5jYWxsZXJCdWZzaXplIHx8IHByaXYtPmxlZnRvdmVy
QnVmc2l6ZSkKKyAgICAgICAgZ193YXJuaW5nKCJ3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVh
bV9nb3RfY2h1bmsgY2FsbGVkIGFnYWluIGJlZm9yZSBwcmV2aW91cyBjaHVuayB3YXMgcHJvY2Vz
c2VkIik7CisKKyAgICAvKiBDb3B5IHdoYXQgd2UgY2FuIGludG8gcHJpdi0+Y2FsbGVyQnVmZmVy
ICovCisgICAgaWYgKHByaXYtPmNhbGxlckJ1ZnNpemUgLSBwcml2LT5jYWxsZXJOcmVhZCA+IDAp
IHsKKyAgICAgICAgZ3NpemUgbnJlYWQgPSBzdGQ6Om1pbihjaHVua1NpemUsIHByaXYtPmNhbGxl
ckJ1ZnNpemUgLSBwcml2LT5jYWxsZXJOcmVhZCk7CisKKyAgICAgICAgbWVtY3B5KHByaXYtPmNh
bGxlckJ1ZmZlciArIHByaXYtPmNhbGxlck5yZWFkLCBjaHVuaywgbnJlYWQpOworICAgICAgICBw
cml2LT5jYWxsZXJOcmVhZCArPSBucmVhZDsKKyAgICAgICAgcHJpdi0+b2Zmc2V0ICs9IG5yZWFk
OworICAgICAgICBjaHVuayArPSBucmVhZDsKKyAgICAgICAgY2h1bmtTaXplIC09IG5yZWFkOwor
ICAgIH0KKworICAgIGlmIChjaHVua1NpemUgPiAwKSB7CisgICAgICAgIC8qIENvcHkgdGhlIHJl
c3QgaW50byBwcml2LT5sZWZ0b3ZlckJ1ZmZlci4gSWYKKyAgICAgICAgICogdGhlcmUncyBhbHJl
YWR5IHNvbWUgZGF0YSB0aGVyZSwgcmVhbGxvYyBhbmQKKyAgICAgICAgICogYXBwZW5kLiBPdGhl
cndpc2UganVzdCBjb3B5LgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKHByaXYtPmxlZnRvdmVy
QnVmc2l6ZSkgeworICAgICAgICAgICAgcHJpdi0+bGVmdG92ZXJCdWZmZXIgPSAoZ3VjaGFyKikg
Z19yZWFsbG9jKHByaXYtPmxlZnRvdmVyQnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5sZWZ0b3ZlckJ1ZnNpemUgKyBj
aHVua1NpemUpOworICAgICAgICAgICAgbWVtY3B5KHByaXYtPmxlZnRvdmVyQnVmZmVyICsgcHJp
di0+bGVmdG92ZXJCdWZzaXplLAorICAgICAgICAgICAgICAgICAgIGNodW5rLCBjaHVua1NpemUp
OworICAgICAgICAgICAgcHJpdi0+bGVmdG92ZXJCdWZzaXplICs9IGNodW5rU2l6ZTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByaXYtPmxlZnRvdmVyQnVmc2l6ZSA9IGNodW5rU2l6
ZTsKKyAgICAgICAgICAgIHByaXYtPmxlZnRvdmVyQnVmZmVyID0gKGd1Y2hhciopIGdfbWVtZHVw
KGNodW5rLCBjaHVua1NpemUpOworICAgICAgICAgICAgcHJpdi0+bGVmdG92ZXJPZmZzZXQgPSAw
OworICAgICAgICB9CisgICAgfQorCisgICAgc291cF9zZXNzaW9uX3BhdXNlX21lc3NhZ2UocHJp
di0+c2Vzc2lvbiwgbXNnKTsKKyAgICBpZiAocHJpdi0+Z290Q2h1bmtDYikKKyAgICAgICAgcHJp
di0+Z290Q2h1bmtDYigoR0lucHV0U3RyZWFtKilzdHJlYW0pOworfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRTb3VwSHR0cElucHV0U3RyZWFtRmluaXNoZWQoU291cE1lc3NhZ2UqIG1zZywgZ3BvaW50
ZXIgc3RyZWFtKQoreworICAgIFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlKiBwcml2
ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUoc3RyZWFtKTsKKwor
ICAgIHByaXYtPmZpbmlzaGVkID0gVFJVRTsKKworICAgIGlmIChwcml2LT5maW5pc2hlZENiKQor
ICAgICAgICBwcml2LT5maW5pc2hlZENiKChHSW5wdXRTdHJlYW0qKXN0cmVhbSk7Cit9CisKK3N0
YXRpYyBnYm9vbGVhbiB3ZWJraXRTb3VwSHR0cElucHV0U3RyZWFtQ2FuY2VsbGVkKEdJT0NoYW5u
ZWwqIGNoYW4sIEdJT0NvbmRpdGlvbiBjb25kaXRpb24sIGdwb2ludGVyIHN0cmVhbSkKK3sKKyAg
ICBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9TT1VQX0hU
VFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFKHN0cmVhbSk7CisKKyAgICBwcml2LT5jYW5jZWxX
YXRjaCA9IDA7CisKKyAgICBzb3VwX3Nlc3Npb25fcGF1c2VfbWVzc2FnZShwcml2LT5zZXNzaW9u
LCBwcml2LT5tc2cpOworICAgIGlmIChwcml2LT5jYW5jZWxsZWRDYikKKyAgICAgICAgcHJpdi0+
Y2FuY2VsbGVkQ2IoKEdJbnB1dFN0cmVhbSopc3RyZWFtKTsKKworICAgIHJldHVybiBGQUxTRTsK
K30KKworc3RhdGljIHZvaWQgd2Via2l0U291cEh0dHBJbnB1dFN0cmVhbVByZXBhcmVGb3JJbyhH
SW5wdXRTdHJlYW0qIHN0cmVhbSwgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwgZ3VjaGFyKiBi
dWZmZXIsIGdzaXplIGNvdW50KQoreworICAgIFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2
YXRlKiBwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUoc3Ry
ZWFtKTsKKyAgICBpbnQgY2FuY2VsRmQ7CisKKyAgICBwcml2LT5jYW5jZWxsYWJsZSA9IGNhbmNl
bGxhYmxlOworICAgIGNhbmNlbEZkID0gZ19jYW5jZWxsYWJsZV9nZXRfZmQoY2FuY2VsbGFibGUp
OworICAgIGlmIChjYW5jZWxGZCAhPSAtMSkgeworICAgICAgICBHSU9DaGFubmVsKiBjaGFuID0g
Z19pb19jaGFubmVsX3VuaXhfbmV3KGNhbmNlbEZkKTsKKyAgICAgICAgcHJpdi0+Y2FuY2VsV2F0
Y2ggPSBzb3VwX2FkZF9pb193YXRjaChwcml2LT5hc3luY0NvbnRleHQsIGNoYW4sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChHSU9Db25kaXRpb24pIChH
X0lPX0lOIHwgR19JT19FUlIgfCBHX0lPX0hVUCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1DYW5jZWxsZWQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSk7
CisgICAgICAgIGdfaW9fY2hhbm5lbF91bnJlZihjaGFuKTsKKyAgICB9CisKKyAgICBwcml2LT5j
YWxsZXJCdWZmZXIgPSBidWZmZXI7CisgICAgcHJpdi0+Y2FsbGVyQnVmc2l6ZSA9IGNvdW50Owor
ICAgIHByaXYtPmNhbGxlck5yZWFkID0gMDsKKworICAgIGlmIChwcml2LT5nb3RIZWFkZXJzKQor
ICAgICAgICBzb3VwX3Nlc3Npb25fdW5wYXVzZV9tZXNzYWdlKHByaXYtPnNlc3Npb24sIHByaXYt
Pm1zZyk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1Eb25lSW8o
R0lucHV0U3RyZWFtKiBzdHJlYW0pCit7CisgICAgV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVBy
aXZhdGUqIHByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURShz
dHJlYW0pOworCisgICAgaWYgKHByaXYtPmNhbmNlbFdhdGNoKSB7CisgICAgICAgIGdfc291cmNl
X2Rlc3Ryb3kocHJpdi0+Y2FuY2VsV2F0Y2gpOworICAgICAgICBwcml2LT5jYW5jZWxXYXRjaCA9
IDA7CisgICAgICAgIGdfY2FuY2VsbGFibGVfcmVsZWFzZV9mZChwcml2LT5jYW5jZWxsYWJsZSk7
CisgICAgfQorICAgIHByaXYtPmNhbmNlbGxhYmxlID0gMDsKKworICAgIHByaXYtPmNhbGxlckJ1
ZmZlciA9IDA7CisgICAgcHJpdi0+Y2FsbGVyQnVmc2l6ZSA9IDA7Cit9CisKK3N0YXRpYyBnYm9v
bGVhbiBzZXRFcnJvcklmSFRUUEZhaWxlZChTb3VwTWVzc2FnZSogbXNnLCBHRXJyb3IqKiBlcnJv
cikKK3sKKyAgICBpZiAoIVNPVVBfU1RBVFVTX0lTX1NVQ0NFU1NGVUwobXNnLT5zdGF0dXNfY29k
ZSkpIHsKKyAgICAgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgU09VUF9IVFRQX0VSUk9S
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZy0+c3RhdHVzX2NvZGUsIG1zZy0+cmVh
c29uX3BocmFzZSk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgICByZXR1cm4gRkFM
U0U7Cit9CisKK3N0YXRpYyBnc2l6ZSByZWFkRnJvbUxlZnRvdmVyKFdlYktpdFNvdXBIVFRQSW5w
dXRTdHJlYW1Qcml2YXRlKiBwcml2LCBncG9pbnRlciBidWZmZXIsIGdzaXplIGJ1ZnNpemUpCit7
CisgICAgZ3NpemUgbnJlYWQ7CisKKyAgICBpZiAocHJpdi0+bGVmdG92ZXJCdWZzaXplIC0gcHJp
di0+bGVmdG92ZXJPZmZzZXQgPD0gYnVmc2l6ZSkgeworICAgICAgICBucmVhZCA9IHByaXYtPmxl
ZnRvdmVyQnVmc2l6ZSAtIHByaXYtPmxlZnRvdmVyT2Zmc2V0OworICAgICAgICBtZW1jcHkoYnVm
ZmVyLCBwcml2LT5sZWZ0b3ZlckJ1ZmZlciArIHByaXYtPmxlZnRvdmVyT2Zmc2V0LCBucmVhZCk7
CisKKyAgICAgICAgZ19mcmVlKHByaXYtPmxlZnRvdmVyQnVmZmVyKTsKKyAgICAgICAgcHJpdi0+
bGVmdG92ZXJCdWZmZXIgPSAwOworICAgICAgICBwcml2LT5sZWZ0b3ZlckJ1ZnNpemUgPSBwcml2
LT5sZWZ0b3Zlck9mZnNldCA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbnJlYWQgPSBidWZz
aXplOworICAgICAgICBtZW1jcHkoYnVmZmVyLCBwcml2LT5sZWZ0b3ZlckJ1ZmZlciArIHByaXYt
PmxlZnRvdmVyT2Zmc2V0LCBucmVhZCk7CisgICAgICAgIHByaXYtPmxlZnRvdmVyT2Zmc2V0ICs9
IG5yZWFkOworICAgIH0KKworICAgIHByaXYtPm9mZnNldCArPSBucmVhZDsKKyAgICByZXR1cm4g
bnJlYWQ7Cit9CisKKy8qIFRoaXMgZG9lcyB0aGUgd29yayBvZiB3ZWJraXRfc291cF9odHRwX2lu
cHV0X3N0cmVhbV9zZW5kKCksIGFzc3VtaW5nIHRoYXQgdGhlCisgKiBHSW5wdXRTdHJlYW0gcGVu
ZGluZyBmbGFnIGhhcyBhbHJlYWR5IGJlZW4gc2V0LiBJdCBpcyBhbHNvIHVzZWQgYnkKKyAqIHdl
YmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmMoKSBpbiBzb21lIGNpcmN1bXN0
YW5jZXMuCisgKi8KK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRTb3VwSHR0cElucHV0U3RyZWFtU2Vu
ZEludGVybmFsKEdJbnB1dFN0cmVhbSogc3RyZWFtLCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxl
LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0
ZSogcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFKHN0cmVh
bSk7CisKKyAgICB3ZWJraXRTb3VwSHR0cElucHV0U3RyZWFtUHJlcGFyZUZvcklvKHN0cmVhbSwg
Y2FuY2VsbGFibGUsIDAsIDApOworICAgIHdoaWxlICghcHJpdi0+ZmluaXNoZWQgCisgICAgICAg
ICAgICYmICFwcml2LT5nb3RIZWFkZXJzCisgICAgICAgICAgICYmICFnX2NhbmNlbGxhYmxlX2lz
X2NhbmNlbGxlZChjYW5jZWxsYWJsZSkpCisgICAgICAgIGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlv
bihwcml2LT5hc3luY0NvbnRleHQsIFRSVUUpOworICAgIHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJl
YW1Eb25lSW8oc3RyZWFtKTsKKworICAgIGlmIChnX2NhbmNlbGxhYmxlX3NldF9lcnJvcl9pZl9j
YW5jZWxsZWQoY2FuY2VsbGFibGUsIGVycm9yKSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAg
IGlmIChzZXRFcnJvcklmSFRUUEZhaWxlZChwcml2LT5tc2csIGVycm9yKSkKKyAgICAgICAgcmV0
dXJuIEZBTFNFOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCBzZW5kU3luY0Zp
bmlzaGVkKEdJbnB1dFN0cmVhbSogc3RyZWFtKQoreworICAgIFdlYktpdFNvdXBIVFRQSW5wdXRT
dHJlYW1Qcml2YXRlKiBwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BS
SVZBVEUoc3RyZWFtKTsKKyAgICBHRXJyb3IqIGVycm9yID0gMDsKKworICAgIGlmICghZ19jYW5j
ZWxsYWJsZV9zZXRfZXJyb3JfaWZfY2FuY2VsbGVkKHByaXYtPmNhbmNlbGxhYmxlLCAmZXJyb3Ip
KQorICAgICAgICBzZXRFcnJvcklmSFRUUEZhaWxlZChwcml2LT5tc2csICZlcnJvcik7CisKKyAg
ICBwcml2LT5nb3RIZWFkZXJzQ2IgPSAwOworICAgIHByaXYtPmZpbmlzaGVkQ2IgPSAwOworCisg
ICAgLyogV2FrZSB1cCB0aGUgbWFpbiBjb250ZXh0IGl0ZXJhdGlvbiAqLworICAgIGdfc291cmNl
X2F0dGFjaChnX2lkbGVfc291cmNlX25ldygpLCAwKTsKK30KKworLyoqCisgKiB3ZWJraXRfc291
cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kOgorICogQGh0dHBzdHJlYW06IGEgI1dlYktpdFNvdXBI
VFRQSW5wdXRTdHJlYW0KKyAqIEBjYW5jZWxsYWJsZTogb3B0aW9uYWwgI0dDYW5jZWxsYWJsZSBv
YmplY3QsICUwIHRvIGlnbm9yZS4KKyAqIEBlcnJvcjogbG9jYXRpb24gdG8gc3RvcmUgdGhlIGVy
cm9yIG9jY3VyaW5nLCBvciAlMCB0byBpZ25vcmUKKyAqCisgKiBTeW5jaHJvbm91c2x5IHNlbmRz
IHRoZSBIVFRQIHJlcXVlc3QgYXNzb2NpYXRlZCB3aXRoIEBzdHJlYW0sIGFuZAorICogcmVhZHMg
dGhlIHJlc3BvbnNlIGhlYWRlcnMuIENhbGwgdGhpcyBhZnRlciB3ZWJraXRfc291cF9odHRwX2lu
cHV0X3N0cmVhbV9uZXcoKQorICogYW5kIGJlZm9yZSB0aGUgZmlyc3QgZ19pbnB1dF9zdHJlYW1f
cmVhZCgpIGlmIHlvdSB3YW50IHRvIGNoZWNrIHRoZQorICogSFRUUCBzdGF0dXMgY29kZSBiZWZv
cmUgeW91IHN0YXJ0IHJlYWRpbmcuCisgKgorICogUmV0dXJuIHZhbHVlOiAlVFJVRSBpZiBtc2cg
aGFzIGEgc3VjY2Vzc2Z1bCAoMnh4KSBzdGF0dXMsICVGQUxTRSBpZgorICogbm90LgorICoqLwor
Z2Jvb2xlYW4gd2Via2l0U291cEh0dHBJbnB1dFN0cmVhbVNlbmQoV2ViS2l0U291cEhUVFBJbnB1
dFN0cmVhbSogaHR0cHN0cmVhbSwgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwgR0Vycm9yKiog
ZXJyb3IpCit7CisgICAgV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUqIHByaXYgPSBX
RUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURShodHRwc3RyZWFtKTsKKyAg
ICBHSW5wdXRTdHJlYW0qIGlzdHJlYW0gPSAoR0lucHV0U3RyZWFtKilodHRwc3RyZWFtOworICAg
IGdib29sZWFuIHJlc3VsdDsKKworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9TT1VQ
X0lTX0hUVFBfSU5QVVRfU1RSRUFNKGh0dHBzdHJlYW0pLCBGQUxTRSk7CisKKyAgICBpZiAoIWdf
aW5wdXRfc3RyZWFtX3NldF9wZW5kaW5nKGlzdHJlYW0sIGVycm9yKSkKKyAgICAgICAgcmV0dXJu
IEZBTFNFOworCisgICAgcHJpdi0+Z290SGVhZGVyc0NiID0gc2VuZFN5bmNGaW5pc2hlZDsKKyAg
ICBwcml2LT5maW5pc2hlZENiID0gc2VuZFN5bmNGaW5pc2hlZDsKKworICAgIHJlc3VsdCA9IHdl
YmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1TZW5kSW50ZXJuYWwoaXN0cmVhbSwgY2FuY2VsbGFibGUs
IGVycm9yKTsKKyAgICBnX2lucHV0X3N0cmVhbV9jbGVhcl9wZW5kaW5nKGlzdHJlYW0pOworCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdzc2l6ZSB3ZWJraXRTb3VwSHR0cElucHV0
U3RyZWFtUmVhZChHSW5wdXRTdHJlYW0qIHN0cmVhbSwgdm9pZCogYnVmZmVyLCBnc2l6ZSBjb3Vu
dCwgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2Vi
S2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUqIHByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lO
UFVUX1NUUkVBTV9HRVRfUFJJVkFURShzdHJlYW0pOworCisgICAgaWYgKHByaXYtPmZpbmlzaGVk
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8qIElmIHRoZXJlIGlzIGRhdGEgbGVmdG92ZXIg
ZnJvbSBhIHByZXZpb3VzIHJlYWQsIHJldHVybiBpdC4gKi8KKyAgICBpZiAocHJpdi0+bGVmdG92
ZXJCdWZzaXplKQorICAgICAgICByZXR1cm4gcmVhZEZyb21MZWZ0b3Zlcihwcml2LCBidWZmZXIs
IGNvdW50KTsKKworICAgIC8qIE5vIGxlZnRvdmVyIGRhdGEsIGFjY2VwdCBvbmUgY2h1bmsgZnJv
bSB0aGUgbmV0d29yayAqLworICAgIHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1QcmVwYXJlRm9y
SW8oc3RyZWFtLCBjYW5jZWxsYWJsZSwgKGd1Y2hhciopYnVmZmVyLCBjb3VudCk7CisgICAgd2hp
bGUgKCFwcml2LT5maW5pc2hlZCAKKyAgICAgICAgICAgJiYgIXByaXYtPmNhbGxlck5yZWFkCisg
ICAgICAgICAgICYmICFnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxlZChjYW5jZWxsYWJsZSkpCisg
ICAgICAgIGdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbihwcml2LT5hc3luY0NvbnRleHQsIFRSVUUp
OworICAgIHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1Eb25lSW8oc3RyZWFtKTsKKworICAgIGlm
IChwcml2LT5jYWxsZXJOcmVhZCA+IDApCisgICAgICAgIHJldHVybiBwcml2LT5jYWxsZXJOcmVh
ZDsKKworICAgIGlmIChnX2NhbmNlbGxhYmxlX3NldF9lcnJvcl9pZl9jYW5jZWxsZWQoY2FuY2Vs
bGFibGUsIGVycm9yKSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChzZXRFcnJvcklmSFRU
UEZhaWxlZChwcml2LT5tc2csIGVycm9yKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmV0
dXJuIDA7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRTb3VwSHR0cElucHV0U3RyZWFtQ2xv
c2UoR0lucHV0U3RyZWFtKiBzdHJlYW0sIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUsIEdFcnJv
cioqIGVycm9yKQoreworICAgIFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlKiBwcml2
ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUoc3RyZWFtKTsKKwor
ICAgIGlmICghcHJpdi0+ZmluaXNoZWQpCisgICAgICAgIHNvdXBfc2Vzc2lvbl9jYW5jZWxfbWVz
c2FnZShwcml2LT5zZXNzaW9uLCBwcml2LT5tc2csIFNPVVBfU1RBVFVTX0NBTkNFTExFRCk7CisK
KyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQgd3JhcHBlckNhbGxiYWNrKEdPYmpl
Y3QqIHNvdXJjZU9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXMsIGdwb2ludGVyIHVzZXJEYXRhKQor
eworICAgIEdJbnB1dFN0cmVhbSogc3RyZWFtID0gR19JTlBVVF9TVFJFQU0oc291cmNlT2JqZWN0
KTsKKyAgICBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9T
T1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFKHN0cmVhbSk7CisKKyAgICBnX2lucHV0
X3N0cmVhbV9jbGVhcl9wZW5kaW5nKHN0cmVhbSk7CisgICAgaWYgKHByaXYtPm91dHN0YW5kaW5n
Q2FsbGJhY2spCisgICAgICAgICgqcHJpdi0+b3V0c3RhbmRpbmdDYWxsYmFjaykoc291cmNlT2Jq
ZWN0LCByZXMsIHVzZXJEYXRhKTsKKyAgICBwcml2LT5vdXRzdGFuZGluZ0NhbGxiYWNrID0gMDsK
KyAgICBnX29iamVjdF91bnJlZihzdHJlYW0pOworfQorCitzdGF0aWMgdm9pZCBzZW5kQXN5bmNU
aHJlYWQoR1NpbXBsZUFzeW5jUmVzdWx0KiByZXMsIEdPYmplY3QqIG9iamVjdCwgR0NhbmNlbGxh
YmxlKiBjYW5jZWxsYWJsZSkKK3sKKyAgICBHRXJyb3IqIGVycm9yID0gMDsKKyAgICBnYm9vbGVh
biBzdWNjZXNzOworCisgICAgc3VjY2VzcyA9IHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1TZW5k
SW50ZXJuYWwoR19JTlBVVF9TVFJFQU0ob2JqZWN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxsYWJsZSwgJmVycm9yKTsKKyAgICBn
X3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19nYm9vbGVhbihyZXMsIHN1Y2Nlc3MpOwor
ICAgIGlmIChlcnJvcikgeworICAgICAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X2Zyb21f
ZXJyb3IocmVzLCBlcnJvcik7CisgICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7CisgICAgfQor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRTb3VwSHR0cElucHV0U3RyZWFtU2VuZEFzeW5jSW5UaHJl
YWQoR0lucHV0U3RyZWFtKiBzdHJlYW0sIGludCBpb1ByaW9yaXR5LCBHQ2FuY2VsbGFibGUqIGNh
bmNlbGxhYmxlLCBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLCBncG9pbnRlciB1c2VyRGF0
YSkKK3sKKyAgICBHU2ltcGxlQXN5bmNSZXN1bHQqIHJlczsKKworICAgIHJlcyA9IGdfc2ltcGxl
X2FzeW5jX3Jlc3VsdF9uZXcoR19PQkpFQ1Qoc3RyZWFtKSwgY2FsbGJhY2ssIHVzZXJEYXRhLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdwb2ludGVyKSB3ZWJraXRTb3Vw
SHR0cElucHV0U3RyZWFtU2VuZEFzeW5jSW5UaHJlYWQpOworICAgIGdfc2ltcGxlX2FzeW5jX3Jl
c3VsdF9ydW5faW5fdGhyZWFkKHJlcywgc2VuZEFzeW5jVGhyZWFkLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlvUHJpb3JpdHksIGNhbmNlbGxhYmxlKTsKKyAgICBn
X29iamVjdF91bnJlZihyZXMpOworfQorCitzdGF0aWMgdm9pZCBzZW5kQXN5bmNGaW5pc2hlZChH
SW5wdXRTdHJlYW0qIHN0cmVhbSkKK3sKKyAgICBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJp
dmF0ZSogcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFKHN0
cmVhbSk7CisgICAgR1NpbXBsZUFzeW5jUmVzdWx0KiByZXN1bHQ7CisgICAgR0Vycm9yKiBlcnJv
ciA9IDA7CisKKyAgICBpZiAoIWdfY2FuY2VsbGFibGVfc2V0X2Vycm9yX2lmX2NhbmNlbGxlZChw
cml2LT5jYW5jZWxsYWJsZSwgJmVycm9yKSkKKyAgICAgICAgc2V0RXJyb3JJZkhUVFBGYWlsZWQo
cHJpdi0+bXNnLCAmZXJyb3IpOworCisgICAgcHJpdi0+Z290SGVhZGVyc0NiID0gMDsKKyAgICBw
cml2LT5maW5pc2hlZENiID0gMDsKKyAgICB3ZWJraXRTb3VwSHR0cElucHV0U3RyZWFtRG9uZUlv
KHN0cmVhbSk7CisKKyAgICByZXN1bHQgPSBwcml2LT5yZXN1bHQ7CisgICAgcHJpdi0+cmVzdWx0
ID0gMDsKKworICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dib29sZWFuKHJl
c3VsdCwgIWVycm9yKTsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgZ19zaW1wbGVfYXN5bmNf
cmVzdWx0X3NldF9mcm9tX2Vycm9yKHJlc3VsdCwgZXJyb3IpOworICAgICAgICBnX2Vycm9yX2Zy
ZWUoZXJyb3IpOworICAgIH0KKyAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGUocmVz
dWx0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0U291cEh0dHBJbnB1dFN0cmVhbVNlbmRBc3lu
Y0ludGVybmFsKEdJbnB1dFN0cmVhbSogc3RyZWFtLCBpbnQgaW9Qcmlvcml0eSwgR0NhbmNlbGxh
YmxlKiBjYW5jZWxsYWJsZSwgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50ZXIg
dXNlckRhdGEpCit7CisgICAgV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUqIHByaXYg
PSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURShzdHJlYW0pOworCisg
ICAgZ19vYmplY3RfcmVmKHN0cmVhbSk7CisgICAgcHJpdi0+b3V0c3RhbmRpbmdDYWxsYmFjayA9
IGNhbGxiYWNrOworCisgICAgLyogSWYgdGhlIHNlc3Npb24gdXNlcyB0aGUgZGVmYXVsdCBHTWFp
bkNvbnRleHQsIHRoZW4gd2UgY2FuIGRvCisgICAgICogYXN5bmMgSS9PIGRpcmVjdGx5LiBCdXQg
aWYgaXQgaGFzIGl0cyBvd24gbWFpbiBjb250ZXh0LCBpdCdzCisgICAgICogZWFzaWVyIHRvIGp1
c3QgcnVuIGl0IGluIGFub3RoZXIgdGhyZWFkLgorICAgICAqLworICAgIGlmIChzb3VwX3Nlc3Np
b25fZ2V0X2FzeW5jX2NvbnRleHQocHJpdi0+c2Vzc2lvbikpIHsKKyAgICAgICAgd2Via2l0U291
cEh0dHBJbnB1dFN0cmVhbVNlbmRBc3luY0luVGhyZWFkKHN0cmVhbSwgaW9Qcmlvcml0eSwgY2Fu
Y2VsbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3cmFwcGVyQ2FsbGJhY2ssIHVzZXJEYXRhKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIHByaXYtPmdvdEhlYWRlcnNDYiA9IHNlbmRBc3luY0ZpbmlzaGVkOworICAgIHByaXYt
PmZpbmlzaGVkQ2IgPSBzZW5kQXN5bmNGaW5pc2hlZDsKKworICAgIHdlYmtpdFNvdXBIdHRwSW5w
dXRTdHJlYW1QcmVwYXJlRm9ySW8oc3RyZWFtLCBjYW5jZWxsYWJsZSwgMCwgMCk7CisgICAgcHJp
di0+cmVzdWx0ID0gZ19zaW1wbGVfYXN5bmNfcmVzdWx0X25ldyhHX09CSkVDVChzdHJlYW0pLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNhbGxi
YWNrLCB1c2VyRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChncG9pbnRlcikgd2Via2l0U291cEh0dHBJbnB1dFN0cmVhbVNlbmRBc3luYyk7Cit9CisK
Ky8qKgorICogd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luYzoKKyAqIEBo
dHRwc3RyZWFtOiBhICNXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtCisgKiBAaW9Qcmlvcml0eTog
dGhlIGlvIHByaW9yaXR5IG9mIHRoZSByZXF1ZXN0LgorICogQGNhbmNlbGxhYmxlOiBvcHRpb25h
bCAjR0NhbmNlbGxhYmxlIG9iamVjdCwgJTAgdG8gaWdub3JlLgorICogQGNhbGxiYWNrOiBjYWxs
YmFjayB0byBjYWxsIHdoZW4gdGhlIHJlcXVlc3QgaXMgc2F0aXNmaWVkCisgKiBAdXNlckRhdGE6
IHRoZSBkYXRhIHRvIHBhc3MgdG8gY2FsbGJhY2sgZnVuY3Rpb24KKyAqCisgKiBBc3luY2hyb25v
dXNseSBzZW5kcyB0aGUgSFRUUCByZXF1ZXN0IGFzc29jaWF0ZWQgd2l0aCBAc3RyZWFtLCBhbmQK
KyAqIHJlYWRzIHRoZSByZXNwb25zZSBoZWFkZXJzLiBDYWxsIHRoaXMgYWZ0ZXIgd2Via2l0X3Nv
dXBfaHR0cF9pbnB1dF9zdHJlYW1fbmV3KCkKKyAqIGFuZCBiZWZvcmUgdGhlIGZpcnN0IGdfaW5w
dXRfc3RyZWFtX3JlYWRfYXN5bmMoKSBpZiB5b3Ugd2FudCB0bworICogY2hlY2sgdGhlIEhUVFAg
c3RhdHVzIGNvZGUgYmVmb3JlIHlvdSBzdGFydCByZWFkaW5nLgorICoqLwordm9pZCB3ZWJraXRT
b3VwSHR0cElucHV0U3RyZWFtU2VuZEFzeW5jKFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0qIGh0
dHBzdHJlYW0sIGludCBpb1ByaW9yaXR5LCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlLCBHQXN5
bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBHSW5w
dXRTdHJlYW0qIGlzdHJlYW0gPSAoR0lucHV0U3RyZWFtKilodHRwc3RyZWFtOworICAgIEdFcnJv
ciogZXJyb3IgPSAwOworCisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfU09VUF9JU19IVFRQ
X0lOUFVUX1NUUkVBTShodHRwc3RyZWFtKSk7CisKKyAgICBpZiAoIWdfaW5wdXRfc3RyZWFtX3Nl
dF9wZW5kaW5nKGlzdHJlYW0sICZlcnJvcikpIHsKKyAgICAgICAgZ19zaW1wbGVfYXN5bmNfcmVw
b3J0X2dlcnJvcl9pbl9pZGxlKEdfT0JKRUNUKGh0dHBzdHJlYW0pLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyRGF0YSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKTsKKyAgICAgICAgZ19lcnJvcl9mcmVl
KGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB3ZWJraXRTb3VwSHR0cElucHV0
U3RyZWFtU2VuZEFzeW5jSW50ZXJuYWwoaXN0cmVhbSwgaW9Qcmlvcml0eSwgY2FuY2VsbGFibGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNr
LCB1c2VyRGF0YSk7Cit9CisKKy8qKgorICogd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1f
c2VuZF9maW5pc2g6CisgKiBAaHR0cHN0cmVhbTogYSAjV2ViS2l0U291cEhUVFBJbnB1dFN0cmVh
bQorICogQHJlc3VsdDogYSAjR0FzeW5jUmVzdWx0LgorICogQGVycm9yOiBhICNHRXJyb3IgbG9j
YXRpb24gdG8gc3RvcmUgdGhlIGVycm9yIG9jY3VyaW5nLCBvciAlMCB0bworICogaWdub3JlLgor
ICoKKyAqIEZpbmlzaGVzIGEgd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3lu
YygpIG9wZXJhdGlvbi4KKyAqCisgKiBSZXR1cm4gdmFsdWU6ICVUUlVFIGlmIHRoZSBtZXNzYWdl
IHdhcyBzZW50IHN1Y2Nlc3NmdWxseSBhbmQKKyAqIHJlY2VpdmVkIGEgc3VjY2Vzc2Z1bCBzdGF0
dXMgY29kZSwgJUZBTFNFIGlmIG5vdC4KKyAqKi8KK2dib29sZWFuIHdlYmtpdFNvdXBIdHRwSW5w
dXRTdHJlYW1TZW5kRmluaXNoKFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0qIGh0dHBzdHJlYW0s
IEdBc3luY1Jlc3VsdCogcmVzdWx0LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBHU2ltcGxlQXN5
bmNSZXN1bHQqIHNpbXBsZTsKKworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEdfSVNfU0lNUExF
X0FTWU5DX1JFU1VMVChyZXN1bHQpLCBGQUxTRSk7CisgICAgc2ltcGxlID0gR19TSU1QTEVfQVNZ
TkNfUkVTVUxUKHJlc3VsdCk7CisKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChnX3NpbXBsZV9h
c3luY19yZXN1bHRfZ2V0X3NvdXJjZV90YWcoc2ltcGxlKSA9PSB3ZWJraXRTb3VwSHR0cElucHV0
U3RyZWFtU2VuZEFzeW5jLCBGQUxTRSk7CisKKyAgICBpZiAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0
X3Byb3BhZ2F0ZV9lcnJvcihzaW1wbGUsIGVycm9yKSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOwor
CisgICAgcmV0dXJuIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfb3BfcmVzX2dib29sZWFuKHNp
bXBsZSk7Cit9CisKK3N0YXRpYyB2b2lkIHJlYWRBc3luY0RvbmUoR0lucHV0U3RyZWFtKiBzdHJl
YW0pCit7CisgICAgV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUqIHByaXYgPSBXRUJL
SVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURShzdHJlYW0pOworICAgIEdTaW1w
bGVBc3luY1Jlc3VsdCogcmVzdWx0OworICAgIEdFcnJvciogZXJyb3IgPSAwOworCisgICAgcmVz
dWx0ID0gcHJpdi0+cmVzdWx0OworICAgIHByaXYtPnJlc3VsdCA9IDA7CisKKyAgICBpZiAoZ19j
YW5jZWxsYWJsZV9zZXRfZXJyb3JfaWZfY2FuY2VsbGVkKHByaXYtPmNhbmNlbGxhYmxlLCAmZXJy
b3IpCisgICAgICAgIHx8IHNldEVycm9ySWZIVFRQRmFpbGVkKHByaXYtPm1zZywgJmVycm9yKSkg
eworICAgICAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X2Zyb21fZXJyb3IocmVzdWx0LCBl
cnJvcik7CisgICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7CisgICAgfSBlbHNlCisgICAgICAg
IGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dzc2l6ZShyZXN1bHQsIHByaXYtPmNh
bGxlck5yZWFkKTsKKworICAgIHByaXYtPmdvdENodW5rQ2IgPSAwOworICAgIHByaXYtPmZpbmlz
aGVkQ2IgPSAwOworICAgIHByaXYtPmNhbmNlbGxlZENiID0gMDsKKyAgICB3ZWJraXRTb3VwSHR0
cElucHV0U3RyZWFtRG9uZUlvKHN0cmVhbSk7CisKKyAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRf
Y29tcGxldGUocmVzdWx0KTsKKyAgICBnX29iamVjdF91bnJlZihyZXN1bHQpOworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRTb3VwSHR0cElucHV0U3RyZWFtUmVhZEFzeW5jKEdJbnB1dFN0cmVhbSog
c3RyZWFtLCB2b2lkKiBidWZmZXIsIGdzaXplIGNvdW50LCBpbnQgaW9Qcmlvcml0eSwgR0NhbmNl
bGxhYmxlKiBjYW5jZWxsYWJsZSwgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50
ZXIgdXNlckRhdGEpCit7CisgICAgV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUqIHBy
aXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURShzdHJlYW0pOwor
ICAgIEdTaW1wbGVBc3luY1Jlc3VsdCogcmVzdWx0OworCisgICAgLyogSWYgdGhlIHNlc3Npb24g
dXNlcyB0aGUgZGVmYXVsdCBHTWFpbkNvbnRleHQsIHRoZW4gd2UgY2FuIGRvCisgICAgICogYXN5
bmMgSS9PIGRpcmVjdGx5LiBCdXQgaWYgaXQgaGFzIGl0cyBvd24gbWFpbiBjb250ZXh0LCB3ZSBm
YWxsCisgICAgICogYmFjayB0byB0aGUgYXN5bmMtdmlhLXN5bmMtaW4tYW5vdGhlci10aHJlYWQg
aW1wbGVtZW50YXRpb24uCisgICAgICovCisgICAgaWYgKHNvdXBfc2Vzc2lvbl9nZXRfYXN5bmNf
Y29udGV4dChwcml2LT5zZXNzaW9uKSkgeworICAgICAgICBHX0lOUFVUX1NUUkVBTV9DTEFTUyh3
ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9wYXJlbnRfY2xhc3MpLT4KKyAgICAgICAgcmVh
ZF9hc3luYyhzdHJlYW0sIGJ1ZmZlciwgY291bnQsIGlvUHJpb3JpdHksCisgICAgICAgICAgICAg
ICAgICAgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICByZXN1bHQgPSBnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3KEdfT0JKRUNU
KHN0cmVhbSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFj
aywgdXNlckRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ3Bv
aW50ZXIpIHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1SZWFkQXN5bmMpOworCisgICAgaWYgKHBy
aXYtPmZpbmlzaGVkKSB7CisgICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVz
X2dzc2l6ZShyZXN1bHQsIDApOworICAgICAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxl
dGVfaW5faWRsZShyZXN1bHQpOworICAgICAgICBnX29iamVjdF91bnJlZihyZXN1bHQpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHByaXYtPmxlZnRvdmVyQnVmc2l6ZSkgewor
ICAgICAgICBnc2l6ZSBucmVhZCA9IHJlYWRGcm9tTGVmdG92ZXIocHJpdiwgYnVmZmVyLCBjb3Vu
dCk7CisgICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dzc2l6ZShyZXN1
bHQsIG5yZWFkKTsKKyAgICAgICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlX2luX2lk
bGUocmVzdWx0KTsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYocmVzdWx0KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIHByaXYtPnJlc3VsdCA9IHJlc3VsdDsKKworICAgIHByaXYtPmdv
dENodW5rQ2IgPSByZWFkQXN5bmNEb25lOworICAgIHByaXYtPmZpbmlzaGVkQ2IgPSByZWFkQXN5
bmNEb25lOworICAgIHByaXYtPmNhbmNlbGxlZENiID0gcmVhZEFzeW5jRG9uZTsKKyAgICB3ZWJr
aXRTb3VwSHR0cElucHV0U3RyZWFtUHJlcGFyZUZvcklvKHN0cmVhbSwgY2FuY2VsbGFibGUsIChn
dWNoYXIqKSBidWZmZXIsIGNvdW50KTsKK30KKworc3RhdGljIGdzc2l6ZSB3ZWJraXRTb3VwSHR0
cElucHV0U3RyZWFtUmVhZEZpbmlzaChHSW5wdXRTdHJlYW0qIHN0cmVhbSwgR0FzeW5jUmVzdWx0
KiByZXN1bHQsIEdFcnJvcioqIGVycm9yKQoreworICAgIEdTaW1wbGVBc3luY1Jlc3VsdCogc2lt
cGxlOworCisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoR19JU19TSU1QTEVfQVNZTkNfUkVTVUxU
KHJlc3VsdCksIC0xKTsKKyAgICBzaW1wbGUgPSBHX1NJTVBMRV9BU1lOQ19SRVNVTFQocmVzdWx0
KTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X3Nv
dXJjZV90YWcoc2ltcGxlKSA9PSB3ZWJraXRTb3VwSHR0cElucHV0U3RyZWFtUmVhZEFzeW5jLCAt
MSk7CisKKyAgICByZXR1cm4gZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9vcF9yZXNfZ3NzaXpl
KHNpbXBsZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1DbG9z
ZUFzeW5jKEdJbnB1dFN0cmVhbSogc3RyZWFtLCBpbnQgaW9Qcmlvcml0eSwgR0NhbmNlbGxhYmxl
KiBjYW5jZWxsYWJsZSwgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50ZXIgdXNl
ckRhdGEpCit7CisgICAgR1NpbXBsZUFzeW5jUmVzdWx0KiByZXN1bHQ7CisgICAgZ2Jvb2xlYW4g
c3VjY2VzczsKKyAgICBHRXJyb3IqIGVycm9yID0gMDsKKworICAgIHJlc3VsdCA9IGdfc2ltcGxl
X2FzeW5jX3Jlc3VsdF9uZXcoR19PQkpFQ1Qoc3RyZWFtKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLCB1c2VyRGF0YSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChncG9pbnRlcikgd2Via2l0U291cEh0dHBJbnB1dFN0cmVh
bUNsb3NlQXN5bmMpOworICAgIHN1Y2Nlc3MgPSB3ZWJraXRTb3VwSHR0cElucHV0U3RyZWFtQ2xv
c2Uoc3RyZWFtLCBjYW5jZWxsYWJsZSwgJmVycm9yKTsKKyAgICBnX3NpbXBsZV9hc3luY19yZXN1
bHRfc2V0X29wX3Jlc19nYm9vbGVhbihyZXN1bHQsIHN1Y2Nlc3MpOworICAgIGlmIChlcnJvcikg
eworICAgICAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X2Zyb21fZXJyb3IocmVzdWx0LCBl
cnJvcik7CisgICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7CisgICAgfQorCisgICAgZ19zaW1w
bGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlX2luX2lkbGUocmVzdWx0KTsKKyAgICBnX29iamVjdF91
bnJlZihyZXN1bHQpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0U291cEh0dHBJbnB1dFN0
cmVhbUNsb3NlRmluaXNoKEdJbnB1dFN0cmVhbSogc3RyZWFtLCBHQXN5bmNSZXN1bHQqIHJlc3Vs
dCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgLyogRmFpbHVyZXMgaGFuZGxlZCBpbiBnZW5lcmlj
IGNsb3NlX2ZpbmlzaCBjb2RlICovCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnb2Zm
c2V0IHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1UZWxsKEdTZWVrYWJsZSogc2Vla2FibGUpCit7
CisgICAgV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUqIHByaXYgPSBXRUJLSVRfU09V
UF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURShzZWVrYWJsZSk7CisKKyAgICByZXR1cm4g
cHJpdi0+b2Zmc2V0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0U291cEh0dHBJbnB1dFN0
cmVhbUNhblNlZWsoR1NlZWthYmxlKiBzZWVrYWJsZSkKK3sKKyAgICByZXR1cm4gVFJVRTsKK30K
Kworc3RhdGljIGdib29sZWFuIHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1TZWVrKEdTZWVrYWJs
ZSogc2Vla2FibGUsIGdvZmZzZXQgb2Zmc2V0LCBHU2Vla1R5cGUgdHlwZSwgR0NhbmNlbGxhYmxl
KiBjYW5jZWxsYWJsZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgR0lucHV0U3RyZWFtKiBzdHJl
YW0gPSBHX0lOUFVUX1NUUkVBTShzZWVrYWJsZSk7CisgICAgV2ViS2l0U291cEhUVFBJbnB1dFN0
cmVhbVByaXZhdGUqIHByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJ
VkFURShzZWVrYWJsZSk7CisgICAgY2hhciogcmFuZ2U7CisKKyAgICBpZiAodHlwZSA9PSBHX1NF
RUtfRU5EKSB7CisgICAgICAgIC8qIEZJWE1FOiB3ZSBjb3VsZCBzZW5kICJieXRlcz0tb2Zmc2V0
IiwgYnV0IHVubGVzcyB3ZQorICAgICAgICAgKiBrbm93IHRoZSBDb250ZW50LUxlbmd0aCwgd2Ug
d291bGRuJ3QgYmUgYWJsZSB0bworICAgICAgICAgKiBhbnN3ZXIgYSB0ZWxsKCkgcHJvcGVybHku
IFdlIGNvdWxkIGZpbmQgdGhlCisgICAgICAgICAqIENvbnRlbnQtTGVuZ3RoIGJ5IGRvaW5nIGEg
SEVBRC4uLgorICAgICAgICAgKi8KKworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9y
LCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX05PVF9TVVBQT1JURUQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIkdfU0VFS19FTkQgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQiKTsKKyAgICAg
ICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIGlmICghZ19pbnB1dF9zdHJlYW1fc2V0X3Bl
bmRpbmcoc3RyZWFtLCBlcnJvcikpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIHNvdXBf
c2Vzc2lvbl9jYW5jZWxfbWVzc2FnZShwcml2LT5zZXNzaW9uLCBwcml2LT5tc2csIFNPVVBfU1RB
VFVTX0NBTkNFTExFRCk7CisgICAgLy8gIHNvdXBfbWVzc2FnZV9pb19jbGVhbnVwIChwcml2LT5t
c2cpOworCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBHX1NFRUtfQ1VSOgorICAgICAg
ICBvZmZzZXQgKz0gcHJpdi0+b2Zmc2V0OworICAgIC8qIGZhbGwgdGhyb3VnaCAqLworCisgICAg
Y2FzZSBHX1NFRUtfU0VUOgorICAgICAgICByYW5nZSA9IGdfc3RyZHVwX3ByaW50ZigiYnl0ZXM9
JSIgR19HVUlOVDY0X0ZPUk1BVCAiLSIsIChndWludDY0KW9mZnNldCk7CisgICAgICAgIHByaXYt
Pm9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEdfU0VFS19FTkQ6
CisgICAgICAgIHJhbmdlID0gMDsgICAgICAgICAvKiBrZWVwIGNvbXBpbGVycyBoYXBweSAqLwor
ICAgICAgICBnX3JldHVybl92YWxfaWZfcmVhY2hlZChGQUxTRSk7CisgICAgICAgIGJyZWFrOwor
CisgICAgZGVmYXVsdDoKKyAgICAgICAgZ19yZXR1cm5fdmFsX2lmX3JlYWNoZWQoRkFMU0UpOwor
ICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX3JlbW92ZShwcml2LT5tc2ctPnJlcXVl
c3RfaGVhZGVycywgIlJhbmdlIik7CisgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKHBy
aXYtPm1zZy0+cmVxdWVzdF9oZWFkZXJzLCAiUmFuZ2UiLCByYW5nZSk7CisgICAgZ19mcmVlKHJh
bmdlKTsKKworICAgIHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1RdWV1ZU1lc3NhZ2UoV0VCS0lU
X1NPVVBfSFRUUF9JTlBVVF9TVFJFQU0oc3RyZWFtKSk7CisKKyAgICBnX2lucHV0X3N0cmVhbV9j
bGVhcl9wZW5kaW5nKHN0cmVhbSk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9v
bGVhbiB3ZWJraXRTb3VwSHR0cElucHV0U3RyZWFtQ2FuVHJ1bmNhdGUoR1NlZWthYmxlKiBzZWVr
YWJsZSkKK3sKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRT
b3VwSHR0cElucHV0U3RyZWFtVHJ1bmNhdGUoR1NlZWthYmxlKiBzZWVrYWJsZSwgZ29mZnNldCBv
ZmZzZXQsIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUsIEdFcnJvcioqIGVycm9yKQoreworICAg
IGdfc2V0X2Vycm9yX2xpdGVyYWwoZXJyb3IsIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfTk9UX1NV
UFBPUlRFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJUcnVuY2F0ZSBub3QgYWxsb3dlZCBv
biBpbnB1dCBzdHJlYW0iKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK1NvdXBNZXNzYWdlICog
d2Via2l0U291cEh0dHBJbnB1dFN0cmVhbUdldE1lc3NhZ2UoV2ViS2l0U291cEhUVFBJbnB1dFN0
cmVhbSogaHR0cHN0cmVhbSkKK3sKKyAgICBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0
ZSogcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFKGh0dHBz
dHJlYW0pOworCisgICAgcmV0dXJuIHByaXYtPm1zZyA/IChTb3VwTWVzc2FnZSopZ19vYmplY3Rf
cmVmKHByaXYtPm1zZykgOiAwOworfQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC93ZWJraXRzb3VwaHR0cGlucHV0c3RyZWFtLmggYi9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC93ZWJraXRzb3VwaHR0cGlucHV0c3RyZWFtLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRkMjk1NwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL3dlYmtpdHNvdXBodHRwaW5wdXRzdHJlYW0uaApAQCAt
MCwwICsxLDcyIEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDkgUmVkIEhhdCwg
SW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVt
cGxlIFBsYWNlLCBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAq
LworCisjaWZuZGVmIHdlYmtpdHNvdXBodHRwaW5wdXRzdHJlYW1faAorI2RlZmluZSB3ZWJraXRz
b3VwaHR0cGlucHV0c3RyZWFtX2ggMQorCisjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUg
PGxpYnNvdXAvc291cC10eXBlcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dfQkVHSU5f
REVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNICAgICAg
ICAgKHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dldF90eXBlKCkpCisjZGVmaW5lIFdF
QktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNKG8pICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX0NBU1QoKG8pLCBXRUJLSVRfVFlQRV9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNLCBXZWJL
aXRTb3VwSFRUUElucHV0U3RyZWFtKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9T
VFJFQU1fQ0xBU1MoaykgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoayksIFdFQktJVF9U
WVBFX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU0sIFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1DbGFz
cykpCisjZGVmaW5lIFdFQktJVF9TT1VQX0lTX0hUVFBfSU5QVVRfU1RSRUFNKG8pICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG8pLCBXRUJLSVRfVFlQRV9TT1VQX0hUVFBfSU5Q
VVRfU1RSRUFNKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfSVNfSFRUUF9JTlBVVF9TVFJFQU1fQ0xB
U1MoaykgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoayksIFdFQktJVF9UWVBFX1NPVVBfSFRU
UF9JTlBVVF9TVFJFQU0pKQorI2RlZmluZSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9H
RVRfQ0xBU1MobykgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG8pLCBXRUJLSVRfVFlQRV9T
T1VQX0hUVFBfSU5QVVRfU1RSRUFNLCBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtQ2xhc3MpKQor
Cit0eXBlZGVmIHN0cnVjdCBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtIFdlYktpdFNvdXBIVFRQ
SW5wdXRTdHJlYW07Cit0eXBlZGVmIHN0cnVjdCBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtQ2xh
c3MgV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbUNsYXNzOworCitzdHJ1Y3QgV2ViS2l0U291cEhU
VFBJbnB1dFN0cmVhbSB7CisgICAgR0lucHV0U3RyZWFtIHBhcmVudDsKKworfTsKKworc3RydWN0
IFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1DbGFzcyB7CisgICAgR0lucHV0U3RyZWFtQ2xhc3Mg
cGFyZW50X2NsYXNzOworCisgICAgLyogUGFkZGluZyBmb3IgZnV0dXJlIGV4cGFuc2lvbiAqLwor
ICAgIHZvaWQgKCogX2dfcmVzZXJ2ZWQxKSh2b2lkKTsKKyAgICB2b2lkICgqIF9nX3Jlc2VydmVk
Mikodm9pZCk7CisgICAgdm9pZCAoKiBfZ19yZXNlcnZlZDMpKHZvaWQpOworICAgIHZvaWQgKCog
X2dfcmVzZXJ2ZWQ0KSh2b2lkKTsKKyAgICB2b2lkICgqIF9nX3Jlc2VydmVkNSkodm9pZCk7Cit9
OworCitHVHlwZSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9nZXRfdHlwZSh2b2lkKSBH
X0dOVUNfQ09OU1Q7CisKK1dlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0qIHdlYmtpdFNvdXBIdHRw
SW5wdXRTdHJlYW1OZXcoU291cFNlc3Npb24qIHNlc3Npb24sIFNvdXBNZXNzYWdlKiBtc2cpOwor
CitnYm9vbGVhbiB3ZWJraXRTb3VwSHR0cElucHV0U3RyZWFtU2VuZChXZWJLaXRTb3VwSFRUUElu
cHV0U3RyZWFtKiBodHRwc3RyZWFtLCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlLCBHRXJyb3Iq
KiBlcnJvcik7CisKK3ZvaWQgd2Via2l0U291cEh0dHBJbnB1dFN0cmVhbVNlbmRBc3luYyhXZWJL
aXRTb3VwSFRUUElucHV0U3RyZWFtKiBodHRwc3RyZWFtLCBpbnQgaW9Qcmlvcml0eSwgR0NhbmNl
bGxhYmxlKiBjYW5jZWxsYWJsZSwgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50
ZXIgdXNlckRhdGEpOworCitnYm9vbGVhbiB3ZWJraXRTb3VwSHR0cElucHV0U3RyZWFtU2VuZEZp
bmlzaChXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtKiBodHRwc3RyZWFtLCBHQXN5bmNSZXN1bHQq
IHJlc3VsdCwgR0Vycm9yKiogZXJyb3IpOworCitTb3VwTWVzc2FnZSogd2Via2l0U291cEh0dHBJ
bnB1dFN0cmVhbUdldE1lc3NhZ2UoV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSogaHR0cHN0cmVh
bSk7CisKK0dfRU5EX0RFQ0xTCisKK30KKworI2VuZGlmIC8qIHdlYmtpdHNvdXBodHRwaW5wdXRz
dHJlYW1faCAqLwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvd2Vi
a2l0c291cHJlcXVlc3QuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvd2Via2l0
c291cHJlcXVlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyZTg4
MTEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJr
aXRzb3VwcmVxdWVzdC5jcHAKQEAgLTAsMCArMSwyNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTEx
LTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAid2Via2l0
c291cHJlcXVlc3QuaCIKKworI2luY2x1ZGUgPGdsaWIvZ2kxOG4uaD4KKyNpbmNsdWRlIDxsaWJz
b3VwL3NvdXAtc2Vzc2lvbi5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC11cmkuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisvKioKKyAqIFNFQ1RJT046c291cC1yZXF1ZXN0CisgKiBAc2hv
cnRfZGVzY3JpcHRpb246IFByb3RvY29sLWluZGVwZW5kZW50IHN0cmVhbWluZyByZXF1ZXN0IGlu
dGVyZmFjZQorICoKKyAqIEZJWE1FCisgKiovCisKKy8qKgorICogV2ViS2l0U291cFJlcXVlc3Q6
CisgKgorICogRklYTUUKKyAqCisgKiBTaW5jZTogMi4zMAorICoqLworCitzdGF0aWMgdm9pZCB3
ZWJraXRfc291cF9yZXF1ZXN0X2luaXRhYmxlX2ludGVyZmFjZV9pbml0KEdJbml0YWJsZUlmYWNl
KiBpbml0YWJsZUludGVyZmFjZSk7CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdFNv
dXBSZXF1ZXN0LCB3ZWJraXRfc291cF9yZXF1ZXN0LCBHX1RZUEVfT0JKRUNULAorICAgICAgICAg
ICAgICAgICAgICAgICAgR19JTVBMRU1FTlRfSU5URVJGQUNFKEdfVFlQRV9JTklUQUJMRSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJraXRfc291cF9y
ZXF1ZXN0X2luaXRhYmxlX2ludGVyZmFjZV9pbml0KSkKKworZW51bSB7CisgICAgUFJPUF8wLAor
ICAgIFBST1BfVVJJLAorICAgIFBST1BfU0VTU0lPTgorfTsKKworc3RydWN0IF9XZWJLaXRTb3Vw
UmVxdWVzdFByaXZhdGUgeworICAgIFNvdXBVUkkqIHVyaTsKKyAgICBTb3VwU2Vzc2lvbiogc2Vz
c2lvbjsKKworfTsKKworc3RhdGljIHZvaWQgd2Via2l0X3NvdXBfcmVxdWVzdF9pbml0KFdlYktp
dFNvdXBSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIHJlcXVlc3QtPnByaXYgPSBHX1RZUEVfSU5T
VEFOQ0VfR0VUX1BSSVZBVEUocmVxdWVzdCwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNULCBXZWJL
aXRTb3VwUmVxdWVzdFByaXZhdGUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfc291cF9yZXF1
ZXN0X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRTb3VwUmVxdWVzdCog
cmVxdWVzdCA9IFdFQktJVF9TT1VQX1JFUVVFU1Qob2JqZWN0KTsKKworICAgIGlmIChyZXF1ZXN0
LT5wcml2LT51cmkpCisgICAgICAgIHNvdXBfdXJpX2ZyZWUocmVxdWVzdC0+cHJpdi0+dXJpKTsK
KyAgICBpZiAocmVxdWVzdC0+cHJpdi0+c2Vzc2lvbikKKyAgICAgICAgZ19vYmplY3RfdW5yZWYo
cmVxdWVzdC0+cHJpdi0+c2Vzc2lvbik7CisKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfc291
cF9yZXF1ZXN0X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdFNvdXBSZXF1ZXN0U2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBw
cm9wSWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdl
YktpdFNvdXBSZXF1ZXN0KiByZXF1ZXN0ID0gV0VCS0lUX1NPVVBfUkVRVUVTVChvYmplY3QpOwor
CisgICAgc3dpdGNoIChwcm9wSWQpIHsKKyAgICBjYXNlIFBST1BfVVJJOgorICAgICAgICBpZiAo
cmVxdWVzdC0+cHJpdi0+dXJpKQorICAgICAgICAgICAgc291cF91cmlfZnJlZShyZXF1ZXN0LT5w
cml2LT51cmkpOworICAgICAgICByZXF1ZXN0LT5wcml2LT51cmkgPSAoU291cFVSSSopZ192YWx1
ZV9kdXBfYm94ZWQodmFsdWUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0VTU0lP
TjoKKyAgICAgICAgaWYgKHJlcXVlc3QtPnByaXYtPnNlc3Npb24pCisgICAgICAgICAgICBnX29i
amVjdF91bnJlZihyZXF1ZXN0LT5wcml2LT5zZXNzaW9uKTsKKyAgICAgICAgcmVxdWVzdC0+cHJp
di0+c2Vzc2lvbiA9IChTb3VwU2Vzc2lvbiopZ192YWx1ZV9kdXBfb2JqZWN0KHZhbHVlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElE
X1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcElkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0U291cFJlcXVlc3RHZXRQcm9wZXJ0eShHT2JqZWN0
KiBvYmplY3QsIGd1aW50IHByb3BJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMp
Cit7CisgICAgV2ViS2l0U291cFJlcXVlc3QqIHJlcXVlc3QgPSBXRUJLSVRfU09VUF9SRVFVRVNU
KG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BJZCkgeworICAgIGNhc2UgUFJPUF9VUkk6Cisg
ICAgICAgIGdfdmFsdWVfc2V0X2JveGVkKHZhbHVlLCByZXF1ZXN0LT5wcml2LT51cmkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0VTU0lPTjoKKyAgICAgICAgZ192YWx1ZV9zZXRf
b2JqZWN0KHZhbHVlLCByZXF1ZXN0LT5wcml2LT5zZXNzaW9uKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9i
amVjdCwgcHJvcElkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGlj
IGdib29sZWFuIHdlYmtpdF9zb3VwX3JlcXVlc3RfaW5pdGFibGVfaW5pdChHSW5pdGFibGUqIGlu
aXRhYmxlLCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAg
ICBXZWJLaXRTb3VwUmVxdWVzdCogcmVxdWVzdCA9IFdFQktJVF9TT1VQX1JFUVVFU1QoaW5pdGFi
bGUpOworICAgIGdib29sZWFuIG9rOworCisgICAgaWYgKCFyZXF1ZXN0LT5wcml2LT51cmkpIHsK
KyAgICAgICAgZ19zZXRfZXJyb3IoZXJyb3IsIFdFQktJVF9TT1VQX0VSUk9SLCBXRUJLSVRfU09V
UF9FUlJPUl9CQURfVVJJLAorICAgICAgICAgICAgICAgICAgICBfKCJObyBVUkkgcHJvdmlkZWQi
KSk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBvayA9IFdFQktJVF9TT1VQ
X1JFUVVFU1RfR0VUX0NMQVNTKGluaXRhYmxlKS0+Y2hlY2tVcmkocmVxdWVzdCwgcmVxdWVzdC0+
cHJpdi0+dXJpLCBlcnJvcik7CisKKyAgICBpZiAoIW9rICYmIGVycm9yKSB7CisgICAgICAgIGdj
aGFyKiB1cmlTdHJpbmcgPSBzb3VwX3VyaV90b19zdHJpbmcocmVxdWVzdC0+cHJpdi0+dXJpLCBG
QUxTRSk7CisgICAgICAgIGdfc2V0X2Vycm9yKGVycm9yLCBXRUJLSVRfU09VUF9FUlJPUiwgV0VC
S0lUX1NPVVBfRVJST1JfQkFEX1VSSSwKKyAgICAgICAgICAgICAgICAgICAgXygiSW52YWxpZCAn
JXMnIFVSSTogJXMiKSwKKyAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC0+cHJpdi0+dXJpLT5z
Y2hlbWUsCisgICAgICAgICAgICAgICAgICAgIHVyaVN0cmluZyk7CisgICAgICAgIGdfZnJlZSh1
cmlTdHJpbmcpOworICAgIH0KKworICAgIHJldHVybiBvazsKK30KKworc3RhdGljIGdib29sZWFu
IHdlYmtpdFNvdXBSZXF1ZXN0RGVmYXVsdENoZWNrVXJpKFdlYktpdFNvdXBSZXF1ZXN0KiByZXF1
ZXN0LCBTb3VwVVJJKiB1cmksIEdFcnJvcioqIGVycm9yKQoreworICAgIHJldHVybiBUUlVFOwor
fQorCisvKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uOiBhc3N1bWUgdGhlIHN5bmMgaW1wbGVtZW50
YXRpb24gZG9lc24ndCBibG9jayAqLworc3RhdGljIHZvaWQgd2Via2l0U291cFJlcXVlc3REZWZh
dWx0U2VuZEFzeW5jKFdlYktpdFNvdXBSZXF1ZXN0KiByZXF1ZXN0LCBHQ2FuY2VsbGFibGUqIGNh
bmNlbGxhYmxlLCBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLCBncG9pbnRlciB1c2VyRGF0
YSkKK3sKKyAgICBHU2ltcGxlQXN5bmNSZXN1bHQqIHNpbXBsZTsKKworICAgIHNpbXBsZSA9IGdf
c2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcoR19PQkpFQ1QocmVxdWVzdCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaywgdXNlckRhdGEsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ3BvaW50ZXIpd2Via2l0U291cFJlcXVlc3RE
ZWZhdWx0U2VuZEFzeW5jKTsKKyAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGVfaW5f
aWRsZShzaW1wbGUpOworICAgIGdfb2JqZWN0X3VucmVmKHNpbXBsZSk7Cit9CisKK3N0YXRpYyBH
SW5wdXRTdHJlYW0gKiB3ZWJraXRTb3VwUmVxdWVzdERlZmF1bHRTZW5kRmluaXNoKFdlYktpdFNv
dXBSZXF1ZXN0KiByZXF1ZXN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgR0Vycm9yKiogZXJyb3Ip
Cit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2lzX3Zh
bGlkKHJlc3VsdCwgR19PQkpFQ1QocmVxdWVzdCksIChncG9pbnRlcil3ZWJraXRTb3VwUmVxdWVz
dERlZmF1bHRTZW5kQXN5bmMpLCAwKTsKKworICAgIHJldHVybiB3ZWJraXRTb3VwUmVxdWVzdFNl
bmQocmVxdWVzdCwgMCwgZXJyb3IpOworfQorCitHSW5wdXRTdHJlYW0gKiB3ZWJraXRTb3VwUmVx
dWVzdFNlbmQoV2ViS2l0U291cFJlcXVlc3QqIHJlcXVlc3QsIEdDYW5jZWxsYWJsZSogY2FuY2Vs
bGFibGUsIEdFcnJvcioqIGVycm9yKQoreworICAgIHJldHVybiBXRUJLSVRfU09VUF9SRVFVRVNU
X0dFVF9DTEFTUyhyZXF1ZXN0KS0+c2VuZChyZXF1ZXN0LCBjYW5jZWxsYWJsZSwgZXJyb3IpOwor
fQorCit2b2lkIHdlYmtpdFNvdXBSZXF1ZXN0U2VuZEFzeW5jKFdlYktpdFNvdXBSZXF1ZXN0KiBy
ZXF1ZXN0LCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlLCBHQXN5bmNSZWFkeUNhbGxiYWNrIGNh
bGxiYWNrLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBXRUJLSVRfU09VUF9SRVFVRVNUX0dF
VF9DTEFTUyhyZXF1ZXN0KS0+c2VuZEFzeW5jKHJlcXVlc3QsIGNhbmNlbGxhYmxlLCBjYWxsYmFj
aywgdXNlckRhdGEpOworfQorCitHSW5wdXRTdHJlYW0qIHdlYmtpdFNvdXBSZXF1ZXN0U2VuZEZp
bmlzaChXZWJLaXRTb3VwUmVxdWVzdCogcmVxdWVzdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIEdF
cnJvcioqIGVycm9yKQoreworICAgIHJldHVybiBXRUJLSVRfU09VUF9SRVFVRVNUX0dFVF9DTEFT
UyhyZXF1ZXN0KS0+c2VuZEZpbmlzaChyZXF1ZXN0LCByZXN1bHQsIGVycm9yKTsKK30KKworc3Rh
dGljIHZvaWQgd2Via2l0X3NvdXBfcmVxdWVzdF9jbGFzc19pbml0KFdlYktpdFNvdXBSZXF1ZXN0
Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iamVjdENsYXNzID0g
R19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJp
dmF0ZShyZXF1ZXN0Q2xhc3MsIHNpemVvZihXZWJLaXRTb3VwUmVxdWVzdFByaXZhdGUpKTsKKwor
ICAgIHJlcXVlc3RDbGFzcy0+Y2hlY2tVcmkgPSB3ZWJraXRTb3VwUmVxdWVzdERlZmF1bHRDaGVj
a1VyaTsKKyAgICByZXF1ZXN0Q2xhc3MtPnNlbmRBc3luYyA9IHdlYmtpdFNvdXBSZXF1ZXN0RGVm
YXVsdFNlbmRBc3luYzsKKyAgICByZXF1ZXN0Q2xhc3MtPnNlbmRGaW5pc2ggPSB3ZWJraXRTb3Vw
UmVxdWVzdERlZmF1bHRTZW5kRmluaXNoOworCisgICAgb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0g
d2Via2l0X3NvdXBfcmVxdWVzdF9maW5hbGl6ZTsKKyAgICBvYmplY3RDbGFzcy0+c2V0X3Byb3Bl
cnR5ID0gd2Via2l0U291cFJlcXVlc3RTZXRQcm9wZXJ0eTsKKyAgICBvYmplY3RDbGFzcy0+Z2V0
X3Byb3BlcnR5ID0gd2Via2l0U291cFJlcXVlc3RHZXRQcm9wZXJ0eTsKKworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIG9iamVjdENsYXNzLCBQUk9QX1VSSSwK
KyAgICAgICAgZ19wYXJhbV9zcGVjX2JveGVkKFdFQktJVF9TT1VQX1JFUVVFU1RfVVJJLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIlVSSSIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiVGhlIHJlcXVlc3QgVVJJIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPVVBfVFlQ
RV9VUkksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoR1BhcmFtRmxhZ3MpKEdfUEFSQU1f
UkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpKTsKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBvYmplY3RDbGFzcywgUFJPUF9TRVNTSU9OLAor
ICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KFdFQktJVF9TT1VQX1JFUVVFU1RfU0VTU0lPTiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2Vzc2lvbiIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIlRoZSByZXF1ZXN0J3Mgc2Vzc2lvbiIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU09VUF9UWVBFX1NFU1NJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KEdQYXJhbUZsYWdzKShHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkp
KSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX3JlcXVlc3RfaW5pdGFibGVfaW50ZXJm
YWNlX2luaXQoR0luaXRhYmxlSWZhY2UqIGluaXRhYmxlSW50ZXJmYWNlKQoreworICAgIGluaXRh
YmxlSW50ZXJmYWNlLT5pbml0ID0gd2Via2l0X3NvdXBfcmVxdWVzdF9pbml0YWJsZV9pbml0Owor
fQorCitTb3VwVVJJKiB3ZWJraXRTb3VwUmVxdWVzdEdldFVyaShXZWJLaXRTb3VwUmVxdWVzdCog
cmVxdWVzdCkKK3sKKyAgICByZXR1cm4gcmVxdWVzdC0+cHJpdi0+dXJpOworfQorCitTb3VwU2Vz
c2lvbiogd2Via2l0U291cFJlcXVlc3RHZXRTZXNzaW9uKFdlYktpdFNvdXBSZXF1ZXN0KiByZXF1
ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT5zZXNzaW9uOworfQorCitnb2Zmc2V0
IHdlYmtpdFNvdXBSZXF1ZXN0R2V0Q29udGVudExlbmd0aChXZWJLaXRTb3VwUmVxdWVzdCogcmVx
dWVzdCkKK3sKKyAgICByZXR1cm4gV0VCS0lUX1NPVVBfUkVRVUVTVF9HRVRfQ0xBU1MocmVxdWVz
dCktPmdldENvbnRlbnRMZW5ndGgocmVxdWVzdCk7Cit9CisKK2NvbnN0IGNoYXIqIHdlYmtpdFNv
dXBSZXF1ZXN0R2V0Q29udGVudFR5cGUoV2ViS2l0U291cFJlcXVlc3QqIHJlcXVlc3QpCit7Cisg
ICAgcmV0dXJuIFdFQktJVF9TT1VQX1JFUVVFU1RfR0VUX0NMQVNTKHJlcXVlc3QpLT5nZXRDb250
ZW50VHlwZShyZXF1ZXN0KTsKK30KKworR1F1YXJrIHdlYmtpdFNvdXBFcnJvclF1YXJrKHZvaWQp
Cit7CisgICAgc3RhdGljIEdRdWFyayBlcnJvcjsKKworICAgIGlmICghZXJyb3IpCisgICAgICAg
IGVycm9yID0gZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcoIndlYmtpdF9zb3VwX2Vycm9yX3F1
YXJrIik7CisgICAgcmV0dXJuIGVycm9yOworfQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC93ZWJraXRzb3VwcmVxdWVzdC5oIGIvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvd2Via2l0c291cHJlcXVlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi45Y2I4NTU3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvd2Via2l0c291cHJlcXVlc3QuaApAQCAtMCwwICsxLDk1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAx
MCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLAorICog
Qm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiB3ZWJraXRzb3VwcmVx
dWVzdF9oCisjZGVmaW5lIHdlYmtpdHNvdXByZXF1ZXN0X2ggMQorCisjaW5jbHVkZSA8Z2lvL2dp
by5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC10eXBlcy5oPgorI2luY2x1ZGUgPHdlYmtpdC93
ZWJraXRkZWZpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR19CRUdJTl9ERUNMUwor
CisjZGVmaW5lIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVCAgICAgICAgICAgICh3ZWJraXRfc291
cF9yZXF1ZXN0X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1Qob2JqKSAg
ICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVf
U09VUF9SRVFVRVNULCBXZWJLaXRTb3VwUmVxdWVzdCkpCisjZGVmaW5lIFdFQktJVF9TT1VQX1JF
UVVFU1RfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCBX
RUJLSVRfVFlQRV9TT1VQX1JFUVVFU1QsIFdlYktpdFNvdXBSZXF1ZXN0Q2xhc3MpKQorI2RlZmlu
ZSBXRUJLSVRfU09VUF9JU19SRVFVRVNUKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVCkpCisjZGVmaW5lIFdFQktJ
VF9TT1VQX0lTX1JFUVVFU1RfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgo
a2xhc3MpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1QpKQorI2RlZmluZSBXRUJLSVRfU09VUF9S
RVFVRVNUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwg
V0VCS0lUX1RZUEVfU09VUF9SRVFVRVNULCBXZWJLaXRTb3VwUmVxdWVzdENsYXNzKSkKKwordHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0UHJpdmF0ZSBXZWJLaXRTb3VwUmVxdWVzdFBy
aXZhdGU7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBHT2JqZWN0IHBhcmVudDsKKworICAgIFdl
YktpdFNvdXBSZXF1ZXN0UHJpdmF0ZSogcHJpdjsKK30gV2ViS2l0U291cFJlcXVlc3Q7CisKKwor
I2RlZmluZSBXRUJLSVRfU09VUF9FUlJPUiB3ZWJraXRTb3VwRXJyb3JRdWFyaygpCitHUXVhcmsg
d2Via2l0U291cEVycm9yUXVhcmsodm9pZCk7CisKK3R5cGVkZWYgZW51bSB7CisgICAgV0VCS0lU
X1NPVVBfRVJST1JfQkFEX1VSSSwKKyAgICBXRUJLSVRfU09VUF9FUlJPUl9VTlNVUFBPUlRFRF9V
UklfU0NIRU1FCit9IFdlYktpdFNvdXBFcnJvcjsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIEdP
YmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgICBnYm9vbGVhbiAoKiBjaGVja1VyaSkoV2Vi
S2l0U291cFJlcXVlc3QqIHJlcV9iYXNlLCBTb3VwVVJJKiB1cmksIEdFcnJvcioqIGVycm9yKTsK
KworICAgIEdJbnB1dFN0cmVhbSogKCpzZW5kKShXZWJLaXRTb3VwUmVxdWVzdCogcmVxdWVzdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yKiogZXJyb3IpOworICAgIHZvaWQgKCogc2Vu
ZEFzeW5jKShXZWJLaXRTb3VwUmVxdWVzdCogcmVxdWVzdCwKKwkJICAgICAgIEdDYW5jZWxsYWJs
ZSogY2FuY2VsbGFibGUsCisJCSAgICAgICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAor
CQkgICAgICAgZ3BvaW50ZXIgdXNlckRhdGEpOworICAgIEdJbnB1dFN0cmVhbSogKCpzZW5kRmlu
aXNoKShXZWJLaXRTb3VwUmVxdWVzdCogcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdBc3luY1Jlc3VsdCogcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0Vycm9yKiogZXJyb3IpOworCisgICAgZ29mZnNldCAoKiBnZXRDb250ZW50TGVu
Z3RoKShXZWJLaXRTb3VwUmVxdWVzdCogcmVxdWVzdCk7CisgICAgY29uc3QgY2hhciogICAoKiBn
ZXRDb250ZW50VHlwZSkoV2ViS2l0U291cFJlcXVlc3QgICAqcmVxdWVzdCk7Cit9IFdlYktpdFNv
dXBSZXF1ZXN0Q2xhc3M7CisKK0dUeXBlIHdlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X3R5cGUodm9p
ZCk7CisKKyNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9VUkkgICAgICJ1cmkiCisjZGVmaW5l
IFdFQktJVF9TT1VQX1JFUVVFU1RfU0VTU0lPTiAic2Vzc2lvbiIKKworR0lucHV0U3RyZWFtKiB3
ZWJraXRTb3VwUmVxdWVzdFNlbmQoV2ViS2l0U291cFJlcXVlc3QqIHJlcXVlc3QsIEdDYW5jZWxs
YWJsZSogY2FuY2VsbGFibGUsIEdFcnJvcioqIGVycm9yKTsKK3ZvaWQgd2Via2l0U291cFJlcXVl
c3RTZW5kQXN5bmMoV2ViS2l0U291cFJlcXVlc3QqIHJlcXVlc3QsIEdDYW5jZWxsYWJsZSogY2Fu
Y2VsbGFibGUsIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJEYXRh
KTsKK0dJbnB1dFN0cmVhbSogd2Via2l0U291cFJlcXVlc3RTZW5kRmluaXNoKFdlYktpdFNvdXBS
ZXF1ZXN0KiByZXF1ZXN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgR0Vycm9yKiogZXJyb3IpOwor
CitTb3VwVVJJKiB3ZWJraXRTb3VwUmVxdWVzdEdldFVyaShXZWJLaXRTb3VwUmVxdWVzdCogcmVx
dWVzdCk7CitTb3VwU2Vzc2lvbiogd2Via2l0U291cFJlcXVlc3RHZXRTZXNzaW9uKFdlYktpdFNv
dXBSZXF1ZXN0KiByZXF1ZXN0KTsKKworZ29mZnNldCB3ZWJraXRTb3VwUmVxdWVzdEdldENvbnRl
bnRMZW5ndGgoV2ViS2l0U291cFJlcXVlc3QqIHJlcXVlc3QpOworY29uc3QgY2hhciogd2Via2l0
U291cFJlcXVlc3RHZXRDb250ZW50VHlwZShXZWJLaXRTb3VwUmVxdWVzdCogcmVxdWVzdCk7CisK
K0dfRU5EX0RFQ0xTCisKK30KKworI2VuZGlmIC8qIHdlYmtpdHNvdXByZXF1ZXN0X2ggKi8KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL3dlYmtpdHNvdXByZXF1ZXN0
ZGF0YS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJraXRzb3VwcmVxdWVz
dGRhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MjJmNTAKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJraXRzb3Vw
cmVxdWVzdGRhdGEuY3BwCkBAIC0wLDAgKzEsMTk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0x
MzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIndlYmtpdHNv
dXByZXF1ZXN0ZGF0YS5oIgorCisjaW5jbHVkZSA8Z2xpYi9naTE4bi5oPgorI2luY2x1ZGUgPGlv
c3RyZWFtPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC1zZXNzaW9uLmg+CisjaW5jbHVkZSA8bGli
c291cC9zb3VwLXVyaS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dfREVGSU5FX1RZUEUo
V2ViS2l0U291cFJlcXVlc3REYXRhLCB3ZWJraXRfc291cF9yZXF1ZXN0X2RhdGEsIFdFQktJVF9U
WVBFX1NPVVBfUkVRVUVTVCkKKworc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdERhdGFQcml2YXRl
IHsKKyAgICBnc2l6ZSBjb250ZW50TGVuZ3RoOworICAgIGNoYXIqIGNvbnRlbnRUeXBlOworfTsK
Kworc3RhdGljIHZvaWQgd2Via2l0X3NvdXBfcmVxdWVzdF9kYXRhX2luaXQoV2ViS2l0U291cFJl
cXVlc3REYXRhKiBkYXRhKQoreworICAgIGRhdGEtPnByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VU
X1BSSVZBVEUoZGF0YSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0RBVEEsIFdlYktpdFNvdXBS
ZXF1ZXN0RGF0YVByaXZhdGUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfc291cF9yZXF1ZXN0
X2RhdGFfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdFNvdXBSZXF1ZXN0
RGF0YSogZGF0YSA9IFdFQktJVF9TT1VQX1JFUVVFU1RfREFUQShvYmplY3QpOworCisgICAgZ19m
cmVlKGRhdGEtPnByaXYtPmNvbnRlbnRUeXBlKTsKKworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtp
dF9zb3VwX3JlcXVlc3RfZGF0YV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQor
CitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0U291cFJlcXVlc3REYXRhQ2hlY2tVcmkoV2ViS2l0U291
cFJlcXVlc3QqIHJlcXVlc3QsIFNvdXBVUkkqIHVyaSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAg
cmV0dXJuICF1cmktPmhvc3Q7Cit9CisKKyNkZWZpbmUgWERJR0lUKGMpICgoYykgPD0gJzknID8g
KGMpIC0gJzAnIDogKChjKSAmIDB4NEYpIC0gJ0EnICsgMTApCisjZGVmaW5lIEhFWENIQVIocykg
KChYRElHSVQoc1sxXSkgPDwgNCkgKyBYRElHSVQoc1syXSkpCisKK3N0YXRpYyBjaGFyICogdXJp
RGVjb2RlZENvcHkoY29uc3QgY2hhciogcGFydCwgaW50IGxlbmd0aCwgZ2Jvb2xlYW4gZml4dXAp
Cit7CisgICAgdW5zaWduZWQgY2hhciogcywgKiBkOworICAgIGNoYXIqIGRlY29kZWQgPSBnX3N0
cm5kdXAocGFydCwgbGVuZ3RoKTsKKworICAgIHMgPSBkID0gKHVuc2lnbmVkIGNoYXIqKWRlY29k
ZWQ7CisgICAgZG8geworICAgICAgICBpZiAoKnMgPT0gJyUnKSB7CisgICAgICAgICAgICBpZiAo
IWdfYXNjaWlfaXN4ZGlnaXQoc1sxXSkKKyAgICAgICAgICAgICAgICB8fCAhZ19hc2NpaV9pc3hk
aWdpdChzWzJdKSkgeworICAgICAgICAgICAgICAgIGlmICghZml4dXApIHsKKyAgICAgICAgICAg
ICAgICAgICAgZ19mcmVlKGRlY29kZWQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKmQrKyA9ICpzOworICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKmQrKyA9IEhFWENI
QVIocyk7CisgICAgICAgICAgICBzICs9IDI7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
KmQrKyA9ICpzOworICAgIH0gd2hpbGUgKCpzKyspOworCisgICAgcmV0dXJuIGRlY29kZWQ7Cit9
CisKK3N0YXRpYyBHSW5wdXRTdHJlYW0qIHdlYmtpdFNvdXBSZXF1ZXN0RGF0YVNlbmQoV2ViS2l0
U291cFJlcXVlc3QqIHJlcXVlc3QsIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUsIEdFcnJvcioq
IGVycm9yKQoreworICAgIFdlYktpdFNvdXBSZXF1ZXN0RGF0YSogZGF0YSA9IFdFQktJVF9TT1VQ
X1JFUVVFU1RfREFUQShyZXF1ZXN0KTsKKyAgICBTb3VwVVJJKiB1cmkgPSB3ZWJraXRTb3VwUmVx
dWVzdEdldFVyaShyZXF1ZXN0KTsKKyAgICBHSW5wdXRTdHJlYW0qIG1lbXN0cmVhbTsKKyAgICBj
b25zdCBjaGFyKiBjb21tYSwgKiBzZW1pLCAqIHN0YXJ0LCAqIGVuZDsKKyAgICBnYm9vbGVhbiBi
YXNlNjQgPSBGQUxTRTsKKworICAgIGdjaGFyKiB1cmlzdHIgPSBzb3VwX3VyaV90b19zdHJpbmco
dXJpLCBGQUxTRSk7CisKKyAgICBjb21tYSA9IHN0cmNocih1cmlzdHIsICcsJyk7CisgICAgaWYg
KGNvbW1hICYmIGNvbW1hICE9IHVyaXN0cikgeworICAgICAgICAvKiBEZWFsIHdpdGggTUlNRSB0
eXBlIC8gcGFyYW1zICovCisgICAgICAgIHNlbWkgPSAoY29uc3QgY2hhciopbWVtY2hyKHVyaXN0
ciwgJzsnLCBjb21tYSAtIHVyaXN0cik7CisgICAgICAgIGVuZCA9IHNlbWkgPyBzZW1pIDogY29t
bWE7CisKKyAgICAgICAgaWYgKGVuZCAhPSB1cmlzdHIpCisgICAgICAgICAgICBkYXRhLT5wcml2
LT5jb250ZW50VHlwZSA9IHVyaURlY29kZWRDb3B5KHVyaXN0ciwgZW5kIC0gdXJpc3RyLCBUUlVF
KTsKKworICAgICAgICBpZiAoc2VtaSAmJiAhZ19hc2NpaV9zdHJuY2FzZWNtcChzZW1pLCAiO2Jh
c2U2NCIsIHN0ZDo6bWF4KChjb21tYSAtIHNlbWkpLCAoaW50KXN0cmxlbigiO2Jhc2U2NCIpKSkp
CisgICAgICAgICAgICBiYXNlNjQgPSBUUlVFOworICAgIH0KKworICAgIG1lbXN0cmVhbSA9IGdf
bWVtb3J5X2lucHV0X3N0cmVhbV9uZXcoKTsKKworICAgIHN0YXJ0ID0gY29tbWEgPyBjb21tYSAr
IDEgOiB1cmlzdHI7CisKKyAgICBpZiAoKnN0YXJ0KSB7CisgICAgICAgIGd1Y2hhciogYnVmOwor
CisgICAgICAgIGlmIChiYXNlNjQpIHsKKyAgICAgICAgICAgIGludCBpbmxlbiwgc3RhdGUgPSAw
OworICAgICAgICAgICAgZ3VpbnQgc2F2ZSA9IDA7CisgICAgICAgICAgICBjaGFyKiB1bmVzY2Fw
ZWQ7CisKKyAgICAgICAgICAgIGlmIChzdHJjaHIoc3RhcnQsICclJykpIHsKKyAgICAgICAgICAg
ICAgICBzdGFydCA9IHVuZXNjYXBlZCA9IHVyaURlY29kZWRDb3B5KHN0YXJ0LCBzdHJsZW4oc3Rh
cnQpLCBUUlVFKTsKKyAgICAgICAgICAgICAgICBpZiAoIXVuZXNjYXBlZCkKKyAgICAgICAgICAg
ICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAg
dW5lc2NhcGVkID0gMDsKKworICAgICAgICAgICAgaW5sZW4gPSBzdHJsZW4oc3RhcnQpOworICAg
ICAgICAgICAgYnVmID0gKGd1Y2hhciopZ19tYWxsb2MoaW5sZW4gKiAzIC8gNCk7CisgICAgICAg
ICAgICBkYXRhLT5wcml2LT5jb250ZW50TGVuZ3RoID0KKyAgICAgICAgICAgICAgICBnX2Jhc2U2
NF9kZWNvZGVfc3RlcChzdGFydCwgaW5sZW4sIGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmc3RhdGUsICZzYXZlKTsKKyAgICAgICAgICAgIGdfZnJlZSh1bmVzY2Fw
ZWQpOworICAgICAgICAgICAgaWYgKHN0YXRlKSB7CisgICAgICAgICAgICAgICAgZ19mcmVlKGJ1
Zik7CisgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgLyogQ2Fubm90IHVzZSBnX3VyaV91bmVzY2FwZV9zdHJpbmcg
bm9yCisgICAgICAgICAgICAgICBzb3VwX3VyaV9kZWNvZGUgYmVjYXVzZSB3ZSBkb24ndCB3YW50
IHRvCisgICAgICAgICAgICAgICBmYWlsIGZvciB0aGluZ3MgbGlrZSAiJTNFJSUzQyIgLT4gIj4l
PCIgKi8KKyAgICAgICAgICAgIGJ1ZiA9IChndWNoYXIqKSB1cmlEZWNvZGVkQ29weShzdGFydCwg
c3RybGVuKHN0YXJ0KSwgVFJVRSk7CisgICAgICAgICAgICBpZiAoIWJ1ZikKKyAgICAgICAgICAg
ICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICBkYXRhLT5wcml2LT5jb250ZW50TGVuZ3RoID0g
c3RybGVuKChjaGFyKilidWYpOworICAgICAgICB9CisKKyAgICAgICAgZ19tZW1vcnlfaW5wdXRf
c3RyZWFtX2FkZF9kYXRhKEdfTUVNT1JZX0lOUFVUX1NUUkVBTShtZW1zdHJlYW0pLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCBkYXRhLT5wcml2LT5jb250ZW50
TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19mcmVlKTsK
KyAgICB9CisgICAgZ19mcmVlKHVyaXN0cik7CisKKyAgICByZXR1cm4gbWVtc3RyZWFtOworCitm
YWlsOgorICAgIGdfZnJlZSh1cmlzdHIpOworICAgIGdfc2V0X2Vycm9yKGVycm9yLCBXRUJLSVRf
U09VUF9FUlJPUiwgV0VCS0lUX1NPVVBfRVJST1JfQkFEX1VSSSwKKyAgICAgICAgICAgICAgICBf
KCJVbmFibGUgdG8gZGVjb2RlIFVSSTogJXMiKSwgc3RhcnQpOworICAgIGdfb2JqZWN0X3VucmVm
KG1lbXN0cmVhbSk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBnb2Zmc2V0IHdlYmtpdFNv
dXBSZXF1ZXN0RGF0YUdldENvbnRlbnRMZW5ndGgoV2ViS2l0U291cFJlcXVlc3QqIHJlcXVlc3Qp
Cit7CisgICAgV2ViS2l0U291cFJlcXVlc3REYXRhKiBkYXRhID0gV0VCS0lUX1NPVVBfUkVRVUVT
VF9EQVRBKHJlcXVlc3QpOworCisgICAgcmV0dXJuIGRhdGEtPnByaXYtPmNvbnRlbnRMZW5ndGg7
Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICogd2Via2l0U291cFJlcXVlc3REYXRhR2V0Q29udGVu
dFR5cGUoV2ViS2l0U291cFJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0U291cFJlcXVl
c3REYXRhKiBkYXRhID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9EQVRBKHJlcXVlc3QpOworCisgICAg
cmV0dXJuIGRhdGEtPnByaXYtPmNvbnRlbnRUeXBlOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
c291cF9yZXF1ZXN0X2RhdGFfY2xhc3NfaW5pdChXZWJLaXRTb3VwUmVxdWVzdERhdGFDbGFzcyog
cmVxdWVzdF9kYXRhX2NsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogb2JqZWN0X2NsYXNzID0g
R19PQkpFQ1RfQ0xBU1MocmVxdWVzdF9kYXRhX2NsYXNzKTsKKyAgICBXZWJLaXRTb3VwUmVxdWVz
dENsYXNzKiByZXF1ZXN0X2NsYXNzID0KKyAgICAgICAgV0VCS0lUX1NPVVBfUkVRVUVTVF9DTEFT
UyhyZXF1ZXN0X2RhdGFfY2xhc3MpOworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKHJl
cXVlc3RfZGF0YV9jbGFzcywgc2l6ZW9mKFdlYktpdFNvdXBSZXF1ZXN0RGF0YVByaXZhdGUpKTsK
KworICAgIG9iamVjdF9jbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFf
ZmluYWxpemU7CisKKyAgICByZXF1ZXN0X2NsYXNzLT5jaGVja1VyaSA9IHdlYmtpdFNvdXBSZXF1
ZXN0RGF0YUNoZWNrVXJpOworICAgIHJlcXVlc3RfY2xhc3MtPnNlbmQgPSB3ZWJraXRTb3VwUmVx
dWVzdERhdGFTZW5kOworICAgIHJlcXVlc3RfY2xhc3MtPmdldENvbnRlbnRMZW5ndGggPSB3ZWJr
aXRTb3VwUmVxdWVzdERhdGFHZXRDb250ZW50TGVuZ3RoOworICAgIHJlcXVlc3RfY2xhc3MtPmdl
dENvbnRlbnRUeXBlID0gd2Via2l0U291cFJlcXVlc3REYXRhR2V0Q29udGVudFR5cGU7Cit9CisK
K30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL3dlYmtpdHNvdXBy
ZXF1ZXN0ZGF0YS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvd2Via2l0c291cHJl
cXVlc3RkYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZlYmEzMAot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL3dlYmtpdHNv
dXByZXF1ZXN0ZGF0YS5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEz
MDcsIFVTQS4KKyAqLworCisjaWZuZGVmIHdlYmtpdHNvdXByZXF1ZXN0ZGF0YV9oCisjZGVmaW5l
IHdlYmtpdHNvdXByZXF1ZXN0ZGF0YV9oIDEKKworI2luY2x1ZGUgIndlYmtpdHNvdXByZXF1ZXN0
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2RlZmluZSBXRUJLSVRfVFlQRV9TT1VQX1JF
UVVFU1RfREFUQSAgICAgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFfZ2V0X3R5cGUg
KCkpCisjZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfREFUQShvYmplY3QpICAgICAgICAgKEdf
VFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqZWN0KSwgV0VCS0lUX1RZUEVfU09VUF9SRVFV
RVNUX0RBVEEsIFdlYktpdFNvdXBSZXF1ZXN0RGF0YSkpCisjZGVmaW5lIFdFQktJVF9TT1VQX1JF
UVVFU1RfREFUQV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xh
c3MpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfREFUQSwgV2ViS2l0U291cFJlcXVlc3REYXRh
Q2xhc3MpKQorI2RlZmluZSBXRUJLSVRfU09VUF9JU19SRVFVRVNUX0RBVEEob2JqZWN0KSAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iamVjdCksIFdFQktJVF9UWVBFX1NPVVBf
UkVRVUVTVF9EQVRBKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfSVNfUkVRVUVTVF9EQVRBX0NMQVNT
KGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIFdFQktJVF9UWVBFX1NP
VVBfUkVRVUVTVF9EQVRBKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9EQVRBX0dFVF9D
TEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIFdFQktJVF9UWVBF
X1NPVVBfUkVRVUVTVF9EQVRBLCBXZWJLaXRTb3VwUmVxdWVzdERhdGFDbGFzcykpCisKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdERhdGFQcml2YXRlIFdlYktpdFNvdXBSZXF1ZXN0
RGF0YVByaXZhdGU7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICAgICAgV2ViS2l0U291cFJlcXVl
c3QgcGFyZW50OworCisgICAgICAgIFdlYktpdFNvdXBSZXF1ZXN0RGF0YVByaXZhdGUgKnByaXY7
Cit9IFdlYktpdFNvdXBSZXF1ZXN0RGF0YTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgICAgICBX
ZWJLaXRTb3VwUmVxdWVzdENsYXNzIHBhcmVudDsKKworfSBXZWJLaXRTb3VwUmVxdWVzdERhdGFD
bGFzczsKKworR1R5cGUgd2Via2l0X3NvdXBfcmVxdWVzdF9kYXRhX2dldF90eXBlKHZvaWQpOwor
Cit9CisKKyNlbmRpZiAvKiB3ZWJraXRzb3VwcmVxdWVzdGRhdGFfaCAqLwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvd2Via2l0c291cHJlcXVlc3Rlci5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJraXRzb3VwcmVxdWVzdGVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTY2NjNhCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvd2Via2l0c291cHJlcXVlc3Rlci5jcHAK
QEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIElnYWxpYSBTLkwu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAy
MTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAid2Vi
a2l0c291cHJlcXVlc3Rlci5oIgorCisjaW5jbHVkZSAid2Via2l0c291cHJlcXVlc3RkYXRhLmgi
CisjaW5jbHVkZSAid2Via2l0c291cHJlcXVlc3RmaWxlLmgiCisjaW5jbHVkZSAid2Via2l0c291
cHJlcXVlc3RodHRwLmgiCisjaW5jbHVkZSA8Z2xpYi9naTE4bi5oPgorI2luY2x1ZGUgPGxpYnNv
dXAvc291cC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAg
ICBHSGFzaFRhYmxlKiByZXF1ZXN0VHlwZXM7Cit9IFdlYktpdFNvdXBSZXF1ZXN0ZXJQcml2YXRl
OworCisjZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RFUl9HRVRfUFJJVkFURShvKSAoR19UWVBF
X0lOU1RBTkNFX0dFVF9QUklWQVRFKChvKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNURVIsIFdl
YktpdFNvdXBSZXF1ZXN0ZXJQcml2YXRlKSkKKworR19ERUZJTkVfVFlQRShXZWJLaXRTb3VwUmVx
dWVzdGVyLCB3ZWJraXRfc291cF9yZXF1ZXN0ZXIsIEdfVFlQRV9PQkpFQ1QpCisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9zb3VwX3JlcXVlc3Rlcl9pbml0KFdlYktpdFNvdXBSZXF1ZXN0ZXIqIHJlcXVl
c3RlcikKK3sKKyAgICBXZWJLaXRTb3VwUmVxdWVzdGVyUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9T
T1VQX1JFUVVFU1RFUl9HRVRfUFJJVkFURShyZXF1ZXN0ZXIpOworCisgICAgcHJpdi0+cmVxdWVz
dFR5cGVzID0gMDsKK30KKworc3RhdGljIHZvaWQgZmluYWxpemUoR09iamVjdCogb2JqZWN0KQor
eworICAgIFdlYktpdFNvdXBSZXF1ZXN0ZXIqIHJlcXVlc3RlciA9IFdFQktJVF9TT1VQX1JFUVVF
U1RFUihvYmplY3QpOworICAgIFdlYktpdFNvdXBSZXF1ZXN0ZXJQcml2YXRlKiBwcml2ID0gV0VC
S0lUX1NPVVBfUkVRVUVTVEVSX0dFVF9QUklWQVRFKHJlcXVlc3Rlcik7CisKKyAgICBpZiAocHJp
di0+cmVxdWVzdFR5cGVzKQorICAgICAgICBnX2hhc2hfdGFibGVfZGVzdHJveShwcml2LT5yZXF1
ZXN0VHlwZXMpOworCisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X3NvdXBfcmVxdWVzdGVyX3Bh
cmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9z
b3VwX3JlcXVlc3Rlcl9jbGFzc19pbml0KFdlYktpdFNvdXBSZXF1ZXN0ZXJDbGFzcyogcmVxdWVz
dGVyX2NsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogb2JqZWN0X2NsYXNzID0gR19PQkpFQ1Rf
Q0xBU1MocmVxdWVzdGVyX2NsYXNzKTsKKworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShy
ZXF1ZXN0ZXJfY2xhc3MsIHNpemVvZihXZWJLaXRTb3VwUmVxdWVzdGVyUHJpdmF0ZSkpOworCisg
ICAgLyogdmlydHVhbCBtZXRob2Qgb3ZlcnJpZGUgKi8KKyAgICBvYmplY3RfY2xhc3MtPmZpbmFs
aXplID0gZmluYWxpemU7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfcmVxdWVzdF90eXBlcyhXZWJL
aXRTb3VwUmVxdWVzdGVyUHJpdmF0ZSogcHJpdikKK3sKKyAgICBpZiAocHJpdi0+cmVxdWVzdFR5
cGVzKQorICAgICAgICByZXR1cm47CisKKyAgICBwcml2LT5yZXF1ZXN0VHlwZXMgPSBnX2hhc2hf
dGFibGVfbmV3X2Z1bGwoc291cF9zdHJfY2FzZV9oYXNoLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cF9zdHJfY2FzZV9lcXVhbCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfZnJlZSwgMCk7CisgICAg
Z19oYXNoX3RhYmxlX2luc2VydChwcml2LT5yZXF1ZXN0VHlwZXMsIGdfc3RyZHVwKCJmaWxlIiks
CisgICAgICAgICAgICAgICAgICAgICAgICBHU0laRV9UT19QT0lOVEVSKFdFQktJVF9UWVBFX1NP
VVBfUkVRVUVTVF9GSUxFKSk7CisgICAgZ19oYXNoX3RhYmxlX2luc2VydChwcml2LT5yZXF1ZXN0
VHlwZXMsIGdfc3RyZHVwKCJkYXRhIiksCisgICAgICAgICAgICAgICAgICAgICAgICBHU0laRV9U
T19QT0lOVEVSKFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9EQVRBKSk7CisgICAgZ19oYXNoX3Rh
YmxlX2luc2VydChwcml2LT5yZXF1ZXN0VHlwZXMsIGdfc3RyZHVwKCJodHRwIiksCisgICAgICAg
ICAgICAgICAgICAgICAgICBHU0laRV9UT19QT0lOVEVSKFdFQktJVF9UWVBFX1NPVVBfUkVRVUVT
VF9IVFRQKSk7CisgICAgZ19oYXNoX3RhYmxlX2luc2VydChwcml2LT5yZXF1ZXN0VHlwZXMsIGdf
c3RyZHVwKCJodHRwcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgR1NJWkVfVE9fUE9JTlRF
UihXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfSFRUUCkpOworICAgIGdfaGFzaF90YWJsZV9pbnNl
cnQocHJpdi0+cmVxdWVzdFR5cGVzLCBnX3N0cmR1cCgiZnRwIiksCisgICAgICAgICAgICAgICAg
ICAgICAgICBHU0laRV9UT19QT0lOVEVSKFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9GSUxFKSk7
Cit9CisKK1dlYktpdFNvdXBSZXF1ZXN0ZXIgKiB3ZWJraXRfc291cF9yZXF1ZXN0ZXJfbmV3KHZv
aWQpCit7CisgICAgcmV0dXJuIChXZWJLaXRTb3VwUmVxdWVzdGVyKikgZ19vYmplY3RfbmV3KFdF
QktJVF9UWVBFX1NPVVBfUkVRVUVTVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAwKTsKK30KKworV2ViS2l0U291cFJlcXVlc3QgKiB3ZWJraXRfc291
cF9yZXF1ZXN0ZXJfcmVxdWVzdChXZWJLaXRTb3VwUmVxdWVzdGVyKiByZXF1ZXN0ZXIsIGNvbnN0
IGNoYXIqIHVyaVN0cmluZywgU291cFNlc3Npb24qIHNlc3Npb24sIEdFcnJvcioqIGVycm9yKQor
eworICAgIFNvdXBVUkkqIHVyaSA9IHNvdXBfdXJpX25ldyh1cmlTdHJpbmcpOworICAgIFdlYktp
dFNvdXBSZXF1ZXN0KiByZXE7CisKKyAgICBpZiAoIXVyaSkgeworICAgICAgICBnX3NldF9lcnJv
cihlcnJvciwgV0VCS0lUX1NPVVBfRVJST1IsIFdFQktJVF9TT1VQX0VSUk9SX0JBRF9VUkksCisg
ICAgICAgICAgICAgICAgICAgIF8oIkNvdWxkIG5vdCBwYXJzZSBVUkkgJyVzJyIpLCB1cmlTdHJp
bmcpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXEgPSB3ZWJraXRfc291cF9y
ZXF1ZXN0ZXJfcmVxdWVzdF91cmkocmVxdWVzdGVyLCB1cmksIHNlc3Npb24sIGVycm9yKTsKKyAg
ICBzb3VwX3VyaV9mcmVlKHVyaSk7CisgICAgcmV0dXJuIHJlcTsKK30KKworV2ViS2l0U291cFJl
cXVlc3QgKiB3ZWJraXRfc291cF9yZXF1ZXN0ZXJfcmVxdWVzdF91cmkoV2ViS2l0U291cFJlcXVl
c3RlciogcmVxdWVzdGVyLCBTb3VwVVJJKiB1cmksIFNvdXBTZXNzaW9uKiBzZXNzaW9uLCBHRXJy
b3IqKiBlcnJvcikKK3sKKyAgICBXZWJLaXRTb3VwUmVxdWVzdGVyUHJpdmF0ZSogcHJpdjsKKyAg
ICBHVHlwZSByZXF1ZXN0VHlwZTsKKworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9J
U19TT1VQX1JFUVVFU1RFUihyZXF1ZXN0ZXIpLCAwKTsKKworICAgIHByaXYgPSBXRUJLSVRfU09V
UF9SRVFVRVNURVJfR0VUX1BSSVZBVEUocmVxdWVzdGVyKTsKKyAgICBpbml0X3JlcXVlc3RfdHlw
ZXMocHJpdik7CisgICAgcmVxdWVzdFR5cGUgPSAoR1R5cGUpIEdQT0lOVEVSX1RPX1NJWkUoZ19o
YXNoX3RhYmxlX2xvb2t1cChwcml2LT5yZXF1ZXN0VHlwZXMsIHVyaS0+c2NoZW1lKSk7CisgICAg
aWYgKCFyZXF1ZXN0VHlwZSkgeworICAgICAgICBnX3NldF9lcnJvcihlcnJvciwgV0VCS0lUX1NP
VVBfRVJST1IsIFdFQktJVF9TT1VQX0VSUk9SX1VOU1VQUE9SVEVEX1VSSV9TQ0hFTUUsCisgICAg
ICAgICAgICAgICAgICAgIF8oIlVuc3VwcG9ydGVkIFVSSSBzY2hlbWUgJyVzJyIpLCB1cmktPnNj
aGVtZSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmIChnX3R5cGVfaXNfYShy
ZXF1ZXN0VHlwZSwgR19UWVBFX0lOSVRBQkxFKSkgeworICAgICAgICByZXR1cm4gKFdlYktpdFNv
dXBSZXF1ZXN0KilnX2luaXRhYmxlX25ldyhyZXF1ZXN0VHlwZSwgMCwgZXJyb3IsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1cmkiLCB1cmksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXNzaW9u
Iiwgc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIChXZWJLaXRTb3VwUmVxdWVz
dCopZ19vYmplY3RfbmV3KHJlcXVlc3RUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInVyaSIsIHVyaSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJzZXNzaW9uIiwgc2Vzc2lvbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworICAgIH0KK30KKworfQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvd2Via2l0c291cHJlcXVl
c3Rlci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvd2Via2l0c291cHJlcXVlc3Rl
ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjN2JhNDUKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJraXRzb3VwcmVxdWVz
dGVyLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEg
Uy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLAorICogQm9zdG9uLCBN
QSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiB3ZWJraXRzb3VwcmVxdWVzdGVyX2gK
KyNkZWZpbmUgd2Via2l0c291cHJlcXVlc3Rlcl9oIDEKKworI2luY2x1ZGUgIndlYmtpdHNvdXBy
ZXF1ZXN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR19CRUdJTl9ERUNMUworCisjZGVm
aW5lIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVEVSICAgICAgICAgICAgKHdlYmtpdF9zb3VwX3Jl
cXVlc3Rlcl9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNURVIob2JqKSAg
ICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVf
U09VUF9SRVFVRVNURVIsIFdlYktpdFNvdXBSZXF1ZXN0ZXIpKQorI2RlZmluZSBXRUJLSVRfU09V
UF9SRVFVRVNURVJfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xh
c3MpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RFUiwgV2ViS2l0U291cFJlcXVlc3RlckNsYXNz
KSkKKyNkZWZpbmUgV0VCS0lUX0lTX1NPVVBfUkVRVUVTVEVSKG9iaikgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVEVSKSkK
KyNkZWZpbmUgV0VCS0lUX0lTX1NPVVBfUkVRVUVTVEVSX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NI
RUNLX0NMQVNTX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVEVSKSkKKyNkZWZp
bmUgV0VCS0lUX1NPVVBfUkVRVUVTVEVSX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNF
X0dFVF9DTEFTUygob2JqKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNURVIsIFdlYktpdFNvdXBS
ZXF1ZXN0ZXJDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBHT2JqZWN0IHBhcmVudDsK
K30gV2ViS2l0U291cFJlcXVlc3RlcjsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIEdPYmplY3RD
bGFzcyBwYXJlbnRfY2xhc3M7Cit9IFdlYktpdFNvdXBSZXF1ZXN0ZXJDbGFzczsKKworR1R5cGUg
d2Via2l0X3NvdXBfcmVxdWVzdGVyX2dldF90eXBlKHZvaWQpOworCitXZWJLaXRTb3VwUmVxdWVz
dGVyKiB3ZWJraXRfc291cF9yZXF1ZXN0ZXJfbmV3KHZvaWQpOworCitXZWJLaXRTb3VwUmVxdWVz
dCogd2Via2l0X3NvdXBfcmVxdWVzdGVyX3JlcXVlc3QoV2ViS2l0U291cFJlcXVlc3RlciogcmVx
dWVzdGVyLCBjb25zdCBjaGFyKiB1cmlTdHJpbmcsIFNvdXBTZXNzaW9uKiBzZXNzaW9uLCBHRXJy
b3IqKiBlcnJvcik7CitXZWJLaXRTb3VwUmVxdWVzdCogd2Via2l0X3NvdXBfcmVxdWVzdGVyX3Jl
cXVlc3RfdXJpKFdlYktpdFNvdXBSZXF1ZXN0ZXIqIHJlcXVlc3RlciwgU291cFVSSSogdXJpLCBT
b3VwU2Vzc2lvbiogc2Vzc2lvbiwgR0Vycm9yKiogZXJyb3IpOworCitHX0VORF9ERUNMUworCit9
CisKKyNlbmRpZiAvKiB3ZWJraXRzb3VwcmVxdWVzdGVyX2ggKi8KKwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvd2Via2l0c291cHJlcXVlc3RmaWxlLmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL3dlYmtpdHNvdXByZXF1ZXN0ZmlsZS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQyY2VjMAotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL3dlYmtpdHNvdXByZXF1ZXN0ZmlsZS5j
cHAKQEAgLTAsMCArMSwyODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwg
SW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVt
cGxlIFBsYWNlLCBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAid2Via2l0c291cHJlcXVlc3RmaWxl
LmgiCisKKworI2luY2x1ZGUgIndlYmtpdHNvdXBkaXJlY3RvcnlpbnB1dHN0cmVhbS5oIgorI2lu
Y2x1ZGUgPGdsaWIvZ2kxOG4uaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAtc2Vzc2lvbi1mZWF0
dXJlLmg+CisjaW5jbHVkZSA8bGlic291cC9zb3VwLXNlc3Npb24uaD4KKyNpbmNsdWRlIDxsaWJz
b3VwL3NvdXAtdXJpLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR19ERUZJTkVfVFlQRShX
ZWJLaXRTb3VwUmVxdWVzdEZpbGUsIHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZSwgV0VCS0lUX1RZ
UEVfU09VUF9SRVFVRVNUKQorCitzdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0RmlsZVByaXZhdGUg
eworICAgIEdGaWxlKiBnZmlsZTsKKworICAgIGNoYXIqIG1pbWVUeXBlOworICAgIGdvZmZzZXQg
c2l6ZTsKK307CisKK0dGaWxlKiB3ZWJraXRTb3VwUmVxdWVzdEZpbGVHZXRGaWxlKFdlYktpdFNv
dXBSZXF1ZXN0RmlsZSogZmlsZSkKK3sKKyAgICByZXR1cm4gKEdGaWxlKilnX29iamVjdF9yZWYo
ZmlsZS0+cHJpdi0+Z2ZpbGUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfc291cF9yZXF1ZXN0
X2ZpbGVfaW5pdChXZWJLaXRTb3VwUmVxdWVzdEZpbGUqIGZpbGUpCit7CisgICAgZmlsZS0+cHJp
diA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShmaWxlLCBXRUJLSVRfVFlQRV9TT1VQX1JF
UVVFU1RfRklMRSwgV2ViS2l0U291cFJlcXVlc3RGaWxlUHJpdmF0ZSk7CisKKyAgICBmaWxlLT5w
cml2LT5zaXplID0gLTE7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX3JlcXVlc3RfZmls
ZV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0U291cFJlcXVlc3RGaWxl
KiBmaWxlID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9GSUxFKG9iamVjdCk7CisKKyAgICBpZiAoZmls
ZS0+cHJpdi0+Z2ZpbGUpCisgICAgICAgIGdfb2JqZWN0X3VucmVmKGZpbGUtPnByaXYtPmdmaWxl
KTsKKyAgICBnX2ZyZWUoZmlsZS0+cHJpdi0+bWltZVR5cGUpOworCisgICAgR19PQkpFQ1RfQ0xB
U1Mod2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVj
dCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRTb3VwUmVxdWVzdEZpbGVDaGVja1VyaShX
ZWJLaXRTb3VwUmVxdWVzdCogcmVxdWVzdCwgU291cFVSSSogdXJpLCBHRXJyb3IqKiBlcnJvcikK
K3sKKyAgICAvKiAiZmlsZTovZm9vIiBpcyBub3QgdmFsaWQgKi8KKyAgICBpZiAoIXVyaS0+aG9z
dCkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgLyogYnV0IGl0IG11c3QgYmUgImZpbGU6
Ly8vLi4uIiBvciAiZmlsZTovL2xvY2FsaG9zdC8uLi4iICovCisgICAgaWYgKHVyaS0+c2NoZW1l
ID09IFNPVVBfVVJJX1NDSEVNRV9GSUxFCisgICAgICAgICYmICp1cmktPmhvc3QKKyAgICAgICAg
JiYgZ19hc2NpaV9zdHJjYXNlY21wKHVyaS0+aG9zdCwgImxvY2FsaG9zdCIpKQorICAgICAgICBy
ZXR1cm4gRkFMU0U7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0
U291cFJlcXVlc3RGaWxlRnRwTWFpbkxvb3BRdWl0KEdPYmplY3QqIG9iamVjdCwgR0FzeW5jUmVz
dWx0KiByZXN1bHQsIGdwb2ludGVyIGxvb3ApCit7CisgICAgZ19tYWluX2xvb3BfcXVpdCgoR01h
aW5Mb29wKilsb29wKTsKK30KKworLyogVGhpcyBpcyBhIHNvbWV3aGF0IGhhY2t5IHdheSB0byBn
ZXQgRlRQIHRvIGFsbW9zdCB3b3JrLiBUaGUgcHJvcGVyIHdheSB0bworICogZ2V0IEZUUCB0byBf
cmVhbGx5XyB3b3JrIGludm9sdmVzIGhhY2tpbmcgR0lPIHRvIGhhdmUgQVBJcyB0byBoYW5kbGUK
KyAqIGNhbm9uY2lhbCBVUkxzLgorICovCitzdGF0aWMgR0ZpbGUqIHdlYmtpdFNvdXBSZXF1ZXN0
RmlsZUVuc3VyZUZpbGVGdHAoU291cFVSSSogdXJpLCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxl
LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBTb3VwVVJJKiBob3N0OworICAgIGNoYXIqIHM7Cisg
ICAgR0ZpbGUqIGZpbGUsICogcmVzdWx0OworICAgIEdNb3VudCogbW91bnQ7CisKKyAgICBob3N0
ID0gc291cF91cmlfY29weV9ob3N0KHVyaSk7CisgICAgcyA9IHNvdXBfdXJpX3RvX3N0cmluZyho
b3N0LCBGQUxTRSk7CisgICAgZmlsZSA9IGdfZmlsZV9uZXdfZm9yX3VyaShzKTsKKyAgICBzb3Vw
X3VyaV9mcmVlKGhvc3QpOworICAgIGdfZnJlZShzKTsKKworICAgIG1vdW50ID0gZ19maWxlX2Zp
bmRfZW5jbG9zaW5nX21vdW50KGZpbGUsIGNhbmNlbGxhYmxlLCBlcnJvcik7CisgICAgaWYgKCFt
b3VudCAmJiBnX2ZpbGVfc3VwcG9ydHNfdGhyZWFkX2NvbnRleHRzKGZpbGUpKSB7CisgICAgICAg
IEdNYWluQ29udGV4dCogY29udGV4dCA9IGdfbWFpbl9jb250ZXh0X25ldygpOworICAgICAgICBH
TWFpbkxvb3AqIGxvb3AgPSBnX21haW5fbG9vcF9uZXcoY29udGV4dCwgRkFMU0UpOworCisgICAg
ICAgIGdfY2xlYXJfZXJyb3IoZXJyb3IpOworICAgICAgICBnX21haW5fY29udGV4dF9wdXNoX3Ro
cmVhZF9kZWZhdWx0KGNvbnRleHQpOworICAgICAgICBnX2ZpbGVfbW91bnRfZW5jbG9zaW5nX3Zv
bHVtZShmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01PVU5U
X01PVU5UX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsICAg
ICAgICAvKiBGSVhNRSEgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FuY2VsbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYmtp
dFNvdXBSZXF1ZXN0RmlsZUZ0cE1haW5Mb29wUXVpdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbG9vcCk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKyAg
ICAgICAgZ19tYWluX2NvbnRleHRfcG9wX3RocmVhZF9kZWZhdWx0KGNvbnRleHQpOworICAgICAg
ICBnX21haW5fbG9vcF91bnJlZihsb29wKTsKKyAgICAgICAgZ19tYWluX2NvbnRleHRfdW5yZWYo
Y29udGV4dCk7CisgICAgICAgIG1vdW50ID0gZ19maWxlX2ZpbmRfZW5jbG9zaW5nX21vdW50KGZp
bGUsIGNhbmNlbGxhYmxlLCBlcnJvcik7CisgICAgfQorICAgIGlmICghbW91bnQpCisgICAgICAg
IHJldHVybiAwOworICAgIGdfb2JqZWN0X3VucmVmKGZpbGUpOworCisgICAgZmlsZSA9IGdfbW91
bnRfZ2V0X2RlZmF1bHRfbG9jYXRpb24obW91bnQpOworICAgIGdfb2JqZWN0X3VucmVmKG1vdW50
KTsKKworICAgIHMgPSBnX3N0cmR1cCh1cmktPnBhdGgpOworICAgIGlmIChzdHJjaHIocywgJzsn
KSkKKyAgICAgICAgKnN0cmNocihzLCAnOycpID0gMDsKKworICAgIHJlc3VsdCA9IGdfZmlsZV9y
ZXNvbHZlX3JlbGF0aXZlX3BhdGgoZmlsZSwgcyk7CisgICAgZ19mcmVlKHMpOworICAgIGdfb2Jq
ZWN0X3VucmVmKGZpbGUpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdib29s
ZWFuIHdlYmtpdFNvdXBSZXF1ZXN0RmlsZUVuc3VyZUZpbGUoV2ViS2l0U291cFJlcXVlc3RGaWxl
KiBmaWxlLCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAg
ICBTb3VwVVJJKiB1cmk7CisKKyAgICBpZiAoZmlsZS0+cHJpdi0+Z2ZpbGUpCisgICAgICAgIHJl
dHVybiBUUlVFOworCisgICAgdXJpID0gd2Via2l0U291cFJlcXVlc3RHZXRVcmkoV0VCS0lUX1NP
VVBfUkVRVUVTVChmaWxlKSk7CisgICAgaWYgKHVyaS0+c2NoZW1lID09IFNPVVBfVVJJX1NDSEVN
RV9GSUxFKSB7CisgICAgICAgIGZpbGUtPnByaXYtPmdmaWxlID0gZ19maWxlX25ld19mb3JfcGF0
aCh1cmktPnBhdGgpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBpZiAodXJp
LT5zY2hlbWUgPT0gU09VUF9VUklfU0NIRU1FX0ZUUCkgeworICAgICAgICBmaWxlLT5wcml2LT5n
ZmlsZSA9IHdlYmtpdFNvdXBSZXF1ZXN0RmlsZUVuc3VyZUZpbGVGdHAodXJpLCBjYW5jZWxsYWJs
ZSwgZXJyb3IpOworICAgICAgICByZXR1cm4gKGdib29sZWFuKWZpbGUtPnByaXYtPmdmaWxlOwor
ICAgIH0KKworICAgIGdfc2V0X2Vycm9yKGVycm9yLCBXRUJLSVRfU09VUF9FUlJPUiwgV0VCS0lU
X1NPVVBfRVJST1JfVU5TVVBQT1JURURfVVJJX1NDSEVNRSwKKyAgICAgICAgICAgICAgICBfKCJV
bnN1cHBvcnRlZCBVUkkgc2NoZW1lICclcyciKSwgdXJpLT5zY2hlbWUpOworICAgIHJldHVybiBG
QUxTRTsKK30KKworc3RhdGljIEdJbnB1dFN0cmVhbSogd2Via2l0U291cFJlcXVlc3RGaWxlU2Vu
ZChXZWJLaXRTb3VwUmVxdWVzdCogcmVxdWVzdCwgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwg
R0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViS2l0U291cFJlcXVlc3RGaWxlKiBmaWxlID0gV0VC
S0lUX1NPVVBfUkVRVUVTVF9GSUxFKHJlcXVlc3QpOworICAgIEdJbnB1dFN0cmVhbSogc3RyZWFt
OworICAgIEdFcnJvciogTXlFcnJvciA9IDA7CisKKyAgICBpZiAoIXdlYmtpdFNvdXBSZXF1ZXN0
RmlsZUVuc3VyZUZpbGUoZmlsZSwgY2FuY2VsbGFibGUsIGVycm9yKSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBzdHJlYW0gPSBHX0lOUFVUX1NUUkVBTShnX2ZpbGVfcmVhZChmaWxlLT5wcml2
LT5nZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxs
YWJsZSwgJk15RXJyb3IpKTsKKyAgICBpZiAoIXN0cmVhbSkgeworICAgICAgICBpZiAoZ19lcnJv
cl9tYXRjaGVzKE15RXJyb3IsIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfSVNfRElSRUNUT1JZKSkg
eworICAgICAgICAgICAgR0ZpbGVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yOworICAgICAgICAgICAg
Z19jbGVhcl9lcnJvcigmTXlFcnJvcik7CisgICAgICAgICAgICBlbnVtZXJhdG9yID0gZ19maWxl
X2VudW1lcmF0ZV9jaGlsZHJlbihmaWxlLT5wcml2LT5nZmlsZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIqIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfRklMRV9RVUVSWV9JTkZPX05PTkUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5j
ZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVycm9yKTsKKyAgICAgICAgICAgIGlmIChlbnVtZXJhdG9yKSB7CisgICAgICAgICAgICAg
ICAgc3RyZWFtID0gd2Via2l0U291cERpcmVjdG9yeUlucHV0U3RyZWFtTmV3KGVudW1lcmF0b3Is
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdlYmtpdFNvdXBSZXF1ZXN0R2V0VXJpKHJlcXVlc3QpKTsKKyAgICAgICAgICAgICAgICBn
X29iamVjdF91bnJlZihlbnVtZXJhdG9yKTsKKyAgICAgICAgICAgICAgICBmaWxlLT5wcml2LT5t
aW1lVHlwZSA9IGdfc3RyZHVwKCJ0ZXh0L2h0bWwiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIGdfcHJvcGFnYXRlX2Vycm9yKGVycm9yLCBNeUVycm9yKTsK
KyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdGaWxlSW5mbyogaW5mbyA9IGdfZmls
ZV9xdWVyeV9pbmZvKGZpbGUtPnByaXYtPmdmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX0NPTlRFTlRfVFlQ
RSAiLCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19GSUxF
X0FUVFJJQlVURV9TVEFOREFSRF9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoR0ZpbGVRdWVyeUluZm9GbGFncykwLCBjYW5jZWxsYWJsZSwgMCk7Cisg
ICAgICAgIGlmIChpbmZvKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBDb250ZW50VHlwZTsK
KyAgICAgICAgICAgIGZpbGUtPnByaXYtPnNpemUgPSBnX2ZpbGVfaW5mb19nZXRfc2l6ZShpbmZv
KTsKKyAgICAgICAgICAgIENvbnRlbnRUeXBlID0gZ19maWxlX2luZm9fZ2V0X2NvbnRlbnRfdHlw
ZShpbmZvKTsKKworICAgICAgICAgICAgaWYgKENvbnRlbnRUeXBlKQorICAgICAgICAgICAgICAg
IGZpbGUtPnByaXYtPm1pbWVUeXBlID0gZ19jb250ZW50X3R5cGVfZ2V0X21pbWVfdHlwZShDb250
ZW50VHlwZSk7CisgICAgICAgICAgICBnX29iamVjdF91bnJlZihpbmZvKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiBzdHJlYW07Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFNvdXBS
ZXF1ZXN0RmlsZVNlbmRBc3luY1RocmVhZChHU2ltcGxlQXN5bmNSZXN1bHQqIHJlcywgR09iamVj
dCogb2JqZWN0LCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlKQoreworICAgIEdJbnB1dFN0cmVh
bSogc3RyZWFtOworICAgIFdlYktpdFNvdXBSZXF1ZXN0KiByZXF1ZXN0OworICAgIEdFcnJvciog
ZXJyb3IgPSAwOworCisgICAgcmVxdWVzdCA9IFdFQktJVF9TT1VQX1JFUVVFU1Qob2JqZWN0KTsK
KworICAgIHN0cmVhbSA9IHdlYmtpdFNvdXBSZXF1ZXN0RmlsZVNlbmQocmVxdWVzdCwgY2FuY2Vs
bGFibGUsICZlcnJvcik7CisKKyAgICBpZiAoIXN0cmVhbSkgeworICAgICAgICBnX3NpbXBsZV9h
c3luY19yZXN1bHRfc2V0X2Zyb21fZXJyb3IocmVzLCBlcnJvcik7CisgICAgICAgIGdfZXJyb3Jf
ZnJlZShlcnJvcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0
X3NldF9vcF9yZXNfZ3BvaW50ZXIocmVzLCBzdHJlYW0sIGdfb2JqZWN0X3VucmVmKTsKKyAgICB9
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFNvdXBSZXF1ZXN0RmlsZVNlbmRBc3luYyhXZWJLaXRT
b3VwUmVxdWVzdCogcmVxdWVzdCwgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwgR0FzeW5jUmVh
ZHlDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50ZXIgVXNlckRhdGEpCit7CisgICAgR1NpbXBsZUFz
eW5jUmVzdWx0KiByZXM7CisKKyAgICByZXMgPSBnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3KEdf
T0JKRUNUKHJlcXVlc3QpLCBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFVzZXJEYXRhLCAoZ3BvaW50ZXIpd2Via2l0U291cFJlcXVlc3RGaWxlU2VuZEFzeW5j
KTsKKworICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9ydW5faW5fdGhyZWFkKHJlcywgd2Via2l0
U291cFJlcXVlc3RGaWxlU2VuZEFzeW5jVGhyZWFkLCBHX1BSSU9SSVRZX0RFRkFVTFQsIGNhbmNl
bGxhYmxlKTsKKyAgICBnX29iamVjdF91bnJlZihyZXMpOworfQorCitzdGF0aWMgR0lucHV0U3Ry
ZWFtKiB3ZWJraXRTb3VwUmVxdWVzdEZpbGVTZW5kRmluaXNoKFdlYktpdFNvdXBSZXF1ZXN0KiBy
ZXF1ZXN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgR1Np
bXBsZUFzeW5jUmVzdWx0KiBzaW1wbGUgPSBHX1NJTVBMRV9BU1lOQ19SRVNVTFQocmVzdWx0KTsK
KworICAgIGdfd2Fybl9pZl9mYWlsKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfc291cmNlX3Rh
ZyhzaW1wbGUpID09IHdlYmtpdFNvdXBSZXF1ZXN0RmlsZVNlbmRBc3luYyk7CisKKyAgICBpZiAo
Z19zaW1wbGVfYXN5bmNfcmVzdWx0X3Byb3BhZ2F0ZV9lcnJvcihzaW1wbGUsIGVycm9yKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gKEdJbnB1dFN0cmVhbSopZ19vYmplY3RfcmVm
KGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfb3BfcmVzX2dwb2ludGVyKHNpbXBsZSkpOworfQor
CitzdGF0aWMgZ29mZnNldCB3ZWJraXRTb3VwUmVxdWVzdEZpbGVHZXRDb250ZW50TGVuZ3RoKFdl
YktpdFNvdXBSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIFdlYktpdFNvdXBSZXF1ZXN0RmlsZSog
ZmlsZSA9IFdFQktJVF9TT1VQX1JFUVVFU1RfRklMRShyZXF1ZXN0KTsKKworICAgIHJldHVybiBm
aWxlLT5wcml2LT5zaXplOworfQorCitzdGF0aWMgY29uc3QgY2hhciogd2Via2l0U291cFJlcXVl
c3RGaWxlR2V0Q29udGVudFR5cGUoV2ViS2l0U291cFJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAg
V2ViS2l0U291cFJlcXVlc3RGaWxlKiBmaWxlID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9GSUxFKHJl
cXVlc3QpOworCisgICAgaWYgKCFmaWxlLT5wcml2LT5taW1lVHlwZSkKKyAgICAgICAgcmV0dXJu
ICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iOworCisgICAgcmV0dXJuIGZpbGUtPnByaXYtPm1p
bWVUeXBlOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfY2xhc3Nf
aW5pdChXZWJLaXRTb3VwUmVxdWVzdEZpbGVDbGFzcyogcmVxdWVzdEZpbGVDbGFzcykKK3sKKyAg
ICBHT2JqZWN0Q2xhc3MqIG9iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdEZpbGVD
bGFzcyk7CisgICAgV2ViS2l0U291cFJlcXVlc3RDbGFzcyogcmVxdWVzdENsYXNzID0gV0VCS0lU
X1NPVVBfUkVRVUVTVF9DTEFTUyhyZXF1ZXN0RmlsZUNsYXNzKTsKKworICAgIGdfdHlwZV9jbGFz
c19hZGRfcHJpdmF0ZShyZXF1ZXN0RmlsZUNsYXNzLCBzaXplb2YoV2ViS2l0U291cFJlcXVlc3RG
aWxlUHJpdmF0ZSkpOworCisgICAgb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X3NvdXBf
cmVxdWVzdF9maWxlX2ZpbmFsaXplOworCisgICAgcmVxdWVzdENsYXNzLT5jaGVja1VyaSA9IHdl
YmtpdFNvdXBSZXF1ZXN0RmlsZUNoZWNrVXJpOworICAgIHJlcXVlc3RDbGFzcy0+c2VuZCA9IHdl
YmtpdFNvdXBSZXF1ZXN0RmlsZVNlbmQ7CisgICAgcmVxdWVzdENsYXNzLT5zZW5kQXN5bmMgPSB3
ZWJraXRTb3VwUmVxdWVzdEZpbGVTZW5kQXN5bmM7CisgICAgcmVxdWVzdENsYXNzLT5zZW5kRmlu
aXNoID0gd2Via2l0U291cFJlcXVlc3RGaWxlU2VuZEZpbmlzaDsKKyAgICByZXF1ZXN0Q2xhc3Mt
PmdldENvbnRlbnRMZW5ndGggPSB3ZWJraXRTb3VwUmVxdWVzdEZpbGVHZXRDb250ZW50TGVuZ3Ro
OworICAgIHJlcXVlc3RDbGFzcy0+Z2V0Q29udGVudFR5cGUgPSB3ZWJraXRTb3VwUmVxdWVzdEZp
bGVHZXRDb250ZW50VHlwZTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvd2Via2l0c291cHJlcXVlc3RmaWxlLmggYi9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC93ZWJraXRzb3VwcmVxdWVzdGZpbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4yNGEwMzcyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvd2Via2l0c291cHJlcXVlc3RmaWxlLmgKQEAgLTAsMCArMSw1NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwK
KyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgd2Via2l0c291
cHJlcXVlc3RmaWxlX2gKKyNkZWZpbmUgd2Via2l0c291cHJlcXVlc3RmaWxlX2ggMQorCisjaW5j
bHVkZSAid2Via2l0c291cHJlcXVlc3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjZGVm
aW5lIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9GSUxFICAgICAgICAgICAgKHdlYmtpdF9zb3Vw
X3JlcXVlc3RfZmlsZV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNUX0ZJ
TEUob2JqZWN0KSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqZWN0KSwg
V0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0ZJTEUsIFdlYktpdFNvdXBSZXF1ZXN0RmlsZSkpCisj
ZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfRklMRV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9D
SEVDS19DTEFTU19DQVNUKChrbGFzcyksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9GSUxFLCBX
ZWJLaXRTb3VwUmVxdWVzdEZpbGVDbGFzcykpCisjZGVmaW5lIFdFQktJVF9TT1VQX0lTX1JFUVVF
U1RfRklMRShvYmplY3QpICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmplY3Qp
LCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfRklMRSkpCisjZGVmaW5lIFdFQktJVF9TT1VQX0lT
X1JFUVVFU1RfRklMRV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFz
cyksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9GSUxFKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBf
UkVRVUVTVF9GSUxFX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygo
b2JqKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0ZJTEUsIFdlYktpdFNvdXBSZXF1ZXN0Rmls
ZUNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0RmlsZVByaXZhdGUg
V2ViS2l0U291cFJlcXVlc3RGaWxlUHJpdmF0ZTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFdl
YktpdFNvdXBSZXF1ZXN0IHBhcmVudDsKKworICAgIFdlYktpdFNvdXBSZXF1ZXN0RmlsZVByaXZh
dGUqIHByaXY7Cit9IFdlYktpdFNvdXBSZXF1ZXN0RmlsZTsKKwordHlwZWRlZiBzdHJ1Y3Qgewor
ICAgIFdlYktpdFNvdXBSZXF1ZXN0Q2xhc3MgcGFyZW50X2NsYXNzOworCit9IFdlYktpdFNvdXBS
ZXF1ZXN0RmlsZUNsYXNzOworCitHVHlwZSB3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfZ2V0X3R5
cGUodm9pZCk7CisKK0dGaWxlKiB3ZWJraXRTb3VwUmVxdWVzdEZpbGVHZXRGaWxlKFdlYktpdFNv
dXBSZXF1ZXN0RmlsZSogZmlsZSk7CisKK30KKworI2VuZGlmIC8qIHdlYmtpdHNvdXByZXF1ZXN0
ZmlsZV9oICovCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJr
aXRzb3VwcmVxdWVzdGh0dHAuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvd2Vi
a2l0c291cHJlcXVlc3RodHRwLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4xYzk1M2NmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvd2Via2l0c291cHJlcXVlc3RodHRwLmNwcApAQCAtMCwwICsxLDMxNCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdh
bGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwKKyAqIEJvc3Rv
biwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJ3ZWJraXRzb3VwcmVxdWVzdGh0dHAuaCIKKworI2luY2x1ZGUgIndlYmtpdHNvdXBjYWNo
ZWNvcmUuaCIKKyNpbmNsdWRlICJ3ZWJraXRzb3VwaHR0cGlucHV0c3RyZWFtLmgiCisjaW5jbHVk
ZSA8Z2xpYi9naTE4bi5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0U291cFJlcXVlc3RIVFRQLCB3ZWJraXRf
c291cF9yZXF1ZXN0X2h0dHAsIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVCkKKworc3RydWN0IF9X
ZWJLaXRTb3VwUmVxdWVzdEhUVFBQcml2YXRlIHsKKyAgICBTb3VwTWVzc2FnZSogbXNnOworfTsK
KworLyoqCisgKiB3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfZ2V0X21lc3NhZ2U6CisgKiBAaHR0
cDogYSAjV2ViS2l0U291cFJlcXVlc3RIVFRQIG9iamVjdAorICoKKyAqIEdldHMgYSBuZXcgcmVm
ZXJlbmNlIHRvIHRoZSAjU291cE1lc3NhZ2UgYXNzb2NpYXRlZCB0byB0aGlzIFdlYktpdFNvdXBS
ZXF1ZXN0CisgKgorICogUmV0dXJuczogYSBuZXcgcmVmZXJlbmNlIHRvIHRoZSAjU291cE1lc3Nh
Z2UKKyAqKi8KK1NvdXBNZXNzYWdlICogd2Via2l0U291cFJlcXVlc3RIdHRwR2V0TWVzc2FnZShX
ZWJLaXRTb3VwUmVxdWVzdEhUVFAqIGh0dHApCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX1NPVVBfSVNfUkVRVUVTVF9IVFRQKGh0dHApLCAwKTsKKworICAgIHJldHVybiAoU291
cE1lc3NhZ2UqKWdfb2JqZWN0X3JlZihodHRwLT5wcml2LT5tc2cpOworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfaW5pdChXZWJLaXRTb3VwUmVxdWVzdEhUVFAqIGh0
dHApCit7CisgICAgaHR0cC0+cHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShodHRw
LCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfSFRUUCwgV2ViS2l0U291cFJlcXVlc3RIVFRQUHJp
dmF0ZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRTb3VwUmVxdWVzdEh0dHBDaGVja1Vy
aShXZWJLaXRTb3VwUmVxdWVzdCogcmVxdWVzdCwgU291cFVSSSogdXJpLCBHRXJyb3IqKiBlcnJv
cikKK3sKKyAgICBXZWJLaXRTb3VwUmVxdWVzdEhUVFAqIGh0dHAgPSBXRUJLSVRfU09VUF9SRVFV
RVNUX0hUVFAocmVxdWVzdCk7CisKKyAgICBpZiAoIVNPVVBfVVJJX1ZBTElEX0ZPUl9IVFRQKHVy
aSkpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIGh0dHAtPnByaXYtPm1zZyA9IHNvdXBf
bWVzc2FnZV9uZXdfZnJvbV91cmkoU09VUF9NRVRIT0RfR0VULCB1cmkpOworICAgIHJldHVybiBU
UlVFOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfZmluYWxpemUo
R09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdFNvdXBSZXF1ZXN0SFRUUCogaHR0cCA9IFdF
QktJVF9TT1VQX1JFUVVFU1RfSFRUUChvYmplY3QpOworCisgICAgaWYgKGh0dHAtPnByaXYtPm1z
ZykKKyAgICAgICAgZ19vYmplY3RfdW5yZWYoaHR0cC0+cHJpdi0+bXNnKTsKKworICAgIEdfT0JK
RUNUX0NMQVNTKHdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6
ZShvYmplY3QpOworfQorCitzdGF0aWMgR0lucHV0U3RyZWFtICogd2Via2l0U291cFJlcXVlc3RI
dHRwU2VuZChXZWJLaXRTb3VwUmVxdWVzdCogcmVxdWVzdCwgR0NhbmNlbGxhYmxlKiBjYW5jZWxs
YWJsZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSog
aHR0cHN0cmVhbTsKKyAgICBXZWJLaXRTb3VwUmVxdWVzdEhUVFAqIGh0dHAgPSBXRUJLSVRfU09V
UF9SRVFVRVNUX0hUVFAocmVxdWVzdCk7CisKKyAgICBodHRwc3RyZWFtID0gd2Via2l0U291cEh0
dHBJbnB1dFN0cmVhbU5ldyh3ZWJraXRTb3VwUmVxdWVzdEdldFNlc3Npb24ocmVxdWVzdCksIGh0
dHAtPnByaXYtPm1zZyk7CisgICAgaWYgKCF3ZWJraXRTb3VwSHR0cElucHV0U3RyZWFtU2VuZCho
dHRwc3RyZWFtLCBjYW5jZWxsYWJsZSwgZXJyb3IpKSB7CisgICAgICAgIGdfb2JqZWN0X3VucmVm
KGh0dHBzdHJlYW0pOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIChHSW5w
dXRTdHJlYW0qKWh0dHBzdHJlYW07Cit9CisKKworc3RhdGljIHZvaWQgc2VuZEFzeW5jKEdPYmpl
Y3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKQorewor
ICAgIFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0qIGh0dHBzdHJlYW0gPSBXRUJLSVRfU09VUF9I
VFRQX0lOUFVUX1NUUkVBTShzb3VyY2UpOworICAgIEdTaW1wbGVBc3luY1Jlc3VsdCogc2ltcGxl
ID0gKEdTaW1wbGVBc3luY1Jlc3VsdCopdXNlckRhdGE7CisgICAgR0Vycm9yKiBlcnJvciA9IDA7
CisKKyAgICBpZiAod2Via2l0U291cEh0dHBJbnB1dFN0cmVhbVNlbmRGaW5pc2goaHR0cHN0cmVh
bSwgcmVzdWx0LCAmZXJyb3IpKQorICAgICAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X29w
X3Jlc19ncG9pbnRlcihzaW1wbGUsIGh0dHBzdHJlYW0sIGdfb2JqZWN0X3VucmVmKTsKKyAgICBl
bHNlIHsKKyAgICAgICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9mcm9tX2Vycm9yKHNpbXBs
ZSwgZXJyb3IpOworICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOworICAgICAgICBnX29iamVj
dF91bnJlZihodHRwc3RyZWFtKTsKKyAgICB9CisgICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2Nv
bXBsZXRlKHNpbXBsZSk7CisgICAgZ19vYmplY3RfdW5yZWYoc2ltcGxlKTsKK30KKworCit0eXBl
ZGVmIHN0cnVjdCB7CisgICAgV2ViS2l0U291cFJlcXVlc3RIVFRQKiByZXE7CisgICAgU291cE1l
c3NhZ2UqIG9yaWdpbmFsOworICAgIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGU7CisgICAgR0Fz
eW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjazsKKyAgICBncG9pbnRlciB1c2VyRGF0YTsKK30gQ29u
ZGl0aW9uYWxIZWxwZXI7CisKKworc3RhdGljIHZvaWQgY29uZGl0aW9uYWxHZXRSZWFkeUNiKFNv
dXBTZXNzaW9uKiBzZXNzaW9uLCBTb3VwTWVzc2FnZSogbXNnLCBncG9pbnRlciB1c2VyRGF0YSkK
K3sKKyAgICBDb25kaXRpb25hbEhlbHBlciogaGVscGVyID0gKENvbmRpdGlvbmFsSGVscGVyKikg
dXNlckRhdGE7CisgICAgR1NpbXBsZUFzeW5jUmVzdWx0KiBzaW1wbGU7CisgICAgV2ViS2l0U291
cEhUVFBJbnB1dFN0cmVhbSogaHR0cHN0cmVhbTsKKworICAgIHNpbXBsZSA9IGdfc2ltcGxlX2Fz
eW5jX3Jlc3VsdF9uZXcoR19PQkpFQ1QoaGVscGVyLT5yZXEpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaGVscGVyLT5jYWxsYmFjaywgaGVscGVyLT51c2VyRGF0YSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChncG9pbnRlciljb25kaXRp
b25hbEdldFJlYWR5Q2IpOworCisgICAgaWYgKG1zZy0+c3RhdHVzX2NvZGUgPT0gU09VUF9TVEFU
VVNfTk9UX01PRElGSUVEKSB7CisgICAgICAgIFdlYktpdFNvdXBDYWNoZUNvcmUqIGNhY2hlID0g
KFdlYktpdFNvdXBDYWNoZUNvcmUqKSBzb3VwX3Nlc3Npb25fZ2V0X2ZlYXR1cmUoc2Vzc2lvbiwg
V0VCS0lUX1RZUEVfU09VUF9DQUNIRV9DT1JFKTsKKworICAgICAgICBodHRwc3RyZWFtID0gKFdl
YktpdFNvdXBIVFRQSW5wdXRTdHJlYW0qKSB3ZWJraXRTb3VwQ2FjaGVDb3JlU2VuZFJlc3BvbnNl
KGNhY2hlLCBtc2cpOworICAgICAgICBpZiAoaHR0cHN0cmVhbSkgeworICAgICAgICAgICAgY29u
c3QgZ2NoYXIqIGNvbnRlbnRUeXBlOworCisgICAgICAgICAgICBnX3NpbXBsZV9hc3luY19yZXN1
bHRfc2V0X29wX3Jlc19ncG9pbnRlcihzaW1wbGUsIGh0dHBzdHJlYW0sIGdfb2JqZWN0X3VucmVm
KTsKKworICAgICAgICAgICAgc291cF9tZXNzYWdlX2dvdF9oZWFkZXJzKGhlbHBlci0+b3JpZ2lu
YWwpOworICAgICAgICAgICAgY29udGVudFR5cGUgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRf
Y29udGVudF90eXBlKG1zZy0+cmVzcG9uc2VfaGVhZGVycywgMCk7CisgICAgICAgICAgICBzb3Vw
X21lc3NhZ2VfY29udGVudF9zbmlmZmVkKGhlbHBlci0+b3JpZ2luYWwsIGNvbnRlbnRUeXBlLCAw
KTsKKworICAgICAgICAgICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlKHNpbXBsZSk7
CisKKyAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9maW5pc2hlZChoZWxwZXItPm9yaWdpbmFsKTsK
KworICAgICAgICAgICAgZ19vYmplY3RfdW5yZWYoc2ltcGxlKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIC8qIEFzayBhZ2FpbiBmb3IgdGhlIHJlc291cmNlLCBzb21laG93IHRoZSBj
YWNoZSBjYW5ub3QgbG9jYXRlIGl0ICovCisgICAgICAgICAgICBodHRwc3RyZWFtID0gd2Via2l0
U291cEh0dHBJbnB1dFN0cmVhbU5ldyhzZXNzaW9uLCBoZWxwZXItPm9yaWdpbmFsKTsKKyAgICAg
ICAgICAgIHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1TZW5kQXN5bmMoaHR0cHN0cmVhbSwgR19Q
UklPUklUWV9ERUZBVUxULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoZWxwZXItPmNhbmNlbGxhYmxlLCBzZW5kQXN5bmMsIHNpbXBsZSk7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICAvKiBJdCBpcyBpbiB0aGUgY2FjaGUgYnV0IGl0IHdh
cyBtb2RpZmllZCByZW1vdGVseSAqLworICAgICAgICBodHRwc3RyZWFtID0gd2Via2l0U291cEh0
dHBJbnB1dFN0cmVhbU5ldyhzZXNzaW9uLCBoZWxwZXItPm9yaWdpbmFsKTsKKyAgICAgICAgd2Vi
a2l0U291cEh0dHBJbnB1dFN0cmVhbVNlbmRBc3luYyhodHRwc3RyZWFtLCBHX1BSSU9SSVRZX0RF
RkFVTFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscGVy
LT5jYW5jZWxsYWJsZSwgc2VuZEFzeW5jLCBzaW1wbGUpOworICAgIH0KKworICAgIGdfb2JqZWN0
X3VucmVmKGhlbHBlci0+cmVxKTsKKyAgICBnX29iamVjdF91bnJlZihoZWxwZXItPm9yaWdpbmFs
KTsKKyAgICBnX3NsaWNlX2ZyZWUoQ29uZGl0aW9uYWxIZWxwZXIsIGhlbHBlcik7Cit9CisKK3R5
cGVkZWYgc3RydWN0IHsKKyAgICBXZWJLaXRTb3VwUmVxdWVzdEhUVFAqIGh0dHA7CisgICAgR0Fz
eW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjazsKKyAgICBncG9pbnRlciB1c2VyRGF0YTsKK30gU2Vu
ZEFzeW5jSGVscGVyOworCitzdGF0aWMgdm9pZCB3ZWJraXRTb3VwUmVxdWVzdEh0dHBTZW5kQXN5
bmMoV2ViS2l0U291cFJlcXVlc3QqIHJlcXVlc3QsIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUs
IEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJEYXRhKTsKKworc3Rh
dGljIGdib29sZWFuIHNlbmRBc3luY0NiKGdwb2ludGVyIGRhdGEpCit7CisgICAgR1NpbXBsZUFz
eW5jUmVzdWx0KiBzaW1wbGU7CisgICAgV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSogaHR0cHN0
cmVhbTsKKyAgICBTb3VwU2Vzc2lvbiogc2Vzc2lvbjsKKyAgICBXZWJLaXRTb3VwQ2FjaGVDb3Jl
KiBjYWNoZTsKKyAgICBTZW5kQXN5bmNIZWxwZXIqIGhlbHBlciA9IChTZW5kQXN5bmNIZWxwZXIq
KSBkYXRhOworCisgICAgc2Vzc2lvbiA9IHdlYmtpdFNvdXBSZXF1ZXN0R2V0U2Vzc2lvbihXRUJL
SVRfU09VUF9SRVFVRVNUKGhlbHBlci0+aHR0cCkpOworICAgIGNhY2hlID0gKFdlYktpdFNvdXBD
YWNoZUNvcmUqKSBzb3VwX3Nlc3Npb25fZ2V0X2ZlYXR1cmUoc2Vzc2lvbiwgV0VCS0lUX1RZUEVf
U09VUF9DQUNIRV9DT1JFKTsKKworICAgIGh0dHBzdHJlYW0gPSAoV2ViS2l0U291cEhUVFBJbnB1
dFN0cmVhbSopIHdlYmtpdFNvdXBDYWNoZUNvcmVTZW5kUmVzcG9uc2UoY2FjaGUsIFNPVVBfTUVT
U0FHRShoZWxwZXItPmh0dHAtPnByaXYtPm1zZykpOworCisgICAgaWYgKGh0dHBzdHJlYW0pIHsK
KyAgICAgICAgY29uc3QgZ2NoYXIqIGNvbnRlbnRUeXBlOworCisgICAgICAgIHNpbXBsZSA9IGdf
c2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcoR19PQkpFQ1QoaGVscGVyLT5odHRwKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwZXItPmNhbGxiYWNrLCBoZWxw
ZXItPnVzZXJEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChncG9pbnRlcil3ZWJraXRTb3VwUmVxdWVzdEh0dHBTZW5kQXN5bmMpOworICAgICAgICBnX3Np
bXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19ncG9pbnRlcihzaW1wbGUsIGh0dHBzdHJlYW0s
IGdfb2JqZWN0X3VucmVmKTsKKworICAgICAgICAvKiBVcGRhdGUgbWVzc2FnZSBzdGF0dXMgKi8K
KyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMoaGVscGVyLT5odHRwLT5wcml2LT5tc2cs
IFNPVVBfU1RBVFVTX09LKTsKKworICAgICAgICAvKiBJc3N1ZSBzaWduYWxzICAqLworICAgICAg
ICBzb3VwX21lc3NhZ2VfZ290X2hlYWRlcnMoaGVscGVyLT5odHRwLT5wcml2LT5tc2cpOworICAg
ICAgICBjb250ZW50VHlwZSA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9jb250ZW50X3R5cGUo
aGVscGVyLT5odHRwLT5wcml2LT5tc2ctPnJlc3BvbnNlX2hlYWRlcnMsIDApOworICAgICAgICBz
b3VwX21lc3NhZ2VfY29udGVudF9zbmlmZmVkKGhlbHBlci0+aHR0cC0+cHJpdi0+bXNnLCBjb250
ZW50VHlwZSwgMCk7CisKKyAgICAgICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlKHNp
bXBsZSk7CisKKyAgICAgICAgc291cF9tZXNzYWdlX2ZpbmlzaGVkKGhlbHBlci0+aHR0cC0+cHJp
di0+bXNnKTsKKworICAgICAgICBnX29iamVjdF91bnJlZihzaW1wbGUpOworICAgIH0KKworICAg
IGdfc2xpY2VfZnJlZShTZW5kQXN5bmNIZWxwZXIsIGhlbHBlcik7CisKKyAgICByZXR1cm4gRkFM
U0U7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFNvdXBSZXF1ZXN0SHR0cFNlbmRBc3luYyhXZWJL
aXRTb3VwUmVxdWVzdCogcmVxdWVzdCwgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwgR0FzeW5j
UmVhZHlDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgV2ViS2l0
U291cFJlcXVlc3RIVFRQKiBodHRwID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9IVFRQKHJlcXVlc3Qp
OworICAgIFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0qIGh0dHBzdHJlYW07CisgICAgR1NpbXBs
ZUFzeW5jUmVzdWx0KiBzaW1wbGU7CisgICAgU291cFNlc3Npb24qIHNlc3Npb247CisgICAgV2Vi
S2l0U291cENhY2hlQ29yZSogY2FjaGU7CisKKyAgICBzZXNzaW9uID0gd2Via2l0U291cFJlcXVl
c3RHZXRTZXNzaW9uKHJlcXVlc3QpOworICAgIGNhY2hlID0gKFdlYktpdFNvdXBDYWNoZUNvcmUq
KSBzb3VwX3Nlc3Npb25fZ2V0X2ZlYXR1cmUoc2Vzc2lvbiwgV0VCS0lUX1RZUEVfU09VUF9DQUNI
RV9DT1JFKTsKKworICAgIGlmIChjYWNoZSkgeworICAgICAgICBXZWJLaXRTb3VwQ2FjaGVDb3Jl
UmVzcG9uc2UgcmVzcG9uc2U7CisKKyAgICAgICAgcmVzcG9uc2UgPSB3ZWJraXRTb3VwQ2FjaGVD
b3JlSGFzUmVzcG9uc2UoY2FjaGUsIGh0dHAtPnByaXYtPm1zZyk7CisgICAgICAgIGlmIChyZXNw
b25zZSA9PSBXRUJLSVRfU09VUF9DQUNIRV9DT1JFX1JFU1BPTlNFX0ZSRVNIKSB7CisgICAgICAg
ICAgICAvKiBEbyByZXR1cm4gdGhlIHN0cmVhbSBhc3luY2hyb25vdXNseSBhcyBpbgorICAgICAg
ICAgICAgICAgdGhlIG90aGVyIGNhc2VzLiBJdCdzIG5vdCBlbm91Z2ggdG8gdXNlCisgICAgICAg
ICAgICAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGVfaW5faWRsZSBhcworICAgICAg
ICAgICAgICAgdGhlIHNpZ25hbHMgbXVzdCBiZSBhbHNvIGVtaXR0ZWQKKyAgICAgICAgICAgICAg
IGFzeW5jaHJvbm91c2x5ICovCisgICAgICAgICAgICBTZW5kQXN5bmNIZWxwZXIqIGhlbHBlciA9
IGdfc2xpY2VfbmV3KFNlbmRBc3luY0hlbHBlcik7CisgICAgICAgICAgICBoZWxwZXItPmh0dHAg
PSBodHRwOworICAgICAgICAgICAgaGVscGVyLT5jYWxsYmFjayA9IGNhbGxiYWNrOworICAgICAg
ICAgICAgaGVscGVyLT51c2VyRGF0YSA9IHVzZXJEYXRhOworICAgICAgICAgICAgZ190aW1lb3V0
X2FkZCgwLCBzZW5kQXN5bmNDYiwgaGVscGVyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBpZiAocmVzcG9uc2UgPT0gV0VCS0lUX1NPVVBfQ0FDSEVfQ09SRV9SRVNQ
T05TRV9ORUVEU19WQUxJREFUSU9OKSB7CisgICAgICAgICAgICBTb3VwTWVzc2FnZSogY29uZGl0
aW9uYWxNc2c7CisgICAgICAgICAgICBDb25kaXRpb25hbEhlbHBlciogaGVscGVyOworCisgICAg
ICAgICAgICBjb25kaXRpb25hbE1zZyA9IHdlYmtpdFNvdXBDYWNoZUNvcmVHZW5lcmF0ZUNvbmRp
dGlvbmFsUmVxdWVzdChjYWNoZSwgaHR0cC0+cHJpdi0+bXNnKTsKKworICAgICAgICAgICAgaGVs
cGVyID0gZ19zbGljZV9uZXcwKENvbmRpdGlvbmFsSGVscGVyKTsKKyAgICAgICAgICAgIGhlbHBl
ci0+cmVxID0gKFdlYktpdFNvdXBSZXF1ZXN0SFRUUCopZ19vYmplY3RfcmVmKGh0dHApOworICAg
ICAgICAgICAgaGVscGVyLT5vcmlnaW5hbCA9IChTb3VwTWVzc2FnZSopZ19vYmplY3RfcmVmKGh0
dHAtPnByaXYtPm1zZyk7CisgICAgICAgICAgICBoZWxwZXItPmNhbmNlbGxhYmxlID0gY2FuY2Vs
bGFibGU7CisgICAgICAgICAgICBoZWxwZXItPmNhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgICAg
ICAgICBoZWxwZXItPnVzZXJEYXRhID0gdXNlckRhdGE7CisgICAgICAgICAgICBzb3VwX3Nlc3Np
b25fcXVldWVfbWVzc2FnZShzZXNzaW9uLCBjb25kaXRpb25hbE1zZywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbmFsR2V0UmVhZHlDYiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlcik7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzaW1wbGUgPSBnX3NpbXBsZV9hc3luY19yZXN1
bHRfbmV3KEdfT0JKRUNUKGh0dHApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2FsbGJhY2ssIHVzZXJEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGdwb2ludGVyKXdlYmtpdFNvdXBSZXF1ZXN0SHR0cFNlbmRBc3luYyk7CisgICAg
aHR0cHN0cmVhbSA9IHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1OZXcod2Via2l0U291cFJlcXVl
c3RHZXRTZXNzaW9uKHJlcXVlc3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGh0dHAtPnByaXYtPm1zZyk7CisgICAgd2Via2l0U291cEh0dHBJbnB1dFN0
cmVhbVNlbmRBc3luYyhodHRwc3RyZWFtLCBHX1BSSU9SSVRZX0RFRkFVTFQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxsYWJsZSwgc2VuZEFzeW5jLCBzaW1w
bGUpOworfQorCitzdGF0aWMgR0lucHV0U3RyZWFtKiB3ZWJraXRTb3VwUmVxdWVzdEh0dHBTZW5k
RmluaXNoKFdlYktpdFNvdXBSZXF1ZXN0KiByZXF1ZXN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwg
R0Vycm9yKiogZXJyb3IpCit7CisgICAgR1NpbXBsZUFzeW5jUmVzdWx0KiBzaW1wbGU7CisKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChnX3NpbXBsZV9hc3luY19yZXN1bHRfaXNfdmFsaWQocmVz
dWx0LCBHX09CSkVDVChyZXF1ZXN0KSwgKGdwb2ludGVyKXdlYmtpdFNvdXBSZXF1ZXN0SHR0cFNl
bmRBc3luYykgfHwgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2lzX3ZhbGlkKHJlc3VsdCwgR19PQkpF
Q1QocmVxdWVzdCksIChncG9pbnRlciljb25kaXRpb25hbEdldFJlYWR5Q2IpLCAwKTsKKworICAg
IHNpbXBsZSA9IEdfU0lNUExFX0FTWU5DX1JFU1VMVChyZXN1bHQpOworICAgIGlmIChnX3NpbXBs
ZV9hc3luY19yZXN1bHRfcHJvcGFnYXRlX2Vycm9yKHNpbXBsZSwgZXJyb3IpKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICByZXR1cm4gKEdJbnB1dFN0cmVhbSopZ19vYmplY3RfcmVmKGdfc2ltcGxl
X2FzeW5jX3Jlc3VsdF9nZXRfb3BfcmVzX2dwb2ludGVyKHNpbXBsZSkpOworfQorCitzdGF0aWMg
Z29mZnNldCB3ZWJraXRTb3VwUmVxdWVzdEh0dHBHZXRDb250ZW50TGVuZ3RoKFdlYktpdFNvdXBS
ZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIFdlYktpdFNvdXBSZXF1ZXN0SFRUUCogaHR0cCA9IFdF
QktJVF9TT1VQX1JFUVVFU1RfSFRUUChyZXF1ZXN0KTsKKworICAgIHJldHVybiBzb3VwX21lc3Nh
Z2VfaGVhZGVyc19nZXRfY29udGVudF9sZW5ndGgoaHR0cC0+cHJpdi0+bXNnLT5yZXNwb25zZV9o
ZWFkZXJzKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIqIHdlYmtpdFNvdXBSZXF1ZXN0SHR0cEdl
dENvbnRlbnRUeXBlKFdlYktpdFNvdXBSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIFdlYktpdFNv
dXBSZXF1ZXN0SFRUUCogaHR0cCA9IFdFQktJVF9TT1VQX1JFUVVFU1RfSFRUUChyZXF1ZXN0KTsK
KworICAgIHJldHVybiBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfY29udGVudF90eXBlKGh0dHAt
PnByaXYtPm1zZy0+cmVzcG9uc2VfaGVhZGVycywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9zb3VwX3JlcXVlc3RfaHR0cF9jbGFzc19pbml0KFdlYktpdFNvdXBSZXF1ZXN0SFRUUENsYXNz
KiByZXF1ZXN0SFRUUENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogb2JqZWN0Q2xhc3MgPSBH
X09CSkVDVF9DTEFTUyhyZXF1ZXN0SFRUUENsYXNzKTsKKyAgICBXZWJLaXRTb3VwUmVxdWVzdENs
YXNzKiByZXF1ZXN0Q2xhc3MgPQorICAgICAgICBXRUJLSVRfU09VUF9SRVFVRVNUX0NMQVNTKHJl
cXVlc3RIVFRQQ2xhc3MpOworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKHJlcXVlc3RI
VFRQQ2xhc3MsIHNpemVvZihXZWJLaXRTb3VwUmVxdWVzdEhUVFBQcml2YXRlKSk7CisKKyAgICBv
YmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfZmluYWxpemU7
CisKKyAgICByZXF1ZXN0Q2xhc3MtPmNoZWNrVXJpID0gd2Via2l0U291cFJlcXVlc3RIdHRwQ2hl
Y2tVcmk7CisgICAgcmVxdWVzdENsYXNzLT5zZW5kID0gd2Via2l0U291cFJlcXVlc3RIdHRwU2Vu
ZDsKKyAgICByZXF1ZXN0Q2xhc3MtPnNlbmRBc3luYyA9IHdlYmtpdFNvdXBSZXF1ZXN0SHR0cFNl
bmRBc3luYzsKKyAgICByZXF1ZXN0Q2xhc3MtPnNlbmRGaW5pc2ggPSB3ZWJraXRTb3VwUmVxdWVz
dEh0dHBTZW5kRmluaXNoOworICAgIHJlcXVlc3RDbGFzcy0+Z2V0Q29udGVudExlbmd0aCA9IHdl
YmtpdFNvdXBSZXF1ZXN0SHR0cEdldENvbnRlbnRMZW5ndGg7CisgICAgcmVxdWVzdENsYXNzLT5n
ZXRDb250ZW50VHlwZSA9IHdlYmtpdFNvdXBSZXF1ZXN0SHR0cEdldENvbnRlbnRUeXBlOworfQor
Cit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJraXRzb3Vw
cmVxdWVzdGh0dHAuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL3dlYmtpdHNvdXBy
ZXF1ZXN0aHR0cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NzBiMmIK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJraXRz
b3VwcmVxdWVzdGh0dHAuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0x
MzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiB3ZWJraXRzb3VwcmVxdWVzdGh0dHBfaAorI2RlZmlu
ZSB3ZWJraXRzb3VwcmVxdWVzdGh0dHBfaCAxCisKKyNpbmNsdWRlICJ3ZWJraXRzb3VwcmVxdWVz
dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfU09VUF9S
RVFVRVNUX0hUVFAgICAgICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX2dldF90eXBl
ICgpKQorI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNUX0hUVFAob2JqZWN0KSAgICAgICAgIChH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iamVjdCksIFdFQktJVF9UWVBFX1NPVVBfUkVR
VUVTVF9IVFRQLCBXZWJLaXRTb3VwUmVxdWVzdEhUVFApKQorI2RlZmluZSBXRUJLSVRfU09VUF9S
RVFVRVNUX0hUVFBfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGts
YXNzKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0hUVFAsIFdlYktpdFNvdXBSZXF1ZXN0SFRU
UENsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfSVNfUkVRVUVTVF9IVFRQKG9iamVjdCkgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmplY3QpLCBXRUJLSVRfVFlQRV9TT1VQ
X1JFUVVFU1RfSFRUUCkpCisjZGVmaW5lIFdFQktJVF9TT1VQX0lTX1JFUVVFU1RfSFRUUF9DTEFT
UyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBXRUJLSVRfVFlQRV9T
T1VQX1JFUVVFU1RfSFRUUCkpCisjZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfSFRUUF9HRVRf
Q0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBXRUJLSVRfVFlQ
RV9TT1VQX1JFUVVFU1RfSFRUUCwgV2ViS2l0U291cFJlcXVlc3RIVFRQQ2xhc3MpKQorCit0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0U291cFJlcXVlc3RIVFRQUHJpdmF0ZSBXZWJLaXRTb3VwUmVxdWVz
dEhUVFBQcml2YXRlOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIFdlYktpdFNvdXBSZXF1
ZXN0IHBhcmVudDsKKworICAgICAgICBXZWJLaXRTb3VwUmVxdWVzdEhUVFBQcml2YXRlICpwcml2
OworfSBXZWJLaXRTb3VwUmVxdWVzdEhUVFA7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICAgICAg
V2ViS2l0U291cFJlcXVlc3RDbGFzcyBwYXJlbnQ7CisKK30gV2ViS2l0U291cFJlcXVlc3RIVFRQ
Q2xhc3M7CisKK0dUeXBlIHdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9nZXRfdHlwZSh2b2lkKTsK
KworU291cE1lc3NhZ2UqIHdlYmtpdFNvdXBSZXF1ZXN0SHR0cEdldE1lc3NhZ2UoV2ViS2l0U291
cFJlcXVlc3RIVFRQKiBodHRwKTsKKworfQorCisjZW5kaWYgLyogd2Via2l0c291cHJlcXVlc3Ro
dHRwX2ggKi8KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L1BhcnNlRlRQTGlzdC5jIGIv
V2ViS2l0L2d0ay93ZWJraXQvUGFyc2VGVFBMaXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uM2IyNjFhMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9ndGsvd2Via2l0
L1BhcnNlRlRQTGlzdC5jCkBAIC0wLDAgKzEsMTg0MiBAQAorLyogKioqKiogQkVHSU4gTElDRU5T
RSBCTE9DSyAqKioqKgorICogVmVyc2lvbjogTVBMIDEuMS9HUEwgMi4wL0xHUEwgMi4xCisgKgor
ICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQ
dWJsaWMgTGljZW5zZSBWZXJzaW9uCisgKiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5v
dCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKKyAqIHRoZSBMaWNlbnNl
LiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cu
bW96aWxsYS5vcmcvTVBMLworICoKKyAqIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBM
aWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCisgKiBXSVRIT1VUIFdB
UlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExp
Y2Vuc2UKKyAqIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQg
bGltaXRhdGlvbnMgdW5kZXIgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRoZSBPcmlnaW5hbCBD
b2RlIGlzIG1vemlsbGEub3JnIENvZGUuCisgKgorICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9m
IHRoZSBPcmlnaW5hbCBDb2RlIGlzCisgKiBDeXJ1cyBQYXRlbCA8Y3lwQGZiMTQudW5pLW1haW56
LmRlPi4KKyAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBD
b3B5cmlnaHQgKEMpIDIwMDIKKyAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqCisgKiBDb250cmlidXRvcihzKToKKyAqICAgRG91ZyBUdXJuZXIgPGRvdWd0
QG5ldHNjYXBlLmNvbT4KKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhp
cyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICogZWl0aGVyIHRoZSBHTlUg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9y
CisgKiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4xIG9y
IGxhdGVyICh0aGUgIkxHUEwiKSwKKyAqIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2Yg
dGhlIEdQTCBvciB0aGUgTEdQTCBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkCisgKiBvZiB0aG9zZSBh
Ym92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZp
bGUgb25seQorICogdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgR1BMIG9yIHRoZSBMR1BM
LCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0bworICogdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlz
IGZpbGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNUEwsIGluZGljYXRlIHlvdXIKKyAqIGRlY2lz
aW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0
aCB0aGUgbm90aWNlCisgKiBhbmQgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgR1BM
IG9yIHRoZSBMR1BMLiBJZiB5b3UgZG8gbm90IGRlbGV0ZQorICogdGhlIHByb3Zpc2lvbnMgYWJv
dmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlcgor
ICogdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4K
KyAqCisgKiAqKioqKiBFTkQgTElDRU5TRSBCTE9DSyAqKioqKiAqLworCisjaW5jbHVkZSA8c3Rk
aW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRl
IDxjdHlwZS5oPgorCisjaW5jbHVkZSAiUGFyc2VGVFBMaXN0LmgiCisKKy8qID09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ICovCisKK2ludCBQYXJzZUZUUExpc3QoY29uc3QgY2hhciAqbGluZSwgc3RydWN0IGxpc3Rfc3Rh
dGUgKnN0YXRlLAorICAgICAgICAgICAgICAgICBzdHJ1Y3QgbGlzdF9yZXN1bHQgKnJlc3VsdCAp
Cit7CisgIHVuc2lnbmVkIGludCBjYXJyeV9idWZfbGVuOyAvKiBjb3B5IG9mIHN0YXRlLT5jYXJy
eV9idWZfbGVuICovCisgIHVuc2lnbmVkIGludCBsaW5lbGVuLCBwb3M7CisgIGNvbnN0IGNoYXIg
KnA7CisKKyAgaWYgKCFsaW5lIHx8ICFzdGF0ZSB8fCAhcmVzdWx0KQorICAgIHJldHVybiAwOwor
CisgIG1lbXNldCggcmVzdWx0LCAwLCBzaXplb2YoKnJlc3VsdCkgKTsKKyAgaWYgKHN0YXRlLT5t
YWdpYyAhPSAoKHZvaWQgKilQYXJzZUZUUExpc3QpKQorICB7CisgICAgbWVtc2V0KCBzdGF0ZSwg
MCwgc2l6ZW9mKCpzdGF0ZSkgKTsKKyAgICBzdGF0ZS0+bWFnaWMgPSAoKHZvaWQgKilQYXJzZUZU
UExpc3QpOworICB9CisgIHN0YXRlLT5udW1saW5lcysrOworCisgIC8qIGNhcnJ5IGJ1ZmZlciBp
cyBvbmx5IHZhbGlkIGZyb20gb25lIGxpbmUgdG8gdGhlIG5leHQgKi8KKyAgY2FycnlfYnVmX2xl
biA9IHN0YXRlLT5jYXJyeV9idWZfbGVuOworICBzdGF0ZS0+Y2FycnlfYnVmX2xlbiA9IDA7CisK
KyAgbGluZWxlbiA9IDA7CisKKyAgLyogc3RyaXAgbGVhZGluZyB3aGl0ZXNwYWNlICovCisgIHdo
aWxlICgqbGluZSA9PSAnICcgfHwgKmxpbmUgPT0gJ1x0JykKKyAgICBsaW5lKys7CisgICAgCisg
IC8qIGxpbmUgaXMgdGVybWluYXRlZCBhdCBmaXJzdCAnXDAnIG9yICdcbicgKi8KKyAgcCA9IGxp
bmU7CisgIHdoaWxlICgqcCAmJiAqcCAhPSAnXG4nKQorICAgIHArKzsKKyAgbGluZWxlbiA9IHAg
LSBsaW5lOworCisgIGlmIChsaW5lbGVuID4gMCAmJiAqcCA9PSAnXG4nICYmICoocC0xKSA9PSAn
XHInKQorICAgIGxpbmVsZW4tLTsKKworICAvKiBET04nVCBzdHJpcCB0cmFpbGluZyB3aGl0ZXNw
YWNlLiAqLworCisgIGlmIChsaW5lbGVuID4gMCkKKyAgeworICAgIHN0YXRpYyBjb25zdCBjaGFy
ICptb250aF9uYW1lcyA9ICJKYW5GZWJNYXJBcHJNYXlKdW5KdWxBdWdTZXBPY3ROb3ZEZWMiOwor
ICAgIGNvbnN0IGNoYXIgKnRva2Vuc1sxNl07IC8qIDE2IGlzIG1vcmUgdGhhbiBlbm91Z2ggKi8K
KyAgICB1bnNpZ25lZCBpbnQgdG9rbGVuWyhzaXplb2YodG9rZW5zKS9zaXplb2YodG9rZW5zWzBd
KSldOworICAgIHVuc2lnbmVkIGludCBsaW5lbGVuX3NhbnNfd3NwOyAgLy8gbGluZSBsZW5ndGgg
c2FucyB3aGl0ZXNwYWNlCisgICAgdW5zaWduZWQgaW50IG51bXRva3MgPSAwOworICAgIHVuc2ln
bmVkIGludCB0b2ttYXJrZXIgPSAwOyAvKiBleHRyYSBpbmZvIGZvciBsc3R5bGUgaGFuZGxlciAq
LworICAgIHVuc2lnbmVkIGludCBtb250aF9udW0gPSAwOworICAgIGNoYXIgdGJ1Zls0XTsKKyAg
ICBpbnQgbHN0eWxlID0gMDsKKworICAgIGlmIChjYXJyeV9idWZfbGVuKSAvKiBWTVMgbG9uZyBm
aWxlbmFtZSBjYXJyeW92ZXIgYnVmZmVyICovCisgICAgeworICAgICAgdG9rZW5zWzBdID0gc3Rh
dGUtPmNhcnJ5X2J1ZjsKKyAgICAgIHRva2xlblswXSA9IGNhcnJ5X2J1Zl9sZW47CisgICAgICBu
dW10b2tzKys7CisgICAgfQorCisgICAgcG9zID0gMDsKKyAgICB3aGlsZSAocG9zIDwgbGluZWxl
biAmJiBudW10b2tzIDwgKHNpemVvZih0b2tlbnMpL3NpemVvZih0b2tlbnNbMF0pKSApCisgICAg
eworICAgICAgd2hpbGUgKHBvcyA8IGxpbmVsZW4gJiYgCisgICAgICAgICAgICAobGluZVtwb3Nd
ID09ICcgJyB8fCBsaW5lW3Bvc10gPT0gJ1x0JyB8fCBsaW5lW3Bvc10gPT0gJ1xyJykpCisgICAg
ICAgIHBvcysrOworICAgICAgaWYgKHBvcyA8IGxpbmVsZW4pCisgICAgICB7CisgICAgICAgIHRv
a2Vuc1tudW10b2tzXSA9ICZsaW5lW3Bvc107CisgICAgICAgIHdoaWxlIChwb3MgPCBsaW5lbGVu
ICYmIAorICAgICAgICAgICAobGluZVtwb3NdICE9ICcgJyAmJiBsaW5lW3Bvc10gIT0gJ1x0JyAm
JiBsaW5lW3Bvc10gIT0gJ1xyJykpCisgICAgICAgICAgcG9zKys7CisgICAgICAgIGlmICh0b2tl
bnNbbnVtdG9rc10gIT0gJmxpbmVbcG9zXSkKKyAgICAgICAgeworICAgICAgICAgIHRva2xlbltu
dW10b2tzXSA9ICgmbGluZVtwb3NdIC0gdG9rZW5zW251bXRva3NdKTsKKyAgICAgICAgICBudW10
b2tzKys7ICAKKyAgICAgICAgfQorICAgICAgfQorICAgIH0gICAgCisKKyAgICBsaW5lbGVuX3Nh
bnNfd3NwID0gJih0b2tlbnNbbnVtdG9rcy0xXVt0b2tsZW5bbnVtdG9rcy0xXV0pIC0gdG9rZW5z
WzBdOworICAgIGlmIChudW10b2tzID09IChzaXplb2YodG9rZW5zKS9zaXplb2YodG9rZW5zWzBd
KSkgKQorICAgIHsKKyAgICAgIHBvcyA9IGxpbmVsZW47CisgICAgICB3aGlsZSAocG9zID4gMCAm
JiAobGluZVtwb3MtMV0gPT0gJyAnIHx8IGxpbmVbcG9zLTFdID09ICdcdCcpKQorICAgICAgICBw
b3MtLTsKKyAgICAgIGxpbmVsZW5fc2Fuc193c3AgPSBwb3M7CisgICAgfQorCisgICAgLyogKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysg
Ki8KKworI2lmIGRlZmluZWQoU1VQUE9SVF9FUExGKQorICAgIC8qIEVQTEYgaGFuZGxpbmcgbXVz
dCBjb21lIHNvbWV3aGVyZSBiZWZvcmUgL2Jpbi9kbHMgaGFuZGxpbmcuICovCisgICAgaWYgKCFs
c3R5bGUgJiYgKCFzdGF0ZS0+bHN0eWxlIHx8IHN0YXRlLT5sc3R5bGUgPT0gJ0UnKSkKKyAgICB7
CisgICAgICBpZiAoKmxpbmUgPT0gJysnICYmIGxpbmVsZW4gPiA0ICYmIG51bXRva3MgPj0gMikK
KyAgICAgIHsKKyAgICAgICAgcG9zID0gMTsKKyAgICAgICAgd2hpbGUgKHBvcyA8IChsaW5lbGVu
LTEpKQorICAgICAgICB7CisgICAgICAgICAgcCA9ICZsaW5lW3BvcysrXTsKKyAgICAgICAgICBp
ZiAoKnAgPT0gJy8nKSAKKyAgICAgICAgICAgIHJlc3VsdC0+ZmVfdHlwZSA9ICdkJzsgLyogaXRz
IGEgZGlyICovCisgICAgICAgICAgZWxzZSBpZiAoKnAgPT0gJ3InKQorICAgICAgICAgICAgcmVz
dWx0LT5mZV90eXBlID0gJ2YnOyAvKiBpdHMgYSBmaWxlICovCisgICAgICAgICAgZWxzZSBpZiAo
KnAgPT0gJ20nKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpc2RpZ2l0KGxpbmVbcG9z
XSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHdoaWxlIChwb3MgPCBsaW5lbGVuICYm
IGlzZGlnaXQobGluZVtwb3NdKSkKKyAgICAgICAgICAgICAgICBwb3MrKzsKKyAgICAgICAgICAg
ICAgaWYgKHBvcyA8IGxpbmVsZW4gJiYgbGluZVtwb3NdID09ICcsJykKKyAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGd1aW50NjQgc2Vjb25kczsKKwkJdGltZV90IHQ7CisgICAgICAg
ICAgICAgICAgc3NjYW5mKHArMSwgIiUiR19HVUlOVDY0X0ZPUk1BVCwgJnNlY29uZHMpOworCQl0
ID0gc2Vjb25kczsKKwkJcmVzdWx0LT5mZV90aW1lID0gKmxvY2FsdGltZSAoJnQpOworICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYg
KCpwID09ICdzJykKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoaXNkaWdpdChsaW5lW3Bv
c10pKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB3aGlsZSAocG9zIDwgbGluZWxlbiAm
JiBpc2RpZ2l0KGxpbmVbcG9zXSkpCisgICAgICAgICAgICAgICAgcG9zKys7CisgICAgICAgICAg
ICAgIGlmIChwb3MgPCBsaW5lbGVuICYmIGxpbmVbcG9zXSA9PSAnLCcgJiYKKyAgICAgICAgICAg
ICAgICAgKCgmbGluZVtwb3NdKSAtIChwKzEpKSA8IChpbnQpIChzaXplb2YocmVzdWx0LT5mZV9z
aXplKS0xKSApCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtZW1jcHkoIHJlc3Vs
dC0+ZmVfc2l6ZSwgcCsxLCAodW5zaWduZWQpKCZsaW5lW3Bvc10gLSAocCsxKSkgKTsKKyAgICAg
ICAgICAgICAgICByZXN1bHQtPmZlX3NpemVbKCZsaW5lW3Bvc10gLSAocCsxKSldID0gJ1wwJzsK
KyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBl
bHNlIGlmIChpc2FscGhhKCpwKSkgLyogJ2knLyd1cCcgb3IgdW5rbm93biAiZmFjdCIgKHByb3Bl
cnR5KSAqLworICAgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChwb3MgPCBsaW5lbGVuICYm
ICorK3AgIT0gJywnKQorICAgICAgICAgICAgICBwb3MrKzsKKyAgICAgICAgICB9CisgICAgICAg
ICAgZWxzZSBpZiAoKnAgIT0gJ1x0JyB8fCAocCsxKSAhPSB0b2tlbnNbMV0pCisgICAgICAgICAg
eworICAgICAgICAgICAgYnJlYWs7IC8qIGl0cyBub3QgRVBMRiBhZnRlciBhbGwgKi8KKyAgICAg
ICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXRlLT5w
YXJzZWRfb25lID0gMTsKKyAgICAgICAgICAgIHN0YXRlLT5sc3R5bGUgPSBsc3R5bGUgPSAnRSc7
CisKKyAgICAgICAgICAgIHAgPSAmKGxpbmVbbGluZWxlbl9zYW5zX3dzcF0pOworICAgICAgICAg
ICAgcmVzdWx0LT5mZV9mbmFtZSA9IHRva2Vuc1sxXTsKKyAgICAgICAgICAgIHJlc3VsdC0+ZmVf
Zm5sZW4gPSBwIC0gdG9rZW5zWzFdOworCisgICAgICAgICAgICBpZiAoIXJlc3VsdC0+ZmVfdHlw
ZSkgLyogYWNjZXNzIGRlbmllZCAqLworICAgICAgICAgICAgeworICAgICAgICAgICAgICByZXN1
bHQtPmZlX3R5cGUgPSAnZic7IC8qIGlzIGFzc3VtaW5nICdmJ2lsZSBjb3JyZWN0PyAqLworICAg
ICAgICAgICAgICByZXR1cm4gJz8nOyAgICAgICAgICAgIC8qIE5PISBqdW5rIGl0LiAqLworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC0+ZmVfdHlwZTsKKyAgICAgICAg
ICB9CisgICAgICAgICAgaWYgKHBvcyA+PSAobGluZWxlbi0xKSB8fCBsaW5lW3Bvc10gIT0gJywn
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgcG9zKys7CisgICAgICAgIH0gLyogd2hp
bGUgKHBvcyA8IGxpbmVsZW4pICovCisgICAgICAgIG1lbXNldCggcmVzdWx0LCAwLCBzaXplb2Yo
KnJlc3VsdCkgKTsKKyAgICAgIH0gLyogaWYgKCpsaW5lID09ICcrJyAmJiBsaW5lbGVuID4gNCAm
JiBudW10b2tzID49IDIpICovCisgICAgfSAvKiBpZiAoIWxzdHlsZSAmJiAoIXN0YXRlLT5sc3R5
bGUgfHwgc3RhdGUtPmxzdHlsZSA9PSAnRScpKSAqLworI2VuZGlmIC8qIFNVUFBPUlRfRVBMRiAq
LworCisgICAgLyogKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysgKi8KKworI2lmIGRlZmluZWQoU1VQUE9SVF9WTVMpCisgICAgaWYgKCFs
c3R5bGUgJiYgKCFzdGF0ZS0+bHN0eWxlIHx8IHN0YXRlLT5sc3R5bGUgPT0gJ1YnKSkKKyAgICB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cnkgVk1TIE11bHRpbmV0L1VDWC9DTVMgc2Vy
dmVyICovCisgICAgICAvKgorICAgICAgICogTGVnYWwgY2hhcmFjdGVycyBpbiBhIFZNUyBmaWxl
L2RpciBzcGVjIGFyZSBbQS1aMC05JC4tX35dLgorICAgICAgICogJyQnIGNhbm5vdCBiZWdpbiBh
IGZpbGVuYW1lIGFuZCBgLScgY2Fubm90IGJlIHVzZWQgYXMgdGhlIGZpcnN0IAorICAgICAgICog
b3IgbGFzdCBjaGFyYWN0ZXIuICcuJyBpcyBvbmx5IHZhbGlkIGFzIGEgZGlyZWN0b3J5IHNlcGFy
YXRvciAKKyAgICAgICAqIGFuZCA8ZmlsZT4uPHR5cGU+IHNlcGFyYXRvci4gQSBjYW5vbmljYWwg
ZmlsZW5hbWUgc3BlYyBtaWdodCBsb29rIAorICAgICAgICogbGlrZSB0aGlzOiBESVNLJFZPTDpb
RElSMS5ESVIyLkRJUjNdRklMRS5UWVBFOzEyMworICAgICAgICogQWxsIFZNUyBGVFAgc2VydmVy
cyBMSVNUIGluIHVwcGVyY2FzZS4KKyAgICAgICAqCisgICAgICAgKiBXZSBuZWVkIHRvIGJlIHBp
Y2t5IGFib3V0IHRoaXMgaW4gb3JkZXIgdG8gc3VwcG9ydAorICAgICAgICogbXVsdGktbGluZSBs
aXN0aW5ncyBjb3JyZWN0bHkuCisgICAgICAqLworICAgICAgaWYgKCFzdGF0ZS0+cGFyc2VkX29u
ZSAmJgorICAgICAgICAgIChudW10b2tzID09IDEgfHwgKG51bXRva3MgPT0gMiAmJiB0b2tsZW5b
MF0gPT0gOSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNtcCh0b2tlbnNbMF0s
ICJEaXJlY3RvcnkiLCA5KT09MCApKSkKKyAgICAgIHsKKyAgICAgICAgLyogSWYgbm8gZGlyc3R5
bGUgaGFzIGJlZW4gZGV0ZWN0ZWQgeWV0LCBhbmQgdGhpcyBsaW5lIGlzIGEgCisgICAgICAgICAq
IFZNUyBsaXN0J3MgZGlybmFtZSwgdGhlbiB0dXJuIG9uIFZNUyBkaXJzdHlsZS4KKyAgICAgICAg
ICogZWcgIkFDQTpbQU5PTllNT1VTXSIsICJESVNLJEZUUDpbQU5PTllNT1VTXSIsICJTWVMkQU5P
TkZUUDoiIAorICAgICAgICAqLworICAgICAgICBwID0gdG9rZW5zWzBdOworICAgICAgICBwb3Mg
PSB0b2tsZW5bMF07CisgICAgICAgIGlmIChudW10b2tzID09IDIpCisgICAgICAgIHsKKyAgICAg
ICAgICBwID0gdG9rZW5zWzFdOworICAgICAgICAgIHBvcyA9IHRva2xlblsxXTsKKyAgICAgICAg
fQorICAgICAgICBwb3MtLTsKKyAgICAgICAgaWYgKHBvcyA+PSAzKQorICAgICAgICB7CisgICAg
ICAgICAgd2hpbGUgKHBvcyA+IDAgJiYgcFtwb3NdICE9ICdbJykKKyAgICAgICAgICB7CisgICAg
ICAgICAgICBwb3MtLTsKKyAgICAgICAgICAgIGlmIChwW3Bvc10gPT0gJy0nIHx8IHBbcG9zXSA9
PSAnJCcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmIChwb3MgPT0gMCB8fCBwW3Bv
cy0xXSA9PSAnWycgfHwgcFtwb3MtMV0gPT0gJy4nIHx8CisgICAgICAgICAgICAgICAgICAocFtw
b3NdID09ICctJyAmJiAocFtwb3MrMV0gPT0gJ10nIHx8IHBbcG9zKzFdID09ICcuJykpKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAo
cFtwb3NdICE9ICcuJyAmJiBwW3Bvc10gIT0gJ34nICYmIAorICAgICAgICAgICAgICAgICAgICAg
IWlzZGlnaXQocFtwb3NdKSAmJiAhaXNhbHBoYShwW3Bvc10pKQorICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzYWxwaGEocFtwb3NdKSAmJiBwW3Bvc10gIT0gdG91
cHBlcihwW3Bvc10pKQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAg
ICAgaWYgKHBvcyA+IDApCisgICAgICAgICAgeworICAgICAgICAgICAgcG9zLS07CisgICAgICAg
ICAgICBpZiAocFtwb3NdICE9ICc6JyB8fCBwW3BvcysxXSAhPSAnWycpCisgICAgICAgICAgICAg
IHBvcyA9IDA7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChwb3MgPiAwICYm
IHBbcG9zXSA9PSAnOicpCisgICAgICAgIHsKKyAgICAgICAgICB3aGlsZSAocG9zID4gMCkKKyAg
ICAgICAgICB7CisgICAgICAgICAgICBwb3MtLTsKKyAgICAgICAgICAgIGlmIChwW3Bvc10gIT0g
JyQnICYmIHBbcG9zXSAhPSAnXycgJiYgcFtwb3NdICE9ICctJyAmJgorICAgICAgICAgICAgICAg
IHBbcG9zXSAhPSAnficgJiYgIWlzZGlnaXQocFtwb3NdKSAmJiAhaXNhbHBoYShwW3Bvc10pKQor
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzYWxwaGEocFtwb3Nd
KSAmJiBwW3Bvc10gIT0gdG91cHBlcihwW3Bvc10pKQorICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICB9CisgICAgICAgICAgaWYgKHBvcyA9PSAwKQorICAgICAgICAgIHsgIAorICAgICAg
ICAgICAgc3RhdGUtPmxzdHlsZSA9ICdWJzsKKyAgICAgICAgICAgIHJldHVybiAnPyc7IC8qIGl0
cyBqdW5rICovCisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8qIGZhbGx0aHJvdWdo
ICovIAorICAgICAgfQorICAgICAgZWxzZSBpZiAoKHRva2Vuc1swXVt0b2tsZW5bMF0tMV0pICE9
ICc7JykKKyAgICAgIHsKKyAgICAgICAgaWYgKG51bXRva3MgPT0gMSAmJiAoc3RhdGUtPmxzdHls
ZSA9PSAnVicgJiYgIWNhcnJ5X2J1Zl9sZW4pKQorICAgICAgICAgIGxzdHlsZSA9ICdWJzsKKyAg
ICAgICAgZWxzZSBpZiAobnVtdG9rcyA8IDQpCisgICAgICAgICAgOworICAgICAgICBlbHNlIGlm
ICh0b2tsZW5bMV0gPj0gMTAgJiYgbWVtY21wKHRva2Vuc1sxXSwgIiVSTVMtRS1QUlYiLCAxMCkg
PT0gMCkKKyAgICAgICAgICBsc3R5bGUgPSAnVic7CisgICAgICAgIGVsc2UgaWYgKCgmbGluZVts
aW5lbGVuXSAtIHRva2Vuc1sxXSkgPj0gMjIgJiYKKyAgICAgICAgICAgICAgICAgIG1lbWNtcCh0
b2tlbnNbMV0sICJpbnN1ZmZpY2llbnQgcHJpdmlsZWdlIiwgMjIpID09IDApCisgICAgICAgICAg
bHN0eWxlID0gJ1YnOworICAgICAgICBlbHNlIGlmIChudW10b2tzICE9IDQgJiYgbnVtdG9rcyAh
PSA2KQorICAgICAgICAgIDsKKyAgICAgICAgZWxzZSBpZiAobnVtdG9rcyA9PSA2ICYmICgKKyAg
ICAgICAgICAgICAgICAgdG9rbGVuWzVdIDwgNCB8fCAqdG9rZW5zWzVdICE9ICcoJyB8fCAgICAg
ICAgLyogcGVybXMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICh0b2tlbnNbNV1bdG9r
bGVuWzVdLTFdKSAhPSAnKScgICkpCisgICAgICAgICAgOworICAgICAgICBlbHNlIGlmICggICh0
b2tsZW5bMl0gPT0gMTAgfHwgdG9rbGVuWzJdID09IDExKSAmJiAgICAgIAorICAgICAgICAgICAg
ICAgICAgICAgICAgKHRva2Vuc1syXVt0b2tsZW5bMl0tNV0pID09ICctJyAmJgorICAgICAgICAg
ICAgICAgICAgICAgICAgKHRva2Vuc1syXVt0b2tsZW5bMl0tOV0pID09ICctJyAmJgorICAgICAg
ICAoKCh0b2tsZW5bM109PTQgfHwgdG9rbGVuWzNdPT01IHx8IHRva2xlblszXT09NyB8fCB0b2ts
ZW5bM109PTgpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAodG9rZW5zWzNdW3Rva2xlblsz
XS0zXSkgPT0gJzonICkgfHwKKyAgICAgICAgICgodG9rbGVuWzNdPT0xMCB8fCB0b2tsZW5bM109
PTExICkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICh0b2tlbnNbM11bdG9rbGVuWzNdLTNd
KSA9PSAnLicgKQorICAgICAgICApICYmICAvKiB0aW1lIGluIFtIXUg6TU1bOlNTWy5DQ11dIGZv
cm1hdCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNkaWdpdCgqdG9r
ZW5zWzFdKSAmJiAvKiBzaXplICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpc2RpZ2l0KCp0b2tlbnNbMl0pICYmIC8qIGRhdGUgKi8KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlzZGlnaXQoKnRva2Vuc1szXSkgICAgLyogdGltZSAqLworICAgICAg
ICAgICAgICAgICkKKyAgICAgICAgeworICAgICAgICAgIGxzdHlsZSA9ICdWJzsKKyAgICAgICAg
fQorICAgICAgICBpZiAobHN0eWxlID09ICdWJykKKyAgICAgICAgeworICAgICAgICAgIC8qIAor
ICAgICAgICAgICogTXVsdGlOZXQgRlRQOgorICAgICAgICAgICogICBMT0dJTi5DT007MiAgICAg
ICAgICAgICAgICAgMSAgIDQtTk9WLTE5OTQgMDQ6MDkgW0FOT05ZTU9VU10gKFJXRSxSV0UsLCkK
KyAgICAgICAgICAqICAgUFVCLkRJUjsxICAgICAgICAgICAgICAgICAgIDEgIDI3LUpBTi0xOTk0
IDE0OjQ2IFtBTk9OWU1PVVNdIChSV0UsUldFLFJFLFJXRSkKKyAgICAgICAgICAqICAgUkVBRE1F
LkZUUDsxICAgICAgICAlUk1TLUUtUFJWLCBpbnN1ZmZpY2llbnQgcHJpdmlsZWdlIG9yIGZpbGUg
cHJvdGVjdGlvbiB2aW9sYXRpb24KKyAgICAgICAgICAqICAgUk9VU1NPUy5ESVI7MSAgICAgICAg
ICAgICAgIDEgIDI3LUpBTi0xOTk0IDE0OjQ4IFtDUyxST1VTU09TXSAoUldFLFJXRSxSRSxSKQor
ICAgICAgICAgICogICBTNjctNTA5MDMuSlBHOzEgICAgICAgICAgIDMyOCAgMjItU0VQLTE5OTgg
MTY6MTkgW0FOT05ZTU9VU10gKFJXRUQsUldFRCwsKQorICAgICAgICAgICogVUNYIEZUUDogCisg
ICAgICAgICAgKiAgIENJSS1NQU5VQUwuVEVYOzEgIDIxMy8yMTYgIDI5LUpBTi0xOTk2IDAzOjMz
OjEyICBbQU5PTllNT1UsQU5PTllNT1VTXSAoUldFRCxSV0VELCwpCisgICAgICAgICAgKiBDTVUv
Vk1TLUlQIEZUUAorICAgICAgICAgICogICBbVk1TU0VSVi5GSUxFU11BTEFSTS5ESVI7MSAxLzMg
NS1NQVItMTk5MyAxODowOQorICAgICAgICAgICogVENQd2FyZSBGVFAKKyAgICAgICAgICAqICAg
Rk9PLkJBUjsxIDQgNS1NQVItMTk5MyAxODowOTowMS4xMgorICAgICAgICAgICogTG9uZyBmaWxl
bmFtZSBleGFtcGxlOgorICAgICAgICAgICogICBUSElTLUlTLUEtTE9ORy1WTVMtRklMRU5BTUUu
QU5ELVRISVMtSVMtQS1MT05HLVZNUy1GSUxFVFlQRVxyXG4KKyAgICAgICAgICAqICAgICAgICAg
ICAgICAgICAgICAyMTNbL25ubl0gIDI5LUpBTi0xOTk2IDAzOjMzWzpubl0gIFtBTk9OWU1PVSxB
Tk9OWU1PVVNdIChSV0VELFJXRUQsLCkKKyAgICAgICAgICAqLworICAgICAgICAgIHRva21hcmtl
ciA9IDA7CisgICAgICAgICAgcCA9IHRva2Vuc1swXTsKKyAgICAgICAgICBwb3MgPSAwOworICAg
ICAgICAgIGlmICgqcCA9PSAnWycgJiYgdG9rbGVuWzBdID49IDQpIC8qIENNVSBzdHlsZSAqLwor
ICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChwWzFdICE9ICddJykgCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgIHArKzsKKyAgICAgICAgICAgICAgcG9zKys7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICB3aGlsZSAobHN0eWxlICYmIHBvcyA8IHRva2xlblswXSAmJiAqcCAhPSAn
XScpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmICgqcCAhPSAnJCcgJiYgKnAgIT0g
Jy4nICYmICpwICE9ICdfJyAmJiAqcCAhPSAnLScgJiYKKyAgICAgICAgICAgICAgICAgICpwICE9
ICd+JyAmJiAhaXNkaWdpdCgqcCkgJiYgIWlzYWxwaGEoKnApKSAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgbHN0eWxlID0gMDsKKyAgICAgICAgICAgICAgcG9zKys7CisgICAgICAgICAg
ICAgIHArKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChsc3R5bGUgJiYgcG9zIDwg
KHRva2xlblswXS0xKSAmJiAqcCA9PSAnXScpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
IHBvcysrOworICAgICAgICAgICAgICBwKys7CisgICAgICAgICAgICAgIHRva21hcmtlciA9IHBv
czsgLyogbGVuZ3RoIG9mIGxlYWRpbmcgIltESVIxLkRJUjIuZXRjXSIgKi8KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICB9CisgICAgICAgICAgd2hpbGUgKGxzdHlsZSAmJiBwb3MgPCB0b2tsZW5b
MF0gJiYgKnAgIT0gJzsnKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgqcCAhPSAnJCcg
JiYgKnAgIT0gJy4nICYmICpwICE9ICdfJyAmJiAqcCAhPSAnLScgJiYKKyAgICAgICAgICAgICAg
ICAqcCAhPSAnficgJiYgIWlzZGlnaXQoKnApICYmICFpc2FscGhhKCpwKSkKKyAgICAgICAgICAg
ICAgbHN0eWxlID0gMDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGlzYWxwaGEoKnApICYmICpwICE9
IHRvdXBwZXIoKnApKQorICAgICAgICAgICAgICBsc3R5bGUgPSAwOworICAgICAgICAgICAgcCsr
OworICAgICAgICAgICAgcG9zKys7CisgICAgICAgICAgfQorICAgICAgICAgIGlmIChsc3R5bGUg
JiYgKnAgPT0gJzsnKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChwb3MgPT0gMCB8fCBw
b3MgPT0gKHRva2xlblswXS0xKSkKKyAgICAgICAgICAgICAgbHN0eWxlID0gMDsKKyAgICAgICAg
ICAgIGZvciAocG9zKys7bHN0eWxlICYmIHBvcyA8IHRva2xlblswXTtwb3MrKykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgaWYgKCFpc2RpZ2l0KHRva2Vuc1swXVtwb3NdKSkKKyAgICAg
ICAgICAgICAgICBsc3R5bGUgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAg
ICAgICBwb3MgPSAocCAtIHRva2Vuc1swXSk7IC8qID0+IGZubGVuZ3RoIHNhbnMgIjsjIyMjIiAq
LworICAgICAgICAgIHBvcyAtPSB0b2ttYXJrZXI7ICAgICAgLyogPT4gZm5sZW5ndGggc2FucyAi
W0RJUjEuRElSMi5ldGNdIiAqLworICAgICAgICAgIHAgPSAmKHRva2Vuc1swXVt0b2ttYXJrZXJd
KTsgLyogb2Zmc2V0IG9mIGJhc2VuYW1lICovCisKKyAgICAgICAgICBpZiAoIWxzdHlsZSB8fCBw
b3MgPiA4MCkgLyogVk1TIGZpbGVuYW1lcyBjYW4ndCBiZSBsb25nZXIgdGhhbiB0aGF0ICovCisg
ICAgICAgICAgeworICAgICAgICAgICAgbHN0eWxlID0gMDsKKyAgICAgICAgICB9CisgICAgICAg
ICAgZWxzZSBpZiAobnVtdG9rcyA9PSAxKQorICAgICAgICAgIHsgCisgICAgICAgICAgICAvKiBp
ZiBWTVMgaGFzIGJlZW4gZGV0ZWN0ZWQgYW5kIHRoZXJlIGlzIG9ubHkgb25lIHRva2VuIGFuZCB0
aGF0IAorICAgICAgICAgICAgICogdG9rZW4gd2FzIGEgVk1TIGZpbGVuYW1lIHRoZW4gdGhpcyBp
cyBhIG11bHRpbGluZSBWTVMgTElTVCBlbnRyeS4KKyAgICAgICAgICAgICovCisgICAgICAgICAg
ICBpZiAocG9zID49IChzaXplb2Yoc3RhdGUtPmNhcnJ5X2J1ZiktMSkpCisgICAgICAgICAgICAg
IHBvcyA9IChzaXplb2Yoc3RhdGUtPmNhcnJ5X2J1ZiktMSk7IC8qIHNob3VsZG4ndCBoYXBwZW4g
Ki8KKyAgICAgICAgICAgIG1lbWNweSggc3RhdGUtPmNhcnJ5X2J1ZiwgcCwgcG9zICk7CisgICAg
ICAgICAgICBzdGF0ZS0+Y2FycnlfYnVmX2xlbiA9IHBvczsKKyAgICAgICAgICAgIHJldHVybiAn
Pyc7IC8qIHRlbGwgY2FsbGVyIHRvIHRyZWF0IGFzIGp1bmsgKi8KKyAgICAgICAgICB9CisgICAg
ICAgICAgZWxzZSBpZiAoaXNkaWdpdCgqdG9rZW5zWzFdKSkgLyogbm90IG5vLXByaXZzIG1lc3Nh
Z2UgKi8KKyAgICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHBvcyA9IDA7IGxzdHlsZSAmJiBw
b3MgPCAodG9rbGVuWzFdKTsgcG9zKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlm
ICghaXNkaWdpdCgodG9rZW5zWzFdW3Bvc10pKSAmJiAodG9rZW5zWzFdW3Bvc10pICE9ICcvJykK
KyAgICAgICAgICAgICAgICBsc3R5bGUgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKGxzdHlsZSAmJiBudW10b2tzID4gNCkgLyogTXVsdGluZXQgb3IgVUNYIGJ1dCBub3QgQ01V
ICovCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZvciAocG9zID0gMTsgbHN0eWxlICYm
IHBvcyA8ICh0b2tsZW5bNV0tMSk7IHBvcysrKQorICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcCA9ICYodG9rZW5zWzVdW3Bvc10pOworICAgICAgICAgICAgICAgIGlmICgqcCE9J1In
ICYmICpwIT0nVycgJiYgKnAhPSdFJyAmJiAqcCE9J0QnICYmICpwIT0nLCcpCisgICAgICAgICAg
ICAgICAgICBsc3R5bGUgPSAwOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgfQorICAgICAgICB9IC8qIHBhc3NlZCBpbml0aWFsIHRlc3RzICovCisgICAgICB9IC8q
IGVsc2UgaWYgKCh0b2tlbnNbMF1bdG9rbGVuWzBdLTFdKSAhPSAnOycpICovICAgIAorCisgICAg
ICBpZiAobHN0eWxlID09ICdWJykKKyAgICAgIHsKKyAgICAgICAgc3RhdGUtPnBhcnNlZF9vbmUg
PSAxOworICAgICAgICBzdGF0ZS0+bHN0eWxlID0gbHN0eWxlOworCisgICAgICAgIGlmIChpc2Rp
Z2l0KCp0b2tlbnNbMV0pKSAgLyogbm90IHBlcm1pc3Npb24gZGVuaWVkIGV0YyAqLworICAgICAg
ICB7CisgICAgICAgICAgLyogc3RyaXAgbGVhZGluZyBkaXJlY3RvcnkgbmFtZSAqLworICAgICAg
ICAgIGlmICgqdG9rZW5zWzBdID09ICdbJykgLyogQ01VIHNlcnZlciAqLworICAgICAgICAgIHsK
KyAgICAgICAgICAgIHBvcyA9IHRva2xlblswXS0xOworICAgICAgICAgICAgcCA9IHRva2Vuc1sw
XSsxOworICAgICAgICAgICAgd2hpbGUgKCpwICE9ICddJykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgcCsrOworICAgICAgICAgICAgICBwb3MtLTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHRva2xlblswXSA9IC0tcG9zOworICAgICAgICAgICAgdG9rZW5zWzBdID0gKytwOwor
ICAgICAgICAgIH0KKyAgICAgICAgICBwb3MgPSAwOworICAgICAgICAgIHdoaWxlIChwb3MgPCB0
b2tsZW5bMF0gJiYgKHRva2Vuc1swXVtwb3NdKSAhPSAnOycpCisgICAgICAgICAgICBwb3MrKzsK
KyAgICAgICAKKyAgICAgICAgICByZXN1bHQtPmZlX2NpbmZzID0gMTsKKyAgICAgICAgICByZXN1
bHQtPmZlX3R5cGUgPSAnZic7CisgICAgICAgICAgcmVzdWx0LT5mZV9mbmFtZSA9IHRva2Vuc1sw
XTsKKyAgICAgICAgICByZXN1bHQtPmZlX2ZubGVuID0gcG9zOworCisgICAgICAgICAgaWYgKHBv
cyA+IDQpCisgICAgICAgICAgeworICAgICAgICAgICAgcCA9ICYodG9rZW5zWzBdW3Bvcy00XSk7
CisgICAgICAgICAgICBpZiAocFswXSA9PSAnLicgJiYgcFsxXSA9PSAnRCcgJiYgcFsyXSA9PSAn
SScgJiYgcFszXSA9PSAnUicpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHJlc3VsdC0+
ZmVfZm5sZW4gLT0gNDsKKyAgICAgICAgICAgICAgcmVzdWx0LT5mZV90eXBlID0gJ2QnOworICAg
ICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAgIGlmIChyZXN1bHQtPmZlX3R5cGUg
IT0gJ2QnKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qICMjIyMgb3IgdXNlZC9hbGxvY2F0
ZWQgZm9ybS4gSWYgdXNlZC9hbGxvY2F0ZWQgZm9ybSwgdGhlbgorICAgICAgICAgICAgICogJ3Vz
ZWQnIGlzIHRoZSBzaXplIGluIGJ5dGVzIGlmIGFuZCBvbmx5IGlmICd1c2VkJzw9YWxsb2NhdGVk
LgorICAgICAgICAgICAgICogSWYgJ3VzZWQnIGlzIHNpemUgaW4gYnl0ZXMgdGhlbiBpdCBjYW4g
YmUgPiAyXjMyCisgICAgICAgICAgICAgKiBJZiAndXNlZCcgaXMgbm90IHNpemUgaW4gYnl0ZXMg
dGhlbiBpdCBpcyBzaXplIGluIGJsb2Nrcy4KKyAgICAgICAgICAgICovCisgICAgICAgICAgICBw
b3MgPSAwOworICAgICAgICAgICAgd2hpbGUgKHBvcyA8IHRva2xlblsxXSAmJiAodG9rZW5zWzFd
W3Bvc10pICE9ICcvJykKKyAgICAgICAgICAgICAgcG9zKys7CisgICAgICAgICAgICAKKy8qCisg
KiBJJ3ZlIG5ldmVyIHNlZW4gc2l6ZSBjb21lIGJhY2sgaW4gYnl0ZXMsIGl0cyBhbHdheXMgaW4g
YmxvY2tzLCBhbmQgCisgKiB0aGUgZm9sbG93aW5nIHRlc3QgZmFpbHMuIFNvLCBhbHdheXMgcGVy
Zm9ybSB0aGUgInNpemUgaW4gYmxvY2tzIi4KKyAqIEknbSBsZWF2aW5nIHRoZSAic2l6ZSBpbiBi
eXRlcyIgY29kZSBpZidkIG91dCBpbiBjYXNlIHdlIGV2ZXIgbmVlZAorICogdG8gcmUtaW5zdGF0
ZSBpdC4KKyovCisjaWYgMAorICAgICAgICAgICAgaWYgKHBvcyA8IHRva2xlblsxXSAmJiAoIChw
b3M8PDEpID4gKHRva2xlblsxXS0xKSB8fAorICAgICAgICAgICAgICAgICAoc3RydG91bCh0b2tl
bnNbMV0sIChjaGFyICoqKTAsIDEwKSA+IAorICAgICAgICAgICAgICAgICAgc3RydG91bCh0b2tl
bnNbMV0rcG9zKzEsIChjaGFyICoqKTAsIDEwKSkgICAgICAgICkpCisgICAgICAgICAgICB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzaXplIGlzIGluIGJ5dGVzICovCisg
ICAgICAgICAgICAgIGlmIChwb3MgPiAoc2l6ZW9mKHJlc3VsdC0+ZmVfc2l6ZSktMSkpCisgICAg
ICAgICAgICAgICAgcG9zID0gc2l6ZW9mKHJlc3VsdC0+ZmVfc2l6ZSktMTsKKyAgICAgICAgICAg
ICAgbWVtY3B5KCByZXN1bHQtPmZlX3NpemUsIHRva2Vuc1sxXSwgcG9zICk7CisgICAgICAgICAg
ICAgIHJlc3VsdC0+ZmVfc2l6ZVtwb3NdID0gJ1wwJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UgLyogc2l6ZSBpcyBpbiBibG9ja3MgKi8KKyNlbmRpZgorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAvKiBzaXplIHJlcXVpcmVzIG11bHRpcGxpY2F0aW9uIGJ5IGJsb2Nrc2l6
ZS4gCisgICAgICAgICAgICAgICAqCisgICAgICAgICAgICAgICAqIFdlIGNvdWxkIGFzc3VtZSBi
bG9ja3NpemUgaXMgNTEyIChsaWtlIEx5bnggZG9lcykgYW5kCisgICAgICAgICAgICAgICAqIHNo
aWZ0IGJ5IDksIGJ1dCB0aGF0IG1pZ2h0IG5vdCBiZSByaWdodC4gRXZlbiBpZiBpdCAKKyAgICAg
ICAgICAgICAgICogd2VyZSwgZG9pbmcgdGhhdCB3b3VsZG4ndCByZWZsZWN0IHdoYXQgdGhlIGZp
bGUncyAKKyAgICAgICAgICAgICAgICogcmVhbCBzaXplIHdhcy4gVGhlIHNhbmVzdCB0aGluZyB0
byBkbyBpcyBub3QgdXNlIHRoZQorICAgICAgICAgICAgICAgKiBMSVNUaW5nJ3MgZmlsZXNpemUs
IHNvIHdlIHdvbid0IChsaWtlIGZ0cG1pcnJvcikuCisgICAgICAgICAgICAgICAqCisgICAgICAg
ICAgICAgICAqIHVsbHRvYSgoKHVuc2lnbmVkIGxvbmcgbG9uZylmc3opPDw5LCByZXN1bHQtPmZl
X3NpemUsIDEwKTsKKyAgICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAgICogQSBibG9jayBp
cyBhbHdheXMgNTEyIGJ5dGVzIG9uIE9wZW5WTVMsIGNvbXB1dGUgc2l6ZS4KKyAgICAgICAgICAg
ICAgICogU28gaXRzIHJvdW5kZWQgdXAgdG8gdGhlIG5leHQgYmxvY2ssIHNvIHdoYXQsIGl0cyBi
ZXR0ZXIKKyAgICAgICAgICAgICAgICogdGhhbiBub3Qgc2hvd2luZyB0aGUgc2l6ZSBhdCBhbGwu
CisgICAgICAgICAgICAgICAqIEEgYmxvY2sgaXMgYWx3YXlzIDUxMiBieXRlcyBvbiBPcGVuVk1T
LCBjb21wdXRlIHNpemUuCisgICAgICAgICAgICAgICAqIFNvIGl0cyByb3VuZGVkIHVwIHRvIHRo
ZSBuZXh0IGJsb2NrLCBzbyB3aGF0LCBpdHMgYmV0dGVyCisgICAgICAgICAgICAgICAqIHRoYW4g
bm90IHNob3dpbmcgdGhlIHNpemUgYXQgYWxsLgorICAgICAgICAgICAgICAqLworICAgICAgICAg
ICAgICBndWludDY0IGZzejsKKyAgICAgICAgICAgICAgZnN6ID0gZ19hc2NpaV9zdHJ0b3VsbCAo
dG9rZW5zWzFdLCAoY2hhciAqKikwLCAxMCk7CisJICAgICAgZnN6ICo9IDUxMjsKKyAgICAgICAg
ICAgICAgZ19zbnByaW50ZihyZXN1bHQtPmZlX3NpemUsIHNpemVvZihyZXN1bHQtPmZlX3NpemUp
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiR19HVUlOVDY0X0ZPUk1BVCwgZnN6KTsK
KyAgICAgICAgICAgIH0gCisKKyAgICAgICAgICB9IC8qIGlmIChyZXN1bHQtPmZlX3R5cGUgIT0g
J2QnKSAqLworCisgICAgICAgICAgcCA9IHRva2Vuc1syXSArIDI7CisgICAgICAgICAgaWYgKCpw
ID09ICctJykKKyAgICAgICAgICAgIHArKzsKKyAgICAgICAgICB0YnVmWzBdID0gcFswXTsKKyAg
ICAgICAgICB0YnVmWzFdID0gdG9sb3dlcihwWzFdKTsKKyAgICAgICAgICB0YnVmWzJdID0gdG9s
b3dlcihwWzJdKTsKKyAgICAgICAgICBtb250aF9udW0gPSAwOworICAgICAgICAgIGZvciAocG9z
ID0gMDsgcG9zIDwgKDEyKjMpOyBwb3MrPTMpCisgICAgICAgICAgeworICAgICAgICAgICAgaWYg
KHRidWZbMF0gPT0gbW9udGhfbmFtZXNbcG9zKzBdICYmIAorICAgICAgICAgICAgICAgIHRidWZb
MV0gPT0gbW9udGhfbmFtZXNbcG9zKzFdICYmIAorICAgICAgICAgICAgICAgIHRidWZbMl0gPT0g
bW9udGhfbmFtZXNbcG9zKzJdKQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIG1v
bnRoX251bSsrOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAobW9udGhfbnVtID49IDEyKQor
ICAgICAgICAgICAgbW9udGhfbnVtID0gMDsKKyAgICAgICAgICByZXN1bHQtPmZlX3RpbWUudG1f
bW9uID0gbW9udGhfbnVtOworICAgICAgICAgIHJlc3VsdC0+ZmVfdGltZS50bV9tZGF5ID0gYXRv
aSh0b2tlbnNbMl0pOworICAgICAgICAgIHJlc3VsdC0+ZmVfdGltZS50bV95ZWFyID0gYXRvaShw
KzQpOyAvLyBOU1BSIHdhbnRzIHllYXIgYXMgWFhYWAorCisgICAgICAgICAgcCA9IHRva2Vuc1sz
XSArIDI7CisgICAgICAgICAgaWYgKCpwID09ICc6JykKKyAgICAgICAgICAgIHArKzsKKyAgICAg
ICAgICBpZiAocFsyXSA9PSAnOicpCisgICAgICAgICAgICByZXN1bHQtPmZlX3RpbWUudG1fc2Vj
ID0gYXRvaShwKzMpOworICAgICAgICAgIHJlc3VsdC0+ZmVfdGltZS50bV9ob3VyID0gYXRvaSh0
b2tlbnNbM10pOworICAgICAgICAgIHJlc3VsdC0+ZmVfdGltZS50bV9taW4gID0gYXRvaShwKTsK
KyAgICAgIAorICAgICAgICAgIHJldHVybiByZXN1bHQtPmZlX3R5cGU7CisKKyAgICAgICAgfSAv
KiBpZiAoaXNkaWdpdCgqdG9rZW5zWzFdKSkgKi8KKworICAgICAgICByZXR1cm4gJz8nOyAvKiBq
dW5rICovCisKKyAgICAgIH0gLyogaWYgKGxzdHlsZSA9PSAnVicpICovCisgICAgfSAvKiBpZiAo
IWxzdHlsZSAmJiAoIXN0YXRlLT5sc3R5bGUgfHwgc3RhdGUtPmxzdHlsZSA9PSAnVicpKSAqLwor
I2VuZGlmCisKKyAgICAvKiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKyAqLworCisjaWYgZGVmaW5lZChTVVBQT1JUX0NNUykKKyAgICAv
KiBWaXJ0dWFsIE1hY2hpbmUvQ29udmVyc2F0aW9uYWwgTW9uaXRvciBTeXN0ZW0gKElCTSBNYWlu
ZnJhbWUpICovCisgICAgaWYgKCFsc3R5bGUgJiYgKCFzdGF0ZS0+bHN0eWxlIHx8IHN0YXRlLT5s
c3R5bGUgPT0gJ0MnKSkgIC8qIFZNL0NNUyAqLworICAgIHsKKyAgICAgIC8qIExJU1RpbmcgYWNj
b3JkaW5nIHRvIG1pcnJvci5wbAorICAgICAgICogRmlsZW5hbWUgRmlsZVR5cGUgIEZtIEZvcm1h
dCBMcmVjbCAgUmVjb3JkcyBCbG9ja3MgRGF0ZSAgICAgIFRpbWUKKyAgICAgICAqIExBU1RJTkcg
IEdMT0JBTFYgICBBMSBWICAgICAgNDEgICAgIDIxICAgICAxICAgICAgIDkvMTYvOTEgICAxNTox
MDozMgorICAgICAgICogSjQzNDAxICAgTkVUTE9HICAgIEEwIFYgICAgICA3NyAgICAgMSAgICAg
IDEgICAgICAgOS8xMi85MSAgIDEyOjM2OjA0CisgICAgICAgKiBQUk9GSUxFICBFWEVDICAgICAg
QTEgViAgICAgIDE3ICAgICAzICAgICAgMSAgICAgICA5LzEyLzkxICAgMTI6Mzk6MDcKKyAgICAg
ICAqIERJUlVOSVggIFNDUklQVCAgICBBMSBWICAgICAgNzcgICAgIDEyMTYgICAxNyAgICAgIDEv
MDQvOTMgICAyMDozMDo0NworICAgICAgICogTUFJTCAgICAgUFJPRklMRSAgIEEyIEYgICAgICA4
MCAgICAgMSAgICAgIDEgICAgICAgMTAvMTQvOTIgIDE2OjEyOjI3CisgICAgICAgKiBCQURZMksg
ICBURVhUICAgICAgQTAgViAgICAgIDEgICAgICAxICAgICAgMSAgICAgICAxLzAzLzEwMiAgMTA6
MTE6MTIKKyAgICAgICAqIEFVVEhPUlMgICAgICAgICAgICBBMSBESVIgICAgLSAgICAgIC0gICAg
ICAtICAgICAgIDkvMjAvOTkgICAxMDozMToxMQorICAgICAgICoKKyAgICAgICAqIExJU1Rpbmcg
ZnJvbSB2bS5tYXJpc3QuZWR1IGFuZCB2bS5zYy5lZHUKKyAgICAgICAqIDIyMC1GVFBTRVJWRSBJ
Qk0gVk0gTGV2ZWwgNDIwIGF0IFZNLk1BUklTVC5FRFUsIDA0OjU4OjEyIEVEVCBXRURORVNEQVkg
MjAwMi0wNy0xMAorICAgICAgICogQVVUSE9SUyAgICAgICAgICAgRElSICAgICAgICAtICAgICAg
ICAgIC0gICAgICAgICAgLSAxOTk5LTA5LTIwIDEwOjMxOjExIC0KKyAgICAgICAqIEhBUlJJTkdU
T04gICAgICAgIERJUiAgICAgICAgLSAgICAgICAgICAtICAgICAgICAgIC0gMTk5Ny0wMi0xMiAx
NTozMzoyOCAtCisgICAgICAgKiBQSUNTICAgICAgICAgICAgICBESVIgICAgICAgIC0gICAgICAg
ICAgLSAgICAgICAgICAtIDIwMDAtMTAtMTIgMTU6NDM6MjMgLQorICAgICAgICogU1lTRklMRSAg
ICAgICAgICAgRElSICAgICAgICAtICAgICAgICAgIC0gICAgICAgICAgLSAyMDAwLTA3LTIwIDE3
OjQ4OjAxIC0KKyAgICAgICAqIFdFTENOVlQgIEVYRUMgICAgIFYgICAgICAgICA3MiAgICAgICAg
ICA5ICAgICAgICAgIDEgMTk5OS0wOS0yMCAxNzoxNjoxOCAtCisgICAgICAgKiBXRUxDT01FICBF
UkVBRE1FICBGICAgICAgICAgODAgICAgICAgICAyMSAgICAgICAgICAxIDE5OTktMTItMjcgMTY6
MTk6MDAgLQorICAgICAgICogV0VMQ09NRSAgUkVBRE1FICAgViAgICAgICAgIDgyICAgICAgICAg
MjEgICAgICAgICAgMSAxOTk5LTEyLTI3IDE2OjE5OjA0IC0KKyAgICAgICAqIFJFQURNRSAgIEFO
T05ZTU9VIFYgICAgICAgICA3MSAgICAgICAgIDI2ICAgICAgICAgIDEgMTk5Ny0wNC0wMiAxMjoz
MzoyMCBUQ1AyOTEKKyAgICAgICAqIFJFQURNRSAgIEFOT05ZT0xEIFYgICAgICAgICA3MSAgICAg
ICAgIDE1ICAgICAgICAgIDEgMTk5NS0wOC0yNSAxNjowNDoyNyBUQ1AyOTEKKyAgICAgICovCisg
ICAgICBpZiAobnVtdG9rcyA+PSA3ICYmICh0b2tsZW5bMF0rdG9rbGVuWzFdKSA8PSAxNikKKyAg
ICAgIHsKKyAgICAgICAgZm9yIChwb3MgPSAxOyAhbHN0eWxlICYmIChwb3MrNSkgPCBudW10b2tz
OyBwb3MrKykKKyAgICAgICAgeworICAgICAgICAgIHAgPSB0b2tlbnNbcG9zXTsKKyAgICAgICAg
ICBpZiAoKHRva2xlbltwb3NdID09IDEgJiYgKCpwID09ICdGJyB8fCAqcCA9PSAnVicpKSB8fAor
ICAgICAgICAgICAgICAodG9rbGVuW3Bvc10gPT0gMyAmJiAqcCA9PSAnRCcgJiYgcFsxXSA9PSAn
SScgJiYgcFsyXSA9PSAnUicpKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh0b2tsZW5b
cG9zKzVdID09IDggJiYgKHRva2Vuc1twb3MrNV1bMl0pID09ICc6JyAmJgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAodG9rZW5zW3Bvcys1XVs1XSkgPT0gJzonICAgKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICBwID0gdG9rZW5zW3Bvcys0XTsKKyAgICAgICAg
ICAgICAgaWYgKCh0b2tsZW5bcG9zKzRdID09IDEwICYmIHBbNF0gPT0gJy0nICYmIHBbN10gPT0g
Jy0nKSB8fAorICAgICAgICAgICAgICAgICAgKHRva2xlbltwb3MrNF0gPj0gNyAmJiB0b2tsZW5b
cG9zKzRdIDw9IDkgJiYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFsoKHBbMV0hPScv
Jyk/KDIpOigxKSldID09ICcvJyAmJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwWygo
cFsxXSE9Jy8nKT8oNSk6KDQpKV0gPT0gJy8nKSkKKyAgICAgICAgICAgICAgIC8qIFkySyBidWdz
IHBvc3NpYmxlICgiNy8wNi8xMDIiIG9yICIxMy8wMi8xMDEiKSAqLworICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgaWYgKCAoKnRva2Vuc1twb3MrMV0gPT0gJy0nICYmCisgICAgICAg
ICAgICAgICAgICAgICAgKnRva2Vuc1twb3MrMl0gPT0gJy0nICYmCisgICAgICAgICAgICAgICAg
ICAgICAgKnRva2Vuc1twb3MrM10gPT0gJy0nKSAgfHwKKyAgICAgICAgICAgICAgICAgICAgICAo
aXNkaWdpdCgqdG9rZW5zW3BvcysxXSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgaXNkaWdp
dCgqdG9rZW5zW3BvcysyXSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgaXNkaWdpdCgqdG9r
ZW5zW3BvcyszXSkpICkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBsc3R5
bGUgPSAnQyc7CisgICAgICAgICAgICAgICAgICB0b2ttYXJrZXIgPSBwb3M7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAg
ICAgICB9IC8qIGZvciAocG9zID0gMTsgIWxzdHlsZSAmJiAocG9zKzUpIDwgbnVtdG9rczsgcG9z
KyspICovCisgICAgICB9IC8qIGlmIChudW10b2tzID49IDcpICovCisKKyAgICAgIC8qIGV4dHJh
IGNoZWNraW5nIGlmIGZpcnN0IHBhc3MgKi8KKyAgICAgIGlmIChsc3R5bGUgJiYgIXN0YXRlLT5s
c3R5bGUpIAorICAgICAgeworICAgICAgICBmb3IgKHBvcyA9IDAsIHAgPSB0b2tlbnNbMF07IGxz
dHlsZSAmJiBwb3MgPCB0b2tsZW5bMF07IHBvcysrLCBwKyspCisgICAgICAgIHsgIAorICAgICAg
ICAgIGlmIChpc2FscGhhKCpwKSAmJiB0b3VwcGVyKCpwKSAhPSAqcCkKKyAgICAgICAgICAgIGxz
dHlsZSA9IDA7CisgICAgICAgIH0gCisgICAgICAgIGZvciAocG9zID0gdG9rbWFya2VyKzE7IHBv
cyA8PSB0b2ttYXJrZXIrMzsgcG9zKyspCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoISh0b2ts
ZW5bcG9zXSA9PSAxICYmICp0b2tlbnNbcG9zXSA9PSAnLScpKQorICAgICAgICAgIHsKKyAgICAg
ICAgICAgIGZvciAocCA9IHRva2Vuc1twb3NdOyBsc3R5bGUgJiYgcDwodG9rZW5zW3Bvc10rdG9r
bGVuW3Bvc10pOyBwKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmICghaXNkaWdp
dCgqcCkpCisgICAgICAgICAgICAgICAgbHN0eWxlID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yIChwb3MgPSAwLCBwID0gdG9rZW5zW3Rva21h
cmtlcis0XTsgCisgICAgICAgICAgICAgbHN0eWxlICYmIHBvcyA8IHRva2xlblt0b2ttYXJrZXIr
NF07IHBvcysrLCBwKyspCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoKnAgPT0gJy8nKQorICAg
ICAgICAgIHsgCisgICAgICAgICAgICAvKiBUaGVyZSBtYXkgYmUgWTJLIGJ1Z3MgaW4gdGhlIGRh
dGUuIERvbid0IHNpbXBsaWZ5IHRvCisgICAgICAgICAgICAgKiBwb3MgIT0gKGxlbi0zKSAmJiBw
b3MgIT0gKGxlbi02KSBsaWtlIHRpbWUgaXMgZG9uZS4KKyAgICAgICAgICAgICovICAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKCh0b2tlbnNbdG9rbWFya2VyKzRdWzFdKSA9PSAnLycpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmIChwb3MgIT0gMSAmJiBwb3MgIT0gNCkKKyAg
ICAgICAgICAgICAgICBsc3R5bGUgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSBpZiAocG9zICE9IDIgJiYgcG9zICE9IDUpCisgICAgICAgICAgICAgIGxzdHlsZSA9IDA7Cisg
ICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKCpwICE9ICctJyAmJiAhaXNkaWdpdCgqcCkp
CisgICAgICAgICAgICBsc3R5bGUgPSAwOworICAgICAgICAgIGVsc2UgaWYgKCpwID09ICctJyAm
JiBwb3MgIT0gNCAmJiBwb3MgIT0gNykKKyAgICAgICAgICAgIGxzdHlsZSA9IDA7CisgICAgICAg
IH0KKyAgICAgICAgZm9yIChwb3MgPSAwLCBwID0gdG9rZW5zW3Rva21hcmtlcis1XTsgCisgICAg
ICAgICAgICAgbHN0eWxlICYmIHBvcyA8IHRva2xlblt0b2ttYXJrZXIrNV07IHBvcysrLCBwKysp
CisgICAgICAgIHsKKyAgICAgICAgICBpZiAoKnAgIT0gJzonICYmICFpc2RpZ2l0KCpwKSkKKyAg
ICAgICAgICAgIGxzdHlsZSA9IDA7CisgICAgICAgICAgZWxzZSBpZiAoKnAgPT0gJzonICYmIHBv
cyAhPSAodG9rbGVuW3Rva21hcmtlcis1XS0zKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmJiBwb3MgIT0gKHRva2xlblt0b2ttYXJrZXIrNV0tNikpCisgICAgICAgICAgICBsc3R5bGUg
PSAwOworICAgICAgICB9CisgICAgICB9IC8qIGluaXRpYWwgaWYoKSAqLworCisgICAgICBpZiAo
bHN0eWxlID09ICdDJykKKyAgICAgIHsKKyAgICAgICAgc3RhdGUtPnBhcnNlZF9vbmUgPSAxOwor
ICAgICAgICBzdGF0ZS0+bHN0eWxlID0gbHN0eWxlOworCisgICAgICAgIHAgPSB0b2tlbnNbdG9r
bWFya2VyKzRdOworICAgICAgICBpZiAodG9rbGVuW3Rva21hcmtlcis0XSA9PSAxMCkgLyogbmV3
c3R5bGU6IFlZWVktTU0tREQgZm9ybWF0ICovCisgICAgICAgIHsKKyAgICAgICAgICByZXN1bHQt
PmZlX3RpbWUudG1feWVhciA9IGF0b2kocCswKSAtIDE5MDA7CisgICAgICAgICAgcmVzdWx0LT5m
ZV90aW1lLnRtX21vbiAgPSBhdG9pKHArNSkgLSAxOworICAgICAgICAgIHJlc3VsdC0+ZmVfdGlt
ZS50bV9tZGF5ID0gYXRvaShwKzgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgLyogb2xkc3R5
bGU6IFtNXU0vREQvWVkgZm9ybWF0ICovCisgICAgICAgIHsKKyAgICAgICAgICBwb3MgPSB0b2ts
ZW5bdG9rbWFya2VyKzRdOworICAgICAgICAgIHJlc3VsdC0+ZmVfdGltZS50bV9tb24gID0gYXRv
aShwKSAtIDE7CisgICAgICAgICAgcmVzdWx0LT5mZV90aW1lLnRtX21kYXkgPSBhdG9pKChwK3Bv
cyktNSk7CisgICAgICAgICAgcmVzdWx0LT5mZV90aW1lLnRtX3llYXIgPSBhdG9pKChwK3Bvcykt
Mik7CisgICAgICAgICAgaWYgKHJlc3VsdC0+ZmVfdGltZS50bV95ZWFyIDwgNzApCisgICAgICAg
ICAgICByZXN1bHQtPmZlX3RpbWUudG1feWVhciArPSAxMDA7CisgICAgICAgIH0KKworICAgICAg
ICBwID0gdG9rZW5zW3Rva21hcmtlcis1XTsKKyAgICAgICAgcG9zID0gdG9rbGVuW3Rva21hcmtl
cis1XTsKKyAgICAgICAgcmVzdWx0LT5mZV90aW1lLnRtX2hvdXIgID0gYXRvaShwKTsKKyAgICAg
ICAgcmVzdWx0LT5mZV90aW1lLnRtX21pbiA9IGF0b2koKHArcG9zKS01KTsKKyAgICAgICAgcmVz
dWx0LT5mZV90aW1lLnRtX3NlYyA9IGF0b2koKHArcG9zKS0yKTsKKworICAgICAgICByZXN1bHQt
PmZlX2NpbmZzID0gMTsKKyAgICAgICAgcmVzdWx0LT5mZV9mbmFtZSA9IHRva2Vuc1swXTsKKyAg
ICAgICAgcmVzdWx0LT5mZV9mbmxlbiA9IHRva2xlblswXTsKKyAgICAgICAgcmVzdWx0LT5mZV90
eXBlICA9ICdmJzsKKworICAgICAgICBwID0gdG9rZW5zW3Rva21hcmtlcl07CisgICAgICAgIGlm
ICh0b2tsZW5bdG9rbWFya2VyXSA9PSAzICYmICpwPT0nRCcgJiYgcFsxXT09J0knICYmIHBbMl09
PSdSJykKKyAgICAgICAgICByZXN1bHQtPmZlX3R5cGUgID0gJ2QnOworCisgICAgICAgIGlmICgo
LypuZXdzdHlsZSovIHRva2xlblt0b2ttYXJrZXIrNF0gPT0gMTAgJiYgdG9rbWFya2VyID4gMSkg
fHwKKyAgICAgICAgICAgICgvKm9sZHN0eWxlKi8gdG9rbGVuW3Rva21hcmtlcis0XSAhPSAxMCAm
JiB0b2ttYXJrZXIgPiAyKSkKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
KiBoYXZlIGEgZmlsZXR5cGUgY29sdW1uICovCisgICAgICAgICAgY2hhciAqZG90OworICAgICAg
ICAgIHAgPSAmKHRva2Vuc1swXVt0b2tsZW5bMF1dKTsKKyAgICAgICAgICBtZW1jcHkoICZkb3Qs
ICZwLCBzaXplb2YoZG90KSApOyAvKiBOQVNUWSEgKi8KKyAgICAgICAgICAqZG90KysgPSAnLic7
CisgICAgICAgICAgcCA9IHRva2Vuc1sxXTsKKyAgICAgICAgICBmb3IgKHBvcyA9IDA7IHBvcyA8
IHRva2xlblsxXTsgcG9zKyspCisgICAgICAgICAgICAqZG90KysgPSAqcCsrOworICAgICAgICAg
IHJlc3VsdC0+ZmVfZm5sZW4gKz0gMSArIHRva2xlblsxXTsKKyAgICAgICAgfQorCisgICAgICAg
IC8qIG9sZHN0eWxlIExJU1RJTkc6IAorICAgICAgICAgKiBmaWxlcy9kaXJzIG5vdCBvbiB0aGUg
J0EnIG1pbmlkaXNrIGFyZSBub3QgUkVUUmlldmFibGUvQ0hESVJhYmxlIAorICAgICAgICBpZiAo
dG9rbGVuW3Rva21hcmtlcis0XSAhPSAxMCAmJiAqdG9rZW5zW3Rva21hcmtlci0xXSAhPSAnQScp
CisgICAgICAgICAgcmV0dXJuICc/JzsKKyAgICAgICAgKi8KKyAgICAgICAgCisgICAgICAgIC8q
IFZNL0NNUyBMSVNUaW5ncyBoYXZlIG5vIHVzYWJsZSBmaWxlc2l6ZSBmaWVsZC4gCisgICAgICAg
ICAqIEhhdmUgdG8gdXNlIHRoZSAnU0laRScgY29tbWFuZCBmb3IgdGhhdC4KKyAgICAgICAgKi8K
KyAgICAgICAgcmV0dXJuIHJlc3VsdC0+ZmVfdHlwZTsKKworICAgICAgfSAvKiBpZiAobHN0eWxl
ID09ICdDJyAmJiAoIXN0YXRlLT5sc3R5bGUgfHwgc3RhdGUtPmxzdHlsZSA9PSBsc3R5bGUpKSAq
LworICAgIH0gLyogVk0vQ01TICovCisjZW5kaWYKKworICAgIC8qICsrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrICovCisKKyNpZiBkZWZp
bmVkKFNVUFBPUlRfRE9TKSAvKiBXaW5OVCBET1MgZGlyc3R5bGUgKi8KKyAgICBpZiAoIWxzdHls
ZSAmJiAoIXN0YXRlLT5sc3R5bGUgfHwgc3RhdGUtPmxzdHlsZSA9PSAnVycpKQorICAgIHsKKyAg
ICAgIC8qCisgICAgICAgKiAiMTAtMjMtMDAgIDAxOjI3UE0gICAgICAgPERJUj4gICAgICAgICAg
dmVyb25pc3QiCisgICAgICAgKiAiMDYtMTUtMDAgIDA3OjM3QU0gICAgICAgPERJUj4gICAgICAg
ICAgem9lIgorICAgICAgICogIjA3LTE0LTAwICAwMTozNVBNICAgICAgICAgICAgICAyMDk0OTI2
IGNhbnByYW5rZGVzay50aWYiCisgICAgICAgKiAiMDctMjEtMDAgIDAxOjE5UE0gICAgICAgICAg
ICAgICAgOTUwNzcgSm9uIEthdWZmbWFuIEVuam95cyB0aGUgR29vZCBMaWZlLmpwZyIKKyAgICAg
ICAqICIwNy0yMS0wMCAgMDE6MTlQTSAgICAgICAgICAgICAgICA1MjI3NSBOYW1lIFBsYXRlLmpw
ZyIKKyAgICAgICAqICIwNy0xNC0wMCAgMDE6MzhQTSAgICAgICAgICAgICAgMjI1MDU0MCBWYWxl
bnRpbmVvZmZwcmFuay1IaVJlcy5qcGciCisgICAgICAqLworICAgICAgaWYgKChudW10b2tzID49
IDQpICYmIHRva2xlblswXSA9PSA4ICYmIHRva2xlblsxXSA9PSA3ICYmIAorICAgICAgICAgICgq
dG9rZW5zWzJdID09ICc8JyB8fCBpc2RpZ2l0KCp0b2tlbnNbMl0pKSApCisgICAgICB7CisgICAg
ICAgIHAgPSB0b2tlbnNbMF07CisgICAgICAgIGlmICggaXNkaWdpdChwWzBdKSAmJiBpc2RpZ2l0
KHBbMV0pICYmIHBbMl09PSctJyAmJiAKKyAgICAgICAgICAgICBpc2RpZ2l0KHBbM10pICYmIGlz
ZGlnaXQocFs0XSkgJiYgcFs1XT09Jy0nICYmCisgICAgICAgICAgICAgaXNkaWdpdChwWzZdKSAm
JiBpc2RpZ2l0KHBbN10pICkKKyAgICAgICAgeworICAgICAgICAgIHAgPSB0b2tlbnNbMV07Cisg
ICAgICAgICAgaWYgKCBpc2RpZ2l0KHBbMF0pICYmIGlzZGlnaXQocFsxXSkgJiYgcFsyXT09Jzon
ICYmIAorICAgICAgICAgICAgICAgaXNkaWdpdChwWzNdKSAmJiBpc2RpZ2l0KHBbNF0pICYmIAor
ICAgICAgICAgICAgICAgKHBbNV09PSdBJyB8fCBwWzVdPT0nUCcpICYmIHBbNl09PSdNJykKKyAg
ICAgICAgICB7CisgICAgICAgICAgICBsc3R5bGUgPSAnVyc7CisgICAgICAgICAgICBpZiAoIXN0
YXRlLT5sc3R5bGUpCisgICAgICAgICAgICB7ICAgICAgICAgICAgCisgICAgICAgICAgICAgIHAg
PSB0b2tlbnNbMl07CisgICAgICAgICAgICAgIC8qIDxESVI+IG9yIDxKVU5DVElPTj4gKi8KKyAg
ICAgICAgICAgICAgaWYgKCpwICE9ICc8JyB8fCBwW3Rva2xlblsyXS0xXSAhPSAnPicpCisgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKHBvcyA9IDE7IChsc3R5bGUgJiYgcG9z
IDwgdG9rbGVuWzJdKTsgcG9zKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgaWYgKCFpc2RpZ2l0KCorK3ApKQorICAgICAgICAgICAgICAgICAgICBsc3R5bGUgPSAwOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAobHN0eWxlID09ICdXJykKKyAg
ICAgIHsKKyAgICAgICAgc3RhdGUtPnBhcnNlZF9vbmUgPSAxOworICAgICAgICBzdGF0ZS0+bHN0
eWxlID0gbHN0eWxlOworCisgICAgICAgIHAgPSAmKGxpbmVbbGluZWxlbl9zYW5zX3dzcF0pOyAv
KiBsaW5lIGVuZCBzYW5zIHdzcCAqLworICAgICAgICByZXN1bHQtPmZlX2NpbmZzID0gMTsKKyAg
ICAgICAgcmVzdWx0LT5mZV9mbmFtZSA9IHRva2Vuc1szXTsKKyAgICAgICAgcmVzdWx0LT5mZV9m
bmxlbiA9IHAgLSB0b2tlbnNbM107CisgICAgICAgIHJlc3VsdC0+ZmVfdHlwZSA9ICdkJzsKKwor
ICAgICAgICBpZiAoKnRva2Vuc1syXSAhPSAnPCcpIC8qIG5vdCA8RElSPiBvciA8SlVOQ1RJT04+
ICovCisgICAgICAgIHsKKyAgICAgICAgICByZXN1bHQtPmZlX3R5cGUgPSAnZic7CisgICAgICAg
ICAgcG9zID0gdG9rbGVuWzJdOworICAgICAgICAgIHdoaWxlIChwb3MgPiAoc2l6ZW9mKHJlc3Vs
dC0+ZmVfc2l6ZSktMSkpCisgICAgICAgICAgICBwb3MgPSAoc2l6ZW9mKHJlc3VsdC0+ZmVfc2l6
ZSktMSk7CisgICAgICAgICAgbWVtY3B5KCByZXN1bHQtPmZlX3NpemUsIHRva2Vuc1syXSwgcG9z
ICk7CisgICAgICAgICAgcmVzdWx0LT5mZV9zaXplW3Bvc10gPSAnXDAnOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgaWYgKCh0b2tlbnNbMl1bMV0pICE9ICdEJykgLyogbm90IDxESVI+ICovCisg
ICAgICAgIHsKKyAgICAgICAgICByZXN1bHQtPmZlX3R5cGUgPSAnPyc7IC8qIHVua25vd24gdW50
aWwganVuYyBmb3Igc3VyZSAqLworICAgICAgICAgIGlmIChyZXN1bHQtPmZlX2ZubGVuID4gNCkK
KyAgICAgICAgICB7CisgICAgICAgICAgICBwID0gcmVzdWx0LT5mZV9mbmFtZTsKKyAgICAgICAg
ICAgIGZvciAocG9zID0gcmVzdWx0LT5mZV9mbmxlbiAtIDQ7IHBvcyA+IDA7IHBvcy0tKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICBpZiAocFswXSA9PSAnICcgJiYgcFszXSA9PSAnICcg
JiYgcFsyXSA9PSAnPicgJiYKKyAgICAgICAgICAgICAgICAgIChwWzFdID09ICc9JyB8fCBwWzFd
ID09ICctJykpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXN1bHQtPmZlX3R5
cGUgPSAnbCc7CisgICAgICAgICAgICAgICAgcmVzdWx0LT5mZV9mbmxlbiA9IHAgLSByZXN1bHQt
PmZlX2ZuYW1lOworICAgICAgICAgICAgICAgIHJlc3VsdC0+ZmVfbG5hbWUgPSBwICsgNDsKKyAg
ICAgICAgICAgICAgICByZXN1bHQtPmZlX2xubGVuID0gJihsaW5lW2xpbmVsZW5fc2Fuc193c3Bd
KSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSByZXN1bHQtPmZlX2xuYW1l
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
IHArKzsKKyAgICAgICAgICAgIH0gICAgCisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAK
KyAgICAgICAgcmVzdWx0LT5mZV90aW1lLnRtX21vbiA9IGF0b2kodG9rZW5zWzBdKzApOworICAg
ICAgICBpZiAocmVzdWx0LT5mZV90aW1lLnRtX21vbiAhPSAwKQorICAgICAgICB7CisgICAgICAg
ICAgcmVzdWx0LT5mZV90aW1lLnRtX21vbi0tOworICAgICAgICAgIHJlc3VsdC0+ZmVfdGltZS50
bV9tZGF5ID0gYXRvaSh0b2tlbnNbMF0rMyk7CisgICAgICAgICAgcmVzdWx0LT5mZV90aW1lLnRt
X3llYXIgPSBhdG9pKHRva2Vuc1swXSs2KTsKKyAgICAgICAgICBpZiAocmVzdWx0LT5mZV90aW1l
LnRtX3llYXIgPCA4MCkKKyAgICAgICAgICAgIHJlc3VsdC0+ZmVfdGltZS50bV95ZWFyICs9IDEw
MDsKKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdC0+ZmVfdGltZS50bV9ob3VyID0gYXRvaSh0
b2tlbnNbMV0rMCk7CisgICAgICAgIHJlc3VsdC0+ZmVfdGltZS50bV9taW4gPSBhdG9pKHRva2Vu
c1sxXSszKTsKKyAgICAgICAgaWYgKCh0b2tlbnNbMV1bNV0pID09ICdQJyAmJiByZXN1bHQtPmZl
X3RpbWUudG1faG91ciA8IDEyKQorICAgICAgICAgIHJlc3VsdC0+ZmVfdGltZS50bV9ob3VyICs9
IDEyOworCisgICAgICAgIC8qIHRoZSBjYWxsZXIgc2hvdWxkIGRvIHRoaXMgKGlmIGRyb3BwaW5n
ICIuIiBhbmQgIi4uIiBpcyBkZXNpcmVkKQorICAgICAgICBpZiAocmVzdWx0LT5mZV90eXBlID09
ICdkJyAmJiByZXN1bHQtPmZlX2ZuYW1lWzBdID09ICcuJyAmJgorICAgICAgICAgICAgKHJlc3Vs
dC0+ZmVfZm5sZW4gPT0gMSB8fCAocmVzdWx0LT5mZV9mbmxlbiA9PSAyICYmCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+ZmVfZm5hbWVbMV0gPT0gJy4nKSkp
CisgICAgICAgICAgcmV0dXJuICc/JzsKKyAgICAgICAgKi8KKworICAgICAgICByZXR1cm4gcmVz
dWx0LT5mZV90eXBlOyAgCisgICAgICB9IC8qIGlmIChsc3R5bGUgPT0gJ1cnICYmICghc3RhdGUt
PmxzdHlsZSB8fCBzdGF0ZS0+bHN0eWxlID09IGxzdHlsZSkpICovCisgICAgfSAvKiBpZiAoIWxz
dHlsZSAmJiAoIXN0YXRlLT5sc3R5bGUgfHwgc3RhdGUtPmxzdHlsZSA9PSAnVycpKSAqLworI2Vu
ZGlmCisKKyAgICAvKiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKyAqLworCisjaWYgZGVmaW5lZChTVVBQT1JUX09TMikKKyAgICBpZiAo
IWxzdHlsZSAmJiAoIXN0YXRlLT5sc3R5bGUgfHwgc3RhdGUtPmxzdHlsZSA9PSAnTycpKSAvKiBP
Uy8yIHRlc3QgKi8KKyAgICB7CisgICAgICAvKiAyMjAgc2VydmVyIElCTSBUQ1AvSVAgZm9yIE9T
LzIgLSBGVFAgU2VydmVyIHZlciAyMzowNDozNiBvbiBKYW4gMTUgMTk5NyByZWFkeS4KKyAgICAg
ICogZml4ZWQgcG9zaXRpb24sIHNwYWNlIHBhZGRlZCBjb2x1bW5zLiBJIGhhdmUgb25seSBhIHZh
Z3VlIGlkZWEgCisgICAgICAqIG9mIHdoYXQgdGhlIGNvbnRlbnRzIGJldHdlZW4gY29sIDE4IGFu
ZCAzNCBtaWdodCBiZTogQWxsIEkgY2FuIGluZmVyCisgICAgICAqIGlzIHRoYXQgdGhlcmUgbWF5
IGJlIGF0dHJpYnV0ZSBmbGFncyBpbiB0aGVyZSBhbmQgdGhlcmUgbWF5IGJlIAorICAgICAgKiBh
ICIgRElSIiBpbiB0aGVyZS4KKyAgICAgICoKKyAgICAgICogICAgICAgICAgMSAgICAgICAgIDIg
ICAgICAgICAzICAgICAgICAgNCAgICAgICAgIDUgICAgICAgICA2CisgICAgICAqMDEyMzQ1Njc4
OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1
Njc4OQorICAgICAgKi0tLS0tIHNpemUgLS0tLS0tLXw/Pz8/Pz8/Pz8/Pz8/Pz8gTU0tREQtWVl8
ICBISDpNTXwgbm5ubm5ubm5uLi4uLgorICAgICAgKiAgICAgICAgICAgICAgICAgMCAgRElSICAg
ICAgICAgICAgMDQtMTEtOTUgICAxNjoyNiAgLgorICAgICAgKiAgICAgICAgICAgICAgICAgMCAg
RElSICAgICAgICAgICAgMDQtMTEtOTUgICAxNjoyNiAgLi4KKyAgICAgICogICAgICAgICAgICAg
ICAgIDAgIERJUiAgICAgICAgICAgIDA0LTExLTk1ICAgMTY6MjYgIEFERFJFU1MKKyAgICAgICog
ICAgICAgICAgICAgICA2MTIgIFJIU0EgICAgICAgICAgIDA3LTI4LTk1ICAgMTY6NDUgIGFpcl90
cmExLmJhZworICAgICAgKiAgICAgICAgICAgICAgIDE5NSAgQSAgICAgICAgICAgICAgMDgtMDkt
OTUgICAxMDoyMyAgQWxmYTEuYmFnCisgICAgICAqICAgICAgICAgICAgICAgICAwICBSSFMgICBE
SVIgICAgICAwNC0xMS05NSAgIDE2OjI2ICBBVFRBQ0gKKyAgICAgICogICAgICAgICAgICAgICAz
NzIgIEEgICAgICAgICAgICAgIDA4LTA5LTk1ICAgMTA6MjYgIEF1c3NpZV8xLmJhZworICAgICAg
KiAgICAgICAgICAgIDMxMDk5MiAgICAgICAgICAgICAgICAgMDYtMjgtOTQgICAwOTo1NiAgSU5T
VEFMTC5FWEUKKyAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgIDIg
ICAgICAgICAzICAgICAgICAgNAorICAgICAgKiAgICAgICAgICAgICAgICAgIDAxMjM0NTY3ODkw
MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5CisgICAgICAqIGRpcmxpc3Qg
ZnJvbSB0aGUgbWlycm9yLnBsIHByb2plY3QsIGNvbCBwb3NpdGlvbnMgZnJvbSBNb3ppbGxhLgor
ICAgICAgKi8KKyAgICAgIHAgPSAmKGxpbmVbdG9rbGVuWzBdXSk7CisgICAgICAvKiBccyhcZFxk
LVxkXGQtXGRcZClccysoXGRcZDpcZFxkKVxzICovCisgICAgICBpZiAobnVtdG9rcyA+PSA0ICYm
IHRva2xlblswXSA8PSAxOCAmJiBpc2RpZ2l0KCp0b2tlbnNbMF0pICYmCisgICAgICAgICAobGlu
ZWxlbiAtIHRva2xlblswXSkgPj0gKDUzLTE4KSAgICAgICAgICAgICAgICAgICAgICAgICYmCisg
ICAgICAgICBwWzE4LTE4XSA9PSAnICcgJiYgcFszNC0xOF0gPT0gJyAnICAgICAgICAgICAgICAg
ICAgICAgICYmCisgICAgICAgICBwWzM3LTE4XSA9PSAnLScgJiYgcFs0MC0xOF0gPT0gJy0nICYm
IHBbNDMtMThdID09ICcgJyAgICYmCisgICAgICAgICBwWzQ1LTE4XSA9PSAnICcgJiYgcFs0OC0x
OF0gPT0gJzonICYmIHBbNTEtMThdID09ICcgJyAgICYmCisgICAgICAgICBpc2RpZ2l0KHBbMzUt
MThdKSAmJiBpc2RpZ2l0KHBbMzYtMThdKSAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICBp
c2RpZ2l0KHBbMzgtMThdKSAmJiBpc2RpZ2l0KHBbMzktMThdKSAgICAgICAgICAgICAgICAgICYm
CisgICAgICAgICBpc2RpZ2l0KHBbNDEtMThdKSAmJiBpc2RpZ2l0KHBbNDItMThdKSAgICAgICAg
ICAgICAgICAgICYmCisgICAgICAgICBpc2RpZ2l0KHBbNDYtMThdKSAmJiBpc2RpZ2l0KHBbNDct
MThdKSAgICAgICAgICAgICAgICAgICYmCisgICAgICAgICBpc2RpZ2l0KHBbNDktMThdKSAmJiBp
c2RpZ2l0KHBbNTAtMThdKQorICAgICAgKQorICAgICAgeworICAgICAgICBsc3R5bGUgPSAnTyc7
IC8qIE9TLzIgKi8KKyAgICAgICAgaWYgKCFzdGF0ZS0+bHN0eWxlKQorICAgICAgICB7ICAgICAg
ICAgICAgCisgICAgICAgICAgZm9yIChwb3MgPSAxOyBsc3R5bGUgJiYgcG9zIDwgdG9rbGVuWzBd
OyBwb3MrKykKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWlzZGlnaXQodG9rZW5zWzBd
W3Bvc10pKQorICAgICAgICAgICAgICBsc3R5bGUgPSAwOworICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgfQorCisgICAgICBpZiAobHN0eWxlID09ICdPJykKKyAgICAgIHsKKyAgICAgICAg
c3RhdGUtPnBhcnNlZF9vbmUgPSAxOworICAgICAgICBzdGF0ZS0+bHN0eWxlID0gbHN0eWxlOwor
CisgICAgICAgIHAgPSAmKGxpbmVbdG9rbGVuWzBdXSk7CisKKyAgICAgICAgcmVzdWx0LT5mZV9j
aW5mcyA9IDE7CisgICAgICAgIHJlc3VsdC0+ZmVfZm5hbWUgPSAmcFs1My0xOF07CisgICAgICAg
IHJlc3VsdC0+ZmVfZm5sZW4gPSAoJihsaW5lW2xpbmVsZW5fc2Fuc193c3BdKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC0gKHJlc3VsdC0+ZmVfZm5hbWUpOworICAgICAgICByZXN1bHQt
PmZlX3R5cGUgPSAnZic7CisKKyAgICAgICAgLyogSSBkb24ndCBoYXZlIGEgcmVhbCBsaXN0aW5n
IHRvIGRldGVybWluZSBleGFjdCBwb3MsIHNvIHNjYW4uICovCisgICAgICAgIGZvciAocG9zID0g
KDE4LTE4KTsgcG9zIDwgKCgzNS0xOCktNCk7IHBvcysrKQorICAgICAgICB7CisgICAgICAgICAg
aWYgKHBbcG9zKzBdID09ICcgJyAmJiBwW3BvcysxXSA9PSAnRCcgJiYgCisgICAgICAgICAgICAg
IHBbcG9zKzJdID09ICdJJyAmJiBwW3BvcyszXSA9PSAnUicpCisgICAgICAgICAgeworICAgICAg
ICAgICAgcmVzdWx0LT5mZV90eXBlID0gJ2QnOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgCisgICAgICAgIGlmIChyZXN1bHQtPmZlX3R5cGUgIT0gJ2Qn
KQorICAgICAgICB7CisgICAgICAgICAgcG9zID0gdG9rbGVuWzBdOworICAgICAgICAgIGlmIChw
b3MgPiAoc2l6ZW9mKHJlc3VsdC0+ZmVfc2l6ZSktMSkpCisgICAgICAgICAgICBwb3MgPSAoc2l6
ZW9mKHJlc3VsdC0+ZmVfc2l6ZSktMSk7CisgICAgICAgICAgbWVtY3B5KCByZXN1bHQtPmZlX3Np
emUsIHRva2Vuc1swXSwgcG9zICk7CisgICAgICAgICAgcmVzdWx0LT5mZV9zaXplW3Bvc10gPSAn
XDAnOworICAgICAgICB9ICAKKyAgICAKKyAgICAgICAgcmVzdWx0LT5mZV90aW1lLnRtX21vbiA9
IGF0b2koJnBbMzUtMThdKSAtIDE7CisgICAgICAgIHJlc3VsdC0+ZmVfdGltZS50bV9tZGF5ID0g
YXRvaSgmcFszOC0xOF0pOworICAgICAgICByZXN1bHQtPmZlX3RpbWUudG1feWVhciA9IGF0b2ko
JnBbNDEtMThdKTsKKyAgICAgICAgaWYgKHJlc3VsdC0+ZmVfdGltZS50bV95ZWFyIDwgODApCisg
ICAgICAgICAgcmVzdWx0LT5mZV90aW1lLnRtX3llYXIgKz0gMTAwOworICAgICAgICByZXN1bHQt
PmZlX3RpbWUudG1faG91ciA9IGF0b2koJnBbNDYtMThdKTsKKyAgICAgICAgcmVzdWx0LT5mZV90
aW1lLnRtX21pbiA9IGF0b2koJnBbNDktMThdKTsKKyAgIAorICAgICAgICAvKiB0aGUgY2FsbGVy
IHNob3VsZCBkbyB0aGlzIChpZiBkcm9wcGluZyAiLiIgYW5kICIuLiIgaXMgZGVzaXJlZCkKKyAg
ICAgICAgaWYgKHJlc3VsdC0+ZmVfdHlwZSA9PSAnZCcgJiYgcmVzdWx0LT5mZV9mbmFtZVswXSA9
PSAnLicgJiYKKyAgICAgICAgICAgIChyZXN1bHQtPmZlX2ZubGVuID09IDEgfHwgKHJlc3VsdC0+
ZmVfZm5sZW4gPT0gMiAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQtPmZlX2ZuYW1lWzFdID09ICcuJykpKQorICAgICAgICAgIHJldHVybiAnPyc7CisgICAg
ICAgICovCisKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+ZmVfdHlwZTsKKyAgICAgIH0gLyogaWYg
KGxzdHlsZSA9PSAnTycpICovCisKKyAgICB9IC8qIGlmICghbHN0eWxlICYmICghc3RhdGUtPmxz
dHlsZSB8fCBzdGF0ZS0+bHN0eWxlID09ICdPJykpICovCisjZW5kaWYKKworICAgIC8qICsrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrICov
CisgICAgCisjaWYgZGVmaW5lZChTVVBQT1JUX0xTTCkKKyAgICBpZiAoIWxzdHlsZSAmJiAoIXN0
YXRlLT5sc3R5bGUgfHwgc3RhdGUtPmxzdHlsZSA9PSAnVScpKSAvKiAvYmluL2xzICYgY28uICov
CisgICAgeworICAgICAgLyogVU5JWC1zdHlsZSBsaXN0aW5nLCB3aXRob3V0IGludW0gYW5kIHdp
dGhvdXQgYmxvY2tzCisgICAgICAgKiAiLXJ3LXItLXItLSAgIDEgcm9vdCAgICAgb3RoZXIgICAg
ICAgIDUzMSBKYW4gMjkgMDM6MjYgUkVBRE1FIgorICAgICAgICogImRyLXhyLXhyLXggICAyIHJv
b3QgICAgIG90aGVyICAgICAgICA1MTIgQXByICA4ICAxOTk0IGV0YyIKKyAgICAgICAqICJkci14
ci14ci14ICAgMiByb290ICAgICA1MTIgQXByICA4ICAxOTk0IGV0YyIKKyAgICAgICAqICJscnd4
cnd4cnd4ICAgMSByb290ICAgICBvdGhlciAgICAgICAgICA3IEphbiAyNSAwMDoxNyBiaW4gLT4g
dXNyL2JpbiIKKyAgICAgICAqIEFsc28gcHJvZHVjZWQgYnkgTWljcm9zb2Z0J3MgRlRQIHNlcnZl
cnMgZm9yIFdpbmRvd3M6CisgICAgICAgKiAiLS0tLS0tLS0tLSAgIDEgb3duZXIgICAgZ3JvdXAg
ICAgICAgICAxODAzMTI4IEp1bCAxMCAxMDoxOCBscy1sUi5aIgorICAgICAgICogImQtLS0tLS0t
LS0gICAxIG93bmVyICAgIGdyb3VwICAgICAgICAgICAgICAgMCBNYXkgIDkgMTk6NDUgU29mdGxp
YiIKKyAgICAgICAqIEFsc28gV0ZUUEQgZm9yIE1TRE9TOgorICAgICAgICogIi1yd3hyd3hyd3gg
ICAxIG5vb25lICAgIG5vZ3JvdXAgICAgICAzMjIgQXVnIDE5ICAxOTk2IG1lc3NhZ2UuZnRwIgor
ICAgICAgICogSGVsbHNvZnQgZm9yIE5ldFdhcmU6CisgICAgICAgKiAiZFtSV0NFTUZBXSBzdXBl
cnZpc29yICAgICAgICAgICAgNTEyICAgICAgIEphbiAxNiAxODo1MyAgICBsb2dpbiIKKyAgICAg
ICAqICItW1JXQ0VNRkFdIHJoZXN1cyAgICAgICAgICAgICAyMTQwNTkgICAgICAgT2N0IDIwIDE1
OjI3ICAgIGN4LmV4ZSIKKyAgICAgICAqIE5ld2VyIEhlbGxzb2Z0IGZvciBOZXRXYXJlOiAobmV0
bGFiMi51c3UuZWR1KQorICAgICAgICogLSBbUldDRUFGTVNdIE5GQVVVc2VyICAgICAgICAgICAg
ICAgMTkyIEFwciAyNyAxNToyMSBIRUFERVIuaHRtbAorICAgICAgICogZCBbUldDRUFGTVNdIGpy
ZCAgICAgICAgICAgICAgICAgICAgNTEyIEp1bCAxMSAwMzowMSBhbGx1cGRhdGVzCisgICAgICAg
KiBBbHNvIE5ldFByZXNlbnogZm9yIHRoZSBNYWM6CisgICAgICAgKiAiLS0tLS0tLXItLSAgICAg
ICAgIDMyNiAgMTM5MTk3MiAgMTM5MjI5OCBOb3YgMjIgIDE5OTUgTWVnYVBob25lLnNpdCIKKyAg
ICAgICAqICJkcnd4cnd4ci14ICAgICAgICAgICAgICAgZm9sZGVyICAgICAgICAyIE1heSAxMCAg
MTk5NiBuZXR3b3JrIgorICAgICAgICogUHJvdGVjdGVkIGRpcmVjdG9yeToKKyAgICAgICAqICJk
cnd4LXd4LXd0ICAyIHJvb3QgIHdoZWVsICA1MTIgSnVsICAxIDAyOjE1IGluY29taW5nIgorICAg
ICAgICogdWlkL2dpZCBpbnN0ZWFkIG9mIHVzZXJuYW1lL2dyb3VwbmFtZToKKyAgICAgICAqICJk
cnd4ci14ci14ICAyIDAgIDAgIDUxMiBNYXkgMjggMjI6MTcgZXRjIgorICAgICAgKi8KKyAgICAK
KyAgICAgIGlmIChudW10b2tzID49IDYpCisgICAgICB7CisgICAgICAgIC8qIHRoZXJlIGFyZSB0
d28gcGVybSBmb3JtYXRzIChIZWxsc29mdC9OZXRXYXJlIGFuZCAqSVggc3RybW9kZSgzKSkuCisg
ICAgICAgICAqIFNjYW4gZm9yIHNpemUgY29sdW1uIG9ubHkgaWYgdGhlIHBlcm0gZm9ybWF0IGlz
IG9uZSBvciB0aGUgb3RoZXIuCisgICAgICAgICAqLworICAgICAgICBpZiAodG9rbGVuWzBdID09
IDEgfHwgKHRva2Vuc1swXVsxXSkgPT0gJ1snKQorICAgICAgICB7CisgICAgICAgICAgaWYgKCp0
b2tlbnNbMF0gPT0gJ2QnIHx8ICp0b2tlbnNbMF0gPT0gJy0nKQorICAgICAgICAgIHsKKyAgICAg
ICAgICAgIHBvcyA9IHRva2xlblswXS0xOworICAgICAgICAgICAgcCA9IHRva2Vuc1swXSArIDE7
CisgICAgICAgICAgICBpZiAocG9zID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
IHAgPSB0b2tlbnNbMV07CisgICAgICAgICAgICAgIHBvcyA9IHRva2xlblsxXTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICgocG9zID09IDkgfHwgcG9zID09IDEwKSAgICAgICAgJiYg
CisgICAgICAgICAgICAgICAgKCpwID09ICdbJyAmJiBwW3Bvcy0xXSA9PSAnXScpICYmCisgICAg
ICAgICAgICAgICAgKHBbMV0gPT0gJ1InIHx8IHBbMV0gPT0gJy0nKSAgICYmCisgICAgICAgICAg
ICAgICAgKHBbMl0gPT0gJ1cnIHx8IHBbMl0gPT0gJy0nKSAgICYmCisgICAgICAgICAgICAgICAg
KHBbM10gPT0gJ0MnIHx8IHBbM10gPT0gJy0nKSAgICYmCisgICAgICAgICAgICAgICAgKHBbNF0g
PT0gJ0UnIHx8IHBbNF0gPT0gJy0nKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgLyog
cmVzdCBpcyBGTUFbU10gb3IgQUZNW1NdICovCisgICAgICAgICAgICAgIGxzdHlsZSA9ICdVJzsg
LyogdmVyeSBsaWtlbHkgb25lIG9mIHRoZSBOZXRXYXJlIHNlcnZlcnMgKi8KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKHRva2xlblswXSA9
PSAxMCB8fCB0b2tsZW5bMF0gPT0gMTEpIAorICAgICAgICAgICAgICAgICAgICYmIHN0cmNocigi
LWJjZGxwc3c/REZhbSIsICp0b2tlbnNbMF0pKQorICAgICAgICB7CisgICAgICAgICAgcCA9ICYo
dG9rZW5zWzBdWzFdKTsKKyAgICAgICAgICBpZiAoKHBbMF0gPT0gJ3InIHx8IHBbMF0gPT0gJy0n
KSAmJgorICAgICAgICAgICAgICAocFsxXSA9PSAndycgfHwgcFsxXSA9PSAnLScpICYmCisgICAg
ICAgICAgICAgIChwWzNdID09ICdyJyB8fCBwWzNdID09ICctJykgJiYKKyAgICAgICAgICAgICAg
KHBbNF0gPT0gJ3cnIHx8IHBbNF0gPT0gJy0nKSAmJgorICAgICAgICAgICAgICAocFs2XSA9PSAn
cicgfHwgcFs2XSA9PSAnLScpICYmCisgICAgICAgICAgICAgIChwWzddID09ICd3JyB8fCBwWzdd
ID09ICctJykpCisgICAgICAgICAgICAvKiAneCcvcFs5XSBjYW4gYmUgU3xzfHh8LXxUfHQgb3Ig
aW1wbGVtZW50YXRpb24gc3BlY2lmaWMgKi8KKyAgICAgICAgICB7CisgICAgICAgICAgICBsc3R5
bGUgPSAnVSc7IC8qIHZlcnkgbGlrZWx5IC9iaW4vbHMgKi8KKyAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgIH0KKyAgICAgIGlmIChsc3R5bGUgPT0gJ1UnKSAvKiBmaXJzdCB0b2tlbiBjaGVj
a3Mgb3V0ICovCisgICAgICB7CisgICAgICAgIGxzdHlsZSA9IDA7CisgICAgICAgIGZvciAocG9z
ID0gKG51bXRva3MtNSk7ICFsc3R5bGUgJiYgcG9zID4gMTsgcG9zLS0pCisgICAgICAgIHsKKyAg
ICAgICAgICAvKiBzY2FuIGZvcjogKFxkKylccysoW0EtWl1bYS16XVthLXpdKVxzKworICAgICAg
ICAgICAqICAoXGRcZFxkXGR8XGRcOlxkXGR8XGRcZFw6XGRcZHxcZFw6XGRcZFw6XGRcZHxcZFxk
XDpcZFxkXDpcZFxkKQorICAgICAgICAgICAqICBccysoLispJAorICAgICAgICAgICovCisgICAg
ICAgICAgaWYgKGlzZGlnaXQoKnRva2Vuc1twb3NdKSAvKiBzaXplICovCisgICAgICAgICAgICAg
IC8qIChcd1x3XHcpICovCisgICAgICAgICAgICYmIHRva2xlbltwb3MrMV0gPT0gMyAmJiBpc2Fs
cGhhKCp0b2tlbnNbcG9zKzFdKSAmJgorICAgICAgICAgICAgICBpc2FscGhhKHRva2Vuc1twb3Mr
MV1bMV0pICYmIGlzYWxwaGEodG9rZW5zW3BvcysxXVsyXSkKKyAgICAgICAgICAgICAgLyogKFxk
fFxkXGQpICovCisgICAgICAgICAgICYmIGlzZGlnaXQoKnRva2Vuc1twb3MrMl0pICYmCisgICAg
ICAgICAgICAgICAgKHRva2xlbltwb3MrMl0gPT0gMSB8fCAKKyAgICAgICAgICAgICAgICAgICh0
b2tsZW5bcG9zKzJdID09IDIgJiYgaXNkaWdpdCh0b2tlbnNbcG9zKzJdWzFdKSkpCisgICAgICAg
ICAgICYmIHRva2xlbltwb3MrM10gPj0gNCAmJiBpc2RpZ2l0KCp0b2tlbnNbcG9zKzNdKSAKKyAg
ICAgICAgICAgICAgLyogKFxkXDpcZFxkXDpcZFxkfFxkXGRcOlxkXGRcOlxkXGQpICovCisgICAg
ICAgICAgICYmICh0b2tsZW5bcG9zKzNdIDw9IDUgfHwgKAorICAgICAgICAgICAgICAgKHRva2xl
bltwb3MrM10gPT0gNyB8fCB0b2tsZW5bcG9zKzNdID09IDgpICYmCisgICAgICAgICAgICAgICAo
dG9rZW5zW3BvcyszXVt0b2tsZW5bcG9zKzNdLTNdKSA9PSAnOicpKQorICAgICAgICAgICAmJiBp
c2RpZ2l0KHRva2Vuc1twb3MrM11bdG9rbGVuW3BvcyszXS0yXSkKKyAgICAgICAgICAgJiYgaXNk
aWdpdCh0b2tlbnNbcG9zKzNdW3Rva2xlbltwb3MrM10tMV0pCisgICAgICAgICAgICYmICgKKyAg
ICAgICAgICAgICAgLyogKFxkXGRcZFxkKSAqLworICAgICAgICAgICAgICAgICAoKHRva2xlbltw
b3MrM10gPT0gNCB8fCB0b2tsZW5bcG9zKzNdID09IDUpICYmCisgICAgICAgICAgICAgICAgICBp
c2RpZ2l0KHRva2Vuc1twb3MrM11bMV0pICYmCisgICAgICAgICAgICAgICAgICBpc2RpZ2l0KHRv
a2Vuc1twb3MrM11bMl0pICApCisgICAgICAgICAgICAgIC8qIChcZFw6XGRcZHxcZFw6XGRcZFw6
XGRcZCkgKi8KKyAgICAgICAgICAgICAgfHwgKCh0b2tsZW5bcG9zKzNdID09IDQgfHwgdG9rbGVu
W3BvcyszXSA9PSA3KSAmJiAKKyAgICAgICAgICAgICAgICAgICh0b2tlbnNbcG9zKzNdWzFdKSA9
PSAnOicgJiYKKyAgICAgICAgICAgICAgICAgIGlzZGlnaXQodG9rZW5zW3BvcyszXVsyXSkgJiYg
aXNkaWdpdCh0b2tlbnNbcG9zKzNdWzNdKSkKKyAgICAgICAgICAgICAgLyogKFxkXGRcOlxkXGR8
XGRcZFw6XGRcZFw6XGRcZCkgKi8KKyAgICAgICAgICAgICAgfHwgKCh0b2tsZW5bcG9zKzNdID09
IDUgfHwgdG9rbGVuW3BvcyszXSA9PSA4KSAmJiAKKyAgICAgICAgICAgICAgICAgIGlzZGlnaXQo
dG9rZW5zW3BvcyszXVsxXSkgJiYgKHRva2Vuc1twb3MrM11bMl0pID09ICc6JyAmJgorICAgICAg
ICAgICAgICAgICAgaXNkaWdpdCh0b2tlbnNbcG9zKzNdWzNdKSAmJiBpc2RpZ2l0KHRva2Vuc1tw
b3MrM11bNF0pKSAKKyAgICAgICAgICAgICAgKQorICAgICAgICAgICApCisgICAgICAgICAgewor
ICAgICAgICAgICAgdW5zaWduZWQgaW50IGk7CisgICAgICAgICAgICBsc3R5bGUgPSAnVSc7IC8q
IGFzc3VtZSAvYmluL2xzIG9yIHZhcmlhbnQgZm9ybWF0ICovCisgICAgICAgICAgICB0b2ttYXJr
ZXIgPSBwb3M7CisKKyAgICAgICAgICAgIC8qIGNoZWNrIHRoYXQgc2l6ZSBpcyBudW1lcmljICov
CisgICAgICAgICAgICBwID0gdG9rZW5zW3Rva21hcmtlcl07CisgICAgICAgICAgICBmb3IgKGkg
PSAwOyBpIDwgdG9rbGVuW3Rva21hcmtlcl07IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgaWYgKCFpc2RpZ2l0KCpwKyspKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgbHN0eWxlID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGxzdHlsZSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgbW9udGhfbnVtID0gMDsKKyAgICAgICAgICAgICAgcCA9IHRva2Vuc1t0b2tt
YXJrZXIrMV07CisgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAoMTIqMyk7IGkrPTMpCisg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAocFswXSA9PSBtb250aF9uYW1lc1tp
KzBdICYmIAorICAgICAgICAgICAgICAgICAgICBwWzFdID09IG1vbnRoX25hbWVzW2krMV0gJiYg
CisgICAgICAgICAgICAgICAgICAgIHBbMl0gPT0gbW9udGhfbmFtZXNbaSsyXSkKKyAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIG1vbnRoX251bSsrOworICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgIGlmIChtb250aF9udW0gPj0gMTIpCisgICAgICAgICAgICAg
ICAgbHN0eWxlID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9IC8qIHJlbGF0aXZlIHBv
c2l0aW9uIHRlc3QgKi8KKyAgICAgICAgfSAvKiBmb3IgKHBvcyA9IChudW10b2tzLTUpOyAhbHN0
eWxlICYmIHBvcyA+IDE7IHBvcy0tKSAqLworICAgICAgfSAvKiBpZiAobHN0eWxlID09ICdVJykg
Ki8KKworICAgICAgaWYgKGxzdHlsZSA9PSAnVScpCisgICAgICB7CisgICAgICAgIHN0YXRlLT5w
YXJzZWRfb25lID0gMTsKKyAgICAgICAgc3RhdGUtPmxzdHlsZSA9IGxzdHlsZTsKKyAgICAKKyAg
ICAgICAgcmVzdWx0LT5mZV9jaW5mcyA9IDA7CisgICAgICAgIHJlc3VsdC0+ZmVfdHlwZSA9ICc/
JzsKKyAgICAgICAgaWYgKCp0b2tlbnNbMF0gPT0gJ2QnIHx8ICp0b2tlbnNbMF0gPT0gJ2wnKQor
ICAgICAgICAgIHJlc3VsdC0+ZmVfdHlwZSA9ICp0b2tlbnNbMF07CisgICAgICAgIGVsc2UgaWYg
KCp0b2tlbnNbMF0gPT0gJ0QnKQorICAgICAgICAgIHJlc3VsdC0+ZmVfdHlwZSA9ICdkJzsKKyAg
ICAgICAgZWxzZSBpZiAoKnRva2Vuc1swXSA9PSAnLScgfHwgKnRva2Vuc1swXSA9PSAnRicpCisg
ICAgICAgICAgcmVzdWx0LT5mZV90eXBlID0gJ2YnOyAvKiAoaG9wZWZ1bGx5IGEgcmVndWxhciBm
aWxlKSAqLworCisgICAgICAgIGlmIChyZXN1bHQtPmZlX3R5cGUgIT0gJ2QnKQorICAgICAgICB7
CisgICAgICAgICAgcG9zID0gdG9rbGVuW3Rva21hcmtlcl07CisgICAgICAgICAgaWYgKHBvcyA+
IChzaXplb2YocmVzdWx0LT5mZV9zaXplKS0xKSkKKyAgICAgICAgICAgIHBvcyA9IChzaXplb2Yo
cmVzdWx0LT5mZV9zaXplKS0xKTsKKyAgICAgICAgICBtZW1jcHkoIHJlc3VsdC0+ZmVfc2l6ZSwg
dG9rZW5zW3Rva21hcmtlcl0sIHBvcyApOworICAgICAgICAgIHJlc3VsdC0+ZmVfc2l6ZVtwb3Nd
ID0gJ1wwJzsKKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdC0+ZmVfdGltZS50bV9tb24gID0g
bW9udGhfbnVtOworICAgICAgICByZXN1bHQtPmZlX3RpbWUudG1fbWRheSA9IGF0b2kodG9rZW5z
W3Rva21hcmtlcisyXSk7CisgICAgICAgIGlmIChyZXN1bHQtPmZlX3RpbWUudG1fbWRheSA9PSAw
KQorICAgICAgICAgIHJlc3VsdC0+ZmVfdGltZS50bV9tZGF5Kys7CisKKyAgICAgICAgcCA9IHRv
a2Vuc1t0b2ttYXJrZXIrM107CisgICAgICAgIHBvcyA9ICh1bnNpZ25lZCBpbnQpYXRvaShwKTsK
KyAgICAgICAgaWYgKHBbMV0gPT0gJzonKSAvKiBvbmUgZGlnaXQgaG91ciAqLworICAgICAgICAg
IHAtLTsKKyAgICAgICAgaWYgKHBbMl0gIT0gJzonKSAvKiB5ZWFyICovCisgICAgICAgIHsKKyAg
ICAgICAgICByZXN1bHQtPmZlX3RpbWUudG1feWVhciA9IHBvczsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICByZXN1bHQtPmZlX3RpbWUudG1faG91ciA9IHBv
czsKKyAgICAgICAgICByZXN1bHQtPmZlX3RpbWUudG1fbWluICA9IGF0b2kocCszKTsKKyAgICAg
ICAgICBpZiAocFs1XSA9PSAnOicpCisgICAgICAgICAgICByZXN1bHQtPmZlX3RpbWUudG1fc2Vj
ID0gYXRvaShwKzYpOworICAgICAgIAorICAgICAgICAgIGlmICghc3RhdGUtPm5vd190aW1lKQor
ICAgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXRlLT5ub3dfdGltZSA9IHRpbWUgKE5VTEwpOwor
CSAgICBzdGF0ZS0+bm93X3RtID0gKmxvY2FsdGltZSAoJnN0YXRlLT5ub3dfdGltZSk7CisgICAg
ICAgICAgfQorCisgICAgICAgICAgcmVzdWx0LT5mZV90aW1lLnRtX3llYXIgPSBzdGF0ZS0+bm93
X3RtLnRtX3llYXI7CisgICAgICAgICAgaWYgKCAoKCBzdGF0ZS0+bm93X3RtLnRtX21vbiA8PCA1
KSArIHN0YXRlLT5ub3dfdG0udG1fbWRheSkgPAorICAgICAgICAgICAgICAgKChyZXN1bHQtPmZl
X3RpbWUudG1fbW9uIDw8IDUpICsgcmVzdWx0LT5mZV90aW1lLnRtX21kYXkpICkKKyAgICAgICAg
ICAgIHJlc3VsdC0+ZmVfdGltZS50bV95ZWFyLS07CisgICAgICAgCisgICAgICAgIH0gLyogdGlt
ZS95ZWFyICovCisgICAgICAgIAorICAgICAgICByZXN1bHQtPmZlX2ZuYW1lID0gdG9rZW5zW3Rv
a21hcmtlcis0XTsKKyAgICAgICAgcmVzdWx0LT5mZV9mbmxlbiA9ICgmKGxpbmVbbGluZWxlbl9z
YW5zX3dzcF0pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAocmVzdWx0LT5mZV9mbmFt
ZSk7CisKKyAgICAgICAgaWYgKHJlc3VsdC0+ZmVfdHlwZSA9PSAnbCcgJiYgcmVzdWx0LT5mZV9m
bmxlbiA+IDQpCisgICAgICAgIHsKKyAgICAgICAgICBwID0gcmVzdWx0LT5mZV9mbmFtZSArIDE7
CisgICAgICAgICAgZm9yIChwb3MgPSAxOyBwb3MgPCAocmVzdWx0LT5mZV9mbmxlbiAtIDQpOyBw
b3MrKykKKyAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoKnAgPT0gJyAnICYmIHBbMV0gPT0g
Jy0nICYmIHBbMl0gPT0gJz4nICYmIHBbM10gPT0gJyAnKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICByZXN1bHQtPmZlX2xuYW1lID0gcCArIDQ7CisgICAgICAgICAgICAgIHJlc3VsdC0+
ZmVfbG5sZW4gPSAoJihsaW5lW2xpbmVsZW5fc2Fuc193c3BdKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAtIChyZXN1bHQtPmZlX2xuYW1lKTsKKyAgICAgICAgICAgICAgcmVzdWx0
LT5mZV9mbmxlbiA9IHBvczsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBwKys7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyNpZiBkZWZpbmVkKFNV
UFBPUlRfTFNMRikgLyogc29tZSAodmVyeSByYXJlKSBzZXJ2ZXJzIHJldHVybiBscyAtbEYgKi8K
KyAgICAgICAgaWYgKHJlc3VsdC0+ZmVfZm5sZW4gPiAxKQorICAgICAgICB7CisgICAgICAgICAg
cCA9IHJlc3VsdC0+ZmVfZm5hbWVbcmVzdWx0LT5mZV9mbmxlbi0xXTsKKyAgICAgICAgICBwb3Mg
PSByZXN1bHQtPmZlX3R5cGU7CisgICAgICAgICAgaWYgKHBvcyA9PSAnZCcpIHsgCisgICAgICAg
ICAgICAgaWYgKCpwID09ICcvJykgcmVzdWx0LT5mZV9mbmxlbi0tOyAvKiBkaXJlY3RvcnkgKi8K
KyAgICAgICAgICB9IGVsc2UgaWYgKHBvcyA9PSAnbCcpIHsgCisgICAgICAgICAgICAgaWYgKCpw
ID09ICdAJykgcmVzdWx0LT5mZV9mbmxlbi0tOyAvKiBzeW1saW5rICovCisgICAgICAgICAgfSBl
bHNlIGlmIChwb3MgPT0gJ2YnKSB7IAorICAgICAgICAgICAgIGlmICgqcCA9PSAnKicpIHJlc3Vs
dC0+ZmVfZm5sZW4tLTsgLyogZXhlY3V0YWJsZSAqLworICAgICAgICAgIH0gZWxzZSBpZiAoKnAg
PT0gJz0nIHx8ICpwID09ICclJyB8fCAqcCA9PSAnfCcpIHsKKyAgICAgICAgICAgIHJlc3VsdC0+
ZmVfZm5sZW4tLTsgLyogc29ja2V0LCB3aGl0ZW91dCwgZmlmbyAqLworICAgICAgICAgIH0KKyAg
ICAgICAgfQorI2VuZGlmCisgICAgIAorICAgICAgICAvKiB0aGUgY2FsbGVyIHNob3VsZCBkbyB0
aGlzIChpZiBkcm9wcGluZyAiLiIgYW5kICIuLiIgaXMgZGVzaXJlZCkKKyAgICAgICAgaWYgKHJl
c3VsdC0+ZmVfdHlwZSA9PSAnZCcgJiYgcmVzdWx0LT5mZV9mbmFtZVswXSA9PSAnLicgJiYKKyAg
ICAgICAgICAgIChyZXN1bHQtPmZlX2ZubGVuID09IDEgfHwgKHJlc3VsdC0+ZmVfZm5sZW4gPT0g
MiAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmZlX2Zu
YW1lWzFdID09ICcuJykpKQorICAgICAgICAgIHJldHVybiAnPyc7CisgICAgICAgICovCisKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdC0+ZmVfdHlwZTsgIAorCisgICAgICB9IC8qIGlmIChsc3R5bGUg
PT0gJ1UnKSAqLworCisgICAgfSAvKiBpZiAoIWxzdHlsZSAmJiAoIXN0YXRlLT5sc3R5bGUgfHwg
c3RhdGUtPmxzdHlsZSA9PSAnVScpKSAqLworI2VuZGlmCisKKyAgICAvKiArKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyAqLworCisjaWYg
ZGVmaW5lZChTVVBQT1JUX1cxNikgLyogMTZiaXQgV2luZG93cyAqLworICAgIGlmICghbHN0eWxl
ICYmICghc3RhdGUtPmxzdHlsZSB8fCBzdGF0ZS0+bHN0eWxlID09ICd3JykpCisgICAgeyAgICAg
ICAvKiBvbGQgU3VwZXJUQ1Agc3VpdGUgRlRQIHNlcnZlciBmb3IgV2luMy4xICovCisgICAgICAg
ICAgICAvKiBvbGQgTmV0TWFuYWdlIENoYW1lbGVvbiBUQ1AvSVAgc3VpdGUgRlRQIHNlcnZlciBm
b3IgV2luMy4xICovCisgICAgICAvKgorICAgICAgKiBTdXBlclRDUCBkaXJsaXN0IGZyb20gdGhl
IG1pcnJvci5wbCBwcm9qZWN0CisgICAgICAqIG1vbi9kYXkveWVhciBzZXBhcmF0b3IgbWF5IGJl
ICcvJyBvciAnLScuCisgICAgICAqIC4gICAgICAgICAgICAgICA8RElSPiAgICAgICAgICAgMTEt
MTYtOTQgICAgICAgIDE3OjE2CisgICAgICAqIC4uICAgICAgICAgICAgICA8RElSPiAgICAgICAg
ICAgMTEtMTYtOTQgICAgICAgIDE3OjE2CisgICAgICAqIElOU1RBTEwgICAgICAgICA8RElSPiAg
ICAgICAgICAgMTEtMTYtOTQgICAgICAgIDE3OjE3CisgICAgICAqIENNVCAgICAgICAgICAgICA8
RElSPiAgICAgICAgICAgMTEtMjEtOTQgICAgICAgIDEwOjE3CisgICAgICAqIERFU0lHTjEuRE9D
ICAgICAgICAgIDExMjY0ICAgICAgMDUtMTEtOTUgICAgICAgIDE0OjIwCisgICAgICAqIFJFQURN
RS5UWFQgICAgICAgICAgICAxMDQ1ICAgICAgMDUtMTAtOTUgICAgICAgIDExOjAxCisgICAgICAq
IFdQS0lUMS5FWEUgICAgICAgICAgOTYwMzM4ICAgICAgMDYtMjEtOTUgICAgICAgIDE3OjAxCisg
ICAgICAqIENNVC5DU1YgICAgICAgICAgICAgICAgICAwICAgICAgMDctMDYtOTUgICAgICAgIDE0
OjU2CisgICAgICAqCisgICAgICAqIENoYW1lbGVvbiBkaXJsaXN0IGd1ZXNzZWQgZnJvbSBseW54
CisgICAgICAqIC4gICAgICAgICAgICAgICA8RElSPiAgICAgIE5vdiAxNiAxOTk0IDE3OjE2ICAg
CisgICAgICAqIC4uICAgICAgICAgICAgICA8RElSPiAgICAgIE5vdiAxNiAxOTk0IDE3OjE2ICAg
CisgICAgICAqIElOU1RBTEwgICAgICAgICA8RElSPiAgICAgIE5vdiAxNiAxOTk0IDE3OjE3Cisg
ICAgICAqIENNVCAgICAgICAgICAgICA8RElSPiAgICAgIE5vdiAyMSAxOTk0IDEwOjE3CisgICAg
ICAqIERFU0lHTjEuRE9DICAgICAxMTI2NCAgICAgIE1heSAxMSAxOTk1IDE0OjIwICAgQQorICAg
ICAgKiBSRUFETUUuVFhUICAgICAgIDEwNDUgICAgICBNYXkgMTAgMTk5NSAxMTowMQorICAgICAg
KiBXUEtJVDEuRVhFICAgICA5NjAzMzggICAgICBKdW4gMjEgMTk5NSAxNzowMSAgIFIKKyAgICAg
ICogQ01ULkNTViAgICAgICAgICAgICAwICAgICAgSnVsIDA2IDE5OTUgMTQ6NTYgICBSSEEKKyAg
ICAgICovCisgICAgICBpZiAobnVtdG9rcyA+PSA0ICYmIHRva2xlblswXSA8IDEzICYmIAorICAg
ICAgICAgICgodG9rbGVuWzFdID09IDUgJiYgKnRva2Vuc1sxXSA9PSAnPCcpIHx8IGlzZGlnaXQo
KnRva2Vuc1sxXSkpICkKKyAgICAgIHsKKyAgICAgICAgaWYgKG51bXRva3MgPT0gNAorICAgICAg
ICAgJiYgKHRva2xlblsyXSA9PSA4IHx8IHRva2xlblsyXSA9PSA5KQorICAgICAgICAgJiYgKCgo
dG9rZW5zWzJdWzJdKSA9PSAnLycgJiYgKHRva2Vuc1syXVs1XSkgPT0gJy8nKSB8fAorICAgICAg
ICAgICAgICgodG9rZW5zWzJdWzJdKSA9PSAnLScgJiYgKHRva2Vuc1syXVs1XSkgPT0gJy0nKSkK
KyAgICAgICAgICYmICh0b2tsZW5bM10gPT0gNCB8fCB0b2tsZW5bM10gPT0gNSkKKyAgICAgICAg
ICYmICh0b2tlbnNbM11bdG9rbGVuWzNdLTNdKSA9PSAnOicKKyAgICAgICAgICYmIGlzZGlnaXQo
dG9rZW5zWzJdWzBdKSAmJiBpc2RpZ2l0KHRva2Vuc1syXVsxXSkKKyAgICAgICAgICYmIGlzZGln
aXQodG9rZW5zWzJdWzNdKSAmJiBpc2RpZ2l0KHRva2Vuc1syXVs0XSkKKyAgICAgICAgICYmIGlz
ZGlnaXQodG9rZW5zWzJdWzZdKSAmJiBpc2RpZ2l0KHRva2Vuc1syXVs3XSkKKyAgICAgICAgICYm
ICh0b2tsZW5bMl0gPCA5IHx8IGlzZGlnaXQodG9rZW5zWzJdWzhdKSkKKyAgICAgICAgICYmIGlz
ZGlnaXQodG9rZW5zWzNdW3Rva2xlblszXS0xXSkgJiYgaXNkaWdpdCh0b2tlbnNbM11bdG9rbGVu
WzNdLTJdKQorICAgICAgICAgJiYgaXNkaWdpdCh0b2tlbnNbM11bdG9rbGVuWzNdLTRdKSAmJiBp
c2RpZ2l0KCp0b2tlbnNbM10pIAorICAgICAgICAgKQorICAgICAgICB7CisgICAgICAgICAgbHN0
eWxlID0gJ3cnOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKChudW10b2tzID09IDYgfHwg
bnVtdG9rcyA9PSA3KQorICAgICAgICAgJiYgdG9rbGVuWzJdID09IDMgJiYgdG9rbGVuWzNdID09
IDIKKyAgICAgICAgICYmIHRva2xlbls0XSA9PSA0ICYmIHRva2xlbls1XSA9PSA1CisgICAgICAg
ICAmJiAodG9rZW5zWzVdWzJdKSA9PSAnOicKKyAgICAgICAgICYmIGlzYWxwaGEodG9rZW5zWzJd
WzBdKSAmJiBpc2FscGhhKHRva2Vuc1syXVsxXSkKKyAgICAgICAgICYmICAgICAgICAgICAgICAg
ICAgICAgICAgICBpc2FscGhhKHRva2Vuc1syXVsyXSkKKyAgICAgICAgICYmIGlzZGlnaXQodG9r
ZW5zWzNdWzBdKSAmJiBpc2RpZ2l0KHRva2Vuc1szXVsxXSkKKyAgICAgICAgICYmIGlzZGlnaXQo
dG9rZW5zWzRdWzBdKSAmJiBpc2RpZ2l0KHRva2Vuc1s0XVsxXSkKKyAgICAgICAgICYmIGlzZGln
aXQodG9rZW5zWzRdWzJdKSAmJiBpc2RpZ2l0KHRva2Vuc1s0XVszXSkKKyAgICAgICAgICYmIGlz
ZGlnaXQodG9rZW5zWzVdWzBdKSAmJiBpc2RpZ2l0KHRva2Vuc1s1XVsxXSkKKyAgICAgICAgICYm
IGlzZGlnaXQodG9rZW5zWzVdWzNdKSAmJiBpc2RpZ2l0KHRva2Vuc1s1XVs0XSkKKyAgICAgICAg
IC8qIGNvdWxkIGFsc28gY2hlY2sgdGhhdCAoJih0b2tlbnNbNV1bNV0pIC0gdG9rZW5zWzJdKSA9
PSAxNyAqLworICAgICAgICApCisgICAgICAgIHsKKyAgICAgICAgICBsc3R5bGUgPSAndyc7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGxzdHlsZSAmJiBzdGF0ZS0+bHN0eWxlICE9IGxzdHlsZSkg
LyogZmlyc3QgdGltZSAqLworICAgICAgICB7CisgICAgICAgICAgcCA9IHRva2Vuc1sxXTsgICAK
KyAgICAgICAgICBpZiAodG9rbGVuWzFdICE9IDUgfHwgcFswXSAhPSAnPCcgfHwgcFsxXSAhPSAn
RCcgfHwgCisgICAgICAgICAgICAgICAgIHBbMl0gIT0gJ0knIHx8IHBbM10gIT0gJ1InIHx8IHBb
NF0gIT0gJz4nKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAocG9zID0gMDsgbHN0eWxl
ICYmIHBvcyA8IHRva2xlblsxXTsgcG9zKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
IGlmICghaXNkaWdpdCgqcCsrKSkKKyAgICAgICAgICAgICAgICBsc3R5bGUgPSAwOworICAgICAg
ICAgICAgfQorICAgICAgICAgIH0gLyogbm90IDxESVI+ICovCisgICAgICAgIH0gLyogaWYgKGZp
cnN0IHRpbWUpICovCisgICAgICB9IC8qIGlmIChudW10b2tzID09IC4uLikgKi8KKworICAgICAg
aWYgKGxzdHlsZSA9PSAndycpCisgICAgICB7CisgICAgICAgIHN0YXRlLT5wYXJzZWRfb25lID0g
MTsKKyAgICAgICAgc3RhdGUtPmxzdHlsZSA9IGxzdHlsZTsKKworICAgICAgICByZXN1bHQtPmZl
X2NpbmZzID0gMTsKKyAgICAgICAgcmVzdWx0LT5mZV9mbmFtZSA9IHRva2Vuc1swXTsKKyAgICAg
ICAgcmVzdWx0LT5mZV9mbmxlbiA9IHRva2xlblswXTsKKyAgICAgICAgcmVzdWx0LT5mZV90eXBl
ID0gJ2QnOworCisgICAgICAgIHAgPSB0b2tlbnNbMV07CisgICAgICAgIGlmIChpc2RpZ2l0KCpw
KSkKKyAgICAgICAgeworICAgICAgICAgIHJlc3VsdC0+ZmVfdHlwZSA9ICdmJzsKKyAgICAgICAg
ICBwb3MgPSB0b2tsZW5bMV07CisgICAgICAgICAgaWYgKHBvcyA+IChzaXplb2YocmVzdWx0LT5m
ZV9zaXplKS0xKSkKKyAgICAgICAgICAgIHBvcyA9IHNpemVvZihyZXN1bHQtPmZlX3NpemUpLTE7
CisgICAgICAgICAgbWVtY3B5KCByZXN1bHQtPmZlX3NpemUsIHAsIHBvcyApOworICAgICAgICAg
IHJlc3VsdC0+ZmVfc2l6ZVtwb3NdID0gJ1wwJzsKKyAgICAgICAgfQorCisgICAgICAgIHAgPSB0
b2tlbnNbMl07CisgICAgICAgIGlmICh0b2tsZW5bMl0gPT0gMykgLyogQ2hhbWVsZW9uICovCisg
ICAgICAgIHsKKyAgICAgICAgICB0YnVmWzBdID0gdG91cHBlcihwWzBdKTsKKyAgICAgICAgICB0
YnVmWzFdID0gdG9sb3dlcihwWzFdKTsKKyAgICAgICAgICB0YnVmWzJdID0gdG9sb3dlcihwWzJd
KTsKKyAgICAgICAgICBmb3IgKHBvcyA9IDA7IHBvcyA8ICgxMiozKTsgcG9zKz0zKQorICAgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICh0YnVmWzBdID09IG1vbnRoX25hbWVzW3BvcyswXSAmJgor
ICAgICAgICAgICAgICAgIHRidWZbMV0gPT0gbW9udGhfbmFtZXNbcG9zKzFdICYmIAorICAgICAg
ICAgICAgICAgIHRidWZbMl0gPT0gbW9udGhfbmFtZXNbcG9zKzJdKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICByZXN1bHQtPmZlX3RpbWUudG1fbW9uID0gcG9zLzM7CisgICAgICAgICAg
ICAgIHJlc3VsdC0+ZmVfdGltZS50bV9tZGF5ID0gYXRvaSh0b2tlbnNbM10pOworICAgICAgICAg
ICAgICByZXN1bHQtPmZlX3RpbWUudG1feWVhciA9IGF0b2kodG9rZW5zWzRdKSAtIDE5MDA7Cisg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIH0gICAgICAgICAg
CisgICAgICAgICAgcG9zID0gNTsgLyogQ2hhbWVsZW9uIHRva251bSBvZiBkYXRlIGZpZWxkICov
CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgcmVzdWx0LT5m
ZV90aW1lLnRtX21vbiA9IGF0b2kocCswKS0xOworICAgICAgICAgIHJlc3VsdC0+ZmVfdGltZS50
bV9tZGF5ID0gYXRvaShwKzMpOworICAgICAgICAgIHJlc3VsdC0+ZmVfdGltZS50bV95ZWFyID0g
YXRvaShwKzYpOworICAgICAgICAgIGlmIChyZXN1bHQtPmZlX3RpbWUudG1feWVhciA8IDgwKSAv
KiBTdXBlclRDUCAqLworICAgICAgICAgICAgcmVzdWx0LT5mZV90aW1lLnRtX3llYXIgKz0gMTAw
OworCisgICAgICAgICAgcG9zID0gMzsgLyogU3VwZXJUQ1AgdG9rbnVtIG9mIGRhdGUgZmllbGQg
Ki8KKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdC0+ZmVfdGltZS50bV9ob3VyID0gYXRvaSh0
b2tlbnNbcG9zXSk7CisgICAgICAgIHJlc3VsdC0+ZmVfdGltZS50bV9taW4gPSBhdG9pKCYodG9r
ZW5zW3Bvc11bdG9rbGVuW3Bvc10tMl0pKTsKKworICAgICAgICAvKiB0aGUgY2FsbGVyIHNob3Vs
ZCBkbyB0aGlzIChpZiBkcm9wcGluZyAiLiIgYW5kICIuLiIgaXMgZGVzaXJlZCkKKyAgICAgICAg
aWYgKHJlc3VsdC0+ZmVfdHlwZSA9PSAnZCcgJiYgcmVzdWx0LT5mZV9mbmFtZVswXSA9PSAnLicg
JiYKKyAgICAgICAgICAgIChyZXN1bHQtPmZlX2ZubGVuID09IDEgfHwgKHJlc3VsdC0+ZmVfZm5s
ZW4gPT0gMiAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQt
PmZlX2ZuYW1lWzFdID09ICcuJykpKQorICAgICAgICAgIHJldHVybiAnPyc7CisgICAgICAgICov
CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdC0+ZmVfdHlwZTsKKyAgICAgIH0gLyogKGxzdHlsZSA9
PSAndycpICovCisKKyAgICB9IC8qIGlmICghbHN0eWxlICYmICghc3RhdGUtPmxzdHlsZSB8fCBz
dGF0ZS0+bHN0eWxlID09ICd3JykpICAqLworI2VuZGlmCisKKyAgICAvKiArKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyAqLworCisjaWYg
ZGVmaW5lZChTVVBQT1JUX0RMUykgLyogZGxzIC1kdFIgKi8KKyAgICBpZiAoIWxzdHlsZSAmJiAK
KyAgICAgICAoc3RhdGUtPmxzdHlsZSA9PSAnRCcgfHwgKCFzdGF0ZS0+bHN0eWxlICYmIHN0YXRl
LT5udW1saW5lcyA9PSAxKSkpCisgICAgICAgLyogL2Jpbi9kbHMgbGluZXMgaGF2ZSB0byBiZSBp
bW1lZGlhdGVseSByZWNvZ25pemFibGUgKGZpcnN0IGxpbmUpICovCisgICAgeworICAgICAgLyog
SSBoYXZlbid0IHNlZW4gYW4gRlRQIHNlcnZlciB0aGF0IGRlbGl2ZXJzIGEgL2Jpbi9kbHMgbGlz
dGluZywKKyAgICAgICAqIGJ1dCBjYW4gaW5mZXIgdGhlIGZvcm1hdCBmcm9tIHRoZSBseW54IGFu
ZCBtaXJyb3IucGwgcHJvamVjdHMuCisgICAgICAgKiBCb3RoIGZvcm1hdHMgYXJlIHN1cHBvcnRl
ZC4KKyAgICAgICAqCisgICAgICAgKiBMeW54IHNheXM6CisgICAgICAgKiBSRUFETUUgICAgICAg
ICAgICAgIDc2MyAgSW5mb3JtYXRpb24gYWJvdXQgdGhpcyBzZXJ2ZXJcMAorICAgICAgICogYmlu
LyAgICAgICAgICAgICAgICAgIC0gIFwwCisgICAgICAgKiBldGMvICAgICAgICAgICAgICAgICAg
PSAgXDAKKyAgICAgICAqIGxzLWxSICAgICAgICAgICAgICAgICAwICBcMAorICAgICAgICogbHMt
bFIuWiAgICAgICAgICAgICAgIDMgIFwwCisgICAgICAgKiBwdWIvICAgICAgICAgICAgICAgICAg
PSAgUHVibGljIGFyZWFcMAorICAgICAgICogdXNyLyAgICAgICAgICAgICAgICAgIC0gIFwwCisg
ICAgICAgKiBtb3JnYW4gICAgICAgICAgICAgICAxNCAgLT4gLi4vcmVhbC9tb3JnYW5cMAorICAg
ICAgICogVElNSVQubW9zdGxpa2VseS5aXDAKKyAgICAgICAqICAgICAgICAgICAgICAgICAgIDc5
MjE1ICBcMAorICAgICAgICoKKyAgICAgICAqIG1pcnJvci5wbCBzYXlzOgorICAgICAgICogZmls
ZW5hbWU6ICBeKFxTKilccysKKyAgICAgICAqIHNpemU6ICAgICAgKFwtfFw9fFxkKylccysKKyAg
ICAgICAqIG1vbnRoL2RheTogKChcd1x3XHdccytcZCt8XGQrXHMrXHdcd1x3KVxzKworICAgICAg
ICogdGltZS95ZWFyOiAoXGQrOlxkK3xcZFxkXGRcZCkpXHMrCisgICAgICAgKiByZXN0OiAgICAg
ICguKykgCisgICAgICAgKgorICAgICAgICogUkVBRE1FICAgICAgICAgICAgICA3NjMgIEp1bCAx
MSAyMTowNSAgSW5mb3JtYXRpb24gYWJvdXQgdGhpcyBzZXJ2ZXIKKyAgICAgICAqIGJpbi8gICAg
ICAgICAgICAgICAgICAtICBBcHIgMjggIDE5OTQKKyAgICAgICAqIGV0Yy8gICAgICAgICAgICAg
ICAgICA9ICAxMSBKdWwgMjE6MDQKKyAgICAgICAqIGxzLWxSICAgICAgICAgICAgICAgICAwICAg
NiBBdWcgMTc6MTQKKyAgICAgICAqIGxzLWxSLlogICAgICAgICAgICAgICAzICAwNSBTZXAgMTk5
NAorICAgICAgICogcHViLyAgICAgICAgICAgICAgICAgID0gIEp1bCAxMSAyMTowNCAgUHVibGlj
IGFyZWEKKyAgICAgICAqIHVzci8gICAgICAgICAgICAgICAgICAtICBTZXAgIDcgMDk6MzkKKyAg
ICAgICAqIG1vcmdhbiAgICAgICAgICAgICAgIDE0ICBBcHIgMTggMDk6MzkgIC0+IC4uL3JlYWwv
bW9yZ2FuCisgICAgICAgKiBUSU1JVC5tb3N0bGlrZWx5LloKKyAgICAgICAqICAgICAgICAgICAg
ICAgICAgIDc5MjE1ICBKdWwgMTEgMjE6MDQKKyAgICAgICovCisgICAgICBpZiAoIXN0YXRlLT5s
c3R5bGUgJiYgbGluZVtsaW5lbGVuLTFdID09ICc6JyAmJiAKKyAgICAgICAgICBsaW5lbGVuID49
IDIgJiYgdG9rbGVuW251bXRva3MtMV0gIT0gMSkKKyAgICAgIHsgCisgICAgICAgIC8qIGNvZGUg
aW4gbWlycm9yLnBsIHN1Z2dlc3RzIHRoYXQgYSBsaXN0aW5nIG1heSBiZSBwcmVjZWRlZAorICAg
ICAgICAgKiBieSBhIFBXRCBsaW5lIGluIHRoZSBmb3JtICIvc29tZS9kaXIvbmFtZXMvaGVyZToi
CisgICAgICAgICAqIGJ1dCBkb2VzIG5vdCBuZWNlc3NhcmlseSBiZWdpbiB3aXRoICcvJy4gKnNp
Z2gqCisgICAgICAgICovCisgICAgICAgIHBvcyA9IDA7CisgICAgICAgIHAgPSBsaW5lOworICAg
ICAgICB3aGlsZSAocG9zIDwgKGxpbmVsZW4tMSkpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBp
bGxlZ2FsIChvciBleHRyZW1lbHkgdW51c3VhbCkgY2hhcnMgaW4gYSBkaXJzcGVjICovCisgICAg
ICAgICAgaWYgKCpwID09ICc8JyB8fCAqcCA9PSAnfCcgfHwgKnAgPT0gJz4nIHx8CisgICAgICAg
ICAgICAgICpwID09ICc/JyB8fCAqcCA9PSAnKicgfHwgKnAgPT0gJ1xcJykKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgIGlmICgqcCA9PSAnLycgJiYgcG9zIDwgKGxpbmVsZW4tMikgJiYg
cFsxXSA9PSAnLycpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBwb3MrKzsKKyAgICAg
ICAgICBwKys7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBvcyA9PSAobGluZWxlbi0xKSkKKyAg
ICAgICAgeworICAgICAgICAgIHN0YXRlLT5sc3R5bGUgPSAnRCc7CisgICAgICAgICAgcmV0dXJu
ICc/JzsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAoIWxzdHlsZSAmJiBudW10b2tz
ID49IDIpCisgICAgICB7CisgICAgICAgIHBvcyA9IDIyOyAvKiBwb3Mgb2YgKFxkK3wtfD0pIGlm
IHRoaXMgaXMgbm90IHBhcnQgb2YgYSBtdWx0aWxpbmUgKi8KKyAgICAgICAgaWYgKHN0YXRlLT5s
c3R5bGUgJiYgY2FycnlfYnVmX2xlbikgLyogZmlyc3QgaXMgZnJvbSBwcmV2aW91cyBsaW5lICov
CisgICAgICAgICAgcG9zID0gdG9rbGVuWzFdLTE7IC8qIGFuZCBpcyAnYXMtaXMnIChtYXkgY29u
dGFpbiB3aGl0ZXNwYWNlKSAqLworCisgICAgICAgIGlmIChsaW5lbGVuID4gcG9zKQorICAgICAg
ICB7CisgICAgICAgICAgcCA9ICZsaW5lW3Bvc107CisgICAgICAgICAgaWYgKCgqcCA9PSAnLScg
fHwgKnAgPT0gJz0nIHx8IGlzZGlnaXQoKnApKSAmJgorICAgICAgICAgICAgICAoKGxpbmVsZW4g
PT0gKHBvcysxKSkgfHwgCisgICAgICAgICAgICAgICAobGluZWxlbiA+PSAocG9zKzMpICYmIHBb
MV0gPT0gJyAnICYmIHBbMl0gPT0gJyAnKSkgKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHRv
a21hcmtlciA9IDE7CisgICAgICAgICAgICBpZiAoIWNhcnJ5X2J1Zl9sZW4pCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgIHBvcyA9IDE7CisgICAgICAgICAgICAgIHdoaWxlIChwb3MgPCBu
dW10b2tzICYmICh0b2tlbnNbcG9zXSt0b2tsZW5bcG9zXSkgPCAoJmxpbmVbMjNdKSkKKyAgICAg
ICAgICAgICAgICBwb3MrKzsKKyAgICAgICAgICAgICAgdG9rbWFya2VyID0gMDsKKyAgICAgICAg
ICAgICAgaWYgKCh0b2tlbnNbcG9zXSt0b2tsZW5bcG9zXSkgPT0gKCZsaW5lWzIzXSkpCisgICAg
ICAgICAgICAgICAgdG9rbWFya2VyID0gcG9zOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKHRva21hcmtlcikgIAorICAgICAgICAgICAgeworICAgICAgICAgICAgICBsc3R5bGUgPSAn
RCc7CisgICAgICAgICAgICAgIGlmICgqdG9rZW5zW3Rva21hcmtlcl0gPT0gJy0nIHx8ICp0b2tl
bnNbdG9rbWFya2VyXSA9PSAnPScpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBp
ZiAodG9rbGVuW3Rva21hcmtlcl0gIT0gMSB8fAorICAgICAgICAgICAgICAgICAgICh0b2tlbnNb
dG9rbWFya2VyLTFdW3Rva2xlblt0b2ttYXJrZXItMV0tMV0pICE9ICcvJykKKyAgICAgICAgICAg
ICAgICAgIGxzdHlsZSA9IDA7CisgICAgICAgICAgICAgIH0gICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmb3IgKHBvcyA9
IDA7IGxzdHlsZSAmJiBwb3MgPCB0b2tsZW5bdG9rbWFya2VyXTsgcG9zKyspIAorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGlmICghaXNkaWdpdCh0b2tlbnNbdG9rbWFya2Vy
XVtwb3NdKSkKKyAgICAgICAgICAgICAgICAgICAgbHN0eWxlID0gMDsgCisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGlmIChsc3R5bGUgJiYgIXN0YXRl
LT5sc3R5bGUpIC8qIGZpcnN0IHRpbWUgKi8KKyAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIC8qIHNjYW4gZm9yIGlsbGVnYWwgKG9yIGluY3JlZGlibHkgdW51c3VhbCkgY2hhcnMgaW4g
Zm5hbWUgKi8KKyAgICAgICAgICAgICAgICBmb3IgKHAgPSB0b2tlbnNbMF07IGxzdHlsZSAmJgor
ICAgICAgICAgICAgICAgICAgICAgcCA8ICYodG9rZW5zW3Rva21hcmtlci0xXVt0b2tsZW5bdG9r
bWFya2VyLTFdXSk7IHArKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICBp
ZiAoKnAgPT0gJzwnIHx8ICpwID09ICd8JyB8fCAqcCA9PSAnPicgfHwgCisgICAgICAgICAgICAg
ICAgICAgICAgKnAgPT0gJz8nIHx8ICpwID09ICcqJyB8fCAqcCA9PSAnLycgfHwgKnAgPT0gJ1xc
JykKKyAgICAgICAgICAgICAgICAgICAgbHN0eWxlID0gMDsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgfSAvKiBzaXplIHRva2VuIGZvdW5kICovCisg
ICAgICAgICAgfSAvKiBleHBlY3RlZCBjaGFycyBiZWhpbmQgZXhwZWN0ZWQgc2l6ZSB0b2tlbiAq
LworICAgICAgICB9IC8qIGlmIChsaW5lbGVuID4gcG9zKSAqLworICAgICAgfSAvKiBpZiAoIWxz
dHlsZSAmJiBudW10b2tzID49IDIpICovCisKKyAgICAgIGlmICghbHN0eWxlICYmIHN0YXRlLT5s
c3R5bGUgPT0gJ0QnICYmICFjYXJyeV9idWZfbGVuKQorICAgICAgeworICAgICAgICAvKiB0aGUg
ZmlsZW5hbWUgb2YgYSBtdWx0aS1saW5lIGVudHJ5IGNhbiBiZSBpZGVudGlmaWVkCisgICAgICAg
ICAqIGNvcnJlY3RseSBvbmx5IGlmIGRscyBmb3JtYXQgaGFkIGJlZW4gcHJldmlvdXNseSBlc3Rh
Ymxpc2hlZC4KKyAgICAgICAgICogVGhpcyBzaG91bGQgYWx3YXlzIGJlIHRydWUgYmVjYXVzZSB0
aGVyZSBzaG91bGQgYmUgZW50cmllcworICAgICAgICAgKiBmb3IgJy4nIGFuZC9vciAnLi4nIGFu
ZC9vciBDV0QgdGhhdCBwcmVjZWRlIHRoZSByZXN0IG9mIHRoZQorICAgICAgICAgKiBsaXN0aW5n
LgorICAgICAgICAqLworICAgICAgICBwb3MgPSBsaW5lbGVuOworICAgICAgICBpZiAocG9zID4g
KHNpemVvZihzdGF0ZS0+Y2FycnlfYnVmKS0xKSkKKyAgICAgICAgICBwb3MgPSBzaXplb2Yoc3Rh
dGUtPmNhcnJ5X2J1ZiktMTsKKyAgICAgICAgbWVtY3B5KCBzdGF0ZS0+Y2FycnlfYnVmLCBsaW5l
LCBwb3MgKTsKKyAgICAgICAgc3RhdGUtPmNhcnJ5X2J1Zl9sZW4gPSBwb3M7CisgICAgICAgIHJl
dHVybiAnPyc7CisgICAgICB9CisKKyAgICAgIGlmIChsc3R5bGUgPT0gJ0QnKQorICAgICAgewor
ICAgICAgICBzdGF0ZS0+cGFyc2VkX29uZSA9IDE7CisgICAgICAgIHN0YXRlLT5sc3R5bGUgPSBs
c3R5bGU7CisKKyAgICAgICAgcCA9ICYodG9rZW5zW3Rva21hcmtlci0xXVt0b2tsZW5bdG9rbWFy
a2VyLTFdXSk7CisgICAgICAgIHJlc3VsdC0+ZmVfZm5hbWUgPSB0b2tlbnNbMF07CisgICAgICAg
IHJlc3VsdC0+ZmVfZm5sZW4gPSBwIC0gdG9rZW5zWzBdOworICAgICAgICByZXN1bHQtPmZlX3R5
cGUgID0gJ2YnOworCisgICAgICAgIGlmIChyZXN1bHQtPmZlX2ZuYW1lW3Jlc3VsdC0+ZmVfZm5s
ZW4tMV0gPT0gJy8nKQorICAgICAgICB7CisgICAgICAgICAgaWYgKHJlc3VsdC0+ZmVfbG5sZW4g
PT0gMSkKKyAgICAgICAgICAgIHJlc3VsdC0+ZmVfdHlwZSA9ICc/JzsKKyAgICAgICAgICBlbHNl
CisgICAgICAgICAgeworICAgICAgICAgICAgcmVzdWx0LT5mZV9mbmxlbi0tOworICAgICAgICAg
ICAgcmVzdWx0LT5mZV90eXBlICA9ICdkJzsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSBpZiAoaXNkaWdpdCgqdG9rZW5zW3Rva21hcmtlcl0pKQorICAgICAgICB7CisgICAg
ICAgICAgcG9zID0gdG9rbGVuW3Rva21hcmtlcl07CisgICAgICAgICAgaWYgKHBvcyA+IChzaXpl
b2YocmVzdWx0LT5mZV9zaXplKS0xKSkKKyAgICAgICAgICAgIHBvcyA9IHNpemVvZihyZXN1bHQt
PmZlX3NpemUpLTE7CisgICAgICAgICAgbWVtY3B5KCByZXN1bHQtPmZlX3NpemUsIHRva2Vuc1t0
b2ttYXJrZXJdLCBwb3MgKTsKKyAgICAgICAgICByZXN1bHQtPmZlX3NpemVbcG9zXSA9ICdcMCc7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoKHRva21hcmtlciszKSA8IG51bXRva3MgJiYgCisg
ICAgICAgICAgICAgICgmKHRva2Vuc1tudW10b2tzLTFdW3Rva2xlbltudW10b2tzLTFdXSkgLSAK
KyAgICAgICAgICAgICAgIHRva2Vuc1t0b2ttYXJrZXIrMV0pID49ICgxKzErMysxKzQpICkKKyAg
ICAgICAgeworICAgICAgICAgIHBvcyA9ICh0b2ttYXJrZXIrMyk7CisgICAgICAgICAgcCA9IHRv
a2Vuc1twb3NdOworICAgICAgICAgIHBvcyA9IHRva2xlbltwb3NdOworCisgICAgICAgICAgaWYg
KChwb3MgPT0gNCB8fCBwb3MgPT0gNSkKKyAgICAgICAgICAmJiAgaXNkaWdpdCgqcCkgJiYgaXNk
aWdpdChwW3Bvcy0xXSkgJiYgaXNkaWdpdChwW3Bvcy0yXSkKKyAgICAgICAgICAmJiAgKChwb3Mg
PT0gNSAmJiBwWzJdID09ICc6JykgfHwgIAorICAgICAgICAgICAgICAgKHBvcyA9PSA0ICYmIChp
c2RpZ2l0KHBbMV0pIHx8IHBbMV0gPT0gJzonKSkpCisgICAgICAgICAgICAgKQorICAgICAgICAg
IHsKKyAgICAgICAgICAgIG1vbnRoX251bSA9IHRva21hcmtlcisxOyAvKiBhc3N1bWVkIHBvc2l0
aW9uIG9mIG1vbnRoIGZpZWxkICovCisgICAgICAgICAgICBwb3MgPSB0b2ttYXJrZXIrMjsgICAg
ICAgLyogYXNzdW1lZCBwb3NpdGlvbiBvZiBtZGF5IGZpZWxkICovCisgICAgICAgICAgICBpZiAo
aXNkaWdpdCgqdG9rZW5zW21vbnRoX251bV0pKSAvKiBwb3NpdGlvbnMgYXJlIHJldmVyc2VkICov
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIG1vbnRoX251bSsrOworICAgICAgICAgICAg
ICBwb3MtLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHAgPSB0b2tlbnNbbW9udGhfbnVt
XTsKKyAgICAgICAgICAgIGlmIChpc2RpZ2l0KCp0b2tlbnNbcG9zXSkgCisgICAgICAgICAgICAm
JiAodG9rbGVuW3Bvc10gPT0gMSB8fCAKKyAgICAgICAgICAgICAgICAgICh0b2tsZW5bcG9zXSA9
PSAyICYmIGlzZGlnaXQodG9rZW5zW3Bvc11bMV0pKSkKKyAgICAgICAgICAgICYmIHRva2xlbltt
b250aF9udW1dID09IDMKKyAgICAgICAgICAgICYmIGlzYWxwaGEoKnApICYmIGlzYWxwaGEocFsx
XSkgJiYgaXNhbHBoYShwWzJdKSAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBwb3Mg
PSBhdG9pKHRva2Vuc1twb3NdKTsKKyAgICAgICAgICAgICAgaWYgKHBvcyA+IDAgJiYgcG9zIDw9
IDMxKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmVzdWx0LT5mZV90aW1lLnRt
X21kYXkgPSBwb3M7CisgICAgICAgICAgICAgICAgbW9udGhfbnVtID0gMTsKKyAgICAgICAgICAg
ICAgICBmb3IgKHBvcyA9IDA7IHBvcyA8ICgxMiozKTsgcG9zKz0zKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgIGlmIChwWzBdID09IG1vbnRoX25hbWVzW3BvcyswXSAmJgor
ICAgICAgICAgICAgICAgICAgICAgIHBbMV0gPT0gbW9udGhfbmFtZXNbcG9zKzFdICYmCisgICAg
ICAgICAgICAgICAgICAgICAgcFsyXSA9PSBtb250aF9uYW1lc1twb3MrMl0pCisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgbW9udGhfbnVtKys7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChtb250aF9udW0gPiAxMikKKyAgICAgICAg
ICAgICAgICAgIHJlc3VsdC0+ZmVfdGltZS50bV9tZGF5ID0gMDsKKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICByZXN1bHQtPmZlX3RpbWUudG1fbW9uID0gbW9udGhfbnVt
IC0gMTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHJl
c3VsdC0+ZmVfdGltZS50bV9tZGF5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB0b2tt
YXJrZXIgKz0gMzsgLyogc2tpcCBtZGF5L21vbi95cnRpbWUgKHRvIGZpbmQgIiAtPiAiKSAqLwor
ICAgICAgICAgICAgICBwID0gdG9rZW5zW3Rva21hcmtlcl07CisKKyAgICAgICAgICAgICAgcG9z
ID0gYXRvaShwKTsKKyAgICAgICAgICAgICAgaWYgKHBvcyA+IDI0KQorICAgICAgICAgICAgICAg
IHJlc3VsdC0+ZmVfdGltZS50bV95ZWFyID0gcG9zLTE5MDA7CisgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChwWzFdID09ICc6JykKKyAgICAg
ICAgICAgICAgICAgIHAtLTsKKyAgICAgICAgICAgICAgICByZXN1bHQtPmZlX3RpbWUudG1faG91
ciA9IHBvczsKKyAgICAgICAgICAgICAgICByZXN1bHQtPmZlX3RpbWUudG1fbWluID0gYXRvaShw
KzMpOworICAgICAgICAgICAgICAgIGlmICghc3RhdGUtPm5vd190aW1lKQorICAgICAgICAgICAg
ICAgIHsKKwkJICBzdGF0ZS0+bm93X3RpbWUgPSB0aW1lIChOVUxMKTsKKwkJICBzdGF0ZS0+bm93
X3RtID0gKmxvY2FsdGltZSAoJnN0YXRlLT5ub3dfdGltZSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHJlc3VsdC0+ZmVfdGltZS50bV95ZWFyID0gc3RhdGUtPm5vd190bS50
bV95ZWFyOworICAgICAgICAgICAgICAgIGlmICggKCggc3RhdGUtPm5vd190bS50bV9tb24gIDw8
IDQpICsgc3RhdGUtPm5vd190bS50bV9tZGF5KSA8CisgICAgICAgICAgICAgICAgICAgICAoKHJl
c3VsdC0+ZmVfdGltZS50bV9tb24gPDwgNCkgKyByZXN1bHQtPmZlX3RpbWUudG1fbWRheSkgKQor
ICAgICAgICAgICAgICAgICAgcmVzdWx0LT5mZV90aW1lLnRtX3llYXItLTsKKyAgICAgICAgICAg
ICAgfSAvKiBnb3QgeWVhciBvciB0aW1lICovCisgICAgICAgICAgICB9IC8qIGdvdCBtb250aC9t
ZGF5ICovCisgICAgICAgICAgfSAvKiBtYXkgaGF2ZSB5ZWFyIG9yIHRpbWUgKi8KKyAgICAgICAg
fSAvKiBlbm91Z2ggcmVtYWluaW5nIHRvIHBvc3NpYmx5IGhhdmUgZGF0ZS90aW1lICovCisKKyAg
ICAgICAgaWYgKG51bXRva3MgPiAodG9rbWFya2VyKzIpKQorICAgICAgICB7CisgICAgICAgICAg
cG9zID0gdG9rbWFya2VyKzE7CisgICAgICAgICAgcCA9IHRva2Vuc1twb3NdOworICAgICAgICAg
IGlmICh0b2tsZW5bcG9zXSA9PSAyICYmICpwID09ICctJyAmJiBwWzFdID09ICc+JykKKyAgICAg
ICAgICB7CisgICAgICAgICAgICBwID0gJih0b2tlbnNbbnVtdG9rcy0xXVt0b2tsZW5bbnVtdG9r
cy0xXV0pOworICAgICAgICAgICAgcmVzdWx0LT5mZV90eXBlICA9ICdsJzsKKyAgICAgICAgICAg
IHJlc3VsdC0+ZmVfbG5hbWUgPSB0b2tlbnNbcG9zKzFdOworICAgICAgICAgICAgcmVzdWx0LT5m
ZV9sbmxlbiA9IHAgLSByZXN1bHQtPmZlX2xuYW1lOworICAgICAgICAgICAgaWYgKHJlc3VsdC0+
ZmVfbG5sZW4gPiAxICYmCisgICAgICAgICAgICAgICAgcmVzdWx0LT5mZV9sbmFtZVtyZXN1bHQt
PmZlX2xubGVuLTFdID09ICcvJykKKyAgICAgICAgICAgICAgcmVzdWx0LT5mZV9sbmxlbi0tOwor
ICAgICAgICAgIH0KKyAgICAgICAgfSAvKiBpZiAobnVtdG9rcyA+ICh0b2ttYXJrZXIrMikpICov
CisKKyAgICAgICAgLyogdGhlIGNhbGxlciBzaG91bGQgZG8gdGhpcyAoaWYgZHJvcHBpbmcgIi4i
IGFuZCAiLi4iIGlzIGRlc2lyZWQpCisgICAgICAgIGlmIChyZXN1bHQtPmZlX3R5cGUgPT0gJ2Qn
ICYmIHJlc3VsdC0+ZmVfZm5hbWVbMF0gPT0gJy4nICYmCisgICAgICAgICAgICAocmVzdWx0LT5m
ZV9mbmxlbiA9PSAxIHx8IChyZXN1bHQtPmZlX2ZubGVuID09IDIgJiYKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5mZV9mbmFtZVsxXSA9PSAnLicpKSkKKyAg
ICAgICAgICByZXR1cm4gJz8nOworICAgICAgICAqLworCisgICAgICAgIHJldHVybiByZXN1bHQt
PmZlX3R5cGU7CisKKyAgICAgIH0gLyogaWYgKGxzdHlsZSA9PSAnRCcpICovCisgICAgfSAvKiBp
ZiAoIWxzdHlsZSAmJiAoIXN0YXRlLT5sc3R5bGUgfHwgc3RhdGUtPmxzdHlsZSA9PSAnRCcpKSAq
LworI2VuZGlmCisKKyAgICAvKiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKyAqLworCisgIH0gLyogaWYgKGxpbmVsZW4gPiAwKSAqLwor
CisgIGlmIChzdGF0ZS0+cGFyc2VkX29uZSB8fCBzdGF0ZS0+bHN0eWxlKSAvKiBqdW5rIGlmIHdl
IGZhaWwgdG8gcGFyc2UgKi8KKyAgICByZXR1cm4gJz8nOyAgICAgIC8qIHRoaXMgdGltZSBidXQg
aGFkIHByZXZpb3VzbHkgcGFyc2VkIHN1Y2Nlc3NmdWxseSAqLworICByZXR1cm4gJyInOyAgICAg
ICAgLyogaXRzIHBhcnQgb2YgYSBjb21tZW50IG9yIGVycm9yIG1lc3NhZ2UgKi8KK30KKworLyog
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0gKi8KKy8qIHN0YW5kYWxvbmUgdGVzdGluZyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworI2lm
IDAKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKK3N0YXRpYyBpbnQgZG9faXQoRklMRSAqb3V0Zmls
ZSwgCisgICAgICAgICAgICAgICAgIGNoYXIgKmxpbmUsIHNpemVfdCBsaW5lbGVuLCBzdHJ1Y3Qg
bGlzdF9zdGF0ZSAqc3RhdGUsCisgICAgICAgICAgICAgICAgIGNoYXIgKipjbW50X2J1ZiwgdW5z
aWduZWQgaW50ICpjbW50X2J1Zl9zeiwKKyAgICAgICAgICAgICAgICAgY2hhciAqKmxpc3RfYnVm
LCB1bnNpZ25lZCBpbnQgKmxpc3RfYnVmX3N6ICkKK3sKKyAgc3RydWN0IGxpc3RfcmVzdWx0IHJl
c3VsdDsKKyAgY2hhciAqcDsKKyAgaW50IHJjOworCisgIHJjID0gUGFyc2VGVFBMSVNUKCBsaW5l
LCBzdGF0ZSwgJnJlc3VsdCApOworCisgIGlmICghb3V0ZmlsZSkKKyAgeworICAgIG91dGZpbGUg
PSBzdGRvdXQ7CisgICAgaWYgKHJjID09ICc/JykKKyAgICAgIGZwcmludGYob3V0ZmlsZSwgImp1
bms6ICUuKnNcbiIsIChpbnQpbGluZWxlbiwgbGluZSApOworICAgIGVsc2UgaWYgKHJjID09ICci
JykKKyAgICAgIGZwcmludGYob3V0ZmlsZSwgImNtbnQ6ICUuKnNcbiIsIChpbnQpbGluZWxlbiwg
bGluZSApOworICAgIGVsc2UKKyAgICAgIGZwcmludGYob3V0ZmlsZSwgCisgICAgICAgICAgICAg
ICJsaXN0OiAlMDJ1LSUwMnUtJTAydSAgJTAydTolMDJ1JWNNICUyMHMgJS4qcyVzJS4qc1xuIiwK
KyAgICAgICAgICAgICAgKHJlc3VsdC5mZV90aW1lLnRtX21kYXkgPyAocmVzdWx0LmZlX3RpbWUu
dG1fbW9uICsgMSkgOiAwKSwKKyAgICAgICAgICAgICAgcmVzdWx0LmZlX3RpbWUudG1fbWRheSwK
KyAgICAgICAgICAgICAgKHJlc3VsdC5mZV90aW1lLnRtX21kYXkgPyAocmVzdWx0LmZlX3RpbWUu
dG1feWVhciAlIDEwMCkgOiAwKSwKKyAgICAgICAgICAgICAgcmVzdWx0LmZlX3RpbWUudG1faG91
ciAtIAorICAgICAgICAgICAgICAgICgocmVzdWx0LmZlX3RpbWUudG1faG91ciA+IDEyKT8oMTIp
OigwKSksCisgICAgICAgICAgICAgIHJlc3VsdC5mZV90aW1lLnRtX21pbiwKKyAgICAgICAgICAg
ICAgKChyZXN1bHQuZmVfdGltZS50bV9ob3VyID49IDEyKSA/ICdQJyA6ICdBJyksCisgICAgICAg
ICAgICAgIChyYyA9PSAnZCcgPyAiPERJUj4gICAgICAgICAiIDogCisgICAgICAgICAgICAgIChy
YyA9PSAnbCcgPyAiPEpVTkNUSU9OPiAgICAiIDogcmVzdWx0LmZlX3NpemUpKSwKKyAgICAgICAg
ICAgICAgKGludClyZXN1bHQuZmVfZm5sZW4sIHJlc3VsdC5mZV9mbmFtZSwKKyAgICAgICAgICAg
ICAgKChyYyA9PSAnbCcgJiYgcmVzdWx0LmZlX2xubGVuKSA/ICIgLT4gIiA6ICIiKSwKKyAgICAg
ICAgICAgICAgKGludCkoKHJjID09ICdsJyAmJiByZXN1bHQuZmVfbG5sZW4pID8gcmVzdWx0LmZl
X2xubGVuIDogMCksCisgICAgICAgICAgICAgICgocmMgPT0gJ2wnICYmIHJlc3VsdC5mZV9sbmxl
bikgPyByZXN1bHQuZmVfbG5hbWUgOiAiIikgKTsKKyAgfQorICBlbHNlIGlmIChyYyAhPSAnPycp
IC8qIE5PVCBqdW5rICovCisgIHsgCisgICAgY2hhciAqKmJ1ZnAgPSBsaXN0X2J1ZjsKKyAgICB1
bnNpZ25lZCBpbnQgKmJ1ZnogPSBsaXN0X2J1Zl9zejsKKyAgICAKKyAgICBpZiAocmMgPT0gJyIn
KSAvKiBjb21tZW50IC0gbWFrZSBpdCBhICdyZXN1bHQnICovCisgICAgeworICAgICAgbWVtc2V0
KCAmcmVzdWx0LCAwLCBzaXplb2YocmVzdWx0KSk7CisgICAgICByZXN1bHQuZmVfZm5hbWUgPSBs
aW5lOworICAgICAgcmVzdWx0LmZlX2ZubGVuID0gbGluZWxlbjsKKyAgICAgIHJlc3VsdC5mZV90
eXBlID0gJ2YnOworICAgICAgaWYgKGxpbmVbbGluZWxlbi0xXSA9PSAnLycpCisgICAgICB7Cisg
ICAgICAgIHJlc3VsdC5mZV90eXBlID0gJ2QnOworICAgICAgICByZXN1bHQuZmVfZm5sZW4tLTsg
CisgICAgICB9CisgICAgICBidWZwID0gY21udF9idWY7CisgICAgICBidWZ6ID0gY21udF9idWZf
c3o7CisgICAgICByYyA9IHJlc3VsdC5mZV90eXBlOworICAgIH0gIAorCisgICAgbGluZWxlbiA9
IDgwICsgcmVzdWx0LmZlX2ZubGVuICsgcmVzdWx0LmZlX2xubGVuOworICAgIHAgPSAoY2hhciAq
KXJlYWxsb2MoICpidWZwLCAqYnVmeiArIGxpbmVsZW4gKTsKKyAgICBpZiAoIXApCisgICAgICBy
ZXR1cm4gLTE7CisgICAgc3ByaW50ZiggJnBbKmJ1ZnpdLCAKKyAgICAgICAgICAgICAiJTAydS0l
MDJ1LSUwNHUgICUwMnU6JTAydTolMDJ1ICUyMHMgJS4qcyVzJS4qc1xuIiwKKyAgICAgICAgICAg
ICAgKHJlc3VsdC5mZV90aW1lLnRtX21kYXkgPyAocmVzdWx0LmZlX3RpbWUudG1fbW9uICsgMSkg
OiAwKSwKKyAgICAgICAgICAgICAgcmVzdWx0LmZlX3RpbWUudG1fbWRheSwKKyAgICAgICAgICAg
ICAgKHJlc3VsdC5mZV90aW1lLnRtX21kYXkgPyAocmVzdWx0LmZlX3RpbWUudG1feWVhciArIDE5
MDApIDogMCksCisgICAgICAgICAgICAgIHJlc3VsdC5mZV90aW1lLnRtX2hvdXIsCisgICAgICAg
ICAgICAgIHJlc3VsdC5mZV90aW1lLnRtX21pbiwKKyAgICAgICAgICAgICAgcmVzdWx0LmZlX3Rp
bWUudG1fc2VjLAorICAgICAgICAgICAgICAocmMgPT0gJ2QnID8gIjxESVI+ICAgICAgICAgIiA6
IAorICAgICAgICAgICAgICAocmMgPT0gJ2wnID8gIjxKVU5DVElPTj4gICAgIiA6IHJlc3VsdC5m
ZV9zaXplKSksCisgICAgICAgICAgICAgIChpbnQpcmVzdWx0LmZlX2ZubGVuLCByZXN1bHQuZmVf
Zm5hbWUsCisgICAgICAgICAgICAgICgocmMgPT0gJ2wnICYmIHJlc3VsdC5mZV9sbmxlbikgPyAi
IC0+ICIgOiAiIiksCisgICAgICAgICAgICAgIChpbnQpKChyYyA9PSAnbCcgJiYgcmVzdWx0LmZl
X2xubGVuKSA/IHJlc3VsdC5mZV9sbmxlbiA6IDApLAorICAgICAgICAgICAgICAoKHJjID09ICds
JyAmJiByZXN1bHQuZmVfbG5sZW4pID8gcmVzdWx0LmZlX2xuYW1lIDogIiIpICk7CisgICAgbGlu
ZWxlbiA9IHN0cmxlbigmcFsqYnVmel0pOworICAgICpidWZwID0gcDsKKyAgICAqYnVmeiA9ICpi
dWZ6ICsgbGluZWxlbjsKKyAgfQorICByZXR1cm4gMDsKK30KKworaW50IG1haW4oaW50IGFyZ2Ms
IGNoYXIgKmFyZ3ZbXSkKK3sKKyAgRklMRSAqaW5maWxlID0gKEZJTEUgKikwOworICBGSUxFICpv
dXRmaWxlID0gKEZJTEUgKikwOworICBpbnQgbmVlZF9jbG9zZV9pbiA9IDA7CisgIGludCBuZWVk
X2Nsb3NlX291dCA9IDA7CisKKyAgaWYgKGFyZ2MgPiAxKQorICB7CisgICAgaW5maWxlID0gc3Rk
aW47CisgICAgaWYgKHN0cmNtcChhcmd2WzFdLCAiLSIpID09IDApCisgICAgICBuZWVkX2Nsb3Nl
X2luID0gMDsKKyAgICBlbHNlIGlmICgoaW5maWxlID0gZm9wZW4oYXJndlsxXSwgInIiKSkgIT0g
KChGSUxFICopMCkpCisgICAgICBuZWVkX2Nsb3NlX2luID0gMTsKKyAgICBlbHNlCisgICAgICBm
cHJpbnRmKHN0ZGVyciwgIlVuYWJsZSB0byBvcGVuIGlucHV0IGZpbGUgJyVzJ1xuIiwgYXJndlsx
XSk7CisgIH0KKyAgaWYgKGluZmlsZSAmJiBhcmdjID4gMikKKyAgeworICAgIG91dGZpbGUgPSBz
dGRvdXQ7CisgICAgaWYgKHN0cmNtcChhcmd2WzJdLCAiLSIpID09IDApCisgICAgICBuZWVkX2Ns
b3NlX291dCA9IDA7CisgICAgZWxzZSBpZiAoKG91dGZpbGUgPSBmb3Blbihhcmd2WzJdLCAidyIp
KSAhPSAoKEZJTEUgKikwKSkKKyAgICAgIG5lZWRfY2xvc2Vfb3V0ID0gMTsKKyAgICBlbHNlCisg
ICAgeworICAgICAgZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gb3BlbiBvdXRwdXQgZmlsZSAn
JXMnXG4iLCBhcmd2WzJdKTsKKyAgICAgIGZjbG9zZShpbmZpbGUpOworICAgICAgaW5maWxlID0g
KEZJTEUgKikwOworICAgIH0KKyAgfQorCisgIGlmICghaW5maWxlKQorICB7CisgICAgY2hhciAq
YXBwbmFtZSA9ICYoYXJndlswXVtzdHJsZW4oYXJndlswXSldKTsKKyAgICB3aGlsZSAoYXBwbmFt
ZSA+IGFyZ3ZbMF0pCisgICAgeworICAgICAgYXBwbmFtZS0tOworICAgICAgaWYgKCphcHBuYW1l
ID09ICcvJyB8fCAqYXBwbmFtZSA9PSAnXFwnIHx8ICphcHBuYW1lID09ICc6JykKKyAgICAgIHsK
KyAgICAgICAgYXBwbmFtZSsrOworICAgICAgICBicmVhazsKKyAgICAgIH0gCisgICAgfQorICAg
IGZwcmludGYoc3RkZXJyLCAKKyAgICAgICAgIlVzYWdlOiAlcyA8aW5wdXRmaWxlbmFtZT4gWzxv
dXRwdXRmaWxlbmFtZT5dXG4iCisgICAgICAgICJcbklmIGFuIG91dG91dCBmaWxlIGlzIHNwZWNp
ZmllZCB0aGUgcmVzdWx0cyB3aWxsIGJlIgorICAgICAgICAiXG5iZSBwb3N0LXByb2Nlc3NlZCwg
YW5kIG9ubHkgdGhlIGZpbGUgZW50cmllcyB3aWxsIGFwcGVhciIKKyAgICAgICAgIlxuKG9yIGFs
bCBjb21tZW50cyBpZiB0aGVyZSBhcmUgbm8gZmlsZSBlbnRyaWVzKS4iCisgICAgICAgICJcbk5v
dCBzcGVjaWZ5aW5nIGFuIG91dHB1dCBmaWxlIGNhdXNlcyAlcyB0byBydW4gaW4gXCJkZWJ1Z1wi
IgorICAgICAgICAiXG5tb2RlLCBpZSByZXN1bHRzIGFyZSBwcmludGVkIGFzIGxpbmVzIGFyZSBw
YXJzZWQuIgorICAgICAgICAiXG5JZiBhIGZpbGVuYW1lIGlzIGEgc2luZ2xlIGRhc2ggKCctJyks
IHN0ZGluL3N0ZG91dCBpcyB1c2VkLiIKKyAgICAgICAgIlxuIiwgYXBwbmFtZSwgYXBwbmFtZSAp
OworICB9CisgIGVsc2UKKyAgeworICAgIGNoYXIgKmNtbnRfYnVmID0gKGNoYXIgKikwOworICAg
IHVuc2lnbmVkIGludCBjbW50X2J1Zl9zeiA9IDA7CisgICAgY2hhciAqbGlzdF9idWYgPSAoY2hh
ciAqKTA7CisgICAgdW5zaWduZWQgaW50IGxpc3RfYnVmX3N6ID0gMDsKKworICAgIHN0cnVjdCBs
aXN0X3N0YXRlIHN0YXRlOworICAgIGNoYXIgbGluZVs1MTJdOworCisgICAgbWVtc2V0KCAmc3Rh
dGUsIDAsIHNpemVvZihzdGF0ZSkgKTsKKyAgICB3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxp
bmUpLCBpbmZpbGUpKQorICAgIHsKKyAgICAgIHNpemVfdCBsaW5lbGVuID0gc3RybGVuKGxpbmUp
OworICAgICAgaWYgKGxpbmVsZW4gPCAoc2l6ZW9mKGxpbmUpLTEpKQorICAgICAgeworICAgICAg
ICBpZiAobGluZWxlbiA+IDAgJiYgbGluZVtsaW5lbGVuLTFdID09ICdcbicpCisgICAgICAgICAg
bGluZWxlbi0tOworICAgICAgICBpZiAoZG9faXQoIG91dGZpbGUsIGxpbmUsIGxpbmVsZW4sICZz
dGF0ZSwgCisgICAgICAgICAgICAgICAgICAgJmNtbnRfYnVmLCAmY21udF9idWZfc3osICZsaXN0
X2J1ZiwgJmxpc3RfYnVmX3N6KSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgZnByaW50Zihz
dGRlcnIsICJJbnN1ZmZpY2llbnQgbWVtb3J5LiBMaXN0aW5nIG1heSBiZSBpbmNvbXBsZXRlLlxu
Iik7IAorICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlCisg
ICAgICB7CisgICAgICAgIC8qIG5vICdcbicgZm91bmQuIGRyb3AgdGhpcyBhbmQgZXZlcnl0aGlu
ZyB1cCB0byB0aGUgbmV4dCAnXG4nICovCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZHJvcDog
JS4qcyIsIChpbnQpbGluZWxlbiwgbGluZSApOworICAgICAgICB3aGlsZSAobGluZWxlbiA9PSBz
aXplb2YobGluZSkpCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoIWZnZXRzKGxpbmUsIHNpemVv
ZihsaW5lKSwgaW5maWxlKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGxpbmVsZW4g
PSAwOworICAgICAgICAgIHdoaWxlIChsaW5lbGVuIDwgc2l6ZW9mKGxpbmUpICYmIGxpbmVbbGlu
ZWxlbl0gIT0gJ1xuJykKKyAgICAgICAgICAgIGxpbmVsZW4rKzsKKyAgICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIiUuKnMiLCAoaW50KWxpbmVsZW4sIGxpbmUgKTsKKyAgICAgICAgfSAgCisgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKG91dGZp
bGUpCisgICAgeworICAgICAgaWYgKGxpc3RfYnVmKQorICAgICAgICBmd3JpdGUoIGxpc3RfYnVm
LCAxLCBsaXN0X2J1Zl9zeiwgb3V0ZmlsZSApOworICAgICAgZWxzZSBpZiAoY21udF9idWYpCisg
ICAgICAgIGZ3cml0ZSggY21udF9idWYsIDEsIGNtbnRfYnVmX3N6LCBvdXRmaWxlICk7CisgICAg
fQorICAgIGlmIChsaXN0X2J1ZikgCisgICAgICBmcmVlKGxpc3RfYnVmKTsKKyAgICBpZiAoY21u
dF9idWYpCisgICAgICBmcmVlKGNtbnRfYnVmKTsKKworICAgIGlmIChuZWVkX2Nsb3NlX2luKQor
ICAgICAgZmNsb3NlKGluZmlsZSk7CisgICAgaWYgKG91dGZpbGUgJiYgbmVlZF9jbG9zZV9vdXQp
CisgICAgICBmY2xvc2Uob3V0ZmlsZSk7CisgIH0KKworICByZXR1cm4gMDsKK30KKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvUGFyc2VGVFBMaXN0LmggYi9XZWJLaXQvZ3Rr
L3dlYmtpdC9QYXJzZUZUUExpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li41NTgwNjU3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvUGFyc2VGVFBM
aXN0LmgKQEAgLTAsMCArMSwxMjcgQEAKKy8qICoqKioqIEJFR0lOIExJQ0VOU0UgQkxPQ0sgKioq
KioKKyAqIFZlcnNpb246IE1QTCAxLjEvR1BMIDIuMC9MR1BMIDIuMQorICoKKyAqIFRoZSBjb250
ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vu
c2UgVmVyc2lvbgorICogMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMg
ZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCisgKiB0aGUgTGljZW5zZS4gWW91IG1heSBv
YnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiBodHRwOi8vd3d3Lm1vemlsbGEub3Jn
L01QTC8KKyAqCisgKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBk
aXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAorICogV0lUSE9VVCBXQVJSQU5UWSBPRiBB
TlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlCisgKiBm
b3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25z
IHVuZGVyIHRoZQorICogTGljZW5zZS4KKyAqCisgKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBtb3pp
bGxhLm9yZyBDb2RlLgorICoKKyAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2lu
YWwgQ29kZSBpcworICogQ3lydXMgUGF0ZWwgPGN5cEBmYjE0LnVuaS1tYWluei5kZT4uCisgKiBQ
b3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChD
KSAyMDAyCisgKiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg
KgorICogQ29udHJpYnV0b3Iocyk6CisgKiAgIERvdWcgVHVybmVyIDxkb3VndEBuZXRzY2FwZS5j
b20+CisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkg
YmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAqIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyICh0aGUgIkdQTCIpLCBvcgorICogdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMSBvciBsYXRlciAodGhl
ICJMR1BMIiksCisgKiBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3Ig
dGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAorICogb2YgdGhvc2UgYWJvdmUuIElmIHlv
dSB3aXNoIHRvIGFsbG93IHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIG9ubHkKKyAq
IHVuZGVyIHRoZSB0ZXJtcyBvZiBlaXRoZXIgdGhlIEdQTCBvciB0aGUgTEdQTCwgYW5kIG5vdCB0
byBhbGxvdyBvdGhlcnMgdG8KKyAqIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisgKiBkZWNpc2lvbiBieSBkZWxl
dGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGlj
ZQorICogYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTCBvciB0aGUgTEdQ
TC4gSWYgeW91IGRvIG5vdCBkZWxldGUKKyAqIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lw
aWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKyAqIHRoZSB0ZXJt
cyBvZiBhbnkgb25lIG9mIHRoZSBNUEwsIHRoZSBHUEwgb3IgdGhlIExHUEwuCisgKgorICogKioq
KiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKiogKi8KKworI2luY2x1ZGUgPGdsaWIuaD4KKworLyog
UGFyc2VGVFBMaXN0KCkgcGFyc2VzIGxpbmVzIGZyb20gYW4gRlRQIExJU1QgY29tbWFuZC4KKyoq
CisqKiBXcml0dGVuIEp1bHkgMjAwMiBieSBDeXJ1cyBQYXRlbCA8Y3lwQGZiMTQudW5pLW1haW56
LmRlPgorKiogd2l0aCBhY2tub3dsZWRnZW1lbnRzIHRvIHNxdWlkLCBseW54LCB3Z2V0IGFuZCBm
dHBtaXJyb3IuCisqKgorKiogQXJndW1lbnRzOgorKiogICAnbGluZSc6ICAgICAgIGxpbmUgb2Yg
RlRQIGRhdGEgY29ubmVjdGlvbiBvdXRwdXQuIFRoZSBsaW5lIGlzIGFzc3VtZWQKKyoqICAgICAg
ICAgICAgICAgICB0byBlbmQgYXQgdGhlIGZpcnN0ICdcMCcgb3IgJ1xuJyBvciAnXHJcbicuIAor
KiogICAnc3RhdGUnOiAgICAgIGEgc3RydWN0dXJlIHVzZWQgaW50ZXJuYWxseSB0byB0cmFjayBz
dGF0ZSBiZXR3ZWVuIAorKiogICAgICAgICAgICAgICAgIGxpbmVzLiBOZWVkcyB0byBiZSBiemVy
bygpJ2QgYXQgTElTVCBiZWdpbi4KKyoqICAgJ3Jlc3VsdCc6ICAgICB3aGVyZSBQYXJzZUZUUExp
c3Qgd2lsbCBzdG9yZSB0aGUgcmVzdWx0cyBvZiB0aGUgcGFyc2UKKyoqICAgICAgICAgICAgICAg
ICBpZiAnbGluZScgaXMgbm90IGEgY29tbWVudCBhbmQgaXMgbm90IGp1bmsuCisqKgorKiogUmV0
dXJucyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyoqICAgICdkJyAtIExJU1QgbGluZSBpcyBhIGRp
cmVjdG9yeSBlbnRyeSAoJ3Jlc3VsdCcgaXMgdmFsaWQpCisqKiAgICAnZicgLSBMSVNUIGxpbmUg
aXMgYSBmaWxlJ3MgZW50cnkgKCdyZXN1bHQnIGlzIHZhbGlkKQorKiogICAgJ2wnIC0gTElTVCBs
aW5lIGlzIGEgc3ltbGluaydzIGVudHJ5ICgncmVzdWx0JyBpcyB2YWxpZCkKKyoqICAgICc/JyAt
IExJU1QgbGluZSBpcyBqdW5rLiAoY3dkLCBub24tZmlsZS9kaXIvbGluaywgZXRjKQorKiogICAg
JyInIC0gaXRzIG5vdCBhIExJU1QgbGluZSAoaXRzIGEgImNvbW1lbnQiKQorKioKKyoqIEl0IG1h
eSBiZSBhZHZpc2FibGUgdG8gbGV0IHRoZSBlbmQtdXNlciBzZWUgImNvbW1lbnRzIiAocGFydGlj
dWxhcmx5IHdoZW4gCisqKiB0aGUgbGlzdGluZyByZXN1bHRzIGluIE9OTFkgc3VjaCBsaW5lcykg
YmVjYXVzZSBzdWNoIGEgbGlzdGluZyBtYXkgYmU6CisqKiAtIGFuIHVua25vd24gTElTVCBmb3Jt
YXQgKE5MU1Qgb3IgImN1c3RvbSIgZm9ybWF0IGZvciBleGFtcGxlKQorKiogLSBhbiBlcnJvciBt
c2cgKEVQRVJNLEVOT0VOVCxFTkZJTEUsRU1GSUxFLEVOT1RESVIsRU5PVEJMSyxFRVhERVYgZXRj
KS4KKyoqIC0gYW4gZW1wdHkgZGlyZWN0b3J5IGFuZCB0aGUgJ2NvbW1lbnQnIGlzIGEgInRvdGFs
IDAiIGxpbmUgb3Igc2ltaWxhci4KKyoqICAgKHdhcm5pbmc6IGEgInRvdGFsIDAiIGNhbiBhbHNv
IG1lYW4gdGhlIHRvdGFsIHNpemUgaXMgdW5rbm93bikuCisqKgorKiogUGFyc2VGVFBMaXN0KCkg
c3VwcG9ydHMgYWxsIGtub3duIEZUUCBMSVNUaW5nIGZvcm1hdHM6CisqKiAtICcvYmluL2xzIC1s
JyBhbmQgYWxsIHZhcmlhbnRzIChpbmNsdWRpbmcgSGVsbHNvZnQgRlRQIGZvciBOZXRXYXJlKTsg
CisqKiAtIEVQTEYgKEVhc2lseSBQYXJzYWJsZSBMaXN0IEZvcm1hdCk7IAorKiogLSBXaW5kb3dz
IE5UJ3MgZGVmYXVsdCAiRE9TLWRpcnN0eWxlIjsKKyoqIC0gT1MvMiBiYXNpYyBzZXJ2ZXIgZm9y
bWF0IExJU1QgZm9ybWF0OyAgCisqKiAtIFZNUyAoTXVsdGlOZXQsIFVDWCwgYW5kIENNVSkgTElT
VCBmb3JtYXQgKGluY2x1ZGluZyBtdWx0aS1saW5lIGZvcm1hdCk7CisqKiAtIElCTSBWTS9DTVMs
IFZNL0VTQSBMSVNUIGZvcm1hdCAodHdvIGtub3duIHZhcmlhbnRzKTsgIAorKiogLSBTdXBlclRD
UCBGVFAgU2VydmVyIGZvciBXaW4xNiBMSVNUIGZvcm1hdDsgIAorKiogLSBOZXRNYW5hZ2UgQ2hh
bWVsZW9uIChORVdUKSBmb3IgV2luMTYgTElTVCBmb3JtYXQ7ICAKKyoqIC0gJy9iaW4vZGxzJyAo
dHdvIGtub3duIHZhcmlhbnRzLCBwbHVzIG11bHRpLWxpbmUpIExJU1QgZm9ybWF0OworKiogSWYg
dGhlcmUgYXJlIG90aGVycywgdGhlbiBJJ2QgbGlrZSB0byBoZWFyIGFib3V0IHRoZW0gKHNlbmQg
bWUgYSBzYW1wbGUpLgorKioKKyoqIE5MU1RpbmdzIGFyZSBub3Qgc3VwcG9ydGVkIGV4cGxpY2l0
ZWx5IGJlY2F1c2UgdGhleSBjYW5ub3QgYmUgbWFjaGluZSAKKyoqIHBhcnNlZCBjb25zaXN0ZW50
bHk6IE5MU1RpbmdzIGRvIG5vdCBoYXZlIHVuaXF1ZSBjaGFyYWN0ZXJpc3RpY3MgLSBldmVuIAor
KiogdGhlIGFzc3VtcHRpb24gdGhhdCB0aGVyZSB3b24ndCBiZSB3aGl0ZXNwYWNlIG9uIHRoZSBs
aW5lIGRvZXMgbm90IGhvbGQKKyoqIGJlY2F1c2Ugc29tZSBubGlzdGluZ3MgaGF2ZSBtb3JlIHRo
YW4gb25lIGZpbGVuYW1lIHBlciBsaW5lIGFuZC9vcgorKiogbWF5IGhhdmUgZmlsZW5hbWVzIHRo
YXQgaGF2ZSBzcGFjZXMgaW4gdGhlbS4gTW9yZW92ZXIsIGRpc3Rpbmd1aXNoaW5nCisqKiBiZXR3
ZWVuIGFuIGVycm9yIG1lc3NhZ2UgYW5kIGFuIE5MU1QgbGluZSB3b3VsZCByZXF1aXJlIFBhcnNl
TGlzdCgpIHRvCisqKiByZWNvZ25pemUgYWxsIHRoZSBwb3NzaWJsZSBzdHJlcnJvcigpIG1lc3Nh
Z2VzIGluIHRoZSB3b3JsZC4KKyovCisKKworLyogI3VuZGVmIGFueXRoaW5nIHlvdSBkb24ndCB3
YW50IHRvIHN1cHBvcnQgKi8KKyNkZWZpbmUgU1VQUE9SVF9MU0wgIC8qIC9iaW4vbHMgLWwgYW5k
IGRvemVucyBvZiB2YXJpYXRpb25zIHRoZXJvZiAqLworI2RlZmluZSBTVVBQT1JUX0RMUyAgLyog
L2Jpbi9kbHMgZm9ybWF0ICh2ZXJ5LCBWZXJ5LCBWRVJZIHJhcmUpICovCisjZGVmaW5lIFNVUFBP
UlRfRVBMRiAvKiBFeHRyYW9yZGluYXJpbHkgUGF0aGV0aWMgTGlzdCBGb3JtYXQgKi8KKyNkZWZp
bmUgU1VQUE9SVF9ET1MgIC8qIFdpbk5UIHNlcnZlciBpbiAnc2l0ZSBkaXJzdHlsZScgZG9zICov
CisjZGVmaW5lIFNVUFBPUlRfVk1TICAvKiBWTVMgKGFsbDogTXVsdGlOZXQsIFVDWCwgQ01VLUlQ
KSAqLworI2RlZmluZSBTVVBQT1JUX0NNUyAgLyogSUJNIFZNL0NNUyxWTS9FU0EgKHovVk0gYW5k
IExJU1RJTkcgZm9ybXMpICovCisjZGVmaW5lIFNVUFBPUlRfT1MyICAvKiBJQk0gVENQL0lQIGZv
ciBPUy8yIC0gRlRQIFNlcnZlciAqLworI2RlZmluZSBTVVBQT1JUX1cxNiAgLyogd2luMTYgaG9z
dHM6IFN1cGVyVENQIG9yIE5ldE1hbmFnZSBDaGFtZWxlb24gKi8KKworc3RydWN0IGxpc3Rfc3Rh
dGUKK3sKKyAgdm9pZCAgICAgICAgICAgKm1hZ2ljOyAgICAgICAgLyogdG8gZGV0ZXJtaW5lIGlm
IHByZXZpb3VzbHkgaW5pdGlhbGl6ZWQgKi8KKyAgdGltZV90ICAgICAgCSBub3dfdGltZTsJLyog
Y3VycmVudCBkYXRlIGZvciB5ZWFyIGNhbGN1bGF0aW9uICovCisgIHN0cnVjdCB0bQkgbm93X3Rt
OwkvKiBjdXJyZW50IGRhdGUgZm9yIHllYXIgY2FsY3VsYXRpb24gKi8KKyAgZ2ludDMyICAgICAg
ICAgbHN0eWxlOyAgICAgICAgLyogTElTVGluZyBzdHlsZSAqLworICBnaW50MzIgICAgICAgICBw
YXJzZWRfb25lOyAgICAvKiByZXR1cm5lZCBhbnl0aGluZyB5ZXQ/ICovCisgIGNoYXIgICAgICAg
ICAgIGNhcnJ5X2J1Zls4NF07IC8qIGZvciBWTVMgbXVsdGlsaW5lICovCisgIGd1aW50MzIgICAg
ICAgIGNhcnJ5X2J1Zl9sZW47IC8qIGxlbmd0aCBvZiBuYW1lIGluIGNhcnJ5X2J1ZiAqLworICBn
dWludDMyICAgICAgICBudW1saW5lczsgICAgICAvKiBudW1iZXIgb2YgbGluZXMgc2VlbiAqLwor
fTsKKworc3RydWN0IGxpc3RfcmVzdWx0Cit7CisgIGdpbnQzMiAgICAgICAgICAgIGZlX3R5cGU7
ICAgICAgLyogJ2QnKGRpcikgb3IgJ2wnKGxpbmspIG9yICdmJyhmaWxlKSAqLworICBjb25zdCBj
aGFyICogICAgICBmZV9mbmFtZTsgICAgIC8qIHBvaW50ZXIgdG8gZmlsZW5hbWUgKi8KKyAgZ3Vp
bnQzMiAgICAgICAgICAgZmVfZm5sZW47ICAgICAvKiBsZW5ndGggb2YgZmlsZW5hbWUgKi8KKyAg
Y29uc3QgY2hhciAqICAgICAgZmVfbG5hbWU7ICAgICAvKiBwb2ludGVyIHRvIHN5bWxpbmsgbmFt
ZSAqLworICBndWludDMyICAgICAgICAgICBmZV9sbmxlbjsgICAgIC8qIGxlbmd0aCBvZiBzeW1s
aW5rIG5hbWUgKi8KKyAgY2hhciAgICAgICAgICAgICAgZmVfc2l6ZVs0MF07ICAvKiBzaXplIG9m
IGZpbGUgaW4gYnl0ZXMgKDw9ICgyXjEyOCAtIDEpKSAqLworICBzdHJ1Y3QgdG0JICAgIGZlX3Rp
bWU7CSAgLyogbGFzdC1tb2RpZmllZCB0aW1lICovCisgIGdpbnQzMiAgICAgICAgICAgIGZlX2Np
bmZzOyAgICAgLyogZmlsZSBzeXN0ZW0gaXMgZGVmaW5pdGVseSBjYXNlIGluc2Vuc2l0aXZlICov
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogKGNvbnZlcnRpbmcgYWxsLXVw
Y2FzZSBuYW1lcyBtYXkgYmUgZGVzaXJhYmxlKSAqLworfTsKKworaW50IFBhcnNlRlRQTGlzdChj
b25zdCBjaGFyICpsaW5lLCAKKyAgICAgICAgICAgICAgICAgc3RydWN0IGxpc3Rfc3RhdGUgKnN0
YXRlLAorICAgICAgICAgICAgICAgICBzdHJ1Y3QgbGlzdF9yZXN1bHQgKnJlc3VsdCApOworCmRp
ZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC90cGwuYyBiL1dlYktpdC9ndGsvd2Via2l0L3Rw
bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NGY2YmMKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC90cGwuYwpAQCAtMCwwICsxLDI0NzggQEAKKy8q
CitDb3B5cmlnaHQgKGMpIDIwMDUtMjAxMCwgVHJveSBELiBIYW5zb24gICAgIGh0dHA6Ly90cGwu
c291cmNlZm9yZ2UubmV0CitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCitUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJB
UworSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVECitUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEKK1BBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUgorT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CitFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCitQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKK1BST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKK0xJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCitORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorKi8KKworI2RlZmluZSBUUExfVkVSU0lPTiAxLjUKKworc3RhdGljIGNvbnN0
IGNoYXIgaWRbXT0iJElkOiB0cGwuYyAxOTIgMjAwOS0wNC0yNCAxMDozNTozMFogdGhhbnNvbiAk
IjsKKworCisjaW5jbHVkZSA8c3RkbGliLmg+ICAvKiBtYWxsb2MgKi8KKyNpbmNsdWRlIDxzdGRh
cmcuaD4gIC8qIHZhX2xpc3QgKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4gIC8qIG1lbWNweSwgbWVt
c2V0LCBzdHJjaHIgKi8KKyNpbmNsdWRlIDxzdGRpby5oPiAgIC8qIHByaW50ZiAodHBsX2hvb2su
b29wcyBkZWZhdWx0IGZ1bmN0aW9uKSAqLworCisjaWZuZGVmIF9XSU4zMgorI2luY2x1ZGUgPHVu
aXN0ZC5oPiAgICAgLyogZm9yIGZ0cnVuY2F0ZSAqLworI2Vsc2UKKyNpbmNsdWRlIDxpby5oPgor
I2RlZmluZSBmdHJ1bmNhdGUoeCx5KSBfY2hzaXplKHgseSkKKyNlbmRpZgorI2luY2x1ZGUgPHN5
cy90eXBlcy5oPiAgLyogZm9yICdvcGVuJyAqLworI2luY2x1ZGUgPHN5cy9zdGF0Lmg+ICAgLyog
Zm9yICdvcGVuJyAqLworI2luY2x1ZGUgPGZjbnRsLmg+ICAgICAgLyogZm9yICdvcGVuJyAqLwor
I2luY2x1ZGUgPGVycm5vLmg+CisjaWZuZGVmIF9XSU4zMgorI2luY2x1ZGUgPGludHR5cGVzLmg+
ICAgLyogdWludDMyX3QsIHVpbnQ2NF90LCBldGMgKi8KKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVk
IHNob3J0IHVzaG9ydDsKK3R5cGVkZWYgX19pbnQxNiBpbnQxNl90OwordHlwZWRlZiBfX2ludDMy
IGludDMyX3Q7Cit0eXBlZGVmIF9faW50NjQgaW50NjRfdDsKK3R5cGVkZWYgdW5zaWduZWQgX19p
bnQxNiB1aW50MTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgX19pbnQzMiB1aW50MzJfdDsKK3R5cGVk
ZWYgdW5zaWduZWQgX19pbnQ2NCB1aW50NjRfdDsKKyNlbmRpZgorCisKKyNpZiAoIGRlZmluZWQg
X19DWUdXSU5fXyB8fCBkZWZpbmVkIF9fTUlOR1czMl9fIHx8IGRlZmluZWQgX1dJTjMyICkKKyNp
bmNsdWRlICJ3aW4vbW1hbi5oIiAgIC8qIG1tYXAgKi8KKyNlbHNlCisjaW5jbHVkZSA8c3lzL21t
YW4uaD4gICAvKiBtbWFwICovCisjZW5kaWYKKworI2luY2x1ZGUgInRwbC5oIgorCisjZGVmaW5l
IFRQTF9HQVRIRVJfQlVGTEVOIDgxOTIKKyNkZWZpbmUgVFBMX01BR0lDICJ0cGwiCisKKy8qIG1h
Y3JvIHRvIGFkZCBhIHN0cnVjdHVyZSB0byBhIGRvdWJseS1saW5rZWQgbGlzdCAqLworI2RlZmlu
ZSBETF9BREQoaGVhZCxhZGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgIGlmIChoZWFkKSB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgKGFkZCktPnByZXYgPSAoaGVhZCkt
PnByZXY7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIChoZWFkKS0+cHJl
di0+bmV4dCA9IChhZGQpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAo
aGVhZCktPnByZXYgPSAoYWRkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICAgICAgKGFkZCktPm5leHQgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAoaGVhZCk9KGFkZCk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgKGhlYWQpLT5wcmV2ID0gKGhl
YWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIChoZWFkKS0+
bmV4dCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIH0gd2hpbGUgKDApOworCisjZGVmaW5lIGZhdGFsX29vbSgpIHRwbF9ob29rLmZhdGFsKCJv
dXQgb2YgbWVtb3J5XG4iKQorCisvKiBiaXQgZmxhZ3MgKGludGVybmFsKS4gcHJlY2VkZWQgYnkg
dGhlIGV4dGVybmFsIGZsYWdzIGluIHRwbC5oICovCisjZGVmaW5lIFRQTF9XUk9OTFkgICAgICAg
ICAoMSA8PCA5KSAgLyogYXBwIGhhcyBpbml0aWF0ZWQgdHBsIHBhY2tpbmcgICovCisjZGVmaW5l
IFRQTF9SRE9OTFkgICAgICAgICAoMSA8PCAxMCkgIC8qIHRwbCB3YXMgbG9hZGVkIChmb3IgdW5w
YWNraW5nKSAqLworI2RlZmluZSBUUExfWEVORElBTiAgICAgICAgKDEgPDwgMTEpICAvKiBzd2Fw
IGVuZGlhbm5lc3Mgd2hlbiB1bnBhY2tpbmcgKi8KKyNkZWZpbmUgVFBMX09MRF9TVFJJTkdfRk1U
ICgxIDw8IDEyKSAvKiB0cGwgaGFzIHN0cmluZ3MgaW4gMS4yIGZvcm1hdCAqLworCisvKiB2YWx1
ZXMgZm9yIHRoZSBmbGFncyBieXRlIHRoYXQgYXBwZWFycyBhZnRlciB0aGUgbWFnaWMgcHJlZml4
ICovCisjZGVmaW5lIFRQTF9TVVBQT1JURURfQklURkxBR1MgMworI2RlZmluZSBUUExfRkxfQklH
RU5ESUFOICAgKDEgPDwgMCkKKyNkZWZpbmUgVFBMX0ZMX05VTExTVFJJTkdTICgxIDw8IDEpCisK
Ky8qIGNoYXIgdmFsdWVzIGZvciBub2RlIHR5cGUgKi8KKyNkZWZpbmUgVFBMX1RZUEVfUk9PVCAg
IDAKKyNkZWZpbmUgVFBMX1RZUEVfSU5UMzIgIDEKKyNkZWZpbmUgVFBMX1RZUEVfVUlOVDMyIDIK
KyNkZWZpbmUgVFBMX1RZUEVfQllURSAgIDMKKyNkZWZpbmUgVFBMX1RZUEVfU1RSICAgIDQKKyNk
ZWZpbmUgVFBMX1RZUEVfQVJZICAgIDUKKyNkZWZpbmUgVFBMX1RZUEVfQklOICAgIDYKKyNkZWZp
bmUgVFBMX1RZUEVfRE9VQkxFIDcKKyNkZWZpbmUgVFBMX1RZUEVfSU5UNjQgIDgKKyNkZWZpbmUg
VFBMX1RZUEVfVUlOVDY0IDkKKyNkZWZpbmUgVFBMX1RZUEVfSU5UMTYgIDEwCisjZGVmaW5lIFRQ
TF9UWVBFX1VJTlQxNiAxMQorI2RlZmluZSBUUExfVFlQRV9QT1VORCAgMTIKKworLyogZXJyb3Ig
Y29kZXMgKi8KKyNkZWZpbmUgRVJSX05PVF9NSU5TSVpFICAgICAgICAoLTEpCisjZGVmaW5lIEVS
Ul9NQUdJQ19NSVNNQVRDSCAgICAgKC0yKQorI2RlZmluZSBFUlJfSU5DT05TSVNURU5UX1NaICAg
ICgtMykKKyNkZWZpbmUgRVJSX0ZNVF9JTlZBTElEICAgICAgICAoLTQpCisjZGVmaW5lIEVSUl9G
TVRfTUlTU0lOR19OVUwgICAgKC01KQorI2RlZmluZSBFUlJfRk1UX01JU01BVENIICAgICAgICgt
NikKKyNkZWZpbmUgRVJSX0ZMRU5fTUlTTUFUQ0ggICAgICAoLTcpCisjZGVmaW5lIEVSUl9JTkNP
TlNJU1RFTlRfU1oyICAgKC04KQorI2RlZmluZSBFUlJfSU5DT05TSVNURU5UX1NaMyAgICgtOSkK
KyNkZWZpbmUgRVJSX0lOQ09OU0lTVEVOVF9TWjQgICAoLTEwKQorI2RlZmluZSBFUlJfVU5TVVBQ
T1JURURfRkxBR1MgICgtMTEpCisKKy8qIGFjY2VzcyB0byBBKC4uLikgbm9kZXMgYnkgaW5kZXgg
Ki8KK3R5cGVkZWYgc3RydWN0IHRwbF9waWR4IHsKKyAgICBzdHJ1Y3QgdHBsX25vZGUgKm5vZGU7
CisgICAgc3RydWN0IHRwbF9waWR4ICpuZXh0LCpwcmV2OworfSB0cGxfcGlkeDsKKworLyogQSgu
Li4pIG5vZGUgZGF0dW0gKi8KK3R5cGVkZWYgc3RydWN0IHRwbF9hdHlwIHsKKyAgICB1aW50MzJf
dCBudW07ICAgIC8qIG51bSBlbGVtZW50cyAqLworICAgIHNpemVfdCBzejsgICAgICAgLyogc2l6
ZSBvZiBlYWNoIGJhY2tib25lJ3MgZGF0dW0gKi8KKyAgICBzdHJ1Y3QgdHBsX2JhY2tib25lICpi
YiwqYmJ0YWlsOyAKKyAgICB2b2lkICpjdXI7ICAgICAgICAgICAgICAgICAgICAgICAKK30gdHBs
X2F0eXA7CisKKy8qIGJhY2tib25lIHRvIGV4dGVuZCBBKC4uLikgbGlzdHMgZHluYW1pY2FsbHkg
Ki8KK3R5cGVkZWYgc3RydWN0IHRwbF9iYWNrYm9uZSB7CisgICAgc3RydWN0IHRwbF9iYWNrYm9u
ZSAqbmV4dDsKKyAgICAvKiB3aGVuIHRoaXMgc3RydWN0dXJlIGlzIG1hbGxvYydkLCBleHRyYSBz
cGFjZSBpcyBhbGxvYydkIGF0IHRoZQorICAgICAqIGVuZCB0byBzdG9yZSB0aGUgYmFja2JvbmUg
ImRhdHVtIiwgYW5kIGRhdGEgcG9pbnRzIHRvIGl0LiAqLworI2lmZGVmIF9fU1REQ19WRVJTSU9O
X18KKyNpZiBfX1NURENfVkVSU0lPTl9fIDwgMTk5OTAxCisgICAgY2hhciAqZGF0YTsgIAorI2Vs
c2UKKyAgICBjaGFyIGRhdGFbXTsKKyNlbmRpZgorI2Vsc2UKKyAgICBjaGFyIGRhdGFbXTsKKyNl
bmRpZgorfSB0cGxfYmFja2JvbmU7CisKKy8qIG1tYXAgcmVjb3JkICovCit0eXBlZGVmIHN0cnVj
dCB0cGxfbW1hcF9yZWMgeworICAgIGludCBmZDsKKyAgICB2b2lkICp0ZXh0OworICAgIHNpemVf
dCB0ZXh0X3N6OworfSB0cGxfbW1hcF9yZWM7CisKKy8qIHJvb3Qgbm9kZSBkYXR1bSAqLwordHlw
ZWRlZiBzdHJ1Y3QgdHBsX3Jvb3RfZGF0YSB7CisgICAgaW50IGZsYWdzOworICAgIHRwbF9waWR4
ICpwaWR4OworICAgIHRwbF9tbWFwX3JlYyBtbWFwOworICAgIGNoYXIgKmZtdDsKKyAgICBpbnQg
KmZ4bGVucywgbnVtX2Z4bGVuczsKK30gdHBsX3Jvb3RfZGF0YTsKKworLyogbm9kZSB0eXBlIHRv
IHNpemUgbWFwcGluZyAqLworc3RydWN0IHRwbF90eXBlX3QgeworICAgIGNoYXIgYzsKKyAgICBp
bnQgc3o7Cit9OworCisKKy8qIEludGVybmFsIHByb3RvdHlwZXMgKi8KK3N0YXRpYyB0cGxfbm9k
ZSAqdHBsX25vZGVfbmV3KHRwbF9ub2RlICpwYXJlbnQpOworc3RhdGljIHRwbF9ub2RlICp0cGxf
ZmluZF9pKHRwbF9ub2RlICpuLCBpbnQgaSk7CitzdGF0aWMgdm9pZCAqdHBsX2Nwdih2b2lkICpk
YXRhdiwgdm9pZCAqZGF0YSwgc2l6ZV90IHN6KTsKK3N0YXRpYyB2b2lkICp0cGxfZXh0ZW5kX2Jh
Y2tib25lKHRwbF9ub2RlICpuKTsKK3N0YXRpYyBjaGFyICp0cGxfZm10KHRwbF9ub2RlICpyKTsK
K3N0YXRpYyB2b2lkICp0cGxfZHVtcF9hdHlwKHRwbF9ub2RlICpuLCB0cGxfYXR5cCogYXQsIHZv
aWQgKmR2KTsKK3N0YXRpYyBzaXplX3QgdHBsX3Nlcl9vc3oodHBsX25vZGUgKm4pOworc3RhdGlj
IHZvaWQgdHBsX2ZyZWVfYXR5cCh0cGxfbm9kZSAqbix0cGxfYXR5cCAqYXR5cCk7CitzdGF0aWMg
aW50IHRwbF9kdW1wX3RvX21lbSh0cGxfbm9kZSAqciwgdm9pZCAqYWRkciwgc2l6ZV90IHN6KTsK
K3N0YXRpYyBpbnQgdHBsX21tYXBfZmlsZShjaGFyICpmaWxlbmFtZSwgdHBsX21tYXBfcmVjICpt
YXBfcmVjKTsKK3N0YXRpYyBpbnQgdHBsX21tYXBfb3V0cHV0X2ZpbGUoY2hhciAqZmlsZW5hbWUs
IHNpemVfdCBzeiwgdm9pZCAqKnRleHRfb3V0KTsKK3N0YXRpYyBpbnQgdHBsX2NwdV9iaWdlbmRp
YW4odm9pZCk7CitzdGF0aWMgaW50IHRwbF9uZWVkc19lbmRpYW5fc3dhcCh2b2lkICopOworc3Rh
dGljIHZvaWQgdHBsX2J5dGVzd2FwKHZvaWQgKndvcmQsIGludCBsZW4pOworc3RhdGljIHZvaWQg
dHBsX2ZhdGFsKGNoYXIgKmZtdCwgLi4uKTsKK3N0YXRpYyBpbnQgdHBsX3Nlcmxlbih0cGxfbm9k
ZSAqciwgdHBsX25vZGUgKm4sIHZvaWQgKmR2LCBzaXplX3QgKnNlcmxlbik7CitzdGF0aWMgaW50
IHRwbF91bnBhY2tBMCh0cGxfbm9kZSAqcik7CitzdGF0aWMgaW50IHRwbF9vb3BzKGNvbnN0IGNo
YXIgKmZtdCwgLi4uKTsKK3N0YXRpYyBpbnQgdHBsX2dhdGhlcl9tZW0oIGNoYXIgKmJ1Ziwgc2l6
ZV90IGxlbiwgdHBsX2dhdGhlcl90ICoqZ3MsIHRwbF9nYXRoZXJfY2IgKmNiLCB2b2lkICpkYXRh
KTsKK3N0YXRpYyBpbnQgdHBsX2dhdGhlcl9ub25ibG9ja2luZyggaW50IGZkLCB0cGxfZ2F0aGVy
X3QgKipncywgdHBsX2dhdGhlcl9jYiAqY2IsIHZvaWQgKmRhdGEpOworc3RhdGljIGludCB0cGxf
Z2F0aGVyX2Jsb2NraW5nKGludCBmZCwgdm9pZCAqKmltZywgc2l6ZV90ICpzeik7CitzdGF0aWMg
dHBsX25vZGUgKnRwbF9tYXBfdmEoY2hhciAqZm10LCB2YV9saXN0IGFwKTsKKworLyogVGhpcyBp
cyB1c2VkIGludGVybmFsbHkgdG8gaGVscCBjYWxjdWxhdGUgcGFkZGluZyB3aGVuIGEgJ2RvdWJs
ZScgCisgKiBmb2xsb3dzIGEgc21hbGxlciBkYXRhdHlwZSBpbiBhIHN0cnVjdHVyZS4gTm9ybWFs
bHkgdW5kZXIgZ2NjCisgKiBvbiB4ODYsIGQgd2lsbCBiZSBhbGlnbmVkIGF0ICs0LCBob3dldmVy
IHVzZSBvZiAtbWFsaWduLWRvdWJsZQorICogY2F1c2VzIGQgdG8gYmUgYWxpZ25lZCBhdCArOCAo
dGhpcyBpcyBhY3R1YWxseSBmYXN0ZXIgb24geDg2KS4KKyAqIEFsc28gU1BBUkMgYW5kIHg4Nl82
NCBzZWVtIHRvIGFsaWduIGFsd2F5cyBvbiArOC4gCisgKi8KK3N0cnVjdCB0cGxfZG91YmxlX2Fs
aWdubWVudF9kZXRlY3RvciB7CisgICAgY2hhciBhOworICAgIGRvdWJsZSBkOyAgLyogc29tZSBw
bGF0Zm9ybXMgYWxpZ24gdGhpcyBvbiArNCwgb3RoZXJzIG9uICs4ICovCit9OworCisvKiB0aGlz
IGlzIGFub3RoZXIgY2FzZSB3aGVyZSBhbGlnbm1lbnQgdmFyaWVzLiBtYWMgb3MgeC9nY2Mgd2Fz
IG9ic2VydmVkCisgKiB0byBhbGlnbiB0aGUgaW50NjRfdCBhdCArNCB1bmRlciAtbTMyIGFuZCBh
dCArOCB1bmRlciAtbTY0ICovCitzdHJ1Y3QgdHBsX2ludDY0X2FsaWdubWVudF9kZXRlY3RvciB7
CisgICAgaW50IGk7CisgICAgaW50NjRfdCBqOyAgLyogc29tZSBwbGF0Zm9ybXMgYWxpZ24gdGhp
cyBvbiArNCwgb3RoZXJzIG9uICs4ICovCit9OworCit0eXBlZGVmIHN0cnVjdCB7CisgIHNpemVf
dCBpbnRlcl9lbHRfbGVuOyAvKiBwYWRkZWQgaW50ZXItZWxlbWVudCBsZW47IGkuZS4gJmFbMV0u
ZmllbGQgLSAmYVswXS5maWVsZCAqLworICB0cGxfbm9kZSAqaXRlcl9zdGFydF9ub2RlOyAvKiBu
b2RlIHRvIGp1bXAgYmFjayB0bywgYXMgd2Ugc3RhcnQgZWFjaCBuZXcgaXRlcmF0aW9uICovCisg
IHNpemVfdCBpdGVybnVtOyAvKiBjdXJyZW50IGl0ZXJhdGlvbiBudW1iZXIgKHRvdGFsIHJlcSdk
LiBpdGVyJ3MgaW4gbi0+bnVtKSAqLworfSB0cGxfcG91bmRfZGF0YTsKKworLyogSG9va3MgZm9y
IGN1c3RvbWl6aW5nIHRwbCBtZW0gYWxsb2MsIGVycm9yIGhhbmRsaW5nLCBldGMuIFNldCBkZWZh
dWx0cy4gKi8KK3RwbF9ob29rX3QgdHBsX2hvb2sgPSB7CisgICAgLyogLm9vcHMgPSAgICAgICAq
LyB0cGxfb29wcywKKyAgICAvKiAubWFsbG9jID0gICAgICovIG1hbGxvYywKKyAgICAvKiAucmVh
bGxvYyA9ICAgICovIHJlYWxsb2MsCisgICAgLyogLmZyZWUgPSAgICAgICAqLyBmcmVlLAorICAg
IC8qIC5mYXRhbCA9ICAgICAgKi8gdHBsX2ZhdGFsLAorICAgIC8qIC5nYXRoZXJfbWF4ID0gKi8g
MCAvKiBtYXggdHBsIHNpemUgKGJ5dGVzKSBmb3IgdHBsX2dhdGhlciAqLworfTsKKworc3RhdGlj
IGNvbnN0IGNoYXIgdHBsX2ZtdF9jaGFyc1tdID0gIkFTKCQpQml1Y3NmSVVqdiMiOyAvKiB2YWxp
ZCBmb3JtYXQgY2hhcnMgKi8KK3N0YXRpYyBjb25zdCBjaGFyIHRwbF9TX2ZtdF9jaGFyc1tdID0g
Iml1Y3NmSVVqdiMkKCkiOyAvKiB2YWxpZCB3aXRoaW4gUyguLi4pICovCitzdGF0aWMgY29uc3Qg
Y2hhciB0cGxfZGF0YXBlZWtfb2tfY2hhcnNbXSA9ICJpdWNzZklVanYiOyAvKiB2YWxpZCBpbiBk
YXRhcGVlayAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB0cGxfdHlwZV90IHRwbF90eXBlc1tdID0g
eworICAgIC8qIFtUUExfVFlQRV9ST09UXSA9ICAgKi8gIHsncicsIDB9LAorICAgIC8qIFtUUExf
VFlQRV9JTlQzMl0gPSAgKi8gIHsnaScsIHNpemVvZihpbnQzMl90KX0sCisgICAgLyogW1RQTF9U
WVBFX1VJTlQzMl0gPSAqLyAgeyd1Jywgc2l6ZW9mKHVpbnQzMl90KX0sCisgICAgLyogW1RQTF9U
WVBFX0JZVEVdID0gICAqLyAgeydjJywgc2l6ZW9mKGNoYXIpfSwKKyAgICAvKiBbVFBMX1RZUEVf
U1RSXSA9ICAgICovICB7J3MnLCBzaXplb2YoY2hhciopfSwKKyAgICAvKiBbVFBMX1RZUEVfQVJZ
XSA9ICAgICovICB7J0EnLCAwfSwKKyAgICAvKiBbVFBMX1RZUEVfQklOXSA9ICAgICovICB7J0In
LCAwfSwKKyAgICAvKiBbVFBMX1RZUEVfRE9VQkxFXSA9ICovICB7J2YnLCA4fSwgLyogbm90IHNp
emVvZihkb3VibGUpIGFzIHRoYXQgdmFyaWVzICovCisgICAgLyogW1RQTF9UWVBFX0lOVDY0XSA9
ICAqLyAgeydJJywgc2l6ZW9mKGludDY0X3QpfSwKKyAgICAvKiBbVFBMX1RZUEVfVUlOVDY0XSA9
ICovICB7J1UnLCBzaXplb2YodWludDY0X3QpfSwKKyAgICAvKiBbVFBMX1RZUEVfSU5UMTZdID0g
ICovICB7J2onLCBzaXplb2YoaW50MTZfdCl9LAorICAgIC8qIFtUUExfVFlQRV9VSU5UMTZdID0g
Ki8gIHsndicsIHNpemVvZih1aW50MTZfdCl9LAorICAgIC8qIFtUUExfVFlQRV9QT1VORF0gPSAg
Ki8gIHsnIycsIDB9LAorfTsKKworLyogZGVmYXVsdCBlcnJvci1yZXBvcnRpbmcgZnVuY3Rpb24u
IEp1c3Qgd3JpdGVzIHRvIHN0ZGVyci4gKi8KK3N0YXRpYyBpbnQgdHBsX29vcHMoY29uc3QgY2hh
ciAqZm10LCAuLi4pIHsKKyAgICB2YV9saXN0IGFwOworICAgIHZhX3N0YXJ0KGFwLGZtdCk7Cisg
ICAgdmZwcmludGYoc3RkZXJyLGZtdCxhcCk7CisgICAgdmFfZW5kKGFwKTsKKyAgICByZXR1cm4g
MDsKK30KKworCitzdGF0aWMgdHBsX25vZGUgKnRwbF9ub2RlX25ldyh0cGxfbm9kZSAqcGFyZW50
KSB7CisgICAgdHBsX25vZGUgKm47CisgICAgaWYgKChuPXRwbF9ob29rLm1hbGxvYyhzaXplb2Yo
dHBsX25vZGUpKSkgPT0gTlVMTCkgeworICAgICAgICBmYXRhbF9vb20oKTsKKyAgICB9CisgICAg
bi0+YWRkcj1OVUxMOworICAgIG4tPmRhdGE9TlVMTDsKKyAgICBuLT5udW09MTsKKyAgICBuLT5z
ZXJfb3N6PTA7CisgICAgbi0+Y2hpbGRyZW49TlVMTDsKKyAgICBuLT5uZXh0PU5VTEw7CisgICAg
bi0+cGFyZW50PXBhcmVudDsKKyAgICByZXR1cm4gbjsKK30KKworLyogVXNlZCBpbiBTKC4uKSBm
b3JtYXRzIHRvIHBhY2sgc2V2ZXJhbCBmaWVsZHMgZnJvbSBhIHN0cnVjdHVyZSBiYXNlZCBvbiAK
KyAqIG9ubHkgdGhlIHN0cnVjdHVyZSBhZGRyZXNzLiBXZSBuZWVkIHRvIGNhbGN1bGF0ZSBmaWVs
ZCBhZGRyZXNzZXMgCisgKiBtYW51YWxseSB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBzaXplIG9m
IHRoZSBmaWVsZHMgYW5kIGludGVydmVuaW5nIHBhZGRpbmcuCisgKiBUaGUgd3JpbmtsZSBpcyB0
aGF0IGRvdWJsZSBpcyBub3Qgbm9ybWFsbHkgYWxpZ25lZCBvbiB4ODYtMzIgYnV0IHRoZQorICog
LW1hbGlnbi1kb3VibGUgY29tcGlsZXIgb3B0aW9uIGNhdXNlcyBpdCB0byBiZS4gRG91YmxlIGFy
ZSBhbGlnbmVkCisgKiBvbiBTcGFyYywgYW5kIGFwcGFyZW50bHkgb24gNjQgYml0IHg4Ni4gV2Ug
dXNlIGEgaGVscGVyIHN0cnVjdHVyZSAKKyAqIHRvIGRldGVjdCB3aGV0aGVyIGRvdWJsZSBpcyBh
bGlnbmVkIGluIHRoaXMgY29tcGlsYXRpb24gZW52aXJvbm1lbnQuCisgKi8KK2NoYXIgKmNhbGNf
ZmllbGRfYWRkcih0cGxfbm9kZSAqcGFyZW50LCBpbnQgdHlwZSxjaGFyICpzdHJ1Y3RfYWRkciwg
aW50IG9yZGluYWwpIHsKKyAgICB0cGxfbm9kZSAqcHJldjsKKyAgICBpbnQgb2Zmc2V0OworICAg
IGludCBhbGlnbl9zejsKKworICAgIGlmIChvcmRpbmFsID09IDEpIHJldHVybiBzdHJ1Y3RfYWRk
cjsgIC8qIGZpcnN0IGZpZWxkIHN0YXJ0cyBvbiBzdHJ1Y3R1cmUgYWRkcmVzcyAqLworCisgICAg
LyogZ2VuZXJhdGUgZW5vdWdoIHBhZGRpbmcgc28gZmllbGQgYWRkciBpcyBkaXZpc2libGUgYnkg
aXQncyBhbGlnbl9zei4gNCwgOCwgZXRjICovCisgICAgcHJldiA9IHBhcmVudC0+Y2hpbGRyZW4t
PnByZXY7IAorICAgIHN3aXRjaCh0eXBlKSB7CisgICAgICBjYXNlIFRQTF9UWVBFX0RPVUJMRToK
KyAgICAgICAgYWxpZ25fc3ogPSBzaXplb2Yoc3RydWN0IHRwbF9kb3VibGVfYWxpZ25tZW50X2Rl
dGVjdG9yKSA+IDEyID8gOCA6IDQ7IAorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgVFBMX1RZ
UEVfSU5UNjQ6CisgICAgICBjYXNlIFRQTF9UWVBFX1VJTlQ2NDoKKyAgICAgICAgYWxpZ25fc3og
PSBzaXplb2Yoc3RydWN0IHRwbF9pbnQ2NF9hbGlnbm1lbnRfZGV0ZWN0b3IpID4gMTIgPyA4IDog
NDsgCisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYWxpZ25fc3ogPSB0
cGxfdHlwZXNbdHlwZV0uc3o7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBvZmZzZXQgPSAo
KHVpbnRwdHJfdClwcmV2LT5hZGRyIC0gKHVpbnRwdHJfdClzdHJ1Y3RfYWRkcikKKyAgICAgICAg
ICAgICsgKHRwbF90eXBlc1twcmV2LT50eXBlXS5zeiAqIHByZXYtPm51bSk7CisgICAgb2Zmc2V0
ID0gKG9mZnNldCArIGFsaWduX3N6IC0gMSkgLyBhbGlnbl9zeiAqIGFsaWduX3N6OworICAgIHJl
dHVybiBzdHJ1Y3RfYWRkciArIG9mZnNldDsKK30KKworVFBMX0FQSSB0cGxfbm9kZSAqdHBsX21h
cChjaGFyICpmbXQsLi4uKSB7CisgIHZhX2xpc3QgYXA7CisgIHRwbF9ub2RlICp0bjsKKworICB2
YV9zdGFydChhcCxmbXQpOworICB0biA9IHRwbF9tYXBfdmEoZm10LCBhcCk7CisgIHZhX2VuZChh
cCk7CisgIHJldHVybiB0bjsKK30KKworc3RhdGljIHRwbF9ub2RlICp0cGxfbWFwX3ZhKGNoYXIg
KmZtdCwgdmFfbGlzdCBhcCkgeworICAgIGludCBscGFyZW5fbGV2ZWw9MCxleHBlY3RfbHBhcmVu
PTAsdD0wLGluX3N0cnVjdHVyZT0wLG9yZGluYWw9MDsKKyAgICBpbnQgaW5fbmVzdGVkX3N0cnVj
dHVyZT0wOworICAgIGNoYXIgKmMsICpwZWVrLCAqc3RydWN0X2FkZHI9TlVMTCwgKnN0cnVjdF9u
ZXh0OworICAgIHRwbF9ub2RlICpyb290LCpwYXJlbnQsKm49TlVMTCwqcHJlY2VkaW5nLCppdGVy
X3N0YXJ0X25vZGU9TlVMTCwKKyAgICAgICAgICAgICAqc3RydWN0X3dpZGVzdF9ub2RlPU5VTEws
ICpucDsgdHBsX3BpZHggKnBpZHg7CisgICAgdHBsX3BvdW5kX2RhdGEgKnBkOworICAgIGludCAq
ZnhsZW5zLCBudW1fZnhsZW5zLCBwb3VuZF9udW0sIHBvdW5kX3Byb2QsIGFwcGxpZXNfdG9fc3Ry
dWN0OworICAgIGludCBjb250aWdfZnhsZW5zWzEwXTsgLyogdGVtcCBzcGFjZSBmb3IgY29udGln
dW91cyBmeGxlbnMgKi8KKyAgICBpbnQgbnVtX2NvbnRpZ19meGxlbnMsIGksIGo7CisgICAgcHRy
ZGlmZl90IGludGVyX2VsdF9sZW49MDsgLyogcGFkZGVkIGVsZW1lbnQgbGVuZ3RoIG9mIGNvbnRp
Z3VvdXMgc3RydWN0cyBpbiBhcnJheSAqLworCisKKyAgICByb290ID0gdHBsX25vZGVfbmV3KE5V
TEwpOworICAgIHJvb3QtPnR5cGUgPSBUUExfVFlQRV9ST09UOyAKKyAgICByb290LT5kYXRhID0g
KHRwbF9yb290X2RhdGEqKXRwbF9ob29rLm1hbGxvYyhzaXplb2YodHBsX3Jvb3RfZGF0YSkpOwor
ICAgIGlmICghcm9vdC0+ZGF0YSkgZmF0YWxfb29tKCk7CisgICAgbWVtc2V0KCh0cGxfcm9vdF9k
YXRhKilyb290LT5kYXRhLDAsc2l6ZW9mKHRwbF9yb290X2RhdGEpKTsKKworICAgIC8qIHNldCB1
cCByb290IG5vZGVzIHNwZWNpYWwgc2VyX29zeiB0byByZWZsZWN0IG92ZXJoZWFkIG9mIHByZWFt
YmxlICovCisgICAgcm9vdC0+c2VyX29zeiA9ICBzaXplb2YodWludDMyX3QpOyAvKiB0cGwgbGVh
ZGluZyBsZW5ndGggKi8KKyAgICByb290LT5zZXJfb3N6ICs9IHN0cmxlbihmbXQpICsgMTsgIC8q
IGZtdCArIE5VTC10ZXJtaW5hdG9yICovCisgICAgcm9vdC0+c2VyX29zeiArPSA0OyAgICAgICAg
ICAgICAgICAvKiAndHBsJyBtYWdpYyBwcmVmaXggKyBmbGFncyBieXRlICovCisKKyAgICBwYXJl
bnQ9cm9vdDsKKworICAgIGM9Zm10OworICAgIHdoaWxlICgqYyAhPSAnXDAnKSB7CisgICAgICAg
IHN3aXRjaCAoKmMpIHsKKyAgICAgICAgICAgIGNhc2UgJ2MnOgorICAgICAgICAgICAgY2FzZSAn
aSc6CisgICAgICAgICAgICBjYXNlICd1JzoKKyAgICAgICAgICAgIGNhc2UgJ2onOgorICAgICAg
ICAgICAgY2FzZSAndic6CisgICAgICAgICAgICBjYXNlICdJJzoKKyAgICAgICAgICAgIGNhc2Ug
J1UnOgorICAgICAgICAgICAgY2FzZSAnZic6CisgICAgICAgICAgICAgICAgaWYgICAgICAoKmM9
PSdjJykgdD1UUExfVFlQRV9CWVRFOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKCpjPT0naScp
IHQ9VFBMX1RZUEVfSU5UMzI7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoKmM9PSd1JykgdD1U
UExfVFlQRV9VSU5UMzI7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoKmM9PSdqJykgdD1UUExf
VFlQRV9JTlQxNjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICgqYz09J3YnKSB0PVRQTF9UWVBF
X1VJTlQxNjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICgqYz09J0knKSB0PVRQTF9UWVBFX0lO
VDY0OworICAgICAgICAgICAgICAgIGVsc2UgaWYgKCpjPT0nVScpIHQ9VFBMX1RZUEVfVUlOVDY0
OworICAgICAgICAgICAgICAgIGVsc2UgaWYgKCpjPT0nZicpIHQ9VFBMX1RZUEVfRE9VQkxFOwor
CisgICAgICAgICAgICAgICAgaWYgKGV4cGVjdF9scGFyZW4pIGdvdG8gZmFpbDsKKyAgICAgICAg
ICAgICAgICBuID0gdHBsX25vZGVfbmV3KHBhcmVudCk7CisgICAgICAgICAgICAgICAgbi0+dHlw
ZSA9IHQ7CisgICAgICAgICAgICAgICAgaWYgKGluX3N0cnVjdHVyZSkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAob3JkaW5hbCA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgLyogZm9y
IFMoLi4uKSMgaXRlcmF0aW9uLiBBcHBseSBhbnkgY2hhbmdlcyB0byBjYXNlICdzJyB0b28hISEg
Ki8KKyAgICAgICAgICAgICAgICAgICAgICBpdGVyX3N0YXJ0X25vZGUgPSBuOyAKKyAgICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3Rfd2lkZXN0X25vZGUgPSBuOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh0cGxfdHlwZXNbbi0+dHlwZV0uc3ogPiB0cGxf
dHlwZXNbc3RydWN0X3dpZGVzdF9ub2RlLT50eXBlXS5zeikgeworICAgICAgICAgICAgICAgICAg
ICAgIHN0cnVjdF93aWRlc3Rfbm9kZSA9IG47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgbi0+YWRkciA9IGNhbGNfZmllbGRfYWRkcihwYXJlbnQsbi0+dHlwZSxz
dHJ1Y3RfYWRkcixvcmRpbmFsKyspOworICAgICAgICAgICAgICAgIH0gZWxzZSBuLT5hZGRyID0g
KHZvaWQqKXZhX2FyZyhhcCx2b2lkKik7CisgICAgICAgICAgICAgICAgbi0+ZGF0YSA9IHRwbF9o
b29rLm1hbGxvYyh0cGxfdHlwZXNbdF0uc3opOworICAgICAgICAgICAgICAgIGlmICghbi0+ZGF0
YSkgZmF0YWxfb29tKCk7CisgICAgICAgICAgICAgICAgaWYgKG4tPnBhcmVudC0+dHlwZSA9PSBU
UExfVFlQRV9BUlkpIAorICAgICAgICAgICAgICAgICAgICAoKHRwbF9hdHlwKikobi0+cGFyZW50
LT5kYXRhKSktPnN6ICs9IHRwbF90eXBlc1t0XS5zejsKKyAgICAgICAgICAgICAgICBETF9BREQo
cGFyZW50LT5jaGlsZHJlbixuKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgJ3MnOgorICAgICAgICAgICAgICAgIGlmIChleHBlY3RfbHBhcmVuKSBnb3RvIGZhaWw7
CisgICAgICAgICAgICAgICAgbiA9IHRwbF9ub2RlX25ldyhwYXJlbnQpOworICAgICAgICAgICAg
ICAgIG4tPnR5cGUgPSBUUExfVFlQRV9TVFI7CisgICAgICAgICAgICAgICAgaWYgKGluX3N0cnVj
dHVyZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAob3JkaW5hbCA9PSAxKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgaXRlcl9zdGFydF9ub2RlID0gbjsgLyogZm9yIFMoLi4uKSMgaXRlcmF0
aW9uICovCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0X3dpZGVzdF9ub2RlID0gbjsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAodHBsX3R5cGVzW24t
PnR5cGVdLnN6ID4gdHBsX3R5cGVzW3N0cnVjdF93aWRlc3Rfbm9kZS0+dHlwZV0uc3opIHsKKyAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Rfd2lkZXN0X25vZGUgPSBuOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG4tPmFkZHIgPSBjYWxjX2ZpZWxkX2FkZHIo
cGFyZW50LG4tPnR5cGUsc3RydWN0X2FkZHIsb3JkaW5hbCsrKTsKKyAgICAgICAgICAgICAgICB9
IGVsc2Ugbi0+YWRkciA9ICh2b2lkKil2YV9hcmcoYXAsdm9pZCopOworICAgICAgICAgICAgICAg
IG4tPmRhdGEgPSB0cGxfaG9vay5tYWxsb2Moc2l6ZW9mKGNoYXIqKSk7CisgICAgICAgICAgICAg
ICAgaWYgKCFuLT5kYXRhKSBmYXRhbF9vb20oKTsKKyAgICAgICAgICAgICAgICAqKGNoYXIqKiko
bi0+ZGF0YSkgPSBOVUxMOworICAgICAgICAgICAgICAgIGlmIChuLT5wYXJlbnQtPnR5cGUgPT0g
VFBMX1RZUEVfQVJZKSAKKyAgICAgICAgICAgICAgICAgICAgKCh0cGxfYXR5cCopKG4tPnBhcmVu
dC0+ZGF0YSkpLT5zeiArPSBzaXplb2Yodm9pZCopOworICAgICAgICAgICAgICAgIERMX0FERChw
YXJlbnQtPmNoaWxkcmVuLG4pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSAnIyc6CisgICAgICAgICAgICAgICAgLyogYXBwbHkgYSAnbnVtJyB0byBwcmVjZWRpbmcg
YXRvbSAqLworICAgICAgICAgICAgICAgIGlmICghcGFyZW50LT5jaGlsZHJlbikgZ290byBmYWls
OworICAgICAgICAgICAgICAgIHByZWNlZGluZyA9IHBhcmVudC0+Y2hpbGRyZW4tPnByZXY7IC8q
IGZpcnN0IGNoaWxkJ3MgcHJldiBpcyAnbGFzdCBjaGlsZCcqLworICAgICAgICAgICAgICAgIHQg
PSBwcmVjZWRpbmctPnR5cGU7CisgICAgICAgICAgICAgICAgYXBwbGllc190b19zdHJ1Y3QgPSAo
KihjLTEpID09ICcpJykgPyAxIDogMDsKKyAgICAgICAgICAgICAgICBpZiAoIWFwcGxpZXNfdG9f
c3RydWN0KSB7CisgICAgICAgICAgICAgICAgICBpZiAoISh0ID09IFRQTF9UWVBFX0JZVEUgICB8
fCB0ID09IFRQTF9UWVBFX0lOVDMyIHx8CisgICAgICAgICAgICAgICAgICAgICAgICB0ID09IFRQ
TF9UWVBFX1VJTlQzMiB8fCB0ID09IFRQTF9UWVBFX0RPVUJMRSB8fAorICAgICAgICAgICAgICAg
ICAgICAgICAgdCA9PSBUUExfVFlQRV9VSU5UNjQgfHwgdCA9PSBUUExfVFlQRV9JTlQ2NCB8fCAK
KyAgICAgICAgICAgICAgICAgICAgICAgIHQgPT0gVFBMX1RZUEVfVUlOVDE2IHx8IHQgPT0gVFBM
X1RZUEVfSU5UMTYgfHwgCisgICAgICAgICAgICAgICAgICAgICAgICB0ID09IFRQTF9UWVBFX1NU
UiApKSBnb3RvIGZhaWw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8qIGNv
dW50IHVwIGhvdyBtYW55IGNvbnRpZ3VvdXMgIyBhbmQgZm9ybSB0aGVpciBwcm9kdWN0ICovCisg
ICAgICAgICAgICAgICAgcG91bmRfcHJvZD0xOworICAgICAgICAgICAgICAgIG51bV9jb250aWdf
ZnhsZW5zPTA7CisgICAgICAgICAgICAgICAgZm9yKHBlZWs9YzsgKnBlZWsgPT0gJyMnOyBwZWVr
KyspIHsKKyAgICAgICAgICAgICAgICAgIHBvdW5kX251bSA9IHZhX2FyZyhhcCwgaW50KTsKKyAg
ICAgICAgICAgICAgICAgIGlmIChwb3VuZF9udW0gPCAxKSB7CisgICAgICAgICAgICAgICAgICAg
IHRwbF9ob29rLmZhdGFsKCJub24tcG9zaXRpdmUgaXRlcmF0aW9uIGNvdW50ICVkXG4iLCBwb3Vu
ZF9udW0pOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgaWYgKG51bV9j
b250aWdfZnhsZW5zID49IChzaXplb2YoY29udGlnX2Z4bGVucykvc2l6ZW9mKGNvbnRpZ19meGxl
bnNbMF0pKSkgeworICAgICAgICAgICAgICAgICAgICB0cGxfaG9vay5mYXRhbCgiY29udGlndW91
cyAjIGV4Y2VlZHMgaGFyZGNvZGVkIGxpbWl0XG4iKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgIGNvbnRpZ19meGxlbnNbbnVtX2NvbnRpZ19meGxlbnMrK10gPSBwb3Vu
ZF9udW07CisgICAgICAgICAgICAgICAgICBwb3VuZF9wcm9kICo9IHBvdW5kX251bTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLyogaW5jcmVtZW50IGMgdG8gc2tpcCBjb250
aWd1b3VzICMgc28gaXRzIHBvaW50cyB0byBsYXN0IG9uZSAqLworICAgICAgICAgICAgICAgIGMg
PSBwZWVrLTE7CisgICAgICAgICAgICAgICAgLyogZGlmZmVyZW50aWF0ZSBhdG9tLSMgZnJvbSBz
dHJ1Y3QtIyBieSBub3RpbmcgcHJlY2VkaW5nIHJwYXJlbiAqLworICAgICAgICAgICAgICAgIGlm
IChhcHBsaWVzX3RvX3N0cnVjdCkgeyAvKiBpbnNlcnQgIyBub2RlIHRvIGluZHVjZSBsb29waW5n
ICovCisgICAgICAgICAgICAgICAgICBuID0gdHBsX25vZGVfbmV3KHBhcmVudCk7CisgICAgICAg
ICAgICAgICAgICBuLT50eXBlID0gVFBMX1RZUEVfUE9VTkQ7CisgICAgICAgICAgICAgICAgICBu
LT5udW0gPSBwb3VuZF9wcm9kOworICAgICAgICAgICAgICAgICAgbi0+ZGF0YSA9IHRwbF9ob29r
Lm1hbGxvYyhzaXplb2YodHBsX3BvdW5kX2RhdGEpKTsKKyAgICAgICAgICAgICAgICAgIGlmICgh
bi0+ZGF0YSkgZmF0YWxfb29tKCk7CisgICAgICAgICAgICAgICAgICBwZCA9ICh0cGxfcG91bmRf
ZGF0YSopbi0+ZGF0YTsKKyAgICAgICAgICAgICAgICAgIHBkLT5pbnRlcl9lbHRfbGVuID0gaW50
ZXJfZWx0X2xlbjsKKyAgICAgICAgICAgICAgICAgIHBkLT5pdGVyX3N0YXJ0X25vZGUgPSBpdGVy
X3N0YXJ0X25vZGU7IAorICAgICAgICAgICAgICAgICAgcGQtPml0ZXJudW0gPSAwOworICAgICAg
ICAgICAgICAgICAgRExfQUREKHBhcmVudC0+Y2hpbGRyZW4sbik7CisgICAgICAgICAgICAgICAg
ICAvKiBtdWx0aXBseSB0aGUgJ251bScgYW5kIGRhdGEgc3BhY2Ugb24gZWFjaCBhdG9tIGluIHRo
ZSBzdHJ1Y3R1cmUgKi8KKyAgICAgICAgICAgICAgICAgIGZvcihucCA9IGl0ZXJfc3RhcnRfbm9k
ZTsgbnAgIT0gbjsgbnAgPSBucC0+bmV4dCkgeworICAgICAgICAgICAgICAgICAgICBpZiAobi0+
cGFyZW50LT50eXBlID09IFRQTF9UWVBFX0FSWSkgeworICAgICAgICAgICAgICAgICAgICAgICgo
dHBsX2F0eXAqKShuLT5wYXJlbnQtPmRhdGEpKS0+c3ogKz0gCisgICAgICAgICAgICAgICAgICAg
ICAgICAgdHBsX3R5cGVzW25wLT50eXBlXS5zeiAqIChucC0+bnVtICogKG4tPm51bSAtIDEpKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBucC0+ZGF0YSA9IHRw
bF9ob29rLnJlYWxsb2MobnAtPmRhdGEsIHRwbF90eXBlc1tucC0+dHlwZV0uc3ogKiAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucC0+
bnVtICogbi0+bnVtKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFucC0+ZGF0YSkgZmF0YWxf
b29tKCk7CisgICAgICAgICAgICAgICAgICAgIG1lbXNldChucC0+ZGF0YSwgMCwgdHBsX3R5cGVz
W25wLT50eXBlXS5zeiAqIG5wLT5udW0gKiBuLT5udW0pOworICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8qIHNpbXBsZSBhdG9tLSMgZm9ybSBkb2VzIG5vdCBy
ZXF1aXJlIGEgbG9vcCAqLworICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nLT5udW0gPSBwb3Vu
ZF9wcm9kOworICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nLT5kYXRhID0gdHBsX2hvb2sucmVh
bGxvYyhwcmVjZWRpbmctPmRhdGEsIAorICAgICAgICAgICAgICAgICAgICAgIHRwbF90eXBlc1t0
XS5zeiAqIHByZWNlZGluZy0+bnVtKTsKKyAgICAgICAgICAgICAgICAgIGlmICghcHJlY2VkaW5n
LT5kYXRhKSBmYXRhbF9vb20oKTsKKyAgICAgICAgICAgICAgICAgIG1lbXNldChwcmVjZWRpbmct
PmRhdGEsMCx0cGxfdHlwZXNbdF0uc3ogKiBwcmVjZWRpbmctPm51bSk7CisgICAgICAgICAgICAg
ICAgICBpZiAobi0+cGFyZW50LT50eXBlID09IFRQTF9UWVBFX0FSWSkgeworICAgICAgICAgICAg
ICAgICAgICAgICgodHBsX2F0eXAqKShuLT5wYXJlbnQtPmRhdGEpKS0+c3ogKz0gdHBsX3R5cGVz
W3RdLnN6ICogCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAocHJlY2VkaW5nLT5udW0tMSk7CisgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJvb3QtPnNlcl9vc3ogKz0gKHNpemVv
Zih1aW50MzJfdCkgKiBudW1fY29udGlnX2Z4bGVucyk7CisKKyAgICAgICAgICAgICAgICBqID0g
KCh0cGxfcm9vdF9kYXRhKilyb290LT5kYXRhKS0+bnVtX2Z4bGVuczsgLyogYmVmb3JlIGluY3Jl
bWVudGluZyAqLworICAgICAgICAgICAgICAgICgoKHRwbF9yb290X2RhdGEqKXJvb3QtPmRhdGEp
LT5udW1fZnhsZW5zKSArPSBudW1fY29udGlnX2Z4bGVuczsKKyAgICAgICAgICAgICAgICBudW1f
ZnhsZW5zID0gKCh0cGxfcm9vdF9kYXRhKilyb290LT5kYXRhKS0+bnVtX2Z4bGVuczsgLyogbmV3
IHZhbHVlICovCisgICAgICAgICAgICAgICAgZnhsZW5zID0gKCh0cGxfcm9vdF9kYXRhKilyb290
LT5kYXRhKS0+ZnhsZW5zOworICAgICAgICAgICAgICAgIGZ4bGVucyA9IHRwbF9ob29rLnJlYWxs
b2MoZnhsZW5zLCBzaXplb2YoaW50KSAqIG51bV9meGxlbnMpOworICAgICAgICAgICAgICAgIGlm
ICghZnhsZW5zKSBmYXRhbF9vb20oKTsKKyAgICAgICAgICAgICAgICAoKHRwbF9yb290X2RhdGEq
KXJvb3QtPmRhdGEpLT5meGxlbnMgPSBmeGxlbnM7CisgICAgICAgICAgICAgICAgZm9yKGk9MDsg
aSA8IG51bV9jb250aWdfZnhsZW5zOyBpKyspIGZ4bGVuc1tqKytdID0gY29udGlnX2Z4bGVuc1tp
XTsKKworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnQic6CisgICAg
ICAgICAgICAgICAgaWYgKGV4cGVjdF9scGFyZW4pIGdvdG8gZmFpbDsKKyAgICAgICAgICAgICAg
ICBpZiAoaW5fc3RydWN0dXJlKSBnb3RvIGZhaWw7CisgICAgICAgICAgICAgICAgbiA9IHRwbF9u
b2RlX25ldyhwYXJlbnQpOworICAgICAgICAgICAgICAgIG4tPnR5cGUgPSBUUExfVFlQRV9CSU47
CisgICAgICAgICAgICAgICAgbi0+YWRkciA9ICh0cGxfYmluKil2YV9hcmcoYXAsdm9pZCopOwor
ICAgICAgICAgICAgICAgIG4tPmRhdGEgPSB0cGxfaG9vay5tYWxsb2Moc2l6ZW9mKHRwbF9iaW4q
KSk7CisgICAgICAgICAgICAgICAgaWYgKCFuLT5kYXRhKSBmYXRhbF9vb20oKTsKKyAgICAgICAg
ICAgICAgICAqKCh0cGxfYmluKiopbi0+ZGF0YSkgPSBOVUxMOworICAgICAgICAgICAgICAgIGlm
IChuLT5wYXJlbnQtPnR5cGUgPT0gVFBMX1RZUEVfQVJZKSAKKyAgICAgICAgICAgICAgICAgICAg
KCh0cGxfYXR5cCopKG4tPnBhcmVudC0+ZGF0YSkpLT5zeiArPSBzaXplb2YodHBsX2Jpbik7Cisg
ICAgICAgICAgICAgICAgRExfQUREKHBhcmVudC0+Y2hpbGRyZW4sbik7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdBJzoKKyAgICAgICAgICAgICAgICBpZiAoaW5f
c3RydWN0dXJlKSBnb3RvIGZhaWw7CisgICAgICAgICAgICAgICAgbiA9IHRwbF9ub2RlX25ldyhw
YXJlbnQpOworICAgICAgICAgICAgICAgIG4tPnR5cGUgPSBUUExfVFlQRV9BUlk7CisgICAgICAg
ICAgICAgICAgRExfQUREKHBhcmVudC0+Y2hpbGRyZW4sbik7CisgICAgICAgICAgICAgICAgcGFy
ZW50ID0gbjsKKyAgICAgICAgICAgICAgICBleHBlY3RfbHBhcmVuPTE7CisgICAgICAgICAgICAg
ICAgcGlkeCA9ICh0cGxfcGlkeCopdHBsX2hvb2subWFsbG9jKHNpemVvZih0cGxfcGlkeCkpOwor
ICAgICAgICAgICAgICAgIGlmICghcGlkeCkgZmF0YWxfb29tKCk7CisgICAgICAgICAgICAgICAg
cGlkeC0+bm9kZSA9IG47CisgICAgICAgICAgICAgICAgcGlkeC0+bmV4dCA9IE5VTEw7CisgICAg
ICAgICAgICAgICAgRExfQUREKCgodHBsX3Jvb3RfZGF0YSopKHJvb3QtPmRhdGEpKS0+cGlkeCxw
aWR4KTsKKyAgICAgICAgICAgICAgICAvKiBzZXQgdXAgdGhlIEEncyB0cGxfYXR5cCAqLworICAg
ICAgICAgICAgICAgIG4tPmRhdGEgPSAodHBsX2F0eXAqKXRwbF9ob29rLm1hbGxvYyhzaXplb2Yo
dHBsX2F0eXApKTsKKyAgICAgICAgICAgICAgICBpZiAoIW4tPmRhdGEpIGZhdGFsX29vbSgpOwor
ICAgICAgICAgICAgICAgICgodHBsX2F0eXAqKShuLT5kYXRhKSktPm51bSA9IDA7CisgICAgICAg
ICAgICAgICAgKCh0cGxfYXR5cCopKG4tPmRhdGEpKS0+c3ogPSAwOworICAgICAgICAgICAgICAg
ICgodHBsX2F0eXAqKShuLT5kYXRhKSktPmJiID0gTlVMTDsKKyAgICAgICAgICAgICAgICAoKHRw
bF9hdHlwKikobi0+ZGF0YSkpLT5iYnRhaWwgPSBOVUxMOworICAgICAgICAgICAgICAgICgodHBs
X2F0eXAqKShuLT5kYXRhKSktPmN1ciA9IE5VTEw7CisgICAgICAgICAgICAgICAgaWYgKG4tPnBh
cmVudC0+dHlwZSA9PSBUUExfVFlQRV9BUlkpIAorICAgICAgICAgICAgICAgICAgICAoKHRwbF9h
dHlwKikobi0+cGFyZW50LT5kYXRhKSktPnN6ICs9IHNpemVvZih2b2lkKik7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdTJzoKKyAgICAgICAgICAgICAgICBpZiAo
aW5fc3RydWN0dXJlKSBnb3RvIGZhaWw7CisgICAgICAgICAgICAgICAgZXhwZWN0X2xwYXJlbj0x
OworICAgICAgICAgICAgICAgIG9yZGluYWw9MTsgIC8qIGluZGV4IHVwY29taW5nIGF0b21zIGlu
IFMoLi4pICovCisgICAgICAgICAgICAgICAgaW5fc3RydWN0dXJlPTErbHBhcmVuX2xldmVsOyAv
KiBzbyB3ZSBjYW4gdGVsbCB3aGVyZSBTIGZtdCBlbmRzICovCisgICAgICAgICAgICAgICAgc3Ry
dWN0X2FkZHIgPSAoY2hhciopdmFfYXJnKGFwLHZvaWQqKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgJyQnOiAvKiBuZXN0ZWQgc3RydWN0dXJlICovCisgICAgICAg
ICAgICAgICAgaWYgKCFpbl9zdHJ1Y3R1cmUpIGdvdG8gZmFpbDsKKyAgICAgICAgICAgICAgICBl
eHBlY3RfbHBhcmVuPTE7CisgICAgICAgICAgICAgICAgaW5fbmVzdGVkX3N0cnVjdHVyZSsrOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnKSc6CisgICAgICAgICAg
ICAgICAgbHBhcmVuX2xldmVsLS07CisgICAgICAgICAgICAgICAgaWYgKGxwYXJlbl9sZXZlbCA8
IDApIGdvdG8gZmFpbDsKKyAgICAgICAgICAgICAgICBpZiAoKihjLTEpID09ICcoJykgZ290byBm
YWlsOworICAgICAgICAgICAgICAgIGlmIChpbl9uZXN0ZWRfc3RydWN0dXJlKSBpbl9uZXN0ZWRf
c3RydWN0dXJlLS07CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5fc3RydWN0dXJlICYmIChp
bl9zdHJ1Y3R1cmUtMSA9PSBscGFyZW5fbGV2ZWwpKSB7CisgICAgICAgICAgICAgICAgICAvKiBj
YWxjdWxhdGUgZGVsdGEgYmV0d2VlbiBjb250aWd1b3VzIHN0cnVjdHVyZXMgaW4gYXJyYXkgKi8K
KyAgICAgICAgICAgICAgICAgIHN0cnVjdF9uZXh0ID0gY2FsY19maWVsZF9hZGRyKHBhcmVudCwg
c3RydWN0X3dpZGVzdF9ub2RlLT50eXBlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0cnVjdF9hZGRyLCBvcmRpbmFsKyspOworICAgICAgICAgICAg
ICAgICAgaW50ZXJfZWx0X2xlbiA9IHN0cnVjdF9uZXh0IC0gc3RydWN0X2FkZHI7CisgICAgICAg
ICAgICAgICAgICBpbl9zdHJ1Y3R1cmU9MDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZWxzZSBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudDsgLyogcnBhcmVuIGVuZHMgQSgpIHR5
cGUsIG5vdCBTKCkgdHlwZSAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSAnKCc6CisgICAgICAgICAgICAgICAgaWYgKCFleHBlY3RfbHBhcmVuKSBnb3RvIGZhaWw7
CisgICAgICAgICAgICAgICAgZXhwZWN0X2xwYXJlbj0wOworICAgICAgICAgICAgICAgIGxwYXJl
bl9sZXZlbCsrOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICB0cGxfaG9vay5vb3BzKCJ1bnN1cHBvcnRlZCBvcHRpb24gJWNcbiIs
ICpjKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKyAgICAgICAgYysr
OworICAgIH0KKyAgICBpZiAobHBhcmVuX2xldmVsICE9IDApIGdvdG8gZmFpbDsKKworICAgIC8q
IGNvcHkgdGhlIGZvcm1hdCBzdHJpbmcsIHNhdmUgZm9yIGNvbnZlbmllbmNlICovCisgICAgKCh0
cGxfcm9vdF9kYXRhKikocm9vdC0+ZGF0YSkpLT5mbXQgPSB0cGxfaG9vay5tYWxsb2Moc3RybGVu
KGZtdCkrMSk7CisgICAgaWYgKCgodHBsX3Jvb3RfZGF0YSopKHJvb3QtPmRhdGEpKS0+Zm10ID09
IE5VTEwpIAorICAgICAgICBmYXRhbF9vb20oKTsKKyAgICBtZW1jcHkoKCh0cGxfcm9vdF9kYXRh
Kikocm9vdC0+ZGF0YSkpLT5mbXQsZm10LHN0cmxlbihmbXQpKzEpOworCisgICAgcmV0dXJuIHJv
b3Q7CisKK2ZhaWw6CisgICAgdHBsX2hvb2sub29wcygiZmFpbGVkIHRvIHBhcnNlICVzXG4iLCBm
bXQpOworICAgIHRwbF9mcmVlKHJvb3QpOworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMg
aW50IHRwbF91bm1hcF9maWxlKCB0cGxfbW1hcF9yZWMgKm1yKSB7CisKKyAgICBpZiAoIG11bm1h
cCggbXItPnRleHQsIG1yLT50ZXh0X3N6ICkgPT0gLTEgKSB7CisgICAgICAgIHRwbF9ob29rLm9v
cHMoIkZhaWxlZCB0byBtdW5tYXA6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAgIH0KKyAg
ICBjbG9zZShtci0+ZmQpOworICAgIG1yLT50ZXh0ID0gTlVMTDsKKyAgICBtci0+dGV4dF9zeiA9
IDA7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHRwbF9mcmVlX2tlZXBfbWFwKHRw
bF9ub2RlICpyKSB7CisgICAgaW50IG1tYXBfYml0cyA9IChUUExfUkRPTkxZfFRQTF9GSUxFKTsK
KyAgICBpbnQgdWZyZWVfYml0cyA9IChUUExfTUVNfFRQTF9VRlJFRSk7CisgICAgdHBsX25vZGUg
Km54dGMsKmM7CisgICAgaW50IGZpbmRfbmV4dF9ub2RlPTAsbG9va2luZyxpOworICAgIHNpemVf
dCBzejsKKworICAgIC8qIEZvciBtbWFwJ2QgZmlsZXMsIG9yIGZvciAndWZyZWUnIG1lbW9yeSBp
bWFnZXMgLCBkbyBhcHByb3ByaWF0ZSByZWxlYXNlICovCisgICAgaWYgKCgoKHRwbF9yb290X2Rh
dGEqKShyLT5kYXRhKSktPmZsYWdzICYgbW1hcF9iaXRzKSA9PSBtbWFwX2JpdHMpIHsKKyAgICAg
ICAgdHBsX3VubWFwX2ZpbGUoICYoKHRwbF9yb290X2RhdGEqKShyLT5kYXRhKSktPm1tYXApOyAK
KyAgICB9IGVsc2UgaWYgKCgoKHRwbF9yb290X2RhdGEqKShyLT5kYXRhKSktPmZsYWdzICYgdWZy
ZWVfYml0cykgPT0gdWZyZWVfYml0cykgeworICAgICAgICB0cGxfaG9vay5mcmVlKCAoKHRwbF9y
b290X2RhdGEqKShyLT5kYXRhKSktPm1tYXAudGV4dCApOworICAgIH0KKworICAgIGMgPSByLT5j
aGlsZHJlbjsKKyAgICBpZiAoYykgeworICAgICAgICB3aGlsZShjLT50eXBlICE9IFRQTF9UWVBF
X1JPT1QpIHsgICAgLyogbG9vcCB1bnRpbCB3ZSBjb21lIGJhY2sgdG8gcm9vdCBub2RlICovCisg
ICAgICAgICAgICBzd2l0Y2ggKGMtPnR5cGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFRQTF9U
WVBFX0JJTjoKKyAgICAgICAgICAgICAgICAgICAgLyogZnJlZSBhbnkgYmluYXJ5IGJ1ZmZlciBo
YW5naW5nIGZyb20gdHBsX2JpbiAqLworICAgICAgICAgICAgICAgICAgICBpZiAoICooKHRwbF9i
aW4qKikoYy0+ZGF0YSkpICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoKigodHBs
X2JpbioqKShjLT5kYXRhKSkpLT5hZGRyICkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRwbF9ob29rLmZyZWUoICgqKCh0cGxfYmluKiopKGMtPmRhdGEpKSktPmFkZHIgKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICooKHRwbF9iaW4q
KiljLT5kYXRhKSA9IE5VTEw7IC8qIHJlc2V0IHRwbF9iaW4gKi8KKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBmaW5kX25leHRfbm9kZT0xOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFRQTF9UWVBFX1NUUjoKKyAgICAg
ICAgICAgICAgICAgICAgLyogZnJlZSBhbnkgcGFja2VkIChjb3BpZWQpIHN0cmluZyAqLworICAg
ICAgICAgICAgICAgICAgICBmb3IoaT0wOyBpIDwgYy0+bnVtOyBpKyspIHsKKyAgICAgICAgICAg
ICAgICAgICAgICBjaGFyICpzdHIgPSAoKGNoYXIqKiljLT5kYXRhKVtpXTsKKyAgICAgICAgICAg
ICAgICAgICAgICBpZiAoc3RyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cGxfaG9vay5m
cmVlKHN0cik7CisgICAgICAgICAgICAgICAgICAgICAgICAoKGNoYXIqKiljLT5kYXRhKVtpXSA9
IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGZpbmRfbmV4dF9ub2RlPTE7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfSU5UMzI6CisgICAgICAgICAg
ICAgICAgY2FzZSBUUExfVFlQRV9VSU5UMzI6CisgICAgICAgICAgICAgICAgY2FzZSBUUExfVFlQ
RV9JTlQ2NDoKKyAgICAgICAgICAgICAgICBjYXNlIFRQTF9UWVBFX1VJTlQ2NDoKKyAgICAgICAg
ICAgICAgICBjYXNlIFRQTF9UWVBFX0JZVEU6CisgICAgICAgICAgICAgICAgY2FzZSBUUExfVFlQ
RV9ET1VCTEU6CisgICAgICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9JTlQxNjoKKyAgICAgICAg
ICAgICAgICBjYXNlIFRQTF9UWVBFX1VJTlQxNjoKKyAgICAgICAgICAgICAgICBjYXNlIFRQTF9U
WVBFX1BPVU5EOgorICAgICAgICAgICAgICAgICAgICBmaW5kX25leHRfbm9kZT0xOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFRQTF9UWVBFX0FSWToK
KyAgICAgICAgICAgICAgICAgICAgYy0+c2VyX29zeiA9IDA7IC8qIHplcm8gb3V0IHRoZSBzZXJp
YWxpemF0aW9uIG91dHB1dCBzaXplICovCisKKyAgICAgICAgICAgICAgICAgICAgc3ogPSAoKHRw
bF9hdHlwKikoYy0+ZGF0YSkpLT5zejsgIC8qIHNhdmUgc3ogdG8gdXNlIGJlbG93ICovCisgICAg
ICAgICAgICAgICAgICAgIHRwbF9mcmVlX2F0eXAoYyxjLT5kYXRhKTsKKworICAgICAgICAgICAg
ICAgICAgICAvKiBtYWtlIG5ldyBhdHlwICovCisgICAgICAgICAgICAgICAgICAgIGMtPmRhdGEg
PSAodHBsX2F0eXAqKXRwbF9ob29rLm1hbGxvYyhzaXplb2YodHBsX2F0eXApKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFjLT5kYXRhKSBmYXRhbF9vb20oKTsKKyAgICAgICAgICAgICAgICAg
ICAgKCh0cGxfYXR5cCopKGMtPmRhdGEpKS0+bnVtID0gMDsKKyAgICAgICAgICAgICAgICAgICAg
KCh0cGxfYXR5cCopKGMtPmRhdGEpKS0+c3ogPSBzejsgIC8qIHJlc3RvcmUgYmIgZGF0dW0gc3og
Ki8KKyAgICAgICAgICAgICAgICAgICAgKCh0cGxfYXR5cCopKGMtPmRhdGEpKS0+YmIgPSBOVUxM
OworICAgICAgICAgICAgICAgICAgICAoKHRwbF9hdHlwKikoYy0+ZGF0YSkpLT5iYnRhaWwgPSBO
VUxMOworICAgICAgICAgICAgICAgICAgICAoKHRwbF9hdHlwKikoYy0+ZGF0YSkpLT5jdXIgPSBO
VUxMOworCisgICAgICAgICAgICAgICAgICAgIGMgPSBjLT5jaGlsZHJlbjsgCisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgICAgIHRwbF9ob29rLmZhdGFsKCJ1bnN1cHBvcnRlZCBmb3JtYXQgY2hhcmFjdGVyXG4iKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmIChmaW5kX25leHRfbm9kZSkgeworICAgICAgICAgICAgICAgIGZpbmRfbmV4dF9ub2RlPTA7
CisgICAgICAgICAgICAgICAgbG9va2luZz0xOworICAgICAgICAgICAgICAgIHdoaWxlKGxvb2tp
bmcpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGMtPm5leHQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG54dGM9Yy0+bmV4dDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGM9bnh0YzsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGxvb2tpbmc9MDsKKyAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjLT50eXBlID09IFRQTF9UWVBF
X1JPT1QpIGJyZWFrOyAvKiByb290IG5vZGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG54dGM9Yy0+cGFyZW50OworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGM9bnh0YzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgICgodHBsX3Jvb3RfZGF0YSopKHItPmRhdGEpKS0+Zmxh
Z3MgPSAwOyAgLyogcmVzZXQgZmxhZ3MgKi8KK30KKworVFBMX0FQSSB2b2lkIHRwbF9mcmVlKHRw
bF9ub2RlICpyKSB7CisgICAgaW50IG1tYXBfYml0cyA9IChUUExfUkRPTkxZfFRQTF9GSUxFKTsK
KyAgICBpbnQgdWZyZWVfYml0cyA9IChUUExfTUVNfFRQTF9VRlJFRSk7CisgICAgdHBsX25vZGUg
Km54dGMsKmM7CisgICAgaW50IGZpbmRfbmV4dF9ub2RlPTAsbG9va2luZyxpOworICAgIHRwbF9w
aWR4ICpwaWR4LCpwaWR4X254dDsKKworICAgIC8qIEZvciBtbWFwJ2QgZmlsZXMsIG9yIGZvciAn
dWZyZWUnIG1lbW9yeSBpbWFnZXMgLCBkbyBhcHByb3ByaWF0ZSByZWxlYXNlICovCisgICAgaWYg
KCgoKHRwbF9yb290X2RhdGEqKShyLT5kYXRhKSktPmZsYWdzICYgbW1hcF9iaXRzKSA9PSBtbWFw
X2JpdHMpIHsKKyAgICAgICAgdHBsX3VubWFwX2ZpbGUoICYoKHRwbF9yb290X2RhdGEqKShyLT5k
YXRhKSktPm1tYXApOyAKKyAgICB9IGVsc2UgaWYgKCgoKHRwbF9yb290X2RhdGEqKShyLT5kYXRh
KSktPmZsYWdzICYgdWZyZWVfYml0cykgPT0gdWZyZWVfYml0cykgeworICAgICAgICB0cGxfaG9v
ay5mcmVlKCAoKHRwbF9yb290X2RhdGEqKShyLT5kYXRhKSktPm1tYXAudGV4dCApOworICAgIH0K
KworICAgIGMgPSByLT5jaGlsZHJlbjsKKyAgICBpZiAoYykgeworICAgICAgICB3aGlsZShjLT50
eXBlICE9IFRQTF9UWVBFX1JPT1QpIHsgICAgLyogbG9vcCB1bnRpbCB3ZSBjb21lIGJhY2sgdG8g
cm9vdCBub2RlICovCisgICAgICAgICAgICBzd2l0Y2ggKGMtPnR5cGUpIHsKKyAgICAgICAgICAg
ICAgICBjYXNlIFRQTF9UWVBFX0JJTjoKKyAgICAgICAgICAgICAgICAgICAgLyogZnJlZSBhbnkg
YmluYXJ5IGJ1ZmZlciBoYW5naW5nIGZyb20gdHBsX2JpbiAqLworICAgICAgICAgICAgICAgICAg
ICBpZiAoICooKHRwbF9iaW4qKikoYy0+ZGF0YSkpICkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCAoKigodHBsX2JpbioqKShjLT5kYXRhKSkpLT5zeiAhPSAwICkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRwbF9ob29rLmZyZWUoICgqKCh0cGxfYmluKiopKGMtPmRhdGEp
KSktPmFkZHIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRwbF9ob29rLmZyZWUoKigodHBsX2JpbioqKWMtPmRhdGEpKTsgLyogZnJlZSB0cGxf
YmluICovCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdHBsX2hv
b2suZnJlZShjLT5kYXRhKTsgIC8qIGZyZWUgdHBsX2JpbiogKi8KKyAgICAgICAgICAgICAgICAg
ICAgZmluZF9uZXh0X25vZGU9MTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgY2FzZSBUUExfVFlQRV9TVFI6CisgICAgICAgICAgICAgICAgICAgIC8qIGZyZWUg
YW55IHBhY2tlZCAoY29waWVkKSBzdHJpbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgZm9yKGk9
MDsgaSA8IGMtPm51bTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgY2hhciAqc3RyID0g
KChjaGFyKiopYy0+ZGF0YSlbaV07CisgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cikgewor
ICAgICAgICAgICAgICAgICAgICAgICAgdHBsX2hvb2suZnJlZShzdHIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgKChjaGFyKiopYy0+ZGF0YSlbaV0gPSBOVUxMOworICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB0cGxf
aG9vay5mcmVlKGMtPmRhdGEpOworICAgICAgICAgICAgICAgICAgICBmaW5kX25leHRfbm9kZT0x
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFRQTF9U
WVBFX0lOVDMyOgorICAgICAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfVUlOVDMyOgorICAgICAg
ICAgICAgICAgIGNhc2UgVFBMX1RZUEVfSU5UNjQ6CisgICAgICAgICAgICAgICAgY2FzZSBUUExf
VFlQRV9VSU5UNjQ6CisgICAgICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9CWVRFOgorICAgICAg
ICAgICAgICAgIGNhc2UgVFBMX1RZUEVfRE9VQkxFOgorICAgICAgICAgICAgICAgIGNhc2UgVFBM
X1RZUEVfSU5UMTY6CisgICAgICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9VSU5UMTY6CisgICAg
ICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9QT1VORDoKKyAgICAgICAgICAgICAgICAgICAgdHBs
X2hvb2suZnJlZShjLT5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgZmluZF9uZXh0X25vZGU9
MTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBUUExf
VFlQRV9BUlk6CisgICAgICAgICAgICAgICAgICAgIHRwbF9mcmVlX2F0eXAoYyxjLT5kYXRhKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGMtPmNoaWxkcmVuKSBjID0gYy0+Y2hpbGRyZW47IC8q
IG5vcm1hbCBjYXNlICovCisgICAgICAgICAgICAgICAgICAgIGVsc2UgZmluZF9uZXh0X25vZGU9
MTsgLyogZWRnZSBjYXNlLCBoYW5kbGUgYmFkIGZvcm1hdCBBKCkgKi8KKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAg
ICAgdHBsX2hvb2suZmF0YWwoInVuc3VwcG9ydGVkIGZvcm1hdCBjaGFyYWN0ZXJcbiIpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KGZpbmRfbmV4dF9ub2RlKSB7CisgICAgICAgICAgICAgICAgZmluZF9uZXh0X25vZGU9MDsKKyAg
ICAgICAgICAgICAgICBsb29raW5nPTE7CisgICAgICAgICAgICAgICAgd2hpbGUobG9va2luZykg
eworICAgICAgICAgICAgICAgICAgICBpZiAoYy0+bmV4dCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgbnh0Yz1jLT5uZXh0OworICAgICAgICAgICAgICAgICAgICAgICAgdHBsX2hvb2suZnJl
ZShjKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGM9bnh0YzsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGxvb2tpbmc9MDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChjLT50eXBlID09IFRQTF9UWVBFX1JPT1QpIGJyZWFrOyAvKiBy
b290IG5vZGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG54dGM9Yy0+cGFyZW50OworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRwbF9ob29rLmZyZWUoYyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYz1ueHRj
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyog
ZnJlZSByb290ICovCisgICAgZm9yKHBpZHg9KCh0cGxfcm9vdF9kYXRhKikoci0+ZGF0YSkpLT5w
aWR4OyBwaWR4OyBwaWR4PXBpZHhfbnh0KSB7CisgICAgICAgIHBpZHhfbnh0ID0gcGlkeC0+bmV4
dDsKKyAgICAgICAgdHBsX2hvb2suZnJlZShwaWR4KTsKKyAgICB9CisgICAgdHBsX2hvb2suZnJl
ZSgoKHRwbF9yb290X2RhdGEqKShyLT5kYXRhKSktPmZtdCk7CisgICAgaWYgKCgodHBsX3Jvb3Rf
ZGF0YSopKHItPmRhdGEpKS0+bnVtX2Z4bGVucyA+IDApIHsKKyAgICAgICAgdHBsX2hvb2suZnJl
ZSgoKHRwbF9yb290X2RhdGEqKShyLT5kYXRhKSktPmZ4bGVucyk7CisgICAgfQorICAgIHRwbF9o
b29rLmZyZWUoci0+ZGF0YSk7ICAvKiB0cGxfcm9vdF9kYXRhICovCisgICAgdHBsX2hvb2suZnJl
ZShyKTsKK30KKworCisvKiBGaW5kIHRoZSBpJ3RoIHBhY2thYmxlICgnQScgbm9kZSkgKi8KK3N0
YXRpYyB0cGxfbm9kZSAqdHBsX2ZpbmRfaSh0cGxfbm9kZSAqbiwgaW50IGkpIHsKKyAgICBpbnQg
aj0wOworICAgIHRwbF9waWR4ICpwaWR4OworICAgIGlmIChuLT50eXBlICE9IFRQTF9UWVBFX1JP
T1QpIHJldHVybiBOVUxMOworICAgIGlmIChpID09IDApIHJldHVybiBuOyAgLyogcGFja2FibGUg
MCBpcyByb290ICovCisgICAgZm9yKHBpZHg9KCh0cGxfcm9vdF9kYXRhKikobi0+ZGF0YSkpLT5w
aWR4OyBwaWR4OyBwaWR4PXBpZHgtPm5leHQpIHsKKyAgICAgICAgaWYgKCsraiA9PSBpKSByZXR1
cm4gcGlkeC0+bm9kZTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lk
ICp0cGxfY3B2KHZvaWQgKmRhdGF2LCB2b2lkICpkYXRhLCBzaXplX3Qgc3opIHsKKyAgICBpZiAo
c3o+MCkgbWVtY3B5KGRhdGF2LGRhdGEsc3opOworICAgIHJldHVybiAodm9pZCopKCh1aW50cHRy
X3QpZGF0YXYgKyBzeik7Cit9CisKK3N0YXRpYyB2b2lkICp0cGxfZXh0ZW5kX2JhY2tib25lKHRw
bF9ub2RlICpuKSB7CisgICAgdHBsX2JhY2tib25lICpiYjsKKyAgICBiYiA9ICh0cGxfYmFja2Jv
bmUqKXRwbF9ob29rLm1hbGxvYyhzaXplb2YodHBsX2JhY2tib25lKSArCisgICAgICAoKHRwbF9h
dHlwKikobi0+ZGF0YSkpLT5zeiApOyAgLyogZGF0dW0gaGFuZ3Mgb24gY29hdHRhaWxzIG9mIGJi
ICovCisgICAgaWYgKCFiYikgZmF0YWxfb29tKCk7CisjaWZkZWYgX19TVERDX1ZFUlNJT05fXwor
I2lmIF9fU1REQ19WRVJTSU9OX18gPCAxOTk5MDEKKyAgICBiYi0+ZGF0YSA9IChjaGFyKikoKHVp
bnRwdHJfdCliYiArIHNpemVvZih0cGxfYmFja2JvbmUpKTsgCisjZW5kaWYKKyNlbmRpZgorICAg
IG1lbXNldChiYi0+ZGF0YSwwLCgodHBsX2F0eXAqKShuLT5kYXRhKSktPnN6KTsKKyAgICBiYi0+
bmV4dCA9IE5VTEw7CisgICAgLyogQWRkIHRoZSBuZXcgYmFja2JvbmUgdG8gdGhlIHRhaWwsIGFs
c28gc2V0dGluZyBoZWFkIGlmIG5lY2Vzc2FyeSAgKi8KKyAgICBpZiAoKCh0cGxfYXR5cCopKG4t
PmRhdGEpKS0+YmIgPT0gTlVMTCkgeworICAgICAgICAoKHRwbF9hdHlwKikobi0+ZGF0YSkpLT5i
YiA9IGJiOworICAgICAgICAoKHRwbF9hdHlwKikobi0+ZGF0YSkpLT5iYnRhaWwgPSBiYjsKKyAg
ICB9IGVsc2UgeworICAgICAgICAoKHRwbF9hdHlwKikobi0+ZGF0YSkpLT5iYnRhaWwtPm5leHQg
PSBiYjsKKyAgICAgICAgKCh0cGxfYXR5cCopKG4tPmRhdGEpKS0+YmJ0YWlsID0gYmI7CisgICAg
fQorCisgICAgKCh0cGxfYXR5cCopKG4tPmRhdGEpKS0+bnVtKys7CisgICAgcmV0dXJuIGJiLT5k
YXRhOworfQorCisvKiBHZXQgdGhlIGZvcm1hdCBzdHJpbmcgY29ycmVzcG9uZGluZyB0byBhIGdp
dmVuIHRwbCAocm9vdCBub2RlKSAqLworc3RhdGljIGNoYXIgKnRwbF9mbXQodHBsX25vZGUgKnIp
IHsKKyAgICByZXR1cm4gKCh0cGxfcm9vdF9kYXRhKikoci0+ZGF0YSkpLT5mbXQ7Cit9CisKKy8q
IEdldCB0aGUgZm10ICMgbGVuZ3RocyBhcyBhIGNvbnRpZ3VvdXMgYnVmZmVyIG9mIGludHMgKGxl
bmd0aCBudW1fZnhsZW5zKSAqLworc3RhdGljIGludCAqdHBsX2Z4bGVucyh0cGxfbm9kZSAqciwg
aW50ICpudW1fZnhsZW5zKSB7CisgICAgKm51bV9meGxlbnMgPSAoKHRwbF9yb290X2RhdGEqKShy
LT5kYXRhKSktPm51bV9meGxlbnM7CisgICAgcmV0dXJuICgodHBsX3Jvb3RfZGF0YSopKHItPmRh
dGEpKS0+ZnhsZW5zOworfQorCisvKiBjYWxsZWQgd2hlbiBzZXJpYWxpemluZyBhbiAnQScgdHlw
ZSBub2RlIGludG8gYSBidWZmZXIgd2hpY2ggaGFzCisgKiBhbHJlYWR5IGJlZW4gc2V0IHVwIHdp
dGggdGhlIHByb3BlciBzcGFjZS4gVGhlIGJhY2tib25lIGlzIHdhbGtlZAorICogd2hpY2ggd2Fz
IG9idGFpbmVkIGZyb20gdGhlIHRwbF9hdHlwIGhlYWRlciBwYXNzZWQgaW4uIAorICovCitzdGF0
aWMgdm9pZCAqdHBsX2R1bXBfYXR5cCh0cGxfbm9kZSAqbiwgdHBsX2F0eXAqIGF0LCB2b2lkICpk
dikgeworICAgIHRwbF9iYWNrYm9uZSAqYmI7CisgICAgdHBsX25vZGUgKmM7CisgICAgdm9pZCAq
ZGF0YXY7CisgICAgdWludDMyX3Qgc2xlbjsKKyAgICB0cGxfYmluICpiaW5wOworICAgIGNoYXIg
KnN0cnA7CisgICAgdHBsX2F0eXAgKmF0eXBwOworICAgIHRwbF9wb3VuZF9kYXRhICpwZDsKKyAg
ICBpbnQgaTsKKyAgICBzaXplX3QgaXRlcm1heDsKKworICAgIC8qIGhhbmRsZSAnQScgbm9kZXMg
Ki8KKyAgICBkdiA9IHRwbF9jcHYoZHYsJmF0LT5udW0sc2l6ZW9mKHVpbnQzMl90KSk7ICAvKiBh
cnJheSBsZW4gKi8KKyAgICBmb3IoYmI9YXQtPmJiOyBiYjsgYmI9YmItPm5leHQpIHsKKyAgICAg
ICAgZGF0YXYgPSBiYi0+ZGF0YTsKKyAgICAgICAgYz1uLT5jaGlsZHJlbjsKKyAgICAgICAgd2hp
bGUoYykgeworICAgICAgICAgICAgc3dpdGNoIChjLT50eXBlKSB7CisgICAgICAgICAgICAgICAg
Y2FzZSBUUExfVFlQRV9CWVRFOgorICAgICAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfRE9VQkxF
OgorICAgICAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfSU5UMzI6CisgICAgICAgICAgICAgICAg
Y2FzZSBUUExfVFlQRV9VSU5UMzI6CisgICAgICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9JTlQ2
NDoKKyAgICAgICAgICAgICAgICBjYXNlIFRQTF9UWVBFX1VJTlQ2NDoKKyAgICAgICAgICAgICAg
ICBjYXNlIFRQTF9UWVBFX0lOVDE2OgorICAgICAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfVUlO
VDE2OgorICAgICAgICAgICAgICAgICAgICBkdiA9IHRwbF9jcHYoZHYsZGF0YXYsdHBsX3R5cGVz
W2MtPnR5cGVdLnN6ICogYy0+bnVtKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YXYgPSAodm9p
ZCopKCh1aW50cHRyX3QpZGF0YXYgKyB0cGxfdHlwZXNbYy0+dHlwZV0uc3ogKiBjLT5udW0pOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFRQTF9UWVBF
X0JJTjoKKyAgICAgICAgICAgICAgICAgICAgLyogZHVtcCB0aGUgYnVmZmVyIGxlbmd0aCBmb2xs
b3dlZCBieSB0aGUgYnVmZmVyICovCisgICAgICAgICAgICAgICAgICAgIG1lbWNweSgmYmlucCxk
YXRhdixzaXplb2YodHBsX2JpbiopKTsgLyogY3AgdG8gYWxpZ25lZCAqLworICAgICAgICAgICAg
ICAgICAgICBzbGVuID0gYmlucC0+c3o7CisgICAgICAgICAgICAgICAgICAgIGR2ID0gdHBsX2Nw
dihkdiwmc2xlbixzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgICAgICAgICAgICAgZHYgPSB0
cGxfY3B2KGR2LGJpbnAtPmFkZHIsc2xlbik7CisgICAgICAgICAgICAgICAgICAgIGRhdGF2ID0g
KHZvaWQqKSgodWludHB0cl90KWRhdGF2ICsgc2l6ZW9mKHRwbF9iaW4qKSk7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfU1RSOgorICAg
ICAgICAgICAgICAgICAgICAvKiBkdW1wIHRoZSBzdHJpbmcgbGVuZ3RoIGZvbGxvd2VkIGJ5IHRo
ZSBzdHJpbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgZm9yKGk9MDsgaSA8IGMtPm51bTsgaSsr
KSB7CisgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCZzdHJwLGRhdGF2LHNpemVvZihjaGFy
KikpOyAvKiBjcCB0byBhbGlnbmVkICovCisgICAgICAgICAgICAgICAgICAgICAgc2xlbiA9IHN0
cnAgPyAoc3RybGVuKHN0cnApKzEpIDogMDsKKyAgICAgICAgICAgICAgICAgICAgICBkdiA9IHRw
bF9jcHYoZHYsJnNsZW4sc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgICAgICAgICAgICAgICAg
aWYgKHNsZW4gPiAxKSBkdiA9IHRwbF9jcHYoZHYsc3RycCxzbGVuLTEpOworICAgICAgICAgICAg
ICAgICAgICAgIGRhdGF2ID0gKHZvaWQqKSgodWludHB0cl90KWRhdGF2ICsgc2l6ZW9mKGNoYXIq
KSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9BUlk6CisgICAgICAgICAgICAgICAgICAgIG1l
bWNweSgmYXR5cHAsZGF0YXYsc2l6ZW9mKHRwbF9hdHlwKikpOyAvKiBjcCB0byBhbGlnbmVkICov
CisgICAgICAgICAgICAgICAgICAgIGR2ID0gdHBsX2R1bXBfYXR5cChjLGF0eXBwLGR2KTsKKyAg
ICAgICAgICAgICAgICAgICAgZGF0YXYgPSAodm9pZCopKCh1aW50cHRyX3QpZGF0YXYgKyBzaXpl
b2Yodm9pZCopKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSBUUExfVFlQRV9QT1VORDoKKyAgICAgICAgICAgICAgICAgICAgLyogaXRlcmF0ZSBvdmVy
IHRoZSBwcmVjZWRpbmcgbm9kZXMgKi8KKyAgICAgICAgICAgICAgICAgICAgcGQgPSAodHBsX3Bv
dW5kX2RhdGEqKWMtPmRhdGE7CisgICAgICAgICAgICAgICAgICAgIGl0ZXJtYXggPSBjLT5udW07
CisgICAgICAgICAgICAgICAgICAgIGlmICgrKyhwZC0+aXRlcm51bSkgPCBpdGVybWF4KSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgYyA9IHBkLT5pdGVyX3N0YXJ0X25vZGU7CisgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8qIGxv
b3AgY29tcGxldGUuICovCisgICAgICAgICAgICAgICAgICAgICAgcGQtPml0ZXJudW0gPSAwOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHRwbF9ob29rLmZhdGFsKCJ1
bnN1cHBvcnRlZCBmb3JtYXQgY2hhcmFjdGVyXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjPWMtPm5leHQ7CisgICAgICAgIH0KKyAg
ICB9CisgICAgcmV0dXJuIGR2OworfQorCisvKiBmaWd1cmUgdGhlIHNlcmlhbGl6YXRpb24gb3V0
cHV0IHNpemUgbmVlZGVkIGZvciB0cGwgd2hvc2Ugcm9vdCBpcyBuKi8KK3N0YXRpYyBzaXplX3Qg
dHBsX3Nlcl9vc3oodHBsX25vZGUgKm4pIHsKKyAgICB0cGxfbm9kZSAqYywgKm5wOworICAgIHNp
emVfdCBzeiwgaXRlcm1heDsKKyAgICB0cGxfYmluICpiaW5wOworICAgIGNoYXIgKnN0cnA7Cisg
ICAgdHBsX3BvdW5kX2RhdGEgKnBkOworICAgIGludCBpOworCisgICAgLyogaGFuZGxlIHRoZSBy
b290IG5vZGUgT05MWSAoc3VidHJlZSdzIHNlcl9vc3ogaGF2ZSBiZWVuIGJ1YmJsZWQtdXApICov
CisgICAgaWYgKG4tPnR5cGUgIT0gVFBMX1RZUEVfUk9PVCkgeworICAgICAgICB0cGxfaG9vay5m
YXRhbCgiaW50ZXJuYWwgZXJyb3I6IHRwbF9zZXJfb3N6IG9uIG5vbi1yb290IG5vZGVcbiIpOwor
ICAgIH0KKworICAgIHN6ID0gbi0+c2VyX29zejsgICAgLyogc3RhcnQgd2l0aCBmaXhlZCBvdmVy
aGVhZCwgYWxyZWFkeSBzdG9yZWQgKi8KKyAgICBjPW4tPmNoaWxkcmVuOworICAgIHdoaWxlIChj
KSB7CisgICAgICAgIHN3aXRjaCAoYy0+dHlwZSkgeworICAgICAgICAgICAgY2FzZSBUUExfVFlQ
RV9CWVRFOgorICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9ET1VCTEU6CisgICAgICAgICAgICBj
YXNlIFRQTF9UWVBFX0lOVDMyOgorICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9VSU5UMzI6Cisg
ICAgICAgICAgICBjYXNlIFRQTF9UWVBFX0lOVDY0OgorICAgICAgICAgICAgY2FzZSBUUExfVFlQ
RV9VSU5UNjQ6CisgICAgICAgICAgICBjYXNlIFRQTF9UWVBFX0lOVDE2OgorICAgICAgICAgICAg
Y2FzZSBUUExfVFlQRV9VSU5UMTY6CisgICAgICAgICAgICAgICAgc3ogKz0gdHBsX3R5cGVzW2Mt
PnR5cGVdLnN6ICogYy0+bnVtOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBUUExfVFlQRV9CSU46CisgICAgICAgICAgICAgICAgc3ogKz0gc2l6ZW9mKHVpbnQzMl90
KTsgIC8qIGJpbmFyeSBidWYgbGVuICovCisgICAgICAgICAgICAgICAgbWVtY3B5KCZiaW5wLGMt
PmRhdGEsc2l6ZW9mKHRwbF9iaW4qKSk7IC8qIGNwIHRvIGFsaWduZWQgKi8KKyAgICAgICAgICAg
ICAgICBzeiArPSBiaW5wLT5zejsgCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIFRQTF9UWVBFX1NUUjoKKyAgICAgICAgICAgICAgICBmb3IoaT0wOyBpIDwgYy0+bnVt
OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgIHN6ICs9IHNpemVvZih1aW50MzJfdCk7ICAvKiBz
dHJpbmcgbGVuICovCisgICAgICAgICAgICAgICAgICBtZW1jcHkoJnN0cnAsJigoY2hhcioqKWMt
PmRhdGEpW2ldLHNpemVvZihjaGFyKikpOyAvKiBjcCB0byBhbGlnbmVkICovCisgICAgICAgICAg
ICAgICAgICBzeiArPSBzdHJwID8gc3RybGVuKHN0cnApIDogMDsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFRQTF9UWVBFX0FSWToK
KyAgICAgICAgICAgICAgICBzeiArPSBzaXplb2YodWludDMyX3QpOyAgLyogYXJyYXkgbGVuICov
CisgICAgICAgICAgICAgICAgc3ogKz0gYy0+c2VyX29zejsgICAgICAgIC8qIGJ1YmJsZWQtdXAg
Y2hpbGQgYXJyYXkgc2VyX29zeiAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBUUExfVFlQRV9QT1VORDoKKyAgICAgICAgICAgICAgICAvKiBpdGVyYXRlIG92ZXIg
dGhlIHByZWNlZGluZyBub2RlcyAqLworICAgICAgICAgICAgICAgIGl0ZXJtYXggPSBjLT5udW07
CisgICAgICAgICAgICAgICAgcGQgPSAodHBsX3BvdW5kX2RhdGEqKWMtPmRhdGE7CisgICAgICAg
ICAgICAgICAgaWYgKCsrKHBkLT5pdGVybnVtKSA8IGl0ZXJtYXgpIHsKKyAgICAgICAgICAgICAg
ICAgIGZvcihucD1wZC0+aXRlcl9zdGFydF9ub2RlOyBucCAhPSBjOyBucCA9IG5wLT5uZXh0KSB7
CisgICAgICAgICAgICAgICAgICAgICBucC0+ZGF0YSA9IChjaGFyKikobnAtPmRhdGEpICsgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0cGxfdHlwZXNbbnAtPnR5cGVdLnN6ICog
bnAtPm51bSk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBjID0gcGQt
Pml0ZXJfc3RhcnRfbm9kZTsKKyAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIH0gZWxzZSB7IC8qIGxvb3AgY29tcGxldGUuICovCisgICAgICAgICAgICAgICAgICBw
ZC0+aXRlcm51bSA9IDA7CisgICAgICAgICAgICAgICAgICBmb3IobnA9cGQtPml0ZXJfc3RhcnRf
bm9kZTsgbnAgIT0gYzsgbnAgPSBucC0+bmV4dCkgeworICAgICAgICAgICAgICAgICAgICAgbnAt
PmRhdGEgPSAoY2hhciopKG5wLT5kYXRhKSAtICgoaXRlcm1heC0xKSAqIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cGxfdHlwZXNbbnAtPnR5
cGVdLnN6ICogCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5wLT5udW0pOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgdHBsX2hvb2suZmF0YWwoInVuc3VwcG9ydGVkIGZvcm1hdCBjaGFyYWN0ZXJcbiIpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGM9Yy0+bmV4dDsKKyAg
ICB9CisgICAgcmV0dXJuIHN6OworfQorCisKK1RQTF9BUEkgaW50IHRwbF9kdW1wKHRwbF9ub2Rl
ICpyLCBpbnQgbW9kZSwgLi4uKSB7CisgICAgdmFfbGlzdCBhcDsKKyAgICBjaGFyICpmaWxlbmFt
ZSwgKmJ1ZnY7CisgICAgdm9pZCAqKmFkZHJfb3V0LCpidWYsICpwYV9hZGRyOworICAgIGludCBm
ZCxyYz0wOworICAgIHNpemVfdCBzeiwqc3pfb3V0LCBwYV9zejsKKworICAgIGlmICgoKHRwbF9y
b290X2RhdGEqKShyLT5kYXRhKSktPmZsYWdzICYgVFBMX1JET05MWSkgeyAgLyogdW51c3VhbCAq
LworICAgICAgICB0cGxfaG9vay5vb3BzKCJlcnJvcjogdHBsX2R1bXAgY2FsbGVkIGZvciBhIGxv
YWRlZCB0cGxcbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgc3ogPSB0cGxf
c2VyX29zeihyKTsgLyogY29tcHV0ZSB0aGUgc2l6ZSBuZWVkZWQgdG8gc2VyaWFsaXplICAqLwor
CisgICAgdmFfc3RhcnQoYXAsbW9kZSk7CisgICAgaWYgKG1vZGUgJiBUUExfRklMRSkgeworICAg
ICAgICBmaWxlbmFtZSA9IHZhX2FyZyhhcCxjaGFyKik7CisgICAgICAgIGZkID0gdHBsX21tYXBf
b3V0cHV0X2ZpbGUoZmlsZW5hbWUsIHN6LCAmYnVmKTsKKyAgICAgICAgaWYgKGZkID09IC0xKSBy
YyA9IC0xOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJjID0gdHBsX2R1bXBfdG9fbWVt
KHIsYnVmLHN6KTsKKyAgICAgICAgICAgIGlmIChtc3luYyhidWYsc3osTVNfU1lOQykgPT0gLTEp
IHsKKyAgICAgICAgICAgICAgICB0cGxfaG9vay5vb3BzKCJtc3luYyBmYWlsZWQgb24gZmQgJWQ6
ICVzXG4iLCBmZCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChtdW5tYXAoYnVmLCBzeikgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICB0cGxfaG9vay5v
b3BzKCJtdW5tYXAgZmFpbGVkIG9uIGZkICVkOiAlc1xuIiwgZmQsIHN0cmVycm9yKGVycm5vKSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgaWYgKG1vZGUgJiBUUExfRkQpIHsKKyAgICAgICAgZmQgPSB2YV9hcmcoYXAsIGludCk7
CisgICAgICAgIGlmICggKGJ1ZiA9IHRwbF9ob29rLm1hbGxvYyhzeikpID09IE5VTEwpIGZhdGFs
X29vbSgpOworICAgICAgICB0cGxfZHVtcF90b19tZW0ocixidWYsc3opOworICAgICAgICBidWZ2
ID0gYnVmOworICAgICAgICBkbyB7CisgICAgICAgICAgICByYyA9IHdyaXRlKGZkLGJ1ZnYsc3op
OworICAgICAgICAgICAgaWYgKHJjID4gMCkgeworICAgICAgICAgICAgICAgIHN6IC09IHJjOwor
ICAgICAgICAgICAgICAgIGJ1ZnYgKz0gcmM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHJjID09
IC0xKSB7CisgICAgICAgICAgICAgICAgaWYgKGVycm5vID09IEVJTlRSIHx8IGVycm5vID09IEVB
R0FJTikgY29udGludWU7CisgICAgICAgICAgICAgICAgdHBsX2hvb2sub29wcygiZXJyb3Igd3Jp
dGluZyB0byBmZCAlZDogJXNcbiIsIGZkLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAg
ICAgIGZyZWUoYnVmKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gd2hpbGUgKHN6ID4gMCk7CisgICAgICAgIGZyZWUoYnVmKTsKKyAgICAgICAg
cmMgPSAwOworICAgIH0gZWxzZSBpZiAobW9kZSAmIFRQTF9NRU0pIHsKKyAgICAgICAgaWYgKG1v
ZGUgJiBUUExfUFJFQUxMT0NEKSB7IC8qIGNhbGxlciBhbGxvY2F0ZWQgKi8KKyAgICAgICAgICBw
YV9hZGRyID0gKHZvaWQqKXZhX2FyZyhhcCwgdm9pZCopOworICAgICAgICAgIHBhX3N6ID0gdmFf
YXJnKGFwLCBzaXplX3QpOworICAgICAgICAgIGlmIChwYV9zeiA8IHN6KSB7CisgICAgICAgICAg
ICAgIHRwbF9ob29rLm9vcHMoInRwbF9kdW1wOiBidWZmZXIgdG9vIHNtYWxsLCBuZWVkICVkIGJ5
dGVzXG4iLCBzeik7CisgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICB9CisgICAg
ICAgICAgcmM9dHBsX2R1bXBfdG9fbWVtKHIscGFfYWRkcixzeik7CisgICAgICAgIH0gZWxzZSB7
IC8qIHdlIGFsbG9jYXRlICovCisgICAgICAgICAgYWRkcl9vdXQgPSAodm9pZCoqKXZhX2FyZyhh
cCwgdm9pZCopOworICAgICAgICAgIHN6X291dCA9IHZhX2FyZyhhcCwgc2l6ZV90Kik7CisgICAg
ICAgICAgaWYgKCAoYnVmID0gdHBsX2hvb2subWFsbG9jKHN6KSkgPT0gTlVMTCkgZmF0YWxfb29t
KCk7CisgICAgICAgICAgKnN6X291dCA9IHN6OworICAgICAgICAgICphZGRyX291dCA9IGJ1ZjsK
KyAgICAgICAgICByYz10cGxfZHVtcF90b19tZW0ocixidWYsc3opOworICAgICAgICB9CisgICAg
fSBlbHNlIGlmIChtb2RlICYgVFBMX0dFVFNJWkUpIHsKKyAgICAgICAgc3pfb3V0ID0gdmFfYXJn
KGFwLCBzaXplX3QqKTsKKyAgICAgICAgKnN6X291dCA9IHN6OworICAgIH0gZWxzZSB7CisgICAg
ICAgIHRwbF9ob29rLm9vcHMoInVuc3VwcG9ydGVkIHRwbF9kdW1wIG1vZGUgJWRcbiIsIG1vZGUp
OworICAgICAgICByYz0tMTsKKyAgICB9CisgICAgdmFfZW5kKGFwKTsKKyAgICByZXR1cm4gcmM7
Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gZXhwZWN0cyB0aGUgY2FsbGVyIHRvIGhhdmUgc2V0IHVw
IGEgbWVtb3J5IGJ1ZmZlciBvZiAKKyAqIGFkZXF1YXRlIHNpemUgdG8gaG9sZCB0aGUgc2VyaWFs
aXplZCB0cGwuIFRoZSBzeiBwYXJhbWV0ZXIgbXVzdCBiZQorICogdGhlIHJlc3VsdCBvZiB0cGxf
c2VyX29zeihyKS4KKyAqLworc3RhdGljIGludCB0cGxfZHVtcF90b19tZW0odHBsX25vZGUgKnIs
dm9pZCAqYWRkcixzaXplX3Qgc3opIHsKKyAgICB1aW50MzJfdCBzbGVuLCBzejMyOworICAgIGlu
dCAqZnhsZW5zLCBudW1fZnhsZW5zLCBpOworICAgIHZvaWQgKmR2OworICAgIGNoYXIgKmZtdCxm
bGFnczsKKyAgICB0cGxfbm9kZSAqYywgKm5wOworICAgIHRwbF9wb3VuZF9kYXRhICpwZDsKKyAg
ICBzaXplX3QgaXRlcm1heDsKKworICAgIGZtdCA9IHRwbF9mbXQocik7CisgICAgZmxhZ3MgPSAw
OworICAgIGlmICh0cGxfY3B1X2JpZ2VuZGlhbigpKSBmbGFncyB8PSBUUExfRkxfQklHRU5ESUFO
OworICAgIGlmIChzdHJjaHIoZm10LCdzJykpIGZsYWdzIHw9IFRQTF9GTF9OVUxMU1RSSU5HUzsK
KyAgICBzejMyID0gc3o7IAorCisgICAgZHYgPSBhZGRyOworICAgIGR2ID0gdHBsX2NwdihkdixU
UExfTUFHSUMsMyk7ICAgICAgICAgLyogY29weSB0cGwgbWFnaWMgcHJlZml4ICovCisgICAgZHYg
PSB0cGxfY3B2KGR2LCZmbGFncywxKTsgICAgICAgICAgICAvKiBjb3B5IGZsYWdzIGJ5dGUgKi8K
KyAgICBkdiA9IHRwbF9jcHYoZHYsJnN6MzIsc2l6ZW9mKHVpbnQzMl90KSk7Lyogb3ZlcmFsbCBs
ZW5ndGggKGluY2x1c2l2ZSkgKi8KKyAgICBkdiA9IHRwbF9jcHYoZHYsZm10LHN0cmxlbihmbXQp
KzEpOyAgIC8qIGNvcHkgZm9ybWF0IHdpdGggTlVMLXRlcm0gKi8KKyAgICBmeGxlbnMgPSB0cGxf
ZnhsZW5zKHIsJm51bV9meGxlbnMpOworICAgIGR2ID0gdHBsX2NwdihkdixmeGxlbnMsbnVtX2Z4
bGVucypzaXplb2YodWludDMyX3QpKTsvKiBmbXQgIyBsZW5ndGhzICovCisKKyAgICAvKiBzZXJp
YWxpemUgdGhlIHRwbCBjb250ZW50LCBpdGVyYXRpbmcgb3ZlciBkaXJlY3QgY2hpbGRyZW4gb2Yg
cm9vdCAqLworICAgIGMgPSByLT5jaGlsZHJlbjsKKyAgICB3aGlsZSAoYykgeworICAgICAgICBz
d2l0Y2ggKGMtPnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfQllURToKKyAgICAg
ICAgICAgIGNhc2UgVFBMX1RZUEVfRE9VQkxFOgorICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9J
TlQzMjoKKyAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfVUlOVDMyOgorICAgICAgICAgICAgY2Fz
ZSBUUExfVFlQRV9JTlQ2NDoKKyAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfVUlOVDY0OgorICAg
ICAgICAgICAgY2FzZSBUUExfVFlQRV9JTlQxNjoKKyAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVf
VUlOVDE2OgorICAgICAgICAgICAgICAgIGR2ID0gdHBsX2NwdihkdixjLT5kYXRhLHRwbF90eXBl
c1tjLT50eXBlXS5zeiAqIGMtPm51bSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIFRQTF9UWVBFX0JJTjoKKyAgICAgICAgICAgICAgICBzbGVuID0gKCoodHBsX2Jp
bioqKShjLT5kYXRhKSktPnN6OworICAgICAgICAgICAgICAgIGR2ID0gdHBsX2Nwdihkdiwmc2xl
bixzaXplb2YodWludDMyX3QpKTsgIC8qIGJ1ZmZlciBsZW4gKi8KKyAgICAgICAgICAgICAgICBk
diA9IHRwbF9jcHYoZHYsKCoodHBsX2JpbioqKShjLT5kYXRhKSktPmFkZHIsc2xlbik7IC8qIGJ1
ZiAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9T
VFI6CisgICAgICAgICAgICAgICAgZm9yKGk9MDsgaSA8IGMtPm51bTsgaSsrKSB7CisgICAgICAg
ICAgICAgICAgICBjaGFyICpzdHIgPSAoKGNoYXIqKiljLT5kYXRhKVtpXTsKKyAgICAgICAgICAg
ICAgICAgIHNsZW4gPSBzdHIgPyBzdHJsZW4oc3RyKSsxIDogMDsKKyAgICAgICAgICAgICAgICAg
IGR2ID0gdHBsX2Nwdihkdiwmc2xlbixzaXplb2YodWludDMyX3QpKTsgIC8qIHN0cmluZyBsZW4g
Ki8KKyAgICAgICAgICAgICAgICAgIGlmIChzbGVuPjEpIGR2ID0gdHBsX2NwdihkdixzdHIsc2xl
bi0xKTsgLypzdHJpbmcqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfQVJZOgorICAgICAgICAgICAgICAgIGR2ID0g
dHBsX2R1bXBfYXR5cChjLCh0cGxfYXR5cCopYy0+ZGF0YSxkdik7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIFRQTF9UWVBFX1BPVU5EOgorICAgICAgICAgICAgICAg
ICBwZCA9ICh0cGxfcG91bmRfZGF0YSopYy0+ZGF0YTsKKyAgICAgICAgICAgICAgICAgaXRlcm1h
eCA9IGMtPm51bTsKKyAgICAgICAgICAgICAgICAgaWYgKCsrKHBkLT5pdGVybnVtKSA8IGl0ZXJt
YXgpIHsKKworICAgICAgICAgICAgICAgICAgIC8qIGluIHN0YXJ0IG9yIG1pZHN0IG9mIGxvb3Au
IGFkdmFuY2UgZGF0YSBwb2ludGVycy4gKi8KKyAgICAgICAgICAgICAgICAgICBmb3IobnA9cGQt
Pml0ZXJfc3RhcnRfbm9kZTsgbnAgIT0gYzsgbnAgPSBucC0+bmV4dCkgeworICAgICAgICAgICAg
ICAgICAgICAgbnAtPmRhdGEgPSAoY2hhciopKG5wLT5kYXRhKSArIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAodHBsX3R5cGVzW25wLT50eXBlXS5zeiAqIG5wLT5udW0pOworICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAvKiBkbyBuZXh0IGl0ZXJhdGlv
biAqLworICAgICAgICAgICAgICAgICAgIGMgPSBwZC0+aXRlcl9zdGFydF9ub2RlOworICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8qIGxv
b3AgY29tcGxldGUuICovCisgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgIC8q
IHJlc2V0IGl0ZXJhdGlvbiBpbmRleCBhbmQgYWRkci9kYXRhIHBvaW50ZXJzLiAqLworICAgICAg
ICAgICAgICAgICAgIHBkLT5pdGVybnVtID0gMDsKKyAgICAgICAgICAgICAgICAgICBmb3IobnA9
cGQtPml0ZXJfc3RhcnRfbm9kZTsgbnAgIT0gYzsgbnAgPSBucC0+bmV4dCkgeworICAgICAgICAg
ICAgICAgICAgICAgbnAtPmRhdGEgPSAoY2hhciopKG5wLT5kYXRhKSAtICgoaXRlcm1heC0xKSAq
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
cGxfdHlwZXNbbnAtPnR5cGVdLnN6ICogCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5wLT5udW0pOworICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICB0cGxfaG9vay5mYXRhbCgidW5zdXBwb3J0ZWQgZm9y
bWF0IGNoYXJhY3RlclxuIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgYyA9IGMtPm5leHQ7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp
bnQgdHBsX2NwdV9iaWdlbmRpYW4oKSB7CisgICB1bnNpZ25lZCBpID0gMTsKKyAgIGNoYXIgKmM7
CisgICBjID0gKGNoYXIqKSZpOworICAgcmV0dXJuIChjWzBdID09IDEgPyAwIDogMSk7Cit9CisK
KworLyoKKyAqIGFsZ29yaXRobSBmb3Igc2FuaXR5LWNoZWNraW5nIGEgdHBsIGltYWdlOgorICog
c2NhbiB0aGUgdHBsIHdoaWxzdCBub3QgZXhjZWVkaW5nIHRoZSBidWZmZXIgc2l6ZSAoYnVmc3op
ICwKKyAqIGZvcm11bGF0aW5nIGEgY2FsY3VsYXRlZCAoZXhwZWN0ZWQpIHNpemUgb2YgdGhlIHRw
bCBiYXNlZAorICogb24gd2Fsa2luZyBpdHMgZGF0YS4gV2hlbiBjYWxjc2l6ZSBoYXMgYmVlbiBj
YWxjdWxhdGVkIGl0CisgKiBzaG91bGQgZXhhY3RseSBtYXRjaCB0aGUgYnVmZmVyIHNpemUgKGJ1
ZnN6KSBhbmQgdGhlIGludGVybmFsCisgKiByZWNvcmRlZCBzaXplIChpbnRsc3opCisgKi8KK3N0
YXRpYyBpbnQgdHBsX3Nhbml0eSh0cGxfbm9kZSAqciwgaW50IGV4Y2Vzc19vaykgeworICAgIHVp
bnQzMl90IGludGxzejsKKyAgICBpbnQgZm91bmRfbnVsPTAscmMsIG9jdG90aG9ycGVzPTAsIG51
bV9meGxlbnMsICpmeGxlbnMsIGZsZW47CisgICAgdm9pZCAqZCwgKmR2OworICAgIGNoYXIgaW50
bGZsYWdzLCAqZm10LCBjLCAqbWFwZm10OworICAgIHNpemVfdCBidWZzeiwgc2VybGVuOworCisg
ICAgZCA9ICgodHBsX3Jvb3RfZGF0YSopKHItPmRhdGEpKS0+bW1hcC50ZXh0OworICAgIGJ1ZnN6
ID0gKCh0cGxfcm9vdF9kYXRhKikoci0+ZGF0YSkpLT5tbWFwLnRleHRfc3o7CisKKyAgICBkdiA9
IGQ7CisgICAgaWYgKGJ1ZnN6IDwgKDQgKyBzaXplb2YodWludDMyX3QpICsgMSkpIHJldHVybiBF
UlJfTk9UX01JTlNJWkU7IC8qIG1pbiBzejogbWFnaWMrZmxhZ3MrbGVuK251bCAqLworICAgIGlm
IChtZW1jbXAoZHYsVFBMX01BR0lDLCAzKSAhPSAwKSByZXR1cm4gRVJSX01BR0lDX01JU01BVENI
OyAvKiBtaXNzaW5nIHRwbCBtYWdpYyBwcmVmaXggKi8KKyAgICBpZiAodHBsX25lZWRzX2VuZGlh
bl9zd2FwKGR2KSkgKCh0cGxfcm9vdF9kYXRhKikoci0+ZGF0YSkpLT5mbGFncyB8PSBUUExfWEVO
RElBTjsKKyAgICBkdiA9ICh2b2lkKikoKHVpbnRwdHJfdClkdiArIDMpOworICAgIG1lbWNweSgm
aW50bGZsYWdzLGR2LHNpemVvZihjaGFyKSk7ICAvKiBleHRyYWN0IGZsYWdzICovCisgICAgaWYg
KGludGxmbGFncyAmIH5UUExfU1VQUE9SVEVEX0JJVEZMQUdTKSByZXR1cm4gRVJSX1VOU1VQUE9S
VEVEX0ZMQUdTOworICAgIC8qIFRQTDEuMyBzdG9yZXMgc3RyaW5ncyB3aXRoIGEgImxlbmd0aCsx
IiBwcmVmaXggdG8gZGlzY2VybiBOVUxMIHN0cmluZ3MgZnJvbQorICAgICAgIGVtcHR5IHN0cmlu
Z3MgZnJvbSBub24tZW1wdHkgc3RyaW5nczsgVFBMMS4yIG9ubHkgaGFuZGxlZCB0aGUgbGF0dGVy
IHR3by4gCisgICAgICAgU28gd2UgbmVlZCB0byBiZSBtaW5kZnVsIG9mIHdoaWNoIHN0cmluZyBm
b3JtYXQgd2UncmUgcmVhZGluZyBmcm9tLiAqLworICAgIGlmICghKGludGxmbGFncyAmIFRQTF9G
TF9OVUxMU1RSSU5HUykpIHsKKyAgICAgICgodHBsX3Jvb3RfZGF0YSopKHItPmRhdGEpKS0+Zmxh
Z3MgfD0gVFBMX09MRF9TVFJJTkdfRk1UOworICAgIH0KKyAgICBkdiA9ICh2b2lkKikoKHVpbnRw
dHJfdClkdiArIDEpOworICAgIG1lbWNweSgmaW50bHN6LGR2LHNpemVvZih1aW50MzJfdCkpOyAg
LyogZXh0cmFjdCBpbnRlcm5hbCBzaXplICovCisgICAgaWYgKCgodHBsX3Jvb3RfZGF0YSopKHIt
PmRhdGEpKS0+ZmxhZ3MgJiBUUExfWEVORElBTikgdHBsX2J5dGVzd2FwKCZpbnRsc3osIHNpemVv
Zih1aW50MzJfdCkpOworICAgIGlmICghZXhjZXNzX29rICYmIChpbnRsc3ogIT0gYnVmc3opKSBy
ZXR1cm4gRVJSX0lOQ09OU0lTVEVOVF9TWjsgIC8qIGluY29uc2lzZW50IGJ1ZmZlci9pbnRlcm5h
bCBzaXplICovCisgICAgZHYgPSAodm9pZCopKCh1aW50cHRyX3QpZHYgKyBzaXplb2YodWludDMy
X3QpKTsKKworICAgIC8qIGR2IHBvaW50cyB0byB0aGUgc3RhcnQgb2YgdGhlIGZvcm1hdCBzdHJp
bmcuIExvb2sgZm9yIG51bCB3L2luIGJ1ZiBzeiAqLworICAgIGZtdCA9IChjaGFyKilkdjsKKyAg
ICB3aGlsZSAoKHVpbnRwdHJfdClkdi0odWludHB0cl90KWQgPCBidWZzeiAmJiAhZm91bmRfbnVs
KSB7CisgICAgICAgIGlmICggKGMgPSAqKGNoYXIqKWR2KSAhPSAnXDAnKSB7CisgICAgICAgICAg
ICBpZiAoc3RyY2hyKHRwbF9mbXRfY2hhcnMsYykgPT0gTlVMTCkgCisgICAgICAgICAgICAgICBy
ZXR1cm4gRVJSX0ZNVF9JTlZBTElEOyAgLyogaW52YWxpZCBjaGFyIGluIGZvcm1hdCBzdHJpbmcg
Ki8KKyAgICAgICAgICAgIGlmICggKGMgPSAqKGNoYXIqKWR2KSA9PSAnIycpIG9jdG90aG9ycGVz
Kys7CisgICAgICAgICAgICBkdiA9ICh2b2lkKikoKHVpbnRwdHJfdClkdiArIDEpOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgZm91bmRfbnVsID0gMTsKKyAgICB9CisgICAgaWYgKCFmb3VuZF9u
dWwpIHJldHVybiBFUlJfRk1UX01JU1NJTkdfTlVMOyAgLyogcnVuYXdheSBmb3JtYXQgc3RyaW5n
ICovCisgICAgZHYgPSAodm9pZCopKCh1aW50cHRyX3QpZHYgKyAxKTsgICAvKiBhZHZhbmNlIHRv
IG9jdG90aG9ycGUgbGVuZ3RocyBidWZmZXIgKi8KKyAgICAKKyAgICAvKiBjb21wYXJlIHRoZSBt
YXAgZm9ybWF0IHRvIHRoZSBmb3JtYXQgb2YgdGhpcyB0cGwgaW1hZ2UgKi8KKyAgICBtYXBmbXQg
PSB0cGxfZm10KHIpOworICAgIHJjID0gc3RyY21wKG1hcGZtdCxmbXQpOworICAgIGlmIChyYyAh
PSAwKSByZXR1cm4gRVJSX0ZNVF9NSVNNQVRDSDsgCisKKyAgICAvKiBjb21wYXJlIG9jdG90aG9y
cGUgbGVuZ3RocyBpbiBpbWFnZSB0byB0aGUgbWFwcGVkIHZhbHVlcyAqLworICAgIGlmICgoKCh1
aW50cHRyX3QpZHYgKyAob2N0b3Rob3JwZXMgKiA0KSkgLSAodWludHB0cl90KWQpID4gYnVmc3op
IHJldHVybiBFUlJfSU5DT05TSVNURU5UX1NaNDsKKyAgICBmeGxlbnMgPSB0cGxfZnhsZW5zKHIs
Jm51bV9meGxlbnMpOyAgLyogbWFwcGVkIGZ4bGVucyAqLworICAgIHdoaWxlKG51bV9meGxlbnMt
LSkgeworICAgICAgICBtZW1jcHkoJmZsZW4sZHYsc2l6ZW9mKHVpbnQzMl90KSk7IC8qIHN0b3Jl
ZCBmbGVuICovCisgICAgICAgIGlmICgoKHRwbF9yb290X2RhdGEqKShyLT5kYXRhKSktPmZsYWdz
ICYgVFBMX1hFTkRJQU4pIHRwbF9ieXRlc3dhcCgmZmxlbiwgc2l6ZW9mKHVpbnQzMl90KSk7Cisg
ICAgICAgIGlmIChmbGVuICE9ICpmeGxlbnMpIHJldHVybiBFUlJfRkxFTl9NSVNNQVRDSDsKKyAg
ICAgICAgZHYgPSAodm9pZCopKCh1aW50cHRyX3QpZHYgKyBzaXplb2YodWludDMyX3QpKTsKKyAg
ICAgICAgZnhsZW5zKys7CisgICAgfQorCisgICAgLyogZHYgbm93IHBvaW50cyB0byBiZWdpbm5p
bmcgb2YgZGF0YSAqLworICAgIHJjID0gdHBsX3NlcmxlbihyLHIsZHYsJnNlcmxlbik7ICAvKiBn
ZXQgY29tcHV0ZWQgc2VybGVuIG9mIGRhdGEgcGFydCAqLworICAgIGlmIChyYyA9PSAtMSkgcmV0
dXJuIEVSUl9JTkNPTlNJU1RFTlRfU1oyOyAvKiBpbnRlcm5hbCBpbmNvbnNpc3RlbmN5IGluIHRw
bCBpbWFnZSAqLworICAgIHNlcmxlbiArPSAoKHVpbnRwdHJfdClkdiAtICh1aW50cHRyX3QpZCk7
ICAgLyogYWRkIGJhY2sgc2VybGVuIG9mIHByZWFtYmxlIHBhcnQgKi8KKyAgICBpZiAoZXhjZXNz
X29rICYmIChidWZzeiA8IHNlcmxlbikpIHJldHVybiBFUlJfSU5DT05TSVNURU5UX1NaMzsgIAor
ICAgIGlmICghZXhjZXNzX29rICYmIChzZXJsZW4gIT0gYnVmc3opKSByZXR1cm4gRVJSX0lOQ09O
U0lTVEVOVF9TWjM7ICAvKiBidWZmZXIvaW50ZXJuYWwgc3ogZXhjZWVkcyBzZXJsZW4gKi8KKyAg
ICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgKnRwbF9maW5kX2RhdGFfc3RhcnQodm9pZCAq
ZCkgeworICAgIGludCBvY3RvdGhvcnBlcz0wOworICAgIGQgPSAodm9pZCopKCh1aW50cHRyX3Qp
ZCArIDQpOyAvKiBza2lwIFRQTF9NQUdJQyBhbmQgZmxhZ3MgYnl0ZSAqLworICAgIGQgPSAodm9p
ZCopKCh1aW50cHRyX3QpZCArIDQpOyAvKiBza2lwIGludDMyIG92ZXJhbGwgbGVuICovCisgICAg
d2hpbGUoKihjaGFyKilkICE9ICdcMCcpIHsKKyAgICAgICAgaWYgKCooY2hhciopZCA9PSAnIycp
IG9jdG90aG9ycGVzKys7CisgICAgICAgIGQgPSAodm9pZCopKCh1aW50cHRyX3QpZCArIDEpOwor
ICAgIH0KKyAgICBkID0gKHZvaWQqKSgodWludHB0cl90KWQgKyAgMSk7ICAvKiBza2lwIE5VTCAq
LworICAgIGQgPSAodm9pZCopKCh1aW50cHRyX3QpZCArICAob2N0b3Rob3JwZXMgKiBzaXplb2Yo
dWludDMyX3QpKSk7ICAvKiBza2lwICMgYXJyYXkgbGVucyAqLworICAgIHJldHVybiBkOworfQor
CitzdGF0aWMgaW50IHRwbF9uZWVkc19lbmRpYW5fc3dhcCh2b2lkICpkKSB7CisgICAgY2hhciAq
YzsKKyAgICBpbnQgY3B1X2lzX2JpZ2VuZGlhbjsKKyAgICBjID0gKGNoYXIqKWQ7CisgICAgY3B1
X2lzX2JpZ2VuZGlhbiA9IHRwbF9jcHVfYmlnZW5kaWFuKCk7CisgICAgcmV0dXJuICgoY1szXSAm
IFRQTF9GTF9CSUdFTkRJQU4pID09IGNwdV9pc19iaWdlbmRpYW4pID8gMCA6IDE7Cit9CisKK3N0
YXRpYyBzaXplX3QgdHBsX3NpemVfZm9yKGNoYXIgYykgeworICBpbnQgaTsKKyAgZm9yKGk9MDsg
aSA8IHNpemVvZih0cGxfdHlwZXMpL3NpemVvZih0cGxfdHlwZXNbMF0pOyBpKyspIHsKKyAgICBp
ZiAodHBsX3R5cGVzW2ldLmMgPT0gYykgcmV0dXJuIHRwbF90eXBlc1tpXS5zejsKKyAgfQorICBy
ZXR1cm4gMDsKK30KKworVFBMX0FQSSBjaGFyKiB0cGxfcGVlayhpbnQgbW9kZSwgLi4uKSB7Cisg
ICAgdmFfbGlzdCBhcDsKKyAgICBpbnQgeGVuZGlhbj0wLGZvdW5kX251bD0wLG9sZF9zdHJpbmdf
Zm9ybWF0PTA7CisgICAgY2hhciAqZmlsZW5hbWU9TlVMTCwgKmRhdGFwZWVrX2Y9TlVMTCwgKmRh
dGFwZWVrX2MsICpkYXRhcGVla19zOworICAgIHZvaWQgKmFkZHI9TlVMTCwgKmR2LCAqZGF0YXBl
ZWtfcD1OVUxMOworICAgIHNpemVfdCBzej0wLCBmbXRfbGVuLCBmaXJzdF9hdG9tLCBudW1fZnhs
ZW5zPTA7CisgICAgdWludDMyX3QgZGF0YXBlZWtfc3N6LCBkYXRhcGVla19jc3osIGRhdGFwZWVr
X2ZsZW47CisgICAgdHBsX21tYXBfcmVjIG1yID0gezAsTlVMTCwwfTsKKyAgICBjaGFyICpmbXQs
KmZtdF9jcHk9TlVMTCxjOworICAgIHVpbnQzMl90IGludGxzeiwgKipmeGxlbnM9TlVMTCwgKm51
bV9meGxlbnNfb3V0PU5VTEwsICpmeGxlbnN2OworCisgICAgdmFfc3RhcnQoYXAsbW9kZSk7Cisg
ICAgaWYgKChtb2RlICYgVFBMX0ZYTEVOUykgJiYgKG1vZGUgJiBUUExfREFUQVBFRUspKSB7Cisg
ICAgICAgIHRwbF9ob29rLm9vcHMoIlRQTF9GWExFTlMgYW5kIFRQTF9EQVRBUEVFSyBtdXR1YWxs
eSBleGNsdXNpdmVcbiIpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorICAgIGlmIChtb2Rl
ICYgVFBMX0ZJTEUpIGZpbGVuYW1lID0gdmFfYXJnKGFwLGNoYXIgKik7CisgICAgZWxzZSBpZiAo
bW9kZSAmIFRQTF9NRU0pIHsKKyAgICAgICAgYWRkciA9IHZhX2FyZyhhcCx2b2lkICopOworICAg
ICAgICBzeiA9IHZhX2FyZyhhcCxzaXplX3QpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRwbF9o
b29rLm9vcHMoInVuc3VwcG9ydGVkIHRwbF9wZWVrIG1vZGUgJWRcbiIsIG1vZGUpOworICAgICAg
ICBnb3RvIGZhaWw7CisgICAgfQorICAgIGlmIChtb2RlICYgVFBMX0RBVEFQRUVLKSB7CisgICAg
ICAgIGRhdGFwZWVrX2YgPSB2YV9hcmcoYXAsIGNoYXIqKTsKKyAgICB9CisgICAgaWYgKG1vZGUg
JiBUUExfRlhMRU5TKSB7CisgICAgICAgIG51bV9meGxlbnNfb3V0ID0gdmFfYXJnKGFwLHVpbnQz
Ml90ICopOworICAgICAgICBmeGxlbnMgPSB2YV9hcmcoYXAsdWludDMyX3QgKiopOworICAgICAg
ICAqbnVtX2Z4bGVuc19vdXQgPSAwOworICAgICAgICAqZnhsZW5zID0gTlVMTDsKKyAgICB9CisK
KyAgICBpZiAobW9kZSAmIFRQTF9GSUxFKSB7CisgICAgICAgIGlmICh0cGxfbW1hcF9maWxlKGZp
bGVuYW1lLCAmbXIpICE9IDApIHsKKyAgICAgICAgICAgIHRwbF9ob29rLm9vcHMoInRwbF9wZWVr
IGZhaWxlZCBmb3IgZmlsZSAlc1xuIiwgZmlsZW5hbWUpOworICAgICAgICAgICAgZ290byBmYWls
OworICAgICAgICB9CisgICAgICAgIGFkZHIgPSBtci50ZXh0OworICAgICAgICBzeiA9IG1yLnRl
eHRfc3o7CisgICAgfQorCisgICAgZHYgPSBhZGRyOworICAgIGlmIChzeiA8ICg0ICsgc2l6ZW9m
KHVpbnQzMl90KSArIDEpKSBnb3RvIGZhaWw7IC8qIG1pbiBzeiAqLworICAgIGlmIChtZW1jbXAo
ZHYsVFBMX01BR0lDLCAzKSAhPSAwKSBnb3RvIGZhaWw7IC8qIG1pc3NpbmcgdHBsIG1hZ2ljIHBy
ZWZpeCAqLworICAgIGlmICh0cGxfbmVlZHNfZW5kaWFuX3N3YXAoZHYpKSB4ZW5kaWFuPTE7Cisg
ICAgaWYgKCgoKGNoYXIqKWR2KVszXSAmIFRQTF9GTF9OVUxMU1RSSU5HUyk9PTApIG9sZF9zdHJp
bmdfZm9ybWF0PTE7CisgICAgZHYgPSAodm9pZCopKCh1aW50cHRyX3QpZHYgKyA0KTsKKyAgICBt
ZW1jcHkoJmludGxzeixkdixzaXplb2YodWludDMyX3QpKTsgIC8qIGV4dHJhY3QgaW50ZXJuYWwg
c2l6ZSAqLworICAgIGlmICh4ZW5kaWFuKSB0cGxfYnl0ZXN3YXAoJmludGxzeiwgc2l6ZW9mKHVp
bnQzMl90KSk7CisgICAgaWYgKGludGxzeiAhPSBzeikgZ290byBmYWlsOyAgLyogaW5jb25zaXNl
bnQgYnVmZmVyL2ludGVybmFsIHNpemUgKi8KKyAgICBkdiA9ICh2b2lkKikoKHVpbnRwdHJfdClk
diArIHNpemVvZih1aW50MzJfdCkpOworCisgICAgLyogZHYgcG9pbnRzIHRvIHRoZSBzdGFydCBv
ZiB0aGUgZm9ybWF0IHN0cmluZy4gTG9vayBmb3IgbnVsIHcvaW4gYnVmIHN6ICovCisgICAgZm10
ID0gKGNoYXIqKWR2OworICAgIHdoaWxlICgodWludHB0cl90KWR2LSh1aW50cHRyX3QpYWRkciA8
IHN6ICYmICFmb3VuZF9udWwpIHsKKyAgICAgICAgaWYgKCAoYyA9ICooY2hhciopZHYpID09ICdc
MCcpIHsKKyAgICAgICAgICAgIGZvdW5kX251bCA9IDE7CisgICAgICAgIH0gZWxzZSBpZiAoYyA9
PSAnIycpIHsKKyAgICAgICAgICBudW1fZnhsZW5zKys7CisgICAgICAgIH0KKyAgICAgICAgZHYg
PSAodm9pZCopKCh1aW50cHRyX3QpZHYgKyAxKTsKKyAgICB9CisgICAgaWYgKCFmb3VuZF9udWwp
IGdvdG8gZmFpbDsgIC8qIHJ1bmF3YXkgZm9ybWF0IHN0cmluZyAqLworICAgIGZtdF9sZW4gPSAo
Y2hhciopZHYgLSBmbXQ7ICAvKiBpbmNsdWRlIHNwYWNlIGZvciBcMCAqLworICAgIGZtdF9jcHkg
PSB0cGxfaG9vay5tYWxsb2MoZm10X2xlbik7CisgICAgaWYgKGZtdF9jcHkgPT0gTlVMTCkgewor
ICAgICAgICBmYXRhbF9vb20oKTsKKyAgICB9CisgICAgbWVtY3B5KGZtdF9jcHksIGZtdCwgZm10
X2xlbik7CisKKyAgICAvKiByZXRyaWV2ZSB0aGUgb2N0b3Rob3JwaWMgbGVuZ3RocyBpZiByZXF1
ZXN0ZWQgKi8KKyAgICBpZiAobnVtX2Z4bGVucyA+IDApIHsKKyAgICAgIGlmIChzeiA8ICgodWlu
dHB0cl90KWR2ICsgKG51bV9meGxlbnMgKiBzaXplb2YodWludDMyX3QpKSAtICh1aW50cHRyX3Qp
YWRkcikpIHsKKyAgICAgICAgZ290byBmYWlsOworICAgICAgfQorICAgIH0KKyAgICBpZiAoKG1v
ZGUgJiBUUExfRlhMRU5TKSAmJiAobnVtX2Z4bGVucyA+IDApKSB7CisgICAgICAqZnhsZW5zID0g
dHBsX2hvb2subWFsbG9jKG51bV9meGxlbnMgKiBzaXplb2YodWludDMyX3QpKTsKKyAgICAgIGlm
ICgqZnhsZW5zID09IE5VTEwpIHRwbF9ob29rLmZhdGFsKCJvdXQgb2YgbWVtb3J5Iik7CisgICAg
ICAqbnVtX2Z4bGVuc19vdXQgPSBudW1fZnhsZW5zOworICAgICAgZnhsZW5zdiA9ICpmeGxlbnM7
CisgICAgICB3aGlsZShudW1fZnhsZW5zLS0pIHsKKyAgICAgICAgICBtZW1jcHkoZnhsZW5zdixk
dixzaXplb2YodWludDMyX3QpKTsgCisgICAgICAgICAgaWYgKHhlbmRpYW4pIHRwbF9ieXRlc3dh
cChmeGxlbnN2LCBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgICBkdiA9ICh2b2lkKikoKHVp
bnRwdHJfdClkdiArIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICAgIGZ4bGVuc3YrKzsKKyAg
ICAgIH0KKyAgICB9CisgICAgLyogaWYgY2FsbGVyIHJlcXVlc3RlZCwgcGVlayBpbnRvIHRoZSBz
cGVjaWZpZWQgZGF0YSBlbGVtZW50cyAqLworICAgIGlmIChtb2RlICYgVFBMX0RBVEFQRUVLKSB7
CisKKyAgICAgICBmaXJzdF9hdG9tID0gc3Ryc3BuKGZtdCwgIlMoKSIpOyAvKiBza2lwIGFueSBs
ZWFkaW5nIFMoKSAqLworCisgICAgICAgZGF0YXBlZWtfZmxlbiA9IHN0cmxlbihkYXRhcGVla19m
KTsKKyAgICAgICBpZiAoc3Ryc3BuKGRhdGFwZWVrX2YsIHRwbF9kYXRhcGVla19va19jaGFycykg
PCBkYXRhcGVla19mbGVuKSB7CisgICAgICAgICB0cGxfaG9vay5vb3BzKCJpbnZhbGlkIFRQTF9E
QVRBUEVFSyBmb3JtYXQ6ICVzXG4iLCBkYXRhcGVla19mKTsKKyAgICAgICAgIHRwbF9ob29rLmZy
ZWUoZm10X2NweSk7IGZtdF9jcHkgPSBOVUxMOyAvKiBmYWlsICovCisgICAgICAgICBnb3RvIGZh
aWw7CisgICAgICAgfQorCisgICAgICAgaWYgKHN0cm5jbXAoICZmbXRbZmlyc3RfYXRvbV0sIGRh
dGFwZWVrX2YsIGRhdGFwZWVrX2ZsZW4pICE9IDApIHsKKyAgICAgICAgIHRwbF9ob29rLm9vcHMo
IlRQTF9EQVRBUEVFSyBmb3JtYXQgbWlzbWF0Y2hlcyB0cGwgaWFtZ2VcbiIpOworICAgICAgICAg
dHBsX2hvb2suZnJlZShmbXRfY3B5KTsgZm10X2NweSA9IE5VTEw7IC8qIGZhaWwgKi8KKyAgICAg
ICAgIGdvdG8gZmFpbDsKKyAgICAgICB9CisKKyAgICAgICAvKiBhZHZhbmNlIHRvIGRhdGEgc3Rh
cnQsIHRoZW4gY29weSBvdXQgcmVxdWVzdGVkIGVsZW1lbnRzICovCisgICAgICAgZHYgPSAodm9p
ZCopKCh1aW50cHRyX3QpZHYgKyAgKG51bV9meGxlbnMgKiBzaXplb2YodWludDMyX3QpKSk7ICAK
KyAgICAgICBmb3IoZGF0YXBlZWtfYyA9IGRhdGFwZWVrX2Y7ICpkYXRhcGVla19jICE9ICdcMCc7
IGRhdGFwZWVrX2MrKykgeworICAgICAgICAgZGF0YXBlZWtfcCA9IHZhX2FyZyhhcCwgdm9pZCop
OworICAgICAgICAgaWYgKCpkYXRhcGVla19jID09ICdzJykgeyAgLyogc3BlY2lhbCBoYW5kbGlu
ZyBmb3Igc3RyaW5ncyAqLworICAgICAgICAgICBpZiAoKHVpbnRwdHJfdClkdi0odWludHB0cl90
KWFkZHIgKyBzaXplb2YodWludDMyX3QpID4gc3opIHsKKyAgICAgICAgICAgICB0cGxfaG9vay5v
b3BzKCJ0cGxfcGVlazogdHBsIGhhcyBpbnN1ZmZpY2llbnQgbGVuZ3RoXG4iKTsKKyAgICAgICAg
ICAgICB0cGxfaG9vay5mcmVlKGZtdF9jcHkpOyBmbXRfY3B5ID0gTlVMTDsgLyogZmFpbCAqLwor
ICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgfQorICAgICAgICAgICBtZW1jcHko
JmRhdGFwZWVrX3NzeixkdixzaXplb2YodWludDMyX3QpKTsgLyogZ2V0IHNsZW4gKi8KKyAgICAg
ICAgICAgaWYgKHhlbmRpYW4pIHRwbF9ieXRlc3dhcCgmZGF0YXBlZWtfc3N6LCBzaXplb2YodWlu
dDMyX3QpKTsKKyAgICAgICAgICAgaWYgKG9sZF9zdHJpbmdfZm9ybWF0KSBkYXRhcGVla19zc3or
KzsKKyAgICAgICAgICAgZHYgPSAodm9pZCopKCh1aW50cHRyX3QpZHYgKyBzaXplb2YodWludDMy
X3QpKTsgLyogYWR2LiB0byBzdHIgKi8KKyAgICAgICAgICAgaWYgKGRhdGFwZWVrX3NzeiA9PSAw
KSBkYXRhcGVla19zID0gTlVMTDsKKyAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgaWYg
KCh1aW50cHRyX3QpZHYtKHVpbnRwdHJfdClhZGRyICsgZGF0YXBlZWtfc3N6LTEgPiBzeikgewor
ICAgICAgICAgICAgICAgdHBsX2hvb2sub29wcygidHBsX3BlZWs6IHRwbCBoYXMgaW5zdWZmaWNp
ZW50IGxlbmd0aFxuIik7CisgICAgICAgICAgICAgICB0cGxfaG9vay5mcmVlKGZtdF9jcHkpOyBm
bXRfY3B5ID0gTlVMTDsgLyogZmFpbCAqLworICAgICAgICAgICAgICAgZ290byBmYWlsOworICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICBkYXRhcGVla19zID0gdHBsX2hvb2subWFsbG9jKGRh
dGFwZWVrX3Nzeik7CisgICAgICAgICAgICAgaWYgKGRhdGFwZWVrX3MgPT0gTlVMTCkgZmF0YWxf
b29tKCk7CisgICAgICAgICAgICAgbWVtY3B5KGRhdGFwZWVrX3MsIGR2LCBkYXRhcGVla19zc3ot
MSk7CisgICAgICAgICAgICAgZGF0YXBlZWtfc1tkYXRhcGVla19zc3otMV0gPSAnXDAnOworICAg
ICAgICAgICAgIGR2ID0gKHZvaWQqKSgodWludHB0cl90KWR2ICsgZGF0YXBlZWtfc3N6LTEpOwor
ICAgICAgICAgICB9CisgICAgICAgICAgICooY2hhcioqKWRhdGFwZWVrX3AgPSBkYXRhcGVla19z
OworICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgZGF0YXBlZWtfY3N6ID0gdHBsX3NpemVf
Zm9yKCpkYXRhcGVla19jKTsKKyAgICAgICAgICAgaWYgKCh1aW50cHRyX3QpZHYtKHVpbnRwdHJf
dClhZGRyICsgZGF0YXBlZWtfY3N6ID4gc3opIHsKKyAgICAgICAgICAgICB0cGxfaG9vay5vb3Bz
KCJ0cGxfcGVlazogdHBsIGhhcyBpbnN1ZmZpY2llbnQgbGVuZ3RoXG4iKTsKKyAgICAgICAgICAg
ICB0cGxfaG9vay5mcmVlKGZtdF9jcHkpOyBmbXRfY3B5ID0gTlVMTDsgLyogZmFpbCAqLworICAg
ICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgfQorICAgICAgICAgICBtZW1jcHkoZGF0
YXBlZWtfcCwgZHYsIGRhdGFwZWVrX2Nzeik7CisgICAgICAgICAgIGlmICh4ZW5kaWFuKSB0cGxf
Ynl0ZXN3YXAoZGF0YXBlZWtfcCwgZGF0YXBlZWtfY3N6KTsKKyAgICAgICAgICAgZHYgPSAodm9p
ZCopKCh1aW50cHRyX3QpZHYgKyBkYXRhcGVla19jc3opOworICAgICAgICAgfQorICAgICAgIH0K
KyAgICB9CisKK2ZhaWw6CisgICAgdmFfZW5kKGFwKTsKKyAgICBpZiAoKG1vZGUgJiBUUExfRklM
RSkgJiYgbXIudGV4dCAhPSBOVUxMKSB0cGxfdW5tYXBfZmlsZSggJm1yICk7CisgICAgcmV0dXJu
IGZtdF9jcHk7Cit9CisKKy8qIHRwbF9qb3QoVFBMX0ZJTEUsICJmaWxlLnRwbCIsICJzaSIsICZz
LCAmaSk7ICovCisvKiB0cGxfam90KFRQTF9NRU0sICZidWYsICZzeiwgInNpIiwgJnMsICZpKTsg
Ki8KKy8qIHRwbF9qb3QoVFBMX0ZELCBmZCwgInNpIiwgJnMsICZpKTsgKi8KK1RQTF9BUEkgaW50
IHRwbF9qb3QoaW50IG1vZGUsIC4uLikgeworICAgIHZhX2xpc3QgYXA7CisgICAgY2hhciAqZmls
ZW5hbWUsICpmbXQ7CisgICAgc2l6ZV90ICpzejsKKyAgICBpbnQgZmQsIHJjPTA7CisgICAgdm9p
ZCAqKmJ1ZjsKKyAgICB0cGxfbm9kZSAqdG47CisKKyAgICB2YV9zdGFydChhcCxtb2RlKTsKKyAg
ICBpZiAobW9kZSAmIFRQTF9GSUxFKSB7CisgICAgICBmaWxlbmFtZSA9IHZhX2FyZyhhcCxjaGFy
Kik7CisgICAgICBmbXQgPSB2YV9hcmcoYXAsY2hhciopOworICAgICAgdG4gPSB0cGxfbWFwX3Zh
KGZtdCwgYXApOworICAgICAgaWYgKHRuID09IE5VTEwpIHsgcmM9LTE7IGdvdG8gZmFpbDt9Cisg
ICAgICB0cGxfcGFjayh0biwgMCk7CisgICAgICByYyA9IHRwbF9kdW1wKHRuLCBUUExfRklMRSwg
ZmlsZW5hbWUpOworICAgICAgdHBsX2ZyZWUodG4pOworICAgIH0gZWxzZSBpZiAobW9kZSAmIFRQ
TF9NRU0pIHsKKyAgICAgIGJ1ZiA9IHZhX2FyZyhhcCx2b2lkKik7CisgICAgICBzeiA9IHZhX2Fy
ZyhhcCxzaXplX3QqKTsKKyAgICAgIGZtdCA9IHZhX2FyZyhhcCxjaGFyKik7CisgICAgICB0biA9
IHRwbF9tYXBfdmEoZm10LGFwKTsKKyAgICAgIGlmICh0biA9PSBOVUxMKSB7IHJjPS0xOyBnb3Rv
IGZhaWw7fQorICAgICAgdHBsX3BhY2sodG4sMCk7CisgICAgICByYyA9IHRwbF9kdW1wKHRuLCBU
UExfTUVNLCBidWYsIHN6KTsKKyAgICAgIHRwbF9mcmVlKHRuKTsKKyAgICB9IGVsc2UgaWYgKG1v
ZGUgJiBUUExfRkQpIHsKKyAgICAgIGZkID0gdmFfYXJnKGFwLGludCk7CisgICAgICBmbXQgPSB2
YV9hcmcoYXAsY2hhciopOworICAgICAgdG4gPSB0cGxfbWFwX3ZhKGZtdCxhcCk7CisgICAgICBp
ZiAodG4gPT0gTlVMTCkgeyByYz0tMTsgZ290byBmYWlsO30KKyAgICAgIHRwbF9wYWNrKHRuLDAp
OworICAgICAgcmMgPSB0cGxfZHVtcCh0biwgVFBMX0ZELCBmZCk7CisgICAgICB0cGxfZnJlZSh0
bik7CisgICAgfSBlbHNlIHsKKyAgICAgIHRwbF9ob29rLmZhdGFsKCJpbnZhbGlkIHRwbF9qb3Qg
bW9kZVxuIik7CisgICAgfQorCitmYWlsOgorICAgIHZhX2VuZChhcCk7CisgICAgcmV0dXJuIHJj
OworfQorCitUUExfQVBJIGludCB0cGxfbG9hZCh0cGxfbm9kZSAqciwgaW50IG1vZGUsIC4uLikg
eworICAgIHZhX2xpc3QgYXA7CisgICAgaW50IHJjPTAsZmQ9MDsKKyAgICBjaGFyICpmaWxlbmFt
ZT1OVUxMOworICAgIHZvaWQgKmFkZHI7CisgICAgc2l6ZV90IHN6OworCisgICAgdmFfc3RhcnQo
YXAsbW9kZSk7CisgICAgaWYgKG1vZGUgJiBUUExfRklMRSkgZmlsZW5hbWUgPSB2YV9hcmcoYXAs
Y2hhciAqKTsKKyAgICBlbHNlIGlmIChtb2RlICYgVFBMX01FTSkgeworICAgICAgICBhZGRyID0g
dmFfYXJnKGFwLHZvaWQgKik7CisgICAgICAgIHN6ID0gdmFfYXJnKGFwLHNpemVfdCk7CisgICAg
fSBlbHNlIGlmIChtb2RlICYgVFBMX0ZEKSB7CisgICAgICAgIGZkID0gdmFfYXJnKGFwLGludCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgdHBsX2hvb2sub29wcygidW5zdXBwb3J0ZWQgdHBsX2xv
YWQgbW9kZSAlZFxuIiwgbW9kZSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgdmFf
ZW5kKGFwKTsKKworICAgIGlmIChyLT50eXBlICE9IFRQTF9UWVBFX1JPT1QpIHsKKyAgICAgICAg
dHBsX2hvb2sub29wcygiZXJyb3I6IHRwbF9sb2FkIHRvIG5vbi1yb290IG5vZGVcbiIpOworICAg
ICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmICgoKHRwbF9yb290X2RhdGEqKShyLT5kYXRh
KSktPmZsYWdzICYgKFRQTF9XUk9OTFl8VFBMX1JET05MWSkpIHsKKyAgICAgICAgLyogYWxyZWFk
eSBwYWNrZWQgb3IgbG9hZGVkLCBzbyByZXNldCBpdCBhcyBpZiBuZXdseSBtYXBwZWQgKi8KKyAg
ICAgICAgdHBsX2ZyZWVfa2VlcF9tYXAocik7CisgICAgfQorICAgIGlmIChtb2RlICYgVFBMX0ZJ
TEUpIHsKKyAgICAgICAgaWYgKHRwbF9tbWFwX2ZpbGUoZmlsZW5hbWUsICYoKHRwbF9yb290X2Rh
dGEqKShyLT5kYXRhKSktPm1tYXApICE9IDApIHsKKyAgICAgICAgICAgIHRwbF9ob29rLm9vcHMo
InRwbF9sb2FkIGZhaWxlZCBmb3IgZmlsZSAlc1xuIiwgZmlsZW5hbWUpOworICAgICAgICAgICAg
cmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGlmICggKHJjID0gdHBsX3Nhbml0eShyLCAo
bW9kZSAmIFRQTF9FWENFU1NfT0spKSkgIT0gMCkgeworICAgICAgICAgICAgaWYgKHJjID09IEVS
Ul9GTVRfTUlTTUFUQ0gpIHsKKyAgICAgICAgICAgICAgICB0cGxfaG9vay5vb3BzKCIlczogZm9y
bWF0IHNpZ25hdHVyZSBtaXNtYXRjaFxuIiwgZmlsZW5hbWUpOworICAgICAgICAgICAgfSBlbHNl
IGlmIChyYyA9PSBFUlJfRkxFTl9NSVNNQVRDSCkgeyAKKyAgICAgICAgICAgICAgICB0cGxfaG9v
ay5vb3BzKCIlczogYXJyYXkgbGVuZ3RocyBtaXNtYXRjaFxuIiwgZmlsZW5hbWUpOworICAgICAg
ICAgICAgfSBlbHNlIHsgCisgICAgICAgICAgICAgICAgdHBsX2hvb2sub29wcygiJXM6IG5vdCBh
IHZhbGlkIHRwbCBmaWxlXG4iLCBmaWxlbmFtZSk7IAorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgdHBsX3VubWFwX2ZpbGUoICYoKHRwbF9yb290X2RhdGEqKShyLT5kYXRhKSktPm1tYXAgKTsK
KyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICAoKHRwbF9yb290X2Rh
dGEqKShyLT5kYXRhKSktPmZsYWdzID0gKFRQTF9GSUxFIHwgVFBMX1JET05MWSk7CisgICAgfSBl
bHNlIGlmIChtb2RlICYgVFBMX01FTSkgeworICAgICAgICAoKHRwbF9yb290X2RhdGEqKShyLT5k
YXRhKSktPm1tYXAudGV4dCA9IGFkZHI7CisgICAgICAgICgodHBsX3Jvb3RfZGF0YSopKHItPmRh
dGEpKS0+bW1hcC50ZXh0X3N6ID0gc3o7CisgICAgICAgIGlmICggKHJjID0gdHBsX3Nhbml0eShy
LCAobW9kZSAmIFRQTF9FWENFU1NfT0spKSkgIT0gMCkgeworICAgICAgICAgICAgaWYgKHJjID09
IEVSUl9GTVRfTUlTTUFUQ0gpIHsKKyAgICAgICAgICAgICAgICB0cGxfaG9vay5vb3BzKCJmb3Jt
YXQgc2lnbmF0dXJlIG1pc21hdGNoXG4iKTsKKyAgICAgICAgICAgIH0gZWxzZSB7IAorICAgICAg
ICAgICAgICAgIHRwbF9ob29rLm9vcHMoIm5vdCBhIHZhbGlkIHRwbCBmaWxlXG4iKTsgCisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgKCh0
cGxfcm9vdF9kYXRhKikoci0+ZGF0YSkpLT5mbGFncyA9IChUUExfTUVNIHwgVFBMX1JET05MWSk7
CisgICAgICAgIGlmIChtb2RlICYgVFBMX1VGUkVFKSAoKHRwbF9yb290X2RhdGEqKShyLT5kYXRh
KSktPmZsYWdzIHw9IFRQTF9VRlJFRTsKKyAgICB9IGVsc2UgaWYgKG1vZGUgJiBUUExfRkQpIHsK
KyAgICAgICAgLyogaWYgZmQgcmVhZCBzdWNjZWVkcywgcmVzdWx0aW5nIG1lbSBpbWcgaXMgdXNl
ZCBmb3IgbG9hZCAqLworICAgICAgICBpZiAodHBsX2dhdGhlcihUUExfR0FUSEVSX0JMT0NLSU5H
LGZkLCZhZGRyLCZzeikgPiAwKSB7CisgICAgICAgICAgICByZXR1cm4gdHBsX2xvYWQociwgVFBM
X01FTXxUUExfVUZSRUUsIGFkZHIsIHN6KTsKKyAgICAgICAgfSBlbHNlIHJldHVybiAtMTsKKyAg
ICB9IGVsc2UgeworICAgICAgICB0cGxfaG9vay5vb3BzKCJpbnZhbGlkIHRwbF9sb2FkIG1vZGUg
JWRcbiIsIG1vZGUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIC8qIHRoaXMgYXBw
bGllcyB0byBUUExfTUVNIG9yIFRQTF9GSUxFICovCisgICAgaWYgKHRwbF9uZWVkc19lbmRpYW5f
c3dhcCgoKHRwbF9yb290X2RhdGEqKShyLT5kYXRhKSktPm1tYXAudGV4dCkpCisgICAgICAgICgo
dHBsX3Jvb3RfZGF0YSopKHItPmRhdGEpKS0+ZmxhZ3MgfD0gVFBMX1hFTkRJQU47CisgICAgdHBs
X3VucGFja0EwKHIpOyAgIC8qIHByZXBhcmUgcm9vdCBBIG5vZGVzIGZvciB1c2UgKi8KKyAgICBy
ZXR1cm4gMDsKK30KKworVFBMX0FQSSBpbnQgdHBsX0FsZW4odHBsX25vZGUgKnIsIGludCBpKSB7
CisgICAgdHBsX25vZGUgKm47CisKKyAgICBuID0gdHBsX2ZpbmRfaShyLGkpOworICAgIGlmIChu
ID09IE5VTEwpIHsKKyAgICAgICAgdHBsX2hvb2sub29wcygiaW52YWxpZCBpbmRleCAlZCB0byB0
cGxfdW5wYWNrXG4iLCBpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZiAobi0+
dHlwZSAhPSBUUExfVFlQRV9BUlkpIHJldHVybiAtMTsKKyAgICByZXR1cm4gKCh0cGxfYXR5cCop
KG4tPmRhdGEpKS0+bnVtOworfQorCitzdGF0aWMgdm9pZCB0cGxfZnJlZV9hdHlwKHRwbF9ub2Rl
ICpuLCB0cGxfYXR5cCAqYXR5cCkgeworICAgIHRwbF9iYWNrYm9uZSAqYmIsKmJibnh0OworICAg
IHRwbF9ub2RlICpjOworICAgIHZvaWQgKmR2OworICAgIHRwbF9iaW4gKmJpbnA7CisgICAgdHBs
X2F0eXAgKmF0eXBwOworICAgIGNoYXIgKnN0cnA7CisgICAgc2l6ZV90IGl0ZXJtYXg7CisgICAg
dHBsX3BvdW5kX2RhdGEgKnBkOworICAgIGludCBpOworCisgICAgYmIgPSBhdHlwLT5iYjsKKyAg
ICB3aGlsZSAoYmIpIHsKKyAgICAgICAgYmJueHQgPSBiYi0+bmV4dDsKKyAgICAgICAgZHYgPSBi
Yi0+ZGF0YTsKKyAgICAgICAgYz1uLT5jaGlsZHJlbjsgCisgICAgICAgIHdoaWxlIChjKSB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKGMtPnR5cGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFRQTF9U
WVBFX0JZVEU6CisgICAgICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9ET1VCTEU6CisgICAgICAg
ICAgICAgICAgY2FzZSBUUExfVFlQRV9JTlQzMjoKKyAgICAgICAgICAgICAgICBjYXNlIFRQTF9U
WVBFX1VJTlQzMjoKKyAgICAgICAgICAgICAgICBjYXNlIFRQTF9UWVBFX0lOVDY0OgorICAgICAg
ICAgICAgICAgIGNhc2UgVFBMX1RZUEVfVUlOVDY0OgorICAgICAgICAgICAgICAgIGNhc2UgVFBM
X1RZUEVfSU5UMTY6CisgICAgICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9VSU5UMTY6CisgICAg
ICAgICAgICAgICAgICAgIGR2ID0gKHZvaWQqKSgodWludHB0cl90KWR2ICsgdHBsX3R5cGVzW2Mt
PnR5cGVdLnN6KmMtPm51bSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGNhc2UgVFBMX1RZUEVfQklOOgorICAgICAgICAgICAgICAgICAgICBtZW1jcHkoJmJp
bnAsZHYsc2l6ZW9mKHRwbF9iaW4qKSk7IC8qIGNwIHRvIGFsaWduZWQgKi8KKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGJpbnAtPmFkZHIpIHRwbF9ob29rLmZyZWUoIGJpbnAtPmFkZHIgKTsgLyog
ZnJlZSBidWYgKi8KKyAgICAgICAgICAgICAgICAgICAgdHBsX2hvb2suZnJlZShiaW5wKTsgIC8q
IGZyZWUgdHBsX2JpbiAqLworICAgICAgICAgICAgICAgICAgICBkdiA9ICh2b2lkKikoKHVpbnRw
dHJfdClkdiArIHNpemVvZih0cGxfYmluKikpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBjYXNlIFRQTF9UWVBFX1NUUjoKKyAgICAgICAgICAgICAgICAgICAg
Zm9yKGk9MDsgaSA8IGMtPm51bTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5
KCZzdHJwLGR2LHNpemVvZihjaGFyKikpOyAvKiBjcCB0byBhbGlnbmVkICovCisgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHN0cnApIHRwbF9ob29rLmZyZWUoc3RycCk7IC8qIGZyZWUgc3RyaW5n
ICovCisgICAgICAgICAgICAgICAgICAgICAgZHYgPSAodm9pZCopKCh1aW50cHRyX3QpZHYgKyBz
aXplb2YoY2hhciopKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFRQTF9UWVBFX1BPVU5EOgorICAgICAgICAg
ICAgICAgICAgICAvKiBpdGVyYXRlIG92ZXIgdGhlIHByZWNlZGluZyBub2RlcyAqLworICAgICAg
ICAgICAgICAgICAgICBpdGVybWF4ID0gYy0+bnVtOworICAgICAgICAgICAgICAgICAgICBwZCA9
ICh0cGxfcG91bmRfZGF0YSopYy0+ZGF0YTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCsrKHBk
LT5pdGVybnVtKSA8IGl0ZXJtYXgpIHsKKyAgICAgICAgICAgICAgICAgICAgICBjID0gcGQtPml0
ZXJfc3RhcnRfbm9kZTsKKyAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsgLyogbG9vcCBjb21wbGV0ZS4gKi8KKyAgICAgICAgICAgICAg
ICAgICAgICBwZC0+aXRlcm51bSA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9BUlk6Cisg
ICAgICAgICAgICAgICAgICAgIG1lbWNweSgmYXR5cHAsZHYsc2l6ZW9mKHRwbF9hdHlwKikpOyAv
KiBjcCB0byBhbGlnbmVkICovCisgICAgICAgICAgICAgICAgICAgIHRwbF9mcmVlX2F0eXAoYyxh
dHlwcCk7ICAvKiBmcmVlIGF0eXAgKi8KKyAgICAgICAgICAgICAgICAgICAgZHYgPSAodm9pZCop
KCh1aW50cHRyX3QpZHYgKyBzaXplb2Yodm9pZCopKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgdHBsX2hv
b2suZmF0YWwoInVuc3VwcG9ydGVkIGZvcm1hdCBjaGFyYWN0ZXJcbiIpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGM9Yy0+bmV4dDsKKyAg
ICAgICAgfQorICAgICAgICB0cGxfaG9vay5mcmVlKGJiKTsKKyAgICAgICAgYmIgPSBiYm54dDsK
KyAgICB9CisgICAgdHBsX2hvb2suZnJlZShhdHlwKTsKK30KKworLyogZGV0ZXJtaW5lIChieSB3
YWxraW5nKSBieXRlIGxlbmd0aCBvZiBzZXJpYWxpemVkIHIvQSBub2RlIGF0IGFkZHJlc3MgZHYg
CisgKiByZXR1cm5zIDAgb24gc3VjY2Vzcywgb3IgLTEgaWYgdGhlIHRwbCBpc24ndCB0cnVzdHdv
cnRoeSAoZmFpbHMgY29uc2lzdGVuY3kpCisgKi8KK3N0YXRpYyBpbnQgdHBsX3Nlcmxlbih0cGxf
bm9kZSAqciwgdHBsX25vZGUgKm4sIHZvaWQgKmR2LCBzaXplX3QgKnNlcmxlbikgeworICAgIHVp
bnQzMl90IHNsZW47CisgICAgaW50IG51bSxmaWR4OworICAgIHRwbF9ub2RlICpjOworICAgIHNp
emVfdCBsZW49MCwgYWxlbiwgYnVmX3Bhc3QsIGl0ZXJtYXg7CisgICAgdHBsX3BvdW5kX2RhdGEg
KnBkOworCisgICAgYnVmX3Bhc3QgPSAoKHVpbnRwdHJfdCkoKHRwbF9yb290X2RhdGEqKShyLT5k
YXRhKSktPm1tYXAudGV4dCArIAorICAgICAgICAgICAgICAgICAgICAgICgodHBsX3Jvb3RfZGF0
YSopKHItPmRhdGEpKS0+bW1hcC50ZXh0X3N6KTsKKworICAgIGlmIChuLT50eXBlID09IFRQTF9U
WVBFX1JPT1QpIG51bSA9IDE7CisgICAgZWxzZSBpZiAobi0+dHlwZSA9PSBUUExfVFlQRV9BUlkp
IHsKKyAgICAgICAgaWYgKCh1aW50cHRyX3QpZHYgKyBzaXplb2YodWludDMyX3QpID4gYnVmX3Bh
c3QpIHJldHVybiAtMTsKKyAgICAgICAgbWVtY3B5KCZudW0sZHYsc2l6ZW9mKHVpbnQzMl90KSk7
CisgICAgICAgIGlmICgoKHRwbF9yb290X2RhdGEqKShyLT5kYXRhKSktPmZsYWdzICYgVFBMX1hF
TkRJQU4pCisgICAgICAgICAgICAgdHBsX2J5dGVzd2FwKCZudW0sIHNpemVvZih1aW50MzJfdCkp
OworICAgICAgICBkdiA9ICh2b2lkKikoKHVpbnRwdHJfdClkdiArIHNpemVvZih1aW50MzJfdCkp
OworICAgICAgICBsZW4gKz0gc2l6ZW9mKHVpbnQzMl90KTsKKyAgICB9IGVsc2UgdHBsX2hvb2su
ZmF0YWwoImludGVybmFsIGVycm9yIGluIHRwbF9zZXJsZW5cbiIpOworCisgICAgd2hpbGUgKG51
bS0tID4gMCkgeworICAgICAgICBjPW4tPmNoaWxkcmVuOyAKKyAgICAgICAgd2hpbGUgKGMpIHsK
KyAgICAgICAgICAgIHN3aXRjaCAoYy0+dHlwZSkgeworICAgICAgICAgICAgICAgIGNhc2UgVFBM
X1RZUEVfQllURToKKyAgICAgICAgICAgICAgICBjYXNlIFRQTF9UWVBFX0RPVUJMRToKKyAgICAg
ICAgICAgICAgICBjYXNlIFRQTF9UWVBFX0lOVDMyOgorICAgICAgICAgICAgICAgIGNhc2UgVFBM
X1RZUEVfVUlOVDMyOgorICAgICAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfSU5UNjQ6CisgICAg
ICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9VSU5UNjQ6CisgICAgICAgICAgICAgICAgY2FzZSBU
UExfVFlQRV9JTlQxNjoKKyAgICAgICAgICAgICAgICBjYXNlIFRQTF9UWVBFX1VJTlQxNjoKKyAg
ICAgICAgICAgICAgICAgICAgZm9yKGZpZHg9MDsgZmlkeCA8IGMtPm51bTsgZmlkeCsrKSB7ICAv
KiBvY3RvdGhvcnBlIHN1cHBvcnQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodWlu
dHB0cl90KWR2ICsgdHBsX3R5cGVzW2MtPnR5cGVdLnN6ID4gYnVmX3Bhc3QpIHJldHVybiAtMTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGR2ID0gKHZvaWQqKSgodWludHB0cl90KWR2ICsgdHBs
X3R5cGVzW2MtPnR5cGVdLnN6KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlbiArPSB0cGxf
dHlwZXNbYy0+dHlwZV0uc3o7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9CSU46CisgICAgICAg
ICAgICAgICAgICAgIGxlbiArPSBzaXplb2YodWludDMyX3QpOworICAgICAgICAgICAgICAgICAg
ICBpZiAoKHVpbnRwdHJfdClkdiArIHNpemVvZih1aW50MzJfdCkgPiBidWZfcGFzdCkgcmV0dXJu
IC0xOworICAgICAgICAgICAgICAgICAgICBtZW1jcHkoJnNsZW4sZHYsc2l6ZW9mKHVpbnQzMl90
KSk7CisgICAgICAgICAgICAgICAgICAgIGlmICgoKHRwbF9yb290X2RhdGEqKShyLT5kYXRhKSkt
PmZsYWdzICYgVFBMX1hFTkRJQU4pCisgICAgICAgICAgICAgICAgICAgICAgICB0cGxfYnl0ZXN3
YXAoJnNsZW4sIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICAgICAgICAgICAgICBsZW4gKz0g
c2xlbjsKKyAgICAgICAgICAgICAgICAgICAgZHYgPSAodm9pZCopKCh1aW50cHRyX3QpZHYgKyBz
aXplb2YodWludDMyX3QpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCh1aW50cHRyX3QpZHYg
KyBzbGVuID4gYnVmX3Bhc3QpIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAgICAgZHYgPSAo
dm9pZCopKCh1aW50cHRyX3QpZHYgKyBzbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9TVFI6CisgICAgICAgICAgICAgICAgICAg
IGZvcihmaWR4PTA7IGZpZHggPCBjLT5udW07IGZpZHgrKykgeyAgLyogb2N0b3Rob3JwZSBzdXBw
b3J0ICovCisgICAgICAgICAgICAgICAgICAgICAgbGVuICs9IHNpemVvZih1aW50MzJfdCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCh1aW50cHRyX3QpZHYgKyBzaXplb2YodWludDMyX3Qp
ID4gYnVmX3Bhc3QpIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoJnNs
ZW4sZHYsc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKCgodHBs
X3Jvb3RfZGF0YSopKHItPmRhdGEpKS0+ZmxhZ3MgJiBUUExfWEVORElBTikKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHBsX2J5dGVzd2FwKCZzbGVuLCBzaXplb2YodWludDMyX3QpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICBpZiAoISgoKHRwbF9yb290X2RhdGEqKShyLT5kYXRhKSktPmZs
YWdzICYgVFBMX09MRF9TVFJJTkdfRk1UKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICBzbGVu
ID0gKHNsZW4+MSkgPyAoc2xlbi0xKSA6IDA7CisgICAgICAgICAgICAgICAgICAgICAgbGVuICs9
IHNsZW47CisgICAgICAgICAgICAgICAgICAgICAgZHYgPSAodm9pZCopKCh1aW50cHRyX3QpZHYg
KyBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoKHVpbnRwdHJf
dClkdiArIHNsZW4gPiBidWZfcGFzdCkgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICAg
IGR2ID0gKHZvaWQqKSgodWludHB0cl90KWR2ICsgc2xlbik7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBUUExf
VFlQRV9BUlk6CisgICAgICAgICAgICAgICAgICAgIGlmICggdHBsX3NlcmxlbihyLGMsZHYsICZh
bGVuKSA9PSAtMSkgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICBkdiA9ICh2b2lkKiko
KHVpbnRwdHJfdClkdiArIGFsZW4pOworICAgICAgICAgICAgICAgICAgICBsZW4gKz0gYWxlbjsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBUUExfVFlQ
RV9QT1VORDoKKyAgICAgICAgICAgICAgICAgICAgLyogaXRlcmF0ZSBvdmVyIHRoZSBwcmVjZWRp
bmcgbm9kZXMgKi8KKyAgICAgICAgICAgICAgICAgICAgaXRlcm1heCA9IGMtPm51bTsKKyAgICAg
ICAgICAgICAgICAgICAgcGQgPSAodHBsX3BvdW5kX2RhdGEqKWMtPmRhdGE7CisgICAgICAgICAg
ICAgICAgICAgIGlmICgrKyhwZC0+aXRlcm51bSkgPCBpdGVybWF4KSB7CisgICAgICAgICAgICAg
ICAgICAgICAgYyA9IHBkLT5pdGVyX3N0YXJ0X25vZGU7CisgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8qIGxvb3AgY29tcGxldGUu
ICovCisgICAgICAgICAgICAgICAgICAgICAgcGQtPml0ZXJudW0gPSAwOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHRwbF9ob29rLmZhdGFsKCJ1bnN1cHBvcnRlZCBm
b3JtYXQgY2hhcmFjdGVyXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjPWMtPm5leHQ7CisgICAgICAgIH0KKyAgICB9CisgICAgKnNl
cmxlbiA9IGxlbjsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0cGxfbW1hcF9vdXRw
dXRfZmlsZShjaGFyICpmaWxlbmFtZSwgc2l6ZV90IHN6LCB2b2lkICoqdGV4dF9vdXQpIHsKKyAg
ICB2b2lkICp0ZXh0OworICAgIGludCBmZCxwZXJtczsKKworI2lmbmRlZiBfV0lOMzIKKyAgICBw
ZXJtcyA9IFNfSVJVU1J8U19JV1VTUnxTX0lXR1JQfFNfSVJHUlB8U19JUk9USDsgIC8qIHVnK3cg
bytyICovCisgICAgZmQ9b3BlbihmaWxlbmFtZSxPX0NSRUFUfE9fVFJVTkN8T19SRFdSLHBlcm1z
KTsKKyNlbHNlCisJcGVybXMgPSBfU19JV1JJVEU7CisgICAgZmQ9X29wZW4oZmlsZW5hbWUsX09f
Q1JFQVR8X09fVFJVTkN8X09fUkRXUixwZXJtcyk7CisjZW5kaWYKKworICAgIGlmICggZmQgPT0g
LTEgKSB7CisgICAgICAgIHRwbF9ob29rLm9vcHMoIkNvdWxkbid0IG9wZW4gZmlsZSAlczogJXNc
biIsIGZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gLTE7CisgICAg
fQorCisgICAgdGV4dCA9IG1tYXAoMCwgc3osIFBST1RfUkVBRHxQUk9UX1dSSVRFLCBNQVBfU0hB
UkVELCBmZCwgMCk7CisgICAgaWYgKHRleHQgPT0gTUFQX0ZBSUxFRCkgeworICAgICAgICB0cGxf
aG9vay5vb3BzKCJGYWlsZWQgdG8gbW1hcCAlczogJXNcbiIsIGZpbGVuYW1lLCBzdHJlcnJvcihl
cnJubykpOworICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9Cisg
ICAgaWYgKGZ0cnVuY2F0ZShmZCxzeikgPT0gLTEpIHsKKyAgICAgICAgdHBsX2hvb2sub29wcygi
ZnRydW5jYXRlIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIG11bm1h
cCggdGV4dCwgc3ogKTsKKyAgICAgICAgY2xvc2UoZmQpOworICAgICAgICByZXR1cm4gLTE7Cisg
ICAgfQorICAgICp0ZXh0X291dCA9IHRleHQ7CisgICAgcmV0dXJuIGZkOworfQorCitzdGF0aWMg
aW50IHRwbF9tbWFwX2ZpbGUoY2hhciAqZmlsZW5hbWUsIHRwbF9tbWFwX3JlYyAqbXIpIHsKKyAg
ICBzdHJ1Y3Qgc3RhdCBzdGF0X2J1ZjsKKworICAgIGlmICggKG1yLT5mZCA9IG9wZW4oZmlsZW5h
bWUsIE9fUkRPTkxZKSkgPT0gLTEgKSB7CisgICAgICAgIHRwbF9ob29rLm9vcHMoIkNvdWxkbid0
IG9wZW4gZmlsZSAlczogJXNcbiIsIGZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOworICAgICAg
ICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKCBmc3RhdChtci0+ZmQsICZzdGF0X2J1Zikg
PT0gLTEpIHsKKyAgICAgICAgY2xvc2UobXItPmZkKTsKKyAgICAgICAgdHBsX2hvb2sub29wcygi
Q291bGRuJ3Qgc3RhdCBmaWxlICVzOiAlc1xuIiwgZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7
CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBtci0+dGV4dF9zeiA9IChzaXplX3Qp
c3RhdF9idWYuc3Rfc2l6ZTsgIAorICAgIG1yLT50ZXh0ID0gbW1hcCgwLCBzdGF0X2J1Zi5zdF9z
aXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBtci0+ZmQsIDApOworICAgIGlmIChtci0+dGV4
dCA9PSBNQVBfRkFJTEVEKSB7CisgICAgICAgIGNsb3NlKG1yLT5mZCk7CisgICAgICAgIHRwbF9o
b29rLm9vcHMoIkZhaWxlZCB0byBtbWFwICVzOiAlc1xuIiwgZmlsZW5hbWUsIHN0cmVycm9yKGVy
cm5vKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKwor
VFBMX0FQSSBpbnQgdHBsX3BhY2sodHBsX25vZGUgKnIsIGludCBpKSB7CisgICAgdHBsX25vZGUg
Km4sICpjaGlsZCwgKm5wOworICAgIHZvaWQgKmRhdGF2PU5VTEw7CisgICAgc2l6ZV90IHN6LCBp
dGVybWF4OworICAgIHVpbnQzMl90IHNsZW47CisgICAgY2hhciAqc3RyOworICAgIHRwbF9iaW4g
KmJpbjsKKyAgICB0cGxfcG91bmRfZGF0YSAqcGQ7CisgICAgaW50IGZpZHg7CisKKyAgICBuID0g
dHBsX2ZpbmRfaShyLGkpOworICAgIGlmIChuID09IE5VTEwpIHsKKyAgICAgICAgdHBsX2hvb2su
b29wcygiaW52YWxpZCBpbmRleCAlZCB0byB0cGxfcGFja1xuIiwgaSk7CisgICAgICAgIHJldHVy
biAtMTsKKyAgICB9CisKKyAgICBpZiAoKCh0cGxfcm9vdF9kYXRhKikoci0+ZGF0YSkpLT5mbGFn
cyAmIFRQTF9SRE9OTFkpIHsKKyAgICAgICAgLyogY29udmVydCB0byBhbiB3cml0ZWFibGUgdHBs
LCBpbml0aWFsbHkgZW1wdHkgKi8KKyAgICAgICAgdHBsX2ZyZWVfa2VlcF9tYXAocik7CisgICAg
fQorCisgICAgKCh0cGxfcm9vdF9kYXRhKikoci0+ZGF0YSkpLT5mbGFncyB8PSBUUExfV1JPTkxZ
OworCisgICAgaWYgKG4tPnR5cGUgPT0gVFBMX1RZUEVfQVJZKSBkYXRhdiA9IHRwbF9leHRlbmRf
YmFja2JvbmUobik7CisgICAgY2hpbGQgPSBuLT5jaGlsZHJlbjsKKyAgICB3aGlsZShjaGlsZCkg
eworICAgICAgICBzd2l0Y2goY2hpbGQtPnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgVFBMX1RZ
UEVfQllURToKKyAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfRE9VQkxFOgorICAgICAgICAgICAg
Y2FzZSBUUExfVFlQRV9JTlQzMjoKKyAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfVUlOVDMyOgor
ICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9JTlQ2NDoKKyAgICAgICAgICAgIGNhc2UgVFBMX1RZ
UEVfVUlOVDY0OgorICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9JTlQxNjoKKyAgICAgICAgICAg
IGNhc2UgVFBMX1RZUEVfVUlOVDE2OgorICAgICAgICAgICAgICAgIC8qIG5vIG5lZWQgdG8gdXNl
IGZpZHggaXRlcmF0aW9uIGhlcmU7IHdlIGNhbiBjb3B5IG11bHRpcGxlIHZhbHVlcyBpbiBvbmUg
bWVtY3B5ICovCisgICAgICAgICAgICAgICAgbWVtY3B5KGNoaWxkLT5kYXRhLGNoaWxkLT5hZGRy
LHRwbF90eXBlc1tjaGlsZC0+dHlwZV0uc3ogKiBjaGlsZC0+bnVtKTsKKyAgICAgICAgICAgICAg
ICBpZiAoZGF0YXYpIGRhdGF2ID0gdHBsX2NwdihkYXRhdixjaGlsZC0+ZGF0YSx0cGxfdHlwZXNb
Y2hpbGQtPnR5cGVdLnN6ICogY2hpbGQtPm51bSk7CisgICAgICAgICAgICAgICAgaWYgKG4tPnR5
cGUgPT0gVFBMX1RZUEVfQVJZKSBuLT5zZXJfb3N6ICs9IHRwbF90eXBlc1tjaGlsZC0+dHlwZV0u
c3ogKiBjaGlsZC0+bnVtOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBUUExfVFlQRV9CSU46CisgICAgICAgICAgICAgICAgLyogY29weSB0aGUgYnVmZmVyIHRvIGJl
IHBhY2tlZCAqLyAKKyAgICAgICAgICAgICAgICBzbGVuID0gKCh0cGxfYmluKiljaGlsZC0+YWRk
ciktPnN6OworICAgICAgICAgICAgICAgIGlmIChzbGVuID4wKSB7CisgICAgICAgICAgICAgICAg
ICAgIHN0ciA9IHRwbF9ob29rLm1hbGxvYyhzbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFzdHIpIGZhdGFsX29vbSgpOworICAgICAgICAgICAgICAgICAgICBtZW1jcHkoc3RyLCgodHBs
X2JpbiopY2hpbGQtPmFkZHIpLT5hZGRyLHNsZW4pOworICAgICAgICAgICAgICAgIH0gZWxzZSBz
dHIgPSBOVUxMOworICAgICAgICAgICAgICAgIC8qIGFuZCBtYWtlIGEgdHBsX2JpbiB0byBwb2lu
dCB0byBpdCAqLworICAgICAgICAgICAgICAgIGJpbiA9IHRwbF9ob29rLm1hbGxvYyhzaXplb2Yo
dHBsX2JpbikpOworICAgICAgICAgICAgICAgIGlmICghYmluKSBmYXRhbF9vb20oKTsKKyAgICAg
ICAgICAgICAgICBiaW4tPmFkZHIgPSBzdHI7CisgICAgICAgICAgICAgICAgYmluLT5zeiA9IHNs
ZW47CisgICAgICAgICAgICAgICAgLyogbm93IHBhY2sgaXRzIHBvaW50ZXIsIGZpcnN0IGRlZXAg
ZnJlZWluZyBhbnkgcHJlLWV4aXN0aW5nIGJpbiAqLworICAgICAgICAgICAgICAgIGlmICgqKHRw
bF9iaW4qKikoY2hpbGQtPmRhdGEpICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCgqKHRwbF9iaW4qKikoY2hpbGQtPmRhdGEpKS0+c3ogIT0gMCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRwbF9ob29rLmZyZWUoICgqKHRwbF9iaW4qKikoY2hpbGQtPmRhdGEpKS0+
YWRkciApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHRwbF9o
b29rLmZyZWUoKih0cGxfYmluKiopKGNoaWxkLT5kYXRhKSk7ICAKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgbWVtY3B5KGNoaWxkLT5kYXRhLCZiaW4sc2l6ZW9mKHRwbF9iaW4q
KSk7CisgICAgICAgICAgICAgICAgaWYgKGRhdGF2KSB7CisgICAgICAgICAgICAgICAgICAgIGRh
dGF2ID0gdHBsX2NwdihkYXRhdiwgJmJpbiwgc2l6ZW9mKHRwbF9iaW4qKSk7CisgICAgICAgICAg
ICAgICAgICAgICoodHBsX2JpbioqKShjaGlsZC0+ZGF0YSkgPSBOVUxMOyAgCisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChuLT50eXBlID09IFRQTF9UWVBFX0FSWSkgewor
ICAgICAgICAgICAgICAgICAgICBuLT5zZXJfb3N6ICs9IHNpemVvZih1aW50MzJfdCk7IC8qIGJp
bmFyeSBidWYgbGVuIHdvcmQgKi8KKyAgICAgICAgICAgICAgICAgICAgbi0+c2VyX29zeiArPSBi
aW4tPnN6OyAgICAgICAgICAvKiBiaW5hcnkgYnVmICovCisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9TVFI6CisgICAg
ICAgICAgICAgICAgZm9yKGZpZHg9MDsgZmlkeCA8IGNoaWxkLT5udW07IGZpZHgrKykgeworICAg
ICAgICAgICAgICAgICAgLyogY29weSB0aGUgc3RyaW5nIHRvIGJlIHBhY2tlZC4gc2xlbiBpbmNs
dWRlcyBcMC4gdGhpcyAKKyAgICAgICAgICAgICAgICAgICAgIGJsb2NrIGFsc28gd29ya3MgaWYg
dGhlIHN0cmluZyBwb2ludGVyIGlzIE5VTEwuICovCisgICAgICAgICAgICAgICAgICBjaGFyICpj
YWRkciA9ICgoY2hhcioqKWNoaWxkLT5hZGRyKVtmaWR4XTsKKyAgICAgICAgICAgICAgICAgIGNo
YXIgKipjZGF0YSA9ICYoKGNoYXIqKiljaGlsZC0+ZGF0YSlbZmlkeF07CisgICAgICAgICAgICAg
ICAgICBzbGVuID0gY2FkZHIgPyAgKHN0cmxlbihjYWRkcikgKyAxKSA6IDA7CisgICAgICAgICAg
ICAgICAgICBpZiAoc2xlbikgeworICAgICAgICAgICAgICAgICAgICBzdHIgPSB0cGxfaG9vay5t
YWxsb2Moc2xlbik7CisgICAgICAgICAgICAgICAgICAgIGlmICghc3RyKSBmYXRhbF9vb20oKTsK
KyAgICAgICAgICAgICAgICAgICAgbWVtY3B5KHN0cixjYWRkcixzbGVuKTsgLyogaW5jbHVkZSBc
MCAqLworICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc3Ry
ID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgICAvKiBub3cg
cGFjayBpdHMgcG9pbnRlciwgZmlyc3QgZnJlZWluZyBhbnkgcHJlLWV4aXN0aW5nIHN0cmluZyAq
LworICAgICAgICAgICAgICAgICAgaWYgKCpjZGF0YSAhPSBOVUxMKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgdHBsX2hvb2suZnJlZSgqY2RhdGEpOyAgCisgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICBtZW1jcHkoY2RhdGEsJnN0cixzaXplb2YoY2hhciopKTsKKyAgICAg
ICAgICAgICAgICAgIGlmIChkYXRhdikgeworICAgICAgICAgICAgICAgICAgICAgIGRhdGF2ID0g
dHBsX2NwdihkYXRhdiwgJnN0ciwgc2l6ZW9mKGNoYXIqKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgKmNkYXRhID0gTlVMTDsgIAorICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgaWYgKG4tPnR5cGUgPT0gVFBMX1RZUEVfQVJZKSB7CisgICAgICAgICAgICAgICAgICAgICAg
bi0+c2VyX29zeiArPSBzaXplb2YodWludDMyX3QpOyAvKiBzdHJpbmcgbGVuIHdvcmQgKi8KKyAg
ICAgICAgICAgICAgICAgICAgICBpZiAoc2xlbj4xKSBuLT5zZXJfb3N6ICs9IHNsZW4tMTsvKiBz
dHJpbmcgKHdpdGhvdXQgbnVsKSAqLworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVf
QVJZOgorICAgICAgICAgICAgICAgIC8qIGNvcHkgdGhlIGNoaWxkJ3MgdHBsX2F0eXBlKiBhbmQg
cmVzZXQgaXQgdG8gZW1wdHkgKi8KKyAgICAgICAgICAgICAgICBpZiAoZGF0YXYpIHsKKyAgICAg
ICAgICAgICAgICAgICAgc3ogPSAoKHRwbF9hdHlwKikoY2hpbGQtPmRhdGEpKS0+c3o7CisgICAg
ICAgICAgICAgICAgICAgIGRhdGF2ID0gdHBsX2NwdihkYXRhdiwgJmNoaWxkLT5kYXRhLCBzaXpl
b2Yodm9pZCopKTsKKyAgICAgICAgICAgICAgICAgICAgY2hpbGQtPmRhdGEgPSB0cGxfaG9vay5t
YWxsb2Moc2l6ZW9mKHRwbF9hdHlwKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghY2hpbGQt
PmRhdGEpIGZhdGFsX29vbSgpOworICAgICAgICAgICAgICAgICAgICAoKHRwbF9hdHlwKikoY2hp
bGQtPmRhdGEpKS0+bnVtID0gMDsKKyAgICAgICAgICAgICAgICAgICAgKCh0cGxfYXR5cCopKGNo
aWxkLT5kYXRhKSktPnN6ID0gc3o7CisgICAgICAgICAgICAgICAgICAgICgodHBsX2F0eXAqKShj
aGlsZC0+ZGF0YSkpLT5iYiA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICgodHBsX2F0eXAq
KShjaGlsZC0+ZGF0YSkpLT5iYnRhaWwgPSBOVUxMOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAvKiBwYXJlbnQgaXMgYXJyYXk/IHRoZW4gYnViYmxlIHVwIGNoaWxkIGFycmF5
J3Mgc2VyX29zeiAqLworICAgICAgICAgICAgICAgIGlmIChuLT50eXBlID09IFRQTF9UWVBFX0FS
WSkgeworICAgICAgICAgICAgICAgICAgICBuLT5zZXJfb3N6ICs9IHNpemVvZih1aW50MzJfdCk7
IC8qIGFycmF5IGxlbiB3b3JkICovCisgICAgICAgICAgICAgICAgICAgIG4tPnNlcl9vc3ogKz0g
Y2hpbGQtPnNlcl9vc3o7ICAgLyogY2hpbGQgYXJyYXkgc2VyX29zeiAqLworICAgICAgICAgICAg
ICAgICAgICBjaGlsZC0+c2VyX29zeiA9IDA7ICAgICAgICAgICAgIC8qIHJlc2V0IGNoaWxkIGFy
cmF5IHNlcl9vc3ogKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfUE9VTkQ6IAorICAgICAgICAgICAgICAgIC8q
IHdlIG5lZWQgdG8gaXRlcmF0ZSBuIHRpbWVzIG92ZXIgcHJlY2VkaW5nIG5vZGVzIGluIFMoLi4u
KS4gCisgICAgICAgICAgICAgICAgICogd2UgbWF5IGJlIGluIHRoZSBtaWRzdCBvZiBhbiBpdGVy
YXRpb24gZWFjaCB0aW1lIG9yIHN0YXJ0aW5nLiAqLworICAgICAgICAgICAgICAgICBwZCA9ICh0
cGxfcG91bmRfZGF0YSopY2hpbGQtPmRhdGE7CisgICAgICAgICAgICAgICAgIGl0ZXJtYXggPSBj
aGlsZC0+bnVtOworCisgICAgICAgICAgICAgICAgIC8qIGl0ZXJtYXggaXMgdG90YWwgbnVtIG9m
IGl0ZXJhdGlvbnMgbmVlZGVkICAqLworICAgICAgICAgICAgICAgICAvKiBwZC0+aXRlcm51bSBp
cyBjdXJyZW50IGl0ZXJhdGlvbiBpbmRleCAgKi8KKyAgICAgICAgICAgICAgICAgLyogcGQtPmlu
dGVyX2VsdF9sZW4gaXMgZWxlbWVudC10by1lbGVtZW50IGxlbiBvZiBjb250aWd1b3VzIHN0cnVj
dHMgKi8KKyAgICAgICAgICAgICAgICAgLyogcGQtPml0ZXJfc3RhcnRfbm9kZSBpcyB3aGVyZSB3
ZSBqdW1wIHRvIGF0IGVhY2ggaXRlcmF0aW9uLiAqLworCisgICAgICAgICAgICAgICAgIGlmICgr
KyhwZC0+aXRlcm51bSkgPCBpdGVybWF4KSB7CisKKyAgICAgICAgICAgICAgICAgICAvKiBpbiBz
dGFydCBvciBtaWRzdCBvZiBsb29wLiBhZHZhbmNlIGFkZHIvZGF0YSBwb2ludGVycy4gKi8KKyAg
ICAgICAgICAgICAgICAgICBmb3IobnA9cGQtPml0ZXJfc3RhcnRfbm9kZTsgbnAgIT0gY2hpbGQ7
IG5wID0gbnAtPm5leHQpIHsKKyAgICAgICAgICAgICAgICAgICAgIG5wLT5kYXRhID0gKGNoYXIq
KShucC0+ZGF0YSkgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHRwbF90eXBlc1tucC0+
dHlwZV0uc3ogKiBucC0+bnVtKTsKKyAgICAgICAgICAgICAgICAgICAgIG5wLT5hZGRyID0gKGNo
YXIqKShucC0+YWRkcikgKyBwZC0+aW50ZXJfZWx0X2xlbjsKKyAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgLyogZG8gbmV4dCBpdGVyYXRpb24gKi8KKyAgICAgICAgICAg
ICAgICAgICBjaGlsZCA9IHBkLT5pdGVyX3N0YXJ0X25vZGU7CisgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgICAgICAgICAgfSBlbHNlIHsgLyogbG9vcCBjb21wbGV0ZS4g
Ki8KKyAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgLyogcmVzZXQgaXRlcmF0
aW9uIGluZGV4IGFuZCBhZGRyL2RhdGEgcG9pbnRlcnMuICovCisgICAgICAgICAgICAgICAgICAg
cGQtPml0ZXJudW0gPSAwOworICAgICAgICAgICAgICAgICAgIGZvcihucD1wZC0+aXRlcl9zdGFy
dF9ub2RlOyBucCAhPSBjaGlsZDsgbnAgPSBucC0+bmV4dCkgeworICAgICAgICAgICAgICAgICAg
ICAgbnAtPmRhdGEgPSAoY2hhciopKG5wLT5kYXRhKSAtICgoaXRlcm1heC0xKSAqCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cGxfdHlwZXNb
bnAtPnR5cGVdLnN6ICogCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBucC0+bnVtKTsKKyAgICAgICAgICAgICAgICAgICAgIG5wLT5hZGRyID0g
KGNoYXIqKShucC0+YWRkcikgLSAoKGl0ZXJtYXgtMSkgKiBwZC0+aW50ZXJfZWx0X2xlbik7Cisg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgdHBsX2hvb2su
ZmF0YWwoInVuc3VwcG9ydGVkIGZvcm1hdCBjaGFyYWN0ZXJcbiIpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNoaWxkPWNoaWxkLT5uZXh0OworICAgIH0KKyAg
ICByZXR1cm4gMDsKK30KKworVFBMX0FQSSBpbnQgdHBsX3VucGFjayh0cGxfbm9kZSAqciwgaW50
IGkpIHsKKyAgICB0cGxfbm9kZSAqbiwgKmMsICpucDsKKyAgICB1aW50MzJfdCBzbGVuOworICAg
IGludCByYz0xLCBmaWR4OworICAgIGNoYXIgKnN0cjsKKyAgICB2b2lkICpkdj1OVUxMLCAqY2Fk
ZHI7CisgICAgc2l6ZV90IEFfYnl0ZXMsIGl0ZXJtYXg7CisgICAgdHBsX3BvdW5kX2RhdGEgKnBk
OworICAgIHZvaWQgKmltZzsKKyAgICBzaXplX3Qgc3o7CisKKworICAgIC8qIGhhbmRsZSB1bnVz
dWFsIGNhc2Ugb2YgdHBsX3BhY2ssdHBsX3VucGFjayB3aXRob3V0IGFuIAorICAgICAqIGludGVy
dmVuaW5nIHRwbF9kdW1wLiBkbyBhIGR1bXAvbG9hZCBpbXBsaWNpdGx5LiAqLworICAgIGlmICgo
KHRwbF9yb290X2RhdGEqKShyLT5kYXRhKSktPmZsYWdzICYgVFBMX1dST05MWSkgeworICAgICAg
ICBpZiAodHBsX2R1bXAocixUUExfTUVNLCZpbWcsJnN6KSAhPSAwKSByZXR1cm4gLTE7CisgICAg
ICAgIGlmICh0cGxfbG9hZChyLFRQTF9NRU18VFBMX1VGUkVFLGltZyxzeikgIT0gMCkgeworICAg
ICAgICAgICAgdHBsX2hvb2suZnJlZShpbWcpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAg
ICAgICB9OworICAgIH0KKworICAgIG4gPSB0cGxfZmluZF9pKHIsaSk7CisgICAgaWYgKG4gPT0g
TlVMTCkgeworICAgICAgICB0cGxfaG9vay5vb3BzKCJpbnZhbGlkIGluZGV4ICVkIHRvIHRwbF91
bnBhY2tcbiIsIGkpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogZWl0aGVy
IHJvb3Qgbm9kZSBvciBhbiBBIG5vZGUgKi8KKyAgICBpZiAobi0+dHlwZSA9PSBUUExfVFlQRV9S
T09UKSB7CisgICAgICAgIGR2ID0gdHBsX2ZpbmRfZGF0YV9zdGFydCggKCh0cGxfcm9vdF9kYXRh
Kikobi0+ZGF0YSkpLT5tbWFwLnRleHQgKTsKKyAgICB9IGVsc2UgaWYgKG4tPnR5cGUgPT0gVFBM
X1RZUEVfQVJZKSB7CisgICAgICAgIGlmICgoKHRwbF9hdHlwKikobi0+ZGF0YSkpLT5udW0gPD0g
MCkgcmV0dXJuIDA7IC8qIGFycmF5IGNvbnN1bWVkICovCisgICAgICAgIGVsc2UgcmMgPSAoKHRw
bF9hdHlwKikobi0+ZGF0YSkpLT5udW0tLTsKKyAgICAgICAgZHYgPSAoKHRwbF9hdHlwKikobi0+
ZGF0YSkpLT5jdXI7CisgICAgICAgIGlmICghZHYpIHRwbF9ob29rLmZhdGFsKCJtdXN0IHVucGFj
ayBwYXJlbnQgb2Ygbm9kZSBiZWZvcmUgbm9kZSBpdHNlbGZcbiIpOworICAgIH0KKworICAgIGMg
PSBuLT5jaGlsZHJlbjsKKyAgICB3aGlsZSAoYykgeworICAgICAgICBzd2l0Y2ggKGMtPnR5cGUp
IHsKKyAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfQllURToKKyAgICAgICAgICAgIGNhc2UgVFBM
X1RZUEVfRE9VQkxFOgorICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9JTlQzMjoKKyAgICAgICAg
ICAgIGNhc2UgVFBMX1RZUEVfVUlOVDMyOgorICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9JTlQ2
NDoKKyAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfVUlOVDY0OgorICAgICAgICAgICAgY2FzZSBU
UExfVFlQRV9JTlQxNjoKKyAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfVUlOVDE2OgorICAgICAg
ICAgICAgICAgIC8qIHVucGFjayBlbGVtZW50cyBvZiBjcm9zcy1lbmRpYW4gb2N0b3Rob3JwaWMg
YXJyYXkgaW5kaXZpZHVhbGx5ICovCisgICAgICAgICAgICAgICAgaWYgKCgodHBsX3Jvb3RfZGF0
YSopKHItPmRhdGEpKS0+ZmxhZ3MgJiBUUExfWEVORElBTikgeworICAgICAgICAgICAgICAgICAg
ICBmb3IoZmlkeD0wOyBmaWR4IDwgYy0+bnVtOyBmaWR4KyspIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNhZGRyID0gKHZvaWQqKSgodWludHB0cl90KWMtPmFkZHIgKyAoZmlkeCAqIHRwbF90
eXBlc1tjLT50eXBlXS5zeikpOworICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KGNhZGRy
LGR2LHRwbF90eXBlc1tjLT50eXBlXS5zeik7CisgICAgICAgICAgICAgICAgICAgICAgICB0cGxf
Ynl0ZXN3YXAoY2FkZHIsIHRwbF90eXBlc1tjLT50eXBlXS5zeik7CisgICAgICAgICAgICAgICAg
ICAgICAgICBkdiA9ICh2b2lkKikoKHVpbnRwdHJfdClkdiArIHRwbF90eXBlc1tjLT50eXBlXS5z
eik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAvKiBidWxrIHVucGFjayBvayBpZiBub3QgY3Jvc3MtZW5kaWFuICov
CisgICAgICAgICAgICAgICAgICAgIG1lbWNweShjLT5hZGRyLCBkdiwgdHBsX3R5cGVzW2MtPnR5
cGVdLnN6ICogYy0+bnVtKTsKKyAgICAgICAgICAgICAgICAgICAgZHYgPSAodm9pZCopKCh1aW50
cHRyX3QpZHYgKyB0cGxfdHlwZXNbYy0+dHlwZV0uc3ogKiBjLT5udW0pOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVf
QklOOgorICAgICAgICAgICAgICAgIG1lbWNweSgmc2xlbixkdixzaXplb2YodWludDMyX3QpKTsK
KyAgICAgICAgICAgICAgICBpZiAoKCh0cGxfcm9vdF9kYXRhKikoci0+ZGF0YSkpLT5mbGFncyAm
IFRQTF9YRU5ESUFOKQorICAgICAgICAgICAgICAgICAgICB0cGxfYnl0ZXN3YXAoJnNsZW4sIHNp
emVvZih1aW50MzJfdCkpOworICAgICAgICAgICAgICAgIGlmIChzbGVuID4gMCkgeworICAgICAg
ICAgICAgICAgICAgICBzdHIgPSAoY2hhciopdHBsX2hvb2subWFsbG9jKHNsZW4pOworICAgICAg
ICAgICAgICAgICAgICBpZiAoIXN0cikgZmF0YWxfb29tKCk7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHN0cj1OVUxMOworICAgICAgICAgICAgICAgIGR2ID0gKHZvaWQqKSgodWludHB0cl90KWR2
ICsgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgICAgICAgICAgaWYgKHNsZW4+MCkgbWVtY3B5
KHN0cixkdixzbGVuKTsKKyAgICAgICAgICAgICAgICBtZW1jcHkoJigoKHRwbF9iaW4qKWMtPmFk
ZHIpLT5hZGRyKSwmc3RyLHNpemVvZih2b2lkKikpOworICAgICAgICAgICAgICAgIG1lbWNweSgm
KCgodHBsX2JpbiopYy0+YWRkciktPnN6KSwmc2xlbixzaXplb2YodWludDMyX3QpKTsKKyAgICAg
ICAgICAgICAgICBkdiA9ICh2b2lkKikoKHVpbnRwdHJfdClkdiArIHNsZW4pOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9TVFI6CisgICAgICAgICAg
ICAgICAgZm9yKGZpZHg9MDsgZmlkeCA8IGMtPm51bTsgZmlkeCsrKSB7CisgICAgICAgICAgICAg
ICAgICBtZW1jcHkoJnNsZW4sZHYsc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgICAgICAgICAg
ICBpZiAoKCh0cGxfcm9vdF9kYXRhKikoci0+ZGF0YSkpLT5mbGFncyAmIFRQTF9YRU5ESUFOKQor
ICAgICAgICAgICAgICAgICAgICAgIHRwbF9ieXRlc3dhcCgmc2xlbiwgc2l6ZW9mKHVpbnQzMl90
KSk7CisgICAgICAgICAgICAgICAgICBpZiAoKCh0cGxfcm9vdF9kYXRhKikoci0+ZGF0YSkpLT5m
bGFncyAmIFRQTF9PTERfU1RSSU5HX0ZNVCkKKyAgICAgICAgICAgICAgICAgICAgc2xlbiArPSAx
OworICAgICAgICAgICAgICAgICAgZHYgPSAodm9pZCopKCh1aW50cHRyX3QpZHYgKyBzaXplb2Yo
dWludDMyX3QpKTsKKyAgICAgICAgICAgICAgICAgIGlmIChzbGVuKSB7ICAvKiBzbGVuIGluY2x1
ZGVzIFwwICovCisgICAgICAgICAgICAgICAgICAgIHN0ciA9IChjaGFyKil0cGxfaG9vay5tYWxs
b2Moc2xlbik7CisgICAgICAgICAgICAgICAgICAgIGlmICghc3RyKSBmYXRhbF9vb20oKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHNsZW4+MSkgbWVtY3B5KHN0cixkdixzbGVuLTEpOworICAg
ICAgICAgICAgICAgICAgICBzdHJbc2xlbi0xXSA9ICdcMCc7IC8qIG51bCB0ZXJtaW5hdGUgKi8K
KyAgICAgICAgICAgICAgICAgICAgZHYgPSAodm9pZCopKCh1aW50cHRyX3QpZHYgKyBzbGVuLTEp
OworICAgICAgICAgICAgICAgICAgfSBlbHNlIHN0cj1OVUxMOworICAgICAgICAgICAgICAgICAg
bWVtY3B5KCYoKGNoYXIqKiljLT5hZGRyKVtmaWR4XSwmc3RyLHNpemVvZihjaGFyKikpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
VFBMX1RZUEVfUE9VTkQ6CisgICAgICAgICAgICAgICAgLyogaXRlcmF0ZSBvdmVyIHByZWNlZGlu
ZyBub2RlcyAqLworICAgICAgICAgICAgICAgIHBkID0gKHRwbF9wb3VuZF9kYXRhKiljLT5kYXRh
OworICAgICAgICAgICAgICAgIGl0ZXJtYXggPSBjLT5udW07CisgICAgICAgICAgICAgICAgaWYg
KCsrKHBkLT5pdGVybnVtKSA8IGl0ZXJtYXgpIHsKKyAgICAgICAgICAgICAgICAgIC8qIGluIHN0
YXJ0IG9yIG1pZHN0IG9mIGxvb3AuIGFkdmFuY2UgYWRkci9kYXRhIHBvaW50ZXJzLiAqLworICAg
ICAgICAgICAgICAgICAgZm9yKG5wPXBkLT5pdGVyX3N0YXJ0X25vZGU7IG5wICE9IGM7IG5wID0g
bnAtPm5leHQpIHsKKyAgICAgICAgICAgICAgICAgICAgbnAtPmFkZHIgPSAoY2hhciopKG5wLT5h
ZGRyKSArIHBkLT5pbnRlcl9lbHRfbGVuOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgLyogZG8gbmV4dCBpdGVyYXRpb24gKi8KKyAgICAgICAgICAgICAgICAgIGMgPSBw
ZC0+aXRlcl9zdGFydF9ub2RlOworICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgeyAvKiBsb29wIGNvbXBsZXRlLiAqLworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgLyogcmVzZXQgaXRlcmF0aW9uIGluZGV4IGFuZCBhZGRyL2Rh
dGEgcG9pbnRlcnMuICovCisgICAgICAgICAgICAgICAgICBwZC0+aXRlcm51bSA9IDA7CisgICAg
ICAgICAgICAgICAgICBmb3IobnA9cGQtPml0ZXJfc3RhcnRfbm9kZTsgbnAgIT0gYzsgbnAgPSBu
cC0+bmV4dCkgeworICAgICAgICAgICAgICAgICAgICBucC0+YWRkciA9IChjaGFyKikobnAtPmFk
ZHIpIC0gKChpdGVybWF4LTEpICogcGQtPmludGVyX2VsdF9sZW4pOworICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBUUExfVFlQRV9BUlk6CisgICAgICAgICAgICAgICAgaWYgKHRwbF9zZXJsZW4o
cixjLGR2LCAmQV9ieXRlcykgPT0gLTEpIAorICAgICAgICAgICAgICAgICAgICB0cGxfaG9vay5m
YXRhbCgiaW50ZXJuYWwgZXJyb3IgaW4gdW5wYWNrXG4iKTsKKyAgICAgICAgICAgICAgICBtZW1j
cHkoICYoKHRwbF9hdHlwKikoYy0+ZGF0YSkpLT5udW0sIGR2LCBzaXplb2YodWludDMyX3QpKTsK
KyAgICAgICAgICAgICAgICBpZiAoKCh0cGxfcm9vdF9kYXRhKikoci0+ZGF0YSkpLT5mbGFncyAm
IFRQTF9YRU5ESUFOKQorICAgICAgICAgICAgICAgICAgICB0cGxfYnl0ZXN3YXAoJigodHBsX2F0
eXAqKShjLT5kYXRhKSktPm51bSwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgICAgICAgICAg
KCh0cGxfYXR5cCopKGMtPmRhdGEpKS0+Y3VyID0gKHZvaWQqKSgodWludHB0cl90KWR2K3NpemVv
Zih1aW50MzJfdCkpOworICAgICAgICAgICAgICAgIGR2ID0gKHZvaWQqKSgodWludHB0cl90KWR2
ICsgQV9ieXRlcyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIHRwbF9ob29rLmZhdGFsKCJ1bnN1cHBvcnRlZCBmb3JtYXQgY2hh
cmFjdGVyXG4iKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IGMgPSBjLT5uZXh0OworICAgIH0KKyAgICBpZiAobi0+dHlwZSA9PSBUUExfVFlQRV9BUlkpICgo
dHBsX2F0eXAqKShuLT5kYXRhKSktPmN1ciA9IGR2OyAvKiBuZXh0IGVsZW1lbnQgKi8KKyAgICBy
ZXR1cm4gcmM7Cit9CisKKy8qIFNwZWNpYWxpemVkIGZ1bmN0aW9uIHRoYXQgdW5wYWNrcyBvbmx5
IHRoZSByb290J3MgQSBub2RlcywgYWZ0ZXIgdHBsX2xvYWQgICovCitzdGF0aWMgaW50IHRwbF91
bnBhY2tBMCh0cGxfbm9kZSAqcikgeworICAgIHRwbF9ub2RlICpuLCAqYzsKKyAgICB1aW50MzJf
dCBzbGVuOworICAgIGludCByYz0xLGZpZHgsaTsKKyAgICB2b2lkICpkdjsKKyAgICBzaXplX3Qg
QV9ieXRlcywgaXRlcm1heDsKKyAgICB0cGxfcG91bmRfZGF0YSAqcGQ7CisKKyAgICBuID0gcjsK
KyAgICBkdiA9IHRwbF9maW5kX2RhdGFfc3RhcnQoICgodHBsX3Jvb3RfZGF0YSopKHItPmRhdGEp
KS0+bW1hcC50ZXh0KTsKKworICAgIGM9bi0+Y2hpbGRyZW47CisgICAgd2hpbGUgKGMpICB7Cisg
ICAgICAgIHN3aXRjaCAoYy0+dHlwZSkgeworICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9CWVRF
OgorICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9ET1VCTEU6CisgICAgICAgICAgICBjYXNlIFRQ
TF9UWVBFX0lOVDMyOgorICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9VSU5UMzI6CisgICAgICAg
ICAgICBjYXNlIFRQTF9UWVBFX0lOVDY0OgorICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9VSU5U
NjQ6CisgICAgICAgICAgICBjYXNlIFRQTF9UWVBFX0lOVDE2OgorICAgICAgICAgICAgY2FzZSBU
UExfVFlQRV9VSU5UMTY6CisgICAgICAgICAgICAgICAgZm9yKGZpZHg9MDtmaWR4IDwgYy0+bnVt
OyBmaWR4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgZHYgPSAodm9pZCopKCh1aW50cHRyX3Qp
ZHYgKyB0cGxfdHlwZXNbYy0+dHlwZV0uc3opOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfQklOOgorICAgICAgICAg
ICAgICAgIG1lbWNweSgmc2xlbixkdixzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgICAgICAg
ICBpZiAoKCh0cGxfcm9vdF9kYXRhKikoci0+ZGF0YSkpLT5mbGFncyAmIFRQTF9YRU5ESUFOKQor
ICAgICAgICAgICAgICAgICAgICB0cGxfYnl0ZXN3YXAoJnNsZW4sIHNpemVvZih1aW50MzJfdCkp
OworICAgICAgICAgICAgICAgIGR2ID0gKHZvaWQqKSgodWludHB0cl90KWR2ICsgc2l6ZW9mKHVp
bnQzMl90KSk7CisgICAgICAgICAgICAgICAgZHYgPSAodm9pZCopKCh1aW50cHRyX3QpZHYgKyBz
bGVuKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVf
U1RSOgorICAgICAgICAgICAgICAgIGZvcihpPTA7IGk8Yy0+bnVtOyBpKyspIHsKKyAgICAgICAg
ICAgICAgICAgIG1lbWNweSgmc2xlbixkdixzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgICAg
ICAgICAgIGlmICgoKHRwbF9yb290X2RhdGEqKShyLT5kYXRhKSktPmZsYWdzICYgVFBMX1hFTkRJ
QU4pCisgICAgICAgICAgICAgICAgICAgICAgdHBsX2J5dGVzd2FwKCZzbGVuLCBzaXplb2YodWlu
dDMyX3QpKTsKKyAgICAgICAgICAgICAgICAgIGlmICgoKHRwbF9yb290X2RhdGEqKShyLT5kYXRh
KSktPmZsYWdzICYgVFBMX09MRF9TVFJJTkdfRk1UKQorICAgICAgICAgICAgICAgICAgICBzbGVu
ICs9IDE7CisgICAgICAgICAgICAgICAgICBkdiA9ICh2b2lkKikoKHVpbnRwdHJfdClkdiArIHNp
emVvZih1aW50MzJfdCkpOworICAgICAgICAgICAgICAgICAgaWYgKHNsZW4+MSkgZHYgPSAodm9p
ZCopKCh1aW50cHRyX3QpZHYgKyBzbGVuLTEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfUE9VTkQ6CisgICAgICAg
ICAgICAgICAgLyogaXRlcmF0ZSBvdmVyIHRoZSBwcmVjZWRpbmcgbm9kZXMgKi8KKyAgICAgICAg
ICAgICAgICBpdGVybWF4ID0gYy0+bnVtOworICAgICAgICAgICAgICAgIHBkID0gKHRwbF9wb3Vu
ZF9kYXRhKiljLT5kYXRhOworICAgICAgICAgICAgICAgIGlmICgrKyhwZC0+aXRlcm51bSkgPCBp
dGVybWF4KSB7CisgICAgICAgICAgICAgICAgICBjID0gcGQtPml0ZXJfc3RhcnRfbm9kZTsKKyAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8qIGxv
b3AgY29tcGxldGUuICovCisgICAgICAgICAgICAgICAgICBwZC0+aXRlcm51bSA9IDA7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBU
UExfVFlQRV9BUlk6CisgICAgICAgICAgICAgICAgaWYgKCB0cGxfc2VybGVuKHIsYyxkdiwgJkFf
Ynl0ZXMpID09IC0xKSAKKyAgICAgICAgICAgICAgICAgICAgdHBsX2hvb2suZmF0YWwoImludGVy
bmFsIGVycm9yIGluIHVucGFja0EwXG4iKTsKKyAgICAgICAgICAgICAgICBtZW1jcHkoICYoKHRw
bF9hdHlwKikoYy0+ZGF0YSkpLT5udW0sIGR2LCBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAg
ICAgICAgICBpZiAoKCh0cGxfcm9vdF9kYXRhKikoci0+ZGF0YSkpLT5mbGFncyAmIFRQTF9YRU5E
SUFOKQorICAgICAgICAgICAgICAgICAgICB0cGxfYnl0ZXN3YXAoJigodHBsX2F0eXAqKShjLT5k
YXRhKSktPm51bSwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgICAgICAgICAgKCh0cGxfYXR5
cCopKGMtPmRhdGEpKS0+Y3VyID0gKHZvaWQqKSgodWludHB0cl90KWR2K3NpemVvZih1aW50MzJf
dCkpOworICAgICAgICAgICAgICAgIGR2ID0gKHZvaWQqKSgodWludHB0cl90KWR2ICsgQV9ieXRl
cyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIHRwbF9ob29rLmZhdGFsKCJ1bnN1cHBvcnRlZCBmb3JtYXQgY2hhcmFjdGVyXG4i
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjPWMtPm5leHQ7
CisgICAgfQorICAgIHJldHVybiByYzsKK30KKworLyogSW4tcGxhY2UgYnl0ZSBvcmRlciBzd2Fw
cGluZyBvZiBhIHdvcmQgb2YgbGVuZ3RoICJsZW4iIGJ5dGVzICovCitzdGF0aWMgdm9pZCB0cGxf
Ynl0ZXN3YXAodm9pZCAqd29yZCwgaW50IGxlbikgeworICAgIGludCBpOworICAgIGNoYXIgYywg
Knc7CisgICAgdyA9IChjaGFyKil3b3JkOworICAgIGZvcihpPTA7IGk8bGVuLzI7IGkrKykgewor
ICAgICAgICBjID0gd1tpXTsKKyAgICAgICAgd1tpXSA9IHdbbGVuLTEtaV07CisgICAgICAgIHdb
bGVuLTEtaV0gPSBjOworICAgIH0KK30KKworc3RhdGljIHZvaWQgdHBsX2ZhdGFsKGNoYXIgKmZt
dCwgLi4uKSB7CisgICAgdmFfbGlzdCBhcDsKKyAgICBjaGFyIGV4aXRfbXNnWzEwMF07CisKKyAg
ICB2YV9zdGFydChhcCxmbXQpOworICAgIHZzbnByaW50ZihleGl0X21zZywgMTAwLCBmbXQsIGFw
KTsKKyAgICB2YV9lbmQoYXApOworCisgICAgdHBsX2hvb2sub29wcygiJXMiLCBleGl0X21zZyk7
CisgICAgZXhpdCgtMSk7Cit9CisKK1RQTF9BUEkgaW50IHRwbF9nYXRoZXIoaW50IG1vZGUsIC4u
LikgeworICAgIHZhX2xpc3QgYXA7CisgICAgaW50IGZkLHJjPTA7CisgICAgc2l6ZV90ICpzenAs
c3o7CisgICAgdm9pZCAqKmltZywqYWRkciwqZGF0YTsKKyAgICB0cGxfZ2F0aGVyX3QgKipnczsK
KyAgICB0cGxfZ2F0aGVyX2NiICpjYjsKKworICAgIHZhX3N0YXJ0KGFwLG1vZGUpOworICAgIHN3
aXRjaCAobW9kZSkgeworICAgICAgICBjYXNlIFRQTF9HQVRIRVJfQkxPQ0tJTkc6CisgICAgICAg
ICAgICBmZCA9IHZhX2FyZyhhcCxpbnQpOworICAgICAgICAgICAgaW1nID0gdmFfYXJnKGFwLHZv
aWQqKTsKKyAgICAgICAgICAgIHN6cCA9IHZhX2FyZyhhcCxzaXplX3QqKTsKKyAgICAgICAgICAg
IHJjID0gdHBsX2dhdGhlcl9ibG9ja2luZyhmZCxpbWcsc3pwKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFRQTF9HQVRIRVJfTk9OQkxPQ0tJTkc6CisgICAgICAgICAgICBmZCA9
IHZhX2FyZyhhcCxpbnQpOworICAgICAgICAgICAgZ3MgPSAodHBsX2dhdGhlcl90KiopdmFfYXJn
KGFwLHZvaWQqKTsKKyAgICAgICAgICAgIGNiID0gKHRwbF9nYXRoZXJfY2IqKXZhX2FyZyhhcCx0
cGxfZ2F0aGVyX2NiKik7CisgICAgICAgICAgICBkYXRhID0gdmFfYXJnKGFwLHZvaWQqKTsKKyAg
ICAgICAgICAgIHJjID0gdHBsX2dhdGhlcl9ub25ibG9ja2luZyhmZCxncyxjYixkYXRhKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRQTF9HQVRIRVJfTUVNOgorICAgICAgICAg
ICAgYWRkciA9IHZhX2FyZyhhcCx2b2lkKik7CisgICAgICAgICAgICBzeiA9IHZhX2FyZyhhcCxz
aXplX3QpOworICAgICAgICAgICAgZ3MgPSAodHBsX2dhdGhlcl90KiopdmFfYXJnKGFwLHZvaWQq
KTsKKyAgICAgICAgICAgIGNiID0gKHRwbF9nYXRoZXJfY2IqKXZhX2FyZyhhcCx0cGxfZ2F0aGVy
X2NiKik7CisgICAgICAgICAgICBkYXRhID0gdmFfYXJnKGFwLHZvaWQqKTsKKyAgICAgICAgICAg
IHJjID0gdHBsX2dhdGhlcl9tZW0oYWRkcixzeixncyxjYixkYXRhKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgdHBsX2hvb2suZmF0YWwoInVuc3Vw
cG9ydGVkIHRwbF9nYXRoZXIgbW9kZSAlZFxuIixtb2RlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICB2YV9lbmQoYXApOworICAgIHJldHVybiByYzsKK30KKworLyogZGVxdWV1ZSBh
IHRwbCBieSByZWFkaW5nIHVudGlsIG9uZSBmdWxsIHRwbCBpbWFnZSBpcyBvYnRhaW5lZC4KKyAq
IFdlIHRha2UgY2FyZSBub3QgdG8gcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIHRwbC4KKyAqIFRo
aXMgaXMgaW50ZW5kZWQgYXMgYSBibG9ja2luZyBjYWxsIGkuZS4gZm9yIHVzZSB3aXRoIGEgYmxv
Y2tpbmcgZmQuCisgKiBJdCBjYW4gYmUgZ2l2ZW4gYSBub24tYmxvY2tpbmcgZmQsIGJ1dCB0aGUg
cmVhZCBzcGlucyBpZiB3ZSBoYXZlIHRvIHdhaXQuCisgKi8KK3N0YXRpYyBpbnQgdHBsX2dhdGhl
cl9ibG9ja2luZyhpbnQgZmQsIHZvaWQgKippbWcsIHNpemVfdCAqc3opIHsKKyAgICBjaGFyIHBy
ZWFtYmxlWzhdOworICAgIGludCBpPTAsIHJjOworICAgIHVpbnQzMl90IHRwbGxlbjsKKworICAg
IGRvIHsgCisgICAgICAgIHJjID0gcmVhZChmZCwmcHJlYW1ibGVbaV0sOC1pKTsKKyAgICAgICAg
aSArPSAocmM+MCkgPyByYyA6IDA7CisgICAgfSB3aGlsZSAoKHJjPT0tMSAmJiAoZXJybm89PUVJ
TlRSfHxlcnJubz09RUFHQUlOKSkgfHwgKHJjPjAgJiYgaTw4KSk7CisKKyAgICBpZiAocmM8MCkg
eworICAgICAgICB0cGxfaG9vay5vb3BzKCJ0cGxfZ2F0aGVyX2ZkX2Jsb2NraW5nIGZhaWxlZDog
JXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9IGVsc2Ug
aWYgKHJjID09IDApIHsKKyAgICAgICAgLyogdHBsX2hvb2sub29wcygidHBsX2dhdGhlcl9mZF9i
bG9ja2luZzogZW9mXG4iKTsgKi8KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfSBlbHNlIGlmIChp
ICE9IDgpIHsKKyAgICAgICAgdHBsX2hvb2sub29wcygiaW50ZXJuYWwgZXJyb3JcbiIpOworICAg
ICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKHByZWFtYmxlWzBdID09ICd0JyAmJiBw
cmVhbWJsZVsxXSA9PSAncCcgJiYgcHJlYW1ibGVbMl0gPT0gJ2wnKSB7CisgICAgICAgIG1lbWNw
eSgmdHBsbGVuLCZwcmVhbWJsZVs0XSw0KTsKKyAgICAgICAgaWYgKHRwbF9uZWVkc19lbmRpYW5f
c3dhcChwcmVhbWJsZSkpIHRwbF9ieXRlc3dhcCgmdHBsbGVuLDQpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHRwbF9ob29rLm9vcHMoInRwbF9nYXRoZXJfZmRfYmxvY2tpbmc6IG5vbi10cGwgaW5w
dXRcbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogbWFsbG9jIHNwYWNl
IGZvciByZW1haW5kZXIgb2YgdHBsIGltYWdlIChvdmVyYWxsIGxlbmd0aCB0cGxsZW4pIAorICAg
ICAqIGFuZCByZWFkIGl0IGluCisgICAgICovCisgICAgaWYgKHRwbF9ob29rLmdhdGhlcl9tYXgg
PiAwICYmIAorICAgICAgICB0cGxsZW4gPiB0cGxfaG9vay5nYXRoZXJfbWF4KSB7CisgICAgICAg
IHRwbF9ob29rLm9vcHMoInRwbCBleGNlZWRzIG1heCBsZW5ndGggJWRcbiIsIAorICAgICAgICAg
ICAgdHBsX2hvb2suZ2F0aGVyX21heCk7CisgICAgICAgIHJldHVybiAtMjsKKyAgICB9CisgICAg
KnN6ID0gdHBsbGVuOworICAgIGlmICggKCppbWcgPSB0cGxfaG9vay5tYWxsb2ModHBsbGVuKSkg
PT0gTlVMTCkgeworICAgICAgICBmYXRhbF9vb20oKTsKKyAgICB9CisKKyAgICBtZW1jcHkoKmlt
ZyxwcmVhbWJsZSw4KTsgIC8qIGNvcHkgcHJlYW1ibGUgdG8gb3V0cHV0IGJ1ZmZlciAqLworICAg
IGk9ODsKKyAgICBkbyB7IAorICAgICAgICByYyA9IHJlYWQoZmQsJigoKihjaGFyKiopaW1nKVtp
XSksdHBsbGVuLWkpOworICAgICAgICBpICs9IChyYz4wKSA/IHJjIDogMDsKKyAgICB9IHdoaWxl
ICgocmM9PS0xICYmIChlcnJubz09RUlOVFJ8fGVycm5vPT1FQUdBSU4pKSB8fCAocmM+MCAmJiBp
PHRwbGxlbikpOworCisgICAgaWYgKHJjPDApIHsKKyAgICAgICAgdHBsX2hvb2sub29wcygidHBs
X2dhdGhlcl9mZF9ibG9ja2luZyBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOworICAg
ICAgICB0cGxfaG9vay5mcmVlKCppbWcpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfSBlbHNl
IGlmIChyYyA9PSAwKSB7CisgICAgICAgIC8qIHRwbF9ob29rLm9vcHMoInRwbF9nYXRoZXJfZmRf
YmxvY2tpbmc6IGVvZlxuIik7ICovCisgICAgICAgIHRwbF9ob29rLmZyZWUoKmltZyk7CisgICAg
ICAgIHJldHVybiAwOworICAgIH0gZWxzZSBpZiAoaSAhPSB0cGxsZW4pIHsKKyAgICAgICAgdHBs
X2hvb2sub29wcygiaW50ZXJuYWwgZXJyb3JcbiIpOworICAgICAgICB0cGxfaG9vay5mcmVlKCpp
bWcpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJuIDE7Cit9CisKKy8q
IFVzZWQgYnkgc2VsZWN0KCktZHJpdmVuIGFwcHMgd2hpY2ggd2FudCB0byBnYXRoZXIgdHBsIGlt
YWdlcyBwaWVjZW1lYWwgKi8KKy8qIHRoZSBmaWxlIGRlc2NyaXB0b3IgbXVzdCBiZSBub24tYmxv
Y2tpbmcgZm9yIHRoaXMgZnVuY3Rpbm8gdG8gd29yay4gKi8KK3N0YXRpYyBpbnQgdHBsX2dhdGhl
cl9ub25ibG9ja2luZyggaW50IGZkLCB0cGxfZ2F0aGVyX3QgKipncywgdHBsX2dhdGhlcl9jYiAq
Y2IsIHZvaWQgKmRhdGEpIHsKKyAgICBjaGFyIGJ1ZltUUExfR0FUSEVSX0JVRkxFTl0sICppbWcs
ICp0cGw7CisgICAgaW50IHJjLCBrZWVwX2xvb3BpbmcsIGNicmM9MDsKKyAgICBzaXplX3QgY2F0
bGVuOworICAgIHVpbnQzMl90IHRwbGxlbjsKKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIHJj
ID0gcmVhZChmZCxidWYsVFBMX0dBVEhFUl9CVUZMRU4pOworICAgICAgICBpZiAocmMgPT0gLTEp
IHsKKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFSU5UUikgY29udGludWU7ICAvKiBnb3Qgc2ln
bmFsIGR1cmluZyByZWFkLCBpZ25vcmUgKi8KKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFQUdB
SU4pIHJldHVybiAxOyAvKiBub3RoaW5nIHRvIHJlYWQgcmlnaHQgbm93ICovCisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0cGxfaG9vay5vb3BzKCJ0cGxfZ2F0aGVyIGZhaWxl
ZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICAgICAgaWYgKCpncykgewor
ICAgICAgICAgICAgICAgICAgICB0cGxfaG9vay5mcmVlKCgqZ3MpLT5pbWcpOworICAgICAgICAg
ICAgICAgICAgICB0cGxfaG9vay5mcmVlKCpncyk7CisgICAgICAgICAgICAgICAgICAgICpncyA9
IE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsgICAg
ICAgICAgICAgICAgIC8qIGVycm9yLCBjYWxsZXIgc2hvdWxkIGNsb3NlIGZkICAqLworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHJjID09IDApIHsKKyAgICAgICAgICAgIGlmICgq
Z3MpIHsKKyAgICAgICAgICAgICAgICB0cGxfaG9vay5vb3BzKCJ0cGxfZ2F0aGVyOiBwYXJ0aWFs
IHRwbCBpbWFnZSBwcmVjZWRlcyBFT0ZcbiIpOworICAgICAgICAgICAgICAgIHRwbF9ob29rLmZy
ZWUoKCpncyktPmltZyk7CisgICAgICAgICAgICAgICAgdHBsX2hvb2suZnJlZSgqZ3MpOworICAg
ICAgICAgICAgICAgICpncyA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gMDsgICAgICAgICAgICAgICAgICAgICAgLyogRU9GLCBjYWxsZXIgc2hvdWxkIGNsb3NlIGZk
ICovCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiBjb25jYXRlbmF0ZSBhbnkgcGFy
dGlhbCB0cGwgZnJvbSBsYXN0IHJlYWQgd2l0aCBuZXcgYnVmZmVyICovCisgICAgICAgICAgICBp
ZiAoKmdzKSB7CisgICAgICAgICAgICAgICAgY2F0bGVuID0gKCpncyktPmxlbiArIHJjOworICAg
ICAgICAgICAgICAgIGlmICh0cGxfaG9vay5nYXRoZXJfbWF4ID4gMCAmJiAKKyAgICAgICAgICAg
ICAgICAgICAgY2F0bGVuID4gdHBsX2hvb2suZ2F0aGVyX21heCkgeworICAgICAgICAgICAgICAg
ICAgICB0cGxfaG9vay5mcmVlKCAoKmdzKS0+aW1nICk7CisgICAgICAgICAgICAgICAgICAgIHRw
bF9ob29rLmZyZWUoICgqZ3MpICk7CisgICAgICAgICAgICAgICAgICAgICpncyA9IE5VTEw7Cisg
ICAgICAgICAgICAgICAgICAgIHRwbF9ob29rLm9vcHMoInRwbCBleGNlZWRzIG1heCBsZW5ndGgg
JWRcbiIsIAorICAgICAgICAgICAgICAgICAgICAgICAgdHBsX2hvb2suZ2F0aGVyX21heCk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAtMjsgICAgICAgICAgICAgIC8qIGVycm9yLCBjYWxs
ZXIgc2hvdWxkIGNsb3NlIGZkICovCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmICggKGltZyA9IHRwbF9ob29rLnJlYWxsb2MoKCpncyktPmltZywgY2F0bGVuKSkgPT0gTlVM
TCkgeworICAgICAgICAgICAgICAgICAgICBmYXRhbF9vb20oKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgbWVtY3B5KGltZyArICgqZ3MpLT5sZW4sIGJ1ZiwgcmMpOworICAg
ICAgICAgICAgICAgIHRwbF9ob29rLmZyZWUoKmdzKTsKKyAgICAgICAgICAgICAgICAqZ3MgPSBO
VUxMOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbWcgPSBidWY7Cisg
ICAgICAgICAgICAgICAgY2F0bGVuID0gcmM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAv
KiBpc29sYXRlIGFueSBmdWxsIHRwbChzKSBpbiBpbWcgYW5kIGludm9rZSBjYiBmb3IgZWFjaCAq
LworICAgICAgICAgICAgdHBsID0gaW1nOworICAgICAgICAgICAga2VlcF9sb29waW5nID0gKHRw
bCs4IDwgaW1nK2NhdGxlbikgPyAxIDogMDsKKyAgICAgICAgICAgIHdoaWxlIChrZWVwX2xvb3Bp
bmcpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3RybmNtcCgidHBsIiwgdHBsLCAzKSAhPSAwKSB7
CisgICAgICAgICAgICAgICAgICAgIHRwbF9ob29rLm9vcHMoInRwbCBwcmVmaXggaW52YWxpZFxu
Iik7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbWcgIT0gYnVmKSB0cGxfaG9vay5mcmVlKGlt
Zyk7CisgICAgICAgICAgICAgICAgICAgIHRwbF9ob29rLmZyZWUoKmdzKTsKKyAgICAgICAgICAg
ICAgICAgICAgKmdzID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0zOyAvKiBl
cnJvciwgY2FsbGVyIHNob3VsZCBjbG9zZSBmZCAqLworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBtZW1jcHkoJnRwbGxlbiwmdHBsWzRdLDQpOworICAgICAgICAgICAgICAgIGlm
ICh0cGxfbmVlZHNfZW5kaWFuX3N3YXAodHBsKSkgdHBsX2J5dGVzd2FwKCZ0cGxsZW4sNCk7Cisg
ICAgICAgICAgICAgICAgaWYgKHRwbCt0cGxsZW4gPD0gaW1nK2NhdGxlbikgeworICAgICAgICAg
ICAgICAgICAgICBjYnJjID0gKGNiKSh0cGwsdHBsbGVuLGRhdGEpOyAgLyogaW52b2tlIGNiIGZv
ciB0cGwgaW1hZ2UgKi8KKyAgICAgICAgICAgICAgICAgICAgdHBsICs9IHRwbGxlbjsgICAgICAg
ICAgICAgICAgIC8qIHBvaW50IHRvIG5leHQgdHBsIGltYWdlICovCisgICAgICAgICAgICAgICAg
ICAgIGlmIChjYnJjIDwgMCkga2VlcF9sb29waW5nID0gMDsKKyAgICAgICAgICAgICAgICAgICAg
ZWxzZSBrZWVwX2xvb3BpbmcgPSAodHBsKzggPCBpbWcrY2F0bGVuKSA/IDEgOiAwOworICAgICAg
ICAgICAgICAgIH0gZWxzZSBrZWVwX2xvb3Bpbmc9MDsKKyAgICAgICAgICAgIH0gCisgICAgICAg
ICAgICAvKiBjaGVjayBpZiBhcHAgY2FsbGJhY2sgcmVxdWVzdGVkIGNsb3N1cmUgb2YgdHBsIHNv
dXJjZSAqLworICAgICAgICAgICAgaWYgKGNicmMgPCAwKSB7CisgICAgICAgICAgICAgICAgdHBs
X2hvb2sub29wcygidHBsX2ZkX2dhdGhlciBhYm9ydGVkIGJ5IGFwcCBjYWxsYmFja1xuIik7Cisg
ICAgICAgICAgICAgICAgaWYgKGltZyAhPSBidWYpIHRwbF9ob29rLmZyZWUoaW1nKTsKKyAgICAg
ICAgICAgICAgICBpZiAoKmdzKSB0cGxfaG9vay5mcmVlKCpncyk7CisgICAgICAgICAgICAgICAg
KmdzID0gTlVMTDsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTQ7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAvKiBzdG9yZSBhbnkgbGVmdG92ZXIsIHBhcnRpYWwgdHBsIGZyYWdtZW50IGZv
ciBuZXh0IHJlYWQgKi8KKyAgICAgICAgICAgIGlmICh0cGwgPT0gaW1nICYmIGltZyAhPSBidWYp
IHsgIAorICAgICAgICAgICAgICAgIC8qIGNvbnN1bWVkIG5vdGhpbmcgZnJvbSBpbWchPWJ1ZiAq
LworICAgICAgICAgICAgICAgIGlmICggKCpncyA9IHRwbF9ob29rLm1hbGxvYyhzaXplb2YodHBs
X2dhdGhlcl90KSkpID09IE5VTEwgKSB7CisgICAgICAgICAgICAgICAgICAgIGZhdGFsX29vbSgp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAoKmdzKS0+aW1nID0gdHBsOwor
ICAgICAgICAgICAgICAgICgqZ3MpLT5sZW4gPSBjYXRsZW47CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKHRwbCA8IGltZytjYXRsZW4pIHsgIAorICAgICAgICAgICAgICAgIC8qIGNvbnN1bWVkIDEr
IHRwbChzKSBmcm9tIGltZyE9YnVmIG9yIDAgZnJvbSBpbWc9PWJ1ZiAqLworICAgICAgICAgICAg
ICAgIGlmICggKCpncyA9IHRwbF9ob29rLm1hbGxvYyhzaXplb2YodHBsX2dhdGhlcl90KSkpID09
IE5VTEwgKSB7CisgICAgICAgICAgICAgICAgICAgIGZhdGFsX29vbSgpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoICgoKmdzKS0+aW1nID0gdHBsX2hvb2subWFsbG9j
KGltZytjYXRsZW4gLSB0cGwpKSA9PSBOVUxMICkgeworICAgICAgICAgICAgICAgICAgICBmYXRh
bF9vb20oKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKCpncyktPmxlbiA9
IGltZytjYXRsZW4gLSB0cGw7CisgICAgICAgICAgICAgICAgbWVtY3B5KCAoKmdzKS0+aW1nLCB0
cGwsIGltZytjYXRsZW4gLSB0cGwpOworICAgICAgICAgICAgICAgIC8qIGZyZWUgcGFydGlhbGx5
IGNvbnN1bWVkIGNvbmNhdCBidWZmZXIgaWYgdXNlZCAqLworICAgICAgICAgICAgICAgIGlmIChp
bWcgIT0gYnVmKSB0cGxfaG9vay5mcmVlKGltZyk7IAorICAgICAgICAgICAgfSBlbHNlIHsgICAg
ICAgICAgICAgICAgICAgICAgICAvKiB0cGwocykgZnVsbHkgY29uc3VtZWQgKi8KKyAgICAgICAg
ICAgICAgICAvKiBmcmVlIGNvbnN1bWVkIGNvbmNhdCBidWZmZXIgaWYgdXNlZCAqLworICAgICAg
ICAgICAgICAgIGlmIChpbWcgIT0gYnVmKSB0cGxfaG9vay5mcmVlKGltZyk7IAorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfSAKK30KKworLyogZ2F0aGVyIHRwbCBwaWVjZW1lYWwgZnJv
bSBtZW1vcnkgYnVmZmVyIChub3QgZmQpIGUuZy4sIGZyb20gYSBsb3dlci1sZXZlbCBhcGkgKi8K
K3N0YXRpYyBpbnQgdHBsX2dhdGhlcl9tZW0oIGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwgdHBsX2dh
dGhlcl90ICoqZ3MsIHRwbF9nYXRoZXJfY2IgKmNiLCB2b2lkICpkYXRhKSB7CisgICAgY2hhciAq
aW1nLCAqdHBsOworICAgIGludCBrZWVwX2xvb3BpbmcsIGNicmM9MDsKKyAgICBzaXplX3QgY2F0
bGVuOworICAgIHVpbnQzMl90IHRwbGxlbjsKKworICAgIC8qIGNvbmNhdGVuYXRlIGFueSBwYXJ0
aWFsIHRwbCBmcm9tIGxhc3QgcmVhZCB3aXRoIG5ldyBidWZmZXIgKi8KKyAgICBpZiAoKmdzKSB7
CisgICAgICAgIGNhdGxlbiA9ICgqZ3MpLT5sZW4gKyBsZW47CisgICAgICAgIGlmICh0cGxfaG9v
ay5nYXRoZXJfbWF4ID4gMCAmJiAKKyAgICAgICAgICAgIGNhdGxlbiA+IHRwbF9ob29rLmdhdGhl
cl9tYXgpIHsKKyAgICAgICAgICAgIHRwbF9ob29rLmZyZWUoICgqZ3MpLT5pbWcgKTsKKyAgICAg
ICAgICAgIHRwbF9ob29rLmZyZWUoICgqZ3MpICk7CisgICAgICAgICAgICAqZ3MgPSBOVUxMOwor
ICAgICAgICAgICAgdHBsX2hvb2sub29wcygidHBsIGV4Y2VlZHMgbWF4IGxlbmd0aCAlZFxuIiwg
CisgICAgICAgICAgICAgICAgdHBsX2hvb2suZ2F0aGVyX21heCk7CisgICAgICAgICAgICByZXR1
cm4gLTI7ICAgICAgICAgICAgICAvKiBlcnJvciwgY2FsbGVyIHNob3VsZCBzdG9wIGFjY2VwdGlu
ZyBpbnB1dCBmcm9tIHNvdXJjZSovCisgICAgICAgIH0KKyAgICAgICAgaWYgKCAoaW1nID0gdHBs
X2hvb2sucmVhbGxvYygoKmdzKS0+aW1nLCBjYXRsZW4pKSA9PSBOVUxMKSB7CisgICAgICAgICAg
ICBmYXRhbF9vb20oKTsKKyAgICAgICAgfQorICAgICAgICBtZW1jcHkoaW1nICsgKCpncyktPmxl
biwgYnVmLCBsZW4pOworICAgICAgICB0cGxfaG9vay5mcmVlKCpncyk7CisgICAgICAgICpncyA9
IE5VTEw7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW1nID0gYnVmOworICAgICAgICBjYXRsZW4g
PSBsZW47CisgICAgfQorICAgIC8qIGlzb2xhdGUgYW55IGZ1bGwgdHBsKHMpIGluIGltZyBhbmQg
aW52b2tlIGNiIGZvciBlYWNoICovCisgICAgdHBsID0gaW1nOworICAgIGtlZXBfbG9vcGluZyA9
ICh0cGwrOCA8IGltZytjYXRsZW4pID8gMSA6IDA7CisgICAgd2hpbGUgKGtlZXBfbG9vcGluZykg
eworICAgICAgICBpZiAoc3RybmNtcCgidHBsIiwgdHBsLCAzKSAhPSAwKSB7CisgICAgICAgICAg
ICB0cGxfaG9vay5vb3BzKCJ0cGwgcHJlZml4IGludmFsaWRcbiIpOworICAgICAgICAgICAgaWYg
KGltZyAhPSBidWYpIHRwbF9ob29rLmZyZWUoaW1nKTsKKyAgICAgICAgICAgIHRwbF9ob29rLmZy
ZWUoKmdzKTsKKyAgICAgICAgICAgICpncyA9IE5VTEw7CisgICAgICAgICAgICByZXR1cm4gLTM7
IC8qIGVycm9yLCBjYWxsZXIgc2hvdWxkIHN0b3AgYWNjZXB0aW5nIGlucHV0IGZyb20gc291cmNl
Ki8KKyAgICAgICAgfQorICAgICAgICBtZW1jcHkoJnRwbGxlbiwmdHBsWzRdLDQpOworICAgICAg
ICBpZiAodHBsX25lZWRzX2VuZGlhbl9zd2FwKHRwbCkpIHRwbF9ieXRlc3dhcCgmdHBsbGVuLDQp
OworICAgICAgICBpZiAodHBsK3RwbGxlbiA8PSBpbWcrY2F0bGVuKSB7CisgICAgICAgICAgICBj
YnJjID0gKGNiKSh0cGwsdHBsbGVuLGRhdGEpOyAgLyogaW52b2tlIGNiIGZvciB0cGwgaW1hZ2Ug
Ki8KKyAgICAgICAgICAgIHRwbCArPSB0cGxsZW47ICAgICAgICAgICAgICAgLyogcG9pbnQgdG8g
bmV4dCB0cGwgaW1hZ2UgKi8KKyAgICAgICAgICAgIGlmIChjYnJjIDwgMCkga2VlcF9sb29waW5n
ID0gMDsKKyAgICAgICAgICAgIGVsc2Uga2VlcF9sb29waW5nID0gKHRwbCs4IDwgaW1nK2NhdGxl
bikgPyAxIDogMDsKKyAgICAgICAgfSBlbHNlIGtlZXBfbG9vcGluZz0wOworICAgIH0gCisgICAg
LyogY2hlY2sgaWYgYXBwIGNhbGxiYWNrIHJlcXVlc3RlZCBjbG9zdXJlIG9mIHRwbCBzb3VyY2Ug
Ki8KKyAgICBpZiAoY2JyYyA8IDApIHsKKyAgICAgICAgdHBsX2hvb2sub29wcygidHBsX21lbV9n
YXRoZXIgYWJvcnRlZCBieSBhcHAgY2FsbGJhY2tcbiIpOworICAgICAgICBpZiAoaW1nICE9IGJ1
ZikgdHBsX2hvb2suZnJlZShpbWcpOworICAgICAgICBpZiAoKmdzKSB0cGxfaG9vay5mcmVlKCpn
cyk7CisgICAgICAgICpncyA9IE5VTEw7CisgICAgICAgIHJldHVybiAtNDsKKyAgICB9CisgICAg
Lyogc3RvcmUgYW55IGxlZnRvdmVyLCBwYXJ0aWFsIHRwbCBmcmFnbWVudCBmb3IgbmV4dCByZWFk
ICovCisgICAgaWYgKHRwbCA9PSBpbWcgJiYgaW1nICE9IGJ1ZikgeyAgCisgICAgICAgIC8qIGNv
bnN1bWVkIG5vdGhpbmcgZnJvbSBpbWchPWJ1ZiAqLworICAgICAgICBpZiAoICgqZ3MgPSB0cGxf
aG9vay5tYWxsb2Moc2l6ZW9mKHRwbF9nYXRoZXJfdCkpKSA9PSBOVUxMICkgeworICAgICAgICAg
ICAgZmF0YWxfb29tKCk7CisgICAgICAgIH0KKyAgICAgICAgKCpncyktPmltZyA9IHRwbDsKKyAg
ICAgICAgKCpncyktPmxlbiA9IGNhdGxlbjsKKyAgICB9IGVsc2UgaWYgKHRwbCA8IGltZytjYXRs
ZW4pIHsgIAorICAgICAgICAvKiBjb25zdW1lZCAxKyB0cGwocykgZnJvbSBpbWchPWJ1ZiBvciAw
IGZyb20gaW1nPT1idWYgKi8KKyAgICAgICAgaWYgKCAoKmdzID0gdHBsX2hvb2subWFsbG9jKHNp
emVvZih0cGxfZ2F0aGVyX3QpKSkgPT0gTlVMTCApIHsKKyAgICAgICAgICAgIGZhdGFsX29vbSgp
OworICAgICAgICB9CisgICAgICAgIGlmICggKCgqZ3MpLT5pbWcgPSB0cGxfaG9vay5tYWxsb2Mo
aW1nK2NhdGxlbiAtIHRwbCkpID09IE5VTEwgKSB7CisgICAgICAgICAgICBmYXRhbF9vb20oKTsK
KyAgICAgICAgfQorICAgICAgICAoKmdzKS0+bGVuID0gaW1nK2NhdGxlbiAtIHRwbDsKKyAgICAg
ICAgbWVtY3B5KCAoKmdzKS0+aW1nLCB0cGwsIGltZytjYXRsZW4gLSB0cGwpOworICAgICAgICAv
KiBmcmVlIHBhcnRpYWxseSBjb25zdW1lZCBjb25jYXQgYnVmZmVyIGlmIHVzZWQgKi8KKyAgICAg
ICAgaWYgKGltZyAhPSBidWYpIHRwbF9ob29rLmZyZWUoaW1nKTsgCisgICAgfSBlbHNlIHsgICAg
ICAgICAgICAgICAgICAgICAgICAvKiB0cGwocykgZnVsbHkgY29uc3VtZWQgKi8KKyAgICAgICAg
LyogZnJlZSBjb25zdW1lZCBjb25jYXQgYnVmZmVyIGlmIHVzZWQgKi8KKyAgICAgICAgaWYgKGlt
ZyAhPSBidWYpIHRwbF9ob29rLmZyZWUoaW1nKTsgCisgICAgfQorICAgIHJldHVybiAxOworfQpk
aWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvdHBsLmggYi9XZWJLaXQvZ3RrL3dlYmtpdC90
cGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjM5NTNiCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvdHBsLmgKQEAgLTAsMCArMSwxMzMgQEAKKy8q
CitDb3B5cmlnaHQgKGMpIDIwMDUtMjAxMCwgVHJveSBELiBIYW5zb24gICAgIGh0dHA6Ly90cGwu
c291cmNlZm9yZ2UubmV0CitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCitUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJB
UworSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVECitUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEKK1BBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUgorT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CitFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCitQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKK1BST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKK0xJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCitORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorKi8KKworI2lmbmRlZiBUUExfSAorI2RlZmluZSBUUExfSCAKKworI2luY2x1
ZGUgPHN0ZGRlZi5oPiAgICAgLyogc2l6ZV90ICovCisKKyNpZmRlZiBfX0lOVEVMX0NPTVBJTEVS
CisjaW5jbHVkZSA8dGJiL3RiYm1hbGxvY19wcm94eS5oPgorI2VuZGlmIC8qIEludGVsIENvbXBp
bGVyIGVmZmljaWVudCBtZW1jcHkgZXRjICovCisKKyNpZmRlZiBfTVNDX1ZFUgordHlwZWRlZiB1
bnNpZ25lZCBpbnQgdWludDMyX3Q7CisjZWxzZQorI2luY2x1ZGUgPGludHR5cGVzLmg+ICAgLyog
dWludDMyX3QgKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cworZXh0ZXJuICJD
IiB7CisjZW5kaWYKKworI2lmZGVmIF9XSU4zMgorI2lmZGVmIFRQTF9FWFBPUlRTCisjZGVmaW5l
IFRQTF9BUEkgX19kZWNsc3BlYyhkbGxleHBvcnQpCisjZWxzZQkJCQkJCQkvKiAgKi8KKyNpZmRl
ZiBUUExfTk9MSUIKKyNkZWZpbmUgVFBMX0FQSQorI2Vsc2UKKyNkZWZpbmUgVFBMX0FQSSBfX2Rl
Y2xzcGVjKGRsbGltcG9ydCkKKyNlbmRpZiAvKiBUUExfTk9MSUIgKi8KKyNlbmRpZgkvKiBUUExf
RVhQT1JUUyovCisjZWxzZQorI2RlZmluZSBUUExfQVBJCisjZW5kaWYKKworLyogYml0IGZsYWdz
IChleHRlcm5hbCkgKi8KKyNkZWZpbmUgVFBMX0ZJTEUgICAgICAoMSA8PCAwKQorI2RlZmluZSBU
UExfTUVNICAgICAgICgxIDw8IDEpCisjZGVmaW5lIFRQTF9QUkVBTExPQ0QgKDEgPDwgMikKKyNk
ZWZpbmUgVFBMX0VYQ0VTU19PSyAoMSA8PCAzKQorI2RlZmluZSBUUExfRkQgICAgICAgICgxIDw8
IDQpCisjZGVmaW5lIFRQTF9VRlJFRSAgICAgKDEgPDwgNSkgIAorI2RlZmluZSBUUExfREFUQVBF
RUsgICgxIDw8IDYpICAKKyNkZWZpbmUgVFBMX0ZYTEVOUyAgICAoMSA8PCA3KSAgCisjZGVmaW5l
IFRQTF9HRVRTSVpFICAgKDEgPDwgOCkKKy8qIGRvIG5vdCBhZGQgZmxhZ3MgaGVyZSB3aXRob3V0
IHJlbnVtYmVyaW5nIHRoZSBpbnRlcm5hbCBmbGFncyEgKi8KKworLyogZmxhZ3MgZm9yIHRwbF9n
YXRoZXIgbW9kZSAqLworI2RlZmluZSBUUExfR0FUSEVSX0JMT0NLSU5HICAgIDEKKyNkZWZpbmUg
VFBMX0dBVEhFUl9OT05CTE9DS0lORyAyCisjZGVmaW5lIFRQTF9HQVRIRVJfTUVNICAgICAgICAg
MworCisvKiBIb29rcyBmb3IgZXJyb3IgbG9nZ2luZywgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rp
b25zIGFuZCBmYXRhbCAqLwordHlwZWRlZiBpbnQgKHRwbF9wcmludF9mY24pKGNvbnN0IGNoYXIg
KmZtdCwgLi4uKTsKK3R5cGVkZWYgdm9pZCAqKHRwbF9tYWxsb2NfZmNuKShzaXplX3Qgc3opOwor
dHlwZWRlZiB2b2lkICoodHBsX3JlYWxsb2NfZmNuKSh2b2lkICpwdHIsIHNpemVfdCBzeik7Cit0
eXBlZGVmIHZvaWQgKHRwbF9mcmVlX2Zjbikodm9pZCAqcHRyKTsKK3R5cGVkZWYgdm9pZCAodHBs
X2ZhdGFsX2ZjbikoY2hhciAqZm10LCAuLi4pOworCit0eXBlZGVmIHN0cnVjdCB0cGxfaG9va190
IHsKKyAgICB0cGxfcHJpbnRfZmNuICpvb3BzOworICAgIHRwbF9tYWxsb2NfZmNuICptYWxsb2M7
CisgICAgdHBsX3JlYWxsb2NfZmNuICpyZWFsbG9jOworICAgIHRwbF9mcmVlX2ZjbiAqZnJlZTsK
KyAgICB0cGxfZmF0YWxfZmNuICpmYXRhbDsKKyAgICBzaXplX3QgZ2F0aGVyX21heDsKK30gdHBs
X2hvb2tfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdHBsX25vZGUgeworICAgIGludCB0eXBlOworICAg
IHZvaWQgKmFkZHI7CisgICAgdm9pZCAqZGF0YTsgICAgICAgICAgICAgICAgICAvKiByOnRwbF9y
b290X2RhdGEqLiBBOnRwbF9hdHlwKi4gb3c6c3pvZiB0eXBlICovCisgICAgaW50IG51bTsgICAg
ICAgICAgICAgICAgICAgICAvKiBsZW5ndGggb2YgdHlwZSBpZiBpdHMgYSBDIGFycmF5ICovCisg
ICAgc2l6ZV90IHNlcl9vc3o7ICAgICAgICAgICAgICAvKiBzZXJpYWxpemF0aW9uIG91dHB1dCBz
aXplIGZvciBzdWJ0cmVlICovCisgICAgc3RydWN0IHRwbF9ub2RlICpjaGlsZHJlbjsgICAvKiBt
eSBjaGlsZHJlbjsgbGlua2VkLWxpc3QgKi8KKyAgICBzdHJ1Y3QgdHBsX25vZGUgKm5leHQsKnBy
ZXY7IC8qIG15IHNpYmxpbmdzIChuZXh0IGNoaWxkIG9mIG15IHBhcmVudCkgKi8KKyAgICBzdHJ1
Y3QgdHBsX25vZGUgKnBhcmVudDsgICAgIC8qIG15IHBhcmVudCAqLworfSB0cGxfbm9kZTsKKwor
LyogdXNlZCB3aGVuIHVuL3BhY2tpbmcgJ0InIHR5cGUgKGJpbmFyeSBidWZmZXJzKSAqLwordHlw
ZWRlZiBzdHJ1Y3QgdHBsX2JpbiB7CisgICAgdm9pZCAqYWRkcjsKKyAgICB1aW50MzJfdCBzejsK
K30gdHBsX2JpbjsKKworLyogZm9yIGFzeW5jL3BpZWNlbWVhbCByZWFkaW5nIG9mIHRwbCBpbWFn
ZXMgKi8KK3R5cGVkZWYgc3RydWN0IHRwbF9nYXRoZXJfdCB7CisgICAgY2hhciAqaW1nOworICAg
IGludCBsZW47Cit9IHRwbF9nYXRoZXJfdDsKKworLyogQ2FsbGJhY2sgdXNlZCB3aGVuIHRwbF9n
YXRoZXIgaGFzIHJlYWQgYSBmdWxsIHRwbCBpbWFnZSAqLwordHlwZWRlZiBpbnQgKHRwbF9nYXRo
ZXJfY2IpKHZvaWQgKmltZywgc2l6ZV90IHN6LCB2b2lkICpkYXRhKTsKKworLyogUHJvdG90eXBl
cyAqLworVFBMX0FQSSB0cGxfbm9kZSAqdHBsX21hcChjaGFyICpmbXQsLi4uKTsgICAgICAgLyog
ZGVmaW5lIHRwbCB1c2luZyBmb3JtYXQgKi8KK1RQTF9BUEkgdm9pZCB0cGxfZnJlZSh0cGxfbm9k
ZSAqcik7ICAgICAgICAgICAgIC8qIGZyZWUgYSB0cGwgbWFwICovCitUUExfQVBJIGludCB0cGxf
cGFjayh0cGxfbm9kZSAqciwgaW50IGkpOyAgICAgICAvKiBwYWNrIHRoZSBuJ3RoIHBhY2thYmxl
ICovCitUUExfQVBJIGludCB0cGxfdW5wYWNrKHRwbF9ub2RlICpyLCBpbnQgaSk7ICAgICAvKiB1
bnBhY2sgdGhlIG4ndGggcGFja2FibGUgKi8KK1RQTF9BUEkgaW50IHRwbF9kdW1wKHRwbF9ub2Rl
ICpyLCBpbnQgbW9kZSwgLi4uKTsgLyogc2VyaWFsaXplIHRvIG1lbS9maWxlICovCitUUExfQVBJ
IGludCB0cGxfbG9hZCh0cGxfbm9kZSAqciwgaW50IG1vZGUsIC4uLik7IC8qIHNldCBtZW0vZmls
ZSB0byB1bnBhY2sgKi8KK1RQTF9BUEkgaW50IHRwbF9BbGVuKHRwbF9ub2RlICpyLCBpbnQgaSk7
ICAgICAgLyogYXJyYXkgbGVuIG9mIHBhY2thYmxlIGkgKi8KK1RQTF9BUEkgY2hhciogdHBsX3Bl
ZWsoaW50IG1vZGUsIC4uLik7ICAgICAgICAgLyogc25lYWsgcGVlayBhdCBmb3JtYXQgc3RyaW5n
ICovCitUUExfQVBJIGludCB0cGxfZ2F0aGVyKCBpbnQgbW9kZSwgLi4uKTsgICAgICAgIC8qIG5v
bi1ibG9ja2luZyBpbWFnZSBnYXRoZXIgKi8KK1RQTF9BUEkgaW50IHRwbF9qb3QoaW50IG1vZGUs
IC4uLik7ICAgICAgICAgICAgLyogcXVpY2sgd3JpdGUgYSBzaW1wbGUgdHBsICovCisKKyNpZiBk
ZWZpbmVkIF9fY3BsdXNwbHVzCisgICAgfQorI2VuZGlmCisKKyNlbmRpZiAvKiBUUExfSCAqLwor
CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzb3VwY2FjaGUuY3BwIGIvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0c291cGNhY2hlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5lMGFmMGM2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0c291cGNhY2hlLmNwcApAQCAtMCwwICsxLDE5OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJ3
ZWJraXRwcml2YXRlLmgiCisjaW5jbHVkZSAid2Via2l0c291cGNhY2hlLmgiCisjaW5jbHVkZSAi
d2Via2l0c291cGNhY2hlY29yZS5oIgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorI2luY2x1
ZGUgPGdpby9naW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK3N0cnVjdCBfV2ViS2l0U291cENhY2hlUHJpdmF0ZSB7CisJV2ViS2l0U291cENh
Y2hlQ29yZSAqY2FjaGU7Cit9OworCitzdGF0aWMgU291cFNlc3Npb25GZWF0dXJlSW50ZXJmYWNl
ICp3ZWJraXRfc291cF9jYWNoZV9kZWZhdWx0X2ZlYXR1cmVfaW50ZXJmYWNlOworc3RhdGljIHZv
aWQgd2Via2l0X3NvdXBfY2FjaGVfc2Vzc2lvbl9mZWF0dXJlX2luaXQgKFNvdXBTZXNzaW9uRmVh
dHVyZUludGVyZmFjZSAqZmVhdHVyZV9pbnRlcmZhY2UsIGdwb2ludGVyIGludGVyZmFjZV9kYXRh
KTsKKworI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9HRVRfUFJJVkFURShvKSAoR19UWVBFX0lO
U1RBTkNFX0dFVF9QUklWQVRFICgobyksIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUsIFdlYktpdFNv
dXBDYWNoZVByaXZhdGUpKQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoV2ViS2l0U291cENh
Y2hlLCB3ZWJraXRfc291cF9jYWNoZSwgR19UWVBFX09CSkVDVCwKKwkJCSBHX0lNUExFTUVOVF9J
TlRFUkZBQ0UgKFNPVVBfVFlQRV9TRVNTSU9OX0ZFQVRVUkUsCisJCQkJCQl3ZWJraXRfc291cF9j
YWNoZV9zZXNzaW9uX2ZlYXR1cmVfaW5pdCkpCisKK3N0YXRpYyB2b2lkCityZXF1ZXN0X3N0YXJ0
ZWQgKFNvdXBTZXNzaW9uRmVhdHVyZSAqZmVhdHVyZSwgU291cFNlc3Npb24gKnNlc3Npb24sCisJ
CSBTb3VwTWVzc2FnZSAqbXNnLCBTb3VwU29ja2V0ICpzb2NrZXQpCit7CisgICAgLyogRHVtbXkg
Ki8KK30KKworc3RhdGljIHZvaWQKK2F0dGFjaCAoU291cFNlc3Npb25GZWF0dXJlICpmZWF0dXJl
LCBTb3VwU2Vzc2lvbiAqc2Vzc2lvbikKK3sKKyAgICBXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlID0g
KFdlYktpdFNvdXBDYWNoZSAqKSBmZWF0dXJlOworICAgIHNvdXBfc2Vzc2lvbl9hZGRfZmVhdHVy
ZSAoc2Vzc2lvbiwgU09VUF9TRVNTSU9OX0ZFQVRVUkUgKGNhY2hlLT5wcml2LT5jYWNoZSkpOwor
CisgICAgd2Via2l0X3NvdXBfY2FjaGVfZGVmYXVsdF9mZWF0dXJlX2ludGVyZmFjZS0+YXR0YWNo
IChmZWF0dXJlLCBzZXNzaW9uKTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX2NhY2hl
X3Nlc3Npb25fZmVhdHVyZV9pbml0IChTb3VwU2Vzc2lvbkZlYXR1cmVJbnRlcmZhY2UgKmZlYXR1
cmVfaW50ZXJmYWNlLAorCQkJCQlncG9pbnRlciBpbnRlcmZhY2VfZGF0YSkKK3sKKwl3ZWJraXRf
c291cF9jYWNoZV9kZWZhdWx0X2ZlYXR1cmVfaW50ZXJmYWNlID0KKwkJc3RhdGljX2Nhc3Q8U291
cFNlc3Npb25GZWF0dXJlSW50ZXJmYWNlKj4oZ190eXBlX2RlZmF1bHRfaW50ZXJmYWNlX3BlZWsg
KFNPVVBfVFlQRV9TRVNTSU9OX0ZFQVRVUkUpKTsKKworCWZlYXR1cmVfaW50ZXJmYWNlLT5hdHRh
Y2ggPSBhdHRhY2g7CisJZmVhdHVyZV9pbnRlcmZhY2UtPnJlcXVlc3Rfc3RhcnRlZCA9IHJlcXVl
c3Rfc3RhcnRlZDsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX2NhY2hlX2luaXQgKFdl
YktpdFNvdXBDYWNoZSAqY2FjaGUpCit7CisJV2ViS2l0U291cENhY2hlUHJpdmF0ZSAqcHJpdjsK
KworCXByaXYgPSBjYWNoZS0+cHJpdiA9IFdFQktJVF9TT1VQX0NBQ0hFX0dFVF9QUklWQVRFIChj
YWNoZSk7CisKKwlwcml2LT5jYWNoZSA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRf
c291cF9jYWNoZV9maW5hbGl6ZSAoR09iamVjdCAqb2JqZWN0KQoreworCVdlYktpdFNvdXBDYWNo
ZVByaXZhdGUgKnByaXY7CisKKwlwcml2ID0gV0VCS0lUX1NPVVBfQ0FDSEUgKG9iamVjdCktPnBy
aXY7CisKKwlnX29iamVjdF91bnJlZiAocHJpdi0+Y2FjaGUpOworCisJR19PQkpFQ1RfQ0xBU1Mg
KHdlYmtpdF9zb3VwX2NhY2hlX3BhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOworfQor
CisjZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX1RZUEVfVFlQRSAod2Via2l0X3NvdXBfY2FjaGVf
dHlwZV9nZXRfdHlwZSgpKQorc3RhdGljIEdUeXBlCit3ZWJraXRfc291cF9jYWNoZV90eXBlX2dl
dF90eXBlICh2b2lkKQoreworCXN0YXRpYyBHVHlwZSBjYWNoZV90eXBlID0gMDsKKworCXN0YXRp
YyBjb25zdCBHRW51bVZhbHVlIGNhY2hlX3R5cGVzW10gPSB7CisJCXtXRUJLSVRfU09VUF9DQUNI
RV9TSU5HTEVfVVNFUiwgIlNpbmdsZSB1c2VyIGNhY2hlIiwgInVzZXIifSwKKwkJe1dFQktJVF9T
T1VQX0NBQ0hFX1NIQVJFRCwgIlNoYXJlZCBjYWNoZSIsICJzaGFyZWQifSwKKwkJezAsIE5VTEws
IE5VTEx9CisJfTsKKworCWlmICghY2FjaGVfdHlwZSkgeworCQljYWNoZV90eXBlID0gZ19lbnVt
X3JlZ2lzdGVyX3N0YXRpYyAoIldlYktpdFNvdXBDYWNoZVR5cGUiLCBjYWNoZV90eXBlcyk7CisJ
fQorCXJldHVybiBjYWNoZV90eXBlOworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfY2Fj
aGVfY2xhc3NfaW5pdCAoV2ViS2l0U291cENhY2hlQ2xhc3MgKmNhY2hlX2NsYXNzKQoreworCUdP
YmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MqKWNhY2hlX2NsYXNzOwor
CisJZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfc291cF9jYWNoZV9maW5hbGl6ZTsK
KworCWdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShjYWNoZV9jbGFzcywgc2l6ZW9mIChXZWJLaXRT
b3VwQ2FjaGVQcml2YXRlKSk7Cit9CisKKy8qKgorICogd2Via2l0X3NvdXBfY2FjaGVfbmV3Ogor
ICogQGNhY2hlX2RpcjogdGhlIGRpcmVjdG9yeSB0byBzdG9yZSB0aGUgY2FjaGVkIGRhdGEsIG9y
ICVOVUxMIHRvIHVzZSB0aGUgZGVmYXVsdCBvbmUKKyAqIEBjYWNoZV90eXBlOiB0aGUgI1dlYktp
dFNvdXBDYWNoZVR5cGUgb2YgdGhlIGNhY2hlCisgKgorICogQ3JlYXRlcyBhIG5ldyAjV2ViS2l0
U291cENhY2hlLgorICoKKyAqIFJldHVybnM6IGEgbmV3ICNXZWJLaXRTb3VwQ2FjaGUKKyAqCisg
KiBTaW5jZTogMi4yOAorICoqLworV2ViS2l0U291cENhY2hlICoKK3dlYmtpdF9zb3VwX2NhY2hl
X25ldyAoY29uc3QgY2hhciAqY2FjaGVfZGlyLCBXZWJLaXRTb3VwQ2FjaGVUeXBlIGNhY2hlX3R5
cGUpCit7CisgICAgV2ViS2l0U291cENhY2hlKiBjYWNoZSA9CisgICAgICAgIChXZWJLaXRTb3Vw
Q2FjaGUgKikgZ19vYmplY3RfbmV3IChXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogImNhY2hlLWRpciIsIGNhY2hlX2Rp
ciwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICJjYWNo
ZS10eXBlIiwgY2FjaGVfdHlwZSwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5VTEwpOworCisgICAgY2FjaGUtPnByaXYtPmNhY2hlID0gd2Via2l0U291cENh
Y2hlQ29yZU5ldyAoY2FjaGVfZGlyLCAoV2ViS2l0U291cENhY2hlQ29yZVR5cGUpY2FjaGVfdHlw
ZSk7CisKKyAgICByZXR1cm4gY2FjaGU7Cit9CisKKy8qKgorICogd2Via2l0X3NvdXBfY2FjaGVf
Zmx1c2g6CisgKiBAY2FjaGU6IGEgI1dlYktpdFNvdXBDYWNoZQorICogQHNlc3Npb246IHRoZSAj
U291cFNlc3Npb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBAY2FjaGUKKyAqIAorICogVGhpcyBmdW5j
dGlvbiB3aWxsIGZvcmNlIGFsbCBwZW5kaW5nIHdyaXRlcyBpbiB0aGUgQGNhY2hlIHRvIGJlCisg
KiBjb21taXR0ZWQgdG8gZGlzay4gRm9yIGRvaW5nIHNvIGl0IHdpbGwgaXRlcmF0ZSB0aGUgI0dN
YWluQ29udGV4dAorICogYXNzb2NpYXRlZCB3aXRoIHRoZSBAc2Vzc2lvbiAod2hpY2ggY2FuIGJl
IHRoZSBkZWZhdWx0IG9uZSkgYXMgbG9uZworICogYXMgbmVlZGVkLgorICoqLwordm9pZAord2Vi
a2l0X3NvdXBfY2FjaGVfZmx1c2ggKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUpCit7CisJd2Via2l0
U291cENhY2hlQ29yZUZsdXNoIChjYWNoZS0+cHJpdi0+Y2FjaGUpOworfQorCisvKioKKyAqIHdl
YmtpdF9zb3VwX2NhY2hlX2NsZWFyOgorICogQGNhY2hlOiBhICNXZWJLaXRTb3VwQ2FjaGUKKyAq
IAorICogV2lsbCByZW1vdmUgYWxsIGVudHJpZXMgaW4gdGhlIEBjYWNoZSBwbHVzIGFsbCB0aGUg
Y2FjaGUgZmlsZXMKKyAqIGFzc29jaWF0ZWQgd2l0aCB0aGVtLgorICoqLwordm9pZAord2Via2l0
X3NvdXBfY2FjaGVfY2xlYXIgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUpCit7CisJd2Via2l0U291
cENhY2hlQ29yZUNsZWFyIChjYWNoZS0+cHJpdi0+Y2FjaGUpOworfQorCit2b2lkCit3ZWJraXRf
c291cF9jYWNoZV9kdW1wIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKQoreworCXdlYmtpdFNvdXBD
YWNoZUNvcmVEdW1wIChjYWNoZS0+cHJpdi0+Y2FjaGUpOworfQorCit2b2lkCit3ZWJraXRfc291
cF9jYWNoZV9sb2FkIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKQoreworCXdlYmtpdFNvdXBDYWNo
ZUNvcmVMb2FkIChjYWNoZS0+cHJpdi0+Y2FjaGUpOworfQorCit2b2lkCit3ZWJraXRfc291cF9j
YWNoZV9zZXRfbWF4X3NpemUgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsCisJCQkgZ3VpbnQgbWF4
X3NpemUpCit7CisJd2Via2l0U291cENhY2hlQ29yZVNldE1heFNpemUgKGNhY2hlLT5wcml2LT5j
YWNoZSwgbWF4X3NpemUpOworfQorCitndWludAord2Via2l0X3NvdXBfY2FjaGVfZ2V0X21heF9z
aXplIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKQoreworCXJldHVybiB3ZWJraXRTb3VwQ2FjaGVD
b3JlR2V0TWF4U2l6ZSAoY2FjaGUtPnByaXYtPmNhY2hlKTsKK30KKwpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0c291cGNhY2hlLmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXRzb3VwY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTNkZmY3
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c291cGNhY2hlLmgK
QEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWZuZGVmIFdFQktJVF9TT1VQX0NBQ0hFX0gKKyNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FDSEVfSCAx
CisKKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAtdHlwZXMuaD4KKyNpbmNsdWRlIDxnaW8vZ2lvLmg+
CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisj
ZGVmaW5lIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUJCSAgICh3ZWJraXRfc291cF9jYWNoZV9nZXRf
dHlwZSAoKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FDSEUob2JqKQkJICAgKEdfVFlQRV9DSEVD
S19JTlNUQU5DRV9DQVNUICgob2JqKSwgV0VCS0lUX1RZUEVfU09VUF9DQUNIRSwgV2ViS2l0U291
cENhY2hlKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FDSEVfQ0xBU1Moa2xhc3MpCSAgIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgV0VCS0lUX1RZUEVfU09VUF9DQUNIRSwgV2Vi
S2l0U291cENhY2hlQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfU09VUF9JU19DQUNIRShvYmopCSAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfQ0FD
SEUpKQorI2RlZmluZSBXRUJLSVRfU09VUF9JU19DQUNIRV9DTEFTUyhrbGFzcykgKEdfVFlQRV9D
SEVDS19DTEFTU19UWVBFICgob2JqKSwgV0VCS0lUX1RZUEVfU09VUF9DQUNIRSkpCisjZGVmaW5l
IFdFQktJVF9TT1VQX0NBQ0hFX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9D
TEFTUyAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUsIFdlYktpdFNvdXBDYWNoZUNsYXNz
KSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBDYWNoZVByaXZhdGUgV2ViS2l0U291cENh
Y2hlUHJpdmF0ZTsKKwordHlwZWRlZiBlbnVtIHsKKwlXRUJLSVRfU09VUF9DQUNIRV9DQUNIRUFC
TEUgICA9ICgxIDw8IDApLAorCVdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFID0gKDEgPDwg
MSksCisJV0VCS0lUX1NPVVBfQ0FDSEVfSU5WQUxJREFURVMgPSAoMSA8PCAyKSwKKwlXRUJLSVRf
U09VUF9DQUNIRV9WQUxJREFURVMgPSAoMSA8PCAzKQorfSBXZWJLaXRTb3VwQ2FjaGVhYmlsaXR5
OworCit0eXBlZGVmIGVudW0geworCVdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX0ZSRVNILAor
CVdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX05FRURTX1ZBTElEQVRJT04sCisJV0VCS0lUX1NP
VVBfQ0FDSEVfUkVTUE9OU0VfU1RBTEUKK30gV2ViS2l0U291cENhY2hlUmVzcG9uc2U7CisKK3R5
cGVkZWYgZW51bSB7CisJV0VCS0lUX1NPVVBfQ0FDSEVfU0lOR0xFX1VTRVIsCisJV0VCS0lUX1NP
VVBfQ0FDSEVfU0hBUkVECit9IFdlYktpdFNvdXBDYWNoZVR5cGU7CisKK3R5cGVkZWYgc3RydWN0
IHsKKwlHT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKKworCS8qPCBwcml2YXRlID4qLworCVdlYktp
dFNvdXBDYWNoZVByaXZhdGUgKnByaXY7Cit9IFdlYktpdFNvdXBDYWNoZTsKKwordHlwZWRlZiBz
dHJ1Y3QgeworCUdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9IFdlYktpdFNvdXBDYWNoZUNs
YXNzOworCitXRUJLSVRfQVBJIEdUeXBlICAgICAgICAgICAgIHdlYmtpdF9zb3VwX2NhY2hlX2dl
dF90eXBlICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOworV0VCS0lUX0FQSSBXZWJLaXRTb3Vw
Q2FjaGUqICB3ZWJraXRfc291cF9jYWNoZV9uZXcgICAgICAgICAgICAgICAgICAgICAgICAgIChj
b25zdCBjaGFyICAqY2FjaGVfZGlyLAorCQkJCQkJCQkJICAgICBXZWJLaXRTb3VwQ2FjaGVUeXBl
IGNhY2hlX3R5cGUpOworV0VCS0lUX0FQSSB2b2lkICAgICAgICAgICAgICB3ZWJraXRfc291cF9j
YWNoZV9mbHVzaCAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRTb3VwQ2FjaGUgICAqY2Fj
aGUpOworV0VCS0lUX0FQSSB2b2lkICAgICAgICAgICAgICB3ZWJraXRfc291cF9jYWNoZV9jbGVh
ciAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRTb3VwQ2FjaGUgICAqY2FjaGUpOworCitX
RUJLSVRfQVBJIHZvaWQgICAgICAgICAgICAgIHdlYmtpdF9zb3VwX2NhY2hlX2R1bXAgICAgICAg
ICAgICAgICAgICAgICAgICAgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUpOworV0VCS0lUX0FQSSB2
b2lkICAgICAgICAgICAgICB3ZWJraXRfc291cF9jYWNoZV9sb2FkICAgICAgICAgICAgICAgICAg
ICAgICAgIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKTsKKworV0VCS0lUX0FQSSB2b2lkICAgICAg
ICAgICAgICB3ZWJraXRfc291cF9jYWNoZV9zZXRfbWF4X3NpemUgICAgICAgICAgICAgICAgIChX
ZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLAorCQkJCQkJCQkJICAgICBndWludCBtYXhfc2l6ZSk7CitX
RUJLSVRfQVBJIGd1aW50ICAgICAgICAgICAgIHdlYmtpdF9zb3VwX2NhY2hlX2dldF9tYXhfc2l6
ZSAgICAgICAgICAgICAgICAgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUpOworCitHX0VORF9ERUNM
UworCisjZW5kaWYgLyogV0VCS0lUX1NPVVBfQ0FDSEVfSCAqLwo=
</data>
<flag name="review"
          id="53526"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65135</attachid>
            <date>2010-08-23 09:57:13 -0700</date>
            <delta_ts>2010-08-30 03:36:24 -0700</delta_ts>
            <desc>SoupURILoader stuff as part of webkitgtk+ core network</desc>
            <filename>0001-Imported-SoupURILoader-stuff-into-webkitgtk.patch</filename>
            <type>text/plain</type>
            <size>268390</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">RnJvbSAxZjZkOTJjOGI3MDkzZjU2YjlmOWQwNTc1MTEwYjI1ODY1Njg0ZDBkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTZXJnaW8gVmlsbGFyIFNlbmluIDxzdmlsbGFyQGlnYWxpYS5j
b20+CkRhdGU6IE1vbiwgMjMgQXVnIDIwMTAgMTg6NTE6MTkgKzAyMDAKU3ViamVjdDogW1BBVENI
IDEvM10gSW1wb3J0ZWQgU291cFVSSUxvYWRlciBzdHVmZiBpbnRvIHdlYmtpdGd0aysKIEFwcGxp
ZWQgV2ViS2l0IHN0eWxlcwoKLS0tCiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgMTggKwogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
dHBsLmMgICAgICAgICAgICAgICAgfCAyNDc4ICsrKysrKysrKysrKysrKysrKysrCiBXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC90cGwuaCAgICAgICAgICAgICAgICB8ICAxMzMgKysKIC4u
Li9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvd2Via2l0c291cGNhY2hlY29yZS5jcHAgIHwgMTUxNiAr
KysrKysrKysrKysKIC4uLi9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvd2Via2l0c291cGNhY2hlY29y
ZS5oICAgIHwgICA5OSArCiAuLi4vc291cC93ZWJraXRzb3VwZGlyZWN0b3J5aW5wdXRzdHJlYW0u
Y3BwICAgICAgICB8ICAxODcgKysKIC4uLi9uZXR3b3JrL3NvdXAvd2Via2l0c291cGRpcmVjdG9y
eWlucHV0c3RyZWFtLmggIHwgICA2NCArCiAuLi4vbmV0d29yay9zb3VwL3dlYmtpdHNvdXBodHRw
aW5wdXRzdHJlYW0uY3BwICAgICB8ICA4MDcgKysrKysrKwogLi4uL25ldHdvcmsvc291cC93ZWJr
aXRzb3VwaHR0cGlucHV0c3RyZWFtLmggICAgICAgfCAgIDcyICsKIC4uLi9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvd2Via2l0c291cHJlcXVlc3QuY3BwICAgIHwgIDI0NiArKwogV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvd2Via2l0c291cHJlcXVlc3QuaCAgfCAgIDk1ICsKIC4uLi9uZXR3
b3JrL3NvdXAvd2Via2l0c291cHJlcXVlc3RkYXRhLmNwcCAgICAgICAgIHwgIDE5NCArKwogLi4u
L3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJraXRzb3VwcmVxdWVzdGRhdGEuaCAgfCAgIDUyICsK
IC4uLi9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvd2Via2l0c291cHJlcXVlc3Rlci5jcHAgIHwgIDEz
OCArKwogLi4uL3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJraXRzb3VwcmVxdWVzdGVyLmggICAg
fCAgIDU2ICsKIC4uLi9uZXR3b3JrL3NvdXAvd2Via2l0c291cHJlcXVlc3RmaWxlLmNwcCAgICAg
ICAgIHwgIDI4NSArKysKIC4uLi9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvd2Via2l0c291cHJlcXVl
c3RmaWxlLmggIHwgICA1NCArCiAuLi4vbmV0d29yay9zb3VwL3dlYmtpdHNvdXByZXF1ZXN0aHR0
cC5jcHAgICAgICAgICB8ICAzMTQgKysrCiAuLi4vcGxhdGZvcm0vbmV0d29yay9zb3VwL3dlYmtp
dHNvdXByZXF1ZXN0aHR0cC5oICB8ICAgNTQgKwogMTkgZmlsZXMgY2hhbmdlZCwgNjg2MiBpbnNl
cnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL3RwbC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvdHBsLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC93ZWJraXRzb3VwY2FjaGVjb3JlLmNwcAogY3JlYXRlIG1vZGUgMTAw
NjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL3dlYmtpdHNvdXBjYWNoZWNvcmUuaAog
Y3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL3dlYmtpdHNv
dXBkaXJlY3RvcnlpbnB1dHN0cmVhbS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC93ZWJraXRzb3VwZGlyZWN0b3J5aW5wdXRzdHJlYW0uaAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL3dlYmtpdHNvdXBo
dHRwaW5wdXRzdHJlYW0uY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvd2Via2l0c291cGh0dHBpbnB1dHN0cmVhbS5oCiBjcmVhdGUgbW9kZSAxMDA2
NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvd2Via2l0c291cHJlcXVlc3QuY3BwCiBj
cmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvd2Via2l0c291
cHJlcXVlc3QuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL3dlYmtpdHNvdXByZXF1ZXN0ZGF0YS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJraXRzb3VwcmVxdWVzdGRhdGEuaAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL3dlYmtpdHNvdXByZXF1ZXN0
ZXIuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
d2Via2l0c291cHJlcXVlc3Rlci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvd2Via2l0c291cHJlcXVlc3RmaWxlLmNwcAogY3JlYXRlIG1vZGUgMTAw
NjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL3dlYmtpdHNvdXByZXF1ZXN0ZmlsZS5o
CiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvd2Via2l0
c291cHJlcXVlc3RodHRwLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL3dlYmtpdHNvdXByZXF1ZXN0aHR0cC5oCgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggZjFlYzQ0NS4u
YmNlNjEyMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCkBAIC0yNTU0LDYgKzI1NTQsMjQgQEAgd2ViY29yZWd0a19zb3VyY2Vz
ICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3Vw
LmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXNwb25zZS5o
IFwKIAlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlU291cC5j
cHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL3RwbC5jIFwKKwlXZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC90cGwuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvd2Via2l0c291cGNhY2hlY29yZS5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL3dlYmtpdHNvdXBkaXJlY3RvcnlpbnB1dHN0cmVhbS5jcHAgXAorCVdlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL3dlYmtpdHNvdXBodHRwaW5wdXRzdHJlYW0uY3BwIFwKKwlXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJraXRzb3VwcmVxdWVzdC5jcHAgXAorCVdlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL3dlYmtpdHNvdXByZXF1ZXN0ZGF0YS5jcHAgXAorCVdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL3dlYmtpdHNvdXByZXF1ZXN0ZXIuY3BwIFwKKwlXZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJraXRzb3VwcmVxdWVzdGZpbGUuY3BwIFwKKwlX
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJraXRzb3VwcmVxdWVzdGh0dHAuY3BwIFwK
KwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJraXRzb3VwY2FjaGVjb3JlLmggXAor
CVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL3dlYmtpdHNvdXBkaXJlY3RvcnlpbnB1dHN0
cmVhbS5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJraXRzb3VwaHR0cGlu
cHV0c3RyZWFtLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL3dlYmtpdHNvdXBy
ZXF1ZXN0LmggXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL3dlYmtpdHNvdXByZXF1
ZXN0ZGF0YS5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJraXRzb3VwcmVx
dWVzdGVyLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL3dlYmtpdHNvdXByZXF1
ZXN0ZmlsZS5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJraXRzb3VwcmVx
dWVzdGh0dHAuaCBcCiAJV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhR3RrLmNwcCBcCiAJ
V2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcCBcCiAJV2ViQ29yZS9wbHVn
aW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC90cGwuYyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL3RwbC5j
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NGY2YmMKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC90cGwuYwpAQCAtMCwwICsxLDI0
NzggQEAKKy8qCitDb3B5cmlnaHQgKGMpIDIwMDUtMjAxMCwgVHJveSBELiBIYW5zb24gICAgIGh0
dHA6Ly90cGwuc291cmNlZm9yZ2UubmV0CitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCitUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTICJBUworSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVECitUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEKK1BBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUgorT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCitFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCitQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKK1BST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKK0xJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HCitORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2RlZmluZSBUUExfVkVSU0lPTiAxLjUKKworc3Rh
dGljIGNvbnN0IGNoYXIgaWRbXT0iJElkOiB0cGwuYyAxOTIgMjAwOS0wNC0yNCAxMDozNTozMFog
dGhhbnNvbiAkIjsKKworCisjaW5jbHVkZSA8c3RkbGliLmg+ICAvKiBtYWxsb2MgKi8KKyNpbmNs
dWRlIDxzdGRhcmcuaD4gIC8qIHZhX2xpc3QgKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4gIC8qIG1l
bWNweSwgbWVtc2V0LCBzdHJjaHIgKi8KKyNpbmNsdWRlIDxzdGRpby5oPiAgIC8qIHByaW50ZiAo
dHBsX2hvb2sub29wcyBkZWZhdWx0IGZ1bmN0aW9uKSAqLworCisjaWZuZGVmIF9XSU4zMgorI2lu
Y2x1ZGUgPHVuaXN0ZC5oPiAgICAgLyogZm9yIGZ0cnVuY2F0ZSAqLworI2Vsc2UKKyNpbmNsdWRl
IDxpby5oPgorI2RlZmluZSBmdHJ1bmNhdGUoeCx5KSBfY2hzaXplKHgseSkKKyNlbmRpZgorI2lu
Y2x1ZGUgPHN5cy90eXBlcy5oPiAgLyogZm9yICdvcGVuJyAqLworI2luY2x1ZGUgPHN5cy9zdGF0
Lmg+ICAgLyogZm9yICdvcGVuJyAqLworI2luY2x1ZGUgPGZjbnRsLmg+ICAgICAgLyogZm9yICdv
cGVuJyAqLworI2luY2x1ZGUgPGVycm5vLmg+CisjaWZuZGVmIF9XSU4zMgorI2luY2x1ZGUgPGlu
dHR5cGVzLmg+ICAgLyogdWludDMyX3QsIHVpbnQ2NF90LCBldGMgKi8KKyNlbHNlCit0eXBlZGVm
IHVuc2lnbmVkIHNob3J0IHVzaG9ydDsKK3R5cGVkZWYgX19pbnQxNiBpbnQxNl90OwordHlwZWRl
ZiBfX2ludDMyIGludDMyX3Q7Cit0eXBlZGVmIF9faW50NjQgaW50NjRfdDsKK3R5cGVkZWYgdW5z
aWduZWQgX19pbnQxNiB1aW50MTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgX19pbnQzMiB1aW50MzJf
dDsKK3R5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCB1aW50NjRfdDsKKyNlbmRpZgorCisKKyNpZiAo
IGRlZmluZWQgX19DWUdXSU5fXyB8fCBkZWZpbmVkIF9fTUlOR1czMl9fIHx8IGRlZmluZWQgX1dJ
TjMyICkKKyNpbmNsdWRlICJ3aW4vbW1hbi5oIiAgIC8qIG1tYXAgKi8KKyNlbHNlCisjaW5jbHVk
ZSA8c3lzL21tYW4uaD4gICAvKiBtbWFwICovCisjZW5kaWYKKworI2luY2x1ZGUgInRwbC5oIgor
CisjZGVmaW5lIFRQTF9HQVRIRVJfQlVGTEVOIDgxOTIKKyNkZWZpbmUgVFBMX01BR0lDICJ0cGwi
CisKKy8qIG1hY3JvIHRvIGFkZCBhIHN0cnVjdHVyZSB0byBhIGRvdWJseS1saW5rZWQgbGlzdCAq
LworI2RlZmluZSBETF9BREQoaGVhZCxhZGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChoZWFkKSB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgKGFkZCktPnByZXYg
PSAoaGVhZCktPnByZXY7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICho
ZWFkKS0+cHJldi0+bmV4dCA9IChhZGQpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgICAgICAoaGVhZCktPnByZXYgPSAoYWRkKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICAgICAgKGFkZCktPm5leHQgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAoaGVhZCk9KGFkZCk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgKGhlYWQpLT5w
cmV2ID0gKGhlYWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
IChoZWFkKS0+bmV4dCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIH0gd2hpbGUgKDApOworCisjZGVmaW5lIGZhdGFsX29vbSgpIHRwbF9ob29r
LmZhdGFsKCJvdXQgb2YgbWVtb3J5XG4iKQorCisvKiBiaXQgZmxhZ3MgKGludGVybmFsKS4gcHJl
Y2VkZWQgYnkgdGhlIGV4dGVybmFsIGZsYWdzIGluIHRwbC5oICovCisjZGVmaW5lIFRQTF9XUk9O
TFkgICAgICAgICAoMSA8PCA5KSAgLyogYXBwIGhhcyBpbml0aWF0ZWQgdHBsIHBhY2tpbmcgICov
CisjZGVmaW5lIFRQTF9SRE9OTFkgICAgICAgICAoMSA8PCAxMCkgIC8qIHRwbCB3YXMgbG9hZGVk
IChmb3IgdW5wYWNraW5nKSAqLworI2RlZmluZSBUUExfWEVORElBTiAgICAgICAgKDEgPDwgMTEp
ICAvKiBzd2FwIGVuZGlhbm5lc3Mgd2hlbiB1bnBhY2tpbmcgKi8KKyNkZWZpbmUgVFBMX09MRF9T
VFJJTkdfRk1UICgxIDw8IDEyKSAvKiB0cGwgaGFzIHN0cmluZ3MgaW4gMS4yIGZvcm1hdCAqLwor
CisvKiB2YWx1ZXMgZm9yIHRoZSBmbGFncyBieXRlIHRoYXQgYXBwZWFycyBhZnRlciB0aGUgbWFn
aWMgcHJlZml4ICovCisjZGVmaW5lIFRQTF9TVVBQT1JURURfQklURkxBR1MgMworI2RlZmluZSBU
UExfRkxfQklHRU5ESUFOICAgKDEgPDwgMCkKKyNkZWZpbmUgVFBMX0ZMX05VTExTVFJJTkdTICgx
IDw8IDEpCisKKy8qIGNoYXIgdmFsdWVzIGZvciBub2RlIHR5cGUgKi8KKyNkZWZpbmUgVFBMX1RZ
UEVfUk9PVCAgIDAKKyNkZWZpbmUgVFBMX1RZUEVfSU5UMzIgIDEKKyNkZWZpbmUgVFBMX1RZUEVf
VUlOVDMyIDIKKyNkZWZpbmUgVFBMX1RZUEVfQllURSAgIDMKKyNkZWZpbmUgVFBMX1RZUEVfU1RS
ICAgIDQKKyNkZWZpbmUgVFBMX1RZUEVfQVJZICAgIDUKKyNkZWZpbmUgVFBMX1RZUEVfQklOICAg
IDYKKyNkZWZpbmUgVFBMX1RZUEVfRE9VQkxFIDcKKyNkZWZpbmUgVFBMX1RZUEVfSU5UNjQgIDgK
KyNkZWZpbmUgVFBMX1RZUEVfVUlOVDY0IDkKKyNkZWZpbmUgVFBMX1RZUEVfSU5UMTYgIDEwCisj
ZGVmaW5lIFRQTF9UWVBFX1VJTlQxNiAxMQorI2RlZmluZSBUUExfVFlQRV9QT1VORCAgMTIKKwor
LyogZXJyb3IgY29kZXMgKi8KKyNkZWZpbmUgRVJSX05PVF9NSU5TSVpFICAgICAgICAoLTEpCisj
ZGVmaW5lIEVSUl9NQUdJQ19NSVNNQVRDSCAgICAgKC0yKQorI2RlZmluZSBFUlJfSU5DT05TSVNU
RU5UX1NaICAgICgtMykKKyNkZWZpbmUgRVJSX0ZNVF9JTlZBTElEICAgICAgICAoLTQpCisjZGVm
aW5lIEVSUl9GTVRfTUlTU0lOR19OVUwgICAgKC01KQorI2RlZmluZSBFUlJfRk1UX01JU01BVENI
ICAgICAgICgtNikKKyNkZWZpbmUgRVJSX0ZMRU5fTUlTTUFUQ0ggICAgICAoLTcpCisjZGVmaW5l
IEVSUl9JTkNPTlNJU1RFTlRfU1oyICAgKC04KQorI2RlZmluZSBFUlJfSU5DT05TSVNURU5UX1Na
MyAgICgtOSkKKyNkZWZpbmUgRVJSX0lOQ09OU0lTVEVOVF9TWjQgICAoLTEwKQorI2RlZmluZSBF
UlJfVU5TVVBQT1JURURfRkxBR1MgICgtMTEpCisKKy8qIGFjY2VzcyB0byBBKC4uLikgbm9kZXMg
YnkgaW5kZXggKi8KK3R5cGVkZWYgc3RydWN0IHRwbF9waWR4IHsKKyAgICBzdHJ1Y3QgdHBsX25v
ZGUgKm5vZGU7CisgICAgc3RydWN0IHRwbF9waWR4ICpuZXh0LCpwcmV2OworfSB0cGxfcGlkeDsK
KworLyogQSguLi4pIG5vZGUgZGF0dW0gKi8KK3R5cGVkZWYgc3RydWN0IHRwbF9hdHlwIHsKKyAg
ICB1aW50MzJfdCBudW07ICAgIC8qIG51bSBlbGVtZW50cyAqLworICAgIHNpemVfdCBzejsgICAg
ICAgLyogc2l6ZSBvZiBlYWNoIGJhY2tib25lJ3MgZGF0dW0gKi8KKyAgICBzdHJ1Y3QgdHBsX2Jh
Y2tib25lICpiYiwqYmJ0YWlsOyAKKyAgICB2b2lkICpjdXI7ICAgICAgICAgICAgICAgICAgICAg
ICAKK30gdHBsX2F0eXA7CisKKy8qIGJhY2tib25lIHRvIGV4dGVuZCBBKC4uLikgbGlzdHMgZHlu
YW1pY2FsbHkgKi8KK3R5cGVkZWYgc3RydWN0IHRwbF9iYWNrYm9uZSB7CisgICAgc3RydWN0IHRw
bF9iYWNrYm9uZSAqbmV4dDsKKyAgICAvKiB3aGVuIHRoaXMgc3RydWN0dXJlIGlzIG1hbGxvYydk
LCBleHRyYSBzcGFjZSBpcyBhbGxvYydkIGF0IHRoZQorICAgICAqIGVuZCB0byBzdG9yZSB0aGUg
YmFja2JvbmUgImRhdHVtIiwgYW5kIGRhdGEgcG9pbnRzIHRvIGl0LiAqLworI2lmZGVmIF9fU1RE
Q19WRVJTSU9OX18KKyNpZiBfX1NURENfVkVSU0lPTl9fIDwgMTk5OTAxCisgICAgY2hhciAqZGF0
YTsgIAorI2Vsc2UKKyAgICBjaGFyIGRhdGFbXTsKKyNlbmRpZgorI2Vsc2UKKyAgICBjaGFyIGRh
dGFbXTsKKyNlbmRpZgorfSB0cGxfYmFja2JvbmU7CisKKy8qIG1tYXAgcmVjb3JkICovCit0eXBl
ZGVmIHN0cnVjdCB0cGxfbW1hcF9yZWMgeworICAgIGludCBmZDsKKyAgICB2b2lkICp0ZXh0Owor
ICAgIHNpemVfdCB0ZXh0X3N6OworfSB0cGxfbW1hcF9yZWM7CisKKy8qIHJvb3Qgbm9kZSBkYXR1
bSAqLwordHlwZWRlZiBzdHJ1Y3QgdHBsX3Jvb3RfZGF0YSB7CisgICAgaW50IGZsYWdzOworICAg
IHRwbF9waWR4ICpwaWR4OworICAgIHRwbF9tbWFwX3JlYyBtbWFwOworICAgIGNoYXIgKmZtdDsK
KyAgICBpbnQgKmZ4bGVucywgbnVtX2Z4bGVuczsKK30gdHBsX3Jvb3RfZGF0YTsKKworLyogbm9k
ZSB0eXBlIHRvIHNpemUgbWFwcGluZyAqLworc3RydWN0IHRwbF90eXBlX3QgeworICAgIGNoYXIg
YzsKKyAgICBpbnQgc3o7Cit9OworCisKKy8qIEludGVybmFsIHByb3RvdHlwZXMgKi8KK3N0YXRp
YyB0cGxfbm9kZSAqdHBsX25vZGVfbmV3KHRwbF9ub2RlICpwYXJlbnQpOworc3RhdGljIHRwbF9u
b2RlICp0cGxfZmluZF9pKHRwbF9ub2RlICpuLCBpbnQgaSk7CitzdGF0aWMgdm9pZCAqdHBsX2Nw
dih2b2lkICpkYXRhdiwgdm9pZCAqZGF0YSwgc2l6ZV90IHN6KTsKK3N0YXRpYyB2b2lkICp0cGxf
ZXh0ZW5kX2JhY2tib25lKHRwbF9ub2RlICpuKTsKK3N0YXRpYyBjaGFyICp0cGxfZm10KHRwbF9u
b2RlICpyKTsKK3N0YXRpYyB2b2lkICp0cGxfZHVtcF9hdHlwKHRwbF9ub2RlICpuLCB0cGxfYXR5
cCogYXQsIHZvaWQgKmR2KTsKK3N0YXRpYyBzaXplX3QgdHBsX3Nlcl9vc3oodHBsX25vZGUgKm4p
Oworc3RhdGljIHZvaWQgdHBsX2ZyZWVfYXR5cCh0cGxfbm9kZSAqbix0cGxfYXR5cCAqYXR5cCk7
CitzdGF0aWMgaW50IHRwbF9kdW1wX3RvX21lbSh0cGxfbm9kZSAqciwgdm9pZCAqYWRkciwgc2l6
ZV90IHN6KTsKK3N0YXRpYyBpbnQgdHBsX21tYXBfZmlsZShjaGFyICpmaWxlbmFtZSwgdHBsX21t
YXBfcmVjICptYXBfcmVjKTsKK3N0YXRpYyBpbnQgdHBsX21tYXBfb3V0cHV0X2ZpbGUoY2hhciAq
ZmlsZW5hbWUsIHNpemVfdCBzeiwgdm9pZCAqKnRleHRfb3V0KTsKK3N0YXRpYyBpbnQgdHBsX2Nw
dV9iaWdlbmRpYW4odm9pZCk7CitzdGF0aWMgaW50IHRwbF9uZWVkc19lbmRpYW5fc3dhcCh2b2lk
ICopOworc3RhdGljIHZvaWQgdHBsX2J5dGVzd2FwKHZvaWQgKndvcmQsIGludCBsZW4pOworc3Rh
dGljIHZvaWQgdHBsX2ZhdGFsKGNoYXIgKmZtdCwgLi4uKTsKK3N0YXRpYyBpbnQgdHBsX3Nlcmxl
bih0cGxfbm9kZSAqciwgdHBsX25vZGUgKm4sIHZvaWQgKmR2LCBzaXplX3QgKnNlcmxlbik7Citz
dGF0aWMgaW50IHRwbF91bnBhY2tBMCh0cGxfbm9kZSAqcik7CitzdGF0aWMgaW50IHRwbF9vb3Bz
KGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK3N0YXRpYyBpbnQgdHBsX2dhdGhlcl9tZW0oIGNoYXIg
KmJ1Ziwgc2l6ZV90IGxlbiwgdHBsX2dhdGhlcl90ICoqZ3MsIHRwbF9nYXRoZXJfY2IgKmNiLCB2
b2lkICpkYXRhKTsKK3N0YXRpYyBpbnQgdHBsX2dhdGhlcl9ub25ibG9ja2luZyggaW50IGZkLCB0
cGxfZ2F0aGVyX3QgKipncywgdHBsX2dhdGhlcl9jYiAqY2IsIHZvaWQgKmRhdGEpOworc3RhdGlj
IGludCB0cGxfZ2F0aGVyX2Jsb2NraW5nKGludCBmZCwgdm9pZCAqKmltZywgc2l6ZV90ICpzeik7
CitzdGF0aWMgdHBsX25vZGUgKnRwbF9tYXBfdmEoY2hhciAqZm10LCB2YV9saXN0IGFwKTsKKwor
LyogVGhpcyBpcyB1c2VkIGludGVybmFsbHkgdG8gaGVscCBjYWxjdWxhdGUgcGFkZGluZyB3aGVu
IGEgJ2RvdWJsZScgCisgKiBmb2xsb3dzIGEgc21hbGxlciBkYXRhdHlwZSBpbiBhIHN0cnVjdHVy
ZS4gTm9ybWFsbHkgdW5kZXIgZ2NjCisgKiBvbiB4ODYsIGQgd2lsbCBiZSBhbGlnbmVkIGF0ICs0
LCBob3dldmVyIHVzZSBvZiAtbWFsaWduLWRvdWJsZQorICogY2F1c2VzIGQgdG8gYmUgYWxpZ25l
ZCBhdCArOCAodGhpcyBpcyBhY3R1YWxseSBmYXN0ZXIgb24geDg2KS4KKyAqIEFsc28gU1BBUkMg
YW5kIHg4Nl82NCBzZWVtIHRvIGFsaWduIGFsd2F5cyBvbiArOC4gCisgKi8KK3N0cnVjdCB0cGxf
ZG91YmxlX2FsaWdubWVudF9kZXRlY3RvciB7CisgICAgY2hhciBhOworICAgIGRvdWJsZSBkOyAg
Lyogc29tZSBwbGF0Zm9ybXMgYWxpZ24gdGhpcyBvbiArNCwgb3RoZXJzIG9uICs4ICovCit9Owor
CisvKiB0aGlzIGlzIGFub3RoZXIgY2FzZSB3aGVyZSBhbGlnbm1lbnQgdmFyaWVzLiBtYWMgb3Mg
eC9nY2Mgd2FzIG9ic2VydmVkCisgKiB0byBhbGlnbiB0aGUgaW50NjRfdCBhdCArNCB1bmRlciAt
bTMyIGFuZCBhdCArOCB1bmRlciAtbTY0ICovCitzdHJ1Y3QgdHBsX2ludDY0X2FsaWdubWVudF9k
ZXRlY3RvciB7CisgICAgaW50IGk7CisgICAgaW50NjRfdCBqOyAgLyogc29tZSBwbGF0Zm9ybXMg
YWxpZ24gdGhpcyBvbiArNCwgb3RoZXJzIG9uICs4ICovCit9OworCit0eXBlZGVmIHN0cnVjdCB7
CisgIHNpemVfdCBpbnRlcl9lbHRfbGVuOyAvKiBwYWRkZWQgaW50ZXItZWxlbWVudCBsZW47IGku
ZS4gJmFbMV0uZmllbGQgLSAmYVswXS5maWVsZCAqLworICB0cGxfbm9kZSAqaXRlcl9zdGFydF9u
b2RlOyAvKiBub2RlIHRvIGp1bXAgYmFjayB0bywgYXMgd2Ugc3RhcnQgZWFjaCBuZXcgaXRlcmF0
aW9uICovCisgIHNpemVfdCBpdGVybnVtOyAvKiBjdXJyZW50IGl0ZXJhdGlvbiBudW1iZXIgKHRv
dGFsIHJlcSdkLiBpdGVyJ3MgaW4gbi0+bnVtKSAqLworfSB0cGxfcG91bmRfZGF0YTsKKworLyog
SG9va3MgZm9yIGN1c3RvbWl6aW5nIHRwbCBtZW0gYWxsb2MsIGVycm9yIGhhbmRsaW5nLCBldGMu
IFNldCBkZWZhdWx0cy4gKi8KK3RwbF9ob29rX3QgdHBsX2hvb2sgPSB7CisgICAgLyogLm9vcHMg
PSAgICAgICAqLyB0cGxfb29wcywKKyAgICAvKiAubWFsbG9jID0gICAgICovIG1hbGxvYywKKyAg
ICAvKiAucmVhbGxvYyA9ICAgICovIHJlYWxsb2MsCisgICAgLyogLmZyZWUgPSAgICAgICAqLyBm
cmVlLAorICAgIC8qIC5mYXRhbCA9ICAgICAgKi8gdHBsX2ZhdGFsLAorICAgIC8qIC5nYXRoZXJf
bWF4ID0gKi8gMCAvKiBtYXggdHBsIHNpemUgKGJ5dGVzKSBmb3IgdHBsX2dhdGhlciAqLworfTsK
Kworc3RhdGljIGNvbnN0IGNoYXIgdHBsX2ZtdF9jaGFyc1tdID0gIkFTKCQpQml1Y3NmSVVqdiMi
OyAvKiB2YWxpZCBmb3JtYXQgY2hhcnMgKi8KK3N0YXRpYyBjb25zdCBjaGFyIHRwbF9TX2ZtdF9j
aGFyc1tdID0gIml1Y3NmSVVqdiMkKCkiOyAvKiB2YWxpZCB3aXRoaW4gUyguLi4pICovCitzdGF0
aWMgY29uc3QgY2hhciB0cGxfZGF0YXBlZWtfb2tfY2hhcnNbXSA9ICJpdWNzZklVanYiOyAvKiB2
YWxpZCBpbiBkYXRhcGVlayAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB0cGxfdHlwZV90IHRwbF90
eXBlc1tdID0geworICAgIC8qIFtUUExfVFlQRV9ST09UXSA9ICAgKi8gIHsncicsIDB9LAorICAg
IC8qIFtUUExfVFlQRV9JTlQzMl0gPSAgKi8gIHsnaScsIHNpemVvZihpbnQzMl90KX0sCisgICAg
LyogW1RQTF9UWVBFX1VJTlQzMl0gPSAqLyAgeyd1Jywgc2l6ZW9mKHVpbnQzMl90KX0sCisgICAg
LyogW1RQTF9UWVBFX0JZVEVdID0gICAqLyAgeydjJywgc2l6ZW9mKGNoYXIpfSwKKyAgICAvKiBb
VFBMX1RZUEVfU1RSXSA9ICAgICovICB7J3MnLCBzaXplb2YoY2hhciopfSwKKyAgICAvKiBbVFBM
X1RZUEVfQVJZXSA9ICAgICovICB7J0EnLCAwfSwKKyAgICAvKiBbVFBMX1RZUEVfQklOXSA9ICAg
ICovICB7J0InLCAwfSwKKyAgICAvKiBbVFBMX1RZUEVfRE9VQkxFXSA9ICovICB7J2YnLCA4fSwg
Lyogbm90IHNpemVvZihkb3VibGUpIGFzIHRoYXQgdmFyaWVzICovCisgICAgLyogW1RQTF9UWVBF
X0lOVDY0XSA9ICAqLyAgeydJJywgc2l6ZW9mKGludDY0X3QpfSwKKyAgICAvKiBbVFBMX1RZUEVf
VUlOVDY0XSA9ICovICB7J1UnLCBzaXplb2YodWludDY0X3QpfSwKKyAgICAvKiBbVFBMX1RZUEVf
SU5UMTZdID0gICovICB7J2onLCBzaXplb2YoaW50MTZfdCl9LAorICAgIC8qIFtUUExfVFlQRV9V
SU5UMTZdID0gKi8gIHsndicsIHNpemVvZih1aW50MTZfdCl9LAorICAgIC8qIFtUUExfVFlQRV9Q
T1VORF0gPSAgKi8gIHsnIycsIDB9LAorfTsKKworLyogZGVmYXVsdCBlcnJvci1yZXBvcnRpbmcg
ZnVuY3Rpb24uIEp1c3Qgd3JpdGVzIHRvIHN0ZGVyci4gKi8KK3N0YXRpYyBpbnQgdHBsX29vcHMo
Y29uc3QgY2hhciAqZm10LCAuLi4pIHsKKyAgICB2YV9saXN0IGFwOworICAgIHZhX3N0YXJ0KGFw
LGZtdCk7CisgICAgdmZwcmludGYoc3RkZXJyLGZtdCxhcCk7CisgICAgdmFfZW5kKGFwKTsKKyAg
ICByZXR1cm4gMDsKK30KKworCitzdGF0aWMgdHBsX25vZGUgKnRwbF9ub2RlX25ldyh0cGxfbm9k
ZSAqcGFyZW50KSB7CisgICAgdHBsX25vZGUgKm47CisgICAgaWYgKChuPXRwbF9ob29rLm1hbGxv
YyhzaXplb2YodHBsX25vZGUpKSkgPT0gTlVMTCkgeworICAgICAgICBmYXRhbF9vb20oKTsKKyAg
ICB9CisgICAgbi0+YWRkcj1OVUxMOworICAgIG4tPmRhdGE9TlVMTDsKKyAgICBuLT5udW09MTsK
KyAgICBuLT5zZXJfb3N6PTA7CisgICAgbi0+Y2hpbGRyZW49TlVMTDsKKyAgICBuLT5uZXh0PU5V
TEw7CisgICAgbi0+cGFyZW50PXBhcmVudDsKKyAgICByZXR1cm4gbjsKK30KKworLyogVXNlZCBp
biBTKC4uKSBmb3JtYXRzIHRvIHBhY2sgc2V2ZXJhbCBmaWVsZHMgZnJvbSBhIHN0cnVjdHVyZSBi
YXNlZCBvbiAKKyAqIG9ubHkgdGhlIHN0cnVjdHVyZSBhZGRyZXNzLiBXZSBuZWVkIHRvIGNhbGN1
bGF0ZSBmaWVsZCBhZGRyZXNzZXMgCisgKiBtYW51YWxseSB0YWtpbmcgaW50byBhY2NvdW50IHRo
ZSBzaXplIG9mIHRoZSBmaWVsZHMgYW5kIGludGVydmVuaW5nIHBhZGRpbmcuCisgKiBUaGUgd3Jp
bmtsZSBpcyB0aGF0IGRvdWJsZSBpcyBub3Qgbm9ybWFsbHkgYWxpZ25lZCBvbiB4ODYtMzIgYnV0
IHRoZQorICogLW1hbGlnbi1kb3VibGUgY29tcGlsZXIgb3B0aW9uIGNhdXNlcyBpdCB0byBiZS4g
RG91YmxlIGFyZSBhbGlnbmVkCisgKiBvbiBTcGFyYywgYW5kIGFwcGFyZW50bHkgb24gNjQgYml0
IHg4Ni4gV2UgdXNlIGEgaGVscGVyIHN0cnVjdHVyZSAKKyAqIHRvIGRldGVjdCB3aGV0aGVyIGRv
dWJsZSBpcyBhbGlnbmVkIGluIHRoaXMgY29tcGlsYXRpb24gZW52aXJvbm1lbnQuCisgKi8KK2No
YXIgKmNhbGNfZmllbGRfYWRkcih0cGxfbm9kZSAqcGFyZW50LCBpbnQgdHlwZSxjaGFyICpzdHJ1
Y3RfYWRkciwgaW50IG9yZGluYWwpIHsKKyAgICB0cGxfbm9kZSAqcHJldjsKKyAgICBpbnQgb2Zm
c2V0OworICAgIGludCBhbGlnbl9zejsKKworICAgIGlmIChvcmRpbmFsID09IDEpIHJldHVybiBz
dHJ1Y3RfYWRkcjsgIC8qIGZpcnN0IGZpZWxkIHN0YXJ0cyBvbiBzdHJ1Y3R1cmUgYWRkcmVzcyAq
LworCisgICAgLyogZ2VuZXJhdGUgZW5vdWdoIHBhZGRpbmcgc28gZmllbGQgYWRkciBpcyBkaXZp
c2libGUgYnkgaXQncyBhbGlnbl9zei4gNCwgOCwgZXRjICovCisgICAgcHJldiA9IHBhcmVudC0+
Y2hpbGRyZW4tPnByZXY7IAorICAgIHN3aXRjaCh0eXBlKSB7CisgICAgICBjYXNlIFRQTF9UWVBF
X0RPVUJMRToKKyAgICAgICAgYWxpZ25fc3ogPSBzaXplb2Yoc3RydWN0IHRwbF9kb3VibGVfYWxp
Z25tZW50X2RldGVjdG9yKSA+IDEyID8gOCA6IDQ7IAorICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgVFBMX1RZUEVfSU5UNjQ6CisgICAgICBjYXNlIFRQTF9UWVBFX1VJTlQ2NDoKKyAgICAgICAg
YWxpZ25fc3ogPSBzaXplb2Yoc3RydWN0IHRwbF9pbnQ2NF9hbGlnbm1lbnRfZGV0ZWN0b3IpID4g
MTIgPyA4IDogNDsgCisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYWxp
Z25fc3ogPSB0cGxfdHlwZXNbdHlwZV0uc3o7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBv
ZmZzZXQgPSAoKHVpbnRwdHJfdClwcmV2LT5hZGRyIC0gKHVpbnRwdHJfdClzdHJ1Y3RfYWRkcikK
KyAgICAgICAgICAgICsgKHRwbF90eXBlc1twcmV2LT50eXBlXS5zeiAqIHByZXYtPm51bSk7Cisg
ICAgb2Zmc2V0ID0gKG9mZnNldCArIGFsaWduX3N6IC0gMSkgLyBhbGlnbl9zeiAqIGFsaWduX3N6
OworICAgIHJldHVybiBzdHJ1Y3RfYWRkciArIG9mZnNldDsKK30KKworVFBMX0FQSSB0cGxfbm9k
ZSAqdHBsX21hcChjaGFyICpmbXQsLi4uKSB7CisgIHZhX2xpc3QgYXA7CisgIHRwbF9ub2RlICp0
bjsKKworICB2YV9zdGFydChhcCxmbXQpOworICB0biA9IHRwbF9tYXBfdmEoZm10LCBhcCk7Cisg
IHZhX2VuZChhcCk7CisgIHJldHVybiB0bjsKK30KKworc3RhdGljIHRwbF9ub2RlICp0cGxfbWFw
X3ZhKGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkgeworICAgIGludCBscGFyZW5fbGV2ZWw9MCxleHBl
Y3RfbHBhcmVuPTAsdD0wLGluX3N0cnVjdHVyZT0wLG9yZGluYWw9MDsKKyAgICBpbnQgaW5fbmVz
dGVkX3N0cnVjdHVyZT0wOworICAgIGNoYXIgKmMsICpwZWVrLCAqc3RydWN0X2FkZHI9TlVMTCwg
KnN0cnVjdF9uZXh0OworICAgIHRwbF9ub2RlICpyb290LCpwYXJlbnQsKm49TlVMTCwqcHJlY2Vk
aW5nLCppdGVyX3N0YXJ0X25vZGU9TlVMTCwKKyAgICAgICAgICAgICAqc3RydWN0X3dpZGVzdF9u
b2RlPU5VTEwsICpucDsgdHBsX3BpZHggKnBpZHg7CisgICAgdHBsX3BvdW5kX2RhdGEgKnBkOwor
ICAgIGludCAqZnhsZW5zLCBudW1fZnhsZW5zLCBwb3VuZF9udW0sIHBvdW5kX3Byb2QsIGFwcGxp
ZXNfdG9fc3RydWN0OworICAgIGludCBjb250aWdfZnhsZW5zWzEwXTsgLyogdGVtcCBzcGFjZSBm
b3IgY29udGlndW91cyBmeGxlbnMgKi8KKyAgICBpbnQgbnVtX2NvbnRpZ19meGxlbnMsIGksIGo7
CisgICAgcHRyZGlmZl90IGludGVyX2VsdF9sZW49MDsgLyogcGFkZGVkIGVsZW1lbnQgbGVuZ3Ro
IG9mIGNvbnRpZ3VvdXMgc3RydWN0cyBpbiBhcnJheSAqLworCisKKyAgICByb290ID0gdHBsX25v
ZGVfbmV3KE5VTEwpOworICAgIHJvb3QtPnR5cGUgPSBUUExfVFlQRV9ST09UOyAKKyAgICByb290
LT5kYXRhID0gKHRwbF9yb290X2RhdGEqKXRwbF9ob29rLm1hbGxvYyhzaXplb2YodHBsX3Jvb3Rf
ZGF0YSkpOworICAgIGlmICghcm9vdC0+ZGF0YSkgZmF0YWxfb29tKCk7CisgICAgbWVtc2V0KCh0
cGxfcm9vdF9kYXRhKilyb290LT5kYXRhLDAsc2l6ZW9mKHRwbF9yb290X2RhdGEpKTsKKworICAg
IC8qIHNldCB1cCByb290IG5vZGVzIHNwZWNpYWwgc2VyX29zeiB0byByZWZsZWN0IG92ZXJoZWFk
IG9mIHByZWFtYmxlICovCisgICAgcm9vdC0+c2VyX29zeiA9ICBzaXplb2YodWludDMyX3QpOyAv
KiB0cGwgbGVhZGluZyBsZW5ndGggKi8KKyAgICByb290LT5zZXJfb3N6ICs9IHN0cmxlbihmbXQp
ICsgMTsgIC8qIGZtdCArIE5VTC10ZXJtaW5hdG9yICovCisgICAgcm9vdC0+c2VyX29zeiArPSA0
OyAgICAgICAgICAgICAgICAvKiAndHBsJyBtYWdpYyBwcmVmaXggKyBmbGFncyBieXRlICovCisK
KyAgICBwYXJlbnQ9cm9vdDsKKworICAgIGM9Zm10OworICAgIHdoaWxlICgqYyAhPSAnXDAnKSB7
CisgICAgICAgIHN3aXRjaCAoKmMpIHsKKyAgICAgICAgICAgIGNhc2UgJ2MnOgorICAgICAgICAg
ICAgY2FzZSAnaSc6CisgICAgICAgICAgICBjYXNlICd1JzoKKyAgICAgICAgICAgIGNhc2UgJ2on
OgorICAgICAgICAgICAgY2FzZSAndic6CisgICAgICAgICAgICBjYXNlICdJJzoKKyAgICAgICAg
ICAgIGNhc2UgJ1UnOgorICAgICAgICAgICAgY2FzZSAnZic6CisgICAgICAgICAgICAgICAgaWYg
ICAgICAoKmM9PSdjJykgdD1UUExfVFlQRV9CWVRFOworICAgICAgICAgICAgICAgIGVsc2UgaWYg
KCpjPT0naScpIHQ9VFBMX1RZUEVfSU5UMzI7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoKmM9
PSd1JykgdD1UUExfVFlQRV9VSU5UMzI7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoKmM9PSdq
JykgdD1UUExfVFlQRV9JTlQxNjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICgqYz09J3YnKSB0
PVRQTF9UWVBFX1VJTlQxNjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICgqYz09J0knKSB0PVRQ
TF9UWVBFX0lOVDY0OworICAgICAgICAgICAgICAgIGVsc2UgaWYgKCpjPT0nVScpIHQ9VFBMX1RZ
UEVfVUlOVDY0OworICAgICAgICAgICAgICAgIGVsc2UgaWYgKCpjPT0nZicpIHQ9VFBMX1RZUEVf
RE9VQkxFOworCisgICAgICAgICAgICAgICAgaWYgKGV4cGVjdF9scGFyZW4pIGdvdG8gZmFpbDsK
KyAgICAgICAgICAgICAgICBuID0gdHBsX25vZGVfbmV3KHBhcmVudCk7CisgICAgICAgICAgICAg
ICAgbi0+dHlwZSA9IHQ7CisgICAgICAgICAgICAgICAgaWYgKGluX3N0cnVjdHVyZSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAob3JkaW5hbCA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgLyogZm9yIFMoLi4uKSMgaXRlcmF0aW9uLiBBcHBseSBhbnkgY2hhbmdlcyB0byBjYXNlICdz
JyB0b28hISEgKi8KKyAgICAgICAgICAgICAgICAgICAgICBpdGVyX3N0YXJ0X25vZGUgPSBuOyAK
KyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Rfd2lkZXN0X25vZGUgPSBuOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh0cGxfdHlwZXNbbi0+dHlwZV0u
c3ogPiB0cGxfdHlwZXNbc3RydWN0X3dpZGVzdF9ub2RlLT50eXBlXS5zeikgeworICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdF93aWRlc3Rfbm9kZSA9IG47CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgbi0+YWRkciA9IGNhbGNfZmllbGRfYWRkcihwYXJlbnQs
bi0+dHlwZSxzdHJ1Y3RfYWRkcixvcmRpbmFsKyspOworICAgICAgICAgICAgICAgIH0gZWxzZSBu
LT5hZGRyID0gKHZvaWQqKXZhX2FyZyhhcCx2b2lkKik7CisgICAgICAgICAgICAgICAgbi0+ZGF0
YSA9IHRwbF9ob29rLm1hbGxvYyh0cGxfdHlwZXNbdF0uc3opOworICAgICAgICAgICAgICAgIGlm
ICghbi0+ZGF0YSkgZmF0YWxfb29tKCk7CisgICAgICAgICAgICAgICAgaWYgKG4tPnBhcmVudC0+
dHlwZSA9PSBUUExfVFlQRV9BUlkpIAorICAgICAgICAgICAgICAgICAgICAoKHRwbF9hdHlwKiko
bi0+cGFyZW50LT5kYXRhKSktPnN6ICs9IHRwbF90eXBlc1t0XS5zejsKKyAgICAgICAgICAgICAg
ICBETF9BREQocGFyZW50LT5jaGlsZHJlbixuKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgJ3MnOgorICAgICAgICAgICAgICAgIGlmIChleHBlY3RfbHBhcmVuKSBn
b3RvIGZhaWw7CisgICAgICAgICAgICAgICAgbiA9IHRwbF9ub2RlX25ldyhwYXJlbnQpOworICAg
ICAgICAgICAgICAgIG4tPnR5cGUgPSBUUExfVFlQRV9TVFI7CisgICAgICAgICAgICAgICAgaWYg
KGluX3N0cnVjdHVyZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAob3JkaW5hbCA9PSAxKSB7
CisgICAgICAgICAgICAgICAgICAgICAgaXRlcl9zdGFydF9ub2RlID0gbjsgLyogZm9yIFMoLi4u
KSMgaXRlcmF0aW9uICovCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0X3dpZGVzdF9ub2Rl
ID0gbjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAodHBs
X3R5cGVzW24tPnR5cGVdLnN6ID4gdHBsX3R5cGVzW3N0cnVjdF93aWRlc3Rfbm9kZS0+dHlwZV0u
c3opIHsKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Rfd2lkZXN0X25vZGUgPSBuOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG4tPmFkZHIgPSBjYWxjX2Zp
ZWxkX2FkZHIocGFyZW50LG4tPnR5cGUsc3RydWN0X2FkZHIsb3JkaW5hbCsrKTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2Ugbi0+YWRkciA9ICh2b2lkKil2YV9hcmcoYXAsdm9pZCopOworICAgICAg
ICAgICAgICAgIG4tPmRhdGEgPSB0cGxfaG9vay5tYWxsb2Moc2l6ZW9mKGNoYXIqKSk7CisgICAg
ICAgICAgICAgICAgaWYgKCFuLT5kYXRhKSBmYXRhbF9vb20oKTsKKyAgICAgICAgICAgICAgICAq
KGNoYXIqKikobi0+ZGF0YSkgPSBOVUxMOworICAgICAgICAgICAgICAgIGlmIChuLT5wYXJlbnQt
PnR5cGUgPT0gVFBMX1RZUEVfQVJZKSAKKyAgICAgICAgICAgICAgICAgICAgKCh0cGxfYXR5cCop
KG4tPnBhcmVudC0+ZGF0YSkpLT5zeiArPSBzaXplb2Yodm9pZCopOworICAgICAgICAgICAgICAg
IERMX0FERChwYXJlbnQtPmNoaWxkcmVuLG4pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSAnIyc6CisgICAgICAgICAgICAgICAgLyogYXBwbHkgYSAnbnVtJyB0byBw
cmVjZWRpbmcgYXRvbSAqLworICAgICAgICAgICAgICAgIGlmICghcGFyZW50LT5jaGlsZHJlbikg
Z290byBmYWlsOworICAgICAgICAgICAgICAgIHByZWNlZGluZyA9IHBhcmVudC0+Y2hpbGRyZW4t
PnByZXY7IC8qIGZpcnN0IGNoaWxkJ3MgcHJldiBpcyAnbGFzdCBjaGlsZCcqLworICAgICAgICAg
ICAgICAgIHQgPSBwcmVjZWRpbmctPnR5cGU7CisgICAgICAgICAgICAgICAgYXBwbGllc190b19z
dHJ1Y3QgPSAoKihjLTEpID09ICcpJykgPyAxIDogMDsKKyAgICAgICAgICAgICAgICBpZiAoIWFw
cGxpZXNfdG9fc3RydWN0KSB7CisgICAgICAgICAgICAgICAgICBpZiAoISh0ID09IFRQTF9UWVBF
X0JZVEUgICB8fCB0ID09IFRQTF9UWVBFX0lOVDMyIHx8CisgICAgICAgICAgICAgICAgICAgICAg
ICB0ID09IFRQTF9UWVBFX1VJTlQzMiB8fCB0ID09IFRQTF9UWVBFX0RPVUJMRSB8fAorICAgICAg
ICAgICAgICAgICAgICAgICAgdCA9PSBUUExfVFlQRV9VSU5UNjQgfHwgdCA9PSBUUExfVFlQRV9J
TlQ2NCB8fCAKKyAgICAgICAgICAgICAgICAgICAgICAgIHQgPT0gVFBMX1RZUEVfVUlOVDE2IHx8
IHQgPT0gVFBMX1RZUEVfSU5UMTYgfHwgCisgICAgICAgICAgICAgICAgICAgICAgICB0ID09IFRQ
TF9UWVBFX1NUUiApKSBnb3RvIGZhaWw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIC8qIGNvdW50IHVwIGhvdyBtYW55IGNvbnRpZ3VvdXMgIyBhbmQgZm9ybSB0aGVpciBwcm9k
dWN0ICovCisgICAgICAgICAgICAgICAgcG91bmRfcHJvZD0xOworICAgICAgICAgICAgICAgIG51
bV9jb250aWdfZnhsZW5zPTA7CisgICAgICAgICAgICAgICAgZm9yKHBlZWs9YzsgKnBlZWsgPT0g
JyMnOyBwZWVrKyspIHsKKyAgICAgICAgICAgICAgICAgIHBvdW5kX251bSA9IHZhX2FyZyhhcCwg
aW50KTsKKyAgICAgICAgICAgICAgICAgIGlmIChwb3VuZF9udW0gPCAxKSB7CisgICAgICAgICAg
ICAgICAgICAgIHRwbF9ob29rLmZhdGFsKCJub24tcG9zaXRpdmUgaXRlcmF0aW9uIGNvdW50ICVk
XG4iLCBwb3VuZF9udW0pOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
aWYgKG51bV9jb250aWdfZnhsZW5zID49IChzaXplb2YoY29udGlnX2Z4bGVucykvc2l6ZW9mKGNv
bnRpZ19meGxlbnNbMF0pKSkgeworICAgICAgICAgICAgICAgICAgICB0cGxfaG9vay5mYXRhbCgi
Y29udGlndW91cyAjIGV4Y2VlZHMgaGFyZGNvZGVkIGxpbWl0XG4iKTsKKyAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgIGNvbnRpZ19meGxlbnNbbnVtX2NvbnRpZ19meGxlbnMr
K10gPSBwb3VuZF9udW07CisgICAgICAgICAgICAgICAgICBwb3VuZF9wcm9kICo9IHBvdW5kX251
bTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLyogaW5jcmVtZW50IGMgdG8g
c2tpcCBjb250aWd1b3VzICMgc28gaXRzIHBvaW50cyB0byBsYXN0IG9uZSAqLworICAgICAgICAg
ICAgICAgIGMgPSBwZWVrLTE7CisgICAgICAgICAgICAgICAgLyogZGlmZmVyZW50aWF0ZSBhdG9t
LSMgZnJvbSBzdHJ1Y3QtIyBieSBub3RpbmcgcHJlY2VkaW5nIHJwYXJlbiAqLworICAgICAgICAg
ICAgICAgIGlmIChhcHBsaWVzX3RvX3N0cnVjdCkgeyAvKiBpbnNlcnQgIyBub2RlIHRvIGluZHVj
ZSBsb29waW5nICovCisgICAgICAgICAgICAgICAgICBuID0gdHBsX25vZGVfbmV3KHBhcmVudCk7
CisgICAgICAgICAgICAgICAgICBuLT50eXBlID0gVFBMX1RZUEVfUE9VTkQ7CisgICAgICAgICAg
ICAgICAgICBuLT5udW0gPSBwb3VuZF9wcm9kOworICAgICAgICAgICAgICAgICAgbi0+ZGF0YSA9
IHRwbF9ob29rLm1hbGxvYyhzaXplb2YodHBsX3BvdW5kX2RhdGEpKTsKKyAgICAgICAgICAgICAg
ICAgIGlmICghbi0+ZGF0YSkgZmF0YWxfb29tKCk7CisgICAgICAgICAgICAgICAgICBwZCA9ICh0
cGxfcG91bmRfZGF0YSopbi0+ZGF0YTsKKyAgICAgICAgICAgICAgICAgIHBkLT5pbnRlcl9lbHRf
bGVuID0gaW50ZXJfZWx0X2xlbjsKKyAgICAgICAgICAgICAgICAgIHBkLT5pdGVyX3N0YXJ0X25v
ZGUgPSBpdGVyX3N0YXJ0X25vZGU7IAorICAgICAgICAgICAgICAgICAgcGQtPml0ZXJudW0gPSAw
OworICAgICAgICAgICAgICAgICAgRExfQUREKHBhcmVudC0+Y2hpbGRyZW4sbik7CisgICAgICAg
ICAgICAgICAgICAvKiBtdWx0aXBseSB0aGUgJ251bScgYW5kIGRhdGEgc3BhY2Ugb24gZWFjaCBh
dG9tIGluIHRoZSBzdHJ1Y3R1cmUgKi8KKyAgICAgICAgICAgICAgICAgIGZvcihucCA9IGl0ZXJf
c3RhcnRfbm9kZTsgbnAgIT0gbjsgbnAgPSBucC0+bmV4dCkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAobi0+cGFyZW50LT50eXBlID09IFRQTF9UWVBFX0FSWSkgeworICAgICAgICAgICAgICAg
ICAgICAgICgodHBsX2F0eXAqKShuLT5wYXJlbnQtPmRhdGEpKS0+c3ogKz0gCisgICAgICAgICAg
ICAgICAgICAgICAgICAgdHBsX3R5cGVzW25wLT50eXBlXS5zeiAqIChucC0+bnVtICogKG4tPm51
bSAtIDEpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBucC0+
ZGF0YSA9IHRwbF9ob29rLnJlYWxsb2MobnAtPmRhdGEsIHRwbF90eXBlc1tucC0+dHlwZV0uc3og
KiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBucC0+bnVtICogbi0+bnVtKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFucC0+ZGF0
YSkgZmF0YWxfb29tKCk7CisgICAgICAgICAgICAgICAgICAgIG1lbXNldChucC0+ZGF0YSwgMCwg
dHBsX3R5cGVzW25wLT50eXBlXS5zeiAqIG5wLT5udW0gKiBuLT5udW0pOworICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8qIHNpbXBsZSBhdG9tLSMgZm9ybSBk
b2VzIG5vdCByZXF1aXJlIGEgbG9vcCAqLworICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nLT5u
dW0gPSBwb3VuZF9wcm9kOworICAgICAgICAgICAgICAgICAgcHJlY2VkaW5nLT5kYXRhID0gdHBs
X2hvb2sucmVhbGxvYyhwcmVjZWRpbmctPmRhdGEsIAorICAgICAgICAgICAgICAgICAgICAgIHRw
bF90eXBlc1t0XS5zeiAqIHByZWNlZGluZy0+bnVtKTsKKyAgICAgICAgICAgICAgICAgIGlmICgh
cHJlY2VkaW5nLT5kYXRhKSBmYXRhbF9vb20oKTsKKyAgICAgICAgICAgICAgICAgIG1lbXNldChw
cmVjZWRpbmctPmRhdGEsMCx0cGxfdHlwZXNbdF0uc3ogKiBwcmVjZWRpbmctPm51bSk7CisgICAg
ICAgICAgICAgICAgICBpZiAobi0+cGFyZW50LT50eXBlID09IFRQTF9UWVBFX0FSWSkgeworICAg
ICAgICAgICAgICAgICAgICAgICgodHBsX2F0eXAqKShuLT5wYXJlbnQtPmRhdGEpKS0+c3ogKz0g
dHBsX3R5cGVzW3RdLnN6ICogCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAocHJlY2VkaW5nLT5udW0tMSk7CisgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJvb3QtPnNlcl9vc3og
Kz0gKHNpemVvZih1aW50MzJfdCkgKiBudW1fY29udGlnX2Z4bGVucyk7CisKKyAgICAgICAgICAg
ICAgICBqID0gKCh0cGxfcm9vdF9kYXRhKilyb290LT5kYXRhKS0+bnVtX2Z4bGVuczsgLyogYmVm
b3JlIGluY3JlbWVudGluZyAqLworICAgICAgICAgICAgICAgICgoKHRwbF9yb290X2RhdGEqKXJv
b3QtPmRhdGEpLT5udW1fZnhsZW5zKSArPSBudW1fY29udGlnX2Z4bGVuczsKKyAgICAgICAgICAg
ICAgICBudW1fZnhsZW5zID0gKCh0cGxfcm9vdF9kYXRhKilyb290LT5kYXRhKS0+bnVtX2Z4bGVu
czsgLyogbmV3IHZhbHVlICovCisgICAgICAgICAgICAgICAgZnhsZW5zID0gKCh0cGxfcm9vdF9k
YXRhKilyb290LT5kYXRhKS0+ZnhsZW5zOworICAgICAgICAgICAgICAgIGZ4bGVucyA9IHRwbF9o
b29rLnJlYWxsb2MoZnhsZW5zLCBzaXplb2YoaW50KSAqIG51bV9meGxlbnMpOworICAgICAgICAg
ICAgICAgIGlmICghZnhsZW5zKSBmYXRhbF9vb20oKTsKKyAgICAgICAgICAgICAgICAoKHRwbF9y
b290X2RhdGEqKXJvb3QtPmRhdGEpLT5meGxlbnMgPSBmeGxlbnM7CisgICAgICAgICAgICAgICAg
Zm9yKGk9MDsgaSA8IG51bV9jb250aWdfZnhsZW5zOyBpKyspIGZ4bGVuc1tqKytdID0gY29udGln
X2Z4bGVuc1tpXTsKKworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAn
Qic6CisgICAgICAgICAgICAgICAgaWYgKGV4cGVjdF9scGFyZW4pIGdvdG8gZmFpbDsKKyAgICAg
ICAgICAgICAgICBpZiAoaW5fc3RydWN0dXJlKSBnb3RvIGZhaWw7CisgICAgICAgICAgICAgICAg
biA9IHRwbF9ub2RlX25ldyhwYXJlbnQpOworICAgICAgICAgICAgICAgIG4tPnR5cGUgPSBUUExf
VFlQRV9CSU47CisgICAgICAgICAgICAgICAgbi0+YWRkciA9ICh0cGxfYmluKil2YV9hcmcoYXAs
dm9pZCopOworICAgICAgICAgICAgICAgIG4tPmRhdGEgPSB0cGxfaG9vay5tYWxsb2Moc2l6ZW9m
KHRwbF9iaW4qKSk7CisgICAgICAgICAgICAgICAgaWYgKCFuLT5kYXRhKSBmYXRhbF9vb20oKTsK
KyAgICAgICAgICAgICAgICAqKCh0cGxfYmluKiopbi0+ZGF0YSkgPSBOVUxMOworICAgICAgICAg
ICAgICAgIGlmIChuLT5wYXJlbnQtPnR5cGUgPT0gVFBMX1RZUEVfQVJZKSAKKyAgICAgICAgICAg
ICAgICAgICAgKCh0cGxfYXR5cCopKG4tPnBhcmVudC0+ZGF0YSkpLT5zeiArPSBzaXplb2YodHBs
X2Jpbik7CisgICAgICAgICAgICAgICAgRExfQUREKHBhcmVudC0+Y2hpbGRyZW4sbik7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdBJzoKKyAgICAgICAgICAgICAg
ICBpZiAoaW5fc3RydWN0dXJlKSBnb3RvIGZhaWw7CisgICAgICAgICAgICAgICAgbiA9IHRwbF9u
b2RlX25ldyhwYXJlbnQpOworICAgICAgICAgICAgICAgIG4tPnR5cGUgPSBUUExfVFlQRV9BUlk7
CisgICAgICAgICAgICAgICAgRExfQUREKHBhcmVudC0+Y2hpbGRyZW4sbik7CisgICAgICAgICAg
ICAgICAgcGFyZW50ID0gbjsKKyAgICAgICAgICAgICAgICBleHBlY3RfbHBhcmVuPTE7CisgICAg
ICAgICAgICAgICAgcGlkeCA9ICh0cGxfcGlkeCopdHBsX2hvb2subWFsbG9jKHNpemVvZih0cGxf
cGlkeCkpOworICAgICAgICAgICAgICAgIGlmICghcGlkeCkgZmF0YWxfb29tKCk7CisgICAgICAg
ICAgICAgICAgcGlkeC0+bm9kZSA9IG47CisgICAgICAgICAgICAgICAgcGlkeC0+bmV4dCA9IE5V
TEw7CisgICAgICAgICAgICAgICAgRExfQUREKCgodHBsX3Jvb3RfZGF0YSopKHJvb3QtPmRhdGEp
KS0+cGlkeCxwaWR4KTsKKyAgICAgICAgICAgICAgICAvKiBzZXQgdXAgdGhlIEEncyB0cGxfYXR5
cCAqLworICAgICAgICAgICAgICAgIG4tPmRhdGEgPSAodHBsX2F0eXAqKXRwbF9ob29rLm1hbGxv
YyhzaXplb2YodHBsX2F0eXApKTsKKyAgICAgICAgICAgICAgICBpZiAoIW4tPmRhdGEpIGZhdGFs
X29vbSgpOworICAgICAgICAgICAgICAgICgodHBsX2F0eXAqKShuLT5kYXRhKSktPm51bSA9IDA7
CisgICAgICAgICAgICAgICAgKCh0cGxfYXR5cCopKG4tPmRhdGEpKS0+c3ogPSAwOworICAgICAg
ICAgICAgICAgICgodHBsX2F0eXAqKShuLT5kYXRhKSktPmJiID0gTlVMTDsKKyAgICAgICAgICAg
ICAgICAoKHRwbF9hdHlwKikobi0+ZGF0YSkpLT5iYnRhaWwgPSBOVUxMOworICAgICAgICAgICAg
ICAgICgodHBsX2F0eXAqKShuLT5kYXRhKSktPmN1ciA9IE5VTEw7CisgICAgICAgICAgICAgICAg
aWYgKG4tPnBhcmVudC0+dHlwZSA9PSBUUExfVFlQRV9BUlkpIAorICAgICAgICAgICAgICAgICAg
ICAoKHRwbF9hdHlwKikobi0+cGFyZW50LT5kYXRhKSktPnN6ICs9IHNpemVvZih2b2lkKik7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdTJzoKKyAgICAgICAgICAg
ICAgICBpZiAoaW5fc3RydWN0dXJlKSBnb3RvIGZhaWw7CisgICAgICAgICAgICAgICAgZXhwZWN0
X2xwYXJlbj0xOworICAgICAgICAgICAgICAgIG9yZGluYWw9MTsgIC8qIGluZGV4IHVwY29taW5n
IGF0b21zIGluIFMoLi4pICovCisgICAgICAgICAgICAgICAgaW5fc3RydWN0dXJlPTErbHBhcmVu
X2xldmVsOyAvKiBzbyB3ZSBjYW4gdGVsbCB3aGVyZSBTIGZtdCBlbmRzICovCisgICAgICAgICAg
ICAgICAgc3RydWN0X2FkZHIgPSAoY2hhciopdmFfYXJnKGFwLHZvaWQqKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJyQnOiAvKiBuZXN0ZWQgc3RydWN0dXJlICov
CisgICAgICAgICAgICAgICAgaWYgKCFpbl9zdHJ1Y3R1cmUpIGdvdG8gZmFpbDsKKyAgICAgICAg
ICAgICAgICBleHBlY3RfbHBhcmVuPTE7CisgICAgICAgICAgICAgICAgaW5fbmVzdGVkX3N0cnVj
dHVyZSsrOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnKSc6Cisg
ICAgICAgICAgICAgICAgbHBhcmVuX2xldmVsLS07CisgICAgICAgICAgICAgICAgaWYgKGxwYXJl
bl9sZXZlbCA8IDApIGdvdG8gZmFpbDsKKyAgICAgICAgICAgICAgICBpZiAoKihjLTEpID09ICco
JykgZ290byBmYWlsOworICAgICAgICAgICAgICAgIGlmIChpbl9uZXN0ZWRfc3RydWN0dXJlKSBp
bl9uZXN0ZWRfc3RydWN0dXJlLS07CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5fc3RydWN0
dXJlICYmIChpbl9zdHJ1Y3R1cmUtMSA9PSBscGFyZW5fbGV2ZWwpKSB7CisgICAgICAgICAgICAg
ICAgICAvKiBjYWxjdWxhdGUgZGVsdGEgYmV0d2VlbiBjb250aWd1b3VzIHN0cnVjdHVyZXMgaW4g
YXJyYXkgKi8KKyAgICAgICAgICAgICAgICAgIHN0cnVjdF9uZXh0ID0gY2FsY19maWVsZF9hZGRy
KHBhcmVudCwgc3RydWN0X3dpZGVzdF9ub2RlLT50eXBlLCAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdF9hZGRyLCBvcmRpbmFsKyspOworICAg
ICAgICAgICAgICAgICAgaW50ZXJfZWx0X2xlbiA9IHN0cnVjdF9uZXh0IC0gc3RydWN0X2FkZHI7
CisgICAgICAgICAgICAgICAgICBpbl9zdHJ1Y3R1cmU9MDsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgZWxzZSBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudDsgLyogcnBhcmVuIGVu
ZHMgQSgpIHR5cGUsIG5vdCBTKCkgdHlwZSAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSAnKCc6CisgICAgICAgICAgICAgICAgaWYgKCFleHBlY3RfbHBhcmVuKSBn
b3RvIGZhaWw7CisgICAgICAgICAgICAgICAgZXhwZWN0X2xwYXJlbj0wOworICAgICAgICAgICAg
ICAgIGxwYXJlbl9sZXZlbCsrOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICB0cGxfaG9vay5vb3BzKCJ1bnN1cHBvcnRlZCBvcHRp
b24gJWNcbiIsICpjKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKyAg
ICAgICAgYysrOworICAgIH0KKyAgICBpZiAobHBhcmVuX2xldmVsICE9IDApIGdvdG8gZmFpbDsK
KworICAgIC8qIGNvcHkgdGhlIGZvcm1hdCBzdHJpbmcsIHNhdmUgZm9yIGNvbnZlbmllbmNlICov
CisgICAgKCh0cGxfcm9vdF9kYXRhKikocm9vdC0+ZGF0YSkpLT5mbXQgPSB0cGxfaG9vay5tYWxs
b2Moc3RybGVuKGZtdCkrMSk7CisgICAgaWYgKCgodHBsX3Jvb3RfZGF0YSopKHJvb3QtPmRhdGEp
KS0+Zm10ID09IE5VTEwpIAorICAgICAgICBmYXRhbF9vb20oKTsKKyAgICBtZW1jcHkoKCh0cGxf
cm9vdF9kYXRhKikocm9vdC0+ZGF0YSkpLT5mbXQsZm10LHN0cmxlbihmbXQpKzEpOworCisgICAg
cmV0dXJuIHJvb3Q7CisKK2ZhaWw6CisgICAgdHBsX2hvb2sub29wcygiZmFpbGVkIHRvIHBhcnNl
ICVzXG4iLCBmbXQpOworICAgIHRwbF9mcmVlKHJvb3QpOworICAgIHJldHVybiBOVUxMOworfQor
CitzdGF0aWMgaW50IHRwbF91bm1hcF9maWxlKCB0cGxfbW1hcF9yZWMgKm1yKSB7CisKKyAgICBp
ZiAoIG11bm1hcCggbXItPnRleHQsIG1yLT50ZXh0X3N6ICkgPT0gLTEgKSB7CisgICAgICAgIHRw
bF9ob29rLm9vcHMoIkZhaWxlZCB0byBtdW5tYXA6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwor
ICAgIH0KKyAgICBjbG9zZShtci0+ZmQpOworICAgIG1yLT50ZXh0ID0gTlVMTDsKKyAgICBtci0+
dGV4dF9zeiA9IDA7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHRwbF9mcmVlX2tl
ZXBfbWFwKHRwbF9ub2RlICpyKSB7CisgICAgaW50IG1tYXBfYml0cyA9IChUUExfUkRPTkxZfFRQ
TF9GSUxFKTsKKyAgICBpbnQgdWZyZWVfYml0cyA9IChUUExfTUVNfFRQTF9VRlJFRSk7CisgICAg
dHBsX25vZGUgKm54dGMsKmM7CisgICAgaW50IGZpbmRfbmV4dF9ub2RlPTAsbG9va2luZyxpOwor
ICAgIHNpemVfdCBzejsKKworICAgIC8qIEZvciBtbWFwJ2QgZmlsZXMsIG9yIGZvciAndWZyZWUn
IG1lbW9yeSBpbWFnZXMgLCBkbyBhcHByb3ByaWF0ZSByZWxlYXNlICovCisgICAgaWYgKCgoKHRw
bF9yb290X2RhdGEqKShyLT5kYXRhKSktPmZsYWdzICYgbW1hcF9iaXRzKSA9PSBtbWFwX2JpdHMp
IHsKKyAgICAgICAgdHBsX3VubWFwX2ZpbGUoICYoKHRwbF9yb290X2RhdGEqKShyLT5kYXRhKSkt
Pm1tYXApOyAKKyAgICB9IGVsc2UgaWYgKCgoKHRwbF9yb290X2RhdGEqKShyLT5kYXRhKSktPmZs
YWdzICYgdWZyZWVfYml0cykgPT0gdWZyZWVfYml0cykgeworICAgICAgICB0cGxfaG9vay5mcmVl
KCAoKHRwbF9yb290X2RhdGEqKShyLT5kYXRhKSktPm1tYXAudGV4dCApOworICAgIH0KKworICAg
IGMgPSByLT5jaGlsZHJlbjsKKyAgICBpZiAoYykgeworICAgICAgICB3aGlsZShjLT50eXBlICE9
IFRQTF9UWVBFX1JPT1QpIHsgICAgLyogbG9vcCB1bnRpbCB3ZSBjb21lIGJhY2sgdG8gcm9vdCBu
b2RlICovCisgICAgICAgICAgICBzd2l0Y2ggKGMtPnR5cGUpIHsKKyAgICAgICAgICAgICAgICBj
YXNlIFRQTF9UWVBFX0JJTjoKKyAgICAgICAgICAgICAgICAgICAgLyogZnJlZSBhbnkgYmluYXJ5
IGJ1ZmZlciBoYW5naW5nIGZyb20gdHBsX2JpbiAqLworICAgICAgICAgICAgICAgICAgICBpZiAo
ICooKHRwbF9iaW4qKikoYy0+ZGF0YSkpICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCAoKigodHBsX2JpbioqKShjLT5kYXRhKSkpLT5hZGRyICkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRwbF9ob29rLmZyZWUoICgqKCh0cGxfYmluKiopKGMtPmRhdGEpKSktPmFkZHIg
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICoo
KHRwbF9iaW4qKiljLT5kYXRhKSA9IE5VTEw7IC8qIHJlc2V0IHRwbF9iaW4gKi8KKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBmaW5kX25leHRfbm9kZT0xOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFRQTF9UWVBFX1NU
UjoKKyAgICAgICAgICAgICAgICAgICAgLyogZnJlZSBhbnkgcGFja2VkIChjb3BpZWQpIHN0cmlu
ZyAqLworICAgICAgICAgICAgICAgICAgICBmb3IoaT0wOyBpIDwgYy0+bnVtOyBpKyspIHsKKyAg
ICAgICAgICAgICAgICAgICAgICBjaGFyICpzdHIgPSAoKGNoYXIqKiljLT5kYXRhKVtpXTsKKyAg
ICAgICAgICAgICAgICAgICAgICBpZiAoc3RyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0
cGxfaG9vay5mcmVlKHN0cik7CisgICAgICAgICAgICAgICAgICAgICAgICAoKGNoYXIqKiljLT5k
YXRhKVtpXSA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGZpbmRfbmV4dF9ub2RlPTE7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfSU5UMzI6Cisg
ICAgICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9VSU5UMzI6CisgICAgICAgICAgICAgICAgY2Fz
ZSBUUExfVFlQRV9JTlQ2NDoKKyAgICAgICAgICAgICAgICBjYXNlIFRQTF9UWVBFX1VJTlQ2NDoK
KyAgICAgICAgICAgICAgICBjYXNlIFRQTF9UWVBFX0JZVEU6CisgICAgICAgICAgICAgICAgY2Fz
ZSBUUExfVFlQRV9ET1VCTEU6CisgICAgICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9JTlQxNjoK
KyAgICAgICAgICAgICAgICBjYXNlIFRQTF9UWVBFX1VJTlQxNjoKKyAgICAgICAgICAgICAgICBj
YXNlIFRQTF9UWVBFX1BPVU5EOgorICAgICAgICAgICAgICAgICAgICBmaW5kX25leHRfbm9kZT0x
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFRQTF9U
WVBFX0FSWToKKyAgICAgICAgICAgICAgICAgICAgYy0+c2VyX29zeiA9IDA7IC8qIHplcm8gb3V0
IHRoZSBzZXJpYWxpemF0aW9uIG91dHB1dCBzaXplICovCisKKyAgICAgICAgICAgICAgICAgICAg
c3ogPSAoKHRwbF9hdHlwKikoYy0+ZGF0YSkpLT5zejsgIC8qIHNhdmUgc3ogdG8gdXNlIGJlbG93
ICovCisgICAgICAgICAgICAgICAgICAgIHRwbF9mcmVlX2F0eXAoYyxjLT5kYXRhKTsKKworICAg
ICAgICAgICAgICAgICAgICAvKiBtYWtlIG5ldyBhdHlwICovCisgICAgICAgICAgICAgICAgICAg
IGMtPmRhdGEgPSAodHBsX2F0eXAqKXRwbF9ob29rLm1hbGxvYyhzaXplb2YodHBsX2F0eXApKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFjLT5kYXRhKSBmYXRhbF9vb20oKTsKKyAgICAgICAg
ICAgICAgICAgICAgKCh0cGxfYXR5cCopKGMtPmRhdGEpKS0+bnVtID0gMDsKKyAgICAgICAgICAg
ICAgICAgICAgKCh0cGxfYXR5cCopKGMtPmRhdGEpKS0+c3ogPSBzejsgIC8qIHJlc3RvcmUgYmIg
ZGF0dW0gc3ogKi8KKyAgICAgICAgICAgICAgICAgICAgKCh0cGxfYXR5cCopKGMtPmRhdGEpKS0+
YmIgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICAoKHRwbF9hdHlwKikoYy0+ZGF0YSkpLT5i
YnRhaWwgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICAoKHRwbF9hdHlwKikoYy0+ZGF0YSkp
LT5jdXIgPSBOVUxMOworCisgICAgICAgICAgICAgICAgICAgIGMgPSBjLT5jaGlsZHJlbjsgCisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgICAgIHRwbF9ob29rLmZhdGFsKCJ1bnN1cHBvcnRlZCBmb3JtYXQgY2hhcmFj
dGVyXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmIChmaW5kX25leHRfbm9kZSkgeworICAgICAgICAgICAgICAgIGZpbmRfbmV4
dF9ub2RlPTA7CisgICAgICAgICAgICAgICAgbG9va2luZz0xOworICAgICAgICAgICAgICAgIHdo
aWxlKGxvb2tpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGMtPm5leHQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG54dGM9Yy0+bmV4dDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGM9bnh0YzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvb2tpbmc9MDsKKyAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjLT50eXBlID09
IFRQTF9UWVBFX1JPT1QpIGJyZWFrOyAvKiByb290IG5vZGUgKi8KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG54dGM9Yy0+cGFyZW50
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM9bnh0YzsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgICgodHBsX3Jvb3RfZGF0YSopKHItPmRh
dGEpKS0+ZmxhZ3MgPSAwOyAgLyogcmVzZXQgZmxhZ3MgKi8KK30KKworVFBMX0FQSSB2b2lkIHRw
bF9mcmVlKHRwbF9ub2RlICpyKSB7CisgICAgaW50IG1tYXBfYml0cyA9IChUUExfUkRPTkxZfFRQ
TF9GSUxFKTsKKyAgICBpbnQgdWZyZWVfYml0cyA9IChUUExfTUVNfFRQTF9VRlJFRSk7CisgICAg
dHBsX25vZGUgKm54dGMsKmM7CisgICAgaW50IGZpbmRfbmV4dF9ub2RlPTAsbG9va2luZyxpOwor
ICAgIHRwbF9waWR4ICpwaWR4LCpwaWR4X254dDsKKworICAgIC8qIEZvciBtbWFwJ2QgZmlsZXMs
IG9yIGZvciAndWZyZWUnIG1lbW9yeSBpbWFnZXMgLCBkbyBhcHByb3ByaWF0ZSByZWxlYXNlICov
CisgICAgaWYgKCgoKHRwbF9yb290X2RhdGEqKShyLT5kYXRhKSktPmZsYWdzICYgbW1hcF9iaXRz
KSA9PSBtbWFwX2JpdHMpIHsKKyAgICAgICAgdHBsX3VubWFwX2ZpbGUoICYoKHRwbF9yb290X2Rh
dGEqKShyLT5kYXRhKSktPm1tYXApOyAKKyAgICB9IGVsc2UgaWYgKCgoKHRwbF9yb290X2RhdGEq
KShyLT5kYXRhKSktPmZsYWdzICYgdWZyZWVfYml0cykgPT0gdWZyZWVfYml0cykgeworICAgICAg
ICB0cGxfaG9vay5mcmVlKCAoKHRwbF9yb290X2RhdGEqKShyLT5kYXRhKSktPm1tYXAudGV4dCAp
OworICAgIH0KKworICAgIGMgPSByLT5jaGlsZHJlbjsKKyAgICBpZiAoYykgeworICAgICAgICB3
aGlsZShjLT50eXBlICE9IFRQTF9UWVBFX1JPT1QpIHsgICAgLyogbG9vcCB1bnRpbCB3ZSBjb21l
IGJhY2sgdG8gcm9vdCBub2RlICovCisgICAgICAgICAgICBzd2l0Y2ggKGMtPnR5cGUpIHsKKyAg
ICAgICAgICAgICAgICBjYXNlIFRQTF9UWVBFX0JJTjoKKyAgICAgICAgICAgICAgICAgICAgLyog
ZnJlZSBhbnkgYmluYXJ5IGJ1ZmZlciBoYW5naW5nIGZyb20gdHBsX2JpbiAqLworICAgICAgICAg
ICAgICAgICAgICBpZiAoICooKHRwbF9iaW4qKikoYy0+ZGF0YSkpICkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCAoKigodHBsX2JpbioqKShjLT5kYXRhKSkpLT5zeiAhPSAwICkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwbF9ob29rLmZyZWUoICgqKCh0cGxfYmluKiop
KGMtPmRhdGEpKSktPmFkZHIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIHRwbF9ob29rLmZyZWUoKigodHBsX2JpbioqKWMtPmRhdGEpKTsgLyog
ZnJlZSB0cGxfYmluICovCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgdHBsX2hvb2suZnJlZShjLT5kYXRhKTsgIC8qIGZyZWUgdHBsX2JpbiogKi8KKyAgICAgICAg
ICAgICAgICAgICAgZmluZF9uZXh0X25vZGU9MTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9TVFI6CisgICAgICAgICAgICAgICAgICAg
IC8qIGZyZWUgYW55IHBhY2tlZCAoY29waWVkKSBzdHJpbmcgKi8KKyAgICAgICAgICAgICAgICAg
ICAgZm9yKGk9MDsgaSA8IGMtPm51bTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgY2hh
ciAqc3RyID0gKChjaGFyKiopYy0+ZGF0YSlbaV07CisgICAgICAgICAgICAgICAgICAgICAgaWYg
KHN0cikgeworICAgICAgICAgICAgICAgICAgICAgICAgdHBsX2hvb2suZnJlZShzdHIpOworICAg
ICAgICAgICAgICAgICAgICAgICAgKChjaGFyKiopYy0+ZGF0YSlbaV0gPSBOVUxMOworICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB0cGxfaG9vay5mcmVlKGMtPmRhdGEpOworICAgICAgICAgICAgICAgICAgICBmaW5kX25l
eHRfbm9kZT0xOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBj
YXNlIFRQTF9UWVBFX0lOVDMyOgorICAgICAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfVUlOVDMy
OgorICAgICAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfSU5UNjQ6CisgICAgICAgICAgICAgICAg
Y2FzZSBUUExfVFlQRV9VSU5UNjQ6CisgICAgICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9CWVRF
OgorICAgICAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfRE9VQkxFOgorICAgICAgICAgICAgICAg
IGNhc2UgVFBMX1RZUEVfSU5UMTY6CisgICAgICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9VSU5U
MTY6CisgICAgICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9QT1VORDoKKyAgICAgICAgICAgICAg
ICAgICAgdHBsX2hvb2suZnJlZShjLT5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgZmluZF9u
ZXh0X25vZGU9MTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSBUUExfVFlQRV9BUlk6CisgICAgICAgICAgICAgICAgICAgIHRwbF9mcmVlX2F0eXAoYyxj
LT5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGMtPmNoaWxkcmVuKSBjID0gYy0+Y2hp
bGRyZW47IC8qIG5vcm1hbCBjYXNlICovCisgICAgICAgICAgICAgICAgICAgIGVsc2UgZmluZF9u
ZXh0X25vZGU9MTsgLyogZWRnZSBjYXNlLCBoYW5kbGUgYmFkIGZvcm1hdCBBKCkgKi8KKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICAgICAgdHBsX2hvb2suZmF0YWwoInVuc3VwcG9ydGVkIGZvcm1hdCBjaGFyYWN0ZXJc
biIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKGZpbmRfbmV4dF9ub2RlKSB7CisgICAgICAgICAgICAgICAgZmluZF9uZXh0X25v
ZGU9MDsKKyAgICAgICAgICAgICAgICBsb29raW5nPTE7CisgICAgICAgICAgICAgICAgd2hpbGUo
bG9va2luZykgeworICAgICAgICAgICAgICAgICAgICBpZiAoYy0+bmV4dCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgbnh0Yz1jLT5uZXh0OworICAgICAgICAgICAgICAgICAgICAgICAgdHBs
X2hvb2suZnJlZShjKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGM9bnh0YzsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGxvb2tpbmc9MDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjLT50eXBlID09IFRQTF9UWVBFX1JPT1QpIGJy
ZWFrOyAvKiByb290IG5vZGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG54dGM9Yy0+cGFyZW50OworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRwbF9ob29rLmZyZWUoYyk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYz1ueHRjOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgLyogZnJlZSByb290ICovCisgICAgZm9yKHBpZHg9KCh0cGxfcm9vdF9kYXRhKikoci0+
ZGF0YSkpLT5waWR4OyBwaWR4OyBwaWR4PXBpZHhfbnh0KSB7CisgICAgICAgIHBpZHhfbnh0ID0g
cGlkeC0+bmV4dDsKKyAgICAgICAgdHBsX2hvb2suZnJlZShwaWR4KTsKKyAgICB9CisgICAgdHBs
X2hvb2suZnJlZSgoKHRwbF9yb290X2RhdGEqKShyLT5kYXRhKSktPmZtdCk7CisgICAgaWYgKCgo
dHBsX3Jvb3RfZGF0YSopKHItPmRhdGEpKS0+bnVtX2Z4bGVucyA+IDApIHsKKyAgICAgICAgdHBs
X2hvb2suZnJlZSgoKHRwbF9yb290X2RhdGEqKShyLT5kYXRhKSktPmZ4bGVucyk7CisgICAgfQor
ICAgIHRwbF9ob29rLmZyZWUoci0+ZGF0YSk7ICAvKiB0cGxfcm9vdF9kYXRhICovCisgICAgdHBs
X2hvb2suZnJlZShyKTsKK30KKworCisvKiBGaW5kIHRoZSBpJ3RoIHBhY2thYmxlICgnQScgbm9k
ZSkgKi8KK3N0YXRpYyB0cGxfbm9kZSAqdHBsX2ZpbmRfaSh0cGxfbm9kZSAqbiwgaW50IGkpIHsK
KyAgICBpbnQgaj0wOworICAgIHRwbF9waWR4ICpwaWR4OworICAgIGlmIChuLT50eXBlICE9IFRQ
TF9UWVBFX1JPT1QpIHJldHVybiBOVUxMOworICAgIGlmIChpID09IDApIHJldHVybiBuOyAgLyog
cGFja2FibGUgMCBpcyByb290ICovCisgICAgZm9yKHBpZHg9KCh0cGxfcm9vdF9kYXRhKikobi0+
ZGF0YSkpLT5waWR4OyBwaWR4OyBwaWR4PXBpZHgtPm5leHQpIHsKKyAgICAgICAgaWYgKCsraiA9
PSBpKSByZXR1cm4gcGlkeC0+bm9kZTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0
YXRpYyB2b2lkICp0cGxfY3B2KHZvaWQgKmRhdGF2LCB2b2lkICpkYXRhLCBzaXplX3Qgc3opIHsK
KyAgICBpZiAoc3o+MCkgbWVtY3B5KGRhdGF2LGRhdGEsc3opOworICAgIHJldHVybiAodm9pZCop
KCh1aW50cHRyX3QpZGF0YXYgKyBzeik7Cit9CisKK3N0YXRpYyB2b2lkICp0cGxfZXh0ZW5kX2Jh
Y2tib25lKHRwbF9ub2RlICpuKSB7CisgICAgdHBsX2JhY2tib25lICpiYjsKKyAgICBiYiA9ICh0
cGxfYmFja2JvbmUqKXRwbF9ob29rLm1hbGxvYyhzaXplb2YodHBsX2JhY2tib25lKSArCisgICAg
ICAoKHRwbF9hdHlwKikobi0+ZGF0YSkpLT5zeiApOyAgLyogZGF0dW0gaGFuZ3Mgb24gY29hdHRh
aWxzIG9mIGJiICovCisgICAgaWYgKCFiYikgZmF0YWxfb29tKCk7CisjaWZkZWYgX19TVERDX1ZF
UlNJT05fXworI2lmIF9fU1REQ19WRVJTSU9OX18gPCAxOTk5MDEKKyAgICBiYi0+ZGF0YSA9IChj
aGFyKikoKHVpbnRwdHJfdCliYiArIHNpemVvZih0cGxfYmFja2JvbmUpKTsgCisjZW5kaWYKKyNl
bmRpZgorICAgIG1lbXNldChiYi0+ZGF0YSwwLCgodHBsX2F0eXAqKShuLT5kYXRhKSktPnN6KTsK
KyAgICBiYi0+bmV4dCA9IE5VTEw7CisgICAgLyogQWRkIHRoZSBuZXcgYmFja2JvbmUgdG8gdGhl
IHRhaWwsIGFsc28gc2V0dGluZyBoZWFkIGlmIG5lY2Vzc2FyeSAgKi8KKyAgICBpZiAoKCh0cGxf
YXR5cCopKG4tPmRhdGEpKS0+YmIgPT0gTlVMTCkgeworICAgICAgICAoKHRwbF9hdHlwKikobi0+
ZGF0YSkpLT5iYiA9IGJiOworICAgICAgICAoKHRwbF9hdHlwKikobi0+ZGF0YSkpLT5iYnRhaWwg
PSBiYjsKKyAgICB9IGVsc2UgeworICAgICAgICAoKHRwbF9hdHlwKikobi0+ZGF0YSkpLT5iYnRh
aWwtPm5leHQgPSBiYjsKKyAgICAgICAgKCh0cGxfYXR5cCopKG4tPmRhdGEpKS0+YmJ0YWlsID0g
YmI7CisgICAgfQorCisgICAgKCh0cGxfYXR5cCopKG4tPmRhdGEpKS0+bnVtKys7CisgICAgcmV0
dXJuIGJiLT5kYXRhOworfQorCisvKiBHZXQgdGhlIGZvcm1hdCBzdHJpbmcgY29ycmVzcG9uZGlu
ZyB0byBhIGdpdmVuIHRwbCAocm9vdCBub2RlKSAqLworc3RhdGljIGNoYXIgKnRwbF9mbXQodHBs
X25vZGUgKnIpIHsKKyAgICByZXR1cm4gKCh0cGxfcm9vdF9kYXRhKikoci0+ZGF0YSkpLT5mbXQ7
Cit9CisKKy8qIEdldCB0aGUgZm10ICMgbGVuZ3RocyBhcyBhIGNvbnRpZ3VvdXMgYnVmZmVyIG9m
IGludHMgKGxlbmd0aCBudW1fZnhsZW5zKSAqLworc3RhdGljIGludCAqdHBsX2Z4bGVucyh0cGxf
bm9kZSAqciwgaW50ICpudW1fZnhsZW5zKSB7CisgICAgKm51bV9meGxlbnMgPSAoKHRwbF9yb290
X2RhdGEqKShyLT5kYXRhKSktPm51bV9meGxlbnM7CisgICAgcmV0dXJuICgodHBsX3Jvb3RfZGF0
YSopKHItPmRhdGEpKS0+ZnhsZW5zOworfQorCisvKiBjYWxsZWQgd2hlbiBzZXJpYWxpemluZyBh
biAnQScgdHlwZSBub2RlIGludG8gYSBidWZmZXIgd2hpY2ggaGFzCisgKiBhbHJlYWR5IGJlZW4g
c2V0IHVwIHdpdGggdGhlIHByb3BlciBzcGFjZS4gVGhlIGJhY2tib25lIGlzIHdhbGtlZAorICog
d2hpY2ggd2FzIG9idGFpbmVkIGZyb20gdGhlIHRwbF9hdHlwIGhlYWRlciBwYXNzZWQgaW4uIAor
ICovCitzdGF0aWMgdm9pZCAqdHBsX2R1bXBfYXR5cCh0cGxfbm9kZSAqbiwgdHBsX2F0eXAqIGF0
LCB2b2lkICpkdikgeworICAgIHRwbF9iYWNrYm9uZSAqYmI7CisgICAgdHBsX25vZGUgKmM7Cisg
ICAgdm9pZCAqZGF0YXY7CisgICAgdWludDMyX3Qgc2xlbjsKKyAgICB0cGxfYmluICpiaW5wOwor
ICAgIGNoYXIgKnN0cnA7CisgICAgdHBsX2F0eXAgKmF0eXBwOworICAgIHRwbF9wb3VuZF9kYXRh
ICpwZDsKKyAgICBpbnQgaTsKKyAgICBzaXplX3QgaXRlcm1heDsKKworICAgIC8qIGhhbmRsZSAn
QScgbm9kZXMgKi8KKyAgICBkdiA9IHRwbF9jcHYoZHYsJmF0LT5udW0sc2l6ZW9mKHVpbnQzMl90
KSk7ICAvKiBhcnJheSBsZW4gKi8KKyAgICBmb3IoYmI9YXQtPmJiOyBiYjsgYmI9YmItPm5leHQp
IHsKKyAgICAgICAgZGF0YXYgPSBiYi0+ZGF0YTsKKyAgICAgICAgYz1uLT5jaGlsZHJlbjsKKyAg
ICAgICAgd2hpbGUoYykgeworICAgICAgICAgICAgc3dpdGNoIChjLT50eXBlKSB7CisgICAgICAg
ICAgICAgICAgY2FzZSBUUExfVFlQRV9CWVRFOgorICAgICAgICAgICAgICAgIGNhc2UgVFBMX1RZ
UEVfRE9VQkxFOgorICAgICAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfSU5UMzI6CisgICAgICAg
ICAgICAgICAgY2FzZSBUUExfVFlQRV9VSU5UMzI6CisgICAgICAgICAgICAgICAgY2FzZSBUUExf
VFlQRV9JTlQ2NDoKKyAgICAgICAgICAgICAgICBjYXNlIFRQTF9UWVBFX1VJTlQ2NDoKKyAgICAg
ICAgICAgICAgICBjYXNlIFRQTF9UWVBFX0lOVDE2OgorICAgICAgICAgICAgICAgIGNhc2UgVFBM
X1RZUEVfVUlOVDE2OgorICAgICAgICAgICAgICAgICAgICBkdiA9IHRwbF9jcHYoZHYsZGF0YXYs
dHBsX3R5cGVzW2MtPnR5cGVdLnN6ICogYy0+bnVtKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0
YXYgPSAodm9pZCopKCh1aW50cHRyX3QpZGF0YXYgKyB0cGxfdHlwZXNbYy0+dHlwZV0uc3ogKiBj
LT5udW0pOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNl
IFRQTF9UWVBFX0JJTjoKKyAgICAgICAgICAgICAgICAgICAgLyogZHVtcCB0aGUgYnVmZmVyIGxl
bmd0aCBmb2xsb3dlZCBieSB0aGUgYnVmZmVyICovCisgICAgICAgICAgICAgICAgICAgIG1lbWNw
eSgmYmlucCxkYXRhdixzaXplb2YodHBsX2JpbiopKTsgLyogY3AgdG8gYWxpZ25lZCAqLworICAg
ICAgICAgICAgICAgICAgICBzbGVuID0gYmlucC0+c3o7CisgICAgICAgICAgICAgICAgICAgIGR2
ID0gdHBsX2Nwdihkdiwmc2xlbixzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgICAgICAgICAg
ICAgZHYgPSB0cGxfY3B2KGR2LGJpbnAtPmFkZHIsc2xlbik7CisgICAgICAgICAgICAgICAgICAg
IGRhdGF2ID0gKHZvaWQqKSgodWludHB0cl90KWRhdGF2ICsgc2l6ZW9mKHRwbF9iaW4qKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVf
U1RSOgorICAgICAgICAgICAgICAgICAgICAvKiBkdW1wIHRoZSBzdHJpbmcgbGVuZ3RoIGZvbGxv
d2VkIGJ5IHRoZSBzdHJpbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgZm9yKGk9MDsgaSA8IGMt
Pm51bTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCZzdHJwLGRhdGF2LHNp
emVvZihjaGFyKikpOyAvKiBjcCB0byBhbGlnbmVkICovCisgICAgICAgICAgICAgICAgICAgICAg
c2xlbiA9IHN0cnAgPyAoc3RybGVuKHN0cnApKzEpIDogMDsKKyAgICAgICAgICAgICAgICAgICAg
ICBkdiA9IHRwbF9jcHYoZHYsJnNsZW4sc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHNsZW4gPiAxKSBkdiA9IHRwbF9jcHYoZHYsc3RycCxzbGVuLTEpOworICAg
ICAgICAgICAgICAgICAgICAgIGRhdGF2ID0gKHZvaWQqKSgodWludHB0cl90KWRhdGF2ICsgc2l6
ZW9mKGNoYXIqKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9BUlk6CisgICAgICAgICAgICAg
ICAgICAgIG1lbWNweSgmYXR5cHAsZGF0YXYsc2l6ZW9mKHRwbF9hdHlwKikpOyAvKiBjcCB0byBh
bGlnbmVkICovCisgICAgICAgICAgICAgICAgICAgIGR2ID0gdHBsX2R1bXBfYXR5cChjLGF0eXBw
LGR2KTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YXYgPSAodm9pZCopKCh1aW50cHRyX3QpZGF0
YXYgKyBzaXplb2Yodm9pZCopKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgY2FzZSBUUExfVFlQRV9QT1VORDoKKyAgICAgICAgICAgICAgICAgICAgLyogaXRl
cmF0ZSBvdmVyIHRoZSBwcmVjZWRpbmcgbm9kZXMgKi8KKyAgICAgICAgICAgICAgICAgICAgcGQg
PSAodHBsX3BvdW5kX2RhdGEqKWMtPmRhdGE7CisgICAgICAgICAgICAgICAgICAgIGl0ZXJtYXgg
PSBjLT5udW07CisgICAgICAgICAgICAgICAgICAgIGlmICgrKyhwZC0+aXRlcm51bSkgPCBpdGVy
bWF4KSB7CisgICAgICAgICAgICAgICAgICAgICAgYyA9IHBkLT5pdGVyX3N0YXJ0X25vZGU7Cisg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7IC8qIGxvb3AgY29tcGxldGUuICovCisgICAgICAgICAgICAgICAgICAgICAgcGQtPml0ZXJu
dW0gPSAwOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHRwbF9ob29r
LmZhdGFsKCJ1bnN1cHBvcnRlZCBmb3JtYXQgY2hhcmFjdGVyXG4iKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjPWMtPm5leHQ7CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGR2OworfQorCisvKiBmaWd1cmUgdGhlIHNlcmlhbGl6
YXRpb24gb3V0cHV0IHNpemUgbmVlZGVkIGZvciB0cGwgd2hvc2Ugcm9vdCBpcyBuKi8KK3N0YXRp
YyBzaXplX3QgdHBsX3Nlcl9vc3oodHBsX25vZGUgKm4pIHsKKyAgICB0cGxfbm9kZSAqYywgKm5w
OworICAgIHNpemVfdCBzeiwgaXRlcm1heDsKKyAgICB0cGxfYmluICpiaW5wOworICAgIGNoYXIg
KnN0cnA7CisgICAgdHBsX3BvdW5kX2RhdGEgKnBkOworICAgIGludCBpOworCisgICAgLyogaGFu
ZGxlIHRoZSByb290IG5vZGUgT05MWSAoc3VidHJlZSdzIHNlcl9vc3ogaGF2ZSBiZWVuIGJ1YmJs
ZWQtdXApICovCisgICAgaWYgKG4tPnR5cGUgIT0gVFBMX1RZUEVfUk9PVCkgeworICAgICAgICB0
cGxfaG9vay5mYXRhbCgiaW50ZXJuYWwgZXJyb3I6IHRwbF9zZXJfb3N6IG9uIG5vbi1yb290IG5v
ZGVcbiIpOworICAgIH0KKworICAgIHN6ID0gbi0+c2VyX29zejsgICAgLyogc3RhcnQgd2l0aCBm
aXhlZCBvdmVyaGVhZCwgYWxyZWFkeSBzdG9yZWQgKi8KKyAgICBjPW4tPmNoaWxkcmVuOworICAg
IHdoaWxlIChjKSB7CisgICAgICAgIHN3aXRjaCAoYy0+dHlwZSkgeworICAgICAgICAgICAgY2Fz
ZSBUUExfVFlQRV9CWVRFOgorICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9ET1VCTEU6CisgICAg
ICAgICAgICBjYXNlIFRQTF9UWVBFX0lOVDMyOgorICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9V
SU5UMzI6CisgICAgICAgICAgICBjYXNlIFRQTF9UWVBFX0lOVDY0OgorICAgICAgICAgICAgY2Fz
ZSBUUExfVFlQRV9VSU5UNjQ6CisgICAgICAgICAgICBjYXNlIFRQTF9UWVBFX0lOVDE2OgorICAg
ICAgICAgICAgY2FzZSBUUExfVFlQRV9VSU5UMTY6CisgICAgICAgICAgICAgICAgc3ogKz0gdHBs
X3R5cGVzW2MtPnR5cGVdLnN6ICogYy0+bnVtOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBUUExfVFlQRV9CSU46CisgICAgICAgICAgICAgICAgc3ogKz0gc2l6ZW9m
KHVpbnQzMl90KTsgIC8qIGJpbmFyeSBidWYgbGVuICovCisgICAgICAgICAgICAgICAgbWVtY3B5
KCZiaW5wLGMtPmRhdGEsc2l6ZW9mKHRwbF9iaW4qKSk7IC8qIGNwIHRvIGFsaWduZWQgKi8KKyAg
ICAgICAgICAgICAgICBzeiArPSBiaW5wLT5zejsgCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIFRQTF9UWVBFX1NUUjoKKyAgICAgICAgICAgICAgICBmb3IoaT0wOyBp
IDwgYy0+bnVtOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgIHN6ICs9IHNpemVvZih1aW50MzJf
dCk7ICAvKiBzdHJpbmcgbGVuICovCisgICAgICAgICAgICAgICAgICBtZW1jcHkoJnN0cnAsJigo
Y2hhcioqKWMtPmRhdGEpW2ldLHNpemVvZihjaGFyKikpOyAvKiBjcCB0byBhbGlnbmVkICovCisg
ICAgICAgICAgICAgICAgICBzeiArPSBzdHJwID8gc3RybGVuKHN0cnApIDogMDsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFRQTF9U
WVBFX0FSWToKKyAgICAgICAgICAgICAgICBzeiArPSBzaXplb2YodWludDMyX3QpOyAgLyogYXJy
YXkgbGVuICovCisgICAgICAgICAgICAgICAgc3ogKz0gYy0+c2VyX29zejsgICAgICAgIC8qIGJ1
YmJsZWQtdXAgY2hpbGQgYXJyYXkgc2VyX29zeiAqLworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9QT1VORDoKKyAgICAgICAgICAgICAgICAvKiBpdGVy
YXRlIG92ZXIgdGhlIHByZWNlZGluZyBub2RlcyAqLworICAgICAgICAgICAgICAgIGl0ZXJtYXgg
PSBjLT5udW07CisgICAgICAgICAgICAgICAgcGQgPSAodHBsX3BvdW5kX2RhdGEqKWMtPmRhdGE7
CisgICAgICAgICAgICAgICAgaWYgKCsrKHBkLT5pdGVybnVtKSA8IGl0ZXJtYXgpIHsKKyAgICAg
ICAgICAgICAgICAgIGZvcihucD1wZC0+aXRlcl9zdGFydF9ub2RlOyBucCAhPSBjOyBucCA9IG5w
LT5uZXh0KSB7CisgICAgICAgICAgICAgICAgICAgICBucC0+ZGF0YSA9IChjaGFyKikobnAtPmRh
dGEpICsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0cGxfdHlwZXNbbnAtPnR5
cGVdLnN6ICogbnAtPm51bSk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICBjID0gcGQtPml0ZXJfc3RhcnRfbm9kZTsKKyAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8qIGxvb3AgY29tcGxldGUuICovCisgICAgICAgICAg
ICAgICAgICBwZC0+aXRlcm51bSA9IDA7CisgICAgICAgICAgICAgICAgICBmb3IobnA9cGQtPml0
ZXJfc3RhcnRfbm9kZTsgbnAgIT0gYzsgbnAgPSBucC0+bmV4dCkgeworICAgICAgICAgICAgICAg
ICAgICAgbnAtPmRhdGEgPSAoY2hhciopKG5wLT5kYXRhKSAtICgoaXRlcm1heC0xKSAqIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cGxfdHlw
ZXNbbnAtPnR5cGVdLnN6ICogCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5wLT5udW0pOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgdHBsX2hvb2suZmF0YWwoInVuc3VwcG9ydGVkIGZvcm1hdCBjaGFyYWN0
ZXJcbiIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGM9Yy0+
bmV4dDsKKyAgICB9CisgICAgcmV0dXJuIHN6OworfQorCisKK1RQTF9BUEkgaW50IHRwbF9kdW1w
KHRwbF9ub2RlICpyLCBpbnQgbW9kZSwgLi4uKSB7CisgICAgdmFfbGlzdCBhcDsKKyAgICBjaGFy
ICpmaWxlbmFtZSwgKmJ1ZnY7CisgICAgdm9pZCAqKmFkZHJfb3V0LCpidWYsICpwYV9hZGRyOwor
ICAgIGludCBmZCxyYz0wOworICAgIHNpemVfdCBzeiwqc3pfb3V0LCBwYV9zejsKKworICAgIGlm
ICgoKHRwbF9yb290X2RhdGEqKShyLT5kYXRhKSktPmZsYWdzICYgVFBMX1JET05MWSkgeyAgLyog
dW51c3VhbCAqLworICAgICAgICB0cGxfaG9vay5vb3BzKCJlcnJvcjogdHBsX2R1bXAgY2FsbGVk
IGZvciBhIGxvYWRlZCB0cGxcbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAg
c3ogPSB0cGxfc2VyX29zeihyKTsgLyogY29tcHV0ZSB0aGUgc2l6ZSBuZWVkZWQgdG8gc2VyaWFs
aXplICAqLworCisgICAgdmFfc3RhcnQoYXAsbW9kZSk7CisgICAgaWYgKG1vZGUgJiBUUExfRklM
RSkgeworICAgICAgICBmaWxlbmFtZSA9IHZhX2FyZyhhcCxjaGFyKik7CisgICAgICAgIGZkID0g
dHBsX21tYXBfb3V0cHV0X2ZpbGUoZmlsZW5hbWUsIHN6LCAmYnVmKTsKKyAgICAgICAgaWYgKGZk
ID09IC0xKSByYyA9IC0xOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJjID0gdHBsX2R1
bXBfdG9fbWVtKHIsYnVmLHN6KTsKKyAgICAgICAgICAgIGlmIChtc3luYyhidWYsc3osTVNfU1lO
QykgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICB0cGxfaG9vay5vb3BzKCJtc3luYyBmYWlsZWQg
b24gZmQgJWQ6ICVzXG4iLCBmZCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIChtdW5tYXAoYnVmLCBzeikgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICB0
cGxfaG9vay5vb3BzKCJtdW5tYXAgZmFpbGVkIG9uIGZkICVkOiAlc1xuIiwgZmQsIHN0cmVycm9y
KGVycm5vKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjbG9zZShmZCk7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgaWYgKG1vZGUgJiBUUExfRkQpIHsKKyAgICAgICAgZmQgPSB2YV9hcmco
YXAsIGludCk7CisgICAgICAgIGlmICggKGJ1ZiA9IHRwbF9ob29rLm1hbGxvYyhzeikpID09IE5V
TEwpIGZhdGFsX29vbSgpOworICAgICAgICB0cGxfZHVtcF90b19tZW0ocixidWYsc3opOworICAg
ICAgICBidWZ2ID0gYnVmOworICAgICAgICBkbyB7CisgICAgICAgICAgICByYyA9IHdyaXRlKGZk
LGJ1ZnYsc3opOworICAgICAgICAgICAgaWYgKHJjID4gMCkgeworICAgICAgICAgICAgICAgIHN6
IC09IHJjOworICAgICAgICAgICAgICAgIGJ1ZnYgKz0gcmM7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKHJjID09IC0xKSB7CisgICAgICAgICAgICAgICAgaWYgKGVycm5vID09IEVJTlRSIHx8IGVy
cm5vID09IEVBR0FJTikgY29udGludWU7CisgICAgICAgICAgICAgICAgdHBsX2hvb2sub29wcygi
ZXJyb3Igd3JpdGluZyB0byBmZCAlZDogJXNcbiIsIGZkLCBzdHJlcnJvcihlcnJubykpOworICAg
ICAgICAgICAgICAgIGZyZWUoYnVmKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gd2hpbGUgKHN6ID4gMCk7CisgICAgICAgIGZyZWUoYnVmKTsK
KyAgICAgICAgcmMgPSAwOworICAgIH0gZWxzZSBpZiAobW9kZSAmIFRQTF9NRU0pIHsKKyAgICAg
ICAgaWYgKG1vZGUgJiBUUExfUFJFQUxMT0NEKSB7IC8qIGNhbGxlciBhbGxvY2F0ZWQgKi8KKyAg
ICAgICAgICBwYV9hZGRyID0gKHZvaWQqKXZhX2FyZyhhcCwgdm9pZCopOworICAgICAgICAgIHBh
X3N6ID0gdmFfYXJnKGFwLCBzaXplX3QpOworICAgICAgICAgIGlmIChwYV9zeiA8IHN6KSB7Cisg
ICAgICAgICAgICAgIHRwbF9ob29rLm9vcHMoInRwbF9kdW1wOiBidWZmZXIgdG9vIHNtYWxsLCBu
ZWVkICVkIGJ5dGVzXG4iLCBzeik7CisgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAg
ICB9CisgICAgICAgICAgcmM9dHBsX2R1bXBfdG9fbWVtKHIscGFfYWRkcixzeik7CisgICAgICAg
IH0gZWxzZSB7IC8qIHdlIGFsbG9jYXRlICovCisgICAgICAgICAgYWRkcl9vdXQgPSAodm9pZCoq
KXZhX2FyZyhhcCwgdm9pZCopOworICAgICAgICAgIHN6X291dCA9IHZhX2FyZyhhcCwgc2l6ZV90
Kik7CisgICAgICAgICAgaWYgKCAoYnVmID0gdHBsX2hvb2subWFsbG9jKHN6KSkgPT0gTlVMTCkg
ZmF0YWxfb29tKCk7CisgICAgICAgICAgKnN6X291dCA9IHN6OworICAgICAgICAgICphZGRyX291
dCA9IGJ1ZjsKKyAgICAgICAgICByYz10cGxfZHVtcF90b19tZW0ocixidWYsc3opOworICAgICAg
ICB9CisgICAgfSBlbHNlIGlmIChtb2RlICYgVFBMX0dFVFNJWkUpIHsKKyAgICAgICAgc3pfb3V0
ID0gdmFfYXJnKGFwLCBzaXplX3QqKTsKKyAgICAgICAgKnN6X291dCA9IHN6OworICAgIH0gZWxz
ZSB7CisgICAgICAgIHRwbF9ob29rLm9vcHMoInVuc3VwcG9ydGVkIHRwbF9kdW1wIG1vZGUgJWRc
biIsIG1vZGUpOworICAgICAgICByYz0tMTsKKyAgICB9CisgICAgdmFfZW5kKGFwKTsKKyAgICBy
ZXR1cm4gcmM7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gZXhwZWN0cyB0aGUgY2FsbGVyIHRvIGhh
dmUgc2V0IHVwIGEgbWVtb3J5IGJ1ZmZlciBvZiAKKyAqIGFkZXF1YXRlIHNpemUgdG8gaG9sZCB0
aGUgc2VyaWFsaXplZCB0cGwuIFRoZSBzeiBwYXJhbWV0ZXIgbXVzdCBiZQorICogdGhlIHJlc3Vs
dCBvZiB0cGxfc2VyX29zeihyKS4KKyAqLworc3RhdGljIGludCB0cGxfZHVtcF90b19tZW0odHBs
X25vZGUgKnIsdm9pZCAqYWRkcixzaXplX3Qgc3opIHsKKyAgICB1aW50MzJfdCBzbGVuLCBzejMy
OworICAgIGludCAqZnhsZW5zLCBudW1fZnhsZW5zLCBpOworICAgIHZvaWQgKmR2OworICAgIGNo
YXIgKmZtdCxmbGFnczsKKyAgICB0cGxfbm9kZSAqYywgKm5wOworICAgIHRwbF9wb3VuZF9kYXRh
ICpwZDsKKyAgICBzaXplX3QgaXRlcm1heDsKKworICAgIGZtdCA9IHRwbF9mbXQocik7CisgICAg
ZmxhZ3MgPSAwOworICAgIGlmICh0cGxfY3B1X2JpZ2VuZGlhbigpKSBmbGFncyB8PSBUUExfRkxf
QklHRU5ESUFOOworICAgIGlmIChzdHJjaHIoZm10LCdzJykpIGZsYWdzIHw9IFRQTF9GTF9OVUxM
U1RSSU5HUzsKKyAgICBzejMyID0gc3o7IAorCisgICAgZHYgPSBhZGRyOworICAgIGR2ID0gdHBs
X2NwdihkdixUUExfTUFHSUMsMyk7ICAgICAgICAgLyogY29weSB0cGwgbWFnaWMgcHJlZml4ICov
CisgICAgZHYgPSB0cGxfY3B2KGR2LCZmbGFncywxKTsgICAgICAgICAgICAvKiBjb3B5IGZsYWdz
IGJ5dGUgKi8KKyAgICBkdiA9IHRwbF9jcHYoZHYsJnN6MzIsc2l6ZW9mKHVpbnQzMl90KSk7Lyog
b3ZlcmFsbCBsZW5ndGggKGluY2x1c2l2ZSkgKi8KKyAgICBkdiA9IHRwbF9jcHYoZHYsZm10LHN0
cmxlbihmbXQpKzEpOyAgIC8qIGNvcHkgZm9ybWF0IHdpdGggTlVMLXRlcm0gKi8KKyAgICBmeGxl
bnMgPSB0cGxfZnhsZW5zKHIsJm51bV9meGxlbnMpOworICAgIGR2ID0gdHBsX2NwdihkdixmeGxl
bnMsbnVtX2Z4bGVucypzaXplb2YodWludDMyX3QpKTsvKiBmbXQgIyBsZW5ndGhzICovCisKKyAg
ICAvKiBzZXJpYWxpemUgdGhlIHRwbCBjb250ZW50LCBpdGVyYXRpbmcgb3ZlciBkaXJlY3QgY2hp
bGRyZW4gb2Ygcm9vdCAqLworICAgIGMgPSByLT5jaGlsZHJlbjsKKyAgICB3aGlsZSAoYykgewor
ICAgICAgICBzd2l0Y2ggKGMtPnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfQllU
RToKKyAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfRE9VQkxFOgorICAgICAgICAgICAgY2FzZSBU
UExfVFlQRV9JTlQzMjoKKyAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfVUlOVDMyOgorICAgICAg
ICAgICAgY2FzZSBUUExfVFlQRV9JTlQ2NDoKKyAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfVUlO
VDY0OgorICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9JTlQxNjoKKyAgICAgICAgICAgIGNhc2Ug
VFBMX1RZUEVfVUlOVDE2OgorICAgICAgICAgICAgICAgIGR2ID0gdHBsX2NwdihkdixjLT5kYXRh
LHRwbF90eXBlc1tjLT50eXBlXS5zeiAqIGMtPm51bSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIFRQTF9UWVBFX0JJTjoKKyAgICAgICAgICAgICAgICBzbGVuID0g
KCoodHBsX2JpbioqKShjLT5kYXRhKSktPnN6OworICAgICAgICAgICAgICAgIGR2ID0gdHBsX2Nw
dihkdiwmc2xlbixzaXplb2YodWludDMyX3QpKTsgIC8qIGJ1ZmZlciBsZW4gKi8KKyAgICAgICAg
ICAgICAgICBkdiA9IHRwbF9jcHYoZHYsKCoodHBsX2JpbioqKShjLT5kYXRhKSktPmFkZHIsc2xl
bik7IC8qIGJ1ZiAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBU
UExfVFlQRV9TVFI6CisgICAgICAgICAgICAgICAgZm9yKGk9MDsgaSA8IGMtPm51bTsgaSsrKSB7
CisgICAgICAgICAgICAgICAgICBjaGFyICpzdHIgPSAoKGNoYXIqKiljLT5kYXRhKVtpXTsKKyAg
ICAgICAgICAgICAgICAgIHNsZW4gPSBzdHIgPyBzdHJsZW4oc3RyKSsxIDogMDsKKyAgICAgICAg
ICAgICAgICAgIGR2ID0gdHBsX2Nwdihkdiwmc2xlbixzaXplb2YodWludDMyX3QpKTsgIC8qIHN0
cmluZyBsZW4gKi8KKyAgICAgICAgICAgICAgICAgIGlmIChzbGVuPjEpIGR2ID0gdHBsX2Nwdihk
dixzdHIsc2xlbi0xKTsgLypzdHJpbmcqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfQVJZOgorICAgICAgICAgICAg
ICAgIGR2ID0gdHBsX2R1bXBfYXR5cChjLCh0cGxfYXR5cCopYy0+ZGF0YSxkdik7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFRQTF9UWVBFX1BPVU5EOgorICAgICAg
ICAgICAgICAgICBwZCA9ICh0cGxfcG91bmRfZGF0YSopYy0+ZGF0YTsKKyAgICAgICAgICAgICAg
ICAgaXRlcm1heCA9IGMtPm51bTsKKyAgICAgICAgICAgICAgICAgaWYgKCsrKHBkLT5pdGVybnVt
KSA8IGl0ZXJtYXgpIHsKKworICAgICAgICAgICAgICAgICAgIC8qIGluIHN0YXJ0IG9yIG1pZHN0
IG9mIGxvb3AuIGFkdmFuY2UgZGF0YSBwb2ludGVycy4gKi8KKyAgICAgICAgICAgICAgICAgICBm
b3IobnA9cGQtPml0ZXJfc3RhcnRfbm9kZTsgbnAgIT0gYzsgbnAgPSBucC0+bmV4dCkgeworICAg
ICAgICAgICAgICAgICAgICAgbnAtPmRhdGEgPSAoY2hhciopKG5wLT5kYXRhKSArIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAodHBsX3R5cGVzW25wLT50eXBlXS5zeiAqIG5wLT5u
dW0pOworICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAvKiBkbyBuZXh0
IGl0ZXJhdGlvbiAqLworICAgICAgICAgICAgICAgICAgIGMgPSBwZC0+aXRlcl9zdGFydF9ub2Rl
OworICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7IC8qIGxvb3AgY29tcGxldGUuICovCisgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgIC8qIHJlc2V0IGl0ZXJhdGlvbiBpbmRleCBhbmQgYWRkci9kYXRhIHBvaW50ZXJzLiAq
LworICAgICAgICAgICAgICAgICAgIHBkLT5pdGVybnVtID0gMDsKKyAgICAgICAgICAgICAgICAg
ICBmb3IobnA9cGQtPml0ZXJfc3RhcnRfbm9kZTsgbnAgIT0gYzsgbnAgPSBucC0+bmV4dCkgewor
ICAgICAgICAgICAgICAgICAgICAgbnAtPmRhdGEgPSAoY2hhciopKG5wLT5kYXRhKSAtICgoaXRl
cm1heC0xKSAqIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0cGxfdHlwZXNbbnAtPnR5cGVdLnN6ICogCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5wLT5udW0pOworICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICB0cGxfaG9vay5mYXRhbCgidW5zdXBw
b3J0ZWQgZm9ybWF0IGNoYXJhY3RlclxuIik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgYyA9IGMtPm5leHQ7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisK
K3N0YXRpYyBpbnQgdHBsX2NwdV9iaWdlbmRpYW4oKSB7CisgICB1bnNpZ25lZCBpID0gMTsKKyAg
IGNoYXIgKmM7CisgICBjID0gKGNoYXIqKSZpOworICAgcmV0dXJuIChjWzBdID09IDEgPyAwIDog
MSk7Cit9CisKKworLyoKKyAqIGFsZ29yaXRobSBmb3Igc2FuaXR5LWNoZWNraW5nIGEgdHBsIGlt
YWdlOgorICogc2NhbiB0aGUgdHBsIHdoaWxzdCBub3QgZXhjZWVkaW5nIHRoZSBidWZmZXIgc2l6
ZSAoYnVmc3opICwKKyAqIGZvcm11bGF0aW5nIGEgY2FsY3VsYXRlZCAoZXhwZWN0ZWQpIHNpemUg
b2YgdGhlIHRwbCBiYXNlZAorICogb24gd2Fsa2luZyBpdHMgZGF0YS4gV2hlbiBjYWxjc2l6ZSBo
YXMgYmVlbiBjYWxjdWxhdGVkIGl0CisgKiBzaG91bGQgZXhhY3RseSBtYXRjaCB0aGUgYnVmZmVy
IHNpemUgKGJ1ZnN6KSBhbmQgdGhlIGludGVybmFsCisgKiByZWNvcmRlZCBzaXplIChpbnRsc3op
CisgKi8KK3N0YXRpYyBpbnQgdHBsX3Nhbml0eSh0cGxfbm9kZSAqciwgaW50IGV4Y2Vzc19vaykg
eworICAgIHVpbnQzMl90IGludGxzejsKKyAgICBpbnQgZm91bmRfbnVsPTAscmMsIG9jdG90aG9y
cGVzPTAsIG51bV9meGxlbnMsICpmeGxlbnMsIGZsZW47CisgICAgdm9pZCAqZCwgKmR2OworICAg
IGNoYXIgaW50bGZsYWdzLCAqZm10LCBjLCAqbWFwZm10OworICAgIHNpemVfdCBidWZzeiwgc2Vy
bGVuOworCisgICAgZCA9ICgodHBsX3Jvb3RfZGF0YSopKHItPmRhdGEpKS0+bW1hcC50ZXh0Owor
ICAgIGJ1ZnN6ID0gKCh0cGxfcm9vdF9kYXRhKikoci0+ZGF0YSkpLT5tbWFwLnRleHRfc3o7CisK
KyAgICBkdiA9IGQ7CisgICAgaWYgKGJ1ZnN6IDwgKDQgKyBzaXplb2YodWludDMyX3QpICsgMSkp
IHJldHVybiBFUlJfTk9UX01JTlNJWkU7IC8qIG1pbiBzejogbWFnaWMrZmxhZ3MrbGVuK251bCAq
LworICAgIGlmIChtZW1jbXAoZHYsVFBMX01BR0lDLCAzKSAhPSAwKSByZXR1cm4gRVJSX01BR0lD
X01JU01BVENIOyAvKiBtaXNzaW5nIHRwbCBtYWdpYyBwcmVmaXggKi8KKyAgICBpZiAodHBsX25l
ZWRzX2VuZGlhbl9zd2FwKGR2KSkgKCh0cGxfcm9vdF9kYXRhKikoci0+ZGF0YSkpLT5mbGFncyB8
PSBUUExfWEVORElBTjsKKyAgICBkdiA9ICh2b2lkKikoKHVpbnRwdHJfdClkdiArIDMpOworICAg
IG1lbWNweSgmaW50bGZsYWdzLGR2LHNpemVvZihjaGFyKSk7ICAvKiBleHRyYWN0IGZsYWdzICov
CisgICAgaWYgKGludGxmbGFncyAmIH5UUExfU1VQUE9SVEVEX0JJVEZMQUdTKSByZXR1cm4gRVJS
X1VOU1VQUE9SVEVEX0ZMQUdTOworICAgIC8qIFRQTDEuMyBzdG9yZXMgc3RyaW5ncyB3aXRoIGEg
Imxlbmd0aCsxIiBwcmVmaXggdG8gZGlzY2VybiBOVUxMIHN0cmluZ3MgZnJvbQorICAgICAgIGVt
cHR5IHN0cmluZ3MgZnJvbSBub24tZW1wdHkgc3RyaW5nczsgVFBMMS4yIG9ubHkgaGFuZGxlZCB0
aGUgbGF0dGVyIHR3by4gCisgICAgICAgU28gd2UgbmVlZCB0byBiZSBtaW5kZnVsIG9mIHdoaWNo
IHN0cmluZyBmb3JtYXQgd2UncmUgcmVhZGluZyBmcm9tLiAqLworICAgIGlmICghKGludGxmbGFn
cyAmIFRQTF9GTF9OVUxMU1RSSU5HUykpIHsKKyAgICAgICgodHBsX3Jvb3RfZGF0YSopKHItPmRh
dGEpKS0+ZmxhZ3MgfD0gVFBMX09MRF9TVFJJTkdfRk1UOworICAgIH0KKyAgICBkdiA9ICh2b2lk
KikoKHVpbnRwdHJfdClkdiArIDEpOworICAgIG1lbWNweSgmaW50bHN6LGR2LHNpemVvZih1aW50
MzJfdCkpOyAgLyogZXh0cmFjdCBpbnRlcm5hbCBzaXplICovCisgICAgaWYgKCgodHBsX3Jvb3Rf
ZGF0YSopKHItPmRhdGEpKS0+ZmxhZ3MgJiBUUExfWEVORElBTikgdHBsX2J5dGVzd2FwKCZpbnRs
c3osIHNpemVvZih1aW50MzJfdCkpOworICAgIGlmICghZXhjZXNzX29rICYmIChpbnRsc3ogIT0g
YnVmc3opKSByZXR1cm4gRVJSX0lOQ09OU0lTVEVOVF9TWjsgIC8qIGluY29uc2lzZW50IGJ1ZmZl
ci9pbnRlcm5hbCBzaXplICovCisgICAgZHYgPSAodm9pZCopKCh1aW50cHRyX3QpZHYgKyBzaXpl
b2YodWludDMyX3QpKTsKKworICAgIC8qIGR2IHBvaW50cyB0byB0aGUgc3RhcnQgb2YgdGhlIGZv
cm1hdCBzdHJpbmcuIExvb2sgZm9yIG51bCB3L2luIGJ1ZiBzeiAqLworICAgIGZtdCA9IChjaGFy
KilkdjsKKyAgICB3aGlsZSAoKHVpbnRwdHJfdClkdi0odWludHB0cl90KWQgPCBidWZzeiAmJiAh
Zm91bmRfbnVsKSB7CisgICAgICAgIGlmICggKGMgPSAqKGNoYXIqKWR2KSAhPSAnXDAnKSB7Cisg
ICAgICAgICAgICBpZiAoc3RyY2hyKHRwbF9mbXRfY2hhcnMsYykgPT0gTlVMTCkgCisgICAgICAg
ICAgICAgICByZXR1cm4gRVJSX0ZNVF9JTlZBTElEOyAgLyogaW52YWxpZCBjaGFyIGluIGZvcm1h
dCBzdHJpbmcgKi8KKyAgICAgICAgICAgIGlmICggKGMgPSAqKGNoYXIqKWR2KSA9PSAnIycpIG9j
dG90aG9ycGVzKys7CisgICAgICAgICAgICBkdiA9ICh2b2lkKikoKHVpbnRwdHJfdClkdiArIDEp
OworICAgICAgICB9CisgICAgICAgIGVsc2UgZm91bmRfbnVsID0gMTsKKyAgICB9CisgICAgaWYg
KCFmb3VuZF9udWwpIHJldHVybiBFUlJfRk1UX01JU1NJTkdfTlVMOyAgLyogcnVuYXdheSBmb3Jt
YXQgc3RyaW5nICovCisgICAgZHYgPSAodm9pZCopKCh1aW50cHRyX3QpZHYgKyAxKTsgICAvKiBh
ZHZhbmNlIHRvIG9jdG90aG9ycGUgbGVuZ3RocyBidWZmZXIgKi8KKyAgICAKKyAgICAvKiBjb21w
YXJlIHRoZSBtYXAgZm9ybWF0IHRvIHRoZSBmb3JtYXQgb2YgdGhpcyB0cGwgaW1hZ2UgKi8KKyAg
ICBtYXBmbXQgPSB0cGxfZm10KHIpOworICAgIHJjID0gc3RyY21wKG1hcGZtdCxmbXQpOworICAg
IGlmIChyYyAhPSAwKSByZXR1cm4gRVJSX0ZNVF9NSVNNQVRDSDsgCisKKyAgICAvKiBjb21wYXJl
IG9jdG90aG9ycGUgbGVuZ3RocyBpbiBpbWFnZSB0byB0aGUgbWFwcGVkIHZhbHVlcyAqLworICAg
IGlmICgoKCh1aW50cHRyX3QpZHYgKyAob2N0b3Rob3JwZXMgKiA0KSkgLSAodWludHB0cl90KWQp
ID4gYnVmc3opIHJldHVybiBFUlJfSU5DT05TSVNURU5UX1NaNDsKKyAgICBmeGxlbnMgPSB0cGxf
ZnhsZW5zKHIsJm51bV9meGxlbnMpOyAgLyogbWFwcGVkIGZ4bGVucyAqLworICAgIHdoaWxlKG51
bV9meGxlbnMtLSkgeworICAgICAgICBtZW1jcHkoJmZsZW4sZHYsc2l6ZW9mKHVpbnQzMl90KSk7
IC8qIHN0b3JlZCBmbGVuICovCisgICAgICAgIGlmICgoKHRwbF9yb290X2RhdGEqKShyLT5kYXRh
KSktPmZsYWdzICYgVFBMX1hFTkRJQU4pIHRwbF9ieXRlc3dhcCgmZmxlbiwgc2l6ZW9mKHVpbnQz
Ml90KSk7CisgICAgICAgIGlmIChmbGVuICE9ICpmeGxlbnMpIHJldHVybiBFUlJfRkxFTl9NSVNN
QVRDSDsKKyAgICAgICAgZHYgPSAodm9pZCopKCh1aW50cHRyX3QpZHYgKyBzaXplb2YodWludDMy
X3QpKTsKKyAgICAgICAgZnhsZW5zKys7CisgICAgfQorCisgICAgLyogZHYgbm93IHBvaW50cyB0
byBiZWdpbm5pbmcgb2YgZGF0YSAqLworICAgIHJjID0gdHBsX3NlcmxlbihyLHIsZHYsJnNlcmxl
bik7ICAvKiBnZXQgY29tcHV0ZWQgc2VybGVuIG9mIGRhdGEgcGFydCAqLworICAgIGlmIChyYyA9
PSAtMSkgcmV0dXJuIEVSUl9JTkNPTlNJU1RFTlRfU1oyOyAvKiBpbnRlcm5hbCBpbmNvbnNpc3Rl
bmN5IGluIHRwbCBpbWFnZSAqLworICAgIHNlcmxlbiArPSAoKHVpbnRwdHJfdClkdiAtICh1aW50
cHRyX3QpZCk7ICAgLyogYWRkIGJhY2sgc2VybGVuIG9mIHByZWFtYmxlIHBhcnQgKi8KKyAgICBp
ZiAoZXhjZXNzX29rICYmIChidWZzeiA8IHNlcmxlbikpIHJldHVybiBFUlJfSU5DT05TSVNURU5U
X1NaMzsgIAorICAgIGlmICghZXhjZXNzX29rICYmIChzZXJsZW4gIT0gYnVmc3opKSByZXR1cm4g
RVJSX0lOQ09OU0lTVEVOVF9TWjM7ICAvKiBidWZmZXIvaW50ZXJuYWwgc3ogZXhjZWVkcyBzZXJs
ZW4gKi8KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgKnRwbF9maW5kX2RhdGFfc3Rh
cnQodm9pZCAqZCkgeworICAgIGludCBvY3RvdGhvcnBlcz0wOworICAgIGQgPSAodm9pZCopKCh1
aW50cHRyX3QpZCArIDQpOyAvKiBza2lwIFRQTF9NQUdJQyBhbmQgZmxhZ3MgYnl0ZSAqLworICAg
IGQgPSAodm9pZCopKCh1aW50cHRyX3QpZCArIDQpOyAvKiBza2lwIGludDMyIG92ZXJhbGwgbGVu
ICovCisgICAgd2hpbGUoKihjaGFyKilkICE9ICdcMCcpIHsKKyAgICAgICAgaWYgKCooY2hhciop
ZCA9PSAnIycpIG9jdG90aG9ycGVzKys7CisgICAgICAgIGQgPSAodm9pZCopKCh1aW50cHRyX3Qp
ZCArIDEpOworICAgIH0KKyAgICBkID0gKHZvaWQqKSgodWludHB0cl90KWQgKyAgMSk7ICAvKiBz
a2lwIE5VTCAqLworICAgIGQgPSAodm9pZCopKCh1aW50cHRyX3QpZCArICAob2N0b3Rob3JwZXMg
KiBzaXplb2YodWludDMyX3QpKSk7ICAvKiBza2lwICMgYXJyYXkgbGVucyAqLworICAgIHJldHVy
biBkOworfQorCitzdGF0aWMgaW50IHRwbF9uZWVkc19lbmRpYW5fc3dhcCh2b2lkICpkKSB7Cisg
ICAgY2hhciAqYzsKKyAgICBpbnQgY3B1X2lzX2JpZ2VuZGlhbjsKKyAgICBjID0gKGNoYXIqKWQ7
CisgICAgY3B1X2lzX2JpZ2VuZGlhbiA9IHRwbF9jcHVfYmlnZW5kaWFuKCk7CisgICAgcmV0dXJu
ICgoY1szXSAmIFRQTF9GTF9CSUdFTkRJQU4pID09IGNwdV9pc19iaWdlbmRpYW4pID8gMCA6IDE7
Cit9CisKK3N0YXRpYyBzaXplX3QgdHBsX3NpemVfZm9yKGNoYXIgYykgeworICBpbnQgaTsKKyAg
Zm9yKGk9MDsgaSA8IHNpemVvZih0cGxfdHlwZXMpL3NpemVvZih0cGxfdHlwZXNbMF0pOyBpKysp
IHsKKyAgICBpZiAodHBsX3R5cGVzW2ldLmMgPT0gYykgcmV0dXJuIHRwbF90eXBlc1tpXS5zejsK
KyAgfQorICByZXR1cm4gMDsKK30KKworVFBMX0FQSSBjaGFyKiB0cGxfcGVlayhpbnQgbW9kZSwg
Li4uKSB7CisgICAgdmFfbGlzdCBhcDsKKyAgICBpbnQgeGVuZGlhbj0wLGZvdW5kX251bD0wLG9s
ZF9zdHJpbmdfZm9ybWF0PTA7CisgICAgY2hhciAqZmlsZW5hbWU9TlVMTCwgKmRhdGFwZWVrX2Y9
TlVMTCwgKmRhdGFwZWVrX2MsICpkYXRhcGVla19zOworICAgIHZvaWQgKmFkZHI9TlVMTCwgKmR2
LCAqZGF0YXBlZWtfcD1OVUxMOworICAgIHNpemVfdCBzej0wLCBmbXRfbGVuLCBmaXJzdF9hdG9t
LCBudW1fZnhsZW5zPTA7CisgICAgdWludDMyX3QgZGF0YXBlZWtfc3N6LCBkYXRhcGVla19jc3os
IGRhdGFwZWVrX2ZsZW47CisgICAgdHBsX21tYXBfcmVjIG1yID0gezAsTlVMTCwwfTsKKyAgICBj
aGFyICpmbXQsKmZtdF9jcHk9TlVMTCxjOworICAgIHVpbnQzMl90IGludGxzeiwgKipmeGxlbnM9
TlVMTCwgKm51bV9meGxlbnNfb3V0PU5VTEwsICpmeGxlbnN2OworCisgICAgdmFfc3RhcnQoYXAs
bW9kZSk7CisgICAgaWYgKChtb2RlICYgVFBMX0ZYTEVOUykgJiYgKG1vZGUgJiBUUExfREFUQVBF
RUspKSB7CisgICAgICAgIHRwbF9ob29rLm9vcHMoIlRQTF9GWExFTlMgYW5kIFRQTF9EQVRBUEVF
SyBtdXR1YWxseSBleGNsdXNpdmVcbiIpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorICAg
IGlmIChtb2RlICYgVFBMX0ZJTEUpIGZpbGVuYW1lID0gdmFfYXJnKGFwLGNoYXIgKik7CisgICAg
ZWxzZSBpZiAobW9kZSAmIFRQTF9NRU0pIHsKKyAgICAgICAgYWRkciA9IHZhX2FyZyhhcCx2b2lk
ICopOworICAgICAgICBzeiA9IHZhX2FyZyhhcCxzaXplX3QpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIHRwbF9ob29rLm9vcHMoInVuc3VwcG9ydGVkIHRwbF9wZWVrIG1vZGUgJWRcbiIsIG1vZGUp
OworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorICAgIGlmIChtb2RlICYgVFBMX0RBVEFQRUVL
KSB7CisgICAgICAgIGRhdGFwZWVrX2YgPSB2YV9hcmcoYXAsIGNoYXIqKTsKKyAgICB9CisgICAg
aWYgKG1vZGUgJiBUUExfRlhMRU5TKSB7CisgICAgICAgIG51bV9meGxlbnNfb3V0ID0gdmFfYXJn
KGFwLHVpbnQzMl90ICopOworICAgICAgICBmeGxlbnMgPSB2YV9hcmcoYXAsdWludDMyX3QgKiop
OworICAgICAgICAqbnVtX2Z4bGVuc19vdXQgPSAwOworICAgICAgICAqZnhsZW5zID0gTlVMTDsK
KyAgICB9CisKKyAgICBpZiAobW9kZSAmIFRQTF9GSUxFKSB7CisgICAgICAgIGlmICh0cGxfbW1h
cF9maWxlKGZpbGVuYW1lLCAmbXIpICE9IDApIHsKKyAgICAgICAgICAgIHRwbF9ob29rLm9vcHMo
InRwbF9wZWVrIGZhaWxlZCBmb3IgZmlsZSAlc1xuIiwgZmlsZW5hbWUpOworICAgICAgICAgICAg
Z290byBmYWlsOworICAgICAgICB9CisgICAgICAgIGFkZHIgPSBtci50ZXh0OworICAgICAgICBz
eiA9IG1yLnRleHRfc3o7CisgICAgfQorCisgICAgZHYgPSBhZGRyOworICAgIGlmIChzeiA8ICg0
ICsgc2l6ZW9mKHVpbnQzMl90KSArIDEpKSBnb3RvIGZhaWw7IC8qIG1pbiBzeiAqLworICAgIGlm
IChtZW1jbXAoZHYsVFBMX01BR0lDLCAzKSAhPSAwKSBnb3RvIGZhaWw7IC8qIG1pc3NpbmcgdHBs
IG1hZ2ljIHByZWZpeCAqLworICAgIGlmICh0cGxfbmVlZHNfZW5kaWFuX3N3YXAoZHYpKSB4ZW5k
aWFuPTE7CisgICAgaWYgKCgoKGNoYXIqKWR2KVszXSAmIFRQTF9GTF9OVUxMU1RSSU5HUyk9PTAp
IG9sZF9zdHJpbmdfZm9ybWF0PTE7CisgICAgZHYgPSAodm9pZCopKCh1aW50cHRyX3QpZHYgKyA0
KTsKKyAgICBtZW1jcHkoJmludGxzeixkdixzaXplb2YodWludDMyX3QpKTsgIC8qIGV4dHJhY3Qg
aW50ZXJuYWwgc2l6ZSAqLworICAgIGlmICh4ZW5kaWFuKSB0cGxfYnl0ZXN3YXAoJmludGxzeiwg
c2l6ZW9mKHVpbnQzMl90KSk7CisgICAgaWYgKGludGxzeiAhPSBzeikgZ290byBmYWlsOyAgLyog
aW5jb25zaXNlbnQgYnVmZmVyL2ludGVybmFsIHNpemUgKi8KKyAgICBkdiA9ICh2b2lkKikoKHVp
bnRwdHJfdClkdiArIHNpemVvZih1aW50MzJfdCkpOworCisgICAgLyogZHYgcG9pbnRzIHRvIHRo
ZSBzdGFydCBvZiB0aGUgZm9ybWF0IHN0cmluZy4gTG9vayBmb3IgbnVsIHcvaW4gYnVmIHN6ICov
CisgICAgZm10ID0gKGNoYXIqKWR2OworICAgIHdoaWxlICgodWludHB0cl90KWR2LSh1aW50cHRy
X3QpYWRkciA8IHN6ICYmICFmb3VuZF9udWwpIHsKKyAgICAgICAgaWYgKCAoYyA9ICooY2hhciop
ZHYpID09ICdcMCcpIHsKKyAgICAgICAgICAgIGZvdW5kX251bCA9IDE7CisgICAgICAgIH0gZWxz
ZSBpZiAoYyA9PSAnIycpIHsKKyAgICAgICAgICBudW1fZnhsZW5zKys7CisgICAgICAgIH0KKyAg
ICAgICAgZHYgPSAodm9pZCopKCh1aW50cHRyX3QpZHYgKyAxKTsKKyAgICB9CisgICAgaWYgKCFm
b3VuZF9udWwpIGdvdG8gZmFpbDsgIC8qIHJ1bmF3YXkgZm9ybWF0IHN0cmluZyAqLworICAgIGZt
dF9sZW4gPSAoY2hhciopZHYgLSBmbXQ7ICAvKiBpbmNsdWRlIHNwYWNlIGZvciBcMCAqLworICAg
IGZtdF9jcHkgPSB0cGxfaG9vay5tYWxsb2MoZm10X2xlbik7CisgICAgaWYgKGZtdF9jcHkgPT0g
TlVMTCkgeworICAgICAgICBmYXRhbF9vb20oKTsKKyAgICB9CisgICAgbWVtY3B5KGZtdF9jcHks
IGZtdCwgZm10X2xlbik7CisKKyAgICAvKiByZXRyaWV2ZSB0aGUgb2N0b3Rob3JwaWMgbGVuZ3Ro
cyBpZiByZXF1ZXN0ZWQgKi8KKyAgICBpZiAobnVtX2Z4bGVucyA+IDApIHsKKyAgICAgIGlmIChz
eiA8ICgodWludHB0cl90KWR2ICsgKG51bV9meGxlbnMgKiBzaXplb2YodWludDMyX3QpKSAtICh1
aW50cHRyX3QpYWRkcikpIHsKKyAgICAgICAgZ290byBmYWlsOworICAgICAgfQorICAgIH0KKyAg
ICBpZiAoKG1vZGUgJiBUUExfRlhMRU5TKSAmJiAobnVtX2Z4bGVucyA+IDApKSB7CisgICAgICAq
ZnhsZW5zID0gdHBsX2hvb2subWFsbG9jKG51bV9meGxlbnMgKiBzaXplb2YodWludDMyX3QpKTsK
KyAgICAgIGlmICgqZnhsZW5zID09IE5VTEwpIHRwbF9ob29rLmZhdGFsKCJvdXQgb2YgbWVtb3J5
Iik7CisgICAgICAqbnVtX2Z4bGVuc19vdXQgPSBudW1fZnhsZW5zOworICAgICAgZnhsZW5zdiA9
ICpmeGxlbnM7CisgICAgICB3aGlsZShudW1fZnhsZW5zLS0pIHsKKyAgICAgICAgICBtZW1jcHko
ZnhsZW5zdixkdixzaXplb2YodWludDMyX3QpKTsgCisgICAgICAgICAgaWYgKHhlbmRpYW4pIHRw
bF9ieXRlc3dhcChmeGxlbnN2LCBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgICBkdiA9ICh2
b2lkKikoKHVpbnRwdHJfdClkdiArIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICAgIGZ4bGVu
c3YrKzsKKyAgICAgIH0KKyAgICB9CisgICAgLyogaWYgY2FsbGVyIHJlcXVlc3RlZCwgcGVlayBp
bnRvIHRoZSBzcGVjaWZpZWQgZGF0YSBlbGVtZW50cyAqLworICAgIGlmIChtb2RlICYgVFBMX0RB
VEFQRUVLKSB7CisKKyAgICAgICBmaXJzdF9hdG9tID0gc3Ryc3BuKGZtdCwgIlMoKSIpOyAvKiBz
a2lwIGFueSBsZWFkaW5nIFMoKSAqLworCisgICAgICAgZGF0YXBlZWtfZmxlbiA9IHN0cmxlbihk
YXRhcGVla19mKTsKKyAgICAgICBpZiAoc3Ryc3BuKGRhdGFwZWVrX2YsIHRwbF9kYXRhcGVla19v
a19jaGFycykgPCBkYXRhcGVla19mbGVuKSB7CisgICAgICAgICB0cGxfaG9vay5vb3BzKCJpbnZh
bGlkIFRQTF9EQVRBUEVFSyBmb3JtYXQ6ICVzXG4iLCBkYXRhcGVla19mKTsKKyAgICAgICAgIHRw
bF9ob29rLmZyZWUoZm10X2NweSk7IGZtdF9jcHkgPSBOVUxMOyAvKiBmYWlsICovCisgICAgICAg
ICBnb3RvIGZhaWw7CisgICAgICAgfQorCisgICAgICAgaWYgKHN0cm5jbXAoICZmbXRbZmlyc3Rf
YXRvbV0sIGRhdGFwZWVrX2YsIGRhdGFwZWVrX2ZsZW4pICE9IDApIHsKKyAgICAgICAgIHRwbF9o
b29rLm9vcHMoIlRQTF9EQVRBUEVFSyBmb3JtYXQgbWlzbWF0Y2hlcyB0cGwgaWFtZ2VcbiIpOwor
ICAgICAgICAgdHBsX2hvb2suZnJlZShmbXRfY3B5KTsgZm10X2NweSA9IE5VTEw7IC8qIGZhaWwg
Ki8KKyAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICB9CisKKyAgICAgICAvKiBhZHZhbmNlIHRv
IGRhdGEgc3RhcnQsIHRoZW4gY29weSBvdXQgcmVxdWVzdGVkIGVsZW1lbnRzICovCisgICAgICAg
ZHYgPSAodm9pZCopKCh1aW50cHRyX3QpZHYgKyAgKG51bV9meGxlbnMgKiBzaXplb2YodWludDMy
X3QpKSk7ICAKKyAgICAgICBmb3IoZGF0YXBlZWtfYyA9IGRhdGFwZWVrX2Y7ICpkYXRhcGVla19j
ICE9ICdcMCc7IGRhdGFwZWVrX2MrKykgeworICAgICAgICAgZGF0YXBlZWtfcCA9IHZhX2FyZyhh
cCwgdm9pZCopOworICAgICAgICAgaWYgKCpkYXRhcGVla19jID09ICdzJykgeyAgLyogc3BlY2lh
bCBoYW5kbGluZyBmb3Igc3RyaW5ncyAqLworICAgICAgICAgICBpZiAoKHVpbnRwdHJfdClkdi0o
dWludHB0cl90KWFkZHIgKyBzaXplb2YodWludDMyX3QpID4gc3opIHsKKyAgICAgICAgICAgICB0
cGxfaG9vay5vb3BzKCJ0cGxfcGVlazogdHBsIGhhcyBpbnN1ZmZpY2llbnQgbGVuZ3RoXG4iKTsK
KyAgICAgICAgICAgICB0cGxfaG9vay5mcmVlKGZtdF9jcHkpOyBmbXRfY3B5ID0gTlVMTDsgLyog
ZmFpbCAqLworICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgfQorICAgICAgICAg
ICBtZW1jcHkoJmRhdGFwZWVrX3NzeixkdixzaXplb2YodWludDMyX3QpKTsgLyogZ2V0IHNsZW4g
Ki8KKyAgICAgICAgICAgaWYgKHhlbmRpYW4pIHRwbF9ieXRlc3dhcCgmZGF0YXBlZWtfc3N6LCBz
aXplb2YodWludDMyX3QpKTsKKyAgICAgICAgICAgaWYgKG9sZF9zdHJpbmdfZm9ybWF0KSBkYXRh
cGVla19zc3orKzsKKyAgICAgICAgICAgZHYgPSAodm9pZCopKCh1aW50cHRyX3QpZHYgKyBzaXpl
b2YodWludDMyX3QpKTsgLyogYWR2LiB0byBzdHIgKi8KKyAgICAgICAgICAgaWYgKGRhdGFwZWVr
X3NzeiA9PSAwKSBkYXRhcGVla19zID0gTlVMTDsKKyAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgaWYgKCh1aW50cHRyX3QpZHYtKHVpbnRwdHJfdClhZGRyICsgZGF0YXBlZWtfc3N6LTEg
PiBzeikgeworICAgICAgICAgICAgICAgdHBsX2hvb2sub29wcygidHBsX3BlZWs6IHRwbCBoYXMg
aW5zdWZmaWNpZW50IGxlbmd0aFxuIik7CisgICAgICAgICAgICAgICB0cGxfaG9vay5mcmVlKGZt
dF9jcHkpOyBmbXRfY3B5ID0gTlVMTDsgLyogZmFpbCAqLworICAgICAgICAgICAgICAgZ290byBm
YWlsOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBkYXRhcGVla19zID0gdHBsX2hvb2su
bWFsbG9jKGRhdGFwZWVrX3Nzeik7CisgICAgICAgICAgICAgaWYgKGRhdGFwZWVrX3MgPT0gTlVM
TCkgZmF0YWxfb29tKCk7CisgICAgICAgICAgICAgbWVtY3B5KGRhdGFwZWVrX3MsIGR2LCBkYXRh
cGVla19zc3otMSk7CisgICAgICAgICAgICAgZGF0YXBlZWtfc1tkYXRhcGVla19zc3otMV0gPSAn
XDAnOworICAgICAgICAgICAgIGR2ID0gKHZvaWQqKSgodWludHB0cl90KWR2ICsgZGF0YXBlZWtf
c3N6LTEpOworICAgICAgICAgICB9CisgICAgICAgICAgICooY2hhcioqKWRhdGFwZWVrX3AgPSBk
YXRhcGVla19zOworICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgZGF0YXBlZWtfY3N6ID0g
dHBsX3NpemVfZm9yKCpkYXRhcGVla19jKTsKKyAgICAgICAgICAgaWYgKCh1aW50cHRyX3QpZHYt
KHVpbnRwdHJfdClhZGRyICsgZGF0YXBlZWtfY3N6ID4gc3opIHsKKyAgICAgICAgICAgICB0cGxf
aG9vay5vb3BzKCJ0cGxfcGVlazogdHBsIGhhcyBpbnN1ZmZpY2llbnQgbGVuZ3RoXG4iKTsKKyAg
ICAgICAgICAgICB0cGxfaG9vay5mcmVlKGZtdF9jcHkpOyBmbXRfY3B5ID0gTlVMTDsgLyogZmFp
bCAqLworICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgfQorICAgICAgICAgICBt
ZW1jcHkoZGF0YXBlZWtfcCwgZHYsIGRhdGFwZWVrX2Nzeik7CisgICAgICAgICAgIGlmICh4ZW5k
aWFuKSB0cGxfYnl0ZXN3YXAoZGF0YXBlZWtfcCwgZGF0YXBlZWtfY3N6KTsKKyAgICAgICAgICAg
ZHYgPSAodm9pZCopKCh1aW50cHRyX3QpZHYgKyBkYXRhcGVla19jc3opOworICAgICAgICAgfQor
ICAgICAgIH0KKyAgICB9CisKK2ZhaWw6CisgICAgdmFfZW5kKGFwKTsKKyAgICBpZiAoKG1vZGUg
JiBUUExfRklMRSkgJiYgbXIudGV4dCAhPSBOVUxMKSB0cGxfdW5tYXBfZmlsZSggJm1yICk7Cisg
ICAgcmV0dXJuIGZtdF9jcHk7Cit9CisKKy8qIHRwbF9qb3QoVFBMX0ZJTEUsICJmaWxlLnRwbCIs
ICJzaSIsICZzLCAmaSk7ICovCisvKiB0cGxfam90KFRQTF9NRU0sICZidWYsICZzeiwgInNpIiwg
JnMsICZpKTsgKi8KKy8qIHRwbF9qb3QoVFBMX0ZELCBmZCwgInNpIiwgJnMsICZpKTsgKi8KK1RQ
TF9BUEkgaW50IHRwbF9qb3QoaW50IG1vZGUsIC4uLikgeworICAgIHZhX2xpc3QgYXA7CisgICAg
Y2hhciAqZmlsZW5hbWUsICpmbXQ7CisgICAgc2l6ZV90ICpzejsKKyAgICBpbnQgZmQsIHJjPTA7
CisgICAgdm9pZCAqKmJ1ZjsKKyAgICB0cGxfbm9kZSAqdG47CisKKyAgICB2YV9zdGFydChhcCxt
b2RlKTsKKyAgICBpZiAobW9kZSAmIFRQTF9GSUxFKSB7CisgICAgICBmaWxlbmFtZSA9IHZhX2Fy
ZyhhcCxjaGFyKik7CisgICAgICBmbXQgPSB2YV9hcmcoYXAsY2hhciopOworICAgICAgdG4gPSB0
cGxfbWFwX3ZhKGZtdCwgYXApOworICAgICAgaWYgKHRuID09IE5VTEwpIHsgcmM9LTE7IGdvdG8g
ZmFpbDt9CisgICAgICB0cGxfcGFjayh0biwgMCk7CisgICAgICByYyA9IHRwbF9kdW1wKHRuLCBU
UExfRklMRSwgZmlsZW5hbWUpOworICAgICAgdHBsX2ZyZWUodG4pOworICAgIH0gZWxzZSBpZiAo
bW9kZSAmIFRQTF9NRU0pIHsKKyAgICAgIGJ1ZiA9IHZhX2FyZyhhcCx2b2lkKik7CisgICAgICBz
eiA9IHZhX2FyZyhhcCxzaXplX3QqKTsKKyAgICAgIGZtdCA9IHZhX2FyZyhhcCxjaGFyKik7Cisg
ICAgICB0biA9IHRwbF9tYXBfdmEoZm10LGFwKTsKKyAgICAgIGlmICh0biA9PSBOVUxMKSB7IHJj
PS0xOyBnb3RvIGZhaWw7fQorICAgICAgdHBsX3BhY2sodG4sMCk7CisgICAgICByYyA9IHRwbF9k
dW1wKHRuLCBUUExfTUVNLCBidWYsIHN6KTsKKyAgICAgIHRwbF9mcmVlKHRuKTsKKyAgICB9IGVs
c2UgaWYgKG1vZGUgJiBUUExfRkQpIHsKKyAgICAgIGZkID0gdmFfYXJnKGFwLGludCk7CisgICAg
ICBmbXQgPSB2YV9hcmcoYXAsY2hhciopOworICAgICAgdG4gPSB0cGxfbWFwX3ZhKGZtdCxhcCk7
CisgICAgICBpZiAodG4gPT0gTlVMTCkgeyByYz0tMTsgZ290byBmYWlsO30KKyAgICAgIHRwbF9w
YWNrKHRuLDApOworICAgICAgcmMgPSB0cGxfZHVtcCh0biwgVFBMX0ZELCBmZCk7CisgICAgICB0
cGxfZnJlZSh0bik7CisgICAgfSBlbHNlIHsKKyAgICAgIHRwbF9ob29rLmZhdGFsKCJpbnZhbGlk
IHRwbF9qb3QgbW9kZVxuIik7CisgICAgfQorCitmYWlsOgorICAgIHZhX2VuZChhcCk7CisgICAg
cmV0dXJuIHJjOworfQorCitUUExfQVBJIGludCB0cGxfbG9hZCh0cGxfbm9kZSAqciwgaW50IG1v
ZGUsIC4uLikgeworICAgIHZhX2xpc3QgYXA7CisgICAgaW50IHJjPTAsZmQ9MDsKKyAgICBjaGFy
ICpmaWxlbmFtZT1OVUxMOworICAgIHZvaWQgKmFkZHI7CisgICAgc2l6ZV90IHN6OworCisgICAg
dmFfc3RhcnQoYXAsbW9kZSk7CisgICAgaWYgKG1vZGUgJiBUUExfRklMRSkgZmlsZW5hbWUgPSB2
YV9hcmcoYXAsY2hhciAqKTsKKyAgICBlbHNlIGlmIChtb2RlICYgVFBMX01FTSkgeworICAgICAg
ICBhZGRyID0gdmFfYXJnKGFwLHZvaWQgKik7CisgICAgICAgIHN6ID0gdmFfYXJnKGFwLHNpemVf
dCk7CisgICAgfSBlbHNlIGlmIChtb2RlICYgVFBMX0ZEKSB7CisgICAgICAgIGZkID0gdmFfYXJn
KGFwLGludCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdHBsX2hvb2sub29wcygidW5zdXBwb3J0
ZWQgdHBsX2xvYWQgbW9kZSAlZFxuIiwgbW9kZSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9
CisgICAgdmFfZW5kKGFwKTsKKworICAgIGlmIChyLT50eXBlICE9IFRQTF9UWVBFX1JPT1QpIHsK
KyAgICAgICAgdHBsX2hvb2sub29wcygiZXJyb3I6IHRwbF9sb2FkIHRvIG5vbi1yb290IG5vZGVc
biIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmICgoKHRwbF9yb290X2RhdGEq
KShyLT5kYXRhKSktPmZsYWdzICYgKFRQTF9XUk9OTFl8VFBMX1JET05MWSkpIHsKKyAgICAgICAg
LyogYWxyZWFkeSBwYWNrZWQgb3IgbG9hZGVkLCBzbyByZXNldCBpdCBhcyBpZiBuZXdseSBtYXBw
ZWQgKi8KKyAgICAgICAgdHBsX2ZyZWVfa2VlcF9tYXAocik7CisgICAgfQorICAgIGlmIChtb2Rl
ICYgVFBMX0ZJTEUpIHsKKyAgICAgICAgaWYgKHRwbF9tbWFwX2ZpbGUoZmlsZW5hbWUsICYoKHRw
bF9yb290X2RhdGEqKShyLT5kYXRhKSktPm1tYXApICE9IDApIHsKKyAgICAgICAgICAgIHRwbF9o
b29rLm9vcHMoInRwbF9sb2FkIGZhaWxlZCBmb3IgZmlsZSAlc1xuIiwgZmlsZW5hbWUpOworICAg
ICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGlmICggKHJjID0gdHBsX3Nh
bml0eShyLCAobW9kZSAmIFRQTF9FWENFU1NfT0spKSkgIT0gMCkgeworICAgICAgICAgICAgaWYg
KHJjID09IEVSUl9GTVRfTUlTTUFUQ0gpIHsKKyAgICAgICAgICAgICAgICB0cGxfaG9vay5vb3Bz
KCIlczogZm9ybWF0IHNpZ25hdHVyZSBtaXNtYXRjaFxuIiwgZmlsZW5hbWUpOworICAgICAgICAg
ICAgfSBlbHNlIGlmIChyYyA9PSBFUlJfRkxFTl9NSVNNQVRDSCkgeyAKKyAgICAgICAgICAgICAg
ICB0cGxfaG9vay5vb3BzKCIlczogYXJyYXkgbGVuZ3RocyBtaXNtYXRjaFxuIiwgZmlsZW5hbWUp
OworICAgICAgICAgICAgfSBlbHNlIHsgCisgICAgICAgICAgICAgICAgdHBsX2hvb2sub29wcygi
JXM6IG5vdCBhIHZhbGlkIHRwbCBmaWxlXG4iLCBmaWxlbmFtZSk7IAorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgdHBsX3VubWFwX2ZpbGUoICYoKHRwbF9yb290X2RhdGEqKShyLT5kYXRhKSkt
Pm1tYXAgKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICAoKHRw
bF9yb290X2RhdGEqKShyLT5kYXRhKSktPmZsYWdzID0gKFRQTF9GSUxFIHwgVFBMX1JET05MWSk7
CisgICAgfSBlbHNlIGlmIChtb2RlICYgVFBMX01FTSkgeworICAgICAgICAoKHRwbF9yb290X2Rh
dGEqKShyLT5kYXRhKSktPm1tYXAudGV4dCA9IGFkZHI7CisgICAgICAgICgodHBsX3Jvb3RfZGF0
YSopKHItPmRhdGEpKS0+bW1hcC50ZXh0X3N6ID0gc3o7CisgICAgICAgIGlmICggKHJjID0gdHBs
X3Nhbml0eShyLCAobW9kZSAmIFRQTF9FWENFU1NfT0spKSkgIT0gMCkgeworICAgICAgICAgICAg
aWYgKHJjID09IEVSUl9GTVRfTUlTTUFUQ0gpIHsKKyAgICAgICAgICAgICAgICB0cGxfaG9vay5v
b3BzKCJmb3JtYXQgc2lnbmF0dXJlIG1pc21hdGNoXG4iKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
IAorICAgICAgICAgICAgICAgIHRwbF9ob29rLm9vcHMoIm5vdCBhIHZhbGlkIHRwbCBmaWxlXG4i
KTsgCisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAg
ICAgICAgKCh0cGxfcm9vdF9kYXRhKikoci0+ZGF0YSkpLT5mbGFncyA9IChUUExfTUVNIHwgVFBM
X1JET05MWSk7CisgICAgICAgIGlmIChtb2RlICYgVFBMX1VGUkVFKSAoKHRwbF9yb290X2RhdGEq
KShyLT5kYXRhKSktPmZsYWdzIHw9IFRQTF9VRlJFRTsKKyAgICB9IGVsc2UgaWYgKG1vZGUgJiBU
UExfRkQpIHsKKyAgICAgICAgLyogaWYgZmQgcmVhZCBzdWNjZWVkcywgcmVzdWx0aW5nIG1lbSBp
bWcgaXMgdXNlZCBmb3IgbG9hZCAqLworICAgICAgICBpZiAodHBsX2dhdGhlcihUUExfR0FUSEVS
X0JMT0NLSU5HLGZkLCZhZGRyLCZzeikgPiAwKSB7CisgICAgICAgICAgICByZXR1cm4gdHBsX2xv
YWQociwgVFBMX01FTXxUUExfVUZSRUUsIGFkZHIsIHN6KTsKKyAgICAgICAgfSBlbHNlIHJldHVy
biAtMTsKKyAgICB9IGVsc2UgeworICAgICAgICB0cGxfaG9vay5vb3BzKCJpbnZhbGlkIHRwbF9s
b2FkIG1vZGUgJWRcbiIsIG1vZGUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIC8q
IHRoaXMgYXBwbGllcyB0byBUUExfTUVNIG9yIFRQTF9GSUxFICovCisgICAgaWYgKHRwbF9uZWVk
c19lbmRpYW5fc3dhcCgoKHRwbF9yb290X2RhdGEqKShyLT5kYXRhKSktPm1tYXAudGV4dCkpCisg
ICAgICAgICgodHBsX3Jvb3RfZGF0YSopKHItPmRhdGEpKS0+ZmxhZ3MgfD0gVFBMX1hFTkRJQU47
CisgICAgdHBsX3VucGFja0EwKHIpOyAgIC8qIHByZXBhcmUgcm9vdCBBIG5vZGVzIGZvciB1c2Ug
Ki8KKyAgICByZXR1cm4gMDsKK30KKworVFBMX0FQSSBpbnQgdHBsX0FsZW4odHBsX25vZGUgKnIs
IGludCBpKSB7CisgICAgdHBsX25vZGUgKm47CisKKyAgICBuID0gdHBsX2ZpbmRfaShyLGkpOwor
ICAgIGlmIChuID09IE5VTEwpIHsKKyAgICAgICAgdHBsX2hvb2sub29wcygiaW52YWxpZCBpbmRl
eCAlZCB0byB0cGxfdW5wYWNrXG4iLCBpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAg
ICBpZiAobi0+dHlwZSAhPSBUUExfVFlQRV9BUlkpIHJldHVybiAtMTsKKyAgICByZXR1cm4gKCh0
cGxfYXR5cCopKG4tPmRhdGEpKS0+bnVtOworfQorCitzdGF0aWMgdm9pZCB0cGxfZnJlZV9hdHlw
KHRwbF9ub2RlICpuLCB0cGxfYXR5cCAqYXR5cCkgeworICAgIHRwbF9iYWNrYm9uZSAqYmIsKmJi
bnh0OworICAgIHRwbF9ub2RlICpjOworICAgIHZvaWQgKmR2OworICAgIHRwbF9iaW4gKmJpbnA7
CisgICAgdHBsX2F0eXAgKmF0eXBwOworICAgIGNoYXIgKnN0cnA7CisgICAgc2l6ZV90IGl0ZXJt
YXg7CisgICAgdHBsX3BvdW5kX2RhdGEgKnBkOworICAgIGludCBpOworCisgICAgYmIgPSBhdHlw
LT5iYjsKKyAgICB3aGlsZSAoYmIpIHsKKyAgICAgICAgYmJueHQgPSBiYi0+bmV4dDsKKyAgICAg
ICAgZHYgPSBiYi0+ZGF0YTsKKyAgICAgICAgYz1uLT5jaGlsZHJlbjsgCisgICAgICAgIHdoaWxl
IChjKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGMtPnR5cGUpIHsKKyAgICAgICAgICAgICAgICBj
YXNlIFRQTF9UWVBFX0JZVEU6CisgICAgICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9ET1VCTEU6
CisgICAgICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9JTlQzMjoKKyAgICAgICAgICAgICAgICBj
YXNlIFRQTF9UWVBFX1VJTlQzMjoKKyAgICAgICAgICAgICAgICBjYXNlIFRQTF9UWVBFX0lOVDY0
OgorICAgICAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfVUlOVDY0OgorICAgICAgICAgICAgICAg
IGNhc2UgVFBMX1RZUEVfSU5UMTY6CisgICAgICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9VSU5U
MTY6CisgICAgICAgICAgICAgICAgICAgIGR2ID0gKHZvaWQqKSgodWludHB0cl90KWR2ICsgdHBs
X3R5cGVzW2MtPnR5cGVdLnN6KmMtPm51bSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfQklOOgorICAgICAgICAgICAgICAgICAgICBt
ZW1jcHkoJmJpbnAsZHYsc2l6ZW9mKHRwbF9iaW4qKSk7IC8qIGNwIHRvIGFsaWduZWQgKi8KKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGJpbnAtPmFkZHIpIHRwbF9ob29rLmZyZWUoIGJpbnAtPmFk
ZHIgKTsgLyogZnJlZSBidWYgKi8KKyAgICAgICAgICAgICAgICAgICAgdHBsX2hvb2suZnJlZShi
aW5wKTsgIC8qIGZyZWUgdHBsX2JpbiAqLworICAgICAgICAgICAgICAgICAgICBkdiA9ICh2b2lk
KikoKHVpbnRwdHJfdClkdiArIHNpemVvZih0cGxfYmluKikpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFRQTF9UWVBFX1NUUjoKKyAgICAgICAgICAg
ICAgICAgICAgZm9yKGk9MDsgaSA8IGMtPm51bTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgbWVtY3B5KCZzdHJwLGR2LHNpemVvZihjaGFyKikpOyAvKiBjcCB0byBhbGlnbmVkICovCisg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cnApIHRwbF9ob29rLmZyZWUoc3RycCk7IC8qIGZy
ZWUgc3RyaW5nICovCisgICAgICAgICAgICAgICAgICAgICAgZHYgPSAodm9pZCopKCh1aW50cHRy
X3QpZHYgKyBzaXplb2YoY2hhciopKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFRQTF9UWVBFX1BPVU5EOgor
ICAgICAgICAgICAgICAgICAgICAvKiBpdGVyYXRlIG92ZXIgdGhlIHByZWNlZGluZyBub2RlcyAq
LworICAgICAgICAgICAgICAgICAgICBpdGVybWF4ID0gYy0+bnVtOworICAgICAgICAgICAgICAg
ICAgICBwZCA9ICh0cGxfcG91bmRfZGF0YSopYy0+ZGF0YTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCsrKHBkLT5pdGVybnVtKSA8IGl0ZXJtYXgpIHsKKyAgICAgICAgICAgICAgICAgICAgICBj
ID0gcGQtPml0ZXJfc3RhcnRfbm9kZTsKKyAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgLyogbG9vcCBjb21wbGV0ZS4gKi8KKyAgICAg
ICAgICAgICAgICAgICAgICBwZC0+aXRlcm51bSA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBUUExfVFlQ
RV9BUlk6CisgICAgICAgICAgICAgICAgICAgIG1lbWNweSgmYXR5cHAsZHYsc2l6ZW9mKHRwbF9h
dHlwKikpOyAvKiBjcCB0byBhbGlnbmVkICovCisgICAgICAgICAgICAgICAgICAgIHRwbF9mcmVl
X2F0eXAoYyxhdHlwcCk7ICAvKiBmcmVlIGF0eXAgKi8KKyAgICAgICAgICAgICAgICAgICAgZHYg
PSAodm9pZCopKCh1aW50cHRyX3QpZHYgKyBzaXplb2Yodm9pZCopKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAg
ICAgdHBsX2hvb2suZmF0YWwoInVuc3VwcG9ydGVkIGZvcm1hdCBjaGFyYWN0ZXJcbiIpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGM9Yy0+
bmV4dDsKKyAgICAgICAgfQorICAgICAgICB0cGxfaG9vay5mcmVlKGJiKTsKKyAgICAgICAgYmIg
PSBiYm54dDsKKyAgICB9CisgICAgdHBsX2hvb2suZnJlZShhdHlwKTsKK30KKworLyogZGV0ZXJt
aW5lIChieSB3YWxraW5nKSBieXRlIGxlbmd0aCBvZiBzZXJpYWxpemVkIHIvQSBub2RlIGF0IGFk
ZHJlc3MgZHYgCisgKiByZXR1cm5zIDAgb24gc3VjY2Vzcywgb3IgLTEgaWYgdGhlIHRwbCBpc24n
dCB0cnVzdHdvcnRoeSAoZmFpbHMgY29uc2lzdGVuY3kpCisgKi8KK3N0YXRpYyBpbnQgdHBsX3Nl
cmxlbih0cGxfbm9kZSAqciwgdHBsX25vZGUgKm4sIHZvaWQgKmR2LCBzaXplX3QgKnNlcmxlbikg
eworICAgIHVpbnQzMl90IHNsZW47CisgICAgaW50IG51bSxmaWR4OworICAgIHRwbF9ub2RlICpj
OworICAgIHNpemVfdCBsZW49MCwgYWxlbiwgYnVmX3Bhc3QsIGl0ZXJtYXg7CisgICAgdHBsX3Bv
dW5kX2RhdGEgKnBkOworCisgICAgYnVmX3Bhc3QgPSAoKHVpbnRwdHJfdCkoKHRwbF9yb290X2Rh
dGEqKShyLT5kYXRhKSktPm1tYXAudGV4dCArIAorICAgICAgICAgICAgICAgICAgICAgICgodHBs
X3Jvb3RfZGF0YSopKHItPmRhdGEpKS0+bW1hcC50ZXh0X3N6KTsKKworICAgIGlmIChuLT50eXBl
ID09IFRQTF9UWVBFX1JPT1QpIG51bSA9IDE7CisgICAgZWxzZSBpZiAobi0+dHlwZSA9PSBUUExf
VFlQRV9BUlkpIHsKKyAgICAgICAgaWYgKCh1aW50cHRyX3QpZHYgKyBzaXplb2YodWludDMyX3Qp
ID4gYnVmX3Bhc3QpIHJldHVybiAtMTsKKyAgICAgICAgbWVtY3B5KCZudW0sZHYsc2l6ZW9mKHVp
bnQzMl90KSk7CisgICAgICAgIGlmICgoKHRwbF9yb290X2RhdGEqKShyLT5kYXRhKSktPmZsYWdz
ICYgVFBMX1hFTkRJQU4pCisgICAgICAgICAgICAgdHBsX2J5dGVzd2FwKCZudW0sIHNpemVvZih1
aW50MzJfdCkpOworICAgICAgICBkdiA9ICh2b2lkKikoKHVpbnRwdHJfdClkdiArIHNpemVvZih1
aW50MzJfdCkpOworICAgICAgICBsZW4gKz0gc2l6ZW9mKHVpbnQzMl90KTsKKyAgICB9IGVsc2Ug
dHBsX2hvb2suZmF0YWwoImludGVybmFsIGVycm9yIGluIHRwbF9zZXJsZW5cbiIpOworCisgICAg
d2hpbGUgKG51bS0tID4gMCkgeworICAgICAgICBjPW4tPmNoaWxkcmVuOyAKKyAgICAgICAgd2hp
bGUgKGMpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoYy0+dHlwZSkgeworICAgICAgICAgICAgICAg
IGNhc2UgVFBMX1RZUEVfQllURToKKyAgICAgICAgICAgICAgICBjYXNlIFRQTF9UWVBFX0RPVUJM
RToKKyAgICAgICAgICAgICAgICBjYXNlIFRQTF9UWVBFX0lOVDMyOgorICAgICAgICAgICAgICAg
IGNhc2UgVFBMX1RZUEVfVUlOVDMyOgorICAgICAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfSU5U
NjQ6CisgICAgICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9VSU5UNjQ6CisgICAgICAgICAgICAg
ICAgY2FzZSBUUExfVFlQRV9JTlQxNjoKKyAgICAgICAgICAgICAgICBjYXNlIFRQTF9UWVBFX1VJ
TlQxNjoKKyAgICAgICAgICAgICAgICAgICAgZm9yKGZpZHg9MDsgZmlkeCA8IGMtPm51bTsgZmlk
eCsrKSB7ICAvKiBvY3RvdGhvcnBlIHN1cHBvcnQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICgodWludHB0cl90KWR2ICsgdHBsX3R5cGVzW2MtPnR5cGVdLnN6ID4gYnVmX3Bhc3QpIHJl
dHVybiAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR2ID0gKHZvaWQqKSgodWludHB0cl90
KWR2ICsgdHBsX3R5cGVzW2MtPnR5cGVdLnN6KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxl
biArPSB0cGxfdHlwZXNbYy0+dHlwZV0uc3o7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9CSU46
CisgICAgICAgICAgICAgICAgICAgIGxlbiArPSBzaXplb2YodWludDMyX3QpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoKHVpbnRwdHJfdClkdiArIHNpemVvZih1aW50MzJfdCkgPiBidWZfcGFz
dCkgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICBtZW1jcHkoJnNsZW4sZHYsc2l6ZW9m
KHVpbnQzMl90KSk7CisgICAgICAgICAgICAgICAgICAgIGlmICgoKHRwbF9yb290X2RhdGEqKShy
LT5kYXRhKSktPmZsYWdzICYgVFBMX1hFTkRJQU4pCisgICAgICAgICAgICAgICAgICAgICAgICB0
cGxfYnl0ZXN3YXAoJnNsZW4sIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICAgICAgICAgICAg
ICBsZW4gKz0gc2xlbjsKKyAgICAgICAgICAgICAgICAgICAgZHYgPSAodm9pZCopKCh1aW50cHRy
X3QpZHYgKyBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCh1aW50
cHRyX3QpZHYgKyBzbGVuID4gYnVmX3Bhc3QpIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAg
ICAgZHYgPSAodm9pZCopKCh1aW50cHRyX3QpZHYgKyBzbGVuKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9TVFI6CisgICAgICAgICAg
ICAgICAgICAgIGZvcihmaWR4PTA7IGZpZHggPCBjLT5udW07IGZpZHgrKykgeyAgLyogb2N0b3Ro
b3JwZSBzdXBwb3J0ICovCisgICAgICAgICAgICAgICAgICAgICAgbGVuICs9IHNpemVvZih1aW50
MzJfdCk7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKCh1aW50cHRyX3QpZHYgKyBzaXplb2Yo
dWludDMyX3QpID4gYnVmX3Bhc3QpIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAgICAgICBt
ZW1jcHkoJnNsZW4sZHYsc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgICAgICAgICAgICAgICAg
aWYgKCgodHBsX3Jvb3RfZGF0YSopKHItPmRhdGEpKS0+ZmxhZ3MgJiBUUExfWEVORElBTikKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHBsX2J5dGVzd2FwKCZzbGVuLCBzaXplb2YodWludDMy
X3QpKTsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoISgoKHRwbF9yb290X2RhdGEqKShyLT5k
YXRhKSktPmZsYWdzICYgVFBMX09MRF9TVFJJTkdfRk1UKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBzbGVuID0gKHNsZW4+MSkgPyAoc2xlbi0xKSA6IDA7CisgICAgICAgICAgICAgICAgICAg
ICAgbGVuICs9IHNsZW47CisgICAgICAgICAgICAgICAgICAgICAgZHYgPSAodm9pZCopKCh1aW50
cHRyX3QpZHYgKyBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAo
KHVpbnRwdHJfdClkdiArIHNsZW4gPiBidWZfcGFzdCkgcmV0dXJuIC0xOworICAgICAgICAgICAg
ICAgICAgICAgIGR2ID0gKHZvaWQqKSgodWludHB0cl90KWR2ICsgc2xlbik7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSBUUExfVFlQRV9BUlk6CisgICAgICAgICAgICAgICAgICAgIGlmICggdHBsX3Nlcmxlbihy
LGMsZHYsICZhbGVuKSA9PSAtMSkgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICBkdiA9
ICh2b2lkKikoKHVpbnRwdHJfdClkdiArIGFsZW4pOworICAgICAgICAgICAgICAgICAgICBsZW4g
Kz0gYWxlbjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2Fz
ZSBUUExfVFlQRV9QT1VORDoKKyAgICAgICAgICAgICAgICAgICAgLyogaXRlcmF0ZSBvdmVyIHRo
ZSBwcmVjZWRpbmcgbm9kZXMgKi8KKyAgICAgICAgICAgICAgICAgICAgaXRlcm1heCA9IGMtPm51
bTsKKyAgICAgICAgICAgICAgICAgICAgcGQgPSAodHBsX3BvdW5kX2RhdGEqKWMtPmRhdGE7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICgrKyhwZC0+aXRlcm51bSkgPCBpdGVybWF4KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgYyA9IHBkLT5pdGVyX3N0YXJ0X25vZGU7CisgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8qIGxvb3Ag
Y29tcGxldGUuICovCisgICAgICAgICAgICAgICAgICAgICAgcGQtPml0ZXJudW0gPSAwOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHRwbF9ob29rLmZhdGFsKCJ1bnN1
cHBvcnRlZCBmb3JtYXQgY2hhcmFjdGVyXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjPWMtPm5leHQ7CisgICAgICAgIH0KKyAgICB9
CisgICAgKnNlcmxlbiA9IGxlbjsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0cGxf
bW1hcF9vdXRwdXRfZmlsZShjaGFyICpmaWxlbmFtZSwgc2l6ZV90IHN6LCB2b2lkICoqdGV4dF9v
dXQpIHsKKyAgICB2b2lkICp0ZXh0OworICAgIGludCBmZCxwZXJtczsKKworI2lmbmRlZiBfV0lO
MzIKKyAgICBwZXJtcyA9IFNfSVJVU1J8U19JV1VTUnxTX0lXR1JQfFNfSVJHUlB8U19JUk9USDsg
IC8qIHVnK3cgbytyICovCisgICAgZmQ9b3BlbihmaWxlbmFtZSxPX0NSRUFUfE9fVFJVTkN8T19S
RFdSLHBlcm1zKTsKKyNlbHNlCisJcGVybXMgPSBfU19JV1JJVEU7CisgICAgZmQ9X29wZW4oZmls
ZW5hbWUsX09fQ1JFQVR8X09fVFJVTkN8X09fUkRXUixwZXJtcyk7CisjZW5kaWYKKworICAgIGlm
ICggZmQgPT0gLTEgKSB7CisgICAgICAgIHRwbF9ob29rLm9vcHMoIkNvdWxkbid0IG9wZW4gZmls
ZSAlczogJXNcbiIsIGZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4g
LTE7CisgICAgfQorCisgICAgdGV4dCA9IG1tYXAoMCwgc3osIFBST1RfUkVBRHxQUk9UX1dSSVRF
LCBNQVBfU0hBUkVELCBmZCwgMCk7CisgICAgaWYgKHRleHQgPT0gTUFQX0ZBSUxFRCkgeworICAg
ICAgICB0cGxfaG9vay5vb3BzKCJGYWlsZWQgdG8gbW1hcCAlczogJXNcbiIsIGZpbGVuYW1lLCBz
dHJlcnJvcihlcnJubykpOworICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIHJldHVybiAtMTsK
KyAgICB9CisgICAgaWYgKGZ0cnVuY2F0ZShmZCxzeikgPT0gLTEpIHsKKyAgICAgICAgdHBsX2hv
b2sub29wcygiZnRydW5jYXRlIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAg
ICAgIG11bm1hcCggdGV4dCwgc3ogKTsKKyAgICAgICAgY2xvc2UoZmQpOworICAgICAgICByZXR1
cm4gLTE7CisgICAgfQorICAgICp0ZXh0X291dCA9IHRleHQ7CisgICAgcmV0dXJuIGZkOworfQor
CitzdGF0aWMgaW50IHRwbF9tbWFwX2ZpbGUoY2hhciAqZmlsZW5hbWUsIHRwbF9tbWFwX3JlYyAq
bXIpIHsKKyAgICBzdHJ1Y3Qgc3RhdCBzdGF0X2J1ZjsKKworICAgIGlmICggKG1yLT5mZCA9IG9w
ZW4oZmlsZW5hbWUsIE9fUkRPTkxZKSkgPT0gLTEgKSB7CisgICAgICAgIHRwbF9ob29rLm9vcHMo
IkNvdWxkbid0IG9wZW4gZmlsZSAlczogJXNcbiIsIGZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykp
OworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKCBmc3RhdChtci0+ZmQsICZz
dGF0X2J1ZikgPT0gLTEpIHsKKyAgICAgICAgY2xvc2UobXItPmZkKTsKKyAgICAgICAgdHBsX2hv
b2sub29wcygiQ291bGRuJ3Qgc3RhdCBmaWxlICVzOiAlc1xuIiwgZmlsZW5hbWUsIHN0cmVycm9y
KGVycm5vKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBtci0+dGV4dF9zeiA9
IChzaXplX3Qpc3RhdF9idWYuc3Rfc2l6ZTsgIAorICAgIG1yLT50ZXh0ID0gbW1hcCgwLCBzdGF0
X2J1Zi5zdF9zaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBtci0+ZmQsIDApOworICAgIGlm
IChtci0+dGV4dCA9PSBNQVBfRkFJTEVEKSB7CisgICAgICAgIGNsb3NlKG1yLT5mZCk7CisgICAg
ICAgIHRwbF9ob29rLm9vcHMoIkZhaWxlZCB0byBtbWFwICVzOiAlc1xuIiwgZmlsZW5hbWUsIHN0
cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByZXR1cm4g
MDsKK30KKworVFBMX0FQSSBpbnQgdHBsX3BhY2sodHBsX25vZGUgKnIsIGludCBpKSB7CisgICAg
dHBsX25vZGUgKm4sICpjaGlsZCwgKm5wOworICAgIHZvaWQgKmRhdGF2PU5VTEw7CisgICAgc2l6
ZV90IHN6LCBpdGVybWF4OworICAgIHVpbnQzMl90IHNsZW47CisgICAgY2hhciAqc3RyOworICAg
IHRwbF9iaW4gKmJpbjsKKyAgICB0cGxfcG91bmRfZGF0YSAqcGQ7CisgICAgaW50IGZpZHg7CisK
KyAgICBuID0gdHBsX2ZpbmRfaShyLGkpOworICAgIGlmIChuID09IE5VTEwpIHsKKyAgICAgICAg
dHBsX2hvb2sub29wcygiaW52YWxpZCBpbmRleCAlZCB0byB0cGxfcGFja1xuIiwgaSk7CisgICAg
ICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoKCh0cGxfcm9vdF9kYXRhKikoci0+ZGF0
YSkpLT5mbGFncyAmIFRQTF9SRE9OTFkpIHsKKyAgICAgICAgLyogY29udmVydCB0byBhbiB3cml0
ZWFibGUgdHBsLCBpbml0aWFsbHkgZW1wdHkgKi8KKyAgICAgICAgdHBsX2ZyZWVfa2VlcF9tYXAo
cik7CisgICAgfQorCisgICAgKCh0cGxfcm9vdF9kYXRhKikoci0+ZGF0YSkpLT5mbGFncyB8PSBU
UExfV1JPTkxZOworCisgICAgaWYgKG4tPnR5cGUgPT0gVFBMX1RZUEVfQVJZKSBkYXRhdiA9IHRw
bF9leHRlbmRfYmFja2JvbmUobik7CisgICAgY2hpbGQgPSBuLT5jaGlsZHJlbjsKKyAgICB3aGls
ZShjaGlsZCkgeworICAgICAgICBzd2l0Y2goY2hpbGQtPnR5cGUpIHsKKyAgICAgICAgICAgIGNh
c2UgVFBMX1RZUEVfQllURToKKyAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfRE9VQkxFOgorICAg
ICAgICAgICAgY2FzZSBUUExfVFlQRV9JTlQzMjoKKyAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVf
VUlOVDMyOgorICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9JTlQ2NDoKKyAgICAgICAgICAgIGNh
c2UgVFBMX1RZUEVfVUlOVDY0OgorICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9JTlQxNjoKKyAg
ICAgICAgICAgIGNhc2UgVFBMX1RZUEVfVUlOVDE2OgorICAgICAgICAgICAgICAgIC8qIG5vIG5l
ZWQgdG8gdXNlIGZpZHggaXRlcmF0aW9uIGhlcmU7IHdlIGNhbiBjb3B5IG11bHRpcGxlIHZhbHVl
cyBpbiBvbmUgbWVtY3B5ICovCisgICAgICAgICAgICAgICAgbWVtY3B5KGNoaWxkLT5kYXRhLGNo
aWxkLT5hZGRyLHRwbF90eXBlc1tjaGlsZC0+dHlwZV0uc3ogKiBjaGlsZC0+bnVtKTsKKyAgICAg
ICAgICAgICAgICBpZiAoZGF0YXYpIGRhdGF2ID0gdHBsX2NwdihkYXRhdixjaGlsZC0+ZGF0YSx0
cGxfdHlwZXNbY2hpbGQtPnR5cGVdLnN6ICogY2hpbGQtPm51bSk7CisgICAgICAgICAgICAgICAg
aWYgKG4tPnR5cGUgPT0gVFBMX1RZUEVfQVJZKSBuLT5zZXJfb3N6ICs9IHRwbF90eXBlc1tjaGls
ZC0+dHlwZV0uc3ogKiBjaGlsZC0+bnVtOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBUUExfVFlQRV9CSU46CisgICAgICAgICAgICAgICAgLyogY29weSB0aGUgYnVm
ZmVyIHRvIGJlIHBhY2tlZCAqLyAKKyAgICAgICAgICAgICAgICBzbGVuID0gKCh0cGxfYmluKilj
aGlsZC0+YWRkciktPnN6OworICAgICAgICAgICAgICAgIGlmIChzbGVuID4wKSB7CisgICAgICAg
ICAgICAgICAgICAgIHN0ciA9IHRwbF9ob29rLm1hbGxvYyhzbGVuKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFzdHIpIGZhdGFsX29vbSgpOworICAgICAgICAgICAgICAgICAgICBtZW1jcHko
c3RyLCgodHBsX2JpbiopY2hpbGQtPmFkZHIpLT5hZGRyLHNsZW4pOworICAgICAgICAgICAgICAg
IH0gZWxzZSBzdHIgPSBOVUxMOworICAgICAgICAgICAgICAgIC8qIGFuZCBtYWtlIGEgdHBsX2Jp
biB0byBwb2ludCB0byBpdCAqLworICAgICAgICAgICAgICAgIGJpbiA9IHRwbF9ob29rLm1hbGxv
YyhzaXplb2YodHBsX2JpbikpOworICAgICAgICAgICAgICAgIGlmICghYmluKSBmYXRhbF9vb20o
KTsKKyAgICAgICAgICAgICAgICBiaW4tPmFkZHIgPSBzdHI7CisgICAgICAgICAgICAgICAgYmlu
LT5zeiA9IHNsZW47CisgICAgICAgICAgICAgICAgLyogbm93IHBhY2sgaXRzIHBvaW50ZXIsIGZp
cnN0IGRlZXAgZnJlZWluZyBhbnkgcHJlLWV4aXN0aW5nIGJpbiAqLworICAgICAgICAgICAgICAg
IGlmICgqKHRwbF9iaW4qKikoY2hpbGQtPmRhdGEpICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCgqKHRwbF9iaW4qKikoY2hpbGQtPmRhdGEpKS0+c3ogIT0gMCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRwbF9ob29rLmZyZWUoICgqKHRwbF9iaW4qKikoY2hpbGQt
PmRhdGEpKS0+YWRkciApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIHRwbF9ob29rLmZyZWUoKih0cGxfYmluKiopKGNoaWxkLT5kYXRhKSk7ICAKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgbWVtY3B5KGNoaWxkLT5kYXRhLCZiaW4sc2l6ZW9m
KHRwbF9iaW4qKSk7CisgICAgICAgICAgICAgICAgaWYgKGRhdGF2KSB7CisgICAgICAgICAgICAg
ICAgICAgIGRhdGF2ID0gdHBsX2NwdihkYXRhdiwgJmJpbiwgc2l6ZW9mKHRwbF9iaW4qKSk7Cisg
ICAgICAgICAgICAgICAgICAgICoodHBsX2JpbioqKShjaGlsZC0+ZGF0YSkgPSBOVUxMOyAgCisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChuLT50eXBlID09IFRQTF9UWVBF
X0FSWSkgeworICAgICAgICAgICAgICAgICAgICBuLT5zZXJfb3N6ICs9IHNpemVvZih1aW50MzJf
dCk7IC8qIGJpbmFyeSBidWYgbGVuIHdvcmQgKi8KKyAgICAgICAgICAgICAgICAgICAgbi0+c2Vy
X29zeiArPSBiaW4tPnN6OyAgICAgICAgICAvKiBiaW5hcnkgYnVmICovCisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9T
VFI6CisgICAgICAgICAgICAgICAgZm9yKGZpZHg9MDsgZmlkeCA8IGNoaWxkLT5udW07IGZpZHgr
KykgeworICAgICAgICAgICAgICAgICAgLyogY29weSB0aGUgc3RyaW5nIHRvIGJlIHBhY2tlZC4g
c2xlbiBpbmNsdWRlcyBcMC4gdGhpcyAKKyAgICAgICAgICAgICAgICAgICAgIGJsb2NrIGFsc28g
d29ya3MgaWYgdGhlIHN0cmluZyBwb2ludGVyIGlzIE5VTEwuICovCisgICAgICAgICAgICAgICAg
ICBjaGFyICpjYWRkciA9ICgoY2hhcioqKWNoaWxkLT5hZGRyKVtmaWR4XTsKKyAgICAgICAgICAg
ICAgICAgIGNoYXIgKipjZGF0YSA9ICYoKGNoYXIqKiljaGlsZC0+ZGF0YSlbZmlkeF07CisgICAg
ICAgICAgICAgICAgICBzbGVuID0gY2FkZHIgPyAgKHN0cmxlbihjYWRkcikgKyAxKSA6IDA7Cisg
ICAgICAgICAgICAgICAgICBpZiAoc2xlbikgeworICAgICAgICAgICAgICAgICAgICBzdHIgPSB0
cGxfaG9vay5tYWxsb2Moc2xlbik7CisgICAgICAgICAgICAgICAgICAgIGlmICghc3RyKSBmYXRh
bF9vb20oKTsKKyAgICAgICAgICAgICAgICAgICAgbWVtY3B5KHN0cixjYWRkcixzbGVuKTsgLyog
aW5jbHVkZSBcMCAqLworICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgc3RyID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAg
ICAvKiBub3cgcGFjayBpdHMgcG9pbnRlciwgZmlyc3QgZnJlZWluZyBhbnkgcHJlLWV4aXN0aW5n
IHN0cmluZyAqLworICAgICAgICAgICAgICAgICAgaWYgKCpjZGF0YSAhPSBOVUxMKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgdHBsX2hvb2suZnJlZSgqY2RhdGEpOyAgCisgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICBtZW1jcHkoY2RhdGEsJnN0cixzaXplb2YoY2hhciop
KTsKKyAgICAgICAgICAgICAgICAgIGlmIChkYXRhdikgeworICAgICAgICAgICAgICAgICAgICAg
IGRhdGF2ID0gdHBsX2NwdihkYXRhdiwgJnN0ciwgc2l6ZW9mKGNoYXIqKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgKmNkYXRhID0gTlVMTDsgIAorICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgaWYgKG4tPnR5cGUgPT0gVFBMX1RZUEVfQVJZKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgbi0+c2VyX29zeiArPSBzaXplb2YodWludDMyX3QpOyAvKiBzdHJpbmcgbGVuIHdv
cmQgKi8KKyAgICAgICAgICAgICAgICAgICAgICBpZiAoc2xlbj4xKSBuLT5zZXJfb3N6ICs9IHNs
ZW4tMTsvKiBzdHJpbmcgKHdpdGhvdXQgbnVsKSAqLworICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
VFBMX1RZUEVfQVJZOgorICAgICAgICAgICAgICAgIC8qIGNvcHkgdGhlIGNoaWxkJ3MgdHBsX2F0
eXBlKiBhbmQgcmVzZXQgaXQgdG8gZW1wdHkgKi8KKyAgICAgICAgICAgICAgICBpZiAoZGF0YXYp
IHsKKyAgICAgICAgICAgICAgICAgICAgc3ogPSAoKHRwbF9hdHlwKikoY2hpbGQtPmRhdGEpKS0+
c3o7CisgICAgICAgICAgICAgICAgICAgIGRhdGF2ID0gdHBsX2NwdihkYXRhdiwgJmNoaWxkLT5k
YXRhLCBzaXplb2Yodm9pZCopKTsKKyAgICAgICAgICAgICAgICAgICAgY2hpbGQtPmRhdGEgPSB0
cGxfaG9vay5tYWxsb2Moc2l6ZW9mKHRwbF9hdHlwKSk7CisgICAgICAgICAgICAgICAgICAgIGlm
ICghY2hpbGQtPmRhdGEpIGZhdGFsX29vbSgpOworICAgICAgICAgICAgICAgICAgICAoKHRwbF9h
dHlwKikoY2hpbGQtPmRhdGEpKS0+bnVtID0gMDsKKyAgICAgICAgICAgICAgICAgICAgKCh0cGxf
YXR5cCopKGNoaWxkLT5kYXRhKSktPnN6ID0gc3o7CisgICAgICAgICAgICAgICAgICAgICgodHBs
X2F0eXAqKShjaGlsZC0+ZGF0YSkpLT5iYiA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICgo
dHBsX2F0eXAqKShjaGlsZC0+ZGF0YSkpLT5iYnRhaWwgPSBOVUxMOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAvKiBwYXJlbnQgaXMgYXJyYXk/IHRoZW4gYnViYmxlIHVwIGNo
aWxkIGFycmF5J3Mgc2VyX29zeiAqLworICAgICAgICAgICAgICAgIGlmIChuLT50eXBlID09IFRQ
TF9UWVBFX0FSWSkgeworICAgICAgICAgICAgICAgICAgICBuLT5zZXJfb3N6ICs9IHNpemVvZih1
aW50MzJfdCk7IC8qIGFycmF5IGxlbiB3b3JkICovCisgICAgICAgICAgICAgICAgICAgIG4tPnNl
cl9vc3ogKz0gY2hpbGQtPnNlcl9vc3o7ICAgLyogY2hpbGQgYXJyYXkgc2VyX29zeiAqLworICAg
ICAgICAgICAgICAgICAgICBjaGlsZC0+c2VyX29zeiA9IDA7ICAgICAgICAgICAgIC8qIHJlc2V0
IGNoaWxkIGFycmF5IHNlcl9vc3ogKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfUE9VTkQ6IAorICAgICAgICAg
ICAgICAgIC8qIHdlIG5lZWQgdG8gaXRlcmF0ZSBuIHRpbWVzIG92ZXIgcHJlY2VkaW5nIG5vZGVz
IGluIFMoLi4uKS4gCisgICAgICAgICAgICAgICAgICogd2UgbWF5IGJlIGluIHRoZSBtaWRzdCBv
ZiBhbiBpdGVyYXRpb24gZWFjaCB0aW1lIG9yIHN0YXJ0aW5nLiAqLworICAgICAgICAgICAgICAg
ICBwZCA9ICh0cGxfcG91bmRfZGF0YSopY2hpbGQtPmRhdGE7CisgICAgICAgICAgICAgICAgIGl0
ZXJtYXggPSBjaGlsZC0+bnVtOworCisgICAgICAgICAgICAgICAgIC8qIGl0ZXJtYXggaXMgdG90
YWwgbnVtIG9mIGl0ZXJhdGlvbnMgbmVlZGVkICAqLworICAgICAgICAgICAgICAgICAvKiBwZC0+
aXRlcm51bSBpcyBjdXJyZW50IGl0ZXJhdGlvbiBpbmRleCAgKi8KKyAgICAgICAgICAgICAgICAg
LyogcGQtPmludGVyX2VsdF9sZW4gaXMgZWxlbWVudC10by1lbGVtZW50IGxlbiBvZiBjb250aWd1
b3VzIHN0cnVjdHMgKi8KKyAgICAgICAgICAgICAgICAgLyogcGQtPml0ZXJfc3RhcnRfbm9kZSBp
cyB3aGVyZSB3ZSBqdW1wIHRvIGF0IGVhY2ggaXRlcmF0aW9uLiAqLworCisgICAgICAgICAgICAg
ICAgIGlmICgrKyhwZC0+aXRlcm51bSkgPCBpdGVybWF4KSB7CisKKyAgICAgICAgICAgICAgICAg
ICAvKiBpbiBzdGFydCBvciBtaWRzdCBvZiBsb29wLiBhZHZhbmNlIGFkZHIvZGF0YSBwb2ludGVy
cy4gKi8KKyAgICAgICAgICAgICAgICAgICBmb3IobnA9cGQtPml0ZXJfc3RhcnRfbm9kZTsgbnAg
IT0gY2hpbGQ7IG5wID0gbnAtPm5leHQpIHsKKyAgICAgICAgICAgICAgICAgICAgIG5wLT5kYXRh
ID0gKGNoYXIqKShucC0+ZGF0YSkgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHRwbF90
eXBlc1tucC0+dHlwZV0uc3ogKiBucC0+bnVtKTsKKyAgICAgICAgICAgICAgICAgICAgIG5wLT5h
ZGRyID0gKGNoYXIqKShucC0+YWRkcikgKyBwZC0+aW50ZXJfZWx0X2xlbjsKKyAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgLyogZG8gbmV4dCBpdGVyYXRpb24gKi8KKyAg
ICAgICAgICAgICAgICAgICBjaGlsZCA9IHBkLT5pdGVyX3N0YXJ0X25vZGU7CisgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAgfSBlbHNlIHsgLyogbG9vcCBj
b21wbGV0ZS4gKi8KKyAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgLyogcmVz
ZXQgaXRlcmF0aW9uIGluZGV4IGFuZCBhZGRyL2RhdGEgcG9pbnRlcnMuICovCisgICAgICAgICAg
ICAgICAgICAgcGQtPml0ZXJudW0gPSAwOworICAgICAgICAgICAgICAgICAgIGZvcihucD1wZC0+
aXRlcl9zdGFydF9ub2RlOyBucCAhPSBjaGlsZDsgbnAgPSBucC0+bmV4dCkgeworICAgICAgICAg
ICAgICAgICAgICAgbnAtPmRhdGEgPSAoY2hhciopKG5wLT5kYXRhKSAtICgoaXRlcm1heC0xKSAq
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
cGxfdHlwZXNbbnAtPnR5cGVdLnN6ICogCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBucC0+bnVtKTsKKyAgICAgICAgICAgICAgICAgICAgIG5w
LT5hZGRyID0gKGNoYXIqKShucC0+YWRkcikgLSAoKGl0ZXJtYXgtMSkgKiBwZC0+aW50ZXJfZWx0
X2xlbik7CisgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
dHBsX2hvb2suZmF0YWwoInVuc3VwcG9ydGVkIGZvcm1hdCBjaGFyYWN0ZXJcbiIpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNoaWxkPWNoaWxkLT5uZXh0Owor
ICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworVFBMX0FQSSBpbnQgdHBsX3VucGFjayh0cGxfbm9k
ZSAqciwgaW50IGkpIHsKKyAgICB0cGxfbm9kZSAqbiwgKmMsICpucDsKKyAgICB1aW50MzJfdCBz
bGVuOworICAgIGludCByYz0xLCBmaWR4OworICAgIGNoYXIgKnN0cjsKKyAgICB2b2lkICpkdj1O
VUxMLCAqY2FkZHI7CisgICAgc2l6ZV90IEFfYnl0ZXMsIGl0ZXJtYXg7CisgICAgdHBsX3BvdW5k
X2RhdGEgKnBkOworICAgIHZvaWQgKmltZzsKKyAgICBzaXplX3Qgc3o7CisKKworICAgIC8qIGhh
bmRsZSB1bnVzdWFsIGNhc2Ugb2YgdHBsX3BhY2ssdHBsX3VucGFjayB3aXRob3V0IGFuIAorICAg
ICAqIGludGVydmVuaW5nIHRwbF9kdW1wLiBkbyBhIGR1bXAvbG9hZCBpbXBsaWNpdGx5LiAqLwor
ICAgIGlmICgoKHRwbF9yb290X2RhdGEqKShyLT5kYXRhKSktPmZsYWdzICYgVFBMX1dST05MWSkg
eworICAgICAgICBpZiAodHBsX2R1bXAocixUUExfTUVNLCZpbWcsJnN6KSAhPSAwKSByZXR1cm4g
LTE7CisgICAgICAgIGlmICh0cGxfbG9hZChyLFRQTF9NRU18VFBMX1VGUkVFLGltZyxzeikgIT0g
MCkgeworICAgICAgICAgICAgdHBsX2hvb2suZnJlZShpbWcpOworICAgICAgICAgICAgcmV0dXJu
IC0xOworICAgICAgICB9OworICAgIH0KKworICAgIG4gPSB0cGxfZmluZF9pKHIsaSk7CisgICAg
aWYgKG4gPT0gTlVMTCkgeworICAgICAgICB0cGxfaG9vay5vb3BzKCJpbnZhbGlkIGluZGV4ICVk
IHRvIHRwbF91bnBhY2tcbiIsIGkpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAg
LyogZWl0aGVyIHJvb3Qgbm9kZSBvciBhbiBBIG5vZGUgKi8KKyAgICBpZiAobi0+dHlwZSA9PSBU
UExfVFlQRV9ST09UKSB7CisgICAgICAgIGR2ID0gdHBsX2ZpbmRfZGF0YV9zdGFydCggKCh0cGxf
cm9vdF9kYXRhKikobi0+ZGF0YSkpLT5tbWFwLnRleHQgKTsKKyAgICB9IGVsc2UgaWYgKG4tPnR5
cGUgPT0gVFBMX1RZUEVfQVJZKSB7CisgICAgICAgIGlmICgoKHRwbF9hdHlwKikobi0+ZGF0YSkp
LT5udW0gPD0gMCkgcmV0dXJuIDA7IC8qIGFycmF5IGNvbnN1bWVkICovCisgICAgICAgIGVsc2Ug
cmMgPSAoKHRwbF9hdHlwKikobi0+ZGF0YSkpLT5udW0tLTsKKyAgICAgICAgZHYgPSAoKHRwbF9h
dHlwKikobi0+ZGF0YSkpLT5jdXI7CisgICAgICAgIGlmICghZHYpIHRwbF9ob29rLmZhdGFsKCJt
dXN0IHVucGFjayBwYXJlbnQgb2Ygbm9kZSBiZWZvcmUgbm9kZSBpdHNlbGZcbiIpOworICAgIH0K
KworICAgIGMgPSBuLT5jaGlsZHJlbjsKKyAgICB3aGlsZSAoYykgeworICAgICAgICBzd2l0Y2gg
KGMtPnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfQllURToKKyAgICAgICAgICAg
IGNhc2UgVFBMX1RZUEVfRE9VQkxFOgorICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9JTlQzMjoK
KyAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfVUlOVDMyOgorICAgICAgICAgICAgY2FzZSBUUExf
VFlQRV9JTlQ2NDoKKyAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfVUlOVDY0OgorICAgICAgICAg
ICAgY2FzZSBUUExfVFlQRV9JTlQxNjoKKyAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfVUlOVDE2
OgorICAgICAgICAgICAgICAgIC8qIHVucGFjayBlbGVtZW50cyBvZiBjcm9zcy1lbmRpYW4gb2N0
b3Rob3JwaWMgYXJyYXkgaW5kaXZpZHVhbGx5ICovCisgICAgICAgICAgICAgICAgaWYgKCgodHBs
X3Jvb3RfZGF0YSopKHItPmRhdGEpKS0+ZmxhZ3MgJiBUUExfWEVORElBTikgeworICAgICAgICAg
ICAgICAgICAgICBmb3IoZmlkeD0wOyBmaWR4IDwgYy0+bnVtOyBmaWR4KyspIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNhZGRyID0gKHZvaWQqKSgodWludHB0cl90KWMtPmFkZHIgKyAoZmlk
eCAqIHRwbF90eXBlc1tjLT50eXBlXS5zeikpOworICAgICAgICAgICAgICAgICAgICAgICAgbWVt
Y3B5KGNhZGRyLGR2LHRwbF90eXBlc1tjLT50eXBlXS5zeik7CisgICAgICAgICAgICAgICAgICAg
ICAgICB0cGxfYnl0ZXN3YXAoY2FkZHIsIHRwbF90eXBlc1tjLT50eXBlXS5zeik7CisgICAgICAg
ICAgICAgICAgICAgICAgICBkdiA9ICh2b2lkKikoKHVpbnRwdHJfdClkdiArIHRwbF90eXBlc1tj
LT50eXBlXS5zeik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAvKiBidWxrIHVucGFjayBvayBpZiBub3QgY3Jvc3Mt
ZW5kaWFuICovCisgICAgICAgICAgICAgICAgICAgIG1lbWNweShjLT5hZGRyLCBkdiwgdHBsX3R5
cGVzW2MtPnR5cGVdLnN6ICogYy0+bnVtKTsKKyAgICAgICAgICAgICAgICAgICAgZHYgPSAodm9p
ZCopKCh1aW50cHRyX3QpZHYgKyB0cGxfdHlwZXNbYy0+dHlwZV0uc3ogKiBjLT5udW0pOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
VFBMX1RZUEVfQklOOgorICAgICAgICAgICAgICAgIG1lbWNweSgmc2xlbixkdixzaXplb2YodWlu
dDMyX3QpKTsKKyAgICAgICAgICAgICAgICBpZiAoKCh0cGxfcm9vdF9kYXRhKikoci0+ZGF0YSkp
LT5mbGFncyAmIFRQTF9YRU5ESUFOKQorICAgICAgICAgICAgICAgICAgICB0cGxfYnl0ZXN3YXAo
JnNsZW4sIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICAgICAgICAgIGlmIChzbGVuID4gMCkg
eworICAgICAgICAgICAgICAgICAgICBzdHIgPSAoY2hhciopdHBsX2hvb2subWFsbG9jKHNsZW4p
OworICAgICAgICAgICAgICAgICAgICBpZiAoIXN0cikgZmF0YWxfb29tKCk7CisgICAgICAgICAg
ICAgICAgfSBlbHNlIHN0cj1OVUxMOworICAgICAgICAgICAgICAgIGR2ID0gKHZvaWQqKSgodWlu
dHB0cl90KWR2ICsgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgICAgICAgICAgaWYgKHNsZW4+
MCkgbWVtY3B5KHN0cixkdixzbGVuKTsKKyAgICAgICAgICAgICAgICBtZW1jcHkoJigoKHRwbF9i
aW4qKWMtPmFkZHIpLT5hZGRyKSwmc3RyLHNpemVvZih2b2lkKikpOworICAgICAgICAgICAgICAg
IG1lbWNweSgmKCgodHBsX2JpbiopYy0+YWRkciktPnN6KSwmc2xlbixzaXplb2YodWludDMyX3Qp
KTsKKyAgICAgICAgICAgICAgICBkdiA9ICh2b2lkKikoKHVpbnRwdHJfdClkdiArIHNsZW4pOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9TVFI6Cisg
ICAgICAgICAgICAgICAgZm9yKGZpZHg9MDsgZmlkeCA8IGMtPm51bTsgZmlkeCsrKSB7CisgICAg
ICAgICAgICAgICAgICBtZW1jcHkoJnNsZW4sZHYsc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAg
ICAgICAgICAgICBpZiAoKCh0cGxfcm9vdF9kYXRhKikoci0+ZGF0YSkpLT5mbGFncyAmIFRQTF9Y
RU5ESUFOKQorICAgICAgICAgICAgICAgICAgICAgIHRwbF9ieXRlc3dhcCgmc2xlbiwgc2l6ZW9m
KHVpbnQzMl90KSk7CisgICAgICAgICAgICAgICAgICBpZiAoKCh0cGxfcm9vdF9kYXRhKikoci0+
ZGF0YSkpLT5mbGFncyAmIFRQTF9PTERfU1RSSU5HX0ZNVCkKKyAgICAgICAgICAgICAgICAgICAg
c2xlbiArPSAxOworICAgICAgICAgICAgICAgICAgZHYgPSAodm9pZCopKCh1aW50cHRyX3QpZHYg
KyBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgICAgICAgICAgIGlmIChzbGVuKSB7ICAvKiBz
bGVuIGluY2x1ZGVzIFwwICovCisgICAgICAgICAgICAgICAgICAgIHN0ciA9IChjaGFyKil0cGxf
aG9vay5tYWxsb2Moc2xlbik7CisgICAgICAgICAgICAgICAgICAgIGlmICghc3RyKSBmYXRhbF9v
b20oKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNsZW4+MSkgbWVtY3B5KHN0cixkdixzbGVu
LTEpOworICAgICAgICAgICAgICAgICAgICBzdHJbc2xlbi0xXSA9ICdcMCc7IC8qIG51bCB0ZXJt
aW5hdGUgKi8KKyAgICAgICAgICAgICAgICAgICAgZHYgPSAodm9pZCopKCh1aW50cHRyX3QpZHYg
KyBzbGVuLTEpOworICAgICAgICAgICAgICAgICAgfSBlbHNlIHN0cj1OVUxMOworICAgICAgICAg
ICAgICAgICAgbWVtY3B5KCYoKGNoYXIqKiljLT5hZGRyKVtmaWR4XSwmc3RyLHNpemVvZihjaGFy
KikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgVFBMX1RZUEVfUE9VTkQ6CisgICAgICAgICAgICAgICAgLyogaXRlcmF0ZSBvdmVy
IHByZWNlZGluZyBub2RlcyAqLworICAgICAgICAgICAgICAgIHBkID0gKHRwbF9wb3VuZF9kYXRh
KiljLT5kYXRhOworICAgICAgICAgICAgICAgIGl0ZXJtYXggPSBjLT5udW07CisgICAgICAgICAg
ICAgICAgaWYgKCsrKHBkLT5pdGVybnVtKSA8IGl0ZXJtYXgpIHsKKyAgICAgICAgICAgICAgICAg
IC8qIGluIHN0YXJ0IG9yIG1pZHN0IG9mIGxvb3AuIGFkdmFuY2UgYWRkci9kYXRhIHBvaW50ZXJz
LiAqLworICAgICAgICAgICAgICAgICAgZm9yKG5wPXBkLT5pdGVyX3N0YXJ0X25vZGU7IG5wICE9
IGM7IG5wID0gbnAtPm5leHQpIHsKKyAgICAgICAgICAgICAgICAgICAgbnAtPmFkZHIgPSAoY2hh
ciopKG5wLT5hZGRyKSArIHBkLT5pbnRlcl9lbHRfbGVuOworICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgLyogZG8gbmV4dCBpdGVyYXRpb24gKi8KKyAgICAgICAgICAgICAg
ICAgIGMgPSBwZC0+aXRlcl9zdGFydF9ub2RlOworICAgICAgICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgICAgICAgICB9IGVsc2UgeyAvKiBsb29wIGNvbXBsZXRlLiAqLworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgLyogcmVzZXQgaXRlcmF0aW9uIGluZGV4IGFu
ZCBhZGRyL2RhdGEgcG9pbnRlcnMuICovCisgICAgICAgICAgICAgICAgICBwZC0+aXRlcm51bSA9
IDA7CisgICAgICAgICAgICAgICAgICBmb3IobnA9cGQtPml0ZXJfc3RhcnRfbm9kZTsgbnAgIT0g
YzsgbnAgPSBucC0+bmV4dCkgeworICAgICAgICAgICAgICAgICAgICBucC0+YWRkciA9IChjaGFy
KikobnAtPmFkZHIpIC0gKChpdGVybWF4LTEpICogcGQtPmludGVyX2VsdF9sZW4pOworICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9BUlk6CisgICAgICAgICAgICAgICAgaWYgKHRw
bF9zZXJsZW4ocixjLGR2LCAmQV9ieXRlcykgPT0gLTEpIAorICAgICAgICAgICAgICAgICAgICB0
cGxfaG9vay5mYXRhbCgiaW50ZXJuYWwgZXJyb3IgaW4gdW5wYWNrXG4iKTsKKyAgICAgICAgICAg
ICAgICBtZW1jcHkoICYoKHRwbF9hdHlwKikoYy0+ZGF0YSkpLT5udW0sIGR2LCBzaXplb2YodWlu
dDMyX3QpKTsKKyAgICAgICAgICAgICAgICBpZiAoKCh0cGxfcm9vdF9kYXRhKikoci0+ZGF0YSkp
LT5mbGFncyAmIFRQTF9YRU5ESUFOKQorICAgICAgICAgICAgICAgICAgICB0cGxfYnl0ZXN3YXAo
JigodHBsX2F0eXAqKShjLT5kYXRhKSktPm51bSwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAg
ICAgICAgICAgKCh0cGxfYXR5cCopKGMtPmRhdGEpKS0+Y3VyID0gKHZvaWQqKSgodWludHB0cl90
KWR2K3NpemVvZih1aW50MzJfdCkpOworICAgICAgICAgICAgICAgIGR2ID0gKHZvaWQqKSgodWlu
dHB0cl90KWR2ICsgQV9ieXRlcyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHRwbF9ob29rLmZhdGFsKCJ1bnN1cHBvcnRlZCBm
b3JtYXQgY2hhcmFjdGVyXG4iKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIGMgPSBjLT5uZXh0OworICAgIH0KKyAgICBpZiAobi0+dHlwZSA9PSBUUExfVFlQ
RV9BUlkpICgodHBsX2F0eXAqKShuLT5kYXRhKSktPmN1ciA9IGR2OyAvKiBuZXh0IGVsZW1lbnQg
Ki8KKyAgICByZXR1cm4gcmM7Cit9CisKKy8qIFNwZWNpYWxpemVkIGZ1bmN0aW9uIHRoYXQgdW5w
YWNrcyBvbmx5IHRoZSByb290J3MgQSBub2RlcywgYWZ0ZXIgdHBsX2xvYWQgICovCitzdGF0aWMg
aW50IHRwbF91bnBhY2tBMCh0cGxfbm9kZSAqcikgeworICAgIHRwbF9ub2RlICpuLCAqYzsKKyAg
ICB1aW50MzJfdCBzbGVuOworICAgIGludCByYz0xLGZpZHgsaTsKKyAgICB2b2lkICpkdjsKKyAg
ICBzaXplX3QgQV9ieXRlcywgaXRlcm1heDsKKyAgICB0cGxfcG91bmRfZGF0YSAqcGQ7CisKKyAg
ICBuID0gcjsKKyAgICBkdiA9IHRwbF9maW5kX2RhdGFfc3RhcnQoICgodHBsX3Jvb3RfZGF0YSop
KHItPmRhdGEpKS0+bW1hcC50ZXh0KTsKKworICAgIGM9bi0+Y2hpbGRyZW47CisgICAgd2hpbGUg
KGMpICB7CisgICAgICAgIHN3aXRjaCAoYy0+dHlwZSkgeworICAgICAgICAgICAgY2FzZSBUUExf
VFlQRV9CWVRFOgorICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9ET1VCTEU6CisgICAgICAgICAg
ICBjYXNlIFRQTF9UWVBFX0lOVDMyOgorICAgICAgICAgICAgY2FzZSBUUExfVFlQRV9VSU5UMzI6
CisgICAgICAgICAgICBjYXNlIFRQTF9UWVBFX0lOVDY0OgorICAgICAgICAgICAgY2FzZSBUUExf
VFlQRV9VSU5UNjQ6CisgICAgICAgICAgICBjYXNlIFRQTF9UWVBFX0lOVDE2OgorICAgICAgICAg
ICAgY2FzZSBUUExfVFlQRV9VSU5UMTY6CisgICAgICAgICAgICAgICAgZm9yKGZpZHg9MDtmaWR4
IDwgYy0+bnVtOyBmaWR4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgZHYgPSAodm9pZCopKCh1
aW50cHRyX3QpZHYgKyB0cGxfdHlwZXNbYy0+dHlwZV0uc3opOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfQklOOgor
ICAgICAgICAgICAgICAgIG1lbWNweSgmc2xlbixkdixzaXplb2YodWludDMyX3QpKTsKKyAgICAg
ICAgICAgICAgICBpZiAoKCh0cGxfcm9vdF9kYXRhKikoci0+ZGF0YSkpLT5mbGFncyAmIFRQTF9Y
RU5ESUFOKQorICAgICAgICAgICAgICAgICAgICB0cGxfYnl0ZXN3YXAoJnNsZW4sIHNpemVvZih1
aW50MzJfdCkpOworICAgICAgICAgICAgICAgIGR2ID0gKHZvaWQqKSgodWludHB0cl90KWR2ICsg
c2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgICAgICAgICAgZHYgPSAodm9pZCopKCh1aW50cHRy
X3QpZHYgKyBzbGVuKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
VFBMX1RZUEVfU1RSOgorICAgICAgICAgICAgICAgIGZvcihpPTA7IGk8Yy0+bnVtOyBpKyspIHsK
KyAgICAgICAgICAgICAgICAgIG1lbWNweSgmc2xlbixkdixzaXplb2YodWludDMyX3QpKTsKKyAg
ICAgICAgICAgICAgICAgIGlmICgoKHRwbF9yb290X2RhdGEqKShyLT5kYXRhKSktPmZsYWdzICYg
VFBMX1hFTkRJQU4pCisgICAgICAgICAgICAgICAgICAgICAgdHBsX2J5dGVzd2FwKCZzbGVuLCBz
aXplb2YodWludDMyX3QpKTsKKyAgICAgICAgICAgICAgICAgIGlmICgoKHRwbF9yb290X2RhdGEq
KShyLT5kYXRhKSktPmZsYWdzICYgVFBMX09MRF9TVFJJTkdfRk1UKQorICAgICAgICAgICAgICAg
ICAgICBzbGVuICs9IDE7CisgICAgICAgICAgICAgICAgICBkdiA9ICh2b2lkKikoKHVpbnRwdHJf
dClkdiArIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICAgICAgICAgICAgaWYgKHNsZW4+MSkg
ZHYgPSAodm9pZCopKCh1aW50cHRyX3QpZHYgKyBzbGVuLTEpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVFBMX1RZUEVfUE9VTkQ6
CisgICAgICAgICAgICAgICAgLyogaXRlcmF0ZSBvdmVyIHRoZSBwcmVjZWRpbmcgbm9kZXMgKi8K
KyAgICAgICAgICAgICAgICBpdGVybWF4ID0gYy0+bnVtOworICAgICAgICAgICAgICAgIHBkID0g
KHRwbF9wb3VuZF9kYXRhKiljLT5kYXRhOworICAgICAgICAgICAgICAgIGlmICgrKyhwZC0+aXRl
cm51bSkgPCBpdGVybWF4KSB7CisgICAgICAgICAgICAgICAgICBjID0gcGQtPml0ZXJfc3RhcnRf
bm9kZTsKKyAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0gZWxz
ZSB7IC8qIGxvb3AgY29tcGxldGUuICovCisgICAgICAgICAgICAgICAgICBwZC0+aXRlcm51bSA9
IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBUUExfVFlQRV9BUlk6CisgICAgICAgICAgICAgICAgaWYgKCB0cGxfc2VybGVuKHIs
YyxkdiwgJkFfYnl0ZXMpID09IC0xKSAKKyAgICAgICAgICAgICAgICAgICAgdHBsX2hvb2suZmF0
YWwoImludGVybmFsIGVycm9yIGluIHVucGFja0EwXG4iKTsKKyAgICAgICAgICAgICAgICBtZW1j
cHkoICYoKHRwbF9hdHlwKikoYy0+ZGF0YSkpLT5udW0sIGR2LCBzaXplb2YodWludDMyX3QpKTsK
KyAgICAgICAgICAgICAgICBpZiAoKCh0cGxfcm9vdF9kYXRhKikoci0+ZGF0YSkpLT5mbGFncyAm
IFRQTF9YRU5ESUFOKQorICAgICAgICAgICAgICAgICAgICB0cGxfYnl0ZXN3YXAoJigodHBsX2F0
eXAqKShjLT5kYXRhKSktPm51bSwgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgICAgICAgICAg
KCh0cGxfYXR5cCopKGMtPmRhdGEpKS0+Y3VyID0gKHZvaWQqKSgodWludHB0cl90KWR2K3NpemVv
Zih1aW50MzJfdCkpOworICAgICAgICAgICAgICAgIGR2ID0gKHZvaWQqKSgodWludHB0cl90KWR2
ICsgQV9ieXRlcyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIHRwbF9ob29rLmZhdGFsKCJ1bnN1cHBvcnRlZCBmb3JtYXQgY2hh
cmFjdGVyXG4iKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
PWMtPm5leHQ7CisgICAgfQorICAgIHJldHVybiByYzsKK30KKworLyogSW4tcGxhY2UgYnl0ZSBv
cmRlciBzd2FwcGluZyBvZiBhIHdvcmQgb2YgbGVuZ3RoICJsZW4iIGJ5dGVzICovCitzdGF0aWMg
dm9pZCB0cGxfYnl0ZXN3YXAodm9pZCAqd29yZCwgaW50IGxlbikgeworICAgIGludCBpOworICAg
IGNoYXIgYywgKnc7CisgICAgdyA9IChjaGFyKil3b3JkOworICAgIGZvcihpPTA7IGk8bGVuLzI7
IGkrKykgeworICAgICAgICBjID0gd1tpXTsKKyAgICAgICAgd1tpXSA9IHdbbGVuLTEtaV07Cisg
ICAgICAgIHdbbGVuLTEtaV0gPSBjOworICAgIH0KK30KKworc3RhdGljIHZvaWQgdHBsX2ZhdGFs
KGNoYXIgKmZtdCwgLi4uKSB7CisgICAgdmFfbGlzdCBhcDsKKyAgICBjaGFyIGV4aXRfbXNnWzEw
MF07CisKKyAgICB2YV9zdGFydChhcCxmbXQpOworICAgIHZzbnByaW50ZihleGl0X21zZywgMTAw
LCBmbXQsIGFwKTsKKyAgICB2YV9lbmQoYXApOworCisgICAgdHBsX2hvb2sub29wcygiJXMiLCBl
eGl0X21zZyk7CisgICAgZXhpdCgtMSk7Cit9CisKK1RQTF9BUEkgaW50IHRwbF9nYXRoZXIoaW50
IG1vZGUsIC4uLikgeworICAgIHZhX2xpc3QgYXA7CisgICAgaW50IGZkLHJjPTA7CisgICAgc2l6
ZV90ICpzenAsc3o7CisgICAgdm9pZCAqKmltZywqYWRkciwqZGF0YTsKKyAgICB0cGxfZ2F0aGVy
X3QgKipnczsKKyAgICB0cGxfZ2F0aGVyX2NiICpjYjsKKworICAgIHZhX3N0YXJ0KGFwLG1vZGUp
OworICAgIHN3aXRjaCAobW9kZSkgeworICAgICAgICBjYXNlIFRQTF9HQVRIRVJfQkxPQ0tJTkc6
CisgICAgICAgICAgICBmZCA9IHZhX2FyZyhhcCxpbnQpOworICAgICAgICAgICAgaW1nID0gdmFf
YXJnKGFwLHZvaWQqKTsKKyAgICAgICAgICAgIHN6cCA9IHZhX2FyZyhhcCxzaXplX3QqKTsKKyAg
ICAgICAgICAgIHJjID0gdHBsX2dhdGhlcl9ibG9ja2luZyhmZCxpbWcsc3pwKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFRQTF9HQVRIRVJfTk9OQkxPQ0tJTkc6CisgICAgICAg
ICAgICBmZCA9IHZhX2FyZyhhcCxpbnQpOworICAgICAgICAgICAgZ3MgPSAodHBsX2dhdGhlcl90
KiopdmFfYXJnKGFwLHZvaWQqKTsKKyAgICAgICAgICAgIGNiID0gKHRwbF9nYXRoZXJfY2IqKXZh
X2FyZyhhcCx0cGxfZ2F0aGVyX2NiKik7CisgICAgICAgICAgICBkYXRhID0gdmFfYXJnKGFwLHZv
aWQqKTsKKyAgICAgICAgICAgIHJjID0gdHBsX2dhdGhlcl9ub25ibG9ja2luZyhmZCxncyxjYixk
YXRhKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRQTF9HQVRIRVJfTUVNOgor
ICAgICAgICAgICAgYWRkciA9IHZhX2FyZyhhcCx2b2lkKik7CisgICAgICAgICAgICBzeiA9IHZh
X2FyZyhhcCxzaXplX3QpOworICAgICAgICAgICAgZ3MgPSAodHBsX2dhdGhlcl90KiopdmFfYXJn
KGFwLHZvaWQqKTsKKyAgICAgICAgICAgIGNiID0gKHRwbF9nYXRoZXJfY2IqKXZhX2FyZyhhcCx0
cGxfZ2F0aGVyX2NiKik7CisgICAgICAgICAgICBkYXRhID0gdmFfYXJnKGFwLHZvaWQqKTsKKyAg
ICAgICAgICAgIHJjID0gdHBsX2dhdGhlcl9tZW0oYWRkcixzeixncyxjYixkYXRhKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgdHBsX2hvb2suZmF0
YWwoInVuc3VwcG9ydGVkIHRwbF9nYXRoZXIgbW9kZSAlZFxuIixtb2RlKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICB2YV9lbmQoYXApOworICAgIHJldHVybiByYzsKK30KKworLyog
ZGVxdWV1ZSBhIHRwbCBieSByZWFkaW5nIHVudGlsIG9uZSBmdWxsIHRwbCBpbWFnZSBpcyBvYnRh
aW5lZC4KKyAqIFdlIHRha2UgY2FyZSBub3QgdG8gcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIHRw
bC4KKyAqIFRoaXMgaXMgaW50ZW5kZWQgYXMgYSBibG9ja2luZyBjYWxsIGkuZS4gZm9yIHVzZSB3
aXRoIGEgYmxvY2tpbmcgZmQuCisgKiBJdCBjYW4gYmUgZ2l2ZW4gYSBub24tYmxvY2tpbmcgZmQs
IGJ1dCB0aGUgcmVhZCBzcGlucyBpZiB3ZSBoYXZlIHRvIHdhaXQuCisgKi8KK3N0YXRpYyBpbnQg
dHBsX2dhdGhlcl9ibG9ja2luZyhpbnQgZmQsIHZvaWQgKippbWcsIHNpemVfdCAqc3opIHsKKyAg
ICBjaGFyIHByZWFtYmxlWzhdOworICAgIGludCBpPTAsIHJjOworICAgIHVpbnQzMl90IHRwbGxl
bjsKKworICAgIGRvIHsgCisgICAgICAgIHJjID0gcmVhZChmZCwmcHJlYW1ibGVbaV0sOC1pKTsK
KyAgICAgICAgaSArPSAocmM+MCkgPyByYyA6IDA7CisgICAgfSB3aGlsZSAoKHJjPT0tMSAmJiAo
ZXJybm89PUVJTlRSfHxlcnJubz09RUFHQUlOKSkgfHwgKHJjPjAgJiYgaTw4KSk7CisKKyAgICBp
ZiAocmM8MCkgeworICAgICAgICB0cGxfaG9vay5vb3BzKCJ0cGxfZ2F0aGVyX2ZkX2Jsb2NraW5n
IGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAg
ICB9IGVsc2UgaWYgKHJjID09IDApIHsKKyAgICAgICAgLyogdHBsX2hvb2sub29wcygidHBsX2dh
dGhlcl9mZF9ibG9ja2luZzogZW9mXG4iKTsgKi8KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfSBl
bHNlIGlmIChpICE9IDgpIHsKKyAgICAgICAgdHBsX2hvb2sub29wcygiaW50ZXJuYWwgZXJyb3Jc
biIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKHByZWFtYmxlWzBdID09
ICd0JyAmJiBwcmVhbWJsZVsxXSA9PSAncCcgJiYgcHJlYW1ibGVbMl0gPT0gJ2wnKSB7CisgICAg
ICAgIG1lbWNweSgmdHBsbGVuLCZwcmVhbWJsZVs0XSw0KTsKKyAgICAgICAgaWYgKHRwbF9uZWVk
c19lbmRpYW5fc3dhcChwcmVhbWJsZSkpIHRwbF9ieXRlc3dhcCgmdHBsbGVuLDQpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIHRwbF9ob29rLm9vcHMoInRwbF9nYXRoZXJfZmRfYmxvY2tpbmc6IG5v
bi10cGwgaW5wdXRcbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogbWFs
bG9jIHNwYWNlIGZvciByZW1haW5kZXIgb2YgdHBsIGltYWdlIChvdmVyYWxsIGxlbmd0aCB0cGxs
ZW4pIAorICAgICAqIGFuZCByZWFkIGl0IGluCisgICAgICovCisgICAgaWYgKHRwbF9ob29rLmdh
dGhlcl9tYXggPiAwICYmIAorICAgICAgICB0cGxsZW4gPiB0cGxfaG9vay5nYXRoZXJfbWF4KSB7
CisgICAgICAgIHRwbF9ob29rLm9vcHMoInRwbCBleGNlZWRzIG1heCBsZW5ndGggJWRcbiIsIAor
ICAgICAgICAgICAgdHBsX2hvb2suZ2F0aGVyX21heCk7CisgICAgICAgIHJldHVybiAtMjsKKyAg
ICB9CisgICAgKnN6ID0gdHBsbGVuOworICAgIGlmICggKCppbWcgPSB0cGxfaG9vay5tYWxsb2Mo
dHBsbGVuKSkgPT0gTlVMTCkgeworICAgICAgICBmYXRhbF9vb20oKTsKKyAgICB9CisKKyAgICBt
ZW1jcHkoKmltZyxwcmVhbWJsZSw4KTsgIC8qIGNvcHkgcHJlYW1ibGUgdG8gb3V0cHV0IGJ1ZmZl
ciAqLworICAgIGk9ODsKKyAgICBkbyB7IAorICAgICAgICByYyA9IHJlYWQoZmQsJigoKihjaGFy
KiopaW1nKVtpXSksdHBsbGVuLWkpOworICAgICAgICBpICs9IChyYz4wKSA/IHJjIDogMDsKKyAg
ICB9IHdoaWxlICgocmM9PS0xICYmIChlcnJubz09RUlOVFJ8fGVycm5vPT1FQUdBSU4pKSB8fCAo
cmM+MCAmJiBpPHRwbGxlbikpOworCisgICAgaWYgKHJjPDApIHsKKyAgICAgICAgdHBsX2hvb2su
b29wcygidHBsX2dhdGhlcl9mZF9ibG9ja2luZyBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJu
bykpOworICAgICAgICB0cGxfaG9vay5mcmVlKCppbWcpOworICAgICAgICByZXR1cm4gLTE7Cisg
ICAgfSBlbHNlIGlmIChyYyA9PSAwKSB7CisgICAgICAgIC8qIHRwbF9ob29rLm9vcHMoInRwbF9n
YXRoZXJfZmRfYmxvY2tpbmc6IGVvZlxuIik7ICovCisgICAgICAgIHRwbF9ob29rLmZyZWUoKmlt
Zyk7CisgICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSBpZiAoaSAhPSB0cGxsZW4pIHsKKyAg
ICAgICAgdHBsX2hvb2sub29wcygiaW50ZXJuYWwgZXJyb3JcbiIpOworICAgICAgICB0cGxfaG9v
ay5mcmVlKCppbWcpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJuIDE7
Cit9CisKKy8qIFVzZWQgYnkgc2VsZWN0KCktZHJpdmVuIGFwcHMgd2hpY2ggd2FudCB0byBnYXRo
ZXIgdHBsIGltYWdlcyBwaWVjZW1lYWwgKi8KKy8qIHRoZSBmaWxlIGRlc2NyaXB0b3IgbXVzdCBi
ZSBub24tYmxvY2tpbmcgZm9yIHRoaXMgZnVuY3Rpbm8gdG8gd29yay4gKi8KK3N0YXRpYyBpbnQg
dHBsX2dhdGhlcl9ub25ibG9ja2luZyggaW50IGZkLCB0cGxfZ2F0aGVyX3QgKipncywgdHBsX2dh
dGhlcl9jYiAqY2IsIHZvaWQgKmRhdGEpIHsKKyAgICBjaGFyIGJ1ZltUUExfR0FUSEVSX0JVRkxF
Tl0sICppbWcsICp0cGw7CisgICAgaW50IHJjLCBrZWVwX2xvb3BpbmcsIGNicmM9MDsKKyAgICBz
aXplX3QgY2F0bGVuOworICAgIHVpbnQzMl90IHRwbGxlbjsKKworICAgIHdoaWxlICgxKSB7Cisg
ICAgICAgIHJjID0gcmVhZChmZCxidWYsVFBMX0dBVEhFUl9CVUZMRU4pOworICAgICAgICBpZiAo
cmMgPT0gLTEpIHsKKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFSU5UUikgY29udGludWU7ICAv
KiBnb3Qgc2lnbmFsIGR1cmluZyByZWFkLCBpZ25vcmUgKi8KKyAgICAgICAgICAgIGlmIChlcnJu
byA9PSBFQUdBSU4pIHJldHVybiAxOyAvKiBub3RoaW5nIHRvIHJlYWQgcmlnaHQgbm93ICovCisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB0cGxfaG9vay5vb3BzKCJ0cGxfZ2F0
aGVyIGZhaWxlZDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICAgICAgaWYg
KCpncykgeworICAgICAgICAgICAgICAgICAgICB0cGxfaG9vay5mcmVlKCgqZ3MpLT5pbWcpOwor
ICAgICAgICAgICAgICAgICAgICB0cGxfaG9vay5mcmVlKCpncyk7CisgICAgICAgICAgICAgICAg
ICAgICpncyA9IE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVy
biAtMTsgICAgICAgICAgICAgICAgIC8qIGVycm9yLCBjYWxsZXIgc2hvdWxkIGNsb3NlIGZkICAq
LworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHJjID09IDApIHsKKyAgICAgICAg
ICAgIGlmICgqZ3MpIHsKKyAgICAgICAgICAgICAgICB0cGxfaG9vay5vb3BzKCJ0cGxfZ2F0aGVy
OiBwYXJ0aWFsIHRwbCBpbWFnZSBwcmVjZWRlcyBFT0ZcbiIpOworICAgICAgICAgICAgICAgIHRw
bF9ob29rLmZyZWUoKCpncyktPmltZyk7CisgICAgICAgICAgICAgICAgdHBsX2hvb2suZnJlZSgq
Z3MpOworICAgICAgICAgICAgICAgICpncyA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAgLyogRU9GLCBjYWxsZXIgc2hvdWxk
IGNsb3NlIGZkICovCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiBjb25jYXRlbmF0
ZSBhbnkgcGFydGlhbCB0cGwgZnJvbSBsYXN0IHJlYWQgd2l0aCBuZXcgYnVmZmVyICovCisgICAg
ICAgICAgICBpZiAoKmdzKSB7CisgICAgICAgICAgICAgICAgY2F0bGVuID0gKCpncyktPmxlbiAr
IHJjOworICAgICAgICAgICAgICAgIGlmICh0cGxfaG9vay5nYXRoZXJfbWF4ID4gMCAmJiAKKyAg
ICAgICAgICAgICAgICAgICAgY2F0bGVuID4gdHBsX2hvb2suZ2F0aGVyX21heCkgeworICAgICAg
ICAgICAgICAgICAgICB0cGxfaG9vay5mcmVlKCAoKmdzKS0+aW1nICk7CisgICAgICAgICAgICAg
ICAgICAgIHRwbF9ob29rLmZyZWUoICgqZ3MpICk7CisgICAgICAgICAgICAgICAgICAgICpncyA9
IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIHRwbF9ob29rLm9vcHMoInRwbCBleGNlZWRzIG1h
eCBsZW5ndGggJWRcbiIsIAorICAgICAgICAgICAgICAgICAgICAgICAgdHBsX2hvb2suZ2F0aGVy
X21heCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMjsgICAgICAgICAgICAgIC8qIGVy
cm9yLCBjYWxsZXIgc2hvdWxkIGNsb3NlIGZkICovCisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmICggKGltZyA9IHRwbF9ob29rLnJlYWxsb2MoKCpncyktPmltZywgY2F0bGVu
KSkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBmYXRhbF9vb20oKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgbWVtY3B5KGltZyArICgqZ3MpLT5sZW4sIGJ1Ziwg
cmMpOworICAgICAgICAgICAgICAgIHRwbF9ob29rLmZyZWUoKmdzKTsKKyAgICAgICAgICAgICAg
ICAqZ3MgPSBOVUxMOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbWcg
PSBidWY7CisgICAgICAgICAgICAgICAgY2F0bGVuID0gcmM7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAvKiBpc29sYXRlIGFueSBmdWxsIHRwbChzKSBpbiBpbWcgYW5kIGludm9rZSBjYiBm
b3IgZWFjaCAqLworICAgICAgICAgICAgdHBsID0gaW1nOworICAgICAgICAgICAga2VlcF9sb29w
aW5nID0gKHRwbCs4IDwgaW1nK2NhdGxlbikgPyAxIDogMDsKKyAgICAgICAgICAgIHdoaWxlIChr
ZWVwX2xvb3BpbmcpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3RybmNtcCgidHBsIiwgdHBsLCAz
KSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHRwbF9ob29rLm9vcHMoInRwbCBwcmVmaXgg
aW52YWxpZFxuIik7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbWcgIT0gYnVmKSB0cGxfaG9v
ay5mcmVlKGltZyk7CisgICAgICAgICAgICAgICAgICAgIHRwbF9ob29rLmZyZWUoKmdzKTsKKyAg
ICAgICAgICAgICAgICAgICAgKmdzID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IC0zOyAvKiBlcnJvciwgY2FsbGVyIHNob3VsZCBjbG9zZSBmZCAqLworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBtZW1jcHkoJnRwbGxlbiwmdHBsWzRdLDQpOworICAgICAgICAg
ICAgICAgIGlmICh0cGxfbmVlZHNfZW5kaWFuX3N3YXAodHBsKSkgdHBsX2J5dGVzd2FwKCZ0cGxs
ZW4sNCk7CisgICAgICAgICAgICAgICAgaWYgKHRwbCt0cGxsZW4gPD0gaW1nK2NhdGxlbikgewor
ICAgICAgICAgICAgICAgICAgICBjYnJjID0gKGNiKSh0cGwsdHBsbGVuLGRhdGEpOyAgLyogaW52
b2tlIGNiIGZvciB0cGwgaW1hZ2UgKi8KKyAgICAgICAgICAgICAgICAgICAgdHBsICs9IHRwbGxl
bjsgICAgICAgICAgICAgICAgIC8qIHBvaW50IHRvIG5leHQgdHBsIGltYWdlICovCisgICAgICAg
ICAgICAgICAgICAgIGlmIChjYnJjIDwgMCkga2VlcF9sb29waW5nID0gMDsKKyAgICAgICAgICAg
ICAgICAgICAgZWxzZSBrZWVwX2xvb3BpbmcgPSAodHBsKzggPCBpbWcrY2F0bGVuKSA/IDEgOiAw
OworICAgICAgICAgICAgICAgIH0gZWxzZSBrZWVwX2xvb3Bpbmc9MDsKKyAgICAgICAgICAgIH0g
CisgICAgICAgICAgICAvKiBjaGVjayBpZiBhcHAgY2FsbGJhY2sgcmVxdWVzdGVkIGNsb3N1cmUg
b2YgdHBsIHNvdXJjZSAqLworICAgICAgICAgICAgaWYgKGNicmMgPCAwKSB7CisgICAgICAgICAg
ICAgICAgdHBsX2hvb2sub29wcygidHBsX2ZkX2dhdGhlciBhYm9ydGVkIGJ5IGFwcCBjYWxsYmFj
a1xuIik7CisgICAgICAgICAgICAgICAgaWYgKGltZyAhPSBidWYpIHRwbF9ob29rLmZyZWUoaW1n
KTsKKyAgICAgICAgICAgICAgICBpZiAoKmdzKSB0cGxfaG9vay5mcmVlKCpncyk7CisgICAgICAg
ICAgICAgICAgKmdzID0gTlVMTDsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTQ7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAvKiBzdG9yZSBhbnkgbGVmdG92ZXIsIHBhcnRpYWwgdHBsIGZy
YWdtZW50IGZvciBuZXh0IHJlYWQgKi8KKyAgICAgICAgICAgIGlmICh0cGwgPT0gaW1nICYmIGlt
ZyAhPSBidWYpIHsgIAorICAgICAgICAgICAgICAgIC8qIGNvbnN1bWVkIG5vdGhpbmcgZnJvbSBp
bWchPWJ1ZiAqLworICAgICAgICAgICAgICAgIGlmICggKCpncyA9IHRwbF9ob29rLm1hbGxvYyhz
aXplb2YodHBsX2dhdGhlcl90KSkpID09IE5VTEwgKSB7CisgICAgICAgICAgICAgICAgICAgIGZh
dGFsX29vbSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAoKmdzKS0+aW1n
ID0gdHBsOworICAgICAgICAgICAgICAgICgqZ3MpLT5sZW4gPSBjYXRsZW47CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKHRwbCA8IGltZytjYXRsZW4pIHsgIAorICAgICAgICAgICAgICAgIC8qIGNv
bnN1bWVkIDErIHRwbChzKSBmcm9tIGltZyE9YnVmIG9yIDAgZnJvbSBpbWc9PWJ1ZiAqLworICAg
ICAgICAgICAgICAgIGlmICggKCpncyA9IHRwbF9ob29rLm1hbGxvYyhzaXplb2YodHBsX2dhdGhl
cl90KSkpID09IE5VTEwgKSB7CisgICAgICAgICAgICAgICAgICAgIGZhdGFsX29vbSgpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoICgoKmdzKS0+aW1nID0gdHBsX2hv
b2subWFsbG9jKGltZytjYXRsZW4gLSB0cGwpKSA9PSBOVUxMICkgeworICAgICAgICAgICAgICAg
ICAgICBmYXRhbF9vb20oKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKCpn
cyktPmxlbiA9IGltZytjYXRsZW4gLSB0cGw7CisgICAgICAgICAgICAgICAgbWVtY3B5KCAoKmdz
KS0+aW1nLCB0cGwsIGltZytjYXRsZW4gLSB0cGwpOworICAgICAgICAgICAgICAgIC8qIGZyZWUg
cGFydGlhbGx5IGNvbnN1bWVkIGNvbmNhdCBidWZmZXIgaWYgdXNlZCAqLworICAgICAgICAgICAg
ICAgIGlmIChpbWcgIT0gYnVmKSB0cGxfaG9vay5mcmVlKGltZyk7IAorICAgICAgICAgICAgfSBl
bHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cGwocykgZnVsbHkgY29uc3VtZWQgKi8K
KyAgICAgICAgICAgICAgICAvKiBmcmVlIGNvbnN1bWVkIGNvbmNhdCBidWZmZXIgaWYgdXNlZCAq
LworICAgICAgICAgICAgICAgIGlmIChpbWcgIT0gYnVmKSB0cGxfaG9vay5mcmVlKGltZyk7IAor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSAKK30KKworLyogZ2F0aGVyIHRwbCBwaWVj
ZW1lYWwgZnJvbSBtZW1vcnkgYnVmZmVyIChub3QgZmQpIGUuZy4sIGZyb20gYSBsb3dlci1sZXZl
bCBhcGkgKi8KK3N0YXRpYyBpbnQgdHBsX2dhdGhlcl9tZW0oIGNoYXIgKmJ1Ziwgc2l6ZV90IGxl
biwgdHBsX2dhdGhlcl90ICoqZ3MsIHRwbF9nYXRoZXJfY2IgKmNiLCB2b2lkICpkYXRhKSB7Cisg
ICAgY2hhciAqaW1nLCAqdHBsOworICAgIGludCBrZWVwX2xvb3BpbmcsIGNicmM9MDsKKyAgICBz
aXplX3QgY2F0bGVuOworICAgIHVpbnQzMl90IHRwbGxlbjsKKworICAgIC8qIGNvbmNhdGVuYXRl
IGFueSBwYXJ0aWFsIHRwbCBmcm9tIGxhc3QgcmVhZCB3aXRoIG5ldyBidWZmZXIgKi8KKyAgICBp
ZiAoKmdzKSB7CisgICAgICAgIGNhdGxlbiA9ICgqZ3MpLT5sZW4gKyBsZW47CisgICAgICAgIGlm
ICh0cGxfaG9vay5nYXRoZXJfbWF4ID4gMCAmJiAKKyAgICAgICAgICAgIGNhdGxlbiA+IHRwbF9o
b29rLmdhdGhlcl9tYXgpIHsKKyAgICAgICAgICAgIHRwbF9ob29rLmZyZWUoICgqZ3MpLT5pbWcg
KTsKKyAgICAgICAgICAgIHRwbF9ob29rLmZyZWUoICgqZ3MpICk7CisgICAgICAgICAgICAqZ3Mg
PSBOVUxMOworICAgICAgICAgICAgdHBsX2hvb2sub29wcygidHBsIGV4Y2VlZHMgbWF4IGxlbmd0
aCAlZFxuIiwgCisgICAgICAgICAgICAgICAgdHBsX2hvb2suZ2F0aGVyX21heCk7CisgICAgICAg
ICAgICByZXR1cm4gLTI7ICAgICAgICAgICAgICAvKiBlcnJvciwgY2FsbGVyIHNob3VsZCBzdG9w
IGFjY2VwdGluZyBpbnB1dCBmcm9tIHNvdXJjZSovCisgICAgICAgIH0KKyAgICAgICAgaWYgKCAo
aW1nID0gdHBsX2hvb2sucmVhbGxvYygoKmdzKS0+aW1nLCBjYXRsZW4pKSA9PSBOVUxMKSB7Cisg
ICAgICAgICAgICBmYXRhbF9vb20oKTsKKyAgICAgICAgfQorICAgICAgICBtZW1jcHkoaW1nICsg
KCpncyktPmxlbiwgYnVmLCBsZW4pOworICAgICAgICB0cGxfaG9vay5mcmVlKCpncyk7CisgICAg
ICAgICpncyA9IE5VTEw7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW1nID0gYnVmOworICAgICAg
ICBjYXRsZW4gPSBsZW47CisgICAgfQorICAgIC8qIGlzb2xhdGUgYW55IGZ1bGwgdHBsKHMpIGlu
IGltZyBhbmQgaW52b2tlIGNiIGZvciBlYWNoICovCisgICAgdHBsID0gaW1nOworICAgIGtlZXBf
bG9vcGluZyA9ICh0cGwrOCA8IGltZytjYXRsZW4pID8gMSA6IDA7CisgICAgd2hpbGUgKGtlZXBf
bG9vcGluZykgeworICAgICAgICBpZiAoc3RybmNtcCgidHBsIiwgdHBsLCAzKSAhPSAwKSB7Cisg
ICAgICAgICAgICB0cGxfaG9vay5vb3BzKCJ0cGwgcHJlZml4IGludmFsaWRcbiIpOworICAgICAg
ICAgICAgaWYgKGltZyAhPSBidWYpIHRwbF9ob29rLmZyZWUoaW1nKTsKKyAgICAgICAgICAgIHRw
bF9ob29rLmZyZWUoKmdzKTsKKyAgICAgICAgICAgICpncyA9IE5VTEw7CisgICAgICAgICAgICBy
ZXR1cm4gLTM7IC8qIGVycm9yLCBjYWxsZXIgc2hvdWxkIHN0b3AgYWNjZXB0aW5nIGlucHV0IGZy
b20gc291cmNlKi8KKyAgICAgICAgfQorICAgICAgICBtZW1jcHkoJnRwbGxlbiwmdHBsWzRdLDQp
OworICAgICAgICBpZiAodHBsX25lZWRzX2VuZGlhbl9zd2FwKHRwbCkpIHRwbF9ieXRlc3dhcCgm
dHBsbGVuLDQpOworICAgICAgICBpZiAodHBsK3RwbGxlbiA8PSBpbWcrY2F0bGVuKSB7CisgICAg
ICAgICAgICBjYnJjID0gKGNiKSh0cGwsdHBsbGVuLGRhdGEpOyAgLyogaW52b2tlIGNiIGZvciB0
cGwgaW1hZ2UgKi8KKyAgICAgICAgICAgIHRwbCArPSB0cGxsZW47ICAgICAgICAgICAgICAgLyog
cG9pbnQgdG8gbmV4dCB0cGwgaW1hZ2UgKi8KKyAgICAgICAgICAgIGlmIChjYnJjIDwgMCkga2Vl
cF9sb29waW5nID0gMDsKKyAgICAgICAgICAgIGVsc2Uga2VlcF9sb29waW5nID0gKHRwbCs4IDwg
aW1nK2NhdGxlbikgPyAxIDogMDsKKyAgICAgICAgfSBlbHNlIGtlZXBfbG9vcGluZz0wOworICAg
IH0gCisgICAgLyogY2hlY2sgaWYgYXBwIGNhbGxiYWNrIHJlcXVlc3RlZCBjbG9zdXJlIG9mIHRw
bCBzb3VyY2UgKi8KKyAgICBpZiAoY2JyYyA8IDApIHsKKyAgICAgICAgdHBsX2hvb2sub29wcygi
dHBsX21lbV9nYXRoZXIgYWJvcnRlZCBieSBhcHAgY2FsbGJhY2tcbiIpOworICAgICAgICBpZiAo
aW1nICE9IGJ1ZikgdHBsX2hvb2suZnJlZShpbWcpOworICAgICAgICBpZiAoKmdzKSB0cGxfaG9v
ay5mcmVlKCpncyk7CisgICAgICAgICpncyA9IE5VTEw7CisgICAgICAgIHJldHVybiAtNDsKKyAg
ICB9CisgICAgLyogc3RvcmUgYW55IGxlZnRvdmVyLCBwYXJ0aWFsIHRwbCBmcmFnbWVudCBmb3Ig
bmV4dCByZWFkICovCisgICAgaWYgKHRwbCA9PSBpbWcgJiYgaW1nICE9IGJ1ZikgeyAgCisgICAg
ICAgIC8qIGNvbnN1bWVkIG5vdGhpbmcgZnJvbSBpbWchPWJ1ZiAqLworICAgICAgICBpZiAoICgq
Z3MgPSB0cGxfaG9vay5tYWxsb2Moc2l6ZW9mKHRwbF9nYXRoZXJfdCkpKSA9PSBOVUxMICkgewor
ICAgICAgICAgICAgZmF0YWxfb29tKCk7CisgICAgICAgIH0KKyAgICAgICAgKCpncyktPmltZyA9
IHRwbDsKKyAgICAgICAgKCpncyktPmxlbiA9IGNhdGxlbjsKKyAgICB9IGVsc2UgaWYgKHRwbCA8
IGltZytjYXRsZW4pIHsgIAorICAgICAgICAvKiBjb25zdW1lZCAxKyB0cGwocykgZnJvbSBpbWch
PWJ1ZiBvciAwIGZyb20gaW1nPT1idWYgKi8KKyAgICAgICAgaWYgKCAoKmdzID0gdHBsX2hvb2su
bWFsbG9jKHNpemVvZih0cGxfZ2F0aGVyX3QpKSkgPT0gTlVMTCApIHsKKyAgICAgICAgICAgIGZh
dGFsX29vbSgpOworICAgICAgICB9CisgICAgICAgIGlmICggKCgqZ3MpLT5pbWcgPSB0cGxfaG9v
ay5tYWxsb2MoaW1nK2NhdGxlbiAtIHRwbCkpID09IE5VTEwgKSB7CisgICAgICAgICAgICBmYXRh
bF9vb20oKTsKKyAgICAgICAgfQorICAgICAgICAoKmdzKS0+bGVuID0gaW1nK2NhdGxlbiAtIHRw
bDsKKyAgICAgICAgbWVtY3B5KCAoKmdzKS0+aW1nLCB0cGwsIGltZytjYXRsZW4gLSB0cGwpOwor
ICAgICAgICAvKiBmcmVlIHBhcnRpYWxseSBjb25zdW1lZCBjb25jYXQgYnVmZmVyIGlmIHVzZWQg
Ki8KKyAgICAgICAgaWYgKGltZyAhPSBidWYpIHRwbF9ob29rLmZyZWUoaW1nKTsgCisgICAgfSBl
bHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cGwocykgZnVsbHkgY29uc3VtZWQgKi8K
KyAgICAgICAgLyogZnJlZSBjb25zdW1lZCBjb25jYXQgYnVmZmVyIGlmIHVzZWQgKi8KKyAgICAg
ICAgaWYgKGltZyAhPSBidWYpIHRwbF9ob29rLmZyZWUoaW1nKTsgCisgICAgfQorICAgIHJldHVy
biAxOworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvdHBsLmgg
Yi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC90cGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5lMjM5NTNiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvdHBsLmgKQEAgLTAsMCArMSwxMzMgQEAKKy8qCitDb3B5cmlnaHQg
KGMpIDIwMDUtMjAxMCwgVHJveSBELiBIYW5zb24gICAgIGh0dHA6Ly90cGwuc291cmNlZm9yZ2Uu
bmV0CitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0
OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUworSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVECitUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEKK1BBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUgorT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCitFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CitQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKK1BST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCitORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
Ki8KKworI2lmbmRlZiBUUExfSAorI2RlZmluZSBUUExfSCAKKworI2luY2x1ZGUgPHN0ZGRlZi5o
PiAgICAgLyogc2l6ZV90ICovCisKKyNpZmRlZiBfX0lOVEVMX0NPTVBJTEVSCisjaW5jbHVkZSA8
dGJiL3RiYm1hbGxvY19wcm94eS5oPgorI2VuZGlmIC8qIEludGVsIENvbXBpbGVyIGVmZmljaWVu
dCBtZW1jcHkgZXRjICovCisKKyNpZmRlZiBfTVNDX1ZFUgordHlwZWRlZiB1bnNpZ25lZCBpbnQg
dWludDMyX3Q7CisjZWxzZQorI2luY2x1ZGUgPGludHR5cGVzLmg+ICAgLyogdWludDMyX3QgKi8K
KyNlbmRpZgorCisjaWYgZGVmaW5lZCBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYK
KworI2lmZGVmIF9XSU4zMgorI2lmZGVmIFRQTF9FWFBPUlRTCisjZGVmaW5lIFRQTF9BUEkgX19k
ZWNsc3BlYyhkbGxleHBvcnQpCisjZWxzZQkJCQkJCQkvKiAgKi8KKyNpZmRlZiBUUExfTk9MSUIK
KyNkZWZpbmUgVFBMX0FQSQorI2Vsc2UKKyNkZWZpbmUgVFBMX0FQSSBfX2RlY2xzcGVjKGRsbGlt
cG9ydCkKKyNlbmRpZiAvKiBUUExfTk9MSUIgKi8KKyNlbmRpZgkvKiBUUExfRVhQT1JUUyovCisj
ZWxzZQorI2RlZmluZSBUUExfQVBJCisjZW5kaWYKKworLyogYml0IGZsYWdzIChleHRlcm5hbCkg
Ki8KKyNkZWZpbmUgVFBMX0ZJTEUgICAgICAoMSA8PCAwKQorI2RlZmluZSBUUExfTUVNICAgICAg
ICgxIDw8IDEpCisjZGVmaW5lIFRQTF9QUkVBTExPQ0QgKDEgPDwgMikKKyNkZWZpbmUgVFBMX0VY
Q0VTU19PSyAoMSA8PCAzKQorI2RlZmluZSBUUExfRkQgICAgICAgICgxIDw8IDQpCisjZGVmaW5l
IFRQTF9VRlJFRSAgICAgKDEgPDwgNSkgIAorI2RlZmluZSBUUExfREFUQVBFRUsgICgxIDw8IDYp
ICAKKyNkZWZpbmUgVFBMX0ZYTEVOUyAgICAoMSA8PCA3KSAgCisjZGVmaW5lIFRQTF9HRVRTSVpF
ICAgKDEgPDwgOCkKKy8qIGRvIG5vdCBhZGQgZmxhZ3MgaGVyZSB3aXRob3V0IHJlbnVtYmVyaW5n
IHRoZSBpbnRlcm5hbCBmbGFncyEgKi8KKworLyogZmxhZ3MgZm9yIHRwbF9nYXRoZXIgbW9kZSAq
LworI2RlZmluZSBUUExfR0FUSEVSX0JMT0NLSU5HICAgIDEKKyNkZWZpbmUgVFBMX0dBVEhFUl9O
T05CTE9DS0lORyAyCisjZGVmaW5lIFRQTF9HQVRIRVJfTUVNICAgICAgICAgMworCisvKiBIb29r
cyBmb3IgZXJyb3IgbG9nZ2luZywgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb25zIGFuZCBmYXRh
bCAqLwordHlwZWRlZiBpbnQgKHRwbF9wcmludF9mY24pKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsK
K3R5cGVkZWYgdm9pZCAqKHRwbF9tYWxsb2NfZmNuKShzaXplX3Qgc3opOwordHlwZWRlZiB2b2lk
ICoodHBsX3JlYWxsb2NfZmNuKSh2b2lkICpwdHIsIHNpemVfdCBzeik7Cit0eXBlZGVmIHZvaWQg
KHRwbF9mcmVlX2Zjbikodm9pZCAqcHRyKTsKK3R5cGVkZWYgdm9pZCAodHBsX2ZhdGFsX2Zjbiko
Y2hhciAqZm10LCAuLi4pOworCit0eXBlZGVmIHN0cnVjdCB0cGxfaG9va190IHsKKyAgICB0cGxf
cHJpbnRfZmNuICpvb3BzOworICAgIHRwbF9tYWxsb2NfZmNuICptYWxsb2M7CisgICAgdHBsX3Jl
YWxsb2NfZmNuICpyZWFsbG9jOworICAgIHRwbF9mcmVlX2ZjbiAqZnJlZTsKKyAgICB0cGxfZmF0
YWxfZmNuICpmYXRhbDsKKyAgICBzaXplX3QgZ2F0aGVyX21heDsKK30gdHBsX2hvb2tfdDsKKwor
dHlwZWRlZiBzdHJ1Y3QgdHBsX25vZGUgeworICAgIGludCB0eXBlOworICAgIHZvaWQgKmFkZHI7
CisgICAgdm9pZCAqZGF0YTsgICAgICAgICAgICAgICAgICAvKiByOnRwbF9yb290X2RhdGEqLiBB
OnRwbF9hdHlwKi4gb3c6c3pvZiB0eXBlICovCisgICAgaW50IG51bTsgICAgICAgICAgICAgICAg
ICAgICAvKiBsZW5ndGggb2YgdHlwZSBpZiBpdHMgYSBDIGFycmF5ICovCisgICAgc2l6ZV90IHNl
cl9vc3o7ICAgICAgICAgICAgICAvKiBzZXJpYWxpemF0aW9uIG91dHB1dCBzaXplIGZvciBzdWJ0
cmVlICovCisgICAgc3RydWN0IHRwbF9ub2RlICpjaGlsZHJlbjsgICAvKiBteSBjaGlsZHJlbjsg
bGlua2VkLWxpc3QgKi8KKyAgICBzdHJ1Y3QgdHBsX25vZGUgKm5leHQsKnByZXY7IC8qIG15IHNp
YmxpbmdzIChuZXh0IGNoaWxkIG9mIG15IHBhcmVudCkgKi8KKyAgICBzdHJ1Y3QgdHBsX25vZGUg
KnBhcmVudDsgICAgIC8qIG15IHBhcmVudCAqLworfSB0cGxfbm9kZTsKKworLyogdXNlZCB3aGVu
IHVuL3BhY2tpbmcgJ0InIHR5cGUgKGJpbmFyeSBidWZmZXJzKSAqLwordHlwZWRlZiBzdHJ1Y3Qg
dHBsX2JpbiB7CisgICAgdm9pZCAqYWRkcjsKKyAgICB1aW50MzJfdCBzejsKK30gdHBsX2JpbjsK
KworLyogZm9yIGFzeW5jL3BpZWNlbWVhbCByZWFkaW5nIG9mIHRwbCBpbWFnZXMgKi8KK3R5cGVk
ZWYgc3RydWN0IHRwbF9nYXRoZXJfdCB7CisgICAgY2hhciAqaW1nOworICAgIGludCBsZW47Cit9
IHRwbF9nYXRoZXJfdDsKKworLyogQ2FsbGJhY2sgdXNlZCB3aGVuIHRwbF9nYXRoZXIgaGFzIHJl
YWQgYSBmdWxsIHRwbCBpbWFnZSAqLwordHlwZWRlZiBpbnQgKHRwbF9nYXRoZXJfY2IpKHZvaWQg
KmltZywgc2l6ZV90IHN6LCB2b2lkICpkYXRhKTsKKworLyogUHJvdG90eXBlcyAqLworVFBMX0FQ
SSB0cGxfbm9kZSAqdHBsX21hcChjaGFyICpmbXQsLi4uKTsgICAgICAgLyogZGVmaW5lIHRwbCB1
c2luZyBmb3JtYXQgKi8KK1RQTF9BUEkgdm9pZCB0cGxfZnJlZSh0cGxfbm9kZSAqcik7ICAgICAg
ICAgICAgIC8qIGZyZWUgYSB0cGwgbWFwICovCitUUExfQVBJIGludCB0cGxfcGFjayh0cGxfbm9k
ZSAqciwgaW50IGkpOyAgICAgICAvKiBwYWNrIHRoZSBuJ3RoIHBhY2thYmxlICovCitUUExfQVBJ
IGludCB0cGxfdW5wYWNrKHRwbF9ub2RlICpyLCBpbnQgaSk7ICAgICAvKiB1bnBhY2sgdGhlIG4n
dGggcGFja2FibGUgKi8KK1RQTF9BUEkgaW50IHRwbF9kdW1wKHRwbF9ub2RlICpyLCBpbnQgbW9k
ZSwgLi4uKTsgLyogc2VyaWFsaXplIHRvIG1lbS9maWxlICovCitUUExfQVBJIGludCB0cGxfbG9h
ZCh0cGxfbm9kZSAqciwgaW50IG1vZGUsIC4uLik7IC8qIHNldCBtZW0vZmlsZSB0byB1bnBhY2sg
Ki8KK1RQTF9BUEkgaW50IHRwbF9BbGVuKHRwbF9ub2RlICpyLCBpbnQgaSk7ICAgICAgLyogYXJy
YXkgbGVuIG9mIHBhY2thYmxlIGkgKi8KK1RQTF9BUEkgY2hhciogdHBsX3BlZWsoaW50IG1vZGUs
IC4uLik7ICAgICAgICAgLyogc25lYWsgcGVlayBhdCBmb3JtYXQgc3RyaW5nICovCitUUExfQVBJ
IGludCB0cGxfZ2F0aGVyKCBpbnQgbW9kZSwgLi4uKTsgICAgICAgIC8qIG5vbi1ibG9ja2luZyBp
bWFnZSBnYXRoZXIgKi8KK1RQTF9BUEkgaW50IHRwbF9qb3QoaW50IG1vZGUsIC4uLik7ICAgICAg
ICAgICAgLyogcXVpY2sgd3JpdGUgYSBzaW1wbGUgdHBsICovCisKKyNpZiBkZWZpbmVkIF9fY3Bs
dXNwbHVzCisgICAgfQorI2VuZGlmCisKKyNlbmRpZiAvKiBUUExfSCAqLworCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJraXRzb3VwY2FjaGVjb3JlLmNwcCBi
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL3dlYmtpdHNvdXBjYWNoZWNvcmUuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiYjcxNzAKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJraXRzb3VwY2FjaGVjb3JlLmNw
cApAQCAtMCwwICsxLDE1MTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgSWdh
bGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwKKyAqIEJvc3Rv
biwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKy8qIFRPRE86CisgKiAtIE5lZWQgdG8gaG9v
ayB0aGUgZmVhdHVyZSBpbiB0aGUgc3luYyBTb3VwU2Vzc2lvbi4KKyAqIC0gTmVlZCBtb3JlIHRl
c3RzLgorICovCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIndlYmtpdHNvdXBj
YWNoZWNvcmUuaCIKKworI2luY2x1ZGUgInRwbC5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNp
bmNsdWRlIDxnaW8vZ2lvLmg+CisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CisjaW5jbHVkZSA8
c3RkbGliLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFNvdXBTZXNzaW9uRmVh
dHVyZUludGVyZmFjZSogd2Via2l0X3NvdXBfY2FjaGVfY29yZV9kZWZhdWx0X2ZlYXR1cmVfaW50
ZXJmYWNlOworc3RhdGljIHZvaWQgd2Via2l0X3NvdXBfY2FjaGVfY29yZV9zZXNzaW9uX2ZlYXR1
cmVfaW5pdChTb3VwU2Vzc2lvbkZlYXR1cmVJbnRlcmZhY2UqIGZlYXR1cmVJbnRlcmZhY2UsIGdw
b2ludGVyIGludGVyZmFjZURhdGEpOworCisjZGVmaW5lIERFRkFVTFRfTUFYX1NJWkUgNTAqIDEw
MjQqIDEwMjQKKy8qIFBlcmNlbnRhZ2Ugb2YgdGhlIHRvdGFsIHNpemUgb2YgdGhlIGNhY2hlIHRo
YXQgY2FuIGJlIGZpbGxlZCBieSBhIHNpbmdsZSBlbnRyeSAqLworI2RlZmluZSBNQVhfRU5UUllf
REFUQV9QRVJDRU5UQUdFIDEwCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRTb3VwQ2FjaGVDb3Jl
RW50cnkgeworICAgIGNoYXIqIGtleTsKKyAgICBjaGFyKiBmaWxlbmFtZTsKKyAgICBndWludCBm
cmVzaG5lc3NMaWZldGltZTsKKyAgICBnYm9vbGVhbiBtdXN0UmV2YWxpZGF0ZTsKKyAgICBHU3Ry
aW5nKiBkYXRhOworICAgIGdzaXplIHBvczsKKyAgICBnc2l6ZSBsZW5ndGg7CisgICAgdGltZV90
IGNvcnJlY3RlZEluaXRpYWxBZ2U7CisgICAgdGltZV90IHJlc3BvbnNlVGltZTsKKyAgICBnYm9v
bGVhbiB3cml0aW5nOworICAgIGdib29sZWFuIGRpcnR5OworICAgIGdib29sZWFuIGdvdEJvZHk7
CisgICAgZ2Jvb2xlYW4gYmVpbmdWYWxpZGF0ZWQ7CisgICAgU291cE1lc3NhZ2VIZWFkZXJzKiBo
ZWFkZXJzOworICAgIEdPdXRwdXRTdHJlYW0qIHN0cmVhbTsKKyAgICBHRXJyb3IqIGVycm9yOwor
ICAgIGd1aW50IGhpdHM7CisgICAgR0xpc3QqIGxydTsKKyAgICBHQ2FuY2VsbGFibGUqIGNhbmNl
bGxhYmxlOworfSBXZWJLaXRTb3VwQ2FjaGVDb3JlRW50cnk7CisKK3N0cnVjdCBfV2ViS2l0U291
cENhY2hlQ29yZVByaXZhdGUgeworICAgIGNoYXIqIGNhY2hlRGlyOworICAgIEdIYXNoVGFibGUq
IGNhY2hlOworICAgIGd1aW50IG5QZW5kaW5nOworICAgIFNvdXBTZXNzaW9uKiBzZXNzaW9uOwor
ICAgIFdlYktpdFNvdXBDYWNoZUNvcmVUeXBlIGNhY2hlVHlwZTsKKyAgICBndWludCBzaXplOwor
ICAgIGd1aW50IG1heFNpemU7CisgICAgZ3VpbnQgbWF4RW50cnlEYXRhU2l6ZTsgIC8qIENvbXB1
dGVkIHZhbHVlLiBIZXJlIGZvciBwZXJmb3JtYW5jZSByZWFzb25zICovCisgICAgR0xpc3QqIGxy
dVN0YXJ0OworICAgIEdMaXN0KiBscnVFbmQ7Cit9OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAg
V2ViS2l0U291cENhY2hlQ29yZSogY2FjaGU7CisgICAgV2ViS2l0U291cENhY2hlQ29yZUVudHJ5
KiBlbnRyeTsKKyAgICBTb3VwTWVzc2FnZSogbXNnOworICAgIGd1bG9uZyBnb3RDaHVua0hhbmRs
ZXI7CisgICAgZ3Vsb25nIGdvdEJvZHlIYW5kbGVyOworICAgIGd1bG9uZyByZXN0YXJ0ZWRIYW5k
bGVyOworfSBXZWJLaXRTb3VwQ2FjaGVDb3JlV3JpdGluZ0ZpeHR1cmU7CisKK2VudW0geworICAg
IFBST1BfMCwKKyAgICBQUk9QX0NBQ0hFX0RJUiwKKyAgICBQUk9QX0NBQ0hFX1RZUEUKK307CisK
KyNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FDSEVfQ09SRV9HRVRfUFJJVkFURShvKSAoR19UWVBFX0lO
U1RBTkNFX0dFVF9QUklWQVRFKChvKSwgV0VCS0lUX1RZUEVfU09VUF9DQUNIRV9DT1JFLCBXZWJL
aXRTb3VwQ2FjaGVDb3JlUHJpdmF0ZSkpCisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktp
dFNvdXBDYWNoZUNvcmUsIHdlYmtpdF9zb3VwX2NhY2hlX2NvcmUsIEdfVFlQRV9PQkpFQ1QsCisg
ICAgICAgICAgICAgICAgICAgICAgICBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoU09VUF9UWVBFX1NF
U1NJT05fRkVBVFVSRSwgd2Via2l0X3NvdXBfY2FjaGVfY29yZV9zZXNzaW9uX2ZlYXR1cmVfaW5p
dCkpCisKK3N0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX2NhY2hlX2NvcmVfZW50cnlfZGVsZXRlKFdl
YktpdFNvdXBDYWNoZUNvcmUqIGNhY2hlLCBXZWJLaXRTb3VwQ2FjaGVDb3JlRW50cnkqIGVudHJ5
KTsKK3N0YXRpYyB2b2lkIG1ha2VSb29tRm9yTmV3RW50cnkoV2ViS2l0U291cENhY2hlQ29yZSog
Y2FjaGUsIGd1aW50IGxlbmd0aFRvQWRkKTsKK3N0YXRpYyBnYm9vbGVhbiBjYWNoZUFjY2VwdHNF
bnRyaWVzT2ZTaXplKFdlYktpdFNvdXBDYWNoZUNvcmUqIGNhY2hlLCBndWludCBsZW5ndGhUb0Fk
ZCk7CisKK3N0YXRpYyBXZWJLaXRTb3VwQ2FjaGVDb3JlYWJpbGl0eSBnZXRDYWNoZWFiaWxpdHko
V2ViS2l0U291cENhY2hlQ29yZSogY2FjaGUsIFNvdXBNZXNzYWdlKiBtc2cpCit7CisgICAgV2Vi
S2l0U291cENhY2hlQ29yZWFiaWxpdHkgY2FjaGVhYmlsaXR5OworICAgIGNvbnN0IGNoYXIqIGNh
Y2hlQ29udHJvbDsKKworICAgIC8qIDEuIFRoZSByZXF1ZXN0IG1ldGhvZCBtdXN0IGJlIGNhY2hl
YWJsZSAqLworICAgIGlmIChtc2ctPm1ldGhvZCA9PSBTT1VQX01FVEhPRF9HRVQpCisgICAgICAg
IGNhY2hlYWJpbGl0eSA9IFdFQktJVF9TT1VQX0NBQ0hFX0NPUkVfQ0FDSEVBQkxFOworICAgIGVs
c2UgaWYgKG1zZy0+bWV0aG9kID09IFNPVVBfTUVUSE9EX0hFQUQgfHwgbXNnLT5tZXRob2QgPT0g
U09VUF9NRVRIT0RfVFJBQ0UgfHwgbXNnLT5tZXRob2QgPT0gU09VUF9NRVRIT0RfQ09OTkVDVCkK
KyAgICAgICAgcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX0NPUkVfVU5DQUNIRUFCTEU7CisgICAg
ZWxzZQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3QgPCBXZWJLaXRTb3VwQ2FjaGVDb3JlYWJp
bGl0eSA+IChXRUJLSVRfU09VUF9DQUNIRV9DT1JFX1VOQ0FDSEVBQkxFIHwgV0VCS0lUX1NPVVBf
Q0FDSEVfQ09SRV9JTlZBTElEQVRFUyk7CisKKyAgICBjYWNoZUNvbnRyb2wgPSBzb3VwX21lc3Nh
Z2VfaGVhZGVyc19nZXQobXNnLT5yZXNwb25zZV9oZWFkZXJzLCAiQ2FjaGUtQ29udHJvbCIpOwor
ICAgIGlmIChjYWNoZUNvbnRyb2wpIHsKKyAgICAgICAgR0hhc2hUYWJsZSogaGFzaDsKKyAgICAg
ICAgV2ViS2l0U291cENhY2hlQ29yZVByaXZhdGUqIHByaXYgPSBXRUJLSVRfU09VUF9DQUNIRV9D
T1JFX0dFVF9QUklWQVRFKGNhY2hlKTsKKworICAgICAgICBoYXNoID0gc291cF9oZWFkZXJfcGFy
c2VfcGFyYW1fbGlzdChjYWNoZUNvbnRyb2wpOworCisgICAgICAgIC8qIFNoYXJlZCBjYWNoZXMg
TVVTVCBOT1Qgc3RvcmUgcHJpdmF0ZSByZXNvdXJjZXMgKi8KKyAgICAgICAgaWYgKHByaXYtPmNh
Y2hlVHlwZSA9PSBXRUJLSVRfU09VUF9DQUNIRV9DT1JFX1NIQVJFRCkgeworICAgICAgICAgICAg
aWYgKGdfaGFzaF90YWJsZV9sb29rdXBfZXh0ZW5kZWQoaGFzaCwgInByaXZhdGUiLCAwLCAwKSkg
eworICAgICAgICAgICAgICAgIHNvdXBfaGVhZGVyX2ZyZWVfcGFyYW1fbGlzdChoYXNoKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfQ09SRV9VTkNBQ0hFQUJMRTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIDIuIFRoZSAnbm8tc3RvcmUn
IGNhY2hlIGRpcmVjdGl2ZSBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlCisgICAgICAgICAqIGhlYWRl
cnMKKyAgICAgICAgICovCisgICAgICAgIGlmIChnX2hhc2hfdGFibGVfbG9va3VwX2V4dGVuZGVk
KGhhc2gsICJuby1zdG9yZSIsIDAsIDApKSB7CisgICAgICAgICAgICBzb3VwX2hlYWRlcl9mcmVl
X3BhcmFtX2xpc3QoaGFzaCk7CisgICAgICAgICAgICByZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVf
Q09SRV9VTkNBQ0hFQUJMRTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFRoaXMgZG9lcyBub3Qg
YXBwZWFyIGluIHNlY3Rpb24gMi4xLCBidXQgSSB0aGluayBpdCBtYWtlcworICAgICAgICAgKiBz
ZW5zZSB0byBjaGVjayBpdCB0b28/CisgICAgICAgICAqLworICAgICAgICBpZiAoZ19oYXNoX3Rh
YmxlX2xvb2t1cF9leHRlbmRlZChoYXNoLCAibm8tY2FjaGUiLCAwLCAwKSkgeworICAgICAgICAg
ICAgc291cF9oZWFkZXJfZnJlZV9wYXJhbV9saXN0KGhhc2gpOworICAgICAgICAgICAgcmV0dXJu
IFdFQktJVF9TT1VQX0NBQ0hFX0NPUkVfVU5DQUNIRUFCTEU7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBzd2l0Y2ggKG1zZy0+c3RhdHVzX2NvZGUpIHsKKyAgICBjYXNlIFNPVVBfU1RBVFVTX1BB
UlRJQUxfQ09OVEVOVDoKKyAgICAgICAgLyogV2UgZG9uJ3QgY2FjaGUgcGFydGlhbCByZXNwb25z
ZXMsIGJ1dCB0aGV5IG9ubHkKKyAgICAgICAgICogaW52YWxpZGF0ZSBjYWNoZWQgZnVsbCByZXNw
b25zZXMgaWYgdGhlIGhlYWRlcnMKKyAgICAgICAgICogZG9uJ3QgbWF0Y2guCisgICAgICAgICAq
LworICAgICAgICBjYWNoZWFiaWxpdHkgPSBXRUJLSVRfU09VUF9DQUNIRV9DT1JFX1VOQ0FDSEVB
QkxFOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU09VUF9TVEFUVVNfTk9UX01PRElGSUVE
OgorICAgICAgICAvKiBBIDMwNCByZXNwb25zZSB2YWxpZGF0ZXMgYW4gZXhpc3RpbmcgY2FjaGUg
ZW50cnkgKi8KKyAgICAgICAgY2FjaGVhYmlsaXR5ID0gV0VCS0lUX1NPVVBfQ0FDSEVfQ09SRV9W
QUxJREFURVM7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTT1VQX1NUQVRVU19NVUxUSVBM
RV9DSE9JQ0VTOgorICAgIGNhc2UgU09VUF9TVEFUVVNfTU9WRURfUEVSTUFORU5UTFk6CisgICAg
Y2FzZSBTT1VQX1NUQVRVU19HT05FOgorICAgICAgICAvKiBGSVhNRTogY2FjaGVhYmxlIHVubGVz
cyBpbmRpY2F0ZWQgb3RoZXJ3aXNlICovCisgICAgICAgIGNhY2hlYWJpbGl0eSA9IFdFQktJVF9T
T1VQX0NBQ0hFX0NPUkVfVU5DQUNIRUFCTEU7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBT
T1VQX1NUQVRVU19GT1VORDoKKyAgICBjYXNlIFNPVVBfU1RBVFVTX1RFTVBPUkFSWV9SRURJUkVD
VDoKKyAgICAgICAgLyogRklYTUU6IGNhY2hlYWJsZSBpZiBleHBsaWNpdGx5IGluZGljYXRlZCAq
LworICAgICAgICBjYWNoZWFiaWxpdHkgPSBXRUJLSVRfU09VUF9DQUNIRV9DT1JFX1VOQ0FDSEVB
QkxFOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU09VUF9TVEFUVVNfU0VFX09USEVSOgor
ICAgIGNhc2UgU09VUF9TVEFUVVNfRk9SQklEREVOOgorICAgIGNhc2UgU09VUF9TVEFUVVNfTk9U
X0ZPVU5EOgorICAgIGNhc2UgU09VUF9TVEFUVVNfTUVUSE9EX05PVF9BTExPV0VEOgorICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3QgPCBXZWJLaXRTb3VwQ2FjaGVDb3JlYWJpbGl0eSA+IChXRUJL
SVRfU09VUF9DQUNIRV9DT1JFX1VOQ0FDSEVBQkxFIHwgV0VCS0lUX1NPVVBfQ0FDSEVfQ09SRV9J
TlZBTElEQVRFUyk7CisKKyAgICBkZWZhdWx0OgorICAgICAgICAvKiBBbnkgNXh4IHN0YXR1cyBv
ciBhbnkgNHh4IHN0YXR1cyBub3QgaGFuZGxlZCBhYm92ZQorICAgICAgICAgKiBpcyB1bmNhY2hl
YWJsZSBidXQgZG9lc24ndCBicmVhayB0aGUgY2FjaGUuCisgICAgICAgICAqLworICAgICAgICBp
ZiAoKG1zZy0+c3RhdHVzX2NvZGUgPj0gU09VUF9TVEFUVVNfQkFEX1JFUVVFU1QgJiYgbXNnLT5z
dGF0dXNfY29kZSA8PSBTT1VQX1NUQVRVU19GQUlMRURfREVQRU5ERU5DWSkgfHwgbXNnLT5zdGF0
dXNfY29kZSA+PSBTT1VQX1NUQVRVU19JTlRFUk5BTF9TRVJWRVJfRVJST1IpCisgICAgICAgICAg
ICByZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfQ09SRV9VTkNBQ0hFQUJMRTsKKworICAgICAgICAv
KiBBbiB1bnJlY29nbml6ZWQgMnh4LCAzeHgsIG9yIDR4eCByZXNwb25zZSBicmVha3MKKyAgICAg
ICAgICogdGhlIGNhY2hlLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKChtc2ctPnN0YXR1c19j
b2RlID4gU09VUF9TVEFUVVNfUEFSVElBTF9DT05URU5UICYmIG1zZy0+c3RhdHVzX2NvZGUgPCBT
T1VQX1NUQVRVU19NVUxUSVBMRV9DSE9JQ0VTKSB8fCAobXNnLT5zdGF0dXNfY29kZSA+IFNPVVBf
U1RBVFVTX1RFTVBPUkFSWV9SRURJUkVDVCAmJiBtc2ctPnN0YXR1c19jb2RlIDwgU09VUF9TVEFU
VVNfSU5URVJOQUxfU0VSVkVSX0VSUk9SKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dCA8IFdlYktpdFNvdXBDYWNoZUNvcmVhYmlsaXR5ID4gKFdFQktJVF9TT1VQX0NBQ0hFX0NPUkVf
VU5DQUNIRUFCTEUgfCBXRUJLSVRfU09VUF9DQUNIRV9DT1JFX0lOVkFMSURBVEVTKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGNhY2hlYWJpbGl0eTsKK30KKworc3RhdGlj
IHZvaWQgd2Via2l0X3NvdXBfY2FjaGVfY29yZV9lbnRyeV9mcmVlKFdlYktpdFNvdXBDYWNoZUNv
cmVFbnRyeSogZW50cnkpCit7CisgICAgZ19mcmVlKGVudHJ5LT5maWxlbmFtZSk7CisgICAgZW50
cnktPmZpbGVuYW1lID0gMDsKKyAgICBnX2ZyZWUoZW50cnktPmtleSk7CisgICAgZW50cnktPmtl
eSA9IDA7CisKKyAgICBpZiAoZW50cnktPmhlYWRlcnMpIHsKKyAgICAgICAgc291cF9tZXNzYWdl
X2hlYWRlcnNfZnJlZShlbnRyeS0+aGVhZGVycyk7CisgICAgICAgIGVudHJ5LT5oZWFkZXJzID0g
MDsKKyAgICB9CisKKyAgICBpZiAoZW50cnktPmRhdGEpIHsKKyAgICAgICAgZ19zdHJpbmdfZnJl
ZShlbnRyeS0+ZGF0YSwgVFJVRSk7CisgICAgICAgIGVudHJ5LT5kYXRhID0gMDsKKyAgICB9Cisg
ICAgaWYgKGVudHJ5LT5lcnJvcikgeworICAgICAgICBnX2Vycm9yX2ZyZWUoZW50cnktPmVycm9y
KTsKKyAgICAgICAgZW50cnktPmVycm9yID0gMDsKKyAgICB9CisgICAgaWYgKGVudHJ5LT5jYW5j
ZWxsYWJsZSkgeworICAgICAgICBnX29iamVjdF91bnJlZihlbnRyeS0+Y2FuY2VsbGFibGUpOwor
ICAgICAgICBlbnRyeS0+Y2FuY2VsbGFibGUgPSAwOworICAgIH0KKworICAgIGdfc2xpY2VfZnJl
ZShXZWJLaXRTb3VwQ2FjaGVDb3JlRW50cnksIGVudHJ5KTsKK30KKworc3RhdGljIHZvaWQgY29w
eUhlYWRlcnMoY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogdmFsdWUsIFNvdXBNZXNzYWdl
SGVhZGVycyogaGVhZGVycykKK3sKKyAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQoaGVh
ZGVycywgbmFtZSwgdmFsdWUpOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVIZWFkZXJzKGNvbnN0
IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIHZhbHVlLCBTb3VwTWVzc2FnZUhlYWRlcnMqIGhlYWRl
cnMpCit7CisgICAgaWYgKHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldChoZWFkZXJzLCBuYW1lKSkK
KyAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfcmVwbGFjZShoZWFkZXJzLCBuYW1lLCB2YWx1
ZSk7CisgICAgZWxzZQorICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQoaGVhZGVy
cywgbmFtZSwgdmFsdWUpOworfQorCitzdGF0aWMgZ3VpbnQgd2Via2l0X3NvdXBfY2FjaGVfY29y
ZV9lbnRyeV9nZXRfY3VycmVudF9hZ2UoV2ViS2l0U291cENhY2hlQ29yZUVudHJ5KiBlbnRyeSkK
K3sKKyAgICB0aW1lX3Qgbm93ID0gdGltZSgwKTsKKyAgICB0aW1lX3QgcmVzaWRlbnRUaW1lOwor
CisgICAgcmVzaWRlbnRUaW1lID0gbm93IC0gZW50cnktPnJlc3BvbnNlVGltZTsKKyAgICByZXR1
cm4gZW50cnktPmNvcnJlY3RlZEluaXRpYWxBZ2UgKyByZXNpZGVudFRpbWU7Cit9CisKK3N0YXRp
YyBnYm9vbGVhbiB3ZWJraXRfc291cF9jYWNoZV9jb3JlX2VudHJ5X2lzX2ZyZXNoX2Vub3VnaChX
ZWJLaXRTb3VwQ2FjaGVDb3JlRW50cnkqIGVudHJ5LCBpbnQgbWluRnJlc2gpCit7CisgICAgZ3Vp
bnQgbGltaXQgPSAobWluRnJlc2ggPT0gLTEpID8gd2Via2l0X3NvdXBfY2FjaGVfY29yZV9lbnRy
eV9nZXRfY3VycmVudF9hZ2UoZW50cnkpIDogKGd1aW50KSBtaW5GcmVzaDsKKworICAgIHJldHVy
biBlbnRyeS0+ZnJlc2huZXNzTGlmZXRpbWUgPiBsaW1pdDsKK30KKworc3RhdGljIGNoYXIgKiBz
b3VwTWVzc2FnZUdldENhY2hlS2V5KFNvdXBNZXNzYWdlKiBtc2cpCit7CisgICAgU291cFVSSSog
dXJpID0gc291cF9tZXNzYWdlX2dldF91cmkobXNnKTsKKworICAgIHJldHVybiBzb3VwX3VyaV90
b19zdHJpbmcodXJpLCBGQUxTRSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX2NhY2hl
X2NvcmVfZW50cnlfc2V0X2ZyZXNobmVzcyhXZWJLaXRTb3VwQ2FjaGVDb3JlRW50cnkqIGVudHJ5
LCBTb3VwTWVzc2FnZSogbXNnLCBXZWJLaXRTb3VwQ2FjaGVDb3JlKiBjYWNoZSkKK3sKKyAgICBj
b25zdCBjaGFyKiBjYWNoZUNvbnRyb2w7CisgICAgY29uc3QgY2hhciogZXhwaXJlcywgKiBkYXRl
LCAqIGxhc3RNb2RpZmllZDsKKyAgICBHSGFzaFRhYmxlKiBoYXNoOworCisgICAgaGFzaCA9IDA7
CisKKyAgICBjYWNoZUNvbnRyb2wgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQoZW50cnktPmhl
YWRlcnMsICJDYWNoZS1Db250cm9sIik7CisgICAgaWYgKGNhY2hlQ29udHJvbCkgeworICAgICAg
ICBjb25zdCBjaGFyKiBtYXhBZ2UsICogc01heEFnZTsKKyAgICAgICAgZ3VpbnQgZnJlc2huZXNz
TGlmZXRpbWUgPSAwOworICAgICAgICBXZWJLaXRTb3VwQ2FjaGVDb3JlUHJpdmF0ZSogcHJpdiA9
IFdFQktJVF9TT1VQX0NBQ0hFX0NPUkVfR0VUX1BSSVZBVEUoY2FjaGUpOworCisgICAgICAgIGhh
c2ggPSBzb3VwX2hlYWRlcl9wYXJzZV9wYXJhbV9saXN0KGNhY2hlQ29udHJvbCk7CisKKyAgICAg
ICAgLyogU2hvdWxkIHdlIHJlLXZhbGlkYXRlIHRoZSBlbnRyeSB3aGVuIGl0IGdvZXMgc3RhbGUg
Ki8KKyAgICAgICAgZW50cnktPm11c3RSZXZhbGlkYXRlID0gKGdib29sZWFuKSBnX2hhc2hfdGFi
bGVfbG9va3VwKGhhc2gsICJtdXN0LXJldmFsaWRhdGUiKTsKKworICAgICAgICAvKiBTZWN0aW9u
IDIuMy4xICovCisgICAgICAgIGlmIChwcml2LT5jYWNoZVR5cGUgPT0gV0VCS0lUX1NPVVBfQ0FD
SEVfQ09SRV9TSEFSRUQpIHsKKyAgICAgICAgICAgIHNNYXhBZ2UgPSAoY29uc3QgZ2NoYXIqKWdf
aGFzaF90YWJsZV9sb29rdXAoaGFzaCwgInMtbWF4YWdlIik7CisgICAgICAgICAgICBpZiAoc01h
eEFnZSkgeworICAgICAgICAgICAgICAgIGZyZXNobmVzc0xpZmV0aW1lID0gZ19hc2NpaV9zdHJ0
b2xsKHNNYXhBZ2UsIDAsIDEwKTsKKyAgICAgICAgICAgICAgICBpZiAoZnJlc2huZXNzTGlmZXRp
bWUpIHsKKyAgICAgICAgICAgICAgICAgICAgLyogSW1wbGllcyBwcm94eS1yZXZhbGlkYXRlLiBU
T0RPOiBpcyBpdCB0cnVlPyAqLworICAgICAgICAgICAgICAgICAgICBlbnRyeS0+bXVzdFJldmFs
aWRhdGUgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICBzb3VwX2hlYWRlcl9mcmVlX3BhcmFt
X2xpc3QoaGFzaCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBJZiAnbWF4LWFnZScg
Y2FjaGUgZGlyZWN0aXZlIGlzIHByZXNlbnQsIHVzZSB0aGF0ICovCisgICAgICAgIG1heEFnZSA9
IChjb25zdCBnY2hhciopZ19oYXNoX3RhYmxlX2xvb2t1cChoYXNoLCAibWF4LWFnZSIpOworICAg
ICAgICBpZiAobWF4QWdlKQorICAgICAgICAgICAgZnJlc2huZXNzTGlmZXRpbWUgPSBnX2FzY2lp
X3N0cnRvbGwobWF4QWdlLCAwLCAxMCk7CisKKyAgICAgICAgaWYgKGZyZXNobmVzc0xpZmV0aW1l
KSB7CisgICAgICAgICAgICBlbnRyeS0+ZnJlc2huZXNzTGlmZXRpbWUgPSAoZ3VpbnQpIHN0ZDo6
bWluPGd1aW50PihmcmVzaG5lc3NMaWZldGltZSwgR19NQVhVSU5UMzIpOworICAgICAgICAgICAg
c291cF9oZWFkZXJfZnJlZV9wYXJhbV9saXN0KGhhc2gpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGhhc2gpCisgICAgICAgIHNvdXBfaGVhZGVyX2Zy
ZWVfcGFyYW1fbGlzdChoYXNoKTsKKworICAgIC8qIElmIHRoZSAnRXhwaXJlcycgcmVzcG9uc2Ug
aGVhZGVyIGlzIHByZXNlbnQsIHVzZSBpdHMgdmFsdWUKKyAgICAgKiBtaW51cyB0aGUgdmFsdWUg
b2YgdGhlICdEYXRlJyByZXNwb25zZSBoZWFkZXIKKyAgICAgKi8KKyAgICBleHBpcmVzID0gc291
cF9tZXNzYWdlX2hlYWRlcnNfZ2V0KGVudHJ5LT5oZWFkZXJzLCAiRXhwaXJlcyIpOworICAgIGRh
dGUgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQoZW50cnktPmhlYWRlcnMsICJEYXRlIik7Cisg
ICAgaWYgKGV4cGlyZXMgJiYgZGF0ZSkgeworICAgICAgICBTb3VwRGF0ZSogZXhwaXJlc0RhdGUs
ICogZGF0ZURhdGU7CisgICAgICAgIHRpbWVfdCBleHBpcmVzVGltZSwgZGF0ZVRpbWU7CisKKyAg
ICAgICAgZXhwaXJlc0RhdGUgPSBzb3VwX2RhdGVfbmV3X2Zyb21fc3RyaW5nKGV4cGlyZXMpOwor
ICAgICAgICBpZiAoZXhwaXJlc0RhdGUpIHsKKyAgICAgICAgICAgIGRhdGVEYXRlID0gc291cF9k
YXRlX25ld19mcm9tX3N0cmluZyhkYXRlKTsKKworICAgICAgICAgICAgZXhwaXJlc1RpbWUgPSBz
b3VwX2RhdGVfdG9fdGltZV90KGV4cGlyZXNEYXRlKTsKKyAgICAgICAgICAgIGRhdGVUaW1lID0g
c291cF9kYXRlX3RvX3RpbWVfdChkYXRlRGF0ZSk7CisKKyAgICAgICAgICAgIHNvdXBfZGF0ZV9m
cmVlKGV4cGlyZXNEYXRlKTsKKyAgICAgICAgICAgIHNvdXBfZGF0ZV9mcmVlKGRhdGVEYXRlKTsK
KworICAgICAgICAgICAgaWYgKGV4cGlyZXNUaW1lICYmIGRhdGVUaW1lKSB7CisgICAgICAgICAg
ICAgICAgZW50cnktPmZyZXNobmVzc0xpZmV0aW1lID0gc3RkOjptYXg8Z3VpbnQ+KGV4cGlyZXNU
aW1lIC0gZGF0ZVRpbWUsIDApOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIElmIEV4cGlyZXMgaXMgbm90IGEg
dmFsaWQgZGF0ZSB3ZSBzaG91bGQKKyAgICAgICAgICAgICAgIHRyZWF0IGl0IGFzIGFscmVhZHkg
ZXhwaXJlZCwgc2VlIHNlY3Rpb24KKyAgICAgICAgICAgICAgIDMuMyAqLworICAgICAgICAgICAg
ZW50cnktPmZyZXNobmVzc0xpZmV0aW1lID0gMDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8qIE90aGVyd2lzZSBhbiBoZXVyaXN0aWMgbWF5IGJlIHVzZWQg
Ki8KKworICAgIC8qIEhldXJpc3RpY3MgTVVTVCBOT1QgYmUgdXNlZCB3aXRoIHRoZXNlIHN0YXR1
cyBjb2RlcworICAgICAgIChzZWN0aW9uIDIuMy4xLjEpICovCisgICAgaWYgKG1zZy0+c3RhdHVz
X2NvZGUgIT0gU09VUF9TVEFUVVNfT0sgJiYgbXNnLT5zdGF0dXNfY29kZSAhPSBTT1VQX1NUQVRV
U19OT05fQVVUSE9SSVRBVElWRSAmJiBtc2ctPnN0YXR1c19jb2RlICE9IFNPVVBfU1RBVFVTX1BB
UlRJQUxfQ09OVEVOVCAmJiBtc2ctPnN0YXR1c19jb2RlICE9IFNPVVBfU1RBVFVTX01VTFRJUExF
X0NIT0lDRVMgJiYgbXNnLT5zdGF0dXNfY29kZSAhPSBTT1VQX1NUQVRVU19NT1ZFRF9QRVJNQU5F
TlRMWSAmJiBtc2ctPnN0YXR1c19jb2RlICE9IFNPVVBfU1RBVFVTX0dPTkUpCisgICAgICAgIGdv
dG8gZXhwaXJlOworCisgICAgLyogVE9ETzogYXR0YWNoIHdhcm5pbmcgMTEzIGlmIHJlc3BvbnNl
J3MgY3VycmVudF9hZ2UgaXMgbW9yZQorICAgICAgIHRoYW4gMjRoIChzZWN0aW9uIDIuMy4xLjEp
IHdoZW4gdXNpbmcgaGV1cmlzdGljcyAqLworCisgICAgLyogTGFzdC1Nb2RpZmllZCBiYXNlZCBo
ZXVyaXN0aWMgKi8KKyAgICBsYXN0TW9kaWZpZWQgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQo
ZW50cnktPmhlYWRlcnMsICJMYXN0LU1vZGlmaWVkIik7CisgICAgaWYgKGxhc3RNb2RpZmllZCkg
eworICAgICAgICBTb3VwRGF0ZSogc291cERhdGU7CisgICAgICAgIHRpbWVfdCBub3csIGxhc3RN
b2RpZmllZFQ7CisKKyAgICAgICAgc291cERhdGUgPSBzb3VwX2RhdGVfbmV3X2Zyb21fc3RyaW5n
KGxhc3RNb2RpZmllZCk7CisgICAgICAgIGxhc3RNb2RpZmllZFQgPSBzb3VwX2RhdGVfdG9fdGlt
ZV90KHNvdXBEYXRlKTsKKyAgICAgICAgbm93ID0gdGltZSgwKTsKKworI2RlZmluZSBIRVVSSVNU
SUNfRkFDVE9SIDAuMSAgICAvKiBGcm9tIFNlY3Rpb24gMi4zLjEuMSAqLworCisgICAgICAgIGVu
dHJ5LT5mcmVzaG5lc3NMaWZldGltZSA9IHN0ZDo6bWF4PGd1aW50PigwLCAobm93IC0gbGFzdE1v
ZGlmaWVkVCkqIEhFVVJJU1RJQ19GQUNUT1IpOworICAgICAgICBzb3VwX2RhdGVfZnJlZShzb3Vw
RGF0ZSk7CisgICAgfQorCisgICAgcmV0dXJuOworCitleHBpcmU6CisgICAgLyogSWYgYWxsIGVs
c2UgZmFpbHMsIG1ha2UgdGhlIGVudHJ5IGV4cGlyZSBpbW1lZGlhdGVseSAqLworICAgIGVudHJ5
LT5mcmVzaG5lc3NMaWZldGltZSA9IDA7Cit9CisKK3N0YXRpYyBXZWJLaXRTb3VwQ2FjaGVDb3Jl
RW50cnkgKiB3ZWJraXRfc291cF9jYWNoZV9jb3JlX2VudHJ5X25ldyhXZWJLaXRTb3VwQ2FjaGVD
b3JlKiBjYWNoZSwgU291cE1lc3NhZ2UqIG1zZywgdGltZV90IHJlcXVlc3RfdGltZSwgdGltZV90
IHJlc3BvbnNlX3RpbWUpCit7CisgICAgV2ViS2l0U291cENhY2hlQ29yZUVudHJ5KiBlbnRyeTsK
KyAgICBTb3VwTWVzc2FnZUhlYWRlcnMqIGhlYWRlcnM7CisgICAgY29uc3QgY2hhciogZGF0ZTsK
KyAgICBjaGFyKiBtZDU7CisKKyAgICBlbnRyeSA9IGdfc2xpY2VfbmV3MChXZWJLaXRTb3VwQ2Fj
aGVDb3JlRW50cnkpOworICAgIGVudHJ5LT5kaXJ0eSA9IEZBTFNFOworICAgIGVudHJ5LT53cml0
aW5nID0gRkFMU0U7CisgICAgZW50cnktPmdvdEJvZHkgPSBGQUxTRTsKKyAgICBlbnRyeS0+YmVp
bmdWYWxpZGF0ZWQgPSBGQUxTRTsKKyAgICBlbnRyeS0+ZGF0YSA9IGdfc3RyaW5nX25ldygwKTsK
KyAgICBlbnRyeS0+cG9zID0gMDsKKyAgICBlbnRyeS0+ZXJyb3IgPSAwOworCisgICAgLyoga2V5
ICYgZmlsZW5hbWUgKi8KKyAgICBlbnRyeS0+a2V5ID0gc291cE1lc3NhZ2VHZXRDYWNoZUtleSht
c2cpOworICAgIG1kNSA9IGdfY29tcHV0ZV9jaGVja3N1bV9mb3Jfc3RyaW5nKEdfQ0hFQ0tTVU1f
TUQ1LCBlbnRyeS0+a2V5LCAtMSk7CisgICAgZW50cnktPmZpbGVuYW1lID0gZ19idWlsZF9maWxl
bmFtZShjYWNoZS0+cHJpdi0+Y2FjaGVEaXIsIG1kNSwgTlVMTCk7CisgICAgZ19mcmVlKG1kNSk7
CisKKyAgICAvKiBIZWFkZXJzICovCisgICAgaGVhZGVycyA9IHNvdXBfbWVzc2FnZV9oZWFkZXJz
X25ldyhTT1VQX01FU1NBR0VfSEVBREVSU19SRVNQT05TRSk7CisgICAgc291cF9tZXNzYWdlX2hl
YWRlcnNfZm9yZWFjaChtc2ctPnJlc3BvbnNlX2hlYWRlcnMsIChTb3VwTWVzc2FnZUhlYWRlcnNG
b3JlYWNoRnVuYykgY29weUhlYWRlcnMsIGhlYWRlcnMpOworICAgIGVudHJ5LT5oZWFkZXJzID0g
aGVhZGVyczsKKworICAgIC8qIExSVSBsaXN0ICovCisgICAgZW50cnktPmhpdHMgPSAwOworCisg
ICAgLyogU2VjdGlvbiAyLjMuMSwgRnJlc2huZXNzIExpZmV0aW1lICovCisgICAgd2Via2l0X3Nv
dXBfY2FjaGVfY29yZV9lbnRyeV9zZXRfZnJlc2huZXNzKGVudHJ5LCBtc2csIGNhY2hlKTsKKwor
ICAgIC8qIFNlY3Rpb24gMi4zLjIsIENhbGN1bGF0aW5nIEFnZSAqLworICAgIGRhdGUgPSBzb3Vw
X21lc3NhZ2VfaGVhZGVyc19nZXQoZW50cnktPmhlYWRlcnMsICJEYXRlIik7CisKKyAgICBpZiAo
ZGF0ZSkgeworICAgICAgICBTb3VwRGF0ZSogc291cERhdGU7CisgICAgICAgIGNvbnN0IGNoYXIq
IGFnZTsKKyAgICAgICAgdGltZV90IGRhdGVWYWx1ZSwgYXBwYXJlbnRBZ2UsIGNvcnJlY3RlZFJl
Y2VpdmVkQWdlLCByZXNwb25zZURlbGF5LCBhZ2VWYWx1ZSA9IDA7CisKKyAgICAgICAgc291cERh
dGUgPSBzb3VwX2RhdGVfbmV3X2Zyb21fc3RyaW5nKGRhdGUpOworICAgICAgICBkYXRlVmFsdWUg
PSBzb3VwX2RhdGVfdG9fdGltZV90KHNvdXBEYXRlKTsKKyAgICAgICAgc291cF9kYXRlX2ZyZWUo
c291cERhdGUpOworCisgICAgICAgIGFnZSA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldChlbnRy
eS0+aGVhZGVycywgIkFnZSIpOworICAgICAgICBpZiAoYWdlKQorICAgICAgICAgICAgYWdlVmFs
dWUgPSBnX2FzY2lpX3N0cnRvbGwoYWdlLCAwLCAxMCk7CisKKyAgICAgICAgZW50cnktPnJlc3Bv
bnNlVGltZSA9IHJlc3BvbnNlX3RpbWU7CisgICAgICAgIGFwcGFyZW50QWdlID0gc3RkOjptYXg8
dGltZV90PigwLCBlbnRyeS0+cmVzcG9uc2VUaW1lIC0gZGF0ZVZhbHVlKTsKKyAgICAgICAgY29y
cmVjdGVkUmVjZWl2ZWRBZ2UgPSBzdGQ6Om1heChhcHBhcmVudEFnZSwgYWdlVmFsdWUpOworICAg
ICAgICByZXNwb25zZURlbGF5ID0gZW50cnktPnJlc3BvbnNlVGltZSAtIHJlcXVlc3RfdGltZTsK
KyAgICAgICAgZW50cnktPmNvcnJlY3RlZEluaXRpYWxBZ2UgPSBjb3JyZWN0ZWRSZWNlaXZlZEFn
ZSArIHJlc3BvbnNlRGVsYXk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogSXMgdGhpcyBjb3Jy
ZWN0ID8gKi8KKyAgICAgICAgZW50cnktPmNvcnJlY3RlZEluaXRpYWxBZ2UgPSB0aW1lKDApOwor
ICAgIH0KKworICAgIHJldHVybiBlbnRyeTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3NvdXBf
Y2FjaGVfY29yZV93cml0aW5nX2ZpeHR1cmVfZnJlZShXZWJLaXRTb3VwQ2FjaGVDb3JlV3JpdGlu
Z0ZpeHR1cmUqIGZpeHR1cmUpCit7CisgICAgLyogRnJlZSBmaXh0dXJlLiBBbmQgZGlzY29ubmVj
dCBzaWduYWxzLCB3ZSBkb24ndCB3YW50IHRvCisgICAgICAgbGlzdGVuIHRvIG1vcmUgU291cE1l
c3NhZ2UgZXZlbnRzIGFzIHdlJ3JlIGZpbmlzaGVkIHdpdGgKKyAgICAgICB0aGlzIHJlc291cmNl
ICovCisgICAgaWYgKGdfc2lnbmFsX2hhbmRsZXJfaXNfY29ubmVjdGVkKGZpeHR1cmUtPm1zZywg
Zml4dHVyZS0+Z290Q2h1bmtIYW5kbGVyKSkKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNj
b25uZWN0KGZpeHR1cmUtPm1zZywgZml4dHVyZS0+Z290Q2h1bmtIYW5kbGVyKTsKKyAgICBpZiAo
Z19zaWduYWxfaGFuZGxlcl9pc19jb25uZWN0ZWQoZml4dHVyZS0+bXNnLCBmaXh0dXJlLT5nb3RC
b2R5SGFuZGxlcikpCisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdChmaXh0dXJl
LT5tc2csIGZpeHR1cmUtPmdvdEJvZHlIYW5kbGVyKTsKKyAgICBpZiAoZ19zaWduYWxfaGFuZGxl
cl9pc19jb25uZWN0ZWQoZml4dHVyZS0+bXNnLCBmaXh0dXJlLT5yZXN0YXJ0ZWRIYW5kbGVyKSkK
KyAgICAgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KGZpeHR1cmUtPm1zZywgZml4dHVy
ZS0+cmVzdGFydGVkSGFuZGxlcik7CisgICAgZ19vYmplY3RfdW5yZWYoZml4dHVyZS0+bXNnKTsK
KyAgICBnX29iamVjdF91bnJlZihmaXh0dXJlLT5jYWNoZSk7CisgICAgZ19zbGljZV9mcmVlKFdl
YktpdFNvdXBDYWNoZUNvcmVXcml0aW5nRml4dHVyZSwgZml4dHVyZSk7Cit9CisKK3N0YXRpYyB2
b2lkIGNsb3NlUmVhZHlDYihHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBX
ZWJLaXRTb3VwQ2FjaGVDb3JlV3JpdGluZ0ZpeHR1cmUqIGZpeHR1cmUpCit7CisgICAgV2ViS2l0
U291cENhY2hlQ29yZUVudHJ5KiBlbnRyeSA9IGZpeHR1cmUtPmVudHJ5OworICAgIFdlYktpdFNv
dXBDYWNoZUNvcmUqIGNhY2hlID0gZml4dHVyZS0+Y2FjaGU7CisgICAgR091dHB1dFN0cmVhbSog
c3RyZWFtID0gR19PVVRQVVRfU1RSRUFNKHNvdXJjZSk7CisgICAgZ29mZnNldCBjb250ZW50TGVu
Z3RoOworCisgICAgZ193YXJuX2lmX2ZhaWwoIWVudHJ5LT5lcnJvcik7CisKKyAgICAvKiBGSVhN
RTogd2hhdCBkbyB3ZSBkbyBvbiBlcnJvciA/ICovCisKKyAgICBpZiAoc3RyZWFtKSB7CisgICAg
ICAgIGdfb3V0cHV0X3N0cmVhbV9jbG9zZV9maW5pc2goc3RyZWFtLCByZXN1bHQsIDApOworICAg
ICAgICBnX29iamVjdF91bnJlZihzdHJlYW0pOworICAgIH0KKyAgICBlbnRyeS0+c3RyZWFtID0g
MDsKKworICAgIGNvbnRlbnRMZW5ndGggPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfY29udGVu
dF9sZW5ndGgoZW50cnktPmhlYWRlcnMpOworCisgICAgLyogSWYgdGhlIHByb2Nlc3Mgd2FzIGNh
bmNlbGxlZCwgdGhlbiBkZWxldGUgdGhlIGVudHJ5IGZyb20KKyAgICAgICB0aGUgY2FjaGUuIERv
IGl0IGFsc28gaWYgdGhlIHNpemUgb2YgYSBjaHVua2VkIHJlc291cmNlIGlzCisgICAgICAgdG9v
IG11Y2ggZm9yIHRoZSBjYWNoZSAqLworICAgIGlmIChnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxl
ZChlbnRyeS0+Y2FuY2VsbGFibGUpKSB7CisgICAgICAgIHdlYmtpdF9zb3VwX2NhY2hlX2NvcmVf
ZW50cnlfZGVsZXRlKGNhY2hlLCBlbnRyeSk7CisgICAgICAgIGVudHJ5ID0gMDsKKyAgICB9IGVs
c2UgaWYgKChzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfZW5jb2RpbmcoZW50cnktPmhlYWRlcnMp
ID09IFNPVVBfRU5DT0RJTkdfQ0hVTktFRCkgfHwgZW50cnktPmxlbmd0aCAhPSBjb250ZW50TGVu
Z3RoKSB7CisKKyAgICAgICAgLyoqIFR3byBvcHRpb25zIGhlcmU6CisgICAgICAgICAqCisgICAg
ICAgICAqIDEuICJjaHVua2VkIiBkYXRhLCBlbnRyeSB3YXMgdGVtcG9yYXJpbHkgYWRkZWQgdG8K
KyAgICAgICAgICogY2FjaGUgKGFzIGNvbnRlbnQtbGVuZ3RoIGlzIDApIGFuZCBub3cgdGhhdCB3
ZSBoYXZlCisgICAgICAgICAqIHRoZSBhY3R1YWwgc2l6ZSB3ZSBoYXZlIHRvIGV2YWx1YXRlIGlm
IHdlIHdhbnQgaXQKKyAgICAgICAgICogaW4gdGhlIGNhY2hlIG9yIG5vdAorICAgICAgICAgKgor
ICAgICAgICAgKiAyLiBDb250ZW50LUxlbmd0aCBoYXMgYSBkaWZmZXJlbnQgdmFsdWUgdGhhbiBh
Y3R1YWwKKyAgICAgICAgICogbGVuZ3RoLCBtZWFucyB0aGF0IHRoZSBjb250ZW50IHdhcyBlbmNv
ZGVkIGZvcgorICAgICAgICAgKiB0cmFuc21pc3Npb24gKHR5cGljYWxseSBjb21wcmVzc2VkKSBh
bmQgdGh1cyB3ZQorICAgICAgICAgKiBoYXZlIHRvIHN1YnN0cmFjdCB0aGUgY29udGVudC1sZW5n
dGggdmFsdWUgdGhhdCB3YXMKKyAgICAgICAgICogYWRkZWQgdG8gdGhlIGNhY2hlIGFuZCBhZGQg
dGhlIHVuZW5jb2RlZCBsZW5ndGgKKyAgICAgICAgICogKi8KKyAgICAgICAgZ2ludCBsZW5ndGhU
b0FkZCA9IGVudHJ5LT5sZW5ndGggLSBjb250ZW50TGVuZ3RoOworCisgICAgICAgIC8qIE1ha2Ug
cm9vbSBpbiBjYWNoZSBpZiBuZWVkZWQgKi8KKyAgICAgICAgaWYgKGNhY2hlQWNjZXB0c0VudHJp
ZXNPZlNpemUoY2FjaGUsIGxlbmd0aFRvQWRkKSkgeworICAgICAgICAgICAgbWFrZVJvb21Gb3JO
ZXdFbnRyeShjYWNoZSwgbGVuZ3RoVG9BZGQpOworCisgICAgICAgICAgICBjYWNoZS0+cHJpdi0+
c2l6ZSArPSBsZW5ndGhUb0FkZDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHdlYmtp
dF9zb3VwX2NhY2hlX2NvcmVfZW50cnlfZGVsZXRlKGNhY2hlLCBlbnRyeSk7CisgICAgICAgICAg
ICBlbnRyeSA9IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZW50cnkpIHsKKyAgICAg
ICAgLyogR2V0IHJpZCBvZiB0aGUgR1N0cmluZyBpbiBtZW1vcnkgZm9yIHRoZSByZXNvdXJjZSBu
b3cgKi8KKyAgICAgICAgaWYgKGVudHJ5LT5kYXRhKSB7CisgICAgICAgICAgICBnX3N0cmluZ19m
cmVlKGVudHJ5LT5kYXRhLCBUUlVFKTsKKyAgICAgICAgICAgIGVudHJ5LT5kYXRhID0gMDsKKyAg
ICAgICAgfQorCisgICAgICAgIGVudHJ5LT5kaXJ0eSA9IEZBTFNFOworICAgICAgICBlbnRyeS0+
d3JpdGluZyA9IEZBTFNFOworICAgICAgICBlbnRyeS0+Z290Qm9keSA9IEZBTFNFOworICAgICAg
ICBlbnRyeS0+cG9zID0gMDsKKworICAgICAgICBnX29iamVjdF91bnJlZihlbnRyeS0+Y2FuY2Vs
bGFibGUpOworICAgICAgICBlbnRyeS0+Y2FuY2VsbGFibGUgPSAwOworICAgIH0KKworICAgIGNh
Y2hlLT5wcml2LT5uUGVuZGluZy0tOworCisgICAgLyogRnJlZXMgKi8KKyAgICB3ZWJraXRfc291
cF9jYWNoZV9jb3JlX3dyaXRpbmdfZml4dHVyZV9mcmVlKGZpeHR1cmUpOworfQorCitzdGF0aWMg
dm9pZCB3cml0ZVJlYWR5Q2IoR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwg
V2ViS2l0U291cENhY2hlQ29yZVdyaXRpbmdGaXh0dXJlKiBmaXh0dXJlKQoreworICAgIEdPdXRw
dXRTdHJlYW0qIHN0cmVhbSA9IEdfT1VUUFVUX1NUUkVBTShzb3VyY2UpOworICAgIEdFcnJvciog
ZXJyb3IgPSAwOworICAgIGdzc2l6ZSB3cml0ZVNpemU7CisgICAgV2ViS2l0U291cENhY2hlQ29y
ZUVudHJ5KiBlbnRyeSA9IGZpeHR1cmUtPmVudHJ5OworCisgICAgaWYgKGdfY2FuY2VsbGFibGVf
aXNfY2FuY2VsbGVkKGVudHJ5LT5jYW5jZWxsYWJsZSkpIHsKKyAgICAgICAgZ19vdXRwdXRfc3Ry
ZWFtX2Nsb3NlX2FzeW5jKHN0cmVhbSwgR19QUklPUklUWV9ERUZBVUxULCBlbnRyeS0+Y2FuY2Vs
bGFibGUsIChHQXN5bmNSZWFkeUNhbGxiYWNrKSBjbG9zZVJlYWR5Q2IsIGZpeHR1cmUpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgd3JpdGVTaXplID0gZ19vdXRwdXRfc3RyZWFtX3dy
aXRlX2ZpbmlzaChzdHJlYW0sIHJlc3VsdCwgJmVycm9yKTsKKyAgICBpZiAod3JpdGVTaXplIDw9
IDAgfHwgZXJyb3IpIHsKKyAgICAgICAgaWYgKGVycm9yKQorICAgICAgICAgICAgZW50cnktPmVy
cm9yID0gZXJyb3I7CisgICAgICAgIGdfb3V0cHV0X3N0cmVhbV9jbG9zZV9hc3luYyhzdHJlYW0s
IEdfUFJJT1JJVFlfREVGQVVMVCwgZW50cnktPmNhbmNlbGxhYmxlLCAoR0FzeW5jUmVhZHlDYWxs
YmFjaykgY2xvc2VSZWFkeUNiLCBmaXh0dXJlKTsKKyAgICAgICAgLyogRklYTUU6IFdlIHNob3Vs
ZCBjb21wbGV0ZWx5IHN0b3AgY2FjaGluZyB0aGUKKyAgICAgICAgICAgcmVzb3VyY2UgYXQgdGhp
cyBwb2ludCAqLworICAgIH0gZWxzZSB7CisgICAgICAgIGVudHJ5LT5wb3MgKz0gd3JpdGVTaXpl
OworCisgICAgICAgIC8qIEFyZSB3ZSBzdGlsbCB3cml0aW5nIGFuZCBpcyB0aGVyZSBuZXcgZGF0
YSB0byB3cml0ZQorICAgICAgICAgICBhbHJlYWR5ID8gKi8KKyAgICAgICAgaWYgKGVudHJ5LT5k
YXRhICYmIGVudHJ5LT5wb3MgPCBlbnRyeS0+ZGF0YS0+bGVuKQorICAgICAgICAgICAgZ19vdXRw
dXRfc3RyZWFtX3dyaXRlX2FzeW5jKGVudHJ5LT5zdHJlYW0sIGVudHJ5LT5kYXRhLT5zdHIgKyBl
bnRyeS0+cG9zLCBlbnRyeS0+ZGF0YS0+bGVuIC0gZW50cnktPnBvcywgR19QUklPUklUWV9ERUZB
VUxULCBlbnRyeS0+Y2FuY2VsbGFibGUsIChHQXN5bmNSZWFkeUNhbGxiYWNrKSB3cml0ZVJlYWR5
Q2IsIGZpeHR1cmUpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGVudHJ5LT53cml0aW5n
ID0gRkFMU0U7CisKKyAgICAgICAgICAgIGlmIChlbnRyeS0+Z290Qm9keSkKKyAgICAgICAgICAg
ICAgICAvKiBJZiB3ZSBhbHJlYWR5IHJlY2VpdmVkICdnb3QtYm9keScKKyAgICAgICAgICAgICAg
ICAgICBhbmQgd2UgaGF2ZSB3cml0dGVuIGFsbCB0aGUgZGF0YSwKKyAgICAgICAgICAgICAgICAg
ICB3ZSBjYW4gY2xvc2UgdGhlIHN0cmVhbSAqLworICAgICAgICAgICAgICAgIGdfb3V0cHV0X3N0
cmVhbV9jbG9zZV9hc3luYyhlbnRyeS0+c3RyZWFtLCBHX1BSSU9SSVRZX0RFRkFVTFQsIGVudHJ5
LT5jYW5jZWxsYWJsZSwgKEdBc3luY1JlYWR5Q2FsbGJhY2spIGNsb3NlUmVhZHlDYiwgZml4dHVy
ZSk7CisgICAgICAgIH0KKworICAgIH0KK30KKworc3RhdGljIHZvaWQgbXNnR290Q2h1bmtDYihT
b3VwTWVzc2FnZSogbXNnLCBTb3VwQnVmZmVyKiBjaHVuaywgV2ViS2l0U291cENhY2hlQ29yZVdy
aXRpbmdGaXh0dXJlKiBmaXh0dXJlKQoreworICAgIFdlYktpdFNvdXBDYWNoZUNvcmVFbnRyeSog
ZW50cnkgPSBmaXh0dXJlLT5lbnRyeTsKKworICAgIGdfcmV0dXJuX2lmX2ZhaWwoY2h1bmstPmRh
dGEgJiYgY2h1bmstPmxlbmd0aCk7CisgICAgZ19yZXR1cm5faWZfZmFpbChlbnRyeSk7CisKKyAg
ICAvKiBJZ25vcmUgdGhpcyBpZiB0aGUgd3JpdGluZyBvciBhcHBlbmRpbmcgd2FzIGNhbmNlbGxl
ZCAqLworICAgIGlmICghZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQoZW50cnktPmNhbmNlbGxh
YmxlKSkgeworCisgICAgICAgIGdfc3RyaW5nX2FwcGVuZF9sZW4oZW50cnktPmRhdGEsIGNodW5r
LT5kYXRhLCBjaHVuay0+bGVuZ3RoKTsKKyAgICAgICAgZW50cnktPmxlbmd0aCA9IGVudHJ5LT5k
YXRhLT5sZW47CisKKyAgICAgICAgaWYgKCFjYWNoZUFjY2VwdHNFbnRyaWVzT2ZTaXplKGZpeHR1
cmUtPmNhY2hlLCBlbnRyeS0+bGVuZ3RoKSkgeworICAgICAgICAgICAgLyogUXVpY2tseSBjYW5j
ZWwgdGhlIGNhY2hpbmcgb2YgdGhlIHJlc291cmNlICovCisgICAgICAgICAgICBnX2NhbmNlbGxh
YmxlX2NhbmNlbChlbnRyeS0+Y2FuY2VsbGFibGUpOworICAgICAgICB9CisgICAgfQorCisgICAg
LyogRklYTUU6IHJlbW92ZSB0aGUgZXJyb3IgY2hlY2sgd2hlbiB3ZSBjYW5jZWwgdGhlIGNhY2hp
bmcgYXQKKyAgICAgICB0aGUgZmlyc3Qgd3JpdGUgZXJyb3IgKi8KKyAgICAvKiBPbmx5IHdyaXRl
IGlmIHRoZSBlbnRyeSBzdHJlYW0gaXMgcmVhZHkgKi8KKyAgICBpZiAoIWVudHJ5LT53cml0aW5n
ICYmICFlbnRyeS0+ZXJyb3IgJiYgZW50cnktPnN0cmVhbSkgeworICAgICAgICBHU3RyaW5nKiBk
YXRhID0gZW50cnktPmRhdGE7CisgICAgICAgIGVudHJ5LT53cml0aW5nID0gVFJVRTsKKyAgICAg
ICAgZ19vdXRwdXRfc3RyZWFtX3dyaXRlX2FzeW5jKGVudHJ5LT5zdHJlYW0sIGRhdGEtPnN0ciAr
IGVudHJ5LT5wb3MsIGRhdGEtPmxlbiAtIGVudHJ5LT5wb3MsIEdfUFJJT1JJVFlfREVGQVVMVCwg
ZW50cnktPmNhbmNlbGxhYmxlLCAoR0FzeW5jUmVhZHlDYWxsYmFjaykgd3JpdGVSZWFkeUNiLCBm
aXh0dXJlKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIG1zZ0dvdEJvZHlDYihTb3VwTWVzc2Fn
ZSogbXNnLCBXZWJLaXRTb3VwQ2FjaGVDb3JlV3JpdGluZ0ZpeHR1cmUqIGZpeHR1cmUpCit7Cisg
ICAgV2ViS2l0U291cENhY2hlQ29yZUVudHJ5KiBlbnRyeSA9IGZpeHR1cmUtPmVudHJ5OworCisg
ICAgZ19yZXR1cm5faWZfZmFpbChlbnRyeSk7CisKKyAgICBlbnRyeS0+Z290Qm9keSA9IFRSVUU7
CisKKyAgICBpZiAoIWVudHJ5LT5zdHJlYW0gJiYgZW50cnktPnBvcyAhPSBlbnRyeS0+bGVuZ3Ro
KQorICAgICAgICAvKiBUaGUgc3RyZWFtIGlzIG5vdCByZWFkeSB0byBiZSB3cml0dGVuIGJ1dCB3
ZSBzdGlsbAorICAgICAgICAgICBoYXZlIGRhdGEgdG8gd3JpdGUsIHdlJ2xsIHdyaXRlIGl0IHdo
ZW4gdGhlIHN0cmVhbQorICAgICAgICAgICBpcyBvcGVuZWQgZm9yIHdyaXRpbmcgKi8KKyAgICAg
ICAgcmV0dXJuOworCisKKyAgICBpZiAoZW50cnktPnBvcyAhPSBlbnRyeS0+bGVuZ3RoKSB7Cisg
ICAgICAgIC8qIElmIHdlIHN0aWxsIGhhdmUgZGF0YSB0byB3cml0ZSwgd3JpdGUgaXQsCisgICAg
ICAgICAgIHdyaXRlUmVhZHlDYiB3aWxsIGNsb3NlIHRoZSBzdHJlYW0gKi8KKyAgICAgICAgaWYg
KCFlbnRyeS0+d3JpdGluZyAmJiAhZW50cnktPmVycm9yICYmIGVudHJ5LT5zdHJlYW0pCisgICAg
ICAgICAgICBnX291dHB1dF9zdHJlYW1fd3JpdGVfYXN5bmMoZW50cnktPnN0cmVhbSwgZW50cnkt
PmRhdGEtPnN0ciArIGVudHJ5LT5wb3MsIGVudHJ5LT5kYXRhLT5sZW4gLSBlbnRyeS0+cG9zLCBH
X1BSSU9SSVRZX0RFRkFVTFQsIGVudHJ5LT5jYW5jZWxsYWJsZSwgKEdBc3luY1JlYWR5Q2FsbGJh
Y2spIHdyaXRlUmVhZHlDYiwgZml4dHVyZSk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChlbnRyeS0+c3RyZWFtKQorICAgICAgICBnX291dHB1dF9zdHJlYW1fY2xvc2VfYXN5
bmMoZW50cnktPnN0cmVhbSwgR19QUklPUklUWV9ERUZBVUxULCBlbnRyeS0+Y2FuY2VsbGFibGUs
IChHQXN5bmNSZWFkeUNhbGxiYWNrKSBjbG9zZVJlYWR5Q2IsIGZpeHR1cmUpOworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfc291cF9jYWNoZV9jb3JlX2VudHJ5X2RlbGV0ZShXZWJLaXRTb3VwQ2Fj
aGVDb3JlKiBjYWNoZSwgV2ViS2l0U291cENhY2hlQ29yZUVudHJ5KiBlbnRyeSkKK3sKKyAgICBH
RmlsZSogZmlsZTsKKyAgICBjaGFyKiBtZDUsICogZmlsZW5hbWU7CisKKyAgICAvKiBEZWxldGUg
Y2FjaGUgZmlsZS4gV2UgZG9uJ3QgdXNlIHRoZSBlbnRyeS0+ZmlsZW5hbWUgYmVjYXVzZQorICAg
ICAgIHdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgZmlsZSBpcyBkZWxldGVkIGV2ZW4gdG91Z2ggdGhl
IGNhY2hlCisgICAgICAgYmVjYW1lIHNvbWVob3cgY29ycnVwdGVkIGFuZCB0aGUgZW50cnkgaXMg
bm90IHRoZXJlICovCisgICAgbWQ1ID0gZ19jb21wdXRlX2NoZWNrc3VtX2Zvcl9zdHJpbmcoR19D
SEVDS1NVTV9NRDUsIGVudHJ5LT5rZXksIC0xKTsKKyAgICBmaWxlbmFtZSA9IGdfYnVpbGRfZmls
ZW5hbWUoY2FjaGUtPnByaXYtPmNhY2hlRGlyLCBtZDUsIE5VTEwpOworICAgIGZpbGUgPSBnX2Zp
bGVfbmV3X2Zvcl9wYXRoKGZpbGVuYW1lKTsKKyAgICBnX2ZpbGVfZGVsZXRlKGZpbGUsIDAsIDAp
OworICAgIGdfZnJlZShtZDUpOworICAgIGdfZnJlZShmaWxlbmFtZSk7CisgICAgZ19vYmplY3Rf
dW5yZWYoZmlsZSk7CisKKyAgICAvKiBSZW1vdmUgZnJvbSBMUlUgKi8KKyAgICBjYWNoZS0+cHJp
di0+bHJ1U3RhcnQgPSBnX2xpc3RfZGVsZXRlX2xpbmsoY2FjaGUtPnByaXYtPmxydVN0YXJ0LCBl
bnRyeS0+bHJ1KTsKKworICAgIC8qIFJlbW92ZSBmcm9tIGNhY2hlICovCisgICAgZ19oYXNoX3Rh
YmxlX3JlbW92ZShjYWNoZS0+cHJpdi0+Y2FjaGUsIGVudHJ5LT5rZXkpOworfQorCitzdGF0aWMg
Z2ludCBscnVDb21wYXJlRnVuYyhnY29uc3Rwb2ludGVyIGEsIGdjb25zdHBvaW50ZXIgYikKK3sK
KyAgICBXZWJLaXRTb3VwQ2FjaGVDb3JlRW50cnkqIGVudHJ5QSA9IChXZWJLaXRTb3VwQ2FjaGVD
b3JlRW50cnkqKSBhOworICAgIFdlYktpdFNvdXBDYWNoZUNvcmVFbnRyeSogZW50cnlCID0gKFdl
YktpdFNvdXBDYWNoZUNvcmVFbnRyeSopIGI7CisKKyAgICAvKiogVGhlIHJhdGlvbmFsZSBvZiB0
aGlzIHNvcnRpbmcgZnVuYyBpcworICAgICAqCisgICAgICogMS4gc29ydCBieSBoaXRzIC0+IExS
VSBhbGdvcml0aG0sIHRoZW4KKyAgICAgKgorICAgICAqIDIuIHNvcnQgYnkgZnJlc2huZXNzIGxp
ZmV0aW1lLCB3ZSBiZXR0ZXIgZGlzY2FyZCBmaXJzdAorICAgICAqIGVudHJpZXMgdGhhdCBhcmUg
Y2xvc2UgdG8gZXhwaXJlCisgICAgICoKKyAgICAgKiAzLiBzb3J0IGJ5IHNpemUsIHJlcGxhY2Ug
Zmlyc3Qgc21hbGwgc2l6ZSByZXNvdXJjZXMgYXMgdGhleQorICAgICAqIGFyZSBjaGVhcGVyIHRv
IGRvd25sb2FkCisgICAgICogKi8KKworICAgIC8qIFNvcnQgYnkgaGl0cyAqLworICAgIGlmIChl
bnRyeUEtPmhpdHMgIT0gZW50cnlCLT5oaXRzKQorICAgICAgICByZXR1cm4gZW50cnlBLT5oaXRz
IC0gZW50cnlCLT5oaXRzOworCisgICAgLyogU29ydCBieSBmcmVzaG5lc3NMaWZldGltZSAqLwor
ICAgIGlmIChlbnRyeUEtPmZyZXNobmVzc0xpZmV0aW1lICE9IGVudHJ5Qi0+ZnJlc2huZXNzTGlm
ZXRpbWUpCisgICAgICAgIHJldHVybiBlbnRyeUEtPmZyZXNobmVzc0xpZmV0aW1lIC0gZW50cnlC
LT5mcmVzaG5lc3NMaWZldGltZTsKKworICAgIC8qIFNvcnQgYnkgc2l6ZSAqLworICAgIHJldHVy
biBlbnRyeUEtPmxlbmd0aCAtIGVudHJ5Qi0+bGVuZ3RoOworfQorCitzdGF0aWMgZ2Jvb2xlYW4g
Y2FjaGVBY2NlcHRzRW50cmllc09mU2l6ZShXZWJLaXRTb3VwQ2FjaGVDb3JlKiBjYWNoZSwgZ3Vp
bnQgbGVuZ3RoVG9BZGQpCit7CisgICAgLyogV2UgY291bGQgYWRkIGhlcmUgc29tZSBtb3JlIGhl
dXJpc3RpY3MuIFRPRE86IHJldmlldyBob3cKKyAgICAgICB0aGlzIGlzIGRvbmUgYnkgb3RoZXIg
SFRUUCBjYWNoZXMgKi8KKworICAgIHJldHVybiBsZW5ndGhUb0FkZCA8PSBjYWNoZS0+cHJpdi0+
bWF4RW50cnlEYXRhU2l6ZTsKK30KKworc3RhdGljIHZvaWQgbWFrZVJvb21Gb3JOZXdFbnRyeShX
ZWJLaXRTb3VwQ2FjaGVDb3JlKiBjYWNoZSwgZ3VpbnQgbGVuZ3RoVG9BZGQpCit7CisgICAgLyog
Q2hlY2sgdGhhdCB0aGVyZSBpcyBlbm91Z2ggcm9vbSBmb3IgdGhlIG5ldyBlbnRyeS4gVGhpcyBp
cworICAgICAgIGFuIGFwcHJveGltYXRpb24gYXMgd2UncmUgbm90IHdvcmtpbmcgb3V0IHRoZSBz
aXplIG9mIHRoZQorICAgICAgIHRwbCBmaWxlIG9yIHRoZSBzaXplIG9mIHRoZSBoZWFkZXJzIGZv
ciBwZXJmb3JtYW5jZQorICAgICAgIHJlYXNvbnMuIFRPRE86IGNoZWNrIGlmIHRoYXQgd291bGQg
YmUgcmVhbGx5IHRoYXQgZXhwZW5zaXZlICovCisgICAgd2hpbGUgKGNhY2hlLT5wcml2LT5scnVT
dGFydCAmJiAobGVuZ3RoVG9BZGQgKyBjYWNoZS0+cHJpdi0+c2l6ZSA+IGNhY2hlLT5wcml2LT5t
YXhTaXplKSkgeworICAgICAgICBXZWJLaXRTb3VwQ2FjaGVDb3JlRW50cnkqIG9sZEVudHJ5Owor
CisgICAgICAgIC8qIFJlbW92ZSBmcm9tIGxpc3QgKi8KKyAgICAgICAgb2xkRW50cnkgPSAoV2Vi
S2l0U291cENhY2hlQ29yZUVudHJ5KikgY2FjaGUtPnByaXYtPmxydVN0YXJ0LT5kYXRhOworICAg
ICAgICBjYWNoZS0+cHJpdi0+bHJ1U3RhcnQgPSBnX2xpc3RfZGVsZXRlX2xpbmsoY2FjaGUtPnBy
aXYtPmxydVN0YXJ0LCBjYWNoZS0+cHJpdi0+bHJ1U3RhcnQpOworCisgICAgICAgIC8qIERpc2Nh
cmQgZW50cmllcy4gT25jZSBjYW5jZWxsZWQgcmVzb3VyY2VzIHdpbGwgYmUKKyAgICAgICAgICAg
ZnJlZWQgaW4gY2xvc2VSZWFkeUNiICovCisgICAgICAgIGdfZGVidWcoIkRpc2NhcmRpbmcgKCV1
IGJ5dGVzKS4uLlx0KG5vdyAldSkiLCBvbGRFbnRyeS0+bGVuZ3RoLCBjYWNoZS0+cHJpdi0+c2l6
ZSk7CisgICAgICAgIGNhY2hlLT5wcml2LT5zaXplIC09IG9sZEVudHJ5LT5sZW5ndGg7CisKKyAg
ICAgICAgaWYgKG9sZEVudHJ5LT5kaXJ0eSkKKyAgICAgICAgICAgIGdfY2FuY2VsbGFibGVfY2Fu
Y2VsKG9sZEVudHJ5LT5jYW5jZWxsYWJsZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHdl
YmtpdF9zb3VwX2NhY2hlX2NvcmVfZW50cnlfZGVsZXRlKGNhY2hlLCBvbGRFbnRyeSk7CisgICAg
fQorICAgIGlmICghR19VTkxJS0VMWShjYWNoZS0+cHJpdi0+bHJ1U3RhcnQpKQorICAgICAgICBj
YWNoZS0+cHJpdi0+bHJ1RW5kID0gMDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9zb3Vw
X2NhY2hlX2NvcmVfZW50cnlfaW5zZXJ0X2J5X2tleShXZWJLaXRTb3VwQ2FjaGVDb3JlKiBjYWNo
ZSwgY29uc3QgY2hhcioga2V5LCBXZWJLaXRTb3VwQ2FjaGVDb3JlRW50cnkqIGVudHJ5KQorewor
ICAgIGd1aW50IGxlbmd0aFRvQWRkID0gMDsKKworICAgIGlmIChzb3VwX21lc3NhZ2VfaGVhZGVy
c19nZXRfZW5jb2RpbmcoZW50cnktPmhlYWRlcnMpICE9IFNPVVBfRU5DT0RJTkdfQ0hVTktFRCkK
KyAgICAgICAgbGVuZ3RoVG9BZGQgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfY29udGVudF9s
ZW5ndGgoZW50cnktPmhlYWRlcnMpOworCisgICAgLyogQ2hlY2sgaWYgd2UgYXJlIGdvaW5nIHRv
IHN0b3JlIHRoZSByZXNvdXJjZSBkZXBlbmRpbmcgb24gaXRzIHNpemUgKi8KKyAgICBpZiAobGVu
Z3RoVG9BZGQpIHsKKyAgICAgICAgaWYgKCFjYWNoZUFjY2VwdHNFbnRyaWVzT2ZTaXplKGNhY2hl
LCBsZW5ndGhUb0FkZCkpCisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICAgICAgLyog
TWFrZSByb29tIGZvciBuZXcgZW50cnkgaWYgbmVlZGVkICovCisgICAgICAgIG1ha2VSb29tRm9y
TmV3RW50cnkoY2FjaGUsIGxlbmd0aFRvQWRkKTsKKyAgICB9CisKKyAgICBnX2hhc2hfdGFibGVf
aW5zZXJ0KGNhY2hlLT5wcml2LT5jYWNoZSwgZ19zdHJkdXAoa2V5KSwgZW50cnkpOworCisgICAg
LyogQ29tcHV0ZSBuZXcgY2FjaGUgc2l6ZSAqLworICAgIGNhY2hlLT5wcml2LT5zaXplICs9IGxl
bmd0aFRvQWRkOworCisgICAgLyogVXBkYXRlIExSVSBsaXN0cyAqLworICAgIGNhY2hlLT5wcml2
LT5scnVTdGFydCA9IGdfbGlzdF9pbnNlcnRfc29ydGVkKGNhY2hlLT5wcml2LT5scnVTdGFydCwg
ZW50cnksIGxydUNvbXBhcmVGdW5jKTsKKyAgICBpZiAoR19MSUtFTFkoY2FjaGUtPnByaXYtPmxy
dUVuZCkpIHsKKyAgICAgICAgd2hpbGUgKGNhY2hlLT5wcml2LT5scnVFbmQtPm5leHQpCisgICAg
ICAgICAgICBjYWNoZS0+cHJpdi0+bHJ1RW5kID0gZ19saXN0X25leHQoY2FjaGUtPnByaXYtPmxy
dUVuZCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2FjaGUtPnByaXYtPmxydUVuZCA9IGNhY2hl
LT5wcml2LT5scnVTdGFydDsKKyAgICB9CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGlj
IHZvaWQgbXNnUmVzdGFydGVkQ2IoU291cE1lc3NhZ2UqIG1zZywgV2ViS2l0U291cENhY2hlQ29y
ZUVudHJ5KiBlbnRyeSkKK3sKKyAgICAvKiBGSVhNRTogV2hhdCBzaG91bGQgd2UgZG8gaGVyZSBl
eGFjdGx5PyAqLworfQorCitzdGF0aWMgdm9pZCBhcHBlbmRUb1JlYWR5Q2IoR09iamVjdCogc291
cmNlLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgV2ViS2l0U291cENhY2hlQ29yZVdyaXRpbmdGaXh0
dXJlKiBmaXh0dXJlKQoreworICAgIEdGaWxlKiBmaWxlID0gKEdGaWxlKikgc291cmNlOworICAg
IEdPdXRwdXRTdHJlYW0qIHN0cmVhbTsKKyAgICBXZWJLaXRTb3VwQ2FjaGVDb3JlRW50cnkqIGVu
dHJ5ID0gZml4dHVyZS0+ZW50cnk7CisKKyAgICBzdHJlYW0gPSAoR091dHB1dFN0cmVhbSopIGdf
ZmlsZV9hcHBlbmRfdG9fZmluaXNoKGZpbGUsIHJlc3VsdCwgJmVudHJ5LT5lcnJvcik7CisKKyAg
ICBpZiAoZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQoZW50cnktPmNhbmNlbGxhYmxlKSB8fCBl
bnRyeS0+ZXJyb3IpIHsKKyAgICAgICAgZml4dHVyZS0+Y2FjaGUtPnByaXYtPnNpemUgLT0gc291
cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2NvbnRlbnRfbGVuZ3RoKGVudHJ5LT5oZWFkZXJzKTsKKyAg
ICAgICAgZml4dHVyZS0+Y2FjaGUtPnByaXYtPm5QZW5kaW5nLS07CisgICAgICAgIHdlYmtpdF9z
b3VwX2NhY2hlX2NvcmVfZW50cnlfZGVsZXRlKGZpeHR1cmUtPmNhY2hlLCBlbnRyeSk7CisgICAg
ICAgIHdlYmtpdF9zb3VwX2NhY2hlX2NvcmVfd3JpdGluZ19maXh0dXJlX2ZyZWUoZml4dHVyZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBlbnRyeS0+c3RyZWFtID0gc3RhdGljX2Nh
c3QgPCBHT3V0cHV0U3RyZWFtKiA+KGdfb2JqZWN0X3JlZihzdHJlYW0pKTsKKyAgICBnX29iamVj
dF91bnJlZihmaWxlKTsKKworICAgIC8qIElmIHdlIGFscmVhZHkgZ290IGFsbCB0aGUgZGF0YSB3
ZSBoYXZlIHRvIGluaXRpYXRlIHRoZQorICAgICAgIHdyaXRpbmcgaGVyZSwgc2luY2Ugd2Ugd29u
J3QgZ2V0IG1vcmUgJ2dvdC1jaHVuaycKKyAgICAgICBzaWduYWxzICovCisgICAgaWYgKGVudHJ5
LT5nb3RCb2R5KSB7CisgICAgICAgIEdTdHJpbmcqIGRhdGEgPSBlbnRyeS0+ZGF0YTsKKworICAg
ICAgICAvKiBJdCBjb3VsZCBoYXBwZW4gdGhhdCByZWFkaW5nIHRoZSBkYXRhIGZyb20gc2VydmVy
CisgICAgICAgICAgIHdhcyBjb21wbGV0ZWQgYmVmb3JlIHRoaXMgaGFwcGVucy4gSW4gdGhhdCBj
YXNlCisgICAgICAgICAgIHRoZXJlIGlzIG5vIGRhdGEgKi8KKyAgICAgICAgaWYgKGRhdGEpIHsK
KyAgICAgICAgICAgIGVudHJ5LT53cml0aW5nID0gVFJVRTsKKyAgICAgICAgICAgIGdfb3V0cHV0
X3N0cmVhbV93cml0ZV9hc3luYyhlbnRyeS0+c3RyZWFtLCBkYXRhLT5zdHIgKyBlbnRyeS0+cG9z
LCBkYXRhLT5sZW4gLSBlbnRyeS0+cG9zLCBHX1BSSU9SSVRZX0RFRkFVTFQsIGVudHJ5LT5jYW5j
ZWxsYWJsZSwgKEdBc3luY1JlYWR5Q2FsbGJhY2spIHdyaXRlUmVhZHlDYiwgZml4dHVyZSk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICB0aW1lX3QgcmVxdWVz
dFRpbWU7CisgICAgU291cFNlc3Npb25GZWF0dXJlKiBmZWF0dXJlOworICAgIGd1bG9uZyBnb3RI
ZWFkZXJzSGFuZGxlcjsKK30gUmVxdWVzdEhlbHBlcjsKKworc3RhdGljIHZvaWQgbXNnR290SGVh
ZGVyc0NiKFNvdXBNZXNzYWdlKiBtc2csIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIFdlYktp
dFNvdXBDYWNoZUNvcmUqIGNhY2hlOworICAgIFdlYktpdFNvdXBDYWNoZUNvcmVhYmlsaXR5IGNh
Y2hlYWJsZTsKKyAgICBSZXF1ZXN0SGVscGVyKiBoZWxwZXI7CisgICAgdGltZV90IHJlcXVlc3RU
aW1lLCByZXNwb25zZVRpbWU7CisKKyAgICByZXNwb25zZVRpbWUgPSB0aW1lKDApOworCisgICAg
aGVscGVyID0gKFJlcXVlc3RIZWxwZXIqKSB1c2VyRGF0YTsKKyAgICBjYWNoZSA9IFdFQktJVF9T
T1VQX0NBQ0hFX0NPUkUoaGVscGVyLT5mZWF0dXJlKTsKKyAgICByZXF1ZXN0VGltZSA9IGhlbHBl
ci0+cmVxdWVzdFRpbWU7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5j
KG1zZywgKHZvaWQqKW1zZ0dvdEhlYWRlcnNDYiwgdXNlckRhdGEpOworICAgIGdfc2xpY2VfZnJl
ZShSZXF1ZXN0SGVscGVyLCBoZWxwZXIpOworCisgICAgY2FjaGVhYmxlID0gd2Via2l0U291cENh
Y2hlQ29yZUdldENhY2hlYWJpbGl0eShjYWNoZSwgbXNnKTsKKworICAgIGlmIChjYWNoZWFibGUg
JiBXRUJLSVRfU09VUF9DQUNIRV9DT1JFX0NBQ0hFQUJMRSkgeworICAgICAgICBXZWJLaXRTb3Vw
Q2FjaGVDb3JlRW50cnkqIGVudHJ5OworICAgICAgICBjaGFyKiBrZXk7CisgICAgICAgIEdGaWxl
KiBmaWxlOworICAgICAgICBXZWJLaXRTb3VwQ2FjaGVDb3JlV3JpdGluZ0ZpeHR1cmUqIGZpeHR1
cmU7CisKKyAgICAgICAgLyogQ2hlY2sgaWYgd2UgYXJlIGFscmVhZHkgY2FjaGluZyB0aGlzIHJl
c291cmNlICovCisgICAgICAgIGtleSA9IHNvdXBNZXNzYWdlR2V0Q2FjaGVLZXkobXNnKTsKKyAg
ICAgICAgZW50cnkgPSBzdGF0aWNfY2FzdCA8IFdlYktpdFNvdXBDYWNoZUNvcmVFbnRyeSogPihn
X2hhc2hfdGFibGVfbG9va3VwKGNhY2hlLT5wcml2LT5jYWNoZSwga2V5KSk7CisgICAgICAgIGdf
ZnJlZShrZXkpOworCisgICAgICAgIGlmIChlbnRyeSAmJiBlbnRyeS0+ZGlydHkpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgLyogQ3JlYXRlIGEgbmV3IGVudHJ5LCBkZWxldGluZyBh
bnkgb2xkIG9uZSBpZiBwcmVzZW50ICovCisgICAgICAgIGVudHJ5ID0gd2Via2l0X3NvdXBfY2Fj
aGVfY29yZV9lbnRyeV9uZXcoY2FjaGUsIG1zZywgcmVxdWVzdFRpbWUsIHJlc3BvbnNlVGltZSk7
CisgICAgICAgIHdlYmtpdF9zb3VwX2NhY2hlX2NvcmVfZW50cnlfZGVsZXRlKGNhY2hlLCBlbnRy
eSk7CisKKyAgICAgICAgZW50cnktPmhpdHMgPSAxOworCisgICAgICAgIC8qIERvIG5vdCBjb250
aW51ZSBpZiBpdCBjYW4gbm90IGJlIHN0b3JlZCAqLworICAgICAgICBpZiAoIXdlYmtpdF9zb3Vw
X2NhY2hlX2NvcmVfZW50cnlfaW5zZXJ0X2J5X2tleShjYWNoZSwgKGNvbnN0IGdjaGFyKillbnRy
eS0+a2V5LCBlbnRyeSkpIHsKKyAgICAgICAgICAgIHdlYmtpdF9zb3VwX2NhY2hlX2NvcmVfZW50
cnlfZnJlZShlbnRyeSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBmaXh0dXJlID0gZ19zbGljZV9uZXcoV2ViS2l0U291cENhY2hlQ29yZVdyaXRpbmdGaXh0dXJl
KTsKKyAgICAgICAgZml4dHVyZS0+Y2FjaGUgPSBzdGF0aWNfY2FzdCA8IFdlYktpdFNvdXBDYWNo
ZUNvcmUqID4oZ19vYmplY3RfcmVmKGNhY2hlKSk7CisgICAgICAgIGZpeHR1cmUtPmVudHJ5ID0g
ZW50cnk7CisgICAgICAgIGZpeHR1cmUtPm1zZyA9IHN0YXRpY19jYXN0IDwgU291cE1lc3NhZ2Uq
ID4oZ19vYmplY3RfcmVmKG1zZykpOworCisgICAgICAgIC8qIFdlIGNvbm5lY3Qgbm93IHRvIHRo
ZXNlIHNpZ25hbHMgYW5kIGJ1ZmZlciB0aGUgZGF0YQorICAgICAgICAgICBpZiBpdCBjb21lcyBi
ZWZvcmUgdGhlIGZpbGUgaXMgcmVhZHkgZm9yIHdyaXRpbmcgKi8KKyAgICAgICAgZml4dHVyZS0+
Z290Q2h1bmtIYW5kbGVyID0gZ19zaWduYWxfY29ubmVjdChtc2csICJnb3QtY2h1bmsiLCBHX0NB
TExCQUNLKG1zZ0dvdENodW5rQ2IpLCBmaXh0dXJlKTsKKyAgICAgICAgZml4dHVyZS0+Z290Qm9k
eUhhbmRsZXIgPSBnX3NpZ25hbF9jb25uZWN0KG1zZywgImdvdC1ib2R5IiwgR19DQUxMQkFDSyht
c2dHb3RCb2R5Q2IpLCBmaXh0dXJlKTsKKyAgICAgICAgZml4dHVyZS0+cmVzdGFydGVkSGFuZGxl
ciA9IGdfc2lnbmFsX2Nvbm5lY3QobXNnLCAicmVzdGFydGVkIiwgR19DQUxMQkFDSyhtc2dSZXN0
YXJ0ZWRDYiksIGVudHJ5KTsKKworICAgICAgICAvKiBQcmVwYXJlIGVudHJ5ICovCisgICAgICAg
IGZpbGUgPSBnX2ZpbGVfbmV3X2Zvcl9wYXRoKGVudHJ5LT5maWxlbmFtZSk7CisgICAgICAgIGNh
Y2hlLT5wcml2LT5uUGVuZGluZysrOworCisgICAgICAgIGVudHJ5LT5kaXJ0eSA9IFRSVUU7Cisg
ICAgICAgIGVudHJ5LT5jYW5jZWxsYWJsZSA9IGdfY2FuY2VsbGFibGVfbmV3KCk7CisgICAgICAg
IGdfZmlsZV9hcHBlbmRfdG9fYXN5bmMoZmlsZSwgc3RhdGljX2Nhc3QgPCBHRmlsZUNyZWF0ZUZs
YWdzID4gKDApLCBHX1BSSU9SSVRZX0RFRkFVTFQsIGVudHJ5LT5jYW5jZWxsYWJsZSwgKEdBc3lu
Y1JlYWR5Q2FsbGJhY2spIGFwcGVuZFRvUmVhZHlDYiwgZml4dHVyZSk7CisgICAgfSBlbHNlIGlm
IChjYWNoZWFibGUgJiBXRUJLSVRfU09VUF9DQUNIRV9DT1JFX0lOVkFMSURBVEVTKSB7CisgICAg
ICAgIGNoYXIqIGtleTsKKyAgICAgICAgV2ViS2l0U291cENhY2hlQ29yZUVudHJ5KiBlbnRyeTsK
KworICAgICAgICBrZXkgPSBzb3VwTWVzc2FnZUdldENhY2hlS2V5KG1zZyk7CisgICAgICAgIGVu
dHJ5ID0gc3RhdGljX2Nhc3QgPCBXZWJLaXRTb3VwQ2FjaGVDb3JlRW50cnkqID4oZ19oYXNoX3Rh
YmxlX2xvb2t1cChjYWNoZS0+cHJpdi0+Y2FjaGUsIGtleSkpOworICAgICAgICBpZiAoZW50cnkp
CisgICAgICAgICAgICB3ZWJraXRfc291cF9jYWNoZV9jb3JlX2VudHJ5X2RlbGV0ZShjYWNoZSwg
ZW50cnkpOworICAgICAgICBnX2ZyZWUoa2V5KTsKKyAgICB9IGVsc2UgaWYgKGNhY2hlYWJsZSAm
IFdFQktJVF9TT1VQX0NBQ0hFX0NPUkVfVkFMSURBVEVTKSB7CisgICAgICAgIGNoYXIqIGtleTsK
KyAgICAgICAgV2ViS2l0U291cENhY2hlQ29yZUVudHJ5KiBlbnRyeTsKKworICAgICAgICBrZXkg
PSBzb3VwTWVzc2FnZUdldENhY2hlS2V5KG1zZyk7CisgICAgICAgIGVudHJ5ID0gc3RhdGljX2Nh
c3QgPCBXZWJLaXRTb3VwQ2FjaGVDb3JlRW50cnkqID4oZ19oYXNoX3RhYmxlX2xvb2t1cChjYWNo
ZS0+cHJpdi0+Y2FjaGUsIGtleSkpOworICAgICAgICBnX2ZyZWUoa2V5KTsKKworICAgICAgICBn
X3JldHVybl9pZl9mYWlsKGVudHJ5KTsKKworICAgICAgICBlbnRyeS0+YmVpbmdWYWxpZGF0ZWQg
PSBGQUxTRTsKKworICAgICAgICAvKiBXZSB1cGRhdGUgdGhlIGhlYWRlcnMgb2YgdGhlIGV4aXN0
aW5nIGNhY2hlIGl0ZW0sCisgICAgICAgICAgIHBsdXMgaXRzIGFnZSAqLworICAgICAgICBzb3Vw
X21lc3NhZ2VfaGVhZGVyc19mb3JlYWNoKG1zZy0+cmVzcG9uc2VfaGVhZGVycywgKFNvdXBNZXNz
YWdlSGVhZGVyc0ZvcmVhY2hGdW5jKSB1cGRhdGVIZWFkZXJzLCBlbnRyeS0+aGVhZGVycyk7Cisg
ICAgICAgIHdlYmtpdF9zb3VwX2NhY2hlX2NvcmVfZW50cnlfc2V0X2ZyZXNobmVzcyhlbnRyeSwg
bXNnLCBjYWNoZSk7CisgICAgfQorfQorCitHSW5wdXRTdHJlYW0gKiB3ZWJraXRTb3VwQ2FjaGVD
b3JlU2VuZFJlc3BvbnNlKFdlYktpdFNvdXBDYWNoZUNvcmUqIGNhY2hlLCBTb3VwTWVzc2FnZSog
bXNnKQoreworICAgIGNoYXIqIGtleTsKKyAgICBXZWJLaXRTb3VwQ2FjaGVDb3JlRW50cnkqIGVu
dHJ5OworICAgIGNoYXIqIGN1cnJlbnRBZ2U7CisgICAgR0lucHV0U3RyZWFtKiBzdHJlYW0gPSAw
OworICAgIEdGaWxlKiBmaWxlOworCisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX1NP
VVBfSVNfQ0FDSEVfQ09SRShjYWNoZSksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFNP
VVBfSVNfTUVTU0FHRShtc2cpLCAwKTsKKworICAgIGtleSA9IHNvdXBNZXNzYWdlR2V0Q2FjaGVL
ZXkobXNnKTsKKyAgICBlbnRyeSA9IHN0YXRpY19jYXN0IDwgV2ViS2l0U291cENhY2hlQ29yZUVu
dHJ5KiA+KGdfaGFzaF90YWJsZV9sb29rdXAoY2FjaGUtPnByaXYtPmNhY2hlLCBrZXkpKTsKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChlbnRyeSwgMCk7CisKKyAgICAvKiBJZiB3ZSBhcmUgdG9s
ZCB0byBzZW5kIGEgcmVzcG9uc2UgZnJvbSBjYWNoZSBhbnkgdmFsaWRhdGlvbgorICAgICAgIGlu
IGNvdXJzZSBpcyBvdmVyIGJ5IG5vdyAqLworICAgIGVudHJ5LT5iZWluZ1ZhbGlkYXRlZCA9IEZB
TFNFOworCisgICAgLyogSGVhZGVycyAqLworICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2ZvcmVh
Y2goZW50cnktPmhlYWRlcnMsIChTb3VwTWVzc2FnZUhlYWRlcnNGb3JlYWNoRnVuYykgdXBkYXRl
SGVhZGVycywgbXNnLT5yZXNwb25zZV9oZWFkZXJzKTsKKworICAgIC8qIEFkZCAnQWdlJyBoZWFk
ZXIgd2l0aCB0aGUgY3VycmVudCBhZ2UgKi8KKyAgICBjdXJyZW50QWdlID0gZ19zdHJkdXBfcHJp
bnRmKCIlZCIsIHdlYmtpdF9zb3VwX2NhY2hlX2NvcmVfZW50cnlfZ2V0X2N1cnJlbnRfYWdlKGVu
dHJ5KSk7CisgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfcmVwbGFjZShtc2ctPnJlc3BvbnNlX2hl
YWRlcnMsICJBZ2UiLCBjdXJyZW50QWdlKTsKKyAgICBnX2ZyZWUoY3VycmVudEFnZSk7CisKKyAg
ICAvKiBUT0RPOiB0aGUgb3JpZ2luYWwgaWRlYSB3YXMgdG8gc2F2ZSByZWFkcywgYnV0IGN1cnJl
bnQgY29kZQorICAgICAgIGFzc3VtZXMgdGhhdCBhIHN0cmVhbSBpcyBhbHdheXMgcmV0dXJuZWQu
IE5lZWQgdG8gcmVhY2gKKyAgICAgICBzb21lIGFncmVlbWVudCBoZXJlLiBBbHNvIHdlIGhhdmUg
dG8gaGFuZGxlIHRoZSBzaXR1YXRpb24KKyAgICAgICB3ZXJlIHRoZSBmaWxlIHdhcyBubyBsb25n
ZXIgdGhlcmUgKGZvciBleGFtcGxlIGZpbGVzCisgICAgICAgcmVtb3ZlZCB3aXRob3V0IG5vdGlm
eWluZyB0aGUgY2FjaGUgKi8KKyAgICBmaWxlID0gZ19maWxlX25ld19mb3JfcGF0aChlbnRyeS0+
ZmlsZW5hbWUpOworICAgIHN0cmVhbSA9IChHSW5wdXRTdHJlYW0qKSBnX2ZpbGVfcmVhZChmaWxl
LCAwLCAwKTsKKworICAgIHJldHVybiBzdHJlYW07Cit9CisKK3N0YXRpYyB2b2lkIHJlcXVlc3RT
dGFydGVkKFNvdXBTZXNzaW9uRmVhdHVyZSogZmVhdHVyZSwgU291cFNlc3Npb24qIHNlc3Npb24s
IFNvdXBNZXNzYWdlKiBtc2csIFNvdXBTb2NrZXQqIHNvY2tldCkKK3sKKyAgICBSZXF1ZXN0SGVs
cGVyKiBoZWxwZXIgPSBnX3NsaWNlX25ldzAoUmVxdWVzdEhlbHBlcik7CisKKyAgICBoZWxwZXIt
PnJlcXVlc3RUaW1lID0gdGltZSgwKTsKKyAgICBoZWxwZXItPmZlYXR1cmUgPSBmZWF0dXJlOwor
ICAgIGhlbHBlci0+Z290SGVhZGVyc0hhbmRsZXIgPSBnX3NpZ25hbF9jb25uZWN0KG1zZywgImdv
dC1oZWFkZXJzIiwgR19DQUxMQkFDSyhtc2dHb3RIZWFkZXJzQ2IpLCBoZWxwZXIpOworfQorCitz
dGF0aWMgdm9pZCBhdHRhY2goU291cFNlc3Npb25GZWF0dXJlKiBmZWF0dXJlLCBTb3VwU2Vzc2lv
biogc2Vzc2lvbikKK3sKKyAgICBXZWJLaXRTb3VwQ2FjaGVDb3JlKiBjYWNoZSA9IChXZWJLaXRT
b3VwQ2FjaGVDb3JlKikgZmVhdHVyZTsKKworICAgIGNhY2hlLT5wcml2LT5zZXNzaW9uID0gc2Vz
c2lvbjsKKworICAgIHdlYmtpdF9zb3VwX2NhY2hlX2NvcmVfZGVmYXVsdF9mZWF0dXJlX2ludGVy
ZmFjZS0+YXR0YWNoKGZlYXR1cmUsIHNlc3Npb24pOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
c291cF9jYWNoZV9jb3JlX3Nlc3Npb25fZmVhdHVyZV9pbml0KFNvdXBTZXNzaW9uRmVhdHVyZUlu
dGVyZmFjZSogZmVhdHVyZUludGVyZmFjZSwgZ3BvaW50ZXIgaW50ZXJmYWNlRGF0YSkKK3sKKyAg
ICB3ZWJraXRfc291cF9jYWNoZV9jb3JlX2RlZmF1bHRfZmVhdHVyZV9pbnRlcmZhY2UgPSBzdGF0
aWNfY2FzdCA8IFNvdXBTZXNzaW9uRmVhdHVyZUludGVyZmFjZSogPihnX3R5cGVfZGVmYXVsdF9p
bnRlcmZhY2VfcGVlayhTT1VQX1RZUEVfU0VTU0lPTl9GRUFUVVJFKSk7CisKKyAgICBmZWF0dXJl
SW50ZXJmYWNlLT5hdHRhY2ggPSBhdHRhY2g7CisgICAgZmVhdHVyZUludGVyZmFjZS0+cmVxdWVz
dF9zdGFydGVkID0gcmVxdWVzdFN0YXJ0ZWQ7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9zb3Vw
X2NhY2hlX2NvcmVfaW5pdChXZWJLaXRTb3VwQ2FjaGVDb3JlKiBjYWNoZSkKK3sKKyAgICBXZWJL
aXRTb3VwQ2FjaGVDb3JlUHJpdmF0ZSogcHJpdjsKKworICAgIHByaXYgPSBjYWNoZS0+cHJpdiA9
IFdFQktJVF9TT1VQX0NBQ0hFX0NPUkVfR0VUX1BSSVZBVEUoY2FjaGUpOworCisgICAgcHJpdi0+
Y2FjaGUgPSBnX2hhc2hfdGFibGVfbmV3X2Z1bGwoZ19zdHJfaGFzaCwgZ19zdHJfZXF1YWwsIChH
RGVzdHJveU5vdGlmeSkgZ19mcmVlLCAoR0Rlc3Ryb3lOb3RpZnkpIHdlYmtpdF9zb3VwX2NhY2hl
X2NvcmVfZW50cnlfZnJlZSk7CisKKyAgICAvKiBMUlUgKi8KKyAgICBwcml2LT5scnVTdGFydCA9
IDA7CisgICAgcHJpdi0+bHJ1RW5kID0gMDsKKworICAgIC8qICovCisgICAgcHJpdi0+blBlbmRp
bmcgPSAwOworCisgICAgLyogQ2FjaGUgc2l6ZSAqLworICAgIHByaXYtPm1heFNpemUgPSBERUZB
VUxUX01BWF9TSVpFOworICAgIHByaXYtPm1heEVudHJ5RGF0YVNpemUgPSBwcml2LT5tYXhTaXpl
IC8gTUFYX0VOVFJZX0RBVEFfUEVSQ0VOVEFHRTsKKyAgICBwcml2LT5zaXplID0gMDsKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X3NvdXBfY2FjaGVfY29yZV9maW5hbGl6ZShHT2JqZWN0KiBvYmpl
Y3QpCit7CisgICAgV2ViS2l0U291cENhY2hlQ29yZVByaXZhdGUqIHByaXY7CisKKyAgICBwcml2
ID0gV0VCS0lUX1NPVVBfQ0FDSEVfQ09SRShvYmplY3QpLT5wcml2OworCisgICAgZ19oYXNoX3Rh
YmxlX2Rlc3Ryb3kocHJpdi0+Y2FjaGUpOworICAgIGdfZnJlZShwcml2LT5jYWNoZURpcik7CisK
KyAgICBnX2xpc3RfZnJlZShwcml2LT5scnVTdGFydCk7CisgICAgcHJpdi0+bHJ1U3RhcnQgPSAw
OworICAgIHByaXYtPmxydUVuZCA9IDA7CisKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfc291
cF9jYWNoZV9jb3JlX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9zb3VwX2NhY2hlX2NvcmVfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVj
dCwgZ3VpbnQgcHJvcElkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykK
K3sKKyAgICBXZWJLaXRTb3VwQ2FjaGVDb3JlUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9TT1VQX0NB
Q0hFX0NPUkUob2JqZWN0KS0+cHJpdjsKKworICAgIHN3aXRjaCAocHJvcElkKSB7CisgICAgY2Fz
ZSBQUk9QX0NBQ0hFX0RJUjoKKyAgICAgICAgcHJpdi0+Y2FjaGVEaXIgPSBnX3ZhbHVlX2R1cF9z
dHJpbmcodmFsdWUpOworICAgICAgICAvKiBDcmVhdGUgZGlyZWN0b3J5IGlmIGl0IGRvZXMgbm90
IGV4aXN0IChGSVhNRTogc2hvdWxkIHdlPykgKi8KKyAgICAgICAgaWYgKCFnX2ZpbGVfdGVzdChw
cml2LT5jYWNoZURpciwgc3RhdGljX2Nhc3QgPCBHRmlsZVRlc3QgPiAoR19GSUxFX1RFU1RfRVhJ
U1RTIHwgR19GSUxFX1RFU1RfSVNfRElSKSkpCisgICAgICAgICAgICBnX21rZGlyX3dpdGhfcGFy
ZW50cyhwcml2LT5jYWNoZURpciwgMDcwMCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9DQUNIRV9UWVBFOiBwcml2LT5jYWNoZVR5cGUgPSBzdGF0aWNfY2FzdCA8IFdlYktpdFNvdXBD
YWNoZUNvcmVUeXBlID4gKGdfdmFsdWVfZ2V0X2VudW0odmFsdWUpKTsKKyAgICAgICAgLyogVE9E
TzogY2xlYXIgcHJpdmF0ZSBlbnRyaWVzIGFuZCBpc3N1ZSBhIHdhcm5pbmcgaWYgbW92aW5nIHRv
IHNoYXJlZD8gKi8KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDogR19PQkpFQ1RfV0FSTl9J
TlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcElkLCBwc3BlYyk7CisgICAgICAgIGJyZWFr
OworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X3NvdXBfY2FjaGVfY29yZV9nZXRfcHJv
cGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJh
bVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdFNvdXBDYWNoZUNvcmVQcml2YXRlKiBwcml2ID0g
V0VCS0lUX1NPVVBfQ0FDSEVfQ09SRShvYmplY3QpLT5wcml2OworCisgICAgc3dpdGNoIChwcm9w
SWQpIHsKKyAgICBjYXNlIFBST1BfQ0FDSEVfRElSOgorICAgICAgICBnX3ZhbHVlX3NldF9zdHJp
bmcodmFsdWUsIHByaXYtPmNhY2hlRGlyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X0NBQ0hFX1RZUEU6CisgICAgICAgIGdfdmFsdWVfc2V0X2VudW0odmFsdWUsIHByaXYtPmNhY2hl
VHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dB
Uk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJZCwgcHNwZWMpOworICAgICAgICBi
cmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX2NhY2hlX2NvcmVfY29u
c3RydWN0ZWQoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdFNvdXBDYWNoZUNvcmVQcml2
YXRlKiBwcml2OworCisgICAgcHJpdiA9IFdFQktJVF9TT1VQX0NBQ0hFX0NPUkUob2JqZWN0KS0+
cHJpdjsKKworICAgIGlmICghcHJpdi0+Y2FjaGVEaXIpIHsKKyAgICAgICAgLyogU2V0IGEgZGVm
YXVsdCBjYWNoZSBkaXIsIGRpZmZlcmVudCBmb3IgZWFjaCB1c2VyICovCisgICAgICAgIHByaXYt
PmNhY2hlRGlyID0gZ19idWlsZF9maWxlbmFtZShnX2dldF91c2VyX2NhY2hlX2RpcigpLCAiaHR0
cGNhY2hlIiwgTlVMTCk7CisgICAgICAgIGlmICghZ19maWxlX3Rlc3QocHJpdi0+Y2FjaGVEaXIs
IHN0YXRpY19jYXN0IDwgR0ZpbGVUZXN0ID4gKEdfRklMRV9URVNUX0VYSVNUUyB8IEdfRklMRV9U
RVNUX0lTX0RJUikpKQorICAgICAgICAgICAgZ19ta2Rpcl93aXRoX3BhcmVudHMocHJpdi0+Y2Fj
aGVEaXIsIDA3MDApOworICAgIH0KKworICAgIGlmIChHX09CSkVDVF9DTEFTUyh3ZWJraXRfc291
cF9jYWNoZV9jb3JlX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkKQorICAgICAgICBHX09CSkVD
VF9DTEFTUyh3ZWJraXRfc291cF9jYWNoZV9jb3JlX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVk
KG9iamVjdCk7Cit9CisKKyNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FDSEVfQ09SRV9UWVBFX1RZUEUg
KHdlYmtpdF9zb3VwX2NhY2hlX2NvcmVfdHlwZV9nZXRfdHlwZSgpKQorc3RhdGljIEdUeXBlIHdl
YmtpdF9zb3VwX2NhY2hlX2NvcmVfdHlwZV9nZXRfdHlwZSh2b2lkKQoreworICAgIHN0YXRpYyBH
VHlwZSBjYWNoZVR5cGUgPSAwOworCisgICAgc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgY2FjaGVU
eXBlc1tdID0geworICAgICAgICB7CisgICAgICAgICAgICBXRUJLSVRfU09VUF9DQUNIRV9DT1JF
X1NJTkdMRV9VU0VSLCAiU2luZ2xlIHVzZXIgY2FjaGUiLCAidXNlciIKKyAgICAgICAgfSwgewor
ICAgICAgICAgICAgV0VCS0lUX1NPVVBfQ0FDSEVfQ09SRV9TSEFSRUQsICJTaGFyZWQgY2FjaGUi
LCAic2hhcmVkIgorICAgICAgICB9LCB7CisgICAgICAgICAgICAwLCAwLCAwCisgICAgICAgIH0K
KyAgICB9OworCisgICAgaWYgKCFjYWNoZVR5cGUpCisgICAgICAgIGNhY2hlVHlwZSA9IGdfZW51
bV9yZWdpc3Rlcl9zdGF0aWMoIldlYktpdFNvdXBDYWNoZUNvcmVUeXBlIiwgY2FjaGVUeXBlcyk7
CisKKyAgICByZXR1cm4gY2FjaGVUeXBlOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfc291cF9j
YWNoZV9jb3JlX2NsYXNzX2luaXQoV2ViS2l0U291cENhY2hlQ29yZUNsYXNzKiBjYWNoZUNsYXNz
KQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gKEdPYmplY3RDbGFzcyopIGNh
Y2hlQ2xhc3M7CisKKyAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0X3NvdXBfY2Fj
aGVfY29yZV9maW5hbGl6ZTsKKyAgICBnb2JqZWN0Q2xhc3MtPmNvbnN0cnVjdGVkID0gd2Via2l0
X3NvdXBfY2FjaGVfY29yZV9jb25zdHJ1Y3RlZDsKKyAgICBnb2JqZWN0Q2xhc3MtPnNldF9wcm9w
ZXJ0eSA9IHdlYmtpdF9zb3VwX2NhY2hlX2NvcmVfc2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RD
bGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X3NvdXBfY2FjaGVfY29yZV9nZXRfcHJvcGVydHk7
CisKKyAgICBjYWNoZUNsYXNzLT5nZXRDYWNoZWFiaWxpdHkgPSBnZXRDYWNoZWFiaWxpdHk7CisK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywgUFJPUF9D
QUNIRV9ESVIsIGdfcGFyYW1fc3BlY19zdHJpbmcoImNhY2hlLWRpciIsICJDYWNoZSBkaXJlY3Rv
cnkiLCAiVGhlIGRpcmVjdG9yeSB0byBzdG9yZSB0aGUgY2FjaGUgZmlsZXMiLCAwLCBzdGF0aWNf
Y2FzdCA8IEdQYXJhbUZsYWdzID4gKEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJV
Q1RfT05MWSkpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVj
dENsYXNzLCBQUk9QX0NBQ0hFX1RZUEUsIGdfcGFyYW1fc3BlY19lbnVtKCJjYWNoZS10eXBlIiwg
IkNhY2hlIHR5cGUiLCAiV2hldGhlciB0aGUgY2FjaGUgaXMgcHJpdmF0ZSBvciBzaGFyZWQiLCBX
RUJLSVRfU09VUF9DQUNIRV9DT1JFX1RZUEVfVFlQRSwgV0VCS0lUX1NPVVBfQ0FDSEVfQ09SRV9T
SU5HTEVfVVNFUiwgc3RhdGljX2Nhc3QgPCBHUGFyYW1GbGFncyA+IChHX1BBUkFNX1JFQURXUklU
RSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKSk7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3By
aXZhdGUoY2FjaGVDbGFzcywgc2l6ZW9mKFdlYktpdFNvdXBDYWNoZUNvcmVQcml2YXRlKSk7Cit9
CisKKy8qKgorICogd2Via2l0X3NvdXBfY2FjaGVfY29yZV9uZXc6CisgKiBAY2FjaGVfZGlyOiB0
aGUgZGlyZWN0b3J5IHRvIHN0b3JlIHRoZSBjYWNoZWQgZGF0YSwgb3IgJTAgdG8gdXNlIHRoZSBk
ZWZhdWx0IG9uZQorICogQGNhY2hlX3R5cGU6IHRoZSAjV2ViS2l0U291cENhY2hlQ29yZVR5cGUg
b2YgdGhlIGNhY2hlCisgKgorICogQ3JlYXRlcyBhIG5ldyAjV2ViS2l0U291cENhY2hlQ29yZS4K
KyAqCisgKiBSZXR1cm5zOiBhIG5ldyAjV2ViS2l0U291cENhY2hlQ29yZQorICoKKyAqIFNpbmNl
OiAyLjI4CisgKiovCitXZWJLaXRTb3VwQ2FjaGVDb3JlKiB3ZWJraXRTb3VwQ2FjaGVDb3JlTmV3
KGNvbnN0IGNoYXIqIGNhY2hlX2RpciwgV2ViS2l0U291cENhY2hlQ29yZVR5cGUgY2FjaGVfdHlw
ZSkKK3sKKyAgICByZXR1cm4gKFdlYktpdFNvdXBDYWNoZUNvcmUqKQorICAgICAgICAgICBnX29i
amVjdF9uZXcoV0VCS0lUX1RZUEVfU09VUF9DQUNIRV9DT1JFLCAiY2FjaGUtZGlyIiwgY2FjaGVf
ZGlyLCAiY2FjaGUtdHlwZSIsIGNhY2hlX3R5cGUsIDApOworfQorCisvKioKKyAqIHdlYmtpdF9z
b3VwX2NhY2hlX2NvcmVfaGFzX3Jlc3BvbnNlOgorICogQGNhY2hlOiBhICNXZWJLaXRTb3VwQ2Fj
aGVDb3JlCisgKiBAbXNnOiBhICNTb3VwTWVzc2FnZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2Fs
Y3VsYXRlcyB3aGV0aGVyIHRoZSBAY2FjaGUgb2JqZWN0IGhhcyBhIHByb3BlcgorICogcmVzcG9u
c2UgZm9yIHRoZSByZXF1ZXN0IEBtc2cgZ2l2ZW4gdGhlIGZsYWdzIGJvdGggaW4gdGhlIHJlcXVl
c3QKKyAqIGFuZCB0aGUgY2FjaGVkIHJlcGx5IGFuZCB0aGUgdGltZSBlbGxhcHNlZCBzaW5jZSBp
dCB3YXMgY2FjaGVkLgorICoKKyAqIFJldHVybnM6IHdoZXRoZXIgb3Igbm90IHRoZSBAY2FjaGUg
aGFzIGEgdmFsaWQgcmVzcG9uc2UgZm9yIEBtc2cKKyAqKi8KK1dlYktpdFNvdXBDYWNoZUNvcmVS
ZXNwb25zZSB3ZWJraXRTb3VwQ2FjaGVDb3JlSGFzUmVzcG9uc2UoV2ViS2l0U291cENhY2hlQ29y
ZSogY2FjaGUsIFNvdXBNZXNzYWdlKiBtc2cpCit7CisgICAgY2hhcioga2V5OworICAgIFdlYktp
dFNvdXBDYWNoZUNvcmVFbnRyeSogZW50cnk7CisgICAgY29uc3QgY2hhciogY2FjaGVDb250cm9s
OworICAgIEdIYXNoVGFibGUqIGhhc2g7CisgICAgZ3BvaW50ZXIgdmFsdWU7CisgICAgZ2Jvb2xl
YW4gbXVzdFJldmFsaWRhdGU7CisgICAgaW50IG1heEFnZSwgbWF4U3RhbGUsIG1pbkZyZXNoOwor
CisgICAga2V5ID0gc291cE1lc3NhZ2VHZXRDYWNoZUtleShtc2cpOworICAgIGVudHJ5ID0gc3Rh
dGljX2Nhc3QgPCBXZWJLaXRTb3VwQ2FjaGVDb3JlRW50cnkqID4oZ19oYXNoX3RhYmxlX2xvb2t1
cChjYWNoZS0+cHJpdi0+Y2FjaGUsIGtleSkpOworCisgICAgLyogMS4gVGhlIHByZXNlbnRlZCBS
ZXF1ZXN0LVVSSSBhbmQgdGhhdCBvZiBzdG9yZWQgcmVzcG9uc2UKKyAgICAgKiBtYXRjaAorICAg
ICAqLworICAgIGlmICghZW50cnkpCisgICAgICAgIHJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9D
T1JFX1JFU1BPTlNFX1NUQUxFOworCisgICAgLyogSW5jcmVhc2UgaGl0IGNvdW50ICovCisgICAg
ZW50cnktPmhpdHMrKzsKKworICAgIGlmIChlbnRyeS0+ZGlydHkgfHwgZW50cnktPmJlaW5nVmFs
aWRhdGVkKQorICAgICAgICByZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfQ09SRV9SRVNQT05TRV9T
VEFMRTsKKworICAgIC8qIDIuIFRoZSByZXF1ZXN0IG1ldGhvZCBhc3NvY2lhdGVkIHdpdGggdGhl
IHN0b3JlZCByZXNwb25zZQorICAgICAqICBhbGxvd3MgaXQgdG8gYmUgdXNlZCBmb3IgdGhlIHBy
ZXNlbnRlZCByZXF1ZXN0CisgICAgICovCisKKyAgICAvKiBJbiBwcmFjdGljZSB0aGlzIG1lYW5z
IHdlIG9ubHkgcmV0dXJuIG91ciByZXNvdXJjZSBmb3IgR0VULAorICAgICAqIGNhY2hlYWJpbGl0
eSBmb3Igb3RoZXIgbWV0aG9kcyBpcyBhIFRPRE8gaW4gdGhlIFJGQworICAgICAqIChUT0RPOiBh
bHRob3VnaCB3ZSBjb3VsZCByZXR1cm4gdGhlIGhlYWRlcnMgZm9yIEhFQUQKKyAgICAgKiBwcm9i
YWJseSkuCisgICAgICovCisgICAgaWYgKG1zZy0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkK
KyAgICAgICAgcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX0NPUkVfUkVTUE9OU0VfU1RBTEU7CisK
KyAgICAvKiAzLiBTZWxlY3RpbmcgcmVxdWVzdC1oZWFkZXJzIG5vbWluYXRlZCBieSB0aGUgc3Rv
cmVkCisgICAgICogcmVzcG9uc2UgKGlmIGFueSkgbWF0Y2ggdGhvc2UgcHJlc2VudGVkLgorICAg
ICAqLworCisgICAgLyogVE9ETyAqLworCisgICAgLyogNC4gVGhlIHByZXNlbnRlZCByZXF1ZXN0
IGFuZCBzdG9yZWQgcmVzcG9uc2UgYXJlIGZyZWUgZnJvbQorICAgICAqIGRpcmVjdGl2ZXMgdGhh
dCB3b3VsZCBwcmV2ZW50IGl0cyB1c2UuCisgICAgICovCisKKyAgICBtdXN0UmV2YWxpZGF0ZSA9
IEZBTFNFOworICAgIG1heEFnZSA9IG1heFN0YWxlID0gbWluRnJlc2ggPSAtMTsKKworICAgIGNh
Y2hlQ29udHJvbCA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldChtc2ctPnJlcXVlc3RfaGVhZGVy
cywgIkNhY2hlLUNvbnRyb2wiKTsKKyAgICBpZiAoY2FjaGVDb250cm9sKSB7CisgICAgICAgIGhh
c2ggPSBzb3VwX2hlYWRlcl9wYXJzZV9wYXJhbV9saXN0KGNhY2hlQ29udHJvbCk7CisKKyAgICAg
ICAgaWYgKGdfaGFzaF90YWJsZV9sb29rdXBfZXh0ZW5kZWQoaGFzaCwgIm5vLXN0b3JlIiwgMCwg
MCkpIHsKKyAgICAgICAgICAgIGdfaGFzaF90YWJsZV9kZXN0cm95KGhhc2gpOworICAgICAgICAg
ICAgcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX0NPUkVfUkVTUE9OU0VfU1RBTEU7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoZ19oYXNoX3RhYmxlX2xvb2t1cF9leHRlbmRlZChoYXNoLCAibm8t
Y2FjaGUiLCAwLCAwKSkKKyAgICAgICAgICAgIGVudHJ5LT5tdXN0UmV2YWxpZGF0ZSA9IFRSVUU7
CisKKyAgICAgICAgaWYgKGdfaGFzaF90YWJsZV9sb29rdXBfZXh0ZW5kZWQoaGFzaCwgIm1heC1h
Z2UiLCAwLCAmdmFsdWUpKQorICAgICAgICAgICAgbWF4QWdlID0gKGludClzdGQ6Om1pbjxndWlu
dD4oZ19hc2NpaV9zdHJ0b2xsKHN0YXRpY19jYXN0IDwgY29uc3QgZ2NoYXIqID4odmFsdWUpLCAw
LCAxMCksIEdfTUFYSU5UMzIpOworCisgICAgICAgIC8qIG1heC1zdGFsZSBjYW4gaGF2ZSBubyB2
YWx1ZSBzZXQsIHdlIG5lZWQgdG8gdXNlIF9leHRlbmRlZCAqLworICAgICAgICBpZiAoZ19oYXNo
X3RhYmxlX2xvb2t1cF9leHRlbmRlZChoYXNoLCAibWF4LXN0YWxlIiwgMCwgJnZhbHVlKSkgewor
ICAgICAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgICAgIG1heFN0YWxlID0gKGludClz
dGQ6Om1pbjxndWludD4oZ19hc2NpaV9zdHJ0b2xsKHN0YXRpY19jYXN0IDwgY29uc3QgZ2NoYXIq
ID4odmFsdWUpLCAwLCAxMCksIEdfTUFYSU5UMzIpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIG1heFN0YWxlID0gR19NQVhJTlQzMjsKKyAgICAgICAgfQorCisgICAgICAgIHZh
bHVlID0gZ19oYXNoX3RhYmxlX2xvb2t1cChoYXNoLCAibWluLWZyZXNoIik7CisgICAgICAgIGlm
ICh2YWx1ZSkKKyAgICAgICAgICAgIG1pbkZyZXNoID0gKGludClzdGQ6Om1pbjxndWludD4oZ19h
c2NpaV9zdHJ0b2xsKHN0YXRpY19jYXN0IDwgY29uc3QgZ2NoYXIqID4odmFsdWUpLCAwLCAxMCks
IEdfTUFYSU5UMzIpOworCisgICAgICAgIGdfaGFzaF90YWJsZV9kZXN0cm95KGhhc2gpOworCisg
ICAgICAgIGlmIChtYXhBZ2UgIT0gLTEpIHsKKyAgICAgICAgICAgIGd1aW50IGN1cnJlbnRBZ2Ug
PSB3ZWJraXRfc291cF9jYWNoZV9jb3JlX2VudHJ5X2dldF9jdXJyZW50X2FnZShlbnRyeSk7CisK
KyAgICAgICAgICAgIC8qIElmIHdlIGFyZSBvdmVyIG1heC1hZ2UgYW5kIG1heC1zdGFsZSBpcyBu
b3QKKyAgICAgICAgICAgICAgIHNldCwgZG8gbm90IHVzZSB0aGUgdmFsdWUgZnJvbSB0aGUgY2Fj
aGUKKyAgICAgICAgICAgICAgIHdpdGhvdXQgdmFsaWRhdGlvbiAqLworICAgICAgICAgICAgaWYg
KChndWludCkgbWF4QWdlIDw9IGN1cnJlbnRBZ2UgJiYgbWF4U3RhbGUgPT0gLTEpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX0NPUkVfUkVTUE9OU0VfTkVFRFNfVkFM
SURBVElPTjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIDUuIFRoZSBzdG9yZWQgcmVzcG9u
c2UgaXMgZWl0aGVyOiBmcmVzaCwgYWxsb3dlZCB0byBiZQorICAgICAqIHNlcnZlZCBzdGFsZSBv
ciBzdWNjZXNmdWxseSB2YWxpZGF0ZWQKKyAgICAgKi8KKyAgICAvKiBUT0RPIGNvbnNpZGVyIGFs
c28gcHJveHktcmV2YWxpZGF0ZSAmIHMtbWF4YWdlICovCisgICAgaWYgKGVudHJ5LT5tdXN0UmV2
YWxpZGF0ZSkKKyAgICAgICAgcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX0NPUkVfUkVTUE9OU0Vf
TkVFRFNfVkFMSURBVElPTjsKKworICAgIGlmICghd2Via2l0X3NvdXBfY2FjaGVfY29yZV9lbnRy
eV9pc19mcmVzaF9lbm91Z2goZW50cnksIG1pbkZyZXNoKSkgeworICAgICAgICAvKiBOb3QgZnJl
c2gsIGNhbiBpdCBiZSBzZXJ2ZWQgc3RhbGU/ICovCisgICAgICAgIGlmIChtYXhTdGFsZSAhPSAt
MSkgeworICAgICAgICAgICAgLyogR19NQVhJTlQzMiBtZWFucyB3ZSBhY2NlcHQgYW55IHN0YWxl
bmVzcyAqLworICAgICAgICAgICAgaWYgKG1heFN0YWxlID09IEdfTUFYSU5UMzIpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX0NPUkVfUkVTUE9OU0VfRlJFU0g7CisK
KyAgICAgICAgICAgIGlmICgod2Via2l0X3NvdXBfY2FjaGVfY29yZV9lbnRyeV9nZXRfY3VycmVu
dF9hZ2UoZW50cnkpIC0gZW50cnktPmZyZXNobmVzc0xpZmV0aW1lKSA8PSAoZ3VpbnQpIG1heFN0
YWxlKQorICAgICAgICAgICAgICAgIHJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9DT1JFX1JFU1BP
TlNFX0ZSRVNIOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hF
X0NPUkVfUkVTUE9OU0VfTkVFRFNfVkFMSURBVElPTjsKKyAgICB9CisKKyAgICByZXR1cm4gV0VC
S0lUX1NPVVBfQ0FDSEVfQ09SRV9SRVNQT05TRV9GUkVTSDsKK30KKworLyoqCisgKiB3ZWJraXRf
c291cF9jYWNoZV9jb3JlX2dldF9jYWNoZWFiaWxpdHk6CisgKiBAY2FjaGU6IGEgI1dlYktpdFNv
dXBDYWNoZUNvcmUKKyAqIEBtc2c6IGEgI1NvdXBNZXNzYWdlCisgKgorICogQ2FsY3VsYXRlcyB3
aGV0aGVyIHRoZSBAbXNnIGNhbiBiZSBjYWNoZWQgb3Igbm90LgorICoKKyAqIFJldHVybnM6IGEg
I1dlYktpdFNvdXBDYWNoZUNvcmVhYmlsaXR5IHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0aGUg
QG1zZyBjYW4gYmUgY2FjaGVkIG9yIG5vdC4KKyAqKi8KK1dlYktpdFNvdXBDYWNoZUNvcmVhYmls
aXR5IHdlYmtpdFNvdXBDYWNoZUNvcmVHZXRDYWNoZWFiaWxpdHkoV2ViS2l0U291cENhY2hlQ29y
ZSogY2FjaGUsIFNvdXBNZXNzYWdlKiBtc2cpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX1NPVVBfSVNfQ0FDSEVfQ09SRShjYWNoZSksIFdFQktJVF9TT1VQX0NBQ0hFX0NPUkVf
VU5DQUNIRUFCTEUpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFNPVVBfSVNfTUVTU0FHRSht
c2cpLCBXRUJLSVRfU09VUF9DQUNIRV9DT1JFX1VOQ0FDSEVBQkxFKTsKKworICAgIHJldHVybiBX
RUJLSVRfU09VUF9DQUNIRV9DT1JFX0dFVF9DTEFTUyhjYWNoZSktPmdldENhY2hlYWJpbGl0eShj
YWNoZSwgbXNnKTsKK30KKworLyoqCisgKiB3ZWJraXRfc291cF9jYWNoZV9jb3JlX2ZsdXNoOgor
ICogQGNhY2hlOiBhICNXZWJLaXRTb3VwQ2FjaGVDb3JlCisgKiBAc2Vzc2lvbjogdGhlICNTb3Vw
U2Vzc2lvbiBhc3NvY2lhdGVkIHdpdGggdGhlIEBjYWNoZQorICoKKyAqIFRoaXMgZnVuY3Rpb24g
d2lsbCBmb3JjZSBhbGwgcGVuZGluZyB3cml0ZXMgaW4gdGhlIEBjYWNoZSB0byBiZQorICogY29t
bWl0dGVkIHRvIGRpc2suIEZvciBkb2luZyBzbyBpdCB3aWxsIGl0ZXJhdGUgdGhlICNHTWFpbkNv
bnRleHQKKyAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgQHNlc3Npb24gKHdoaWNoIGNhbiBiZSB0aGUg
ZGVmYXVsdCBvbmUpIGFzIGxvbmcKKyAqIGFzIG5lZWRlZC4KKyAqKi8KK3ZvaWQgd2Via2l0U291
cENhY2hlQ29yZUZsdXNoKFdlYktpdFNvdXBDYWNoZUNvcmUqIGNhY2hlKQoreworICAgIEdNYWlu
Q29udGV4dCogYXN5bmNDb250ZXh0OworICAgIFNvdXBTZXNzaW9uKiBzZXNzaW9uOworCisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfU09VUF9JU19DQUNIRV9DT1JFKGNhY2hlKSk7CisKKyAg
ICBzZXNzaW9uID0gY2FjaGUtPnByaXYtPnNlc3Npb247CisgICAgZ19yZXR1cm5faWZfZmFpbChT
T1VQX0lTX1NFU1NJT04oc2Vzc2lvbikpOworICAgIGFzeW5jQ29udGV4dCA9IHNvdXBfc2Vzc2lv
bl9nZXRfYXN5bmNfY29udGV4dChzZXNzaW9uKTsKKworICAgIHdoaWxlIChjYWNoZS0+cHJpdi0+
blBlbmRpbmcgPiAwKQorICAgICAgICBnX21haW5fY29udGV4dF9pdGVyYXRpb24oYXN5bmNDb250
ZXh0LCBUUlVFKTsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlQ2FjaGVJdGVtKGdwb2ludGVyIGtl
eSwgZ3BvaW50ZXIgdmFsdWUsIFdlYktpdFNvdXBDYWNoZUNvcmUqIGNhY2hlKQoreworICAgIFdl
YktpdFNvdXBDYWNoZUNvcmVFbnRyeSogZW50cnkgPSBzdGF0aWNfY2FzdCA8IFdlYktpdFNvdXBD
YWNoZUNvcmVFbnRyeSogPihnX2hhc2hfdGFibGVfbG9va3VwKGNhY2hlLT5wcml2LT5jYWNoZSwg
KGNvbnN0IGdjaGFyKilrZXkpKTsKKworICAgIHdlYmtpdF9zb3VwX2NhY2hlX2NvcmVfZW50cnlf
ZGVsZXRlKGNhY2hlLCBlbnRyeSk7Cit9CisKKy8qKgorICogd2Via2l0X3NvdXBfY2FjaGVfY29y
ZV9jbGVhcjoKKyAqIEBjYWNoZTogYSAjV2ViS2l0U291cENhY2hlQ29yZQorICoKKyAqIFdpbGwg
cmVtb3ZlIGFsbCBlbnRyaWVzIGluIHRoZSBAY2FjaGUgcGx1cyBhbGwgdGhlIGNhY2hlIGZpbGVz
CisgKiBhc3NvY2lhdGVkIHdpdGggdGhlbS4KKyAqKi8KK3ZvaWQgd2Via2l0U291cENhY2hlQ29y
ZUNsZWFyKFdlYktpdFNvdXBDYWNoZUNvcmUqIGNhY2hlKQoreworICAgIEdIYXNoVGFibGUqIGhh
c2g7CisKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9TT1VQX0lTX0NBQ0hFX0NPUkUoY2Fj
aGUpKTsKKworICAgIGhhc2ggPSBjYWNoZS0+cHJpdi0+Y2FjaGU7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChoYXNoKTsKKworICAgIGdfaGFzaF90YWJsZV9mb3JlYWNoKGhhc2gsIChHSEZ1bmMpcmVt
b3ZlQ2FjaGVJdGVtLCBjYWNoZSk7Cit9CisKK1NvdXBNZXNzYWdlKiB3ZWJraXRTb3VwQ2FjaGVD
b3JlR2VuZXJhdGVDb25kaXRpb25hbFJlcXVlc3QoV2ViS2l0U291cENhY2hlQ29yZSogY2FjaGUs
IFNvdXBNZXNzYWdlKiBvcmlnaW5hbCkKK3sKKyAgICBTb3VwTWVzc2FnZSogbXNnOworICAgIFNv
dXBVUkkqIHVyaTsKKyAgICBXZWJLaXRTb3VwQ2FjaGVDb3JlRW50cnkqIGVudHJ5OworICAgIGNo
YXIqIGtleTsKKyAgICBjb25zdCBjaGFyKiB2YWx1ZTsKKworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9TT1VQX0lTX0NBQ0hFX0NPUkUoY2FjaGUpLCAwKTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChTT1VQX0lTX01FU1NBR0Uob3JpZ2luYWwpLCAwKTsKKworICAgIC8qIEZpcnN0
IGNvcHkgdGhlIGRhdGEgd2UgbmVlZCBmcm9tIHRoZSBvcmlnaW5hbCBtZXNzYWdlICovCisgICAg
dXJpID0gc291cF9tZXNzYWdlX2dldF91cmkob3JpZ2luYWwpOworICAgIG1zZyA9IHNvdXBfbWVz
c2FnZV9uZXdfZnJvbV91cmkob3JpZ2luYWwtPm1ldGhvZCwgdXJpKTsKKworICAgIHNvdXBfbWVz
c2FnZV9oZWFkZXJzX2ZvcmVhY2gob3JpZ2luYWwtPnJlcXVlc3RfaGVhZGVycywgKFNvdXBNZXNz
YWdlSGVhZGVyc0ZvcmVhY2hGdW5jKSBjb3B5SGVhZGVycywgbXNnLT5yZXF1ZXN0X2hlYWRlcnMp
OworCisgICAgLyogTm93IGFkZCB0aGUgdmFsaWRhdG9yIGVudHJpZXMgaW4gdGhlIGhlYWRlciBm
cm9tIHRoZSBjYWNoZWQKKyAgICAgICBkYXRhICovCisgICAga2V5ID0gc291cE1lc3NhZ2VHZXRD
YWNoZUtleShvcmlnaW5hbCk7CisgICAgZW50cnkgPSBzdGF0aWNfY2FzdCA8IFdlYktpdFNvdXBD
YWNoZUNvcmVFbnRyeSogPihnX2hhc2hfdGFibGVfbG9va3VwKGNhY2hlLT5wcml2LT5jYWNoZSwg
a2V5KSk7CisgICAgZ19mcmVlKGtleSk7CisKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChlbnRy
eSwgMCk7CisKKyAgICBlbnRyeS0+YmVpbmdWYWxpZGF0ZWQgPSBUUlVFOworCisgICAgdmFsdWUg
PSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQoZW50cnktPmhlYWRlcnMsICJMYXN0LU1vZGlmaWVk
Iik7CisgICAgaWYgKHZhbHVlKQorICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQo
bXNnLT5yZXF1ZXN0X2hlYWRlcnMsICJJZi1Nb2RpZmllZC1TaW5jZSIsIHZhbHVlKTsKKyAgICB2
YWx1ZSA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldChlbnRyeS0+aGVhZGVycywgIkVUYWciKTsK
KyAgICBpZiAodmFsdWUpCisgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtc2ct
PnJlcXVlc3RfaGVhZGVycywgIklmLU5vbmUtTWF0Y2giLCB2YWx1ZSk7CisgICAgcmV0dXJuIG1z
ZzsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGNvbnN0IGNoYXIqIGtleTsKKyAgICBjb25z
dCBjaGFyKiB2YWx1ZTsKK30gU3RyaW5nUGFpcjsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGdv
ZmZzZXQgY29udGVudExlbmd0aDsKKyAgICBjaGFyIG51bUhlYWRlcnM7IC8vIGludGVnZXIsIGV4
cGVjdGVkIGxvdyBudW1iZXIKKyAgICBjaGFyIHR5cGU7IC8vIGVudW0gdHlwZQorICAgIGNoYXIg
ZW5jb2Rpbmc7IC8vIGVudW0gdHlwZQorICAgIGNoYXIgZXhwZWN0YXRpb25zOyAvLyBlbnVtIHR5
cGUKKyAgICBjb25zdCBjaGFyKiBjb250ZW50VHlwZTsKK30gU291cE1lc3NhZ2VQZXJzaXN0ZW50
SGVhZGVyczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBDYWNoZUNvcmVQZXJzaXN0ZW50
RW50cnkgeworICAgIGNvbnN0IGNoYXIqIGtleTsKKyAgICBjb25zdCBjaGFyKiBmaWxlbmFtZTsK
KyAgICBnYm9vbGVhbiBtdXN0UmV2YWxpZGF0ZTsKKyAgICBndWludDMyIGZyZXNobmVzc0xpZmV0
aW1lOworICAgIHRpbWVfdCBjb3JyZWN0ZWRJbml0aWFsQWdlOworICAgIHRpbWVfdCByZXNwb25z
ZVRpbWU7CisgICAgZ3VpbnQzMiBoaXRzOworICAgIGd1aW50MzIgbGVuZ3RoOworICAgIFNvdXBN
ZXNzYWdlUGVyc2lzdGVudEhlYWRlcnMgcGhlYWRlcnM7Cit9IFdlYktpdFNvdXBDYWNoZUNvcmVQ
ZXJzaXN0ZW50RW50cnk7CisKKyNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FDSEVfQ09SRV9UUExfRk9S
TUFUICJTKHNzY3V1dXV1JChVY2NjY3MpKSNTKHNzKSMiCisjZGVmaW5lIFdFQktJVF9TT1VQX0NB
Q0hFX0NPUkVfVFBMX0ZJTEUgInNvdXAtY2FjaGUudHBsIgorCit0eXBlZGVmIHN0cnVjdCB7Cisg
ICAgR0FycmF5KiBlbnRyeUFycmF5OworICAgIEdBcnJheSogaGVhZGVyc0FycmF5OworfSBDYWNo
ZUhlbHBlcjsKKworc3RhdGljIHZvaWQgcGFja0VudHJ5KGdwb2ludGVyIGtleSwgZ3BvaW50ZXIg
dmFsdWUsIGdwb2ludGVyIGRhdGEpCit7CisgICAgV2ViS2l0U291cENhY2hlQ29yZVBlcnNpc3Rl
bnRFbnRyeSBwZW50cnk7CisgICAgU3RyaW5nUGFpciBwYWlyOworICAgIFdlYktpdFNvdXBDYWNo
ZUNvcmVFbnRyeSogZW50cnkgPSAoV2ViS2l0U291cENhY2hlQ29yZUVudHJ5KikgdmFsdWU7Cisg
ICAgQ2FjaGVIZWxwZXIqIGhlbHBlciA9IChDYWNoZUhlbHBlciopIGRhdGE7CisgICAgU291cE1l
c3NhZ2VIZWFkZXJzSXRlciBpdGVyOworICAgIGd1aW50IG51bSA9IDA7CisKKyAgICAvKiBEbyBu
b3Qgc3RvcmUgbm9uLWNvbnNvbGlkYXRlZCBlbnRyaWVzICovCisgICAgaWYgKGVudHJ5LT5kaXJ0
eSB8fCBlbnRyeS0+d3JpdGluZyB8fCAhZW50cnktPmtleSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLyogUGFjayBoZWFkZXJzICovCisgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfaXRlcl9pbml0
KCZpdGVyLCBlbnRyeS0+aGVhZGVycyk7CisgICAgd2hpbGUgKHNvdXBfbWVzc2FnZV9oZWFkZXJz
X2l0ZXJfbmV4dCgmaXRlciwgJihwYWlyLmtleSksICYocGFpci52YWx1ZSkpKSB7CisgICAgICAg
IGdfYXJyYXlfYXBwZW5kX3ZhbChoZWxwZXItPmhlYWRlcnNBcnJheSwgcGFpcik7CisgICAgICAg
IG51bSsrOworICAgIH0KKworICAgIC8qIEVudHJ5IGRhdGEgKi8KKyAgICBwZW50cnkua2V5ID0g
ZW50cnktPmtleTsKKyAgICBwZW50cnkuZmlsZW5hbWUgPSBlbnRyeS0+ZmlsZW5hbWU7CisgICAg
cGVudHJ5Lm11c3RSZXZhbGlkYXRlID0gZW50cnktPm11c3RSZXZhbGlkYXRlOworICAgIHBlbnRy
eS5mcmVzaG5lc3NMaWZldGltZSA9IGVudHJ5LT5mcmVzaG5lc3NMaWZldGltZTsKKyAgICBwZW50
cnkuY29ycmVjdGVkSW5pdGlhbEFnZSA9IGVudHJ5LT5jb3JyZWN0ZWRJbml0aWFsQWdlOworICAg
IHBlbnRyeS5yZXNwb25zZVRpbWUgPSBlbnRyeS0+cmVzcG9uc2VUaW1lOworICAgIHBlbnRyeS5o
aXRzID0gZW50cnktPmhpdHM7CisgICAgcGVudHJ5Lmxlbmd0aCA9IGVudHJ5LT5sZW5ndGg7CisK
KyAgICAvKiBIZWFkZXJzIGRhdGEgKi8KKyAgICBwZW50cnkucGhlYWRlcnMuY29udGVudExlbmd0
aCA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9jb250ZW50X2xlbmd0aChlbnRyeS0+aGVhZGVy
cyk7CisgICAgcGVudHJ5LnBoZWFkZXJzLnR5cGUgPSBTT1VQX01FU1NBR0VfSEVBREVSU19SRVNQ
T05TRTsKKyAgICBwZW50cnkucGhlYWRlcnMuZW5jb2RpbmcgPSAoY2hhcilzb3VwX21lc3NhZ2Vf
aGVhZGVyc19nZXRfZW5jb2RpbmcoZW50cnktPmhlYWRlcnMpOworICAgIHBlbnRyeS5waGVhZGVy
cy5leHBlY3RhdGlvbnMgPSAoY2hhcilzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfZXhwZWN0YXRp
b25zKGVudHJ5LT5oZWFkZXJzKTsKKyAgICBwZW50cnkucGhlYWRlcnMuY29udGVudFR5cGUgPSAo
Y2hhciopc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2NvbnRlbnRfdHlwZShlbnRyeS0+aGVhZGVy
cywgMCk7CisgICAgcGVudHJ5LnBoZWFkZXJzLm51bUhlYWRlcnMgPSAoY2hhciludW07CisKKyAg
ICBnX2FycmF5X2FwcGVuZF92YWwoaGVscGVyLT5lbnRyeUFycmF5LCBwZW50cnkpOworfQorCit2
b2lkIHdlYmtpdFNvdXBDYWNoZUNvcmVEdW1wKFdlYktpdFNvdXBDYWNoZUNvcmUqIGNhY2hlKQor
eworICAgIHRwbF9ub2RlKiB0bjsKKyAgICBndWludCBzaXplOworICAgIENhY2hlSGVscGVyKiBo
ZWxwZXIgPSBnX3NsaWNlX25ldzAoQ2FjaGVIZWxwZXIpOworICAgIFdlYktpdFNvdXBDYWNoZUNv
cmVQcml2YXRlKiBwcml2ID0gV0VCS0lUX1NPVVBfQ0FDSEVfQ09SRV9HRVRfUFJJVkFURShjYWNo
ZSk7CisgICAgZ2NoYXIqIGZpbGVuYW1lOworCisgICAgLyogQ3JlYXRlIHRlbXBvcmFsIGRhdGEg
dG8gZHVtcCBjYWNoZSBjb250ZW50cyAqLworICAgIHNpemUgPSBnX2hhc2hfdGFibGVfc2l6ZShj
YWNoZS0+cHJpdi0+Y2FjaGUpOworICAgIGhlbHBlci0+ZW50cnlBcnJheSA9IGdfYXJyYXlfc2l6
ZWRfbmV3KEZBTFNFLCBGQUxTRSwgc2l6ZW9mKFdlYktpdFNvdXBDYWNoZUNvcmVQZXJzaXN0ZW50
RW50cnkpLCBzaXplKTsKKyAgICBoZWxwZXItPmhlYWRlcnNBcnJheSA9IGdfYXJyYXlfc2l6ZWRf
bmV3KEZBTFNFLCBGQUxTRSwgc2l6ZW9mKFN0cmluZ1BhaXIpLCBzaXplKTsKKyAgICBnX2hhc2hf
dGFibGVfZm9yZWFjaChjYWNoZS0+cHJpdi0+Y2FjaGUsIChHSEZ1bmMpIHBhY2tFbnRyeSwgaGVs
cGVyKTsKKworICAgIC8qIE1hcCwgcGFjayAmIGR1bXAgKi8KKyAgICB0biA9IHRwbF9tYXAoKGNo
YXIqKVdFQktJVF9TT1VQX0NBQ0hFX0NPUkVfVFBMX0ZPUk1BVCwgaGVscGVyLT5lbnRyeUFycmF5
LT5kYXRhLCBoZWxwZXItPmVudHJ5QXJyYXktPmxlbiwgaGVscGVyLT5oZWFkZXJzQXJyYXktPmRh
dGEsIGhlbHBlci0+aGVhZGVyc0FycmF5LT5sZW4pOworICAgIHRwbF9wYWNrKHRuLCAwKTsKKyAg
ICBmaWxlbmFtZSA9IGdfYnVpbGRfZmlsZW5hbWUocHJpdi0+Y2FjaGVEaXIsIFdFQktJVF9TT1VQ
X0NBQ0hFX0NPUkVfVFBMX0ZJTEUsIE5VTEwpOworICAgIHRwbF9kdW1wKHRuLCBUUExfRklMRSwg
ZmlsZW5hbWUpOworICAgIGdfZnJlZShmaWxlbmFtZSk7CisgICAgdHBsX2ZyZWUodG4pOworCisg
ICAgLyogRnJlZXMgKi8KKyAgICBnX2FycmF5X2ZyZWUoaGVscGVyLT5lbnRyeUFycmF5LCBUUlVF
KTsKKyAgICBnX2FycmF5X2ZyZWUoaGVscGVyLT5oZWFkZXJzQXJyYXksIFRSVUUpOworICAgIGdf
c2xpY2VfZnJlZShDYWNoZUhlbHBlciwgaGVscGVyKTsKK30KKwordm9pZCB3ZWJraXRTb3VwQ2Fj
aGVDb3JlTG9hZChXZWJLaXRTb3VwQ2FjaGVDb3JlKiBjYWNoZSkKK3sKKyAgICB0cGxfbm9kZSog
dG4gPSAwOworICAgIFdlYktpdFNvdXBDYWNoZUNvcmVQZXJzaXN0ZW50RW50cnkqIHBlbnRyeUFy
cmF5ID0gMDsKKyAgICBTdHJpbmdQYWlyKiBwaGVhZGVyc0FycmF5ID0gMDsKKyAgICBndWludCBp
LCBiYXNlSGVhZGVyOworICAgIFdlYktpdFNvdXBDYWNoZUNvcmVQcml2YXRlKiBwcml2ID0gV0VC
S0lUX1NPVVBfQ0FDSEVfQ09SRV9HRVRfUFJJVkFURShjYWNoZSk7CisgICAgZ2NoYXIqIGZpbGVu
YW1lID0gMCwgKiBmbXQ7CisgICAgdWludDMyX3QgbnVtRnhsZW5zLCAqIGZ4bGVuczsKKworICAg
IC8qIEdldCB0aGUgYXJyYXkgbGVuZ3RocyB0byB1bnBhY2sgZGF0YSAqLworICAgIGZpbGVuYW1l
ID0gZ19idWlsZF9maWxlbmFtZShwcml2LT5jYWNoZURpciwgV0VCS0lUX1NPVVBfQ0FDSEVfQ09S
RV9UUExfRklMRSwgTlVMTCk7CisgICAgZm10ID0gdHBsX3BlZWsoVFBMX0ZJTEUgfCBUUExfRlhM
RU5TLCBmaWxlbmFtZSwgJm51bUZ4bGVucywgJmZ4bGVucyk7CisgICAgaWYgKCFmbXQpCisgICAg
ICAgIHJldHVybjsKKyAgICBpZiAobnVtRnhsZW5zICE9IDIpCisgICAgICAgIGdvdG8gZnJlZXM7
CisKKyAgICBwZW50cnlBcnJheSA9IHN0YXRpY19jYXN0IDwgV2ViS2l0U291cENhY2hlQ29yZVBl
cnNpc3RlbnRFbnRyeSogPihnX3NsaWNlX2FsbG9jMChzaXplb2YoV2ViS2l0U291cENhY2hlQ29y
ZVBlcnNpc3RlbnRFbnRyeSkqIGZ4bGVuc1swXSkpOworICAgIHBoZWFkZXJzQXJyYXkgPSBzdGF0
aWNfY2FzdCA8IFN0cmluZ1BhaXIqID4oZ19zbGljZV9hbGxvYzAoc2l6ZW9mKFN0cmluZ1BhaXIp
KiBmeGxlbnNbMV0pKTsKKworICAgIHRuID0gdHBsX21hcChmbXQsIHBlbnRyeUFycmF5LCBmeGxl
bnNbMF0sIHBoZWFkZXJzQXJyYXksIGZ4bGVuc1sxXSk7CisKKyAgICAvKiBMb2FkIGZpbGUgYW5k
IHVucGFjayBmaXhlZCBsZW5ndGggYXJyYXlzICovCisgICAgaWYgKHRwbF9sb2FkKHRuLCBUUExf
RklMRSwgZmlsZW5hbWUpID09IC0xKQorICAgICAgICBnb3RvIGZyZWVzOworCisgICAgdHBsX3Vu
cGFjayh0biwgMCk7CisKKyAgICBiYXNlSGVhZGVyID0gMDsKKyAgICBmb3IgKGkgPSAwOyBpIDwg
ZnhsZW5zWzBdOyBpKyspIHsKKyAgICAgICAgZ3VpbnQgaGl0ZXI7CisKKyAgICAgICAgLyogQ3Jl
YXRlIHRoZSBlbnRyeSAqLworICAgICAgICBXZWJLaXRTb3VwQ2FjaGVDb3JlRW50cnkqIGVudHJ5
ID0gZ19zbGljZV9uZXcwKFdlYktpdFNvdXBDYWNoZUNvcmVFbnRyeSk7CisgICAgICAgIGVudHJ5
LT5rZXkgPSAoY2hhciopcGVudHJ5QXJyYXlbaV0ua2V5OworICAgICAgICBnX2Fzc2VydChlbnRy
eS0+a2V5KTsKKworICAgICAgICBlbnRyeS0+ZmlsZW5hbWUgPSAoY2hhciopcGVudHJ5QXJyYXlb
aV0uZmlsZW5hbWU7CisgICAgICAgIGVudHJ5LT5tdXN0UmV2YWxpZGF0ZSA9IHBlbnRyeUFycmF5
W2ldLm11c3RSZXZhbGlkYXRlOworICAgICAgICBlbnRyeS0+ZnJlc2huZXNzTGlmZXRpbWUgPSBw
ZW50cnlBcnJheVtpXS5mcmVzaG5lc3NMaWZldGltZTsKKyAgICAgICAgZW50cnktPmNvcnJlY3Rl
ZEluaXRpYWxBZ2UgPSBwZW50cnlBcnJheVtpXS5jb3JyZWN0ZWRJbml0aWFsQWdlOworICAgICAg
ICBlbnRyeS0+cmVzcG9uc2VUaW1lID0gcGVudHJ5QXJyYXlbaV0ucmVzcG9uc2VUaW1lOworICAg
ICAgICBlbnRyeS0+aGl0cyA9IHBlbnRyeUFycmF5W2ldLmhpdHM7CisgICAgICAgIGVudHJ5LT5s
ZW5ndGggPSBwZW50cnlBcnJheVtpXS5sZW5ndGg7CisKKyAgICAgICAgLyogVG8gYXZvaWQgZG91
YmxlIGZyZWUgKi8KKyAgICAgICAgcGVudHJ5QXJyYXlbaV0ua2V5ID0gMDsKKyAgICAgICAgcGVu
dHJ5QXJyYXlbaV0uZmlsZW5hbWUgPSAwOworCisgICAgICAgIC8qIEhlYWRlciAqLworICAgICAg
ICBlbnRyeS0+aGVhZGVycyA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX25ldygoU291cE1lc3NhZ2VI
ZWFkZXJzVHlwZSkgcGVudHJ5QXJyYXlbaV0ucGhlYWRlcnMudHlwZSk7CisgICAgICAgIHNvdXBf
bWVzc2FnZV9oZWFkZXJzX3NldF9jb250ZW50X2xlbmd0aChlbnRyeS0+aGVhZGVycywgcGVudHJ5
QXJyYXlbaV0ucGhlYWRlcnMuY29udGVudExlbmd0aCk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9o
ZWFkZXJzX3NldF9jb250ZW50X3R5cGUoZW50cnktPmhlYWRlcnMsIHBlbnRyeUFycmF5W2ldLnBo
ZWFkZXJzLmNvbnRlbnRUeXBlLCAwKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfc2V0
X2VuY29kaW5nKGVudHJ5LT5oZWFkZXJzLCAoU291cEVuY29kaW5nKSBwZW50cnlBcnJheVtpXS5w
aGVhZGVycy5lbmNvZGluZyk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX3NldF9leHBl
Y3RhdGlvbnMoZW50cnktPmhlYWRlcnMsIChTb3VwRXhwZWN0YXRpb24pIHBlbnRyeUFycmF5W2ld
LnBoZWFkZXJzLmV4cGVjdGF0aW9ucyk7CisKKyAgICAgICAgLyogdW5wYWNrIGhlYWRlcnMgKi8K
KyAgICAgICAgZm9yIChoaXRlciA9IDA7IGhpdGVyIDwgKGd1aW50KSBwZW50cnlBcnJheVtpXS5w
aGVhZGVycy5udW1IZWFkZXJzOyBoaXRlcisrKSB7CisgICAgICAgICAgICBndWludCByZWFsSW5k
ZXg7CisKKyAgICAgICAgICAgIHJlYWxJbmRleCA9IGJhc2VIZWFkZXIgKyBoaXRlcjsKKyAgICAg
ICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX3JlcGxhY2UoZW50cnktPmhlYWRlcnMsIHBoZWFk
ZXJzQXJyYXlbcmVhbEluZGV4XS5rZXksIHBoZWFkZXJzQXJyYXlbcmVhbEluZGV4XS52YWx1ZSk7
CisgICAgICAgIH0KKyAgICAgICAgYmFzZUhlYWRlciArPSBwZW50cnlBcnJheVtpXS5waGVhZGVy
cy5udW1IZWFkZXJzOworCisgICAgICAgIC8qIEluc2VydCBpbiBjYWNoZSAqLworICAgICAgICBp
ZiAoIXdlYmtpdF9zb3VwX2NhY2hlX2NvcmVfZW50cnlfaW5zZXJ0X2J5X2tleShjYWNoZSwgKGNv
bnN0IGdjaGFyKillbnRyeS0+a2V5LCBlbnRyeSkpCisgICAgICAgICAgICB3ZWJraXRfc291cF9j
YWNoZV9jb3JlX2VudHJ5X2ZyZWUoZW50cnkpOworICAgIH0KKworZnJlZXM6CisgICAgZnJlZShm
bXQpOworICAgIGlmIChudW1GeGxlbnMgPiAwKQorICAgICAgICBmcmVlKGZ4bGVucyk7CisgICAg
aWYgKGZpbGVuYW1lKQorICAgICAgICBnX2ZyZWUoZmlsZW5hbWUpOworCisgICAgaWYgKHRuKQor
ICAgICAgICB0cGxfZnJlZSh0bik7CisgICAgaWYgKHBlbnRyeUFycmF5KQorICAgICAgICBnX3Ns
aWNlX2ZyZWUxKHNpemVvZihXZWJLaXRTb3VwQ2FjaGVDb3JlUGVyc2lzdGVudEVudHJ5KSwgcGVu
dHJ5QXJyYXkpOworfQorCit2b2lkIHdlYmtpdFNvdXBDYWNoZUNvcmVTZXRNYXhTaXplKFdlYktp
dFNvdXBDYWNoZUNvcmUqIGNhY2hlLCBndWludCBtYXhTaXplKQoreworICAgIGNhY2hlLT5wcml2
LT5tYXhTaXplID0gbWF4U2l6ZTsKKyAgICBjYWNoZS0+cHJpdi0+bWF4RW50cnlEYXRhU2l6ZSA9
IGNhY2hlLT5wcml2LT5tYXhTaXplIC8gTUFYX0VOVFJZX0RBVEFfUEVSQ0VOVEFHRTsKK30KKwor
Z3VpbnQgd2Via2l0U291cENhY2hlQ29yZUdldE1heFNpemUoV2ViS2l0U291cENhY2hlQ29yZSog
Y2FjaGUpCit7CisgICAgcmV0dXJuIGNhY2hlLT5wcml2LT5tYXhTaXplOworfQorCit9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJraXRzb3VwY2FjaGVjb3Jl
LmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJraXRzb3VwY2FjaGVjb3JlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgzNDA1NwotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL3dlYmtpdHNvdXBjYWNoZWNvcmUu
aApAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIElnYWxp
YSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsCisgKiBCb3N0b24s
IE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIHdlYmtpdHNvdXBjYWNoZWNvcmVf
aAorI2RlZmluZSB3ZWJraXRzb3VwY2FjaGVjb3JlX2ggMQorCisjaW5jbHVkZSA8Z2lvL2dpby5o
PgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC10eXBlcy5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJr
aXRkZWZpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR19CRUdJTl9ERUNMUworCisj
ZGVmaW5lIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEVfQ09SRSAgICAgICAgICAgICAgICAod2Via2l0
X3NvdXBfY2FjaGVfY29yZV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9D
T1JFKG9iaikgICAgICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmop
LCBXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFX0NPUkUsIFdlYktpdFNvdXBDYWNoZUNvcmUpKQorI2Rl
ZmluZSBXRUJLSVRfU09VUF9DQUNIRV9DT1JFX0NMQVNTKGtsYXNzKSAgICAgICAgKEdfVFlQRV9D
SEVDS19DTEFTU19DQVNUKChrbGFzcyksIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEVfQ09SRSwgV2Vi
S2l0U291cENhY2hlQ29yZUNsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfSVNfQ0FDSEVfQ09S
RShvYmopICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBF
X1NPVVBfQ0FDSEVfQ09SRSkpCisjZGVmaW5lIFdFQktJVF9TT1VQX0lTX0NBQ0hFX0NPUkVfQ0xB
U1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfU09V
UF9DQUNIRV9DT1JFKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FDSEVfQ09SRV9HRVRfQ0xBU1Mo
b2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBf
Q0FDSEVfQ09SRSwgV2ViS2l0U291cENhY2hlQ29yZUNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdFNvdXBDYWNoZUNvcmVQcml2YXRlIFdlYktpdFNvdXBDYWNoZUNvcmVQcml2YXRlOwor
Cit0eXBlZGVmIGVudW0geworICAgIFdFQktJVF9TT1VQX0NBQ0hFX0NPUkVfQ0FDSEVBQkxFICAg
PSAoMSA8PCAwKSwKKyAgICBXRUJLSVRfU09VUF9DQUNIRV9DT1JFX1VOQ0FDSEVBQkxFID0gKDEg
PDwgMSksCisgICAgV0VCS0lUX1NPVVBfQ0FDSEVfQ09SRV9JTlZBTElEQVRFUyA9ICgxIDw8IDIp
LAorICAgIFdFQktJVF9TT1VQX0NBQ0hFX0NPUkVfVkFMSURBVEVTID0gKDEgPDwgMykKK30gV2Vi
S2l0U291cENhY2hlQ29yZWFiaWxpdHk7CisKK3R5cGVkZWYgZW51bSB7CisgICAgV0VCS0lUX1NP
VVBfQ0FDSEVfQ09SRV9SRVNQT05TRV9GUkVTSCwKKyAgICBXRUJLSVRfU09VUF9DQUNIRV9DT1JF
X1JFU1BPTlNFX05FRURTX1ZBTElEQVRJT04sCisgICAgV0VCS0lUX1NPVVBfQ0FDSEVfQ09SRV9S
RVNQT05TRV9TVEFMRQorfSBXZWJLaXRTb3VwQ2FjaGVDb3JlUmVzcG9uc2U7CisKK3R5cGVkZWYg
ZW51bSB7CisgICAgV0VCS0lUX1NPVVBfQ0FDSEVfQ09SRV9TSU5HTEVfVVNFUiwKKyAgICBXRUJL
SVRfU09VUF9DQUNIRV9DT1JFX1NIQVJFRAorfSBXZWJLaXRTb3VwQ2FjaGVDb3JlVHlwZTsKKwor
dHlwZWRlZiBzdHJ1Y3QgeworICAgIEdPYmplY3QgcGFyZW50X2luc3RhbmNlOworCisgICAgV2Vi
S2l0U291cENhY2hlQ29yZVByaXZhdGUqIHByaXY7Cit9IFdlYktpdFNvdXBDYWNoZUNvcmU7CisK
K3R5cGVkZWYgc3RydWN0IHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworCisgICAg
LyogbWV0aG9kcyAqLworICAgIFdlYktpdFNvdXBDYWNoZUNvcmVhYmlsaXR5ICgqIGdldENhY2hl
YWJpbGl0eSkoV2ViS2l0U291cENhY2hlQ29yZSogY2FjaGUsIFNvdXBNZXNzYWdlKiBtc2cpOwor
CisgICAgLyogUGFkZGluZyBmb3IgZnV0dXJlIGV4cGFuc2lvbiAqLworICAgIHZvaWQgKCogX2xp
YnNvdXBfcmVzZXJ2ZWQxKSh2b2lkKTsKKyAgICB2b2lkICgqIF9saWJzb3VwX3Jlc2VydmVkMiko
dm9pZCk7CisgICAgdm9pZCAoKiBfbGlic291cF9yZXNlcnZlZDMpKHZvaWQpOworfSBXZWJLaXRT
b3VwQ2FjaGVDb3JlQ2xhc3M7CisKK0dUeXBlIHdlYmtpdF9zb3VwX2NhY2hlX2NvcmVfZ2V0X3R5
cGUodm9pZCk7CitXZWJLaXRTb3VwQ2FjaGVDb3JlKiAgd2Via2l0U291cENhY2hlQ29yZU5ldyhj
b25zdCBjaGFyKiBjYWNoZV9kaXIsIFdlYktpdFNvdXBDYWNoZUNvcmVUeXBlIGNhY2hlX3R5cGUp
OworV2ViS2l0U291cENhY2hlQ29yZVJlc3BvbnNlIHdlYmtpdFNvdXBDYWNoZUNvcmVIYXNSZXNw
b25zZShXZWJLaXRTb3VwQ2FjaGVDb3JlKiBjYWNoZSwgU291cE1lc3NhZ2UqIG1zZyk7CitHSW5w
dXRTdHJlYW0qICAgICB3ZWJraXRTb3VwQ2FjaGVDb3JlU2VuZFJlc3BvbnNlKFdlYktpdFNvdXBD
YWNoZUNvcmUqIGNhY2hlLCBTb3VwTWVzc2FnZSogbXNnKTsKK1dlYktpdFNvdXBDYWNoZUNvcmVh
YmlsaXR5IHdlYmtpdFNvdXBDYWNoZUNvcmVHZXRDYWNoZWFiaWxpdHkoV2ViS2l0U291cENhY2hl
Q29yZSogY2FjaGUsIFNvdXBNZXNzYWdlKiBtc2cpOwordm9pZCB3ZWJraXRTb3VwQ2FjaGVDb3Jl
Rmx1c2goV2ViS2l0U291cENhY2hlQ29yZSogY2FjaGUpOwordm9pZCB3ZWJraXRTb3VwQ2FjaGVD
b3JlQ2xlYXIoV2ViS2l0U291cENhY2hlQ29yZSogY2FjaGUpOworU291cE1lc3NhZ2UqICAgICAg
d2Via2l0U291cENhY2hlQ29yZUdlbmVyYXRlQ29uZGl0aW9uYWxSZXF1ZXN0KFdlYktpdFNvdXBD
YWNoZUNvcmUqIGNhY2hlLCBTb3VwTWVzc2FnZSogb3JpZ2luYWwpOworCit2b2lkIHdlYmtpdFNv
dXBDYWNoZUNvcmVEdW1wKFdlYktpdFNvdXBDYWNoZUNvcmUqIGNhY2hlKTsKK3ZvaWQgd2Via2l0
U291cENhY2hlQ29yZUxvYWQoV2ViS2l0U291cENhY2hlQ29yZSogY2FjaGUpOworCit2b2lkIHdl
YmtpdFNvdXBDYWNoZUNvcmVTZXRNYXhTaXplKFdlYktpdFNvdXBDYWNoZUNvcmUqIGNhY2hlLCBn
dWludCBtYXhTaXplKTsKK2d1aW50IHdlYmtpdFNvdXBDYWNoZUNvcmVHZXRNYXhTaXplKFdlYktp
dFNvdXBDYWNoZUNvcmUqIGNhY2hlKTsKKwordm9pZCB3ZWJraXRTb3VwQ2FjaGVDb3JlQXR0YWNo
KFdlYktpdFNvdXBDYWNoZUNvcmUqIGNhY2hlLCBTb3VwU2Vzc2lvbkZlYXR1cmUqIGZlYXR1cmUs
IFNvdXBTZXNzaW9uKiBzZXNzaW9uKTsKKwordm9pZCB3ZWJraXRTb3VwQ2FjaGVDb3JlUmVxdWVz
dFN0YXJ0ZWQoV2ViS2l0U291cENhY2hlQ29yZSogY2FjaGUsIFNvdXBTZXNzaW9uRmVhdHVyZSog
ZmVhdHVyZSwgU291cFNlc3Npb24qIHNlc3Npb24sIFNvdXBNZXNzYWdlKiBtc2csIFNvdXBTb2Nr
ZXQqIHNvY2tldCk7CisKK0dfRU5EX0RFQ0xTCisKK30KKworI2VuZGlmIC8qIHdlYmtpdHNvdXBj
YWNoZWNvcmVfaCAqLwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
d2Via2l0c291cGRpcmVjdG9yeWlucHV0c3RyZWFtLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL3dlYmtpdHNvdXBkaXJlY3RvcnlpbnB1dHN0cmVhbS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThlZGVkMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL3dlYmtpdHNvdXBkaXJlY3RvcnlpbnB1dHN0cmVhbS5j
cHAKQEAgLTAsMCArMSwxODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVkIEhhdCwg
SW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVt
cGxlIFBsYWNlLCBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAid2Via2l0c291cGRpcmVjdG9yeWlu
cHV0c3RyZWFtLmgiCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8bGlic291cC9z
b3VwLW1lc3NhZ2UtYm9keS5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC11cmkuaD4KKyNpbmNs
dWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKyNkZWZpbmUgSU5JVF9TVFJJTkcgIjxodG1sPjxoZWFkPjx0aXRsZT5PTUchPC90aXRsZT48
L2hlYWQ+PGJvZHk+PHRhYmxlPiIKKyNkZWZpbmUgRVhJVF9TVFJJTkcgIjwvdGFibGU+PC9odG1s
PiIKKworR19ERUZJTkVfVFlQRShXZWJLaXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW0sIHdlYmtp
dF9zb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW0sIEdfVFlQRV9JTlBVVF9TVFJFQU0pCisKK3N0
YXRpYyBTb3VwQnVmZmVyICoKK3dlYmtpdFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbVBhcnNlSW5m
byhXZWJLaXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW0qIHN0cmVhbSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRmlsZUluZm8qIGluZm8pCit7CisgICAg
U291cEJ1ZmZlciogYnVmZmVyOworICAgIEdTdHJpbmcqIHN0cmluZzsKKyAgICBjb25zdCBjaGFy
KiBzOworICAgIGNoYXIqIGVzY2FwZWQsICogcGF0aCwgKiB4bWxfc3RyaW5nOworCisgICAgaWYg
KCFnX2ZpbGVfaW5mb19nZXRfbmFtZShpbmZvKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBz
ID0gZ19maWxlX2luZm9fZ2V0X2Rpc3BsYXlfbmFtZShpbmZvKTsKKyAgICBpZiAoIXMpIHsKKyAg
ICAgICAgcyA9IGdfZmlsZV9pbmZvX2dldF9uYW1lKGluZm8pOworICAgICAgICAvKiBGSVhNRTog
Y29udmVydCBzb21laG93PyAqLworICAgICAgICBpZiAoIWdfdXRmOF92YWxpZGF0ZShzLCAtMSwg
MCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgc3RyaW5nID0gZ19zdHJpbmdf
bmV3KCI8dHI+Iik7CisKKyAgICB4bWxfc3RyaW5nID0gZ19tYXJrdXBfZXNjYXBlX3RleHQocywg
LTEpOworICAgIGVzY2FwZWQgPSBnX3VyaV9lc2NhcGVfc3RyaW5nKGdfZmlsZV9pbmZvX2dldF9u
YW1lKGluZm8pLCAwLCBGQUxTRSk7CisgICAgcGF0aCA9IGdfc3RyY29uY2F0KHN0cmVhbS0+dXJp
LCAiLyIsIGVzY2FwZWQsIE5VTEwpOworICAgIGdfZnJlZShlc2NhcGVkKTsKKyAgICBnX3N0cmlu
Z19hcHBlbmRfcHJpbnRmKHN0cmluZywgIjx0ZD48YSBocmVmPVwiJXNcIj4lczwvYT48L3RkPiIs
IHBhdGgsIHhtbF9zdHJpbmcpOworICAgIGdfZnJlZShwYXRoKTsKKyAgICBnX2ZyZWUoeG1sX3N0
cmluZyk7CisgICAgZ19zdHJpbmdfYXBwZW5kKHN0cmluZywgIjwvdHI+Iik7CisKKyAgICBidWZm
ZXIgPSBzb3VwX2J1ZmZlcl9uZXcoU09VUF9NRU1PUllfVEFLRSwgc3RyaW5nLT5zdHIsIHN0cmlu
Zy0+bGVuKTsKKyAgICBnX3N0cmluZ19mcmVlKHN0cmluZywgRkFMU0UpOworCisgICAgcmV0dXJu
IGJ1ZmZlcjsKK30KKworc3RhdGljIFNvdXBCdWZmZXIqIHdlYmtpdFNvdXBEaXJlY3RvcnlJbnB1
dFN0cmVhbVJlYWROZXh0RmlsZShXZWJLaXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW0qIHN0cmVh
bSwgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgR0Zp
bGVJbmZvKiBpbmZvOworICAgIFNvdXBCdWZmZXIqIGJ1ZmZlcjsKKyAgICBHRXJyb3IqIGVyciA9
IDA7CisKKyAgICBkbyB7CisgICAgICAgIGluZm8gPSBnX2ZpbGVfZW51bWVyYXRvcl9uZXh0X2Zp
bGUoc3RyZWFtLT5lbnVtZXJhdG9yLCBjYW5jZWxsYWJsZSwgJmVycik7CisgICAgICAgIGlmICgh
aW5mbykgeworICAgICAgICAgICAgaWYgKGVycikgeworICAgICAgICAgICAgICAgIGdfcHJvcGFn
YXRlX2Vycm9yKGVycm9yLCBlcnIpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKCFzdHJlYW0tPmRvbmUpIHsKKyAgICAgICAgICAgICAg
ICBzdHJlYW0tPmRvbmUgPSBUUlVFOworICAgICAgICAgICAgICAgIHJldHVybiBzb3VwX2J1ZmZl
cl9uZXcoU09VUF9NRU1PUllfU1RBVElDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRVhJVF9TVFJJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplb2YoRVhJVF9TVFJJTkcpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBi
dWZmZXIgPSB3ZWJraXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW1QYXJzZUluZm8oc3RyZWFtLCBp
bmZvKTsKKyAgICB9IHdoaWxlICghYnVmZmVyKTsKKworICAgIHJldHVybiBidWZmZXI7Cit9CisK
K3N0YXRpYyBnc3NpemUgd2Via2l0U291cERpcmVjdG9yeUlucHV0U3RyZWFtUmVhZChHSW5wdXRT
dHJlYW0qIGlucHV0LCB2b2lkKiBidWZmZXIsIGdzaXplIGNvdW50LCBHQ2FuY2VsbGFibGUqIGNh
bmNlbGxhYmxlLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJLaXRTb3VwRGlyZWN0b3J5SW5w
dXRTdHJlYW0qIHN0cmVhbSA9IFdFQktJVF9TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0oaW5w
dXQpOworICAgIGdzc2l6ZSB0b3RhbCwgc2l6ZTsKKworICAgIGZvciAodG90YWwgPSAwOyB0b3Rh
bCA8IGNvdW50OyB0b3RhbCArPSBzaXplKSB7CisgICAgICAgIGlmICghc3RyZWFtLT5idWZmZXIp
IHsKKyAgICAgICAgICAgIHN0cmVhbS0+YnVmZmVyID0gd2Via2l0U291cERpcmVjdG9yeUlucHV0
U3RyZWFtUmVhZE5leHRGaWxlKHN0cmVhbSwgY2FuY2VsbGFibGUsIGVycm9yKTsKKyAgICAgICAg
ICAgIGlmICghc3RyZWFtLT5idWZmZXIpIHsKKyAgICAgICAgICAgICAgICAvKiBGSVhNRTogSXMg
dGhpcyBjb3JyZWN0IG9yIHNob3VsZCB3ZSBmb3J3YXJkIHRoZSBlcnJvcj8gKi8KKyAgICAgICAg
ICAgICAgICBpZiAodG90YWwpCisgICAgICAgICAgICAgICAgICAgIGdfY2xlYXJfZXJyb3IoZXJy
b3IpOworICAgICAgICAgICAgICAgIHJldHVybiB0b3RhbDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIHNpemUgPSBzdGQ6Om1pbihzdHJlYW0tPmJ1ZmZlci0+bGVuZ3RoLCBj
b3VudCAtIHRvdGFsKTsKKyAgICAgICAgbWVtY3B5KChjaGFyKikgYnVmZmVyICsgdG90YWwsIHN0
cmVhbS0+YnVmZmVyLT5kYXRhLCBzaXplKTsKKyAgICAgICAgaWYgKHNpemUgPT0gc3RyZWFtLT5i
dWZmZXItPmxlbmd0aCkgeworICAgICAgICAgICAgc291cF9idWZmZXJfZnJlZShzdHJlYW0tPmJ1
ZmZlcik7CisgICAgICAgICAgICBzdHJlYW0tPmJ1ZmZlciA9IDA7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBTb3VwQnVmZmVyKiBzdWIgPSBzb3VwX2J1ZmZlcl9uZXdfc3ViYnVmZmVy
KHN0cmVhbS0+YnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0tPmJ1ZmZlci0+bGVuZ3RoIC0gc2l6ZSk7Cisg
ICAgICAgICAgICBzb3VwX2J1ZmZlcl9mcmVlKHN0cmVhbS0+YnVmZmVyKTsKKyAgICAgICAgICAg
IHN0cmVhbS0+YnVmZmVyID0gc3ViOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRv
dGFsOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0U291cERpcmVjdG9yeUlucHV0U3RyZWFt
Q2xvc2UoR0lucHV0U3RyZWFtKiBpbnB1dCwgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwgR0Vy
cm9yKiogZXJyb3IpCit7CisgICAgV2ViS2l0U291cERpcmVjdG9yeUlucHV0U3RyZWFtKiBzdHJl
YW0gPSBXRUJLSVRfU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNKGlucHV0KTsKKyAgICBnYm9v
bGVhbiByZXN1bHQ7CisKKyAgICBpZiAoc3RyZWFtLT5idWZmZXIpIHsKKyAgICAgICAgc291cF9i
dWZmZXJfZnJlZShzdHJlYW0tPmJ1ZmZlcik7CisgICAgICAgIHN0cmVhbS0+YnVmZmVyID0gMDsK
KyAgICB9CisKKyAgICByZXN1bHQgPSBnX2ZpbGVfZW51bWVyYXRvcl9jbG9zZShzdHJlYW0tPmVu
dW1lcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsbGFi
bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IpOworICAgIGdf
b2JqZWN0X3VucmVmKHN0cmVhbS0+ZW51bWVyYXRvcik7CisgICAgc3RyZWFtLT5lbnVtZXJhdG9y
ID0gMDsKKworICAgIGdfZnJlZShzdHJlYW0tPnVyaSk7CisgICAgc3RyZWFtLT51cmkgPSAwOwor
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3NvdXBfZGlyZWN0
b3J5X2lucHV0X3N0cmVhbV9jbGFzc19pbml0KFdlYktpdFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVh
bUNsYXNzKiBzdHJlYW1DbGFzcykKK3sKKyAgICBHSW5wdXRTdHJlYW1DbGFzcyogaW5wdXRTdHJl
YW1DbGFzcyA9IEdfSU5QVVRfU1RSRUFNX0NMQVNTKHN0cmVhbUNsYXNzKTsKKworICAgIGlucHV0
U3RyZWFtQ2xhc3MtPnJlYWRfZm4gPSB3ZWJraXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW1SZWFk
OworICAgIGlucHV0U3RyZWFtQ2xhc3MtPmNsb3NlX2ZuID0gd2Via2l0U291cERpcmVjdG9yeUlu
cHV0U3RyZWFtQ2xvc2U7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX2RpcmVjdG9yeV9p
bnB1dF9zdHJlYW1faW5pdChXZWJLaXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW0qIHN0cmVhbSkK
K3sKKyAgICBzdHJlYW0tPmJ1ZmZlciA9IHNvdXBfYnVmZmVyX25ldyhTT1VQX01FTU9SWV9TVEFU
SUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5JVF9TVFJJTkcsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKElOSVRfU1RSSU5HKSk7
Cit9CisKK0dJbnB1dFN0cmVhbSogd2Via2l0U291cERpcmVjdG9yeUlucHV0U3RyZWFtTmV3KEdG
aWxlRW51bWVyYXRvciogZW51bWVyYXRvciwgU291cFVSSSogdXJpKQoreworICAgIEdJbnB1dFN0
cmVhbSogc3RyZWFtOworCisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoR19JU19GSUxFX0VOVU1F
UkFUT1IoZW51bWVyYXRvciksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHVyaSwgMCk7
CisKKyAgICBzdHJlYW0gPSBzdGF0aWNfY2FzdDxHSW5wdXRTdHJlYW0qPihnX29iamVjdF9uZXco
V0VCS0lUX1RZUEVfU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNLCAwKSk7CisKKyAgICBXRUJL
SVRfU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNKHN0cmVhbSktPmVudW1lcmF0b3IgPSBzdGF0
aWNfY2FzdDxHRmlsZUVudW1lcmF0b3IqPihnX29iamVjdF9yZWYoZW51bWVyYXRvcikpOworICAg
IFdFQktJVF9TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0oc3RyZWFtKS0+dXJpID0gc291cF91
cmlfdG9fc3RyaW5nKHVyaSwgRkFMU0UpOworCisgICAgcmV0dXJuIHN0cmVhbTsKK30KKworfQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvd2Via2l0c291cGRpcmVj
dG9yeWlucHV0c3RyZWFtLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJraXRz
b3VwZGlyZWN0b3J5aW5wdXRzdHJlYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5kMjMzZDNhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvd2Via2l0c291cGRpcmVjdG9yeWlucHV0c3RyZWFtLmgKQEAgLTAsMCArMSw2NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgSWdhbGlhLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLAorICog
Qm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiB3ZWJraXRzb3VwZGly
ZWN0b3J5aW5wdXRzdHJlYW1faAorI2RlZmluZSB3ZWJraXRzb3VwZGlyZWN0b3J5aW5wdXRzdHJl
YW1faCAxCisKKyNpbmNsdWRlIDxnaW8vZ2lvLmg+CisjaW5jbHVkZSA8bGlic291cC9zb3VwLW1l
c3NhZ2UtYm9keS5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC10eXBlcy5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9TT1VQ
X0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0gICAgICAgICAgICAod2Via2l0X3NvdXBfZGlyZWN0b3J5
X2lucHV0X3N0cmVhbV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfU09VUF9ESVJFQ1RPUllf
SU5QVVRfU1RSRUFNKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1Qo
KG9iaiksIFdFQktJVF9UWVBFX1NPVVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTSwgV2ViS2l0U291
cERpcmVjdG9yeUlucHV0U3RyZWFtKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfRElSRUNUT1JZX0lO
UFVUX1NUUkVBTV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFz
cyksIFdFQktJVF9UWVBFX1NPVVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTSwgV2ViS2l0U291cERp
cmVjdG9yeUlucHV0U3RyZWFtQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfU09VUF9JU19ESVJFQ1RP
UllfSU5QVVRfU1RSRUFNKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUo
KG9iaiksIFdFQktJVF9UWVBFX1NPVVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTSkpCisjZGVmaW5l
IFdFQktJVF9TT1VQX0lTX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU1fQ0xBU1Moa2xhc3MpIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfU09VUF9ESVJFQ1RPUllfSU5Q
VVRfU1RSRUFNKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTV9H
RVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksIFdFQktJVF9U
WVBFX1NPVVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTSwgV2ViS2l0U291cERpcmVjdG9yeUlucHV0
U3RyZWFtQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0U291cERpcmVjdG9yeUlucHV0
U3RyZWFtIFdlYktpdFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbTsKK3R5cGVkZWYgc3RydWN0IF9X
ZWJLaXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW1DbGFzcyBXZWJLaXRTb3VwRGlyZWN0b3J5SW5w
dXRTdHJlYW1DbGFzczsKKworc3RydWN0IF9XZWJLaXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW0g
eworICAgIEdJbnB1dFN0cmVhbSBwYXJlbnQ7CisKKyAgICBHRmlsZUVudW1lcmF0b3IqIGVudW1l
cmF0b3I7CisgICAgY2hhciogdXJpOworICAgIFNvdXBCdWZmZXIqIGJ1ZmZlcjsKKyAgICBnYm9v
bGVhbiBkb25lOworfTsKKworc3RydWN0IF9XZWJLaXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW1D
bGFzcyB7CisgICAgR0lucHV0U3RyZWFtQ2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworR1R5cGUg
d2Via2l0X3NvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9nZXRfdHlwZSh2b2lkKTsKKworR0lu
cHV0U3RyZWFtKiB3ZWJraXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW1OZXcoR0ZpbGVFbnVtZXJh
dG9yKiBlbnVtZXJhdG9yLCBTb3VwVVJJKiB1cmkpOworCisKK0dfRU5EX0RFQ0xTCisKK30KKwor
I2VuZGlmIC8qIHdlYmtpdHNvdXBkaXJlY3RvcnlpbnB1dHN0cmVhbV9oICovCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJraXRzb3VwaHR0cGlucHV0c3RyZWFt
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL3dlYmtpdHNvdXBodHRwaW5wdXRz
dHJlYW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMjY1MjgKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJraXRzb3Vw
aHR0cGlucHV0c3RyZWFtLmNwcApAQCAtMCwwICsxLDgwNyBAQAorLyogd2Via2l0c291cGh0dHBp
bnB1dHN0cmVhbS5jcHAsIGJhc2VkIG9uIGdzb2NrZXRpbnB1dHN0cmVhbS5jCisgKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2LTIwMDcgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEw
IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsCisgKiBC
b3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAid2Via2l0c291cGh0dHBpbnB1dHN0cmVhbS5oIgorCisjaW5jbHVkZSA8YWxnb3Jp
dGhtPgorI2luY2x1ZGUgPGdpby9naW8uaD4KKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8
bGlic291cC9zb3VwLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitzdGF0aWMgdm9pZCB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZWVrYWJs
ZV9pZmFjZV9pbml0KEdTZWVrYWJsZUlmYWNlKiBzZWVrYWJsZUlmYWNlKTsKKworR19ERUZJTkVf
VFlQRV9XSVRIX0NPREUoV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSwgd2Via2l0X3NvdXBfaHR0
cF9pbnB1dF9zdHJlYW0sIEdfVFlQRV9JTlBVVF9TVFJFQU0sCisgICAgICAgICAgICAgICAgICAg
ICAgICBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoR19UWVBFX1NFRUtBQkxFLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX3NlZWthYmxlX2lmYWNlX2luaXQpKQorCit0eXBlZGVmIHZvaWQgKCpXZWJLaXRTb3Vw
SFRUUElucHV0U3RyZWFtQ2FsbGJhY2spKEdJbnB1dFN0cmVhbSopOworCit0eXBlZGVmIHN0cnVj
dCB7CisgICAgU291cFNlc3Npb24qIHNlc3Npb247CisgICAgR01haW5Db250ZXh0KiBhc3luY0Nv
bnRleHQ7CisgICAgU291cE1lc3NhZ2UqIG1zZzsKKyAgICBnYm9vbGVhbiBnb3RIZWFkZXJzLCBm
aW5pc2hlZDsKKyAgICBnb2Zmc2V0IG9mZnNldDsKKworICAgIEdDYW5jZWxsYWJsZSogY2FuY2Vs
bGFibGU7CisgICAgR1NvdXJjZSogY2FuY2VsV2F0Y2g7CisgICAgV2ViS2l0U291cEhUVFBJbnB1
dFN0cmVhbUNhbGxiYWNrIGdvdEhlYWRlcnNDYjsKKyAgICBXZWJLaXRTb3VwSFRUUElucHV0U3Ry
ZWFtQ2FsbGJhY2sgZ290Q2h1bmtDYjsKKyAgICBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtQ2Fs
bGJhY2sgZmluaXNoZWRDYjsKKyAgICBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtQ2FsbGJhY2sg
Y2FuY2VsbGVkQ2I7CisKKyAgICBndWNoYXIqIGxlZnRvdmVyQnVmZmVyOworICAgIGdzaXplIGxl
ZnRvdmVyQnVmc2l6ZSwgbGVmdG92ZXJPZmZzZXQ7CisKKyAgICBndWNoYXIqIGNhbGxlckJ1ZmZl
cjsKKyAgICBnc2l6ZSBjYWxsZXJCdWZzaXplLCBjYWxsZXJOcmVhZDsKKyAgICBHQXN5bmNSZWFk
eUNhbGxiYWNrIG91dHN0YW5kaW5nQ2FsbGJhY2s7CisgICAgR1NpbXBsZUFzeW5jUmVzdWx0KiBy
ZXN1bHQ7CisKK30gV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGU7CisjZGVmaW5lIFdF
QktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFKG8pIChHX1RZUEVfSU5TVEFO
Q0VfR0VUX1BSSVZBVEUoKG8pLCBXRUJLSVRfVFlQRV9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNLCBX
ZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSkpCisKKworc3RhdGljIGdzc2l6ZSB3ZWJr
aXRTb3VwSHR0cElucHV0U3RyZWFtUmVhZChHSW5wdXRTdHJlYW0qIHN0cmVhbSwgdm9pZCogYnVm
ZmVyLCBnc2l6ZSBjb3VudCwgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwgR0Vycm9yKiogZXJy
b3IpOworc3RhdGljIGdib29sZWFuIHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1DbG9zZShHSW5w
dXRTdHJlYW0qIHN0cmVhbSwgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwgR0Vycm9yKiogZXJy
b3IpOworc3RhdGljIHZvaWQgd2Via2l0U291cEh0dHBJbnB1dFN0cmVhbVJlYWRBc3luYyhHSW5w
dXRTdHJlYW0qIHN0cmVhbSwgdm9pZCogYnVmZmVyLCBnc2l6ZSBjb3VudCwgaW50IGlvUHJpb3Jp
dHksIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUsIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJh
Y2ssIGdwb2ludGVyIGRhdGEpOworc3RhdGljIGdzc2l6ZSB3ZWJraXRTb3VwSHR0cElucHV0U3Ry
ZWFtUmVhZEZpbmlzaChHSW5wdXRTdHJlYW0qIHN0cmVhbSwgR0FzeW5jUmVzdWx0KiByZXN1bHQs
IEdFcnJvcioqIGVycm9yKTsKK3N0YXRpYyB2b2lkIHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1D
bG9zZUFzeW5jKEdJbnB1dFN0cmVhbSogc3RyZWFtLCBpbnQgaW9Qcmlvcml0eSwgR0NhbmNlbGxh
YmxlKiBjYW5jZWxsYWJsZSwgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50ZXIg
ZGF0YSk7CitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0U291cEh0dHBJbnB1dFN0cmVhbUNsb3NlRmlu
aXNoKEdJbnB1dFN0cmVhbSogc3RyZWFtLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgR0Vycm9yKiog
ZXJyb3IpOworCitzdGF0aWMgZ29mZnNldCB3ZWJraXRTb3VwSHR0cElucHV0U3RyZWFtVGVsbChH
U2Vla2FibGUqIHNlZWthYmxlKTsKKworc3RhdGljIGdib29sZWFuIHdlYmtpdFNvdXBIdHRwSW5w
dXRTdHJlYW1DYW5TZWVrKEdTZWVrYWJsZSogc2Vla2FibGUpOworc3RhdGljIGdib29sZWFuIHdl
YmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1TZWVrKEdTZWVrYWJsZSogc2Vla2FibGUsIGdvZmZzZXQg
b2Zmc2V0LCBHU2Vla1R5cGUgdHlwZSwgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwgR0Vycm9y
KiogZXJyb3IpOworCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0U291cEh0dHBJbnB1dFN0cmVhbUNh
blRydW5jYXRlKEdTZWVrYWJsZSogc2Vla2FibGUpOworc3RhdGljIGdib29sZWFuIHdlYmtpdFNv
dXBIdHRwSW5wdXRTdHJlYW1UcnVuY2F0ZShHU2Vla2FibGUqIHNlZWthYmxlLCBnb2Zmc2V0IG9m
ZnNldCwgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwgR0Vycm9yKiogZXJyb3IpOworCitzdGF0
aWMgdm9pZCB3ZWJraXRTb3VwSHR0cElucHV0U3RyZWFtR290SGVhZGVycyhTb3VwTWVzc2FnZSog
bXNnLCBncG9pbnRlciBzdHJlYW0pOworc3RhdGljIHZvaWQgd2Via2l0U291cEh0dHBJbnB1dFN0
cmVhbUdvdENodW5rKFNvdXBNZXNzYWdlKiBtc2csIFNvdXBCdWZmZXIqIGNodW5rLCBncG9pbnRl
ciBzdHJlYW0pOworc3RhdGljIHZvaWQgd2Via2l0U291cEh0dHBJbnB1dFN0cmVhbUZpbmlzaGVk
KFNvdXBNZXNzYWdlKiBtc2csIGdwb2ludGVyIHN0cmVhbSk7CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAg
ICBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtKiBzdHJlYW0gPSBXRUJLSVRfU09VUF9IVFRQX0lO
UFVUX1NUUkVBTShvYmplY3QpOworICAgIFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRl
KiBwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUoc3RyZWFt
KTsKKworICAgIGdfb2JqZWN0X3VucmVmKHByaXYtPnNlc3Npb24pOworCisgICAgZ19zaWduYWxf
aGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKHByaXYtPm1zZywgKEdDYWxsYmFjayopd2Via2l0
U291cEh0dHBJbnB1dFN0cmVhbUdvdEhlYWRlcnMsIHN0cmVhbSk7CisgICAgZ19zaWduYWxfaGFu
ZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKHByaXYtPm1zZywgKEdDYWxsYmFjayopd2Via2l0U291
cEh0dHBJbnB1dFN0cmVhbUdvdENodW5rLCBzdHJlYW0pOworICAgIGdfc2lnbmFsX2hhbmRsZXJz
X2Rpc2Nvbm5lY3RfYnlfZnVuYyhwcml2LT5tc2csIChHQ2FsbGJhY2sqKXdlYmtpdFNvdXBIdHRw
SW5wdXRTdHJlYW1GaW5pc2hlZCwgc3RyZWFtKTsKKyAgICBnX29iamVjdF91bnJlZihwcml2LT5t
c2cpOworICAgIGdfZnJlZShwcml2LT5sZWZ0b3ZlckJ1ZmZlcik7CisKKyAgICBpZiAoR19PQkpF
Q1RfQ0xBU1Mod2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcGFyZW50X2NsYXNzKS0+Zmlu
YWxpemUpCisgICAgICAgICgqR19PQkpFQ1RfQ0xBU1Mod2Via2l0X3NvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fcGFyZW50X2NsYXNzKS0+ZmluYWxpemUpKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2NsYXNzX2luaXQoV2ViS2l0U291cEhUVFBJ
bnB1dFN0cmVhbUNsYXNzKiBrbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFz
cyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAgICBHSW5wdXRTdHJlYW1DbGFzcyogc3RyZWFt
Q2xhc3MgPSBHX0lOUFVUX1NUUkVBTV9DTEFTUyhrbGFzcyk7CisKKyAgICBnX3R5cGVfY2xhc3Nf
YWRkX3ByaXZhdGUoa2xhc3MsIHNpemVvZihXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0
ZSkpOworCisgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9zb3VwX2h0dHBfaW5w
dXRfc3RyZWFtX2ZpbmFsaXplOworCisgICAgc3RyZWFtQ2xhc3MtPnJlYWRfZm4gPSB3ZWJraXRT
b3VwSHR0cElucHV0U3RyZWFtUmVhZDsKKyAgICBzdHJlYW1DbGFzcy0+Y2xvc2VfZm4gPSB3ZWJr
aXRTb3VwSHR0cElucHV0U3RyZWFtQ2xvc2U7CisgICAgc3RyZWFtQ2xhc3MtPnJlYWRfYXN5bmMg
PSB3ZWJraXRTb3VwSHR0cElucHV0U3RyZWFtUmVhZEFzeW5jOworICAgIHN0cmVhbUNsYXNzLT5y
ZWFkX2ZpbmlzaCA9IHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1SZWFkRmluaXNoOworICAgIHN0
cmVhbUNsYXNzLT5jbG9zZV9hc3luYyA9IHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1DbG9zZUFz
eW5jOworICAgIHN0cmVhbUNsYXNzLT5jbG9zZV9maW5pc2ggPSB3ZWJraXRTb3VwSHR0cElucHV0
U3RyZWFtQ2xvc2VGaW5pc2g7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX2h0dHBfaW5w
dXRfc3RyZWFtX3NlZWthYmxlX2lmYWNlX2luaXQoR1NlZWthYmxlSWZhY2UqIHNlZWthYmxlSWZh
Y2UpCit7CisgICAgc2Vla2FibGVJZmFjZS0+dGVsbCA9IHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJl
YW1UZWxsOworICAgIHNlZWthYmxlSWZhY2UtPmNhbl9zZWVrID0gd2Via2l0U291cEh0dHBJbnB1
dFN0cmVhbUNhblNlZWs7CisgICAgc2Vla2FibGVJZmFjZS0+c2VlayA9IHdlYmtpdFNvdXBIdHRw
SW5wdXRTdHJlYW1TZWVrOworICAgIHNlZWthYmxlSWZhY2UtPmNhbl90cnVuY2F0ZSA9IHdlYmtp
dFNvdXBIdHRwSW5wdXRTdHJlYW1DYW5UcnVuY2F0ZTsKKyAgICBzZWVrYWJsZUlmYWNlLT50cnVu
Y2F0ZV9mbiA9IHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1UcnVuY2F0ZTsKK30KKworc3RhdGlj
IHZvaWQgd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1faW5pdChXZWJLaXRTb3VwSFRUUElu
cHV0U3RyZWFtKiBzdHJlYW0pCit7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFNvdXBIdHRwSW5w
dXRTdHJlYW1RdWV1ZU1lc3NhZ2UoV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSogc3RyZWFtKQor
eworICAgIFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlKiBwcml2ID0gV0VCS0lUX1NP
VVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUoc3RyZWFtKTsKKworICAgIHByaXYtPmdv
dEhlYWRlcnMgPSBwcml2LT5maW5pc2hlZCA9IEZBTFNFOworCisgICAgLyogQWRkIGFuIGV4dHJh
IHJlZiBzaW5jZSBzb3VwX3Nlc3Npb25fcXVldWVfbWVzc2FnZSBzdGVhbHMgb25lICovCisgICAg
Z19vYmplY3RfcmVmKHByaXYtPm1zZyk7CisgICAgc291cF9zZXNzaW9uX3F1ZXVlX21lc3NhZ2Uo
cHJpdi0+c2Vzc2lvbiwgcHJpdi0+bXNnLCAwLCAwKTsKK30KKworLyoqCisgKiB3ZWJraXRfc291
cF9odHRwX2lucHV0X3N0cmVhbV9uZXc6CisgKiBAc2Vzc2lvbjogdGhlICNTb3VwU2Vzc2lvbiB0
byB1c2UKKyAqIEBtc2c6IHRoZSAjU291cE1lc3NhZ2Ugd2hvc2UgcmVzcG9uc2Ugd2lsbCBiZSBz
dHJlYW1lZAorICoKKyAqIFByZXBhcmVzIHRvIHNlbmQgQG1zZyBvdmVyIEBzZXNzaW9uLCBhbmQg
cmV0dXJucyBhICNHSW5wdXRTdHJlYW0KKyAqIHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVhZCB0aGUg
cmVzcG9uc2UuCisgKgorICogQG1zZyBtYXkgbm90IGJlIHNlbnQgdW50aWwgdGhlIGZpcnN0IHJl
YWQgY2FsbDsgaWYgeW91IG5lZWQgdG8gbG9vaworICogYXQgdGhlIHN0YXR1cyBjb2RlIG9yIHJl
c3BvbnNlIGhlYWRlcnMgYmVmb3JlIHJlYWRpbmcgdGhlIGJvZHksIHlvdQorICogY2FuIHVzZSB3
ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kKCkgb3Igd2Via2l0X3NvdXBfaHR0cF9p
bnB1dF9zdHJlYW1fc2VuZF9hc3luYygpCisgKiB0byBmb3JjZSB0aGUgbWVzc2FnZSB0byBiZSBz
ZW50IGFuZCB0aGUgcmVzcG9uc2UgaGVhZGVycyByZWFkLgorICoKKyAqIElmIEBtc2cgZ2V0cyBh
IG5vbi0yeHggcmVzdWx0LCB0aGUgZmlyc3QgcmVhZCAob3Igc2VuZCkgd2lsbCByZXR1cm4KKyAq
IGFuIGVycm9yIHdpdGggdHlwZSAlV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fSFRUUF9F
UlJPUi4KKyAqCisgKiBJbnRlcm5hbGx5LCAjV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSBpcyBp
bXBsZW1lbnRlZCB1c2luZyBhc3luY2hyb25vdXMgSS9PLAorICogc28gaWYgeW91IGFyZSB1c2lu
ZyB0aGUgc3luY2hyb25vdXMgQVBJIChlZywKKyAqIGdfaW5wdXRfc3RyZWFtX3JlYWQoKSksIHlv
dSBzaG91bGQgY3JlYXRlIGEgbmV3ICNHTWFpbkNvbnRleHQgYW5kCisgKiBzZXQgaXQgYXMgdGhl
ICVTT1VQX1NFU1NJT05fQVNZTkNfQ09OVEVYVCBwcm9wZXJ0eSBvbiBAc2Vzc2lvbi4gKElmCisg
KiB5b3UgZG9uJ3QsIHRoZW4gc3luY2hyb25vdXMgI0dJbnB1dFN0cmVhbSBjYWxscyB3aWxsIGNh
dXNlIHRoZSBtYWluCisgKiBsb29wIHRvIGJlIHJ1biByZWN1cnNpdmVseS4pIFRoZSBhc3luYyAj
R0lucHV0U3RyZWFtIEFQSSB3b3JrcyBmaW5lCisgKiB3aXRoICVTT1VQX1NFU1NJT05fQVNZTkNf
Q09OVEVYVCBlaXRoZXIgc2V0IG9yIHVuc2V0LgorICoKKyAqIFJldHVybnM6IGEgbmV3ICNHSW5w
dXRTdHJlYW0uCisgKiovCitXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtKiB3ZWJraXRTb3VwSHR0
cElucHV0U3RyZWFtTmV3KFNvdXBTZXNzaW9uKiBzZXNzaW9uLCBTb3VwTWVzc2FnZSogbXNnKQor
eworICAgIFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0qIHN0cmVhbTsKKyAgICBXZWJLaXRTb3Vw
SFRUUElucHV0U3RyZWFtUHJpdmF0ZSogcHJpdjsKKworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFNPVVBfSVNfTUVTU0FHRShtc2cpLCAwKTsKKworICAgIHN0cmVhbSA9IChXZWJLaXRTb3VwSFRU
UElucHV0U3RyZWFtKilnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfU09VUF9IVFRQX0lOUFVUX1NU
UkVBTSwgMCk7CisgICAgcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9Q
UklWQVRFKHN0cmVhbSk7CisKKyAgICBwcml2LT5zZXNzaW9uID0gKFNvdXBTZXNzaW9uKilnX29i
amVjdF9yZWYoc2Vzc2lvbik7CisgICAgcHJpdi0+YXN5bmNDb250ZXh0ID0gc291cF9zZXNzaW9u
X2dldF9hc3luY19jb250ZXh0KHNlc3Npb24pOworICAgIHByaXYtPm1zZyA9IChTb3VwTWVzc2Fn
ZSopZ19vYmplY3RfcmVmKG1zZyk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1zZywgImdvdF9o
ZWFkZXJzIiwKKyAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sod2Via2l0U291cEh0dHBJ
bnB1dFN0cmVhbUdvdEhlYWRlcnMpLCBzdHJlYW0pOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobXNn
LCAiZ290X2NodW5rIiwKKyAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sod2Via2l0U291
cEh0dHBJbnB1dFN0cmVhbUdvdENodW5rKSwgc3RyZWFtKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0
KG1zZywgImZpbmlzaGVkIiwKKyAgICAgICAgICAgICAgICAgICAgIEdfQ0FMTEJBQ0sod2Via2l0
U291cEh0dHBJbnB1dFN0cmVhbUZpbmlzaGVkKSwgc3RyZWFtKTsKKworICAgIHdlYmtpdFNvdXBI
dHRwSW5wdXRTdHJlYW1RdWV1ZU1lc3NhZ2Uoc3RyZWFtKTsKKyAgICByZXR1cm4gc3RyZWFtOwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRTb3VwSHR0cElucHV0U3RyZWFtR290SGVhZGVycyhTb3Vw
TWVzc2FnZSogbXNnLCBncG9pbnRlciBzdHJlYW0pCit7CisgICAgV2ViS2l0U291cEhUVFBJbnB1
dFN0cmVhbVByaXZhdGUqIHByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRf
UFJJVkFURShzdHJlYW0pOworCisgICAgLyogSWYgdGhlIHN0YXR1cyBpcyB1bnN1Y2Nlc3NmdWws
IHdlIGp1c3QgaWdub3JlIHRoZSBzaWduYWwgYW5kIGxldAorICAgICAqIGxpYnNvdXAga2VlcCBn
b2luZyAoZXZlbnR1YWxseSBlaXRoZXIgaXQgd2lsbCByZXF1ZXVlIHRoZSByZXF1ZXN0CisgICAg
ICogKGFmdGVyIGhhbmRsaW5nIGF1dGhlbnRpY2F0aW9uL3JlZGlyZWN0aW9uKSwgb3IgZWxzZSB0
aGUKKyAgICAgKiAiZmluaXNoZWQiIGhhbmRsZXIgd2lsbCBydW4pLgorICAgICAqLworICAgIGlm
ICghU09VUF9TVEFUVVNfSVNfU1VDQ0VTU0ZVTChtc2ctPnN0YXR1c19jb2RlKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgcHJpdi0+Z290SGVhZGVycyA9IFRSVUU7CisgICAgaWYgKCFwcml2LT5j
YWxsZXJCdWZmZXIpIHsKKyAgICAgICAgLyogTm90IHJlYWR5IHRvIHJlYWQgdGhlIGJvZHkgeWV0
ICovCisgICAgICAgIHNvdXBfc2Vzc2lvbl9wYXVzZV9tZXNzYWdlKHByaXYtPnNlc3Npb24sIG1z
Zyk7CisgICAgfQorCisgICAgaWYgKHByaXYtPmdvdEhlYWRlcnNDYikKKyAgICAgICAgcHJpdi0+
Z290SGVhZGVyc0NiKChHSW5wdXRTdHJlYW0qKXN0cmVhbSk7Cit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1Hb3RDaHVuayhTb3VwTWVzc2FnZSogbXNnLCBTb3VwQnVm
ZmVyKiBjaHVua0J1ZmZlciwgZ3BvaW50ZXIgc3RyZWFtKQoreworICAgIFdlYktpdFNvdXBIVFRQ
SW5wdXRTdHJlYW1Qcml2YXRlKiBwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1f
R0VUX1BSSVZBVEUoc3RyZWFtKTsKKyAgICBjb25zdCBnY2hhciogY2h1bmsgPSBjaHVua0J1ZmZl
ci0+ZGF0YTsKKyAgICBnc2l6ZSBjaHVua1NpemUgPSBjaHVua0J1ZmZlci0+bGVuZ3RoOworCisg
ICAgLyogV2Ugb25seSBwYXkgYXR0ZW50aW9uIHRvIHRoZSBjaHVuayBpZiBpdCdzIHBhcnQgb2Yg
YSBzdWNjZXNzZnVsCisgICAgICogcmVzcG9uc2UuCisgICAgICovCisgICAgaWYgKCFTT1VQX1NU
QVRVU19JU19TVUNDRVNTRlVMKG1zZy0+c3RhdHVzX2NvZGUpKQorICAgICAgICByZXR1cm47CisK
KyAgICAvKiBTYW5pdHkgY2hlY2sgKi8KKyAgICBpZiAoIXByaXYtPmNhbGxlckJ1ZnNpemUgfHwg
cHJpdi0+bGVmdG92ZXJCdWZzaXplKQorICAgICAgICBnX3dhcm5pbmcoIndlYmtpdF9zb3VwX2h0
dHBfaW5wdXRfc3RyZWFtX2dvdF9jaHVuayBjYWxsZWQgYWdhaW4gYmVmb3JlIHByZXZpb3VzIGNo
dW5rIHdhcyBwcm9jZXNzZWQiKTsKKworICAgIC8qIENvcHkgd2hhdCB3ZSBjYW4gaW50byBwcml2
LT5jYWxsZXJCdWZmZXIgKi8KKyAgICBpZiAocHJpdi0+Y2FsbGVyQnVmc2l6ZSAtIHByaXYtPmNh
bGxlck5yZWFkID4gMCkgeworICAgICAgICBnc2l6ZSBucmVhZCA9IHN0ZDo6bWluKGNodW5rU2l6
ZSwgcHJpdi0+Y2FsbGVyQnVmc2l6ZSAtIHByaXYtPmNhbGxlck5yZWFkKTsKKworICAgICAgICBt
ZW1jcHkocHJpdi0+Y2FsbGVyQnVmZmVyICsgcHJpdi0+Y2FsbGVyTnJlYWQsIGNodW5rLCBucmVh
ZCk7CisgICAgICAgIHByaXYtPmNhbGxlck5yZWFkICs9IG5yZWFkOworICAgICAgICBwcml2LT5v
ZmZzZXQgKz0gbnJlYWQ7CisgICAgICAgIGNodW5rICs9IG5yZWFkOworICAgICAgICBjaHVua1Np
emUgLT0gbnJlYWQ7CisgICAgfQorCisgICAgaWYgKGNodW5rU2l6ZSA+IDApIHsKKyAgICAgICAg
LyogQ29weSB0aGUgcmVzdCBpbnRvIHByaXYtPmxlZnRvdmVyQnVmZmVyLiBJZgorICAgICAgICAg
KiB0aGVyZSdzIGFscmVhZHkgc29tZSBkYXRhIHRoZXJlLCByZWFsbG9jIGFuZAorICAgICAgICAg
KiBhcHBlbmQuIE90aGVyd2lzZSBqdXN0IGNvcHkuCisgICAgICAgICAqLworICAgICAgICBpZiAo
cHJpdi0+bGVmdG92ZXJCdWZzaXplKSB7CisgICAgICAgICAgICBwcml2LT5sZWZ0b3ZlckJ1ZmZl
ciA9IChndWNoYXIqKSBnX3JlYWxsb2MocHJpdi0+bGVmdG92ZXJCdWZmZXIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPmxlZnRv
dmVyQnVmc2l6ZSArIGNodW5rU2l6ZSk7CisgICAgICAgICAgICBtZW1jcHkocHJpdi0+bGVmdG92
ZXJCdWZmZXIgKyBwcml2LT5sZWZ0b3ZlckJ1ZnNpemUsCisgICAgICAgICAgICAgICAgICAgY2h1
bmssIGNodW5rU2l6ZSk7CisgICAgICAgICAgICBwcml2LT5sZWZ0b3ZlckJ1ZnNpemUgKz0gY2h1
bmtTaXplOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJpdi0+bGVmdG92ZXJCdWZz
aXplID0gY2h1bmtTaXplOworICAgICAgICAgICAgcHJpdi0+bGVmdG92ZXJCdWZmZXIgPSAoZ3Vj
aGFyKikgZ19tZW1kdXAoY2h1bmssIGNodW5rU2l6ZSk7CisgICAgICAgICAgICBwcml2LT5sZWZ0
b3Zlck9mZnNldCA9IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzb3VwX3Nlc3Npb25fcGF1
c2VfbWVzc2FnZShwcml2LT5zZXNzaW9uLCBtc2cpOworICAgIGlmIChwcml2LT5nb3RDaHVua0Ni
KQorICAgICAgICBwcml2LT5nb3RDaHVua0NiKChHSW5wdXRTdHJlYW0qKXN0cmVhbSk7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1GaW5pc2hlZChTb3VwTWVzc2Fn
ZSogbXNnLCBncG9pbnRlciBzdHJlYW0pCit7CisgICAgV2ViS2l0U291cEhUVFBJbnB1dFN0cmVh
bVByaXZhdGUqIHByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFU
RShzdHJlYW0pOworCisgICAgcHJpdi0+ZmluaXNoZWQgPSBUUlVFOworCisgICAgaWYgKHByaXYt
PmZpbmlzaGVkQ2IpCisgICAgICAgIHByaXYtPmZpbmlzaGVkQ2IoKEdJbnB1dFN0cmVhbSopc3Ry
ZWFtKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1DYW5j
ZWxsZWQoR0lPQ2hhbm5lbCogY2hhbiwgR0lPQ29uZGl0aW9uIGNvbmRpdGlvbiwgZ3BvaW50ZXIg
c3RyZWFtKQoreworICAgIFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlKiBwcml2ID0g
V0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUoc3RyZWFtKTsKKworICAg
IHByaXYtPmNhbmNlbFdhdGNoID0gMDsKKworICAgIHNvdXBfc2Vzc2lvbl9wYXVzZV9tZXNzYWdl
KHByaXYtPnNlc3Npb24sIHByaXYtPm1zZyk7CisgICAgaWYgKHByaXYtPmNhbmNlbGxlZENiKQor
ICAgICAgICBwcml2LT5jYW5jZWxsZWRDYigoR0lucHV0U3RyZWFtKilzdHJlYW0pOworCisgICAg
cmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRTb3VwSHR0cElucHV0U3RyZWFt
UHJlcGFyZUZvcklvKEdJbnB1dFN0cmVhbSogc3RyZWFtLCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxh
YmxlLCBndWNoYXIqIGJ1ZmZlciwgZ3NpemUgY291bnQpCit7CisgICAgV2ViS2l0U291cEhUVFBJ
bnB1dFN0cmVhbVByaXZhdGUqIHByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9H
RVRfUFJJVkFURShzdHJlYW0pOworICAgIGludCBjYW5jZWxGZDsKKworICAgIHByaXYtPmNhbmNl
bGxhYmxlID0gY2FuY2VsbGFibGU7CisgICAgY2FuY2VsRmQgPSBnX2NhbmNlbGxhYmxlX2dldF9m
ZChjYW5jZWxsYWJsZSk7CisgICAgaWYgKGNhbmNlbEZkICE9IC0xKSB7CisgICAgICAgIEdJT0No
YW5uZWwqIGNoYW4gPSBnX2lvX2NoYW5uZWxfdW5peF9uZXcoY2FuY2VsRmQpOworICAgICAgICBw
cml2LT5jYW5jZWxXYXRjaCA9IHNvdXBfYWRkX2lvX3dhdGNoKHByaXYtPmFzeW5jQ29udGV4dCwg
Y2hhbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdJ
T0NvbmRpdGlvbikgKEdfSU9fSU4gfCBHX0lPX0VSUiB8IEdfSU9fSFVQKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Via2l0U291cEh0dHBJbnB1dFN0
cmVhbUNhbmNlbGxlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RyZWFtKTsKKyAgICAgICAgZ19pb19jaGFubmVsX3VucmVmKGNoYW4pOworICAgIH0K
KworICAgIHByaXYtPmNhbGxlckJ1ZmZlciA9IGJ1ZmZlcjsKKyAgICBwcml2LT5jYWxsZXJCdWZz
aXplID0gY291bnQ7CisgICAgcHJpdi0+Y2FsbGVyTnJlYWQgPSAwOworCisgICAgaWYgKHByaXYt
PmdvdEhlYWRlcnMpCisgICAgICAgIHNvdXBfc2Vzc2lvbl91bnBhdXNlX21lc3NhZ2UocHJpdi0+
c2Vzc2lvbiwgcHJpdi0+bXNnKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0U291cEh0dHBJbnB1
dFN0cmVhbURvbmVJbyhHSW5wdXRTdHJlYW0qIHN0cmVhbSkKK3sKKyAgICBXZWJLaXRTb3VwSFRU
UElucHV0U3RyZWFtUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFN
X0dFVF9QUklWQVRFKHN0cmVhbSk7CisKKyAgICBpZiAocHJpdi0+Y2FuY2VsV2F0Y2gpIHsKKyAg
ICAgICAgZ19zb3VyY2VfZGVzdHJveShwcml2LT5jYW5jZWxXYXRjaCk7CisgICAgICAgIHByaXYt
PmNhbmNlbFdhdGNoID0gMDsKKyAgICAgICAgZ19jYW5jZWxsYWJsZV9yZWxlYXNlX2ZkKHByaXYt
PmNhbmNlbGxhYmxlKTsKKyAgICB9CisgICAgcHJpdi0+Y2FuY2VsbGFibGUgPSAwOworCisgICAg
cHJpdi0+Y2FsbGVyQnVmZmVyID0gMDsKKyAgICBwcml2LT5jYWxsZXJCdWZzaXplID0gMDsKK30K
Kworc3RhdGljIGdib29sZWFuIHNldEVycm9ySWZIVFRQRmFpbGVkKFNvdXBNZXNzYWdlKiBtc2cs
IEdFcnJvcioqIGVycm9yKQoreworICAgIGlmICghU09VUF9TVEFUVVNfSVNfU1VDQ0VTU0ZVTCht
c2ctPnN0YXR1c19jb2RlKSkgeworICAgICAgICBnX3NldF9lcnJvcl9saXRlcmFsKGVycm9yLCBT
T1VQX0hUVFBfRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLT5zdGF0dXNf
Y29kZSwgbXNnLT5yZWFzb25fcGhyYXNlKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQor
ICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGdzaXplIHJlYWRGcm9tTGVmdG92ZXIoV2Vi
S2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUqIHByaXYsIGdwb2ludGVyIGJ1ZmZlciwgZ3Np
emUgYnVmc2l6ZSkKK3sKKyAgICBnc2l6ZSBucmVhZDsKKworICAgIGlmIChwcml2LT5sZWZ0b3Zl
ckJ1ZnNpemUgLSBwcml2LT5sZWZ0b3Zlck9mZnNldCA8PSBidWZzaXplKSB7CisgICAgICAgIG5y
ZWFkID0gcHJpdi0+bGVmdG92ZXJCdWZzaXplIC0gcHJpdi0+bGVmdG92ZXJPZmZzZXQ7CisgICAg
ICAgIG1lbWNweShidWZmZXIsIHByaXYtPmxlZnRvdmVyQnVmZmVyICsgcHJpdi0+bGVmdG92ZXJP
ZmZzZXQsIG5yZWFkKTsKKworICAgICAgICBnX2ZyZWUocHJpdi0+bGVmdG92ZXJCdWZmZXIpOwor
ICAgICAgICBwcml2LT5sZWZ0b3ZlckJ1ZmZlciA9IDA7CisgICAgICAgIHByaXYtPmxlZnRvdmVy
QnVmc2l6ZSA9IHByaXYtPmxlZnRvdmVyT2Zmc2V0ID0gMDsKKyAgICB9IGVsc2UgeworICAgICAg
ICBucmVhZCA9IGJ1ZnNpemU7CisgICAgICAgIG1lbWNweShidWZmZXIsIHByaXYtPmxlZnRvdmVy
QnVmZmVyICsgcHJpdi0+bGVmdG92ZXJPZmZzZXQsIG5yZWFkKTsKKyAgICAgICAgcHJpdi0+bGVm
dG92ZXJPZmZzZXQgKz0gbnJlYWQ7CisgICAgfQorCisgICAgcHJpdi0+b2Zmc2V0ICs9IG5yZWFk
OworICAgIHJldHVybiBucmVhZDsKK30KKworLyogVGhpcyBkb2VzIHRoZSB3b3JrIG9mIHdlYmtp
dF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmQoKSwgYXNzdW1pbmcgdGhhdCB0aGUKKyAqIEdJ
bnB1dFN0cmVhbSBwZW5kaW5nIGZsYWcgaGFzIGFscmVhZHkgYmVlbiBzZXQuIEl0IGlzIGFsc28g
dXNlZCBieQorICogd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luYygpIGlu
IHNvbWUgY2lyY3Vtc3RhbmNlcy4KKyAqLworc3RhdGljIGdib29sZWFuIHdlYmtpdFNvdXBIdHRw
SW5wdXRTdHJlYW1TZW5kSW50ZXJuYWwoR0lucHV0U3RyZWFtKiBzdHJlYW0sIEdDYW5jZWxsYWJs
ZSogY2FuY2VsbGFibGUsIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYktpdFNvdXBIVFRQSW5w
dXRTdHJlYW1Qcml2YXRlKiBwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VU
X1BSSVZBVEUoc3RyZWFtKTsKKworICAgIHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1QcmVwYXJl
Rm9ySW8oc3RyZWFtLCBjYW5jZWxsYWJsZSwgMCwgMCk7CisgICAgd2hpbGUgKCFwcml2LT5maW5p
c2hlZCAKKyAgICAgICAgICAgJiYgIXByaXYtPmdvdEhlYWRlcnMKKyAgICAgICAgICAgJiYgIWdf
Y2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkKGNhbmNlbGxhYmxlKSkKKyAgICAgICAgZ19tYWluX2Nv
bnRleHRfaXRlcmF0aW9uKHByaXYtPmFzeW5jQ29udGV4dCwgVFJVRSk7CisgICAgd2Via2l0U291
cEh0dHBJbnB1dFN0cmVhbURvbmVJbyhzdHJlYW0pOworCisgICAgaWYgKGdfY2FuY2VsbGFibGVf
c2V0X2Vycm9yX2lmX2NhbmNlbGxlZChjYW5jZWxsYWJsZSwgZXJyb3IpKQorICAgICAgICByZXR1
cm4gRkFMU0U7CisgICAgaWYgKHNldEVycm9ySWZIVFRQRmFpbGVkKHByaXYtPm1zZywgZXJyb3Ip
KQorICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2
b2lkIHNlbmRTeW5jRmluaXNoZWQoR0lucHV0U3RyZWFtKiBzdHJlYW0pCit7CisgICAgV2ViS2l0
U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUqIHByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVU
X1NUUkVBTV9HRVRfUFJJVkFURShzdHJlYW0pOworICAgIEdFcnJvciogZXJyb3IgPSAwOworCisg
ICAgaWYgKCFnX2NhbmNlbGxhYmxlX3NldF9lcnJvcl9pZl9jYW5jZWxsZWQocHJpdi0+Y2FuY2Vs
bGFibGUsICZlcnJvcikpCisgICAgICAgIHNldEVycm9ySWZIVFRQRmFpbGVkKHByaXYtPm1zZywg
JmVycm9yKTsKKworICAgIHByaXYtPmdvdEhlYWRlcnNDYiA9IDA7CisgICAgcHJpdi0+ZmluaXNo
ZWRDYiA9IDA7CisKKyAgICAvKiBXYWtlIHVwIHRoZSBtYWluIGNvbnRleHQgaXRlcmF0aW9uICov
CisgICAgZ19zb3VyY2VfYXR0YWNoKGdfaWRsZV9zb3VyY2VfbmV3KCksIDApOworfQorCisvKioK
KyAqIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmQ6CisgKiBAaHR0cHN0cmVhbTog
YSAjV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbQorICogQGNhbmNlbGxhYmxlOiBvcHRpb25hbCAj
R0NhbmNlbGxhYmxlIG9iamVjdCwgJTAgdG8gaWdub3JlLgorICogQGVycm9yOiBsb2NhdGlvbiB0
byBzdG9yZSB0aGUgZXJyb3Igb2NjdXJpbmcsIG9yICUwIHRvIGlnbm9yZQorICoKKyAqIFN5bmNo
cm9ub3VzbHkgc2VuZHMgdGhlIEhUVFAgcmVxdWVzdCBhc3NvY2lhdGVkIHdpdGggQHN0cmVhbSwg
YW5kCisgKiByZWFkcyB0aGUgcmVzcG9uc2UgaGVhZGVycy4gQ2FsbCB0aGlzIGFmdGVyIHdlYmtp
dF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX25ldygpCisgKiBhbmQgYmVmb3JlIHRoZSBmaXJzdCBn
X2lucHV0X3N0cmVhbV9yZWFkKCkgaWYgeW91IHdhbnQgdG8gY2hlY2sgdGhlCisgKiBIVFRQIHN0
YXR1cyBjb2RlIGJlZm9yZSB5b3Ugc3RhcnQgcmVhZGluZy4KKyAqCisgKiBSZXR1cm4gdmFsdWU6
ICVUUlVFIGlmIG1zZyBoYXMgYSBzdWNjZXNzZnVsICgyeHgpIHN0YXR1cywgJUZBTFNFIGlmCisg
KiBub3QuCisgKiovCitnYm9vbGVhbiB3ZWJraXRTb3VwSHR0cElucHV0U3RyZWFtU2VuZChXZWJL
aXRTb3VwSFRUUElucHV0U3RyZWFtKiBodHRwc3RyZWFtLCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxh
YmxlLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJp
dmF0ZSogcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFKGh0
dHBzdHJlYW0pOworICAgIEdJbnB1dFN0cmVhbSogaXN0cmVhbSA9IChHSW5wdXRTdHJlYW0qKWh0
dHBzdHJlYW07CisgICAgZ2Jvb2xlYW4gcmVzdWx0OworCisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX1NPVVBfSVNfSFRUUF9JTlBVVF9TVFJFQU0oaHR0cHN0cmVhbSksIEZBTFNFKTsK
KworICAgIGlmICghZ19pbnB1dF9zdHJlYW1fc2V0X3BlbmRpbmcoaXN0cmVhbSwgZXJyb3IpKQor
ICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBwcml2LT5nb3RIZWFkZXJzQ2IgPSBzZW5kU3lu
Y0ZpbmlzaGVkOworICAgIHByaXYtPmZpbmlzaGVkQ2IgPSBzZW5kU3luY0ZpbmlzaGVkOworCisg
ICAgcmVzdWx0ID0gd2Via2l0U291cEh0dHBJbnB1dFN0cmVhbVNlbmRJbnRlcm5hbChpc3RyZWFt
LCBjYW5jZWxsYWJsZSwgZXJyb3IpOworICAgIGdfaW5wdXRfc3RyZWFtX2NsZWFyX3BlbmRpbmco
aXN0cmVhbSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ3NzaXplIHdlYmtp
dFNvdXBIdHRwSW5wdXRTdHJlYW1SZWFkKEdJbnB1dFN0cmVhbSogc3RyZWFtLCB2b2lkKiBidWZm
ZXIsIGdzaXplIGNvdW50LCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlLCBHRXJyb3IqKiBlcnJv
cikKK3sKKyAgICBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSogcHJpdiA9IFdFQktJ
VF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFKHN0cmVhbSk7CisKKyAgICBpZiAo
cHJpdi0+ZmluaXNoZWQpCisgICAgICAgIHJldHVybiAwOworCisgICAgLyogSWYgdGhlcmUgaXMg
ZGF0YSBsZWZ0b3ZlciBmcm9tIGEgcHJldmlvdXMgcmVhZCwgcmV0dXJuIGl0LiAqLworICAgIGlm
IChwcml2LT5sZWZ0b3ZlckJ1ZnNpemUpCisgICAgICAgIHJldHVybiByZWFkRnJvbUxlZnRvdmVy
KHByaXYsIGJ1ZmZlciwgY291bnQpOworCisgICAgLyogTm8gbGVmdG92ZXIgZGF0YSwgYWNjZXB0
IG9uZSBjaHVuayBmcm9tIHRoZSBuZXR3b3JrICovCisgICAgd2Via2l0U291cEh0dHBJbnB1dFN0
cmVhbVByZXBhcmVGb3JJbyhzdHJlYW0sIGNhbmNlbGxhYmxlLCAoZ3VjaGFyKilidWZmZXIsIGNv
dW50KTsKKyAgICB3aGlsZSAoIXByaXYtPmZpbmlzaGVkIAorICAgICAgICAgICAmJiAhcHJpdi0+
Y2FsbGVyTnJlYWQKKyAgICAgICAgICAgJiYgIWdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkKGNh
bmNlbGxhYmxlKSkKKyAgICAgICAgZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uKHByaXYtPmFzeW5j
Q29udGV4dCwgVFJVRSk7CisgICAgd2Via2l0U291cEh0dHBJbnB1dFN0cmVhbURvbmVJbyhzdHJl
YW0pOworCisgICAgaWYgKHByaXYtPmNhbGxlck5yZWFkID4gMCkKKyAgICAgICAgcmV0dXJuIHBy
aXYtPmNhbGxlck5yZWFkOworCisgICAgaWYgKGdfY2FuY2VsbGFibGVfc2V0X2Vycm9yX2lmX2Nh
bmNlbGxlZChjYW5jZWxsYWJsZSwgZXJyb3IpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYg
KHNldEVycm9ySWZIVFRQRmFpbGVkKHByaXYtPm1zZywgZXJyb3IpKQorICAgICAgICByZXR1cm4g
LTE7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdFNvdXBIdHRw
SW5wdXRTdHJlYW1DbG9zZShHSW5wdXRTdHJlYW0qIHN0cmVhbSwgR0NhbmNlbGxhYmxlKiBjYW5j
ZWxsYWJsZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViS2l0U291cEhUVFBJbnB1dFN0cmVh
bVByaXZhdGUqIHByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFU
RShzdHJlYW0pOworCisgICAgaWYgKCFwcml2LT5maW5pc2hlZCkKKyAgICAgICAgc291cF9zZXNz
aW9uX2NhbmNlbF9tZXNzYWdlKHByaXYtPnNlc3Npb24sIHByaXYtPm1zZywgU09VUF9TVEFUVVNf
Q0FOQ0VMTEVEKTsKKworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCB3cmFwcGVy
Q2FsbGJhY2soR09iamVjdCogc291cmNlT2JqZWN0LCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50
ZXIgdXNlckRhdGEpCit7CisgICAgR0lucHV0U3RyZWFtKiBzdHJlYW0gPSBHX0lOUFVUX1NUUkVB
TShzb3VyY2VPYmplY3QpOworICAgIFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlKiBw
cml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUoc3RyZWFtKTsK
KworICAgIGdfaW5wdXRfc3RyZWFtX2NsZWFyX3BlbmRpbmcoc3RyZWFtKTsKKyAgICBpZiAocHJp
di0+b3V0c3RhbmRpbmdDYWxsYmFjaykKKyAgICAgICAgKCpwcml2LT5vdXRzdGFuZGluZ0NhbGxi
YWNrKShzb3VyY2VPYmplY3QsIHJlcywgdXNlckRhdGEpOworICAgIHByaXYtPm91dHN0YW5kaW5n
Q2FsbGJhY2sgPSAwOworICAgIGdfb2JqZWN0X3VucmVmKHN0cmVhbSk7Cit9CisKK3N0YXRpYyB2
b2lkIHNlbmRBc3luY1RocmVhZChHU2ltcGxlQXN5bmNSZXN1bHQqIHJlcywgR09iamVjdCogb2Jq
ZWN0LCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlKQoreworICAgIEdFcnJvciogZXJyb3IgPSAw
OworICAgIGdib29sZWFuIHN1Y2Nlc3M7CisKKyAgICBzdWNjZXNzID0gd2Via2l0U291cEh0dHBJ
bnB1dFN0cmVhbVNlbmRJbnRlcm5hbChHX0lOUFVUX1NUUkVBTShvYmplY3QpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbGxhYmxlLCAm
ZXJyb3IpOworICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dib29sZWFuKHJl
cywgc3VjY2Vzcyk7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jl
c3VsdF9zZXRfZnJvbV9lcnJvcihyZXMsIGVycm9yKTsKKyAgICAgICAgZ19lcnJvcl9mcmVlKGVy
cm9yKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1T
ZW5kQXN5bmNJblRocmVhZChHSW5wdXRTdHJlYW0qIHN0cmVhbSwgaW50IGlvUHJpb3JpdHksIEdD
YW5jZWxsYWJsZSogY2FuY2VsbGFibGUsIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssIGdw
b2ludGVyIHVzZXJEYXRhKQoreworICAgIEdTaW1wbGVBc3luY1Jlc3VsdCogcmVzOworCisgICAg
cmVzID0gZ19zaW1wbGVfYXN5bmNfcmVzdWx0X25ldyhHX09CSkVDVChzdHJlYW0pLCBjYWxsYmFj
aywgdXNlckRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ3BvaW50
ZXIpIHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1TZW5kQXN5bmNJblRocmVhZCk7CisgICAgZ19z
aW1wbGVfYXN5bmNfcmVzdWx0X3J1bl9pbl90aHJlYWQocmVzLCBzZW5kQXN5bmNUaHJlYWQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9Qcmlvcml0eSwgY2FuY2Vs
bGFibGUpOworICAgIGdfb2JqZWN0X3VucmVmKHJlcyk7Cit9CisKK3N0YXRpYyB2b2lkIHNlbmRB
c3luY0ZpbmlzaGVkKEdJbnB1dFN0cmVhbSogc3RyZWFtKQoreworICAgIFdlYktpdFNvdXBIVFRQ
SW5wdXRTdHJlYW1Qcml2YXRlKiBwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1f
R0VUX1BSSVZBVEUoc3RyZWFtKTsKKyAgICBHU2ltcGxlQXN5bmNSZXN1bHQqIHJlc3VsdDsKKyAg
ICBHRXJyb3IqIGVycm9yID0gMDsKKworICAgIGlmICghZ19jYW5jZWxsYWJsZV9zZXRfZXJyb3Jf
aWZfY2FuY2VsbGVkKHByaXYtPmNhbmNlbGxhYmxlLCAmZXJyb3IpKQorICAgICAgICBzZXRFcnJv
cklmSFRUUEZhaWxlZChwcml2LT5tc2csICZlcnJvcik7CisKKyAgICBwcml2LT5nb3RIZWFkZXJz
Q2IgPSAwOworICAgIHByaXYtPmZpbmlzaGVkQ2IgPSAwOworICAgIHdlYmtpdFNvdXBIdHRwSW5w
dXRTdHJlYW1Eb25lSW8oc3RyZWFtKTsKKworICAgIHJlc3VsdCA9IHByaXYtPnJlc3VsdDsKKyAg
ICBwcml2LT5yZXN1bHQgPSAwOworCisgICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9y
ZXNfZ2Jvb2xlYW4ocmVzdWx0LCAhZXJyb3IpOworICAgIGlmIChlcnJvcikgeworICAgICAgICBn
X3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X2Zyb21fZXJyb3IocmVzdWx0LCBlcnJvcik7CisgICAg
ICAgIGdfZXJyb3JfZnJlZShlcnJvcik7CisgICAgfQorICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3Vs
dF9jb21wbGV0ZShyZXN1bHQpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRTb3VwSHR0cElucHV0
U3RyZWFtU2VuZEFzeW5jSW50ZXJuYWwoR0lucHV0U3RyZWFtKiBzdHJlYW0sIGludCBpb1ByaW9y
aXR5LCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlLCBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxi
YWNrLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFt
UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRF
KHN0cmVhbSk7CisKKyAgICBnX29iamVjdF9yZWYoc3RyZWFtKTsKKyAgICBwcml2LT5vdXRzdGFu
ZGluZ0NhbGxiYWNrID0gY2FsbGJhY2s7CisKKyAgICAvKiBJZiB0aGUgc2Vzc2lvbiB1c2VzIHRo
ZSBkZWZhdWx0IEdNYWluQ29udGV4dCwgdGhlbiB3ZSBjYW4gZG8KKyAgICAgKiBhc3luYyBJL08g
ZGlyZWN0bHkuIEJ1dCBpZiBpdCBoYXMgaXRzIG93biBtYWluIGNvbnRleHQsIGl0J3MKKyAgICAg
KiBlYXNpZXIgdG8ganVzdCBydW4gaXQgaW4gYW5vdGhlciB0aHJlYWQuCisgICAgICovCisgICAg
aWYgKHNvdXBfc2Vzc2lvbl9nZXRfYXN5bmNfY29udGV4dChwcml2LT5zZXNzaW9uKSkgeworICAg
ICAgICB3ZWJraXRTb3VwSHR0cElucHV0U3RyZWFtU2VuZEFzeW5jSW5UaHJlYWQoc3RyZWFtLCBp
b1ByaW9yaXR5LCBjYW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDYWxsYmFjaywgdXNlckRhdGEpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgcHJpdi0+Z290SGVhZGVyc0NiID0gc2VuZEFzeW5jRmluaXNo
ZWQ7CisgICAgcHJpdi0+ZmluaXNoZWRDYiA9IHNlbmRBc3luY0ZpbmlzaGVkOworCisgICAgd2Vi
a2l0U291cEh0dHBJbnB1dFN0cmVhbVByZXBhcmVGb3JJbyhzdHJlYW0sIGNhbmNlbGxhYmxlLCAw
LCAwKTsKKyAgICBwcml2LT5yZXN1bHQgPSBnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3KEdfT0JK
RUNUKHN0cmVhbSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3cmFwcGVyQ2FsbGJhY2ssIHVzZXJEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGdwb2ludGVyKSB3ZWJraXRTb3VwSHR0cElucHV0U3RyZWFtU2Vu
ZEFzeW5jKTsKK30KKworLyoqCisgKiB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5k
X2FzeW5jOgorICogQGh0dHBzdHJlYW06IGEgI1dlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0KKyAq
IEBpb1ByaW9yaXR5OiB0aGUgaW8gcHJpb3JpdHkgb2YgdGhlIHJlcXVlc3QuCisgKiBAY2FuY2Vs
bGFibGU6IG9wdGlvbmFsICNHQ2FuY2VsbGFibGUgb2JqZWN0LCAlMCB0byBpZ25vcmUuCisgKiBA
Y2FsbGJhY2s6IGNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgcmVxdWVzdCBpcyBzYXRpc2ZpZWQK
KyAqIEB1c2VyRGF0YTogdGhlIGRhdGEgdG8gcGFzcyB0byBjYWxsYmFjayBmdW5jdGlvbgorICoK
KyAqIEFzeW5jaHJvbm91c2x5IHNlbmRzIHRoZSBIVFRQIHJlcXVlc3QgYXNzb2NpYXRlZCB3aXRo
IEBzdHJlYW0sIGFuZAorICogcmVhZHMgdGhlIHJlc3BvbnNlIGhlYWRlcnMuIENhbGwgdGhpcyBh
ZnRlciB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9uZXcoKQorICogYW5kIGJlZm9yZSB0
aGUgZmlyc3QgZ19pbnB1dF9zdHJlYW1fcmVhZF9hc3luYygpIGlmIHlvdSB3YW50IHRvCisgKiBj
aGVjayB0aGUgSFRUUCBzdGF0dXMgY29kZSBiZWZvcmUgeW91IHN0YXJ0IHJlYWRpbmcuCisgKiov
Cit2b2lkIHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1TZW5kQXN5bmMoV2ViS2l0U291cEhUVFBJ
bnB1dFN0cmVhbSogaHR0cHN0cmVhbSwgaW50IGlvUHJpb3JpdHksIEdDYW5jZWxsYWJsZSogY2Fu
Y2VsbGFibGUsIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJEYXRh
KQoreworICAgIEdJbnB1dFN0cmVhbSogaXN0cmVhbSA9IChHSW5wdXRTdHJlYW0qKWh0dHBzdHJl
YW07CisgICAgR0Vycm9yKiBlcnJvciA9IDA7CisKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9TT1VQX0lTX0hUVFBfSU5QVVRfU1RSRUFNKGh0dHBzdHJlYW0pKTsKKworICAgIGlmICghZ19p
bnB1dF9zdHJlYW1fc2V0X3BlbmRpbmcoaXN0cmVhbSwgJmVycm9yKSkgeworICAgICAgICBnX3Np
bXBsZV9hc3luY19yZXBvcnRfZ2Vycm9yX2luX2lkbGUoR19PQkpFQ1QoaHR0cHN0cmVhbSksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJEYXRhLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IpOworICAgICAg
ICBnX2Vycm9yX2ZyZWUoZXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHdlYmtp
dFNvdXBIdHRwSW5wdXRTdHJlYW1TZW5kQXN5bmNJbnRlcm5hbChpc3RyZWFtLCBpb1ByaW9yaXR5
LCBjYW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2FsbGJhY2ssIHVzZXJEYXRhKTsKK30KKworLyoqCisgKiB3ZWJraXRfc291cF9odHRw
X2lucHV0X3N0cmVhbV9zZW5kX2ZpbmlzaDoKKyAqIEBodHRwc3RyZWFtOiBhICNXZWJLaXRTb3Vw
SFRUUElucHV0U3RyZWFtCisgKiBAcmVzdWx0OiBhICNHQXN5bmNSZXN1bHQuCisgKiBAZXJyb3I6
IGEgI0dFcnJvciBsb2NhdGlvbiB0byBzdG9yZSB0aGUgZXJyb3Igb2NjdXJpbmcsIG9yICUwIHRv
CisgKiBpZ25vcmUuCisgKgorICogRmluaXNoZXMgYSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0
cmVhbV9zZW5kX2FzeW5jKCkgb3BlcmF0aW9uLgorICoKKyAqIFJldHVybiB2YWx1ZTogJVRSVUUg
aWYgdGhlIG1lc3NhZ2Ugd2FzIHNlbnQgc3VjY2Vzc2Z1bGx5IGFuZAorICogcmVjZWl2ZWQgYSBz
dWNjZXNzZnVsIHN0YXR1cyBjb2RlLCAlRkFMU0UgaWYgbm90LgorICoqLworZ2Jvb2xlYW4gd2Vi
a2l0U291cEh0dHBJbnB1dFN0cmVhbVNlbmRGaW5pc2goV2ViS2l0U291cEhUVFBJbnB1dFN0cmVh
bSogaHR0cHN0cmVhbSwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIEdFcnJvcioqIGVycm9yKQorewor
ICAgIEdTaW1wbGVBc3luY1Jlc3VsdCogc2ltcGxlOworCisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoR19JU19TSU1QTEVfQVNZTkNfUkVTVUxUKHJlc3VsdCksIEZBTFNFKTsKKyAgICBzaW1wbGUg
PSBHX1NJTVBMRV9BU1lOQ19SRVNVTFQocmVzdWx0KTsKKworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfc291cmNlX3RhZyhzaW1wbGUpID09IHdlYmtp
dFNvdXBIdHRwSW5wdXRTdHJlYW1TZW5kQXN5bmMsIEZBTFNFKTsKKworICAgIGlmIChnX3NpbXBs
ZV9hc3luY19yZXN1bHRfcHJvcGFnYXRlX2Vycm9yKHNpbXBsZSwgZXJyb3IpKQorICAgICAgICBy
ZXR1cm4gRkFMU0U7CisKKyAgICByZXR1cm4gZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9vcF9y
ZXNfZ2Jvb2xlYW4oc2ltcGxlKTsKK30KKworc3RhdGljIHZvaWQgcmVhZEFzeW5jRG9uZShHSW5w
dXRTdHJlYW0qIHN0cmVhbSkKK3sKKyAgICBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0
ZSogcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFKHN0cmVh
bSk7CisgICAgR1NpbXBsZUFzeW5jUmVzdWx0KiByZXN1bHQ7CisgICAgR0Vycm9yKiBlcnJvciA9
IDA7CisKKyAgICByZXN1bHQgPSBwcml2LT5yZXN1bHQ7CisgICAgcHJpdi0+cmVzdWx0ID0gMDsK
KworICAgIGlmIChnX2NhbmNlbGxhYmxlX3NldF9lcnJvcl9pZl9jYW5jZWxsZWQocHJpdi0+Y2Fu
Y2VsbGFibGUsICZlcnJvcikKKyAgICAgICAgfHwgc2V0RXJyb3JJZkhUVFBGYWlsZWQocHJpdi0+
bXNnLCAmZXJyb3IpKSB7CisgICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfZnJvbV9l
cnJvcihyZXN1bHQsIGVycm9yKTsKKyAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ3NzaXplKHJl
c3VsdCwgcHJpdi0+Y2FsbGVyTnJlYWQpOworCisgICAgcHJpdi0+Z290Q2h1bmtDYiA9IDA7Cisg
ICAgcHJpdi0+ZmluaXNoZWRDYiA9IDA7CisgICAgcHJpdi0+Y2FuY2VsbGVkQ2IgPSAwOworICAg
IHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1Eb25lSW8oc3RyZWFtKTsKKworICAgIGdfc2ltcGxl
X2FzeW5jX3Jlc3VsdF9jb21wbGV0ZShyZXN1bHQpOworICAgIGdfb2JqZWN0X3VucmVmKHJlc3Vs
dCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1SZWFkQXN5bmMo
R0lucHV0U3RyZWFtKiBzdHJlYW0sIHZvaWQqIGJ1ZmZlciwgZ3NpemUgY291bnQsIGludCBpb1By
aW9yaXR5LCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlLCBHQXN5bmNSZWFkeUNhbGxiYWNrIGNh
bGxiYWNrLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBXZWJLaXRTb3VwSFRUUElucHV0U3Ry
ZWFtUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklW
QVRFKHN0cmVhbSk7CisgICAgR1NpbXBsZUFzeW5jUmVzdWx0KiByZXN1bHQ7CisKKyAgICAvKiBJ
ZiB0aGUgc2Vzc2lvbiB1c2VzIHRoZSBkZWZhdWx0IEdNYWluQ29udGV4dCwgdGhlbiB3ZSBjYW4g
ZG8KKyAgICAgKiBhc3luYyBJL08gZGlyZWN0bHkuIEJ1dCBpZiBpdCBoYXMgaXRzIG93biBtYWlu
IGNvbnRleHQsIHdlIGZhbGwKKyAgICAgKiBiYWNrIHRvIHRoZSBhc3luYy12aWEtc3luYy1pbi1h
bm90aGVyLXRocmVhZCBpbXBsZW1lbnRhdGlvbi4KKyAgICAgKi8KKyAgICBpZiAoc291cF9zZXNz
aW9uX2dldF9hc3luY19jb250ZXh0KHByaXYtPnNlc3Npb24pKSB7CisgICAgICAgIEdfSU5QVVRf
U1RSRUFNX0NMQVNTKHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3BhcmVudF9jbGFzcykt
PgorICAgICAgICByZWFkX2FzeW5jKHN0cmVhbSwgYnVmZmVyLCBjb3VudCwgaW9Qcmlvcml0eSwK
KyAgICAgICAgICAgICAgICAgICBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHJlc3VsdCA9IGdfc2ltcGxlX2FzeW5jX3Jlc3Vs
dF9uZXcoR19PQkpFQ1Qoc3RyZWFtKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhbGxiYWNrLCB1c2VyRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChncG9pbnRlcikgd2Via2l0U291cEh0dHBJbnB1dFN0cmVhbVJlYWRBc3luYyk7
CisKKyAgICBpZiAocHJpdi0+ZmluaXNoZWQpIHsKKyAgICAgICAgZ19zaW1wbGVfYXN5bmNfcmVz
dWx0X3NldF9vcF9yZXNfZ3NzaXplKHJlc3VsdCwgMCk7CisgICAgICAgIGdfc2ltcGxlX2FzeW5j
X3Jlc3VsdF9jb21wbGV0ZV9pbl9pZGxlKHJlc3VsdCk7CisgICAgICAgIGdfb2JqZWN0X3VucmVm
KHJlc3VsdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAocHJpdi0+bGVmdG92
ZXJCdWZzaXplKSB7CisgICAgICAgIGdzaXplIG5yZWFkID0gcmVhZEZyb21MZWZ0b3Zlcihwcml2
LCBidWZmZXIsIGNvdW50KTsKKyAgICAgICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9y
ZXNfZ3NzaXplKHJlc3VsdCwgbnJlYWQpOworICAgICAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRf
Y29tcGxldGVfaW5faWRsZShyZXN1bHQpOworICAgICAgICBnX29iamVjdF91bnJlZihyZXN1bHQp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcHJpdi0+cmVzdWx0ID0gcmVzdWx0Owor
CisgICAgcHJpdi0+Z290Q2h1bmtDYiA9IHJlYWRBc3luY0RvbmU7CisgICAgcHJpdi0+ZmluaXNo
ZWRDYiA9IHJlYWRBc3luY0RvbmU7CisgICAgcHJpdi0+Y2FuY2VsbGVkQ2IgPSByZWFkQXN5bmNE
b25lOworICAgIHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1QcmVwYXJlRm9ySW8oc3RyZWFtLCBj
YW5jZWxsYWJsZSwgKGd1Y2hhciopIGJ1ZmZlciwgY291bnQpOworfQorCitzdGF0aWMgZ3NzaXpl
IHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1SZWFkRmluaXNoKEdJbnB1dFN0cmVhbSogc3RyZWFt
LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgR1NpbXBsZUFz
eW5jUmVzdWx0KiBzaW1wbGU7CisKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChHX0lTX1NJTVBM
RV9BU1lOQ19SRVNVTFQocmVzdWx0KSwgLTEpOworICAgIHNpbXBsZSA9IEdfU0lNUExFX0FTWU5D
X1JFU1VMVChyZXN1bHQpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGdfc2ltcGxlX2FzeW5j
X3Jlc3VsdF9nZXRfc291cmNlX3RhZyhzaW1wbGUpID09IHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJl
YW1SZWFkQXN5bmMsIC0xKTsKKworICAgIHJldHVybiBnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0
X29wX3Jlc19nc3NpemUoc2ltcGxlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0U291cEh0dHBJ
bnB1dFN0cmVhbUNsb3NlQXN5bmMoR0lucHV0U3RyZWFtKiBzdHJlYW0sIGludCBpb1ByaW9yaXR5
LCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlLCBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNr
LCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBHU2ltcGxlQXN5bmNSZXN1bHQqIHJlc3VsdDsK
KyAgICBnYm9vbGVhbiBzdWNjZXNzOworICAgIEdFcnJvciogZXJyb3IgPSAwOworCisgICAgcmVz
dWx0ID0gZ19zaW1wbGVfYXN5bmNfcmVzdWx0X25ldyhHX09CSkVDVChzdHJlYW0pLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2ssIHVzZXJEYXRhLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdwb2ludGVyKSB3ZWJraXRTb3Vw
SHR0cElucHV0U3RyZWFtQ2xvc2VBc3luYyk7CisgICAgc3VjY2VzcyA9IHdlYmtpdFNvdXBIdHRw
SW5wdXRTdHJlYW1DbG9zZShzdHJlYW0sIGNhbmNlbGxhYmxlLCAmZXJyb3IpOworICAgIGdfc2lt
cGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dib29sZWFuKHJlc3VsdCwgc3VjY2Vzcyk7Cisg
ICAgaWYgKGVycm9yKSB7CisgICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfZnJvbV9l
cnJvcihyZXN1bHQsIGVycm9yKTsKKyAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKKyAgICB9
CisKKyAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGVfaW5faWRsZShyZXN1bHQpOwor
ICAgIGdfb2JqZWN0X3VucmVmKHJlc3VsdCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRT
b3VwSHR0cElucHV0U3RyZWFtQ2xvc2VGaW5pc2goR0lucHV0U3RyZWFtKiBzdHJlYW0sIEdBc3lu
Y1Jlc3VsdCogcmVzdWx0LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICAvKiBGYWlsdXJlcyBoYW5k
bGVkIGluIGdlbmVyaWMgY2xvc2VfZmluaXNoIGNvZGUgKi8KKyAgICByZXR1cm4gVFJVRTsKK30K
Kworc3RhdGljIGdvZmZzZXQgd2Via2l0U291cEh0dHBJbnB1dFN0cmVhbVRlbGwoR1NlZWthYmxl
KiBzZWVrYWJsZSkKK3sKKyAgICBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSogcHJp
diA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFKHNlZWthYmxlKTsK
KworICAgIHJldHVybiBwcml2LT5vZmZzZXQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRT
b3VwSHR0cElucHV0U3RyZWFtQ2FuU2VlayhHU2Vla2FibGUqIHNlZWthYmxlKQoreworICAgIHJl
dHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0U291cEh0dHBJbnB1dFN0cmVh
bVNlZWsoR1NlZWthYmxlKiBzZWVrYWJsZSwgZ29mZnNldCBvZmZzZXQsIEdTZWVrVHlwZSB0eXBl
LCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBHSW5w
dXRTdHJlYW0qIHN0cmVhbSA9IEdfSU5QVVRfU1RSRUFNKHNlZWthYmxlKTsKKyAgICBXZWJLaXRT
b3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRf
U1RSRUFNX0dFVF9QUklWQVRFKHNlZWthYmxlKTsKKyAgICBjaGFyKiByYW5nZTsKKworICAgIGlm
ICh0eXBlID09IEdfU0VFS19FTkQpIHsKKyAgICAgICAgLyogRklYTUU6IHdlIGNvdWxkIHNlbmQg
ImJ5dGVzPS1vZmZzZXQiLCBidXQgdW5sZXNzIHdlCisgICAgICAgICAqIGtub3cgdGhlIENvbnRl
bnQtTGVuZ3RoLCB3ZSB3b3VsZG4ndCBiZSBhYmxlIHRvCisgICAgICAgICAqIGFuc3dlciBhIHRl
bGwoKSBwcm9wZXJseS4gV2UgY291bGQgZmluZCB0aGUKKyAgICAgICAgICogQ29udGVudC1MZW5n
dGggYnkgZG9pbmcgYSBIRUFELi4uCisgICAgICAgICAqLworCisgICAgICAgIGdfc2V0X2Vycm9y
X2xpdGVyYWwoZXJyb3IsIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfTk9UX1NVUFBPUlRFRCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiR19TRUVLX0VORCBub3QgY3VycmVudGx5IHN1cHBv
cnRlZCIpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgaWYgKCFnX2lucHV0
X3N0cmVhbV9zZXRfcGVuZGluZyhzdHJlYW0sIGVycm9yKSkKKyAgICAgICAgcmV0dXJuIEZBTFNF
OworCisgICAgc291cF9zZXNzaW9uX2NhbmNlbF9tZXNzYWdlKHByaXYtPnNlc3Npb24sIHByaXYt
Pm1zZywgU09VUF9TVEFUVVNfQ0FOQ0VMTEVEKTsKKyAgICAvLyAgc291cF9tZXNzYWdlX2lvX2Ns
ZWFudXAgKHByaXYtPm1zZyk7CisKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdfU0VF
S19DVVI6CisgICAgICAgIG9mZnNldCArPSBwcml2LT5vZmZzZXQ7CisgICAgLyogZmFsbCB0aHJv
dWdoICovCisKKyAgICBjYXNlIEdfU0VFS19TRVQ6CisgICAgICAgIHJhbmdlID0gZ19zdHJkdXBf
cHJpbnRmKCJieXRlcz0lIiBHX0dVSU5UNjRfRk9STUFUICItIiwgKGd1aW50NjQpb2Zmc2V0KTsK
KyAgICAgICAgcHJpdi0+b2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICBicmVhazsKKworICAgIGNh
c2UgR19TRUVLX0VORDoKKyAgICAgICAgcmFuZ2UgPSAwOyAgICAgICAgIC8qIGtlZXAgY29tcGls
ZXJzIGhhcHB5ICovCisgICAgICAgIGdfcmV0dXJuX3ZhbF9pZl9yZWFjaGVkKEZBTFNFKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBnX3JldHVybl92YWxfaWZfcmVh
Y2hlZChGQUxTRSk7CisgICAgfQorCisgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfcmVtb3ZlKHBy
aXYtPm1zZy0+cmVxdWVzdF9oZWFkZXJzLCAiUmFuZ2UiKTsKKyAgICBzb3VwX21lc3NhZ2VfaGVh
ZGVyc19hcHBlbmQocHJpdi0+bXNnLT5yZXF1ZXN0X2hlYWRlcnMsICJSYW5nZSIsIHJhbmdlKTsK
KyAgICBnX2ZyZWUocmFuZ2UpOworCisgICAgd2Via2l0U291cEh0dHBJbnB1dFN0cmVhbVF1ZXVl
TWVzc2FnZShXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTShzdHJlYW0pKTsKKworICAgIGdf
aW5wdXRfc3RyZWFtX2NsZWFyX3BlbmRpbmcoc3RyZWFtKTsKKyAgICByZXR1cm4gVFJVRTsKK30K
Kworc3RhdGljIGdib29sZWFuIHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1DYW5UcnVuY2F0ZShH
U2Vla2FibGUqIHNlZWthYmxlKQoreworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGdi
b29sZWFuIHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1UcnVuY2F0ZShHU2Vla2FibGUqIHNlZWth
YmxlLCBnb2Zmc2V0IG9mZnNldCwgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwgR0Vycm9yKiog
ZXJyb3IpCit7CisgICAgZ19zZXRfZXJyb3JfbGl0ZXJhbChlcnJvciwgR19JT19FUlJPUiwgR19J
T19FUlJPUl9OT1RfU1VQUE9SVEVELAorICAgICAgICAgICAgICAgICAgICAgICAgIlRydW5jYXRl
IG5vdCBhbGxvd2VkIG9uIGlucHV0IHN0cmVhbSIpOworICAgIHJldHVybiBGQUxTRTsKK30KKwor
U291cE1lc3NhZ2UgKiB3ZWJraXRTb3VwSHR0cElucHV0U3RyZWFtR2V0TWVzc2FnZShXZWJLaXRT
b3VwSFRUUElucHV0U3RyZWFtKiBodHRwc3RyZWFtKQoreworICAgIFdlYktpdFNvdXBIVFRQSW5w
dXRTdHJlYW1Qcml2YXRlKiBwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VU
X1BSSVZBVEUoaHR0cHN0cmVhbSk7CisKKyAgICByZXR1cm4gcHJpdi0+bXNnID8gKFNvdXBNZXNz
YWdlKilnX29iamVjdF9yZWYocHJpdi0+bXNnKSA6IDA7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL3dlYmtpdHNvdXBodHRwaW5wdXRzdHJlYW0uaCBi
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL3dlYmtpdHNvdXBodHRwaW5wdXRzdHJlYW0u
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGQyOTU3Ci0tLSAvZGV2L251
bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvd2Via2l0c291cGh0dHBpbnB1
dHN0cmVhbS5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywg
MjAwOSBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEt
MTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgd2Via2l0c291cGh0dHBpbnB1dHN0cmVhbV9oCisj
ZGVmaW5lIHdlYmtpdHNvdXBodHRwaW5wdXRzdHJlYW1faCAxCisKKyNpbmNsdWRlIDxnaW8vZ2lv
Lmg+CisjaW5jbHVkZSA8bGlic291cC9zb3VwLXR5cGVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX1NPVVBfSFRUUF9JTlBV
VF9TVFJFQU0gICAgICAgICAod2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ2V0X3R5cGUo
KSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU0obykgICAgICAgICAgIChH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgobyksIFdFQktJVF9UWVBFX1NPVVBfSFRUUF9JTlBV
VF9TVFJFQU0sIFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0pKQorI2RlZmluZSBXRUJLSVRfU09V
UF9IVFRQX0lOUFVUX1NUUkVBTV9DTEFTUyhrKSAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNU
KChrKSwgV0VCS0lUX1RZUEVfU09VUF9IVFRQX0lOUFVUX1NUUkVBTSwgV2ViS2l0U291cEhUVFBJ
bnB1dFN0cmVhbUNsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfSVNfSFRUUF9JTlBVVF9TVFJF
QU0obykgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgobyksIFdFQktJVF9UWVBF
X1NPVVBfSFRUUF9JTlBVVF9TVFJFQU0pKQorI2RlZmluZSBXRUJLSVRfU09VUF9JU19IVFRQX0lO
UFVUX1NUUkVBTV9DTEFTUyhrKSAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrKSwgV0VCS0lU
X1RZUEVfU09VUF9IVFRQX0lOUFVUX1NUUkVBTSkpCisjZGVmaW5lIFdFQktJVF9TT1VQX0hUVFBf
SU5QVVRfU1RSRUFNX0dFVF9DTEFTUyhvKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygobyks
IFdFQktJVF9UWVBFX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU0sIFdlYktpdFNvdXBIVFRQSW5wdXRT
dHJlYW1DbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0g
V2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbTsKK3R5cGVkZWYgc3RydWN0IFdlYktpdFNvdXBIVFRQ
SW5wdXRTdHJlYW1DbGFzcyBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtQ2xhc3M7CisKK3N0cnVj
dCBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtIHsKKyAgICBHSW5wdXRTdHJlYW0gcGFyZW50Owor
Cit9OworCitzdHJ1Y3QgV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbUNsYXNzIHsKKyAgICBHSW5w
dXRTdHJlYW1DbGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgICAvKiBQYWRkaW5nIGZvciBmdXR1cmUg
ZXhwYW5zaW9uICovCisgICAgdm9pZCAoKiBfZ19yZXNlcnZlZDEpKHZvaWQpOworICAgIHZvaWQg
KCogX2dfcmVzZXJ2ZWQyKSh2b2lkKTsKKyAgICB2b2lkICgqIF9nX3Jlc2VydmVkMykodm9pZCk7
CisgICAgdm9pZCAoKiBfZ19yZXNlcnZlZDQpKHZvaWQpOworICAgIHZvaWQgKCogX2dfcmVzZXJ2
ZWQ1KSh2b2lkKTsKK307CisKK0dUeXBlIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dl
dF90eXBlKHZvaWQpIEdfR05VQ19DT05TVDsKKworV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSog
d2Via2l0U291cEh0dHBJbnB1dFN0cmVhbU5ldyhTb3VwU2Vzc2lvbiogc2Vzc2lvbiwgU291cE1l
c3NhZ2UqIG1zZyk7CisKK2dib29sZWFuIHdlYmtpdFNvdXBIdHRwSW5wdXRTdHJlYW1TZW5kKFdl
YktpdFNvdXBIVFRQSW5wdXRTdHJlYW0qIGh0dHBzdHJlYW0sIEdDYW5jZWxsYWJsZSogY2FuY2Vs
bGFibGUsIEdFcnJvcioqIGVycm9yKTsKKwordm9pZCB3ZWJraXRTb3VwSHR0cElucHV0U3RyZWFt
U2VuZEFzeW5jKFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0qIGh0dHBzdHJlYW0sIGludCBpb1By
aW9yaXR5LCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlLCBHQXN5bmNSZWFkeUNhbGxiYWNrIGNh
bGxiYWNrLCBncG9pbnRlciB1c2VyRGF0YSk7CisKK2dib29sZWFuIHdlYmtpdFNvdXBIdHRwSW5w
dXRTdHJlYW1TZW5kRmluaXNoKFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0qIGh0dHBzdHJlYW0s
IEdBc3luY1Jlc3VsdCogcmVzdWx0LCBHRXJyb3IqKiBlcnJvcik7CisKK1NvdXBNZXNzYWdlKiB3
ZWJraXRTb3VwSHR0cElucHV0U3RyZWFtR2V0TWVzc2FnZShXZWJLaXRTb3VwSFRUUElucHV0U3Ry
ZWFtKiBodHRwc3RyZWFtKTsKKworR19FTkRfREVDTFMKKworfQorCisjZW5kaWYgLyogd2Via2l0
c291cGh0dHBpbnB1dHN0cmVhbV9oICovCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC93ZWJraXRzb3VwcmVxdWVzdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC93ZWJraXRzb3VwcmVxdWVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNjJlODgxMQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL3dlYmtpdHNvdXByZXF1ZXN0LmNwcApAQCAtMCwwICsxLDI0NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
SWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwKKyAqIEJv
c3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJ3ZWJraXRzb3VwcmVxdWVzdC5oIgorCisjaW5jbHVkZSA8Z2xpYi9naTE4bi5oPgor
I2luY2x1ZGUgPGxpYnNvdXAvc291cC1zZXNzaW9uLmg+CisjaW5jbHVkZSA8bGlic291cC9zb3Vw
LXVyaS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8qKgorICogU0VDVElPTjpzb3VwLXJl
cXVlc3QKKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogUHJvdG9jb2wtaW5kZXBlbmRlbnQgc3RyZWFt
aW5nIHJlcXVlc3QgaW50ZXJmYWNlCisgKgorICogRklYTUUKKyAqKi8KKworLyoqCisgKiBXZWJL
aXRTb3VwUmVxdWVzdDoKKyAqCisgKiBGSVhNRQorICoKKyAqIFNpbmNlOiAyLjMwCisgKiovCisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX3JlcXVlc3RfaW5pdGFibGVfaW50ZXJmYWNlX2luaXQo
R0luaXRhYmxlSWZhY2UqIGluaXRhYmxlSW50ZXJmYWNlKTsKKworR19ERUZJTkVfVFlQRV9XSVRI
X0NPREUoV2ViS2l0U291cFJlcXVlc3QsIHdlYmtpdF9zb3VwX3JlcXVlc3QsIEdfVFlQRV9PQkpF
Q1QsCisgICAgICAgICAgICAgICAgICAgICAgICBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoR19UWVBF
X0lOSVRBQkxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdlYmtpdF9zb3VwX3JlcXVlc3RfaW5pdGFibGVfaW50ZXJmYWNlX2luaXQpKQorCitlbnVtIHsK
KyAgICBQUk9QXzAsCisgICAgUFJPUF9VUkksCisgICAgUFJPUF9TRVNTSU9OCit9OworCitzdHJ1
Y3QgX1dlYktpdFNvdXBSZXF1ZXN0UHJpdmF0ZSB7CisgICAgU291cFVSSSogdXJpOworICAgIFNv
dXBTZXNzaW9uKiBzZXNzaW9uOworCit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfc291cF9yZXF1
ZXN0X2luaXQoV2ViS2l0U291cFJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgcmVxdWVzdC0+cHJp
diA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShyZXF1ZXN0LCBXRUJLSVRfVFlQRV9TT1VQ
X1JFUVVFU1QsIFdlYktpdFNvdXBSZXF1ZXN0UHJpdmF0ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9zb3VwX3JlcXVlc3RfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktp
dFNvdXBSZXF1ZXN0KiByZXF1ZXN0ID0gV0VCS0lUX1NPVVBfUkVRVUVTVChvYmplY3QpOworCisg
ICAgaWYgKHJlcXVlc3QtPnByaXYtPnVyaSkKKyAgICAgICAgc291cF91cmlfZnJlZShyZXF1ZXN0
LT5wcml2LT51cmkpOworICAgIGlmIChyZXF1ZXN0LT5wcml2LT5zZXNzaW9uKQorICAgICAgICBn
X29iamVjdF91bnJlZihyZXF1ZXN0LT5wcml2LT5zZXNzaW9uKTsKKworICAgIEdfT0JKRUNUX0NM
QVNTKHdlYmtpdF9zb3VwX3JlcXVlc3RfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsK
K30KKworc3RhdGljIHZvaWQgd2Via2l0U291cFJlcXVlc3RTZXRQcm9wZXJ0eShHT2JqZWN0KiBv
YmplY3QsIGd1aW50IHByb3BJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNw
ZWMpCit7CisgICAgV2ViS2l0U291cFJlcXVlc3QqIHJlcXVlc3QgPSBXRUJLSVRfU09VUF9SRVFV
RVNUKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BJZCkgeworICAgIGNhc2UgUFJPUF9VUkk6
CisgICAgICAgIGlmIChyZXF1ZXN0LT5wcml2LT51cmkpCisgICAgICAgICAgICBzb3VwX3VyaV9m
cmVlKHJlcXVlc3QtPnByaXYtPnVyaSk7CisgICAgICAgIHJlcXVlc3QtPnByaXYtPnVyaSA9IChT
b3VwVVJJKilnX3ZhbHVlX2R1cF9ib3hlZCh2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9TRVNTSU9OOgorICAgICAgICBpZiAocmVxdWVzdC0+cHJpdi0+c2Vzc2lvbikKKyAg
ICAgICAgICAgIGdfb2JqZWN0X3VucmVmKHJlcXVlc3QtPnByaXYtPnNlc3Npb24pOworICAgICAg
ICByZXF1ZXN0LT5wcml2LT5zZXNzaW9uID0gKFNvdXBTZXNzaW9uKilnX3ZhbHVlX2R1cF9vYmpl
Y3QodmFsdWUpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVD
VF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSWQsIHBzcGVjKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRTb3VwUmVxdWVzdEdldFBy
b3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElkLCBHVmFsdWUqIHZhbHVlLCBHUGFy
YW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRTb3VwUmVxdWVzdCogcmVxdWVzdCA9IFdFQktJ
VF9TT1VQX1JFUVVFU1Qob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcElkKSB7CisgICAgY2Fz
ZSBQUk9QX1VSSToKKyAgICAgICAgZ192YWx1ZV9zZXRfYm94ZWQodmFsdWUsIHJlcXVlc3QtPnBy
aXYtPnVyaSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9TRVNTSU9OOgorICAgICAg
ICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHJlcXVlc3QtPnByaXYtPnNlc3Npb24pOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURf
UFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3NvdXBfcmVxdWVzdF9pbml0YWJsZV9pbml0
KEdJbml0YWJsZSogaW5pdGFibGUsIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUsIEdFcnJvcioq
IGVycm9yKQoreworICAgIFdlYktpdFNvdXBSZXF1ZXN0KiByZXF1ZXN0ID0gV0VCS0lUX1NPVVBf
UkVRVUVTVChpbml0YWJsZSk7CisgICAgZ2Jvb2xlYW4gb2s7CisKKyAgICBpZiAoIXJlcXVlc3Qt
PnByaXYtPnVyaSkgeworICAgICAgICBnX3NldF9lcnJvcihlcnJvciwgV0VCS0lUX1NPVVBfRVJS
T1IsIFdFQktJVF9TT1VQX0VSUk9SX0JBRF9VUkksCisgICAgICAgICAgICAgICAgICAgIF8oIk5v
IFVSSSBwcm92aWRlZCIpKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIG9r
ID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9HRVRfQ0xBU1MoaW5pdGFibGUpLT5jaGVja1VyaShyZXF1
ZXN0LCByZXF1ZXN0LT5wcml2LT51cmksIGVycm9yKTsKKworICAgIGlmICghb2sgJiYgZXJyb3Ip
IHsKKyAgICAgICAgZ2NoYXIqIHVyaVN0cmluZyA9IHNvdXBfdXJpX3RvX3N0cmluZyhyZXF1ZXN0
LT5wcml2LT51cmksIEZBTFNFKTsKKyAgICAgICAgZ19zZXRfZXJyb3IoZXJyb3IsIFdFQktJVF9T
T1VQX0VSUk9SLCBXRUJLSVRfU09VUF9FUlJPUl9CQURfVVJJLAorICAgICAgICAgICAgICAgICAg
ICBfKCJJbnZhbGlkICclcycgVVJJOiAlcyIpLAorICAgICAgICAgICAgICAgICAgICByZXF1ZXN0
LT5wcml2LT51cmktPnNjaGVtZSwKKyAgICAgICAgICAgICAgICAgICAgdXJpU3RyaW5nKTsKKyAg
ICAgICAgZ19mcmVlKHVyaVN0cmluZyk7CisgICAgfQorCisgICAgcmV0dXJuIG9rOworfQorCitz
dGF0aWMgZ2Jvb2xlYW4gd2Via2l0U291cFJlcXVlc3REZWZhdWx0Q2hlY2tVcmkoV2ViS2l0U291
cFJlcXVlc3QqIHJlcXVlc3QsIFNvdXBVUkkqIHVyaSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAg
cmV0dXJuIFRSVUU7Cit9CisKKy8qIERlZmF1bHQgaW1wbGVtZW50YXRpb246IGFzc3VtZSB0aGUg
c3luYyBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IGJsb2NrICovCitzdGF0aWMgdm9pZCB3ZWJraXRT
b3VwUmVxdWVzdERlZmF1bHRTZW5kQXN5bmMoV2ViS2l0U291cFJlcXVlc3QqIHJlcXVlc3QsIEdD
YW5jZWxsYWJsZSogY2FuY2VsbGFibGUsIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssIGdw
b2ludGVyIHVzZXJEYXRhKQoreworICAgIEdTaW1wbGVBc3luY1Jlc3VsdCogc2ltcGxlOworCisg
ICAgc2ltcGxlID0gZ19zaW1wbGVfYXN5bmNfcmVzdWx0X25ldyhHX09CSkVDVChyZXF1ZXN0KSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLCB1c2VyRGF0
YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChncG9pbnRlcil3ZWJr
aXRTb3VwUmVxdWVzdERlZmF1bHRTZW5kQXN5bmMpOworICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3Vs
dF9jb21wbGV0ZV9pbl9pZGxlKHNpbXBsZSk7CisgICAgZ19vYmplY3RfdW5yZWYoc2ltcGxlKTsK
K30KKworc3RhdGljIEdJbnB1dFN0cmVhbSAqIHdlYmtpdFNvdXBSZXF1ZXN0RGVmYXVsdFNlbmRG
aW5pc2goV2ViS2l0U291cFJlcXVlc3QqIHJlcXVlc3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBH
RXJyb3IqKiBlcnJvcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChnX3NpbXBsZV9hc3lu
Y19yZXN1bHRfaXNfdmFsaWQocmVzdWx0LCBHX09CSkVDVChyZXF1ZXN0KSwgKGdwb2ludGVyKXdl
YmtpdFNvdXBSZXF1ZXN0RGVmYXVsdFNlbmRBc3luYyksIDApOworCisgICAgcmV0dXJuIHdlYmtp
dFNvdXBSZXF1ZXN0U2VuZChyZXF1ZXN0LCAwLCBlcnJvcik7Cit9CisKK0dJbnB1dFN0cmVhbSAq
IHdlYmtpdFNvdXBSZXF1ZXN0U2VuZChXZWJLaXRTb3VwUmVxdWVzdCogcmVxdWVzdCwgR0NhbmNl
bGxhYmxlKiBjYW5jZWxsYWJsZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgcmV0dXJuIFdFQktJ
VF9TT1VQX1JFUVVFU1RfR0VUX0NMQVNTKHJlcXVlc3QpLT5zZW5kKHJlcXVlc3QsIGNhbmNlbGxh
YmxlLCBlcnJvcik7Cit9CisKK3ZvaWQgd2Via2l0U291cFJlcXVlc3RTZW5kQXN5bmMoV2ViS2l0
U291cFJlcXVlc3QqIHJlcXVlc3QsIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUsIEdBc3luY1Jl
YWR5Q2FsbGJhY2sgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIFdFQktJVF9T
T1VQX1JFUVVFU1RfR0VUX0NMQVNTKHJlcXVlc3QpLT5zZW5kQXN5bmMocmVxdWVzdCwgY2FuY2Vs
bGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSk7Cit9CisKK0dJbnB1dFN0cmVhbSogd2Via2l0U291
cFJlcXVlc3RTZW5kRmluaXNoKFdlYktpdFNvdXBSZXF1ZXN0KiByZXF1ZXN0LCBHQXN5bmNSZXN1
bHQqIHJlc3VsdCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgcmV0dXJuIFdFQktJVF9TT1VQX1JF
UVVFU1RfR0VUX0NMQVNTKHJlcXVlc3QpLT5zZW5kRmluaXNoKHJlcXVlc3QsIHJlc3VsdCwgZXJy
b3IpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfc291cF9yZXF1ZXN0X2NsYXNzX2luaXQoV2Vi
S2l0U291cFJlcXVlc3RDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyog
b2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworCisgICAgZ190eXBl
X2NsYXNzX2FkZF9wcml2YXRlKHJlcXVlc3RDbGFzcywgc2l6ZW9mKFdlYktpdFNvdXBSZXF1ZXN0
UHJpdmF0ZSkpOworCisgICAgcmVxdWVzdENsYXNzLT5jaGVja1VyaSA9IHdlYmtpdFNvdXBSZXF1
ZXN0RGVmYXVsdENoZWNrVXJpOworICAgIHJlcXVlc3RDbGFzcy0+c2VuZEFzeW5jID0gd2Via2l0
U291cFJlcXVlc3REZWZhdWx0U2VuZEFzeW5jOworICAgIHJlcXVlc3RDbGFzcy0+c2VuZEZpbmlz
aCA9IHdlYmtpdFNvdXBSZXF1ZXN0RGVmYXVsdFNlbmRGaW5pc2g7CisKKyAgICBvYmplY3RDbGFz
cy0+ZmluYWxpemUgPSB3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbmFsaXplOworICAgIG9iamVjdENs
YXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRTb3VwUmVxdWVzdFNldFByb3BlcnR5OworICAgIG9i
amVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRTb3VwUmVxdWVzdEdldFByb3BlcnR5Owor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgb2JqZWN0Q2xh
c3MsIFBST1BfVVJJLAorICAgICAgICBnX3BhcmFtX3NwZWNfYm94ZWQoV0VCS0lUX1NPVVBfUkVR
VUVTVF9VUkksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiVVJJIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJUaGUgcmVxdWVzdCBVUkkiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU09VUF9UWVBFX1VSSSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChHUGFyYW1G
bGFncykoR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSkpOworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIG9iamVjdENsYXNzLCBQ
Uk9QX1NFU1NJT04sCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoV0VCS0lUX1NPVVBfUkVR
VUVTVF9TRVNTSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZXNzaW9uIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIHJlcXVlc3QncyBzZXNzaW9uIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTT1VQX1RZUEVfU0VTU0lPTiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoR1BhcmFtRmxhZ3MpKEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9D
T05TVFJVQ1RfT05MWSkpKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3NvdXBfcmVxdWVzdF9p
bml0YWJsZV9pbnRlcmZhY2VfaW5pdChHSW5pdGFibGVJZmFjZSogaW5pdGFibGVJbnRlcmZhY2Up
Cit7CisgICAgaW5pdGFibGVJbnRlcmZhY2UtPmluaXQgPSB3ZWJraXRfc291cF9yZXF1ZXN0X2lu
aXRhYmxlX2luaXQ7Cit9CisKK1NvdXBVUkkqIHdlYmtpdFNvdXBSZXF1ZXN0R2V0VXJpKFdlYktp
dFNvdXBSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT51cmk7
Cit9CisKK1NvdXBTZXNzaW9uKiB3ZWJraXRTb3VwUmVxdWVzdEdldFNlc3Npb24oV2ViS2l0U291
cFJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIHJlcXVlc3QtPnByaXYtPnNlc3Npb247
Cit9CisKK2dvZmZzZXQgd2Via2l0U291cFJlcXVlc3RHZXRDb250ZW50TGVuZ3RoKFdlYktpdFNv
dXBSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIHJldHVybiBXRUJLSVRfU09VUF9SRVFVRVNUX0dF
VF9DTEFTUyhyZXF1ZXN0KS0+Z2V0Q29udGVudExlbmd0aChyZXF1ZXN0KTsKK30KKworY29uc3Qg
Y2hhciogd2Via2l0U291cFJlcXVlc3RHZXRDb250ZW50VHlwZShXZWJLaXRTb3VwUmVxdWVzdCog
cmVxdWVzdCkKK3sKKyAgICByZXR1cm4gV0VCS0lUX1NPVVBfUkVRVUVTVF9HRVRfQ0xBU1MocmVx
dWVzdCktPmdldENvbnRlbnRUeXBlKHJlcXVlc3QpOworfQorCitHUXVhcmsgd2Via2l0U291cEVy
cm9yUXVhcmsodm9pZCkKK3sKKyAgICBzdGF0aWMgR1F1YXJrIGVycm9yOworCisgICAgaWYgKCFl
cnJvcikKKyAgICAgICAgZXJyb3IgPSBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZygid2Via2l0
X3NvdXBfZXJyb3JfcXVhcmsiKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK30KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL3dlYmtpdHNvdXByZXF1ZXN0LmggYi9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJraXRzb3VwcmVxdWVzdC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYjg1NTcKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJraXRzb3VwcmVxdWVzdC5oCkBAIC0wLDAg
KzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwgSW5jLgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgKiBQ
dWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBT
dWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVm
IHdlYmtpdHNvdXByZXF1ZXN0X2gKKyNkZWZpbmUgd2Via2l0c291cHJlcXVlc3RfaCAxCisKKyNp
bmNsdWRlIDxnaW8vZ2lvLmg+CisjaW5jbHVkZSA8bGlic291cC9zb3VwLXR5cGVzLmg+CisjaW5j
bHVkZSA8d2Via2l0L3dlYmtpdGRlZmluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitH
X0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUICAgICAgICAg
ICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBf
UkVRVUVTVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmop
LCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1QsIFdlYktpdFNvdXBSZXF1ZXN0KSkKKyNkZWZpbmUg
V0VCS0lUX1NPVVBfUkVRVUVTVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19D
QVNUKChrbGFzcyksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVCwgV2ViS2l0U291cFJlcXVlc3RD
bGFzcykpCisjZGVmaW5lIFdFQktJVF9TT1VQX0lTX1JFUVVFU1Qob2JqKSAgICAgICAgIChHX1RZ
UEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUKSkK
KyNkZWZpbmUgV0VCS0lUX1NPVVBfSVNfUkVRVUVTVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVD
S19DTEFTU19UWVBFKChrbGFzcyksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVCkpCisjZGVmaW5l
IFdFQktJVF9TT1VQX1JFUVVFU1RfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VU
X0NMQVNTKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1QsIFdlYktpdFNvdXBSZXF1ZXN0
Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0U291cFJlcXVlc3RQcml2YXRlIFdlYktp
dFNvdXBSZXF1ZXN0UHJpdmF0ZTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIEdPYmplY3QgcGFy
ZW50OworCisgICAgV2ViS2l0U291cFJlcXVlc3RQcml2YXRlKiBwcml2OworfSBXZWJLaXRTb3Vw
UmVxdWVzdDsKKworCisjZGVmaW5lIFdFQktJVF9TT1VQX0VSUk9SIHdlYmtpdFNvdXBFcnJvclF1
YXJrKCkKK0dRdWFyayB3ZWJraXRTb3VwRXJyb3JRdWFyayh2b2lkKTsKKwordHlwZWRlZiBlbnVt
IHsKKyAgICBXRUJLSVRfU09VUF9FUlJPUl9CQURfVVJJLAorICAgIFdFQktJVF9TT1VQX0VSUk9S
X1VOU1VQUE9SVEVEX1VSSV9TQ0hFTUUKK30gV2ViS2l0U291cEVycm9yOworCit0eXBlZGVmIHN0
cnVjdCB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKKworICAgIGdib29sZWFuICgq
IGNoZWNrVXJpKShXZWJLaXRTb3VwUmVxdWVzdCogcmVxX2Jhc2UsIFNvdXBVUkkqIHVyaSwgR0Vy
cm9yKiogZXJyb3IpOworCisgICAgR0lucHV0U3RyZWFtKiAoKnNlbmQpKFdlYktpdFNvdXBSZXF1
ZXN0KiByZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2FuY2VsbGFibGUqIGNh
bmNlbGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IqKiBlcnJvcik7Cisg
ICAgdm9pZCAoKiBzZW5kQXN5bmMpKFdlYktpdFNvdXBSZXF1ZXN0KiByZXF1ZXN0LAorCQkgICAg
ICAgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwKKwkJICAgICAgIEdBc3luY1JlYWR5Q2FsbGJh
Y2sgY2FsbGJhY2ssCisJCSAgICAgICBncG9pbnRlciB1c2VyRGF0YSk7CisgICAgR0lucHV0U3Ry
ZWFtKiAoKnNlbmRGaW5pc2gpKFdlYktpdFNvdXBSZXF1ZXN0KiByZXF1ZXN0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVzdWx0KiByZXN1bHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IqKiBlcnJvcik7CisKKyAgICBnb2Zmc2V0ICgq
IGdldENvbnRlbnRMZW5ndGgpKFdlYktpdFNvdXBSZXF1ZXN0KiByZXF1ZXN0KTsKKyAgICBjb25z
dCBjaGFyKiAgICgqIGdldENvbnRlbnRUeXBlKShXZWJLaXRTb3VwUmVxdWVzdCAgICpyZXF1ZXN0
KTsKK30gV2ViS2l0U291cFJlcXVlc3RDbGFzczsKKworR1R5cGUgd2Via2l0X3NvdXBfcmVxdWVz
dF9nZXRfdHlwZSh2b2lkKTsKKworI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNUX1VSSSAgICAg
InVyaSIKKyNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9TRVNTSU9OICJzZXNzaW9uIgorCitH
SW5wdXRTdHJlYW0qIHdlYmtpdFNvdXBSZXF1ZXN0U2VuZChXZWJLaXRTb3VwUmVxdWVzdCogcmVx
dWVzdCwgR0NhbmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwgR0Vycm9yKiogZXJyb3IpOwordm9pZCB3
ZWJraXRTb3VwUmVxdWVzdFNlbmRBc3luYyhXZWJLaXRTb3VwUmVxdWVzdCogcmVxdWVzdCwgR0Nh
bmNlbGxhYmxlKiBjYW5jZWxsYWJsZSwgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywgZ3Bv
aW50ZXIgdXNlckRhdGEpOworR0lucHV0U3RyZWFtKiB3ZWJraXRTb3VwUmVxdWVzdFNlbmRGaW5p
c2goV2ViS2l0U291cFJlcXVlc3QqIHJlcXVlc3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBHRXJy
b3IqKiBlcnJvcik7CisKK1NvdXBVUkkqIHdlYmtpdFNvdXBSZXF1ZXN0R2V0VXJpKFdlYktpdFNv
dXBSZXF1ZXN0KiByZXF1ZXN0KTsKK1NvdXBTZXNzaW9uKiB3ZWJraXRTb3VwUmVxdWVzdEdldFNl
c3Npb24oV2ViS2l0U291cFJlcXVlc3QqIHJlcXVlc3QpOworCitnb2Zmc2V0IHdlYmtpdFNvdXBS
ZXF1ZXN0R2V0Q29udGVudExlbmd0aChXZWJLaXRTb3VwUmVxdWVzdCogcmVxdWVzdCk7Citjb25z
dCBjaGFyKiB3ZWJraXRTb3VwUmVxdWVzdEdldENvbnRlbnRUeXBlKFdlYktpdFNvdXBSZXF1ZXN0
KiByZXF1ZXN0KTsKKworR19FTkRfREVDTFMKKworfQorCisjZW5kaWYgLyogd2Via2l0c291cHJl
cXVlc3RfaCAqLwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvd2Vi
a2l0c291cHJlcXVlc3RkYXRhLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL3dl
YmtpdHNvdXByZXF1ZXN0ZGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMTUyMmY1MAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL3dlYmtpdHNvdXByZXF1ZXN0ZGF0YS5jcHAKQEAgLTAsMCArMSwxOTQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEln
YWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsCisgKiBCb3N0
b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAid2Via2l0c291cHJlcXVlc3RkYXRhLmgiCisKKyNpbmNsdWRlIDxnbGliL2dpMThuLmg+
CisjaW5jbHVkZSA8aW9zdHJlYW0+CisjaW5jbHVkZSA8bGlic291cC9zb3VwLXNlc3Npb24uaD4K
KyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAtdXJpLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
R19ERUZJTkVfVFlQRShXZWJLaXRTb3VwUmVxdWVzdERhdGEsIHdlYmtpdF9zb3VwX3JlcXVlc3Rf
ZGF0YSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUKQorCitzdHJ1Y3QgX1dlYktpdFNvdXBSZXF1
ZXN0RGF0YVByaXZhdGUgeworICAgIGdzaXplIGNvbnRlbnRMZW5ndGg7CisgICAgY2hhciogY29u
dGVudFR5cGU7Cit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFfaW5p
dChXZWJLaXRTb3VwUmVxdWVzdERhdGEqIGRhdGEpCit7CisgICAgZGF0YS0+cHJpdiA9IEdfVFlQ
RV9JTlNUQU5DRV9HRVRfUFJJVkFURShkYXRhLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfREFU
QSwgV2ViS2l0U291cFJlcXVlc3REYXRhUHJpdmF0ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9zb3VwX3JlcXVlc3RfZGF0YV9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2Vi
S2l0U291cFJlcXVlc3REYXRhKiBkYXRhID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9EQVRBKG9iamVj
dCk7CisKKyAgICBnX2ZyZWUoZGF0YS0+cHJpdi0+Y29udGVudFR5cGUpOworCisgICAgR19PQkpF
Q1RfQ0xBU1Mod2Via2l0X3NvdXBfcmVxdWVzdF9kYXRhX3BhcmVudF9jbGFzcyktPmZpbmFsaXpl
KG9iamVjdCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRTb3VwUmVxdWVzdERhdGFDaGVj
a1VyaShXZWJLaXRTb3VwUmVxdWVzdCogcmVxdWVzdCwgU291cFVSSSogdXJpLCBHRXJyb3IqKiBl
cnJvcikKK3sKKyAgICByZXR1cm4gIXVyaS0+aG9zdDsKK30KKworI2RlZmluZSBYRElHSVQoYykg
KChjKSA8PSAnOScgPyAoYykgLSAnMCcgOiAoKGMpICYgMHg0RikgLSAnQScgKyAxMCkKKyNkZWZp
bmUgSEVYQ0hBUihzKSAoKFhESUdJVChzWzFdKSA8PCA0KSArIFhESUdJVChzWzJdKSkKKworc3Rh
dGljIGNoYXIgKiB1cmlEZWNvZGVkQ29weShjb25zdCBjaGFyKiBwYXJ0LCBpbnQgbGVuZ3RoLCBn
Ym9vbGVhbiBmaXh1cCkKK3sKKyAgICB1bnNpZ25lZCBjaGFyKiBzLCAqIGQ7CisgICAgY2hhciog
ZGVjb2RlZCA9IGdfc3RybmR1cChwYXJ0LCBsZW5ndGgpOworCisgICAgcyA9IGQgPSAodW5zaWdu
ZWQgY2hhciopZGVjb2RlZDsKKyAgICBkbyB7CisgICAgICAgIGlmICgqcyA9PSAnJScpIHsKKyAg
ICAgICAgICAgIGlmICghZ19hc2NpaV9pc3hkaWdpdChzWzFdKQorICAgICAgICAgICAgICAgIHx8
ICFnX2FzY2lpX2lzeGRpZ2l0KHNbMl0pKSB7CisgICAgICAgICAgICAgICAgaWYgKCFmaXh1cCkg
eworICAgICAgICAgICAgICAgICAgICBnX2ZyZWUoZGVjb2RlZCk7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqZCsrID0g
KnM7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAqZCsrID0gSEVYQ0hBUihzKTsKKyAgICAgICAgICAgIHMgKz0gMjsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAqZCsrID0gKnM7CisgICAgfSB3aGlsZSAoKnMrKyk7CisKKyAgICByZXR1
cm4gZGVjb2RlZDsKK30KKworc3RhdGljIEdJbnB1dFN0cmVhbSogd2Via2l0U291cFJlcXVlc3RE
YXRhU2VuZChXZWJLaXRTb3VwUmVxdWVzdCogcmVxdWVzdCwgR0NhbmNlbGxhYmxlKiBjYW5jZWxs
YWJsZSwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgV2ViS2l0U291cFJlcXVlc3REYXRhKiBkYXRh
ID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9EQVRBKHJlcXVlc3QpOworICAgIFNvdXBVUkkqIHVyaSA9
IHdlYmtpdFNvdXBSZXF1ZXN0R2V0VXJpKHJlcXVlc3QpOworICAgIEdJbnB1dFN0cmVhbSogbWVt
c3RyZWFtOworICAgIGNvbnN0IGNoYXIqIGNvbW1hLCAqIHNlbWksICogc3RhcnQsICogZW5kOwor
ICAgIGdib29sZWFuIGJhc2U2NCA9IEZBTFNFOworCisgICAgZ2NoYXIqIHVyaXN0ciA9IHNvdXBf
dXJpX3RvX3N0cmluZyh1cmksIEZBTFNFKTsKKworICAgIGNvbW1hID0gc3RyY2hyKHVyaXN0ciwg
JywnKTsKKyAgICBpZiAoY29tbWEgJiYgY29tbWEgIT0gdXJpc3RyKSB7CisgICAgICAgIC8qIERl
YWwgd2l0aCBNSU1FIHR5cGUgLyBwYXJhbXMgKi8KKyAgICAgICAgc2VtaSA9IChjb25zdCBjaGFy
KiltZW1jaHIodXJpc3RyLCAnOycsIGNvbW1hIC0gdXJpc3RyKTsKKyAgICAgICAgZW5kID0gc2Vt
aSA/IHNlbWkgOiBjb21tYTsKKworICAgICAgICBpZiAoZW5kICE9IHVyaXN0cikKKyAgICAgICAg
ICAgIGRhdGEtPnByaXYtPmNvbnRlbnRUeXBlID0gdXJpRGVjb2RlZENvcHkodXJpc3RyLCBlbmQg
LSB1cmlzdHIsIFRSVUUpOworCisgICAgICAgIGlmIChzZW1pICYmICFnX2FzY2lpX3N0cm5jYXNl
Y21wKHNlbWksICI7YmFzZTY0Iiwgc3RkOjptYXgoKGNvbW1hIC0gc2VtaSksIChpbnQpc3RybGVu
KCI7YmFzZTY0IikpKSkKKyAgICAgICAgICAgIGJhc2U2NCA9IFRSVUU7CisgICAgfQorCisgICAg
bWVtc3RyZWFtID0gZ19tZW1vcnlfaW5wdXRfc3RyZWFtX25ldygpOworCisgICAgc3RhcnQgPSBj
b21tYSA/IGNvbW1hICsgMSA6IHVyaXN0cjsKKworICAgIGlmICgqc3RhcnQpIHsKKyAgICAgICAg
Z3VjaGFyKiBidWY7CisKKyAgICAgICAgaWYgKGJhc2U2NCkgeworICAgICAgICAgICAgaW50IGlu
bGVuLCBzdGF0ZSA9IDA7CisgICAgICAgICAgICBndWludCBzYXZlID0gMDsKKyAgICAgICAgICAg
IGNoYXIqIHVuZXNjYXBlZDsKKworICAgICAgICAgICAgaWYgKHN0cmNocihzdGFydCwgJyUnKSkg
eworICAgICAgICAgICAgICAgIHN0YXJ0ID0gdW5lc2NhcGVkID0gdXJpRGVjb2RlZENvcHkoc3Rh
cnQsIHN0cmxlbihzdGFydCksIFRSVUUpOworICAgICAgICAgICAgICAgIGlmICghdW5lc2NhcGVk
KQorICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICB1bmVzY2FwZWQgPSAwOworCisgICAgICAgICAgICBpbmxlbiA9IHN0cmxl
bihzdGFydCk7CisgICAgICAgICAgICBidWYgPSAoZ3VjaGFyKilnX21hbGxvYyhpbmxlbiAqIDMg
LyA0KTsKKyAgICAgICAgICAgIGRhdGEtPnByaXYtPmNvbnRlbnRMZW5ndGggPQorICAgICAgICAg
ICAgICAgIGdfYmFzZTY0X2RlY29kZV9zdGVwKHN0YXJ0LCBpbmxlbiwgYnVmLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGF0ZSwgJnNhdmUpOworICAgICAgICAgICAg
Z19mcmVlKHVuZXNjYXBlZCk7CisgICAgICAgICAgICBpZiAoc3RhdGUpIHsKKyAgICAgICAgICAg
ICAgICBnX2ZyZWUoYnVmKTsKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiBDYW5ub3QgdXNlIGdfdXJpX3Vu
ZXNjYXBlX3N0cmluZyBub3IKKyAgICAgICAgICAgICAgIHNvdXBfdXJpX2RlY29kZSBiZWNhdXNl
IHdlIGRvbid0IHdhbnQgdG8KKyAgICAgICAgICAgICAgIGZhaWwgZm9yIHRoaW5ncyBsaWtlICIl
M0UlJTNDIiAtPiAiPiU8IiAqLworICAgICAgICAgICAgYnVmID0gKGd1Y2hhciopIHVyaURlY29k
ZWRDb3B5KHN0YXJ0LCBzdHJsZW4oc3RhcnQpLCBUUlVFKTsKKyAgICAgICAgICAgIGlmICghYnVm
KQorICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIGRhdGEtPnByaXYtPmNv
bnRlbnRMZW5ndGggPSBzdHJsZW4oKGNoYXIqKWJ1Zik7CisgICAgICAgIH0KKworICAgICAgICBn
X21lbW9yeV9pbnB1dF9zdHJlYW1fYWRkX2RhdGEoR19NRU1PUllfSU5QVVRfU1RSRUFNKG1lbXN0
cmVhbSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsIGRhdGEt
PnByaXYtPmNvbnRlbnRMZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnX2ZyZWUpOworICAgIH0KKyAgICBnX2ZyZWUodXJpc3RyKTsKKworICAgIHJldHVybiBt
ZW1zdHJlYW07CisKK2ZhaWw6CisgICAgZ19mcmVlKHVyaXN0cik7CisgICAgZ19zZXRfZXJyb3Io
ZXJyb3IsIFdFQktJVF9TT1VQX0VSUk9SLCBXRUJLSVRfU09VUF9FUlJPUl9CQURfVVJJLAorICAg
ICAgICAgICAgICAgIF8oIlVuYWJsZSB0byBkZWNvZGUgVVJJOiAlcyIpLCBzdGFydCk7CisgICAg
Z19vYmplY3RfdW5yZWYobWVtc3RyZWFtKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGdv
ZmZzZXQgd2Via2l0U291cFJlcXVlc3REYXRhR2V0Q29udGVudExlbmd0aChXZWJLaXRTb3VwUmVx
dWVzdCogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRTb3VwUmVxdWVzdERhdGEqIGRhdGEgPSBXRUJL
SVRfU09VUF9SRVFVRVNUX0RBVEEocmVxdWVzdCk7CisKKyAgICByZXR1cm4gZGF0YS0+cHJpdi0+
Y29udGVudExlbmd0aDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKiB3ZWJraXRTb3VwUmVxdWVz
dERhdGFHZXRDb250ZW50VHlwZShXZWJLaXRTb3VwUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBX
ZWJLaXRTb3VwUmVxdWVzdERhdGEqIGRhdGEgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0RBVEEocmVx
dWVzdCk7CisKKyAgICByZXR1cm4gZGF0YS0+cHJpdi0+Y29udGVudFR5cGU7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9zb3VwX3JlcXVlc3RfZGF0YV9jbGFzc19pbml0KFdlYktpdFNvdXBSZXF1
ZXN0RGF0YUNsYXNzKiByZXF1ZXN0X2RhdGFfY2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBv
YmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0X2RhdGFfY2xhc3MpOworICAgIFdl
YktpdFNvdXBSZXF1ZXN0Q2xhc3MqIHJlcXVlc3RfY2xhc3MgPQorICAgICAgICBXRUJLSVRfU09V
UF9SRVFVRVNUX0NMQVNTKHJlcXVlc3RfZGF0YV9jbGFzcyk7CisKKyAgICBnX3R5cGVfY2xhc3Nf
YWRkX3ByaXZhdGUocmVxdWVzdF9kYXRhX2NsYXNzLCBzaXplb2YoV2ViS2l0U291cFJlcXVlc3RE
YXRhUHJpdmF0ZSkpOworCisgICAgb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9zb3Vw
X3JlcXVlc3RfZGF0YV9maW5hbGl6ZTsKKworICAgIHJlcXVlc3RfY2xhc3MtPmNoZWNrVXJpID0g
d2Via2l0U291cFJlcXVlc3REYXRhQ2hlY2tVcmk7CisgICAgcmVxdWVzdF9jbGFzcy0+c2VuZCA9
IHdlYmtpdFNvdXBSZXF1ZXN0RGF0YVNlbmQ7CisgICAgcmVxdWVzdF9jbGFzcy0+Z2V0Q29udGVu
dExlbmd0aCA9IHdlYmtpdFNvdXBSZXF1ZXN0RGF0YUdldENvbnRlbnRMZW5ndGg7CisgICAgcmVx
dWVzdF9jbGFzcy0+Z2V0Q29udGVudFR5cGUgPSB3ZWJraXRTb3VwUmVxdWVzdERhdGFHZXRDb250
ZW50VHlwZTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvd2Via2l0c291cHJlcXVlc3RkYXRhLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC93ZWJraXRzb3VwcmVxdWVzdGRhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5lZmViYTMwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvd2Via2l0c291cHJlcXVlc3RkYXRhLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdh
bGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwKKyAqIEJvc3Rv
biwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgd2Via2l0c291cHJlcXVlc3Rk
YXRhX2gKKyNkZWZpbmUgd2Via2l0c291cHJlcXVlc3RkYXRhX2ggMQorCisjaW5jbHVkZSAid2Vi
a2l0c291cHJlcXVlc3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjZGVmaW5lIFdFQktJ
VF9UWVBFX1NPVVBfUkVRVUVTVF9EQVRBICAgICAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3Rf
ZGF0YV9nZXRfdHlwZSAoKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9EQVRBKG9iamVj
dCkgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmplY3QpLCBXRUJLSVRf
VFlQRV9TT1VQX1JFUVVFU1RfREFUQSwgV2ViS2l0U291cFJlcXVlc3REYXRhKSkKKyNkZWZpbmUg
V0VCS0lUX1NPVVBfUkVRVUVTVF9EQVRBX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NM
QVNTX0NBU1QgKChrbGFzcyksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9EQVRBLCBXZWJLaXRT
b3VwUmVxdWVzdERhdGFDbGFzcykpCisjZGVmaW5lIFdFQktJVF9TT1VQX0lTX1JFUVVFU1RfREFU
QShvYmplY3QpICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqZWN0KSwgV0VC
S0lUX1RZUEVfU09VUF9SRVFVRVNUX0RBVEEpKQorI2RlZmluZSBXRUJLSVRfU09VUF9JU19SRVFV
RVNUX0RBVEFfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwg
V0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0RBVEEpKQorI2RlZmluZSBXRUJLSVRfU09VUF9SRVFV
RVNUX0RBVEFfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2Jq
KSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0RBVEEsIFdlYktpdFNvdXBSZXF1ZXN0RGF0YUNs
YXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0RGF0YVByaXZhdGUgV2Vi
S2l0U291cFJlcXVlc3REYXRhUHJpdmF0ZTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgICAgICBX
ZWJLaXRTb3VwUmVxdWVzdCBwYXJlbnQ7CisKKyAgICAgICAgV2ViS2l0U291cFJlcXVlc3REYXRh
UHJpdmF0ZSAqcHJpdjsKK30gV2ViS2l0U291cFJlcXVlc3REYXRhOworCit0eXBlZGVmIHN0cnVj
dCB7CisgICAgICAgIFdlYktpdFNvdXBSZXF1ZXN0Q2xhc3MgcGFyZW50OworCit9IFdlYktpdFNv
dXBSZXF1ZXN0RGF0YUNsYXNzOworCitHVHlwZSB3ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFfZ2V0
X3R5cGUodm9pZCk7CisKK30KKworI2VuZGlmIC8qIHdlYmtpdHNvdXByZXF1ZXN0ZGF0YV9oICov
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJraXRzb3VwcmVx
dWVzdGVyLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL3dlYmtpdHNvdXByZXF1
ZXN0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NjY2M2EKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJraXRzb3Vw
cmVxdWVzdGVyLmNwcApAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCwgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwKKyAq
IEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJ3ZWJraXRzb3VwcmVxdWVzdGVyLmgiCisKKyNpbmNsdWRlICJ3ZWJraXRzb3Vw
cmVxdWVzdGRhdGEuaCIKKyNpbmNsdWRlICJ3ZWJraXRzb3VwcmVxdWVzdGZpbGUuaCIKKyNpbmNs
dWRlICJ3ZWJraXRzb3VwcmVxdWVzdGh0dHAuaCIKKyNpbmNsdWRlIDxnbGliL2dpMThuLmg+Cisj
aW5jbHVkZSA8bGlic291cC9zb3VwLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRl
ZiBzdHJ1Y3QgeworICAgIEdIYXNoVGFibGUqIHJlcXVlc3RUeXBlczsKK30gV2ViS2l0U291cFJl
cXVlc3RlclByaXZhdGU7CisKKyNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVEVSX0dFVF9QUklW
QVRFKG8pIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG8pLCBXRUJLSVRfVFlQRV9TT1VQ
X1JFUVVFU1RFUiwgV2ViS2l0U291cFJlcXVlc3RlclByaXZhdGUpKQorCitHX0RFRklORV9UWVBF
KFdlYktpdFNvdXBSZXF1ZXN0ZXIsIHdlYmtpdF9zb3VwX3JlcXVlc3RlciwgR19UWVBFX09CSkVD
VCkKKworc3RhdGljIHZvaWQgd2Via2l0X3NvdXBfcmVxdWVzdGVyX2luaXQoV2ViS2l0U291cFJl
cXVlc3RlciogcmVxdWVzdGVyKQoreworICAgIFdlYktpdFNvdXBSZXF1ZXN0ZXJQcml2YXRlKiBw
cml2ID0gV0VCS0lUX1NPVVBfUkVRVUVTVEVSX0dFVF9QUklWQVRFKHJlcXVlc3Rlcik7CisKKyAg
ICBwcml2LT5yZXF1ZXN0VHlwZXMgPSAwOworfQorCitzdGF0aWMgdm9pZCBmaW5hbGl6ZShHT2Jq
ZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0U291cFJlcXVlc3RlciogcmVxdWVzdGVyID0gV0VC
S0lUX1NPVVBfUkVRVUVTVEVSKG9iamVjdCk7CisgICAgV2ViS2l0U291cFJlcXVlc3RlclByaXZh
dGUqIHByaXYgPSBXRUJLSVRfU09VUF9SRVFVRVNURVJfR0VUX1BSSVZBVEUocmVxdWVzdGVyKTsK
KworICAgIGlmIChwcml2LT5yZXF1ZXN0VHlwZXMpCisgICAgICAgIGdfaGFzaF90YWJsZV9kZXN0
cm95KHByaXYtPnJlcXVlc3RUeXBlcyk7CisKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfc291
cF9yZXF1ZXN0ZXJfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGlj
IHZvaWQgd2Via2l0X3NvdXBfcmVxdWVzdGVyX2NsYXNzX2luaXQoV2ViS2l0U291cFJlcXVlc3Rl
ckNsYXNzKiByZXF1ZXN0ZXJfY2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBvYmplY3RfY2xh
c3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0ZXJfY2xhc3MpOworCisgICAgZ190eXBlX2NsYXNz
X2FkZF9wcml2YXRlKHJlcXVlc3Rlcl9jbGFzcywgc2l6ZW9mKFdlYktpdFNvdXBSZXF1ZXN0ZXJQ
cml2YXRlKSk7CisKKyAgICAvKiB2aXJ0dWFsIG1ldGhvZCBvdmVycmlkZSAqLworICAgIG9iamVj
dF9jbGFzcy0+ZmluYWxpemUgPSBmaW5hbGl6ZTsKK30KKworc3RhdGljIHZvaWQgaW5pdF9yZXF1
ZXN0X3R5cGVzKFdlYktpdFNvdXBSZXF1ZXN0ZXJQcml2YXRlKiBwcml2KQoreworICAgIGlmIChw
cml2LT5yZXF1ZXN0VHlwZXMpCisgICAgICAgIHJldHVybjsKKworICAgIHByaXYtPnJlcXVlc3RU
eXBlcyA9IGdfaGFzaF90YWJsZV9uZXdfZnVsbChzb3VwX3N0cl9jYXNlX2hhc2gsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VwX3N0cl9jYXNlX2Vx
dWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19m
cmVlLCAwKTsKKyAgICBnX2hhc2hfdGFibGVfaW5zZXJ0KHByaXYtPnJlcXVlc3RUeXBlcywgZ19z
dHJkdXAoImZpbGUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdTSVpFX1RPX1BPSU5URVIo
V0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0ZJTEUpKTsKKyAgICBnX2hhc2hfdGFibGVfaW5zZXJ0
KHByaXYtPnJlcXVlc3RUeXBlcywgZ19zdHJkdXAoImRhdGEiKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIEdTSVpFX1RPX1BPSU5URVIoV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0RBVEEpKTsK
KyAgICBnX2hhc2hfdGFibGVfaW5zZXJ0KHByaXYtPnJlcXVlc3RUeXBlcywgZ19zdHJkdXAoImh0
dHAiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdTSVpFX1RPX1BPSU5URVIoV0VCS0lUX1RZ
UEVfU09VUF9SRVFVRVNUX0hUVFApKTsKKyAgICBnX2hhc2hfdGFibGVfaW5zZXJ0KHByaXYtPnJl
cXVlc3RUeXBlcywgZ19zdHJkdXAoImh0dHBzIiksCisgICAgICAgICAgICAgICAgICAgICAgICBH
U0laRV9UT19QT0lOVEVSKFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9IVFRQKSk7CisgICAgZ19o
YXNoX3RhYmxlX2luc2VydChwcml2LT5yZXF1ZXN0VHlwZXMsIGdfc3RyZHVwKCJmdHAiKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIEdTSVpFX1RPX1BPSU5URVIoV0VCS0lUX1RZUEVfU09VUF9S
RVFVRVNUX0ZJTEUpKTsKK30KKworV2ViS2l0U291cFJlcXVlc3RlciAqIHdlYmtpdF9zb3VwX3Jl
cXVlc3Rlcl9uZXcodm9pZCkKK3sKKyAgICByZXR1cm4gKFdlYktpdFNvdXBSZXF1ZXN0ZXIqKSBn
X29iamVjdF9uZXcoV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNURVIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworfQorCitXZWJLaXRTb3VwUmVxdWVz
dCAqIHdlYmtpdF9zb3VwX3JlcXVlc3Rlcl9yZXF1ZXN0KFdlYktpdFNvdXBSZXF1ZXN0ZXIqIHJl
cXVlc3RlciwgY29uc3QgY2hhciogdXJpU3RyaW5nLCBTb3VwU2Vzc2lvbiogc2Vzc2lvbiwgR0Vy
cm9yKiogZXJyb3IpCit7CisgICAgU291cFVSSSogdXJpID0gc291cF91cmlfbmV3KHVyaVN0cmlu
Zyk7CisgICAgV2ViS2l0U291cFJlcXVlc3QqIHJlcTsKKworICAgIGlmICghdXJpKSB7CisgICAg
ICAgIGdfc2V0X2Vycm9yKGVycm9yLCBXRUJLSVRfU09VUF9FUlJPUiwgV0VCS0lUX1NPVVBfRVJS
T1JfQkFEX1VSSSwKKyAgICAgICAgICAgICAgICAgICAgXygiQ291bGQgbm90IHBhcnNlIFVSSSAn
JXMnIiksIHVyaVN0cmluZyk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJlcSA9
IHdlYmtpdF9zb3VwX3JlcXVlc3Rlcl9yZXF1ZXN0X3VyaShyZXF1ZXN0ZXIsIHVyaSwgc2Vzc2lv
biwgZXJyb3IpOworICAgIHNvdXBfdXJpX2ZyZWUodXJpKTsKKyAgICByZXR1cm4gcmVxOworfQor
CitXZWJLaXRTb3VwUmVxdWVzdCAqIHdlYmtpdF9zb3VwX3JlcXVlc3Rlcl9yZXF1ZXN0X3VyaShX
ZWJLaXRTb3VwUmVxdWVzdGVyKiByZXF1ZXN0ZXIsIFNvdXBVUkkqIHVyaSwgU291cFNlc3Npb24q
IHNlc3Npb24sIEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYktpdFNvdXBSZXF1ZXN0ZXJQcml2
YXRlKiBwcml2OworICAgIEdUeXBlIHJlcXVlc3RUeXBlOworCisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0lTX1NPVVBfUkVRVUVTVEVSKHJlcXVlc3RlciksIDApOworCisgICAgcHJp
diA9IFdFQktJVF9TT1VQX1JFUVVFU1RFUl9HRVRfUFJJVkFURShyZXF1ZXN0ZXIpOworICAgIGlu
aXRfcmVxdWVzdF90eXBlcyhwcml2KTsKKyAgICByZXF1ZXN0VHlwZSA9IChHVHlwZSkgR1BPSU5U
RVJfVE9fU0laRShnX2hhc2hfdGFibGVfbG9va3VwKHByaXYtPnJlcXVlc3RUeXBlcywgdXJpLT5z
Y2hlbWUpKTsKKyAgICBpZiAoIXJlcXVlc3RUeXBlKSB7CisgICAgICAgIGdfc2V0X2Vycm9yKGVy
cm9yLCBXRUJLSVRfU09VUF9FUlJPUiwgV0VCS0lUX1NPVVBfRVJST1JfVU5TVVBQT1JURURfVVJJ
X1NDSEVNRSwKKyAgICAgICAgICAgICAgICAgICAgXygiVW5zdXBwb3J0ZWQgVVJJIHNjaGVtZSAn
JXMnIiksIHVyaS0+c2NoZW1lKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYg
KGdfdHlwZV9pc19hKHJlcXVlc3RUeXBlLCBHX1RZUEVfSU5JVEFCTEUpKSB7CisgICAgICAgIHJl
dHVybiAoV2ViS2l0U291cFJlcXVlc3QqKWdfaW5pdGFibGVfbmV3KHJlcXVlc3RUeXBlLCAwLCBl
cnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
InVyaSIsIHVyaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgInNlc3Npb24iLCBzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAwKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gKFdl
YktpdFNvdXBSZXF1ZXN0KilnX29iamVjdF9uZXcocmVxdWVzdFR5cGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXJpIiwgdXJpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlc3Npb24iLCBzZXNzaW9u
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7Cisg
ICAgfQorfQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC93
ZWJraXRzb3VwcmVxdWVzdGVyLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJr
aXRzb3VwcmVxdWVzdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM3
YmE0NQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL3dl
YmtpdHNvdXByZXF1ZXN0ZXIuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgKiBQdWJsaWMgTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAs
CisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIHdlYmtpdHNv
dXByZXF1ZXN0ZXJfaAorI2RlZmluZSB3ZWJraXRzb3VwcmVxdWVzdGVyX2ggMQorCisjaW5jbHVk
ZSAid2Via2l0c291cHJlcXVlc3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHX0JFR0lO
X0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNURVIgICAgICAgICAgICAo
d2Via2l0X3NvdXBfcmVxdWVzdGVyX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9TT1VQX1JF
UVVFU1RFUihvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmop
LCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RFUiwgV2ViS2l0U291cFJlcXVlc3RlcikpCisjZGVm
aW5lIFdFQktJVF9TT1VQX1JFUVVFU1RFUl9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19D
TEFTU19DQVNUKChrbGFzcyksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVEVSLCBXZWJLaXRTb3Vw
UmVxdWVzdGVyQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfU09VUF9SRVFVRVNURVIob2JqKSAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfU09V
UF9SRVFVRVNURVIpKQorI2RlZmluZSBXRUJLSVRfSVNfU09VUF9SRVFVRVNURVJfQ0xBU1Moa2xh
c3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFV
RVNURVIpKQorI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNURVJfR0VUX0NMQVNTKG9iaikgIChH
X1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RF
UiwgV2ViS2l0U291cFJlcXVlc3RlckNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIEdP
YmplY3QgcGFyZW50OworfSBXZWJLaXRTb3VwUmVxdWVzdGVyOworCit0eXBlZGVmIHN0cnVjdCB7
CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK30gV2ViS2l0U291cFJlcXVlc3RlckNs
YXNzOworCitHVHlwZSB3ZWJraXRfc291cF9yZXF1ZXN0ZXJfZ2V0X3R5cGUodm9pZCk7CisKK1dl
YktpdFNvdXBSZXF1ZXN0ZXIqIHdlYmtpdF9zb3VwX3JlcXVlc3Rlcl9uZXcodm9pZCk7CisKK1dl
YktpdFNvdXBSZXF1ZXN0KiB3ZWJraXRfc291cF9yZXF1ZXN0ZXJfcmVxdWVzdChXZWJLaXRTb3Vw
UmVxdWVzdGVyKiByZXF1ZXN0ZXIsIGNvbnN0IGNoYXIqIHVyaVN0cmluZywgU291cFNlc3Npb24q
IHNlc3Npb24sIEdFcnJvcioqIGVycm9yKTsKK1dlYktpdFNvdXBSZXF1ZXN0KiB3ZWJraXRfc291
cF9yZXF1ZXN0ZXJfcmVxdWVzdF91cmkoV2ViS2l0U291cFJlcXVlc3RlciogcmVxdWVzdGVyLCBT
b3VwVVJJKiB1cmksIFNvdXBTZXNzaW9uKiBzZXNzaW9uLCBHRXJyb3IqKiBlcnJvcik7CisKK0df
RU5EX0RFQ0xTCisKK30KKworI2VuZGlmIC8qIHdlYmtpdHNvdXByZXF1ZXN0ZXJfaCAqLworCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJraXRzb3VwcmVxdWVz
dGZpbGUuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvd2Via2l0c291cHJlcXVl
c3RmaWxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDJjZWMwCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvd2Via2l0c291
cHJlcXVlc3RmaWxlLmNwcApAQCAtMCwwICsxLDI4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEt
MTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ3ZWJraXRz
b3VwcmVxdWVzdGZpbGUuaCIKKworCisjaW5jbHVkZSAid2Via2l0c291cGRpcmVjdG9yeWlucHV0
c3RyZWFtLmgiCisjaW5jbHVkZSA8Z2xpYi9naTE4bi5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291
cC1zZXNzaW9uLWZlYXR1cmUuaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAtc2Vzc2lvbi5oPgor
I2luY2x1ZGUgPGxpYnNvdXAvc291cC11cmkuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitH
X0RFRklORV9UWVBFKFdlYktpdFNvdXBSZXF1ZXN0RmlsZSwgd2Via2l0X3NvdXBfcmVxdWVzdF9m
aWxlLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1QpCisKK3N0cnVjdCBfV2ViS2l0U291cFJlcXVl
c3RGaWxlUHJpdmF0ZSB7CisgICAgR0ZpbGUqIGdmaWxlOworCisgICAgY2hhciogbWltZVR5cGU7
CisgICAgZ29mZnNldCBzaXplOworfTsKKworR0ZpbGUqIHdlYmtpdFNvdXBSZXF1ZXN0RmlsZUdl
dEZpbGUoV2ViS2l0U291cFJlcXVlc3RGaWxlKiBmaWxlKQoreworICAgIHJldHVybiAoR0ZpbGUq
KWdfb2JqZWN0X3JlZihmaWxlLT5wcml2LT5nZmlsZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9zb3VwX3JlcXVlc3RfZmlsZV9pbml0KFdlYktpdFNvdXBSZXF1ZXN0RmlsZSogZmlsZSkKK3sK
KyAgICBmaWxlLT5wcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKGZpbGUsIFdFQktJ
VF9UWVBFX1NPVVBfUkVRVUVTVF9GSUxFLCBXZWJLaXRTb3VwUmVxdWVzdEZpbGVQcml2YXRlKTsK
KworICAgIGZpbGUtPnByaXYtPnNpemUgPSAtMTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3Nv
dXBfcmVxdWVzdF9maWxlX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRT
b3VwUmVxdWVzdEZpbGUqIGZpbGUgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0ZJTEUob2JqZWN0KTsK
KworICAgIGlmIChmaWxlLT5wcml2LT5nZmlsZSkKKyAgICAgICAgZ19vYmplY3RfdW5yZWYoZmls
ZS0+cHJpdi0+Z2ZpbGUpOworICAgIGdfZnJlZShmaWxlLT5wcml2LT5taW1lVHlwZSk7CisKKyAg
ICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfcGFyZW50X2NsYXNzKS0+
ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdFNvdXBSZXF1ZXN0
RmlsZUNoZWNrVXJpKFdlYktpdFNvdXBSZXF1ZXN0KiByZXF1ZXN0LCBTb3VwVVJJKiB1cmksIEdF
cnJvcioqIGVycm9yKQoreworICAgIC8qICJmaWxlOi9mb28iIGlzIG5vdCB2YWxpZCAqLworICAg
IGlmICghdXJpLT5ob3N0KQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICAvKiBidXQgaXQg
bXVzdCBiZSAiZmlsZTovLy8uLi4iIG9yICJmaWxlOi8vbG9jYWxob3N0Ly4uLiIgKi8KKyAgICBp
ZiAodXJpLT5zY2hlbWUgPT0gU09VUF9VUklfU0NIRU1FX0ZJTEUKKyAgICAgICAgJiYgKnVyaS0+
aG9zdAorICAgICAgICAmJiBnX2FzY2lpX3N0cmNhc2VjbXAodXJpLT5ob3N0LCAibG9jYWxob3N0
IikpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRTb3VwUmVxdWVzdEZpbGVGdHBNYWluTG9vcFF1aXQoR09iamVjdCogb2Jq
ZWN0LCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgbG9vcCkKK3sKKyAgICBnX21haW5f
bG9vcF9xdWl0KChHTWFpbkxvb3AqKWxvb3ApOworfQorCisvKiBUaGlzIGlzIGEgc29tZXdoYXQg
aGFja3kgd2F5IHRvIGdldCBGVFAgdG8gYWxtb3N0IHdvcmsuIFRoZSBwcm9wZXIgd2F5IHRvCisg
KiBnZXQgRlRQIHRvIF9yZWFsbHlfIHdvcmsgaW52b2x2ZXMgaGFja2luZyBHSU8gdG8gaGF2ZSBB
UElzIHRvIGhhbmRsZQorICogY2Fub25jaWFsIFVSTHMuCisgKi8KK3N0YXRpYyBHRmlsZSogd2Vi
a2l0U291cFJlcXVlc3RGaWxlRW5zdXJlRmlsZUZ0cChTb3VwVVJJKiB1cmksIEdDYW5jZWxsYWJs
ZSogY2FuY2VsbGFibGUsIEdFcnJvcioqIGVycm9yKQoreworICAgIFNvdXBVUkkqIGhvc3Q7Cisg
ICAgY2hhciogczsKKyAgICBHRmlsZSogZmlsZSwgKiByZXN1bHQ7CisgICAgR01vdW50KiBtb3Vu
dDsKKworICAgIGhvc3QgPSBzb3VwX3VyaV9jb3B5X2hvc3QodXJpKTsKKyAgICBzID0gc291cF91
cmlfdG9fc3RyaW5nKGhvc3QsIEZBTFNFKTsKKyAgICBmaWxlID0gZ19maWxlX25ld19mb3JfdXJp
KHMpOworICAgIHNvdXBfdXJpX2ZyZWUoaG9zdCk7CisgICAgZ19mcmVlKHMpOworCisgICAgbW91
bnQgPSBnX2ZpbGVfZmluZF9lbmNsb3NpbmdfbW91bnQoZmlsZSwgY2FuY2VsbGFibGUsIGVycm9y
KTsKKyAgICBpZiAoIW1vdW50ICYmIGdfZmlsZV9zdXBwb3J0c190aHJlYWRfY29udGV4dHMoZmls
ZSkpIHsKKyAgICAgICAgR01haW5Db250ZXh0KiBjb250ZXh0ID0gZ19tYWluX2NvbnRleHRfbmV3
KCk7CisgICAgICAgIEdNYWluTG9vcCogbG9vcCA9IGdfbWFpbl9sb29wX25ldyhjb250ZXh0LCBG
QUxTRSk7CisKKyAgICAgICAgZ19jbGVhcl9lcnJvcihlcnJvcik7CisgICAgICAgIGdfbWFpbl9j
b250ZXh0X3B1c2hfdGhyZWFkX2RlZmF1bHQoY29udGV4dCk7CisgICAgICAgIGdfZmlsZV9tb3Vu
dF9lbmNsb3Npbmdfdm9sdW1lKGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdfTU9VTlRfTU9VTlRfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwgICAgICAgIC8qIEZJWE1FISAqLworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjYW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd2Via2l0U291cFJlcXVlc3RGaWxlRnRwTWFpbkxvb3BRdWl0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wKTsKKyAgICAgICAgZ19tYWluX2xvb3Bf
cnVuKGxvb3ApOworICAgICAgICBnX21haW5fY29udGV4dF9wb3BfdGhyZWFkX2RlZmF1bHQoY29u
dGV4dCk7CisgICAgICAgIGdfbWFpbl9sb29wX3VucmVmKGxvb3ApOworICAgICAgICBnX21haW5f
Y29udGV4dF91bnJlZihjb250ZXh0KTsKKyAgICAgICAgbW91bnQgPSBnX2ZpbGVfZmluZF9lbmNs
b3NpbmdfbW91bnQoZmlsZSwgY2FuY2VsbGFibGUsIGVycm9yKTsKKyAgICB9CisgICAgaWYgKCFt
b3VudCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZ19vYmplY3RfdW5yZWYoZmlsZSk7CisKKyAg
ICBmaWxlID0gZ19tb3VudF9nZXRfZGVmYXVsdF9sb2NhdGlvbihtb3VudCk7CisgICAgZ19vYmpl
Y3RfdW5yZWYobW91bnQpOworCisgICAgcyA9IGdfc3RyZHVwKHVyaS0+cGF0aCk7CisgICAgaWYg
KHN0cmNocihzLCAnOycpKQorICAgICAgICAqc3RyY2hyKHMsICc7JykgPSAwOworCisgICAgcmVz
dWx0ID0gZ19maWxlX3Jlc29sdmVfcmVsYXRpdmVfcGF0aChmaWxlLCBzKTsKKyAgICBnX2ZyZWUo
cyk7CisgICAgZ19vYmplY3RfdW5yZWYoZmlsZSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0U291cFJlcXVlc3RGaWxlRW5zdXJlRmlsZShXZWJLaXRT
b3VwUmVxdWVzdEZpbGUqIGZpbGUsIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUsIEdFcnJvcioq
IGVycm9yKQoreworICAgIFNvdXBVUkkqIHVyaTsKKworICAgIGlmIChmaWxlLT5wcml2LT5nZmls
ZSkKKyAgICAgICAgcmV0dXJuIFRSVUU7CisKKyAgICB1cmkgPSB3ZWJraXRTb3VwUmVxdWVzdEdl
dFVyaShXRUJLSVRfU09VUF9SRVFVRVNUKGZpbGUpKTsKKyAgICBpZiAodXJpLT5zY2hlbWUgPT0g
U09VUF9VUklfU0NIRU1FX0ZJTEUpIHsKKyAgICAgICAgZmlsZS0+cHJpdi0+Z2ZpbGUgPSBnX2Zp
bGVfbmV3X2Zvcl9wYXRoKHVyaS0+cGF0aCk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0K
KworICAgIGlmICh1cmktPnNjaGVtZSA9PSBTT1VQX1VSSV9TQ0hFTUVfRlRQKSB7CisgICAgICAg
IGZpbGUtPnByaXYtPmdmaWxlID0gd2Via2l0U291cFJlcXVlc3RGaWxlRW5zdXJlRmlsZUZ0cCh1
cmksIGNhbmNlbGxhYmxlLCBlcnJvcik7CisgICAgICAgIHJldHVybiAoZ2Jvb2xlYW4pZmlsZS0+
cHJpdi0+Z2ZpbGU7CisgICAgfQorCisgICAgZ19zZXRfZXJyb3IoZXJyb3IsIFdFQktJVF9TT1VQ
X0VSUk9SLCBXRUJLSVRfU09VUF9FUlJPUl9VTlNVUFBPUlRFRF9VUklfU0NIRU1FLAorICAgICAg
ICAgICAgICAgIF8oIlVuc3VwcG9ydGVkIFVSSSBzY2hlbWUgJyVzJyIpLCB1cmktPnNjaGVtZSk7
CisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgR0lucHV0U3RyZWFtKiB3ZWJraXRTb3Vw
UmVxdWVzdEZpbGVTZW5kKFdlYktpdFNvdXBSZXF1ZXN0KiByZXF1ZXN0LCBHQ2FuY2VsbGFibGUq
IGNhbmNlbGxhYmxlLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJLaXRTb3VwUmVxdWVzdEZp
bGUqIGZpbGUgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0ZJTEUocmVxdWVzdCk7CisgICAgR0lucHV0
U3RyZWFtKiBzdHJlYW07CisgICAgR0Vycm9yKiBNeUVycm9yID0gMDsKKworICAgIGlmICghd2Vi
a2l0U291cFJlcXVlc3RGaWxlRW5zdXJlRmlsZShmaWxlLCBjYW5jZWxsYWJsZSwgZXJyb3IpKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIHN0cmVhbSA9IEdfSU5QVVRfU1RSRUFNKGdfZmlsZV9y
ZWFkKGZpbGUtPnByaXYtPmdmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhbmNlbGxhYmxlLCAmTXlFcnJvcikpOworICAgIGlmICghc3RyZWFtKSB7CisgICAg
ICAgIGlmIChnX2Vycm9yX21hdGNoZXMoTXlFcnJvciwgR19JT19FUlJPUiwgR19JT19FUlJPUl9J
U19ESVJFQ1RPUlkpKSB7CisgICAgICAgICAgICBHRmlsZUVudW1lcmF0b3IqIGVudW1lcmF0b3I7
CisgICAgICAgICAgICBnX2NsZWFyX2Vycm9yKCZNeUVycm9yKTsKKyAgICAgICAgICAgIGVudW1l
cmF0b3IgPSBnX2ZpbGVfZW51bWVyYXRlX2NoaWxkcmVuKGZpbGUtPnByaXYtPmdmaWxlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIioiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19GSUxFX1FV
RVJZX0lORk9fTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhbmNlbGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXJyb3IpOworICAgICAgICAgICAgaWYgKGVudW1lcmF0b3IpIHsK
KyAgICAgICAgICAgICAgICBzdHJlYW0gPSB3ZWJraXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW1O
ZXcoZW51bWVyYXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2Via2l0U291cFJlcXVlc3RHZXRVcmkocmVxdWVzdCkpOworICAg
ICAgICAgICAgICAgIGdfb2JqZWN0X3VucmVmKGVudW1lcmF0b3IpOworICAgICAgICAgICAgICAg
IGZpbGUtPnByaXYtPm1pbWVUeXBlID0gZ19zdHJkdXAoInRleHQvaHRtbCIpOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZ19wcm9wYWdhdGVfZXJyb3IoZXJy
b3IsIE15RXJyb3IpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgR0ZpbGVJbmZv
KiBpbmZvID0gZ19maWxlX3F1ZXJ5X2luZm8oZmlsZS0+cHJpdi0+Z2ZpbGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRB
UkRfQ09OVEVOVF9UWVBFICIsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX1NJWkUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChHRmlsZVF1ZXJ5SW5mb0ZsYWdzKTAsIGNhbmNl
bGxhYmxlLCAwKTsKKyAgICAgICAgaWYgKGluZm8pIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIq
IENvbnRlbnRUeXBlOworICAgICAgICAgICAgZmlsZS0+cHJpdi0+c2l6ZSA9IGdfZmlsZV9pbmZv
X2dldF9zaXplKGluZm8pOworICAgICAgICAgICAgQ29udGVudFR5cGUgPSBnX2ZpbGVfaW5mb19n
ZXRfY29udGVudF90eXBlKGluZm8pOworCisgICAgICAgICAgICBpZiAoQ29udGVudFR5cGUpCisg
ICAgICAgICAgICAgICAgZmlsZS0+cHJpdi0+bWltZVR5cGUgPSBnX2NvbnRlbnRfdHlwZV9nZXRf
bWltZV90eXBlKENvbnRlbnRUeXBlKTsKKyAgICAgICAgICAgIGdfb2JqZWN0X3VucmVmKGluZm8p
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHN0cmVhbTsKK30KKworc3RhdGljIHZv
aWQgd2Via2l0U291cFJlcXVlc3RGaWxlU2VuZEFzeW5jVGhyZWFkKEdTaW1wbGVBc3luY1Jlc3Vs
dCogcmVzLCBHT2JqZWN0KiBvYmplY3QsIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUpCit7Cisg
ICAgR0lucHV0U3RyZWFtKiBzdHJlYW07CisgICAgV2ViS2l0U291cFJlcXVlc3QqIHJlcXVlc3Q7
CisgICAgR0Vycm9yKiBlcnJvciA9IDA7CisKKyAgICByZXF1ZXN0ID0gV0VCS0lUX1NPVVBfUkVR
VUVTVChvYmplY3QpOworCisgICAgc3RyZWFtID0gd2Via2l0U291cFJlcXVlc3RGaWxlU2VuZChy
ZXF1ZXN0LCBjYW5jZWxsYWJsZSwgJmVycm9yKTsKKworICAgIGlmICghc3RyZWFtKSB7CisgICAg
ICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfZnJvbV9lcnJvcihyZXMsIGVycm9yKTsKKyAg
ICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKKyAgICB9IGVsc2UgeworICAgICAgICBnX3NpbXBs
ZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19ncG9pbnRlcihyZXMsIHN0cmVhbSwgZ19vYmplY3Rf
dW5yZWYpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0U291cFJlcXVlc3RGaWxlU2Vu
ZEFzeW5jKFdlYktpdFNvdXBSZXF1ZXN0KiByZXF1ZXN0LCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxh
YmxlLCBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLCBncG9pbnRlciBVc2VyRGF0YSkKK3sK
KyAgICBHU2ltcGxlQXN5bmNSZXN1bHQqIHJlczsKKworICAgIHJlcyA9IGdfc2ltcGxlX2FzeW5j
X3Jlc3VsdF9uZXcoR19PQkpFQ1QocmVxdWVzdCksIGNhbGxiYWNrLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVXNlckRhdGEsIChncG9pbnRlcil3ZWJraXRTb3VwUmVxdWVz
dEZpbGVTZW5kQXN5bmMpOworCisgICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3J1bl9pbl90aHJl
YWQocmVzLCB3ZWJraXRTb3VwUmVxdWVzdEZpbGVTZW5kQXN5bmNUaHJlYWQsIEdfUFJJT1JJVFlf
REVGQVVMVCwgY2FuY2VsbGFibGUpOworICAgIGdfb2JqZWN0X3VucmVmKHJlcyk7Cit9CisKK3N0
YXRpYyBHSW5wdXRTdHJlYW0qIHdlYmtpdFNvdXBSZXF1ZXN0RmlsZVNlbmRGaW5pc2goV2ViS2l0
U291cFJlcXVlc3QqIHJlcXVlc3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBHRXJyb3IqKiBlcnJv
cikKK3sKKyAgICBHU2ltcGxlQXN5bmNSZXN1bHQqIHNpbXBsZSA9IEdfU0lNUExFX0FTWU5DX1JF
U1VMVChyZXN1bHQpOworCisgICAgZ193YXJuX2lmX2ZhaWwoZ19zaW1wbGVfYXN5bmNfcmVzdWx0
X2dldF9zb3VyY2VfdGFnKHNpbXBsZSkgPT0gd2Via2l0U291cFJlcXVlc3RGaWxlU2VuZEFzeW5j
KTsKKworICAgIGlmIChnX3NpbXBsZV9hc3luY19yZXN1bHRfcHJvcGFnYXRlX2Vycm9yKHNpbXBs
ZSwgZXJyb3IpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiAoR0lucHV0U3RyZWFt
KilnX29iamVjdF9yZWYoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9vcF9yZXNfZ3BvaW50ZXIo
c2ltcGxlKSk7Cit9CisKK3N0YXRpYyBnb2Zmc2V0IHdlYmtpdFNvdXBSZXF1ZXN0RmlsZUdldENv
bnRlbnRMZW5ndGgoV2ViS2l0U291cFJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0U291
cFJlcXVlc3RGaWxlKiBmaWxlID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9GSUxFKHJlcXVlc3QpOwor
CisgICAgcmV0dXJuIGZpbGUtPnByaXYtPnNpemU7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyKiB3
ZWJraXRTb3VwUmVxdWVzdEZpbGVHZXRDb250ZW50VHlwZShXZWJLaXRTb3VwUmVxdWVzdCogcmVx
dWVzdCkKK3sKKyAgICBXZWJLaXRTb3VwUmVxdWVzdEZpbGUqIGZpbGUgPSBXRUJLSVRfU09VUF9S
RVFVRVNUX0ZJTEUocmVxdWVzdCk7CisKKyAgICBpZiAoIWZpbGUtPnByaXYtPm1pbWVUeXBlKQor
ICAgICAgICByZXR1cm4gImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSI7CisKKyAgICByZXR1cm4g
ZmlsZS0+cHJpdi0+bWltZVR5cGU7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX3JlcXVl
c3RfZmlsZV9jbGFzc19pbml0KFdlYktpdFNvdXBSZXF1ZXN0RmlsZUNsYXNzKiByZXF1ZXN0Rmls
ZUNsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFT
UyhyZXF1ZXN0RmlsZUNsYXNzKTsKKyAgICBXZWJLaXRTb3VwUmVxdWVzdENsYXNzKiByZXF1ZXN0
Q2xhc3MgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0NMQVNTKHJlcXVlc3RGaWxlQ2xhc3MpOworCisg
ICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKHJlcXVlc3RGaWxlQ2xhc3MsIHNpemVvZihXZWJL
aXRTb3VwUmVxdWVzdEZpbGVQcml2YXRlKSk7CisKKyAgICBvYmplY3RDbGFzcy0+ZmluYWxpemUg
PSB3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfZmluYWxpemU7CisKKyAgICByZXF1ZXN0Q2xhc3Mt
PmNoZWNrVXJpID0gd2Via2l0U291cFJlcXVlc3RGaWxlQ2hlY2tVcmk7CisgICAgcmVxdWVzdENs
YXNzLT5zZW5kID0gd2Via2l0U291cFJlcXVlc3RGaWxlU2VuZDsKKyAgICByZXF1ZXN0Q2xhc3Mt
PnNlbmRBc3luYyA9IHdlYmtpdFNvdXBSZXF1ZXN0RmlsZVNlbmRBc3luYzsKKyAgICByZXF1ZXN0
Q2xhc3MtPnNlbmRGaW5pc2ggPSB3ZWJraXRTb3VwUmVxdWVzdEZpbGVTZW5kRmluaXNoOworICAg
IHJlcXVlc3RDbGFzcy0+Z2V0Q29udGVudExlbmd0aCA9IHdlYmtpdFNvdXBSZXF1ZXN0RmlsZUdl
dENvbnRlbnRMZW5ndGg7CisgICAgcmVxdWVzdENsYXNzLT5nZXRDb250ZW50VHlwZSA9IHdlYmtp
dFNvdXBSZXF1ZXN0RmlsZUdldENvbnRlbnRUeXBlOworfQorCit9CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJraXRzb3VwcmVxdWVzdGZpbGUuaCBiL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL3dlYmtpdHNvdXByZXF1ZXN0ZmlsZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0YTAzNzIKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC93ZWJraXRzb3VwcmVxdWVzdGZpbGUuaApAQCAt
MCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJlZCBIYXQsIEluYy4KKyAq
IENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAor
ICogUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFj
ZSwgU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lm
bmRlZiB3ZWJraXRzb3VwcmVxdWVzdGZpbGVfaAorI2RlZmluZSB3ZWJraXRzb3VwcmVxdWVzdGZp
bGVfaCAxCisKKyNpbmNsdWRlICJ3ZWJraXRzb3VwcmVxdWVzdC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0ZJTEUgICAgICAgICAg
ICAod2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9T
T1VQX1JFUVVFU1RfRklMRShvYmplY3QpICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9D
QVNUKChvYmplY3QpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfRklMRSwgV2ViS2l0U291cFJl
cXVlc3RGaWxlKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9GSUxFX0NMQVNTKGtsYXNz
KSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgV0VCS0lUX1RZUEVfU09VUF9S
RVFVRVNUX0ZJTEUsIFdlYktpdFNvdXBSZXF1ZXN0RmlsZUNsYXNzKSkKKyNkZWZpbmUgV0VCS0lU
X1NPVVBfSVNfUkVRVUVTVF9GSUxFKG9iamVjdCkgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNF
X1RZUEUoKG9iamVjdCksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9GSUxFKSkKKyNkZWZpbmUg
V0VCS0lUX1NPVVBfSVNfUkVRVUVTVF9GSUxFX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NM
QVNTX1RZUEUoKGtsYXNzKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0ZJTEUpKQorI2RlZmlu
ZSBXRUJLSVRfU09VUF9SRVFVRVNUX0ZJTEVfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFO
Q0VfR0VUX0NMQVNTKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfRklMRSwgV2ViS2l0
U291cFJlcXVlc3RGaWxlQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0U291cFJlcXVl
c3RGaWxlUHJpdmF0ZSBXZWJLaXRTb3VwUmVxdWVzdEZpbGVQcml2YXRlOworCit0eXBlZGVmIHN0
cnVjdCB7CisgICAgV2ViS2l0U291cFJlcXVlc3QgcGFyZW50OworCisgICAgV2ViS2l0U291cFJl
cXVlc3RGaWxlUHJpdmF0ZSogcHJpdjsKK30gV2ViS2l0U291cFJlcXVlc3RGaWxlOworCit0eXBl
ZGVmIHN0cnVjdCB7CisgICAgV2ViS2l0U291cFJlcXVlc3RDbGFzcyBwYXJlbnRfY2xhc3M7CisK
K30gV2ViS2l0U291cFJlcXVlc3RGaWxlQ2xhc3M7CisKK0dUeXBlIHdlYmtpdF9zb3VwX3JlcXVl
c3RfZmlsZV9nZXRfdHlwZSh2b2lkKTsKKworR0ZpbGUqIHdlYmtpdFNvdXBSZXF1ZXN0RmlsZUdl
dEZpbGUoV2ViS2l0U291cFJlcXVlc3RGaWxlKiBmaWxlKTsKKworfQorCisjZW5kaWYgLyogd2Vi
a2l0c291cHJlcXVlc3RmaWxlX2ggKi8KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL3dlYmtpdHNvdXByZXF1ZXN0aHR0cC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC93ZWJraXRzb3VwcmVxdWVzdGh0dHAuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjFjOTUzY2YKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC93ZWJraXRzb3VwcmVxdWVzdGh0dHAuY3BwCkBAIC0wLDAgKzEsMzE0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICogUHVibGlj
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisg
KiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUg
MzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIndlYmtpdHNvdXByZXF1ZXN0aHR0cC5oIgorCisjaW5jbHVkZSAi
d2Via2l0c291cGNhY2hlY29yZS5oIgorI2luY2x1ZGUgIndlYmtpdHNvdXBodHRwaW5wdXRzdHJl
YW0uaCIKKyNpbmNsdWRlIDxnbGliL2dpMThuLmg+CisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR19ERUZJTkVfVFlQRShXZWJLaXRTb3VwUmVxdWVz
dEhUVFAsIHdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cCwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNU
KQorCitzdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0SFRUUFByaXZhdGUgeworICAgIFNvdXBNZXNz
YWdlKiBtc2c7Cit9OworCisvKioKKyAqIHdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9nZXRfbWVz
c2FnZToKKyAqIEBodHRwOiBhICNXZWJLaXRTb3VwUmVxdWVzdEhUVFAgb2JqZWN0CisgKgorICog
R2V0cyBhIG5ldyByZWZlcmVuY2UgdG8gdGhlICNTb3VwTWVzc2FnZSBhc3NvY2lhdGVkIHRvIHRo
aXMgV2ViS2l0U291cFJlcXVlc3QKKyAqCisgKiBSZXR1cm5zOiBhIG5ldyByZWZlcmVuY2UgdG8g
dGhlICNTb3VwTWVzc2FnZQorICoqLworU291cE1lc3NhZ2UgKiB3ZWJraXRTb3VwUmVxdWVzdEh0
dHBHZXRNZXNzYWdlKFdlYktpdFNvdXBSZXF1ZXN0SFRUUCogaHR0cCkKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfU09VUF9JU19SRVFVRVNUX0hUVFAoaHR0cCksIDApOworCisg
ICAgcmV0dXJuIChTb3VwTWVzc2FnZSopZ19vYmplY3RfcmVmKGh0dHAtPnByaXYtPm1zZyk7Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9pbml0KFdlYktpdFNvdXBS
ZXF1ZXN0SFRUUCogaHR0cCkKK3sKKyAgICBodHRwLT5wcml2ID0gR19UWVBFX0lOU1RBTkNFX0dF
VF9QUklWQVRFKGh0dHAsIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9IVFRQLCBXZWJLaXRTb3Vw
UmVxdWVzdEhUVFBQcml2YXRlKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdFNvdXBSZXF1
ZXN0SHR0cENoZWNrVXJpKFdlYktpdFNvdXBSZXF1ZXN0KiByZXF1ZXN0LCBTb3VwVVJJKiB1cmks
IEdFcnJvcioqIGVycm9yKQoreworICAgIFdlYktpdFNvdXBSZXF1ZXN0SFRUUCogaHR0cCA9IFdF
QktJVF9TT1VQX1JFUVVFU1RfSFRUUChyZXF1ZXN0KTsKKworICAgIGlmICghU09VUF9VUklfVkFM
SURfRk9SX0hUVFAodXJpKSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgaHR0cC0+cHJp
di0+bXNnID0gc291cF9tZXNzYWdlX25ld19mcm9tX3VyaShTT1VQX01FVEhPRF9HRVQsIHVyaSk7
CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX3JlcXVlc3Rf
aHR0cF9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0U291cFJlcXVlc3RI
VFRQKiBodHRwID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9IVFRQKG9iamVjdCk7CisKKyAgICBpZiAo
aHR0cC0+cHJpdi0+bXNnKQorICAgICAgICBnX29iamVjdF91bnJlZihodHRwLT5wcml2LT5tc2cp
OworCisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX3BhcmVudF9j
bGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyBHSW5wdXRTdHJlYW0gKiB3ZWJr
aXRTb3VwUmVxdWVzdEh0dHBTZW5kKFdlYktpdFNvdXBSZXF1ZXN0KiByZXF1ZXN0LCBHQ2FuY2Vs
bGFibGUqIGNhbmNlbGxhYmxlLCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBXZWJLaXRTb3VwSFRU
UElucHV0U3RyZWFtKiBodHRwc3RyZWFtOworICAgIFdlYktpdFNvdXBSZXF1ZXN0SFRUUCogaHR0
cCA9IFdFQktJVF9TT1VQX1JFUVVFU1RfSFRUUChyZXF1ZXN0KTsKKworICAgIGh0dHBzdHJlYW0g
PSB3ZWJraXRTb3VwSHR0cElucHV0U3RyZWFtTmV3KHdlYmtpdFNvdXBSZXF1ZXN0R2V0U2Vzc2lv
bihyZXF1ZXN0KSwgaHR0cC0+cHJpdi0+bXNnKTsKKyAgICBpZiAoIXdlYmtpdFNvdXBIdHRwSW5w
dXRTdHJlYW1TZW5kKGh0dHBzdHJlYW0sIGNhbmNlbGxhYmxlLCBlcnJvcikpIHsKKyAgICAgICAg
Z19vYmplY3RfdW5yZWYoaHR0cHN0cmVhbSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAg
ICByZXR1cm4gKEdJbnB1dFN0cmVhbSopaHR0cHN0cmVhbTsKK30KKworCitzdGF0aWMgdm9pZCBz
ZW5kQXN5bmMoR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIg
dXNlckRhdGEpCit7CisgICAgV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSogaHR0cHN0cmVhbSA9
IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNKHNvdXJjZSk7CisgICAgR1NpbXBsZUFzeW5j
UmVzdWx0KiBzaW1wbGUgPSAoR1NpbXBsZUFzeW5jUmVzdWx0Kil1c2VyRGF0YTsKKyAgICBHRXJy
b3IqIGVycm9yID0gMDsKKworICAgIGlmICh3ZWJraXRTb3VwSHR0cElucHV0U3RyZWFtU2VuZEZp
bmlzaChodHRwc3RyZWFtLCByZXN1bHQsICZlcnJvcikpCisgICAgICAgIGdfc2ltcGxlX2FzeW5j
X3Jlc3VsdF9zZXRfb3BfcmVzX2dwb2ludGVyKHNpbXBsZSwgaHR0cHN0cmVhbSwgZ19vYmplY3Rf
dW5yZWYpOworICAgIGVsc2UgeworICAgICAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X2Zy
b21fZXJyb3Ioc2ltcGxlLCBlcnJvcik7CisgICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7Cisg
ICAgICAgIGdfb2JqZWN0X3VucmVmKGh0dHBzdHJlYW0pOworICAgIH0KKyAgICBnX3NpbXBsZV9h
c3luY19yZXN1bHRfY29tcGxldGUoc2ltcGxlKTsKKyAgICBnX29iamVjdF91bnJlZihzaW1wbGUp
OworfQorCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBXZWJLaXRTb3VwUmVxdWVzdEhUVFAqIHJl
cTsKKyAgICBTb3VwTWVzc2FnZSogb3JpZ2luYWw7CisgICAgR0NhbmNlbGxhYmxlKiBjYW5jZWxs
YWJsZTsKKyAgICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrOworICAgIGdwb2ludGVyIHVz
ZXJEYXRhOworfSBDb25kaXRpb25hbEhlbHBlcjsKKworCitzdGF0aWMgdm9pZCBjb25kaXRpb25h
bEdldFJlYWR5Q2IoU291cFNlc3Npb24qIHNlc3Npb24sIFNvdXBNZXNzYWdlKiBtc2csIGdwb2lu
dGVyIHVzZXJEYXRhKQoreworICAgIENvbmRpdGlvbmFsSGVscGVyKiBoZWxwZXIgPSAoQ29uZGl0
aW9uYWxIZWxwZXIqKSB1c2VyRGF0YTsKKyAgICBHU2ltcGxlQXN5bmNSZXN1bHQqIHNpbXBsZTsK
KyAgICBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtKiBodHRwc3RyZWFtOworCisgICAgc2ltcGxl
ID0gZ19zaW1wbGVfYXN5bmNfcmVzdWx0X25ldyhHX09CSkVDVChoZWxwZXItPnJlcSksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwZXItPmNhbGxiYWNrLCBoZWxw
ZXItPnVzZXJEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdw
b2ludGVyKWNvbmRpdGlvbmFsR2V0UmVhZHlDYik7CisKKyAgICBpZiAobXNnLT5zdGF0dXNfY29k
ZSA9PSBTT1VQX1NUQVRVU19OT1RfTU9ESUZJRUQpIHsKKyAgICAgICAgV2ViS2l0U291cENhY2hl
Q29yZSogY2FjaGUgPSAoV2ViS2l0U291cENhY2hlQ29yZSopIHNvdXBfc2Vzc2lvbl9nZXRfZmVh
dHVyZShzZXNzaW9uLCBXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFX0NPUkUpOworCisgICAgICAgIGh0
dHBzdHJlYW0gPSAoV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSopIHdlYmtpdFNvdXBDYWNoZUNv
cmVTZW5kUmVzcG9uc2UoY2FjaGUsIG1zZyk7CisgICAgICAgIGlmIChodHRwc3RyZWFtKSB7Cisg
ICAgICAgICAgICBjb25zdCBnY2hhciogY29udGVudFR5cGU7CisKKyAgICAgICAgICAgIGdfc2lt
cGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dwb2ludGVyKHNpbXBsZSwgaHR0cHN0cmVhbSwg
Z19vYmplY3RfdW5yZWYpOworCisgICAgICAgICAgICBzb3VwX21lc3NhZ2VfZ290X2hlYWRlcnMo
aGVscGVyLT5vcmlnaW5hbCk7CisgICAgICAgICAgICBjb250ZW50VHlwZSA9IHNvdXBfbWVzc2Fn
ZV9oZWFkZXJzX2dldF9jb250ZW50X3R5cGUobXNnLT5yZXNwb25zZV9oZWFkZXJzLCAwKTsKKyAg
ICAgICAgICAgIHNvdXBfbWVzc2FnZV9jb250ZW50X3NuaWZmZWQoaGVscGVyLT5vcmlnaW5hbCwg
Y29udGVudFR5cGUsIDApOworCisgICAgICAgICAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfY29t
cGxldGUoc2ltcGxlKTsKKworICAgICAgICAgICAgc291cF9tZXNzYWdlX2ZpbmlzaGVkKGhlbHBl
ci0+b3JpZ2luYWwpOworCisgICAgICAgICAgICBnX29iamVjdF91bnJlZihzaW1wbGUpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogQXNrIGFnYWluIGZvciB0aGUgcmVzb3VyY2Us
IHNvbWVob3cgdGhlIGNhY2hlIGNhbm5vdCBsb2NhdGUgaXQgKi8KKyAgICAgICAgICAgIGh0dHBz
dHJlYW0gPSB3ZWJraXRTb3VwSHR0cElucHV0U3RyZWFtTmV3KHNlc3Npb24sIGhlbHBlci0+b3Jp
Z2luYWwpOworICAgICAgICAgICAgd2Via2l0U291cEh0dHBJbnB1dFN0cmVhbVNlbmRBc3luYyho
dHRwc3RyZWFtLCBHX1BSSU9SSVRZX0RFRkFVTFQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhlbHBlci0+Y2FuY2VsbGFibGUsIHNlbmRBc3luYywgc2lt
cGxlKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8qIEl0IGlzIGluIHRoZSBj
YWNoZSBidXQgaXQgd2FzIG1vZGlmaWVkIHJlbW90ZWx5ICovCisgICAgICAgIGh0dHBzdHJlYW0g
PSB3ZWJraXRTb3VwSHR0cElucHV0U3RyZWFtTmV3KHNlc3Npb24sIGhlbHBlci0+b3JpZ2luYWwp
OworICAgICAgICB3ZWJraXRTb3VwSHR0cElucHV0U3RyZWFtU2VuZEFzeW5jKGh0dHBzdHJlYW0s
IEdfUFJJT1JJVFlfREVGQVVMVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoZWxwZXItPmNhbmNlbGxhYmxlLCBzZW5kQXN5bmMsIHNpbXBsZSk7CisgICAgfQor
CisgICAgZ19vYmplY3RfdW5yZWYoaGVscGVyLT5yZXEpOworICAgIGdfb2JqZWN0X3VucmVmKGhl
bHBlci0+b3JpZ2luYWwpOworICAgIGdfc2xpY2VfZnJlZShDb25kaXRpb25hbEhlbHBlciwgaGVs
cGVyKTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFdlYktpdFNvdXBSZXF1ZXN0SFRUUCog
aHR0cDsKKyAgICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrOworICAgIGdwb2ludGVyIHVz
ZXJEYXRhOworfSBTZW5kQXN5bmNIZWxwZXI7CisKK3N0YXRpYyB2b2lkIHdlYmtpdFNvdXBSZXF1
ZXN0SHR0cFNlbmRBc3luYyhXZWJLaXRTb3VwUmVxdWVzdCogcmVxdWVzdCwgR0NhbmNlbGxhYmxl
KiBjYW5jZWxsYWJsZSwgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50ZXIgdXNl
ckRhdGEpOworCitzdGF0aWMgZ2Jvb2xlYW4gc2VuZEFzeW5jQ2IoZ3BvaW50ZXIgZGF0YSkKK3sK
KyAgICBHU2ltcGxlQXN5bmNSZXN1bHQqIHNpbXBsZTsKKyAgICBXZWJLaXRTb3VwSFRUUElucHV0
U3RyZWFtKiBodHRwc3RyZWFtOworICAgIFNvdXBTZXNzaW9uKiBzZXNzaW9uOworICAgIFdlYktp
dFNvdXBDYWNoZUNvcmUqIGNhY2hlOworICAgIFNlbmRBc3luY0hlbHBlciogaGVscGVyID0gKFNl
bmRBc3luY0hlbHBlciopIGRhdGE7CisKKyAgICBzZXNzaW9uID0gd2Via2l0U291cFJlcXVlc3RH
ZXRTZXNzaW9uKFdFQktJVF9TT1VQX1JFUVVFU1QoaGVscGVyLT5odHRwKSk7CisgICAgY2FjaGUg
PSAoV2ViS2l0U291cENhY2hlQ29yZSopIHNvdXBfc2Vzc2lvbl9nZXRfZmVhdHVyZShzZXNzaW9u
LCBXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFX0NPUkUpOworCisgICAgaHR0cHN0cmVhbSA9IChXZWJL
aXRTb3VwSFRUUElucHV0U3RyZWFtKikgd2Via2l0U291cENhY2hlQ29yZVNlbmRSZXNwb25zZShj
YWNoZSwgU09VUF9NRVNTQUdFKGhlbHBlci0+aHR0cC0+cHJpdi0+bXNnKSk7CisKKyAgICBpZiAo
aHR0cHN0cmVhbSkgeworICAgICAgICBjb25zdCBnY2hhciogY29udGVudFR5cGU7CisKKyAgICAg
ICAgc2ltcGxlID0gZ19zaW1wbGVfYXN5bmNfcmVzdWx0X25ldyhHX09CSkVDVChoZWxwZXItPmh0
dHApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlci0+
Y2FsbGJhY2ssIGhlbHBlci0+dXNlckRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGdwb2ludGVyKXdlYmtpdFNvdXBSZXF1ZXN0SHR0cFNlbmRBc3luYyk7
CisgICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dwb2ludGVyKHNpbXBs
ZSwgaHR0cHN0cmVhbSwgZ19vYmplY3RfdW5yZWYpOworCisgICAgICAgIC8qIFVwZGF0ZSBtZXNz
YWdlIHN0YXR1cyAqLworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhoZWxwZXItPmh0
dHAtPnByaXYtPm1zZywgU09VUF9TVEFUVVNfT0spOworCisgICAgICAgIC8qIElzc3VlIHNpZ25h
bHMgICovCisgICAgICAgIHNvdXBfbWVzc2FnZV9nb3RfaGVhZGVycyhoZWxwZXItPmh0dHAtPnBy
aXYtPm1zZyk7CisgICAgICAgIGNvbnRlbnRUeXBlID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0
X2NvbnRlbnRfdHlwZShoZWxwZXItPmh0dHAtPnByaXYtPm1zZy0+cmVzcG9uc2VfaGVhZGVycywg
MCk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9jb250ZW50X3NuaWZmZWQoaGVscGVyLT5odHRwLT5w
cml2LT5tc2csIGNvbnRlbnRUeXBlLCAwKTsKKworICAgICAgICBnX3NpbXBsZV9hc3luY19yZXN1
bHRfY29tcGxldGUoc2ltcGxlKTsKKworICAgICAgICBzb3VwX21lc3NhZ2VfZmluaXNoZWQoaGVs
cGVyLT5odHRwLT5wcml2LT5tc2cpOworCisgICAgICAgIGdfb2JqZWN0X3VucmVmKHNpbXBsZSk7
CisgICAgfQorCisgICAgZ19zbGljZV9mcmVlKFNlbmRBc3luY0hlbHBlciwgaGVscGVyKTsKKwor
ICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0U291cFJlcXVlc3RIdHRw
U2VuZEFzeW5jKFdlYktpdFNvdXBSZXF1ZXN0KiByZXF1ZXN0LCBHQ2FuY2VsbGFibGUqIGNhbmNl
bGxhYmxlLCBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLCBncG9pbnRlciB1c2VyRGF0YSkK
K3sKKyAgICBXZWJLaXRTb3VwUmVxdWVzdEhUVFAqIGh0dHAgPSBXRUJLSVRfU09VUF9SRVFVRVNU
X0hUVFAocmVxdWVzdCk7CisgICAgV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSogaHR0cHN0cmVh
bTsKKyAgICBHU2ltcGxlQXN5bmNSZXN1bHQqIHNpbXBsZTsKKyAgICBTb3VwU2Vzc2lvbiogc2Vz
c2lvbjsKKyAgICBXZWJLaXRTb3VwQ2FjaGVDb3JlKiBjYWNoZTsKKworICAgIHNlc3Npb24gPSB3
ZWJraXRTb3VwUmVxdWVzdEdldFNlc3Npb24ocmVxdWVzdCk7CisgICAgY2FjaGUgPSAoV2ViS2l0
U291cENhY2hlQ29yZSopIHNvdXBfc2Vzc2lvbl9nZXRfZmVhdHVyZShzZXNzaW9uLCBXRUJLSVRf
VFlQRV9TT1VQX0NBQ0hFX0NPUkUpOworCisgICAgaWYgKGNhY2hlKSB7CisgICAgICAgIFdlYktp
dFNvdXBDYWNoZUNvcmVSZXNwb25zZSByZXNwb25zZTsKKworICAgICAgICByZXNwb25zZSA9IHdl
YmtpdFNvdXBDYWNoZUNvcmVIYXNSZXNwb25zZShjYWNoZSwgaHR0cC0+cHJpdi0+bXNnKTsKKyAg
ICAgICAgaWYgKHJlc3BvbnNlID09IFdFQktJVF9TT1VQX0NBQ0hFX0NPUkVfUkVTUE9OU0VfRlJF
U0gpIHsKKyAgICAgICAgICAgIC8qIERvIHJldHVybiB0aGUgc3RyZWFtIGFzeW5jaHJvbm91c2x5
IGFzIGluCisgICAgICAgICAgICAgICB0aGUgb3RoZXIgY2FzZXMuIEl0J3Mgbm90IGVub3VnaCB0
byB1c2UKKyAgICAgICAgICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZV9pbl9p
ZGxlIGFzCisgICAgICAgICAgICAgICB0aGUgc2lnbmFscyBtdXN0IGJlIGFsc28gZW1pdHRlZAor
ICAgICAgICAgICAgICAgYXN5bmNocm9ub3VzbHkgKi8KKyAgICAgICAgICAgIFNlbmRBc3luY0hl
bHBlciogaGVscGVyID0gZ19zbGljZV9uZXcoU2VuZEFzeW5jSGVscGVyKTsKKyAgICAgICAgICAg
IGhlbHBlci0+aHR0cCA9IGh0dHA7CisgICAgICAgICAgICBoZWxwZXItPmNhbGxiYWNrID0gY2Fs
bGJhY2s7CisgICAgICAgICAgICBoZWxwZXItPnVzZXJEYXRhID0gdXNlckRhdGE7CisgICAgICAg
ICAgICBnX3RpbWVvdXRfYWRkKDAsIHNlbmRBc3luY0NiLCBoZWxwZXIpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChyZXNwb25zZSA9PSBXRUJLSVRfU09VUF9D
QUNIRV9DT1JFX1JFU1BPTlNFX05FRURTX1ZBTElEQVRJT04pIHsKKyAgICAgICAgICAgIFNvdXBN
ZXNzYWdlKiBjb25kaXRpb25hbE1zZzsKKyAgICAgICAgICAgIENvbmRpdGlvbmFsSGVscGVyKiBo
ZWxwZXI7CisKKyAgICAgICAgICAgIGNvbmRpdGlvbmFsTXNnID0gd2Via2l0U291cENhY2hlQ29y
ZUdlbmVyYXRlQ29uZGl0aW9uYWxSZXF1ZXN0KGNhY2hlLCBodHRwLT5wcml2LT5tc2cpOworCisg
ICAgICAgICAgICBoZWxwZXIgPSBnX3NsaWNlX25ldzAoQ29uZGl0aW9uYWxIZWxwZXIpOworICAg
ICAgICAgICAgaGVscGVyLT5yZXEgPSAoV2ViS2l0U291cFJlcXVlc3RIVFRQKilnX29iamVjdF9y
ZWYoaHR0cCk7CisgICAgICAgICAgICBoZWxwZXItPm9yaWdpbmFsID0gKFNvdXBNZXNzYWdlKiln
X29iamVjdF9yZWYoaHR0cC0+cHJpdi0+bXNnKTsKKyAgICAgICAgICAgIGhlbHBlci0+Y2FuY2Vs
bGFibGUgPSBjYW5jZWxsYWJsZTsKKyAgICAgICAgICAgIGhlbHBlci0+Y2FsbGJhY2sgPSBjYWxs
YmFjazsKKyAgICAgICAgICAgIGhlbHBlci0+dXNlckRhdGEgPSB1c2VyRGF0YTsKKyAgICAgICAg
ICAgIHNvdXBfc2Vzc2lvbl9xdWV1ZV9tZXNzYWdlKHNlc3Npb24sIGNvbmRpdGlvbmFsTXNnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uYWxHZXRSZWFk
eUNiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscGVyKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHNpbXBsZSA9IGdfc2lt
cGxlX2FzeW5jX3Jlc3VsdF9uZXcoR19PQkpFQ1QoaHR0cCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaywgdXNlckRhdGEsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoZ3BvaW50ZXIpd2Via2l0U291cFJlcXVlc3RIdHRwU2Vu
ZEFzeW5jKTsKKyAgICBodHRwc3RyZWFtID0gd2Via2l0U291cEh0dHBJbnB1dFN0cmVhbU5ldyh3
ZWJraXRTb3VwUmVxdWVzdEdldFNlc3Npb24ocmVxdWVzdCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cC0+cHJpdi0+bXNnKTsKKyAgICB3ZWJraXRT
b3VwSHR0cElucHV0U3RyZWFtU2VuZEFzeW5jKGh0dHBzdHJlYW0sIEdfUFJJT1JJVFlfREVGQVVM
VCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbGxhYmxlLCBz
ZW5kQXN5bmMsIHNpbXBsZSk7Cit9CisKK3N0YXRpYyBHSW5wdXRTdHJlYW0qIHdlYmtpdFNvdXBS
ZXF1ZXN0SHR0cFNlbmRGaW5pc2goV2ViS2l0U291cFJlcXVlc3QqIHJlcXVlc3QsIEdBc3luY1Jl
c3VsdCogcmVzdWx0LCBHRXJyb3IqKiBlcnJvcikKK3sKKyAgICBHU2ltcGxlQXN5bmNSZXN1bHQq
IHNpbXBsZTsKKworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGdfc2ltcGxlX2FzeW5jX3Jlc3Vs
dF9pc192YWxpZChyZXN1bHQsIEdfT0JKRUNUKHJlcXVlc3QpLCAoZ3BvaW50ZXIpd2Via2l0U291
cFJlcXVlc3RIdHRwU2VuZEFzeW5jKSB8fCBnX3NpbXBsZV9hc3luY19yZXN1bHRfaXNfdmFsaWQo
cmVzdWx0LCBHX09CSkVDVChyZXF1ZXN0KSwgKGdwb2ludGVyKWNvbmRpdGlvbmFsR2V0UmVhZHlD
YiksIDApOworCisgICAgc2ltcGxlID0gR19TSU1QTEVfQVNZTkNfUkVTVUxUKHJlc3VsdCk7Cisg
ICAgaWYgKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9wcm9wYWdhdGVfZXJyb3Ioc2ltcGxlLCBlcnJv
cikpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiAoR0lucHV0U3RyZWFtKilnX29iamVj
dF9yZWYoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9vcF9yZXNfZ3BvaW50ZXIoc2ltcGxlKSk7
Cit9CisKK3N0YXRpYyBnb2Zmc2V0IHdlYmtpdFNvdXBSZXF1ZXN0SHR0cEdldENvbnRlbnRMZW5n
dGgoV2ViS2l0U291cFJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0U291cFJlcXVlc3RI
VFRQKiBodHRwID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9IVFRQKHJlcXVlc3QpOworCisgICAgcmV0
dXJuIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9jb250ZW50X2xlbmd0aChodHRwLT5wcml2LT5t
c2ctPnJlc3BvbnNlX2hlYWRlcnMpOworfQorCitzdGF0aWMgY29uc3QgY2hhciogd2Via2l0U291
cFJlcXVlc3RIdHRwR2V0Q29udGVudFR5cGUoV2ViS2l0U291cFJlcXVlc3QqIHJlcXVlc3QpCit7
CisgICAgV2ViS2l0U291cFJlcXVlc3RIVFRQKiBodHRwID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9I
VFRQKHJlcXVlc3QpOworCisgICAgcmV0dXJuIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9jb250
ZW50X3R5cGUoaHR0cC0+cHJpdi0+bXNnLT5yZXNwb25zZV9oZWFkZXJzLCAwKTsKK30KKworc3Rh
dGljIHZvaWQgd2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX2NsYXNzX2luaXQoV2ViS2l0U291cFJl
cXVlc3RIVFRQQ2xhc3MqIHJlcXVlc3RIVFRQQ2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBv
YmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RIVFRQQ2xhc3MpOworICAgIFdlYktp
dFNvdXBSZXF1ZXN0Q2xhc3MqIHJlcXVlc3RDbGFzcyA9CisgICAgICAgIFdFQktJVF9TT1VQX1JF
UVVFU1RfQ0xBU1MocmVxdWVzdEhUVFBDbGFzcyk7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3By
aXZhdGUocmVxdWVzdEhUVFBDbGFzcywgc2l6ZW9mKFdlYktpdFNvdXBSZXF1ZXN0SFRUUFByaXZh
dGUpKTsKKworICAgIG9iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9zb3VwX3JlcXVlc3Rf
aHR0cF9maW5hbGl6ZTsKKworICAgIHJlcXVlc3RDbGFzcy0+Y2hlY2tVcmkgPSB3ZWJraXRTb3Vw
UmVxdWVzdEh0dHBDaGVja1VyaTsKKyAgICByZXF1ZXN0Q2xhc3MtPnNlbmQgPSB3ZWJraXRTb3Vw
UmVxdWVzdEh0dHBTZW5kOworICAgIHJlcXVlc3RDbGFzcy0+c2VuZEFzeW5jID0gd2Via2l0U291
cFJlcXVlc3RIdHRwU2VuZEFzeW5jOworICAgIHJlcXVlc3RDbGFzcy0+c2VuZEZpbmlzaCA9IHdl
YmtpdFNvdXBSZXF1ZXN0SHR0cFNlbmRGaW5pc2g7CisgICAgcmVxdWVzdENsYXNzLT5nZXRDb250
ZW50TGVuZ3RoID0gd2Via2l0U291cFJlcXVlc3RIdHRwR2V0Q29udGVudExlbmd0aDsKKyAgICBy
ZXF1ZXN0Q2xhc3MtPmdldENvbnRlbnRUeXBlID0gd2Via2l0U291cFJlcXVlc3RIdHRwR2V0Q29u
dGVudFR5cGU7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL3dlYmtpdHNvdXByZXF1ZXN0aHR0cC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvd2Via2l0c291cHJlcXVlc3RodHRwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uYzg3MGIyYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL3dlYmtpdHNvdXByZXF1ZXN0aHR0cC5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEln
YWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsCisgKiBCb3N0
b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIHdlYmtpdHNvdXByZXF1ZXN0
aHR0cF9oCisjZGVmaW5lIHdlYmtpdHNvdXByZXF1ZXN0aHR0cF9oIDEKKworI2luY2x1ZGUgIndl
YmtpdHNvdXByZXF1ZXN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2RlZmluZSBXRUJL
SVRfVFlQRV9TT1VQX1JFUVVFU1RfSFRUUCAgICAgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0
X2h0dHBfZ2V0X3R5cGUgKCkpCisjZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfSFRUUChvYmpl
Y3QpICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqZWN0KSwgV0VCS0lU
X1RZUEVfU09VUF9SRVFVRVNUX0hUVFAsIFdlYktpdFNvdXBSZXF1ZXN0SFRUUCkpCisjZGVmaW5l
IFdFQktJVF9TT1VQX1JFUVVFU1RfSFRUUF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19D
TEFTU19DQVNUICgoa2xhc3MpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfSFRUUCwgV2ViS2l0
U291cFJlcXVlc3RIVFRQQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfU09VUF9JU19SRVFVRVNUX0hU
VFAob2JqZWN0KSAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iamVjdCksIFdF
QktJVF9UWVBFX1NPVVBfUkVRVUVTVF9IVFRQKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfSVNfUkVR
VUVTVF9IVFRQX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyks
IFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9IVFRQKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfUkVR
VUVTVF9IVFRQX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9i
aiksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9IVFRQLCBXZWJLaXRTb3VwUmVxdWVzdEhUVFBD
bGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdEhUVFBQcml2YXRlIFdl
YktpdFNvdXBSZXF1ZXN0SFRUUFByaXZhdGU7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICAgICAg
V2ViS2l0U291cFJlcXVlc3QgcGFyZW50OworCisgICAgICAgIFdlYktpdFNvdXBSZXF1ZXN0SFRU
UFByaXZhdGUgKnByaXY7Cit9IFdlYktpdFNvdXBSZXF1ZXN0SFRUUDsKKwordHlwZWRlZiBzdHJ1
Y3QgeworICAgICAgICBXZWJLaXRTb3VwUmVxdWVzdENsYXNzIHBhcmVudDsKKworfSBXZWJLaXRT
b3VwUmVxdWVzdEhUVFBDbGFzczsKKworR1R5cGUgd2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX2dl
dF90eXBlKHZvaWQpOworCitTb3VwTWVzc2FnZSogd2Via2l0U291cFJlcXVlc3RIdHRwR2V0TWVz
c2FnZShXZWJLaXRTb3VwUmVxdWVzdEhUVFAqIGh0dHApOworCit9CisKKyNlbmRpZiAvKiB3ZWJr
aXRzb3VwcmVxdWVzdGh0dHBfaCAqLwotLSAKMS43LjEKCg==
</data>
<flag name="review"
          id="53817"
          type_id="1"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65136</attachid>
            <date>2010-08-23 09:58:44 -0700</date>
            <delta_ts>2010-08-30 03:38:44 -0700</delta_ts>
            <desc>Changes to WebKitGtk+ core network stuff to use the new API from the imported SoupURILoader code</desc>
            <filename>0002-WebKitGtk-uses-the-network-stuff-imported-from-SoupU.patch</filename>
            <type>text/plain</type>
            <size>32261</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">RnJvbSA4YmNjNzQxYjBiYWYwNzQxZjFhYzM5Njc3YjQ5YjQ2Njg3OGFkYmQyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTZXJnaW8gVmlsbGFyIFNlbmluIDxzdmlsbGFyQGlnYWxpYS5j
b20+CkRhdGU6IE1vbiwgMjMgQXVnIDIwMTAgMTg6NTI6NTMgKzAyMDAKU3ViamVjdDogW1BBVENI
IDIvM10gV2ViS2l0R3RrKyB1c2VzIHRoZSBuZXR3b3JrIHN0dWZmIGltcG9ydGVkIGZyb20gU291
cFVSSUxvYWRlciBjb2RlCgotLS0KIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhh
bmRsZUludGVybmFsLmggIHwgICAxNCArLQogLi4uL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNv
dXJjZUhhbmRsZVNvdXAuY3BwICAgfCAgNDgxICsrKysrKysrKystLS0tLS0tLS0tCiBXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3QuaCAgICB8ICAgIDEgKwogLi4u
L3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcCAgfCAgIDI2ICst
CiA0IGZpbGVzIGNoYW5nZWQsIDI2NyBpbnNlcnRpb25zKCspLCAyNTUgZGVsZXRpb25zKC0pCgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJu
YWwuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmgK
aW5kZXggN2I2ZTk2MC4uZWRjZWMwYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCkBAIC00Niw3ICs0NiwxMCBAQAogI2VuZGlmCiAK
ICNpZiBVU0UoU09VUCkKKyNpbmNsdWRlIDxHUmVmUHRyLmg+CiAjaW5jbHVkZSA8bGlic291cC9z
b3VwLmg+CisjaW5jbHVkZSAid2Via2l0c291cHJlcXVlc3QuaCIKKyNpbmNsdWRlICJ3ZWJraXRz
b3VwcmVxdWVzdGVyLmgiCiBjbGFzcyBGcmFtZTsKICNlbmRpZgogCkBAIC0xMTUsNyArMTE4LDgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIFVTRShTT1VQKQogICAgICAgICAgICAgLCBtX21z
ZygwKQogICAgICAgICAgICAgLCBtX2NhbmNlbGxlZChmYWxzZSkKLSAgICAgICAgICAgICwgbV9n
ZmlsZSgwKQorICAgICAgICAgICAgLCBtX3NvdXBSZXF1ZXN0KDApCisgICAgICAgICAgICAsIG1f
cmVxdWVzdGVyKDApCiAgICAgICAgICAgICAsIG1faW5wdXRTdHJlYW0oMCkKICAgICAgICAgICAg
ICwgbV9jYW5jZWxsYWJsZSgwKQogICAgICAgICAgICAgLCBtX2J1ZmZlcigwKQpAQCAtMTIzLDYg
KzEyNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICwgbV90b3RhbCgwKQog
ICAgICAgICAgICAgLCBtX2lkbGVIYW5kbGVyKDApCiAgICAgICAgICAgICAsIG1fZnJhbWUoMCkK
KyAgICAgICAgICAgICwgbV9nb3RDaHVua0hhbmRsZXIoMCkKICNlbmRpZgogI2lmIFBMQVRGT1JN
KFFUKQogICAgICAgICAgICAgLCBtX2pvYigwKQpAQCAtMTQwLDYgKzE0NSw5IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgICAgIG1fdXNlciA9IHVybC51c2VyKCk7CiAgICAgICAgICAg
ICBtX3Bhc3MgPSB1cmwucGFzcygpOwogICAgICAgICAgICAgbV9maXJzdFJlcXVlc3QucmVtb3Zl
Q3JlZGVudGlhbHMoKTsKKyNpZiBVU0UoU09VUCkKKyAgICAgICAgICAgIG1fcmVxdWVzdGVyID0g
d2Via2l0X3NvdXBfcmVxdWVzdGVyX25ldygpOworI2VuZGlmCiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIH5SZXNvdXJjZUhhbmRsZUludGVybmFsKCk7CkBAIC0xOTgsMTMgKzIwNiwxNSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFNvdXBNZXNzYWdlKiBtX21zZzsKICAgICAg
ICAgUmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOwogICAgICAgICBib29sIG1fY2FuY2VsbGVk
OwotICAgICAgICBHRmlsZSogbV9nZmlsZTsKKyAgICAgICAgR1JlZlB0cjxXZWJLaXRTb3VwUmVx
dWVzdD4gbV9zb3VwUmVxdWVzdDsKKwlHUmVmUHRyPFdlYktpdFNvdXBSZXF1ZXN0ZXI+IG1fcmVx
dWVzdGVyOwogICAgICAgICBHSW5wdXRTdHJlYW0qIG1faW5wdXRTdHJlYW07CiAgICAgICAgIEdD
YW5jZWxsYWJsZSogbV9jYW5jZWxsYWJsZTsKICAgICAgICAgY2hhciogbV9idWZmZXI7CiAgICAg
ICAgIGdzaXplIG1fYnVmZmVyU2l6ZSwgbV90b3RhbDsKICAgICAgICAgZ3VpbnQgbV9pZGxlSGFu
ZGxlcjsKICAgICAgICAgRnJhbWUqIG1fZnJhbWU7CisgICAgICAgIGd1bG9uZyBtX2dvdENodW5r
SGFuZGxlcjsKICNlbmRpZgogI2lmIFBMQVRGT1JNKFFUKQogICAgICAgICBRTmV0d29ya1JlcGx5
SGFuZGxlciogbV9qb2I7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
UmVzb3VyY2VIYW5kbGVTb3VwLmNwcAppbmRleCA5NmEyZjI1Li5kNWUzN2VlIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAK
QEAgLTUsNyArNSw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIg
RnJleXRoZXIKICAqIENvcHlyaWdodCAoQykgMjAwOSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGdu
c0Bnbm9tZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQ2hyaXN0aWFuIER5d2FuIDxjaHJp
c3RpYW5AaW1lbmRpby5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdhbGlhIFMuTC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBJZ2FsaWEgUy5MLgogICogQ29weXJpZ2h0IChDKSAy
MDA5IEpvaG4gS2plbGxiZXJnIDxqb2huLmtqZWxsYmVyZ0Bwb3dlci5hbHN0b20uY29tPgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKQEAgLTQ2LDcgKzQ2LDcgQEAKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgi
CiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCi0K
KyNpbmNsdWRlICJ3ZWJraXRzb3VwcmVxdWVzdGh0dHAuaCIKICNpbmNsdWRlIDxlcnJuby5oPgog
I2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8Z2lvL2dpby5oPgpAQCAtMTIwLDggKzEyMCwx
MiBAQCB2b2lkIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlcjo6cnVuKCkKICAgICAgICAgZ19tYWlu
X2xvb3BfcnVuKG1fbWFpbkxvb3ApOwogfQogCi1zdGF0aWMgdm9pZCBjbGVhbnVwR2lvT3BlcmF0
aW9uKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGJvb2wgaXNEZXN0cm95aW5nKTsKLXN0YXRpYyBi
b29sIHN0YXJ0RGF0YShSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBTdHJpbmcgdXJsU3RyaW5nKTsK
KyNkZWZpbmUgSU5QVVRfU1RSRUFNX0JVRkZFUl9TSVpFIDgxOTIKKworc3RhdGljIHZvaWQgY2xl
YW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGJvb2wgaXNE
ZXN0cm95aW5nKTsKK3N0YXRpYyB2b2lkIHNlbmRSZXF1ZXN0Q2FsbGJhY2soR09iamVjdCogc291
cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIpOworc3RhdGljIHZvaWQgcmVhZENhbGxi
YWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXMsIGdwb2ludGVyKTsKK3N0YXRp
YyB2b2lkIGNsb3NlQ2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywg
Z3BvaW50ZXIpOwogc3RhdGljIGJvb2wgc3RhcnRHaW8oUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwg
S1VSTCB1cmwpOwogCiBSZXNvdXJjZUhhbmRsZUludGVybmFsOjp+UmVzb3VyY2VIYW5kbGVJbnRl
cm5hbCgpCkBAIC0xMzEsNiArMTM1LDExIEBAIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6On5SZXNv
dXJjZUhhbmRsZUludGVybmFsKCkKICAgICAgICAgbV9tc2cgPSAwOwogICAgIH0KIAorICAgIGlm
IChtX3NvdXBSZXF1ZXN0KSB7CisgICAgICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKG1f
c291cFJlcXVlc3QuZ2V0KCkpLCAid2Via2l0LXJlc291cmNlIiwgTlVMTCk7CisgICAgICAgIG1f
c291cFJlcXVlc3QuY2xlYXIoKTsKKyAgICB9CisKICAgICBpZiAobV9pZGxlSGFuZGxlcikgewog
ICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9pZGxlSGFuZGxlcik7CiAgICAgICAgIG1faWRsZUhh
bmRsZXIgPSAwOwpAQCAtMTQzLDcgKzE1Miw3IEBAIFJlc291cmNlSGFuZGxlOjp+UmVzb3VyY2VI
YW5kbGUoKQogICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQoZC0+
bV9tc2csIEdfU0lHTkFMX01BVENIX0RBVEEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCB0aGlzKTsKIAotICAgIGNsZWFudXBHaW9PcGVy
YXRpb24odGhpcywgdHJ1ZSk7CisgICAgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKHRoaXMs
IHRydWUpOwogfQogCiB2b2lkIFJlc291cmNlSGFuZGxlOjpwcmVwYXJlRm9yVVJMKGNvbnN0IEtV
UkwgJnVybCkKQEAgLTE4NSw5ICsxOTQsOCBAQCBzdGF0aWMgdm9pZCByZXN0YXJ0ZWRDYWxsYmFj
ayhTb3VwTWVzc2FnZSogbXNnLCBncG9pbnRlciBkYXRhKQogICAgIGlmIChkLT5tX2NhbmNlbGxl
ZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY2hhciogdXJpID0gc291cF91cmlfdG9fc3RyaW5n
KHNvdXBfbWVzc2FnZV9nZXRfdXJpKG1zZyksIGZhbHNlKTsKLSAgICBTdHJpbmcgbG9jYXRpb24g
PSBTdHJpbmcodXJpKTsKLSAgICBnX2ZyZWUodXJpKTsKKyAgICBHT3duUHRyPGNoYXI+IHVyaShz
b3VwX3VyaV90b19zdHJpbmcoc291cF9tZXNzYWdlX2dldF91cmkobXNnKSwgZmFsc2UpKTsKKyAg
ICBTdHJpbmcgbG9jYXRpb24gPSBTdHJpbmc6OmZyb21VVEY4KHVyaS5nZXQoKSk7CiAgICAgS1VS
TCBuZXdVUkwgPSBLVVJMKGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCksIGxvY2F0aW9uKTsK
IAogICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0ID0gaGFuZGxlLT5maXJzdFJlcXVlc3QoKTsK
QEAgLTI5Myw1MCArMzAxLDcgQEAgc3RhdGljIHZvaWQgZ290Q2h1bmtDYWxsYmFjayhTb3VwTWVz
c2FnZSogbXNnLCBTb3VwQnVmZmVyKiBjaHVuaywgZ3BvaW50ZXIgZGF0YSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0YShoYW5kbGUuZ2V0KCksIGNodW5rLT5k
YXRhLCBjaHVuay0+bGVuZ3RoLCBmYWxzZSk7Ci19Ci0KLS8vIENhbGxlZCBhdCB0aGUgZW5kIG9m
IHRoZSBtZXNzYWdlLCB3aXRoIGFsbCB0aGUgbmVjZXNzYXJ5IGFib3V0IHRoZSBsYXN0IGluZm9y
bWF0aW9ucy4KLS8vIERvZXNuJ3QgZ2V0IGNhbGxlZCBmb3IgcmVkaXJlY3RzLgotc3RhdGljIHZv
aWQgZmluaXNoZWRDYWxsYmFjayhTb3VwU2Vzc2lvbiAqc2Vzc2lvbiwgU291cE1lc3NhZ2UqIG1z
ZywgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9
IGFkb3B0UmVmKHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxlKj4oZGF0YSkpOwotICAgIC8vIFRP
RE86IG1heWJlIHdlIHNob3VsZCBydW4gdGhpcyBjb2RlIGV2ZW4gaWYgdGhlcmUncyBubyBjbGll
bnQ/Ci0gICAgaWYgKCFoYW5kbGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlc291cmNlSGFu
ZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFsKCk7Ci0KLSAgICBSZXNvdXJjZUhh
bmRsZUNsaWVudCogY2xpZW50ID0gaGFuZGxlLT5jbGllbnQoKTsKLSAgICBpZiAoIWNsaWVudCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGQtPm1fY2FuY2VsbGVkKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoU09VUF9TVEFUVVNfSVNfVFJBTlNQT1JUX0VSUk9SKG1zZy0+c3RhdHVz
X2NvZGUpKSB7Ci0gICAgICAgIGNoYXIqIHVyaSA9IHNvdXBfdXJpX3RvX3N0cmluZyhzb3VwX21l
c3NhZ2VfZ2V0X3VyaShtc2cpLCBmYWxzZSk7Ci0gICAgICAgIFJlc291cmNlRXJyb3IgZXJyb3Io
Z19xdWFya190b19zdHJpbmcoU09VUF9IVFRQX0VSUk9SKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtc2ctPnN0YXR1c19jb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVy
aSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc6OmZyb21VVEY4KG1zZy0+cmVh
c29uX3BocmFzZSkpOwotICAgICAgICBnX2ZyZWUodXJpKTsKLSAgICAgICAgY2xpZW50LT5kaWRG
YWlsKGhhbmRsZS5nZXQoKSwgZXJyb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAg
aWYgKG1zZy0+c3RhdHVzX2NvZGUgPT0gU09VUF9TVEFUVVNfVU5BVVRIT1JJWkVEKSB7Ci0gICAg
ICAgIGZpbGxSZXNwb25zZUZyb21NZXNzYWdlKG1zZywgJmQtPm1fcmVzcG9uc2UpOwotICAgICAg
ICBjbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShoYW5kbGUuZ2V0KCksIGQtPm1fcmVzcG9uc2Up
OwotCi0gICAgICAgIC8vIFdlYkNvcmUgbWlnaHQgaGF2ZSBjYW5jZWxsZWQgdGhlIGpvYiBpbiB0
aGUgd2hpbGUKLSAgICAgICAgaWYgKGQtPm1fY2FuY2VsbGVkKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIGlmIChtc2ctPnJlc3BvbnNlX2JvZHktPmRhdGEpCi0gICAgICAgICAgICBj
bGllbnQtPmRpZFJlY2VpdmVEYXRhKGhhbmRsZS5nZXQoKSwgbXNnLT5yZXNwb25zZV9ib2R5LT5k
YXRhLCBtc2ctPnJlc3BvbnNlX2JvZHktPmxlbmd0aCwgdHJ1ZSk7Ci0gICAgfQotCi0gICAgY2xp
ZW50LT5kaWRGaW5pc2hMb2FkaW5nKGhhbmRsZS5nZXQoKSk7CiB9CiAKIC8vIHBhcnNlRGF0YVVy
bCgpIGlzIHRha2VuIGZyb20gdGhlIENVUkwgaHR0cCBiYWNrZW5kLgpAQCAtMzY0LDcgKzMyOSw2
IEBAIHN0YXRpYyBnYm9vbGVhbiBwYXJzZURhdGFVcmwoZ3BvaW50ZXIgY2FsbGJhY2tEYXRhKQog
ICAgIH0KIAogICAgIFN0cmluZyBtZWRpYVR5cGUgPSB1cmwuc3Vic3RyaW5nKDUsIGluZGV4IC0g
NSk7Ci0gICAgU3RyaW5nIGRhdGEgPSB1cmwuc3Vic3RyaW5nKGluZGV4ICsgMSk7CiAKICAgICBi
b29sIGlzQmFzZTY0ID0gbWVkaWFUeXBlLmVuZHNXaXRoKCI7YmFzZTY0IiwgZmFsc2UpOwogICAg
IGlmIChpc0Jhc2U2NCkKQEAgLTM4MSw3ICszNDUsNiBAQCBzdGF0aWMgZ2Jvb2xlYW4gcGFyc2VE
YXRhVXJsKGdwb2ludGVyIGNhbGxiYWNrRGF0YSkKICAgICByZXNwb25zZS5zZXRNaW1lVHlwZSht
aW1lVHlwZSk7CiAKICAgICBpZiAoaXNCYXNlNjQpIHsKLSAgICAgICAgZGF0YSA9IGRlY29kZVVS
TEVzY2FwZVNlcXVlbmNlcyhkYXRhKTsKICAgICAgICAgcmVzcG9uc2Uuc2V0VGV4dEVuY29kaW5n
TmFtZShjaGFyc2V0KTsKICAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UoaGFuZGxl
LCByZXNwb25zZSk7CiAKQEAgLTM5MCwzMiArMzUzLDQxIEBAIHN0YXRpYyBnYm9vbGVhbiBwYXJz
ZURhdGFVcmwoZ3BvaW50ZXIgY2FsbGJhY2tEYXRhKQogICAgICAgICAvLyBvdXQgaW4gZWl0aGVy
IG9mIHRob3NlIGNhc2VzLgogICAgICAgICBpZiAoZC0+bV9jYW5jZWxsZWQgfHwgIWhhbmRsZS0+
Y2xpZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gVXNlIHRo
ZSBHTGliIEJhc2U2NCwgc2luY2UgV2ViQ29yZSdzIGRlY29kZXIgaXNuJ3QKLSAgICAgICAgLy8g
Z2VuZXJhbC1wdXJwb3NlIGFuZCBmYWlscyBvbiBBY2lkMyB0ZXN0IDk3ICh3aGl0ZXNwYWNlKS4K
LSAgICAgICAgc2l6ZV90IG91dExlbmd0aCA9IDA7Ci0gICAgICAgIGNoYXIqIG91dERhdGEgPSAw
OwotICAgICAgICBvdXREYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZ19iYXNlNjRfZGVj
b2RlKGRhdGEudXRmOCgpLmRhdGEoKSwgJm91dExlbmd0aCkpOwotICAgICAgICBpZiAob3V0RGF0
YSAmJiBvdXRMZW5ndGggPiAwKQotICAgICAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0YSho
YW5kbGUsIG91dERhdGEsIG91dExlbmd0aCwgMCk7Ci0gICAgICAgIGdfZnJlZShvdXREYXRhKTsK
ICAgICB9IGVsc2UgewogICAgICAgICAvLyBXZSBoYXZlIHRvIGNvbnZlcnQgdG8gVVRGLTE2IGVh
cmx5IGR1ZSB0byBsaW1pdGF0aW9ucyBpbiBLVVJMCi0gICAgICAgIGRhdGEgPSBkZWNvZGVVUkxF
c2NhcGVTZXF1ZW5jZXMoZGF0YSwgVGV4dEVuY29kaW5nKGNoYXJzZXQpKTsKICAgICAgICAgcmVz
cG9uc2Uuc2V0VGV4dEVuY29kaW5nTmFtZSgiVVRGLTE2Iik7CiAgICAgICAgIGNsaWVudC0+ZGlk
UmVjZWl2ZVJlc3BvbnNlKGhhbmRsZSwgcmVzcG9uc2UpOwogCiAgICAgICAgIGlmIChkLT5tX2Nh
bmNlbGxlZCB8fCAhaGFuZGxlLT5jbGllbnQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgICAgICBpZiAoZGF0YS5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgICBjbGllbnQtPmRp
ZFJlY2VpdmVEYXRhKGhhbmRsZSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZGF0YS5j
aGFyYWN0ZXJzKCkpLCBkYXRhLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSwgMCk7CiAgICAgfQog
CiAgICAgaWYgKGQtPm1fY2FuY2VsbGVkIHx8ICFoYW5kbGUtPmNsaWVudCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBjbGllbnQtPmRpZEZpbmlzaExvYWRpbmcoaGFuZGxlKTsKKyAg
ICBTb3VwU2Vzc2lvbiogc2Vzc2lvbiA9IGhhbmRsZS0+ZGVmYXVsdFNlc3Npb24oKTsKKyAgICBH
T3duUHRyPEdFcnJvcj4gZXJyb3I7CisKKyAgICBkLT5tX3NvdXBSZXF1ZXN0ID0gd2Via2l0X3Nv
dXBfcmVxdWVzdGVyX3JlcXVlc3QoZC0+bV9yZXF1ZXN0ZXIuZ2V0KCksIGhhbmRsZS0+Zmlyc3RS
ZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc2Vzc2lvbiwgJmVycm9yLm91
dFB0cigpKTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdJ
bnB1dFN0cmVhbSogaW5wdXRTdHJlYW0gPSB3ZWJraXRTb3VwUmVxdWVzdFNlbmQoZC0+bV9zb3Vw
UmVxdWVzdC5nZXQoKSwgMCwgJmVycm9yLm91dFB0cigpKTsKKyAgICBpZiAoZXJyb3IpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGQtPm1faW5wdXRTdHJlYW0gPSBpbnB1dFN0cmVhbTsK
KyAgICBkLT5tX2J1ZmZlclNpemUgPSBJTlBVVF9TVFJFQU1fQlVGRkVSX1NJWkU7CisgICAgZC0+
bV9idWZmZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oZ19tYWxsb2MoZC0+bV9idWZmZXJTaXplKSk7
CisgICAgZC0+bV90b3RhbCA9IDA7CisKKyAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChk
LT5tX2lucHV0U3RyZWFtKSwgIndlYmtpdC1yZXNvdXJjZSIsIGhhbmRsZSk7CisgICAgaGFuZGxl
LT5yZWYoKTsKKworICAgIGQtPm1fY2FuY2VsbGFibGUgPSBnX2NhbmNlbGxhYmxlX25ldygpOwor
ICAgIGdfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMoZC0+bV9pbnB1dFN0cmVhbSwgZC0+bV9idWZm
ZXIsIGQtPm1fYnVmZmVyU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUFJJ
T1JJVFlfREVGQVVMVCwgZC0+bV9jYW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlYWRDYWxsYmFjaywgKGlzQmFzZTY0KSA/IDAgOiBHSU5UX1RPX1BPSU5URVIoMSkp
OwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtNDI4LDcgKzQwMCw3IEBAIHN0YXRpYyBib29s
IHN0YXJ0RGF0YShSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBTdHJpbmcgdXJsU3RyaW5nKQogCiAg
ICAgLy8gSWYgcGFyc2VEYXRhVXJsIGlzIGNhbGxlZCBzeW5jaHJvbm91c2x5IHRoZSBqb2IgaXMg
bm90IHlldCBlZmZlY3RpdmVseSBzdGFydGVkCiAgICAgLy8gYW5kIHdlYmtpdCB3b24ndCBuZXZl
ciBrbm93IHRoYXQgdGhlIGRhdGEgaGFzIGJlZW4gcGFyc2VkIGV2ZW4gZGlkRmluaXNoTG9hZGlu
ZyBpcyBjYWxsZWQuCi0gICAgZC0+bV9pZGxlSGFuZGxlciA9IGdfdGltZW91dF9hZGQoMCwgcGFy
c2VEYXRhVXJsLCBoYW5kbGUpOworICAgIGQtPm1faWRsZUhhbmRsZXIgPSBnX2lkbGVfYWRkKHBh
cnNlRGF0YVVybCwgaGFuZGxlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNDY5LDYgKzQ0
MSwxNDMgQEAgc3RhdGljIHZvaWQgZW5zdXJlU2Vzc2lvbklzSW5pdGlhbGl6ZWQoU291cFNlc3Np
b24qIHNlc3Npb24pCiAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1Qoc2Vzc2lvbiksICJ3
ZWJraXQtaW5pdCIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KDB4ZGVhZGJlZWYpKTsKIH0KIAor
c3RhdGljIHZvaWQgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKFJlc291cmNlSGFuZGxlKiBo
YW5kbGUsIGJvb2wgaXNEZXN0cm95aW5nID0gZmFsc2UpCit7CisgICAgUmVzb3VyY2VIYW5kbGVJ
bnRlcm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKKworICAgIGlmIChkLT5tX3NvdXBS
ZXF1ZXN0KSB7CisgICAgICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1fc291cFJl
cXVlc3QuZ2V0KCkpLCAid2Via2l0LXJlc291cmNlIiwgTlVMTCk7CisgICAgICAgIGQtPm1fc291
cFJlcXVlc3QuY2xlYXIoKTsKKyAgICB9CisKKyAgICBpZiAoZC0+bV9jYW5jZWxsYWJsZSkgewor
ICAgICAgICBnX29iamVjdF91bnJlZihkLT5tX2NhbmNlbGxhYmxlKTsKKyAgICAgICAgZC0+bV9j
YW5jZWxsYWJsZSA9IDA7CisgICAgfQorCisgICAgaWYgKGQtPm1faW5wdXRTdHJlYW0pIHsKKyAg
ICAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9pbnB1dFN0cmVhbSksICJ3ZWJr
aXQtcmVzb3VyY2UiLCBOVUxMKTsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYoZC0+bV9pbnB1dFN0
cmVhbSk7CisgICAgICAgIGQtPm1faW5wdXRTdHJlYW0gPSAwOworICAgIH0KKworICAgIGlmIChk
LT5tX2J1ZmZlcikgeworICAgICAgICBnX2ZyZWUoZC0+bV9idWZmZXIpOworICAgICAgICBkLT5t
X2J1ZmZlciA9IDA7CisgICAgfQorCisgICAgaWYgKCFpc0Rlc3Ryb3lpbmcpCisgICAgICAgIGhh
bmRsZS0+ZGVyZWYoKTsKK30KKworc3RhdGljIHZvaWQgc2VuZFJlcXVlc3RDYWxsYmFjayhHT2Jq
ZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAg
ICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9IHN0YXRpY19jYXN0PFJlc291cmNlSGFu
ZGxlKj4oZ19vYmplY3RfZ2V0X2RhdGEoc291cmNlLCAid2Via2l0LXJlc291cmNlIikpOworICAg
IGlmICghaGFuZGxlKQorICAgICAgICByZXR1cm47CisKKyAgICBSZXNvdXJjZUhhbmRsZUludGVy
bmFsKiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOworICAgIFJlc291cmNlSGFuZGxlQ2xpZW50
KiBjbGllbnQgPSBoYW5kbGUtPmNsaWVudCgpOworCisgICAgaWYgKGQtPm1fZ290Q2h1bmtIYW5k
bGVyKSB7CisgICAgICAgIC8vIE5vIG5lZWQgdG8gY2FsbCBnb3RDaHVua0hhbmRsZXIgYW55bW9y
ZS4gUmVjZWl2ZWQgZGF0YSB3aWxsCisgICAgICAgIC8vIGJlIHJlcG9ydGVkIGJ5IHJlYWRDYWxs
YmFjaworICAgICAgICBpZiAoZ19zaWduYWxfaGFuZGxlcl9pc19jb25uZWN0ZWQoZC0+bV9tc2cs
IGQtPm1fZ290Q2h1bmtIYW5kbGVyKSkKKyAgICAgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlz
Y29ubmVjdChkLT5tX21zZywgZC0+bV9nb3RDaHVua0hhbmRsZXIpOworICAgIH0KKworICAgIGlm
IChkLT5tX2NhbmNlbGxlZCB8fCAhY2xpZW50KSB7CisgICAgICAgIGNsZWFudXBTb3VwUmVxdWVz
dE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
R093blB0cjxHRXJyb3I+IGVycm9yOworICAgIEdJbnB1dFN0cmVhbSogaW5wdXRTdHJlYW0gPSB3
ZWJraXRTb3VwUmVxdWVzdFNlbmRGaW5pc2goZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSwgcmVzLCAm
ZXJyb3Iub3V0UHRyKCkpOworCisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIGlmIChkLT5tX21z
ZyAmJiBTT1VQX1NUQVRVU19JU19UUkFOU1BPUlRfRVJST1IoZC0+bV9tc2ctPnN0YXR1c19jb2Rl
KSkgeworICAgICAgICAgICAgU291cFVSSSogdXJpID0gd2Via2l0U291cFJlcXVlc3RHZXRVcmko
ZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSk7CisgICAgICAgICAgICBHT3duUHRyPGNoYXI+IHVyaVN0
cmluZyhzb3VwX3VyaV90b19zdHJpbmcodXJpLCBmYWxzZSkpOworICAgICAgICAgICAgUmVzb3Vy
Y2VFcnJvciByZXNvdXJjZUVycm9yKGdfcXVhcmtfdG9fc3RyaW5nKFNPVVBfSFRUUF9FUlJPUiks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC0+bV9tc2ctPnN0YXR1
c19jb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaVN0cmlu
Zy5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc6
OmZyb21VVEY4KGQtPm1fbXNnLT5yZWFzb25fcGhyYXNlKSk7CisgICAgICAgICAgICBjbGVhbnVw
U291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKKyAgICAgICAgICAgIGNsaWVudC0+
ZGlkRmFpbChoYW5kbGUuZ2V0KCksIHJlc291cmNlRXJyb3IpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGVycm9yLT5kb21haW4gPT0gR19JT19FUlJPUikg
eworICAgICAgICAgICAgU291cFVSSSogdXJpID0gd2Via2l0U291cFJlcXVlc3RHZXRVcmkoZC0+
bV9zb3VwUmVxdWVzdC5nZXQoKSk7CisgICAgICAgICAgICBHT3duUHRyPGNoYXI+IHVyaVN0cmlu
Zyhzb3VwX3VyaV90b19zdHJpbmcodXJpLCBmYWxzZSkpOworICAgICAgICAgICAgUmVzb3VyY2VF
cnJvciByZXNvdXJjZUVycm9yKGdfcXVhcmtfdG9fc3RyaW5nKEdfSU9fRVJST1IpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLT5jb2RlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaVN0cmluZy5nZXQoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA/IFN0cmluZzo6ZnJvbVVURjgo
ZXJyb3ItPm1lc3NhZ2UpIDogU3RyaW5nKCkpOworICAgICAgICAgICAgY2xlYW51cFNvdXBSZXF1
ZXN0T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAgICAgICBjbGllbnQtPmRpZEZhaWwo
aGFuZGxlLmdldCgpLCByZXNvdXJjZUVycm9yKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChkLT5tX21zZyAmJiBkLT5tX21zZy0+c3RhdHVzX2NvZGUgPT0g
U09VUF9TVEFUVVNfVU5BVVRIT1JJWkVEKSB7CisgICAgICAgICAgICBmaWxsUmVzcG9uc2VGcm9t
TWVzc2FnZShkLT5tX21zZywgJmQtPm1fcmVzcG9uc2UpOworICAgICAgICAgICAgY2xpZW50LT5k
aWRSZWNlaXZlUmVzcG9uc2UoaGFuZGxlLmdldCgpLCBkLT5tX3Jlc3BvbnNlKTsKKworICAgICAg
ICAgICAgLy8gV2ViQ29yZSBtaWdodCBoYXZlIGNhbmNlbGxlZCB0aGUgam9iIGluIHRoZSB3aGls
ZQorICAgICAgICAgICAgaWYgKGQtPm1fY2FuY2VsbGVkKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICAgICAgaWYgKGQtPm1fbXNnLT5yZXNwb25zZV9ib2R5LT5kYXRhKQorICAg
ICAgICAgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURhdGEoaGFuZGxlLmdldCgpLCBkLT5tX21z
Zy0+cmVzcG9uc2VfYm9keS0+ZGF0YSwgZC0+bV9tc2ctPnJlc3BvbnNlX2JvZHktPmxlbmd0aCwg
dHJ1ZSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBkaWRSZWNlaXZlRGF0YSBhYm92ZSBtaWdo
dCBoYXZlIGNhbmNlbGxlZCBpdAorICAgICAgICBpZiAoZC0+bV9jYW5jZWxsZWQgfHwgIWNsaWVu
dCkgeworICAgICAgICAgIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkp
OworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNsaWVudC0+ZGlkRmlu
aXNoTG9hZGluZyhoYW5kbGUuZ2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGQtPm1fY2FuY2VsbGVkKSB7CisgICAgICAgIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlv
bihoYW5kbGUuZ2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZC0+bV9pbnB1
dFN0cmVhbSA9IGlucHV0U3RyZWFtOworICAgIGQtPm1fYnVmZmVyU2l6ZSA9IElOUFVUX1NUUkVB
TV9CVUZGRVJfU0laRTsKKyAgICBkLT5tX2J1ZmZlciA9IHN0YXRpY19jYXN0PGNoYXIqPihnX21h
bGxvYyhkLT5tX2J1ZmZlclNpemUpKTsKKyAgICBkLT5tX3RvdGFsID0gMDsKKworICAgIC8vIHJl
YWRDYWxsYmFjayBuZWVkcyBpdAorICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1f
aW5wdXRTdHJlYW0pLCAid2Via2l0LXJlc291cmNlIiwgaGFuZGxlLmdldCgpKTsKKworICAgIC8v
IFdlIG5lZWQgdG8gY2hlY2sgaWYgaXQncyBhIGZpbGU6IFVSTCBhbmQgaWYgaXQgaXMgYSByZWd1
bGFyCisgICAgLy8gZmlsZSBhcyBpdCBjb3VsZCBiZSBhIGRpcmVjdG9yeS4gSW4gdGhhdCBjYXNl
IFNvdXAgcHJvcGVybHkKKyAgICAvLyByZXR1cm5zIGEgc3RyZWFtIHdob3NlIGNvbnRlbnQgaXMg
YSBIVE1MIHdpdGggYSBsaXN0IG9mIGZpbGVzCisgICAgLy8gaW4gdGhlIGRpcmVjdG9yeQorICAg
IGlmIChlcXVhbElnbm9yaW5nQ2FzZShoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnByb3Rv
Y29sKCksICJmaWxlIikKKyAgICAgICAgJiYgR19JU19GSUxFX0lOUFVUX1NUUkVBTShpbnB1dFN0
cmVhbSkpIHsKKyAgICAgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsKKworICAgICAgICBy
ZXNwb25zZS5zZXRVUkwoaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKSk7CisgICAgICAgIHJl
c3BvbnNlLnNldE1pbWVUeXBlKHdlYmtpdFNvdXBSZXF1ZXN0R2V0Q29udGVudFR5cGUoZC0+bV9z
b3VwUmVxdWVzdC5nZXQoKSkpOworICAgICAgICByZXNwb25zZS5zZXRFeHBlY3RlZENvbnRlbnRM
ZW5ndGgod2Via2l0U291cFJlcXVlc3RHZXRDb250ZW50TGVuZ3RoKGQtPm1fc291cFJlcXVlc3Qu
Z2V0KCkpKTsKKyAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UoaGFuZGxlLmdldCgp
LCByZXNwb25zZSk7CisKKyAgICAgICAgaWYgKGQtPm1fY2FuY2VsbGVkKSB7CisgICAgICAgICAg
ICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGdfaW5wdXRfc3RyZWFtX3JlYWRfYXN5
bmMoZC0+bV9pbnB1dFN0cmVhbSwgZC0+bV9idWZmZXIsIGQtPm1fYnVmZmVyU2l6ZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdfUFJJT1JJVFlfREVGQVVMVCwgZC0+bV9jYW5jZWxs
YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRDYWxsYmFjaywgMCk7Cit9
CisKIHN0YXRpYyBib29sIHN0YXJ0SHR0cChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQogewogICAg
IEFTU0VSVChoYW5kbGUpOwpAQCAtNDgzLDcgKzU5MiwxNiBAQCBzdGF0aWMgYm9vbCBzdGFydEh0
dHAoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKICAgICB1cmwucmVtb3ZlRnJhZ21lbnRJZGVudGlm
aWVyKCk7CiAgICAgcmVxdWVzdC5zZXRVUkwodXJsKTsKIAotICAgIGQtPm1fbXNnID0gcmVxdWVz
dC50b1NvdXBNZXNzYWdlKCk7CisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgIGQtPm1f
c291cFJlcXVlc3QgPSB3ZWJraXRfc291cF9yZXF1ZXN0ZXJfcmVxdWVzdChkLT5tX3JlcXVlc3Rl
ci5nZXQoKSwgdXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHNlc3Npb24sICZlcnJvci5vdXRQ
dHIoKSk7CisgICAgaWYgKGVycm9yKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBnX29i
amVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5tX3NvdXBSZXF1ZXN0LmdldCgpKSwgIndlYmtpdC1y
ZXNvdXJjZSIsIGhhbmRsZSk7CisKKyAgICBkLT5tX21zZyA9IHdlYmtpdFNvdXBSZXF1ZXN0SHR0
cEdldE1lc3NhZ2UoV0VCS0lUX1NPVVBfUkVRVUVTVF9IVFRQKGQtPm1fc291cFJlcXVlc3QuZ2V0
KCkpKTsKKyAgICByZXF1ZXN0LnVwZGF0ZVNvdXBNZXNzYWdlKGQtPm1fbXNnKTsKKwogICAgIGlm
ICghZC0+bV9tc2cpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNDkzLDcgKzYxMSw3IEBA
IHN0YXRpYyBib29sIHN0YXJ0SHR0cChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQogICAgIGdfc2ln
bmFsX2Nvbm5lY3QoZC0+bV9tc2csICJyZXN0YXJ0ZWQiLCBHX0NBTExCQUNLKHJlc3RhcnRlZENh
bGxiYWNrKSwgaGFuZGxlKTsKICAgICBnX3NpZ25hbF9jb25uZWN0KGQtPm1fbXNnLCAiZ290LWhl
YWRlcnMiLCBHX0NBTExCQUNLKGdvdEhlYWRlcnNDYWxsYmFjayksIGhhbmRsZSk7CiAgICAgZ19z
aWduYWxfY29ubmVjdChkLT5tX21zZywgImNvbnRlbnQtc25pZmZlZCIsIEdfQ0FMTEJBQ0soY29u
dGVudFNuaWZmZWRDYWxsYmFjayksIGhhbmRsZSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChkLT5t
X21zZywgImdvdC1jaHVuayIsIEdfQ0FMTEJBQ0soZ290Q2h1bmtDYWxsYmFjayksIGhhbmRsZSk7
CisgICAgZC0+bV9nb3RDaHVua0hhbmRsZXIgPSBnX3NpZ25hbF9jb25uZWN0KGQtPm1fbXNnLCAi
Z290LWNodW5rIiwgR19DQUxMQkFDSyhnb3RDaHVua0NhbGxiYWNrKSwgaGFuZGxlKTsKIAogI2lm
ZGVmIEhBVkVfTElCU09VUF8yXzI5XzkwCiAgICAgU3RyaW5nIGZpcnN0UGFydHlTdHJpbmcgPSBy
ZXF1ZXN0LmZpcnN0UGFydHlGb3JDb29raWVzKCkuc3RyaW5nKCk7CkBAIC01MDIsNyArNjIwLDYg
QEAgc3RhdGljIGJvb2wgc3RhcnRIdHRwKFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCiAgICAgICAg
IHNvdXBfbWVzc2FnZV9zZXRfZmlyc3RfcGFydHkoZC0+bV9tc2csIGZpcnN0UGFydHkuZ2V0KCkp
OwogICAgIH0KICNlbmRpZgotICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1fbXNn
KSwgInJlc291cmNlSGFuZGxlIiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaGFuZGxlKSk7CiAK
ICAgICBGb3JtRGF0YSogaHR0cEJvZHkgPSBkLT5tX2ZpcnN0UmVxdWVzdC5odHRwQm9keSgpOwog
ICAgIGlmIChodHRwQm9keSAmJiAhaHR0cEJvZHktPmlzRW1wdHkoKSkgewpAQCAtNTMyLDEyICs2
NDksMTEgQEAgc3RhdGljIGJvb2wgc3RhcnRIdHRwKFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCiAg
ICAgICAgICAgICAgICAgICAgICAqIG1hcHBpbmcgZm9yIHVwbG9hZGVkIGZpbGVzIGNvZGUgaW5z
cGlyZWQgYnkgdGVjaG5pcXVlIHVzZWQgaW4KICAgICAgICAgICAgICAgICAgICAgICogbGlic291
cCdzIHNpbXBsZS1odHRwZCB0ZXN0CiAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAg
ICAgICAgICAgICBHRXJyb3IqIGVycm9yID0gMDsKKyAgICAgICAgICAgICAgICAgICAgR093blB0
cjxHRXJyb3I+IGVycm9yOwogICAgICAgICAgICAgICAgICAgICBDU3RyaW5nIGZpbGVOYW1lID0g
ZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGVsZW1lbnQubV9maWxlbmFtZSk7Ci0gICAgICAgICAg
ICAgICAgICAgIEdNYXBwZWRGaWxlKiBmaWxlTWFwcGluZyA9IGdfbWFwcGVkX2ZpbGVfbmV3KGZp
bGVOYW1lLmRhdGEoKSwgZmFsc2UsICZlcnJvcik7CisgICAgICAgICAgICAgICAgICAgIEdNYXBw
ZWRGaWxlKiBmaWxlTWFwcGluZyA9IGdfbWFwcGVkX2ZpbGVfbmV3KGZpbGVOYW1lLmRhdGEoKSwg
ZmFsc2UsICZlcnJvci5vdXRQdHIoKSk7CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9y
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKGQt
Pm1fbXNnLCBHX1NJR05BTF9NQVRDSF9EQVRBLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsIGhhbmRsZSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBnX29iamVjdF91bnJlZihkLT5tX21zZyk7CkBAIC01Njks
MTEgKzY4NSw5IEBAIHN0YXRpYyBib29sIHN0YXJ0SHR0cChSZXNvdXJjZUhhbmRsZSogaGFuZGxl
KQogICAgIGlmICghc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X29uZShkLT5tX21zZy0+cmVxdWVz
dF9oZWFkZXJzLCAiQWNjZXB0IikpCiAgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVu
ZChkLT5tX21zZy0+cmVxdWVzdF9oZWFkZXJzLCAiQWNjZXB0IiwgIiovKiIpOwogCi0gICAgLy8g
QmFsYW5jZWQgaW4gUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCdzIGRlc3RydWN0b3I7IHdlIG5lZWQg
dG8KLSAgICAvLyBrZWVwIG91ciBvd24gcmVmLCBiZWNhdXNlIGFmdGVyIHF1ZXVlaW5nIHRoZSBt
ZXNzYWdlLCB0aGUKLSAgICAvLyBzZXNzaW9uIG93bnMgdGhlIGluaXRpYWwgcmVmZXJlbmNlLgot
ICAgIGdfb2JqZWN0X3JlZihkLT5tX21zZyk7Ci0gICAgc291cF9zZXNzaW9uX3F1ZXVlX21lc3Nh
Z2Uoc2Vzc2lvbiwgZC0+bV9tc2csIGZpbmlzaGVkQ2FsbGJhY2ssIGhhbmRsZSk7CisgICAgZC0+
bV9jYW5jZWxsYWJsZSA9IGdfY2FuY2VsbGFibGVfbmV3KCk7CisgICAgd2Via2l0U291cFJlcXVl
c3RTZW5kQXN5bmMoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSwgZC0+bV9jYW5jZWxsYWJsZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kUmVxdWVzdENhbGxiYWNrLCAwKTsKIAogICAg
IHJldHVybiB0cnVlOwogfQpAQCAtNTk0LDcgKzcwOCw3IEBAIGJvb2wgUmVzb3VyY2VIYW5kbGU6
OnN0YXJ0KEZyYW1lKiBmcmFtZSkKICAgICBTdHJpbmcgdXJsU3RyaW5nID0gdXJsLnN0cmluZygp
OwogICAgIFN0cmluZyBwcm90b2NvbCA9IHVybC5wcm90b2NvbCgpOwogCi0gICAgLy8gVXNlZCB0
byBzZXQgdGhlIGF1dGhlbnRpY2F0aW9uIGRpYWxvZyB0b3BsZXZlbDsgbWF5IGJlIE5VTEwKKyAg
ICAvLyBVc2VkIHRvIHNldCB0aGUgYXV0aGVudGljYXRpb24gZGlhbG9nIHRvcGxldmVsOyBtYXkg
YmUgMAogICAgIGQtPm1fZnJhbWUgPSBmcmFtZTsKIAogICAgIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZShwcm90b2NvbCwgImRhdGEiKSkKQEAgLTY2NywzOCArNzgxLDYgQEAgdm9pZCBSZXNvdXJjZUhh
bmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QsIFMKICAgICBzeW5jTG9hZGVyLnJ1bigpOwogfQogCi0vLyBHSU8tYmFzZWQgbG9hZGVy
Ci0KLXN0YXRpYyB2b2lkIGNsZWFudXBHaW9PcGVyYXRpb24oUmVzb3VyY2VIYW5kbGUqIGhhbmRs
ZSwgYm9vbCBpc0Rlc3Ryb3lpbmcgPSBmYWxzZSkKLXsKLSAgICBSZXNvdXJjZUhhbmRsZUludGVy
bmFsKiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOwotCi0gICAgaWYgKGQtPm1fZ2ZpbGUpIHsK
LSAgICAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9nZmlsZSksICJ3ZWJraXQt
cmVzb3VyY2UiLCAwKTsKLSAgICAgICAgZ19vYmplY3RfdW5yZWYoZC0+bV9nZmlsZSk7Ci0gICAg
ICAgIGQtPm1fZ2ZpbGUgPSAwOwotICAgIH0KLQotICAgIGlmIChkLT5tX2NhbmNlbGxhYmxlKSB7
Ci0gICAgICAgIGdfb2JqZWN0X3VucmVmKGQtPm1fY2FuY2VsbGFibGUpOwotICAgICAgICBkLT5t
X2NhbmNlbGxhYmxlID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoZC0+bV9pbnB1dFN0cmVhbSkgewot
ICAgICAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5tX2lucHV0U3RyZWFtKSwgIndl
YmtpdC1yZXNvdXJjZSIsIDApOwotICAgICAgICBnX29iamVjdF91bnJlZihkLT5tX2lucHV0U3Ry
ZWFtKTsKLSAgICAgICAgZC0+bV9pbnB1dFN0cmVhbSA9IDA7Ci0gICAgfQotCi0gICAgaWYgKGQt
Pm1fYnVmZmVyKSB7Ci0gICAgICAgIGdfZnJlZShkLT5tX2J1ZmZlcik7Ci0gICAgICAgIGQtPm1f
YnVmZmVyID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoIWlzRGVzdHJveWluZykKLSAgICAgICAgaGFu
ZGxlLT5kZXJlZigpOwotfQotCiBzdGF0aWMgdm9pZCBjbG9zZUNhbGxiYWNrKEdPYmplY3QqIHNv
dXJjZSwgR0FzeW5jUmVzdWx0KiByZXMsIGdwb2ludGVyKQogewogICAgIFJlZlB0cjxSZXNvdXJj
ZUhhbmRsZT4gaGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihnX29iamVjdF9n
ZXRfZGF0YShzb3VyY2UsICJ3ZWJraXQtcmVzb3VyY2UiKSk7CkBAIC03MDksNyArNzkxLDcgQEAg
c3RhdGljIHZvaWQgY2xvc2VDYWxsYmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCog
cmVzLCBncG9pbnRlcikKICAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0gaGFuZGxl
LT5jbGllbnQoKTsKIAogICAgIGdfaW5wdXRfc3RyZWFtX2Nsb3NlX2ZpbmlzaChkLT5tX2lucHV0
U3RyZWFtLCByZXMsIDApOwotICAgIGNsZWFudXBHaW9PcGVyYXRpb24oaGFuZGxlLmdldCgpKTsK
KyAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKIAogICAgIC8v
IFRoZSBsb2FkIG1heSBoYXZlIGJlZW4gY2FuY2VsbGVkLCB0aGUgY2xpZW50IG1heSBoYXZlIGJl
ZW4KICAgICAvLyBkZXN0cm95ZWQgYWxyZWFkeS4gSW4gc3VjaCBjYXNlcyBjYWxsaW5nIGRpZEZp
bmlzaExvYWRpbmcgaXMgYQpAQCAtNzIwLDMyICs4MDIsMzIgQEAgc3RhdGljIHZvaWQgY2xvc2VD
YWxsYmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzLCBncG9pbnRlcikKICAg
ICBjbGllbnQtPmRpZEZpbmlzaExvYWRpbmcoaGFuZGxlLmdldCgpKTsKIH0KIAotc3RhdGljIHZv
aWQgcmVhZENhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXMsIGdwb2lu
dGVyKQorc3RhdGljIHZvaWQgcmVhZENhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVz
dWx0KiByZXMsIGdwb2ludGVyIGRhdGEpCiB7CiAgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBo
YW5kbGUgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGdfb2JqZWN0X2dldF9kYXRhKHNv
dXJjZSwgIndlYmtpdC1yZXNvdXJjZSIpKTsKICAgICBpZiAoIWhhbmRsZSkKICAgICAgICAgcmV0
dXJuOwogCisgICAgYm9vbCBjb252ZXJ0VG9VVEYxNiA9IHN0YXRpY19jYXN0PGJvb2w+KGRhdGEp
OwogICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFsKCk7
CiAgICAgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCA9IGhhbmRsZS0+Y2xpZW50KCk7CiAK
ICAgICBpZiAoZC0+bV9jYW5jZWxsZWQgfHwgIWNsaWVudCkgewotICAgICAgICBjbGVhbnVwR2lv
T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAgIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJh
dGlvbihoYW5kbGUuZ2V0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgR0Vycm9y
KiBlcnJvciA9IDA7CisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOwogCi0gICAgZ3NzaXplIGJ5
dGVzUmVhZCA9IGdfaW5wdXRfc3RyZWFtX3JlYWRfZmluaXNoKGQtPm1faW5wdXRTdHJlYW0sIHJl
cywgJmVycm9yKTsKKyAgICBnc3NpemUgYnl0ZXNSZWFkID0gZ19pbnB1dF9zdHJlYW1fcmVhZF9m
aW5pc2goZC0+bV9pbnB1dFN0cmVhbSwgcmVzLCAmZXJyb3Iub3V0UHRyKCkpOwogICAgIGlmIChl
cnJvcikgewotICAgICAgICBjaGFyKiB1cmkgPSBnX2ZpbGVfZ2V0X3VyaShkLT5tX2dmaWxlKTsK
KyAgICAgICAgU291cFVSSSogdXJpID0gd2Via2l0U291cFJlcXVlc3RHZXRVcmkoZC0+bV9zb3Vw
UmVxdWVzdC5nZXQoKSk7CisgICAgICAgIEdPd25QdHI8Y2hhcj4gdXJpU3RyaW5nKHNvdXBfdXJp
X3RvX3N0cmluZyh1cmksIGZhbHNlKSk7CiAgICAgICAgIFJlc291cmNlRXJyb3IgcmVzb3VyY2VF
cnJvcihnX3F1YXJrX3RvX3N0cmluZyhHX0lPX0VSUk9SKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVycm9yLT5jb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpU3Ry
aW5nLmdldCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPyBT
dHJpbmc6OmZyb21VVEY4KGVycm9yLT5tZXNzYWdlKSA6IFN0cmluZygpKTsKLSAgICAgICAgZ19m
cmVlKHVyaSk7Ci0gICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7Ci0gICAgICAgIGNsZWFudXBH
aW9PcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKKyAgICAgICAgY2xlYW51cFNvdXBSZXF1ZXN0T3Bl
cmF0aW9uKGhhbmRsZS5nZXQoKSk7CiAgICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5kbGUuZ2V0
KCksIHJlc291cmNlRXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNzU3LDE0MSAr
ODM5LDM2IEBAIHN0YXRpYyB2b2lkIHJlYWRDYWxsYmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3lu
Y1Jlc3VsdCogcmVzLCBncG9pbnRlcikKICAgICB9CiAKICAgICBkLT5tX3RvdGFsICs9IGJ5dGVz
UmVhZDsKLSAgICBjbGllbnQtPmRpZFJlY2VpdmVEYXRhKGhhbmRsZS5nZXQoKSwgZC0+bV9idWZm
ZXIsIGJ5dGVzUmVhZCwgZC0+bV90b3RhbCk7Ci0KLSAgICAvLyBkaWRSZWNlaXZlRGF0YSBtYXkg
Y2FuY2VsIHRoZSBsb2FkLCB3aGljaCBtYXkgcmVsZWFzZSB0aGUgbGFzdCByZWZlcmVuY2UuCi0g
ICAgaWYgKGQtPm1fY2FuY2VsbGVkKSB7Ci0gICAgICAgIGNsZWFudXBHaW9PcGVyYXRpb24oaGFu
ZGxlLmdldCgpKTsKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChHX0xJS0VMWSghY29udmVydFRv
VVRGMTYpKQorICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVEYXRhKGhhbmRsZS5nZXQoKSwgZC0+
bV9idWZmZXIsIGJ5dGVzUmVhZCwgZC0+bV90b3RhbCk7CisgICAgZWxzZSB7CisgICAgICAgIGxv
bmcgd29yZHNXcml0dGVuOworICAgICAgICBHT3duUHRyPGd1bmljaGFyMj4gdXRmMTZTdHJpbmco
Z191dGY4X3RvX3V0ZjE2KGQtPm1fYnVmZmVyLCBieXRlc1JlYWQsIDAsICZ3b3Jkc1dyaXR0ZW4s
IDApKTsKKyAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0YShoYW5kbGUuZ2V0KCksIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHV0ZjE2U3RyaW5nLmdldCgpKSwgd29yZHNXcml0dGVu
ICogc2l6ZW9mKFVDaGFyKSwgMCk7CiAgICAgfQogCi0gICAgZ19pbnB1dF9zdHJlYW1fcmVhZF9h
c3luYyhkLT5tX2lucHV0U3RyZWFtLCBkLT5tX2J1ZmZlciwgZC0+bV9idWZmZXJTaXplLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QUklPUklUWV9ERUZBVUxULCBkLT5tX2NhbmNl
bGxhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZENhbGxiYWNrLCAwKTsK
LX0KLQotc3RhdGljIHZvaWQgb3BlbkNhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVz
dWx0KiByZXMsIGdwb2ludGVyKQotewotICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxl
ID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihnX29iamVjdF9nZXRfZGF0YShzb3VyY2Us
ICJ3ZWJraXQtcmVzb3VyY2UiKSk7Ci0gICAgaWYgKCFoYW5kbGUpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFsKCk7
Ci0gICAgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCA9IGhhbmRsZS0+Y2xpZW50KCk7Ci0K
KyAgICAvLyBkaWRSZWNlaXZlRGF0YSBtYXkgY2FuY2VsIHRoZSBsb2FkLCB3aGljaCBtYXkgcmVs
ZWFzZSB0aGUgbGFzdCByZWZlcmVuY2UuCiAgICAgaWYgKGQtPm1fY2FuY2VsbGVkIHx8ICFjbGll
bnQpIHsKLSAgICAgICAgY2xlYW51cEdpb09wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgR0Vycm9yKiBlcnJvciA9IDA7Ci0gICAgR0ZpbGVJbnB1
dFN0cmVhbSogaW4gPSBnX2ZpbGVfcmVhZF9maW5pc2goR19GSUxFKHNvdXJjZSksIHJlcywgJmVy
cm9yKTsKLSAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgY2hhciogdXJpID0gZ19maWxlX2dldF91
cmkoZC0+bV9nZmlsZSk7Ci0gICAgICAgIFJlc291cmNlRXJyb3IgcmVzb3VyY2VFcnJvcihnX3F1
YXJrX3RvX3N0cmluZyhHX0lPX0VSUk9SKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVycm9yLT5jb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dXJpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPyBTdHJpbmc6
OmZyb21VVEY4KGVycm9yLT5tZXNzYWdlKSA6IFN0cmluZygpKTsKLSAgICAgICAgZ19mcmVlKHVy
aSk7Ci0gICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7Ci0gICAgICAgIGNsZWFudXBHaW9PcGVy
YXRpb24oaGFuZGxlLmdldCgpKTsKLSAgICAgICAgY2xpZW50LT5kaWRGYWlsKGhhbmRsZS5nZXQo
KSwgcmVzb3VyY2VFcnJvcik7CisgICAgICAgIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbiho
YW5kbGUuZ2V0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZC0+bV9pbnB1dFN0
cmVhbSA9IEdfSU5QVVRfU1RSRUFNKGluKTsKLSAgICBkLT5tX2J1ZmZlclNpemUgPSA4MTkyOwot
ICAgIGQtPm1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGdfbWFsbG9jKGQtPm1fYnVmZmVy
U2l6ZSkpOwotICAgIGQtPm1fdG90YWwgPSAwOwotCi0gICAgZ19vYmplY3Rfc2V0X2RhdGEoR19P
QkpFQ1QoZC0+bV9pbnB1dFN0cmVhbSksICJ3ZWJraXQtcmVzb3VyY2UiLCBoYW5kbGUuZ2V0KCkp
OwogICAgIGdfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMoZC0+bV9pbnB1dFN0cmVhbSwgZC0+bV9i
dWZmZXIsIGQtPm1fYnVmZmVyU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdf
UFJJT1JJVFlfREVGQVVMVCwgZC0+bV9jYW5jZWxsYWJsZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlYWRDYWxsYmFjaywgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZWFkQ2FsbGJhY2ssIGRhdGEpOwogfQogCi1zdGF0aWMgdm9pZCBxdWVyeUluZm9DYWxsYmFj
ayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzLCBncG9pbnRlcikKLXsKLSAgICBS
ZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9IHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxl
Kj4oZ19vYmplY3RfZ2V0X2RhdGEoc291cmNlLCAid2Via2l0LXJlc291cmNlIikpOwotICAgIGlm
ICghaGFuZGxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZXNvdXJjZUhhbmRsZUludGVybmFs
KiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOwotICAgIFJlc291cmNlSGFuZGxlQ2xpZW50KiBj
bGllbnQgPSBoYW5kbGUtPmNsaWVudCgpOwotCi0gICAgaWYgKGQtPm1fY2FuY2VsbGVkKSB7Ci0g
ICAgICAgIGNsZWFudXBHaW9PcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7Ci0KLSAgICBjaGFyKiB1
cmkgPSBnX2ZpbGVfZ2V0X3VyaShkLT5tX2dmaWxlKTsKLSAgICByZXNwb25zZS5zZXRVUkwoS1VS
TChLVVJMKCksIHVyaSkpOwotICAgIGdfZnJlZSh1cmkpOwotCi0gICAgR0Vycm9yKiBlcnJvciA9
IDA7Ci0gICAgR0ZpbGVJbmZvKiBpbmZvID0gZ19maWxlX3F1ZXJ5X2luZm9fZmluaXNoKGQtPm1f
Z2ZpbGUsIHJlcywgJmVycm9yKTsKLQotICAgIGlmIChlcnJvcikgewotICAgICAgICAvLyBGSVhN
RTogdG8gYmUgYWJsZSB0byBoYW5kbGUgZnRwIFVSSXMgcHJvcGVybHksIHdlIG11c3QKLSAgICAg
ICAgLy8gY2hlY2sgaWYgdGhlIGVycm9yIGlzIEdfSU9fRVJST1JfTk9UX01PVU5URUQsIGFuZCBp
ZiBzbywKLSAgICAgICAgLy8gY2FsbCBnX2ZpbGVfbW91bnRfZW5jbG9zaW5nX3ZvbHVtZSgpIHRv
IG1vdW50IHRoZSBmdHAKLSAgICAgICAgLy8gc2VydmVyIChhbmQgdGhlbiBrZWVwIHRyYWNrIG9m
IHRoZSBmYWN0IHRoYXQgd2UgbW91bnRlZCBpdCwKLSAgICAgICAgLy8gYW5kIHNldCBhIHRpbWVv
dXQgdG8gdW5tb3VudCBpdCBsYXRlciBhZnRlciBpdCdzIGJlZW4gaWRsZQotICAgICAgICAvLyBm
b3IgYSB3aGlsZSkuCi0gICAgICAgIGNoYXIqIHVyaSA9IGdfZmlsZV9nZXRfdXJpKGQtPm1fZ2Zp
bGUpOwotICAgICAgICBSZXNvdXJjZUVycm9yIHJlc291cmNlRXJyb3IoZ19xdWFya190b19zdHJp
bmcoR19JT19FUlJPUiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJv
ci0+Y29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID8gU3RyaW5nOjpmcm9tVVRGOChl
cnJvci0+bWVzc2FnZSkgOiBTdHJpbmcoKSk7Ci0gICAgICAgIGdfZnJlZSh1cmkpOwotICAgICAg
ICBnX2Vycm9yX2ZyZWUoZXJyb3IpOwotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRs
ZS5nZXQoKSk7Ci0gICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIHJlc291cmNl
RXJyb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGdfZmlsZV9pbmZvX2dl
dF9maWxlX3R5cGUoaW5mbykgIT0gR19GSUxFX1RZUEVfUkVHVUxBUikgewotICAgICAgICAvLyBG
SVhNRTogd2hhdCBpZiB0aGUgVVJJIHBvaW50cyB0byBhIGRpcmVjdG9yeT8gU2hvdWxkIHdlCi0g
ICAgICAgIC8vIGdlbmVyYXRlIGEgbGlzdGluZz8gSG93PyBXaGF0IGRvIG90aGVyIGJhY2tlbmRz
IGRvIGhlcmU/Ci0gICAgICAgIGNoYXIqIHVyaSA9IGdfZmlsZV9nZXRfdXJpKGQtPm1fZ2ZpbGUp
OwotICAgICAgICBSZXNvdXJjZUVycm9yIHJlc291cmNlRXJyb3IoZ19xdWFya190b19zdHJpbmco
R19JT19FUlJPUiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX0lPX0VS
Uk9SX0ZBSUxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZygpKTsKLSAgICAgICAgZ19m
cmVlKHVyaSk7Ci0gICAgICAgIGNsZWFudXBHaW9PcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKLSAg
ICAgICAgY2xpZW50LT5kaWRGYWlsKGhhbmRsZS5nZXQoKSwgcmVzb3VyY2VFcnJvcik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICByZXNwb25zZS5zZXRNaW1lVHlwZShnX2ZpbGVfaW5m
b19nZXRfY29udGVudF90eXBlKGluZm8pKTsKLSAgICByZXNwb25zZS5zZXRFeHBlY3RlZENvbnRl
bnRMZW5ndGgoZ19maWxlX2luZm9fZ2V0X3NpemUoaW5mbykpOwotCi0gICAgR1RpbWVWYWwgdHY7
Ci0gICAgZ19maWxlX2luZm9fZ2V0X21vZGlmaWNhdGlvbl90aW1lKGluZm8sICZ0dik7Ci0gICAg
cmVzcG9uc2Uuc2V0TGFzdE1vZGlmaWVkRGF0ZSh0di50dl9zZWMpOwotCi0gICAgY2xpZW50LT5k
aWRSZWNlaXZlUmVzcG9uc2UoaGFuZGxlLmdldCgpLCByZXNwb25zZSk7Ci0KLSAgICBpZiAoZC0+
bV9jYW5jZWxsZWQpIHsKLSAgICAgICAgY2xlYW51cEdpb09wZXJhdGlvbihoYW5kbGUuZ2V0KCkp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZ19maWxlX3JlYWRfYXN5bmMoZC0+bV9n
ZmlsZSwgR19QUklPUklUWV9ERUZBVUxULCBkLT5tX2NhbmNlbGxhYmxlLAotICAgICAgICAgICAg
ICAgICAgICAgIG9wZW5DYWxsYmFjaywgMCk7Ci19CiBzdGF0aWMgYm9vbCBzdGFydEdpbyhSZXNv
dXJjZUhhbmRsZSogaGFuZGxlLCBLVVJMIHVybCkKIHsKICAgICBBU1NFUlQoaGFuZGxlKTsKIAot
ICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFsKCk7Ci0K
ICAgICBpZiAoaGFuZGxlLT5maXJzdFJlcXVlc3QoKS5odHRwTWV0aG9kKCkgIT0gIkdFVCIgJiYg
aGFuZGxlLT5maXJzdFJlcXVlc3QoKS5odHRwTWV0aG9kKCkgIT0gIlBPU1QiKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKKyAgICBHT3duUHRyPGNoYXI+IHVybFN0cjsKKyAgICBTb3VwU2Vzc2lv
biogc2Vzc2lvbiA9IGhhbmRsZS0+ZGVmYXVsdFNlc3Npb24oKTsKKyAgICBSZXNvdXJjZUhhbmRs
ZUludGVybmFsKiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOworCiAgICAgLy8gR0lPIGRvZXNu
J3Qga25vdyBob3cgdG8gaGFuZGxlIHJlZnMgYW5kIHF1ZXJpZXMsIHNvIHJlbW92ZSB0aGVtCiAg
ICAgLy8gVE9ETzogdXNlIEtVUkwuZmlsZVN5c3RlbVBhdGggYWZ0ZXIgS1VSTEd0ayBhbmQgRmls
ZVN5c3RlbUd0ayBhcmUKICAgICAvLyB1c2luZyBHSU8gaW50ZXJuYWxseSwgYW5kIHByb3ZpZGlu
ZyBVUklzIGluc3RlYWQgb2YgZmlsZSBwYXRocwpAQCAtOTA0LDIzICs4ODEsMjUgQEAgc3RhdGlj
IGJvb2wgc3RhcnRHaW8oUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgS1VSTCB1cmwpCiAgICAgLy8g
Z19maWxlbmFtZV9mcm9tX3VyaSAodXNlZCBpbnRlcm5hbGx5IGJ5IEdGaWxlKSBoYXMgcHJvYmxl
bXMKICAgICAvLyBkZWNvZGluZyBzdHJpbmdzIHdpdGggYXJiaXRyYXJ5IHBlcmNlbnQgc2lnbnMK
ICAgICBpZiAodXJsLmlzTG9jYWxGaWxlKCkpCi0gICAgICAgIGQtPm1fZ2ZpbGUgPSBnX2ZpbGVf
bmV3X2Zvcl9wYXRoKHVybC5wcmV0dHlVUkwoKS51dGY4KCkuZGF0YSgpICsgc2l6ZW9mKCJmaWxl
Oi8vIikgLSAxKTsKKyAgICAgICAgdXJsU3RyLnNldChnX3N0cmR1cCh1cmwucHJldHR5VVJMKCku
dXRmOCgpLmRhdGEoKSkpOwogICAgIGVsc2UKICNlbmRpZgotICAgICAgICBkLT5tX2dmaWxlID0g
Z19maWxlX25ld19mb3JfdXJpKHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBnX29i
amVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5tX2dmaWxlKSwgIndlYmtpdC1yZXNvdXJjZSIsIGhh
bmRsZSk7CisgICAgICAgIHVybFN0ci5zZXQoZ19zdHJkdXAodXJsLnN0cmluZygpLnV0ZjgoKS5k
YXRhKCkpKTsKIAotICAgIC8vIGJhbGFuY2VkIGJ5IGEgZGVyZWYoKSBpbiBjbGVhbnVwR2lvT3Bl
cmF0aW9uLCB3aGljaCBzaG91bGQgYWx3YXlzIHJ1bgorICAgIEdPd25QdHI8R0Vycm9yPiBlcnJv
cjsKKyAgICBkLT5tX3NvdXBSZXF1ZXN0ID0gd2Via2l0X3NvdXBfcmVxdWVzdGVyX3JlcXVlc3Qo
ZC0+bV9yZXF1ZXN0ZXIuZ2V0KCksIHVybFN0ci5nZXQoKSwgc2Vzc2lvbiwgJmVycm9yLm91dFB0
cigpKTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGdfb2Jq
ZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1fc291cFJlcXVlc3QuZ2V0KCkpLCAid2Via2l0LXJl
c291cmNlIiwgaGFuZGxlKTsKKworICAgIC8vIGJhbGFuY2VkIGJ5IGEgZGVyZWYoKSBpbiBjbGVh
bnVwU291cFJlcXVlc3RPcGVyYXRpb24sIHdoaWNoIHNob3VsZCBhbHdheXMgcnVuCiAgICAgaGFu
ZGxlLT5yZWYoKTsKIAogICAgIGQtPm1fY2FuY2VsbGFibGUgPSBnX2NhbmNlbGxhYmxlX25ldygp
OwotICAgIGdfZmlsZV9xdWVyeV9pbmZvX2FzeW5jKGQtPm1fZ2ZpbGUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9UWVBFICIsIgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfQ09OVEVOVF9U
WVBFICIsIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfRklMRV9BVFRSSUJVVEVfU1RB
TkRBUkRfU0laRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX0ZJTEVfUVVFUllfSU5G
T19OT05FLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUFJJT1JJVFlfREVGQVVMVCwg
ZC0+bV9jYW5jZWxsYWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeUluZm9D
YWxsYmFjaywgMCk7CisgICAgd2Via2l0U291cFJlcXVlc3RTZW5kQXN5bmMoZC0+bV9zb3VwUmVx
dWVzdC5nZXQoKSwgZC0+bV9jYW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZW5kUmVxdWVzdENhbGxiYWNrLCAwKTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3Qu
aCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdC5oCmluZGV4
IGExZDkxNmYuLmMxYzcxMTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL1Jlc291cmNlUmVxdWVzdC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3Vw
L1Jlc291cmNlUmVxdWVzdC5oCkBAIC02Nyw2ICs2Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgICAgIHVwZGF0ZUZyb21Tb3VwTWVzc2FnZShzb3VwTWVzc2FnZSk7CiAgICAgICAg
IH0KIAorICAgICAgICB2b2lkIHVwZGF0ZVNvdXBNZXNzYWdlKFNvdXBNZXNzYWdlKiBzb3VwTWVz
c2FnZSkgY29uc3Q7CiAgICAgICAgIFNvdXBNZXNzYWdlKiB0b1NvdXBNZXNzYWdlKCkgY29uc3Q7
CiAgICAgICAgIHZvaWQgdXBkYXRlRnJvbVNvdXBNZXNzYWdlKFNvdXBNZXNzYWdlKiBzb3VwTWVz
c2FnZSk7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291
cmNlUmVxdWVzdFNvdXAuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3Vy
Y2VSZXF1ZXN0U291cC5jcHAKaW5kZXggNjJkZWIwMS4uNWNlMzVhYyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHAKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHAKQEAg
LTI1LDE0ICsyNSwzNiBAQAogI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCiAjaW5jbHVkZSAiTUlN
RVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgotCiAjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK3ZvaWQgUmVzb3VyY2VSZXF1ZXN0Ojp1cGRhdGVTb3VwTWVzc2FnZShT
b3VwTWVzc2FnZSogc291cE1lc3NhZ2UpIGNvbnN0Cit7CisgICAgZ19vYmplY3Rfc2V0KHNvdXBN
ZXNzYWdlLCBTT1VQX01FU1NBR0VfTUVUSE9ELCBodHRwTWV0aG9kKCkudXRmOCgpLmRhdGEoKSwg
MCk7CisKKyAgICBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzID0gaHR0cEhlYWRlckZpZWxk
cygpOworICAgIFNvdXBNZXNzYWdlSGVhZGVycyogc291cEhlYWRlcnMgPSBzb3VwTWVzc2FnZS0+
cmVxdWVzdF9oZWFkZXJzOworICAgIGlmICghaGVhZGVycy5pc0VtcHR5KCkpIHsKKyAgICAgICAg
SFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVhZGVycy5lbmQoKTsKKyAgICAg
ICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRlcnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBw
ZW5kKHNvdXBIZWFkZXJzLCBpdC0+Zmlyc3Quc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgaXQtPnNl
Y29uZC51dGY4KCkuZGF0YSgpKTsKKyAgICB9CisKKyNpZmRlZiBIQVZFX0xJQlNPVVBfMl8yOV85
MAorICAgIFN0cmluZyBmaXJzdFBhcnR5U3RyaW5nID0gZmlyc3RQYXJ0eUZvckNvb2tpZXMoKS5z
dHJpbmcoKTsKKyAgICBpZiAoIWZpcnN0UGFydHlTdHJpbmcuaXNFbXB0eSgpKSB7CisgICAgICAg
IEdPd25QdHI8U291cFVSST4gZmlyc3RQYXJ0eShzb3VwX3VyaV9uZXcoZmlyc3RQYXJ0eVN0cmlu
Zy51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfZmlyc3RfcGFydHko
c291cE1lc3NhZ2UsIGZpcnN0UGFydHkuZ2V0KCkpOworICAgIH0KKyNlbmRpZgorCisgICAgc291
cF9tZXNzYWdlX3NldF9mbGFncyhzb3VwTWVzc2FnZSwgbV9zb3VwRmxhZ3MpOworfQorCiBTb3Vw
TWVzc2FnZSogUmVzb3VyY2VSZXF1ZXN0Ojp0b1NvdXBNZXNzYWdlKCkgY29uc3QKIHsKICAgICBT
b3VwTWVzc2FnZSogc291cE1lc3NhZ2UgPSBzb3VwX21lc3NhZ2VfbmV3KGh0dHBNZXRob2QoKS51
dGY4KCkuZGF0YSgpLCB1cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLS0gCjEuNy4xCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65137</attachid>
            <date>2010-08-23 09:59:34 -0700</date>
            <delta_ts>2010-08-30 03:36:24 -0700</delta_ts>
            <desc>New public API to enable clients to use the HTTP cache</desc>
            <filename>0003-Added-soup-cache-API-to-webkitgtk-public-API.patch</filename>
            <type>text/plain</type>
            <size>10982</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">RnJvbSA4ZWFmMjE2YmNlZWM0NmZmZDBiMjBiZjk3YTQyNzMzZDU3OWQyNTQ4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTZXJnaW8gVmlsbGFyIFNlbmluIDxzdmlsbGFyQGlnYWxpYS5j
b20+CkRhdGU6IE1vbiwgMjMgQXVnIDIwMTAgMTg6NTM6NDggKzAyMDAKU3ViamVjdDogW1BBVENI
IDMvM10gQWRkZWQgc291cCBjYWNoZSBBUEkgdG8gd2Via2l0Z3RrKyBwdWJsaWMgQVBJCgotLS0K
IEdOVW1ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKIFdlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHNvdXBjYWNoZS5jcHAgfCAgMTk5ICsrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKwogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c291cGNhY2hlLmggICB8ICAg
ODIgKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgMjgzIGluc2VydGlvbnMoKyksIDAg
ZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
c291cGNhY2hlLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHNvdXBjYWNoZS5oCgpkaWZmIC0tZ2l0IGEvR05VbWFrZWZpbGUuYW0gYi9HTlVtYWtlZmlsZS5h
bQppbmRleCA4N2I5NTY0Li5kMDkzZjI4IDEwMDY0NAotLS0gYS9HTlVtYWtlZmlsZS5hbQorKysg
Yi9HTlVtYWtlZmlsZS5hbQpAQCAtMzIxLDYgKzMyMSw3IEBAIHdlYmtpdGd0a19zdGF0aWNfaF9h
cGkgKz0gXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVz
dC5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0bmV0d29ya3Jlc3BvbnNl
LmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzb3VwYXV0aGRpYWxvZy5o
IFwKKwkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c291cGNhY2hlLmggXAogCSQo
c3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3QuaCBcCiAJ
JChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFzb3VyY2UuaCBcCiAJJChz
cmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmggXApAQCAtNzY0LDYgKzc2
NSw3IEBAIHdlYmtpdGd0a19zb3VyY2VzICs9IFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRw
cml2YXRlLmNwcCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oIFwKIAlXZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXRzb3VwYXV0aGRpYWxvZy5jIFwKKwlXZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRzb3VwY2FjaGUuY3BwIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2ZXJzaW9u
LmNwcCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViYmFja2ZvcndhcmRsaXN0LmNwcCBc
CiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YXNvdXJjZS5jcHAgXApkaWZmIC0tZ2l0
IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c291cGNhY2hlLmNwcCBiL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHNvdXBjYWNoZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uZTBhZjBjNgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNv
dXBjYWNoZS5jcHAKQEAgLTAsMCArMSwxOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
SWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAid2Via2l0cHJpdmF0
ZS5oIgorI2luY2x1ZGUgIndlYmtpdHNvdXBjYWNoZS5oIgorI2luY2x1ZGUgIndlYmtpdHNvdXBj
YWNoZWNvcmUuaCIKKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDxnaW8vZ2lv
Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitz
dHJ1Y3QgX1dlYktpdFNvdXBDYWNoZVByaXZhdGUgeworCVdlYktpdFNvdXBDYWNoZUNvcmUgKmNh
Y2hlOworfTsKKworc3RhdGljIFNvdXBTZXNzaW9uRmVhdHVyZUludGVyZmFjZSAqd2Via2l0X3Nv
dXBfY2FjaGVfZGVmYXVsdF9mZWF0dXJlX2ludGVyZmFjZTsKK3N0YXRpYyB2b2lkIHdlYmtpdF9z
b3VwX2NhY2hlX3Nlc3Npb25fZmVhdHVyZV9pbml0IChTb3VwU2Vzc2lvbkZlYXR1cmVJbnRlcmZh
Y2UgKmZlYXR1cmVfaW50ZXJmYWNlLCBncG9pbnRlciBpbnRlcmZhY2VfZGF0YSk7CisKKyNkZWZp
bmUgV0VCS0lUX1NPVVBfQ0FDSEVfR0VUX1BSSVZBVEUobykgKEdfVFlQRV9JTlNUQU5DRV9HRVRf
UFJJVkFURSAoKG8pLCBXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFLCBXZWJLaXRTb3VwQ2FjaGVQcml2
YXRlKSkKKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKFdlYktpdFNvdXBDYWNoZSwgd2Via2l0
X3NvdXBfY2FjaGUsIEdfVFlQRV9PQkpFQ1QsCisJCQkgR19JTVBMRU1FTlRfSU5URVJGQUNFIChT
T1VQX1RZUEVfU0VTU0lPTl9GRUFUVVJFLAorCQkJCQkJd2Via2l0X3NvdXBfY2FjaGVfc2Vzc2lv
bl9mZWF0dXJlX2luaXQpKQorCitzdGF0aWMgdm9pZAorcmVxdWVzdF9zdGFydGVkIChTb3VwU2Vz
c2lvbkZlYXR1cmUgKmZlYXR1cmUsIFNvdXBTZXNzaW9uICpzZXNzaW9uLAorCQkgU291cE1lc3Nh
Z2UgKm1zZywgU291cFNvY2tldCAqc29ja2V0KQoreworICAgIC8qIER1bW15ICovCit9CisKK3N0
YXRpYyB2b2lkCithdHRhY2ggKFNvdXBTZXNzaW9uRmVhdHVyZSAqZmVhdHVyZSwgU291cFNlc3Np
b24gKnNlc3Npb24pCit7CisgICAgV2ViS2l0U291cENhY2hlICpjYWNoZSA9IChXZWJLaXRTb3Vw
Q2FjaGUgKikgZmVhdHVyZTsKKyAgICBzb3VwX3Nlc3Npb25fYWRkX2ZlYXR1cmUgKHNlc3Npb24s
IFNPVVBfU0VTU0lPTl9GRUFUVVJFIChjYWNoZS0+cHJpdi0+Y2FjaGUpKTsKKworICAgIHdlYmtp
dF9zb3VwX2NhY2hlX2RlZmF1bHRfZmVhdHVyZV9pbnRlcmZhY2UtPmF0dGFjaCAoZmVhdHVyZSwg
c2Vzc2lvbik7Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfc291cF9jYWNoZV9zZXNzaW9uX2Zl
YXR1cmVfaW5pdCAoU291cFNlc3Npb25GZWF0dXJlSW50ZXJmYWNlICpmZWF0dXJlX2ludGVyZmFj
ZSwKKwkJCQkJZ3BvaW50ZXIgaW50ZXJmYWNlX2RhdGEpCit7CisJd2Via2l0X3NvdXBfY2FjaGVf
ZGVmYXVsdF9mZWF0dXJlX2ludGVyZmFjZSA9CisJCXN0YXRpY19jYXN0PFNvdXBTZXNzaW9uRmVh
dHVyZUludGVyZmFjZSo+KGdfdHlwZV9kZWZhdWx0X2ludGVyZmFjZV9wZWVrIChTT1VQX1RZUEVf
U0VTU0lPTl9GRUFUVVJFKSk7CisKKwlmZWF0dXJlX2ludGVyZmFjZS0+YXR0YWNoID0gYXR0YWNo
OworCWZlYXR1cmVfaW50ZXJmYWNlLT5yZXF1ZXN0X3N0YXJ0ZWQgPSByZXF1ZXN0X3N0YXJ0ZWQ7
Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfc291cF9jYWNoZV9pbml0IChXZWJLaXRTb3VwQ2Fj
aGUgKmNhY2hlKQoreworCVdlYktpdFNvdXBDYWNoZVByaXZhdGUgKnByaXY7CisKKwlwcml2ID0g
Y2FjaGUtPnByaXYgPSBXRUJLSVRfU09VUF9DQUNIRV9HRVRfUFJJVkFURSAoY2FjaGUpOworCisJ
cHJpdi0+Y2FjaGUgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfY2FjaGVf
ZmluYWxpemUgKEdPYmplY3QgKm9iamVjdCkKK3sKKwlXZWJLaXRTb3VwQ2FjaGVQcml2YXRlICpw
cml2OworCisJcHJpdiA9IFdFQktJVF9TT1VQX0NBQ0hFIChvYmplY3QpLT5wcml2OworCisJZ19v
YmplY3RfdW5yZWYgKHByaXYtPmNhY2hlKTsKKworCUdfT0JKRUNUX0NMQVNTICh3ZWJraXRfc291
cF9jYWNoZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKK30KKworI2RlZmluZSBX
RUJLSVRfU09VUF9DQUNIRV9UWVBFX1RZUEUgKHdlYmtpdF9zb3VwX2NhY2hlX3R5cGVfZ2V0X3R5
cGUoKSkKK3N0YXRpYyBHVHlwZQord2Via2l0X3NvdXBfY2FjaGVfdHlwZV9nZXRfdHlwZSAodm9p
ZCkKK3sKKwlzdGF0aWMgR1R5cGUgY2FjaGVfdHlwZSA9IDA7CisKKwlzdGF0aWMgY29uc3QgR0Vu
dW1WYWx1ZSBjYWNoZV90eXBlc1tdID0geworCQl7V0VCS0lUX1NPVVBfQ0FDSEVfU0lOR0xFX1VT
RVIsICJTaW5nbGUgdXNlciBjYWNoZSIsICJ1c2VyIn0sCisJCXtXRUJLSVRfU09VUF9DQUNIRV9T
SEFSRUQsICJTaGFyZWQgY2FjaGUiLCAic2hhcmVkIn0sCisJCXswLCBOVUxMLCBOVUxMfQorCX07
CisKKwlpZiAoIWNhY2hlX3R5cGUpIHsKKwkJY2FjaGVfdHlwZSA9IGdfZW51bV9yZWdpc3Rlcl9z
dGF0aWMgKCJXZWJLaXRTb3VwQ2FjaGVUeXBlIiwgY2FjaGVfdHlwZXMpOworCX0KKwlyZXR1cm4g
Y2FjaGVfdHlwZTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX2NhY2hlX2NsYXNzX2lu
aXQgKFdlYktpdFNvdXBDYWNoZUNsYXNzICpjYWNoZV9jbGFzcykKK3sKKwlHT2JqZWN0Q2xhc3Mg
KmdvYmplY3RfY2xhc3MgPSAoR09iamVjdENsYXNzKiljYWNoZV9jbGFzczsKKworCWdvYmplY3Rf
Y2xhc3MtPmZpbmFsaXplID0gd2Via2l0X3NvdXBfY2FjaGVfZmluYWxpemU7CisKKwlnX3R5cGVf
Y2xhc3NfYWRkX3ByaXZhdGUoY2FjaGVfY2xhc3MsIHNpemVvZiAoV2ViS2l0U291cENhY2hlUHJp
dmF0ZSkpOworfQorCisvKioKKyAqIHdlYmtpdF9zb3VwX2NhY2hlX25ldzoKKyAqIEBjYWNoZV9k
aXI6IHRoZSBkaXJlY3RvcnkgdG8gc3RvcmUgdGhlIGNhY2hlZCBkYXRhLCBvciAlTlVMTCB0byB1
c2UgdGhlIGRlZmF1bHQgb25lCisgKiBAY2FjaGVfdHlwZTogdGhlICNXZWJLaXRTb3VwQ2FjaGVU
eXBlIG9mIHRoZSBjYWNoZQorICoKKyAqIENyZWF0ZXMgYSBuZXcgI1dlYktpdFNvdXBDYWNoZS4K
KyAqCisgKiBSZXR1cm5zOiBhIG5ldyAjV2ViS2l0U291cENhY2hlCisgKgorICogU2luY2U6IDIu
MjgKKyAqKi8KK1dlYktpdFNvdXBDYWNoZSAqCit3ZWJraXRfc291cF9jYWNoZV9uZXcgKGNvbnN0
IGNoYXIgKmNhY2hlX2RpciwgV2ViS2l0U291cENhY2hlVHlwZSBjYWNoZV90eXBlKQoreworICAg
IFdlYktpdFNvdXBDYWNoZSogY2FjaGUgPQorICAgICAgICAoV2ViS2l0U291cENhY2hlICopIGdf
b2JqZWN0X25ldyAoV0VCS0lUX1RZUEVfU09VUF9DQUNIRSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8qICJjYWNoZS1kaXIiLCBjYWNoZV9kaXIsICovCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAiY2FjaGUtdHlwZSIsIGNh
Y2hlX3R5cGUsICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO
VUxMKTsKKworICAgIGNhY2hlLT5wcml2LT5jYWNoZSA9IHdlYmtpdFNvdXBDYWNoZUNvcmVOZXcg
KGNhY2hlX2RpciwgKFdlYktpdFNvdXBDYWNoZUNvcmVUeXBlKWNhY2hlX3R5cGUpOworCisgICAg
cmV0dXJuIGNhY2hlOworfQorCisvKioKKyAqIHdlYmtpdF9zb3VwX2NhY2hlX2ZsdXNoOgorICog
QGNhY2hlOiBhICNXZWJLaXRTb3VwQ2FjaGUKKyAqIEBzZXNzaW9uOiB0aGUgI1NvdXBTZXNzaW9u
IGFzc29jaWF0ZWQgd2l0aCB0aGUgQGNhY2hlCisgKiAKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBm
b3JjZSBhbGwgcGVuZGluZyB3cml0ZXMgaW4gdGhlIEBjYWNoZSB0byBiZQorICogY29tbWl0dGVk
IHRvIGRpc2suIEZvciBkb2luZyBzbyBpdCB3aWxsIGl0ZXJhdGUgdGhlICNHTWFpbkNvbnRleHQK
KyAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgQHNlc3Npb24gKHdoaWNoIGNhbiBiZSB0aGUgZGVmYXVs
dCBvbmUpIGFzIGxvbmcKKyAqIGFzIG5lZWRlZC4KKyAqKi8KK3ZvaWQKK3dlYmtpdF9zb3VwX2Nh
Y2hlX2ZsdXNoIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKQoreworCXdlYmtpdFNvdXBDYWNoZUNv
cmVGbHVzaCAoY2FjaGUtPnByaXYtPmNhY2hlKTsKK30KKworLyoqCisgKiB3ZWJraXRfc291cF9j
YWNoZV9jbGVhcjoKKyAqIEBjYWNoZTogYSAjV2ViS2l0U291cENhY2hlCisgKiAKKyAqIFdpbGwg
cmVtb3ZlIGFsbCBlbnRyaWVzIGluIHRoZSBAY2FjaGUgcGx1cyBhbGwgdGhlIGNhY2hlIGZpbGVz
CisgKiBhc3NvY2lhdGVkIHdpdGggdGhlbS4KKyAqKi8KK3ZvaWQKK3dlYmtpdF9zb3VwX2NhY2hl
X2NsZWFyIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKQoreworCXdlYmtpdFNvdXBDYWNoZUNvcmVD
bGVhciAoY2FjaGUtPnByaXYtPmNhY2hlKTsKK30KKwordm9pZAord2Via2l0X3NvdXBfY2FjaGVf
ZHVtcCAoV2ViS2l0U291cENhY2hlICpjYWNoZSkKK3sKKwl3ZWJraXRTb3VwQ2FjaGVDb3JlRHVt
cCAoY2FjaGUtPnByaXYtPmNhY2hlKTsKK30KKwordm9pZAord2Via2l0X3NvdXBfY2FjaGVfbG9h
ZCAoV2ViS2l0U291cENhY2hlICpjYWNoZSkKK3sKKwl3ZWJraXRTb3VwQ2FjaGVDb3JlTG9hZCAo
Y2FjaGUtPnByaXYtPmNhY2hlKTsKK30KKwordm9pZAord2Via2l0X3NvdXBfY2FjaGVfc2V0X21h
eF9zaXplIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLAorCQkJIGd1aW50IG1heF9zaXplKQorewor
CXdlYmtpdFNvdXBDYWNoZUNvcmVTZXRNYXhTaXplIChjYWNoZS0+cHJpdi0+Y2FjaGUsIG1heF9z
aXplKTsKK30KKworZ3VpbnQKK3dlYmtpdF9zb3VwX2NhY2hlX2dldF9tYXhfc2l6ZSAoV2ViS2l0
U291cENhY2hlICpjYWNoZSkKK3sKKwlyZXR1cm4gd2Via2l0U291cENhY2hlQ29yZUdldE1heFNp
emUgKGNhY2hlLT5wcml2LT5jYWNoZSk7Cit9CisKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHNvdXBjYWNoZS5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c291cGNhY2hl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUzZGZmNwotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNvdXBjYWNoZS5oCkBAIC0wLDAgKzEs
ODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXRUJL
SVRfU09VUF9DQUNIRV9ICisjZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX0ggMQorCisjaW5jbHVk
ZSA8bGlic291cC9zb3VwLXR5cGVzLmg+CisjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUg
PHdlYmtpdC93ZWJraXRkZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJL
SVRfVFlQRV9TT1VQX0NBQ0hFCQkgICAod2Via2l0X3NvdXBfY2FjaGVfZ2V0X3R5cGUgKCkpCisj
ZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFKG9iaikJCSAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
Q0FTVCAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUsIFdlYktpdFNvdXBDYWNoZSkpCisj
ZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX0NMQVNTKGtsYXNzKQkgICAoR19UWVBFX0NIRUNLX0NM
QVNTX0NBU1QgKChrbGFzcyksIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUsIFdlYktpdFNvdXBDYWNo
ZUNsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfSVNfQ0FDSEUob2JqKQkgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFKSkKKyNkZWZp
bmUgV0VCS0lUX1NPVVBfSVNfQ0FDSEVfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
VFlQRSAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUpKQorI2RlZmluZSBXRUJLSVRfU09V
UF9DQUNIRV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmop
LCBXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFLCBXZWJLaXRTb3VwQ2FjaGVDbGFzcykpCisKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRTb3VwQ2FjaGVQcml2YXRlIFdlYktpdFNvdXBDYWNoZVByaXZhdGU7
CisKK3R5cGVkZWYgZW51bSB7CisJV0VCS0lUX1NPVVBfQ0FDSEVfQ0FDSEVBQkxFICAgPSAoMSA8
PCAwKSwKKwlXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRSA9ICgxIDw8IDEpLAorCVdFQktJ
VF9TT1VQX0NBQ0hFX0lOVkFMSURBVEVTID0gKDEgPDwgMiksCisJV0VCS0lUX1NPVVBfQ0FDSEVf
VkFMSURBVEVTID0gKDEgPDwgMykKK30gV2ViS2l0U291cENhY2hlYWJpbGl0eTsKKwordHlwZWRl
ZiBlbnVtIHsKKwlXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9GUkVTSCwKKwlXRUJLSVRfU09V
UF9DQUNIRV9SRVNQT05TRV9ORUVEU19WQUxJREFUSU9OLAorCVdFQktJVF9TT1VQX0NBQ0hFX1JF
U1BPTlNFX1NUQUxFCit9IFdlYktpdFNvdXBDYWNoZVJlc3BvbnNlOworCit0eXBlZGVmIGVudW0g
eworCVdFQktJVF9TT1VQX0NBQ0hFX1NJTkdMRV9VU0VSLAorCVdFQktJVF9TT1VQX0NBQ0hFX1NI
QVJFRAorfSBXZWJLaXRTb3VwQ2FjaGVUeXBlOworCit0eXBlZGVmIHN0cnVjdCB7CisJR09iamVj
dCBwYXJlbnRfaW5zdGFuY2U7CisKKwkvKjwgcHJpdmF0ZSA+Ki8KKwlXZWJLaXRTb3VwQ2FjaGVQ
cml2YXRlICpwcml2OworfSBXZWJLaXRTb3VwQ2FjaGU7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlH
T2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfSBXZWJLaXRTb3VwQ2FjaGVDbGFzczsKKworV0VC
S0lUX0FQSSBHVHlwZSAgICAgICAgICAgICB3ZWJraXRfc291cF9jYWNoZV9nZXRfdHlwZSAgICAg
ICAgICAgICAgICAgICAgICh2b2lkKTsKK1dFQktJVF9BUEkgV2ViS2l0U291cENhY2hlKiAgd2Vi
a2l0X3NvdXBfY2FjaGVfbmV3ICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAg
KmNhY2hlX2RpciwKKwkJCQkJCQkJCSAgICAgV2ViS2l0U291cENhY2hlVHlwZSBjYWNoZV90eXBl
KTsKK1dFQktJVF9BUEkgdm9pZCAgICAgICAgICAgICAgd2Via2l0X3NvdXBfY2FjaGVfZmx1c2gg
ICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0U291cENhY2hlICAgKmNhY2hlKTsKK1dFQktJ
VF9BUEkgdm9pZCAgICAgICAgICAgICAgd2Via2l0X3NvdXBfY2FjaGVfY2xlYXIgICAgICAgICAg
ICAgICAgICAgICAgICAoV2ViS2l0U291cENhY2hlICAgKmNhY2hlKTsKKworV0VCS0lUX0FQSSB2
b2lkICAgICAgICAgICAgICB3ZWJraXRfc291cF9jYWNoZV9kdW1wICAgICAgICAgICAgICAgICAg
ICAgICAgIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKTsKK1dFQktJVF9BUEkgdm9pZCAgICAgICAg
ICAgICAgd2Via2l0X3NvdXBfY2FjaGVfbG9hZCAgICAgICAgICAgICAgICAgICAgICAgICAoV2Vi
S2l0U291cENhY2hlICpjYWNoZSk7CisKK1dFQktJVF9BUEkgdm9pZCAgICAgICAgICAgICAgd2Vi
a2l0X3NvdXBfY2FjaGVfc2V0X21heF9zaXplICAgICAgICAgICAgICAgICAoV2ViS2l0U291cENh
Y2hlICpjYWNoZSwKKwkJCQkJCQkJCSAgICAgZ3VpbnQgbWF4X3NpemUpOworV0VCS0lUX0FQSSBn
dWludCAgICAgICAgICAgICB3ZWJraXRfc291cF9jYWNoZV9nZXRfbWF4X3NpemUgICAgICAgICAg
ICAgICAgIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlm
IC8qIFdFQktJVF9TT1VQX0NBQ0hFX0ggKi8KLS0gCjEuNy4xCgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65567</attachid>
            <date>2010-08-26 08:12:08 -0700</date>
            <delta_ts>2010-08-26 12:19:04 -0700</delta_ts>
            <desc>patch for check-webkit-style to ignore our new stuff</desc>
            <filename>0001-Ignore-soup-API-that-will-be-cooked-inside-WebKit.patch</filename>
            <type>text/plain</type>
            <size>1775</size>
            <attacher name="Gustavo Noronha (kov)">gustavo</attacher>
            
              <data encoding="base64">RnJvbSA4MzQ5ODhlYmMyMDJkN2JkZWYzZDJkZGIwNjVkMGU0NGQ5ZGY3ZTU2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+
CkRhdGU6IFRodSwgMjYgQXVnIDIwMTAgMTI6MTE6MTQgLTAzMDAKU3ViamVjdDogW1BBVENIXSBJ
Z25vcmUgc291cCBBUEkgdGhhdCB3aWxsIGJlIGNvb2tlZCBpbnNpZGUgV2ViS2l0CgotLS0KIFdl
YktpdFRvb2xzL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTMgKysrKysr
KysrKysrKwogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5IHwg
ICAgNCArKysrCiAyIGZpbGVzIGNoYW5nZWQsIDE3IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25z
KC0pCgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nIGIvV2ViS2l0VG9vbHMvQ2hh
bmdlTG9nCmluZGV4IDU4MTFlZjMuLmM1MmE1MjIgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0No
YW5nZUxvZworKysgYi9XZWJLaXRUb29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAx
MC0wOC0yNiAgR3VzdGF2byBOb3JvbmhhIFNpbHZhICA8Z3VzdGF2by5ub3JvbmhhQGNvbGxhYm9y
YS5jby51az4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBbR1RLXSBBZGQgSFRUUCBjYWNoaW5nIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0MjYxCisKKyAgICAgICAgSWdub3JlIG5ldyBzb3Vw
IEFQSSB0aGF0IHdlIGRlY2lkZWQgdG8gbWVyZ2UgaW50byB0aGUgc291cCBiYWNrZW5kCisgICAg
ICAgIHdoaWxlIGl0IGlzIGJlaW5nIGNvb2tlZC4gSXQgZm9sbG93cyB0aGUgbGlic291cCBzdHls
ZSwgYW5kIHdpbGwKKyAgICAgICAgYmUgcmVtb3ZlZCBmcm9tIFdlYktpdCBhcyBzb29uIGFzIGl0
IGlzIG1lcmdlZCBpbnRvIGxpYnNvdXAuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0
eWxlL2NoZWNrZXIucHk6CisKIDIwMTAtMDgtMjYgIE1haGVzaCBLdWxrYXJuaSAgPG1haGVzaC5r
dWxrYXJuaUBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBD
aHJpc3RpYW5zZW4uCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0
eWxlL2NoZWNrZXIucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNr
ZXIucHkKaW5kZXggZWUzMzAwMy4uMGY2OTVkNSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQpAQCAtMjEyLDYgKzIxMiwxMCBAQCBfU0tJUFBFRF9G
SUxFU19XSVRIX1dBUk5JTkcgPSBbCiAgICAgIldlYktpdC9xdC9BcGkvIiwKICAgICAiV2ViS2l0
L3F0L3Rlc3RzLyIsCiAgICAgIldlYktpdC9xdC9leGFtcGxlcy8iLAorICAgICMgU291cCBBUEkg
dGhhdCBpcyBzdGlsbCBiZWluZyBjb29rZWQsIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIFdlYktpdAor
ICAgICMgaW4gYSBmZXcgbW9udGhzIHdoZW4gaXQgaXMgbWVyZ2VkIGludG8gc291cCBwcm9wZXIu
IFRoZSBzdHlsZQorICAgICMgZm9sbG93cyB0aGUgbGlic291cCBzdHlsZSBjb21wbGV0ZWx5Lgor
ICAgICJXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS8iCiAgICAgXQogCiAKLS0g
CjEuNy4xCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65900</attachid>
            <date>2010-08-30 03:36:24 -0700</date>
            <delta_ts>2010-09-01 03:34:01 -0700</delta_ts>
            <desc>Imported SoupURILoader to Webkit. New public API for HTTP cache</desc>
            <filename>0001-Imported-SoupCache-files.patch</filename>
            <type>text/plain</type>
            <size>164951</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">RnJvbSAxMWU0Y2QyMGYzMDgwYmVmMDFiZTg0N2IxZTAxNzc1YjMyYjFmOWYzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTZXJnaW8gVmlsbGFyIFNlbmluIDxzdmlsbGFyQGlnYWxpYS5j
b20+CkRhdGU6IE1vbiwgMzAgQXVnIDIwMTAgMTI6MjQ6NTYgKzAyMDAKU3ViamVjdDogW1BBVENI
IDEvMl0gSW1wb3J0ZWQgU291cENhY2hlIGZpbGVzCgotLS0KIEdOVW1ha2VmaWxlLmFtICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNCArLQogV2ViQ29yZS9HTlVtYWtl
ZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIwICstCiAuLi4vc291cC9j
YWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uYyAgICAgICB8ICAxOTkgKysrCiAuLi4v
c291cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uaCAgICAgICB8ICAgNjEgKwog
Li4uL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmMgICAgfCAgOTIy
ICsrKysrKysrKysrCiAuLi4vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJl
YW0uaCAgICB8ICAgNzkgKwogLi4uL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0
YS5jICAgICAgICAgfCAgMjA1ICsrKwogLi4uL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVl
c3QtZGF0YS5oICAgICAgICAgfCAgIDUyICsKIC4uLi9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1y
ZXF1ZXN0LWZpbGUuYyAgICAgICAgIHwgIDMxMyArKysrCiAuLi4vbmV0d29yay9zb3VwL2NhY2hl
L3NvdXAtcmVxdWVzdC1maWxlLmggICAgICAgICB8ICAgNTQgKwogLi4uL25ldHdvcmsvc291cC9j
YWNoZS9zb3VwLXJlcXVlc3QtaHR0cC5jICAgICAgICAgfCAgMzM5ICsrKysKIC4uLi9uZXR3b3Jr
L3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuaCAgICAgICAgIHwgICA1NCArCiBXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QuYyB8ICAyODAgKysrKwog
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LmggfCAgIDky
ICsrCiAuLi4vcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmMgICB8
ICAxODYgKysrCiAuLi4vcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVy
LmggICB8ICAgODAgKwogLi4uL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS1w
cml2YXRlLmggfCAgIDQxICsKIC4uLi9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2Fj
aGUuYyAgICAgICAgIHwgMTYzMiArKysrKysrKysrKysrKysrKysrKwogLi4uL25ldHdvcmsvc291
cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5oICAgICAgICAgfCAgIDk1ICsrCiBXZWJLaXRUb29s
cy9HTlVtYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKwogMjAgZmls
ZXMgY2hhbmdlZCwgNDcwOCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtZGlyZWN0
b3J5LWlucHV0LXN0cmVhbS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmgKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAt
aW5wdXQtc3RyZWFtLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmgKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5j
CiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUv
c291cC1yZXF1ZXN0LWRhdGEuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZmlsZS5o
CiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUv
c291cC1yZXF1ZXN0LWh0dHAuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRwLmgKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QuYwogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAt
cmVxdWVzdC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmgKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNo
ZS1wcml2YXRlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUuaAoKZGlmZiAt
LWdpdCBhL0dOVW1ha2VmaWxlLmFtIGIvR05VbWFrZWZpbGUuYW0KaW5kZXggODg0MDg1Mi4uY2Yw
NDFhZiAxMDA2NDQKLS0tIGEvR05VbWFrZWZpbGUuYW0KKysrIGIvR05VbWFrZWZpbGUuYW0KQEAg
LTMxOSw3ICszMTksOCBAQCB3ZWJraXRndGtfc3RhdGljX2hfYXBpICs9IFwKIAkkKHNyY2Rpcikv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vid2luZG93ZmVhdHVyZXMuaCBcCiAJJChzcmNkaXIp
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYmRhdGFiYXNlLmggXAotCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXRzZWN1cml0eW9yaWdpbi5oCisJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHNlY3VyaXR5b3JpZ2luLmggXAorCSQoc3JjZGlyKS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5oCiAKIHdlYmtpdGd0a19idWlsdF9o
X2FwaSArPSBcCiAJRGVyaXZlZFNvdXJjZXMvd2Via2l0L1dlYktpdERPTUNTU1J1bGUuaCBcCkBA
IC05NTYsNiArOTU3LDcgQEAgd2Via2l0X3Rlc3RzX2NmbGFncyA9IFwKIAktZm5vLXN0cmljdC1h
bGlhc2luZyBcCiAJLUkkKHNyY2RpcikvSmF2YVNjcmlwdENvcmUvRm9yd2FyZGluZ0hlYWRlcnMg
XAogCS1JJChzcmNkaXIpL1dlYktpdC9ndGsgXAorCS1JJChzcmNkaXIpL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL2NhY2hlIFwKIAktSSQodG9wX2J1aWxkZGlyKS9XZWJLaXQvZ3RrIFwK
IAktSSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcyBcCiAJLUkkKHRvcF9zcmNkaXIpL1dl
YkNvcmUvYmluZGluZ3MgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dl
YkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggYzk3OTY1Mi4uZDhlNjczZSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC03
Nyw3ICs3Nyw5IEBAIHdlYmNvcmVndGtfY3BwZmxhZ3MgKz0gXAogCS1JJChzcmNkaXIpL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyIFwKIAktSSQoc3JjZGlyKS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2d0ayBcCiAJLUkkKHNyY2RpcikvV2ViQ29yZS9wbGF0Zm9ybS9ndGsg
XAotCS1JJChzcmNkaXIpL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwCisJLUkkKHNyY2Rp
cikvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAgXAorCS1JJChzcmNkaXIpL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlIFwKKwktSSQoc3JjZGlyKS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQKIAogd2ViY29yZV9idWlsdF9ub3NvdXJjZXMg
Kz0gXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvRG9jVHlwZVN0cmluZ3MuY3BwIFwKQEAgLTI1
NTMsNiArMjU1NSwyMiBAQCB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3BwIFwKIAlXZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlLmggXAogCVdlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL1Jlc291cmNlUmVzcG9uc2VTb3VwLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmMgXAorCVdl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtZGlyZWN0b3J5LWlucHV0LXN0
cmVhbS5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAt
aW5wdXQtc3RyZWFtLmMgXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3Nv
dXAtaHR0cC1pbnB1dC1zdHJlYW0uaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
Y2FjaGUvc291cC1yZXF1ZXN0LmMgXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2Nh
Y2hlL3NvdXAtcmVxdWVzdC1kYXRhLmMgXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3Vw
L2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmMgXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmMgXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtaHR0cC5jIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtaHR0cC5oIFwKKwlXZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5jIFwKKwlXZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5oIFwKIAlXZWJDb3JlL3Bs
dWdpbnMvZ3RrL1BsdWdpbkRhdGFHdGsuY3BwIFwKIAlXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdp
blBhY2thZ2VHdGsuY3BwIFwKIAlXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3Bw
IFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAt
ZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5jIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
Y2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNzljNzE4NwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5jCkBAIC0w
LDAgKzEsMTk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFJlZCBIYXQsIEluYy4KKyAq
IENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNp
bmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAic291cC1kaXJlY3RvcnktaW5w
dXQtc3RyZWFtLmgiCisKKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDxzdGRp
by5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjZGVmaW5lIElOSVRfU1RSSU5HICI8aHRtbD48
aGVhZD48dGl0bGU+T01HITwvdGl0bGU+PC9oZWFkPjxib2R5Pjx0YWJsZT4iCisjZGVmaW5lIEVY
SVRfU1RSSU5HICI8L3RhYmxlPjwvaHRtbD4iCisKK0dfREVGSU5FX1RZUEUgKFNvdXBEaXJlY3Rv
cnlJbnB1dFN0cmVhbSwgc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtLCBHX1RZUEVfSU5QVVRf
U1RSRUFNKQorCitzdGF0aWMgU291cEJ1ZmZlciAqCitzb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJl
YW1fcGFyc2VfaW5mbyAoU291cERpcmVjdG9yeUlucHV0U3RyZWFtICpzdHJlYW0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0ZpbGVJbmZvICAgICAgICAgICAgICAg
ICppbmZvKQoreworICAgICAgICBTb3VwQnVmZmVyICpidWZmZXI7CisgICAgICAgIEdTdHJpbmcg
KnN0cmluZzsKKyAgICAgICAgY29uc3QgY2hhciAqczsKKyAgICAgICAgY2hhciAqZXNjYXBlZCwg
KnBhdGgsICp4bWxfc3RyaW5nOworCisgICAgICAgIGlmICghZ19maWxlX2luZm9fZ2V0X25hbWUg
KGluZm8pKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICAgIHMgPSBnX2Zp
bGVfaW5mb19nZXRfZGlzcGxheV9uYW1lIChpbmZvKTsKKyAgICAgICAgaWYgKCFzKSB7CisgICAg
ICAgICAgICAgICAgcyA9IGdfZmlsZV9pbmZvX2dldF9uYW1lIChpbmZvKTsKKyAgICAgICAgICAg
ICAgICAvKiBGSVhNRTogY29udmVydCBzb21laG93PyAqLworICAgICAgICAgICAgICAgIGlmICgh
Z191dGY4X3ZhbGlkYXRlIChzLCAtMSwgTlVMTCkpCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBzdHJpbmcgPSBnX3N0cmluZ19uZXcgKCI8
dHI+Iik7CisKKyAgICAgICAgeG1sX3N0cmluZyA9IGdfbWFya3VwX2VzY2FwZV90ZXh0IChzLCAt
MSk7CisgICAgICAgIGVzY2FwZWQgPSBnX3VyaV9lc2NhcGVfc3RyaW5nIChnX2ZpbGVfaW5mb19n
ZXRfbmFtZSAoaW5mbyksIE5VTEwsIEZBTFNFKTsKKyAgICAgICAgcGF0aCA9IGdfc3RyY29uY2F0
IChzdHJlYW0tPnVyaSwgIi8iLCBlc2NhcGVkLCBOVUxMKTsKKyAgICAgICAgZ19mcmVlIChlc2Nh
cGVkKTsKKyAgICAgICAgZ19zdHJpbmdfYXBwZW5kX3ByaW50ZiAoc3RyaW5nLCAiPHRkPjxhIGhy
ZWY9XCIlc1wiPiVzPC9hPjwvdGQ+IiwgcGF0aCwgeG1sX3N0cmluZyk7CisgICAgICAgIGdfZnJl
ZSAocGF0aCk7CisgICAgICAgIGdfZnJlZSAoeG1sX3N0cmluZyk7CisgICAgICAgIGdfc3RyaW5n
X2FwcGVuZCAoc3RyaW5nLCAiPC90cj4iKTsKKworICAgICAgICBidWZmZXIgPSBzb3VwX2J1ZmZl
cl9uZXcgKFNPVVBfTUVNT1JZX1RBS0UsIHN0cmluZy0+c3RyLCBzdHJpbmctPmxlbik7CisgICAg
ICAgIGdfc3RyaW5nX2ZyZWUgKHN0cmluZywgRkFMU0UpOworCisgICAgICAgIHJldHVybiBidWZm
ZXI7Cit9CisKK3N0YXRpYyBTb3VwQnVmZmVyICoKK3NvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVh
bV9yZWFkX25leHRfZmlsZSAoU291cERpcmVjdG9yeUlucHV0U3RyZWFtICAqc3RyZWFtLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2FuY2VsbGFibGUgICAg
ICAgICAgICAgICpjYW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICAgICAgICoqZXJyb3IpCit7CisgICAgICAg
IEdGaWxlSW5mbyAqaW5mbzsKKyAgICAgICAgU291cEJ1ZmZlciAqYnVmZmVyOworICAgICAgICBH
RXJyb3IgKmVyciA9IE5VTEw7CisKKyAgICAgICAgZG8geworICAgICAgICAgICAgICAgIGluZm8g
PSBnX2ZpbGVfZW51bWVyYXRvcl9uZXh0X2ZpbGUgKHN0cmVhbS0+ZW51bWVyYXRvciwgY2FuY2Vs
bGFibGUsICZlcnIpOworICAgICAgICAgICAgICAgIGlmIChpbmZvID09IE5VTEwpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnX3Byb3BhZ2F0ZV9lcnJvciAoZXJyb3IsIGVycik7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFz
dHJlYW0tPmRvbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS0+ZG9u
ZSA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc291cF9idWZm
ZXJfbmV3IChTT1VQX01FTU9SWV9TVEFUSUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBFWElUX1NUUklORywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoRVhJVF9TVFJJTkcp
KTsKKyAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJ1ZmZlciA9IHNvdXBfZGlyZWN0b3J5X2lucHV0
X3N0cmVhbV9wYXJzZV9pbmZvIChzdHJlYW0sIGluZm8pOworICAgICAgICB9IHdoaWxlIChidWZm
ZXIgPT0gTlVMTCk7CisKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKworc3RhdGljIGdzc2l6
ZQorc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX3JlYWQgKEdJbnB1dFN0cmVhbSAgKmlucHV0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgICAgICAgICAgKmJ1ZmZl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc2l6ZSAgICAgICAgICBjb3Vu
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2FuY2VsbGFibGUgICpjYW5j
ZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAg
KiplcnJvcikKK3sKKwlTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW0gKnN0cmVhbSA9IFNPVVBfRElS
RUNUT1JZX0lOUFVUX1NUUkVBTSAoaW5wdXQpOworICAgICAgICBnc3NpemUgdG90YWwsIHNpemU7
CisgICAgICAgIAorICAgICAgICBmb3IgKHRvdGFsID0gMDsgdG90YWwgPCBjb3VudDsgdG90YWwg
Kz0gc2l6ZSkgeworICAgICAgICAgICAgICAgIGlmIChzdHJlYW0tPmJ1ZmZlciA9PSBOVUxMKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0tPmJ1ZmZlciA9IHNvdXBfZGlyZWN0b3J5
X2lucHV0X3N0cmVhbV9yZWFkX25leHRfZmlsZSAoc3RyZWFtLCBjYW5jZWxsYWJsZSwgZXJyb3Ip
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS0+YnVmZmVyID09IE5VTEwpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRklYTUU6IElzIHRoaXMgY29ycmVj
dCBvciBzaG91bGQgd2UgZm9yd2FyZCB0aGUgZXJyb3I/ICovCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh0b3RhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnX2NsZWFyX2Vycm9yIChlcnJvcik7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0b3RhbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBzaXplID0gTUlOIChzdHJlYW0tPmJ1ZmZlci0+
bGVuZ3RoLCBjb3VudCAtIHRvdGFsKTsKKyAgICAgICAgICAgICAgICBtZW1jcHkgKChjaGFyICop
IGJ1ZmZlciArIHRvdGFsLCBzdHJlYW0tPmJ1ZmZlci0+ZGF0YSwgc2l6ZSk7CisgICAgICAgICAg
ICAgICAgaWYgKHNpemUgPT0gc3RyZWFtLT5idWZmZXItPmxlbmd0aCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgc291cF9idWZmZXJfZnJlZSAoc3RyZWFtLT5idWZmZXIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgc3RyZWFtLT5idWZmZXIgPSBOVUxMOworICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBTb3VwQnVmZmVyICpzdWIgPSBzb3VwX2J1
ZmZlcl9uZXdfc3ViYnVmZmVyIChzdHJlYW0tPmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHJlYW0tPmJ1ZmZlci0+bGVuZ3RoIC0gc2l6ZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBzb3VwX2J1ZmZlcl9mcmVlIChzdHJlYW0tPmJ1ZmZlcik7CisgICAgICAgICAg
ICAgICAgICAgICAgICBzdHJlYW0tPmJ1ZmZlciA9IHN1YjsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gdG90YWw7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgor
c291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX2Nsb3NlIChHSW5wdXRTdHJlYW0gICppbnB1dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NhbmNlbGxhYmxlICAqY2FuY2Vs
bGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAq
KmVycm9yKQoreworCVNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbSAqc3RyZWFtID0gU09VUF9ESVJF
Q1RPUllfSU5QVVRfU1RSRUFNIChpbnB1dCk7CisgICAgICAgIGdib29sZWFuIHJlc3VsdDsKKyAg
ICAgICAgCisgICAgICAgIGlmIChzdHJlYW0tPmJ1ZmZlcikgeworICAgICAgICAgICAgICAgIHNv
dXBfYnVmZmVyX2ZyZWUgKHN0cmVhbS0+YnVmZmVyKTsKKyAgICAgICAgICAgICAgICBzdHJlYW0t
PmJ1ZmZlciA9IE5VTEw7CisgICAgICAgIH0KKworICAgICAgICByZXN1bHQgPSBnX2ZpbGVfZW51
bWVyYXRvcl9jbG9zZSAoc3RyZWFtLT5lbnVtZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2FuY2VsbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlcnJvcik7CisgICAgICAgIGdfb2JqZWN0X3VucmVmIChzdHJl
YW0tPmVudW1lcmF0b3IpOworICAgICAgICBzdHJlYW0tPmVudW1lcmF0b3IgPSBOVUxMOworICAg
ICAgICAKKyAgICAgICAgZ19mcmVlIChzdHJlYW0tPnVyaSk7CisgICAgICAgIHN0cmVhbS0+dXJp
ID0gTlVMTDsKKworICAgICAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorc291
cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX2NsYXNzX2luaXQgKFNvdXBEaXJlY3RvcnlJbnB1dFN0
cmVhbUNsYXNzICpzdHJlYW1fY2xhc3MpCit7CisJR0lucHV0U3RyZWFtQ2xhc3MgKmlucHV0c3Ry
ZWFtX2NsYXNzID0gR19JTlBVVF9TVFJFQU1fQ0xBU1MgKHN0cmVhbV9jbGFzcyk7CisKKyAgICAg
ICAgaW5wdXRzdHJlYW1fY2xhc3MtPnJlYWRfZm4gPSBzb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJl
YW1fcmVhZDsKKyAgICAgICAgaW5wdXRzdHJlYW1fY2xhc3MtPmNsb3NlX2ZuID0gc291cF9kaXJl
Y3RvcnlfaW5wdXRfc3RyZWFtX2Nsb3NlOworfQorCitzdGF0aWMgdm9pZAorc291cF9kaXJlY3Rv
cnlfaW5wdXRfc3RyZWFtX2luaXQgKFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbSAqc3RyZWFtKQor
eworICAgICAgICBzdHJlYW0tPmJ1ZmZlciA9IHNvdXBfYnVmZmVyX25ldyAoU09VUF9NRU1PUllf
U1RBVElDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5JVF9T
VFJJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yg
KElOSVRfU1RSSU5HKSk7Cit9CisKK0dJbnB1dFN0cmVhbSAqCitzb3VwX2RpcmVjdG9yeV9pbnB1
dF9zdHJlYW1fbmV3IChHRmlsZUVudW1lcmF0b3IgKmVudW1lcmF0b3IsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTb3VwVVJJICAgICAgICAgKnVyaSkKK3sKKwlHSW5wdXRTdHJl
YW0gKnN0cmVhbTsKKyAgICAgICAgCisgICAgICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHX0lT
X0ZJTEVfRU5VTUVSQVRPUiAoZW51bWVyYXRvciksIE5VTEwpOworICAgICAgICBnX3JldHVybl92
YWxfaWZfZmFpbCAodXJpICE9IE5VTEwsIE5VTEwpOworCisgICAgICAgIHN0cmVhbSA9IGdfb2Jq
ZWN0X25ldyAoU09VUF9UWVBFX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0sIE5VTEwpOworCisgICAg
ICAgIFNPVVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTSAoc3RyZWFtKS0+ZW51bWVyYXRvciA9IGdf
b2JqZWN0X3JlZiAoZW51bWVyYXRvcik7CisgICAgICAgIFNPVVBfRElSRUNUT1JZX0lOUFVUX1NU
UkVBTSAoc3RyZWFtKS0+dXJpID0gc291cF91cmlfdG9fc3RyaW5nICh1cmksIEZBTFNFKTsKKwor
ICAgICAgICByZXR1cm4gc3RyZWFtOworfQorCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uaCBiL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtZGlyZWN0b3J5LWlucHV0LXN0cmVh
bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MjA0OGEKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWRpcmVj
dG9yeS1pbnB1dC1zdHJlYW0uaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2lmbmRlZiBTT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU1fSAorI2RlZmluZSBTT1VQX0RJUkVD
VE9SWV9JTlBVVF9TVFJFQU1fSCAxCisKKyNpbmNsdWRlIDxnaW8vZ2lvLmg+CisjaW5jbHVkZSA8
bGlic291cC9zb3VwLXR5cGVzLmg+CisjaW5jbHVkZSA8bGlic291cC9zb3VwLW1lc3NhZ2UtYm9k
eS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgU09VUF9UWVBFX0RJUkVDVE9SWV9JTlBV
VF9TVFJFQU0gICAgICAgICAgICAoc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX2dldF90eXBl
ICgpKQorI2RlZmluZSBTT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0ob2JqKSAgICAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIFNPVVBfVFlQRV9ESVJFQ1RPUllf
SU5QVVRfU1RSRUFNLCBTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW0pKQorI2RlZmluZSBTT1VQX0RJ
UkVDVE9SWV9JTlBVVF9TVFJFQU1fQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
Q0FTVCAoKGtsYXNzKSwgU09VUF9UWVBFX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0sIFNvdXBEaXJl
Y3RvcnlJbnB1dFN0cmVhbUNsYXNzKSkKKyNkZWZpbmUgU09VUF9JU19ESVJFQ1RPUllfSU5QVVRf
U1RSRUFNKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBT
T1VQX1RZUEVfRElSRUNUT1JZX0lOUFVUX1NUUkVBTSkpCisjZGVmaW5lIFNPVVBfSVNfRElSRUNU
T1JZX0lOUFVUX1NUUkVBTV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgo
b2JqKSwgU09VUF9UWVBFX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0pKQorI2RlZmluZSBTT1VQX0RJ
UkVDVE9SWV9JTlBVVF9TVFJFQU1fR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VU
X0NMQVNTICgob2JqKSwgU09VUF9UWVBFX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0sIFNvdXBEaXJl
Y3RvcnlJbnB1dFN0cmVhbUNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1NvdXBEaXJlY3RvcnlJ
bnB1dFN0cmVhbSBTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW07Cit0eXBlZGVmIHN0cnVjdCBfU291
cERpcmVjdG9yeUlucHV0U3RyZWFtQ2xhc3MgU291cERpcmVjdG9yeUlucHV0U3RyZWFtQ2xhc3M7
CisKK3N0cnVjdCBfU291cERpcmVjdG9yeUlucHV0U3RyZWFtIHsKKwlHSW5wdXRTdHJlYW0gcGFy
ZW50OworCisgICAgICAgIEdGaWxlRW51bWVyYXRvciAqZW51bWVyYXRvcjsKKyAgICAgICAgY2hh
ciAqdXJpOworICAgICAgICBTb3VwQnVmZmVyICpidWZmZXI7CisgICAgICAgIGdib29sZWFuIGRv
bmU7Cit9OworCitzdHJ1Y3QgX1NvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbUNsYXNzIHsKKwlHSW5w
dXRTdHJlYW1DbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitHVHlwZSAgICAgICAgICBzb3VwX2Rp
cmVjdG9yeV9pbnB1dF9zdHJlYW1fZ2V0X3R5cGUgICAgICAodm9pZCk7CisKK0dJbnB1dFN0cmVh
bSAqIHNvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9uZXcgICAgICAgICAgIChHRmlsZUVudW1l
cmF0b3IgKmVudW1lcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU291cFVSSSAgICAgICAgICp1cmkpOworCisKK0dfRU5EX0RF
Q0xTCisKKyNlbmRpZiAvKiBTT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU1fSCAqLwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1odHRwLWlucHV0
LXN0cmVhbS5jIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1odHRw
LWlucHV0LXN0cmVhbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNDAw
MzIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNo
ZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmMKQEAgLTAsMCArMSw5MjIgQEAKKy8qIHNvdXAtaW5w
dXQtc3RyZWFtLmMsIGJhc2VkIG9uIGdzb2NrZXRpbnB1dHN0cmVhbS5jCisgKgorICogQ29weXJp
Z2h0IChDKSAyMDA2LTIwMDcgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEln
YWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLAorICogQm9z
dG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisj
aW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z2lvL2dp
by5oPgorCisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CisKKyNpbmNsdWRlICJzb3VwLWh0dHAt
aW5wdXQtc3RyZWFtLmgiCisKK3N0YXRpYyB2b2lkIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2Vl
a2FibGVfaWZhY2VfaW5pdCAoR1NlZWthYmxlSWZhY2UgKnNlZWthYmxlX2lmYWNlKTsKKworR19E
RUZJTkVfVFlQRV9XSVRIX0NPREUgKFNvdXBIVFRQSW5wdXRTdHJlYW0sIHNvdXBfaHR0cF9pbnB1
dF9zdHJlYW0sIEdfVFlQRV9JTlBVVF9TVFJFQU0sCisJCQkgR19JTVBMRU1FTlRfSU5URVJGQUNF
IChHX1RZUEVfU0VFS0FCTEUsCisJCQkJCQlzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlZWthYmxl
X2lmYWNlX2luaXQpKQorCit0eXBlZGVmIHZvaWQgKCpTb3VwSFRUUElucHV0U3RyZWFtQ2FsbGJh
Y2spIChHSW5wdXRTdHJlYW0gKik7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlTb3VwU2Vzc2lvbiAq
c2Vzc2lvbjsKKwlHTWFpbkNvbnRleHQgKmFzeW5jX2NvbnRleHQ7CisJU291cE1lc3NhZ2UgKm1z
ZzsKKwlnYm9vbGVhbiBnb3RfaGVhZGVycywgZmluaXNoZWQ7CisJZ29mZnNldCBvZmZzZXQ7CisK
KwlHQ2FuY2VsbGFibGUgKmNhbmNlbGxhYmxlOworCUdTb3VyY2UgKmNhbmNlbF93YXRjaDsKKwlT
b3VwSFRUUElucHV0U3RyZWFtQ2FsbGJhY2sgZ290X2hlYWRlcnNfY2I7CisJU291cEhUVFBJbnB1
dFN0cmVhbUNhbGxiYWNrIGdvdF9jaHVua19jYjsKKwlTb3VwSFRUUElucHV0U3RyZWFtQ2FsbGJh
Y2sgZmluaXNoZWRfY2I7CisJU291cEhUVFBJbnB1dFN0cmVhbUNhbGxiYWNrIGNhbmNlbGxlZF9j
YjsKKworCWd1Y2hhciAqbGVmdG92ZXJfYnVmZmVyOworCWdzaXplIGxlZnRvdmVyX2J1ZnNpemUs
IGxlZnRvdmVyX29mZnNldDsKKworCWd1Y2hhciAqY2FsbGVyX2J1ZmZlcjsKKwlnc2l6ZSBjYWxs
ZXJfYnVmc2l6ZSwgY2FsbGVyX25yZWFkOworCUdBc3luY1JlYWR5Q2FsbGJhY2sgb3V0c3RhbmRp
bmdfY2FsbGJhY2s7CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpyZXN1bHQ7CisKK30gU291cEhUVFBJ
bnB1dFN0cmVhbVByaXZhdGU7CisjZGVmaW5lIFNPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BS
SVZBVEUobykgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAoKG8pLCBTT1VQX1RZUEVfSFRU
UF9JTlBVVF9TVFJFQU0sIFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlKSkKKworCitzdGF0aWMg
Z3NzaXplICAgc291cF9odHRwX2lucHV0X3N0cmVhbV9yZWFkICAgICAgICAgKEdJbnB1dFN0cmVh
bSAgICAgICAgICpzdHJlYW0sCisJCQkJCQkgICAgIHZvaWQgICAgICAgICAgICAgICAgICpidWZm
ZXIsCisJCQkJCQkgICAgIGdzaXplICAgICAgICAgICAgICAgICBjb3VudCwKKwkJCQkJCSAgICAg
R0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJCQkJICAgICBHRXJyb3IgICAg
ICAgICAgICAgICoqZXJyb3IpOworc3RhdGljIGdib29sZWFuIHNvdXBfaHR0cF9pbnB1dF9zdHJl
YW1fY2xvc2UgICAgICAgIChHSW5wdXRTdHJlYW0gICAgICAgICAqc3RyZWFtLAorCQkJCQkJICAg
ICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJCQkgICAgIEdFcnJvciAg
ICAgICAgICAgICAgKiplcnJvcik7CitzdGF0aWMgdm9pZCAgICAgc291cF9odHRwX2lucHV0X3N0
cmVhbV9yZWFkX2FzeW5jICAgKEdJbnB1dFN0cmVhbSAgICAgICAgICpzdHJlYW0sCisJCQkJCQkg
ICAgIHZvaWQgICAgICAgICAgICAgICAgICpidWZmZXIsCisJCQkJCQkgICAgIGdzaXplICAgICAg
ICAgICAgICAgICBjb3VudCwKKwkJCQkJCSAgICAgaW50ICAgICAgICAgICAgICAgICAgIGlvX3By
aW9yaXR5LAorCQkJCQkJICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJ
CQkJCQkgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgICBjYWxsYmFjaywKKwkJCQkJCSAgICAgZ3Bv
aW50ZXIgICAgICAgICAgICAgIGRhdGEpOworc3RhdGljIGdzc2l6ZSAgIHNvdXBfaHR0cF9pbnB1
dF9zdHJlYW1fcmVhZF9maW5pc2ggIChHSW5wdXRTdHJlYW0gICAgICAgICAqc3RyZWFtLAorCQkJ
CQkJICAgICBHQXN5bmNSZXN1bHQgICAgICAgICAqcmVzdWx0LAorCQkJCQkJICAgICBHRXJyb3Ig
ICAgICAgICAgICAgICoqZXJyb3IpOworc3RhdGljIHZvaWQgICAgIHNvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fY2xvc2VfYXN5bmMgIChHSW5wdXRTdHJlYW0gICAgICAgICAqc3RyZWFtLAorCQkJCQkJ
ICAgICBpbnQgICAgICAgICAgICAgICAgICAgaW9fcHJpb3JpdHksCisJCQkJCQkgICAgIEdDYW5j
ZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkJCSAgICAgR0FzeW5jUmVhZHlDYWxs
YmFjayAgIGNhbGxiYWNrLAorCQkJCQkJICAgICBncG9pbnRlciAgICAgICAgICAgICAgZGF0YSk7
CitzdGF0aWMgZ2Jvb2xlYW4gc291cF9odHRwX2lucHV0X3N0cmVhbV9jbG9zZV9maW5pc2ggKEdJ
bnB1dFN0cmVhbSAgICAgICAgICpzdHJlYW0sCisJCQkJCQkgICAgIEdBc3luY1Jlc3VsdCAgICAg
ICAgICpyZXN1bHQsCisJCQkJCQkgICAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcik7CisK
K3N0YXRpYyBnb2Zmc2V0ICBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3RlbGwgICAgICAgICAoR1Nl
ZWthYmxlICAgICAgICAgICAgKnNlZWthYmxlKTsKKworc3RhdGljIGdib29sZWFuIHNvdXBfaHR0
cF9pbnB1dF9zdHJlYW1fY2FuX3NlZWsgICAgIChHU2Vla2FibGUgICAgICAgICAgICAqc2Vla2Fi
bGUpOworc3RhdGljIGdib29sZWFuIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VlayAgICAgICAg
IChHU2Vla2FibGUgICAgICAgICAgICAqc2Vla2FibGUsCisJCQkJCQkgICAgIGdvZmZzZXQgICAg
ICAgICAgICAgICBvZmZzZXQsCisJCQkJCQkgICAgIEdTZWVrVHlwZSAgICAgICAgICAgICB0eXBl
LAorCQkJCQkJICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJCQkg
ICAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcik7CisKK3N0YXRpYyBnYm9vbGVhbiBzb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX2Nhbl90cnVuY2F0ZSAoR1NlZWthYmxlICAgICAgICAgICAgKnNl
ZWthYmxlKTsKK3N0YXRpYyBnYm9vbGVhbiBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3RydW5jYXRl
ICAgICAoR1NlZWthYmxlICAgICAgICAgICAgKnNlZWthYmxlLAorCQkJCQkJICAgICBnb2Zmc2V0
ICAgICAgICAgICAgICAgb2Zmc2V0LAorCQkJCQkJICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAq
Y2FuY2VsbGFibGUsCisJCQkJCQkgICAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcik7CisK
K3N0YXRpYyB2b2lkIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ290X2hlYWRlcnMgKFNvdXBNZXNz
YWdlICptc2csIGdwb2ludGVyIHN0cmVhbSk7CitzdGF0aWMgdm9pZCBzb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX2dvdF9jaHVuayAoU291cE1lc3NhZ2UgKm1zZywgU291cEJ1ZmZlciAqY2h1bmssIGdw
b2ludGVyIHN0cmVhbSk7CitzdGF0aWMgdm9pZCBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Zpbmlz
aGVkIChTb3VwTWVzc2FnZSAqbXNnLCBncG9pbnRlciBzdHJlYW0pOworCitzdGF0aWMgdm9pZAor
c291cF9odHRwX2lucHV0X3N0cmVhbV9maW5hbGl6ZSAoR09iamVjdCAqb2JqZWN0KQoreworCVNv
dXBIVFRQSW5wdXRTdHJlYW0gKnN0cmVhbSA9IFNPVVBfSFRUUF9JTlBVVF9TVFJFQU0gKG9iamVj
dCk7CisJU291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBTT1VQX0hUVFBfSU5QVVRf
U1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOworCisJZ19vYmplY3RfdW5yZWYgKHByaXYtPnNl
c3Npb24pOworCisJZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jIChwcml2LT5t
c2csIEdfQ0FMTEJBQ0sgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ290X2hlYWRlcnMpLCBzdHJl
YW0pOworCWdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyAocHJpdi0+bXNnLCBH
X0NBTExCQUNLIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dvdF9jaHVuayksIHN0cmVhbSk7CisJ
Z19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jIChwcml2LT5tc2csIEdfQ0FMTEJB
Q0sgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZmluaXNoZWQpLCBzdHJlYW0pOworCWdfb2JqZWN0
X3VucmVmIChwcml2LT5tc2cpOworCWdfZnJlZSAocHJpdi0+bGVmdG92ZXJfYnVmZmVyKTsKKwor
CWlmIChHX09CSkVDVF9DTEFTUyAoc291cF9odHRwX2lucHV0X3N0cmVhbV9wYXJlbnRfY2xhc3Mp
LT5maW5hbGl6ZSkKKwkJKCpHX09CSkVDVF9DTEFTUyAoc291cF9odHRwX2lucHV0X3N0cmVhbV9w
YXJlbnRfY2xhc3MpLT5maW5hbGl6ZSkgKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkCitzb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX2NsYXNzX2luaXQgKFNvdXBIVFRQSW5wdXRTdHJlYW1DbGFzcyAq
a2xhc3MpCit7CisJR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1Mg
KGtsYXNzKTsKKwlHSW5wdXRTdHJlYW1DbGFzcyAqc3RyZWFtX2NsYXNzID0gR19JTlBVVF9TVFJF
QU1fQ0xBU1MgKGtsYXNzKTsKKworCWdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSAoa2xhc3MsIHNp
emVvZiAoU291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUpKTsKKworCWdvYmplY3RfY2xhc3MtPmZp
bmFsaXplID0gc291cF9odHRwX2lucHV0X3N0cmVhbV9maW5hbGl6ZTsKKworCXN0cmVhbV9jbGFz
cy0+cmVhZF9mbiA9IHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVhZDsKKwlzdHJlYW1fY2xhc3Mt
PmNsb3NlX2ZuID0gc291cF9odHRwX2lucHV0X3N0cmVhbV9jbG9zZTsKKwlzdHJlYW1fY2xhc3Mt
PnJlYWRfYXN5bmMgPSBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmM7CisJc3RyZWFt
X2NsYXNzLT5yZWFkX2ZpbmlzaCA9IHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVhZF9maW5pc2g7
CisJc3RyZWFtX2NsYXNzLT5jbG9zZV9hc3luYyA9IHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xv
c2VfYXN5bmM7CisJc3RyZWFtX2NsYXNzLT5jbG9zZV9maW5pc2ggPSBzb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX2Nsb3NlX2ZpbmlzaDsKK30KKworc3RhdGljIHZvaWQKK3NvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fc2Vla2FibGVfaWZhY2VfaW5pdCAoR1NlZWthYmxlSWZhY2UgKnNlZWthYmxlX2lmYWNl
KQoreworCXNlZWthYmxlX2lmYWNlLT50ZWxsID0gc291cF9odHRwX2lucHV0X3N0cmVhbV90ZWxs
OworCXNlZWthYmxlX2lmYWNlLT5jYW5fc2VlayA9IHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2Fu
X3NlZWs7CisJc2Vla2FibGVfaWZhY2UtPnNlZWsgPSBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3Nl
ZWs7CisJc2Vla2FibGVfaWZhY2UtPmNhbl90cnVuY2F0ZSA9IHNvdXBfaHR0cF9pbnB1dF9zdHJl
YW1fY2FuX3RydW5jYXRlOworCXNlZWthYmxlX2lmYWNlLT50cnVuY2F0ZV9mbiA9IHNvdXBfaHR0
cF9pbnB1dF9zdHJlYW1fdHJ1bmNhdGU7Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX2h0dHBfaW5w
dXRfc3RyZWFtX2luaXQgKFNvdXBIVFRQSW5wdXRTdHJlYW0gKnN0cmVhbSkKK3sKKwk7Cit9CisK
K3N0YXRpYyB2b2lkCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3F1ZXVlX21lc3NhZ2UgKFNvdXBI
VFRQSW5wdXRTdHJlYW0gKnN0cmVhbSkKK3sKKwlTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAq
cHJpdiA9IFNPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7CisKKwlw
cml2LT5nb3RfaGVhZGVycyA9IHByaXYtPmZpbmlzaGVkID0gRkFMU0U7CisKKwkvKiBBZGQgYW4g
ZXh0cmEgcmVmIHNpbmNlIHNvdXBfc2Vzc2lvbl9xdWV1ZV9tZXNzYWdlIHN0ZWFscyBvbmUgKi8K
KwlnX29iamVjdF9yZWYgKHByaXYtPm1zZyk7CisJc291cF9zZXNzaW9uX3F1ZXVlX21lc3NhZ2Ug
KHByaXYtPnNlc3Npb24sIHByaXYtPm1zZywgTlVMTCwgTlVMTCk7Cit9CisKKy8qKgorICogc291
cF9odHRwX2lucHV0X3N0cmVhbV9uZXc6CisgKiBAc2Vzc2lvbjogdGhlICNTb3VwU2Vzc2lvbiB0
byB1c2UKKyAqIEBtc2c6IHRoZSAjU291cE1lc3NhZ2Ugd2hvc2UgcmVzcG9uc2Ugd2lsbCBiZSBz
dHJlYW1lZAorICogCisgKiBQcmVwYXJlcyB0byBzZW5kIEBtc2cgb3ZlciBAc2Vzc2lvbiwgYW5k
IHJldHVybnMgYSAjR0lucHV0U3RyZWFtCisgKiB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlYWQgdGhl
IHJlc3BvbnNlLgorICoKKyAqIEBtc2cgbWF5IG5vdCBiZSBzZW50IHVudGlsIHRoZSBmaXJzdCBy
ZWFkIGNhbGw7IGlmIHlvdSBuZWVkIHRvIGxvb2sKKyAqIGF0IHRoZSBzdGF0dXMgY29kZSBvciBy
ZXNwb25zZSBoZWFkZXJzIGJlZm9yZSByZWFkaW5nIHRoZSBib2R5LCB5b3UKKyAqIGNhbiB1c2Ug
c291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kKCkgb3Igc291cF9odHRwX2lucHV0X3N0cmVhbV9z
ZW5kX2FzeW5jKCkKKyAqIHRvIGZvcmNlIHRoZSBtZXNzYWdlIHRvIGJlIHNlbnQgYW5kIHRoZSBy
ZXNwb25zZSBoZWFkZXJzIHJlYWQuCisgKgorICogSWYgQG1zZyBnZXRzIGEgbm9uLTJ4eCByZXN1
bHQsIHRoZSBmaXJzdCByZWFkIChvciBzZW5kKSB3aWxsIHJldHVybgorICogYW4gZXJyb3Igd2l0
aCB0eXBlICVTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0hUVFBfRVJST1IuCisgKgorICogSW50ZXJu
YWxseSwgI1NvdXBIVFRQSW5wdXRTdHJlYW0gaXMgaW1wbGVtZW50ZWQgdXNpbmcgYXN5bmNocm9u
b3VzIEkvTywKKyAqIHNvIGlmIHlvdSBhcmUgdXNpbmcgdGhlIHN5bmNocm9ub3VzIEFQSSAoZWcs
CisgKiBnX2lucHV0X3N0cmVhbV9yZWFkKCkpLCB5b3Ugc2hvdWxkIGNyZWF0ZSBhIG5ldyAjR01h
aW5Db250ZXh0IGFuZAorICogc2V0IGl0IGFzIHRoZSAlU09VUF9TRVNTSU9OX0FTWU5DX0NPTlRF
WFQgcHJvcGVydHkgb24gQHNlc3Npb24uIChJZgorICogeW91IGRvbid0LCB0aGVuIHN5bmNocm9u
b3VzICNHSW5wdXRTdHJlYW0gY2FsbHMgd2lsbCBjYXVzZSB0aGUgbWFpbgorICogbG9vcCB0byBi
ZSBydW4gcmVjdXJzaXZlbHkuKSBUaGUgYXN5bmMgI0dJbnB1dFN0cmVhbSBBUEkgd29ya3MgZmlu
ZQorICogd2l0aCAlU09VUF9TRVNTSU9OX0FTWU5DX0NPTlRFWFQgZWl0aGVyIHNldCBvciB1bnNl
dC4KKyAqCisgKiBSZXR1cm5zOiBhIG5ldyAjR0lucHV0U3RyZWFtLgorICoqLworU291cEhUVFBJ
bnB1dFN0cmVhbSAqCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX25ldyAoU291cFNlc3Npb24gKnNl
c3Npb24sIFNvdXBNZXNzYWdlICptc2cpCit7CisJU291cEhUVFBJbnB1dFN0cmVhbSAqc3RyZWFt
OworCVNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2OworCisJZ19yZXR1cm5fdmFsX2lm
X2ZhaWwgKFNPVVBfSVNfTUVTU0FHRSAobXNnKSwgTlVMTCk7CisKKwlzdHJlYW0gPSBnX29iamVj
dF9uZXcgKFNPVVBfVFlQRV9IVFRQX0lOUFVUX1NUUkVBTSwgTlVMTCk7CisJcHJpdiA9IFNPVVBf
SFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7CisKKwlwcml2LT5zZXNzaW9u
ID0gZ19vYmplY3RfcmVmIChzZXNzaW9uKTsKKwlwcml2LT5hc3luY19jb250ZXh0ID0gc291cF9z
ZXNzaW9uX2dldF9hc3luY19jb250ZXh0IChzZXNzaW9uKTsKKwlwcml2LT5tc2cgPSBnX29iamVj
dF9yZWYgKG1zZyk7CisKKwlnX3NpZ25hbF9jb25uZWN0IChtc2csICJnb3RfaGVhZGVycyIsCisJ
CQkgIEdfQ0FMTEJBQ0sgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ290X2hlYWRlcnMpLCBzdHJl
YW0pOworCWdfc2lnbmFsX2Nvbm5lY3QgKG1zZywgImdvdF9jaHVuayIsCisJCQkgIEdfQ0FMTEJB
Q0sgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ290X2NodW5rKSwgc3RyZWFtKTsKKwlnX3NpZ25h
bF9jb25uZWN0IChtc2csICJmaW5pc2hlZCIsCisJCQkgIEdfQ0FMTEJBQ0sgKHNvdXBfaHR0cF9p
bnB1dF9zdHJlYW1fZmluaXNoZWQpLCBzdHJlYW0pOworCisJc291cF9odHRwX2lucHV0X3N0cmVh
bV9xdWV1ZV9tZXNzYWdlIChzdHJlYW0pOworCXJldHVybiBzdHJlYW07Cit9CisKK3N0YXRpYyB2
b2lkCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dvdF9oZWFkZXJzIChTb3VwTWVzc2FnZSAqbXNn
LCBncG9pbnRlciBzdHJlYW0pCit7CisJU291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYg
PSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOworCisJLyogSWYg
dGhlIHN0YXR1cyBpcyB1bnN1Y2Nlc3NmdWwsIHdlIGp1c3QgaWdub3JlIHRoZSBzaWduYWwgYW5k
IGxldAorCSAqIGxpYnNvdXAga2VlcCBnb2luZyAoZXZlbnR1YWxseSBlaXRoZXIgaXQgd2lsbCBy
ZXF1ZXVlIHRoZSByZXF1ZXN0CisJICogKGFmdGVyIGhhbmRsaW5nIGF1dGhlbnRpY2F0aW9uL3Jl
ZGlyZWN0aW9uKSwgb3IgZWxzZSB0aGUKKwkgKiAiZmluaXNoZWQiIGhhbmRsZXIgd2lsbCBydW4p
LgorCSAqLworCWlmICghU09VUF9TVEFUVVNfSVNfU1VDQ0VTU0ZVTCAobXNnLT5zdGF0dXNfY29k
ZSkpCisJCXJldHVybjsKKworCXByaXYtPmdvdF9oZWFkZXJzID0gVFJVRTsKKwlpZiAoIXByaXYt
PmNhbGxlcl9idWZmZXIpIHsKKwkJLyogTm90IHJlYWR5IHRvIHJlYWQgdGhlIGJvZHkgeWV0ICov
CisJCXNvdXBfc2Vzc2lvbl9wYXVzZV9tZXNzYWdlIChwcml2LT5zZXNzaW9uLCBtc2cpOworCX0K
KworCWlmIChwcml2LT5nb3RfaGVhZGVyc19jYikKKwkJcHJpdi0+Z290X2hlYWRlcnNfY2IgKHN0
cmVhbSk7Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dvdF9jaHVu
ayAoU291cE1lc3NhZ2UgKm1zZywgU291cEJ1ZmZlciAqY2h1bmtfYnVmZmVyLAorCQkJCSAgZ3Bv
aW50ZXIgc3RyZWFtKQoreworCVNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gU09V
UF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKwljb25zdCBnY2hhciAq
Y2h1bmsgPSBjaHVua19idWZmZXItPmRhdGE7CisJZ3NpemUgY2h1bmtfc2l6ZSA9IGNodW5rX2J1
ZmZlci0+bGVuZ3RoOworCisJLyogV2Ugb25seSBwYXkgYXR0ZW50aW9uIHRvIHRoZSBjaHVuayBp
ZiBpdCdzIHBhcnQgb2YgYSBzdWNjZXNzZnVsCisJICogcmVzcG9uc2UuCisJICovCisJaWYgKCFT
T1VQX1NUQVRVU19JU19TVUNDRVNTRlVMIChtc2ctPnN0YXR1c19jb2RlKSkKKwkJcmV0dXJuOwor
CisJLyogU2FuaXR5IGNoZWNrICovCisJaWYgKHByaXYtPmNhbGxlcl9idWZzaXplID09IDAgfHwg
cHJpdi0+bGVmdG92ZXJfYnVmc2l6ZSAhPSAwKQorCQlnX3dhcm5pbmcgKCJzb3VwX2h0dHBfaW5w
dXRfc3RyZWFtX2dvdF9jaHVuayBjYWxsZWQgYWdhaW4gYmVmb3JlIHByZXZpb3VzIGNodW5rIHdh
cyBwcm9jZXNzZWQiKTsKKworCS8qIENvcHkgd2hhdCB3ZSBjYW4gaW50byBwcml2LT5jYWxsZXJf
YnVmZmVyICovCisJaWYgKHByaXYtPmNhbGxlcl9idWZzaXplIC0gcHJpdi0+Y2FsbGVyX25yZWFk
ID4gMCkgeworCQlnc2l6ZSBucmVhZCA9IE1JTiAoY2h1bmtfc2l6ZSwgcHJpdi0+Y2FsbGVyX2J1
ZnNpemUgLSBwcml2LT5jYWxsZXJfbnJlYWQpOworCisJCW1lbWNweSAocHJpdi0+Y2FsbGVyX2J1
ZmZlciArIHByaXYtPmNhbGxlcl9ucmVhZCwgY2h1bmssIG5yZWFkKTsKKwkJcHJpdi0+Y2FsbGVy
X25yZWFkICs9IG5yZWFkOworCQlwcml2LT5vZmZzZXQgKz0gbnJlYWQ7CisJCWNodW5rICs9IG5y
ZWFkOworCQljaHVua19zaXplIC09IG5yZWFkOworCX0KKworCWlmIChjaHVua19zaXplID4gMCkg
eworCQkvKiBDb3B5IHRoZSByZXN0IGludG8gcHJpdi0+bGVmdG92ZXJfYnVmZmVyLiBJZgorCQkg
KiB0aGVyZSdzIGFscmVhZHkgc29tZSBkYXRhIHRoZXJlLCByZWFsbG9jIGFuZAorCQkgKiBhcHBl
bmQuIE90aGVyd2lzZSBqdXN0IGNvcHkuCisJCSAqLworCQlpZiAocHJpdi0+bGVmdG92ZXJfYnVm
c2l6ZSkgeworCQkJcHJpdi0+bGVmdG92ZXJfYnVmZmVyID0gZ19yZWFsbG9jIChwcml2LT5sZWZ0
b3Zlcl9idWZmZXIsCisJCQkJCQkJICAgcHJpdi0+bGVmdG92ZXJfYnVmc2l6ZSArIGNodW5rX3Np
emUpOworCQkJbWVtY3B5IChwcml2LT5sZWZ0b3Zlcl9idWZmZXIgKyBwcml2LT5sZWZ0b3Zlcl9i
dWZzaXplLAorCQkJCWNodW5rLCBjaHVua19zaXplKTsKKwkJCXByaXYtPmxlZnRvdmVyX2J1ZnNp
emUgKz0gY2h1bmtfc2l6ZTsKKwkJfSBlbHNlIHsKKwkJCXByaXYtPmxlZnRvdmVyX2J1ZnNpemUg
PSBjaHVua19zaXplOworCQkJcHJpdi0+bGVmdG92ZXJfYnVmZmVyID0gZ19tZW1kdXAgKGNodW5r
LCBjaHVua19zaXplKTsKKwkJCXByaXYtPmxlZnRvdmVyX29mZnNldCA9IDA7CisJCX0KKwl9CisK
Kwlzb3VwX3Nlc3Npb25fcGF1c2VfbWVzc2FnZSAocHJpdi0+c2Vzc2lvbiwgbXNnKTsKKwlpZiAo
cHJpdi0+Z290X2NodW5rX2NiKQorCQlwcml2LT5nb3RfY2h1bmtfY2IgKHN0cmVhbSk7Cit9CisK
K3N0YXRpYyB2b2lkCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2ZpbmlzaGVkIChTb3VwTWVzc2Fn
ZSAqbXNnLCBncG9pbnRlciBzdHJlYW0pCit7CisJU291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUg
KnByaXYgPSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOworCisJ
cHJpdi0+ZmluaXNoZWQgPSBUUlVFOworCisJaWYgKHByaXYtPmZpbmlzaGVkX2NiKQorCQlwcml2
LT5maW5pc2hlZF9jYiAoc3RyZWFtKTsKK30KKworc3RhdGljIGdib29sZWFuCitzb3VwX2h0dHBf
aW5wdXRfc3RyZWFtX2NhbmNlbGxlZCAoR0lPQ2hhbm5lbCAqY2hhbiwgR0lPQ29uZGl0aW9uIGNv
bmRpdGlvbiwKKwkJCQkgIGdwb2ludGVyIHN0cmVhbSkKK3sKKwlTb3VwSFRUUElucHV0U3RyZWFt
UHJpdmF0ZSAqcHJpdiA9IFNPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVh
bSk7CisKKwlwcml2LT5jYW5jZWxfd2F0Y2ggPSBOVUxMOworCisJc291cF9zZXNzaW9uX3BhdXNl
X21lc3NhZ2UgKHByaXYtPnNlc3Npb24sIHByaXYtPm1zZyk7CisJaWYgKHByaXYtPmNhbmNlbGxl
ZF9jYikKKwkJcHJpdi0+Y2FuY2VsbGVkX2NiIChzdHJlYW0pOworCisJcmV0dXJuIEZBTFNFOwor
fQorCitzdGF0aWMgdm9pZAorc291cF9odHRwX2lucHV0X3N0cmVhbV9wcmVwYXJlX2Zvcl9pbyAo
R0lucHV0U3RyZWFtICpzdHJlYW0sCisJCQkJICAgICAgIEdDYW5jZWxsYWJsZSAqY2FuY2VsbGFi
bGUsCisJCQkJICAgICAgIGd1Y2hhciAgICAgICAqYnVmZmVyLAorCQkJCSAgICAgICBnc2l6ZSAg
ICAgICAgIGNvdW50KQoreworCVNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gU09V
UF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKwlpbnQgY2FuY2VsX2Zk
OworCisJcHJpdi0+Y2FuY2VsbGFibGUgPSBjYW5jZWxsYWJsZTsKKwljYW5jZWxfZmQgPSBnX2Nh
bmNlbGxhYmxlX2dldF9mZCAoY2FuY2VsbGFibGUpOworCWlmIChjYW5jZWxfZmQgIT0gLTEpIHsK
KwkJR0lPQ2hhbm5lbCAqY2hhbiA9IGdfaW9fY2hhbm5lbF91bml4X25ldyAoY2FuY2VsX2ZkKTsK
KwkJcHJpdi0+Y2FuY2VsX3dhdGNoID0gc291cF9hZGRfaW9fd2F0Y2ggKHByaXYtPmFzeW5jX2Nv
bnRleHQsIGNoYW4sCisJCQkJCQkJR19JT19JTiB8IEdfSU9fRVJSIHwgR19JT19IVVAsCisJCQkJ
CQkJc291cF9odHRwX2lucHV0X3N0cmVhbV9jYW5jZWxsZWQsCisJCQkJCQkJc3RyZWFtKTsKKwkJ
Z19pb19jaGFubmVsX3VucmVmIChjaGFuKTsKKwl9CisKKwlwcml2LT5jYWxsZXJfYnVmZmVyID0g
YnVmZmVyOworCXByaXYtPmNhbGxlcl9idWZzaXplID0gY291bnQ7CisJcHJpdi0+Y2FsbGVyX25y
ZWFkID0gMDsKKworCWlmIChwcml2LT5nb3RfaGVhZGVycykKKwkJc291cF9zZXNzaW9uX3VucGF1
c2VfbWVzc2FnZSAocHJpdi0+c2Vzc2lvbiwgcHJpdi0+bXNnKTsKK30KKworc3RhdGljIHZvaWQK
K3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZG9uZV9pbyAoR0lucHV0U3RyZWFtICpzdHJlYW0pCit7
CisJU291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBTT1VQX0hUVFBfSU5QVVRfU1RS
RUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOworCisJaWYgKHByaXYtPmNhbmNlbF93YXRjaCkgewor
CQlnX3NvdXJjZV9kZXN0cm95IChwcml2LT5jYW5jZWxfd2F0Y2gpOworCQlwcml2LT5jYW5jZWxf
d2F0Y2ggPSBOVUxMOworCQlnX2NhbmNlbGxhYmxlX3JlbGVhc2VfZmQgKHByaXYtPmNhbmNlbGxh
YmxlKTsKKwl9CisJcHJpdi0+Y2FuY2VsbGFibGUgPSBOVUxMOworCisJcHJpdi0+Y2FsbGVyX2J1
ZmZlciA9IE5VTEw7CisJcHJpdi0+Y2FsbGVyX2J1ZnNpemUgPSAwOworfQorCitzdGF0aWMgZ2Jv
b2xlYW4KK3NldF9lcnJvcl9pZl9odHRwX2ZhaWxlZCAoU291cE1lc3NhZ2UgKm1zZywgR0Vycm9y
ICoqZXJyb3IpCit7CisJaWYgKCFTT1VQX1NUQVRVU19JU19TVUNDRVNTRlVMIChtc2ctPnN0YXR1
c19jb2RlKSkgeworCQlnX3NldF9lcnJvcl9saXRlcmFsIChlcnJvciwgU09VUF9IVFRQX0VSUk9S
LAorCQkJCSAgICAgbXNnLT5zdGF0dXNfY29kZSwgbXNnLT5yZWFzb25fcGhyYXNlKTsKKwkJcmV0
dXJuIFRSVUU7CisJfQorCXJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGdzaXplCityZWFkX2Zy
b21fbGVmdG92ZXIgKFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2LAorCQkgICAgZ3Bv
aW50ZXIgYnVmZmVyLCBnc2l6ZSBidWZzaXplKQoreworCWdzaXplIG5yZWFkOworCisJaWYgKHBy
aXYtPmxlZnRvdmVyX2J1ZnNpemUgLSBwcml2LT5sZWZ0b3Zlcl9vZmZzZXQgPD0gYnVmc2l6ZSkg
eworCQlucmVhZCA9IHByaXYtPmxlZnRvdmVyX2J1ZnNpemUgLSBwcml2LT5sZWZ0b3Zlcl9vZmZz
ZXQ7CisJCW1lbWNweSAoYnVmZmVyLCBwcml2LT5sZWZ0b3Zlcl9idWZmZXIgKyBwcml2LT5sZWZ0
b3Zlcl9vZmZzZXQsIG5yZWFkKTsKKworCQlnX2ZyZWUgKHByaXYtPmxlZnRvdmVyX2J1ZmZlcik7
CisJCXByaXYtPmxlZnRvdmVyX2J1ZmZlciA9IE5VTEw7CisJCXByaXYtPmxlZnRvdmVyX2J1ZnNp
emUgPSBwcml2LT5sZWZ0b3Zlcl9vZmZzZXQgPSAwOworCX0gZWxzZSB7CisJCW5yZWFkID0gYnVm
c2l6ZTsKKwkJbWVtY3B5IChidWZmZXIsIHByaXYtPmxlZnRvdmVyX2J1ZmZlciArIHByaXYtPmxl
ZnRvdmVyX29mZnNldCwgbnJlYWQpOworCQlwcml2LT5sZWZ0b3Zlcl9vZmZzZXQgKz0gbnJlYWQ7
CisJfQorCisJcHJpdi0+b2Zmc2V0ICs9IG5yZWFkOworCXJldHVybiBucmVhZDsKK30KKworLyog
VGhpcyBkb2VzIHRoZSB3b3JrIG9mIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZCgpLCBhc3N1
bWluZyB0aGF0IHRoZQorICogR0lucHV0U3RyZWFtIHBlbmRpbmcgZmxhZyBoYXMgYWxyZWFkeSBi
ZWVuIHNldC4gSXQgaXMgYWxzbyB1c2VkIGJ5CisgKiBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3Nl
bmRfYXN5bmMoKSBpbiBzb21lIGNpcmN1bXN0YW5jZXMuCisgKi8KK3N0YXRpYyBnYm9vbGVhbgor
c291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2ludGVybmFsIChHSW5wdXRTdHJlYW0gICpzdHJl
YW0sCisJCQkJICAgICAgR0NhbmNlbGxhYmxlICAqY2FuY2VsbGFibGUsCisJCQkJICAgICAgR0Vy
cm9yICAgICAgICoqZXJyb3IpCit7CisJU291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYg
PSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOworCisJc291cF9o
dHRwX2lucHV0X3N0cmVhbV9wcmVwYXJlX2Zvcl9pbyAoc3RyZWFtLCBjYW5jZWxsYWJsZSwgTlVM
TCwgMCk7CisJd2hpbGUgKCFwcml2LT5maW5pc2hlZCAmJiAhcHJpdi0+Z290X2hlYWRlcnMgJiYK
KwkgICAgICAgIWdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkIChjYW5jZWxsYWJsZSkpCisJCWdf
bWFpbl9jb250ZXh0X2l0ZXJhdGlvbiAocHJpdi0+YXN5bmNfY29udGV4dCwgVFJVRSk7CisJc291
cF9odHRwX2lucHV0X3N0cmVhbV9kb25lX2lvIChzdHJlYW0pOworCisJaWYgKGdfY2FuY2VsbGFi
bGVfc2V0X2Vycm9yX2lmX2NhbmNlbGxlZCAoY2FuY2VsbGFibGUsIGVycm9yKSkKKwkJcmV0dXJu
IEZBTFNFOworCWVsc2UgaWYgKHNldF9lcnJvcl9pZl9odHRwX2ZhaWxlZCAocHJpdi0+bXNnLCBl
cnJvcikpCisJCXJldHVybiBGQUxTRTsKKwlyZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQK
K3NlbmRfc3luY19maW5pc2hlZCAoR0lucHV0U3RyZWFtICpzdHJlYW0pCit7CisJU291cEhUVFBJ
bnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklW
QVRFIChzdHJlYW0pOworCUdFcnJvciAqZXJyb3IgPSBOVUxMOworCisJaWYgKCFnX2NhbmNlbGxh
YmxlX3NldF9lcnJvcl9pZl9jYW5jZWxsZWQgKHByaXYtPmNhbmNlbGxhYmxlLCAmZXJyb3IpKQor
CQlzZXRfZXJyb3JfaWZfaHR0cF9mYWlsZWQgKHByaXYtPm1zZywgJmVycm9yKTsKKworCXByaXYt
PmdvdF9oZWFkZXJzX2NiID0gTlVMTDsKKwlwcml2LT5maW5pc2hlZF9jYiA9IE5VTEw7CisKKwkv
KiBXYWtlIHVwIHRoZSBtYWluIGNvbnRleHQgaXRlcmF0aW9uICovCisJZ19zb3VyY2VfYXR0YWNo
IChnX2lkbGVfc291cmNlX25ldyAoKSwgTlVMTCk7Cit9CisKKy8qKgorICogc291cF9odHRwX2lu
cHV0X3N0cmVhbV9zZW5kOgorICogQGh0dHBzdHJlYW06IGEgI1NvdXBIVFRQSW5wdXRTdHJlYW0K
KyAqIEBjYW5jZWxsYWJsZTogb3B0aW9uYWwgI0dDYW5jZWxsYWJsZSBvYmplY3QsICVOVUxMIHRv
IGlnbm9yZS4KKyAqIEBlcnJvcjogbG9jYXRpb24gdG8gc3RvcmUgdGhlIGVycm9yIG9jY3VyaW5n
LCBvciAlTlVMTCB0byBpZ25vcmUKKyAqCisgKiBTeW5jaHJvbm91c2x5IHNlbmRzIHRoZSBIVFRQ
IHJlcXVlc3QgYXNzb2NpYXRlZCB3aXRoIEBzdHJlYW0sIGFuZAorICogcmVhZHMgdGhlIHJlc3Bv
bnNlIGhlYWRlcnMuIENhbGwgdGhpcyBhZnRlciBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX25ldygp
CisgKiBhbmQgYmVmb3JlIHRoZSBmaXJzdCBnX2lucHV0X3N0cmVhbV9yZWFkKCkgaWYgeW91IHdh
bnQgdG8gY2hlY2sgdGhlCisgKiBIVFRQIHN0YXR1cyBjb2RlIGJlZm9yZSB5b3Ugc3RhcnQgcmVh
ZGluZy4KKyAqCisgKiBSZXR1cm4gdmFsdWU6ICVUUlVFIGlmIG1zZyBoYXMgYSBzdWNjZXNzZnVs
ICgyeHgpIHN0YXR1cywgJUZBTFNFIGlmCisgKiBub3QuCisgKiovCitnYm9vbGVhbgorc291cF9o
dHRwX2lucHV0X3N0cmVhbV9zZW5kIChTb3VwSFRUUElucHV0U3RyZWFtICAqaHR0cHN0cmVhbSwK
KwkJCSAgICAgR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJICAgICBHRXJy
b3IgICAgICAgICAgICAgICoqZXJyb3IpCit7CisJU291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUg
KnByaXYgPSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChodHRwc3RyZWFtKTsK
KwlHSW5wdXRTdHJlYW0gKmlzdHJlYW0gPSAoR0lucHV0U3RyZWFtICopaHR0cHN0cmVhbTsKKwln
Ym9vbGVhbiByZXN1bHQ7CisKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoU09VUF9JU19IVFRQX0lO
UFVUX1NUUkVBTSAoaHR0cHN0cmVhbSksIEZBTFNFKTsKKworCWlmICghZ19pbnB1dF9zdHJlYW1f
c2V0X3BlbmRpbmcgKGlzdHJlYW0sIGVycm9yKSkKKwkJcmV0dXJuIEZBTFNFOworCisJcHJpdi0+
Z290X2hlYWRlcnNfY2IgPSBzZW5kX3N5bmNfZmluaXNoZWQ7CisJcHJpdi0+ZmluaXNoZWRfY2Ig
PSBzZW5kX3N5bmNfZmluaXNoZWQ7CisKKwlyZXN1bHQgPSBzb3VwX2h0dHBfaW5wdXRfc3RyZWFt
X3NlbmRfaW50ZXJuYWwgKGlzdHJlYW0sIGNhbmNlbGxhYmxlLCBlcnJvcik7CisJZ19pbnB1dF9z
dHJlYW1fY2xlYXJfcGVuZGluZyAoaXN0cmVhbSk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitz
dGF0aWMgZ3NzaXplCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWQgKEdJbnB1dFN0cmVhbSAq
c3RyZWFtLAorCQkJICAgICB2b2lkICAgICAgICAgKmJ1ZmZlciwKKwkJCSAgICAgZ3NpemUgICAg
ICAgICBjb3VudCwKKwkJCSAgICAgR0NhbmNlbGxhYmxlICpjYW5jZWxsYWJsZSwKKwkJCSAgICAg
R0Vycm9yICAgICAgKiplcnJvcikKK3sKKwlTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJp
diA9IFNPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7CisKKwlpZiAo
cHJpdi0+ZmluaXNoZWQpCisJCXJldHVybiAwOworCisJLyogSWYgdGhlcmUgaXMgZGF0YSBsZWZ0
b3ZlciBmcm9tIGEgcHJldmlvdXMgcmVhZCwgcmV0dXJuIGl0LiAqLworCWlmIChwcml2LT5sZWZ0
b3Zlcl9idWZzaXplKQorCQlyZXR1cm4gcmVhZF9mcm9tX2xlZnRvdmVyIChwcml2LCBidWZmZXIs
IGNvdW50KTsKKworCS8qIE5vIGxlZnRvdmVyIGRhdGEsIGFjY2VwdCBvbmUgY2h1bmsgZnJvbSB0
aGUgbmV0d29yayAqLworCXNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcHJlcGFyZV9mb3JfaW8gKHN0
cmVhbSwgY2FuY2VsbGFibGUsIGJ1ZmZlciwgY291bnQpOworCXdoaWxlICghcHJpdi0+ZmluaXNo
ZWQgJiYgcHJpdi0+Y2FsbGVyX25yZWFkID09IDAgJiYKKwkgICAgICAgIWdfY2FuY2VsbGFibGVf
aXNfY2FuY2VsbGVkIChjYW5jZWxsYWJsZSkpCisJCWdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbiAo
cHJpdi0+YXN5bmNfY29udGV4dCwgVFJVRSk7CisJc291cF9odHRwX2lucHV0X3N0cmVhbV9kb25l
X2lvIChzdHJlYW0pOworCisJaWYgKHByaXYtPmNhbGxlcl9ucmVhZCA+IDApCisJCXJldHVybiBw
cml2LT5jYWxsZXJfbnJlYWQ7CisKKwlpZiAoZ19jYW5jZWxsYWJsZV9zZXRfZXJyb3JfaWZfY2Fu
Y2VsbGVkIChjYW5jZWxsYWJsZSwgZXJyb3IpKQorCQlyZXR1cm4gLTE7CisJZWxzZSBpZiAoc2V0
X2Vycm9yX2lmX2h0dHBfZmFpbGVkIChwcml2LT5tc2csIGVycm9yKSkKKwkJcmV0dXJuIC0xOwor
CWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorc291cF9odHRwX2lucHV0
X3N0cmVhbV9jbG9zZSAoR0lucHV0U3RyZWFtICpzdHJlYW0sCisJCQkgICAgICBHQ2FuY2VsbGFi
bGUgKmNhbmNlbGxhYmxlLAorCQkJICAgICAgR0Vycm9yICAgICAgKiplcnJvcikKK3sKKwlTb3Vw
SFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFNPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VU
X1BSSVZBVEUgKHN0cmVhbSk7CisKKwlpZiAoIXByaXYtPmZpbmlzaGVkKQorCQlzb3VwX3Nlc3Np
b25fY2FuY2VsX21lc3NhZ2UgKHByaXYtPnNlc3Npb24sIHByaXYtPm1zZywgU09VUF9TVEFUVVNf
Q0FOQ0VMTEVEKTsKKworCXJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZAord3JhcHBlcl9j
YWxsYmFjayAoR09iamVjdCAqc291cmNlX29iamVjdCwgR0FzeW5jUmVzdWx0ICpyZXMsCisJCSAg
Z3BvaW50ZXIgdXNlcl9kYXRhKQoreworCUdJbnB1dFN0cmVhbSAqc3RyZWFtID0gR19JTlBVVF9T
VFJFQU0gKHNvdXJjZV9vYmplY3QpOworCVNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2
ID0gU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKworCWdfaW5w
dXRfc3RyZWFtX2NsZWFyX3BlbmRpbmcgKHN0cmVhbSk7CisJaWYgKHByaXYtPm91dHN0YW5kaW5n
X2NhbGxiYWNrKQorCQkoKnByaXYtPm91dHN0YW5kaW5nX2NhbGxiYWNrKSAoc291cmNlX29iamVj
dCwgcmVzLCB1c2VyX2RhdGEpOworCXByaXYtPm91dHN0YW5kaW5nX2NhbGxiYWNrID0gTlVMTDsK
KwlnX29iamVjdF91bnJlZiAoc3RyZWFtKTsKK30KKworc3RhdGljIHZvaWQKK3NlbmRfYXN5bmNf
dGhyZWFkIChHU2ltcGxlQXN5bmNSZXN1bHQgKnJlcywKKwkJICAgR09iamVjdCAqb2JqZWN0LAor
CQkgICBHQ2FuY2VsbGFibGUgKmNhbmNlbGxhYmxlKQoreworCUdFcnJvciAqZXJyb3IgPSBOVUxM
OworCWdib29sZWFuIHN1Y2Nlc3M7CisKKwlzdWNjZXNzID0gc291cF9odHRwX2lucHV0X3N0cmVh
bV9zZW5kX2ludGVybmFsIChHX0lOUFVUX1NUUkVBTSAob2JqZWN0KSwKKwkJCQkJCQljYW5jZWxs
YWJsZSwgJmVycm9yKTsKKwlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19nYm9vbGVh
biAocmVzLCBzdWNjZXNzKTsKKwlpZiAoZXJyb3IpIHsKKwkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0
X3NldF9mcm9tX2Vycm9yIChyZXMsIGVycm9yKTsKKwkJZ19lcnJvcl9mcmVlIChlcnJvcik7CisJ
fQorfQorCitzdGF0aWMgdm9pZAorc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jX2lu
X3RocmVhZCAoR0lucHV0U3RyZWFtICAgICAgICAqc3RyZWFtLAorCQkJCQkgICAgIGludCAgICAg
ICAgICAgICAgICAgIGlvX3ByaW9yaXR5LAorCQkJCQkgICAgIEdDYW5jZWxsYWJsZSAgICAgICAg
KmNhbmNlbGxhYmxlLAorCQkJCQkgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgIGNhbGxiYWNrLAor
CQkJCQkgICAgIGdwb2ludGVyICAgICAgICAgICAgIHVzZXJfZGF0YSkKK3sKKwlHU2ltcGxlQXN5
bmNSZXN1bHQgKnJlczsKKworCXJlcyA9IGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcgKEdfT0JK
RUNUIChzdHJlYW0pLCBjYWxsYmFjaywgdXNlcl9kYXRhLAorCQkJCQkgc291cF9odHRwX2lucHV0
X3N0cmVhbV9zZW5kX2FzeW5jX2luX3RocmVhZCk7CisJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3J1
bl9pbl90aHJlYWQgKHJlcywgc2VuZF9hc3luY190aHJlYWQsCisJCQkJCSAgICAgaW9fcHJpb3Jp
dHksIGNhbmNlbGxhYmxlKTsKKwlnX29iamVjdF91bnJlZiAocmVzKTsKK30KKworc3RhdGljIHZv
aWQKK3NlbmRfYXN5bmNfZmluaXNoZWQgKEdJbnB1dFN0cmVhbSAqc3RyZWFtKQoreworCVNvdXBI
VFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRf
UFJJVkFURSAoc3RyZWFtKTsKKwlHU2ltcGxlQXN5bmNSZXN1bHQgKnJlc3VsdDsKKwlHRXJyb3Ig
KmVycm9yID0gTlVMTDsKKworCWlmICghZ19jYW5jZWxsYWJsZV9zZXRfZXJyb3JfaWZfY2FuY2Vs
bGVkIChwcml2LT5jYW5jZWxsYWJsZSwgJmVycm9yKSkKKwkJc2V0X2Vycm9yX2lmX2h0dHBfZmFp
bGVkIChwcml2LT5tc2csICZlcnJvcik7CisKKwlwcml2LT5nb3RfaGVhZGVyc19jYiA9IE5VTEw7
CisJcHJpdi0+ZmluaXNoZWRfY2IgPSBOVUxMOworCXNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZG9u
ZV9pbyAoc3RyZWFtKTsKKworCXJlc3VsdCA9IHByaXYtPnJlc3VsdDsKKwlwcml2LT5yZXN1bHQg
PSBOVUxMOworCisJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ2Jvb2xlYW4gKHJl
c3VsdCwgZXJyb3IgPT0gTlVMTCk7CisJaWYgKGVycm9yKSB7CisJCWdfc2ltcGxlX2FzeW5jX3Jl
c3VsdF9zZXRfZnJvbV9lcnJvciAocmVzdWx0LCBlcnJvcik7CisJCWdfZXJyb3JfZnJlZSAoZXJy
b3IpOworCX0KKwlnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGUgKHJlc3VsdCk7Cit9CisK
K3N0YXRpYyB2b2lkCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmNfaW50ZXJuYWwg
KEdJbnB1dFN0cmVhbSAgICAgICAgKnN0cmVhbSwKKwkJCQkJICAgIGludCAgICAgICAgICAgICAg
ICAgIGlvX3ByaW9yaXR5LAorCQkJCQkgICAgR0NhbmNlbGxhYmxlICAgICAgICAqY2FuY2VsbGFi
bGUsCisJCQkJCSAgICBHQXN5bmNSZWFkeUNhbGxiYWNrICBjYWxsYmFjaywKKwkJCQkJICAgIGdw
b2ludGVyICAgICAgICAgICAgIHVzZXJfZGF0YSkKK3sKKwlTb3VwSFRUUElucHV0U3RyZWFtUHJp
dmF0ZSAqcHJpdiA9IFNPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7
CisKKwlnX29iamVjdF9yZWYgKHN0cmVhbSk7CisJcHJpdi0+b3V0c3RhbmRpbmdfY2FsbGJhY2sg
PSBjYWxsYmFjazsKKworCS8qIElmIHRoZSBzZXNzaW9uIHVzZXMgdGhlIGRlZmF1bHQgR01haW5D
b250ZXh0LCB0aGVuIHdlIGNhbiBkbworCSAqIGFzeW5jIEkvTyBkaXJlY3RseS4gQnV0IGlmIGl0
IGhhcyBpdHMgb3duIG1haW4gY29udGV4dCwgaXQncworCSAqIGVhc2llciB0byBqdXN0IHJ1biBp
dCBpbiBhbm90aGVyIHRocmVhZC4KKwkgKi8KKwlpZiAoc291cF9zZXNzaW9uX2dldF9hc3luY19j
b250ZXh0IChwcml2LT5zZXNzaW9uKSkgeworCQlzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRf
YXN5bmNfaW5fdGhyZWFkIChzdHJlYW0sIGlvX3ByaW9yaXR5LCBjYW5jZWxsYWJsZSwKKwkJCQkJ
CQkgICAgIHdyYXBwZXJfY2FsbGJhY2ssIHVzZXJfZGF0YSk7CisJCXJldHVybjsKKwl9CisKKwlw
cml2LT5nb3RfaGVhZGVyc19jYiA9IHNlbmRfYXN5bmNfZmluaXNoZWQ7CisJcHJpdi0+ZmluaXNo
ZWRfY2IgPSBzZW5kX2FzeW5jX2ZpbmlzaGVkOworCisJc291cF9odHRwX2lucHV0X3N0cmVhbV9w
cmVwYXJlX2Zvcl9pbyAoc3RyZWFtLCBjYW5jZWxsYWJsZSwgTlVMTCwgMCk7CisJcHJpdi0+cmVz
dWx0ID0gZ19zaW1wbGVfYXN5bmNfcmVzdWx0X25ldyAoR19PQkpFQ1QgKHN0cmVhbSksCisJCQkJ
CQkgIHdyYXBwZXJfY2FsbGJhY2ssIHVzZXJfZGF0YSwKKwkJCQkJCSAgc291cF9odHRwX2lucHV0
X3N0cmVhbV9zZW5kX2FzeW5jKTsKK30KKworLyoqCisgKiBzb3VwX2h0dHBfaW5wdXRfc3RyZWFt
X3NlbmRfYXN5bmM6CisgKiBAaHR0cHN0cmVhbTogYSAjU291cEhUVFBJbnB1dFN0cmVhbQorICog
QGlvX3ByaW9yaXR5OiB0aGUgaW8gcHJpb3JpdHkgb2YgdGhlIHJlcXVlc3QuCisgKiBAY2FuY2Vs
bGFibGU6IG9wdGlvbmFsICNHQ2FuY2VsbGFibGUgb2JqZWN0LCAlTlVMTCB0byBpZ25vcmUuCisg
KiBAY2FsbGJhY2s6IGNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgcmVxdWVzdCBpcyBzYXRpc2Zp
ZWQKKyAqIEB1c2VyX2RhdGE6IHRoZSBkYXRhIHRvIHBhc3MgdG8gY2FsbGJhY2sgZnVuY3Rpb24K
KyAqCisgKiBBc3luY2hyb25vdXNseSBzZW5kcyB0aGUgSFRUUCByZXF1ZXN0IGFzc29jaWF0ZWQg
d2l0aCBAc3RyZWFtLCBhbmQKKyAqIHJlYWRzIHRoZSByZXNwb25zZSBoZWFkZXJzLiBDYWxsIHRo
aXMgYWZ0ZXIgc291cF9odHRwX2lucHV0X3N0cmVhbV9uZXcoKQorICogYW5kIGJlZm9yZSB0aGUg
Zmlyc3QgZ19pbnB1dF9zdHJlYW1fcmVhZF9hc3luYygpIGlmIHlvdSB3YW50IHRvCisgKiBjaGVj
ayB0aGUgSFRUUCBzdGF0dXMgY29kZSBiZWZvcmUgeW91IHN0YXJ0IHJlYWRpbmcuCisgKiovCit2
b2lkCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmMgKFNvdXBIVFRQSW5wdXRTdHJl
YW0gKmh0dHBzdHJlYW0sCisJCQkJICAgaW50ICAgICAgICAgICAgICAgICAgaW9fcHJpb3JpdHks
CisJCQkJICAgR0NhbmNlbGxhYmxlICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJICAgR0FzeW5j
UmVhZHlDYWxsYmFjayAgY2FsbGJhY2ssCisJCQkJICAgZ3BvaW50ZXIgICAgICAgICAgICAgdXNl
cl9kYXRhKQoreworCUdJbnB1dFN0cmVhbSAqaXN0cmVhbSA9IChHSW5wdXRTdHJlYW0gKilodHRw
c3RyZWFtOworCUdFcnJvciAqZXJyb3IgPSBOVUxMOworCisJZ19yZXR1cm5faWZfZmFpbCAoU09V
UF9JU19IVFRQX0lOUFVUX1NUUkVBTSAoaHR0cHN0cmVhbSkpOworCisJaWYgKCFnX2lucHV0X3N0
cmVhbV9zZXRfcGVuZGluZyAoaXN0cmVhbSwgJmVycm9yKSkgeworCQlnX3NpbXBsZV9hc3luY19y
ZXBvcnRfZ2Vycm9yX2luX2lkbGUgKEdfT0JKRUNUIChodHRwc3RyZWFtKSwKKwkJCQkJCSAgICAg
IGNhbGxiYWNrLAorCQkJCQkJICAgICAgdXNlcl9kYXRhLAorCQkJCQkJICAgICAgZXJyb3IpOwor
CQlnX2Vycm9yX2ZyZWUgKGVycm9yKTsKKwkJcmV0dXJuOworCX0KKwlzb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX3NlbmRfYXN5bmNfaW50ZXJuYWwgKGlzdHJlYW0sIGlvX3ByaW9yaXR5LCBjYW5jZWxs
YWJsZSwKKwkJCQkJCSAgICBjYWxsYmFjaywgdXNlcl9kYXRhKTsKK30KKworLyoqCisgKiBzb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfZmluaXNoOgorICogQGh0dHBzdHJlYW06IGEgI1NvdXBI
VFRQSW5wdXRTdHJlYW0KKyAqIEByZXN1bHQ6IGEgI0dBc3luY1Jlc3VsdC4KKyAqIEBlcnJvcjog
YSAjR0Vycm9yIGxvY2F0aW9uIHRvIHN0b3JlIHRoZSBlcnJvciBvY2N1cmluZywgb3IgJU5VTEwg
dG8KKyAqIGlnbm9yZS4KKyAqCisgKiBGaW5pc2hlcyBhIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1f
c2VuZF9hc3luYygpIG9wZXJhdGlvbi4KKyAqCisgKiBSZXR1cm4gdmFsdWU6ICVUUlVFIGlmIHRo
ZSBtZXNzYWdlIHdhcyBzZW50IHN1Y2Nlc3NmdWxseSBhbmQKKyAqIHJlY2VpdmVkIGEgc3VjY2Vz
c2Z1bCBzdGF0dXMgY29kZSwgJUZBTFNFIGlmIG5vdC4KKyAqKi8KK2dib29sZWFuCitzb3VwX2h0
dHBfaW5wdXRfc3RyZWFtX3NlbmRfZmluaXNoIChTb3VwSFRUUElucHV0U3RyZWFtICAqaHR0cHN0
cmVhbSwKKwkJCQkgICAgR0FzeW5jUmVzdWx0ICAgICAgICAgKnJlc3VsdCwKKwkJCQkgICAgR0Vy
cm9yICAgICAgICAgICAgICAqKmVycm9yKQoreworCUdTaW1wbGVBc3luY1Jlc3VsdCAqc2ltcGxl
OworCisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfSVNfU0lNUExFX0FTWU5DX1JFU1VMVCAocmVz
dWx0KSwgRkFMU0UpOworCXNpbXBsZSA9IEdfU0lNUExFX0FTWU5DX1JFU1VMVCAocmVzdWx0KTsK
KworCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X3NvdXJj
ZV90YWcgKHNpbXBsZSkgPT0gc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jLCBGQUxT
RSk7CisKKwlpZiAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3Byb3BhZ2F0ZV9lcnJvciAoc2ltcGxl
LCBlcnJvcikpCisJCXJldHVybiBGQUxTRTsKKworCXJldHVybiBnX3NpbXBsZV9hc3luY19yZXN1
bHRfZ2V0X29wX3Jlc19nYm9vbGVhbiAoc2ltcGxlKTsKK30KKworc3RhdGljIHZvaWQKK3JlYWRf
YXN5bmNfZG9uZSAoR0lucHV0U3RyZWFtICpzdHJlYW0pCit7CisJU291cEhUVFBJbnB1dFN0cmVh
bVByaXZhdGUgKnByaXYgPSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJl
YW0pOworCUdTaW1wbGVBc3luY1Jlc3VsdCAqcmVzdWx0OworCUdFcnJvciAqZXJyb3IgPSBOVUxM
OworCisJcmVzdWx0ID0gcHJpdi0+cmVzdWx0OworCXByaXYtPnJlc3VsdCA9IE5VTEw7CisKKwlp
ZiAoZ19jYW5jZWxsYWJsZV9zZXRfZXJyb3JfaWZfY2FuY2VsbGVkIChwcml2LT5jYW5jZWxsYWJs
ZSwgJmVycm9yKSB8fAorCSAgICBzZXRfZXJyb3JfaWZfaHR0cF9mYWlsZWQgKHByaXYtPm1zZywg
JmVycm9yKSkgeworCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X2Zyb21fZXJyb3IgKHJlc3Vs
dCwgZXJyb3IpOworCQlnX2Vycm9yX2ZyZWUgKGVycm9yKTsKKwl9IGVsc2UKKwkJZ19zaW1wbGVf
YXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ3NzaXplIChyZXN1bHQsIHByaXYtPmNhbGxlcl9ucmVh
ZCk7CisKKwlwcml2LT5nb3RfY2h1bmtfY2IgPSBOVUxMOworCXByaXYtPmZpbmlzaGVkX2NiID0g
TlVMTDsKKwlwcml2LT5jYW5jZWxsZWRfY2IgPSBOVUxMOworCXNvdXBfaHR0cF9pbnB1dF9zdHJl
YW1fZG9uZV9pbyAoc3RyZWFtKTsKKworCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZSAo
cmVzdWx0KTsKKwlnX29iamVjdF91bnJlZiAocmVzdWx0KTsKK30KKworc3RhdGljIHZvaWQKK3Nv
dXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyAoR0lucHV0U3RyZWFtICAgICAgICAqc3Ry
ZWFtLAorCQkJCSAgIHZvaWQgICAgICAgICAgICAgICAgKmJ1ZmZlciwKKwkJCQkgICBnc2l6ZSAg
ICAgICAgICAgICAgICBjb3VudCwKKwkJCQkgICBpbnQgICAgICAgICAgICAgICAgICBpb19wcmlv
cml0eSwKKwkJCQkgICBHQ2FuY2VsbGFibGUgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkgICBH
QXN5bmNSZWFkeUNhbGxiYWNrICBjYWxsYmFjaywKKwkJCQkgICBncG9pbnRlciAgICAgICAgICAg
ICB1c2VyX2RhdGEpCit7CisJU291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBTT1VQ
X0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOworCUdTaW1wbGVBc3luY1Jl
c3VsdCAqcmVzdWx0OworCisJLyogSWYgdGhlIHNlc3Npb24gdXNlcyB0aGUgZGVmYXVsdCBHTWFp
bkNvbnRleHQsIHRoZW4gd2UgY2FuIGRvCisJICogYXN5bmMgSS9PIGRpcmVjdGx5LiBCdXQgaWYg
aXQgaGFzIGl0cyBvd24gbWFpbiBjb250ZXh0LCB3ZSBmYWxsCisJICogYmFjayB0byB0aGUgYXN5
bmMtdmlhLXN5bmMtaW4tYW5vdGhlci10aHJlYWQgaW1wbGVtZW50YXRpb24uCisJICovCisJaWYg
KHNvdXBfc2Vzc2lvbl9nZXRfYXN5bmNfY29udGV4dCAocHJpdi0+c2Vzc2lvbikpIHsKKwkJR19J
TlBVVF9TVFJFQU1fQ0xBU1MgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcGFyZW50X2NsYXNzKS0+
CisJCQlyZWFkX2FzeW5jIChzdHJlYW0sIGJ1ZmZlciwgY291bnQsIGlvX3ByaW9yaXR5LAorCQkJ
CSAgICBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJfZGF0YSk7CisJCXJldHVybjsKKwl9CisK
KwlyZXN1bHQgPSBnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3IChHX09CSkVDVCAoc3RyZWFtKSwK
KwkJCQkJICAgIGNhbGxiYWNrLCB1c2VyX2RhdGEsCisJCQkJCSAgICBzb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX3JlYWRfYXN5bmMpOworCisJaWYgKHByaXYtPmZpbmlzaGVkKSB7CisJCWdfc2ltcGxl
X2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dzc2l6ZSAocmVzdWx0LCAwKTsKKwkJZ19zaW1wbGVf
YXN5bmNfcmVzdWx0X2NvbXBsZXRlX2luX2lkbGUgKHJlc3VsdCk7CisJCWdfb2JqZWN0X3VucmVm
IChyZXN1bHQpOworCQlyZXR1cm47CisJfQorCisJaWYgKHByaXYtPmxlZnRvdmVyX2J1ZnNpemUp
IHsKKwkJZ3NpemUgbnJlYWQgPSByZWFkX2Zyb21fbGVmdG92ZXIgKHByaXYsIGJ1ZmZlciwgY291
bnQpOworCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19nc3NpemUgKHJlc3VsdCwg
bnJlYWQpOworCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGVfaW5faWRsZSAocmVzdWx0
KTsKKwkJZ19vYmplY3RfdW5yZWYgKHJlc3VsdCk7CisJCXJldHVybjsKKwl9CisKKwlwcml2LT5y
ZXN1bHQgPSByZXN1bHQ7CisKKwlwcml2LT5nb3RfY2h1bmtfY2IgPSByZWFkX2FzeW5jX2RvbmU7
CisJcHJpdi0+ZmluaXNoZWRfY2IgPSByZWFkX2FzeW5jX2RvbmU7CisJcHJpdi0+Y2FuY2VsbGVk
X2NiID0gcmVhZF9hc3luY19kb25lOworCXNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcHJlcGFyZV9m
b3JfaW8gKHN0cmVhbSwgY2FuY2VsbGFibGUsIGJ1ZmZlciwgY291bnQpOworfQorCitzdGF0aWMg
Z3NzaXplCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWRfZmluaXNoIChHSW5wdXRTdHJlYW0g
ICpzdHJlYW0sCisJCQkJICAgIEdBc3luY1Jlc3VsdCAgKnJlc3VsdCwKKwkJCQkgICAgR0Vycm9y
ICAgICAgICoqZXJyb3IpCit7CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpzaW1wbGU7CisKKwlnX3Jl
dHVybl92YWxfaWZfZmFpbCAoR19JU19TSU1QTEVfQVNZTkNfUkVTVUxUIChyZXN1bHQpLCAtMSk7
CisJc2ltcGxlID0gR19TSU1QTEVfQVNZTkNfUkVTVUxUIChyZXN1bHQpOworCWdfcmV0dXJuX3Zh
bF9pZl9mYWlsIChnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X3NvdXJjZV90YWcgKHNpbXBsZSkg
PT0gc291cF9odHRwX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jLCAtMSk7CisKKwlyZXR1cm4gZ19z
aW1wbGVfYXN5bmNfcmVzdWx0X2dldF9vcF9yZXNfZ3NzaXplIChzaW1wbGUpOworfQorCitzdGF0
aWMgdm9pZAorc291cF9odHRwX2lucHV0X3N0cmVhbV9jbG9zZV9hc3luYyAoR0lucHV0U3RyZWFt
ICAgICAgICpzdHJlYW0sCisJCQkJICAgIGludCAgICAgICAgICAgICAgICAgaW9fcHJpb3JpdHks
CisJCQkJICAgIEdDYW5jZWxsYWJsZSAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJICAgIEdBc3lu
Y1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCisJCQkJICAgIGdwb2ludGVyICAgICAgICAgICAgdXNl
cl9kYXRhKQoreworCUdTaW1wbGVBc3luY1Jlc3VsdCAqcmVzdWx0OworCWdib29sZWFuIHN1Y2Nl
c3M7CisJR0Vycm9yICplcnJvciA9IE5VTEw7CisKKwlyZXN1bHQgPSBnX3NpbXBsZV9hc3luY19y
ZXN1bHRfbmV3IChHX09CSkVDVCAoc3RyZWFtKSwKKwkJCQkJICAgIGNhbGxiYWNrLCB1c2VyX2Rh
dGEsCisJCQkJCSAgICBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlX2FzeW5jKTsKKwlzdWNj
ZXNzID0gc291cF9odHRwX2lucHV0X3N0cmVhbV9jbG9zZSAoc3RyZWFtLCBjYW5jZWxsYWJsZSwg
JmVycm9yKTsKKwlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19nYm9vbGVhbiAocmVz
dWx0LCBzdWNjZXNzKTsKKwlpZiAoZXJyb3IpIHsKKwkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3Nl
dF9mcm9tX2Vycm9yIChyZXN1bHQsIGVycm9yKTsKKwkJZ19lcnJvcl9mcmVlIChlcnJvcik7CisJ
fQorCisJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlX2luX2lkbGUgKHJlc3VsdCk7CisJ
Z19vYmplY3RfdW5yZWYgKHJlc3VsdCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorc291cF9odHRw
X2lucHV0X3N0cmVhbV9jbG9zZV9maW5pc2ggKEdJbnB1dFN0cmVhbSAgKnN0cmVhbSwKKwkJCQkg
ICAgIEdBc3luY1Jlc3VsdCAgKnJlc3VsdCwKKwkJCQkgICAgIEdFcnJvciAgICAgICAqKmVycm9y
KQoreworCS8qIEZhaWx1cmVzIGhhbmRsZWQgaW4gZ2VuZXJpYyBjbG9zZV9maW5pc2ggY29kZSAq
LworCXJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ29mZnNldAorc291cF9odHRwX2lucHV0X3N0
cmVhbV90ZWxsIChHU2Vla2FibGUgKnNlZWthYmxlKQoreworCVNvdXBIVFRQSW5wdXRTdHJlYW1Q
cml2YXRlICpwcml2ID0gU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc2Vla2Fi
bGUpOworCisJcmV0dXJuIHByaXYtPm9mZnNldDsKK30KKworc3RhdGljIGdib29sZWFuCitzb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX2Nhbl9zZWVrIChHU2Vla2FibGUgKnNlZWthYmxlKQoreworCXJl
dHVybiBUUlVFOworfQorCitleHRlcm4gdm9pZCBzb3VwX21lc3NhZ2VfaW9fY2xlYW51cCAoU291
cE1lc3NhZ2UgKm1zZyk7CisKK3N0YXRpYyBnYm9vbGVhbgorc291cF9odHRwX2lucHV0X3N0cmVh
bV9zZWVrIChHU2Vla2FibGUgICAgICpzZWVrYWJsZSwKKwkJCSAgICAgZ29mZnNldCAgICAgICAg
b2Zmc2V0LAorCQkJICAgICBHU2Vla1R5cGUgICAgICB0eXBlLAorCQkJICAgICBHQ2FuY2VsbGFi
bGUgICpjYW5jZWxsYWJsZSwKKwkJCSAgICAgR0Vycm9yICAgICAgICoqZXJyb3IpCit7CisJR0lu
cHV0U3RyZWFtICpzdHJlYW0gPSBHX0lOUFVUX1NUUkVBTSAoc2Vla2FibGUpOworCVNvdXBIVFRQ
SW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJ
VkFURSAoc2Vla2FibGUpOworCWNoYXIgKnJhbmdlOworCisJaWYgKHR5cGUgPT0gR19TRUVLX0VO
RCkgeworCQkvKiBGSVhNRTogd2UgY291bGQgc2VuZCAiYnl0ZXM9LW9mZnNldCIsIGJ1dCB1bmxl
c3Mgd2UKKwkJICoga25vdyB0aGUgQ29udGVudC1MZW5ndGgsIHdlIHdvdWxkbid0IGJlIGFibGUg
dG8KKwkJICogYW5zd2VyIGEgdGVsbCgpIHByb3Blcmx5LiBXZSBjb3VsZCBmaW5kIHRoZQorCQkg
KiBDb250ZW50LUxlbmd0aCBieSBkb2luZyBhIEhFQUQuLi4KKwkJICovCisKKwkJZ19zZXRfZXJy
b3JfbGl0ZXJhbCAoZXJyb3IsIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfTk9UX1NVUFBPUlRFRCwK
KwkJCQkgICAgICJHX1NFRUtfRU5EIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIik7CisJCXJldHVy
biBGQUxTRTsKKwl9CisKKwlpZiAoIWdfaW5wdXRfc3RyZWFtX3NldF9wZW5kaW5nIChzdHJlYW0s
IGVycm9yKSkKKwkJcmV0dXJuIEZBTFNFOworCisJc291cF9zZXNzaW9uX2NhbmNlbF9tZXNzYWdl
IChwcml2LT5zZXNzaW9uLCBwcml2LT5tc2csIFNPVVBfU1RBVFVTX0NBTkNFTExFRCk7CisJc291
cF9tZXNzYWdlX2lvX2NsZWFudXAgKHByaXYtPm1zZyk7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwlj
YXNlIEdfU0VFS19DVVI6CisJCW9mZnNldCArPSBwcml2LT5vZmZzZXQ7CisJCS8qIGZhbGwgdGhy
b3VnaCAqLworCisJY2FzZSBHX1NFRUtfU0VUOgorCQlyYW5nZSA9IGdfc3RyZHVwX3ByaW50ZiAo
ImJ5dGVzPSUiR19HVUlOVDY0X0ZPUk1BVCItIiwgKGd1aW50NjQpb2Zmc2V0KTsKKwkJcHJpdi0+
b2Zmc2V0ID0gb2Zmc2V0OworCQlicmVhazsKKworCWNhc2UgR19TRUVLX0VORDoKKwkJcmFuZ2Ug
PSBOVUxMOyAvKiBrZWVwIGNvbXBpbGVycyBoYXBweSAqLworCQlnX3JldHVybl92YWxfaWZfcmVh
Y2hlZCAoRkFMU0UpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWdfcmV0dXJuX3ZhbF9pZl9y
ZWFjaGVkIChGQUxTRSk7CisJfQorCisJc291cF9tZXNzYWdlX2hlYWRlcnNfcmVtb3ZlIChwcml2
LT5tc2ctPnJlcXVlc3RfaGVhZGVycywgIlJhbmdlIik7CisJc291cF9tZXNzYWdlX2hlYWRlcnNf
YXBwZW5kIChwcml2LT5tc2ctPnJlcXVlc3RfaGVhZGVycywgIlJhbmdlIiwgcmFuZ2UpOworCWdf
ZnJlZSAocmFuZ2UpOworCisJc291cF9odHRwX2lucHV0X3N0cmVhbV9xdWV1ZV9tZXNzYWdlIChT
T1VQX0hUVFBfSU5QVVRfU1RSRUFNIChzdHJlYW0pKTsKKworCWdfaW5wdXRfc3RyZWFtX2NsZWFy
X3BlbmRpbmcgKHN0cmVhbSk7CisJcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgor
c291cF9odHRwX2lucHV0X3N0cmVhbV9jYW5fdHJ1bmNhdGUgKEdTZWVrYWJsZSAqc2Vla2FibGUp
Cit7CisJcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3NvdXBfaHR0cF9pbnB1
dF9zdHJlYW1fdHJ1bmNhdGUgKEdTZWVrYWJsZSAgICAgKnNlZWthYmxlLAorCQkJCSBnb2Zmc2V0
ICAgICAgICBvZmZzZXQsCisJCQkJIEdDYW5jZWxsYWJsZSAgKmNhbmNlbGxhYmxlLAorCQkJCSBH
RXJyb3IgICAgICAgKiplcnJvcikKK3sKKwlnX3NldF9lcnJvcl9saXRlcmFsIChlcnJvciwgR19J
T19FUlJPUiwgR19JT19FUlJPUl9OT1RfU1VQUE9SVEVELAorCQkJICAgICAiVHJ1bmNhdGUgbm90
IGFsbG93ZWQgb24gaW5wdXQgc3RyZWFtIik7CisJcmV0dXJuIEZBTFNFOworfQorCitTb3VwTWVz
c2FnZSAqCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dldF9tZXNzYWdlIChTb3VwSFRUUElucHV0
U3RyZWFtICpodHRwc3RyZWFtKQoreworCVNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2
ID0gU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoaHR0cHN0cmVhbSk7CisJcmV0
dXJuIHByaXYtPm1zZyA/IGdfb2JqZWN0X3JlZiAocHJpdi0+bXNnKSA6IE5VTEw7Cit9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5w
dXQtc3RyZWFtLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0
dHAtaW5wdXQtc3RyZWFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjli
YjNjZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2Nh
Y2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0uaApAQCAtMCwwICsxLDc5IEBACisvKiAKKyAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOSBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgKiBQdWJsaWMg
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAq
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAz
MzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fU09V
UF9IVFRQX0lOUFVUX1NUUkVBTV9IX18KKyNkZWZpbmUgX19TT1VQX0hUVFBfSU5QVVRfU1RSRUFN
X0hfXworCisjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC10eXBl
cy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgU09VUF9UWVBFX0hUVFBfSU5QVVRfU1RS
RUFNICAgICAgICAgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ2V0X3R5cGUgKCkpCisjZGVmaW5l
IFNPVVBfSFRUUF9JTlBVVF9TVFJFQU0obykgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfQ0FTVCAoKG8pLCBTT1VQX1RZUEVfSFRUUF9JTlBVVF9TVFJFQU0sIFNvdXBIVFRQSW5wdXRT
dHJlYW0pKQorI2RlZmluZSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0NMQVNTKGspICAgICAoR19U
WVBFX0NIRUNLX0NMQVNTX0NBU1QoKGspLCBTT1VQX1RZUEVfSFRUUF9JTlBVVF9TVFJFQU0sIFNv
dXBIVFRQSW5wdXRTdHJlYW1DbGFzcykpCisjZGVmaW5lIFNPVVBfSVNfSFRUUF9JTlBVVF9TVFJF
QU0obykgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG8pLCBTT1VQX1RZUEVf
SFRUUF9JTlBVVF9TVFJFQU0pKQorI2RlZmluZSBTT1VQX0lTX0hUVFBfSU5QVVRfU1RSRUFNX0NM
QVNTKGspICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrKSwgU09VUF9UWVBFX0hUVFBfSU5Q
VVRfU1RSRUFNKSkKKyNkZWZpbmUgU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfQ0xBU1Mobykg
KEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvKSwgU09VUF9UWVBFX0hUVFBfSU5QVVRfU1RS
RUFNLCBTb3VwSFRUUElucHV0U3RyZWFtQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBTb3VwSFRU
UElucHV0U3RyZWFtICAgICAgICAgU291cEhUVFBJbnB1dFN0cmVhbTsKK3R5cGVkZWYgc3RydWN0
IFNvdXBIVFRQSW5wdXRTdHJlYW1DbGFzcyAgICBTb3VwSFRUUElucHV0U3RyZWFtQ2xhc3M7CisK
K3N0cnVjdCBTb3VwSFRUUElucHV0U3RyZWFtCit7CisJR0lucHV0U3RyZWFtIHBhcmVudDsKKwor
fTsKKworc3RydWN0IFNvdXBIVFRQSW5wdXRTdHJlYW1DbGFzcworeworCUdJbnB1dFN0cmVhbUNs
YXNzIHBhcmVudF9jbGFzczsKKworCS8qIFBhZGRpbmcgZm9yIGZ1dHVyZSBleHBhbnNpb24gKi8K
Kwl2b2lkICgqX2dfcmVzZXJ2ZWQxKSAodm9pZCk7CisJdm9pZCAoKl9nX3Jlc2VydmVkMikgKHZv
aWQpOworCXZvaWQgKCpfZ19yZXNlcnZlZDMpICh2b2lkKTsKKwl2b2lkICgqX2dfcmVzZXJ2ZWQ0
KSAodm9pZCk7CisJdm9pZCAoKl9nX3Jlc2VydmVkNSkgKHZvaWQpOworfTsKKworR1R5cGUgc291
cF9odHRwX2lucHV0X3N0cmVhbV9nZXRfdHlwZSAodm9pZCkgR19HTlVDX0NPTlNUOworCitTb3Vw
SFRUUElucHV0U3RyZWFtICpzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX25ldyAgICAgICAgIChTb3Vw
U2Vzc2lvbiAgICAgICAgICpzZXNzaW9uLAorCQkJCQkJCSBTb3VwTWVzc2FnZSAgICAgICAgICpt
c2cpOworCitnYm9vbGVhbiAgICAgICAgICAgICBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmQg
ICAgICAgIChTb3VwSFRUUElucHV0U3RyZWFtICpodHRwc3RyZWFtLAorCQkJCQkJCSBHQ2FuY2Vs
bGFibGUgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkJCQkgR0Vycm9yICAgICAgICAgICAgICoq
ZXJyb3IpOworCit2b2lkICAgICAgICAgICAgICAgICBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3Nl
bmRfYXN5bmMgIChTb3VwSFRUUElucHV0U3RyZWFtICpodHRwc3RyZWFtLAorCQkJCQkJCSBpbnQg
ICAgICAgICAgICAgICAgICBpb19wcmlvcml0eSwKKwkJCQkJCQkgR0NhbmNlbGxhYmxlICAgICAg
ICAqY2FuY2VsbGFibGUsCisJCQkJCQkJIEdBc3luY1JlYWR5Q2FsbGJhY2sgIGNhbGxiYWNrLAor
CQkJCQkJCSBncG9pbnRlciAgICAgICAgICAgICB1c2VyX2RhdGEpOworZ2Jvb2xlYW4gICAgICAg
ICAgICAgc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2ZpbmlzaCAoU291cEhUVFBJbnB1dFN0
cmVhbSAqaHR0cHN0cmVhbSwKKwkJCQkJCQkgR0FzeW5jUmVzdWx0ICAgICAgICAqcmVzdWx0LAor
CQkJCQkJCSBHRXJyb3IgICAgICAgICAgICAgKiplcnJvcik7CisKK1NvdXBNZXNzYWdlICAgICAg
ICAgKnNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ2V0X21lc3NhZ2UgKFNvdXBIVFRQSW5wdXRTdHJl
YW0gKmh0dHBzdHJlYW0pOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogX19TT1VQX0hUVFBf
SU5QVVRfU1RSRUFNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWRhdGEuYyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMWIyZjBlNQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmMKQEAgLTAsMCArMSwyMDUgQEAK
Ky8qCisgKiBzb3VwLXJlcXVlc3QtZGF0YS5jOiBkYXRhOiBVUkkgcmVxdWVzdCBvYmplY3QKKyAq
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAy
MDEwIElnYWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5o
PgorI2VuZGlmCisjaW5jbHVkZSAic291cC1yZXF1ZXN0LWRhdGEuaCIKKworI2luY2x1ZGUgInNv
dXAtcmVxdWVzdGVyLmgiCisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CisjaW5jbHVkZSA8Z2xp
Yi9naTE4bi5oPgorCitHX0RFRklORV9UWVBFIChTb3VwUmVxdWVzdERhdGEsIHNvdXBfcmVxdWVz
dF9kYXRhLCBTT1VQX1RZUEVfUkVRVUVTVCkKKworc3RydWN0IF9Tb3VwUmVxdWVzdERhdGFQcml2
YXRlIHsKKwlnc2l6ZSBjb250ZW50X2xlbmd0aDsKKwljaGFyICpjb250ZW50X3R5cGU7Cit9Owor
CitzdGF0aWMgdm9pZAorc291cF9yZXF1ZXN0X2RhdGFfaW5pdCAoU291cFJlcXVlc3REYXRhICpk
YXRhKQoreworCWRhdGEtPnByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKGRhdGEs
IFNPVVBfVFlQRV9SRVFVRVNUX0RBVEEsIFNvdXBSZXF1ZXN0RGF0YVByaXZhdGUpOworfQorCitz
dGF0aWMgdm9pZAorc291cF9yZXF1ZXN0X2RhdGFfZmluYWxpemUgKEdPYmplY3QgKm9iamVjdCkK
K3sKKwlTb3VwUmVxdWVzdERhdGEgKmRhdGEgPSBTT1VQX1JFUVVFU1RfREFUQSAob2JqZWN0KTsK
KworCWdfZnJlZSAoZGF0YS0+cHJpdi0+Y29udGVudF90eXBlKTsKKworCUdfT0JKRUNUX0NMQVNT
IChzb3VwX3JlcXVlc3RfZGF0YV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKK30K
Kworc3RhdGljIGdib29sZWFuCitzb3VwX3JlcXVlc3RfZGF0YV9jaGVja191cmkgKFNvdXBSZXF1
ZXN0ICAqcmVxdWVzdCwKKwkJCSAgICAgU291cFVSSSAgICAgICp1cmksCisJCQkgICAgIEdFcnJv
ciAgICAgICoqZXJyb3IpCit7CisJcmV0dXJuIHVyaS0+aG9zdCA9PSBOVUxMOworfQorCisKKyNk
ZWZpbmUgWERJR0lUKGMpICgoYykgPD0gJzknID8gKGMpIC0gJzAnIDogKChjKSAmIDB4NEYpIC0g
J0EnICsgMTApCisjZGVmaW5lIEhFWENIQVIocykgKChYRElHSVQgKHNbMV0pIDw8IDQpICsgWERJ
R0lUIChzWzJdKSkKKworY2hhciAqCit1cmlfZGVjb2RlZF9jb3B5IChjb25zdCBjaGFyICpwYXJ0
LCBpbnQgbGVuZ3RoLCBnYm9vbGVhbiBmaXh1cCkKK3sKKwl1bnNpZ25lZCBjaGFyICpzLCAqZDsK
KwljaGFyICpkZWNvZGVkID0gZ19zdHJuZHVwIChwYXJ0LCBsZW5ndGgpOworCisJcyA9IGQgPSAo
dW5zaWduZWQgY2hhciAqKWRlY29kZWQ7CisJZG8geworCQlpZiAoKnMgPT0gJyUnKSB7CisJCQlp
ZiAoIWdfYXNjaWlfaXN4ZGlnaXQgKHNbMV0pIHx8CisJCQkgICAgIWdfYXNjaWlfaXN4ZGlnaXQg
KHNbMl0pKSB7CisJCQkJaWYgKCFmaXh1cCkgeworCQkJCQlnX2ZyZWUgKGRlY29kZWQpOworCQkJ
CQlyZXR1cm4gTlVMTDsKKwkJCQl9CisJCQkJKmQrKyA9ICpzOworCQkJCWNvbnRpbnVlOworCQkJ
fQorCQkJKmQrKyA9IEhFWENIQVIgKHMpOworCQkJcyArPSAyOworCQl9IGVsc2UKKwkJCSpkKysg
PSAqczsKKwl9IHdoaWxlICgqcysrKTsKKworCXJldHVybiBkZWNvZGVkOworfQorCitzdGF0aWMg
R0lucHV0U3RyZWFtICoKK3NvdXBfcmVxdWVzdF9kYXRhX3NlbmQgKFNvdXBSZXF1ZXN0ICAgKnJl
cXVlc3QsCisJCQlHQ2FuY2VsbGFibGUgICpjYW5jZWxsYWJsZSwKKwkJCUdFcnJvciAgICAgICAq
KmVycm9yKQoreworCVNvdXBSZXF1ZXN0RGF0YSAqZGF0YSA9IFNPVVBfUkVRVUVTVF9EQVRBIChy
ZXF1ZXN0KTsKKwlTb3VwVVJJICp1cmkgPSBzb3VwX3JlcXVlc3RfZ2V0X3VyaSAocmVxdWVzdCk7
CisJR0lucHV0U3RyZWFtICptZW1zdHJlYW07CisJY29uc3QgY2hhciAqY29tbWEsICpzZW1pLCAq
c3RhcnQsICplbmQ7CisJZ2Jvb2xlYW4gYmFzZTY0ID0gRkFMU0U7CisKKwlnY2hhciAqdXJpc3Ry
ID0gc291cF91cmlfdG9fc3RyaW5nICh1cmksIEZBTFNFKTsKKwljb21tYSA9IHN0cmNociAodXJp
c3RyLCAnLCcpOworCWlmIChjb21tYSAmJiBjb21tYSAhPSB1cmlzdHIpIHsKKwkJLyogRGVhbCB3
aXRoIE1JTUUgdHlwZSAvIHBhcmFtcyAqLworCQlzZW1pID0gbWVtY2hyICh1cmlzdHIsICc7Jywg
Y29tbWEgLSB1cmlzdHIpOworCQllbmQgPSBzZW1pID8gc2VtaSA6IGNvbW1hOworCisJCWlmIChl
bmQgIT0gdXJpc3RyKQorCQkJZGF0YS0+cHJpdi0+Y29udGVudF90eXBlID0gdXJpX2RlY29kZWRf
Y29weSAodXJpc3RyLCBlbmQgLSB1cmlzdHIsIFRSVUUpOworCisJCWlmIChzZW1pICYmICFnX2Fz
Y2lpX3N0cm5jYXNlY21wIChzZW1pLCAiO2Jhc2U2NCIsIE1BWCAoY29tbWEgLSBzZW1pLCBzdHJs
ZW4gKCI7YmFzZTY0IikpKSkKKwkJCWJhc2U2NCA9IFRSVUU7CisJfQorCisJbWVtc3RyZWFtID0g
Z19tZW1vcnlfaW5wdXRfc3RyZWFtX25ldyAoKTsKKworCXN0YXJ0ID0gY29tbWEgPyBjb21tYSAr
IDEgOiB1cmlzdHI7CisKKwlpZiAoKnN0YXJ0KSB7CisJCWd1Y2hhciAqYnVmOworCisJCWlmIChi
YXNlNjQpIHsKKwkJCWludCBpbmxlbiwgc3RhdGUgPSAwOworCQkJZ3VpbnQgc2F2ZSA9IDA7CisJ
CQljaGFyICp1bmVzY2FwZWQ7CisKKwkJCWlmIChzdHJjaHIgKHN0YXJ0LCAnJScpKSB7CisJCQkJ
c3RhcnQgPSB1bmVzY2FwZWQgPSB1cmlfZGVjb2RlZF9jb3B5IChzdGFydCwgc3RybGVuKHN0YXJ0
KSwgVFJVRSk7CisJCQkJaWYgKCF1bmVzY2FwZWQpCisJCQkJCWdvdG8gZmFpbDsKKwkJCX0gZWxz
ZQorCQkJCXVuZXNjYXBlZCA9IE5VTEw7CisKKwkJCWlubGVuID0gc3RybGVuIChzdGFydCk7CisJ
CQlidWYgPSBnX21hbGxvYyAoaW5sZW4gKiAzIC8gNCk7ICAKKwkJCWRhdGEtPnByaXYtPmNvbnRl
bnRfbGVuZ3RoID0KKwkJCQlnX2Jhc2U2NF9kZWNvZGVfc3RlcCAoc3RhcnQsIGlubGVuLCBidWYs
CisJCQkJCQkgICAgICAmc3RhdGUsICZzYXZlKTsKKwkJCWdfZnJlZSAodW5lc2NhcGVkKTsKKwkJ
CWlmIChzdGF0ZSAhPSAwKSB7CisJCQkJZ19mcmVlIChidWYpOworCQkJCWdvdG8gZmFpbDsKKwkJ
CX0KKwkJfSBlbHNlIHsKKwkJCS8qIENhbm5vdCB1c2UgZ191cmlfdW5lc2NhcGVfc3RyaW5nIG5v
cgorCQkJICAgc291cF91cmlfZGVjb2RlIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0bworCQkJICAg
ZmFpbCBmb3IgdGhpbmdzIGxpa2UgIiUzRSUlM0MiIC0+ICI+JTwiICovCisJCQlidWYgPSAoZ3Vj
aGFyICopIHVyaV9kZWNvZGVkX2NvcHkgKHN0YXJ0LCBzdHJsZW4oc3RhcnQpLCBUUlVFKTsKKwkJ
CWlmICghYnVmKQorCQkJCWdvdG8gZmFpbDsKKwkJCWRhdGEtPnByaXYtPmNvbnRlbnRfbGVuZ3Ro
ID0gc3RybGVuICgoY2hhciAqKWJ1Zik7CisJCX0KKworCQlnX21lbW9yeV9pbnB1dF9zdHJlYW1f
YWRkX2RhdGEgKEdfTUVNT1JZX0lOUFVUX1NUUkVBTSAobWVtc3RyZWFtKSwKKwkJCQkJCWJ1Ziwg
ZGF0YS0+cHJpdi0+Y29udGVudF9sZW5ndGgsCisJCQkJCQlnX2ZyZWUpOworCX0KKwlnX2ZyZWUg
KHVyaXN0cik7CisKKwlyZXR1cm4gbWVtc3RyZWFtOworCitmYWlsOgorCWdfZnJlZSAodXJpc3Ry
KTsKKwlnX3NldF9lcnJvciAoZXJyb3IsIFNPVVBfRVJST1IsIFNPVVBfRVJST1JfQkFEX1VSSSwK
KwkJICAgICBfKCJVbmFibGUgdG8gZGVjb2RlIFVSSTogJXMiKSwgc3RhcnQpOworCWdfb2JqZWN0
X3VucmVmIChtZW1zdHJlYW0pOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgZ29mZnNldAor
c291cF9yZXF1ZXN0X2RhdGFfZ2V0X2NvbnRlbnRfbGVuZ3RoIChTb3VwUmVxdWVzdCAqcmVxdWVz
dCkKK3sKKwlTb3VwUmVxdWVzdERhdGEgKmRhdGEgPSBTT1VQX1JFUVVFU1RfREFUQSAocmVxdWVz
dCk7CisKKwlyZXR1cm4gZGF0YS0+cHJpdi0+Y29udGVudF9sZW5ndGg7Cit9CisKK3N0YXRpYyBj
b25zdCBjaGFyICoKK3NvdXBfcmVxdWVzdF9kYXRhX2dldF9jb250ZW50X3R5cGUgKFNvdXBSZXF1
ZXN0ICpyZXF1ZXN0KQoreworCVNvdXBSZXF1ZXN0RGF0YSAqZGF0YSA9IFNPVVBfUkVRVUVTVF9E
QVRBIChyZXF1ZXN0KTsKKworCXJldHVybiBkYXRhLT5wcml2LT5jb250ZW50X3R5cGU7Cit9CisK
K3N0YXRpYyB2b2lkCitzb3VwX3JlcXVlc3RfZGF0YV9jbGFzc19pbml0IChTb3VwUmVxdWVzdERh
dGFDbGFzcyAqcmVxdWVzdF9kYXRhX2NsYXNzKQoreworCUdPYmplY3RDbGFzcyAqb2JqZWN0X2Ns
YXNzID0gR19PQkpFQ1RfQ0xBU1MgKHJlcXVlc3RfZGF0YV9jbGFzcyk7CisJU291cFJlcXVlc3RD
bGFzcyAqcmVxdWVzdF9jbGFzcyA9CisJCVNPVVBfUkVRVUVTVF9DTEFTUyAocmVxdWVzdF9kYXRh
X2NsYXNzKTsKKworCWdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSAocmVxdWVzdF9kYXRhX2NsYXNz
LCBzaXplb2YgKFNvdXBSZXF1ZXN0RGF0YVByaXZhdGUpKTsKKworCW9iamVjdF9jbGFzcy0+Zmlu
YWxpemUgPSBzb3VwX3JlcXVlc3RfZGF0YV9maW5hbGl6ZTsKKworCXJlcXVlc3RfY2xhc3MtPmNo
ZWNrX3VyaSA9IHNvdXBfcmVxdWVzdF9kYXRhX2NoZWNrX3VyaTsKKwlyZXF1ZXN0X2NsYXNzLT5z
ZW5kID0gc291cF9yZXF1ZXN0X2RhdGFfc2VuZDsKKwlyZXF1ZXN0X2NsYXNzLT5nZXRfY29udGVu
dF9sZW5ndGggPSBzb3VwX3JlcXVlc3RfZGF0YV9nZXRfY29udGVudF9sZW5ndGg7CisJcmVxdWVz
dF9jbGFzcy0+Z2V0X2NvbnRlbnRfdHlwZSA9IHNvdXBfcmVxdWVzdF9kYXRhX2dldF9jb250ZW50
X3R5cGU7Cit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNo
ZS9zb3VwLXJlcXVlc3QtZGF0YS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2Fj
aGUvc291cC1yZXF1ZXN0LWRhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5kOTNmOWZjCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvY2FjaGUvc291cC1yZXF1ZXN0LWRhdGEuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2Fs
aWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2lmbmRlZiBTT1VQX1JFUVVFU1RfREFUQV9ICisjZGVmaW5lIFNPVVBfUkVRVUVT
VF9EQVRBX0ggMQorCisjaW5jbHVkZSAic291cC1yZXF1ZXN0LmgiCisKK0dfQkVHSU5fREVDTFMK
KworI2RlZmluZSBTT1VQX1RZUEVfUkVRVUVTVF9EQVRBICAgICAgICAgICAgKHNvdXBfcmVxdWVz
dF9kYXRhX2dldF90eXBlICgpKQorI2RlZmluZSBTT1VQX1JFUVVFU1RfREFUQShvYmplY3QpICAg
ICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqZWN0KSwgU09VUF9UWVBFX1JF
UVVFU1RfREFUQSwgU291cFJlcXVlc3REYXRhKSkKKyNkZWZpbmUgU09VUF9SRVFVRVNUX0RBVEFf
Q0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgU09VUF9U
WVBFX1JFUVVFU1RfREFUQSwgU291cFJlcXVlc3REYXRhQ2xhc3MpKQorI2RlZmluZSBTT1VQX0lT
X1JFUVVFU1RfREFUQShvYmplY3QpICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgo
b2JqZWN0KSwgU09VUF9UWVBFX1JFUVVFU1RfREFUQSkpCisjZGVmaW5lIFNPVVBfSVNfUkVRVUVT
VF9EQVRBX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIFNP
VVBfVFlQRV9SRVFVRVNUX0RBVEEpKQorI2RlZmluZSBTT1VQX1JFUVVFU1RfREFUQV9HRVRfQ0xB
U1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBTT1VQX1RZUEVfUkVR
VUVTVF9EQVRBLCBTb3VwUmVxdWVzdERhdGFDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9Tb3Vw
UmVxdWVzdERhdGFQcml2YXRlIFNvdXBSZXF1ZXN0RGF0YVByaXZhdGU7CisKK3R5cGVkZWYgc3Ry
dWN0IHsKKwlTb3VwUmVxdWVzdCBwYXJlbnQ7CisKKwlTb3VwUmVxdWVzdERhdGFQcml2YXRlICpw
cml2OworfSBTb3VwUmVxdWVzdERhdGE7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlTb3VwUmVxdWVz
dENsYXNzIHBhcmVudDsKKworfSBTb3VwUmVxdWVzdERhdGFDbGFzczsKKworR1R5cGUgc291cF9y
ZXF1ZXN0X2RhdGFfZ2V0X3R5cGUgKHZvaWQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyog
U09VUF9SRVFVRVNUX0RBVEFfSCAqLwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWZpbGUuYyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYzQ5MjI4NQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmMKQEAgLTAsMCArMSwzMTMg
QEAKKy8qCisgKiBzb3VwLXJlcXVlc3QtZmlsZS5jOiBmaWxlOiBVUkkgcmVxdWVzdCBvYmplY3QK
KyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChD
KSAyMDEwIElnYWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZp
Zy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3QtZmlsZS5oIgorI2luY2x1ZGUg
InNvdXAtZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5oIgorI2luY2x1ZGUgInNvdXAtcmVxdWVzdGVy
LmgiCisjaW5jbHVkZSA8Z2xpYi9naTE4bi5oPgorCitHX0RFRklORV9UWVBFIChTb3VwUmVxdWVz
dEZpbGUsIHNvdXBfcmVxdWVzdF9maWxlLCBTT1VQX1RZUEVfUkVRVUVTVCkKKworc3RydWN0IF9T
b3VwUmVxdWVzdEZpbGVQcml2YXRlIHsKKwlHRmlsZSAqZ2ZpbGU7CisKKyAgICAgICAgY2hhciAq
bWltZV90eXBlOworICAgICAgICBnb2Zmc2V0IHNpemU7Cit9OworCitHRmlsZSAqCitzb3VwX3Jl
cXVlc3RfZmlsZV9nZXRfZmlsZSAoU291cFJlcXVlc3RGaWxlICpmaWxlKQoreworCXJldHVybiBn
X29iamVjdF9yZWYgKGZpbGUtPnByaXYtPmdmaWxlKTsKK30KKworc3RhdGljIHZvaWQKK3NvdXBf
cmVxdWVzdF9maWxlX2luaXQgKFNvdXBSZXF1ZXN0RmlsZSAqZmlsZSkKK3sKKwlmaWxlLT5wcml2
ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFIChmaWxlLCBTT1VQX1RZUEVfUkVRVUVTVF9G
SUxFLCBTb3VwUmVxdWVzdEZpbGVQcml2YXRlKTsKKworICAgICAgICBmaWxlLT5wcml2LT5zaXpl
ID0gLTE7Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX3JlcXVlc3RfZmlsZV9maW5hbGl6ZSAoR09i
amVjdCAqb2JqZWN0KQoreworCVNvdXBSZXF1ZXN0RmlsZSAqZmlsZSA9IFNPVVBfUkVRVUVTVF9G
SUxFIChvYmplY3QpOworCisJaWYgKGZpbGUtPnByaXYtPmdmaWxlKQorCQlnX29iamVjdF91bnJl
ZiAoZmlsZS0+cHJpdi0+Z2ZpbGUpOworCWdfZnJlZSAoZmlsZS0+cHJpdi0+bWltZV90eXBlKTsK
KworCUdfT0JKRUNUX0NMQVNTIChzb3VwX3JlcXVlc3RfZmlsZV9wYXJlbnRfY2xhc3MpLT5maW5h
bGl6ZSAob2JqZWN0KTsKK30KKworc3RhdGljIGdib29sZWFuCitzb3VwX3JlcXVlc3RfZmlsZV9j
aGVja191cmkgKFNvdXBSZXF1ZXN0ICAqcmVxdWVzdCwKKwkJCSAgICAgU291cFVSSSAgICAgICp1
cmksCisJCQkgICAgIEdFcnJvciAgICAgICoqZXJyb3IpCit7CisJLyogImZpbGU6L2ZvbyIgaXMg
bm90IHZhbGlkICovCisJaWYgKCF1cmktPmhvc3QpCisJCXJldHVybiBGQUxTRTsKKworCS8qIGJ1
dCBpdCBtdXN0IGJlICJmaWxlOi8vLy4uLiIgb3IgImZpbGU6Ly9sb2NhbGhvc3QvLi4uIiAqLwor
CWlmICh1cmktPnNjaGVtZSA9PSBTT1VQX1VSSV9TQ0hFTUVfRklMRSAmJgorICAgICAgICAgICAg
KnVyaS0+aG9zdCAmJiAKKyAgICAgICAgICAgIGdfYXNjaWlfc3RyY2FzZWNtcCAodXJpLT5ob3N0
LCAibG9jYWxob3N0IikgIT0gMCkKKwkJcmV0dXJuIEZBTFNFOworCisJcmV0dXJuIFRSVUU7Cit9
CisKK3N0YXRpYyB2b2lkCitzb3VwX3JlcXVlc3RfZmlsZV9mdHBfbWFpbl9sb29wX3F1aXQgKEdP
YmplY3QgICAgICAqb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHQXN5bmNSZXN1bHQgKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ3BvaW50ZXIgICAgICBsb29wKQoreworICAgICAgICBnX21haW5fbG9vcF9xdWl0IChs
b29wKTsKK30KKworLyogVGhpcyBpcyBhIHNvbWV3aGF0IGhhY2t5IHdheSB0byBnZXQgRlRQIHRv
IGFsbW9zdCB3b3JrLiBUaGUgcHJvcGVyIHdheSB0bworICogZ2V0IEZUUCB0byBfcmVhbGx5XyB3
b3JrIGludm9sdmVzIGhhY2tpbmcgR0lPIHRvIGhhdmUgQVBJcyB0byBoYW5kbGUgCisgKiBjYW5v
bmNpYWwgVVJMcy4KKyAqLworc3RhdGljIEdGaWxlICoKK3NvdXBfcmVxdWVzdF9maWxlX2Vuc3Vy
ZV9maWxlX2Z0cCAoU291cFVSSSAgICAgICAqdXJpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHQ2FuY2VsbGFibGUgICpjYW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICoqZXJyb3IpCit7CisgICAgICAgIFNvdXBV
UkkgKmhvc3Q7CisgICAgICAgIGNoYXIgKnM7CisgICAgICAgIEdGaWxlICpmaWxlLCAqcmVzdWx0
OworICAgICAgICBHTW91bnQgKm1vdW50OworCisgICAgICAgIGhvc3QgPSBzb3VwX3VyaV9jb3B5
X2hvc3QgKHVyaSk7CisgICAgICAgIHMgPSBzb3VwX3VyaV90b19zdHJpbmcgKGhvc3QsIEZBTFNF
KTsKKyAgICAgICAgZmlsZSA9IGdfZmlsZV9uZXdfZm9yX3VyaSAocyk7CisgICAgICAgIHNvdXBf
dXJpX2ZyZWUgKGhvc3QpOworICAgICAgICBnX2ZyZWUgKHMpOworCisgICAgICAgIG1vdW50ID0g
Z19maWxlX2ZpbmRfZW5jbG9zaW5nX21vdW50IChmaWxlLCBjYW5jZWxsYWJsZSwgZXJyb3IpOwor
ICAgICAgICBpZiAobW91bnQgPT0gTlVMTCAmJiBnX2ZpbGVfc3VwcG9ydHNfdGhyZWFkX2NvbnRl
eHRzIChmaWxlKSkgeworICAgICAgICAgICAgICBHTWFpbkNvbnRleHQgKmNvbnRleHQgPSBnX21h
aW5fY29udGV4dF9uZXcgKCk7CisgICAgICAgICAgICAgIEdNYWluTG9vcCAqbG9vcCA9IGdfbWFp
bl9sb29wX25ldyAoY29udGV4dCwgRkFMU0UpOworCisgICAgICAgICAgICAgIGdfY2xlYXJfZXJy
b3IgKGVycm9yKTsKKyAgICAgICAgICAgICAgZ19tYWluX2NvbnRleHRfcHVzaF90aHJlYWRfZGVm
YXVsdCAoY29udGV4dCk7CisgICAgICAgICAgICAgIGdfZmlsZV9tb3VudF9lbmNsb3Npbmdfdm9s
dW1lIChmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R19NT1VOVF9NT1VOVF9OT05FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTlVMTCwgLyogRklYTUUhICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjYW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNvdXBfcmVxdWVzdF9maWxlX2Z0cF9tYWluX2xvb3BfcXVpdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3ApOworICAg
ICAgICAgICAgICBnX21haW5fbG9vcF9ydW4gKGxvb3ApOworICAgICAgICAgICAgICBnX21haW5f
Y29udGV4dF9wb3BfdGhyZWFkX2RlZmF1bHQgKGNvbnRleHQpOworICAgICAgICAgICAgICBnX21h
aW5fbG9vcF91bnJlZiAobG9vcCk7CisgICAgICAgICAgICAgIGdfbWFpbl9jb250ZXh0X3VucmVm
IChjb250ZXh0KTsKKyAgICAgICAgICAgICAgbW91bnQgPSBnX2ZpbGVfZmluZF9lbmNsb3Npbmdf
bW91bnQgKGZpbGUsIGNhbmNlbGxhYmxlLCBlcnJvcik7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KG1vdW50ID09IE5VTEwpCisgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBnX29i
amVjdF91bnJlZiAoZmlsZSk7CisgICAgICAgIAorICAgICAgICBmaWxlID0gZ19tb3VudF9nZXRf
ZGVmYXVsdF9sb2NhdGlvbiAobW91bnQpOworICAgICAgICBnX29iamVjdF91bnJlZiAobW91bnQp
OworCisgICAgICAgIHMgPSBnX3N0cmR1cCAodXJpLT5wYXRoKTsKKyAgICAgICAgaWYgKHN0cmNo
ciAocywgJzsnKSkKKyAgICAgICAgICAqc3RyY2hyIChzLCAnOycpID0gMDsKKworICAgICAgICBy
ZXN1bHQgPSBnX2ZpbGVfcmVzb2x2ZV9yZWxhdGl2ZV9wYXRoIChmaWxlLCBzKTsKKyAgICAgICAg
Z19mcmVlIChzKTsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYgKGZpbGUpOworCisgICAgICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorc291cF9yZXF1ZXN0X2ZpbGVfZW5z
dXJlX2ZpbGUgKFNvdXBSZXF1ZXN0RmlsZSAgKmZpbGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0NhbmNlbGxhYmxlICAgICAqY2FuY2VsbGFibGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICoqZXJyb3IpCit7CisgICAgICAgIFNvdXBV
UkkgKnVyaTsKKworICAgICAgICBpZiAoZmlsZS0+cHJpdi0+Z2ZpbGUpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIFRSVUU7CisKKyAgICAgICAgdXJpID0gc291cF9yZXF1ZXN0X2dldF91cmkgKFNP
VVBfUkVRVUVTVCAoZmlsZSkpOworICAgICAgICBpZiAodXJpLT5zY2hlbWUgPT0gU09VUF9VUklf
U0NIRU1FX0ZJTEUpIHsKKwkJZmlsZS0+cHJpdi0+Z2ZpbGUgPSBnX2ZpbGVfbmV3X2Zvcl9wYXRo
ICh1cmktPnBhdGgpOworICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9IGVs
c2UgaWYgKHVyaS0+c2NoZW1lID09IFNPVVBfVVJJX1NDSEVNRV9GVFApIHsKKyAgICAgICAgICAg
ICAgICBmaWxlLT5wcml2LT5nZmlsZSA9IHNvdXBfcmVxdWVzdF9maWxlX2Vuc3VyZV9maWxlX2Z0
cCAodXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Ip
OworICAgICAgICAgICAgICAgIHJldHVybiBmaWxlLT5wcml2LT5nZmlsZSAhPSBOVUxMOworICAg
ICAgICB9CisKKyAgICAgICAgZ19zZXRfZXJyb3IgKGVycm9yLCBTT1VQX0VSUk9SLCBTT1VQX0VS
Uk9SX1VOU1VQUE9SVEVEX1VSSV9TQ0hFTUUsCisgICAgICAgICAgICAgICAgICAgICBfKCJVbnN1
cHBvcnRlZCBVUkkgc2NoZW1lICclcyciKSwgdXJpLT5zY2hlbWUpOworICAgICAgICByZXR1cm4g
RkFMU0U7Cit9CisKK3N0YXRpYyBHSW5wdXRTdHJlYW0gKgorc291cF9yZXF1ZXN0X2ZpbGVfc2Vu
ZCAoU291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCisJCQlHQ2FuY2VsbGFibGUgICAgICAg
ICAqY2FuY2VsbGFibGUsCisJCQlHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpCit7CisJU291
cFJlcXVlc3RGaWxlICpmaWxlID0gU09VUF9SRVFVRVNUX0ZJTEUgKHJlcXVlc3QpOworICAgICAg
ICBHSW5wdXRTdHJlYW0gKnN0cmVhbTsKKyAgICAgICAgR0Vycm9yICpteV9lcnJvciA9IE5VTEw7
CisKKyAgICAgICAgaWYgKCFzb3VwX3JlcXVlc3RfZmlsZV9lbnN1cmVfZmlsZSAoZmlsZSwgY2Fu
Y2VsbGFibGUsIGVycm9yKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKworCXN0cmVh
bSA9IEdfSU5QVVRfU1RSRUFNIChnX2ZpbGVfcmVhZCAoZmlsZS0+cHJpdi0+Z2ZpbGUsCisJCQkg
ICAgICAgICAgICAgICAgICAgICAgY2FuY2VsbGFibGUsICZteV9lcnJvcikpOworICAgICAgICBp
ZiAoc3RyZWFtID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBpZiAoZ19lcnJvcl9tYXRjaGVz
IChteV9lcnJvciwgR19JT19FUlJPUiwgR19JT19FUlJPUl9JU19ESVJFQ1RPUlkpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBHRmlsZUVudW1lcmF0b3IgKmVudW1lcmF0b3I7CisgICAgICAg
ICAgICAgICAgICAgICAgICBnX2NsZWFyX2Vycm9yICgmbXlfZXJyb3IpOworICAgICAgICAgICAg
ICAgICAgICAgICAgZW51bWVyYXRvciA9IGdfZmlsZV9lbnVtZXJhdGVfY2hpbGRyZW4gKGZpbGUt
PnByaXYtPmdmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICIqIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX0ZJTEVfUVVFUllfSU5GT19OT05F
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhbmNlbGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChlbnVtZXJhdG9yKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0cmVhbSA9IHNvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9uZXcgKGVudW1lcmF0b3IsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNvdXBfcmVxdWVzdF9nZXRfdXJpIChyZXF1ZXN0KSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdfb2JqZWN0X3VucmVmIChlbnVtZXJhdG9yKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS0+cHJpdi0+bWltZV90eXBlID0gZ19z
dHJkdXAgKCJ0ZXh0L2h0bWwiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZ19wcm9wYWdhdGVfZXJy
b3IgKGVycm9yLCBteV9lcnJvcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIEdGaWxlSW5mbyAqaW5mbyA9IGdfZmlsZV9xdWVyeV9pbmZvIChm
aWxlLT5wcml2LT5nZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9DT05URU5UX1RZUEUgIiwi
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdf
RklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgY2FuY2VsbGFibGUsIE5VTEwpOworICAgICAg
ICAgICAgICAgIGlmIChpbmZvKSB7CisJCQljb25zdCBjaGFyICpjb250ZW50X3R5cGU7CisgICAg
ICAgICAgICAgICAgICAgICAgICBmaWxlLT5wcml2LT5zaXplID0gZ19maWxlX2luZm9fZ2V0X3Np
emUgKGluZm8pOworCQkJY29udGVudF90eXBlID0gZ19maWxlX2luZm9fZ2V0X2NvbnRlbnRfdHlw
ZSAoaW5mbyk7CisKKwkJCWlmIChjb250ZW50X3R5cGUpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZpbGUtPnByaXYtPm1pbWVfdHlwZSA9IGdfY29udGVudF90eXBlX2dldF9taW1l
X3R5cGUgKGNvbnRlbnRfdHlwZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBnX29iamVjdF91
bnJlZiAoaW5mbyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIHN0cmVhbTsgICAgICAgCit9CisKK3N0YXRpYyB2b2lkCitzb3VwX3JlcXVlc3RfZmlsZV9z
ZW5kX2FzeW5jX3RocmVhZCAoR1NpbXBsZUFzeW5jUmVzdWx0ICpyZXMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR09iamVjdCAgICAgICAgICAgICpvYmplY3QsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NhbmNlbGxhYmxlICAgICAgICpjYW5j
ZWxsYWJsZSkKK3sKKyAgICAgICAgR0lucHV0U3RyZWFtICpzdHJlYW07CisgICAgICAgIFNvdXBS
ZXF1ZXN0ICpyZXF1ZXN0OworICAgICAgICBHRXJyb3IgKmVycm9yID0gTlVMTDsKKyAgICAgICAg
CisgICAgICAgIHJlcXVlc3QgPSBTT1VQX1JFUVVFU1QgKG9iamVjdCk7CisgICAgICAgIAorICAg
ICAgICBzdHJlYW0gPSBzb3VwX3JlcXVlc3RfZmlsZV9zZW5kIChyZXF1ZXN0LCBjYW5jZWxsYWJs
ZSwgJmVycm9yKTsKKworICAgICAgICBpZiAoc3RyZWFtID09IE5VTEwpIHsKKyAgICAgICAgICAg
ICAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X2Zyb21fZXJyb3IgKHJlcywgZXJyb3IpOwor
ICAgICAgICAgICAgICAgIGdfZXJyb3JfZnJlZSAoZXJyb3IpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dwb2ludGVy
IChyZXMsIHN0cmVhbSwgZ19vYmplY3RfdW5yZWYpOworICAgICAgICB9Cit9CisKK3N0YXRpYyB2
b2lkCitzb3VwX3JlcXVlc3RfZmlsZV9zZW5kX2FzeW5jIChTb3VwUmVxdWVzdCAgICAgICAgICAq
cmVxdWVzdCwKKwkJCSAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJ
CSAgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgICBjYWxsYmFjaywKKwkJCSAgICAgIGdwb2ludGVy
ICAgICAgICAgICAgICB1c2VyX2RhdGEpCit7CisgICAgICAgIEdTaW1wbGVBc3luY1Jlc3VsdCAq
cmVzOworCisgICAgICAgIHJlcyA9IGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcgKEdfT0JKRUNU
IChyZXF1ZXN0KSwgY2FsbGJhY2ssIHVzZXJfZGF0YSwgc291cF9yZXF1ZXN0X2ZpbGVfc2VuZF9h
c3luYyk7CisgICAgICAgIAorICAgICAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfcnVuX2luX3Ro
cmVhZCAocmVzLCBzb3VwX3JlcXVlc3RfZmlsZV9zZW5kX2FzeW5jX3RocmVhZCwgR19QUklPUklU
WV9ERUZBVUxULCBjYW5jZWxsYWJsZSk7CisgICAgICAgIGdfb2JqZWN0X3VucmVmIChyZXMpOwor
fQorCitzdGF0aWMgR0lucHV0U3RyZWFtICoKK3NvdXBfcmVxdWVzdF9maWxlX3NlbmRfZmluaXNo
IChTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKKwkJCSAgICAgICBHQXN5bmNSZXN1bHQg
ICAgICAgICAqcmVzdWx0LAorCQkJICAgICAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcikK
K3sKKyAgICAgICAgR1NpbXBsZUFzeW5jUmVzdWx0ICpzaW1wbGUgPSBHX1NJTVBMRV9BU1lOQ19S
RVNVTFQgKHJlc3VsdCk7CisKKyAgICAgICAgZ193YXJuX2lmX2ZhaWwgKGdfc2ltcGxlX2FzeW5j
X3Jlc3VsdF9nZXRfc291cmNlX3RhZyAoc2ltcGxlKSA9PSBzb3VwX3JlcXVlc3RfZmlsZV9zZW5k
X2FzeW5jKTsKKworICAgICAgICBpZiAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3Byb3BhZ2F0ZV9l
cnJvciAoc2ltcGxlLCBlcnJvcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAg
ICAgICAgcmV0dXJuIGdfb2JqZWN0X3JlZiAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9vcF9y
ZXNfZ3BvaW50ZXIgKHNpbXBsZSkpOworfQorCitzdGF0aWMgZ29mZnNldAorc291cF9yZXF1ZXN0
X2ZpbGVfZ2V0X2NvbnRlbnRfbGVuZ3RoIChTb3VwUmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlTb3Vw
UmVxdWVzdEZpbGUgKmZpbGUgPSBTT1VQX1JFUVVFU1RfRklMRSAocmVxdWVzdCk7CisKKyAgICAg
ICAgcmV0dXJuIGZpbGUtPnByaXYtPnNpemU7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK3Nv
dXBfcmVxdWVzdF9maWxlX2dldF9jb250ZW50X3R5cGUgKFNvdXBSZXF1ZXN0ICpyZXF1ZXN0KQor
eworCVNvdXBSZXF1ZXN0RmlsZSAqZmlsZSA9IFNPVVBfUkVRVUVTVF9GSUxFIChyZXF1ZXN0KTsK
KworICAgICAgICBpZiAoIWZpbGUtPnByaXYtPm1pbWVfdHlwZSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSI7CisKKwlyZXR1cm4gZmlsZS0+cHJpdi0+
bWltZV90eXBlOworfQorCitzdGF0aWMgdm9pZAorc291cF9yZXF1ZXN0X2ZpbGVfY2xhc3NfaW5p
dCAoU291cFJlcXVlc3RGaWxlQ2xhc3MgKnJlcXVlc3RfZmlsZV9jbGFzcykKK3sKKwlHT2JqZWN0
Q2xhc3MgKm9iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChyZXF1ZXN0X2ZpbGVfY2xhc3Mp
OworCVNvdXBSZXF1ZXN0Q2xhc3MgKnJlcXVlc3RfY2xhc3MgPQorCQlTT1VQX1JFUVVFU1RfQ0xB
U1MgKHJlcXVlc3RfZmlsZV9jbGFzcyk7CisKKwlnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUgKHJl
cXVlc3RfZmlsZV9jbGFzcywgc2l6ZW9mIChTb3VwUmVxdWVzdEZpbGVQcml2YXRlKSk7CisKKwlv
YmplY3RfY2xhc3MtPmZpbmFsaXplID0gc291cF9yZXF1ZXN0X2ZpbGVfZmluYWxpemU7CisKKwly
ZXF1ZXN0X2NsYXNzLT5jaGVja191cmkgPSBzb3VwX3JlcXVlc3RfZmlsZV9jaGVja191cmk7CisJ
cmVxdWVzdF9jbGFzcy0+c2VuZCA9IHNvdXBfcmVxdWVzdF9maWxlX3NlbmQ7CisJcmVxdWVzdF9j
bGFzcy0+c2VuZF9hc3luYyA9IHNvdXBfcmVxdWVzdF9maWxlX3NlbmRfYXN5bmM7CisJcmVxdWVz
dF9jbGFzcy0+c2VuZF9maW5pc2ggPSBzb3VwX3JlcXVlc3RfZmlsZV9zZW5kX2ZpbmlzaDsKKwly
ZXF1ZXN0X2NsYXNzLT5nZXRfY29udGVudF9sZW5ndGggPSBzb3VwX3JlcXVlc3RfZmlsZV9nZXRf
Y29udGVudF9sZW5ndGg7CisJcmVxdWVzdF9jbGFzcy0+Z2V0X2NvbnRlbnRfdHlwZSA9IHNvdXBf
cmVxdWVzdF9maWxlX2dldF9jb250ZW50X3R5cGU7Cit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZmlsZS5oIGIvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWZpbGUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmFkZTNhCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWZpbGUuaApAQCAt
MCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJlZCBIYXQsIEluYy4KKyAq
IENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBTT1VQX1JFUVVFU1RfRklM
RV9ICisjZGVmaW5lIFNPVVBfUkVRVUVTVF9GSUxFX0ggMQorCisjaW5jbHVkZSAic291cC1yZXF1
ZXN0LmgiCisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBTT1VQX1RZUEVfUkVRVUVTVF9GSUxF
ICAgICAgICAgICAgKHNvdXBfcmVxdWVzdF9maWxlX2dldF90eXBlICgpKQorI2RlZmluZSBTT1VQ
X1JFUVVFU1RfRklMRShvYmplY3QpICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNU
ICgob2JqZWN0KSwgU09VUF9UWVBFX1JFUVVFU1RfRklMRSwgU291cFJlcXVlc3RGaWxlKSkKKyNk
ZWZpbmUgU09VUF9SRVFVRVNUX0ZJTEVfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfQ0FTVCAoKGtsYXNzKSwgU09VUF9UWVBFX1JFUVVFU1RfRklMRSwgU291cFJlcXVlc3RGaWxl
Q2xhc3MpKQorI2RlZmluZSBTT1VQX0lTX1JFUVVFU1RfRklMRShvYmplY3QpICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqZWN0KSwgU09VUF9UWVBFX1JFUVVFU1RfRklMRSkp
CisjZGVmaW5lIFNPVVBfSVNfUkVRVUVTVF9GSUxFX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNL
X0NMQVNTX1RZUEUgKChrbGFzcyksIFNPVVBfVFlQRV9SRVFVRVNUX0ZJTEUpKQorI2RlZmluZSBT
T1VQX1JFUVVFU1RfRklMRV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xB
U1MgKChvYmopLCBTT1VQX1RZUEVfUkVRVUVTVF9GSUxFLCBTb3VwUmVxdWVzdEZpbGVDbGFzcykp
CisKK3R5cGVkZWYgc3RydWN0IF9Tb3VwUmVxdWVzdEZpbGVQcml2YXRlIFNvdXBSZXF1ZXN0Rmls
ZVByaXZhdGU7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlTb3VwUmVxdWVzdCBwYXJlbnQ7CisKKwlT
b3VwUmVxdWVzdEZpbGVQcml2YXRlICpwcml2OworfSBTb3VwUmVxdWVzdEZpbGU7CisKK3R5cGVk
ZWYgc3RydWN0IHsKKwlTb3VwUmVxdWVzdENsYXNzIHBhcmVudDsKKworfSBTb3VwUmVxdWVzdEZp
bGVDbGFzczsKKworR1R5cGUgc291cF9yZXF1ZXN0X2ZpbGVfZ2V0X3R5cGUgKHZvaWQpOworCitH
RmlsZSAgKnNvdXBfcmVxdWVzdF9maWxlX2dldF9maWxlICAoU291cFJlcXVlc3RGaWxlICpmaWxl
KTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFNPVVBfUkVRVUVTVF9GSUxFX0ggKi8KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVz
dC1odHRwLmMgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVl
c3QtaHR0cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NWQxMGUKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3Vw
LXJlcXVlc3QtaHR0cC5jCkBAIC0wLDAgKzEsMzM5IEBACisvKgorICogc291cC1yZXF1ZXN0LWh0
dHAuYzogaHR0cDogVVJJIHJlcXVlc3Qgb2JqZWN0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5
IFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmZGVm
IEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8
Z2xpYi9naTE4bi5oPgorCisjaW5jbHVkZSAic291cC1jYWNoZS5oIgorI2luY2x1ZGUgInNvdXAt
Y2FjaGUtcHJpdmF0ZS5oIgorI2luY2x1ZGUgInNvdXAtaHR0cC1pbnB1dC1zdHJlYW0uaCIKKyNp
bmNsdWRlICJzb3VwLXJlcXVlc3QtaHR0cC5oIgorCitHX0RFRklORV9UWVBFIChTb3VwUmVxdWVz
dEhUVFAsIHNvdXBfcmVxdWVzdF9odHRwLCBTT1VQX1RZUEVfUkVRVUVTVCkKKworc3RydWN0IF9T
b3VwUmVxdWVzdEhUVFBQcml2YXRlIHsKKwlTb3VwTWVzc2FnZSAqbXNnOworfTsKKworLyoqCisg
KiBzb3VwX3JlcXVlc3RfaHR0cF9nZXRfbWVzc2FnZToKKyAqIEBodHRwOiBhICNTb3VwUmVxdWVz
dEhUVFAgb2JqZWN0CisgKgorICogR2V0cyBhIG5ldyByZWZlcmVuY2UgdG8gdGhlICNTb3VwTWVz
c2FnZSBhc3NvY2lhdGVkIHRvIHRoaXMgU291cFJlcXVlc3QKKyAqCisgKiBSZXR1cm5zOiBhIG5l
dyByZWZlcmVuY2UgdG8gdGhlICNTb3VwTWVzc2FnZQorICoqLworU291cE1lc3NhZ2UgKgorc291
cF9yZXF1ZXN0X2h0dHBfZ2V0X21lc3NhZ2UgKFNvdXBSZXF1ZXN0SFRUUCAqaHR0cCkKK3sKKwln
X3JldHVybl92YWxfaWZfZmFpbCAoU09VUF9JU19SRVFVRVNUX0hUVFAgKGh0dHApLCBOVUxMKTsK
KworCXJldHVybiBnX29iamVjdF9yZWYgKGh0dHAtPnByaXYtPm1zZyk7Cit9CisKK3N0YXRpYyB2
b2lkCitzb3VwX3JlcXVlc3RfaHR0cF9pbml0IChTb3VwUmVxdWVzdEhUVFAgKmh0dHApCit7CisJ
aHR0cC0+cHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAoaHR0cCwgU09VUF9UWVBF
X1JFUVVFU1RfSFRUUCwgU291cFJlcXVlc3RIVFRQUHJpdmF0ZSk7Cit9CisKK3N0YXRpYyBnYm9v
bGVhbgorc291cF9yZXF1ZXN0X2h0dHBfY2hlY2tfdXJpIChTb3VwUmVxdWVzdCAgKnJlcXVlc3Qs
CisJCQkgICAgIFNvdXBVUkkgICAgICAqdXJpLAorCQkJICAgICBHRXJyb3IgICAgICAqKmVycm9y
KQoreworCVNvdXBSZXF1ZXN0SFRUUCAqaHR0cCA9IFNPVVBfUkVRVUVTVF9IVFRQIChyZXF1ZXN0
KTsKKworCWlmICghU09VUF9VUklfVkFMSURfRk9SX0hUVFAgKHVyaSkpCisJCXJldHVybiBGQUxT
RTsKKworCWh0dHAtPnByaXYtPm1zZyA9IHNvdXBfbWVzc2FnZV9uZXdfZnJvbV91cmkgKFNPVVBf
TUVUSE9EX0dFVCwgdXJpKTsKKwlyZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQKK3NvdXBf
cmVxdWVzdF9odHRwX2ZpbmFsaXplIChHT2JqZWN0ICpvYmplY3QpCit7CisJU291cFJlcXVlc3RI
VFRQICpodHRwID0gU09VUF9SRVFVRVNUX0hUVFAgKG9iamVjdCk7CisKKwlpZiAoaHR0cC0+cHJp
di0+bXNnKQorCQlnX29iamVjdF91bnJlZiAoaHR0cC0+cHJpdi0+bXNnKTsKKworCUdfT0JKRUNU
X0NMQVNTIChzb3VwX3JlcXVlc3RfaHR0cF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0
KTsKK30KKworc3RhdGljIEdJbnB1dFN0cmVhbSAqCitzb3VwX3JlcXVlc3RfaHR0cF9zZW5kIChT
b3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKKwkJCUdDYW5jZWxsYWJsZSAgICAgICAgICpj
YW5jZWxsYWJsZSwKKwkJCUdFcnJvciAgICAgICAgICAgICAgKiplcnJvcikKK3sKKwlTb3VwSFRU
UElucHV0U3RyZWFtICpodHRwc3RyZWFtOworCVNvdXBSZXF1ZXN0SFRUUCAqaHR0cCA9IFNPVVBf
UkVRVUVTVF9IVFRQIChyZXF1ZXN0KTsKKworCWh0dHBzdHJlYW0gPSBzb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX25ldyAoc291cF9yZXF1ZXN0X2dldF9zZXNzaW9uIChyZXF1ZXN0KSwgaHR0cC0+cHJp
di0+bXNnKTsKKwlpZiAoIXNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZCAoaHR0cHN0cmVhbSwg
Y2FuY2VsbGFibGUsIGVycm9yKSkgeworCQlnX29iamVjdF91bnJlZiAoaHR0cHN0cmVhbSk7CisJ
CXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4gKEdJbnB1dFN0cmVhbSAqKWh0dHBzdHJlYW07Cit9
CisKKworc3RhdGljIHZvaWQKK3NlbnRfYXN5bmMgKEdPYmplY3QgKnNvdXJjZSwgR0FzeW5jUmVz
dWx0ICpyZXN1bHQsIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlTb3VwSFRUUElucHV0U3RyZWFt
ICpodHRwc3RyZWFtID0gU09VUF9IVFRQX0lOUFVUX1NUUkVBTSAoc291cmNlKTsKKwlHU2ltcGxl
QXN5bmNSZXN1bHQgKnNpbXBsZSA9IHVzZXJfZGF0YTsKKwlHRXJyb3IgKmVycm9yID0gTlVMTDsK
KworCWlmIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfZmluaXNoIChodHRwc3RyZWFtLCBy
ZXN1bHQsICZlcnJvcikpIHsKKwkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ3Bv
aW50ZXIgKHNpbXBsZSwgaHR0cHN0cmVhbSwgZ19vYmplY3RfdW5yZWYpOworCX0gZWxzZSB7CisJ
CWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfZnJvbV9lcnJvciAoc2ltcGxlLCBlcnJvcik7CisJ
CWdfZXJyb3JfZnJlZSAoZXJyb3IpOworCQlnX29iamVjdF91bnJlZiAoaHR0cHN0cmVhbSk7CisJ
fQorCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZSAoc2ltcGxlKTsKKwlnX29iamVjdF91
bnJlZiAoc2ltcGxlKTsKK30KKworCit0eXBlZGVmIHN0cnVjdCB7CisJU291cFJlcXVlc3RIVFRQ
ICpyZXE7CisJU291cE1lc3NhZ2UgKm9yaWdpbmFsOworCUdDYW5jZWxsYWJsZSAqY2FuY2VsbGFi
bGU7CisJR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjazsKKwlncG9pbnRlciB1c2VyX2RhdGE7
Cit9IENvbmRpdGlvbmFsSGVscGVyOworCisKK3N0YXRpYyB2b2lkCitjb25kaXRpb25hbF9nZXRf
cmVhZHlfY2IgKFNvdXBTZXNzaW9uICpzZXNzaW9uLCBTb3VwTWVzc2FnZSAqbXNnLCBncG9pbnRl
ciB1c2VyX2RhdGEpCit7CisJQ29uZGl0aW9uYWxIZWxwZXIgKmhlbHBlciA9IChDb25kaXRpb25h
bEhlbHBlciAqKSB1c2VyX2RhdGE7CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpzaW1wbGU7CisJU291
cEhUVFBJbnB1dFN0cmVhbSAqaHR0cHN0cmVhbTsKKworCXNpbXBsZSA9IGdfc2ltcGxlX2FzeW5j
X3Jlc3VsdF9uZXcgKEdfT0JKRUNUIChoZWxwZXItPnJlcSksCisJCQkJCSAgICBoZWxwZXItPmNh
bGxiYWNrLCBoZWxwZXItPnVzZXJfZGF0YSwKKwkJCQkJICAgIGNvbmRpdGlvbmFsX2dldF9yZWFk
eV9jYik7CisKKyAgICAgICAgaWYgKG1zZy0+c3RhdHVzX2NvZGUgPT0gU09VUF9TVEFUVVNfTk9U
X01PRElGSUVEKSB7CisJCVdlYktpdFNvdXBDYWNoZSAqY2FjaGUgPSAoV2ViS2l0U291cENhY2hl
ICopIHNvdXBfc2Vzc2lvbl9nZXRfZmVhdHVyZSAoc2Vzc2lvbiwgV0VCS0lUX1RZUEVfU09VUF9D
QUNIRSk7CisKKyAgICAgICAgICAgICAgICBodHRwc3RyZWFtID0gKFNvdXBIVFRQSW5wdXRTdHJl
YW0gKikgd2Via2l0X3NvdXBfY2FjaGVfc2VuZF9yZXNwb25zZSAoY2FjaGUsIG1zZyk7CisJCWlm
IChodHRwc3RyZWFtKSB7CisJCQljb25zdCBnY2hhciAqY29udGVudF90eXBlOworCisJCQlnX3Np
bXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19ncG9pbnRlciAoc2ltcGxlLCBodHRwc3RyZWFt
LCBnX29iamVjdF91bnJlZik7CisKKwkJCXNvdXBfbWVzc2FnZV9nb3RfaGVhZGVycyAoaGVscGVy
LT5vcmlnaW5hbCk7CisJCQljb250ZW50X3R5cGUgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRf
Y29udGVudF90eXBlIChtc2ctPnJlc3BvbnNlX2hlYWRlcnMsIE5VTEwpOworCQkJc291cF9tZXNz
YWdlX2NvbnRlbnRfc25pZmZlZCAoaGVscGVyLT5vcmlnaW5hbCwgY29udGVudF90eXBlLCBOVUxM
KTsKKworCQkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlIChzaW1wbGUpOworCisJCQlz
b3VwX21lc3NhZ2VfZmluaXNoZWQgKGhlbHBlci0+b3JpZ2luYWwpOworCisJCQlnX29iamVjdF91
bnJlZiAoc2ltcGxlKTsKKwkJfSBlbHNlIHsKKwkJCS8qIEFzayBhZ2FpbiBmb3IgdGhlIHJlc291
cmNlLCBzb21laG93IHRoZSBjYWNoZSBjYW5ub3QgbG9jYXRlIGl0ICovCisJCQlodHRwc3RyZWFt
ID0gc291cF9odHRwX2lucHV0X3N0cmVhbV9uZXcgKHNlc3Npb24sIGhlbHBlci0+b3JpZ2luYWwp
OworCQkJc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jIChodHRwc3RyZWFtLCBHX1BS
SU9SSVRZX0RFRkFVTFQsCisJCQkJCQkJICAgaGVscGVyLT5jYW5jZWxsYWJsZSwgc2VudF9hc3lu
Yywgc2ltcGxlKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIEl0IGlzIGluIHRoZSBjYWNoZSBidXQg
aXQgd2FzIG1vZGlmaWVkIHJlbW90ZWx5ICovCisJCWh0dHBzdHJlYW0gPSBzb3VwX2h0dHBfaW5w
dXRfc3RyZWFtX25ldyAoc2Vzc2lvbiwgaGVscGVyLT5vcmlnaW5hbCk7CisJCXNvdXBfaHR0cF9p
bnB1dF9zdHJlYW1fc2VuZF9hc3luYyAoaHR0cHN0cmVhbSwgR19QUklPUklUWV9ERUZBVUxULAor
CQkJCQkJICAgaGVscGVyLT5jYW5jZWxsYWJsZSwgc2VudF9hc3luYywgc2ltcGxlKTsKKwl9CisK
KwlnX29iamVjdF91bnJlZiAoaGVscGVyLT5yZXEpOworCWdfb2JqZWN0X3VucmVmIChoZWxwZXIt
Pm9yaWdpbmFsKTsKKwlnX3NsaWNlX2ZyZWUgKENvbmRpdGlvbmFsSGVscGVyLCBoZWxwZXIpOwor
fQorCit0eXBlZGVmIHN0cnVjdCB7CisJU291cFJlcXVlc3RIVFRQICpodHRwOworCUdBc3luY1Jl
YWR5Q2FsbGJhY2sgY2FsbGJhY2s7CisJZ3BvaW50ZXIgdXNlcl9kYXRhOworfSBTZW5kQXN5bmNI
ZWxwZXI7CisKK3N0YXRpYyB2b2lkIHNvdXBfcmVxdWVzdF9odHRwX3NlbmRfYXN5bmMgKFNvdXBS
ZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAorCQkJCQkgIEdDYW5jZWxsYWJsZSAgICAgICAgICpj
YW5jZWxsYWJsZSwKKwkJCQkJICBHQXN5bmNSZWFkeUNhbGxiYWNrICAgY2FsbGJhY2ssCisJCQkJ
CSAgZ3BvaW50ZXIgICAgICAgICAgICAgIHVzZXJfZGF0YSk7CisKK3N0YXRpYyBnYm9vbGVhbgor
c2VuZF9hc3luY19jYiAoZ3BvaW50ZXIgZGF0YSkKK3sKKwlHU2ltcGxlQXN5bmNSZXN1bHQgKnNp
bXBsZTsKKwlTb3VwSFRUUElucHV0U3RyZWFtICpodHRwc3RyZWFtOworCVNvdXBTZXNzaW9uICpz
ZXNzaW9uOworCVdlYktpdFNvdXBDYWNoZSAqY2FjaGU7CisJU2VuZEFzeW5jSGVscGVyICpoZWxw
ZXIgPSAoU2VuZEFzeW5jSGVscGVyICopIGRhdGE7CisKKwlzZXNzaW9uID0gc291cF9yZXF1ZXN0
X2dldF9zZXNzaW9uIChTT1VQX1JFUVVFU1QoaGVscGVyLT5odHRwKSk7CisJY2FjaGUgPSAoV2Vi
S2l0U291cENhY2hlICopIHNvdXBfc2Vzc2lvbl9nZXRfZmVhdHVyZSAoc2Vzc2lvbiwgV0VCS0lU
X1RZUEVfU09VUF9DQUNIRSk7CisKKwlodHRwc3RyZWFtID0gKFNvdXBIVFRQSW5wdXRTdHJlYW0g
Kikgd2Via2l0X3NvdXBfY2FjaGVfc2VuZF9yZXNwb25zZSAoY2FjaGUsIFNPVVBfTUVTU0FHRSAo
aGVscGVyLT5odHRwLT5wcml2LT5tc2cpKTsKKworCWlmIChodHRwc3RyZWFtKSB7CisJCWNvbnN0
IGdjaGFyICpjb250ZW50X3R5cGU7CisKKwkJc2ltcGxlID0gZ19zaW1wbGVfYXN5bmNfcmVzdWx0
X25ldyAoR19PQkpFQ1QgKGhlbHBlci0+aHR0cCksCisJCQkJCQkgICAgaGVscGVyLT5jYWxsYmFj
aywgaGVscGVyLT51c2VyX2RhdGEsCisJCQkJCQkgICAgc291cF9yZXF1ZXN0X2h0dHBfc2VuZF9h
c3luYyk7CisJCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dwb2ludGVyIChzaW1w
bGUsIGh0dHBzdHJlYW0sIGdfb2JqZWN0X3VucmVmKTsKKworCQkvKiBVcGRhdGUgbWVzc2FnZSBz
dGF0dXMgKi8KKwkJc291cF9tZXNzYWdlX3NldF9zdGF0dXMgKGhlbHBlci0+aHR0cC0+cHJpdi0+
bXNnLCBTT1VQX1NUQVRVU19PSyk7CisKKwkJLyogSXNzdWUgc2lnbmFscyAgKi8KKwkJc291cF9t
ZXNzYWdlX2dvdF9oZWFkZXJzIChoZWxwZXItPmh0dHAtPnByaXYtPm1zZyk7CisJCWNvbnRlbnRf
dHlwZSA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9jb250ZW50X3R5cGUgKGhlbHBlci0+aHR0
cC0+cHJpdi0+bXNnLT5yZXNwb25zZV9oZWFkZXJzLCBOVUxMKTsKKwkJc291cF9tZXNzYWdlX2Nv
bnRlbnRfc25pZmZlZCAoaGVscGVyLT5odHRwLT5wcml2LT5tc2csIGNvbnRlbnRfdHlwZSwgTlVM
TCk7CisKKwkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlIChzaW1wbGUpOworCisJCXNv
dXBfbWVzc2FnZV9maW5pc2hlZCAoaGVscGVyLT5odHRwLT5wcml2LT5tc2cpOworCisJCWdfb2Jq
ZWN0X3VucmVmIChzaW1wbGUpOworCX0KKworCWdfc2xpY2VfZnJlZSAoU2VuZEFzeW5jSGVscGVy
LCBoZWxwZXIpOworCisJcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZAorc291cF9yZXF1
ZXN0X2h0dHBfc2VuZF9hc3luYyAoU291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCisJCQkg
ICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkgICAgICBHQXN5bmNS
ZWFkeUNhbGxiYWNrICAgY2FsbGJhY2ssCisJCQkgICAgICBncG9pbnRlciAgICAgICAgICAgICAg
dXNlcl9kYXRhKQoreworCVNvdXBSZXF1ZXN0SFRUUCAqaHR0cCA9IFNPVVBfUkVRVUVTVF9IVFRQ
IChyZXF1ZXN0KTsKKwlTb3VwSFRUUElucHV0U3RyZWFtICpodHRwc3RyZWFtOworCUdTaW1wbGVB
c3luY1Jlc3VsdCAqc2ltcGxlOworCVNvdXBTZXNzaW9uICpzZXNzaW9uOworCVdlYktpdFNvdXBD
YWNoZSAqY2FjaGU7CisKKwlzZXNzaW9uID0gc291cF9yZXF1ZXN0X2dldF9zZXNzaW9uIChyZXF1
ZXN0KTsKKwljYWNoZSA9IChXZWJLaXRTb3VwQ2FjaGUgKikgc291cF9zZXNzaW9uX2dldF9mZWF0
dXJlIChzZXNzaW9uLCBXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFKTsKKworCWlmIChjYWNoZSkgewor
CQlXZWJLaXRTb3VwQ2FjaGVSZXNwb25zZSByZXNwb25zZTsKKworCQlyZXNwb25zZSA9IHdlYmtp
dF9zb3VwX2NhY2hlX2hhc19yZXNwb25zZSAoY2FjaGUsIGh0dHAtPnByaXYtPm1zZyk7CisJCWlm
IChyZXNwb25zZSA9PSBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9GUkVTSCkgeworCQkJLyog
RG8gcmV0dXJuIHRoZSBzdHJlYW0gYXN5bmNocm9ub3VzbHkgYXMgaW4KKwkJCSAgIHRoZSBvdGhl
ciBjYXNlcy4gSXQncyBub3QgZW5vdWdoIHRvIHVzZQorCQkJICAgZ19zaW1wbGVfYXN5bmNfcmVz
dWx0X2NvbXBsZXRlX2luX2lkbGUgYXMKKwkJCSAgIHRoZSBzaWduYWxzIG11c3QgYmUgYWxzbyBl
bWl0dGVkCisJCQkgICBhc3luY2hyb25vdXNseSAqLworCQkJU2VuZEFzeW5jSGVscGVyICpoZWxw
ZXIgPSBnX3NsaWNlX25ldyAoU2VuZEFzeW5jSGVscGVyKTsKKwkJCWhlbHBlci0+aHR0cCA9IGh0
dHA7CisJCQloZWxwZXItPmNhbGxiYWNrID0gY2FsbGJhY2s7CisJCQloZWxwZXItPnVzZXJfZGF0
YSA9IHVzZXJfZGF0YTsKKwkJCWdfdGltZW91dF9hZGQgKDAsIHNlbmRfYXN5bmNfY2IsIGhlbHBl
cik7CisJCQlyZXR1cm47CisJCX0gZWxzZSBpZiAocmVzcG9uc2UgPT0gV0VCS0lUX1NPVVBfQ0FD
SEVfUkVTUE9OU0VfTkVFRFNfVkFMSURBVElPTikgeworCQkJU291cE1lc3NhZ2UgKmNvbmRpdGlv
bmFsX21zZzsKKwkJCUNvbmRpdGlvbmFsSGVscGVyICpoZWxwZXI7CisKKwkJCWNvbmRpdGlvbmFs
X21zZyA9IHdlYmtpdF9zb3VwX2NhY2hlX2dlbmVyYXRlX2NvbmRpdGlvbmFsX3JlcXVlc3QgKGNh
Y2hlLCBodHRwLT5wcml2LT5tc2cpOworCisJCQloZWxwZXIgPSBnX3NsaWNlX25ldzAgKENvbmRp
dGlvbmFsSGVscGVyKTsKKwkJCWhlbHBlci0+cmVxID0gZ19vYmplY3RfcmVmIChodHRwKTsKKwkJ
CWhlbHBlci0+b3JpZ2luYWwgPSBnX29iamVjdF9yZWYgKGh0dHAtPnByaXYtPm1zZyk7CisJCQlo
ZWxwZXItPmNhbmNlbGxhYmxlID0gY2FuY2VsbGFibGU7CisJCQloZWxwZXItPmNhbGxiYWNrID0g
Y2FsbGJhY2s7CisJCQloZWxwZXItPnVzZXJfZGF0YSA9IHVzZXJfZGF0YTsKKwkJCXNvdXBfc2Vz
c2lvbl9xdWV1ZV9tZXNzYWdlIChzZXNzaW9uLCBjb25kaXRpb25hbF9tc2csCisJCQkJCQkgICAg
Y29uZGl0aW9uYWxfZ2V0X3JlYWR5X2NiLAorCQkJCQkJICAgIGhlbHBlcik7CisJCQlyZXR1cm47
CisJCX0KKwl9CisKKwlzaW1wbGUgPSBnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3IChHX09CSkVD
VCAoaHR0cCksCisJCQkJCSAgICBjYWxsYmFjaywgdXNlcl9kYXRhLAorCQkJCQkgICAgc291cF9y
ZXF1ZXN0X2h0dHBfc2VuZF9hc3luYyk7CisJaHR0cHN0cmVhbSA9IHNvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fbmV3IChzb3VwX3JlcXVlc3RfZ2V0X3Nlc3Npb24gKHJlcXVlc3QpLAorCQkJCQkJIGh0
dHAtPnByaXYtPm1zZyk7CisJc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jIChodHRw
c3RyZWFtLCBHX1BSSU9SSVRZX0RFRkFVTFQsCisJCQkJCSAgIGNhbmNlbGxhYmxlLCBzZW50X2Fz
eW5jLCBzaW1wbGUpOworfQorCitzdGF0aWMgR0lucHV0U3RyZWFtICoKK3NvdXBfcmVxdWVzdF9o
dHRwX3NlbmRfZmluaXNoIChTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKKwkJCSAgICAg
IEdBc3luY1Jlc3VsdCAgICAgICAgICpyZXN1bHQsCisJCQkgICAgICBHRXJyb3IgICAgICAgICAg
ICAgICoqZXJyb3IpCit7CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpzaW1wbGU7CisKKwlnX3JldHVy
bl92YWxfaWZfZmFpbCAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2lzX3ZhbGlkIChyZXN1bHQsIEdf
T0JKRUNUIChyZXF1ZXN0KSwgc291cF9yZXF1ZXN0X2h0dHBfc2VuZF9hc3luYykgfHwgZ19zaW1w
bGVfYXN5bmNfcmVzdWx0X2lzX3ZhbGlkIChyZXN1bHQsIEdfT0JKRUNUIChyZXF1ZXN0KSwgY29u
ZGl0aW9uYWxfZ2V0X3JlYWR5X2NiKSwgTlVMTCk7CisKKwlzaW1wbGUgPSBHX1NJTVBMRV9BU1lO
Q19SRVNVTFQgKHJlc3VsdCk7CisJaWYgKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9wcm9wYWdhdGVf
ZXJyb3IgKHNpbXBsZSwgZXJyb3IpKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gZ19vYmplY3Rf
cmVmIChnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X29wX3Jlc19ncG9pbnRlciAoc2ltcGxlKSk7
Cit9CisKK3N0YXRpYyBnb2Zmc2V0Citzb3VwX3JlcXVlc3RfaHR0cF9nZXRfY29udGVudF9sZW5n
dGggKFNvdXBSZXF1ZXN0ICpyZXF1ZXN0KQoreworCVNvdXBSZXF1ZXN0SFRUUCAqaHR0cCA9IFNP
VVBfUkVRVUVTVF9IVFRQIChyZXF1ZXN0KTsKKworCXJldHVybiBzb3VwX21lc3NhZ2VfaGVhZGVy
c19nZXRfY29udGVudF9sZW5ndGggKGh0dHAtPnByaXYtPm1zZy0+cmVzcG9uc2VfaGVhZGVycyk7
Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK3NvdXBfcmVxdWVzdF9odHRwX2dldF9jb250ZW50
X3R5cGUgKFNvdXBSZXF1ZXN0ICpyZXF1ZXN0KQoreworCVNvdXBSZXF1ZXN0SFRUUCAqaHR0cCA9
IFNPVVBfUkVRVUVTVF9IVFRQIChyZXF1ZXN0KTsKKworCXJldHVybiBzb3VwX21lc3NhZ2VfaGVh
ZGVyc19nZXRfY29udGVudF90eXBlIChodHRwLT5wcml2LT5tc2ctPnJlc3BvbnNlX2hlYWRlcnMs
IE5VTEwpOworfQorCitzdGF0aWMgdm9pZAorc291cF9yZXF1ZXN0X2h0dHBfY2xhc3NfaW5pdCAo
U291cFJlcXVlc3RIVFRQQ2xhc3MgKnJlcXVlc3RfaHR0cF9jbGFzcykKK3sKKwlHT2JqZWN0Q2xh
c3MgKm9iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChyZXF1ZXN0X2h0dHBfY2xhc3MpOwor
CVNvdXBSZXF1ZXN0Q2xhc3MgKnJlcXVlc3RfY2xhc3MgPQorCQlTT1VQX1JFUVVFU1RfQ0xBU1Mg
KHJlcXVlc3RfaHR0cF9jbGFzcyk7CisKKwlnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUgKHJlcXVl
c3RfaHR0cF9jbGFzcywgc2l6ZW9mIChTb3VwUmVxdWVzdEhUVFBQcml2YXRlKSk7CisKKwlvYmpl
Y3RfY2xhc3MtPmZpbmFsaXplID0gc291cF9yZXF1ZXN0X2h0dHBfZmluYWxpemU7CisKKwlyZXF1
ZXN0X2NsYXNzLT5jaGVja191cmkgPSBzb3VwX3JlcXVlc3RfaHR0cF9jaGVja191cmk7CisJcmVx
dWVzdF9jbGFzcy0+c2VuZCA9IHNvdXBfcmVxdWVzdF9odHRwX3NlbmQ7CisJcmVxdWVzdF9jbGFz
cy0+c2VuZF9hc3luYyA9IHNvdXBfcmVxdWVzdF9odHRwX3NlbmRfYXN5bmM7CisJcmVxdWVzdF9j
bGFzcy0+c2VuZF9maW5pc2ggPSBzb3VwX3JlcXVlc3RfaHR0cF9zZW5kX2ZpbmlzaDsKKwlyZXF1
ZXN0X2NsYXNzLT5nZXRfY29udGVudF9sZW5ndGggPSBzb3VwX3JlcXVlc3RfaHR0cF9nZXRfY29u
dGVudF9sZW5ndGg7CisJcmVxdWVzdF9jbGFzcy0+Z2V0X2NvbnRlbnRfdHlwZSA9IHNvdXBfcmVx
dWVzdF9odHRwX2dldF9jb250ZW50X3R5cGU7Cit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtaHR0cC5oIGIvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGQxMDlkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuaApAQCAtMCww
ICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJlZCBIYXQsIEluYy4KKyAqIENv
cHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBTT1VQX1JFUVVFU1RfSFRUUF9I
CisjZGVmaW5lIFNPVVBfUkVRVUVTVF9IVFRQX0ggMQorCisjaW5jbHVkZSAic291cC1yZXF1ZXN0
LmgiCisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBTT1VQX1RZUEVfUkVRVUVTVF9IVFRQICAg
ICAgICAgICAgKHNvdXBfcmVxdWVzdF9odHRwX2dldF90eXBlICgpKQorI2RlZmluZSBTT1VQX1JF
UVVFU1RfSFRUUChvYmplY3QpICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgo
b2JqZWN0KSwgU09VUF9UWVBFX1JFUVVFU1RfSFRUUCwgU291cFJlcXVlc3RIVFRQKSkKKyNkZWZp
bmUgU09VUF9SRVFVRVNUX0hUVFBfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
Q0FTVCAoKGtsYXNzKSwgU09VUF9UWVBFX1JFUVVFU1RfSFRUUCwgU291cFJlcXVlc3RIVFRQQ2xh
c3MpKQorI2RlZmluZSBTT1VQX0lTX1JFUVVFU1RfSFRUUChvYmplY3QpICAgICAgKEdfVFlQRV9D
SEVDS19JTlNUQU5DRV9UWVBFICgob2JqZWN0KSwgU09VUF9UWVBFX1JFUVVFU1RfSFRUUCkpCisj
ZGVmaW5lIFNPVVBfSVNfUkVRVUVTVF9IVFRQX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NM
QVNTX1RZUEUgKChrbGFzcyksIFNPVVBfVFlQRV9SRVFVRVNUX0hUVFApKQorI2RlZmluZSBTT1VQ
X1JFUVVFU1RfSFRUUF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1Mg
KChvYmopLCBTT1VQX1RZUEVfUkVRVUVTVF9IVFRQLCBTb3VwUmVxdWVzdEhUVFBDbGFzcykpCisK
K3R5cGVkZWYgc3RydWN0IF9Tb3VwUmVxdWVzdEhUVFBQcml2YXRlIFNvdXBSZXF1ZXN0SFRUUFBy
aXZhdGU7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlTb3VwUmVxdWVzdCBwYXJlbnQ7CisKKwlTb3Vw
UmVxdWVzdEhUVFBQcml2YXRlICpwcml2OworfSBTb3VwUmVxdWVzdEhUVFA7CisKK3R5cGVkZWYg
c3RydWN0IHsKKwlTb3VwUmVxdWVzdENsYXNzIHBhcmVudDsKKworfSBTb3VwUmVxdWVzdEhUVFBD
bGFzczsKKworR1R5cGUgc291cF9yZXF1ZXN0X2h0dHBfZ2V0X3R5cGUgKHZvaWQpOworCitTb3Vw
TWVzc2FnZSAgKnNvdXBfcmVxdWVzdF9odHRwX2dldF9tZXNzYWdlICAoU291cFJlcXVlc3RIVFRQ
ICpodHRwKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFNPVVBfUkVRVUVTVF9IVFRQX0gg
Ki8KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAt
cmVxdWVzdC5jIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1
ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY3NWU2MAotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVx
dWVzdC5jCkBAIC0wLDAgKzEsMjgwIEBACisvKgorICogc291cC1yZXF1ZXN0LmM6IFByb3RvY29s
LWluZGVwZW5kZW50IHN0cmVhbWluZyByZXF1ZXN0IGludGVyZmFjZQorICoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIElnYWxpYSBT
LkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKwor
I2luY2x1ZGUgPGdsaWIvZ2kxOG4uaD4KKworI2luY2x1ZGUgInNvdXAtcmVxdWVzdC5oIgorI2lu
Y2x1ZGUgInNvdXAtcmVxdWVzdGVyLmgiCisKKy8qKgorICogU0VDVElPTjpzb3VwLXJlcXVlc3QK
KyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogUHJvdG9jb2wtaW5kZXBlbmRlbnQgc3RyZWFtaW5nIHJl
cXVlc3QgaW50ZXJmYWNlCisgKgorICogRklYTUUKKyAqKi8KKworLyoqCisgKiBTb3VwUmVxdWVz
dDoKKyAqCisgKiBGSVhNRQorICoKKyAqIFNpbmNlOiAyLjMwCisgKiovCisKK3N0YXRpYyB2b2lk
IHNvdXBfcmVxdWVzdF9pbml0YWJsZV9pbnRlcmZhY2VfaW5pdCAoR0luaXRhYmxlSWZhY2UgKmlu
aXRhYmxlX2ludGVyZmFjZSk7CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChTb3VwUmVxdWVz
dCwgc291cF9yZXF1ZXN0LCBHX1RZUEVfT0JKRUNULAorCQkJIEdfSU1QTEVNRU5UX0lOVEVSRkFD
RSAoR19UWVBFX0lOSVRBQkxFLAorCQkJCQkJc291cF9yZXF1ZXN0X2luaXRhYmxlX2ludGVyZmFj
ZV9pbml0KSkKKworZW51bSB7CisJUFJPUF8wLAorCVBST1BfVVJJLAorCVBST1BfU0VTU0lPTgor
fTsKKworc3RydWN0IF9Tb3VwUmVxdWVzdFByaXZhdGUgeworCVNvdXBVUkkgKnVyaTsKKwlTb3Vw
U2Vzc2lvbiAqc2Vzc2lvbjsKKworfTsKKworc3RhdGljIHZvaWQKK3NvdXBfcmVxdWVzdF9pbml0
IChTb3VwUmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlyZXF1ZXN0LT5wcml2ID0gR19UWVBFX0lOU1RB
TkNFX0dFVF9QUklWQVRFIChyZXF1ZXN0LCBTT1VQX1RZUEVfUkVRVUVTVCwgU291cFJlcXVlc3RQ
cml2YXRlKTsKK30KKworc3RhdGljIHZvaWQKK3NvdXBfcmVxdWVzdF9maW5hbGl6ZSAoR09iamVj
dCAqb2JqZWN0KQoreworCVNvdXBSZXF1ZXN0ICpyZXF1ZXN0ID0gU09VUF9SRVFVRVNUIChvYmpl
Y3QpOworCisJaWYgKHJlcXVlc3QtPnByaXYtPnVyaSkKKwkJc291cF91cmlfZnJlZSAocmVxdWVz
dC0+cHJpdi0+dXJpKTsKKwlpZiAocmVxdWVzdC0+cHJpdi0+c2Vzc2lvbikKKwkJZ19vYmplY3Rf
dW5yZWYgKHJlcXVlc3QtPnByaXYtPnNlc3Npb24pOworCisJR19PQkpFQ1RfQ0xBU1MgKHNvdXBf
cmVxdWVzdF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKK30KKworc3RhdGljIHZv
aWQKK3NvdXBfcmVxdWVzdF9zZXRfcHJvcGVydHkgKEdPYmplY3QgICAgICAqb2JqZWN0LAorCQkJ
ICAgZ3VpbnQgICAgICAgICBwcm9wX2lkLAorCQkJICAgY29uc3QgR1ZhbHVlICp2YWx1ZSwKKwkJ
CSAgIEdQYXJhbVNwZWMgICAqcHNwZWMpCit7CisJU291cFJlcXVlc3QgKnJlcXVlc3QgPSBTT1VQ
X1JFUVVFU1QgKG9iamVjdCk7CisKKwlzd2l0Y2ggKHByb3BfaWQpIHsKKwljYXNlIFBST1BfVVJJ
OgorCQlpZiAocmVxdWVzdC0+cHJpdi0+dXJpKQorCQkJc291cF91cmlfZnJlZSAocmVxdWVzdC0+
cHJpdi0+dXJpKTsKKwkJcmVxdWVzdC0+cHJpdi0+dXJpID0gZ192YWx1ZV9kdXBfYm94ZWQgKHZh
bHVlKTsKKwkJYnJlYWs7CisJY2FzZSBQUk9QX1NFU1NJT046CisJCWlmIChyZXF1ZXN0LT5wcml2
LT5zZXNzaW9uKQorCQkJZ19vYmplY3RfdW5yZWYgKHJlcXVlc3QtPnByaXYtPnNlc3Npb24pOwor
CQlyZXF1ZXN0LT5wcml2LT5zZXNzaW9uID0gZ192YWx1ZV9kdXBfb2JqZWN0ICh2YWx1ZSk7CisJ
CWJyZWFrOworCWRlZmF1bHQ6CisJCUdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAo
b2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQK
K3NvdXBfcmVxdWVzdF9nZXRfcHJvcGVydHkgKEdPYmplY3QgICAgKm9iamVjdCwKKwkJCSAgIGd1
aW50ICAgICAgIHByb3BfaWQsCisJCQkgICBHVmFsdWUgICAgICp2YWx1ZSwKKwkJCSAgIEdQYXJh
bVNwZWMgKnBzcGVjKQoreworCVNvdXBSZXF1ZXN0ICpyZXF1ZXN0ID0gU09VUF9SRVFVRVNUIChv
YmplY3QpOworCisJc3dpdGNoIChwcm9wX2lkKSB7CisJY2FzZSBQUk9QX1VSSToKKwkJZ192YWx1
ZV9zZXRfYm94ZWQgKHZhbHVlLCByZXF1ZXN0LT5wcml2LT51cmkpOworCQlicmVhazsKKwljYXNl
IFBST1BfU0VTU0lPTjoKKwkJZ192YWx1ZV9zZXRfb2JqZWN0ICh2YWx1ZSwgcmVxdWVzdC0+cHJp
di0+c2Vzc2lvbik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUdfT0JKRUNUX1dBUk5fSU5WQUxJ
RF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisJCWJyZWFrOworCX0KK30K
Kworc3RhdGljIGdib29sZWFuCitzb3VwX3JlcXVlc3RfaW5pdGFibGVfaW5pdCAoR0luaXRhYmxl
ICAgICAqaW5pdGFibGUsCisJCQkgICAgR0NhbmNlbGxhYmxlICAqY2FuY2VsbGFibGUsCisJCQkg
ICAgR0Vycm9yICAgICAgICoqZXJyb3IpCit7CisJU291cFJlcXVlc3QgKnJlcXVlc3QgPSBTT1VQ
X1JFUVVFU1QgKGluaXRhYmxlKTsKKwlnYm9vbGVhbiBvazsKKworCWlmICghcmVxdWVzdC0+cHJp
di0+dXJpKSB7CisJCWdfc2V0X2Vycm9yIChlcnJvciwgU09VUF9FUlJPUiwgU09VUF9FUlJPUl9C
QURfVVJJLAorCQkJICAgICBfKCJObyBVUkkgcHJvdmlkZWQiKSk7CisJCXJldHVybiBGQUxTRTsK
Kwl9CisKKwlvayA9IFNPVVBfUkVRVUVTVF9HRVRfQ0xBU1MgKGluaXRhYmxlKS0+CisJCWNoZWNr
X3VyaSAocmVxdWVzdCwgcmVxdWVzdC0+cHJpdi0+dXJpLCBlcnJvcik7CisKKwlpZiAoIW9rICYm
IGVycm9yKSB7CisJCWNoYXIgKnVyaV9zdHJpbmcgPSBzb3VwX3VyaV90b19zdHJpbmcgKHJlcXVl
c3QtPnByaXYtPnVyaSwgRkFMU0UpOworCQlnX3NldF9lcnJvciAoZXJyb3IsIFNPVVBfRVJST1Is
IFNPVVBfRVJST1JfQkFEX1VSSSwKKwkJCSAgICAgXygiSW52YWxpZCAnJXMnIFVSSTogJXMiKSwK
KwkJCSAgICAgcmVxdWVzdC0+cHJpdi0+dXJpLT5zY2hlbWUsCisJCQkgICAgIHVyaV9zdHJpbmcp
OworCQlnX2ZyZWUgKHVyaV9zdHJpbmcpOworCX0KKworCXJldHVybiBvazsKK30KKworc3RhdGlj
IGdib29sZWFuCitzb3VwX3JlcXVlc3RfZGVmYXVsdF9jaGVja191cmkgKFNvdXBSZXF1ZXN0ICAq
cmVxdWVzdCwKKwkJCQlTb3VwVVJJICAgICAgKnVyaSwKKwkJCQlHRXJyb3IgICAgICAqKmVycm9y
KQoreworCXJldHVybiBUUlVFOworfQorCisvKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uOiBhc3N1
bWUgdGhlIHN5bmMgaW1wbGVtZW50YXRpb24gZG9lc24ndCBibG9jayAqLworc3RhdGljIHZvaWQK
K3NvdXBfcmVxdWVzdF9kZWZhdWx0X3NlbmRfYXN5bmMgIChTb3VwUmVxdWVzdCAgICAgICAgICAq
cmVxdWVzdCwKKwkJCQkgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkg
IEdBc3luY1JlYWR5Q2FsbGJhY2sgICBjYWxsYmFjaywKKwkJCQkgIGdwb2ludGVyICAgICAgICAg
ICAgICB1c2VyX2RhdGEpCit7CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpzaW1wbGU7CisKKwlzaW1w
bGUgPSBnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3IChHX09CSkVDVCAocmVxdWVzdCksCisJCQkJ
CSAgICBjYWxsYmFjaywgdXNlcl9kYXRhLAorCQkJCQkgICAgc291cF9yZXF1ZXN0X2RlZmF1bHRf
c2VuZF9hc3luYyk7CisJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlX2luX2lkbGUgKHNp
bXBsZSk7CisJZ19vYmplY3RfdW5yZWYgKHNpbXBsZSk7Cit9CisKK3N0YXRpYyBHSW5wdXRTdHJl
YW0gKgorc291cF9yZXF1ZXN0X2RlZmF1bHRfc2VuZF9maW5pc2ggKFNvdXBSZXF1ZXN0ICAgICAg
ICAgICpyZXF1ZXN0LAorCQkJCSAgR0FzeW5jUmVzdWx0ICAgICAgICAgKnJlc3VsdCwKKwkJCQkg
IEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcikKK3sKKwlnX3JldHVybl92YWxfaWZfZmFpbCAo
Z19zaW1wbGVfYXN5bmNfcmVzdWx0X2lzX3ZhbGlkIChyZXN1bHQsIEdfT0JKRUNUIChyZXF1ZXN0
KSwgc291cF9yZXF1ZXN0X2RlZmF1bHRfc2VuZF9hc3luYyksIE5VTEwpOworCisJcmV0dXJuIHNv
dXBfcmVxdWVzdF9zZW5kIChyZXF1ZXN0LCBOVUxMLCBlcnJvcik7CQorfQorCitHSW5wdXRTdHJl
YW0gKgorc291cF9yZXF1ZXN0X3NlbmQgKFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAor
CQkgICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCSAgIEdFcnJvciAgICAg
ICAgICAgICAgKiplcnJvcikKK3sKKwlyZXR1cm4gU09VUF9SRVFVRVNUX0dFVF9DTEFTUyAocmVx
dWVzdCktPgorCQlzZW5kIChyZXF1ZXN0LCBjYW5jZWxsYWJsZSwgZXJyb3IpOworfQorCit2b2lk
Citzb3VwX3JlcXVlc3Rfc2VuZF9hc3luYyAoU291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3Qs
CisJCQkgR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJIEdBc3luY1JlYWR5
Q2FsbGJhY2sgICBjYWxsYmFjaywKKwkJCSBncG9pbnRlciAgICAgICAgICAgICAgdXNlcl9kYXRh
KQoreworCVNPVVBfUkVRVUVTVF9HRVRfQ0xBU1MgKHJlcXVlc3QpLT4KKwkJc2VuZF9hc3luYyAo
cmVxdWVzdCwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyX2RhdGEpOworfQorCitHSW5wdXRT
dHJlYW0gKgorc291cF9yZXF1ZXN0X3NlbmRfZmluaXNoIChTb3VwUmVxdWVzdCAgICAgICAgICAq
cmVxdWVzdCwKKwkJCSAgR0FzeW5jUmVzdWx0ICAgICAgICAgKnJlc3VsdCwKKwkJCSAgR0Vycm9y
ICAgICAgICAgICAgICAqKmVycm9yKQoreworCXJldHVybiBTT1VQX1JFUVVFU1RfR0VUX0NMQVNT
IChyZXF1ZXN0KS0+CisJCXNlbmRfZmluaXNoIChyZXF1ZXN0LCByZXN1bHQsIGVycm9yKTsKK30K
Kworc3RhdGljIHZvaWQKK3NvdXBfcmVxdWVzdF9jbGFzc19pbml0IChTb3VwUmVxdWVzdENsYXNz
ICpyZXF1ZXN0X2NsYXNzKQoreworCUdPYmplY3RDbGFzcyAqb2JqZWN0X2NsYXNzID0gR19PQkpF
Q1RfQ0xBU1MgKHJlcXVlc3RfY2xhc3MpOworCisJZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlIChy
ZXF1ZXN0X2NsYXNzLCBzaXplb2YgKFNvdXBSZXF1ZXN0UHJpdmF0ZSkpOworCisJcmVxdWVzdF9j
bGFzcy0+Y2hlY2tfdXJpID0gc291cF9yZXF1ZXN0X2RlZmF1bHRfY2hlY2tfdXJpOworCXJlcXVl
c3RfY2xhc3MtPnNlbmRfYXN5bmMgPSBzb3VwX3JlcXVlc3RfZGVmYXVsdF9zZW5kX2FzeW5jOwor
CXJlcXVlc3RfY2xhc3MtPnNlbmRfZmluaXNoID0gc291cF9yZXF1ZXN0X2RlZmF1bHRfc2VuZF9m
aW5pc2g7CisKKwlvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gc291cF9yZXF1ZXN0X2ZpbmFsaXpl
OworCW9iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gc291cF9yZXF1ZXN0X3NldF9wcm9wZXJ0
eTsKKwlvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IHNvdXBfcmVxdWVzdF9nZXRfcHJvcGVy
dHk7CisKKwlnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5ICgKKwkJb2JqZWN0X2NsYXNz
LCBQUk9QX1VSSSwKKwkJZ19wYXJhbV9zcGVjX2JveGVkIChTT1VQX1JFUVVFU1RfVVJJLAorCQkJ
CSAgICAiVVJJIiwKKwkJCQkgICAgIlRoZSByZXF1ZXN0IFVSSSIsCisJCQkJICAgIFNPVVBfVFlQ
RV9VUkksCisJCQkJICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05M
WSkpOworCWdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKAorCQlvYmplY3RfY2xhc3Ms
IFBST1BfU0VTU0lPTiwKKwkJZ19wYXJhbV9zcGVjX29iamVjdCAoU09VUF9SRVFVRVNUX1NFU1NJ
T04sCisJCQkJICAgICAiU2Vzc2lvbiIsCisJCQkJICAgICAiVGhlIHJlcXVlc3QncyBzZXNzaW9u
IiwKKwkJCQkgICAgIFNPVVBfVFlQRV9TRVNTSU9OLAorCQkJCSAgICAgR19QQVJBTV9SRUFEV1JJ
VEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSk7Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX3Jl
cXVlc3RfaW5pdGFibGVfaW50ZXJmYWNlX2luaXQgKEdJbml0YWJsZUlmYWNlICppbml0YWJsZV9p
bnRlcmZhY2UpCit7CisJaW5pdGFibGVfaW50ZXJmYWNlLT5pbml0ID0gc291cF9yZXF1ZXN0X2lu
aXRhYmxlX2luaXQ7Cit9CisKK1NvdXBVUkkgKgorc291cF9yZXF1ZXN0X2dldF91cmkgKFNvdXBS
ZXF1ZXN0ICpyZXF1ZXN0KQoreworCXJldHVybiByZXF1ZXN0LT5wcml2LT51cmk7Cit9CisKK1Nv
dXBTZXNzaW9uICoKK3NvdXBfcmVxdWVzdF9nZXRfc2Vzc2lvbiAoU291cFJlcXVlc3QgKnJlcXVl
c3QpCit7CisJcmV0dXJuIHJlcXVlc3QtPnByaXYtPnNlc3Npb247Cit9CisKK2dvZmZzZXQKK3Nv
dXBfcmVxdWVzdF9nZXRfY29udGVudF9sZW5ndGggKFNvdXBSZXF1ZXN0ICpyZXF1ZXN0KQorewor
CXJldHVybiBTT1VQX1JFUVVFU1RfR0VUX0NMQVNTIChyZXF1ZXN0KS0+Z2V0X2NvbnRlbnRfbGVu
Z3RoIChyZXF1ZXN0KTsKK30KKworY29uc3QgY2hhciAqCitzb3VwX3JlcXVlc3RfZ2V0X2NvbnRl
bnRfdHlwZSAoU291cFJlcXVlc3QgICpyZXF1ZXN0KQoreworCXJldHVybiBTT1VQX1JFUVVFU1Rf
R0VUX0NMQVNTIChyZXF1ZXN0KS0+Z2V0X2NvbnRlbnRfdHlwZSAocmVxdWVzdCk7Cit9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Qu
aCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZjlmYWEKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QuaApA
QCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJlZCBIYXQsIEluYy4K
KyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBTT1VQX1JFUVVFU1Rf
SAorI2RlZmluZSBTT1VQX1JFUVVFU1RfSCAxCisKKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4K
KyNpbmNsdWRlIDxnaW8vZ2lvLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBTT1VQX1RZ
UEVfUkVRVUVTVCAgICAgICAgICAgIChzb3VwX3JlcXVlc3RfZ2V0X3R5cGUgKCkpCisjZGVmaW5l
IFNPVVBfUkVRVUVTVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNU
ICgob2JqKSwgU09VUF9UWVBFX1JFUVVFU1QsIFNvdXBSZXF1ZXN0KSkKKyNkZWZpbmUgU09VUF9S
RVFVRVNUX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyks
IFNPVVBfVFlQRV9SRVFVRVNULCBTb3VwUmVxdWVzdENsYXNzKSkKKyNkZWZpbmUgU09VUF9JU19S
RVFVRVNUKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBT
T1VQX1RZUEVfUkVRVUVTVCkpCisjZGVmaW5lIFNPVVBfSVNfUkVRVUVTVF9DTEFTUyhrbGFzcykg
KEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBTT1VQX1RZUEVfUkVRVUVTVCkpCisj
ZGVmaW5lIFNPVVBfUkVRVUVTVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRf
Q0xBU1MgKChvYmopLCBTT1VQX1RZUEVfUkVRVUVTVCwgU291cFJlcXVlc3RDbGFzcykpCisKK3R5
cGVkZWYgc3RydWN0IF9Tb3VwUmVxdWVzdCBTb3VwUmVxdWVzdDsKK3R5cGVkZWYgc3RydWN0IF9T
b3VwUmVxdWVzdFByaXZhdGUgU291cFJlcXVlc3RQcml2YXRlOwordHlwZWRlZiBzdHJ1Y3QgX1Nv
dXBSZXF1ZXN0Q2xhc3MgICBTb3VwUmVxdWVzdENsYXNzOworCitzdHJ1Y3QgX1NvdXBSZXF1ZXN0
IHsKKwlHT2JqZWN0IHBhcmVudDsKKworCVNvdXBSZXF1ZXN0UHJpdmF0ZSAqcHJpdjsKK307CisK
K3N0cnVjdCBfU291cFJlcXVlc3RDbGFzcyB7CisJR09iamVjdENsYXNzIHBhcmVudDsKKworCWdi
b29sZWFuICAgICAgICgqY2hlY2tfdXJpKSAgIChTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxX2Jh
c2UsCisJCQkJICAgICAgIFNvdXBVUkkgICAgICAgICAgICAgICp1cmksCisJCQkJICAgICAgIEdF
cnJvciAgICAgICAgICAgICAgKiplcnJvcik7CisKKwlHSW5wdXRTdHJlYW0gKiAoKnNlbmQpICAg
ICAgICAoU291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCisJCQkJICAgICAgIEdDYW5jZWxs
YWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkgICAgICAgR0Vycm9yICAgICAgICAgICAg
ICAqKmVycm9yKTsKKwl2b2lkICAgICAgICAgICAoKnNlbmRfYXN5bmMpICAoU291cFJlcXVlc3Qg
ICAgICAgICAgKnJlcXVlc3QsCisJCQkJICAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5j
ZWxsYWJsZSwKKwkJCQkgICAgICAgR0FzeW5jUmVhZHlDYWxsYmFjayAgIGNhbGxiYWNrLAorCQkJ
CSAgICAgICBncG9pbnRlciAgICAgICAgICAgICAgdXNlcl9kYXRhKTsKKwlHSW5wdXRTdHJlYW0g
KiAoKnNlbmRfZmluaXNoKSAoU291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCisJCQkJICAg
ICAgIEdBc3luY1Jlc3VsdCAgICAgICAgICpyZXN1bHQsCisJCQkJICAgICAgIEdFcnJvciAgICAg
ICAgICAgICAgKiplcnJvcik7CisKKwlnb2Zmc2V0ICAgICAgICAoKmdldF9jb250ZW50X2xlbmd0
aCkgKFNvdXBSZXF1ZXN0ICAgKnJlcXVlc3QpOworCWNvbnN0IGNoYXIgKiAgICgqZ2V0X2NvbnRl
bnRfdHlwZSkgICAoU291cFJlcXVlc3QgICAqcmVxdWVzdCk7Cit9OworCitHVHlwZSBzb3VwX3Jl
cXVlc3RfZ2V0X3R5cGUgKHZvaWQpOworCisjZGVmaW5lIFNPVVBfUkVRVUVTVF9VUkkgICAgICJ1
cmkiCisjZGVmaW5lIFNPVVBfUkVRVUVTVF9TRVNTSU9OICJzZXNzaW9uIgorCitHSW5wdXRTdHJl
YW0gKnNvdXBfcmVxdWVzdF9zZW5kICAgICAgICAgICAgICAgKFNvdXBSZXF1ZXN0ICAgICAgICAg
ICpyZXF1ZXN0LAorCQkJCQkgICAgICAgR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxl
LAorCQkJCQkgICAgICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKTsKK3ZvaWQgICAgICAg
ICAgc291cF9yZXF1ZXN0X3NlbmRfYXN5bmMgICAgICAgICAoU291cFJlcXVlc3QgICAgICAgICAg
KnJlcXVlc3QsCisJCQkJCSAgICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUs
CisJCQkJCSAgICAgICBHQXN5bmNSZWFkeUNhbGxiYWNrICAgY2FsbGJhY2ssCisJCQkJCSAgICAg
ICBncG9pbnRlciAgICAgICAgICAgICAgdXNlcl9kYXRhKTsKK0dJbnB1dFN0cmVhbSAqc291cF9y
ZXF1ZXN0X3NlbmRfZmluaXNoICAgICAgICAoU291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3Qs
CisJCQkJCSAgICAgICBHQXN5bmNSZXN1bHQgICAgICAgICAqcmVzdWx0LAorCQkJCQkgICAgICAg
R0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKTsKKworU291cFVSSSAgICAgICpzb3VwX3JlcXVl
c3RfZ2V0X3VyaSAgICAgICAgICAgIChTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCk7CitT
b3VwU2Vzc2lvbiAgKnNvdXBfcmVxdWVzdF9nZXRfc2Vzc2lvbiAgICAgICAgKFNvdXBSZXF1ZXN0
ICAgICAgICAgICpyZXF1ZXN0KTsKKworZ29mZnNldCAgICAgICBzb3VwX3JlcXVlc3RfZ2V0X2Nv
bnRlbnRfbGVuZ3RoIChTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCk7Citjb25zdCBjaGFy
ICAgKnNvdXBfcmVxdWVzdF9nZXRfY29udGVudF90eXBlICAgKFNvdXBSZXF1ZXN0ICAgICAgICAg
ICpyZXF1ZXN0KTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFNPVVBfUkVRVUVTVF9IICov
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJl
cXVlc3Rlci5jIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1
ZXN0ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmJkMmU4Ci0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1y
ZXF1ZXN0ZXIuYwpAQCAtMCwwICsxLDE4NiBAQAorLyoKKyAqIHNvdXAtcmVxdWVzdGVyLmM6Cisg
KgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAic291cC1yZXF1ZXN0ZXIuaCIKKworI2luY2x1ZGUgInNvdXAtcmVxdWVzdC1k
YXRhLmgiCisjaW5jbHVkZSAic291cC1yZXF1ZXN0LWZpbGUuaCIKKyNpbmNsdWRlICJzb3VwLXJl
cXVlc3QtaHR0cC5oIgorI2luY2x1ZGUgPGdsaWIvZ2kxOG4uaD4KKyNpbmNsdWRlIDxsaWJzb3Vw
L3NvdXAuaD4KKworc3RydWN0IF9Tb3VwUmVxdWVzdGVyUHJpdmF0ZSB7CisgICAgR0hhc2hUYWJs
ZSogcmVxdWVzdF90eXBlczsKK30gOworCisjZGVmaW5lIFNPVVBfUkVRVUVTVEVSX0dFVF9QUklW
QVRFKG8pIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG8pLCBTT1VQX1RZUEVfUkVRVUVT
VEVSLCBTb3VwUmVxdWVzdGVyUHJpdmF0ZSkpCisKK0dfREVGSU5FX1RZUEUoU291cFJlcXVlc3Rl
ciwgc291cF9yZXF1ZXN0ZXIsIEdfVFlQRV9PQkpFQ1QpCisKK3N0YXRpYyB2b2lkIHNvdXBfcmVx
dWVzdGVyX2luaXQoU291cFJlcXVlc3RlciogcmVxdWVzdGVyKQoreworICAgIHJlcXVlc3Rlci0+
cHJpdiA9IFNPVVBfUkVRVUVTVEVSX0dFVF9QUklWQVRFIChyZXF1ZXN0ZXIpOworCisgICAgcmVx
dWVzdGVyLT5wcml2LT5yZXF1ZXN0X3R5cGVzID0gMDsKK30KKworc3RhdGljIHZvaWQgZmluYWxp
emUoR09iamVjdCogb2JqZWN0KQoreworICAgIFNvdXBSZXF1ZXN0ZXIqIHJlcXVlc3RlciA9IFNP
VVBfUkVRVUVTVEVSKG9iamVjdCk7CisKKyAgICBpZiAocmVxdWVzdGVyLT5wcml2LT5yZXF1ZXN0
X3R5cGVzKQorICAgICAgICBnX2hhc2hfdGFibGVfZGVzdHJveShyZXF1ZXN0ZXItPnByaXYtPnJl
cXVlc3RfdHlwZXMpOworCisgICAgR19PQkpFQ1RfQ0xBU1Moc291cF9yZXF1ZXN0ZXJfcGFyZW50
X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgc291cF9yZXF1ZXN0
ZXJfY2xhc3NfaW5pdChTb3VwUmVxdWVzdGVyQ2xhc3MqIHJlcXVlc3Rlcl9jbGFzcykKK3sKKyAg
ICBHT2JqZWN0Q2xhc3MqIG9iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3Rlcl9j
bGFzcyk7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUocmVxdWVzdGVyX2NsYXNzLCBz
aXplb2YoU291cFJlcXVlc3RlclByaXZhdGUpKTsKKworICAgIC8qIHZpcnR1YWwgbWV0aG9kIG92
ZXJyaWRlICovCisgICAgb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGZpbmFsaXplOworfQorCitz
dGF0aWMgdm9pZCBpbml0X3JlcXVlc3RfdHlwZXMoU291cFJlcXVlc3RlclByaXZhdGUqIHByaXYp
Cit7CisgICAgaWYgKHByaXYtPnJlcXVlc3RfdHlwZXMpCisgICAgICAgIHJldHVybjsKKworICAg
IHByaXYtPnJlcXVlc3RfdHlwZXMgPSBnX2hhc2hfdGFibGVfbmV3X2Z1bGwoc291cF9zdHJfY2Fz
ZV9oYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c291cF9zdHJfY2FzZV9lcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdfZnJlZSwgMCk7CisgICAgZ19oYXNoX3RhYmxlX2luc2VydChwcml2LT5y
ZXF1ZXN0X3R5cGVzLCBnX3N0cmR1cCgiZmlsZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAg
R1NJWkVfVE9fUE9JTlRFUihTT1VQX1RZUEVfUkVRVUVTVF9GSUxFKSk7CisgICAgZ19oYXNoX3Rh
YmxlX2luc2VydChwcml2LT5yZXF1ZXN0X3R5cGVzLCBnX3N0cmR1cCgiZGF0YSIpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgR1NJWkVfVE9fUE9JTlRFUihTT1VQX1RZUEVfUkVRVUVTVF9EQVRB
KSk7CisgICAgZ19oYXNoX3RhYmxlX2luc2VydChwcml2LT5yZXF1ZXN0X3R5cGVzLCBnX3N0cmR1
cCgiaHR0cCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgR1NJWkVfVE9fUE9JTlRFUihTT1VQ
X1RZUEVfUkVRVUVTVF9IVFRQKSk7CisgICAgZ19oYXNoX3RhYmxlX2luc2VydChwcml2LT5yZXF1
ZXN0X3R5cGVzLCBnX3N0cmR1cCgiaHR0cHMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdT
SVpFX1RPX1BPSU5URVIoU09VUF9UWVBFX1JFUVVFU1RfSFRUUCkpOworICAgIGdfaGFzaF90YWJs
ZV9pbnNlcnQocHJpdi0+cmVxdWVzdF90eXBlcywgZ19zdHJkdXAoImZ0cCIpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgR1NJWkVfVE9fUE9JTlRFUihTT1VQX1RZUEVfUkVRVUVTVF9GSUxFKSk7
Cit9CisKK1NvdXBSZXF1ZXN0ZXIgKiBzb3VwX3JlcXVlc3Rlcl9uZXcodm9pZCkKK3sKKyAgICBy
ZXR1cm4gKFNvdXBSZXF1ZXN0ZXIqKSBnX29iamVjdF9uZXcoU09VUF9UWVBFX1JFUVVFU1RFUiwg
MCk7Cit9CisKK1NvdXBSZXF1ZXN0ICogc291cF9yZXF1ZXN0ZXJfcmVxdWVzdChTb3VwUmVxdWVz
dGVyKiByZXF1ZXN0ZXIsIGNvbnN0IGNoYXIqIHVyaVN0cmluZywgU291cFNlc3Npb24qIHNlc3Np
b24sIEdFcnJvcioqIGVycm9yKQoreworICAgIFNvdXBVUkkqIHVyaSA9IHNvdXBfdXJpX25ldyh1
cmlTdHJpbmcpOworICAgIFNvdXBSZXF1ZXN0KiByZXE7CisKKyAgICBpZiAoIXVyaSkgeworICAg
ICAgICBnX3NldF9lcnJvcihlcnJvciwgU09VUF9FUlJPUiwgU09VUF9FUlJPUl9CQURfVVJJLAor
ICAgICAgICAgICAgICAgICAgICBfKCJDb3VsZCBub3QgcGFyc2UgVVJJICclcyciKSwgdXJpU3Ry
aW5nKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmVxID0gc291cF9yZXF1ZXN0
ZXJfcmVxdWVzdF91cmkocmVxdWVzdGVyLCB1cmksIHNlc3Npb24sIGVycm9yKTsKKyAgICBzb3Vw
X3VyaV9mcmVlKHVyaSk7CisgICAgcmV0dXJuIHJlcTsKK30KKworU291cFJlcXVlc3QgKiBzb3Vw
X3JlcXVlc3Rlcl9yZXF1ZXN0X3VyaShTb3VwUmVxdWVzdGVyKiByZXF1ZXN0ZXIsIFNvdXBVUkkq
IHVyaSwgU291cFNlc3Npb24qIHNlc3Npb24sIEdFcnJvcioqIGVycm9yKQoreworICAgIEdUeXBl
IHJlcXVlc3RUeXBlOworCisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoU09VUF9JU19SRVFVRVNU
RVIocmVxdWVzdGVyKSwgMCk7CisKKyAgICBpbml0X3JlcXVlc3RfdHlwZXMocmVxdWVzdGVyLT5w
cml2KTsKKyAgICByZXF1ZXN0VHlwZSA9IChHVHlwZSkgR1BPSU5URVJfVE9fU0laRShnX2hhc2hf
dGFibGVfbG9va3VwKHJlcXVlc3Rlci0+cHJpdi0+cmVxdWVzdF90eXBlcywgdXJpLT5zY2hlbWUp
KTsKKyAgICBpZiAoIXJlcXVlc3RUeXBlKSB7CisgICAgICAgIGdfc2V0X2Vycm9yKGVycm9yLCBT
T1VQX0VSUk9SLCBTT1VQX0VSUk9SX1VOU1VQUE9SVEVEX1VSSV9TQ0hFTUUsCisgICAgICAgICAg
ICAgICAgICAgIF8oIlVuc3VwcG9ydGVkIFVSSSBzY2hlbWUgJyVzJyIpLCB1cmktPnNjaGVtZSk7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmIChnX3R5cGVfaXNfYShyZXF1ZXN0
VHlwZSwgR19UWVBFX0lOSVRBQkxFKSkgeworICAgICAgICByZXR1cm4gKFNvdXBSZXF1ZXN0Kiln
X2luaXRhYmxlX25ldyhyZXF1ZXN0VHlwZSwgMCwgZXJyb3IsCisJCQkJCSAgICAidXJpIiwgdXJp
LAorCQkJCQkgICAgInNlc3Npb24iLCBzZXNzaW9uLAorCQkJCQkgICAgMCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgcmV0dXJuIChTb3VwUmVxdWVzdCopZ19vYmplY3RfbmV3KHJlcXVlc3RUeXBl
LAorCQkJCQkgICJ1cmkiLCB1cmksCisJCQkJCSAgInNlc3Npb24iLCBzZXNzaW9uLAorCQkJCQkg
IDApOworICAgIH0KK30KKworLyogUkZDIDIzOTYsIDMuMSAqLworc3RhdGljIGdib29sZWFuCitz
b3VwX3NjaGVtZV9pc192YWxpZCAoY29uc3QgY2hhciAqc2NoZW1lKQoreworICAgICAgICBpZiAo
c2NoZW1lID09IE5VTEwgfHwKKyAgICAgICAgICAgICFnX2FzY2lpX2lzYWxwaGEgKCpzY2hlbWUp
KQorICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgICAgICBzY2hlbWUrKzsKKyAg
ICAgICAgd2hpbGUgKCpzY2hlbWUpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWdfYXNjaWlfaXNh
bHBoYSAoKnNjaGVtZSkgJiYKKyAgICAgICAgICAgICAgICAgICAgIWdfYXNjaWlfaXNkaWdpdCAo
KnNjaGVtZSkgJiYKKyAgICAgICAgICAgICAgICAgICAgKnNjaGVtZSAhPSAnKycgJiYKKyAgICAg
ICAgICAgICAgICAgICAgKnNjaGVtZSAhPSAnLScgJiYKKyAgICAgICAgICAgICAgICAgICAgKnNj
aGVtZSAhPSAnLicpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAg
ICAgICAgICAgICAgc2NoZW1lKys7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFRSVUU7Cit9
CisKK3ZvaWQKK3NvdXBfcmVxdWVzdGVyX2FkZF9wcm90b2NvbCAoU291cFJlcXVlc3RlciAqcmVx
dWVzdGVyLAorCQkJICAgICBjb25zdCBjaGFyICAqc2NoZW1lLAorCQkJICAgICBHVHlwZSAgICAg
ICAgcmVxdWVzdF90eXBlKQoreworCWdfcmV0dXJuX2lmX2ZhaWwgKFNPVVBfSVNfUkVRVUVTVEVS
IChyZXF1ZXN0ZXIpKTsKKwlnX3JldHVybl9pZl9mYWlsIChzb3VwX3NjaGVtZV9pc192YWxpZCAo
c2NoZW1lKSk7CisKKwlpbml0X3JlcXVlc3RfdHlwZXMgKHJlcXVlc3Rlci0+cHJpdik7CisJZ19o
YXNoX3RhYmxlX2luc2VydCAocmVxdWVzdGVyLT5wcml2LT5yZXF1ZXN0X3R5cGVzLCBnX3N0cmR1
cCAoc2NoZW1lKSwKKwkJCSAgICAgR1NJWkVfVE9fUE9JTlRFUiAocmVxdWVzdF90eXBlKSk7Cit9
CisKK3ZvaWQKK3NvdXBfcmVxdWVzdGVyX3JlbW92ZV9wcm90b2NvbCAoU291cFJlcXVlc3RlciAq
cmVxdWVzdGVyLAorCQkJCWNvbnN0IGNoYXIgICpzY2hlbWUpCit7CisJZ19yZXR1cm5faWZfZmFp
bCAoU09VUF9JU19SRVFVRVNURVIgKHJlcXVlc3RlcikpOworCWdfcmV0dXJuX2lmX2ZhaWwgKHNv
dXBfc2NoZW1lX2lzX3ZhbGlkIChzY2hlbWUpKTsKKworCWluaXRfcmVxdWVzdF90eXBlcyAocmVx
dWVzdGVyLT5wcml2KTsKKwlnX2hhc2hfdGFibGVfcmVtb3ZlIChyZXF1ZXN0ZXItPnByaXYtPnJl
cXVlc3RfdHlwZXMsIHNjaGVtZSk7Cit9CisKK0dRdWFyaworc291cF9lcnJvcl9xdWFyayAodm9p
ZCkKK3sKKwlzdGF0aWMgR1F1YXJrIGVycm9yOworCWlmICghZXJyb3IpCisJCWVycm9yID0gZ19x
dWFya19mcm9tX3N0YXRpY19zdHJpbmcgKCJzb3VwX2Vycm9yX3F1YXJrIik7CisJcmV0dXJuIGVy
cm9yOworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUv
c291cC1yZXF1ZXN0ZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3Nv
dXAtcmVxdWVzdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M2YmNl
OQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3NvdXAtcmVxdWVzdGVyLmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFNPVVBfUkVRVUVTVEVSX0gKKyNkZWZpbmUgU09VUF9S
RVFVRVNURVJfSCAxCisKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3QuaCIKKyNpbmNsdWRlIDxsaWJz
b3VwL3NvdXAuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFNPVVBfVFlQRV9SRVFVRVNU
RVIgICAgICAgICAgICAoc291cF9yZXF1ZXN0ZXJfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgU09VUF9S
RVFVRVNURVIob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2Jq
KSwgU09VUF9UWVBFX1JFUVVFU1RFUiwgU291cFJlcXVlc3RlcikpCisjZGVmaW5lIFNPVVBfUkVR
VUVTVEVSX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwg
U09VUF9UWVBFX1JFUVVFU1RFUiwgU291cFJlcXVlc3RlckNsYXNzKSkKKyNkZWZpbmUgU09VUF9J
U19SRVFVRVNURVIob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2Jq
KSwgU09VUF9UWVBFX1JFUVVFU1RFUikpCisjZGVmaW5lIFNPVVBfSVNfUkVRVUVTVEVSX0NMQVNT
KGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKG9iaiksIFNPVVBfVFlQRV9SRVFVRVNU
RVIpKQorI2RlZmluZSBTT1VQX1JFUVVFU1RFUl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNU
QU5DRV9HRVRfQ0xBU1MoKG9iaiksIFNPVVBfVFlQRV9SRVFVRVNURVIsIFNvdXBSZXF1ZXN0ZXJD
bGFzcykpCisKKyNkZWZpbmUgU09VUF9FUlJPUiBzb3VwX2Vycm9yX3F1YXJrKCkKKwordHlwZWRl
ZiBlbnVtIHsKKwlTT1VQX0VSUk9SX0JBRF9VUkksCisJU09VUF9FUlJPUl9VTlNVUFBPUlRFRF9V
UklfU0NIRU1FCit9IFNvdXBFcnJvcjsKKwordHlwZWRlZiBzdHJ1Y3QgX1NvdXBSZXF1ZXN0ZXIg
U291cFJlcXVlc3RlcjsKK3R5cGVkZWYgc3RydWN0IF9Tb3VwUmVxdWVzdGVyUHJpdmF0ZSBTb3Vw
UmVxdWVzdGVyUHJpdmF0ZTsKKworc3RydWN0IF9Tb3VwUmVxdWVzdGVyIHsKKyAgICBHT2JqZWN0
IHBhcmVudDsKKworICAgIFNvdXBSZXF1ZXN0ZXJQcml2YXRlICpwcml2OworfTsKKwordHlwZWRl
ZiBzdHJ1Y3QgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9IFNvdXBSZXF1ZXN0
ZXJDbGFzczsKKworR1R5cGUgc291cF9yZXF1ZXN0ZXJfZ2V0X3R5cGUodm9pZCk7CisKK1NvdXBS
ZXF1ZXN0ZXIqIHNvdXBfcmVxdWVzdGVyX25ldyh2b2lkKTsKKworR1F1YXJrIHNvdXBfZXJyb3Jf
cXVhcmsgKHZvaWQpOworCitTb3VwUmVxdWVzdCogc291cF9yZXF1ZXN0ZXJfcmVxdWVzdCAoU291
cFJlcXVlc3RlciogcmVxdWVzdGVyLAorCQkJCSAgICAgY29uc3QgY2hhciogdXJpU3RyaW5nLAor
CQkJCSAgICAgU291cFNlc3Npb24qIHNlc3Npb24sCisJCQkJICAgICBHRXJyb3IqKiBlcnJvcik7
CisKK1NvdXBSZXF1ZXN0KiBzb3VwX3JlcXVlc3Rlcl9yZXF1ZXN0X3VyaSAoU291cFJlcXVlc3Rl
ciogcmVxdWVzdGVyLAorCQkJCQkgU291cFVSSSogdXJpLAorCQkJCQkgU291cFNlc3Npb24qIHNl
c3Npb24sCisJCQkJCSBHRXJyb3IqKiBlcnJvcik7CisKK3ZvaWQgc291cF9yZXF1ZXN0ZXJfYWRk
X3Byb3RvY29sICAgIChTb3VwUmVxdWVzdGVyICpyZXF1ZXN0ZXIsCisJCQkJICAgICBjb25zdCBj
aGFyICAqc2NoZW1lLAorCQkJCSAgICAgR1R5cGUgICAgICAgIHJlcXVlc3RfdHlwZSk7CisKK3Zv
aWQgc291cF9yZXF1ZXN0ZXJfcmVtb3ZlX3Byb3RvY29sIChTb3VwUmVxdWVzdGVyICpyZXF1ZXN0
ZXIsCisJCQkJICAgICBjb25zdCBjaGFyICAqc2NoZW1lKTsKKworR19FTkRfREVDTFMKKworI2Vu
ZGlmIC8qIFNPVVBfUkVRVUVTVEVSX0ggKi8KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLXByaXZhdGUuaCBiL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLXByaXZhdGUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmExODExCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2Fj
aGUtcHJpdmF0ZS5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBzb3VwLWNhY2hlLXByaXZhdGUu
aDoKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV0VCS0lU
X1NPVVBfQ0FDSEVfUFJJVkFURV9ICisjZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX1BSSVZBVEVf
SCAxCisKKyNpbmNsdWRlICJzb3VwLWNhY2hlLmgiCisjaW5jbHVkZSA8bGlic291cC9zb3VwLW1l
c3NhZ2UuaD4KKworR19CRUdJTl9ERUNMUworCitXZWJLaXRTb3VwQ2FjaGVSZXNwb25zZSB3ZWJr
aXRfc291cF9jYWNoZV9oYXNfcmVzcG9uc2UgICAgICAgICAgICAgICAgIChXZWJLaXRTb3VwQ2Fj
aGUgICAqY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTb3VwTWVzc2FnZSAqbXNnKTsKK0dJbnB1dFN0cmVhbSog
ICAgIHdlYmtpdF9zb3VwX2NhY2hlX3NlbmRfcmVzcG9uc2UgICAgICAgICAgICAgICAgKFdlYktp
dFNvdXBDYWNoZSAgICpjYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXBNZXNzYWdlICptc2cpOworV2ViS2l0
U291cENhY2hlYWJpbGl0eSAgd2Via2l0X3NvdXBfY2FjaGVfZ2V0X2NhY2hlYWJpbGl0eSAgICAg
ICAgICAgICAoV2ViS2l0U291cENhY2hlICAgKmNhY2hlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU291cE1lc3NhZ2Ug
Km1zZyk7CitTb3VwTWVzc2FnZSogICAgICB3ZWJraXRfc291cF9jYWNoZV9nZW5lcmF0ZV9jb25k
aXRpb25hbF9yZXF1ZXN0IChXZWJLaXRTb3VwQ2FjaGUgICAqY2FjaGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3Vw
TWVzc2FnZSAqb3JpZ2luYWwpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX1NP
VVBfQ0FDSEVfUFJJVkFURV9IICovCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5jIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4xNWFhOGUwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUuYwpAQCAtMCwwICsxLDE2MzIg
QEAKKy8qCisgKiBzb3VwLWNhY2hlLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAg
SWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworLyogVE9ETzoKKyAqIC0gTmVlZCB0byBob29rIHRoZSBmZWF0dXJlIGluIHRo
ZSBzeW5jIFNvdXBTZXNzaW9uLgorICogLSBOZWVkIG1vcmUgdGVzdHMuCisgKi8KKworI2lmZGVm
IEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAi
c291cC1jYWNoZS5oIgorI2luY2x1ZGUgInNvdXAtY2FjaGUtcHJpdmF0ZS5oIgorI2luY2x1ZGUg
PGxpYnNvdXAvc291cC5oPgorI2luY2x1ZGUgPGdpby9naW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIu
aD4KKworc3RhdGljIFNvdXBTZXNzaW9uRmVhdHVyZUludGVyZmFjZSAqd2Via2l0X3NvdXBfY2Fj
aGVfZGVmYXVsdF9mZWF0dXJlX2ludGVyZmFjZTsKK3N0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX2Nh
Y2hlX3Nlc3Npb25fZmVhdHVyZV9pbml0IChTb3VwU2Vzc2lvbkZlYXR1cmVJbnRlcmZhY2UgKmZl
YXR1cmVfaW50ZXJmYWNlLCBncG9pbnRlciBpbnRlcmZhY2VfZGF0YSk7CisKKyNkZWZpbmUgREVG
QVVMVF9NQVhfU0laRSA1MCAqIDEwMjQgKiAxMDI0CisjZGVmaW5lIE1BWF9FTlRSWV9EQVRBX1BF
UkNFTlRBR0UgMTAgLyogUGVyY2VudGFnZSBvZiB0aGUgdG90YWwgc2l6ZQorCQkJCQlvZiB0aGUg
Y2FjaGUgdGhhdCBjYW4gYmUKKwkJCQkJZmlsbGVkIGJ5IGEgc2luZ2xlIGVudHJ5ICovCisKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRTb3VwQ2FjaGVFbnRyeQoreworCWNoYXIgKmtleTsKKwljaGFy
ICpmaWxlbmFtZTsKKwlndWludCBmcmVzaG5lc3NfbGlmZXRpbWU7CisJZ2Jvb2xlYW4gbXVzdF9y
ZXZhbGlkYXRlOworCUdTdHJpbmcgKmRhdGE7CisJZ3NpemUgcG9zOworCWdzaXplIGxlbmd0aDsK
Kwl0aW1lX3QgY29ycmVjdGVkX2luaXRpYWxfYWdlOworCXRpbWVfdCByZXNwb25zZV90aW1lOwor
CWdib29sZWFuIHdyaXRpbmc7CisJZ2Jvb2xlYW4gZGlydHk7CisJZ2Jvb2xlYW4gZ290X2JvZHk7
CisJZ2Jvb2xlYW4gYmVpbmdfdmFsaWRhdGVkOworCVNvdXBNZXNzYWdlSGVhZGVycyAqaGVhZGVy
czsKKwlHT3V0cHV0U3RyZWFtICpzdHJlYW07CisJR0Vycm9yICplcnJvcjsKKwlndWludCBoaXRz
OworCUdMaXN0ICpscnU7CisJR0NhbmNlbGxhYmxlICpjYW5jZWxsYWJsZTsKK30gV2ViS2l0U291
cENhY2hlRW50cnk7CisKK3N0cnVjdCBfV2ViS2l0U291cENhY2hlUHJpdmF0ZSB7CisJY2hhciAq
Y2FjaGVfZGlyOworCUdIYXNoVGFibGUgKmNhY2hlOworCWd1aW50IG5fcGVuZGluZzsKKwlTb3Vw
U2Vzc2lvbiAqc2Vzc2lvbjsKKwlXZWJLaXRTb3VwQ2FjaGVUeXBlIGNhY2hlX3R5cGU7CisJZ3Vp
bnQgc2l6ZTsKKwlndWludCBtYXhfc2l6ZTsKKwlndWludCBtYXhfZW50cnlfZGF0YV9zaXplOyAv
KiBDb21wdXRlZCB2YWx1ZS4gSGVyZSBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyAqLworCUdMaXN0
ICpscnVfc3RhcnQ7CisJR0xpc3QgKmxydV9lbmQ7Cit9OworCit0eXBlZGVmIHN0cnVjdCB7CisJ
V2ViS2l0U291cENhY2hlICpjYWNoZTsKKwlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnk7CisJ
U291cE1lc3NhZ2UgKm1zZzsKKwlndWxvbmcgZ290X2NodW5rX2hhbmRsZXI7CisJZ3Vsb25nIGdv
dF9ib2R5X2hhbmRsZXI7CisJZ3Vsb25nIHJlc3RhcnRlZF9oYW5kbGVyOworfSBXZWJLaXRTb3Vw
Q2FjaGVXcml0aW5nRml4dHVyZTsKKworZW51bSB7CisJUFJPUF8wLAorCVBST1BfQ0FDSEVfRElS
LAorCVBST1BfQ0FDSEVfVFlQRQorfTsKKworI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9HRVRf
UFJJVkFURShvKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFICgobyksIFdFQktJVF9UWVBF
X1NPVVBfQ0FDSEUsIFdlYktpdFNvdXBDYWNoZVByaXZhdGUpKQorCitHX0RFRklORV9UWVBFX1dJ
VEhfQ09ERSAoV2ViS2l0U291cENhY2hlLCB3ZWJraXRfc291cF9jYWNoZSwgR19UWVBFX09CSkVD
VCwKKwkJCSBHX0lNUExFTUVOVF9JTlRFUkZBQ0UgKFNPVVBfVFlQRV9TRVNTSU9OX0ZFQVRVUkUs
CisJCQkJCQl3ZWJraXRfc291cF9jYWNoZV9zZXNzaW9uX2ZlYXR1cmVfaW5pdCkpCisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2RlbGV0ZSAoV2ViS2l0U291cENhY2hlICpj
YWNoZSwgV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5KTsKK3N0YXRpYyB2b2lkIG1ha2Vfcm9v
bV9mb3JfbmV3X2VudHJ5IChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLCBndWludCBsZW5ndGhfdG9f
YWRkKTsKK3N0YXRpYyBnYm9vbGVhbiBjYWNoZV9hY2NlcHRzX2VudHJpZXNfb2Zfc2l6ZSAoV2Vi
S2l0U291cENhY2hlICpjYWNoZSwgZ3VpbnQgbGVuZ3RoX3RvX2FkZCk7CisKK3N0YXRpYyBXZWJL
aXRTb3VwQ2FjaGVhYmlsaXR5CitnZXRfY2FjaGVhYmlsaXR5IChXZWJLaXRTb3VwQ2FjaGUgKmNh
Y2hlLCBTb3VwTWVzc2FnZSAqbXNnKQoreworCVdlYktpdFNvdXBDYWNoZWFiaWxpdHkgY2FjaGVh
YmlsaXR5OworCWNvbnN0IGNoYXIgKmNhY2hlX2NvbnRyb2w7CisKKwkvKiAxLiBUaGUgcmVxdWVz
dCBtZXRob2QgbXVzdCBiZSBjYWNoZWFibGUgKi8KKwlpZiAobXNnLT5tZXRob2QgPT0gU09VUF9N
RVRIT0RfR0VUKQorCQljYWNoZWFiaWxpdHkgPSBXRUJLSVRfU09VUF9DQUNIRV9DQUNIRUFCTEU7
CisJZWxzZSBpZiAobXNnLT5tZXRob2QgPT0gU09VUF9NRVRIT0RfSEVBRCB8fAorCQkgbXNnLT5t
ZXRob2QgPT0gU09VUF9NRVRIT0RfVFJBQ0UgfHwKKwkJIG1zZy0+bWV0aG9kID09IFNPVVBfTUVU
SE9EX0NPTk5FQ1QpCisJCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRTsKKwll
bHNlCisJCXJldHVybiAoV0VCS0lUX1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEUgfCBXRUJLSVRfU09V
UF9DQUNIRV9JTlZBTElEQVRFUyk7CisKKwljYWNoZV9jb250cm9sID0gc291cF9tZXNzYWdlX2hl
YWRlcnNfZ2V0IChtc2ctPnJlc3BvbnNlX2hlYWRlcnMsICJDYWNoZS1Db250cm9sIik7CisJaWYg
KGNhY2hlX2NvbnRyb2wpIHsKKwkJR0hhc2hUYWJsZSAqaGFzaDsKKwkJV2ViS2l0U291cENhY2hl
UHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0NBQ0hFX0dFVF9QUklWQVRFIChjYWNoZSk7CisK
KwkJaGFzaCA9IHNvdXBfaGVhZGVyX3BhcnNlX3BhcmFtX2xpc3QgKGNhY2hlX2NvbnRyb2wpOwor
CisJCS8qIFNoYXJlZCBjYWNoZXMgTVVTVCBOT1Qgc3RvcmUgcHJpdmF0ZSByZXNvdXJjZXMgKi8K
KwkJaWYgKHByaXYtPmNhY2hlX3R5cGUgPT0gV0VCS0lUX1NPVVBfQ0FDSEVfU0hBUkVEKSB7CisJ
CQlpZiAoZ19oYXNoX3RhYmxlX2xvb2t1cF9leHRlbmRlZCAoaGFzaCwgInByaXZhdGUiLCBOVUxM
LCBOVUxMKSkgeworCQkJCXNvdXBfaGVhZGVyX2ZyZWVfcGFyYW1fbGlzdCAoaGFzaCk7CisJCQkJ
cmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFOworCQkJfQorCQl9CisKKwkJLyog
Mi4gVGhlICduby1zdG9yZScgY2FjaGUgZGlyZWN0aXZlIGRvZXMgbm90IGFwcGVhciBpbiB0aGUK
KwkJICogaGVhZGVycworCQkgKi8KKwkJaWYgKGdfaGFzaF90YWJsZV9sb29rdXBfZXh0ZW5kZWQg
KGhhc2gsICJuby1zdG9yZSIsIE5VTEwsIE5VTEwpKSB7CisJCQlzb3VwX2hlYWRlcl9mcmVlX3Bh
cmFtX2xpc3QgKGhhc2gpOworCQkJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxF
OworCQl9CisKKwkJLyogVGhpcyBkb2VzIG5vdCBhcHBlYXIgaW4gc2VjdGlvbiAyLjEsIGJ1dCBJ
IHRoaW5rIGl0IG1ha2VzCisJCSAqIHNlbnNlIHRvIGNoZWNrIGl0IHRvbz8KKwkJICovCisJCWlm
IChnX2hhc2hfdGFibGVfbG9va3VwX2V4dGVuZGVkIChoYXNoLCAibm8tY2FjaGUiLCBOVUxMLCBO
VUxMKSkgeworCQkJc291cF9oZWFkZXJfZnJlZV9wYXJhbV9saXN0IChoYXNoKTsKKwkJCXJldHVy
biBXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRTsKKwkJfQorCX0KKworCXN3aXRjaCAobXNn
LT5zdGF0dXNfY29kZSkgeworCWNhc2UgU09VUF9TVEFUVVNfUEFSVElBTF9DT05URU5UOgorCQkv
KiBXZSBkb24ndCBjYWNoZSBwYXJ0aWFsIHJlc3BvbnNlcywgYnV0IHRoZXkgb25seQorCQkgKiBp
bnZhbGlkYXRlIGNhY2hlZCBmdWxsIHJlc3BvbnNlcyBpZiB0aGUgaGVhZGVycworCQkgKiBkb24n
dCBtYXRjaC4KKwkJICovCisJCWNhY2hlYWJpbGl0eSA9IFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FD
SEVBQkxFOworCQlicmVhazsKKworCWNhc2UgU09VUF9TVEFUVVNfTk9UX01PRElGSUVEOgorCQkv
KiBBIDMwNCByZXNwb25zZSB2YWxpZGF0ZXMgYW4gZXhpc3RpbmcgY2FjaGUgZW50cnkgKi8KKwkJ
Y2FjaGVhYmlsaXR5ID0gV0VCS0lUX1NPVVBfQ0FDSEVfVkFMSURBVEVTOworCQlicmVhazsKKwor
CWNhc2UgU09VUF9TVEFUVVNfTVVMVElQTEVfQ0hPSUNFUzoKKwljYXNlIFNPVVBfU1RBVFVTX01P
VkVEX1BFUk1BTkVOVExZOgorCWNhc2UgU09VUF9TVEFUVVNfR09ORToKKwkJLyogRklYTUU6IGNh
Y2hlYWJsZSB1bmxlc3MgaW5kaWNhdGVkIG90aGVyd2lzZSAqLworCQljYWNoZWFiaWxpdHkgPSBX
RUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRTsKKwkJYnJlYWs7CisKKwljYXNlIFNPVVBfU1RB
VFVTX0ZPVU5EOgorCWNhc2UgU09VUF9TVEFUVVNfVEVNUE9SQVJZX1JFRElSRUNUOgorCQkvKiBG
SVhNRTogY2FjaGVhYmxlIGlmIGV4cGxpY2l0bHkgaW5kaWNhdGVkICovCisJCWNhY2hlYWJpbGl0
eSA9IFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFOworCQlicmVhazsKKworCWNhc2UgU09V
UF9TVEFUVVNfU0VFX09USEVSOgorCWNhc2UgU09VUF9TVEFUVVNfRk9SQklEREVOOgorCWNhc2Ug
U09VUF9TVEFUVVNfTk9UX0ZPVU5EOgorCWNhc2UgU09VUF9TVEFUVVNfTUVUSE9EX05PVF9BTExP
V0VEOgorCQlyZXR1cm4gKFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFIHwgV0VCS0lUX1NP
VVBfQ0FDSEVfSU5WQUxJREFURVMpOworCisJZGVmYXVsdDoKKwkJLyogQW55IDV4eCBzdGF0dXMg
b3IgYW55IDR4eCBzdGF0dXMgbm90IGhhbmRsZWQgYWJvdmUKKwkJICogaXMgdW5jYWNoZWFibGUg
YnV0IGRvZXNuJ3QgYnJlYWsgdGhlIGNhY2hlLgorCQkgKi8KKwkJaWYgKChtc2ctPnN0YXR1c19j
b2RlID49IFNPVVBfU1RBVFVTX0JBRF9SRVFVRVNUICYmCisJCSAgICAgbXNnLT5zdGF0dXNfY29k
ZSA8PSBTT1VQX1NUQVRVU19GQUlMRURfREVQRU5ERU5DWSkgfHwKKwkJICAgIG1zZy0+c3RhdHVz
X2NvZGUgPj0gU09VUF9TVEFUVVNfSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJcmV0dXJuIFdF
QktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFOworCisJCS8qIEFuIHVucmVjb2duaXplZCAyeHgs
IDN4eCwgb3IgNHh4IHJlc3BvbnNlIGJyZWFrcworCQkgKiB0aGUgY2FjaGUuCisJCSAqLworCQlp
ZiAoKG1zZy0+c3RhdHVzX2NvZGUgPiBTT1VQX1NUQVRVU19QQVJUSUFMX0NPTlRFTlQgJiYKKwkJ
ICAgICBtc2ctPnN0YXR1c19jb2RlIDwgU09VUF9TVEFUVVNfTVVMVElQTEVfQ0hPSUNFUykgfHwK
KwkJICAgIChtc2ctPnN0YXR1c19jb2RlID4gU09VUF9TVEFUVVNfVEVNUE9SQVJZX1JFRElSRUNU
ICYmCisJCSAgICAgbXNnLT5zdGF0dXNfY29kZSA8IFNPVVBfU1RBVFVTX0lOVEVSTkFMX1NFUlZF
Ul9FUlJPUikpCisJCQlyZXR1cm4gKFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFIHwgV0VC
S0lUX1NPVVBfQ0FDSEVfSU5WQUxJREFURVMpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gY2Fj
aGVhYmlsaXR5OworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfY2FjaGVfZW50cnlfZnJl
ZSAoV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5KQoreworCWdfZnJlZSAoZW50cnktPmZpbGVu
YW1lKTsKKwllbnRyeS0+ZmlsZW5hbWUgPSBOVUxMOworCWdfZnJlZSAoZW50cnktPmtleSk7CisJ
ZW50cnktPmtleSA9IE5VTEw7CisKKwlpZiAoZW50cnktPmhlYWRlcnMpIHsKKwkJc291cF9tZXNz
YWdlX2hlYWRlcnNfZnJlZSAoZW50cnktPmhlYWRlcnMpOworCQllbnRyeS0+aGVhZGVycyA9IE5V
TEw7CisJfQorCisJaWYgKGVudHJ5LT5kYXRhKSB7CisJCWdfc3RyaW5nX2ZyZWUgKGVudHJ5LT5k
YXRhLCBUUlVFKTsKKwkJZW50cnktPmRhdGEgPSBOVUxMOworCX0KKwlpZiAoZW50cnktPmVycm9y
KSB7CisJCWdfZXJyb3JfZnJlZSAoZW50cnktPmVycm9yKTsKKwkJZW50cnktPmVycm9yID0gTlVM
TDsKKwl9CisJaWYgKGVudHJ5LT5jYW5jZWxsYWJsZSkgeworCQlnX29iamVjdF91bnJlZiAoZW50
cnktPmNhbmNlbGxhYmxlKTsKKwkJZW50cnktPmNhbmNlbGxhYmxlID0gTlVMTDsKKwl9CisKKwln
X3NsaWNlX2ZyZWUgKFdlYktpdFNvdXBDYWNoZUVudHJ5LCBlbnRyeSk7Cit9CisKK3N0YXRpYyB2
b2lkCitjb3B5X2hlYWRlcnMgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlLCBT
b3VwTWVzc2FnZUhlYWRlcnMgKmhlYWRlcnMpCit7CisJc291cF9tZXNzYWdlX2hlYWRlcnNfYXBw
ZW5kIChoZWFkZXJzLCBuYW1lLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkCit1cGRhdGVfaGVh
ZGVycyAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUsIFNvdXBNZXNzYWdlSGVh
ZGVycyAqaGVhZGVycykKK3sKKwlpZiAoc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0IChoZWFkZXJz
LCBuYW1lKSkKKwkJc291cF9tZXNzYWdlX2hlYWRlcnNfcmVwbGFjZSAoaGVhZGVycywgbmFtZSwg
dmFsdWUpOworCWVsc2UKKwkJc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kIChoZWFkZXJzLCBu
YW1lLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBndWludAord2Via2l0X3NvdXBfY2FjaGVfZW50cnlf
Z2V0X2N1cnJlbnRfYWdlIChXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkpCit7CisJdGltZV90
IG5vdyA9IHRpbWUgKE5VTEwpOworCXRpbWVfdCByZXNpZGVudF90aW1lOworCisJcmVzaWRlbnRf
dGltZSA9IG5vdyAtIGVudHJ5LT5yZXNwb25zZV90aW1lOworCXJldHVybiBlbnRyeS0+Y29ycmVj
dGVkX2luaXRpYWxfYWdlICsgcmVzaWRlbnRfdGltZTsKK30KKworc3RhdGljIGdib29sZWFuCit3
ZWJraXRfc291cF9jYWNoZV9lbnRyeV9pc19mcmVzaF9lbm91Z2ggKFdlYktpdFNvdXBDYWNoZUVu
dHJ5ICplbnRyeSwgaW50IG1pbl9mcmVzaCkKK3sKKwl1bnNpZ25lZCBsaW1pdCA9IChtaW5fZnJl
c2ggPT0gLTEpID8gd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfZ2V0X2N1cnJlbnRfYWdlIChlbnRy
eSkgOiBtaW5fZnJlc2g7CisJcmV0dXJuIGVudHJ5LT5mcmVzaG5lc3NfbGlmZXRpbWUgPiBsaW1p
dDsKK30KKworc3RhdGljIGNoYXIgKgorc291cF9tZXNzYWdlX2dldF9jYWNoZV9rZXkgKFNvdXBN
ZXNzYWdlICptc2cpCit7CisJU291cFVSSSAqdXJpID0gc291cF9tZXNzYWdlX2dldF91cmkgKG1z
Zyk7CisJcmV0dXJuIHNvdXBfdXJpX3RvX3N0cmluZyAodXJpLCBGQUxTRSk7Cit9CisKK3N0YXRp
YyB2b2lkCit3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9zZXRfZnJlc2huZXNzIChXZWJLaXRTb3Vw
Q2FjaGVFbnRyeSAqZW50cnksIFNvdXBNZXNzYWdlICptc2csIFdlYktpdFNvdXBDYWNoZSAqY2Fj
aGUpCit7CisJY29uc3QgY2hhciAqY2FjaGVfY29udHJvbDsKKwljb25zdCBjaGFyICpleHBpcmVz
LCAqZGF0ZSwgKmxhc3RfbW9kaWZpZWQ7CisJR0hhc2hUYWJsZSAqaGFzaDsKKworCWhhc2ggPSBO
VUxMOworCisJY2FjaGVfY29udHJvbCA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldCAoZW50cnkt
PmhlYWRlcnMsICJDYWNoZS1Db250cm9sIik7CisJaWYgKGNhY2hlX2NvbnRyb2wpIHsKKwkJY29u
c3QgY2hhciAqbWF4X2FnZSwgKnNfbWF4YWdlOworCQlnaW50NjQgZnJlc2huZXNzX2xpZmV0aW1l
ID0gMDsKKwkJV2ViS2l0U291cENhY2hlUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0NBQ0hF
X0dFVF9QUklWQVRFIChjYWNoZSk7CisKKwkJaGFzaCA9IHNvdXBfaGVhZGVyX3BhcnNlX3BhcmFt
X2xpc3QgKGNhY2hlX2NvbnRyb2wpOworCisJCS8qIFNob3VsZCB3ZSByZS12YWxpZGF0ZSB0aGUg
ZW50cnkgd2hlbiBpdCBnb2VzIHN0YWxlICovCisJCWVudHJ5LT5tdXN0X3JldmFsaWRhdGUgPSAo
Z2Jvb2xlYW4pZ19oYXNoX3RhYmxlX2xvb2t1cCAoaGFzaCwgIm11c3QtcmV2YWxpZGF0ZSIpOwor
CisJCS8qIFNlY3Rpb24gMi4zLjEgKi8KKwkJaWYgKHByaXYtPmNhY2hlX3R5cGUgPT0gV0VCS0lU
X1NPVVBfQ0FDSEVfU0hBUkVEKSB7CisJCQlzX21heGFnZSA9IGdfaGFzaF90YWJsZV9sb29rdXAg
KGhhc2gsICJzLW1heGFnZSIpOworCQkJaWYgKHNfbWF4YWdlKSB7CisJCQkJZnJlc2huZXNzX2xp
ZmV0aW1lID0gZ19hc2NpaV9zdHJ0b2xsIChzX21heGFnZSwgTlVMTCwgMTApOworCQkJCWlmIChm
cmVzaG5lc3NfbGlmZXRpbWUpIHsKKwkJCQkJLyogSW1wbGllcyBwcm94eS1yZXZhbGlkYXRlLiBU
T0RPOiBpcyBpdCB0cnVlPyAqLworCQkJCQllbnRyeS0+bXVzdF9yZXZhbGlkYXRlID0gVFJVRTsK
KwkJCQkJc291cF9oZWFkZXJfZnJlZV9wYXJhbV9saXN0IChoYXNoKTsKKwkJCQkJcmV0dXJuOwor
CQkJCX0KKwkJCX0KKwkJfQorCisJCS8qIElmICdtYXgtYWdlJyBjYWNoZSBkaXJlY3RpdmUgaXMg
cHJlc2VudCwgdXNlIHRoYXQgKi8KKwkJbWF4X2FnZSA9IGdfaGFzaF90YWJsZV9sb29rdXAgKGhh
c2gsICJtYXgtYWdlIik7CisJCWlmIChtYXhfYWdlKQorCQkJZnJlc2huZXNzX2xpZmV0aW1lID0g
Z19hc2NpaV9zdHJ0b2xsIChtYXhfYWdlLCBOVUxMLCAxMCk7CisKKwkJaWYgKGZyZXNobmVzc19s
aWZldGltZSkgeworCQkJZW50cnktPmZyZXNobmVzc19saWZldGltZSA9IChndWludCkgTUlOIChm
cmVzaG5lc3NfbGlmZXRpbWUsIEdfTUFYVUlOVDMyKTsKKwkJCXNvdXBfaGVhZGVyX2ZyZWVfcGFy
YW1fbGlzdCAoaGFzaCk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlpZiAoaGFzaCAhPSBOVUxM
KQorCQlzb3VwX2hlYWRlcl9mcmVlX3BhcmFtX2xpc3QgKGhhc2gpOworCisJLyogSWYgdGhlICdF
eHBpcmVzJyByZXNwb25zZSBoZWFkZXIgaXMgcHJlc2VudCwgdXNlIGl0cyB2YWx1ZQorCSAqIG1p
bnVzIHRoZSB2YWx1ZSBvZiB0aGUgJ0RhdGUnIHJlc3BvbnNlIGhlYWRlcgorCSAqLworCWV4cGly
ZXMgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKGVudHJ5LT5oZWFkZXJzLCAiRXhwaXJlcyIp
OworCWRhdGUgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKGVudHJ5LT5oZWFkZXJzLCAiRGF0
ZSIpOworCWlmIChleHBpcmVzICYmIGRhdGUpIHsKKwkJU291cERhdGUgKmV4cGlyZXNfZCwgKmRh
dGVfZDsKKwkJdGltZV90IGV4cGlyZXNfdCwgZGF0ZV90OworCisJCWV4cGlyZXNfZCA9IHNvdXBf
ZGF0ZV9uZXdfZnJvbV9zdHJpbmcgKGV4cGlyZXMpOworCQlpZiAoZXhwaXJlc19kKSB7CisJCQlk
YXRlX2QgPSBzb3VwX2RhdGVfbmV3X2Zyb21fc3RyaW5nIChkYXRlKTsKKworCQkJZXhwaXJlc190
ID0gc291cF9kYXRlX3RvX3RpbWVfdCAoZXhwaXJlc19kKTsKKwkJCWRhdGVfdCA9IHNvdXBfZGF0
ZV90b190aW1lX3QgKGRhdGVfZCk7CisKKwkJCXNvdXBfZGF0ZV9mcmVlIChleHBpcmVzX2QpOwor
CQkJc291cF9kYXRlX2ZyZWUgKGRhdGVfZCk7CisKKwkJCWlmIChleHBpcmVzX3QgJiYgZGF0ZV90
KSB7CisJCQkJZW50cnktPmZyZXNobmVzc19saWZldGltZSA9IChndWludCkgTUFYIChleHBpcmVz
X3QgLSBkYXRlX3QsIDApOworCQkJCXJldHVybjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIElm
IEV4cGlyZXMgaXMgbm90IGEgdmFsaWQgZGF0ZSB3ZSBzaG91bGQKKwkJCSAgIHRyZWF0IGl0IGFz
IGFscmVhZHkgZXhwaXJlZCwgc2VlIHNlY3Rpb24KKwkJCSAgIDMuMyAqLworCQkJZW50cnktPmZy
ZXNobmVzc19saWZldGltZSA9IDA7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKiBPdGhlcndp
c2UgYW4gaGV1cmlzdGljIG1heSBiZSB1c2VkICovCisKKwkvKiBIZXVyaXN0aWNzIE1VU1QgTk9U
IGJlIHVzZWQgd2l0aCB0aGVzZSBzdGF0dXMgY29kZXMKKwkgICAoc2VjdGlvbiAyLjMuMS4xKSAq
LworCWlmIChtc2ctPnN0YXR1c19jb2RlICE9IFNPVVBfU1RBVFVTX09LICYmCisJICAgIG1zZy0+
c3RhdHVzX2NvZGUgIT0gU09VUF9TVEFUVVNfTk9OX0FVVEhPUklUQVRJVkUgJiYKKwkgICAgbXNn
LT5zdGF0dXNfY29kZSAhPSBTT1VQX1NUQVRVU19QQVJUSUFMX0NPTlRFTlQgJiYKKwkgICAgbXNn
LT5zdGF0dXNfY29kZSAhPSBTT1VQX1NUQVRVU19NVUxUSVBMRV9DSE9JQ0VTICYmCisJICAgIG1z
Zy0+c3RhdHVzX2NvZGUgIT0gU09VUF9TVEFUVVNfTU9WRURfUEVSTUFORU5UTFkgJiYKKwkgICAg
bXNnLT5zdGF0dXNfY29kZSAhPSBTT1VQX1NUQVRVU19HT05FKQorCSAgICBnb3RvIGV4cGlyZTsK
KworCS8qIFRPRE86IGF0dGFjaCB3YXJuaW5nIDExMyBpZiByZXNwb25zZSdzIGN1cnJlbnRfYWdl
IGlzIG1vcmUKKwkgICB0aGFuIDI0aCAoc2VjdGlvbiAyLjMuMS4xKSB3aGVuIHVzaW5nIGhldXJp
c3RpY3MgKi8KKworCS8qIExhc3QtTW9kaWZpZWQgYmFzZWQgaGV1cmlzdGljICovCisJbGFzdF9t
b2RpZmllZCA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldCAoZW50cnktPmhlYWRlcnMsICJMYXN0
LU1vZGlmaWVkIik7CisJaWYgKGxhc3RfbW9kaWZpZWQpIHsKKwkJU291cERhdGUgKnNvdXBfZGF0
ZTsKKwkJdGltZV90IG5vdywgbGFzdF9tb2RpZmllZF90OworCisJCXNvdXBfZGF0ZSA9IHNvdXBf
ZGF0ZV9uZXdfZnJvbV9zdHJpbmcgKGxhc3RfbW9kaWZpZWQpOworCQlsYXN0X21vZGlmaWVkX3Qg
PSBzb3VwX2RhdGVfdG9fdGltZV90IChzb3VwX2RhdGUpOworCQlub3cgPSB0aW1lIChOVUxMKTsK
KworI2RlZmluZSBIRVVSSVNUSUNfRkFDVE9SIDAuMSAvKiBGcm9tIFNlY3Rpb24gMi4zLjEuMSAq
LworCisJCWVudHJ5LT5mcmVzaG5lc3NfbGlmZXRpbWUgPSBNQVggKDAsIChub3cgLSBsYXN0X21v
ZGlmaWVkX3QpICogSEVVUklTVElDX0ZBQ1RPUik7CisJCXNvdXBfZGF0ZV9mcmVlIChzb3VwX2Rh
dGUpOworCX0KKworCXJldHVybjsKKworZXhwaXJlOgorCS8qIElmIGFsbCBlbHNlIGZhaWxzLCBt
YWtlIHRoZSBlbnRyeSBleHBpcmUgaW1tZWRpYXRlbHkgKi8KKwllbnRyeS0+ZnJlc2huZXNzX2xp
ZmV0aW1lID0gMDsKK30KKworc3RhdGljIFdlYktpdFNvdXBDYWNoZUVudHJ5ICoKK3dlYmtpdF9z
b3VwX2NhY2hlX2VudHJ5X25ldyAoV2ViS2l0U291cENhY2hlICpjYWNoZSwgU291cE1lc3NhZ2Ug
Km1zZywgdGltZV90IHJlcXVlc3RfdGltZSwgdGltZV90IHJlc3BvbnNlX3RpbWUpCit7CisJV2Vi
S2l0U291cENhY2hlRW50cnkgKmVudHJ5OworCVNvdXBNZXNzYWdlSGVhZGVycyAqaGVhZGVyczsK
Kwljb25zdCBjaGFyICpkYXRlOworCWNoYXIgKm1kNTsKKworCWVudHJ5ID0gZ19zbGljZV9uZXcw
IChXZWJLaXRTb3VwQ2FjaGVFbnRyeSk7CisJZW50cnktPmRpcnR5ID0gRkFMU0U7CisJZW50cnkt
PndyaXRpbmcgPSBGQUxTRTsKKwllbnRyeS0+Z290X2JvZHkgPSBGQUxTRTsKKwllbnRyeS0+YmVp
bmdfdmFsaWRhdGVkID0gRkFMU0U7CisJZW50cnktPmRhdGEgPSBnX3N0cmluZ19uZXcgKE5VTEwp
OworCWVudHJ5LT5wb3MgPSAwOworCWVudHJ5LT5lcnJvciA9IE5VTEw7CisKKwkvKiBrZXkgJiBm
aWxlbmFtZSAqLworCWVudHJ5LT5rZXkgPSBzb3VwX21lc3NhZ2VfZ2V0X2NhY2hlX2tleSAobXNn
KTsKKwltZDUgPSBnX2NvbXB1dGVfY2hlY2tzdW1fZm9yX3N0cmluZyAoR19DSEVDS1NVTV9NRDUs
IGVudHJ5LT5rZXksIC0xKTsKKwllbnRyeS0+ZmlsZW5hbWUgPSBnX2J1aWxkX2ZpbGVuYW1lIChj
YWNoZS0+cHJpdi0+Y2FjaGVfZGlyLCBtZDUsIE5VTEwpOworCWdfZnJlZSAobWQ1KTsKKworCS8q
IEhlYWRlcnMgKi8KKwloZWFkZXJzID0gc291cF9tZXNzYWdlX2hlYWRlcnNfbmV3IChTT1VQX01F
U1NBR0VfSEVBREVSU19SRVNQT05TRSk7CisJc291cF9tZXNzYWdlX2hlYWRlcnNfZm9yZWFjaCAo
bXNnLT5yZXNwb25zZV9oZWFkZXJzLAorCQkJCSAgICAgIChTb3VwTWVzc2FnZUhlYWRlcnNGb3Jl
YWNoRnVuYyljb3B5X2hlYWRlcnMsCisJCQkJICAgICAgaGVhZGVycyk7CisJZW50cnktPmhlYWRl
cnMgPSBoZWFkZXJzOworCisJLyogTFJVIGxpc3QgKi8KKwllbnRyeS0+aGl0cyA9IDA7CisKKwkv
KiBTZWN0aW9uIDIuMy4xLCBGcmVzaG5lc3MgTGlmZXRpbWUgKi8KKwl3ZWJraXRfc291cF9jYWNo
ZV9lbnRyeV9zZXRfZnJlc2huZXNzIChlbnRyeSwgbXNnLCBjYWNoZSk7CisKKwkvKiBTZWN0aW9u
IDIuMy4yLCBDYWxjdWxhdGluZyBBZ2UgKi8KKwlkYXRlID0gc291cF9tZXNzYWdlX2hlYWRlcnNf
Z2V0IChlbnRyeS0+aGVhZGVycywgIkRhdGUiKTsKKworCWlmIChkYXRlKSB7CisJCVNvdXBEYXRl
ICpzb3VwX2RhdGU7CisJCWNvbnN0IGNoYXIgKmFnZTsKKwkJdGltZV90IGRhdGVfdmFsdWUsIGFw
cGFyZW50X2FnZSwgY29ycmVjdGVkX3JlY2VpdmVkX2FnZSwgcmVzcG9uc2VfZGVsYXksIGFnZV92
YWx1ZSA9IDA7CisKKwkJc291cF9kYXRlID0gc291cF9kYXRlX25ld19mcm9tX3N0cmluZyAoZGF0
ZSk7CisJCWRhdGVfdmFsdWUgPSBzb3VwX2RhdGVfdG9fdGltZV90IChzb3VwX2RhdGUpOworCQlz
b3VwX2RhdGVfZnJlZSAoc291cF9kYXRlKTsKKworCQlhZ2UgPSBzb3VwX21lc3NhZ2VfaGVhZGVy
c19nZXQgKGVudHJ5LT5oZWFkZXJzLCAiQWdlIik7CisJCWlmIChhZ2UpCisJCQlhZ2VfdmFsdWUg
PSBnX2FzY2lpX3N0cnRvbGwgKGFnZSwgTlVMTCwgMTApOworCisJCWVudHJ5LT5yZXNwb25zZV90
aW1lID0gcmVzcG9uc2VfdGltZTsKKwkJYXBwYXJlbnRfYWdlID0gTUFYICgwLCBlbnRyeS0+cmVz
cG9uc2VfdGltZSAtIGRhdGVfdmFsdWUpOworCQljb3JyZWN0ZWRfcmVjZWl2ZWRfYWdlID0gTUFY
IChhcHBhcmVudF9hZ2UsIGFnZV92YWx1ZSk7CisJCXJlc3BvbnNlX2RlbGF5ID0gZW50cnktPnJl
c3BvbnNlX3RpbWUgLSByZXF1ZXN0X3RpbWU7CisJCWVudHJ5LT5jb3JyZWN0ZWRfaW5pdGlhbF9h
Z2UgPSBjb3JyZWN0ZWRfcmVjZWl2ZWRfYWdlICsgcmVzcG9uc2VfZGVsYXk7CisJfSBlbHNlIHsK
KwkJLyogSXMgdGhpcyBjb3JyZWN0ID8gKi8KKwkJZW50cnktPmNvcnJlY3RlZF9pbml0aWFsX2Fn
ZSA9IHRpbWUgKE5VTEwpOworCX0KKworCXJldHVybiBlbnRyeTsKK30KKworc3RhdGljIHZvaWQK
K3dlYmtpdF9zb3VwX2NhY2hlX3dyaXRpbmdfZml4dHVyZV9mcmVlIChXZWJLaXRTb3VwQ2FjaGVX
cml0aW5nRml4dHVyZSAqZml4dHVyZSkKK3sKKwkvKiBGcmVlIGZpeHR1cmUuIEFuZCBkaXNjb25u
ZWN0IHNpZ25hbHMsIHdlIGRvbid0IHdhbnQgdG8KKwkgICBsaXN0ZW4gdG8gbW9yZSBTb3VwTWVz
c2FnZSBldmVudHMgYXMgd2UncmUgZmluaXNoZWQgd2l0aAorCSAgIHRoaXMgcmVzb3VyY2UgKi8K
KwlpZiAoZ19zaWduYWxfaGFuZGxlcl9pc19jb25uZWN0ZWQgKGZpeHR1cmUtPm1zZywgZml4dHVy
ZS0+Z290X2NodW5rX2hhbmRsZXIpKQorCQlnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QgKGZp
eHR1cmUtPm1zZywgZml4dHVyZS0+Z290X2NodW5rX2hhbmRsZXIpOworCWlmIChnX3NpZ25hbF9o
YW5kbGVyX2lzX2Nvbm5lY3RlZCAoZml4dHVyZS0+bXNnLCBmaXh0dXJlLT5nb3RfYm9keV9oYW5k
bGVyKSkKKwkJZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0IChmaXh0dXJlLT5tc2csIGZpeHR1
cmUtPmdvdF9ib2R5X2hhbmRsZXIpOworCWlmIChnX3NpZ25hbF9oYW5kbGVyX2lzX2Nvbm5lY3Rl
ZCAoZml4dHVyZS0+bXNnLCBmaXh0dXJlLT5yZXN0YXJ0ZWRfaGFuZGxlcikpCisJCWdfc2lnbmFs
X2hhbmRsZXJfZGlzY29ubmVjdCAoZml4dHVyZS0+bXNnLCBmaXh0dXJlLT5yZXN0YXJ0ZWRfaGFu
ZGxlcik7CisJZ19vYmplY3RfdW5yZWYgKGZpeHR1cmUtPm1zZyk7CisJZ19vYmplY3RfdW5yZWYg
KGZpeHR1cmUtPmNhY2hlKTsKKwlnX3NsaWNlX2ZyZWUgKFdlYktpdFNvdXBDYWNoZVdyaXRpbmdG
aXh0dXJlLCBmaXh0dXJlKTsKK30KKworc3RhdGljIHZvaWQKK2Nsb3NlX3JlYWR5X2NiIChHT2Jq
ZWN0ICpzb3VyY2UsIEdBc3luY1Jlc3VsdCAqcmVzdWx0LCBXZWJLaXRTb3VwQ2FjaGVXcml0aW5n
Rml4dHVyZSAqZml4dHVyZSkKK3sKKwlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkgPSBmaXh0
dXJlLT5lbnRyeTsKKwlXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlID0gZml4dHVyZS0+Y2FjaGU7CisJ
R091dHB1dFN0cmVhbSAqc3RyZWFtID0gR19PVVRQVVRfU1RSRUFNIChzb3VyY2UpOworCWdvZmZz
ZXQgY29udGVudF9sZW5ndGg7CisKKwlnX3dhcm5faWZfZmFpbCAoZW50cnktPmVycm9yID09IE5V
TEwpOworCisJLyogRklYTUU6IHdoYXQgZG8gd2UgZG8gb24gZXJyb3IgPyAqLworCisJaWYgKHN0
cmVhbSkgeworCQlnX291dHB1dF9zdHJlYW1fY2xvc2VfZmluaXNoIChzdHJlYW0sIHJlc3VsdCwg
TlVMTCk7CisJCWdfb2JqZWN0X3VucmVmIChzdHJlYW0pOworCX0KKwllbnRyeS0+c3RyZWFtID0g
TlVMTDsKKworCWNvbnRlbnRfbGVuZ3RoID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2NvbnRl
bnRfbGVuZ3RoIChlbnRyeS0+aGVhZGVycyk7CisKKwkvKiBJZiB0aGUgcHJvY2VzcyB3YXMgY2Fu
Y2VsbGVkLCB0aGVuIGRlbGV0ZSB0aGUgZW50cnkgZnJvbQorCSAgIHRoZSBjYWNoZS4gRG8gaXQg
YWxzbyBpZiB0aGUgc2l6ZSBvZiBhIGNodW5rZWQgcmVzb3VyY2UgaXMKKwkgICB0b28gbXVjaCBm
b3IgdGhlIGNhY2hlICovCisJaWYgKGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkIChlbnRyeS0+
Y2FuY2VsbGFibGUpKSB7CisJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2RlbGV0ZSAoY2FjaGUs
IGVudHJ5KTsKKwkJZW50cnkgPSBOVUxMOworCX0gZWxzZSBpZiAoKHNvdXBfbWVzc2FnZV9oZWFk
ZXJzX2dldF9lbmNvZGluZyAoZW50cnktPmhlYWRlcnMpID09IFNPVVBfRU5DT0RJTkdfQ0hVTktF
RCkgfHwKKwkJICAgZW50cnktPmxlbmd0aCAhPSBjb250ZW50X2xlbmd0aCkgeworCisJCS8qKiBU
d28gb3B0aW9ucyBoZXJlOgorCQkgKgorCQkgKiAxLiAiY2h1bmtlZCIgZGF0YSwgZW50cnkgd2Fz
IHRlbXBvcmFyaWx5IGFkZGVkIHRvCisJCSAqIGNhY2hlIChhcyBjb250ZW50LWxlbmd0aCBpcyAw
KSBhbmQgbm93IHRoYXQgd2UgaGF2ZQorCQkgKiB0aGUgYWN0dWFsIHNpemUgd2UgaGF2ZSB0byBl
dmFsdWF0ZSBpZiB3ZSB3YW50IGl0CisJCSAqIGluIHRoZSBjYWNoZSBvciBub3QKKwkJICoKKwkJ
ICogMi4gQ29udGVudC1MZW5ndGggaGFzIGEgZGlmZmVyZW50IHZhbHVlIHRoYW4gYWN0dWFsCisJ
CSAqIGxlbmd0aCwgbWVhbnMgdGhhdCB0aGUgY29udGVudCB3YXMgZW5jb2RlZCBmb3IKKwkJICog
dHJhbnNtaXNzaW9uICh0eXBpY2FsbHkgY29tcHJlc3NlZCkgYW5kIHRodXMgd2UKKwkJICogaGF2
ZSB0byBzdWJzdHJhY3QgdGhlIGNvbnRlbnQtbGVuZ3RoIHZhbHVlIHRoYXQgd2FzCisJCSAqIGFk
ZGVkIHRvIHRoZSBjYWNoZSBhbmQgYWRkIHRoZSB1bmVuY29kZWQgbGVuZ3RoCisJCSAqKi8KKwkJ
Z2ludCBsZW5ndGhfdG9fYWRkID0gZW50cnktPmxlbmd0aCAtIGNvbnRlbnRfbGVuZ3RoOworCisJ
CS8qIE1ha2Ugcm9vbSBpbiBjYWNoZSBpZiBuZWVkZWQgKi8KKwkJaWYgKGNhY2hlX2FjY2VwdHNf
ZW50cmllc19vZl9zaXplKGNhY2hlLCBsZW5ndGhfdG9fYWRkKSkgeworCQkJbWFrZV9yb29tX2Zv
cl9uZXdfZW50cnkgKGNhY2hlLCBsZW5ndGhfdG9fYWRkKTsKKworCQkJY2FjaGUtPnByaXYtPnNp
emUgKz0gbGVuZ3RoX3RvX2FkZDsKKwkJfSBlbHNlIHsKKwkJCXdlYmtpdF9zb3VwX2NhY2hlX2Vu
dHJ5X2RlbGV0ZSAoY2FjaGUsIGVudHJ5KTsKKwkJCWVudHJ5ID0gTlVMTDsKKwkJfQorCX0KKwor
CWlmIChlbnRyeSkgeworCQkvKiBHZXQgcmlkIG9mIHRoZSBHU3RyaW5nIGluIG1lbW9yeSBmb3Ig
dGhlIHJlc291cmNlIG5vdyAqLworCQlpZiAoZW50cnktPmRhdGEpIHsKKwkJCWdfc3RyaW5nX2Zy
ZWUgKGVudHJ5LT5kYXRhLCBUUlVFKTsKKwkJCWVudHJ5LT5kYXRhID0gTlVMTDsKKwkJfQorCisJ
CWVudHJ5LT5kaXJ0eSA9IEZBTFNFOworCQllbnRyeS0+d3JpdGluZyA9IEZBTFNFOworCQllbnRy
eS0+Z290X2JvZHkgPSBGQUxTRTsKKwkJZW50cnktPnBvcyA9IDA7CisKKwkJZ19vYmplY3RfdW5y
ZWYgKGVudHJ5LT5jYW5jZWxsYWJsZSk7CisJCWVudHJ5LT5jYW5jZWxsYWJsZSA9IE5VTEw7CisJ
fQorCisJY2FjaGUtPnByaXYtPm5fcGVuZGluZy0tOworCisJLyogRnJlZXMgKi8KKwl3ZWJraXRf
c291cF9jYWNoZV93cml0aW5nX2ZpeHR1cmVfZnJlZSAoZml4dHVyZSk7Cit9CisKK3N0YXRpYyB2
b2lkCit3cml0ZV9yZWFkeV9jYiAoR09iamVjdCAqc291cmNlLCBHQXN5bmNSZXN1bHQgKnJlc3Vs
dCwgV2ViS2l0U291cENhY2hlV3JpdGluZ0ZpeHR1cmUgKmZpeHR1cmUpCit7CisJR091dHB1dFN0
cmVhbSAqc3RyZWFtID0gR19PVVRQVVRfU1RSRUFNIChzb3VyY2UpOworCUdFcnJvciAqZXJyb3Ig
PSBOVUxMOworCWdzc2l6ZSB3cml0ZV9zaXplOworCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRy
eSA9IGZpeHR1cmUtPmVudHJ5OworCisJaWYgKGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkIChl
bnRyeS0+Y2FuY2VsbGFibGUpKSB7CisJCWdfb3V0cHV0X3N0cmVhbV9jbG9zZV9hc3luYyAoc3Ry
ZWFtLAorCQkJCQkgICAgIEdfUFJJT1JJVFlfREVGQVVMVCwKKwkJCQkJICAgICBlbnRyeS0+Y2Fu
Y2VsbGFibGUsCisJCQkJCSAgICAgKEdBc3luY1JlYWR5Q2FsbGJhY2spIGNsb3NlX3JlYWR5X2Ni
LAorCQkJCQkgICAgIGZpeHR1cmUpOworCQlyZXR1cm47CisJfQorCisJd3JpdGVfc2l6ZSA9IGdf
b3V0cHV0X3N0cmVhbV93cml0ZV9maW5pc2ggKHN0cmVhbSwgcmVzdWx0LCAmZXJyb3IpOworCWlm
ICh3cml0ZV9zaXplIDw9IDAgfHwgZXJyb3IpIHsKKwkJaWYgKGVycm9yKQorCQkJZW50cnktPmVy
cm9yID0gZXJyb3I7CisJCWdfb3V0cHV0X3N0cmVhbV9jbG9zZV9hc3luYyAoc3RyZWFtLAorCQkJ
CQkgICAgIEdfUFJJT1JJVFlfREVGQVVMVCwKKwkJCQkJICAgICBlbnRyeS0+Y2FuY2VsbGFibGUs
CisJCQkJCSAgICAgKEdBc3luY1JlYWR5Q2FsbGJhY2spY2xvc2VfcmVhZHlfY2IsCisJCQkJCSAg
ICAgZml4dHVyZSk7CisJCS8qIEZJWE1FOiBXZSBzaG91bGQgY29tcGxldGVseSBzdG9wIGNhY2hp
bmcgdGhlCisJCSAgIHJlc291cmNlIGF0IHRoaXMgcG9pbnQgKi8KKwl9IGVsc2UgeworCQllbnRy
eS0+cG9zICs9IHdyaXRlX3NpemU7CisKKwkJLyogQXJlIHdlIHN0aWxsIHdyaXRpbmcgYW5kIGlz
IHRoZXJlIG5ldyBkYXRhIHRvIHdyaXRlCisJCSAgIGFscmVhZHkgPyAqLworCQlpZiAoZW50cnkt
PmRhdGEgJiYgZW50cnktPnBvcyA8IGVudHJ5LT5kYXRhLT5sZW4pIHsKKwkJCWdfb3V0cHV0X3N0
cmVhbV93cml0ZV9hc3luYyAoZW50cnktPnN0cmVhbSwKKwkJCQkJCSAgICAgZW50cnktPmRhdGEt
PnN0ciArIGVudHJ5LT5wb3MsCisJCQkJCQkgICAgIGVudHJ5LT5kYXRhLT5sZW4gLSBlbnRyeS0+
cG9zLAorCQkJCQkJICAgICBHX1BSSU9SSVRZX0RFRkFVTFQsCisJCQkJCQkgICAgIGVudHJ5LT5j
YW5jZWxsYWJsZSwKKwkJCQkJCSAgICAgKEdBc3luY1JlYWR5Q2FsbGJhY2spd3JpdGVfcmVhZHlf
Y2IsCisJCQkJCQkgICAgIGZpeHR1cmUpOworCQl9IGVsc2UgeworCQkJZW50cnktPndyaXRpbmcg
PSBGQUxTRTsKKworCQkJaWYgKGVudHJ5LT5nb3RfYm9keSkgeworCQkJCS8qIElmIHdlIGFscmVh
ZHkgcmVjZWl2ZWQgJ2dvdC1ib2R5JworCQkJCSAgIGFuZCB3ZSBoYXZlIHdyaXR0ZW4gYWxsIHRo
ZSBkYXRhLAorCQkJCSAgIHdlIGNhbiBjbG9zZSB0aGUgc3RyZWFtICovCisJCQkJZ19vdXRwdXRf
c3RyZWFtX2Nsb3NlX2FzeW5jIChlbnRyeS0+c3RyZWFtLAorCQkJCQkJCSAgICAgR19QUklPUklU
WV9ERUZBVUxULAorCQkJCQkJCSAgICAgZW50cnktPmNhbmNlbGxhYmxlLAorCQkJCQkJCSAgICAg
KEdBc3luY1JlYWR5Q2FsbGJhY2spY2xvc2VfcmVhZHlfY2IsCisJCQkJCQkJICAgICBmaXh0dXJl
KTsKKwkJCX0KKwkJfQorCisJfQorfQorCitzdGF0aWMgdm9pZAorbXNnX2dvdF9jaHVua19jYiAo
U291cE1lc3NhZ2UgKm1zZywgU291cEJ1ZmZlciAqY2h1bmssIFdlYktpdFNvdXBDYWNoZVdyaXRp
bmdGaXh0dXJlICpmaXh0dXJlKQoreworCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSA9IGZp
eHR1cmUtPmVudHJ5OworCisJZ19yZXR1cm5faWZfZmFpbCAoY2h1bmstPmRhdGEgJiYgY2h1bmst
Pmxlbmd0aCk7CisJZ19yZXR1cm5faWZfZmFpbCAoZW50cnkpOworCisJLyogSWdub3JlIHRoaXMg
aWYgdGhlIHdyaXRpbmcgb3IgYXBwZW5kaW5nIHdhcyBjYW5jZWxsZWQgKi8KKwlpZiAoIWdfY2Fu
Y2VsbGFibGVfaXNfY2FuY2VsbGVkIChlbnRyeS0+Y2FuY2VsbGFibGUpKSB7CisKKwkJZ19zdHJp
bmdfYXBwZW5kX2xlbiAoZW50cnktPmRhdGEsIGNodW5rLT5kYXRhLCBjaHVuay0+bGVuZ3RoKTsK
KwkJZW50cnktPmxlbmd0aCA9IGVudHJ5LT5kYXRhLT5sZW47CisKKwkJaWYgKCFjYWNoZV9hY2Nl
cHRzX2VudHJpZXNfb2Zfc2l6ZSAoZml4dHVyZS0+Y2FjaGUsIGVudHJ5LT5sZW5ndGgpKSB7CisJ
CQkvKiBRdWlja2x5IGNhbmNlbCB0aGUgY2FjaGluZyBvZiB0aGUgcmVzb3VyY2UgKi8KKwkJCWdf
Y2FuY2VsbGFibGVfY2FuY2VsIChlbnRyeS0+Y2FuY2VsbGFibGUpOworCQl9CisJfQorCisJLyog
RklYTUU6IHJlbW92ZSB0aGUgZXJyb3IgY2hlY2sgd2hlbiB3ZSBjYW5jZWwgdGhlIGNhY2hpbmcg
YXQKKwkgICB0aGUgZmlyc3Qgd3JpdGUgZXJyb3IgKi8KKwkvKiBPbmx5IHdyaXRlIGlmIHRoZSBl
bnRyeSBzdHJlYW0gaXMgcmVhZHkgKi8KKwlpZiAoZW50cnktPndyaXRpbmcgPT0gRkFMU0UgJiYg
ZW50cnktPmVycm9yID09IE5VTEwgJiYgZW50cnktPnN0cmVhbSkgeworCQlHU3RyaW5nICpkYXRh
ID0gZW50cnktPmRhdGE7CisJCWVudHJ5LT53cml0aW5nID0gVFJVRTsKKwkJZ19vdXRwdXRfc3Ry
ZWFtX3dyaXRlX2FzeW5jIChlbnRyeS0+c3RyZWFtLAorCQkJCQkgICAgIGRhdGEtPnN0ciArIGVu
dHJ5LT5wb3MsCisJCQkJCSAgICAgZGF0YS0+bGVuIC0gZW50cnktPnBvcywKKwkJCQkJICAgICBH
X1BSSU9SSVRZX0RFRkFVTFQsCisJCQkJCSAgICAgZW50cnktPmNhbmNlbGxhYmxlLAorCQkJCQkg
ICAgIChHQXN5bmNSZWFkeUNhbGxiYWNrKXdyaXRlX3JlYWR5X2NiLAorCQkJCQkgICAgIGZpeHR1
cmUpOworCX0KK30KKworc3RhdGljIHZvaWQKK21zZ19nb3RfYm9keV9jYiAoU291cE1lc3NhZ2Ug
Km1zZywgV2ViS2l0U291cENhY2hlV3JpdGluZ0ZpeHR1cmUgKmZpeHR1cmUpCit7CisJV2ViS2l0
U291cENhY2hlRW50cnkgKmVudHJ5ID0gZml4dHVyZS0+ZW50cnk7CisJZ19yZXR1cm5faWZfZmFp
bCAoZW50cnkpOworCisJZW50cnktPmdvdF9ib2R5ID0gVFJVRTsKKworCWlmICghZW50cnktPnN0
cmVhbSAmJiBlbnRyeS0+cG9zICE9IGVudHJ5LT5sZW5ndGgpCisJCS8qIFRoZSBzdHJlYW0gaXMg
bm90IHJlYWR5IHRvIGJlIHdyaXR0ZW4gYnV0IHdlIHN0aWxsCisJCSAgIGhhdmUgZGF0YSB0byB3
cml0ZSwgd2UnbGwgd3JpdGUgaXQgd2hlbiB0aGUgc3RyZWFtCisJCSAgIGlzIG9wZW5lZCBmb3Ig
d3JpdGluZyAqLworCQlyZXR1cm47CisKKworCWlmIChlbnRyeS0+cG9zICE9IGVudHJ5LT5sZW5n
dGgpIHsKKwkJLyogSWYgd2Ugc3RpbGwgaGF2ZSBkYXRhIHRvIHdyaXRlLCB3cml0ZSBpdCwKKwkJ
ICAgd3JpdGVfcmVhZHlfY2Igd2lsbCBjbG9zZSB0aGUgc3RyZWFtICovCisJCWlmIChlbnRyeS0+
d3JpdGluZyA9PSBGQUxTRSAmJiBlbnRyeS0+ZXJyb3IgPT0gTlVMTCAmJiBlbnRyeS0+c3RyZWFt
KSB7CisJCQlnX291dHB1dF9zdHJlYW1fd3JpdGVfYXN5bmMgKGVudHJ5LT5zdHJlYW0sCisJCQkJ
CQkgICAgIGVudHJ5LT5kYXRhLT5zdHIgKyBlbnRyeS0+cG9zLAorCQkJCQkJICAgICBlbnRyeS0+
ZGF0YS0+bGVuIC0gZW50cnktPnBvcywKKwkJCQkJCSAgICAgR19QUklPUklUWV9ERUZBVUxULAor
CQkJCQkJICAgICBlbnRyeS0+Y2FuY2VsbGFibGUsCisJCQkJCQkgICAgIChHQXN5bmNSZWFkeUNh
bGxiYWNrKXdyaXRlX3JlYWR5X2NiLAorCQkJCQkJICAgICBmaXh0dXJlKTsKKwkJfQorCQlyZXR1
cm47CisJfQorCisJaWYgKGVudHJ5LT5zdHJlYW0pCisJCWdfb3V0cHV0X3N0cmVhbV9jbG9zZV9h
c3luYyAoZW50cnktPnN0cmVhbSwKKwkJCQkJICAgICBHX1BSSU9SSVRZX0RFRkFVTFQsCisJCQkJ
CSAgICAgZW50cnktPmNhbmNlbGxhYmxlLAorCQkJCQkgICAgIChHQXN5bmNSZWFkeUNhbGxiYWNr
KWNsb3NlX3JlYWR5X2NiLAorCQkJCQkgICAgIGZpeHR1cmUpOworfQorCitzdGF0aWMgdm9pZAor
d2Via2l0X3NvdXBfY2FjaGVfZW50cnlfZGVsZXRlIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLCBX
ZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkpCit7CisJR0ZpbGUgKmZpbGU7CisJY2hhciAqbWQ1
LCAqZmlsZW5hbWU7CisKKwkvKiBEZWxldGUgY2FjaGUgZmlsZS4gV2UgZG9uJ3QgdXNlIHRoZSBl
bnRyeS0+ZmlsZW5hbWUgYmVjYXVzZQorCSAgIHdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgZmlsZSBp
cyBkZWxldGVkIGV2ZW4gdG91Z2ggdGhlIGNhY2hlCisJICAgYmVjYW1lIHNvbWVob3cgY29ycnVw
dGVkIGFuZCB0aGUgZW50cnkgaXMgbm90IHRoZXJlICovCisJbWQ1ID0gZ19jb21wdXRlX2NoZWNr
c3VtX2Zvcl9zdHJpbmcgKEdfQ0hFQ0tTVU1fTUQ1LCBlbnRyeS0+a2V5LCAtMSk7CisJZmlsZW5h
bWUgPSBnX2J1aWxkX2ZpbGVuYW1lIChjYWNoZS0+cHJpdi0+Y2FjaGVfZGlyLCBtZDUsIE5VTEwp
OworCWZpbGUgPSBnX2ZpbGVfbmV3X2Zvcl9wYXRoIChmaWxlbmFtZSk7CisJZ19maWxlX2RlbGV0
ZSAoZmlsZSwgTlVMTCwgTlVMTCk7CisJZ19mcmVlIChtZDUpOworCWdfZnJlZSAoZmlsZW5hbWUp
OworCWdfb2JqZWN0X3VucmVmIChmaWxlKTsKKworCS8qIFJlbW92ZSBmcm9tIExSVSAqLworCWNh
Y2hlLT5wcml2LT5scnVfc3RhcnQgPSBnX2xpc3RfZGVsZXRlX2xpbmsgKGNhY2hlLT5wcml2LT5s
cnVfc3RhcnQsIGVudHJ5LT5scnUpOworCisJLyogUmVtb3ZlIGZyb20gY2FjaGUgKi8KKwlnX2hh
c2hfdGFibGVfcmVtb3ZlIChjYWNoZS0+cHJpdi0+Y2FjaGUsIGVudHJ5LT5rZXkpOworfQorCitz
dGF0aWMgZ2ludAorbHJ1X2NvbXBhcmVfZnVuYyAoZ2NvbnN0cG9pbnRlciBhLCBnY29uc3Rwb2lu
dGVyIGIpCit7CisJV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5X2EgPSAoV2ViS2l0U291cENh
Y2hlRW50cnkgKikgYTsKKwlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnlfYiA9IChXZWJLaXRT
b3VwQ2FjaGVFbnRyeSAqKSBiOworCisJLyoqIFRoZSByYXRpb25hbGUgb2YgdGhpcyBzb3J0aW5n
IGZ1bmMgaXMKKwkgKgorCSAqIDEuIHNvcnQgYnkgaGl0cyAtPiBMUlUgYWxnb3JpdGhtLCB0aGVu
CisJICoKKwkgKiAyLiBzb3J0IGJ5IGZyZXNobmVzcyBsaWZldGltZSwgd2UgYmV0dGVyIGRpc2Nh
cmQgZmlyc3QKKwkgKiBlbnRyaWVzIHRoYXQgYXJlIGNsb3NlIHRvIGV4cGlyZQorCSAqCisJICog
My4gc29ydCBieSBzaXplLCByZXBsYWNlIGZpcnN0IHNtYWxsIHNpemUgcmVzb3VyY2VzIGFzIHRo
ZXkKKwkgKiBhcmUgY2hlYXBlciB0byBkb3dubG9hZAorCSAqKi8KKworCS8qIFNvcnQgYnkgaGl0
cyAqLworCWlmIChlbnRyeV9hLT5oaXRzICE9IGVudHJ5X2ItPmhpdHMpCisJCXJldHVybiBlbnRy
eV9hLT5oaXRzIC0gZW50cnlfYi0+aGl0czsKKworCS8qIFNvcnQgYnkgZnJlc2huZXNzX2xpZmV0
aW1lICovCisJaWYgKGVudHJ5X2EtPmZyZXNobmVzc19saWZldGltZSAhPSBlbnRyeV9iLT5mcmVz
aG5lc3NfbGlmZXRpbWUpCisJCXJldHVybiBlbnRyeV9hLT5mcmVzaG5lc3NfbGlmZXRpbWUgLSBl
bnRyeV9iLT5mcmVzaG5lc3NfbGlmZXRpbWU7CisKKwkvKiBTb3J0IGJ5IHNpemUgKi8KKwlyZXR1
cm4gZW50cnlfYS0+bGVuZ3RoIC0gZW50cnlfYi0+bGVuZ3RoOworfQorCitzdGF0aWMgZ2Jvb2xl
YW4KK2NhY2hlX2FjY2VwdHNfZW50cmllc19vZl9zaXplIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hl
LCBndWludCBsZW5ndGhfdG9fYWRkKQoreworCS8qIFdlIGNvdWxkIGFkZCBoZXJlIHNvbWUgbW9y
ZSBoZXVyaXN0aWNzLiBUT0RPOiByZXZpZXcgaG93CisJICAgdGhpcyBpcyBkb25lIGJ5IG90aGVy
IEhUVFAgY2FjaGVzICovCisKKwlyZXR1cm4gbGVuZ3RoX3RvX2FkZCA8PSBjYWNoZS0+cHJpdi0+
bWF4X2VudHJ5X2RhdGFfc2l6ZTsKK30KKworc3RhdGljIHZvaWQKK21ha2Vfcm9vbV9mb3JfbmV3
X2VudHJ5IChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLCBndWludCBsZW5ndGhfdG9fYWRkKQorewor
CS8qIENoZWNrIHRoYXQgdGhlcmUgaXMgZW5vdWdoIHJvb20gZm9yIHRoZSBuZXcgZW50cnkuIFRo
aXMgaXMKKwkgICBhbiBhcHByb3hpbWF0aW9uIGFzIHdlJ3JlIG5vdCB3b3JraW5nIG91dCB0aGUg
c2l6ZSBvZiB0aGUKKwkgICBjYWNoZSBmaWxlIG9yIHRoZSBzaXplIG9mIHRoZSBoZWFkZXJzIGZv
ciBwZXJmb3JtYW5jZQorCSAgIHJlYXNvbnMuIFRPRE86IGNoZWNrIGlmIHRoYXQgd291bGQgYmUg
cmVhbGx5IHRoYXQgZXhwZW5zaXZlICovCisJd2hpbGUgKGNhY2hlLT5wcml2LT5scnVfc3RhcnQg
JiYKKwkgICAgICAgKGxlbmd0aF90b19hZGQgKyBjYWNoZS0+cHJpdi0+c2l6ZSA+IGNhY2hlLT5w
cml2LT5tYXhfc2l6ZSkpIHsKKwkJV2ViS2l0U291cENhY2hlRW50cnkgKm9sZF9lbnRyeTsKKwor
CQkvKiBSZW1vdmUgZnJvbSBsaXN0ICovCisJCW9sZF9lbnRyeSA9IChXZWJLaXRTb3VwQ2FjaGVF
bnRyeSAqKSBjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0LT5kYXRhOworCQljYWNoZS0+cHJpdi0+bHJ1
X3N0YXJ0ID0gZ19saXN0X2RlbGV0ZV9saW5rIChjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0LCBjYWNo
ZS0+cHJpdi0+bHJ1X3N0YXJ0KTsKKworCQkvKiBEaXNjYXJkIGVudHJpZXMuIE9uY2UgY2FuY2Vs
bGVkIHJlc291cmNlcyB3aWxsIGJlCisJCSAgIGZyZWVkIGluIGNsb3NlX3JlYWR5X2NiICovCisJ
CWdfZGVidWcgKCJEaXNjYXJkaW5nICgldSBieXRlcykuLi5cdChub3cgJXUpIiwgb2xkX2VudHJ5
LT5sZW5ndGgsIGNhY2hlLT5wcml2LT5zaXplKTsKKwkJY2FjaGUtPnByaXYtPnNpemUgLT0gb2xk
X2VudHJ5LT5sZW5ndGg7CisKKwkJaWYgKG9sZF9lbnRyeS0+ZGlydHkpCisJCQlnX2NhbmNlbGxh
YmxlX2NhbmNlbCAob2xkX2VudHJ5LT5jYW5jZWxsYWJsZSk7CisJCWVsc2UKKwkJCXdlYmtpdF9z
b3VwX2NhY2hlX2VudHJ5X2RlbGV0ZSAoY2FjaGUsIG9sZF9lbnRyeSk7CisJfQorCWlmIChHX1VO
TElLRUxZIChjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0ID09IE5VTEwpKQorCQljYWNoZS0+cHJpdi0+
bHJ1X2VuZCA9IE5VTEw7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgord2Via2l0X3NvdXBfY2FjaGVf
ZW50cnlfaW5zZXJ0X2J5X2tleSAoV2ViS2l0U291cENhY2hlICpjYWNoZSwgY29uc3QgY2hhciAq
a2V5LCBXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkpCit7CisJZ3VpbnQgbGVuZ3RoX3RvX2Fk
ZCA9IDA7CisKKwlpZiAoc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2VuY29kaW5nIChlbnRyeS0+
aGVhZGVycykgIT0gU09VUF9FTkNPRElOR19DSFVOS0VEKQorCQlsZW5ndGhfdG9fYWRkID0gc291
cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2NvbnRlbnRfbGVuZ3RoIChlbnRyeS0+aGVhZGVycyk7CisK
KwkvKiBDaGVjayBpZiB3ZSBhcmUgZ29pbmcgdG8gc3RvcmUgdGhlIHJlc291cmNlIGRlcGVuZGlu
ZyBvbiBpdHMgc2l6ZSAqLworCWlmIChsZW5ndGhfdG9fYWRkKSB7CisJCWlmICghY2FjaGVfYWNj
ZXB0c19lbnRyaWVzX29mX3NpemUgKGNhY2hlLCBsZW5ndGhfdG9fYWRkKSkKKwkJCXJldHVybiBG
QUxTRTsKKworCQkvKiBNYWtlIHJvb20gZm9yIG5ldyBlbnRyeSBpZiBuZWVkZWQgKi8KKwkJbWFr
ZV9yb29tX2Zvcl9uZXdfZW50cnkgKGNhY2hlLCBsZW5ndGhfdG9fYWRkKTsKKwl9CisKKwlnX2hh
c2hfdGFibGVfaW5zZXJ0IChjYWNoZS0+cHJpdi0+Y2FjaGUsIGdfc3RyZHVwIChrZXkpLCBlbnRy
eSk7CisKKwkvKiBDb21wdXRlIG5ldyBjYWNoZSBzaXplICovCisJY2FjaGUtPnByaXYtPnNpemUg
Kz0gbGVuZ3RoX3RvX2FkZDsKKworCS8qIFVwZGF0ZSBMUlUgbGlzdHMgKi8KKwljYWNoZS0+cHJp
di0+bHJ1X3N0YXJ0ID0gZ19saXN0X2luc2VydF9zb3J0ZWQgKGNhY2hlLT5wcml2LT5scnVfc3Rh
cnQsIGVudHJ5LCBscnVfY29tcGFyZV9mdW5jKTsKKwlpZiAoR19MSUtFTFkgKGNhY2hlLT5wcml2
LT5scnVfZW5kKSkgeworCQl3aGlsZSAoY2FjaGUtPnByaXYtPmxydV9lbmQtPm5leHQgIT0gTlVM
TCkKKwkJCWNhY2hlLT5wcml2LT5scnVfZW5kID0gZ19saXN0X25leHQgKGNhY2hlLT5wcml2LT5s
cnVfZW5kKTsKKwl9IGVsc2UgeworCQljYWNoZS0+cHJpdi0+bHJ1X2VuZCA9IGNhY2hlLT5wcml2
LT5scnVfc3RhcnQ7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkCittc2df
cmVzdGFydGVkX2NiIChTb3VwTWVzc2FnZSAqbXNnLCBXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50
cnkpCit7CisJLyogRklYTUU6IFdoYXQgc2hvdWxkIHdlIGRvIGhlcmUgZXhhY3RseT8gKi8KK30K
Kworc3RhdGljIHZvaWQKK2FwcGVuZF90b19yZWFkeV9jYiAoR09iamVjdCAqc291cmNlLCBHQXN5
bmNSZXN1bHQgKnJlc3VsdCwgV2ViS2l0U291cENhY2hlV3JpdGluZ0ZpeHR1cmUgKmZpeHR1cmUp
Cit7CisJR0ZpbGUgKmZpbGUgPSAoR0ZpbGUqKXNvdXJjZTsKKwlHT3V0cHV0U3RyZWFtICpzdHJl
YW07CisJV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5ID0gZml4dHVyZS0+ZW50cnk7CisKKwlz
dHJlYW0gPSAoR091dHB1dFN0cmVhbSopIGdfZmlsZV9hcHBlbmRfdG9fZmluaXNoIChmaWxlLCBy
ZXN1bHQsICZlbnRyeS0+ZXJyb3IpOworCisJaWYgKGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVk
IChlbnRyeS0+Y2FuY2VsbGFibGUpIHx8IGVudHJ5LT5lcnJvcikgeworCQlmaXh0dXJlLT5jYWNo
ZS0+cHJpdi0+c2l6ZSAtPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfY29udGVudF9sZW5ndGgg
KGVudHJ5LT5oZWFkZXJzKTsKKwkJZml4dHVyZS0+Y2FjaGUtPnByaXYtPm5fcGVuZGluZy0tOwor
CQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9kZWxldGUgKGZpeHR1cmUtPmNhY2hlLCBlbnRyeSk7
CisJCXdlYmtpdF9zb3VwX2NhY2hlX3dyaXRpbmdfZml4dHVyZV9mcmVlIChmaXh0dXJlKTsKKwkJ
cmV0dXJuOworCX0KKworCWVudHJ5LT5zdHJlYW0gPSBnX29iamVjdF9yZWYgKHN0cmVhbSk7CisJ
Z19vYmplY3RfdW5yZWYgKGZpbGUpOworCisJLyogSWYgd2UgYWxyZWFkeSBnb3QgYWxsIHRoZSBk
YXRhIHdlIGhhdmUgdG8gaW5pdGlhdGUgdGhlCisJICAgd3JpdGluZyBoZXJlLCBzaW5jZSB3ZSB3
b24ndCBnZXQgbW9yZSAnZ290LWNodW5rJworCSAgIHNpZ25hbHMgKi8KKwlpZiAoZW50cnktPmdv
dF9ib2R5KSB7CisJCUdTdHJpbmcgKmRhdGEgPSBlbnRyeS0+ZGF0YTsKKworCQkvKiBJdCBjb3Vs
ZCBoYXBwZW4gdGhhdCByZWFkaW5nIHRoZSBkYXRhIGZyb20gc2VydmVyCisJCSAgIHdhcyBjb21w
bGV0ZWQgYmVmb3JlIHRoaXMgaGFwcGVucy4gSW4gdGhhdCBjYXNlCisJCSAgIHRoZXJlIGlzIG5v
IGRhdGEgKi8KKwkJaWYgKGRhdGEpIHsKKwkJCWVudHJ5LT53cml0aW5nID0gVFJVRTsKKwkJCWdf
b3V0cHV0X3N0cmVhbV93cml0ZV9hc3luYyAoZW50cnktPnN0cmVhbSwKKwkJCQkJCSAgICAgZGF0
YS0+c3RyICsgZW50cnktPnBvcywKKwkJCQkJCSAgICAgZGF0YS0+bGVuIC0gZW50cnktPnBvcywK
KwkJCQkJCSAgICAgR19QUklPUklUWV9ERUZBVUxULAorCQkJCQkJICAgICBlbnRyeS0+Y2FuY2Vs
bGFibGUsCisJCQkJCQkgICAgIChHQXN5bmNSZWFkeUNhbGxiYWNrKXdyaXRlX3JlYWR5X2NiLAor
CQkJCQkJICAgICBmaXh0dXJlKTsKKwkJfQorCX0KK30KKwordHlwZWRlZiBzdHJ1Y3QgeworCXRp
bWVfdCByZXF1ZXN0X3RpbWU7CisJU291cFNlc3Npb25GZWF0dXJlICpmZWF0dXJlOworCWd1bG9u
ZyBnb3RfaGVhZGVyc19oYW5kbGVyOworfSBSZXF1ZXN0SGVscGVyOworCitzdGF0aWMgdm9pZAor
bXNnX2dvdF9oZWFkZXJzX2NiIChTb3VwTWVzc2FnZSAqbXNnLCBncG9pbnRlciB1c2VyX2RhdGEp
Cit7CisJV2ViS2l0U291cENhY2hlICpjYWNoZTsKKwlXZWJLaXRTb3VwQ2FjaGVhYmlsaXR5IGNh
Y2hlYWJsZTsKKwlSZXF1ZXN0SGVscGVyICpoZWxwZXI7CisJdGltZV90IHJlcXVlc3RfdGltZSwg
cmVzcG9uc2VfdGltZTsKKworCXJlc3BvbnNlX3RpbWUgPSB0aW1lIChOVUxMKTsKKworCWhlbHBl
ciA9IChSZXF1ZXN0SGVscGVyICopIHVzZXJfZGF0YTsKKwljYWNoZSA9IFdFQktJVF9TT1VQX0NB
Q0hFIChoZWxwZXItPmZlYXR1cmUpOworCXJlcXVlc3RfdGltZSA9IGhlbHBlci0+cmVxdWVzdF90
aW1lOworCWdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyAobXNnLCBtc2dfZ290
X2hlYWRlcnNfY2IsIHVzZXJfZGF0YSk7CisJZ19zbGljZV9mcmVlIChSZXF1ZXN0SGVscGVyLCBo
ZWxwZXIpOworCisJY2FjaGVhYmxlID0gd2Via2l0X3NvdXBfY2FjaGVfZ2V0X2NhY2hlYWJpbGl0
eSAoY2FjaGUsIG1zZyk7CisKKwlpZiAoY2FjaGVhYmxlICYgV0VCS0lUX1NPVVBfQ0FDSEVfQ0FD
SEVBQkxFKSB7CisJCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeTsKKwkJY2hhciAqa2V5Owor
CQlHRmlsZSAqZmlsZTsKKwkJV2ViS2l0U291cENhY2hlV3JpdGluZ0ZpeHR1cmUgKmZpeHR1cmU7
CisKKwkJLyogQ2hlY2sgaWYgd2UgYXJlIGFscmVhZHkgY2FjaGluZyB0aGlzIHJlc291cmNlICov
CisJCWtleSA9IHNvdXBfbWVzc2FnZV9nZXRfY2FjaGVfa2V5IChtc2cpOworCQllbnRyeSA9IGdf
aGFzaF90YWJsZV9sb29rdXAgKGNhY2hlLT5wcml2LT5jYWNoZSwga2V5KTsKKwkJZ19mcmVlIChr
ZXkpOworCisJCWlmIChlbnRyeSAmJiBlbnRyeS0+ZGlydHkpCisJCQlyZXR1cm47CisKKwkJLyog
Q3JlYXRlIGEgbmV3IGVudHJ5LCBkZWxldGluZyBhbnkgb2xkIG9uZSBpZiBwcmVzZW50ICovCisJ
CWVudHJ5ID0gd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfbmV3IChjYWNoZSwgbXNnLCByZXF1ZXN0
X3RpbWUsIHJlc3BvbnNlX3RpbWUpOworCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9kZWxldGUg
KGNhY2hlLCBlbnRyeSk7CisKKwkJZW50cnktPmhpdHMgPSAxOworCisJCS8qIERvIG5vdCBjb250
aW51ZSBpZiBpdCBjYW4gbm90IGJlIHN0b3JlZCAqLworCQlpZiAoIXdlYmtpdF9zb3VwX2NhY2hl
X2VudHJ5X2luc2VydF9ieV9rZXkgKGNhY2hlLCAoY29uc3QgZ2NoYXIgKikgZW50cnktPmtleSwg
ZW50cnkpKSB7CisJCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9mcmVlIChlbnRyeSk7CisJCQly
ZXR1cm47CisJCX0KKworCQlmaXh0dXJlID0gZ19zbGljZV9uZXcgKFdlYktpdFNvdXBDYWNoZVdy
aXRpbmdGaXh0dXJlKTsKKwkJZml4dHVyZS0+Y2FjaGUgPSBnX29iamVjdF9yZWYgKGNhY2hlKTsK
KwkJZml4dHVyZS0+ZW50cnkgPSBlbnRyeTsKKwkJZml4dHVyZS0+bXNnID0gZ19vYmplY3RfcmVm
IChtc2cpOworCisJCS8qIFdlIGNvbm5lY3Qgbm93IHRvIHRoZXNlIHNpZ25hbHMgYW5kIGJ1ZmZl
ciB0aGUgZGF0YQorCQkgICBpZiBpdCBjb21lcyBiZWZvcmUgdGhlIGZpbGUgaXMgcmVhZHkgZm9y
IHdyaXRpbmcgKi8KKwkJZml4dHVyZS0+Z290X2NodW5rX2hhbmRsZXIgPQorCQkJZ19zaWduYWxf
Y29ubmVjdCAobXNnLCAiZ290LWNodW5rIiwgR19DQUxMQkFDSyAobXNnX2dvdF9jaHVua19jYiks
IGZpeHR1cmUpOworCQlmaXh0dXJlLT5nb3RfYm9keV9oYW5kbGVyID0KKwkJCWdfc2lnbmFsX2Nv
bm5lY3QgKG1zZywgImdvdC1ib2R5IiwgR19DQUxMQkFDSyAobXNnX2dvdF9ib2R5X2NiKSwgZml4
dHVyZSk7CisJCWZpeHR1cmUtPnJlc3RhcnRlZF9oYW5kbGVyID0KKwkJCWdfc2lnbmFsX2Nvbm5l
Y3QgKG1zZywgInJlc3RhcnRlZCIsIEdfQ0FMTEJBQ0sgKG1zZ19yZXN0YXJ0ZWRfY2IpLCBlbnRy
eSk7CisKKwkJLyogUHJlcGFyZSBlbnRyeSAqLworCQlmaWxlID0gZ19maWxlX25ld19mb3JfcGF0
aCAoZW50cnktPmZpbGVuYW1lKTsKKwkJY2FjaGUtPnByaXYtPm5fcGVuZGluZysrOworCisJCWVu
dHJ5LT5kaXJ0eSA9IFRSVUU7CisJCWVudHJ5LT5jYW5jZWxsYWJsZSA9IGdfY2FuY2VsbGFibGVf
bmV3ICgpOworCQlnX2ZpbGVfYXBwZW5kX3RvX2FzeW5jIChmaWxlLCAwLAorCQkJCQlHX1BSSU9S
SVRZX0RFRkFVTFQsIGVudHJ5LT5jYW5jZWxsYWJsZSwKKwkJCQkJKEdBc3luY1JlYWR5Q2FsbGJh
Y2spYXBwZW5kX3RvX3JlYWR5X2NiLAorCQkJCQlmaXh0dXJlKTsKKwl9IGVsc2UgaWYgKGNhY2hl
YWJsZSAmIFdFQktJVF9TT1VQX0NBQ0hFX0lOVkFMSURBVEVTKSB7CisJCWNoYXIgKmtleTsKKwkJ
V2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5OworCisJCWtleSA9IHNvdXBfbWVzc2FnZV9nZXRf
Y2FjaGVfa2V5IChtc2cpOworCQllbnRyeSA9IGdfaGFzaF90YWJsZV9sb29rdXAgKGNhY2hlLT5w
cml2LT5jYWNoZSwga2V5KTsKKwkJZ19mcmVlIChrZXkpOworCisJCWlmIChlbnRyeSkKKwkJCXdl
YmtpdF9zb3VwX2NhY2hlX2VudHJ5X2RlbGV0ZSAoY2FjaGUsIGVudHJ5KTsKKwl9IGVsc2UgaWYg
KGNhY2hlYWJsZSAmIFdFQktJVF9TT1VQX0NBQ0hFX1ZBTElEQVRFUykgeworCQljaGFyICprZXk7
CisJCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeTsKKworCQlrZXkgPSBzb3VwX21lc3NhZ2Vf
Z2V0X2NhY2hlX2tleSAobXNnKTsKKwkJZW50cnkgPSBnX2hhc2hfdGFibGVfbG9va3VwIChjYWNo
ZS0+cHJpdi0+Y2FjaGUsIGtleSk7CisJCWdfZnJlZSAoa2V5KTsKKworCQlnX3JldHVybl9pZl9m
YWlsIChlbnRyeSk7CisKKwkJZW50cnktPmJlaW5nX3ZhbGlkYXRlZCA9IEZBTFNFOworCisJCS8q
IFdlIHVwZGF0ZSB0aGUgaGVhZGVycyBvZiB0aGUgZXhpc3RpbmcgY2FjaGUgaXRlbSwKKwkJICAg
cGx1cyBpdHMgYWdlICovCisJCXNvdXBfbWVzc2FnZV9oZWFkZXJzX2ZvcmVhY2ggKG1zZy0+cmVz
cG9uc2VfaGVhZGVycywKKwkJCQkJICAgICAgKFNvdXBNZXNzYWdlSGVhZGVyc0ZvcmVhY2hGdW5j
KXVwZGF0ZV9oZWFkZXJzLAorCQkJCQkgICAgICBlbnRyeS0+aGVhZGVycyk7CisJCXdlYmtpdF9z
b3VwX2NhY2hlX2VudHJ5X3NldF9mcmVzaG5lc3MgKGVudHJ5LCBtc2csIGNhY2hlKTsKKwl9Cit9
CisKK0dJbnB1dFN0cmVhbSoKK3dlYmtpdF9zb3VwX2NhY2hlX3NlbmRfcmVzcG9uc2UgKFdlYktp
dFNvdXBDYWNoZSAqY2FjaGUsIFNvdXBNZXNzYWdlICptc2cpCit7CisJY2hhciAqa2V5OworCVdl
YktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeTsKKwljaGFyICpjdXJyZW50X2FnZTsKKwlHSW5wdXRT
dHJlYW0gKnN0cmVhbSA9IE5VTEw7CisJR0ZpbGUgKmZpbGU7CisKKwlnX3JldHVybl92YWxfaWZf
ZmFpbCAoV0VCS0lUX0lTX1NPVVBfQ0FDSEUgKGNhY2hlKSwgTlVMTCk7CisJZ19yZXR1cm5fdmFs
X2lmX2ZhaWwgKFNPVVBfSVNfTUVTU0FHRSAobXNnKSwgTlVMTCk7CisKKwlrZXkgPSBzb3VwX21l
c3NhZ2VfZ2V0X2NhY2hlX2tleSAobXNnKTsKKwllbnRyeSA9IGdfaGFzaF90YWJsZV9sb29rdXAg
KGNhY2hlLT5wcml2LT5jYWNoZSwga2V5KTsKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoZW50cnks
IE5VTEwpOworCisJLyogSWYgd2UgYXJlIHRvbGQgdG8gc2VuZCBhIHJlc3BvbnNlIGZyb20gY2Fj
aGUgYW55IHZhbGlkYXRpb24KKwkgICBpbiBjb3Vyc2UgaXMgb3ZlciBieSBub3cgKi8KKwllbnRy
eS0+YmVpbmdfdmFsaWRhdGVkID0gRkFMU0U7CisKKwkvKiBIZWFkZXJzICovCisJc291cF9tZXNz
YWdlX2hlYWRlcnNfZm9yZWFjaCAoZW50cnktPmhlYWRlcnMsCisJCQkJICAgICAgKFNvdXBNZXNz
YWdlSGVhZGVyc0ZvcmVhY2hGdW5jKXVwZGF0ZV9oZWFkZXJzLAorCQkJCSAgICAgIG1zZy0+cmVz
cG9uc2VfaGVhZGVycyk7CisKKwkvKiBBZGQgJ0FnZScgaGVhZGVyIHdpdGggdGhlIGN1cnJlbnQg
YWdlICovCisJY3VycmVudF9hZ2UgPSBnX3N0cmR1cF9wcmludGYgKCIlZCIsIHdlYmtpdF9zb3Vw
X2NhY2hlX2VudHJ5X2dldF9jdXJyZW50X2FnZSAoZW50cnkpKTsKKwlzb3VwX21lc3NhZ2VfaGVh
ZGVyc19yZXBsYWNlIChtc2ctPnJlc3BvbnNlX2hlYWRlcnMsCisJCQkJICAgICAgIkFnZSIsCisJ
CQkJICAgICAgY3VycmVudF9hZ2UpOworCWdfZnJlZSAoY3VycmVudF9hZ2UpOworCisJLyogVE9E
TzogdGhlIG9yaWdpbmFsIGlkZWEgd2FzIHRvIHNhdmUgcmVhZHMsIGJ1dCBjdXJyZW50IGNvZGUK
KwkgICBhc3N1bWVzIHRoYXQgYSBzdHJlYW0gaXMgYWx3YXlzIHJldHVybmVkLiBOZWVkIHRvIHJl
YWNoCisJICAgc29tZSBhZ3JlZW1lbnQgaGVyZS4gQWxzbyB3ZSBoYXZlIHRvIGhhbmRsZSB0aGUg
c2l0dWF0aW9uCisJICAgd2VyZSB0aGUgZmlsZSB3YXMgbm8gbG9uZ2VyIHRoZXJlIChmb3IgZXhh
bXBsZSBmaWxlcworCSAgIHJlbW92ZWQgd2l0aG91dCBub3RpZnlpbmcgdGhlIGNhY2hlICovCisJ
ZmlsZSA9IGdfZmlsZV9uZXdfZm9yX3BhdGggKGVudHJ5LT5maWxlbmFtZSk7CisJc3RyZWFtID0g
KEdJbnB1dFN0cmVhbSAqKSBnX2ZpbGVfcmVhZCAoZmlsZSwgTlVMTCwgTlVMTCk7CisKKwlyZXR1
cm4gc3RyZWFtOworfQorCitzdGF0aWMgdm9pZAorcmVxdWVzdF9zdGFydGVkIChTb3VwU2Vzc2lv
bkZlYXR1cmUgKmZlYXR1cmUsIFNvdXBTZXNzaW9uICpzZXNzaW9uLAorCQkgU291cE1lc3NhZ2Ug
Km1zZywgU291cFNvY2tldCAqc29ja2V0KQoreworCVJlcXVlc3RIZWxwZXIgKmhlbHBlciA9IGdf
c2xpY2VfbmV3MCAoUmVxdWVzdEhlbHBlcik7CisJaGVscGVyLT5yZXF1ZXN0X3RpbWUgPSB0aW1l
IChOVUxMKTsKKwloZWxwZXItPmZlYXR1cmUgPSBmZWF0dXJlOworCWhlbHBlci0+Z290X2hlYWRl
cnNfaGFuZGxlciA9IGdfc2lnbmFsX2Nvbm5lY3QgKG1zZywgImdvdC1oZWFkZXJzIiwKKwkJCQkJ
CQlHX0NBTExCQUNLIChtc2dfZ290X2hlYWRlcnNfY2IpLAorCQkJCQkJCWhlbHBlcik7Cit9CisK
K3N0YXRpYyB2b2lkCithdHRhY2ggKFNvdXBTZXNzaW9uRmVhdHVyZSAqZmVhdHVyZSwgU291cFNl
c3Npb24gKnNlc3Npb24pCit7CisJV2ViS2l0U291cENhY2hlICpjYWNoZSA9IFdFQktJVF9TT1VQ
X0NBQ0hFIChmZWF0dXJlKTsKKwljYWNoZS0+cHJpdi0+c2Vzc2lvbiA9IHNlc3Npb247CisKKwl3
ZWJraXRfc291cF9jYWNoZV9kZWZhdWx0X2ZlYXR1cmVfaW50ZXJmYWNlLT5hdHRhY2ggKGZlYXR1
cmUsIHNlc3Npb24pOworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfY2FjaGVfc2Vzc2lv
bl9mZWF0dXJlX2luaXQgKFNvdXBTZXNzaW9uRmVhdHVyZUludGVyZmFjZSAqZmVhdHVyZV9pbnRl
cmZhY2UsCisJCQkJIGdwb2ludGVyIGludGVyZmFjZV9kYXRhKQoreworCXdlYmtpdF9zb3VwX2Nh
Y2hlX2RlZmF1bHRfZmVhdHVyZV9pbnRlcmZhY2UgPQorCQlnX3R5cGVfZGVmYXVsdF9pbnRlcmZh
Y2VfcGVlayAoU09VUF9UWVBFX1NFU1NJT05fRkVBVFVSRSk7CisKKwlmZWF0dXJlX2ludGVyZmFj
ZS0+YXR0YWNoID0gYXR0YWNoOworCWZlYXR1cmVfaW50ZXJmYWNlLT5yZXF1ZXN0X3N0YXJ0ZWQg
PSByZXF1ZXN0X3N0YXJ0ZWQ7Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfc291cF9jYWNoZV9p
bml0IChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKQoreworCVdlYktpdFNvdXBDYWNoZVByaXZhdGUg
KnByaXY7CisKKwlwcml2ID0gY2FjaGUtPnByaXYgPSBXRUJLSVRfU09VUF9DQUNIRV9HRVRfUFJJ
VkFURSAoY2FjaGUpOworCisJcHJpdi0+Y2FjaGUgPSBnX2hhc2hfdGFibGVfbmV3X2Z1bGwgKGdf
c3RyX2hhc2gsCisJCQkJCSAgICAgZ19zdHJfZXF1YWwsCisJCQkJCSAgICAgKEdEZXN0cm95Tm90
aWZ5KWdfZnJlZSwKKwkJCQkJICAgICAoR0Rlc3Ryb3lOb3RpZnkpd2Via2l0X3NvdXBfY2FjaGVf
ZW50cnlfZnJlZSk7CisKKwkvKiBMUlUgKi8KKwlwcml2LT5scnVfc3RhcnQgPSBOVUxMOworCXBy
aXYtPmxydV9lbmQgPSBOVUxMOworCisJLyogKi8KKwlwcml2LT5uX3BlbmRpbmcgPSAwOworCisJ
LyogQ2FjaGUgc2l6ZSAqLworCXByaXYtPm1heF9zaXplID0gREVGQVVMVF9NQVhfU0laRTsKKwlw
cml2LT5tYXhfZW50cnlfZGF0YV9zaXplID0gcHJpdi0+bWF4X3NpemUgLyBNQVhfRU5UUllfREFU
QV9QRVJDRU5UQUdFOworCXByaXYtPnNpemUgPSAwOworfQorCitzdGF0aWMgdm9pZAord2Via2l0
X3NvdXBfY2FjaGVfZmluYWxpemUgKEdPYmplY3QgKm9iamVjdCkKK3sKKwlXZWJLaXRTb3VwQ2Fj
aGVQcml2YXRlICpwcml2OworCisJcHJpdiA9IFdFQktJVF9TT1VQX0NBQ0hFIChvYmplY3QpLT5w
cml2OworCisJZ19oYXNoX3RhYmxlX2Rlc3Ryb3kgKHByaXYtPmNhY2hlKTsKKwlnX2ZyZWUgKHBy
aXYtPmNhY2hlX2Rpcik7CisKKwlnX2xpc3RfZnJlZSAocHJpdi0+bHJ1X3N0YXJ0KTsKKwlwcml2
LT5scnVfc3RhcnQgPSBOVUxMOworCXByaXYtPmxydV9lbmQgPSBOVUxMOworCisJR19PQkpFQ1Rf
Q0xBU1MgKHdlYmtpdF9zb3VwX2NhY2hlX3BhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3Qp
OworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfY2FjaGVfc2V0X3Byb3BlcnR5IChHT2Jq
ZWN0ICpvYmplY3QsIGd1aW50IHByb3BfaWQsCisJCQkgY29uc3QgR1ZhbHVlICp2YWx1ZSwgR1Bh
cmFtU3BlYyAqcHNwZWMpCit7CisJV2ViS2l0U291cENhY2hlUHJpdmF0ZSAqcHJpdiA9IFdFQktJ
VF9TT1VQX0NBQ0hFIChvYmplY3QpLT5wcml2OworCisJc3dpdGNoIChwcm9wX2lkKSB7CisJY2Fz
ZSBQUk9QX0NBQ0hFX0RJUjoKKwkJcHJpdi0+Y2FjaGVfZGlyID0gZ192YWx1ZV9kdXBfc3RyaW5n
ICh2YWx1ZSk7CisJCS8qIENyZWF0ZSBkaXJlY3RvcnkgaWYgaXQgZG9lcyBub3QgZXhpc3QgKEZJ
WE1FOiBzaG91bGQgd2U/KSAqLworCQlpZiAoIWdfZmlsZV90ZXN0IChwcml2LT5jYWNoZV9kaXIs
IEdfRklMRV9URVNUX0VYSVNUUyB8IEdfRklMRV9URVNUX0lTX0RJUikpCisJCQlnX21rZGlyX3dp
dGhfcGFyZW50cyAocHJpdi0+Y2FjaGVfZGlyLCAwNzAwKTsKKwkJYnJlYWs7CisJY2FzZSBQUk9Q
X0NBQ0hFX1RZUEU6CisJCXByaXYtPmNhY2hlX3R5cGUgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1
ZSk7CisJCS8qIFRPRE86IGNsZWFyIHByaXZhdGUgZW50cmllcyBhbmQgaXNzdWUgYSB3YXJuaW5n
IGlmIG1vdmluZyB0byBzaGFyZWQ/ICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUdfT0JKRUNU
X1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisJCWJy
ZWFrOworCX0KK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX2NhY2hlX2dldF9wcm9wZXJ0
eSAoR09iamVjdCAqb2JqZWN0LCBndWludCBwcm9wX2lkLAorCQkJIEdWYWx1ZSAqdmFsdWUsIEdQ
YXJhbVNwZWMgKnBzcGVjKQoreworCVdlYktpdFNvdXBDYWNoZVByaXZhdGUgKnByaXYgPSBXRUJL
SVRfU09VUF9DQUNIRSAob2JqZWN0KS0+cHJpdjsKKworCXN3aXRjaCAocHJvcF9pZCkgeworCWNh
c2UgUFJPUF9DQUNIRV9ESVI6CisJCWdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIHByaXYtPmNh
Y2hlX2Rpcik7CisJCWJyZWFrOworCWNhc2UgUFJPUF9DQUNIRV9UWVBFOgorCQlnX3ZhbHVlX3Nl
dF9lbnVtICh2YWx1ZSwgcHJpdi0+Y2FjaGVfdHlwZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJ
CUdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3Bl
Yyk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX2NhY2hlX2Nv
bnN0cnVjdGVkIChHT2JqZWN0ICpvYmplY3QpCit7CisJV2ViS2l0U291cENhY2hlUHJpdmF0ZSAq
cHJpdjsKKworCXByaXYgPSBXRUJLSVRfU09VUF9DQUNIRSAob2JqZWN0KS0+cHJpdjsKKworCWlm
ICghcHJpdi0+Y2FjaGVfZGlyKSB7CisJCS8qIFNldCBhIGRlZmF1bHQgY2FjaGUgZGlyLCBkaWZm
ZXJlbnQgZm9yIGVhY2ggdXNlciAqLworCQlwcml2LT5jYWNoZV9kaXIgPSBnX2J1aWxkX2ZpbGVu
YW1lIChnX2dldF91c2VyX2NhY2hlX2RpciAoKSwKKwkJCQkJCSAgICAiaHR0cGNhY2hlIiwKKwkJ
CQkJCSAgICBOVUxMKTsKKwkJaWYgKCFnX2ZpbGVfdGVzdCAocHJpdi0+Y2FjaGVfZGlyLCBHX0ZJ
TEVfVEVTVF9FWElTVFMgfCBHX0ZJTEVfVEVTVF9JU19ESVIpKQorCQkJZ19ta2Rpcl93aXRoX3Bh
cmVudHMgKHByaXYtPmNhY2hlX2RpciwgMDcwMCk7CisJfQorCisJaWYgKEdfT0JKRUNUX0NMQVNT
ICh3ZWJraXRfc291cF9jYWNoZV9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3RlZCkKKwkJR19PQkpF
Q1RfQ0xBU1MgKHdlYmtpdF9zb3VwX2NhY2hlX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkIChv
YmplY3QpOworfQorCisjZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX1RZUEVfVFlQRSAod2Via2l0
X3NvdXBfY2FjaGVfdHlwZV9nZXRfdHlwZSgpKQorc3RhdGljIEdUeXBlCit3ZWJraXRfc291cF9j
YWNoZV90eXBlX2dldF90eXBlICh2b2lkKQoreworCXN0YXRpYyBHVHlwZSBjYWNoZV90eXBlID0g
MDsKKworCXN0YXRpYyBjb25zdCBHRW51bVZhbHVlIGNhY2hlX3R5cGVzW10gPSB7CisJCXtXRUJL
SVRfU09VUF9DQUNIRV9TSU5HTEVfVVNFUiwgIlNpbmdsZSB1c2VyIGNhY2hlIiwgInVzZXIifSwK
KwkJe1dFQktJVF9TT1VQX0NBQ0hFX1NIQVJFRCwgIlNoYXJlZCBjYWNoZSIsICJzaGFyZWQifSwK
KwkJezAsIE5VTEwsIE5VTEx9CisJfTsKKworCWlmICghY2FjaGVfdHlwZSkgeworCQljYWNoZV90
eXBlID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIldlYktpdFNvdXBDYWNoZVR5cGUiLCBjYWNo
ZV90eXBlcyk7CisJfQorCXJldHVybiBjYWNoZV90eXBlOworfQorCitzdGF0aWMgdm9pZAord2Vi
a2l0X3NvdXBfY2FjaGVfY2xhc3NfaW5pdCAoV2ViS2l0U291cENhY2hlQ2xhc3MgKmNhY2hlX2Ns
YXNzKQoreworCUdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MqKWNh
Y2hlX2NsYXNzOworCisJZ29iamVjdF9jbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfc291cF9jYWNo
ZV9maW5hbGl6ZTsKKwlnb2JqZWN0X2NsYXNzLT5jb25zdHJ1Y3RlZCA9IHdlYmtpdF9zb3VwX2Nh
Y2hlX2NvbnN0cnVjdGVkOworCWdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9z
b3VwX2NhY2hlX3NldF9wcm9wZXJ0eTsKKwlnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSB3
ZWJraXRfc291cF9jYWNoZV9nZXRfcHJvcGVydHk7CisKKwljYWNoZV9jbGFzcy0+Z2V0X2NhY2hl
YWJpbGl0eSA9IGdldF9jYWNoZWFiaWxpdHk7CisKKwlnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KGdvYmplY3RfY2xhc3MsIFBST1BfQ0FDSEVfRElSLAorCQkJCQlnX3BhcmFtX3NwZWNf
c3RyaW5nICgiY2FjaGUtZGlyIiwKKwkJCQkJCQkgICAgICJDYWNoZSBkaXJlY3RvcnkiLAorCQkJ
CQkJCSAgICAgIlRoZSBkaXJlY3RvcnkgdG8gc3RvcmUgdGhlIGNhY2hlIGZpbGVzIiwKKwkJCQkJ
CQkgICAgIE5VTEwsCisJCQkJCQkJICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09O
U1RSVUNUX09OTFkpKTsKKworCWdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVj
dF9jbGFzcywgUFJPUF9DQUNIRV9UWVBFLAorCQkJCQlnX3BhcmFtX3NwZWNfZW51bSAoImNhY2hl
LXR5cGUiLAorCQkJCQkJCSAgICJDYWNoZSB0eXBlIiwKKwkJCQkJCQkgICAiV2hldGhlciB0aGUg
Y2FjaGUgaXMgcHJpdmF0ZSBvciBzaGFyZWQiLAorCQkJCQkJCSAgIFdFQktJVF9TT1VQX0NBQ0hF
X1RZUEVfVFlQRSwKKwkJCQkJCQkgICBXRUJLSVRfU09VUF9DQUNIRV9TSU5HTEVfVVNFUiwKKwkJ
CQkJCQkgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKTsKKwor
CWdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShjYWNoZV9jbGFzcywgc2l6ZW9mIChXZWJLaXRTb3Vw
Q2FjaGVQcml2YXRlKSk7Cit9CisKKy8qKgorICogd2Via2l0X3NvdXBfY2FjaGVfbmV3OgorICog
QGNhY2hlX2RpcjogdGhlIGRpcmVjdG9yeSB0byBzdG9yZSB0aGUgY2FjaGVkIGRhdGEsIG9yICVO
VUxMIHRvIHVzZSB0aGUgZGVmYXVsdCBvbmUKKyAqIEBjYWNoZV90eXBlOiB0aGUgI1dlYktpdFNv
dXBDYWNoZVR5cGUgb2YgdGhlIGNhY2hlCisgKgorICogQ3JlYXRlcyBhIG5ldyAjV2ViS2l0U291
cENhY2hlLgorICoKKyAqIFJldHVybnM6IGEgbmV3ICNXZWJLaXRTb3VwQ2FjaGUKKyAqCisgKiBT
aW5jZTogMi4yOAorICoqLworV2ViS2l0U291cENhY2hlICoKK3dlYmtpdF9zb3VwX2NhY2hlX25l
dyAoY29uc3QgY2hhciAqY2FjaGVfZGlyLCBXZWJLaXRTb3VwQ2FjaGVUeXBlIGNhY2hlX3R5cGUp
Cit7CisJcmV0dXJuIGdfb2JqZWN0X25ldyAoV0VCS0lUX1RZUEVfU09VUF9DQUNIRSwKKwkJCSAg
ICAgImNhY2hlLWRpciIsIGNhY2hlX2RpciwKKwkJCSAgICAgImNhY2hlLXR5cGUiLCBjYWNoZV90
eXBlLAorCQkJICAgICBOVUxMKTsKK30KKworLyoqCisgKiB3ZWJraXRfc291cF9jYWNoZV9oYXNf
cmVzcG9uc2U6CisgKiBAY2FjaGU6IGEgI1dlYktpdFNvdXBDYWNoZQorICogQG1zZzogYSAjU291
cE1lc3NhZ2UKKyAqIAorICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHdoZXRoZXIgdGhlIEBj
YWNoZSBvYmplY3QgaGFzIGEgcHJvcGVyCisgKiByZXNwb25zZSBmb3IgdGhlIHJlcXVlc3QgQG1z
ZyBnaXZlbiB0aGUgZmxhZ3MgYm90aCBpbiB0aGUgcmVxdWVzdAorICogYW5kIHRoZSBjYWNoZWQg
cmVwbHkgYW5kIHRoZSB0aW1lIGVsbGFwc2VkIHNpbmNlIGl0IHdhcyBjYWNoZWQuCisgKiAKKyAq
IFJldHVybnM6IHdoZXRoZXIgb3Igbm90IHRoZSBAY2FjaGUgaGFzIGEgdmFsaWQgcmVzcG9uc2Ug
Zm9yIEBtc2cKKyAqKi8KK1dlYktpdFNvdXBDYWNoZVJlc3BvbnNlCit3ZWJraXRfc291cF9jYWNo
ZV9oYXNfcmVzcG9uc2UgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsIFNvdXBNZXNzYWdlICptc2cp
Cit7CisJY2hhciAqa2V5OworCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeTsKKwljb25zdCBj
aGFyICpjYWNoZV9jb250cm9sOworCUdIYXNoVGFibGUgKmhhc2g7CisJZ3BvaW50ZXIgdmFsdWU7
CisJZ2Jvb2xlYW4gbXVzdF9yZXZhbGlkYXRlOworCWludCBtYXhfYWdlLCBtYXhfc3RhbGUsIG1p
bl9mcmVzaDsKKworCWtleSA9IHNvdXBfbWVzc2FnZV9nZXRfY2FjaGVfa2V5IChtc2cpOworCWVu
dHJ5ID0gZ19oYXNoX3RhYmxlX2xvb2t1cCAoY2FjaGUtPnByaXYtPmNhY2hlLCBrZXkpOworCisJ
LyogMS4gVGhlIHByZXNlbnRlZCBSZXF1ZXN0LVVSSSBhbmQgdGhhdCBvZiBzdG9yZWQgcmVzcG9u
c2UKKwkgKiBtYXRjaAorCSAqLworCWlmICghZW50cnkpCisJCXJldHVybiBXRUJLSVRfU09VUF9D
QUNIRV9SRVNQT05TRV9TVEFMRTsKKworCS8qIEluY3JlYXNlIGhpdCBjb3VudCAqLworCWVudHJ5
LT5oaXRzKys7CisKKwlpZiAoZW50cnktPmRpcnR5IHx8IGVudHJ5LT5iZWluZ192YWxpZGF0ZWQp
CisJCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9TVEFMRTsKKworCS8qIDIuIFRo
ZSByZXF1ZXN0IG1ldGhvZCBhc3NvY2lhdGVkIHdpdGggdGhlIHN0b3JlZCByZXNwb25zZQorCSAq
ICBhbGxvd3MgaXQgdG8gYmUgdXNlZCBmb3IgdGhlIHByZXNlbnRlZCByZXF1ZXN0CisJICovCisK
KwkvKiBJbiBwcmFjdGljZSB0aGlzIG1lYW5zIHdlIG9ubHkgcmV0dXJuIG91ciByZXNvdXJjZSBm
b3IgR0VULAorCSAqIGNhY2hlYWJpbGl0eSBmb3Igb3RoZXIgbWV0aG9kcyBpcyBhIFRPRE8gaW4g
dGhlIFJGQworCSAqIChUT0RPOiBhbHRob3VnaCB3ZSBjb3VsZCByZXR1cm4gdGhlIGhlYWRlcnMg
Zm9yIEhFQUQKKwkgKiBwcm9iYWJseSkuCisJICovCisJaWYgKG1zZy0+bWV0aG9kICE9IFNPVVBf
TUVUSE9EX0dFVCkKKwkJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX1NUQUxFOwor
CisJLyogMy4gU2VsZWN0aW5nIHJlcXVlc3QtaGVhZGVycyBub21pbmF0ZWQgYnkgdGhlIHN0b3Jl
ZAorCSAqIHJlc3BvbnNlIChpZiBhbnkpIG1hdGNoIHRob3NlIHByZXNlbnRlZC4KKwkgKi8KKwor
CS8qIFRPRE8gKi8KKworCS8qIDQuIFRoZSBwcmVzZW50ZWQgcmVxdWVzdCBhbmQgc3RvcmVkIHJl
c3BvbnNlIGFyZSBmcmVlIGZyb20KKwkgKiBkaXJlY3RpdmVzIHRoYXQgd291bGQgcHJldmVudCBp
dHMgdXNlLgorCSAqLworCisJbXVzdF9yZXZhbGlkYXRlID0gRkFMU0U7CisJbWF4X2FnZSA9IG1h
eF9zdGFsZSA9IG1pbl9mcmVzaCA9IC0xOworCisJY2FjaGVfY29udHJvbCA9IHNvdXBfbWVzc2Fn
ZV9oZWFkZXJzX2dldCAobXNnLT5yZXF1ZXN0X2hlYWRlcnMsICJDYWNoZS1Db250cm9sIik7CisJ
aWYgKGNhY2hlX2NvbnRyb2wpIHsKKwkJaGFzaCA9IHNvdXBfaGVhZGVyX3BhcnNlX3BhcmFtX2xp
c3QgKGNhY2hlX2NvbnRyb2wpOworCisJCWlmIChnX2hhc2hfdGFibGVfbG9va3VwX2V4dGVuZGVk
IChoYXNoLCAibm8tc3RvcmUiLCBOVUxMLCBOVUxMKSkgeworCQkJZ19oYXNoX3RhYmxlX2Rlc3Ry
b3kgKGhhc2gpOworCQkJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX1NUQUxFOwor
CQl9CisKKwkJaWYgKGdfaGFzaF90YWJsZV9sb29rdXBfZXh0ZW5kZWQgKGhhc2gsICJuby1jYWNo
ZSIsIE5VTEwsIE5VTEwpKSB7CisJCQllbnRyeS0+bXVzdF9yZXZhbGlkYXRlID0gVFJVRTsKKwkJ
fQorCisJCWlmIChnX2hhc2hfdGFibGVfbG9va3VwX2V4dGVuZGVkIChoYXNoLCAibWF4LWFnZSIs
IE5VTEwsICZ2YWx1ZSkpIHsKKwkJCW1heF9hZ2UgPSAoaW50KU1JTiAoZ19hc2NpaV9zdHJ0b2xs
ICh2YWx1ZSwgTlVMTCwgMTApLCBHX01BWElOVDMyKTsKKwkJfQorCisJCS8qIG1heC1zdGFsZSBj
YW4gaGF2ZSBubyB2YWx1ZSBzZXQsIHdlIG5lZWQgdG8gdXNlIF9leHRlbmRlZCAqLworCQlpZiAo
Z19oYXNoX3RhYmxlX2xvb2t1cF9leHRlbmRlZCAoaGFzaCwgIm1heC1zdGFsZSIsIE5VTEwsICZ2
YWx1ZSkpIHsKKwkJCWlmICh2YWx1ZSkKKwkJCQltYXhfc3RhbGUgPSAoaW50KU1JTiAoZ19hc2Np
aV9zdHJ0b2xsICh2YWx1ZSwgTlVMTCwgMTApLCBHX01BWElOVDMyKTsKKwkJCWVsc2UKKwkJCQlt
YXhfc3RhbGUgPSBHX01BWElOVDMyOworCQl9CisKKwkJdmFsdWUgPSBnX2hhc2hfdGFibGVfbG9v
a3VwIChoYXNoLCAibWluLWZyZXNoIik7CisJCWlmICh2YWx1ZSkKKwkJCW1pbl9mcmVzaCA9IChp
bnQpTUlOIChnX2FzY2lpX3N0cnRvbGwgKHZhbHVlLCBOVUxMLCAxMCksIEdfTUFYSU5UMzIpOwor
CisJCWdfaGFzaF90YWJsZV9kZXN0cm95IChoYXNoKTsKKworCQlpZiAobWF4X2FnZSAhPSAtMSkg
eworCQkJZ3VpbnQgY3VycmVudF9hZ2UgPSB3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9nZXRfY3Vy
cmVudF9hZ2UgKGVudHJ5KTsKKworCQkJLyogSWYgd2UgYXJlIG92ZXIgbWF4LWFnZSBhbmQgbWF4
LXN0YWxlIGlzIG5vdAorCQkJICAgc2V0LCBkbyBub3QgdXNlIHRoZSB2YWx1ZSBmcm9tIHRoZSBj
YWNoZQorCQkJICAgd2l0aG91dCB2YWxpZGF0aW9uICovCisJCQlpZiAobWF4X2FnZSA8PSBjdXJy
ZW50X2FnZSAmJiBtYXhfc3RhbGUgPT0gLTEpCisJCQkJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hF
X1JFU1BPTlNFX05FRURTX1ZBTElEQVRJT047CisJCX0KKwl9CisKKwkvKiA1LiBUaGUgc3RvcmVk
IHJlc3BvbnNlIGlzIGVpdGhlcjogZnJlc2gsIGFsbG93ZWQgdG8gYmUKKwkgKiBzZXJ2ZWQgc3Rh
bGUgb3Igc3VjY2VzZnVsbHkgdmFsaWRhdGVkCisJICovCisJLyogVE9ETyBjb25zaWRlciBhbHNv
IHByb3h5LXJldmFsaWRhdGUgJiBzLW1heGFnZSAqLworCWlmIChlbnRyeS0+bXVzdF9yZXZhbGlk
YXRlKQorCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfTkVFRFNfVkFMSURBVElP
TjsKKworCWlmICghd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfaXNfZnJlc2hfZW5vdWdoIChlbnRy
eSwgbWluX2ZyZXNoKSkgeworCQkvKiBOb3QgZnJlc2gsIGNhbiBpdCBiZSBzZXJ2ZWQgc3RhbGU/
ICovCisJCWlmIChtYXhfc3RhbGUgIT0gLTEpIHsKKwkJCS8qIEdfTUFYSU5UMzIgbWVhbnMgd2Ug
YWNjZXB0IGFueSBzdGFsZW5lc3MgKi8KKwkJCWlmIChtYXhfc3RhbGUgPT0gR19NQVhJTlQzMikK
KwkJCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfRlJFU0g7CisKKwkJCWlmICgo
d2Via2l0X3NvdXBfY2FjaGVfZW50cnlfZ2V0X2N1cnJlbnRfYWdlIChlbnRyeSkgLSBlbnRyeS0+
ZnJlc2huZXNzX2xpZmV0aW1lKSA8PSBtYXhfc3RhbGUpCisJCQkJcmV0dXJuIFdFQktJVF9TT1VQ
X0NBQ0hFX1JFU1BPTlNFX0ZSRVNIOworCQl9CisKKwkJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hF
X1JFU1BPTlNFX05FRURTX1ZBTElEQVRJT047CisJfQorCisJcmV0dXJuIFdFQktJVF9TT1VQX0NB
Q0hFX1JFU1BPTlNFX0ZSRVNIOworfQorCisvKioKKyAqIHdlYmtpdF9zb3VwX2NhY2hlX2dldF9j
YWNoZWFiaWxpdHk6CisgKiBAY2FjaGU6IGEgI1dlYktpdFNvdXBDYWNoZQorICogQG1zZzogYSAj
U291cE1lc3NhZ2UKKyAqIAorICogQ2FsY3VsYXRlcyB3aGV0aGVyIHRoZSBAbXNnIGNhbiBiZSBj
YWNoZWQgb3Igbm90LgorICogCisgKiBSZXR1cm5zOiBhICNXZWJLaXRTb3VwQ2FjaGVhYmlsaXR5
IHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0aGUgQG1zZyBjYW4gYmUgY2FjaGVkIG9yIG5vdC4K
KyAqKi8KK1dlYktpdFNvdXBDYWNoZWFiaWxpdHkKK3dlYmtpdF9zb3VwX2NhY2hlX2dldF9jYWNo
ZWFiaWxpdHkgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsIFNvdXBNZXNzYWdlICptc2cpCit7CisJ
Z19yZXR1cm5fdmFsX2lmX2ZhaWwgKFdFQktJVF9JU19TT1VQX0NBQ0hFIChjYWNoZSksIFdFQktJ
VF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFKTsKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoU09VUF9J
U19NRVNTQUdFIChtc2cpLCBXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRSk7CisKKwlyZXR1
cm4gV0VCS0lUX1NPVVBfQ0FDSEVfR0VUX0NMQVNTIChjYWNoZSktPmdldF9jYWNoZWFiaWxpdHkg
KGNhY2hlLCBtc2cpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2ZvcmNlX2ZsdXNoX3RpbWVvdXQg
KGdwb2ludGVyIGRhdGEpCit7CisJZ2Jvb2xlYW4gKmZvcmNlZCA9IChnYm9vbGVhbiAqKSBkYXRh
OworCSpmb3JjZWQgPSBUUlVFOworCisJcmV0dXJuIEZBTFNFOworfQorCisvKioKKyAqIHdlYmtp
dF9zb3VwX2NhY2hlX2ZsdXNoOgorICogQGNhY2hlOiBhICNXZWJLaXRTb3VwQ2FjaGUKKyAqIEBz
ZXNzaW9uOiB0aGUgI1NvdXBTZXNzaW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgQGNhY2hlCisgKiAK
KyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBmb3JjZSBhbGwgcGVuZGluZyB3cml0ZXMgaW4gdGhlIEBj
YWNoZSB0byBiZQorICogY29tbWl0dGVkIHRvIGRpc2suIEZvciBkb2luZyBzbyBpdCB3aWxsIGl0
ZXJhdGUgdGhlICNHTWFpbkNvbnRleHQKKyAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgQHNlc3Npb24g
KHdoaWNoIGNhbiBiZSB0aGUgZGVmYXVsdCBvbmUpIGFzIGxvbmcKKyAqIGFzIG5lZWRlZC4KKyAq
Ki8KK3ZvaWQKK3dlYmtpdF9zb3VwX2NhY2hlX2ZsdXNoIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hl
KQoreworCUdNYWluQ29udGV4dCAqYXN5bmNfY29udGV4dDsKKwlTb3VwU2Vzc2lvbiAqc2Vzc2lv
bjsKKwlndWludCB0aW1lb3V0X2lkOworCWdib29sZWFuIGZvcmNlZCA9IEZBTFNFOworCisJZ19y
ZXR1cm5faWZfZmFpbCAoV0VCS0lUX0lTX1NPVVBfQ0FDSEUgKGNhY2hlKSk7CisKKwlzZXNzaW9u
ID0gY2FjaGUtPnByaXYtPnNlc3Npb247CisJZ19yZXR1cm5faWZfZmFpbCAoU09VUF9JU19TRVNT
SU9OIChzZXNzaW9uKSk7CisJYXN5bmNfY29udGV4dCA9IHNvdXBfc2Vzc2lvbl9nZXRfYXN5bmNf
Y29udGV4dCAoc2Vzc2lvbik7CisKKwkvKiBXZSBnaXZlIGNhY2hlIDEwIHNlY3MgdG8gZmluaXNo
ICovCisJdGltZW91dF9pZCA9IGdfdGltZW91dF9hZGQgKDEwMDAwLCBmb3JjZV9mbHVzaF90aW1l
b3V0LCAmZm9yY2VkKTsKKworCXdoaWxlICghZm9yY2VkICYmIGNhY2hlLT5wcml2LT5uX3BlbmRp
bmcgPiAwKQorCQlnX21haW5fY29udGV4dF9pdGVyYXRpb24gKGFzeW5jX2NvbnRleHQsIEZBTFNF
KTsKKworCWlmICghZm9yY2VkKQorCQlnX3NvdXJjZV9yZW1vdmUgKHRpbWVvdXRfaWQpOworCWVs
c2UKKwkJZ193YXJuaW5nICgiQ2FjaGUgZmx1c2ggZmluaXNoZWQgZGVzcGl0ZSAlZCBwZW5kaW5n
IHJlcXVlc3RzIiwgY2FjaGUtPnByaXYtPm5fcGVuZGluZyk7Cit9CisKK3N0YXRpYyB2b2lkCity
ZW1vdmVfY2FjaGVfaXRlbSAoZ3BvaW50ZXIga2V5LAorCQkgICBncG9pbnRlciB2YWx1ZSwKKwkJ
ICAgV2ViS2l0U291cENhY2hlICpjYWNoZSkKK3sKKwlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50
cnkgPSBnX2hhc2hfdGFibGVfbG9va3VwIChjYWNoZS0+cHJpdi0+Y2FjaGUsIChjb25zdCBnY2hh
ciAqKSBrZXkpOworCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2RlbGV0ZSAoY2FjaGUsIGVudHJ5
KTsKK30KKworLyoqCisgKiB3ZWJraXRfc291cF9jYWNoZV9jbGVhcjoKKyAqIEBjYWNoZTogYSAj
V2ViS2l0U291cENhY2hlCisgKiAKKyAqIFdpbGwgcmVtb3ZlIGFsbCBlbnRyaWVzIGluIHRoZSBA
Y2FjaGUgcGx1cyBhbGwgdGhlIGNhY2hlIGZpbGVzCisgKiBhc3NvY2lhdGVkIHdpdGggdGhlbS4K
KyAqKi8KK3ZvaWQKK3dlYmtpdF9zb3VwX2NhY2hlX2NsZWFyIChXZWJLaXRTb3VwQ2FjaGUgKmNh
Y2hlKQoreworCUdIYXNoVGFibGUgKmhhc2g7CisKKwlnX3JldHVybl9pZl9mYWlsIChXRUJLSVRf
SVNfU09VUF9DQUNIRSAoY2FjaGUpKTsKKworCWhhc2ggPSBjYWNoZS0+cHJpdi0+Y2FjaGU7CisJ
Z19yZXR1cm5faWZfZmFpbCAoaGFzaCk7CisKKwlnX2hhc2hfdGFibGVfZm9yZWFjaCAoaGFzaCwg
KEdIRnVuYylyZW1vdmVfY2FjaGVfaXRlbSwgY2FjaGUpOworfQorCitTb3VwTWVzc2FnZSoKK3dl
YmtpdF9zb3VwX2NhY2hlX2dlbmVyYXRlX2NvbmRpdGlvbmFsX3JlcXVlc3QgKFdlYktpdFNvdXBD
YWNoZSAqY2FjaGUsIFNvdXBNZXNzYWdlICpvcmlnaW5hbCkKK3sKKwlTb3VwTWVzc2FnZSAqbXNn
OworCVNvdXBVUkkgKnVyaTsKKwlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnk7CisJY2hhciAq
a2V5OworCWNvbnN0IGNoYXIgKnZhbHVlOworCisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFdFQktJ
VF9JU19TT1VQX0NBQ0hFIChjYWNoZSksIE5VTEwpOworCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChT
T1VQX0lTX01FU1NBR0UgKG9yaWdpbmFsKSwgTlVMTCk7CisKKwkvKiBGaXJzdCBjb3B5IHRoZSBk
YXRhIHdlIG5lZWQgZnJvbSB0aGUgb3JpZ2luYWwgbWVzc2FnZSAqLworCXVyaSA9IHNvdXBfbWVz
c2FnZV9nZXRfdXJpIChvcmlnaW5hbCk7CisJbXNnID0gc291cF9tZXNzYWdlX25ld19mcm9tX3Vy
aSAob3JpZ2luYWwtPm1ldGhvZCwgdXJpKTsKKworCXNvdXBfbWVzc2FnZV9oZWFkZXJzX2ZvcmVh
Y2ggKG9yaWdpbmFsLT5yZXF1ZXN0X2hlYWRlcnMsCisJCQkJICAgICAgKFNvdXBNZXNzYWdlSGVh
ZGVyc0ZvcmVhY2hGdW5jKWNvcHlfaGVhZGVycywKKwkJCQkgICAgICBtc2ctPnJlcXVlc3RfaGVh
ZGVycyk7CisKKwkvKiBOb3cgYWRkIHRoZSB2YWxpZGF0b3IgZW50cmllcyBpbiB0aGUgaGVhZGVy
IGZyb20gdGhlIGNhY2hlZAorCSAgIGRhdGEgKi8KKwlrZXkgPSBzb3VwX21lc3NhZ2VfZ2V0X2Nh
Y2hlX2tleSAob3JpZ2luYWwpOworCWVudHJ5ID0gZ19oYXNoX3RhYmxlX2xvb2t1cCAoY2FjaGUt
PnByaXYtPmNhY2hlLCBrZXkpOworCWdfZnJlZSAoa2V5KTsKKworCWdfcmV0dXJuX3ZhbF9pZl9m
YWlsIChlbnRyeSwgTlVMTCk7CisKKwllbnRyeS0+YmVpbmdfdmFsaWRhdGVkID0gVFJVRTsKKwor
CXZhbHVlID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0IChlbnRyeS0+aGVhZGVycywgIkxhc3Qt
TW9kaWZpZWQiKTsKKwlpZiAodmFsdWUpCisJCXNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZCAo
bXNnLT5yZXF1ZXN0X2hlYWRlcnMsCisJCQkJCSAgICAgIklmLU1vZGlmaWVkLVNpbmNlIiwKKwkJ
CQkJICAgICB2YWx1ZSk7CisJdmFsdWUgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKGVudHJ5
LT5oZWFkZXJzLCAiRVRhZyIpOworCWlmICh2YWx1ZSkKKwkJc291cF9tZXNzYWdlX2hlYWRlcnNf
YXBwZW5kIChtc2ctPnJlcXVlc3RfaGVhZGVycywKKwkJCQkJICAgICAiSWYtTm9uZS1NYXRjaCIs
CisJCQkJCSAgICAgdmFsdWUpOworCXJldHVybiBtc2c7Cit9CisKKyNkZWZpbmUgV0VCS0lUX1NP
VVBfQ0FDSEVfRklMRSAic291cC5jYWNoZSIKKworI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9I
RUFERVJTX0ZPUk1BVCAie3NzfSIKKyNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FDSEVfUEhFQURFUlNf
Rk9STUFUICIoc3NidXV1dXUodXl5eW1zKWEiV0VCS0lUX1NPVVBfQ0FDSEVfSEVBREVSU19GT1JN
QVQiKSIKKyNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FDSEVfRU5UUklFU19GT1JNQVQgImEiV0VCS0lU
X1NPVVBfQ0FDSEVfUEhFQURFUlNfRk9STUFUCisKKy8qIEJhc2ljYWxseSB0aGUgc2FtZSBmb3Jt
YXQgdGhhbiBhYm92ZSBleGNlcHQgdGhhdCBzb21lIHN0cmluZ3MgYXJlCisgICBwcmVwZW5kZWQg
d2l0aCAmLiBUaGlzIHdheSB0aGUgR1ZhcmlhbnQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlCisg
ICBkYXRhIGluc3RlYWQgb2YgZHVwbGljYXRpbmcgdGhlIHN0cmluZyAqLworI2RlZmluZSBXRUJL
SVRfU09VUF9DQUNIRV9ERUNPREVfSEVBREVSU19GT1JNQVQgInsmcyZzfSIKKyNkZWZpbmUgV0VC
S0lUX1NPVVBfQ0FDSEVfREVDT0RFX1BIRUFERVJTX0ZPUk1BVCAiKHNzYnV1dXV1KHV5eXltJnMp
YSJXRUJLSVRfU09VUF9DQUNIRV9IRUFERVJTX0ZPUk1BVCIpIgorI2RlZmluZSBXRUJLSVRfU09V
UF9DQUNIRV9ERUNPREVfRU5UUklFU19GT1JNQVQgImEiV0VCS0lUX1NPVVBfQ0FDSEVfUEhFQURF
UlNfRk9STUFUCisKK3N0YXRpYyB2b2lkCitwYWNrX2VudHJ5IChncG9pbnRlciBrZXksCisJICAg
IGdwb2ludGVyIHZhbHVlLAorCSAgICBncG9pbnRlciBkYXRhKQoreworCVdlYktpdFNvdXBDYWNo
ZUVudHJ5ICplbnRyeSA9IChXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqKSB2YWx1ZTsKKwlTb3VwTWVz
c2FnZUhlYWRlcnNJdGVyIGl0ZXI7CisJY29uc3QgZ2NoYXIgKmhlYWRlcl9rZXksICpoZWFkZXJf
dmFsdWU7CisJY29uc3QgZ2NoYXIgKmNvbnRlbnRfdHlwZTsKKwlHVmFyaWFudEJ1aWxkZXIgKmhl
YWRlcnNfYnVpbGRlcjsKKwlHVmFyaWFudEJ1aWxkZXIgKmVudHJpZXNfYnVpbGRlciA9IChHVmFy
aWFudEJ1aWxkZXIgKikgZGF0YTsKKwlndWludDMyIGNvbnRlbnRfbGVuZ3RoOworCWdjaGFyIGVu
Y29kaW5nLCBleHBlY3RhdGlvbnM7CisKKwkvKiBEbyBub3Qgc3RvcmUgbm9uLWNvbnNvbGlkYXRl
ZCBlbnRyaWVzICovCisJaWYgKGVudHJ5LT5kaXJ0eSB8fCBlbnRyeS0+d3JpdGluZyB8fCAhZW50
cnktPmtleSkKKwkJcmV0dXJuOworCisJLyogUGFjayBoZWFkZXJzICovCisJaGVhZGVyc19idWls
ZGVyID0gZ192YXJpYW50X2J1aWxkZXJfbmV3IChHX1ZBUklBTlRfVFlQRV9BUlJBWSk7CisJc291
cF9tZXNzYWdlX2hlYWRlcnNfaXRlcl9pbml0ICgmaXRlciwgZW50cnktPmhlYWRlcnMpOworCXdo
aWxlIChzb3VwX21lc3NhZ2VfaGVhZGVyc19pdGVyX25leHQgKCZpdGVyLCAmaGVhZGVyX2tleSwg
JmhlYWRlcl92YWx1ZSkpCisJCWdfdmFyaWFudF9idWlsZGVyX2FkZCAoaGVhZGVyc19idWlsZGVy
LCBXRUJLSVRfU09VUF9DQUNIRV9ERUNPREVfSEVBREVSU19GT1JNQVQsIGhlYWRlcl9rZXksIGhl
YWRlcl92YWx1ZSk7CisKKwljb250ZW50X2xlbmd0aCA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dl
dF9jb250ZW50X2xlbmd0aCAoZW50cnktPmhlYWRlcnMpOworCWNvbnRlbnRfdHlwZSA9IHNvdXBf
bWVzc2FnZV9oZWFkZXJzX2dldF9jb250ZW50X3R5cGUgKGVudHJ5LT5oZWFkZXJzLCBOVUxMKTsK
KwllbmNvZGluZyA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9lbmNvZGluZyAoZW50cnktPmhl
YWRlcnMpOworCWV4cGVjdGF0aW9ucyA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9leHBlY3Rh
dGlvbnMgKGVudHJ5LT5oZWFkZXJzKTsKKworCS8qIEVudHJ5IGRhdGEgKi8KKwlnX3ZhcmlhbnRf
YnVpbGRlcl9hZGQgKGVudHJpZXNfYnVpbGRlciwgV0VCS0lUX1NPVVBfQ0FDSEVfREVDT0RFX1BI
RUFERVJTX0ZPUk1BVCwKKwkJCSAgICAgICBlbnRyeS0+a2V5LCBlbnRyeS0+ZmlsZW5hbWUsIGVu
dHJ5LT5tdXN0X3JldmFsaWRhdGUsCisJCQkgICAgICAgZW50cnktPmZyZXNobmVzc19saWZldGlt
ZSwgZW50cnktPmNvcnJlY3RlZF9pbml0aWFsX2FnZSwKKwkJCSAgICAgICBlbnRyeS0+cmVzcG9u
c2VfdGltZSwgZW50cnktPmhpdHMsIGVudHJ5LT5sZW5ndGgsCisJCQkgICAgICAgY29udGVudF9s
ZW5ndGgsIChjb25zdCBnY2hhcikgU09VUF9NRVNTQUdFX0hFQURFUlNfUkVTUE9OU0UsCisJCQkg
ICAgICAgKGNvbnN0IGdjaGFyKSBlbmNvZGluZywgKGNvbnN0IGdjaGFyKSBleHBlY3RhdGlvbnMs
CisJCQkgICAgICAgKGNvbnN0IGdjaGFyKikgY29udGVudF90eXBlLCBoZWFkZXJzX2J1aWxkZXIp
OworCisJZ192YXJpYW50X2J1aWxkZXJfdW5yZWYgKGhlYWRlcnNfYnVpbGRlcik7Cit9CisKK3Zv
aWQKK3dlYmtpdF9zb3VwX2NhY2hlX2R1bXAgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUpCit7CisJ
V2ViS2l0U291cENhY2hlUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0NBQ0hFX0dFVF9QUklW
QVRFIChjYWNoZSk7CisJZ2NoYXIgKmZpbGVuYW1lOworCUdWYXJpYW50QnVpbGRlciAqZW50cmll
c19idWlsZGVyOworCUdWYXJpYW50ICpjYWNoZV92YXJpYW50OworCisJLyogQ3JlYXRlIHRoZSBi
dWlsZGVyIGFuZCBpdGVyYXRlIG92ZXIgYWxsIGVudHJpZXMgKi8KKwllbnRyaWVzX2J1aWxkZXIg
PSBnX3ZhcmlhbnRfYnVpbGRlcl9uZXcgKEdfVkFSSUFOVF9UWVBFX0FSUkFZKTsKKwlnX2hhc2hf
dGFibGVfZm9yZWFjaCAoY2FjaGUtPnByaXYtPmNhY2hlLCAoR0hGdW5jKXBhY2tfZW50cnksIGVu
dHJpZXNfYnVpbGRlcik7CisKKwkvKiBTZXJpYWxpemUgYW5kIGR1bXAgKi8KKwljYWNoZV92YXJp
YW50ID0gZ192YXJpYW50X25ldyAoV0VCS0lUX1NPVVBfQ0FDSEVfREVDT0RFX0VOVFJJRVNfRk9S
TUFULCBlbnRyaWVzX2J1aWxkZXIpOworCWdfdmFyaWFudF9idWlsZGVyX3VucmVmIChlbnRyaWVz
X2J1aWxkZXIpOworCisJZmlsZW5hbWUgPSBnX2J1aWxkX2ZpbGVuYW1lIChwcml2LT5jYWNoZV9k
aXIsIFdFQktJVF9TT1VQX0NBQ0hFX0ZJTEUsIE5VTEwpOworCWdfZmlsZV9zZXRfY29udGVudHMg
KGZpbGVuYW1lLCAoY29uc3QgZ2NoYXIgKikgZ192YXJpYW50X2dldF9kYXRhIChjYWNoZV92YXJp
YW50KSwKKwkJCSAgICAgZ192YXJpYW50X2dldF9zaXplIChjYWNoZV92YXJpYW50KSwgTlVMTCk7
CisJZ19mcmVlIChmaWxlbmFtZSk7CisJZ192YXJpYW50X3VucmVmIChjYWNoZV92YXJpYW50KTsK
K30KKwordm9pZAord2Via2l0X3NvdXBfY2FjaGVfbG9hZCAoV2ViS2l0U291cENhY2hlICpjYWNo
ZSkKK3sKKwlnY2hhciAqZmlsZW5hbWUgPSBOVUxMLCAqY29udGVudF90eXBlID0gTlVMTCwgKmNv
bnRlbnRzID0gTlVMTDsKKwlHVmFyaWFudCAqY2FjaGVfdmFyaWFudDsKKwlHVmFyaWFudEl0ZXIg
KmVudHJpZXNfaXRlciwgKmhlYWRlcnNfaXRlcjsKKwlHVmFyaWFudFR5cGUgKnZhcmlhbnRfZm9y
bWF0OworCVNvdXBNZXNzYWdlSGVhZGVyc1R5cGUgaGVhZGVyc190eXBlOworCVNvdXBFbmNvZGlu
ZyBlbmNvZGluZzsKKwlTb3VwRXhwZWN0YXRpb24gZXhwZWN0YXRpb25zOworCWdzaXplIGxlbmd0
aDsKKwlndWludDMyIGNvbnRlbnRfbGVuZ3RoOworCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRy
eTsKKwlXZWJLaXRTb3VwQ2FjaGVQcml2YXRlICpwcml2ID0gY2FjaGUtPnByaXY7CisKKwlmaWxl
bmFtZSA9IGdfYnVpbGRfZmlsZW5hbWUgKHByaXYtPmNhY2hlX2RpciwgV0VCS0lUX1NPVVBfQ0FD
SEVfRklMRSwgTlVMTCk7CisJaWYgKCFnX2ZpbGVfZ2V0X2NvbnRlbnRzIChmaWxlbmFtZSwgJmNv
bnRlbnRzLCAmbGVuZ3RoLCBOVUxMKSkgeworCQlnX2ZyZWUgKGZpbGVuYW1lKTsKKwkJcmV0dXJu
OworCX0KKwlnX2ZyZWUgKGZpbGVuYW1lKTsKKworCXZhcmlhbnRfZm9ybWF0ID0gZ192YXJpYW50
X3R5cGVfbmV3IChXRUJLSVRfU09VUF9DQUNIRV9ERUNPREVfRU5UUklFU19GT1JNQVQpOworCWNh
Y2hlX3ZhcmlhbnQgPSBnX3ZhcmlhbnRfbmV3X2Zyb21fZGF0YSAodmFyaWFudF9mb3JtYXQsIChj
b25zdCBnY2hhciAqKSBjb250ZW50cywgbGVuZ3RoLCBGQUxTRSwgTlVMTCwgTlVMTCk7CisJZ192
YXJpYW50X3R5cGVfZnJlZSAodmFyaWFudF9mb3JtYXQpOworCisJZ192YXJpYW50X2dldCAoY2Fj
aGVfdmFyaWFudCwgV0VCS0lUX1NPVVBfQ0FDSEVfREVDT0RFX0VOVFJJRVNfRk9STUFULCAmZW50
cmllc19pdGVyKTsKKwllbnRyeSA9IGdfc2xpY2VfbmV3MCAoV2ViS2l0U291cENhY2hlRW50cnkp
OworCisJd2hpbGUgKGdfdmFyaWFudF9pdGVyX2xvb3AgKGVudHJpZXNfaXRlciwgV0VCS0lUX1NP
VVBfQ0FDSEVfREVDT0RFX1BIRUFERVJTX0ZPUk1BVCwKKwkJCQkgICAgJmVudHJ5LT5rZXksICZl
bnRyeS0+ZmlsZW5hbWUsICZlbnRyeS0+bXVzdF9yZXZhbGlkYXRlLAorCQkJCSAgICAmZW50cnkt
PmZyZXNobmVzc19saWZldGltZSwgJmVudHJ5LT5jb3JyZWN0ZWRfaW5pdGlhbF9hZ2UsCisJCQkJ
ICAgICZlbnRyeS0+cmVzcG9uc2VfdGltZSwgJmVudHJ5LT5oaXRzLCAmZW50cnktPmxlbmd0aCwK
KwkJCQkgICAgJmNvbnRlbnRfbGVuZ3RoLCAmaGVhZGVyc190eXBlLCAmZW5jb2RpbmcsICZleHBl
Y3RhdGlvbnMsCisJCQkJICAgICZjb250ZW50X3R5cGUsICZoZWFkZXJzX2l0ZXIpKSB7CisKKwkJ
Y29uc3QgZ2NoYXIgKmhlYWRlcl9rZXksICpoZWFkZXJfdmFsdWU7CisKKwkJLyogSGVhZGVyICov
CisJCWVudHJ5LT5oZWFkZXJzID0gc291cF9tZXNzYWdlX2hlYWRlcnNfbmV3ICgoU291cE1lc3Nh
Z2VIZWFkZXJzVHlwZSkgaGVhZGVyc190eXBlKTsKKwkJc291cF9tZXNzYWdlX2hlYWRlcnNfc2V0
X2NvbnRlbnRfbGVuZ3RoIChlbnRyeS0+aGVhZGVycywgY29udGVudF9sZW5ndGgpOworCQlzb3Vw
X21lc3NhZ2VfaGVhZGVyc19zZXRfY29udGVudF90eXBlIChlbnRyeS0+aGVhZGVycywgY29udGVu
dF90eXBlLCBOVUxMKTsKKwkJc291cF9tZXNzYWdlX2hlYWRlcnNfc2V0X2VuY29kaW5nIChlbnRy
eS0+aGVhZGVycywgZW5jb2RpbmcpOworCQlzb3VwX21lc3NhZ2VfaGVhZGVyc19zZXRfZXhwZWN0
YXRpb25zIChlbnRyeS0+aGVhZGVycywgZXhwZWN0YXRpb25zKTsKKworCQkvKiBTb3VwTWVzc2Fn
ZSBIZWFkZXJzICovCisJCXdoaWxlIChnX3ZhcmlhbnRfaXRlcl9sb29wIChoZWFkZXJzX2l0ZXIs
IFdFQktJVF9TT1VQX0NBQ0hFX0RFQ09ERV9IRUFERVJTX0ZPUk1BVCwgJmhlYWRlcl9rZXksICZo
ZWFkZXJfdmFsdWUpKQorCQkJc291cF9tZXNzYWdlX2hlYWRlcnNfcmVwbGFjZSAoZW50cnktPmhl
YWRlcnMsIGhlYWRlcl9rZXksIGhlYWRlcl92YWx1ZSk7CisKKwkJLyogSW5zZXJ0IGluIGNhY2hl
ICovCisJCWlmICghd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfaW5zZXJ0X2J5X2tleSAoY2FjaGUs
IChjb25zdCBnY2hhciAqKSBlbnRyeS0+a2V5LCBlbnRyeSkpCisJCQl3ZWJraXRfc291cF9jYWNo
ZV9lbnRyeV9mcmVlIChlbnRyeSk7CisKKwkJLyogTmV3IGVudHJ5IGZvciB0aGUgbmV4dCBpdGVy
YXRpb24uIFRoaXMgY3JlYXRlcyBhbgorCQkgICBleHRyYSBvYmplY3QgdGhlIGxhc3QgaXRlcmF0
aW9uIGJ1dCBpdCdzIHdvcnRoIGl0CisJCSAgIGFzIHdlIHNhdmUgc2V2ZXJhbCBpZidzICovCisJ
CWVudHJ5ID0gZ19zbGljZV9uZXcwIChXZWJLaXRTb3VwQ2FjaGVFbnRyeSk7CisJfQorCS8qIFJl
bW92ZSBsYXN0IGNyZWF0ZWQgZW50cnkgKi8KKwlnX3NsaWNlX2ZyZWUgKFdlYktpdFNvdXBDYWNo
ZUVudHJ5LCBlbnRyeSk7CisKKwkvKiBmcmVlcyAqLworCWdfdmFyaWFudF9pdGVyX2ZyZWUgKGVu
dHJpZXNfaXRlcik7CisJZ192YXJpYW50X3VucmVmIChjYWNoZV92YXJpYW50KTsKK30KKwordm9p
ZAord2Via2l0X3NvdXBfY2FjaGVfc2V0X21heF9zaXplIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hl
LAorCQkJIGd1aW50IG1heF9zaXplKQoreworCWNhY2hlLT5wcml2LT5tYXhfc2l6ZSA9IG1heF9z
aXplOworCWNhY2hlLT5wcml2LT5tYXhfZW50cnlfZGF0YV9zaXplID0gY2FjaGUtPnByaXYtPm1h
eF9zaXplIC8gTUFYX0VOVFJZX0RBVEFfUEVSQ0VOVEFHRTsKK30KKworZ3VpbnQKK3dlYmtpdF9z
b3VwX2NhY2hlX2dldF9tYXhfc2l6ZSAoV2ViS2l0U291cENhY2hlICpjYWNoZSkKK3sKKwlyZXR1
cm4gY2FjaGUtPnByaXYtPm1heF9zaXplOworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUuaCBiL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uN2UxZWM5MAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLmgKQEAgLTAsMCAr
MSw5NSBAQAorLyoKKyAqIHNvdXAtY2FjaGUuaDoKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDks
IDIwMTAgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV0VCS0lUX1NPVVBfQ0FDSEVfSAorI2RlZmluZSBX
RUJLSVRfU09VUF9DQUNIRV9IIDEKKworI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkZWZpbmVzLmg+
CisKKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAtdHlwZXMuaD4KKyNpbmNsdWRlIDxnaW8vZ2lvLmg+
CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFICAgICAg
ICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2dldF90eXBlICgpKQorI2RlZmluZSBXRUJLSVRfU09V
UF9DQUNIRShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2Jq
KSwgV0VCS0lUX1RZUEVfU09VUF9DQUNIRSwgV2ViS2l0U291cENhY2hlKSkKKyNkZWZpbmUgV0VC
S0lUX1NPVVBfQ0FDSEVfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAo
KGtsYXNzKSwgV0VCS0lUX1RZUEVfU09VUF9DQUNIRSwgV2ViS2l0U291cENhY2hlQ2xhc3MpKQor
I2RlZmluZSBXRUJLSVRfSVNfU09VUF9DQUNIRShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9UWVBFICgob2JqKSwgV0VCS0lUX1RZUEVfU09VUF9DQUNIRSkpCisjZGVmaW5lIFdF
QktJVF9JU19TT1VQX0NBQ0hFX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUg
KChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FD
SEVfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgV0VC
S0lUX1RZUEVfU09VUF9DQUNIRSwgV2ViS2l0U291cENhY2hlQ2xhc3MpKQorCit0eXBlZGVmIHN0
cnVjdCBfV2ViS2l0U291cENhY2hlIFdlYktpdFNvdXBDYWNoZTsKK3R5cGVkZWYgc3RydWN0IF9X
ZWJLaXRTb3VwQ2FjaGVQcml2YXRlIFdlYktpdFNvdXBDYWNoZVByaXZhdGU7CisKK3R5cGVkZWYg
ZW51bSB7CisgICAgICAgIFdFQktJVF9TT1VQX0NBQ0hFX0NBQ0hFQUJMRSAgID0gKDEgPDwgMCks
CisgICAgICAgIFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFID0gKDEgPDwgMSksCisgICAg
ICAgIFdFQktJVF9TT1VQX0NBQ0hFX0lOVkFMSURBVEVTID0gKDEgPDwgMiksCisgICAgICAgIFdF
QktJVF9TT1VQX0NBQ0hFX1ZBTElEQVRFUyA9ICgxIDw8IDMpCit9IFdlYktpdFNvdXBDYWNoZWFi
aWxpdHk7CisKK3R5cGVkZWYgZW51bSB7CisgICAgICAgIFdFQktJVF9TT1VQX0NBQ0hFX1JFU1BP
TlNFX0ZSRVNILAorICAgICAgICBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9ORUVEU19WQUxJ
REFUSU9OLAorICAgICAgICBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9TVEFMRQorfSBXZWJL
aXRTb3VwQ2FjaGVSZXNwb25zZTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICAgICAgV0VCS0lUX1NP
VVBfQ0FDSEVfU0lOR0xFX1VTRVIsCisgICAgICAgIFdFQktJVF9TT1VQX0NBQ0hFX1NIQVJFRAor
fSBXZWJLaXRTb3VwQ2FjaGVUeXBlOworCitzdHJ1Y3QgX1dlYktpdFNvdXBDYWNoZSB7CisgICAg
ICAgIEdPYmplY3QgcGFyZW50X2luc3RhbmNlOworCisgICAgICAgIFdlYktpdFNvdXBDYWNoZVBy
aXZhdGUgKnByaXY7Cit9OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgICAgIEdPYmplY3RDbGFz
cyBwYXJlbnRfY2xhc3M7CisKKyAgICAgICAgLyogbWV0aG9kcyAqLworICAgICAgICBXZWJLaXRT
b3VwQ2FjaGVhYmlsaXR5ICgqZ2V0X2NhY2hlYWJpbGl0eSkgKFdlYktpdFNvdXBDYWNoZSAqY2Fj
aGUsIFNvdXBNZXNzYWdlICptc2cpOworCisgICAgICAgIC8qIFBhZGRpbmcgZm9yIGZ1dHVyZSBl
eHBhbnNpb24gKi8KKyAgICAgICAgdm9pZCAoKl9saWJzb3VwX3Jlc2VydmVkMSkgKHZvaWQpOwor
ICAgICAgICB2b2lkICgqX2xpYnNvdXBfcmVzZXJ2ZWQyKSAodm9pZCk7CisgICAgICAgIHZvaWQg
KCpfbGlic291cF9yZXNlcnZlZDMpICh2b2lkKTsKK30gV2ViS2l0U291cENhY2hlQ2xhc3M7CisK
K1dFQktJVF9BUEkgR1R5cGUgICAgICAgICAgICAgd2Via2l0X3NvdXBfY2FjaGVfZ2V0X3R5cGUg
ICAgICAgICAgICAgICAgICAgICAodm9pZCk7CitXRUJLSVRfQVBJIFdlYktpdFNvdXBDYWNoZSog
ICAgICAgIHdlYmtpdF9zb3VwX2NhY2hlX25ldyAgICAgICAgICAgICAgICAgICAgICAgICAgKGNv
bnN0IGNoYXIgICpjYWNoZV9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0U291cENhY2hlVHlwZSBj
YWNoZV90eXBlKTsKK1dFQktJVF9BUEkgdm9pZCAgICAgICAgICAgICAgd2Via2l0X3NvdXBfY2Fj
aGVfZmx1c2ggICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0U291cENhY2hlICAgKmNhY2hl
KTsKK1dFQktJVF9BUEkgdm9pZCAgICAgICAgICAgICAgd2Via2l0X3NvdXBfY2FjaGVfY2xlYXIg
ICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0U291cENhY2hlICAgKmNhY2hlKTsKKworV0VC
S0lUX0FQSSB2b2lkICAgICAgICAgICAgICB3ZWJraXRfc291cF9jYWNoZV9kdW1wICAgICAgICAg
ICAgICAgICAgICAgICAgIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKTsKK1dFQktJVF9BUEkgdm9p
ZCAgICAgICAgICAgICAgd2Via2l0X3NvdXBfY2FjaGVfbG9hZCAgICAgICAgICAgICAgICAgICAg
ICAgICAoV2ViS2l0U291cENhY2hlICpjYWNoZSk7CisKK1dFQktJVF9BUEkgdm9pZCAgICAgICAg
ICAgICAgd2Via2l0X3NvdXBfY2FjaGVfc2V0X21heF9zaXplICAgICAgICAgICAgICAgICAoV2Vi
S2l0U291cENhY2hlICpjYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCBtYXhfc2l6ZSk7CitXRUJL
SVRfQVBJIGd1aW50ICAgICAgICAgICAgIHdlYmtpdF9zb3VwX2NhY2hlX2dldF9tYXhfc2l6ZSAg
ICAgICAgICAgICAgICAgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUpOworCitHX0VORF9ERUNMUwor
CisKKyNlbmRpZiAvKiBXRUJLSVRfU09VUF9DQUNIRV9IICovCisKZGlmZiAtLWdpdCBhL1dlYktp
dFRvb2xzL0dOVW1ha2VmaWxlLmFtIGIvV2ViS2l0VG9vbHMvR05VbWFrZWZpbGUuYW0KaW5kZXgg
MzNkNDYxNC4uZGZkMTM4NCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvR05VbWFrZWZpbGUuYW0K
KysrIGIvV2ViS2l0VG9vbHMvR05VbWFrZWZpbGUuYW0KQEAgLTYsNiArNiw3IEBAIG5vaW5zdF9Q
Uk9HUkFNUyArPSBcCiAjIEd0a0xhdW5jaGVyCiBQcm9ncmFtc19HdGtMYXVuY2hlcl9DUFBGTEFH
UyA9IFwKIAktSSQoc3JjZGlyKS9XZWJLaXQvZ3RrIFwKKwktSSQoc3JjZGlyKS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS8gXAogCS1JJCh0b3BfYnVpbGRkaXIpL1dlYktpdC9n
dGsgXAogCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzIFwKIAkkKGdsb2JhbF9jcHBm
bGFncykgXApAQCAtMzYsNiArMzcsNyBAQCBkdW1wcmVuZGVydHJlZV9jcHBmbGFncyA6PSBcCiAJ
LUkkKHNyY2RpcikvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvY2Fpcm8gXAogCS1JJChzcmNk
aXIpL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ayBcCiAJLUkkKHNyY2RpcikvV2ViS2l0
L2d0ayBcCisJLUkkKHNyY2RpcikvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUv
IFwKIAktSSQodG9wX2J1aWxkZGlyKS9XZWJLaXQvZ3RrIFwKIAktSSQodG9wX2J1aWxkZGlyKS9E
ZXJpdmVkU291cmNlcyBcCiAJJChnbG9iYWxfY3BwZmxhZ3MpIFwKLS0gCjEuNy4xCgo=
</data>
<flag name="review"
          id="54772"
          type_id="1"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65901</attachid>
            <date>2010-08-30 03:38:44 -0700</date>
            <delta_ts>2010-09-06 03:52:05 -0700</delta_ts>
            <desc>Changes to WebKitGtk+ core network stuff to use the new API from the imported SoupURILoader code</desc>
            <filename>0002-ResourceHandleSoup-using-SoupURILoader.patch</filename>
            <type>text/plain</type>
            <size>31251</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">RnJvbSAwN2M5MmZmNjBmZmI1MzY2MTRiNDQ2YzUxNmQ4NTRjYjI1NzdjZDVhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTZXJnaW8gVmlsbGFyIFNlbmluIDxzdmlsbGFyQGlnYWxpYS5j
b20+CkRhdGU6IE1vbiwgMzAgQXVnIDIwMTAgMTI6Mjc6MzggKzAyMDAKU3ViamVjdDogW1BBVENI
IDIvMl0gUmVzb3VyY2VIYW5kbGVTb3VwIHVzaW5nIFNvdXBVUklMb2FkZXIKCi0tLQogV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaCAgfCAgIDE0ICstCiAu
Li4vcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAgICB8ICA0NzYg
KysrKysrKysrKy0tLS0tLS0tLS0KIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291
cmNlUmVxdWVzdC5oICAgIHwgICAgMSArCiAuLi4vcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291
cmNlUmVxdWVzdFNvdXAuY3BwICB8ICAgMjMgKwogNCBmaWxlcyBjaGFuZ2VkLCAyNjMgaW5zZXJ0
aW9ucygrKSwgMjUxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCmluZGV4IDI0YjAwYmYuLmQzYzlkM2MgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmgK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaApA
QCAtNDYsNiArNDYsOSBAQAogI2VuZGlmCiAKICNpZiBVU0UoU09VUCkKKyNpbmNsdWRlICJzb3Vw
LXJlcXVlc3QuaCIKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3Rlci5oIgorI2luY2x1ZGUgPEdSZWZQ
dHIuaD4KICNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KIGNsYXNzIEZyYW1lOwogI2VuZGlmCkBA
IC0xMTQsNyArMTE3LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIFVTRShTT1VQKQogICAg
ICAgICAgICAgLCBtX21zZygwKQogICAgICAgICAgICAgLCBtX2NhbmNlbGxlZChmYWxzZSkKLSAg
ICAgICAgICAgICwgbV9nZmlsZSgwKQorICAgICAgICAgICAgLCBtX3NvdXBSZXF1ZXN0KDApCisg
ICAgICAgICAgICAsIG1fcmVxdWVzdGVyKDApCiAgICAgICAgICAgICAsIG1faW5wdXRTdHJlYW0o
MCkKICAgICAgICAgICAgICwgbV9jYW5jZWxsYWJsZSgwKQogICAgICAgICAgICAgLCBtX2J1ZmZl
cigwKQpAQCAtMTIyLDYgKzEyNiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAg
ICwgbV90b3RhbCgwKQogICAgICAgICAgICAgLCBtX2lkbGVIYW5kbGVyKDApCiAgICAgICAgICAg
ICAsIG1fZnJhbWUoMCkKKyAgICAgICAgICAgICwgbV9nb3RDaHVua0hhbmRsZXIoMCkKICNlbmRp
ZgogI2lmIFBMQVRGT1JNKFFUKQogICAgICAgICAgICAgLCBtX2pvYigwKQpAQCAtMTM5LDYgKzE0
NCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIG1fdXNlciA9IHVybC51c2Vy
KCk7CiAgICAgICAgICAgICBtX3Bhc3MgPSB1cmwucGFzcygpOwogICAgICAgICAgICAgbV9maXJz
dFJlcXVlc3QucmVtb3ZlQ3JlZGVudGlhbHMoKTsKKyNpZiBVU0UoU09VUCkKKyAgICAgICAgICAg
IG1fcmVxdWVzdGVyID0gc291cF9yZXF1ZXN0ZXJfbmV3KCk7CisjZW5kaWYKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgflJlc291cmNlSGFuZGxlSW50ZXJuYWwoKTsKQEAgLTE5NiwxMyAr
MjA0LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgU291cE1lc3NhZ2UqIG1fbXNn
OwogICAgICAgICBSZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7CiAgICAgICAgIGJvb2wgbV9j
YW5jZWxsZWQ7Ci0gICAgICAgIEdGaWxlKiBtX2dmaWxlOworICAgICAgICBQbGF0Zm9ybVJlZlB0
cjxTb3VwUmVxdWVzdD4gbV9zb3VwUmVxdWVzdDsKKyAgICAgICAgUGxhdGZvcm1SZWZQdHI8U291
cFJlcXVlc3Rlcj4gbV9yZXF1ZXN0ZXI7CiAgICAgICAgIEdJbnB1dFN0cmVhbSogbV9pbnB1dFN0
cmVhbTsKICAgICAgICAgR0NhbmNlbGxhYmxlKiBtX2NhbmNlbGxhYmxlOwogICAgICAgICBjaGFy
KiBtX2J1ZmZlcjsKICAgICAgICAgZ3NpemUgbV9idWZmZXJTaXplLCBtX3RvdGFsOwogICAgICAg
ICBndWludCBtX2lkbGVIYW5kbGVyOwogICAgICAgICBGcmFtZSogbV9mcmFtZTsKKyAgICAgICAg
Z3Vsb25nIG1fZ290Q2h1bmtIYW5kbGVyOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oUVQpCiAgICAg
ICAgIFFOZXR3b3JrUmVwbHlIYW5kbGVyKiBtX2pvYjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCmluZGV4IDk2YTJmMjUuLjM2
ZDZkZDEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNl
SGFuZGxlU291cC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3Vy
Y2VIYW5kbGVTb3VwLmNwcApAQCAtNDUsOCArNDUsOCBAQAogI2luY2x1ZGUgIlJlc291cmNlSGFu
ZGxlSW50ZXJuYWwuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAi
U2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSAic291cC1yZXF1ZXN0LWh0dHAuaCIKICNpbmNsdWRl
ICJUZXh0RW5jb2RpbmcuaCIKLQogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8ZmNudGwu
aD4KICNpbmNsdWRlIDxnaW8vZ2lvLmg+CkBAIC0xMjAsOCArMTIwLDEwIEBAIHZvaWQgV2ViQ29y
ZVN5bmNocm9ub3VzTG9hZGVyOjpydW4oKQogICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWlu
TG9vcCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNsZWFudXBHaW9PcGVyYXRpb24oUmVzb3VyY2VIYW5k
bGUqIGhhbmRsZSwgYm9vbCBpc0Rlc3Ryb3lpbmcpOwotc3RhdGljIGJvb2wgc3RhcnREYXRhKFJl
c291cmNlSGFuZGxlKiBoYW5kbGUsIFN0cmluZyB1cmxTdHJpbmcpOworc3RhdGljIHZvaWQgY2xl
YW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGJvb2wgaXNE
ZXN0cm95aW5nKTsKK3N0YXRpYyB2b2lkIHNlbmRSZXF1ZXN0Q2FsbGJhY2soR09iamVjdCogc291
cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIpOworc3RhdGljIHZvaWQgcmVhZENhbGxi
YWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXMsIGdwb2ludGVyKTsKK3N0YXRp
YyB2b2lkIGNsb3NlQ2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywg
Z3BvaW50ZXIpOwogc3RhdGljIGJvb2wgc3RhcnRHaW8oUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwg
S1VSTCB1cmwpOwogCiBSZXNvdXJjZUhhbmRsZUludGVybmFsOjp+UmVzb3VyY2VIYW5kbGVJbnRl
cm5hbCgpCkBAIC0xMzEsNiArMTMzLDExIEBAIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6On5SZXNv
dXJjZUhhbmRsZUludGVybmFsKCkKICAgICAgICAgbV9tc2cgPSAwOwogICAgIH0KIAorICAgIGlm
IChtX3NvdXBSZXF1ZXN0KSB7CisgICAgICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKG1f
c291cFJlcXVlc3QuZ2V0KCkpLCAid2Via2l0LXJlc291cmNlIiwgMCk7CisgICAgICAgIG1fc291
cFJlcXVlc3QuY2xlYXIoKTsKKyAgICB9CisKICAgICBpZiAobV9pZGxlSGFuZGxlcikgewogICAg
ICAgICBnX3NvdXJjZV9yZW1vdmUobV9pZGxlSGFuZGxlcik7CiAgICAgICAgIG1faWRsZUhhbmRs
ZXIgPSAwOwpAQCAtMTQzLDcgKzE1MCw3IEBAIFJlc291cmNlSGFuZGxlOjp+UmVzb3VyY2VIYW5k
bGUoKQogICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQoZC0+bV9t
c2csIEdfU0lHTkFMX01BVENIX0RBVEEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAwLCAwLCAwLCAwLCB0aGlzKTsKIAotICAgIGNsZWFudXBHaW9PcGVyYXRp
b24odGhpcywgdHJ1ZSk7CisgICAgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKHRoaXMsIHRy
dWUpOwogfQogCiB2b2lkIFJlc291cmNlSGFuZGxlOjpwcmVwYXJlRm9yVVJMKGNvbnN0IEtVUkwg
JnVybCkKQEAgLTE4NSw5ICsxOTIsOCBAQCBzdGF0aWMgdm9pZCByZXN0YXJ0ZWRDYWxsYmFjayhT
b3VwTWVzc2FnZSogbXNnLCBncG9pbnRlciBkYXRhKQogICAgIGlmIChkLT5tX2NhbmNlbGxlZCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgY2hhciogdXJpID0gc291cF91cmlfdG9fc3RyaW5nKHNv
dXBfbWVzc2FnZV9nZXRfdXJpKG1zZyksIGZhbHNlKTsKLSAgICBTdHJpbmcgbG9jYXRpb24gPSBT
dHJpbmcodXJpKTsKLSAgICBnX2ZyZWUodXJpKTsKKyAgICBHT3duUHRyPGNoYXI+IHVyaShzb3Vw
X3VyaV90b19zdHJpbmcoc291cF9tZXNzYWdlX2dldF91cmkobXNnKSwgZmFsc2UpKTsKKyAgICBT
dHJpbmcgbG9jYXRpb24gPSBTdHJpbmcodXJpLmdldCgpKTsKICAgICBLVVJMIG5ld1VSTCA9IEtV
UkwoaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKSwgbG9jYXRpb24pOwogCiAgICAgUmVzb3Vy
Y2VSZXF1ZXN0IHJlcXVlc3QgPSBoYW5kbGUtPmZpcnN0UmVxdWVzdCgpOwpAQCAtMjkzLDUyICsy
OTksMTEgQEAgc3RhdGljIHZvaWQgZ290Q2h1bmtDYWxsYmFjayhTb3VwTWVzc2FnZSogbXNnLCBT
b3VwQnVmZmVyKiBjaHVuaywgZ3BvaW50ZXIgZGF0YSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Y2xpZW50LT5kaWRSZWNlaXZlRGF0YShoYW5kbGUuZ2V0KCksIGNodW5rLT5kYXRhLCBjaHVuay0+
bGVuZ3RoLCBmYWxzZSk7Ci19Ci0KLS8vIENhbGxlZCBhdCB0aGUgZW5kIG9mIHRoZSBtZXNzYWdl
LCB3aXRoIGFsbCB0aGUgbmVjZXNzYXJ5IGFib3V0IHRoZSBsYXN0IGluZm9ybWF0aW9ucy4KLS8v
IERvZXNuJ3QgZ2V0IGNhbGxlZCBmb3IgcmVkaXJlY3RzLgotc3RhdGljIHZvaWQgZmluaXNoZWRD
YWxsYmFjayhTb3VwU2Vzc2lvbiAqc2Vzc2lvbiwgU291cE1lc3NhZ2UqIG1zZywgZ3BvaW50ZXIg
ZGF0YSkKLXsKLSAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9IGFkb3B0UmVmKHN0
YXRpY19jYXN0PFJlc291cmNlSGFuZGxlKj4oZGF0YSkpOwotICAgIC8vIFRPRE86IG1heWJlIHdl
IHNob3VsZCBydW4gdGhpcyBjb2RlIGV2ZW4gaWYgdGhlcmUncyBubyBjbGllbnQ/Ci0gICAgaWYg
KCFoYW5kbGUpCi0gICAgICAgIHJldHVybjsKIAotICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwq
IGQgPSBoYW5kbGUtPmdldEludGVybmFsKCk7Ci0KLSAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCog
Y2xpZW50ID0gaGFuZGxlLT5jbGllbnQoKTsKLSAgICBpZiAoIWNsaWVudCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKGQtPm1fY2FuY2VsbGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoU09VUF9TVEFUVVNfSVNfVFJBTlNQT1JUX0VSUk9SKG1zZy0+c3RhdHVzX2NvZGUpKSB7Ci0g
ICAgICAgIGNoYXIqIHVyaSA9IHNvdXBfdXJpX3RvX3N0cmluZyhzb3VwX21lc3NhZ2VfZ2V0X3Vy
aShtc2cpLCBmYWxzZSk7Ci0gICAgICAgIFJlc291cmNlRXJyb3IgZXJyb3IoZ19xdWFya190b19z
dHJpbmcoU09VUF9IVFRQX0VSUk9SKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2ct
PnN0YXR1c19jb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTdHJpbmc6OmZyb21VVEY4KG1zZy0+cmVhc29uX3BocmFzZSkp
OwotICAgICAgICBnX2ZyZWUodXJpKTsKLSAgICAgICAgY2xpZW50LT5kaWRGYWlsKGhhbmRsZS5n
ZXQoKSwgZXJyb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1zZy0+c3Rh
dHVzX2NvZGUgPT0gU09VUF9TVEFUVVNfVU5BVVRIT1JJWkVEKSB7Ci0gICAgICAgIGZpbGxSZXNw
b25zZUZyb21NZXNzYWdlKG1zZywgJmQtPm1fcmVzcG9uc2UpOwotICAgICAgICBjbGllbnQtPmRp
ZFJlY2VpdmVSZXNwb25zZShoYW5kbGUuZ2V0KCksIGQtPm1fcmVzcG9uc2UpOwotCi0gICAgICAg
IC8vIFdlYkNvcmUgbWlnaHQgaGF2ZSBjYW5jZWxsZWQgdGhlIGpvYiBpbiB0aGUgd2hpbGUKLSAg
ICAgICAgaWYgKGQtPm1fY2FuY2VsbGVkKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IGlmIChtc2ctPnJlc3BvbnNlX2JvZHktPmRhdGEpCi0gICAgICAgICAgICBjbGllbnQtPmRpZFJl
Y2VpdmVEYXRhKGhhbmRsZS5nZXQoKSwgbXNnLT5yZXNwb25zZV9ib2R5LT5kYXRhLCBtc2ctPnJl
c3BvbnNlX2JvZHktPmxlbmd0aCwgdHJ1ZSk7Ci0gICAgfQotCi0gICAgY2xpZW50LT5kaWRGaW5p
c2hMb2FkaW5nKGhhbmRsZS5nZXQoKSk7CiB9CiAKKyNkZWZpbmUgQlVGRkVSX1NJWkUgODE5Mgor
CiAvLyBwYXJzZURhdGFVcmwoKSBpcyB0YWtlbiBmcm9tIHRoZSBDVVJMIGh0dHAgYmFja2VuZC4K
IHN0YXRpYyBnYm9vbGVhbiBwYXJzZURhdGFVcmwoZ3BvaW50ZXIgY2FsbGJhY2tEYXRhKQogewpA
QCAtMzY0LDcgKzMyOSw2IEBAIHN0YXRpYyBnYm9vbGVhbiBwYXJzZURhdGFVcmwoZ3BvaW50ZXIg
Y2FsbGJhY2tEYXRhKQogICAgIH0KIAogICAgIFN0cmluZyBtZWRpYVR5cGUgPSB1cmwuc3Vic3Ry
aW5nKDUsIGluZGV4IC0gNSk7Ci0gICAgU3RyaW5nIGRhdGEgPSB1cmwuc3Vic3RyaW5nKGluZGV4
ICsgMSk7CiAKICAgICBib29sIGlzQmFzZTY0ID0gbWVkaWFUeXBlLmVuZHNXaXRoKCI7YmFzZTY0
IiwgZmFsc2UpOwogICAgIGlmIChpc0Jhc2U2NCkKQEAgLTM4MSw3ICszNDUsNiBAQCBzdGF0aWMg
Z2Jvb2xlYW4gcGFyc2VEYXRhVXJsKGdwb2ludGVyIGNhbGxiYWNrRGF0YSkKICAgICByZXNwb25z
ZS5zZXRNaW1lVHlwZShtaW1lVHlwZSk7CiAKICAgICBpZiAoaXNCYXNlNjQpIHsKLSAgICAgICAg
ZGF0YSA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhkYXRhKTsKICAgICAgICAgcmVzcG9uc2Uu
c2V0VGV4dEVuY29kaW5nTmFtZShjaGFyc2V0KTsKICAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZl
UmVzcG9uc2UoaGFuZGxlLCByZXNwb25zZSk7CiAKQEAgLTM5MCwzMiArMzUzLDQwIEBAIHN0YXRp
YyBnYm9vbGVhbiBwYXJzZURhdGFVcmwoZ3BvaW50ZXIgY2FsbGJhY2tEYXRhKQogICAgICAgICAv
LyBvdXQgaW4gZWl0aGVyIG9mIHRob3NlIGNhc2VzLgogICAgICAgICBpZiAoZC0+bV9jYW5jZWxs
ZWQgfHwgIWhhbmRsZS0+Y2xpZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgLy8gVXNlIHRoZSBHTGliIEJhc2U2NCwgc2luY2UgV2ViQ29yZSdzIGRlY29kZXIgaXNu
J3QKLSAgICAgICAgLy8gZ2VuZXJhbC1wdXJwb3NlIGFuZCBmYWlscyBvbiBBY2lkMyB0ZXN0IDk3
ICh3aGl0ZXNwYWNlKS4KLSAgICAgICAgc2l6ZV90IG91dExlbmd0aCA9IDA7Ci0gICAgICAgIGNo
YXIqIG91dERhdGEgPSAwOwotICAgICAgICBvdXREYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oZ19iYXNlNjRfZGVjb2RlKGRhdGEudXRmOCgpLmRhdGEoKSwgJm91dExlbmd0aCkpOwotICAg
ICAgICBpZiAob3V0RGF0YSAmJiBvdXRMZW5ndGggPiAwKQotICAgICAgICAgICAgY2xpZW50LT5k
aWRSZWNlaXZlRGF0YShoYW5kbGUsIG91dERhdGEsIG91dExlbmd0aCwgMCk7Ci0gICAgICAgIGdf
ZnJlZShvdXREYXRhKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBXZSBoYXZlIHRvIGNvbnZl
cnQgdG8gVVRGLTE2IGVhcmx5IGR1ZSB0byBsaW1pdGF0aW9ucyBpbiBLVVJMCi0gICAgICAgIGRh
dGEgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoZGF0YSwgVGV4dEVuY29kaW5nKGNoYXJzZXQp
KTsKICAgICAgICAgcmVzcG9uc2Uuc2V0VGV4dEVuY29kaW5nTmFtZSgiVVRGLTE2Iik7CiAgICAg
ICAgIGNsaWVudC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGhhbmRsZSwgcmVzcG9uc2UpOwogCiAgICAg
ICAgIGlmIChkLT5tX2NhbmNlbGxlZCB8fCAhaGFuZGxlLT5jbGllbnQoKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoZGF0YS5sZW5ndGgoKSA+IDApCi0gICAgICAg
ICAgICBjbGllbnQtPmRpZFJlY2VpdmVEYXRhKGhhbmRsZSwgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBjaGFyKj4oZGF0YS5jaGFyYWN0ZXJzKCkpLCBkYXRhLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFy
KSwgMCk7CiAgICAgfQogCiAgICAgaWYgKGQtPm1fY2FuY2VsbGVkIHx8ICFoYW5kbGUtPmNsaWVu
dCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBjbGllbnQtPmRpZEZpbmlzaExvYWRp
bmcoaGFuZGxlKTsKKyAgICBTb3VwU2Vzc2lvbiogc2Vzc2lvbiA9IGhhbmRsZS0+ZGVmYXVsdFNl
c3Npb24oKTsKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgZC0+bV9zb3VwUmVxdWVz
dCA9IHNvdXBfcmVxdWVzdGVyX3JlcXVlc3QoZC0+bV9yZXF1ZXN0ZXIuZ2V0KCksIGhhbmRsZS0+
Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc2Vzc2lvbiwgJmVy
cm9yLm91dFB0cigpKTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIEdJbnB1dFN0cmVhbSogaW4gPSBzb3VwX3JlcXVlc3Rfc2VuZChkLT5tX3NvdXBSZXF1ZXN0
LmdldCgpLCAwLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGlmIChlcnJvcikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgZC0+bV9pbnB1dFN0cmVhbSA9IGluOworICAgIGQtPm1fYnVmZmVy
U2l6ZSA9IEJVRkZFUl9TSVpFOworICAgIGQtPm1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+
KGdfbWFsbG9jKGQtPm1fYnVmZmVyU2l6ZSkpOworICAgIGQtPm1fdG90YWwgPSAwOworCisgICAg
Z19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9pbnB1dFN0cmVhbSksICJ3ZWJraXQtcmVz
b3VyY2UiLCBoYW5kbGUpOworICAgIGhhbmRsZS0+cmVmKCk7CisKKyAgICBkLT5tX2NhbmNlbGxh
YmxlID0gZ19jYW5jZWxsYWJsZV9uZXcoKTsKKyAgICBnX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5j
KGQtPm1faW5wdXRTdHJlYW0sIGQtPm1fYnVmZmVyLCBkLT5tX2J1ZmZlclNpemUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHX1BSSU9SSVRZX0RFRkFVTFQsIGQtPm1fY2FuY2VsbGFi
bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkQ2FsbGJhY2ssIChpc0Jhc2U2
NCkgPyAwIDogR0lOVF9UT19QT0lOVEVSKDEpKTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAg
LTQyOCw3ICszOTksNyBAQCBzdGF0aWMgYm9vbCBzdGFydERhdGEoUmVzb3VyY2VIYW5kbGUqIGhh
bmRsZSwgU3RyaW5nIHVybFN0cmluZykKIAogICAgIC8vIElmIHBhcnNlRGF0YVVybCBpcyBjYWxs
ZWQgc3luY2hyb25vdXNseSB0aGUgam9iIGlzIG5vdCB5ZXQgZWZmZWN0aXZlbHkgc3RhcnRlZAog
ICAgIC8vIGFuZCB3ZWJraXQgd29uJ3QgbmV2ZXIga25vdyB0aGF0IHRoZSBkYXRhIGhhcyBiZWVu
IHBhcnNlZCBldmVuIGRpZEZpbmlzaExvYWRpbmcgaXMgY2FsbGVkLgotICAgIGQtPm1faWRsZUhh
bmRsZXIgPSBnX3RpbWVvdXRfYWRkKDAsIHBhcnNlRGF0YVVybCwgaGFuZGxlKTsKKyAgICBkLT5t
X2lkbGVIYW5kbGVyID0gZ19pZGxlX2FkZChwYXJzZURhdGFVcmwsIGhhbmRsZSk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKQEAgLTQ2OSw2ICs0NDAsMTQzIEBAIHN0YXRpYyB2b2lkIGVuc3VyZVNl
c3Npb25Jc0luaXRpYWxpemVkKFNvdXBTZXNzaW9uKiBzZXNzaW9uKQogICAgIGdfb2JqZWN0X3Nl
dF9kYXRhKEdfT0JKRUNUKHNlc3Npb24pLCAid2Via2l0LWluaXQiLCByZWludGVycHJldF9jYXN0
PHZvaWQqPigweGRlYWRiZWVmKSk7CiB9CiAKK3N0YXRpYyB2b2lkIGNsZWFudXBTb3VwUmVxdWVz
dE9wZXJhdGlvbihSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBib29sIGlzRGVzdHJveWluZyA9IGZh
bHNlKQoreworICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVy
bmFsKCk7CisKKyAgICBpZiAoZC0+bV9zb3VwUmVxdWVzdCkgeworICAgICAgICBnX29iamVjdF9z
ZXRfZGF0YShHX09CSkVDVChkLT5tX3NvdXBSZXF1ZXN0LmdldCgpKSwgIndlYmtpdC1yZXNvdXJj
ZSIsIDApOworICAgICAgICBkLT5tX3NvdXBSZXF1ZXN0LmNsZWFyKCk7CisgICAgfQorCisgICAg
aWYgKGQtPm1fY2FuY2VsbGFibGUpIHsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYoZC0+bV9jYW5j
ZWxsYWJsZSk7CisgICAgICAgIGQtPm1fY2FuY2VsbGFibGUgPSAwOworICAgIH0KKworICAgIGlm
IChkLT5tX2lucHV0U3RyZWFtKSB7CisgICAgICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNU
KGQtPm1faW5wdXRTdHJlYW0pLCAid2Via2l0LXJlc291cmNlIiwgMCk7CisgICAgICAgIGdfb2Jq
ZWN0X3VucmVmKGQtPm1faW5wdXRTdHJlYW0pOworICAgICAgICBkLT5tX2lucHV0U3RyZWFtID0g
MDsKKyAgICB9CisKKyAgICBpZiAoZC0+bV9idWZmZXIpIHsKKyAgICAgICAgZ19mcmVlKGQtPm1f
YnVmZmVyKTsKKyAgICAgICAgZC0+bV9idWZmZXIgPSAwOworICAgIH0KKworICAgIGlmICghaXNE
ZXN0cm95aW5nKQorICAgICAgICBoYW5kbGUtPmRlcmVmKCk7Cit9CisKK3N0YXRpYyB2b2lkIHNl
bmRSZXF1ZXN0Q2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3Bv
aW50ZXIgdXNlckRhdGEpCit7CisgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUgPSBz
dGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGdfb2JqZWN0X2dldF9kYXRhKHNvdXJjZSwgIndl
YmtpdC1yZXNvdXJjZSIpKTsKKyAgICBpZiAoIWhhbmRsZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKKyAg
ICBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0gaGFuZGxlLT5jbGllbnQoKTsKKworICAg
IGlmIChkLT5tX2dvdENodW5rSGFuZGxlcikgeworICAgICAgICAvLyBObyBuZWVkIHRvIGNhbGwg
Z290Q2h1bmtIYW5kbGVyIGFueW1vcmUuIFJlY2VpdmVkIGRhdGEgd2lsbAorICAgICAgICAvLyBi
ZSByZXBvcnRlZCBieSByZWFkQ2FsbGJhY2sKKyAgICAgICAgaWYgKGdfc2lnbmFsX2hhbmRsZXJf
aXNfY29ubmVjdGVkKGQtPm1fbXNnLCBkLT5tX2dvdENodW5rSGFuZGxlcikpCisgICAgICAgICAg
ICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QoZC0+bV9tc2csIGQtPm1fZ290Q2h1bmtIYW5k
bGVyKTsKKyAgICB9CisKKyAgICBpZiAoZC0+bV9jYW5jZWxsZWQgfHwgIWNsaWVudCkgeworICAg
ICAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBHSW5wdXRT
dHJlYW0qIGluID0gc291cF9yZXF1ZXN0X3NlbmRfZmluaXNoKGQtPm1fc291cFJlcXVlc3QuZ2V0
KCksIHJlcywgJmVycm9yLm91dFB0cigpKTsKKworICAgIGlmIChlcnJvcikgeworICAgICAgICBp
ZiAoZC0+bV9tc2cgJiYgU09VUF9TVEFUVVNfSVNfVFJBTlNQT1JUX0VSUk9SKGQtPm1fbXNnLT5z
dGF0dXNfY29kZSkpIHsKKyAgICAgICAgICAgIFNvdXBVUkkqIHVyaSA9IHNvdXBfcmVxdWVzdF9n
ZXRfdXJpKGQtPm1fc291cFJlcXVlc3QuZ2V0KCkpOworICAgICAgICAgICAgR093blB0cjxjaGFy
PiB1cmlTdHIoc291cF91cmlfdG9fc3RyaW5nKHVyaSwgZmFsc2UpKTsKKyAgICAgICAgICAgIFJl
c291cmNlRXJyb3IgcmVzb3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0cmluZyhTT1VQX0hUVFBfRVJS
T1IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQtPm1fbXNnLT5z
dGF0dXNfY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmlT
dHIuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5n
Ojpmcm9tVVRGOChkLT5tX21zZy0+cmVhc29uX3BocmFzZSkpOworICAgICAgICAgICAgY2xlYW51
cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAgICAgICBjbGllbnQt
PmRpZEZhaWwoaGFuZGxlLmdldCgpLCByZXNvdXJjZUVycm9yKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlcnJvci0+ZG9tYWluID09IEdfSU9fRVJST1Ip
IHsKKyAgICAgICAgICAgIFNvdXBVUkkqIHVyaSA9IHNvdXBfcmVxdWVzdF9nZXRfdXJpKGQtPm1f
c291cFJlcXVlc3QuZ2V0KCkpOworICAgICAgICAgICAgR093blB0cjxjaGFyPiB1cmlTdHIoc291
cF91cmlfdG9fc3RyaW5nKHVyaSwgZmFsc2UpKTsKKyAgICAgICAgICAgIFJlc291cmNlRXJyb3Ig
cmVzb3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0cmluZyhHX0lPX0VSUk9SKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvci0+Y29kZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1cmlTdHIuZ2V0KCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPyBTdHJpbmc6OmZyb21VVEY4KGVycm9yLT5t
ZXNzYWdlKSA6IFN0cmluZygpKTsKKyAgICAgICAgICAgIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJh
dGlvbihoYW5kbGUuZ2V0KCkpOworICAgICAgICAgICAgY2xpZW50LT5kaWRGYWlsKGhhbmRsZS5n
ZXQoKSwgcmVzb3VyY2VFcnJvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoZC0+bV9tc2cgJiYgZC0+bV9tc2ctPnN0YXR1c19jb2RlID09IFNPVVBfU1RB
VFVTX1VOQVVUSE9SSVpFRCkgeworICAgICAgICAgICAgZmlsbFJlc3BvbnNlRnJvbU1lc3NhZ2Uo
ZC0+bV9tc2csICZkLT5tX3Jlc3BvbnNlKTsKKyAgICAgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2
ZVJlc3BvbnNlKGhhbmRsZS5nZXQoKSwgZC0+bV9yZXNwb25zZSk7CisKKyAgICAgICAgICAgIC8v
IFdlYkNvcmUgbWlnaHQgaGF2ZSBjYW5jZWxsZWQgdGhlIGpvYiBpbiB0aGUgd2hpbGUKKyAgICAg
ICAgICAgIGlmIChkLT5tX2NhbmNlbGxlZCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgICAgIGlmIChkLT5tX21zZy0+cmVzcG9uc2VfYm9keS0+ZGF0YSkKKyAgICAgICAgICAg
ICAgICBjbGllbnQtPmRpZFJlY2VpdmVEYXRhKGhhbmRsZS5nZXQoKSwgZC0+bV9tc2ctPnJlc3Bv
bnNlX2JvZHktPmRhdGEsIGQtPm1fbXNnLT5yZXNwb25zZV9ib2R5LT5sZW5ndGgsIHRydWUpOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gZGlkUmVjZWl2ZURhdGEgYWJvdmUgbWlnaHQgaGF2ZSBj
YW5jZWxsZWQgaXQKKyAgICAgICAgaWYgKGQtPm1fY2FuY2VsbGVkIHx8ICFjbGllbnQpIHsKKyAg
ICAgICAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKKyAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjbGllbnQtPmRpZEZpbmlzaExvYWRp
bmcoaGFuZGxlLmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChkLT5t
X2NhbmNlbGxlZCkgeworICAgICAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxl
LmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGQtPm1faW5wdXRTdHJlYW0g
PSBpbjsKKyAgICBkLT5tX2J1ZmZlclNpemUgPSBCVUZGRVJfU0laRTsKKyAgICBkLT5tX2J1ZmZl
ciA9IHN0YXRpY19jYXN0PGNoYXIqPihnX21hbGxvYyhkLT5tX2J1ZmZlclNpemUpKTsKKyAgICBk
LT5tX3RvdGFsID0gMDsKKworICAgIC8vIHJlYWRDYWxsYmFjayBuZWVkcyBpdAorICAgIGdfb2Jq
ZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1faW5wdXRTdHJlYW0pLCAid2Via2l0LXJlc291cmNl
IiwgaGFuZGxlLmdldCgpKTsKKworICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgaXQncyBhIGZp
bGU6IFVSTCBhbmQgaWYgaXQgaXMgYSByZWd1bGFyCisgICAgLy8gZmlsZSBhcyBpdCBjb3VsZCBi
ZSBhIGRpcmVjdG9yeS4gSW4gdGhhdCBjYXNlIFNvdXAgcHJvcGVybHkKKyAgICAvLyByZXR1cm5z
IGEgc3RyZWFtIHdob3NlIGNvbnRlbnQgaXMgYSBIVE1MIHdpdGggYSBsaXN0IG9mIGZpbGVzCisg
ICAgLy8gaW4gdGhlIGRpcmVjdG9yeQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShoYW5kbGUt
PmZpcnN0UmVxdWVzdCgpLnVybCgpLnByb3RvY29sKCksICJmaWxlIikKKyAgICAgICAgJiYgR19J
U19GSUxFX0lOUFVUX1NUUkVBTShpbikpIHsKKyAgICAgICAgUmVzb3VyY2VSZXNwb25zZSByZXNw
b25zZTsKKworICAgICAgICByZXNwb25zZS5zZXRVUkwoaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51
cmwoKSk7CisgICAgICAgIHJlc3BvbnNlLnNldE1pbWVUeXBlKHNvdXBfcmVxdWVzdF9nZXRfY29u
dGVudF90eXBlKGQtPm1fc291cFJlcXVlc3QuZ2V0KCkpKTsKKyAgICAgICAgcmVzcG9uc2Uuc2V0
RXhwZWN0ZWRDb250ZW50TGVuZ3RoKHNvdXBfcmVxdWVzdF9nZXRfY29udGVudF9sZW5ndGgoZC0+
bV9zb3VwUmVxdWVzdC5nZXQoKSkpOworICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVSZXNwb25z
ZShoYW5kbGUuZ2V0KCksIHJlc3BvbnNlKTsKKworICAgICAgICBpZiAoZC0+bV9jYW5jZWxsZWQp
IHsKKyAgICAgICAgICAgIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgZ19pbnB1dF9z
dHJlYW1fcmVhZF9hc3luYyhkLT5tX2lucHV0U3RyZWFtLCBkLT5tX2J1ZmZlciwgZC0+bV9idWZm
ZXJTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QUklPUklUWV9ERUZBVUxU
LCBkLT5tX2NhbmNlbGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZENh
bGxiYWNrLCAwKTsKK30KKwogc3RhdGljIGJvb2wgc3RhcnRIdHRwKFJlc291cmNlSGFuZGxlKiBo
YW5kbGUpCiB7CiAgICAgQVNTRVJUKGhhbmRsZSk7CkBAIC00ODMsNyArNTkxLDE2IEBAIHN0YXRp
YyBib29sIHN0YXJ0SHR0cChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQogICAgIHVybC5yZW1vdmVG
cmFnbWVudElkZW50aWZpZXIoKTsKICAgICByZXF1ZXN0LnNldFVSTCh1cmwpOwogCi0gICAgZC0+
bV9tc2cgPSByZXF1ZXN0LnRvU291cE1lc3NhZ2UoKTsKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJy
b3I7CisgICAgZC0+bV9zb3VwUmVxdWVzdCA9IHNvdXBfcmVxdWVzdGVyX3JlcXVlc3QoZC0+bV9y
ZXF1ZXN0ZXIuZ2V0KCksIHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBzZXNzaW9uLCAmZXJy
b3Iub3V0UHRyKCkpOworICAgIGlmIChlcnJvcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSksICJ3
ZWJraXQtcmVzb3VyY2UiLCBoYW5kbGUpOworCisgICAgZC0+bV9tc2cgPSBzb3VwX3JlcXVlc3Rf
aHR0cF9nZXRfbWVzc2FnZShTT1VQX1JFUVVFU1RfSFRUUChkLT5tX3NvdXBSZXF1ZXN0LmdldCgp
KSk7CisgICAgcmVxdWVzdC51cGRhdGVTb3VwTWVzc2FnZShkLT5tX21zZyk7CisKICAgICBpZiAo
IWQtPm1fbXNnKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTQ5Myw3ICs2MTAsNyBAQCBz
dGF0aWMgYm9vbCBzdGFydEh0dHAoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKICAgICBnX3NpZ25h
bF9jb25uZWN0KGQtPm1fbXNnLCAicmVzdGFydGVkIiwgR19DQUxMQkFDSyhyZXN0YXJ0ZWRDYWxs
YmFjayksIGhhbmRsZSk7CiAgICAgZ19zaWduYWxfY29ubmVjdChkLT5tX21zZywgImdvdC1oZWFk
ZXJzIiwgR19DQUxMQkFDSyhnb3RIZWFkZXJzQ2FsbGJhY2spLCBoYW5kbGUpOwogICAgIGdfc2ln
bmFsX2Nvbm5lY3QoZC0+bV9tc2csICJjb250ZW50LXNuaWZmZWQiLCBHX0NBTExCQUNLKGNvbnRl
bnRTbmlmZmVkQ2FsbGJhY2spLCBoYW5kbGUpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoZC0+bV9t
c2csICJnb3QtY2h1bmsiLCBHX0NBTExCQUNLKGdvdENodW5rQ2FsbGJhY2spLCBoYW5kbGUpOwor
ICAgIGQtPm1fZ290Q2h1bmtIYW5kbGVyID0gZ19zaWduYWxfY29ubmVjdChkLT5tX21zZywgImdv
dC1jaHVuayIsIEdfQ0FMTEJBQ0soZ290Q2h1bmtDYWxsYmFjayksIGhhbmRsZSk7CiAKICNpZmRl
ZiBIQVZFX0xJQlNPVVBfMl8yOV85MAogICAgIFN0cmluZyBmaXJzdFBhcnR5U3RyaW5nID0gcmVx
dWVzdC5maXJzdFBhcnR5Rm9yQ29va2llcygpLnN0cmluZygpOwpAQCAtNTAyLDcgKzYxOSw2IEBA
IHN0YXRpYyBib29sIHN0YXJ0SHR0cChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQogICAgICAgICBz
b3VwX21lc3NhZ2Vfc2V0X2ZpcnN0X3BhcnR5KGQtPm1fbXNnLCBmaXJzdFBhcnR5LmdldCgpKTsK
ICAgICB9CiAjZW5kaWYKLSAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5tX21zZyks
ICJyZXNvdXJjZUhhbmRsZSIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGhhbmRsZSkpOwogCiAg
ICAgRm9ybURhdGEqIGh0dHBCb2R5ID0gZC0+bV9maXJzdFJlcXVlc3QuaHR0cEJvZHkoKTsKICAg
ICBpZiAoaHR0cEJvZHkgJiYgIWh0dHBCb2R5LT5pc0VtcHR5KCkpIHsKQEAgLTUzMiwxMiArNjQ4
LDExIEBAIHN0YXRpYyBib29sIHN0YXJ0SHR0cChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQogICAg
ICAgICAgICAgICAgICAgICAgKiBtYXBwaW5nIGZvciB1cGxvYWRlZCBmaWxlcyBjb2RlIGluc3Bp
cmVkIGJ5IHRlY2huaXF1ZSB1c2VkIGluCiAgICAgICAgICAgICAgICAgICAgICAqIGxpYnNvdXAn
cyBzaW1wbGUtaHR0cGQgdGVzdAogICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAg
ICAgICAgICAgR0Vycm9yKiBlcnJvciA9IDA7CisgICAgICAgICAgICAgICAgICAgIEdPd25QdHI8
R0Vycm9yPiBlcnJvcjsKICAgICAgICAgICAgICAgICAgICAgQ1N0cmluZyBmaWxlTmFtZSA9IGZp
bGVTeXN0ZW1SZXByZXNlbnRhdGlvbihlbGVtZW50Lm1fZmlsZW5hbWUpOwotICAgICAgICAgICAg
ICAgICAgICBHTWFwcGVkRmlsZSogZmlsZU1hcHBpbmcgPSBnX21hcHBlZF9maWxlX25ldyhmaWxl
TmFtZS5kYXRhKCksIGZhbHNlLCAmZXJyb3IpOworICAgICAgICAgICAgICAgICAgICBHTWFwcGVk
RmlsZSogZmlsZU1hcHBpbmcgPSBnX21hcHBlZF9maWxlX25ldyhmaWxlTmFtZS5kYXRhKCksIGZh
bHNlLCAmZXJyb3Iub3V0UHRyKCkpOwogCiAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcikg
ewotICAgICAgICAgICAgICAgICAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChkLT5t
X21zZywgR19TSUdOQUxfTUFUQ0hfREFUQSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCBoYW5kbGUpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgZ19vYmplY3RfdW5yZWYoZC0+bV9tc2cpOwpAQCAtNTY5LDEx
ICs2ODQsOSBAQCBzdGF0aWMgYm9vbCBzdGFydEh0dHAoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkK
ICAgICBpZiAoIXNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9vbmUoZC0+bV9tc2ctPnJlcXVlc3Rf
aGVhZGVycywgIkFjY2VwdCIpKQogICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQo
ZC0+bV9tc2ctPnJlcXVlc3RfaGVhZGVycywgIkFjY2VwdCIsICIqLyoiKTsKIAotICAgIC8vIEJh
bGFuY2VkIGluIFJlc291cmNlSGFuZGxlSW50ZXJuYWwncyBkZXN0cnVjdG9yOyB3ZSBuZWVkIHRv
Ci0gICAgLy8ga2VlcCBvdXIgb3duIHJlZiwgYmVjYXVzZSBhZnRlciBxdWV1ZWluZyB0aGUgbWVz
c2FnZSwgdGhlCi0gICAgLy8gc2Vzc2lvbiBvd25zIHRoZSBpbml0aWFsIHJlZmVyZW5jZS4KLSAg
ICBnX29iamVjdF9yZWYoZC0+bV9tc2cpOwotICAgIHNvdXBfc2Vzc2lvbl9xdWV1ZV9tZXNzYWdl
KHNlc3Npb24sIGQtPm1fbXNnLCBmaW5pc2hlZENhbGxiYWNrLCBoYW5kbGUpOworICAgIGQtPm1f
Y2FuY2VsbGFibGUgPSBnX2NhbmNlbGxhYmxlX25ldygpOworICAgIHNvdXBfcmVxdWVzdF9zZW5k
X2FzeW5jKGQtPm1fc291cFJlcXVlc3QuZ2V0KCksIGQtPm1fY2FuY2VsbGFibGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2VuZFJlcXVlc3RDYWxsYmFjaywgMCk7CiAKICAgICByZXR1
cm4gdHJ1ZTsKIH0KQEAgLTY2NywzOCArNzgwLDYgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6bG9h
ZFJlc291cmNlU3luY2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFMK
ICAgICBzeW5jTG9hZGVyLnJ1bigpOwogfQogCi0vLyBHSU8tYmFzZWQgbG9hZGVyCi0KLXN0YXRp
YyB2b2lkIGNsZWFudXBHaW9PcGVyYXRpb24oUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgYm9vbCBp
c0Rlc3Ryb3lpbmcgPSBmYWxzZSkKLXsKLSAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0g
aGFuZGxlLT5nZXRJbnRlcm5hbCgpOwotCi0gICAgaWYgKGQtPm1fZ2ZpbGUpIHsKLSAgICAgICAg
Z19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9nZmlsZSksICJ3ZWJraXQtcmVzb3VyY2Ui
LCAwKTsKLSAgICAgICAgZ19vYmplY3RfdW5yZWYoZC0+bV9nZmlsZSk7Ci0gICAgICAgIGQtPm1f
Z2ZpbGUgPSAwOwotICAgIH0KLQotICAgIGlmIChkLT5tX2NhbmNlbGxhYmxlKSB7Ci0gICAgICAg
IGdfb2JqZWN0X3VucmVmKGQtPm1fY2FuY2VsbGFibGUpOwotICAgICAgICBkLT5tX2NhbmNlbGxh
YmxlID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoZC0+bV9pbnB1dFN0cmVhbSkgewotICAgICAgICBn
X29iamVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5tX2lucHV0U3RyZWFtKSwgIndlYmtpdC1yZXNv
dXJjZSIsIDApOwotICAgICAgICBnX29iamVjdF91bnJlZihkLT5tX2lucHV0U3RyZWFtKTsKLSAg
ICAgICAgZC0+bV9pbnB1dFN0cmVhbSA9IDA7Ci0gICAgfQotCi0gICAgaWYgKGQtPm1fYnVmZmVy
KSB7Ci0gICAgICAgIGdfZnJlZShkLT5tX2J1ZmZlcik7Ci0gICAgICAgIGQtPm1fYnVmZmVyID0g
MDsKLSAgICB9Ci0KLSAgICBpZiAoIWlzRGVzdHJveWluZykKLSAgICAgICAgaGFuZGxlLT5kZXJl
ZigpOwotfQotCiBzdGF0aWMgdm9pZCBjbG9zZUNhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0Fz
eW5jUmVzdWx0KiByZXMsIGdwb2ludGVyKQogewogICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4g
aGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihnX29iamVjdF9nZXRfZGF0YShz
b3VyY2UsICJ3ZWJraXQtcmVzb3VyY2UiKSk7CkBAIC03MDksNyArNzkwLDcgQEAgc3RhdGljIHZv
aWQgY2xvc2VDYWxsYmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzLCBncG9p
bnRlcikKICAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0gaGFuZGxlLT5jbGllbnQo
KTsKIAogICAgIGdfaW5wdXRfc3RyZWFtX2Nsb3NlX2ZpbmlzaChkLT5tX2lucHV0U3RyZWFtLCBy
ZXMsIDApOwotICAgIGNsZWFudXBHaW9PcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKKyAgICBjbGVh
bnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKIAogICAgIC8vIFRoZSBsb2Fk
IG1heSBoYXZlIGJlZW4gY2FuY2VsbGVkLCB0aGUgY2xpZW50IG1heSBoYXZlIGJlZW4KICAgICAv
LyBkZXN0cm95ZWQgYWxyZWFkeS4gSW4gc3VjaCBjYXNlcyBjYWxsaW5nIGRpZEZpbmlzaExvYWRp
bmcgaXMgYQpAQCAtNzIwLDMyICs4MDEsMzIgQEAgc3RhdGljIHZvaWQgY2xvc2VDYWxsYmFjayhH
T2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzLCBncG9pbnRlcikKICAgICBjbGllbnQt
PmRpZEZpbmlzaExvYWRpbmcoaGFuZGxlLmdldCgpKTsKIH0KIAotc3RhdGljIHZvaWQgcmVhZENh
bGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXMsIGdwb2ludGVyKQorc3Rh
dGljIHZvaWQgcmVhZENhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXMs
IGdwb2ludGVyIGRhdGEpCiB7CiAgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUgPSBz
dGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGdfb2JqZWN0X2dldF9kYXRhKHNvdXJjZSwgIndl
YmtpdC1yZXNvdXJjZSIpKTsKICAgICBpZiAoIWhhbmRsZSkKICAgICAgICAgcmV0dXJuOwogCisg
ICAgYm9vbCBjb252ZXJ0VG9VVEYxNiA9IHN0YXRpY19jYXN0PGJvb2w+KGRhdGEpOwogICAgIFJl
c291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFsKCk7CiAgICAgUmVz
b3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCA9IGhhbmRsZS0+Y2xpZW50KCk7CiAKICAgICBpZiAo
ZC0+bV9jYW5jZWxsZWQgfHwgIWNsaWVudCkgewotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9u
KGhhbmRsZS5nZXQoKSk7CisgICAgICAgIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5k
bGUuZ2V0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgR0Vycm9yKiBlcnJvciA9
IDA7CisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOwogCi0gICAgZ3NzaXplIGJ5dGVzUmVhZCA9
IGdfaW5wdXRfc3RyZWFtX3JlYWRfZmluaXNoKGQtPm1faW5wdXRTdHJlYW0sIHJlcywgJmVycm9y
KTsKKyAgICBnc3NpemUgYnl0ZXNSZWFkID0gZ19pbnB1dF9zdHJlYW1fcmVhZF9maW5pc2goZC0+
bV9pbnB1dFN0cmVhbSwgcmVzLCAmZXJyb3Iub3V0UHRyKCkpOwogICAgIGlmIChlcnJvcikgewot
ICAgICAgICBjaGFyKiB1cmkgPSBnX2ZpbGVfZ2V0X3VyaShkLT5tX2dmaWxlKTsKKyAgICAgICAg
U291cFVSSSogdXJpID0gc291cF9yZXF1ZXN0X2dldF91cmkoZC0+bV9zb3VwUmVxdWVzdC5nZXQo
KSk7CisgICAgICAgIEdPd25QdHI8Y2hhcj4gdXJpU3RyKHNvdXBfdXJpX3RvX3N0cmluZyh1cmks
IGZhbHNlKSk7CiAgICAgICAgIFJlc291cmNlRXJyb3IgcmVzb3VyY2VFcnJvcihnX3F1YXJrX3Rv
X3N0cmluZyhHX0lPX0VSUk9SKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVycm9yLT5jb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpU3RyLmdldCgpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPyBTdHJpbmc6OmZyb21VVEY4KGVy
cm9yLT5tZXNzYWdlKSA6IFN0cmluZygpKTsKLSAgICAgICAgZ19mcmVlKHVyaSk7Ci0gICAgICAg
IGdfZXJyb3JfZnJlZShlcnJvcik7Ci0gICAgICAgIGNsZWFudXBHaW9PcGVyYXRpb24oaGFuZGxl
LmdldCgpKTsKKyAgICAgICAgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKGhhbmRsZS5nZXQo
KSk7CiAgICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIHJlc291cmNlRXJyb3Ip
OwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNzU3LDE0MSArODM4LDM2IEBAIHN0YXRpYyB2
b2lkIHJlYWRDYWxsYmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzLCBncG9p
bnRlcikKICAgICB9CiAKICAgICBkLT5tX3RvdGFsICs9IGJ5dGVzUmVhZDsKLSAgICBjbGllbnQt
PmRpZFJlY2VpdmVEYXRhKGhhbmRsZS5nZXQoKSwgZC0+bV9idWZmZXIsIGJ5dGVzUmVhZCwgZC0+
bV90b3RhbCk7Ci0KLSAgICAvLyBkaWRSZWNlaXZlRGF0YSBtYXkgY2FuY2VsIHRoZSBsb2FkLCB3
aGljaCBtYXkgcmVsZWFzZSB0aGUgbGFzdCByZWZlcmVuY2UuCi0gICAgaWYgKGQtPm1fY2FuY2Vs
bGVkKSB7Ci0gICAgICAgIGNsZWFudXBHaW9PcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKLSAgICAg
ICAgcmV0dXJuOworICAgIGlmIChHX0xJS0VMWSghY29udmVydFRvVVRGMTYpKQorICAgICAgICBj
bGllbnQtPmRpZFJlY2VpdmVEYXRhKGhhbmRsZS5nZXQoKSwgZC0+bV9idWZmZXIsIGJ5dGVzUmVh
ZCwgZC0+bV90b3RhbCk7CisgICAgZWxzZSB7CisgICAgICAgIC8vIFdlIGhhdmUgdG8gY29udmVy
dCBpdCB0byBVVEYtMTYgZHVlIHRvIGxpbWl0YXRpb25zIGluIEtVUkwKKyAgICAgICAgR093blB0
cjxndW5pY2hhcjI+IHVuaWNvZGVTdHIoZ191dGY4X3RvX3V0ZjE2KGQtPm1fYnVmZmVyLCBieXRl
c1JlYWQsIDAsIDAsIDApKTsKKyAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0YShoYW5kbGUu
Z2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHVuaWNvZGVTdHIuZ2V0KCkpLCBn
X3V0Zjhfc3RybGVuKGQtPm1fYnVmZmVyLCBieXRlc1JlYWQpICogc2l6ZW9mKFVDaGFyKSwgMCk7
CiAgICAgfQogCi0gICAgZ19pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyhkLT5tX2lucHV0U3RyZWFt
LCBkLT5tX2J1ZmZlciwgZC0+bV9idWZmZXJTaXplLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR19QUklPUklUWV9ERUZBVUxULCBkLT5tX2NhbmNlbGxhYmxlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVhZENhbGxiYWNrLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgb3Bl
bkNhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXMsIGdwb2ludGVyKQot
ewotICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3Vy
Y2VIYW5kbGUqPihnX29iamVjdF9nZXRfZGF0YShzb3VyY2UsICJ3ZWJraXQtcmVzb3VyY2UiKSk7
Ci0gICAgaWYgKCFoYW5kbGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlc291cmNlSGFuZGxl
SW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFsKCk7Ci0gICAgUmVzb3VyY2VIYW5kbGVD
bGllbnQqIGNsaWVudCA9IGhhbmRsZS0+Y2xpZW50KCk7Ci0KKyAgICAvLyBkaWRSZWNlaXZlRGF0
YSBtYXkgY2FuY2VsIHRoZSBsb2FkLCB3aGljaCBtYXkgcmVsZWFzZSB0aGUgbGFzdCByZWZlcmVu
Y2UuCiAgICAgaWYgKGQtPm1fY2FuY2VsbGVkIHx8ICFjbGllbnQpIHsKLSAgICAgICAgY2xlYW51
cEdpb09wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgR0Vycm9yKiBlcnJvciA9IDA7Ci0gICAgR0ZpbGVJbnB1dFN0cmVhbSogaW4gPSBnX2ZpbGVf
cmVhZF9maW5pc2goR19GSUxFKHNvdXJjZSksIHJlcywgJmVycm9yKTsKLSAgICBpZiAoZXJyb3Ip
IHsKLSAgICAgICAgY2hhciogdXJpID0gZ19maWxlX2dldF91cmkoZC0+bV9nZmlsZSk7Ci0gICAg
ICAgIFJlc291cmNlRXJyb3IgcmVzb3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0cmluZyhHX0lPX0VS
Uk9SKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLT5jb2RlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPyBTdHJpbmc6OmZyb21VVEY4KGVycm9yLT5tZXNz
YWdlKSA6IFN0cmluZygpKTsKLSAgICAgICAgZ19mcmVlKHVyaSk7Ci0gICAgICAgIGdfZXJyb3Jf
ZnJlZShlcnJvcik7Ci0gICAgICAgIGNsZWFudXBHaW9PcGVyYXRpb24oaGFuZGxlLmdldCgpKTsK
LSAgICAgICAgY2xpZW50LT5kaWRGYWlsKGhhbmRsZS5nZXQoKSwgcmVzb3VyY2VFcnJvcik7Cisg
ICAgICAgIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgZC0+bV9pbnB1dFN0cmVhbSA9IEdfSU5QVVRfU1RSRUFN
KGluKTsKLSAgICBkLT5tX2J1ZmZlclNpemUgPSA4MTkyOwotICAgIGQtPm1fYnVmZmVyID0gc3Rh
dGljX2Nhc3Q8Y2hhcio+KGdfbWFsbG9jKGQtPm1fYnVmZmVyU2l6ZSkpOwotICAgIGQtPm1fdG90
YWwgPSAwOwotCi0gICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9pbnB1dFN0cmVh
bSksICJ3ZWJraXQtcmVzb3VyY2UiLCBoYW5kbGUuZ2V0KCkpOwogICAgIGdfaW5wdXRfc3RyZWFt
X3JlYWRfYXN5bmMoZC0+bV9pbnB1dFN0cmVhbSwgZC0+bV9idWZmZXIsIGQtPm1fYnVmZmVyU2l6
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUFJJT1JJVFlfREVGQVVMVCwgZC0+
bV9jYW5jZWxsYWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRDYWxsYmFj
aywgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkQ2FsbGJhY2ssIGRhdGEp
OwogfQogCi1zdGF0aWMgdm9pZCBxdWVyeUluZm9DYWxsYmFjayhHT2JqZWN0KiBzb3VyY2UsIEdB
c3luY1Jlc3VsdCogcmVzLCBncG9pbnRlcikKLXsKLSAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+
IGhhbmRsZSA9IHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxlKj4oZ19vYmplY3RfZ2V0X2RhdGEo
c291cmNlLCAid2Via2l0LXJlc291cmNlIikpOwotICAgIGlmICghaGFuZGxlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0gaGFuZGxlLT5nZXRJbnRl
cm5hbCgpOwotICAgIFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQgPSBoYW5kbGUtPmNsaWVu
dCgpOwotCi0gICAgaWYgKGQtPm1fY2FuY2VsbGVkKSB7Ci0gICAgICAgIGNsZWFudXBHaW9PcGVy
YXRpb24oaGFuZGxlLmdldCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlc291
cmNlUmVzcG9uc2UgcmVzcG9uc2U7Ci0KLSAgICBjaGFyKiB1cmkgPSBnX2ZpbGVfZ2V0X3VyaShk
LT5tX2dmaWxlKTsKLSAgICByZXNwb25zZS5zZXRVUkwoS1VSTChLVVJMKCksIHVyaSkpOwotICAg
IGdfZnJlZSh1cmkpOwotCi0gICAgR0Vycm9yKiBlcnJvciA9IDA7Ci0gICAgR0ZpbGVJbmZvKiBp
bmZvID0gZ19maWxlX3F1ZXJ5X2luZm9fZmluaXNoKGQtPm1fZ2ZpbGUsIHJlcywgJmVycm9yKTsK
LQotICAgIGlmIChlcnJvcikgewotICAgICAgICAvLyBGSVhNRTogdG8gYmUgYWJsZSB0byBoYW5k
bGUgZnRwIFVSSXMgcHJvcGVybHksIHdlIG11c3QKLSAgICAgICAgLy8gY2hlY2sgaWYgdGhlIGVy
cm9yIGlzIEdfSU9fRVJST1JfTk9UX01PVU5URUQsIGFuZCBpZiBzbywKLSAgICAgICAgLy8gY2Fs
bCBnX2ZpbGVfbW91bnRfZW5jbG9zaW5nX3ZvbHVtZSgpIHRvIG1vdW50IHRoZSBmdHAKLSAgICAg
ICAgLy8gc2VydmVyIChhbmQgdGhlbiBrZWVwIHRyYWNrIG9mIHRoZSBmYWN0IHRoYXQgd2UgbW91
bnRlZCBpdCwKLSAgICAgICAgLy8gYW5kIHNldCBhIHRpbWVvdXQgdG8gdW5tb3VudCBpdCBsYXRl
ciBhZnRlciBpdCdzIGJlZW4gaWRsZQotICAgICAgICAvLyBmb3IgYSB3aGlsZSkuCi0gICAgICAg
IGNoYXIqIHVyaSA9IGdfZmlsZV9nZXRfdXJpKGQtPm1fZ2ZpbGUpOwotICAgICAgICBSZXNvdXJj
ZUVycm9yIHJlc291cmNlRXJyb3IoZ19xdWFya190b19zdHJpbmcoR19JT19FUlJPUiksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvci0+Y29kZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVyaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVycm9yID8gU3RyaW5nOjpmcm9tVVRGOChlcnJvci0+bWVzc2FnZSkgOiBTdHJp
bmcoKSk7Ci0gICAgICAgIGdfZnJlZSh1cmkpOwotICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3Ip
OwotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7Ci0gICAgICAgIGNs
aWVudC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIHJlc291cmNlRXJyb3IpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKGdfZmlsZV9pbmZvX2dldF9maWxlX3R5cGUoaW5mbykgIT0g
R19GSUxFX1RZUEVfUkVHVUxBUikgewotICAgICAgICAvLyBGSVhNRTogd2hhdCBpZiB0aGUgVVJJ
IHBvaW50cyB0byBhIGRpcmVjdG9yeT8gU2hvdWxkIHdlCi0gICAgICAgIC8vIGdlbmVyYXRlIGEg
bGlzdGluZz8gSG93PyBXaGF0IGRvIG90aGVyIGJhY2tlbmRzIGRvIGhlcmU/Ci0gICAgICAgIGNo
YXIqIHVyaSA9IGdfZmlsZV9nZXRfdXJpKGQtPm1fZ2ZpbGUpOwotICAgICAgICBSZXNvdXJjZUVy
cm9yIHJlc291cmNlRXJyb3IoZ19xdWFya190b19zdHJpbmcoR19JT19FUlJPUiksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX0lPX0VSUk9SX0ZBSUxFRCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFN0cmluZygpKTsKLSAgICAgICAgZ19mcmVlKHVyaSk7Ci0gICAgICAgIGNs
ZWFudXBHaW9PcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKLSAgICAgICAgY2xpZW50LT5kaWRGYWls
KGhhbmRsZS5nZXQoKSwgcmVzb3VyY2VFcnJvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICByZXNwb25zZS5zZXRNaW1lVHlwZShnX2ZpbGVfaW5mb19nZXRfY29udGVudF90eXBlKGlu
Zm8pKTsKLSAgICByZXNwb25zZS5zZXRFeHBlY3RlZENvbnRlbnRMZW5ndGgoZ19maWxlX2luZm9f
Z2V0X3NpemUoaW5mbykpOwotCi0gICAgR1RpbWVWYWwgdHY7Ci0gICAgZ19maWxlX2luZm9fZ2V0
X21vZGlmaWNhdGlvbl90aW1lKGluZm8sICZ0dik7Ci0gICAgcmVzcG9uc2Uuc2V0TGFzdE1vZGlm
aWVkRGF0ZSh0di50dl9zZWMpOwotCi0gICAgY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UoaGFu
ZGxlLmdldCgpLCByZXNwb25zZSk7Ci0KLSAgICBpZiAoZC0+bV9jYW5jZWxsZWQpIHsKLSAgICAg
ICAgY2xlYW51cEdpb09wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgZ19maWxlX3JlYWRfYXN5bmMoZC0+bV9nZmlsZSwgR19QUklPUklUWV9ERUZB
VUxULCBkLT5tX2NhbmNlbGxhYmxlLAotICAgICAgICAgICAgICAgICAgICAgIG9wZW5DYWxsYmFj
aywgMCk7Ci19CiBzdGF0aWMgYm9vbCBzdGFydEdpbyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBL
VVJMIHVybCkKIHsKICAgICBBU1NFUlQoaGFuZGxlKTsKIAotICAgIFJlc291cmNlSGFuZGxlSW50
ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFsKCk7Ci0KICAgICBpZiAoaGFuZGxlLT5maXJz
dFJlcXVlc3QoKS5odHRwTWV0aG9kKCkgIT0gIkdFVCIgJiYgaGFuZGxlLT5maXJzdFJlcXVlc3Qo
KS5odHRwTWV0aG9kKCkgIT0gIlBPU1QiKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBH
T3duUHRyPGNoYXI+IHVybFN0cjsKKyAgICBTb3VwU2Vzc2lvbiogc2Vzc2lvbiA9IGhhbmRsZS0+
ZGVmYXVsdFNlc3Npb24oKTsKKyAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0gaGFuZGxl
LT5nZXRJbnRlcm5hbCgpOworCiAgICAgLy8gR0lPIGRvZXNuJ3Qga25vdyBob3cgdG8gaGFuZGxl
IHJlZnMgYW5kIHF1ZXJpZXMsIHNvIHJlbW92ZSB0aGVtCiAgICAgLy8gVE9ETzogdXNlIEtVUkwu
ZmlsZVN5c3RlbVBhdGggYWZ0ZXIgS1VSTEd0ayBhbmQgRmlsZVN5c3RlbUd0ayBhcmUKICAgICAv
LyB1c2luZyBHSU8gaW50ZXJuYWxseSwgYW5kIHByb3ZpZGluZyBVUklzIGluc3RlYWQgb2YgZmls
ZSBwYXRocwpAQCAtOTA0LDIzICs4ODAsMjUgQEAgc3RhdGljIGJvb2wgc3RhcnRHaW8oUmVzb3Vy
Y2VIYW5kbGUqIGhhbmRsZSwgS1VSTCB1cmwpCiAgICAgLy8gZ19maWxlbmFtZV9mcm9tX3VyaSAo
dXNlZCBpbnRlcm5hbGx5IGJ5IEdGaWxlKSBoYXMgcHJvYmxlbXMKICAgICAvLyBkZWNvZGluZyBz
dHJpbmdzIHdpdGggYXJiaXRyYXJ5IHBlcmNlbnQgc2lnbnMKICAgICBpZiAodXJsLmlzTG9jYWxG
aWxlKCkpCi0gICAgICAgIGQtPm1fZ2ZpbGUgPSBnX2ZpbGVfbmV3X2Zvcl9wYXRoKHVybC5wcmV0
dHlVUkwoKS51dGY4KCkuZGF0YSgpICsgc2l6ZW9mKCJmaWxlOi8vIikgLSAxKTsKKyAgICAgICAg
dXJsU3RyLnNldChnX3N0cmR1cCh1cmwucHJldHR5VVJMKCkudXRmOCgpLmRhdGEoKSkpOwogICAg
IGVsc2UKICNlbmRpZgotICAgICAgICBkLT5tX2dmaWxlID0gZ19maWxlX25ld19mb3JfdXJpKHVy
bC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVD
VChkLT5tX2dmaWxlKSwgIndlYmtpdC1yZXNvdXJjZSIsIGhhbmRsZSk7CisgICAgICAgIHVybFN0
ci5zZXQoZ19zdHJkdXAodXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpKTsKIAotICAgIC8vIGJh
bGFuY2VkIGJ5IGEgZGVyZWYoKSBpbiBjbGVhbnVwR2lvT3BlcmF0aW9uLCB3aGljaCBzaG91bGQg
YWx3YXlzIHJ1bgorICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBkLT5tX3NvdXBSZXF1
ZXN0ID0gc291cF9yZXF1ZXN0ZXJfcmVxdWVzdChkLT5tX3JlcXVlc3Rlci5nZXQoKSwgdXJsU3Ry
LmdldCgpLCBzZXNzaW9uLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGlmIChlcnJvcikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9z
b3VwUmVxdWVzdC5nZXQoKSksICJ3ZWJraXQtcmVzb3VyY2UiLCBoYW5kbGUpOworCisgICAgLy8g
YmFsYW5jZWQgYnkgYSBkZXJlZigpIGluIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbiwgd2hp
Y2ggc2hvdWxkIGFsd2F5cyBydW4KICAgICBoYW5kbGUtPnJlZigpOwogCiAgICAgZC0+bV9jYW5j
ZWxsYWJsZSA9IGdfY2FuY2VsbGFibGVfbmV3KCk7Ci0gICAgZ19maWxlX3F1ZXJ5X2luZm9fYXN5
bmMoZC0+bV9nZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX0ZJTEVfQVRUUklC
VVRFX1NUQU5EQVJEX1RZUEUgIiwiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR19GSUxF
X0FUVFJJQlVURV9TVEFOREFSRF9DT05URU5UX1RZUEUgIiwiCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9TSVpFLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdfRklMRV9RVUVSWV9JTkZPX05PTkUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR19QUklPUklUWV9ERUZBVUxULCBkLT5tX2NhbmNlbGxhYmxlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHF1ZXJ5SW5mb0NhbGxiYWNrLCAwKTsKKyAgICBzb3VwX3JlcXVl
c3Rfc2VuZF9hc3luYyhkLT5tX3NvdXBSZXF1ZXN0LmdldCgpLCBkLT5tX2NhbmNlbGxhYmxlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRSZXF1ZXN0Q2FsbGJhY2ssIDApOworCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL1Jlc291cmNlUmVxdWVzdC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
UmVzb3VyY2VSZXF1ZXN0LmgKaW5kZXggYTFkOTE2Zi4uYzFjNzExNiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0LmgKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0LmgKQEAgLTY3LDYgKzY3LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgdXBkYXRlRnJvbVNvdXBNZXNzYWdl
KHNvdXBNZXNzYWdlKTsKICAgICAgICAgfQogCisgICAgICAgIHZvaWQgdXBkYXRlU291cE1lc3Nh
Z2UoU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlKSBjb25zdDsKICAgICAgICAgU291cE1lc3NhZ2Uq
IHRvU291cE1lc3NhZ2UoKSBjb25zdDsKICAgICAgICAgdm9pZCB1cGRhdGVGcm9tU291cE1lc3Nh
Z2UoU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcAppbmRleCA2MmRlYjAxLi4z
ODBmYzg0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJj
ZVJlcXVlc3RTb3VwLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNv
dXJjZVJlcXVlc3RTb3VwLmNwcApAQCAtMzMsNiArMzMsMjkgQEAgdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit2b2lkIFJlc291cmNlUmVxdWVzdDo6dXBkYXRl
U291cE1lc3NhZ2UoU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlKSBjb25zdAoreworICAgIGdfb2Jq
ZWN0X3NldChzb3VwTWVzc2FnZSwgU09VUF9NRVNTQUdFX01FVEhPRCwgaHR0cE1ldGhvZCgpLnV0
ZjgoKS5kYXRhKCksIE5VTEwpOworCisgICAgY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycyA9
IGh0dHBIZWFkZXJGaWVsZHMoKTsKKyAgICBTb3VwTWVzc2FnZUhlYWRlcnMqIHNvdXBIZWFkZXJz
ID0gc291cE1lc3NhZ2UtPnJlcXVlc3RfaGVhZGVyczsKKyAgICBpZiAoIWhlYWRlcnMuaXNFbXB0
eSgpKSB7CisgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRl
cnMuZW5kKCk7CisgICAgICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBoZWFkZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIHNvdXBfbWVz
c2FnZV9oZWFkZXJzX2FwcGVuZChzb3VwSGVhZGVycywgaXQtPmZpcnN0LnN0cmluZygpLnV0Zjgo
KS5kYXRhKCksIGl0LT5zZWNvbmQudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCisjaWZkZWYgSEFW
RV9MSUJTT1VQXzJfMjlfOTAKKyAgICBTdHJpbmcgZmlyc3RQYXJ0eVN0cmluZyA9IGZpcnN0UGFy
dHlGb3JDb29raWVzKCkuc3RyaW5nKCk7CisgICAgaWYgKCFmaXJzdFBhcnR5U3RyaW5nLmlzRW1w
dHkoKSkgeworICAgICAgICBHT3duUHRyPFNvdXBVUkk+IGZpcnN0UGFydHkoc291cF91cmlfbmV3
KGZpcnN0UGFydHlTdHJpbmcudXRmOCgpLmRhdGEoKSkpOworICAgICAgICBzb3VwX21lc3NhZ2Vf
c2V0X2ZpcnN0X3BhcnR5KHNvdXBNZXNzYWdlLCBmaXJzdFBhcnR5LmdldCgpKTsKKyAgICB9Cisj
ZW5kaWYKKworICAgIHNvdXBfbWVzc2FnZV9zZXRfZmxhZ3Moc291cE1lc3NhZ2UsIG1fc291cEZs
YWdzKTsKK30KKwogU291cE1lc3NhZ2UqIFJlc291cmNlUmVxdWVzdDo6dG9Tb3VwTWVzc2FnZSgp
IGNvbnN0CiB7CiAgICAgU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlID0gc291cF9tZXNzYWdlX25l
dyhodHRwTWV0aG9kKCkudXRmOCgpLmRhdGEoKSwgdXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEo
KSk7Ci0tIAoxLjcuMQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66189</attachid>
            <date>2010-09-01 03:34:01 -0700</date>
            <delta_ts>2010-09-01 03:35:42 -0700</delta_ts>
            <desc>Imported SoupURILoader to Webkit. New public API for HTTP cache</desc>
            <filename>0001-Imported-SoupURILoader-to-Webkit.-New-public-API-for.patch</filename>
            <type>text/plain</type>
            <size>169404</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">RnJvbSBkMjY4YjMyM2RjMmI0OTM4ODA2MjRhYzkyNTEzZGI1MmRjM2Y5OTgzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTZXJnaW8gVmlsbGFyIFNlbmluIDxzdmlsbGFyQGlnYWxpYS5j
b20+CkRhdGU6IFdlZCwgMSBTZXAgMjAxMCAxMTo0MTozMiArMDIwMApTdWJqZWN0OiBbUEFUQ0gg
MS8zXSBJbXBvcnRlZCBTb3VwVVJJTG9hZGVyIHRvIFdlYmtpdC4gTmV3IHB1YmxpYyBBUEkgZm9y
IEhUVFAgY2FjaGUuCgotLS0KIENoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgICAxMCArCiBHTlVtYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgIDQgKy0KIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgIDE5NiArKysKIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyMCArLQogLi4uL3NvdXAvY2FjaGUvc291
cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmMgICAgICAgfCAgMTk5ICsrKwogLi4uL3NvdXAvY2Fj
aGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmggICAgICAgfCAgIDYxICsKIC4uLi9uZXR3
b3JrL3NvdXAvY2FjaGUvc291cC1odHRwLWlucHV0LXN0cmVhbS5jICAgIHwgIDkyMSArKysrKysr
KysrKwogLi4uL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmggICAg
fCAgIDc2ICsKIC4uLi9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWRhdGEuYyAgICAg
ICAgIHwgIDIwNSArKysKIC4uLi9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWRhdGEu
aCAgICAgICAgIHwgICA1MSArCiAuLi4vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1m
aWxlLmMgICAgICAgICB8ICAzMTMgKysrKwogLi4uL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJl
cXVlc3QtZmlsZS5oICAgICAgICAgfCAgIDUzICsKIC4uLi9uZXR3b3JrL3NvdXAvY2FjaGUvc291
cC1yZXF1ZXN0LWh0dHAuYyAgICAgICAgIHwgIDMzOSArKysrCiAuLi4vbmV0d29yay9zb3VwL2Nh
Y2hlL3NvdXAtcmVxdWVzdC1odHRwLmggICAgICAgICB8ICAgNTMgKwogV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LmMgfCAgMjc5ICsrKysKIFdlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5oIHwgICA5MiArKwogLi4u
L3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Rlci5jICAgfCAgMTg2ICsr
KwogLi4uL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Rlci5oICAgfCAg
IDgwICsKIC4uLi9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUtcHJpdmF0ZS5o
IHwgICA0MSArCiAuLi4vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLmMgICAg
ICAgICB8IDE2MjcgKysrKysrKysrKysrKysrKysrKysKIC4uLi9uZXR3b3JrL3NvdXAvY2FjaGUv
d2Via2l0L3NvdXAtY2FjaGUuaCAgICAgICAgIHwgICA5NSArKwogV2ViS2l0VG9vbHMvQ2hhbmdl
TG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA5ICsKIFdlYktpdFRvb2xzL0dO
VW1ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArCiBhdXRvdG9vbHMv
d2Via2l0Lm00ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KIDI0IGZp
bGVzIGNoYW5nZWQsIDQ5MTEgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWRpcmVj
dG9yeS1pbnB1dC1zdHJlYW0uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL2NhY2hlL3NvdXAtZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5oCiBjcmVhdGUg
bW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1odHRw
LWlucHV0LXN0cmVhbS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvY2FjaGUvc291cC1odHRwLWlucHV0LXN0cmVhbS5oCiBjcmVhdGUgbW9kZSAxMDA2
NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWRhdGEu
YwogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3NvdXAtcmVxdWVzdC1kYXRhLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZmlsZS5jCiBjcmVhdGUgbW9kZSAxMDA2
NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWZpbGUu
aAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3NvdXAtcmVxdWVzdC1odHRwLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtaHR0cC5oCiBjcmVhdGUgbW9kZSAxMDA2
NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LmMKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3Vw
LXJlcXVlc3QuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Rlci5oCiBjcmVhdGUgbW9kZSAx
MDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2Fj
aGUtcHJpdmF0ZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLmgKCmRpZmYg
LS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggYjNjOTdlYS4uNGYxMWZiZCAxMDA2
NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEw
LTA5LTAxICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIEFkZCBIVFRQ
IGNhY2hpbmcgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDQyNjEKKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBhZGRlZCBwYXRocyBm
b3IgdGhlIHNvdXAgSFRUUCBjYWNoZSBjb2RlCisgICAgICAgICogYXV0b3Rvb2xzL3dlYmtpdC5t
NDogdXBncmFkZWQgZ2xpYiByZXF1aXJlZCB2ZXJzaW9uIHRvIDIuMjQKKwogMjAxMC0wOC0zMCAg
THVjYXMgRGUgTWFyY2hpICA8bHVjYXMuZGVtYXJjaGlAcHJvZnVzaW9uLm1vYmk+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBhL0dOVW1ha2VmaWxlLmFtIGIv
R05VbWFrZWZpbGUuYW0KaW5kZXggNzQ3MTI1ZC4uMDU4M2RiOCAxMDA2NDQKLS0tIGEvR05VbWFr
ZWZpbGUuYW0KKysrIGIvR05VbWFrZWZpbGUuYW0KQEAgLTMyMCw3ICszMjAsOCBAQCB3ZWJraXRn
dGtfc3RhdGljX2hfYXBpICs9IFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
d2Vid2luZG93ZmVhdHVyZXMuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYnZpZXcuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFi
YXNlLmggXAotCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzZWN1cml0eW9yaWdp
bi5oCisJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNlY3VyaXR5b3JpZ2luLmgg
XAorCSQoc3JjZGlyKS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQv
c291cC1jYWNoZS5oCiAKIHdlYmtpdGd0a19idWlsdF9oX2FwaSArPSBcCiAJV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0dmVyc2lvbi5oCkBAIC01NDIsNiArNTQzLDcgQEAgd2Via2l0X3Rlc3RzX2Nm
bGFncyA9IFwKIAktZm5vLXN0cmljdC1hbGlhc2luZyBcCiAJLUkkKHNyY2RpcikvSmF2YVNjcmlw
dENvcmUvRm9yd2FyZGluZ0hlYWRlcnMgXAogCS1JJChzcmNkaXIpL1dlYktpdC9ndGsgXAorCS1J
JChzcmNkaXIpL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlIFwKIAktSSQodG9w
X2J1aWxkZGlyKS9XZWJLaXQvZ3RrIFwKIAktSSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNl
cyBcCiAJLUkkKHRvcF9zcmNkaXIpL1dlYkNvcmUvYmluZGluZ3MgXApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1OTFiZjc4Li4zMzdlNGM1
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE5OSBAQAorMjAxMC0wOS0wMSAgU2VyZ2lvIFZpbGxhciBTZW5pbiAgPHN2aWxs
YXJAaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBbR1RLXSBBZGQgSFRUUCBjYWNoaW5nIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0MjYxCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzLiAoT09QUyEpCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlSGFuZGxlSW50ZXJuYWw6OlJlc291cmNlSGFuZGxlSW50ZXJuYWwpOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6flJlc291cmNlSGFuZGxlSW50ZXJu
YWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6On5SZXNvdXJjZUhhbmRsZSk6
CisgICAgICAgIChXZWJDb3JlOjpyZXN0YXJ0ZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3Jl
Ojpnb3RDaHVua0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlRGF0YVVybCk6Cisg
ICAgICAgIChXZWJDb3JlOjpzdGFydERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Y2xlYW51cFNv
dXBSZXF1ZXN0T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnNlbmRSZXF1ZXN0Q2FsbGJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6c3RhcnRIdHRwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0Ojp1cGRhdGVTb3VwTWVzc2FnZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9zb3VwL2NhY2hlL3NvdXAtZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5jOiBBZGRlZC4KKyAgICAg
ICAgKHNvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9wYXJzZV9pbmZvKToKKyAgICAgICAgKHNv
dXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9yZWFkX25leHRfZmlsZSk6CisgICAgICAgIChzb3Vw
X2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fcmVhZCk6CisgICAgICAgIChzb3VwX2RpcmVjdG9yeV9p
bnB1dF9zdHJlYW1fY2xvc2UpOgorICAgICAgICAoc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFt
X2NsYXNzX2luaXQpOgorICAgICAgICAoc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX2luaXQp
OgorICAgICAgICAoc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX25ldyk6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5o
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1odHRw
LWlucHV0LXN0cmVhbS5jOiBBZGRlZC4KKyAgICAgICAgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1f
ZmluYWxpemUpOgorICAgICAgICAoc291cF9odHRwX2lucHV0X3N0cmVhbV9jbGFzc19pbml0KToK
KyAgICAgICAgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2Vla2FibGVfaWZhY2VfaW5pdCk6Cisg
ICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2luaXQpOgorICAgICAgICAoc291cF9odHRw
X2lucHV0X3N0cmVhbV9xdWV1ZV9tZXNzYWdlKToKKyAgICAgICAgKHNvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fbmV3KToKKyAgICAgICAgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ290X2hlYWRlcnMp
OgorICAgICAgICAoc291cF9odHRwX2lucHV0X3N0cmVhbV9nb3RfY2h1bmspOgorICAgICAgICAo
c291cF9odHRwX2lucHV0X3N0cmVhbV9maW5pc2hlZCk6CisgICAgICAgIChzb3VwX2h0dHBfaW5w
dXRfc3RyZWFtX2NhbmNlbGxlZCk6CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3By
ZXBhcmVfZm9yX2lvKToKKyAgICAgICAgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZG9uZV9pbyk6
CisgICAgICAgIChzZXRfZXJyb3JfaWZfaHR0cF9mYWlsZWQpOgorICAgICAgICAocmVhZF9mcm9t
X2xlZnRvdmVyKToKKyAgICAgICAgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9pbnRlcm5h
bCk6CisgICAgICAgIChzZW5kX3N5bmNfZmluaXNoZWQpOgorICAgICAgICAoc291cF9odHRwX2lu
cHV0X3N0cmVhbV9zZW5kKToKKyAgICAgICAgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVhZCk6
CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlKToKKyAgICAgICAgKHdyYXBw
ZXJfY2FsbGJhY2spOgorICAgICAgICAoc2VuZF9hc3luY190aHJlYWQpOgorICAgICAgICAoc291
cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jX2luX3RocmVhZCk6CisgICAgICAgIChzZW5k
X2FzeW5jX2ZpbmlzaGVkKToKKyAgICAgICAgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9h
c3luY19pbnRlcm5hbCk6CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5
bmMpOgorICAgICAgICAoc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2ZpbmlzaCk6CisgICAg
ICAgIChyZWFkX2FzeW5jX2RvbmUpOgorICAgICAgICAoc291cF9odHRwX2lucHV0X3N0cmVhbV9y
ZWFkX2FzeW5jKToKKyAgICAgICAgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVhZF9maW5pc2gp
OgorICAgICAgICAoc291cF9odHRwX2lucHV0X3N0cmVhbV9jbG9zZV9hc3luYyk6CisgICAgICAg
IChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlX2ZpbmlzaCk6CisgICAgICAgIChzb3VwX2h0
dHBfaW5wdXRfc3RyZWFtX3RlbGwpOgorICAgICAgICAoc291cF9odHRwX2lucHV0X3N0cmVhbV9j
YW5fc2Vlayk6CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlZWspOgorICAgICAg
ICAoc291cF9odHRwX2lucHV0X3N0cmVhbV9jYW5fdHJ1bmNhdGUpOgorICAgICAgICAoc291cF9o
dHRwX2lucHV0X3N0cmVhbV90cnVuY2F0ZSk6CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3Ry
ZWFtX2dldF9tZXNzYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUv
c291cC1odHRwLWlucHV0LXN0cmVhbS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWRhdGEuYzogQWRkZWQuCisgICAgICAgIChzb3Vw
X3JlcXVlc3RfZGF0YV9pbml0KToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9kYXRhX2ZpbmFsaXpl
KToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9kYXRhX2NoZWNrX3VyaSk6CisgICAgICAgICh1cmlf
ZGVjb2RlZF9jb3B5KToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9kYXRhX3NlbmQpOgorICAgICAg
ICAoc291cF9yZXF1ZXN0X2RhdGFfZ2V0X2NvbnRlbnRfbGVuZ3RoKToKKyAgICAgICAgKHNvdXBf
cmVxdWVzdF9kYXRhX2dldF9jb250ZW50X3R5cGUpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2Rh
dGFfY2xhc3NfaW5pdCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3Nv
dXAtcmVxdWVzdC1kYXRhLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291
cC9jYWNoZS9zb3VwLXJlcXVlc3QtZmlsZS5jOiBBZGRlZC4KKyAgICAgICAgKHNvdXBfcmVxdWVz
dF9maWxlX2dldF9maWxlKToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9maWxlX2luaXQpOgorICAg
ICAgICAoc291cF9yZXF1ZXN0X2ZpbGVfZmluYWxpemUpOgorICAgICAgICAoc291cF9yZXF1ZXN0
X2ZpbGVfY2hlY2tfdXJpKToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9maWxlX2Z0cF9tYWluX2xv
b3BfcXVpdCk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfZmlsZV9lbnN1cmVfZmlsZV9mdHApOgor
ICAgICAgICAoc291cF9yZXF1ZXN0X2ZpbGVfZW5zdXJlX2ZpbGUpOgorICAgICAgICAoc291cF9y
ZXF1ZXN0X2ZpbGVfc2VuZCk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfZmlsZV9zZW5kX2FzeW5j
X3RocmVhZCk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfZmlsZV9zZW5kX2FzeW5jKToKKyAgICAg
ICAgKHNvdXBfcmVxdWVzdF9maWxlX3NlbmRfZmluaXNoKToKKyAgICAgICAgKHNvdXBfcmVxdWVz
dF9maWxlX2dldF9jb250ZW50X2xlbmd0aCk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfZmlsZV9n
ZXRfY29udGVudF90eXBlKToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9maWxlX2NsYXNzX2luaXQp
OgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZmls
ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1y
ZXF1ZXN0LWh0dHAuYzogQWRkZWQuCisgICAgICAgIChzb3VwX3JlcXVlc3RfaHR0cF9nZXRfbWVz
c2FnZSk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfaHR0cF9pbml0KToKKyAgICAgICAgKHNvdXBf
cmVxdWVzdF9odHRwX2NoZWNrX3VyaSk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfaHR0cF9maW5h
bGl6ZSk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfaHR0cF9zZW5kKToKKyAgICAgICAgKHNlbnRf
YXN5bmMpOgorICAgICAgICAoY29uZGl0aW9uYWxfZ2V0X3JlYWR5X2NiKToKKyAgICAgICAgKHNl
bmRfYXN5bmNfY2IpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2h0dHBfc2VuZF9hc3luYyk6Cisg
ICAgICAgIChzb3VwX3JlcXVlc3RfaHR0cF9zZW5kX2ZpbmlzaCk6CisgICAgICAgIChzb3VwX3Jl
cXVlc3RfaHR0cF9nZXRfY29udGVudF9sZW5ndGgpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2h0
dHBfZ2V0X2NvbnRlbnRfdHlwZSk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfaHR0cF9jbGFzc19p
bml0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0
LWh0dHAuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3Nv
dXAtcmVxdWVzdC5jOiBBZGRlZC4KKyAgICAgICAgKHNvdXBfcmVxdWVzdF9pbml0KToKKyAgICAg
ICAgKHNvdXBfcmVxdWVzdF9maW5hbGl6ZSk6CisgICAgICAgIChzb3VwX3JlcXVlc3Rfc2V0X3By
b3BlcnR5KToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9nZXRfcHJvcGVydHkpOgorICAgICAgICAo
c291cF9yZXF1ZXN0X2luaXRhYmxlX2luaXQpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2RlZmF1
bHRfY2hlY2tfdXJpKToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9kZWZhdWx0X3NlbmRfYXN5bmMp
OgorICAgICAgICAoc291cF9yZXF1ZXN0X2RlZmF1bHRfc2VuZF9maW5pc2gpOgorICAgICAgICAo
c291cF9yZXF1ZXN0X3NlbmQpOgorICAgICAgICAoc291cF9yZXF1ZXN0X3NlbmRfYXN5bmMpOgor
ICAgICAgICAoc291cF9yZXF1ZXN0X3NlbmRfZmluaXNoKToKKyAgICAgICAgKHNvdXBfcmVxdWVz
dF9jbGFzc19pbml0KToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9pbml0YWJsZV9pbnRlcmZhY2Vf
aW5pdCk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfZ2V0X3VyaSk6CisgICAgICAgIChzb3VwX3Jl
cXVlc3RfZ2V0X3Nlc3Npb24pOgorICAgICAgICAoc291cF9yZXF1ZXN0X2dldF9jb250ZW50X2xl
bmd0aCk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfZ2V0X2NvbnRlbnRfdHlwZSk6CisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuYzogQWRk
ZWQuCisgICAgICAgIChzb3VwX3JlcXVlc3Rlcl9pbml0KToKKyAgICAgICAgKGZpbmFsaXplKToK
KyAgICAgICAgKHNvdXBfcmVxdWVzdGVyX2NsYXNzX2luaXQpOgorICAgICAgICAoaW5pdF9yZXF1
ZXN0X3R5cGVzKToKKyAgICAgICAgKHNvdXBfcmVxdWVzdGVyX25ldyk6CisgICAgICAgIChzb3Vw
X3JlcXVlc3Rlcl9yZXF1ZXN0KToKKyAgICAgICAgKHNvdXBfcmVxdWVzdGVyX3JlcXVlc3RfdXJp
KToKKyAgICAgICAgKHNvdXBfc2NoZW1lX2lzX3ZhbGlkKToKKyAgICAgICAgKHNvdXBfcmVxdWVz
dGVyX2FkZF9wcm90b2NvbCk6CisgICAgICAgIChzb3VwX3JlcXVlc3Rlcl9yZW1vdmVfcHJvdG9j
b2wpOgorICAgICAgICAoc291cF9lcnJvcl9xdWFyayk6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS1wcml2YXRlLmg6IEFkZGVk
LgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNo
ZS5jOiBBZGRlZC4KKyAgICAgICAgKGdldF9jYWNoZWFiaWxpdHkpOgorICAgICAgICAod2Via2l0
X3NvdXBfY2FjaGVfZW50cnlfZnJlZSk6CisgICAgICAgIChjb3B5X2hlYWRlcnMpOgorICAgICAg
ICAodXBkYXRlX2hlYWRlcnMpOgorICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfZW50cnlfZ2V0
X2N1cnJlbnRfYWdlKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2lzX2ZyZXNo
X2Vub3VnaCk6CisgICAgICAgIChzb3VwX21lc3NhZ2VfZ2V0X2NhY2hlX2tleSk6CisgICAgICAg
ICh3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9zZXRfZnJlc2huZXNzKToKKyAgICAgICAgKHdlYmtp
dF9zb3VwX2NhY2hlX2VudHJ5X25ldyk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV93cml0
aW5nX2ZpeHR1cmVfZnJlZSk6CisgICAgICAgIChjbG9zZV9yZWFkeV9jYik6CisgICAgICAgICh3
cml0ZV9yZWFkeV9jYik6CisgICAgICAgIChtc2dfZ290X2NodW5rX2NiKToKKyAgICAgICAgKG1z
Z19nb3RfYm9keV9jYik6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9kZWxldGUp
OgorICAgICAgICAobHJ1X2NvbXBhcmVfZnVuYyk6CisgICAgICAgIChjYWNoZV9hY2NlcHRzX2Vu
dHJpZXNfb2Zfc2l6ZSk6CisgICAgICAgIChtYWtlX3Jvb21fZm9yX25ld19lbnRyeSk6CisgICAg
ICAgICh3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9pbnNlcnRfYnlfa2V5KToKKyAgICAgICAgKG1z
Z19yZXN0YXJ0ZWRfY2IpOgorICAgICAgICAoYXBwZW5kX3RvX3JlYWR5X2NiKToKKyAgICAgICAg
KG1zZ19nb3RfaGVhZGVyc19jYik6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9zZW5kX3Jl
c3BvbnNlKToKKyAgICAgICAgKHJlcXVlc3Rfc3RhcnRlZCk6CisgICAgICAgIChhdHRhY2gpOgor
ICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfc2Vzc2lvbl9mZWF0dXJlX2luaXQpOgorICAgICAg
ICAod2Via2l0X3NvdXBfY2FjaGVfaW5pdCk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9m
aW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9zZXRfcHJvcGVydHkpOgorICAg
ICAgICAod2Via2l0X3NvdXBfY2FjaGVfZ2V0X3Byb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdF9z
b3VwX2NhY2hlX2NvbnN0cnVjdGVkKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX3R5cGVf
Z2V0X3R5cGUpOgorICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfY2xhc3NfaW5pdCk6CisgICAg
ICAgICh3ZWJraXRfc291cF9jYWNoZV9uZXcpOgorICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVf
aGFzX3Jlc3BvbnNlKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2dldF9jYWNoZWFiaWxp
dHkpOgorICAgICAgICAoZm9yY2VfZmx1c2hfdGltZW91dCk6CisgICAgICAgICh3ZWJraXRfc291
cF9jYWNoZV9mbHVzaCk6CisgICAgICAgIChyZW1vdmVfY2FjaGVfaXRlbSk6CisgICAgICAgICh3
ZWJraXRfc291cF9jYWNoZV9jbGVhcik6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9nZW5l
cmF0ZV9jb25kaXRpb25hbF9yZXF1ZXN0KToKKyAgICAgICAgKHBhY2tfZW50cnkpOgorICAgICAg
ICAod2Via2l0X3NvdXBfY2FjaGVfZHVtcCk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9s
b2FkKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX3NldF9tYXhfc2l6ZSk6CisgICAgICAg
ICh3ZWJraXRfc291cF9jYWNoZV9nZXRfbWF4X3NpemUpOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5oOiBBZGRlZC4KKwogMjAxMC0wOC0y
NSAgWmhlbnlhbyBNbyAgPHptb0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtl
bm5ldGggUnVzc2VsbC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDQzOTQ4ZTkuLjZjNmIwYzEgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtNzcs
NyArNzcsOSBAQCB3ZWJjb3JlZ3RrX2NwcGZsYWdzICs9IFwKIAktSSQoc3JjZGlyKS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lciBcCiAJLUkkKHNyY2RpcikvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsgXAogCS1JJChzcmNkaXIpL1dlYkNvcmUvcGxhdGZvcm0vZ3RrIFwK
LQktSSQoc3JjZGlyKS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cAorCS1JJChzcmNkaXIp
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwIFwKKwktSSQoc3JjZGlyKS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9jYWNoZSBcCisJLUkkKHNyY2RpcikvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0CiAKIHdlYmNvcmVfYnVpbHRfbm9zb3VyY2VzICs9
IFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0RvY1R5cGVTdHJpbmdzLmNwcCBcCkBAIC0yNTUx
LDYgKzI1NTMsMjIgQEAgd2ViY29yZWd0a19zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXNwb25zZS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlU291cC5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL2NhY2hlL3NvdXAtZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5jIFwKKwlXZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJl
YW0uaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1odHRwLWlu
cHV0LXN0cmVhbS5jIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3Vw
LWh0dHAtaW5wdXQtc3RyZWFtLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2Nh
Y2hlL3NvdXAtcmVxdWVzdC5jIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNo
ZS9zb3VwLXJlcXVlc3QtZGF0YS5jIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9j
YWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9jYWNoZS9zb3VwLXJlcXVlc3Rlci5jIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9jYWNoZS9zb3VwLXJlcXVlc3Rlci5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9jYWNoZS9zb3VwLXJlcXVlc3QtZmlsZS5jIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZmlsZS5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuYyBcCisJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUuYyBcCisJV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUuaCBcCiAJV2ViQ29yZS9wbHVn
aW5zL2d0ay9QbHVnaW5EYXRhR3RrLmNwcCBcCiAJV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5Q
YWNrYWdlR3RrLmNwcCBcCiAJV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcCBc
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWRp
cmVjdG9yeS1pbnB1dC1zdHJlYW0uYyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2Nh
Y2hlL3NvdXAtZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjkyM2FjNmYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uYwpAQCAtMCww
ICsxLDE5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBSZWQgSGF0LCBJbmMuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5j
bHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgInNvdXAtZGlyZWN0b3J5LWlucHV0
LXN0cmVhbS5oIgorCisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CisjaW5jbHVkZSA8c3RkaW8u
aD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2RlZmluZSBJTklUX1NUUklORyAiPGh0bWw+PGhl
YWQ+PHRpdGxlPk9NRyE8L3RpdGxlPjwvaGVhZD48Ym9keT48dGFibGU+IgorI2RlZmluZSBFWElU
X1NUUklORyAiPC90YWJsZT48L2h0bWw+IgorCitHX0RFRklORV9UWVBFIChTb3VwRGlyZWN0b3J5
SW5wdXRTdHJlYW0sIHNvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbSwgR19UWVBFX0lOUFVUX1NU
UkVBTSkKKworc3RhdGljIFNvdXBCdWZmZXIgKgorc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFt
X3BhcnNlX2luZm8gKFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbSAqIHN0cmVhbSwKKwkJCQkJR0Zp
bGVJbmZvICogaW5mbykKK3sKKwlTb3VwQnVmZmVyICpidWZmZXI7CisJR1N0cmluZyAqc3RyaW5n
OworCWNvbnN0IGNoYXIgKnM7CisJY2hhciAqZXNjYXBlZCwgKnBhdGgsICp4bWxfc3RyaW5nOwor
CisJaWYgKCFnX2ZpbGVfaW5mb19nZXRfbmFtZSAoaW5mbykpCisJCXJldHVybiBOVUxMOworCisJ
cyA9IGdfZmlsZV9pbmZvX2dldF9kaXNwbGF5X25hbWUgKGluZm8pOworCWlmICghcykgeworCQlz
ID0gZ19maWxlX2luZm9fZ2V0X25hbWUgKGluZm8pOworCQkvKiBGSVhNRTogY29udmVydCBzb21l
aG93PyAqLworCQlpZiAoIWdfdXRmOF92YWxpZGF0ZSAocywgLTEsIE5VTEwpKQorCQkJcmV0dXJu
IE5VTEw7CisJfQorCXN0cmluZyA9IGdfc3RyaW5nX25ldyAoIjx0cj4iKTsKKworCXhtbF9zdHJp
bmcgPSBnX21hcmt1cF9lc2NhcGVfdGV4dCAocywgLTEpOworCWVzY2FwZWQgPSBnX3VyaV9lc2Nh
cGVfc3RyaW5nIChnX2ZpbGVfaW5mb19nZXRfbmFtZSAoaW5mbyksIE5VTEwsIEZBTFNFKTsKKwlw
YXRoID0gZ19zdHJjb25jYXQgKHN0cmVhbS0+dXJpLCAiLyIsIGVzY2FwZWQsIE5VTEwpOworCWdf
ZnJlZSAoZXNjYXBlZCk7CisJZ19zdHJpbmdfYXBwZW5kX3ByaW50ZiAoc3RyaW5nLCAiPHRkPjxh
IGhyZWY9XCIlc1wiPiVzPC9hPjwvdGQ+IiwgcGF0aCwgeG1sX3N0cmluZyk7CisJZ19mcmVlIChw
YXRoKTsKKwlnX2ZyZWUgKHhtbF9zdHJpbmcpOworCWdfc3RyaW5nX2FwcGVuZCAoc3RyaW5nLCAi
PC90cj4iKTsKKworCWJ1ZmZlciA9IHNvdXBfYnVmZmVyX25ldyAoU09VUF9NRU1PUllfVEFLRSwg
c3RyaW5nLT5zdHIsIHN0cmluZy0+bGVuKTsKKwlnX3N0cmluZ19mcmVlIChzdHJpbmcsIEZBTFNF
KTsKKworCXJldHVybiBidWZmZXI7Cit9CisKK3N0YXRpYyBTb3VwQnVmZmVyICoKK3NvdXBfZGly
ZWN0b3J5X2lucHV0X3N0cmVhbV9yZWFkX25leHRfZmlsZSAoU291cERpcmVjdG9yeUlucHV0U3Ry
ZWFtICAqc3RyZWFtLAorCQkJCQkgICAgR0NhbmNlbGxhYmxlICAgICAgICAgICAgICAqY2FuY2Vs
bGFibGUsCisJCQkJCSAgICBHRXJyb3IgICAgICAgICAgICAgICAgICAgKiplcnJvcikKK3sKKwlH
RmlsZUluZm8gKmluZm87CisJU291cEJ1ZmZlciAqYnVmZmVyOworCUdFcnJvciAqZXJyID0gTlVM
TDsKKworCWRvIHsKKwkJaW5mbyA9IGdfZmlsZV9lbnVtZXJhdG9yX25leHRfZmlsZSAoc3RyZWFt
LT5lbnVtZXJhdG9yLCBjYW5jZWxsYWJsZSwgJmVycik7CisJCWlmIChpbmZvID09IE5VTEwpIHsK
KwkJCWlmIChlcnIpIHsKKwkJCQlnX3Byb3BhZ2F0ZV9lcnJvciAoZXJyb3IsIGVycik7CisJCQkJ
cmV0dXJuIE5VTEw7CisJCQl9IGVsc2UgaWYgKCFzdHJlYW0tPmRvbmUpIHsKKwkJCQlzdHJlYW0t
PmRvbmUgPSBUUlVFOworCQkJCXJldHVybiBzb3VwX2J1ZmZlcl9uZXcgKFNPVVBfTUVNT1JZX1NU
QVRJQywKKwkJCQkJCQlFWElUX1NUUklORywKKwkJCQkJCQlzaXplb2YgKEVYSVRfU1RSSU5HKSk7
CisJCQl9IGVsc2UgeworCQkJCXJldHVybiBOVUxMOworCQkJfQorCQl9CisKKwkJYnVmZmVyID0g
c291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX3BhcnNlX2luZm8gKHN0cmVhbSwgaW5mbyk7CisJ
fSB3aGlsZSAoYnVmZmVyID09IE5VTEwpOworCisJcmV0dXJuIGJ1ZmZlcjsKK30KKworc3RhdGlj
IGdzc2l6ZQorc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX3JlYWQgKEdJbnB1dFN0cmVhbSAg
KmlucHV0LAorCQkJCSAgdm9pZCAgICAgICAgICAqYnVmZmVyLAorCQkJCSAgZ3NpemUgY291bnQs
CisJCQkJICBHQ2FuY2VsbGFibGUgICpjYW5jZWxsYWJsZSwKKwkJCQkgIEdFcnJvciAgICAgICAq
KmVycm9yKQoreworCVNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbSAqc3RyZWFtID0gU09VUF9ESVJF
Q1RPUllfSU5QVVRfU1RSRUFNIChpbnB1dCk7CisJZ3NzaXplIHRvdGFsLCBzaXplOworCisJZm9y
ICh0b3RhbCA9IDA7IHRvdGFsIDwgY291bnQ7IHRvdGFsICs9IHNpemUpIHsKKwkJaWYgKHN0cmVh
bS0+YnVmZmVyID09IE5VTEwpIHsKKwkJCXN0cmVhbS0+YnVmZmVyID0gc291cF9kaXJlY3Rvcnlf
aW5wdXRfc3RyZWFtX3JlYWRfbmV4dF9maWxlIChzdHJlYW0sIGNhbmNlbGxhYmxlLCBlcnJvcik7
CisJCQlpZiAoc3RyZWFtLT5idWZmZXIgPT0gTlVMTCkgeworCQkJCS8qIEZJWE1FOiBJcyB0aGlz
IGNvcnJlY3Qgb3Igc2hvdWxkIHdlIGZvcndhcmQgdGhlIGVycm9yPyAqLworCQkJCWlmICh0b3Rh
bCkKKwkJCQkJZ19jbGVhcl9lcnJvciAoZXJyb3IpOworCQkJCXJldHVybiB0b3RhbDsKKwkJCX0K
KwkJfQorCisJCXNpemUgPSBNSU4gKHN0cmVhbS0+YnVmZmVyLT5sZW5ndGgsIGNvdW50IC0gdG90
YWwpOworCQltZW1jcHkgKChjaGFyICopYnVmZmVyICsgdG90YWwsIHN0cmVhbS0+YnVmZmVyLT5k
YXRhLCBzaXplKTsKKwkJaWYgKHNpemUgPT0gc3RyZWFtLT5idWZmZXItPmxlbmd0aCkgeworCQkJ
c291cF9idWZmZXJfZnJlZSAoc3RyZWFtLT5idWZmZXIpOworCQkJc3RyZWFtLT5idWZmZXIgPSBO
VUxMOworCQl9IGVsc2UgeworCQkJU291cEJ1ZmZlciAqc3ViID0gc291cF9idWZmZXJfbmV3X3N1
YmJ1ZmZlciAoc3RyZWFtLT5idWZmZXIsCisJCQkJCQkJCSAgICAgc2l6ZSwKKwkJCQkJCQkJICAg
ICBzdHJlYW0tPmJ1ZmZlci0+bGVuZ3RoIC0gc2l6ZSk7CisJCQlzb3VwX2J1ZmZlcl9mcmVlIChz
dHJlYW0tPmJ1ZmZlcik7CisJCQlzdHJlYW0tPmJ1ZmZlciA9IHN1YjsKKwkJfQorCX0KKworCXJl
dHVybiB0b3RhbDsKK30KKworc3RhdGljIGdib29sZWFuCitzb3VwX2RpcmVjdG9yeV9pbnB1dF9z
dHJlYW1fY2xvc2UgKEdJbnB1dFN0cmVhbSAgKmlucHV0LAorCQkJCSAgIEdDYW5jZWxsYWJsZSAg
KmNhbmNlbGxhYmxlLAorCQkJCSAgIEdFcnJvciAgICAgICAqKmVycm9yKQoreworCVNvdXBEaXJl
Y3RvcnlJbnB1dFN0cmVhbSAqc3RyZWFtID0gU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNIChp
bnB1dCk7CisJZ2Jvb2xlYW4gcmVzdWx0OworCisJaWYgKHN0cmVhbS0+YnVmZmVyKSB7CisJCXNv
dXBfYnVmZmVyX2ZyZWUgKHN0cmVhbS0+YnVmZmVyKTsKKwkJc3RyZWFtLT5idWZmZXIgPSBOVUxM
OworCX0KKworCXJlc3VsdCA9IGdfZmlsZV9lbnVtZXJhdG9yX2Nsb3NlIChzdHJlYW0tPmVudW1l
cmF0b3IsCisJCQkJCSAgY2FuY2VsbGFibGUsCisJCQkJCSAgZXJyb3IpOworCWdfb2JqZWN0X3Vu
cmVmIChzdHJlYW0tPmVudW1lcmF0b3IpOworCXN0cmVhbS0+ZW51bWVyYXRvciA9IE5VTEw7CisK
KwlnX2ZyZWUgKHN0cmVhbS0+dXJpKTsKKwlzdHJlYW0tPnVyaSA9IE5VTEw7CisKKwlyZXR1cm4g
cmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX2Ns
YXNzX2luaXQgKFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbUNsYXNzICpzdHJlYW1fY2xhc3MpCit7
CisJR0lucHV0U3RyZWFtQ2xhc3MgKmlucHV0c3RyZWFtX2NsYXNzID0gR19JTlBVVF9TVFJFQU1f
Q0xBU1MgKHN0cmVhbV9jbGFzcyk7CisKKwlpbnB1dHN0cmVhbV9jbGFzcy0+cmVhZF9mbiA9IHNv
dXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9yZWFkOworCWlucHV0c3RyZWFtX2NsYXNzLT5jbG9z
ZV9mbiA9IHNvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9jbG9zZTsKK30KKworc3RhdGljIHZv
aWQKK3NvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9pbml0IChTb3VwRGlyZWN0b3J5SW5wdXRT
dHJlYW0gKnN0cmVhbSkKK3sKKwlzdHJlYW0tPmJ1ZmZlciA9IHNvdXBfYnVmZmVyX25ldyAoU09V
UF9NRU1PUllfU1RBVElDLAorCQkJCQkgIElOSVRfU1RSSU5HLAorCQkJCQkgIHNpemVvZiAoSU5J
VF9TVFJJTkcpKTsKK30KKworR0lucHV0U3RyZWFtICoKK3NvdXBfZGlyZWN0b3J5X2lucHV0X3N0
cmVhbV9uZXcgKEdGaWxlRW51bWVyYXRvciAqZW51bWVyYXRvciwKKwkJCQkgU291cFVSSSAgICAg
ICAgICp1cmkpCit7CisJR0lucHV0U3RyZWFtICpzdHJlYW07CisKKwlnX3JldHVybl92YWxfaWZf
ZmFpbCAoR19JU19GSUxFX0VOVU1FUkFUT1IgKGVudW1lcmF0b3IpLCBOVUxMKTsKKwlnX3JldHVy
bl92YWxfaWZfZmFpbCAodXJpICE9IE5VTEwsIE5VTEwpOworCisJc3RyZWFtID0gZ19vYmplY3Rf
bmV3IChTT1VQX1RZUEVfRElSRUNUT1JZX0lOUFVUX1NUUkVBTSwgTlVMTCk7CisKKwlTT1VQX0RJ
UkVDVE9SWV9JTlBVVF9TVFJFQU0gKHN0cmVhbSktPmVudW1lcmF0b3IgPSBnX29iamVjdF9yZWYg
KGVudW1lcmF0b3IpOworCVNPVVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTSAoc3RyZWFtKS0+dXJp
ID0gc291cF91cmlfdG9fc3RyaW5nICh1cmksIEZBTFNFKTsKKworCXJldHVybiBzdHJlYW07Cit9
CisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAt
ZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
Y2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNGQzMjNkMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5oCkBAIC0w
LDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUmVkIEhhdCwgSW5jLgorICog
Q29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFNPVVBfRElSRUNUT1JZX0lO
UFVUX1NUUkVBTV9ICisjZGVmaW5lIFNPVVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTV9IIDEKKwor
I2luY2x1ZGUgPGdpby9naW8uaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAtdHlwZXMuaD4KKyNp
bmNsdWRlIDxsaWJzb3VwL3NvdXAtbWVzc2FnZS1ib2R5Lmg+CisKK0dfQkVHSU5fREVDTFMKKwor
I2RlZmluZSBTT1VQX1RZUEVfRElSRUNUT1JZX0lOUFVUX1NUUkVBTSAgICAgICAgICAgIChzb3Vw
X2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fZ2V0X3R5cGUgKCkpCisjZGVmaW5lIFNPVVBfRElSRUNU
T1JZX0lOUFVUX1NUUkVBTShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9D
QVNUICgob2JqKSwgU09VUF9UWVBFX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0sIFNvdXBEaXJlY3Rv
cnlJbnB1dFN0cmVhbSkpCisjZGVmaW5lIFNPVVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTV9DTEFT
UyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBTT1VQX1RZUEVf
RElSRUNUT1JZX0lOUFVUX1NUUkVBTSwgU291cERpcmVjdG9yeUlucHV0U3RyZWFtQ2xhc3MpKQor
I2RlZmluZSBTT1VQX0lTX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0ob2JqKSAgICAgICAgIChHX1RZ
UEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIFNPVVBfVFlQRV9ESVJFQ1RPUllfSU5QVVRf
U1RSRUFNKSkKKyNkZWZpbmUgU09VUF9JU19ESVJFQ1RPUllfSU5QVVRfU1RSRUFNX0NMQVNTKGts
YXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChvYmopLCBTT1VQX1RZUEVfRElSRUNUT1JZ
X0lOUFVUX1NUUkVBTSkpCisjZGVmaW5lIFNPVVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTV9HRVRf
Q0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBTT1VQX1RZUEVf
RElSRUNUT1JZX0lOUFVUX1NUUkVBTSwgU291cERpcmVjdG9yeUlucHV0U3RyZWFtQ2xhc3MpKQor
Cit0eXBlZGVmIHN0cnVjdCBfU291cERpcmVjdG9yeUlucHV0U3RyZWFtIFNvdXBEaXJlY3RvcnlJ
bnB1dFN0cmVhbTsKK3R5cGVkZWYgc3RydWN0IF9Tb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW1DbGFz
cyBTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW1DbGFzczsKKworc3RydWN0IF9Tb3VwRGlyZWN0b3J5
SW5wdXRTdHJlYW0geworCUdJbnB1dFN0cmVhbSBwYXJlbnQ7CisKKwlHRmlsZUVudW1lcmF0b3Ig
KmVudW1lcmF0b3I7CisJY2hhciAqdXJpOworCVNvdXBCdWZmZXIgKmJ1ZmZlcjsKKwlnYm9vbGVh
biBkb25lOworfTsKKworc3RydWN0IF9Tb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW1DbGFzcyB7CisJ
R0lucHV0U3RyZWFtQ2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworR1R5cGUgICAgICAgICAgc291
cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX2dldF90eXBlICh2b2lkKTsKKworR0lucHV0U3RyZWFt
ICpzb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fbmV3IChHRmlsZUVudW1lcmF0b3IgKmVudW1l
cmF0b3IsCisJCQkJCSAgICAgICBTb3VwVVJJICAgICAgICAgKnVyaSk7CisKKworR19FTkRfREVD
TFMKKworI2VuZGlmIC8qIFNPVVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTV9IICovCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQt
c3RyZWFtLmMgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAt
aW5wdXQtc3RyZWFtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIyMTZi
NgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0uYwpAQCAtMCwwICsxLDkyMSBAQAorLyogc291cC1pbnB1
dC1zdHJlYW0uYywgYmFzZWQgb24gZ3NvY2tldGlucHV0c3RyZWFtLmMKKyAqCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYtMjAwNyBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdh
bGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsCisgKiBCb3N0
b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisKKyNp
bmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxnaW8vZ2lv
Lmg+CisKKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKworI2luY2x1ZGUgInNvdXAtaHR0cC1p
bnB1dC1zdHJlYW0uaCIKKworc3RhdGljIHZvaWQgc291cF9odHRwX2lucHV0X3N0cmVhbV9zZWVr
YWJsZV9pZmFjZV9pbml0IChHU2Vla2FibGVJZmFjZSAqc2Vla2FibGVfaWZhY2UpOworCitHX0RF
RklORV9UWVBFX1dJVEhfQ09ERSAoU291cEhUVFBJbnB1dFN0cmVhbSwgc291cF9odHRwX2lucHV0
X3N0cmVhbSwgR19UWVBFX0lOUFVUX1NUUkVBTSwKKwkJCSBHX0lNUExFTUVOVF9JTlRFUkZBQ0Ug
KEdfVFlQRV9TRUVLQUJMRSwKKwkJCQkJCXNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2Vla2FibGVf
aWZhY2VfaW5pdCkpCisKK3R5cGVkZWYgdm9pZCAoKlNvdXBIVFRQSW5wdXRTdHJlYW1DYWxsYmFj
aykoR0lucHV0U3RyZWFtICopOworCit0eXBlZGVmIHN0cnVjdCB7CisJU291cFNlc3Npb24gKnNl
c3Npb247CisJR01haW5Db250ZXh0ICphc3luY19jb250ZXh0OworCVNvdXBNZXNzYWdlICptc2c7
CisJZ2Jvb2xlYW4gZ290X2hlYWRlcnMsIGZpbmlzaGVkOworCWdvZmZzZXQgb2Zmc2V0OworCisJ
R0NhbmNlbGxhYmxlICpjYW5jZWxsYWJsZTsKKwlHU291cmNlICpjYW5jZWxfd2F0Y2g7CisJU291
cEhUVFBJbnB1dFN0cmVhbUNhbGxiYWNrIGdvdF9oZWFkZXJzX2NiOworCVNvdXBIVFRQSW5wdXRT
dHJlYW1DYWxsYmFjayBnb3RfY2h1bmtfY2I7CisJU291cEhUVFBJbnB1dFN0cmVhbUNhbGxiYWNr
IGZpbmlzaGVkX2NiOworCVNvdXBIVFRQSW5wdXRTdHJlYW1DYWxsYmFjayBjYW5jZWxsZWRfY2I7
CisKKwlndWNoYXIgKmxlZnRvdmVyX2J1ZmZlcjsKKwlnc2l6ZSBsZWZ0b3Zlcl9idWZzaXplLCBs
ZWZ0b3Zlcl9vZmZzZXQ7CisKKwlndWNoYXIgKmNhbGxlcl9idWZmZXI7CisJZ3NpemUgY2FsbGVy
X2J1ZnNpemUsIGNhbGxlcl9ucmVhZDsKKwlHQXN5bmNSZWFkeUNhbGxiYWNrIG91dHN0YW5kaW5n
X2NhbGxiYWNrOworCUdTaW1wbGVBc3luY1Jlc3VsdCAqcmVzdWx0OworfSBTb3VwSFRUUElucHV0
U3RyZWFtUHJpdmF0ZTsKKyNkZWZpbmUgU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFU
RShvKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFICgobyksIFNPVVBfVFlQRV9IVFRQX0lO
UFVUX1NUUkVBTSwgU291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUpKQorCisKK3N0YXRpYyBnc3Np
emUgICBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWQgKEdJbnB1dFN0cmVhbSAgICAgICAgICpz
dHJlYW0sCisJCQkJCSAgICAgdm9pZCAgICAgICAgICAgICAgICAgKmJ1ZmZlciwKKwkJCQkJICAg
ICBnc2l6ZSBjb3VudCwKKwkJCQkJICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFi
bGUsCisJCQkJCSAgICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKTsKK3N0YXRpYyBnYm9v
bGVhbiBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlIChHSW5wdXRTdHJlYW0gICAgICAgICAq
c3RyZWFtLAorCQkJCQkgICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJ
CQkJCSAgICAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcik7CitzdGF0aWMgdm9pZCAgICAg
c291cF9odHRwX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jIChHSW5wdXRTdHJlYW0gICAgICAgICAq
c3RyZWFtLAorCQkJCQkJICAgdm9pZCAgICAgICAgICAgICAgICAgKmJ1ZmZlciwKKwkJCQkJCSAg
IGdzaXplIGNvdW50LAorCQkJCQkJICAgaW50IGlvX3ByaW9yaXR5LAorCQkJCQkJICAgR0NhbmNl
bGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJCQkJICAgR0FzeW5jUmVhZHlDYWxsYmFj
ayBjYWxsYmFjaywKKwkJCQkJCSAgIGdwb2ludGVyIGRhdGEpOworc3RhdGljIGdzc2l6ZSAgIHNv
dXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVhZF9maW5pc2ggKEdJbnB1dFN0cmVhbSAgICAgICAgICpz
dHJlYW0sCisJCQkJCQkgICAgR0FzeW5jUmVzdWx0ICAgICAgICAgKnJlc3VsdCwKKwkJCQkJCSAg
ICBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpOworc3RhdGljIHZvaWQgICAgIHNvdXBfaHR0
cF9pbnB1dF9zdHJlYW1fY2xvc2VfYXN5bmMgKEdJbnB1dFN0cmVhbSAgICAgICAgICpzdHJlYW0s
CisJCQkJCQkgICAgaW50IGlvX3ByaW9yaXR5LAorCQkJCQkJICAgIEdDYW5jZWxsYWJsZSAgICAg
ICAgICpjYW5jZWxsYWJsZSwKKwkJCQkJCSAgICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNr
LAorCQkJCQkJICAgIGdwb2ludGVyIGRhdGEpOworc3RhdGljIGdib29sZWFuIHNvdXBfaHR0cF9p
bnB1dF9zdHJlYW1fY2xvc2VfZmluaXNoIChHSW5wdXRTdHJlYW0gICAgICAgICAqc3RyZWFtLAor
CQkJCQkJICAgICBHQXN5bmNSZXN1bHQgICAgICAgICAqcmVzdWx0LAorCQkJCQkJICAgICBHRXJy
b3IgICAgICAgICAgICAgICoqZXJyb3IpOworCitzdGF0aWMgZ29mZnNldCAgc291cF9odHRwX2lu
cHV0X3N0cmVhbV90ZWxsIChHU2Vla2FibGUgICAgICAgICAgICAqc2Vla2FibGUpOworCitzdGF0
aWMgZ2Jvb2xlYW4gc291cF9odHRwX2lucHV0X3N0cmVhbV9jYW5fc2VlayAoR1NlZWthYmxlICAg
ICAgICAgICAgKnNlZWthYmxlKTsKK3N0YXRpYyBnYm9vbGVhbiBzb3VwX2h0dHBfaW5wdXRfc3Ry
ZWFtX3NlZWsgKEdTZWVrYWJsZSAgICAgICAgICAgICpzZWVrYWJsZSwKKwkJCQkJICAgICBnb2Zm
c2V0IG9mZnNldCwKKwkJCQkJICAgICBHU2Vla1R5cGUgdHlwZSwKKwkJCQkJICAgICBHQ2FuY2Vs
bGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJCSAgICAgR0Vycm9yICAgICAgICAgICAg
ICAqKmVycm9yKTsKKworc3RhdGljIGdib29sZWFuIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2Fu
X3RydW5jYXRlIChHU2Vla2FibGUgICAgICAgICAgICAqc2Vla2FibGUpOworc3RhdGljIGdib29s
ZWFuIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fdHJ1bmNhdGUgKEdTZWVrYWJsZSAgICAgICAgICAg
ICpzZWVrYWJsZSwKKwkJCQkJCSBnb2Zmc2V0IG9mZnNldCwKKwkJCQkJCSBHQ2FuY2VsbGFibGUg
ICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJCQkgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9y
KTsKKworc3RhdGljIHZvaWQgc291cF9odHRwX2lucHV0X3N0cmVhbV9nb3RfaGVhZGVycyAoU291
cE1lc3NhZ2UgKm1zZywgZ3BvaW50ZXIgc3RyZWFtKTsKK3N0YXRpYyB2b2lkIHNvdXBfaHR0cF9p
bnB1dF9zdHJlYW1fZ290X2NodW5rIChTb3VwTWVzc2FnZSAqbXNnLCBTb3VwQnVmZmVyICpjaHVu
aywgZ3BvaW50ZXIgc3RyZWFtKTsKK3N0YXRpYyB2b2lkIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1f
ZmluaXNoZWQgKFNvdXBNZXNzYWdlICptc2csIGdwb2ludGVyIHN0cmVhbSk7CisKK3N0YXRpYyB2
b2lkCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2ZpbmFsaXplIChHT2JqZWN0ICpvYmplY3QpCit7
CisJU291cEhUVFBJbnB1dFN0cmVhbSAqc3RyZWFtID0gU09VUF9IVFRQX0lOUFVUX1NUUkVBTSAo
b2JqZWN0KTsKKwlTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFNPVVBfSFRUUF9J
TlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7CisKKwlnX29iamVjdF91bnJlZiAocHJp
di0+c2Vzc2lvbik7CisKKwlnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMgKHBy
aXYtPm1zZywgR19DQUxMQkFDSyAoc291cF9odHRwX2lucHV0X3N0cmVhbV9nb3RfaGVhZGVycyks
IHN0cmVhbSk7CisJZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jIChwcml2LT5t
c2csIEdfQ0FMTEJBQ0sgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ290X2NodW5rKSwgc3RyZWFt
KTsKKwlnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMgKHByaXYtPm1zZywgR19D
QUxMQkFDSyAoc291cF9odHRwX2lucHV0X3N0cmVhbV9maW5pc2hlZCksIHN0cmVhbSk7CisJZ19v
YmplY3RfdW5yZWYgKHByaXYtPm1zZyk7CisJZ19mcmVlIChwcml2LT5sZWZ0b3Zlcl9idWZmZXIp
OworCisJaWYgKEdfT0JKRUNUX0NMQVNTIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3BhcmVudF9j
bGFzcyktPmZpbmFsaXplKQorCQkoKkdfT0JKRUNUX0NMQVNTIChzb3VwX2h0dHBfaW5wdXRfc3Ry
ZWFtX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZAor
c291cF9odHRwX2lucHV0X3N0cmVhbV9jbGFzc19pbml0IChTb3VwSFRUUElucHV0U3RyZWFtQ2xh
c3MgKmtsYXNzKQoreworCUdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NM
QVNTIChrbGFzcyk7CisJR0lucHV0U3RyZWFtQ2xhc3MgKnN0cmVhbV9jbGFzcyA9IEdfSU5QVVRf
U1RSRUFNX0NMQVNTIChrbGFzcyk7CisKKwlnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUgKGtsYXNz
LCBzaXplb2YgKFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlKSk7CisKKwlnb2JqZWN0X2NsYXNz
LT5maW5hbGl6ZSA9IHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZmluYWxpemU7CisKKwlzdHJlYW1f
Y2xhc3MtPnJlYWRfZm4gPSBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWQ7CisJc3RyZWFtX2Ns
YXNzLT5jbG9zZV9mbiA9IHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2U7CisJc3RyZWFtX2Ns
YXNzLT5yZWFkX2FzeW5jID0gc291cF9odHRwX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jOworCXN0
cmVhbV9jbGFzcy0+cmVhZF9maW5pc2ggPSBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWRfZmlu
aXNoOworCXN0cmVhbV9jbGFzcy0+Y2xvc2VfYXN5bmMgPSBzb3VwX2h0dHBfaW5wdXRfc3RyZWFt
X2Nsb3NlX2FzeW5jOworCXN0cmVhbV9jbGFzcy0+Y2xvc2VfZmluaXNoID0gc291cF9odHRwX2lu
cHV0X3N0cmVhbV9jbG9zZV9maW5pc2g7Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX2h0dHBfaW5w
dXRfc3RyZWFtX3NlZWthYmxlX2lmYWNlX2luaXQgKEdTZWVrYWJsZUlmYWNlICpzZWVrYWJsZV9p
ZmFjZSkKK3sKKwlzZWVrYWJsZV9pZmFjZS0+dGVsbCA9IHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1f
dGVsbDsKKwlzZWVrYWJsZV9pZmFjZS0+Y2FuX3NlZWsgPSBzb3VwX2h0dHBfaW5wdXRfc3RyZWFt
X2Nhbl9zZWVrOworCXNlZWthYmxlX2lmYWNlLT5zZWVrID0gc291cF9odHRwX2lucHV0X3N0cmVh
bV9zZWVrOworCXNlZWthYmxlX2lmYWNlLT5jYW5fdHJ1bmNhdGUgPSBzb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX2Nhbl90cnVuY2F0ZTsKKwlzZWVrYWJsZV9pZmFjZS0+dHJ1bmNhdGVfZm4gPSBzb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX3RydW5jYXRlOworfQorCitzdGF0aWMgdm9pZAorc291cF9odHRw
X2lucHV0X3N0cmVhbV9pbml0IChTb3VwSFRUUElucHV0U3RyZWFtICpzdHJlYW0pCit7CisJOwor
fQorCitzdGF0aWMgdm9pZAorc291cF9odHRwX2lucHV0X3N0cmVhbV9xdWV1ZV9tZXNzYWdlIChT
b3VwSFRUUElucHV0U3RyZWFtICpzdHJlYW0pCit7CisJU291cEhUVFBJbnB1dFN0cmVhbVByaXZh
dGUgKnByaXYgPSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOwor
CisJcHJpdi0+Z290X2hlYWRlcnMgPSBwcml2LT5maW5pc2hlZCA9IEZBTFNFOworCisJLyogQWRk
IGFuIGV4dHJhIHJlZiBzaW5jZSBzb3VwX3Nlc3Npb25fcXVldWVfbWVzc2FnZSBzdGVhbHMgb25l
ICovCisJZ19vYmplY3RfcmVmIChwcml2LT5tc2cpOworCXNvdXBfc2Vzc2lvbl9xdWV1ZV9tZXNz
YWdlIChwcml2LT5zZXNzaW9uLCBwcml2LT5tc2csIE5VTEwsIE5VTEwpOworfQorCisvKioKKyAq
IHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fbmV3OgorICogQHNlc3Npb246IHRoZSAjU291cFNlc3Np
b24gdG8gdXNlCisgKiBAbXNnOiB0aGUgI1NvdXBNZXNzYWdlIHdob3NlIHJlc3BvbnNlIHdpbGwg
YmUgc3RyZWFtZWQKKyAqCisgKiBQcmVwYXJlcyB0byBzZW5kIEBtc2cgb3ZlciBAc2Vzc2lvbiwg
YW5kIHJldHVybnMgYSAjR0lucHV0U3RyZWFtCisgKiB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlYWQg
dGhlIHJlc3BvbnNlLgorICoKKyAqIEBtc2cgbWF5IG5vdCBiZSBzZW50IHVudGlsIHRoZSBmaXJz
dCByZWFkIGNhbGw7IGlmIHlvdSBuZWVkIHRvIGxvb2sKKyAqIGF0IHRoZSBzdGF0dXMgY29kZSBv
ciByZXNwb25zZSBoZWFkZXJzIGJlZm9yZSByZWFkaW5nIHRoZSBib2R5LCB5b3UKKyAqIGNhbiB1
c2Ugc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kKCkgb3Igc291cF9odHRwX2lucHV0X3N0cmVh
bV9zZW5kX2FzeW5jKCkKKyAqIHRvIGZvcmNlIHRoZSBtZXNzYWdlIHRvIGJlIHNlbnQgYW5kIHRo
ZSByZXNwb25zZSBoZWFkZXJzIHJlYWQuCisgKgorICogSWYgQG1zZyBnZXRzIGEgbm9uLTJ4eCBy
ZXN1bHQsIHRoZSBmaXJzdCByZWFkIChvciBzZW5kKSB3aWxsIHJldHVybgorICogYW4gZXJyb3Ig
d2l0aCB0eXBlICVTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0hUVFBfRVJST1IuCisgKgorICogSW50
ZXJuYWxseSwgI1NvdXBIVFRQSW5wdXRTdHJlYW0gaXMgaW1wbGVtZW50ZWQgdXNpbmcgYXN5bmNo
cm9ub3VzIEkvTywKKyAqIHNvIGlmIHlvdSBhcmUgdXNpbmcgdGhlIHN5bmNocm9ub3VzIEFQSSAo
ZWcsCisgKiBnX2lucHV0X3N0cmVhbV9yZWFkKCkpLCB5b3Ugc2hvdWxkIGNyZWF0ZSBhIG5ldyAj
R01haW5Db250ZXh0IGFuZAorICogc2V0IGl0IGFzIHRoZSAlU09VUF9TRVNTSU9OX0FTWU5DX0NP
TlRFWFQgcHJvcGVydHkgb24gQHNlc3Npb24uIChJZgorICogeW91IGRvbid0LCB0aGVuIHN5bmNo
cm9ub3VzICNHSW5wdXRTdHJlYW0gY2FsbHMgd2lsbCBjYXVzZSB0aGUgbWFpbgorICogbG9vcCB0
byBiZSBydW4gcmVjdXJzaXZlbHkuKSBUaGUgYXN5bmMgI0dJbnB1dFN0cmVhbSBBUEkgd29ya3Mg
ZmluZQorICogd2l0aCAlU09VUF9TRVNTSU9OX0FTWU5DX0NPTlRFWFQgZWl0aGVyIHNldCBvciB1
bnNldC4KKyAqCisgKiBSZXR1cm5zOiBhIG5ldyAjR0lucHV0U3RyZWFtLgorICoqLworU291cEhU
VFBJbnB1dFN0cmVhbSAqCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX25ldyAoU291cFNlc3Npb24g
KnNlc3Npb24sIFNvdXBNZXNzYWdlICptc2cpCit7CisJU291cEhUVFBJbnB1dFN0cmVhbSAqc3Ry
ZWFtOworCVNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2OworCisJZ19yZXR1cm5fdmFs
X2lmX2ZhaWwgKFNPVVBfSVNfTUVTU0FHRSAobXNnKSwgTlVMTCk7CisKKwlzdHJlYW0gPSBnX29i
amVjdF9uZXcgKFNPVVBfVFlQRV9IVFRQX0lOUFVUX1NUUkVBTSwgTlVMTCk7CisJcHJpdiA9IFNP
VVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7CisKKwlwcml2LT5zZXNz
aW9uID0gZ19vYmplY3RfcmVmIChzZXNzaW9uKTsKKwlwcml2LT5hc3luY19jb250ZXh0ID0gc291
cF9zZXNzaW9uX2dldF9hc3luY19jb250ZXh0IChzZXNzaW9uKTsKKwlwcml2LT5tc2cgPSBnX29i
amVjdF9yZWYgKG1zZyk7CisKKwlnX3NpZ25hbF9jb25uZWN0IChtc2csICJnb3RfaGVhZGVycyIs
CisJCQkgIEdfQ0FMTEJBQ0sgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ290X2hlYWRlcnMpLCBz
dHJlYW0pOworCWdfc2lnbmFsX2Nvbm5lY3QgKG1zZywgImdvdF9jaHVuayIsCisJCQkgIEdfQ0FM
TEJBQ0sgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ290X2NodW5rKSwgc3RyZWFtKTsKKwlnX3Np
Z25hbF9jb25uZWN0IChtc2csICJmaW5pc2hlZCIsCisJCQkgIEdfQ0FMTEJBQ0sgKHNvdXBfaHR0
cF9pbnB1dF9zdHJlYW1fZmluaXNoZWQpLCBzdHJlYW0pOworCisJc291cF9odHRwX2lucHV0X3N0
cmVhbV9xdWV1ZV9tZXNzYWdlIChzdHJlYW0pOworCXJldHVybiBzdHJlYW07Cit9CisKK3N0YXRp
YyB2b2lkCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dvdF9oZWFkZXJzIChTb3VwTWVzc2FnZSAq
bXNnLCBncG9pbnRlciBzdHJlYW0pCit7CisJU291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnBy
aXYgPSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOworCisJLyog
SWYgdGhlIHN0YXR1cyBpcyB1bnN1Y2Nlc3NmdWwsIHdlIGp1c3QgaWdub3JlIHRoZSBzaWduYWwg
YW5kIGxldAorCSAqIGxpYnNvdXAga2VlcCBnb2luZyAoZXZlbnR1YWxseSBlaXRoZXIgaXQgd2ls
bCByZXF1ZXVlIHRoZSByZXF1ZXN0CisJICogKGFmdGVyIGhhbmRsaW5nIGF1dGhlbnRpY2F0aW9u
L3JlZGlyZWN0aW9uKSwgb3IgZWxzZSB0aGUKKwkgKiAiZmluaXNoZWQiIGhhbmRsZXIgd2lsbCBy
dW4pLgorCSAqLworCWlmICghU09VUF9TVEFUVVNfSVNfU1VDQ0VTU0ZVTCAobXNnLT5zdGF0dXNf
Y29kZSkpCisJCXJldHVybjsKKworCXByaXYtPmdvdF9oZWFkZXJzID0gVFJVRTsKKwlpZiAoIXBy
aXYtPmNhbGxlcl9idWZmZXIpIHsKKwkJLyogTm90IHJlYWR5IHRvIHJlYWQgdGhlIGJvZHkgeWV0
ICovCisJCXNvdXBfc2Vzc2lvbl9wYXVzZV9tZXNzYWdlIChwcml2LT5zZXNzaW9uLCBtc2cpOwor
CX0KKworCWlmIChwcml2LT5nb3RfaGVhZGVyc19jYikKKwkJcHJpdi0+Z290X2hlYWRlcnNfY2Ig
KHN0cmVhbSk7Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dvdF9j
aHVuayAoU291cE1lc3NhZ2UgKm1zZywgU291cEJ1ZmZlciAqY2h1bmtfYnVmZmVyLAorCQkJCSAg
Z3BvaW50ZXIgc3RyZWFtKQoreworCVNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0g
U09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKwljb25zdCBnY2hh
ciAqY2h1bmsgPSBjaHVua19idWZmZXItPmRhdGE7CisJZ3NpemUgY2h1bmtfc2l6ZSA9IGNodW5r
X2J1ZmZlci0+bGVuZ3RoOworCisJLyogV2Ugb25seSBwYXkgYXR0ZW50aW9uIHRvIHRoZSBjaHVu
ayBpZiBpdCdzIHBhcnQgb2YgYSBzdWNjZXNzZnVsCisJICogcmVzcG9uc2UuCisJICovCisJaWYg
KCFTT1VQX1NUQVRVU19JU19TVUNDRVNTRlVMIChtc2ctPnN0YXR1c19jb2RlKSkKKwkJcmV0dXJu
OworCisJLyogU2FuaXR5IGNoZWNrICovCisJaWYgKHByaXYtPmNhbGxlcl9idWZzaXplID09IDAg
fHwgcHJpdi0+bGVmdG92ZXJfYnVmc2l6ZSAhPSAwKQorCQlnX3dhcm5pbmcgKCJzb3VwX2h0dHBf
aW5wdXRfc3RyZWFtX2dvdF9jaHVuayBjYWxsZWQgYWdhaW4gYmVmb3JlIHByZXZpb3VzIGNodW5r
IHdhcyBwcm9jZXNzZWQiKTsKKworCS8qIENvcHkgd2hhdCB3ZSBjYW4gaW50byBwcml2LT5jYWxs
ZXJfYnVmZmVyICovCisJaWYgKHByaXYtPmNhbGxlcl9idWZzaXplIC0gcHJpdi0+Y2FsbGVyX25y
ZWFkID4gMCkgeworCQlnc2l6ZSBucmVhZCA9IE1JTiAoY2h1bmtfc2l6ZSwgcHJpdi0+Y2FsbGVy
X2J1ZnNpemUgLSBwcml2LT5jYWxsZXJfbnJlYWQpOworCisJCW1lbWNweSAocHJpdi0+Y2FsbGVy
X2J1ZmZlciArIHByaXYtPmNhbGxlcl9ucmVhZCwgY2h1bmssIG5yZWFkKTsKKwkJcHJpdi0+Y2Fs
bGVyX25yZWFkICs9IG5yZWFkOworCQlwcml2LT5vZmZzZXQgKz0gbnJlYWQ7CisJCWNodW5rICs9
IG5yZWFkOworCQljaHVua19zaXplIC09IG5yZWFkOworCX0KKworCWlmIChjaHVua19zaXplID4g
MCkgeworCQkvKiBDb3B5IHRoZSByZXN0IGludG8gcHJpdi0+bGVmdG92ZXJfYnVmZmVyLiBJZgor
CQkgKiB0aGVyZSdzIGFscmVhZHkgc29tZSBkYXRhIHRoZXJlLCByZWFsbG9jIGFuZAorCQkgKiBh
cHBlbmQuIE90aGVyd2lzZSBqdXN0IGNvcHkuCisJCSAqLworCQlpZiAocHJpdi0+bGVmdG92ZXJf
YnVmc2l6ZSkgeworCQkJcHJpdi0+bGVmdG92ZXJfYnVmZmVyID0gZ19yZWFsbG9jIChwcml2LT5s
ZWZ0b3Zlcl9idWZmZXIsCisJCQkJCQkJICAgcHJpdi0+bGVmdG92ZXJfYnVmc2l6ZSArIGNodW5r
X3NpemUpOworCQkJbWVtY3B5IChwcml2LT5sZWZ0b3Zlcl9idWZmZXIgKyBwcml2LT5sZWZ0b3Zl
cl9idWZzaXplLAorCQkJCWNodW5rLCBjaHVua19zaXplKTsKKwkJCXByaXYtPmxlZnRvdmVyX2J1
ZnNpemUgKz0gY2h1bmtfc2l6ZTsKKwkJfSBlbHNlIHsKKwkJCXByaXYtPmxlZnRvdmVyX2J1ZnNp
emUgPSBjaHVua19zaXplOworCQkJcHJpdi0+bGVmdG92ZXJfYnVmZmVyID0gZ19tZW1kdXAgKGNo
dW5rLCBjaHVua19zaXplKTsKKwkJCXByaXYtPmxlZnRvdmVyX29mZnNldCA9IDA7CisJCX0KKwl9
CisKKwlzb3VwX3Nlc3Npb25fcGF1c2VfbWVzc2FnZSAocHJpdi0+c2Vzc2lvbiwgbXNnKTsKKwlp
ZiAocHJpdi0+Z290X2NodW5rX2NiKQorCQlwcml2LT5nb3RfY2h1bmtfY2IgKHN0cmVhbSk7Cit9
CisKK3N0YXRpYyB2b2lkCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2ZpbmlzaGVkIChTb3VwTWVz
c2FnZSAqbXNnLCBncG9pbnRlciBzdHJlYW0pCit7CisJU291cEhUVFBJbnB1dFN0cmVhbVByaXZh
dGUgKnByaXYgPSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOwor
CisJcHJpdi0+ZmluaXNoZWQgPSBUUlVFOworCisJaWYgKHByaXYtPmZpbmlzaGVkX2NiKQorCQlw
cml2LT5maW5pc2hlZF9jYiAoc3RyZWFtKTsKK30KKworc3RhdGljIGdib29sZWFuCitzb3VwX2h0
dHBfaW5wdXRfc3RyZWFtX2NhbmNlbGxlZCAoR0lPQ2hhbm5lbCAqY2hhbiwgR0lPQ29uZGl0aW9u
IGNvbmRpdGlvbiwKKwkJCQkgIGdwb2ludGVyIHN0cmVhbSkKK3sKKwlTb3VwSFRUUElucHV0U3Ry
ZWFtUHJpdmF0ZSAqcHJpdiA9IFNPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0
cmVhbSk7CisKKwlwcml2LT5jYW5jZWxfd2F0Y2ggPSBOVUxMOworCisJc291cF9zZXNzaW9uX3Bh
dXNlX21lc3NhZ2UgKHByaXYtPnNlc3Npb24sIHByaXYtPm1zZyk7CisJaWYgKHByaXYtPmNhbmNl
bGxlZF9jYikKKwkJcHJpdi0+Y2FuY2VsbGVkX2NiIChzdHJlYW0pOworCisJcmV0dXJuIEZBTFNF
OworfQorCitzdGF0aWMgdm9pZAorc291cF9odHRwX2lucHV0X3N0cmVhbV9wcmVwYXJlX2Zvcl9p
byAoR0lucHV0U3RyZWFtICpzdHJlYW0sCisJCQkJICAgICAgIEdDYW5jZWxsYWJsZSAqY2FuY2Vs
bGFibGUsCisJCQkJICAgICAgIGd1Y2hhciAgICAgICAqYnVmZmVyLAorCQkJCSAgICAgICBnc2l6
ZSBjb3VudCkKK3sKKwlTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFNPVVBfSFRU
UF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7CisJaW50IGNhbmNlbF9mZDsKKwor
CXByaXYtPmNhbmNlbGxhYmxlID0gY2FuY2VsbGFibGU7CisJY2FuY2VsX2ZkID0gZ19jYW5jZWxs
YWJsZV9nZXRfZmQgKGNhbmNlbGxhYmxlKTsKKwlpZiAoY2FuY2VsX2ZkICE9IC0xKSB7CisJCUdJ
T0NoYW5uZWwgKmNoYW4gPSBnX2lvX2NoYW5uZWxfdW5peF9uZXcgKGNhbmNlbF9mZCk7CisJCXBy
aXYtPmNhbmNlbF93YXRjaCA9IHNvdXBfYWRkX2lvX3dhdGNoIChwcml2LT5hc3luY19jb250ZXh0
LCBjaGFuLAorCQkJCQkJCUdfSU9fSU4gfCBHX0lPX0VSUiB8IEdfSU9fSFVQLAorCQkJCQkJCXNv
dXBfaHR0cF9pbnB1dF9zdHJlYW1fY2FuY2VsbGVkLAorCQkJCQkJCXN0cmVhbSk7CisJCWdfaW9f
Y2hhbm5lbF91bnJlZiAoY2hhbik7CisJfQorCisJcHJpdi0+Y2FsbGVyX2J1ZmZlciA9IGJ1ZmZl
cjsKKwlwcml2LT5jYWxsZXJfYnVmc2l6ZSA9IGNvdW50OworCXByaXYtPmNhbGxlcl9ucmVhZCA9
IDA7CisKKwlpZiAocHJpdi0+Z290X2hlYWRlcnMpCisJCXNvdXBfc2Vzc2lvbl91bnBhdXNlX21l
c3NhZ2UgKHByaXYtPnNlc3Npb24sIHByaXYtPm1zZyk7Cit9CisKK3N0YXRpYyB2b2lkCitzb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX2RvbmVfaW8gKEdJbnB1dFN0cmVhbSAqc3RyZWFtKQoreworCVNv
dXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9H
RVRfUFJJVkFURSAoc3RyZWFtKTsKKworCWlmIChwcml2LT5jYW5jZWxfd2F0Y2gpIHsKKwkJZ19z
b3VyY2VfZGVzdHJveSAocHJpdi0+Y2FuY2VsX3dhdGNoKTsKKwkJcHJpdi0+Y2FuY2VsX3dhdGNo
ID0gTlVMTDsKKwkJZ19jYW5jZWxsYWJsZV9yZWxlYXNlX2ZkIChwcml2LT5jYW5jZWxsYWJsZSk7
CisJfQorCXByaXYtPmNhbmNlbGxhYmxlID0gTlVMTDsKKworCXByaXYtPmNhbGxlcl9idWZmZXIg
PSBOVUxMOworCXByaXYtPmNhbGxlcl9idWZzaXplID0gMDsKK30KKworc3RhdGljIGdib29sZWFu
CitzZXRfZXJyb3JfaWZfaHR0cF9mYWlsZWQgKFNvdXBNZXNzYWdlICptc2csIEdFcnJvciAqKmVy
cm9yKQoreworCWlmICghU09VUF9TVEFUVVNfSVNfU1VDQ0VTU0ZVTCAobXNnLT5zdGF0dXNfY29k
ZSkpIHsKKwkJZ19zZXRfZXJyb3JfbGl0ZXJhbCAoZXJyb3IsIFNPVVBfSFRUUF9FUlJPUiwKKwkJ
CQkgICAgIG1zZy0+c3RhdHVzX2NvZGUsIG1zZy0+cmVhc29uX3BocmFzZSk7CisJCXJldHVybiBU
UlVFOworCX0KKwlyZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBnc2l6ZQorcmVhZF9mcm9tX2xl
ZnRvdmVyIChTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiwKKwkJICAgIGdwb2ludGVy
IGJ1ZmZlciwgZ3NpemUgYnVmc2l6ZSkKK3sKKwlnc2l6ZSBucmVhZDsKKworCWlmIChwcml2LT5s
ZWZ0b3Zlcl9idWZzaXplIC0gcHJpdi0+bGVmdG92ZXJfb2Zmc2V0IDw9IGJ1ZnNpemUpIHsKKwkJ
bnJlYWQgPSBwcml2LT5sZWZ0b3Zlcl9idWZzaXplIC0gcHJpdi0+bGVmdG92ZXJfb2Zmc2V0Owor
CQltZW1jcHkgKGJ1ZmZlciwgcHJpdi0+bGVmdG92ZXJfYnVmZmVyICsgcHJpdi0+bGVmdG92ZXJf
b2Zmc2V0LCBucmVhZCk7CisKKwkJZ19mcmVlIChwcml2LT5sZWZ0b3Zlcl9idWZmZXIpOworCQlw
cml2LT5sZWZ0b3Zlcl9idWZmZXIgPSBOVUxMOworCQlwcml2LT5sZWZ0b3Zlcl9idWZzaXplID0g
cHJpdi0+bGVmdG92ZXJfb2Zmc2V0ID0gMDsKKwl9IGVsc2UgeworCQlucmVhZCA9IGJ1ZnNpemU7
CisJCW1lbWNweSAoYnVmZmVyLCBwcml2LT5sZWZ0b3Zlcl9idWZmZXIgKyBwcml2LT5sZWZ0b3Zl
cl9vZmZzZXQsIG5yZWFkKTsKKwkJcHJpdi0+bGVmdG92ZXJfb2Zmc2V0ICs9IG5yZWFkOworCX0K
KworCXByaXYtPm9mZnNldCArPSBucmVhZDsKKwlyZXR1cm4gbnJlYWQ7Cit9CisKKy8qIFRoaXMg
ZG9lcyB0aGUgd29yayBvZiBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmQoKSwgYXNzdW1pbmcg
dGhhdCB0aGUKKyAqIEdJbnB1dFN0cmVhbSBwZW5kaW5nIGZsYWcgaGFzIGFscmVhZHkgYmVlbiBz
ZXQuIEl0IGlzIGFsc28gdXNlZCBieQorICogc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2Fz
eW5jKCkgaW4gc29tZSBjaXJjdW1zdGFuY2VzLgorICovCitzdGF0aWMgZ2Jvb2xlYW4KK3NvdXBf
aHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9pbnRlcm5hbCAoR0lucHV0U3RyZWFtICAqc3RyZWFtLAor
CQkJCSAgICAgIEdDYW5jZWxsYWJsZSAgKmNhbmNlbGxhYmxlLAorCQkJCSAgICAgIEdFcnJvciAg
ICAgICAqKmVycm9yKQoreworCVNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gU09V
UF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKworCXNvdXBfaHR0cF9p
bnB1dF9zdHJlYW1fcHJlcGFyZV9mb3JfaW8gKHN0cmVhbSwgY2FuY2VsbGFibGUsIE5VTEwsIDAp
OworCXdoaWxlICghcHJpdi0+ZmluaXNoZWQgJiYgIXByaXYtPmdvdF9oZWFkZXJzICYmCisJICAg
ICAgICFnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxlZCAoY2FuY2VsbGFibGUpKQorCQlnX21haW5f
Y29udGV4dF9pdGVyYXRpb24gKHByaXYtPmFzeW5jX2NvbnRleHQsIFRSVUUpOworCXNvdXBfaHR0
cF9pbnB1dF9zdHJlYW1fZG9uZV9pbyAoc3RyZWFtKTsKKworCWlmIChnX2NhbmNlbGxhYmxlX3Nl
dF9lcnJvcl9pZl9jYW5jZWxsZWQgKGNhbmNlbGxhYmxlLCBlcnJvcikpCisJCXJldHVybiBGQUxT
RTsKKwllbHNlIGlmIChzZXRfZXJyb3JfaWZfaHR0cF9mYWlsZWQgKHByaXYtPm1zZywgZXJyb3Ip
KQorCQlyZXR1cm4gRkFMU0U7CisJcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkCitzZW5k
X3N5bmNfZmluaXNoZWQgKEdJbnB1dFN0cmVhbSAqc3RyZWFtKQoreworCVNvdXBIVFRQSW5wdXRT
dHJlYW1Qcml2YXRlICpwcml2ID0gU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAo
c3RyZWFtKTsKKwlHRXJyb3IgKmVycm9yID0gTlVMTDsKKworCWlmICghZ19jYW5jZWxsYWJsZV9z
ZXRfZXJyb3JfaWZfY2FuY2VsbGVkIChwcml2LT5jYW5jZWxsYWJsZSwgJmVycm9yKSkKKwkJc2V0
X2Vycm9yX2lmX2h0dHBfZmFpbGVkIChwcml2LT5tc2csICZlcnJvcik7CisKKwlwcml2LT5nb3Rf
aGVhZGVyc19jYiA9IE5VTEw7CisJcHJpdi0+ZmluaXNoZWRfY2IgPSBOVUxMOworCisJLyogV2Fr
ZSB1cCB0aGUgbWFpbiBjb250ZXh0IGl0ZXJhdGlvbiAqLworCWdfc291cmNlX2F0dGFjaCAoZ19p
ZGxlX3NvdXJjZV9uZXcgKCksIE5VTEwpOworfQorCisvKioKKyAqIHNvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fc2VuZDoKKyAqIEBodHRwc3RyZWFtOiBhICNTb3VwSFRUUElucHV0U3RyZWFtCisgKiBA
Y2FuY2VsbGFibGU6IG9wdGlvbmFsICNHQ2FuY2VsbGFibGUgb2JqZWN0LCAlTlVMTCB0byBpZ25v
cmUuCisgKiBAZXJyb3I6IGxvY2F0aW9uIHRvIHN0b3JlIHRoZSBlcnJvciBvY2N1cmluZywgb3Ig
JU5VTEwgdG8gaWdub3JlCisgKgorICogU3luY2hyb25vdXNseSBzZW5kcyB0aGUgSFRUUCByZXF1
ZXN0IGFzc29jaWF0ZWQgd2l0aCBAc3RyZWFtLCBhbmQKKyAqIHJlYWRzIHRoZSByZXNwb25zZSBo
ZWFkZXJzLiBDYWxsIHRoaXMgYWZ0ZXIgc291cF9odHRwX2lucHV0X3N0cmVhbV9uZXcoKQorICog
YW5kIGJlZm9yZSB0aGUgZmlyc3QgZ19pbnB1dF9zdHJlYW1fcmVhZCgpIGlmIHlvdSB3YW50IHRv
IGNoZWNrIHRoZQorICogSFRUUCBzdGF0dXMgY29kZSBiZWZvcmUgeW91IHN0YXJ0IHJlYWRpbmcu
CisgKgorICogUmV0dXJuIHZhbHVlOiAlVFJVRSBpZiBtc2cgaGFzIGEgc3VjY2Vzc2Z1bCAoMnh4
KSBzdGF0dXMsICVGQUxTRSBpZgorICogbm90LgorICoqLworZ2Jvb2xlYW4KK3NvdXBfaHR0cF9p
bnB1dF9zdHJlYW1fc2VuZCAoU291cEhUVFBJbnB1dFN0cmVhbSAgKmh0dHBzdHJlYW0sCisJCQkg
ICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCSAgICAgR0Vycm9yICAg
ICAgICAgICAgICAqKmVycm9yKQoreworCVNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2
ID0gU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoaHR0cHN0cmVhbSk7CisJR0lu
cHV0U3RyZWFtICppc3RyZWFtID0gKEdJbnB1dFN0cmVhbSAqKWh0dHBzdHJlYW07CisJZ2Jvb2xl
YW4gcmVzdWx0OworCisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFNPVVBfSVNfSFRUUF9JTlBVVF9T
VFJFQU0gKGh0dHBzdHJlYW0pLCBGQUxTRSk7CisKKwlpZiAoIWdfaW5wdXRfc3RyZWFtX3NldF9w
ZW5kaW5nIChpc3RyZWFtLCBlcnJvcikpCisJCXJldHVybiBGQUxTRTsKKworCXByaXYtPmdvdF9o
ZWFkZXJzX2NiID0gc2VuZF9zeW5jX2ZpbmlzaGVkOworCXByaXYtPmZpbmlzaGVkX2NiID0gc2Vu
ZF9zeW5jX2ZpbmlzaGVkOworCisJcmVzdWx0ID0gc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5k
X2ludGVybmFsIChpc3RyZWFtLCBjYW5jZWxsYWJsZSwgZXJyb3IpOworCWdfaW5wdXRfc3RyZWFt
X2NsZWFyX3BlbmRpbmcgKGlzdHJlYW0pOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGlj
IGdzc2l6ZQorc291cF9odHRwX2lucHV0X3N0cmVhbV9yZWFkIChHSW5wdXRTdHJlYW0gKnN0cmVh
bSwKKwkJCSAgICAgdm9pZCAgICAgICAgICpidWZmZXIsCisJCQkgICAgIGdzaXplIGNvdW50LAor
CQkJICAgICBHQ2FuY2VsbGFibGUgKmNhbmNlbGxhYmxlLAorCQkJICAgICBHRXJyb3IgICAgICAq
KmVycm9yKQoreworCVNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gU09VUF9IVFRQ
X0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKworCWlmIChwcml2LT5maW5pc2hl
ZCkKKwkJcmV0dXJuIDA7CisKKwkvKiBJZiB0aGVyZSBpcyBkYXRhIGxlZnRvdmVyIGZyb20gYSBw
cmV2aW91cyByZWFkLCByZXR1cm4gaXQuICovCisJaWYgKHByaXYtPmxlZnRvdmVyX2J1ZnNpemUp
CisJCXJldHVybiByZWFkX2Zyb21fbGVmdG92ZXIgKHByaXYsIGJ1ZmZlciwgY291bnQpOworCisJ
LyogTm8gbGVmdG92ZXIgZGF0YSwgYWNjZXB0IG9uZSBjaHVuayBmcm9tIHRoZSBuZXR3b3JrICov
CisJc291cF9odHRwX2lucHV0X3N0cmVhbV9wcmVwYXJlX2Zvcl9pbyAoc3RyZWFtLCBjYW5jZWxs
YWJsZSwgYnVmZmVyLCBjb3VudCk7CisJd2hpbGUgKCFwcml2LT5maW5pc2hlZCAmJiBwcml2LT5j
YWxsZXJfbnJlYWQgPT0gMCAmJgorCSAgICAgICAhZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQg
KGNhbmNlbGxhYmxlKSkKKwkJZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uIChwcml2LT5hc3luY19j
b250ZXh0LCBUUlVFKTsKKwlzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2RvbmVfaW8gKHN0cmVhbSk7
CisKKwlpZiAocHJpdi0+Y2FsbGVyX25yZWFkID4gMCkKKwkJcmV0dXJuIHByaXYtPmNhbGxlcl9u
cmVhZDsKKworCWlmIChnX2NhbmNlbGxhYmxlX3NldF9lcnJvcl9pZl9jYW5jZWxsZWQgKGNhbmNl
bGxhYmxlLCBlcnJvcikpCisJCXJldHVybiAtMTsKKwllbHNlIGlmIChzZXRfZXJyb3JfaWZfaHR0
cF9mYWlsZWQgKHByaXYtPm1zZywgZXJyb3IpKQorCQlyZXR1cm4gLTE7CisJZWxzZQorCQlyZXR1
cm4gMDsKK30KKworc3RhdGljIGdib29sZWFuCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3Nl
IChHSW5wdXRTdHJlYW0gKnN0cmVhbSwKKwkJCSAgICAgIEdDYW5jZWxsYWJsZSAqY2FuY2VsbGFi
bGUsCisJCQkgICAgICBHRXJyb3IgICAgICAqKmVycm9yKQoreworCVNvdXBIVFRQSW5wdXRTdHJl
YW1Qcml2YXRlICpwcml2ID0gU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3Ry
ZWFtKTsKKworCWlmICghcHJpdi0+ZmluaXNoZWQpCisJCXNvdXBfc2Vzc2lvbl9jYW5jZWxfbWVz
c2FnZSAocHJpdi0+c2Vzc2lvbiwgcHJpdi0+bXNnLCBTT1VQX1NUQVRVU19DQU5DRUxMRUQpOwor
CisJcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkCit3cmFwcGVyX2NhbGxiYWNrIChHT2Jq
ZWN0ICpzb3VyY2Vfb2JqZWN0LCBHQXN5bmNSZXN1bHQgKnJlcywKKwkJICBncG9pbnRlciB1c2Vy
X2RhdGEpCit7CisJR0lucHV0U3RyZWFtICpzdHJlYW0gPSBHX0lOUFVUX1NUUkVBTSAoc291cmNl
X29iamVjdCk7CisJU291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBTT1VQX0hUVFBf
SU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOworCisJZ19pbnB1dF9zdHJlYW1fY2xl
YXJfcGVuZGluZyAoc3RyZWFtKTsKKwlpZiAocHJpdi0+b3V0c3RhbmRpbmdfY2FsbGJhY2spCisJ
CSgqcHJpdi0+b3V0c3RhbmRpbmdfY2FsbGJhY2spKHNvdXJjZV9vYmplY3QsIHJlcywgdXNlcl9k
YXRhKTsKKwlwcml2LT5vdXRzdGFuZGluZ19jYWxsYmFjayA9IE5VTEw7CisJZ19vYmplY3RfdW5y
ZWYgKHN0cmVhbSk7Cit9CisKK3N0YXRpYyB2b2lkCitzZW5kX2FzeW5jX3RocmVhZCAoR1NpbXBs
ZUFzeW5jUmVzdWx0ICpyZXMsCisJCSAgIEdPYmplY3QgKm9iamVjdCwKKwkJICAgR0NhbmNlbGxh
YmxlICpjYW5jZWxsYWJsZSkKK3sKKwlHRXJyb3IgKmVycm9yID0gTlVMTDsKKwlnYm9vbGVhbiBz
dWNjZXNzOworCisJc3VjY2VzcyA9IHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9pbnRlcm5h
bCAoR19JTlBVVF9TVFJFQU0gKG9iamVjdCksCisJCQkJCQkJY2FuY2VsbGFibGUsICZlcnJvcik7
CisJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ2Jvb2xlYW4gKHJlcywgc3VjY2Vz
cyk7CisJaWYgKGVycm9yKSB7CisJCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfZnJvbV9lcnJv
ciAocmVzLCBlcnJvcik7CisJCWdfZXJyb3JfZnJlZSAoZXJyb3IpOworCX0KK30KKworc3RhdGlj
IHZvaWQKK3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luY19pbl90aHJlYWQgKEdJbnB1
dFN0cmVhbSAgICAgICAgKnN0cmVhbSwKKwkJCQkJICAgICBpbnQgaW9fcHJpb3JpdHksCisJCQkJ
CSAgICAgR0NhbmNlbGxhYmxlICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJCSAgICAgR0FzeW5j
UmVhZHlDYWxsYmFjayBjYWxsYmFjaywKKwkJCQkJICAgICBncG9pbnRlciB1c2VyX2RhdGEpCit7
CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpyZXM7CisKKwlyZXMgPSBnX3NpbXBsZV9hc3luY19yZXN1
bHRfbmV3IChHX09CSkVDVCAoc3RyZWFtKSwgY2FsbGJhY2ssIHVzZXJfZGF0YSwKKwkJCQkJIHNv
dXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luY19pbl90aHJlYWQpOworCWdfc2ltcGxlX2Fz
eW5jX3Jlc3VsdF9ydW5faW5fdGhyZWFkIChyZXMsIHNlbmRfYXN5bmNfdGhyZWFkLAorCQkJCQkg
ICAgIGlvX3ByaW9yaXR5LCBjYW5jZWxsYWJsZSk7CisJZ19vYmplY3RfdW5yZWYgKHJlcyk7Cit9
CisKK3N0YXRpYyB2b2lkCitzZW5kX2FzeW5jX2ZpbmlzaGVkIChHSW5wdXRTdHJlYW0gKnN0cmVh
bSkKK3sKKwlTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFNPVVBfSFRUUF9JTlBV
VF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpyZXN1
bHQ7CisJR0Vycm9yICplcnJvciA9IE5VTEw7CisKKwlpZiAoIWdfY2FuY2VsbGFibGVfc2V0X2Vy
cm9yX2lmX2NhbmNlbGxlZCAocHJpdi0+Y2FuY2VsbGFibGUsICZlcnJvcikpCisJCXNldF9lcnJv
cl9pZl9odHRwX2ZhaWxlZCAocHJpdi0+bXNnLCAmZXJyb3IpOworCisJcHJpdi0+Z290X2hlYWRl
cnNfY2IgPSBOVUxMOworCXByaXYtPmZpbmlzaGVkX2NiID0gTlVMTDsKKwlzb3VwX2h0dHBfaW5w
dXRfc3RyZWFtX2RvbmVfaW8gKHN0cmVhbSk7CisKKwlyZXN1bHQgPSBwcml2LT5yZXN1bHQ7CisJ
cHJpdi0+cmVzdWx0ID0gTlVMTDsKKworCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVz
X2dib29sZWFuIChyZXN1bHQsIGVycm9yID09IE5VTEwpOworCWlmIChlcnJvcikgeworCQlnX3Np
bXBsZV9hc3luY19yZXN1bHRfc2V0X2Zyb21fZXJyb3IgKHJlc3VsdCwgZXJyb3IpOworCQlnX2Vy
cm9yX2ZyZWUgKGVycm9yKTsKKwl9CisJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlIChy
ZXN1bHQpOworfQorCitzdGF0aWMgdm9pZAorc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2Fz
eW5jX2ludGVybmFsIChHSW5wdXRTdHJlYW0gICAgICAgICpzdHJlYW0sCisJCQkJCSAgICBpbnQg
aW9fcHJpb3JpdHksCisJCQkJCSAgICBHQ2FuY2VsbGFibGUgICAgICAgICpjYW5jZWxsYWJsZSwK
KwkJCQkJICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCisJCQkJCSAgICBncG9pbnRl
ciB1c2VyX2RhdGEpCit7CisJU291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBTT1VQ
X0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOworCisJZ19vYmplY3RfcmVm
IChzdHJlYW0pOworCXByaXYtPm91dHN0YW5kaW5nX2NhbGxiYWNrID0gY2FsbGJhY2s7CisKKwkv
KiBJZiB0aGUgc2Vzc2lvbiB1c2VzIHRoZSBkZWZhdWx0IEdNYWluQ29udGV4dCwgdGhlbiB3ZSBj
YW4gZG8KKwkgKiBhc3luYyBJL08gZGlyZWN0bHkuIEJ1dCBpZiBpdCBoYXMgaXRzIG93biBtYWlu
IGNvbnRleHQsIGl0J3MKKwkgKiBlYXNpZXIgdG8ganVzdCBydW4gaXQgaW4gYW5vdGhlciB0aHJl
YWQuCisJICovCisJaWYgKHNvdXBfc2Vzc2lvbl9nZXRfYXN5bmNfY29udGV4dCAocHJpdi0+c2Vz
c2lvbikpIHsKKwkJc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jX2luX3RocmVhZCAo
c3RyZWFtLCBpb19wcmlvcml0eSwgY2FuY2VsbGFibGUsCisJCQkJCQkJICAgICB3cmFwcGVyX2Nh
bGxiYWNrLCB1c2VyX2RhdGEpOworCQlyZXR1cm47CisJfQorCisJcHJpdi0+Z290X2hlYWRlcnNf
Y2IgPSBzZW5kX2FzeW5jX2ZpbmlzaGVkOworCXByaXYtPmZpbmlzaGVkX2NiID0gc2VuZF9hc3lu
Y19maW5pc2hlZDsKKworCXNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcHJlcGFyZV9mb3JfaW8gKHN0
cmVhbSwgY2FuY2VsbGFibGUsIE5VTEwsIDApOworCXByaXYtPnJlc3VsdCA9IGdfc2ltcGxlX2Fz
eW5jX3Jlc3VsdF9uZXcgKEdfT0JKRUNUIChzdHJlYW0pLAorCQkJCQkJICB3cmFwcGVyX2NhbGxi
YWNrLCB1c2VyX2RhdGEsCisJCQkJCQkgIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3lu
Yyk7Cit9CisKKy8qKgorICogc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jOgorICog
QGh0dHBzdHJlYW06IGEgI1NvdXBIVFRQSW5wdXRTdHJlYW0KKyAqIEBpb19wcmlvcml0eTogdGhl
IGlvIHByaW9yaXR5IG9mIHRoZSByZXF1ZXN0LgorICogQGNhbmNlbGxhYmxlOiBvcHRpb25hbCAj
R0NhbmNlbGxhYmxlIG9iamVjdCwgJU5VTEwgdG8gaWdub3JlLgorICogQGNhbGxiYWNrOiBjYWxs
YmFjayB0byBjYWxsIHdoZW4gdGhlIHJlcXVlc3QgaXMgc2F0aXNmaWVkCisgKiBAdXNlcl9kYXRh
OiB0aGUgZGF0YSB0byBwYXNzIHRvIGNhbGxiYWNrIGZ1bmN0aW9uCisgKgorICogQXN5bmNocm9u
b3VzbHkgc2VuZHMgdGhlIEhUVFAgcmVxdWVzdCBhc3NvY2lhdGVkIHdpdGggQHN0cmVhbSwgYW5k
CisgKiByZWFkcyB0aGUgcmVzcG9uc2UgaGVhZGVycy4gQ2FsbCB0aGlzIGFmdGVyIHNvdXBfaHR0
cF9pbnB1dF9zdHJlYW1fbmV3KCkKKyAqIGFuZCBiZWZvcmUgdGhlIGZpcnN0IGdfaW5wdXRfc3Ry
ZWFtX3JlYWRfYXN5bmMoKSBpZiB5b3Ugd2FudCB0bworICogY2hlY2sgdGhlIEhUVFAgc3RhdHVz
IGNvZGUgYmVmb3JlIHlvdSBzdGFydCByZWFkaW5nLgorICoqLwordm9pZAorc291cF9odHRwX2lu
cHV0X3N0cmVhbV9zZW5kX2FzeW5jIChTb3VwSFRUUElucHV0U3RyZWFtICpodHRwc3RyZWFtLAor
CQkJCSAgIGludCBpb19wcmlvcml0eSwKKwkJCQkgICBHQ2FuY2VsbGFibGUgICAgICAgICpjYW5j
ZWxsYWJsZSwKKwkJCQkgICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAorCQkJCSAgIGdw
b2ludGVyIHVzZXJfZGF0YSkKK3sKKwlHSW5wdXRTdHJlYW0gKmlzdHJlYW0gPSAoR0lucHV0U3Ry
ZWFtICopaHR0cHN0cmVhbTsKKwlHRXJyb3IgKmVycm9yID0gTlVMTDsKKworCWdfcmV0dXJuX2lm
X2ZhaWwgKFNPVVBfSVNfSFRUUF9JTlBVVF9TVFJFQU0gKGh0dHBzdHJlYW0pKTsKKworCWlmICgh
Z19pbnB1dF9zdHJlYW1fc2V0X3BlbmRpbmcgKGlzdHJlYW0sICZlcnJvcikpIHsKKwkJZ19zaW1w
bGVfYXN5bmNfcmVwb3J0X2dlcnJvcl9pbl9pZGxlIChHX09CSkVDVCAoaHR0cHN0cmVhbSksCisJ
CQkJCQkgICAgICBjYWxsYmFjaywKKwkJCQkJCSAgICAgIHVzZXJfZGF0YSwKKwkJCQkJCSAgICAg
IGVycm9yKTsKKwkJZ19lcnJvcl9mcmVlIChlcnJvcik7CisJCXJldHVybjsKKwl9CisJc291cF9o
dHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jX2ludGVybmFsIChpc3RyZWFtLCBpb19wcmlvcml0
eSwgY2FuY2VsbGFibGUsCisJCQkJCQkgICAgY2FsbGJhY2ssIHVzZXJfZGF0YSk7Cit9CisKKy8q
KgorICogc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2ZpbmlzaDoKKyAqIEBodHRwc3RyZWFt
OiBhICNTb3VwSFRUUElucHV0U3RyZWFtCisgKiBAcmVzdWx0OiBhICNHQXN5bmNSZXN1bHQuCisg
KiBAZXJyb3I6IGEgI0dFcnJvciBsb2NhdGlvbiB0byBzdG9yZSB0aGUgZXJyb3Igb2NjdXJpbmcs
IG9yICVOVUxMIHRvCisgKiBpZ25vcmUuCisgKgorICogRmluaXNoZXMgYSBzb3VwX2h0dHBfaW5w
dXRfc3RyZWFtX3NlbmRfYXN5bmMoKSBvcGVyYXRpb24uCisgKgorICogUmV0dXJuIHZhbHVlOiAl
VFJVRSBpZiB0aGUgbWVzc2FnZSB3YXMgc2VudCBzdWNjZXNzZnVsbHkgYW5kCisgKiByZWNlaXZl
ZCBhIHN1Y2Nlc3NmdWwgc3RhdHVzIGNvZGUsICVGQUxTRSBpZiBub3QuCisgKiovCitnYm9vbGVh
bgorc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2ZpbmlzaCAoU291cEhUVFBJbnB1dFN0cmVh
bSAgKmh0dHBzdHJlYW0sCisJCQkJICAgIEdBc3luY1Jlc3VsdCAgICAgICAgICpyZXN1bHQsCisJ
CQkJICAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcikKK3sKKwlHU2ltcGxlQXN5bmNSZXN1
bHQgKnNpbXBsZTsKKworCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHX0lTX1NJTVBMRV9BU1lOQ19S
RVNVTFQgKHJlc3VsdCksIEZBTFNFKTsKKwlzaW1wbGUgPSBHX1NJTVBMRV9BU1lOQ19SRVNVTFQg
KHJlc3VsdCk7CisKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0
X2dldF9zb3VyY2VfdGFnIChzaW1wbGUpID09IHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9h
c3luYywgRkFMU0UpOworCisJaWYgKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9wcm9wYWdhdGVfZXJy
b3IgKHNpbXBsZSwgZXJyb3IpKQorCQlyZXR1cm4gRkFMU0U7CisKKwlyZXR1cm4gZ19zaW1wbGVf
YXN5bmNfcmVzdWx0X2dldF9vcF9yZXNfZ2Jvb2xlYW4gKHNpbXBsZSk7Cit9CisKK3N0YXRpYyB2
b2lkCityZWFkX2FzeW5jX2RvbmUgKEdJbnB1dFN0cmVhbSAqc3RyZWFtKQoreworCVNvdXBIVFRQ
SW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJ
VkFURSAoc3RyZWFtKTsKKwlHU2ltcGxlQXN5bmNSZXN1bHQgKnJlc3VsdDsKKwlHRXJyb3IgKmVy
cm9yID0gTlVMTDsKKworCXJlc3VsdCA9IHByaXYtPnJlc3VsdDsKKwlwcml2LT5yZXN1bHQgPSBO
VUxMOworCisJaWYgKGdfY2FuY2VsbGFibGVfc2V0X2Vycm9yX2lmX2NhbmNlbGxlZCAocHJpdi0+
Y2FuY2VsbGFibGUsICZlcnJvcikgfHwKKwkgICAgc2V0X2Vycm9yX2lmX2h0dHBfZmFpbGVkIChw
cml2LT5tc2csICZlcnJvcikpIHsKKwkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9mcm9tX2Vy
cm9yIChyZXN1bHQsIGVycm9yKTsKKwkJZ19lcnJvcl9mcmVlIChlcnJvcik7CisJfSBlbHNlCisJ
CWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dzc2l6ZSAocmVzdWx0LCBwcml2LT5j
YWxsZXJfbnJlYWQpOworCisJcHJpdi0+Z290X2NodW5rX2NiID0gTlVMTDsKKwlwcml2LT5maW5p
c2hlZF9jYiA9IE5VTEw7CisJcHJpdi0+Y2FuY2VsbGVkX2NiID0gTlVMTDsKKwlzb3VwX2h0dHBf
aW5wdXRfc3RyZWFtX2RvbmVfaW8gKHN0cmVhbSk7CisKKwlnX3NpbXBsZV9hc3luY19yZXN1bHRf
Y29tcGxldGUgKHJlc3VsdCk7CisJZ19vYmplY3RfdW5yZWYgKHJlc3VsdCk7Cit9CisKK3N0YXRp
YyB2b2lkCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMgKEdJbnB1dFN0cmVhbSAg
ICAgICAgKnN0cmVhbSwKKwkJCQkgICB2b2lkICAgICAgICAgICAgICAgICpidWZmZXIsCisJCQkJ
ICAgZ3NpemUgY291bnQsCisJCQkJICAgaW50IGlvX3ByaW9yaXR5LAorCQkJCSAgIEdDYW5jZWxs
YWJsZSAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJCSAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2Fs
bGJhY2ssCisJCQkJICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCVNvdXBIVFRQSW5wdXRTdHJl
YW1Qcml2YXRlICpwcml2ID0gU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3Ry
ZWFtKTsKKwlHU2ltcGxlQXN5bmNSZXN1bHQgKnJlc3VsdDsKKworCS8qIElmIHRoZSBzZXNzaW9u
IHVzZXMgdGhlIGRlZmF1bHQgR01haW5Db250ZXh0LCB0aGVuIHdlIGNhbiBkbworCSAqIGFzeW5j
IEkvTyBkaXJlY3RseS4gQnV0IGlmIGl0IGhhcyBpdHMgb3duIG1haW4gY29udGV4dCwgd2UgZmFs
bAorCSAqIGJhY2sgdG8gdGhlIGFzeW5jLXZpYS1zeW5jLWluLWFub3RoZXItdGhyZWFkIGltcGxl
bWVudGF0aW9uLgorCSAqLworCWlmIChzb3VwX3Nlc3Npb25fZ2V0X2FzeW5jX2NvbnRleHQgKHBy
aXYtPnNlc3Npb24pKSB7CisJCUdfSU5QVVRfU1RSRUFNX0NMQVNTIChzb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX3BhcmVudF9jbGFzcyktPgorCQlyZWFkX2FzeW5jIChzdHJlYW0sIGJ1ZmZlciwgY291
bnQsIGlvX3ByaW9yaXR5LAorCQkJICAgIGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlcl9kYXRh
KTsKKwkJcmV0dXJuOworCX0KKworCXJlc3VsdCA9IGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcg
KEdfT0JKRUNUIChzdHJlYW0pLAorCQkJCQkgICAgY2FsbGJhY2ssIHVzZXJfZGF0YSwKKwkJCQkJ
ICAgIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyk7CisKKwlpZiAocHJpdi0+Zmlu
aXNoZWQpIHsKKwkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ3NzaXplIChyZXN1
bHQsIDApOworCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGVfaW5faWRsZSAocmVzdWx0
KTsKKwkJZ19vYmplY3RfdW5yZWYgKHJlc3VsdCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAocHJp
di0+bGVmdG92ZXJfYnVmc2l6ZSkgeworCQlnc2l6ZSBucmVhZCA9IHJlYWRfZnJvbV9sZWZ0b3Zl
ciAocHJpdiwgYnVmZmVyLCBjb3VudCk7CisJCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3Bf
cmVzX2dzc2l6ZSAocmVzdWx0LCBucmVhZCk7CisJCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21w
bGV0ZV9pbl9pZGxlIChyZXN1bHQpOworCQlnX29iamVjdF91bnJlZiAocmVzdWx0KTsKKwkJcmV0
dXJuOworCX0KKworCXByaXYtPnJlc3VsdCA9IHJlc3VsdDsKKworCXByaXYtPmdvdF9jaHVua19j
YiA9IHJlYWRfYXN5bmNfZG9uZTsKKwlwcml2LT5maW5pc2hlZF9jYiA9IHJlYWRfYXN5bmNfZG9u
ZTsKKwlwcml2LT5jYW5jZWxsZWRfY2IgPSByZWFkX2FzeW5jX2RvbmU7CisJc291cF9odHRwX2lu
cHV0X3N0cmVhbV9wcmVwYXJlX2Zvcl9pbyAoc3RyZWFtLCBjYW5jZWxsYWJsZSwgYnVmZmVyLCBj
b3VudCk7Cit9CisKK3N0YXRpYyBnc3NpemUKK3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVhZF9m
aW5pc2ggKEdJbnB1dFN0cmVhbSAgKnN0cmVhbSwKKwkJCQkgICAgR0FzeW5jUmVzdWx0ICAqcmVz
dWx0LAorCQkJCSAgICBHRXJyb3IgICAgICAgKiplcnJvcikKK3sKKwlHU2ltcGxlQXN5bmNSZXN1
bHQgKnNpbXBsZTsKKworCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHX0lTX1NJTVBMRV9BU1lOQ19S
RVNVTFQgKHJlc3VsdCksIC0xKTsKKwlzaW1wbGUgPSBHX1NJTVBMRV9BU1lOQ19SRVNVTFQgKHJl
c3VsdCk7CisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRf
c291cmNlX3RhZyAoc2ltcGxlKSA9PSBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMs
IC0xKTsKKworCXJldHVybiBnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X29wX3Jlc19nc3NpemUg
KHNpbXBsZSk7Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3Nl
X2FzeW5jIChHSW5wdXRTdHJlYW0gICAgICAgKnN0cmVhbSwKKwkJCQkgICAgaW50IGlvX3ByaW9y
aXR5LAorCQkJCSAgICBHQ2FuY2VsbGFibGUgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJCSAgICBH
QXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAorCQkJCSAgICBncG9pbnRlciB1c2VyX2RhdGEp
Cit7CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpyZXN1bHQ7CisJZ2Jvb2xlYW4gc3VjY2VzczsKKwlH
RXJyb3IgKmVycm9yID0gTlVMTDsKKworCXJlc3VsdCA9IGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9u
ZXcgKEdfT0JKRUNUIChzdHJlYW0pLAorCQkJCQkgICAgY2FsbGJhY2ssIHVzZXJfZGF0YSwKKwkJ
CQkJICAgIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2VfYXN5bmMpOworCXN1Y2Nlc3MgPSBz
b3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlIChzdHJlYW0sIGNhbmNlbGxhYmxlLCAmZXJyb3Ip
OworCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dib29sZWFuIChyZXN1bHQsIHN1
Y2Nlc3MpOworCWlmIChlcnJvcikgeworCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X2Zyb21f
ZXJyb3IgKHJlc3VsdCwgZXJyb3IpOworCQlnX2Vycm9yX2ZyZWUgKGVycm9yKTsKKwl9CisKKwln
X3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGVfaW5faWRsZSAocmVzdWx0KTsKKwlnX29iamVj
dF91bnJlZiAocmVzdWx0KTsKK30KKworc3RhdGljIGdib29sZWFuCitzb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX2Nsb3NlX2ZpbmlzaCAoR0lucHV0U3RyZWFtICAqc3RyZWFtLAorCQkJCSAgICAgR0Fz
eW5jUmVzdWx0ICAqcmVzdWx0LAorCQkJCSAgICAgR0Vycm9yICAgICAgICoqZXJyb3IpCit7CisJ
LyogRmFpbHVyZXMgaGFuZGxlZCBpbiBnZW5lcmljIGNsb3NlX2ZpbmlzaCBjb2RlICovCisJcmV0
dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnb2Zmc2V0Citzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3Rl
bGwgKEdTZWVrYWJsZSAqc2Vla2FibGUpCit7CisJU291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUg
KnByaXYgPSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzZWVrYWJsZSk7CisK
KwlyZXR1cm4gcHJpdi0+b2Zmc2V0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3NvdXBfaHR0cF9p
bnB1dF9zdHJlYW1fY2FuX3NlZWsgKEdTZWVrYWJsZSAqc2Vla2FibGUpCit7CisJcmV0dXJuIFRS
VUU7Cit9CisKK2V4dGVybiB2b2lkIHNvdXBfbWVzc2FnZV9pb19jbGVhbnVwIChTb3VwTWVzc2Fn
ZSAqbXNnKTsKKworc3RhdGljIGdib29sZWFuCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlZWsg
KEdTZWVrYWJsZSAgICAgKnNlZWthYmxlLAorCQkJICAgICBnb2Zmc2V0IG9mZnNldCwKKwkJCSAg
ICAgR1NlZWtUeXBlIHR5cGUsCisJCQkgICAgIEdDYW5jZWxsYWJsZSAgKmNhbmNlbGxhYmxlLAor
CQkJICAgICBHRXJyb3IgICAgICAgKiplcnJvcikKK3sKKwlHSW5wdXRTdHJlYW0gKnN0cmVhbSA9
IEdfSU5QVVRfU1RSRUFNIChzZWVrYWJsZSk7CisJU291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUg
KnByaXYgPSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzZWVrYWJsZSk7CisJ
Y2hhciAqcmFuZ2U7CisKKwlpZiAodHlwZSA9PSBHX1NFRUtfRU5EKSB7CisJCS8qIEZJWE1FOiB3
ZSBjb3VsZCBzZW5kICJieXRlcz0tb2Zmc2V0IiwgYnV0IHVubGVzcyB3ZQorCQkgKiBrbm93IHRo
ZSBDb250ZW50LUxlbmd0aCwgd2Ugd291bGRuJ3QgYmUgYWJsZSB0bworCQkgKiBhbnN3ZXIgYSB0
ZWxsKCkgcHJvcGVybHkuIFdlIGNvdWxkIGZpbmQgdGhlCisJCSAqIENvbnRlbnQtTGVuZ3RoIGJ5
IGRvaW5nIGEgSEVBRC4uLgorCQkgKi8KKworCQlnX3NldF9lcnJvcl9saXRlcmFsIChlcnJvciwg
R19JT19FUlJPUiwgR19JT19FUlJPUl9OT1RfU1VQUE9SVEVELAorCQkJCSAgICAgIkdfU0VFS19F
TkQgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQiKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCWlm
ICghZ19pbnB1dF9zdHJlYW1fc2V0X3BlbmRpbmcgKHN0cmVhbSwgZXJyb3IpKQorCQlyZXR1cm4g
RkFMU0U7CisKKwlzb3VwX3Nlc3Npb25fY2FuY2VsX21lc3NhZ2UgKHByaXYtPnNlc3Npb24sIHBy
aXYtPm1zZywgU09VUF9TVEFUVVNfQ0FOQ0VMTEVEKTsKKwlzb3VwX21lc3NhZ2VfaW9fY2xlYW51
cCAocHJpdi0+bXNnKTsKKworCXN3aXRjaCAodHlwZSkgeworCQljYXNlIEdfU0VFS19DVVI6CisJ
CQlvZmZzZXQgKz0gcHJpdi0+b2Zmc2V0OworCQkvKiBmYWxsIHRocm91Z2ggKi8KKworCQljYXNl
IEdfU0VFS19TRVQ6CisJCQlyYW5nZSA9IGdfc3RyZHVwX3ByaW50ZiAoImJ5dGVzPSUiIEdfR1VJ
TlQ2NF9GT1JNQVQgIi0iLCAoZ3VpbnQ2NClvZmZzZXQpOworCQkJcHJpdi0+b2Zmc2V0ID0gb2Zm
c2V0OworCQkJYnJlYWs7CisKKwkJY2FzZSBHX1NFRUtfRU5EOgorCQkJcmFuZ2UgPSBOVUxMOyAv
KiBrZWVwIGNvbXBpbGVycyBoYXBweSAqLworCQkJZ19yZXR1cm5fdmFsX2lmX3JlYWNoZWQgKEZB
TFNFKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlnX3JldHVybl92YWxfaWZfcmVhY2hl
ZCAoRkFMU0UpOworCX0KKworCXNvdXBfbWVzc2FnZV9oZWFkZXJzX3JlbW92ZSAocHJpdi0+bXNn
LT5yZXF1ZXN0X2hlYWRlcnMsICJSYW5nZSIpOworCXNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVu
ZCAocHJpdi0+bXNnLT5yZXF1ZXN0X2hlYWRlcnMsICJSYW5nZSIsIHJhbmdlKTsKKwlnX2ZyZWUg
KHJhbmdlKTsKKworCXNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcXVldWVfbWVzc2FnZSAoU09VUF9I
VFRQX0lOUFVUX1NUUkVBTSAoc3RyZWFtKSk7CisKKwlnX2lucHV0X3N0cmVhbV9jbGVhcl9wZW5k
aW5nIChzdHJlYW0pOworCXJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3NvdXBf
aHR0cF9pbnB1dF9zdHJlYW1fY2FuX3RydW5jYXRlIChHU2Vla2FibGUgKnNlZWthYmxlKQorewor
CXJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGdib29sZWFuCitzb3VwX2h0dHBfaW5wdXRfc3Ry
ZWFtX3RydW5jYXRlIChHU2Vla2FibGUgICAgICpzZWVrYWJsZSwKKwkJCQkgZ29mZnNldCBvZmZz
ZXQsCisJCQkJIEdDYW5jZWxsYWJsZSAgKmNhbmNlbGxhYmxlLAorCQkJCSBHRXJyb3IgICAgICAg
KiplcnJvcikKK3sKKwlnX3NldF9lcnJvcl9saXRlcmFsIChlcnJvciwgR19JT19FUlJPUiwgR19J
T19FUlJPUl9OT1RfU1VQUE9SVEVELAorCQkJICAgICAiVHJ1bmNhdGUgbm90IGFsbG93ZWQgb24g
aW5wdXQgc3RyZWFtIik7CisJcmV0dXJuIEZBTFNFOworfQorCitTb3VwTWVzc2FnZSAqCitzb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX2dldF9tZXNzYWdlIChTb3VwSFRUUElucHV0U3RyZWFtICpodHRw
c3RyZWFtKQoreworCVNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gU09VUF9IVFRQ
X0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoaHR0cHN0cmVhbSk7CisJcmV0dXJuIHByaXYtPm1z
ZyA/IGdfb2JqZWN0X3JlZiAocHJpdi0+bXNnKSA6IE5VTEw7Cit9CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmgg
Yi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3Ry
ZWFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RlN2JjMAotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0
cC1pbnB1dC1zdHJlYW0uaApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA3LCAyMDA5IFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2Fs
aWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwKKyAqIEJvc3Rv
biwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19TT1VQX0hUVFBfSU5QVVRf
U1RSRUFNX0hfXworI2RlZmluZSBfX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fSF9fCisKKyNpbmNs
dWRlIDxnaW8vZ2lvLmg+CisjaW5jbHVkZSA8bGlic291cC9zb3VwLXR5cGVzLmg+CisKK0dfQkVH
SU5fREVDTFMKKworI2RlZmluZSBTT1VQX1RZUEVfSFRUUF9JTlBVVF9TVFJFQU0gICAgICAgICAo
c291cF9odHRwX2lucHV0X3N0cmVhbV9nZXRfdHlwZSAoKSkKKyNkZWZpbmUgU09VUF9IVFRQX0lO
UFVUX1NUUkVBTShvKSAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgobyks
IFNPVVBfVFlQRV9IVFRQX0lOUFVUX1NUUkVBTSwgU291cEhUVFBJbnB1dFN0cmVhbSkpCisjZGVm
aW5lIFNPVVBfSFRUUF9JTlBVVF9TVFJFQU1fQ0xBU1MoaykgICAgIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfQ0FTVCAoKGspLCBTT1VQX1RZUEVfSFRUUF9JTlBVVF9TVFJFQU0sIFNvdXBIVFRQSW5wdXRT
dHJlYW1DbGFzcykpCisjZGVmaW5lIFNPVVBfSVNfSFRUUF9JTlBVVF9TVFJFQU0obykgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG8pLCBTT1VQX1RZUEVfSFRUUF9JTlBVVF9T
VFJFQU0pKQorI2RlZmluZSBTT1VQX0lTX0hUVFBfSU5QVVRfU1RSRUFNX0NMQVNTKGspICAoR19U
WVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrKSwgU09VUF9UWVBFX0hUVFBfSU5QVVRfU1RSRUFNKSkK
KyNkZWZpbmUgU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfQ0xBU1MobykgKEdfVFlQRV9JTlNU
QU5DRV9HRVRfQ0xBU1MgKChvKSwgU09VUF9UWVBFX0hUVFBfSU5QVVRfU1RSRUFNLCBTb3VwSFRU
UElucHV0U3RyZWFtQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBTb3VwSFRUUElucHV0U3RyZWFt
IFNvdXBIVFRQSW5wdXRTdHJlYW07Cit0eXBlZGVmIHN0cnVjdCBTb3VwSFRUUElucHV0U3RyZWFt
Q2xhc3MgU291cEhUVFBJbnB1dFN0cmVhbUNsYXNzOworCitzdHJ1Y3QgU291cEhUVFBJbnB1dFN0
cmVhbSB7CisJR0lucHV0U3RyZWFtIHBhcmVudDsKK307CisKK3N0cnVjdCBTb3VwSFRUUElucHV0
U3RyZWFtQ2xhc3MgeworCUdJbnB1dFN0cmVhbUNsYXNzIHBhcmVudF9jbGFzczsKKworCS8qIFBh
ZGRpbmcgZm9yIGZ1dHVyZSBleHBhbnNpb24gKi8KKwl2b2lkICgqX2dfcmVzZXJ2ZWQxKSh2b2lk
KTsKKwl2b2lkICgqX2dfcmVzZXJ2ZWQyKSh2b2lkKTsKKwl2b2lkICgqX2dfcmVzZXJ2ZWQzKSh2
b2lkKTsKKwl2b2lkICgqX2dfcmVzZXJ2ZWQ0KSh2b2lkKTsKKwl2b2lkICgqX2dfcmVzZXJ2ZWQ1
KSh2b2lkKTsKK307CisKK0dUeXBlIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ2V0X3R5cGUgKHZv
aWQpIEdfR05VQ19DT05TVDsKKworU291cEhUVFBJbnB1dFN0cmVhbSAqc291cF9odHRwX2lucHV0
X3N0cmVhbV9uZXcgKFNvdXBTZXNzaW9uICAgICAgICAgKnNlc3Npb24sCisJCQkJCQkgU291cE1l
c3NhZ2UgICAgICAgICAqbXNnKTsKKworZ2Jvb2xlYW4gICAgICAgICAgICAgc291cF9odHRwX2lu
cHV0X3N0cmVhbV9zZW5kIChTb3VwSFRUUElucHV0U3RyZWFtICpodHRwc3RyZWFtLAorCQkJCQkJ
ICBHQ2FuY2VsbGFibGUgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkJCSAgR0Vycm9yICAgICAg
ICAgICAgICoqZXJyb3IpOworCit2b2lkICAgICAgICAgICAgICAgICBzb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX3NlbmRfYXN5bmMgKFNvdXBIVFRQSW5wdXRTdHJlYW0gKmh0dHBzdHJlYW0sCisJCQkJ
CQkJaW50IGlvX3ByaW9yaXR5LAorCQkJCQkJCUdDYW5jZWxsYWJsZSAgICAgICAgKmNhbmNlbGxh
YmxlLAorCQkJCQkJCUdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCisJCQkJCQkJZ3BvaW50
ZXIgdXNlcl9kYXRhKTsKK2dib29sZWFuICAgICAgICAgICAgIHNvdXBfaHR0cF9pbnB1dF9zdHJl
YW1fc2VuZF9maW5pc2ggKFNvdXBIVFRQSW5wdXRTdHJlYW0gKmh0dHBzdHJlYW0sCisJCQkJCQkJ
IEdBc3luY1Jlc3VsdCAgICAgICAgKnJlc3VsdCwKKwkJCQkJCQkgR0Vycm9yICAgICAgICAgICAg
ICoqZXJyb3IpOworCitTb3VwTWVzc2FnZSAgICAgICAgICpzb3VwX2h0dHBfaW5wdXRfc3RyZWFt
X2dldF9tZXNzYWdlIChTb3VwSFRUUElucHV0U3RyZWFtICpodHRwc3RyZWFtKTsKKworR19FTkRf
REVDTFMKKworI2VuZGlmIC8qIF9fU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9IX18gKi8KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1k
YXRhLmMgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Qt
ZGF0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZjkxYzYKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJl
cXVlc3QtZGF0YS5jCkBAIC0wLDAgKzEsMjA1IEBACisvKgorICogc291cC1yZXF1ZXN0LWRhdGEu
YzogZGF0YTogVVJJIHJlcXVlc3Qgb2JqZWN0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJl
ZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmZGVmIEhB
VkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorI2luY2x1ZGUgInNvdXAt
cmVxdWVzdC1kYXRhLmgiCisKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3Rlci5oIgorI2luY2x1ZGUg
PGxpYnNvdXAvc291cC5oPgorI2luY2x1ZGUgPGdsaWIvZ2kxOG4uaD4KKworR19ERUZJTkVfVFlQ
RSAoU291cFJlcXVlc3REYXRhLCBzb3VwX3JlcXVlc3RfZGF0YSwgU09VUF9UWVBFX1JFUVVFU1Qp
CisKK3N0cnVjdCBfU291cFJlcXVlc3REYXRhUHJpdmF0ZSB7CisJZ3NpemUgY29udGVudF9sZW5n
dGg7CisJY2hhciAqY29udGVudF90eXBlOworfTsKKworc3RhdGljIHZvaWQKK3NvdXBfcmVxdWVz
dF9kYXRhX2luaXQgKFNvdXBSZXF1ZXN0RGF0YSAqZGF0YSkKK3sKKwlkYXRhLT5wcml2ID0gR19U
WVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFIChkYXRhLCBTT1VQX1RZUEVfUkVRVUVTVF9EQVRBLCBT
b3VwUmVxdWVzdERhdGFQcml2YXRlKTsKK30KKworc3RhdGljIHZvaWQKK3NvdXBfcmVxdWVzdF9k
YXRhX2ZpbmFsaXplIChHT2JqZWN0ICpvYmplY3QpCit7CisJU291cFJlcXVlc3REYXRhICpkYXRh
ID0gU09VUF9SRVFVRVNUX0RBVEEgKG9iamVjdCk7CisKKwlnX2ZyZWUgKGRhdGEtPnByaXYtPmNv
bnRlbnRfdHlwZSk7CisKKwlHX09CSkVDVF9DTEFTUyAoc291cF9yZXF1ZXN0X2RhdGFfcGFyZW50
X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorc291cF9y
ZXF1ZXN0X2RhdGFfY2hlY2tfdXJpIChTb3VwUmVxdWVzdCAgKnJlcXVlc3QsCisJCQkgICAgIFNv
dXBVUkkgICAgICAqdXJpLAorCQkJICAgICBHRXJyb3IgICAgICAqKmVycm9yKQoreworCXJldHVy
biB1cmktPmhvc3QgPT0gTlVMTDsKK30KKworCisjZGVmaW5lIFhESUdJVChjKSAoKGMpIDw9ICc5
JyA/IChjKSAtICcwJyA6ICgoYykgJiAweDRGKSAtICdBJyArIDEwKQorI2RlZmluZSBIRVhDSEFS
KHMpICgoWERJR0lUIChzWzFdKSA8PCA0KSArIFhESUdJVCAoc1syXSkpCisKK2NoYXIgKgordXJp
X2RlY29kZWRfY29weSAoY29uc3QgY2hhciAqcGFydCwgaW50IGxlbmd0aCwgZ2Jvb2xlYW4gZml4
dXApCit7CisJdW5zaWduZWQgY2hhciAqcywgKmQ7CisJY2hhciAqZGVjb2RlZCA9IGdfc3RybmR1
cCAocGFydCwgbGVuZ3RoKTsKKworCXMgPSBkID0gKHVuc2lnbmVkIGNoYXIgKilkZWNvZGVkOwor
CWRvIHsKKwkJaWYgKCpzID09ICclJykgeworCQkJaWYgKCFnX2FzY2lpX2lzeGRpZ2l0IChzWzFd
KSB8fAorCQkJICAgICFnX2FzY2lpX2lzeGRpZ2l0IChzWzJdKSkgeworCQkJCWlmICghZml4dXAp
IHsKKwkJCQkJZ19mcmVlIChkZWNvZGVkKTsKKwkJCQkJcmV0dXJuIE5VTEw7CisJCQkJfQorCQkJ
CSpkKysgPSAqczsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCSpkKysgPSBIRVhDSEFSIChzKTsK
KwkJCXMgKz0gMjsKKwkJfSBlbHNlCisJCQkqZCsrID0gKnM7CisJfSB3aGlsZSAoKnMrKyk7CisK
KwlyZXR1cm4gZGVjb2RlZDsKK30KKworc3RhdGljIEdJbnB1dFN0cmVhbSAqCitzb3VwX3JlcXVl
c3RfZGF0YV9zZW5kIChTb3VwUmVxdWVzdCAgICpyZXF1ZXN0LAorCQkJR0NhbmNlbGxhYmxlICAq
Y2FuY2VsbGFibGUsCisJCQlHRXJyb3IgICAgICAgKiplcnJvcikKK3sKKwlTb3VwUmVxdWVzdERh
dGEgKmRhdGEgPSBTT1VQX1JFUVVFU1RfREFUQSAocmVxdWVzdCk7CisJU291cFVSSSAqdXJpID0g
c291cF9yZXF1ZXN0X2dldF91cmkgKHJlcXVlc3QpOworCUdJbnB1dFN0cmVhbSAqbWVtc3RyZWFt
OworCWNvbnN0IGNoYXIgKmNvbW1hLCAqc2VtaSwgKnN0YXJ0LCAqZW5kOworCWdib29sZWFuIGJh
c2U2NCA9IEZBTFNFOworCisJZ2NoYXIgKnVyaXN0ciA9IHNvdXBfdXJpX3RvX3N0cmluZyAodXJp
LCBGQUxTRSk7CisJY29tbWEgPSBzdHJjaHIgKHVyaXN0ciwgJywnKTsKKwlpZiAoY29tbWEgJiYg
Y29tbWEgIT0gdXJpc3RyKSB7CisJCS8qIERlYWwgd2l0aCBNSU1FIHR5cGUgLyBwYXJhbXMgKi8K
KwkJc2VtaSA9IG1lbWNociAodXJpc3RyLCAnOycsIGNvbW1hIC0gdXJpc3RyKTsKKwkJZW5kID0g
c2VtaSA/IHNlbWkgOiBjb21tYTsKKworCQlpZiAoZW5kICE9IHVyaXN0cikKKwkJCWRhdGEtPnBy
aXYtPmNvbnRlbnRfdHlwZSA9IHVyaV9kZWNvZGVkX2NvcHkgKHVyaXN0ciwgZW5kIC0gdXJpc3Ry
LCBUUlVFKTsKKworCQlpZiAoc2VtaSAmJiAhZ19hc2NpaV9zdHJuY2FzZWNtcCAoc2VtaSwgIjti
YXNlNjQiLCBNQVggKGNvbW1hIC0gc2VtaSwgc3RybGVuICgiO2Jhc2U2NCIpKSkpCisJCQliYXNl
NjQgPSBUUlVFOworCX0KKworCW1lbXN0cmVhbSA9IGdfbWVtb3J5X2lucHV0X3N0cmVhbV9uZXcg
KCk7CisKKwlzdGFydCA9IGNvbW1hID8gY29tbWEgKyAxIDogdXJpc3RyOworCisJaWYgKCpzdGFy
dCkgeworCQlndWNoYXIgKmJ1ZjsKKworCQlpZiAoYmFzZTY0KSB7CisJCQlpbnQgaW5sZW4sIHN0
YXRlID0gMDsKKwkJCWd1aW50IHNhdmUgPSAwOworCQkJY2hhciAqdW5lc2NhcGVkOworCisJCQlp
ZiAoc3RyY2hyIChzdGFydCwgJyUnKSkgeworCQkJCXN0YXJ0ID0gdW5lc2NhcGVkID0gdXJpX2Rl
Y29kZWRfY29weSAoc3RhcnQsIHN0cmxlbiAoc3RhcnQpLCBUUlVFKTsKKwkJCQlpZiAoIXVuZXNj
YXBlZCkKKwkJCQkJZ290byBmYWlsOworCQkJfSBlbHNlCisJCQkJdW5lc2NhcGVkID0gTlVMTDsK
KworCQkJaW5sZW4gPSBzdHJsZW4gKHN0YXJ0KTsKKwkJCWJ1ZiA9IGdfbWFsbG9jIChpbmxlbiAq
IDMgLyA0KTsKKwkJCWRhdGEtPnByaXYtPmNvbnRlbnRfbGVuZ3RoID0KKwkJCQlnX2Jhc2U2NF9k
ZWNvZGVfc3RlcCAoc3RhcnQsIGlubGVuLCBidWYsCisJCQkJCQkgICAgICAmc3RhdGUsICZzYXZl
KTsKKwkJCWdfZnJlZSAodW5lc2NhcGVkKTsKKwkJCWlmIChzdGF0ZSAhPSAwKSB7CisJCQkJZ19m
cmVlIChidWYpOworCQkJCWdvdG8gZmFpbDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIENhbm5v
dCB1c2UgZ191cmlfdW5lc2NhcGVfc3RyaW5nIG5vcgorCQkJICAgc291cF91cmlfZGVjb2RlIGJl
Y2F1c2Ugd2UgZG9uJ3Qgd2FudCB0bworCQkJICAgZmFpbCBmb3IgdGhpbmdzIGxpa2UgIiUzRSUl
M0MiIC0+ICI+JTwiICovCisJCQlidWYgPSAoZ3VjaGFyICopdXJpX2RlY29kZWRfY29weSAoc3Rh
cnQsIHN0cmxlbiAoc3RhcnQpLCBUUlVFKTsKKwkJCWlmICghYnVmKQorCQkJCWdvdG8gZmFpbDsK
KwkJCWRhdGEtPnByaXYtPmNvbnRlbnRfbGVuZ3RoID0gc3RybGVuICgoY2hhciAqKWJ1Zik7CisJ
CX0KKworCQlnX21lbW9yeV9pbnB1dF9zdHJlYW1fYWRkX2RhdGEgKEdfTUVNT1JZX0lOUFVUX1NU
UkVBTSAobWVtc3RyZWFtKSwKKwkJCQkJCWJ1ZiwgZGF0YS0+cHJpdi0+Y29udGVudF9sZW5ndGgs
CisJCQkJCQlnX2ZyZWUpOworCX0KKwlnX2ZyZWUgKHVyaXN0cik7CisKKwlyZXR1cm4gbWVtc3Ry
ZWFtOworCisgZmFpbDoKKwlnX2ZyZWUgKHVyaXN0cik7CisJZ19zZXRfZXJyb3IgKGVycm9yLCBT
T1VQX0VSUk9SLCBTT1VQX0VSUk9SX0JBRF9VUkksCisJCSAgICAgXyAoIlVuYWJsZSB0byBkZWNv
ZGUgVVJJOiAlcyIpLCBzdGFydCk7CisJZ19vYmplY3RfdW5yZWYgKG1lbXN0cmVhbSk7CisJcmV0
dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBnb2Zmc2V0Citzb3VwX3JlcXVlc3RfZGF0YV9nZXRfY29u
dGVudF9sZW5ndGggKFNvdXBSZXF1ZXN0ICpyZXF1ZXN0KQoreworCVNvdXBSZXF1ZXN0RGF0YSAq
ZGF0YSA9IFNPVVBfUkVRVUVTVF9EQVRBIChyZXF1ZXN0KTsKKworCXJldHVybiBkYXRhLT5wcml2
LT5jb250ZW50X2xlbmd0aDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorc291cF9yZXF1ZXN0
X2RhdGFfZ2V0X2NvbnRlbnRfdHlwZSAoU291cFJlcXVlc3QgKnJlcXVlc3QpCit7CisJU291cFJl
cXVlc3REYXRhICpkYXRhID0gU09VUF9SRVFVRVNUX0RBVEEgKHJlcXVlc3QpOworCisJcmV0dXJu
IGRhdGEtPnByaXYtPmNvbnRlbnRfdHlwZTsKK30KKworc3RhdGljIHZvaWQKK3NvdXBfcmVxdWVz
dF9kYXRhX2NsYXNzX2luaXQgKFNvdXBSZXF1ZXN0RGF0YUNsYXNzICpyZXF1ZXN0X2RhdGFfY2xh
c3MpCit7CisJR09iamVjdENsYXNzICpvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAocmVx
dWVzdF9kYXRhX2NsYXNzKTsKKwlTb3VwUmVxdWVzdENsYXNzICpyZXF1ZXN0X2NsYXNzID0KKwkJ
U09VUF9SRVFVRVNUX0NMQVNTIChyZXF1ZXN0X2RhdGFfY2xhc3MpOworCisJZ190eXBlX2NsYXNz
X2FkZF9wcml2YXRlIChyZXF1ZXN0X2RhdGFfY2xhc3MsIHNpemVvZiAoU291cFJlcXVlc3REYXRh
UHJpdmF0ZSkpOworCisJb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IHNvdXBfcmVxdWVzdF9kYXRh
X2ZpbmFsaXplOworCisJcmVxdWVzdF9jbGFzcy0+Y2hlY2tfdXJpID0gc291cF9yZXF1ZXN0X2Rh
dGFfY2hlY2tfdXJpOworCXJlcXVlc3RfY2xhc3MtPnNlbmQgPSBzb3VwX3JlcXVlc3RfZGF0YV9z
ZW5kOworCXJlcXVlc3RfY2xhc3MtPmdldF9jb250ZW50X2xlbmd0aCA9IHNvdXBfcmVxdWVzdF9k
YXRhX2dldF9jb250ZW50X2xlbmd0aDsKKwlyZXF1ZXN0X2NsYXNzLT5nZXRfY29udGVudF90eXBl
ID0gc291cF9yZXF1ZXN0X2RhdGFfZ2V0X2NvbnRlbnRfdHlwZTsKK30KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmggYi9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMTRmMzcKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0
YS5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwg
SW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFNPVVBfUkVR
VUVTVF9EQVRBX0gKKyNkZWZpbmUgU09VUF9SRVFVRVNUX0RBVEFfSCAxCisKKyNpbmNsdWRlICJz
b3VwLXJlcXVlc3QuaCIKKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFNPVVBfVFlQRV9SRVFV
RVNUX0RBVEEgICAgICAgICAgICAoc291cF9yZXF1ZXN0X2RhdGFfZ2V0X3R5cGUgKCkpCisjZGVm
aW5lIFNPVVBfUkVRVUVTVF9EQVRBKG9iamVjdCkgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX0NBU1QgKChvYmplY3QpLCBTT1VQX1RZUEVfUkVRVUVTVF9EQVRBLCBTb3VwUmVxdWVzdERh
dGEpKQorI2RlZmluZSBTT1VQX1JFUVVFU1RfREFUQV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9D
SEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBTT1VQX1RZUEVfUkVRVUVTVF9EQVRBLCBTb3VwUmVx
dWVzdERhdGFDbGFzcykpCisjZGVmaW5lIFNPVVBfSVNfUkVRVUVTVF9EQVRBKG9iamVjdCkgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmplY3QpLCBTT1VQX1RZUEVfUkVRVUVT
VF9EQVRBKSkKKyNkZWZpbmUgU09VUF9JU19SRVFVRVNUX0RBVEFfQ0xBU1Moa2xhc3MpIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgU09VUF9UWVBFX1JFUVVFU1RfREFUQSkpCisj
ZGVmaW5lIFNPVVBfUkVRVUVTVF9EQVRBX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNF
X0dFVF9DTEFTUyAoKG9iaiksIFNPVVBfVFlQRV9SRVFVRVNUX0RBVEEsIFNvdXBSZXF1ZXN0RGF0
YUNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1NvdXBSZXF1ZXN0RGF0YVByaXZhdGUgU291cFJl
cXVlc3REYXRhUHJpdmF0ZTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCVNvdXBSZXF1ZXN0IHBhcmVu
dDsKKworCVNvdXBSZXF1ZXN0RGF0YVByaXZhdGUgKnByaXY7Cit9IFNvdXBSZXF1ZXN0RGF0YTsK
KwordHlwZWRlZiBzdHJ1Y3QgeworCVNvdXBSZXF1ZXN0Q2xhc3MgcGFyZW50OworfSBTb3VwUmVx
dWVzdERhdGFDbGFzczsKKworR1R5cGUgc291cF9yZXF1ZXN0X2RhdGFfZ2V0X3R5cGUgKHZvaWQp
OworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogU09VUF9SRVFVRVNUX0RBVEFfSCAqLwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0
LWZpbGUuYyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVz
dC1maWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNmNmUwOQotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAt
cmVxdWVzdC1maWxlLmMKQEAgLTAsMCArMSwzMTMgQEAKKy8qCisgKiBzb3VwLXJlcXVlc3QtZmls
ZS5jOiBmaWxlOiBVUkkgcmVxdWVzdCBvYmplY3QKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
UmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZkZWYg
SEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJz
b3VwLXJlcXVlc3QtZmlsZS5oIgorI2luY2x1ZGUgInNvdXAtZGlyZWN0b3J5LWlucHV0LXN0cmVh
bS5oIgorI2luY2x1ZGUgInNvdXAtcmVxdWVzdGVyLmgiCisjaW5jbHVkZSA8Z2xpYi9naTE4bi5o
PgorCitHX0RFRklORV9UWVBFIChTb3VwUmVxdWVzdEZpbGUsIHNvdXBfcmVxdWVzdF9maWxlLCBT
T1VQX1RZUEVfUkVRVUVTVCkKKworc3RydWN0IF9Tb3VwUmVxdWVzdEZpbGVQcml2YXRlIHsKKwlH
RmlsZSAqZ2ZpbGU7CisKKwljaGFyICptaW1lX3R5cGU7CisJZ29mZnNldCBzaXplOworfTsKKwor
R0ZpbGUgKgorc291cF9yZXF1ZXN0X2ZpbGVfZ2V0X2ZpbGUgKFNvdXBSZXF1ZXN0RmlsZSAqZmls
ZSkKK3sKKwlyZXR1cm4gZ19vYmplY3RfcmVmIChmaWxlLT5wcml2LT5nZmlsZSk7Cit9CisKK3N0
YXRpYyB2b2lkCitzb3VwX3JlcXVlc3RfZmlsZV9pbml0IChTb3VwUmVxdWVzdEZpbGUgKmZpbGUp
Cit7CisJZmlsZS0+cHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAoZmlsZSwgU09V
UF9UWVBFX1JFUVVFU1RfRklMRSwgU291cFJlcXVlc3RGaWxlUHJpdmF0ZSk7CisKKwlmaWxlLT5w
cml2LT5zaXplID0gLTE7Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX3JlcXVlc3RfZmlsZV9maW5h
bGl6ZSAoR09iamVjdCAqb2JqZWN0KQoreworCVNvdXBSZXF1ZXN0RmlsZSAqZmlsZSA9IFNPVVBf
UkVRVUVTVF9GSUxFIChvYmplY3QpOworCisJaWYgKGZpbGUtPnByaXYtPmdmaWxlKQorCQlnX29i
amVjdF91bnJlZiAoZmlsZS0+cHJpdi0+Z2ZpbGUpOworCWdfZnJlZSAoZmlsZS0+cHJpdi0+bWlt
ZV90eXBlKTsKKworCUdfT0JKRUNUX0NMQVNTIChzb3VwX3JlcXVlc3RfZmlsZV9wYXJlbnRfY2xh
c3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKK30KKworc3RhdGljIGdib29sZWFuCitzb3VwX3JlcXVl
c3RfZmlsZV9jaGVja191cmkgKFNvdXBSZXF1ZXN0ICAqcmVxdWVzdCwKKwkJCSAgICAgU291cFVS
SSAgICAgICp1cmksCisJCQkgICAgIEdFcnJvciAgICAgICoqZXJyb3IpCit7CisJLyogImZpbGU6
L2ZvbyIgaXMgbm90IHZhbGlkICovCisJaWYgKCF1cmktPmhvc3QpCisJCXJldHVybiBGQUxTRTsK
KworCS8qIGJ1dCBpdCBtdXN0IGJlICJmaWxlOi8vLy4uLiIgb3IgImZpbGU6Ly9sb2NhbGhvc3Qv
Li4uIiAqLworCWlmICh1cmktPnNjaGVtZSA9PSBTT1VQX1VSSV9TQ0hFTUVfRklMRSAmJgorCSAg
ICAqdXJpLT5ob3N0ICYmCisJICAgIGdfYXNjaWlfc3RyY2FzZWNtcCAodXJpLT5ob3N0LCAibG9j
YWxob3N0IikgIT0gMCkKKwkJcmV0dXJuIEZBTFNFOworCisJcmV0dXJuIFRSVUU7Cit9CisKK3N0
YXRpYyB2b2lkCitzb3VwX3JlcXVlc3RfZmlsZV9mdHBfbWFpbl9sb29wX3F1aXQgKEdPYmplY3Qg
ICAgICAqb2JqZWN0LAorCQkJCSAgICAgIEdBc3luY1Jlc3VsdCAqcmVzdWx0LAorCQkJCSAgICAg
IGdwb2ludGVyIGxvb3ApCit7CisJZ19tYWluX2xvb3BfcXVpdCAobG9vcCk7Cit9CisKKy8qIFRo
aXMgaXMgYSBzb21ld2hhdCBoYWNreSB3YXkgdG8gZ2V0IEZUUCB0byBhbG1vc3Qgd29yay4gVGhl
IHByb3BlciB3YXkgdG8KKyAqIGdldCBGVFAgdG8gX3JlYWxseV8gd29yayBpbnZvbHZlcyBoYWNr
aW5nIEdJTyB0byBoYXZlIEFQSXMgdG8gaGFuZGxlCisgKiBjYW5vbmNpYWwgVVJMcy4KKyAqLwor
c3RhdGljIEdGaWxlICoKK3NvdXBfcmVxdWVzdF9maWxlX2Vuc3VyZV9maWxlX2Z0cCAoU291cFVS
SSAgICAgICAqdXJpLAorCQkJCSAgIEdDYW5jZWxsYWJsZSAgKmNhbmNlbGxhYmxlLAorCQkJCSAg
IEdFcnJvciAgICAgICAqKmVycm9yKQoreworCVNvdXBVUkkgKmhvc3Q7CisJY2hhciAqczsKKwlH
RmlsZSAqZmlsZSwgKnJlc3VsdDsKKwlHTW91bnQgKm1vdW50OworCisJaG9zdCA9IHNvdXBfdXJp
X2NvcHlfaG9zdCAodXJpKTsKKwlzID0gc291cF91cmlfdG9fc3RyaW5nIChob3N0LCBGQUxTRSk7
CisJZmlsZSA9IGdfZmlsZV9uZXdfZm9yX3VyaSAocyk7CisJc291cF91cmlfZnJlZSAoaG9zdCk7
CisJZ19mcmVlIChzKTsKKworCW1vdW50ID0gZ19maWxlX2ZpbmRfZW5jbG9zaW5nX21vdW50IChm
aWxlLCBjYW5jZWxsYWJsZSwgZXJyb3IpOworCWlmIChtb3VudCA9PSBOVUxMICYmIGdfZmlsZV9z
dXBwb3J0c190aHJlYWRfY29udGV4dHMgKGZpbGUpKSB7CisJCUdNYWluQ29udGV4dCAqY29udGV4
dCA9IGdfbWFpbl9jb250ZXh0X25ldyAoKTsKKwkJR01haW5Mb29wICpsb29wID0gZ19tYWluX2xv
b3BfbmV3IChjb250ZXh0LCBGQUxTRSk7CisKKwkJZ19jbGVhcl9lcnJvciAoZXJyb3IpOworCQln
X21haW5fY29udGV4dF9wdXNoX3RocmVhZF9kZWZhdWx0IChjb250ZXh0KTsKKwkJZ19maWxlX21v
dW50X2VuY2xvc2luZ192b2x1bWUgKGZpbGUsCisJCQkJCSAgICAgICBHX01PVU5UX01PVU5UX05P
TkUsCisJCQkJCSAgICAgICBOVUxMLCAvKiBGSVhNRSEgKi8KKwkJCQkJICAgICAgIGNhbmNlbGxh
YmxlLAorCQkJCQkgICAgICAgc291cF9yZXF1ZXN0X2ZpbGVfZnRwX21haW5fbG9vcF9xdWl0LAor
CQkJCQkgICAgICAgbG9vcCk7CisJCWdfbWFpbl9sb29wX3J1biAobG9vcCk7CisJCWdfbWFpbl9j
b250ZXh0X3BvcF90aHJlYWRfZGVmYXVsdCAoY29udGV4dCk7CisJCWdfbWFpbl9sb29wX3VucmVm
IChsb29wKTsKKwkJZ19tYWluX2NvbnRleHRfdW5yZWYgKGNvbnRleHQpOworCQltb3VudCA9IGdf
ZmlsZV9maW5kX2VuY2xvc2luZ19tb3VudCAoZmlsZSwgY2FuY2VsbGFibGUsIGVycm9yKTsKKwl9
CisJaWYgKG1vdW50ID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCWdfb2JqZWN0X3VucmVmIChm
aWxlKTsKKworCWZpbGUgPSBnX21vdW50X2dldF9kZWZhdWx0X2xvY2F0aW9uIChtb3VudCk7CisJ
Z19vYmplY3RfdW5yZWYgKG1vdW50KTsKKworCXMgPSBnX3N0cmR1cCAodXJpLT5wYXRoKTsKKwlp
ZiAoc3RyY2hyIChzLCAnOycpKQorCQkqc3RyY2hyIChzLCAnOycpID0gMDsKKworCXJlc3VsdCA9
IGdfZmlsZV9yZXNvbHZlX3JlbGF0aXZlX3BhdGggKGZpbGUsIHMpOworCWdfZnJlZSAocyk7CisJ
Z19vYmplY3RfdW5yZWYgKGZpbGUpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdi
b29sZWFuCitzb3VwX3JlcXVlc3RfZmlsZV9lbnN1cmVfZmlsZSAoU291cFJlcXVlc3RGaWxlICAq
ZmlsZSwKKwkJCSAgICAgICBHQ2FuY2VsbGFibGUgICAgICpjYW5jZWxsYWJsZSwKKwkJCSAgICAg
ICBHRXJyb3IgICAgICAgICAgKiplcnJvcikKK3sKKwlTb3VwVVJJICp1cmk7CisKKwlpZiAoZmls
ZS0+cHJpdi0+Z2ZpbGUpCisJCXJldHVybiBUUlVFOworCisJdXJpID0gc291cF9yZXF1ZXN0X2dl
dF91cmkgKFNPVVBfUkVRVUVTVCAoZmlsZSkpOworCWlmICh1cmktPnNjaGVtZSA9PSBTT1VQX1VS
SV9TQ0hFTUVfRklMRSkgeworCQlmaWxlLT5wcml2LT5nZmlsZSA9IGdfZmlsZV9uZXdfZm9yX3Bh
dGggKHVyaS0+cGF0aCk7CisJCXJldHVybiBUUlVFOworCX0gZWxzZSBpZiAodXJpLT5zY2hlbWUg
PT0gU09VUF9VUklfU0NIRU1FX0ZUUCkgeworCQlmaWxlLT5wcml2LT5nZmlsZSA9IHNvdXBfcmVx
dWVzdF9maWxlX2Vuc3VyZV9maWxlX2Z0cCAodXJpLAorCQkJCQkJCQkgICAgICAgY2FuY2VsbGFi
bGUsCisJCQkJCQkJCSAgICAgICBlcnJvcik7CisJCXJldHVybiBmaWxlLT5wcml2LT5nZmlsZSAh
PSBOVUxMOworCX0KKworCWdfc2V0X2Vycm9yIChlcnJvciwgU09VUF9FUlJPUiwgU09VUF9FUlJP
Ul9VTlNVUFBPUlRFRF9VUklfU0NIRU1FLAorCQkgICAgIF8gKCJVbnN1cHBvcnRlZCBVUkkgc2No
ZW1lICclcyciKSwgdXJpLT5zY2hlbWUpOworCXJldHVybiBGQUxTRTsKK30KKworc3RhdGljIEdJ
bnB1dFN0cmVhbSAqCitzb3VwX3JlcXVlc3RfZmlsZV9zZW5kIChTb3VwUmVxdWVzdCAgICAgICAg
ICAqcmVxdWVzdCwKKwkJCUdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCUdF
cnJvciAgICAgICAgICAgICAgKiplcnJvcikKK3sKKwlTb3VwUmVxdWVzdEZpbGUgKmZpbGUgPSBT
T1VQX1JFUVVFU1RfRklMRSAocmVxdWVzdCk7CisJR0lucHV0U3RyZWFtICpzdHJlYW07CisJR0Vy
cm9yICpteV9lcnJvciA9IE5VTEw7CisKKwlpZiAoIXNvdXBfcmVxdWVzdF9maWxlX2Vuc3VyZV9m
aWxlIChmaWxlLCBjYW5jZWxsYWJsZSwgZXJyb3IpKQorCQlyZXR1cm4gTlVMTDsKKworCXN0cmVh
bSA9IEdfSU5QVVRfU1RSRUFNIChnX2ZpbGVfcmVhZCAoZmlsZS0+cHJpdi0+Z2ZpbGUsCisJCQkJ
CSAgICAgIGNhbmNlbGxhYmxlLCAmbXlfZXJyb3IpKTsKKwlpZiAoc3RyZWFtID09IE5VTEwpIHsK
KwkJaWYgKGdfZXJyb3JfbWF0Y2hlcyAobXlfZXJyb3IsIEdfSU9fRVJST1IsIEdfSU9fRVJST1Jf
SVNfRElSRUNUT1JZKSkgeworCQkJR0ZpbGVFbnVtZXJhdG9yICplbnVtZXJhdG9yOworCQkJZ19j
bGVhcl9lcnJvciAoJm15X2Vycm9yKTsKKwkJCWVudW1lcmF0b3IgPSBnX2ZpbGVfZW51bWVyYXRl
X2NoaWxkcmVuIChmaWxlLT5wcml2LT5nZmlsZSwKKwkJCQkJCQkJIioiLAorCQkJCQkJCQlHX0ZJ
TEVfUVVFUllfSU5GT19OT05FLAorCQkJCQkJCQljYW5jZWxsYWJsZSwKKwkJCQkJCQkJZXJyb3Ip
OworCQkJaWYgKGVudW1lcmF0b3IpIHsKKwkJCQlzdHJlYW0gPSBzb3VwX2RpcmVjdG9yeV9pbnB1
dF9zdHJlYW1fbmV3IChlbnVtZXJhdG9yLAorCQkJCQkJCQkJICBzb3VwX3JlcXVlc3RfZ2V0X3Vy
aSAocmVxdWVzdCkpOworCQkJCWdfb2JqZWN0X3VucmVmIChlbnVtZXJhdG9yKTsKKwkJCQlmaWxl
LT5wcml2LT5taW1lX3R5cGUgPSBnX3N0cmR1cCAoInRleHQvaHRtbCIpOworCQkJfQorCQl9IGVs
c2UgeworCQkJZ19wcm9wYWdhdGVfZXJyb3IgKGVycm9yLCBteV9lcnJvcik7CisJCX0KKwl9IGVs
c2UgeworCQlHRmlsZUluZm8gKmluZm8gPSBnX2ZpbGVfcXVlcnlfaW5mbyAoZmlsZS0+cHJpdi0+
Z2ZpbGUsCisJCQkJCQkgICAgIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfQ09OVEVOVF9UWVBF
ICIsIgorCQkJCQkJICAgICBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX1NJWkUsCisJCQkJCQkg
ICAgIDAsIGNhbmNlbGxhYmxlLCBOVUxMKTsKKwkJaWYgKGluZm8pIHsKKwkJCWNvbnN0IGNoYXIg
KmNvbnRlbnRfdHlwZTsKKwkJCWZpbGUtPnByaXYtPnNpemUgPSBnX2ZpbGVfaW5mb19nZXRfc2l6
ZSAoaW5mbyk7CisJCQljb250ZW50X3R5cGUgPSBnX2ZpbGVfaW5mb19nZXRfY29udGVudF90eXBl
IChpbmZvKTsKKworCQkJaWYgKGNvbnRlbnRfdHlwZSkKKwkJCQlmaWxlLT5wcml2LT5taW1lX3R5
cGUgPSBnX2NvbnRlbnRfdHlwZV9nZXRfbWltZV90eXBlIChjb250ZW50X3R5cGUpOworCQkJZ19v
YmplY3RfdW5yZWYgKGluZm8pOworCQl9CisJfQorCisJcmV0dXJuIHN0cmVhbTsKK30KKworc3Rh
dGljIHZvaWQKK3NvdXBfcmVxdWVzdF9maWxlX3NlbmRfYXN5bmNfdGhyZWFkIChHU2ltcGxlQXN5
bmNSZXN1bHQgKnJlcywKKwkJCQkgICAgIEdPYmplY3QgICAgICAgICAgICAqb2JqZWN0LAorCQkJ
CSAgICAgR0NhbmNlbGxhYmxlICAgICAgICpjYW5jZWxsYWJsZSkKK3sKKwlHSW5wdXRTdHJlYW0g
KnN0cmVhbTsKKwlTb3VwUmVxdWVzdCAqcmVxdWVzdDsKKwlHRXJyb3IgKmVycm9yID0gTlVMTDsK
KworCXJlcXVlc3QgPSBTT1VQX1JFUVVFU1QgKG9iamVjdCk7CisKKwlzdHJlYW0gPSBzb3VwX3Jl
cXVlc3RfZmlsZV9zZW5kIChyZXF1ZXN0LCBjYW5jZWxsYWJsZSwgJmVycm9yKTsKKworCWlmIChz
dHJlYW0gPT0gTlVMTCkgeworCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X2Zyb21fZXJyb3Ig
KHJlcywgZXJyb3IpOworCQlnX2Vycm9yX2ZyZWUgKGVycm9yKTsKKwl9IGVsc2UgeworCQlnX3Np
bXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19ncG9pbnRlciAocmVzLCBzdHJlYW0sIGdfb2Jq
ZWN0X3VucmVmKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX3JlcXVlc3RfZmlsZV9zZW5k
X2FzeW5jIChTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKKwkJCSAgICAgIEdDYW5jZWxs
YWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCSAgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sg
Y2FsbGJhY2ssCisJCQkgICAgICBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJR1NpbXBsZUFzeW5j
UmVzdWx0ICpyZXM7CisKKwlyZXMgPSBnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3IChHX09CSkVD
VCAocmVxdWVzdCksIGNhbGxiYWNrLCB1c2VyX2RhdGEsIHNvdXBfcmVxdWVzdF9maWxlX3NlbmRf
YXN5bmMpOworCisJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3J1bl9pbl90aHJlYWQgKHJlcywgc291
cF9yZXF1ZXN0X2ZpbGVfc2VuZF9hc3luY190aHJlYWQsIEdfUFJJT1JJVFlfREVGQVVMVCwgY2Fu
Y2VsbGFibGUpOworCWdfb2JqZWN0X3VucmVmIChyZXMpOworfQorCitzdGF0aWMgR0lucHV0U3Ry
ZWFtICoKK3NvdXBfcmVxdWVzdF9maWxlX3NlbmRfZmluaXNoIChTb3VwUmVxdWVzdCAgICAgICAg
ICAqcmVxdWVzdCwKKwkJCSAgICAgICBHQXN5bmNSZXN1bHQgICAgICAgICAqcmVzdWx0LAorCQkJ
ICAgICAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcikKK3sKKwlHU2ltcGxlQXN5bmNSZXN1
bHQgKnNpbXBsZSA9IEdfU0lNUExFX0FTWU5DX1JFU1VMVCAocmVzdWx0KTsKKworCWdfd2Fybl9p
Zl9mYWlsIChnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X3NvdXJjZV90YWcgKHNpbXBsZSkgPT0g
c291cF9yZXF1ZXN0X2ZpbGVfc2VuZF9hc3luYyk7CisKKwlpZiAoZ19zaW1wbGVfYXN5bmNfcmVz
dWx0X3Byb3BhZ2F0ZV9lcnJvciAoc2ltcGxlLCBlcnJvcikpCisJCXJldHVybiBOVUxMOworCisJ
cmV0dXJuIGdfb2JqZWN0X3JlZiAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9vcF9yZXNfZ3Bv
aW50ZXIgKHNpbXBsZSkpOworfQorCitzdGF0aWMgZ29mZnNldAorc291cF9yZXF1ZXN0X2ZpbGVf
Z2V0X2NvbnRlbnRfbGVuZ3RoIChTb3VwUmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlTb3VwUmVxdWVz
dEZpbGUgKmZpbGUgPSBTT1VQX1JFUVVFU1RfRklMRSAocmVxdWVzdCk7CisKKwlyZXR1cm4gZmls
ZS0+cHJpdi0+c2l6ZTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorc291cF9yZXF1ZXN0X2Zp
bGVfZ2V0X2NvbnRlbnRfdHlwZSAoU291cFJlcXVlc3QgKnJlcXVlc3QpCit7CisJU291cFJlcXVl
c3RGaWxlICpmaWxlID0gU09VUF9SRVFVRVNUX0ZJTEUgKHJlcXVlc3QpOworCisJaWYgKCFmaWxl
LT5wcml2LT5taW1lX3R5cGUpCisJCXJldHVybiAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIjsK
KworCXJldHVybiBmaWxlLT5wcml2LT5taW1lX3R5cGU7Cit9CisKK3N0YXRpYyB2b2lkCitzb3Vw
X3JlcXVlc3RfZmlsZV9jbGFzc19pbml0IChTb3VwUmVxdWVzdEZpbGVDbGFzcyAqcmVxdWVzdF9m
aWxlX2NsYXNzKQoreworCUdPYmplY3RDbGFzcyAqb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xB
U1MgKHJlcXVlc3RfZmlsZV9jbGFzcyk7CisJU291cFJlcXVlc3RDbGFzcyAqcmVxdWVzdF9jbGFz
cyA9CisJCVNPVVBfUkVRVUVTVF9DTEFTUyAocmVxdWVzdF9maWxlX2NsYXNzKTsKKworCWdfdHlw
ZV9jbGFzc19hZGRfcHJpdmF0ZSAocmVxdWVzdF9maWxlX2NsYXNzLCBzaXplb2YgKFNvdXBSZXF1
ZXN0RmlsZVByaXZhdGUpKTsKKworCW9iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBzb3VwX3JlcXVl
c3RfZmlsZV9maW5hbGl6ZTsKKworCXJlcXVlc3RfY2xhc3MtPmNoZWNrX3VyaSA9IHNvdXBfcmVx
dWVzdF9maWxlX2NoZWNrX3VyaTsKKwlyZXF1ZXN0X2NsYXNzLT5zZW5kID0gc291cF9yZXF1ZXN0
X2ZpbGVfc2VuZDsKKwlyZXF1ZXN0X2NsYXNzLT5zZW5kX2FzeW5jID0gc291cF9yZXF1ZXN0X2Zp
bGVfc2VuZF9hc3luYzsKKwlyZXF1ZXN0X2NsYXNzLT5zZW5kX2ZpbmlzaCA9IHNvdXBfcmVxdWVz
dF9maWxlX3NlbmRfZmluaXNoOworCXJlcXVlc3RfY2xhc3MtPmdldF9jb250ZW50X2xlbmd0aCA9
IHNvdXBfcmVxdWVzdF9maWxlX2dldF9jb250ZW50X2xlbmd0aDsKKwlyZXF1ZXN0X2NsYXNzLT5n
ZXRfY29udGVudF90eXBlID0gc291cF9yZXF1ZXN0X2ZpbGVfZ2V0X2NvbnRlbnRfdHlwZTsKK30K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVx
dWVzdC1maWxlLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJl
cXVlc3QtZmlsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkODhkM2QK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9z
b3VwLXJlcXVlc3QtZmlsZS5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWZuZGVmIFNPVVBfUkVRVUVTVF9GSUxFX0gKKyNkZWZpbmUgU09VUF9SRVFVRVNUX0ZJTEVfSCAx
CisKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3QuaCIKKworR19CRUdJTl9ERUNMUworCisjZGVmaW5l
IFNPVVBfVFlQRV9SRVFVRVNUX0ZJTEUgICAgICAgICAgICAoc291cF9yZXF1ZXN0X2ZpbGVfZ2V0
X3R5cGUgKCkpCisjZGVmaW5lIFNPVVBfUkVRVUVTVF9GSUxFKG9iamVjdCkgICAgICAgICAoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmplY3QpLCBTT1VQX1RZUEVfUkVRVUVTVF9GSUxF
LCBTb3VwUmVxdWVzdEZpbGUpKQorI2RlZmluZSBTT1VQX1JFUVVFU1RfRklMRV9DTEFTUyhrbGFz
cykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBTT1VQX1RZUEVfUkVRVUVT
VF9GSUxFLCBTb3VwUmVxdWVzdEZpbGVDbGFzcykpCisjZGVmaW5lIFNPVVBfSVNfUkVRVUVTVF9G
SUxFKG9iamVjdCkgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmplY3QpLCBT
T1VQX1RZUEVfUkVRVUVTVF9GSUxFKSkKKyNkZWZpbmUgU09VUF9JU19SRVFVRVNUX0ZJTEVfQ0xB
U1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgU09VUF9UWVBFX1JF
UVVFU1RfRklMRSkpCisjZGVmaW5lIFNPVVBfUkVRVUVTVF9GSUxFX0dFVF9DTEFTUyhvYmopICAo
R19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIFNPVVBfVFlQRV9SRVFVRVNUX0ZJTEUs
IFNvdXBSZXF1ZXN0RmlsZUNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1NvdXBSZXF1ZXN0Rmls
ZVByaXZhdGUgU291cFJlcXVlc3RGaWxlUHJpdmF0ZTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCVNv
dXBSZXF1ZXN0IHBhcmVudDsKKworCVNvdXBSZXF1ZXN0RmlsZVByaXZhdGUgKnByaXY7Cit9IFNv
dXBSZXF1ZXN0RmlsZTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCVNvdXBSZXF1ZXN0Q2xhc3MgcGFy
ZW50OworfSBTb3VwUmVxdWVzdEZpbGVDbGFzczsKKworR1R5cGUgc291cF9yZXF1ZXN0X2ZpbGVf
Z2V0X3R5cGUgKHZvaWQpOworCitHRmlsZSAgKnNvdXBfcmVxdWVzdF9maWxlX2dldF9maWxlIChT
b3VwUmVxdWVzdEZpbGUgKmZpbGUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogU09VUF9S
RVFVRVNUX0ZJTEVfSCAqLwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuYyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uODczYzJiZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRwLmMKQEAgLTAsMCArMSwzMzkgQEAKKy8q
CisgKiBzb3VwLXJlcXVlc3QtaHR0cC5jOiBodHRwOiBVUkkgcmVxdWVzdCBvYmplY3QKKyAqCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEw
IElnYWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgor
I2VuZGlmCisKKyNpbmNsdWRlIDxnbGliL2dpMThuLmg+CisKKyNpbmNsdWRlICJzb3VwLWNhY2hl
LmgiCisjaW5jbHVkZSAic291cC1jYWNoZS1wcml2YXRlLmgiCisjaW5jbHVkZSAic291cC1odHRw
LWlucHV0LXN0cmVhbS5oIgorI2luY2x1ZGUgInNvdXAtcmVxdWVzdC1odHRwLmgiCisKK0dfREVG
SU5FX1RZUEUgKFNvdXBSZXF1ZXN0SFRUUCwgc291cF9yZXF1ZXN0X2h0dHAsIFNPVVBfVFlQRV9S
RVFVRVNUKQorCitzdHJ1Y3QgX1NvdXBSZXF1ZXN0SFRUUFByaXZhdGUgeworCVNvdXBNZXNzYWdl
ICptc2c7Cit9OworCisvKioKKyAqIHNvdXBfcmVxdWVzdF9odHRwX2dldF9tZXNzYWdlOgorICog
QGh0dHA6IGEgI1NvdXBSZXF1ZXN0SFRUUCBvYmplY3QKKyAqCisgKiBHZXRzIGEgbmV3IHJlZmVy
ZW5jZSB0byB0aGUgI1NvdXBNZXNzYWdlIGFzc29jaWF0ZWQgdG8gdGhpcyBTb3VwUmVxdWVzdAor
ICoKKyAqIFJldHVybnM6IGEgbmV3IHJlZmVyZW5jZSB0byB0aGUgI1NvdXBNZXNzYWdlCisgKiov
CitTb3VwTWVzc2FnZSAqCitzb3VwX3JlcXVlc3RfaHR0cF9nZXRfbWVzc2FnZSAoU291cFJlcXVl
c3RIVFRQICpodHRwKQoreworCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChTT1VQX0lTX1JFUVVFU1Rf
SFRUUCAoaHR0cCksIE5VTEwpOworCisJcmV0dXJuIGdfb2JqZWN0X3JlZiAoaHR0cC0+cHJpdi0+
bXNnKTsKK30KKworc3RhdGljIHZvaWQKK3NvdXBfcmVxdWVzdF9odHRwX2luaXQgKFNvdXBSZXF1
ZXN0SFRUUCAqaHR0cCkKK3sKKwlodHRwLT5wcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklW
QVRFIChodHRwLCBTT1VQX1RZUEVfUkVRVUVTVF9IVFRQLCBTb3VwUmVxdWVzdEhUVFBQcml2YXRl
KTsKK30KKworc3RhdGljIGdib29sZWFuCitzb3VwX3JlcXVlc3RfaHR0cF9jaGVja191cmkgKFNv
dXBSZXF1ZXN0ICAqcmVxdWVzdCwKKwkJCSAgICAgU291cFVSSSAgICAgICp1cmksCisJCQkgICAg
IEdFcnJvciAgICAgICoqZXJyb3IpCit7CisJU291cFJlcXVlc3RIVFRQICpodHRwID0gU09VUF9S
RVFVRVNUX0hUVFAgKHJlcXVlc3QpOworCisJaWYgKCFTT1VQX1VSSV9WQUxJRF9GT1JfSFRUUCAo
dXJpKSkKKwkJcmV0dXJuIEZBTFNFOworCisJaHR0cC0+cHJpdi0+bXNnID0gc291cF9tZXNzYWdl
X25ld19mcm9tX3VyaSAoU09VUF9NRVRIT0RfR0VULCB1cmkpOworCXJldHVybiBUUlVFOworfQor
CitzdGF0aWMgdm9pZAorc291cF9yZXF1ZXN0X2h0dHBfZmluYWxpemUgKEdPYmplY3QgKm9iamVj
dCkKK3sKKwlTb3VwUmVxdWVzdEhUVFAgKmh0dHAgPSBTT1VQX1JFUVVFU1RfSFRUUCAob2JqZWN0
KTsKKworCWlmIChodHRwLT5wcml2LT5tc2cpCisJCWdfb2JqZWN0X3VucmVmIChodHRwLT5wcml2
LT5tc2cpOworCisJR19PQkpFQ1RfQ0xBU1MgKHNvdXBfcmVxdWVzdF9odHRwX3BhcmVudF9jbGFz
cyktPmZpbmFsaXplIChvYmplY3QpOworfQorCitzdGF0aWMgR0lucHV0U3RyZWFtICoKK3NvdXBf
cmVxdWVzdF9odHRwX3NlbmQgKFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAorCQkJR0Nh
bmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJR0Vycm9yICAgICAgICAgICAgICAq
KmVycm9yKQoreworCVNvdXBIVFRQSW5wdXRTdHJlYW0gKmh0dHBzdHJlYW07CisJU291cFJlcXVl
c3RIVFRQICpodHRwID0gU09VUF9SRVFVRVNUX0hUVFAgKHJlcXVlc3QpOworCisJaHR0cHN0cmVh
bSA9IHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fbmV3IChzb3VwX3JlcXVlc3RfZ2V0X3Nlc3Npb24g
KHJlcXVlc3QpLCBodHRwLT5wcml2LT5tc2cpOworCWlmICghc291cF9odHRwX2lucHV0X3N0cmVh
bV9zZW5kIChodHRwc3RyZWFtLCBjYW5jZWxsYWJsZSwgZXJyb3IpKSB7CisJCWdfb2JqZWN0X3Vu
cmVmIChodHRwc3RyZWFtKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiAoR0lucHV0U3Ry
ZWFtICopaHR0cHN0cmVhbTsKK30KKworCitzdGF0aWMgdm9pZAorc2VudF9hc3luYyAoR09iamVj
dCAqc291cmNlLCBHQXN5bmNSZXN1bHQgKnJlc3VsdCwgZ3BvaW50ZXIgdXNlcl9kYXRhKQorewor
CVNvdXBIVFRQSW5wdXRTdHJlYW0gKmh0dHBzdHJlYW0gPSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFN
IChzb3VyY2UpOworCUdTaW1wbGVBc3luY1Jlc3VsdCAqc2ltcGxlID0gdXNlcl9kYXRhOworCUdF
cnJvciAqZXJyb3IgPSBOVUxMOworCisJaWYgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9m
aW5pc2ggKGh0dHBzdHJlYW0sIHJlc3VsdCwgJmVycm9yKSkgeworCQlnX3NpbXBsZV9hc3luY19y
ZXN1bHRfc2V0X29wX3Jlc19ncG9pbnRlciAoc2ltcGxlLCBodHRwc3RyZWFtLCBnX29iamVjdF91
bnJlZik7CisJfSBlbHNlIHsKKwkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9mcm9tX2Vycm9y
IChzaW1wbGUsIGVycm9yKTsKKwkJZ19lcnJvcl9mcmVlIChlcnJvcik7CisJCWdfb2JqZWN0X3Vu
cmVmIChodHRwc3RyZWFtKTsKKwl9CisJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlIChz
aW1wbGUpOworCWdfb2JqZWN0X3VucmVmIChzaW1wbGUpOworfQorCisKK3R5cGVkZWYgc3RydWN0
IHsKKwlTb3VwUmVxdWVzdEhUVFAgKnJlcTsKKwlTb3VwTWVzc2FnZSAqb3JpZ2luYWw7CisJR0Nh
bmNlbGxhYmxlICpjYW5jZWxsYWJsZTsKKwlHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrOwor
CWdwb2ludGVyIHVzZXJfZGF0YTsKK30gQ29uZGl0aW9uYWxIZWxwZXI7CisKKworc3RhdGljIHZv
aWQKK2NvbmRpdGlvbmFsX2dldF9yZWFkeV9jYiAoU291cFNlc3Npb24gKnNlc3Npb24sIFNvdXBN
ZXNzYWdlICptc2csIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlDb25kaXRpb25hbEhlbHBlciAq
aGVscGVyID0gKENvbmRpdGlvbmFsSGVscGVyICopdXNlcl9kYXRhOworCUdTaW1wbGVBc3luY1Jl
c3VsdCAqc2ltcGxlOworCVNvdXBIVFRQSW5wdXRTdHJlYW0gKmh0dHBzdHJlYW07CisKKwlzaW1w
bGUgPSBnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3IChHX09CSkVDVCAoaGVscGVyLT5yZXEpLAor
CQkJCQkgICAgaGVscGVyLT5jYWxsYmFjaywgaGVscGVyLT51c2VyX2RhdGEsCisJCQkJCSAgICBj
b25kaXRpb25hbF9nZXRfcmVhZHlfY2IpOworCisJaWYgKG1zZy0+c3RhdHVzX2NvZGUgPT0gU09V
UF9TVEFUVVNfTk9UX01PRElGSUVEKSB7CisJCVdlYktpdFNvdXBDYWNoZSAqY2FjaGUgPSAoV2Vi
S2l0U291cENhY2hlICopc291cF9zZXNzaW9uX2dldF9mZWF0dXJlIChzZXNzaW9uLCBXRUJLSVRf
VFlQRV9TT1VQX0NBQ0hFKTsKKworCQlodHRwc3RyZWFtID0gKFNvdXBIVFRQSW5wdXRTdHJlYW0g
Kil3ZWJraXRfc291cF9jYWNoZV9zZW5kX3Jlc3BvbnNlIChjYWNoZSwgbXNnKTsKKwkJaWYgKGh0
dHBzdHJlYW0pIHsKKwkJCWNvbnN0IGdjaGFyICpjb250ZW50X3R5cGU7CisKKwkJCWdfc2ltcGxl
X2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dwb2ludGVyIChzaW1wbGUsIGh0dHBzdHJlYW0sIGdf
b2JqZWN0X3VucmVmKTsKKworCQkJc291cF9tZXNzYWdlX2dvdF9oZWFkZXJzIChoZWxwZXItPm9y
aWdpbmFsKTsKKwkJCWNvbnRlbnRfdHlwZSA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9jb250
ZW50X3R5cGUgKG1zZy0+cmVzcG9uc2VfaGVhZGVycywgTlVMTCk7CisJCQlzb3VwX21lc3NhZ2Vf
Y29udGVudF9zbmlmZmVkIChoZWxwZXItPm9yaWdpbmFsLCBjb250ZW50X3R5cGUsIE5VTEwpOwor
CisJCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGUgKHNpbXBsZSk7CisKKwkJCXNvdXBf
bWVzc2FnZV9maW5pc2hlZCAoaGVscGVyLT5vcmlnaW5hbCk7CisKKwkJCWdfb2JqZWN0X3VucmVm
IChzaW1wbGUpOworCQl9IGVsc2UgeworCQkJLyogQXNrIGFnYWluIGZvciB0aGUgcmVzb3VyY2Us
IHNvbWVob3cgdGhlIGNhY2hlIGNhbm5vdCBsb2NhdGUgaXQgKi8KKwkJCWh0dHBzdHJlYW0gPSBz
b3VwX2h0dHBfaW5wdXRfc3RyZWFtX25ldyAoc2Vzc2lvbiwgaGVscGVyLT5vcmlnaW5hbCk7CisJ
CQlzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmMgKGh0dHBzdHJlYW0sIEdfUFJJT1JJ
VFlfREVGQVVMVCwKKwkJCQkJCQkgICBoZWxwZXItPmNhbmNlbGxhYmxlLCBzZW50X2FzeW5jLCBz
aW1wbGUpOworCQl9CisJfSBlbHNlIHsKKwkJLyogSXQgaXMgaW4gdGhlIGNhY2hlIGJ1dCBpdCB3
YXMgbW9kaWZpZWQgcmVtb3RlbHkgKi8KKwkJaHR0cHN0cmVhbSA9IHNvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fbmV3IChzZXNzaW9uLCBoZWxwZXItPm9yaWdpbmFsKTsKKwkJc291cF9odHRwX2lucHV0
X3N0cmVhbV9zZW5kX2FzeW5jIChodHRwc3RyZWFtLCBHX1BSSU9SSVRZX0RFRkFVTFQsCisJCQkJ
CQkgICBoZWxwZXItPmNhbmNlbGxhYmxlLCBzZW50X2FzeW5jLCBzaW1wbGUpOworCX0KKworCWdf
b2JqZWN0X3VucmVmIChoZWxwZXItPnJlcSk7CisJZ19vYmplY3RfdW5yZWYgKGhlbHBlci0+b3Jp
Z2luYWwpOworCWdfc2xpY2VfZnJlZSAoQ29uZGl0aW9uYWxIZWxwZXIsIGhlbHBlcik7Cit9CisK
K3R5cGVkZWYgc3RydWN0IHsKKwlTb3VwUmVxdWVzdEhUVFAgKmh0dHA7CisJR0FzeW5jUmVhZHlD
YWxsYmFjayBjYWxsYmFjazsKKwlncG9pbnRlciB1c2VyX2RhdGE7Cit9IFNlbmRBc3luY0hlbHBl
cjsKKworc3RhdGljIHZvaWQgc291cF9yZXF1ZXN0X2h0dHBfc2VuZF9hc3luYyAoU291cFJlcXVl
c3QgICAgICAgICAgKnJlcXVlc3QsCisJCQkJCSAgR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNl
bGxhYmxlLAorCQkJCQkgIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCisJCQkJCSAgZ3Bv
aW50ZXIgdXNlcl9kYXRhKTsKKworc3RhdGljIGdib29sZWFuCitzZW5kX2FzeW5jX2NiIChncG9p
bnRlciBkYXRhKQoreworCUdTaW1wbGVBc3luY1Jlc3VsdCAqc2ltcGxlOworCVNvdXBIVFRQSW5w
dXRTdHJlYW0gKmh0dHBzdHJlYW07CisJU291cFNlc3Npb24gKnNlc3Npb247CisJV2ViS2l0U291
cENhY2hlICpjYWNoZTsKKwlTZW5kQXN5bmNIZWxwZXIgKmhlbHBlciA9IChTZW5kQXN5bmNIZWxw
ZXIgKilkYXRhOworCisJc2Vzc2lvbiA9IHNvdXBfcmVxdWVzdF9nZXRfc2Vzc2lvbiAoU09VUF9S
RVFVRVNUIChoZWxwZXItPmh0dHApKTsKKwljYWNoZSA9IChXZWJLaXRTb3VwQ2FjaGUgKilzb3Vw
X3Nlc3Npb25fZ2V0X2ZlYXR1cmUgKHNlc3Npb24sIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUpOwor
CisJaHR0cHN0cmVhbSA9IChTb3VwSFRUUElucHV0U3RyZWFtICopd2Via2l0X3NvdXBfY2FjaGVf
c2VuZF9yZXNwb25zZSAoY2FjaGUsIFNPVVBfTUVTU0FHRSAoaGVscGVyLT5odHRwLT5wcml2LT5t
c2cpKTsKKworCWlmIChodHRwc3RyZWFtKSB7CisJCWNvbnN0IGdjaGFyICpjb250ZW50X3R5cGU7
CisKKwkJc2ltcGxlID0gZ19zaW1wbGVfYXN5bmNfcmVzdWx0X25ldyAoR19PQkpFQ1QgKGhlbHBl
ci0+aHR0cCksCisJCQkJCQkgICAgaGVscGVyLT5jYWxsYmFjaywgaGVscGVyLT51c2VyX2RhdGEs
CisJCQkJCQkgICAgc291cF9yZXF1ZXN0X2h0dHBfc2VuZF9hc3luYyk7CisJCWdfc2ltcGxlX2Fz
eW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dwb2ludGVyIChzaW1wbGUsIGh0dHBzdHJlYW0sIGdfb2Jq
ZWN0X3VucmVmKTsKKworCQkvKiBVcGRhdGUgbWVzc2FnZSBzdGF0dXMgKi8KKwkJc291cF9tZXNz
YWdlX3NldF9zdGF0dXMgKGhlbHBlci0+aHR0cC0+cHJpdi0+bXNnLCBTT1VQX1NUQVRVU19PSyk7
CisKKwkJLyogSXNzdWUgc2lnbmFscyAgKi8KKwkJc291cF9tZXNzYWdlX2dvdF9oZWFkZXJzICho
ZWxwZXItPmh0dHAtPnByaXYtPm1zZyk7CisJCWNvbnRlbnRfdHlwZSA9IHNvdXBfbWVzc2FnZV9o
ZWFkZXJzX2dldF9jb250ZW50X3R5cGUgKGhlbHBlci0+aHR0cC0+cHJpdi0+bXNnLT5yZXNwb25z
ZV9oZWFkZXJzLCBOVUxMKTsKKwkJc291cF9tZXNzYWdlX2NvbnRlbnRfc25pZmZlZCAoaGVscGVy
LT5odHRwLT5wcml2LT5tc2csIGNvbnRlbnRfdHlwZSwgTlVMTCk7CisKKwkJZ19zaW1wbGVfYXN5
bmNfcmVzdWx0X2NvbXBsZXRlIChzaW1wbGUpOworCisJCXNvdXBfbWVzc2FnZV9maW5pc2hlZCAo
aGVscGVyLT5odHRwLT5wcml2LT5tc2cpOworCisJCWdfb2JqZWN0X3VucmVmIChzaW1wbGUpOwor
CX0KKworCWdfc2xpY2VfZnJlZSAoU2VuZEFzeW5jSGVscGVyLCBoZWxwZXIpOworCisJcmV0dXJu
IEZBTFNFOworfQorCitzdGF0aWMgdm9pZAorc291cF9yZXF1ZXN0X2h0dHBfc2VuZF9hc3luYyAo
U291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCisJCQkgICAgICBHQ2FuY2VsbGFibGUgICAg
ICAgICAqY2FuY2VsbGFibGUsCisJCQkgICAgICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNr
LAorCQkJICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCVNvdXBSZXF1ZXN0SFRUUCAqaHR0
cCA9IFNPVVBfUkVRVUVTVF9IVFRQIChyZXF1ZXN0KTsKKwlTb3VwSFRUUElucHV0U3RyZWFtICpo
dHRwc3RyZWFtOworCUdTaW1wbGVBc3luY1Jlc3VsdCAqc2ltcGxlOworCVNvdXBTZXNzaW9uICpz
ZXNzaW9uOworCVdlYktpdFNvdXBDYWNoZSAqY2FjaGU7CisKKwlzZXNzaW9uID0gc291cF9yZXF1
ZXN0X2dldF9zZXNzaW9uIChyZXF1ZXN0KTsKKwljYWNoZSA9IChXZWJLaXRTb3VwQ2FjaGUgKilz
b3VwX3Nlc3Npb25fZ2V0X2ZlYXR1cmUgKHNlc3Npb24sIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUp
OworCisJaWYgKGNhY2hlKSB7CisJCVdlYktpdFNvdXBDYWNoZVJlc3BvbnNlIHJlc3BvbnNlOwor
CisJCXJlc3BvbnNlID0gd2Via2l0X3NvdXBfY2FjaGVfaGFzX3Jlc3BvbnNlIChjYWNoZSwgaHR0
cC0+cHJpdi0+bXNnKTsKKwkJaWYgKHJlc3BvbnNlID09IFdFQktJVF9TT1VQX0NBQ0hFX1JFU1BP
TlNFX0ZSRVNIKSB7CisJCQkvKiBEbyByZXR1cm4gdGhlIHN0cmVhbSBhc3luY2hyb25vdXNseSBh
cyBpbgorCQkJICAgdGhlIG90aGVyIGNhc2VzLiBJdCdzIG5vdCBlbm91Z2ggdG8gdXNlCisJCQkg
ICBnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGVfaW5faWRsZSBhcworCQkJICAgdGhlIHNp
Z25hbHMgbXVzdCBiZSBhbHNvIGVtaXR0ZWQKKwkJCSAgIGFzeW5jaHJvbm91c2x5ICovCisJCQlT
ZW5kQXN5bmNIZWxwZXIgKmhlbHBlciA9IGdfc2xpY2VfbmV3IChTZW5kQXN5bmNIZWxwZXIpOwor
CQkJaGVscGVyLT5odHRwID0gaHR0cDsKKwkJCWhlbHBlci0+Y2FsbGJhY2sgPSBjYWxsYmFjazsK
KwkJCWhlbHBlci0+dXNlcl9kYXRhID0gdXNlcl9kYXRhOworCQkJZ190aW1lb3V0X2FkZCAoMCwg
c2VuZF9hc3luY19jYiwgaGVscGVyKTsKKwkJCXJldHVybjsKKwkJfSBlbHNlIGlmIChyZXNwb25z
ZSA9PSBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9ORUVEU19WQUxJREFUSU9OKSB7CisJCQlT
b3VwTWVzc2FnZSAqY29uZGl0aW9uYWxfbXNnOworCQkJQ29uZGl0aW9uYWxIZWxwZXIgKmhlbHBl
cjsKKworCQkJY29uZGl0aW9uYWxfbXNnID0gd2Via2l0X3NvdXBfY2FjaGVfZ2VuZXJhdGVfY29u
ZGl0aW9uYWxfcmVxdWVzdCAoY2FjaGUsIGh0dHAtPnByaXYtPm1zZyk7CisKKwkJCWhlbHBlciA9
IGdfc2xpY2VfbmV3MCAoQ29uZGl0aW9uYWxIZWxwZXIpOworCQkJaGVscGVyLT5yZXEgPSBnX29i
amVjdF9yZWYgKGh0dHApOworCQkJaGVscGVyLT5vcmlnaW5hbCA9IGdfb2JqZWN0X3JlZiAoaHR0
cC0+cHJpdi0+bXNnKTsKKwkJCWhlbHBlci0+Y2FuY2VsbGFibGUgPSBjYW5jZWxsYWJsZTsKKwkJ
CWhlbHBlci0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKwkJCWhlbHBlci0+dXNlcl9kYXRhID0gdXNl
cl9kYXRhOworCQkJc291cF9zZXNzaW9uX3F1ZXVlX21lc3NhZ2UgKHNlc3Npb24sIGNvbmRpdGlv
bmFsX21zZywKKwkJCQkJCSAgICBjb25kaXRpb25hbF9nZXRfcmVhZHlfY2IsCisJCQkJCQkgICAg
aGVscGVyKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCXNpbXBsZSA9IGdfc2ltcGxlX2FzeW5j
X3Jlc3VsdF9uZXcgKEdfT0JKRUNUIChodHRwKSwKKwkJCQkJICAgIGNhbGxiYWNrLCB1c2VyX2Rh
dGEsCisJCQkJCSAgICBzb3VwX3JlcXVlc3RfaHR0cF9zZW5kX2FzeW5jKTsKKwlodHRwc3RyZWFt
ID0gc291cF9odHRwX2lucHV0X3N0cmVhbV9uZXcgKHNvdXBfcmVxdWVzdF9nZXRfc2Vzc2lvbiAo
cmVxdWVzdCksCisJCQkJCQkgaHR0cC0+cHJpdi0+bXNnKTsKKwlzb3VwX2h0dHBfaW5wdXRfc3Ry
ZWFtX3NlbmRfYXN5bmMgKGh0dHBzdHJlYW0sIEdfUFJJT1JJVFlfREVGQVVMVCwKKwkJCQkJICAg
Y2FuY2VsbGFibGUsIHNlbnRfYXN5bmMsIHNpbXBsZSk7Cit9CisKK3N0YXRpYyBHSW5wdXRTdHJl
YW0gKgorc291cF9yZXF1ZXN0X2h0dHBfc2VuZF9maW5pc2ggKFNvdXBSZXF1ZXN0ICAgICAgICAg
ICpyZXF1ZXN0LAorCQkJICAgICAgIEdBc3luY1Jlc3VsdCAgICAgICAgICpyZXN1bHQsCisJCQkg
ICAgICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKQoreworCUdTaW1wbGVBc3luY1Jlc3Vs
dCAqc2ltcGxlOworCisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdfc2ltcGxlX2FzeW5jX3Jlc3Vs
dF9pc192YWxpZCAocmVzdWx0LCBHX09CSkVDVCAocmVxdWVzdCksIHNvdXBfcmVxdWVzdF9odHRw
X3NlbmRfYXN5bmMpIHx8IGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9pc192YWxpZCAocmVzdWx0LCBH
X09CSkVDVCAocmVxdWVzdCksIGNvbmRpdGlvbmFsX2dldF9yZWFkeV9jYiksIE5VTEwpOworCisJ
c2ltcGxlID0gR19TSU1QTEVfQVNZTkNfUkVTVUxUIChyZXN1bHQpOworCWlmIChnX3NpbXBsZV9h
c3luY19yZXN1bHRfcHJvcGFnYXRlX2Vycm9yIChzaW1wbGUsIGVycm9yKSkKKwkJcmV0dXJuIE5V
TEw7CisJcmV0dXJuIGdfb2JqZWN0X3JlZiAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9vcF9y
ZXNfZ3BvaW50ZXIgKHNpbXBsZSkpOworfQorCitzdGF0aWMgZ29mZnNldAorc291cF9yZXF1ZXN0
X2h0dHBfZ2V0X2NvbnRlbnRfbGVuZ3RoIChTb3VwUmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlTb3Vw
UmVxdWVzdEhUVFAgKmh0dHAgPSBTT1VQX1JFUVVFU1RfSFRUUCAocmVxdWVzdCk7CisKKwlyZXR1
cm4gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2NvbnRlbnRfbGVuZ3RoIChodHRwLT5wcml2LT5t
c2ctPnJlc3BvbnNlX2hlYWRlcnMpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitzb3VwX3Jl
cXVlc3RfaHR0cF9nZXRfY29udGVudF90eXBlIChTb3VwUmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlT
b3VwUmVxdWVzdEhUVFAgKmh0dHAgPSBTT1VQX1JFUVVFU1RfSFRUUCAocmVxdWVzdCk7CisKKwly
ZXR1cm4gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2NvbnRlbnRfdHlwZSAoaHR0cC0+cHJpdi0+
bXNnLT5yZXNwb25zZV9oZWFkZXJzLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQKK3NvdXBfcmVx
dWVzdF9odHRwX2NsYXNzX2luaXQgKFNvdXBSZXF1ZXN0SFRUUENsYXNzICpyZXF1ZXN0X2h0dHBf
Y2xhc3MpCit7CisJR09iamVjdENsYXNzICpvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAo
cmVxdWVzdF9odHRwX2NsYXNzKTsKKwlTb3VwUmVxdWVzdENsYXNzICpyZXF1ZXN0X2NsYXNzID0K
KwkJU09VUF9SRVFVRVNUX0NMQVNTIChyZXF1ZXN0X2h0dHBfY2xhc3MpOworCisJZ190eXBlX2Ns
YXNzX2FkZF9wcml2YXRlIChyZXF1ZXN0X2h0dHBfY2xhc3MsIHNpemVvZiAoU291cFJlcXVlc3RI
VFRQUHJpdmF0ZSkpOworCisJb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IHNvdXBfcmVxdWVzdF9o
dHRwX2ZpbmFsaXplOworCisJcmVxdWVzdF9jbGFzcy0+Y2hlY2tfdXJpID0gc291cF9yZXF1ZXN0
X2h0dHBfY2hlY2tfdXJpOworCXJlcXVlc3RfY2xhc3MtPnNlbmQgPSBzb3VwX3JlcXVlc3RfaHR0
cF9zZW5kOworCXJlcXVlc3RfY2xhc3MtPnNlbmRfYXN5bmMgPSBzb3VwX3JlcXVlc3RfaHR0cF9z
ZW5kX2FzeW5jOworCXJlcXVlc3RfY2xhc3MtPnNlbmRfZmluaXNoID0gc291cF9yZXF1ZXN0X2h0
dHBfc2VuZF9maW5pc2g7CisJcmVxdWVzdF9jbGFzcy0+Z2V0X2NvbnRlbnRfbGVuZ3RoID0gc291
cF9yZXF1ZXN0X2h0dHBfZ2V0X2NvbnRlbnRfbGVuZ3RoOworCXJlcXVlc3RfY2xhc3MtPmdldF9j
b250ZW50X3R5cGUgPSBzb3VwX3JlcXVlc3RfaHR0cF9nZXRfY29udGVudF90eXBlOworfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0
LWh0dHAuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVz
dC1odHRwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYzMmYwYgotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAt
cmVxdWVzdC1odHRwLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5k
ZWYgU09VUF9SRVFVRVNUX0hUVFBfSAorI2RlZmluZSBTT1VQX1JFUVVFU1RfSFRUUF9IIDEKKwor
I2luY2x1ZGUgInNvdXAtcmVxdWVzdC5oIgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgU09V
UF9UWVBFX1JFUVVFU1RfSFRUUCAgICAgICAgICAgIChzb3VwX3JlcXVlc3RfaHR0cF9nZXRfdHlw
ZSAoKSkKKyNkZWZpbmUgU09VUF9SRVFVRVNUX0hUVFAob2JqZWN0KSAgICAgICAgIChHX1RZUEVf
Q0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iamVjdCksIFNPVVBfVFlQRV9SRVFVRVNUX0hUVFAsIFNv
dXBSZXF1ZXN0SFRUUCkpCisjZGVmaW5lIFNPVVBfUkVRVUVTVF9IVFRQX0NMQVNTKGtsYXNzKSAg
ICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFNPVVBfVFlQRV9SRVFVRVNUX0hU
VFAsIFNvdXBSZXF1ZXN0SFRUUENsYXNzKSkKKyNkZWZpbmUgU09VUF9JU19SRVFVRVNUX0hUVFAo
b2JqZWN0KSAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iamVjdCksIFNPVVBf
VFlQRV9SRVFVRVNUX0hUVFApKQorI2RlZmluZSBTT1VQX0lTX1JFUVVFU1RfSFRUUF9DTEFTUyhr
bGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBTT1VQX1RZUEVfUkVRVUVT
VF9IVFRQKSkKKyNkZWZpbmUgU09VUF9SRVFVRVNUX0hUVFBfR0VUX0NMQVNTKG9iaikgIChHX1RZ
UEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgU09VUF9UWVBFX1JFUVVFU1RfSFRUUCwgU291
cFJlcXVlc3RIVFRQQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfU291cFJlcXVlc3RIVFRQUHJp
dmF0ZSBTb3VwUmVxdWVzdEhUVFBQcml2YXRlOworCit0eXBlZGVmIHN0cnVjdCB7CisJU291cFJl
cXVlc3QgcGFyZW50OworCisJU291cFJlcXVlc3RIVFRQUHJpdmF0ZSAqcHJpdjsKK30gU291cFJl
cXVlc3RIVFRQOworCit0eXBlZGVmIHN0cnVjdCB7CisJU291cFJlcXVlc3RDbGFzcyBwYXJlbnQ7
Cit9IFNvdXBSZXF1ZXN0SFRUUENsYXNzOworCitHVHlwZSBzb3VwX3JlcXVlc3RfaHR0cF9nZXRf
dHlwZSAodm9pZCk7CisKK1NvdXBNZXNzYWdlICAqc291cF9yZXF1ZXN0X2h0dHBfZ2V0X21lc3Nh
Z2UgKFNvdXBSZXF1ZXN0SFRUUCAqaHR0cCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBT
T1VQX1JFUVVFU1RfSFRUUF9IICovCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QuYyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmM2YTdiZDMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9jYWNoZS9zb3VwLXJlcXVlc3QuYwpAQCAtMCwwICsxLDI3OSBAQAorLyoKKyAqIHNvdXAt
cmVxdWVzdC5jOiBQcm90b2NvbC1pbmRlcGVuZGVudCBzdHJlYW1pbmcgcmVxdWVzdCBpbnRlcmZh
Y2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0
IChDKSAyMDEwLCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNv
bmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxnbGliL2dpMThuLmg+CisKKyNpbmNsdWRlICJz
b3VwLXJlcXVlc3QuaCIKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3Rlci5oIgorCisvKioKKyAqIFNF
Q1RJT046c291cC1yZXF1ZXN0CisgKiBAc2hvcnRfZGVzY3JpcHRpb246IFByb3RvY29sLWluZGVw
ZW5kZW50IHN0cmVhbWluZyByZXF1ZXN0IGludGVyZmFjZQorICoKKyAqIEZJWE1FCisgKiovCisK
Ky8qKgorICogU291cFJlcXVlc3Q6CisgKgorICogRklYTUUKKyAqCisgKiBTaW5jZTogMi4zMAor
ICoqLworCitzdGF0aWMgdm9pZCBzb3VwX3JlcXVlc3RfaW5pdGFibGVfaW50ZXJmYWNlX2luaXQg
KEdJbml0YWJsZUlmYWNlICppbml0YWJsZV9pbnRlcmZhY2UpOworCitHX0RFRklORV9UWVBFX1dJ
VEhfQ09ERSAoU291cFJlcXVlc3QsIHNvdXBfcmVxdWVzdCwgR19UWVBFX09CSkVDVCwKKwkJCSBH
X0lNUExFTUVOVF9JTlRFUkZBQ0UgKEdfVFlQRV9JTklUQUJMRSwKKwkJCQkJCXNvdXBfcmVxdWVz
dF9pbml0YWJsZV9pbnRlcmZhY2VfaW5pdCkpCisKK2VudW0geworCVBST1BfMCwKKwlQUk9QX1VS
SSwKKwlQUk9QX1NFU1NJT04KK307CisKK3N0cnVjdCBfU291cFJlcXVlc3RQcml2YXRlIHsKKwlT
b3VwVVJJICp1cmk7CisJU291cFNlc3Npb24gKnNlc3Npb247Cit9OworCitzdGF0aWMgdm9pZAor
c291cF9yZXF1ZXN0X2luaXQgKFNvdXBSZXF1ZXN0ICpyZXF1ZXN0KQoreworCXJlcXVlc3QtPnBy
aXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKHJlcXVlc3QsIFNPVVBfVFlQRV9SRVFV
RVNULCBTb3VwUmVxdWVzdFByaXZhdGUpOworfQorCitzdGF0aWMgdm9pZAorc291cF9yZXF1ZXN0
X2ZpbmFsaXplIChHT2JqZWN0ICpvYmplY3QpCit7CisJU291cFJlcXVlc3QgKnJlcXVlc3QgPSBT
T1VQX1JFUVVFU1QgKG9iamVjdCk7CisKKwlpZiAocmVxdWVzdC0+cHJpdi0+dXJpKQorCQlzb3Vw
X3VyaV9mcmVlIChyZXF1ZXN0LT5wcml2LT51cmkpOworCWlmIChyZXF1ZXN0LT5wcml2LT5zZXNz
aW9uKQorCQlnX29iamVjdF91bnJlZiAocmVxdWVzdC0+cHJpdi0+c2Vzc2lvbik7CisKKwlHX09C
SkVDVF9DTEFTUyAoc291cF9yZXF1ZXN0X3BhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3Qp
OworfQorCitzdGF0aWMgdm9pZAorc291cF9yZXF1ZXN0X3NldF9wcm9wZXJ0eSAoR09iamVjdCAg
ICAgICpvYmplY3QsCisJCQkgICBndWludCBwcm9wX2lkLAorCQkJICAgY29uc3QgR1ZhbHVlICp2
YWx1ZSwKKwkJCSAgIEdQYXJhbVNwZWMgICAqcHNwZWMpCit7CisJU291cFJlcXVlc3QgKnJlcXVl
c3QgPSBTT1VQX1JFUVVFU1QgKG9iamVjdCk7CisKKwlzd2l0Y2ggKHByb3BfaWQpIHsKKwkJY2Fz
ZSBQUk9QX1VSSToKKwkJCWlmIChyZXF1ZXN0LT5wcml2LT51cmkpCisJCQkJc291cF91cmlfZnJl
ZSAocmVxdWVzdC0+cHJpdi0+dXJpKTsKKwkJCXJlcXVlc3QtPnByaXYtPnVyaSA9IGdfdmFsdWVf
ZHVwX2JveGVkICh2YWx1ZSk7CisJCQlicmVhazsKKwkJY2FzZSBQUk9QX1NFU1NJT046CisJCQlp
ZiAocmVxdWVzdC0+cHJpdi0+c2Vzc2lvbikKKwkJCQlnX29iamVjdF91bnJlZiAocmVxdWVzdC0+
cHJpdi0+c2Vzc2lvbik7CisJCQlyZXF1ZXN0LT5wcml2LT5zZXNzaW9uID0gZ192YWx1ZV9kdXBf
b2JqZWN0ICh2YWx1ZSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUdfT0JKRUNUX1dBUk5f
SU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisJCQlicmVhazsK
Kwl9Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX3JlcXVlc3RfZ2V0X3Byb3BlcnR5IChHT2JqZWN0
ICAgICpvYmplY3QsCisJCQkgICBndWludCBwcm9wX2lkLAorCQkJICAgR1ZhbHVlICAgICAqdmFs
dWUsCisJCQkgICBHUGFyYW1TcGVjICpwc3BlYykKK3sKKwlTb3VwUmVxdWVzdCAqcmVxdWVzdCA9
IFNPVVBfUkVRVUVTVCAob2JqZWN0KTsKKworCXN3aXRjaCAocHJvcF9pZCkgeworCQljYXNlIFBS
T1BfVVJJOgorCQkJZ192YWx1ZV9zZXRfYm94ZWQgKHZhbHVlLCByZXF1ZXN0LT5wcml2LT51cmkp
OworCQkJYnJlYWs7CisJCWNhc2UgUFJPUF9TRVNTSU9OOgorCQkJZ192YWx1ZV9zZXRfb2JqZWN0
ICh2YWx1ZSwgcmVxdWVzdC0+cHJpdi0+c2Vzc2lvbik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoK
KwkJCUdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBw
c3BlYyk7CisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorc291cF9yZXF1ZXN0
X2luaXRhYmxlX2luaXQgKEdJbml0YWJsZSAgICAgKmluaXRhYmxlLAorCQkJICAgIEdDYW5jZWxs
YWJsZSAgKmNhbmNlbGxhYmxlLAorCQkJICAgIEdFcnJvciAgICAgICAqKmVycm9yKQoreworCVNv
dXBSZXF1ZXN0ICpyZXF1ZXN0ID0gU09VUF9SRVFVRVNUIChpbml0YWJsZSk7CisJZ2Jvb2xlYW4g
b2s7CisKKwlpZiAoIXJlcXVlc3QtPnByaXYtPnVyaSkgeworCQlnX3NldF9lcnJvciAoZXJyb3Is
IFNPVVBfRVJST1IsIFNPVVBfRVJST1JfQkFEX1VSSSwKKwkJCSAgICAgXyAoIk5vIFVSSSBwcm92
aWRlZCIpKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCW9rID0gU09VUF9SRVFVRVNUX0dFVF9D
TEFTUyAoaW5pdGFibGUpLT4KKwkgICAgIGNoZWNrX3VyaSAocmVxdWVzdCwgcmVxdWVzdC0+cHJp
di0+dXJpLCBlcnJvcik7CisKKwlpZiAoIW9rICYmIGVycm9yKSB7CisJCWNoYXIgKnVyaV9zdHJp
bmcgPSBzb3VwX3VyaV90b19zdHJpbmcgKHJlcXVlc3QtPnByaXYtPnVyaSwgRkFMU0UpOworCQln
X3NldF9lcnJvciAoZXJyb3IsIFNPVVBfRVJST1IsIFNPVVBfRVJST1JfQkFEX1VSSSwKKwkJCSAg
ICAgXyAoIkludmFsaWQgJyVzJyBVUkk6ICVzIiksCisJCQkgICAgIHJlcXVlc3QtPnByaXYtPnVy
aS0+c2NoZW1lLAorCQkJICAgICB1cmlfc3RyaW5nKTsKKwkJZ19mcmVlICh1cmlfc3RyaW5nKTsK
Kwl9CisKKwlyZXR1cm4gb2s7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorc291cF9yZXF1ZXN0X2Rl
ZmF1bHRfY2hlY2tfdXJpIChTb3VwUmVxdWVzdCAgKnJlcXVlc3QsCisJCQkJU291cFVSSSAgICAg
ICp1cmksCisJCQkJR0Vycm9yICAgICAgKiplcnJvcikKK3sKKwlyZXR1cm4gVFJVRTsKK30KKwor
LyogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbjogYXNzdW1lIHRoZSBzeW5jIGltcGxlbWVudGF0aW9u
IGRvZXNuJ3QgYmxvY2sgKi8KK3N0YXRpYyB2b2lkCitzb3VwX3JlcXVlc3RfZGVmYXVsdF9zZW5k
X2FzeW5jIChTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKKwkJCQkgR0NhbmNlbGxhYmxl
ICAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJCSBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNr
LAorCQkJCSBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpzaW1w
bGU7CisKKwlzaW1wbGUgPSBnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3IChHX09CSkVDVCAocmVx
dWVzdCksCisJCQkJCSAgICBjYWxsYmFjaywgdXNlcl9kYXRhLAorCQkJCQkgICAgc291cF9yZXF1
ZXN0X2RlZmF1bHRfc2VuZF9hc3luYyk7CisJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRl
X2luX2lkbGUgKHNpbXBsZSk7CisJZ19vYmplY3RfdW5yZWYgKHNpbXBsZSk7Cit9CisKK3N0YXRp
YyBHSW5wdXRTdHJlYW0gKgorc291cF9yZXF1ZXN0X2RlZmF1bHRfc2VuZF9maW5pc2ggKFNvdXBS
ZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAorCQkJCSAgR0FzeW5jUmVzdWx0ICAgICAgICAgKnJl
c3VsdCwKKwkJCQkgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcikKK3sKKwlnX3JldHVybl92
YWxfaWZfZmFpbCAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2lzX3ZhbGlkIChyZXN1bHQsIEdfT0JK
RUNUIChyZXF1ZXN0KSwgc291cF9yZXF1ZXN0X2RlZmF1bHRfc2VuZF9hc3luYyksIE5VTEwpOwor
CisJcmV0dXJuIHNvdXBfcmVxdWVzdF9zZW5kIChyZXF1ZXN0LCBOVUxMLCBlcnJvcik7Cit9CisK
K0dJbnB1dFN0cmVhbSAqCitzb3VwX3JlcXVlc3Rfc2VuZCAoU291cFJlcXVlc3QgICAgICAgICAg
KnJlcXVlc3QsCisJCSAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJICAg
R0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKQoreworCXJldHVybiBTT1VQX1JFUVVFU1RfR0VU
X0NMQVNTIChyZXF1ZXN0KS0+CisJICAgICAgIHNlbmQgKHJlcXVlc3QsIGNhbmNlbGxhYmxlLCBl
cnJvcik7Cit9CisKK3ZvaWQKK3NvdXBfcmVxdWVzdF9zZW5kX2FzeW5jIChTb3VwUmVxdWVzdCAg
ICAgICAgICAqcmVxdWVzdCwKKwkJCSBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUs
CisJCQkgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKKwkJCSBncG9pbnRlciB1c2VyX2Rh
dGEpCit7CisJU09VUF9SRVFVRVNUX0dFVF9DTEFTUyAocmVxdWVzdCktPgorCXNlbmRfYXN5bmMg
KHJlcXVlc3QsIGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlcl9kYXRhKTsKK30KKworR0lucHV0
U3RyZWFtICoKK3NvdXBfcmVxdWVzdF9zZW5kX2ZpbmlzaCAoU291cFJlcXVlc3QgICAgICAgICAg
KnJlcXVlc3QsCisJCQkgIEdBc3luY1Jlc3VsdCAgICAgICAgICpyZXN1bHQsCisJCQkgIEdFcnJv
ciAgICAgICAgICAgICAgKiplcnJvcikKK3sKKwlyZXR1cm4gU09VUF9SRVFVRVNUX0dFVF9DTEFT
UyAocmVxdWVzdCktPgorCSAgICAgICBzZW5kX2ZpbmlzaCAocmVxdWVzdCwgcmVzdWx0LCBlcnJv
cik7Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX3JlcXVlc3RfY2xhc3NfaW5pdCAoU291cFJlcXVl
c3RDbGFzcyAqcmVxdWVzdF9jbGFzcykKK3sKKwlHT2JqZWN0Q2xhc3MgKm9iamVjdF9jbGFzcyA9
IEdfT0JKRUNUX0NMQVNTIChyZXF1ZXN0X2NsYXNzKTsKKworCWdfdHlwZV9jbGFzc19hZGRfcHJp
dmF0ZSAocmVxdWVzdF9jbGFzcywgc2l6ZW9mIChTb3VwUmVxdWVzdFByaXZhdGUpKTsKKworCXJl
cXVlc3RfY2xhc3MtPmNoZWNrX3VyaSA9IHNvdXBfcmVxdWVzdF9kZWZhdWx0X2NoZWNrX3VyaTsK
KwlyZXF1ZXN0X2NsYXNzLT5zZW5kX2FzeW5jID0gc291cF9yZXF1ZXN0X2RlZmF1bHRfc2VuZF9h
c3luYzsKKwlyZXF1ZXN0X2NsYXNzLT5zZW5kX2ZpbmlzaCA9IHNvdXBfcmVxdWVzdF9kZWZhdWx0
X3NlbmRfZmluaXNoOworCisJb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IHNvdXBfcmVxdWVzdF9m
aW5hbGl6ZTsKKwlvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IHNvdXBfcmVxdWVzdF9zZXRf
cHJvcGVydHk7CisJb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBzb3VwX3JlcXVlc3RfZ2V0
X3Byb3BlcnR5OworCisJZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoCisJCW9iamVj
dF9jbGFzcywgUFJPUF9VUkksCisJCWdfcGFyYW1fc3BlY19ib3hlZCAoU09VUF9SRVFVRVNUX1VS
SSwKKwkJCQkgICAgIlVSSSIsCisJCQkJICAgICJUaGUgcmVxdWVzdCBVUkkiLAorCQkJCSAgICBT
T1VQX1RZUEVfVVJJLAorCQkJCSAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RS
VUNUX09OTFkpKTsKKwlnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5ICgKKwkJb2JqZWN0
X2NsYXNzLCBQUk9QX1NFU1NJT04sCisJCWdfcGFyYW1fc3BlY19vYmplY3QgKFNPVVBfUkVRVUVT
VF9TRVNTSU9OLAorCQkJCSAgICAgIlNlc3Npb24iLAorCQkJCSAgICAgIlRoZSByZXF1ZXN0J3Mg
c2Vzc2lvbiIsCisJCQkJICAgICBTT1VQX1RZUEVfU0VTU0lPTiwKKwkJCQkgICAgIEdfUEFSQU1f
UkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpOworfQorCitzdGF0aWMgdm9pZAor
c291cF9yZXF1ZXN0X2luaXRhYmxlX2ludGVyZmFjZV9pbml0IChHSW5pdGFibGVJZmFjZSAqaW5p
dGFibGVfaW50ZXJmYWNlKQoreworCWluaXRhYmxlX2ludGVyZmFjZS0+aW5pdCA9IHNvdXBfcmVx
dWVzdF9pbml0YWJsZV9pbml0OworfQorCitTb3VwVVJJICoKK3NvdXBfcmVxdWVzdF9nZXRfdXJp
IChTb3VwUmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlyZXR1cm4gcmVxdWVzdC0+cHJpdi0+dXJpOwor
fQorCitTb3VwU2Vzc2lvbiAqCitzb3VwX3JlcXVlc3RfZ2V0X3Nlc3Npb24gKFNvdXBSZXF1ZXN0
ICpyZXF1ZXN0KQoreworCXJldHVybiByZXF1ZXN0LT5wcml2LT5zZXNzaW9uOworfQorCitnb2Zm
c2V0Citzb3VwX3JlcXVlc3RfZ2V0X2NvbnRlbnRfbGVuZ3RoIChTb3VwUmVxdWVzdCAqcmVxdWVz
dCkKK3sKKwlyZXR1cm4gU09VUF9SRVFVRVNUX0dFVF9DTEFTUyAocmVxdWVzdCktPmdldF9jb250
ZW50X2xlbmd0aCAocmVxdWVzdCk7Cit9CisKK2NvbnN0IGNoYXIgKgorc291cF9yZXF1ZXN0X2dl
dF9jb250ZW50X3R5cGUgKFNvdXBSZXF1ZXN0ICAqcmVxdWVzdCkKK3sKKwlyZXR1cm4gU09VUF9S
RVFVRVNUX0dFVF9DTEFTUyAocmVxdWVzdCktPmdldF9jb250ZW50X3R5cGUgKHJlcXVlc3QpOwor
fQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1y
ZXF1ZXN0LmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVl
c3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjUwYWMyCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1
ZXN0LmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0
LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgU09VUF9S
RVFVRVNUX0gKKyNkZWZpbmUgU09VUF9SRVFVRVNUX0ggMQorCisjaW5jbHVkZSA8bGlic291cC9z
b3VwLmg+CisjaW5jbHVkZSA8Z2lvL2dpby5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUg
U09VUF9UWVBFX1JFUVVFU1QgICAgICAgICAgICAoc291cF9yZXF1ZXN0X2dldF90eXBlICgpKQor
I2RlZmluZSBTT1VQX1JFUVVFU1Qob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfQ0FTVCAoKG9iaiksIFNPVVBfVFlQRV9SRVFVRVNULCBTb3VwUmVxdWVzdCkpCisjZGVmaW5l
IFNPVVBfUkVRVUVTVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgo
a2xhc3MpLCBTT1VQX1RZUEVfUkVRVUVTVCwgU291cFJlcXVlc3RDbGFzcykpCisjZGVmaW5lIFNP
VVBfSVNfUkVRVUVTVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgo
b2JqKSwgU09VUF9UWVBFX1JFUVVFU1QpKQorI2RlZmluZSBTT1VQX0lTX1JFUVVFU1RfQ0xBU1Mo
a2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgU09VUF9UWVBFX1JFUVVF
U1QpKQorI2RlZmluZSBTT1VQX1JFUVVFU1RfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFO
Q0VfR0VUX0NMQVNTICgob2JqKSwgU09VUF9UWVBFX1JFUVVFU1QsIFNvdXBSZXF1ZXN0Q2xhc3Mp
KQorCit0eXBlZGVmIHN0cnVjdCBfU291cFJlcXVlc3QgU291cFJlcXVlc3Q7Cit0eXBlZGVmIHN0
cnVjdCBfU291cFJlcXVlc3RQcml2YXRlIFNvdXBSZXF1ZXN0UHJpdmF0ZTsKK3R5cGVkZWYgc3Ry
dWN0IF9Tb3VwUmVxdWVzdENsYXNzIFNvdXBSZXF1ZXN0Q2xhc3M7CisKK3N0cnVjdCBfU291cFJl
cXVlc3QgeworCUdPYmplY3QgcGFyZW50OworCisJU291cFJlcXVlc3RQcml2YXRlICpwcml2Owor
fTsKKworc3RydWN0IF9Tb3VwUmVxdWVzdENsYXNzIHsKKwlHT2JqZWN0Q2xhc3MgcGFyZW50Owor
CisJZ2Jvb2xlYW4gKCpjaGVja191cmkpKFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXFfYmFzZSwK
KwkJCSAgICAgIFNvdXBVUkkgICAgICAgICAgICAgICp1cmksCisJCQkgICAgICBHRXJyb3IgICAg
ICAgICAgICAgICoqZXJyb3IpOworCisJR0lucHV0U3RyZWFtICogKCpzZW5kKShTb3VwUmVxdWVz
dCAgICAgICAgICAqcmVxdWVzdCwKKwkJCSAgICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2Fu
Y2VsbGFibGUsCisJCQkgICAgICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKTsKKwl2b2lk
ICgqc2VuZF9hc3luYykoU291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCisJCQkgICBHQ2Fu
Y2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkgICBHQXN5bmNSZWFkeUNhbGxiYWNr
IGNhbGxiYWNrLAorCQkJICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKKwlHSW5wdXRTdHJlYW0gKiAo
KnNlbmRfZmluaXNoKShTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKKwkJCQkgICAgICBH
QXN5bmNSZXN1bHQgICAgICAgICAqcmVzdWx0LAorCQkJCSAgICAgIEdFcnJvciAgICAgICAgICAg
ICAgKiplcnJvcik7CisKKwlnb2Zmc2V0ICgqZ2V0X2NvbnRlbnRfbGVuZ3RoKShTb3VwUmVxdWVz
dCAgICpyZXF1ZXN0KTsKKwljb25zdCBjaGFyICogICAoKmdldF9jb250ZW50X3R5cGUpKFNvdXBS
ZXF1ZXN0ICAgKnJlcXVlc3QpOworfTsKKworR1R5cGUgc291cF9yZXF1ZXN0X2dldF90eXBlICh2
b2lkKTsKKworI2RlZmluZSBTT1VQX1JFUVVFU1RfVVJJICAgICAidXJpIgorI2RlZmluZSBTT1VQ
X1JFUVVFU1RfU0VTU0lPTiAic2Vzc2lvbiIKKworR0lucHV0U3RyZWFtICpzb3VwX3JlcXVlc3Rf
c2VuZCAoU291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCisJCQkJIEdDYW5jZWxsYWJsZSAg
ICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKTsK
K3ZvaWQgICAgICAgICAgc291cF9yZXF1ZXN0X3NlbmRfYXN5bmMgKFNvdXBSZXF1ZXN0ICAgICAg
ICAgICpyZXF1ZXN0LAorCQkJCSAgICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFi
bGUsCisJCQkJICAgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCisJCQkJICAgICAg
IGdwb2ludGVyIHVzZXJfZGF0YSk7CitHSW5wdXRTdHJlYW0gKnNvdXBfcmVxdWVzdF9zZW5kX2Zp
bmlzaCAoU291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCisJCQkJCUdBc3luY1Jlc3VsdCAg
ICAgICAgICpyZXN1bHQsCisJCQkJCUdFcnJvciAgICAgICAgICAgICAgKiplcnJvcik7CisKK1Nv
dXBVUkkgICAgICAqc291cF9yZXF1ZXN0X2dldF91cmkgKFNvdXBSZXF1ZXN0ICAgICAgICAgICpy
ZXF1ZXN0KTsKK1NvdXBTZXNzaW9uICAqc291cF9yZXF1ZXN0X2dldF9zZXNzaW9uIChTb3VwUmVx
dWVzdCAgICAgICAgICAqcmVxdWVzdCk7CisKK2dvZmZzZXQgICAgICAgc291cF9yZXF1ZXN0X2dl
dF9jb250ZW50X2xlbmd0aCAoU291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QpOworY29uc3Qg
Y2hhciAgICpzb3VwX3JlcXVlc3RfZ2V0X2NvbnRlbnRfdHlwZSAoU291cFJlcXVlc3QgICAgICAg
ICAgKnJlcXVlc3QpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogU09VUF9SRVFVRVNUX0gg
Ki8KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAt
cmVxdWVzdGVyLmMgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJl
cXVlc3Rlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZGRiMGEKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3Vw
LXJlcXVlc3Rlci5jCkBAIC0wLDAgKzEsMTg2IEBACisvKgorICogc291cC1yZXF1ZXN0ZXIuYzoK
KyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3Rlci5oIgorCisjaW5jbHVkZSAic291cC1yZXF1ZXN0
LWRhdGEuaCIKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3QtZmlsZS5oIgorI2luY2x1ZGUgInNvdXAt
cmVxdWVzdC1odHRwLmgiCisjaW5jbHVkZSA8Z2xpYi9naTE4bi5oPgorI2luY2x1ZGUgPGxpYnNv
dXAvc291cC5oPgorCitzdHJ1Y3QgX1NvdXBSZXF1ZXN0ZXJQcml2YXRlIHsKKwlHSGFzaFRhYmxl
ICpyZXF1ZXN0X3R5cGVzOworfTsKKworI2RlZmluZSBTT1VQX1JFUVVFU1RFUl9HRVRfUFJJVkFU
RShvKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFICgobyksIFNPVVBfVFlQRV9SRVFVRVNU
RVIsIFNvdXBSZXF1ZXN0ZXJQcml2YXRlKSkKKworR19ERUZJTkVfVFlQRSAoU291cFJlcXVlc3Rl
ciwgc291cF9yZXF1ZXN0ZXIsIEdfVFlQRV9PQkpFQ1QpCisKK3N0YXRpYyB2b2lkIHNvdXBfcmVx
dWVzdGVyX2luaXQgKFNvdXBSZXF1ZXN0ZXIgKnJlcXVlc3RlcikKK3sKKwlyZXF1ZXN0ZXItPnBy
aXYgPSBTT1VQX1JFUVVFU1RFUl9HRVRfUFJJVkFURSAocmVxdWVzdGVyKTsKKworCXJlcXVlc3Rl
ci0+cHJpdi0+cmVxdWVzdF90eXBlcyA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmFsaXplIChH
T2JqZWN0ICpvYmplY3QpCit7CisJU291cFJlcXVlc3RlciAqcmVxdWVzdGVyID0gU09VUF9SRVFV
RVNURVIgKG9iamVjdCk7CisKKwlpZiAocmVxdWVzdGVyLT5wcml2LT5yZXF1ZXN0X3R5cGVzKQor
CQlnX2hhc2hfdGFibGVfZGVzdHJveSAocmVxdWVzdGVyLT5wcml2LT5yZXF1ZXN0X3R5cGVzKTsK
KworCUdfT0JKRUNUX0NMQVNTIChzb3VwX3JlcXVlc3Rlcl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6
ZSAob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgc291cF9yZXF1ZXN0ZXJfY2xhc3NfaW5pdCAo
U291cFJlcXVlc3RlckNsYXNzICpyZXF1ZXN0ZXJfY2xhc3MpCit7CisJR09iamVjdENsYXNzICpv
YmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAocmVxdWVzdGVyX2NsYXNzKTsKKworCWdfdHlw
ZV9jbGFzc19hZGRfcHJpdmF0ZSAocmVxdWVzdGVyX2NsYXNzLCBzaXplb2YgKFNvdXBSZXF1ZXN0
ZXJQcml2YXRlKSk7CisKKwkvKiB2aXJ0dWFsIG1ldGhvZCBvdmVycmlkZSAqLworCW9iamVjdF9j
bGFzcy0+ZmluYWxpemUgPSBmaW5hbGl6ZTsKK30KKworc3RhdGljIHZvaWQgaW5pdF9yZXF1ZXN0
X3R5cGVzIChTb3VwUmVxdWVzdGVyUHJpdmF0ZSAqcHJpdikKK3sKKwlpZiAocHJpdi0+cmVxdWVz
dF90eXBlcykKKwkJcmV0dXJuOworCisJcHJpdi0+cmVxdWVzdF90eXBlcyA9IGdfaGFzaF90YWJs
ZV9uZXdfZnVsbCAoc291cF9zdHJfY2FzZV9oYXNoLAorCQkJCQkJICAgICBzb3VwX3N0cl9jYXNl
X2VxdWFsLAorCQkJCQkJICAgICBnX2ZyZWUsIDApOworCWdfaGFzaF90YWJsZV9pbnNlcnQgKHBy
aXYtPnJlcXVlc3RfdHlwZXMsIGdfc3RyZHVwICgiZmlsZSIpLAorCQkJICAgICBHU0laRV9UT19Q
T0lOVEVSIChTT1VQX1RZUEVfUkVRVUVTVF9GSUxFKSk7CisJZ19oYXNoX3RhYmxlX2luc2VydCAo
cHJpdi0+cmVxdWVzdF90eXBlcywgZ19zdHJkdXAgKCJkYXRhIiksCisJCQkgICAgIEdTSVpFX1RP
X1BPSU5URVIgKFNPVVBfVFlQRV9SRVFVRVNUX0RBVEEpKTsKKwlnX2hhc2hfdGFibGVfaW5zZXJ0
IChwcml2LT5yZXF1ZXN0X3R5cGVzLCBnX3N0cmR1cCAoImh0dHAiKSwKKwkJCSAgICAgR1NJWkVf
VE9fUE9JTlRFUiAoU09VUF9UWVBFX1JFUVVFU1RfSFRUUCkpOworCWdfaGFzaF90YWJsZV9pbnNl
cnQgKHByaXYtPnJlcXVlc3RfdHlwZXMsIGdfc3RyZHVwICgiaHR0cHMiKSwKKwkJCSAgICAgR1NJ
WkVfVE9fUE9JTlRFUiAoU09VUF9UWVBFX1JFUVVFU1RfSFRUUCkpOworCWdfaGFzaF90YWJsZV9p
bnNlcnQgKHByaXYtPnJlcXVlc3RfdHlwZXMsIGdfc3RyZHVwICgiZnRwIiksCisJCQkgICAgIEdT
SVpFX1RPX1BPSU5URVIgKFNPVVBfVFlQRV9SRVFVRVNUX0ZJTEUpKTsKK30KKworU291cFJlcXVl
c3RlciAqc291cF9yZXF1ZXN0ZXJfbmV3ICh2b2lkKQoreworCXJldHVybiAoU291cFJlcXVlc3Rl
ciAqKWdfb2JqZWN0X25ldyAoU09VUF9UWVBFX1JFUVVFU1RFUiwgMCk7Cit9CisKK1NvdXBSZXF1
ZXN0ICpzb3VwX3JlcXVlc3Rlcl9yZXF1ZXN0IChTb3VwUmVxdWVzdGVyICpyZXF1ZXN0ZXIsIGNv
bnN0IGNoYXIgKnVyaVN0cmluZywgU291cFNlc3Npb24gKnNlc3Npb24sIEdFcnJvciAqKmVycm9y
KQoreworCVNvdXBVUkkgKnVyaSA9IHNvdXBfdXJpX25ldyAodXJpU3RyaW5nKTsKKwlTb3VwUmVx
dWVzdCAqcmVxOworCisJaWYgKCF1cmkpIHsKKwkJZ19zZXRfZXJyb3IgKGVycm9yLCBTT1VQX0VS
Uk9SLCBTT1VQX0VSUk9SX0JBRF9VUkksCisJCQkgICAgIF8gKCJDb3VsZCBub3QgcGFyc2UgVVJJ
ICclcyciKSwgdXJpU3RyaW5nKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmVxID0gc291cF9yZXF1
ZXN0ZXJfcmVxdWVzdF91cmkgKHJlcXVlc3RlciwgdXJpLCBzZXNzaW9uLCBlcnJvcik7CisJc291
cF91cmlfZnJlZSAodXJpKTsKKwlyZXR1cm4gcmVxOworfQorCitTb3VwUmVxdWVzdCAqc291cF9y
ZXF1ZXN0ZXJfcmVxdWVzdF91cmkgKFNvdXBSZXF1ZXN0ZXIgKnJlcXVlc3RlciwgU291cFVSSSAq
dXJpLCBTb3VwU2Vzc2lvbiAqc2Vzc2lvbiwgR0Vycm9yICoqZXJyb3IpCit7CisJR1R5cGUgcmVx
dWVzdFR5cGU7CisKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoU09VUF9JU19SRVFVRVNURVIgKHJl
cXVlc3RlciksIDApOworCisJaW5pdF9yZXF1ZXN0X3R5cGVzIChyZXF1ZXN0ZXItPnByaXYpOwor
CXJlcXVlc3RUeXBlID0gKEdUeXBlKUdQT0lOVEVSX1RPX1NJWkUgKGdfaGFzaF90YWJsZV9sb29r
dXAgKHJlcXVlc3Rlci0+cHJpdi0+cmVxdWVzdF90eXBlcywgdXJpLT5zY2hlbWUpKTsKKwlpZiAo
IXJlcXVlc3RUeXBlKSB7CisJCWdfc2V0X2Vycm9yIChlcnJvciwgU09VUF9FUlJPUiwgU09VUF9F
UlJPUl9VTlNVUFBPUlRFRF9VUklfU0NIRU1FLAorCQkJICAgICBfICgiVW5zdXBwb3J0ZWQgVVJJ
IHNjaGVtZSAnJXMnIiksIHVyaS0+c2NoZW1lKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGdf
dHlwZV9pc19hIChyZXF1ZXN0VHlwZSwgR19UWVBFX0lOSVRBQkxFKSkgeworCQlyZXR1cm4gKFNv
dXBSZXF1ZXN0ICopZ19pbml0YWJsZV9uZXcgKHJlcXVlc3RUeXBlLCAwLCBlcnJvciwKKwkJCQkJ
CSAgICAgICJ1cmkiLCB1cmksCisJCQkJCQkgICAgICAic2Vzc2lvbiIsIHNlc3Npb24sCisJCQkJ
CQkgICAgICAwKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gKFNvdXBSZXF1ZXN0ICopZ19vYmplY3Rf
bmV3IChyZXF1ZXN0VHlwZSwKKwkJCQkJCSAgICAidXJpIiwgdXJpLAorCQkJCQkJICAgICJzZXNz
aW9uIiwgc2Vzc2lvbiwKKwkJCQkJCSAgICAwKTsKKwl9Cit9CisKKy8qIFJGQyAyMzk2LCAzLjEg
Ki8KK3N0YXRpYyBnYm9vbGVhbgorc291cF9zY2hlbWVfaXNfdmFsaWQgKGNvbnN0IGNoYXIgKnNj
aGVtZSkKK3sKKwlpZiAoc2NoZW1lID09IE5VTEwgfHwKKwkgICAgIWdfYXNjaWlfaXNhbHBoYSAo
KnNjaGVtZSkpCisJCXJldHVybiBGQUxTRTsKKworCXNjaGVtZSsrOworCXdoaWxlICgqc2NoZW1l
KSB7CisJCWlmICghZ19hc2NpaV9pc2FscGhhICgqc2NoZW1lKSAmJgorCQkgICAgIWdfYXNjaWlf
aXNkaWdpdCAoKnNjaGVtZSkgJiYKKwkJICAgICpzY2hlbWUgIT0gJysnICYmCisJCSAgICAqc2No
ZW1lICE9ICctJyAmJgorCQkgICAgKnNjaGVtZSAhPSAnLicpCisJCQlyZXR1cm4gRkFMU0U7CisJ
CXNjaGVtZSsrOworCX0KKwlyZXR1cm4gVFJVRTsKK30KKwordm9pZAorc291cF9yZXF1ZXN0ZXJf
YWRkX3Byb3RvY29sIChTb3VwUmVxdWVzdGVyICpyZXF1ZXN0ZXIsCisJCQkgICAgIGNvbnN0IGNo
YXIgICpzY2hlbWUsCisJCQkgICAgIEdUeXBlIHJlcXVlc3RfdHlwZSkKK3sKKwlnX3JldHVybl9p
Zl9mYWlsIChTT1VQX0lTX1JFUVVFU1RFUiAocmVxdWVzdGVyKSk7CisJZ19yZXR1cm5faWZfZmFp
bCAoc291cF9zY2hlbWVfaXNfdmFsaWQgKHNjaGVtZSkpOworCisJaW5pdF9yZXF1ZXN0X3R5cGVz
IChyZXF1ZXN0ZXItPnByaXYpOworCWdfaGFzaF90YWJsZV9pbnNlcnQgKHJlcXVlc3Rlci0+cHJp
di0+cmVxdWVzdF90eXBlcywgZ19zdHJkdXAgKHNjaGVtZSksCisJCQkgICAgIEdTSVpFX1RPX1BP
SU5URVIgKHJlcXVlc3RfdHlwZSkpOworfQorCit2b2lkCitzb3VwX3JlcXVlc3Rlcl9yZW1vdmVf
cHJvdG9jb2wgKFNvdXBSZXF1ZXN0ZXIgKnJlcXVlc3RlciwKKwkJCQljb25zdCBjaGFyICAqc2No
ZW1lKQoreworCWdfcmV0dXJuX2lmX2ZhaWwgKFNPVVBfSVNfUkVRVUVTVEVSIChyZXF1ZXN0ZXIp
KTsKKwlnX3JldHVybl9pZl9mYWlsIChzb3VwX3NjaGVtZV9pc192YWxpZCAoc2NoZW1lKSk7CisK
Kwlpbml0X3JlcXVlc3RfdHlwZXMgKHJlcXVlc3Rlci0+cHJpdik7CisJZ19oYXNoX3RhYmxlX3Jl
bW92ZSAocmVxdWVzdGVyLT5wcml2LT5yZXF1ZXN0X3R5cGVzLCBzY2hlbWUpOworfQorCitHUXVh
cmsKK3NvdXBfZXJyb3JfcXVhcmsgKHZvaWQpCit7CisJc3RhdGljIEdRdWFyayBlcnJvcjsKKwlp
ZiAoIWVycm9yKQorCQllcnJvciA9IGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nICgic291cF9l
cnJvcl9xdWFyayIpOworCXJldHVybiBlcnJvcjsKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmggYi9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Rlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjZkZWQ5MGIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Rlci5oCkBAIC0wLDAgKzEsODAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBTT1VQX1JF
UVVFU1RFUl9ICisjZGVmaW5lIFNPVVBfUkVRVUVTVEVSX0ggMQorCisjaW5jbHVkZSAic291cC1y
ZXF1ZXN0LmgiCisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CisKK0dfQkVHSU5fREVDTFMKKwor
I2RlZmluZSBTT1VQX1RZUEVfUkVRVUVTVEVSICAgICAgICAgICAgKHNvdXBfcmVxdWVzdGVyX2dl
dF90eXBlICgpKQorI2RlZmluZSBTT1VQX1JFUVVFU1RFUihvYmopICAgICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgU09VUF9UWVBFX1JFUVVFU1RFUiwgU291cFJl
cXVlc3RlcikpCisjZGVmaW5lIFNPVVBfUkVRVUVTVEVSX0NMQVNTKGtsYXNzKSAgICAoR19UWVBF
X0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFNPVVBfVFlQRV9SRVFVRVNURVIsIFNvdXBSZXF1
ZXN0ZXJDbGFzcykpCisjZGVmaW5lIFNPVVBfSVNfUkVRVUVTVEVSKG9iaikgICAgICAgICAoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBTT1VQX1RZUEVfUkVRVUVTVEVSKSkKKyNk
ZWZpbmUgU09VUF9JU19SRVFVRVNURVJfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
VFlQRSAoKG9iaiksIFNPVVBfVFlQRV9SRVFVRVNURVIpKQorI2RlZmluZSBTT1VQX1JFUVVFU1RF
Ul9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBTT1VQ
X1RZUEVfUkVRVUVTVEVSLCBTb3VwUmVxdWVzdGVyQ2xhc3MpKQorCisjZGVmaW5lIFNPVVBfRVJS
T1Igc291cF9lcnJvcl9xdWFyayAoKQorCit0eXBlZGVmIGVudW0geworCVNPVVBfRVJST1JfQkFE
X1VSSSwKKwlTT1VQX0VSUk9SX1VOU1VQUE9SVEVEX1VSSV9TQ0hFTUUKK30gU291cEVycm9yOwor
Cit0eXBlZGVmIHN0cnVjdCBfU291cFJlcXVlc3RlciBTb3VwUmVxdWVzdGVyOwordHlwZWRlZiBz
dHJ1Y3QgX1NvdXBSZXF1ZXN0ZXJQcml2YXRlIFNvdXBSZXF1ZXN0ZXJQcml2YXRlOworCitzdHJ1
Y3QgX1NvdXBSZXF1ZXN0ZXIgeworCUdPYmplY3QgcGFyZW50OworCisJU291cFJlcXVlc3RlclBy
aXZhdGUgKnByaXY7Cit9OworCit0eXBlZGVmIHN0cnVjdCB7CisJR09iamVjdENsYXNzIHBhcmVu
dF9jbGFzczsKK30gU291cFJlcXVlc3RlckNsYXNzOworCitHVHlwZSBzb3VwX3JlcXVlc3Rlcl9n
ZXRfdHlwZSAodm9pZCk7CisKK1NvdXBSZXF1ZXN0ZXIgKnNvdXBfcmVxdWVzdGVyX25ldyAodm9p
ZCk7CisKK0dRdWFyayBzb3VwX2Vycm9yX3F1YXJrICh2b2lkKTsKKworU291cFJlcXVlc3QgKnNv
dXBfcmVxdWVzdGVyX3JlcXVlc3QgKFNvdXBSZXF1ZXN0ZXIgKnJlcXVlc3RlciwKKwkJCQkgICAg
IGNvbnN0IGNoYXIgKnVyaVN0cmluZywKKwkJCQkgICAgIFNvdXBTZXNzaW9uICpzZXNzaW9uLAor
CQkJCSAgICAgR0Vycm9yICoqZXJyb3IpOworCitTb3VwUmVxdWVzdCAqc291cF9yZXF1ZXN0ZXJf
cmVxdWVzdF91cmkgKFNvdXBSZXF1ZXN0ZXIgKnJlcXVlc3RlciwKKwkJCQkJIFNvdXBVUkkgKnVy
aSwKKwkJCQkJIFNvdXBTZXNzaW9uICpzZXNzaW9uLAorCQkJCQkgR0Vycm9yICoqZXJyb3IpOwor
Cit2b2lkIHNvdXBfcmVxdWVzdGVyX2FkZF9wcm90b2NvbCAoU291cFJlcXVlc3RlciAqcmVxdWVz
dGVyLAorCQkJCSAgY29uc3QgY2hhciAgKnNjaGVtZSwKKwkJCQkgIEdUeXBlIHJlcXVlc3RfdHlw
ZSk7CisKK3ZvaWQgc291cF9yZXF1ZXN0ZXJfcmVtb3ZlX3Byb3RvY29sIChTb3VwUmVxdWVzdGVy
ICpyZXF1ZXN0ZXIsCisJCQkJICAgICBjb25zdCBjaGFyICAqc2NoZW1lKTsKKworR19FTkRfREVD
TFMKKworI2VuZGlmIC8qIFNPVVBfUkVRVUVTVEVSX0ggKi8KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLXByaXZhdGUuaCBi
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLXBy
aXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTE0N2YzCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0
L3NvdXAtY2FjaGUtcHJpdmF0ZS5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBzb3VwLWNhY2hl
LXByaXZhdGUuaDoKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5k
ZWYgV0VCS0lUX1NPVVBfQ0FDSEVfUFJJVkFURV9ICisjZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hF
X1BSSVZBVEVfSCAxCisKKyNpbmNsdWRlICJzb3VwLWNhY2hlLmgiCisjaW5jbHVkZSA8bGlic291
cC9zb3VwLW1lc3NhZ2UuaD4KKworR19CRUdJTl9ERUNMUworCitXZWJLaXRTb3VwQ2FjaGVSZXNw
b25zZSB3ZWJraXRfc291cF9jYWNoZV9oYXNfcmVzcG9uc2UgKFdlYktpdFNvdXBDYWNoZSAgICpj
YWNoZSwKKwkJCQkJCQlTb3VwTWVzc2FnZSAqbXNnKTsKK0dJbnB1dFN0cmVhbSAqd2Via2l0X3Nv
dXBfY2FjaGVfc2VuZF9yZXNwb25zZSAoV2ViS2l0U291cENhY2hlICAgKmNhY2hlLAorCQkJCQkg
ICAgICAgU291cE1lc3NhZ2UgKm1zZyk7CitXZWJLaXRTb3VwQ2FjaGVhYmlsaXR5ICB3ZWJraXRf
c291cF9jYWNoZV9nZXRfY2FjaGVhYmlsaXR5IChXZWJLaXRTb3VwQ2FjaGUgICAqY2FjaGUsCisJ
CQkJCQkJICAgIFNvdXBNZXNzYWdlICptc2cpOworU291cE1lc3NhZ2UgKndlYmtpdF9zb3VwX2Nh
Y2hlX2dlbmVyYXRlX2NvbmRpdGlvbmFsX3JlcXVlc3QgKFdlYktpdFNvdXBDYWNoZSAgICpjYWNo
ZSwKKwkJCQkJCQkgICAgIFNvdXBNZXNzYWdlICpvcmlnaW5hbCk7CisKK0dfRU5EX0RFQ0xTCisK
KyNlbmRpZiAvKiBXRUJLSVRfU09VUF9DQUNIRV9QUklWQVRFX0ggKi8KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLmMgYi9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5jCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ZTVlZTgKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNo
ZS5jCkBAIC0wLDAgKzEsMTYyNyBAQAorLyoKKyAqIHNvdXAtY2FjaGUuYworICoKKyAqIENvcHly
aWdodCAoQykgMjAwOSwgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisvKiBUT0RPOgorICogLSBOZWVkIHRvIGhv
b2sgdGhlIGZlYXR1cmUgaW4gdGhlIHN5bmMgU291cFNlc3Npb24uCisgKiAtIE5lZWQgbW9yZSB0
ZXN0cy4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgor
I2VuZGlmCisKKyNpbmNsdWRlICJzb3VwLWNhY2hlLmgiCisjaW5jbHVkZSAic291cC1jYWNoZS1w
cml2YXRlLmgiCisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CisjaW5jbHVkZSA8Z2lvL2dpby5o
PgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitzdGF0aWMgU291cFNlc3Npb25GZWF0dXJlSW50ZXJm
YWNlICp3ZWJraXRfc291cF9jYWNoZV9kZWZhdWx0X2ZlYXR1cmVfaW50ZXJmYWNlOworc3RhdGlj
IHZvaWQgd2Via2l0X3NvdXBfY2FjaGVfc2Vzc2lvbl9mZWF0dXJlX2luaXQgKFNvdXBTZXNzaW9u
RmVhdHVyZUludGVyZmFjZSAqZmVhdHVyZV9pbnRlcmZhY2UsIGdwb2ludGVyIGludGVyZmFjZV9k
YXRhKTsKKworI2RlZmluZSBERUZBVUxUX01BWF9TSVpFIDUwICogMTAyNCAqIDEwMjQKKyNkZWZp
bmUgTUFYX0VOVFJZX0RBVEFfUEVSQ0VOVEFHRSAxMCAvKiBQZXJjZW50YWdlIG9mIHRoZSB0b3Rh
bCBzaXplCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgY2FjaGUgdGhh
dCBjYW4gYmUKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxlZCBieSBhIHNp
bmdsZSBlbnRyeSAqLworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0U291cENhY2hlRW50cnkgewor
CWNoYXIgKmtleTsKKwljaGFyICpmaWxlbmFtZTsKKwlndWludCBmcmVzaG5lc3NfbGlmZXRpbWU7
CisJZ2Jvb2xlYW4gbXVzdF9yZXZhbGlkYXRlOworCUdTdHJpbmcgKmRhdGE7CisJZ3NpemUgcG9z
OworCWdzaXplIGxlbmd0aDsKKwl0aW1lX3QgY29ycmVjdGVkX2luaXRpYWxfYWdlOworCXRpbWVf
dCByZXNwb25zZV90aW1lOworCWdib29sZWFuIHdyaXRpbmc7CisJZ2Jvb2xlYW4gZGlydHk7CisJ
Z2Jvb2xlYW4gZ290X2JvZHk7CisJZ2Jvb2xlYW4gYmVpbmdfdmFsaWRhdGVkOworCVNvdXBNZXNz
YWdlSGVhZGVycyAqaGVhZGVyczsKKwlHT3V0cHV0U3RyZWFtICpzdHJlYW07CisJR0Vycm9yICpl
cnJvcjsKKwlndWludCBoaXRzOworCUdMaXN0ICpscnU7CisJR0NhbmNlbGxhYmxlICpjYW5jZWxs
YWJsZTsKK30gV2ViS2l0U291cENhY2hlRW50cnk7CisKK3N0cnVjdCBfV2ViS2l0U291cENhY2hl
UHJpdmF0ZSB7CisJY2hhciAqY2FjaGVfZGlyOworCUdIYXNoVGFibGUgKmNhY2hlOworCWd1aW50
IG5fcGVuZGluZzsKKwlTb3VwU2Vzc2lvbiAqc2Vzc2lvbjsKKwlXZWJLaXRTb3VwQ2FjaGVUeXBl
IGNhY2hlX3R5cGU7CisJZ3VpbnQgc2l6ZTsKKwlndWludCBtYXhfc2l6ZTsKKwlndWludCBtYXhf
ZW50cnlfZGF0YV9zaXplOyAvKiBDb21wdXRlZCB2YWx1ZS4gSGVyZSBmb3IgcGVyZm9ybWFuY2Ug
cmVhc29ucyAqLworCUdMaXN0ICpscnVfc3RhcnQ7CisJR0xpc3QgKmxydV9lbmQ7Cit9OworCit0
eXBlZGVmIHN0cnVjdCB7CisJV2ViS2l0U291cENhY2hlICpjYWNoZTsKKwlXZWJLaXRTb3VwQ2Fj
aGVFbnRyeSAqZW50cnk7CisJU291cE1lc3NhZ2UgKm1zZzsKKwlndWxvbmcgZ290X2NodW5rX2hh
bmRsZXI7CisJZ3Vsb25nIGdvdF9ib2R5X2hhbmRsZXI7CisJZ3Vsb25nIHJlc3RhcnRlZF9oYW5k
bGVyOworfSBXZWJLaXRTb3VwQ2FjaGVXcml0aW5nRml4dHVyZTsKKworZW51bSB7CisJUFJPUF8w
LAorCVBST1BfQ0FDSEVfRElSLAorCVBST1BfQ0FDSEVfVFlQRQorfTsKKworI2RlZmluZSBXRUJL
SVRfU09VUF9DQUNIRV9HRVRfUFJJVkFURShvKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRF
ICgobyksIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUsIFdlYktpdFNvdXBDYWNoZVByaXZhdGUpKQor
CitHX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoV2ViS2l0U291cENhY2hlLCB3ZWJraXRfc291cF9j
YWNoZSwgR19UWVBFX09CSkVDVCwKKwkJCSBHX0lNUExFTUVOVF9JTlRFUkZBQ0UgKFNPVVBfVFlQ
RV9TRVNTSU9OX0ZFQVRVUkUsCisJCQkJCQl3ZWJraXRfc291cF9jYWNoZV9zZXNzaW9uX2ZlYXR1
cmVfaW5pdCkpCisKK3N0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2RlbGV0ZSAo
V2ViS2l0U291cENhY2hlICpjYWNoZSwgV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5KTsKK3N0
YXRpYyB2b2lkIG1ha2Vfcm9vbV9mb3JfbmV3X2VudHJ5IChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hl
LCBndWludCBsZW5ndGhfdG9fYWRkKTsKK3N0YXRpYyBnYm9vbGVhbiBjYWNoZV9hY2NlcHRzX2Vu
dHJpZXNfb2Zfc2l6ZSAoV2ViS2l0U291cENhY2hlICpjYWNoZSwgZ3VpbnQgbGVuZ3RoX3RvX2Fk
ZCk7CisKK3N0YXRpYyBXZWJLaXRTb3VwQ2FjaGVhYmlsaXR5CitnZXRfY2FjaGVhYmlsaXR5IChX
ZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLCBTb3VwTWVzc2FnZSAqbXNnKQoreworCVdlYktpdFNvdXBD
YWNoZWFiaWxpdHkgY2FjaGVhYmlsaXR5OworCWNvbnN0IGNoYXIgKmNhY2hlX2NvbnRyb2w7CisK
KwkvKiAxLiBUaGUgcmVxdWVzdCBtZXRob2QgbXVzdCBiZSBjYWNoZWFibGUgKi8KKwlpZiAobXNn
LT5tZXRob2QgPT0gU09VUF9NRVRIT0RfR0VUKQorCQljYWNoZWFiaWxpdHkgPSBXRUJLSVRfU09V
UF9DQUNIRV9DQUNIRUFCTEU7CisJZWxzZSBpZiAobXNnLT5tZXRob2QgPT0gU09VUF9NRVRIT0Rf
SEVBRCB8fAorCQkgbXNnLT5tZXRob2QgPT0gU09VUF9NRVRIT0RfVFJBQ0UgfHwKKwkJIG1zZy0+
bWV0aG9kID09IFNPVVBfTUVUSE9EX0NPTk5FQ1QpCisJCXJldHVybiBXRUJLSVRfU09VUF9DQUNI
RV9VTkNBQ0hFQUJMRTsKKwllbHNlCisJCXJldHVybiAoV0VCS0lUX1NPVVBfQ0FDSEVfVU5DQUNI
RUFCTEUgfCBXRUJLSVRfU09VUF9DQUNIRV9JTlZBTElEQVRFUyk7CisKKwljYWNoZV9jb250cm9s
ID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0IChtc2ctPnJlc3BvbnNlX2hlYWRlcnMsICJDYWNo
ZS1Db250cm9sIik7CisJaWYgKGNhY2hlX2NvbnRyb2wpIHsKKwkJR0hhc2hUYWJsZSAqaGFzaDsK
KwkJV2ViS2l0U291cENhY2hlUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0NBQ0hFX0dFVF9Q
UklWQVRFIChjYWNoZSk7CisKKwkJaGFzaCA9IHNvdXBfaGVhZGVyX3BhcnNlX3BhcmFtX2xpc3Qg
KGNhY2hlX2NvbnRyb2wpOworCisJCS8qIFNoYXJlZCBjYWNoZXMgTVVTVCBOT1Qgc3RvcmUgcHJp
dmF0ZSByZXNvdXJjZXMgKi8KKwkJaWYgKHByaXYtPmNhY2hlX3R5cGUgPT0gV0VCS0lUX1NPVVBf
Q0FDSEVfU0hBUkVEKSB7CisJCQlpZiAoZ19oYXNoX3RhYmxlX2xvb2t1cF9leHRlbmRlZCAoaGFz
aCwgInByaXZhdGUiLCBOVUxMLCBOVUxMKSkgeworCQkJCXNvdXBfaGVhZGVyX2ZyZWVfcGFyYW1f
bGlzdCAoaGFzaCk7CisJCQkJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFOwor
CQkJfQorCQl9CisKKwkJLyogMi4gVGhlICduby1zdG9yZScgY2FjaGUgZGlyZWN0aXZlIGRvZXMg
bm90IGFwcGVhciBpbiB0aGUKKwkJICogaGVhZGVycworCQkgKi8KKwkJaWYgKGdfaGFzaF90YWJs
ZV9sb29rdXBfZXh0ZW5kZWQgKGhhc2gsICJuby1zdG9yZSIsIE5VTEwsIE5VTEwpKSB7CisJCQlz
b3VwX2hlYWRlcl9mcmVlX3BhcmFtX2xpc3QgKGhhc2gpOworCQkJcmV0dXJuIFdFQktJVF9TT1VQ
X0NBQ0hFX1VOQ0FDSEVBQkxFOworCQl9CisKKwkJLyogVGhpcyBkb2VzIG5vdCBhcHBlYXIgaW4g
c2VjdGlvbiAyLjEsIGJ1dCBJIHRoaW5rIGl0IG1ha2VzCisJCSAqIHNlbnNlIHRvIGNoZWNrIGl0
IHRvbz8KKwkJICovCisJCWlmIChnX2hhc2hfdGFibGVfbG9va3VwX2V4dGVuZGVkIChoYXNoLCAi
bm8tY2FjaGUiLCBOVUxMLCBOVUxMKSkgeworCQkJc291cF9oZWFkZXJfZnJlZV9wYXJhbV9saXN0
IChoYXNoKTsKKwkJCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRTsKKwkJfQor
CX0KKworCXN3aXRjaCAobXNnLT5zdGF0dXNfY29kZSkgeworCQljYXNlIFNPVVBfU1RBVFVTX1BB
UlRJQUxfQ09OVEVOVDoKKwkJCS8qIFdlIGRvbid0IGNhY2hlIHBhcnRpYWwgcmVzcG9uc2VzLCBi
dXQgdGhleSBvbmx5CisJCQkgKiBpbnZhbGlkYXRlIGNhY2hlZCBmdWxsIHJlc3BvbnNlcyBpZiB0
aGUgaGVhZGVycworCQkJICogZG9uJ3QgbWF0Y2guCisJCQkgKi8KKwkJCWNhY2hlYWJpbGl0eSA9
IFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFOworCQkJYnJlYWs7CisKKwkJY2FzZSBTT1VQ
X1NUQVRVU19OT1RfTU9ESUZJRUQ6CisJCQkvKiBBIDMwNCByZXNwb25zZSB2YWxpZGF0ZXMgYW4g
ZXhpc3RpbmcgY2FjaGUgZW50cnkgKi8KKwkJCWNhY2hlYWJpbGl0eSA9IFdFQktJVF9TT1VQX0NB
Q0hFX1ZBTElEQVRFUzsKKwkJCWJyZWFrOworCisJCWNhc2UgU09VUF9TVEFUVVNfTVVMVElQTEVf
Q0hPSUNFUzoKKwkJY2FzZSBTT1VQX1NUQVRVU19NT1ZFRF9QRVJNQU5FTlRMWToKKwkJY2FzZSBT
T1VQX1NUQVRVU19HT05FOgorCQkJLyogRklYTUU6IGNhY2hlYWJsZSB1bmxlc3MgaW5kaWNhdGVk
IG90aGVyd2lzZSAqLworCQkJY2FjaGVhYmlsaXR5ID0gV0VCS0lUX1NPVVBfQ0FDSEVfVU5DQUNI
RUFCTEU7CisJCQlicmVhazsKKworCQljYXNlIFNPVVBfU1RBVFVTX0ZPVU5EOgorCQljYXNlIFNP
VVBfU1RBVFVTX1RFTVBPUkFSWV9SRURJUkVDVDoKKwkJCS8qIEZJWE1FOiBjYWNoZWFibGUgaWYg
ZXhwbGljaXRseSBpbmRpY2F0ZWQgKi8KKwkJCWNhY2hlYWJpbGl0eSA9IFdFQktJVF9TT1VQX0NB
Q0hFX1VOQ0FDSEVBQkxFOworCQkJYnJlYWs7CisKKwkJY2FzZSBTT1VQX1NUQVRVU19TRUVfT1RI
RVI6CisJCWNhc2UgU09VUF9TVEFUVVNfRk9SQklEREVOOgorCQljYXNlIFNPVVBfU1RBVFVTX05P
VF9GT1VORDoKKwkJY2FzZSBTT1VQX1NUQVRVU19NRVRIT0RfTk9UX0FMTE9XRUQ6CisJCQlyZXR1
cm4gKFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFIHwgV0VCS0lUX1NPVVBfQ0FDSEVfSU5W
QUxJREFURVMpOworCisJCWRlZmF1bHQ6CisJCQkvKiBBbnkgNXh4IHN0YXR1cyBvciBhbnkgNHh4
IHN0YXR1cyBub3QgaGFuZGxlZCBhYm92ZQorCQkJICogaXMgdW5jYWNoZWFibGUgYnV0IGRvZXNu
J3QgYnJlYWsgdGhlIGNhY2hlLgorCQkJICovCisJCQlpZiAoKG1zZy0+c3RhdHVzX2NvZGUgPj0g
U09VUF9TVEFUVVNfQkFEX1JFUVVFU1QgJiYKKwkJCSAgICAgbXNnLT5zdGF0dXNfY29kZSA8PSBT
T1VQX1NUQVRVU19GQUlMRURfREVQRU5ERU5DWSkgfHwKKwkJCSAgICBtc2ctPnN0YXR1c19jb2Rl
ID49IFNPVVBfU1RBVFVTX0lOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCQlyZXR1cm4gV0VCS0lU
X1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEU7CisKKwkJCS8qIEFuIHVucmVjb2duaXplZCAyeHgsIDN4
eCwgb3IgNHh4IHJlc3BvbnNlIGJyZWFrcworCQkJICogdGhlIGNhY2hlLgorCQkJICovCisJCQlp
ZiAoKG1zZy0+c3RhdHVzX2NvZGUgPiBTT1VQX1NUQVRVU19QQVJUSUFMX0NPTlRFTlQgJiYKKwkJ
CSAgICAgbXNnLT5zdGF0dXNfY29kZSA8IFNPVVBfU1RBVFVTX01VTFRJUExFX0NIT0lDRVMpIHx8
CisJCQkgICAgKG1zZy0+c3RhdHVzX2NvZGUgPiBTT1VQX1NUQVRVU19URU1QT1JBUllfUkVESVJF
Q1QgJiYKKwkJCSAgICAgbXNnLT5zdGF0dXNfY29kZSA8IFNPVVBfU1RBVFVTX0lOVEVSTkFMX1NF
UlZFUl9FUlJPUikpCisJCQkJcmV0dXJuIChXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRSB8
IFdFQktJVF9TT1VQX0NBQ0hFX0lOVkFMSURBVEVTKTsKKwkJCWJyZWFrOworCX0KKworCXJldHVy
biBjYWNoZWFiaWxpdHk7Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfc291cF9jYWNoZV9lbnRy
eV9mcmVlIChXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkpCit7CisJZ19mcmVlIChlbnRyeS0+
ZmlsZW5hbWUpOworCWVudHJ5LT5maWxlbmFtZSA9IE5VTEw7CisJZ19mcmVlIChlbnRyeS0+a2V5
KTsKKwllbnRyeS0+a2V5ID0gTlVMTDsKKworCWlmIChlbnRyeS0+aGVhZGVycykgeworCQlzb3Vw
X21lc3NhZ2VfaGVhZGVyc19mcmVlIChlbnRyeS0+aGVhZGVycyk7CisJCWVudHJ5LT5oZWFkZXJz
ID0gTlVMTDsKKwl9CisKKwlpZiAoZW50cnktPmRhdGEpIHsKKwkJZ19zdHJpbmdfZnJlZSAoZW50
cnktPmRhdGEsIFRSVUUpOworCQllbnRyeS0+ZGF0YSA9IE5VTEw7CisJfQorCWlmIChlbnRyeS0+
ZXJyb3IpIHsKKwkJZ19lcnJvcl9mcmVlIChlbnRyeS0+ZXJyb3IpOworCQllbnRyeS0+ZXJyb3Ig
PSBOVUxMOworCX0KKwlpZiAoZW50cnktPmNhbmNlbGxhYmxlKSB7CisJCWdfb2JqZWN0X3VucmVm
IChlbnRyeS0+Y2FuY2VsbGFibGUpOworCQllbnRyeS0+Y2FuY2VsbGFibGUgPSBOVUxMOworCX0K
KworCWdfc2xpY2VfZnJlZSAoV2ViS2l0U291cENhY2hlRW50cnksIGVudHJ5KTsKK30KKworc3Rh
dGljIHZvaWQKK2NvcHlfaGVhZGVycyAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFs
dWUsIFNvdXBNZXNzYWdlSGVhZGVycyAqaGVhZGVycykKK3sKKwlzb3VwX21lc3NhZ2VfaGVhZGVy
c19hcHBlbmQgKGhlYWRlcnMsIG5hbWUsIHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQKK3VwZGF0
ZV9oZWFkZXJzIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSwgU291cE1lc3Nh
Z2VIZWFkZXJzICpoZWFkZXJzKQoreworCWlmIChzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKGhl
YWRlcnMsIG5hbWUpKQorCQlzb3VwX21lc3NhZ2VfaGVhZGVyc19yZXBsYWNlIChoZWFkZXJzLCBu
YW1lLCB2YWx1ZSk7CisJZWxzZQorCQlzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQgKGhlYWRl
cnMsIG5hbWUsIHZhbHVlKTsKK30KKworc3RhdGljIGd1aW50Cit3ZWJraXRfc291cF9jYWNoZV9l
bnRyeV9nZXRfY3VycmVudF9hZ2UgKFdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSkKK3sKKwl0
aW1lX3Qgbm93ID0gdGltZSAoTlVMTCk7CisJdGltZV90IHJlc2lkZW50X3RpbWU7CisKKwlyZXNp
ZGVudF90aW1lID0gbm93IC0gZW50cnktPnJlc3BvbnNlX3RpbWU7CisJcmV0dXJuIGVudHJ5LT5j
b3JyZWN0ZWRfaW5pdGlhbF9hZ2UgKyByZXNpZGVudF90aW1lOworfQorCitzdGF0aWMgZ2Jvb2xl
YW4KK3dlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2lzX2ZyZXNoX2Vub3VnaCAoV2ViS2l0U291cENh
Y2hlRW50cnkgKmVudHJ5LCBpbnQgbWluX2ZyZXNoKQoreworCXVuc2lnbmVkIGxpbWl0ID0gKG1p
bl9mcmVzaCA9PSAtMSkgPyB3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9nZXRfY3VycmVudF9hZ2Ug
KGVudHJ5KSA6IG1pbl9mcmVzaDsKKwlyZXR1cm4gZW50cnktPmZyZXNobmVzc19saWZldGltZSA+
IGxpbWl0OworfQorCitzdGF0aWMgY2hhciAqCitzb3VwX21lc3NhZ2VfZ2V0X2NhY2hlX2tleSAo
U291cE1lc3NhZ2UgKm1zZykKK3sKKwlTb3VwVVJJICp1cmkgPSBzb3VwX21lc3NhZ2VfZ2V0X3Vy
aSAobXNnKTsKKwlyZXR1cm4gc291cF91cmlfdG9fc3RyaW5nICh1cmksIEZBTFNFKTsKK30KKwor
c3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X3NldF9mcmVzaG5lc3MgKFdlYktp
dFNvdXBDYWNoZUVudHJ5ICplbnRyeSwgU291cE1lc3NhZ2UgKm1zZywgV2ViS2l0U291cENhY2hl
ICpjYWNoZSkKK3sKKwljb25zdCBjaGFyICpjYWNoZV9jb250cm9sOworCWNvbnN0IGNoYXIgKmV4
cGlyZXMsICpkYXRlLCAqbGFzdF9tb2RpZmllZDsKKwlHSGFzaFRhYmxlICpoYXNoOworCisJaGFz
aCA9IE5VTEw7CisKKwljYWNoZV9jb250cm9sID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0IChl
bnRyeS0+aGVhZGVycywgIkNhY2hlLUNvbnRyb2wiKTsKKwlpZiAoY2FjaGVfY29udHJvbCkgewor
CQljb25zdCBjaGFyICptYXhfYWdlLCAqc19tYXhhZ2U7CisJCWdpbnQ2NCBmcmVzaG5lc3NfbGlm
ZXRpbWUgPSAwOworCQlXZWJLaXRTb3VwQ2FjaGVQcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBf
Q0FDSEVfR0VUX1BSSVZBVEUgKGNhY2hlKTsKKworCQloYXNoID0gc291cF9oZWFkZXJfcGFyc2Vf
cGFyYW1fbGlzdCAoY2FjaGVfY29udHJvbCk7CisKKwkJLyogU2hvdWxkIHdlIHJlLXZhbGlkYXRl
IHRoZSBlbnRyeSB3aGVuIGl0IGdvZXMgc3RhbGUgKi8KKwkJZW50cnktPm11c3RfcmV2YWxpZGF0
ZSA9IChnYm9vbGVhbilnX2hhc2hfdGFibGVfbG9va3VwIChoYXNoLCAibXVzdC1yZXZhbGlkYXRl
Iik7CisKKwkJLyogU2VjdGlvbiAyLjMuMSAqLworCQlpZiAocHJpdi0+Y2FjaGVfdHlwZSA9PSBX
RUJLSVRfU09VUF9DQUNIRV9TSEFSRUQpIHsKKwkJCXNfbWF4YWdlID0gZ19oYXNoX3RhYmxlX2xv
b2t1cCAoaGFzaCwgInMtbWF4YWdlIik7CisJCQlpZiAoc19tYXhhZ2UpIHsKKwkJCQlmcmVzaG5l
c3NfbGlmZXRpbWUgPSBnX2FzY2lpX3N0cnRvbGwgKHNfbWF4YWdlLCBOVUxMLCAxMCk7CisJCQkJ
aWYgKGZyZXNobmVzc19saWZldGltZSkgeworCQkJCQkvKiBJbXBsaWVzIHByb3h5LXJldmFsaWRh
dGUuIFRPRE86IGlzIGl0IHRydWU/ICovCisJCQkJCWVudHJ5LT5tdXN0X3JldmFsaWRhdGUgPSBU
UlVFOworCQkJCQlzb3VwX2hlYWRlcl9mcmVlX3BhcmFtX2xpc3QgKGhhc2gpOworCQkJCQlyZXR1
cm47CisJCQkJfQorCQkJfQorCQl9CisKKwkJLyogSWYgJ21heC1hZ2UnIGNhY2hlIGRpcmVjdGl2
ZSBpcyBwcmVzZW50LCB1c2UgdGhhdCAqLworCQltYXhfYWdlID0gZ19oYXNoX3RhYmxlX2xvb2t1
cCAoaGFzaCwgIm1heC1hZ2UiKTsKKwkJaWYgKG1heF9hZ2UpCisJCQlmcmVzaG5lc3NfbGlmZXRp
bWUgPSBnX2FzY2lpX3N0cnRvbGwgKG1heF9hZ2UsIE5VTEwsIDEwKTsKKworCQlpZiAoZnJlc2hu
ZXNzX2xpZmV0aW1lKSB7CisJCQllbnRyeS0+ZnJlc2huZXNzX2xpZmV0aW1lID0gKGd1aW50KU1J
TiAoZnJlc2huZXNzX2xpZmV0aW1lLCBHX01BWFVJTlQzMik7CisJCQlzb3VwX2hlYWRlcl9mcmVl
X3BhcmFtX2xpc3QgKGhhc2gpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJaWYgKGhhc2ggIT0g
TlVMTCkKKwkJc291cF9oZWFkZXJfZnJlZV9wYXJhbV9saXN0IChoYXNoKTsKKworCS8qIElmIHRo
ZSAnRXhwaXJlcycgcmVzcG9uc2UgaGVhZGVyIGlzIHByZXNlbnQsIHVzZSBpdHMgdmFsdWUKKwkg
KiBtaW51cyB0aGUgdmFsdWUgb2YgdGhlICdEYXRlJyByZXNwb25zZSBoZWFkZXIKKwkgKi8KKwll
eHBpcmVzID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0IChlbnRyeS0+aGVhZGVycywgIkV4cGly
ZXMiKTsKKwlkYXRlID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0IChlbnRyeS0+aGVhZGVycywg
IkRhdGUiKTsKKwlpZiAoZXhwaXJlcyAmJiBkYXRlKSB7CisJCVNvdXBEYXRlICpleHBpcmVzX2Qs
ICpkYXRlX2Q7CisJCXRpbWVfdCBleHBpcmVzX3QsIGRhdGVfdDsKKworCQlleHBpcmVzX2QgPSBz
b3VwX2RhdGVfbmV3X2Zyb21fc3RyaW5nIChleHBpcmVzKTsKKwkJaWYgKGV4cGlyZXNfZCkgewor
CQkJZGF0ZV9kID0gc291cF9kYXRlX25ld19mcm9tX3N0cmluZyAoZGF0ZSk7CisKKwkJCWV4cGly
ZXNfdCA9IHNvdXBfZGF0ZV90b190aW1lX3QgKGV4cGlyZXNfZCk7CisJCQlkYXRlX3QgPSBzb3Vw
X2RhdGVfdG9fdGltZV90IChkYXRlX2QpOworCisJCQlzb3VwX2RhdGVfZnJlZSAoZXhwaXJlc19k
KTsKKwkJCXNvdXBfZGF0ZV9mcmVlIChkYXRlX2QpOworCisJCQlpZiAoZXhwaXJlc190ICYmIGRh
dGVfdCkgeworCQkJCWVudHJ5LT5mcmVzaG5lc3NfbGlmZXRpbWUgPSAoZ3VpbnQpTUFYIChleHBp
cmVzX3QgLSBkYXRlX3QsIDApOworCQkJCXJldHVybjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8q
IElmIEV4cGlyZXMgaXMgbm90IGEgdmFsaWQgZGF0ZSB3ZSBzaG91bGQKKwkJCSAgIHRyZWF0IGl0
IGFzIGFscmVhZHkgZXhwaXJlZCwgc2VlIHNlY3Rpb24KKwkJCSAgIDMuMyAqLworCQkJZW50cnkt
PmZyZXNobmVzc19saWZldGltZSA9IDA7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKiBPdGhl
cndpc2UgYW4gaGV1cmlzdGljIG1heSBiZSB1c2VkICovCisKKwkvKiBIZXVyaXN0aWNzIE1VU1Qg
Tk9UIGJlIHVzZWQgd2l0aCB0aGVzZSBzdGF0dXMgY29kZXMKKwkgICAoc2VjdGlvbiAyLjMuMS4x
KSAqLworCWlmIChtc2ctPnN0YXR1c19jb2RlICE9IFNPVVBfU1RBVFVTX09LICYmCisJICAgIG1z
Zy0+c3RhdHVzX2NvZGUgIT0gU09VUF9TVEFUVVNfTk9OX0FVVEhPUklUQVRJVkUgJiYKKwkgICAg
bXNnLT5zdGF0dXNfY29kZSAhPSBTT1VQX1NUQVRVU19QQVJUSUFMX0NPTlRFTlQgJiYKKwkgICAg
bXNnLT5zdGF0dXNfY29kZSAhPSBTT1VQX1NUQVRVU19NVUxUSVBMRV9DSE9JQ0VTICYmCisJICAg
IG1zZy0+c3RhdHVzX2NvZGUgIT0gU09VUF9TVEFUVVNfTU9WRURfUEVSTUFORU5UTFkgJiYKKwkg
ICAgbXNnLT5zdGF0dXNfY29kZSAhPSBTT1VQX1NUQVRVU19HT05FKQorCQlnb3RvIGV4cGlyZTsK
KworCS8qIFRPRE86IGF0dGFjaCB3YXJuaW5nIDExMyBpZiByZXNwb25zZSdzIGN1cnJlbnRfYWdl
IGlzIG1vcmUKKwkgICB0aGFuIDI0aCAoc2VjdGlvbiAyLjMuMS4xKSB3aGVuIHVzaW5nIGhldXJp
c3RpY3MgKi8KKworCS8qIExhc3QtTW9kaWZpZWQgYmFzZWQgaGV1cmlzdGljICovCisJbGFzdF9t
b2RpZmllZCA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldCAoZW50cnktPmhlYWRlcnMsICJMYXN0
LU1vZGlmaWVkIik7CisJaWYgKGxhc3RfbW9kaWZpZWQpIHsKKwkJU291cERhdGUgKnNvdXBfZGF0
ZTsKKwkJdGltZV90IG5vdywgbGFzdF9tb2RpZmllZF90OworCisJCXNvdXBfZGF0ZSA9IHNvdXBf
ZGF0ZV9uZXdfZnJvbV9zdHJpbmcgKGxhc3RfbW9kaWZpZWQpOworCQlsYXN0X21vZGlmaWVkX3Qg
PSBzb3VwX2RhdGVfdG9fdGltZV90IChzb3VwX2RhdGUpOworCQlub3cgPSB0aW1lIChOVUxMKTsK
KworI2RlZmluZSBIRVVSSVNUSUNfRkFDVE9SIDAuMSAvKiBGcm9tIFNlY3Rpb24gMi4zLjEuMSAq
LworCisJCWVudHJ5LT5mcmVzaG5lc3NfbGlmZXRpbWUgPSBNQVggKDAsIChub3cgLSBsYXN0X21v
ZGlmaWVkX3QpICogSEVVUklTVElDX0ZBQ1RPUik7CisJCXNvdXBfZGF0ZV9mcmVlIChzb3VwX2Rh
dGUpOworCX0KKworCXJldHVybjsKKworIGV4cGlyZToKKwkvKiBJZiBhbGwgZWxzZSBmYWlscywg
bWFrZSB0aGUgZW50cnkgZXhwaXJlIGltbWVkaWF0ZWx5ICovCisJZW50cnktPmZyZXNobmVzc19s
aWZldGltZSA9IDA7Cit9CisKK3N0YXRpYyBXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqCit3ZWJraXRf
c291cF9jYWNoZV9lbnRyeV9uZXcgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsIFNvdXBNZXNzYWdl
ICptc2csIHRpbWVfdCByZXF1ZXN0X3RpbWUsIHRpbWVfdCByZXNwb25zZV90aW1lKQoreworCVdl
YktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeTsKKwlTb3VwTWVzc2FnZUhlYWRlcnMgKmhlYWRlcnM7
CisJY29uc3QgY2hhciAqZGF0ZTsKKwljaGFyICptZDU7CisKKwllbnRyeSA9IGdfc2xpY2VfbmV3
MCAoV2ViS2l0U291cENhY2hlRW50cnkpOworCWVudHJ5LT5kaXJ0eSA9IEZBTFNFOworCWVudHJ5
LT53cml0aW5nID0gRkFMU0U7CisJZW50cnktPmdvdF9ib2R5ID0gRkFMU0U7CisJZW50cnktPmJl
aW5nX3ZhbGlkYXRlZCA9IEZBTFNFOworCWVudHJ5LT5kYXRhID0gZ19zdHJpbmdfbmV3IChOVUxM
KTsKKwllbnRyeS0+cG9zID0gMDsKKwllbnRyeS0+ZXJyb3IgPSBOVUxMOworCisJLyoga2V5ICYg
ZmlsZW5hbWUgKi8KKwllbnRyeS0+a2V5ID0gc291cF9tZXNzYWdlX2dldF9jYWNoZV9rZXkgKG1z
Zyk7CisJbWQ1ID0gZ19jb21wdXRlX2NoZWNrc3VtX2Zvcl9zdHJpbmcgKEdfQ0hFQ0tTVU1fTUQ1
LCBlbnRyeS0+a2V5LCAtMSk7CisJZW50cnktPmZpbGVuYW1lID0gZ19idWlsZF9maWxlbmFtZSAo
Y2FjaGUtPnByaXYtPmNhY2hlX2RpciwgbWQ1LCBOVUxMKTsKKwlnX2ZyZWUgKG1kNSk7CisKKwkv
KiBIZWFkZXJzICovCisJaGVhZGVycyA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX25ldyAoU09VUF9N
RVNTQUdFX0hFQURFUlNfUkVTUE9OU0UpOworCXNvdXBfbWVzc2FnZV9oZWFkZXJzX2ZvcmVhY2gg
KG1zZy0+cmVzcG9uc2VfaGVhZGVycywKKwkJCQkgICAgICAoU291cE1lc3NhZ2VIZWFkZXJzRm9y
ZWFjaEZ1bmMpY29weV9oZWFkZXJzLAorCQkJCSAgICAgIGhlYWRlcnMpOworCWVudHJ5LT5oZWFk
ZXJzID0gaGVhZGVyczsKKworCS8qIExSVSBsaXN0ICovCisJZW50cnktPmhpdHMgPSAwOworCisJ
LyogU2VjdGlvbiAyLjMuMSwgRnJlc2huZXNzIExpZmV0aW1lICovCisJd2Via2l0X3NvdXBfY2Fj
aGVfZW50cnlfc2V0X2ZyZXNobmVzcyAoZW50cnksIG1zZywgY2FjaGUpOworCisJLyogU2VjdGlv
biAyLjMuMiwgQ2FsY3VsYXRpbmcgQWdlICovCisJZGF0ZSA9IHNvdXBfbWVzc2FnZV9oZWFkZXJz
X2dldCAoZW50cnktPmhlYWRlcnMsICJEYXRlIik7CisKKwlpZiAoZGF0ZSkgeworCQlTb3VwRGF0
ZSAqc291cF9kYXRlOworCQljb25zdCBjaGFyICphZ2U7CisJCXRpbWVfdCBkYXRlX3ZhbHVlLCBh
cHBhcmVudF9hZ2UsIGNvcnJlY3RlZF9yZWNlaXZlZF9hZ2UsIHJlc3BvbnNlX2RlbGF5LCBhZ2Vf
dmFsdWUgPSAwOworCisJCXNvdXBfZGF0ZSA9IHNvdXBfZGF0ZV9uZXdfZnJvbV9zdHJpbmcgKGRh
dGUpOworCQlkYXRlX3ZhbHVlID0gc291cF9kYXRlX3RvX3RpbWVfdCAoc291cF9kYXRlKTsKKwkJ
c291cF9kYXRlX2ZyZWUgKHNvdXBfZGF0ZSk7CisKKwkJYWdlID0gc291cF9tZXNzYWdlX2hlYWRl
cnNfZ2V0IChlbnRyeS0+aGVhZGVycywgIkFnZSIpOworCQlpZiAoYWdlKQorCQkJYWdlX3ZhbHVl
ID0gZ19hc2NpaV9zdHJ0b2xsIChhZ2UsIE5VTEwsIDEwKTsKKworCQllbnRyeS0+cmVzcG9uc2Vf
dGltZSA9IHJlc3BvbnNlX3RpbWU7CisJCWFwcGFyZW50X2FnZSA9IE1BWCAoMCwgZW50cnktPnJl
c3BvbnNlX3RpbWUgLSBkYXRlX3ZhbHVlKTsKKwkJY29ycmVjdGVkX3JlY2VpdmVkX2FnZSA9IE1B
WCAoYXBwYXJlbnRfYWdlLCBhZ2VfdmFsdWUpOworCQlyZXNwb25zZV9kZWxheSA9IGVudHJ5LT5y
ZXNwb25zZV90aW1lIC0gcmVxdWVzdF90aW1lOworCQllbnRyeS0+Y29ycmVjdGVkX2luaXRpYWxf
YWdlID0gY29ycmVjdGVkX3JlY2VpdmVkX2FnZSArIHJlc3BvbnNlX2RlbGF5OworCX0gZWxzZSB7
CisJCS8qIElzIHRoaXMgY29ycmVjdCA/ICovCisJCWVudHJ5LT5jb3JyZWN0ZWRfaW5pdGlhbF9h
Z2UgPSB0aW1lIChOVUxMKTsKKwl9CisKKwlyZXR1cm4gZW50cnk7Cit9CisKK3N0YXRpYyB2b2lk
Cit3ZWJraXRfc291cF9jYWNoZV93cml0aW5nX2ZpeHR1cmVfZnJlZSAoV2ViS2l0U291cENhY2hl
V3JpdGluZ0ZpeHR1cmUgKmZpeHR1cmUpCit7CisJLyogRnJlZSBmaXh0dXJlLiBBbmQgZGlzY29u
bmVjdCBzaWduYWxzLCB3ZSBkb24ndCB3YW50IHRvCisJICAgbGlzdGVuIHRvIG1vcmUgU291cE1l
c3NhZ2UgZXZlbnRzIGFzIHdlJ3JlIGZpbmlzaGVkIHdpdGgKKwkgICB0aGlzIHJlc291cmNlICov
CisJaWYgKGdfc2lnbmFsX2hhbmRsZXJfaXNfY29ubmVjdGVkIChmaXh0dXJlLT5tc2csIGZpeHR1
cmUtPmdvdF9jaHVua19oYW5kbGVyKSkKKwkJZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0IChm
aXh0dXJlLT5tc2csIGZpeHR1cmUtPmdvdF9jaHVua19oYW5kbGVyKTsKKwlpZiAoZ19zaWduYWxf
aGFuZGxlcl9pc19jb25uZWN0ZWQgKGZpeHR1cmUtPm1zZywgZml4dHVyZS0+Z290X2JvZHlfaGFu
ZGxlcikpCisJCWdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCAoZml4dHVyZS0+bXNnLCBmaXh0
dXJlLT5nb3RfYm9keV9oYW5kbGVyKTsKKwlpZiAoZ19zaWduYWxfaGFuZGxlcl9pc19jb25uZWN0
ZWQgKGZpeHR1cmUtPm1zZywgZml4dHVyZS0+cmVzdGFydGVkX2hhbmRsZXIpKQorCQlnX3NpZ25h
bF9oYW5kbGVyX2Rpc2Nvbm5lY3QgKGZpeHR1cmUtPm1zZywgZml4dHVyZS0+cmVzdGFydGVkX2hh
bmRsZXIpOworCWdfb2JqZWN0X3VucmVmIChmaXh0dXJlLT5tc2cpOworCWdfb2JqZWN0X3VucmVm
IChmaXh0dXJlLT5jYWNoZSk7CisJZ19zbGljZV9mcmVlIChXZWJLaXRTb3VwQ2FjaGVXcml0aW5n
Rml4dHVyZSwgZml4dHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkCitjbG9zZV9yZWFkeV9jYiAoR09i
amVjdCAqc291cmNlLCBHQXN5bmNSZXN1bHQgKnJlc3VsdCwgV2ViS2l0U291cENhY2hlV3JpdGlu
Z0ZpeHR1cmUgKmZpeHR1cmUpCit7CisJV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5ID0gZml4
dHVyZS0+ZW50cnk7CisJV2ViS2l0U291cENhY2hlICpjYWNoZSA9IGZpeHR1cmUtPmNhY2hlOwor
CUdPdXRwdXRTdHJlYW0gKnN0cmVhbSA9IEdfT1VUUFVUX1NUUkVBTSAoc291cmNlKTsKKwlnb2Zm
c2V0IGNvbnRlbnRfbGVuZ3RoOworCisJZ193YXJuX2lmX2ZhaWwgKGVudHJ5LT5lcnJvciA9PSBO
VUxMKTsKKworCS8qIEZJWE1FOiB3aGF0IGRvIHdlIGRvIG9uIGVycm9yID8gKi8KKworCWlmIChz
dHJlYW0pIHsKKwkJZ19vdXRwdXRfc3RyZWFtX2Nsb3NlX2ZpbmlzaCAoc3RyZWFtLCByZXN1bHQs
IE5VTEwpOworCQlnX29iamVjdF91bnJlZiAoc3RyZWFtKTsKKwl9CisJZW50cnktPnN0cmVhbSA9
IE5VTEw7CisKKwljb250ZW50X2xlbmd0aCA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9jb250
ZW50X2xlbmd0aCAoZW50cnktPmhlYWRlcnMpOworCisJLyogSWYgdGhlIHByb2Nlc3Mgd2FzIGNh
bmNlbGxlZCwgdGhlbiBkZWxldGUgdGhlIGVudHJ5IGZyb20KKwkgICB0aGUgY2FjaGUuIERvIGl0
IGFsc28gaWYgdGhlIHNpemUgb2YgYSBjaHVua2VkIHJlc291cmNlIGlzCisJICAgdG9vIG11Y2gg
Zm9yIHRoZSBjYWNoZSAqLworCWlmIChnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxlZCAoZW50cnkt
PmNhbmNlbGxhYmxlKSkgeworCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9kZWxldGUgKGNhY2hl
LCBlbnRyeSk7CisJCWVudHJ5ID0gTlVMTDsKKwl9IGVsc2UgaWYgKChzb3VwX21lc3NhZ2VfaGVh
ZGVyc19nZXRfZW5jb2RpbmcgKGVudHJ5LT5oZWFkZXJzKSA9PSBTT1VQX0VOQ09ESU5HX0NIVU5L
RUQpIHx8CisJCSAgIGVudHJ5LT5sZW5ndGggIT0gY29udGVudF9sZW5ndGgpIHsKKwkJLyoqIFR3
byBvcHRpb25zIGhlcmU6CisJCSAqCisJCSAqIDEuICJjaHVua2VkIiBkYXRhLCBlbnRyeSB3YXMg
dGVtcG9yYXJpbHkgYWRkZWQgdG8KKwkJICogY2FjaGUgKGFzIGNvbnRlbnQtbGVuZ3RoIGlzIDAp
IGFuZCBub3cgdGhhdCB3ZSBoYXZlCisJCSAqIHRoZSBhY3R1YWwgc2l6ZSB3ZSBoYXZlIHRvIGV2
YWx1YXRlIGlmIHdlIHdhbnQgaXQKKwkJICogaW4gdGhlIGNhY2hlIG9yIG5vdAorCQkgKgorCQkg
KiAyLiBDb250ZW50LUxlbmd0aCBoYXMgYSBkaWZmZXJlbnQgdmFsdWUgdGhhbiBhY3R1YWwKKwkJ
ICogbGVuZ3RoLCBtZWFucyB0aGF0IHRoZSBjb250ZW50IHdhcyBlbmNvZGVkIGZvcgorCQkgKiB0
cmFuc21pc3Npb24gKHR5cGljYWxseSBjb21wcmVzc2VkKSBhbmQgdGh1cyB3ZQorCQkgKiBoYXZl
IHRvIHN1YnN0cmFjdCB0aGUgY29udGVudC1sZW5ndGggdmFsdWUgdGhhdCB3YXMKKwkJICogYWRk
ZWQgdG8gdGhlIGNhY2hlIGFuZCBhZGQgdGhlIHVuZW5jb2RlZCBsZW5ndGgKKwkJICoqLworCQln
aW50IGxlbmd0aF90b19hZGQgPSBlbnRyeS0+bGVuZ3RoIC0gY29udGVudF9sZW5ndGg7CisKKwkJ
LyogTWFrZSByb29tIGluIGNhY2hlIGlmIG5lZWRlZCAqLworCQlpZiAoY2FjaGVfYWNjZXB0c19l
bnRyaWVzX29mX3NpemUgKGNhY2hlLCBsZW5ndGhfdG9fYWRkKSkgeworCQkJbWFrZV9yb29tX2Zv
cl9uZXdfZW50cnkgKGNhY2hlLCBsZW5ndGhfdG9fYWRkKTsKKworCQkJY2FjaGUtPnByaXYtPnNp
emUgKz0gbGVuZ3RoX3RvX2FkZDsKKwkJfSBlbHNlIHsKKwkJCXdlYmtpdF9zb3VwX2NhY2hlX2Vu
dHJ5X2RlbGV0ZSAoY2FjaGUsIGVudHJ5KTsKKwkJCWVudHJ5ID0gTlVMTDsKKwkJfQorCX0KKwor
CWlmIChlbnRyeSkgeworCQkvKiBHZXQgcmlkIG9mIHRoZSBHU3RyaW5nIGluIG1lbW9yeSBmb3Ig
dGhlIHJlc291cmNlIG5vdyAqLworCQlpZiAoZW50cnktPmRhdGEpIHsKKwkJCWdfc3RyaW5nX2Zy
ZWUgKGVudHJ5LT5kYXRhLCBUUlVFKTsKKwkJCWVudHJ5LT5kYXRhID0gTlVMTDsKKwkJfQorCisJ
CWVudHJ5LT5kaXJ0eSA9IEZBTFNFOworCQllbnRyeS0+d3JpdGluZyA9IEZBTFNFOworCQllbnRy
eS0+Z290X2JvZHkgPSBGQUxTRTsKKwkJZW50cnktPnBvcyA9IDA7CisKKwkJZ19vYmplY3RfdW5y
ZWYgKGVudHJ5LT5jYW5jZWxsYWJsZSk7CisJCWVudHJ5LT5jYW5jZWxsYWJsZSA9IE5VTEw7CisJ
fQorCisJY2FjaGUtPnByaXYtPm5fcGVuZGluZy0tOworCisJLyogRnJlZXMgKi8KKwl3ZWJraXRf
c291cF9jYWNoZV93cml0aW5nX2ZpeHR1cmVfZnJlZSAoZml4dHVyZSk7Cit9CisKK3N0YXRpYyB2
b2lkCit3cml0ZV9yZWFkeV9jYiAoR09iamVjdCAqc291cmNlLCBHQXN5bmNSZXN1bHQgKnJlc3Vs
dCwgV2ViS2l0U291cENhY2hlV3JpdGluZ0ZpeHR1cmUgKmZpeHR1cmUpCit7CisJR091dHB1dFN0
cmVhbSAqc3RyZWFtID0gR19PVVRQVVRfU1RSRUFNIChzb3VyY2UpOworCUdFcnJvciAqZXJyb3Ig
PSBOVUxMOworCWdzc2l6ZSB3cml0ZV9zaXplOworCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRy
eSA9IGZpeHR1cmUtPmVudHJ5OworCisJaWYgKGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkIChl
bnRyeS0+Y2FuY2VsbGFibGUpKSB7CisJCWdfb3V0cHV0X3N0cmVhbV9jbG9zZV9hc3luYyAoc3Ry
ZWFtLAorCQkJCQkgICAgIEdfUFJJT1JJVFlfREVGQVVMVCwKKwkJCQkJICAgICBlbnRyeS0+Y2Fu
Y2VsbGFibGUsCisJCQkJCSAgICAgKEdBc3luY1JlYWR5Q2FsbGJhY2spY2xvc2VfcmVhZHlfY2Is
CisJCQkJCSAgICAgZml4dHVyZSk7CisJCXJldHVybjsKKwl9CisKKwl3cml0ZV9zaXplID0gZ19v
dXRwdXRfc3RyZWFtX3dyaXRlX2ZpbmlzaCAoc3RyZWFtLCByZXN1bHQsICZlcnJvcik7CisJaWYg
KHdyaXRlX3NpemUgPD0gMCB8fCBlcnJvcikgeworCQlpZiAoZXJyb3IpCisJCQllbnRyeS0+ZXJy
b3IgPSBlcnJvcjsKKwkJZ19vdXRwdXRfc3RyZWFtX2Nsb3NlX2FzeW5jIChzdHJlYW0sCisJCQkJ
CSAgICAgR19QUklPUklUWV9ERUZBVUxULAorCQkJCQkgICAgIGVudHJ5LT5jYW5jZWxsYWJsZSwK
KwkJCQkJICAgICAoR0FzeW5jUmVhZHlDYWxsYmFjayljbG9zZV9yZWFkeV9jYiwKKwkJCQkJICAg
ICBmaXh0dXJlKTsKKwkJLyogRklYTUU6IFdlIHNob3VsZCBjb21wbGV0ZWx5IHN0b3AgY2FjaGlu
ZyB0aGUKKwkJICAgcmVzb3VyY2UgYXQgdGhpcyBwb2ludCAqLworCX0gZWxzZSB7CisJCWVudHJ5
LT5wb3MgKz0gd3JpdGVfc2l6ZTsKKworCQkvKiBBcmUgd2Ugc3RpbGwgd3JpdGluZyBhbmQgaXMg
dGhlcmUgbmV3IGRhdGEgdG8gd3JpdGUKKwkJICAgYWxyZWFkeSA/ICovCisJCWlmIChlbnRyeS0+
ZGF0YSAmJiBlbnRyeS0+cG9zIDwgZW50cnktPmRhdGEtPmxlbikgeworCQkJZ19vdXRwdXRfc3Ry
ZWFtX3dyaXRlX2FzeW5jIChlbnRyeS0+c3RyZWFtLAorCQkJCQkJICAgICBlbnRyeS0+ZGF0YS0+
c3RyICsgZW50cnktPnBvcywKKwkJCQkJCSAgICAgZW50cnktPmRhdGEtPmxlbiAtIGVudHJ5LT5w
b3MsCisJCQkJCQkgICAgIEdfUFJJT1JJVFlfREVGQVVMVCwKKwkJCQkJCSAgICAgZW50cnktPmNh
bmNlbGxhYmxlLAorCQkJCQkJICAgICAoR0FzeW5jUmVhZHlDYWxsYmFjayl3cml0ZV9yZWFkeV9j
YiwKKwkJCQkJCSAgICAgZml4dHVyZSk7CisJCX0gZWxzZSB7CisJCQllbnRyeS0+d3JpdGluZyA9
IEZBTFNFOworCisJCQlpZiAoZW50cnktPmdvdF9ib2R5KSB7CisJCQkJLyogSWYgd2UgYWxyZWFk
eSByZWNlaXZlZCAnZ290LWJvZHknCisJCQkJICAgYW5kIHdlIGhhdmUgd3JpdHRlbiBhbGwgdGhl
IGRhdGEsCisJCQkJICAgd2UgY2FuIGNsb3NlIHRoZSBzdHJlYW0gKi8KKwkJCQlnX291dHB1dF9z
dHJlYW1fY2xvc2VfYXN5bmMgKGVudHJ5LT5zdHJlYW0sCisJCQkJCQkJICAgICBHX1BSSU9SSVRZ
X0RFRkFVTFQsCisJCQkJCQkJICAgICBlbnRyeS0+Y2FuY2VsbGFibGUsCisJCQkJCQkJICAgICAo
R0FzeW5jUmVhZHlDYWxsYmFjayljbG9zZV9yZWFkeV9jYiwKKwkJCQkJCQkgICAgIGZpeHR1cmUp
OworCQkJfQorCQl9CisJfQorfQorCitzdGF0aWMgdm9pZAorbXNnX2dvdF9jaHVua19jYiAoU291
cE1lc3NhZ2UgKm1zZywgU291cEJ1ZmZlciAqY2h1bmssIFdlYktpdFNvdXBDYWNoZVdyaXRpbmdG
aXh0dXJlICpmaXh0dXJlKQoreworCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSA9IGZpeHR1
cmUtPmVudHJ5OworCisJZ19yZXR1cm5faWZfZmFpbCAoY2h1bmstPmRhdGEgJiYgY2h1bmstPmxl
bmd0aCk7CisJZ19yZXR1cm5faWZfZmFpbCAoZW50cnkpOworCisJLyogSWdub3JlIHRoaXMgaWYg
dGhlIHdyaXRpbmcgb3IgYXBwZW5kaW5nIHdhcyBjYW5jZWxsZWQgKi8KKwlpZiAoIWdfY2FuY2Vs
bGFibGVfaXNfY2FuY2VsbGVkIChlbnRyeS0+Y2FuY2VsbGFibGUpKSB7CisJCWdfc3RyaW5nX2Fw
cGVuZF9sZW4gKGVudHJ5LT5kYXRhLCBjaHVuay0+ZGF0YSwgY2h1bmstPmxlbmd0aCk7CisJCWVu
dHJ5LT5sZW5ndGggPSBlbnRyeS0+ZGF0YS0+bGVuOworCisJCWlmICghY2FjaGVfYWNjZXB0c19l
bnRyaWVzX29mX3NpemUgKGZpeHR1cmUtPmNhY2hlLCBlbnRyeS0+bGVuZ3RoKSkgeworCQkJLyog
UXVpY2tseSBjYW5jZWwgdGhlIGNhY2hpbmcgb2YgdGhlIHJlc291cmNlICovCisJCQlnX2NhbmNl
bGxhYmxlX2NhbmNlbCAoZW50cnktPmNhbmNlbGxhYmxlKTsKKwkJfQorCX0KKworCS8qIEZJWE1F
OiByZW1vdmUgdGhlIGVycm9yIGNoZWNrIHdoZW4gd2UgY2FuY2VsIHRoZSBjYWNoaW5nIGF0CisJ
ICAgdGhlIGZpcnN0IHdyaXRlIGVycm9yICovCisJLyogT25seSB3cml0ZSBpZiB0aGUgZW50cnkg
c3RyZWFtIGlzIHJlYWR5ICovCisJaWYgKGVudHJ5LT53cml0aW5nID09IEZBTFNFICYmIGVudHJ5
LT5lcnJvciA9PSBOVUxMICYmIGVudHJ5LT5zdHJlYW0pIHsKKwkJR1N0cmluZyAqZGF0YSA9IGVu
dHJ5LT5kYXRhOworCQllbnRyeS0+d3JpdGluZyA9IFRSVUU7CisJCWdfb3V0cHV0X3N0cmVhbV93
cml0ZV9hc3luYyAoZW50cnktPnN0cmVhbSwKKwkJCQkJICAgICBkYXRhLT5zdHIgKyBlbnRyeS0+
cG9zLAorCQkJCQkgICAgIGRhdGEtPmxlbiAtIGVudHJ5LT5wb3MsCisJCQkJCSAgICAgR19QUklP
UklUWV9ERUZBVUxULAorCQkJCQkgICAgIGVudHJ5LT5jYW5jZWxsYWJsZSwKKwkJCQkJICAgICAo
R0FzeW5jUmVhZHlDYWxsYmFjayl3cml0ZV9yZWFkeV9jYiwKKwkJCQkJICAgICBmaXh0dXJlKTsK
Kwl9Cit9CisKK3N0YXRpYyB2b2lkCittc2dfZ290X2JvZHlfY2IgKFNvdXBNZXNzYWdlICptc2cs
IFdlYktpdFNvdXBDYWNoZVdyaXRpbmdGaXh0dXJlICpmaXh0dXJlKQoreworCVdlYktpdFNvdXBD
YWNoZUVudHJ5ICplbnRyeSA9IGZpeHR1cmUtPmVudHJ5OworCWdfcmV0dXJuX2lmX2ZhaWwgKGVu
dHJ5KTsKKworCWVudHJ5LT5nb3RfYm9keSA9IFRSVUU7CisKKwlpZiAoIWVudHJ5LT5zdHJlYW0g
JiYgZW50cnktPnBvcyAhPSBlbnRyeS0+bGVuZ3RoKQorCQkvKiBUaGUgc3RyZWFtIGlzIG5vdCBy
ZWFkeSB0byBiZSB3cml0dGVuIGJ1dCB3ZSBzdGlsbAorCQkgICBoYXZlIGRhdGEgdG8gd3JpdGUs
IHdlJ2xsIHdyaXRlIGl0IHdoZW4gdGhlIHN0cmVhbQorCQkgICBpcyBvcGVuZWQgZm9yIHdyaXRp
bmcgKi8KKwkJcmV0dXJuOworCisKKwlpZiAoZW50cnktPnBvcyAhPSBlbnRyeS0+bGVuZ3RoKSB7
CisJCS8qIElmIHdlIHN0aWxsIGhhdmUgZGF0YSB0byB3cml0ZSwgd3JpdGUgaXQsCisJCSAgIHdy
aXRlX3JlYWR5X2NiIHdpbGwgY2xvc2UgdGhlIHN0cmVhbSAqLworCQlpZiAoZW50cnktPndyaXRp
bmcgPT0gRkFMU0UgJiYgZW50cnktPmVycm9yID09IE5VTEwgJiYgZW50cnktPnN0cmVhbSkgewor
CQkJZ19vdXRwdXRfc3RyZWFtX3dyaXRlX2FzeW5jIChlbnRyeS0+c3RyZWFtLAorCQkJCQkJICAg
ICBlbnRyeS0+ZGF0YS0+c3RyICsgZW50cnktPnBvcywKKwkJCQkJCSAgICAgZW50cnktPmRhdGEt
PmxlbiAtIGVudHJ5LT5wb3MsCisJCQkJCQkgICAgIEdfUFJJT1JJVFlfREVGQVVMVCwKKwkJCQkJ
CSAgICAgZW50cnktPmNhbmNlbGxhYmxlLAorCQkJCQkJICAgICAoR0FzeW5jUmVhZHlDYWxsYmFj
ayl3cml0ZV9yZWFkeV9jYiwKKwkJCQkJCSAgICAgZml4dHVyZSk7CisJCX0KKwkJcmV0dXJuOwor
CX0KKworCWlmIChlbnRyeS0+c3RyZWFtKQorCQlnX291dHB1dF9zdHJlYW1fY2xvc2VfYXN5bmMg
KGVudHJ5LT5zdHJlYW0sCisJCQkJCSAgICAgR19QUklPUklUWV9ERUZBVUxULAorCQkJCQkgICAg
IGVudHJ5LT5jYW5jZWxsYWJsZSwKKwkJCQkJICAgICAoR0FzeW5jUmVhZHlDYWxsYmFjayljbG9z
ZV9yZWFkeV9jYiwKKwkJCQkJICAgICBmaXh0dXJlKTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtp
dF9zb3VwX2NhY2hlX2VudHJ5X2RlbGV0ZSAoV2ViS2l0U291cENhY2hlICpjYWNoZSwgV2ViS2l0
U291cENhY2hlRW50cnkgKmVudHJ5KQoreworCUdGaWxlICpmaWxlOworCWNoYXIgKm1kNSwgKmZp
bGVuYW1lOworCisJLyogRGVsZXRlIGNhY2hlIGZpbGUuIFdlIGRvbid0IHVzZSB0aGUgZW50cnkt
PmZpbGVuYW1lIGJlY2F1c2UKKwkgICB3ZSB3YW50IHRvIGVuc3VyZSB0aGF0IGZpbGUgaXMgZGVs
ZXRlZCBldmVuIHRvdWdoIHRoZSBjYWNoZQorCSAgIGJlY2FtZSBzb21laG93IGNvcnJ1cHRlZCBh
bmQgdGhlIGVudHJ5IGlzIG5vdCB0aGVyZSAqLworCW1kNSA9IGdfY29tcHV0ZV9jaGVja3N1bV9m
b3Jfc3RyaW5nIChHX0NIRUNLU1VNX01ENSwgZW50cnktPmtleSwgLTEpOworCWZpbGVuYW1lID0g
Z19idWlsZF9maWxlbmFtZSAoY2FjaGUtPnByaXYtPmNhY2hlX2RpciwgbWQ1LCBOVUxMKTsKKwlm
aWxlID0gZ19maWxlX25ld19mb3JfcGF0aCAoZmlsZW5hbWUpOworCWdfZmlsZV9kZWxldGUgKGZp
bGUsIE5VTEwsIE5VTEwpOworCWdfZnJlZSAobWQ1KTsKKwlnX2ZyZWUgKGZpbGVuYW1lKTsKKwln
X29iamVjdF91bnJlZiAoZmlsZSk7CisKKwkvKiBSZW1vdmUgZnJvbSBMUlUgKi8KKwljYWNoZS0+
cHJpdi0+bHJ1X3N0YXJ0ID0gZ19saXN0X2RlbGV0ZV9saW5rIChjYWNoZS0+cHJpdi0+bHJ1X3N0
YXJ0LCBlbnRyeS0+bHJ1KTsKKworCS8qIFJlbW92ZSBmcm9tIGNhY2hlICovCisJZ19oYXNoX3Rh
YmxlX3JlbW92ZSAoY2FjaGUtPnByaXYtPmNhY2hlLCBlbnRyeS0+a2V5KTsKK30KKworc3RhdGlj
IGdpbnQKK2xydV9jb21wYXJlX2Z1bmMgKGdjb25zdHBvaW50ZXIgYSwgZ2NvbnN0cG9pbnRlciBi
KQoreworCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeV9hID0gKFdlYktpdFNvdXBDYWNoZUVu
dHJ5ICopYTsKKwlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnlfYiA9IChXZWJLaXRTb3VwQ2Fj
aGVFbnRyeSAqKWI7CisKKwkvKiogVGhlIHJhdGlvbmFsZSBvZiB0aGlzIHNvcnRpbmcgZnVuYyBp
cworCSAqCisJICogMS4gc29ydCBieSBoaXRzIC0+IExSVSBhbGdvcml0aG0sIHRoZW4KKwkgKgor
CSAqIDIuIHNvcnQgYnkgZnJlc2huZXNzIGxpZmV0aW1lLCB3ZSBiZXR0ZXIgZGlzY2FyZCBmaXJz
dAorCSAqIGVudHJpZXMgdGhhdCBhcmUgY2xvc2UgdG8gZXhwaXJlCisJICoKKwkgKiAzLiBzb3J0
IGJ5IHNpemUsIHJlcGxhY2UgZmlyc3Qgc21hbGwgc2l6ZSByZXNvdXJjZXMgYXMgdGhleQorCSAq
IGFyZSBjaGVhcGVyIHRvIGRvd25sb2FkCisJICoqLworCisJLyogU29ydCBieSBoaXRzICovCisJ
aWYgKGVudHJ5X2EtPmhpdHMgIT0gZW50cnlfYi0+aGl0cykKKwkJcmV0dXJuIGVudHJ5X2EtPmhp
dHMgLSBlbnRyeV9iLT5oaXRzOworCisJLyogU29ydCBieSBmcmVzaG5lc3NfbGlmZXRpbWUgKi8K
KwlpZiAoZW50cnlfYS0+ZnJlc2huZXNzX2xpZmV0aW1lICE9IGVudHJ5X2ItPmZyZXNobmVzc19s
aWZldGltZSkKKwkJcmV0dXJuIGVudHJ5X2EtPmZyZXNobmVzc19saWZldGltZSAtIGVudHJ5X2It
PmZyZXNobmVzc19saWZldGltZTsKKworCS8qIFNvcnQgYnkgc2l6ZSAqLworCXJldHVybiBlbnRy
eV9hLT5sZW5ndGggLSBlbnRyeV9iLT5sZW5ndGg7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorY2Fj
aGVfYWNjZXB0c19lbnRyaWVzX29mX3NpemUgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsIGd1aW50
IGxlbmd0aF90b19hZGQpCit7CisJLyogV2UgY291bGQgYWRkIGhlcmUgc29tZSBtb3JlIGhldXJp
c3RpY3MuIFRPRE86IHJldmlldyBob3cKKwkgICB0aGlzIGlzIGRvbmUgYnkgb3RoZXIgSFRUUCBj
YWNoZXMgKi8KKworCXJldHVybiBsZW5ndGhfdG9fYWRkIDw9IGNhY2hlLT5wcml2LT5tYXhfZW50
cnlfZGF0YV9zaXplOworfQorCitzdGF0aWMgdm9pZAorbWFrZV9yb29tX2Zvcl9uZXdfZW50cnkg
KFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsIGd1aW50IGxlbmd0aF90b19hZGQpCit7CisJLyogQ2hl
Y2sgdGhhdCB0aGVyZSBpcyBlbm91Z2ggcm9vbSBmb3IgdGhlIG5ldyBlbnRyeS4gVGhpcyBpcwor
CSAgIGFuIGFwcHJveGltYXRpb24gYXMgd2UncmUgbm90IHdvcmtpbmcgb3V0IHRoZSBzaXplIG9m
IHRoZQorCSAgIGNhY2hlIGZpbGUgb3IgdGhlIHNpemUgb2YgdGhlIGhlYWRlcnMgZm9yIHBlcmZv
cm1hbmNlCisJICAgcmVhc29ucy4gVE9ETzogY2hlY2sgaWYgdGhhdCB3b3VsZCBiZSByZWFsbHkg
dGhhdCBleHBlbnNpdmUgKi8KKwl3aGlsZSAoY2FjaGUtPnByaXYtPmxydV9zdGFydCAmJgorCSAg
ICAgICAobGVuZ3RoX3RvX2FkZCArIGNhY2hlLT5wcml2LT5zaXplID4gY2FjaGUtPnByaXYtPm1h
eF9zaXplKSkgeworCQlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqb2xkX2VudHJ5OworCisJCS8qIFJl
bW92ZSBmcm9tIGxpc3QgKi8KKwkJb2xkX2VudHJ5ID0gKFdlYktpdFNvdXBDYWNoZUVudHJ5ICop
Y2FjaGUtPnByaXYtPmxydV9zdGFydC0+ZGF0YTsKKwkJY2FjaGUtPnByaXYtPmxydV9zdGFydCA9
IGdfbGlzdF9kZWxldGVfbGluayAoY2FjaGUtPnByaXYtPmxydV9zdGFydCwgY2FjaGUtPnByaXYt
PmxydV9zdGFydCk7CisKKwkJLyogRGlzY2FyZCBlbnRyaWVzLiBPbmNlIGNhbmNlbGxlZCByZXNv
dXJjZXMgd2lsbCBiZQorCQkgICBmcmVlZCBpbiBjbG9zZV9yZWFkeV9jYiAqLworCQlnX2RlYnVn
ICgiRGlzY2FyZGluZyAoJXUgYnl0ZXMpLi4uXHQobm93ICV1KSIsIG9sZF9lbnRyeS0+bGVuZ3Ro
LCBjYWNoZS0+cHJpdi0+c2l6ZSk7CisJCWNhY2hlLT5wcml2LT5zaXplIC09IG9sZF9lbnRyeS0+
bGVuZ3RoOworCisJCWlmIChvbGRfZW50cnktPmRpcnR5KQorCQkJZ19jYW5jZWxsYWJsZV9jYW5j
ZWwgKG9sZF9lbnRyeS0+Y2FuY2VsbGFibGUpOworCQllbHNlCisJCQl3ZWJraXRfc291cF9jYWNo
ZV9lbnRyeV9kZWxldGUgKGNhY2hlLCBvbGRfZW50cnkpOworCX0KKwlpZiAoR19VTkxJS0VMWSAo
Y2FjaGUtPnByaXYtPmxydV9zdGFydCA9PSBOVUxMKSkKKwkJY2FjaGUtPnByaXYtPmxydV9lbmQg
PSBOVUxMOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3dlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2lu
c2VydF9ieV9rZXkgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsIGNvbnN0IGNoYXIgKmtleSwgV2Vi
S2l0U291cENhY2hlRW50cnkgKmVudHJ5KQoreworCWd1aW50IGxlbmd0aF90b19hZGQgPSAwOwor
CisJaWYgKHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9lbmNvZGluZyAoZW50cnktPmhlYWRlcnMp
ICE9IFNPVVBfRU5DT0RJTkdfQ0hVTktFRCkKKwkJbGVuZ3RoX3RvX2FkZCA9IHNvdXBfbWVzc2Fn
ZV9oZWFkZXJzX2dldF9jb250ZW50X2xlbmd0aCAoZW50cnktPmhlYWRlcnMpOworCisJLyogQ2hl
Y2sgaWYgd2UgYXJlIGdvaW5nIHRvIHN0b3JlIHRoZSByZXNvdXJjZSBkZXBlbmRpbmcgb24gaXRz
IHNpemUgKi8KKwlpZiAobGVuZ3RoX3RvX2FkZCkgeworCQlpZiAoIWNhY2hlX2FjY2VwdHNfZW50
cmllc19vZl9zaXplIChjYWNoZSwgbGVuZ3RoX3RvX2FkZCkpCisJCQlyZXR1cm4gRkFMU0U7CisK
KwkJLyogTWFrZSByb29tIGZvciBuZXcgZW50cnkgaWYgbmVlZGVkICovCisJCW1ha2Vfcm9vbV9m
b3JfbmV3X2VudHJ5IChjYWNoZSwgbGVuZ3RoX3RvX2FkZCk7CisJfQorCisJZ19oYXNoX3RhYmxl
X2luc2VydCAoY2FjaGUtPnByaXYtPmNhY2hlLCBnX3N0cmR1cCAoa2V5KSwgZW50cnkpOworCisJ
LyogQ29tcHV0ZSBuZXcgY2FjaGUgc2l6ZSAqLworCWNhY2hlLT5wcml2LT5zaXplICs9IGxlbmd0
aF90b19hZGQ7CisKKwkvKiBVcGRhdGUgTFJVIGxpc3RzICovCisJY2FjaGUtPnByaXYtPmxydV9z
dGFydCA9IGdfbGlzdF9pbnNlcnRfc29ydGVkIChjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0LCBlbnRy
eSwgbHJ1X2NvbXBhcmVfZnVuYyk7CisJaWYgKEdfTElLRUxZIChjYWNoZS0+cHJpdi0+bHJ1X2Vu
ZCkpIHsKKwkJd2hpbGUgKGNhY2hlLT5wcml2LT5scnVfZW5kLT5uZXh0ICE9IE5VTEwpCisJCQlj
YWNoZS0+cHJpdi0+bHJ1X2VuZCA9IGdfbGlzdF9uZXh0IChjYWNoZS0+cHJpdi0+bHJ1X2VuZCk7
CisJfSBlbHNlIHsKKwkJY2FjaGUtPnByaXYtPmxydV9lbmQgPSBjYWNoZS0+cHJpdi0+bHJ1X3N0
YXJ0OworCX0KKworCXJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZAorbXNnX3Jlc3RhcnRl
ZF9jYiAoU291cE1lc3NhZ2UgKm1zZywgV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5KQorewor
CS8qIEZJWE1FOiBXaGF0IHNob3VsZCB3ZSBkbyBoZXJlIGV4YWN0bHk/ICovCit9CisKK3N0YXRp
YyB2b2lkCithcHBlbmRfdG9fcmVhZHlfY2IgKEdPYmplY3QgKnNvdXJjZSwgR0FzeW5jUmVzdWx0
ICpyZXN1bHQsIFdlYktpdFNvdXBDYWNoZVdyaXRpbmdGaXh0dXJlICpmaXh0dXJlKQoreworCUdG
aWxlICpmaWxlID0gKEdGaWxlICopc291cmNlOworCUdPdXRwdXRTdHJlYW0gKnN0cmVhbTsKKwlX
ZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkgPSBmaXh0dXJlLT5lbnRyeTsKKworCXN0cmVhbSA9
IChHT3V0cHV0U3RyZWFtICopZ19maWxlX2FwcGVuZF90b19maW5pc2ggKGZpbGUsIHJlc3VsdCwg
JmVudHJ5LT5lcnJvcik7CisKKwlpZiAoZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQgKGVudHJ5
LT5jYW5jZWxsYWJsZSkgfHwgZW50cnktPmVycm9yKSB7CisJCWZpeHR1cmUtPmNhY2hlLT5wcml2
LT5zaXplIC09IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9jb250ZW50X2xlbmd0aCAoZW50cnkt
PmhlYWRlcnMpOworCQlmaXh0dXJlLT5jYWNoZS0+cHJpdi0+bl9wZW5kaW5nLS07CisJCXdlYmtp
dF9zb3VwX2NhY2hlX2VudHJ5X2RlbGV0ZSAoZml4dHVyZS0+Y2FjaGUsIGVudHJ5KTsKKwkJd2Vi
a2l0X3NvdXBfY2FjaGVfd3JpdGluZ19maXh0dXJlX2ZyZWUgKGZpeHR1cmUpOworCQlyZXR1cm47
CisJfQorCisJZW50cnktPnN0cmVhbSA9IGdfb2JqZWN0X3JlZiAoc3RyZWFtKTsKKwlnX29iamVj
dF91bnJlZiAoZmlsZSk7CisKKwkvKiBJZiB3ZSBhbHJlYWR5IGdvdCBhbGwgdGhlIGRhdGEgd2Ug
aGF2ZSB0byBpbml0aWF0ZSB0aGUKKwkgICB3cml0aW5nIGhlcmUsIHNpbmNlIHdlIHdvbid0IGdl
dCBtb3JlICdnb3QtY2h1bmsnCisJICAgc2lnbmFscyAqLworCWlmIChlbnRyeS0+Z290X2JvZHkp
IHsKKwkJR1N0cmluZyAqZGF0YSA9IGVudHJ5LT5kYXRhOworCisJCS8qIEl0IGNvdWxkIGhhcHBl
biB0aGF0IHJlYWRpbmcgdGhlIGRhdGEgZnJvbSBzZXJ2ZXIKKwkJICAgd2FzIGNvbXBsZXRlZCBi
ZWZvcmUgdGhpcyBoYXBwZW5zLiBJbiB0aGF0IGNhc2UKKwkJICAgdGhlcmUgaXMgbm8gZGF0YSAq
LworCQlpZiAoZGF0YSkgeworCQkJZW50cnktPndyaXRpbmcgPSBUUlVFOworCQkJZ19vdXRwdXRf
c3RyZWFtX3dyaXRlX2FzeW5jIChlbnRyeS0+c3RyZWFtLAorCQkJCQkJICAgICBkYXRhLT5zdHIg
KyBlbnRyeS0+cG9zLAorCQkJCQkJICAgICBkYXRhLT5sZW4gLSBlbnRyeS0+cG9zLAorCQkJCQkJ
ICAgICBHX1BSSU9SSVRZX0RFRkFVTFQsCisJCQkJCQkgICAgIGVudHJ5LT5jYW5jZWxsYWJsZSwK
KwkJCQkJCSAgICAgKEdBc3luY1JlYWR5Q2FsbGJhY2spd3JpdGVfcmVhZHlfY2IsCisJCQkJCQkg
ICAgIGZpeHR1cmUpOworCQl9CisJfQorfQorCit0eXBlZGVmIHN0cnVjdCB7CisJdGltZV90IHJl
cXVlc3RfdGltZTsKKwlTb3VwU2Vzc2lvbkZlYXR1cmUgKmZlYXR1cmU7CisJZ3Vsb25nIGdvdF9o
ZWFkZXJzX2hhbmRsZXI7Cit9IFJlcXVlc3RIZWxwZXI7CisKK3N0YXRpYyB2b2lkCittc2dfZ290
X2hlYWRlcnNfY2IgKFNvdXBNZXNzYWdlICptc2csIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlX
ZWJLaXRTb3VwQ2FjaGUgKmNhY2hlOworCVdlYktpdFNvdXBDYWNoZWFiaWxpdHkgY2FjaGVhYmxl
OworCVJlcXVlc3RIZWxwZXIgKmhlbHBlcjsKKwl0aW1lX3QgcmVxdWVzdF90aW1lLCByZXNwb25z
ZV90aW1lOworCisJcmVzcG9uc2VfdGltZSA9IHRpbWUgKE5VTEwpOworCisJaGVscGVyID0gKFJl
cXVlc3RIZWxwZXIgKil1c2VyX2RhdGE7CisJY2FjaGUgPSBXRUJLSVRfU09VUF9DQUNIRSAoaGVs
cGVyLT5mZWF0dXJlKTsKKwlyZXF1ZXN0X3RpbWUgPSBoZWxwZXItPnJlcXVlc3RfdGltZTsKKwln
X3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMgKG1zZywgbXNnX2dvdF9oZWFkZXJz
X2NiLCB1c2VyX2RhdGEpOworCWdfc2xpY2VfZnJlZSAoUmVxdWVzdEhlbHBlciwgaGVscGVyKTsK
KworCWNhY2hlYWJsZSA9IHdlYmtpdF9zb3VwX2NhY2hlX2dldF9jYWNoZWFiaWxpdHkgKGNhY2hl
LCBtc2cpOworCisJaWYgKGNhY2hlYWJsZSAmIFdFQktJVF9TT1VQX0NBQ0hFX0NBQ0hFQUJMRSkg
eworCQlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnk7CisJCWNoYXIgKmtleTsKKwkJR0ZpbGUg
KmZpbGU7CisJCVdlYktpdFNvdXBDYWNoZVdyaXRpbmdGaXh0dXJlICpmaXh0dXJlOworCisJCS8q
IENoZWNrIGlmIHdlIGFyZSBhbHJlYWR5IGNhY2hpbmcgdGhpcyByZXNvdXJjZSAqLworCQlrZXkg
PSBzb3VwX21lc3NhZ2VfZ2V0X2NhY2hlX2tleSAobXNnKTsKKwkJZW50cnkgPSBnX2hhc2hfdGFi
bGVfbG9va3VwIChjYWNoZS0+cHJpdi0+Y2FjaGUsIGtleSk7CisJCWdfZnJlZSAoa2V5KTsKKwor
CQlpZiAoZW50cnkgJiYgZW50cnktPmRpcnR5KQorCQkJcmV0dXJuOworCisJCS8qIENyZWF0ZSBh
IG5ldyBlbnRyeSwgZGVsZXRpbmcgYW55IG9sZCBvbmUgaWYgcHJlc2VudCAqLworCQllbnRyeSA9
IHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X25ldyAoY2FjaGUsIG1zZywgcmVxdWVzdF90aW1lLCBy
ZXNwb25zZV90aW1lKTsKKwkJd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfZGVsZXRlIChjYWNoZSwg
ZW50cnkpOworCisJCWVudHJ5LT5oaXRzID0gMTsKKworCQkvKiBEbyBub3QgY29udGludWUgaWYg
aXQgY2FuIG5vdCBiZSBzdG9yZWQgKi8KKwkJaWYgKCF3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9p
bnNlcnRfYnlfa2V5IChjYWNoZSwgKGNvbnN0IGdjaGFyICopZW50cnktPmtleSwgZW50cnkpKSB7
CisJCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9mcmVlIChlbnRyeSk7CisJCQlyZXR1cm47CisJ
CX0KKworCQlmaXh0dXJlID0gZ19zbGljZV9uZXcgKFdlYktpdFNvdXBDYWNoZVdyaXRpbmdGaXh0
dXJlKTsKKwkJZml4dHVyZS0+Y2FjaGUgPSBnX29iamVjdF9yZWYgKGNhY2hlKTsKKwkJZml4dHVy
ZS0+ZW50cnkgPSBlbnRyeTsKKwkJZml4dHVyZS0+bXNnID0gZ19vYmplY3RfcmVmIChtc2cpOwor
CisJCS8qIFdlIGNvbm5lY3Qgbm93IHRvIHRoZXNlIHNpZ25hbHMgYW5kIGJ1ZmZlciB0aGUgZGF0
YQorCQkgICBpZiBpdCBjb21lcyBiZWZvcmUgdGhlIGZpbGUgaXMgcmVhZHkgZm9yIHdyaXRpbmcg
Ki8KKwkJZml4dHVyZS0+Z290X2NodW5rX2hhbmRsZXIgPQorCQkJZ19zaWduYWxfY29ubmVjdCAo
bXNnLCAiZ290LWNodW5rIiwgR19DQUxMQkFDSyAobXNnX2dvdF9jaHVua19jYiksIGZpeHR1cmUp
OworCQlmaXh0dXJlLT5nb3RfYm9keV9oYW5kbGVyID0KKwkJCWdfc2lnbmFsX2Nvbm5lY3QgKG1z
ZywgImdvdC1ib2R5IiwgR19DQUxMQkFDSyAobXNnX2dvdF9ib2R5X2NiKSwgZml4dHVyZSk7CisJ
CWZpeHR1cmUtPnJlc3RhcnRlZF9oYW5kbGVyID0KKwkJCWdfc2lnbmFsX2Nvbm5lY3QgKG1zZywg
InJlc3RhcnRlZCIsIEdfQ0FMTEJBQ0sgKG1zZ19yZXN0YXJ0ZWRfY2IpLCBlbnRyeSk7CisKKwkJ
LyogUHJlcGFyZSBlbnRyeSAqLworCQlmaWxlID0gZ19maWxlX25ld19mb3JfcGF0aCAoZW50cnkt
PmZpbGVuYW1lKTsKKwkJY2FjaGUtPnByaXYtPm5fcGVuZGluZysrOworCisJCWVudHJ5LT5kaXJ0
eSA9IFRSVUU7CisJCWVudHJ5LT5jYW5jZWxsYWJsZSA9IGdfY2FuY2VsbGFibGVfbmV3ICgpOwor
CQlnX2ZpbGVfYXBwZW5kX3RvX2FzeW5jIChmaWxlLCAwLAorCQkJCQlHX1BSSU9SSVRZX0RFRkFV
TFQsIGVudHJ5LT5jYW5jZWxsYWJsZSwKKwkJCQkJKEdBc3luY1JlYWR5Q2FsbGJhY2spYXBwZW5k
X3RvX3JlYWR5X2NiLAorCQkJCQlmaXh0dXJlKTsKKwl9IGVsc2UgaWYgKGNhY2hlYWJsZSAmIFdF
QktJVF9TT1VQX0NBQ0hFX0lOVkFMSURBVEVTKSB7CisJCWNoYXIgKmtleTsKKwkJV2ViS2l0U291
cENhY2hlRW50cnkgKmVudHJ5OworCisJCWtleSA9IHNvdXBfbWVzc2FnZV9nZXRfY2FjaGVfa2V5
IChtc2cpOworCQllbnRyeSA9IGdfaGFzaF90YWJsZV9sb29rdXAgKGNhY2hlLT5wcml2LT5jYWNo
ZSwga2V5KTsKKwkJZ19mcmVlIChrZXkpOworCisJCWlmIChlbnRyeSkKKwkJCXdlYmtpdF9zb3Vw
X2NhY2hlX2VudHJ5X2RlbGV0ZSAoY2FjaGUsIGVudHJ5KTsKKwl9IGVsc2UgaWYgKGNhY2hlYWJs
ZSAmIFdFQktJVF9TT1VQX0NBQ0hFX1ZBTElEQVRFUykgeworCQljaGFyICprZXk7CisJCVdlYktp
dFNvdXBDYWNoZUVudHJ5ICplbnRyeTsKKworCQlrZXkgPSBzb3VwX21lc3NhZ2VfZ2V0X2NhY2hl
X2tleSAobXNnKTsKKwkJZW50cnkgPSBnX2hhc2hfdGFibGVfbG9va3VwIChjYWNoZS0+cHJpdi0+
Y2FjaGUsIGtleSk7CisJCWdfZnJlZSAoa2V5KTsKKworCQlnX3JldHVybl9pZl9mYWlsIChlbnRy
eSk7CisKKwkJZW50cnktPmJlaW5nX3ZhbGlkYXRlZCA9IEZBTFNFOworCisJCS8qIFdlIHVwZGF0
ZSB0aGUgaGVhZGVycyBvZiB0aGUgZXhpc3RpbmcgY2FjaGUgaXRlbSwKKwkJICAgcGx1cyBpdHMg
YWdlICovCisJCXNvdXBfbWVzc2FnZV9oZWFkZXJzX2ZvcmVhY2ggKG1zZy0+cmVzcG9uc2VfaGVh
ZGVycywKKwkJCQkJICAgICAgKFNvdXBNZXNzYWdlSGVhZGVyc0ZvcmVhY2hGdW5jKXVwZGF0ZV9o
ZWFkZXJzLAorCQkJCQkgICAgICBlbnRyeS0+aGVhZGVycyk7CisJCXdlYmtpdF9zb3VwX2NhY2hl
X2VudHJ5X3NldF9mcmVzaG5lc3MgKGVudHJ5LCBtc2csIGNhY2hlKTsKKwl9Cit9CisKK0dJbnB1
dFN0cmVhbSAqCit3ZWJraXRfc291cF9jYWNoZV9zZW5kX3Jlc3BvbnNlIChXZWJLaXRTb3VwQ2Fj
aGUgKmNhY2hlLCBTb3VwTWVzc2FnZSAqbXNnKQoreworCWNoYXIgKmtleTsKKwlXZWJLaXRTb3Vw
Q2FjaGVFbnRyeSAqZW50cnk7CisJY2hhciAqY3VycmVudF9hZ2U7CisJR0lucHV0U3RyZWFtICpz
dHJlYW0gPSBOVUxMOworCUdGaWxlICpmaWxlOworCisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFdF
QktJVF9JU19TT1VQX0NBQ0hFIChjYWNoZSksIE5VTEwpOworCWdfcmV0dXJuX3ZhbF9pZl9mYWls
IChTT1VQX0lTX01FU1NBR0UgKG1zZyksIE5VTEwpOworCisJa2V5ID0gc291cF9tZXNzYWdlX2dl
dF9jYWNoZV9rZXkgKG1zZyk7CisJZW50cnkgPSBnX2hhc2hfdGFibGVfbG9va3VwIChjYWNoZS0+
cHJpdi0+Y2FjaGUsIGtleSk7CisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGVudHJ5LCBOVUxMKTsK
KworCS8qIElmIHdlIGFyZSB0b2xkIHRvIHNlbmQgYSByZXNwb25zZSBmcm9tIGNhY2hlIGFueSB2
YWxpZGF0aW9uCisJICAgaW4gY291cnNlIGlzIG92ZXIgYnkgbm93ICovCisJZW50cnktPmJlaW5n
X3ZhbGlkYXRlZCA9IEZBTFNFOworCisJLyogSGVhZGVycyAqLworCXNvdXBfbWVzc2FnZV9oZWFk
ZXJzX2ZvcmVhY2ggKGVudHJ5LT5oZWFkZXJzLAorCQkJCSAgICAgIChTb3VwTWVzc2FnZUhlYWRl
cnNGb3JlYWNoRnVuYyl1cGRhdGVfaGVhZGVycywKKwkJCQkgICAgICBtc2ctPnJlc3BvbnNlX2hl
YWRlcnMpOworCisJLyogQWRkICdBZ2UnIGhlYWRlciB3aXRoIHRoZSBjdXJyZW50IGFnZSAqLwor
CWN1cnJlbnRfYWdlID0gZ19zdHJkdXBfcHJpbnRmICgiJWQiLCB3ZWJraXRfc291cF9jYWNoZV9l
bnRyeV9nZXRfY3VycmVudF9hZ2UgKGVudHJ5KSk7CisJc291cF9tZXNzYWdlX2hlYWRlcnNfcmVw
bGFjZSAobXNnLT5yZXNwb25zZV9oZWFkZXJzLAorCQkJCSAgICAgICJBZ2UiLAorCQkJCSAgICAg
IGN1cnJlbnRfYWdlKTsKKwlnX2ZyZWUgKGN1cnJlbnRfYWdlKTsKKworCS8qIFRPRE86IHRoZSBv
cmlnaW5hbCBpZGVhIHdhcyB0byBzYXZlIHJlYWRzLCBidXQgY3VycmVudCBjb2RlCisJICAgYXNz
dW1lcyB0aGF0IGEgc3RyZWFtIGlzIGFsd2F5cyByZXR1cm5lZC4gTmVlZCB0byByZWFjaAorCSAg
IHNvbWUgYWdyZWVtZW50IGhlcmUuIEFsc28gd2UgaGF2ZSB0byBoYW5kbGUgdGhlIHNpdHVhdGlv
bgorCSAgIHdlcmUgdGhlIGZpbGUgd2FzIG5vIGxvbmdlciB0aGVyZSAoZm9yIGV4YW1wbGUgZmls
ZXMKKwkgICByZW1vdmVkIHdpdGhvdXQgbm90aWZ5aW5nIHRoZSBjYWNoZSAqLworCWZpbGUgPSBn
X2ZpbGVfbmV3X2Zvcl9wYXRoIChlbnRyeS0+ZmlsZW5hbWUpOworCXN0cmVhbSA9IChHSW5wdXRT
dHJlYW0gKilnX2ZpbGVfcmVhZCAoZmlsZSwgTlVMTCwgTlVMTCk7CisKKwlyZXR1cm4gc3RyZWFt
OworfQorCitzdGF0aWMgdm9pZAorcmVxdWVzdF9zdGFydGVkIChTb3VwU2Vzc2lvbkZlYXR1cmUg
KmZlYXR1cmUsIFNvdXBTZXNzaW9uICpzZXNzaW9uLAorCQkgU291cE1lc3NhZ2UgKm1zZywgU291
cFNvY2tldCAqc29ja2V0KQoreworCVJlcXVlc3RIZWxwZXIgKmhlbHBlciA9IGdfc2xpY2VfbmV3
MCAoUmVxdWVzdEhlbHBlcik7CisJaGVscGVyLT5yZXF1ZXN0X3RpbWUgPSB0aW1lIChOVUxMKTsK
KwloZWxwZXItPmZlYXR1cmUgPSBmZWF0dXJlOworCWhlbHBlci0+Z290X2hlYWRlcnNfaGFuZGxl
ciA9IGdfc2lnbmFsX2Nvbm5lY3QgKG1zZywgImdvdC1oZWFkZXJzIiwKKwkJCQkJCQlHX0NBTExC
QUNLIChtc2dfZ290X2hlYWRlcnNfY2IpLAorCQkJCQkJCWhlbHBlcik7Cit9CisKK3N0YXRpYyB2
b2lkCithdHRhY2ggKFNvdXBTZXNzaW9uRmVhdHVyZSAqZmVhdHVyZSwgU291cFNlc3Npb24gKnNl
c3Npb24pCit7CisJV2ViS2l0U291cENhY2hlICpjYWNoZSA9IFdFQktJVF9TT1VQX0NBQ0hFIChm
ZWF0dXJlKTsKKwljYWNoZS0+cHJpdi0+c2Vzc2lvbiA9IHNlc3Npb247CisKKwl3ZWJraXRfc291
cF9jYWNoZV9kZWZhdWx0X2ZlYXR1cmVfaW50ZXJmYWNlLT5hdHRhY2ggKGZlYXR1cmUsIHNlc3Np
b24pOworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfY2FjaGVfc2Vzc2lvbl9mZWF0dXJl
X2luaXQgKFNvdXBTZXNzaW9uRmVhdHVyZUludGVyZmFjZSAqZmVhdHVyZV9pbnRlcmZhY2UsCisJ
CQkJCWdwb2ludGVyIGludGVyZmFjZV9kYXRhKQoreworCXdlYmtpdF9zb3VwX2NhY2hlX2RlZmF1
bHRfZmVhdHVyZV9pbnRlcmZhY2UgPQorCQlnX3R5cGVfZGVmYXVsdF9pbnRlcmZhY2VfcGVlayAo
U09VUF9UWVBFX1NFU1NJT05fRkVBVFVSRSk7CisKKwlmZWF0dXJlX2ludGVyZmFjZS0+YXR0YWNo
ID0gYXR0YWNoOworCWZlYXR1cmVfaW50ZXJmYWNlLT5yZXF1ZXN0X3N0YXJ0ZWQgPSByZXF1ZXN0
X3N0YXJ0ZWQ7Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfc291cF9jYWNoZV9pbml0IChXZWJL
aXRTb3VwQ2FjaGUgKmNhY2hlKQoreworCVdlYktpdFNvdXBDYWNoZVByaXZhdGUgKnByaXY7CisK
Kwlwcml2ID0gY2FjaGUtPnByaXYgPSBXRUJLSVRfU09VUF9DQUNIRV9HRVRfUFJJVkFURSAoY2Fj
aGUpOworCisJcHJpdi0+Y2FjaGUgPSBnX2hhc2hfdGFibGVfbmV3X2Z1bGwgKGdfc3RyX2hhc2gs
CisJCQkJCSAgICAgZ19zdHJfZXF1YWwsCisJCQkJCSAgICAgKEdEZXN0cm95Tm90aWZ5KWdfZnJl
ZSwKKwkJCQkJICAgICAoR0Rlc3Ryb3lOb3RpZnkpd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfZnJl
ZSk7CisKKwkvKiBMUlUgKi8KKwlwcml2LT5scnVfc3RhcnQgPSBOVUxMOworCXByaXYtPmxydV9l
bmQgPSBOVUxMOworCisJLyogKi8KKwlwcml2LT5uX3BlbmRpbmcgPSAwOworCisJLyogQ2FjaGUg
c2l6ZSAqLworCXByaXYtPm1heF9zaXplID0gREVGQVVMVF9NQVhfU0laRTsKKwlwcml2LT5tYXhf
ZW50cnlfZGF0YV9zaXplID0gcHJpdi0+bWF4X3NpemUgLyBNQVhfRU5UUllfREFUQV9QRVJDRU5U
QUdFOworCXByaXYtPnNpemUgPSAwOworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfY2Fj
aGVfZmluYWxpemUgKEdPYmplY3QgKm9iamVjdCkKK3sKKwlXZWJLaXRTb3VwQ2FjaGVQcml2YXRl
ICpwcml2OworCisJcHJpdiA9IFdFQktJVF9TT1VQX0NBQ0hFIChvYmplY3QpLT5wcml2OworCisJ
Z19oYXNoX3RhYmxlX2Rlc3Ryb3kgKHByaXYtPmNhY2hlKTsKKwlnX2ZyZWUgKHByaXYtPmNhY2hl
X2Rpcik7CisKKwlnX2xpc3RfZnJlZSAocHJpdi0+bHJ1X3N0YXJ0KTsKKwlwcml2LT5scnVfc3Rh
cnQgPSBOVUxMOworCXByaXYtPmxydV9lbmQgPSBOVUxMOworCisJR19PQkpFQ1RfQ0xBU1MgKHdl
YmtpdF9zb3VwX2NhY2hlX3BhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOworfQorCitz
dGF0aWMgdm9pZAord2Via2l0X3NvdXBfY2FjaGVfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICpvYmpl
Y3QsIGd1aW50IHByb3BfaWQsCisJCQkJY29uc3QgR1ZhbHVlICp2YWx1ZSwgR1BhcmFtU3BlYyAq
cHNwZWMpCit7CisJV2ViS2l0U291cENhY2hlUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0NB
Q0hFIChvYmplY3QpLT5wcml2OworCisJc3dpdGNoIChwcm9wX2lkKSB7CisJCWNhc2UgUFJPUF9D
QUNIRV9ESVI6CisJCQlwcml2LT5jYWNoZV9kaXIgPSBnX3ZhbHVlX2R1cF9zdHJpbmcgKHZhbHVl
KTsKKwkJCS8qIENyZWF0ZSBkaXJlY3RvcnkgaWYgaXQgZG9lcyBub3QgZXhpc3QgKEZJWE1FOiBz
aG91bGQgd2U/KSAqLworCQkJaWYgKCFnX2ZpbGVfdGVzdCAocHJpdi0+Y2FjaGVfZGlyLCBHX0ZJ
TEVfVEVTVF9FWElTVFMgfCBHX0ZJTEVfVEVTVF9JU19ESVIpKQorCQkJCWdfbWtkaXJfd2l0aF9w
YXJlbnRzIChwcml2LT5jYWNoZV9kaXIsIDA3MDApOworCQkJYnJlYWs7CisJCWNhc2UgUFJPUF9D
QUNIRV9UWVBFOgorCQkJcHJpdi0+Y2FjaGVfdHlwZSA9IGdfdmFsdWVfZ2V0X2VudW0gKHZhbHVl
KTsKKwkJCS8qIFRPRE86IGNsZWFyIHByaXZhdGUgZW50cmllcyBhbmQgaXNzdWUgYSB3YXJuaW5n
IGlmIG1vdmluZyB0byBzaGFyZWQ/ICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUdfT0JK
RUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisJ
CQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfc291cF9jYWNoZV9nZXRfcHJv
cGVydHkgKEdPYmplY3QgKm9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKwkJCQlHVmFsdWUgKnZhbHVl
LCBHUGFyYW1TcGVjICpwc3BlYykKK3sKKwlXZWJLaXRTb3VwQ2FjaGVQcml2YXRlICpwcml2ID0g
V0VCS0lUX1NPVVBfQ0FDSEUgKG9iamVjdCktPnByaXY7CisKKwlzd2l0Y2ggKHByb3BfaWQpIHsK
KwkJY2FzZSBQUk9QX0NBQ0hFX0RJUjoKKwkJCWdfdmFsdWVfc2V0X3N0cmluZyAodmFsdWUsIHBy
aXYtPmNhY2hlX2Rpcik7CisJCQlicmVhazsKKwkJY2FzZSBQUk9QX0NBQ0hFX1RZUEU6CisJCQln
X3ZhbHVlX3NldF9lbnVtICh2YWx1ZSwgcHJpdi0+Y2FjaGVfdHlwZSk7CisJCQlicmVhazsKKwkJ
ZGVmYXVsdDoKKwkJCUdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBw
cm9wX2lkLCBwc3BlYyk7CisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRf
c291cF9jYWNoZV9jb25zdHJ1Y3RlZCAoR09iamVjdCAqb2JqZWN0KQoreworCVdlYktpdFNvdXBD
YWNoZVByaXZhdGUgKnByaXY7CisKKwlwcml2ID0gV0VCS0lUX1NPVVBfQ0FDSEUgKG9iamVjdCkt
PnByaXY7CisKKwlpZiAoIXByaXYtPmNhY2hlX2RpcikgeworCQkvKiBTZXQgYSBkZWZhdWx0IGNh
Y2hlIGRpciwgZGlmZmVyZW50IGZvciBlYWNoIHVzZXIgKi8KKwkJcHJpdi0+Y2FjaGVfZGlyID0g
Z19idWlsZF9maWxlbmFtZSAoZ19nZXRfdXNlcl9jYWNoZV9kaXIgKCksCisJCQkJCQkgICAgImh0
dHBjYWNoZSIsCisJCQkJCQkgICAgTlVMTCk7CisJCWlmICghZ19maWxlX3Rlc3QgKHByaXYtPmNh
Y2hlX2RpciwgR19GSUxFX1RFU1RfRVhJU1RTIHwgR19GSUxFX1RFU1RfSVNfRElSKSkKKwkJCWdf
bWtkaXJfd2l0aF9wYXJlbnRzIChwcml2LT5jYWNoZV9kaXIsIDA3MDApOworCX0KKworCWlmIChH
X09CSkVDVF9DTEFTUyAod2Via2l0X3NvdXBfY2FjaGVfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0
ZWQpCisJCUdfT0JKRUNUX0NMQVNTICh3ZWJraXRfc291cF9jYWNoZV9wYXJlbnRfY2xhc3MpLT5j
b25zdHJ1Y3RlZCAob2JqZWN0KTsKK30KKworI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9UWVBF
X1RZUEUgKHdlYmtpdF9zb3VwX2NhY2hlX3R5cGVfZ2V0X3R5cGUgKCkpCitzdGF0aWMgR1R5cGUK
K3dlYmtpdF9zb3VwX2NhY2hlX3R5cGVfZ2V0X3R5cGUgKHZvaWQpCit7CisJc3RhdGljIEdUeXBl
IGNhY2hlX3R5cGUgPSAwOworCisJc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgY2FjaGVfdHlwZXNb
XSA9IHsKKwkJeyBXRUJLSVRfU09VUF9DQUNIRV9TSU5HTEVfVVNFUiwgIlNpbmdsZSB1c2VyIGNh
Y2hlIiwgInVzZXIiIH0sCisJCXsgV0VCS0lUX1NPVVBfQ0FDSEVfU0hBUkVELCAiU2hhcmVkIGNh
Y2hlIiwgInNoYXJlZCIgfSwKKwkJeyAwLCBOVUxMLCBOVUxMIH0KKwl9OworCisJaWYgKCFjYWNo
ZV90eXBlKSB7CisJCWNhY2hlX3R5cGUgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiV2ViS2l0
U291cENhY2hlVHlwZSIsIGNhY2hlX3R5cGVzKTsKKwl9CisJcmV0dXJuIGNhY2hlX3R5cGU7Cit9
CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfc291cF9jYWNoZV9jbGFzc19pbml0IChXZWJLaXRTb3Vw
Q2FjaGVDbGFzcyAqY2FjaGVfY2xhc3MpCit7CisJR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNz
ID0gKEdPYmplY3RDbGFzcyAqKWNhY2hlX2NsYXNzOworCisJZ29iamVjdF9jbGFzcy0+ZmluYWxp
emUgPSB3ZWJraXRfc291cF9jYWNoZV9maW5hbGl6ZTsKKwlnb2JqZWN0X2NsYXNzLT5jb25zdHJ1
Y3RlZCA9IHdlYmtpdF9zb3VwX2NhY2hlX2NvbnN0cnVjdGVkOworCWdvYmplY3RfY2xhc3MtPnNl
dF9wcm9wZXJ0eSA9IHdlYmtpdF9zb3VwX2NhY2hlX3NldF9wcm9wZXJ0eTsKKwlnb2JqZWN0X2Ns
YXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfc291cF9jYWNoZV9nZXRfcHJvcGVydHk7CisKKwlj
YWNoZV9jbGFzcy0+Z2V0X2NhY2hlYWJpbGl0eSA9IGdldF9jYWNoZWFiaWxpdHk7CisKKwlnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0NBQ0hFX0RJ
UiwKKwkJCQkJIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJjYWNoZS1kaXIiLAorCQkJCQkJCSAgICAg
ICJDYWNoZSBkaXJlY3RvcnkiLAorCQkJCQkJCSAgICAgICJUaGUgZGlyZWN0b3J5IHRvIHN0b3Jl
IHRoZSBjYWNoZSBmaWxlcyIsCisJCQkJCQkJICAgICAgTlVMTCwKKwkJCQkJCQkgICAgICBHX1BB
UkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKTsKKworCWdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQ0FDSEVfVFlQRSwKKwkJ
CQkJIGdfcGFyYW1fc3BlY19lbnVtICgiY2FjaGUtdHlwZSIsCisJCQkJCQkJICAgICJDYWNoZSB0
eXBlIiwKKwkJCQkJCQkgICAgIldoZXRoZXIgdGhlIGNhY2hlIGlzIHByaXZhdGUgb3Igc2hhcmVk
IiwKKwkJCQkJCQkgICAgV0VCS0lUX1NPVVBfQ0FDSEVfVFlQRV9UWVBFLAorCQkJCQkJCSAgICBX
RUJLSVRfU09VUF9DQUNIRV9TSU5HTEVfVVNFUiwKKwkJCQkJCQkgICAgR19QQVJBTV9SRUFEV1JJ
VEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSk7CisKKwlnX3R5cGVfY2xhc3NfYWRkX3ByaXZh
dGUgKGNhY2hlX2NsYXNzLCBzaXplb2YgKFdlYktpdFNvdXBDYWNoZVByaXZhdGUpKTsKK30KKwor
LyoqCisgKiB3ZWJraXRfc291cF9jYWNoZV9uZXc6CisgKiBAY2FjaGVfZGlyOiB0aGUgZGlyZWN0
b3J5IHRvIHN0b3JlIHRoZSBjYWNoZWQgZGF0YSwgb3IgJU5VTEwgdG8gdXNlIHRoZSBkZWZhdWx0
IG9uZQorICogQGNhY2hlX3R5cGU6IHRoZSAjV2ViS2l0U291cENhY2hlVHlwZSBvZiB0aGUgY2Fj
aGUKKyAqCisgKiBDcmVhdGVzIGEgbmV3ICNXZWJLaXRTb3VwQ2FjaGUuCisgKgorICogUmV0dXJu
czogYSBuZXcgI1dlYktpdFNvdXBDYWNoZQorICoKKyAqIFNpbmNlOiAyLjI4CisgKiovCitXZWJL
aXRTb3VwQ2FjaGUgKgord2Via2l0X3NvdXBfY2FjaGVfbmV3IChjb25zdCBjaGFyICpjYWNoZV9k
aXIsIFdlYktpdFNvdXBDYWNoZVR5cGUgY2FjaGVfdHlwZSkKK3sKKwlyZXR1cm4gZ19vYmplY3Rf
bmV3IChXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFLAorCQkJICAgICAiY2FjaGUtZGlyIiwgY2FjaGVf
ZGlyLAorCQkJICAgICAiY2FjaGUtdHlwZSIsIGNhY2hlX3R5cGUsCisJCQkgICAgIE5VTEwpOwor
fQorCisvKioKKyAqIHdlYmtpdF9zb3VwX2NhY2hlX2hhc19yZXNwb25zZToKKyAqIEBjYWNoZTog
YSAjV2ViS2l0U291cENhY2hlCisgKiBAbXNnOiBhICNTb3VwTWVzc2FnZQorICoKKyAqIFRoaXMg
ZnVuY3Rpb24gY2FsY3VsYXRlcyB3aGV0aGVyIHRoZSBAY2FjaGUgb2JqZWN0IGhhcyBhIHByb3Bl
cgorICogcmVzcG9uc2UgZm9yIHRoZSByZXF1ZXN0IEBtc2cgZ2l2ZW4gdGhlIGZsYWdzIGJvdGgg
aW4gdGhlIHJlcXVlc3QKKyAqIGFuZCB0aGUgY2FjaGVkIHJlcGx5IGFuZCB0aGUgdGltZSBlbGxh
cHNlZCBzaW5jZSBpdCB3YXMgY2FjaGVkLgorICoKKyAqIFJldHVybnM6IHdoZXRoZXIgb3Igbm90
IHRoZSBAY2FjaGUgaGFzIGEgdmFsaWQgcmVzcG9uc2UgZm9yIEBtc2cKKyAqKi8KK1dlYktpdFNv
dXBDYWNoZVJlc3BvbnNlCit3ZWJraXRfc291cF9jYWNoZV9oYXNfcmVzcG9uc2UgKFdlYktpdFNv
dXBDYWNoZSAqY2FjaGUsIFNvdXBNZXNzYWdlICptc2cpCit7CisJY2hhciAqa2V5OworCVdlYktp
dFNvdXBDYWNoZUVudHJ5ICplbnRyeTsKKwljb25zdCBjaGFyICpjYWNoZV9jb250cm9sOworCUdI
YXNoVGFibGUgKmhhc2g7CisJZ3BvaW50ZXIgdmFsdWU7CisJZ2Jvb2xlYW4gbXVzdF9yZXZhbGlk
YXRlOworCWludCBtYXhfYWdlLCBtYXhfc3RhbGUsIG1pbl9mcmVzaDsKKworCWtleSA9IHNvdXBf
bWVzc2FnZV9nZXRfY2FjaGVfa2V5IChtc2cpOworCWVudHJ5ID0gZ19oYXNoX3RhYmxlX2xvb2t1
cCAoY2FjaGUtPnByaXYtPmNhY2hlLCBrZXkpOworCisJLyogMS4gVGhlIHByZXNlbnRlZCBSZXF1
ZXN0LVVSSSBhbmQgdGhhdCBvZiBzdG9yZWQgcmVzcG9uc2UKKwkgKiBtYXRjaAorCSAqLworCWlm
ICghZW50cnkpCisJCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9TVEFMRTsKKwor
CS8qIEluY3JlYXNlIGhpdCBjb3VudCAqLworCWVudHJ5LT5oaXRzKys7CisKKwlpZiAoZW50cnkt
PmRpcnR5IHx8IGVudHJ5LT5iZWluZ192YWxpZGF0ZWQpCisJCXJldHVybiBXRUJLSVRfU09VUF9D
QUNIRV9SRVNQT05TRV9TVEFMRTsKKworCS8qIDIuIFRoZSByZXF1ZXN0IG1ldGhvZCBhc3NvY2lh
dGVkIHdpdGggdGhlIHN0b3JlZCByZXNwb25zZQorCSAqICBhbGxvd3MgaXQgdG8gYmUgdXNlZCBm
b3IgdGhlIHByZXNlbnRlZCByZXF1ZXN0CisJICovCisKKwkvKiBJbiBwcmFjdGljZSB0aGlzIG1l
YW5zIHdlIG9ubHkgcmV0dXJuIG91ciByZXNvdXJjZSBmb3IgR0VULAorCSAqIGNhY2hlYWJpbGl0
eSBmb3Igb3RoZXIgbWV0aG9kcyBpcyBhIFRPRE8gaW4gdGhlIFJGQworCSAqIChUT0RPOiBhbHRo
b3VnaCB3ZSBjb3VsZCByZXR1cm4gdGhlIGhlYWRlcnMgZm9yIEhFQUQKKwkgKiBwcm9iYWJseSku
CisJICovCisJaWYgKG1zZy0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkKKwkJcmV0dXJuIFdF
QktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX1NUQUxFOworCisJLyogMy4gU2VsZWN0aW5nIHJlcXVl
c3QtaGVhZGVycyBub21pbmF0ZWQgYnkgdGhlIHN0b3JlZAorCSAqIHJlc3BvbnNlIChpZiBhbnkp
IG1hdGNoIHRob3NlIHByZXNlbnRlZC4KKwkgKi8KKworCS8qIFRPRE8gKi8KKworCS8qIDQuIFRo
ZSBwcmVzZW50ZWQgcmVxdWVzdCBhbmQgc3RvcmVkIHJlc3BvbnNlIGFyZSBmcmVlIGZyb20KKwkg
KiBkaXJlY3RpdmVzIHRoYXQgd291bGQgcHJldmVudCBpdHMgdXNlLgorCSAqLworCisJbXVzdF9y
ZXZhbGlkYXRlID0gRkFMU0U7CisJbWF4X2FnZSA9IG1heF9zdGFsZSA9IG1pbl9mcmVzaCA9IC0x
OworCisJY2FjaGVfY29udHJvbCA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldCAobXNnLT5yZXF1
ZXN0X2hlYWRlcnMsICJDYWNoZS1Db250cm9sIik7CisJaWYgKGNhY2hlX2NvbnRyb2wpIHsKKwkJ
aGFzaCA9IHNvdXBfaGVhZGVyX3BhcnNlX3BhcmFtX2xpc3QgKGNhY2hlX2NvbnRyb2wpOworCisJ
CWlmIChnX2hhc2hfdGFibGVfbG9va3VwX2V4dGVuZGVkIChoYXNoLCAibm8tc3RvcmUiLCBOVUxM
LCBOVUxMKSkgeworCQkJZ19oYXNoX3RhYmxlX2Rlc3Ryb3kgKGhhc2gpOworCQkJcmV0dXJuIFdF
QktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX1NUQUxFOworCQl9CisKKwkJaWYgKGdfaGFzaF90YWJs
ZV9sb29rdXBfZXh0ZW5kZWQgKGhhc2gsICJuby1jYWNoZSIsIE5VTEwsIE5VTEwpKSB7CisJCQll
bnRyeS0+bXVzdF9yZXZhbGlkYXRlID0gVFJVRTsKKwkJfQorCisJCWlmIChnX2hhc2hfdGFibGVf
bG9va3VwX2V4dGVuZGVkIChoYXNoLCAibWF4LWFnZSIsIE5VTEwsICZ2YWx1ZSkpIHsKKwkJCW1h
eF9hZ2UgPSAoaW50KU1JTiAoZ19hc2NpaV9zdHJ0b2xsICh2YWx1ZSwgTlVMTCwgMTApLCBHX01B
WElOVDMyKTsKKwkJfQorCisJCS8qIG1heC1zdGFsZSBjYW4gaGF2ZSBubyB2YWx1ZSBzZXQsIHdl
IG5lZWQgdG8gdXNlIF9leHRlbmRlZCAqLworCQlpZiAoZ19oYXNoX3RhYmxlX2xvb2t1cF9leHRl
bmRlZCAoaGFzaCwgIm1heC1zdGFsZSIsIE5VTEwsICZ2YWx1ZSkpIHsKKwkJCWlmICh2YWx1ZSkK
KwkJCQltYXhfc3RhbGUgPSAoaW50KU1JTiAoZ19hc2NpaV9zdHJ0b2xsICh2YWx1ZSwgTlVMTCwg
MTApLCBHX01BWElOVDMyKTsKKwkJCWVsc2UKKwkJCQltYXhfc3RhbGUgPSBHX01BWElOVDMyOwor
CQl9CisKKwkJdmFsdWUgPSBnX2hhc2hfdGFibGVfbG9va3VwIChoYXNoLCAibWluLWZyZXNoIik7
CisJCWlmICh2YWx1ZSkKKwkJCW1pbl9mcmVzaCA9IChpbnQpTUlOIChnX2FzY2lpX3N0cnRvbGwg
KHZhbHVlLCBOVUxMLCAxMCksIEdfTUFYSU5UMzIpOworCisJCWdfaGFzaF90YWJsZV9kZXN0cm95
IChoYXNoKTsKKworCQlpZiAobWF4X2FnZSAhPSAtMSkgeworCQkJZ3VpbnQgY3VycmVudF9hZ2Ug
PSB3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9nZXRfY3VycmVudF9hZ2UgKGVudHJ5KTsKKworCQkJ
LyogSWYgd2UgYXJlIG92ZXIgbWF4LWFnZSBhbmQgbWF4LXN0YWxlIGlzIG5vdAorCQkJICAgc2V0
LCBkbyBub3QgdXNlIHRoZSB2YWx1ZSBmcm9tIHRoZSBjYWNoZQorCQkJICAgd2l0aG91dCB2YWxp
ZGF0aW9uICovCisJCQlpZiAobWF4X2FnZSA8PSBjdXJyZW50X2FnZSAmJiBtYXhfc3RhbGUgPT0g
LTEpCisJCQkJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX05FRURTX1ZBTElEQVRJ
T047CisJCX0KKwl9CisKKwkvKiA1LiBUaGUgc3RvcmVkIHJlc3BvbnNlIGlzIGVpdGhlcjogZnJl
c2gsIGFsbG93ZWQgdG8gYmUKKwkgKiBzZXJ2ZWQgc3RhbGUgb3Igc3VjY2VzZnVsbHkgdmFsaWRh
dGVkCisJICovCisJLyogVE9ETyBjb25zaWRlciBhbHNvIHByb3h5LXJldmFsaWRhdGUgJiBzLW1h
eGFnZSAqLworCWlmIChlbnRyeS0+bXVzdF9yZXZhbGlkYXRlKQorCQlyZXR1cm4gV0VCS0lUX1NP
VVBfQ0FDSEVfUkVTUE9OU0VfTkVFRFNfVkFMSURBVElPTjsKKworCWlmICghd2Via2l0X3NvdXBf
Y2FjaGVfZW50cnlfaXNfZnJlc2hfZW5vdWdoIChlbnRyeSwgbWluX2ZyZXNoKSkgeworCQkvKiBO
b3QgZnJlc2gsIGNhbiBpdCBiZSBzZXJ2ZWQgc3RhbGU/ICovCisJCWlmIChtYXhfc3RhbGUgIT0g
LTEpIHsKKwkJCS8qIEdfTUFYSU5UMzIgbWVhbnMgd2UgYWNjZXB0IGFueSBzdGFsZW5lc3MgKi8K
KwkJCWlmIChtYXhfc3RhbGUgPT0gR19NQVhJTlQzMikKKwkJCQlyZXR1cm4gV0VCS0lUX1NPVVBf
Q0FDSEVfUkVTUE9OU0VfRlJFU0g7CisKKwkJCWlmICgod2Via2l0X3NvdXBfY2FjaGVfZW50cnlf
Z2V0X2N1cnJlbnRfYWdlIChlbnRyeSkgLSBlbnRyeS0+ZnJlc2huZXNzX2xpZmV0aW1lKSA8PSBt
YXhfc3RhbGUpCisJCQkJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX0ZSRVNIOwor
CQl9CisKKwkJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX05FRURTX1ZBTElEQVRJ
T047CisJfQorCisJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX0ZSRVNIOworfQor
CisvKioKKyAqIHdlYmtpdF9zb3VwX2NhY2hlX2dldF9jYWNoZWFiaWxpdHk6CisgKiBAY2FjaGU6
IGEgI1dlYktpdFNvdXBDYWNoZQorICogQG1zZzogYSAjU291cE1lc3NhZ2UKKyAqCisgKiBDYWxj
dWxhdGVzIHdoZXRoZXIgdGhlIEBtc2cgY2FuIGJlIGNhY2hlZCBvciBub3QuCisgKgorICogUmV0
dXJuczogYSAjV2ViS2l0U291cENhY2hlYWJpbGl0eSB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIg
dGhlIEBtc2cgY2FuIGJlIGNhY2hlZCBvciBub3QuCisgKiovCitXZWJLaXRTb3VwQ2FjaGVhYmls
aXR5Cit3ZWJraXRfc291cF9jYWNoZV9nZXRfY2FjaGVhYmlsaXR5IChXZWJLaXRTb3VwQ2FjaGUg
KmNhY2hlLCBTb3VwTWVzc2FnZSAqbXNnKQoreworCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChXRUJL
SVRfSVNfU09VUF9DQUNIRSAoY2FjaGUpLCBXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRSk7
CisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFNPVVBfSVNfTUVTU0FHRSAobXNnKSwgV0VCS0lUX1NP
VVBfQ0FDSEVfVU5DQUNIRUFCTEUpOworCisJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX0dFVF9D
TEFTUyAoY2FjaGUpLT5nZXRfY2FjaGVhYmlsaXR5IChjYWNoZSwgbXNnKTsKK30KKworc3RhdGlj
IGdib29sZWFuCitmb3JjZV9mbHVzaF90aW1lb3V0IChncG9pbnRlciBkYXRhKQoreworCWdib29s
ZWFuICpmb3JjZWQgPSAoZ2Jvb2xlYW4gKilkYXRhOworCSpmb3JjZWQgPSBUUlVFOworCisJcmV0
dXJuIEZBTFNFOworfQorCisvKioKKyAqIHdlYmtpdF9zb3VwX2NhY2hlX2ZsdXNoOgorICogQGNh
Y2hlOiBhICNXZWJLaXRTb3VwQ2FjaGUKKyAqIEBzZXNzaW9uOiB0aGUgI1NvdXBTZXNzaW9uIGFz
c29jaWF0ZWQgd2l0aCB0aGUgQGNhY2hlCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGZvcmNl
IGFsbCBwZW5kaW5nIHdyaXRlcyBpbiB0aGUgQGNhY2hlIHRvIGJlCisgKiBjb21taXR0ZWQgdG8g
ZGlzay4gRm9yIGRvaW5nIHNvIGl0IHdpbGwgaXRlcmF0ZSB0aGUgI0dNYWluQ29udGV4dAorICog
YXNzb2NpYXRlZCB3aXRoIHRoZSBAc2Vzc2lvbiAod2hpY2ggY2FuIGJlIHRoZSBkZWZhdWx0IG9u
ZSkgYXMgbG9uZworICogYXMgbmVlZGVkLgorICoqLwordm9pZAord2Via2l0X3NvdXBfY2FjaGVf
Zmx1c2ggKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUpCit7CisJR01haW5Db250ZXh0ICphc3luY19j
b250ZXh0OworCVNvdXBTZXNzaW9uICpzZXNzaW9uOworCWd1aW50IHRpbWVvdXRfaWQ7CisJZ2Jv
b2xlYW4gZm9yY2VkID0gRkFMU0U7CisKKwlnX3JldHVybl9pZl9mYWlsIChXRUJLSVRfSVNfU09V
UF9DQUNIRSAoY2FjaGUpKTsKKworCXNlc3Npb24gPSBjYWNoZS0+cHJpdi0+c2Vzc2lvbjsKKwln
X3JldHVybl9pZl9mYWlsIChTT1VQX0lTX1NFU1NJT04gKHNlc3Npb24pKTsKKwlhc3luY19jb250
ZXh0ID0gc291cF9zZXNzaW9uX2dldF9hc3luY19jb250ZXh0IChzZXNzaW9uKTsKKworCS8qIFdl
IGdpdmUgY2FjaGUgMTAgc2VjcyB0byBmaW5pc2ggKi8KKwl0aW1lb3V0X2lkID0gZ190aW1lb3V0
X2FkZCAoMTAwMDAsIGZvcmNlX2ZsdXNoX3RpbWVvdXQsICZmb3JjZWQpOworCisJd2hpbGUgKCFm
b3JjZWQgJiYgY2FjaGUtPnByaXYtPm5fcGVuZGluZyA+IDApCisJCWdfbWFpbl9jb250ZXh0X2l0
ZXJhdGlvbiAoYXN5bmNfY29udGV4dCwgRkFMU0UpOworCisJaWYgKCFmb3JjZWQpCisJCWdfc291
cmNlX3JlbW92ZSAodGltZW91dF9pZCk7CisJZWxzZQorCQlnX3dhcm5pbmcgKCJDYWNoZSBmbHVz
aCBmaW5pc2hlZCBkZXNwaXRlICVkIHBlbmRpbmcgcmVxdWVzdHMiLCBjYWNoZS0+cHJpdi0+bl9w
ZW5kaW5nKTsKK30KKworc3RhdGljIHZvaWQKK3JlbW92ZV9jYWNoZV9pdGVtIChncG9pbnRlciBr
ZXksCisJCSAgIGdwb2ludGVyIHZhbHVlLAorCQkgICBXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKQor
eworCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSA9IGdfaGFzaF90YWJsZV9sb29rdXAgKGNh
Y2hlLT5wcml2LT5jYWNoZSwgKGNvbnN0IGdjaGFyICopa2V5KTsKKwl3ZWJraXRfc291cF9jYWNo
ZV9lbnRyeV9kZWxldGUgKGNhY2hlLCBlbnRyeSk7Cit9CisKKy8qKgorICogd2Via2l0X3NvdXBf
Y2FjaGVfY2xlYXI6CisgKiBAY2FjaGU6IGEgI1dlYktpdFNvdXBDYWNoZQorICoKKyAqIFdpbGwg
cmVtb3ZlIGFsbCBlbnRyaWVzIGluIHRoZSBAY2FjaGUgcGx1cyBhbGwgdGhlIGNhY2hlIGZpbGVz
CisgKiBhc3NvY2lhdGVkIHdpdGggdGhlbS4KKyAqKi8KK3ZvaWQKK3dlYmtpdF9zb3VwX2NhY2hl
X2NsZWFyIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKQoreworCUdIYXNoVGFibGUgKmhhc2g7CisK
KwlnX3JldHVybl9pZl9mYWlsIChXRUJLSVRfSVNfU09VUF9DQUNIRSAoY2FjaGUpKTsKKworCWhh
c2ggPSBjYWNoZS0+cHJpdi0+Y2FjaGU7CisJZ19yZXR1cm5faWZfZmFpbCAoaGFzaCk7CisKKwln
X2hhc2hfdGFibGVfZm9yZWFjaCAoaGFzaCwgKEdIRnVuYylyZW1vdmVfY2FjaGVfaXRlbSwgY2Fj
aGUpOworfQorCitTb3VwTWVzc2FnZSAqCit3ZWJraXRfc291cF9jYWNoZV9nZW5lcmF0ZV9jb25k
aXRpb25hbF9yZXF1ZXN0IChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLCBTb3VwTWVzc2FnZSAqb3Jp
Z2luYWwpCit7CisJU291cE1lc3NhZ2UgKm1zZzsKKwlTb3VwVVJJICp1cmk7CisJV2ViS2l0U291
cENhY2hlRW50cnkgKmVudHJ5OworCWNoYXIgKmtleTsKKwljb25zdCBjaGFyICp2YWx1ZTsKKwor
CWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChXRUJLSVRfSVNfU09VUF9DQUNIRSAoY2FjaGUpLCBOVUxM
KTsKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoU09VUF9JU19NRVNTQUdFIChvcmlnaW5hbCksIE5V
TEwpOworCisJLyogRmlyc3QgY29weSB0aGUgZGF0YSB3ZSBuZWVkIGZyb20gdGhlIG9yaWdpbmFs
IG1lc3NhZ2UgKi8KKwl1cmkgPSBzb3VwX21lc3NhZ2VfZ2V0X3VyaSAob3JpZ2luYWwpOworCW1z
ZyA9IHNvdXBfbWVzc2FnZV9uZXdfZnJvbV91cmkgKG9yaWdpbmFsLT5tZXRob2QsIHVyaSk7CisK
Kwlzb3VwX21lc3NhZ2VfaGVhZGVyc19mb3JlYWNoIChvcmlnaW5hbC0+cmVxdWVzdF9oZWFkZXJz
LAorCQkJCSAgICAgIChTb3VwTWVzc2FnZUhlYWRlcnNGb3JlYWNoRnVuYyljb3B5X2hlYWRlcnMs
CisJCQkJICAgICAgbXNnLT5yZXF1ZXN0X2hlYWRlcnMpOworCisJLyogTm93IGFkZCB0aGUgdmFs
aWRhdG9yIGVudHJpZXMgaW4gdGhlIGhlYWRlciBmcm9tIHRoZSBjYWNoZWQKKwkgICBkYXRhICov
CisJa2V5ID0gc291cF9tZXNzYWdlX2dldF9jYWNoZV9rZXkgKG9yaWdpbmFsKTsKKwllbnRyeSA9
IGdfaGFzaF90YWJsZV9sb29rdXAgKGNhY2hlLT5wcml2LT5jYWNoZSwga2V5KTsKKwlnX2ZyZWUg
KGtleSk7CisKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoZW50cnksIE5VTEwpOworCisJZW50cnkt
PmJlaW5nX3ZhbGlkYXRlZCA9IFRSVUU7CisKKwl2YWx1ZSA9IHNvdXBfbWVzc2FnZV9oZWFkZXJz
X2dldCAoZW50cnktPmhlYWRlcnMsICJMYXN0LU1vZGlmaWVkIik7CisJaWYgKHZhbHVlKQorCQlz
b3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQgKG1zZy0+cmVxdWVzdF9oZWFkZXJzLAorCQkJCQkg
ICAgICJJZi1Nb2RpZmllZC1TaW5jZSIsCisJCQkJCSAgICAgdmFsdWUpOworCXZhbHVlID0gc291
cF9tZXNzYWdlX2hlYWRlcnNfZ2V0IChlbnRyeS0+aGVhZGVycywgIkVUYWciKTsKKwlpZiAodmFs
dWUpCisJCXNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZCAobXNnLT5yZXF1ZXN0X2hlYWRlcnMs
CisJCQkJCSAgICAgIklmLU5vbmUtTWF0Y2giLAorCQkJCQkgICAgIHZhbHVlKTsKKwlyZXR1cm4g
bXNnOworfQorCisjZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX0ZJTEUgInNvdXAuY2FjaGUiCisK
KyNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FDSEVfSEVBREVSU19GT1JNQVQgIntzc30iCisjZGVmaW5l
IFdFQktJVF9TT1VQX0NBQ0hFX1BIRUFERVJTX0ZPUk1BVCAiKHNzYnV1dXV1KHV5eXltcylhIiBX
RUJLSVRfU09VUF9DQUNIRV9IRUFERVJTX0ZPUk1BVCAiKSIKKyNkZWZpbmUgV0VCS0lUX1NPVVBf
Q0FDSEVfRU5UUklFU19GT1JNQVQgImEiIFdFQktJVF9TT1VQX0NBQ0hFX1BIRUFERVJTX0ZPUk1B
VAorCisvKiBCYXNpY2FsbHkgdGhlIHNhbWUgZm9ybWF0IHRoYW4gYWJvdmUgZXhjZXB0IHRoYXQg
c29tZSBzdHJpbmdzIGFyZQorICAgcHJlcGVuZGVkIHdpdGggJi4gVGhpcyB3YXkgdGhlIEdWYXJp
YW50IHJldHVybnMgYSBwb2ludGVyIHRvIHRoZQorICAgZGF0YSBpbnN0ZWFkIG9mIGR1cGxpY2F0
aW5nIHRoZSBzdHJpbmcgKi8KKyNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FDSEVfREVDT0RFX0hFQURF
UlNfRk9STUFUICJ7JnMmc30iCisjZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX0RFQ09ERV9QSEVB
REVSU19GT1JNQVQgIihzc2J1dXV1dSh1eXl5bSZzKWEiIFdFQktJVF9TT1VQX0NBQ0hFX0hFQURF
UlNfRk9STUFUICIpIgorI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9ERUNPREVfRU5UUklFU19G
T1JNQVQgImEiIFdFQktJVF9TT1VQX0NBQ0hFX1BIRUFERVJTX0ZPUk1BVAorCitzdGF0aWMgdm9p
ZAorcGFja19lbnRyeSAoZ3BvaW50ZXIga2V5LAorCSAgICBncG9pbnRlciB2YWx1ZSwKKwkgICAg
Z3BvaW50ZXIgZGF0YSkKK3sKKwlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkgPSAoV2ViS2l0
U291cENhY2hlRW50cnkgKil2YWx1ZTsKKwlTb3VwTWVzc2FnZUhlYWRlcnNJdGVyIGl0ZXI7CisJ
Y29uc3QgZ2NoYXIgKmhlYWRlcl9rZXksICpoZWFkZXJfdmFsdWU7CisJY29uc3QgZ2NoYXIgKmNv
bnRlbnRfdHlwZTsKKwlHVmFyaWFudEJ1aWxkZXIgKmhlYWRlcnNfYnVpbGRlcjsKKwlHVmFyaWFu
dEJ1aWxkZXIgKmVudHJpZXNfYnVpbGRlciA9IChHVmFyaWFudEJ1aWxkZXIgKilkYXRhOworCWd1
aW50MzIgY29udGVudF9sZW5ndGg7CisJZ2NoYXIgZW5jb2RpbmcsIGV4cGVjdGF0aW9uczsKKwor
CS8qIERvIG5vdCBzdG9yZSBub24tY29uc29saWRhdGVkIGVudHJpZXMgKi8KKwlpZiAoZW50cnkt
PmRpcnR5IHx8IGVudHJ5LT53cml0aW5nIHx8ICFlbnRyeS0+a2V5KQorCQlyZXR1cm47CisKKwkv
KiBQYWNrIGhlYWRlcnMgKi8KKwloZWFkZXJzX2J1aWxkZXIgPSBnX3ZhcmlhbnRfYnVpbGRlcl9u
ZXcgKEdfVkFSSUFOVF9UWVBFX0FSUkFZKTsKKwlzb3VwX21lc3NhZ2VfaGVhZGVyc19pdGVyX2lu
aXQgKCZpdGVyLCBlbnRyeS0+aGVhZGVycyk7CisJd2hpbGUgKHNvdXBfbWVzc2FnZV9oZWFkZXJz
X2l0ZXJfbmV4dCAoJml0ZXIsICZoZWFkZXJfa2V5LCAmaGVhZGVyX3ZhbHVlKSkKKwkJZ192YXJp
YW50X2J1aWxkZXJfYWRkIChoZWFkZXJzX2J1aWxkZXIsIFdFQktJVF9TT1VQX0NBQ0hFX0RFQ09E
RV9IRUFERVJTX0ZPUk1BVCwgaGVhZGVyX2tleSwgaGVhZGVyX3ZhbHVlKTsKKworCWNvbnRlbnRf
bGVuZ3RoID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2NvbnRlbnRfbGVuZ3RoIChlbnRyeS0+
aGVhZGVycyk7CisJY29udGVudF90eXBlID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2NvbnRl
bnRfdHlwZSAoZW50cnktPmhlYWRlcnMsIE5VTEwpOworCWVuY29kaW5nID0gc291cF9tZXNzYWdl
X2hlYWRlcnNfZ2V0X2VuY29kaW5nIChlbnRyeS0+aGVhZGVycyk7CisJZXhwZWN0YXRpb25zID0g
c291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2V4cGVjdGF0aW9ucyAoZW50cnktPmhlYWRlcnMpOwor
CisJLyogRW50cnkgZGF0YSAqLworCWdfdmFyaWFudF9idWlsZGVyX2FkZCAoZW50cmllc19idWls
ZGVyLCBXRUJLSVRfU09VUF9DQUNIRV9ERUNPREVfUEhFQURFUlNfRk9STUFULAorCQkJICAgICAg
IGVudHJ5LT5rZXksIGVudHJ5LT5maWxlbmFtZSwgZW50cnktPm11c3RfcmV2YWxpZGF0ZSwKKwkJ
CSAgICAgICBlbnRyeS0+ZnJlc2huZXNzX2xpZmV0aW1lLCBlbnRyeS0+Y29ycmVjdGVkX2luaXRp
YWxfYWdlLAorCQkJICAgICAgIGVudHJ5LT5yZXNwb25zZV90aW1lLCBlbnRyeS0+aGl0cywgZW50
cnktPmxlbmd0aCwKKwkJCSAgICAgICBjb250ZW50X2xlbmd0aCwgKGNvbnN0IGdjaGFyKVNPVVBf
TUVTU0FHRV9IRUFERVJTX1JFU1BPTlNFLAorCQkJICAgICAgIChjb25zdCBnY2hhcillbmNvZGlu
ZywgKGNvbnN0IGdjaGFyKWV4cGVjdGF0aW9ucywKKwkJCSAgICAgICAoY29uc3QgZ2NoYXIgKilj
b250ZW50X3R5cGUsIGhlYWRlcnNfYnVpbGRlcik7CisKKwlnX3ZhcmlhbnRfYnVpbGRlcl91bnJl
ZiAoaGVhZGVyc19idWlsZGVyKTsKK30KKwordm9pZAord2Via2l0X3NvdXBfY2FjaGVfZHVtcCAo
V2ViS2l0U291cENhY2hlICpjYWNoZSkKK3sKKwlXZWJLaXRTb3VwQ2FjaGVQcml2YXRlICpwcml2
ID0gV0VCS0lUX1NPVVBfQ0FDSEVfR0VUX1BSSVZBVEUgKGNhY2hlKTsKKwlnY2hhciAqZmlsZW5h
bWU7CisJR1ZhcmlhbnRCdWlsZGVyICplbnRyaWVzX2J1aWxkZXI7CisJR1ZhcmlhbnQgKmNhY2hl
X3ZhcmlhbnQ7CisKKwkvKiBDcmVhdGUgdGhlIGJ1aWxkZXIgYW5kIGl0ZXJhdGUgb3ZlciBhbGwg
ZW50cmllcyAqLworCWVudHJpZXNfYnVpbGRlciA9IGdfdmFyaWFudF9idWlsZGVyX25ldyAoR19W
QVJJQU5UX1RZUEVfQVJSQVkpOworCWdfaGFzaF90YWJsZV9mb3JlYWNoIChjYWNoZS0+cHJpdi0+
Y2FjaGUsIChHSEZ1bmMpcGFja19lbnRyeSwgZW50cmllc19idWlsZGVyKTsKKworCS8qIFNlcmlh
bGl6ZSBhbmQgZHVtcCAqLworCWNhY2hlX3ZhcmlhbnQgPSBnX3ZhcmlhbnRfbmV3IChXRUJLSVRf
U09VUF9DQUNIRV9ERUNPREVfRU5UUklFU19GT1JNQVQsIGVudHJpZXNfYnVpbGRlcik7CisJZ192
YXJpYW50X2J1aWxkZXJfdW5yZWYgKGVudHJpZXNfYnVpbGRlcik7CisKKwlmaWxlbmFtZSA9IGdf
YnVpbGRfZmlsZW5hbWUgKHByaXYtPmNhY2hlX2RpciwgV0VCS0lUX1NPVVBfQ0FDSEVfRklMRSwg
TlVMTCk7CisJZ19maWxlX3NldF9jb250ZW50cyAoZmlsZW5hbWUsIChjb25zdCBnY2hhciAqKWdf
dmFyaWFudF9nZXRfZGF0YSAoY2FjaGVfdmFyaWFudCksCisJCQkgICAgIGdfdmFyaWFudF9nZXRf
c2l6ZSAoY2FjaGVfdmFyaWFudCksIE5VTEwpOworCWdfZnJlZSAoZmlsZW5hbWUpOworCWdfdmFy
aWFudF91bnJlZiAoY2FjaGVfdmFyaWFudCk7Cit9CisKK3ZvaWQKK3dlYmtpdF9zb3VwX2NhY2hl
X2xvYWQgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUpCit7CisJZ2NoYXIgKmZpbGVuYW1lID0gTlVM
TCwgKmNvbnRlbnRfdHlwZSA9IE5VTEwsICpjb250ZW50cyA9IE5VTEw7CisJR1ZhcmlhbnQgKmNh
Y2hlX3ZhcmlhbnQ7CisJR1ZhcmlhbnRJdGVyICplbnRyaWVzX2l0ZXIsICpoZWFkZXJzX2l0ZXI7
CisJR1ZhcmlhbnRUeXBlICp2YXJpYW50X2Zvcm1hdDsKKwlTb3VwTWVzc2FnZUhlYWRlcnNUeXBl
IGhlYWRlcnNfdHlwZTsKKwlTb3VwRW5jb2RpbmcgZW5jb2Rpbmc7CisJU291cEV4cGVjdGF0aW9u
IGV4cGVjdGF0aW9uczsKKwlnc2l6ZSBsZW5ndGg7CisJZ3VpbnQzMiBjb250ZW50X2xlbmd0aDsK
KwlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnk7CisJV2ViS2l0U291cENhY2hlUHJpdmF0ZSAq
cHJpdiA9IGNhY2hlLT5wcml2OworCisJZmlsZW5hbWUgPSBnX2J1aWxkX2ZpbGVuYW1lIChwcml2
LT5jYWNoZV9kaXIsIFdFQktJVF9TT1VQX0NBQ0hFX0ZJTEUsIE5VTEwpOworCWlmICghZ19maWxl
X2dldF9jb250ZW50cyAoZmlsZW5hbWUsICZjb250ZW50cywgJmxlbmd0aCwgTlVMTCkpIHsKKwkJ
Z19mcmVlIChmaWxlbmFtZSk7CisJCXJldHVybjsKKwl9CisJZ19mcmVlIChmaWxlbmFtZSk7CisK
Kwl2YXJpYW50X2Zvcm1hdCA9IGdfdmFyaWFudF90eXBlX25ldyAoV0VCS0lUX1NPVVBfQ0FDSEVf
REVDT0RFX0VOVFJJRVNfRk9STUFUKTsKKwljYWNoZV92YXJpYW50ID0gZ192YXJpYW50X25ld19m
cm9tX2RhdGEgKHZhcmlhbnRfZm9ybWF0LCAoY29uc3QgZ2NoYXIgKiljb250ZW50cywgbGVuZ3Ro
LCBGQUxTRSwgTlVMTCwgTlVMTCk7CisJZ192YXJpYW50X3R5cGVfZnJlZSAodmFyaWFudF9mb3Jt
YXQpOworCisJZ192YXJpYW50X2dldCAoY2FjaGVfdmFyaWFudCwgV0VCS0lUX1NPVVBfQ0FDSEVf
REVDT0RFX0VOVFJJRVNfRk9STUFULCAmZW50cmllc19pdGVyKTsKKwllbnRyeSA9IGdfc2xpY2Vf
bmV3MCAoV2ViS2l0U291cENhY2hlRW50cnkpOworCisJd2hpbGUgKGdfdmFyaWFudF9pdGVyX2xv
b3AgKGVudHJpZXNfaXRlciwgV0VCS0lUX1NPVVBfQ0FDSEVfREVDT0RFX1BIRUFERVJTX0ZPUk1B
VCwKKwkJCQkgICAgJmVudHJ5LT5rZXksICZlbnRyeS0+ZmlsZW5hbWUsICZlbnRyeS0+bXVzdF9y
ZXZhbGlkYXRlLAorCQkJCSAgICAmZW50cnktPmZyZXNobmVzc19saWZldGltZSwgJmVudHJ5LT5j
b3JyZWN0ZWRfaW5pdGlhbF9hZ2UsCisJCQkJICAgICZlbnRyeS0+cmVzcG9uc2VfdGltZSwgJmVu
dHJ5LT5oaXRzLCAmZW50cnktPmxlbmd0aCwKKwkJCQkgICAgJmNvbnRlbnRfbGVuZ3RoLCAmaGVh
ZGVyc190eXBlLCAmZW5jb2RpbmcsICZleHBlY3RhdGlvbnMsCisJCQkJICAgICZjb250ZW50X3R5
cGUsICZoZWFkZXJzX2l0ZXIpKSB7CisJCWNvbnN0IGdjaGFyICpoZWFkZXJfa2V5LCAqaGVhZGVy
X3ZhbHVlOworCisJCS8qIEhlYWRlciAqLworCQllbnRyeS0+aGVhZGVycyA9IHNvdXBfbWVzc2Fn
ZV9oZWFkZXJzX25ldyAoKFNvdXBNZXNzYWdlSGVhZGVyc1R5cGUpaGVhZGVyc190eXBlKTsKKwkJ
c291cF9tZXNzYWdlX2hlYWRlcnNfc2V0X2NvbnRlbnRfbGVuZ3RoIChlbnRyeS0+aGVhZGVycywg
Y29udGVudF9sZW5ndGgpOworCQlzb3VwX21lc3NhZ2VfaGVhZGVyc19zZXRfY29udGVudF90eXBl
IChlbnRyeS0+aGVhZGVycywgY29udGVudF90eXBlLCBOVUxMKTsKKwkJc291cF9tZXNzYWdlX2hl
YWRlcnNfc2V0X2VuY29kaW5nIChlbnRyeS0+aGVhZGVycywgZW5jb2RpbmcpOworCQlzb3VwX21l
c3NhZ2VfaGVhZGVyc19zZXRfZXhwZWN0YXRpb25zIChlbnRyeS0+aGVhZGVycywgZXhwZWN0YXRp
b25zKTsKKworCQkvKiBTb3VwTWVzc2FnZSBIZWFkZXJzICovCisJCXdoaWxlIChnX3ZhcmlhbnRf
aXRlcl9sb29wIChoZWFkZXJzX2l0ZXIsIFdFQktJVF9TT1VQX0NBQ0hFX0RFQ09ERV9IRUFERVJT
X0ZPUk1BVCwgJmhlYWRlcl9rZXksICZoZWFkZXJfdmFsdWUpKQorCQkJc291cF9tZXNzYWdlX2hl
YWRlcnNfcmVwbGFjZSAoZW50cnktPmhlYWRlcnMsIGhlYWRlcl9rZXksIGhlYWRlcl92YWx1ZSk7
CisKKwkJLyogSW5zZXJ0IGluIGNhY2hlICovCisJCWlmICghd2Via2l0X3NvdXBfY2FjaGVfZW50
cnlfaW5zZXJ0X2J5X2tleSAoY2FjaGUsIChjb25zdCBnY2hhciAqKWVudHJ5LT5rZXksIGVudHJ5
KSkKKwkJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUgKGVudHJ5KTsKKworCQkvKiBOZXcg
ZW50cnkgZm9yIHRoZSBuZXh0IGl0ZXJhdGlvbi4gVGhpcyBjcmVhdGVzIGFuCisJCSAgIGV4dHJh
IG9iamVjdCB0aGUgbGFzdCBpdGVyYXRpb24gYnV0IGl0J3Mgd29ydGggaXQKKwkJICAgYXMgd2Ug
c2F2ZSBzZXZlcmFsIGlmJ3MgKi8KKwkJZW50cnkgPSBnX3NsaWNlX25ldzAgKFdlYktpdFNvdXBD
YWNoZUVudHJ5KTsKKwl9CisJLyogUmVtb3ZlIGxhc3QgY3JlYXRlZCBlbnRyeSAqLworCWdfc2xp
Y2VfZnJlZSAoV2ViS2l0U291cENhY2hlRW50cnksIGVudHJ5KTsKKworCS8qIGZyZWVzICovCisJ
Z192YXJpYW50X2l0ZXJfZnJlZSAoZW50cmllc19pdGVyKTsKKwlnX3ZhcmlhbnRfdW5yZWYgKGNh
Y2hlX3ZhcmlhbnQpOworfQorCit2b2lkCit3ZWJraXRfc291cF9jYWNoZV9zZXRfbWF4X3NpemUg
KFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsCisJCQkJZ3VpbnQgbWF4X3NpemUpCit7CisJY2FjaGUt
PnByaXYtPm1heF9zaXplID0gbWF4X3NpemU7CisJY2FjaGUtPnByaXYtPm1heF9lbnRyeV9kYXRh
X3NpemUgPSBjYWNoZS0+cHJpdi0+bWF4X3NpemUgLyBNQVhfRU5UUllfREFUQV9QRVJDRU5UQUdF
OworfQorCitndWludAord2Via2l0X3NvdXBfY2FjaGVfZ2V0X21heF9zaXplIChXZWJLaXRTb3Vw
Q2FjaGUgKmNhY2hlKQoreworCXJldHVybiBjYWNoZS0+cHJpdi0+bWF4X3NpemU7Cit9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1j
YWNoZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAt
Y2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODE3ZDNlCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0
L3NvdXAtY2FjaGUuaApAQCAtMCwwICsxLDk1IEBACisvKgorICogc291cC1jYWNoZS5oOgorICoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXRUJLSVRf
U09VUF9DQUNIRV9ICisjZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX0ggMQorCisjaW5jbHVkZSA8
d2Via2l0L3dlYmtpdGRlZmluZXMuaD4KKworI2luY2x1ZGUgPGxpYnNvdXAvc291cC10eXBlcy5o
PgorI2luY2x1ZGUgPGdpby9naW8uaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJ
VF9UWVBFX1NPVVBfQ0FDSEUgICAgICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfZ2V0X3R5cGUg
KCkpCisjZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFKG9iaikgICAgICAgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFLCBXZWJLaXRT
b3VwQ2FjaGUpKQorI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9DTEFTUyhrbGFzcykgICAgKEdf
VFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFLCBX
ZWJLaXRTb3VwQ2FjaGVDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19TT1VQX0NBQ0hFKG9iaikg
ICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBXRUJLSVRfVFlQRV9T
T1VQX0NBQ0hFKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1NPVVBfQ0FDSEVfQ0xBU1Moa2xhc3MpIChH
X1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUpKQor
I2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5D
RV9HRVRfQ0xBU1MgKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFLCBXZWJLaXRTb3VwQ2Fj
aGVDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRTb3VwQ2FjaGUgV2ViS2l0U291cENh
Y2hlOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBDYWNoZVByaXZhdGUgV2ViS2l0U291cENh
Y2hlUHJpdmF0ZTsKKwordHlwZWRlZiBlbnVtIHsKKwlXRUJLSVRfU09VUF9DQUNIRV9DQUNIRUFC
TEUgPSAoMSA8PCAwKSwKKwlXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRSA9ICgxIDw8IDEp
LAorCVdFQktJVF9TT1VQX0NBQ0hFX0lOVkFMSURBVEVTID0gKDEgPDwgMiksCisJV0VCS0lUX1NP
VVBfQ0FDSEVfVkFMSURBVEVTID0gKDEgPDwgMykKK30gV2ViS2l0U291cENhY2hlYWJpbGl0eTsK
KwordHlwZWRlZiBlbnVtIHsKKwlXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9GUkVTSCwKKwlX
RUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9ORUVEU19WQUxJREFUSU9OLAorCVdFQktJVF9TT1VQ
X0NBQ0hFX1JFU1BPTlNFX1NUQUxFCit9IFdlYktpdFNvdXBDYWNoZVJlc3BvbnNlOworCit0eXBl
ZGVmIGVudW0geworCVdFQktJVF9TT1VQX0NBQ0hFX1NJTkdMRV9VU0VSLAorCVdFQktJVF9TT1VQ
X0NBQ0hFX1NIQVJFRAorfSBXZWJLaXRTb3VwQ2FjaGVUeXBlOworCitzdHJ1Y3QgX1dlYktpdFNv
dXBDYWNoZSB7CisJR09iamVjdCBwYXJlbnRfaW5zdGFuY2U7CisKKwlXZWJLaXRTb3VwQ2FjaGVQ
cml2YXRlICpwcml2OworfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCUdPYmplY3RDbGFzcyBwYXJl
bnRfY2xhc3M7CisKKwkvKiBtZXRob2RzICovCisJV2ViS2l0U291cENhY2hlYWJpbGl0eSAoKmdl
dF9jYWNoZWFiaWxpdHkpKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsIFNvdXBNZXNzYWdlICptc2cp
OworCisJLyogUGFkZGluZyBmb3IgZnV0dXJlIGV4cGFuc2lvbiAqLworCXZvaWQgKCpfbGlic291
cF9yZXNlcnZlZDEpKHZvaWQpOworCXZvaWQgKCpfbGlic291cF9yZXNlcnZlZDIpKHZvaWQpOwor
CXZvaWQgKCpfbGlic291cF9yZXNlcnZlZDMpKHZvaWQpOworfSBXZWJLaXRTb3VwQ2FjaGVDbGFz
czsKKworV0VCS0lUX0FQSSBHVHlwZSAgICAgICAgICAgICB3ZWJraXRfc291cF9jYWNoZV9nZXRf
dHlwZSAodm9pZCk7CitXRUJLSVRfQVBJIFdlYktpdFNvdXBDYWNoZSAgKndlYmtpdF9zb3VwX2Nh
Y2hlX25ldyAoY29uc3QgY2hhciAgKmNhY2hlX2RpciwKKwkJCQkJCSAgICBXZWJLaXRTb3VwQ2Fj
aGVUeXBlIGNhY2hlX3R5cGUpOworV0VCS0lUX0FQSSB2b2lkICAgICAgICAgICAgICB3ZWJraXRf
c291cF9jYWNoZV9mbHVzaCAoV2ViS2l0U291cENhY2hlICAgKmNhY2hlKTsKK1dFQktJVF9BUEkg
dm9pZCAgICAgICAgICAgICAgd2Via2l0X3NvdXBfY2FjaGVfY2xlYXIgKFdlYktpdFNvdXBDYWNo
ZSAgICpjYWNoZSk7CisKK1dFQktJVF9BUEkgdm9pZCAgICAgICAgICAgICAgd2Via2l0X3NvdXBf
Y2FjaGVfZHVtcCAoV2ViS2l0U291cENhY2hlICpjYWNoZSk7CitXRUJLSVRfQVBJIHZvaWQgICAg
ICAgICAgICAgIHdlYmtpdF9zb3VwX2NhY2hlX2xvYWQgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUp
OworCitXRUJLSVRfQVBJIHZvaWQgICAgICAgICAgICAgIHdlYmtpdF9zb3VwX2NhY2hlX3NldF9t
YXhfc2l6ZSAoV2ViS2l0U291cENhY2hlICpjYWNoZSwKKwkJCQkJCQkgICAgIGd1aW50IG1heF9z
aXplKTsKK1dFQktJVF9BUEkgZ3VpbnQgICAgICAgICAgICAgd2Via2l0X3NvdXBfY2FjaGVfZ2V0
X21heF9zaXplIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKTsKKworR19FTkRfREVDTFMKKworCisj
ZW5kaWYgLyogV0VCS0lUX1NPVVBfQ0FDSEVfSCAqLworCmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cgYi9XZWJLaXRUb29scy9DaGFuZ2VMb2cKaW5kZXggNThlMWNlYi4uYjU1Yjdh
NiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1dlYktpdFRvb2xzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDEwLTA5LTAxICBTZXJnaW8gVmlsbGFyIFNlbmlu
ICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtHVEtdIEFkZCBIVFRQIGNhY2hpbmcgc3VwcG9ydAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQyNjEKKworICAgICAgICAq
IEdOVW1ha2VmaWxlLmFtOiBhZGRlZCBwYXRocyBmb3IgdGhlIG5ldyBzb3VwIEhUVFAgY2FjaGUg
Y29kZQorCiAyMDEwLTA4LTMxICBBZHJpYW4gUGVyZXogIDxhcGVyZXpAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9HTlVtYWtlZmlsZS5hbSBiL1dlYktpdFRvb2xzL0dOVW1ha2VmaWxlLmFtCmluZGV4IDM5
ZGY0MjEuLjU5YzU4MTIgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0dOVW1ha2VmaWxlLmFtCisr
KyBiL1dlYktpdFRvb2xzL0dOVW1ha2VmaWxlLmFtCkBAIC02LDYgKzYsNyBAQCBub2luc3RfUFJP
R1JBTVMgKz0gXAogIyBHdGtMYXVuY2hlcgogUHJvZ3JhbXNfR3RrTGF1bmNoZXJfQ1BQRkxBR1Mg
PSBcCiAJLUkkKHNyY2RpcikvV2ViS2l0L2d0ayBcCisJLUkkKHNyY2RpcikvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvIFwKIAktSSQodG9wX2J1aWxkZGlyKS9XZWJLaXQvZ3Rr
IFwKIAktSSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcyBcCiAJJChnbG9iYWxfY3BwZmxh
Z3MpIFwKQEAgLTM3LDYgKzM4LDcgQEAgZHVtcHJlbmRlcnRyZWVfY3BwZmxhZ3MgOj0gXAogCS1J
JChzcmNkaXIpL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ayBcCiAJLUkkKHNyY2Rpcikv
V2ViS2l0L2d0ayBcCiAJLUkkKHNyY2RpcikvV2ViQ29yZS9wbGF0Zm9ybS9ndGsgXAorCS1JJChz
cmNkaXIpL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlLyBcCiAJLUkkKHRvcF9i
dWlsZGRpcikvV2ViS2l0L2d0ayBcCiAJLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMg
XAogCSQoZ2xvYmFsX2NwcGZsYWdzKSBcCmRpZmYgLS1naXQgYS9hdXRvdG9vbHMvd2Via2l0Lm00
IGIvYXV0b3Rvb2xzL3dlYmtpdC5tNAppbmRleCAzNzlmYThmLi42YjQ0ZjMwIDEwMDY0NAotLS0g
YS9hdXRvdG9vbHMvd2Via2l0Lm00CisrKyBiL2F1dG90b29scy93ZWJraXQubTQKQEAgLTEwOCw3
ICsxMDgsNyBAQCBBQ19ERUZVTl9PTkNFKFtfV0VCS0lUX0NIRUNLX0dMSUJdLAogW2RubAogZG5s
IGNoZWNrIGZvciBnbGliCiAjIFZlcnNpb24gcmVxdWlyZW1lbnRzCi1HTElCX1JFUVVJUkVEX1ZF
UlNJT049Mi4yMS4zCitHTElCX1JFUVVJUkVEX1ZFUlNJT049Mi4yNAogR09CSkVDVF9SRVFVSVJF
RF9WRVJTSU9OPTIuMAogR1RIUkVBRF9SRVFVSVJFRF9WRVJTSU9OPTIuMAogCi0tIAoxLjcuMQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66190</attachid>
            <date>2010-09-01 03:35:42 -0700</date>
            <delta_ts>2010-09-07 01:38:16 -0700</delta_ts>
            <desc>WebKitGtk+ to use the new API from the imported SoupURILoader code</desc>
            <filename>0002-WebKitGtk-to-use-the-new-API-from-the-imported-SoupU.patch</filename>
            <type>text/plain</type>
            <size>30861</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">RnJvbSA0MzU1ZDk1MjE4OTcxOTk1NDE2ZTVhZTg1OGZmZGQ4Y2ZiZTBhYmFlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTZXJnaW8gVmlsbGFyIFNlbmluIDxzdmlsbGFyQGlnYWxpYS5j
b20+CkRhdGU6IFdlZCwgMSBTZXAgMjAxMCAxMTo0MjoyNyArMDIwMApTdWJqZWN0OiBbUEFUQ0gg
Mi8zXSBXZWJLaXRHdGsrIHRvIHVzZSB0aGUgbmV3IEFQSSBmcm9tIHRoZSBpbXBvcnRlZCBTb3Vw
VVJJTG9hZGVyIGNvZGUKCi0tLQogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFu
ZGxlSW50ZXJuYWwuaCAgfCAgIDE0ICstCiAuLi4vcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291
cmNlSGFuZGxlU291cC5jcHAgICB8ICA0NzQgKysrKysrKysrKy0tLS0tLS0tLS0KIFdlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdC5oICAgIHwgICAgMSArCiAuLi4v
cGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3BwICB8ICAgMjMgKwog
NCBmaWxlcyBjaGFuZ2VkLCAyNjIgaW5zZXJ0aW9ucygrKSwgMjUwIGRlbGV0aW9ucygtKQoKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFs
LmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCmlu
ZGV4IDI0YjAwYmYuLmQzYzlkM2MgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaApAQCAtNDYsNiArNDYsOSBAQAogI2VuZGlmCiAKICNp
ZiBVU0UoU09VUCkKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3QuaCIKKyNpbmNsdWRlICJzb3VwLXJl
cXVlc3Rlci5oIgorI2luY2x1ZGUgPEdSZWZQdHIuaD4KICNpbmNsdWRlIDxsaWJzb3VwL3NvdXAu
aD4KIGNsYXNzIEZyYW1lOwogI2VuZGlmCkBAIC0xMTQsNyArMTE3LDggQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogI2lmIFVTRShTT1VQKQogICAgICAgICAgICAgLCBtX21zZygwKQogICAgICAgICAg
ICAgLCBtX2NhbmNlbGxlZChmYWxzZSkKLSAgICAgICAgICAgICwgbV9nZmlsZSgwKQorICAgICAg
ICAgICAgLCBtX3NvdXBSZXF1ZXN0KDApCisgICAgICAgICAgICAsIG1fcmVxdWVzdGVyKDApCiAg
ICAgICAgICAgICAsIG1faW5wdXRTdHJlYW0oMCkKICAgICAgICAgICAgICwgbV9jYW5jZWxsYWJs
ZSgwKQogICAgICAgICAgICAgLCBtX2J1ZmZlcigwKQpAQCAtMTIyLDYgKzEyNiw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICwgbV90b3RhbCgwKQogICAgICAgICAgICAgLCBt
X2lkbGVIYW5kbGVyKDApCiAgICAgICAgICAgICAsIG1fZnJhbWUoMCkKKyAgICAgICAgICAgICwg
bV9nb3RDaHVua0hhbmRsZXIoMCkKICNlbmRpZgogI2lmIFBMQVRGT1JNKFFUKQogICAgICAgICAg
ICAgLCBtX2pvYigwKQpAQCAtMTM5LDYgKzE0NCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgICAgIG1fdXNlciA9IHVybC51c2VyKCk7CiAgICAgICAgICAgICBtX3Bhc3MgPSB1cmwu
cGFzcygpOwogICAgICAgICAgICAgbV9maXJzdFJlcXVlc3QucmVtb3ZlQ3JlZGVudGlhbHMoKTsK
KyNpZiBVU0UoU09VUCkKKyAgICAgICAgICAgIG1fcmVxdWVzdGVyID0gc291cF9yZXF1ZXN0ZXJf
bmV3KCk7CisjZW5kaWYKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgflJlc291cmNlSGFu
ZGxlSW50ZXJuYWwoKTsKQEAgLTE5NiwxMyArMjA0LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgU291cE1lc3NhZ2UqIG1fbXNnOwogICAgICAgICBSZXNvdXJjZVJlc3BvbnNlIG1f
cmVzcG9uc2U7CiAgICAgICAgIGJvb2wgbV9jYW5jZWxsZWQ7Ci0gICAgICAgIEdGaWxlKiBtX2dm
aWxlOworICAgICAgICBQbGF0Zm9ybVJlZlB0cjxTb3VwUmVxdWVzdD4gbV9zb3VwUmVxdWVzdDsK
KyAgICAgICAgUGxhdGZvcm1SZWZQdHI8U291cFJlcXVlc3Rlcj4gbV9yZXF1ZXN0ZXI7CiAgICAg
ICAgIEdJbnB1dFN0cmVhbSogbV9pbnB1dFN0cmVhbTsKICAgICAgICAgR0NhbmNlbGxhYmxlKiBt
X2NhbmNlbGxhYmxlOwogICAgICAgICBjaGFyKiBtX2J1ZmZlcjsKICAgICAgICAgZ3NpemUgbV9i
dWZmZXJTaXplLCBtX3RvdGFsOwogICAgICAgICBndWludCBtX2lkbGVIYW5kbGVyOwogICAgICAg
ICBGcmFtZSogbV9mcmFtZTsKKyAgICAgICAgZ3Vsb25nIG1fZ290Q2h1bmtIYW5kbGVyOwogI2Vu
ZGlmCiAjaWYgUExBVEZPUk0oUVQpCiAgICAgICAgIFFOZXR3b3JrUmVwbHlIYW5kbGVyKiBtX2pv
YjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFu
ZGxlU291cC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRs
ZVNvdXAuY3BwCmluZGV4IDk2YTJmMjUuLmQwZWY1NDcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcApAQCAtNDUsOCArNDUs
OCBAQAogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCIKICNpbmNsdWRlICJSZXNv
dXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSAic291
cC1yZXF1ZXN0LWh0dHAuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKLQogI2luY2x1ZGUg
PGVycm5vLmg+CiAjaW5jbHVkZSA8ZmNudGwuaD4KICNpbmNsdWRlIDxnaW8vZ2lvLmg+CkBAIC0x
MjAsOCArMTIwLDEwIEBAIHZvaWQgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyOjpydW4oKQogICAg
ICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNsZWFu
dXBHaW9PcGVyYXRpb24oUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgYm9vbCBpc0Rlc3Ryb3lpbmcp
Owotc3RhdGljIGJvb2wgc3RhcnREYXRhKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIFN0cmluZyB1
cmxTdHJpbmcpOworc3RhdGljIHZvaWQgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKFJlc291
cmNlSGFuZGxlKiBoYW5kbGUsIGJvb2wgaXNEZXN0cm95aW5nKTsKK3N0YXRpYyB2b2lkIHNlbmRS
ZXF1ZXN0Q2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50
ZXIpOworc3RhdGljIHZvaWQgcmVhZENhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVz
dWx0KiByZXMsIGdwb2ludGVyKTsKK3N0YXRpYyB2b2lkIGNsb3NlQ2FsbGJhY2soR09iamVjdCog
c291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIpOwogc3RhdGljIGJvb2wgc3RhcnRH
aW8oUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgS1VSTCB1cmwpOwogCiBSZXNvdXJjZUhhbmRsZUlu
dGVybmFsOjp+UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCgpCkBAIC0xMzEsNiArMTMzLDExIEBAIFJl
c291cmNlSGFuZGxlSW50ZXJuYWw6On5SZXNvdXJjZUhhbmRsZUludGVybmFsKCkKICAgICAgICAg
bV9tc2cgPSAwOwogICAgIH0KIAorICAgIGlmIChtX3NvdXBSZXF1ZXN0KSB7CisgICAgICAgIGdf
b2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKG1fc291cFJlcXVlc3QuZ2V0KCkpLCAid2Via2l0LXJl
c291cmNlIiwgMCk7CisgICAgICAgIG1fc291cFJlcXVlc3QuY2xlYXIoKTsKKyAgICB9CisKICAg
ICBpZiAobV9pZGxlSGFuZGxlcikgewogICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9pZGxlSGFu
ZGxlcik7CiAgICAgICAgIG1faWRsZUhhbmRsZXIgPSAwOwpAQCAtMTQzLDcgKzE1MCw3IEBAIFJl
c291cmNlSGFuZGxlOjp+UmVzb3VyY2VIYW5kbGUoKQogICAgICAgICBnX3NpZ25hbF9oYW5kbGVy
c19kaXNjb25uZWN0X21hdGNoZWQoZC0+bV9tc2csIEdfU0lHTkFMX01BVENIX0RBVEEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCB0aGlz
KTsKIAotICAgIGNsZWFudXBHaW9PcGVyYXRpb24odGhpcywgdHJ1ZSk7CisgICAgY2xlYW51cFNv
dXBSZXF1ZXN0T3BlcmF0aW9uKHRoaXMsIHRydWUpOwogfQogCiB2b2lkIFJlc291cmNlSGFuZGxl
OjpwcmVwYXJlRm9yVVJMKGNvbnN0IEtVUkwgJnVybCkKQEAgLTE4NSw5ICsxOTIsOCBAQCBzdGF0
aWMgdm9pZCByZXN0YXJ0ZWRDYWxsYmFjayhTb3VwTWVzc2FnZSogbXNnLCBncG9pbnRlciBkYXRh
KQogICAgIGlmIChkLT5tX2NhbmNlbGxlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY2hhciog
dXJpID0gc291cF91cmlfdG9fc3RyaW5nKHNvdXBfbWVzc2FnZV9nZXRfdXJpKG1zZyksIGZhbHNl
KTsKLSAgICBTdHJpbmcgbG9jYXRpb24gPSBTdHJpbmcodXJpKTsKLSAgICBnX2ZyZWUodXJpKTsK
KyAgICBHT3duUHRyPGNoYXI+IHVyaShzb3VwX3VyaV90b19zdHJpbmcoc291cF9tZXNzYWdlX2dl
dF91cmkobXNnKSwgZmFsc2UpKTsKKyAgICBTdHJpbmcgbG9jYXRpb24gPSBTdHJpbmcodXJpLmdl
dCgpKTsKICAgICBLVVJMIG5ld1VSTCA9IEtVUkwoaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwo
KSwgbG9jYXRpb24pOwogCiAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QgPSBoYW5kbGUtPmZp
cnN0UmVxdWVzdCgpOwpAQCAtMjkzLDUyICsyOTksMTEgQEAgc3RhdGljIHZvaWQgZ290Q2h1bmtD
YWxsYmFjayhTb3VwTWVzc2FnZSogbXNnLCBTb3VwQnVmZmVyKiBjaHVuaywgZ3BvaW50ZXIgZGF0
YSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0YShoYW5kbGUu
Z2V0KCksIGNodW5rLT5kYXRhLCBjaHVuay0+bGVuZ3RoLCBmYWxzZSk7Ci19Ci0KLS8vIENhbGxl
ZCBhdCB0aGUgZW5kIG9mIHRoZSBtZXNzYWdlLCB3aXRoIGFsbCB0aGUgbmVjZXNzYXJ5IGFib3V0
IHRoZSBsYXN0IGluZm9ybWF0aW9ucy4KLS8vIERvZXNuJ3QgZ2V0IGNhbGxlZCBmb3IgcmVkaXJl
Y3RzLgotc3RhdGljIHZvaWQgZmluaXNoZWRDYWxsYmFjayhTb3VwU2Vzc2lvbiAqc2Vzc2lvbiwg
U291cE1lc3NhZ2UqIG1zZywgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBSZWZQdHI8UmVzb3VyY2VI
YW5kbGU+IGhhbmRsZSA9IGFkb3B0UmVmKHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxlKj4oZGF0
YSkpOwotICAgIC8vIFRPRE86IG1heWJlIHdlIHNob3VsZCBydW4gdGhpcyBjb2RlIGV2ZW4gaWYg
dGhlcmUncyBubyBjbGllbnQ/Ci0gICAgaWYgKCFoYW5kbGUpCi0gICAgICAgIHJldHVybjsKIAot
ICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFsKCk7Ci0K
LSAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0gaGFuZGxlLT5jbGllbnQoKTsKLSAg
ICBpZiAoIWNsaWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGQtPm1fY2FuY2VsbGVk
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoU09VUF9TVEFUVVNfSVNfVFJBTlNQT1JUX0VS
Uk9SKG1zZy0+c3RhdHVzX2NvZGUpKSB7Ci0gICAgICAgIGNoYXIqIHVyaSA9IHNvdXBfdXJpX3Rv
X3N0cmluZyhzb3VwX21lc3NhZ2VfZ2V0X3VyaShtc2cpLCBmYWxzZSk7Ci0gICAgICAgIFJlc291
cmNlRXJyb3IgZXJyb3IoZ19xdWFya190b19zdHJpbmcoU09VUF9IVFRQX0VSUk9SKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtc2ctPnN0YXR1c19jb2RlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVyaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc6OmZy
b21VVEY4KG1zZy0+cmVhc29uX3BocmFzZSkpOwotICAgICAgICBnX2ZyZWUodXJpKTsKLSAgICAg
ICAgY2xpZW50LT5kaWRGYWlsKGhhbmRsZS5nZXQoKSwgZXJyb3IpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgaWYgKG1zZy0+c3RhdHVzX2NvZGUgPT0gU09VUF9TVEFUVVNfVU5BVVRI
T1JJWkVEKSB7Ci0gICAgICAgIGZpbGxSZXNwb25zZUZyb21NZXNzYWdlKG1zZywgJmQtPm1fcmVz
cG9uc2UpOwotICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShoYW5kbGUuZ2V0KCks
IGQtPm1fcmVzcG9uc2UpOwotCi0gICAgICAgIC8vIFdlYkNvcmUgbWlnaHQgaGF2ZSBjYW5jZWxs
ZWQgdGhlIGpvYiBpbiB0aGUgd2hpbGUKLSAgICAgICAgaWYgKGQtPm1fY2FuY2VsbGVkKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChtc2ctPnJlc3BvbnNlX2JvZHktPmRhdGEp
Ci0gICAgICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVEYXRhKGhhbmRsZS5nZXQoKSwgbXNnLT5y
ZXNwb25zZV9ib2R5LT5kYXRhLCBtc2ctPnJlc3BvbnNlX2JvZHktPmxlbmd0aCwgdHJ1ZSk7Ci0g
ICAgfQotCi0gICAgY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKGhhbmRsZS5nZXQoKSk7CiB9CiAK
KyNkZWZpbmUgQlVGRkVSX1NJWkUgODE5MgorCiAvLyBwYXJzZURhdGFVcmwoKSBpcyB0YWtlbiBm
cm9tIHRoZSBDVVJMIGh0dHAgYmFja2VuZC4KIHN0YXRpYyBnYm9vbGVhbiBwYXJzZURhdGFVcmwo
Z3BvaW50ZXIgY2FsbGJhY2tEYXRhKQogewpAQCAtMzY0LDcgKzMyOSw2IEBAIHN0YXRpYyBnYm9v
bGVhbiBwYXJzZURhdGFVcmwoZ3BvaW50ZXIgY2FsbGJhY2tEYXRhKQogICAgIH0KIAogICAgIFN0
cmluZyBtZWRpYVR5cGUgPSB1cmwuc3Vic3RyaW5nKDUsIGluZGV4IC0gNSk7Ci0gICAgU3RyaW5n
IGRhdGEgPSB1cmwuc3Vic3RyaW5nKGluZGV4ICsgMSk7CiAKICAgICBib29sIGlzQmFzZTY0ID0g
bWVkaWFUeXBlLmVuZHNXaXRoKCI7YmFzZTY0IiwgZmFsc2UpOwogICAgIGlmIChpc0Jhc2U2NCkK
QEAgLTM4MSw3ICszNDUsNiBAQCBzdGF0aWMgZ2Jvb2xlYW4gcGFyc2VEYXRhVXJsKGdwb2ludGVy
IGNhbGxiYWNrRGF0YSkKICAgICByZXNwb25zZS5zZXRNaW1lVHlwZShtaW1lVHlwZSk7CiAKICAg
ICBpZiAoaXNCYXNlNjQpIHsKLSAgICAgICAgZGF0YSA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNl
cyhkYXRhKTsKICAgICAgICAgcmVzcG9uc2Uuc2V0VGV4dEVuY29kaW5nTmFtZShjaGFyc2V0KTsK
ICAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UoaGFuZGxlLCByZXNwb25zZSk7CiAK
QEAgLTM5MCwzMiArMzUzLDQwIEBAIHN0YXRpYyBnYm9vbGVhbiBwYXJzZURhdGFVcmwoZ3BvaW50
ZXIgY2FsbGJhY2tEYXRhKQogICAgICAgICAvLyBvdXQgaW4gZWl0aGVyIG9mIHRob3NlIGNhc2Vz
LgogICAgICAgICBpZiAoZC0+bV9jYW5jZWxsZWQgfHwgIWhhbmRsZS0+Y2xpZW50KCkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gVXNlIHRoZSBHTGliIEJhc2U2NCwg
c2luY2UgV2ViQ29yZSdzIGRlY29kZXIgaXNuJ3QKLSAgICAgICAgLy8gZ2VuZXJhbC1wdXJwb3Nl
IGFuZCBmYWlscyBvbiBBY2lkMyB0ZXN0IDk3ICh3aGl0ZXNwYWNlKS4KLSAgICAgICAgc2l6ZV90
IG91dExlbmd0aCA9IDA7Ci0gICAgICAgIGNoYXIqIG91dERhdGEgPSAwOwotICAgICAgICBvdXRE
YXRhID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZ19iYXNlNjRfZGVjb2RlKGRhdGEudXRmOCgp
LmRhdGEoKSwgJm91dExlbmd0aCkpOwotICAgICAgICBpZiAob3V0RGF0YSAmJiBvdXRMZW5ndGgg
PiAwKQotICAgICAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0YShoYW5kbGUsIG91dERhdGEs
IG91dExlbmd0aCwgMCk7Ci0gICAgICAgIGdfZnJlZShvdXREYXRhKTsKICAgICB9IGVsc2Ugewog
ICAgICAgICAvLyBXZSBoYXZlIHRvIGNvbnZlcnQgdG8gVVRGLTE2IGVhcmx5IGR1ZSB0byBsaW1p
dGF0aW9ucyBpbiBLVVJMCi0gICAgICAgIGRhdGEgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMo
ZGF0YSwgVGV4dEVuY29kaW5nKGNoYXJzZXQpKTsKICAgICAgICAgcmVzcG9uc2Uuc2V0VGV4dEVu
Y29kaW5nTmFtZSgiVVRGLTE2Iik7CiAgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZVJlc3BvbnNl
KGhhbmRsZSwgcmVzcG9uc2UpOwogCiAgICAgICAgIGlmIChkLT5tX2NhbmNlbGxlZCB8fCAhaGFu
ZGxlLT5jbGllbnQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAo
ZGF0YS5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVEYXRhKGhh
bmRsZSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZGF0YS5jaGFyYWN0ZXJzKCkpLCBk
YXRhLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSwgMCk7CiAgICAgfQogCiAgICAgaWYgKGQtPm1f
Y2FuY2VsbGVkIHx8ICFoYW5kbGUtPmNsaWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBjbGllbnQtPmRpZEZpbmlzaExvYWRpbmcoaGFuZGxlKTsKKyAgICBTb3VwU2Vzc2lvbiog
c2Vzc2lvbiA9IGhhbmRsZS0+ZGVmYXVsdFNlc3Npb24oKTsKKyAgICBHT3duUHRyPEdFcnJvcj4g
ZXJyb3I7CisgICAgZC0+bV9zb3VwUmVxdWVzdCA9IHNvdXBfcmVxdWVzdGVyX3JlcXVlc3QoZC0+
bV9yZXF1ZXN0ZXIuZ2V0KCksIGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSwgc2Vzc2lvbiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBpZiAoZXJyb3Ip
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdJbnB1dFN0cmVhbSogaW4gPSBzb3VwX3Jl
cXVlc3Rfc2VuZChkLT5tX3NvdXBSZXF1ZXN0LmdldCgpLCAwLCAmZXJyb3Iub3V0UHRyKCkpOwor
ICAgIGlmIChlcnJvcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZC0+bV9pbnB1dFN0
cmVhbSA9IGluOworICAgIGQtPm1fYnVmZmVyU2l6ZSA9IEJVRkZFUl9TSVpFOworICAgIGQtPm1f
YnVmZmVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGdfbWFsbG9jKGQtPm1fYnVmZmVyU2l6ZSkpOwor
ICAgIGQtPm1fdG90YWwgPSAwOworCisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+
bV9pbnB1dFN0cmVhbSksICJ3ZWJraXQtcmVzb3VyY2UiLCBoYW5kbGUpOworICAgIGhhbmRsZS0+
cmVmKCk7CisKKyAgICBkLT5tX2NhbmNlbGxhYmxlID0gZ19jYW5jZWxsYWJsZV9uZXcoKTsKKyAg
ICBnX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jKGQtPm1faW5wdXRTdHJlYW0sIGQtPm1fYnVmZmVy
LCBkLT5tX2J1ZmZlclNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BSSU9S
SVRZX0RFRkFVTFQsIGQtPm1fY2FuY2VsbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZWFkQ2FsbGJhY2ssIChpc0Jhc2U2NCkgPyAwIDogR0lOVF9UT19QT0lOVEVSKDEpKTsK
IAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTQ2OSw2ICs0NDAsMTQzIEBAIHN0YXRpYyB2b2lk
IGVuc3VyZVNlc3Npb25Jc0luaXRpYWxpemVkKFNvdXBTZXNzaW9uKiBzZXNzaW9uKQogICAgIGdf
b2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKHNlc3Npb24pLCAid2Via2l0LWluaXQiLCByZWludGVy
cHJldF9jYXN0PHZvaWQqPigweGRlYWRiZWVmKSk7CiB9CiAKK3N0YXRpYyB2b2lkIGNsZWFudXBT
b3VwUmVxdWVzdE9wZXJhdGlvbihSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBib29sIGlzRGVzdHJv
eWluZyA9IGZhbHNlKQoreworICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUt
PmdldEludGVybmFsKCk7CisKKyAgICBpZiAoZC0+bV9zb3VwUmVxdWVzdCkgeworICAgICAgICBn
X29iamVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5tX3NvdXBSZXF1ZXN0LmdldCgpKSwgIndlYmtp
dC1yZXNvdXJjZSIsIDApOworICAgICAgICBkLT5tX3NvdXBSZXF1ZXN0LmNsZWFyKCk7CisgICAg
fQorCisgICAgaWYgKGQtPm1fY2FuY2VsbGFibGUpIHsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYo
ZC0+bV9jYW5jZWxsYWJsZSk7CisgICAgICAgIGQtPm1fY2FuY2VsbGFibGUgPSAwOworICAgIH0K
KworICAgIGlmIChkLT5tX2lucHV0U3RyZWFtKSB7CisgICAgICAgIGdfb2JqZWN0X3NldF9kYXRh
KEdfT0JKRUNUKGQtPm1faW5wdXRTdHJlYW0pLCAid2Via2l0LXJlc291cmNlIiwgMCk7CisgICAg
ICAgIGdfb2JqZWN0X3VucmVmKGQtPm1faW5wdXRTdHJlYW0pOworICAgICAgICBkLT5tX2lucHV0
U3RyZWFtID0gMDsKKyAgICB9CisKKyAgICBpZiAoZC0+bV9idWZmZXIpIHsKKyAgICAgICAgZ19m
cmVlKGQtPm1fYnVmZmVyKTsKKyAgICAgICAgZC0+bV9idWZmZXIgPSAwOworICAgIH0KKworICAg
IGlmICghaXNEZXN0cm95aW5nKQorICAgICAgICBoYW5kbGUtPmRlcmVmKCk7Cit9CisKK3N0YXRp
YyB2b2lkIHNlbmRSZXF1ZXN0Q2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQq
IHJlcywgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBo
YW5kbGUgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGdfb2JqZWN0X2dldF9kYXRhKHNv
dXJjZSwgIndlYmtpdC1yZXNvdXJjZSIpKTsKKyAgICBpZiAoIWhhbmRsZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJu
YWwoKTsKKyAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0gaGFuZGxlLT5jbGllbnQo
KTsKKworICAgIGlmIChkLT5tX2dvdENodW5rSGFuZGxlcikgeworICAgICAgICAvLyBObyBuZWVk
IHRvIGNhbGwgZ290Q2h1bmtIYW5kbGVyIGFueW1vcmUuIFJlY2VpdmVkIGRhdGEgd2lsbAorICAg
ICAgICAvLyBiZSByZXBvcnRlZCBieSByZWFkQ2FsbGJhY2sKKyAgICAgICAgaWYgKGdfc2lnbmFs
X2hhbmRsZXJfaXNfY29ubmVjdGVkKGQtPm1fbXNnLCBkLT5tX2dvdENodW5rSGFuZGxlcikpCisg
ICAgICAgICAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QoZC0+bV9tc2csIGQtPm1fZ290
Q2h1bmtIYW5kbGVyKTsKKyAgICB9CisKKyAgICBpZiAoZC0+bV9jYW5jZWxsZWQgfHwgIWNsaWVu
dCkgeworICAgICAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdldCgpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAg
ICBHSW5wdXRTdHJlYW0qIGluID0gc291cF9yZXF1ZXN0X3NlbmRfZmluaXNoKGQtPm1fc291cFJl
cXVlc3QuZ2V0KCksIHJlcywgJmVycm9yLm91dFB0cigpKTsKKworICAgIGlmIChlcnJvcikgewor
ICAgICAgICBpZiAoZC0+bV9tc2cgJiYgU09VUF9TVEFUVVNfSVNfVFJBTlNQT1JUX0VSUk9SKGQt
Pm1fbXNnLT5zdGF0dXNfY29kZSkpIHsKKyAgICAgICAgICAgIFNvdXBVUkkqIHVyaSA9IHNvdXBf
cmVxdWVzdF9nZXRfdXJpKGQtPm1fc291cFJlcXVlc3QuZ2V0KCkpOworICAgICAgICAgICAgR093
blB0cjxjaGFyPiB1cmlTdHIoc291cF91cmlfdG9fc3RyaW5nKHVyaSwgZmFsc2UpKTsKKyAgICAg
ICAgICAgIFJlc291cmNlRXJyb3IgcmVzb3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0cmluZyhTT1VQ
X0hUVFBfRVJST1IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQt
Pm1fbXNnLT5zdGF0dXNfY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1cmlTdHIuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgU3RyaW5nOjpmcm9tVVRGOChkLT5tX21zZy0+cmVhc29uX3BocmFzZSkpOworICAgICAgICAg
ICAgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAgICAg
ICBjbGllbnQtPmRpZEZhaWwoaGFuZGxlLmdldCgpLCByZXNvdXJjZUVycm9yKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlcnJvci0+ZG9tYWluID09IEdf
SU9fRVJST1IpIHsKKyAgICAgICAgICAgIFNvdXBVUkkqIHVyaSA9IHNvdXBfcmVxdWVzdF9nZXRf
dXJpKGQtPm1fc291cFJlcXVlc3QuZ2V0KCkpOworICAgICAgICAgICAgR093blB0cjxjaGFyPiB1
cmlTdHIoc291cF91cmlfdG9fc3RyaW5nKHVyaSwgZmFsc2UpKTsKKyAgICAgICAgICAgIFJlc291
cmNlRXJyb3IgcmVzb3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0cmluZyhHX0lPX0VSUk9SKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvci0+Y29kZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmlTdHIuZ2V0KCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPyBTdHJpbmc6OmZyb21VVEY4
KGVycm9yLT5tZXNzYWdlKSA6IFN0cmluZygpKTsKKyAgICAgICAgICAgIGNsZWFudXBTb3VwUmVx
dWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOworICAgICAgICAgICAgY2xpZW50LT5kaWRGYWls
KGhhbmRsZS5nZXQoKSwgcmVzb3VyY2VFcnJvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoZC0+bV9tc2cgJiYgZC0+bV9tc2ctPnN0YXR1c19jb2RlID09
IFNPVVBfU1RBVFVTX1VOQVVUSE9SSVpFRCkgeworICAgICAgICAgICAgZmlsbFJlc3BvbnNlRnJv
bU1lc3NhZ2UoZC0+bV9tc2csICZkLT5tX3Jlc3BvbnNlKTsKKyAgICAgICAgICAgIGNsaWVudC0+
ZGlkUmVjZWl2ZVJlc3BvbnNlKGhhbmRsZS5nZXQoKSwgZC0+bV9yZXNwb25zZSk7CisKKyAgICAg
ICAgICAgIC8vIFdlYkNvcmUgbWlnaHQgaGF2ZSBjYW5jZWxsZWQgdGhlIGpvYiBpbiB0aGUgd2hp
bGUKKyAgICAgICAgICAgIGlmIChkLT5tX2NhbmNlbGxlZCkKKyAgICAgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgICAgIGlmIChkLT5tX21zZy0+cmVzcG9uc2VfYm9keS0+ZGF0YSkKKyAg
ICAgICAgICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVEYXRhKGhhbmRsZS5nZXQoKSwgZC0+bV9t
c2ctPnJlc3BvbnNlX2JvZHktPmRhdGEsIGQtPm1fbXNnLT5yZXNwb25zZV9ib2R5LT5sZW5ndGgs
IHRydWUpOworICAgICAgICB9CisKKyAgICAgICAgLy8gZGlkUmVjZWl2ZURhdGEgYWJvdmUgbWln
aHQgaGF2ZSBjYW5jZWxsZWQgaXQKKyAgICAgICAgaWYgKGQtPm1fY2FuY2VsbGVkIHx8ICFjbGll
bnQpIHsKKyAgICAgICAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdldCgp
KTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjbGllbnQtPmRpZEZp
bmlzaExvYWRpbmcoaGFuZGxlLmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChkLT5tX2NhbmNlbGxlZCkgeworICAgICAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRp
b24oaGFuZGxlLmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGQtPm1faW5w
dXRTdHJlYW0gPSBpbjsKKyAgICBkLT5tX2J1ZmZlclNpemUgPSBCVUZGRVJfU0laRTsKKyAgICBk
LT5tX2J1ZmZlciA9IHN0YXRpY19jYXN0PGNoYXIqPihnX21hbGxvYyhkLT5tX2J1ZmZlclNpemUp
KTsKKyAgICBkLT5tX3RvdGFsID0gMDsKKworICAgIC8vIHJlYWRDYWxsYmFjayBuZWVkcyBpdAor
ICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1faW5wdXRTdHJlYW0pLCAid2Via2l0
LXJlc291cmNlIiwgaGFuZGxlLmdldCgpKTsKKworICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYg
aXQncyBhIGZpbGU6IFVSTCBhbmQgaWYgaXQgaXMgYSByZWd1bGFyCisgICAgLy8gZmlsZSBhcyBp
dCBjb3VsZCBiZSBhIGRpcmVjdG9yeS4gSW4gdGhhdCBjYXNlIFNvdXAgcHJvcGVybHkKKyAgICAv
LyByZXR1cm5zIGEgc3RyZWFtIHdob3NlIGNvbnRlbnQgaXMgYSBIVE1MIHdpdGggYSBsaXN0IG9m
IGZpbGVzCisgICAgLy8gaW4gdGhlIGRpcmVjdG9yeQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZShoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnByb3RvY29sKCksICJmaWxlIikKKyAgICAg
ICAgJiYgR19JU19GSUxFX0lOUFVUX1NUUkVBTShpbikpIHsKKyAgICAgICAgUmVzb3VyY2VSZXNw
b25zZSByZXNwb25zZTsKKworICAgICAgICByZXNwb25zZS5zZXRVUkwoaGFuZGxlLT5maXJzdFJl
cXVlc3QoKS51cmwoKSk7CisgICAgICAgIHJlc3BvbnNlLnNldE1pbWVUeXBlKHNvdXBfcmVxdWVz
dF9nZXRfY29udGVudF90eXBlKGQtPm1fc291cFJlcXVlc3QuZ2V0KCkpKTsKKyAgICAgICAgcmVz
cG9uc2Uuc2V0RXhwZWN0ZWRDb250ZW50TGVuZ3RoKHNvdXBfcmVxdWVzdF9nZXRfY29udGVudF9s
ZW5ndGgoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSkpOworICAgICAgICBjbGllbnQtPmRpZFJlY2Vp
dmVSZXNwb25zZShoYW5kbGUuZ2V0KCksIHJlc3BvbnNlKTsKKworICAgICAgICBpZiAoZC0+bV9j
YW5jZWxsZWQpIHsKKyAgICAgICAgICAgIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5k
bGUuZ2V0KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAg
Z19pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyhkLT5tX2lucHV0U3RyZWFtLCBkLT5tX2J1ZmZlciwg
ZC0+bV9idWZmZXJTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QUklPUklU
WV9ERUZBVUxULCBkLT5tX2NhbmNlbGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVhZENhbGxiYWNrLCAwKTsKK30KKwogc3RhdGljIGJvb2wgc3RhcnRIdHRwKFJlc291cmNl
SGFuZGxlKiBoYW5kbGUpCiB7CiAgICAgQVNTRVJUKGhhbmRsZSk7CkBAIC00ODMsNyArNTkxLDE2
IEBAIHN0YXRpYyBib29sIHN0YXJ0SHR0cChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQogICAgIHVy
bC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsKICAgICByZXF1ZXN0LnNldFVSTCh1cmwpOwog
Ci0gICAgZC0+bV9tc2cgPSByZXF1ZXN0LnRvU291cE1lc3NhZ2UoKTsKKyAgICBHT3duUHRyPEdF
cnJvcj4gZXJyb3I7CisgICAgZC0+bV9zb3VwUmVxdWVzdCA9IHNvdXBfcmVxdWVzdGVyX3JlcXVl
c3QoZC0+bV9yZXF1ZXN0ZXIuZ2V0KCksIHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBzZXNz
aW9uLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGlmIChlcnJvcikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9zb3VwUmVxdWVzdC5n
ZXQoKSksICJ3ZWJraXQtcmVzb3VyY2UiLCBoYW5kbGUpOworCisgICAgZC0+bV9tc2cgPSBzb3Vw
X3JlcXVlc3RfaHR0cF9nZXRfbWVzc2FnZShTT1VQX1JFUVVFU1RfSFRUUChkLT5tX3NvdXBSZXF1
ZXN0LmdldCgpKSk7CisgICAgcmVxdWVzdC51cGRhdGVTb3VwTWVzc2FnZShkLT5tX21zZyk7CisK
ICAgICBpZiAoIWQtPm1fbXNnKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTQ5Myw3ICs2
MTAsNyBAQCBzdGF0aWMgYm9vbCBzdGFydEh0dHAoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKICAg
ICBnX3NpZ25hbF9jb25uZWN0KGQtPm1fbXNnLCAicmVzdGFydGVkIiwgR19DQUxMQkFDSyhyZXN0
YXJ0ZWRDYWxsYmFjayksIGhhbmRsZSk7CiAgICAgZ19zaWduYWxfY29ubmVjdChkLT5tX21zZywg
ImdvdC1oZWFkZXJzIiwgR19DQUxMQkFDSyhnb3RIZWFkZXJzQ2FsbGJhY2spLCBoYW5kbGUpOwog
ICAgIGdfc2lnbmFsX2Nvbm5lY3QoZC0+bV9tc2csICJjb250ZW50LXNuaWZmZWQiLCBHX0NBTExC
QUNLKGNvbnRlbnRTbmlmZmVkQ2FsbGJhY2spLCBoYW5kbGUpOwotICAgIGdfc2lnbmFsX2Nvbm5l
Y3QoZC0+bV9tc2csICJnb3QtY2h1bmsiLCBHX0NBTExCQUNLKGdvdENodW5rQ2FsbGJhY2spLCBo
YW5kbGUpOworICAgIGQtPm1fZ290Q2h1bmtIYW5kbGVyID0gZ19zaWduYWxfY29ubmVjdChkLT5t
X21zZywgImdvdC1jaHVuayIsIEdfQ0FMTEJBQ0soZ290Q2h1bmtDYWxsYmFjayksIGhhbmRsZSk7
CiAKICNpZmRlZiBIQVZFX0xJQlNPVVBfMl8yOV85MAogICAgIFN0cmluZyBmaXJzdFBhcnR5U3Ry
aW5nID0gcmVxdWVzdC5maXJzdFBhcnR5Rm9yQ29va2llcygpLnN0cmluZygpOwpAQCAtNTAyLDcg
KzYxOSw2IEBAIHN0YXRpYyBib29sIHN0YXJ0SHR0cChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQog
ICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X2ZpcnN0X3BhcnR5KGQtPm1fbXNnLCBmaXJzdFBhcnR5
LmdldCgpKTsKICAgICB9CiAjZW5kaWYKLSAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChk
LT5tX21zZyksICJyZXNvdXJjZUhhbmRsZSIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGhhbmRs
ZSkpOwogCiAgICAgRm9ybURhdGEqIGh0dHBCb2R5ID0gZC0+bV9maXJzdFJlcXVlc3QuaHR0cEJv
ZHkoKTsKICAgICBpZiAoaHR0cEJvZHkgJiYgIWh0dHBCb2R5LT5pc0VtcHR5KCkpIHsKQEAgLTUz
MiwxMiArNjQ4LDExIEBAIHN0YXRpYyBib29sIHN0YXJ0SHR0cChSZXNvdXJjZUhhbmRsZSogaGFu
ZGxlKQogICAgICAgICAgICAgICAgICAgICAgKiBtYXBwaW5nIGZvciB1cGxvYWRlZCBmaWxlcyBj
b2RlIGluc3BpcmVkIGJ5IHRlY2huaXF1ZSB1c2VkIGluCiAgICAgICAgICAgICAgICAgICAgICAq
IGxpYnNvdXAncyBzaW1wbGUtaHR0cGQgdGVzdAogICAgICAgICAgICAgICAgICAgICAgKi8KLSAg
ICAgICAgICAgICAgICAgICAgR0Vycm9yKiBlcnJvciA9IDA7CisgICAgICAgICAgICAgICAgICAg
IEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKICAgICAgICAgICAgICAgICAgICAgQ1N0cmluZyBmaWxl
TmFtZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihlbGVtZW50Lm1fZmlsZW5hbWUpOwotICAg
ICAgICAgICAgICAgICAgICBHTWFwcGVkRmlsZSogZmlsZU1hcHBpbmcgPSBnX21hcHBlZF9maWxl
X25ldyhmaWxlTmFtZS5kYXRhKCksIGZhbHNlLCAmZXJyb3IpOworICAgICAgICAgICAgICAgICAg
ICBHTWFwcGVkRmlsZSogZmlsZU1hcHBpbmcgPSBnX21hcHBlZF9maWxlX25ldyhmaWxlTmFtZS5k
YXRhKCksIGZhbHNlLCAmZXJyb3Iub3V0UHRyKCkpOwogCiAgICAgICAgICAgICAgICAgICAgIGlm
IChlcnJvcikgewotICAgICAgICAgICAgICAgICAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0
Y2hlZChkLT5tX21zZywgR19TSUdOQUxfTUFUQ0hfREFUQSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCBoYW5k
bGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgZ19vYmplY3RfdW5yZWYoZC0+bV9tc2cpOwpA
QCAtNTY5LDExICs2ODQsOSBAQCBzdGF0aWMgYm9vbCBzdGFydEh0dHAoUmVzb3VyY2VIYW5kbGUq
IGhhbmRsZSkKICAgICBpZiAoIXNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9vbmUoZC0+bV9tc2ct
PnJlcXVlc3RfaGVhZGVycywgIkFjY2VwdCIpKQogICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVy
c19hcHBlbmQoZC0+bV9tc2ctPnJlcXVlc3RfaGVhZGVycywgIkFjY2VwdCIsICIqLyoiKTsKIAot
ICAgIC8vIEJhbGFuY2VkIGluIFJlc291cmNlSGFuZGxlSW50ZXJuYWwncyBkZXN0cnVjdG9yOyB3
ZSBuZWVkIHRvCi0gICAgLy8ga2VlcCBvdXIgb3duIHJlZiwgYmVjYXVzZSBhZnRlciBxdWV1ZWlu
ZyB0aGUgbWVzc2FnZSwgdGhlCi0gICAgLy8gc2Vzc2lvbiBvd25zIHRoZSBpbml0aWFsIHJlZmVy
ZW5jZS4KLSAgICBnX29iamVjdF9yZWYoZC0+bV9tc2cpOwotICAgIHNvdXBfc2Vzc2lvbl9xdWV1
ZV9tZXNzYWdlKHNlc3Npb24sIGQtPm1fbXNnLCBmaW5pc2hlZENhbGxiYWNrLCBoYW5kbGUpOwor
ICAgIGQtPm1fY2FuY2VsbGFibGUgPSBnX2NhbmNlbGxhYmxlX25ldygpOworICAgIHNvdXBfcmVx
dWVzdF9zZW5kX2FzeW5jKGQtPm1fc291cFJlcXVlc3QuZ2V0KCksIGQtPm1fY2FuY2VsbGFibGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZFJlcXVlc3RDYWxsYmFjaywgMCk7CiAK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTY2NywzOCArNzgwLDYgQEAgdm9pZCBSZXNvdXJjZUhh
bmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QsIFMKICAgICBzeW5jTG9hZGVyLnJ1bigpOwogfQogCi0vLyBHSU8tYmFzZWQgbG9hZGVy
Ci0KLXN0YXRpYyB2b2lkIGNsZWFudXBHaW9PcGVyYXRpb24oUmVzb3VyY2VIYW5kbGUqIGhhbmRs
ZSwgYm9vbCBpc0Rlc3Ryb3lpbmcgPSBmYWxzZSkKLXsKLSAgICBSZXNvdXJjZUhhbmRsZUludGVy
bmFsKiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOwotCi0gICAgaWYgKGQtPm1fZ2ZpbGUpIHsK
LSAgICAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9nZmlsZSksICJ3ZWJraXQt
cmVzb3VyY2UiLCAwKTsKLSAgICAgICAgZ19vYmplY3RfdW5yZWYoZC0+bV9nZmlsZSk7Ci0gICAg
ICAgIGQtPm1fZ2ZpbGUgPSAwOwotICAgIH0KLQotICAgIGlmIChkLT5tX2NhbmNlbGxhYmxlKSB7
Ci0gICAgICAgIGdfb2JqZWN0X3VucmVmKGQtPm1fY2FuY2VsbGFibGUpOwotICAgICAgICBkLT5t
X2NhbmNlbGxhYmxlID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoZC0+bV9pbnB1dFN0cmVhbSkgewot
ICAgICAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5tX2lucHV0U3RyZWFtKSwgIndl
YmtpdC1yZXNvdXJjZSIsIDApOwotICAgICAgICBnX29iamVjdF91bnJlZihkLT5tX2lucHV0U3Ry
ZWFtKTsKLSAgICAgICAgZC0+bV9pbnB1dFN0cmVhbSA9IDA7Ci0gICAgfQotCi0gICAgaWYgKGQt
Pm1fYnVmZmVyKSB7Ci0gICAgICAgIGdfZnJlZShkLT5tX2J1ZmZlcik7Ci0gICAgICAgIGQtPm1f
YnVmZmVyID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoIWlzRGVzdHJveWluZykKLSAgICAgICAgaGFu
ZGxlLT5kZXJlZigpOwotfQotCiBzdGF0aWMgdm9pZCBjbG9zZUNhbGxiYWNrKEdPYmplY3QqIHNv
dXJjZSwgR0FzeW5jUmVzdWx0KiByZXMsIGdwb2ludGVyKQogewogICAgIFJlZlB0cjxSZXNvdXJj
ZUhhbmRsZT4gaGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihnX29iamVjdF9n
ZXRfZGF0YShzb3VyY2UsICJ3ZWJraXQtcmVzb3VyY2UiKSk7CkBAIC03MDksNyArNzkwLDcgQEAg
c3RhdGljIHZvaWQgY2xvc2VDYWxsYmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCog
cmVzLCBncG9pbnRlcikKICAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0gaGFuZGxl
LT5jbGllbnQoKTsKIAogICAgIGdfaW5wdXRfc3RyZWFtX2Nsb3NlX2ZpbmlzaChkLT5tX2lucHV0
U3RyZWFtLCByZXMsIDApOwotICAgIGNsZWFudXBHaW9PcGVyYXRpb24oaGFuZGxlLmdldCgpKTsK
KyAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKIAogICAgIC8v
IFRoZSBsb2FkIG1heSBoYXZlIGJlZW4gY2FuY2VsbGVkLCB0aGUgY2xpZW50IG1heSBoYXZlIGJl
ZW4KICAgICAvLyBkZXN0cm95ZWQgYWxyZWFkeS4gSW4gc3VjaCBjYXNlcyBjYWxsaW5nIGRpZEZp
bmlzaExvYWRpbmcgaXMgYQpAQCAtNzIwLDMyICs4MDEsMzIgQEAgc3RhdGljIHZvaWQgY2xvc2VD
YWxsYmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzLCBncG9pbnRlcikKICAg
ICBjbGllbnQtPmRpZEZpbmlzaExvYWRpbmcoaGFuZGxlLmdldCgpKTsKIH0KIAotc3RhdGljIHZv
aWQgcmVhZENhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXMsIGdwb2lu
dGVyKQorc3RhdGljIHZvaWQgcmVhZENhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVz
dWx0KiByZXMsIGdwb2ludGVyIGRhdGEpCiB7CiAgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBo
YW5kbGUgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGdfb2JqZWN0X2dldF9kYXRhKHNv
dXJjZSwgIndlYmtpdC1yZXNvdXJjZSIpKTsKICAgICBpZiAoIWhhbmRsZSkKICAgICAgICAgcmV0
dXJuOwogCisgICAgYm9vbCBjb252ZXJ0VG9VVEYxNiA9IHN0YXRpY19jYXN0PGJvb2w+KGRhdGEp
OwogICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFsKCk7
CiAgICAgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCA9IGhhbmRsZS0+Y2xpZW50KCk7CiAK
ICAgICBpZiAoZC0+bV9jYW5jZWxsZWQgfHwgIWNsaWVudCkgewotICAgICAgICBjbGVhbnVwR2lv
T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAgIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJh
dGlvbihoYW5kbGUuZ2V0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgR0Vycm9y
KiBlcnJvciA9IDA7CisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOwogCi0gICAgZ3NzaXplIGJ5
dGVzUmVhZCA9IGdfaW5wdXRfc3RyZWFtX3JlYWRfZmluaXNoKGQtPm1faW5wdXRTdHJlYW0sIHJl
cywgJmVycm9yKTsKKyAgICBnc3NpemUgYnl0ZXNSZWFkID0gZ19pbnB1dF9zdHJlYW1fcmVhZF9m
aW5pc2goZC0+bV9pbnB1dFN0cmVhbSwgcmVzLCAmZXJyb3Iub3V0UHRyKCkpOwogICAgIGlmIChl
cnJvcikgewotICAgICAgICBjaGFyKiB1cmkgPSBnX2ZpbGVfZ2V0X3VyaShkLT5tX2dmaWxlKTsK
KyAgICAgICAgU291cFVSSSogdXJpID0gc291cF9yZXF1ZXN0X2dldF91cmkoZC0+bV9zb3VwUmVx
dWVzdC5nZXQoKSk7CisgICAgICAgIEdPd25QdHI8Y2hhcj4gdXJpU3RyKHNvdXBfdXJpX3RvX3N0
cmluZyh1cmksIGZhbHNlKSk7CiAgICAgICAgIFJlc291cmNlRXJyb3IgcmVzb3VyY2VFcnJvcihn
X3F1YXJrX3RvX3N0cmluZyhHX0lPX0VSUk9SKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVycm9yLT5jb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpU3RyLmdldCgp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPyBTdHJpbmc6OmZy
b21VVEY4KGVycm9yLT5tZXNzYWdlKSA6IFN0cmluZygpKTsKLSAgICAgICAgZ19mcmVlKHVyaSk7
Ci0gICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7Ci0gICAgICAgIGNsZWFudXBHaW9PcGVyYXRp
b24oaGFuZGxlLmdldCgpKTsKKyAgICAgICAgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKGhh
bmRsZS5nZXQoKSk7CiAgICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIHJlc291
cmNlRXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNzU3LDE0MSArODM4LDM2IEBA
IHN0YXRpYyB2b2lkIHJlYWRDYWxsYmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCog
cmVzLCBncG9pbnRlcikKICAgICB9CiAKICAgICBkLT5tX3RvdGFsICs9IGJ5dGVzUmVhZDsKLSAg
ICBjbGllbnQtPmRpZFJlY2VpdmVEYXRhKGhhbmRsZS5nZXQoKSwgZC0+bV9idWZmZXIsIGJ5dGVz
UmVhZCwgZC0+bV90b3RhbCk7Ci0KLSAgICAvLyBkaWRSZWNlaXZlRGF0YSBtYXkgY2FuY2VsIHRo
ZSBsb2FkLCB3aGljaCBtYXkgcmVsZWFzZSB0aGUgbGFzdCByZWZlcmVuY2UuCi0gICAgaWYgKGQt
Pm1fY2FuY2VsbGVkKSB7Ci0gICAgICAgIGNsZWFudXBHaW9PcGVyYXRpb24oaGFuZGxlLmdldCgp
KTsKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChHX0xJS0VMWSghY29udmVydFRvVVRGMTYpKQor
ICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVEYXRhKGhhbmRsZS5nZXQoKSwgZC0+bV9idWZmZXIs
IGJ5dGVzUmVhZCwgZC0+bV90b3RhbCk7CisgICAgZWxzZSB7CisgICAgICAgIC8vIFdlIGhhdmUg
dG8gY29udmVydCBpdCB0byBVVEYtMTYgZHVlIHRvIGxpbWl0YXRpb25zIGluIEtVUkwKKyAgICAg
ICAgR093blB0cjxndW5pY2hhcjI+IHVuaWNvZGVTdHIoZ191dGY4X3RvX3V0ZjE2KGQtPm1fYnVm
ZmVyLCBieXRlc1JlYWQsIDAsIDAsIDApKTsKKyAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0
YShoYW5kbGUuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHVuaWNvZGVTdHIu
Z2V0KCkpLCBnX3V0Zjhfc3RybGVuKGQtPm1fYnVmZmVyLCBieXRlc1JlYWQpICogc2l6ZW9mKFVD
aGFyKSwgMCk7CiAgICAgfQogCi0gICAgZ19pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyhkLT5tX2lu
cHV0U3RyZWFtLCBkLT5tX2J1ZmZlciwgZC0+bV9idWZmZXJTaXplLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR19QUklPUklUWV9ERUZBVUxULCBkLT5tX2NhbmNlbGxhYmxlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZENhbGxiYWNrLCAwKTsKLX0KLQotc3RhdGlj
IHZvaWQgb3BlbkNhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXMsIGdw
b2ludGVyKQotewotICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gc3RhdGljX2Nh
c3Q8UmVzb3VyY2VIYW5kbGUqPihnX29iamVjdF9nZXRfZGF0YShzb3VyY2UsICJ3ZWJraXQtcmVz
b3VyY2UiKSk7Ci0gICAgaWYgKCFoYW5kbGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlc291
cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFsKCk7Ci0gICAgUmVzb3Vy
Y2VIYW5kbGVDbGllbnQqIGNsaWVudCA9IGhhbmRsZS0+Y2xpZW50KCk7Ci0KKyAgICAvLyBkaWRS
ZWNlaXZlRGF0YSBtYXkgY2FuY2VsIHRoZSBsb2FkLCB3aGljaCBtYXkgcmVsZWFzZSB0aGUgbGFz
dCByZWZlcmVuY2UuCiAgICAgaWYgKGQtPm1fY2FuY2VsbGVkIHx8ICFjbGllbnQpIHsKLSAgICAg
ICAgY2xlYW51cEdpb09wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgR0Vycm9yKiBlcnJvciA9IDA7Ci0gICAgR0ZpbGVJbnB1dFN0cmVhbSogaW4g
PSBnX2ZpbGVfcmVhZF9maW5pc2goR19GSUxFKHNvdXJjZSksIHJlcywgJmVycm9yKTsKLSAgICBp
ZiAoZXJyb3IpIHsKLSAgICAgICAgY2hhciogdXJpID0gZ19maWxlX2dldF91cmkoZC0+bV9nZmls
ZSk7Ci0gICAgICAgIFJlc291cmNlRXJyb3IgcmVzb3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0cmlu
ZyhHX0lPX0VSUk9SKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9y
LT5jb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPyBTdHJpbmc6OmZyb21VVEY4KGVy
cm9yLT5tZXNzYWdlKSA6IFN0cmluZygpKTsKLSAgICAgICAgZ19mcmVlKHVyaSk7Ci0gICAgICAg
IGdfZXJyb3JfZnJlZShlcnJvcik7Ci0gICAgICAgIGNsZWFudXBHaW9PcGVyYXRpb24oaGFuZGxl
LmdldCgpKTsKLSAgICAgICAgY2xpZW50LT5kaWRGYWlsKGhhbmRsZS5nZXQoKSwgcmVzb3VyY2VF
cnJvcik7CisgICAgICAgIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZC0+bV9pbnB1dFN0cmVhbSA9IEdfSU5Q
VVRfU1RSRUFNKGluKTsKLSAgICBkLT5tX2J1ZmZlclNpemUgPSA4MTkyOwotICAgIGQtPm1fYnVm
ZmVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGdfbWFsbG9jKGQtPm1fYnVmZmVyU2l6ZSkpOwotICAg
IGQtPm1fdG90YWwgPSAwOwotCi0gICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9p
bnB1dFN0cmVhbSksICJ3ZWJraXQtcmVzb3VyY2UiLCBoYW5kbGUuZ2V0KCkpOwogICAgIGdfaW5w
dXRfc3RyZWFtX3JlYWRfYXN5bmMoZC0+bV9pbnB1dFN0cmVhbSwgZC0+bV9idWZmZXIsIGQtPm1f
YnVmZmVyU2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUFJJT1JJVFlfREVG
QVVMVCwgZC0+bV9jYW5jZWxsYWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
YWRDYWxsYmFjaywgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkQ2FsbGJh
Y2ssIGRhdGEpOwogfQogCi1zdGF0aWMgdm9pZCBxdWVyeUluZm9DYWxsYmFjayhHT2JqZWN0KiBz
b3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzLCBncG9pbnRlcikKLXsKLSAgICBSZWZQdHI8UmVzb3Vy
Y2VIYW5kbGU+IGhhbmRsZSA9IHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxlKj4oZ19vYmplY3Rf
Z2V0X2RhdGEoc291cmNlLCAid2Via2l0LXJlc291cmNlIikpOwotICAgIGlmICghaGFuZGxlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0gaGFuZGxl
LT5nZXRJbnRlcm5hbCgpOwotICAgIFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQgPSBoYW5k
bGUtPmNsaWVudCgpOwotCi0gICAgaWYgKGQtPm1fY2FuY2VsbGVkKSB7Ci0gICAgICAgIGNsZWFu
dXBHaW9PcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7Ci0KLSAgICBjaGFyKiB1cmkgPSBnX2ZpbGVf
Z2V0X3VyaShkLT5tX2dmaWxlKTsKLSAgICByZXNwb25zZS5zZXRVUkwoS1VSTChLVVJMKCksIHVy
aSkpOwotICAgIGdfZnJlZSh1cmkpOwotCi0gICAgR0Vycm9yKiBlcnJvciA9IDA7Ci0gICAgR0Zp
bGVJbmZvKiBpbmZvID0gZ19maWxlX3F1ZXJ5X2luZm9fZmluaXNoKGQtPm1fZ2ZpbGUsIHJlcywg
JmVycm9yKTsKLQotICAgIGlmIChlcnJvcikgewotICAgICAgICAvLyBGSVhNRTogdG8gYmUgYWJs
ZSB0byBoYW5kbGUgZnRwIFVSSXMgcHJvcGVybHksIHdlIG11c3QKLSAgICAgICAgLy8gY2hlY2sg
aWYgdGhlIGVycm9yIGlzIEdfSU9fRVJST1JfTk9UX01PVU5URUQsIGFuZCBpZiBzbywKLSAgICAg
ICAgLy8gY2FsbCBnX2ZpbGVfbW91bnRfZW5jbG9zaW5nX3ZvbHVtZSgpIHRvIG1vdW50IHRoZSBm
dHAKLSAgICAgICAgLy8gc2VydmVyIChhbmQgdGhlbiBrZWVwIHRyYWNrIG9mIHRoZSBmYWN0IHRo
YXQgd2UgbW91bnRlZCBpdCwKLSAgICAgICAgLy8gYW5kIHNldCBhIHRpbWVvdXQgdG8gdW5tb3Vu
dCBpdCBsYXRlciBhZnRlciBpdCdzIGJlZW4gaWRsZQotICAgICAgICAvLyBmb3IgYSB3aGlsZSku
Ci0gICAgICAgIGNoYXIqIHVyaSA9IGdfZmlsZV9nZXRfdXJpKGQtPm1fZ2ZpbGUpOwotICAgICAg
ICBSZXNvdXJjZUVycm9yIHJlc291cmNlRXJyb3IoZ19xdWFya190b19zdHJpbmcoR19JT19FUlJP
UiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvci0+Y29kZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVycm9yID8gU3RyaW5nOjpmcm9tVVRGOChlcnJvci0+bWVzc2Fn
ZSkgOiBTdHJpbmcoKSk7Ci0gICAgICAgIGdfZnJlZSh1cmkpOwotICAgICAgICBnX2Vycm9yX2Zy
ZWUoZXJyb3IpOwotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7Ci0g
ICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIHJlc291cmNlRXJyb3IpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGdfZmlsZV9pbmZvX2dldF9maWxlX3R5cGUo
aW5mbykgIT0gR19GSUxFX1RZUEVfUkVHVUxBUikgewotICAgICAgICAvLyBGSVhNRTogd2hhdCBp
ZiB0aGUgVVJJIHBvaW50cyB0byBhIGRpcmVjdG9yeT8gU2hvdWxkIHdlCi0gICAgICAgIC8vIGdl
bmVyYXRlIGEgbGlzdGluZz8gSG93PyBXaGF0IGRvIG90aGVyIGJhY2tlbmRzIGRvIGhlcmU/Ci0g
ICAgICAgIGNoYXIqIHVyaSA9IGdfZmlsZV9nZXRfdXJpKGQtPm1fZ2ZpbGUpOwotICAgICAgICBS
ZXNvdXJjZUVycm9yIHJlc291cmNlRXJyb3IoZ19xdWFya190b19zdHJpbmcoR19JT19FUlJPUiks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX0lPX0VSUk9SX0ZBSUxFRCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFN0cmluZygpKTsKLSAgICAgICAgZ19mcmVlKHVyaSk7Ci0g
ICAgICAgIGNsZWFudXBHaW9PcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKLSAgICAgICAgY2xpZW50
LT5kaWRGYWlsKGhhbmRsZS5nZXQoKSwgcmVzb3VyY2VFcnJvcik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICByZXNwb25zZS5zZXRNaW1lVHlwZShnX2ZpbGVfaW5mb19nZXRfY29udGVu
dF90eXBlKGluZm8pKTsKLSAgICByZXNwb25zZS5zZXRFeHBlY3RlZENvbnRlbnRMZW5ndGgoZ19m
aWxlX2luZm9fZ2V0X3NpemUoaW5mbykpOwotCi0gICAgR1RpbWVWYWwgdHY7Ci0gICAgZ19maWxl
X2luZm9fZ2V0X21vZGlmaWNhdGlvbl90aW1lKGluZm8sICZ0dik7Ci0gICAgcmVzcG9uc2Uuc2V0
TGFzdE1vZGlmaWVkRGF0ZSh0di50dl9zZWMpOwotCi0gICAgY2xpZW50LT5kaWRSZWNlaXZlUmVz
cG9uc2UoaGFuZGxlLmdldCgpLCByZXNwb25zZSk7Ci0KLSAgICBpZiAoZC0+bV9jYW5jZWxsZWQp
IHsKLSAgICAgICAgY2xlYW51cEdpb09wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgZ19maWxlX3JlYWRfYXN5bmMoZC0+bV9nZmlsZSwgR19QUklP
UklUWV9ERUZBVUxULCBkLT5tX2NhbmNlbGxhYmxlLAotICAgICAgICAgICAgICAgICAgICAgIG9w
ZW5DYWxsYmFjaywgMCk7Ci19CiBzdGF0aWMgYm9vbCBzdGFydEdpbyhSZXNvdXJjZUhhbmRsZSog
aGFuZGxlLCBLVVJMIHVybCkKIHsKICAgICBBU1NFUlQoaGFuZGxlKTsKIAotICAgIFJlc291cmNl
SGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFsKCk7Ci0KICAgICBpZiAoaGFu
ZGxlLT5maXJzdFJlcXVlc3QoKS5odHRwTWV0aG9kKCkgIT0gIkdFVCIgJiYgaGFuZGxlLT5maXJz
dFJlcXVlc3QoKS5odHRwTWV0aG9kKCkgIT0gIlBPU1QiKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKKyAgICBHT3duUHRyPGNoYXI+IHVybFN0cjsKKyAgICBTb3VwU2Vzc2lvbiogc2Vzc2lvbiA9
IGhhbmRsZS0+ZGVmYXVsdFNlc3Npb24oKTsKKyAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBk
ID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOworCiAgICAgLy8gR0lPIGRvZXNuJ3Qga25vdyBob3cg
dG8gaGFuZGxlIHJlZnMgYW5kIHF1ZXJpZXMsIHNvIHJlbW92ZSB0aGVtCiAgICAgLy8gVE9ETzog
dXNlIEtVUkwuZmlsZVN5c3RlbVBhdGggYWZ0ZXIgS1VSTEd0ayBhbmQgRmlsZVN5c3RlbUd0ayBh
cmUKICAgICAvLyB1c2luZyBHSU8gaW50ZXJuYWxseSwgYW5kIHByb3ZpZGluZyBVUklzIGluc3Rl
YWQgb2YgZmlsZSBwYXRocwpAQCAtOTA0LDIzICs4ODAsMjUgQEAgc3RhdGljIGJvb2wgc3RhcnRH
aW8oUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgS1VSTCB1cmwpCiAgICAgLy8gZ19maWxlbmFtZV9m
cm9tX3VyaSAodXNlZCBpbnRlcm5hbGx5IGJ5IEdGaWxlKSBoYXMgcHJvYmxlbXMKICAgICAvLyBk
ZWNvZGluZyBzdHJpbmdzIHdpdGggYXJiaXRyYXJ5IHBlcmNlbnQgc2lnbnMKICAgICBpZiAodXJs
LmlzTG9jYWxGaWxlKCkpCi0gICAgICAgIGQtPm1fZ2ZpbGUgPSBnX2ZpbGVfbmV3X2Zvcl9wYXRo
KHVybC5wcmV0dHlVUkwoKS51dGY4KCkuZGF0YSgpICsgc2l6ZW9mKCJmaWxlOi8vIikgLSAxKTsK
KyAgICAgICAgdXJsU3RyLnNldChnX3N0cmR1cCh1cmwucHJldHR5VVJMKCkudXRmOCgpLmRhdGEo
KSkpOwogICAgIGVsc2UKICNlbmRpZgotICAgICAgICBkLT5tX2dmaWxlID0gZ19maWxlX25ld19m
b3JfdXJpKHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBnX29iamVjdF9zZXRfZGF0
YShHX09CSkVDVChkLT5tX2dmaWxlKSwgIndlYmtpdC1yZXNvdXJjZSIsIGhhbmRsZSk7CisgICAg
ICAgIHVybFN0ci5zZXQoZ19zdHJkdXAodXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpKTsKIAot
ICAgIC8vIGJhbGFuY2VkIGJ5IGEgZGVyZWYoKSBpbiBjbGVhbnVwR2lvT3BlcmF0aW9uLCB3aGlj
aCBzaG91bGQgYWx3YXlzIHJ1bgorICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBkLT5t
X3NvdXBSZXF1ZXN0ID0gc291cF9yZXF1ZXN0ZXJfcmVxdWVzdChkLT5tX3JlcXVlc3Rlci5nZXQo
KSwgdXJsU3RyLmdldCgpLCBzZXNzaW9uLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGlmIChlcnJv
cikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpF
Q1QoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSksICJ3ZWJraXQtcmVzb3VyY2UiLCBoYW5kbGUpOwor
CisgICAgLy8gYmFsYW5jZWQgYnkgYSBkZXJlZigpIGluIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJh
dGlvbiwgd2hpY2ggc2hvdWxkIGFsd2F5cyBydW4KICAgICBoYW5kbGUtPnJlZigpOwogCiAgICAg
ZC0+bV9jYW5jZWxsYWJsZSA9IGdfY2FuY2VsbGFibGVfbmV3KCk7Ci0gICAgZ19maWxlX3F1ZXJ5
X2luZm9fYXN5bmMoZC0+bV9nZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX0ZJ
TEVfQVRUUklCVVRFX1NUQU5EQVJEX1RZUEUgIiwiCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9DT05URU5UX1RZUEUgIiwiCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9TSVpFLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdfRklMRV9RVUVSWV9JTkZPX05PTkUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR19QUklPUklUWV9ERUZBVUxULCBkLT5tX2NhbmNlbGxhYmxlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5SW5mb0NhbGxiYWNrLCAwKTsKKyAgICBz
b3VwX3JlcXVlc3Rfc2VuZF9hc3luYyhkLT5tX3NvdXBSZXF1ZXN0LmdldCgpLCBkLT5tX2NhbmNl
bGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRSZXF1ZXN0Q2FsbGJhY2ss
IDApOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0LmgKaW5kZXggYTFkOTE2Zi4uYzFjNzExNiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0LmgKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0LmgKQEAgLTY3
LDYgKzY3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgdXBkYXRlRnJvbVNv
dXBNZXNzYWdlKHNvdXBNZXNzYWdlKTsKICAgICAgICAgfQogCisgICAgICAgIHZvaWQgdXBkYXRl
U291cE1lc3NhZ2UoU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlKSBjb25zdDsKICAgICAgICAgU291
cE1lc3NhZ2UqIHRvU291cE1lc3NhZ2UoKSBjb25zdDsKICAgICAgICAgdm9pZCB1cGRhdGVGcm9t
U291cE1lc3NhZ2UoU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlKTsKIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHAgYi9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcAppbmRleCA2
MmRlYjAxLi4zODBmYzg0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcApAQCAtMzMsNiArMzMsMjkgQEAgdXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit2b2lkIFJlc291cmNlUmVxdWVz
dDo6dXBkYXRlU291cE1lc3NhZ2UoU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlKSBjb25zdAorewor
ICAgIGdfb2JqZWN0X3NldChzb3VwTWVzc2FnZSwgU09VUF9NRVNTQUdFX01FVEhPRCwgaHR0cE1l
dGhvZCgpLnV0ZjgoKS5kYXRhKCksIE5VTEwpOworCisgICAgY29uc3QgSFRUUEhlYWRlck1hcCYg
aGVhZGVycyA9IGh0dHBIZWFkZXJGaWVsZHMoKTsKKyAgICBTb3VwTWVzc2FnZUhlYWRlcnMqIHNv
dXBIZWFkZXJzID0gc291cE1lc3NhZ2UtPnJlcXVlc3RfaGVhZGVyczsKKyAgICBpZiAoIWhlYWRl
cnMuaXNFbXB0eSgpKSB7CisgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IGhlYWRlcnMuZW5kKCk7CisgICAgICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBoZWFkZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAg
IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChzb3VwSGVhZGVycywgaXQtPmZpcnN0LnN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCksIGl0LT5zZWNvbmQudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCisj
aWZkZWYgSEFWRV9MSUJTT1VQXzJfMjlfOTAKKyAgICBTdHJpbmcgZmlyc3RQYXJ0eVN0cmluZyA9
IGZpcnN0UGFydHlGb3JDb29raWVzKCkuc3RyaW5nKCk7CisgICAgaWYgKCFmaXJzdFBhcnR5U3Ry
aW5nLmlzRW1wdHkoKSkgeworICAgICAgICBHT3duUHRyPFNvdXBVUkk+IGZpcnN0UGFydHkoc291
cF91cmlfbmV3KGZpcnN0UGFydHlTdHJpbmcudXRmOCgpLmRhdGEoKSkpOworICAgICAgICBzb3Vw
X21lc3NhZ2Vfc2V0X2ZpcnN0X3BhcnR5KHNvdXBNZXNzYWdlLCBmaXJzdFBhcnR5LmdldCgpKTsK
KyAgICB9CisjZW5kaWYKKworICAgIHNvdXBfbWVzc2FnZV9zZXRfZmxhZ3Moc291cE1lc3NhZ2Us
IG1fc291cEZsYWdzKTsKK30KKwogU291cE1lc3NhZ2UqIFJlc291cmNlUmVxdWVzdDo6dG9Tb3Vw
TWVzc2FnZSgpIGNvbnN0CiB7CiAgICAgU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlID0gc291cF9t
ZXNzYWdlX25ldyhodHRwTWV0aG9kKCkudXRmOCgpLmRhdGEoKSwgdXJsKCkuc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSk7Ci0tIAoxLjcuMQoK
</data>
<flag name="review"
          id="55123"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66191</attachid>
            <date>2010-09-01 03:38:22 -0700</date>
            <delta_ts>2010-09-22 01:51:14 -0700</delta_ts>
            <desc>Added fast/encoding/percent-escaping.html to the list of Skipped</desc>
            <filename>0003-Added-fast-encoding-percent-escaping.html-to-the-lis.patch</filename>
            <type>text/plain</type>
            <size>1626</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">RnJvbSAyOGM1YmE0MWI4MjU5OTFjYmRkMDY4ODZkMmZiZjJmZGNmNmM1NDQ4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTZXJnaW8gVmlsbGFyIFNlbmluIDxzdmlsbGFyQGlnYWxpYS5j
b20+CkRhdGU6IFdlZCwgMSBTZXAgMjAxMCAxMTo0MzoxMyArMDIwMApTdWJqZWN0OiBbUEFUQ0gg
My8zXSBBZGRlZCBmYXN0L2VuY29kaW5nL3BlcmNlbnQtZXNjYXBpbmcuaHRtbCB0byB0aGUgbGlz
dCBvZiBTa2lwcGVkIHRlc3RzCgotLS0KIExheW91dFRlc3RzL0NoYW5nZUxvZyAgICAgICAgICAg
IHwgICAxMCArKysrKysrKysrCiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZCB8ICAg
IDQgKysrKwogMiBmaWxlcyBjaGFuZ2VkLCAxNCBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygt
KQoKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwppbmRleCA0OTdhMTE2Li5iN2I5YmMxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAt
MDktMDEgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gQWRkIEhUVFAg
Y2FjaGluZyBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00NDI2MQorCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1NraXBwZWQ6IGFkZGVkIGZh
c3QvZW5jb2RpbmcvcGVyY2VudC1lc2NhcGluZy5odG1sCisgICAgICAgIHRvIHRoZSBsaXN0IG9m
IFNraXBwZWQgdGVzdHMKKwogMjAxMC0wOC0yNSAgWmhlbnlhbyBNbyAgPHptb0Bnb29nbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUnVzc2VsbC4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3Rr
L1NraXBwZWQKaW5kZXggNmM1OGE5Yi4uMTVlMzZkOCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vZ3RrL1NraXBwZWQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBw
ZWQKQEAgLTExMzMsNiArMTEzMywxMCBAQCBmYXN0L2VuY29kaW5nL2NoYXItZGVjb2RpbmctbWFj
Lmh0bWwKIGZhc3QvZW5jb2RpbmcvY2hhci1kZWNvZGluZy5odG1sCiBmYXN0L2VuY29kaW5nL2lk
bi1zZWN1cml0eS5odG1sCiBmYXN0L2VuY29kaW5nL21haWx0by1hbHdheXMtdXRmLTguaHRtbAor
CisjIERvZXMgbm90IHdvcmsgc2luY2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ0MjYxLiBOZWVkcyBhIHNtYWxsIGNoYW5nZSBpbiBsaWJzb3VwCitmYXN0L2VuY29k
aW5nL3BlcmNlbnQtZXNjYXBpbmcuaHRtbAorCiBmYXN0L2V2ZW50cy9hdHRlbXB0LXNjcm9sbC13
aXRoLW5vLXNjcm9sbGJhcnMuaHRtbAogZmFzdC9ldmVudHMvYXV0b3Njcm9sbC1pbi10ZXh0Zmll
bGQuaHRtbAogZmFzdC9ldmVudHMvYXV0b3Njcm9sbC1ub25zY3JvbGxhYmxlLWlmcmFtZS1pbi1z
Y3JvbGxhYmxlLWRpdi5odG1sCi0tIAoxLjcuMQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66650</attachid>
            <date>2010-09-06 09:07:28 -0700</date>
            <delta_ts>2010-09-10 15:59:53 -0700</delta_ts>
            <desc>Imported SoupURILoader to Webkit. New public API for HTTP cache</desc>
            <filename>0001-Imported-SoupURILoader-to-Webkit.-New-public-API-for.patch</filename>
            <type>text/plain</type>
            <size>168034</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">RnJvbSA4M2FkMmZhMWNlYWVjZGU1YjFkMGM4YjMzYTNiMDllNzFhMWRiNzMzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTZXJnaW8gVmlsbGFyIFNlbmluIDxzdmlsbGFyQGlnYWxpYS5j
b20+CkRhdGU6IE1vbiwgNiBTZXAgMjAxMCAxNzo1MzowMSArMDIwMApTdWJqZWN0OiBbUEFUQ0gg
MS8zXSBJbXBvcnRlZCBTb3VwVVJJTG9hZGVyIHRvIFdlYmtpdC4gTmV3IHB1YmxpYyBBUEkgZm9y
IEhUVFAgY2FjaGUuCgotLS0KIENoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgICAxMCArCiBHTlVtYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgIDQgKy0KIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgIDE5MyArKysKIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyMCArLQogLi4uL3NvdXAvY2FjaGUvc291
cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmMgICAgICAgfCAgMTk5ICsrKwogLi4uL3NvdXAvY2Fj
aGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmggICAgICAgfCAgIDYxICsKIC4uLi9uZXR3
b3JrL3NvdXAvY2FjaGUvc291cC1odHRwLWlucHV0LXN0cmVhbS5jICAgIHwgIDkyMSArKysrKysr
KysrKwogLi4uL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmggICAg
fCAgIDc2ICsKIC4uLi9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWRhdGEuYyAgICAg
ICAgIHwgIDIwNSArKysKIC4uLi9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWRhdGEu
aCAgICAgICAgIHwgICA1MSArCiAuLi4vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1m
aWxlLmMgICAgICAgICB8ICAzMTMgKysrKwogLi4uL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJl
cXVlc3QtZmlsZS5oICAgICAgICAgfCAgIDUzICsKIC4uLi9uZXR3b3JrL3NvdXAvY2FjaGUvc291
cC1yZXF1ZXN0LWh0dHAuYyAgICAgICAgIHwgIDMzOSArKysrKwogLi4uL25ldHdvcmsvc291cC9j
YWNoZS9zb3VwLXJlcXVlc3QtaHR0cC5oICAgICAgICAgfCAgIDUzICsKIFdlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5jIHwgIDI3OSArKysrCiBXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QuaCB8ICAgOTIgKysKIC4u
Li9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuYyAgIHwgIDE4NiAr
KysKIC4uLi9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuaCAgIHwg
ICA4MCArCiAuLi4vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLXByaXZhdGUu
aCB8ICAgNDEgKwogLi4uL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5jICAg
ICAgICAgfCAxNjAzICsrKysrKysrKysrKysrKysrKysrCiAuLi4vbmV0d29yay9zb3VwL2NhY2hl
L3dlYmtpdC9zb3VwLWNhY2hlLmggICAgICAgICB8ICAgOTUgKysKIFdlYktpdFRvb2xzL0NoYW5n
ZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgOSArCiBXZWJLaXRUb29scy9H
TlVtYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKwogYXV0b3Rvb2xz
L3dlYmtpdC5tNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICstCiAyNCBm
aWxlcyBjaGFuZ2VkLCA0ODg0IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCiBjcmVhdGUg
bW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1kaXJl
Y3RvcnktaW5wdXQtc3RyZWFtLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uaAogY3JlYXRl
IG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0
cC1pbnB1dC1zdHJlYW0uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0uaAogY3JlYXRlIG1vZGUgMTAw
NjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRh
LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNo
ZS9zb3VwLXJlcXVlc3QtZGF0YS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWZpbGUuYwogY3JlYXRlIG1vZGUgMTAw
NjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxl
LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNo
ZS9zb3VwLXJlcXVlc3QtaHR0cC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuaAogY3JlYXRlIG1vZGUgMTAw
NjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5jCiBj
cmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291
cC1yZXF1ZXN0LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9jYWNoZS9zb3VwLXJlcXVlc3Rlci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuaAogY3JlYXRlIG1vZGUg
MTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNh
Y2hlLXByaXZhdGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5oCgpkaWZm
IC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDQzNmU0ODUuLjRjN2NlMzIgMTAw
NjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAx
MC0wOS0wNiAgU2VyZ2lvIFZpbGxhciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBBZGQgSFRU
UCBjYWNoaW5nIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ0MjYxCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogYWRkZWQgcGF0aHMg
Zm9yIHNvdXAgSFRUUCBjYWNoZSBjb2RlCisgICAgICAgICogYXV0b3Rvb2xzL3dlYmtpdC5tNDog
dXBncmFkZWQgcmVxdWlyZWQgZ2xpYiB2ZXJzaW9uCisKIDIwMTAtMDktMDQgIEx1Y2FzIERlIE1h
cmNoaSAgPGx1Y2FzLmRlbWFyY2hpQHByb2Z1c2lvbi5tb2JpPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgpkaWZmIC0tZ2l0IGEvR05VbWFrZWZpbGUu
YW0gYi9HTlVtYWtlZmlsZS5hbQppbmRleCA3NDcxMjVkLi4wNTgzZGI4IDEwMDY0NAotLS0gYS9H
TlVtYWtlZmlsZS5hbQorKysgYi9HTlVtYWtlZmlsZS5hbQpAQCAtMzIwLDcgKzMyMCw4IEBAIHdl
YmtpdGd0a19zdGF0aWNfaF9hcGkgKz0gXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXR3ZWJ3aW5kb3dmZWF0dXJlcy5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0d2Vidmlldy5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vi
ZGF0YWJhc2UuaCBcCi0JJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNlY3VyaXR5
b3JpZ2luLmgKKwkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c2VjdXJpdHlvcmln
aW4uaCBcCisJJChzcmNkaXIpL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dl
YmtpdC9zb3VwLWNhY2hlLmgKIAogd2Via2l0Z3RrX2J1aWx0X2hfYXBpICs9IFwKIAlXZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXR2ZXJzaW9uLmgKQEAgLTU0Miw2ICs1NDMsNyBAQCB3ZWJraXRfdGVz
dHNfY2ZsYWdzID0gXAogCS1mbm8tc3RyaWN0LWFsaWFzaW5nIFwKIAktSSQoc3JjZGlyKS9KYXZh
U2NyaXB0Q29yZS9Gb3J3YXJkaW5nSGVhZGVycyBcCiAJLUkkKHNyY2RpcikvV2ViS2l0L2d0ayBc
CisJLUkkKHNyY2RpcikvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUgXAogCS1J
JCh0b3BfYnVpbGRkaXIpL1dlYktpdC9ndGsgXAogCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRT
b3VyY2VzIFwKIAktSSQodG9wX3NyY2RpcikvV2ViQ29yZS9iaW5kaW5ncyBcCmRpZmYgLS1naXQg
YS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGIwMGQzN2IuLjdh
ODQ5YzggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTk2IEBACisyMDEwLTA5LTA2ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8
c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFtHVEtdIEFkZCBIVFRQIGNhY2hpbmcgc3VwcG9ydAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQyNjEKKworICAgICAgICAqIEdO
VW1ha2VmaWxlLmFtOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJ
bnRlcm5hbC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6UmVz
b3VyY2VIYW5kbGVJbnRlcm5hbCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jl
c291cmNlSGFuZGxlU291cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUlu
dGVybmFsOjp+UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUhhbmRsZTo6flJlc291cmNlSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OnJlc3RhcnRl
ZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmdvdENodW5rQ2FsbGJhY2spOgorICAgICAg
ICAoV2ViQ29yZTo6cGFyc2VEYXRhVXJsKToKKyAgICAgICAgKFdlYkNvcmU6OmNsZWFudXBTb3Vw
UmVxdWVzdE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpzZW5kUmVxdWVzdENhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OnN0YXJ0SHR0cCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdC5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
c291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdDo6dXBkYXRlU291cE1lc3NhZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
c291cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uYzogQWRkZWQuCisgICAgICAg
IChzb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fcGFyc2VfaW5mbyk6CisgICAgICAgIChzb3Vw
X2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fcmVhZF9uZXh0X2ZpbGUpOgorICAgICAgICAoc291cF9k
aXJlY3RvcnlfaW5wdXRfc3RyZWFtX3JlYWQpOgorICAgICAgICAoc291cF9kaXJlY3RvcnlfaW5w
dXRfc3RyZWFtX2Nsb3NlKToKKyAgICAgICAgKHNvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9j
bGFzc19pbml0KToKKyAgICAgICAgKHNvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9pbml0KToK
KyAgICAgICAgKHNvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9uZXcpOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uaDog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1p
bnB1dC1zdHJlYW0uYzogQWRkZWQuCisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Zp
bmFsaXplKToKKyAgICAgICAgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xhc3NfaW5pdCk6Cisg
ICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlZWthYmxlX2lmYWNlX2luaXQpOgorICAg
ICAgICAoc291cF9odHRwX2lucHV0X3N0cmVhbV9pbml0KToKKyAgICAgICAgKHNvdXBfaHR0cF9p
bnB1dF9zdHJlYW1fcXVldWVfbWVzc2FnZSk6CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3Ry
ZWFtX25ldyk6CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dvdF9oZWFkZXJzKToK
KyAgICAgICAgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ290X2NodW5rKToKKyAgICAgICAgKHNv
dXBfaHR0cF9pbnB1dF9zdHJlYW1fZmluaXNoZWQpOgorICAgICAgICAoc291cF9odHRwX2lucHV0
X3N0cmVhbV9jYW5jZWxsZWQpOgorICAgICAgICAoc291cF9odHRwX2lucHV0X3N0cmVhbV9wcmVw
YXJlX2Zvcl9pbyk6CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2RvbmVfaW8pOgor
ICAgICAgICAoc2V0X2Vycm9yX2lmX2h0dHBfZmFpbGVkKToKKyAgICAgICAgKHJlYWRfZnJvbV9s
ZWZ0b3Zlcik6CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfaW50ZXJuYWwp
OgorICAgICAgICAoc2VuZF9zeW5jX2ZpbmlzaGVkKToKKyAgICAgICAgKHNvdXBfaHR0cF9pbnB1
dF9zdHJlYW1fc2VuZCk6CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWQpOgor
ICAgICAgICAoc291cF9odHRwX2lucHV0X3N0cmVhbV9jbG9zZSk6CisgICAgICAgICh3cmFwcGVy
X2NhbGxiYWNrKToKKyAgICAgICAgKHNlbmRfYXN5bmNfdGhyZWFkKToKKyAgICAgICAgKHNvdXBf
aHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luY19pbl90aHJlYWQpOgorICAgICAgICAoc2VuZF9h
c3luY19maW5pc2hlZCk6CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5
bmNfaW50ZXJuYWwpOgorICAgICAgICAoc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5j
KToKKyAgICAgICAgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9maW5pc2gpOgorICAgICAg
ICAocmVhZF9hc3luY19kb25lKToKKyAgICAgICAgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVh
ZF9hc3luYyk6CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWRfZmluaXNoKToK
KyAgICAgICAgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2VfYXN5bmMpOgorICAgICAgICAo
c291cF9odHRwX2lucHV0X3N0cmVhbV9jbG9zZV9maW5pc2gpOgorICAgICAgICAoc291cF9odHRw
X2lucHV0X3N0cmVhbV90ZWxsKToKKyAgICAgICAgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2Fu
X3NlZWspOgorICAgICAgICAoc291cF9odHRwX2lucHV0X3N0cmVhbV9zZWVrKToKKyAgICAgICAg
KHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2FuX3RydW5jYXRlKToKKyAgICAgICAgKHNvdXBfaHR0
cF9pbnB1dF9zdHJlYW1fdHJ1bmNhdGUpOgorICAgICAgICAoc291cF9odHRwX2lucHV0X3N0cmVh
bV9nZXRfbWVzc2FnZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3Nv
dXAtaHR0cC1pbnB1dC1zdHJlYW0uaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmM6IEFkZGVkLgorICAgICAgICAoc291cF9y
ZXF1ZXN0X2RhdGFfaW5pdCk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfZGF0YV9maW5hbGl6ZSk6
CisgICAgICAgIChzb3VwX3JlcXVlc3RfZGF0YV9jaGVja191cmkpOgorICAgICAgICAodXJpX2Rl
Y29kZWRfY29weSk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfZGF0YV9zZW5kKToKKyAgICAgICAg
KHNvdXBfcmVxdWVzdF9kYXRhX2dldF9jb250ZW50X2xlbmd0aCk6CisgICAgICAgIChzb3VwX3Jl
cXVlc3RfZGF0YV9nZXRfY29udGVudF90eXBlKToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9kYXRh
X2NsYXNzX2luaXQpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3Vw
LXJlcXVlc3QtZGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
Y2FjaGUvc291cC1yZXF1ZXN0LWZpbGUuYzogQWRkZWQuCisgICAgICAgIChzb3VwX3JlcXVlc3Rf
ZmlsZV9nZXRfZmlsZSk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfZmlsZV9pbml0KToKKyAgICAg
ICAgKHNvdXBfcmVxdWVzdF9maWxlX2ZpbmFsaXplKToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9m
aWxlX2NoZWNrX3VyaSk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfZmlsZV9mdHBfbWFpbl9sb29w
X3F1aXQpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2ZpbGVfZW5zdXJlX2ZpbGVfZnRwKToKKyAg
ICAgICAgKHNvdXBfcmVxdWVzdF9maWxlX2Vuc3VyZV9maWxlKToKKyAgICAgICAgKHNvdXBfcmVx
dWVzdF9maWxlX3NlbmQpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2ZpbGVfc2VuZF9hc3luY190
aHJlYWQpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2ZpbGVfc2VuZF9hc3luYyk6CisgICAgICAg
IChzb3VwX3JlcXVlc3RfZmlsZV9zZW5kX2ZpbmlzaCk6CisgICAgICAgIChzb3VwX3JlcXVlc3Rf
ZmlsZV9nZXRfY29udGVudF9sZW5ndGgpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2ZpbGVfZ2V0
X2NvbnRlbnRfdHlwZSk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfZmlsZV9jbGFzc19pbml0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWZpbGUu
aDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVx
dWVzdC1odHRwLmM6IEFkZGVkLgorICAgICAgICAoc291cF9yZXF1ZXN0X2h0dHBfZ2V0X21lc3Nh
Z2UpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2h0dHBfaW5pdCk6CisgICAgICAgIChzb3VwX3Jl
cXVlc3RfaHR0cF9jaGVja191cmkpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2h0dHBfZmluYWxp
emUpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2h0dHBfc2VuZCk6CisgICAgICAgIChzZW50X2Fz
eW5jKToKKyAgICAgICAgKGNvbmRpdGlvbmFsX2dldF9yZWFkeV9jYik6CisgICAgICAgIChzZW5k
X2FzeW5jX2NiKToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9odHRwX3NlbmRfYXN5bmMpOgorICAg
ICAgICAoc291cF9yZXF1ZXN0X2h0dHBfc2VuZF9maW5pc2gpOgorICAgICAgICAoc291cF9yZXF1
ZXN0X2h0dHBfZ2V0X2NvbnRlbnRfbGVuZ3RoKToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9odHRw
X2dldF9jb250ZW50X3R5cGUpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2h0dHBfY2xhc3NfaW5p
dCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1o
dHRwLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3Vw
LXJlcXVlc3QuYzogQWRkZWQuCisgICAgICAgIChzb3VwX3JlcXVlc3RfaW5pdCk6CisgICAgICAg
IChzb3VwX3JlcXVlc3RfZmluYWxpemUpOgorICAgICAgICAoc291cF9yZXF1ZXN0X3NldF9wcm9w
ZXJ0eSk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfZ2V0X3Byb3BlcnR5KToKKyAgICAgICAgKHNv
dXBfcmVxdWVzdF9pbml0YWJsZV9pbml0KToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9kZWZhdWx0
X2NoZWNrX3VyaSk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfZGVmYXVsdF9zZW5kX2FzeW5jKToK
KyAgICAgICAgKHNvdXBfcmVxdWVzdF9kZWZhdWx0X3NlbmRfZmluaXNoKToKKyAgICAgICAgKHNv
dXBfcmVxdWVzdF9zZW5kKToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9zZW5kX2FzeW5jKToKKyAg
ICAgICAgKHNvdXBfcmVxdWVzdF9zZW5kX2ZpbmlzaCk6CisgICAgICAgIChzb3VwX3JlcXVlc3Rf
Y2xhc3NfaW5pdCk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfaW5pdGFibGVfaW50ZXJmYWNlX2lu
aXQpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2dldF91cmkpOgorICAgICAgICAoc291cF9yZXF1
ZXN0X2dldF9zZXNzaW9uKToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9nZXRfY29udGVudF9sZW5n
dGgpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2dldF9jb250ZW50X3R5cGUpOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QuaDogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmM6IEFkZGVk
LgorICAgICAgICAoc291cF9yZXF1ZXN0ZXJfaW5pdCk6CisgICAgICAgIChmaW5hbGl6ZSk6Cisg
ICAgICAgIChzb3VwX3JlcXVlc3Rlcl9jbGFzc19pbml0KToKKyAgICAgICAgKGluaXRfcmVxdWVz
dF90eXBlcyk6CisgICAgICAgIChzb3VwX3JlcXVlc3Rlcl9uZXcpOgorICAgICAgICAoc291cF9y
ZXF1ZXN0ZXJfcmVxdWVzdCk6CisgICAgICAgIChzb3VwX3JlcXVlc3Rlcl9yZXF1ZXN0X3VyaSk6
CisgICAgICAgIChzb3VwX3NjaGVtZV9pc192YWxpZCk6CisgICAgICAgIChzb3VwX3JlcXVlc3Rl
cl9hZGRfcHJvdG9jb2wpOgorICAgICAgICAoc291cF9yZXF1ZXN0ZXJfcmVtb3ZlX3Byb3RvY29s
KToKKyAgICAgICAgKHNvdXBfZXJyb3JfcXVhcmspOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Rlci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUtcHJpdmF0ZS5oOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUu
YzogQWRkZWQuCisgICAgICAgIChnZXRfY2FjaGVhYmlsaXR5KToKKyAgICAgICAgKHdlYmtpdF9z
b3VwX2NhY2hlX2VudHJ5X2ZyZWUpOgorICAgICAgICAoY29weV9oZWFkZXJzKToKKyAgICAgICAg
KHVwZGF0ZV9oZWFkZXJzKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2dldF9j
dXJyZW50X2FnZSk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9pc19mcmVzaF9l
bm91Z2gpOgorICAgICAgICAoc291cF9tZXNzYWdlX2dldF9jYWNoZV9rZXkpOgorICAgICAgICAo
d2Via2l0X3NvdXBfY2FjaGVfZW50cnlfc2V0X2ZyZXNobmVzcyk6CisgICAgICAgICh3ZWJraXRf
c291cF9jYWNoZV9lbnRyeV9uZXcpOgorICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfd3JpdGlu
Z19maXh0dXJlX2ZyZWUpOgorICAgICAgICAoY2xvc2VfcmVhZHlfY2IpOgorICAgICAgICAod3Jp
dGVfcmVhZHlfY2IpOgorICAgICAgICAobXNnX2dvdF9jaHVua19jYik6CisgICAgICAgIChtc2df
Z290X2JvZHlfY2IpOgorICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfZW50cnlfZGVsZXRlKToK
KyAgICAgICAgKGxydV9jb21wYXJlX2Z1bmMpOgorICAgICAgICAoY2FjaGVfYWNjZXB0c19lbnRy
aWVzX29mX3NpemUpOgorICAgICAgICAobWFrZV9yb29tX2Zvcl9uZXdfZW50cnkpOgorICAgICAg
ICAod2Via2l0X3NvdXBfY2FjaGVfZW50cnlfaW5zZXJ0X2J5X2tleSk6CisgICAgICAgIChtc2df
cmVzdGFydGVkX2NiKToKKyAgICAgICAgKGFwcGVuZF90b19yZWFkeV9jYik6CisgICAgICAgICht
c2dfZ290X2hlYWRlcnNfY2IpOgorICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfc2VuZF9yZXNw
b25zZSk6CisgICAgICAgIChyZXF1ZXN0X3N0YXJ0ZWQpOgorICAgICAgICAoYXR0YWNoKToKKyAg
ICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX3Nlc3Npb25fZmVhdHVyZV9pbml0KToKKyAgICAgICAg
KHdlYmtpdF9zb3VwX2NhY2hlX2luaXQpOgorICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfZmlu
YWxpemUpOgorICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfc2V0X3Byb3BlcnR5KToKKyAgICAg
ICAgKHdlYmtpdF9zb3VwX2NhY2hlX2dldF9wcm9wZXJ0eSk6CisgICAgICAgICh3ZWJraXRfc291
cF9jYWNoZV9jb25zdHJ1Y3RlZCk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV90eXBlX2dl
dF90eXBlKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2NsYXNzX2luaXQpOgorICAgICAg
ICAod2Via2l0X3NvdXBfY2FjaGVfbmV3KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2hh
c19yZXNwb25zZSk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9nZXRfY2FjaGVhYmlsaXR5
KToKKyAgICAgICAgKGZvcmNlX2ZsdXNoX3RpbWVvdXQpOgorICAgICAgICAod2Via2l0X3NvdXBf
Y2FjaGVfZmx1c2gpOgorICAgICAgICAocmVtb3ZlX2NhY2hlX2l0ZW0pOgorICAgICAgICAod2Vi
a2l0X3NvdXBfY2FjaGVfY2xlYXIpOgorICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfZ2VuZXJh
dGVfY29uZGl0aW9uYWxfcmVxdWVzdCk6CisgICAgICAgIChwYWNrX2VudHJ5KToKKyAgICAgICAg
KHdlYmtpdF9zb3VwX2NhY2hlX2R1bXApOgorICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfbG9h
ZCk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9zZXRfbWF4X3NpemUpOgorICAgICAgICAo
d2Via2l0X3NvdXBfY2FjaGVfZ2V0X21heF9zaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUuaDogQWRkZWQuCisKIDIwMTAtMDgtMzEg
IFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggZDM2MTgxMC4uZmE4ZmU2ZiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFt
CkBAIC03Nyw3ICs3Nyw5IEBAIHdlYmNvcmVndGtfY3BwZmxhZ3MgKz0gXAogCS1JJChzcmNkaXIp
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyIFwKIAktSSQoc3JjZGlyKS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ayBcCiAJLUkkKHNyY2RpcikvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsgXAotCS1JJChzcmNkaXIpL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwCisJLUkk
KHNyY2RpcikvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAgXAorCS1JJChzcmNkaXIpL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlIFwKKwktSSQoc3JjZGlyKS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQKIAogd2ViY29yZV9idWlsdF9ub3Nv
dXJjZXMgKz0gXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvRG9jVHlwZVN0cmluZ3MuY3BwIFwK
QEAgLTI1NTQsNiArMjU1NiwyMiBAQCB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3BwIFwKIAlXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlLmggXAogCVdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVzcG9uc2VTb3VwLmNwcCBcCisJV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmMg
XAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtZGlyZWN0b3J5LWlu
cHV0LXN0cmVhbS5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3Vw
LWh0dHAtaW5wdXQtc3RyZWFtLmMgXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2Nh
Y2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0uaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LmMgXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmMgXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmMgXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmMgXAorCVdlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmggXAorCVdlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5oIFwKKwlXZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtaHR0cC5jIFwKKwlXZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtaHR0cC5oIFwKKwlXZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5jIFwKKwlXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5oIFwKIAlXZWJD
b3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFHdGsuY3BwIFwKIAlXZWJDb3JlL3BsdWdpbnMvZ3Rr
L1BsdWdpblBhY2thZ2VHdGsuY3BwIFwKIAlXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdH
dGsuY3BwIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3NvdXAtZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5jIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uOTIzYWM2ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5j
CkBAIC0wLDAgKzEsMTk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFJlZCBIYXQsIElu
Yy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklH
X0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAic291cC1kaXJlY3Rv
cnktaW5wdXQtc3RyZWFtLmgiCisKKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRl
IDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjZGVmaW5lIElOSVRfU1RSSU5HICI8
aHRtbD48aGVhZD48dGl0bGU+T01HITwvdGl0bGU+PC9oZWFkPjxib2R5Pjx0YWJsZT4iCisjZGVm
aW5lIEVYSVRfU1RSSU5HICI8L3RhYmxlPjwvaHRtbD4iCisKK0dfREVGSU5FX1RZUEUgKFNvdXBE
aXJlY3RvcnlJbnB1dFN0cmVhbSwgc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtLCBHX1RZUEVf
SU5QVVRfU1RSRUFNKQorCitzdGF0aWMgU291cEJ1ZmZlciAqCitzb3VwX2RpcmVjdG9yeV9pbnB1
dF9zdHJlYW1fcGFyc2VfaW5mbyAoU291cERpcmVjdG9yeUlucHV0U3RyZWFtICogc3RyZWFtLAor
CQkJCQlHRmlsZUluZm8gKiBpbmZvKQoreworCVNvdXBCdWZmZXIgKmJ1ZmZlcjsKKwlHU3RyaW5n
ICpzdHJpbmc7CisJY29uc3QgY2hhciAqczsKKwljaGFyICplc2NhcGVkLCAqcGF0aCwgKnhtbF9z
dHJpbmc7CisKKwlpZiAoIWdfZmlsZV9pbmZvX2dldF9uYW1lIChpbmZvKSkKKwkJcmV0dXJuIE5V
TEw7CisKKwlzID0gZ19maWxlX2luZm9fZ2V0X2Rpc3BsYXlfbmFtZSAoaW5mbyk7CisJaWYgKCFz
KSB7CisJCXMgPSBnX2ZpbGVfaW5mb19nZXRfbmFtZSAoaW5mbyk7CisJCS8qIEZJWE1FOiBjb252
ZXJ0IHNvbWVob3c/ICovCisJCWlmICghZ191dGY4X3ZhbGlkYXRlIChzLCAtMSwgTlVMTCkpCisJ
CQlyZXR1cm4gTlVMTDsKKwl9CisJc3RyaW5nID0gZ19zdHJpbmdfbmV3ICgiPHRyPiIpOworCisJ
eG1sX3N0cmluZyA9IGdfbWFya3VwX2VzY2FwZV90ZXh0IChzLCAtMSk7CisJZXNjYXBlZCA9IGdf
dXJpX2VzY2FwZV9zdHJpbmcgKGdfZmlsZV9pbmZvX2dldF9uYW1lIChpbmZvKSwgTlVMTCwgRkFM
U0UpOworCXBhdGggPSBnX3N0cmNvbmNhdCAoc3RyZWFtLT51cmksICIvIiwgZXNjYXBlZCwgTlVM
TCk7CisJZ19mcmVlIChlc2NhcGVkKTsKKwlnX3N0cmluZ19hcHBlbmRfcHJpbnRmIChzdHJpbmcs
ICI8dGQ+PGEgaHJlZj1cIiVzXCI+JXM8L2E+PC90ZD4iLCBwYXRoLCB4bWxfc3RyaW5nKTsKKwln
X2ZyZWUgKHBhdGgpOworCWdfZnJlZSAoeG1sX3N0cmluZyk7CisJZ19zdHJpbmdfYXBwZW5kIChz
dHJpbmcsICI8L3RyPiIpOworCisJYnVmZmVyID0gc291cF9idWZmZXJfbmV3IChTT1VQX01FTU9S
WV9UQUtFLCBzdHJpbmctPnN0ciwgc3RyaW5nLT5sZW4pOworCWdfc3RyaW5nX2ZyZWUgKHN0cmlu
ZywgRkFMU0UpOworCisJcmV0dXJuIGJ1ZmZlcjsKK30KKworc3RhdGljIFNvdXBCdWZmZXIgKgor
c291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX3JlYWRfbmV4dF9maWxlIChTb3VwRGlyZWN0b3J5
SW5wdXRTdHJlYW0gICpzdHJlYW0sCisJCQkJCSAgICBHQ2FuY2VsbGFibGUgICAgICAgICAgICAg
ICpjYW5jZWxsYWJsZSwKKwkJCQkJICAgIEdFcnJvciAgICAgICAgICAgICAgICAgICAqKmVycm9y
KQoreworCUdGaWxlSW5mbyAqaW5mbzsKKwlTb3VwQnVmZmVyICpidWZmZXI7CisJR0Vycm9yICpl
cnIgPSBOVUxMOworCisJZG8geworCQlpbmZvID0gZ19maWxlX2VudW1lcmF0b3JfbmV4dF9maWxl
IChzdHJlYW0tPmVudW1lcmF0b3IsIGNhbmNlbGxhYmxlLCAmZXJyKTsKKwkJaWYgKGluZm8gPT0g
TlVMTCkgeworCQkJaWYgKGVycikgeworCQkJCWdfcHJvcGFnYXRlX2Vycm9yIChlcnJvciwgZXJy
KTsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0gZWxzZSBpZiAoIXN0cmVhbS0+ZG9uZSkgeworCQkJ
CXN0cmVhbS0+ZG9uZSA9IFRSVUU7CisJCQkJcmV0dXJuIHNvdXBfYnVmZmVyX25ldyAoU09VUF9N
RU1PUllfU1RBVElDLAorCQkJCQkJCUVYSVRfU1RSSU5HLAorCQkJCQkJCXNpemVvZiAoRVhJVF9T
VFJJTkcpKTsKKwkJCX0gZWxzZSB7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCX0KKworCQli
dWZmZXIgPSBzb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fcGFyc2VfaW5mbyAoc3RyZWFtLCBp
bmZvKTsKKwl9IHdoaWxlIChidWZmZXIgPT0gTlVMTCk7CisKKwlyZXR1cm4gYnVmZmVyOworfQor
CitzdGF0aWMgZ3NzaXplCitzb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fcmVhZCAoR0lucHV0
U3RyZWFtICAqaW5wdXQsCisJCQkJICB2b2lkICAgICAgICAgICpidWZmZXIsCisJCQkJICBnc2l6
ZSBjb3VudCwKKwkJCQkgIEdDYW5jZWxsYWJsZSAgKmNhbmNlbGxhYmxlLAorCQkJCSAgR0Vycm9y
ICAgICAgICoqZXJyb3IpCit7CisJU291cERpcmVjdG9yeUlucHV0U3RyZWFtICpzdHJlYW0gPSBT
T1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0gKGlucHV0KTsKKwlnc3NpemUgdG90YWwsIHNpemU7
CisKKwlmb3IgKHRvdGFsID0gMDsgdG90YWwgPCBjb3VudDsgdG90YWwgKz0gc2l6ZSkgeworCQlp
ZiAoc3RyZWFtLT5idWZmZXIgPT0gTlVMTCkgeworCQkJc3RyZWFtLT5idWZmZXIgPSBzb3VwX2Rp
cmVjdG9yeV9pbnB1dF9zdHJlYW1fcmVhZF9uZXh0X2ZpbGUgKHN0cmVhbSwgY2FuY2VsbGFibGUs
IGVycm9yKTsKKwkJCWlmIChzdHJlYW0tPmJ1ZmZlciA9PSBOVUxMKSB7CisJCQkJLyogRklYTUU6
IElzIHRoaXMgY29ycmVjdCBvciBzaG91bGQgd2UgZm9yd2FyZCB0aGUgZXJyb3I/ICovCisJCQkJ
aWYgKHRvdGFsKQorCQkJCQlnX2NsZWFyX2Vycm9yIChlcnJvcik7CisJCQkJcmV0dXJuIHRvdGFs
OworCQkJfQorCQl9CisKKwkJc2l6ZSA9IE1JTiAoc3RyZWFtLT5idWZmZXItPmxlbmd0aCwgY291
bnQgLSB0b3RhbCk7CisJCW1lbWNweSAoKGNoYXIgKilidWZmZXIgKyB0b3RhbCwgc3RyZWFtLT5i
dWZmZXItPmRhdGEsIHNpemUpOworCQlpZiAoc2l6ZSA9PSBzdHJlYW0tPmJ1ZmZlci0+bGVuZ3Ro
KSB7CisJCQlzb3VwX2J1ZmZlcl9mcmVlIChzdHJlYW0tPmJ1ZmZlcik7CisJCQlzdHJlYW0tPmJ1
ZmZlciA9IE5VTEw7CisJCX0gZWxzZSB7CisJCQlTb3VwQnVmZmVyICpzdWIgPSBzb3VwX2J1ZmZl
cl9uZXdfc3ViYnVmZmVyIChzdHJlYW0tPmJ1ZmZlciwKKwkJCQkJCQkJICAgICBzaXplLAorCQkJ
CQkJCQkgICAgIHN0cmVhbS0+YnVmZmVyLT5sZW5ndGggLSBzaXplKTsKKwkJCXNvdXBfYnVmZmVy
X2ZyZWUgKHN0cmVhbS0+YnVmZmVyKTsKKwkJCXN0cmVhbS0+YnVmZmVyID0gc3ViOworCQl9CisJ
fQorCisJcmV0dXJuIHRvdGFsOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3NvdXBfZGlyZWN0b3J5
X2lucHV0X3N0cmVhbV9jbG9zZSAoR0lucHV0U3RyZWFtICAqaW5wdXQsCisJCQkJICAgR0NhbmNl
bGxhYmxlICAqY2FuY2VsbGFibGUsCisJCQkJICAgR0Vycm9yICAgICAgICoqZXJyb3IpCit7CisJ
U291cERpcmVjdG9yeUlucHV0U3RyZWFtICpzdHJlYW0gPSBTT1VQX0RJUkVDVE9SWV9JTlBVVF9T
VFJFQU0gKGlucHV0KTsKKwlnYm9vbGVhbiByZXN1bHQ7CisKKwlpZiAoc3RyZWFtLT5idWZmZXIp
IHsKKwkJc291cF9idWZmZXJfZnJlZSAoc3RyZWFtLT5idWZmZXIpOworCQlzdHJlYW0tPmJ1ZmZl
ciA9IE5VTEw7CisJfQorCisJcmVzdWx0ID0gZ19maWxlX2VudW1lcmF0b3JfY2xvc2UgKHN0cmVh
bS0+ZW51bWVyYXRvciwKKwkJCQkJICBjYW5jZWxsYWJsZSwKKwkJCQkJICBlcnJvcik7CisJZ19v
YmplY3RfdW5yZWYgKHN0cmVhbS0+ZW51bWVyYXRvcik7CisJc3RyZWFtLT5lbnVtZXJhdG9yID0g
TlVMTDsKKworCWdfZnJlZSAoc3RyZWFtLT51cmkpOworCXN0cmVhbS0+dXJpID0gTlVMTDsKKwor
CXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX2RpcmVjdG9yeV9pbnB1dF9z
dHJlYW1fY2xhc3NfaW5pdCAoU291cERpcmVjdG9yeUlucHV0U3RyZWFtQ2xhc3MgKnN0cmVhbV9j
bGFzcykKK3sKKwlHSW5wdXRTdHJlYW1DbGFzcyAqaW5wdXRzdHJlYW1fY2xhc3MgPSBHX0lOUFVU
X1NUUkVBTV9DTEFTUyAoc3RyZWFtX2NsYXNzKTsKKworCWlucHV0c3RyZWFtX2NsYXNzLT5yZWFk
X2ZuID0gc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX3JlYWQ7CisJaW5wdXRzdHJlYW1fY2xh
c3MtPmNsb3NlX2ZuID0gc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX2Nsb3NlOworfQorCitz
dGF0aWMgdm9pZAorc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX2luaXQgKFNvdXBEaXJlY3Rv
cnlJbnB1dFN0cmVhbSAqc3RyZWFtKQoreworCXN0cmVhbS0+YnVmZmVyID0gc291cF9idWZmZXJf
bmV3IChTT1VQX01FTU9SWV9TVEFUSUMsCisJCQkJCSAgSU5JVF9TVFJJTkcsCisJCQkJCSAgc2l6
ZW9mIChJTklUX1NUUklORykpOworfQorCitHSW5wdXRTdHJlYW0gKgorc291cF9kaXJlY3Rvcnlf
aW5wdXRfc3RyZWFtX25ldyAoR0ZpbGVFbnVtZXJhdG9yICplbnVtZXJhdG9yLAorCQkJCSBTb3Vw
VVJJICAgICAgICAgKnVyaSkKK3sKKwlHSW5wdXRTdHJlYW0gKnN0cmVhbTsKKworCWdfcmV0dXJu
X3ZhbF9pZl9mYWlsIChHX0lTX0ZJTEVfRU5VTUVSQVRPUiAoZW51bWVyYXRvciksIE5VTEwpOwor
CWdfcmV0dXJuX3ZhbF9pZl9mYWlsICh1cmkgIT0gTlVMTCwgTlVMTCk7CisKKwlzdHJlYW0gPSBn
X29iamVjdF9uZXcgKFNPVVBfVFlQRV9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNLCBOVUxMKTsKKwor
CVNPVVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTSAoc3RyZWFtKS0+ZW51bWVyYXRvciA9IGdfb2Jq
ZWN0X3JlZiAoZW51bWVyYXRvcik7CisJU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNIChzdHJl
YW0pLT51cmkgPSBzb3VwX3VyaV90b19zdHJpbmcgKHVyaSwgRkFMU0UpOworCisJcmV0dXJuIHN0
cmVhbTsKK30KKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2Fj
aGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDMyM2QyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFt
LmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBSZWQgSGF0LCBJ
bmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgU09VUF9ESVJF
Q1RPUllfSU5QVVRfU1RSRUFNX0gKKyNkZWZpbmUgU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFN
X0ggMQorCisjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC10eXBl
cy5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC1tZXNzYWdlLWJvZHkuaD4KKworR19CRUdJTl9E
RUNMUworCisjZGVmaW5lIFNPVVBfVFlQRV9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNICAgICAgICAg
ICAgKHNvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9nZXRfdHlwZSAoKSkKKyNkZWZpbmUgU09V
UF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX0NBU1QgKChvYmopLCBTT1VQX1RZUEVfRElSRUNUT1JZX0lOUFVUX1NUUkVBTSwgU291
cERpcmVjdG9yeUlucHV0U3RyZWFtKSkKKyNkZWZpbmUgU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RS
RUFNX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFNP
VVBfVFlQRV9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNLCBTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW1D
bGFzcykpCisjZGVmaW5lIFNPVVBfSVNfRElSRUNUT1JZX0lOUFVUX1NUUkVBTShvYmopICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgU09VUF9UWVBFX0RJUkVDVE9S
WV9JTlBVVF9TVFJFQU0pKQorI2RlZmluZSBTT1VQX0lTX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU1f
Q0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKG9iaiksIFNPVVBfVFlQRV9E
SVJFQ1RPUllfSU5QVVRfU1RSRUFNKSkKKyNkZWZpbmUgU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RS
RUFNX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIFNP
VVBfVFlQRV9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNLCBTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW1D
bGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9Tb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW0gU291cERp
cmVjdG9yeUlucHV0U3RyZWFtOwordHlwZWRlZiBzdHJ1Y3QgX1NvdXBEaXJlY3RvcnlJbnB1dFN0
cmVhbUNsYXNzIFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbUNsYXNzOworCitzdHJ1Y3QgX1NvdXBE
aXJlY3RvcnlJbnB1dFN0cmVhbSB7CisJR0lucHV0U3RyZWFtIHBhcmVudDsKKworCUdGaWxlRW51
bWVyYXRvciAqZW51bWVyYXRvcjsKKwljaGFyICp1cmk7CisJU291cEJ1ZmZlciAqYnVmZmVyOwor
CWdib29sZWFuIGRvbmU7Cit9OworCitzdHJ1Y3QgX1NvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbUNs
YXNzIHsKKwlHSW5wdXRTdHJlYW1DbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitHVHlwZSAgICAg
ICAgICBzb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fZ2V0X3R5cGUgKHZvaWQpOworCitHSW5w
dXRTdHJlYW0gKnNvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9uZXcgKEdGaWxlRW51bWVyYXRv
ciAqZW51bWVyYXRvciwKKwkJCQkJICAgICAgIFNvdXBVUkkgICAgICAgICAqdXJpKTsKKworCitH
X0VORF9ERUNMUworCisjZW5kaWYgLyogU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNX0ggKi8K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0
cC1pbnB1dC1zdHJlYW0uYyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3Nv
dXAtaHR0cC1pbnB1dC1zdHJlYW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5hYjIxNmI2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvY2FjaGUvc291cC1odHRwLWlucHV0LXN0cmVhbS5jCkBAIC0wLDAgKzEsOTIxIEBACisvKiBz
b3VwLWlucHV0LXN0cmVhbS5jLCBiYXNlZCBvbiBnc29ja2V0aW5wdXRzdHJlYW0uYworICoKKyAq
IENvcHlyaWdodCAoQykgMjAwNi0yMDA3IFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykg
MjAxMCBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwK
KyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxjb25maWcu
aD4KKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUg
PGdpby9naW8uaD4KKworI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorCisjaW5jbHVkZSAic291
cC1odHRwLWlucHV0LXN0cmVhbS5oIgorCitzdGF0aWMgdm9pZCBzb3VwX2h0dHBfaW5wdXRfc3Ry
ZWFtX3NlZWthYmxlX2lmYWNlX2luaXQgKEdTZWVrYWJsZUlmYWNlICpzZWVrYWJsZV9pZmFjZSk7
CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChTb3VwSFRUUElucHV0U3RyZWFtLCBzb3VwX2h0
dHBfaW5wdXRfc3RyZWFtLCBHX1RZUEVfSU5QVVRfU1RSRUFNLAorCQkJIEdfSU1QTEVNRU5UX0lO
VEVSRkFDRSAoR19UWVBFX1NFRUtBQkxFLAorCQkJCQkJc291cF9odHRwX2lucHV0X3N0cmVhbV9z
ZWVrYWJsZV9pZmFjZV9pbml0KSkKKwordHlwZWRlZiB2b2lkICgqU291cEhUVFBJbnB1dFN0cmVh
bUNhbGxiYWNrKShHSW5wdXRTdHJlYW0gKik7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlTb3VwU2Vz
c2lvbiAqc2Vzc2lvbjsKKwlHTWFpbkNvbnRleHQgKmFzeW5jX2NvbnRleHQ7CisJU291cE1lc3Nh
Z2UgKm1zZzsKKwlnYm9vbGVhbiBnb3RfaGVhZGVycywgZmluaXNoZWQ7CisJZ29mZnNldCBvZmZz
ZXQ7CisKKwlHQ2FuY2VsbGFibGUgKmNhbmNlbGxhYmxlOworCUdTb3VyY2UgKmNhbmNlbF93YXRj
aDsKKwlTb3VwSFRUUElucHV0U3RyZWFtQ2FsbGJhY2sgZ290X2hlYWRlcnNfY2I7CisJU291cEhU
VFBJbnB1dFN0cmVhbUNhbGxiYWNrIGdvdF9jaHVua19jYjsKKwlTb3VwSFRUUElucHV0U3RyZWFt
Q2FsbGJhY2sgZmluaXNoZWRfY2I7CisJU291cEhUVFBJbnB1dFN0cmVhbUNhbGxiYWNrIGNhbmNl
bGxlZF9jYjsKKworCWd1Y2hhciAqbGVmdG92ZXJfYnVmZmVyOworCWdzaXplIGxlZnRvdmVyX2J1
ZnNpemUsIGxlZnRvdmVyX29mZnNldDsKKworCWd1Y2hhciAqY2FsbGVyX2J1ZmZlcjsKKwlnc2l6
ZSBjYWxsZXJfYnVmc2l6ZSwgY2FsbGVyX25yZWFkOworCUdBc3luY1JlYWR5Q2FsbGJhY2sgb3V0
c3RhbmRpbmdfY2FsbGJhY2s7CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpyZXN1bHQ7Cit9IFNvdXBI
VFRQSW5wdXRTdHJlYW1Qcml2YXRlOworI2RlZmluZSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dF
VF9QUklWQVRFKG8pIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKChvKSwgU09VUF9UWVBF
X0hUVFBfSU5QVVRfU1RSRUFNLCBTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSkpCisKKworc3Rh
dGljIGdzc2l6ZSAgIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVhZCAoR0lucHV0U3RyZWFtICAg
ICAgICAgKnN0cmVhbSwKKwkJCQkJICAgICB2b2lkICAgICAgICAgICAgICAgICAqYnVmZmVyLAor
CQkJCQkgICAgIGdzaXplIGNvdW50LAorCQkJCQkgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpj
YW5jZWxsYWJsZSwKKwkJCQkJICAgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpOworc3Rh
dGljIGdib29sZWFuIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2UgKEdJbnB1dFN0cmVhbSAg
ICAgICAgICpzdHJlYW0sCisJCQkJCSAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxs
YWJsZSwKKwkJCQkJICAgICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKTsKK3N0YXRpYyB2
b2lkICAgICBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMgKEdJbnB1dFN0cmVhbSAg
ICAgICAgICpzdHJlYW0sCisJCQkJCQkgICB2b2lkICAgICAgICAgICAgICAgICAqYnVmZmVyLAor
CQkJCQkJICAgZ3NpemUgY291bnQsCisJCQkJCQkgICBpbnQgaW9fcHJpb3JpdHksCisJCQkJCQkg
ICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJCQkgICBHQXN5bmNSZWFk
eUNhbGxiYWNrIGNhbGxiYWNrLAorCQkJCQkJICAgZ3BvaW50ZXIgZGF0YSk7CitzdGF0aWMgZ3Nz
aXplICAgc291cF9odHRwX2lucHV0X3N0cmVhbV9yZWFkX2ZpbmlzaCAoR0lucHV0U3RyZWFtICAg
ICAgICAgKnN0cmVhbSwKKwkJCQkJCSAgICBHQXN5bmNSZXN1bHQgICAgICAgICAqcmVzdWx0LAor
CQkJCQkJICAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcik7CitzdGF0aWMgdm9pZCAgICAg
c291cF9odHRwX2lucHV0X3N0cmVhbV9jbG9zZV9hc3luYyAoR0lucHV0U3RyZWFtICAgICAgICAg
KnN0cmVhbSwKKwkJCQkJCSAgICBpbnQgaW9fcHJpb3JpdHksCisJCQkJCQkgICAgR0NhbmNlbGxh
YmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJCQkJICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sg
Y2FsbGJhY2ssCisJCQkJCQkgICAgZ3BvaW50ZXIgZGF0YSk7CitzdGF0aWMgZ2Jvb2xlYW4gc291
cF9odHRwX2lucHV0X3N0cmVhbV9jbG9zZV9maW5pc2ggKEdJbnB1dFN0cmVhbSAgICAgICAgICpz
dHJlYW0sCisJCQkJCQkgICAgIEdBc3luY1Jlc3VsdCAgICAgICAgICpyZXN1bHQsCisJCQkJCQkg
ICAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcik7CisKK3N0YXRpYyBnb2Zmc2V0ICBzb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX3RlbGwgKEdTZWVrYWJsZSAgICAgICAgICAgICpzZWVrYWJsZSk7
CisKK3N0YXRpYyBnYm9vbGVhbiBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nhbl9zZWVrIChHU2Vl
a2FibGUgICAgICAgICAgICAqc2Vla2FibGUpOworc3RhdGljIGdib29sZWFuIHNvdXBfaHR0cF9p
bnB1dF9zdHJlYW1fc2VlayAoR1NlZWthYmxlICAgICAgICAgICAgKnNlZWthYmxlLAorCQkJCQkg
ICAgIGdvZmZzZXQgb2Zmc2V0LAorCQkJCQkgICAgIEdTZWVrVHlwZSB0eXBlLAorCQkJCQkgICAg
IEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkJICAgICBHRXJyb3IgICAg
ICAgICAgICAgICoqZXJyb3IpOworCitzdGF0aWMgZ2Jvb2xlYW4gc291cF9odHRwX2lucHV0X3N0
cmVhbV9jYW5fdHJ1bmNhdGUgKEdTZWVrYWJsZSAgICAgICAgICAgICpzZWVrYWJsZSk7CitzdGF0
aWMgZ2Jvb2xlYW4gc291cF9odHRwX2lucHV0X3N0cmVhbV90cnVuY2F0ZSAoR1NlZWthYmxlICAg
ICAgICAgICAgKnNlZWthYmxlLAorCQkJCQkJIGdvZmZzZXQgb2Zmc2V0LAorCQkJCQkJIEdDYW5j
ZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkJCSBHRXJyb3IgICAgICAgICAgICAg
ICoqZXJyb3IpOworCitzdGF0aWMgdm9pZCBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dvdF9oZWFk
ZXJzIChTb3VwTWVzc2FnZSAqbXNnLCBncG9pbnRlciBzdHJlYW0pOworc3RhdGljIHZvaWQgc291
cF9odHRwX2lucHV0X3N0cmVhbV9nb3RfY2h1bmsgKFNvdXBNZXNzYWdlICptc2csIFNvdXBCdWZm
ZXIgKmNodW5rLCBncG9pbnRlciBzdHJlYW0pOworc3RhdGljIHZvaWQgc291cF9odHRwX2lucHV0
X3N0cmVhbV9maW5pc2hlZCAoU291cE1lc3NhZ2UgKm1zZywgZ3BvaW50ZXIgc3RyZWFtKTsKKwor
c3RhdGljIHZvaWQKK3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZmluYWxpemUgKEdPYmplY3QgKm9i
amVjdCkKK3sKKwlTb3VwSFRUUElucHV0U3RyZWFtICpzdHJlYW0gPSBTT1VQX0hUVFBfSU5QVVRf
U1RSRUFNIChvYmplY3QpOworCVNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gU09V
UF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKworCWdfb2JqZWN0X3Vu
cmVmIChwcml2LT5zZXNzaW9uKTsKKworCWdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlf
ZnVuYyAocHJpdi0+bXNnLCBHX0NBTExCQUNLIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dvdF9o
ZWFkZXJzKSwgc3RyZWFtKTsKKwlnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMg
KHByaXYtPm1zZywgR19DQUxMQkFDSyAoc291cF9odHRwX2lucHV0X3N0cmVhbV9nb3RfY2h1bmsp
LCBzdHJlYW0pOworCWdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyAocHJpdi0+
bXNnLCBHX0NBTExCQUNLIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2ZpbmlzaGVkKSwgc3RyZWFt
KTsKKwlnX29iamVjdF91bnJlZiAocHJpdi0+bXNnKTsKKwlnX2ZyZWUgKHByaXYtPmxlZnRvdmVy
X2J1ZmZlcik7CisKKwlpZiAoR19PQkpFQ1RfQ0xBU1MgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1f
cGFyZW50X2NsYXNzKS0+ZmluYWxpemUpCisJCSgqR19PQkpFQ1RfQ0xBU1MgKHNvdXBfaHR0cF9p
bnB1dF9zdHJlYW1fcGFyZW50X2NsYXNzKS0+ZmluYWxpemUpKG9iamVjdCk7Cit9CisKK3N0YXRp
YyB2b2lkCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2NsYXNzX2luaXQgKFNvdXBIVFRQSW5wdXRT
dHJlYW1DbGFzcyAqa2xhc3MpCit7CisJR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gR19P
QkpFQ1RfQ0xBU1MgKGtsYXNzKTsKKwlHSW5wdXRTdHJlYW1DbGFzcyAqc3RyZWFtX2NsYXNzID0g
R19JTlBVVF9TVFJFQU1fQ0xBU1MgKGtsYXNzKTsKKworCWdfdHlwZV9jbGFzc19hZGRfcHJpdmF0
ZSAoa2xhc3MsIHNpemVvZiAoU291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUpKTsKKworCWdvYmpl
Y3RfY2xhc3MtPmZpbmFsaXplID0gc291cF9odHRwX2lucHV0X3N0cmVhbV9maW5hbGl6ZTsKKwor
CXN0cmVhbV9jbGFzcy0+cmVhZF9mbiA9IHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVhZDsKKwlz
dHJlYW1fY2xhc3MtPmNsb3NlX2ZuID0gc291cF9odHRwX2lucHV0X3N0cmVhbV9jbG9zZTsKKwlz
dHJlYW1fY2xhc3MtPnJlYWRfYXN5bmMgPSBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWRfYXN5
bmM7CisJc3RyZWFtX2NsYXNzLT5yZWFkX2ZpbmlzaCA9IHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1f
cmVhZF9maW5pc2g7CisJc3RyZWFtX2NsYXNzLT5jbG9zZV9hc3luYyA9IHNvdXBfaHR0cF9pbnB1
dF9zdHJlYW1fY2xvc2VfYXN5bmM7CisJc3RyZWFtX2NsYXNzLT5jbG9zZV9maW5pc2ggPSBzb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlX2ZpbmlzaDsKK30KKworc3RhdGljIHZvaWQKK3NvdXBf
aHR0cF9pbnB1dF9zdHJlYW1fc2Vla2FibGVfaWZhY2VfaW5pdCAoR1NlZWthYmxlSWZhY2UgKnNl
ZWthYmxlX2lmYWNlKQoreworCXNlZWthYmxlX2lmYWNlLT50ZWxsID0gc291cF9odHRwX2lucHV0
X3N0cmVhbV90ZWxsOworCXNlZWthYmxlX2lmYWNlLT5jYW5fc2VlayA9IHNvdXBfaHR0cF9pbnB1
dF9zdHJlYW1fY2FuX3NlZWs7CisJc2Vla2FibGVfaWZhY2UtPnNlZWsgPSBzb3VwX2h0dHBfaW5w
dXRfc3RyZWFtX3NlZWs7CisJc2Vla2FibGVfaWZhY2UtPmNhbl90cnVuY2F0ZSA9IHNvdXBfaHR0
cF9pbnB1dF9zdHJlYW1fY2FuX3RydW5jYXRlOworCXNlZWthYmxlX2lmYWNlLT50cnVuY2F0ZV9m
biA9IHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fdHJ1bmNhdGU7Cit9CisKK3N0YXRpYyB2b2lkCitz
b3VwX2h0dHBfaW5wdXRfc3RyZWFtX2luaXQgKFNvdXBIVFRQSW5wdXRTdHJlYW0gKnN0cmVhbSkK
K3sKKwk7Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3F1ZXVlX21l
c3NhZ2UgKFNvdXBIVFRQSW5wdXRTdHJlYW0gKnN0cmVhbSkKK3sKKwlTb3VwSFRUUElucHV0U3Ry
ZWFtUHJpdmF0ZSAqcHJpdiA9IFNPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0
cmVhbSk7CisKKwlwcml2LT5nb3RfaGVhZGVycyA9IHByaXYtPmZpbmlzaGVkID0gRkFMU0U7CisK
KwkvKiBBZGQgYW4gZXh0cmEgcmVmIHNpbmNlIHNvdXBfc2Vzc2lvbl9xdWV1ZV9tZXNzYWdlIHN0
ZWFscyBvbmUgKi8KKwlnX29iamVjdF9yZWYgKHByaXYtPm1zZyk7CisJc291cF9zZXNzaW9uX3F1
ZXVlX21lc3NhZ2UgKHByaXYtPnNlc3Npb24sIHByaXYtPm1zZywgTlVMTCwgTlVMTCk7Cit9CisK
Ky8qKgorICogc291cF9odHRwX2lucHV0X3N0cmVhbV9uZXc6CisgKiBAc2Vzc2lvbjogdGhlICNT
b3VwU2Vzc2lvbiB0byB1c2UKKyAqIEBtc2c6IHRoZSAjU291cE1lc3NhZ2Ugd2hvc2UgcmVzcG9u
c2Ugd2lsbCBiZSBzdHJlYW1lZAorICoKKyAqIFByZXBhcmVzIHRvIHNlbmQgQG1zZyBvdmVyIEBz
ZXNzaW9uLCBhbmQgcmV0dXJucyBhICNHSW5wdXRTdHJlYW0KKyAqIHRoYXQgY2FuIGJlIHVzZWQg
dG8gcmVhZCB0aGUgcmVzcG9uc2UuCisgKgorICogQG1zZyBtYXkgbm90IGJlIHNlbnQgdW50aWwg
dGhlIGZpcnN0IHJlYWQgY2FsbDsgaWYgeW91IG5lZWQgdG8gbG9vaworICogYXQgdGhlIHN0YXR1
cyBjb2RlIG9yIHJlc3BvbnNlIGhlYWRlcnMgYmVmb3JlIHJlYWRpbmcgdGhlIGJvZHksIHlvdQor
ICogY2FuIHVzZSBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmQoKSBvciBzb3VwX2h0dHBfaW5w
dXRfc3RyZWFtX3NlbmRfYXN5bmMoKQorICogdG8gZm9yY2UgdGhlIG1lc3NhZ2UgdG8gYmUgc2Vu
dCBhbmQgdGhlIHJlc3BvbnNlIGhlYWRlcnMgcmVhZC4KKyAqCisgKiBJZiBAbXNnIGdldHMgYSBu
b24tMnh4IHJlc3VsdCwgdGhlIGZpcnN0IHJlYWQgKG9yIHNlbmQpIHdpbGwgcmV0dXJuCisgKiBh
biBlcnJvciB3aXRoIHR5cGUgJVNPVVBfSFRUUF9JTlBVVF9TVFJFQU1fSFRUUF9FUlJPUi4KKyAq
CisgKiBJbnRlcm5hbGx5LCAjU291cEhUVFBJbnB1dFN0cmVhbSBpcyBpbXBsZW1lbnRlZCB1c2lu
ZyBhc3luY2hyb25vdXMgSS9PLAorICogc28gaWYgeW91IGFyZSB1c2luZyB0aGUgc3luY2hyb25v
dXMgQVBJIChlZywKKyAqIGdfaW5wdXRfc3RyZWFtX3JlYWQoKSksIHlvdSBzaG91bGQgY3JlYXRl
IGEgbmV3ICNHTWFpbkNvbnRleHQgYW5kCisgKiBzZXQgaXQgYXMgdGhlICVTT1VQX1NFU1NJT05f
QVNZTkNfQ09OVEVYVCBwcm9wZXJ0eSBvbiBAc2Vzc2lvbi4gKElmCisgKiB5b3UgZG9uJ3QsIHRo
ZW4gc3luY2hyb25vdXMgI0dJbnB1dFN0cmVhbSBjYWxscyB3aWxsIGNhdXNlIHRoZSBtYWluCisg
KiBsb29wIHRvIGJlIHJ1biByZWN1cnNpdmVseS4pIFRoZSBhc3luYyAjR0lucHV0U3RyZWFtIEFQ
SSB3b3JrcyBmaW5lCisgKiB3aXRoICVTT1VQX1NFU1NJT05fQVNZTkNfQ09OVEVYVCBlaXRoZXIg
c2V0IG9yIHVuc2V0LgorICoKKyAqIFJldHVybnM6IGEgbmV3ICNHSW5wdXRTdHJlYW0uCisgKiov
CitTb3VwSFRUUElucHV0U3RyZWFtICoKK3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fbmV3IChTb3Vw
U2Vzc2lvbiAqc2Vzc2lvbiwgU291cE1lc3NhZ2UgKm1zZykKK3sKKwlTb3VwSFRUUElucHV0U3Ry
ZWFtICpzdHJlYW07CisJU291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXY7CisKKwlnX3Jl
dHVybl92YWxfaWZfZmFpbCAoU09VUF9JU19NRVNTQUdFIChtc2cpLCBOVUxMKTsKKworCXN0cmVh
bSA9IGdfb2JqZWN0X25ldyAoU09VUF9UWVBFX0hUVFBfSU5QVVRfU1RSRUFNLCBOVUxMKTsKKwlw
cml2ID0gU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKworCXBy
aXYtPnNlc3Npb24gPSBnX29iamVjdF9yZWYgKHNlc3Npb24pOworCXByaXYtPmFzeW5jX2NvbnRl
eHQgPSBzb3VwX3Nlc3Npb25fZ2V0X2FzeW5jX2NvbnRleHQgKHNlc3Npb24pOworCXByaXYtPm1z
ZyA9IGdfb2JqZWN0X3JlZiAobXNnKTsKKworCWdfc2lnbmFsX2Nvbm5lY3QgKG1zZywgImdvdF9o
ZWFkZXJzIiwKKwkJCSAgR19DQUxMQkFDSyAoc291cF9odHRwX2lucHV0X3N0cmVhbV9nb3RfaGVh
ZGVycyksIHN0cmVhbSk7CisJZ19zaWduYWxfY29ubmVjdCAobXNnLCAiZ290X2NodW5rIiwKKwkJ
CSAgR19DQUxMQkFDSyAoc291cF9odHRwX2lucHV0X3N0cmVhbV9nb3RfY2h1bmspLCBzdHJlYW0p
OworCWdfc2lnbmFsX2Nvbm5lY3QgKG1zZywgImZpbmlzaGVkIiwKKwkJCSAgR19DQUxMQkFDSyAo
c291cF9odHRwX2lucHV0X3N0cmVhbV9maW5pc2hlZCksIHN0cmVhbSk7CisKKwlzb3VwX2h0dHBf
aW5wdXRfc3RyZWFtX3F1ZXVlX21lc3NhZ2UgKHN0cmVhbSk7CisJcmV0dXJuIHN0cmVhbTsKK30K
Kworc3RhdGljIHZvaWQKK3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ290X2hlYWRlcnMgKFNvdXBN
ZXNzYWdlICptc2csIGdwb2ludGVyIHN0cmVhbSkKK3sKKwlTb3VwSFRUUElucHV0U3RyZWFtUHJp
dmF0ZSAqcHJpdiA9IFNPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7
CisKKwkvKiBJZiB0aGUgc3RhdHVzIGlzIHVuc3VjY2Vzc2Z1bCwgd2UganVzdCBpZ25vcmUgdGhl
IHNpZ25hbCBhbmQgbGV0CisJICogbGlic291cCBrZWVwIGdvaW5nIChldmVudHVhbGx5IGVpdGhl
ciBpdCB3aWxsIHJlcXVldWUgdGhlIHJlcXVlc3QKKwkgKiAoYWZ0ZXIgaGFuZGxpbmcgYXV0aGVu
dGljYXRpb24vcmVkaXJlY3Rpb24pLCBvciBlbHNlIHRoZQorCSAqICJmaW5pc2hlZCIgaGFuZGxl
ciB3aWxsIHJ1bikuCisJICovCisJaWYgKCFTT1VQX1NUQVRVU19JU19TVUNDRVNTRlVMIChtc2ct
PnN0YXR1c19jb2RlKSkKKwkJcmV0dXJuOworCisJcHJpdi0+Z290X2hlYWRlcnMgPSBUUlVFOwor
CWlmICghcHJpdi0+Y2FsbGVyX2J1ZmZlcikgeworCQkvKiBOb3QgcmVhZHkgdG8gcmVhZCB0aGUg
Ym9keSB5ZXQgKi8KKwkJc291cF9zZXNzaW9uX3BhdXNlX21lc3NhZ2UgKHByaXYtPnNlc3Npb24s
IG1zZyk7CisJfQorCisJaWYgKHByaXYtPmdvdF9oZWFkZXJzX2NiKQorCQlwcml2LT5nb3RfaGVh
ZGVyc19jYiAoc3RyZWFtKTsKK30KKworc3RhdGljIHZvaWQKK3NvdXBfaHR0cF9pbnB1dF9zdHJl
YW1fZ290X2NodW5rIChTb3VwTWVzc2FnZSAqbXNnLCBTb3VwQnVmZmVyICpjaHVua19idWZmZXIs
CisJCQkJICBncG9pbnRlciBzdHJlYW0pCit7CisJU291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUg
KnByaXYgPSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOworCWNv
bnN0IGdjaGFyICpjaHVuayA9IGNodW5rX2J1ZmZlci0+ZGF0YTsKKwlnc2l6ZSBjaHVua19zaXpl
ID0gY2h1bmtfYnVmZmVyLT5sZW5ndGg7CisKKwkvKiBXZSBvbmx5IHBheSBhdHRlbnRpb24gdG8g
dGhlIGNodW5rIGlmIGl0J3MgcGFydCBvZiBhIHN1Y2Nlc3NmdWwKKwkgKiByZXNwb25zZS4KKwkg
Ki8KKwlpZiAoIVNPVVBfU1RBVFVTX0lTX1NVQ0NFU1NGVUwgKG1zZy0+c3RhdHVzX2NvZGUpKQor
CQlyZXR1cm47CisKKwkvKiBTYW5pdHkgY2hlY2sgKi8KKwlpZiAocHJpdi0+Y2FsbGVyX2J1ZnNp
emUgPT0gMCB8fCBwcml2LT5sZWZ0b3Zlcl9idWZzaXplICE9IDApCisJCWdfd2FybmluZyAoInNv
dXBfaHR0cF9pbnB1dF9zdHJlYW1fZ290X2NodW5rIGNhbGxlZCBhZ2FpbiBiZWZvcmUgcHJldmlv
dXMgY2h1bmsgd2FzIHByb2Nlc3NlZCIpOworCisJLyogQ29weSB3aGF0IHdlIGNhbiBpbnRvIHBy
aXYtPmNhbGxlcl9idWZmZXIgKi8KKwlpZiAocHJpdi0+Y2FsbGVyX2J1ZnNpemUgLSBwcml2LT5j
YWxsZXJfbnJlYWQgPiAwKSB7CisJCWdzaXplIG5yZWFkID0gTUlOIChjaHVua19zaXplLCBwcml2
LT5jYWxsZXJfYnVmc2l6ZSAtIHByaXYtPmNhbGxlcl9ucmVhZCk7CisKKwkJbWVtY3B5IChwcml2
LT5jYWxsZXJfYnVmZmVyICsgcHJpdi0+Y2FsbGVyX25yZWFkLCBjaHVuaywgbnJlYWQpOworCQlw
cml2LT5jYWxsZXJfbnJlYWQgKz0gbnJlYWQ7CisJCXByaXYtPm9mZnNldCArPSBucmVhZDsKKwkJ
Y2h1bmsgKz0gbnJlYWQ7CisJCWNodW5rX3NpemUgLT0gbnJlYWQ7CisJfQorCisJaWYgKGNodW5r
X3NpemUgPiAwKSB7CisJCS8qIENvcHkgdGhlIHJlc3QgaW50byBwcml2LT5sZWZ0b3Zlcl9idWZm
ZXIuIElmCisJCSAqIHRoZXJlJ3MgYWxyZWFkeSBzb21lIGRhdGEgdGhlcmUsIHJlYWxsb2MgYW5k
CisJCSAqIGFwcGVuZC4gT3RoZXJ3aXNlIGp1c3QgY29weS4KKwkJICovCisJCWlmIChwcml2LT5s
ZWZ0b3Zlcl9idWZzaXplKSB7CisJCQlwcml2LT5sZWZ0b3Zlcl9idWZmZXIgPSBnX3JlYWxsb2Mg
KHByaXYtPmxlZnRvdmVyX2J1ZmZlciwKKwkJCQkJCQkgICBwcml2LT5sZWZ0b3Zlcl9idWZzaXpl
ICsgY2h1bmtfc2l6ZSk7CisJCQltZW1jcHkgKHByaXYtPmxlZnRvdmVyX2J1ZmZlciArIHByaXYt
PmxlZnRvdmVyX2J1ZnNpemUsCisJCQkJY2h1bmssIGNodW5rX3NpemUpOworCQkJcHJpdi0+bGVm
dG92ZXJfYnVmc2l6ZSArPSBjaHVua19zaXplOworCQl9IGVsc2UgeworCQkJcHJpdi0+bGVmdG92
ZXJfYnVmc2l6ZSA9IGNodW5rX3NpemU7CisJCQlwcml2LT5sZWZ0b3Zlcl9idWZmZXIgPSBnX21l
bWR1cCAoY2h1bmssIGNodW5rX3NpemUpOworCQkJcHJpdi0+bGVmdG92ZXJfb2Zmc2V0ID0gMDsK
KwkJfQorCX0KKworCXNvdXBfc2Vzc2lvbl9wYXVzZV9tZXNzYWdlIChwcml2LT5zZXNzaW9uLCBt
c2cpOworCWlmIChwcml2LT5nb3RfY2h1bmtfY2IpCisJCXByaXYtPmdvdF9jaHVua19jYiAoc3Ry
ZWFtKTsKK30KKworc3RhdGljIHZvaWQKK3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZmluaXNoZWQg
KFNvdXBNZXNzYWdlICptc2csIGdwb2ludGVyIHN0cmVhbSkKK3sKKwlTb3VwSFRUUElucHV0U3Ry
ZWFtUHJpdmF0ZSAqcHJpdiA9IFNPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0
cmVhbSk7CisKKwlwcml2LT5maW5pc2hlZCA9IFRSVUU7CisKKwlpZiAocHJpdi0+ZmluaXNoZWRf
Y2IpCisJCXByaXYtPmZpbmlzaGVkX2NiIChzdHJlYW0pOworfQorCitzdGF0aWMgZ2Jvb2xlYW4K
K3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2FuY2VsbGVkIChHSU9DaGFubmVsICpjaGFuLCBHSU9D
b25kaXRpb24gY29uZGl0aW9uLAorCQkJCSAgZ3BvaW50ZXIgc3RyZWFtKQoreworCVNvdXBIVFRQ
SW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJ
VkFURSAoc3RyZWFtKTsKKworCXByaXYtPmNhbmNlbF93YXRjaCA9IE5VTEw7CisKKwlzb3VwX3Nl
c3Npb25fcGF1c2VfbWVzc2FnZSAocHJpdi0+c2Vzc2lvbiwgcHJpdi0+bXNnKTsKKwlpZiAocHJp
di0+Y2FuY2VsbGVkX2NiKQorCQlwcml2LT5jYW5jZWxsZWRfY2IgKHN0cmVhbSk7CisKKwlyZXR1
cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3ByZXBh
cmVfZm9yX2lvIChHSW5wdXRTdHJlYW0gKnN0cmVhbSwKKwkJCQkgICAgICAgR0NhbmNlbGxhYmxl
ICpjYW5jZWxsYWJsZSwKKwkJCQkgICAgICAgZ3VjaGFyICAgICAgICpidWZmZXIsCisJCQkJICAg
ICAgIGdzaXplIGNvdW50KQoreworCVNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0g
U09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKwlpbnQgY2FuY2Vs
X2ZkOworCisJcHJpdi0+Y2FuY2VsbGFibGUgPSBjYW5jZWxsYWJsZTsKKwljYW5jZWxfZmQgPSBn
X2NhbmNlbGxhYmxlX2dldF9mZCAoY2FuY2VsbGFibGUpOworCWlmIChjYW5jZWxfZmQgIT0gLTEp
IHsKKwkJR0lPQ2hhbm5lbCAqY2hhbiA9IGdfaW9fY2hhbm5lbF91bml4X25ldyAoY2FuY2VsX2Zk
KTsKKwkJcHJpdi0+Y2FuY2VsX3dhdGNoID0gc291cF9hZGRfaW9fd2F0Y2ggKHByaXYtPmFzeW5j
X2NvbnRleHQsIGNoYW4sCisJCQkJCQkJR19JT19JTiB8IEdfSU9fRVJSIHwgR19JT19IVVAsCisJ
CQkJCQkJc291cF9odHRwX2lucHV0X3N0cmVhbV9jYW5jZWxsZWQsCisJCQkJCQkJc3RyZWFtKTsK
KwkJZ19pb19jaGFubmVsX3VucmVmIChjaGFuKTsKKwl9CisKKwlwcml2LT5jYWxsZXJfYnVmZmVy
ID0gYnVmZmVyOworCXByaXYtPmNhbGxlcl9idWZzaXplID0gY291bnQ7CisJcHJpdi0+Y2FsbGVy
X25yZWFkID0gMDsKKworCWlmIChwcml2LT5nb3RfaGVhZGVycykKKwkJc291cF9zZXNzaW9uX3Vu
cGF1c2VfbWVzc2FnZSAocHJpdi0+c2Vzc2lvbiwgcHJpdi0+bXNnKTsKK30KKworc3RhdGljIHZv
aWQKK3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZG9uZV9pbyAoR0lucHV0U3RyZWFtICpzdHJlYW0p
Cit7CisJU291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBTT1VQX0hUVFBfSU5QVVRf
U1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOworCisJaWYgKHByaXYtPmNhbmNlbF93YXRjaCkg
eworCQlnX3NvdXJjZV9kZXN0cm95IChwcml2LT5jYW5jZWxfd2F0Y2gpOworCQlwcml2LT5jYW5j
ZWxfd2F0Y2ggPSBOVUxMOworCQlnX2NhbmNlbGxhYmxlX3JlbGVhc2VfZmQgKHByaXYtPmNhbmNl
bGxhYmxlKTsKKwl9CisJcHJpdi0+Y2FuY2VsbGFibGUgPSBOVUxMOworCisJcHJpdi0+Y2FsbGVy
X2J1ZmZlciA9IE5VTEw7CisJcHJpdi0+Y2FsbGVyX2J1ZnNpemUgPSAwOworfQorCitzdGF0aWMg
Z2Jvb2xlYW4KK3NldF9lcnJvcl9pZl9odHRwX2ZhaWxlZCAoU291cE1lc3NhZ2UgKm1zZywgR0Vy
cm9yICoqZXJyb3IpCit7CisJaWYgKCFTT1VQX1NUQVRVU19JU19TVUNDRVNTRlVMIChtc2ctPnN0
YXR1c19jb2RlKSkgeworCQlnX3NldF9lcnJvcl9saXRlcmFsIChlcnJvciwgU09VUF9IVFRQX0VS
Uk9SLAorCQkJCSAgICAgbXNnLT5zdGF0dXNfY29kZSwgbXNnLT5yZWFzb25fcGhyYXNlKTsKKwkJ
cmV0dXJuIFRSVUU7CisJfQorCXJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGdzaXplCityZWFk
X2Zyb21fbGVmdG92ZXIgKFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2LAorCQkgICAg
Z3BvaW50ZXIgYnVmZmVyLCBnc2l6ZSBidWZzaXplKQoreworCWdzaXplIG5yZWFkOworCisJaWYg
KHByaXYtPmxlZnRvdmVyX2J1ZnNpemUgLSBwcml2LT5sZWZ0b3Zlcl9vZmZzZXQgPD0gYnVmc2l6
ZSkgeworCQlucmVhZCA9IHByaXYtPmxlZnRvdmVyX2J1ZnNpemUgLSBwcml2LT5sZWZ0b3Zlcl9v
ZmZzZXQ7CisJCW1lbWNweSAoYnVmZmVyLCBwcml2LT5sZWZ0b3Zlcl9idWZmZXIgKyBwcml2LT5s
ZWZ0b3Zlcl9vZmZzZXQsIG5yZWFkKTsKKworCQlnX2ZyZWUgKHByaXYtPmxlZnRvdmVyX2J1ZmZl
cik7CisJCXByaXYtPmxlZnRvdmVyX2J1ZmZlciA9IE5VTEw7CisJCXByaXYtPmxlZnRvdmVyX2J1
ZnNpemUgPSBwcml2LT5sZWZ0b3Zlcl9vZmZzZXQgPSAwOworCX0gZWxzZSB7CisJCW5yZWFkID0g
YnVmc2l6ZTsKKwkJbWVtY3B5IChidWZmZXIsIHByaXYtPmxlZnRvdmVyX2J1ZmZlciArIHByaXYt
PmxlZnRvdmVyX29mZnNldCwgbnJlYWQpOworCQlwcml2LT5sZWZ0b3Zlcl9vZmZzZXQgKz0gbnJl
YWQ7CisJfQorCisJcHJpdi0+b2Zmc2V0ICs9IG5yZWFkOworCXJldHVybiBucmVhZDsKK30KKwor
LyogVGhpcyBkb2VzIHRoZSB3b3JrIG9mIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZCgpLCBh
c3N1bWluZyB0aGF0IHRoZQorICogR0lucHV0U3RyZWFtIHBlbmRpbmcgZmxhZyBoYXMgYWxyZWFk
eSBiZWVuIHNldC4gSXQgaXMgYWxzbyB1c2VkIGJ5CisgKiBzb3VwX2h0dHBfaW5wdXRfc3RyZWFt
X3NlbmRfYXN5bmMoKSBpbiBzb21lIGNpcmN1bXN0YW5jZXMuCisgKi8KK3N0YXRpYyBnYm9vbGVh
bgorc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2ludGVybmFsIChHSW5wdXRTdHJlYW0gICpz
dHJlYW0sCisJCQkJICAgICAgR0NhbmNlbGxhYmxlICAqY2FuY2VsbGFibGUsCisJCQkJICAgICAg
R0Vycm9yICAgICAgICoqZXJyb3IpCit7CisJU291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnBy
aXYgPSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOworCisJc291
cF9odHRwX2lucHV0X3N0cmVhbV9wcmVwYXJlX2Zvcl9pbyAoc3RyZWFtLCBjYW5jZWxsYWJsZSwg
TlVMTCwgMCk7CisJd2hpbGUgKCFwcml2LT5maW5pc2hlZCAmJiAhcHJpdi0+Z290X2hlYWRlcnMg
JiYKKwkgICAgICAgIWdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkIChjYW5jZWxsYWJsZSkpCisJ
CWdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbiAocHJpdi0+YXN5bmNfY29udGV4dCwgVFJVRSk7CisJ
c291cF9odHRwX2lucHV0X3N0cmVhbV9kb25lX2lvIChzdHJlYW0pOworCisJaWYgKGdfY2FuY2Vs
bGFibGVfc2V0X2Vycm9yX2lmX2NhbmNlbGxlZCAoY2FuY2VsbGFibGUsIGVycm9yKSkKKwkJcmV0
dXJuIEZBTFNFOworCWVsc2UgaWYgKHNldF9lcnJvcl9pZl9odHRwX2ZhaWxlZCAocHJpdi0+bXNn
LCBlcnJvcikpCisJCXJldHVybiBGQUxTRTsKKwlyZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZv
aWQKK3NlbmRfc3luY19maW5pc2hlZCAoR0lucHV0U3RyZWFtICpzdHJlYW0pCit7CisJU291cEhU
VFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9Q
UklWQVRFIChzdHJlYW0pOworCUdFcnJvciAqZXJyb3IgPSBOVUxMOworCisJaWYgKCFnX2NhbmNl
bGxhYmxlX3NldF9lcnJvcl9pZl9jYW5jZWxsZWQgKHByaXYtPmNhbmNlbGxhYmxlLCAmZXJyb3Ip
KQorCQlzZXRfZXJyb3JfaWZfaHR0cF9mYWlsZWQgKHByaXYtPm1zZywgJmVycm9yKTsKKworCXBy
aXYtPmdvdF9oZWFkZXJzX2NiID0gTlVMTDsKKwlwcml2LT5maW5pc2hlZF9jYiA9IE5VTEw7CisK
KwkvKiBXYWtlIHVwIHRoZSBtYWluIGNvbnRleHQgaXRlcmF0aW9uICovCisJZ19zb3VyY2VfYXR0
YWNoIChnX2lkbGVfc291cmNlX25ldyAoKSwgTlVMTCk7Cit9CisKKy8qKgorICogc291cF9odHRw
X2lucHV0X3N0cmVhbV9zZW5kOgorICogQGh0dHBzdHJlYW06IGEgI1NvdXBIVFRQSW5wdXRTdHJl
YW0KKyAqIEBjYW5jZWxsYWJsZTogb3B0aW9uYWwgI0dDYW5jZWxsYWJsZSBvYmplY3QsICVOVUxM
IHRvIGlnbm9yZS4KKyAqIEBlcnJvcjogbG9jYXRpb24gdG8gc3RvcmUgdGhlIGVycm9yIG9jY3Vy
aW5nLCBvciAlTlVMTCB0byBpZ25vcmUKKyAqCisgKiBTeW5jaHJvbm91c2x5IHNlbmRzIHRoZSBI
VFRQIHJlcXVlc3QgYXNzb2NpYXRlZCB3aXRoIEBzdHJlYW0sIGFuZAorICogcmVhZHMgdGhlIHJl
c3BvbnNlIGhlYWRlcnMuIENhbGwgdGhpcyBhZnRlciBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX25l
dygpCisgKiBhbmQgYmVmb3JlIHRoZSBmaXJzdCBnX2lucHV0X3N0cmVhbV9yZWFkKCkgaWYgeW91
IHdhbnQgdG8gY2hlY2sgdGhlCisgKiBIVFRQIHN0YXR1cyBjb2RlIGJlZm9yZSB5b3Ugc3RhcnQg
cmVhZGluZy4KKyAqCisgKiBSZXR1cm4gdmFsdWU6ICVUUlVFIGlmIG1zZyBoYXMgYSBzdWNjZXNz
ZnVsICgyeHgpIHN0YXR1cywgJUZBTFNFIGlmCisgKiBub3QuCisgKiovCitnYm9vbGVhbgorc291
cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kIChTb3VwSFRUUElucHV0U3RyZWFtICAqaHR0cHN0cmVh
bSwKKwkJCSAgICAgR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJICAgICBH
RXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpCit7CisJU291cEhUVFBJbnB1dFN0cmVhbVByaXZh
dGUgKnByaXYgPSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChodHRwc3RyZWFt
KTsKKwlHSW5wdXRTdHJlYW0gKmlzdHJlYW0gPSAoR0lucHV0U3RyZWFtICopaHR0cHN0cmVhbTsK
KwlnYm9vbGVhbiByZXN1bHQ7CisKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoU09VUF9JU19IVFRQ
X0lOUFVUX1NUUkVBTSAoaHR0cHN0cmVhbSksIEZBTFNFKTsKKworCWlmICghZ19pbnB1dF9zdHJl
YW1fc2V0X3BlbmRpbmcgKGlzdHJlYW0sIGVycm9yKSkKKwkJcmV0dXJuIEZBTFNFOworCisJcHJp
di0+Z290X2hlYWRlcnNfY2IgPSBzZW5kX3N5bmNfZmluaXNoZWQ7CisJcHJpdi0+ZmluaXNoZWRf
Y2IgPSBzZW5kX3N5bmNfZmluaXNoZWQ7CisKKwlyZXN1bHQgPSBzb3VwX2h0dHBfaW5wdXRfc3Ry
ZWFtX3NlbmRfaW50ZXJuYWwgKGlzdHJlYW0sIGNhbmNlbGxhYmxlLCBlcnJvcik7CisJZ19pbnB1
dF9zdHJlYW1fY2xlYXJfcGVuZGluZyAoaXN0cmVhbSk7CisKKwlyZXR1cm4gcmVzdWx0OworfQor
CitzdGF0aWMgZ3NzaXplCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWQgKEdJbnB1dFN0cmVh
bSAqc3RyZWFtLAorCQkJICAgICB2b2lkICAgICAgICAgKmJ1ZmZlciwKKwkJCSAgICAgZ3NpemUg
Y291bnQsCisJCQkgICAgIEdDYW5jZWxsYWJsZSAqY2FuY2VsbGFibGUsCisJCQkgICAgIEdFcnJv
ciAgICAgICoqZXJyb3IpCit7CisJU291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBT
T1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOworCisJaWYgKHByaXYt
PmZpbmlzaGVkKQorCQlyZXR1cm4gMDsKKworCS8qIElmIHRoZXJlIGlzIGRhdGEgbGVmdG92ZXIg
ZnJvbSBhIHByZXZpb3VzIHJlYWQsIHJldHVybiBpdC4gKi8KKwlpZiAocHJpdi0+bGVmdG92ZXJf
YnVmc2l6ZSkKKwkJcmV0dXJuIHJlYWRfZnJvbV9sZWZ0b3ZlciAocHJpdiwgYnVmZmVyLCBjb3Vu
dCk7CisKKwkvKiBObyBsZWZ0b3ZlciBkYXRhLCBhY2NlcHQgb25lIGNodW5rIGZyb20gdGhlIG5l
dHdvcmsgKi8KKwlzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3ByZXBhcmVfZm9yX2lvIChzdHJlYW0s
IGNhbmNlbGxhYmxlLCBidWZmZXIsIGNvdW50KTsKKwl3aGlsZSAoIXByaXYtPmZpbmlzaGVkICYm
IHByaXYtPmNhbGxlcl9ucmVhZCA9PSAwICYmCisJICAgICAgICFnX2NhbmNlbGxhYmxlX2lzX2Nh
bmNlbGxlZCAoY2FuY2VsbGFibGUpKQorCQlnX21haW5fY29udGV4dF9pdGVyYXRpb24gKHByaXYt
PmFzeW5jX2NvbnRleHQsIFRSVUUpOworCXNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZG9uZV9pbyAo
c3RyZWFtKTsKKworCWlmIChwcml2LT5jYWxsZXJfbnJlYWQgPiAwKQorCQlyZXR1cm4gcHJpdi0+
Y2FsbGVyX25yZWFkOworCisJaWYgKGdfY2FuY2VsbGFibGVfc2V0X2Vycm9yX2lmX2NhbmNlbGxl
ZCAoY2FuY2VsbGFibGUsIGVycm9yKSkKKwkJcmV0dXJuIC0xOworCWVsc2UgaWYgKHNldF9lcnJv
cl9pZl9odHRwX2ZhaWxlZCAocHJpdi0+bXNnLCBlcnJvcikpCisJCXJldHVybiAtMTsKKwllbHNl
CisJCXJldHVybiAwOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3NvdXBfaHR0cF9pbnB1dF9zdHJl
YW1fY2xvc2UgKEdJbnB1dFN0cmVhbSAqc3RyZWFtLAorCQkJICAgICAgR0NhbmNlbGxhYmxlICpj
YW5jZWxsYWJsZSwKKwkJCSAgICAgIEdFcnJvciAgICAgICoqZXJyb3IpCit7CisJU291cEhUVFBJ
bnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklW
QVRFIChzdHJlYW0pOworCisJaWYgKCFwcml2LT5maW5pc2hlZCkKKwkJc291cF9zZXNzaW9uX2Nh
bmNlbF9tZXNzYWdlIChwcml2LT5zZXNzaW9uLCBwcml2LT5tc2csIFNPVVBfU1RBVFVTX0NBTkNF
TExFRCk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQKK3dyYXBwZXJfY2FsbGJh
Y2sgKEdPYmplY3QgKnNvdXJjZV9vYmplY3QsIEdBc3luY1Jlc3VsdCAqcmVzLAorCQkgIGdwb2lu
dGVyIHVzZXJfZGF0YSkKK3sKKwlHSW5wdXRTdHJlYW0gKnN0cmVhbSA9IEdfSU5QVVRfU1RSRUFN
IChzb3VyY2Vfb2JqZWN0KTsKKwlTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFNP
VVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7CisKKwlnX2lucHV0X3N0
cmVhbV9jbGVhcl9wZW5kaW5nIChzdHJlYW0pOworCWlmIChwcml2LT5vdXRzdGFuZGluZ19jYWxs
YmFjaykKKwkJKCpwcml2LT5vdXRzdGFuZGluZ19jYWxsYmFjaykoc291cmNlX29iamVjdCwgcmVz
LCB1c2VyX2RhdGEpOworCXByaXYtPm91dHN0YW5kaW5nX2NhbGxiYWNrID0gTlVMTDsKKwlnX29i
amVjdF91bnJlZiAoc3RyZWFtKTsKK30KKworc3RhdGljIHZvaWQKK3NlbmRfYXN5bmNfdGhyZWFk
IChHU2ltcGxlQXN5bmNSZXN1bHQgKnJlcywKKwkJICAgR09iamVjdCAqb2JqZWN0LAorCQkgICBH
Q2FuY2VsbGFibGUgKmNhbmNlbGxhYmxlKQoreworCUdFcnJvciAqZXJyb3IgPSBOVUxMOworCWdi
b29sZWFuIHN1Y2Nlc3M7CisKKwlzdWNjZXNzID0gc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5k
X2ludGVybmFsIChHX0lOUFVUX1NUUkVBTSAob2JqZWN0KSwKKwkJCQkJCQljYW5jZWxsYWJsZSwg
JmVycm9yKTsKKwlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19nYm9vbGVhbiAocmVz
LCBzdWNjZXNzKTsKKwlpZiAoZXJyb3IpIHsKKwkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9m
cm9tX2Vycm9yIChyZXMsIGVycm9yKTsKKwkJZ19lcnJvcl9mcmVlIChlcnJvcik7CisJfQorfQor
CitzdGF0aWMgdm9pZAorc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jX2luX3RocmVh
ZCAoR0lucHV0U3RyZWFtICAgICAgICAqc3RyZWFtLAorCQkJCQkgICAgIGludCBpb19wcmlvcml0
eSwKKwkJCQkJICAgICBHQ2FuY2VsbGFibGUgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkJICAg
ICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAorCQkJCQkgICAgIGdwb2ludGVyIHVzZXJf
ZGF0YSkKK3sKKwlHU2ltcGxlQXN5bmNSZXN1bHQgKnJlczsKKworCXJlcyA9IGdfc2ltcGxlX2Fz
eW5jX3Jlc3VsdF9uZXcgKEdfT0JKRUNUIChzdHJlYW0pLCBjYWxsYmFjaywgdXNlcl9kYXRhLAor
CQkJCQkgc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jX2luX3RocmVhZCk7CisJZ19z
aW1wbGVfYXN5bmNfcmVzdWx0X3J1bl9pbl90aHJlYWQgKHJlcywgc2VuZF9hc3luY190aHJlYWQs
CisJCQkJCSAgICAgaW9fcHJpb3JpdHksIGNhbmNlbGxhYmxlKTsKKwlnX29iamVjdF91bnJlZiAo
cmVzKTsKK30KKworc3RhdGljIHZvaWQKK3NlbmRfYXN5bmNfZmluaXNoZWQgKEdJbnB1dFN0cmVh
bSAqc3RyZWFtKQoreworCVNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gU09VUF9I
VFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKwlHU2ltcGxlQXN5bmNSZXN1
bHQgKnJlc3VsdDsKKwlHRXJyb3IgKmVycm9yID0gTlVMTDsKKworCWlmICghZ19jYW5jZWxsYWJs
ZV9zZXRfZXJyb3JfaWZfY2FuY2VsbGVkIChwcml2LT5jYW5jZWxsYWJsZSwgJmVycm9yKSkKKwkJ
c2V0X2Vycm9yX2lmX2h0dHBfZmFpbGVkIChwcml2LT5tc2csICZlcnJvcik7CisKKwlwcml2LT5n
b3RfaGVhZGVyc19jYiA9IE5VTEw7CisJcHJpdi0+ZmluaXNoZWRfY2IgPSBOVUxMOworCXNvdXBf
aHR0cF9pbnB1dF9zdHJlYW1fZG9uZV9pbyAoc3RyZWFtKTsKKworCXJlc3VsdCA9IHByaXYtPnJl
c3VsdDsKKwlwcml2LT5yZXN1bHQgPSBOVUxMOworCisJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3Nl
dF9vcF9yZXNfZ2Jvb2xlYW4gKHJlc3VsdCwgZXJyb3IgPT0gTlVMTCk7CisJaWYgKGVycm9yKSB7
CisJCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfZnJvbV9lcnJvciAocmVzdWx0LCBlcnJvcik7
CisJCWdfZXJyb3JfZnJlZSAoZXJyb3IpOworCX0KKwlnX3NpbXBsZV9hc3luY19yZXN1bHRfY29t
cGxldGUgKHJlc3VsdCk7Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFt
X3NlbmRfYXN5bmNfaW50ZXJuYWwgKEdJbnB1dFN0cmVhbSAgICAgICAgKnN0cmVhbSwKKwkJCQkJ
ICAgIGludCBpb19wcmlvcml0eSwKKwkJCQkJICAgIEdDYW5jZWxsYWJsZSAgICAgICAgKmNhbmNl
bGxhYmxlLAorCQkJCQkgICAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKKwkJCQkJICAg
IGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJp
diA9IFNPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7CisKKwlnX29i
amVjdF9yZWYgKHN0cmVhbSk7CisJcHJpdi0+b3V0c3RhbmRpbmdfY2FsbGJhY2sgPSBjYWxsYmFj
azsKKworCS8qIElmIHRoZSBzZXNzaW9uIHVzZXMgdGhlIGRlZmF1bHQgR01haW5Db250ZXh0LCB0
aGVuIHdlIGNhbiBkbworCSAqIGFzeW5jIEkvTyBkaXJlY3RseS4gQnV0IGlmIGl0IGhhcyBpdHMg
b3duIG1haW4gY29udGV4dCwgaXQncworCSAqIGVhc2llciB0byBqdXN0IHJ1biBpdCBpbiBhbm90
aGVyIHRocmVhZC4KKwkgKi8KKwlpZiAoc291cF9zZXNzaW9uX2dldF9hc3luY19jb250ZXh0IChw
cml2LT5zZXNzaW9uKSkgeworCQlzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmNfaW5f
dGhyZWFkIChzdHJlYW0sIGlvX3ByaW9yaXR5LCBjYW5jZWxsYWJsZSwKKwkJCQkJCQkgICAgIHdy
YXBwZXJfY2FsbGJhY2ssIHVzZXJfZGF0YSk7CisJCXJldHVybjsKKwl9CisKKwlwcml2LT5nb3Rf
aGVhZGVyc19jYiA9IHNlbmRfYXN5bmNfZmluaXNoZWQ7CisJcHJpdi0+ZmluaXNoZWRfY2IgPSBz
ZW5kX2FzeW5jX2ZpbmlzaGVkOworCisJc291cF9odHRwX2lucHV0X3N0cmVhbV9wcmVwYXJlX2Zv
cl9pbyAoc3RyZWFtLCBjYW5jZWxsYWJsZSwgTlVMTCwgMCk7CisJcHJpdi0+cmVzdWx0ID0gZ19z
aW1wbGVfYXN5bmNfcmVzdWx0X25ldyAoR19PQkpFQ1QgKHN0cmVhbSksCisJCQkJCQkgIHdyYXBw
ZXJfY2FsbGJhY2ssIHVzZXJfZGF0YSwKKwkJCQkJCSAgc291cF9odHRwX2lucHV0X3N0cmVhbV9z
ZW5kX2FzeW5jKTsKK30KKworLyoqCisgKiBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5
bmM6CisgKiBAaHR0cHN0cmVhbTogYSAjU291cEhUVFBJbnB1dFN0cmVhbQorICogQGlvX3ByaW9y
aXR5OiB0aGUgaW8gcHJpb3JpdHkgb2YgdGhlIHJlcXVlc3QuCisgKiBAY2FuY2VsbGFibGU6IG9w
dGlvbmFsICNHQ2FuY2VsbGFibGUgb2JqZWN0LCAlTlVMTCB0byBpZ25vcmUuCisgKiBAY2FsbGJh
Y2s6IGNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgcmVxdWVzdCBpcyBzYXRpc2ZpZWQKKyAqIEB1
c2VyX2RhdGE6IHRoZSBkYXRhIHRvIHBhc3MgdG8gY2FsbGJhY2sgZnVuY3Rpb24KKyAqCisgKiBB
c3luY2hyb25vdXNseSBzZW5kcyB0aGUgSFRUUCByZXF1ZXN0IGFzc29jaWF0ZWQgd2l0aCBAc3Ry
ZWFtLCBhbmQKKyAqIHJlYWRzIHRoZSByZXNwb25zZSBoZWFkZXJzLiBDYWxsIHRoaXMgYWZ0ZXIg
c291cF9odHRwX2lucHV0X3N0cmVhbV9uZXcoKQorICogYW5kIGJlZm9yZSB0aGUgZmlyc3QgZ19p
bnB1dF9zdHJlYW1fcmVhZF9hc3luYygpIGlmIHlvdSB3YW50IHRvCisgKiBjaGVjayB0aGUgSFRU
UCBzdGF0dXMgY29kZSBiZWZvcmUgeW91IHN0YXJ0IHJlYWRpbmcuCisgKiovCit2b2lkCitzb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmMgKFNvdXBIVFRQSW5wdXRTdHJlYW0gKmh0dHBz
dHJlYW0sCisJCQkJICAgaW50IGlvX3ByaW9yaXR5LAorCQkJCSAgIEdDYW5jZWxsYWJsZSAgICAg
ICAgKmNhbmNlbGxhYmxlLAorCQkJCSAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCisJ
CQkJICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCUdJbnB1dFN0cmVhbSAqaXN0cmVhbSA9IChH
SW5wdXRTdHJlYW0gKilodHRwc3RyZWFtOworCUdFcnJvciAqZXJyb3IgPSBOVUxMOworCisJZ19y
ZXR1cm5faWZfZmFpbCAoU09VUF9JU19IVFRQX0lOUFVUX1NUUkVBTSAoaHR0cHN0cmVhbSkpOwor
CisJaWYgKCFnX2lucHV0X3N0cmVhbV9zZXRfcGVuZGluZyAoaXN0cmVhbSwgJmVycm9yKSkgewor
CQlnX3NpbXBsZV9hc3luY19yZXBvcnRfZ2Vycm9yX2luX2lkbGUgKEdfT0JKRUNUIChodHRwc3Ry
ZWFtKSwKKwkJCQkJCSAgICAgIGNhbGxiYWNrLAorCQkJCQkJICAgICAgdXNlcl9kYXRhLAorCQkJ
CQkJICAgICAgZXJyb3IpOworCQlnX2Vycm9yX2ZyZWUgKGVycm9yKTsKKwkJcmV0dXJuOworCX0K
Kwlzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmNfaW50ZXJuYWwgKGlzdHJlYW0sIGlv
X3ByaW9yaXR5LCBjYW5jZWxsYWJsZSwKKwkJCQkJCSAgICBjYWxsYmFjaywgdXNlcl9kYXRhKTsK
K30KKworLyoqCisgKiBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfZmluaXNoOgorICogQGh0
dHBzdHJlYW06IGEgI1NvdXBIVFRQSW5wdXRTdHJlYW0KKyAqIEByZXN1bHQ6IGEgI0dBc3luY1Jl
c3VsdC4KKyAqIEBlcnJvcjogYSAjR0Vycm9yIGxvY2F0aW9uIHRvIHN0b3JlIHRoZSBlcnJvciBv
Y2N1cmluZywgb3IgJU5VTEwgdG8KKyAqIGlnbm9yZS4KKyAqCisgKiBGaW5pc2hlcyBhIHNvdXBf
aHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luYygpIG9wZXJhdGlvbi4KKyAqCisgKiBSZXR1cm4g
dmFsdWU6ICVUUlVFIGlmIHRoZSBtZXNzYWdlIHdhcyBzZW50IHN1Y2Nlc3NmdWxseSBhbmQKKyAq
IHJlY2VpdmVkIGEgc3VjY2Vzc2Z1bCBzdGF0dXMgY29kZSwgJUZBTFNFIGlmIG5vdC4KKyAqKi8K
K2dib29sZWFuCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfZmluaXNoIChTb3VwSFRUUElu
cHV0U3RyZWFtICAqaHR0cHN0cmVhbSwKKwkJCQkgICAgR0FzeW5jUmVzdWx0ICAgICAgICAgKnJl
c3VsdCwKKwkJCQkgICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKQoreworCUdTaW1wbGVB
c3luY1Jlc3VsdCAqc2ltcGxlOworCisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfSVNfU0lNUExF
X0FTWU5DX1JFU1VMVCAocmVzdWx0KSwgRkFMU0UpOworCXNpbXBsZSA9IEdfU0lNUExFX0FTWU5D
X1JFU1VMVCAocmVzdWx0KTsKKworCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnX3NpbXBsZV9hc3lu
Y19yZXN1bHRfZ2V0X3NvdXJjZV90YWcgKHNpbXBsZSkgPT0gc291cF9odHRwX2lucHV0X3N0cmVh
bV9zZW5kX2FzeW5jLCBGQUxTRSk7CisKKwlpZiAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3Byb3Bh
Z2F0ZV9lcnJvciAoc2ltcGxlLCBlcnJvcikpCisJCXJldHVybiBGQUxTRTsKKworCXJldHVybiBn
X3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X29wX3Jlc19nYm9vbGVhbiAoc2ltcGxlKTsKK30KKwor
c3RhdGljIHZvaWQKK3JlYWRfYXN5bmNfZG9uZSAoR0lucHV0U3RyZWFtICpzdHJlYW0pCit7CisJ
U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFN
X0dFVF9QUklWQVRFIChzdHJlYW0pOworCUdTaW1wbGVBc3luY1Jlc3VsdCAqcmVzdWx0OworCUdF
cnJvciAqZXJyb3IgPSBOVUxMOworCisJcmVzdWx0ID0gcHJpdi0+cmVzdWx0OworCXByaXYtPnJl
c3VsdCA9IE5VTEw7CisKKwlpZiAoZ19jYW5jZWxsYWJsZV9zZXRfZXJyb3JfaWZfY2FuY2VsbGVk
IChwcml2LT5jYW5jZWxsYWJsZSwgJmVycm9yKSB8fAorCSAgICBzZXRfZXJyb3JfaWZfaHR0cF9m
YWlsZWQgKHByaXYtPm1zZywgJmVycm9yKSkgeworCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0
X2Zyb21fZXJyb3IgKHJlc3VsdCwgZXJyb3IpOworCQlnX2Vycm9yX2ZyZWUgKGVycm9yKTsKKwl9
IGVsc2UKKwkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ3NzaXplIChyZXN1bHQs
IHByaXYtPmNhbGxlcl9ucmVhZCk7CisKKwlwcml2LT5nb3RfY2h1bmtfY2IgPSBOVUxMOworCXBy
aXYtPmZpbmlzaGVkX2NiID0gTlVMTDsKKwlwcml2LT5jYW5jZWxsZWRfY2IgPSBOVUxMOworCXNv
dXBfaHR0cF9pbnB1dF9zdHJlYW1fZG9uZV9pbyAoc3RyZWFtKTsKKworCWdfc2ltcGxlX2FzeW5j
X3Jlc3VsdF9jb21wbGV0ZSAocmVzdWx0KTsKKwlnX29iamVjdF91bnJlZiAocmVzdWx0KTsKK30K
Kworc3RhdGljIHZvaWQKK3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyAoR0lucHV0
U3RyZWFtICAgICAgICAqc3RyZWFtLAorCQkJCSAgIHZvaWQgICAgICAgICAgICAgICAgKmJ1ZmZl
ciwKKwkJCQkgICBnc2l6ZSBjb3VudCwKKwkJCQkgICBpbnQgaW9fcHJpb3JpdHksCisJCQkJICAg
R0NhbmNlbGxhYmxlICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJICAgR0FzeW5jUmVhZHlDYWxs
YmFjayBjYWxsYmFjaywKKwkJCQkgICBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJU291cEhUVFBJ
bnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklW
QVRFIChzdHJlYW0pOworCUdTaW1wbGVBc3luY1Jlc3VsdCAqcmVzdWx0OworCisJLyogSWYgdGhl
IHNlc3Npb24gdXNlcyB0aGUgZGVmYXVsdCBHTWFpbkNvbnRleHQsIHRoZW4gd2UgY2FuIGRvCisJ
ICogYXN5bmMgSS9PIGRpcmVjdGx5LiBCdXQgaWYgaXQgaGFzIGl0cyBvd24gbWFpbiBjb250ZXh0
LCB3ZSBmYWxsCisJICogYmFjayB0byB0aGUgYXN5bmMtdmlhLXN5bmMtaW4tYW5vdGhlci10aHJl
YWQgaW1wbGVtZW50YXRpb24uCisJICovCisJaWYgKHNvdXBfc2Vzc2lvbl9nZXRfYXN5bmNfY29u
dGV4dCAocHJpdi0+c2Vzc2lvbikpIHsKKwkJR19JTlBVVF9TVFJFQU1fQ0xBU1MgKHNvdXBfaHR0
cF9pbnB1dF9zdHJlYW1fcGFyZW50X2NsYXNzKS0+CisJCXJlYWRfYXN5bmMgKHN0cmVhbSwgYnVm
ZmVyLCBjb3VudCwgaW9fcHJpb3JpdHksCisJCQkgICAgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1
c2VyX2RhdGEpOworCQlyZXR1cm47CisJfQorCisJcmVzdWx0ID0gZ19zaW1wbGVfYXN5bmNfcmVz
dWx0X25ldyAoR19PQkpFQ1QgKHN0cmVhbSksCisJCQkJCSAgICBjYWxsYmFjaywgdXNlcl9kYXRh
LAorCQkJCQkgICAgc291cF9odHRwX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jKTsKKworCWlmIChw
cml2LT5maW5pc2hlZCkgeworCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19nc3Np
emUgKHJlc3VsdCwgMCk7CisJCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZV9pbl9pZGxl
IChyZXN1bHQpOworCQlnX29iamVjdF91bnJlZiAocmVzdWx0KTsKKwkJcmV0dXJuOworCX0KKwor
CWlmIChwcml2LT5sZWZ0b3Zlcl9idWZzaXplKSB7CisJCWdzaXplIG5yZWFkID0gcmVhZF9mcm9t
X2xlZnRvdmVyIChwcml2LCBidWZmZXIsIGNvdW50KTsKKwkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0
X3NldF9vcF9yZXNfZ3NzaXplIChyZXN1bHQsIG5yZWFkKTsKKwkJZ19zaW1wbGVfYXN5bmNfcmVz
dWx0X2NvbXBsZXRlX2luX2lkbGUgKHJlc3VsdCk7CisJCWdfb2JqZWN0X3VucmVmIChyZXN1bHQp
OworCQlyZXR1cm47CisJfQorCisJcHJpdi0+cmVzdWx0ID0gcmVzdWx0OworCisJcHJpdi0+Z290
X2NodW5rX2NiID0gcmVhZF9hc3luY19kb25lOworCXByaXYtPmZpbmlzaGVkX2NiID0gcmVhZF9h
c3luY19kb25lOworCXByaXYtPmNhbmNlbGxlZF9jYiA9IHJlYWRfYXN5bmNfZG9uZTsKKwlzb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX3ByZXBhcmVfZm9yX2lvIChzdHJlYW0sIGNhbmNlbGxhYmxlLCBi
dWZmZXIsIGNvdW50KTsKK30KKworc3RhdGljIGdzc2l6ZQorc291cF9odHRwX2lucHV0X3N0cmVh
bV9yZWFkX2ZpbmlzaCAoR0lucHV0U3RyZWFtICAqc3RyZWFtLAorCQkJCSAgICBHQXN5bmNSZXN1
bHQgICpyZXN1bHQsCisJCQkJICAgIEdFcnJvciAgICAgICAqKmVycm9yKQoreworCUdTaW1wbGVB
c3luY1Jlc3VsdCAqc2ltcGxlOworCisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfSVNfU0lNUExF
X0FTWU5DX1JFU1VMVCAocmVzdWx0KSwgLTEpOworCXNpbXBsZSA9IEdfU0lNUExFX0FTWU5DX1JF
U1VMVCAocmVzdWx0KTsKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoZ19zaW1wbGVfYXN5bmNfcmVz
dWx0X2dldF9zb3VyY2VfdGFnIChzaW1wbGUpID09IHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVh
ZF9hc3luYywgLTEpOworCisJcmV0dXJuIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfb3BfcmVz
X2dzc2l6ZSAoc2ltcGxlKTsKK30KKworc3RhdGljIHZvaWQKK3NvdXBfaHR0cF9pbnB1dF9zdHJl
YW1fY2xvc2VfYXN5bmMgKEdJbnB1dFN0cmVhbSAgICAgICAqc3RyZWFtLAorCQkJCSAgICBpbnQg
aW9fcHJpb3JpdHksCisJCQkJICAgIEdDYW5jZWxsYWJsZSAgICAgICAqY2FuY2VsbGFibGUsCisJ
CQkJICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCisJCQkJICAgIGdwb2ludGVyIHVz
ZXJfZGF0YSkKK3sKKwlHU2ltcGxlQXN5bmNSZXN1bHQgKnJlc3VsdDsKKwlnYm9vbGVhbiBzdWNj
ZXNzOworCUdFcnJvciAqZXJyb3IgPSBOVUxMOworCisJcmVzdWx0ID0gZ19zaW1wbGVfYXN5bmNf
cmVzdWx0X25ldyAoR19PQkpFQ1QgKHN0cmVhbSksCisJCQkJCSAgICBjYWxsYmFjaywgdXNlcl9k
YXRhLAorCQkJCQkgICAgc291cF9odHRwX2lucHV0X3N0cmVhbV9jbG9zZV9hc3luYyk7CisJc3Vj
Y2VzcyA9IHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2UgKHN0cmVhbSwgY2FuY2VsbGFibGUs
ICZlcnJvcik7CisJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ2Jvb2xlYW4gKHJl
c3VsdCwgc3VjY2Vzcyk7CisJaWYgKGVycm9yKSB7CisJCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9z
ZXRfZnJvbV9lcnJvciAocmVzdWx0LCBlcnJvcik7CisJCWdfZXJyb3JfZnJlZSAoZXJyb3IpOwor
CX0KKworCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZV9pbl9pZGxlIChyZXN1bHQpOwor
CWdfb2JqZWN0X3VucmVmIChyZXN1bHQpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3NvdXBfaHR0
cF9pbnB1dF9zdHJlYW1fY2xvc2VfZmluaXNoIChHSW5wdXRTdHJlYW0gICpzdHJlYW0sCisJCQkJ
ICAgICBHQXN5bmNSZXN1bHQgICpyZXN1bHQsCisJCQkJICAgICBHRXJyb3IgICAgICAgKiplcnJv
cikKK3sKKwkvKiBGYWlsdXJlcyBoYW5kbGVkIGluIGdlbmVyaWMgY2xvc2VfZmluaXNoIGNvZGUg
Ki8KKwlyZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdvZmZzZXQKK3NvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fdGVsbCAoR1NlZWthYmxlICpzZWVrYWJsZSkKK3sKKwlTb3VwSFRUUElucHV0U3RyZWFt
UHJpdmF0ZSAqcHJpdiA9IFNPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHNlZWth
YmxlKTsKKworCXJldHVybiBwcml2LT5vZmZzZXQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorc291
cF9odHRwX2lucHV0X3N0cmVhbV9jYW5fc2VlayAoR1NlZWthYmxlICpzZWVrYWJsZSkKK3sKKwly
ZXR1cm4gVFJVRTsKK30KKworZXh0ZXJuIHZvaWQgc291cF9tZXNzYWdlX2lvX2NsZWFudXAgKFNv
dXBNZXNzYWdlICptc2cpOworCitzdGF0aWMgZ2Jvb2xlYW4KK3NvdXBfaHR0cF9pbnB1dF9zdHJl
YW1fc2VlayAoR1NlZWthYmxlICAgICAqc2Vla2FibGUsCisJCQkgICAgIGdvZmZzZXQgb2Zmc2V0
LAorCQkJICAgICBHU2Vla1R5cGUgdHlwZSwKKwkJCSAgICAgR0NhbmNlbGxhYmxlICAqY2FuY2Vs
bGFibGUsCisJCQkgICAgIEdFcnJvciAgICAgICAqKmVycm9yKQoreworCUdJbnB1dFN0cmVhbSAq
c3RyZWFtID0gR19JTlBVVF9TVFJFQU0gKHNlZWthYmxlKTsKKwlTb3VwSFRUUElucHV0U3RyZWFt
UHJpdmF0ZSAqcHJpdiA9IFNPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHNlZWth
YmxlKTsKKwljaGFyICpyYW5nZTsKKworCWlmICh0eXBlID09IEdfU0VFS19FTkQpIHsKKwkJLyog
RklYTUU6IHdlIGNvdWxkIHNlbmQgImJ5dGVzPS1vZmZzZXQiLCBidXQgdW5sZXNzIHdlCisJCSAq
IGtub3cgdGhlIENvbnRlbnQtTGVuZ3RoLCB3ZSB3b3VsZG4ndCBiZSBhYmxlIHRvCisJCSAqIGFu
c3dlciBhIHRlbGwoKSBwcm9wZXJseS4gV2UgY291bGQgZmluZCB0aGUKKwkJICogQ29udGVudC1M
ZW5ndGggYnkgZG9pbmcgYSBIRUFELi4uCisJCSAqLworCisJCWdfc2V0X2Vycm9yX2xpdGVyYWwg
KGVycm9yLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX05PVF9TVVBQT1JURUQsCisJCQkJICAgICAi
R19TRUVLX0VORCBub3QgY3VycmVudGx5IHN1cHBvcnRlZCIpOworCQlyZXR1cm4gRkFMU0U7CisJ
fQorCisJaWYgKCFnX2lucHV0X3N0cmVhbV9zZXRfcGVuZGluZyAoc3RyZWFtLCBlcnJvcikpCisJ
CXJldHVybiBGQUxTRTsKKworCXNvdXBfc2Vzc2lvbl9jYW5jZWxfbWVzc2FnZSAocHJpdi0+c2Vz
c2lvbiwgcHJpdi0+bXNnLCBTT1VQX1NUQVRVU19DQU5DRUxMRUQpOworCXNvdXBfbWVzc2FnZV9p
b19jbGVhbnVwIChwcml2LT5tc2cpOworCisJc3dpdGNoICh0eXBlKSB7CisJCWNhc2UgR19TRUVL
X0NVUjoKKwkJCW9mZnNldCArPSBwcml2LT5vZmZzZXQ7CisJCS8qIGZhbGwgdGhyb3VnaCAqLwor
CisJCWNhc2UgR19TRUVLX1NFVDoKKwkJCXJhbmdlID0gZ19zdHJkdXBfcHJpbnRmICgiYnl0ZXM9
JSIgR19HVUlOVDY0X0ZPUk1BVCAiLSIsIChndWludDY0KW9mZnNldCk7CisJCQlwcml2LT5vZmZz
ZXQgPSBvZmZzZXQ7CisJCQlicmVhazsKKworCQljYXNlIEdfU0VFS19FTkQ6CisJCQlyYW5nZSA9
IE5VTEw7IC8qIGtlZXAgY29tcGlsZXJzIGhhcHB5ICovCisJCQlnX3JldHVybl92YWxfaWZfcmVh
Y2hlZCAoRkFMU0UpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWdfcmV0dXJuX3ZhbF9p
Zl9yZWFjaGVkIChGQUxTRSk7CisJfQorCisJc291cF9tZXNzYWdlX2hlYWRlcnNfcmVtb3ZlIChw
cml2LT5tc2ctPnJlcXVlc3RfaGVhZGVycywgIlJhbmdlIik7CisJc291cF9tZXNzYWdlX2hlYWRl
cnNfYXBwZW5kIChwcml2LT5tc2ctPnJlcXVlc3RfaGVhZGVycywgIlJhbmdlIiwgcmFuZ2UpOwor
CWdfZnJlZSAocmFuZ2UpOworCisJc291cF9odHRwX2lucHV0X3N0cmVhbV9xdWV1ZV9tZXNzYWdl
IChTT1VQX0hUVFBfSU5QVVRfU1RSRUFNIChzdHJlYW0pKTsKKworCWdfaW5wdXRfc3RyZWFtX2Ns
ZWFyX3BlbmRpbmcgKHN0cmVhbSk7CisJcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVh
bgorc291cF9odHRwX2lucHV0X3N0cmVhbV9jYW5fdHJ1bmNhdGUgKEdTZWVrYWJsZSAqc2Vla2Fi
bGUpCit7CisJcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3NvdXBfaHR0cF9p
bnB1dF9zdHJlYW1fdHJ1bmNhdGUgKEdTZWVrYWJsZSAgICAgKnNlZWthYmxlLAorCQkJCSBnb2Zm
c2V0IG9mZnNldCwKKwkJCQkgR0NhbmNlbGxhYmxlICAqY2FuY2VsbGFibGUsCisJCQkJIEdFcnJv
ciAgICAgICAqKmVycm9yKQoreworCWdfc2V0X2Vycm9yX2xpdGVyYWwgKGVycm9yLCBHX0lPX0VS
Uk9SLCBHX0lPX0VSUk9SX05PVF9TVVBQT1JURUQsCisJCQkgICAgICJUcnVuY2F0ZSBub3QgYWxs
b3dlZCBvbiBpbnB1dCBzdHJlYW0iKTsKKwlyZXR1cm4gRkFMU0U7Cit9CisKK1NvdXBNZXNzYWdl
ICoKK3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ2V0X21lc3NhZ2UgKFNvdXBIVFRQSW5wdXRTdHJl
YW0gKmh0dHBzdHJlYW0pCit7CisJU291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBT
T1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChodHRwc3RyZWFtKTsKKwlyZXR1cm4g
cHJpdi0+bXNnID8gZ19vYmplY3RfcmVmIChwcml2LT5tc2cpIDogTlVMTDsKK30KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1z
dHJlYW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1p
bnB1dC1zdHJlYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGU3YmMw
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUv
c291cC1odHRwLWlucHV0LXN0cmVhbS5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcsIDIwMDkgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAy
MDEwIElnYWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICogUHVibGljIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLAor
ICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX1NPVVBfSFRU
UF9JTlBVVF9TVFJFQU1fSF9fCisjZGVmaW5lIF9fU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9IX18K
KworI2luY2x1ZGUgPGdpby9naW8uaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAtdHlwZXMuaD4K
KworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFNPVVBfVFlQRV9IVFRQX0lOUFVUX1NUUkVBTSAg
ICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dldF90eXBlICgpKQorI2RlZmluZSBTT1VQ
X0hUVFBfSU5QVVRfU1RSRUFNKG8pICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NB
U1QgKChvKSwgU09VUF9UWVBFX0hUVFBfSU5QVVRfU1RSRUFNLCBTb3VwSFRUUElucHV0U3RyZWFt
KSkKKyNkZWZpbmUgU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9DTEFTUyhrKSAgICAgKEdfVFlQRV9D
SEVDS19DTEFTU19DQVNUICgoayksIFNPVVBfVFlQRV9IVFRQX0lOUFVUX1NUUkVBTSwgU291cEhU
VFBJbnB1dFN0cmVhbUNsYXNzKSkKKyNkZWZpbmUgU09VUF9JU19IVFRQX0lOUFVUX1NUUkVBTShv
KSAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgobyksIFNPVVBfVFlQRV9IVFRQ
X0lOUFVUX1NUUkVBTSkpCisjZGVmaW5lIFNPVVBfSVNfSFRUUF9JTlBVVF9TVFJFQU1fQ0xBU1Mo
aykgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGspLCBTT1VQX1RZUEVfSFRUUF9JTlBVVF9T
VFJFQU0pKQorI2RlZmluZSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9DTEFTUyhvKSAoR19U
WVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG8pLCBTT1VQX1RZUEVfSFRUUF9JTlBVVF9TVFJFQU0s
IFNvdXBIVFRQSW5wdXRTdHJlYW1DbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IFNvdXBIVFRQSW5w
dXRTdHJlYW0gU291cEhUVFBJbnB1dFN0cmVhbTsKK3R5cGVkZWYgc3RydWN0IFNvdXBIVFRQSW5w
dXRTdHJlYW1DbGFzcyBTb3VwSFRUUElucHV0U3RyZWFtQ2xhc3M7CisKK3N0cnVjdCBTb3VwSFRU
UElucHV0U3RyZWFtIHsKKwlHSW5wdXRTdHJlYW0gcGFyZW50OworfTsKKworc3RydWN0IFNvdXBI
VFRQSW5wdXRTdHJlYW1DbGFzcyB7CisJR0lucHV0U3RyZWFtQ2xhc3MgcGFyZW50X2NsYXNzOwor
CisJLyogUGFkZGluZyBmb3IgZnV0dXJlIGV4cGFuc2lvbiAqLworCXZvaWQgKCpfZ19yZXNlcnZl
ZDEpKHZvaWQpOworCXZvaWQgKCpfZ19yZXNlcnZlZDIpKHZvaWQpOworCXZvaWQgKCpfZ19yZXNl
cnZlZDMpKHZvaWQpOworCXZvaWQgKCpfZ19yZXNlcnZlZDQpKHZvaWQpOworCXZvaWQgKCpfZ19y
ZXNlcnZlZDUpKHZvaWQpOworfTsKKworR1R5cGUgc291cF9odHRwX2lucHV0X3N0cmVhbV9nZXRf
dHlwZSAodm9pZCkgR19HTlVDX0NPTlNUOworCitTb3VwSFRUUElucHV0U3RyZWFtICpzb3VwX2h0
dHBfaW5wdXRfc3RyZWFtX25ldyAoU291cFNlc3Npb24gICAgICAgICAqc2Vzc2lvbiwKKwkJCQkJ
CSBTb3VwTWVzc2FnZSAgICAgICAgICptc2cpOworCitnYm9vbGVhbiAgICAgICAgICAgICBzb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX3NlbmQgKFNvdXBIVFRQSW5wdXRTdHJlYW0gKmh0dHBzdHJlYW0s
CisJCQkJCQkgIEdDYW5jZWxsYWJsZSAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJCQkJICBHRXJy
b3IgICAgICAgICAgICAgKiplcnJvcik7CisKK3ZvaWQgICAgICAgICAgICAgICAgIHNvdXBfaHR0
cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luYyAoU291cEhUVFBJbnB1dFN0cmVhbSAqaHR0cHN0cmVh
bSwKKwkJCQkJCQlpbnQgaW9fcHJpb3JpdHksCisJCQkJCQkJR0NhbmNlbGxhYmxlICAgICAgICAq
Y2FuY2VsbGFibGUsCisJCQkJCQkJR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKKwkJCQkJ
CQlncG9pbnRlciB1c2VyX2RhdGEpOworZ2Jvb2xlYW4gICAgICAgICAgICAgc291cF9odHRwX2lu
cHV0X3N0cmVhbV9zZW5kX2ZpbmlzaCAoU291cEhUVFBJbnB1dFN0cmVhbSAqaHR0cHN0cmVhbSwK
KwkJCQkJCQkgR0FzeW5jUmVzdWx0ICAgICAgICAqcmVzdWx0LAorCQkJCQkJCSBHRXJyb3IgICAg
ICAgICAgICAgKiplcnJvcik7CisKK1NvdXBNZXNzYWdlICAgICAgICAgKnNvdXBfaHR0cF9pbnB1
dF9zdHJlYW1fZ2V0X21lc3NhZ2UgKFNvdXBIVFRQSW5wdXRTdHJlYW0gKmh0dHBzdHJlYW0pOwor
CitHX0VORF9ERUNMUworCisjZW5kaWYgLyogX19TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0hfXyAq
LwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1y
ZXF1ZXN0LWRhdGEuYyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAt
cmVxdWVzdC1kYXRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NmOTFj
NgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3NvdXAtcmVxdWVzdC1kYXRhLmMKQEAgLTAsMCArMSwyMDUgQEAKKy8qCisgKiBzb3VwLXJlcXVl
c3QtZGF0YS5jOiBkYXRhOiBVUkkgcmVxdWVzdCBvYmplY3QKKyAqCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisjaW5jbHVk
ZSAic291cC1yZXF1ZXN0LWRhdGEuaCIKKworI2luY2x1ZGUgInNvdXAtcmVxdWVzdGVyLmgiCisj
aW5jbHVkZSA8bGlic291cC9zb3VwLmg+CisjaW5jbHVkZSA8Z2xpYi9naTE4bi5oPgorCitHX0RF
RklORV9UWVBFIChTb3VwUmVxdWVzdERhdGEsIHNvdXBfcmVxdWVzdF9kYXRhLCBTT1VQX1RZUEVf
UkVRVUVTVCkKKworc3RydWN0IF9Tb3VwUmVxdWVzdERhdGFQcml2YXRlIHsKKwlnc2l6ZSBjb250
ZW50X2xlbmd0aDsKKwljaGFyICpjb250ZW50X3R5cGU7Cit9OworCitzdGF0aWMgdm9pZAorc291
cF9yZXF1ZXN0X2RhdGFfaW5pdCAoU291cFJlcXVlc3REYXRhICpkYXRhKQoreworCWRhdGEtPnBy
aXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKGRhdGEsIFNPVVBfVFlQRV9SRVFVRVNU
X0RBVEEsIFNvdXBSZXF1ZXN0RGF0YVByaXZhdGUpOworfQorCitzdGF0aWMgdm9pZAorc291cF9y
ZXF1ZXN0X2RhdGFfZmluYWxpemUgKEdPYmplY3QgKm9iamVjdCkKK3sKKwlTb3VwUmVxdWVzdERh
dGEgKmRhdGEgPSBTT1VQX1JFUVVFU1RfREFUQSAob2JqZWN0KTsKKworCWdfZnJlZSAoZGF0YS0+
cHJpdi0+Y29udGVudF90eXBlKTsKKworCUdfT0JKRUNUX0NMQVNTIChzb3VwX3JlcXVlc3RfZGF0
YV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKK30KKworc3RhdGljIGdib29sZWFu
Citzb3VwX3JlcXVlc3RfZGF0YV9jaGVja191cmkgKFNvdXBSZXF1ZXN0ICAqcmVxdWVzdCwKKwkJ
CSAgICAgU291cFVSSSAgICAgICp1cmksCisJCQkgICAgIEdFcnJvciAgICAgICoqZXJyb3IpCit7
CisJcmV0dXJuIHVyaS0+aG9zdCA9PSBOVUxMOworfQorCisKKyNkZWZpbmUgWERJR0lUKGMpICgo
YykgPD0gJzknID8gKGMpIC0gJzAnIDogKChjKSAmIDB4NEYpIC0gJ0EnICsgMTApCisjZGVmaW5l
IEhFWENIQVIocykgKChYRElHSVQgKHNbMV0pIDw8IDQpICsgWERJR0lUIChzWzJdKSkKKworY2hh
ciAqCit1cmlfZGVjb2RlZF9jb3B5IChjb25zdCBjaGFyICpwYXJ0LCBpbnQgbGVuZ3RoLCBnYm9v
bGVhbiBmaXh1cCkKK3sKKwl1bnNpZ25lZCBjaGFyICpzLCAqZDsKKwljaGFyICpkZWNvZGVkID0g
Z19zdHJuZHVwIChwYXJ0LCBsZW5ndGgpOworCisJcyA9IGQgPSAodW5zaWduZWQgY2hhciAqKWRl
Y29kZWQ7CisJZG8geworCQlpZiAoKnMgPT0gJyUnKSB7CisJCQlpZiAoIWdfYXNjaWlfaXN4ZGln
aXQgKHNbMV0pIHx8CisJCQkgICAgIWdfYXNjaWlfaXN4ZGlnaXQgKHNbMl0pKSB7CisJCQkJaWYg
KCFmaXh1cCkgeworCQkJCQlnX2ZyZWUgKGRlY29kZWQpOworCQkJCQlyZXR1cm4gTlVMTDsKKwkJ
CQl9CisJCQkJKmQrKyA9ICpzOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJKmQrKyA9IEhFWENI
QVIgKHMpOworCQkJcyArPSAyOworCQl9IGVsc2UKKwkJCSpkKysgPSAqczsKKwl9IHdoaWxlICgq
cysrKTsKKworCXJldHVybiBkZWNvZGVkOworfQorCitzdGF0aWMgR0lucHV0U3RyZWFtICoKK3Nv
dXBfcmVxdWVzdF9kYXRhX3NlbmQgKFNvdXBSZXF1ZXN0ICAgKnJlcXVlc3QsCisJCQlHQ2FuY2Vs
bGFibGUgICpjYW5jZWxsYWJsZSwKKwkJCUdFcnJvciAgICAgICAqKmVycm9yKQoreworCVNvdXBS
ZXF1ZXN0RGF0YSAqZGF0YSA9IFNPVVBfUkVRVUVTVF9EQVRBIChyZXF1ZXN0KTsKKwlTb3VwVVJJ
ICp1cmkgPSBzb3VwX3JlcXVlc3RfZ2V0X3VyaSAocmVxdWVzdCk7CisJR0lucHV0U3RyZWFtICpt
ZW1zdHJlYW07CisJY29uc3QgY2hhciAqY29tbWEsICpzZW1pLCAqc3RhcnQsICplbmQ7CisJZ2Jv
b2xlYW4gYmFzZTY0ID0gRkFMU0U7CisKKwlnY2hhciAqdXJpc3RyID0gc291cF91cmlfdG9fc3Ry
aW5nICh1cmksIEZBTFNFKTsKKwljb21tYSA9IHN0cmNociAodXJpc3RyLCAnLCcpOworCWlmIChj
b21tYSAmJiBjb21tYSAhPSB1cmlzdHIpIHsKKwkJLyogRGVhbCB3aXRoIE1JTUUgdHlwZSAvIHBh
cmFtcyAqLworCQlzZW1pID0gbWVtY2hyICh1cmlzdHIsICc7JywgY29tbWEgLSB1cmlzdHIpOwor
CQllbmQgPSBzZW1pID8gc2VtaSA6IGNvbW1hOworCisJCWlmIChlbmQgIT0gdXJpc3RyKQorCQkJ
ZGF0YS0+cHJpdi0+Y29udGVudF90eXBlID0gdXJpX2RlY29kZWRfY29weSAodXJpc3RyLCBlbmQg
LSB1cmlzdHIsIFRSVUUpOworCisJCWlmIChzZW1pICYmICFnX2FzY2lpX3N0cm5jYXNlY21wIChz
ZW1pLCAiO2Jhc2U2NCIsIE1BWCAoY29tbWEgLSBzZW1pLCBzdHJsZW4gKCI7YmFzZTY0IikpKSkK
KwkJCWJhc2U2NCA9IFRSVUU7CisJfQorCisJbWVtc3RyZWFtID0gZ19tZW1vcnlfaW5wdXRfc3Ry
ZWFtX25ldyAoKTsKKworCXN0YXJ0ID0gY29tbWEgPyBjb21tYSArIDEgOiB1cmlzdHI7CisKKwlp
ZiAoKnN0YXJ0KSB7CisJCWd1Y2hhciAqYnVmOworCisJCWlmIChiYXNlNjQpIHsKKwkJCWludCBp
bmxlbiwgc3RhdGUgPSAwOworCQkJZ3VpbnQgc2F2ZSA9IDA7CisJCQljaGFyICp1bmVzY2FwZWQ7
CisKKwkJCWlmIChzdHJjaHIgKHN0YXJ0LCAnJScpKSB7CisJCQkJc3RhcnQgPSB1bmVzY2FwZWQg
PSB1cmlfZGVjb2RlZF9jb3B5IChzdGFydCwgc3RybGVuIChzdGFydCksIFRSVUUpOworCQkJCWlm
ICghdW5lc2NhcGVkKQorCQkJCQlnb3RvIGZhaWw7CisJCQl9IGVsc2UKKwkJCQl1bmVzY2FwZWQg
PSBOVUxMOworCisJCQlpbmxlbiA9IHN0cmxlbiAoc3RhcnQpOworCQkJYnVmID0gZ19tYWxsb2Mg
KGlubGVuICogMyAvIDQpOworCQkJZGF0YS0+cHJpdi0+Y29udGVudF9sZW5ndGggPQorCQkJCWdf
YmFzZTY0X2RlY29kZV9zdGVwIChzdGFydCwgaW5sZW4sIGJ1ZiwKKwkJCQkJCSAgICAgICZzdGF0
ZSwgJnNhdmUpOworCQkJZ19mcmVlICh1bmVzY2FwZWQpOworCQkJaWYgKHN0YXRlICE9IDApIHsK
KwkJCQlnX2ZyZWUgKGJ1Zik7CisJCQkJZ290byBmYWlsOworCQkJfQorCQl9IGVsc2UgeworCQkJ
LyogQ2Fubm90IHVzZSBnX3VyaV91bmVzY2FwZV9zdHJpbmcgbm9yCisJCQkgICBzb3VwX3VyaV9k
ZWNvZGUgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvCisJCQkgICBmYWlsIGZvciB0aGluZ3MgbGlr
ZSAiJTNFJSUzQyIgLT4gIj4lPCIgKi8KKwkJCWJ1ZiA9IChndWNoYXIgKil1cmlfZGVjb2RlZF9j
b3B5IChzdGFydCwgc3RybGVuIChzdGFydCksIFRSVUUpOworCQkJaWYgKCFidWYpCisJCQkJZ290
byBmYWlsOworCQkJZGF0YS0+cHJpdi0+Y29udGVudF9sZW5ndGggPSBzdHJsZW4gKChjaGFyICop
YnVmKTsKKwkJfQorCisJCWdfbWVtb3J5X2lucHV0X3N0cmVhbV9hZGRfZGF0YSAoR19NRU1PUllf
SU5QVVRfU1RSRUFNIChtZW1zdHJlYW0pLAorCQkJCQkJYnVmLCBkYXRhLT5wcml2LT5jb250ZW50
X2xlbmd0aCwKKwkJCQkJCWdfZnJlZSk7CisJfQorCWdfZnJlZSAodXJpc3RyKTsKKworCXJldHVy
biBtZW1zdHJlYW07CisKKyBmYWlsOgorCWdfZnJlZSAodXJpc3RyKTsKKwlnX3NldF9lcnJvciAo
ZXJyb3IsIFNPVVBfRVJST1IsIFNPVVBfRVJST1JfQkFEX1VSSSwKKwkJICAgICBfICgiVW5hYmxl
IHRvIGRlY29kZSBVUkk6ICVzIiksIHN0YXJ0KTsKKwlnX29iamVjdF91bnJlZiAobWVtc3RyZWFt
KTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGdvZmZzZXQKK3NvdXBfcmVxdWVzdF9kYXRh
X2dldF9jb250ZW50X2xlbmd0aCAoU291cFJlcXVlc3QgKnJlcXVlc3QpCit7CisJU291cFJlcXVl
c3REYXRhICpkYXRhID0gU09VUF9SRVFVRVNUX0RBVEEgKHJlcXVlc3QpOworCisJcmV0dXJuIGRh
dGEtPnByaXYtPmNvbnRlbnRfbGVuZ3RoOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitzb3Vw
X3JlcXVlc3RfZGF0YV9nZXRfY29udGVudF90eXBlIChTb3VwUmVxdWVzdCAqcmVxdWVzdCkKK3sK
KwlTb3VwUmVxdWVzdERhdGEgKmRhdGEgPSBTT1VQX1JFUVVFU1RfREFUQSAocmVxdWVzdCk7CisK
KwlyZXR1cm4gZGF0YS0+cHJpdi0+Y29udGVudF90eXBlOworfQorCitzdGF0aWMgdm9pZAorc291
cF9yZXF1ZXN0X2RhdGFfY2xhc3NfaW5pdCAoU291cFJlcXVlc3REYXRhQ2xhc3MgKnJlcXVlc3Rf
ZGF0YV9jbGFzcykKK3sKKwlHT2JqZWN0Q2xhc3MgKm9iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NM
QVNTIChyZXF1ZXN0X2RhdGFfY2xhc3MpOworCVNvdXBSZXF1ZXN0Q2xhc3MgKnJlcXVlc3RfY2xh
c3MgPQorCQlTT1VQX1JFUVVFU1RfQ0xBU1MgKHJlcXVlc3RfZGF0YV9jbGFzcyk7CisKKwlnX3R5
cGVfY2xhc3NfYWRkX3ByaXZhdGUgKHJlcXVlc3RfZGF0YV9jbGFzcywgc2l6ZW9mIChTb3VwUmVx
dWVzdERhdGFQcml2YXRlKSk7CisKKwlvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gc291cF9yZXF1
ZXN0X2RhdGFfZmluYWxpemU7CisKKwlyZXF1ZXN0X2NsYXNzLT5jaGVja191cmkgPSBzb3VwX3Jl
cXVlc3RfZGF0YV9jaGVja191cmk7CisJcmVxdWVzdF9jbGFzcy0+c2VuZCA9IHNvdXBfcmVxdWVz
dF9kYXRhX3NlbmQ7CisJcmVxdWVzdF9jbGFzcy0+Z2V0X2NvbnRlbnRfbGVuZ3RoID0gc291cF9y
ZXF1ZXN0X2RhdGFfZ2V0X2NvbnRlbnRfbGVuZ3RoOworCXJlcXVlc3RfY2xhc3MtPmdldF9jb250
ZW50X3R5cGUgPSBzb3VwX3JlcXVlc3RfZGF0YV9nZXRfY29udGVudF90eXBlOworfQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWRh
dGEuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1k
YXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMxNGYzNwotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVx
dWVzdC1kYXRhLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBS
ZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYg
U09VUF9SRVFVRVNUX0RBVEFfSAorI2RlZmluZSBTT1VQX1JFUVVFU1RfREFUQV9IIDEKKworI2lu
Y2x1ZGUgInNvdXAtcmVxdWVzdC5oIgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgU09VUF9U
WVBFX1JFUVVFU1RfREFUQSAgICAgICAgICAgIChzb3VwX3JlcXVlc3RfZGF0YV9nZXRfdHlwZSAo
KSkKKyNkZWZpbmUgU09VUF9SRVFVRVNUX0RBVEEob2JqZWN0KSAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfQ0FTVCAoKG9iamVjdCksIFNPVVBfVFlQRV9SRVFVRVNUX0RBVEEsIFNvdXBS
ZXF1ZXN0RGF0YSkpCisjZGVmaW5lIFNPVVBfUkVRVUVTVF9EQVRBX0NMQVNTKGtsYXNzKSAgICAo
R19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFNPVVBfVFlQRV9SRVFVRVNUX0RBVEEs
IFNvdXBSZXF1ZXN0RGF0YUNsYXNzKSkKKyNkZWZpbmUgU09VUF9JU19SRVFVRVNUX0RBVEEob2Jq
ZWN0KSAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iamVjdCksIFNPVVBfVFlQ
RV9SRVFVRVNUX0RBVEEpKQorI2RlZmluZSBTT1VQX0lTX1JFUVVFU1RfREFUQV9DTEFTUyhrbGFz
cykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBTT1VQX1RZUEVfUkVRVUVTVF9E
QVRBKSkKKyNkZWZpbmUgU09VUF9SRVFVRVNUX0RBVEFfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVf
SU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgU09VUF9UWVBFX1JFUVVFU1RfREFUQSwgU291cFJl
cXVlc3REYXRhQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfU291cFJlcXVlc3REYXRhUHJpdmF0
ZSBTb3VwUmVxdWVzdERhdGFQcml2YXRlOworCit0eXBlZGVmIHN0cnVjdCB7CisJU291cFJlcXVl
c3QgcGFyZW50OworCisJU291cFJlcXVlc3REYXRhUHJpdmF0ZSAqcHJpdjsKK30gU291cFJlcXVl
c3REYXRhOworCit0eXBlZGVmIHN0cnVjdCB7CisJU291cFJlcXVlc3RDbGFzcyBwYXJlbnQ7Cit9
IFNvdXBSZXF1ZXN0RGF0YUNsYXNzOworCitHVHlwZSBzb3VwX3JlcXVlc3RfZGF0YV9nZXRfdHlw
ZSAodm9pZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBTT1VQX1JFUVVFU1RfREFUQV9I
ICovCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3Vw
LXJlcXVlc3QtZmlsZS5jIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291
cC1yZXF1ZXN0LWZpbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2Y2
ZTA5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2Fj
aGUvc291cC1yZXF1ZXN0LWZpbGUuYwpAQCAtMCwwICsxLDMxMyBAQAorLyoKKyAqIHNvdXAtcmVx
dWVzdC1maWxlLmM6IGZpbGU6IFVSSSByZXF1ZXN0IG9iamVjdAorICoKKyAqIENvcHlyaWdodCAo
QykgMjAwOSBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2lu
Y2x1ZGUgInNvdXAtcmVxdWVzdC1maWxlLmgiCisjaW5jbHVkZSAic291cC1kaXJlY3RvcnktaW5w
dXQtc3RyZWFtLmgiCisjaW5jbHVkZSAic291cC1yZXF1ZXN0ZXIuaCIKKyNpbmNsdWRlIDxnbGli
L2dpMThuLmg+CisKK0dfREVGSU5FX1RZUEUgKFNvdXBSZXF1ZXN0RmlsZSwgc291cF9yZXF1ZXN0
X2ZpbGUsIFNPVVBfVFlQRV9SRVFVRVNUKQorCitzdHJ1Y3QgX1NvdXBSZXF1ZXN0RmlsZVByaXZh
dGUgeworCUdGaWxlICpnZmlsZTsKKworCWNoYXIgKm1pbWVfdHlwZTsKKwlnb2Zmc2V0IHNpemU7
Cit9OworCitHRmlsZSAqCitzb3VwX3JlcXVlc3RfZmlsZV9nZXRfZmlsZSAoU291cFJlcXVlc3RG
aWxlICpmaWxlKQoreworCXJldHVybiBnX29iamVjdF9yZWYgKGZpbGUtPnByaXYtPmdmaWxlKTsK
K30KKworc3RhdGljIHZvaWQKK3NvdXBfcmVxdWVzdF9maWxlX2luaXQgKFNvdXBSZXF1ZXN0Rmls
ZSAqZmlsZSkKK3sKKwlmaWxlLT5wcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFIChm
aWxlLCBTT1VQX1RZUEVfUkVRVUVTVF9GSUxFLCBTb3VwUmVxdWVzdEZpbGVQcml2YXRlKTsKKwor
CWZpbGUtPnByaXYtPnNpemUgPSAtMTsKK30KKworc3RhdGljIHZvaWQKK3NvdXBfcmVxdWVzdF9m
aWxlX2ZpbmFsaXplIChHT2JqZWN0ICpvYmplY3QpCit7CisJU291cFJlcXVlc3RGaWxlICpmaWxl
ID0gU09VUF9SRVFVRVNUX0ZJTEUgKG9iamVjdCk7CisKKwlpZiAoZmlsZS0+cHJpdi0+Z2ZpbGUp
CisJCWdfb2JqZWN0X3VucmVmIChmaWxlLT5wcml2LT5nZmlsZSk7CisJZ19mcmVlIChmaWxlLT5w
cml2LT5taW1lX3R5cGUpOworCisJR19PQkpFQ1RfQ0xBU1MgKHNvdXBfcmVxdWVzdF9maWxlX3Bh
cmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3Nv
dXBfcmVxdWVzdF9maWxlX2NoZWNrX3VyaSAoU291cFJlcXVlc3QgICpyZXF1ZXN0LAorCQkJICAg
ICBTb3VwVVJJICAgICAgKnVyaSwKKwkJCSAgICAgR0Vycm9yICAgICAgKiplcnJvcikKK3sKKwkv
KiAiZmlsZTovZm9vIiBpcyBub3QgdmFsaWQgKi8KKwlpZiAoIXVyaS0+aG9zdCkKKwkJcmV0dXJu
IEZBTFNFOworCisJLyogYnV0IGl0IG11c3QgYmUgImZpbGU6Ly8vLi4uIiBvciAiZmlsZTovL2xv
Y2FsaG9zdC8uLi4iICovCisJaWYgKHVyaS0+c2NoZW1lID09IFNPVVBfVVJJX1NDSEVNRV9GSUxF
ICYmCisJICAgICp1cmktPmhvc3QgJiYKKwkgICAgZ19hc2NpaV9zdHJjYXNlY21wICh1cmktPmhv
c3QsICJsb2NhbGhvc3QiKSAhPSAwKQorCQlyZXR1cm4gRkFMU0U7CisKKwlyZXR1cm4gVFJVRTsK
K30KKworc3RhdGljIHZvaWQKK3NvdXBfcmVxdWVzdF9maWxlX2Z0cF9tYWluX2xvb3BfcXVpdCAo
R09iamVjdCAgICAgICpvYmplY3QsCisJCQkJICAgICAgR0FzeW5jUmVzdWx0ICpyZXN1bHQsCisJ
CQkJICAgICAgZ3BvaW50ZXIgbG9vcCkKK3sKKwlnX21haW5fbG9vcF9xdWl0IChsb29wKTsKK30K
KworLyogVGhpcyBpcyBhIHNvbWV3aGF0IGhhY2t5IHdheSB0byBnZXQgRlRQIHRvIGFsbW9zdCB3
b3JrLiBUaGUgcHJvcGVyIHdheSB0bworICogZ2V0IEZUUCB0byBfcmVhbGx5XyB3b3JrIGludm9s
dmVzIGhhY2tpbmcgR0lPIHRvIGhhdmUgQVBJcyB0byBoYW5kbGUKKyAqIGNhbm9uY2lhbCBVUkxz
LgorICovCitzdGF0aWMgR0ZpbGUgKgorc291cF9yZXF1ZXN0X2ZpbGVfZW5zdXJlX2ZpbGVfZnRw
IChTb3VwVVJJICAgICAgICp1cmksCisJCQkJICAgR0NhbmNlbGxhYmxlICAqY2FuY2VsbGFibGUs
CisJCQkJICAgR0Vycm9yICAgICAgICoqZXJyb3IpCit7CisJU291cFVSSSAqaG9zdDsKKwljaGFy
ICpzOworCUdGaWxlICpmaWxlLCAqcmVzdWx0OworCUdNb3VudCAqbW91bnQ7CisKKwlob3N0ID0g
c291cF91cmlfY29weV9ob3N0ICh1cmkpOworCXMgPSBzb3VwX3VyaV90b19zdHJpbmcgKGhvc3Qs
IEZBTFNFKTsKKwlmaWxlID0gZ19maWxlX25ld19mb3JfdXJpIChzKTsKKwlzb3VwX3VyaV9mcmVl
IChob3N0KTsKKwlnX2ZyZWUgKHMpOworCisJbW91bnQgPSBnX2ZpbGVfZmluZF9lbmNsb3Npbmdf
bW91bnQgKGZpbGUsIGNhbmNlbGxhYmxlLCBlcnJvcik7CisJaWYgKG1vdW50ID09IE5VTEwgJiYg
Z19maWxlX3N1cHBvcnRzX3RocmVhZF9jb250ZXh0cyAoZmlsZSkpIHsKKwkJR01haW5Db250ZXh0
ICpjb250ZXh0ID0gZ19tYWluX2NvbnRleHRfbmV3ICgpOworCQlHTWFpbkxvb3AgKmxvb3AgPSBn
X21haW5fbG9vcF9uZXcgKGNvbnRleHQsIEZBTFNFKTsKKworCQlnX2NsZWFyX2Vycm9yIChlcnJv
cik7CisJCWdfbWFpbl9jb250ZXh0X3B1c2hfdGhyZWFkX2RlZmF1bHQgKGNvbnRleHQpOworCQln
X2ZpbGVfbW91bnRfZW5jbG9zaW5nX3ZvbHVtZSAoZmlsZSwKKwkJCQkJICAgICAgIEdfTU9VTlRf
TU9VTlRfTk9ORSwKKwkJCQkJICAgICAgIE5VTEwsIC8qIEZJWE1FISAqLworCQkJCQkgICAgICAg
Y2FuY2VsbGFibGUsCisJCQkJCSAgICAgICBzb3VwX3JlcXVlc3RfZmlsZV9mdHBfbWFpbl9sb29w
X3F1aXQsCisJCQkJCSAgICAgICBsb29wKTsKKwkJZ19tYWluX2xvb3BfcnVuIChsb29wKTsKKwkJ
Z19tYWluX2NvbnRleHRfcG9wX3RocmVhZF9kZWZhdWx0IChjb250ZXh0KTsKKwkJZ19tYWluX2xv
b3BfdW5yZWYgKGxvb3ApOworCQlnX21haW5fY29udGV4dF91bnJlZiAoY29udGV4dCk7CisJCW1v
dW50ID0gZ19maWxlX2ZpbmRfZW5jbG9zaW5nX21vdW50IChmaWxlLCBjYW5jZWxsYWJsZSwgZXJy
b3IpOworCX0KKwlpZiAobW91bnQgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJZ19vYmplY3Rf
dW5yZWYgKGZpbGUpOworCisJZmlsZSA9IGdfbW91bnRfZ2V0X2RlZmF1bHRfbG9jYXRpb24gKG1v
dW50KTsKKwlnX29iamVjdF91bnJlZiAobW91bnQpOworCisJcyA9IGdfc3RyZHVwICh1cmktPnBh
dGgpOworCWlmIChzdHJjaHIgKHMsICc7JykpCisJCSpzdHJjaHIgKHMsICc7JykgPSAwOworCisJ
cmVzdWx0ID0gZ19maWxlX3Jlc29sdmVfcmVsYXRpdmVfcGF0aCAoZmlsZSwgcyk7CisJZ19mcmVl
IChzKTsKKwlnX29iamVjdF91bnJlZiAoZmlsZSk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitz
dGF0aWMgZ2Jvb2xlYW4KK3NvdXBfcmVxdWVzdF9maWxlX2Vuc3VyZV9maWxlIChTb3VwUmVxdWVz
dEZpbGUgICpmaWxlLAorCQkJICAgICAgIEdDYW5jZWxsYWJsZSAgICAgKmNhbmNlbGxhYmxlLAor
CQkJICAgICAgIEdFcnJvciAgICAgICAgICAqKmVycm9yKQoreworCVNvdXBVUkkgKnVyaTsKKwor
CWlmIChmaWxlLT5wcml2LT5nZmlsZSkKKwkJcmV0dXJuIFRSVUU7CisKKwl1cmkgPSBzb3VwX3Jl
cXVlc3RfZ2V0X3VyaSAoU09VUF9SRVFVRVNUIChmaWxlKSk7CisJaWYgKHVyaS0+c2NoZW1lID09
IFNPVVBfVVJJX1NDSEVNRV9GSUxFKSB7CisJCWZpbGUtPnByaXYtPmdmaWxlID0gZ19maWxlX25l
d19mb3JfcGF0aCAodXJpLT5wYXRoKTsKKwkJcmV0dXJuIFRSVUU7CisJfSBlbHNlIGlmICh1cmkt
PnNjaGVtZSA9PSBTT1VQX1VSSV9TQ0hFTUVfRlRQKSB7CisJCWZpbGUtPnByaXYtPmdmaWxlID0g
c291cF9yZXF1ZXN0X2ZpbGVfZW5zdXJlX2ZpbGVfZnRwICh1cmksCisJCQkJCQkJCSAgICAgICBj
YW5jZWxsYWJsZSwKKwkJCQkJCQkJICAgICAgIGVycm9yKTsKKwkJcmV0dXJuIGZpbGUtPnByaXYt
PmdmaWxlICE9IE5VTEw7CisJfQorCisJZ19zZXRfZXJyb3IgKGVycm9yLCBTT1VQX0VSUk9SLCBT
T1VQX0VSUk9SX1VOU1VQUE9SVEVEX1VSSV9TQ0hFTUUsCisJCSAgICAgXyAoIlVuc3VwcG9ydGVk
IFVSSSBzY2hlbWUgJyVzJyIpLCB1cmktPnNjaGVtZSk7CisJcmV0dXJuIEZBTFNFOworfQorCitz
dGF0aWMgR0lucHV0U3RyZWFtICoKK3NvdXBfcmVxdWVzdF9maWxlX3NlbmQgKFNvdXBSZXF1ZXN0
ICAgICAgICAgICpyZXF1ZXN0LAorCQkJR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxl
LAorCQkJR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKQoreworCVNvdXBSZXF1ZXN0RmlsZSAq
ZmlsZSA9IFNPVVBfUkVRVUVTVF9GSUxFIChyZXF1ZXN0KTsKKwlHSW5wdXRTdHJlYW0gKnN0cmVh
bTsKKwlHRXJyb3IgKm15X2Vycm9yID0gTlVMTDsKKworCWlmICghc291cF9yZXF1ZXN0X2ZpbGVf
ZW5zdXJlX2ZpbGUgKGZpbGUsIGNhbmNlbGxhYmxlLCBlcnJvcikpCisJCXJldHVybiBOVUxMOwor
CisJc3RyZWFtID0gR19JTlBVVF9TVFJFQU0gKGdfZmlsZV9yZWFkIChmaWxlLT5wcml2LT5nZmls
ZSwKKwkJCQkJICAgICAgY2FuY2VsbGFibGUsICZteV9lcnJvcikpOworCWlmIChzdHJlYW0gPT0g
TlVMTCkgeworCQlpZiAoZ19lcnJvcl9tYXRjaGVzIChteV9lcnJvciwgR19JT19FUlJPUiwgR19J
T19FUlJPUl9JU19ESVJFQ1RPUlkpKSB7CisJCQlHRmlsZUVudW1lcmF0b3IgKmVudW1lcmF0b3I7
CisJCQlnX2NsZWFyX2Vycm9yICgmbXlfZXJyb3IpOworCQkJZW51bWVyYXRvciA9IGdfZmlsZV9l
bnVtZXJhdGVfY2hpbGRyZW4gKGZpbGUtPnByaXYtPmdmaWxlLAorCQkJCQkJCQkiKiIsCisJCQkJ
CQkJCUdfRklMRV9RVUVSWV9JTkZPX05PTkUsCisJCQkJCQkJCWNhbmNlbGxhYmxlLAorCQkJCQkJ
CQllcnJvcik7CisJCQlpZiAoZW51bWVyYXRvcikgeworCQkJCXN0cmVhbSA9IHNvdXBfZGlyZWN0
b3J5X2lucHV0X3N0cmVhbV9uZXcgKGVudW1lcmF0b3IsCisJCQkJCQkJCQkgIHNvdXBfcmVxdWVz
dF9nZXRfdXJpIChyZXF1ZXN0KSk7CisJCQkJZ19vYmplY3RfdW5yZWYgKGVudW1lcmF0b3IpOwor
CQkJCWZpbGUtPnByaXYtPm1pbWVfdHlwZSA9IGdfc3RyZHVwICgidGV4dC9odG1sIik7CisJCQl9
CisJCX0gZWxzZSB7CisJCQlnX3Byb3BhZ2F0ZV9lcnJvciAoZXJyb3IsIG15X2Vycm9yKTsKKwkJ
fQorCX0gZWxzZSB7CisJCUdGaWxlSW5mbyAqaW5mbyA9IGdfZmlsZV9xdWVyeV9pbmZvIChmaWxl
LT5wcml2LT5nZmlsZSwKKwkJCQkJCSAgICAgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9DT05U
RU5UX1RZUEUgIiwiCisJCQkJCQkgICAgIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfU0laRSwK
KwkJCQkJCSAgICAgMCwgY2FuY2VsbGFibGUsIE5VTEwpOworCQlpZiAoaW5mbykgeworCQkJY29u
c3QgY2hhciAqY29udGVudF90eXBlOworCQkJZmlsZS0+cHJpdi0+c2l6ZSA9IGdfZmlsZV9pbmZv
X2dldF9zaXplIChpbmZvKTsKKwkJCWNvbnRlbnRfdHlwZSA9IGdfZmlsZV9pbmZvX2dldF9jb250
ZW50X3R5cGUgKGluZm8pOworCisJCQlpZiAoY29udGVudF90eXBlKQorCQkJCWZpbGUtPnByaXYt
Pm1pbWVfdHlwZSA9IGdfY29udGVudF90eXBlX2dldF9taW1lX3R5cGUgKGNvbnRlbnRfdHlwZSk7
CisJCQlnX29iamVjdF91bnJlZiAoaW5mbyk7CisJCX0KKwl9CisKKwlyZXR1cm4gc3RyZWFtOwor
fQorCitzdGF0aWMgdm9pZAorc291cF9yZXF1ZXN0X2ZpbGVfc2VuZF9hc3luY190aHJlYWQgKEdT
aW1wbGVBc3luY1Jlc3VsdCAqcmVzLAorCQkJCSAgICAgR09iamVjdCAgICAgICAgICAgICpvYmpl
Y3QsCisJCQkJICAgICBHQ2FuY2VsbGFibGUgICAgICAgKmNhbmNlbGxhYmxlKQoreworCUdJbnB1
dFN0cmVhbSAqc3RyZWFtOworCVNvdXBSZXF1ZXN0ICpyZXF1ZXN0OworCUdFcnJvciAqZXJyb3Ig
PSBOVUxMOworCisJcmVxdWVzdCA9IFNPVVBfUkVRVUVTVCAob2JqZWN0KTsKKworCXN0cmVhbSA9
IHNvdXBfcmVxdWVzdF9maWxlX3NlbmQgKHJlcXVlc3QsIGNhbmNlbGxhYmxlLCAmZXJyb3IpOwor
CisJaWYgKHN0cmVhbSA9PSBOVUxMKSB7CisJCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfZnJv
bV9lcnJvciAocmVzLCBlcnJvcik7CisJCWdfZXJyb3JfZnJlZSAoZXJyb3IpOworCX0gZWxzZSB7
CisJCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dwb2ludGVyIChyZXMsIHN0cmVh
bSwgZ19vYmplY3RfdW5yZWYpOworCX0KK30KKworc3RhdGljIHZvaWQKK3NvdXBfcmVxdWVzdF9m
aWxlX3NlbmRfYXN5bmMgKFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAorCQkJICAgICAg
R0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJICAgICAgR0FzeW5jUmVhZHlD
YWxsYmFjayBjYWxsYmFjaywKKwkJCSAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlHU2lt
cGxlQXN5bmNSZXN1bHQgKnJlczsKKworCXJlcyA9IGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcg
KEdfT0JKRUNUIChyZXF1ZXN0KSwgY2FsbGJhY2ssIHVzZXJfZGF0YSwgc291cF9yZXF1ZXN0X2Zp
bGVfc2VuZF9hc3luYyk7CisKKwlnX3NpbXBsZV9hc3luY19yZXN1bHRfcnVuX2luX3RocmVhZCAo
cmVzLCBzb3VwX3JlcXVlc3RfZmlsZV9zZW5kX2FzeW5jX3RocmVhZCwgR19QUklPUklUWV9ERUZB
VUxULCBjYW5jZWxsYWJsZSk7CisJZ19vYmplY3RfdW5yZWYgKHJlcyk7Cit9CisKK3N0YXRpYyBH
SW5wdXRTdHJlYW0gKgorc291cF9yZXF1ZXN0X2ZpbGVfc2VuZF9maW5pc2ggKFNvdXBSZXF1ZXN0
ICAgICAgICAgICpyZXF1ZXN0LAorCQkJICAgICAgIEdBc3luY1Jlc3VsdCAgICAgICAgICpyZXN1
bHQsCisJCQkgICAgICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKQoreworCUdTaW1wbGVB
c3luY1Jlc3VsdCAqc2ltcGxlID0gR19TSU1QTEVfQVNZTkNfUkVTVUxUIChyZXN1bHQpOworCisJ
Z193YXJuX2lmX2ZhaWwgKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfc291cmNlX3RhZyAoc2lt
cGxlKSA9PSBzb3VwX3JlcXVlc3RfZmlsZV9zZW5kX2FzeW5jKTsKKworCWlmIChnX3NpbXBsZV9h
c3luY19yZXN1bHRfcHJvcGFnYXRlX2Vycm9yIChzaW1wbGUsIGVycm9yKSkKKwkJcmV0dXJuIE5V
TEw7CisKKwlyZXR1cm4gZ19vYmplY3RfcmVmIChnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X29w
X3Jlc19ncG9pbnRlciAoc2ltcGxlKSk7Cit9CisKK3N0YXRpYyBnb2Zmc2V0Citzb3VwX3JlcXVl
c3RfZmlsZV9nZXRfY29udGVudF9sZW5ndGggKFNvdXBSZXF1ZXN0ICpyZXF1ZXN0KQoreworCVNv
dXBSZXF1ZXN0RmlsZSAqZmlsZSA9IFNPVVBfUkVRVUVTVF9GSUxFIChyZXF1ZXN0KTsKKworCXJl
dHVybiBmaWxlLT5wcml2LT5zaXplOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitzb3VwX3Jl
cXVlc3RfZmlsZV9nZXRfY29udGVudF90eXBlIChTb3VwUmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlT
b3VwUmVxdWVzdEZpbGUgKmZpbGUgPSBTT1VQX1JFUVVFU1RfRklMRSAocmVxdWVzdCk7CisKKwlp
ZiAoIWZpbGUtPnByaXYtPm1pbWVfdHlwZSkKKwkJcmV0dXJuICJhcHBsaWNhdGlvbi9vY3RldC1z
dHJlYW0iOworCisJcmV0dXJuIGZpbGUtPnByaXYtPm1pbWVfdHlwZTsKK30KKworc3RhdGljIHZv
aWQKK3NvdXBfcmVxdWVzdF9maWxlX2NsYXNzX2luaXQgKFNvdXBSZXF1ZXN0RmlsZUNsYXNzICpy
ZXF1ZXN0X2ZpbGVfY2xhc3MpCit7CisJR09iamVjdENsYXNzICpvYmplY3RfY2xhc3MgPSBHX09C
SkVDVF9DTEFTUyAocmVxdWVzdF9maWxlX2NsYXNzKTsKKwlTb3VwUmVxdWVzdENsYXNzICpyZXF1
ZXN0X2NsYXNzID0KKwkJU09VUF9SRVFVRVNUX0NMQVNTIChyZXF1ZXN0X2ZpbGVfY2xhc3MpOwor
CisJZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlIChyZXF1ZXN0X2ZpbGVfY2xhc3MsIHNpemVvZiAo
U291cFJlcXVlc3RGaWxlUHJpdmF0ZSkpOworCisJb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IHNv
dXBfcmVxdWVzdF9maWxlX2ZpbmFsaXplOworCisJcmVxdWVzdF9jbGFzcy0+Y2hlY2tfdXJpID0g
c291cF9yZXF1ZXN0X2ZpbGVfY2hlY2tfdXJpOworCXJlcXVlc3RfY2xhc3MtPnNlbmQgPSBzb3Vw
X3JlcXVlc3RfZmlsZV9zZW5kOworCXJlcXVlc3RfY2xhc3MtPnNlbmRfYXN5bmMgPSBzb3VwX3Jl
cXVlc3RfZmlsZV9zZW5kX2FzeW5jOworCXJlcXVlc3RfY2xhc3MtPnNlbmRfZmluaXNoID0gc291
cF9yZXF1ZXN0X2ZpbGVfc2VuZF9maW5pc2g7CisJcmVxdWVzdF9jbGFzcy0+Z2V0X2NvbnRlbnRf
bGVuZ3RoID0gc291cF9yZXF1ZXN0X2ZpbGVfZ2V0X2NvbnRlbnRfbGVuZ3RoOworCXJlcXVlc3Rf
Y2xhc3MtPmdldF9jb250ZW50X3R5cGUgPSBzb3VwX3JlcXVlc3RfZmlsZV9nZXRfY29udGVudF90
eXBlOworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUv
c291cC1yZXF1ZXN0LWZpbGUuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3NvdXAtcmVxdWVzdC1maWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
M2Q4OGQzZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3Vw
L2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlh
LCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZm5kZWYgU09VUF9SRVFVRVNUX0ZJTEVfSAorI2RlZmluZSBTT1VQX1JFUVVFU1Rf
RklMRV9IIDEKKworI2luY2x1ZGUgInNvdXAtcmVxdWVzdC5oIgorCitHX0JFR0lOX0RFQ0xTCisK
KyNkZWZpbmUgU09VUF9UWVBFX1JFUVVFU1RfRklMRSAgICAgICAgICAgIChzb3VwX3JlcXVlc3Rf
ZmlsZV9nZXRfdHlwZSAoKSkKKyNkZWZpbmUgU09VUF9SRVFVRVNUX0ZJTEUob2JqZWN0KSAgICAg
ICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iamVjdCksIFNPVVBfVFlQRV9SRVFV
RVNUX0ZJTEUsIFNvdXBSZXF1ZXN0RmlsZSkpCisjZGVmaW5lIFNPVVBfUkVRVUVTVF9GSUxFX0NM
QVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFNPVVBfVFlQ
RV9SRVFVRVNUX0ZJTEUsIFNvdXBSZXF1ZXN0RmlsZUNsYXNzKSkKKyNkZWZpbmUgU09VUF9JU19S
RVFVRVNUX0ZJTEUob2JqZWN0KSAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9i
amVjdCksIFNPVVBfVFlQRV9SRVFVRVNUX0ZJTEUpKQorI2RlZmluZSBTT1VQX0lTX1JFUVVFU1Rf
RklMRV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBTT1VQ
X1RZUEVfUkVRVUVTVF9GSUxFKSkKKyNkZWZpbmUgU09VUF9SRVFVRVNUX0ZJTEVfR0VUX0NMQVNT
KG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgU09VUF9UWVBFX1JFUVVF
U1RfRklMRSwgU291cFJlcXVlc3RGaWxlQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfU291cFJl
cXVlc3RGaWxlUHJpdmF0ZSBTb3VwUmVxdWVzdEZpbGVQcml2YXRlOworCit0eXBlZGVmIHN0cnVj
dCB7CisJU291cFJlcXVlc3QgcGFyZW50OworCisJU291cFJlcXVlc3RGaWxlUHJpdmF0ZSAqcHJp
djsKK30gU291cFJlcXVlc3RGaWxlOworCit0eXBlZGVmIHN0cnVjdCB7CisJU291cFJlcXVlc3RD
bGFzcyBwYXJlbnQ7Cit9IFNvdXBSZXF1ZXN0RmlsZUNsYXNzOworCitHVHlwZSBzb3VwX3JlcXVl
c3RfZmlsZV9nZXRfdHlwZSAodm9pZCk7CisKK0dGaWxlICAqc291cF9yZXF1ZXN0X2ZpbGVfZ2V0
X2ZpbGUgKFNvdXBSZXF1ZXN0RmlsZSAqZmlsZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAv
KiBTT1VQX1JFUVVFU1RfRklMRV9IICovCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtaHR0cC5jIGIvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi44NzNjMmJlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuYwpAQCAtMCwwICsxLDMz
OSBAQAorLyoKKyAqIHNvdXAtcmVxdWVzdC1odHRwLmM6IGh0dHA6IFVSSSByZXF1ZXN0IG9iamVj
dAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29u
ZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGdsaWIvZ2kxOG4uaD4KKworI2luY2x1ZGUgInNv
dXAtY2FjaGUuaCIKKyNpbmNsdWRlICJzb3VwLWNhY2hlLXByaXZhdGUuaCIKKyNpbmNsdWRlICJz
b3VwLWh0dHAtaW5wdXQtc3RyZWFtLmgiCisjaW5jbHVkZSAic291cC1yZXF1ZXN0LWh0dHAuaCIK
KworR19ERUZJTkVfVFlQRSAoU291cFJlcXVlc3RIVFRQLCBzb3VwX3JlcXVlc3RfaHR0cCwgU09V
UF9UWVBFX1JFUVVFU1QpCisKK3N0cnVjdCBfU291cFJlcXVlc3RIVFRQUHJpdmF0ZSB7CisJU291
cE1lc3NhZ2UgKm1zZzsKK307CisKKy8qKgorICogc291cF9yZXF1ZXN0X2h0dHBfZ2V0X21lc3Nh
Z2U6CisgKiBAaHR0cDogYSAjU291cFJlcXVlc3RIVFRQIG9iamVjdAorICoKKyAqIEdldHMgYSBu
ZXcgcmVmZXJlbmNlIHRvIHRoZSAjU291cE1lc3NhZ2UgYXNzb2NpYXRlZCB0byB0aGlzIFNvdXBS
ZXF1ZXN0CisgKgorICogUmV0dXJuczogYSBuZXcgcmVmZXJlbmNlIHRvIHRoZSAjU291cE1lc3Nh
Z2UKKyAqKi8KK1NvdXBNZXNzYWdlICoKK3NvdXBfcmVxdWVzdF9odHRwX2dldF9tZXNzYWdlIChT
b3VwUmVxdWVzdEhUVFAgKmh0dHApCit7CisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFNPVVBfSVNf
UkVRVUVTVF9IVFRQIChodHRwKSwgTlVMTCk7CisKKwlyZXR1cm4gZ19vYmplY3RfcmVmIChodHRw
LT5wcml2LT5tc2cpOworfQorCitzdGF0aWMgdm9pZAorc291cF9yZXF1ZXN0X2h0dHBfaW5pdCAo
U291cFJlcXVlc3RIVFRQICpodHRwKQoreworCWh0dHAtPnByaXYgPSBHX1RZUEVfSU5TVEFOQ0Vf
R0VUX1BSSVZBVEUgKGh0dHAsIFNPVVBfVFlQRV9SRVFVRVNUX0hUVFAsIFNvdXBSZXF1ZXN0SFRU
UFByaXZhdGUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3NvdXBfcmVxdWVzdF9odHRwX2NoZWNr
X3VyaSAoU291cFJlcXVlc3QgICpyZXF1ZXN0LAorCQkJICAgICBTb3VwVVJJICAgICAgKnVyaSwK
KwkJCSAgICAgR0Vycm9yICAgICAgKiplcnJvcikKK3sKKwlTb3VwUmVxdWVzdEhUVFAgKmh0dHAg
PSBTT1VQX1JFUVVFU1RfSFRUUCAocmVxdWVzdCk7CisKKwlpZiAoIVNPVVBfVVJJX1ZBTElEX0ZP
Ul9IVFRQICh1cmkpKQorCQlyZXR1cm4gRkFMU0U7CisKKwlodHRwLT5wcml2LT5tc2cgPSBzb3Vw
X21lc3NhZ2VfbmV3X2Zyb21fdXJpIChTT1VQX01FVEhPRF9HRVQsIHVyaSk7CisJcmV0dXJuIFRS
VUU7Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX3JlcXVlc3RfaHR0cF9maW5hbGl6ZSAoR09iamVj
dCAqb2JqZWN0KQoreworCVNvdXBSZXF1ZXN0SFRUUCAqaHR0cCA9IFNPVVBfUkVRVUVTVF9IVFRQ
IChvYmplY3QpOworCisJaWYgKGh0dHAtPnByaXYtPm1zZykKKwkJZ19vYmplY3RfdW5yZWYgKGh0
dHAtPnByaXYtPm1zZyk7CisKKwlHX09CSkVDVF9DTEFTUyAoc291cF9yZXF1ZXN0X2h0dHBfcGFy
ZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Cit9CisKK3N0YXRpYyBHSW5wdXRTdHJlYW0g
Kgorc291cF9yZXF1ZXN0X2h0dHBfc2VuZCAoU291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3Qs
CisJCQlHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQlHRXJyb3IgICAgICAg
ICAgICAgICoqZXJyb3IpCit7CisJU291cEhUVFBJbnB1dFN0cmVhbSAqaHR0cHN0cmVhbTsKKwlT
b3VwUmVxdWVzdEhUVFAgKmh0dHAgPSBTT1VQX1JFUVVFU1RfSFRUUCAocmVxdWVzdCk7CisKKwlo
dHRwc3RyZWFtID0gc291cF9odHRwX2lucHV0X3N0cmVhbV9uZXcgKHNvdXBfcmVxdWVzdF9nZXRf
c2Vzc2lvbiAocmVxdWVzdCksIGh0dHAtPnByaXYtPm1zZyk7CisJaWYgKCFzb3VwX2h0dHBfaW5w
dXRfc3RyZWFtX3NlbmQgKGh0dHBzdHJlYW0sIGNhbmNlbGxhYmxlLCBlcnJvcikpIHsKKwkJZ19v
YmplY3RfdW5yZWYgKGh0dHBzdHJlYW0pOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuIChH
SW5wdXRTdHJlYW0gKilodHRwc3RyZWFtOworfQorCisKK3N0YXRpYyB2b2lkCitzZW50X2FzeW5j
IChHT2JqZWN0ICpzb3VyY2UsIEdBc3luY1Jlc3VsdCAqcmVzdWx0LCBncG9pbnRlciB1c2VyX2Rh
dGEpCit7CisJU291cEhUVFBJbnB1dFN0cmVhbSAqaHR0cHN0cmVhbSA9IFNPVVBfSFRUUF9JTlBV
VF9TVFJFQU0gKHNvdXJjZSk7CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpzaW1wbGUgPSB1c2VyX2Rh
dGE7CisJR0Vycm9yICplcnJvciA9IE5VTEw7CisKKwlpZiAoc291cF9odHRwX2lucHV0X3N0cmVh
bV9zZW5kX2ZpbmlzaCAoaHR0cHN0cmVhbSwgcmVzdWx0LCAmZXJyb3IpKSB7CisJCWdfc2ltcGxl
X2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dwb2ludGVyIChzaW1wbGUsIGh0dHBzdHJlYW0sIGdf
b2JqZWN0X3VucmVmKTsKKwl9IGVsc2UgeworCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X2Zy
b21fZXJyb3IgKHNpbXBsZSwgZXJyb3IpOworCQlnX2Vycm9yX2ZyZWUgKGVycm9yKTsKKwkJZ19v
YmplY3RfdW5yZWYgKGh0dHBzdHJlYW0pOworCX0KKwlnX3NpbXBsZV9hc3luY19yZXN1bHRfY29t
cGxldGUgKHNpbXBsZSk7CisJZ19vYmplY3RfdW5yZWYgKHNpbXBsZSk7Cit9CisKKwordHlwZWRl
ZiBzdHJ1Y3QgeworCVNvdXBSZXF1ZXN0SFRUUCAqcmVxOworCVNvdXBNZXNzYWdlICpvcmlnaW5h
bDsKKwlHQ2FuY2VsbGFibGUgKmNhbmNlbGxhYmxlOworCUdBc3luY1JlYWR5Q2FsbGJhY2sgY2Fs
bGJhY2s7CisJZ3BvaW50ZXIgdXNlcl9kYXRhOworfSBDb25kaXRpb25hbEhlbHBlcjsKKworCitz
dGF0aWMgdm9pZAorY29uZGl0aW9uYWxfZ2V0X3JlYWR5X2NiIChTb3VwU2Vzc2lvbiAqc2Vzc2lv
biwgU291cE1lc3NhZ2UgKm1zZywgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCUNvbmRpdGlvbmFs
SGVscGVyICpoZWxwZXIgPSAoQ29uZGl0aW9uYWxIZWxwZXIgKil1c2VyX2RhdGE7CisJR1NpbXBs
ZUFzeW5jUmVzdWx0ICpzaW1wbGU7CisJU291cEhUVFBJbnB1dFN0cmVhbSAqaHR0cHN0cmVhbTsK
KworCXNpbXBsZSA9IGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcgKEdfT0JKRUNUIChoZWxwZXIt
PnJlcSksCisJCQkJCSAgICBoZWxwZXItPmNhbGxiYWNrLCBoZWxwZXItPnVzZXJfZGF0YSwKKwkJ
CQkJICAgIGNvbmRpdGlvbmFsX2dldF9yZWFkeV9jYik7CisKKwlpZiAobXNnLT5zdGF0dXNfY29k
ZSA9PSBTT1VQX1NUQVRVU19OT1RfTU9ESUZJRUQpIHsKKwkJV2ViS2l0U291cENhY2hlICpjYWNo
ZSA9IChXZWJLaXRTb3VwQ2FjaGUgKilzb3VwX3Nlc3Npb25fZ2V0X2ZlYXR1cmUgKHNlc3Npb24s
IFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUpOworCisJCWh0dHBzdHJlYW0gPSAoU291cEhUVFBJbnB1
dFN0cmVhbSAqKXdlYmtpdF9zb3VwX2NhY2hlX3NlbmRfcmVzcG9uc2UgKGNhY2hlLCBtc2cpOwor
CQlpZiAoaHR0cHN0cmVhbSkgeworCQkJY29uc3QgZ2NoYXIgKmNvbnRlbnRfdHlwZTsKKworCQkJ
Z19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ3BvaW50ZXIgKHNpbXBsZSwgaHR0cHN0
cmVhbSwgZ19vYmplY3RfdW5yZWYpOworCisJCQlzb3VwX21lc3NhZ2VfZ290X2hlYWRlcnMgKGhl
bHBlci0+b3JpZ2luYWwpOworCQkJY29udGVudF90eXBlID0gc291cF9tZXNzYWdlX2hlYWRlcnNf
Z2V0X2NvbnRlbnRfdHlwZSAobXNnLT5yZXNwb25zZV9oZWFkZXJzLCBOVUxMKTsKKwkJCXNvdXBf
bWVzc2FnZV9jb250ZW50X3NuaWZmZWQgKGhlbHBlci0+b3JpZ2luYWwsIGNvbnRlbnRfdHlwZSwg
TlVMTCk7CisKKwkJCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZSAoc2ltcGxlKTsKKwor
CQkJc291cF9tZXNzYWdlX2ZpbmlzaGVkIChoZWxwZXItPm9yaWdpbmFsKTsKKworCQkJZ19vYmpl
Y3RfdW5yZWYgKHNpbXBsZSk7CisJCX0gZWxzZSB7CisJCQkvKiBBc2sgYWdhaW4gZm9yIHRoZSBy
ZXNvdXJjZSwgc29tZWhvdyB0aGUgY2FjaGUgY2Fubm90IGxvY2F0ZSBpdCAqLworCQkJaHR0cHN0
cmVhbSA9IHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fbmV3IChzZXNzaW9uLCBoZWxwZXItPm9yaWdp
bmFsKTsKKwkJCXNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luYyAoaHR0cHN0cmVhbSwg
R19QUklPUklUWV9ERUZBVUxULAorCQkJCQkJCSAgIGhlbHBlci0+Y2FuY2VsbGFibGUsIHNlbnRf
YXN5bmMsIHNpbXBsZSk7CisJCX0KKwl9IGVsc2UgeworCQkvKiBJdCBpcyBpbiB0aGUgY2FjaGUg
YnV0IGl0IHdhcyBtb2RpZmllZCByZW1vdGVseSAqLworCQlodHRwc3RyZWFtID0gc291cF9odHRw
X2lucHV0X3N0cmVhbV9uZXcgKHNlc3Npb24sIGhlbHBlci0+b3JpZ2luYWwpOworCQlzb3VwX2h0
dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmMgKGh0dHBzdHJlYW0sIEdfUFJJT1JJVFlfREVGQVVM
VCwKKwkJCQkJCSAgIGhlbHBlci0+Y2FuY2VsbGFibGUsIHNlbnRfYXN5bmMsIHNpbXBsZSk7CisJ
fQorCisJZ19vYmplY3RfdW5yZWYgKGhlbHBlci0+cmVxKTsKKwlnX29iamVjdF91bnJlZiAoaGVs
cGVyLT5vcmlnaW5hbCk7CisJZ19zbGljZV9mcmVlIChDb25kaXRpb25hbEhlbHBlciwgaGVscGVy
KTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworCVNvdXBSZXF1ZXN0SFRUUCAqaHR0cDsKKwlHQXN5
bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrOworCWdwb2ludGVyIHVzZXJfZGF0YTsKK30gU2VuZEFz
eW5jSGVscGVyOworCitzdGF0aWMgdm9pZCBzb3VwX3JlcXVlc3RfaHR0cF9zZW5kX2FzeW5jIChT
b3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKKwkJCQkJICBHQ2FuY2VsbGFibGUgICAgICAg
ICAqY2FuY2VsbGFibGUsCisJCQkJCSAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKKwkJ
CQkJICBncG9pbnRlciB1c2VyX2RhdGEpOworCitzdGF0aWMgZ2Jvb2xlYW4KK3NlbmRfYXN5bmNf
Y2IgKGdwb2ludGVyIGRhdGEpCit7CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpzaW1wbGU7CisJU291
cEhUVFBJbnB1dFN0cmVhbSAqaHR0cHN0cmVhbTsKKwlTb3VwU2Vzc2lvbiAqc2Vzc2lvbjsKKwlX
ZWJLaXRTb3VwQ2FjaGUgKmNhY2hlOworCVNlbmRBc3luY0hlbHBlciAqaGVscGVyID0gKFNlbmRB
c3luY0hlbHBlciAqKWRhdGE7CisKKwlzZXNzaW9uID0gc291cF9yZXF1ZXN0X2dldF9zZXNzaW9u
IChTT1VQX1JFUVVFU1QgKGhlbHBlci0+aHR0cCkpOworCWNhY2hlID0gKFdlYktpdFNvdXBDYWNo
ZSAqKXNvdXBfc2Vzc2lvbl9nZXRfZmVhdHVyZSAoc2Vzc2lvbiwgV0VCS0lUX1RZUEVfU09VUF9D
QUNIRSk7CisKKwlodHRwc3RyZWFtID0gKFNvdXBIVFRQSW5wdXRTdHJlYW0gKil3ZWJraXRfc291
cF9jYWNoZV9zZW5kX3Jlc3BvbnNlIChjYWNoZSwgU09VUF9NRVNTQUdFIChoZWxwZXItPmh0dHAt
PnByaXYtPm1zZykpOworCisJaWYgKGh0dHBzdHJlYW0pIHsKKwkJY29uc3QgZ2NoYXIgKmNvbnRl
bnRfdHlwZTsKKworCQlzaW1wbGUgPSBnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3IChHX09CSkVD
VCAoaGVscGVyLT5odHRwKSwKKwkJCQkJCSAgICBoZWxwZXItPmNhbGxiYWNrLCBoZWxwZXItPnVz
ZXJfZGF0YSwKKwkJCQkJCSAgICBzb3VwX3JlcXVlc3RfaHR0cF9zZW5kX2FzeW5jKTsKKwkJZ19z
aW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ3BvaW50ZXIgKHNpbXBsZSwgaHR0cHN0cmVh
bSwgZ19vYmplY3RfdW5yZWYpOworCisJCS8qIFVwZGF0ZSBtZXNzYWdlIHN0YXR1cyAqLworCQlz
b3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyAoaGVscGVyLT5odHRwLT5wcml2LT5tc2csIFNPVVBfU1RB
VFVTX09LKTsKKworCQkvKiBJc3N1ZSBzaWduYWxzICAqLworCQlzb3VwX21lc3NhZ2VfZ290X2hl
YWRlcnMgKGhlbHBlci0+aHR0cC0+cHJpdi0+bXNnKTsKKwkJY29udGVudF90eXBlID0gc291cF9t
ZXNzYWdlX2hlYWRlcnNfZ2V0X2NvbnRlbnRfdHlwZSAoaGVscGVyLT5odHRwLT5wcml2LT5tc2ct
PnJlc3BvbnNlX2hlYWRlcnMsIE5VTEwpOworCQlzb3VwX21lc3NhZ2VfY29udGVudF9zbmlmZmVk
IChoZWxwZXItPmh0dHAtPnByaXYtPm1zZywgY29udGVudF90eXBlLCBOVUxMKTsKKworCQlnX3Np
bXBsZV9hc3luY19yZXN1bHRfY29tcGxldGUgKHNpbXBsZSk7CisKKwkJc291cF9tZXNzYWdlX2Zp
bmlzaGVkIChoZWxwZXItPmh0dHAtPnByaXYtPm1zZyk7CisKKwkJZ19vYmplY3RfdW5yZWYgKHNp
bXBsZSk7CisJfQorCisJZ19zbGljZV9mcmVlIChTZW5kQXN5bmNIZWxwZXIsIGhlbHBlcik7CisK
KwlyZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX3JlcXVlc3RfaHR0cF9zZW5k
X2FzeW5jIChTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKKwkJCSAgICAgIEdDYW5jZWxs
YWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCSAgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sg
Y2FsbGJhY2ssCisJCQkgICAgICBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJU291cFJlcXVlc3RI
VFRQICpodHRwID0gU09VUF9SRVFVRVNUX0hUVFAgKHJlcXVlc3QpOworCVNvdXBIVFRQSW5wdXRT
dHJlYW0gKmh0dHBzdHJlYW07CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpzaW1wbGU7CisJU291cFNl
c3Npb24gKnNlc3Npb247CisJV2ViS2l0U291cENhY2hlICpjYWNoZTsKKworCXNlc3Npb24gPSBz
b3VwX3JlcXVlc3RfZ2V0X3Nlc3Npb24gKHJlcXVlc3QpOworCWNhY2hlID0gKFdlYktpdFNvdXBD
YWNoZSAqKXNvdXBfc2Vzc2lvbl9nZXRfZmVhdHVyZSAoc2Vzc2lvbiwgV0VCS0lUX1RZUEVfU09V
UF9DQUNIRSk7CisKKwlpZiAoY2FjaGUpIHsKKwkJV2ViS2l0U291cENhY2hlUmVzcG9uc2UgcmVz
cG9uc2U7CisKKwkJcmVzcG9uc2UgPSB3ZWJraXRfc291cF9jYWNoZV9oYXNfcmVzcG9uc2UgKGNh
Y2hlLCBodHRwLT5wcml2LT5tc2cpOworCQlpZiAocmVzcG9uc2UgPT0gV0VCS0lUX1NPVVBfQ0FD
SEVfUkVTUE9OU0VfRlJFU0gpIHsKKwkJCS8qIERvIHJldHVybiB0aGUgc3RyZWFtIGFzeW5jaHJv
bm91c2x5IGFzIGluCisJCQkgICB0aGUgb3RoZXIgY2FzZXMuIEl0J3Mgbm90IGVub3VnaCB0byB1
c2UKKwkJCSAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZV9pbl9pZGxlIGFzCisJCQkg
ICB0aGUgc2lnbmFscyBtdXN0IGJlIGFsc28gZW1pdHRlZAorCQkJICAgYXN5bmNocm9ub3VzbHkg
Ki8KKwkJCVNlbmRBc3luY0hlbHBlciAqaGVscGVyID0gZ19zbGljZV9uZXcgKFNlbmRBc3luY0hl
bHBlcik7CisJCQloZWxwZXItPmh0dHAgPSBodHRwOworCQkJaGVscGVyLT5jYWxsYmFjayA9IGNh
bGxiYWNrOworCQkJaGVscGVyLT51c2VyX2RhdGEgPSB1c2VyX2RhdGE7CisJCQlnX3RpbWVvdXRf
YWRkICgwLCBzZW5kX2FzeW5jX2NiLCBoZWxwZXIpOworCQkJcmV0dXJuOworCQl9IGVsc2UgaWYg
KHJlc3BvbnNlID09IFdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX05FRURTX1ZBTElEQVRJT04p
IHsKKwkJCVNvdXBNZXNzYWdlICpjb25kaXRpb25hbF9tc2c7CisJCQlDb25kaXRpb25hbEhlbHBl
ciAqaGVscGVyOworCisJCQljb25kaXRpb25hbF9tc2cgPSB3ZWJraXRfc291cF9jYWNoZV9nZW5l
cmF0ZV9jb25kaXRpb25hbF9yZXF1ZXN0IChjYWNoZSwgaHR0cC0+cHJpdi0+bXNnKTsKKworCQkJ
aGVscGVyID0gZ19zbGljZV9uZXcwIChDb25kaXRpb25hbEhlbHBlcik7CisJCQloZWxwZXItPnJl
cSA9IGdfb2JqZWN0X3JlZiAoaHR0cCk7CisJCQloZWxwZXItPm9yaWdpbmFsID0gZ19vYmplY3Rf
cmVmIChodHRwLT5wcml2LT5tc2cpOworCQkJaGVscGVyLT5jYW5jZWxsYWJsZSA9IGNhbmNlbGxh
YmxlOworCQkJaGVscGVyLT5jYWxsYmFjayA9IGNhbGxiYWNrOworCQkJaGVscGVyLT51c2VyX2Rh
dGEgPSB1c2VyX2RhdGE7CisJCQlzb3VwX3Nlc3Npb25fcXVldWVfbWVzc2FnZSAoc2Vzc2lvbiwg
Y29uZGl0aW9uYWxfbXNnLAorCQkJCQkJICAgIGNvbmRpdGlvbmFsX2dldF9yZWFkeV9jYiwKKwkJ
CQkJCSAgICBoZWxwZXIpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJc2ltcGxlID0gZ19zaW1w
bGVfYXN5bmNfcmVzdWx0X25ldyAoR19PQkpFQ1QgKGh0dHApLAorCQkJCQkgICAgY2FsbGJhY2ss
IHVzZXJfZGF0YSwKKwkJCQkJICAgIHNvdXBfcmVxdWVzdF9odHRwX3NlbmRfYXN5bmMpOworCWh0
dHBzdHJlYW0gPSBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX25ldyAoc291cF9yZXF1ZXN0X2dldF9z
ZXNzaW9uIChyZXF1ZXN0KSwKKwkJCQkJCSBodHRwLT5wcml2LT5tc2cpOworCXNvdXBfaHR0cF9p
bnB1dF9zdHJlYW1fc2VuZF9hc3luYyAoaHR0cHN0cmVhbSwgR19QUklPUklUWV9ERUZBVUxULAor
CQkJCQkgICBjYW5jZWxsYWJsZSwgc2VudF9hc3luYywgc2ltcGxlKTsKK30KKworc3RhdGljIEdJ
bnB1dFN0cmVhbSAqCitzb3VwX3JlcXVlc3RfaHR0cF9zZW5kX2ZpbmlzaCAoU291cFJlcXVlc3Qg
ICAgICAgICAgKnJlcXVlc3QsCisJCQkgICAgICAgR0FzeW5jUmVzdWx0ICAgICAgICAgKnJlc3Vs
dCwKKwkJCSAgICAgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpCit7CisJR1NpbXBsZUFz
eW5jUmVzdWx0ICpzaW1wbGU7CisKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoZ19zaW1wbGVfYXN5
bmNfcmVzdWx0X2lzX3ZhbGlkIChyZXN1bHQsIEdfT0JKRUNUIChyZXF1ZXN0KSwgc291cF9yZXF1
ZXN0X2h0dHBfc2VuZF9hc3luYykgfHwgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2lzX3ZhbGlkIChy
ZXN1bHQsIEdfT0JKRUNUIChyZXF1ZXN0KSwgY29uZGl0aW9uYWxfZ2V0X3JlYWR5X2NiKSwgTlVM
TCk7CisKKwlzaW1wbGUgPSBHX1NJTVBMRV9BU1lOQ19SRVNVTFQgKHJlc3VsdCk7CisJaWYgKGdf
c2ltcGxlX2FzeW5jX3Jlc3VsdF9wcm9wYWdhdGVfZXJyb3IgKHNpbXBsZSwgZXJyb3IpKQorCQly
ZXR1cm4gTlVMTDsKKwlyZXR1cm4gZ19vYmplY3RfcmVmIChnX3NpbXBsZV9hc3luY19yZXN1bHRf
Z2V0X29wX3Jlc19ncG9pbnRlciAoc2ltcGxlKSk7Cit9CisKK3N0YXRpYyBnb2Zmc2V0Citzb3Vw
X3JlcXVlc3RfaHR0cF9nZXRfY29udGVudF9sZW5ndGggKFNvdXBSZXF1ZXN0ICpyZXF1ZXN0KQor
eworCVNvdXBSZXF1ZXN0SFRUUCAqaHR0cCA9IFNPVVBfUkVRVUVTVF9IVFRQIChyZXF1ZXN0KTsK
KworCXJldHVybiBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfY29udGVudF9sZW5ndGggKGh0dHAt
PnByaXYtPm1zZy0+cmVzcG9uc2VfaGVhZGVycyk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoK
K3NvdXBfcmVxdWVzdF9odHRwX2dldF9jb250ZW50X3R5cGUgKFNvdXBSZXF1ZXN0ICpyZXF1ZXN0
KQoreworCVNvdXBSZXF1ZXN0SFRUUCAqaHR0cCA9IFNPVVBfUkVRVUVTVF9IVFRQIChyZXF1ZXN0
KTsKKworCXJldHVybiBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfY29udGVudF90eXBlIChodHRw
LT5wcml2LT5tc2ctPnJlc3BvbnNlX2hlYWRlcnMsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZAor
c291cF9yZXF1ZXN0X2h0dHBfY2xhc3NfaW5pdCAoU291cFJlcXVlc3RIVFRQQ2xhc3MgKnJlcXVl
c3RfaHR0cF9jbGFzcykKK3sKKwlHT2JqZWN0Q2xhc3MgKm9iamVjdF9jbGFzcyA9IEdfT0JKRUNU
X0NMQVNTIChyZXF1ZXN0X2h0dHBfY2xhc3MpOworCVNvdXBSZXF1ZXN0Q2xhc3MgKnJlcXVlc3Rf
Y2xhc3MgPQorCQlTT1VQX1JFUVVFU1RfQ0xBU1MgKHJlcXVlc3RfaHR0cF9jbGFzcyk7CisKKwln
X3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUgKHJlcXVlc3RfaHR0cF9jbGFzcywgc2l6ZW9mIChTb3Vw
UmVxdWVzdEhUVFBQcml2YXRlKSk7CisKKwlvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gc291cF9y
ZXF1ZXN0X2h0dHBfZmluYWxpemU7CisKKwlyZXF1ZXN0X2NsYXNzLT5jaGVja191cmkgPSBzb3Vw
X3JlcXVlc3RfaHR0cF9jaGVja191cmk7CisJcmVxdWVzdF9jbGFzcy0+c2VuZCA9IHNvdXBfcmVx
dWVzdF9odHRwX3NlbmQ7CisJcmVxdWVzdF9jbGFzcy0+c2VuZF9hc3luYyA9IHNvdXBfcmVxdWVz
dF9odHRwX3NlbmRfYXN5bmM7CisJcmVxdWVzdF9jbGFzcy0+c2VuZF9maW5pc2ggPSBzb3VwX3Jl
cXVlc3RfaHR0cF9zZW5kX2ZpbmlzaDsKKwlyZXF1ZXN0X2NsYXNzLT5nZXRfY29udGVudF9sZW5n
dGggPSBzb3VwX3JlcXVlc3RfaHR0cF9nZXRfY29udGVudF9sZW5ndGg7CisJcmVxdWVzdF9jbGFz
cy0+Z2V0X2NvbnRlbnRfdHlwZSA9IHNvdXBfcmVxdWVzdF9odHRwX2dldF9jb250ZW50X3R5cGU7
Cit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3Vw
LXJlcXVlc3QtaHR0cC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291
cC1yZXF1ZXN0LWh0dHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjMy
ZjBiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2Fj
aGUvc291cC1yZXF1ZXN0LWh0dHAuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMu
TC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmbmRlZiBTT1VQX1JFUVVFU1RfSFRUUF9ICisjZGVmaW5lIFNPVVBfUkVRVUVTVF9IVFRQ
X0ggMQorCisjaW5jbHVkZSAic291cC1yZXF1ZXN0LmgiCisKK0dfQkVHSU5fREVDTFMKKworI2Rl
ZmluZSBTT1VQX1RZUEVfUkVRVUVTVF9IVFRQICAgICAgICAgICAgKHNvdXBfcmVxdWVzdF9odHRw
X2dldF90eXBlICgpKQorI2RlZmluZSBTT1VQX1JFUVVFU1RfSFRUUChvYmplY3QpICAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqZWN0KSwgU09VUF9UWVBFX1JFUVVFU1Rf
SFRUUCwgU291cFJlcXVlc3RIVFRQKSkKKyNkZWZpbmUgU09VUF9SRVFVRVNUX0hUVFBfQ0xBU1Mo
a2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgU09VUF9UWVBFX1JF
UVVFU1RfSFRUUCwgU291cFJlcXVlc3RIVFRQQ2xhc3MpKQorI2RlZmluZSBTT1VQX0lTX1JFUVVF
U1RfSFRUUChvYmplY3QpICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqZWN0
KSwgU09VUF9UWVBFX1JFUVVFU1RfSFRUUCkpCisjZGVmaW5lIFNPVVBfSVNfUkVRVUVTVF9IVFRQ
X0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIFNPVVBfVFlQ
RV9SRVFVRVNUX0hUVFApKQorI2RlZmluZSBTT1VQX1JFUVVFU1RfSFRUUF9HRVRfQ0xBU1Mob2Jq
KSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBTT1VQX1RZUEVfUkVRVUVTVF9I
VFRQLCBTb3VwUmVxdWVzdEhUVFBDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9Tb3VwUmVxdWVz
dEhUVFBQcml2YXRlIFNvdXBSZXF1ZXN0SFRUUFByaXZhdGU7CisKK3R5cGVkZWYgc3RydWN0IHsK
KwlTb3VwUmVxdWVzdCBwYXJlbnQ7CisKKwlTb3VwUmVxdWVzdEhUVFBQcml2YXRlICpwcml2Owor
fSBTb3VwUmVxdWVzdEhUVFA7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlTb3VwUmVxdWVzdENsYXNz
IHBhcmVudDsKK30gU291cFJlcXVlc3RIVFRQQ2xhc3M7CisKK0dUeXBlIHNvdXBfcmVxdWVzdF9o
dHRwX2dldF90eXBlICh2b2lkKTsKKworU291cE1lc3NhZ2UgICpzb3VwX3JlcXVlc3RfaHR0cF9n
ZXRfbWVzc2FnZSAoU291cFJlcXVlc3RIVFRQICpodHRwKTsKKworR19FTkRfREVDTFMKKworI2Vu
ZGlmIC8qIFNPVVBfUkVRVUVTVF9IVFRQX0ggKi8KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5jIGIvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYzZhN2JkMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5jCkBAIC0wLDAgKzEsMjc5IEBACisvKgor
ICogc291cC1yZXF1ZXN0LmM6IFByb3RvY29sLWluZGVwZW5kZW50IHN0cmVhbWluZyByZXF1ZXN0
IGludGVyZmFjZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAsIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5j
bHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGdsaWIvZ2kxOG4uaD4KKworI2lu
Y2x1ZGUgInNvdXAtcmVxdWVzdC5oIgorI2luY2x1ZGUgInNvdXAtcmVxdWVzdGVyLmgiCisKKy8q
KgorICogU0VDVElPTjpzb3VwLXJlcXVlc3QKKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogUHJvdG9j
b2wtaW5kZXBlbmRlbnQgc3RyZWFtaW5nIHJlcXVlc3QgaW50ZXJmYWNlCisgKgorICogRklYTUUK
KyAqKi8KKworLyoqCisgKiBTb3VwUmVxdWVzdDoKKyAqCisgKiBGSVhNRQorICoKKyAqIFNpbmNl
OiAyLjMwCisgKiovCisKK3N0YXRpYyB2b2lkIHNvdXBfcmVxdWVzdF9pbml0YWJsZV9pbnRlcmZh
Y2VfaW5pdCAoR0luaXRhYmxlSWZhY2UgKmluaXRhYmxlX2ludGVyZmFjZSk7CisKK0dfREVGSU5F
X1RZUEVfV0lUSF9DT0RFIChTb3VwUmVxdWVzdCwgc291cF9yZXF1ZXN0LCBHX1RZUEVfT0JKRUNU
LAorCQkJIEdfSU1QTEVNRU5UX0lOVEVSRkFDRSAoR19UWVBFX0lOSVRBQkxFLAorCQkJCQkJc291
cF9yZXF1ZXN0X2luaXRhYmxlX2ludGVyZmFjZV9pbml0KSkKKworZW51bSB7CisJUFJPUF8wLAor
CVBST1BfVVJJLAorCVBST1BfU0VTU0lPTgorfTsKKworc3RydWN0IF9Tb3VwUmVxdWVzdFByaXZh
dGUgeworCVNvdXBVUkkgKnVyaTsKKwlTb3VwU2Vzc2lvbiAqc2Vzc2lvbjsKK307CisKK3N0YXRp
YyB2b2lkCitzb3VwX3JlcXVlc3RfaW5pdCAoU291cFJlcXVlc3QgKnJlcXVlc3QpCit7CisJcmVx
dWVzdC0+cHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAocmVxdWVzdCwgU09VUF9U
WVBFX1JFUVVFU1QsIFNvdXBSZXF1ZXN0UHJpdmF0ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitzb3Vw
X3JlcXVlc3RfZmluYWxpemUgKEdPYmplY3QgKm9iamVjdCkKK3sKKwlTb3VwUmVxdWVzdCAqcmVx
dWVzdCA9IFNPVVBfUkVRVUVTVCAob2JqZWN0KTsKKworCWlmIChyZXF1ZXN0LT5wcml2LT51cmkp
CisJCXNvdXBfdXJpX2ZyZWUgKHJlcXVlc3QtPnByaXYtPnVyaSk7CisJaWYgKHJlcXVlc3QtPnBy
aXYtPnNlc3Npb24pCisJCWdfb2JqZWN0X3VucmVmIChyZXF1ZXN0LT5wcml2LT5zZXNzaW9uKTsK
KworCUdfT0JKRUNUX0NMQVNTIChzb3VwX3JlcXVlc3RfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUg
KG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX3JlcXVlc3Rfc2V0X3Byb3BlcnR5IChH
T2JqZWN0ICAgICAgKm9iamVjdCwKKwkJCSAgIGd1aW50IHByb3BfaWQsCisJCQkgICBjb25zdCBH
VmFsdWUgKnZhbHVlLAorCQkJICAgR1BhcmFtU3BlYyAgICpwc3BlYykKK3sKKwlTb3VwUmVxdWVz
dCAqcmVxdWVzdCA9IFNPVVBfUkVRVUVTVCAob2JqZWN0KTsKKworCXN3aXRjaCAocHJvcF9pZCkg
eworCQljYXNlIFBST1BfVVJJOgorCQkJaWYgKHJlcXVlc3QtPnByaXYtPnVyaSkKKwkJCQlzb3Vw
X3VyaV9mcmVlIChyZXF1ZXN0LT5wcml2LT51cmkpOworCQkJcmVxdWVzdC0+cHJpdi0+dXJpID0g
Z192YWx1ZV9kdXBfYm94ZWQgKHZhbHVlKTsKKwkJCWJyZWFrOworCQljYXNlIFBST1BfU0VTU0lP
TjoKKwkJCWlmIChyZXF1ZXN0LT5wcml2LT5zZXNzaW9uKQorCQkJCWdfb2JqZWN0X3VucmVmIChy
ZXF1ZXN0LT5wcml2LT5zZXNzaW9uKTsKKwkJCXJlcXVlc3QtPnByaXYtPnNlc3Npb24gPSBnX3Zh
bHVlX2R1cF9vYmplY3QgKHZhbHVlKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJR19PQkpF
Q1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKwkJ
CWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQKK3NvdXBfcmVxdWVzdF9nZXRfcHJvcGVydHkg
KEdPYmplY3QgICAgKm9iamVjdCwKKwkJCSAgIGd1aW50IHByb3BfaWQsCisJCQkgICBHVmFsdWUg
ICAgICp2YWx1ZSwKKwkJCSAgIEdQYXJhbVNwZWMgKnBzcGVjKQoreworCVNvdXBSZXF1ZXN0ICpy
ZXF1ZXN0ID0gU09VUF9SRVFVRVNUIChvYmplY3QpOworCisJc3dpdGNoIChwcm9wX2lkKSB7CisJ
CWNhc2UgUFJPUF9VUkk6CisJCQlnX3ZhbHVlX3NldF9ib3hlZCAodmFsdWUsIHJlcXVlc3QtPnBy
aXYtPnVyaSk7CisJCQlicmVhazsKKwkJY2FzZSBQUk9QX1NFU1NJT046CisJCQlnX3ZhbHVlX3Nl
dF9vYmplY3QgKHZhbHVlLCByZXF1ZXN0LT5wcml2LT5zZXNzaW9uKTsKKwkJCWJyZWFrOworCQlk
ZWZhdWx0OgorCQkJR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHBy
b3BfaWQsIHBzcGVjKTsKKwkJCWJyZWFrOworCX0KK30KKworc3RhdGljIGdib29sZWFuCitzb3Vw
X3JlcXVlc3RfaW5pdGFibGVfaW5pdCAoR0luaXRhYmxlICAgICAqaW5pdGFibGUsCisJCQkgICAg
R0NhbmNlbGxhYmxlICAqY2FuY2VsbGFibGUsCisJCQkgICAgR0Vycm9yICAgICAgICoqZXJyb3Ip
Cit7CisJU291cFJlcXVlc3QgKnJlcXVlc3QgPSBTT1VQX1JFUVVFU1QgKGluaXRhYmxlKTsKKwln
Ym9vbGVhbiBvazsKKworCWlmICghcmVxdWVzdC0+cHJpdi0+dXJpKSB7CisJCWdfc2V0X2Vycm9y
IChlcnJvciwgU09VUF9FUlJPUiwgU09VUF9FUlJPUl9CQURfVVJJLAorCQkJICAgICBfICgiTm8g
VVJJIHByb3ZpZGVkIikpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJb2sgPSBTT1VQX1JFUVVF
U1RfR0VUX0NMQVNTIChpbml0YWJsZSktPgorCSAgICAgY2hlY2tfdXJpIChyZXF1ZXN0LCByZXF1
ZXN0LT5wcml2LT51cmksIGVycm9yKTsKKworCWlmICghb2sgJiYgZXJyb3IpIHsKKwkJY2hhciAq
dXJpX3N0cmluZyA9IHNvdXBfdXJpX3RvX3N0cmluZyAocmVxdWVzdC0+cHJpdi0+dXJpLCBGQUxT
RSk7CisJCWdfc2V0X2Vycm9yIChlcnJvciwgU09VUF9FUlJPUiwgU09VUF9FUlJPUl9CQURfVVJJ
LAorCQkJICAgICBfICgiSW52YWxpZCAnJXMnIFVSSTogJXMiKSwKKwkJCSAgICAgcmVxdWVzdC0+
cHJpdi0+dXJpLT5zY2hlbWUsCisJCQkgICAgIHVyaV9zdHJpbmcpOworCQlnX2ZyZWUgKHVyaV9z
dHJpbmcpOworCX0KKworCXJldHVybiBvazsKK30KKworc3RhdGljIGdib29sZWFuCitzb3VwX3Jl
cXVlc3RfZGVmYXVsdF9jaGVja191cmkgKFNvdXBSZXF1ZXN0ICAqcmVxdWVzdCwKKwkJCQlTb3Vw
VVJJICAgICAgKnVyaSwKKwkJCQlHRXJyb3IgICAgICAqKmVycm9yKQoreworCXJldHVybiBUUlVF
OworfQorCisvKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uOiBhc3N1bWUgdGhlIHN5bmMgaW1wbGVt
ZW50YXRpb24gZG9lc24ndCBibG9jayAqLworc3RhdGljIHZvaWQKK3NvdXBfcmVxdWVzdF9kZWZh
dWx0X3NlbmRfYXN5bmMgKFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAorCQkJCSBHQ2Fu
Y2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJIEdBc3luY1JlYWR5Q2FsbGJhY2sg
Y2FsbGJhY2ssCisJCQkJIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlHU2ltcGxlQXN5bmNSZXN1
bHQgKnNpbXBsZTsKKworCXNpbXBsZSA9IGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcgKEdfT0JK
RUNUIChyZXF1ZXN0KSwKKwkJCQkJICAgIGNhbGxiYWNrLCB1c2VyX2RhdGEsCisJCQkJCSAgICBz
b3VwX3JlcXVlc3RfZGVmYXVsdF9zZW5kX2FzeW5jKTsKKwlnX3NpbXBsZV9hc3luY19yZXN1bHRf
Y29tcGxldGVfaW5faWRsZSAoc2ltcGxlKTsKKwlnX29iamVjdF91bnJlZiAoc2ltcGxlKTsKK30K
Kworc3RhdGljIEdJbnB1dFN0cmVhbSAqCitzb3VwX3JlcXVlc3RfZGVmYXVsdF9zZW5kX2Zpbmlz
aCAoU291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCisJCQkJICBHQXN5bmNSZXN1bHQgICAg
ICAgICAqcmVzdWx0LAorCQkJCSAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKQoreworCWdf
cmV0dXJuX3ZhbF9pZl9mYWlsIChnX3NpbXBsZV9hc3luY19yZXN1bHRfaXNfdmFsaWQgKHJlc3Vs
dCwgR19PQkpFQ1QgKHJlcXVlc3QpLCBzb3VwX3JlcXVlc3RfZGVmYXVsdF9zZW5kX2FzeW5jKSwg
TlVMTCk7CisKKwlyZXR1cm4gc291cF9yZXF1ZXN0X3NlbmQgKHJlcXVlc3QsIE5VTEwsIGVycm9y
KTsKK30KKworR0lucHV0U3RyZWFtICoKK3NvdXBfcmVxdWVzdF9zZW5kIChTb3VwUmVxdWVzdCAg
ICAgICAgICAqcmVxdWVzdCwKKwkJICAgR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxl
LAorCQkgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpCit7CisJcmV0dXJuIFNPVVBfUkVR
VUVTVF9HRVRfQ0xBU1MgKHJlcXVlc3QpLT4KKwkgICAgICAgc2VuZCAocmVxdWVzdCwgY2FuY2Vs
bGFibGUsIGVycm9yKTsKK30KKwordm9pZAorc291cF9yZXF1ZXN0X3NlbmRfYXN5bmMgKFNvdXBS
ZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAorCQkJIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5j
ZWxsYWJsZSwKKwkJCSBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAorCQkJIGdwb2ludGVy
IHVzZXJfZGF0YSkKK3sKKwlTT1VQX1JFUVVFU1RfR0VUX0NMQVNTIChyZXF1ZXN0KS0+CisJc2Vu
ZF9hc3luYyAocmVxdWVzdCwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyX2RhdGEpOworfQor
CitHSW5wdXRTdHJlYW0gKgorc291cF9yZXF1ZXN0X3NlbmRfZmluaXNoIChTb3VwUmVxdWVzdCAg
ICAgICAgICAqcmVxdWVzdCwKKwkJCSAgR0FzeW5jUmVzdWx0ICAgICAgICAgKnJlc3VsdCwKKwkJ
CSAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKQoreworCXJldHVybiBTT1VQX1JFUVVFU1Rf
R0VUX0NMQVNTIChyZXF1ZXN0KS0+CisJICAgICAgIHNlbmRfZmluaXNoIChyZXF1ZXN0LCByZXN1
bHQsIGVycm9yKTsKK30KKworc3RhdGljIHZvaWQKK3NvdXBfcmVxdWVzdF9jbGFzc19pbml0IChT
b3VwUmVxdWVzdENsYXNzICpyZXF1ZXN0X2NsYXNzKQoreworCUdPYmplY3RDbGFzcyAqb2JqZWN0
X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKHJlcXVlc3RfY2xhc3MpOworCisJZ190eXBlX2NsYXNz
X2FkZF9wcml2YXRlIChyZXF1ZXN0X2NsYXNzLCBzaXplb2YgKFNvdXBSZXF1ZXN0UHJpdmF0ZSkp
OworCisJcmVxdWVzdF9jbGFzcy0+Y2hlY2tfdXJpID0gc291cF9yZXF1ZXN0X2RlZmF1bHRfY2hl
Y2tfdXJpOworCXJlcXVlc3RfY2xhc3MtPnNlbmRfYXN5bmMgPSBzb3VwX3JlcXVlc3RfZGVmYXVs
dF9zZW5kX2FzeW5jOworCXJlcXVlc3RfY2xhc3MtPnNlbmRfZmluaXNoID0gc291cF9yZXF1ZXN0
X2RlZmF1bHRfc2VuZF9maW5pc2g7CisKKwlvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gc291cF9y
ZXF1ZXN0X2ZpbmFsaXplOworCW9iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gc291cF9yZXF1
ZXN0X3NldF9wcm9wZXJ0eTsKKwlvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IHNvdXBfcmVx
dWVzdF9nZXRfcHJvcGVydHk7CisKKwlnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5ICgK
KwkJb2JqZWN0X2NsYXNzLCBQUk9QX1VSSSwKKwkJZ19wYXJhbV9zcGVjX2JveGVkIChTT1VQX1JF
UVVFU1RfVVJJLAorCQkJCSAgICAiVVJJIiwKKwkJCQkgICAgIlRoZSByZXF1ZXN0IFVSSSIsCisJ
CQkJICAgIFNPVVBfVFlQRV9VUkksCisJCQkJICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJB
TV9DT05TVFJVQ1RfT05MWSkpOworCWdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKAor
CQlvYmplY3RfY2xhc3MsIFBST1BfU0VTU0lPTiwKKwkJZ19wYXJhbV9zcGVjX29iamVjdCAoU09V
UF9SRVFVRVNUX1NFU1NJT04sCisJCQkJICAgICAiU2Vzc2lvbiIsCisJCQkJICAgICAiVGhlIHJl
cXVlc3QncyBzZXNzaW9uIiwKKwkJCQkgICAgIFNPVVBfVFlQRV9TRVNTSU9OLAorCQkJCSAgICAg
R19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSk7Cit9CisKK3N0YXRp
YyB2b2lkCitzb3VwX3JlcXVlc3RfaW5pdGFibGVfaW50ZXJmYWNlX2luaXQgKEdJbml0YWJsZUlm
YWNlICppbml0YWJsZV9pbnRlcmZhY2UpCit7CisJaW5pdGFibGVfaW50ZXJmYWNlLT5pbml0ID0g
c291cF9yZXF1ZXN0X2luaXRhYmxlX2luaXQ7Cit9CisKK1NvdXBVUkkgKgorc291cF9yZXF1ZXN0
X2dldF91cmkgKFNvdXBSZXF1ZXN0ICpyZXF1ZXN0KQoreworCXJldHVybiByZXF1ZXN0LT5wcml2
LT51cmk7Cit9CisKK1NvdXBTZXNzaW9uICoKK3NvdXBfcmVxdWVzdF9nZXRfc2Vzc2lvbiAoU291
cFJlcXVlc3QgKnJlcXVlc3QpCit7CisJcmV0dXJuIHJlcXVlc3QtPnByaXYtPnNlc3Npb247Cit9
CisKK2dvZmZzZXQKK3NvdXBfcmVxdWVzdF9nZXRfY29udGVudF9sZW5ndGggKFNvdXBSZXF1ZXN0
ICpyZXF1ZXN0KQoreworCXJldHVybiBTT1VQX1JFUVVFU1RfR0VUX0NMQVNTIChyZXF1ZXN0KS0+
Z2V0X2NvbnRlbnRfbGVuZ3RoIChyZXF1ZXN0KTsKK30KKworY29uc3QgY2hhciAqCitzb3VwX3Jl
cXVlc3RfZ2V0X2NvbnRlbnRfdHlwZSAoU291cFJlcXVlc3QgICpyZXF1ZXN0KQoreworCXJldHVy
biBTT1VQX1JFUVVFU1RfR0VUX0NMQVNTIChyZXF1ZXN0KS0+Z2V0X2NvbnRlbnRfdHlwZSAocmVx
dWVzdCk7Cit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNo
ZS9zb3VwLXJlcXVlc3QuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3Nv
dXAtcmVxdWVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNTBhYzIK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9z
b3VwLXJlcXVlc3QuaApAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5
IFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRl
ZiBTT1VQX1JFUVVFU1RfSAorI2RlZmluZSBTT1VQX1JFUVVFU1RfSCAxCisKKyNpbmNsdWRlIDxs
aWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDxnaW8vZ2lvLmg+CisKK0dfQkVHSU5fREVDTFMKKwor
I2RlZmluZSBTT1VQX1RZUEVfUkVRVUVTVCAgICAgICAgICAgIChzb3VwX3JlcXVlc3RfZ2V0X3R5
cGUgKCkpCisjZGVmaW5lIFNPVVBfUkVRVUVTVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVD
S19JTlNUQU5DRV9DQVNUICgob2JqKSwgU09VUF9UWVBFX1JFUVVFU1QsIFNvdXBSZXF1ZXN0KSkK
KyNkZWZpbmUgU09VUF9SRVFVRVNUX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNT
X0NBU1QgKChrbGFzcyksIFNPVVBfVFlQRV9SRVFVRVNULCBTb3VwUmVxdWVzdENsYXNzKSkKKyNk
ZWZpbmUgU09VUF9JU19SRVFVRVNUKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNF
X1RZUEUgKChvYmopLCBTT1VQX1RZUEVfUkVRVUVTVCkpCisjZGVmaW5lIFNPVVBfSVNfUkVRVUVT
VF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBTT1VQX1RZ
UEVfUkVRVUVTVCkpCisjZGVmaW5lIFNPVVBfUkVRVUVTVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQ
RV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBTT1VQX1RZUEVfUkVRVUVTVCwgU291cFJlcXVl
c3RDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9Tb3VwUmVxdWVzdCBTb3VwUmVxdWVzdDsKK3R5
cGVkZWYgc3RydWN0IF9Tb3VwUmVxdWVzdFByaXZhdGUgU291cFJlcXVlc3RQcml2YXRlOwordHlw
ZWRlZiBzdHJ1Y3QgX1NvdXBSZXF1ZXN0Q2xhc3MgU291cFJlcXVlc3RDbGFzczsKKworc3RydWN0
IF9Tb3VwUmVxdWVzdCB7CisJR09iamVjdCBwYXJlbnQ7CisKKwlTb3VwUmVxdWVzdFByaXZhdGUg
KnByaXY7Cit9OworCitzdHJ1Y3QgX1NvdXBSZXF1ZXN0Q2xhc3MgeworCUdPYmplY3RDbGFzcyBw
YXJlbnQ7CisKKwlnYm9vbGVhbiAoKmNoZWNrX3VyaSkoU291cFJlcXVlc3QgICAgICAgICAgKnJl
cV9iYXNlLAorCQkJICAgICAgU291cFVSSSAgICAgICAgICAgICAgKnVyaSwKKwkJCSAgICAgIEdF
cnJvciAgICAgICAgICAgICAgKiplcnJvcik7CisKKwlHSW5wdXRTdHJlYW0gKiAoKnNlbmQpKFNv
dXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAorCQkJICAgICAgIEdDYW5jZWxsYWJsZSAgICAg
ICAgICpjYW5jZWxsYWJsZSwKKwkJCSAgICAgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3Ip
OworCXZvaWQgKCpzZW5kX2FzeW5jKShTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKKwkJ
CSAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCSAgIEdBc3luY1JlYWR5
Q2FsbGJhY2sgY2FsbGJhY2ssCisJCQkgICBncG9pbnRlciB1c2VyX2RhdGEpOworCUdJbnB1dFN0
cmVhbSAqICgqc2VuZF9maW5pc2gpKFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAorCQkJ
CSAgICAgIEdBc3luY1Jlc3VsdCAgICAgICAgICpyZXN1bHQsCisJCQkJICAgICAgR0Vycm9yICAg
ICAgICAgICAgICAqKmVycm9yKTsKKworCWdvZmZzZXQgKCpnZXRfY29udGVudF9sZW5ndGgpKFNv
dXBSZXF1ZXN0ICAgKnJlcXVlc3QpOworCWNvbnN0IGNoYXIgKiAgICgqZ2V0X2NvbnRlbnRfdHlw
ZSkoU291cFJlcXVlc3QgICAqcmVxdWVzdCk7Cit9OworCitHVHlwZSBzb3VwX3JlcXVlc3RfZ2V0
X3R5cGUgKHZvaWQpOworCisjZGVmaW5lIFNPVVBfUkVRVUVTVF9VUkkgICAgICJ1cmkiCisjZGVm
aW5lIFNPVVBfUkVRVUVTVF9TRVNTSU9OICJzZXNzaW9uIgorCitHSW5wdXRTdHJlYW0gKnNvdXBf
cmVxdWVzdF9zZW5kIChTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKKwkJCQkgR0NhbmNl
bGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJCSBHRXJyb3IgICAgICAgICAgICAgICoq
ZXJyb3IpOwordm9pZCAgICAgICAgICBzb3VwX3JlcXVlc3Rfc2VuZF9hc3luYyAoU291cFJlcXVl
c3QgICAgICAgICAgKnJlcXVlc3QsCisJCQkJICAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpj
YW5jZWxsYWJsZSwKKwkJCQkgICAgICAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKKwkJ
CQkgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKK0dJbnB1dFN0cmVhbSAqc291cF9yZXF1ZXN0
X3NlbmRfZmluaXNoIChTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKKwkJCQkJR0FzeW5j
UmVzdWx0ICAgICAgICAgKnJlc3VsdCwKKwkJCQkJR0Vycm9yICAgICAgICAgICAgICAqKmVycm9y
KTsKKworU291cFVSSSAgICAgICpzb3VwX3JlcXVlc3RfZ2V0X3VyaSAoU291cFJlcXVlc3QgICAg
ICAgICAgKnJlcXVlc3QpOworU291cFNlc3Npb24gICpzb3VwX3JlcXVlc3RfZ2V0X3Nlc3Npb24g
KFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0KTsKKworZ29mZnNldCAgICAgICBzb3VwX3Jl
cXVlc3RfZ2V0X2NvbnRlbnRfbGVuZ3RoIChTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCk7
Citjb25zdCBjaGFyICAgKnNvdXBfcmVxdWVzdF9nZXRfY29udGVudF90eXBlIChTb3VwUmVxdWVz
dCAgICAgICAgICAqcmVxdWVzdCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBTT1VQX1JF
UVVFU1RfSCAqLwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2Fj
aGUvc291cC1yZXF1ZXN0ZXIuYyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3NvdXAtcmVxdWVzdGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJk
ZGIwYQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2Nh
Y2hlL3NvdXAtcmVxdWVzdGVyLmMKQEAgLTAsMCArMSwxODYgQEAKKy8qCisgKiBzb3VwLXJlcXVl
c3Rlci5jOgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgSWdhbGlhIFMuTC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgInNvdXAtcmVxdWVzdGVyLmgiCisKKyNpbmNsdWRlICJzb3Vw
LXJlcXVlc3QtZGF0YS5oIgorI2luY2x1ZGUgInNvdXAtcmVxdWVzdC1maWxlLmgiCisjaW5jbHVk
ZSAic291cC1yZXF1ZXN0LWh0dHAuaCIKKyNpbmNsdWRlIDxnbGliL2dpMThuLmg+CisjaW5jbHVk
ZSA8bGlic291cC9zb3VwLmg+CisKK3N0cnVjdCBfU291cFJlcXVlc3RlclByaXZhdGUgeworCUdI
YXNoVGFibGUgKnJlcXVlc3RfdHlwZXM7Cit9OworCisjZGVmaW5lIFNPVVBfUkVRVUVTVEVSX0dF
VF9QUklWQVRFKG8pIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKChvKSwgU09VUF9UWVBF
X1JFUVVFU1RFUiwgU291cFJlcXVlc3RlclByaXZhdGUpKQorCitHX0RFRklORV9UWVBFIChTb3Vw
UmVxdWVzdGVyLCBzb3VwX3JlcXVlc3RlciwgR19UWVBFX09CSkVDVCkKKworc3RhdGljIHZvaWQg
c291cF9yZXF1ZXN0ZXJfaW5pdCAoU291cFJlcXVlc3RlciAqcmVxdWVzdGVyKQoreworCXJlcXVl
c3Rlci0+cHJpdiA9IFNPVVBfUkVRVUVTVEVSX0dFVF9QUklWQVRFIChyZXF1ZXN0ZXIpOworCisJ
cmVxdWVzdGVyLT5wcml2LT5yZXF1ZXN0X3R5cGVzID0gMDsKK30KKworc3RhdGljIHZvaWQgZmlu
YWxpemUgKEdPYmplY3QgKm9iamVjdCkKK3sKKwlTb3VwUmVxdWVzdGVyICpyZXF1ZXN0ZXIgPSBT
T1VQX1JFUVVFU1RFUiAob2JqZWN0KTsKKworCWlmIChyZXF1ZXN0ZXItPnByaXYtPnJlcXVlc3Rf
dHlwZXMpCisJCWdfaGFzaF90YWJsZV9kZXN0cm95IChyZXF1ZXN0ZXItPnByaXYtPnJlcXVlc3Rf
dHlwZXMpOworCisJR19PQkpFQ1RfQ0xBU1MgKHNvdXBfcmVxdWVzdGVyX3BhcmVudF9jbGFzcykt
PmZpbmFsaXplIChvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCBzb3VwX3JlcXVlc3Rlcl9jbGFz
c19pbml0IChTb3VwUmVxdWVzdGVyQ2xhc3MgKnJlcXVlc3Rlcl9jbGFzcykKK3sKKwlHT2JqZWN0
Q2xhc3MgKm9iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChyZXF1ZXN0ZXJfY2xhc3MpOwor
CisJZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlIChyZXF1ZXN0ZXJfY2xhc3MsIHNpemVvZiAoU291
cFJlcXVlc3RlclByaXZhdGUpKTsKKworCS8qIHZpcnR1YWwgbWV0aG9kIG92ZXJyaWRlICovCisJ
b2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IGZpbmFsaXplOworfQorCitzdGF0aWMgdm9pZCBpbml0
X3JlcXVlc3RfdHlwZXMgKFNvdXBSZXF1ZXN0ZXJQcml2YXRlICpwcml2KQoreworCWlmIChwcml2
LT5yZXF1ZXN0X3R5cGVzKQorCQlyZXR1cm47CisKKwlwcml2LT5yZXF1ZXN0X3R5cGVzID0gZ19o
YXNoX3RhYmxlX25ld19mdWxsIChzb3VwX3N0cl9jYXNlX2hhc2gsCisJCQkJCQkgICAgIHNvdXBf
c3RyX2Nhc2VfZXF1YWwsCisJCQkJCQkgICAgIGdfZnJlZSwgMCk7CisJZ19oYXNoX3RhYmxlX2lu
c2VydCAocHJpdi0+cmVxdWVzdF90eXBlcywgZ19zdHJkdXAgKCJmaWxlIiksCisJCQkgICAgIEdT
SVpFX1RPX1BPSU5URVIgKFNPVVBfVFlQRV9SRVFVRVNUX0ZJTEUpKTsKKwlnX2hhc2hfdGFibGVf
aW5zZXJ0IChwcml2LT5yZXF1ZXN0X3R5cGVzLCBnX3N0cmR1cCAoImRhdGEiKSwKKwkJCSAgICAg
R1NJWkVfVE9fUE9JTlRFUiAoU09VUF9UWVBFX1JFUVVFU1RfREFUQSkpOworCWdfaGFzaF90YWJs
ZV9pbnNlcnQgKHByaXYtPnJlcXVlc3RfdHlwZXMsIGdfc3RyZHVwICgiaHR0cCIpLAorCQkJICAg
ICBHU0laRV9UT19QT0lOVEVSIChTT1VQX1RZUEVfUkVRVUVTVF9IVFRQKSk7CisJZ19oYXNoX3Rh
YmxlX2luc2VydCAocHJpdi0+cmVxdWVzdF90eXBlcywgZ19zdHJkdXAgKCJodHRwcyIpLAorCQkJ
ICAgICBHU0laRV9UT19QT0lOVEVSIChTT1VQX1RZUEVfUkVRVUVTVF9IVFRQKSk7CisJZ19oYXNo
X3RhYmxlX2luc2VydCAocHJpdi0+cmVxdWVzdF90eXBlcywgZ19zdHJkdXAgKCJmdHAiKSwKKwkJ
CSAgICAgR1NJWkVfVE9fUE9JTlRFUiAoU09VUF9UWVBFX1JFUVVFU1RfRklMRSkpOworfQorCitT
b3VwUmVxdWVzdGVyICpzb3VwX3JlcXVlc3Rlcl9uZXcgKHZvaWQpCit7CisJcmV0dXJuIChTb3Vw
UmVxdWVzdGVyICopZ19vYmplY3RfbmV3IChTT1VQX1RZUEVfUkVRVUVTVEVSLCAwKTsKK30KKwor
U291cFJlcXVlc3QgKnNvdXBfcmVxdWVzdGVyX3JlcXVlc3QgKFNvdXBSZXF1ZXN0ZXIgKnJlcXVl
c3RlciwgY29uc3QgY2hhciAqdXJpU3RyaW5nLCBTb3VwU2Vzc2lvbiAqc2Vzc2lvbiwgR0Vycm9y
ICoqZXJyb3IpCit7CisJU291cFVSSSAqdXJpID0gc291cF91cmlfbmV3ICh1cmlTdHJpbmcpOwor
CVNvdXBSZXF1ZXN0ICpyZXE7CisKKwlpZiAoIXVyaSkgeworCQlnX3NldF9lcnJvciAoZXJyb3Is
IFNPVVBfRVJST1IsIFNPVVBfRVJST1JfQkFEX1VSSSwKKwkJCSAgICAgXyAoIkNvdWxkIG5vdCBw
YXJzZSBVUkkgJyVzJyIpLCB1cmlTdHJpbmcpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXEgPSBz
b3VwX3JlcXVlc3Rlcl9yZXF1ZXN0X3VyaSAocmVxdWVzdGVyLCB1cmksIHNlc3Npb24sIGVycm9y
KTsKKwlzb3VwX3VyaV9mcmVlICh1cmkpOworCXJldHVybiByZXE7Cit9CisKK1NvdXBSZXF1ZXN0
ICpzb3VwX3JlcXVlc3Rlcl9yZXF1ZXN0X3VyaSAoU291cFJlcXVlc3RlciAqcmVxdWVzdGVyLCBT
b3VwVVJJICp1cmksIFNvdXBTZXNzaW9uICpzZXNzaW9uLCBHRXJyb3IgKiplcnJvcikKK3sKKwlH
VHlwZSByZXF1ZXN0VHlwZTsKKworCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChTT1VQX0lTX1JFUVVF
U1RFUiAocmVxdWVzdGVyKSwgMCk7CisKKwlpbml0X3JlcXVlc3RfdHlwZXMgKHJlcXVlc3Rlci0+
cHJpdik7CisJcmVxdWVzdFR5cGUgPSAoR1R5cGUpR1BPSU5URVJfVE9fU0laRSAoZ19oYXNoX3Rh
YmxlX2xvb2t1cCAocmVxdWVzdGVyLT5wcml2LT5yZXF1ZXN0X3R5cGVzLCB1cmktPnNjaGVtZSkp
OworCWlmICghcmVxdWVzdFR5cGUpIHsKKwkJZ19zZXRfZXJyb3IgKGVycm9yLCBTT1VQX0VSUk9S
LCBTT1VQX0VSUk9SX1VOU1VQUE9SVEVEX1VSSV9TQ0hFTUUsCisJCQkgICAgIF8gKCJVbnN1cHBv
cnRlZCBVUkkgc2NoZW1lICclcyciKSwgdXJpLT5zY2hlbWUpOworCQlyZXR1cm4gMDsKKwl9CisK
KwlpZiAoZ190eXBlX2lzX2EgKHJlcXVlc3RUeXBlLCBHX1RZUEVfSU5JVEFCTEUpKSB7CisJCXJl
dHVybiAoU291cFJlcXVlc3QgKilnX2luaXRhYmxlX25ldyAocmVxdWVzdFR5cGUsIDAsIGVycm9y
LAorCQkJCQkJICAgICAgInVyaSIsIHVyaSwKKwkJCQkJCSAgICAgICJzZXNzaW9uIiwgc2Vzc2lv
biwKKwkJCQkJCSAgICAgIDApOworCX0gZWxzZSB7CisJCXJldHVybiAoU291cFJlcXVlc3QgKiln
X29iamVjdF9uZXcgKHJlcXVlc3RUeXBlLAorCQkJCQkJICAgICJ1cmkiLCB1cmksCisJCQkJCQkg
ICAgInNlc3Npb24iLCBzZXNzaW9uLAorCQkJCQkJICAgIDApOworCX0KK30KKworLyogUkZDIDIz
OTYsIDMuMSAqLworc3RhdGljIGdib29sZWFuCitzb3VwX3NjaGVtZV9pc192YWxpZCAoY29uc3Qg
Y2hhciAqc2NoZW1lKQoreworCWlmIChzY2hlbWUgPT0gTlVMTCB8fAorCSAgICAhZ19hc2NpaV9p
c2FscGhhICgqc2NoZW1lKSkKKwkJcmV0dXJuIEZBTFNFOworCisJc2NoZW1lKys7CisJd2hpbGUg
KCpzY2hlbWUpIHsKKwkJaWYgKCFnX2FzY2lpX2lzYWxwaGEgKCpzY2hlbWUpICYmCisJCSAgICAh
Z19hc2NpaV9pc2RpZ2l0ICgqc2NoZW1lKSAmJgorCQkgICAgKnNjaGVtZSAhPSAnKycgJiYKKwkJ
ICAgICpzY2hlbWUgIT0gJy0nICYmCisJCSAgICAqc2NoZW1lICE9ICcuJykKKwkJCXJldHVybiBG
QUxTRTsKKwkJc2NoZW1lKys7CisJfQorCXJldHVybiBUUlVFOworfQorCit2b2lkCitzb3VwX3Jl
cXVlc3Rlcl9hZGRfcHJvdG9jb2wgKFNvdXBSZXF1ZXN0ZXIgKnJlcXVlc3RlciwKKwkJCSAgICAg
Y29uc3QgY2hhciAgKnNjaGVtZSwKKwkJCSAgICAgR1R5cGUgcmVxdWVzdF90eXBlKQoreworCWdf
cmV0dXJuX2lmX2ZhaWwgKFNPVVBfSVNfUkVRVUVTVEVSIChyZXF1ZXN0ZXIpKTsKKwlnX3JldHVy
bl9pZl9mYWlsIChzb3VwX3NjaGVtZV9pc192YWxpZCAoc2NoZW1lKSk7CisKKwlpbml0X3JlcXVl
c3RfdHlwZXMgKHJlcXVlc3Rlci0+cHJpdik7CisJZ19oYXNoX3RhYmxlX2luc2VydCAocmVxdWVz
dGVyLT5wcml2LT5yZXF1ZXN0X3R5cGVzLCBnX3N0cmR1cCAoc2NoZW1lKSwKKwkJCSAgICAgR1NJ
WkVfVE9fUE9JTlRFUiAocmVxdWVzdF90eXBlKSk7Cit9CisKK3ZvaWQKK3NvdXBfcmVxdWVzdGVy
X3JlbW92ZV9wcm90b2NvbCAoU291cFJlcXVlc3RlciAqcmVxdWVzdGVyLAorCQkJCWNvbnN0IGNo
YXIgICpzY2hlbWUpCit7CisJZ19yZXR1cm5faWZfZmFpbCAoU09VUF9JU19SRVFVRVNURVIgKHJl
cXVlc3RlcikpOworCWdfcmV0dXJuX2lmX2ZhaWwgKHNvdXBfc2NoZW1lX2lzX3ZhbGlkIChzY2hl
bWUpKTsKKworCWluaXRfcmVxdWVzdF90eXBlcyAocmVxdWVzdGVyLT5wcml2KTsKKwlnX2hhc2hf
dGFibGVfcmVtb3ZlIChyZXF1ZXN0ZXItPnByaXYtPnJlcXVlc3RfdHlwZXMsIHNjaGVtZSk7Cit9
CisKK0dRdWFyaworc291cF9lcnJvcl9xdWFyayAodm9pZCkKK3sKKwlzdGF0aWMgR1F1YXJrIGVy
cm9yOworCWlmICghZXJyb3IpCisJCWVycm9yID0gZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcg
KCJzb3VwX2Vycm9yX3F1YXJrIik7CisJcmV0dXJuIGVycm9yOworfQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuaCBiL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRlZDkwYgotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmgKQEAgLTAs
MCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVm
IFNPVVBfUkVRVUVTVEVSX0gKKyNkZWZpbmUgU09VUF9SRVFVRVNURVJfSCAxCisKKyNpbmNsdWRl
ICJzb3VwLXJlcXVlc3QuaCIKKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKworR19CRUdJTl9E
RUNMUworCisjZGVmaW5lIFNPVVBfVFlQRV9SRVFVRVNURVIgICAgICAgICAgICAoc291cF9yZXF1
ZXN0ZXJfZ2V0X3R5cGUgKCkpCisjZGVmaW5lIFNPVVBfUkVRVUVTVEVSKG9iaikgICAgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBTT1VQX1RZUEVfUkVRVUVTVEVS
LCBTb3VwUmVxdWVzdGVyKSkKKyNkZWZpbmUgU09VUF9SRVFVRVNURVJfQ0xBU1Moa2xhc3MpICAg
IChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgU09VUF9UWVBFX1JFUVVFU1RFUiwg
U291cFJlcXVlc3RlckNsYXNzKSkKKyNkZWZpbmUgU09VUF9JU19SRVFVRVNURVIob2JqKSAgICAg
ICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIFNPVVBfVFlQRV9SRVFVRVNU
RVIpKQorI2RlZmluZSBTT1VQX0lTX1JFUVVFU1RFUl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVD
S19DTEFTU19UWVBFICgob2JqKSwgU09VUF9UWVBFX1JFUVVFU1RFUikpCisjZGVmaW5lIFNPVVBf
UkVRVUVTVEVSX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9i
aiksIFNPVVBfVFlQRV9SRVFVRVNURVIsIFNvdXBSZXF1ZXN0ZXJDbGFzcykpCisKKyNkZWZpbmUg
U09VUF9FUlJPUiBzb3VwX2Vycm9yX3F1YXJrICgpCisKK3R5cGVkZWYgZW51bSB7CisJU09VUF9F
UlJPUl9CQURfVVJJLAorCVNPVVBfRVJST1JfVU5TVVBQT1JURURfVVJJX1NDSEVNRQorfSBTb3Vw
RXJyb3I7CisKK3R5cGVkZWYgc3RydWN0IF9Tb3VwUmVxdWVzdGVyIFNvdXBSZXF1ZXN0ZXI7Cit0
eXBlZGVmIHN0cnVjdCBfU291cFJlcXVlc3RlclByaXZhdGUgU291cFJlcXVlc3RlclByaXZhdGU7
CisKK3N0cnVjdCBfU291cFJlcXVlc3RlciB7CisJR09iamVjdCBwYXJlbnQ7CisKKwlTb3VwUmVx
dWVzdGVyUHJpdmF0ZSAqcHJpdjsKK307CisKK3R5cGVkZWYgc3RydWN0IHsKKwlHT2JqZWN0Q2xh
c3MgcGFyZW50X2NsYXNzOworfSBTb3VwUmVxdWVzdGVyQ2xhc3M7CisKK0dUeXBlIHNvdXBfcmVx
dWVzdGVyX2dldF90eXBlICh2b2lkKTsKKworU291cFJlcXVlc3RlciAqc291cF9yZXF1ZXN0ZXJf
bmV3ICh2b2lkKTsKKworR1F1YXJrIHNvdXBfZXJyb3JfcXVhcmsgKHZvaWQpOworCitTb3VwUmVx
dWVzdCAqc291cF9yZXF1ZXN0ZXJfcmVxdWVzdCAoU291cFJlcXVlc3RlciAqcmVxdWVzdGVyLAor
CQkJCSAgICAgY29uc3QgY2hhciAqdXJpU3RyaW5nLAorCQkJCSAgICAgU291cFNlc3Npb24gKnNl
c3Npb24sCisJCQkJICAgICBHRXJyb3IgKiplcnJvcik7CisKK1NvdXBSZXF1ZXN0ICpzb3VwX3Jl
cXVlc3Rlcl9yZXF1ZXN0X3VyaSAoU291cFJlcXVlc3RlciAqcmVxdWVzdGVyLAorCQkJCQkgU291
cFVSSSAqdXJpLAorCQkJCQkgU291cFNlc3Npb24gKnNlc3Npb24sCisJCQkJCSBHRXJyb3IgKipl
cnJvcik7CisKK3ZvaWQgc291cF9yZXF1ZXN0ZXJfYWRkX3Byb3RvY29sIChTb3VwUmVxdWVzdGVy
ICpyZXF1ZXN0ZXIsCisJCQkJICBjb25zdCBjaGFyICAqc2NoZW1lLAorCQkJCSAgR1R5cGUgcmVx
dWVzdF90eXBlKTsKKwordm9pZCBzb3VwX3JlcXVlc3Rlcl9yZW1vdmVfcHJvdG9jb2wgKFNvdXBS
ZXF1ZXN0ZXIgKnJlcXVlc3RlciwKKwkJCQkgICAgIGNvbnN0IGNoYXIgICpzY2hlbWUpOworCitH
X0VORF9ERUNMUworCisjZW5kaWYgLyogU09VUF9SRVFVRVNURVJfSCAqLwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUtcHJp
dmF0ZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAt
Y2FjaGUtcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MTQ3
ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNo
ZS93ZWJraXQvc291cC1jYWNoZS1wcml2YXRlLmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIHNv
dXAtY2FjaGUtcHJpdmF0ZS5oOgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMu
TC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmbmRlZiBXRUJLSVRfU09VUF9DQUNIRV9QUklWQVRFX0gKKyNkZWZpbmUgV0VCS0lUX1NP
VVBfQ0FDSEVfUFJJVkFURV9IIDEKKworI2luY2x1ZGUgInNvdXAtY2FjaGUuaCIKKyNpbmNsdWRl
IDxsaWJzb3VwL3NvdXAtbWVzc2FnZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKK1dlYktpdFNvdXBD
YWNoZVJlc3BvbnNlIHdlYmtpdF9zb3VwX2NhY2hlX2hhc19yZXNwb25zZSAoV2ViS2l0U291cENh
Y2hlICAgKmNhY2hlLAorCQkJCQkJCVNvdXBNZXNzYWdlICptc2cpOworR0lucHV0U3RyZWFtICp3
ZWJraXRfc291cF9jYWNoZV9zZW5kX3Jlc3BvbnNlIChXZWJLaXRTb3VwQ2FjaGUgICAqY2FjaGUs
CisJCQkJCSAgICAgICBTb3VwTWVzc2FnZSAqbXNnKTsKK1dlYktpdFNvdXBDYWNoZWFiaWxpdHkg
IHdlYmtpdF9zb3VwX2NhY2hlX2dldF9jYWNoZWFiaWxpdHkgKFdlYktpdFNvdXBDYWNoZSAgICpj
YWNoZSwKKwkJCQkJCQkgICAgU291cE1lc3NhZ2UgKm1zZyk7CitTb3VwTWVzc2FnZSAqd2Via2l0
X3NvdXBfY2FjaGVfZ2VuZXJhdGVfY29uZGl0aW9uYWxfcmVxdWVzdCAoV2ViS2l0U291cENhY2hl
ICAgKmNhY2hlLAorCQkJCQkJCSAgICAgU291cE1lc3NhZ2UgKm9yaWdpbmFsKTsKKworR19FTkRf
REVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9TT1VQX0NBQ0hFX1BSSVZBVEVfSCAqLwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2Fj
aGUuYyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNh
Y2hlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ3ZjJmMQotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9z
b3VwLWNhY2hlLmMKQEAgLTAsMCArMSwxNjAzIEBACisvKgorICogc291cC1jYWNoZS5jCisgKgor
ICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKy8qIFRPRE86CisgKiAtIE5l
ZWQgdG8gaG9vayB0aGUgZmVhdHVyZSBpbiB0aGUgc3luYyBTb3VwU2Vzc2lvbi4KKyAqIC0gTmVl
ZCBtb3JlIHRlc3RzLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29u
ZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgInNvdXAtY2FjaGUuaCIKKyNpbmNsdWRlICJzb3Vw
LWNhY2hlLXByaXZhdGUuaCIKKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDxn
aW8vZ2lvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKK3N0YXRpYyBTb3VwU2Vzc2lvbkZlYXR1
cmVJbnRlcmZhY2UgKndlYmtpdF9zb3VwX2NhY2hlX2RlZmF1bHRfZmVhdHVyZV9pbnRlcmZhY2U7
CitzdGF0aWMgdm9pZCB3ZWJraXRfc291cF9jYWNoZV9zZXNzaW9uX2ZlYXR1cmVfaW5pdCAoU291
cFNlc3Npb25GZWF0dXJlSW50ZXJmYWNlICpmZWF0dXJlX2ludGVyZmFjZSwgZ3BvaW50ZXIgaW50
ZXJmYWNlX2RhdGEpOworCisjZGVmaW5lIERFRkFVTFRfTUFYX1NJWkUgNTAgKiAxMDI0ICogMTAy
NAorI2RlZmluZSBNQVhfRU5UUllfREFUQV9QRVJDRU5UQUdFIDEwIC8qIFBlcmNlbnRhZ2Ugb2Yg
dGhlIHRvdGFsIHNpemUKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBj
YWNoZSB0aGF0IGNhbiBiZQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbGVk
IGJ5IGEgc2luZ2xlIGVudHJ5ICovCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRTb3VwQ2FjaGVF
bnRyeSB7CisJY2hhciAqa2V5OworCWNoYXIgKmZpbGVuYW1lOworCWd1aW50IGZyZXNobmVzc19s
aWZldGltZTsKKwlnYm9vbGVhbiBtdXN0X3JldmFsaWRhdGU7CisJR1N0cmluZyAqZGF0YTsKKwln
c2l6ZSBwb3M7CisJZ3NpemUgbGVuZ3RoOworCXRpbWVfdCBjb3JyZWN0ZWRfaW5pdGlhbF9hZ2U7
CisJdGltZV90IHJlc3BvbnNlX3RpbWU7CisJZ2Jvb2xlYW4gd3JpdGluZzsKKwlnYm9vbGVhbiBk
aXJ0eTsKKwlnYm9vbGVhbiBnb3RfYm9keTsKKwlnYm9vbGVhbiBiZWluZ192YWxpZGF0ZWQ7CisJ
U291cE1lc3NhZ2VIZWFkZXJzICpoZWFkZXJzOworCUdPdXRwdXRTdHJlYW0gKnN0cmVhbTsKKwlH
RXJyb3IgKmVycm9yOworCWd1aW50IGhpdHM7CisJR0xpc3QgKmxydTsKKwlHQ2FuY2VsbGFibGUg
KmNhbmNlbGxhYmxlOworfSBXZWJLaXRTb3VwQ2FjaGVFbnRyeTsKKworc3RydWN0IF9XZWJLaXRT
b3VwQ2FjaGVQcml2YXRlIHsKKwljaGFyICpjYWNoZV9kaXI7CisJR0hhc2hUYWJsZSAqY2FjaGU7
CisJZ3VpbnQgbl9wZW5kaW5nOworCVNvdXBTZXNzaW9uICpzZXNzaW9uOworCVdlYktpdFNvdXBD
YWNoZVR5cGUgY2FjaGVfdHlwZTsKKwlndWludCBzaXplOworCWd1aW50IG1heF9zaXplOworCWd1
aW50IG1heF9lbnRyeV9kYXRhX3NpemU7IC8qIENvbXB1dGVkIHZhbHVlLiBIZXJlIGZvciBwZXJm
b3JtYW5jZSByZWFzb25zICovCisJR0xpc3QgKmxydV9zdGFydDsKKwlHTGlzdCAqbHJ1X2VuZDsK
K307CisKK3R5cGVkZWYgc3RydWN0IHsKKwlXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlOworCVdlYktp
dFNvdXBDYWNoZUVudHJ5ICplbnRyeTsKKwlTb3VwTWVzc2FnZSAqbXNnOworCWd1bG9uZyBnb3Rf
Y2h1bmtfaGFuZGxlcjsKKwlndWxvbmcgZ290X2JvZHlfaGFuZGxlcjsKKwlndWxvbmcgcmVzdGFy
dGVkX2hhbmRsZXI7Cit9IFdlYktpdFNvdXBDYWNoZVdyaXRpbmdGaXh0dXJlOworCitlbnVtIHsK
KwlQUk9QXzAsCisJUFJPUF9DQUNIRV9ESVIsCisJUFJPUF9DQUNIRV9UWVBFCit9OworCisjZGVm
aW5lIFdFQktJVF9TT1VQX0NBQ0hFX0dFVF9QUklWQVRFKG8pIChHX1RZUEVfSU5TVEFOQ0VfR0VU
X1BSSVZBVEUgKChvKSwgV0VCS0lUX1RZUEVfU09VUF9DQUNIRSwgV2ViS2l0U291cENhY2hlUHJp
dmF0ZSkpCisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChXZWJLaXRTb3VwQ2FjaGUsIHdlYmtp
dF9zb3VwX2NhY2hlLCBHX1RZUEVfT0JKRUNULAorCQkJIEdfSU1QTEVNRU5UX0lOVEVSRkFDRSAo
U09VUF9UWVBFX1NFU1NJT05fRkVBVFVSRSwKKwkJCQkJCXdlYmtpdF9zb3VwX2NhY2hlX3Nlc3Np
b25fZmVhdHVyZV9pbml0KSkKKworc3RhdGljIHZvaWQgd2Via2l0X3NvdXBfY2FjaGVfZW50cnlf
ZGVsZXRlIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLCBXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50
cnkpOworc3RhdGljIHZvaWQgbWFrZV9yb29tX2Zvcl9uZXdfZW50cnkgKFdlYktpdFNvdXBDYWNo
ZSAqY2FjaGUsIGd1aW50IGxlbmd0aF90b19hZGQpOworc3RhdGljIGdib29sZWFuIGNhY2hlX2Fj
Y2VwdHNfZW50cmllc19vZl9zaXplIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLCBndWludCBsZW5n
dGhfdG9fYWRkKTsKKworc3RhdGljIFdlYktpdFNvdXBDYWNoZWFiaWxpdHkKK2dldF9jYWNoZWFi
aWxpdHkgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsIFNvdXBNZXNzYWdlICptc2cpCit7CisJV2Vi
S2l0U291cENhY2hlYWJpbGl0eSBjYWNoZWFiaWxpdHk7CisJY29uc3QgY2hhciAqY2FjaGVfY29u
dHJvbDsKKworCS8qIDEuIFRoZSByZXF1ZXN0IG1ldGhvZCBtdXN0IGJlIGNhY2hlYWJsZSAqLwor
CWlmIChtc2ctPm1ldGhvZCA9PSBTT1VQX01FVEhPRF9HRVQpCisJCWNhY2hlYWJpbGl0eSA9IFdF
QktJVF9TT1VQX0NBQ0hFX0NBQ0hFQUJMRTsKKwllbHNlIGlmIChtc2ctPm1ldGhvZCA9PSBTT1VQ
X01FVEhPRF9IRUFEIHx8CisJCSBtc2ctPm1ldGhvZCA9PSBTT1VQX01FVEhPRF9UUkFDRSB8fAor
CQkgbXNnLT5tZXRob2QgPT0gU09VUF9NRVRIT0RfQ09OTkVDVCkKKwkJcmV0dXJuIFdFQktJVF9T
T1VQX0NBQ0hFX1VOQ0FDSEVBQkxFOworCWVsc2UKKwkJcmV0dXJuIChXRUJLSVRfU09VUF9DQUNI
RV9VTkNBQ0hFQUJMRSB8IFdFQktJVF9TT1VQX0NBQ0hFX0lOVkFMSURBVEVTKTsKKworCWNhY2hl
X2NvbnRyb2wgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKG1zZy0+cmVzcG9uc2VfaGVhZGVy
cywgIkNhY2hlLUNvbnRyb2wiKTsKKwlpZiAoY2FjaGVfY29udHJvbCkgeworCQlHSGFzaFRhYmxl
ICpoYXNoOworCQlXZWJLaXRTb3VwQ2FjaGVQcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfQ0FD
SEVfR0VUX1BSSVZBVEUgKGNhY2hlKTsKKworCQloYXNoID0gc291cF9oZWFkZXJfcGFyc2VfcGFy
YW1fbGlzdCAoY2FjaGVfY29udHJvbCk7CisKKwkJLyogU2hhcmVkIGNhY2hlcyBNVVNUIE5PVCBz
dG9yZSBwcml2YXRlIHJlc291cmNlcyAqLworCQlpZiAocHJpdi0+Y2FjaGVfdHlwZSA9PSBXRUJL
SVRfU09VUF9DQUNIRV9TSEFSRUQpIHsKKwkJCWlmIChnX2hhc2hfdGFibGVfbG9va3VwX2V4dGVu
ZGVkIChoYXNoLCAicHJpdmF0ZSIsIE5VTEwsIE5VTEwpKSB7CisJCQkJc291cF9oZWFkZXJfZnJl
ZV9wYXJhbV9saXN0IChoYXNoKTsKKwkJCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfVU5DQUNI
RUFCTEU7CisJCQl9CisJCX0KKworCQkvKiAyLiBUaGUgJ25vLXN0b3JlJyBjYWNoZSBkaXJlY3Rp
dmUgZG9lcyBub3QgYXBwZWFyIGluIHRoZQorCQkgKiBoZWFkZXJzCisJCSAqLworCQlpZiAoZ19o
YXNoX3RhYmxlX2xvb2t1cF9leHRlbmRlZCAoaGFzaCwgIm5vLXN0b3JlIiwgTlVMTCwgTlVMTCkp
IHsKKwkJCXNvdXBfaGVhZGVyX2ZyZWVfcGFyYW1fbGlzdCAoaGFzaCk7CisJCQlyZXR1cm4gV0VC
S0lUX1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEU7CisJCX0KKworCQkvKiBUaGlzIGRvZXMgbm90IGFw
cGVhciBpbiBzZWN0aW9uIDIuMSwgYnV0IEkgdGhpbmsgaXQgbWFrZXMKKwkJICogc2Vuc2UgdG8g
Y2hlY2sgaXQgdG9vPworCQkgKi8KKwkJaWYgKGdfaGFzaF90YWJsZV9sb29rdXBfZXh0ZW5kZWQg
KGhhc2gsICJuby1jYWNoZSIsIE5VTEwsIE5VTEwpKSB7CisJCQlzb3VwX2hlYWRlcl9mcmVlX3Bh
cmFtX2xpc3QgKGhhc2gpOworCQkJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxF
OworCQl9CisJfQorCisJc3dpdGNoIChtc2ctPnN0YXR1c19jb2RlKSB7CisJCWNhc2UgU09VUF9T
VEFUVVNfUEFSVElBTF9DT05URU5UOgorCQkJLyogV2UgZG9uJ3QgY2FjaGUgcGFydGlhbCByZXNw
b25zZXMsIGJ1dCB0aGV5IG9ubHkKKwkJCSAqIGludmFsaWRhdGUgY2FjaGVkIGZ1bGwgcmVzcG9u
c2VzIGlmIHRoZSBoZWFkZXJzCisJCQkgKiBkb24ndCBtYXRjaC4KKwkJCSAqLworCQkJY2FjaGVh
YmlsaXR5ID0gV0VCS0lUX1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEU7CisJCQlicmVhazsKKworCQlj
YXNlIFNPVVBfU1RBVFVTX05PVF9NT0RJRklFRDoKKwkJCS8qIEEgMzA0IHJlc3BvbnNlIHZhbGlk
YXRlcyBhbiBleGlzdGluZyBjYWNoZSBlbnRyeSAqLworCQkJY2FjaGVhYmlsaXR5ID0gV0VCS0lU
X1NPVVBfQ0FDSEVfVkFMSURBVEVTOworCQkJYnJlYWs7CisKKwkJY2FzZSBTT1VQX1NUQVRVU19N
VUxUSVBMRV9DSE9JQ0VTOgorCQljYXNlIFNPVVBfU1RBVFVTX01PVkVEX1BFUk1BTkVOVExZOgor
CQljYXNlIFNPVVBfU1RBVFVTX0dPTkU6CisJCQkvKiBGSVhNRTogY2FjaGVhYmxlIHVubGVzcyBp
bmRpY2F0ZWQgb3RoZXJ3aXNlICovCisJCQljYWNoZWFiaWxpdHkgPSBXRUJLSVRfU09VUF9DQUNI
RV9VTkNBQ0hFQUJMRTsKKwkJCWJyZWFrOworCisJCWNhc2UgU09VUF9TVEFUVVNfRk9VTkQ6CisJ
CWNhc2UgU09VUF9TVEFUVVNfVEVNUE9SQVJZX1JFRElSRUNUOgorCQkJLyogRklYTUU6IGNhY2hl
YWJsZSBpZiBleHBsaWNpdGx5IGluZGljYXRlZCAqLworCQkJY2FjaGVhYmlsaXR5ID0gV0VCS0lU
X1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEU7CisJCQlicmVhazsKKworCQljYXNlIFNPVVBfU1RBVFVT
X1NFRV9PVEhFUjoKKwkJY2FzZSBTT1VQX1NUQVRVU19GT1JCSURERU46CisJCWNhc2UgU09VUF9T
VEFUVVNfTk9UX0ZPVU5EOgorCQljYXNlIFNPVVBfU1RBVFVTX01FVEhPRF9OT1RfQUxMT1dFRDoK
KwkJCXJldHVybiAoV0VCS0lUX1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEUgfCBXRUJLSVRfU09VUF9D
QUNIRV9JTlZBTElEQVRFUyk7CisKKwkJZGVmYXVsdDoKKwkJCS8qIEFueSA1eHggc3RhdHVzIG9y
IGFueSA0eHggc3RhdHVzIG5vdCBoYW5kbGVkIGFib3ZlCisJCQkgKiBpcyB1bmNhY2hlYWJsZSBi
dXQgZG9lc24ndCBicmVhayB0aGUgY2FjaGUuCisJCQkgKi8KKwkJCWlmICgobXNnLT5zdGF0dXNf
Y29kZSA+PSBTT1VQX1NUQVRVU19CQURfUkVRVUVTVCAmJgorCQkJICAgICBtc2ctPnN0YXR1c19j
b2RlIDw9IFNPVVBfU1RBVFVTX0ZBSUxFRF9ERVBFTkRFTkNZKSB8fAorCQkJICAgIG1zZy0+c3Rh
dHVzX2NvZGUgPj0gU09VUF9TVEFUVVNfSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCXJldHVy
biBXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRTsKKworCQkJLyogQW4gdW5yZWNvZ25pemVk
IDJ4eCwgM3h4LCBvciA0eHggcmVzcG9uc2UgYnJlYWtzCisJCQkgKiB0aGUgY2FjaGUuCisJCQkg
Ki8KKwkJCWlmICgobXNnLT5zdGF0dXNfY29kZSA+IFNPVVBfU1RBVFVTX1BBUlRJQUxfQ09OVEVO
VCAmJgorCQkJICAgICBtc2ctPnN0YXR1c19jb2RlIDwgU09VUF9TVEFUVVNfTVVMVElQTEVfQ0hP
SUNFUykgfHwKKwkJCSAgICAobXNnLT5zdGF0dXNfY29kZSA+IFNPVVBfU1RBVFVTX1RFTVBPUkFS
WV9SRURJUkVDVCAmJgorCQkJICAgICBtc2ctPnN0YXR1c19jb2RlIDwgU09VUF9TVEFUVVNfSU5U
RVJOQUxfU0VSVkVSX0VSUk9SKSkKKwkJCQlyZXR1cm4gKFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FD
SEVBQkxFIHwgV0VCS0lUX1NPVVBfQ0FDSEVfSU5WQUxJREFURVMpOworCQkJYnJlYWs7CisJfQor
CisJcmV0dXJuIGNhY2hlYWJpbGl0eTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX2Nh
Y2hlX2VudHJ5X2ZyZWUgKFdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSkKK3sKKwlnX2ZyZWUg
KGVudHJ5LT5maWxlbmFtZSk7CisJZW50cnktPmZpbGVuYW1lID0gTlVMTDsKKwlnX2ZyZWUgKGVu
dHJ5LT5rZXkpOworCWVudHJ5LT5rZXkgPSBOVUxMOworCisJaWYgKGVudHJ5LT5oZWFkZXJzKSB7
CisJCXNvdXBfbWVzc2FnZV9oZWFkZXJzX2ZyZWUgKGVudHJ5LT5oZWFkZXJzKTsKKwkJZW50cnkt
PmhlYWRlcnMgPSBOVUxMOworCX0KKworCWlmIChlbnRyeS0+ZGF0YSkgeworCQlnX3N0cmluZ19m
cmVlIChlbnRyeS0+ZGF0YSwgVFJVRSk7CisJCWVudHJ5LT5kYXRhID0gTlVMTDsKKwl9CisJaWYg
KGVudHJ5LT5lcnJvcikgeworCQlnX2Vycm9yX2ZyZWUgKGVudHJ5LT5lcnJvcik7CisJCWVudHJ5
LT5lcnJvciA9IE5VTEw7CisJfQorCWlmIChlbnRyeS0+Y2FuY2VsbGFibGUpIHsKKwkJZ19vYmpl
Y3RfdW5yZWYgKGVudHJ5LT5jYW5jZWxsYWJsZSk7CisJCWVudHJ5LT5jYW5jZWxsYWJsZSA9IE5V
TEw7CisJfQorCisJZ19zbGljZV9mcmVlIChXZWJLaXRTb3VwQ2FjaGVFbnRyeSwgZW50cnkpOwor
fQorCitzdGF0aWMgdm9pZAorY29weV9oZWFkZXJzIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBj
aGFyICp2YWx1ZSwgU291cE1lc3NhZ2VIZWFkZXJzICpoZWFkZXJzKQoreworCXNvdXBfbWVzc2Fn
ZV9oZWFkZXJzX2FwcGVuZCAoaGVhZGVycywgbmFtZSwgdmFsdWUpOworfQorCitzdGF0aWMgdm9p
ZAordXBkYXRlX2hlYWRlcnMgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlLCBT
b3VwTWVzc2FnZUhlYWRlcnMgKmhlYWRlcnMpCit7CisJaWYgKHNvdXBfbWVzc2FnZV9oZWFkZXJz
X2dldCAoaGVhZGVycywgbmFtZSkpCisJCXNvdXBfbWVzc2FnZV9oZWFkZXJzX3JlcGxhY2UgKGhl
YWRlcnMsIG5hbWUsIHZhbHVlKTsKKwllbHNlCisJCXNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVu
ZCAoaGVhZGVycywgbmFtZSwgdmFsdWUpOworfQorCitzdGF0aWMgZ3VpbnQKK3dlYmtpdF9zb3Vw
X2NhY2hlX2VudHJ5X2dldF9jdXJyZW50X2FnZSAoV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5
KQoreworCXRpbWVfdCBub3cgPSB0aW1lIChOVUxMKTsKKwl0aW1lX3QgcmVzaWRlbnRfdGltZTsK
KworCXJlc2lkZW50X3RpbWUgPSBub3cgLSBlbnRyeS0+cmVzcG9uc2VfdGltZTsKKwlyZXR1cm4g
ZW50cnktPmNvcnJlY3RlZF9pbml0aWFsX2FnZSArIHJlc2lkZW50X3RpbWU7Cit9CisKK3N0YXRp
YyBnYm9vbGVhbgord2Via2l0X3NvdXBfY2FjaGVfZW50cnlfaXNfZnJlc2hfZW5vdWdoIChXZWJL
aXRTb3VwQ2FjaGVFbnRyeSAqZW50cnksIGludCBtaW5fZnJlc2gpCit7CisJdW5zaWduZWQgbGlt
aXQgPSAobWluX2ZyZXNoID09IC0xKSA/IHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2dldF9jdXJy
ZW50X2FnZSAoZW50cnkpIDogbWluX2ZyZXNoOworCXJldHVybiBlbnRyeS0+ZnJlc2huZXNzX2xp
ZmV0aW1lID4gbGltaXQ7Cit9CisKK3N0YXRpYyBjaGFyICoKK3NvdXBfbWVzc2FnZV9nZXRfY2Fj
aGVfa2V5IChTb3VwTWVzc2FnZSAqbXNnKQoreworCVNvdXBVUkkgKnVyaSA9IHNvdXBfbWVzc2Fn
ZV9nZXRfdXJpIChtc2cpOworCXJldHVybiBzb3VwX3VyaV90b19zdHJpbmcgKHVyaSwgRkFMU0Up
OworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfY2FjaGVfZW50cnlfc2V0X2ZyZXNobmVz
cyAoV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5LCBTb3VwTWVzc2FnZSAqbXNnLCBXZWJLaXRT
b3VwQ2FjaGUgKmNhY2hlKQoreworCWNvbnN0IGNoYXIgKmNhY2hlX2NvbnRyb2w7CisJY29uc3Qg
Y2hhciAqZXhwaXJlcywgKmRhdGUsICpsYXN0X21vZGlmaWVkOworCUdIYXNoVGFibGUgKmhhc2g7
CisKKwloYXNoID0gTlVMTDsKKworCWNhY2hlX2NvbnRyb2wgPSBzb3VwX21lc3NhZ2VfaGVhZGVy
c19nZXQgKGVudHJ5LT5oZWFkZXJzLCAiQ2FjaGUtQ29udHJvbCIpOworCWlmIChjYWNoZV9jb250
cm9sKSB7CisJCWNvbnN0IGNoYXIgKm1heF9hZ2UsICpzX21heGFnZTsKKwkJZ2ludDY0IGZyZXNo
bmVzc19saWZldGltZSA9IDA7CisJCVdlYktpdFNvdXBDYWNoZVByaXZhdGUgKnByaXYgPSBXRUJL
SVRfU09VUF9DQUNIRV9HRVRfUFJJVkFURSAoY2FjaGUpOworCisJCWhhc2ggPSBzb3VwX2hlYWRl
cl9wYXJzZV9wYXJhbV9saXN0IChjYWNoZV9jb250cm9sKTsKKworCQkvKiBTaG91bGQgd2UgcmUt
dmFsaWRhdGUgdGhlIGVudHJ5IHdoZW4gaXQgZ29lcyBzdGFsZSAqLworCQllbnRyeS0+bXVzdF9y
ZXZhbGlkYXRlID0gKGdib29sZWFuKWdfaGFzaF90YWJsZV9sb29rdXAgKGhhc2gsICJtdXN0LXJl
dmFsaWRhdGUiKTsKKworCQkvKiBTZWN0aW9uIDIuMy4xICovCisJCWlmIChwcml2LT5jYWNoZV90
eXBlID09IFdFQktJVF9TT1VQX0NBQ0hFX1NIQVJFRCkgeworCQkJc19tYXhhZ2UgPSBnX2hhc2hf
dGFibGVfbG9va3VwIChoYXNoLCAicy1tYXhhZ2UiKTsKKwkJCWlmIChzX21heGFnZSkgeworCQkJ
CWZyZXNobmVzc19saWZldGltZSA9IGdfYXNjaWlfc3RydG9sbCAoc19tYXhhZ2UsIE5VTEwsIDEw
KTsKKwkJCQlpZiAoZnJlc2huZXNzX2xpZmV0aW1lKSB7CisJCQkJCS8qIEltcGxpZXMgcHJveHkt
cmV2YWxpZGF0ZS4gVE9ETzogaXMgaXQgdHJ1ZT8gKi8KKwkJCQkJZW50cnktPm11c3RfcmV2YWxp
ZGF0ZSA9IFRSVUU7CisJCQkJCXNvdXBfaGVhZGVyX2ZyZWVfcGFyYW1fbGlzdCAoaGFzaCk7CisJ
CQkJCXJldHVybjsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKiBJZiAnbWF4LWFnZScgY2FjaGUg
ZGlyZWN0aXZlIGlzIHByZXNlbnQsIHVzZSB0aGF0ICovCisJCW1heF9hZ2UgPSBnX2hhc2hfdGFi
bGVfbG9va3VwIChoYXNoLCAibWF4LWFnZSIpOworCQlpZiAobWF4X2FnZSkKKwkJCWZyZXNobmVz
c19saWZldGltZSA9IGdfYXNjaWlfc3RydG9sbCAobWF4X2FnZSwgTlVMTCwgMTApOworCisJCWlm
IChmcmVzaG5lc3NfbGlmZXRpbWUpIHsKKwkJCWVudHJ5LT5mcmVzaG5lc3NfbGlmZXRpbWUgPSAo
Z3VpbnQpTUlOIChmcmVzaG5lc3NfbGlmZXRpbWUsIEdfTUFYVUlOVDMyKTsKKwkJCXNvdXBfaGVh
ZGVyX2ZyZWVfcGFyYW1fbGlzdCAoaGFzaCk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlpZiAo
aGFzaCAhPSBOVUxMKQorCQlzb3VwX2hlYWRlcl9mcmVlX3BhcmFtX2xpc3QgKGhhc2gpOworCisJ
LyogSWYgdGhlICdFeHBpcmVzJyByZXNwb25zZSBoZWFkZXIgaXMgcHJlc2VudCwgdXNlIGl0cyB2
YWx1ZQorCSAqIG1pbnVzIHRoZSB2YWx1ZSBvZiB0aGUgJ0RhdGUnIHJlc3BvbnNlIGhlYWRlcgor
CSAqLworCWV4cGlyZXMgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKGVudHJ5LT5oZWFkZXJz
LCAiRXhwaXJlcyIpOworCWRhdGUgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKGVudHJ5LT5o
ZWFkZXJzLCAiRGF0ZSIpOworCWlmIChleHBpcmVzICYmIGRhdGUpIHsKKwkJU291cERhdGUgKmV4
cGlyZXNfZCwgKmRhdGVfZDsKKwkJdGltZV90IGV4cGlyZXNfdCwgZGF0ZV90OworCisJCWV4cGly
ZXNfZCA9IHNvdXBfZGF0ZV9uZXdfZnJvbV9zdHJpbmcgKGV4cGlyZXMpOworCQlpZiAoZXhwaXJl
c19kKSB7CisJCQlkYXRlX2QgPSBzb3VwX2RhdGVfbmV3X2Zyb21fc3RyaW5nIChkYXRlKTsKKwor
CQkJZXhwaXJlc190ID0gc291cF9kYXRlX3RvX3RpbWVfdCAoZXhwaXJlc19kKTsKKwkJCWRhdGVf
dCA9IHNvdXBfZGF0ZV90b190aW1lX3QgKGRhdGVfZCk7CisKKwkJCXNvdXBfZGF0ZV9mcmVlIChl
eHBpcmVzX2QpOworCQkJc291cF9kYXRlX2ZyZWUgKGRhdGVfZCk7CisKKwkJCWlmIChleHBpcmVz
X3QgJiYgZGF0ZV90KSB7CisJCQkJZW50cnktPmZyZXNobmVzc19saWZldGltZSA9IChndWludClN
QVggKGV4cGlyZXNfdCAtIGRhdGVfdCwgMCk7CisJCQkJcmV0dXJuOworCQkJfQorCQl9IGVsc2Ug
eworCQkJLyogSWYgRXhwaXJlcyBpcyBub3QgYSB2YWxpZCBkYXRlIHdlIHNob3VsZAorCQkJICAg
dHJlYXQgaXQgYXMgYWxyZWFkeSBleHBpcmVkLCBzZWUgc2VjdGlvbgorCQkJICAgMy4zICovCisJ
CQllbnRyeS0+ZnJlc2huZXNzX2xpZmV0aW1lID0gMDsKKwkJCXJldHVybjsKKwkJfQorCX0KKwor
CS8qIE90aGVyd2lzZSBhbiBoZXVyaXN0aWMgbWF5IGJlIHVzZWQgKi8KKworCS8qIEhldXJpc3Rp
Y3MgTVVTVCBOT1QgYmUgdXNlZCB3aXRoIHRoZXNlIHN0YXR1cyBjb2RlcworCSAgIChzZWN0aW9u
IDIuMy4xLjEpICovCisJaWYgKG1zZy0+c3RhdHVzX2NvZGUgIT0gU09VUF9TVEFUVVNfT0sgJiYK
KwkgICAgbXNnLT5zdGF0dXNfY29kZSAhPSBTT1VQX1NUQVRVU19OT05fQVVUSE9SSVRBVElWRSAm
JgorCSAgICBtc2ctPnN0YXR1c19jb2RlICE9IFNPVVBfU1RBVFVTX1BBUlRJQUxfQ09OVEVOVCAm
JgorCSAgICBtc2ctPnN0YXR1c19jb2RlICE9IFNPVVBfU1RBVFVTX01VTFRJUExFX0NIT0lDRVMg
JiYKKwkgICAgbXNnLT5zdGF0dXNfY29kZSAhPSBTT1VQX1NUQVRVU19NT1ZFRF9QRVJNQU5FTlRM
WSAmJgorCSAgICBtc2ctPnN0YXR1c19jb2RlICE9IFNPVVBfU1RBVFVTX0dPTkUpCisJCWdvdG8g
ZXhwaXJlOworCisJLyogVE9ETzogYXR0YWNoIHdhcm5pbmcgMTEzIGlmIHJlc3BvbnNlJ3MgY3Vy
cmVudF9hZ2UgaXMgbW9yZQorCSAgIHRoYW4gMjRoIChzZWN0aW9uIDIuMy4xLjEpIHdoZW4gdXNp
bmcgaGV1cmlzdGljcyAqLworCisJLyogTGFzdC1Nb2RpZmllZCBiYXNlZCBoZXVyaXN0aWMgKi8K
KwlsYXN0X21vZGlmaWVkID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0IChlbnRyeS0+aGVhZGVy
cywgIkxhc3QtTW9kaWZpZWQiKTsKKwlpZiAobGFzdF9tb2RpZmllZCkgeworCQlTb3VwRGF0ZSAq
c291cF9kYXRlOworCQl0aW1lX3Qgbm93LCBsYXN0X21vZGlmaWVkX3Q7CisKKwkJc291cF9kYXRl
ID0gc291cF9kYXRlX25ld19mcm9tX3N0cmluZyAobGFzdF9tb2RpZmllZCk7CisJCWxhc3RfbW9k
aWZpZWRfdCA9IHNvdXBfZGF0ZV90b190aW1lX3QgKHNvdXBfZGF0ZSk7CisJCW5vdyA9IHRpbWUg
KE5VTEwpOworCisjZGVmaW5lIEhFVVJJU1RJQ19GQUNUT1IgMC4xIC8qIEZyb20gU2VjdGlvbiAy
LjMuMS4xICovCisKKwkJZW50cnktPmZyZXNobmVzc19saWZldGltZSA9IE1BWCAoMCwgKG5vdyAt
IGxhc3RfbW9kaWZpZWRfdCkgKiBIRVVSSVNUSUNfRkFDVE9SKTsKKwkJc291cF9kYXRlX2ZyZWUg
KHNvdXBfZGF0ZSk7CisJfQorCisJcmV0dXJuOworCisgZXhwaXJlOgorCS8qIElmIGFsbCBlbHNl
IGZhaWxzLCBtYWtlIHRoZSBlbnRyeSBleHBpcmUgaW1tZWRpYXRlbHkgKi8KKwllbnRyeS0+ZnJl
c2huZXNzX2xpZmV0aW1lID0gMDsKK30KKworc3RhdGljIFdlYktpdFNvdXBDYWNoZUVudHJ5ICoK
K3dlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X25ldyAoV2ViS2l0U291cENhY2hlICpjYWNoZSwgU291
cE1lc3NhZ2UgKm1zZywgdGltZV90IHJlcXVlc3RfdGltZSwgdGltZV90IHJlc3BvbnNlX3RpbWUp
Cit7CisJV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5OworCVNvdXBNZXNzYWdlSGVhZGVycyAq
aGVhZGVyczsKKwljb25zdCBjaGFyICpkYXRlOworCWNoYXIgKm1kNTsKKworCWVudHJ5ID0gZ19z
bGljZV9uZXcwIChXZWJLaXRTb3VwQ2FjaGVFbnRyeSk7CisJZW50cnktPmRpcnR5ID0gRkFMU0U7
CisJZW50cnktPndyaXRpbmcgPSBGQUxTRTsKKwllbnRyeS0+Z290X2JvZHkgPSBGQUxTRTsKKwll
bnRyeS0+YmVpbmdfdmFsaWRhdGVkID0gRkFMU0U7CisJZW50cnktPmRhdGEgPSBnX3N0cmluZ19u
ZXcgKE5VTEwpOworCWVudHJ5LT5wb3MgPSAwOworCWVudHJ5LT5lcnJvciA9IE5VTEw7CisKKwkv
KiBrZXkgJiBmaWxlbmFtZSAqLworCWVudHJ5LT5rZXkgPSBzb3VwX21lc3NhZ2VfZ2V0X2NhY2hl
X2tleSAobXNnKTsKKwltZDUgPSBnX2NvbXB1dGVfY2hlY2tzdW1fZm9yX3N0cmluZyAoR19DSEVD
S1NVTV9NRDUsIGVudHJ5LT5rZXksIC0xKTsKKwllbnRyeS0+ZmlsZW5hbWUgPSBnX2J1aWxkX2Zp
bGVuYW1lIChjYWNoZS0+cHJpdi0+Y2FjaGVfZGlyLCBtZDUsIE5VTEwpOworCWdfZnJlZSAobWQ1
KTsKKworCS8qIEhlYWRlcnMgKi8KKwloZWFkZXJzID0gc291cF9tZXNzYWdlX2hlYWRlcnNfbmV3
IChTT1VQX01FU1NBR0VfSEVBREVSU19SRVNQT05TRSk7CisJc291cF9tZXNzYWdlX2hlYWRlcnNf
Zm9yZWFjaCAobXNnLT5yZXNwb25zZV9oZWFkZXJzLAorCQkJCSAgICAgIChTb3VwTWVzc2FnZUhl
YWRlcnNGb3JlYWNoRnVuYyljb3B5X2hlYWRlcnMsCisJCQkJICAgICAgaGVhZGVycyk7CisJZW50
cnktPmhlYWRlcnMgPSBoZWFkZXJzOworCisJLyogTFJVIGxpc3QgKi8KKwllbnRyeS0+aGl0cyA9
IDA7CisKKwkvKiBTZWN0aW9uIDIuMy4xLCBGcmVzaG5lc3MgTGlmZXRpbWUgKi8KKwl3ZWJraXRf
c291cF9jYWNoZV9lbnRyeV9zZXRfZnJlc2huZXNzIChlbnRyeSwgbXNnLCBjYWNoZSk7CisKKwkv
KiBTZWN0aW9uIDIuMy4yLCBDYWxjdWxhdGluZyBBZ2UgKi8KKwlkYXRlID0gc291cF9tZXNzYWdl
X2hlYWRlcnNfZ2V0IChlbnRyeS0+aGVhZGVycywgIkRhdGUiKTsKKworCWlmIChkYXRlKSB7CisJ
CVNvdXBEYXRlICpzb3VwX2RhdGU7CisJCWNvbnN0IGNoYXIgKmFnZTsKKwkJdGltZV90IGRhdGVf
dmFsdWUsIGFwcGFyZW50X2FnZSwgY29ycmVjdGVkX3JlY2VpdmVkX2FnZSwgcmVzcG9uc2VfZGVs
YXksIGFnZV92YWx1ZSA9IDA7CisKKwkJc291cF9kYXRlID0gc291cF9kYXRlX25ld19mcm9tX3N0
cmluZyAoZGF0ZSk7CisJCWRhdGVfdmFsdWUgPSBzb3VwX2RhdGVfdG9fdGltZV90IChzb3VwX2Rh
dGUpOworCQlzb3VwX2RhdGVfZnJlZSAoc291cF9kYXRlKTsKKworCQlhZ2UgPSBzb3VwX21lc3Nh
Z2VfaGVhZGVyc19nZXQgKGVudHJ5LT5oZWFkZXJzLCAiQWdlIik7CisJCWlmIChhZ2UpCisJCQlh
Z2VfdmFsdWUgPSBnX2FzY2lpX3N0cnRvbGwgKGFnZSwgTlVMTCwgMTApOworCisJCWVudHJ5LT5y
ZXNwb25zZV90aW1lID0gcmVzcG9uc2VfdGltZTsKKwkJYXBwYXJlbnRfYWdlID0gTUFYICgwLCBl
bnRyeS0+cmVzcG9uc2VfdGltZSAtIGRhdGVfdmFsdWUpOworCQljb3JyZWN0ZWRfcmVjZWl2ZWRf
YWdlID0gTUFYIChhcHBhcmVudF9hZ2UsIGFnZV92YWx1ZSk7CisJCXJlc3BvbnNlX2RlbGF5ID0g
ZW50cnktPnJlc3BvbnNlX3RpbWUgLSByZXF1ZXN0X3RpbWU7CisJCWVudHJ5LT5jb3JyZWN0ZWRf
aW5pdGlhbF9hZ2UgPSBjb3JyZWN0ZWRfcmVjZWl2ZWRfYWdlICsgcmVzcG9uc2VfZGVsYXk7CisJ
fSBlbHNlIHsKKwkJLyogSXMgdGhpcyBjb3JyZWN0ID8gKi8KKwkJZW50cnktPmNvcnJlY3RlZF9p
bml0aWFsX2FnZSA9IHRpbWUgKE5VTEwpOworCX0KKworCXJldHVybiBlbnRyeTsKK30KKworc3Rh
dGljIHZvaWQKK3dlYmtpdF9zb3VwX2NhY2hlX3dyaXRpbmdfZml4dHVyZV9mcmVlIChXZWJLaXRT
b3VwQ2FjaGVXcml0aW5nRml4dHVyZSAqZml4dHVyZSkKK3sKKwkvKiBGcmVlIGZpeHR1cmUuIEFu
ZCBkaXNjb25uZWN0IHNpZ25hbHMsIHdlIGRvbid0IHdhbnQgdG8KKwkgICBsaXN0ZW4gdG8gbW9y
ZSBTb3VwTWVzc2FnZSBldmVudHMgYXMgd2UncmUgZmluaXNoZWQgd2l0aAorCSAgIHRoaXMgcmVz
b3VyY2UgKi8KKwlpZiAoZ19zaWduYWxfaGFuZGxlcl9pc19jb25uZWN0ZWQgKGZpeHR1cmUtPm1z
ZywgZml4dHVyZS0+Z290X2NodW5rX2hhbmRsZXIpKQorCQlnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nv
bm5lY3QgKGZpeHR1cmUtPm1zZywgZml4dHVyZS0+Z290X2NodW5rX2hhbmRsZXIpOworCWlmIChn
X3NpZ25hbF9oYW5kbGVyX2lzX2Nvbm5lY3RlZCAoZml4dHVyZS0+bXNnLCBmaXh0dXJlLT5nb3Rf
Ym9keV9oYW5kbGVyKSkKKwkJZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0IChmaXh0dXJlLT5t
c2csIGZpeHR1cmUtPmdvdF9ib2R5X2hhbmRsZXIpOworCWlmIChnX3NpZ25hbF9oYW5kbGVyX2lz
X2Nvbm5lY3RlZCAoZml4dHVyZS0+bXNnLCBmaXh0dXJlLT5yZXN0YXJ0ZWRfaGFuZGxlcikpCisJ
CWdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCAoZml4dHVyZS0+bXNnLCBmaXh0dXJlLT5yZXN0
YXJ0ZWRfaGFuZGxlcik7CisJZ19vYmplY3RfdW5yZWYgKGZpeHR1cmUtPm1zZyk7CisJZ19vYmpl
Y3RfdW5yZWYgKGZpeHR1cmUtPmNhY2hlKTsKKwlnX3NsaWNlX2ZyZWUgKFdlYktpdFNvdXBDYWNo
ZVdyaXRpbmdGaXh0dXJlLCBmaXh0dXJlKTsKK30KKworc3RhdGljIHZvaWQKK2Nsb3NlX3JlYWR5
X2NiIChHT2JqZWN0ICpzb3VyY2UsIEdBc3luY1Jlc3VsdCAqcmVzdWx0LCBXZWJLaXRTb3VwQ2Fj
aGVXcml0aW5nRml4dHVyZSAqZml4dHVyZSkKK3sKKwlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50
cnkgPSBmaXh0dXJlLT5lbnRyeTsKKwlXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlID0gZml4dHVyZS0+
Y2FjaGU7CisJR091dHB1dFN0cmVhbSAqc3RyZWFtID0gR19PVVRQVVRfU1RSRUFNIChzb3VyY2Up
OworCWdvZmZzZXQgY29udGVudF9sZW5ndGg7CisKKwlnX3dhcm5faWZfZmFpbCAoZW50cnktPmVy
cm9yID09IE5VTEwpOworCisJLyogRklYTUU6IHdoYXQgZG8gd2UgZG8gb24gZXJyb3IgPyAqLwor
CisJaWYgKHN0cmVhbSkgeworCQlnX291dHB1dF9zdHJlYW1fY2xvc2VfZmluaXNoIChzdHJlYW0s
IHJlc3VsdCwgTlVMTCk7CisJCWdfb2JqZWN0X3VucmVmIChzdHJlYW0pOworCX0KKwllbnRyeS0+
c3RyZWFtID0gTlVMTDsKKworCWNvbnRlbnRfbGVuZ3RoID0gc291cF9tZXNzYWdlX2hlYWRlcnNf
Z2V0X2NvbnRlbnRfbGVuZ3RoIChlbnRyeS0+aGVhZGVycyk7CisKKwkvKiBJZiB0aGUgcHJvY2Vz
cyB3YXMgY2FuY2VsbGVkLCB0aGVuIGRlbGV0ZSB0aGUgZW50cnkgZnJvbQorCSAgIHRoZSBjYWNo
ZS4gRG8gaXQgYWxzbyBpZiB0aGUgc2l6ZSBvZiBhIGNodW5rZWQgcmVzb3VyY2UgaXMKKwkgICB0
b28gbXVjaCBmb3IgdGhlIGNhY2hlICovCisJaWYgKGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVk
IChlbnRyeS0+Y2FuY2VsbGFibGUpKSB7CisJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2RlbGV0
ZSAoY2FjaGUsIGVudHJ5KTsKKwkJZW50cnkgPSBOVUxMOworCX0gZWxzZSBpZiAoKHNvdXBfbWVz
c2FnZV9oZWFkZXJzX2dldF9lbmNvZGluZyAoZW50cnktPmhlYWRlcnMpID09IFNPVVBfRU5DT0RJ
TkdfQ0hVTktFRCkgfHwKKwkJICAgZW50cnktPmxlbmd0aCAhPSBjb250ZW50X2xlbmd0aCkgewor
CQkvKiogVHdvIG9wdGlvbnMgaGVyZToKKwkJICoKKwkJICogMS4gImNodW5rZWQiIGRhdGEsIGVu
dHJ5IHdhcyB0ZW1wb3JhcmlseSBhZGRlZCB0bworCQkgKiBjYWNoZSAoYXMgY29udGVudC1sZW5n
dGggaXMgMCkgYW5kIG5vdyB0aGF0IHdlIGhhdmUKKwkJICogdGhlIGFjdHVhbCBzaXplIHdlIGhh
dmUgdG8gZXZhbHVhdGUgaWYgd2Ugd2FudCBpdAorCQkgKiBpbiB0aGUgY2FjaGUgb3Igbm90CisJ
CSAqCisJCSAqIDIuIENvbnRlbnQtTGVuZ3RoIGhhcyBhIGRpZmZlcmVudCB2YWx1ZSB0aGFuIGFj
dHVhbAorCQkgKiBsZW5ndGgsIG1lYW5zIHRoYXQgdGhlIGNvbnRlbnQgd2FzIGVuY29kZWQgZm9y
CisJCSAqIHRyYW5zbWlzc2lvbiAodHlwaWNhbGx5IGNvbXByZXNzZWQpIGFuZCB0aHVzIHdlCisJ
CSAqIGhhdmUgdG8gc3Vic3RyYWN0IHRoZSBjb250ZW50LWxlbmd0aCB2YWx1ZSB0aGF0IHdhcwor
CQkgKiBhZGRlZCB0byB0aGUgY2FjaGUgYW5kIGFkZCB0aGUgdW5lbmNvZGVkIGxlbmd0aAorCQkg
KiovCisJCWdpbnQgbGVuZ3RoX3RvX2FkZCA9IGVudHJ5LT5sZW5ndGggLSBjb250ZW50X2xlbmd0
aDsKKworCQkvKiBNYWtlIHJvb20gaW4gY2FjaGUgaWYgbmVlZGVkICovCisJCWlmIChjYWNoZV9h
Y2NlcHRzX2VudHJpZXNfb2Zfc2l6ZSAoY2FjaGUsIGxlbmd0aF90b19hZGQpKSB7CisJCQltYWtl
X3Jvb21fZm9yX25ld19lbnRyeSAoY2FjaGUsIGxlbmd0aF90b19hZGQpOworCisJCQljYWNoZS0+
cHJpdi0+c2l6ZSArPSBsZW5ndGhfdG9fYWRkOworCQl9IGVsc2UgeworCQkJd2Via2l0X3NvdXBf
Y2FjaGVfZW50cnlfZGVsZXRlIChjYWNoZSwgZW50cnkpOworCQkJZW50cnkgPSBOVUxMOworCQl9
CisJfQorCisJaWYgKGVudHJ5KSB7CisJCS8qIEdldCByaWQgb2YgdGhlIEdTdHJpbmcgaW4gbWVt
b3J5IGZvciB0aGUgcmVzb3VyY2Ugbm93ICovCisJCWlmIChlbnRyeS0+ZGF0YSkgeworCQkJZ19z
dHJpbmdfZnJlZSAoZW50cnktPmRhdGEsIFRSVUUpOworCQkJZW50cnktPmRhdGEgPSBOVUxMOwor
CQl9CisKKwkJZW50cnktPmRpcnR5ID0gRkFMU0U7CisJCWVudHJ5LT53cml0aW5nID0gRkFMU0U7
CisJCWVudHJ5LT5nb3RfYm9keSA9IEZBTFNFOworCQllbnRyeS0+cG9zID0gMDsKKworCQlnX29i
amVjdF91bnJlZiAoZW50cnktPmNhbmNlbGxhYmxlKTsKKwkJZW50cnktPmNhbmNlbGxhYmxlID0g
TlVMTDsKKwl9CisKKwljYWNoZS0+cHJpdi0+bl9wZW5kaW5nLS07CisKKwkvKiBGcmVlcyAqLwor
CXdlYmtpdF9zb3VwX2NhY2hlX3dyaXRpbmdfZml4dHVyZV9mcmVlIChmaXh0dXJlKTsKK30KKwor
c3RhdGljIHZvaWQKK3dyaXRlX3JlYWR5X2NiIChHT2JqZWN0ICpzb3VyY2UsIEdBc3luY1Jlc3Vs
dCAqcmVzdWx0LCBXZWJLaXRTb3VwQ2FjaGVXcml0aW5nRml4dHVyZSAqZml4dHVyZSkKK3sKKwlH
T3V0cHV0U3RyZWFtICpzdHJlYW0gPSBHX09VVFBVVF9TVFJFQU0gKHNvdXJjZSk7CisJR0Vycm9y
ICplcnJvciA9IE5VTEw7CisJZ3NzaXplIHdyaXRlX3NpemU7CisJV2ViS2l0U291cENhY2hlRW50
cnkgKmVudHJ5ID0gZml4dHVyZS0+ZW50cnk7CisKKwlpZiAoZ19jYW5jZWxsYWJsZV9pc19jYW5j
ZWxsZWQgKGVudHJ5LT5jYW5jZWxsYWJsZSkpIHsKKwkJZ19vdXRwdXRfc3RyZWFtX2Nsb3NlX2Fz
eW5jIChzdHJlYW0sCisJCQkJCSAgICAgR19QUklPUklUWV9ERUZBVUxULAorCQkJCQkgICAgIGVu
dHJ5LT5jYW5jZWxsYWJsZSwKKwkJCQkJICAgICAoR0FzeW5jUmVhZHlDYWxsYmFjayljbG9zZV9y
ZWFkeV9jYiwKKwkJCQkJICAgICBmaXh0dXJlKTsKKwkJcmV0dXJuOworCX0KKworCXdyaXRlX3Np
emUgPSBnX291dHB1dF9zdHJlYW1fd3JpdGVfZmluaXNoIChzdHJlYW0sIHJlc3VsdCwgJmVycm9y
KTsKKwlpZiAod3JpdGVfc2l6ZSA8PSAwIHx8IGVycm9yKSB7CisJCWlmIChlcnJvcikKKwkJCWVu
dHJ5LT5lcnJvciA9IGVycm9yOworCQlnX291dHB1dF9zdHJlYW1fY2xvc2VfYXN5bmMgKHN0cmVh
bSwKKwkJCQkJICAgICBHX1BSSU9SSVRZX0RFRkFVTFQsCisJCQkJCSAgICAgZW50cnktPmNhbmNl
bGxhYmxlLAorCQkJCQkgICAgIChHQXN5bmNSZWFkeUNhbGxiYWNrKWNsb3NlX3JlYWR5X2NiLAor
CQkJCQkgICAgIGZpeHR1cmUpOworCQkvKiBGSVhNRTogV2Ugc2hvdWxkIGNvbXBsZXRlbHkgc3Rv
cCBjYWNoaW5nIHRoZQorCQkgICByZXNvdXJjZSBhdCB0aGlzIHBvaW50ICovCisJfSBlbHNlIHsK
KwkJZW50cnktPnBvcyArPSB3cml0ZV9zaXplOworCisJCS8qIEFyZSB3ZSBzdGlsbCB3cml0aW5n
IGFuZCBpcyB0aGVyZSBuZXcgZGF0YSB0byB3cml0ZQorCQkgICBhbHJlYWR5ID8gKi8KKwkJaWYg
KGVudHJ5LT5kYXRhICYmIGVudHJ5LT5wb3MgPCBlbnRyeS0+ZGF0YS0+bGVuKSB7CisJCQlnX291
dHB1dF9zdHJlYW1fd3JpdGVfYXN5bmMgKGVudHJ5LT5zdHJlYW0sCisJCQkJCQkgICAgIGVudHJ5
LT5kYXRhLT5zdHIgKyBlbnRyeS0+cG9zLAorCQkJCQkJICAgICBlbnRyeS0+ZGF0YS0+bGVuIC0g
ZW50cnktPnBvcywKKwkJCQkJCSAgICAgR19QUklPUklUWV9ERUZBVUxULAorCQkJCQkJICAgICBl
bnRyeS0+Y2FuY2VsbGFibGUsCisJCQkJCQkgICAgIChHQXN5bmNSZWFkeUNhbGxiYWNrKXdyaXRl
X3JlYWR5X2NiLAorCQkJCQkJICAgICBmaXh0dXJlKTsKKwkJfSBlbHNlIHsKKwkJCWVudHJ5LT53
cml0aW5nID0gRkFMU0U7CisKKwkJCWlmIChlbnRyeS0+Z290X2JvZHkpIHsKKwkJCQkvKiBJZiB3
ZSBhbHJlYWR5IHJlY2VpdmVkICdnb3QtYm9keScKKwkJCQkgICBhbmQgd2UgaGF2ZSB3cml0dGVu
IGFsbCB0aGUgZGF0YSwKKwkJCQkgICB3ZSBjYW4gY2xvc2UgdGhlIHN0cmVhbSAqLworCQkJCWdf
b3V0cHV0X3N0cmVhbV9jbG9zZV9hc3luYyAoZW50cnktPnN0cmVhbSwKKwkJCQkJCQkgICAgIEdf
UFJJT1JJVFlfREVGQVVMVCwKKwkJCQkJCQkgICAgIGVudHJ5LT5jYW5jZWxsYWJsZSwKKwkJCQkJ
CQkgICAgIChHQXN5bmNSZWFkeUNhbGxiYWNrKWNsb3NlX3JlYWR5X2NiLAorCQkJCQkJCSAgICAg
Zml4dHVyZSk7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkCittc2dfZ290X2NodW5r
X2NiIChTb3VwTWVzc2FnZSAqbXNnLCBTb3VwQnVmZmVyICpjaHVuaywgV2ViS2l0U291cENhY2hl
V3JpdGluZ0ZpeHR1cmUgKmZpeHR1cmUpCit7CisJV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5
ID0gZml4dHVyZS0+ZW50cnk7CisKKwlnX3JldHVybl9pZl9mYWlsIChjaHVuay0+ZGF0YSAmJiBj
aHVuay0+bGVuZ3RoKTsKKwlnX3JldHVybl9pZl9mYWlsIChlbnRyeSk7CisKKwkvKiBJZ25vcmUg
dGhpcyBpZiB0aGUgd3JpdGluZyBvciBhcHBlbmRpbmcgd2FzIGNhbmNlbGxlZCAqLworCWlmICgh
Z19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQgKGVudHJ5LT5jYW5jZWxsYWJsZSkpIHsKKwkJZ19z
dHJpbmdfYXBwZW5kX2xlbiAoZW50cnktPmRhdGEsIGNodW5rLT5kYXRhLCBjaHVuay0+bGVuZ3Ro
KTsKKwkJZW50cnktPmxlbmd0aCA9IGVudHJ5LT5kYXRhLT5sZW47CisKKwkJaWYgKCFjYWNoZV9h
Y2NlcHRzX2VudHJpZXNfb2Zfc2l6ZSAoZml4dHVyZS0+Y2FjaGUsIGVudHJ5LT5sZW5ndGgpKSB7
CisJCQkvKiBRdWlja2x5IGNhbmNlbCB0aGUgY2FjaGluZyBvZiB0aGUgcmVzb3VyY2UgKi8KKwkJ
CWdfY2FuY2VsbGFibGVfY2FuY2VsIChlbnRyeS0+Y2FuY2VsbGFibGUpOworCQl9CisJfQorCisJ
LyogRklYTUU6IHJlbW92ZSB0aGUgZXJyb3IgY2hlY2sgd2hlbiB3ZSBjYW5jZWwgdGhlIGNhY2hp
bmcgYXQKKwkgICB0aGUgZmlyc3Qgd3JpdGUgZXJyb3IgKi8KKwkvKiBPbmx5IHdyaXRlIGlmIHRo
ZSBlbnRyeSBzdHJlYW0gaXMgcmVhZHkgKi8KKwlpZiAoZW50cnktPndyaXRpbmcgPT0gRkFMU0Ug
JiYgZW50cnktPmVycm9yID09IE5VTEwgJiYgZW50cnktPnN0cmVhbSkgeworCQlHU3RyaW5nICpk
YXRhID0gZW50cnktPmRhdGE7CisJCWVudHJ5LT53cml0aW5nID0gVFJVRTsKKwkJZ19vdXRwdXRf
c3RyZWFtX3dyaXRlX2FzeW5jIChlbnRyeS0+c3RyZWFtLAorCQkJCQkgICAgIGRhdGEtPnN0ciAr
IGVudHJ5LT5wb3MsCisJCQkJCSAgICAgZGF0YS0+bGVuIC0gZW50cnktPnBvcywKKwkJCQkJICAg
ICBHX1BSSU9SSVRZX0RFRkFVTFQsCisJCQkJCSAgICAgZW50cnktPmNhbmNlbGxhYmxlLAorCQkJ
CQkgICAgIChHQXN5bmNSZWFkeUNhbGxiYWNrKXdyaXRlX3JlYWR5X2NiLAorCQkJCQkgICAgIGZp
eHR1cmUpOworCX0KK30KKworc3RhdGljIHZvaWQKK21zZ19nb3RfYm9keV9jYiAoU291cE1lc3Nh
Z2UgKm1zZywgV2ViS2l0U291cENhY2hlV3JpdGluZ0ZpeHR1cmUgKmZpeHR1cmUpCit7CisJV2Vi
S2l0U291cENhY2hlRW50cnkgKmVudHJ5ID0gZml4dHVyZS0+ZW50cnk7CisJZ19yZXR1cm5faWZf
ZmFpbCAoZW50cnkpOworCisJZW50cnktPmdvdF9ib2R5ID0gVFJVRTsKKworCWlmICghZW50cnkt
PnN0cmVhbSAmJiBlbnRyeS0+cG9zICE9IGVudHJ5LT5sZW5ndGgpCisJCS8qIFRoZSBzdHJlYW0g
aXMgbm90IHJlYWR5IHRvIGJlIHdyaXR0ZW4gYnV0IHdlIHN0aWxsCisJCSAgIGhhdmUgZGF0YSB0
byB3cml0ZSwgd2UnbGwgd3JpdGUgaXQgd2hlbiB0aGUgc3RyZWFtCisJCSAgIGlzIG9wZW5lZCBm
b3Igd3JpdGluZyAqLworCQlyZXR1cm47CisKKworCWlmIChlbnRyeS0+cG9zICE9IGVudHJ5LT5s
ZW5ndGgpIHsKKwkJLyogSWYgd2Ugc3RpbGwgaGF2ZSBkYXRhIHRvIHdyaXRlLCB3cml0ZSBpdCwK
KwkJICAgd3JpdGVfcmVhZHlfY2Igd2lsbCBjbG9zZSB0aGUgc3RyZWFtICovCisJCWlmIChlbnRy
eS0+d3JpdGluZyA9PSBGQUxTRSAmJiBlbnRyeS0+ZXJyb3IgPT0gTlVMTCAmJiBlbnRyeS0+c3Ry
ZWFtKSB7CisJCQlnX291dHB1dF9zdHJlYW1fd3JpdGVfYXN5bmMgKGVudHJ5LT5zdHJlYW0sCisJ
CQkJCQkgICAgIGVudHJ5LT5kYXRhLT5zdHIgKyBlbnRyeS0+cG9zLAorCQkJCQkJICAgICBlbnRy
eS0+ZGF0YS0+bGVuIC0gZW50cnktPnBvcywKKwkJCQkJCSAgICAgR19QUklPUklUWV9ERUZBVUxU
LAorCQkJCQkJICAgICBlbnRyeS0+Y2FuY2VsbGFibGUsCisJCQkJCQkgICAgIChHQXN5bmNSZWFk
eUNhbGxiYWNrKXdyaXRlX3JlYWR5X2NiLAorCQkJCQkJICAgICBmaXh0dXJlKTsKKwkJfQorCQly
ZXR1cm47CisJfQorCisJaWYgKGVudHJ5LT5zdHJlYW0pCisJCWdfb3V0cHV0X3N0cmVhbV9jbG9z
ZV9hc3luYyAoZW50cnktPnN0cmVhbSwKKwkJCQkJICAgICBHX1BSSU9SSVRZX0RFRkFVTFQsCisJ
CQkJCSAgICAgZW50cnktPmNhbmNlbGxhYmxlLAorCQkJCQkgICAgIChHQXN5bmNSZWFkeUNhbGxi
YWNrKWNsb3NlX3JlYWR5X2NiLAorCQkJCQkgICAgIGZpeHR1cmUpOworfQorCitzdGF0aWMgdm9p
ZAord2Via2l0X3NvdXBfY2FjaGVfZW50cnlfZGVsZXRlIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hl
LCBXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkpCit7CisJR0ZpbGUgKmZpbGU7CisJY2hhciAq
bWQ1LCAqZmlsZW5hbWU7CisKKwkvKiBEZWxldGUgY2FjaGUgZmlsZS4gV2UgZG9uJ3QgdXNlIHRo
ZSBlbnRyeS0+ZmlsZW5hbWUgYmVjYXVzZQorCSAgIHdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgZmls
ZSBpcyBkZWxldGVkIGV2ZW4gdG91Z2ggdGhlIGNhY2hlCisJICAgYmVjYW1lIHNvbWVob3cgY29y
cnVwdGVkIGFuZCB0aGUgZW50cnkgaXMgbm90IHRoZXJlICovCisJbWQ1ID0gZ19jb21wdXRlX2No
ZWNrc3VtX2Zvcl9zdHJpbmcgKEdfQ0hFQ0tTVU1fTUQ1LCBlbnRyeS0+a2V5LCAtMSk7CisJZmls
ZW5hbWUgPSBnX2J1aWxkX2ZpbGVuYW1lIChjYWNoZS0+cHJpdi0+Y2FjaGVfZGlyLCBtZDUsIE5V
TEwpOworCWZpbGUgPSBnX2ZpbGVfbmV3X2Zvcl9wYXRoIChmaWxlbmFtZSk7CisJZ19maWxlX2Rl
bGV0ZSAoZmlsZSwgTlVMTCwgTlVMTCk7CisJZ19mcmVlIChtZDUpOworCWdfZnJlZSAoZmlsZW5h
bWUpOworCWdfb2JqZWN0X3VucmVmIChmaWxlKTsKKworCS8qIFJlbW92ZSBmcm9tIExSVSAqLwor
CWNhY2hlLT5wcml2LT5scnVfc3RhcnQgPSBnX2xpc3RfZGVsZXRlX2xpbmsgKGNhY2hlLT5wcml2
LT5scnVfc3RhcnQsIGVudHJ5LT5scnUpOworCisJLyogUmVtb3ZlIGZyb20gY2FjaGUgKi8KKwln
X2hhc2hfdGFibGVfcmVtb3ZlIChjYWNoZS0+cHJpdi0+Y2FjaGUsIGVudHJ5LT5rZXkpOworfQor
CitzdGF0aWMgZ2ludAorbHJ1X2NvbXBhcmVfZnVuYyAoZ2NvbnN0cG9pbnRlciBhLCBnY29uc3Rw
b2ludGVyIGIpCit7CisJV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5X2EgPSAoV2ViS2l0U291
cENhY2hlRW50cnkgKilhOworCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeV9iID0gKFdlYktp
dFNvdXBDYWNoZUVudHJ5ICopYjsKKworCS8qKiBUaGUgcmF0aW9uYWxlIG9mIHRoaXMgc29ydGlu
ZyBmdW5jIGlzCisJICoKKwkgKiAxLiBzb3J0IGJ5IGhpdHMgLT4gTFJVIGFsZ29yaXRobSwgdGhl
bgorCSAqCisJICogMi4gc29ydCBieSBmcmVzaG5lc3MgbGlmZXRpbWUsIHdlIGJldHRlciBkaXNj
YXJkIGZpcnN0CisJICogZW50cmllcyB0aGF0IGFyZSBjbG9zZSB0byBleHBpcmUKKwkgKgorCSAq
IDMuIHNvcnQgYnkgc2l6ZSwgcmVwbGFjZSBmaXJzdCBzbWFsbCBzaXplIHJlc291cmNlcyBhcyB0
aGV5CisJICogYXJlIGNoZWFwZXIgdG8gZG93bmxvYWQKKwkgKiovCisKKwkvKiBTb3J0IGJ5IGhp
dHMgKi8KKwlpZiAoZW50cnlfYS0+aGl0cyAhPSBlbnRyeV9iLT5oaXRzKQorCQlyZXR1cm4gZW50
cnlfYS0+aGl0cyAtIGVudHJ5X2ItPmhpdHM7CisKKwkvKiBTb3J0IGJ5IGZyZXNobmVzc19saWZl
dGltZSAqLworCWlmIChlbnRyeV9hLT5mcmVzaG5lc3NfbGlmZXRpbWUgIT0gZW50cnlfYi0+ZnJl
c2huZXNzX2xpZmV0aW1lKQorCQlyZXR1cm4gZW50cnlfYS0+ZnJlc2huZXNzX2xpZmV0aW1lIC0g
ZW50cnlfYi0+ZnJlc2huZXNzX2xpZmV0aW1lOworCisJLyogU29ydCBieSBzaXplICovCisJcmV0
dXJuIGVudHJ5X2EtPmxlbmd0aCAtIGVudHJ5X2ItPmxlbmd0aDsKK30KKworc3RhdGljIGdib29s
ZWFuCitjYWNoZV9hY2NlcHRzX2VudHJpZXNfb2Zfc2l6ZSAoV2ViS2l0U291cENhY2hlICpjYWNo
ZSwgZ3VpbnQgbGVuZ3RoX3RvX2FkZCkKK3sKKwkvKiBXZSBjb3VsZCBhZGQgaGVyZSBzb21lIG1v
cmUgaGV1cmlzdGljcy4gVE9ETzogcmV2aWV3IGhvdworCSAgIHRoaXMgaXMgZG9uZSBieSBvdGhl
ciBIVFRQIGNhY2hlcyAqLworCisJcmV0dXJuIGxlbmd0aF90b19hZGQgPD0gY2FjaGUtPnByaXYt
Pm1heF9lbnRyeV9kYXRhX3NpemU7Cit9CisKK3N0YXRpYyB2b2lkCittYWtlX3Jvb21fZm9yX25l
d19lbnRyeSAoV2ViS2l0U291cENhY2hlICpjYWNoZSwgZ3VpbnQgbGVuZ3RoX3RvX2FkZCkKK3sK
KwkvKiBDaGVjayB0aGF0IHRoZXJlIGlzIGVub3VnaCByb29tIGZvciB0aGUgbmV3IGVudHJ5LiBU
aGlzIGlzCisJICAgYW4gYXBwcm94aW1hdGlvbiBhcyB3ZSdyZSBub3Qgd29ya2luZyBvdXQgdGhl
IHNpemUgb2YgdGhlCisJICAgY2FjaGUgZmlsZSBvciB0aGUgc2l6ZSBvZiB0aGUgaGVhZGVycyBm
b3IgcGVyZm9ybWFuY2UKKwkgICByZWFzb25zLiBUT0RPOiBjaGVjayBpZiB0aGF0IHdvdWxkIGJl
IHJlYWxseSB0aGF0IGV4cGVuc2l2ZSAqLworCXdoaWxlIChjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0
ICYmCisJICAgICAgIChsZW5ndGhfdG9fYWRkICsgY2FjaGUtPnByaXYtPnNpemUgPiBjYWNoZS0+
cHJpdi0+bWF4X3NpemUpKSB7CisJCVdlYktpdFNvdXBDYWNoZUVudHJ5ICpvbGRfZW50cnk7CisK
KwkJLyogUmVtb3ZlIGZyb20gbGlzdCAqLworCQlvbGRfZW50cnkgPSAoV2ViS2l0U291cENhY2hl
RW50cnkgKiljYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0LT5kYXRhOworCQljYWNoZS0+cHJpdi0+bHJ1
X3N0YXJ0ID0gZ19saXN0X2RlbGV0ZV9saW5rIChjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0LCBjYWNo
ZS0+cHJpdi0+bHJ1X3N0YXJ0KTsKKworCQkvKiBEaXNjYXJkIGVudHJpZXMuIE9uY2UgY2FuY2Vs
bGVkIHJlc291cmNlcyB3aWxsIGJlCisJCSAgIGZyZWVkIGluIGNsb3NlX3JlYWR5X2NiICovCisJ
CWdfZGVidWcgKCJEaXNjYXJkaW5nICgldSBieXRlcykuLi5cdChub3cgJXUpIiwgb2xkX2VudHJ5
LT5sZW5ndGgsIGNhY2hlLT5wcml2LT5zaXplKTsKKwkJY2FjaGUtPnByaXYtPnNpemUgLT0gb2xk
X2VudHJ5LT5sZW5ndGg7CisKKwkJaWYgKG9sZF9lbnRyeS0+ZGlydHkpCisJCQlnX2NhbmNlbGxh
YmxlX2NhbmNlbCAob2xkX2VudHJ5LT5jYW5jZWxsYWJsZSk7CisJCWVsc2UKKwkJCXdlYmtpdF9z
b3VwX2NhY2hlX2VudHJ5X2RlbGV0ZSAoY2FjaGUsIG9sZF9lbnRyeSk7CisJfQorCWlmIChHX1VO
TElLRUxZIChjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0ID09IE5VTEwpKQorCQljYWNoZS0+cHJpdi0+
bHJ1X2VuZCA9IE5VTEw7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgord2Via2l0X3NvdXBfY2FjaGVf
ZW50cnlfaW5zZXJ0X2J5X2tleSAoV2ViS2l0U291cENhY2hlICpjYWNoZSwgY29uc3QgY2hhciAq
a2V5LCBXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkpCit7CisJZ3VpbnQgbGVuZ3RoX3RvX2Fk
ZCA9IDA7CisKKwlpZiAoc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2VuY29kaW5nIChlbnRyeS0+
aGVhZGVycykgIT0gU09VUF9FTkNPRElOR19DSFVOS0VEKQorCQlsZW5ndGhfdG9fYWRkID0gc291
cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2NvbnRlbnRfbGVuZ3RoIChlbnRyeS0+aGVhZGVycyk7CisK
KwkvKiBDaGVjayBpZiB3ZSBhcmUgZ29pbmcgdG8gc3RvcmUgdGhlIHJlc291cmNlIGRlcGVuZGlu
ZyBvbiBpdHMgc2l6ZSAqLworCWlmIChsZW5ndGhfdG9fYWRkKSB7CisJCWlmICghY2FjaGVfYWNj
ZXB0c19lbnRyaWVzX29mX3NpemUgKGNhY2hlLCBsZW5ndGhfdG9fYWRkKSkKKwkJCXJldHVybiBG
QUxTRTsKKworCQkvKiBNYWtlIHJvb20gZm9yIG5ldyBlbnRyeSBpZiBuZWVkZWQgKi8KKwkJbWFr
ZV9yb29tX2Zvcl9uZXdfZW50cnkgKGNhY2hlLCBsZW5ndGhfdG9fYWRkKTsKKwl9CisKKwlnX2hh
c2hfdGFibGVfaW5zZXJ0IChjYWNoZS0+cHJpdi0+Y2FjaGUsIGdfc3RyZHVwIChrZXkpLCBlbnRy
eSk7CisKKwkvKiBDb21wdXRlIG5ldyBjYWNoZSBzaXplICovCisJY2FjaGUtPnByaXYtPnNpemUg
Kz0gbGVuZ3RoX3RvX2FkZDsKKworCS8qIFVwZGF0ZSBMUlUgbGlzdHMgKi8KKwljYWNoZS0+cHJp
di0+bHJ1X3N0YXJ0ID0gZ19saXN0X2luc2VydF9zb3J0ZWQgKGNhY2hlLT5wcml2LT5scnVfc3Rh
cnQsIGVudHJ5LCBscnVfY29tcGFyZV9mdW5jKTsKKwlpZiAoR19MSUtFTFkgKGNhY2hlLT5wcml2
LT5scnVfZW5kKSkgeworCQl3aGlsZSAoY2FjaGUtPnByaXYtPmxydV9lbmQtPm5leHQgIT0gTlVM
TCkKKwkJCWNhY2hlLT5wcml2LT5scnVfZW5kID0gZ19saXN0X25leHQgKGNhY2hlLT5wcml2LT5s
cnVfZW5kKTsKKwl9IGVsc2UgeworCQljYWNoZS0+cHJpdi0+bHJ1X2VuZCA9IGNhY2hlLT5wcml2
LT5scnVfc3RhcnQ7CisJfQorCisJcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkCittc2df
cmVzdGFydGVkX2NiIChTb3VwTWVzc2FnZSAqbXNnLCBXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50
cnkpCit7CisJLyogRklYTUU6IFdoYXQgc2hvdWxkIHdlIGRvIGhlcmUgZXhhY3RseT8gKi8KK30K
Kworc3RhdGljIHZvaWQKK2FwcGVuZF90b19yZWFkeV9jYiAoR09iamVjdCAqc291cmNlLCBHQXN5
bmNSZXN1bHQgKnJlc3VsdCwgV2ViS2l0U291cENhY2hlV3JpdGluZ0ZpeHR1cmUgKmZpeHR1cmUp
Cit7CisJR0ZpbGUgKmZpbGUgPSAoR0ZpbGUgKilzb3VyY2U7CisJR091dHB1dFN0cmVhbSAqc3Ry
ZWFtOworCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSA9IGZpeHR1cmUtPmVudHJ5OworCisJ
c3RyZWFtID0gKEdPdXRwdXRTdHJlYW0gKilnX2ZpbGVfYXBwZW5kX3RvX2ZpbmlzaCAoZmlsZSwg
cmVzdWx0LCAmZW50cnktPmVycm9yKTsKKworCWlmIChnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxl
ZCAoZW50cnktPmNhbmNlbGxhYmxlKSB8fCBlbnRyeS0+ZXJyb3IpIHsKKwkJZml4dHVyZS0+Y2Fj
aGUtPnByaXYtPnNpemUgLT0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2NvbnRlbnRfbGVuZ3Ro
IChlbnRyeS0+aGVhZGVycyk7CisJCWZpeHR1cmUtPmNhY2hlLT5wcml2LT5uX3BlbmRpbmctLTsK
KwkJd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfZGVsZXRlIChmaXh0dXJlLT5jYWNoZSwgZW50cnkp
OworCQl3ZWJraXRfc291cF9jYWNoZV93cml0aW5nX2ZpeHR1cmVfZnJlZSAoZml4dHVyZSk7CisJ
CXJldHVybjsKKwl9CisKKwllbnRyeS0+c3RyZWFtID0gZ19vYmplY3RfcmVmIChzdHJlYW0pOwor
CWdfb2JqZWN0X3VucmVmIChmaWxlKTsKKworCS8qIElmIHdlIGFscmVhZHkgZ290IGFsbCB0aGUg
ZGF0YSB3ZSBoYXZlIHRvIGluaXRpYXRlIHRoZQorCSAgIHdyaXRpbmcgaGVyZSwgc2luY2Ugd2Ug
d29uJ3QgZ2V0IG1vcmUgJ2dvdC1jaHVuaycKKwkgICBzaWduYWxzICovCisJaWYgKGVudHJ5LT5n
b3RfYm9keSkgeworCQlHU3RyaW5nICpkYXRhID0gZW50cnktPmRhdGE7CisKKwkJLyogSXQgY291
bGQgaGFwcGVuIHRoYXQgcmVhZGluZyB0aGUgZGF0YSBmcm9tIHNlcnZlcgorCQkgICB3YXMgY29t
cGxldGVkIGJlZm9yZSB0aGlzIGhhcHBlbnMuIEluIHRoYXQgY2FzZQorCQkgICB0aGVyZSBpcyBu
byBkYXRhICovCisJCWlmIChkYXRhKSB7CisJCQllbnRyeS0+d3JpdGluZyA9IFRSVUU7CisJCQln
X291dHB1dF9zdHJlYW1fd3JpdGVfYXN5bmMgKGVudHJ5LT5zdHJlYW0sCisJCQkJCQkgICAgIGRh
dGEtPnN0ciArIGVudHJ5LT5wb3MsCisJCQkJCQkgICAgIGRhdGEtPmxlbiAtIGVudHJ5LT5wb3Ms
CisJCQkJCQkgICAgIEdfUFJJT1JJVFlfREVGQVVMVCwKKwkJCQkJCSAgICAgZW50cnktPmNhbmNl
bGxhYmxlLAorCQkJCQkJICAgICAoR0FzeW5jUmVhZHlDYWxsYmFjayl3cml0ZV9yZWFkeV9jYiwK
KwkJCQkJCSAgICAgZml4dHVyZSk7CisJCX0KKwl9Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKwl0
aW1lX3QgcmVxdWVzdF90aW1lOworCVNvdXBTZXNzaW9uRmVhdHVyZSAqZmVhdHVyZTsKKwlndWxv
bmcgZ290X2hlYWRlcnNfaGFuZGxlcjsKK30gUmVxdWVzdEhlbHBlcjsKKworc3RhdGljIHZvaWQK
K21zZ19nb3RfaGVhZGVyc19jYiAoU291cE1lc3NhZ2UgKm1zZywgZ3BvaW50ZXIgdXNlcl9kYXRh
KQoreworCVdlYktpdFNvdXBDYWNoZSAqY2FjaGU7CisJV2ViS2l0U291cENhY2hlYWJpbGl0eSBj
YWNoZWFibGU7CisJUmVxdWVzdEhlbHBlciAqaGVscGVyOworCXRpbWVfdCByZXF1ZXN0X3RpbWUs
IHJlc3BvbnNlX3RpbWU7CisKKwlyZXNwb25zZV90aW1lID0gdGltZSAoTlVMTCk7CisKKwloZWxw
ZXIgPSAoUmVxdWVzdEhlbHBlciAqKXVzZXJfZGF0YTsKKwljYWNoZSA9IFdFQktJVF9TT1VQX0NB
Q0hFIChoZWxwZXItPmZlYXR1cmUpOworCXJlcXVlc3RfdGltZSA9IGhlbHBlci0+cmVxdWVzdF90
aW1lOworCWdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyAobXNnLCBtc2dfZ290
X2hlYWRlcnNfY2IsIHVzZXJfZGF0YSk7CisJZ19zbGljZV9mcmVlIChSZXF1ZXN0SGVscGVyLCBo
ZWxwZXIpOworCisJY2FjaGVhYmxlID0gd2Via2l0X3NvdXBfY2FjaGVfZ2V0X2NhY2hlYWJpbGl0
eSAoY2FjaGUsIG1zZyk7CisKKwlpZiAoY2FjaGVhYmxlICYgV0VCS0lUX1NPVVBfQ0FDSEVfQ0FD
SEVBQkxFKSB7CisJCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeTsKKwkJY2hhciAqa2V5Owor
CQlHRmlsZSAqZmlsZTsKKwkJV2ViS2l0U291cENhY2hlV3JpdGluZ0ZpeHR1cmUgKmZpeHR1cmU7
CisKKwkJLyogQ2hlY2sgaWYgd2UgYXJlIGFscmVhZHkgY2FjaGluZyB0aGlzIHJlc291cmNlICov
CisJCWtleSA9IHNvdXBfbWVzc2FnZV9nZXRfY2FjaGVfa2V5IChtc2cpOworCQllbnRyeSA9IGdf
aGFzaF90YWJsZV9sb29rdXAgKGNhY2hlLT5wcml2LT5jYWNoZSwga2V5KTsKKwkJZ19mcmVlIChr
ZXkpOworCisJCWlmIChlbnRyeSAmJiBlbnRyeS0+ZGlydHkpCisJCQlyZXR1cm47CisKKwkJLyog
Q3JlYXRlIGEgbmV3IGVudHJ5LCBkZWxldGluZyBhbnkgb2xkIG9uZSBpZiBwcmVzZW50ICovCisJ
CWVudHJ5ID0gd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfbmV3IChjYWNoZSwgbXNnLCByZXF1ZXN0
X3RpbWUsIHJlc3BvbnNlX3RpbWUpOworCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9kZWxldGUg
KGNhY2hlLCBlbnRyeSk7CisKKwkJZW50cnktPmhpdHMgPSAxOworCisJCS8qIERvIG5vdCBjb250
aW51ZSBpZiBpdCBjYW4gbm90IGJlIHN0b3JlZCAqLworCQlpZiAoIXdlYmtpdF9zb3VwX2NhY2hl
X2VudHJ5X2luc2VydF9ieV9rZXkgKGNhY2hlLCAoY29uc3QgZ2NoYXIgKillbnRyeS0+a2V5LCBl
bnRyeSkpIHsKKwkJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUgKGVudHJ5KTsKKwkJCXJl
dHVybjsKKwkJfQorCisJCWZpeHR1cmUgPSBnX3NsaWNlX25ldyAoV2ViS2l0U291cENhY2hlV3Jp
dGluZ0ZpeHR1cmUpOworCQlmaXh0dXJlLT5jYWNoZSA9IGdfb2JqZWN0X3JlZiAoY2FjaGUpOwor
CQlmaXh0dXJlLT5lbnRyeSA9IGVudHJ5OworCQlmaXh0dXJlLT5tc2cgPSBnX29iamVjdF9yZWYg
KG1zZyk7CisKKwkJLyogV2UgY29ubmVjdCBub3cgdG8gdGhlc2Ugc2lnbmFscyBhbmQgYnVmZmVy
IHRoZSBkYXRhCisJCSAgIGlmIGl0IGNvbWVzIGJlZm9yZSB0aGUgZmlsZSBpcyByZWFkeSBmb3Ig
d3JpdGluZyAqLworCQlmaXh0dXJlLT5nb3RfY2h1bmtfaGFuZGxlciA9CisJCQlnX3NpZ25hbF9j
b25uZWN0IChtc2csICJnb3QtY2h1bmsiLCBHX0NBTExCQUNLIChtc2dfZ290X2NodW5rX2NiKSwg
Zml4dHVyZSk7CisJCWZpeHR1cmUtPmdvdF9ib2R5X2hhbmRsZXIgPQorCQkJZ19zaWduYWxfY29u
bmVjdCAobXNnLCAiZ290LWJvZHkiLCBHX0NBTExCQUNLIChtc2dfZ290X2JvZHlfY2IpLCBmaXh0
dXJlKTsKKwkJZml4dHVyZS0+cmVzdGFydGVkX2hhbmRsZXIgPQorCQkJZ19zaWduYWxfY29ubmVj
dCAobXNnLCAicmVzdGFydGVkIiwgR19DQUxMQkFDSyAobXNnX3Jlc3RhcnRlZF9jYiksIGVudHJ5
KTsKKworCQkvKiBQcmVwYXJlIGVudHJ5ICovCisJCWZpbGUgPSBnX2ZpbGVfbmV3X2Zvcl9wYXRo
IChlbnRyeS0+ZmlsZW5hbWUpOworCQljYWNoZS0+cHJpdi0+bl9wZW5kaW5nKys7CisKKwkJZW50
cnktPmRpcnR5ID0gVFJVRTsKKwkJZW50cnktPmNhbmNlbGxhYmxlID0gZ19jYW5jZWxsYWJsZV9u
ZXcgKCk7CisJCWdfZmlsZV9hcHBlbmRfdG9fYXN5bmMgKGZpbGUsIDAsCisJCQkJCUdfUFJJT1JJ
VFlfREVGQVVMVCwgZW50cnktPmNhbmNlbGxhYmxlLAorCQkJCQkoR0FzeW5jUmVhZHlDYWxsYmFj
aylhcHBlbmRfdG9fcmVhZHlfY2IsCisJCQkJCWZpeHR1cmUpOworCX0gZWxzZSBpZiAoY2FjaGVh
YmxlICYgV0VCS0lUX1NPVVBfQ0FDSEVfSU5WQUxJREFURVMpIHsKKwkJY2hhciAqa2V5OworCQlX
ZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnk7CisKKwkJa2V5ID0gc291cF9tZXNzYWdlX2dldF9j
YWNoZV9rZXkgKG1zZyk7CisJCWVudHJ5ID0gZ19oYXNoX3RhYmxlX2xvb2t1cCAoY2FjaGUtPnBy
aXYtPmNhY2hlLCBrZXkpOworCQlnX2ZyZWUgKGtleSk7CisKKwkJaWYgKGVudHJ5KQorCQkJd2Vi
a2l0X3NvdXBfY2FjaGVfZW50cnlfZGVsZXRlIChjYWNoZSwgZW50cnkpOworCX0gZWxzZSBpZiAo
Y2FjaGVhYmxlICYgV0VCS0lUX1NPVVBfQ0FDSEVfVkFMSURBVEVTKSB7CisJCWNoYXIgKmtleTsK
KwkJV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5OworCisJCWtleSA9IHNvdXBfbWVzc2FnZV9n
ZXRfY2FjaGVfa2V5IChtc2cpOworCQllbnRyeSA9IGdfaGFzaF90YWJsZV9sb29rdXAgKGNhY2hl
LT5wcml2LT5jYWNoZSwga2V5KTsKKwkJZ19mcmVlIChrZXkpOworCisJCWdfcmV0dXJuX2lmX2Zh
aWwgKGVudHJ5KTsKKworCQllbnRyeS0+YmVpbmdfdmFsaWRhdGVkID0gRkFMU0U7CisKKwkJLyog
V2UgdXBkYXRlIHRoZSBoZWFkZXJzIG9mIHRoZSBleGlzdGluZyBjYWNoZSBpdGVtLAorCQkgICBw
bHVzIGl0cyBhZ2UgKi8KKwkJc291cF9tZXNzYWdlX2hlYWRlcnNfZm9yZWFjaCAobXNnLT5yZXNw
b25zZV9oZWFkZXJzLAorCQkJCQkgICAgICAoU291cE1lc3NhZ2VIZWFkZXJzRm9yZWFjaEZ1bmMp
dXBkYXRlX2hlYWRlcnMsCisJCQkJCSAgICAgIGVudHJ5LT5oZWFkZXJzKTsKKwkJd2Via2l0X3Nv
dXBfY2FjaGVfZW50cnlfc2V0X2ZyZXNobmVzcyAoZW50cnksIG1zZywgY2FjaGUpOworCX0KK30K
KworR0lucHV0U3RyZWFtICoKK3dlYmtpdF9zb3VwX2NhY2hlX3NlbmRfcmVzcG9uc2UgKFdlYktp
dFNvdXBDYWNoZSAqY2FjaGUsIFNvdXBNZXNzYWdlICptc2cpCit7CisJY2hhciAqa2V5OworCVdl
YktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeTsKKwljaGFyICpjdXJyZW50X2FnZTsKKwlHSW5wdXRT
dHJlYW0gKnN0cmVhbSA9IE5VTEw7CisJR0ZpbGUgKmZpbGU7CisKKwlnX3JldHVybl92YWxfaWZf
ZmFpbCAoV0VCS0lUX0lTX1NPVVBfQ0FDSEUgKGNhY2hlKSwgTlVMTCk7CisJZ19yZXR1cm5fdmFs
X2lmX2ZhaWwgKFNPVVBfSVNfTUVTU0FHRSAobXNnKSwgTlVMTCk7CisKKwlrZXkgPSBzb3VwX21l
c3NhZ2VfZ2V0X2NhY2hlX2tleSAobXNnKTsKKwllbnRyeSA9IGdfaGFzaF90YWJsZV9sb29rdXAg
KGNhY2hlLT5wcml2LT5jYWNoZSwga2V5KTsKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoZW50cnks
IE5VTEwpOworCisJLyogSWYgd2UgYXJlIHRvbGQgdG8gc2VuZCBhIHJlc3BvbnNlIGZyb20gY2Fj
aGUgYW55IHZhbGlkYXRpb24KKwkgICBpbiBjb3Vyc2UgaXMgb3ZlciBieSBub3cgKi8KKwllbnRy
eS0+YmVpbmdfdmFsaWRhdGVkID0gRkFMU0U7CisKKwkvKiBIZWFkZXJzICovCisJc291cF9tZXNz
YWdlX2hlYWRlcnNfZm9yZWFjaCAoZW50cnktPmhlYWRlcnMsCisJCQkJICAgICAgKFNvdXBNZXNz
YWdlSGVhZGVyc0ZvcmVhY2hGdW5jKXVwZGF0ZV9oZWFkZXJzLAorCQkJCSAgICAgIG1zZy0+cmVz
cG9uc2VfaGVhZGVycyk7CisKKwkvKiBBZGQgJ0FnZScgaGVhZGVyIHdpdGggdGhlIGN1cnJlbnQg
YWdlICovCisJY3VycmVudF9hZ2UgPSBnX3N0cmR1cF9wcmludGYgKCIlZCIsIHdlYmtpdF9zb3Vw
X2NhY2hlX2VudHJ5X2dldF9jdXJyZW50X2FnZSAoZW50cnkpKTsKKwlzb3VwX21lc3NhZ2VfaGVh
ZGVyc19yZXBsYWNlIChtc2ctPnJlc3BvbnNlX2hlYWRlcnMsCisJCQkJICAgICAgIkFnZSIsCisJ
CQkJICAgICAgY3VycmVudF9hZ2UpOworCWdfZnJlZSAoY3VycmVudF9hZ2UpOworCisJLyogVE9E
TzogdGhlIG9yaWdpbmFsIGlkZWEgd2FzIHRvIHNhdmUgcmVhZHMsIGJ1dCBjdXJyZW50IGNvZGUK
KwkgICBhc3N1bWVzIHRoYXQgYSBzdHJlYW0gaXMgYWx3YXlzIHJldHVybmVkLiBOZWVkIHRvIHJl
YWNoCisJICAgc29tZSBhZ3JlZW1lbnQgaGVyZS4gQWxzbyB3ZSBoYXZlIHRvIGhhbmRsZSB0aGUg
c2l0dWF0aW9uCisJICAgd2VyZSB0aGUgZmlsZSB3YXMgbm8gbG9uZ2VyIHRoZXJlIChmb3IgZXhh
bXBsZSBmaWxlcworCSAgIHJlbW92ZWQgd2l0aG91dCBub3RpZnlpbmcgdGhlIGNhY2hlICovCisJ
ZmlsZSA9IGdfZmlsZV9uZXdfZm9yX3BhdGggKGVudHJ5LT5maWxlbmFtZSk7CisJc3RyZWFtID0g
KEdJbnB1dFN0cmVhbSAqKWdfZmlsZV9yZWFkIChmaWxlLCBOVUxMLCBOVUxMKTsKKworCXJldHVy
biBzdHJlYW07Cit9CisKK3N0YXRpYyB2b2lkCityZXF1ZXN0X3N0YXJ0ZWQgKFNvdXBTZXNzaW9u
RmVhdHVyZSAqZmVhdHVyZSwgU291cFNlc3Npb24gKnNlc3Npb24sCisJCSBTb3VwTWVzc2FnZSAq
bXNnLCBTb3VwU29ja2V0ICpzb2NrZXQpCit7CisJUmVxdWVzdEhlbHBlciAqaGVscGVyID0gZ19z
bGljZV9uZXcwIChSZXF1ZXN0SGVscGVyKTsKKwloZWxwZXItPnJlcXVlc3RfdGltZSA9IHRpbWUg
KE5VTEwpOworCWhlbHBlci0+ZmVhdHVyZSA9IGZlYXR1cmU7CisJaGVscGVyLT5nb3RfaGVhZGVy
c19oYW5kbGVyID0gZ19zaWduYWxfY29ubmVjdCAobXNnLCAiZ290LWhlYWRlcnMiLAorCQkJCQkJ
CUdfQ0FMTEJBQ0sgKG1zZ19nb3RfaGVhZGVyc19jYiksCisJCQkJCQkJaGVscGVyKTsKK30KKwor
c3RhdGljIHZvaWQKK2F0dGFjaCAoU291cFNlc3Npb25GZWF0dXJlICpmZWF0dXJlLCBTb3VwU2Vz
c2lvbiAqc2Vzc2lvbikKK3sKKwlXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlID0gV0VCS0lUX1NPVVBf
Q0FDSEUgKGZlYXR1cmUpOworCWNhY2hlLT5wcml2LT5zZXNzaW9uID0gc2Vzc2lvbjsKKworCXdl
YmtpdF9zb3VwX2NhY2hlX2RlZmF1bHRfZmVhdHVyZV9pbnRlcmZhY2UtPmF0dGFjaCAoZmVhdHVy
ZSwgc2Vzc2lvbik7Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfc291cF9jYWNoZV9zZXNzaW9u
X2ZlYXR1cmVfaW5pdCAoU291cFNlc3Npb25GZWF0dXJlSW50ZXJmYWNlICpmZWF0dXJlX2ludGVy
ZmFjZSwKKwkJCQkJZ3BvaW50ZXIgaW50ZXJmYWNlX2RhdGEpCit7CisJd2Via2l0X3NvdXBfY2Fj
aGVfZGVmYXVsdF9mZWF0dXJlX2ludGVyZmFjZSA9CisJCWdfdHlwZV9kZWZhdWx0X2ludGVyZmFj
ZV9wZWVrIChTT1VQX1RZUEVfU0VTU0lPTl9GRUFUVVJFKTsKKworCWZlYXR1cmVfaW50ZXJmYWNl
LT5hdHRhY2ggPSBhdHRhY2g7CisJZmVhdHVyZV9pbnRlcmZhY2UtPnJlcXVlc3Rfc3RhcnRlZCA9
IHJlcXVlc3Rfc3RhcnRlZDsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX2NhY2hlX2lu
aXQgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUpCit7CisJV2ViS2l0U291cENhY2hlUHJpdmF0ZSAq
cHJpdjsKKworCXByaXYgPSBjYWNoZS0+cHJpdiA9IFdFQktJVF9TT1VQX0NBQ0hFX0dFVF9QUklW
QVRFIChjYWNoZSk7CisKKwlwcml2LT5jYWNoZSA9IGdfaGFzaF90YWJsZV9uZXdfZnVsbCAoZ19z
dHJfaGFzaCwKKwkJCQkJICAgICBnX3N0cl9lcXVhbCwKKwkJCQkJICAgICAoR0Rlc3Ryb3lOb3Rp
ZnkpZ19mcmVlLAorCQkJCQkgICAgIChHRGVzdHJveU5vdGlmeSl3ZWJraXRfc291cF9jYWNoZV9l
bnRyeV9mcmVlKTsKKworCS8qIExSVSAqLworCXByaXYtPmxydV9zdGFydCA9IE5VTEw7CisJcHJp
di0+bHJ1X2VuZCA9IE5VTEw7CisKKwkvKiAqLworCXByaXYtPm5fcGVuZGluZyA9IDA7CisKKwkv
KiBDYWNoZSBzaXplICovCisJcHJpdi0+bWF4X3NpemUgPSBERUZBVUxUX01BWF9TSVpFOworCXBy
aXYtPm1heF9lbnRyeV9kYXRhX3NpemUgPSBwcml2LT5tYXhfc2l6ZSAvIE1BWF9FTlRSWV9EQVRB
X1BFUkNFTlRBR0U7CisJcHJpdi0+c2l6ZSA9IDA7Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRf
c291cF9jYWNoZV9maW5hbGl6ZSAoR09iamVjdCAqb2JqZWN0KQoreworCVdlYktpdFNvdXBDYWNo
ZVByaXZhdGUgKnByaXY7CisKKwlwcml2ID0gV0VCS0lUX1NPVVBfQ0FDSEUgKG9iamVjdCktPnBy
aXY7CisKKwlnX2hhc2hfdGFibGVfZGVzdHJveSAocHJpdi0+Y2FjaGUpOworCWdfZnJlZSAocHJp
di0+Y2FjaGVfZGlyKTsKKworCWdfbGlzdF9mcmVlIChwcml2LT5scnVfc3RhcnQpOworCXByaXYt
PmxydV9zdGFydCA9IE5VTEw7CisJcHJpdi0+bHJ1X2VuZCA9IE5VTEw7CisKKwlHX09CSkVDVF9D
TEFTUyAod2Via2l0X3NvdXBfY2FjaGVfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7
Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfc291cF9jYWNoZV9zZXRfcHJvcGVydHkgKEdPYmpl
Y3QgKm9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKwkJCQljb25zdCBHVmFsdWUgKnZhbHVlLCBHUGFy
YW1TcGVjICpwc3BlYykKK3sKKwlXZWJLaXRTb3VwQ2FjaGVQcml2YXRlICpwcml2ID0gV0VCS0lU
X1NPVVBfQ0FDSEUgKG9iamVjdCktPnByaXY7CisKKwlzd2l0Y2ggKHByb3BfaWQpIHsKKwkJY2Fz
ZSBQUk9QX0NBQ0hFX0RJUjoKKwkJCXByaXYtPmNhY2hlX2RpciA9IGdfdmFsdWVfZHVwX3N0cmlu
ZyAodmFsdWUpOworCQkJLyogQ3JlYXRlIGRpcmVjdG9yeSBpZiBpdCBkb2VzIG5vdCBleGlzdCAo
RklYTUU6IHNob3VsZCB3ZT8pICovCisJCQlpZiAoIWdfZmlsZV90ZXN0IChwcml2LT5jYWNoZV9k
aXIsIEdfRklMRV9URVNUX0VYSVNUUyB8IEdfRklMRV9URVNUX0lTX0RJUikpCisJCQkJZ19ta2Rp
cl93aXRoX3BhcmVudHMgKHByaXYtPmNhY2hlX2RpciwgMDcwMCk7CisJCQlicmVhazsKKwkJY2Fz
ZSBQUk9QX0NBQ0hFX1RZUEU6CisJCQlwcml2LT5jYWNoZV90eXBlID0gZ192YWx1ZV9nZXRfZW51
bSAodmFsdWUpOworCQkJLyogVE9ETzogY2xlYXIgcHJpdmF0ZSBlbnRyaWVzIGFuZCBpc3N1ZSBh
IHdhcm5pbmcgaWYgbW92aW5nIHRvIHNoYXJlZD8gKi8KKwkJCWJyZWFrOworCQlkZWZhdWx0Ogor
CQkJR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBz
cGVjKTsKKwkJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX2NhY2hl
X2dldF9wcm9wZXJ0eSAoR09iamVjdCAqb2JqZWN0LCBndWludCBwcm9wX2lkLAorCQkJCUdWYWx1
ZSAqdmFsdWUsIEdQYXJhbVNwZWMgKnBzcGVjKQoreworCVdlYktpdFNvdXBDYWNoZVByaXZhdGUg
KnByaXYgPSBXRUJLSVRfU09VUF9DQUNIRSAob2JqZWN0KS0+cHJpdjsKKworCXN3aXRjaCAocHJv
cF9pZCkgeworCQljYXNlIFBST1BfQ0FDSEVfRElSOgorCQkJZ192YWx1ZV9zZXRfc3RyaW5nICh2
YWx1ZSwgcHJpdi0+Y2FjaGVfZGlyKTsKKwkJCWJyZWFrOworCQljYXNlIFBST1BfQ0FDSEVfVFlQ
RToKKwkJCWdfdmFsdWVfc2V0X2VudW0gKHZhbHVlLCBwcml2LT5jYWNoZV90eXBlKTsKKwkJCWJy
ZWFrOworCQlkZWZhdWx0OgorCQkJR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChv
YmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKwkJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQK
K3dlYmtpdF9zb3VwX2NhY2hlX2NvbnN0cnVjdGVkIChHT2JqZWN0ICpvYmplY3QpCit7CisJV2Vi
S2l0U291cENhY2hlUHJpdmF0ZSAqcHJpdjsKKworCXByaXYgPSBXRUJLSVRfU09VUF9DQUNIRSAo
b2JqZWN0KS0+cHJpdjsKKworCWlmICghcHJpdi0+Y2FjaGVfZGlyKSB7CisJCS8qIFNldCBhIGRl
ZmF1bHQgY2FjaGUgZGlyLCBkaWZmZXJlbnQgZm9yIGVhY2ggdXNlciAqLworCQlwcml2LT5jYWNo
ZV9kaXIgPSBnX2J1aWxkX2ZpbGVuYW1lIChnX2dldF91c2VyX2NhY2hlX2RpciAoKSwKKwkJCQkJ
CSAgICAiaHR0cGNhY2hlIiwKKwkJCQkJCSAgICBOVUxMKTsKKwkJaWYgKCFnX2ZpbGVfdGVzdCAo
cHJpdi0+Y2FjaGVfZGlyLCBHX0ZJTEVfVEVTVF9FWElTVFMgfCBHX0ZJTEVfVEVTVF9JU19ESVIp
KQorCQkJZ19ta2Rpcl93aXRoX3BhcmVudHMgKHByaXYtPmNhY2hlX2RpciwgMDcwMCk7CisJfQor
CisJaWYgKEdfT0JKRUNUX0NMQVNTICh3ZWJraXRfc291cF9jYWNoZV9wYXJlbnRfY2xhc3MpLT5j
b25zdHJ1Y3RlZCkKKwkJR19PQkpFQ1RfQ0xBU1MgKHdlYmtpdF9zb3VwX2NhY2hlX3BhcmVudF9j
bGFzcyktPmNvbnN0cnVjdGVkIChvYmplY3QpOworfQorCisjZGVmaW5lIFdFQktJVF9TT1VQX0NB
Q0hFX1RZUEVfVFlQRSAod2Via2l0X3NvdXBfY2FjaGVfdHlwZV9nZXRfdHlwZSAoKSkKK3N0YXRp
YyBHVHlwZQord2Via2l0X3NvdXBfY2FjaGVfdHlwZV9nZXRfdHlwZSAodm9pZCkKK3sKKwlzdGF0
aWMgR1R5cGUgY2FjaGVfdHlwZSA9IDA7CisKKwlzdGF0aWMgY29uc3QgR0VudW1WYWx1ZSBjYWNo
ZV90eXBlc1tdID0geworCQl7IFdFQktJVF9TT1VQX0NBQ0hFX1NJTkdMRV9VU0VSLCAiU2luZ2xl
IHVzZXIgY2FjaGUiLCAidXNlciIgfSwKKwkJeyBXRUJLSVRfU09VUF9DQUNIRV9TSEFSRUQsICJT
aGFyZWQgY2FjaGUiLCAic2hhcmVkIiB9LAorCQl7IDAsIE5VTEwsIE5VTEwgfQorCX07CisKKwlp
ZiAoIWNhY2hlX3R5cGUpIHsKKwkJY2FjaGVfdHlwZSA9IGdfZW51bV9yZWdpc3Rlcl9zdGF0aWMg
KCJXZWJLaXRTb3VwQ2FjaGVUeXBlIiwgY2FjaGVfdHlwZXMpOworCX0KKwlyZXR1cm4gY2FjaGVf
dHlwZTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX2NhY2hlX2NsYXNzX2luaXQgKFdl
YktpdFNvdXBDYWNoZUNsYXNzICpjYWNoZV9jbGFzcykKK3sKKwlHT2JqZWN0Q2xhc3MgKmdvYmpl
Y3RfY2xhc3MgPSAoR09iamVjdENsYXNzICopY2FjaGVfY2xhc3M7CisKKwlnb2JqZWN0X2NsYXNz
LT5maW5hbGl6ZSA9IHdlYmtpdF9zb3VwX2NhY2hlX2ZpbmFsaXplOworCWdvYmplY3RfY2xhc3Mt
PmNvbnN0cnVjdGVkID0gd2Via2l0X3NvdXBfY2FjaGVfY29uc3RydWN0ZWQ7CisJZ29iamVjdF9j
bGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X3NvdXBfY2FjaGVfc2V0X3Byb3BlcnR5OworCWdv
YmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF9zb3VwX2NhY2hlX2dldF9wcm9wZXJ0
eTsKKworCWNhY2hlX2NsYXNzLT5nZXRfY2FjaGVhYmlsaXR5ID0gZ2V0X2NhY2hlYWJpbGl0eTsK
KworCWdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1Bf
Q0FDSEVfRElSLAorCQkJCQkgZ19wYXJhbV9zcGVjX3N0cmluZyAoImNhY2hlLWRpciIsCisJCQkJ
CQkJICAgICAgIkNhY2hlIGRpcmVjdG9yeSIsCisJCQkJCQkJICAgICAgIlRoZSBkaXJlY3Rvcnkg
dG8gc3RvcmUgdGhlIGNhY2hlIGZpbGVzIiwKKwkJCQkJCQkgICAgICBOVUxMLAorCQkJCQkJCSAg
ICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpOworCisJZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9DQUNIRV9U
WVBFLAorCQkJCQkgZ19wYXJhbV9zcGVjX2VudW0gKCJjYWNoZS10eXBlIiwKKwkJCQkJCQkgICAg
IkNhY2hlIHR5cGUiLAorCQkJCQkJCSAgICAiV2hldGhlciB0aGUgY2FjaGUgaXMgcHJpdmF0ZSBv
ciBzaGFyZWQiLAorCQkJCQkJCSAgICBXRUJLSVRfU09VUF9DQUNIRV9UWVBFX1RZUEUsCisJCQkJ
CQkJICAgIFdFQktJVF9TT1VQX0NBQ0hFX1NJTkdMRV9VU0VSLAorCQkJCQkJCSAgICBHX1BBUkFN
X1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKTsKKworCWdfdHlwZV9jbGFzc19h
ZGRfcHJpdmF0ZSAoY2FjaGVfY2xhc3MsIHNpemVvZiAoV2ViS2l0U291cENhY2hlUHJpdmF0ZSkp
OworfQorCisvKioKKyAqIHdlYmtpdF9zb3VwX2NhY2hlX25ldzoKKyAqIEBjYWNoZV9kaXI6IHRo
ZSBkaXJlY3RvcnkgdG8gc3RvcmUgdGhlIGNhY2hlZCBkYXRhLCBvciAlTlVMTCB0byB1c2UgdGhl
IGRlZmF1bHQgb25lCisgKiBAY2FjaGVfdHlwZTogdGhlICNXZWJLaXRTb3VwQ2FjaGVUeXBlIG9m
IHRoZSBjYWNoZQorICoKKyAqIENyZWF0ZXMgYSBuZXcgI1dlYktpdFNvdXBDYWNoZS4KKyAqCisg
KiBSZXR1cm5zOiBhIG5ldyAjV2ViS2l0U291cENhY2hlCisgKgorICogU2luY2U6IDIuMjgKKyAq
Ki8KK1dlYktpdFNvdXBDYWNoZSAqCit3ZWJraXRfc291cF9jYWNoZV9uZXcgKGNvbnN0IGNoYXIg
KmNhY2hlX2RpciwgV2ViS2l0U291cENhY2hlVHlwZSBjYWNoZV90eXBlKQoreworCXJldHVybiBn
X29iamVjdF9uZXcgKFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUsCisJCQkgICAgICJjYWNoZS1kaXIi
LCBjYWNoZV9kaXIsCisJCQkgICAgICJjYWNoZS10eXBlIiwgY2FjaGVfdHlwZSwKKwkJCSAgICAg
TlVMTCk7Cit9CisKKy8qKgorICogd2Via2l0X3NvdXBfY2FjaGVfaGFzX3Jlc3BvbnNlOgorICog
QGNhY2hlOiBhICNXZWJLaXRTb3VwQ2FjaGUKKyAqIEBtc2c6IGEgI1NvdXBNZXNzYWdlCisgKgor
ICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHdoZXRoZXIgdGhlIEBjYWNoZSBvYmplY3QgaGFz
IGEgcHJvcGVyCisgKiByZXNwb25zZSBmb3IgdGhlIHJlcXVlc3QgQG1zZyBnaXZlbiB0aGUgZmxh
Z3MgYm90aCBpbiB0aGUgcmVxdWVzdAorICogYW5kIHRoZSBjYWNoZWQgcmVwbHkgYW5kIHRoZSB0
aW1lIGVsbGFwc2VkIHNpbmNlIGl0IHdhcyBjYWNoZWQuCisgKgorICogUmV0dXJuczogd2hldGhl
ciBvciBub3QgdGhlIEBjYWNoZSBoYXMgYSB2YWxpZCByZXNwb25zZSBmb3IgQG1zZworICoqLwor
V2ViS2l0U291cENhY2hlUmVzcG9uc2UKK3dlYmtpdF9zb3VwX2NhY2hlX2hhc19yZXNwb25zZSAo
V2ViS2l0U291cENhY2hlICpjYWNoZSwgU291cE1lc3NhZ2UgKm1zZykKK3sKKwljaGFyICprZXk7
CisJV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5OworCWNvbnN0IGNoYXIgKmNhY2hlX2NvbnRy
b2w7CisJR0hhc2hUYWJsZSAqaGFzaDsKKwlncG9pbnRlciB2YWx1ZTsKKwlnYm9vbGVhbiBtdXN0
X3JldmFsaWRhdGU7CisJaW50IG1heF9hZ2UsIG1heF9zdGFsZSwgbWluX2ZyZXNoOworCisJa2V5
ID0gc291cF9tZXNzYWdlX2dldF9jYWNoZV9rZXkgKG1zZyk7CisJZW50cnkgPSBnX2hhc2hfdGFi
bGVfbG9va3VwIChjYWNoZS0+cHJpdi0+Y2FjaGUsIGtleSk7CisKKwkvKiAxLiBUaGUgcHJlc2Vu
dGVkIFJlcXVlc3QtVVJJIGFuZCB0aGF0IG9mIHN0b3JlZCByZXNwb25zZQorCSAqIG1hdGNoCisJ
ICovCisJaWYgKCFlbnRyeSkKKwkJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX1NU
QUxFOworCisJLyogSW5jcmVhc2UgaGl0IGNvdW50ICovCisJZW50cnktPmhpdHMrKzsKKworCWlm
IChlbnRyeS0+ZGlydHkgfHwgZW50cnktPmJlaW5nX3ZhbGlkYXRlZCkKKwkJcmV0dXJuIFdFQktJ
VF9TT1VQX0NBQ0hFX1JFU1BPTlNFX1NUQUxFOworCisJLyogMi4gVGhlIHJlcXVlc3QgbWV0aG9k
IGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RvcmVkIHJlc3BvbnNlCisJICogIGFsbG93cyBpdCB0byBi
ZSB1c2VkIGZvciB0aGUgcHJlc2VudGVkIHJlcXVlc3QKKwkgKi8KKworCS8qIEluIHByYWN0aWNl
IHRoaXMgbWVhbnMgd2Ugb25seSByZXR1cm4gb3VyIHJlc291cmNlIGZvciBHRVQsCisJICogY2Fj
aGVhYmlsaXR5IGZvciBvdGhlciBtZXRob2RzIGlzIGEgVE9ETyBpbiB0aGUgUkZDCisJICogKFRP
RE86IGFsdGhvdWdoIHdlIGNvdWxkIHJldHVybiB0aGUgaGVhZGVycyBmb3IgSEVBRAorCSAqIHBy
b2JhYmx5KS4KKwkgKi8KKwlpZiAobXNnLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKQorCQly
ZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfU1RBTEU7CisKKwkvKiAzLiBTZWxlY3Rp
bmcgcmVxdWVzdC1oZWFkZXJzIG5vbWluYXRlZCBieSB0aGUgc3RvcmVkCisJICogcmVzcG9uc2Ug
KGlmIGFueSkgbWF0Y2ggdGhvc2UgcHJlc2VudGVkLgorCSAqLworCisJLyogVE9ETyAqLworCisJ
LyogNC4gVGhlIHByZXNlbnRlZCByZXF1ZXN0IGFuZCBzdG9yZWQgcmVzcG9uc2UgYXJlIGZyZWUg
ZnJvbQorCSAqIGRpcmVjdGl2ZXMgdGhhdCB3b3VsZCBwcmV2ZW50IGl0cyB1c2UuCisJICovCisK
KwltdXN0X3JldmFsaWRhdGUgPSBGQUxTRTsKKwltYXhfYWdlID0gbWF4X3N0YWxlID0gbWluX2Zy
ZXNoID0gLTE7CisKKwljYWNoZV9jb250cm9sID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0ICht
c2ctPnJlcXVlc3RfaGVhZGVycywgIkNhY2hlLUNvbnRyb2wiKTsKKwlpZiAoY2FjaGVfY29udHJv
bCkgeworCQloYXNoID0gc291cF9oZWFkZXJfcGFyc2VfcGFyYW1fbGlzdCAoY2FjaGVfY29udHJv
bCk7CisKKwkJaWYgKGdfaGFzaF90YWJsZV9sb29rdXBfZXh0ZW5kZWQgKGhhc2gsICJuby1zdG9y
ZSIsIE5VTEwsIE5VTEwpKSB7CisJCQlnX2hhc2hfdGFibGVfZGVzdHJveSAoaGFzaCk7CisJCQly
ZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfU1RBTEU7CisJCX0KKworCQlpZiAoZ19o
YXNoX3RhYmxlX2xvb2t1cF9leHRlbmRlZCAoaGFzaCwgIm5vLWNhY2hlIiwgTlVMTCwgTlVMTCkp
IHsKKwkJCWVudHJ5LT5tdXN0X3JldmFsaWRhdGUgPSBUUlVFOworCQl9CisKKwkJaWYgKGdfaGFz
aF90YWJsZV9sb29rdXBfZXh0ZW5kZWQgKGhhc2gsICJtYXgtYWdlIiwgTlVMTCwgJnZhbHVlKSkg
eworCQkJbWF4X2FnZSA9IChpbnQpTUlOIChnX2FzY2lpX3N0cnRvbGwgKHZhbHVlLCBOVUxMLCAx
MCksIEdfTUFYSU5UMzIpOworCQl9CisKKwkJLyogbWF4LXN0YWxlIGNhbiBoYXZlIG5vIHZhbHVl
IHNldCwgd2UgbmVlZCB0byB1c2UgX2V4dGVuZGVkICovCisJCWlmIChnX2hhc2hfdGFibGVfbG9v
a3VwX2V4dGVuZGVkIChoYXNoLCAibWF4LXN0YWxlIiwgTlVMTCwgJnZhbHVlKSkgeworCQkJaWYg
KHZhbHVlKQorCQkJCW1heF9zdGFsZSA9IChpbnQpTUlOIChnX2FzY2lpX3N0cnRvbGwgKHZhbHVl
LCBOVUxMLCAxMCksIEdfTUFYSU5UMzIpOworCQkJZWxzZQorCQkJCW1heF9zdGFsZSA9IEdfTUFY
SU5UMzI7CisJCX0KKworCQl2YWx1ZSA9IGdfaGFzaF90YWJsZV9sb29rdXAgKGhhc2gsICJtaW4t
ZnJlc2giKTsKKwkJaWYgKHZhbHVlKQorCQkJbWluX2ZyZXNoID0gKGludClNSU4gKGdfYXNjaWlf
c3RydG9sbCAodmFsdWUsIE5VTEwsIDEwKSwgR19NQVhJTlQzMik7CisKKwkJZ19oYXNoX3RhYmxl
X2Rlc3Ryb3kgKGhhc2gpOworCisJCWlmIChtYXhfYWdlICE9IC0xKSB7CisJCQlndWludCBjdXJy
ZW50X2FnZSA9IHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2dldF9jdXJyZW50X2FnZSAoZW50cnkp
OworCisJCQkvKiBJZiB3ZSBhcmUgb3ZlciBtYXgtYWdlIGFuZCBtYXgtc3RhbGUgaXMgbm90CisJ
CQkgICBzZXQsIGRvIG5vdCB1c2UgdGhlIHZhbHVlIGZyb20gdGhlIGNhY2hlCisJCQkgICB3aXRo
b3V0IHZhbGlkYXRpb24gKi8KKwkJCWlmIChtYXhfYWdlIDw9IGN1cnJlbnRfYWdlICYmIG1heF9z
dGFsZSA9PSAtMSkKKwkJCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfTkVFRFNf
VkFMSURBVElPTjsKKwkJfQorCX0KKworCS8qIDUuIFRoZSBzdG9yZWQgcmVzcG9uc2UgaXMgZWl0
aGVyOiBmcmVzaCwgYWxsb3dlZCB0byBiZQorCSAqIHNlcnZlZCBzdGFsZSBvciBzdWNjZXNmdWxs
eSB2YWxpZGF0ZWQKKwkgKi8KKwkvKiBUT0RPIGNvbnNpZGVyIGFsc28gcHJveHktcmV2YWxpZGF0
ZSAmIHMtbWF4YWdlICovCisJaWYgKGVudHJ5LT5tdXN0X3JldmFsaWRhdGUpCisJCXJldHVybiBX
RUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9ORUVEU19WQUxJREFUSU9OOworCisJaWYgKCF3ZWJr
aXRfc291cF9jYWNoZV9lbnRyeV9pc19mcmVzaF9lbm91Z2ggKGVudHJ5LCBtaW5fZnJlc2gpKSB7
CisJCS8qIE5vdCBmcmVzaCwgY2FuIGl0IGJlIHNlcnZlZCBzdGFsZT8gKi8KKwkJaWYgKG1heF9z
dGFsZSAhPSAtMSkgeworCQkJLyogR19NQVhJTlQzMiBtZWFucyB3ZSBhY2NlcHQgYW55IHN0YWxl
bmVzcyAqLworCQkJaWYgKG1heF9zdGFsZSA9PSBHX01BWElOVDMyKQorCQkJCXJldHVybiBXRUJL
SVRfU09VUF9DQUNIRV9SRVNQT05TRV9GUkVTSDsKKworCQkJaWYgKCh3ZWJraXRfc291cF9jYWNo
ZV9lbnRyeV9nZXRfY3VycmVudF9hZ2UgKGVudHJ5KSAtIGVudHJ5LT5mcmVzaG5lc3NfbGlmZXRp
bWUpIDw9IG1heF9zdGFsZSkKKwkJCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0Vf
RlJFU0g7CisJCX0KKworCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfTkVFRFNf
VkFMSURBVElPTjsKKwl9CisKKwlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfRlJF
U0g7Cit9CisKKy8qKgorICogd2Via2l0X3NvdXBfY2FjaGVfZ2V0X2NhY2hlYWJpbGl0eToKKyAq
IEBjYWNoZTogYSAjV2ViS2l0U291cENhY2hlCisgKiBAbXNnOiBhICNTb3VwTWVzc2FnZQorICoK
KyAqIENhbGN1bGF0ZXMgd2hldGhlciB0aGUgQG1zZyBjYW4gYmUgY2FjaGVkIG9yIG5vdC4KKyAq
CisgKiBSZXR1cm5zOiBhICNXZWJLaXRTb3VwQ2FjaGVhYmlsaXR5IHZhbHVlIGluZGljYXRpbmcg
d2hldGhlciB0aGUgQG1zZyBjYW4gYmUgY2FjaGVkIG9yIG5vdC4KKyAqKi8KK1dlYktpdFNvdXBD
YWNoZWFiaWxpdHkKK3dlYmtpdF9zb3VwX2NhY2hlX2dldF9jYWNoZWFiaWxpdHkgKFdlYktpdFNv
dXBDYWNoZSAqY2FjaGUsIFNvdXBNZXNzYWdlICptc2cpCit7CisJZ19yZXR1cm5fdmFsX2lmX2Zh
aWwgKFdFQktJVF9JU19TT1VQX0NBQ0hFIChjYWNoZSksIFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FD
SEVBQkxFKTsKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoU09VUF9JU19NRVNTQUdFIChtc2cpLCBX
RUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRSk7CisKKwlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FD
SEVfR0VUX0NMQVNTIChjYWNoZSktPmdldF9jYWNoZWFiaWxpdHkgKGNhY2hlLCBtc2cpOworfQor
CitzdGF0aWMgZ2Jvb2xlYW4KK2ZvcmNlX2ZsdXNoX3RpbWVvdXQgKGdwb2ludGVyIGRhdGEpCit7
CisJZ2Jvb2xlYW4gKmZvcmNlZCA9IChnYm9vbGVhbiAqKWRhdGE7CisJKmZvcmNlZCA9IFRSVUU7
CisKKwlyZXR1cm4gRkFMU0U7Cit9CisKKy8qKgorICogd2Via2l0X3NvdXBfY2FjaGVfZmx1c2g6
CisgKiBAY2FjaGU6IGEgI1dlYktpdFNvdXBDYWNoZQorICogQHNlc3Npb246IHRoZSAjU291cFNl
c3Npb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBAY2FjaGUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdp
bGwgZm9yY2UgYWxsIHBlbmRpbmcgd3JpdGVzIGluIHRoZSBAY2FjaGUgdG8gYmUKKyAqIGNvbW1p
dHRlZCB0byBkaXNrLiBGb3IgZG9pbmcgc28gaXQgd2lsbCBpdGVyYXRlIHRoZSAjR01haW5Db250
ZXh0CisgKiBhc3NvY2lhdGVkIHdpdGggdGhlIEBzZXNzaW9uICh3aGljaCBjYW4gYmUgdGhlIGRl
ZmF1bHQgb25lKSBhcyBsb25nCisgKiBhcyBuZWVkZWQuCisgKiovCit2b2lkCit3ZWJraXRfc291
cF9jYWNoZV9mbHVzaCAoV2ViS2l0U291cENhY2hlICpjYWNoZSkKK3sKKwlHTWFpbkNvbnRleHQg
KmFzeW5jX2NvbnRleHQ7CisJU291cFNlc3Npb24gKnNlc3Npb247CisJZ3VpbnQgdGltZW91dF9p
ZDsKKwlnYm9vbGVhbiBmb3JjZWQgPSBGQUxTRTsKKworCWdfcmV0dXJuX2lmX2ZhaWwgKFdFQktJ
VF9JU19TT1VQX0NBQ0hFIChjYWNoZSkpOworCisJc2Vzc2lvbiA9IGNhY2hlLT5wcml2LT5zZXNz
aW9uOworCWdfcmV0dXJuX2lmX2ZhaWwgKFNPVVBfSVNfU0VTU0lPTiAoc2Vzc2lvbikpOworCWFz
eW5jX2NvbnRleHQgPSBzb3VwX3Nlc3Npb25fZ2V0X2FzeW5jX2NvbnRleHQgKHNlc3Npb24pOwor
CisJLyogV2UgZ2l2ZSBjYWNoZSAxMCBzZWNzIHRvIGZpbmlzaCAqLworCXRpbWVvdXRfaWQgPSBn
X3RpbWVvdXRfYWRkICgxMDAwMCwgZm9yY2VfZmx1c2hfdGltZW91dCwgJmZvcmNlZCk7CisKKwl3
aGlsZSAoIWZvcmNlZCAmJiBjYWNoZS0+cHJpdi0+bl9wZW5kaW5nID4gMCkKKwkJZ19tYWluX2Nv
bnRleHRfaXRlcmF0aW9uIChhc3luY19jb250ZXh0LCBGQUxTRSk7CisKKwlpZiAoIWZvcmNlZCkK
KwkJZ19zb3VyY2VfcmVtb3ZlICh0aW1lb3V0X2lkKTsKKwllbHNlCisJCWdfd2FybmluZyAoIkNh
Y2hlIGZsdXNoIGZpbmlzaGVkIGRlc3BpdGUgJWQgcGVuZGluZyByZXF1ZXN0cyIsIGNhY2hlLT5w
cml2LT5uX3BlbmRpbmcpOworfQorCitzdGF0aWMgdm9pZAorcmVtb3ZlX2NhY2hlX2l0ZW0gKGdw
b2ludGVyIGtleSwKKwkJICAgZ3BvaW50ZXIgdmFsdWUsCisJCSAgIFdlYktpdFNvdXBDYWNoZSAq
Y2FjaGUpCit7CisJV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5ID0gZ19oYXNoX3RhYmxlX2xv
b2t1cCAoY2FjaGUtPnByaXYtPmNhY2hlLCAoY29uc3QgZ2NoYXIgKilrZXkpOworCXdlYmtpdF9z
b3VwX2NhY2hlX2VudHJ5X2RlbGV0ZSAoY2FjaGUsIGVudHJ5KTsKK30KKworLyoqCisgKiB3ZWJr
aXRfc291cF9jYWNoZV9jbGVhcjoKKyAqIEBjYWNoZTogYSAjV2ViS2l0U291cENhY2hlCisgKgor
ICogV2lsbCByZW1vdmUgYWxsIGVudHJpZXMgaW4gdGhlIEBjYWNoZSBwbHVzIGFsbCB0aGUgY2Fj
aGUgZmlsZXMKKyAqIGFzc29jaWF0ZWQgd2l0aCB0aGVtLgorICoqLwordm9pZAord2Via2l0X3Nv
dXBfY2FjaGVfY2xlYXIgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUpCit7CisJR0hhc2hUYWJsZSAq
aGFzaDsKKworCWdfcmV0dXJuX2lmX2ZhaWwgKFdFQktJVF9JU19TT1VQX0NBQ0hFIChjYWNoZSkp
OworCisJaGFzaCA9IGNhY2hlLT5wcml2LT5jYWNoZTsKKwlnX3JldHVybl9pZl9mYWlsIChoYXNo
KTsKKworCWdfaGFzaF90YWJsZV9mb3JlYWNoIChoYXNoLCAoR0hGdW5jKXJlbW92ZV9jYWNoZV9p
dGVtLCBjYWNoZSk7Cit9CisKK1NvdXBNZXNzYWdlICoKK3dlYmtpdF9zb3VwX2NhY2hlX2dlbmVy
YXRlX2NvbmRpdGlvbmFsX3JlcXVlc3QgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsIFNvdXBNZXNz
YWdlICpvcmlnaW5hbCkKK3sKKwlTb3VwTWVzc2FnZSAqbXNnOworCVNvdXBVUkkgKnVyaTsKKwlX
ZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnk7CisJY2hhciAqa2V5OworCWNvbnN0IGNoYXIgKnZh
bHVlOworCisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFdFQktJVF9JU19TT1VQX0NBQ0hFIChjYWNo
ZSksIE5VTEwpOworCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChTT1VQX0lTX01FU1NBR0UgKG9yaWdp
bmFsKSwgTlVMTCk7CisKKwkvKiBGaXJzdCBjb3B5IHRoZSBkYXRhIHdlIG5lZWQgZnJvbSB0aGUg
b3JpZ2luYWwgbWVzc2FnZSAqLworCXVyaSA9IHNvdXBfbWVzc2FnZV9nZXRfdXJpIChvcmlnaW5h
bCk7CisJbXNnID0gc291cF9tZXNzYWdlX25ld19mcm9tX3VyaSAob3JpZ2luYWwtPm1ldGhvZCwg
dXJpKTsKKworCXNvdXBfbWVzc2FnZV9oZWFkZXJzX2ZvcmVhY2ggKG9yaWdpbmFsLT5yZXF1ZXN0
X2hlYWRlcnMsCisJCQkJICAgICAgKFNvdXBNZXNzYWdlSGVhZGVyc0ZvcmVhY2hGdW5jKWNvcHlf
aGVhZGVycywKKwkJCQkgICAgICBtc2ctPnJlcXVlc3RfaGVhZGVycyk7CisKKwkvKiBOb3cgYWRk
IHRoZSB2YWxpZGF0b3IgZW50cmllcyBpbiB0aGUgaGVhZGVyIGZyb20gdGhlIGNhY2hlZAorCSAg
IGRhdGEgKi8KKwlrZXkgPSBzb3VwX21lc3NhZ2VfZ2V0X2NhY2hlX2tleSAob3JpZ2luYWwpOwor
CWVudHJ5ID0gZ19oYXNoX3RhYmxlX2xvb2t1cCAoY2FjaGUtPnByaXYtPmNhY2hlLCBrZXkpOwor
CWdfZnJlZSAoa2V5KTsKKworCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChlbnRyeSwgTlVMTCk7CisK
KwllbnRyeS0+YmVpbmdfdmFsaWRhdGVkID0gVFJVRTsKKworCXZhbHVlID0gc291cF9tZXNzYWdl
X2hlYWRlcnNfZ2V0IChlbnRyeS0+aGVhZGVycywgIkxhc3QtTW9kaWZpZWQiKTsKKwlpZiAodmFs
dWUpCisJCXNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZCAobXNnLT5yZXF1ZXN0X2hlYWRlcnMs
CisJCQkJCSAgICAgIklmLU1vZGlmaWVkLVNpbmNlIiwKKwkJCQkJICAgICB2YWx1ZSk7CisJdmFs
dWUgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKGVudHJ5LT5oZWFkZXJzLCAiRVRhZyIpOwor
CWlmICh2YWx1ZSkKKwkJc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kIChtc2ctPnJlcXVlc3Rf
aGVhZGVycywKKwkJCQkJICAgICAiSWYtTm9uZS1NYXRjaCIsCisJCQkJCSAgICAgdmFsdWUpOwor
CXJldHVybiBtc2c7Cit9CisKKyNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FDSEVfRklMRSAic291cC5j
YWNoZSIKKworI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9IRUFERVJTX0ZPUk1BVCAie3NzfSIK
KyNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FDSEVfUEhFQURFUlNfRk9STUFUICIoc3NidXV1dXVhIiBX
RUJLSVRfU09VUF9DQUNIRV9IRUFERVJTX0ZPUk1BVCAiKSIKKyNkZWZpbmUgV0VCS0lUX1NPVVBf
Q0FDSEVfRU5UUklFU19GT1JNQVQgImEiIFdFQktJVF9TT1VQX0NBQ0hFX1BIRUFERVJTX0ZPUk1B
VAorCisvKiBCYXNpY2FsbHkgdGhlIHNhbWUgZm9ybWF0IHRoYW4gYWJvdmUgZXhjZXB0IHRoYXQg
c29tZSBzdHJpbmdzIGFyZQorICAgcHJlcGVuZGVkIHdpdGggJi4gVGhpcyB3YXkgdGhlIEdWYXJp
YW50IHJldHVybnMgYSBwb2ludGVyIHRvIHRoZQorICAgZGF0YSBpbnN0ZWFkIG9mIGR1cGxpY2F0
aW5nIHRoZSBzdHJpbmcgKi8KKyNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FDSEVfREVDT0RFX0hFQURF
UlNfRk9STUFUICJ7JnMmc30iCisKK3N0YXRpYyB2b2lkCitwYWNrX2VudHJ5IChncG9pbnRlciBr
ZXksCisJICAgIGdwb2ludGVyIHZhbHVlLAorCSAgICBncG9pbnRlciBkYXRhKQoreworCVdlYktp
dFNvdXBDYWNoZUVudHJ5ICplbnRyeSA9IChXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqKXZhbHVlOwor
CVNvdXBNZXNzYWdlSGVhZGVyc0l0ZXIgaXRlcjsKKwljb25zdCBnY2hhciAqaGVhZGVyX2tleSwg
KmhlYWRlcl92YWx1ZTsKKwlHVmFyaWFudEJ1aWxkZXIgKmhlYWRlcnNfYnVpbGRlcjsKKwlHVmFy
aWFudEJ1aWxkZXIgKmVudHJpZXNfYnVpbGRlciA9IChHVmFyaWFudEJ1aWxkZXIgKilkYXRhOwor
CisJLyogRG8gbm90IHN0b3JlIG5vbi1jb25zb2xpZGF0ZWQgZW50cmllcyAqLworCWlmIChlbnRy
eS0+ZGlydHkgfHwgZW50cnktPndyaXRpbmcgfHwgIWVudHJ5LT5rZXkpCisJCXJldHVybjsKKwor
CS8qIFBhY2sgaGVhZGVycyAqLworCWhlYWRlcnNfYnVpbGRlciA9IGdfdmFyaWFudF9idWlsZGVy
X25ldyAoR19WQVJJQU5UX1RZUEVfQVJSQVkpOworCXNvdXBfbWVzc2FnZV9oZWFkZXJzX2l0ZXJf
aW5pdCAoJml0ZXIsIGVudHJ5LT5oZWFkZXJzKTsKKwl3aGlsZSAoc291cF9tZXNzYWdlX2hlYWRl
cnNfaXRlcl9uZXh0ICgmaXRlciwgJmhlYWRlcl9rZXksICZoZWFkZXJfdmFsdWUpKQorCQlnX3Zh
cmlhbnRfYnVpbGRlcl9hZGQgKGhlYWRlcnNfYnVpbGRlciwgV0VCS0lUX1NPVVBfQ0FDSEVfSEVB
REVSU19GT1JNQVQsIGhlYWRlcl9rZXksIGhlYWRlcl92YWx1ZSk7CisKKwkvKiBFbnRyeSBkYXRh
ICovCisJZ192YXJpYW50X2J1aWxkZXJfYWRkIChlbnRyaWVzX2J1aWxkZXIsIFdFQktJVF9TT1VQ
X0NBQ0hFX1BIRUFERVJTX0ZPUk1BVCwKKwkJCSAgICAgICBlbnRyeS0+a2V5LCBlbnRyeS0+Zmls
ZW5hbWUsIGVudHJ5LT5tdXN0X3JldmFsaWRhdGUsCisJCQkgICAgICAgZW50cnktPmZyZXNobmVz
c19saWZldGltZSwgZW50cnktPmNvcnJlY3RlZF9pbml0aWFsX2FnZSwKKwkJCSAgICAgICBlbnRy
eS0+cmVzcG9uc2VfdGltZSwgZW50cnktPmhpdHMsIGVudHJ5LT5sZW5ndGgsIGhlYWRlcnNfYnVp
bGRlcik7CisKKwlnX3ZhcmlhbnRfYnVpbGRlcl91bnJlZiAoaGVhZGVyc19idWlsZGVyKTsKK30K
Kwordm9pZAord2Via2l0X3NvdXBfY2FjaGVfZHVtcCAoV2ViS2l0U291cENhY2hlICpjYWNoZSkK
K3sKKwlXZWJLaXRTb3VwQ2FjaGVQcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfQ0FDSEVfR0VU
X1BSSVZBVEUgKGNhY2hlKTsKKwlnY2hhciAqZmlsZW5hbWU7CisJR1ZhcmlhbnRCdWlsZGVyICpl
bnRyaWVzX2J1aWxkZXI7CisJR1ZhcmlhbnQgKmNhY2hlX3ZhcmlhbnQ7CisKKwkvKiBDcmVhdGUg
dGhlIGJ1aWxkZXIgYW5kIGl0ZXJhdGUgb3ZlciBhbGwgZW50cmllcyAqLworCWVudHJpZXNfYnVp
bGRlciA9IGdfdmFyaWFudF9idWlsZGVyX25ldyAoR19WQVJJQU5UX1RZUEVfQVJSQVkpOworCWdf
aGFzaF90YWJsZV9mb3JlYWNoIChjYWNoZS0+cHJpdi0+Y2FjaGUsIChHSEZ1bmMpcGFja19lbnRy
eSwgZW50cmllc19idWlsZGVyKTsKKworCS8qIFNlcmlhbGl6ZSBhbmQgZHVtcCAqLworCWNhY2hl
X3ZhcmlhbnQgPSBnX3ZhcmlhbnRfbmV3IChXRUJLSVRfU09VUF9DQUNIRV9FTlRSSUVTX0ZPUk1B
VCwgZW50cmllc19idWlsZGVyKTsKKwlnX3ZhcmlhbnRfYnVpbGRlcl91bnJlZiAoZW50cmllc19i
dWlsZGVyKTsKKworCWZpbGVuYW1lID0gZ19idWlsZF9maWxlbmFtZSAocHJpdi0+Y2FjaGVfZGly
LCBXRUJLSVRfU09VUF9DQUNIRV9GSUxFLCBOVUxMKTsKKwlnX2ZpbGVfc2V0X2NvbnRlbnRzIChm
aWxlbmFtZSwgKGNvbnN0IGdjaGFyICopZ192YXJpYW50X2dldF9kYXRhIChjYWNoZV92YXJpYW50
KSwKKwkJCSAgICAgZ192YXJpYW50X2dldF9zaXplIChjYWNoZV92YXJpYW50KSwgTlVMTCk7CisJ
Z19mcmVlIChmaWxlbmFtZSk7CisJZ192YXJpYW50X3VucmVmIChjYWNoZV92YXJpYW50KTsKK30K
Kwordm9pZAord2Via2l0X3NvdXBfY2FjaGVfbG9hZCAoV2ViS2l0U291cENhY2hlICpjYWNoZSkK
K3sKKwlnY2hhciAqZmlsZW5hbWUgPSBOVUxMLCAqY29udGVudHMgPSBOVUxMOworCUdWYXJpYW50
ICpjYWNoZV92YXJpYW50OworCUdWYXJpYW50SXRlciAqZW50cmllc19pdGVyLCAqaGVhZGVyc19p
dGVyOworCUdWYXJpYW50VHlwZSAqdmFyaWFudF9mb3JtYXQ7CisJZ3NpemUgbGVuZ3RoOworCVdl
YktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeTsKKwlXZWJLaXRTb3VwQ2FjaGVQcml2YXRlICpwcml2
ID0gY2FjaGUtPnByaXY7CisKKwlmaWxlbmFtZSA9IGdfYnVpbGRfZmlsZW5hbWUgKHByaXYtPmNh
Y2hlX2RpciwgV0VCS0lUX1NPVVBfQ0FDSEVfRklMRSwgTlVMTCk7CisJaWYgKCFnX2ZpbGVfZ2V0
X2NvbnRlbnRzIChmaWxlbmFtZSwgJmNvbnRlbnRzLCAmbGVuZ3RoLCBOVUxMKSkgeworCQlnX2Zy
ZWUgKGZpbGVuYW1lKTsKKwkJcmV0dXJuOworCX0KKwlnX2ZyZWUgKGZpbGVuYW1lKTsKKworCXZh
cmlhbnRfZm9ybWF0ID0gZ192YXJpYW50X3R5cGVfbmV3IChXRUJLSVRfU09VUF9DQUNIRV9FTlRS
SUVTX0ZPUk1BVCk7CisJY2FjaGVfdmFyaWFudCA9IGdfdmFyaWFudF9uZXdfZnJvbV9kYXRhICh2
YXJpYW50X2Zvcm1hdCwgKGNvbnN0IGdjaGFyICopY29udGVudHMsIGxlbmd0aCwgRkFMU0UsIE5V
TEwsIE5VTEwpOworCWdfdmFyaWFudF90eXBlX2ZyZWUgKHZhcmlhbnRfZm9ybWF0KTsKKworCWdf
dmFyaWFudF9nZXQgKGNhY2hlX3ZhcmlhbnQsIFdFQktJVF9TT1VQX0NBQ0hFX0VOVFJJRVNfRk9S
TUFULCAmZW50cmllc19pdGVyKTsKKwllbnRyeSA9IGdfc2xpY2VfbmV3MCAoV2ViS2l0U291cENh
Y2hlRW50cnkpOworCisJd2hpbGUgKGdfdmFyaWFudF9pdGVyX2xvb3AgKGVudHJpZXNfaXRlciwg
V0VCS0lUX1NPVVBfQ0FDSEVfUEhFQURFUlNfRk9STUFULAorCQkJCSAgICAmZW50cnktPmtleSwg
JmVudHJ5LT5maWxlbmFtZSwgJmVudHJ5LT5tdXN0X3JldmFsaWRhdGUsCisJCQkJICAgICZlbnRy
eS0+ZnJlc2huZXNzX2xpZmV0aW1lLCAmZW50cnktPmNvcnJlY3RlZF9pbml0aWFsX2FnZSwKKwkJ
CQkgICAgJmVudHJ5LT5yZXNwb25zZV90aW1lLCAmZW50cnktPmhpdHMsICZlbnRyeS0+bGVuZ3Ro
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhlYWRlcnNfaXRlcikpIHsK
KwkJY29uc3QgZ2NoYXIgKmhlYWRlcl9rZXksICpoZWFkZXJfdmFsdWU7CisKKwkJLyogU291cE1l
c3NhZ2UgSGVhZGVycyAqLworCQllbnRyeS0+aGVhZGVycyA9IHNvdXBfbWVzc2FnZV9oZWFkZXJz
X25ldyAoU09VUF9NRVNTQUdFX0hFQURFUlNfUkVTUE9OU0UpOworCQl3aGlsZSAoZ192YXJpYW50
X2l0ZXJfbG9vcCAoaGVhZGVyc19pdGVyLCBXRUJLSVRfU09VUF9DQUNIRV9ERUNPREVfSEVBREVS
U19GT1JNQVQsICZoZWFkZXJfa2V5LCAmaGVhZGVyX3ZhbHVlKSkKKwkJCXNvdXBfbWVzc2FnZV9o
ZWFkZXJzX2FwcGVuZCAoZW50cnktPmhlYWRlcnMsIGhlYWRlcl9rZXksIGhlYWRlcl92YWx1ZSk7
CisKKwkJLyogSW5zZXJ0IGluIGNhY2hlICovCisJCWlmICghd2Via2l0X3NvdXBfY2FjaGVfZW50
cnlfaW5zZXJ0X2J5X2tleSAoY2FjaGUsIChjb25zdCBnY2hhciAqKWVudHJ5LT5rZXksIGVudHJ5
KSkKKwkJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUgKGVudHJ5KTsKKworCQkvKiBOZXcg
ZW50cnkgZm9yIHRoZSBuZXh0IGl0ZXJhdGlvbi4gVGhpcyBjcmVhdGVzIGFuCisJCSAgIGV4dHJh
IG9iamVjdCB0aGUgbGFzdCBpdGVyYXRpb24gYnV0IGl0J3Mgd29ydGggaXQKKwkJICAgYXMgd2Ug
c2F2ZSBzZXZlcmFsIGlmJ3MgKi8KKwkJZW50cnkgPSBnX3NsaWNlX25ldzAgKFdlYktpdFNvdXBD
YWNoZUVudHJ5KTsKKwl9CisJLyogUmVtb3ZlIGxhc3QgY3JlYXRlZCBlbnRyeSAqLworCWdfc2xp
Y2VfZnJlZSAoV2ViS2l0U291cENhY2hlRW50cnksIGVudHJ5KTsKKworCS8qIGZyZWVzICovCisJ
Z192YXJpYW50X2l0ZXJfZnJlZSAoZW50cmllc19pdGVyKTsKKwlnX3ZhcmlhbnRfdW5yZWYgKGNh
Y2hlX3ZhcmlhbnQpOworfQorCit2b2lkCit3ZWJraXRfc291cF9jYWNoZV9zZXRfbWF4X3NpemUg
KFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsCisJCQkJZ3VpbnQgbWF4X3NpemUpCit7CisJY2FjaGUt
PnByaXYtPm1heF9zaXplID0gbWF4X3NpemU7CisJY2FjaGUtPnByaXYtPm1heF9lbnRyeV9kYXRh
X3NpemUgPSBjYWNoZS0+cHJpdi0+bWF4X3NpemUgLyBNQVhfRU5UUllfREFUQV9QRVJDRU5UQUdF
OworfQorCitndWludAord2Via2l0X3NvdXBfY2FjaGVfZ2V0X21heF9zaXplIChXZWJLaXRTb3Vw
Q2FjaGUgKmNhY2hlKQoreworCXJldHVybiBjYWNoZS0+cHJpdi0+bWF4X3NpemU7Cit9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1j
YWNoZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAt
Y2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODE3ZDNlCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0
L3NvdXAtY2FjaGUuaApAQCAtMCwwICsxLDk1IEBACisvKgorICogc291cC1jYWNoZS5oOgorICoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXRUJLSVRf
U09VUF9DQUNIRV9ICisjZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX0ggMQorCisjaW5jbHVkZSA8
d2Via2l0L3dlYmtpdGRlZmluZXMuaD4KKworI2luY2x1ZGUgPGxpYnNvdXAvc291cC10eXBlcy5o
PgorI2luY2x1ZGUgPGdpby9naW8uaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJ
VF9UWVBFX1NPVVBfQ0FDSEUgICAgICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfZ2V0X3R5cGUg
KCkpCisjZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFKG9iaikgICAgICAgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFLCBXZWJLaXRT
b3VwQ2FjaGUpKQorI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9DTEFTUyhrbGFzcykgICAgKEdf
VFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFLCBX
ZWJLaXRTb3VwQ2FjaGVDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19TT1VQX0NBQ0hFKG9iaikg
ICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBXRUJLSVRfVFlQRV9T
T1VQX0NBQ0hFKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1NPVVBfQ0FDSEVfQ0xBU1Moa2xhc3MpIChH
X1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUpKQor
I2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5D
RV9HRVRfQ0xBU1MgKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFLCBXZWJLaXRTb3VwQ2Fj
aGVDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRTb3VwQ2FjaGUgV2ViS2l0U291cENh
Y2hlOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBDYWNoZVByaXZhdGUgV2ViS2l0U291cENh
Y2hlUHJpdmF0ZTsKKwordHlwZWRlZiBlbnVtIHsKKwlXRUJLSVRfU09VUF9DQUNIRV9DQUNIRUFC
TEUgPSAoMSA8PCAwKSwKKwlXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRSA9ICgxIDw8IDEp
LAorCVdFQktJVF9TT1VQX0NBQ0hFX0lOVkFMSURBVEVTID0gKDEgPDwgMiksCisJV0VCS0lUX1NP
VVBfQ0FDSEVfVkFMSURBVEVTID0gKDEgPDwgMykKK30gV2ViS2l0U291cENhY2hlYWJpbGl0eTsK
KwordHlwZWRlZiBlbnVtIHsKKwlXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9GUkVTSCwKKwlX
RUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9ORUVEU19WQUxJREFUSU9OLAorCVdFQktJVF9TT1VQ
X0NBQ0hFX1JFU1BPTlNFX1NUQUxFCit9IFdlYktpdFNvdXBDYWNoZVJlc3BvbnNlOworCit0eXBl
ZGVmIGVudW0geworCVdFQktJVF9TT1VQX0NBQ0hFX1NJTkdMRV9VU0VSLAorCVdFQktJVF9TT1VQ
X0NBQ0hFX1NIQVJFRAorfSBXZWJLaXRTb3VwQ2FjaGVUeXBlOworCitzdHJ1Y3QgX1dlYktpdFNv
dXBDYWNoZSB7CisJR09iamVjdCBwYXJlbnRfaW5zdGFuY2U7CisKKwlXZWJLaXRTb3VwQ2FjaGVQ
cml2YXRlICpwcml2OworfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCUdPYmplY3RDbGFzcyBwYXJl
bnRfY2xhc3M7CisKKwkvKiBtZXRob2RzICovCisJV2ViS2l0U291cENhY2hlYWJpbGl0eSAoKmdl
dF9jYWNoZWFiaWxpdHkpKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsIFNvdXBNZXNzYWdlICptc2cp
OworCisJLyogUGFkZGluZyBmb3IgZnV0dXJlIGV4cGFuc2lvbiAqLworCXZvaWQgKCpfbGlic291
cF9yZXNlcnZlZDEpKHZvaWQpOworCXZvaWQgKCpfbGlic291cF9yZXNlcnZlZDIpKHZvaWQpOwor
CXZvaWQgKCpfbGlic291cF9yZXNlcnZlZDMpKHZvaWQpOworfSBXZWJLaXRTb3VwQ2FjaGVDbGFz
czsKKworV0VCS0lUX0FQSSBHVHlwZSAgICAgICAgICAgICB3ZWJraXRfc291cF9jYWNoZV9nZXRf
dHlwZSAodm9pZCk7CitXRUJLSVRfQVBJIFdlYktpdFNvdXBDYWNoZSAgKndlYmtpdF9zb3VwX2Nh
Y2hlX25ldyAoY29uc3QgY2hhciAgKmNhY2hlX2RpciwKKwkJCQkJCSAgICBXZWJLaXRTb3VwQ2Fj
aGVUeXBlIGNhY2hlX3R5cGUpOworV0VCS0lUX0FQSSB2b2lkICAgICAgICAgICAgICB3ZWJraXRf
c291cF9jYWNoZV9mbHVzaCAoV2ViS2l0U291cENhY2hlICAgKmNhY2hlKTsKK1dFQktJVF9BUEkg
dm9pZCAgICAgICAgICAgICAgd2Via2l0X3NvdXBfY2FjaGVfY2xlYXIgKFdlYktpdFNvdXBDYWNo
ZSAgICpjYWNoZSk7CisKK1dFQktJVF9BUEkgdm9pZCAgICAgICAgICAgICAgd2Via2l0X3NvdXBf
Y2FjaGVfZHVtcCAoV2ViS2l0U291cENhY2hlICpjYWNoZSk7CitXRUJLSVRfQVBJIHZvaWQgICAg
ICAgICAgICAgIHdlYmtpdF9zb3VwX2NhY2hlX2xvYWQgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUp
OworCitXRUJLSVRfQVBJIHZvaWQgICAgICAgICAgICAgIHdlYmtpdF9zb3VwX2NhY2hlX3NldF9t
YXhfc2l6ZSAoV2ViS2l0U291cENhY2hlICpjYWNoZSwKKwkJCQkJCQkgICAgIGd1aW50IG1heF9z
aXplKTsKK1dFQktJVF9BUEkgZ3VpbnQgICAgICAgICAgICAgd2Via2l0X3NvdXBfY2FjaGVfZ2V0
X21heF9zaXplIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKTsKKworR19FTkRfREVDTFMKKworCisj
ZW5kaWYgLyogV0VCS0lUX1NPVVBfQ0FDSEVfSCAqLworCmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cgYi9XZWJLaXRUb29scy9DaGFuZ2VMb2cKaW5kZXggNTA2NDhiMC4uOGZmMjE3
ZiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1dlYktpdFRvb2xzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDEwLTA5LTA2ICBTZXJnaW8gVmlsbGFyIFNlbmlu
ICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtHVEtdIEFkZCBIVFRQIGNhY2hpbmcgc3VwcG9ydAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQyNjEKKworICAgICAgICAq
IEdOVW1ha2VmaWxlLmFtOiBhZGRlZCBwYXRocyBmb3IgdGhlIG5ldyBzb3VwIEhUVFAgY2FjaGUg
Y29kZQorCiAyMDEwLTA5LTA1ICBQZXRlciBLYXN0aW5nICA8cGthc3RpbmdAZ29vZ2xlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvR05VbWFrZWZpbGUuYW0gYi9XZWJLaXRUb29scy9HTlVtYWtlZmlsZS5hbQppbmRleCAzOWRm
NDIxLi41OWM1ODEyIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9HTlVtYWtlZmlsZS5hbQorKysg
Yi9XZWJLaXRUb29scy9HTlVtYWtlZmlsZS5hbQpAQCAtNiw2ICs2LDcgQEAgbm9pbnN0X1BST0dS
QU1TICs9IFwKICMgR3RrTGF1bmNoZXIKIFByb2dyYW1zX0d0a0xhdW5jaGVyX0NQUEZMQUdTID0g
XAogCS1JJChzcmNkaXIpL1dlYktpdC9ndGsgXAorCS1JJChzcmNkaXIpL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL2NhY2hlLyBcCiAJLUkkKHRvcF9idWlsZGRpcikvV2ViS2l0L2d0ayBc
CiAJLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMgXAogCSQoZ2xvYmFsX2NwcGZsYWdz
KSBcCkBAIC0zNyw2ICszOCw3IEBAIGR1bXByZW5kZXJ0cmVlX2NwcGZsYWdzIDo9IFwKIAktSSQo
c3JjZGlyKS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsgXAogCS1JJChzcmNkaXIpL1dl
YktpdC9ndGsgXAogCS1JJChzcmNkaXIpL1dlYkNvcmUvcGxhdGZvcm0vZ3RrIFwKKwktSSQoc3Jj
ZGlyKS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS8gXAogCS1JJCh0b3BfYnVp
bGRkaXIpL1dlYktpdC9ndGsgXAogCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzIFwK
IAkkKGdsb2JhbF9jcHBmbGFncykgXApkaWZmIC0tZ2l0IGEvYXV0b3Rvb2xzL3dlYmtpdC5tNCBi
L2F1dG90b29scy93ZWJraXQubTQKaW5kZXggMzc5ZmE4Zi4uNmI0NGYzMCAxMDA2NDQKLS0tIGEv
YXV0b3Rvb2xzL3dlYmtpdC5tNAorKysgYi9hdXRvdG9vbHMvd2Via2l0Lm00CkBAIC0xMDgsNyAr
MTA4LDcgQEAgQUNfREVGVU5fT05DRShbX1dFQktJVF9DSEVDS19HTElCXSwKIFtkbmwKIGRubCBj
aGVjayBmb3IgZ2xpYgogIyBWZXJzaW9uIHJlcXVpcmVtZW50cwotR0xJQl9SRVFVSVJFRF9WRVJT
SU9OPTIuMjEuMworR0xJQl9SRVFVSVJFRF9WRVJTSU9OPTIuMjQKIEdPQkpFQ1RfUkVRVUlSRURf
VkVSU0lPTj0yLjAKIEdUSFJFQURfUkVRVUlSRURfVkVSU0lPTj0yLjAKIAotLSAKMS43LjEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66692</attachid>
            <date>2010-09-07 01:38:16 -0700</date>
            <delta_ts>2010-09-22 02:09:16 -0700</delta_ts>
            <desc>WebKitGtk+ to use the new API from the imported SoupURILoader code</desc>
            <filename>0002-WebKitGtk-to-use-the-new-API-from-the-imported-SoupU.patch</filename>
            <type>text/plain</type>
            <size>30887</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">RnJvbSAyZjIyZjRlZTk0YzhmMjkyZjM3YzgyMjk1ZjY3N2M0MzFhZTc2NDIzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTZXJnaW8gVmlsbGFyIFNlbmluIDxzdmlsbGFyQGlnYWxpYS5j
b20+CkRhdGU6IFR1ZSwgNyBTZXAgMjAxMCAxMDoyNjoxNCArMDIwMApTdWJqZWN0OiBbUEFUQ0gg
Mi8zXSBXZWJLaXRHdGsrIHRvIHVzZSB0aGUgbmV3IEFQSSBmcm9tIHRoZSBpbXBvcnRlZCBTb3Vw
VVJJTG9hZGVyIGNvZGUKCi0tLQogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFu
ZGxlSW50ZXJuYWwuaCAgfCAgIDE3ICstCiAuLi4vcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291
cmNlSGFuZGxlU291cC5jcHAgICB8ICA0NzAgKysrKysrKysrLS0tLS0tLS0tLS0KIFdlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdC5oICAgIHwgICAgMSArCiAuLi4v
cGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3BwICB8ICAgMjMgKwog
NCBmaWxlcyBjaGFuZ2VkLCAyNTggaW5zZXJ0aW9ucygrKSwgMjUzIGRlbGV0aW9ucygtKQoKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFs
LmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCmlu
ZGV4IDI0YjAwYmYuLmFlYTJhMDEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaApAQCAtNDYsNiArNDYsOSBAQAogI2VuZGlmCiAKICNp
ZiBVU0UoU09VUCkKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3QuaCIKKyNpbmNsdWRlICJzb3VwLXJl
cXVlc3Rlci5oIgorI2luY2x1ZGUgPEdSZWZQdHIuaD4KICNpbmNsdWRlIDxsaWJzb3VwL3NvdXAu
aD4KIGNsYXNzIEZyYW1lOwogI2VuZGlmCkBAIC0xMTQsMTQgKzExNywxNSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAjaWYgVVNFKFNPVVApCiAgICAgICAgICAgICAsIG1fbXNnKDApCiAgICAgICAg
ICAgICAsIG1fY2FuY2VsbGVkKGZhbHNlKQotICAgICAgICAgICAgLCBtX2dmaWxlKDApCisgICAg
ICAgICAgICAsIG1fc291cFJlcXVlc3QoMCkKKyAgICAgICAgICAgICwgbV9yZXF1ZXN0ZXIoMCkK
ICAgICAgICAgICAgICwgbV9pbnB1dFN0cmVhbSgwKQogICAgICAgICAgICAgLCBtX2NhbmNlbGxh
YmxlKDApCiAgICAgICAgICAgICAsIG1fYnVmZmVyKDApCi0gICAgICAgICAgICAsIG1fYnVmZmVy
U2l6ZSgwKQogICAgICAgICAgICAgLCBtX3RvdGFsKDApCiAgICAgICAgICAgICAsIG1faWRsZUhh
bmRsZXIoMCkKICAgICAgICAgICAgICwgbV9mcmFtZSgwKQorICAgICAgICAgICAgLCBtX2dvdENo
dW5rSGFuZGxlcigwKQogI2VuZGlmCiAjaWYgUExBVEZPUk0oUVQpCiAgICAgICAgICAgICAsIG1f
am9iKDApCkBAIC0xMzksNiArMTQzLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAg
ICAgbV91c2VyID0gdXJsLnVzZXIoKTsKICAgICAgICAgICAgIG1fcGFzcyA9IHVybC5wYXNzKCk7
CiAgICAgICAgICAgICBtX2ZpcnN0UmVxdWVzdC5yZW1vdmVDcmVkZW50aWFscygpOworI2lmIFVT
RShTT1VQKQorICAgICAgICAgICAgbV9yZXF1ZXN0ZXIgPSBzb3VwX3JlcXVlc3Rlcl9uZXcoKTsK
KyNlbmRpZgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB+UmVzb3VyY2VIYW5kbGVJbnRl
cm5hbCgpOwpAQCAtMTk2LDEzICsyMDMsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBTb3VwTWVzc2FnZSogbV9tc2c7CiAgICAgICAgIFJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25z
ZTsKICAgICAgICAgYm9vbCBtX2NhbmNlbGxlZDsKLSAgICAgICAgR0ZpbGUqIG1fZ2ZpbGU7Cisg
ICAgICAgIFBsYXRmb3JtUmVmUHRyPFNvdXBSZXF1ZXN0PiBtX3NvdXBSZXF1ZXN0OworICAgICAg
ICBQbGF0Zm9ybVJlZlB0cjxTb3VwUmVxdWVzdGVyPiBtX3JlcXVlc3RlcjsKICAgICAgICAgR0lu
cHV0U3RyZWFtKiBtX2lucHV0U3RyZWFtOwogICAgICAgICBHQ2FuY2VsbGFibGUqIG1fY2FuY2Vs
bGFibGU7CiAgICAgICAgIGNoYXIqIG1fYnVmZmVyOwotICAgICAgICBnc2l6ZSBtX2J1ZmZlclNp
emUsIG1fdG90YWw7CisgICAgICAgIGdzaXplIG1fdG90YWw7CiAgICAgICAgIGd1aW50IG1faWRs
ZUhhbmRsZXI7CiAgICAgICAgIEZyYW1lKiBtX2ZyYW1lOworICAgICAgICBndWxvbmcgbV9nb3RD
aHVua0hhbmRsZXI7CiAjZW5kaWYKICNpZiBQTEFURk9STShRVCkKICAgICAgICAgUU5ldHdvcmtS
ZXBseUhhbmRsZXIqIG1fam9iOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKaW5kZXggOTZhMmYyNS4uNTQ2MmUzNyAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNw
cAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAu
Y3BwCkBAIC00NSw4ICs0NSw4IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5o
IgogI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIu
aCIKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3QtaHR0cC5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGlu
Zy5oIgotCiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUg
PGdpby9naW8uaD4KQEAgLTU4LDYgKzU4LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisj
ZGVmaW5lIFJFQURfQlVGRkVSX1NJWkUgODE5MgorCiBjbGFzcyBXZWJDb3JlU3luY2hyb25vdXNM
b2FkZXIgOiBwdWJsaWMgUmVzb3VyY2VIYW5kbGVDbGllbnQsIHB1YmxpYyBOb25jb3B5YWJsZSB7
CiBwdWJsaWM6CiAgICAgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyKFJlc291cmNlRXJyb3ImLCBS
ZXNvdXJjZVJlc3BvbnNlICYsIFZlY3RvcjxjaGFyPiYpOwpAQCAtMTIwLDggKzEyMiwxMCBAQCB2
b2lkIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlcjo6cnVuKCkKICAgICAgICAgZ19tYWluX2xvb3Bf
cnVuKG1fbWFpbkxvb3ApOwogfQogCi1zdGF0aWMgdm9pZCBjbGVhbnVwR2lvT3BlcmF0aW9uKFJl
c291cmNlSGFuZGxlKiBoYW5kbGUsIGJvb2wgaXNEZXN0cm95aW5nKTsKLXN0YXRpYyBib29sIHN0
YXJ0RGF0YShSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBTdHJpbmcgdXJsU3RyaW5nKTsKK3N0YXRp
YyB2b2lkIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihSZXNvdXJjZUhhbmRsZSogaGFuZGxl
LCBib29sIGlzRGVzdHJveWluZyk7CitzdGF0aWMgdm9pZCBzZW5kUmVxdWVzdENhbGxiYWNrKEdP
YmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXMsIGdwb2ludGVyKTsKK3N0YXRpYyB2b2lk
IHJlYWRDYWxsYmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzLCBncG9pbnRl
cik7CitzdGF0aWMgdm9pZCBjbG9zZUNhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVz
dWx0KiByZXMsIGdwb2ludGVyKTsKIHN0YXRpYyBib29sIHN0YXJ0R2lvKFJlc291cmNlSGFuZGxl
KiBoYW5kbGUsIEtVUkwgdXJsKTsKIAogUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6flJlc291cmNl
SGFuZGxlSW50ZXJuYWwoKQpAQCAtMTMxLDYgKzEzNSw5IEBAIFJlc291cmNlSGFuZGxlSW50ZXJu
YWw6On5SZXNvdXJjZUhhbmRsZUludGVybmFsKCkKICAgICAgICAgbV9tc2cgPSAwOwogICAgIH0K
IAorICAgIGlmIChtX3NvdXBSZXF1ZXN0KQorICAgICAgICBnX29iamVjdF9zZXRfZGF0YShHX09C
SkVDVChtX3NvdXBSZXF1ZXN0LmdldCgpKSwgIndlYmtpdC1yZXNvdXJjZSIsIDApOworCiAgICAg
aWYgKG1faWRsZUhhbmRsZXIpIHsKICAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1faWRsZUhhbmRs
ZXIpOwogICAgICAgICBtX2lkbGVIYW5kbGVyID0gMDsKQEAgLTE0Myw3ICsxNTAsNyBAQCBSZXNv
dXJjZUhhbmRsZTo6flJlc291cmNlSGFuZGxlKCkKICAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNf
ZGlzY29ubmVjdF9tYXRjaGVkKGQtPm1fbXNnLCBHX1NJR05BTF9NQVRDSF9EQVRBLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgdGhpcyk7
CiAKLSAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKHRoaXMsIHRydWUpOworICAgIGNsZWFudXBTb3Vw
UmVxdWVzdE9wZXJhdGlvbih0aGlzLCB0cnVlKTsKIH0KIAogdm9pZCBSZXNvdXJjZUhhbmRsZTo6
cHJlcGFyZUZvclVSTChjb25zdCBLVVJMICZ1cmwpCkBAIC0xODUsOSArMTkyLDggQEAgc3RhdGlj
IHZvaWQgcmVzdGFydGVkQ2FsbGJhY2soU291cE1lc3NhZ2UqIG1zZywgZ3BvaW50ZXIgZGF0YSkK
ICAgICBpZiAoZC0+bV9jYW5jZWxsZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNoYXIqIHVy
aSA9IHNvdXBfdXJpX3RvX3N0cmluZyhzb3VwX21lc3NhZ2VfZ2V0X3VyaShtc2cpLCBmYWxzZSk7
Ci0gICAgU3RyaW5nIGxvY2F0aW9uID0gU3RyaW5nKHVyaSk7Ci0gICAgZ19mcmVlKHVyaSk7Cisg
ICAgR093blB0cjxjaGFyPiB1cmkoc291cF91cmlfdG9fc3RyaW5nKHNvdXBfbWVzc2FnZV9nZXRf
dXJpKG1zZyksIGZhbHNlKSk7CisgICAgU3RyaW5nIGxvY2F0aW9uID0gU3RyaW5nOjpmcm9tVVRG
OCh1cmkuZ2V0KCkpOwogICAgIEtVUkwgbmV3VVJMID0gS1VSTChoYW5kbGUtPmZpcnN0UmVxdWVz
dCgpLnVybCgpLCBsb2NhdGlvbik7CiAKICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCA9IGhh
bmRsZS0+Zmlyc3RSZXF1ZXN0KCk7CkBAIC0yOTMsNTAgKzI5OSw3IEBAIHN0YXRpYyB2b2lkIGdv
dENodW5rQ2FsbGJhY2soU291cE1lc3NhZ2UqIG1zZywgU291cEJ1ZmZlciogY2h1bmssIGdwb2lu
dGVyIGRhdGEpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURhdGEo
aGFuZGxlLmdldCgpLCBjaHVuay0+ZGF0YSwgY2h1bmstPmxlbmd0aCwgZmFsc2UpOwotfQotCi0v
LyBDYWxsZWQgYXQgdGhlIGVuZCBvZiB0aGUgbWVzc2FnZSwgd2l0aCBhbGwgdGhlIG5lY2Vzc2Fy
eSBhYm91dCB0aGUgbGFzdCBpbmZvcm1hdGlvbnMuCi0vLyBEb2Vzbid0IGdldCBjYWxsZWQgZm9y
IHJlZGlyZWN0cy4KLXN0YXRpYyB2b2lkIGZpbmlzaGVkQ2FsbGJhY2soU291cFNlc3Npb24gKnNl
c3Npb24sIFNvdXBNZXNzYWdlKiBtc2csIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgUmVmUHRyPFJl
c291cmNlSGFuZGxlPiBoYW5kbGUgPSBhZG9wdFJlZihzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRs
ZSo+KGRhdGEpKTsKLSAgICAvLyBUT0RPOiBtYXliZSB3ZSBzaG91bGQgcnVuIHRoaXMgY29kZSBl
dmVuIGlmIHRoZXJlJ3Mgbm8gY2xpZW50PwotICAgIGlmICghaGFuZGxlKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0gaGFuZGxlLT5nZXRJbnRlcm5h
bCgpOwotCi0gICAgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCA9IGhhbmRsZS0+Y2xpZW50
KCk7Ci0gICAgaWYgKCFjbGllbnQpCi0gICAgICAgIHJldHVybjsKIAotICAgIGlmIChkLT5tX2Nh
bmNlbGxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKFNPVVBfU1RBVFVTX0lTX1RSQU5T
UE9SVF9FUlJPUihtc2ctPnN0YXR1c19jb2RlKSkgewotICAgICAgICBjaGFyKiB1cmkgPSBzb3Vw
X3VyaV90b19zdHJpbmcoc291cF9tZXNzYWdlX2dldF91cmkobXNnKSwgZmFsc2UpOwotICAgICAg
ICBSZXNvdXJjZUVycm9yIGVycm9yKGdfcXVhcmtfdG9fc3RyaW5nKFNPVVBfSFRUUF9FUlJPUiks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLT5zdGF0dXNfY29kZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1cmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3Ry
aW5nOjpmcm9tVVRGOChtc2ctPnJlYXNvbl9waHJhc2UpKTsKLSAgICAgICAgZ19mcmVlKHVyaSk7
Ci0gICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIGVycm9yKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtc2ctPnN0YXR1c19jb2RlID09IFNPVVBfU1RBVFVT
X1VOQVVUSE9SSVpFRCkgewotICAgICAgICBmaWxsUmVzcG9uc2VGcm9tTWVzc2FnZShtc2csICZk
LT5tX3Jlc3BvbnNlKTsKLSAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UoaGFuZGxl
LmdldCgpLCBkLT5tX3Jlc3BvbnNlKTsKLQotICAgICAgICAvLyBXZWJDb3JlIG1pZ2h0IGhhdmUg
Y2FuY2VsbGVkIHRoZSBqb2IgaW4gdGhlIHdoaWxlCi0gICAgICAgIGlmIChkLT5tX2NhbmNlbGxl
ZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAobXNnLT5yZXNwb25zZV9ib2R5
LT5kYXRhKQotICAgICAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0YShoYW5kbGUuZ2V0KCks
IG1zZy0+cmVzcG9uc2VfYm9keS0+ZGF0YSwgbXNnLT5yZXNwb25zZV9ib2R5LT5sZW5ndGgsIHRy
dWUpOwotICAgIH0KLQotICAgIGNsaWVudC0+ZGlkRmluaXNoTG9hZGluZyhoYW5kbGUuZ2V0KCkp
OwogfQogCiAvLyBwYXJzZURhdGFVcmwoKSBpcyB0YWtlbiBmcm9tIHRoZSBDVVJMIGh0dHAgYmFj
a2VuZC4KQEAgLTM2NCw3ICszMjcsNiBAQCBzdGF0aWMgZ2Jvb2xlYW4gcGFyc2VEYXRhVXJsKGdw
b2ludGVyIGNhbGxiYWNrRGF0YSkKICAgICB9CiAKICAgICBTdHJpbmcgbWVkaWFUeXBlID0gdXJs
LnN1YnN0cmluZyg1LCBpbmRleCAtIDUpOwotICAgIFN0cmluZyBkYXRhID0gdXJsLnN1YnN0cmlu
ZyhpbmRleCArIDEpOwogCiAgICAgYm9vbCBpc0Jhc2U2NCA9IG1lZGlhVHlwZS5lbmRzV2l0aCgi
O2Jhc2U2NCIsIGZhbHNlKTsKICAgICBpZiAoaXNCYXNlNjQpCkBAIC0zODEsNyArMzQzLDYgQEAg
c3RhdGljIGdib29sZWFuIHBhcnNlRGF0YVVybChncG9pbnRlciBjYWxsYmFja0RhdGEpCiAgICAg
cmVzcG9uc2Uuc2V0TWltZVR5cGUobWltZVR5cGUpOwogCiAgICAgaWYgKGlzQmFzZTY0KSB7Ci0g
ICAgICAgIGRhdGEgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoZGF0YSk7CiAgICAgICAgIHJl
c3BvbnNlLnNldFRleHRFbmNvZGluZ05hbWUoY2hhcnNldCk7CiAgICAgICAgIGNsaWVudC0+ZGlk
UmVjZWl2ZVJlc3BvbnNlKGhhbmRsZSwgcmVzcG9uc2UpOwogCkBAIC0zOTAsMzIgKzM1MSwzOSBA
QCBzdGF0aWMgZ2Jvb2xlYW4gcGFyc2VEYXRhVXJsKGdwb2ludGVyIGNhbGxiYWNrRGF0YSkKICAg
ICAgICAgLy8gb3V0IGluIGVpdGhlciBvZiB0aG9zZSBjYXNlcy4KICAgICAgICAgaWYgKGQtPm1f
Y2FuY2VsbGVkIHx8ICFoYW5kbGUtPmNsaWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgICAgIC8vIFVzZSB0aGUgR0xpYiBCYXNlNjQsIHNpbmNlIFdlYkNvcmUncyBkZWNv
ZGVyIGlzbid0Ci0gICAgICAgIC8vIGdlbmVyYWwtcHVycG9zZSBhbmQgZmFpbHMgb24gQWNpZDMg
dGVzdCA5NyAod2hpdGVzcGFjZSkuCi0gICAgICAgIHNpemVfdCBvdXRMZW5ndGggPSAwOwotICAg
ICAgICBjaGFyKiBvdXREYXRhID0gMDsKLSAgICAgICAgb3V0RGF0YSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KGdfYmFzZTY0X2RlY29kZShkYXRhLnV0ZjgoKS5kYXRhKCksICZvdXRMZW5ndGgp
KTsKLSAgICAgICAgaWYgKG91dERhdGEgJiYgb3V0TGVuZ3RoID4gMCkKLSAgICAgICAgICAgIGNs
aWVudC0+ZGlkUmVjZWl2ZURhdGEoaGFuZGxlLCBvdXREYXRhLCBvdXRMZW5ndGgsIDApOwotICAg
ICAgICBnX2ZyZWUob3V0RGF0YSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gV2UgaGF2ZSB0
byBjb252ZXJ0IHRvIFVURi0xNiBlYXJseSBkdWUgdG8gbGltaXRhdGlvbnMgaW4gS1VSTAotICAg
ICAgICBkYXRhID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGRhdGEsIFRleHRFbmNvZGluZyhj
aGFyc2V0KSk7CiAgICAgICAgIHJlc3BvbnNlLnNldFRleHRFbmNvZGluZ05hbWUoIlVURi0xNiIp
OwogICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShoYW5kbGUsIHJlc3BvbnNlKTsK
IAogICAgICAgICBpZiAoZC0+bV9jYW5jZWxsZWQgfHwgIWhhbmRsZS0+Y2xpZW50KCkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKGRhdGEubGVuZ3RoKCkgPiAwKQot
ICAgICAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0YShoYW5kbGUsIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgY2hhcio+KGRhdGEuY2hhcmFjdGVycygpKSwgZGF0YS5sZW5ndGgoKSAqIHNpemVv
ZihVQ2hhciksIDApOwogICAgIH0KIAogICAgIGlmIChkLT5tX2NhbmNlbGxlZCB8fCAhaGFuZGxl
LT5jbGllbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY2xpZW50LT5kaWRGaW5p
c2hMb2FkaW5nKGhhbmRsZSk7CisgICAgU291cFNlc3Npb24qIHNlc3Npb24gPSBoYW5kbGUtPmRl
ZmF1bHRTZXNzaW9uKCk7CisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgIGQtPm1fc291
cFJlcXVlc3QgPSBzb3VwX3JlcXVlc3Rlcl9yZXF1ZXN0KGQtPm1fcmVxdWVzdGVyLmdldCgpLCBo
YW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHNlc3Np
b24sICZlcnJvci5vdXRQdHIoKSk7CisgICAgaWYgKGVycm9yKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBHSW5wdXRTdHJlYW0qIGluID0gc291cF9yZXF1ZXN0X3NlbmQoZC0+bV9zb3Vw
UmVxdWVzdC5nZXQoKSwgMCwgJmVycm9yLm91dFB0cigpKTsKKyAgICBpZiAoZXJyb3IpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGQtPm1faW5wdXRTdHJlYW0gPSBpbjsKKyAgICBkLT5t
X2J1ZmZlciA9IHN0YXRpY19jYXN0PGNoYXIqPihnX21hbGxvYyhSRUFEX0JVRkZFUl9TSVpFKSk7
CisgICAgZC0+bV90b3RhbCA9IDA7CisKKyAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChk
LT5tX2lucHV0U3RyZWFtKSwgIndlYmtpdC1yZXNvdXJjZSIsIGhhbmRsZSk7CisgICAgaGFuZGxl
LT5yZWYoKTsKKworICAgIGQtPm1fY2FuY2VsbGFibGUgPSBnX2NhbmNlbGxhYmxlX25ldygpOwor
ICAgIGdfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMoZC0+bV9pbnB1dFN0cmVhbSwgZC0+bV9idWZm
ZXIsIFJFQURfQlVGRkVSX1NJWkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BS
SU9SSVRZX0RFRkFVTFQsIGQtPm1fY2FuY2VsbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZWFkQ2FsbGJhY2ssIChpc0Jhc2U2NCkgPyAwIDogR0lOVF9UT19QT0lOVEVSKDEp
KTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTQ2OSw2ICs0MzcsMTQyIEBAIHN0YXRpYyB2
b2lkIGVuc3VyZVNlc3Npb25Jc0luaXRpYWxpemVkKFNvdXBTZXNzaW9uKiBzZXNzaW9uKQogICAg
IGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKHNlc3Npb24pLCAid2Via2l0LWluaXQiLCByZWlu
dGVycHJldF9jYXN0PHZvaWQqPigweGRlYWRiZWVmKSk7CiB9CiAKK3N0YXRpYyB2b2lkIGNsZWFu
dXBTb3VwUmVxdWVzdE9wZXJhdGlvbihSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBib29sIGlzRGVz
dHJveWluZyA9IGZhbHNlKQoreworICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5k
bGUtPmdldEludGVybmFsKCk7CisKKyAgICBpZiAoZC0+bV9zb3VwUmVxdWVzdCkgeworICAgICAg
ICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5tX3NvdXBSZXF1ZXN0LmdldCgpKSwgIndl
YmtpdC1yZXNvdXJjZSIsIDApOworICAgICAgICBkLT5tX3NvdXBSZXF1ZXN0LmNsZWFyKCk7Cisg
ICAgfQorCisgICAgaWYgKGQtPm1fY2FuY2VsbGFibGUpIHsKKyAgICAgICAgZ19vYmplY3RfdW5y
ZWYoZC0+bV9jYW5jZWxsYWJsZSk7CisgICAgICAgIGQtPm1fY2FuY2VsbGFibGUgPSAwOworICAg
IH0KKworICAgIGlmIChkLT5tX2lucHV0U3RyZWFtKSB7CisgICAgICAgIGdfb2JqZWN0X3NldF9k
YXRhKEdfT0JKRUNUKGQtPm1faW5wdXRTdHJlYW0pLCAid2Via2l0LXJlc291cmNlIiwgMCk7Cisg
ICAgICAgIGdfb2JqZWN0X3VucmVmKGQtPm1faW5wdXRTdHJlYW0pOworICAgICAgICBkLT5tX2lu
cHV0U3RyZWFtID0gMDsKKyAgICB9CisKKyAgICBpZiAoZC0+bV9idWZmZXIpIHsKKyAgICAgICAg
Z19mcmVlKGQtPm1fYnVmZmVyKTsKKyAgICAgICAgZC0+bV9idWZmZXIgPSAwOworICAgIH0KKwor
ICAgIGlmICghaXNEZXN0cm95aW5nKQorICAgICAgICBoYW5kbGUtPmRlcmVmKCk7Cit9CisKK3N0
YXRpYyB2b2lkIHNlbmRSZXF1ZXN0Q2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1
bHQqIHJlcywgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgUmVmUHRyPFJlc291cmNlSGFuZGxl
PiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGdfb2JqZWN0X2dldF9kYXRh
KHNvdXJjZSwgIndlYmtpdC1yZXNvdXJjZSIpKTsKKyAgICBpZiAoIWhhbmRsZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50
ZXJuYWwoKTsKKyAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0gaGFuZGxlLT5jbGll
bnQoKTsKKworICAgIGlmIChkLT5tX2dvdENodW5rSGFuZGxlcikgeworICAgICAgICAvLyBObyBu
ZWVkIHRvIGNhbGwgZ290Q2h1bmtIYW5kbGVyIGFueW1vcmUuIFJlY2VpdmVkIGRhdGEgd2lsbAor
ICAgICAgICAvLyBiZSByZXBvcnRlZCBieSByZWFkQ2FsbGJhY2sKKyAgICAgICAgaWYgKGdfc2ln
bmFsX2hhbmRsZXJfaXNfY29ubmVjdGVkKGQtPm1fbXNnLCBkLT5tX2dvdENodW5rSGFuZGxlcikp
CisgICAgICAgICAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QoZC0+bV9tc2csIGQtPm1f
Z290Q2h1bmtIYW5kbGVyKTsKKyAgICB9CisKKyAgICBpZiAoZC0+bV9jYW5jZWxsZWQgfHwgIWNs
aWVudCkgeworICAgICAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdldCgp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsK
KyAgICBHSW5wdXRTdHJlYW0qIGluID0gc291cF9yZXF1ZXN0X3NlbmRfZmluaXNoKGQtPm1fc291
cFJlcXVlc3QuZ2V0KCksIHJlcywgJmVycm9yLm91dFB0cigpKTsKKworICAgIGlmIChlcnJvcikg
eworICAgICAgICBpZiAoZC0+bV9tc2cgJiYgU09VUF9TVEFUVVNfSVNfVFJBTlNQT1JUX0VSUk9S
KGQtPm1fbXNnLT5zdGF0dXNfY29kZSkpIHsKKyAgICAgICAgICAgIFNvdXBVUkkqIHVyaSA9IHNv
dXBfcmVxdWVzdF9nZXRfdXJpKGQtPm1fc291cFJlcXVlc3QuZ2V0KCkpOworICAgICAgICAgICAg
R093blB0cjxjaGFyPiB1cmlTdHIoc291cF91cmlfdG9fc3RyaW5nKHVyaSwgZmFsc2UpKTsKKyAg
ICAgICAgICAgIFJlc291cmNlRXJyb3IgcmVzb3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0cmluZyhT
T1VQX0hUVFBfRVJST1IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGQtPm1fbXNnLT5zdGF0dXNfY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1cmlTdHIuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU3RyaW5nOjpmcm9tVVRGOChkLT5tX21zZy0+cmVhc29uX3BocmFzZSkpOworICAgICAg
ICAgICAgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAg
ICAgICBjbGllbnQtPmRpZEZhaWwoaGFuZGxlLmdldCgpLCByZXNvdXJjZUVycm9yKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlcnJvci0+ZG9tYWluID09
IEdfSU9fRVJST1IpIHsKKyAgICAgICAgICAgIFNvdXBVUkkqIHVyaSA9IHNvdXBfcmVxdWVzdF9n
ZXRfdXJpKGQtPm1fc291cFJlcXVlc3QuZ2V0KCkpOworICAgICAgICAgICAgR093blB0cjxjaGFy
PiB1cmlTdHIoc291cF91cmlfdG9fc3RyaW5nKHVyaSwgZmFsc2UpKTsKKyAgICAgICAgICAgIFJl
c291cmNlRXJyb3IgcmVzb3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0cmluZyhHX0lPX0VSUk9SKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvci0+Y29kZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmlTdHIuZ2V0KCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPyBTdHJpbmc6OmZyb21V
VEY4KGVycm9yLT5tZXNzYWdlKSA6IFN0cmluZygpKTsKKyAgICAgICAgICAgIGNsZWFudXBTb3Vw
UmVxdWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOworICAgICAgICAgICAgY2xpZW50LT5kaWRG
YWlsKGhhbmRsZS5nZXQoKSwgcmVzb3VyY2VFcnJvcik7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoZC0+bV9tc2cgJiYgZC0+bV9tc2ctPnN0YXR1c19jb2Rl
ID09IFNPVVBfU1RBVFVTX1VOQVVUSE9SSVpFRCkgeworICAgICAgICAgICAgZmlsbFJlc3BvbnNl
RnJvbU1lc3NhZ2UoZC0+bV9tc2csICZkLT5tX3Jlc3BvbnNlKTsKKyAgICAgICAgICAgIGNsaWVu
dC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGhhbmRsZS5nZXQoKSwgZC0+bV9yZXNwb25zZSk7CisKKyAg
ICAgICAgICAgIC8vIFdlYkNvcmUgbWlnaHQgaGF2ZSBjYW5jZWxsZWQgdGhlIGpvYiBpbiB0aGUg
d2hpbGUKKyAgICAgICAgICAgIGlmIChkLT5tX2NhbmNlbGxlZCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgICAgIGlmIChkLT5tX21zZy0+cmVzcG9uc2VfYm9keS0+ZGF0YSkK
KyAgICAgICAgICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVEYXRhKGhhbmRsZS5nZXQoKSwgZC0+
bV9tc2ctPnJlc3BvbnNlX2JvZHktPmRhdGEsIGQtPm1fbXNnLT5yZXNwb25zZV9ib2R5LT5sZW5n
dGgsIHRydWUpOworICAgICAgICB9CisKKyAgICAgICAgLy8gZGlkUmVjZWl2ZURhdGEgYWJvdmUg
bWlnaHQgaGF2ZSBjYW5jZWxsZWQgaXQKKyAgICAgICAgaWYgKGQtPm1fY2FuY2VsbGVkIHx8ICFj
bGllbnQpIHsKKyAgICAgICAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdl
dCgpKTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjbGllbnQtPmRp
ZEZpbmlzaExvYWRpbmcoaGFuZGxlLmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChkLT5tX2NhbmNlbGxlZCkgeworICAgICAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVy
YXRpb24oaGFuZGxlLmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGQtPm1f
aW5wdXRTdHJlYW0gPSBpbjsKKyAgICBkLT5tX2J1ZmZlciA9IHN0YXRpY19jYXN0PGNoYXIqPihn
X21hbGxvYyhSRUFEX0JVRkZFUl9TSVpFKSk7CisgICAgZC0+bV90b3RhbCA9IDA7CisKKyAgICAv
LyByZWFkQ2FsbGJhY2sgbmVlZHMgaXQKKyAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChk
LT5tX2lucHV0U3RyZWFtKSwgIndlYmtpdC1yZXNvdXJjZSIsIGhhbmRsZS5nZXQoKSk7CisKKyAg
ICAvLyBXZSBuZWVkIHRvIGNoZWNrIGlmIGl0J3MgYSBmaWxlOiBVUkwgYW5kIGlmIGl0IGlzIGEg
cmVndWxhcgorICAgIC8vIGZpbGUgYXMgaXQgY291bGQgYmUgYSBkaXJlY3RvcnkuIEluIHRoYXQg
Y2FzZSBTb3VwIHByb3Blcmx5CisgICAgLy8gcmV0dXJucyBhIHN0cmVhbSB3aG9zZSBjb250ZW50
IGlzIGEgSFRNTCB3aXRoIGEgbGlzdCBvZiBmaWxlcworICAgIC8vIGluIHRoZSBkaXJlY3RvcnkK
KyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKS5w
cm90b2NvbCgpLCAiZmlsZSIpCisgICAgICAgICYmIEdfSVNfRklMRV9JTlBVVF9TVFJFQU0oaW4p
KSB7CisgICAgICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CisKKyAgICAgICAgcmVzcG9u
c2Uuc2V0VVJMKGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkpOworICAgICAgICByZXNwb25z
ZS5zZXRNaW1lVHlwZShzb3VwX3JlcXVlc3RfZ2V0X2NvbnRlbnRfdHlwZShkLT5tX3NvdXBSZXF1
ZXN0LmdldCgpKSk7CisgICAgICAgIHJlc3BvbnNlLnNldEV4cGVjdGVkQ29udGVudExlbmd0aChz
b3VwX3JlcXVlc3RfZ2V0X2NvbnRlbnRfbGVuZ3RoKGQtPm1fc291cFJlcXVlc3QuZ2V0KCkpKTsK
KyAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UoaGFuZGxlLmdldCgpLCByZXNwb25z
ZSk7CisKKyAgICAgICAgaWYgKGQtPm1fY2FuY2VsbGVkKSB7CisgICAgICAgICAgICBjbGVhbnVw
U291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGdfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMoZC0+bV9p
bnB1dFN0cmVhbSwgZC0+bV9idWZmZXIsIFJFQURfQlVGRkVSX1NJWkUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHX1BSSU9SSVRZX0RFRkFVTFQsIGQtPm1fY2FuY2VsbGFibGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkQ2FsbGJhY2ssIDApOworfQorCiBzdGF0
aWMgYm9vbCBzdGFydEh0dHAoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKIHsKICAgICBBU1NFUlQo
aGFuZGxlKTsKQEAgLTQ4Myw3ICs1ODcsMTYgQEAgc3RhdGljIGJvb2wgc3RhcnRIdHRwKFJlc291
cmNlSGFuZGxlKiBoYW5kbGUpCiAgICAgdXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwog
ICAgIHJlcXVlc3Quc2V0VVJMKHVybCk7CiAKLSAgICBkLT5tX21zZyA9IHJlcXVlc3QudG9Tb3Vw
TWVzc2FnZSgpOworICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBkLT5tX3NvdXBSZXF1
ZXN0ID0gc291cF9yZXF1ZXN0ZXJfcmVxdWVzdChkLT5tX3JlcXVlc3Rlci5nZXQoKSwgdXJsLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCksIHNlc3Npb24sICZlcnJvci5vdXRQdHIoKSk7CisgICAgaWYg
KGVycm9yKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBnX29iamVjdF9zZXRfZGF0YShH
X09CSkVDVChkLT5tX3NvdXBSZXF1ZXN0LmdldCgpKSwgIndlYmtpdC1yZXNvdXJjZSIsIGhhbmRs
ZSk7CisKKyAgICBkLT5tX21zZyA9IHNvdXBfcmVxdWVzdF9odHRwX2dldF9tZXNzYWdlKFNPVVBf
UkVRVUVTVF9IVFRQKGQtPm1fc291cFJlcXVlc3QuZ2V0KCkpKTsKKyAgICByZXF1ZXN0LnVwZGF0
ZVNvdXBNZXNzYWdlKGQtPm1fbXNnKTsKKwogICAgIGlmICghZC0+bV9tc2cpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIApAQCAtNDkzLDcgKzYwNiw3IEBAIHN0YXRpYyBib29sIHN0YXJ0SHR0cChS
ZXNvdXJjZUhhbmRsZSogaGFuZGxlKQogICAgIGdfc2lnbmFsX2Nvbm5lY3QoZC0+bV9tc2csICJy
ZXN0YXJ0ZWQiLCBHX0NBTExCQUNLKHJlc3RhcnRlZENhbGxiYWNrKSwgaGFuZGxlKTsKICAgICBn
X3NpZ25hbF9jb25uZWN0KGQtPm1fbXNnLCAiZ290LWhlYWRlcnMiLCBHX0NBTExCQUNLKGdvdEhl
YWRlcnNDYWxsYmFjayksIGhhbmRsZSk7CiAgICAgZ19zaWduYWxfY29ubmVjdChkLT5tX21zZywg
ImNvbnRlbnQtc25pZmZlZCIsIEdfQ0FMTEJBQ0soY29udGVudFNuaWZmZWRDYWxsYmFjayksIGhh
bmRsZSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChkLT5tX21zZywgImdvdC1jaHVuayIsIEdfQ0FM
TEJBQ0soZ290Q2h1bmtDYWxsYmFjayksIGhhbmRsZSk7CisgICAgZC0+bV9nb3RDaHVua0hhbmRs
ZXIgPSBnX3NpZ25hbF9jb25uZWN0KGQtPm1fbXNnLCAiZ290LWNodW5rIiwgR19DQUxMQkFDSyhn
b3RDaHVua0NhbGxiYWNrKSwgaGFuZGxlKTsKIAogI2lmZGVmIEhBVkVfTElCU09VUF8yXzI5Xzkw
CiAgICAgU3RyaW5nIGZpcnN0UGFydHlTdHJpbmcgPSByZXF1ZXN0LmZpcnN0UGFydHlGb3JDb29r
aWVzKCkuc3RyaW5nKCk7CkBAIC01MDIsNyArNjE1LDYgQEAgc3RhdGljIGJvb2wgc3RhcnRIdHRw
KFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCiAgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfZmlyc3Rf
cGFydHkoZC0+bV9tc2csIGZpcnN0UGFydHkuZ2V0KCkpOwogICAgIH0KICNlbmRpZgotICAgIGdf
b2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1fbXNnKSwgInJlc291cmNlSGFuZGxlIiwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oaGFuZGxlKSk7CiAKICAgICBGb3JtRGF0YSogaHR0cEJvZHkg
PSBkLT5tX2ZpcnN0UmVxdWVzdC5odHRwQm9keSgpOwogICAgIGlmIChodHRwQm9keSAmJiAhaHR0
cEJvZHktPmlzRW1wdHkoKSkgewpAQCAtNTMyLDEyICs2NDQsMTEgQEAgc3RhdGljIGJvb2wgc3Rh
cnRIdHRwKFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCiAgICAgICAgICAgICAgICAgICAgICAqIG1h
cHBpbmcgZm9yIHVwbG9hZGVkIGZpbGVzIGNvZGUgaW5zcGlyZWQgYnkgdGVjaG5pcXVlIHVzZWQg
aW4KICAgICAgICAgICAgICAgICAgICAgICogbGlic291cCdzIHNpbXBsZS1odHRwZCB0ZXN0CiAg
ICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICBHRXJyb3IqIGVycm9y
ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgR093blB0cjxHRXJyb3I+IGVycm9yOwogICAgICAg
ICAgICAgICAgICAgICBDU3RyaW5nIGZpbGVOYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KGVsZW1lbnQubV9maWxlbmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIEdNYXBwZWRGaWxlKiBm
aWxlTWFwcGluZyA9IGdfbWFwcGVkX2ZpbGVfbmV3KGZpbGVOYW1lLmRhdGEoKSwgZmFsc2UsICZl
cnJvcik7CisgICAgICAgICAgICAgICAgICAgIEdNYXBwZWRGaWxlKiBmaWxlTWFwcGluZyA9IGdf
bWFwcGVkX2ZpbGVfbmV3KGZpbGVOYW1lLmRhdGEoKSwgZmFsc2UsICZlcnJvci5vdXRQdHIoKSk7
CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOwogICAgICAgICAgICAgICAgICAgICAgICAgZ19zaWdu
YWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKGQtPm1fbXNnLCBHX1NJR05BTF9NQVRDSF9E
QVRBLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAsIDAsIDAsIDAsIGhhbmRsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBn
X29iamVjdF91bnJlZihkLT5tX21zZyk7CkBAIC01NjksMTEgKzY4MCw4IEBAIHN0YXRpYyBib29s
IHN0YXJ0SHR0cChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQogICAgIGlmICghc291cF9tZXNzYWdl
X2hlYWRlcnNfZ2V0X29uZShkLT5tX21zZy0+cmVxdWVzdF9oZWFkZXJzLCAiQWNjZXB0IikpCiAg
ICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChkLT5tX21zZy0+cmVxdWVzdF9oZWFk
ZXJzLCAiQWNjZXB0IiwgIiovKiIpOwogCi0gICAgLy8gQmFsYW5jZWQgaW4gUmVzb3VyY2VIYW5k
bGVJbnRlcm5hbCdzIGRlc3RydWN0b3I7IHdlIG5lZWQgdG8KLSAgICAvLyBrZWVwIG91ciBvd24g
cmVmLCBiZWNhdXNlIGFmdGVyIHF1ZXVlaW5nIHRoZSBtZXNzYWdlLCB0aGUKLSAgICAvLyBzZXNz
aW9uIG93bnMgdGhlIGluaXRpYWwgcmVmZXJlbmNlLgotICAgIGdfb2JqZWN0X3JlZihkLT5tX21z
Zyk7Ci0gICAgc291cF9zZXNzaW9uX3F1ZXVlX21lc3NhZ2Uoc2Vzc2lvbiwgZC0+bV9tc2csIGZp
bmlzaGVkQ2FsbGJhY2ssIGhhbmRsZSk7CisgICAgZC0+bV9jYW5jZWxsYWJsZSA9IGdfY2FuY2Vs
bGFibGVfbmV3KCk7CisgICAgc291cF9yZXF1ZXN0X3NlbmRfYXN5bmMoZC0+bV9zb3VwUmVxdWVz
dC5nZXQoKSwgZC0+bV9jYW5jZWxsYWJsZSwgc2VuZFJlcXVlc3RDYWxsYmFjaywgMCk7CiAKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTY2NywzOCArNzc1LDYgQEAgdm9pZCBSZXNvdXJjZUhhbmRs
ZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QsIFMKICAgICBzeW5jTG9hZGVyLnJ1bigpOwogfQogCi0vLyBHSU8tYmFzZWQgbG9hZGVyCi0K
LXN0YXRpYyB2b2lkIGNsZWFudXBHaW9PcGVyYXRpb24oUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwg
Ym9vbCBpc0Rlc3Ryb3lpbmcgPSBmYWxzZSkKLXsKLSAgICBSZXNvdXJjZUhhbmRsZUludGVybmFs
KiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOwotCi0gICAgaWYgKGQtPm1fZ2ZpbGUpIHsKLSAg
ICAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9nZmlsZSksICJ3ZWJraXQtcmVz
b3VyY2UiLCAwKTsKLSAgICAgICAgZ19vYmplY3RfdW5yZWYoZC0+bV9nZmlsZSk7Ci0gICAgICAg
IGQtPm1fZ2ZpbGUgPSAwOwotICAgIH0KLQotICAgIGlmIChkLT5tX2NhbmNlbGxhYmxlKSB7Ci0g
ICAgICAgIGdfb2JqZWN0X3VucmVmKGQtPm1fY2FuY2VsbGFibGUpOwotICAgICAgICBkLT5tX2Nh
bmNlbGxhYmxlID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoZC0+bV9pbnB1dFN0cmVhbSkgewotICAg
ICAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5tX2lucHV0U3RyZWFtKSwgIndlYmtp
dC1yZXNvdXJjZSIsIDApOwotICAgICAgICBnX29iamVjdF91bnJlZihkLT5tX2lucHV0U3RyZWFt
KTsKLSAgICAgICAgZC0+bV9pbnB1dFN0cmVhbSA9IDA7Ci0gICAgfQotCi0gICAgaWYgKGQtPm1f
YnVmZmVyKSB7Ci0gICAgICAgIGdfZnJlZShkLT5tX2J1ZmZlcik7Ci0gICAgICAgIGQtPm1fYnVm
ZmVyID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoIWlzRGVzdHJveWluZykKLSAgICAgICAgaGFuZGxl
LT5kZXJlZigpOwotfQotCiBzdGF0aWMgdm9pZCBjbG9zZUNhbGxiYWNrKEdPYmplY3QqIHNvdXJj
ZSwgR0FzeW5jUmVzdWx0KiByZXMsIGdwb2ludGVyKQogewogICAgIFJlZlB0cjxSZXNvdXJjZUhh
bmRsZT4gaGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihnX29iamVjdF9nZXRf
ZGF0YShzb3VyY2UsICJ3ZWJraXQtcmVzb3VyY2UiKSk7CkBAIC03MDksNyArNzg1LDcgQEAgc3Rh
dGljIHZvaWQgY2xvc2VDYWxsYmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCogcmVz
LCBncG9pbnRlcikKICAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0gaGFuZGxlLT5j
bGllbnQoKTsKIAogICAgIGdfaW5wdXRfc3RyZWFtX2Nsb3NlX2ZpbmlzaChkLT5tX2lucHV0U3Ry
ZWFtLCByZXMsIDApOwotICAgIGNsZWFudXBHaW9PcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKKyAg
ICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKIAogICAgIC8vIFRo
ZSBsb2FkIG1heSBoYXZlIGJlZW4gY2FuY2VsbGVkLCB0aGUgY2xpZW50IG1heSBoYXZlIGJlZW4K
ICAgICAvLyBkZXN0cm95ZWQgYWxyZWFkeS4gSW4gc3VjaCBjYXNlcyBjYWxsaW5nIGRpZEZpbmlz
aExvYWRpbmcgaXMgYQpAQCAtNzIwLDMyICs3OTYsMzIgQEAgc3RhdGljIHZvaWQgY2xvc2VDYWxs
YmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzLCBncG9pbnRlcikKICAgICBj
bGllbnQtPmRpZEZpbmlzaExvYWRpbmcoaGFuZGxlLmdldCgpKTsKIH0KIAotc3RhdGljIHZvaWQg
cmVhZENhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXMsIGdwb2ludGVy
KQorc3RhdGljIHZvaWQgcmVhZENhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0
KiByZXMsIGdwb2ludGVyIGRhdGEpCiB7CiAgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5k
bGUgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGdfb2JqZWN0X2dldF9kYXRhKHNvdXJj
ZSwgIndlYmtpdC1yZXNvdXJjZSIpKTsKICAgICBpZiAoIWhhbmRsZSkKICAgICAgICAgcmV0dXJu
OwogCisgICAgYm9vbCBjb252ZXJ0VG9VVEYxNiA9IHN0YXRpY19jYXN0PGJvb2w+KGRhdGEpOwog
ICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFsKCk7CiAg
ICAgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCA9IGhhbmRsZS0+Y2xpZW50KCk7CiAKICAg
ICBpZiAoZC0+bV9jYW5jZWxsZWQgfHwgIWNsaWVudCkgewotICAgICAgICBjbGVhbnVwR2lvT3Bl
cmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAgIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlv
bihoYW5kbGUuZ2V0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgR0Vycm9yKiBl
cnJvciA9IDA7CisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOwogCi0gICAgZ3NzaXplIGJ5dGVz
UmVhZCA9IGdfaW5wdXRfc3RyZWFtX3JlYWRfZmluaXNoKGQtPm1faW5wdXRTdHJlYW0sIHJlcywg
JmVycm9yKTsKKyAgICBnc3NpemUgYnl0ZXNSZWFkID0gZ19pbnB1dF9zdHJlYW1fcmVhZF9maW5p
c2goZC0+bV9pbnB1dFN0cmVhbSwgcmVzLCAmZXJyb3Iub3V0UHRyKCkpOwogICAgIGlmIChlcnJv
cikgewotICAgICAgICBjaGFyKiB1cmkgPSBnX2ZpbGVfZ2V0X3VyaShkLT5tX2dmaWxlKTsKKyAg
ICAgICAgU291cFVSSSogdXJpID0gc291cF9yZXF1ZXN0X2dldF91cmkoZC0+bV9zb3VwUmVxdWVz
dC5nZXQoKSk7CisgICAgICAgIEdPd25QdHI8Y2hhcj4gdXJpU3RyKHNvdXBfdXJpX3RvX3N0cmlu
Zyh1cmksIGZhbHNlKSk7CiAgICAgICAgIFJlc291cmNlRXJyb3IgcmVzb3VyY2VFcnJvcihnX3F1
YXJrX3RvX3N0cmluZyhHX0lPX0VSUk9SKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVycm9yLT5jb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpU3RyLmdldCgpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPyBTdHJpbmc6OmZyb21V
VEY4KGVycm9yLT5tZXNzYWdlKSA6IFN0cmluZygpKTsKLSAgICAgICAgZ19mcmVlKHVyaSk7Ci0g
ICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7Ci0gICAgICAgIGNsZWFudXBHaW9PcGVyYXRpb24o
aGFuZGxlLmdldCgpKTsKKyAgICAgICAgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKGhhbmRs
ZS5nZXQoKSk7CiAgICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIHJlc291cmNl
RXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNzU3LDE0MSArODMzLDM2IEBAIHN0
YXRpYyB2b2lkIHJlYWRDYWxsYmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCogcmVz
LCBncG9pbnRlcikKICAgICB9CiAKICAgICBkLT5tX3RvdGFsICs9IGJ5dGVzUmVhZDsKLSAgICBj
bGllbnQtPmRpZFJlY2VpdmVEYXRhKGhhbmRsZS5nZXQoKSwgZC0+bV9idWZmZXIsIGJ5dGVzUmVh
ZCwgZC0+bV90b3RhbCk7Ci0KLSAgICAvLyBkaWRSZWNlaXZlRGF0YSBtYXkgY2FuY2VsIHRoZSBs
b2FkLCB3aGljaCBtYXkgcmVsZWFzZSB0aGUgbGFzdCByZWZlcmVuY2UuCi0gICAgaWYgKGQtPm1f
Y2FuY2VsbGVkKSB7Ci0gICAgICAgIGNsZWFudXBHaW9PcGVyYXRpb24oaGFuZGxlLmdldCgpKTsK
LSAgICAgICAgcmV0dXJuOworICAgIGlmIChHX0xJS0VMWSghY29udmVydFRvVVRGMTYpKQorICAg
ICAgICBjbGllbnQtPmRpZFJlY2VpdmVEYXRhKGhhbmRsZS5nZXQoKSwgZC0+bV9idWZmZXIsIGJ5
dGVzUmVhZCwgZC0+bV90b3RhbCk7CisgICAgZWxzZSB7CisgICAgICAgIC8vIFdlIGhhdmUgdG8g
Y29udmVydCBpdCB0byBVVEYtMTYgZHVlIHRvIGxpbWl0YXRpb25zIGluIEtVUkwKKyAgICAgICAg
U3RyaW5nIGRhdGEgPSBTdHJpbmc6OmZyb21VVEY4KGQtPm1fYnVmZmVyLCBieXRlc1JlYWQpOwor
ICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVEYXRhKGhhbmRsZS5nZXQoKSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBjaGFyKj4oZGF0YS5jaGFyYWN0ZXJzKCkpLCBkYXRhLmxlbmd0aCgpICogc2l6
ZW9mKFVDaGFyKSwgMCk7CiAgICAgfQogCi0gICAgZ19pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyhk
LT5tX2lucHV0U3RyZWFtLCBkLT5tX2J1ZmZlciwgZC0+bV9idWZmZXJTaXplLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR19QUklPUklUWV9ERUZBVUxULCBkLT5tX2NhbmNlbGxhYmxl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZENhbGxiYWNrLCAwKTsKLX0KLQot
c3RhdGljIHZvaWQgb3BlbkNhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiBy
ZXMsIGdwb2ludGVyKQotewotICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gc3Rh
dGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihnX29iamVjdF9nZXRfZGF0YShzb3VyY2UsICJ3ZWJr
aXQtcmVzb3VyY2UiKSk7Ci0gICAgaWYgKCFoYW5kbGUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFsKCk7Ci0gICAg
UmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCA9IGhhbmRsZS0+Y2xpZW50KCk7Ci0KKyAgICAv
LyBkaWRSZWNlaXZlRGF0YSBtYXkgY2FuY2VsIHRoZSBsb2FkLCB3aGljaCBtYXkgcmVsZWFzZSB0
aGUgbGFzdCByZWZlcmVuY2UuCiAgICAgaWYgKGQtPm1fY2FuY2VsbGVkIHx8ICFjbGllbnQpIHsK
LSAgICAgICAgY2xlYW51cEdpb09wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOworICAgICAgICBjbGVh
bnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIEdFcnJvciogZXJyb3IgPSAwOwotICAgIEdGaWxlSW5wdXRTdHJlYW0qIGlu
ID0gZ19maWxlX3JlYWRfZmluaXNoKEdfRklMRShzb3VyY2UpLCByZXMsICZlcnJvcik7Ci0gICAg
aWYgKGVycm9yKSB7Ci0gICAgICAgIGNoYXIqIHVyaSA9IGdfZmlsZV9nZXRfdXJpKGQtPm1fZ2Zp
bGUpOwotICAgICAgICBSZXNvdXJjZUVycm9yIHJlc291cmNlRXJyb3IoZ19xdWFya190b19zdHJp
bmcoR19JT19FUlJPUiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJv
ci0+Y29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID8gU3RyaW5nOjpmcm9tVVRGOChl
cnJvci0+bWVzc2FnZSkgOiBTdHJpbmcoKSk7Ci0gICAgICAgIGdfZnJlZSh1cmkpOwotICAgICAg
ICBnX2Vycm9yX2ZyZWUoZXJyb3IpOwotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRs
ZS5nZXQoKSk7Ci0gICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIHJlc291cmNl
RXJyb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZC0+bV9pbnB1dFN0cmVhbSA9
IEdfSU5QVVRfU1RSRUFNKGluKTsKLSAgICBkLT5tX2J1ZmZlclNpemUgPSA4MTkyOwotICAgIGQt
Pm1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGdfbWFsbG9jKGQtPm1fYnVmZmVyU2l6ZSkp
OwotICAgIGQtPm1fdG90YWwgPSAwOwotCi0gICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1Qo
ZC0+bV9pbnB1dFN0cmVhbSksICJ3ZWJraXQtcmVzb3VyY2UiLCBoYW5kbGUuZ2V0KCkpOwotICAg
IGdfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMoZC0+bV9pbnB1dFN0cmVhbSwgZC0+bV9idWZmZXIs
IGQtPm1fYnVmZmVyU2l6ZSwKKyAgICBnX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jKGQtPm1faW5w
dXRTdHJlYW0sIGQtPm1fYnVmZmVyLCBSRUFEX0JVRkZFUl9TSVpFLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR19QUklPUklUWV9ERUZBVUxULCBkLT5tX2NhbmNlbGxhYmxlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZENhbGxiYWNrLCAwKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlYWRDYWxsYmFjaywgZGF0YSk7CiB9CiAKLXN0YXRpYyB2b2lk
IHF1ZXJ5SW5mb0NhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXMsIGdw
b2ludGVyKQotewotICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gc3RhdGljX2Nh
c3Q8UmVzb3VyY2VIYW5kbGUqPihnX29iamVjdF9nZXRfZGF0YShzb3VyY2UsICJ3ZWJraXQtcmVz
b3VyY2UiKSk7Ci0gICAgaWYgKCFoYW5kbGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlc291
cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFsKCk7Ci0gICAgUmVzb3Vy
Y2VIYW5kbGVDbGllbnQqIGNsaWVudCA9IGhhbmRsZS0+Y2xpZW50KCk7Ci0KLSAgICBpZiAoZC0+
bV9jYW5jZWxsZWQpIHsKLSAgICAgICAgY2xlYW51cEdpb09wZXJhdGlvbihoYW5kbGUuZ2V0KCkp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25z
ZTsKLQotICAgIGNoYXIqIHVyaSA9IGdfZmlsZV9nZXRfdXJpKGQtPm1fZ2ZpbGUpOwotICAgIHJl
c3BvbnNlLnNldFVSTChLVVJMKEtVUkwoKSwgdXJpKSk7Ci0gICAgZ19mcmVlKHVyaSk7Ci0KLSAg
ICBHRXJyb3IqIGVycm9yID0gMDsKLSAgICBHRmlsZUluZm8qIGluZm8gPSBnX2ZpbGVfcXVlcnlf
aW5mb19maW5pc2goZC0+bV9nZmlsZSwgcmVzLCAmZXJyb3IpOwotCi0gICAgaWYgKGVycm9yKSB7
Ci0gICAgICAgIC8vIEZJWE1FOiB0byBiZSBhYmxlIHRvIGhhbmRsZSBmdHAgVVJJcyBwcm9wZXJs
eSwgd2UgbXVzdAotICAgICAgICAvLyBjaGVjayBpZiB0aGUgZXJyb3IgaXMgR19JT19FUlJPUl9O
T1RfTU9VTlRFRCwgYW5kIGlmIHNvLAotICAgICAgICAvLyBjYWxsIGdfZmlsZV9tb3VudF9lbmNs
b3Npbmdfdm9sdW1lKCkgdG8gbW91bnQgdGhlIGZ0cAotICAgICAgICAvLyBzZXJ2ZXIgKGFuZCB0
aGVuIGtlZXAgdHJhY2sgb2YgdGhlIGZhY3QgdGhhdCB3ZSBtb3VudGVkIGl0LAotICAgICAgICAv
LyBhbmQgc2V0IGEgdGltZW91dCB0byB1bm1vdW50IGl0IGxhdGVyIGFmdGVyIGl0J3MgYmVlbiBp
ZGxlCi0gICAgICAgIC8vIGZvciBhIHdoaWxlKS4KLSAgICAgICAgY2hhciogdXJpID0gZ19maWxl
X2dldF91cmkoZC0+bV9nZmlsZSk7Ci0gICAgICAgIFJlc291cmNlRXJyb3IgcmVzb3VyY2VFcnJv
cihnX3F1YXJrX3RvX3N0cmluZyhHX0lPX0VSUk9SKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVycm9yLT5jb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdXJpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPyBT
dHJpbmc6OmZyb21VVEY4KGVycm9yLT5tZXNzYWdlKSA6IFN0cmluZygpKTsKLSAgICAgICAgZ19m
cmVlKHVyaSk7Ci0gICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7Ci0gICAgICAgIGNsZWFudXBH
aW9PcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKLSAgICAgICAgY2xpZW50LT5kaWRGYWlsKGhhbmRs
ZS5nZXQoKSwgcmVzb3VyY2VFcnJvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAoZ19maWxlX2luZm9fZ2V0X2ZpbGVfdHlwZShpbmZvKSAhPSBHX0ZJTEVfVFlQRV9SRUdVTEFS
KSB7Ci0gICAgICAgIC8vIEZJWE1FOiB3aGF0IGlmIHRoZSBVUkkgcG9pbnRzIHRvIGEgZGlyZWN0
b3J5PyBTaG91bGQgd2UKLSAgICAgICAgLy8gZ2VuZXJhdGUgYSBsaXN0aW5nPyBIb3c/IFdoYXQg
ZG8gb3RoZXIgYmFja2VuZHMgZG8gaGVyZT8KLSAgICAgICAgY2hhciogdXJpID0gZ19maWxlX2dl
dF91cmkoZC0+bV9nZmlsZSk7Ci0gICAgICAgIFJlc291cmNlRXJyb3IgcmVzb3VyY2VFcnJvcihn
X3F1YXJrX3RvX3N0cmluZyhHX0lPX0VSUk9SKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdfSU9fRVJST1JfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdXJpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5n
KCkpOwotICAgICAgICBnX2ZyZWUodXJpKTsKLSAgICAgICAgY2xlYW51cEdpb09wZXJhdGlvbiho
YW5kbGUuZ2V0KCkpOwotICAgICAgICBjbGllbnQtPmRpZEZhaWwoaGFuZGxlLmdldCgpLCByZXNv
dXJjZUVycm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHJlc3BvbnNlLnNldE1p
bWVUeXBlKGdfZmlsZV9pbmZvX2dldF9jb250ZW50X3R5cGUoaW5mbykpOwotICAgIHJlc3BvbnNl
LnNldEV4cGVjdGVkQ29udGVudExlbmd0aChnX2ZpbGVfaW5mb19nZXRfc2l6ZShpbmZvKSk7Ci0K
LSAgICBHVGltZVZhbCB0djsKLSAgICBnX2ZpbGVfaW5mb19nZXRfbW9kaWZpY2F0aW9uX3RpbWUo
aW5mbywgJnR2KTsKLSAgICByZXNwb25zZS5zZXRMYXN0TW9kaWZpZWREYXRlKHR2LnR2X3NlYyk7
Ci0KLSAgICBjbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShoYW5kbGUuZ2V0KCksIHJlc3BvbnNl
KTsKLQotICAgIGlmIChkLT5tX2NhbmNlbGxlZCkgewotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0
aW9uKGhhbmRsZS5nZXQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBnX2ZpbGVf
cmVhZF9hc3luYyhkLT5tX2dmaWxlLCBHX1BSSU9SSVRZX0RFRkFVTFQsIGQtPm1fY2FuY2VsbGFi
bGUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BlbkNhbGxiYWNrLCAwKTsKLX0KIHN0YXRpYyBi
b29sIHN0YXJ0R2lvKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIEtVUkwgdXJsKQogewogICAgIEFT
U0VSVChoYW5kbGUpOwogCi0gICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+
Z2V0SW50ZXJuYWwoKTsKLQogICAgIGlmIChoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmh0dHBNZXRo
b2QoKSAhPSAiR0VUIiAmJiBoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmh0dHBNZXRob2QoKSAhPSAi
UE9TVCIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIENTdHJpbmcgdXJsU3RyOworICAg
IFNvdXBTZXNzaW9uKiBzZXNzaW9uID0gaGFuZGxlLT5kZWZhdWx0U2Vzc2lvbigpOworICAgIFJl
c291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFsKCk7CisKICAgICAv
LyBHSU8gZG9lc24ndCBrbm93IGhvdyB0byBoYW5kbGUgcmVmcyBhbmQgcXVlcmllcywgc28gcmVt
b3ZlIHRoZW0KICAgICAvLyBUT0RPOiB1c2UgS1VSTC5maWxlU3lzdGVtUGF0aCBhZnRlciBLVVJM
R3RrIGFuZCBGaWxlU3lzdGVtR3RrIGFyZQogICAgIC8vIHVzaW5nIEdJTyBpbnRlcm5hbGx5LCBh
bmQgcHJvdmlkaW5nIFVSSXMgaW5zdGVhZCBvZiBmaWxlIHBhdGhzCkBAIC05MDQsMjMgKzg3NSwy
NCBAQCBzdGF0aWMgYm9vbCBzdGFydEdpbyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBLVVJMIHVy
bCkKICAgICAvLyBnX2ZpbGVuYW1lX2Zyb21fdXJpICh1c2VkIGludGVybmFsbHkgYnkgR0ZpbGUp
IGhhcyBwcm9ibGVtcwogICAgIC8vIGRlY29kaW5nIHN0cmluZ3Mgd2l0aCBhcmJpdHJhcnkgcGVy
Y2VudCBzaWducwogICAgIGlmICh1cmwuaXNMb2NhbEZpbGUoKSkKLSAgICAgICAgZC0+bV9nZmls
ZSA9IGdfZmlsZV9uZXdfZm9yX3BhdGgodXJsLnByZXR0eVVSTCgpLnV0ZjgoKS5kYXRhKCkgKyBz
aXplb2YoImZpbGU6Ly8iKSAtIDEpOworICAgICAgICB1cmxTdHIgPSB1cmwucHJldHR5VVJMKCku
dXRmOCgpLmRhdGEoKTsKICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgZC0+bV9nZmlsZSA9IGdf
ZmlsZV9uZXdfZm9yX3VyaSh1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgZ19vYmpl
Y3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9nZmlsZSksICJ3ZWJraXQtcmVzb3VyY2UiLCBoYW5k
bGUpOworICAgICAgICB1cmxTdHIgPSB1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKTsKKworICAg
IEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBkLT5tX3NvdXBSZXF1ZXN0ID0gc291cF9yZXF1
ZXN0ZXJfcmVxdWVzdChkLT5tX3JlcXVlc3Rlci5nZXQoKSwgdXJsU3RyLmRhdGEoKSwgc2Vzc2lv
biwgJmVycm9yLm91dFB0cigpKTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1fc291cFJlcXVlc3QuZ2V0
KCkpLCAid2Via2l0LXJlc291cmNlIiwgaGFuZGxlKTsKIAotICAgIC8vIGJhbGFuY2VkIGJ5IGEg
ZGVyZWYoKSBpbiBjbGVhbnVwR2lvT3BlcmF0aW9uLCB3aGljaCBzaG91bGQgYWx3YXlzIHJ1bgor
ICAgIC8vIGJhbGFuY2VkIGJ5IGEgZGVyZWYoKSBpbiBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRp
b24sIHdoaWNoIHNob3VsZCBhbHdheXMgcnVuCiAgICAgaGFuZGxlLT5yZWYoKTsKIAogICAgIGQt
Pm1fY2FuY2VsbGFibGUgPSBnX2NhbmNlbGxhYmxlX25ldygpOwotICAgIGdfZmlsZV9xdWVyeV9p
bmZvX2FzeW5jKGQtPm1fZ2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR19GSUxF
X0FUVFJJQlVURV9TVEFOREFSRF9UWVBFICIsIgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfQ09OVEVOVF9UWVBFICIsIgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfU0laRSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHX0ZJTEVfUVVFUllfSU5GT19OT05FLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdfUFJJT1JJVFlfREVGQVVMVCwgZC0+bV9jYW5jZWxsYWJsZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeUluZm9DYWxsYmFjaywgMCk7CisgICAgc291
cF9yZXF1ZXN0X3NlbmRfYXN5bmMoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSwgZC0+bV9jYW5jZWxs
YWJsZSwgc2VuZFJlcXVlc3RDYWxsYmFjaywgMCk7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0
LmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3QuaAppbmRl
eCBhMWQ5MTZmLi5jMWM3MTE2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9SZXNvdXJjZVJlcXVlc3QuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9SZXNvdXJjZVJlcXVlc3QuaApAQCAtNjcsNiArNjcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgICAgICB1cGRhdGVGcm9tU291cE1lc3NhZ2Uoc291cE1lc3NhZ2UpOwogICAgICAg
ICB9CiAKKyAgICAgICAgdm9pZCB1cGRhdGVTb3VwTWVzc2FnZShTb3VwTWVzc2FnZSogc291cE1l
c3NhZ2UpIGNvbnN0OwogICAgICAgICBTb3VwTWVzc2FnZSogdG9Tb3VwTWVzc2FnZSgpIGNvbnN0
OwogICAgICAgICB2b2lkIHVwZGF0ZUZyb21Tb3VwTWVzc2FnZShTb3VwTWVzc2FnZSogc291cE1l
c3NhZ2UpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNv
dXJjZVJlcXVlc3RTb3VwLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291
cmNlUmVxdWVzdFNvdXAuY3BwCmluZGV4IDYyZGViMDEuLjM4MGZjODQgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3BwCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3BwCkBA
IC0zMyw2ICszMywyOSBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKK3ZvaWQgUmVzb3VyY2VSZXF1ZXN0Ojp1cGRhdGVTb3VwTWVzc2FnZShTb3VwTWVzc2Fn
ZSogc291cE1lc3NhZ2UpIGNvbnN0Cit7CisgICAgZ19vYmplY3Rfc2V0KHNvdXBNZXNzYWdlLCBT
T1VQX01FU1NBR0VfTUVUSE9ELCBodHRwTWV0aG9kKCkudXRmOCgpLmRhdGEoKSwgTlVMTCk7CisK
KyAgICBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzID0gaHR0cEhlYWRlckZpZWxkcygpOwor
ICAgIFNvdXBNZXNzYWdlSGVhZGVycyogc291cEhlYWRlcnMgPSBzb3VwTWVzc2FnZS0+cmVxdWVz
dF9oZWFkZXJzOworICAgIGlmICghaGVhZGVycy5pc0VtcHR5KCkpIHsKKyAgICAgICAgSFRUUEhl
YWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVhZGVycy5lbmQoKTsKKyAgICAgICAgZm9y
IChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRlcnMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KQorICAgICAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKHNv
dXBIZWFkZXJzLCBpdC0+Zmlyc3Quc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgaXQtPnNlY29uZC51
dGY4KCkuZGF0YSgpKTsKKyAgICB9CisKKyNpZmRlZiBIQVZFX0xJQlNPVVBfMl8yOV85MAorICAg
IFN0cmluZyBmaXJzdFBhcnR5U3RyaW5nID0gZmlyc3RQYXJ0eUZvckNvb2tpZXMoKS5zdHJpbmco
KTsKKyAgICBpZiAoIWZpcnN0UGFydHlTdHJpbmcuaXNFbXB0eSgpKSB7CisgICAgICAgIEdPd25Q
dHI8U291cFVSST4gZmlyc3RQYXJ0eShzb3VwX3VyaV9uZXcoZmlyc3RQYXJ0eVN0cmluZy51dGY4
KCkuZGF0YSgpKSk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfZmlyc3RfcGFydHkoc291cE1l
c3NhZ2UsIGZpcnN0UGFydHkuZ2V0KCkpOworICAgIH0KKyNlbmRpZgorCisgICAgc291cF9tZXNz
YWdlX3NldF9mbGFncyhzb3VwTWVzc2FnZSwgbV9zb3VwRmxhZ3MpOworfQorCiBTb3VwTWVzc2Fn
ZSogUmVzb3VyY2VSZXF1ZXN0Ojp0b1NvdXBNZXNzYWdlKCkgY29uc3QKIHsKICAgICBTb3VwTWVz
c2FnZSogc291cE1lc3NhZ2UgPSBzb3VwX21lc3NhZ2VfbmV3KGh0dHBNZXRob2QoKS51dGY4KCku
ZGF0YSgpLCB1cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLS0gCjEuNy4xCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67254</attachid>
            <date>2010-09-10 15:59:53 -0700</date>
            <delta_ts>2010-09-22 02:04:42 -0700</delta_ts>
            <desc>Imported SoupURILoader to Webkit. New public API for HTTP cache</desc>
            <filename>0001-Imported-SoupURILoader-to-Webkit.-New-public-API-for.patch</filename>
            <type>text/plain</type>
            <size>170082</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">RnJvbSAzM2U4NDdjMDFiMzY0MWQ3ZWM0MWEwNTdiYjY4Njc4MWE0Y2ExYWIzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTZXJnaW8gVmlsbGFyIFNlbmluIDxzdmlsbGFyQGlnYWxpYS5j
b20+CkRhdGU6IFR1ZSwgNyBTZXAgMjAxMCAxMDoyNToyOSArMDIwMApTdWJqZWN0OiBbUEFUQ0gg
MS8zXSBJbXBvcnRlZCBTb3VwVVJJTG9hZGVyIHRvIFdlYmtpdC4gTmV3IHB1YmxpYyBBUEkgZm9y
IEhUVFAgY2FjaGUKCi0tLQogQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAgIDEwICsKIEdOVW1ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgICAgNiArLQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAgMTkzICsrKwogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIwICstCiAuLi4vc291cC9jYWNoZS9zb3Vw
LWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uYyAgICAgICB8ICAxOTkgKysrCiAuLi4vc291cC9jYWNo
ZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uaCAgICAgICB8ICAgNjEgKwogLi4uL25ldHdv
cmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmMgICAgfCAgOTIxICsrKysrKysr
KysrCiAuLi4vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0uaCAgICB8
ICAgNzYgKwogLi4uL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5jICAgICAg
ICAgfCAgMjA1ICsrKwogLi4uL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5o
ICAgICAgICAgfCAgIDUxICsKIC4uLi9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWZp
bGUuYyAgICAgICAgIHwgIDMxMyArKysrCiAuLi4vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVx
dWVzdC1maWxlLmggICAgICAgICB8ICAgNTMgKwogLi4uL25ldHdvcmsvc291cC9jYWNoZS9zb3Vw
LXJlcXVlc3QtaHR0cC5jICAgICAgICAgfCAgMzM5ICsrKysKIC4uLi9uZXR3b3JrL3NvdXAvY2Fj
aGUvc291cC1yZXF1ZXN0LWh0dHAuaCAgICAgICAgIHwgICA1MyArCiBXZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QuYyB8ICAyNzkgKysrKwogV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LmggfCAgIDkyICsrCiAuLi4v
cGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmMgICB8ICAxODYgKysr
CiAuLi4vcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmggICB8ICAg
ODAgKwogLi4uL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS1wcml2YXRlLmgg
fCAgIDQxICsKIC4uLi9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUuYyAgICAg
ICAgIHwgMTY1MiArKysrKysrKysrKysrKysrKysrKwogLi4uL25ldHdvcmsvc291cC9jYWNoZS93
ZWJraXQvc291cC1jYWNoZS5oICAgICAgICAgfCAgIDk1ICsrCiBXZWJLaXRUb29scy9DaGFuZ2VM
b2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDkgKwogV2ViS2l0VG9vbHMvR05V
bWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKIGF1dG90b29scy93
ZWJraXQubTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArLQogMjQgZmls
ZXMgY2hhbmdlZCwgNDkzNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtZGlyZWN0
b3J5LWlucHV0LXN0cmVhbS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmgKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAt
aW5wdXQtc3RyZWFtLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmgKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5j
CiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUv
c291cC1yZXF1ZXN0LWRhdGEuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZmlsZS5o
CiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUv
c291cC1yZXF1ZXN0LWh0dHAuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRwLmgKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QuYwogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAt
cmVxdWVzdC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmgKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNo
ZS1wcml2YXRlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUuaAoKZGlmZiAt
LWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA0MzZlNDg1Li40YzdjZTMyIDEwMDY0
NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAt
MDktMDYgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gQWRkIEhUVFAg
Y2FjaGluZyBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00NDI2MQorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IGFkZGVkIHBhdGhzIGZv
ciBzb3VwIEhUVFAgY2FjaGUgY29kZQorICAgICAgICAqIGF1dG90b29scy93ZWJraXQubTQ6IHVw
Z3JhZGVkIHJlcXVpcmVkIGdsaWIgdmVyc2lvbgorCiAyMDEwLTA5LTA0ICBMdWNhcyBEZSBNYXJj
aGkgIDxsdWNhcy5kZW1hcmNoaUBwcm9mdXNpb24ubW9iaT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KZGlmZiAtLWdpdCBhL0dOVW1ha2VmaWxlLmFt
IGIvR05VbWFrZWZpbGUuYW0KaW5kZXggNzQ3MTI1ZC4uZTA1YmU1NCAxMDA2NDQKLS0tIGEvR05V
bWFrZWZpbGUuYW0KKysrIGIvR05VbWFrZWZpbGUuYW0KQEAgLTI5OSw2ICsyOTksNyBAQCBnbG9i
YWxfY3BwZmxhZ3MgKz0gXAogZW5kaWYKIAogd2Via2l0Z3RrX3N0YXRpY19oX2FwaSArPSBcCisJ
JChzcmNkaXIpL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3Vw
LWNhY2hlLmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaCBcCiAJJChz
cmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaCBcCiAJJChzcmNkaXIpL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmggXApAQCAtMzA2LDYgKzMwNyw3IEBAIHdl
YmtpdGd0a19zdGF0aWNfaF9hcGkgKz0gXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRoaXR0ZXN0cmVzdWx0LmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXRuZXR3b3JrcmVxdWVzdC5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
bmV0d29ya3Jlc3BvbnNlLmggXAorCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRz
ZWN1cml0eW9yaWdpbi5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c291
cGF1dGhkaWFsb2cuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmJh
Y2tmb3J3YXJkbGlzdC5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vi
ZGF0YXNvdXJjZS5oIFwKQEAgLTMxOSw4ICszMjEsNyBAQCB3ZWJraXRndGtfc3RhdGljX2hfYXBp
ICs9IFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vic2V0dGluZ3MuaCBc
CiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYndpbmRvd2ZlYXR1cmVzLmgg
XAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmggXAotCSQoc3Jj
ZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkYXRhYmFzZS5oIFwKLQkkKHNyY2Rpcikv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW4uaAorCSQoc3JjZGlyKS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkYXRhYmFzZS5oCiAKIHdlYmtpdGd0a19idWlsdF9oX2Fw
aSArPSBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmVyc2lvbi5oCkBAIC01NDIsNiArNTQz
LDcgQEAgd2Via2l0X3Rlc3RzX2NmbGFncyA9IFwKIAktZm5vLXN0cmljdC1hbGlhc2luZyBcCiAJ
LUkkKHNyY2RpcikvSmF2YVNjcmlwdENvcmUvRm9yd2FyZGluZ0hlYWRlcnMgXAogCS1JJChzcmNk
aXIpL1dlYktpdC9ndGsgXAorCS1JJChzcmNkaXIpL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL2NhY2hlIFwKIAktSSQodG9wX2J1aWxkZGlyKS9XZWJLaXQvZ3RrIFwKIAktSSQodG9wX2J1
aWxkZGlyKS9EZXJpdmVkU291cmNlcyBcCiAJLUkkKHRvcF9zcmNkaXIpL1dlYkNvcmUvYmluZGlu
Z3MgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwpp
bmRleCBiMDBkMzdiLi43YTg0OWM4IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysg
Yi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5NiBAQAorMjAxMC0wOS0wNiAgU2VyZ2lv
IFZpbGxhciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBBZGQgSFRUUCBjYWNoaW5nIHN1cHBv
cnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0MjYx
CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFu
ZGxlSW50ZXJuYWw6OlJlc291cmNlSGFuZGxlSW50ZXJuYWwpOgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6flJlc291cmNlSGFuZGxlSW50ZXJuYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6On5SZXNvdXJjZUhhbmRsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpyZXN0YXJ0ZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpnb3RDaHVua0Nh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlRGF0YVVybCk6CisgICAgICAgIChXZWJD
b3JlOjpjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6c2Vu
ZFJlcXVlc3RDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpzdGFydEh0dHApOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3QuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OnVwZGF0ZVNvdXBNZXNzYWdlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmM6
IEFkZGVkLgorICAgICAgICAoc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX3BhcnNlX2luZm8p
OgorICAgICAgICAoc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX3JlYWRfbmV4dF9maWxlKToK
KyAgICAgICAgKHNvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9yZWFkKToKKyAgICAgICAgKHNv
dXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9jbG9zZSk6CisgICAgICAgIChzb3VwX2RpcmVjdG9y
eV9pbnB1dF9zdHJlYW1fY2xhc3NfaW5pdCk6CisgICAgICAgIChzb3VwX2RpcmVjdG9yeV9pbnB1
dF9zdHJlYW1faW5pdCk6CisgICAgICAgIChzb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fbmV3
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1kaXJlY3Rvcnkt
aW5wdXQtc3RyZWFtLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9j
YWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmM6IEFkZGVkLgorICAgICAgICAoc291cF9odHRw
X2lucHV0X3N0cmVhbV9maW5hbGl6ZSk6CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFt
X2NsYXNzX2luaXQpOgorICAgICAgICAoc291cF9odHRwX2lucHV0X3N0cmVhbV9zZWVrYWJsZV9p
ZmFjZV9pbml0KToKKyAgICAgICAgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1faW5pdCk6CisgICAg
ICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3F1ZXVlX21lc3NhZ2UpOgorICAgICAgICAoc291
cF9odHRwX2lucHV0X3N0cmVhbV9uZXcpOgorICAgICAgICAoc291cF9odHRwX2lucHV0X3N0cmVh
bV9nb3RfaGVhZGVycyk6CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dvdF9jaHVu
ayk6CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2ZpbmlzaGVkKToKKyAgICAgICAg
KHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2FuY2VsbGVkKToKKyAgICAgICAgKHNvdXBfaHR0cF9p
bnB1dF9zdHJlYW1fcHJlcGFyZV9mb3JfaW8pOgorICAgICAgICAoc291cF9odHRwX2lucHV0X3N0
cmVhbV9kb25lX2lvKToKKyAgICAgICAgKHNldF9lcnJvcl9pZl9odHRwX2ZhaWxlZCk6CisgICAg
ICAgIChyZWFkX2Zyb21fbGVmdG92ZXIpOgorICAgICAgICAoc291cF9odHRwX2lucHV0X3N0cmVh
bV9zZW5kX2ludGVybmFsKToKKyAgICAgICAgKHNlbmRfc3luY19maW5pc2hlZCk6CisgICAgICAg
IChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmQpOgorICAgICAgICAoc291cF9odHRwX2lucHV0
X3N0cmVhbV9yZWFkKToKKyAgICAgICAgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2UpOgor
ICAgICAgICAod3JhcHBlcl9jYWxsYmFjayk6CisgICAgICAgIChzZW5kX2FzeW5jX3RocmVhZCk6
CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmNfaW5fdGhyZWFkKToK
KyAgICAgICAgKHNlbmRfYXN5bmNfZmluaXNoZWQpOgorICAgICAgICAoc291cF9odHRwX2lucHV0
X3N0cmVhbV9zZW5kX2FzeW5jX2ludGVybmFsKToKKyAgICAgICAgKHNvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fc2VuZF9hc3luYyk6CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRf
ZmluaXNoKToKKyAgICAgICAgKHJlYWRfYXN5bmNfZG9uZSk6CisgICAgICAgIChzb3VwX2h0dHBf
aW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMpOgorICAgICAgICAoc291cF9odHRwX2lucHV0X3N0cmVh
bV9yZWFkX2ZpbmlzaCk6CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlX2Fz
eW5jKToKKyAgICAgICAgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2VfZmluaXNoKToKKyAg
ICAgICAgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fdGVsbCk6CisgICAgICAgIChzb3VwX2h0dHBf
aW5wdXRfc3RyZWFtX2Nhbl9zZWVrKToKKyAgICAgICAgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1f
c2Vlayk6CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nhbl90cnVuY2F0ZSk6Cisg
ICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3RydW5jYXRlKToKKyAgICAgICAgKHNvdXBf
aHR0cF9pbnB1dF9zdHJlYW1fZ2V0X21lc3NhZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmg6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5jOiBBZGRlZC4K
KyAgICAgICAgKHNvdXBfcmVxdWVzdF9kYXRhX2luaXQpOgorICAgICAgICAoc291cF9yZXF1ZXN0
X2RhdGFfZmluYWxpemUpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2RhdGFfY2hlY2tfdXJpKToK
KyAgICAgICAgKHVyaV9kZWNvZGVkX2NvcHkpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2RhdGFf
c2VuZCk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfZGF0YV9nZXRfY29udGVudF9sZW5ndGgpOgor
ICAgICAgICAoc291cF9yZXF1ZXN0X2RhdGFfZ2V0X2NvbnRlbnRfdHlwZSk6CisgICAgICAgIChz
b3VwX3JlcXVlc3RfZGF0YV9jbGFzc19pbml0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWRhdGEuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmM6IEFkZGVkLgorICAgICAg
ICAoc291cF9yZXF1ZXN0X2ZpbGVfZ2V0X2ZpbGUpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2Zp
bGVfaW5pdCk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfZmlsZV9maW5hbGl6ZSk6CisgICAgICAg
IChzb3VwX3JlcXVlc3RfZmlsZV9jaGVja191cmkpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2Zp
bGVfZnRwX21haW5fbG9vcF9xdWl0KToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9maWxlX2Vuc3Vy
ZV9maWxlX2Z0cCk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfZmlsZV9lbnN1cmVfZmlsZSk6Cisg
ICAgICAgIChzb3VwX3JlcXVlc3RfZmlsZV9zZW5kKToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9m
aWxlX3NlbmRfYXN5bmNfdGhyZWFkKToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9maWxlX3NlbmRf
YXN5bmMpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2ZpbGVfc2VuZF9maW5pc2gpOgorICAgICAg
ICAoc291cF9yZXF1ZXN0X2ZpbGVfZ2V0X2NvbnRlbnRfbGVuZ3RoKToKKyAgICAgICAgKHNvdXBf
cmVxdWVzdF9maWxlX2dldF9jb250ZW50X3R5cGUpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2Zp
bGVfY2xhc3NfaW5pdCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3Nv
dXAtcmVxdWVzdC1maWxlLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291
cC9jYWNoZS9zb3VwLXJlcXVlc3QtaHR0cC5jOiBBZGRlZC4KKyAgICAgICAgKHNvdXBfcmVxdWVz
dF9odHRwX2dldF9tZXNzYWdlKToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9odHRwX2luaXQpOgor
ICAgICAgICAoc291cF9yZXF1ZXN0X2h0dHBfY2hlY2tfdXJpKToKKyAgICAgICAgKHNvdXBfcmVx
dWVzdF9odHRwX2ZpbmFsaXplKToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9odHRwX3NlbmQpOgor
ICAgICAgICAoc2VudF9hc3luYyk6CisgICAgICAgIChjb25kaXRpb25hbF9nZXRfcmVhZHlfY2Ip
OgorICAgICAgICAoc2VuZF9hc3luY19jYik6CisgICAgICAgIChzb3VwX3JlcXVlc3RfaHR0cF9z
ZW5kX2FzeW5jKToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9odHRwX3NlbmRfZmluaXNoKToKKyAg
ICAgICAgKHNvdXBfcmVxdWVzdF9odHRwX2dldF9jb250ZW50X2xlbmd0aCk6CisgICAgICAgIChz
b3VwX3JlcXVlc3RfaHR0cF9nZXRfY29udGVudF90eXBlKToKKyAgICAgICAgKHNvdXBfcmVxdWVz
dF9odHRwX2NsYXNzX2luaXQpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9jYWNo
ZS9zb3VwLXJlcXVlc3QtaHR0cC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LmM6IEFkZGVkLgorICAgICAgICAoc291cF9yZXF1ZXN0
X2luaXQpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2ZpbmFsaXplKToKKyAgICAgICAgKHNvdXBf
cmVxdWVzdF9zZXRfcHJvcGVydHkpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2dldF9wcm9wZXJ0
eSk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfaW5pdGFibGVfaW5pdCk6CisgICAgICAgIChzb3Vw
X3JlcXVlc3RfZGVmYXVsdF9jaGVja191cmkpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2RlZmF1
bHRfc2VuZF9hc3luYyk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfZGVmYXVsdF9zZW5kX2Zpbmlz
aCk6CisgICAgICAgIChzb3VwX3JlcXVlc3Rfc2VuZCk6CisgICAgICAgIChzb3VwX3JlcXVlc3Rf
c2VuZF9hc3luYyk6CisgICAgICAgIChzb3VwX3JlcXVlc3Rfc2VuZF9maW5pc2gpOgorICAgICAg
ICAoc291cF9yZXF1ZXN0X2NsYXNzX2luaXQpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2luaXRh
YmxlX2ludGVyZmFjZV9pbml0KToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9nZXRfdXJpKToKKyAg
ICAgICAgKHNvdXBfcmVxdWVzdF9nZXRfc2Vzc2lvbik6CisgICAgICAgIChzb3VwX3JlcXVlc3Rf
Z2V0X2NvbnRlbnRfbGVuZ3RoKToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9nZXRfY29udGVudF90
eXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0
Lmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJl
cXVlc3Rlci5jOiBBZGRlZC4KKyAgICAgICAgKHNvdXBfcmVxdWVzdGVyX2luaXQpOgorICAgICAg
ICAoZmluYWxpemUpOgorICAgICAgICAoc291cF9yZXF1ZXN0ZXJfY2xhc3NfaW5pdCk6CisgICAg
ICAgIChpbml0X3JlcXVlc3RfdHlwZXMpOgorICAgICAgICAoc291cF9yZXF1ZXN0ZXJfbmV3KToK
KyAgICAgICAgKHNvdXBfcmVxdWVzdGVyX3JlcXVlc3QpOgorICAgICAgICAoc291cF9yZXF1ZXN0
ZXJfcmVxdWVzdF91cmkpOgorICAgICAgICAoc291cF9zY2hlbWVfaXNfdmFsaWQpOgorICAgICAg
ICAoc291cF9yZXF1ZXN0ZXJfYWRkX3Byb3RvY29sKToKKyAgICAgICAgKHNvdXBfcmVxdWVzdGVy
X3JlbW92ZV9wcm90b2NvbCk6CisgICAgICAgIChzb3VwX2Vycm9yX3F1YXJrKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuaDogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLXBy
aXZhdGUuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dl
YmtpdC9zb3VwLWNhY2hlLmM6IEFkZGVkLgorICAgICAgICAoZ2V0X2NhY2hlYWJpbGl0eSk6Cisg
ICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9mcmVlKToKKyAgICAgICAgKGNvcHlfaGVh
ZGVycyk6CisgICAgICAgICh1cGRhdGVfaGVhZGVycyk6CisgICAgICAgICh3ZWJraXRfc291cF9j
YWNoZV9lbnRyeV9nZXRfY3VycmVudF9hZ2UpOgorICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVf
ZW50cnlfaXNfZnJlc2hfZW5vdWdoKToKKyAgICAgICAgKHNvdXBfbWVzc2FnZV9nZXRfY2FjaGVf
a2V5KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X3NldF9mcmVzaG5lc3MpOgor
ICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfZW50cnlfbmV3KToKKyAgICAgICAgKHdlYmtpdF9z
b3VwX2NhY2hlX3dyaXRpbmdfZml4dHVyZV9mcmVlKToKKyAgICAgICAgKGNsb3NlX3JlYWR5X2Ni
KToKKyAgICAgICAgKHdyaXRlX3JlYWR5X2NiKToKKyAgICAgICAgKG1zZ19nb3RfY2h1bmtfY2Ip
OgorICAgICAgICAobXNnX2dvdF9ib2R5X2NiKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hl
X2VudHJ5X2RlbGV0ZSk6CisgICAgICAgIChscnVfY29tcGFyZV9mdW5jKToKKyAgICAgICAgKGNh
Y2hlX2FjY2VwdHNfZW50cmllc19vZl9zaXplKToKKyAgICAgICAgKG1ha2Vfcm9vbV9mb3JfbmV3
X2VudHJ5KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2luc2VydF9ieV9rZXkp
OgorICAgICAgICAobXNnX3Jlc3RhcnRlZF9jYik6CisgICAgICAgIChhcHBlbmRfdG9fcmVhZHlf
Y2IpOgorICAgICAgICAobXNnX2dvdF9oZWFkZXJzX2NiKToKKyAgICAgICAgKHdlYmtpdF9zb3Vw
X2NhY2hlX3NlbmRfcmVzcG9uc2UpOgorICAgICAgICAocmVxdWVzdF9zdGFydGVkKToKKyAgICAg
ICAgKGF0dGFjaCk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9zZXNzaW9uX2ZlYXR1cmVf
aW5pdCk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9pbml0KToKKyAgICAgICAgKHdlYmtp
dF9zb3VwX2NhY2hlX2ZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX3NldF9w
cm9wZXJ0eSk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9nZXRfcHJvcGVydHkpOgorICAg
ICAgICAod2Via2l0X3NvdXBfY2FjaGVfY29uc3RydWN0ZWQpOgorICAgICAgICAod2Via2l0X3Nv
dXBfY2FjaGVfdHlwZV9nZXRfdHlwZSk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9jbGFz
c19pbml0KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX25ldyk6CisgICAgICAgICh3ZWJr
aXRfc291cF9jYWNoZV9oYXNfcmVzcG9uc2UpOgorICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVf
Z2V0X2NhY2hlYWJpbGl0eSk6CisgICAgICAgIChmb3JjZV9mbHVzaF90aW1lb3V0KToKKyAgICAg
ICAgKHdlYmtpdF9zb3VwX2NhY2hlX2ZsdXNoKToKKyAgICAgICAgKHJlbW92ZV9jYWNoZV9pdGVt
KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2NsZWFyKToKKyAgICAgICAgKHdlYmtpdF9z
b3VwX2NhY2hlX2dlbmVyYXRlX2NvbmRpdGlvbmFsX3JlcXVlc3QpOgorICAgICAgICAocGFja19l
bnRyeSk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9kdW1wKToKKyAgICAgICAgKHdlYmtp
dF9zb3VwX2NhY2hlX2xvYWQpOgorICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfc2V0X21heF9z
aXplKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2dldF9tYXhfc2l6ZSk6CisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLmg6IEFkZGVk
LgorCiAyMDEwLTA4LTMxICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IGQzNjE4MTAu
LmU5ZmQ4ZDggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbQpAQCAtNzcsNyArNzcsOSBAQCB3ZWJjb3JlZ3RrX2NwcGZsYWdzICs9
IFwKIAktSSQoc3JjZGlyKS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lciBcCiAJ
LUkkKHNyY2RpcikvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsgXAogCS1JJChzcmNkaXIp
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrIFwKLQktSSQoc3JjZGlyKS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cAorCS1JJChzcmNkaXIpL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwIFwK
KwktSSQoc3JjZGlyKS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZSBcCisJLUkk
KHNyY2RpcikvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0CiAKIHdl
YmNvcmVfYnVpbHRfbm9zb3VyY2VzICs9IFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0RvY1R5
cGVTdHJpbmdzLmNwcCBcCkBAIC0yNTU0LDYgKzI1NTYsMjIgQEAgd2ViY29yZWd0a19zb3VyY2Vz
ICs9IFwKIAlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3Vw
LmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXNwb25zZS5o
IFwKIAlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlc3BvbnNlU291cC5j
cHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtZGlyZWN0b3J5
LWlucHV0LXN0cmVhbS5jIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9z
b3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvY2FjaGUvc291cC1odHRwLWlucHV0LXN0cmVhbS5jIFwKKwlXZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmggXAorCVdlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmMgXAorCVdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmggXAorCVdl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmMgXAor
CVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmgg
XAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRw
LmMgXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1o
dHRwLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVz
dC5jIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Qu
aCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIu
YyBcCisJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIu
aCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2Fj
aGUuYyBcCisJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAt
Y2FjaGUuaCBcCiAJV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5EYXRhR3RrLmNwcCBcCiAJV2Vi
Q29yZS9wbHVnaW5zL2d0ay9QbHVnaW5QYWNrYWdlR3RrLmNwcCBcCiAJV2ViQ29yZS9wbHVnaW5z
L2d0ay9QbHVnaW5WaWV3R3RrLmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uYyBiL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5j
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyM2FjNmYKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWRpcmVjdG9y
eS1pbnB1dC1zdHJlYW0uYwpAQCAtMCwwICsxLDE5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOCBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
ZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1
ZGUgInNvdXAtZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5oIgorCisjaW5jbHVkZSA8bGlic291cC9z
b3VwLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2RlZmlu
ZSBJTklUX1NUUklORyAiPGh0bWw+PGhlYWQ+PHRpdGxlPk9NRyE8L3RpdGxlPjwvaGVhZD48Ym9k
eT48dGFibGU+IgorI2RlZmluZSBFWElUX1NUUklORyAiPC90YWJsZT48L2h0bWw+IgorCitHX0RF
RklORV9UWVBFIChTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW0sIHNvdXBfZGlyZWN0b3J5X2lucHV0
X3N0cmVhbSwgR19UWVBFX0lOUFVUX1NUUkVBTSkKKworc3RhdGljIFNvdXBCdWZmZXIgKgorc291
cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX3BhcnNlX2luZm8gKFNvdXBEaXJlY3RvcnlJbnB1dFN0
cmVhbSAqIHN0cmVhbSwKKwkJCQkJR0ZpbGVJbmZvICogaW5mbykKK3sKKwlTb3VwQnVmZmVyICpi
dWZmZXI7CisJR1N0cmluZyAqc3RyaW5nOworCWNvbnN0IGNoYXIgKnM7CisJY2hhciAqZXNjYXBl
ZCwgKnBhdGgsICp4bWxfc3RyaW5nOworCisJaWYgKCFnX2ZpbGVfaW5mb19nZXRfbmFtZSAoaW5m
bykpCisJCXJldHVybiBOVUxMOworCisJcyA9IGdfZmlsZV9pbmZvX2dldF9kaXNwbGF5X25hbWUg
KGluZm8pOworCWlmICghcykgeworCQlzID0gZ19maWxlX2luZm9fZ2V0X25hbWUgKGluZm8pOwor
CQkvKiBGSVhNRTogY29udmVydCBzb21laG93PyAqLworCQlpZiAoIWdfdXRmOF92YWxpZGF0ZSAo
cywgLTEsIE5VTEwpKQorCQkJcmV0dXJuIE5VTEw7CisJfQorCXN0cmluZyA9IGdfc3RyaW5nX25l
dyAoIjx0cj4iKTsKKworCXhtbF9zdHJpbmcgPSBnX21hcmt1cF9lc2NhcGVfdGV4dCAocywgLTEp
OworCWVzY2FwZWQgPSBnX3VyaV9lc2NhcGVfc3RyaW5nIChnX2ZpbGVfaW5mb19nZXRfbmFtZSAo
aW5mbyksIE5VTEwsIEZBTFNFKTsKKwlwYXRoID0gZ19zdHJjb25jYXQgKHN0cmVhbS0+dXJpLCAi
LyIsIGVzY2FwZWQsIE5VTEwpOworCWdfZnJlZSAoZXNjYXBlZCk7CisJZ19zdHJpbmdfYXBwZW5k
X3ByaW50ZiAoc3RyaW5nLCAiPHRkPjxhIGhyZWY9XCIlc1wiPiVzPC9hPjwvdGQ+IiwgcGF0aCwg
eG1sX3N0cmluZyk7CisJZ19mcmVlIChwYXRoKTsKKwlnX2ZyZWUgKHhtbF9zdHJpbmcpOworCWdf
c3RyaW5nX2FwcGVuZCAoc3RyaW5nLCAiPC90cj4iKTsKKworCWJ1ZmZlciA9IHNvdXBfYnVmZmVy
X25ldyAoU09VUF9NRU1PUllfVEFLRSwgc3RyaW5nLT5zdHIsIHN0cmluZy0+bGVuKTsKKwlnX3N0
cmluZ19mcmVlIChzdHJpbmcsIEZBTFNFKTsKKworCXJldHVybiBidWZmZXI7Cit9CisKK3N0YXRp
YyBTb3VwQnVmZmVyICoKK3NvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9yZWFkX25leHRfZmls
ZSAoU291cERpcmVjdG9yeUlucHV0U3RyZWFtICAqc3RyZWFtLAorCQkJCQkgICAgR0NhbmNlbGxh
YmxlICAgICAgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJCSAgICBHRXJyb3IgICAgICAgICAg
ICAgICAgICAgKiplcnJvcikKK3sKKwlHRmlsZUluZm8gKmluZm87CisJU291cEJ1ZmZlciAqYnVm
ZmVyOworCUdFcnJvciAqZXJyID0gTlVMTDsKKworCWRvIHsKKwkJaW5mbyA9IGdfZmlsZV9lbnVt
ZXJhdG9yX25leHRfZmlsZSAoc3RyZWFtLT5lbnVtZXJhdG9yLCBjYW5jZWxsYWJsZSwgJmVycik7
CisJCWlmIChpbmZvID09IE5VTEwpIHsKKwkJCWlmIChlcnIpIHsKKwkJCQlnX3Byb3BhZ2F0ZV9l
cnJvciAoZXJyb3IsIGVycik7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9IGVsc2UgaWYgKCFzdHJl
YW0tPmRvbmUpIHsKKwkJCQlzdHJlYW0tPmRvbmUgPSBUUlVFOworCQkJCXJldHVybiBzb3VwX2J1
ZmZlcl9uZXcgKFNPVVBfTUVNT1JZX1NUQVRJQywKKwkJCQkJCQlFWElUX1NUUklORywKKwkJCQkJ
CQlzaXplb2YgKEVYSVRfU1RSSU5HKSk7CisJCQl9IGVsc2UgeworCQkJCXJldHVybiBOVUxMOwor
CQkJfQorCQl9CisKKwkJYnVmZmVyID0gc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX3BhcnNl
X2luZm8gKHN0cmVhbSwgaW5mbyk7CisJfSB3aGlsZSAoYnVmZmVyID09IE5VTEwpOworCisJcmV0
dXJuIGJ1ZmZlcjsKK30KKworc3RhdGljIGdzc2l6ZQorc291cF9kaXJlY3RvcnlfaW5wdXRfc3Ry
ZWFtX3JlYWQgKEdJbnB1dFN0cmVhbSAgKmlucHV0LAorCQkJCSAgdm9pZCAgICAgICAgICAqYnVm
ZmVyLAorCQkJCSAgZ3NpemUgY291bnQsCisJCQkJICBHQ2FuY2VsbGFibGUgICpjYW5jZWxsYWJs
ZSwKKwkJCQkgIEdFcnJvciAgICAgICAqKmVycm9yKQoreworCVNvdXBEaXJlY3RvcnlJbnB1dFN0
cmVhbSAqc3RyZWFtID0gU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNIChpbnB1dCk7CisJZ3Nz
aXplIHRvdGFsLCBzaXplOworCisJZm9yICh0b3RhbCA9IDA7IHRvdGFsIDwgY291bnQ7IHRvdGFs
ICs9IHNpemUpIHsKKwkJaWYgKHN0cmVhbS0+YnVmZmVyID09IE5VTEwpIHsKKwkJCXN0cmVhbS0+
YnVmZmVyID0gc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX3JlYWRfbmV4dF9maWxlIChzdHJl
YW0sIGNhbmNlbGxhYmxlLCBlcnJvcik7CisJCQlpZiAoc3RyZWFtLT5idWZmZXIgPT0gTlVMTCkg
eworCQkJCS8qIEZJWE1FOiBJcyB0aGlzIGNvcnJlY3Qgb3Igc2hvdWxkIHdlIGZvcndhcmQgdGhl
IGVycm9yPyAqLworCQkJCWlmICh0b3RhbCkKKwkJCQkJZ19jbGVhcl9lcnJvciAoZXJyb3IpOwor
CQkJCXJldHVybiB0b3RhbDsKKwkJCX0KKwkJfQorCisJCXNpemUgPSBNSU4gKHN0cmVhbS0+YnVm
ZmVyLT5sZW5ndGgsIGNvdW50IC0gdG90YWwpOworCQltZW1jcHkgKChjaGFyICopYnVmZmVyICsg
dG90YWwsIHN0cmVhbS0+YnVmZmVyLT5kYXRhLCBzaXplKTsKKwkJaWYgKHNpemUgPT0gc3RyZWFt
LT5idWZmZXItPmxlbmd0aCkgeworCQkJc291cF9idWZmZXJfZnJlZSAoc3RyZWFtLT5idWZmZXIp
OworCQkJc3RyZWFtLT5idWZmZXIgPSBOVUxMOworCQl9IGVsc2UgeworCQkJU291cEJ1ZmZlciAq
c3ViID0gc291cF9idWZmZXJfbmV3X3N1YmJ1ZmZlciAoc3RyZWFtLT5idWZmZXIsCisJCQkJCQkJ
CSAgICAgc2l6ZSwKKwkJCQkJCQkJICAgICBzdHJlYW0tPmJ1ZmZlci0+bGVuZ3RoIC0gc2l6ZSk7
CisJCQlzb3VwX2J1ZmZlcl9mcmVlIChzdHJlYW0tPmJ1ZmZlcik7CisJCQlzdHJlYW0tPmJ1ZmZl
ciA9IHN1YjsKKwkJfQorCX0KKworCXJldHVybiB0b3RhbDsKK30KKworc3RhdGljIGdib29sZWFu
Citzb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fY2xvc2UgKEdJbnB1dFN0cmVhbSAgKmlucHV0
LAorCQkJCSAgIEdDYW5jZWxsYWJsZSAgKmNhbmNlbGxhYmxlLAorCQkJCSAgIEdFcnJvciAgICAg
ICAqKmVycm9yKQoreworCVNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbSAqc3RyZWFtID0gU09VUF9E
SVJFQ1RPUllfSU5QVVRfU1RSRUFNIChpbnB1dCk7CisJZ2Jvb2xlYW4gcmVzdWx0OworCisJaWYg
KHN0cmVhbS0+YnVmZmVyKSB7CisJCXNvdXBfYnVmZmVyX2ZyZWUgKHN0cmVhbS0+YnVmZmVyKTsK
KwkJc3RyZWFtLT5idWZmZXIgPSBOVUxMOworCX0KKworCXJlc3VsdCA9IGdfZmlsZV9lbnVtZXJh
dG9yX2Nsb3NlIChzdHJlYW0tPmVudW1lcmF0b3IsCisJCQkJCSAgY2FuY2VsbGFibGUsCisJCQkJ
CSAgZXJyb3IpOworCWdfb2JqZWN0X3VucmVmIChzdHJlYW0tPmVudW1lcmF0b3IpOworCXN0cmVh
bS0+ZW51bWVyYXRvciA9IE5VTEw7CisKKwlnX2ZyZWUgKHN0cmVhbS0+dXJpKTsKKwlzdHJlYW0t
PnVyaSA9IE5VTEw7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorc291cF9k
aXJlY3RvcnlfaW5wdXRfc3RyZWFtX2NsYXNzX2luaXQgKFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVh
bUNsYXNzICpzdHJlYW1fY2xhc3MpCit7CisJR0lucHV0U3RyZWFtQ2xhc3MgKmlucHV0c3RyZWFt
X2NsYXNzID0gR19JTlBVVF9TVFJFQU1fQ0xBU1MgKHN0cmVhbV9jbGFzcyk7CisKKwlpbnB1dHN0
cmVhbV9jbGFzcy0+cmVhZF9mbiA9IHNvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9yZWFkOwor
CWlucHV0c3RyZWFtX2NsYXNzLT5jbG9zZV9mbiA9IHNvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVh
bV9jbG9zZTsKK30KKworc3RhdGljIHZvaWQKK3NvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9p
bml0IChTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW0gKnN0cmVhbSkKK3sKKwlzdHJlYW0tPmJ1ZmZl
ciA9IHNvdXBfYnVmZmVyX25ldyAoU09VUF9NRU1PUllfU1RBVElDLAorCQkJCQkgIElOSVRfU1RS
SU5HLAorCQkJCQkgIHNpemVvZiAoSU5JVF9TVFJJTkcpKTsKK30KKworR0lucHV0U3RyZWFtICoK
K3NvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9uZXcgKEdGaWxlRW51bWVyYXRvciAqZW51bWVy
YXRvciwKKwkJCQkgU291cFVSSSAgICAgICAgICp1cmkpCit7CisJR0lucHV0U3RyZWFtICpzdHJl
YW07CisKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoR19JU19GSUxFX0VOVU1FUkFUT1IgKGVudW1l
cmF0b3IpLCBOVUxMKTsKKwlnX3JldHVybl92YWxfaWZfZmFpbCAodXJpICE9IE5VTEwsIE5VTEwp
OworCisJc3RyZWFtID0gZ19vYmplY3RfbmV3IChTT1VQX1RZUEVfRElSRUNUT1JZX0lOUFVUX1NU
UkVBTSwgTlVMTCk7CisKKwlTT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0gKHN0cmVhbSktPmVu
dW1lcmF0b3IgPSBnX29iamVjdF9yZWYgKGVudW1lcmF0b3IpOworCVNPVVBfRElSRUNUT1JZX0lO
UFVUX1NUUkVBTSAoc3RyZWFtKS0+dXJpID0gc291cF91cmlfdG9fc3RyaW5nICh1cmksIEZBTFNF
KTsKKworCXJldHVybiBzdHJlYW07Cit9CisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL2NhY2hlL3NvdXAtZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5oIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFt
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQzMjNkMgotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtZGlyZWN0
b3J5LWlucHV0LXN0cmVhbS5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWZuZGVmIFNPVVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTV9ICisjZGVmaW5lIFNPVVBfRElSRUNU
T1JZX0lOUFVUX1NUUkVBTV9IIDEKKworI2luY2x1ZGUgPGdpby9naW8uaD4KKyNpbmNsdWRlIDxs
aWJzb3VwL3NvdXAtdHlwZXMuaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAtbWVzc2FnZS1ib2R5
Lmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBTT1VQX1RZUEVfRElSRUNUT1JZX0lOUFVU
X1NUUkVBTSAgICAgICAgICAgIChzb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fZ2V0X3R5cGUg
KCkpCisjZGVmaW5lIFNPVVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTShvYmopICAgICAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgU09VUF9UWVBFX0RJUkVDVE9SWV9J
TlBVVF9TVFJFQU0sIFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbSkpCisjZGVmaW5lIFNPVVBfRElS
RUNUT1JZX0lOUFVUX1NUUkVBTV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19D
QVNUICgoa2xhc3MpLCBTT1VQX1RZUEVfRElSRUNUT1JZX0lOUFVUX1NUUkVBTSwgU291cERpcmVj
dG9yeUlucHV0U3RyZWFtQ2xhc3MpKQorI2RlZmluZSBTT1VQX0lTX0RJUkVDVE9SWV9JTlBVVF9T
VFJFQU0ob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIFNP
VVBfVFlQRV9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNKSkKKyNkZWZpbmUgU09VUF9JU19ESVJFQ1RP
UllfSU5QVVRfU1RSRUFNX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChv
YmopLCBTT1VQX1RZUEVfRElSRUNUT1JZX0lOUFVUX1NUUkVBTSkpCisjZGVmaW5lIFNPVVBfRElS
RUNUT1JZX0lOUFVUX1NUUkVBTV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRf
Q0xBU1MgKChvYmopLCBTT1VQX1RZUEVfRElSRUNUT1JZX0lOUFVUX1NUUkVBTSwgU291cERpcmVj
dG9yeUlucHV0U3RyZWFtQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfU291cERpcmVjdG9yeUlu
cHV0U3RyZWFtIFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbTsKK3R5cGVkZWYgc3RydWN0IF9Tb3Vw
RGlyZWN0b3J5SW5wdXRTdHJlYW1DbGFzcyBTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW1DbGFzczsK
Kworc3RydWN0IF9Tb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW0geworCUdJbnB1dFN0cmVhbSBwYXJl
bnQ7CisKKwlHRmlsZUVudW1lcmF0b3IgKmVudW1lcmF0b3I7CisJY2hhciAqdXJpOworCVNvdXBC
dWZmZXIgKmJ1ZmZlcjsKKwlnYm9vbGVhbiBkb25lOworfTsKKworc3RydWN0IF9Tb3VwRGlyZWN0
b3J5SW5wdXRTdHJlYW1DbGFzcyB7CisJR0lucHV0U3RyZWFtQ2xhc3MgcGFyZW50X2NsYXNzOwor
fTsKKworR1R5cGUgICAgICAgICAgc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX2dldF90eXBl
ICh2b2lkKTsKKworR0lucHV0U3RyZWFtICpzb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fbmV3
IChHRmlsZUVudW1lcmF0b3IgKmVudW1lcmF0b3IsCisJCQkJCSAgICAgICBTb3VwVVJJICAgICAg
ICAgKnVyaSk7CisKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFNPVVBfRElSRUNUT1JZX0lO
UFVUX1NUUkVBTV9IICovCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmMgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYWIyMTZiNgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0uYwpAQCAtMCww
ICsxLDkyMSBAQAorLyogc291cC1pbnB1dC1zdHJlYW0uYywgYmFzZWQgb24gZ3NvY2tldGlucHV0
c3RyZWFtLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNyBSZWQgSGF0LCBJbmMuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
CisgKiBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0
ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBs
YWNlLCBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisj
aW5jbHVkZSA8Y29uZmlnLmg+CisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPGds
aWIuaD4KKyNpbmNsdWRlIDxnaW8vZ2lvLmg+CisKKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4K
KworI2luY2x1ZGUgInNvdXAtaHR0cC1pbnB1dC1zdHJlYW0uaCIKKworc3RhdGljIHZvaWQgc291
cF9odHRwX2lucHV0X3N0cmVhbV9zZWVrYWJsZV9pZmFjZV9pbml0IChHU2Vla2FibGVJZmFjZSAq
c2Vla2FibGVfaWZhY2UpOworCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoU291cEhUVFBJbnB1
dFN0cmVhbSwgc291cF9odHRwX2lucHV0X3N0cmVhbSwgR19UWVBFX0lOUFVUX1NUUkVBTSwKKwkJ
CSBHX0lNUExFTUVOVF9JTlRFUkZBQ0UgKEdfVFlQRV9TRUVLQUJMRSwKKwkJCQkJCXNvdXBfaHR0
cF9pbnB1dF9zdHJlYW1fc2Vla2FibGVfaWZhY2VfaW5pdCkpCisKK3R5cGVkZWYgdm9pZCAoKlNv
dXBIVFRQSW5wdXRTdHJlYW1DYWxsYmFjaykoR0lucHV0U3RyZWFtICopOworCit0eXBlZGVmIHN0
cnVjdCB7CisJU291cFNlc3Npb24gKnNlc3Npb247CisJR01haW5Db250ZXh0ICphc3luY19jb250
ZXh0OworCVNvdXBNZXNzYWdlICptc2c7CisJZ2Jvb2xlYW4gZ290X2hlYWRlcnMsIGZpbmlzaGVk
OworCWdvZmZzZXQgb2Zmc2V0OworCisJR0NhbmNlbGxhYmxlICpjYW5jZWxsYWJsZTsKKwlHU291
cmNlICpjYW5jZWxfd2F0Y2g7CisJU291cEhUVFBJbnB1dFN0cmVhbUNhbGxiYWNrIGdvdF9oZWFk
ZXJzX2NiOworCVNvdXBIVFRQSW5wdXRTdHJlYW1DYWxsYmFjayBnb3RfY2h1bmtfY2I7CisJU291
cEhUVFBJbnB1dFN0cmVhbUNhbGxiYWNrIGZpbmlzaGVkX2NiOworCVNvdXBIVFRQSW5wdXRTdHJl
YW1DYWxsYmFjayBjYW5jZWxsZWRfY2I7CisKKwlndWNoYXIgKmxlZnRvdmVyX2J1ZmZlcjsKKwln
c2l6ZSBsZWZ0b3Zlcl9idWZzaXplLCBsZWZ0b3Zlcl9vZmZzZXQ7CisKKwlndWNoYXIgKmNhbGxl
cl9idWZmZXI7CisJZ3NpemUgY2FsbGVyX2J1ZnNpemUsIGNhbGxlcl9ucmVhZDsKKwlHQXN5bmNS
ZWFkeUNhbGxiYWNrIG91dHN0YW5kaW5nX2NhbGxiYWNrOworCUdTaW1wbGVBc3luY1Jlc3VsdCAq
cmVzdWx0OworfSBTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZTsKKyNkZWZpbmUgU09VUF9IVFRQ
X0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURShvKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRF
ICgobyksIFNPVVBfVFlQRV9IVFRQX0lOUFVUX1NUUkVBTSwgU291cEhUVFBJbnB1dFN0cmVhbVBy
aXZhdGUpKQorCisKK3N0YXRpYyBnc3NpemUgICBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWQg
KEdJbnB1dFN0cmVhbSAgICAgICAgICpzdHJlYW0sCisJCQkJCSAgICAgdm9pZCAgICAgICAgICAg
ICAgICAgKmJ1ZmZlciwKKwkJCQkJICAgICBnc2l6ZSBjb3VudCwKKwkJCQkJICAgICBHQ2FuY2Vs
bGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJCSAgICAgR0Vycm9yICAgICAgICAgICAg
ICAqKmVycm9yKTsKK3N0YXRpYyBnYm9vbGVhbiBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3Nl
IChHSW5wdXRTdHJlYW0gICAgICAgICAqc3RyZWFtLAorCQkJCQkgICAgICBHQ2FuY2VsbGFibGUg
ICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJCSAgICAgIEdFcnJvciAgICAgICAgICAgICAgKipl
cnJvcik7CitzdGF0aWMgdm9pZCAgICAgc291cF9odHRwX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5j
IChHSW5wdXRTdHJlYW0gICAgICAgICAqc3RyZWFtLAorCQkJCQkJICAgdm9pZCAgICAgICAgICAg
ICAgICAgKmJ1ZmZlciwKKwkJCQkJCSAgIGdzaXplIGNvdW50LAorCQkJCQkJICAgaW50IGlvX3By
aW9yaXR5LAorCQkJCQkJICAgR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJ
CQkJICAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKKwkJCQkJCSAgIGdwb2ludGVyIGRh
dGEpOworc3RhdGljIGdzc2l6ZSAgIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVhZF9maW5pc2gg
KEdJbnB1dFN0cmVhbSAgICAgICAgICpzdHJlYW0sCisJCQkJCQkgICAgR0FzeW5jUmVzdWx0ICAg
ICAgICAgKnJlc3VsdCwKKwkJCQkJCSAgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpOwor
c3RhdGljIHZvaWQgICAgIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2VfYXN5bmMgKEdJbnB1
dFN0cmVhbSAgICAgICAgICpzdHJlYW0sCisJCQkJCQkgICAgaW50IGlvX3ByaW9yaXR5LAorCQkJ
CQkJICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkJCSAgICBHQXN5
bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAorCQkJCQkJICAgIGdwb2ludGVyIGRhdGEpOworc3Rh
dGljIGdib29sZWFuIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2VfZmluaXNoIChHSW5wdXRT
dHJlYW0gICAgICAgICAqc3RyZWFtLAorCQkJCQkJICAgICBHQXN5bmNSZXN1bHQgICAgICAgICAq
cmVzdWx0LAorCQkJCQkJICAgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpOworCitzdGF0
aWMgZ29mZnNldCAgc291cF9odHRwX2lucHV0X3N0cmVhbV90ZWxsIChHU2Vla2FibGUgICAgICAg
ICAgICAqc2Vla2FibGUpOworCitzdGF0aWMgZ2Jvb2xlYW4gc291cF9odHRwX2lucHV0X3N0cmVh
bV9jYW5fc2VlayAoR1NlZWthYmxlICAgICAgICAgICAgKnNlZWthYmxlKTsKK3N0YXRpYyBnYm9v
bGVhbiBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlZWsgKEdTZWVrYWJsZSAgICAgICAgICAgICpz
ZWVrYWJsZSwKKwkJCQkJICAgICBnb2Zmc2V0IG9mZnNldCwKKwkJCQkJICAgICBHU2Vla1R5cGUg
dHlwZSwKKwkJCQkJICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJ
CSAgICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKTsKKworc3RhdGljIGdib29sZWFuIHNv
dXBfaHR0cF9pbnB1dF9zdHJlYW1fY2FuX3RydW5jYXRlIChHU2Vla2FibGUgICAgICAgICAgICAq
c2Vla2FibGUpOworc3RhdGljIGdib29sZWFuIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fdHJ1bmNh
dGUgKEdTZWVrYWJsZSAgICAgICAgICAgICpzZWVrYWJsZSwKKwkJCQkJCSBnb2Zmc2V0IG9mZnNl
dCwKKwkJCQkJCSBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJCQkgR0Vy
cm9yICAgICAgICAgICAgICAqKmVycm9yKTsKKworc3RhdGljIHZvaWQgc291cF9odHRwX2lucHV0
X3N0cmVhbV9nb3RfaGVhZGVycyAoU291cE1lc3NhZ2UgKm1zZywgZ3BvaW50ZXIgc3RyZWFtKTsK
K3N0YXRpYyB2b2lkIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ290X2NodW5rIChTb3VwTWVzc2Fn
ZSAqbXNnLCBTb3VwQnVmZmVyICpjaHVuaywgZ3BvaW50ZXIgc3RyZWFtKTsKK3N0YXRpYyB2b2lk
IHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZmluaXNoZWQgKFNvdXBNZXNzYWdlICptc2csIGdwb2lu
dGVyIHN0cmVhbSk7CisKK3N0YXRpYyB2b2lkCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2ZpbmFs
aXplIChHT2JqZWN0ICpvYmplY3QpCit7CisJU291cEhUVFBJbnB1dFN0cmVhbSAqc3RyZWFtID0g
U09VUF9IVFRQX0lOUFVUX1NUUkVBTSAob2JqZWN0KTsKKwlTb3VwSFRUUElucHV0U3RyZWFtUHJp
dmF0ZSAqcHJpdiA9IFNPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7
CisKKwlnX29iamVjdF91bnJlZiAocHJpdi0+c2Vzc2lvbik7CisKKwlnX3NpZ25hbF9oYW5kbGVy
c19kaXNjb25uZWN0X2J5X2Z1bmMgKHByaXYtPm1zZywgR19DQUxMQkFDSyAoc291cF9odHRwX2lu
cHV0X3N0cmVhbV9nb3RfaGVhZGVycyksIHN0cmVhbSk7CisJZ19zaWduYWxfaGFuZGxlcnNfZGlz
Y29ubmVjdF9ieV9mdW5jIChwcml2LT5tc2csIEdfQ0FMTEJBQ0sgKHNvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fZ290X2NodW5rKSwgc3RyZWFtKTsKKwlnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0
X2J5X2Z1bmMgKHByaXYtPm1zZywgR19DQUxMQkFDSyAoc291cF9odHRwX2lucHV0X3N0cmVhbV9m
aW5pc2hlZCksIHN0cmVhbSk7CisJZ19vYmplY3RfdW5yZWYgKHByaXYtPm1zZyk7CisJZ19mcmVl
IChwcml2LT5sZWZ0b3Zlcl9idWZmZXIpOworCisJaWYgKEdfT0JKRUNUX0NMQVNTIChzb3VwX2h0
dHBfaW5wdXRfc3RyZWFtX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKQorCQkoKkdfT0JKRUNUX0NM
QVNTIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKShvYmpl
Y3QpOworfQorCitzdGF0aWMgdm9pZAorc291cF9odHRwX2lucHV0X3N0cmVhbV9jbGFzc19pbml0
IChTb3VwSFRUUElucHV0U3RyZWFtQ2xhc3MgKmtsYXNzKQoreworCUdPYmplY3RDbGFzcyAqZ29i
amVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7CisJR0lucHV0U3RyZWFtQ2xhc3Mg
KnN0cmVhbV9jbGFzcyA9IEdfSU5QVVRfU1RSRUFNX0NMQVNTIChrbGFzcyk7CisKKwlnX3R5cGVf
Y2xhc3NfYWRkX3ByaXZhdGUgKGtsYXNzLCBzaXplb2YgKFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2
YXRlKSk7CisKKwlnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IHNvdXBfaHR0cF9pbnB1dF9zdHJl
YW1fZmluYWxpemU7CisKKwlzdHJlYW1fY2xhc3MtPnJlYWRfZm4gPSBzb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX3JlYWQ7CisJc3RyZWFtX2NsYXNzLT5jbG9zZV9mbiA9IHNvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fY2xvc2U7CisJc3RyZWFtX2NsYXNzLT5yZWFkX2FzeW5jID0gc291cF9odHRwX2lucHV0
X3N0cmVhbV9yZWFkX2FzeW5jOworCXN0cmVhbV9jbGFzcy0+cmVhZF9maW5pc2ggPSBzb3VwX2h0
dHBfaW5wdXRfc3RyZWFtX3JlYWRfZmluaXNoOworCXN0cmVhbV9jbGFzcy0+Y2xvc2VfYXN5bmMg
PSBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlX2FzeW5jOworCXN0cmVhbV9jbGFzcy0+Y2xv
c2VfZmluaXNoID0gc291cF9odHRwX2lucHV0X3N0cmVhbV9jbG9zZV9maW5pc2g7Cit9CisKK3N0
YXRpYyB2b2lkCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlZWthYmxlX2lmYWNlX2luaXQgKEdT
ZWVrYWJsZUlmYWNlICpzZWVrYWJsZV9pZmFjZSkKK3sKKwlzZWVrYWJsZV9pZmFjZS0+dGVsbCA9
IHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fdGVsbDsKKwlzZWVrYWJsZV9pZmFjZS0+Y2FuX3NlZWsg
PSBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nhbl9zZWVrOworCXNlZWthYmxlX2lmYWNlLT5zZWVr
ID0gc291cF9odHRwX2lucHV0X3N0cmVhbV9zZWVrOworCXNlZWthYmxlX2lmYWNlLT5jYW5fdHJ1
bmNhdGUgPSBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nhbl90cnVuY2F0ZTsKKwlzZWVrYWJsZV9p
ZmFjZS0+dHJ1bmNhdGVfZm4gPSBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3RydW5jYXRlOworfQor
CitzdGF0aWMgdm9pZAorc291cF9odHRwX2lucHV0X3N0cmVhbV9pbml0IChTb3VwSFRUUElucHV0
U3RyZWFtICpzdHJlYW0pCit7CisJOworfQorCitzdGF0aWMgdm9pZAorc291cF9odHRwX2lucHV0
X3N0cmVhbV9xdWV1ZV9tZXNzYWdlIChTb3VwSFRUUElucHV0U3RyZWFtICpzdHJlYW0pCit7CisJ
U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFN
X0dFVF9QUklWQVRFIChzdHJlYW0pOworCisJcHJpdi0+Z290X2hlYWRlcnMgPSBwcml2LT5maW5p
c2hlZCA9IEZBTFNFOworCisJLyogQWRkIGFuIGV4dHJhIHJlZiBzaW5jZSBzb3VwX3Nlc3Npb25f
cXVldWVfbWVzc2FnZSBzdGVhbHMgb25lICovCisJZ19vYmplY3RfcmVmIChwcml2LT5tc2cpOwor
CXNvdXBfc2Vzc2lvbl9xdWV1ZV9tZXNzYWdlIChwcml2LT5zZXNzaW9uLCBwcml2LT5tc2csIE5V
TEwsIE5VTEwpOworfQorCisvKioKKyAqIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fbmV3OgorICog
QHNlc3Npb246IHRoZSAjU291cFNlc3Npb24gdG8gdXNlCisgKiBAbXNnOiB0aGUgI1NvdXBNZXNz
YWdlIHdob3NlIHJlc3BvbnNlIHdpbGwgYmUgc3RyZWFtZWQKKyAqCisgKiBQcmVwYXJlcyB0byBz
ZW5kIEBtc2cgb3ZlciBAc2Vzc2lvbiwgYW5kIHJldHVybnMgYSAjR0lucHV0U3RyZWFtCisgKiB0
aGF0IGNhbiBiZSB1c2VkIHRvIHJlYWQgdGhlIHJlc3BvbnNlLgorICoKKyAqIEBtc2cgbWF5IG5v
dCBiZSBzZW50IHVudGlsIHRoZSBmaXJzdCByZWFkIGNhbGw7IGlmIHlvdSBuZWVkIHRvIGxvb2sK
KyAqIGF0IHRoZSBzdGF0dXMgY29kZSBvciByZXNwb25zZSBoZWFkZXJzIGJlZm9yZSByZWFkaW5n
IHRoZSBib2R5LCB5b3UKKyAqIGNhbiB1c2Ugc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kKCkg
b3Igc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jKCkKKyAqIHRvIGZvcmNlIHRoZSBt
ZXNzYWdlIHRvIGJlIHNlbnQgYW5kIHRoZSByZXNwb25zZSBoZWFkZXJzIHJlYWQuCisgKgorICog
SWYgQG1zZyBnZXRzIGEgbm9uLTJ4eCByZXN1bHQsIHRoZSBmaXJzdCByZWFkIChvciBzZW5kKSB3
aWxsIHJldHVybgorICogYW4gZXJyb3Igd2l0aCB0eXBlICVTT1VQX0hUVFBfSU5QVVRfU1RSRUFN
X0hUVFBfRVJST1IuCisgKgorICogSW50ZXJuYWxseSwgI1NvdXBIVFRQSW5wdXRTdHJlYW0gaXMg
aW1wbGVtZW50ZWQgdXNpbmcgYXN5bmNocm9ub3VzIEkvTywKKyAqIHNvIGlmIHlvdSBhcmUgdXNp
bmcgdGhlIHN5bmNocm9ub3VzIEFQSSAoZWcsCisgKiBnX2lucHV0X3N0cmVhbV9yZWFkKCkpLCB5
b3Ugc2hvdWxkIGNyZWF0ZSBhIG5ldyAjR01haW5Db250ZXh0IGFuZAorICogc2V0IGl0IGFzIHRo
ZSAlU09VUF9TRVNTSU9OX0FTWU5DX0NPTlRFWFQgcHJvcGVydHkgb24gQHNlc3Npb24uIChJZgor
ICogeW91IGRvbid0LCB0aGVuIHN5bmNocm9ub3VzICNHSW5wdXRTdHJlYW0gY2FsbHMgd2lsbCBj
YXVzZSB0aGUgbWFpbgorICogbG9vcCB0byBiZSBydW4gcmVjdXJzaXZlbHkuKSBUaGUgYXN5bmMg
I0dJbnB1dFN0cmVhbSBBUEkgd29ya3MgZmluZQorICogd2l0aCAlU09VUF9TRVNTSU9OX0FTWU5D
X0NPTlRFWFQgZWl0aGVyIHNldCBvciB1bnNldC4KKyAqCisgKiBSZXR1cm5zOiBhIG5ldyAjR0lu
cHV0U3RyZWFtLgorICoqLworU291cEhUVFBJbnB1dFN0cmVhbSAqCitzb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX25ldyAoU291cFNlc3Npb24gKnNlc3Npb24sIFNvdXBNZXNzYWdlICptc2cpCit7CisJ
U291cEhUVFBJbnB1dFN0cmVhbSAqc3RyZWFtOworCVNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRl
ICpwcml2OworCisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFNPVVBfSVNfTUVTU0FHRSAobXNnKSwg
TlVMTCk7CisKKwlzdHJlYW0gPSBnX29iamVjdF9uZXcgKFNPVVBfVFlQRV9IVFRQX0lOUFVUX1NU
UkVBTSwgTlVMTCk7CisJcHJpdiA9IFNPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUg
KHN0cmVhbSk7CisKKwlwcml2LT5zZXNzaW9uID0gZ19vYmplY3RfcmVmIChzZXNzaW9uKTsKKwlw
cml2LT5hc3luY19jb250ZXh0ID0gc291cF9zZXNzaW9uX2dldF9hc3luY19jb250ZXh0IChzZXNz
aW9uKTsKKwlwcml2LT5tc2cgPSBnX29iamVjdF9yZWYgKG1zZyk7CisKKwlnX3NpZ25hbF9jb25u
ZWN0IChtc2csICJnb3RfaGVhZGVycyIsCisJCQkgIEdfQ0FMTEJBQ0sgKHNvdXBfaHR0cF9pbnB1
dF9zdHJlYW1fZ290X2hlYWRlcnMpLCBzdHJlYW0pOworCWdfc2lnbmFsX2Nvbm5lY3QgKG1zZywg
ImdvdF9jaHVuayIsCisJCQkgIEdfQ0FMTEJBQ0sgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ290
X2NodW5rKSwgc3RyZWFtKTsKKwlnX3NpZ25hbF9jb25uZWN0IChtc2csICJmaW5pc2hlZCIsCisJ
CQkgIEdfQ0FMTEJBQ0sgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZmluaXNoZWQpLCBzdHJlYW0p
OworCisJc291cF9odHRwX2lucHV0X3N0cmVhbV9xdWV1ZV9tZXNzYWdlIChzdHJlYW0pOworCXJl
dHVybiBzdHJlYW07Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dv
dF9oZWFkZXJzIChTb3VwTWVzc2FnZSAqbXNnLCBncG9pbnRlciBzdHJlYW0pCit7CisJU291cEhU
VFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9Q
UklWQVRFIChzdHJlYW0pOworCisJLyogSWYgdGhlIHN0YXR1cyBpcyB1bnN1Y2Nlc3NmdWwsIHdl
IGp1c3QgaWdub3JlIHRoZSBzaWduYWwgYW5kIGxldAorCSAqIGxpYnNvdXAga2VlcCBnb2luZyAo
ZXZlbnR1YWxseSBlaXRoZXIgaXQgd2lsbCByZXF1ZXVlIHRoZSByZXF1ZXN0CisJICogKGFmdGVy
IGhhbmRsaW5nIGF1dGhlbnRpY2F0aW9uL3JlZGlyZWN0aW9uKSwgb3IgZWxzZSB0aGUKKwkgKiAi
ZmluaXNoZWQiIGhhbmRsZXIgd2lsbCBydW4pLgorCSAqLworCWlmICghU09VUF9TVEFUVVNfSVNf
U1VDQ0VTU0ZVTCAobXNnLT5zdGF0dXNfY29kZSkpCisJCXJldHVybjsKKworCXByaXYtPmdvdF9o
ZWFkZXJzID0gVFJVRTsKKwlpZiAoIXByaXYtPmNhbGxlcl9idWZmZXIpIHsKKwkJLyogTm90IHJl
YWR5IHRvIHJlYWQgdGhlIGJvZHkgeWV0ICovCisJCXNvdXBfc2Vzc2lvbl9wYXVzZV9tZXNzYWdl
IChwcml2LT5zZXNzaW9uLCBtc2cpOworCX0KKworCWlmIChwcml2LT5nb3RfaGVhZGVyc19jYikK
KwkJcHJpdi0+Z290X2hlYWRlcnNfY2IgKHN0cmVhbSk7Cit9CisKK3N0YXRpYyB2b2lkCitzb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX2dvdF9jaHVuayAoU291cE1lc3NhZ2UgKm1zZywgU291cEJ1ZmZl
ciAqY2h1bmtfYnVmZmVyLAorCQkJCSAgZ3BvaW50ZXIgc3RyZWFtKQoreworCVNvdXBIVFRQSW5w
dXRTdHJlYW1Qcml2YXRlICpwcml2ID0gU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFU
RSAoc3RyZWFtKTsKKwljb25zdCBnY2hhciAqY2h1bmsgPSBjaHVua19idWZmZXItPmRhdGE7CisJ
Z3NpemUgY2h1bmtfc2l6ZSA9IGNodW5rX2J1ZmZlci0+bGVuZ3RoOworCisJLyogV2Ugb25seSBw
YXkgYXR0ZW50aW9uIHRvIHRoZSBjaHVuayBpZiBpdCdzIHBhcnQgb2YgYSBzdWNjZXNzZnVsCisJ
ICogcmVzcG9uc2UuCisJICovCisJaWYgKCFTT1VQX1NUQVRVU19JU19TVUNDRVNTRlVMIChtc2ct
PnN0YXR1c19jb2RlKSkKKwkJcmV0dXJuOworCisJLyogU2FuaXR5IGNoZWNrICovCisJaWYgKHBy
aXYtPmNhbGxlcl9idWZzaXplID09IDAgfHwgcHJpdi0+bGVmdG92ZXJfYnVmc2l6ZSAhPSAwKQor
CQlnX3dhcm5pbmcgKCJzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dvdF9jaHVuayBjYWxsZWQgYWdh
aW4gYmVmb3JlIHByZXZpb3VzIGNodW5rIHdhcyBwcm9jZXNzZWQiKTsKKworCS8qIENvcHkgd2hh
dCB3ZSBjYW4gaW50byBwcml2LT5jYWxsZXJfYnVmZmVyICovCisJaWYgKHByaXYtPmNhbGxlcl9i
dWZzaXplIC0gcHJpdi0+Y2FsbGVyX25yZWFkID4gMCkgeworCQlnc2l6ZSBucmVhZCA9IE1JTiAo
Y2h1bmtfc2l6ZSwgcHJpdi0+Y2FsbGVyX2J1ZnNpemUgLSBwcml2LT5jYWxsZXJfbnJlYWQpOwor
CisJCW1lbWNweSAocHJpdi0+Y2FsbGVyX2J1ZmZlciArIHByaXYtPmNhbGxlcl9ucmVhZCwgY2h1
bmssIG5yZWFkKTsKKwkJcHJpdi0+Y2FsbGVyX25yZWFkICs9IG5yZWFkOworCQlwcml2LT5vZmZz
ZXQgKz0gbnJlYWQ7CisJCWNodW5rICs9IG5yZWFkOworCQljaHVua19zaXplIC09IG5yZWFkOwor
CX0KKworCWlmIChjaHVua19zaXplID4gMCkgeworCQkvKiBDb3B5IHRoZSByZXN0IGludG8gcHJp
di0+bGVmdG92ZXJfYnVmZmVyLiBJZgorCQkgKiB0aGVyZSdzIGFscmVhZHkgc29tZSBkYXRhIHRo
ZXJlLCByZWFsbG9jIGFuZAorCQkgKiBhcHBlbmQuIE90aGVyd2lzZSBqdXN0IGNvcHkuCisJCSAq
LworCQlpZiAocHJpdi0+bGVmdG92ZXJfYnVmc2l6ZSkgeworCQkJcHJpdi0+bGVmdG92ZXJfYnVm
ZmVyID0gZ19yZWFsbG9jIChwcml2LT5sZWZ0b3Zlcl9idWZmZXIsCisJCQkJCQkJICAgcHJpdi0+
bGVmdG92ZXJfYnVmc2l6ZSArIGNodW5rX3NpemUpOworCQkJbWVtY3B5IChwcml2LT5sZWZ0b3Zl
cl9idWZmZXIgKyBwcml2LT5sZWZ0b3Zlcl9idWZzaXplLAorCQkJCWNodW5rLCBjaHVua19zaXpl
KTsKKwkJCXByaXYtPmxlZnRvdmVyX2J1ZnNpemUgKz0gY2h1bmtfc2l6ZTsKKwkJfSBlbHNlIHsK
KwkJCXByaXYtPmxlZnRvdmVyX2J1ZnNpemUgPSBjaHVua19zaXplOworCQkJcHJpdi0+bGVmdG92
ZXJfYnVmZmVyID0gZ19tZW1kdXAgKGNodW5rLCBjaHVua19zaXplKTsKKwkJCXByaXYtPmxlZnRv
dmVyX29mZnNldCA9IDA7CisJCX0KKwl9CisKKwlzb3VwX3Nlc3Npb25fcGF1c2VfbWVzc2FnZSAo
cHJpdi0+c2Vzc2lvbiwgbXNnKTsKKwlpZiAocHJpdi0+Z290X2NodW5rX2NiKQorCQlwcml2LT5n
b3RfY2h1bmtfY2IgKHN0cmVhbSk7Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX2ZpbmlzaGVkIChTb3VwTWVzc2FnZSAqbXNnLCBncG9pbnRlciBzdHJlYW0pCit7CisJ
U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFN
X0dFVF9QUklWQVRFIChzdHJlYW0pOworCisJcHJpdi0+ZmluaXNoZWQgPSBUUlVFOworCisJaWYg
KHByaXYtPmZpbmlzaGVkX2NiKQorCQlwcml2LT5maW5pc2hlZF9jYiAoc3RyZWFtKTsKK30KKwor
c3RhdGljIGdib29sZWFuCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2NhbmNlbGxlZCAoR0lPQ2hh
bm5lbCAqY2hhbiwgR0lPQ29uZGl0aW9uIGNvbmRpdGlvbiwKKwkJCQkgIGdwb2ludGVyIHN0cmVh
bSkKK3sKKwlTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFNPVVBfSFRUUF9JTlBV
VF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7CisKKwlwcml2LT5jYW5jZWxfd2F0Y2ggPSBO
VUxMOworCisJc291cF9zZXNzaW9uX3BhdXNlX21lc3NhZ2UgKHByaXYtPnNlc3Npb24sIHByaXYt
Pm1zZyk7CisJaWYgKHByaXYtPmNhbmNlbGxlZF9jYikKKwkJcHJpdi0+Y2FuY2VsbGVkX2NiIChz
dHJlYW0pOworCisJcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZAorc291cF9odHRwX2lu
cHV0X3N0cmVhbV9wcmVwYXJlX2Zvcl9pbyAoR0lucHV0U3RyZWFtICpzdHJlYW0sCisJCQkJICAg
ICAgIEdDYW5jZWxsYWJsZSAqY2FuY2VsbGFibGUsCisJCQkJICAgICAgIGd1Y2hhciAgICAgICAq
YnVmZmVyLAorCQkJCSAgICAgICBnc2l6ZSBjb3VudCkKK3sKKwlTb3VwSFRUUElucHV0U3RyZWFt
UHJpdmF0ZSAqcHJpdiA9IFNPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVh
bSk7CisJaW50IGNhbmNlbF9mZDsKKworCXByaXYtPmNhbmNlbGxhYmxlID0gY2FuY2VsbGFibGU7
CisJY2FuY2VsX2ZkID0gZ19jYW5jZWxsYWJsZV9nZXRfZmQgKGNhbmNlbGxhYmxlKTsKKwlpZiAo
Y2FuY2VsX2ZkICE9IC0xKSB7CisJCUdJT0NoYW5uZWwgKmNoYW4gPSBnX2lvX2NoYW5uZWxfdW5p
eF9uZXcgKGNhbmNlbF9mZCk7CisJCXByaXYtPmNhbmNlbF93YXRjaCA9IHNvdXBfYWRkX2lvX3dh
dGNoIChwcml2LT5hc3luY19jb250ZXh0LCBjaGFuLAorCQkJCQkJCUdfSU9fSU4gfCBHX0lPX0VS
UiB8IEdfSU9fSFVQLAorCQkJCQkJCXNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2FuY2VsbGVkLAor
CQkJCQkJCXN0cmVhbSk7CisJCWdfaW9fY2hhbm5lbF91bnJlZiAoY2hhbik7CisJfQorCisJcHJp
di0+Y2FsbGVyX2J1ZmZlciA9IGJ1ZmZlcjsKKwlwcml2LT5jYWxsZXJfYnVmc2l6ZSA9IGNvdW50
OworCXByaXYtPmNhbGxlcl9ucmVhZCA9IDA7CisKKwlpZiAocHJpdi0+Z290X2hlYWRlcnMpCisJ
CXNvdXBfc2Vzc2lvbl91bnBhdXNlX21lc3NhZ2UgKHByaXYtPnNlc3Npb24sIHByaXYtPm1zZyk7
Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2RvbmVfaW8gKEdJbnB1
dFN0cmVhbSAqc3RyZWFtKQoreworCVNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0g
U09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKworCWlmIChwcml2
LT5jYW5jZWxfd2F0Y2gpIHsKKwkJZ19zb3VyY2VfZGVzdHJveSAocHJpdi0+Y2FuY2VsX3dhdGNo
KTsKKwkJcHJpdi0+Y2FuY2VsX3dhdGNoID0gTlVMTDsKKwkJZ19jYW5jZWxsYWJsZV9yZWxlYXNl
X2ZkIChwcml2LT5jYW5jZWxsYWJsZSk7CisJfQorCXByaXYtPmNhbmNlbGxhYmxlID0gTlVMTDsK
KworCXByaXYtPmNhbGxlcl9idWZmZXIgPSBOVUxMOworCXByaXYtPmNhbGxlcl9idWZzaXplID0g
MDsKK30KKworc3RhdGljIGdib29sZWFuCitzZXRfZXJyb3JfaWZfaHR0cF9mYWlsZWQgKFNvdXBN
ZXNzYWdlICptc2csIEdFcnJvciAqKmVycm9yKQoreworCWlmICghU09VUF9TVEFUVVNfSVNfU1VD
Q0VTU0ZVTCAobXNnLT5zdGF0dXNfY29kZSkpIHsKKwkJZ19zZXRfZXJyb3JfbGl0ZXJhbCAoZXJy
b3IsIFNPVVBfSFRUUF9FUlJPUiwKKwkJCQkgICAgIG1zZy0+c3RhdHVzX2NvZGUsIG1zZy0+cmVh
c29uX3BocmFzZSk7CisJCXJldHVybiBUUlVFOworCX0KKwlyZXR1cm4gRkFMU0U7Cit9CisKK3N0
YXRpYyBnc2l6ZQorcmVhZF9mcm9tX2xlZnRvdmVyIChTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0
ZSAqcHJpdiwKKwkJICAgIGdwb2ludGVyIGJ1ZmZlciwgZ3NpemUgYnVmc2l6ZSkKK3sKKwlnc2l6
ZSBucmVhZDsKKworCWlmIChwcml2LT5sZWZ0b3Zlcl9idWZzaXplIC0gcHJpdi0+bGVmdG92ZXJf
b2Zmc2V0IDw9IGJ1ZnNpemUpIHsKKwkJbnJlYWQgPSBwcml2LT5sZWZ0b3Zlcl9idWZzaXplIC0g
cHJpdi0+bGVmdG92ZXJfb2Zmc2V0OworCQltZW1jcHkgKGJ1ZmZlciwgcHJpdi0+bGVmdG92ZXJf
YnVmZmVyICsgcHJpdi0+bGVmdG92ZXJfb2Zmc2V0LCBucmVhZCk7CisKKwkJZ19mcmVlIChwcml2
LT5sZWZ0b3Zlcl9idWZmZXIpOworCQlwcml2LT5sZWZ0b3Zlcl9idWZmZXIgPSBOVUxMOworCQlw
cml2LT5sZWZ0b3Zlcl9idWZzaXplID0gcHJpdi0+bGVmdG92ZXJfb2Zmc2V0ID0gMDsKKwl9IGVs
c2UgeworCQlucmVhZCA9IGJ1ZnNpemU7CisJCW1lbWNweSAoYnVmZmVyLCBwcml2LT5sZWZ0b3Zl
cl9idWZmZXIgKyBwcml2LT5sZWZ0b3Zlcl9vZmZzZXQsIG5yZWFkKTsKKwkJcHJpdi0+bGVmdG92
ZXJfb2Zmc2V0ICs9IG5yZWFkOworCX0KKworCXByaXYtPm9mZnNldCArPSBucmVhZDsKKwlyZXR1
cm4gbnJlYWQ7Cit9CisKKy8qIFRoaXMgZG9lcyB0aGUgd29yayBvZiBzb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX3NlbmQoKSwgYXNzdW1pbmcgdGhhdCB0aGUKKyAqIEdJbnB1dFN0cmVhbSBwZW5kaW5n
IGZsYWcgaGFzIGFscmVhZHkgYmVlbiBzZXQuIEl0IGlzIGFsc28gdXNlZCBieQorICogc291cF9o
dHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jKCkgaW4gc29tZSBjaXJjdW1zdGFuY2VzLgorICov
CitzdGF0aWMgZ2Jvb2xlYW4KK3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9pbnRlcm5hbCAo
R0lucHV0U3RyZWFtICAqc3RyZWFtLAorCQkJCSAgICAgIEdDYW5jZWxsYWJsZSAgKmNhbmNlbGxh
YmxlLAorCQkJCSAgICAgIEdFcnJvciAgICAgICAqKmVycm9yKQoreworCVNvdXBIVFRQSW5wdXRT
dHJlYW1Qcml2YXRlICpwcml2ID0gU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAo
c3RyZWFtKTsKKworCXNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcHJlcGFyZV9mb3JfaW8gKHN0cmVh
bSwgY2FuY2VsbGFibGUsIE5VTEwsIDApOworCXdoaWxlICghcHJpdi0+ZmluaXNoZWQgJiYgIXBy
aXYtPmdvdF9oZWFkZXJzICYmCisJICAgICAgICFnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxlZCAo
Y2FuY2VsbGFibGUpKQorCQlnX21haW5fY29udGV4dF9pdGVyYXRpb24gKHByaXYtPmFzeW5jX2Nv
bnRleHQsIFRSVUUpOworCXNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZG9uZV9pbyAoc3RyZWFtKTsK
KworCWlmIChnX2NhbmNlbGxhYmxlX3NldF9lcnJvcl9pZl9jYW5jZWxsZWQgKGNhbmNlbGxhYmxl
LCBlcnJvcikpCisJCXJldHVybiBGQUxTRTsKKwllbHNlIGlmIChzZXRfZXJyb3JfaWZfaHR0cF9m
YWlsZWQgKHByaXYtPm1zZywgZXJyb3IpKQorCQlyZXR1cm4gRkFMU0U7CisJcmV0dXJuIFRSVUU7
Cit9CisKK3N0YXRpYyB2b2lkCitzZW5kX3N5bmNfZmluaXNoZWQgKEdJbnB1dFN0cmVhbSAqc3Ry
ZWFtKQoreworCVNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gU09VUF9IVFRQX0lO
UFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKwlHRXJyb3IgKmVycm9yID0gTlVMTDsK
KworCWlmICghZ19jYW5jZWxsYWJsZV9zZXRfZXJyb3JfaWZfY2FuY2VsbGVkIChwcml2LT5jYW5j
ZWxsYWJsZSwgJmVycm9yKSkKKwkJc2V0X2Vycm9yX2lmX2h0dHBfZmFpbGVkIChwcml2LT5tc2cs
ICZlcnJvcik7CisKKwlwcml2LT5nb3RfaGVhZGVyc19jYiA9IE5VTEw7CisJcHJpdi0+ZmluaXNo
ZWRfY2IgPSBOVUxMOworCisJLyogV2FrZSB1cCB0aGUgbWFpbiBjb250ZXh0IGl0ZXJhdGlvbiAq
LworCWdfc291cmNlX2F0dGFjaCAoZ19pZGxlX3NvdXJjZV9uZXcgKCksIE5VTEwpOworfQorCisv
KioKKyAqIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZDoKKyAqIEBodHRwc3RyZWFtOiBhICNT
b3VwSFRUUElucHV0U3RyZWFtCisgKiBAY2FuY2VsbGFibGU6IG9wdGlvbmFsICNHQ2FuY2VsbGFi
bGUgb2JqZWN0LCAlTlVMTCB0byBpZ25vcmUuCisgKiBAZXJyb3I6IGxvY2F0aW9uIHRvIHN0b3Jl
IHRoZSBlcnJvciBvY2N1cmluZywgb3IgJU5VTEwgdG8gaWdub3JlCisgKgorICogU3luY2hyb25v
dXNseSBzZW5kcyB0aGUgSFRUUCByZXF1ZXN0IGFzc29jaWF0ZWQgd2l0aCBAc3RyZWFtLCBhbmQK
KyAqIHJlYWRzIHRoZSByZXNwb25zZSBoZWFkZXJzLiBDYWxsIHRoaXMgYWZ0ZXIgc291cF9odHRw
X2lucHV0X3N0cmVhbV9uZXcoKQorICogYW5kIGJlZm9yZSB0aGUgZmlyc3QgZ19pbnB1dF9zdHJl
YW1fcmVhZCgpIGlmIHlvdSB3YW50IHRvIGNoZWNrIHRoZQorICogSFRUUCBzdGF0dXMgY29kZSBi
ZWZvcmUgeW91IHN0YXJ0IHJlYWRpbmcuCisgKgorICogUmV0dXJuIHZhbHVlOiAlVFJVRSBpZiBt
c2cgaGFzIGEgc3VjY2Vzc2Z1bCAoMnh4KSBzdGF0dXMsICVGQUxTRSBpZgorICogbm90LgorICoq
LworZ2Jvb2xlYW4KK3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZCAoU291cEhUVFBJbnB1dFN0
cmVhbSAgKmh0dHBzdHJlYW0sCisJCQkgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxs
YWJsZSwKKwkJCSAgICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKQoreworCVNvdXBIVFRQ
SW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJ
VkFURSAoaHR0cHN0cmVhbSk7CisJR0lucHV0U3RyZWFtICppc3RyZWFtID0gKEdJbnB1dFN0cmVh
bSAqKWh0dHBzdHJlYW07CisJZ2Jvb2xlYW4gcmVzdWx0OworCisJZ19yZXR1cm5fdmFsX2lmX2Zh
aWwgKFNPVVBfSVNfSFRUUF9JTlBVVF9TVFJFQU0gKGh0dHBzdHJlYW0pLCBGQUxTRSk7CisKKwlp
ZiAoIWdfaW5wdXRfc3RyZWFtX3NldF9wZW5kaW5nIChpc3RyZWFtLCBlcnJvcikpCisJCXJldHVy
biBGQUxTRTsKKworCXByaXYtPmdvdF9oZWFkZXJzX2NiID0gc2VuZF9zeW5jX2ZpbmlzaGVkOwor
CXByaXYtPmZpbmlzaGVkX2NiID0gc2VuZF9zeW5jX2ZpbmlzaGVkOworCisJcmVzdWx0ID0gc291
cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2ludGVybmFsIChpc3RyZWFtLCBjYW5jZWxsYWJsZSwg
ZXJyb3IpOworCWdfaW5wdXRfc3RyZWFtX2NsZWFyX3BlbmRpbmcgKGlzdHJlYW0pOworCisJcmV0
dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdzc2l6ZQorc291cF9odHRwX2lucHV0X3N0cmVhbV9y
ZWFkIChHSW5wdXRTdHJlYW0gKnN0cmVhbSwKKwkJCSAgICAgdm9pZCAgICAgICAgICpidWZmZXIs
CisJCQkgICAgIGdzaXplIGNvdW50LAorCQkJICAgICBHQ2FuY2VsbGFibGUgKmNhbmNlbGxhYmxl
LAorCQkJICAgICBHRXJyb3IgICAgICAqKmVycm9yKQoreworCVNvdXBIVFRQSW5wdXRTdHJlYW1Q
cml2YXRlICpwcml2ID0gU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFt
KTsKKworCWlmIChwcml2LT5maW5pc2hlZCkKKwkJcmV0dXJuIDA7CisKKwkvKiBJZiB0aGVyZSBp
cyBkYXRhIGxlZnRvdmVyIGZyb20gYSBwcmV2aW91cyByZWFkLCByZXR1cm4gaXQuICovCisJaWYg
KHByaXYtPmxlZnRvdmVyX2J1ZnNpemUpCisJCXJldHVybiByZWFkX2Zyb21fbGVmdG92ZXIgKHBy
aXYsIGJ1ZmZlciwgY291bnQpOworCisJLyogTm8gbGVmdG92ZXIgZGF0YSwgYWNjZXB0IG9uZSBj
aHVuayBmcm9tIHRoZSBuZXR3b3JrICovCisJc291cF9odHRwX2lucHV0X3N0cmVhbV9wcmVwYXJl
X2Zvcl9pbyAoc3RyZWFtLCBjYW5jZWxsYWJsZSwgYnVmZmVyLCBjb3VudCk7CisJd2hpbGUgKCFw
cml2LT5maW5pc2hlZCAmJiBwcml2LT5jYWxsZXJfbnJlYWQgPT0gMCAmJgorCSAgICAgICAhZ19j
YW5jZWxsYWJsZV9pc19jYW5jZWxsZWQgKGNhbmNlbGxhYmxlKSkKKwkJZ19tYWluX2NvbnRleHRf
aXRlcmF0aW9uIChwcml2LT5hc3luY19jb250ZXh0LCBUUlVFKTsKKwlzb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX2RvbmVfaW8gKHN0cmVhbSk7CisKKwlpZiAocHJpdi0+Y2FsbGVyX25yZWFkID4gMCkK
KwkJcmV0dXJuIHByaXYtPmNhbGxlcl9ucmVhZDsKKworCWlmIChnX2NhbmNlbGxhYmxlX3NldF9l
cnJvcl9pZl9jYW5jZWxsZWQgKGNhbmNlbGxhYmxlLCBlcnJvcikpCisJCXJldHVybiAtMTsKKwll
bHNlIGlmIChzZXRfZXJyb3JfaWZfaHR0cF9mYWlsZWQgKHByaXYtPm1zZywgZXJyb3IpKQorCQly
ZXR1cm4gLTE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGljIGdib29sZWFuCitzb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlIChHSW5wdXRTdHJlYW0gKnN0cmVhbSwKKwkJCSAgICAg
IEdDYW5jZWxsYWJsZSAqY2FuY2VsbGFibGUsCisJCQkgICAgICBHRXJyb3IgICAgICAqKmVycm9y
KQoreworCVNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gU09VUF9IVFRQX0lOUFVU
X1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKworCWlmICghcHJpdi0+ZmluaXNoZWQpCisJ
CXNvdXBfc2Vzc2lvbl9jYW5jZWxfbWVzc2FnZSAocHJpdi0+c2Vzc2lvbiwgcHJpdi0+bXNnLCBT
T1VQX1NUQVRVU19DQU5DRUxMRUQpOworCisJcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lk
Cit3cmFwcGVyX2NhbGxiYWNrIChHT2JqZWN0ICpzb3VyY2Vfb2JqZWN0LCBHQXN5bmNSZXN1bHQg
KnJlcywKKwkJICBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJR0lucHV0U3RyZWFtICpzdHJlYW0g
PSBHX0lOUFVUX1NUUkVBTSAoc291cmNlX29iamVjdCk7CisJU291cEhUVFBJbnB1dFN0cmVhbVBy
aXZhdGUgKnByaXYgPSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0p
OworCisJZ19pbnB1dF9zdHJlYW1fY2xlYXJfcGVuZGluZyAoc3RyZWFtKTsKKwlpZiAocHJpdi0+
b3V0c3RhbmRpbmdfY2FsbGJhY2spCisJCSgqcHJpdi0+b3V0c3RhbmRpbmdfY2FsbGJhY2spKHNv
dXJjZV9vYmplY3QsIHJlcywgdXNlcl9kYXRhKTsKKwlwcml2LT5vdXRzdGFuZGluZ19jYWxsYmFj
ayA9IE5VTEw7CisJZ19vYmplY3RfdW5yZWYgKHN0cmVhbSk7Cit9CisKK3N0YXRpYyB2b2lkCitz
ZW5kX2FzeW5jX3RocmVhZCAoR1NpbXBsZUFzeW5jUmVzdWx0ICpyZXMsCisJCSAgIEdPYmplY3Qg
Km9iamVjdCwKKwkJICAgR0NhbmNlbGxhYmxlICpjYW5jZWxsYWJsZSkKK3sKKwlHRXJyb3IgKmVy
cm9yID0gTlVMTDsKKwlnYm9vbGVhbiBzdWNjZXNzOworCisJc3VjY2VzcyA9IHNvdXBfaHR0cF9p
bnB1dF9zdHJlYW1fc2VuZF9pbnRlcm5hbCAoR19JTlBVVF9TVFJFQU0gKG9iamVjdCksCisJCQkJ
CQkJY2FuY2VsbGFibGUsICZlcnJvcik7CisJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9y
ZXNfZ2Jvb2xlYW4gKHJlcywgc3VjY2Vzcyk7CisJaWYgKGVycm9yKSB7CisJCWdfc2ltcGxlX2Fz
eW5jX3Jlc3VsdF9zZXRfZnJvbV9lcnJvciAocmVzLCBlcnJvcik7CisJCWdfZXJyb3JfZnJlZSAo
ZXJyb3IpOworCX0KK30KKworc3RhdGljIHZvaWQKK3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2Vu
ZF9hc3luY19pbl90aHJlYWQgKEdJbnB1dFN0cmVhbSAgICAgICAgKnN0cmVhbSwKKwkJCQkJICAg
ICBpbnQgaW9fcHJpb3JpdHksCisJCQkJCSAgICAgR0NhbmNlbGxhYmxlICAgICAgICAqY2FuY2Vs
bGFibGUsCisJCQkJCSAgICAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKKwkJCQkJICAg
ICBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpyZXM7CisKKwly
ZXMgPSBnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3IChHX09CSkVDVCAoc3RyZWFtKSwgY2FsbGJh
Y2ssIHVzZXJfZGF0YSwKKwkJCQkJIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luY19p
bl90aHJlYWQpOworCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9ydW5faW5fdGhyZWFkIChyZXMsIHNl
bmRfYXN5bmNfdGhyZWFkLAorCQkJCQkgICAgIGlvX3ByaW9yaXR5LCBjYW5jZWxsYWJsZSk7CisJ
Z19vYmplY3RfdW5yZWYgKHJlcyk7Cit9CisKK3N0YXRpYyB2b2lkCitzZW5kX2FzeW5jX2Zpbmlz
aGVkIChHSW5wdXRTdHJlYW0gKnN0cmVhbSkKK3sKKwlTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0
ZSAqcHJpdiA9IFNPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7CisJ
R1NpbXBsZUFzeW5jUmVzdWx0ICpyZXN1bHQ7CisJR0Vycm9yICplcnJvciA9IE5VTEw7CisKKwlp
ZiAoIWdfY2FuY2VsbGFibGVfc2V0X2Vycm9yX2lmX2NhbmNlbGxlZCAocHJpdi0+Y2FuY2VsbGFi
bGUsICZlcnJvcikpCisJCXNldF9lcnJvcl9pZl9odHRwX2ZhaWxlZCAocHJpdi0+bXNnLCAmZXJy
b3IpOworCisJcHJpdi0+Z290X2hlYWRlcnNfY2IgPSBOVUxMOworCXByaXYtPmZpbmlzaGVkX2Ni
ID0gTlVMTDsKKwlzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2RvbmVfaW8gKHN0cmVhbSk7CisKKwly
ZXN1bHQgPSBwcml2LT5yZXN1bHQ7CisJcHJpdi0+cmVzdWx0ID0gTlVMTDsKKworCWdfc2ltcGxl
X2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dib29sZWFuIChyZXN1bHQsIGVycm9yID09IE5VTEwp
OworCWlmIChlcnJvcikgeworCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X2Zyb21fZXJyb3Ig
KHJlc3VsdCwgZXJyb3IpOworCQlnX2Vycm9yX2ZyZWUgKGVycm9yKTsKKwl9CisJZ19zaW1wbGVf
YXN5bmNfcmVzdWx0X2NvbXBsZXRlIChyZXN1bHQpOworfQorCitzdGF0aWMgdm9pZAorc291cF9o
dHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jX2ludGVybmFsIChHSW5wdXRTdHJlYW0gICAgICAg
ICpzdHJlYW0sCisJCQkJCSAgICBpbnQgaW9fcHJpb3JpdHksCisJCQkJCSAgICBHQ2FuY2VsbGFi
bGUgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkJICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2Fs
bGJhY2ssCisJCQkJCSAgICBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJU291cEhUVFBJbnB1dFN0
cmVhbVByaXZhdGUgKnByaXYgPSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChz
dHJlYW0pOworCisJZ19vYmplY3RfcmVmIChzdHJlYW0pOworCXByaXYtPm91dHN0YW5kaW5nX2Nh
bGxiYWNrID0gY2FsbGJhY2s7CisKKwkvKiBJZiB0aGUgc2Vzc2lvbiB1c2VzIHRoZSBkZWZhdWx0
IEdNYWluQ29udGV4dCwgdGhlbiB3ZSBjYW4gZG8KKwkgKiBhc3luYyBJL08gZGlyZWN0bHkuIEJ1
dCBpZiBpdCBoYXMgaXRzIG93biBtYWluIGNvbnRleHQsIGl0J3MKKwkgKiBlYXNpZXIgdG8ganVz
dCBydW4gaXQgaW4gYW5vdGhlciB0aHJlYWQuCisJICovCisJaWYgKHNvdXBfc2Vzc2lvbl9nZXRf
YXN5bmNfY29udGV4dCAocHJpdi0+c2Vzc2lvbikpIHsKKwkJc291cF9odHRwX2lucHV0X3N0cmVh
bV9zZW5kX2FzeW5jX2luX3RocmVhZCAoc3RyZWFtLCBpb19wcmlvcml0eSwgY2FuY2VsbGFibGUs
CisJCQkJCQkJICAgICB3cmFwcGVyX2NhbGxiYWNrLCB1c2VyX2RhdGEpOworCQlyZXR1cm47CisJ
fQorCisJcHJpdi0+Z290X2hlYWRlcnNfY2IgPSBzZW5kX2FzeW5jX2ZpbmlzaGVkOworCXByaXYt
PmZpbmlzaGVkX2NiID0gc2VuZF9hc3luY19maW5pc2hlZDsKKworCXNvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fcHJlcGFyZV9mb3JfaW8gKHN0cmVhbSwgY2FuY2VsbGFibGUsIE5VTEwsIDApOworCXBy
aXYtPnJlc3VsdCA9IGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcgKEdfT0JKRUNUIChzdHJlYW0p
LAorCQkJCQkJICB3cmFwcGVyX2NhbGxiYWNrLCB1c2VyX2RhdGEsCisJCQkJCQkgIHNvdXBfaHR0
cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luYyk7Cit9CisKKy8qKgorICogc291cF9odHRwX2lucHV0
X3N0cmVhbV9zZW5kX2FzeW5jOgorICogQGh0dHBzdHJlYW06IGEgI1NvdXBIVFRQSW5wdXRTdHJl
YW0KKyAqIEBpb19wcmlvcml0eTogdGhlIGlvIHByaW9yaXR5IG9mIHRoZSByZXF1ZXN0LgorICog
QGNhbmNlbGxhYmxlOiBvcHRpb25hbCAjR0NhbmNlbGxhYmxlIG9iamVjdCwgJU5VTEwgdG8gaWdu
b3JlLgorICogQGNhbGxiYWNrOiBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIHJlcXVlc3QgaXMg
c2F0aXNmaWVkCisgKiBAdXNlcl9kYXRhOiB0aGUgZGF0YSB0byBwYXNzIHRvIGNhbGxiYWNrIGZ1
bmN0aW9uCisgKgorICogQXN5bmNocm9ub3VzbHkgc2VuZHMgdGhlIEhUVFAgcmVxdWVzdCBhc3Nv
Y2lhdGVkIHdpdGggQHN0cmVhbSwgYW5kCisgKiByZWFkcyB0aGUgcmVzcG9uc2UgaGVhZGVycy4g
Q2FsbCB0aGlzIGFmdGVyIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fbmV3KCkKKyAqIGFuZCBiZWZv
cmUgdGhlIGZpcnN0IGdfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMoKSBpZiB5b3Ugd2FudCB0bwor
ICogY2hlY2sgdGhlIEhUVFAgc3RhdHVzIGNvZGUgYmVmb3JlIHlvdSBzdGFydCByZWFkaW5nLgor
ICoqLwordm9pZAorc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jIChTb3VwSFRUUElu
cHV0U3RyZWFtICpodHRwc3RyZWFtLAorCQkJCSAgIGludCBpb19wcmlvcml0eSwKKwkJCQkgICBH
Q2FuY2VsbGFibGUgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkgICBHQXN5bmNSZWFkeUNhbGxi
YWNrIGNhbGxiYWNrLAorCQkJCSAgIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlHSW5wdXRTdHJl
YW0gKmlzdHJlYW0gPSAoR0lucHV0U3RyZWFtICopaHR0cHN0cmVhbTsKKwlHRXJyb3IgKmVycm9y
ID0gTlVMTDsKKworCWdfcmV0dXJuX2lmX2ZhaWwgKFNPVVBfSVNfSFRUUF9JTlBVVF9TVFJFQU0g
KGh0dHBzdHJlYW0pKTsKKworCWlmICghZ19pbnB1dF9zdHJlYW1fc2V0X3BlbmRpbmcgKGlzdHJl
YW0sICZlcnJvcikpIHsKKwkJZ19zaW1wbGVfYXN5bmNfcmVwb3J0X2dlcnJvcl9pbl9pZGxlIChH
X09CSkVDVCAoaHR0cHN0cmVhbSksCisJCQkJCQkgICAgICBjYWxsYmFjaywKKwkJCQkJCSAgICAg
IHVzZXJfZGF0YSwKKwkJCQkJCSAgICAgIGVycm9yKTsKKwkJZ19lcnJvcl9mcmVlIChlcnJvcik7
CisJCXJldHVybjsKKwl9CisJc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jX2ludGVy
bmFsIChpc3RyZWFtLCBpb19wcmlvcml0eSwgY2FuY2VsbGFibGUsCisJCQkJCQkgICAgY2FsbGJh
Y2ssIHVzZXJfZGF0YSk7Cit9CisKKy8qKgorICogc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5k
X2ZpbmlzaDoKKyAqIEBodHRwc3RyZWFtOiBhICNTb3VwSFRUUElucHV0U3RyZWFtCisgKiBAcmVz
dWx0OiBhICNHQXN5bmNSZXN1bHQuCisgKiBAZXJyb3I6IGEgI0dFcnJvciBsb2NhdGlvbiB0byBz
dG9yZSB0aGUgZXJyb3Igb2NjdXJpbmcsIG9yICVOVUxMIHRvCisgKiBpZ25vcmUuCisgKgorICog
RmluaXNoZXMgYSBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmMoKSBvcGVyYXRpb24u
CisgKgorICogUmV0dXJuIHZhbHVlOiAlVFJVRSBpZiB0aGUgbWVzc2FnZSB3YXMgc2VudCBzdWNj
ZXNzZnVsbHkgYW5kCisgKiByZWNlaXZlZCBhIHN1Y2Nlc3NmdWwgc3RhdHVzIGNvZGUsICVGQUxT
RSBpZiBub3QuCisgKiovCitnYm9vbGVhbgorc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2Zp
bmlzaCAoU291cEhUVFBJbnB1dFN0cmVhbSAgKmh0dHBzdHJlYW0sCisJCQkJICAgIEdBc3luY1Jl
c3VsdCAgICAgICAgICpyZXN1bHQsCisJCQkJICAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJv
cikKK3sKKwlHU2ltcGxlQXN5bmNSZXN1bHQgKnNpbXBsZTsKKworCWdfcmV0dXJuX3ZhbF9pZl9m
YWlsIChHX0lTX1NJTVBMRV9BU1lOQ19SRVNVTFQgKHJlc3VsdCksIEZBTFNFKTsKKwlzaW1wbGUg
PSBHX1NJTVBMRV9BU1lOQ19SRVNVTFQgKHJlc3VsdCk7CisKKwlnX3JldHVybl92YWxfaWZfZmFp
bCAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9zb3VyY2VfdGFnIChzaW1wbGUpID09IHNvdXBf
aHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luYywgRkFMU0UpOworCisJaWYgKGdfc2ltcGxlX2Fz
eW5jX3Jlc3VsdF9wcm9wYWdhdGVfZXJyb3IgKHNpbXBsZSwgZXJyb3IpKQorCQlyZXR1cm4gRkFM
U0U7CisKKwlyZXR1cm4gZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9vcF9yZXNfZ2Jvb2xlYW4g
KHNpbXBsZSk7Cit9CisKK3N0YXRpYyB2b2lkCityZWFkX2FzeW5jX2RvbmUgKEdJbnB1dFN0cmVh
bSAqc3RyZWFtKQoreworCVNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gU09VUF9I
VFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKwlHU2ltcGxlQXN5bmNSZXN1
bHQgKnJlc3VsdDsKKwlHRXJyb3IgKmVycm9yID0gTlVMTDsKKworCXJlc3VsdCA9IHByaXYtPnJl
c3VsdDsKKwlwcml2LT5yZXN1bHQgPSBOVUxMOworCisJaWYgKGdfY2FuY2VsbGFibGVfc2V0X2Vy
cm9yX2lmX2NhbmNlbGxlZCAocHJpdi0+Y2FuY2VsbGFibGUsICZlcnJvcikgfHwKKwkgICAgc2V0
X2Vycm9yX2lmX2h0dHBfZmFpbGVkIChwcml2LT5tc2csICZlcnJvcikpIHsKKwkJZ19zaW1wbGVf
YXN5bmNfcmVzdWx0X3NldF9mcm9tX2Vycm9yIChyZXN1bHQsIGVycm9yKTsKKwkJZ19lcnJvcl9m
cmVlIChlcnJvcik7CisJfSBlbHNlCisJCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVz
X2dzc2l6ZSAocmVzdWx0LCBwcml2LT5jYWxsZXJfbnJlYWQpOworCisJcHJpdi0+Z290X2NodW5r
X2NiID0gTlVMTDsKKwlwcml2LT5maW5pc2hlZF9jYiA9IE5VTEw7CisJcHJpdi0+Y2FuY2VsbGVk
X2NiID0gTlVMTDsKKwlzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2RvbmVfaW8gKHN0cmVhbSk7CisK
KwlnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGUgKHJlc3VsdCk7CisJZ19vYmplY3RfdW5y
ZWYgKHJlc3VsdCk7Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3Jl
YWRfYXN5bmMgKEdJbnB1dFN0cmVhbSAgICAgICAgKnN0cmVhbSwKKwkJCQkgICB2b2lkICAgICAg
ICAgICAgICAgICpidWZmZXIsCisJCQkJICAgZ3NpemUgY291bnQsCisJCQkJICAgaW50IGlvX3By
aW9yaXR5LAorCQkJCSAgIEdDYW5jZWxsYWJsZSAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJCSAg
IEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCisJCQkJICAgZ3BvaW50ZXIgdXNlcl9kYXRh
KQoreworCVNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gU09VUF9IVFRQX0lOUFVU
X1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKwlHU2ltcGxlQXN5bmNSZXN1bHQgKnJlc3Vs
dDsKKworCS8qIElmIHRoZSBzZXNzaW9uIHVzZXMgdGhlIGRlZmF1bHQgR01haW5Db250ZXh0LCB0
aGVuIHdlIGNhbiBkbworCSAqIGFzeW5jIEkvTyBkaXJlY3RseS4gQnV0IGlmIGl0IGhhcyBpdHMg
b3duIG1haW4gY29udGV4dCwgd2UgZmFsbAorCSAqIGJhY2sgdG8gdGhlIGFzeW5jLXZpYS1zeW5j
LWluLWFub3RoZXItdGhyZWFkIGltcGxlbWVudGF0aW9uLgorCSAqLworCWlmIChzb3VwX3Nlc3Np
b25fZ2V0X2FzeW5jX2NvbnRleHQgKHByaXYtPnNlc3Npb24pKSB7CisJCUdfSU5QVVRfU1RSRUFN
X0NMQVNTIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3BhcmVudF9jbGFzcyktPgorCQlyZWFkX2Fz
eW5jIChzdHJlYW0sIGJ1ZmZlciwgY291bnQsIGlvX3ByaW9yaXR5LAorCQkJICAgIGNhbmNlbGxh
YmxlLCBjYWxsYmFjaywgdXNlcl9kYXRhKTsKKwkJcmV0dXJuOworCX0KKworCXJlc3VsdCA9IGdf
c2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcgKEdfT0JKRUNUIChzdHJlYW0pLAorCQkJCQkgICAgY2Fs
bGJhY2ssIHVzZXJfZGF0YSwKKwkJCQkJICAgIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVhZF9h
c3luYyk7CisKKwlpZiAocHJpdi0+ZmluaXNoZWQpIHsKKwkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0
X3NldF9vcF9yZXNfZ3NzaXplIChyZXN1bHQsIDApOworCQlnX3NpbXBsZV9hc3luY19yZXN1bHRf
Y29tcGxldGVfaW5faWRsZSAocmVzdWx0KTsKKwkJZ19vYmplY3RfdW5yZWYgKHJlc3VsdCk7CisJ
CXJldHVybjsKKwl9CisKKwlpZiAocHJpdi0+bGVmdG92ZXJfYnVmc2l6ZSkgeworCQlnc2l6ZSBu
cmVhZCA9IHJlYWRfZnJvbV9sZWZ0b3ZlciAocHJpdiwgYnVmZmVyLCBjb3VudCk7CisJCWdfc2lt
cGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dzc2l6ZSAocmVzdWx0LCBucmVhZCk7CisJCWdf
c2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZV9pbl9pZGxlIChyZXN1bHQpOworCQlnX29iamVj
dF91bnJlZiAocmVzdWx0KTsKKwkJcmV0dXJuOworCX0KKworCXByaXYtPnJlc3VsdCA9IHJlc3Vs
dDsKKworCXByaXYtPmdvdF9jaHVua19jYiA9IHJlYWRfYXN5bmNfZG9uZTsKKwlwcml2LT5maW5p
c2hlZF9jYiA9IHJlYWRfYXN5bmNfZG9uZTsKKwlwcml2LT5jYW5jZWxsZWRfY2IgPSByZWFkX2Fz
eW5jX2RvbmU7CisJc291cF9odHRwX2lucHV0X3N0cmVhbV9wcmVwYXJlX2Zvcl9pbyAoc3RyZWFt
LCBjYW5jZWxsYWJsZSwgYnVmZmVyLCBjb3VudCk7Cit9CisKK3N0YXRpYyBnc3NpemUKK3NvdXBf
aHR0cF9pbnB1dF9zdHJlYW1fcmVhZF9maW5pc2ggKEdJbnB1dFN0cmVhbSAgKnN0cmVhbSwKKwkJ
CQkgICAgR0FzeW5jUmVzdWx0ICAqcmVzdWx0LAorCQkJCSAgICBHRXJyb3IgICAgICAgKiplcnJv
cikKK3sKKwlHU2ltcGxlQXN5bmNSZXN1bHQgKnNpbXBsZTsKKworCWdfcmV0dXJuX3ZhbF9pZl9m
YWlsIChHX0lTX1NJTVBMRV9BU1lOQ19SRVNVTFQgKHJlc3VsdCksIC0xKTsKKwlzaW1wbGUgPSBH
X1NJTVBMRV9BU1lOQ19SRVNVTFQgKHJlc3VsdCk7CisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdf
c2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfc291cmNlX3RhZyAoc2ltcGxlKSA9PSBzb3VwX2h0dHBf
aW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMsIC0xKTsKKworCXJldHVybiBnX3NpbXBsZV9hc3luY19y
ZXN1bHRfZ2V0X29wX3Jlc19nc3NpemUgKHNpbXBsZSk7Cit9CisKK3N0YXRpYyB2b2lkCitzb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlX2FzeW5jIChHSW5wdXRTdHJlYW0gICAgICAgKnN0cmVh
bSwKKwkJCQkgICAgaW50IGlvX3ByaW9yaXR5LAorCQkJCSAgICBHQ2FuY2VsbGFibGUgICAgICAg
KmNhbmNlbGxhYmxlLAorCQkJCSAgICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAorCQkJ
CSAgICBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpyZXN1bHQ7
CisJZ2Jvb2xlYW4gc3VjY2VzczsKKwlHRXJyb3IgKmVycm9yID0gTlVMTDsKKworCXJlc3VsdCA9
IGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcgKEdfT0JKRUNUIChzdHJlYW0pLAorCQkJCQkgICAg
Y2FsbGJhY2ssIHVzZXJfZGF0YSwKKwkJCQkJICAgIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xv
c2VfYXN5bmMpOworCXN1Y2Nlc3MgPSBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlIChzdHJl
YW0sIGNhbmNlbGxhYmxlLCAmZXJyb3IpOworCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3Bf
cmVzX2dib29sZWFuIChyZXN1bHQsIHN1Y2Nlc3MpOworCWlmIChlcnJvcikgeworCQlnX3NpbXBs
ZV9hc3luY19yZXN1bHRfc2V0X2Zyb21fZXJyb3IgKHJlc3VsdCwgZXJyb3IpOworCQlnX2Vycm9y
X2ZyZWUgKGVycm9yKTsKKwl9CisKKwlnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGVfaW5f
aWRsZSAocmVzdWx0KTsKKwlnX29iamVjdF91bnJlZiAocmVzdWx0KTsKK30KKworc3RhdGljIGdi
b29sZWFuCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlX2ZpbmlzaCAoR0lucHV0U3RyZWFt
ICAqc3RyZWFtLAorCQkJCSAgICAgR0FzeW5jUmVzdWx0ICAqcmVzdWx0LAorCQkJCSAgICAgR0Vy
cm9yICAgICAgICoqZXJyb3IpCit7CisJLyogRmFpbHVyZXMgaGFuZGxlZCBpbiBnZW5lcmljIGNs
b3NlX2ZpbmlzaCBjb2RlICovCisJcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnb2Zmc2V0Citz
b3VwX2h0dHBfaW5wdXRfc3RyZWFtX3RlbGwgKEdTZWVrYWJsZSAqc2Vla2FibGUpCit7CisJU291
cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dF
VF9QUklWQVRFIChzZWVrYWJsZSk7CisKKwlyZXR1cm4gcHJpdi0+b2Zmc2V0OworfQorCitzdGF0
aWMgZ2Jvb2xlYW4KK3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2FuX3NlZWsgKEdTZWVrYWJsZSAq
c2Vla2FibGUpCit7CisJcmV0dXJuIFRSVUU7Cit9CisKK2V4dGVybiB2b2lkIHNvdXBfbWVzc2Fn
ZV9pb19jbGVhbnVwIChTb3VwTWVzc2FnZSAqbXNnKTsKKworc3RhdGljIGdib29sZWFuCitzb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX3NlZWsgKEdTZWVrYWJsZSAgICAgKnNlZWthYmxlLAorCQkJICAg
ICBnb2Zmc2V0IG9mZnNldCwKKwkJCSAgICAgR1NlZWtUeXBlIHR5cGUsCisJCQkgICAgIEdDYW5j
ZWxsYWJsZSAgKmNhbmNlbGxhYmxlLAorCQkJICAgICBHRXJyb3IgICAgICAgKiplcnJvcikKK3sK
KwlHSW5wdXRTdHJlYW0gKnN0cmVhbSA9IEdfSU5QVVRfU1RSRUFNIChzZWVrYWJsZSk7CisJU291
cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dF
VF9QUklWQVRFIChzZWVrYWJsZSk7CisJY2hhciAqcmFuZ2U7CisKKwlpZiAodHlwZSA9PSBHX1NF
RUtfRU5EKSB7CisJCS8qIEZJWE1FOiB3ZSBjb3VsZCBzZW5kICJieXRlcz0tb2Zmc2V0IiwgYnV0
IHVubGVzcyB3ZQorCQkgKiBrbm93IHRoZSBDb250ZW50LUxlbmd0aCwgd2Ugd291bGRuJ3QgYmUg
YWJsZSB0bworCQkgKiBhbnN3ZXIgYSB0ZWxsKCkgcHJvcGVybHkuIFdlIGNvdWxkIGZpbmQgdGhl
CisJCSAqIENvbnRlbnQtTGVuZ3RoIGJ5IGRvaW5nIGEgSEVBRC4uLgorCQkgKi8KKworCQlnX3Nl
dF9lcnJvcl9saXRlcmFsIChlcnJvciwgR19JT19FUlJPUiwgR19JT19FUlJPUl9OT1RfU1VQUE9S
VEVELAorCQkJCSAgICAgIkdfU0VFS19FTkQgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQiKTsKKwkJ
cmV0dXJuIEZBTFNFOworCX0KKworCWlmICghZ19pbnB1dF9zdHJlYW1fc2V0X3BlbmRpbmcgKHN0
cmVhbSwgZXJyb3IpKQorCQlyZXR1cm4gRkFMU0U7CisKKwlzb3VwX3Nlc3Npb25fY2FuY2VsX21l
c3NhZ2UgKHByaXYtPnNlc3Npb24sIHByaXYtPm1zZywgU09VUF9TVEFUVVNfQ0FOQ0VMTEVEKTsK
Kwlzb3VwX21lc3NhZ2VfaW9fY2xlYW51cCAocHJpdi0+bXNnKTsKKworCXN3aXRjaCAodHlwZSkg
eworCQljYXNlIEdfU0VFS19DVVI6CisJCQlvZmZzZXQgKz0gcHJpdi0+b2Zmc2V0OworCQkvKiBm
YWxsIHRocm91Z2ggKi8KKworCQljYXNlIEdfU0VFS19TRVQ6CisJCQlyYW5nZSA9IGdfc3RyZHVw
X3ByaW50ZiAoImJ5dGVzPSUiIEdfR1VJTlQ2NF9GT1JNQVQgIi0iLCAoZ3VpbnQ2NClvZmZzZXQp
OworCQkJcHJpdi0+b2Zmc2V0ID0gb2Zmc2V0OworCQkJYnJlYWs7CisKKwkJY2FzZSBHX1NFRUtf
RU5EOgorCQkJcmFuZ2UgPSBOVUxMOyAvKiBrZWVwIGNvbXBpbGVycyBoYXBweSAqLworCQkJZ19y
ZXR1cm5fdmFsX2lmX3JlYWNoZWQgKEZBTFNFKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJ
CQlnX3JldHVybl92YWxfaWZfcmVhY2hlZCAoRkFMU0UpOworCX0KKworCXNvdXBfbWVzc2FnZV9o
ZWFkZXJzX3JlbW92ZSAocHJpdi0+bXNnLT5yZXF1ZXN0X2hlYWRlcnMsICJSYW5nZSIpOworCXNv
dXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZCAocHJpdi0+bXNnLT5yZXF1ZXN0X2hlYWRlcnMsICJS
YW5nZSIsIHJhbmdlKTsKKwlnX2ZyZWUgKHJhbmdlKTsKKworCXNvdXBfaHR0cF9pbnB1dF9zdHJl
YW1fcXVldWVfbWVzc2FnZSAoU09VUF9IVFRQX0lOUFVUX1NUUkVBTSAoc3RyZWFtKSk7CisKKwln
X2lucHV0X3N0cmVhbV9jbGVhcl9wZW5kaW5nIChzdHJlYW0pOworCXJldHVybiBUUlVFOworfQor
CitzdGF0aWMgZ2Jvb2xlYW4KK3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2FuX3RydW5jYXRlIChH
U2Vla2FibGUgKnNlZWthYmxlKQoreworCXJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGdib29s
ZWFuCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3RydW5jYXRlIChHU2Vla2FibGUgICAgICpzZWVr
YWJsZSwKKwkJCQkgZ29mZnNldCBvZmZzZXQsCisJCQkJIEdDYW5jZWxsYWJsZSAgKmNhbmNlbGxh
YmxlLAorCQkJCSBHRXJyb3IgICAgICAgKiplcnJvcikKK3sKKwlnX3NldF9lcnJvcl9saXRlcmFs
IChlcnJvciwgR19JT19FUlJPUiwgR19JT19FUlJPUl9OT1RfU1VQUE9SVEVELAorCQkJICAgICAi
VHJ1bmNhdGUgbm90IGFsbG93ZWQgb24gaW5wdXQgc3RyZWFtIik7CisJcmV0dXJuIEZBTFNFOwor
fQorCitTb3VwTWVzc2FnZSAqCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dldF9tZXNzYWdlIChT
b3VwSFRUUElucHV0U3RyZWFtICpodHRwc3RyZWFtKQoreworCVNvdXBIVFRQSW5wdXRTdHJlYW1Q
cml2YXRlICpwcml2ID0gU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoaHR0cHN0
cmVhbSk7CisJcmV0dXJuIHByaXYtPm1zZyA/IGdfb2JqZWN0X3JlZiAocHJpdi0+bXNnKSA6IE5V
TEw7Cit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9z
b3VwLWh0dHAtaW5wdXQtc3RyZWFtLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9j
YWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uN2RlN2JjMAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0uaApAQCAtMCwwICsxLDc2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA5IFJlZCBIYXQsIEluYy4KKyAq
IENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwK
KyAqIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxh
Y2UsIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNp
Zm5kZWYgX19TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0hfXworI2RlZmluZSBfX1NPVVBfSFRUUF9J
TlBVVF9TVFJFQU1fSF9fCisKKyNpbmNsdWRlIDxnaW8vZ2lvLmg+CisjaW5jbHVkZSA8bGlic291
cC9zb3VwLXR5cGVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBTT1VQX1RZUEVfSFRU
UF9JTlBVVF9TVFJFQU0gICAgICAgICAoc291cF9odHRwX2lucHV0X3N0cmVhbV9nZXRfdHlwZSAo
KSkKKyNkZWZpbmUgU09VUF9IVFRQX0lOUFVUX1NUUkVBTShvKSAgICAgICAgICAgKEdfVFlQRV9D
SEVDS19JTlNUQU5DRV9DQVNUICgobyksIFNPVVBfVFlQRV9IVFRQX0lOUFVUX1NUUkVBTSwgU291
cEhUVFBJbnB1dFN0cmVhbSkpCisjZGVmaW5lIFNPVVBfSFRUUF9JTlBVVF9TVFJFQU1fQ0xBU1Mo
aykgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGspLCBTT1VQX1RZUEVfSFRUUF9JTlBV
VF9TVFJFQU0sIFNvdXBIVFRQSW5wdXRTdHJlYW1DbGFzcykpCisjZGVmaW5lIFNPVVBfSVNfSFRU
UF9JTlBVVF9TVFJFQU0obykgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG8p
LCBTT1VQX1RZUEVfSFRUUF9JTlBVVF9TVFJFQU0pKQorI2RlZmluZSBTT1VQX0lTX0hUVFBfSU5Q
VVRfU1RSRUFNX0NMQVNTKGspICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrKSwgU09VUF9U
WVBFX0hUVFBfSU5QVVRfU1RSRUFNKSkKKyNkZWZpbmUgU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9H
RVRfQ0xBU1MobykgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvKSwgU09VUF9UWVBFX0hU
VFBfSU5QVVRfU1RSRUFNLCBTb3VwSFRUUElucHV0U3RyZWFtQ2xhc3MpKQorCit0eXBlZGVmIHN0
cnVjdCBTb3VwSFRUUElucHV0U3RyZWFtIFNvdXBIVFRQSW5wdXRTdHJlYW07Cit0eXBlZGVmIHN0
cnVjdCBTb3VwSFRUUElucHV0U3RyZWFtQ2xhc3MgU291cEhUVFBJbnB1dFN0cmVhbUNsYXNzOwor
CitzdHJ1Y3QgU291cEhUVFBJbnB1dFN0cmVhbSB7CisJR0lucHV0U3RyZWFtIHBhcmVudDsKK307
CisKK3N0cnVjdCBTb3VwSFRUUElucHV0U3RyZWFtQ2xhc3MgeworCUdJbnB1dFN0cmVhbUNsYXNz
IHBhcmVudF9jbGFzczsKKworCS8qIFBhZGRpbmcgZm9yIGZ1dHVyZSBleHBhbnNpb24gKi8KKwl2
b2lkICgqX2dfcmVzZXJ2ZWQxKSh2b2lkKTsKKwl2b2lkICgqX2dfcmVzZXJ2ZWQyKSh2b2lkKTsK
Kwl2b2lkICgqX2dfcmVzZXJ2ZWQzKSh2b2lkKTsKKwl2b2lkICgqX2dfcmVzZXJ2ZWQ0KSh2b2lk
KTsKKwl2b2lkICgqX2dfcmVzZXJ2ZWQ1KSh2b2lkKTsKK307CisKK0dUeXBlIHNvdXBfaHR0cF9p
bnB1dF9zdHJlYW1fZ2V0X3R5cGUgKHZvaWQpIEdfR05VQ19DT05TVDsKKworU291cEhUVFBJbnB1
dFN0cmVhbSAqc291cF9odHRwX2lucHV0X3N0cmVhbV9uZXcgKFNvdXBTZXNzaW9uICAgICAgICAg
KnNlc3Npb24sCisJCQkJCQkgU291cE1lc3NhZ2UgICAgICAgICAqbXNnKTsKKworZ2Jvb2xlYW4g
ICAgICAgICAgICAgc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kIChTb3VwSFRUUElucHV0U3Ry
ZWFtICpodHRwc3RyZWFtLAorCQkJCQkJICBHQ2FuY2VsbGFibGUgICAgICAgICpjYW5jZWxsYWJs
ZSwKKwkJCQkJCSAgR0Vycm9yICAgICAgICAgICAgICoqZXJyb3IpOworCit2b2lkICAgICAgICAg
ICAgICAgICBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmMgKFNvdXBIVFRQSW5wdXRT
dHJlYW0gKmh0dHBzdHJlYW0sCisJCQkJCQkJaW50IGlvX3ByaW9yaXR5LAorCQkJCQkJCUdDYW5j
ZWxsYWJsZSAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJCQkJCUdBc3luY1JlYWR5Q2FsbGJhY2sg
Y2FsbGJhY2ssCisJCQkJCQkJZ3BvaW50ZXIgdXNlcl9kYXRhKTsKK2dib29sZWFuICAgICAgICAg
ICAgIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9maW5pc2ggKFNvdXBIVFRQSW5wdXRTdHJl
YW0gKmh0dHBzdHJlYW0sCisJCQkJCQkJIEdBc3luY1Jlc3VsdCAgICAgICAgKnJlc3VsdCwKKwkJ
CQkJCQkgR0Vycm9yICAgICAgICAgICAgICoqZXJyb3IpOworCitTb3VwTWVzc2FnZSAgICAgICAg
ICpzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dldF9tZXNzYWdlIChTb3VwSFRUUElucHV0U3RyZWFt
ICpodHRwc3RyZWFtKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9fU09VUF9IVFRQX0lO
UFVUX1NUUkVBTV9IX18gKi8KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmMgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjdjZjkxYzYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5jCkBAIC0wLDAgKzEsMjA1IEBACisv
KgorICogc291cC1yZXF1ZXN0LWRhdGEuYzogZGF0YTogVVJJIHJlcXVlc3Qgb2JqZWN0CisgKgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAx
MCBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4K
KyNlbmRpZgorI2luY2x1ZGUgInNvdXAtcmVxdWVzdC1kYXRhLmgiCisKKyNpbmNsdWRlICJzb3Vw
LXJlcXVlc3Rlci5oIgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorI2luY2x1ZGUgPGdsaWIv
Z2kxOG4uaD4KKworR19ERUZJTkVfVFlQRSAoU291cFJlcXVlc3REYXRhLCBzb3VwX3JlcXVlc3Rf
ZGF0YSwgU09VUF9UWVBFX1JFUVVFU1QpCisKK3N0cnVjdCBfU291cFJlcXVlc3REYXRhUHJpdmF0
ZSB7CisJZ3NpemUgY29udGVudF9sZW5ndGg7CisJY2hhciAqY29udGVudF90eXBlOworfTsKKwor
c3RhdGljIHZvaWQKK3NvdXBfcmVxdWVzdF9kYXRhX2luaXQgKFNvdXBSZXF1ZXN0RGF0YSAqZGF0
YSkKK3sKKwlkYXRhLT5wcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFIChkYXRhLCBT
T1VQX1RZUEVfUkVRVUVTVF9EQVRBLCBTb3VwUmVxdWVzdERhdGFQcml2YXRlKTsKK30KKworc3Rh
dGljIHZvaWQKK3NvdXBfcmVxdWVzdF9kYXRhX2ZpbmFsaXplIChHT2JqZWN0ICpvYmplY3QpCit7
CisJU291cFJlcXVlc3REYXRhICpkYXRhID0gU09VUF9SRVFVRVNUX0RBVEEgKG9iamVjdCk7CisK
KwlnX2ZyZWUgKGRhdGEtPnByaXYtPmNvbnRlbnRfdHlwZSk7CisKKwlHX09CSkVDVF9DTEFTUyAo
c291cF9yZXF1ZXN0X2RhdGFfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Cit9CisK
K3N0YXRpYyBnYm9vbGVhbgorc291cF9yZXF1ZXN0X2RhdGFfY2hlY2tfdXJpIChTb3VwUmVxdWVz
dCAgKnJlcXVlc3QsCisJCQkgICAgIFNvdXBVUkkgICAgICAqdXJpLAorCQkJICAgICBHRXJyb3Ig
ICAgICAqKmVycm9yKQoreworCXJldHVybiB1cmktPmhvc3QgPT0gTlVMTDsKK30KKworCisjZGVm
aW5lIFhESUdJVChjKSAoKGMpIDw9ICc5JyA/IChjKSAtICcwJyA6ICgoYykgJiAweDRGKSAtICdB
JyArIDEwKQorI2RlZmluZSBIRVhDSEFSKHMpICgoWERJR0lUIChzWzFdKSA8PCA0KSArIFhESUdJ
VCAoc1syXSkpCisKK2NoYXIgKgordXJpX2RlY29kZWRfY29weSAoY29uc3QgY2hhciAqcGFydCwg
aW50IGxlbmd0aCwgZ2Jvb2xlYW4gZml4dXApCit7CisJdW5zaWduZWQgY2hhciAqcywgKmQ7CisJ
Y2hhciAqZGVjb2RlZCA9IGdfc3RybmR1cCAocGFydCwgbGVuZ3RoKTsKKworCXMgPSBkID0gKHVu
c2lnbmVkIGNoYXIgKilkZWNvZGVkOworCWRvIHsKKwkJaWYgKCpzID09ICclJykgeworCQkJaWYg
KCFnX2FzY2lpX2lzeGRpZ2l0IChzWzFdKSB8fAorCQkJICAgICFnX2FzY2lpX2lzeGRpZ2l0IChz
WzJdKSkgeworCQkJCWlmICghZml4dXApIHsKKwkJCQkJZ19mcmVlIChkZWNvZGVkKTsKKwkJCQkJ
cmV0dXJuIE5VTEw7CisJCQkJfQorCQkJCSpkKysgPSAqczsKKwkJCQljb250aW51ZTsKKwkJCX0K
KwkJCSpkKysgPSBIRVhDSEFSIChzKTsKKwkJCXMgKz0gMjsKKwkJfSBlbHNlCisJCQkqZCsrID0g
KnM7CisJfSB3aGlsZSAoKnMrKyk7CisKKwlyZXR1cm4gZGVjb2RlZDsKK30KKworc3RhdGljIEdJ
bnB1dFN0cmVhbSAqCitzb3VwX3JlcXVlc3RfZGF0YV9zZW5kIChTb3VwUmVxdWVzdCAgICpyZXF1
ZXN0LAorCQkJR0NhbmNlbGxhYmxlICAqY2FuY2VsbGFibGUsCisJCQlHRXJyb3IgICAgICAgKipl
cnJvcikKK3sKKwlTb3VwUmVxdWVzdERhdGEgKmRhdGEgPSBTT1VQX1JFUVVFU1RfREFUQSAocmVx
dWVzdCk7CisJU291cFVSSSAqdXJpID0gc291cF9yZXF1ZXN0X2dldF91cmkgKHJlcXVlc3QpOwor
CUdJbnB1dFN0cmVhbSAqbWVtc3RyZWFtOworCWNvbnN0IGNoYXIgKmNvbW1hLCAqc2VtaSwgKnN0
YXJ0LCAqZW5kOworCWdib29sZWFuIGJhc2U2NCA9IEZBTFNFOworCisJZ2NoYXIgKnVyaXN0ciA9
IHNvdXBfdXJpX3RvX3N0cmluZyAodXJpLCBGQUxTRSk7CisJY29tbWEgPSBzdHJjaHIgKHVyaXN0
ciwgJywnKTsKKwlpZiAoY29tbWEgJiYgY29tbWEgIT0gdXJpc3RyKSB7CisJCS8qIERlYWwgd2l0
aCBNSU1FIHR5cGUgLyBwYXJhbXMgKi8KKwkJc2VtaSA9IG1lbWNociAodXJpc3RyLCAnOycsIGNv
bW1hIC0gdXJpc3RyKTsKKwkJZW5kID0gc2VtaSA/IHNlbWkgOiBjb21tYTsKKworCQlpZiAoZW5k
ICE9IHVyaXN0cikKKwkJCWRhdGEtPnByaXYtPmNvbnRlbnRfdHlwZSA9IHVyaV9kZWNvZGVkX2Nv
cHkgKHVyaXN0ciwgZW5kIC0gdXJpc3RyLCBUUlVFKTsKKworCQlpZiAoc2VtaSAmJiAhZ19hc2Np
aV9zdHJuY2FzZWNtcCAoc2VtaSwgIjtiYXNlNjQiLCBNQVggKGNvbW1hIC0gc2VtaSwgc3RybGVu
ICgiO2Jhc2U2NCIpKSkpCisJCQliYXNlNjQgPSBUUlVFOworCX0KKworCW1lbXN0cmVhbSA9IGdf
bWVtb3J5X2lucHV0X3N0cmVhbV9uZXcgKCk7CisKKwlzdGFydCA9IGNvbW1hID8gY29tbWEgKyAx
IDogdXJpc3RyOworCisJaWYgKCpzdGFydCkgeworCQlndWNoYXIgKmJ1ZjsKKworCQlpZiAoYmFz
ZTY0KSB7CisJCQlpbnQgaW5sZW4sIHN0YXRlID0gMDsKKwkJCWd1aW50IHNhdmUgPSAwOworCQkJ
Y2hhciAqdW5lc2NhcGVkOworCisJCQlpZiAoc3RyY2hyIChzdGFydCwgJyUnKSkgeworCQkJCXN0
YXJ0ID0gdW5lc2NhcGVkID0gdXJpX2RlY29kZWRfY29weSAoc3RhcnQsIHN0cmxlbiAoc3RhcnQp
LCBUUlVFKTsKKwkJCQlpZiAoIXVuZXNjYXBlZCkKKwkJCQkJZ290byBmYWlsOworCQkJfSBlbHNl
CisJCQkJdW5lc2NhcGVkID0gTlVMTDsKKworCQkJaW5sZW4gPSBzdHJsZW4gKHN0YXJ0KTsKKwkJ
CWJ1ZiA9IGdfbWFsbG9jIChpbmxlbiAqIDMgLyA0KTsKKwkJCWRhdGEtPnByaXYtPmNvbnRlbnRf
bGVuZ3RoID0KKwkJCQlnX2Jhc2U2NF9kZWNvZGVfc3RlcCAoc3RhcnQsIGlubGVuLCBidWYsCisJ
CQkJCQkgICAgICAmc3RhdGUsICZzYXZlKTsKKwkJCWdfZnJlZSAodW5lc2NhcGVkKTsKKwkJCWlm
IChzdGF0ZSAhPSAwKSB7CisJCQkJZ19mcmVlIChidWYpOworCQkJCWdvdG8gZmFpbDsKKwkJCX0K
KwkJfSBlbHNlIHsKKwkJCS8qIENhbm5vdCB1c2UgZ191cmlfdW5lc2NhcGVfc3RyaW5nIG5vcgor
CQkJICAgc291cF91cmlfZGVjb2RlIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0bworCQkJICAgZmFp
bCBmb3IgdGhpbmdzIGxpa2UgIiUzRSUlM0MiIC0+ICI+JTwiICovCisJCQlidWYgPSAoZ3VjaGFy
ICopdXJpX2RlY29kZWRfY29weSAoc3RhcnQsIHN0cmxlbiAoc3RhcnQpLCBUUlVFKTsKKwkJCWlm
ICghYnVmKQorCQkJCWdvdG8gZmFpbDsKKwkJCWRhdGEtPnByaXYtPmNvbnRlbnRfbGVuZ3RoID0g
c3RybGVuICgoY2hhciAqKWJ1Zik7CisJCX0KKworCQlnX21lbW9yeV9pbnB1dF9zdHJlYW1fYWRk
X2RhdGEgKEdfTUVNT1JZX0lOUFVUX1NUUkVBTSAobWVtc3RyZWFtKSwKKwkJCQkJCWJ1ZiwgZGF0
YS0+cHJpdi0+Y29udGVudF9sZW5ndGgsCisJCQkJCQlnX2ZyZWUpOworCX0KKwlnX2ZyZWUgKHVy
aXN0cik7CisKKwlyZXR1cm4gbWVtc3RyZWFtOworCisgZmFpbDoKKwlnX2ZyZWUgKHVyaXN0cik7
CisJZ19zZXRfZXJyb3IgKGVycm9yLCBTT1VQX0VSUk9SLCBTT1VQX0VSUk9SX0JBRF9VUkksCisJ
CSAgICAgXyAoIlVuYWJsZSB0byBkZWNvZGUgVVJJOiAlcyIpLCBzdGFydCk7CisJZ19vYmplY3Rf
dW5yZWYgKG1lbXN0cmVhbSk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBnb2Zmc2V0Citz
b3VwX3JlcXVlc3RfZGF0YV9nZXRfY29udGVudF9sZW5ndGggKFNvdXBSZXF1ZXN0ICpyZXF1ZXN0
KQoreworCVNvdXBSZXF1ZXN0RGF0YSAqZGF0YSA9IFNPVVBfUkVRVUVTVF9EQVRBIChyZXF1ZXN0
KTsKKworCXJldHVybiBkYXRhLT5wcml2LT5jb250ZW50X2xlbmd0aDsKK30KKworc3RhdGljIGNv
bnN0IGNoYXIgKgorc291cF9yZXF1ZXN0X2RhdGFfZ2V0X2NvbnRlbnRfdHlwZSAoU291cFJlcXVl
c3QgKnJlcXVlc3QpCit7CisJU291cFJlcXVlc3REYXRhICpkYXRhID0gU09VUF9SRVFVRVNUX0RB
VEEgKHJlcXVlc3QpOworCisJcmV0dXJuIGRhdGEtPnByaXYtPmNvbnRlbnRfdHlwZTsKK30KKwor
c3RhdGljIHZvaWQKK3NvdXBfcmVxdWVzdF9kYXRhX2NsYXNzX2luaXQgKFNvdXBSZXF1ZXN0RGF0
YUNsYXNzICpyZXF1ZXN0X2RhdGFfY2xhc3MpCit7CisJR09iamVjdENsYXNzICpvYmplY3RfY2xh
c3MgPSBHX09CSkVDVF9DTEFTUyAocmVxdWVzdF9kYXRhX2NsYXNzKTsKKwlTb3VwUmVxdWVzdENs
YXNzICpyZXF1ZXN0X2NsYXNzID0KKwkJU09VUF9SRVFVRVNUX0NMQVNTIChyZXF1ZXN0X2RhdGFf
Y2xhc3MpOworCisJZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlIChyZXF1ZXN0X2RhdGFfY2xhc3Ms
IHNpemVvZiAoU291cFJlcXVlc3REYXRhUHJpdmF0ZSkpOworCisJb2JqZWN0X2NsYXNzLT5maW5h
bGl6ZSA9IHNvdXBfcmVxdWVzdF9kYXRhX2ZpbmFsaXplOworCisJcmVxdWVzdF9jbGFzcy0+Y2hl
Y2tfdXJpID0gc291cF9yZXF1ZXN0X2RhdGFfY2hlY2tfdXJpOworCXJlcXVlc3RfY2xhc3MtPnNl
bmQgPSBzb3VwX3JlcXVlc3RfZGF0YV9zZW5kOworCXJlcXVlc3RfY2xhc3MtPmdldF9jb250ZW50
X2xlbmd0aCA9IHNvdXBfcmVxdWVzdF9kYXRhX2dldF9jb250ZW50X2xlbmd0aDsKKwlyZXF1ZXN0
X2NsYXNzLT5nZXRfY29udGVudF90eXBlID0gc291cF9yZXF1ZXN0X2RhdGFfZ2V0X2NvbnRlbnRf
dHlwZTsKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3NvdXAtcmVxdWVzdC1kYXRhLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNo
ZS9zb3VwLXJlcXVlc3QtZGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjVjMTRmMzcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxp
YSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWZuZGVmIFNPVVBfUkVRVUVTVF9EQVRBX0gKKyNkZWZpbmUgU09VUF9SRVFVRVNU
X0RBVEFfSCAxCisKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3QuaCIKKworR19CRUdJTl9ERUNMUwor
CisjZGVmaW5lIFNPVVBfVFlQRV9SRVFVRVNUX0RBVEEgICAgICAgICAgICAoc291cF9yZXF1ZXN0
X2RhdGFfZ2V0X3R5cGUgKCkpCisjZGVmaW5lIFNPVVBfUkVRVUVTVF9EQVRBKG9iamVjdCkgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmplY3QpLCBTT1VQX1RZUEVfUkVR
VUVTVF9EQVRBLCBTb3VwUmVxdWVzdERhdGEpKQorI2RlZmluZSBTT1VQX1JFUVVFU1RfREFUQV9D
TEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBTT1VQX1RZ
UEVfUkVRVUVTVF9EQVRBLCBTb3VwUmVxdWVzdERhdGFDbGFzcykpCisjZGVmaW5lIFNPVVBfSVNf
UkVRVUVTVF9EQVRBKG9iamVjdCkgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChv
YmplY3QpLCBTT1VQX1RZUEVfUkVRVUVTVF9EQVRBKSkKKyNkZWZpbmUgU09VUF9JU19SRVFVRVNU
X0RBVEFfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgU09V
UF9UWVBFX1JFUVVFU1RfREFUQSkpCisjZGVmaW5lIFNPVVBfUkVRVUVTVF9EQVRBX0dFVF9DTEFT
UyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIFNPVVBfVFlQRV9SRVFV
RVNUX0RBVEEsIFNvdXBSZXF1ZXN0RGF0YUNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1NvdXBS
ZXF1ZXN0RGF0YVByaXZhdGUgU291cFJlcXVlc3REYXRhUHJpdmF0ZTsKKwordHlwZWRlZiBzdHJ1
Y3QgeworCVNvdXBSZXF1ZXN0IHBhcmVudDsKKworCVNvdXBSZXF1ZXN0RGF0YVByaXZhdGUgKnBy
aXY7Cit9IFNvdXBSZXF1ZXN0RGF0YTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCVNvdXBSZXF1ZXN0
Q2xhc3MgcGFyZW50OworfSBTb3VwUmVxdWVzdERhdGFDbGFzczsKKworR1R5cGUgc291cF9yZXF1
ZXN0X2RhdGFfZ2V0X3R5cGUgKHZvaWQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogU09V
UF9SRVFVRVNUX0RBVEFfSCAqLwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWZpbGUuYyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMDNmNmUwOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmMKQEAgLTAsMCArMSwzMTMgQEAK
Ky8qCisgKiBzb3VwLXJlcXVlc3QtZmlsZS5jOiBmaWxlOiBVUkkgcmVxdWVzdCBvYmplY3QKKyAq
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAy
MDEwIElnYWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5o
PgorI2VuZGlmCisKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3QtZmlsZS5oIgorI2luY2x1ZGUgInNv
dXAtZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5oIgorI2luY2x1ZGUgInNvdXAtcmVxdWVzdGVyLmgi
CisjaW5jbHVkZSA8Z2xpYi9naTE4bi5oPgorCitHX0RFRklORV9UWVBFIChTb3VwUmVxdWVzdEZp
bGUsIHNvdXBfcmVxdWVzdF9maWxlLCBTT1VQX1RZUEVfUkVRVUVTVCkKKworc3RydWN0IF9Tb3Vw
UmVxdWVzdEZpbGVQcml2YXRlIHsKKwlHRmlsZSAqZ2ZpbGU7CisKKwljaGFyICptaW1lX3R5cGU7
CisJZ29mZnNldCBzaXplOworfTsKKworR0ZpbGUgKgorc291cF9yZXF1ZXN0X2ZpbGVfZ2V0X2Zp
bGUgKFNvdXBSZXF1ZXN0RmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gZ19vYmplY3RfcmVmIChmaWxl
LT5wcml2LT5nZmlsZSk7Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX3JlcXVlc3RfZmlsZV9pbml0
IChTb3VwUmVxdWVzdEZpbGUgKmZpbGUpCit7CisJZmlsZS0+cHJpdiA9IEdfVFlQRV9JTlNUQU5D
RV9HRVRfUFJJVkFURSAoZmlsZSwgU09VUF9UWVBFX1JFUVVFU1RfRklMRSwgU291cFJlcXVlc3RG
aWxlUHJpdmF0ZSk7CisKKwlmaWxlLT5wcml2LT5zaXplID0gLTE7Cit9CisKK3N0YXRpYyB2b2lk
Citzb3VwX3JlcXVlc3RfZmlsZV9maW5hbGl6ZSAoR09iamVjdCAqb2JqZWN0KQoreworCVNvdXBS
ZXF1ZXN0RmlsZSAqZmlsZSA9IFNPVVBfUkVRVUVTVF9GSUxFIChvYmplY3QpOworCisJaWYgKGZp
bGUtPnByaXYtPmdmaWxlKQorCQlnX29iamVjdF91bnJlZiAoZmlsZS0+cHJpdi0+Z2ZpbGUpOwor
CWdfZnJlZSAoZmlsZS0+cHJpdi0+bWltZV90eXBlKTsKKworCUdfT0JKRUNUX0NMQVNTIChzb3Vw
X3JlcXVlc3RfZmlsZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKK30KKworc3Rh
dGljIGdib29sZWFuCitzb3VwX3JlcXVlc3RfZmlsZV9jaGVja191cmkgKFNvdXBSZXF1ZXN0ICAq
cmVxdWVzdCwKKwkJCSAgICAgU291cFVSSSAgICAgICp1cmksCisJCQkgICAgIEdFcnJvciAgICAg
ICoqZXJyb3IpCit7CisJLyogImZpbGU6L2ZvbyIgaXMgbm90IHZhbGlkICovCisJaWYgKCF1cmkt
Pmhvc3QpCisJCXJldHVybiBGQUxTRTsKKworCS8qIGJ1dCBpdCBtdXN0IGJlICJmaWxlOi8vLy4u
LiIgb3IgImZpbGU6Ly9sb2NhbGhvc3QvLi4uIiAqLworCWlmICh1cmktPnNjaGVtZSA9PSBTT1VQ
X1VSSV9TQ0hFTUVfRklMRSAmJgorCSAgICAqdXJpLT5ob3N0ICYmCisJICAgIGdfYXNjaWlfc3Ry
Y2FzZWNtcCAodXJpLT5ob3N0LCAibG9jYWxob3N0IikgIT0gMCkKKwkJcmV0dXJuIEZBTFNFOwor
CisJcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX3JlcXVlc3RfZmlsZV9mdHBf
bWFpbl9sb29wX3F1aXQgKEdPYmplY3QgICAgICAqb2JqZWN0LAorCQkJCSAgICAgIEdBc3luY1Jl
c3VsdCAqcmVzdWx0LAorCQkJCSAgICAgIGdwb2ludGVyIGxvb3ApCit7CisJZ19tYWluX2xvb3Bf
cXVpdCAobG9vcCk7Cit9CisKKy8qIFRoaXMgaXMgYSBzb21ld2hhdCBoYWNreSB3YXkgdG8gZ2V0
IEZUUCB0byBhbG1vc3Qgd29yay4gVGhlIHByb3BlciB3YXkgdG8KKyAqIGdldCBGVFAgdG8gX3Jl
YWxseV8gd29yayBpbnZvbHZlcyBoYWNraW5nIEdJTyB0byBoYXZlIEFQSXMgdG8gaGFuZGxlCisg
KiBjYW5vbmNpYWwgVVJMcy4KKyAqLworc3RhdGljIEdGaWxlICoKK3NvdXBfcmVxdWVzdF9maWxl
X2Vuc3VyZV9maWxlX2Z0cCAoU291cFVSSSAgICAgICAqdXJpLAorCQkJCSAgIEdDYW5jZWxsYWJs
ZSAgKmNhbmNlbGxhYmxlLAorCQkJCSAgIEdFcnJvciAgICAgICAqKmVycm9yKQoreworCVNvdXBV
UkkgKmhvc3Q7CisJY2hhciAqczsKKwlHRmlsZSAqZmlsZSwgKnJlc3VsdDsKKwlHTW91bnQgKm1v
dW50OworCisJaG9zdCA9IHNvdXBfdXJpX2NvcHlfaG9zdCAodXJpKTsKKwlzID0gc291cF91cmlf
dG9fc3RyaW5nIChob3N0LCBGQUxTRSk7CisJZmlsZSA9IGdfZmlsZV9uZXdfZm9yX3VyaSAocyk7
CisJc291cF91cmlfZnJlZSAoaG9zdCk7CisJZ19mcmVlIChzKTsKKworCW1vdW50ID0gZ19maWxl
X2ZpbmRfZW5jbG9zaW5nX21vdW50IChmaWxlLCBjYW5jZWxsYWJsZSwgZXJyb3IpOworCWlmICht
b3VudCA9PSBOVUxMICYmIGdfZmlsZV9zdXBwb3J0c190aHJlYWRfY29udGV4dHMgKGZpbGUpKSB7
CisJCUdNYWluQ29udGV4dCAqY29udGV4dCA9IGdfbWFpbl9jb250ZXh0X25ldyAoKTsKKwkJR01h
aW5Mb29wICpsb29wID0gZ19tYWluX2xvb3BfbmV3IChjb250ZXh0LCBGQUxTRSk7CisKKwkJZ19j
bGVhcl9lcnJvciAoZXJyb3IpOworCQlnX21haW5fY29udGV4dF9wdXNoX3RocmVhZF9kZWZhdWx0
IChjb250ZXh0KTsKKwkJZ19maWxlX21vdW50X2VuY2xvc2luZ192b2x1bWUgKGZpbGUsCisJCQkJ
CSAgICAgICBHX01PVU5UX01PVU5UX05PTkUsCisJCQkJCSAgICAgICBOVUxMLCAvKiBGSVhNRSEg
Ki8KKwkJCQkJICAgICAgIGNhbmNlbGxhYmxlLAorCQkJCQkgICAgICAgc291cF9yZXF1ZXN0X2Zp
bGVfZnRwX21haW5fbG9vcF9xdWl0LAorCQkJCQkgICAgICAgbG9vcCk7CisJCWdfbWFpbl9sb29w
X3J1biAobG9vcCk7CisJCWdfbWFpbl9jb250ZXh0X3BvcF90aHJlYWRfZGVmYXVsdCAoY29udGV4
dCk7CisJCWdfbWFpbl9sb29wX3VucmVmIChsb29wKTsKKwkJZ19tYWluX2NvbnRleHRfdW5yZWYg
KGNvbnRleHQpOworCQltb3VudCA9IGdfZmlsZV9maW5kX2VuY2xvc2luZ19tb3VudCAoZmlsZSwg
Y2FuY2VsbGFibGUsIGVycm9yKTsKKwl9CisJaWYgKG1vdW50ID09IE5VTEwpCisJCXJldHVybiBO
VUxMOworCWdfb2JqZWN0X3VucmVmIChmaWxlKTsKKworCWZpbGUgPSBnX21vdW50X2dldF9kZWZh
dWx0X2xvY2F0aW9uIChtb3VudCk7CisJZ19vYmplY3RfdW5yZWYgKG1vdW50KTsKKworCXMgPSBn
X3N0cmR1cCAodXJpLT5wYXRoKTsKKwlpZiAoc3RyY2hyIChzLCAnOycpKQorCQkqc3RyY2hyIChz
LCAnOycpID0gMDsKKworCXJlc3VsdCA9IGdfZmlsZV9yZXNvbHZlX3JlbGF0aXZlX3BhdGggKGZp
bGUsIHMpOworCWdfZnJlZSAocyk7CisJZ19vYmplY3RfdW5yZWYgKGZpbGUpOworCisJcmV0dXJu
IHJlc3VsdDsKK30KKworc3RhdGljIGdib29sZWFuCitzb3VwX3JlcXVlc3RfZmlsZV9lbnN1cmVf
ZmlsZSAoU291cFJlcXVlc3RGaWxlICAqZmlsZSwKKwkJCSAgICAgICBHQ2FuY2VsbGFibGUgICAg
ICpjYW5jZWxsYWJsZSwKKwkJCSAgICAgICBHRXJyb3IgICAgICAgICAgKiplcnJvcikKK3sKKwlT
b3VwVVJJICp1cmk7CisKKwlpZiAoZmlsZS0+cHJpdi0+Z2ZpbGUpCisJCXJldHVybiBUUlVFOwor
CisJdXJpID0gc291cF9yZXF1ZXN0X2dldF91cmkgKFNPVVBfUkVRVUVTVCAoZmlsZSkpOworCWlm
ICh1cmktPnNjaGVtZSA9PSBTT1VQX1VSSV9TQ0hFTUVfRklMRSkgeworCQlmaWxlLT5wcml2LT5n
ZmlsZSA9IGdfZmlsZV9uZXdfZm9yX3BhdGggKHVyaS0+cGF0aCk7CisJCXJldHVybiBUUlVFOwor
CX0gZWxzZSBpZiAodXJpLT5zY2hlbWUgPT0gU09VUF9VUklfU0NIRU1FX0ZUUCkgeworCQlmaWxl
LT5wcml2LT5nZmlsZSA9IHNvdXBfcmVxdWVzdF9maWxlX2Vuc3VyZV9maWxlX2Z0cCAodXJpLAor
CQkJCQkJCQkgICAgICAgY2FuY2VsbGFibGUsCisJCQkJCQkJCSAgICAgICBlcnJvcik7CisJCXJl
dHVybiBmaWxlLT5wcml2LT5nZmlsZSAhPSBOVUxMOworCX0KKworCWdfc2V0X2Vycm9yIChlcnJv
ciwgU09VUF9FUlJPUiwgU09VUF9FUlJPUl9VTlNVUFBPUlRFRF9VUklfU0NIRU1FLAorCQkgICAg
IF8gKCJVbnN1cHBvcnRlZCBVUkkgc2NoZW1lICclcyciKSwgdXJpLT5zY2hlbWUpOworCXJldHVy
biBGQUxTRTsKK30KKworc3RhdGljIEdJbnB1dFN0cmVhbSAqCitzb3VwX3JlcXVlc3RfZmlsZV9z
ZW5kIChTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKKwkJCUdDYW5jZWxsYWJsZSAgICAg
ICAgICpjYW5jZWxsYWJsZSwKKwkJCUdFcnJvciAgICAgICAgICAgICAgKiplcnJvcikKK3sKKwlT
b3VwUmVxdWVzdEZpbGUgKmZpbGUgPSBTT1VQX1JFUVVFU1RfRklMRSAocmVxdWVzdCk7CisJR0lu
cHV0U3RyZWFtICpzdHJlYW07CisJR0Vycm9yICpteV9lcnJvciA9IE5VTEw7CisKKwlpZiAoIXNv
dXBfcmVxdWVzdF9maWxlX2Vuc3VyZV9maWxlIChmaWxlLCBjYW5jZWxsYWJsZSwgZXJyb3IpKQor
CQlyZXR1cm4gTlVMTDsKKworCXN0cmVhbSA9IEdfSU5QVVRfU1RSRUFNIChnX2ZpbGVfcmVhZCAo
ZmlsZS0+cHJpdi0+Z2ZpbGUsCisJCQkJCSAgICAgIGNhbmNlbGxhYmxlLCAmbXlfZXJyb3IpKTsK
KwlpZiAoc3RyZWFtID09IE5VTEwpIHsKKwkJaWYgKGdfZXJyb3JfbWF0Y2hlcyAobXlfZXJyb3Is
IEdfSU9fRVJST1IsIEdfSU9fRVJST1JfSVNfRElSRUNUT1JZKSkgeworCQkJR0ZpbGVFbnVtZXJh
dG9yICplbnVtZXJhdG9yOworCQkJZ19jbGVhcl9lcnJvciAoJm15X2Vycm9yKTsKKwkJCWVudW1l
cmF0b3IgPSBnX2ZpbGVfZW51bWVyYXRlX2NoaWxkcmVuIChmaWxlLT5wcml2LT5nZmlsZSwKKwkJ
CQkJCQkJIioiLAorCQkJCQkJCQlHX0ZJTEVfUVVFUllfSU5GT19OT05FLAorCQkJCQkJCQljYW5j
ZWxsYWJsZSwKKwkJCQkJCQkJZXJyb3IpOworCQkJaWYgKGVudW1lcmF0b3IpIHsKKwkJCQlzdHJl
YW0gPSBzb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fbmV3IChlbnVtZXJhdG9yLAorCQkJCQkJ
CQkJICBzb3VwX3JlcXVlc3RfZ2V0X3VyaSAocmVxdWVzdCkpOworCQkJCWdfb2JqZWN0X3VucmVm
IChlbnVtZXJhdG9yKTsKKwkJCQlmaWxlLT5wcml2LT5taW1lX3R5cGUgPSBnX3N0cmR1cCAoInRl
eHQvaHRtbCIpOworCQkJfQorCQl9IGVsc2UgeworCQkJZ19wcm9wYWdhdGVfZXJyb3IgKGVycm9y
LCBteV9lcnJvcik7CisJCX0KKwl9IGVsc2UgeworCQlHRmlsZUluZm8gKmluZm8gPSBnX2ZpbGVf
cXVlcnlfaW5mbyAoZmlsZS0+cHJpdi0+Z2ZpbGUsCisJCQkJCQkgICAgIEdfRklMRV9BVFRSSUJV
VEVfU1RBTkRBUkRfQ09OVEVOVF9UWVBFICIsIgorCQkJCQkJICAgICBHX0ZJTEVfQVRUUklCVVRF
X1NUQU5EQVJEX1NJWkUsCisJCQkJCQkgICAgIDAsIGNhbmNlbGxhYmxlLCBOVUxMKTsKKwkJaWYg
KGluZm8pIHsKKwkJCWNvbnN0IGNoYXIgKmNvbnRlbnRfdHlwZTsKKwkJCWZpbGUtPnByaXYtPnNp
emUgPSBnX2ZpbGVfaW5mb19nZXRfc2l6ZSAoaW5mbyk7CisJCQljb250ZW50X3R5cGUgPSBnX2Zp
bGVfaW5mb19nZXRfY29udGVudF90eXBlIChpbmZvKTsKKworCQkJaWYgKGNvbnRlbnRfdHlwZSkK
KwkJCQlmaWxlLT5wcml2LT5taW1lX3R5cGUgPSBnX2NvbnRlbnRfdHlwZV9nZXRfbWltZV90eXBl
IChjb250ZW50X3R5cGUpOworCQkJZ19vYmplY3RfdW5yZWYgKGluZm8pOworCQl9CisJfQorCisJ
cmV0dXJuIHN0cmVhbTsKK30KKworc3RhdGljIHZvaWQKK3NvdXBfcmVxdWVzdF9maWxlX3NlbmRf
YXN5bmNfdGhyZWFkIChHU2ltcGxlQXN5bmNSZXN1bHQgKnJlcywKKwkJCQkgICAgIEdPYmplY3Qg
ICAgICAgICAgICAqb2JqZWN0LAorCQkJCSAgICAgR0NhbmNlbGxhYmxlICAgICAgICpjYW5jZWxs
YWJsZSkKK3sKKwlHSW5wdXRTdHJlYW0gKnN0cmVhbTsKKwlTb3VwUmVxdWVzdCAqcmVxdWVzdDsK
KwlHRXJyb3IgKmVycm9yID0gTlVMTDsKKworCXJlcXVlc3QgPSBTT1VQX1JFUVVFU1QgKG9iamVj
dCk7CisKKwlzdHJlYW0gPSBzb3VwX3JlcXVlc3RfZmlsZV9zZW5kIChyZXF1ZXN0LCBjYW5jZWxs
YWJsZSwgJmVycm9yKTsKKworCWlmIChzdHJlYW0gPT0gTlVMTCkgeworCQlnX3NpbXBsZV9hc3lu
Y19yZXN1bHRfc2V0X2Zyb21fZXJyb3IgKHJlcywgZXJyb3IpOworCQlnX2Vycm9yX2ZyZWUgKGVy
cm9yKTsKKwl9IGVsc2UgeworCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19ncG9p
bnRlciAocmVzLCBzdHJlYW0sIGdfb2JqZWN0X3VucmVmKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lk
Citzb3VwX3JlcXVlc3RfZmlsZV9zZW5kX2FzeW5jIChTb3VwUmVxdWVzdCAgICAgICAgICAqcmVx
dWVzdCwKKwkJCSAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCSAg
ICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCisJCQkgICAgICBncG9pbnRlciB1c2Vy
X2RhdGEpCit7CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpyZXM7CisKKwlyZXMgPSBnX3NpbXBsZV9h
c3luY19yZXN1bHRfbmV3IChHX09CSkVDVCAocmVxdWVzdCksIGNhbGxiYWNrLCB1c2VyX2RhdGEs
IHNvdXBfcmVxdWVzdF9maWxlX3NlbmRfYXN5bmMpOworCisJZ19zaW1wbGVfYXN5bmNfcmVzdWx0
X3J1bl9pbl90aHJlYWQgKHJlcywgc291cF9yZXF1ZXN0X2ZpbGVfc2VuZF9hc3luY190aHJlYWQs
IEdfUFJJT1JJVFlfREVGQVVMVCwgY2FuY2VsbGFibGUpOworCWdfb2JqZWN0X3VucmVmIChyZXMp
OworfQorCitzdGF0aWMgR0lucHV0U3RyZWFtICoKK3NvdXBfcmVxdWVzdF9maWxlX3NlbmRfZmlu
aXNoIChTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKKwkJCSAgICAgICBHQXN5bmNSZXN1
bHQgICAgICAgICAqcmVzdWx0LAorCQkJICAgICAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJv
cikKK3sKKwlHU2ltcGxlQXN5bmNSZXN1bHQgKnNpbXBsZSA9IEdfU0lNUExFX0FTWU5DX1JFU1VM
VCAocmVzdWx0KTsKKworCWdfd2Fybl9pZl9mYWlsIChnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0
X3NvdXJjZV90YWcgKHNpbXBsZSkgPT0gc291cF9yZXF1ZXN0X2ZpbGVfc2VuZF9hc3luYyk7CisK
KwlpZiAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3Byb3BhZ2F0ZV9lcnJvciAoc2ltcGxlLCBlcnJv
cikpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGdfb2JqZWN0X3JlZiAoZ19zaW1wbGVfYXN5
bmNfcmVzdWx0X2dldF9vcF9yZXNfZ3BvaW50ZXIgKHNpbXBsZSkpOworfQorCitzdGF0aWMgZ29m
ZnNldAorc291cF9yZXF1ZXN0X2ZpbGVfZ2V0X2NvbnRlbnRfbGVuZ3RoIChTb3VwUmVxdWVzdCAq
cmVxdWVzdCkKK3sKKwlTb3VwUmVxdWVzdEZpbGUgKmZpbGUgPSBTT1VQX1JFUVVFU1RfRklMRSAo
cmVxdWVzdCk7CisKKwlyZXR1cm4gZmlsZS0+cHJpdi0+c2l6ZTsKK30KKworc3RhdGljIGNvbnN0
IGNoYXIgKgorc291cF9yZXF1ZXN0X2ZpbGVfZ2V0X2NvbnRlbnRfdHlwZSAoU291cFJlcXVlc3Qg
KnJlcXVlc3QpCit7CisJU291cFJlcXVlc3RGaWxlICpmaWxlID0gU09VUF9SRVFVRVNUX0ZJTEUg
KHJlcXVlc3QpOworCisJaWYgKCFmaWxlLT5wcml2LT5taW1lX3R5cGUpCisJCXJldHVybiAiYXBw
bGljYXRpb24vb2N0ZXQtc3RyZWFtIjsKKworCXJldHVybiBmaWxlLT5wcml2LT5taW1lX3R5cGU7
Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX3JlcXVlc3RfZmlsZV9jbGFzc19pbml0IChTb3VwUmVx
dWVzdEZpbGVDbGFzcyAqcmVxdWVzdF9maWxlX2NsYXNzKQoreworCUdPYmplY3RDbGFzcyAqb2Jq
ZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKHJlcXVlc3RfZmlsZV9jbGFzcyk7CisJU291cFJl
cXVlc3RDbGFzcyAqcmVxdWVzdF9jbGFzcyA9CisJCVNPVVBfUkVRVUVTVF9DTEFTUyAocmVxdWVz
dF9maWxlX2NsYXNzKTsKKworCWdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSAocmVxdWVzdF9maWxl
X2NsYXNzLCBzaXplb2YgKFNvdXBSZXF1ZXN0RmlsZVByaXZhdGUpKTsKKworCW9iamVjdF9jbGFz
cy0+ZmluYWxpemUgPSBzb3VwX3JlcXVlc3RfZmlsZV9maW5hbGl6ZTsKKworCXJlcXVlc3RfY2xh
c3MtPmNoZWNrX3VyaSA9IHNvdXBfcmVxdWVzdF9maWxlX2NoZWNrX3VyaTsKKwlyZXF1ZXN0X2Ns
YXNzLT5zZW5kID0gc291cF9yZXF1ZXN0X2ZpbGVfc2VuZDsKKwlyZXF1ZXN0X2NsYXNzLT5zZW5k
X2FzeW5jID0gc291cF9yZXF1ZXN0X2ZpbGVfc2VuZF9hc3luYzsKKwlyZXF1ZXN0X2NsYXNzLT5z
ZW5kX2ZpbmlzaCA9IHNvdXBfcmVxdWVzdF9maWxlX3NlbmRfZmluaXNoOworCXJlcXVlc3RfY2xh
c3MtPmdldF9jb250ZW50X2xlbmd0aCA9IHNvdXBfcmVxdWVzdF9maWxlX2dldF9jb250ZW50X2xl
bmd0aDsKKwlyZXF1ZXN0X2NsYXNzLT5nZXRfY29udGVudF90eXBlID0gc291cF9yZXF1ZXN0X2Zp
bGVfZ2V0X2NvbnRlbnRfdHlwZTsKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmggYi9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZmlsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjNkODhkM2QKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZmlsZS5oCkBAIC0wLDAgKzEsNTMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0
IChDKSAyMDEwIElnYWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFNPVVBfUkVRVUVTVF9GSUxFX0gKKyNkZWZp
bmUgU09VUF9SRVFVRVNUX0ZJTEVfSCAxCisKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3QuaCIKKwor
R19CRUdJTl9ERUNMUworCisjZGVmaW5lIFNPVVBfVFlQRV9SRVFVRVNUX0ZJTEUgICAgICAgICAg
ICAoc291cF9yZXF1ZXN0X2ZpbGVfZ2V0X3R5cGUgKCkpCisjZGVmaW5lIFNPVVBfUkVRVUVTVF9G
SUxFKG9iamVjdCkgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmplY3Qp
LCBTT1VQX1RZUEVfUkVRVUVTVF9GSUxFLCBTb3VwUmVxdWVzdEZpbGUpKQorI2RlZmluZSBTT1VQ
X1JFUVVFU1RfRklMRV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgo
a2xhc3MpLCBTT1VQX1RZUEVfUkVRVUVTVF9GSUxFLCBTb3VwUmVxdWVzdEZpbGVDbGFzcykpCisj
ZGVmaW5lIFNPVVBfSVNfUkVRVUVTVF9GSUxFKG9iamVjdCkgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX1RZUEUgKChvYmplY3QpLCBTT1VQX1RZUEVfUkVRVUVTVF9GSUxFKSkKKyNkZWZpbmUg
U09VUF9JU19SRVFVRVNUX0ZJTEVfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQ
RSAoKGtsYXNzKSwgU09VUF9UWVBFX1JFUVVFU1RfRklMRSkpCisjZGVmaW5lIFNPVVBfUkVRVUVT
VF9GSUxFX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiks
IFNPVVBfVFlQRV9SRVFVRVNUX0ZJTEUsIFNvdXBSZXF1ZXN0RmlsZUNsYXNzKSkKKwordHlwZWRl
ZiBzdHJ1Y3QgX1NvdXBSZXF1ZXN0RmlsZVByaXZhdGUgU291cFJlcXVlc3RGaWxlUHJpdmF0ZTsK
KwordHlwZWRlZiBzdHJ1Y3QgeworCVNvdXBSZXF1ZXN0IHBhcmVudDsKKworCVNvdXBSZXF1ZXN0
RmlsZVByaXZhdGUgKnByaXY7Cit9IFNvdXBSZXF1ZXN0RmlsZTsKKwordHlwZWRlZiBzdHJ1Y3Qg
eworCVNvdXBSZXF1ZXN0Q2xhc3MgcGFyZW50OworfSBTb3VwUmVxdWVzdEZpbGVDbGFzczsKKwor
R1R5cGUgc291cF9yZXF1ZXN0X2ZpbGVfZ2V0X3R5cGUgKHZvaWQpOworCitHRmlsZSAgKnNvdXBf
cmVxdWVzdF9maWxlX2dldF9maWxlIChTb3VwUmVxdWVzdEZpbGUgKmZpbGUpOworCitHX0VORF9E
RUNMUworCisjZW5kaWYgLyogU09VUF9SRVFVRVNUX0ZJTEVfSCAqLwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuYyBiL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRwLmMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODczYzJiZQotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRw
LmMKQEAgLTAsMCArMSwzMzkgQEAKKy8qCisgKiBzb3VwLXJlcXVlc3QtaHR0cC5jOiBodHRwOiBV
UkkgcmVxdWVzdCBvYmplY3QKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwgSW5j
LgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdf
SAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxnbGliL2dpMThuLmg+
CisKKyNpbmNsdWRlICJzb3VwLWNhY2hlLmgiCisjaW5jbHVkZSAic291cC1jYWNoZS1wcml2YXRl
LmgiCisjaW5jbHVkZSAic291cC1odHRwLWlucHV0LXN0cmVhbS5oIgorI2luY2x1ZGUgInNvdXAt
cmVxdWVzdC1odHRwLmgiCisKK0dfREVGSU5FX1RZUEUgKFNvdXBSZXF1ZXN0SFRUUCwgc291cF9y
ZXF1ZXN0X2h0dHAsIFNPVVBfVFlQRV9SRVFVRVNUKQorCitzdHJ1Y3QgX1NvdXBSZXF1ZXN0SFRU
UFByaXZhdGUgeworCVNvdXBNZXNzYWdlICptc2c7Cit9OworCisvKioKKyAqIHNvdXBfcmVxdWVz
dF9odHRwX2dldF9tZXNzYWdlOgorICogQGh0dHA6IGEgI1NvdXBSZXF1ZXN0SFRUUCBvYmplY3QK
KyAqCisgKiBHZXRzIGEgbmV3IHJlZmVyZW5jZSB0byB0aGUgI1NvdXBNZXNzYWdlIGFzc29jaWF0
ZWQgdG8gdGhpcyBTb3VwUmVxdWVzdAorICoKKyAqIFJldHVybnM6IGEgbmV3IHJlZmVyZW5jZSB0
byB0aGUgI1NvdXBNZXNzYWdlCisgKiovCitTb3VwTWVzc2FnZSAqCitzb3VwX3JlcXVlc3RfaHR0
cF9nZXRfbWVzc2FnZSAoU291cFJlcXVlc3RIVFRQICpodHRwKQoreworCWdfcmV0dXJuX3ZhbF9p
Zl9mYWlsIChTT1VQX0lTX1JFUVVFU1RfSFRUUCAoaHR0cCksIE5VTEwpOworCisJcmV0dXJuIGdf
b2JqZWN0X3JlZiAoaHR0cC0+cHJpdi0+bXNnKTsKK30KKworc3RhdGljIHZvaWQKK3NvdXBfcmVx
dWVzdF9odHRwX2luaXQgKFNvdXBSZXF1ZXN0SFRUUCAqaHR0cCkKK3sKKwlodHRwLT5wcml2ID0g
R19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFIChodHRwLCBTT1VQX1RZUEVfUkVRVUVTVF9IVFRQ
LCBTb3VwUmVxdWVzdEhUVFBQcml2YXRlKTsKK30KKworc3RhdGljIGdib29sZWFuCitzb3VwX3Jl
cXVlc3RfaHR0cF9jaGVja191cmkgKFNvdXBSZXF1ZXN0ICAqcmVxdWVzdCwKKwkJCSAgICAgU291
cFVSSSAgICAgICp1cmksCisJCQkgICAgIEdFcnJvciAgICAgICoqZXJyb3IpCit7CisJU291cFJl
cXVlc3RIVFRQICpodHRwID0gU09VUF9SRVFVRVNUX0hUVFAgKHJlcXVlc3QpOworCisJaWYgKCFT
T1VQX1VSSV9WQUxJRF9GT1JfSFRUUCAodXJpKSkKKwkJcmV0dXJuIEZBTFNFOworCisJaHR0cC0+
cHJpdi0+bXNnID0gc291cF9tZXNzYWdlX25ld19mcm9tX3VyaSAoU09VUF9NRVRIT0RfR0VULCB1
cmkpOworCXJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZAorc291cF9yZXF1ZXN0X2h0dHBf
ZmluYWxpemUgKEdPYmplY3QgKm9iamVjdCkKK3sKKwlTb3VwUmVxdWVzdEhUVFAgKmh0dHAgPSBT
T1VQX1JFUVVFU1RfSFRUUCAob2JqZWN0KTsKKworCWlmIChodHRwLT5wcml2LT5tc2cpCisJCWdf
b2JqZWN0X3VucmVmIChodHRwLT5wcml2LT5tc2cpOworCisJR19PQkpFQ1RfQ0xBU1MgKHNvdXBf
cmVxdWVzdF9odHRwX3BhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOworfQorCitzdGF0
aWMgR0lucHV0U3RyZWFtICoKK3NvdXBfcmVxdWVzdF9odHRwX3NlbmQgKFNvdXBSZXF1ZXN0ICAg
ICAgICAgICpyZXF1ZXN0LAorCQkJR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAor
CQkJR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKQoreworCVNvdXBIVFRQSW5wdXRTdHJlYW0g
Kmh0dHBzdHJlYW07CisJU291cFJlcXVlc3RIVFRQICpodHRwID0gU09VUF9SRVFVRVNUX0hUVFAg
KHJlcXVlc3QpOworCisJaHR0cHN0cmVhbSA9IHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fbmV3IChz
b3VwX3JlcXVlc3RfZ2V0X3Nlc3Npb24gKHJlcXVlc3QpLCBodHRwLT5wcml2LT5tc2cpOworCWlm
ICghc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kIChodHRwc3RyZWFtLCBjYW5jZWxsYWJsZSwg
ZXJyb3IpKSB7CisJCWdfb2JqZWN0X3VucmVmIChodHRwc3RyZWFtKTsKKwkJcmV0dXJuIE5VTEw7
CisJfQorCXJldHVybiAoR0lucHV0U3RyZWFtICopaHR0cHN0cmVhbTsKK30KKworCitzdGF0aWMg
dm9pZAorc2VudF9hc3luYyAoR09iamVjdCAqc291cmNlLCBHQXN5bmNSZXN1bHQgKnJlc3VsdCwg
Z3BvaW50ZXIgdXNlcl9kYXRhKQoreworCVNvdXBIVFRQSW5wdXRTdHJlYW0gKmh0dHBzdHJlYW0g
PSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNIChzb3VyY2UpOworCUdTaW1wbGVBc3luY1Jlc3VsdCAq
c2ltcGxlID0gdXNlcl9kYXRhOworCUdFcnJvciAqZXJyb3IgPSBOVUxMOworCisJaWYgKHNvdXBf
aHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9maW5pc2ggKGh0dHBzdHJlYW0sIHJlc3VsdCwgJmVycm9y
KSkgeworCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19ncG9pbnRlciAoc2ltcGxl
LCBodHRwc3RyZWFtLCBnX29iamVjdF91bnJlZik7CisJfSBlbHNlIHsKKwkJZ19zaW1wbGVfYXN5
bmNfcmVzdWx0X3NldF9mcm9tX2Vycm9yIChzaW1wbGUsIGVycm9yKTsKKwkJZ19lcnJvcl9mcmVl
IChlcnJvcik7CisJCWdfb2JqZWN0X3VucmVmIChodHRwc3RyZWFtKTsKKwl9CisJZ19zaW1wbGVf
YXN5bmNfcmVzdWx0X2NvbXBsZXRlIChzaW1wbGUpOworCWdfb2JqZWN0X3VucmVmIChzaW1wbGUp
OworfQorCisKK3R5cGVkZWYgc3RydWN0IHsKKwlTb3VwUmVxdWVzdEhUVFAgKnJlcTsKKwlTb3Vw
TWVzc2FnZSAqb3JpZ2luYWw7CisJR0NhbmNlbGxhYmxlICpjYW5jZWxsYWJsZTsKKwlHQXN5bmNS
ZWFkeUNhbGxiYWNrIGNhbGxiYWNrOworCWdwb2ludGVyIHVzZXJfZGF0YTsKK30gQ29uZGl0aW9u
YWxIZWxwZXI7CisKKworc3RhdGljIHZvaWQKK2NvbmRpdGlvbmFsX2dldF9yZWFkeV9jYiAoU291
cFNlc3Npb24gKnNlc3Npb24sIFNvdXBNZXNzYWdlICptc2csIGdwb2ludGVyIHVzZXJfZGF0YSkK
K3sKKwlDb25kaXRpb25hbEhlbHBlciAqaGVscGVyID0gKENvbmRpdGlvbmFsSGVscGVyICopdXNl
cl9kYXRhOworCUdTaW1wbGVBc3luY1Jlc3VsdCAqc2ltcGxlOworCVNvdXBIVFRQSW5wdXRTdHJl
YW0gKmh0dHBzdHJlYW07CisKKwlzaW1wbGUgPSBnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3IChH
X09CSkVDVCAoaGVscGVyLT5yZXEpLAorCQkJCQkgICAgaGVscGVyLT5jYWxsYmFjaywgaGVscGVy
LT51c2VyX2RhdGEsCisJCQkJCSAgICBjb25kaXRpb25hbF9nZXRfcmVhZHlfY2IpOworCisJaWYg
KG1zZy0+c3RhdHVzX2NvZGUgPT0gU09VUF9TVEFUVVNfTk9UX01PRElGSUVEKSB7CisJCVdlYktp
dFNvdXBDYWNoZSAqY2FjaGUgPSAoV2ViS2l0U291cENhY2hlICopc291cF9zZXNzaW9uX2dldF9m
ZWF0dXJlIChzZXNzaW9uLCBXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFKTsKKworCQlodHRwc3RyZWFt
ID0gKFNvdXBIVFRQSW5wdXRTdHJlYW0gKil3ZWJraXRfc291cF9jYWNoZV9zZW5kX3Jlc3BvbnNl
IChjYWNoZSwgbXNnKTsKKwkJaWYgKGh0dHBzdHJlYW0pIHsKKwkJCWNvbnN0IGdjaGFyICpjb250
ZW50X3R5cGU7CisKKwkJCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dwb2ludGVy
IChzaW1wbGUsIGh0dHBzdHJlYW0sIGdfb2JqZWN0X3VucmVmKTsKKworCQkJc291cF9tZXNzYWdl
X2dvdF9oZWFkZXJzIChoZWxwZXItPm9yaWdpbmFsKTsKKwkJCWNvbnRlbnRfdHlwZSA9IHNvdXBf
bWVzc2FnZV9oZWFkZXJzX2dldF9jb250ZW50X3R5cGUgKG1zZy0+cmVzcG9uc2VfaGVhZGVycywg
TlVMTCk7CisJCQlzb3VwX21lc3NhZ2VfY29udGVudF9zbmlmZmVkIChoZWxwZXItPm9yaWdpbmFs
LCBjb250ZW50X3R5cGUsIE5VTEwpOworCisJCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxl
dGUgKHNpbXBsZSk7CisKKwkJCXNvdXBfbWVzc2FnZV9maW5pc2hlZCAoaGVscGVyLT5vcmlnaW5h
bCk7CisKKwkJCWdfb2JqZWN0X3VucmVmIChzaW1wbGUpOworCQl9IGVsc2UgeworCQkJLyogQXNr
IGFnYWluIGZvciB0aGUgcmVzb3VyY2UsIHNvbWVob3cgdGhlIGNhY2hlIGNhbm5vdCBsb2NhdGUg
aXQgKi8KKwkJCWh0dHBzdHJlYW0gPSBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX25ldyAoc2Vzc2lv
biwgaGVscGVyLT5vcmlnaW5hbCk7CisJCQlzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5
bmMgKGh0dHBzdHJlYW0sIEdfUFJJT1JJVFlfREVGQVVMVCwKKwkJCQkJCQkgICBoZWxwZXItPmNh
bmNlbGxhYmxlLCBzZW50X2FzeW5jLCBzaW1wbGUpOworCQl9CisJfSBlbHNlIHsKKwkJLyogSXQg
aXMgaW4gdGhlIGNhY2hlIGJ1dCBpdCB3YXMgbW9kaWZpZWQgcmVtb3RlbHkgKi8KKwkJaHR0cHN0
cmVhbSA9IHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fbmV3IChzZXNzaW9uLCBoZWxwZXItPm9yaWdp
bmFsKTsKKwkJc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jIChodHRwc3RyZWFtLCBH
X1BSSU9SSVRZX0RFRkFVTFQsCisJCQkJCQkgICBoZWxwZXItPmNhbmNlbGxhYmxlLCBzZW50X2Fz
eW5jLCBzaW1wbGUpOworCX0KKworCWdfb2JqZWN0X3VucmVmIChoZWxwZXItPnJlcSk7CisJZ19v
YmplY3RfdW5yZWYgKGhlbHBlci0+b3JpZ2luYWwpOworCWdfc2xpY2VfZnJlZSAoQ29uZGl0aW9u
YWxIZWxwZXIsIGhlbHBlcik7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKwlTb3VwUmVxdWVzdEhU
VFAgKmh0dHA7CisJR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjazsKKwlncG9pbnRlciB1c2Vy
X2RhdGE7Cit9IFNlbmRBc3luY0hlbHBlcjsKKworc3RhdGljIHZvaWQgc291cF9yZXF1ZXN0X2h0
dHBfc2VuZF9hc3luYyAoU291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCisJCQkJCSAgR0Nh
bmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJCQkgIEdBc3luY1JlYWR5Q2FsbGJh
Y2sgY2FsbGJhY2ssCisJCQkJCSAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKKworc3RhdGljIGdib29s
ZWFuCitzZW5kX2FzeW5jX2NiIChncG9pbnRlciBkYXRhKQoreworCUdTaW1wbGVBc3luY1Jlc3Vs
dCAqc2ltcGxlOworCVNvdXBIVFRQSW5wdXRTdHJlYW0gKmh0dHBzdHJlYW07CisJU291cFNlc3Np
b24gKnNlc3Npb247CisJV2ViS2l0U291cENhY2hlICpjYWNoZTsKKwlTZW5kQXN5bmNIZWxwZXIg
KmhlbHBlciA9IChTZW5kQXN5bmNIZWxwZXIgKilkYXRhOworCisJc2Vzc2lvbiA9IHNvdXBfcmVx
dWVzdF9nZXRfc2Vzc2lvbiAoU09VUF9SRVFVRVNUIChoZWxwZXItPmh0dHApKTsKKwljYWNoZSA9
IChXZWJLaXRTb3VwQ2FjaGUgKilzb3VwX3Nlc3Npb25fZ2V0X2ZlYXR1cmUgKHNlc3Npb24sIFdF
QktJVF9UWVBFX1NPVVBfQ0FDSEUpOworCisJaHR0cHN0cmVhbSA9IChTb3VwSFRUUElucHV0U3Ry
ZWFtICopd2Via2l0X3NvdXBfY2FjaGVfc2VuZF9yZXNwb25zZSAoY2FjaGUsIFNPVVBfTUVTU0FH
RSAoaGVscGVyLT5odHRwLT5wcml2LT5tc2cpKTsKKworCWlmIChodHRwc3RyZWFtKSB7CisJCWNv
bnN0IGdjaGFyICpjb250ZW50X3R5cGU7CisKKwkJc2ltcGxlID0gZ19zaW1wbGVfYXN5bmNfcmVz
dWx0X25ldyAoR19PQkpFQ1QgKGhlbHBlci0+aHR0cCksCisJCQkJCQkgICAgaGVscGVyLT5jYWxs
YmFjaywgaGVscGVyLT51c2VyX2RhdGEsCisJCQkJCQkgICAgc291cF9yZXF1ZXN0X2h0dHBfc2Vu
ZF9hc3luYyk7CisJCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dwb2ludGVyIChz
aW1wbGUsIGh0dHBzdHJlYW0sIGdfb2JqZWN0X3VucmVmKTsKKworCQkvKiBVcGRhdGUgbWVzc2Fn
ZSBzdGF0dXMgKi8KKwkJc291cF9tZXNzYWdlX3NldF9zdGF0dXMgKGhlbHBlci0+aHR0cC0+cHJp
di0+bXNnLCBTT1VQX1NUQVRVU19PSyk7CisKKwkJLyogSXNzdWUgc2lnbmFscyAgKi8KKwkJc291
cF9tZXNzYWdlX2dvdF9oZWFkZXJzIChoZWxwZXItPmh0dHAtPnByaXYtPm1zZyk7CisJCWNvbnRl
bnRfdHlwZSA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9jb250ZW50X3R5cGUgKGhlbHBlci0+
aHR0cC0+cHJpdi0+bXNnLT5yZXNwb25zZV9oZWFkZXJzLCBOVUxMKTsKKwkJc291cF9tZXNzYWdl
X2NvbnRlbnRfc25pZmZlZCAoaGVscGVyLT5odHRwLT5wcml2LT5tc2csIGNvbnRlbnRfdHlwZSwg
TlVMTCk7CisKKwkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlIChzaW1wbGUpOworCisJ
CXNvdXBfbWVzc2FnZV9maW5pc2hlZCAoaGVscGVyLT5odHRwLT5wcml2LT5tc2cpOworCisJCWdf
b2JqZWN0X3VucmVmIChzaW1wbGUpOworCX0KKworCWdfc2xpY2VfZnJlZSAoU2VuZEFzeW5jSGVs
cGVyLCBoZWxwZXIpOworCisJcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZAorc291cF9y
ZXF1ZXN0X2h0dHBfc2VuZF9hc3luYyAoU291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCisJ
CQkgICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkgICAgICBHQXN5
bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAorCQkJICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQor
eworCVNvdXBSZXF1ZXN0SFRUUCAqaHR0cCA9IFNPVVBfUkVRVUVTVF9IVFRQIChyZXF1ZXN0KTsK
KwlTb3VwSFRUUElucHV0U3RyZWFtICpodHRwc3RyZWFtOworCUdTaW1wbGVBc3luY1Jlc3VsdCAq
c2ltcGxlOworCVNvdXBTZXNzaW9uICpzZXNzaW9uOworCVdlYktpdFNvdXBDYWNoZSAqY2FjaGU7
CisKKwlzZXNzaW9uID0gc291cF9yZXF1ZXN0X2dldF9zZXNzaW9uIChyZXF1ZXN0KTsKKwljYWNo
ZSA9IChXZWJLaXRTb3VwQ2FjaGUgKilzb3VwX3Nlc3Npb25fZ2V0X2ZlYXR1cmUgKHNlc3Npb24s
IFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUpOworCisJaWYgKGNhY2hlKSB7CisJCVdlYktpdFNvdXBD
YWNoZVJlc3BvbnNlIHJlc3BvbnNlOworCisJCXJlc3BvbnNlID0gd2Via2l0X3NvdXBfY2FjaGVf
aGFzX3Jlc3BvbnNlIChjYWNoZSwgaHR0cC0+cHJpdi0+bXNnKTsKKwkJaWYgKHJlc3BvbnNlID09
IFdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX0ZSRVNIKSB7CisJCQkvKiBEbyByZXR1cm4gdGhl
IHN0cmVhbSBhc3luY2hyb25vdXNseSBhcyBpbgorCQkJICAgdGhlIG90aGVyIGNhc2VzLiBJdCdz
IG5vdCBlbm91Z2ggdG8gdXNlCisJCQkgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGVf
aW5faWRsZSBhcworCQkJICAgdGhlIHNpZ25hbHMgbXVzdCBiZSBhbHNvIGVtaXR0ZWQKKwkJCSAg
IGFzeW5jaHJvbm91c2x5ICovCisJCQlTZW5kQXN5bmNIZWxwZXIgKmhlbHBlciA9IGdfc2xpY2Vf
bmV3IChTZW5kQXN5bmNIZWxwZXIpOworCQkJaGVscGVyLT5odHRwID0gaHR0cDsKKwkJCWhlbHBl
ci0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKwkJCWhlbHBlci0+dXNlcl9kYXRhID0gdXNlcl9kYXRh
OworCQkJZ190aW1lb3V0X2FkZCAoMCwgc2VuZF9hc3luY19jYiwgaGVscGVyKTsKKwkJCXJldHVy
bjsKKwkJfSBlbHNlIGlmIChyZXNwb25zZSA9PSBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9O
RUVEU19WQUxJREFUSU9OKSB7CisJCQlTb3VwTWVzc2FnZSAqY29uZGl0aW9uYWxfbXNnOworCQkJ
Q29uZGl0aW9uYWxIZWxwZXIgKmhlbHBlcjsKKworCQkJY29uZGl0aW9uYWxfbXNnID0gd2Via2l0
X3NvdXBfY2FjaGVfZ2VuZXJhdGVfY29uZGl0aW9uYWxfcmVxdWVzdCAoY2FjaGUsIGh0dHAtPnBy
aXYtPm1zZyk7CisKKwkJCWhlbHBlciA9IGdfc2xpY2VfbmV3MCAoQ29uZGl0aW9uYWxIZWxwZXIp
OworCQkJaGVscGVyLT5yZXEgPSBnX29iamVjdF9yZWYgKGh0dHApOworCQkJaGVscGVyLT5vcmln
aW5hbCA9IGdfb2JqZWN0X3JlZiAoaHR0cC0+cHJpdi0+bXNnKTsKKwkJCWhlbHBlci0+Y2FuY2Vs
bGFibGUgPSBjYW5jZWxsYWJsZTsKKwkJCWhlbHBlci0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKwkJ
CWhlbHBlci0+dXNlcl9kYXRhID0gdXNlcl9kYXRhOworCQkJc291cF9zZXNzaW9uX3F1ZXVlX21l
c3NhZ2UgKHNlc3Npb24sIGNvbmRpdGlvbmFsX21zZywKKwkJCQkJCSAgICBjb25kaXRpb25hbF9n
ZXRfcmVhZHlfY2IsCisJCQkJCQkgICAgaGVscGVyKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwor
CXNpbXBsZSA9IGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcgKEdfT0JKRUNUIChodHRwKSwKKwkJ
CQkJICAgIGNhbGxiYWNrLCB1c2VyX2RhdGEsCisJCQkJCSAgICBzb3VwX3JlcXVlc3RfaHR0cF9z
ZW5kX2FzeW5jKTsKKwlodHRwc3RyZWFtID0gc291cF9odHRwX2lucHV0X3N0cmVhbV9uZXcgKHNv
dXBfcmVxdWVzdF9nZXRfc2Vzc2lvbiAocmVxdWVzdCksCisJCQkJCQkgaHR0cC0+cHJpdi0+bXNn
KTsKKwlzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmMgKGh0dHBzdHJlYW0sIEdfUFJJ
T1JJVFlfREVGQVVMVCwKKwkJCQkJICAgY2FuY2VsbGFibGUsIHNlbnRfYXN5bmMsIHNpbXBsZSk7
Cit9CisKK3N0YXRpYyBHSW5wdXRTdHJlYW0gKgorc291cF9yZXF1ZXN0X2h0dHBfc2VuZF9maW5p
c2ggKFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAorCQkJICAgICAgIEdBc3luY1Jlc3Vs
dCAgICAgICAgICpyZXN1bHQsCisJCQkgICAgICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9y
KQoreworCUdTaW1wbGVBc3luY1Jlc3VsdCAqc2ltcGxlOworCisJZ19yZXR1cm5fdmFsX2lmX2Zh
aWwgKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9pc192YWxpZCAocmVzdWx0LCBHX09CSkVDVCAocmVx
dWVzdCksIHNvdXBfcmVxdWVzdF9odHRwX3NlbmRfYXN5bmMpIHx8IGdfc2ltcGxlX2FzeW5jX3Jl
c3VsdF9pc192YWxpZCAocmVzdWx0LCBHX09CSkVDVCAocmVxdWVzdCksIGNvbmRpdGlvbmFsX2dl
dF9yZWFkeV9jYiksIE5VTEwpOworCisJc2ltcGxlID0gR19TSU1QTEVfQVNZTkNfUkVTVUxUIChy
ZXN1bHQpOworCWlmIChnX3NpbXBsZV9hc3luY19yZXN1bHRfcHJvcGFnYXRlX2Vycm9yIChzaW1w
bGUsIGVycm9yKSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGdfb2JqZWN0X3JlZiAoZ19zaW1w
bGVfYXN5bmNfcmVzdWx0X2dldF9vcF9yZXNfZ3BvaW50ZXIgKHNpbXBsZSkpOworfQorCitzdGF0
aWMgZ29mZnNldAorc291cF9yZXF1ZXN0X2h0dHBfZ2V0X2NvbnRlbnRfbGVuZ3RoIChTb3VwUmVx
dWVzdCAqcmVxdWVzdCkKK3sKKwlTb3VwUmVxdWVzdEhUVFAgKmh0dHAgPSBTT1VQX1JFUVVFU1Rf
SFRUUCAocmVxdWVzdCk7CisKKwlyZXR1cm4gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2NvbnRl
bnRfbGVuZ3RoIChodHRwLT5wcml2LT5tc2ctPnJlc3BvbnNlX2hlYWRlcnMpOworfQorCitzdGF0
aWMgY29uc3QgY2hhciAqCitzb3VwX3JlcXVlc3RfaHR0cF9nZXRfY29udGVudF90eXBlIChTb3Vw
UmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlTb3VwUmVxdWVzdEhUVFAgKmh0dHAgPSBTT1VQX1JFUVVF
U1RfSFRUUCAocmVxdWVzdCk7CisKKwlyZXR1cm4gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2Nv
bnRlbnRfdHlwZSAoaHR0cC0+cHJpdi0+bXNnLT5yZXNwb25zZV9oZWFkZXJzLCBOVUxMKTsKK30K
Kworc3RhdGljIHZvaWQKK3NvdXBfcmVxdWVzdF9odHRwX2NsYXNzX2luaXQgKFNvdXBSZXF1ZXN0
SFRUUENsYXNzICpyZXF1ZXN0X2h0dHBfY2xhc3MpCit7CisJR09iamVjdENsYXNzICpvYmplY3Rf
Y2xhc3MgPSBHX09CSkVDVF9DTEFTUyAocmVxdWVzdF9odHRwX2NsYXNzKTsKKwlTb3VwUmVxdWVz
dENsYXNzICpyZXF1ZXN0X2NsYXNzID0KKwkJU09VUF9SRVFVRVNUX0NMQVNTIChyZXF1ZXN0X2h0
dHBfY2xhc3MpOworCisJZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlIChyZXF1ZXN0X2h0dHBfY2xh
c3MsIHNpemVvZiAoU291cFJlcXVlc3RIVFRQUHJpdmF0ZSkpOworCisJb2JqZWN0X2NsYXNzLT5m
aW5hbGl6ZSA9IHNvdXBfcmVxdWVzdF9odHRwX2ZpbmFsaXplOworCisJcmVxdWVzdF9jbGFzcy0+
Y2hlY2tfdXJpID0gc291cF9yZXF1ZXN0X2h0dHBfY2hlY2tfdXJpOworCXJlcXVlc3RfY2xhc3Mt
PnNlbmQgPSBzb3VwX3JlcXVlc3RfaHR0cF9zZW5kOworCXJlcXVlc3RfY2xhc3MtPnNlbmRfYXN5
bmMgPSBzb3VwX3JlcXVlc3RfaHR0cF9zZW5kX2FzeW5jOworCXJlcXVlc3RfY2xhc3MtPnNlbmRf
ZmluaXNoID0gc291cF9yZXF1ZXN0X2h0dHBfc2VuZF9maW5pc2g7CisJcmVxdWVzdF9jbGFzcy0+
Z2V0X2NvbnRlbnRfbGVuZ3RoID0gc291cF9yZXF1ZXN0X2h0dHBfZ2V0X2NvbnRlbnRfbGVuZ3Ro
OworCXJlcXVlc3RfY2xhc3MtPmdldF9jb250ZW50X3R5cGUgPSBzb3VwX3JlcXVlc3RfaHR0cF9n
ZXRfY29udGVudF90eXBlOworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMGYzMmYwYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRwLmgKQEAgLTAsMCArMSw1MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgU09VUF9SRVFVRVNUX0hUVFBfSAorI2RlZmluZSBT
T1VQX1JFUVVFU1RfSFRUUF9IIDEKKworI2luY2x1ZGUgInNvdXAtcmVxdWVzdC5oIgorCitHX0JF
R0lOX0RFQ0xTCisKKyNkZWZpbmUgU09VUF9UWVBFX1JFUVVFU1RfSFRUUCAgICAgICAgICAgIChz
b3VwX3JlcXVlc3RfaHR0cF9nZXRfdHlwZSAoKSkKKyNkZWZpbmUgU09VUF9SRVFVRVNUX0hUVFAo
b2JqZWN0KSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iamVjdCksIFNP
VVBfVFlQRV9SRVFVRVNUX0hUVFAsIFNvdXBSZXF1ZXN0SFRUUCkpCisjZGVmaW5lIFNPVVBfUkVR
VUVTVF9IVFRQX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFz
cyksIFNPVVBfVFlQRV9SRVFVRVNUX0hUVFAsIFNvdXBSZXF1ZXN0SFRUUENsYXNzKSkKKyNkZWZp
bmUgU09VUF9JU19SRVFVRVNUX0hUVFAob2JqZWN0KSAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfVFlQRSAoKG9iamVjdCksIFNPVVBfVFlQRV9SRVFVRVNUX0hUVFApKQorI2RlZmluZSBTT1VQ
X0lTX1JFUVVFU1RfSFRUUF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgo
a2xhc3MpLCBTT1VQX1RZUEVfUkVRVUVTVF9IVFRQKSkKKyNkZWZpbmUgU09VUF9SRVFVRVNUX0hU
VFBfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgU09V
UF9UWVBFX1JFUVVFU1RfSFRUUCwgU291cFJlcXVlc3RIVFRQQ2xhc3MpKQorCit0eXBlZGVmIHN0
cnVjdCBfU291cFJlcXVlc3RIVFRQUHJpdmF0ZSBTb3VwUmVxdWVzdEhUVFBQcml2YXRlOworCit0
eXBlZGVmIHN0cnVjdCB7CisJU291cFJlcXVlc3QgcGFyZW50OworCisJU291cFJlcXVlc3RIVFRQ
UHJpdmF0ZSAqcHJpdjsKK30gU291cFJlcXVlc3RIVFRQOworCit0eXBlZGVmIHN0cnVjdCB7CisJ
U291cFJlcXVlc3RDbGFzcyBwYXJlbnQ7Cit9IFNvdXBSZXF1ZXN0SFRUUENsYXNzOworCitHVHlw
ZSBzb3VwX3JlcXVlc3RfaHR0cF9nZXRfdHlwZSAodm9pZCk7CisKK1NvdXBNZXNzYWdlICAqc291
cF9yZXF1ZXN0X2h0dHBfZ2V0X21lc3NhZ2UgKFNvdXBSZXF1ZXN0SFRUUCAqaHR0cCk7CisKK0df
RU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBTT1VQX1JFUVVFU1RfSFRUUF9IICovCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QuYyBiL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5jCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YTdiZDMKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QuYwpAQCAtMCww
ICsxLDI3OSBAQAorLyoKKyAqIHNvdXAtcmVxdWVzdC5jOiBQcm90b2NvbC1pbmRlcGVuZGVudCBz
dHJlYW1pbmcgcmVxdWVzdCBpbnRlcmZhY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVk
IEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBJZ2FsaWEgUy5MLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZkZWYgSEFW
RV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxnbGli
L2dpMThuLmg+CisKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3QuaCIKKyNpbmNsdWRlICJzb3VwLXJl
cXVlc3Rlci5oIgorCisvKioKKyAqIFNFQ1RJT046c291cC1yZXF1ZXN0CisgKiBAc2hvcnRfZGVz
Y3JpcHRpb246IFByb3RvY29sLWluZGVwZW5kZW50IHN0cmVhbWluZyByZXF1ZXN0IGludGVyZmFj
ZQorICoKKyAqIEZJWE1FCisgKiovCisKKy8qKgorICogU291cFJlcXVlc3Q6CisgKgorICogRklY
TUUKKyAqCisgKiBTaW5jZTogMi4zMAorICoqLworCitzdGF0aWMgdm9pZCBzb3VwX3JlcXVlc3Rf
aW5pdGFibGVfaW50ZXJmYWNlX2luaXQgKEdJbml0YWJsZUlmYWNlICppbml0YWJsZV9pbnRlcmZh
Y2UpOworCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoU291cFJlcXVlc3QsIHNvdXBfcmVxdWVz
dCwgR19UWVBFX09CSkVDVCwKKwkJCSBHX0lNUExFTUVOVF9JTlRFUkZBQ0UgKEdfVFlQRV9JTklU
QUJMRSwKKwkJCQkJCXNvdXBfcmVxdWVzdF9pbml0YWJsZV9pbnRlcmZhY2VfaW5pdCkpCisKK2Vu
dW0geworCVBST1BfMCwKKwlQUk9QX1VSSSwKKwlQUk9QX1NFU1NJT04KK307CisKK3N0cnVjdCBf
U291cFJlcXVlc3RQcml2YXRlIHsKKwlTb3VwVVJJICp1cmk7CisJU291cFNlc3Npb24gKnNlc3Np
b247Cit9OworCitzdGF0aWMgdm9pZAorc291cF9yZXF1ZXN0X2luaXQgKFNvdXBSZXF1ZXN0ICpy
ZXF1ZXN0KQoreworCXJlcXVlc3QtPnByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUg
KHJlcXVlc3QsIFNPVVBfVFlQRV9SRVFVRVNULCBTb3VwUmVxdWVzdFByaXZhdGUpOworfQorCitz
dGF0aWMgdm9pZAorc291cF9yZXF1ZXN0X2ZpbmFsaXplIChHT2JqZWN0ICpvYmplY3QpCit7CisJ
U291cFJlcXVlc3QgKnJlcXVlc3QgPSBTT1VQX1JFUVVFU1QgKG9iamVjdCk7CisKKwlpZiAocmVx
dWVzdC0+cHJpdi0+dXJpKQorCQlzb3VwX3VyaV9mcmVlIChyZXF1ZXN0LT5wcml2LT51cmkpOwor
CWlmIChyZXF1ZXN0LT5wcml2LT5zZXNzaW9uKQorCQlnX29iamVjdF91bnJlZiAocmVxdWVzdC0+
cHJpdi0+c2Vzc2lvbik7CisKKwlHX09CSkVDVF9DTEFTUyAoc291cF9yZXF1ZXN0X3BhcmVudF9j
bGFzcyktPmZpbmFsaXplIChvYmplY3QpOworfQorCitzdGF0aWMgdm9pZAorc291cF9yZXF1ZXN0
X3NldF9wcm9wZXJ0eSAoR09iamVjdCAgICAgICpvYmplY3QsCisJCQkgICBndWludCBwcm9wX2lk
LAorCQkJICAgY29uc3QgR1ZhbHVlICp2YWx1ZSwKKwkJCSAgIEdQYXJhbVNwZWMgICAqcHNwZWMp
Cit7CisJU291cFJlcXVlc3QgKnJlcXVlc3QgPSBTT1VQX1JFUVVFU1QgKG9iamVjdCk7CisKKwlz
d2l0Y2ggKHByb3BfaWQpIHsKKwkJY2FzZSBQUk9QX1VSSToKKwkJCWlmIChyZXF1ZXN0LT5wcml2
LT51cmkpCisJCQkJc291cF91cmlfZnJlZSAocmVxdWVzdC0+cHJpdi0+dXJpKTsKKwkJCXJlcXVl
c3QtPnByaXYtPnVyaSA9IGdfdmFsdWVfZHVwX2JveGVkICh2YWx1ZSk7CisJCQlicmVhazsKKwkJ
Y2FzZSBQUk9QX1NFU1NJT046CisJCQlpZiAocmVxdWVzdC0+cHJpdi0+c2Vzc2lvbikKKwkJCQln
X29iamVjdF91bnJlZiAocmVxdWVzdC0+cHJpdi0+c2Vzc2lvbik7CisJCQlyZXF1ZXN0LT5wcml2
LT5zZXNzaW9uID0gZ192YWx1ZV9kdXBfb2JqZWN0ICh2YWx1ZSk7CisJCQlicmVhazsKKwkJZGVm
YXVsdDoKKwkJCUdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9w
X2lkLCBwc3BlYyk7CisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX3JlcXVl
c3RfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICAgICpvYmplY3QsCisJCQkgICBndWludCBwcm9wX2lk
LAorCQkJICAgR1ZhbHVlICAgICAqdmFsdWUsCisJCQkgICBHUGFyYW1TcGVjICpwc3BlYykKK3sK
KwlTb3VwUmVxdWVzdCAqcmVxdWVzdCA9IFNPVVBfUkVRVUVTVCAob2JqZWN0KTsKKworCXN3aXRj
aCAocHJvcF9pZCkgeworCQljYXNlIFBST1BfVVJJOgorCQkJZ192YWx1ZV9zZXRfYm94ZWQgKHZh
bHVlLCByZXF1ZXN0LT5wcml2LT51cmkpOworCQkJYnJlYWs7CisJCWNhc2UgUFJPUF9TRVNTSU9O
OgorCQkJZ192YWx1ZV9zZXRfb2JqZWN0ICh2YWx1ZSwgcmVxdWVzdC0+cHJpdi0+c2Vzc2lvbik7
CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJU
WV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRp
YyBnYm9vbGVhbgorc291cF9yZXF1ZXN0X2luaXRhYmxlX2luaXQgKEdJbml0YWJsZSAgICAgKmlu
aXRhYmxlLAorCQkJICAgIEdDYW5jZWxsYWJsZSAgKmNhbmNlbGxhYmxlLAorCQkJICAgIEdFcnJv
ciAgICAgICAqKmVycm9yKQoreworCVNvdXBSZXF1ZXN0ICpyZXF1ZXN0ID0gU09VUF9SRVFVRVNU
IChpbml0YWJsZSk7CisJZ2Jvb2xlYW4gb2s7CisKKwlpZiAoIXJlcXVlc3QtPnByaXYtPnVyaSkg
eworCQlnX3NldF9lcnJvciAoZXJyb3IsIFNPVVBfRVJST1IsIFNPVVBfRVJST1JfQkFEX1VSSSwK
KwkJCSAgICAgXyAoIk5vIFVSSSBwcm92aWRlZCIpKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKwor
CW9rID0gU09VUF9SRVFVRVNUX0dFVF9DTEFTUyAoaW5pdGFibGUpLT4KKwkgICAgIGNoZWNrX3Vy
aSAocmVxdWVzdCwgcmVxdWVzdC0+cHJpdi0+dXJpLCBlcnJvcik7CisKKwlpZiAoIW9rICYmIGVy
cm9yKSB7CisJCWNoYXIgKnVyaV9zdHJpbmcgPSBzb3VwX3VyaV90b19zdHJpbmcgKHJlcXVlc3Qt
PnByaXYtPnVyaSwgRkFMU0UpOworCQlnX3NldF9lcnJvciAoZXJyb3IsIFNPVVBfRVJST1IsIFNP
VVBfRVJST1JfQkFEX1VSSSwKKwkJCSAgICAgXyAoIkludmFsaWQgJyVzJyBVUkk6ICVzIiksCisJ
CQkgICAgIHJlcXVlc3QtPnByaXYtPnVyaS0+c2NoZW1lLAorCQkJICAgICB1cmlfc3RyaW5nKTsK
KwkJZ19mcmVlICh1cmlfc3RyaW5nKTsKKwl9CisKKwlyZXR1cm4gb2s7Cit9CisKK3N0YXRpYyBn
Ym9vbGVhbgorc291cF9yZXF1ZXN0X2RlZmF1bHRfY2hlY2tfdXJpIChTb3VwUmVxdWVzdCAgKnJl
cXVlc3QsCisJCQkJU291cFVSSSAgICAgICp1cmksCisJCQkJR0Vycm9yICAgICAgKiplcnJvcikK
K3sKKwlyZXR1cm4gVFJVRTsKK30KKworLyogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbjogYXNzdW1l
IHRoZSBzeW5jIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QgYmxvY2sgKi8KK3N0YXRpYyB2b2lkCitz
b3VwX3JlcXVlc3RfZGVmYXVsdF9zZW5kX2FzeW5jIChTb3VwUmVxdWVzdCAgICAgICAgICAqcmVx
dWVzdCwKKwkJCQkgR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJCSBHQXN5
bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAorCQkJCSBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJ
R1NpbXBsZUFzeW5jUmVzdWx0ICpzaW1wbGU7CisKKwlzaW1wbGUgPSBnX3NpbXBsZV9hc3luY19y
ZXN1bHRfbmV3IChHX09CSkVDVCAocmVxdWVzdCksCisJCQkJCSAgICBjYWxsYmFjaywgdXNlcl9k
YXRhLAorCQkJCQkgICAgc291cF9yZXF1ZXN0X2RlZmF1bHRfc2VuZF9hc3luYyk7CisJZ19zaW1w
bGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlX2luX2lkbGUgKHNpbXBsZSk7CisJZ19vYmplY3RfdW5y
ZWYgKHNpbXBsZSk7Cit9CisKK3N0YXRpYyBHSW5wdXRTdHJlYW0gKgorc291cF9yZXF1ZXN0X2Rl
ZmF1bHRfc2VuZF9maW5pc2ggKFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAorCQkJCSAg
R0FzeW5jUmVzdWx0ICAgICAgICAgKnJlc3VsdCwKKwkJCQkgIEdFcnJvciAgICAgICAgICAgICAg
KiplcnJvcikKK3sKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0
X2lzX3ZhbGlkIChyZXN1bHQsIEdfT0JKRUNUIChyZXF1ZXN0KSwgc291cF9yZXF1ZXN0X2RlZmF1
bHRfc2VuZF9hc3luYyksIE5VTEwpOworCisJcmV0dXJuIHNvdXBfcmVxdWVzdF9zZW5kIChyZXF1
ZXN0LCBOVUxMLCBlcnJvcik7Cit9CisKK0dJbnB1dFN0cmVhbSAqCitzb3VwX3JlcXVlc3Rfc2Vu
ZCAoU291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCisJCSAgIEdDYW5jZWxsYWJsZSAgICAg
ICAgICpjYW5jZWxsYWJsZSwKKwkJICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKQorewor
CXJldHVybiBTT1VQX1JFUVVFU1RfR0VUX0NMQVNTIChyZXF1ZXN0KS0+CisJICAgICAgIHNlbmQg
KHJlcXVlc3QsIGNhbmNlbGxhYmxlLCBlcnJvcik7Cit9CisKK3ZvaWQKK3NvdXBfcmVxdWVzdF9z
ZW5kX2FzeW5jIChTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKKwkJCSBHQ2FuY2VsbGFi
bGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFj
aywKKwkJCSBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJU09VUF9SRVFVRVNUX0dFVF9DTEFTUyAo
cmVxdWVzdCktPgorCXNlbmRfYXN5bmMgKHJlcXVlc3QsIGNhbmNlbGxhYmxlLCBjYWxsYmFjaywg
dXNlcl9kYXRhKTsKK30KKworR0lucHV0U3RyZWFtICoKK3NvdXBfcmVxdWVzdF9zZW5kX2Zpbmlz
aCAoU291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCisJCQkgIEdBc3luY1Jlc3VsdCAgICAg
ICAgICpyZXN1bHQsCisJCQkgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcikKK3sKKwlyZXR1
cm4gU09VUF9SRVFVRVNUX0dFVF9DTEFTUyAocmVxdWVzdCktPgorCSAgICAgICBzZW5kX2Zpbmlz
aCAocmVxdWVzdCwgcmVzdWx0LCBlcnJvcik7Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX3JlcXVl
c3RfY2xhc3NfaW5pdCAoU291cFJlcXVlc3RDbGFzcyAqcmVxdWVzdF9jbGFzcykKK3sKKwlHT2Jq
ZWN0Q2xhc3MgKm9iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChyZXF1ZXN0X2NsYXNzKTsK
KworCWdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSAocmVxdWVzdF9jbGFzcywgc2l6ZW9mIChTb3Vw
UmVxdWVzdFByaXZhdGUpKTsKKworCXJlcXVlc3RfY2xhc3MtPmNoZWNrX3VyaSA9IHNvdXBfcmVx
dWVzdF9kZWZhdWx0X2NoZWNrX3VyaTsKKwlyZXF1ZXN0X2NsYXNzLT5zZW5kX2FzeW5jID0gc291
cF9yZXF1ZXN0X2RlZmF1bHRfc2VuZF9hc3luYzsKKwlyZXF1ZXN0X2NsYXNzLT5zZW5kX2Zpbmlz
aCA9IHNvdXBfcmVxdWVzdF9kZWZhdWx0X3NlbmRfZmluaXNoOworCisJb2JqZWN0X2NsYXNzLT5m
aW5hbGl6ZSA9IHNvdXBfcmVxdWVzdF9maW5hbGl6ZTsKKwlvYmplY3RfY2xhc3MtPnNldF9wcm9w
ZXJ0eSA9IHNvdXBfcmVxdWVzdF9zZXRfcHJvcGVydHk7CisJb2JqZWN0X2NsYXNzLT5nZXRfcHJv
cGVydHkgPSBzb3VwX3JlcXVlc3RfZ2V0X3Byb3BlcnR5OworCisJZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eSAoCisJCW9iamVjdF9jbGFzcywgUFJPUF9VUkksCisJCWdfcGFyYW1fc3Bl
Y19ib3hlZCAoU09VUF9SRVFVRVNUX1VSSSwKKwkJCQkgICAgIlVSSSIsCisJCQkJICAgICJUaGUg
cmVxdWVzdCBVUkkiLAorCQkJCSAgICBTT1VQX1RZUEVfVVJJLAorCQkJCSAgICBHX1BBUkFNX1JF
QURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKTsKKwlnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5ICgKKwkJb2JqZWN0X2NsYXNzLCBQUk9QX1NFU1NJT04sCisJCWdfcGFyYW1f
c3BlY19vYmplY3QgKFNPVVBfUkVRVUVTVF9TRVNTSU9OLAorCQkJCSAgICAgIlNlc3Npb24iLAor
CQkJCSAgICAgIlRoZSByZXF1ZXN0J3Mgc2Vzc2lvbiIsCisJCQkJICAgICBTT1VQX1RZUEVfU0VT
U0lPTiwKKwkJCQkgICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05M
WSkpOworfQorCitzdGF0aWMgdm9pZAorc291cF9yZXF1ZXN0X2luaXRhYmxlX2ludGVyZmFjZV9p
bml0IChHSW5pdGFibGVJZmFjZSAqaW5pdGFibGVfaW50ZXJmYWNlKQoreworCWluaXRhYmxlX2lu
dGVyZmFjZS0+aW5pdCA9IHNvdXBfcmVxdWVzdF9pbml0YWJsZV9pbml0OworfQorCitTb3VwVVJJ
ICoKK3NvdXBfcmVxdWVzdF9nZXRfdXJpIChTb3VwUmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlyZXR1
cm4gcmVxdWVzdC0+cHJpdi0+dXJpOworfQorCitTb3VwU2Vzc2lvbiAqCitzb3VwX3JlcXVlc3Rf
Z2V0X3Nlc3Npb24gKFNvdXBSZXF1ZXN0ICpyZXF1ZXN0KQoreworCXJldHVybiByZXF1ZXN0LT5w
cml2LT5zZXNzaW9uOworfQorCitnb2Zmc2V0Citzb3VwX3JlcXVlc3RfZ2V0X2NvbnRlbnRfbGVu
Z3RoIChTb3VwUmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlyZXR1cm4gU09VUF9SRVFVRVNUX0dFVF9D
TEFTUyAocmVxdWVzdCktPmdldF9jb250ZW50X2xlbmd0aCAocmVxdWVzdCk7Cit9CisKK2NvbnN0
IGNoYXIgKgorc291cF9yZXF1ZXN0X2dldF9jb250ZW50X3R5cGUgKFNvdXBSZXF1ZXN0ICAqcmVx
dWVzdCkKK3sKKwlyZXR1cm4gU09VUF9SRVFVRVNUX0dFVF9DTEFTUyAocmVxdWVzdCktPmdldF9j
b250ZW50X3R5cGUgKHJlcXVlc3QpOworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5kMjUwYWMyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdh
bGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZm5kZWYgU09VUF9SRVFVRVNUX0gKKyNkZWZpbmUgU09VUF9SRVFVRVNUX0gg
MQorCisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CisjaW5jbHVkZSA8Z2lvL2dpby5oPgorCitH
X0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgU09VUF9UWVBFX1JFUVVFU1QgICAgICAgICAgICAoc291
cF9yZXF1ZXN0X2dldF90eXBlICgpKQorI2RlZmluZSBTT1VQX1JFUVVFU1Qob2JqKSAgICAgICAg
ICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIFNPVVBfVFlQRV9SRVFVRVNU
LCBTb3VwUmVxdWVzdCkpCisjZGVmaW5lIFNPVVBfUkVRVUVTVF9DTEFTUyhrbGFzcykgICAgKEdf
VFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBTT1VQX1RZUEVfUkVRVUVTVCwgU291cFJl
cXVlc3RDbGFzcykpCisjZGVmaW5lIFNPVVBfSVNfUkVRVUVTVChvYmopICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgU09VUF9UWVBFX1JFUVVFU1QpKQorI2RlZmlu
ZSBTT1VQX0lTX1JFUVVFU1RfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAo
KGtsYXNzKSwgU09VUF9UWVBFX1JFUVVFU1QpKQorI2RlZmluZSBTT1VQX1JFUVVFU1RfR0VUX0NM
QVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgU09VUF9UWVBFX1JF
UVVFU1QsIFNvdXBSZXF1ZXN0Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfU291cFJlcXVlc3Qg
U291cFJlcXVlc3Q7Cit0eXBlZGVmIHN0cnVjdCBfU291cFJlcXVlc3RQcml2YXRlIFNvdXBSZXF1
ZXN0UHJpdmF0ZTsKK3R5cGVkZWYgc3RydWN0IF9Tb3VwUmVxdWVzdENsYXNzIFNvdXBSZXF1ZXN0
Q2xhc3M7CisKK3N0cnVjdCBfU291cFJlcXVlc3QgeworCUdPYmplY3QgcGFyZW50OworCisJU291
cFJlcXVlc3RQcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9Tb3VwUmVxdWVzdENsYXNzIHsK
KwlHT2JqZWN0Q2xhc3MgcGFyZW50OworCisJZ2Jvb2xlYW4gKCpjaGVja191cmkpKFNvdXBSZXF1
ZXN0ICAgICAgICAgICpyZXFfYmFzZSwKKwkJCSAgICAgIFNvdXBVUkkgICAgICAgICAgICAgICp1
cmksCisJCQkgICAgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpOworCisJR0lucHV0U3Ry
ZWFtICogKCpzZW5kKShTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKKwkJCSAgICAgICBH
Q2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkgICAgICAgR0Vycm9yICAgICAg
ICAgICAgICAqKmVycm9yKTsKKwl2b2lkICgqc2VuZF9hc3luYykoU291cFJlcXVlc3QgICAgICAg
ICAgKnJlcXVlc3QsCisJCQkgICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJ
CQkgICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAorCQkJICAgZ3BvaW50ZXIgdXNlcl9k
YXRhKTsKKwlHSW5wdXRTdHJlYW0gKiAoKnNlbmRfZmluaXNoKShTb3VwUmVxdWVzdCAgICAgICAg
ICAqcmVxdWVzdCwKKwkJCQkgICAgICBHQXN5bmNSZXN1bHQgICAgICAgICAqcmVzdWx0LAorCQkJ
CSAgICAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcik7CisKKwlnb2Zmc2V0ICgqZ2V0X2Nv
bnRlbnRfbGVuZ3RoKShTb3VwUmVxdWVzdCAgICpyZXF1ZXN0KTsKKwljb25zdCBjaGFyICogICAo
KmdldF9jb250ZW50X3R5cGUpKFNvdXBSZXF1ZXN0ICAgKnJlcXVlc3QpOworfTsKKworR1R5cGUg
c291cF9yZXF1ZXN0X2dldF90eXBlICh2b2lkKTsKKworI2RlZmluZSBTT1VQX1JFUVVFU1RfVVJJ
ICAgICAidXJpIgorI2RlZmluZSBTT1VQX1JFUVVFU1RfU0VTU0lPTiAic2Vzc2lvbiIKKworR0lu
cHV0U3RyZWFtICpzb3VwX3JlcXVlc3Rfc2VuZCAoU291cFJlcXVlc3QgICAgICAgICAgKnJlcXVl
c3QsCisJCQkJIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkgR0Vycm9y
ICAgICAgICAgICAgICAqKmVycm9yKTsKK3ZvaWQgICAgICAgICAgc291cF9yZXF1ZXN0X3NlbmRf
YXN5bmMgKFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAorCQkJCSAgICAgICBHQ2FuY2Vs
bGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJICAgICAgIEdBc3luY1JlYWR5Q2FsbGJh
Y2sgY2FsbGJhY2ssCisJCQkJICAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7CitHSW5wdXRTdHJl
YW0gKnNvdXBfcmVxdWVzdF9zZW5kX2ZpbmlzaCAoU291cFJlcXVlc3QgICAgICAgICAgKnJlcXVl
c3QsCisJCQkJCUdBc3luY1Jlc3VsdCAgICAgICAgICpyZXN1bHQsCisJCQkJCUdFcnJvciAgICAg
ICAgICAgICAgKiplcnJvcik7CisKK1NvdXBVUkkgICAgICAqc291cF9yZXF1ZXN0X2dldF91cmkg
KFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0KTsKK1NvdXBTZXNzaW9uICAqc291cF9yZXF1
ZXN0X2dldF9zZXNzaW9uIChTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCk7CisKK2dvZmZz
ZXQgICAgICAgc291cF9yZXF1ZXN0X2dldF9jb250ZW50X2xlbmd0aCAoU291cFJlcXVlc3QgICAg
ICAgICAgKnJlcXVlc3QpOworY29uc3QgY2hhciAgICpzb3VwX3JlcXVlc3RfZ2V0X2NvbnRlbnRf
dHlwZSAoU291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QpOworCitHX0VORF9ERUNMUworCisj
ZW5kaWYgLyogU09VUF9SRVFVRVNUX0ggKi8KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmMgYi9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Rlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmEyZGRiMGEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Rlci5jCkBAIC0wLDAgKzEsMTg2IEBACisv
KgorICogc291cC1yZXF1ZXN0ZXIuYzoKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIElnYWxp
YSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3Rlci5oIgor
CisjaW5jbHVkZSAic291cC1yZXF1ZXN0LWRhdGEuaCIKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3Qt
ZmlsZS5oIgorI2luY2x1ZGUgInNvdXAtcmVxdWVzdC1odHRwLmgiCisjaW5jbHVkZSA8Z2xpYi9n
aTE4bi5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorCitzdHJ1Y3QgX1NvdXBSZXF1ZXN0
ZXJQcml2YXRlIHsKKwlHSGFzaFRhYmxlICpyZXF1ZXN0X3R5cGVzOworfTsKKworI2RlZmluZSBT
T1VQX1JFUVVFU1RFUl9HRVRfUFJJVkFURShvKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRF
ICgobyksIFNPVVBfVFlQRV9SRVFVRVNURVIsIFNvdXBSZXF1ZXN0ZXJQcml2YXRlKSkKKworR19E
RUZJTkVfVFlQRSAoU291cFJlcXVlc3Rlciwgc291cF9yZXF1ZXN0ZXIsIEdfVFlQRV9PQkpFQ1Qp
CisKK3N0YXRpYyB2b2lkIHNvdXBfcmVxdWVzdGVyX2luaXQgKFNvdXBSZXF1ZXN0ZXIgKnJlcXVl
c3RlcikKK3sKKwlyZXF1ZXN0ZXItPnByaXYgPSBTT1VQX1JFUVVFU1RFUl9HRVRfUFJJVkFURSAo
cmVxdWVzdGVyKTsKKworCXJlcXVlc3Rlci0+cHJpdi0+cmVxdWVzdF90eXBlcyA9IDA7Cit9CisK
K3N0YXRpYyB2b2lkIGZpbmFsaXplIChHT2JqZWN0ICpvYmplY3QpCit7CisJU291cFJlcXVlc3Rl
ciAqcmVxdWVzdGVyID0gU09VUF9SRVFVRVNURVIgKG9iamVjdCk7CisKKwlpZiAocmVxdWVzdGVy
LT5wcml2LT5yZXF1ZXN0X3R5cGVzKQorCQlnX2hhc2hfdGFibGVfZGVzdHJveSAocmVxdWVzdGVy
LT5wcml2LT5yZXF1ZXN0X3R5cGVzKTsKKworCUdfT0JKRUNUX0NMQVNTIChzb3VwX3JlcXVlc3Rl
cl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgc291
cF9yZXF1ZXN0ZXJfY2xhc3NfaW5pdCAoU291cFJlcXVlc3RlckNsYXNzICpyZXF1ZXN0ZXJfY2xh
c3MpCit7CisJR09iamVjdENsYXNzICpvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAocmVx
dWVzdGVyX2NsYXNzKTsKKworCWdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSAocmVxdWVzdGVyX2Ns
YXNzLCBzaXplb2YgKFNvdXBSZXF1ZXN0ZXJQcml2YXRlKSk7CisKKwkvKiB2aXJ0dWFsIG1ldGhv
ZCBvdmVycmlkZSAqLworCW9iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBmaW5hbGl6ZTsKK30KKwor
c3RhdGljIHZvaWQgaW5pdF9yZXF1ZXN0X3R5cGVzIChTb3VwUmVxdWVzdGVyUHJpdmF0ZSAqcHJp
dikKK3sKKwlpZiAocHJpdi0+cmVxdWVzdF90eXBlcykKKwkJcmV0dXJuOworCisJcHJpdi0+cmVx
dWVzdF90eXBlcyA9IGdfaGFzaF90YWJsZV9uZXdfZnVsbCAoc291cF9zdHJfY2FzZV9oYXNoLAor
CQkJCQkJICAgICBzb3VwX3N0cl9jYXNlX2VxdWFsLAorCQkJCQkJICAgICBnX2ZyZWUsIDApOwor
CWdfaGFzaF90YWJsZV9pbnNlcnQgKHByaXYtPnJlcXVlc3RfdHlwZXMsIGdfc3RyZHVwICgiZmls
ZSIpLAorCQkJICAgICBHU0laRV9UT19QT0lOVEVSIChTT1VQX1RZUEVfUkVRVUVTVF9GSUxFKSk7
CisJZ19oYXNoX3RhYmxlX2luc2VydCAocHJpdi0+cmVxdWVzdF90eXBlcywgZ19zdHJkdXAgKCJk
YXRhIiksCisJCQkgICAgIEdTSVpFX1RPX1BPSU5URVIgKFNPVVBfVFlQRV9SRVFVRVNUX0RBVEEp
KTsKKwlnX2hhc2hfdGFibGVfaW5zZXJ0IChwcml2LT5yZXF1ZXN0X3R5cGVzLCBnX3N0cmR1cCAo
Imh0dHAiKSwKKwkJCSAgICAgR1NJWkVfVE9fUE9JTlRFUiAoU09VUF9UWVBFX1JFUVVFU1RfSFRU
UCkpOworCWdfaGFzaF90YWJsZV9pbnNlcnQgKHByaXYtPnJlcXVlc3RfdHlwZXMsIGdfc3RyZHVw
ICgiaHR0cHMiKSwKKwkJCSAgICAgR1NJWkVfVE9fUE9JTlRFUiAoU09VUF9UWVBFX1JFUVVFU1Rf
SFRUUCkpOworCWdfaGFzaF90YWJsZV9pbnNlcnQgKHByaXYtPnJlcXVlc3RfdHlwZXMsIGdfc3Ry
ZHVwICgiZnRwIiksCisJCQkgICAgIEdTSVpFX1RPX1BPSU5URVIgKFNPVVBfVFlQRV9SRVFVRVNU
X0ZJTEUpKTsKK30KKworU291cFJlcXVlc3RlciAqc291cF9yZXF1ZXN0ZXJfbmV3ICh2b2lkKQor
eworCXJldHVybiAoU291cFJlcXVlc3RlciAqKWdfb2JqZWN0X25ldyAoU09VUF9UWVBFX1JFUVVF
U1RFUiwgMCk7Cit9CisKK1NvdXBSZXF1ZXN0ICpzb3VwX3JlcXVlc3Rlcl9yZXF1ZXN0IChTb3Vw
UmVxdWVzdGVyICpyZXF1ZXN0ZXIsIGNvbnN0IGNoYXIgKnVyaVN0cmluZywgU291cFNlc3Npb24g
KnNlc3Npb24sIEdFcnJvciAqKmVycm9yKQoreworCVNvdXBVUkkgKnVyaSA9IHNvdXBfdXJpX25l
dyAodXJpU3RyaW5nKTsKKwlTb3VwUmVxdWVzdCAqcmVxOworCisJaWYgKCF1cmkpIHsKKwkJZ19z
ZXRfZXJyb3IgKGVycm9yLCBTT1VQX0VSUk9SLCBTT1VQX0VSUk9SX0JBRF9VUkksCisJCQkgICAg
IF8gKCJDb3VsZCBub3QgcGFyc2UgVVJJICclcyciKSwgdXJpU3RyaW5nKTsKKwkJcmV0dXJuIDA7
CisJfQorCisJcmVxID0gc291cF9yZXF1ZXN0ZXJfcmVxdWVzdF91cmkgKHJlcXVlc3RlciwgdXJp
LCBzZXNzaW9uLCBlcnJvcik7CisJc291cF91cmlfZnJlZSAodXJpKTsKKwlyZXR1cm4gcmVxOwor
fQorCitTb3VwUmVxdWVzdCAqc291cF9yZXF1ZXN0ZXJfcmVxdWVzdF91cmkgKFNvdXBSZXF1ZXN0
ZXIgKnJlcXVlc3RlciwgU291cFVSSSAqdXJpLCBTb3VwU2Vzc2lvbiAqc2Vzc2lvbiwgR0Vycm9y
ICoqZXJyb3IpCit7CisJR1R5cGUgcmVxdWVzdFR5cGU7CisKKwlnX3JldHVybl92YWxfaWZfZmFp
bCAoU09VUF9JU19SRVFVRVNURVIgKHJlcXVlc3RlciksIDApOworCisJaW5pdF9yZXF1ZXN0X3R5
cGVzIChyZXF1ZXN0ZXItPnByaXYpOworCXJlcXVlc3RUeXBlID0gKEdUeXBlKUdQT0lOVEVSX1RP
X1NJWkUgKGdfaGFzaF90YWJsZV9sb29rdXAgKHJlcXVlc3Rlci0+cHJpdi0+cmVxdWVzdF90eXBl
cywgdXJpLT5zY2hlbWUpKTsKKwlpZiAoIXJlcXVlc3RUeXBlKSB7CisJCWdfc2V0X2Vycm9yIChl
cnJvciwgU09VUF9FUlJPUiwgU09VUF9FUlJPUl9VTlNVUFBPUlRFRF9VUklfU0NIRU1FLAorCQkJ
ICAgICBfICgiVW5zdXBwb3J0ZWQgVVJJIHNjaGVtZSAnJXMnIiksIHVyaS0+c2NoZW1lKTsKKwkJ
cmV0dXJuIDA7CisJfQorCisJaWYgKGdfdHlwZV9pc19hIChyZXF1ZXN0VHlwZSwgR19UWVBFX0lO
SVRBQkxFKSkgeworCQlyZXR1cm4gKFNvdXBSZXF1ZXN0ICopZ19pbml0YWJsZV9uZXcgKHJlcXVl
c3RUeXBlLCAwLCBlcnJvciwKKwkJCQkJCSAgICAgICJ1cmkiLCB1cmksCisJCQkJCQkgICAgICAi
c2Vzc2lvbiIsIHNlc3Npb24sCisJCQkJCQkgICAgICAwKTsKKwl9IGVsc2UgeworCQlyZXR1cm4g
KFNvdXBSZXF1ZXN0ICopZ19vYmplY3RfbmV3IChyZXF1ZXN0VHlwZSwKKwkJCQkJCSAgICAidXJp
IiwgdXJpLAorCQkJCQkJICAgICJzZXNzaW9uIiwgc2Vzc2lvbiwKKwkJCQkJCSAgICAwKTsKKwl9
Cit9CisKKy8qIFJGQyAyMzk2LCAzLjEgKi8KK3N0YXRpYyBnYm9vbGVhbgorc291cF9zY2hlbWVf
aXNfdmFsaWQgKGNvbnN0IGNoYXIgKnNjaGVtZSkKK3sKKwlpZiAoc2NoZW1lID09IE5VTEwgfHwK
KwkgICAgIWdfYXNjaWlfaXNhbHBoYSAoKnNjaGVtZSkpCisJCXJldHVybiBGQUxTRTsKKworCXNj
aGVtZSsrOworCXdoaWxlICgqc2NoZW1lKSB7CisJCWlmICghZ19hc2NpaV9pc2FscGhhICgqc2No
ZW1lKSAmJgorCQkgICAgIWdfYXNjaWlfaXNkaWdpdCAoKnNjaGVtZSkgJiYKKwkJICAgICpzY2hl
bWUgIT0gJysnICYmCisJCSAgICAqc2NoZW1lICE9ICctJyAmJgorCQkgICAgKnNjaGVtZSAhPSAn
LicpCisJCQlyZXR1cm4gRkFMU0U7CisJCXNjaGVtZSsrOworCX0KKwlyZXR1cm4gVFJVRTsKK30K
Kwordm9pZAorc291cF9yZXF1ZXN0ZXJfYWRkX3Byb3RvY29sIChTb3VwUmVxdWVzdGVyICpyZXF1
ZXN0ZXIsCisJCQkgICAgIGNvbnN0IGNoYXIgICpzY2hlbWUsCisJCQkgICAgIEdUeXBlIHJlcXVl
c3RfdHlwZSkKK3sKKwlnX3JldHVybl9pZl9mYWlsIChTT1VQX0lTX1JFUVVFU1RFUiAocmVxdWVz
dGVyKSk7CisJZ19yZXR1cm5faWZfZmFpbCAoc291cF9zY2hlbWVfaXNfdmFsaWQgKHNjaGVtZSkp
OworCisJaW5pdF9yZXF1ZXN0X3R5cGVzIChyZXF1ZXN0ZXItPnByaXYpOworCWdfaGFzaF90YWJs
ZV9pbnNlcnQgKHJlcXVlc3Rlci0+cHJpdi0+cmVxdWVzdF90eXBlcywgZ19zdHJkdXAgKHNjaGVt
ZSksCisJCQkgICAgIEdTSVpFX1RPX1BPSU5URVIgKHJlcXVlc3RfdHlwZSkpOworfQorCit2b2lk
Citzb3VwX3JlcXVlc3Rlcl9yZW1vdmVfcHJvdG9jb2wgKFNvdXBSZXF1ZXN0ZXIgKnJlcXVlc3Rl
ciwKKwkJCQljb25zdCBjaGFyICAqc2NoZW1lKQoreworCWdfcmV0dXJuX2lmX2ZhaWwgKFNPVVBf
SVNfUkVRVUVTVEVSIChyZXF1ZXN0ZXIpKTsKKwlnX3JldHVybl9pZl9mYWlsIChzb3VwX3NjaGVt
ZV9pc192YWxpZCAoc2NoZW1lKSk7CisKKwlpbml0X3JlcXVlc3RfdHlwZXMgKHJlcXVlc3Rlci0+
cHJpdik7CisJZ19oYXNoX3RhYmxlX3JlbW92ZSAocmVxdWVzdGVyLT5wcml2LT5yZXF1ZXN0X3R5
cGVzLCBzY2hlbWUpOworfQorCitHUXVhcmsKK3NvdXBfZXJyb3JfcXVhcmsgKHZvaWQpCit7CisJ
c3RhdGljIEdRdWFyayBlcnJvcjsKKwlpZiAoIWVycm9yKQorCQllcnJvciA9IGdfcXVhcmtfZnJv
bV9zdGF0aWNfc3RyaW5nICgic291cF9lcnJvcl9xdWFyayIpOworCXJldHVybiBlcnJvcjsKK30K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVx
dWVzdGVyLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVl
c3Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZWQ5MGIKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJl
cXVlc3Rlci5oCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdh
bGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2lmbmRlZiBTT1VQX1JFUVVFU1RFUl9ICisjZGVmaW5lIFNPVVBfUkVRVUVTVEVS
X0ggMQorCisjaW5jbHVkZSAic291cC1yZXF1ZXN0LmgiCisjaW5jbHVkZSA8bGlic291cC9zb3Vw
Lmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBTT1VQX1RZUEVfUkVRVUVTVEVSICAgICAg
ICAgICAgKHNvdXBfcmVxdWVzdGVyX2dldF90eXBlICgpKQorI2RlZmluZSBTT1VQX1JFUVVFU1RF
UihvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgU09V
UF9UWVBFX1JFUVVFU1RFUiwgU291cFJlcXVlc3RlcikpCisjZGVmaW5lIFNPVVBfUkVRVUVTVEVS
X0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFNPVVBf
VFlQRV9SRVFVRVNURVIsIFNvdXBSZXF1ZXN0ZXJDbGFzcykpCisjZGVmaW5lIFNPVVBfSVNfUkVR
VUVTVEVSKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBT
T1VQX1RZUEVfUkVRVUVTVEVSKSkKKyNkZWZpbmUgU09VUF9JU19SRVFVRVNURVJfQ0xBU1Moa2xh
c3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKG9iaiksIFNPVVBfVFlQRV9SRVFVRVNURVIp
KQorI2RlZmluZSBTT1VQX1JFUVVFU1RFUl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5D
RV9HRVRfQ0xBU1MgKChvYmopLCBTT1VQX1RZUEVfUkVRVUVTVEVSLCBTb3VwUmVxdWVzdGVyQ2xh
c3MpKQorCisjZGVmaW5lIFNPVVBfRVJST1Igc291cF9lcnJvcl9xdWFyayAoKQorCit0eXBlZGVm
IGVudW0geworCVNPVVBfRVJST1JfQkFEX1VSSSwKKwlTT1VQX0VSUk9SX1VOU1VQUE9SVEVEX1VS
SV9TQ0hFTUUKK30gU291cEVycm9yOworCit0eXBlZGVmIHN0cnVjdCBfU291cFJlcXVlc3RlciBT
b3VwUmVxdWVzdGVyOwordHlwZWRlZiBzdHJ1Y3QgX1NvdXBSZXF1ZXN0ZXJQcml2YXRlIFNvdXBS
ZXF1ZXN0ZXJQcml2YXRlOworCitzdHJ1Y3QgX1NvdXBSZXF1ZXN0ZXIgeworCUdPYmplY3QgcGFy
ZW50OworCisJU291cFJlcXVlc3RlclByaXZhdGUgKnByaXY7Cit9OworCit0eXBlZGVmIHN0cnVj
dCB7CisJR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK30gU291cFJlcXVlc3RlckNsYXNzOwor
CitHVHlwZSBzb3VwX3JlcXVlc3Rlcl9nZXRfdHlwZSAodm9pZCk7CisKK1NvdXBSZXF1ZXN0ZXIg
KnNvdXBfcmVxdWVzdGVyX25ldyAodm9pZCk7CisKK0dRdWFyayBzb3VwX2Vycm9yX3F1YXJrICh2
b2lkKTsKKworU291cFJlcXVlc3QgKnNvdXBfcmVxdWVzdGVyX3JlcXVlc3QgKFNvdXBSZXF1ZXN0
ZXIgKnJlcXVlc3RlciwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKnVyaVN0cmluZywKKwkJCQkgICAg
IFNvdXBTZXNzaW9uICpzZXNzaW9uLAorCQkJCSAgICAgR0Vycm9yICoqZXJyb3IpOworCitTb3Vw
UmVxdWVzdCAqc291cF9yZXF1ZXN0ZXJfcmVxdWVzdF91cmkgKFNvdXBSZXF1ZXN0ZXIgKnJlcXVl
c3RlciwKKwkJCQkJIFNvdXBVUkkgKnVyaSwKKwkJCQkJIFNvdXBTZXNzaW9uICpzZXNzaW9uLAor
CQkJCQkgR0Vycm9yICoqZXJyb3IpOworCit2b2lkIHNvdXBfcmVxdWVzdGVyX2FkZF9wcm90b2Nv
bCAoU291cFJlcXVlc3RlciAqcmVxdWVzdGVyLAorCQkJCSAgY29uc3QgY2hhciAgKnNjaGVtZSwK
KwkJCQkgIEdUeXBlIHJlcXVlc3RfdHlwZSk7CisKK3ZvaWQgc291cF9yZXF1ZXN0ZXJfcmVtb3Zl
X3Byb3RvY29sIChTb3VwUmVxdWVzdGVyICpyZXF1ZXN0ZXIsCisJCQkJICAgICBjb25zdCBjaGFy
ICAqc2NoZW1lKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFNPVVBfUkVRVUVTVEVSX0gg
Ki8KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtp
dC9zb3VwLWNhY2hlLXByaXZhdGUuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2Nh
Y2hlL3dlYmtpdC9zb3VwLWNhY2hlLXByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4wOTE0N2YzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUtcHJpdmF0ZS5oCkBAIC0wLDAgKzEs
NDEgQEAKKy8qCisgKiBzb3VwLWNhY2hlLXByaXZhdGUuaDoKKyAqCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV0VCS0lUX1NPVVBfQ0FDSEVfUFJJVkFURV9ICisj
ZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX1BSSVZBVEVfSCAxCisKKyNpbmNsdWRlICJzb3VwLWNh
Y2hlLmgiCisjaW5jbHVkZSA8bGlic291cC9zb3VwLW1lc3NhZ2UuaD4KKworR19CRUdJTl9ERUNM
UworCitXZWJLaXRTb3VwQ2FjaGVSZXNwb25zZSB3ZWJraXRfc291cF9jYWNoZV9oYXNfcmVzcG9u
c2UgKFdlYktpdFNvdXBDYWNoZSAgICpjYWNoZSwKKwkJCQkJCQlTb3VwTWVzc2FnZSAqbXNnKTsK
K0dJbnB1dFN0cmVhbSAqd2Via2l0X3NvdXBfY2FjaGVfc2VuZF9yZXNwb25zZSAoV2ViS2l0U291
cENhY2hlICAgKmNhY2hlLAorCQkJCQkgICAgICAgU291cE1lc3NhZ2UgKm1zZyk7CitXZWJLaXRT
b3VwQ2FjaGVhYmlsaXR5ICB3ZWJraXRfc291cF9jYWNoZV9nZXRfY2FjaGVhYmlsaXR5IChXZWJL
aXRTb3VwQ2FjaGUgICAqY2FjaGUsCisJCQkJCQkJICAgIFNvdXBNZXNzYWdlICptc2cpOworU291
cE1lc3NhZ2UgKndlYmtpdF9zb3VwX2NhY2hlX2dlbmVyYXRlX2NvbmRpdGlvbmFsX3JlcXVlc3Qg
KFdlYktpdFNvdXBDYWNoZSAgICpjYWNoZSwKKwkJCQkJCQkgICAgIFNvdXBNZXNzYWdlICpvcmln
aW5hbCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfU09VUF9DQUNIRV9QUklW
QVRFX0ggKi8KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3dlYmtpdC9zb3VwLWNhY2hlLmMgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNo
ZS93ZWJraXQvc291cC1jYWNoZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjcyYWNmYjMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5jCkBAIC0wLDAgKzEsMTY1MiBAQAorLyoKKyAqIHNv
dXAtY2FjaGUuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBJZ2FsaWEgUy5MLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisv
KiBUT0RPOgorICogLSBOZWVkIHRvIGhvb2sgdGhlIGZlYXR1cmUgaW4gdGhlIHN5bmMgU291cFNl
c3Npb24uCisgKiAtIE5lZWQgbW9yZSB0ZXN0cy4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdf
SAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJzb3VwLWNhY2hlLmgi
CisjaW5jbHVkZSAic291cC1jYWNoZS1wcml2YXRlLmgiCisjaW5jbHVkZSA8bGlic291cC9zb3Vw
Lmg+CisjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitzdGF0aWMg
U291cFNlc3Npb25GZWF0dXJlSW50ZXJmYWNlICp3ZWJraXRfc291cF9jYWNoZV9kZWZhdWx0X2Zl
YXR1cmVfaW50ZXJmYWNlOworc3RhdGljIHZvaWQgd2Via2l0X3NvdXBfY2FjaGVfc2Vzc2lvbl9m
ZWF0dXJlX2luaXQgKFNvdXBTZXNzaW9uRmVhdHVyZUludGVyZmFjZSAqZmVhdHVyZV9pbnRlcmZh
Y2UsIGdwb2ludGVyIGludGVyZmFjZV9kYXRhKTsKKworI2RlZmluZSBERUZBVUxUX01BWF9TSVpF
IDUwICogMTAyNCAqIDEwMjQKKyNkZWZpbmUgTUFYX0VOVFJZX0RBVEFfUEVSQ0VOVEFHRSAxMCAv
KiBQZXJjZW50YWdlIG9mIHRoZSB0b3RhbCBzaXplCisJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvZiB0aGUgY2FjaGUgdGhhdCBjYW4gYmUKKwkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZpbGxlZCBieSBhIHNpbmdsZSBlbnRyeSAqLworCit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0U291cENhY2hlRW50cnkgeworCWNoYXIgKmtleTsKKwljaGFyICpmaWxlbmFtZTsKKwln
dWludCBmcmVzaG5lc3NfbGlmZXRpbWU7CisJZ2Jvb2xlYW4gbXVzdF9yZXZhbGlkYXRlOworCUdT
dHJpbmcgKmRhdGE7CisJZ3NpemUgcG9zOworCWdzaXplIGxlbmd0aDsKKwl0aW1lX3QgY29ycmVj
dGVkX2luaXRpYWxfYWdlOworCXRpbWVfdCByZXNwb25zZV90aW1lOworCWdib29sZWFuIHdyaXRp
bmc7CisJZ2Jvb2xlYW4gZGlydHk7CisJZ2Jvb2xlYW4gZ290X2JvZHk7CisJZ2Jvb2xlYW4gYmVp
bmdfdmFsaWRhdGVkOworCVNvdXBNZXNzYWdlSGVhZGVycyAqaGVhZGVyczsKKwlHT3V0cHV0U3Ry
ZWFtICpzdHJlYW07CisJR0Vycm9yICplcnJvcjsKKwlndWludCBoaXRzOworCUdDYW5jZWxsYWJs
ZSAqY2FuY2VsbGFibGU7Cit9IFdlYktpdFNvdXBDYWNoZUVudHJ5OworCitzdHJ1Y3QgX1dlYktp
dFNvdXBDYWNoZVByaXZhdGUgeworCWNoYXIgKmNhY2hlX2RpcjsKKwlHSGFzaFRhYmxlICpjYWNo
ZTsKKwlndWludCBuX3BlbmRpbmc7CisJU291cFNlc3Npb24gKnNlc3Npb247CisJV2ViS2l0U291
cENhY2hlVHlwZSBjYWNoZV90eXBlOworCWd1aW50IHNpemU7CisJZ3VpbnQgbWF4X3NpemU7CisJ
Z3VpbnQgbWF4X2VudHJ5X2RhdGFfc2l6ZTsgLyogQ29tcHV0ZWQgdmFsdWUuIEhlcmUgZm9yIHBl
cmZvcm1hbmNlIHJlYXNvbnMgKi8KKwlHTGlzdCAqbHJ1X3N0YXJ0OworfTsKKwordHlwZWRlZiBz
dHJ1Y3QgeworCVdlYktpdFNvdXBDYWNoZSAqY2FjaGU7CisJV2ViS2l0U291cENhY2hlRW50cnkg
KmVudHJ5OworCVNvdXBNZXNzYWdlICptc2c7CisJZ3Vsb25nIGdvdF9jaHVua19oYW5kbGVyOwor
CWd1bG9uZyBnb3RfYm9keV9oYW5kbGVyOworCWd1bG9uZyByZXN0YXJ0ZWRfaGFuZGxlcjsKK30g
V2ViS2l0U291cENhY2hlV3JpdGluZ0ZpeHR1cmU7CisKK2VudW0geworCVBST1BfMCwKKwlQUk9Q
X0NBQ0hFX0RJUiwKKwlQUk9QX0NBQ0hFX1RZUEUKK307CisKKyNkZWZpbmUgV0VCS0lUX1NPVVBf
Q0FDSEVfR0VUX1BSSVZBVEUobykgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAoKG8pLCBX
RUJLSVRfVFlQRV9TT1VQX0NBQ0hFLCBXZWJLaXRTb3VwQ2FjaGVQcml2YXRlKSkKKworR19ERUZJ
TkVfVFlQRV9XSVRIX0NPREUgKFdlYktpdFNvdXBDYWNoZSwgd2Via2l0X3NvdXBfY2FjaGUsIEdf
VFlQRV9PQkpFQ1QsCisJCQkgR19JTVBMRU1FTlRfSU5URVJGQUNFIChTT1VQX1RZUEVfU0VTU0lP
Tl9GRUFUVVJFLAorCQkJCQkJd2Via2l0X3NvdXBfY2FjaGVfc2Vzc2lvbl9mZWF0dXJlX2luaXQp
KQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfcmVtb3ZlIChXZWJL
aXRTb3VwQ2FjaGUgKmNhY2hlLCBXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkpOworc3RhdGlj
IHZvaWQgbWFrZV9yb29tX2Zvcl9uZXdfZW50cnkgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsIGd1
aW50IGxlbmd0aF90b19hZGQpOworc3RhdGljIGdib29sZWFuIGNhY2hlX2FjY2VwdHNfZW50cmll
c19vZl9zaXplIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLCBndWludCBsZW5ndGhfdG9fYWRkKTsK
Kworc3RhdGljIFdlYktpdFNvdXBDYWNoZWFiaWxpdHkKK2dldF9jYWNoZWFiaWxpdHkgKFdlYktp
dFNvdXBDYWNoZSAqY2FjaGUsIFNvdXBNZXNzYWdlICptc2cpCit7CisJV2ViS2l0U291cENhY2hl
YWJpbGl0eSBjYWNoZWFiaWxpdHk7CisJY29uc3QgY2hhciAqY2FjaGVfY29udHJvbDsKKworCS8q
IDEuIFRoZSByZXF1ZXN0IG1ldGhvZCBtdXN0IGJlIGNhY2hlYWJsZSAqLworCWlmIChtc2ctPm1l
dGhvZCA9PSBTT1VQX01FVEhPRF9HRVQpCisJCWNhY2hlYWJpbGl0eSA9IFdFQktJVF9TT1VQX0NB
Q0hFX0NBQ0hFQUJMRTsKKwllbHNlIGlmIChtc2ctPm1ldGhvZCA9PSBTT1VQX01FVEhPRF9IRUFE
IHx8CisJCSBtc2ctPm1ldGhvZCA9PSBTT1VQX01FVEhPRF9UUkFDRSB8fAorCQkgbXNnLT5tZXRo
b2QgPT0gU09VUF9NRVRIT0RfQ09OTkVDVCkKKwkJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1VO
Q0FDSEVBQkxFOworCWVsc2UKKwkJcmV0dXJuIChXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJM
RSB8IFdFQktJVF9TT1VQX0NBQ0hFX0lOVkFMSURBVEVTKTsKKworCWNhY2hlX2NvbnRyb2wgPSBz
b3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKG1zZy0+cmVzcG9uc2VfaGVhZGVycywgIkNhY2hlLUNv
bnRyb2wiKTsKKwlpZiAoY2FjaGVfY29udHJvbCkgeworCQlHSGFzaFRhYmxlICpoYXNoOworCQlX
ZWJLaXRTb3VwQ2FjaGVQcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfQ0FDSEVfR0VUX1BSSVZB
VEUgKGNhY2hlKTsKKworCQloYXNoID0gc291cF9oZWFkZXJfcGFyc2VfcGFyYW1fbGlzdCAoY2Fj
aGVfY29udHJvbCk7CisKKwkJLyogU2hhcmVkIGNhY2hlcyBNVVNUIE5PVCBzdG9yZSBwcml2YXRl
IHJlc291cmNlcyAqLworCQlpZiAocHJpdi0+Y2FjaGVfdHlwZSA9PSBXRUJLSVRfU09VUF9DQUNI
RV9TSEFSRUQpIHsKKwkJCWlmIChnX2hhc2hfdGFibGVfbG9va3VwX2V4dGVuZGVkIChoYXNoLCAi
cHJpdmF0ZSIsIE5VTEwsIE5VTEwpKSB7CisJCQkJc291cF9oZWFkZXJfZnJlZV9wYXJhbV9saXN0
IChoYXNoKTsKKwkJCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEU7CisJCQl9
CisJCX0KKworCQkvKiAyLiBUaGUgJ25vLXN0b3JlJyBjYWNoZSBkaXJlY3RpdmUgZG9lcyBub3Qg
YXBwZWFyIGluIHRoZQorCQkgKiBoZWFkZXJzCisJCSAqLworCQlpZiAoZ19oYXNoX3RhYmxlX2xv
b2t1cF9leHRlbmRlZCAoaGFzaCwgIm5vLXN0b3JlIiwgTlVMTCwgTlVMTCkpIHsKKwkJCXNvdXBf
aGVhZGVyX2ZyZWVfcGFyYW1fbGlzdCAoaGFzaCk7CisJCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FD
SEVfVU5DQUNIRUFCTEU7CisJCX0KKworCQkvKiBUaGlzIGRvZXMgbm90IGFwcGVhciBpbiBzZWN0
aW9uIDIuMSwgYnV0IEkgdGhpbmsgaXQgbWFrZXMKKwkJICogc2Vuc2UgdG8gY2hlY2sgaXQgdG9v
PworCQkgKi8KKwkJaWYgKGdfaGFzaF90YWJsZV9sb29rdXBfZXh0ZW5kZWQgKGhhc2gsICJuby1j
YWNoZSIsIE5VTEwsIE5VTEwpKSB7CisJCQlzb3VwX2hlYWRlcl9mcmVlX3BhcmFtX2xpc3QgKGhh
c2gpOworCQkJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFOworCQl9CisJfQor
CisJc3dpdGNoIChtc2ctPnN0YXR1c19jb2RlKSB7CisJCWNhc2UgU09VUF9TVEFUVVNfUEFSVElB
TF9DT05URU5UOgorCQkJLyogV2UgZG9uJ3QgY2FjaGUgcGFydGlhbCByZXNwb25zZXMsIGJ1dCB0
aGV5IG9ubHkKKwkJCSAqIGludmFsaWRhdGUgY2FjaGVkIGZ1bGwgcmVzcG9uc2VzIGlmIHRoZSBo
ZWFkZXJzCisJCQkgKiBkb24ndCBtYXRjaC4KKwkJCSAqLworCQkJY2FjaGVhYmlsaXR5ID0gV0VC
S0lUX1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEU7CisJCQlicmVhazsKKworCQljYXNlIFNPVVBfU1RB
VFVTX05PVF9NT0RJRklFRDoKKwkJCS8qIEEgMzA0IHJlc3BvbnNlIHZhbGlkYXRlcyBhbiBleGlz
dGluZyBjYWNoZSBlbnRyeSAqLworCQkJY2FjaGVhYmlsaXR5ID0gV0VCS0lUX1NPVVBfQ0FDSEVf
VkFMSURBVEVTOworCQkJYnJlYWs7CisKKwkJY2FzZSBTT1VQX1NUQVRVU19NVUxUSVBMRV9DSE9J
Q0VTOgorCQljYXNlIFNPVVBfU1RBVFVTX01PVkVEX1BFUk1BTkVOVExZOgorCQljYXNlIFNPVVBf
U1RBVFVTX0dPTkU6CisJCQkvKiBGSVhNRTogY2FjaGVhYmxlIHVubGVzcyBpbmRpY2F0ZWQgb3Ro
ZXJ3aXNlICovCisJCQljYWNoZWFiaWxpdHkgPSBXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJM
RTsKKwkJCWJyZWFrOworCisJCWNhc2UgU09VUF9TVEFUVVNfRk9VTkQ6CisJCWNhc2UgU09VUF9T
VEFUVVNfVEVNUE9SQVJZX1JFRElSRUNUOgorCQkJLyogRklYTUU6IGNhY2hlYWJsZSBpZiBleHBs
aWNpdGx5IGluZGljYXRlZCAqLworCQkJY2FjaGVhYmlsaXR5ID0gV0VCS0lUX1NPVVBfQ0FDSEVf
VU5DQUNIRUFCTEU7CisJCQlicmVhazsKKworCQljYXNlIFNPVVBfU1RBVFVTX1NFRV9PVEhFUjoK
KwkJY2FzZSBTT1VQX1NUQVRVU19GT1JCSURERU46CisJCWNhc2UgU09VUF9TVEFUVVNfTk9UX0ZP
VU5EOgorCQljYXNlIFNPVVBfU1RBVFVTX01FVEhPRF9OT1RfQUxMT1dFRDoKKwkJCXJldHVybiAo
V0VCS0lUX1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEUgfCBXRUJLSVRfU09VUF9DQUNIRV9JTlZBTElE
QVRFUyk7CisKKwkJZGVmYXVsdDoKKwkJCS8qIEFueSA1eHggc3RhdHVzIG9yIGFueSA0eHggc3Rh
dHVzIG5vdCBoYW5kbGVkIGFib3ZlCisJCQkgKiBpcyB1bmNhY2hlYWJsZSBidXQgZG9lc24ndCBi
cmVhayB0aGUgY2FjaGUuCisJCQkgKi8KKwkJCWlmICgobXNnLT5zdGF0dXNfY29kZSA+PSBTT1VQ
X1NUQVRVU19CQURfUkVRVUVTVCAmJgorCQkJICAgICBtc2ctPnN0YXR1c19jb2RlIDw9IFNPVVBf
U1RBVFVTX0ZBSUxFRF9ERVBFTkRFTkNZKSB8fAorCQkJICAgIG1zZy0+c3RhdHVzX2NvZGUgPj0g
U09VUF9TVEFUVVNfSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCXJldHVybiBXRUJLSVRfU09V
UF9DQUNIRV9VTkNBQ0hFQUJMRTsKKworCQkJLyogQW4gdW5yZWNvZ25pemVkIDJ4eCwgM3h4LCBv
ciA0eHggcmVzcG9uc2UgYnJlYWtzCisJCQkgKiB0aGUgY2FjaGUuCisJCQkgKi8KKwkJCWlmICgo
bXNnLT5zdGF0dXNfY29kZSA+IFNPVVBfU1RBVFVTX1BBUlRJQUxfQ09OVEVOVCAmJgorCQkJICAg
ICBtc2ctPnN0YXR1c19jb2RlIDwgU09VUF9TVEFUVVNfTVVMVElQTEVfQ0hPSUNFUykgfHwKKwkJ
CSAgICAobXNnLT5zdGF0dXNfY29kZSA+IFNPVVBfU1RBVFVTX1RFTVBPUkFSWV9SRURJUkVDVCAm
JgorCQkJICAgICBtc2ctPnN0YXR1c19jb2RlIDwgU09VUF9TVEFUVVNfSU5URVJOQUxfU0VSVkVS
X0VSUk9SKSkKKwkJCQlyZXR1cm4gKFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFIHwgV0VC
S0lUX1NPVVBfQ0FDSEVfSU5WQUxJREFURVMpOworCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGNh
Y2hlYWJpbGl0eTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2Zy
ZWUgKFdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSwgZ2Jvb2xlYW4gcHVyZ2UpCit7CisJaWYg
KHB1cmdlKSB7CisJCUdGaWxlICpmaWxlID0gZ19maWxlX25ld19mb3JfcGF0aCAoZW50cnktPmZp
bGVuYW1lKTsKKwkJZ19maWxlX2RlbGV0ZSAoZmlsZSwgTlVMTCwgTlVMTCk7CisJCWdfb2JqZWN0
X3VucmVmIChmaWxlKTsKKwl9CisKKwlnX2ZyZWUgKGVudHJ5LT5maWxlbmFtZSk7CisJZW50cnkt
PmZpbGVuYW1lID0gTlVMTDsKKwlnX2ZyZWUgKGVudHJ5LT5rZXkpOworCWVudHJ5LT5rZXkgPSBO
VUxMOworCisJaWYgKGVudHJ5LT5oZWFkZXJzKSB7CisJCXNvdXBfbWVzc2FnZV9oZWFkZXJzX2Zy
ZWUgKGVudHJ5LT5oZWFkZXJzKTsKKwkJZW50cnktPmhlYWRlcnMgPSBOVUxMOworCX0KKworCWlm
IChlbnRyeS0+ZGF0YSkgeworCQlnX3N0cmluZ19mcmVlIChlbnRyeS0+ZGF0YSwgVFJVRSk7CisJ
CWVudHJ5LT5kYXRhID0gTlVMTDsKKwl9CisJaWYgKGVudHJ5LT5lcnJvcikgeworCQlnX2Vycm9y
X2ZyZWUgKGVudHJ5LT5lcnJvcik7CisJCWVudHJ5LT5lcnJvciA9IE5VTEw7CisJfQorCWlmIChl
bnRyeS0+Y2FuY2VsbGFibGUpIHsKKwkJZ19vYmplY3RfdW5yZWYgKGVudHJ5LT5jYW5jZWxsYWJs
ZSk7CisJCWVudHJ5LT5jYW5jZWxsYWJsZSA9IE5VTEw7CisJfQorCisJZ19zbGljZV9mcmVlIChX
ZWJLaXRTb3VwQ2FjaGVFbnRyeSwgZW50cnkpOworfQorCitzdGF0aWMgdm9pZAorY29weV9oZWFk
ZXJzIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSwgU291cE1lc3NhZ2VIZWFk
ZXJzICpoZWFkZXJzKQoreworCXNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZCAoaGVhZGVycywg
bmFtZSwgdmFsdWUpOworfQorCitzdGF0aWMgdm9pZAordXBkYXRlX2hlYWRlcnMgKGNvbnN0IGNo
YXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlLCBTb3VwTWVzc2FnZUhlYWRlcnMgKmhlYWRlcnMp
Cit7CisJaWYgKHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldCAoaGVhZGVycywgbmFtZSkpCisJCXNv
dXBfbWVzc2FnZV9oZWFkZXJzX3JlcGxhY2UgKGhlYWRlcnMsIG5hbWUsIHZhbHVlKTsKKwllbHNl
CisJCXNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZCAoaGVhZGVycywgbmFtZSwgdmFsdWUpOwor
fQorCitzdGF0aWMgZ3VpbnQKK3dlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2dldF9jdXJyZW50X2Fn
ZSAoV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5KQoreworCXRpbWVfdCBub3cgPSB0aW1lIChO
VUxMKTsKKwl0aW1lX3QgcmVzaWRlbnRfdGltZTsKKworCXJlc2lkZW50X3RpbWUgPSBub3cgLSBl
bnRyeS0+cmVzcG9uc2VfdGltZTsKKwlyZXR1cm4gZW50cnktPmNvcnJlY3RlZF9pbml0aWFsX2Fn
ZSArIHJlc2lkZW50X3RpbWU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgord2Via2l0X3NvdXBfY2Fj
aGVfZW50cnlfaXNfZnJlc2hfZW5vdWdoIChXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnksIGlu
dCBtaW5fZnJlc2gpCit7CisJdW5zaWduZWQgbGltaXQgPSAobWluX2ZyZXNoID09IC0xKSA/IHdl
YmtpdF9zb3VwX2NhY2hlX2VudHJ5X2dldF9jdXJyZW50X2FnZSAoZW50cnkpIDogbWluX2ZyZXNo
OworCXJldHVybiBlbnRyeS0+ZnJlc2huZXNzX2xpZmV0aW1lID4gbGltaXQ7Cit9CisKK3N0YXRp
YyBjaGFyICoKK3NvdXBfbWVzc2FnZV9nZXRfY2FjaGVfa2V5IChTb3VwTWVzc2FnZSAqbXNnKQor
eworCVNvdXBVUkkgKnVyaSA9IHNvdXBfbWVzc2FnZV9nZXRfdXJpIChtc2cpOworCXJldHVybiBz
b3VwX3VyaV90b19zdHJpbmcgKHVyaSwgRkFMU0UpOworfQorCitzdGF0aWMgdm9pZAord2Via2l0
X3NvdXBfY2FjaGVfZW50cnlfc2V0X2ZyZXNobmVzcyAoV2ViS2l0U291cENhY2hlRW50cnkgKmVu
dHJ5LCBTb3VwTWVzc2FnZSAqbXNnLCBXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKQoreworCWNvbnN0
IGNoYXIgKmNhY2hlX2NvbnRyb2w7CisJY29uc3QgY2hhciAqZXhwaXJlcywgKmRhdGUsICpsYXN0
X21vZGlmaWVkOworCUdIYXNoVGFibGUgKmhhc2g7CisKKwloYXNoID0gTlVMTDsKKworCWNhY2hl
X2NvbnRyb2wgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKGVudHJ5LT5oZWFkZXJzLCAiQ2Fj
aGUtQ29udHJvbCIpOworCWlmIChjYWNoZV9jb250cm9sKSB7CisJCWNvbnN0IGNoYXIgKm1heF9h
Z2UsICpzX21heGFnZTsKKwkJZ2ludDY0IGZyZXNobmVzc19saWZldGltZSA9IDA7CisJCVdlYktp
dFNvdXBDYWNoZVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9DQUNIRV9HRVRfUFJJVkFURSAo
Y2FjaGUpOworCisJCWhhc2ggPSBzb3VwX2hlYWRlcl9wYXJzZV9wYXJhbV9saXN0IChjYWNoZV9j
b250cm9sKTsKKworCQkvKiBTaG91bGQgd2UgcmUtdmFsaWRhdGUgdGhlIGVudHJ5IHdoZW4gaXQg
Z29lcyBzdGFsZSAqLworCQllbnRyeS0+bXVzdF9yZXZhbGlkYXRlID0gKGdib29sZWFuKWdfaGFz
aF90YWJsZV9sb29rdXAgKGhhc2gsICJtdXN0LXJldmFsaWRhdGUiKTsKKworCQkvKiBTZWN0aW9u
IDIuMy4xICovCisJCWlmIChwcml2LT5jYWNoZV90eXBlID09IFdFQktJVF9TT1VQX0NBQ0hFX1NI
QVJFRCkgeworCQkJc19tYXhhZ2UgPSBnX2hhc2hfdGFibGVfbG9va3VwIChoYXNoLCAicy1tYXhh
Z2UiKTsKKwkJCWlmIChzX21heGFnZSkgeworCQkJCWZyZXNobmVzc19saWZldGltZSA9IGdfYXNj
aWlfc3RydG9sbCAoc19tYXhhZ2UsIE5VTEwsIDEwKTsKKwkJCQlpZiAoZnJlc2huZXNzX2xpZmV0
aW1lKSB7CisJCQkJCS8qIEltcGxpZXMgcHJveHktcmV2YWxpZGF0ZS4gVE9ETzogaXMgaXQgdHJ1
ZT8gKi8KKwkJCQkJZW50cnktPm11c3RfcmV2YWxpZGF0ZSA9IFRSVUU7CisJCQkJCXNvdXBfaGVh
ZGVyX2ZyZWVfcGFyYW1fbGlzdCAoaGFzaCk7CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQl9CisJ
CX0KKworCQkvKiBJZiAnbWF4LWFnZScgY2FjaGUgZGlyZWN0aXZlIGlzIHByZXNlbnQsIHVzZSB0
aGF0ICovCisJCW1heF9hZ2UgPSBnX2hhc2hfdGFibGVfbG9va3VwIChoYXNoLCAibWF4LWFnZSIp
OworCQlpZiAobWF4X2FnZSkKKwkJCWZyZXNobmVzc19saWZldGltZSA9IGdfYXNjaWlfc3RydG9s
bCAobWF4X2FnZSwgTlVMTCwgMTApOworCisJCWlmIChmcmVzaG5lc3NfbGlmZXRpbWUpIHsKKwkJ
CWVudHJ5LT5mcmVzaG5lc3NfbGlmZXRpbWUgPSAoZ3VpbnQpTUlOIChmcmVzaG5lc3NfbGlmZXRp
bWUsIEdfTUFYVUlOVDMyKTsKKwkJCXNvdXBfaGVhZGVyX2ZyZWVfcGFyYW1fbGlzdCAoaGFzaCk7
CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlpZiAoaGFzaCAhPSBOVUxMKQorCQlzb3VwX2hlYWRl
cl9mcmVlX3BhcmFtX2xpc3QgKGhhc2gpOworCisJLyogSWYgdGhlICdFeHBpcmVzJyByZXNwb25z
ZSBoZWFkZXIgaXMgcHJlc2VudCwgdXNlIGl0cyB2YWx1ZQorCSAqIG1pbnVzIHRoZSB2YWx1ZSBv
ZiB0aGUgJ0RhdGUnIHJlc3BvbnNlIGhlYWRlcgorCSAqLworCWV4cGlyZXMgPSBzb3VwX21lc3Nh
Z2VfaGVhZGVyc19nZXQgKGVudHJ5LT5oZWFkZXJzLCAiRXhwaXJlcyIpOworCWRhdGUgPSBzb3Vw
X21lc3NhZ2VfaGVhZGVyc19nZXQgKGVudHJ5LT5oZWFkZXJzLCAiRGF0ZSIpOworCWlmIChleHBp
cmVzICYmIGRhdGUpIHsKKwkJU291cERhdGUgKmV4cGlyZXNfZCwgKmRhdGVfZDsKKwkJdGltZV90
IGV4cGlyZXNfdCwgZGF0ZV90OworCisJCWV4cGlyZXNfZCA9IHNvdXBfZGF0ZV9uZXdfZnJvbV9z
dHJpbmcgKGV4cGlyZXMpOworCQlpZiAoZXhwaXJlc19kKSB7CisJCQlkYXRlX2QgPSBzb3VwX2Rh
dGVfbmV3X2Zyb21fc3RyaW5nIChkYXRlKTsKKworCQkJZXhwaXJlc190ID0gc291cF9kYXRlX3Rv
X3RpbWVfdCAoZXhwaXJlc19kKTsKKwkJCWRhdGVfdCA9IHNvdXBfZGF0ZV90b190aW1lX3QgKGRh
dGVfZCk7CisKKwkJCXNvdXBfZGF0ZV9mcmVlIChleHBpcmVzX2QpOworCQkJc291cF9kYXRlX2Zy
ZWUgKGRhdGVfZCk7CisKKwkJCWlmIChleHBpcmVzX3QgJiYgZGF0ZV90KSB7CisJCQkJZW50cnkt
PmZyZXNobmVzc19saWZldGltZSA9IChndWludClNQVggKGV4cGlyZXNfdCAtIGRhdGVfdCwgMCk7
CisJCQkJcmV0dXJuOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogSWYgRXhwaXJlcyBpcyBub3Qg
YSB2YWxpZCBkYXRlIHdlIHNob3VsZAorCQkJICAgdHJlYXQgaXQgYXMgYWxyZWFkeSBleHBpcmVk
LCBzZWUgc2VjdGlvbgorCQkJICAgMy4zICovCisJCQllbnRyeS0+ZnJlc2huZXNzX2xpZmV0aW1l
ID0gMDsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qIE90aGVyd2lzZSBhbiBoZXVyaXN0aWMg
bWF5IGJlIHVzZWQgKi8KKworCS8qIEhldXJpc3RpY3MgTVVTVCBOT1QgYmUgdXNlZCB3aXRoIHRo
ZXNlIHN0YXR1cyBjb2RlcworCSAgIChzZWN0aW9uIDIuMy4xLjEpICovCisJaWYgKG1zZy0+c3Rh
dHVzX2NvZGUgIT0gU09VUF9TVEFUVVNfT0sgJiYKKwkgICAgbXNnLT5zdGF0dXNfY29kZSAhPSBT
T1VQX1NUQVRVU19OT05fQVVUSE9SSVRBVElWRSAmJgorCSAgICBtc2ctPnN0YXR1c19jb2RlICE9
IFNPVVBfU1RBVFVTX1BBUlRJQUxfQ09OVEVOVCAmJgorCSAgICBtc2ctPnN0YXR1c19jb2RlICE9
IFNPVVBfU1RBVFVTX01VTFRJUExFX0NIT0lDRVMgJiYKKwkgICAgbXNnLT5zdGF0dXNfY29kZSAh
PSBTT1VQX1NUQVRVU19NT1ZFRF9QRVJNQU5FTlRMWSAmJgorCSAgICBtc2ctPnN0YXR1c19jb2Rl
ICE9IFNPVVBfU1RBVFVTX0dPTkUpCisJCWdvdG8gZXhwaXJlOworCisJLyogVE9ETzogYXR0YWNo
IHdhcm5pbmcgMTEzIGlmIHJlc3BvbnNlJ3MgY3VycmVudF9hZ2UgaXMgbW9yZQorCSAgIHRoYW4g
MjRoIChzZWN0aW9uIDIuMy4xLjEpIHdoZW4gdXNpbmcgaGV1cmlzdGljcyAqLworCisJLyogTGFz
dC1Nb2RpZmllZCBiYXNlZCBoZXVyaXN0aWMgKi8KKwlsYXN0X21vZGlmaWVkID0gc291cF9tZXNz
YWdlX2hlYWRlcnNfZ2V0IChlbnRyeS0+aGVhZGVycywgIkxhc3QtTW9kaWZpZWQiKTsKKwlpZiAo
bGFzdF9tb2RpZmllZCkgeworCQlTb3VwRGF0ZSAqc291cF9kYXRlOworCQl0aW1lX3Qgbm93LCBs
YXN0X21vZGlmaWVkX3Q7CisKKwkJc291cF9kYXRlID0gc291cF9kYXRlX25ld19mcm9tX3N0cmlu
ZyAobGFzdF9tb2RpZmllZCk7CisJCWxhc3RfbW9kaWZpZWRfdCA9IHNvdXBfZGF0ZV90b190aW1l
X3QgKHNvdXBfZGF0ZSk7CisJCW5vdyA9IHRpbWUgKE5VTEwpOworCisjZGVmaW5lIEhFVVJJU1RJ
Q19GQUNUT1IgMC4xIC8qIEZyb20gU2VjdGlvbiAyLjMuMS4xICovCisKKwkJZW50cnktPmZyZXNo
bmVzc19saWZldGltZSA9IE1BWCAoMCwgKG5vdyAtIGxhc3RfbW9kaWZpZWRfdCkgKiBIRVVSSVNU
SUNfRkFDVE9SKTsKKwkJc291cF9kYXRlX2ZyZWUgKHNvdXBfZGF0ZSk7CisJfQorCisJcmV0dXJu
OworCisgZXhwaXJlOgorCS8qIElmIGFsbCBlbHNlIGZhaWxzLCBtYWtlIHRoZSBlbnRyeSBleHBp
cmUgaW1tZWRpYXRlbHkgKi8KKwllbnRyeS0+ZnJlc2huZXNzX2xpZmV0aW1lID0gMDsKK30KKwor
c3RhdGljIFdlYktpdFNvdXBDYWNoZUVudHJ5ICoKK3dlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X25l
dyAoV2ViS2l0U291cENhY2hlICpjYWNoZSwgU291cE1lc3NhZ2UgKm1zZywgdGltZV90IHJlcXVl
c3RfdGltZSwgdGltZV90IHJlc3BvbnNlX3RpbWUpCit7CisJV2ViS2l0U291cENhY2hlRW50cnkg
KmVudHJ5OworCVNvdXBNZXNzYWdlSGVhZGVycyAqaGVhZGVyczsKKwljb25zdCBjaGFyICpkYXRl
OworCWNoYXIgKm1kNTsKKworCWVudHJ5ID0gZ19zbGljZV9uZXcwIChXZWJLaXRTb3VwQ2FjaGVF
bnRyeSk7CisJZW50cnktPmRpcnR5ID0gRkFMU0U7CisJZW50cnktPndyaXRpbmcgPSBGQUxTRTsK
KwllbnRyeS0+Z290X2JvZHkgPSBGQUxTRTsKKwllbnRyeS0+YmVpbmdfdmFsaWRhdGVkID0gRkFM
U0U7CisJZW50cnktPmRhdGEgPSBnX3N0cmluZ19uZXcgKE5VTEwpOworCWVudHJ5LT5wb3MgPSAw
OworCWVudHJ5LT5lcnJvciA9IE5VTEw7CisKKwkvKiBrZXkgJiBmaWxlbmFtZSAqLworCWVudHJ5
LT5rZXkgPSBzb3VwX21lc3NhZ2VfZ2V0X2NhY2hlX2tleSAobXNnKTsKKwltZDUgPSBnX2NvbXB1
dGVfY2hlY2tzdW1fZm9yX3N0cmluZyAoR19DSEVDS1NVTV9NRDUsIGVudHJ5LT5rZXksIC0xKTsK
KwllbnRyeS0+ZmlsZW5hbWUgPSBnX2J1aWxkX2ZpbGVuYW1lIChjYWNoZS0+cHJpdi0+Y2FjaGVf
ZGlyLCBtZDUsIE5VTEwpOworCWdfZnJlZSAobWQ1KTsKKworCS8qIEhlYWRlcnMgKi8KKwloZWFk
ZXJzID0gc291cF9tZXNzYWdlX2hlYWRlcnNfbmV3IChTT1VQX01FU1NBR0VfSEVBREVSU19SRVNQ
T05TRSk7CisJc291cF9tZXNzYWdlX2hlYWRlcnNfZm9yZWFjaCAobXNnLT5yZXNwb25zZV9oZWFk
ZXJzLAorCQkJCSAgICAgIChTb3VwTWVzc2FnZUhlYWRlcnNGb3JlYWNoRnVuYyljb3B5X2hlYWRl
cnMsCisJCQkJICAgICAgaGVhZGVycyk7CisJZW50cnktPmhlYWRlcnMgPSBoZWFkZXJzOworCisJ
LyogTFJVIGxpc3QgKi8KKwllbnRyeS0+aGl0cyA9IDA7CisKKwkvKiBTZWN0aW9uIDIuMy4xLCBG
cmVzaG5lc3MgTGlmZXRpbWUgKi8KKwl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9zZXRfZnJlc2hu
ZXNzIChlbnRyeSwgbXNnLCBjYWNoZSk7CisKKwkvKiBTZWN0aW9uIDIuMy4yLCBDYWxjdWxhdGlu
ZyBBZ2UgKi8KKwlkYXRlID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0IChlbnRyeS0+aGVhZGVy
cywgIkRhdGUiKTsKKworCWlmIChkYXRlKSB7CisJCVNvdXBEYXRlICpzb3VwX2RhdGU7CisJCWNv
bnN0IGNoYXIgKmFnZTsKKwkJdGltZV90IGRhdGVfdmFsdWUsIGFwcGFyZW50X2FnZSwgY29ycmVj
dGVkX3JlY2VpdmVkX2FnZSwgcmVzcG9uc2VfZGVsYXksIGFnZV92YWx1ZSA9IDA7CisKKwkJc291
cF9kYXRlID0gc291cF9kYXRlX25ld19mcm9tX3N0cmluZyAoZGF0ZSk7CisJCWRhdGVfdmFsdWUg
PSBzb3VwX2RhdGVfdG9fdGltZV90IChzb3VwX2RhdGUpOworCQlzb3VwX2RhdGVfZnJlZSAoc291
cF9kYXRlKTsKKworCQlhZ2UgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKGVudHJ5LT5oZWFk
ZXJzLCAiQWdlIik7CisJCWlmIChhZ2UpCisJCQlhZ2VfdmFsdWUgPSBnX2FzY2lpX3N0cnRvbGwg
KGFnZSwgTlVMTCwgMTApOworCisJCWVudHJ5LT5yZXNwb25zZV90aW1lID0gcmVzcG9uc2VfdGlt
ZTsKKwkJYXBwYXJlbnRfYWdlID0gTUFYICgwLCBlbnRyeS0+cmVzcG9uc2VfdGltZSAtIGRhdGVf
dmFsdWUpOworCQljb3JyZWN0ZWRfcmVjZWl2ZWRfYWdlID0gTUFYIChhcHBhcmVudF9hZ2UsIGFn
ZV92YWx1ZSk7CisJCXJlc3BvbnNlX2RlbGF5ID0gZW50cnktPnJlc3BvbnNlX3RpbWUgLSByZXF1
ZXN0X3RpbWU7CisJCWVudHJ5LT5jb3JyZWN0ZWRfaW5pdGlhbF9hZ2UgPSBjb3JyZWN0ZWRfcmVj
ZWl2ZWRfYWdlICsgcmVzcG9uc2VfZGVsYXk7CisJfSBlbHNlIHsKKwkJLyogSXMgdGhpcyBjb3Jy
ZWN0ID8gKi8KKwkJZW50cnktPmNvcnJlY3RlZF9pbml0aWFsX2FnZSA9IHRpbWUgKE5VTEwpOwor
CX0KKworCXJldHVybiBlbnRyeTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX2NhY2hl
X3dyaXRpbmdfZml4dHVyZV9mcmVlIChXZWJLaXRTb3VwQ2FjaGVXcml0aW5nRml4dHVyZSAqZml4
dHVyZSkKK3sKKwkvKiBGcmVlIGZpeHR1cmUuIEFuZCBkaXNjb25uZWN0IHNpZ25hbHMsIHdlIGRv
bid0IHdhbnQgdG8KKwkgICBsaXN0ZW4gdG8gbW9yZSBTb3VwTWVzc2FnZSBldmVudHMgYXMgd2Un
cmUgZmluaXNoZWQgd2l0aAorCSAgIHRoaXMgcmVzb3VyY2UgKi8KKwlpZiAoZ19zaWduYWxfaGFu
ZGxlcl9pc19jb25uZWN0ZWQgKGZpeHR1cmUtPm1zZywgZml4dHVyZS0+Z290X2NodW5rX2hhbmRs
ZXIpKQorCQlnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QgKGZpeHR1cmUtPm1zZywgZml4dHVy
ZS0+Z290X2NodW5rX2hhbmRsZXIpOworCWlmIChnX3NpZ25hbF9oYW5kbGVyX2lzX2Nvbm5lY3Rl
ZCAoZml4dHVyZS0+bXNnLCBmaXh0dXJlLT5nb3RfYm9keV9oYW5kbGVyKSkKKwkJZ19zaWduYWxf
aGFuZGxlcl9kaXNjb25uZWN0IChmaXh0dXJlLT5tc2csIGZpeHR1cmUtPmdvdF9ib2R5X2hhbmRs
ZXIpOworCWlmIChnX3NpZ25hbF9oYW5kbGVyX2lzX2Nvbm5lY3RlZCAoZml4dHVyZS0+bXNnLCBm
aXh0dXJlLT5yZXN0YXJ0ZWRfaGFuZGxlcikpCisJCWdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVj
dCAoZml4dHVyZS0+bXNnLCBmaXh0dXJlLT5yZXN0YXJ0ZWRfaGFuZGxlcik7CisJZ19vYmplY3Rf
dW5yZWYgKGZpeHR1cmUtPm1zZyk7CisJZ19vYmplY3RfdW5yZWYgKGZpeHR1cmUtPmNhY2hlKTsK
KwlnX3NsaWNlX2ZyZWUgKFdlYktpdFNvdXBDYWNoZVdyaXRpbmdGaXh0dXJlLCBmaXh0dXJlKTsK
K30KKworc3RhdGljIHZvaWQKK2Nsb3NlX3JlYWR5X2NiIChHT2JqZWN0ICpzb3VyY2UsIEdBc3lu
Y1Jlc3VsdCAqcmVzdWx0LCBXZWJLaXRTb3VwQ2FjaGVXcml0aW5nRml4dHVyZSAqZml4dHVyZSkK
K3sKKwlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkgPSBmaXh0dXJlLT5lbnRyeTsKKwlXZWJL
aXRTb3VwQ2FjaGUgKmNhY2hlID0gZml4dHVyZS0+Y2FjaGU7CisJR091dHB1dFN0cmVhbSAqc3Ry
ZWFtID0gR19PVVRQVVRfU1RSRUFNIChzb3VyY2UpOworCWdvZmZzZXQgY29udGVudF9sZW5ndGg7
CisKKwlnX3dhcm5faWZfZmFpbCAoZW50cnktPmVycm9yID09IE5VTEwpOworCisJLyogRklYTUU6
IHdoYXQgZG8gd2UgZG8gb24gZXJyb3IgPyAqLworCisJaWYgKHN0cmVhbSkgeworCQlnX291dHB1
dF9zdHJlYW1fY2xvc2VfZmluaXNoIChzdHJlYW0sIHJlc3VsdCwgTlVMTCk7CisJCWdfb2JqZWN0
X3VucmVmIChzdHJlYW0pOworCX0KKwllbnRyeS0+c3RyZWFtID0gTlVMTDsKKworCWNvbnRlbnRf
bGVuZ3RoID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2NvbnRlbnRfbGVuZ3RoIChlbnRyeS0+
aGVhZGVycyk7CisKKwkvKiBJZiB0aGUgcHJvY2VzcyB3YXMgY2FuY2VsbGVkLCB0aGVuIGRlbGV0
ZSB0aGUgZW50cnkgZnJvbQorCSAgIHRoZSBjYWNoZS4gRG8gaXQgYWxzbyBpZiB0aGUgc2l6ZSBv
ZiBhIGNodW5rZWQgcmVzb3VyY2UgaXMKKwkgICB0b28gbXVjaCBmb3IgdGhlIGNhY2hlICovCisJ
aWYgKGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkIChlbnRyeS0+Y2FuY2VsbGFibGUpKSB7CisJ
CWVudHJ5LT5kaXJ0eSA9IEZBTFNFOworCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9yZW1vdmUg
KGNhY2hlLCBlbnRyeSk7CisJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUgKGVudHJ5LCBU
UlVFKTsKKwkJZW50cnkgPSBOVUxMOworCX0gZWxzZSBpZiAoKHNvdXBfbWVzc2FnZV9oZWFkZXJz
X2dldF9lbmNvZGluZyAoZW50cnktPmhlYWRlcnMpID09IFNPVVBfRU5DT0RJTkdfQ0hVTktFRCkg
fHwKKwkJICAgZW50cnktPmxlbmd0aCAhPSBjb250ZW50X2xlbmd0aCkgeworCQkvKiogVHdvIG9w
dGlvbnMgaGVyZToKKwkJICoKKwkJICogMS4gImNodW5rZWQiIGRhdGEsIGVudHJ5IHdhcyB0ZW1w
b3JhcmlseSBhZGRlZCB0bworCQkgKiBjYWNoZSAoYXMgY29udGVudC1sZW5ndGggaXMgMCkgYW5k
IG5vdyB0aGF0IHdlIGhhdmUKKwkJICogdGhlIGFjdHVhbCBzaXplIHdlIGhhdmUgdG8gZXZhbHVh
dGUgaWYgd2Ugd2FudCBpdAorCQkgKiBpbiB0aGUgY2FjaGUgb3Igbm90CisJCSAqCisJCSAqIDIu
IENvbnRlbnQtTGVuZ3RoIGhhcyBhIGRpZmZlcmVudCB2YWx1ZSB0aGFuIGFjdHVhbAorCQkgKiBs
ZW5ndGgsIG1lYW5zIHRoYXQgdGhlIGNvbnRlbnQgd2FzIGVuY29kZWQgZm9yCisJCSAqIHRyYW5z
bWlzc2lvbiAodHlwaWNhbGx5IGNvbXByZXNzZWQpIGFuZCB0aHVzIHdlCisJCSAqIGhhdmUgdG8g
c3Vic3RyYWN0IHRoZSBjb250ZW50LWxlbmd0aCB2YWx1ZSB0aGF0IHdhcworCQkgKiBhZGRlZCB0
byB0aGUgY2FjaGUgYW5kIGFkZCB0aGUgdW5lbmNvZGVkIGxlbmd0aAorCQkgKiovCisJCWdpbnQg
bGVuZ3RoX3RvX2FkZCA9IGVudHJ5LT5sZW5ndGggLSBjb250ZW50X2xlbmd0aDsKKworCQkvKiBN
YWtlIHJvb20gaW4gY2FjaGUgaWYgbmVlZGVkICovCisJCWlmIChjYWNoZV9hY2NlcHRzX2VudHJp
ZXNfb2Zfc2l6ZSAoY2FjaGUsIGxlbmd0aF90b19hZGQpKSB7CisJCQltYWtlX3Jvb21fZm9yX25l
d19lbnRyeSAoY2FjaGUsIGxlbmd0aF90b19hZGQpOworCisJCQljYWNoZS0+cHJpdi0+c2l6ZSAr
PSBsZW5ndGhfdG9fYWRkOworCQl9IGVsc2UgeworCQkJZW50cnktPmRpcnR5ID0gRkFMU0U7CisJ
CQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9yZW1vdmUgKGNhY2hlLCBlbnRyeSk7CisJCQl3ZWJr
aXRfc291cF9jYWNoZV9lbnRyeV9mcmVlIChlbnRyeSwgVFJVRSk7CisJCQllbnRyeSA9IE5VTEw7
CisJCX0KKwl9CisKKwlpZiAoZW50cnkpIHsKKwkJLyogR2V0IHJpZCBvZiB0aGUgR1N0cmluZyBp
biBtZW1vcnkgZm9yIHRoZSByZXNvdXJjZSBub3cgKi8KKwkJaWYgKGVudHJ5LT5kYXRhKSB7CisJ
CQlnX3N0cmluZ19mcmVlIChlbnRyeS0+ZGF0YSwgVFJVRSk7CisJCQllbnRyeS0+ZGF0YSA9IE5V
TEw7CisJCX0KKworCQllbnRyeS0+ZGlydHkgPSBGQUxTRTsKKwkJZW50cnktPndyaXRpbmcgPSBG
QUxTRTsKKwkJZW50cnktPmdvdF9ib2R5ID0gRkFMU0U7CisJCWVudHJ5LT5wb3MgPSAwOworCisJ
CWdfb2JqZWN0X3VucmVmIChlbnRyeS0+Y2FuY2VsbGFibGUpOworCQllbnRyeS0+Y2FuY2VsbGFi
bGUgPSBOVUxMOworCX0KKworCWNhY2hlLT5wcml2LT5uX3BlbmRpbmctLTsKKworCS8qIEZyZWVz
ICovCisJd2Via2l0X3NvdXBfY2FjaGVfd3JpdGluZ19maXh0dXJlX2ZyZWUgKGZpeHR1cmUpOwor
fQorCitzdGF0aWMgdm9pZAord3JpdGVfcmVhZHlfY2IgKEdPYmplY3QgKnNvdXJjZSwgR0FzeW5j
UmVzdWx0ICpyZXN1bHQsIFdlYktpdFNvdXBDYWNoZVdyaXRpbmdGaXh0dXJlICpmaXh0dXJlKQor
eworCUdPdXRwdXRTdHJlYW0gKnN0cmVhbSA9IEdfT1VUUFVUX1NUUkVBTSAoc291cmNlKTsKKwlH
RXJyb3IgKmVycm9yID0gTlVMTDsKKwlnc3NpemUgd3JpdGVfc2l6ZTsKKwlXZWJLaXRTb3VwQ2Fj
aGVFbnRyeSAqZW50cnkgPSBmaXh0dXJlLT5lbnRyeTsKKworCWlmIChnX2NhbmNlbGxhYmxlX2lz
X2NhbmNlbGxlZCAoZW50cnktPmNhbmNlbGxhYmxlKSkgeworCQlnX291dHB1dF9zdHJlYW1fY2xv
c2VfYXN5bmMgKHN0cmVhbSwKKwkJCQkJICAgICBHX1BSSU9SSVRZX0xPVywKKwkJCQkJICAgICBl
bnRyeS0+Y2FuY2VsbGFibGUsCisJCQkJCSAgICAgKEdBc3luY1JlYWR5Q2FsbGJhY2spY2xvc2Vf
cmVhZHlfY2IsCisJCQkJCSAgICAgZml4dHVyZSk7CisJCXJldHVybjsKKwl9CisKKwl3cml0ZV9z
aXplID0gZ19vdXRwdXRfc3RyZWFtX3dyaXRlX2ZpbmlzaCAoc3RyZWFtLCByZXN1bHQsICZlcnJv
cik7CisJaWYgKHdyaXRlX3NpemUgPD0gMCB8fCBlcnJvcikgeworCQlpZiAoZXJyb3IpCisJCQll
bnRyeS0+ZXJyb3IgPSBlcnJvcjsKKwkJZ19vdXRwdXRfc3RyZWFtX2Nsb3NlX2FzeW5jIChzdHJl
YW0sCisJCQkJCSAgICAgR19QUklPUklUWV9MT1csCisJCQkJCSAgICAgZW50cnktPmNhbmNlbGxh
YmxlLAorCQkJCQkgICAgIChHQXN5bmNSZWFkeUNhbGxiYWNrKWNsb3NlX3JlYWR5X2NiLAorCQkJ
CQkgICAgIGZpeHR1cmUpOworCQkvKiBGSVhNRTogV2Ugc2hvdWxkIGNvbXBsZXRlbHkgc3RvcCBj
YWNoaW5nIHRoZQorCQkgICByZXNvdXJjZSBhdCB0aGlzIHBvaW50ICovCisJfSBlbHNlIHsKKwkJ
ZW50cnktPnBvcyArPSB3cml0ZV9zaXplOworCisJCS8qIEFyZSB3ZSBzdGlsbCB3cml0aW5nIGFu
ZCBpcyB0aGVyZSBuZXcgZGF0YSB0byB3cml0ZQorCQkgICBhbHJlYWR5ID8gKi8KKwkJaWYgKGVu
dHJ5LT5kYXRhICYmIGVudHJ5LT5wb3MgPCBlbnRyeS0+ZGF0YS0+bGVuKSB7CisJCQlnX291dHB1
dF9zdHJlYW1fd3JpdGVfYXN5bmMgKGVudHJ5LT5zdHJlYW0sCisJCQkJCQkgICAgIGVudHJ5LT5k
YXRhLT5zdHIgKyBlbnRyeS0+cG9zLAorCQkJCQkJICAgICBlbnRyeS0+ZGF0YS0+bGVuIC0gZW50
cnktPnBvcywKKwkJCQkJCSAgICAgR19QUklPUklUWV9MT1csCisJCQkJCQkgICAgIGVudHJ5LT5j
YW5jZWxsYWJsZSwKKwkJCQkJCSAgICAgKEdBc3luY1JlYWR5Q2FsbGJhY2spd3JpdGVfcmVhZHlf
Y2IsCisJCQkJCQkgICAgIGZpeHR1cmUpOworCQl9IGVsc2UgeworCQkJZW50cnktPndyaXRpbmcg
PSBGQUxTRTsKKworCQkJaWYgKGVudHJ5LT5nb3RfYm9keSkgeworCQkJCS8qIElmIHdlIGFscmVh
ZHkgcmVjZWl2ZWQgJ2dvdC1ib2R5JworCQkJCSAgIGFuZCB3ZSBoYXZlIHdyaXR0ZW4gYWxsIHRo
ZSBkYXRhLAorCQkJCSAgIHdlIGNhbiBjbG9zZSB0aGUgc3RyZWFtICovCisJCQkJZ19vdXRwdXRf
c3RyZWFtX2Nsb3NlX2FzeW5jIChlbnRyeS0+c3RyZWFtLAorCQkJCQkJCSAgICAgR19QUklPUklU
WV9MT1csCisJCQkJCQkJICAgICBlbnRyeS0+Y2FuY2VsbGFibGUsCisJCQkJCQkJICAgICAoR0Fz
eW5jUmVhZHlDYWxsYmFjayljbG9zZV9yZWFkeV9jYiwKKwkJCQkJCQkgICAgIGZpeHR1cmUpOwor
CQkJfQorCQl9CisJfQorfQorCitzdGF0aWMgdm9pZAorbXNnX2dvdF9jaHVua19jYiAoU291cE1l
c3NhZ2UgKm1zZywgU291cEJ1ZmZlciAqY2h1bmssIFdlYktpdFNvdXBDYWNoZVdyaXRpbmdGaXh0
dXJlICpmaXh0dXJlKQoreworCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSA9IGZpeHR1cmUt
PmVudHJ5OworCisJZ19yZXR1cm5faWZfZmFpbCAoY2h1bmstPmRhdGEgJiYgY2h1bmstPmxlbmd0
aCk7CisJZ19yZXR1cm5faWZfZmFpbCAoZW50cnkpOworCisJLyogSWdub3JlIHRoaXMgaWYgdGhl
IHdyaXRpbmcgb3IgYXBwZW5kaW5nIHdhcyBjYW5jZWxsZWQgKi8KKwlpZiAoIWdfY2FuY2VsbGFi
bGVfaXNfY2FuY2VsbGVkIChlbnRyeS0+Y2FuY2VsbGFibGUpKSB7CisJCWdfc3RyaW5nX2FwcGVu
ZF9sZW4gKGVudHJ5LT5kYXRhLCBjaHVuay0+ZGF0YSwgY2h1bmstPmxlbmd0aCk7CisJCWVudHJ5
LT5sZW5ndGggPSBlbnRyeS0+ZGF0YS0+bGVuOworCisJCWlmICghY2FjaGVfYWNjZXB0c19lbnRy
aWVzX29mX3NpemUgKGZpeHR1cmUtPmNhY2hlLCBlbnRyeS0+bGVuZ3RoKSkgeworCQkJLyogUXVp
Y2tseSBjYW5jZWwgdGhlIGNhY2hpbmcgb2YgdGhlIHJlc291cmNlICovCisJCQlnX2NhbmNlbGxh
YmxlX2NhbmNlbCAoZW50cnktPmNhbmNlbGxhYmxlKTsKKwkJfQorCX0KKworCS8qIEZJWE1FOiBy
ZW1vdmUgdGhlIGVycm9yIGNoZWNrIHdoZW4gd2UgY2FuY2VsIHRoZSBjYWNoaW5nIGF0CisJICAg
dGhlIGZpcnN0IHdyaXRlIGVycm9yICovCisJLyogT25seSB3cml0ZSBpZiB0aGUgZW50cnkgc3Ry
ZWFtIGlzIHJlYWR5ICovCisJaWYgKGVudHJ5LT53cml0aW5nID09IEZBTFNFICYmIGVudHJ5LT5l
cnJvciA9PSBOVUxMICYmIGVudHJ5LT5zdHJlYW0pIHsKKwkJR1N0cmluZyAqZGF0YSA9IGVudHJ5
LT5kYXRhOworCQllbnRyeS0+d3JpdGluZyA9IFRSVUU7CisJCWdfb3V0cHV0X3N0cmVhbV93cml0
ZV9hc3luYyAoZW50cnktPnN0cmVhbSwKKwkJCQkJICAgICBkYXRhLT5zdHIgKyBlbnRyeS0+cG9z
LAorCQkJCQkgICAgIGRhdGEtPmxlbiAtIGVudHJ5LT5wb3MsCisJCQkJCSAgICAgR19QUklPUklU
WV9MT1csCisJCQkJCSAgICAgZW50cnktPmNhbmNlbGxhYmxlLAorCQkJCQkgICAgIChHQXN5bmNS
ZWFkeUNhbGxiYWNrKXdyaXRlX3JlYWR5X2NiLAorCQkJCQkgICAgIGZpeHR1cmUpOworCX0KK30K
Kworc3RhdGljIHZvaWQKK21zZ19nb3RfYm9keV9jYiAoU291cE1lc3NhZ2UgKm1zZywgV2ViS2l0
U291cENhY2hlV3JpdGluZ0ZpeHR1cmUgKmZpeHR1cmUpCit7CisJV2ViS2l0U291cENhY2hlRW50
cnkgKmVudHJ5ID0gZml4dHVyZS0+ZW50cnk7CisJZ19yZXR1cm5faWZfZmFpbCAoZW50cnkpOwor
CisJZW50cnktPmdvdF9ib2R5ID0gVFJVRTsKKworCWlmICghZW50cnktPnN0cmVhbSAmJiBlbnRy
eS0+cG9zICE9IGVudHJ5LT5sZW5ndGgpCisJCS8qIFRoZSBzdHJlYW0gaXMgbm90IHJlYWR5IHRv
IGJlIHdyaXR0ZW4gYnV0IHdlIHN0aWxsCisJCSAgIGhhdmUgZGF0YSB0byB3cml0ZSwgd2UnbGwg
d3JpdGUgaXQgd2hlbiB0aGUgc3RyZWFtCisJCSAgIGlzIG9wZW5lZCBmb3Igd3JpdGluZyAqLwor
CQlyZXR1cm47CisKKworCWlmIChlbnRyeS0+cG9zICE9IGVudHJ5LT5sZW5ndGgpIHsKKwkJLyog
SWYgd2Ugc3RpbGwgaGF2ZSBkYXRhIHRvIHdyaXRlLCB3cml0ZSBpdCwKKwkJICAgd3JpdGVfcmVh
ZHlfY2Igd2lsbCBjbG9zZSB0aGUgc3RyZWFtICovCisJCWlmIChlbnRyeS0+d3JpdGluZyA9PSBG
QUxTRSAmJiBlbnRyeS0+ZXJyb3IgPT0gTlVMTCAmJiBlbnRyeS0+c3RyZWFtKSB7CisJCQlnX291
dHB1dF9zdHJlYW1fd3JpdGVfYXN5bmMgKGVudHJ5LT5zdHJlYW0sCisJCQkJCQkgICAgIGVudHJ5
LT5kYXRhLT5zdHIgKyBlbnRyeS0+cG9zLAorCQkJCQkJICAgICBlbnRyeS0+ZGF0YS0+bGVuIC0g
ZW50cnktPnBvcywKKwkJCQkJCSAgICAgR19QUklPUklUWV9MT1csCisJCQkJCQkgICAgIGVudHJ5
LT5jYW5jZWxsYWJsZSwKKwkJCQkJCSAgICAgKEdBc3luY1JlYWR5Q2FsbGJhY2spd3JpdGVfcmVh
ZHlfY2IsCisJCQkJCQkgICAgIGZpeHR1cmUpOworCQl9CisJCXJldHVybjsKKwl9CisKKwlpZiAo
ZW50cnktPnN0cmVhbSAmJiAhZW50cnktPndyaXRpbmcpCisJCWdfb3V0cHV0X3N0cmVhbV9jbG9z
ZV9hc3luYyAoZW50cnktPnN0cmVhbSwKKwkJCQkJICAgICBHX1BSSU9SSVRZX0xPVywKKwkJCQkJ
ICAgICBlbnRyeS0+Y2FuY2VsbGFibGUsCisJCQkJCSAgICAgKEdBc3luY1JlYWR5Q2FsbGJhY2sp
Y2xvc2VfcmVhZHlfY2IsCisJCQkJCSAgICAgZml4dHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVh
bgord2Via2l0X3NvdXBfY2FjaGVfZW50cnlfcmVtb3ZlIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hl
LCBXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkpCit7CisJR0xpc3QgKmxydV9pdGVtOworCisJ
LyogaWYgKGVudHJ5LT5kaXJ0eSAmJiAhZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQgKGVudHJ5
LT5jYW5jZWxsYWJsZSkpIHsgKi8KKwlpZiAoZW50cnktPmRpcnR5KSB7CisJCWdfY2FuY2VsbGFi
bGVfY2FuY2VsIChlbnRyeS0+Y2FuY2VsbGFibGUpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJ
Z19hc3NlcnQgKGdfbGlzdF9sZW5ndGggKGNhY2hlLT5wcml2LT5scnVfc3RhcnQpID09IGdfaGFz
aF90YWJsZV9zaXplIChjYWNoZS0+cHJpdi0+Y2FjaGUpKTsKKworCS8qIFJlbW92ZSBmcm9tIGNh
Y2hlICovCisJaWYgKCFnX2hhc2hfdGFibGVfcmVtb3ZlIChjYWNoZS0+cHJpdi0+Y2FjaGUsIGVu
dHJ5LT5rZXkpKQorCQlyZXR1cm4gRkFMU0U7CisKKwkvKiBSZW1vdmUgZnJvbSBMUlUgKi8KKwls
cnVfaXRlbSA9IGdfbGlzdF9maW5kIChjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0LCBlbnRyeSk7CisJ
Y2FjaGUtPnByaXYtPmxydV9zdGFydCA9IGdfbGlzdF9kZWxldGVfbGluayAoY2FjaGUtPnByaXYt
PmxydV9zdGFydCwgbHJ1X2l0ZW0pOworCisJLyogQWRqdXN0IGNhY2hlIHNpemUgKi8KKwljYWNo
ZS0+cHJpdi0+c2l6ZSAtPSBlbnRyeS0+bGVuZ3RoOworCisJZ19hc3NlcnQgKGdfbGlzdF9sZW5n
dGggKGNhY2hlLT5wcml2LT5scnVfc3RhcnQpID09IGdfaGFzaF90YWJsZV9zaXplIChjYWNoZS0+
cHJpdi0+Y2FjaGUpKTsKKworCXJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2ludAorbHJ1X2Nv
bXBhcmVfZnVuYyAoZ2NvbnN0cG9pbnRlciBhLCBnY29uc3Rwb2ludGVyIGIpCit7CisJV2ViS2l0
U291cENhY2hlRW50cnkgKmVudHJ5X2EgPSAoV2ViS2l0U291cENhY2hlRW50cnkgKilhOworCVdl
YktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeV9iID0gKFdlYktpdFNvdXBDYWNoZUVudHJ5ICopYjsK
KworCS8qKiBUaGUgcmF0aW9uYWxlIG9mIHRoaXMgc29ydGluZyBmdW5jIGlzCisJICoKKwkgKiAx
LiBzb3J0IGJ5IGhpdHMgLT4gTFJVIGFsZ29yaXRobSwgdGhlbgorCSAqCisJICogMi4gc29ydCBi
eSBmcmVzaG5lc3MgbGlmZXRpbWUsIHdlIGJldHRlciBkaXNjYXJkIGZpcnN0CisJICogZW50cmll
cyB0aGF0IGFyZSBjbG9zZSB0byBleHBpcmUKKwkgKgorCSAqIDMuIHNvcnQgYnkgc2l6ZSwgcmVw
bGFjZSBmaXJzdCBzbWFsbCBzaXplIHJlc291cmNlcyBhcyB0aGV5CisJICogYXJlIGNoZWFwZXIg
dG8gZG93bmxvYWQKKwkgKiovCisKKwkvKiBTb3J0IGJ5IGhpdHMgKi8KKwlpZiAoZW50cnlfYS0+
aGl0cyAhPSBlbnRyeV9iLT5oaXRzKQorCQlyZXR1cm4gZW50cnlfYS0+aGl0cyAtIGVudHJ5X2It
PmhpdHM7CisKKwkvKiBTb3J0IGJ5IGZyZXNobmVzc19saWZldGltZSAqLworCWlmIChlbnRyeV9h
LT5mcmVzaG5lc3NfbGlmZXRpbWUgIT0gZW50cnlfYi0+ZnJlc2huZXNzX2xpZmV0aW1lKQorCQly
ZXR1cm4gZW50cnlfYS0+ZnJlc2huZXNzX2xpZmV0aW1lIC0gZW50cnlfYi0+ZnJlc2huZXNzX2xp
ZmV0aW1lOworCisJLyogU29ydCBieSBzaXplICovCisJcmV0dXJuIGVudHJ5X2EtPmxlbmd0aCAt
IGVudHJ5X2ItPmxlbmd0aDsKK30KKworc3RhdGljIGdib29sZWFuCitjYWNoZV9hY2NlcHRzX2Vu
dHJpZXNfb2Zfc2l6ZSAoV2ViS2l0U291cENhY2hlICpjYWNoZSwgZ3VpbnQgbGVuZ3RoX3RvX2Fk
ZCkKK3sKKwkvKiBXZSBjb3VsZCBhZGQgaGVyZSBzb21lIG1vcmUgaGV1cmlzdGljcy4gVE9ETzog
cmV2aWV3IGhvdworCSAgIHRoaXMgaXMgZG9uZSBieSBvdGhlciBIVFRQIGNhY2hlcyAqLworCisJ
cmV0dXJuIGxlbmd0aF90b19hZGQgPD0gY2FjaGUtPnByaXYtPm1heF9lbnRyeV9kYXRhX3NpemU7
Cit9CisKK3N0YXRpYyB2b2lkCittYWtlX3Jvb21fZm9yX25ld19lbnRyeSAoV2ViS2l0U291cENh
Y2hlICpjYWNoZSwgZ3VpbnQgbGVuZ3RoX3RvX2FkZCkKK3sKKwlHTGlzdCAqbHJ1X2VudHJ5ID0g
Y2FjaGUtPnByaXYtPmxydV9zdGFydDsKKworCS8qIENoZWNrIHRoYXQgdGhlcmUgaXMgZW5vdWdo
IHJvb20gZm9yIHRoZSBuZXcgZW50cnkuIFRoaXMgaXMKKwkgICBhbiBhcHByb3hpbWF0aW9uIGFz
IHdlJ3JlIG5vdCB3b3JraW5nIG91dCB0aGUgc2l6ZSBvZiB0aGUKKwkgICBjYWNoZSBmaWxlIG9y
IHRoZSBzaXplIG9mIHRoZSBoZWFkZXJzIGZvciBwZXJmb3JtYW5jZQorCSAgIHJlYXNvbnMuIFRP
RE86IGNoZWNrIGlmIHRoYXQgd291bGQgYmUgcmVhbGx5IHRoYXQgZXhwZW5zaXZlICovCisKKwl3
aGlsZSAobHJ1X2VudHJ5ICYmCisJICAgICAgIChsZW5ndGhfdG9fYWRkICsgY2FjaGUtPnByaXYt
PnNpemUgPiBjYWNoZS0+cHJpdi0+bWF4X3NpemUpKSB7CisJCVdlYktpdFNvdXBDYWNoZUVudHJ5
ICpvbGRfZW50cnkgPSAoV2ViS2l0U291cENhY2hlRW50cnkgKilscnVfZW50cnktPmRhdGE7CisK
KwkJLyogRGlzY2FyZCBlbnRyaWVzLiBPbmNlIGNhbmNlbGxlZCByZXNvdXJjZXMgd2lsbCBiZQor
CQkgKiBmcmVlZCBpbiBjbG9zZV9yZWFkeV9jYgorCQkgKi8KKwkJaWYgKHdlYmtpdF9zb3VwX2Nh
Y2hlX2VudHJ5X3JlbW92ZSAoY2FjaGUsIG9sZF9lbnRyeSkpIHsKKwkJCXdlYmtpdF9zb3VwX2Nh
Y2hlX2VudHJ5X2ZyZWUgKG9sZF9lbnRyeSwgVFJVRSk7CisJCQlscnVfZW50cnkgPSBjYWNoZS0+
cHJpdi0+bHJ1X3N0YXJ0OworCQl9IGVsc2UKKwkJCWxydV9lbnRyeSA9IGdfbGlzdF9uZXh0IChs
cnVfZW50cnkpOworCX0KK30KKworc3RhdGljIGdib29sZWFuCit3ZWJraXRfc291cF9jYWNoZV9l
bnRyeV9pbnNlcnRfYnlfa2V5IChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLAorCQkJCSAgICAgICBj
b25zdCBjaGFyICprZXksCisJCQkJICAgICAgIFdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSwK
KwkJCQkgICAgICAgZ2Jvb2xlYW4gc29ydCkKK3sKKwlndWludCBsZW5ndGhfdG9fYWRkID0gMDsK
KworCWlmIChzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfZW5jb2RpbmcgKGVudHJ5LT5oZWFkZXJz
KSAhPSBTT1VQX0VOQ09ESU5HX0NIVU5LRUQpCisJCWxlbmd0aF90b19hZGQgPSBzb3VwX21lc3Nh
Z2VfaGVhZGVyc19nZXRfY29udGVudF9sZW5ndGggKGVudHJ5LT5oZWFkZXJzKTsKKworCS8qIENo
ZWNrIGlmIHdlIGFyZSBnb2luZyB0byBzdG9yZSB0aGUgcmVzb3VyY2UgZGVwZW5kaW5nIG9uIGl0
cyBzaXplICovCisJaWYgKGxlbmd0aF90b19hZGQpIHsKKwkJaWYgKCFjYWNoZV9hY2NlcHRzX2Vu
dHJpZXNfb2Zfc2l6ZSAoY2FjaGUsIGxlbmd0aF90b19hZGQpKQorCQkJcmV0dXJuIEZBTFNFOwor
CisJCS8qIE1ha2Ugcm9vbSBmb3IgbmV3IGVudHJ5IGlmIG5lZWRlZCAqLworCQltYWtlX3Jvb21f
Zm9yX25ld19lbnRyeSAoY2FjaGUsIGxlbmd0aF90b19hZGQpOworCX0KKworCWdfaGFzaF90YWJs
ZV9pbnNlcnQgKGNhY2hlLT5wcml2LT5jYWNoZSwgZ19zdHJkdXAgKGtleSksIGVudHJ5KTsKKwor
CS8qIENvbXB1dGUgbmV3IGNhY2hlIHNpemUgKi8KKwljYWNoZS0+cHJpdi0+c2l6ZSArPSBsZW5n
dGhfdG9fYWRkOworCisJLyogVXBkYXRlIExSVSAqLworCWlmIChzb3J0KQorCQljYWNoZS0+cHJp
di0+bHJ1X3N0YXJ0ID0gZ19saXN0X2luc2VydF9zb3J0ZWQgKGNhY2hlLT5wcml2LT5scnVfc3Rh
cnQsIGVudHJ5LCBscnVfY29tcGFyZV9mdW5jKTsKKwllbHNlCisJCWNhY2hlLT5wcml2LT5scnVf
c3RhcnQgPSBnX2xpc3RfcHJlcGVuZCAoY2FjaGUtPnByaXYtPmxydV9zdGFydCwgZW50cnkpOwor
CisJZ19hc3NlcnQgKGdfbGlzdF9sZW5ndGggKGNhY2hlLT5wcml2LT5scnVfc3RhcnQpID09IGdf
aGFzaF90YWJsZV9zaXplIChjYWNoZS0+cHJpdi0+Y2FjaGUpKTsKKworCXJldHVybiBUUlVFOwor
fQorCitzdGF0aWMgdm9pZAorbXNnX3Jlc3RhcnRlZF9jYiAoU291cE1lc3NhZ2UgKm1zZywgV2Vi
S2l0U291cENhY2hlRW50cnkgKmVudHJ5KQoreworCS8qIEZJWE1FOiBXaGF0IHNob3VsZCB3ZSBk
byBoZXJlIGV4YWN0bHk/ICovCit9CisKK3N0YXRpYyB2b2lkCithcHBlbmRfdG9fcmVhZHlfY2Ig
KEdPYmplY3QgKnNvdXJjZSwgR0FzeW5jUmVzdWx0ICpyZXN1bHQsIFdlYktpdFNvdXBDYWNoZVdy
aXRpbmdGaXh0dXJlICpmaXh0dXJlKQoreworCUdGaWxlICpmaWxlID0gKEdGaWxlICopc291cmNl
OworCUdPdXRwdXRTdHJlYW0gKnN0cmVhbTsKKwlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkg
PSBmaXh0dXJlLT5lbnRyeTsKKworCXN0cmVhbSA9IChHT3V0cHV0U3RyZWFtICopZ19maWxlX2Fw
cGVuZF90b19maW5pc2ggKGZpbGUsIHJlc3VsdCwgJmVudHJ5LT5lcnJvcik7CisKKwlpZiAoZ19j
YW5jZWxsYWJsZV9pc19jYW5jZWxsZWQgKGVudHJ5LT5jYW5jZWxsYWJsZSkgfHwgZW50cnktPmVy
cm9yKSB7CisJCWZpeHR1cmUtPmNhY2hlLT5wcml2LT5uX3BlbmRpbmctLTsKKwkJZW50cnktPmRp
cnR5ID0gRkFMU0U7CisJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X3JlbW92ZSAoZml4dHVyZS0+
Y2FjaGUsIGVudHJ5KTsKKwkJd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfZnJlZSAoZW50cnksIFRS
VUUpOworCQl3ZWJraXRfc291cF9jYWNoZV93cml0aW5nX2ZpeHR1cmVfZnJlZSAoZml4dHVyZSk7
CisJCXJldHVybjsKKwl9CisKKwllbnRyeS0+c3RyZWFtID0gZ19vYmplY3RfcmVmIChzdHJlYW0p
OworCWdfb2JqZWN0X3VucmVmIChmaWxlKTsKKworCS8qIElmIHdlIGFscmVhZHkgZ290IGFsbCB0
aGUgZGF0YSB3ZSBoYXZlIHRvIGluaXRpYXRlIHRoZQorCSAgIHdyaXRpbmcgaGVyZSwgc2luY2Ug
d2Ugd29uJ3QgZ2V0IG1vcmUgJ2dvdC1jaHVuaycKKwkgICBzaWduYWxzICovCisJaWYgKGVudHJ5
LT5nb3RfYm9keSkgeworCQlHU3RyaW5nICpkYXRhID0gZW50cnktPmRhdGE7CisKKwkJLyogSXQg
Y291bGQgaGFwcGVuIHRoYXQgcmVhZGluZyB0aGUgZGF0YSBmcm9tIHNlcnZlcgorCQkgICB3YXMg
Y29tcGxldGVkIGJlZm9yZSB0aGlzIGhhcHBlbnMuIEluIHRoYXQgY2FzZQorCQkgICB0aGVyZSBp
cyBubyBkYXRhICovCisJCWlmIChkYXRhKSB7CisJCQllbnRyeS0+d3JpdGluZyA9IFRSVUU7CisJ
CQlnX291dHB1dF9zdHJlYW1fd3JpdGVfYXN5bmMgKGVudHJ5LT5zdHJlYW0sCisJCQkJCQkgICAg
IGRhdGEtPnN0ciArIGVudHJ5LT5wb3MsCisJCQkJCQkgICAgIGRhdGEtPmxlbiAtIGVudHJ5LT5w
b3MsCisJCQkJCQkgICAgIEdfUFJJT1JJVFlfTE9XLAorCQkJCQkJICAgICBlbnRyeS0+Y2FuY2Vs
bGFibGUsCisJCQkJCQkgICAgIChHQXN5bmNSZWFkeUNhbGxiYWNrKXdyaXRlX3JlYWR5X2NiLAor
CQkJCQkJICAgICBmaXh0dXJlKTsKKwkJfQorCX0KK30KKwordHlwZWRlZiBzdHJ1Y3QgeworCXRp
bWVfdCByZXF1ZXN0X3RpbWU7CisJU291cFNlc3Npb25GZWF0dXJlICpmZWF0dXJlOworCWd1bG9u
ZyBnb3RfaGVhZGVyc19oYW5kbGVyOworfSBSZXF1ZXN0SGVscGVyOworCitzdGF0aWMgdm9pZAor
bXNnX2dvdF9oZWFkZXJzX2NiIChTb3VwTWVzc2FnZSAqbXNnLCBncG9pbnRlciB1c2VyX2RhdGEp
Cit7CisJV2ViS2l0U291cENhY2hlICpjYWNoZTsKKwlXZWJLaXRTb3VwQ2FjaGVhYmlsaXR5IGNh
Y2hlYWJsZTsKKwlSZXF1ZXN0SGVscGVyICpoZWxwZXI7CisJdGltZV90IHJlcXVlc3RfdGltZSwg
cmVzcG9uc2VfdGltZTsKKworCXJlc3BvbnNlX3RpbWUgPSB0aW1lIChOVUxMKTsKKworCWhlbHBl
ciA9IChSZXF1ZXN0SGVscGVyICopdXNlcl9kYXRhOworCWNhY2hlID0gV0VCS0lUX1NPVVBfQ0FD
SEUgKGhlbHBlci0+ZmVhdHVyZSk7CisJcmVxdWVzdF90aW1lID0gaGVscGVyLT5yZXF1ZXN0X3Rp
bWU7CisJZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jIChtc2csIG1zZ19nb3Rf
aGVhZGVyc19jYiwgdXNlcl9kYXRhKTsKKwlnX3NsaWNlX2ZyZWUgKFJlcXVlc3RIZWxwZXIsIGhl
bHBlcik7CisKKwljYWNoZWFibGUgPSB3ZWJraXRfc291cF9jYWNoZV9nZXRfY2FjaGVhYmlsaXR5
IChjYWNoZSwgbXNnKTsKKworCWlmIChjYWNoZWFibGUgJiBXRUJLSVRfU09VUF9DQUNIRV9DQUNI
RUFCTEUpIHsKKwkJV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5OworCQljaGFyICprZXk7CisJ
CUdGaWxlICpmaWxlOworCQlXZWJLaXRTb3VwQ2FjaGVXcml0aW5nRml4dHVyZSAqZml4dHVyZTsK
KworCQkvKiBDaGVjayBpZiB3ZSBhcmUgYWxyZWFkeSBjYWNoaW5nIHRoaXMgcmVzb3VyY2UgKi8K
KwkJa2V5ID0gc291cF9tZXNzYWdlX2dldF9jYWNoZV9rZXkgKG1zZyk7CisJCWVudHJ5ID0gZ19o
YXNoX3RhYmxlX2xvb2t1cCAoY2FjaGUtPnByaXYtPmNhY2hlLCBrZXkpOworCQlnX2ZyZWUgKGtl
eSk7CisKKwkJaWYgKGVudHJ5ICYmIGVudHJ5LT5kaXJ0eSkKKwkJCXJldHVybjsKKworCQkvKiBD
cmVhdGUgYSBuZXcgZW50cnksIGRlbGV0aW5nIGFueSBvbGQgb25lIGlmIHByZXNlbnQgKi8KKwkJ
aWYgKGVudHJ5KSB7CisJCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9yZW1vdmUgKGNhY2hlLCBl
bnRyeSk7CisJCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9mcmVlIChlbnRyeSwgVFJVRSk7CisJ
CX0KKworCQllbnRyeSA9IHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X25ldyAoY2FjaGUsIG1zZywg
cmVxdWVzdF90aW1lLCByZXNwb25zZV90aW1lKTsKKwkJZW50cnktPmhpdHMgPSAxOworCisJCS8q
IERvIG5vdCBjb250aW51ZSBpZiBpdCBjYW4gbm90IGJlIHN0b3JlZCAqLworCQlpZiAoIXdlYmtp
dF9zb3VwX2NhY2hlX2VudHJ5X2luc2VydF9ieV9rZXkgKGNhY2hlLCAoY29uc3QgZ2NoYXIgKill
bnRyeS0+a2V5LCBlbnRyeSwgVFJVRSkpIHsKKwkJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2Zy
ZWUgKGVudHJ5LCBUUlVFKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWZpeHR1cmUgPSBnX3NsaWNl
X25ldzAgKFdlYktpdFNvdXBDYWNoZVdyaXRpbmdGaXh0dXJlKTsKKwkJZml4dHVyZS0+Y2FjaGUg
PSBnX29iamVjdF9yZWYgKGNhY2hlKTsKKwkJZml4dHVyZS0+ZW50cnkgPSBlbnRyeTsKKwkJZml4
dHVyZS0+bXNnID0gZ19vYmplY3RfcmVmIChtc2cpOworCisJCS8qIFdlIGNvbm5lY3Qgbm93IHRv
IHRoZXNlIHNpZ25hbHMgYW5kIGJ1ZmZlciB0aGUgZGF0YQorCQkgICBpZiBpdCBjb21lcyBiZWZv
cmUgdGhlIGZpbGUgaXMgcmVhZHkgZm9yIHdyaXRpbmcgKi8KKwkJZml4dHVyZS0+Z290X2NodW5r
X2hhbmRsZXIgPQorCQkJZ19zaWduYWxfY29ubmVjdCAobXNnLCAiZ290LWNodW5rIiwgR19DQUxM
QkFDSyAobXNnX2dvdF9jaHVua19jYiksIGZpeHR1cmUpOworCQlmaXh0dXJlLT5nb3RfYm9keV9o
YW5kbGVyID0KKwkJCWdfc2lnbmFsX2Nvbm5lY3QgKG1zZywgImdvdC1ib2R5IiwgR19DQUxMQkFD
SyAobXNnX2dvdF9ib2R5X2NiKSwgZml4dHVyZSk7CisJCWZpeHR1cmUtPnJlc3RhcnRlZF9oYW5k
bGVyID0KKwkJCWdfc2lnbmFsX2Nvbm5lY3QgKG1zZywgInJlc3RhcnRlZCIsIEdfQ0FMTEJBQ0sg
KG1zZ19yZXN0YXJ0ZWRfY2IpLCBlbnRyeSk7CisKKwkJLyogUHJlcGFyZSBlbnRyeSAqLworCQlm
aWxlID0gZ19maWxlX25ld19mb3JfcGF0aCAoZW50cnktPmZpbGVuYW1lKTsKKwkJY2FjaGUtPnBy
aXYtPm5fcGVuZGluZysrOworCisJCWVudHJ5LT5kaXJ0eSA9IFRSVUU7CisJCWVudHJ5LT5jYW5j
ZWxsYWJsZSA9IGdfY2FuY2VsbGFibGVfbmV3ICgpOworCQlnX2ZpbGVfYXBwZW5kX3RvX2FzeW5j
IChmaWxlLCAwLAorCQkJCQlHX1BSSU9SSVRZX0xPVywgZW50cnktPmNhbmNlbGxhYmxlLAorCQkJ
CQkoR0FzeW5jUmVhZHlDYWxsYmFjaylhcHBlbmRfdG9fcmVhZHlfY2IsCisJCQkJCWZpeHR1cmUp
OworCX0gZWxzZSBpZiAoY2FjaGVhYmxlICYgV0VCS0lUX1NPVVBfQ0FDSEVfSU5WQUxJREFURVMp
IHsKKwkJY2hhciAqa2V5OworCQlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnk7CisKKwkJa2V5
ID0gc291cF9tZXNzYWdlX2dldF9jYWNoZV9rZXkgKG1zZyk7CisJCWVudHJ5ID0gZ19oYXNoX3Rh
YmxlX2xvb2t1cCAoY2FjaGUtPnByaXYtPmNhY2hlLCBrZXkpOworCQlnX2ZyZWUgKGtleSk7CisK
KwkJaWYgKGVudHJ5KSB7CisJCQlpZiAod2Via2l0X3NvdXBfY2FjaGVfZW50cnlfcmVtb3ZlIChj
YWNoZSwgZW50cnkpKQorCQkJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUgKGVudHJ5LCBU
UlVFKTsKKwkJfQorCX0gZWxzZSBpZiAoY2FjaGVhYmxlICYgV0VCS0lUX1NPVVBfQ0FDSEVfVkFM
SURBVEVTKSB7CisJCWNoYXIgKmtleTsKKwkJV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5Owor
CisJCWtleSA9IHNvdXBfbWVzc2FnZV9nZXRfY2FjaGVfa2V5IChtc2cpOworCQllbnRyeSA9IGdf
aGFzaF90YWJsZV9sb29rdXAgKGNhY2hlLT5wcml2LT5jYWNoZSwga2V5KTsKKwkJZ19mcmVlIChr
ZXkpOworCisJCWdfcmV0dXJuX2lmX2ZhaWwgKGVudHJ5KTsKKworCQllbnRyeS0+YmVpbmdfdmFs
aWRhdGVkID0gRkFMU0U7CisKKwkJLyogV2UgdXBkYXRlIHRoZSBoZWFkZXJzIG9mIHRoZSBleGlz
dGluZyBjYWNoZSBpdGVtLAorCQkgICBwbHVzIGl0cyBhZ2UgKi8KKwkJc291cF9tZXNzYWdlX2hl
YWRlcnNfZm9yZWFjaCAobXNnLT5yZXNwb25zZV9oZWFkZXJzLAorCQkJCQkgICAgICAoU291cE1l
c3NhZ2VIZWFkZXJzRm9yZWFjaEZ1bmMpdXBkYXRlX2hlYWRlcnMsCisJCQkJCSAgICAgIGVudHJ5
LT5oZWFkZXJzKTsKKwkJd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfc2V0X2ZyZXNobmVzcyAoZW50
cnksIG1zZywgY2FjaGUpOworCX0KK30KKworR0lucHV0U3RyZWFtICoKK3dlYmtpdF9zb3VwX2Nh
Y2hlX3NlbmRfcmVzcG9uc2UgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsIFNvdXBNZXNzYWdlICpt
c2cpCit7CisJY2hhciAqa2V5OworCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeTsKKwljaGFy
ICpjdXJyZW50X2FnZTsKKwlHSW5wdXRTdHJlYW0gKnN0cmVhbSA9IE5VTEw7CisJR0ZpbGUgKmZp
bGU7CisKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoV0VCS0lUX0lTX1NPVVBfQ0FDSEUgKGNhY2hl
KSwgTlVMTCk7CisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFNPVVBfSVNfTUVTU0FHRSAobXNnKSwg
TlVMTCk7CisKKwlrZXkgPSBzb3VwX21lc3NhZ2VfZ2V0X2NhY2hlX2tleSAobXNnKTsKKwllbnRy
eSA9IGdfaGFzaF90YWJsZV9sb29rdXAgKGNhY2hlLT5wcml2LT5jYWNoZSwga2V5KTsKKwlnX3Jl
dHVybl92YWxfaWZfZmFpbCAoZW50cnksIE5VTEwpOworCisJLyogSWYgd2UgYXJlIHRvbGQgdG8g
c2VuZCBhIHJlc3BvbnNlIGZyb20gY2FjaGUgYW55IHZhbGlkYXRpb24KKwkgICBpbiBjb3Vyc2Ug
aXMgb3ZlciBieSBub3cgKi8KKwllbnRyeS0+YmVpbmdfdmFsaWRhdGVkID0gRkFMU0U7CisKKwkv
KiBIZWFkZXJzICovCisJc291cF9tZXNzYWdlX2hlYWRlcnNfZm9yZWFjaCAoZW50cnktPmhlYWRl
cnMsCisJCQkJICAgICAgKFNvdXBNZXNzYWdlSGVhZGVyc0ZvcmVhY2hGdW5jKXVwZGF0ZV9oZWFk
ZXJzLAorCQkJCSAgICAgIG1zZy0+cmVzcG9uc2VfaGVhZGVycyk7CisKKwkvKiBBZGQgJ0FnZScg
aGVhZGVyIHdpdGggdGhlIGN1cnJlbnQgYWdlICovCisJY3VycmVudF9hZ2UgPSBnX3N0cmR1cF9w
cmludGYgKCIlZCIsIHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2dldF9jdXJyZW50X2FnZSAoZW50
cnkpKTsKKwlzb3VwX21lc3NhZ2VfaGVhZGVyc19yZXBsYWNlIChtc2ctPnJlc3BvbnNlX2hlYWRl
cnMsCisJCQkJICAgICAgIkFnZSIsCisJCQkJICAgICAgY3VycmVudF9hZ2UpOworCWdfZnJlZSAo
Y3VycmVudF9hZ2UpOworCisJLyogVE9ETzogdGhlIG9yaWdpbmFsIGlkZWEgd2FzIHRvIHNhdmUg
cmVhZHMsIGJ1dCBjdXJyZW50IGNvZGUKKwkgICBhc3N1bWVzIHRoYXQgYSBzdHJlYW0gaXMgYWx3
YXlzIHJldHVybmVkLiBOZWVkIHRvIHJlYWNoCisJICAgc29tZSBhZ3JlZW1lbnQgaGVyZS4gQWxz
byB3ZSBoYXZlIHRvIGhhbmRsZSB0aGUgc2l0dWF0aW9uCisJICAgd2VyZSB0aGUgZmlsZSB3YXMg
bm8gbG9uZ2VyIHRoZXJlIChmb3IgZXhhbXBsZSBmaWxlcworCSAgIHJlbW92ZWQgd2l0aG91dCBu
b3RpZnlpbmcgdGhlIGNhY2hlICovCisJZmlsZSA9IGdfZmlsZV9uZXdfZm9yX3BhdGggKGVudHJ5
LT5maWxlbmFtZSk7CisJc3RyZWFtID0gKEdJbnB1dFN0cmVhbSAqKWdfZmlsZV9yZWFkIChmaWxl
LCBOVUxMLCBOVUxMKTsKKworCXJldHVybiBzdHJlYW07Cit9CisKK3N0YXRpYyB2b2lkCityZXF1
ZXN0X3N0YXJ0ZWQgKFNvdXBTZXNzaW9uRmVhdHVyZSAqZmVhdHVyZSwgU291cFNlc3Npb24gKnNl
c3Npb24sCisJCSBTb3VwTWVzc2FnZSAqbXNnLCBTb3VwU29ja2V0ICpzb2NrZXQpCit7CisJUmVx
dWVzdEhlbHBlciAqaGVscGVyID0gZ19zbGljZV9uZXcwIChSZXF1ZXN0SGVscGVyKTsKKwloZWxw
ZXItPnJlcXVlc3RfdGltZSA9IHRpbWUgKE5VTEwpOworCWhlbHBlci0+ZmVhdHVyZSA9IGZlYXR1
cmU7CisJaGVscGVyLT5nb3RfaGVhZGVyc19oYW5kbGVyID0gZ19zaWduYWxfY29ubmVjdCAobXNn
LCAiZ290LWhlYWRlcnMiLAorCQkJCQkJCUdfQ0FMTEJBQ0sgKG1zZ19nb3RfaGVhZGVyc19jYiks
CisJCQkJCQkJaGVscGVyKTsKK30KKworc3RhdGljIHZvaWQKK2F0dGFjaCAoU291cFNlc3Npb25G
ZWF0dXJlICpmZWF0dXJlLCBTb3VwU2Vzc2lvbiAqc2Vzc2lvbikKK3sKKwlXZWJLaXRTb3VwQ2Fj
aGUgKmNhY2hlID0gV0VCS0lUX1NPVVBfQ0FDSEUgKGZlYXR1cmUpOworCWNhY2hlLT5wcml2LT5z
ZXNzaW9uID0gc2Vzc2lvbjsKKworCXdlYmtpdF9zb3VwX2NhY2hlX2RlZmF1bHRfZmVhdHVyZV9p
bnRlcmZhY2UtPmF0dGFjaCAoZmVhdHVyZSwgc2Vzc2lvbik7Cit9CisKK3N0YXRpYyB2b2lkCit3
ZWJraXRfc291cF9jYWNoZV9zZXNzaW9uX2ZlYXR1cmVfaW5pdCAoU291cFNlc3Npb25GZWF0dXJl
SW50ZXJmYWNlICpmZWF0dXJlX2ludGVyZmFjZSwKKwkJCQkJZ3BvaW50ZXIgaW50ZXJmYWNlX2Rh
dGEpCit7CisJd2Via2l0X3NvdXBfY2FjaGVfZGVmYXVsdF9mZWF0dXJlX2ludGVyZmFjZSA9CisJ
CWdfdHlwZV9kZWZhdWx0X2ludGVyZmFjZV9wZWVrIChTT1VQX1RZUEVfU0VTU0lPTl9GRUFUVVJF
KTsKKworCWZlYXR1cmVfaW50ZXJmYWNlLT5hdHRhY2ggPSBhdHRhY2g7CisJZmVhdHVyZV9pbnRl
cmZhY2UtPnJlcXVlc3Rfc3RhcnRlZCA9IHJlcXVlc3Rfc3RhcnRlZDsKK30KKworc3RhdGljIHZv
aWQKK3dlYmtpdF9zb3VwX2NhY2hlX2luaXQgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUpCit7CisJ
V2ViS2l0U291cENhY2hlUHJpdmF0ZSAqcHJpdjsKKworCXByaXYgPSBjYWNoZS0+cHJpdiA9IFdF
QktJVF9TT1VQX0NBQ0hFX0dFVF9QUklWQVRFIChjYWNoZSk7CisKKwlwcml2LT5jYWNoZSA9IGdf
aGFzaF90YWJsZV9uZXdfZnVsbCAoZ19zdHJfaGFzaCwKKwkJCQkJICAgICBnX3N0cl9lcXVhbCwK
KwkJCQkJICAgICAoR0Rlc3Ryb3lOb3RpZnkpZ19mcmVlLAorCQkJCQkgICAgIE5VTEwpOworCisJ
LyogTFJVICovCisJcHJpdi0+bHJ1X3N0YXJ0ID0gTlVMTDsKKworCS8qICovCisJcHJpdi0+bl9w
ZW5kaW5nID0gMDsKKworCS8qIENhY2hlIHNpemUgKi8KKwlwcml2LT5tYXhfc2l6ZSA9IERFRkFV
TFRfTUFYX1NJWkU7CisJcHJpdi0+bWF4X2VudHJ5X2RhdGFfc2l6ZSA9IHByaXYtPm1heF9zaXpl
IC8gTUFYX0VOVFJZX0RBVEFfUEVSQ0VOVEFHRTsKKwlwcml2LT5zaXplID0gMDsKK30KKworc3Rh
dGljIHZvaWQKK3JlbW92ZV9jYWNoZV9pdGVtIChncG9pbnRlciBrZXksCisJCSAgIGdwb2ludGVy
IHZhbHVlLAorCQkgICBXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKQoreworCVdlYktpdFNvdXBDYWNo
ZUVudHJ5ICplbnRyeSA9IGdfaGFzaF90YWJsZV9sb29rdXAgKGNhY2hlLT5wcml2LT5jYWNoZSwg
KGNvbnN0IGdjaGFyICopa2V5KTsKKwlpZiAod2Via2l0X3NvdXBfY2FjaGVfZW50cnlfcmVtb3Zl
IChjYWNoZSwgZW50cnkpKQorCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9mcmVlIChlbnRyeSwg
RkFMU0UpOworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfY2FjaGVfZmluYWxpemUgKEdP
YmplY3QgKm9iamVjdCkKK3sKKwlXZWJLaXRTb3VwQ2FjaGVQcml2YXRlICpwcml2OworCisJcHJp
diA9IFdFQktJVF9TT1VQX0NBQ0hFIChvYmplY3QpLT5wcml2OworCisJZ19oYXNoX3RhYmxlX2Zv
cmVhY2ggKHByaXYtPmNhY2hlLCAoR0hGdW5jKXJlbW92ZV9jYWNoZV9pdGVtLCBvYmplY3QpOwor
CWdfaGFzaF90YWJsZV9kZXN0cm95IChwcml2LT5jYWNoZSk7CisJZ19mcmVlIChwcml2LT5jYWNo
ZV9kaXIpOworCisJZ19saXN0X2ZyZWUgKHByaXYtPmxydV9zdGFydCk7CisJcHJpdi0+bHJ1X3N0
YXJ0ID0gTlVMTDsKKworCUdfT0JKRUNUX0NMQVNTICh3ZWJraXRfc291cF9jYWNoZV9wYXJlbnRf
Y2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3Vw
X2NhY2hlX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqb2JqZWN0LCBndWludCBwcm9wX2lkLAorCQkJ
CWNvbnN0IEdWYWx1ZSAqdmFsdWUsIEdQYXJhbVNwZWMgKnBzcGVjKQoreworCVdlYktpdFNvdXBD
YWNoZVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9DQUNIRSAob2JqZWN0KS0+cHJpdjsKKwor
CXN3aXRjaCAocHJvcF9pZCkgeworCQljYXNlIFBST1BfQ0FDSEVfRElSOgorCQkJcHJpdi0+Y2Fj
aGVfZGlyID0gZ192YWx1ZV9kdXBfc3RyaW5nICh2YWx1ZSk7CisJCQkvKiBDcmVhdGUgZGlyZWN0
b3J5IGlmIGl0IGRvZXMgbm90IGV4aXN0IChGSVhNRTogc2hvdWxkIHdlPykgKi8KKwkJCWlmICgh
Z19maWxlX3Rlc3QgKHByaXYtPmNhY2hlX2RpciwgR19GSUxFX1RFU1RfRVhJU1RTIHwgR19GSUxF
X1RFU1RfSVNfRElSKSkKKwkJCQlnX21rZGlyX3dpdGhfcGFyZW50cyAocHJpdi0+Y2FjaGVfZGly
LCAwNzAwKTsKKwkJCWJyZWFrOworCQljYXNlIFBST1BfQ0FDSEVfVFlQRToKKwkJCXByaXYtPmNh
Y2hlX3R5cGUgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7CisJCQkvKiBUT0RPOiBjbGVhciBw
cml2YXRlIGVudHJpZXMgYW5kIGlzc3VlIGEgd2FybmluZyBpZiBtb3ZpbmcgdG8gc2hhcmVkPyAq
LworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVS
VFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworCQkJYnJlYWs7CisJfQorfQorCitzdGF0
aWMgdm9pZAord2Via2l0X3NvdXBfY2FjaGVfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICpvYmplY3Qs
IGd1aW50IHByb3BfaWQsCisJCQkJR1ZhbHVlICp2YWx1ZSwgR1BhcmFtU3BlYyAqcHNwZWMpCit7
CisJV2ViS2l0U291cENhY2hlUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0NBQ0hFIChvYmpl
Y3QpLT5wcml2OworCisJc3dpdGNoIChwcm9wX2lkKSB7CisJCWNhc2UgUFJPUF9DQUNIRV9ESVI6
CisJCQlnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBwcml2LT5jYWNoZV9kaXIpOworCQkJYnJl
YWs7CisJCWNhc2UgUFJPUF9DQUNIRV9UWVBFOgorCQkJZ192YWx1ZV9zZXRfZW51bSAodmFsdWUs
IHByaXYtPmNhY2hlX3R5cGUpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlHX09CSkVDVF9X
QVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworCQkJYnJl
YWs7CisJfQorfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfY2FjaGVfY29uc3RydWN0ZWQg
KEdPYmplY3QgKm9iamVjdCkKK3sKKwlXZWJLaXRTb3VwQ2FjaGVQcml2YXRlICpwcml2OworCisJ
cHJpdiA9IFdFQktJVF9TT1VQX0NBQ0hFIChvYmplY3QpLT5wcml2OworCisJaWYgKCFwcml2LT5j
YWNoZV9kaXIpIHsKKwkJLyogU2V0IGEgZGVmYXVsdCBjYWNoZSBkaXIsIGRpZmZlcmVudCBmb3Ig
ZWFjaCB1c2VyICovCisJCXByaXYtPmNhY2hlX2RpciA9IGdfYnVpbGRfZmlsZW5hbWUgKGdfZ2V0
X3VzZXJfY2FjaGVfZGlyICgpLAorCQkJCQkJICAgICJodHRwY2FjaGUiLAorCQkJCQkJICAgIE5V
TEwpOworCQlpZiAoIWdfZmlsZV90ZXN0IChwcml2LT5jYWNoZV9kaXIsIEdfRklMRV9URVNUX0VY
SVNUUyB8IEdfRklMRV9URVNUX0lTX0RJUikpCisJCQlnX21rZGlyX3dpdGhfcGFyZW50cyAocHJp
di0+Y2FjaGVfZGlyLCAwNzAwKTsKKwl9CisKKwlpZiAoR19PQkpFQ1RfQ0xBU1MgKHdlYmtpdF9z
b3VwX2NhY2hlX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkKQorCQlHX09CSkVDVF9DTEFTUyAo
d2Via2l0X3NvdXBfY2FjaGVfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0ZWQgKG9iamVjdCk7Cit9
CisKKyNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FDSEVfVFlQRV9UWVBFICh3ZWJraXRfc291cF9jYWNo
ZV90eXBlX2dldF90eXBlICgpKQorc3RhdGljIEdUeXBlCit3ZWJraXRfc291cF9jYWNoZV90eXBl
X2dldF90eXBlICh2b2lkKQoreworCXN0YXRpYyBHVHlwZSBjYWNoZV90eXBlID0gMDsKKworCXN0
YXRpYyBjb25zdCBHRW51bVZhbHVlIGNhY2hlX3R5cGVzW10gPSB7CisJCXsgV0VCS0lUX1NPVVBf
Q0FDSEVfU0lOR0xFX1VTRVIsICJTaW5nbGUgdXNlciBjYWNoZSIsICJ1c2VyIiB9LAorCQl7IFdF
QktJVF9TT1VQX0NBQ0hFX1NIQVJFRCwgIlNoYXJlZCBjYWNoZSIsICJzaGFyZWQiIH0sCisJCXsg
MCwgTlVMTCwgTlVMTCB9CisJfTsKKworCWlmICghY2FjaGVfdHlwZSkgeworCQljYWNoZV90eXBl
ID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIldlYktpdFNvdXBDYWNoZVR5cGUiLCBjYWNoZV90
eXBlcyk7CisJfQorCXJldHVybiBjYWNoZV90eXBlOworfQorCitzdGF0aWMgdm9pZAord2Via2l0
X3NvdXBfY2FjaGVfY2xhc3NfaW5pdCAoV2ViS2l0U291cENhY2hlQ2xhc3MgKmNhY2hlX2NsYXNz
KQoreworCUdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKiljYWNo
ZV9jbGFzczsKKworCWdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gd2Via2l0X3NvdXBfY2FjaGVf
ZmluYWxpemU7CisJZ29iamVjdF9jbGFzcy0+Y29uc3RydWN0ZWQgPSB3ZWJraXRfc291cF9jYWNo
ZV9jb25zdHJ1Y3RlZDsKKwlnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfc291
cF9jYWNoZV9zZXRfcHJvcGVydHk7CisJZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Vi
a2l0X3NvdXBfY2FjaGVfZ2V0X3Byb3BlcnR5OworCisJY2FjaGVfY2xhc3MtPmdldF9jYWNoZWFi
aWxpdHkgPSBnZXRfY2FjaGVhYmlsaXR5OworCisJZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9DQUNIRV9ESVIsCisJCQkJCSBnX3BhcmFtX3NwZWNf
c3RyaW5nICgiY2FjaGUtZGlyIiwKKwkJCQkJCQkgICAgICAiQ2FjaGUgZGlyZWN0b3J5IiwKKwkJ
CQkJCQkgICAgICAiVGhlIGRpcmVjdG9yeSB0byBzdG9yZSB0aGUgY2FjaGUgZmlsZXMiLAorCQkJ
CQkJCSAgICAgIE5VTEwsCisJCQkJCQkJICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFN
X0NPTlNUUlVDVF9PTkxZKSk7CisKKwlnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChn
b2JqZWN0X2NsYXNzLCBQUk9QX0NBQ0hFX1RZUEUsCisJCQkJCSBnX3BhcmFtX3NwZWNfZW51bSAo
ImNhY2hlLXR5cGUiLAorCQkJCQkJCSAgICAiQ2FjaGUgdHlwZSIsCisJCQkJCQkJICAgICJXaGV0
aGVyIHRoZSBjYWNoZSBpcyBwcml2YXRlIG9yIHNoYXJlZCIsCisJCQkJCQkJICAgIFdFQktJVF9T
T1VQX0NBQ0hFX1RZUEVfVFlQRSwKKwkJCQkJCQkgICAgV0VCS0lUX1NPVVBfQ0FDSEVfU0lOR0xF
X1VTRVIsCisJCQkJCQkJICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1Rf
T05MWSkpOworCisJZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlIChjYWNoZV9jbGFzcywgc2l6ZW9m
IChXZWJLaXRTb3VwQ2FjaGVQcml2YXRlKSk7Cit9CisKKy8qKgorICogd2Via2l0X3NvdXBfY2Fj
aGVfbmV3OgorICogQGNhY2hlX2RpcjogdGhlIGRpcmVjdG9yeSB0byBzdG9yZSB0aGUgY2FjaGVk
IGRhdGEsIG9yICVOVUxMIHRvIHVzZSB0aGUgZGVmYXVsdCBvbmUKKyAqIEBjYWNoZV90eXBlOiB0
aGUgI1dlYktpdFNvdXBDYWNoZVR5cGUgb2YgdGhlIGNhY2hlCisgKgorICogQ3JlYXRlcyBhIG5l
dyAjV2ViS2l0U291cENhY2hlLgorICoKKyAqIFJldHVybnM6IGEgbmV3ICNXZWJLaXRTb3VwQ2Fj
aGUKKyAqCisgKiBTaW5jZTogMi4yOAorICoqLworV2ViS2l0U291cENhY2hlICoKK3dlYmtpdF9z
b3VwX2NhY2hlX25ldyAoY29uc3QgY2hhciAqY2FjaGVfZGlyLCBXZWJLaXRTb3VwQ2FjaGVUeXBl
IGNhY2hlX3R5cGUpCit7CisJcmV0dXJuIGdfb2JqZWN0X25ldyAoV0VCS0lUX1RZUEVfU09VUF9D
QUNIRSwKKwkJCSAgICAgImNhY2hlLWRpciIsIGNhY2hlX2RpciwKKwkJCSAgICAgImNhY2hlLXR5
cGUiLCBjYWNoZV90eXBlLAorCQkJICAgICBOVUxMKTsKK30KKworLyoqCisgKiB3ZWJraXRfc291
cF9jYWNoZV9oYXNfcmVzcG9uc2U6CisgKiBAY2FjaGU6IGEgI1dlYktpdFNvdXBDYWNoZQorICog
QG1zZzogYSAjU291cE1lc3NhZ2UKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgd2hl
dGhlciB0aGUgQGNhY2hlIG9iamVjdCBoYXMgYSBwcm9wZXIKKyAqIHJlc3BvbnNlIGZvciB0aGUg
cmVxdWVzdCBAbXNnIGdpdmVuIHRoZSBmbGFncyBib3RoIGluIHRoZSByZXF1ZXN0CisgKiBhbmQg
dGhlIGNhY2hlZCByZXBseSBhbmQgdGhlIHRpbWUgZWxsYXBzZWQgc2luY2UgaXQgd2FzIGNhY2hl
ZC4KKyAqCisgKiBSZXR1cm5zOiB3aGV0aGVyIG9yIG5vdCB0aGUgQGNhY2hlIGhhcyBhIHZhbGlk
IHJlc3BvbnNlIGZvciBAbXNnCisgKiovCitXZWJLaXRTb3VwQ2FjaGVSZXNwb25zZQord2Via2l0
X3NvdXBfY2FjaGVfaGFzX3Jlc3BvbnNlIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLCBTb3VwTWVz
c2FnZSAqbXNnKQoreworCWNoYXIgKmtleTsKKwlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnk7
CisJY29uc3QgY2hhciAqY2FjaGVfY29udHJvbDsKKwlHSGFzaFRhYmxlICpoYXNoOworCWdwb2lu
dGVyIHZhbHVlOworCWdib29sZWFuIG11c3RfcmV2YWxpZGF0ZTsKKwlpbnQgbWF4X2FnZSwgbWF4
X3N0YWxlLCBtaW5fZnJlc2g7CisJR0xpc3QgKmxydV9pdGVtLCAqaXRlbTsKKworCWtleSA9IHNv
dXBfbWVzc2FnZV9nZXRfY2FjaGVfa2V5IChtc2cpOworCWVudHJ5ID0gZ19oYXNoX3RhYmxlX2xv
b2t1cCAoY2FjaGUtPnByaXYtPmNhY2hlLCBrZXkpOworCisJLyogMS4gVGhlIHByZXNlbnRlZCBS
ZXF1ZXN0LVVSSSBhbmQgdGhhdCBvZiBzdG9yZWQgcmVzcG9uc2UKKwkgKiBtYXRjaAorCSAqLwor
CWlmICghZW50cnkpCisJCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9TVEFMRTsK
KworCS8qIEluY3JlYXNlIGhpdCBjb3VudC4gVGFrZSBzb3J0aW5nIGludG8gYWNjb3VudCAqLwor
CWVudHJ5LT5oaXRzKys7CisJbHJ1X2l0ZW0gPSBnX2xpc3RfZmluZCAoY2FjaGUtPnByaXYtPmxy
dV9zdGFydCwgZW50cnkpOworCWl0ZW0gPSBscnVfaXRlbTsKKwl3aGlsZSAoaXRlbS0+bmV4dCAm
JiBscnVfY29tcGFyZV9mdW5jIChpdGVtLT5kYXRhLCBpdGVtLT5uZXh0LT5kYXRhKSA+IDApCisJ
CWl0ZW0gPSBnX2xpc3RfbmV4dCAoaXRlbSk7CisKKwlpZiAoaXRlbSAhPSBscnVfaXRlbSkgewor
CQljYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0ID0gZ19saXN0X3JlbW92ZV9saW5rIChjYWNoZS0+cHJp
di0+bHJ1X3N0YXJ0LCBscnVfaXRlbSk7CisJCWl0ZW0gPSBnX2xpc3RfaW5zZXJ0X3NvcnRlZCAo
aXRlbSwgbHJ1X2l0ZW0tPmRhdGEsIGxydV9jb21wYXJlX2Z1bmMpOworCQlnX2xpc3RfZnJlZSAo
bHJ1X2l0ZW0pOworCX0KKworCWlmIChlbnRyeS0+ZGlydHkgfHwgZW50cnktPmJlaW5nX3ZhbGlk
YXRlZCkKKwkJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX1NUQUxFOworCisJLyog
Mi4gVGhlIHJlcXVlc3QgbWV0aG9kIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RvcmVkIHJlc3BvbnNl
CisJICogIGFsbG93cyBpdCB0byBiZSB1c2VkIGZvciB0aGUgcHJlc2VudGVkIHJlcXVlc3QKKwkg
Ki8KKworCS8qIEluIHByYWN0aWNlIHRoaXMgbWVhbnMgd2Ugb25seSByZXR1cm4gb3VyIHJlc291
cmNlIGZvciBHRVQsCisJICogY2FjaGVhYmlsaXR5IGZvciBvdGhlciBtZXRob2RzIGlzIGEgVE9E
TyBpbiB0aGUgUkZDCisJICogKFRPRE86IGFsdGhvdWdoIHdlIGNvdWxkIHJldHVybiB0aGUgaGVh
ZGVycyBmb3IgSEVBRAorCSAqIHByb2JhYmx5KS4KKwkgKi8KKwlpZiAobXNnLT5tZXRob2QgIT0g
U09VUF9NRVRIT0RfR0VUKQorCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfU1RB
TEU7CisKKwkvKiAzLiBTZWxlY3RpbmcgcmVxdWVzdC1oZWFkZXJzIG5vbWluYXRlZCBieSB0aGUg
c3RvcmVkCisJICogcmVzcG9uc2UgKGlmIGFueSkgbWF0Y2ggdGhvc2UgcHJlc2VudGVkLgorCSAq
LworCisJLyogVE9ETyAqLworCisJLyogNC4gVGhlIHByZXNlbnRlZCByZXF1ZXN0IGFuZCBzdG9y
ZWQgcmVzcG9uc2UgYXJlIGZyZWUgZnJvbQorCSAqIGRpcmVjdGl2ZXMgdGhhdCB3b3VsZCBwcmV2
ZW50IGl0cyB1c2UuCisJICovCisKKwltdXN0X3JldmFsaWRhdGUgPSBGQUxTRTsKKwltYXhfYWdl
ID0gbWF4X3N0YWxlID0gbWluX2ZyZXNoID0gLTE7CisKKwljYWNoZV9jb250cm9sID0gc291cF9t
ZXNzYWdlX2hlYWRlcnNfZ2V0IChtc2ctPnJlcXVlc3RfaGVhZGVycywgIkNhY2hlLUNvbnRyb2wi
KTsKKwlpZiAoY2FjaGVfY29udHJvbCkgeworCQloYXNoID0gc291cF9oZWFkZXJfcGFyc2VfcGFy
YW1fbGlzdCAoY2FjaGVfY29udHJvbCk7CisKKwkJaWYgKGdfaGFzaF90YWJsZV9sb29rdXBfZXh0
ZW5kZWQgKGhhc2gsICJuby1zdG9yZSIsIE5VTEwsIE5VTEwpKSB7CisJCQlnX2hhc2hfdGFibGVf
ZGVzdHJveSAoaGFzaCk7CisJCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfU1RB
TEU7CisJCX0KKworCQlpZiAoZ19oYXNoX3RhYmxlX2xvb2t1cF9leHRlbmRlZCAoaGFzaCwgIm5v
LWNhY2hlIiwgTlVMTCwgTlVMTCkpIHsKKwkJCWVudHJ5LT5tdXN0X3JldmFsaWRhdGUgPSBUUlVF
OworCQl9CisKKwkJaWYgKGdfaGFzaF90YWJsZV9sb29rdXBfZXh0ZW5kZWQgKGhhc2gsICJtYXgt
YWdlIiwgTlVMTCwgJnZhbHVlKSkgeworCQkJbWF4X2FnZSA9IChpbnQpTUlOIChnX2FzY2lpX3N0
cnRvbGwgKHZhbHVlLCBOVUxMLCAxMCksIEdfTUFYSU5UMzIpOworCQl9CisKKwkJLyogbWF4LXN0
YWxlIGNhbiBoYXZlIG5vIHZhbHVlIHNldCwgd2UgbmVlZCB0byB1c2UgX2V4dGVuZGVkICovCisJ
CWlmIChnX2hhc2hfdGFibGVfbG9va3VwX2V4dGVuZGVkIChoYXNoLCAibWF4LXN0YWxlIiwgTlVM
TCwgJnZhbHVlKSkgeworCQkJaWYgKHZhbHVlKQorCQkJCW1heF9zdGFsZSA9IChpbnQpTUlOIChn
X2FzY2lpX3N0cnRvbGwgKHZhbHVlLCBOVUxMLCAxMCksIEdfTUFYSU5UMzIpOworCQkJZWxzZQor
CQkJCW1heF9zdGFsZSA9IEdfTUFYSU5UMzI7CisJCX0KKworCQl2YWx1ZSA9IGdfaGFzaF90YWJs
ZV9sb29rdXAgKGhhc2gsICJtaW4tZnJlc2giKTsKKwkJaWYgKHZhbHVlKQorCQkJbWluX2ZyZXNo
ID0gKGludClNSU4gKGdfYXNjaWlfc3RydG9sbCAodmFsdWUsIE5VTEwsIDEwKSwgR19NQVhJTlQz
Mik7CisKKwkJZ19oYXNoX3RhYmxlX2Rlc3Ryb3kgKGhhc2gpOworCisJCWlmIChtYXhfYWdlICE9
IC0xKSB7CisJCQlndWludCBjdXJyZW50X2FnZSA9IHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2dl
dF9jdXJyZW50X2FnZSAoZW50cnkpOworCisJCQkvKiBJZiB3ZSBhcmUgb3ZlciBtYXgtYWdlIGFu
ZCBtYXgtc3RhbGUgaXMgbm90CisJCQkgICBzZXQsIGRvIG5vdCB1c2UgdGhlIHZhbHVlIGZyb20g
dGhlIGNhY2hlCisJCQkgICB3aXRob3V0IHZhbGlkYXRpb24gKi8KKwkJCWlmIChtYXhfYWdlIDw9
IGN1cnJlbnRfYWdlICYmIG1heF9zdGFsZSA9PSAtMSkKKwkJCQlyZXR1cm4gV0VCS0lUX1NPVVBf
Q0FDSEVfUkVTUE9OU0VfTkVFRFNfVkFMSURBVElPTjsKKwkJfQorCX0KKworCS8qIDUuIFRoZSBz
dG9yZWQgcmVzcG9uc2UgaXMgZWl0aGVyOiBmcmVzaCwgYWxsb3dlZCB0byBiZQorCSAqIHNlcnZl
ZCBzdGFsZSBvciBzdWNjZXNmdWxseSB2YWxpZGF0ZWQKKwkgKi8KKwkvKiBUT0RPIGNvbnNpZGVy
IGFsc28gcHJveHktcmV2YWxpZGF0ZSAmIHMtbWF4YWdlICovCisJaWYgKGVudHJ5LT5tdXN0X3Jl
dmFsaWRhdGUpCisJCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9ORUVEU19WQUxJ
REFUSU9OOworCisJaWYgKCF3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9pc19mcmVzaF9lbm91Z2gg
KGVudHJ5LCBtaW5fZnJlc2gpKSB7CisJCS8qIE5vdCBmcmVzaCwgY2FuIGl0IGJlIHNlcnZlZCBz
dGFsZT8gKi8KKwkJaWYgKG1heF9zdGFsZSAhPSAtMSkgeworCQkJLyogR19NQVhJTlQzMiBtZWFu
cyB3ZSBhY2NlcHQgYW55IHN0YWxlbmVzcyAqLworCQkJaWYgKG1heF9zdGFsZSA9PSBHX01BWElO
VDMyKQorCQkJCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9GUkVTSDsKKworCQkJ
aWYgKCh3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9nZXRfY3VycmVudF9hZ2UgKGVudHJ5KSAtIGVu
dHJ5LT5mcmVzaG5lc3NfbGlmZXRpbWUpIDw9IG1heF9zdGFsZSkKKwkJCQlyZXR1cm4gV0VCS0lU
X1NPVVBfQ0FDSEVfUkVTUE9OU0VfRlJFU0g7CisJCX0KKworCQlyZXR1cm4gV0VCS0lUX1NPVVBf
Q0FDSEVfUkVTUE9OU0VfTkVFRFNfVkFMSURBVElPTjsKKwl9CisKKwlyZXR1cm4gV0VCS0lUX1NP
VVBfQ0FDSEVfUkVTUE9OU0VfRlJFU0g7Cit9CisKKy8qKgorICogd2Via2l0X3NvdXBfY2FjaGVf
Z2V0X2NhY2hlYWJpbGl0eToKKyAqIEBjYWNoZTogYSAjV2ViS2l0U291cENhY2hlCisgKiBAbXNn
OiBhICNTb3VwTWVzc2FnZQorICoKKyAqIENhbGN1bGF0ZXMgd2hldGhlciB0aGUgQG1zZyBjYW4g
YmUgY2FjaGVkIG9yIG5vdC4KKyAqCisgKiBSZXR1cm5zOiBhICNXZWJLaXRTb3VwQ2FjaGVhYmls
aXR5IHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0aGUgQG1zZyBjYW4gYmUgY2FjaGVkIG9yIG5v
dC4KKyAqKi8KK1dlYktpdFNvdXBDYWNoZWFiaWxpdHkKK3dlYmtpdF9zb3VwX2NhY2hlX2dldF9j
YWNoZWFiaWxpdHkgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsIFNvdXBNZXNzYWdlICptc2cpCit7
CisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFdFQktJVF9JU19TT1VQX0NBQ0hFIChjYWNoZSksIFdF
QktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFKTsKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoU09V
UF9JU19NRVNTQUdFIChtc2cpLCBXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRSk7CisKKwly
ZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfR0VUX0NMQVNTIChjYWNoZSktPmdldF9jYWNoZWFiaWxp
dHkgKGNhY2hlLCBtc2cpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2ZvcmNlX2ZsdXNoX3RpbWVv
dXQgKGdwb2ludGVyIGRhdGEpCit7CisJZ2Jvb2xlYW4gKmZvcmNlZCA9IChnYm9vbGVhbiAqKWRh
dGE7CisJKmZvcmNlZCA9IFRSVUU7CisKKwlyZXR1cm4gRkFMU0U7Cit9CisKKy8qKgorICogd2Vi
a2l0X3NvdXBfY2FjaGVfZmx1c2g6CisgKiBAY2FjaGU6IGEgI1dlYktpdFNvdXBDYWNoZQorICog
QHNlc3Npb246IHRoZSAjU291cFNlc3Npb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBAY2FjaGUKKyAq
CisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZm9yY2UgYWxsIHBlbmRpbmcgd3JpdGVzIGluIHRoZSBA
Y2FjaGUgdG8gYmUKKyAqIGNvbW1pdHRlZCB0byBkaXNrLiBGb3IgZG9pbmcgc28gaXQgd2lsbCBp
dGVyYXRlIHRoZSAjR01haW5Db250ZXh0CisgKiBhc3NvY2lhdGVkIHdpdGggdGhlIEBzZXNzaW9u
ICh3aGljaCBjYW4gYmUgdGhlIGRlZmF1bHQgb25lKSBhcyBsb25nCisgKiBhcyBuZWVkZWQuCisg
KiovCit2b2lkCit3ZWJraXRfc291cF9jYWNoZV9mbHVzaCAoV2ViS2l0U291cENhY2hlICpjYWNo
ZSkKK3sKKwlHTWFpbkNvbnRleHQgKmFzeW5jX2NvbnRleHQ7CisJU291cFNlc3Npb24gKnNlc3Np
b247CisJZ3VpbnQgdGltZW91dF9pZDsKKwlnYm9vbGVhbiBmb3JjZWQgPSBGQUxTRTsKKworCWdf
cmV0dXJuX2lmX2ZhaWwgKFdFQktJVF9JU19TT1VQX0NBQ0hFIChjYWNoZSkpOworCisJc2Vzc2lv
biA9IGNhY2hlLT5wcml2LT5zZXNzaW9uOworCWdfcmV0dXJuX2lmX2ZhaWwgKFNPVVBfSVNfU0VT
U0lPTiAoc2Vzc2lvbikpOworCWFzeW5jX2NvbnRleHQgPSBzb3VwX3Nlc3Npb25fZ2V0X2FzeW5j
X2NvbnRleHQgKHNlc3Npb24pOworCisJLyogV2UgZ2l2ZSBjYWNoZSAxMCBzZWNzIHRvIGZpbmlz
aCAqLworCXRpbWVvdXRfaWQgPSBnX3RpbWVvdXRfYWRkICgxMDAwMCwgZm9yY2VfZmx1c2hfdGlt
ZW91dCwgJmZvcmNlZCk7CisKKwl3aGlsZSAoIWZvcmNlZCAmJiBjYWNoZS0+cHJpdi0+bl9wZW5k
aW5nID4gMCkKKwkJZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uIChhc3luY19jb250ZXh0LCBGQUxT
RSk7CisKKwlpZiAoIWZvcmNlZCkKKwkJZ19zb3VyY2VfcmVtb3ZlICh0aW1lb3V0X2lkKTsKKwll
bHNlCisJCWdfd2FybmluZyAoIkNhY2hlIGZsdXNoIGZpbmlzaGVkIGRlc3BpdGUgJWQgcGVuZGlu
ZyByZXF1ZXN0cyIsIGNhY2hlLT5wcml2LT5uX3BlbmRpbmcpOworfQorCitzdGF0aWMgdm9pZAor
Y2xlYXJfY2FjaGVfaXRlbSAoZ3BvaW50ZXIga2V5LAorCQkgIGdwb2ludGVyIHZhbHVlLAorCQkg
IFdlYktpdFNvdXBDYWNoZSAqY2FjaGUpCit7CisJV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5
ID0gZ19oYXNoX3RhYmxlX2xvb2t1cCAoY2FjaGUtPnByaXYtPmNhY2hlLCAoY29uc3QgZ2NoYXIg
KilrZXkpOworCWlmICh3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9yZW1vdmUgKGNhY2hlLCBlbnRy
eSkpCisJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUgKGVudHJ5LCBUUlVFKTsKK30KKwor
LyoqCisgKiB3ZWJraXRfc291cF9jYWNoZV9jbGVhcjoKKyAqIEBjYWNoZTogYSAjV2ViS2l0U291
cENhY2hlCisgKgorICogV2lsbCByZW1vdmUgYWxsIGVudHJpZXMgaW4gdGhlIEBjYWNoZSBwbHVz
IGFsbCB0aGUgY2FjaGUgZmlsZXMKKyAqIGFzc29jaWF0ZWQgd2l0aCB0aGVtLgorICoqLwordm9p
ZAord2Via2l0X3NvdXBfY2FjaGVfY2xlYXIgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUpCit7CisJ
R0hhc2hUYWJsZSAqaGFzaDsKKworCWdfcmV0dXJuX2lmX2ZhaWwgKFdFQktJVF9JU19TT1VQX0NB
Q0hFIChjYWNoZSkpOworCisJaGFzaCA9IGNhY2hlLT5wcml2LT5jYWNoZTsKKwlnX3JldHVybl9p
Zl9mYWlsIChoYXNoKTsKKworCWdfaGFzaF90YWJsZV9mb3JlYWNoIChoYXNoLCAoR0hGdW5jKWNs
ZWFyX2NhY2hlX2l0ZW0sIGNhY2hlKTsKK30KKworU291cE1lc3NhZ2UgKgord2Via2l0X3NvdXBf
Y2FjaGVfZ2VuZXJhdGVfY29uZGl0aW9uYWxfcmVxdWVzdCAoV2ViS2l0U291cENhY2hlICpjYWNo
ZSwgU291cE1lc3NhZ2UgKm9yaWdpbmFsKQoreworCVNvdXBNZXNzYWdlICptc2c7CisJU291cFVS
SSAqdXJpOworCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeTsKKwljaGFyICprZXk7CisJY29u
c3QgY2hhciAqdmFsdWU7CisKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoV0VCS0lUX0lTX1NPVVBf
Q0FDSEUgKGNhY2hlKSwgTlVMTCk7CisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFNPVVBfSVNfTUVT
U0FHRSAob3JpZ2luYWwpLCBOVUxMKTsKKworCS8qIEZpcnN0IGNvcHkgdGhlIGRhdGEgd2UgbmVl
ZCBmcm9tIHRoZSBvcmlnaW5hbCBtZXNzYWdlICovCisJdXJpID0gc291cF9tZXNzYWdlX2dldF91
cmkgKG9yaWdpbmFsKTsKKwltc2cgPSBzb3VwX21lc3NhZ2VfbmV3X2Zyb21fdXJpIChvcmlnaW5h
bC0+bWV0aG9kLCB1cmkpOworCisJc291cF9tZXNzYWdlX2hlYWRlcnNfZm9yZWFjaCAob3JpZ2lu
YWwtPnJlcXVlc3RfaGVhZGVycywKKwkJCQkgICAgICAoU291cE1lc3NhZ2VIZWFkZXJzRm9yZWFj
aEZ1bmMpY29weV9oZWFkZXJzLAorCQkJCSAgICAgIG1zZy0+cmVxdWVzdF9oZWFkZXJzKTsKKwor
CS8qIE5vdyBhZGQgdGhlIHZhbGlkYXRvciBlbnRyaWVzIGluIHRoZSBoZWFkZXIgZnJvbSB0aGUg
Y2FjaGVkCisJICAgZGF0YSAqLworCWtleSA9IHNvdXBfbWVzc2FnZV9nZXRfY2FjaGVfa2V5IChv
cmlnaW5hbCk7CisJZW50cnkgPSBnX2hhc2hfdGFibGVfbG9va3VwIChjYWNoZS0+cHJpdi0+Y2Fj
aGUsIGtleSk7CisJZ19mcmVlIChrZXkpOworCisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGVudHJ5
LCBOVUxMKTsKKworCWVudHJ5LT5iZWluZ192YWxpZGF0ZWQgPSBUUlVFOworCisJdmFsdWUgPSBz
b3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKGVudHJ5LT5oZWFkZXJzLCAiTGFzdC1Nb2RpZmllZCIp
OworCWlmICh2YWx1ZSkKKwkJc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kIChtc2ctPnJlcXVl
c3RfaGVhZGVycywKKwkJCQkJICAgICAiSWYtTW9kaWZpZWQtU2luY2UiLAorCQkJCQkgICAgIHZh
bHVlKTsKKwl2YWx1ZSA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldCAoZW50cnktPmhlYWRlcnMs
ICJFVGFnIik7CisJaWYgKHZhbHVlKQorCQlzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQgKG1z
Zy0+cmVxdWVzdF9oZWFkZXJzLAorCQkJCQkgICAgICJJZi1Ob25lLU1hdGNoIiwKKwkJCQkJICAg
ICB2YWx1ZSk7CisJcmV0dXJuIG1zZzsKK30KKworI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9G
SUxFICJzb3VwLmNhY2hlIgorCisjZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX0hFQURFUlNfRk9S
TUFUICJ7c3N9IgorI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9QSEVBREVSU19GT1JNQVQgIihz
c2J1dXV1dWEiIFdFQktJVF9TT1VQX0NBQ0hFX0hFQURFUlNfRk9STUFUICIpIgorI2RlZmluZSBX
RUJLSVRfU09VUF9DQUNIRV9FTlRSSUVTX0ZPUk1BVCAiYSIgV0VCS0lUX1NPVVBfQ0FDSEVfUEhF
QURFUlNfRk9STUFUCisKKy8qIEJhc2ljYWxseSB0aGUgc2FtZSBmb3JtYXQgdGhhbiBhYm92ZSBl
eGNlcHQgdGhhdCBzb21lIHN0cmluZ3MgYXJlCisgICBwcmVwZW5kZWQgd2l0aCAmLiBUaGlzIHdh
eSB0aGUgR1ZhcmlhbnQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlCisgICBkYXRhIGluc3RlYWQg
b2YgZHVwbGljYXRpbmcgdGhlIHN0cmluZyAqLworI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9E
RUNPREVfSEVBREVSU19GT1JNQVQgInsmcyZzfSIKKworc3RhdGljIHZvaWQKK3BhY2tfZW50cnkg
KGdwb2ludGVyIGRhdGEsCisJICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlXZWJLaXRTb3Vw
Q2FjaGVFbnRyeSAqZW50cnkgPSAoV2ViS2l0U291cENhY2hlRW50cnkgKikgZGF0YTsKKwlTb3Vw
TWVzc2FnZUhlYWRlcnNJdGVyIGl0ZXI7CisJY29uc3QgZ2NoYXIgKmhlYWRlcl9rZXksICpoZWFk
ZXJfdmFsdWU7CisJR1ZhcmlhbnRCdWlsZGVyICpoZWFkZXJzX2J1aWxkZXI7CisJR1ZhcmlhbnRC
dWlsZGVyICplbnRyaWVzX2J1aWxkZXIgPSAoR1ZhcmlhbnRCdWlsZGVyICopdXNlcl9kYXRhOwor
CisJLyogRG8gbm90IHN0b3JlIG5vbi1jb25zb2xpZGF0ZWQgZW50cmllcyAqLworCWlmIChlbnRy
eS0+ZGlydHkgfHwgZW50cnktPndyaXRpbmcgfHwgIWVudHJ5LT5rZXkpCisJCXJldHVybjsKKwor
CS8qIFBhY2sgaGVhZGVycyAqLworCWhlYWRlcnNfYnVpbGRlciA9IGdfdmFyaWFudF9idWlsZGVy
X25ldyAoR19WQVJJQU5UX1RZUEVfQVJSQVkpOworCXNvdXBfbWVzc2FnZV9oZWFkZXJzX2l0ZXJf
aW5pdCAoJml0ZXIsIGVudHJ5LT5oZWFkZXJzKTsKKwl3aGlsZSAoc291cF9tZXNzYWdlX2hlYWRl
cnNfaXRlcl9uZXh0ICgmaXRlciwgJmhlYWRlcl9rZXksICZoZWFkZXJfdmFsdWUpKSB7CisJCWlm
IChnX3V0ZjhfdmFsaWRhdGUgKGhlYWRlcl92YWx1ZSwgLTEsIE5VTEwpKQorCQkJZ192YXJpYW50
X2J1aWxkZXJfYWRkIChoZWFkZXJzX2J1aWxkZXIsIFdFQktJVF9TT1VQX0NBQ0hFX0hFQURFUlNf
Rk9STUFULAorCQkJCQkgICAgICAgaGVhZGVyX2tleSwgaGVhZGVyX3ZhbHVlKTsKKwl9CisKKwkv
KiBFbnRyeSBkYXRhICovCisJZ192YXJpYW50X2J1aWxkZXJfYWRkIChlbnRyaWVzX2J1aWxkZXIs
IFdFQktJVF9TT1VQX0NBQ0hFX1BIRUFERVJTX0ZPUk1BVCwKKwkJCSAgICAgICBlbnRyeS0+a2V5
LCBlbnRyeS0+ZmlsZW5hbWUsIGVudHJ5LT5tdXN0X3JldmFsaWRhdGUsCisJCQkgICAgICAgZW50
cnktPmZyZXNobmVzc19saWZldGltZSwgZW50cnktPmNvcnJlY3RlZF9pbml0aWFsX2FnZSwKKwkJ
CSAgICAgICBlbnRyeS0+cmVzcG9uc2VfdGltZSwgZW50cnktPmhpdHMsIGVudHJ5LT5sZW5ndGgs
IGhlYWRlcnNfYnVpbGRlcik7CisKKwlnX3ZhcmlhbnRfYnVpbGRlcl91bnJlZiAoaGVhZGVyc19i
dWlsZGVyKTsKK30KKwordm9pZAord2Via2l0X3NvdXBfY2FjaGVfZHVtcCAoV2ViS2l0U291cENh
Y2hlICpjYWNoZSkKK3sKKwlXZWJLaXRTb3VwQ2FjaGVQcml2YXRlICpwcml2ID0gV0VCS0lUX1NP
VVBfQ0FDSEVfR0VUX1BSSVZBVEUgKGNhY2hlKTsKKwlnY2hhciAqZmlsZW5hbWU7CisJR1Zhcmlh
bnRCdWlsZGVyICplbnRyaWVzX2J1aWxkZXI7CisJR1ZhcmlhbnQgKmNhY2hlX3ZhcmlhbnQ7CisK
KwlpZiAoIWdfbGlzdF9sZW5ndGggKGNhY2hlLT5wcml2LT5scnVfc3RhcnQpKQorCQlyZXR1cm47
CisKKwkvKiBDcmVhdGUgdGhlIGJ1aWxkZXIgYW5kIGl0ZXJhdGUgb3ZlciBhbGwgZW50cmllcyAq
LworCWVudHJpZXNfYnVpbGRlciA9IGdfdmFyaWFudF9idWlsZGVyX25ldyAoR19WQVJJQU5UX1RZ
UEVfQVJSQVkpOworCWdfbGlzdF9mb3JlYWNoIChjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0LCBwYWNr
X2VudHJ5LCBlbnRyaWVzX2J1aWxkZXIpOworCisJLyogU2VyaWFsaXplIGFuZCBkdW1wICovCisJ
Y2FjaGVfdmFyaWFudCA9IGdfdmFyaWFudF9uZXcgKFdFQktJVF9TT1VQX0NBQ0hFX0VOVFJJRVNf
Rk9STUFULCBlbnRyaWVzX2J1aWxkZXIpOworCWdfdmFyaWFudF9idWlsZGVyX3VucmVmIChlbnRy
aWVzX2J1aWxkZXIpOworCisJZmlsZW5hbWUgPSBnX2J1aWxkX2ZpbGVuYW1lIChwcml2LT5jYWNo
ZV9kaXIsIFdFQktJVF9TT1VQX0NBQ0hFX0ZJTEUsIE5VTEwpOworCWdfZmlsZV9zZXRfY29udGVu
dHMgKGZpbGVuYW1lLCAoY29uc3QgZ2NoYXIgKilnX3ZhcmlhbnRfZ2V0X2RhdGEgKGNhY2hlX3Zh
cmlhbnQpLAorCQkJICAgICBnX3ZhcmlhbnRfZ2V0X3NpemUgKGNhY2hlX3ZhcmlhbnQpLCBOVUxM
KTsKKwlnX2ZyZWUgKGZpbGVuYW1lKTsKKwlnX3ZhcmlhbnRfdW5yZWYgKGNhY2hlX3ZhcmlhbnQp
OworfQorCit2b2lkCit3ZWJraXRfc291cF9jYWNoZV9sb2FkIChXZWJLaXRTb3VwQ2FjaGUgKmNh
Y2hlKQoreworCWdjaGFyICpmaWxlbmFtZSA9IE5VTEwsICpjb250ZW50cyA9IE5VTEw7CisJR1Zh
cmlhbnQgKmNhY2hlX3ZhcmlhbnQ7CisJR1ZhcmlhbnRJdGVyICplbnRyaWVzX2l0ZXIsICpoZWFk
ZXJzX2l0ZXI7CisJR1ZhcmlhbnRUeXBlICp2YXJpYW50X2Zvcm1hdDsKKwlnc2l6ZSBsZW5ndGg7
CisJV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5OworCVdlYktpdFNvdXBDYWNoZVByaXZhdGUg
KnByaXYgPSBjYWNoZS0+cHJpdjsKKworCWZpbGVuYW1lID0gZ19idWlsZF9maWxlbmFtZSAocHJp
di0+Y2FjaGVfZGlyLCBXRUJLSVRfU09VUF9DQUNIRV9GSUxFLCBOVUxMKTsKKwlpZiAoIWdfZmls
ZV9nZXRfY29udGVudHMgKGZpbGVuYW1lLCAmY29udGVudHMsICZsZW5ndGgsIE5VTEwpKSB7CisJ
CWdfZnJlZSAoZmlsZW5hbWUpOworCQlyZXR1cm47CisJfQorCWdfZnJlZSAoZmlsZW5hbWUpOwor
CisJdmFyaWFudF9mb3JtYXQgPSBnX3ZhcmlhbnRfdHlwZV9uZXcgKFdFQktJVF9TT1VQX0NBQ0hF
X0VOVFJJRVNfRk9STUFUKTsKKwljYWNoZV92YXJpYW50ID0gZ192YXJpYW50X25ld19mcm9tX2Rh
dGEgKHZhcmlhbnRfZm9ybWF0LCAoY29uc3QgZ2NoYXIgKiljb250ZW50cywgbGVuZ3RoLCBGQUxT
RSwgTlVMTCwgTlVMTCk7CisJZ192YXJpYW50X3R5cGVfZnJlZSAodmFyaWFudF9mb3JtYXQpOwor
CisJZ192YXJpYW50X2dldCAoY2FjaGVfdmFyaWFudCwgV0VCS0lUX1NPVVBfQ0FDSEVfRU5UUklF
U19GT1JNQVQsICZlbnRyaWVzX2l0ZXIpOworCWVudHJ5ID0gZ19zbGljZV9uZXcwIChXZWJLaXRT
b3VwQ2FjaGVFbnRyeSk7CisKKwl3aGlsZSAoZ192YXJpYW50X2l0ZXJfbG9vcCAoZW50cmllc19p
dGVyLCBXRUJLSVRfU09VUF9DQUNIRV9QSEVBREVSU19GT1JNQVQsCisJCQkJICAgICZlbnRyeS0+
a2V5LCAmZW50cnktPmZpbGVuYW1lLCAmZW50cnktPm11c3RfcmV2YWxpZGF0ZSwKKwkJCQkgICAg
JmVudHJ5LT5mcmVzaG5lc3NfbGlmZXRpbWUsICZlbnRyeS0+Y29ycmVjdGVkX2luaXRpYWxfYWdl
LAorCQkJCSAgICAmZW50cnktPnJlc3BvbnNlX3RpbWUsICZlbnRyeS0+aGl0cywgJmVudHJ5LT5s
ZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGVhZGVyc19pdGVy
KSkgeworCQljb25zdCBnY2hhciAqaGVhZGVyX2tleSwgKmhlYWRlcl92YWx1ZTsKKworCQkvKiBT
b3VwTWVzc2FnZSBIZWFkZXJzICovCisJCWVudHJ5LT5oZWFkZXJzID0gc291cF9tZXNzYWdlX2hl
YWRlcnNfbmV3IChTT1VQX01FU1NBR0VfSEVBREVSU19SRVNQT05TRSk7CisJCXdoaWxlIChnX3Zh
cmlhbnRfaXRlcl9sb29wIChoZWFkZXJzX2l0ZXIsIFdFQktJVF9TT1VQX0NBQ0hFX0RFQ09ERV9I
RUFERVJTX0ZPUk1BVCwgJmhlYWRlcl9rZXksICZoZWFkZXJfdmFsdWUpKQorCQkJc291cF9tZXNz
YWdlX2hlYWRlcnNfYXBwZW5kIChlbnRyeS0+aGVhZGVycywgaGVhZGVyX2tleSwgaGVhZGVyX3Zh
bHVlKTsKKworCQkvKiBJbnNlcnQgaW4gY2FjaGUgKi8KKwkJaWYgKCF3ZWJraXRfc291cF9jYWNo
ZV9lbnRyeV9pbnNlcnRfYnlfa2V5IChjYWNoZSwgKGNvbnN0IGdjaGFyICopZW50cnktPmtleSwg
ZW50cnksIEZBTFNFKSkKKwkJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUgKGVudHJ5LCBU
UlVFKTsKKworCQkvKiBOZXcgZW50cnkgZm9yIHRoZSBuZXh0IGl0ZXJhdGlvbi4gVGhpcyBjcmVh
dGVzIGFuCisJCSAgIGV4dHJhIG9iamVjdCB0aGUgbGFzdCBpdGVyYXRpb24gYnV0IGl0J3Mgd29y
dGggaXQKKwkJICAgYXMgd2Ugc2F2ZSBzZXZlcmFsIGlmJ3MgKi8KKwkJZW50cnkgPSBnX3NsaWNl
X25ldzAgKFdlYktpdFNvdXBDYWNoZUVudHJ5KTsKKwl9CisJLyogUmVtb3ZlIGxhc3QgY3JlYXRl
ZCBlbnRyeSAqLworCWdfc2xpY2VfZnJlZSAoV2ViS2l0U291cENhY2hlRW50cnksIGVudHJ5KTsK
KworCS8qIFNvcnQgTFJVIChzaG91bGRuJ3QgYmUgbmVlZGVkKS4gRmlyc3QgcmV2ZXJzZSBhcyBl
bGVtZW50cworCSAqIGFyZSBhbHdheXMgcHJlcGVuZGVkIHdoZW4gaW5zZXJ0aW5nCisJICovCisJ
Y2FjaGUtPnByaXYtPmxydV9zdGFydCA9IGdfbGlzdF9yZXZlcnNlIChjYWNoZS0+cHJpdi0+bHJ1
X3N0YXJ0KTsKKwljYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0ID0gZ19saXN0X3NvcnQgKGNhY2hlLT5w
cml2LT5scnVfc3RhcnQsIGxydV9jb21wYXJlX2Z1bmMpOworCisJLyogZnJlZXMgKi8KKwlnX3Zh
cmlhbnRfaXRlcl9mcmVlIChlbnRyaWVzX2l0ZXIpOworCWdfdmFyaWFudF91bnJlZiAoY2FjaGVf
dmFyaWFudCk7Cit9CisKK3ZvaWQKK3dlYmtpdF9zb3VwX2NhY2hlX3NldF9tYXhfc2l6ZSAoV2Vi
S2l0U291cENhY2hlICpjYWNoZSwKKwkJCQlndWludCBtYXhfc2l6ZSkKK3sKKwljYWNoZS0+cHJp
di0+bWF4X3NpemUgPSBtYXhfc2l6ZTsKKwljYWNoZS0+cHJpdi0+bWF4X2VudHJ5X2RhdGFfc2l6
ZSA9IGNhY2hlLT5wcml2LT5tYXhfc2l6ZSAvIE1BWF9FTlRSWV9EQVRBX1BFUkNFTlRBR0U7Cit9
CisKK2d1aW50Cit3ZWJraXRfc291cF9jYWNoZV9nZXRfbWF4X3NpemUgKFdlYktpdFNvdXBDYWNo
ZSAqY2FjaGUpCit7CisJcmV0dXJuIGNhY2hlLT5wcml2LT5tYXhfc2l6ZTsKK30KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hl
LmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNo
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MTdkM2UKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291
cC1jYWNoZS5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBzb3VwLWNhY2hlLmg6CisgKgorICog
Q29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIElnYWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdFQktJVF9TT1VQ
X0NBQ0hFX0gKKyNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FDSEVfSCAxCisKKyNpbmNsdWRlIDx3ZWJr
aXQvd2Via2l0ZGVmaW5lcy5oPgorCisjaW5jbHVkZSA8bGlic291cC9zb3VwLXR5cGVzLmg+Cisj
aW5jbHVkZSA8Z2lvL2dpby5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZ
UEVfU09VUF9DQUNIRSAgICAgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9nZXRfdHlwZSAoKSkK
KyNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FDSEUob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tf
SU5TVEFOQ0VfQ0FTVCAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUsIFdlYktpdFNvdXBD
YWNoZSkpCisjZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX0NMQVNTKGtsYXNzKSAgICAoR19UWVBF
X0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUsIFdlYktp
dFNvdXBDYWNoZUNsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1NPVVBfQ0FDSEUob2JqKSAgICAg
ICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBf
Q0FDSEUpKQorI2RlZmluZSBXRUJLSVRfSVNfU09VUF9DQUNIRV9DTEFTUyhrbGFzcykgKEdfVFlQ
RV9DSEVDS19DTEFTU19UWVBFICgob2JqKSwgV0VCS0lUX1RZUEVfU09VUF9DQUNIRSkpCisjZGVm
aW5lIFdFQktJVF9TT1VQX0NBQ0hFX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dF
VF9DTEFTUyAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUsIFdlYktpdFNvdXBDYWNoZUNs
YXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBDYWNoZSBXZWJLaXRTb3VwQ2FjaGU7
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0U291cENhY2hlUHJpdmF0ZSBXZWJLaXRTb3VwQ2FjaGVQ
cml2YXRlOworCit0eXBlZGVmIGVudW0geworCVdFQktJVF9TT1VQX0NBQ0hFX0NBQ0hFQUJMRSA9
ICgxIDw8IDApLAorCVdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFID0gKDEgPDwgMSksCisJ
V0VCS0lUX1NPVVBfQ0FDSEVfSU5WQUxJREFURVMgPSAoMSA8PCAyKSwKKwlXRUJLSVRfU09VUF9D
QUNIRV9WQUxJREFURVMgPSAoMSA8PCAzKQorfSBXZWJLaXRTb3VwQ2FjaGVhYmlsaXR5OworCit0
eXBlZGVmIGVudW0geworCVdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX0ZSRVNILAorCVdFQktJ
VF9TT1VQX0NBQ0hFX1JFU1BPTlNFX05FRURTX1ZBTElEQVRJT04sCisJV0VCS0lUX1NPVVBfQ0FD
SEVfUkVTUE9OU0VfU1RBTEUKK30gV2ViS2l0U291cENhY2hlUmVzcG9uc2U7CisKK3R5cGVkZWYg
ZW51bSB7CisJV0VCS0lUX1NPVVBfQ0FDSEVfU0lOR0xFX1VTRVIsCisJV0VCS0lUX1NPVVBfQ0FD
SEVfU0hBUkVECit9IFdlYktpdFNvdXBDYWNoZVR5cGU7CisKK3N0cnVjdCBfV2ViS2l0U291cENh
Y2hlIHsKKwlHT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKKworCVdlYktpdFNvdXBDYWNoZVByaXZh
dGUgKnByaXY7Cit9OworCit0eXBlZGVmIHN0cnVjdCB7CisJR09iamVjdENsYXNzIHBhcmVudF9j
bGFzczsKKworCS8qIG1ldGhvZHMgKi8KKwlXZWJLaXRTb3VwQ2FjaGVhYmlsaXR5ICgqZ2V0X2Nh
Y2hlYWJpbGl0eSkoV2ViS2l0U291cENhY2hlICpjYWNoZSwgU291cE1lc3NhZ2UgKm1zZyk7CisK
KwkvKiBQYWRkaW5nIGZvciBmdXR1cmUgZXhwYW5zaW9uICovCisJdm9pZCAoKl9saWJzb3VwX3Jl
c2VydmVkMSkodm9pZCk7CisJdm9pZCAoKl9saWJzb3VwX3Jlc2VydmVkMikodm9pZCk7CisJdm9p
ZCAoKl9saWJzb3VwX3Jlc2VydmVkMykodm9pZCk7Cit9IFdlYktpdFNvdXBDYWNoZUNsYXNzOwor
CitXRUJLSVRfQVBJIEdUeXBlICAgICAgICAgICAgIHdlYmtpdF9zb3VwX2NhY2hlX2dldF90eXBl
ICh2b2lkKTsKK1dFQktJVF9BUEkgV2ViS2l0U291cENhY2hlICAqd2Via2l0X3NvdXBfY2FjaGVf
bmV3IChjb25zdCBjaGFyICAqY2FjaGVfZGlyLAorCQkJCQkJICAgIFdlYktpdFNvdXBDYWNoZVR5
cGUgY2FjaGVfdHlwZSk7CitXRUJLSVRfQVBJIHZvaWQgICAgICAgICAgICAgIHdlYmtpdF9zb3Vw
X2NhY2hlX2ZsdXNoIChXZWJLaXRTb3VwQ2FjaGUgICAqY2FjaGUpOworV0VCS0lUX0FQSSB2b2lk
ICAgICAgICAgICAgICB3ZWJraXRfc291cF9jYWNoZV9jbGVhciAoV2ViS2l0U291cENhY2hlICAg
KmNhY2hlKTsKKworV0VCS0lUX0FQSSB2b2lkICAgICAgICAgICAgICB3ZWJraXRfc291cF9jYWNo
ZV9kdW1wIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKTsKK1dFQktJVF9BUEkgdm9pZCAgICAgICAg
ICAgICAgd2Via2l0X3NvdXBfY2FjaGVfbG9hZCAoV2ViS2l0U291cENhY2hlICpjYWNoZSk7CisK
K1dFQktJVF9BUEkgdm9pZCAgICAgICAgICAgICAgd2Via2l0X3NvdXBfY2FjaGVfc2V0X21heF9z
aXplIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLAorCQkJCQkJCSAgICAgZ3VpbnQgbWF4X3NpemUp
OworV0VCS0lUX0FQSSBndWludCAgICAgICAgICAgICB3ZWJraXRfc291cF9jYWNoZV9nZXRfbWF4
X3NpemUgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUpOworCitHX0VORF9ERUNMUworCisKKyNlbmRp
ZiAvKiBXRUJLSVRfU09VUF9DQUNIRV9IICovCisKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0No
YW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxvZwppbmRleCA1MDY0OGIwLi44ZmYyMTdmIDEw
MDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMDktMDYgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxz
dmlsbGFyQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgW0dUS10gQWRkIEhUVFAgY2FjaGluZyBzdXBwb3J0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDI2MQorCisgICAgICAgICogR05V
bWFrZWZpbGUuYW06IGFkZGVkIHBhdGhzIGZvciB0aGUgbmV3IHNvdXAgSFRUUCBjYWNoZSBjb2Rl
CisKIDIwMTAtMDktMDUgIFBldGVyIEthc3RpbmcgIDxwa2FzdGluZ0Bnb29nbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9H
TlVtYWtlZmlsZS5hbSBiL1dlYktpdFRvb2xzL0dOVW1ha2VmaWxlLmFtCmluZGV4IDM5ZGY0MjEu
LjU5YzU4MTIgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dl
YktpdFRvb2xzL0dOVW1ha2VmaWxlLmFtCkBAIC02LDYgKzYsNyBAQCBub2luc3RfUFJPR1JBTVMg
Kz0gXAogIyBHdGtMYXVuY2hlcgogUHJvZ3JhbXNfR3RrTGF1bmNoZXJfQ1BQRkxBR1MgPSBcCiAJ
LUkkKHNyY2RpcikvV2ViS2l0L2d0ayBcCisJLUkkKHNyY2RpcikvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvY2FjaGUvIFwKIAktSSQodG9wX2J1aWxkZGlyKS9XZWJLaXQvZ3RrIFwKIAkt
SSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcyBcCiAJJChnbG9iYWxfY3BwZmxhZ3MpIFwK
QEAgLTM3LDYgKzM4LDcgQEAgZHVtcHJlbmRlcnRyZWVfY3BwZmxhZ3MgOj0gXAogCS1JJChzcmNk
aXIpL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ayBcCiAJLUkkKHNyY2RpcikvV2ViS2l0
L2d0ayBcCiAJLUkkKHNyY2RpcikvV2ViQ29yZS9wbGF0Zm9ybS9ndGsgXAorCS1JJChzcmNkaXIp
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlLyBcCiAJLUkkKHRvcF9idWlsZGRp
cikvV2ViS2l0L2d0ayBcCiAJLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMgXAogCSQo
Z2xvYmFsX2NwcGZsYWdzKSBcCmRpZmYgLS1naXQgYS9hdXRvdG9vbHMvd2Via2l0Lm00IGIvYXV0
b3Rvb2xzL3dlYmtpdC5tNAppbmRleCAzNzlmYThmLi42YjQ0ZjMwIDEwMDY0NAotLS0gYS9hdXRv
dG9vbHMvd2Via2l0Lm00CisrKyBiL2F1dG90b29scy93ZWJraXQubTQKQEAgLTEwOCw3ICsxMDgs
NyBAQCBBQ19ERUZVTl9PTkNFKFtfV0VCS0lUX0NIRUNLX0dMSUJdLAogW2RubAogZG5sIGNoZWNr
IGZvciBnbGliCiAjIFZlcnNpb24gcmVxdWlyZW1lbnRzCi1HTElCX1JFUVVJUkVEX1ZFUlNJT049
Mi4yMS4zCitHTElCX1JFUVVJUkVEX1ZFUlNJT049Mi4yNAogR09CSkVDVF9SRVFVSVJFRF9WRVJT
SU9OPTIuMAogR1RIUkVBRF9SRVFVSVJFRF9WRVJTSU9OPTIuMAogCi0tIAoxLjcuMQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68349</attachid>
            <date>2010-09-22 02:04:42 -0700</date>
            <delta_ts>2010-09-23 02:03:48 -0700</delta_ts>
            <desc>Imported SoupURILoader to Webkit. New public API for HTTP cache</desc>
            <filename>0001-Imported-SoupURILoader-code-to-WebKit.-New-public-AP.patch</filename>
            <type>text/plain</type>
            <size>170564</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">RnJvbSBmNzI3ZjllNWRlY2RlYjYxMDRjM2M3NzVjN2E1YTQwZjUwNmM0ZmIxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTZXJnaW8gVmlsbGFyIFNlbmluIDxzdmlsbGFyQGlnYWxpYS5j
b20+CkRhdGU6IFdlZCwgMjIgU2VwIDIwMTAgMTA6MTY6NDQgKzAyMDAKU3ViamVjdDogW1BBVENI
IDEvMl0gSW1wb3J0ZWQgU291cFVSSUxvYWRlciBjb2RlIHRvIFdlYktpdC4gTmV3IHB1YmxpYyBB
UEkgZm9yIEhUVFAgY2FjaGUKCi0tLQogQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgIDEwICsKIEdOVW1ha2VmaWxlLmFtICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgICAxMCArLQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTkzICsrKwogV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIwICstCiAuLi4vc291cC9jYWNo
ZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uYyAgICAgICB8ICAxOTkgKysrCiAuLi4vc291
cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uaCAgICAgICB8ICAgNjEgKwogLi4u
L25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmMgICAgfCAgOTIxICsr
KysrKysrKysrCiAuLi4vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0u
aCAgICB8ICAgNzYgKwogLi4uL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5j
ICAgICAgICAgfCAgMjA1ICsrKwogLi4uL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Qt
ZGF0YS5oICAgICAgICAgfCAgIDUxICsKIC4uLi9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1
ZXN0LWZpbGUuYyAgICAgICAgIHwgIDMxMyArKysrCiAuLi4vbmV0d29yay9zb3VwL2NhY2hlL3Nv
dXAtcmVxdWVzdC1maWxlLmggICAgICAgICB8ICAgNTMgKwogLi4uL25ldHdvcmsvc291cC9jYWNo
ZS9zb3VwLXJlcXVlc3QtaHR0cC5jICAgICAgICAgfCAgMzM5ICsrKysKIC4uLi9uZXR3b3JrL3Nv
dXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuaCAgICAgICAgIHwgICA1MyArCiBXZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QuYyB8ICAyNzkgKysrKwogV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LmggfCAgIDkyICsr
CiAuLi4vcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmMgICB8ICAx
ODYgKysrCiAuLi4vcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmgg
ICB8ICAgODAgKwogLi4uL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS1wcml2
YXRlLmggfCAgIDQxICsKIC4uLi9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUu
YyAgICAgICAgIHwgMTY1MiArKysrKysrKysrKysrKysrKysrKwogLi4uL25ldHdvcmsvc291cC9j
YWNoZS93ZWJraXQvc291cC1jYWNoZS5oICAgICAgICAgfCAgIDk1ICsrCiBXZWJLaXRUb29scy9D
aGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDkgKwogV2ViS2l0VG9v
bHMvR05VbWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKIGF1dG90
b29scy93ZWJraXQubTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArLQog
MjQgZmlsZXMgY2hhbmdlZCwgNDkzNiBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAt
ZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmgKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3Vw
LWh0dHAtaW5wdXQtc3RyZWFtLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmgKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Qt
ZGF0YS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
Y2FjaGUvc291cC1yZXF1ZXN0LWRhdGEuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmMKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Qt
ZmlsZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
Y2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRwLmgKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Qu
YwogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3NvdXAtcmVxdWVzdC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmgKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291
cC1jYWNoZS1wcml2YXRlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUuaAoK
ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBlZmUwMWE1Li4yNTYzZDFk
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTAtMDktMDYgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gQWRk
IEhUVFAgY2FjaGluZyBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00NDI2MQorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IGFkZGVkIHBh
dGhzIGZvciBzb3VwIEhUVFAgY2FjaGUgY29kZQorICAgICAgICAqIGF1dG90b29scy93ZWJraXQu
bTQ6IHVwZ3JhZGVkIHJlcXVpcmVkIGdsaWIgdmVyc2lvbgorCiAyMDEwLTA5LTE4ICBLZXZpbiBP
bGxpdmllciAgPGtldmlub0B0aGVvbGxpdmllcnMuY29tPgogCiAgICAgICAgIFt3eF0gQnVpbGQg
Zml4LCBmaXggdXNlIG9mIHdyb25nIGNhc2UgaW4gbmFtZS4KZGlmZiAtLWdpdCBhL0dOVW1ha2Vm
aWxlLmFtIGIvR05VbWFrZWZpbGUuYW0KaW5kZXggNzQ3MTI1ZC4uMjBhNjA0YSAxMDA2NDQKLS0t
IGEvR05VbWFrZWZpbGUuYW0KKysrIGIvR05VbWFrZWZpbGUuYW0KQEAgLTI5OSwyOCArMjk5LDI5
IEBAIGdsb2JhbF9jcHBmbGFncyArPSBcCiBlbmRpZgogCiB3ZWJraXRndGtfc3RhdGljX2hfYXBp
ICs9IFwKKwkkKHNyY2RpcikvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Vi
a2l0L3NvdXAtY2FjaGUuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5o
IFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oIFwKIAkkKHNy
Y2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuaCBcCiAJJChzcmNkaXIpL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdGVycm9yLmggXAorCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXRnZW9sb2NhdGlvbnBvbGljeWRlY2lzaW9uLmggXAogCSQoc3JjZGlyKS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXRoaXR0ZXN0cmVzdWx0LmggXAogCSQoc3JjZGlyKS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVzdC5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0bmV0d29ya3Jlc3BvbnNlLmggXAorCSQoc3JjZGlyKS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXRzZWN1cml0eW9yaWdpbi5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0c291cGF1dGhkaWFsb2cuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHdlYmJhY2tmb3J3YXJkbGlzdC5oIFwKKwkkKHNyY2RpcikvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHdlYmRhdGFzb3VyY2UuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYmZyYW1lLmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJo
aXN0b3J5aXRlbS5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViaW5z
cGVjdG9yLmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJuYXZpZ2F0
aW9uYWN0aW9uLmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJwb2xp
Y3lkZWNpc2lvbi5oIFwKLQkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2VvbG9j
YXRpb25wb2xpY3lkZWNpc2lvbi5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0d2VicmVzb3VyY2UuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdl
YnNldHRpbmdzLmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ3aW5k
b3dmZWF0dXJlcy5oIFwKLQkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmll
dy5oIFwKLQkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuaCBc
Ci0JJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNlY3VyaXR5b3JpZ2luLmgKKwkk
KHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oCiAKIHdlYmtpdGd0a19i
dWlsdF9oX2FwaSArPSBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmVyc2lvbi5oCkBAIC01
NDEsNiArNTQyLDcgQEAgbm9pbnN0X1BST0dSQU1TICs9ICQoVEVTVF9QUk9HUykKIHdlYmtpdF90
ZXN0c19jZmxhZ3MgPSBcCiAJLWZuby1zdHJpY3QtYWxpYXNpbmcgXAogCS1JJChzcmNkaXIpL0ph
dmFTY3JpcHRDb3JlL0ZvcndhcmRpbmdIZWFkZXJzIFwKKwktSSQoc3JjZGlyKS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9jYWNoZSBcCiAJLUkkKHNyY2RpcikvV2ViS2l0L2d0ayBcCiAJ
LUkkKHRvcF9idWlsZGRpcikvV2ViS2l0L2d0ayBcCiAJLUkkKHRvcF9idWlsZGRpcikvRGVyaXZl
ZFNvdXJjZXMgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5n
ZUxvZwppbmRleCBhY2ZmNjc1Li40MzczYTVkIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5NiBAQAorMjAxMC0wOS0wNiAg
U2VyZ2lvIFZpbGxhciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBBZGQgSFRUUCBjYWNoaW5n
IHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQ0MjYxCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlSGFuZGxlSW50ZXJuYWw6OlJlc291cmNlSGFuZGxlSW50ZXJuYWwpOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6flJlc291cmNlSGFuZGxlSW50ZXJuYWwpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6On5SZXNvdXJjZUhhbmRsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpyZXN0YXJ0ZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpnb3RD
aHVua0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlRGF0YVVybCk6CisgICAgICAg
IChXZWJDb3JlOjpjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6c2VuZFJlcXVlc3RDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpzdGFydEh0dHApOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3QuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OnVwZGF0ZVNvdXBNZXNzYWdlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3Ry
ZWFtLmM6IEFkZGVkLgorICAgICAgICAoc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX3BhcnNl
X2luZm8pOgorICAgICAgICAoc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX3JlYWRfbmV4dF9m
aWxlKToKKyAgICAgICAgKHNvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9yZWFkKToKKyAgICAg
ICAgKHNvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9jbG9zZSk6CisgICAgICAgIChzb3VwX2Rp
cmVjdG9yeV9pbnB1dF9zdHJlYW1fY2xhc3NfaW5pdCk6CisgICAgICAgIChzb3VwX2RpcmVjdG9y
eV9pbnB1dF9zdHJlYW1faW5pdCk6CisgICAgICAgIChzb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJl
YW1fbmV3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1kaXJl
Y3RvcnktaW5wdXQtc3RyZWFtLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
c291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmM6IEFkZGVkLgorICAgICAgICAoc291
cF9odHRwX2lucHV0X3N0cmVhbV9maW5hbGl6ZSk6CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX2NsYXNzX2luaXQpOgorICAgICAgICAoc291cF9odHRwX2lucHV0X3N0cmVhbV9zZWVr
YWJsZV9pZmFjZV9pbml0KToKKyAgICAgICAgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1faW5pdCk6
CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3F1ZXVlX21lc3NhZ2UpOgorICAgICAg
ICAoc291cF9odHRwX2lucHV0X3N0cmVhbV9uZXcpOgorICAgICAgICAoc291cF9odHRwX2lucHV0
X3N0cmVhbV9nb3RfaGVhZGVycyk6CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dv
dF9jaHVuayk6CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2ZpbmlzaGVkKToKKyAg
ICAgICAgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2FuY2VsbGVkKToKKyAgICAgICAgKHNvdXBf
aHR0cF9pbnB1dF9zdHJlYW1fcHJlcGFyZV9mb3JfaW8pOgorICAgICAgICAoc291cF9odHRwX2lu
cHV0X3N0cmVhbV9kb25lX2lvKToKKyAgICAgICAgKHNldF9lcnJvcl9pZl9odHRwX2ZhaWxlZCk6
CisgICAgICAgIChyZWFkX2Zyb21fbGVmdG92ZXIpOgorICAgICAgICAoc291cF9odHRwX2lucHV0
X3N0cmVhbV9zZW5kX2ludGVybmFsKToKKyAgICAgICAgKHNlbmRfc3luY19maW5pc2hlZCk6Cisg
ICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmQpOgorICAgICAgICAoc291cF9odHRw
X2lucHV0X3N0cmVhbV9yZWFkKToKKyAgICAgICAgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xv
c2UpOgorICAgICAgICAod3JhcHBlcl9jYWxsYmFjayk6CisgICAgICAgIChzZW5kX2FzeW5jX3Ro
cmVhZCk6CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmNfaW5fdGhy
ZWFkKToKKyAgICAgICAgKHNlbmRfYXN5bmNfZmluaXNoZWQpOgorICAgICAgICAoc291cF9odHRw
X2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jX2ludGVybmFsKToKKyAgICAgICAgKHNvdXBfaHR0cF9p
bnB1dF9zdHJlYW1fc2VuZF9hc3luYyk6CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFt
X3NlbmRfZmluaXNoKToKKyAgICAgICAgKHJlYWRfYXN5bmNfZG9uZSk6CisgICAgICAgIChzb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMpOgorICAgICAgICAoc291cF9odHRwX2lucHV0
X3N0cmVhbV9yZWFkX2ZpbmlzaCk6CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Ns
b3NlX2FzeW5jKToKKyAgICAgICAgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2VfZmluaXNo
KToKKyAgICAgICAgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fdGVsbCk6CisgICAgICAgIChzb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX2Nhbl9zZWVrKToKKyAgICAgICAgKHNvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fc2Vlayk6CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nhbl90cnVuY2F0
ZSk6CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3RydW5jYXRlKToKKyAgICAgICAg
KHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ2V0X21lc3NhZ2UpOgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmg6IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5jOiBB
ZGRlZC4KKyAgICAgICAgKHNvdXBfcmVxdWVzdF9kYXRhX2luaXQpOgorICAgICAgICAoc291cF9y
ZXF1ZXN0X2RhdGFfZmluYWxpemUpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2RhdGFfY2hlY2tf
dXJpKToKKyAgICAgICAgKHVyaV9kZWNvZGVkX2NvcHkpOgorICAgICAgICAoc291cF9yZXF1ZXN0
X2RhdGFfc2VuZCk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfZGF0YV9nZXRfY29udGVudF9sZW5n
dGgpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2RhdGFfZ2V0X2NvbnRlbnRfdHlwZSk6CisgICAg
ICAgIChzb3VwX3JlcXVlc3RfZGF0YV9jbGFzc19pbml0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWRhdGEuaDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmM6IEFkZGVkLgor
ICAgICAgICAoc291cF9yZXF1ZXN0X2ZpbGVfZ2V0X2ZpbGUpOgorICAgICAgICAoc291cF9yZXF1
ZXN0X2ZpbGVfaW5pdCk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfZmlsZV9maW5hbGl6ZSk6Cisg
ICAgICAgIChzb3VwX3JlcXVlc3RfZmlsZV9jaGVja191cmkpOgorICAgICAgICAoc291cF9yZXF1
ZXN0X2ZpbGVfZnRwX21haW5fbG9vcF9xdWl0KToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9maWxl
X2Vuc3VyZV9maWxlX2Z0cCk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfZmlsZV9lbnN1cmVfZmls
ZSk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfZmlsZV9zZW5kKToKKyAgICAgICAgKHNvdXBfcmVx
dWVzdF9maWxlX3NlbmRfYXN5bmNfdGhyZWFkKToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9maWxl
X3NlbmRfYXN5bmMpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2ZpbGVfc2VuZF9maW5pc2gpOgor
ICAgICAgICAoc291cF9yZXF1ZXN0X2ZpbGVfZ2V0X2NvbnRlbnRfbGVuZ3RoKToKKyAgICAgICAg
KHNvdXBfcmVxdWVzdF9maWxlX2dldF9jb250ZW50X3R5cGUpOgorICAgICAgICAoc291cF9yZXF1
ZXN0X2ZpbGVfY2xhc3NfaW5pdCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2Nh
Y2hlL3NvdXAtcmVxdWVzdC1maWxlLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtaHR0cC5jOiBBZGRlZC4KKyAgICAgICAgKHNvdXBf
cmVxdWVzdF9odHRwX2dldF9tZXNzYWdlKToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9odHRwX2lu
aXQpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2h0dHBfY2hlY2tfdXJpKToKKyAgICAgICAgKHNv
dXBfcmVxdWVzdF9odHRwX2ZpbmFsaXplKToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9odHRwX3Nl
bmQpOgorICAgICAgICAoc2VudF9hc3luYyk6CisgICAgICAgIChjb25kaXRpb25hbF9nZXRfcmVh
ZHlfY2IpOgorICAgICAgICAoc2VuZF9hc3luY19jYik6CisgICAgICAgIChzb3VwX3JlcXVlc3Rf
aHR0cF9zZW5kX2FzeW5jKToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9odHRwX3NlbmRfZmluaXNo
KToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9odHRwX2dldF9jb250ZW50X2xlbmd0aCk6CisgICAg
ICAgIChzb3VwX3JlcXVlc3RfaHR0cF9nZXRfY29udGVudF90eXBlKToKKyAgICAgICAgKHNvdXBf
cmVxdWVzdF9odHRwX2NsYXNzX2luaXQpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291
cC9jYWNoZS9zb3VwLXJlcXVlc3QtaHR0cC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LmM6IEFkZGVkLgorICAgICAgICAoc291cF9y
ZXF1ZXN0X2luaXQpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2ZpbmFsaXplKToKKyAgICAgICAg
KHNvdXBfcmVxdWVzdF9zZXRfcHJvcGVydHkpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2dldF9w
cm9wZXJ0eSk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfaW5pdGFibGVfaW5pdCk6CisgICAgICAg
IChzb3VwX3JlcXVlc3RfZGVmYXVsdF9jaGVja191cmkpOgorICAgICAgICAoc291cF9yZXF1ZXN0
X2RlZmF1bHRfc2VuZF9hc3luYyk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfZGVmYXVsdF9zZW5k
X2ZpbmlzaCk6CisgICAgICAgIChzb3VwX3JlcXVlc3Rfc2VuZCk6CisgICAgICAgIChzb3VwX3Jl
cXVlc3Rfc2VuZF9hc3luYyk6CisgICAgICAgIChzb3VwX3JlcXVlc3Rfc2VuZF9maW5pc2gpOgor
ICAgICAgICAoc291cF9yZXF1ZXN0X2NsYXNzX2luaXQpOgorICAgICAgICAoc291cF9yZXF1ZXN0
X2luaXRhYmxlX2ludGVyZmFjZV9pbml0KToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9nZXRfdXJp
KToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9nZXRfc2Vzc2lvbik6CisgICAgICAgIChzb3VwX3Jl
cXVlc3RfZ2V0X2NvbnRlbnRfbGVuZ3RoKToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9nZXRfY29u
dGVudF90eXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1y
ZXF1ZXN0Lmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9z
b3VwLXJlcXVlc3Rlci5jOiBBZGRlZC4KKyAgICAgICAgKHNvdXBfcmVxdWVzdGVyX2luaXQpOgor
ICAgICAgICAoZmluYWxpemUpOgorICAgICAgICAoc291cF9yZXF1ZXN0ZXJfY2xhc3NfaW5pdCk6
CisgICAgICAgIChpbml0X3JlcXVlc3RfdHlwZXMpOgorICAgICAgICAoc291cF9yZXF1ZXN0ZXJf
bmV3KToKKyAgICAgICAgKHNvdXBfcmVxdWVzdGVyX3JlcXVlc3QpOgorICAgICAgICAoc291cF9y
ZXF1ZXN0ZXJfcmVxdWVzdF91cmkpOgorICAgICAgICAoc291cF9zY2hlbWVfaXNfdmFsaWQpOgor
ICAgICAgICAoc291cF9yZXF1ZXN0ZXJfYWRkX3Byb3RvY29sKToKKyAgICAgICAgKHNvdXBfcmVx
dWVzdGVyX3JlbW92ZV9wcm90b2NvbCk6CisgICAgICAgIChzb3VwX2Vycm9yX3F1YXJrKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuaDogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNh
Y2hlLXByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2Nh
Y2hlL3dlYmtpdC9zb3VwLWNhY2hlLmM6IEFkZGVkLgorICAgICAgICAoZ2V0X2NhY2hlYWJpbGl0
eSk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9mcmVlKToKKyAgICAgICAgKGNv
cHlfaGVhZGVycyk6CisgICAgICAgICh1cGRhdGVfaGVhZGVycyk6CisgICAgICAgICh3ZWJraXRf
c291cF9jYWNoZV9lbnRyeV9nZXRfY3VycmVudF9hZ2UpOgorICAgICAgICAod2Via2l0X3NvdXBf
Y2FjaGVfZW50cnlfaXNfZnJlc2hfZW5vdWdoKToKKyAgICAgICAgKHNvdXBfbWVzc2FnZV9nZXRf
Y2FjaGVfa2V5KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X3NldF9mcmVzaG5l
c3MpOgorICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfZW50cnlfbmV3KToKKyAgICAgICAgKHdl
YmtpdF9zb3VwX2NhY2hlX3dyaXRpbmdfZml4dHVyZV9mcmVlKToKKyAgICAgICAgKGNsb3NlX3Jl
YWR5X2NiKToKKyAgICAgICAgKHdyaXRlX3JlYWR5X2NiKToKKyAgICAgICAgKG1zZ19nb3RfY2h1
bmtfY2IpOgorICAgICAgICAobXNnX2dvdF9ib2R5X2NiKToKKyAgICAgICAgKHdlYmtpdF9zb3Vw
X2NhY2hlX2VudHJ5X2RlbGV0ZSk6CisgICAgICAgIChscnVfY29tcGFyZV9mdW5jKToKKyAgICAg
ICAgKGNhY2hlX2FjY2VwdHNfZW50cmllc19vZl9zaXplKToKKyAgICAgICAgKG1ha2Vfcm9vbV9m
b3JfbmV3X2VudHJ5KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2luc2VydF9i
eV9rZXkpOgorICAgICAgICAobXNnX3Jlc3RhcnRlZF9jYik6CisgICAgICAgIChhcHBlbmRfdG9f
cmVhZHlfY2IpOgorICAgICAgICAobXNnX2dvdF9oZWFkZXJzX2NiKToKKyAgICAgICAgKHdlYmtp
dF9zb3VwX2NhY2hlX3NlbmRfcmVzcG9uc2UpOgorICAgICAgICAocmVxdWVzdF9zdGFydGVkKToK
KyAgICAgICAgKGF0dGFjaCk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9zZXNzaW9uX2Zl
YXR1cmVfaW5pdCk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9pbml0KToKKyAgICAgICAg
KHdlYmtpdF9zb3VwX2NhY2hlX2ZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hl
X3NldF9wcm9wZXJ0eSk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9nZXRfcHJvcGVydHkp
OgorICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfY29uc3RydWN0ZWQpOgorICAgICAgICAod2Vi
a2l0X3NvdXBfY2FjaGVfdHlwZV9nZXRfdHlwZSk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNo
ZV9jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX25ldyk6CisgICAgICAg
ICh3ZWJraXRfc291cF9jYWNoZV9oYXNfcmVzcG9uc2UpOgorICAgICAgICAod2Via2l0X3NvdXBf
Y2FjaGVfZ2V0X2NhY2hlYWJpbGl0eSk6CisgICAgICAgIChmb3JjZV9mbHVzaF90aW1lb3V0KToK
KyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2ZsdXNoKToKKyAgICAgICAgKHJlbW92ZV9jYWNo
ZV9pdGVtKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2NsZWFyKToKKyAgICAgICAgKHdl
YmtpdF9zb3VwX2NhY2hlX2dlbmVyYXRlX2NvbmRpdGlvbmFsX3JlcXVlc3QpOgorICAgICAgICAo
cGFja19lbnRyeSk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9kdW1wKToKKyAgICAgICAg
KHdlYmtpdF9zb3VwX2NhY2hlX2xvYWQpOgorICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfc2V0
X21heF9zaXplKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2dldF9tYXhfc2l6ZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLmg6
IEFkZGVkLgorCiAyMDEwLTA5LTE5ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdt
YWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByNjc3NDkuCmRpZmYg
LS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpp
bmRleCAzM2RlZTk0Li5hODI2YmY3IDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFt
CisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTc5LDcgKzc5LDkgQEAgd2ViY29yZWd0
a19jcHBmbGFncyArPSBcCiAJLUkkKHNyY2RpcikvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIgXAogCS1JJChzcmNkaXIpL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrIFwK
IAktSSQoc3JjZGlyKS9XZWJDb3JlL3BsYXRmb3JtL2d0ayBcCi0JLUkkKHNyY2RpcikvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAKKwktSSQoc3JjZGlyKS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cCBcCisJLUkkKHNyY2RpcikvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
Y2FjaGUgXAorCS1JJChzcmNkaXIpL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3dlYmtpdAogCiB3ZWJjb3JlX2J1aWx0X25vc291cmNlcyArPSBcCiAJRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS9Eb2NUeXBlU3RyaW5ncy5jcHAgXApAQCAtMzQ3Myw2ICszNDc1LDIyIEBAIHdlYmNv
cmVndGtfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0
U3RyZWFtRXJyb3IuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0U3Ry
ZWFtSGFuZGxlLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVh
bUhhbmRsZVNvdXAuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9z
b3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uYyBcCisJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmggXAorCVdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0uYyBcCisJV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1odHRwLWlucHV0LXN0cmVhbS5o
IFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0
YS5jIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Qt
ZGF0YS5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVl
c3QtZmlsZS5jIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJl
cXVlc3QtZmlsZS5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3Vw
LXJlcXVlc3QtaHR0cC5jIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9z
b3VwLXJlcXVlc3QtaHR0cC5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNo
ZS9zb3VwLXJlcXVlc3QuYyBcCisJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUv
c291cC1yZXF1ZXN0LmggXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3Nv
dXAtcmVxdWVzdGVyLmMgXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3Nv
dXAtcmVxdWVzdGVyLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dl
YmtpdC9zb3VwLWNhY2hlLmMgXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3dlYmtpdC9zb3VwLWNhY2hlLmggXAogCVdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YUd0
ay5jcHAgXAogCVdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHAgXAogCVdl
YkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5j
IGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5w
dXQtc3RyZWFtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIzYWM2Zgot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3Nv
dXAtZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5jCkBAIC0wLDAgKzEsMTk5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA4IFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2Fs
aWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRp
ZgorCisjaW5jbHVkZSAic291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmgiCisKKyNpbmNsdWRl
IDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5o
PgorCisjZGVmaW5lIElOSVRfU1RSSU5HICI8aHRtbD48aGVhZD48dGl0bGU+T01HITwvdGl0bGU+
PC9oZWFkPjxib2R5Pjx0YWJsZT4iCisjZGVmaW5lIEVYSVRfU1RSSU5HICI8L3RhYmxlPjwvaHRt
bD4iCisKK0dfREVGSU5FX1RZUEUgKFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbSwgc291cF9kaXJl
Y3RvcnlfaW5wdXRfc3RyZWFtLCBHX1RZUEVfSU5QVVRfU1RSRUFNKQorCitzdGF0aWMgU291cEJ1
ZmZlciAqCitzb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fcGFyc2VfaW5mbyAoU291cERpcmVj
dG9yeUlucHV0U3RyZWFtICogc3RyZWFtLAorCQkJCQlHRmlsZUluZm8gKiBpbmZvKQoreworCVNv
dXBCdWZmZXIgKmJ1ZmZlcjsKKwlHU3RyaW5nICpzdHJpbmc7CisJY29uc3QgY2hhciAqczsKKwlj
aGFyICplc2NhcGVkLCAqcGF0aCwgKnhtbF9zdHJpbmc7CisKKwlpZiAoIWdfZmlsZV9pbmZvX2dl
dF9uYW1lIChpbmZvKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzID0gZ19maWxlX2luZm9fZ2V0X2Rp
c3BsYXlfbmFtZSAoaW5mbyk7CisJaWYgKCFzKSB7CisJCXMgPSBnX2ZpbGVfaW5mb19nZXRfbmFt
ZSAoaW5mbyk7CisJCS8qIEZJWE1FOiBjb252ZXJ0IHNvbWVob3c/ICovCisJCWlmICghZ191dGY4
X3ZhbGlkYXRlIChzLCAtMSwgTlVMTCkpCisJCQlyZXR1cm4gTlVMTDsKKwl9CisJc3RyaW5nID0g
Z19zdHJpbmdfbmV3ICgiPHRyPiIpOworCisJeG1sX3N0cmluZyA9IGdfbWFya3VwX2VzY2FwZV90
ZXh0IChzLCAtMSk7CisJZXNjYXBlZCA9IGdfdXJpX2VzY2FwZV9zdHJpbmcgKGdfZmlsZV9pbmZv
X2dldF9uYW1lIChpbmZvKSwgTlVMTCwgRkFMU0UpOworCXBhdGggPSBnX3N0cmNvbmNhdCAoc3Ry
ZWFtLT51cmksICIvIiwgZXNjYXBlZCwgTlVMTCk7CisJZ19mcmVlIChlc2NhcGVkKTsKKwlnX3N0
cmluZ19hcHBlbmRfcHJpbnRmIChzdHJpbmcsICI8dGQ+PGEgaHJlZj1cIiVzXCI+JXM8L2E+PC90
ZD4iLCBwYXRoLCB4bWxfc3RyaW5nKTsKKwlnX2ZyZWUgKHBhdGgpOworCWdfZnJlZSAoeG1sX3N0
cmluZyk7CisJZ19zdHJpbmdfYXBwZW5kIChzdHJpbmcsICI8L3RyPiIpOworCisJYnVmZmVyID0g
c291cF9idWZmZXJfbmV3IChTT1VQX01FTU9SWV9UQUtFLCBzdHJpbmctPnN0ciwgc3RyaW5nLT5s
ZW4pOworCWdfc3RyaW5nX2ZyZWUgKHN0cmluZywgRkFMU0UpOworCisJcmV0dXJuIGJ1ZmZlcjsK
K30KKworc3RhdGljIFNvdXBCdWZmZXIgKgorc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX3Jl
YWRfbmV4dF9maWxlIChTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW0gICpzdHJlYW0sCisJCQkJCSAg
ICBHQ2FuY2VsbGFibGUgICAgICAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkJICAgIEdFcnJv
ciAgICAgICAgICAgICAgICAgICAqKmVycm9yKQoreworCUdGaWxlSW5mbyAqaW5mbzsKKwlTb3Vw
QnVmZmVyICpidWZmZXI7CisJR0Vycm9yICplcnIgPSBOVUxMOworCisJZG8geworCQlpbmZvID0g
Z19maWxlX2VudW1lcmF0b3JfbmV4dF9maWxlIChzdHJlYW0tPmVudW1lcmF0b3IsIGNhbmNlbGxh
YmxlLCAmZXJyKTsKKwkJaWYgKGluZm8gPT0gTlVMTCkgeworCQkJaWYgKGVycikgeworCQkJCWdf
cHJvcGFnYXRlX2Vycm9yIChlcnJvciwgZXJyKTsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0gZWxz
ZSBpZiAoIXN0cmVhbS0+ZG9uZSkgeworCQkJCXN0cmVhbS0+ZG9uZSA9IFRSVUU7CisJCQkJcmV0
dXJuIHNvdXBfYnVmZmVyX25ldyAoU09VUF9NRU1PUllfU1RBVElDLAorCQkJCQkJCUVYSVRfU1RS
SU5HLAorCQkJCQkJCXNpemVvZiAoRVhJVF9TVFJJTkcpKTsKKwkJCX0gZWxzZSB7CisJCQkJcmV0
dXJuIE5VTEw7CisJCQl9CisJCX0KKworCQlidWZmZXIgPSBzb3VwX2RpcmVjdG9yeV9pbnB1dF9z
dHJlYW1fcGFyc2VfaW5mbyAoc3RyZWFtLCBpbmZvKTsKKwl9IHdoaWxlIChidWZmZXIgPT0gTlVM
TCk7CisKKwlyZXR1cm4gYnVmZmVyOworfQorCitzdGF0aWMgZ3NzaXplCitzb3VwX2RpcmVjdG9y
eV9pbnB1dF9zdHJlYW1fcmVhZCAoR0lucHV0U3RyZWFtICAqaW5wdXQsCisJCQkJICB2b2lkICAg
ICAgICAgICpidWZmZXIsCisJCQkJICBnc2l6ZSBjb3VudCwKKwkJCQkgIEdDYW5jZWxsYWJsZSAg
KmNhbmNlbGxhYmxlLAorCQkJCSAgR0Vycm9yICAgICAgICoqZXJyb3IpCit7CisJU291cERpcmVj
dG9yeUlucHV0U3RyZWFtICpzdHJlYW0gPSBTT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0gKGlu
cHV0KTsKKwlnc3NpemUgdG90YWwsIHNpemU7CisKKwlmb3IgKHRvdGFsID0gMDsgdG90YWwgPCBj
b3VudDsgdG90YWwgKz0gc2l6ZSkgeworCQlpZiAoc3RyZWFtLT5idWZmZXIgPT0gTlVMTCkgewor
CQkJc3RyZWFtLT5idWZmZXIgPSBzb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fcmVhZF9uZXh0
X2ZpbGUgKHN0cmVhbSwgY2FuY2VsbGFibGUsIGVycm9yKTsKKwkJCWlmIChzdHJlYW0tPmJ1ZmZl
ciA9PSBOVUxMKSB7CisJCQkJLyogRklYTUU6IElzIHRoaXMgY29ycmVjdCBvciBzaG91bGQgd2Ug
Zm9yd2FyZCB0aGUgZXJyb3I/ICovCisJCQkJaWYgKHRvdGFsKQorCQkJCQlnX2NsZWFyX2Vycm9y
IChlcnJvcik7CisJCQkJcmV0dXJuIHRvdGFsOworCQkJfQorCQl9CisKKwkJc2l6ZSA9IE1JTiAo
c3RyZWFtLT5idWZmZXItPmxlbmd0aCwgY291bnQgLSB0b3RhbCk7CisJCW1lbWNweSAoKGNoYXIg
KilidWZmZXIgKyB0b3RhbCwgc3RyZWFtLT5idWZmZXItPmRhdGEsIHNpemUpOworCQlpZiAoc2l6
ZSA9PSBzdHJlYW0tPmJ1ZmZlci0+bGVuZ3RoKSB7CisJCQlzb3VwX2J1ZmZlcl9mcmVlIChzdHJl
YW0tPmJ1ZmZlcik7CisJCQlzdHJlYW0tPmJ1ZmZlciA9IE5VTEw7CisJCX0gZWxzZSB7CisJCQlT
b3VwQnVmZmVyICpzdWIgPSBzb3VwX2J1ZmZlcl9uZXdfc3ViYnVmZmVyIChzdHJlYW0tPmJ1ZmZl
ciwKKwkJCQkJCQkJICAgICBzaXplLAorCQkJCQkJCQkgICAgIHN0cmVhbS0+YnVmZmVyLT5sZW5n
dGggLSBzaXplKTsKKwkJCXNvdXBfYnVmZmVyX2ZyZWUgKHN0cmVhbS0+YnVmZmVyKTsKKwkJCXN0
cmVhbS0+YnVmZmVyID0gc3ViOworCQl9CisJfQorCisJcmV0dXJuIHRvdGFsOworfQorCitzdGF0
aWMgZ2Jvb2xlYW4KK3NvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9jbG9zZSAoR0lucHV0U3Ry
ZWFtICAqaW5wdXQsCisJCQkJICAgR0NhbmNlbGxhYmxlICAqY2FuY2VsbGFibGUsCisJCQkJICAg
R0Vycm9yICAgICAgICoqZXJyb3IpCit7CisJU291cERpcmVjdG9yeUlucHV0U3RyZWFtICpzdHJl
YW0gPSBTT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0gKGlucHV0KTsKKwlnYm9vbGVhbiByZXN1
bHQ7CisKKwlpZiAoc3RyZWFtLT5idWZmZXIpIHsKKwkJc291cF9idWZmZXJfZnJlZSAoc3RyZWFt
LT5idWZmZXIpOworCQlzdHJlYW0tPmJ1ZmZlciA9IE5VTEw7CisJfQorCisJcmVzdWx0ID0gZ19m
aWxlX2VudW1lcmF0b3JfY2xvc2UgKHN0cmVhbS0+ZW51bWVyYXRvciwKKwkJCQkJICBjYW5jZWxs
YWJsZSwKKwkJCQkJICBlcnJvcik7CisJZ19vYmplY3RfdW5yZWYgKHN0cmVhbS0+ZW51bWVyYXRv
cik7CisJc3RyZWFtLT5lbnVtZXJhdG9yID0gTlVMTDsKKworCWdfZnJlZSAoc3RyZWFtLT51cmkp
OworCXN0cmVhbS0+dXJpID0gTlVMTDsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2
b2lkCitzb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fY2xhc3NfaW5pdCAoU291cERpcmVjdG9y
eUlucHV0U3RyZWFtQ2xhc3MgKnN0cmVhbV9jbGFzcykKK3sKKwlHSW5wdXRTdHJlYW1DbGFzcyAq
aW5wdXRzdHJlYW1fY2xhc3MgPSBHX0lOUFVUX1NUUkVBTV9DTEFTUyAoc3RyZWFtX2NsYXNzKTsK
KworCWlucHV0c3RyZWFtX2NsYXNzLT5yZWFkX2ZuID0gc291cF9kaXJlY3RvcnlfaW5wdXRfc3Ry
ZWFtX3JlYWQ7CisJaW5wdXRzdHJlYW1fY2xhc3MtPmNsb3NlX2ZuID0gc291cF9kaXJlY3Rvcnlf
aW5wdXRfc3RyZWFtX2Nsb3NlOworfQorCitzdGF0aWMgdm9pZAorc291cF9kaXJlY3RvcnlfaW5w
dXRfc3RyZWFtX2luaXQgKFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbSAqc3RyZWFtKQoreworCXN0
cmVhbS0+YnVmZmVyID0gc291cF9idWZmZXJfbmV3IChTT1VQX01FTU9SWV9TVEFUSUMsCisJCQkJ
CSAgSU5JVF9TVFJJTkcsCisJCQkJCSAgc2l6ZW9mIChJTklUX1NUUklORykpOworfQorCitHSW5w
dXRTdHJlYW0gKgorc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX25ldyAoR0ZpbGVFbnVtZXJh
dG9yICplbnVtZXJhdG9yLAorCQkJCSBTb3VwVVJJICAgICAgICAgKnVyaSkKK3sKKwlHSW5wdXRT
dHJlYW0gKnN0cmVhbTsKKworCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHX0lTX0ZJTEVfRU5VTUVS
QVRPUiAoZW51bWVyYXRvciksIE5VTEwpOworCWdfcmV0dXJuX3ZhbF9pZl9mYWlsICh1cmkgIT0g
TlVMTCwgTlVMTCk7CisKKwlzdHJlYW0gPSBnX29iamVjdF9uZXcgKFNPVVBfVFlQRV9ESVJFQ1RP
UllfSU5QVVRfU1RSRUFNLCBOVUxMKTsKKworCVNPVVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTSAo
c3RyZWFtKS0+ZW51bWVyYXRvciA9IGdfb2JqZWN0X3JlZiAoZW51bWVyYXRvcik7CisJU09VUF9E
SVJFQ1RPUllfSU5QVVRfU1RSRUFNIChzdHJlYW0pLT51cmkgPSBzb3VwX3VyaV90b19zdHJpbmcg
KHVyaSwgRkFMU0UpOworCisJcmV0dXJuIHN0cmVhbTsKK30KKwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFt
LmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1p
bnB1dC1zdHJlYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDMyM2Qy
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUv
c291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdh
bGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZm5kZWYgU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNX0gKKyNkZWZpbmUg
U09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNX0ggMQorCisjaW5jbHVkZSA8Z2lvL2dpby5oPgor
I2luY2x1ZGUgPGxpYnNvdXAvc291cC10eXBlcy5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC1t
ZXNzYWdlLWJvZHkuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFNPVVBfVFlQRV9ESVJF
Q1RPUllfSU5QVVRfU1RSRUFNICAgICAgICAgICAgKHNvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVh
bV9nZXRfdHlwZSAoKSkKKyNkZWZpbmUgU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNKG9iaikg
ICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBTT1VQX1RZUEVf
RElSRUNUT1JZX0lOUFVUX1NUUkVBTSwgU291cERpcmVjdG9yeUlucHV0U3RyZWFtKSkKKyNkZWZp
bmUgU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NI
RUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFNPVVBfVFlQRV9ESVJFQ1RPUllfSU5QVVRfU1RSRUFN
LCBTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW1DbGFzcykpCisjZGVmaW5lIFNPVVBfSVNfRElSRUNU
T1JZX0lOUFVUX1NUUkVBTShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBF
ICgob2JqKSwgU09VUF9UWVBFX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0pKQorI2RlZmluZSBTT1VQ
X0lTX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU1fQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfVFlQRSAoKG9iaiksIFNPVVBfVFlQRV9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNKSkKKyNkZWZp
bmUgU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lO
U1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIFNPVVBfVFlQRV9ESVJFQ1RPUllfSU5QVVRfU1RSRUFN
LCBTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW1DbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9Tb3Vw
RGlyZWN0b3J5SW5wdXRTdHJlYW0gU291cERpcmVjdG9yeUlucHV0U3RyZWFtOwordHlwZWRlZiBz
dHJ1Y3QgX1NvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbUNsYXNzIFNvdXBEaXJlY3RvcnlJbnB1dFN0
cmVhbUNsYXNzOworCitzdHJ1Y3QgX1NvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbSB7CisJR0lucHV0
U3RyZWFtIHBhcmVudDsKKworCUdGaWxlRW51bWVyYXRvciAqZW51bWVyYXRvcjsKKwljaGFyICp1
cmk7CisJU291cEJ1ZmZlciAqYnVmZmVyOworCWdib29sZWFuIGRvbmU7Cit9OworCitzdHJ1Y3Qg
X1NvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbUNsYXNzIHsKKwlHSW5wdXRTdHJlYW1DbGFzcyBwYXJl
bnRfY2xhc3M7Cit9OworCitHVHlwZSAgICAgICAgICBzb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJl
YW1fZ2V0X3R5cGUgKHZvaWQpOworCitHSW5wdXRTdHJlYW0gKnNvdXBfZGlyZWN0b3J5X2lucHV0
X3N0cmVhbV9uZXcgKEdGaWxlRW51bWVyYXRvciAqZW51bWVyYXRvciwKKwkJCQkJICAgICAgIFNv
dXBVUkkgICAgICAgICAqdXJpKTsKKworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogU09VUF9E
SVJFQ1RPUllfSU5QVVRfU1RSRUFNX0ggKi8KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0uYyBiL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0uYwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjIxNmI2Ci0tLSAvZGV2L251bGwKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1odHRwLWlucHV0LXN0cmVh
bS5jCkBAIC0wLDAgKzEsOTIxIEBACisvKiBzb3VwLWlucHV0LXN0cmVhbS5jLCBiYXNlZCBvbiBn
c29ja2V0aW5wdXRzdHJlYW0uYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA3IFJlZCBI
YXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNB
LgorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisj
aW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdpby9naW8uaD4KKworI2luY2x1ZGUgPGxpYnNv
dXAvc291cC5oPgorCisjaW5jbHVkZSAic291cC1odHRwLWlucHV0LXN0cmVhbS5oIgorCitzdGF0
aWMgdm9pZCBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlZWthYmxlX2lmYWNlX2luaXQgKEdTZWVr
YWJsZUlmYWNlICpzZWVrYWJsZV9pZmFjZSk7CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFIChT
b3VwSFRUUElucHV0U3RyZWFtLCBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtLCBHX1RZUEVfSU5QVVRf
U1RSRUFNLAorCQkJIEdfSU1QTEVNRU5UX0lOVEVSRkFDRSAoR19UWVBFX1NFRUtBQkxFLAorCQkJ
CQkJc291cF9odHRwX2lucHV0X3N0cmVhbV9zZWVrYWJsZV9pZmFjZV9pbml0KSkKKwordHlwZWRl
ZiB2b2lkICgqU291cEhUVFBJbnB1dFN0cmVhbUNhbGxiYWNrKShHSW5wdXRTdHJlYW0gKik7CisK
K3R5cGVkZWYgc3RydWN0IHsKKwlTb3VwU2Vzc2lvbiAqc2Vzc2lvbjsKKwlHTWFpbkNvbnRleHQg
KmFzeW5jX2NvbnRleHQ7CisJU291cE1lc3NhZ2UgKm1zZzsKKwlnYm9vbGVhbiBnb3RfaGVhZGVy
cywgZmluaXNoZWQ7CisJZ29mZnNldCBvZmZzZXQ7CisKKwlHQ2FuY2VsbGFibGUgKmNhbmNlbGxh
YmxlOworCUdTb3VyY2UgKmNhbmNlbF93YXRjaDsKKwlTb3VwSFRUUElucHV0U3RyZWFtQ2FsbGJh
Y2sgZ290X2hlYWRlcnNfY2I7CisJU291cEhUVFBJbnB1dFN0cmVhbUNhbGxiYWNrIGdvdF9jaHVu
a19jYjsKKwlTb3VwSFRUUElucHV0U3RyZWFtQ2FsbGJhY2sgZmluaXNoZWRfY2I7CisJU291cEhU
VFBJbnB1dFN0cmVhbUNhbGxiYWNrIGNhbmNlbGxlZF9jYjsKKworCWd1Y2hhciAqbGVmdG92ZXJf
YnVmZmVyOworCWdzaXplIGxlZnRvdmVyX2J1ZnNpemUsIGxlZnRvdmVyX29mZnNldDsKKworCWd1
Y2hhciAqY2FsbGVyX2J1ZmZlcjsKKwlnc2l6ZSBjYWxsZXJfYnVmc2l6ZSwgY2FsbGVyX25yZWFk
OworCUdBc3luY1JlYWR5Q2FsbGJhY2sgb3V0c3RhbmRpbmdfY2FsbGJhY2s7CisJR1NpbXBsZUFz
eW5jUmVzdWx0ICpyZXN1bHQ7Cit9IFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlOworI2RlZmlu
ZSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFKG8pIChHX1RZUEVfSU5TVEFOQ0Vf
R0VUX1BSSVZBVEUgKChvKSwgU09VUF9UWVBFX0hUVFBfSU5QVVRfU1RSRUFNLCBTb3VwSFRUUElu
cHV0U3RyZWFtUHJpdmF0ZSkpCisKKworc3RhdGljIGdzc2l6ZSAgIHNvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fcmVhZCAoR0lucHV0U3RyZWFtICAgICAgICAgKnN0cmVhbSwKKwkJCQkJICAgICB2b2lk
ICAgICAgICAgICAgICAgICAqYnVmZmVyLAorCQkJCQkgICAgIGdzaXplIGNvdW50LAorCQkJCQkg
ICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkJICAgICBHRXJyb3Ig
ICAgICAgICAgICAgICoqZXJyb3IpOworc3RhdGljIGdib29sZWFuIHNvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fY2xvc2UgKEdJbnB1dFN0cmVhbSAgICAgICAgICpzdHJlYW0sCisJCQkJCSAgICAgIEdD
YW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkJICAgICAgR0Vycm9yICAgICAg
ICAgICAgICAqKmVycm9yKTsKK3N0YXRpYyB2b2lkICAgICBzb3VwX2h0dHBfaW5wdXRfc3RyZWFt
X3JlYWRfYXN5bmMgKEdJbnB1dFN0cmVhbSAgICAgICAgICpzdHJlYW0sCisJCQkJCQkgICB2b2lk
ICAgICAgICAgICAgICAgICAqYnVmZmVyLAorCQkJCQkJICAgZ3NpemUgY291bnQsCisJCQkJCQkg
ICBpbnQgaW9fcHJpb3JpdHksCisJCQkJCQkgICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2Vs
bGFibGUsCisJCQkJCQkgICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAorCQkJCQkJICAg
Z3BvaW50ZXIgZGF0YSk7CitzdGF0aWMgZ3NzaXplICAgc291cF9odHRwX2lucHV0X3N0cmVhbV9y
ZWFkX2ZpbmlzaCAoR0lucHV0U3RyZWFtICAgICAgICAgKnN0cmVhbSwKKwkJCQkJCSAgICBHQXN5
bmNSZXN1bHQgICAgICAgICAqcmVzdWx0LAorCQkJCQkJICAgIEdFcnJvciAgICAgICAgICAgICAg
KiplcnJvcik7CitzdGF0aWMgdm9pZCAgICAgc291cF9odHRwX2lucHV0X3N0cmVhbV9jbG9zZV9h
c3luYyAoR0lucHV0U3RyZWFtICAgICAgICAgKnN0cmVhbSwKKwkJCQkJCSAgICBpbnQgaW9fcHJp
b3JpdHksCisJCQkJCQkgICAgR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJ
CQkJICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCisJCQkJCQkgICAgZ3BvaW50ZXIg
ZGF0YSk7CitzdGF0aWMgZ2Jvb2xlYW4gc291cF9odHRwX2lucHV0X3N0cmVhbV9jbG9zZV9maW5p
c2ggKEdJbnB1dFN0cmVhbSAgICAgICAgICpzdHJlYW0sCisJCQkJCQkgICAgIEdBc3luY1Jlc3Vs
dCAgICAgICAgICpyZXN1bHQsCisJCQkJCQkgICAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJv
cik7CisKK3N0YXRpYyBnb2Zmc2V0ICBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3RlbGwgKEdTZWVr
YWJsZSAgICAgICAgICAgICpzZWVrYWJsZSk7CisKK3N0YXRpYyBnYm9vbGVhbiBzb3VwX2h0dHBf
aW5wdXRfc3RyZWFtX2Nhbl9zZWVrIChHU2Vla2FibGUgICAgICAgICAgICAqc2Vla2FibGUpOwor
c3RhdGljIGdib29sZWFuIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VlayAoR1NlZWthYmxlICAg
ICAgICAgICAgKnNlZWthYmxlLAorCQkJCQkgICAgIGdvZmZzZXQgb2Zmc2V0LAorCQkJCQkgICAg
IEdTZWVrVHlwZSB0eXBlLAorCQkJCQkgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxs
YWJsZSwKKwkJCQkJICAgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpOworCitzdGF0aWMg
Z2Jvb2xlYW4gc291cF9odHRwX2lucHV0X3N0cmVhbV9jYW5fdHJ1bmNhdGUgKEdTZWVrYWJsZSAg
ICAgICAgICAgICpzZWVrYWJsZSk7CitzdGF0aWMgZ2Jvb2xlYW4gc291cF9odHRwX2lucHV0X3N0
cmVhbV90cnVuY2F0ZSAoR1NlZWthYmxlICAgICAgICAgICAgKnNlZWthYmxlLAorCQkJCQkJIGdv
ZmZzZXQgb2Zmc2V0LAorCQkJCQkJIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwK
KwkJCQkJCSBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpOworCitzdGF0aWMgdm9pZCBzb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX2dvdF9oZWFkZXJzIChTb3VwTWVzc2FnZSAqbXNnLCBncG9pbnRl
ciBzdHJlYW0pOworc3RhdGljIHZvaWQgc291cF9odHRwX2lucHV0X3N0cmVhbV9nb3RfY2h1bmsg
KFNvdXBNZXNzYWdlICptc2csIFNvdXBCdWZmZXIgKmNodW5rLCBncG9pbnRlciBzdHJlYW0pOwor
c3RhdGljIHZvaWQgc291cF9odHRwX2lucHV0X3N0cmVhbV9maW5pc2hlZCAoU291cE1lc3NhZ2Ug
Km1zZywgZ3BvaW50ZXIgc3RyZWFtKTsKKworc3RhdGljIHZvaWQKK3NvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fZmluYWxpemUgKEdPYmplY3QgKm9iamVjdCkKK3sKKwlTb3VwSFRUUElucHV0U3RyZWFt
ICpzdHJlYW0gPSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNIChvYmplY3QpOworCVNvdXBIVFRQSW5w
dXRTdHJlYW1Qcml2YXRlICpwcml2ID0gU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFU
RSAoc3RyZWFtKTsKKworCWdfb2JqZWN0X3VucmVmIChwcml2LT5zZXNzaW9uKTsKKworCWdfc2ln
bmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyAocHJpdi0+bXNnLCBHX0NBTExCQUNLIChz
b3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dvdF9oZWFkZXJzKSwgc3RyZWFtKTsKKwlnX3NpZ25hbF9o
YW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMgKHByaXYtPm1zZywgR19DQUxMQkFDSyAoc291cF9o
dHRwX2lucHV0X3N0cmVhbV9nb3RfY2h1bmspLCBzdHJlYW0pOworCWdfc2lnbmFsX2hhbmRsZXJz
X2Rpc2Nvbm5lY3RfYnlfZnVuYyAocHJpdi0+bXNnLCBHX0NBTExCQUNLIChzb3VwX2h0dHBfaW5w
dXRfc3RyZWFtX2ZpbmlzaGVkKSwgc3RyZWFtKTsKKwlnX29iamVjdF91bnJlZiAocHJpdi0+bXNn
KTsKKwlnX2ZyZWUgKHByaXYtPmxlZnRvdmVyX2J1ZmZlcik7CisKKwlpZiAoR19PQkpFQ1RfQ0xB
U1MgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcGFyZW50X2NsYXNzKS0+ZmluYWxpemUpCisJCSgq
R19PQkpFQ1RfQ0xBU1MgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcGFyZW50X2NsYXNzKS0+Zmlu
YWxpemUpKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFt
X2NsYXNzX2luaXQgKFNvdXBIVFRQSW5wdXRTdHJlYW1DbGFzcyAqa2xhc3MpCit7CisJR09iamVj
dENsYXNzICpnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKGtsYXNzKTsKKwlHSW5wdXRT
dHJlYW1DbGFzcyAqc3RyZWFtX2NsYXNzID0gR19JTlBVVF9TVFJFQU1fQ0xBU1MgKGtsYXNzKTsK
KworCWdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSAoa2xhc3MsIHNpemVvZiAoU291cEhUVFBJbnB1
dFN0cmVhbVByaXZhdGUpKTsKKworCWdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gc291cF9odHRw
X2lucHV0X3N0cmVhbV9maW5hbGl6ZTsKKworCXN0cmVhbV9jbGFzcy0+cmVhZF9mbiA9IHNvdXBf
aHR0cF9pbnB1dF9zdHJlYW1fcmVhZDsKKwlzdHJlYW1fY2xhc3MtPmNsb3NlX2ZuID0gc291cF9o
dHRwX2lucHV0X3N0cmVhbV9jbG9zZTsKKwlzdHJlYW1fY2xhc3MtPnJlYWRfYXN5bmMgPSBzb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmM7CisJc3RyZWFtX2NsYXNzLT5yZWFkX2Zpbmlz
aCA9IHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVhZF9maW5pc2g7CisJc3RyZWFtX2NsYXNzLT5j
bG9zZV9hc3luYyA9IHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2VfYXN5bmM7CisJc3RyZWFt
X2NsYXNzLT5jbG9zZV9maW5pc2ggPSBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlX2Zpbmlz
aDsKK30KKworc3RhdGljIHZvaWQKK3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2Vla2FibGVfaWZh
Y2VfaW5pdCAoR1NlZWthYmxlSWZhY2UgKnNlZWthYmxlX2lmYWNlKQoreworCXNlZWthYmxlX2lm
YWNlLT50ZWxsID0gc291cF9odHRwX2lucHV0X3N0cmVhbV90ZWxsOworCXNlZWthYmxlX2lmYWNl
LT5jYW5fc2VlayA9IHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2FuX3NlZWs7CisJc2Vla2FibGVf
aWZhY2UtPnNlZWsgPSBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlZWs7CisJc2Vla2FibGVfaWZh
Y2UtPmNhbl90cnVuY2F0ZSA9IHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2FuX3RydW5jYXRlOwor
CXNlZWthYmxlX2lmYWNlLT50cnVuY2F0ZV9mbiA9IHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fdHJ1
bmNhdGU7Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2luaXQgKFNv
dXBIVFRQSW5wdXRTdHJlYW0gKnN0cmVhbSkKK3sKKwk7Cit9CisKK3N0YXRpYyB2b2lkCitzb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX3F1ZXVlX21lc3NhZ2UgKFNvdXBIVFRQSW5wdXRTdHJlYW0gKnN0
cmVhbSkKK3sKKwlTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFNPVVBfSFRUUF9J
TlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7CisKKwlwcml2LT5nb3RfaGVhZGVycyA9
IHByaXYtPmZpbmlzaGVkID0gRkFMU0U7CisKKwkvKiBBZGQgYW4gZXh0cmEgcmVmIHNpbmNlIHNv
dXBfc2Vzc2lvbl9xdWV1ZV9tZXNzYWdlIHN0ZWFscyBvbmUgKi8KKwlnX29iamVjdF9yZWYgKHBy
aXYtPm1zZyk7CisJc291cF9zZXNzaW9uX3F1ZXVlX21lc3NhZ2UgKHByaXYtPnNlc3Npb24sIHBy
aXYtPm1zZywgTlVMTCwgTlVMTCk7Cit9CisKKy8qKgorICogc291cF9odHRwX2lucHV0X3N0cmVh
bV9uZXc6CisgKiBAc2Vzc2lvbjogdGhlICNTb3VwU2Vzc2lvbiB0byB1c2UKKyAqIEBtc2c6IHRo
ZSAjU291cE1lc3NhZ2Ugd2hvc2UgcmVzcG9uc2Ugd2lsbCBiZSBzdHJlYW1lZAorICoKKyAqIFBy
ZXBhcmVzIHRvIHNlbmQgQG1zZyBvdmVyIEBzZXNzaW9uLCBhbmQgcmV0dXJucyBhICNHSW5wdXRT
dHJlYW0KKyAqIHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVhZCB0aGUgcmVzcG9uc2UuCisgKgorICog
QG1zZyBtYXkgbm90IGJlIHNlbnQgdW50aWwgdGhlIGZpcnN0IHJlYWQgY2FsbDsgaWYgeW91IG5l
ZWQgdG8gbG9vaworICogYXQgdGhlIHN0YXR1cyBjb2RlIG9yIHJlc3BvbnNlIGhlYWRlcnMgYmVm
b3JlIHJlYWRpbmcgdGhlIGJvZHksIHlvdQorICogY2FuIHVzZSBzb3VwX2h0dHBfaW5wdXRfc3Ry
ZWFtX3NlbmQoKSBvciBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmMoKQorICogdG8g
Zm9yY2UgdGhlIG1lc3NhZ2UgdG8gYmUgc2VudCBhbmQgdGhlIHJlc3BvbnNlIGhlYWRlcnMgcmVh
ZC4KKyAqCisgKiBJZiBAbXNnIGdldHMgYSBub24tMnh4IHJlc3VsdCwgdGhlIGZpcnN0IHJlYWQg
KG9yIHNlbmQpIHdpbGwgcmV0dXJuCisgKiBhbiBlcnJvciB3aXRoIHR5cGUgJVNPVVBfSFRUUF9J
TlBVVF9TVFJFQU1fSFRUUF9FUlJPUi4KKyAqCisgKiBJbnRlcm5hbGx5LCAjU291cEhUVFBJbnB1
dFN0cmVhbSBpcyBpbXBsZW1lbnRlZCB1c2luZyBhc3luY2hyb25vdXMgSS9PLAorICogc28gaWYg
eW91IGFyZSB1c2luZyB0aGUgc3luY2hyb25vdXMgQVBJIChlZywKKyAqIGdfaW5wdXRfc3RyZWFt
X3JlYWQoKSksIHlvdSBzaG91bGQgY3JlYXRlIGEgbmV3ICNHTWFpbkNvbnRleHQgYW5kCisgKiBz
ZXQgaXQgYXMgdGhlICVTT1VQX1NFU1NJT05fQVNZTkNfQ09OVEVYVCBwcm9wZXJ0eSBvbiBAc2Vz
c2lvbi4gKElmCisgKiB5b3UgZG9uJ3QsIHRoZW4gc3luY2hyb25vdXMgI0dJbnB1dFN0cmVhbSBj
YWxscyB3aWxsIGNhdXNlIHRoZSBtYWluCisgKiBsb29wIHRvIGJlIHJ1biByZWN1cnNpdmVseS4p
IFRoZSBhc3luYyAjR0lucHV0U3RyZWFtIEFQSSB3b3JrcyBmaW5lCisgKiB3aXRoICVTT1VQX1NF
U1NJT05fQVNZTkNfQ09OVEVYVCBlaXRoZXIgc2V0IG9yIHVuc2V0LgorICoKKyAqIFJldHVybnM6
IGEgbmV3ICNHSW5wdXRTdHJlYW0uCisgKiovCitTb3VwSFRUUElucHV0U3RyZWFtICoKK3NvdXBf
aHR0cF9pbnB1dF9zdHJlYW1fbmV3IChTb3VwU2Vzc2lvbiAqc2Vzc2lvbiwgU291cE1lc3NhZ2Ug
Km1zZykKK3sKKwlTb3VwSFRUUElucHV0U3RyZWFtICpzdHJlYW07CisJU291cEhUVFBJbnB1dFN0
cmVhbVByaXZhdGUgKnByaXY7CisKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoU09VUF9JU19NRVNT
QUdFIChtc2cpLCBOVUxMKTsKKworCXN0cmVhbSA9IGdfb2JqZWN0X25ldyAoU09VUF9UWVBFX0hU
VFBfSU5QVVRfU1RSRUFNLCBOVUxMKTsKKwlwcml2ID0gU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9H
RVRfUFJJVkFURSAoc3RyZWFtKTsKKworCXByaXYtPnNlc3Npb24gPSBnX29iamVjdF9yZWYgKHNl
c3Npb24pOworCXByaXYtPmFzeW5jX2NvbnRleHQgPSBzb3VwX3Nlc3Npb25fZ2V0X2FzeW5jX2Nv
bnRleHQgKHNlc3Npb24pOworCXByaXYtPm1zZyA9IGdfb2JqZWN0X3JlZiAobXNnKTsKKworCWdf
c2lnbmFsX2Nvbm5lY3QgKG1zZywgImdvdF9oZWFkZXJzIiwKKwkJCSAgR19DQUxMQkFDSyAoc291
cF9odHRwX2lucHV0X3N0cmVhbV9nb3RfaGVhZGVycyksIHN0cmVhbSk7CisJZ19zaWduYWxfY29u
bmVjdCAobXNnLCAiZ290X2NodW5rIiwKKwkJCSAgR19DQUxMQkFDSyAoc291cF9odHRwX2lucHV0
X3N0cmVhbV9nb3RfY2h1bmspLCBzdHJlYW0pOworCWdfc2lnbmFsX2Nvbm5lY3QgKG1zZywgImZp
bmlzaGVkIiwKKwkJCSAgR19DQUxMQkFDSyAoc291cF9odHRwX2lucHV0X3N0cmVhbV9maW5pc2hl
ZCksIHN0cmVhbSk7CisKKwlzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3F1ZXVlX21lc3NhZ2UgKHN0
cmVhbSk7CisJcmV0dXJuIHN0cmVhbTsKK30KKworc3RhdGljIHZvaWQKK3NvdXBfaHR0cF9pbnB1
dF9zdHJlYW1fZ290X2hlYWRlcnMgKFNvdXBNZXNzYWdlICptc2csIGdwb2ludGVyIHN0cmVhbSkK
K3sKKwlTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFNPVVBfSFRUUF9JTlBVVF9T
VFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7CisKKwkvKiBJZiB0aGUgc3RhdHVzIGlzIHVuc3Vj
Y2Vzc2Z1bCwgd2UganVzdCBpZ25vcmUgdGhlIHNpZ25hbCBhbmQgbGV0CisJICogbGlic291cCBr
ZWVwIGdvaW5nIChldmVudHVhbGx5IGVpdGhlciBpdCB3aWxsIHJlcXVldWUgdGhlIHJlcXVlc3QK
KwkgKiAoYWZ0ZXIgaGFuZGxpbmcgYXV0aGVudGljYXRpb24vcmVkaXJlY3Rpb24pLCBvciBlbHNl
IHRoZQorCSAqICJmaW5pc2hlZCIgaGFuZGxlciB3aWxsIHJ1bikuCisJICovCisJaWYgKCFTT1VQ
X1NUQVRVU19JU19TVUNDRVNTRlVMIChtc2ctPnN0YXR1c19jb2RlKSkKKwkJcmV0dXJuOworCisJ
cHJpdi0+Z290X2hlYWRlcnMgPSBUUlVFOworCWlmICghcHJpdi0+Y2FsbGVyX2J1ZmZlcikgewor
CQkvKiBOb3QgcmVhZHkgdG8gcmVhZCB0aGUgYm9keSB5ZXQgKi8KKwkJc291cF9zZXNzaW9uX3Bh
dXNlX21lc3NhZ2UgKHByaXYtPnNlc3Npb24sIG1zZyk7CisJfQorCisJaWYgKHByaXYtPmdvdF9o
ZWFkZXJzX2NiKQorCQlwcml2LT5nb3RfaGVhZGVyc19jYiAoc3RyZWFtKTsKK30KKworc3RhdGlj
IHZvaWQKK3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ290X2NodW5rIChTb3VwTWVzc2FnZSAqbXNn
LCBTb3VwQnVmZmVyICpjaHVua19idWZmZXIsCisJCQkJICBncG9pbnRlciBzdHJlYW0pCit7CisJ
U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFN
X0dFVF9QUklWQVRFIChzdHJlYW0pOworCWNvbnN0IGdjaGFyICpjaHVuayA9IGNodW5rX2J1ZmZl
ci0+ZGF0YTsKKwlnc2l6ZSBjaHVua19zaXplID0gY2h1bmtfYnVmZmVyLT5sZW5ndGg7CisKKwkv
KiBXZSBvbmx5IHBheSBhdHRlbnRpb24gdG8gdGhlIGNodW5rIGlmIGl0J3MgcGFydCBvZiBhIHN1
Y2Nlc3NmdWwKKwkgKiByZXNwb25zZS4KKwkgKi8KKwlpZiAoIVNPVVBfU1RBVFVTX0lTX1NVQ0NF
U1NGVUwgKG1zZy0+c3RhdHVzX2NvZGUpKQorCQlyZXR1cm47CisKKwkvKiBTYW5pdHkgY2hlY2sg
Ki8KKwlpZiAocHJpdi0+Y2FsbGVyX2J1ZnNpemUgPT0gMCB8fCBwcml2LT5sZWZ0b3Zlcl9idWZz
aXplICE9IDApCisJCWdfd2FybmluZyAoInNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ290X2NodW5r
IGNhbGxlZCBhZ2FpbiBiZWZvcmUgcHJldmlvdXMgY2h1bmsgd2FzIHByb2Nlc3NlZCIpOworCisJ
LyogQ29weSB3aGF0IHdlIGNhbiBpbnRvIHByaXYtPmNhbGxlcl9idWZmZXIgKi8KKwlpZiAocHJp
di0+Y2FsbGVyX2J1ZnNpemUgLSBwcml2LT5jYWxsZXJfbnJlYWQgPiAwKSB7CisJCWdzaXplIG5y
ZWFkID0gTUlOIChjaHVua19zaXplLCBwcml2LT5jYWxsZXJfYnVmc2l6ZSAtIHByaXYtPmNhbGxl
cl9ucmVhZCk7CisKKwkJbWVtY3B5IChwcml2LT5jYWxsZXJfYnVmZmVyICsgcHJpdi0+Y2FsbGVy
X25yZWFkLCBjaHVuaywgbnJlYWQpOworCQlwcml2LT5jYWxsZXJfbnJlYWQgKz0gbnJlYWQ7CisJ
CXByaXYtPm9mZnNldCArPSBucmVhZDsKKwkJY2h1bmsgKz0gbnJlYWQ7CisJCWNodW5rX3NpemUg
LT0gbnJlYWQ7CisJfQorCisJaWYgKGNodW5rX3NpemUgPiAwKSB7CisJCS8qIENvcHkgdGhlIHJl
c3QgaW50byBwcml2LT5sZWZ0b3Zlcl9idWZmZXIuIElmCisJCSAqIHRoZXJlJ3MgYWxyZWFkeSBz
b21lIGRhdGEgdGhlcmUsIHJlYWxsb2MgYW5kCisJCSAqIGFwcGVuZC4gT3RoZXJ3aXNlIGp1c3Qg
Y29weS4KKwkJICovCisJCWlmIChwcml2LT5sZWZ0b3Zlcl9idWZzaXplKSB7CisJCQlwcml2LT5s
ZWZ0b3Zlcl9idWZmZXIgPSBnX3JlYWxsb2MgKHByaXYtPmxlZnRvdmVyX2J1ZmZlciwKKwkJCQkJ
CQkgICBwcml2LT5sZWZ0b3Zlcl9idWZzaXplICsgY2h1bmtfc2l6ZSk7CisJCQltZW1jcHkgKHBy
aXYtPmxlZnRvdmVyX2J1ZmZlciArIHByaXYtPmxlZnRvdmVyX2J1ZnNpemUsCisJCQkJY2h1bmss
IGNodW5rX3NpemUpOworCQkJcHJpdi0+bGVmdG92ZXJfYnVmc2l6ZSArPSBjaHVua19zaXplOwor
CQl9IGVsc2UgeworCQkJcHJpdi0+bGVmdG92ZXJfYnVmc2l6ZSA9IGNodW5rX3NpemU7CisJCQlw
cml2LT5sZWZ0b3Zlcl9idWZmZXIgPSBnX21lbWR1cCAoY2h1bmssIGNodW5rX3NpemUpOworCQkJ
cHJpdi0+bGVmdG92ZXJfb2Zmc2V0ID0gMDsKKwkJfQorCX0KKworCXNvdXBfc2Vzc2lvbl9wYXVz
ZV9tZXNzYWdlIChwcml2LT5zZXNzaW9uLCBtc2cpOworCWlmIChwcml2LT5nb3RfY2h1bmtfY2Ip
CisJCXByaXYtPmdvdF9jaHVua19jYiAoc3RyZWFtKTsKK30KKworc3RhdGljIHZvaWQKK3NvdXBf
aHR0cF9pbnB1dF9zdHJlYW1fZmluaXNoZWQgKFNvdXBNZXNzYWdlICptc2csIGdwb2ludGVyIHN0
cmVhbSkKK3sKKwlTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFNPVVBfSFRUUF9J
TlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7CisKKwlwcml2LT5maW5pc2hlZCA9IFRS
VUU7CisKKwlpZiAocHJpdi0+ZmluaXNoZWRfY2IpCisJCXByaXYtPmZpbmlzaGVkX2NiIChzdHJl
YW0pOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2FuY2Vs
bGVkIChHSU9DaGFubmVsICpjaGFuLCBHSU9Db25kaXRpb24gY29uZGl0aW9uLAorCQkJCSAgZ3Bv
aW50ZXIgc3RyZWFtKQoreworCVNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gU09V
UF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKworCXByaXYtPmNhbmNl
bF93YXRjaCA9IE5VTEw7CisKKwlzb3VwX3Nlc3Npb25fcGF1c2VfbWVzc2FnZSAocHJpdi0+c2Vz
c2lvbiwgcHJpdi0+bXNnKTsKKwlpZiAocHJpdi0+Y2FuY2VsbGVkX2NiKQorCQlwcml2LT5jYW5j
ZWxsZWRfY2IgKHN0cmVhbSk7CisKKwlyZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkCitz
b3VwX2h0dHBfaW5wdXRfc3RyZWFtX3ByZXBhcmVfZm9yX2lvIChHSW5wdXRTdHJlYW0gKnN0cmVh
bSwKKwkJCQkgICAgICAgR0NhbmNlbGxhYmxlICpjYW5jZWxsYWJsZSwKKwkJCQkgICAgICAgZ3Vj
aGFyICAgICAgICpidWZmZXIsCisJCQkJICAgICAgIGdzaXplIGNvdW50KQoreworCVNvdXBIVFRQ
SW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJ
VkFURSAoc3RyZWFtKTsKKwlpbnQgY2FuY2VsX2ZkOworCisJcHJpdi0+Y2FuY2VsbGFibGUgPSBj
YW5jZWxsYWJsZTsKKwljYW5jZWxfZmQgPSBnX2NhbmNlbGxhYmxlX2dldF9mZCAoY2FuY2VsbGFi
bGUpOworCWlmIChjYW5jZWxfZmQgIT0gLTEpIHsKKwkJR0lPQ2hhbm5lbCAqY2hhbiA9IGdfaW9f
Y2hhbm5lbF91bml4X25ldyAoY2FuY2VsX2ZkKTsKKwkJcHJpdi0+Y2FuY2VsX3dhdGNoID0gc291
cF9hZGRfaW9fd2F0Y2ggKHByaXYtPmFzeW5jX2NvbnRleHQsIGNoYW4sCisJCQkJCQkJR19JT19J
TiB8IEdfSU9fRVJSIHwgR19JT19IVVAsCisJCQkJCQkJc291cF9odHRwX2lucHV0X3N0cmVhbV9j
YW5jZWxsZWQsCisJCQkJCQkJc3RyZWFtKTsKKwkJZ19pb19jaGFubmVsX3VucmVmIChjaGFuKTsK
Kwl9CisKKwlwcml2LT5jYWxsZXJfYnVmZmVyID0gYnVmZmVyOworCXByaXYtPmNhbGxlcl9idWZz
aXplID0gY291bnQ7CisJcHJpdi0+Y2FsbGVyX25yZWFkID0gMDsKKworCWlmIChwcml2LT5nb3Rf
aGVhZGVycykKKwkJc291cF9zZXNzaW9uX3VucGF1c2VfbWVzc2FnZSAocHJpdi0+c2Vzc2lvbiwg
cHJpdi0+bXNnKTsKK30KKworc3RhdGljIHZvaWQKK3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZG9u
ZV9pbyAoR0lucHV0U3RyZWFtICpzdHJlYW0pCit7CisJU291cEhUVFBJbnB1dFN0cmVhbVByaXZh
dGUgKnByaXYgPSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOwor
CisJaWYgKHByaXYtPmNhbmNlbF93YXRjaCkgeworCQlnX3NvdXJjZV9kZXN0cm95IChwcml2LT5j
YW5jZWxfd2F0Y2gpOworCQlwcml2LT5jYW5jZWxfd2F0Y2ggPSBOVUxMOworCQlnX2NhbmNlbGxh
YmxlX3JlbGVhc2VfZmQgKHByaXYtPmNhbmNlbGxhYmxlKTsKKwl9CisJcHJpdi0+Y2FuY2VsbGFi
bGUgPSBOVUxMOworCisJcHJpdi0+Y2FsbGVyX2J1ZmZlciA9IE5VTEw7CisJcHJpdi0+Y2FsbGVy
X2J1ZnNpemUgPSAwOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3NldF9lcnJvcl9pZl9odHRwX2Zh
aWxlZCAoU291cE1lc3NhZ2UgKm1zZywgR0Vycm9yICoqZXJyb3IpCit7CisJaWYgKCFTT1VQX1NU
QVRVU19JU19TVUNDRVNTRlVMIChtc2ctPnN0YXR1c19jb2RlKSkgeworCQlnX3NldF9lcnJvcl9s
aXRlcmFsIChlcnJvciwgU09VUF9IVFRQX0VSUk9SLAorCQkJCSAgICAgbXNnLT5zdGF0dXNfY29k
ZSwgbXNnLT5yZWFzb25fcGhyYXNlKTsKKwkJcmV0dXJuIFRSVUU7CisJfQorCXJldHVybiBGQUxT
RTsKK30KKworc3RhdGljIGdzaXplCityZWFkX2Zyb21fbGVmdG92ZXIgKFNvdXBIVFRQSW5wdXRT
dHJlYW1Qcml2YXRlICpwcml2LAorCQkgICAgZ3BvaW50ZXIgYnVmZmVyLCBnc2l6ZSBidWZzaXpl
KQoreworCWdzaXplIG5yZWFkOworCisJaWYgKHByaXYtPmxlZnRvdmVyX2J1ZnNpemUgLSBwcml2
LT5sZWZ0b3Zlcl9vZmZzZXQgPD0gYnVmc2l6ZSkgeworCQlucmVhZCA9IHByaXYtPmxlZnRvdmVy
X2J1ZnNpemUgLSBwcml2LT5sZWZ0b3Zlcl9vZmZzZXQ7CisJCW1lbWNweSAoYnVmZmVyLCBwcml2
LT5sZWZ0b3Zlcl9idWZmZXIgKyBwcml2LT5sZWZ0b3Zlcl9vZmZzZXQsIG5yZWFkKTsKKworCQln
X2ZyZWUgKHByaXYtPmxlZnRvdmVyX2J1ZmZlcik7CisJCXByaXYtPmxlZnRvdmVyX2J1ZmZlciA9
IE5VTEw7CisJCXByaXYtPmxlZnRvdmVyX2J1ZnNpemUgPSBwcml2LT5sZWZ0b3Zlcl9vZmZzZXQg
PSAwOworCX0gZWxzZSB7CisJCW5yZWFkID0gYnVmc2l6ZTsKKwkJbWVtY3B5IChidWZmZXIsIHBy
aXYtPmxlZnRvdmVyX2J1ZmZlciArIHByaXYtPmxlZnRvdmVyX29mZnNldCwgbnJlYWQpOworCQlw
cml2LT5sZWZ0b3Zlcl9vZmZzZXQgKz0gbnJlYWQ7CisJfQorCisJcHJpdi0+b2Zmc2V0ICs9IG5y
ZWFkOworCXJldHVybiBucmVhZDsKK30KKworLyogVGhpcyBkb2VzIHRoZSB3b3JrIG9mIHNvdXBf
aHR0cF9pbnB1dF9zdHJlYW1fc2VuZCgpLCBhc3N1bWluZyB0aGF0IHRoZQorICogR0lucHV0U3Ry
ZWFtIHBlbmRpbmcgZmxhZyBoYXMgYWxyZWFkeSBiZWVuIHNldC4gSXQgaXMgYWxzbyB1c2VkIGJ5
CisgKiBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmMoKSBpbiBzb21lIGNpcmN1bXN0
YW5jZXMuCisgKi8KK3N0YXRpYyBnYm9vbGVhbgorc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5k
X2ludGVybmFsIChHSW5wdXRTdHJlYW0gICpzdHJlYW0sCisJCQkJICAgICAgR0NhbmNlbGxhYmxl
ICAqY2FuY2VsbGFibGUsCisJCQkJICAgICAgR0Vycm9yICAgICAgICoqZXJyb3IpCit7CisJU291
cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dF
VF9QUklWQVRFIChzdHJlYW0pOworCisJc291cF9odHRwX2lucHV0X3N0cmVhbV9wcmVwYXJlX2Zv
cl9pbyAoc3RyZWFtLCBjYW5jZWxsYWJsZSwgTlVMTCwgMCk7CisJd2hpbGUgKCFwcml2LT5maW5p
c2hlZCAmJiAhcHJpdi0+Z290X2hlYWRlcnMgJiYKKwkgICAgICAgIWdfY2FuY2VsbGFibGVfaXNf
Y2FuY2VsbGVkIChjYW5jZWxsYWJsZSkpCisJCWdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbiAocHJp
di0+YXN5bmNfY29udGV4dCwgVFJVRSk7CisJc291cF9odHRwX2lucHV0X3N0cmVhbV9kb25lX2lv
IChzdHJlYW0pOworCisJaWYgKGdfY2FuY2VsbGFibGVfc2V0X2Vycm9yX2lmX2NhbmNlbGxlZCAo
Y2FuY2VsbGFibGUsIGVycm9yKSkKKwkJcmV0dXJuIEZBTFNFOworCWVsc2UgaWYgKHNldF9lcnJv
cl9pZl9odHRwX2ZhaWxlZCAocHJpdi0+bXNnLCBlcnJvcikpCisJCXJldHVybiBGQUxTRTsKKwly
ZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQKK3NlbmRfc3luY19maW5pc2hlZCAoR0lucHV0
U3RyZWFtICpzdHJlYW0pCit7CisJU291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBT
T1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOworCUdFcnJvciAqZXJy
b3IgPSBOVUxMOworCisJaWYgKCFnX2NhbmNlbGxhYmxlX3NldF9lcnJvcl9pZl9jYW5jZWxsZWQg
KHByaXYtPmNhbmNlbGxhYmxlLCAmZXJyb3IpKQorCQlzZXRfZXJyb3JfaWZfaHR0cF9mYWlsZWQg
KHByaXYtPm1zZywgJmVycm9yKTsKKworCXByaXYtPmdvdF9oZWFkZXJzX2NiID0gTlVMTDsKKwlw
cml2LT5maW5pc2hlZF9jYiA9IE5VTEw7CisKKwkvKiBXYWtlIHVwIHRoZSBtYWluIGNvbnRleHQg
aXRlcmF0aW9uICovCisJZ19zb3VyY2VfYXR0YWNoIChnX2lkbGVfc291cmNlX25ldyAoKSwgTlVM
TCk7Cit9CisKKy8qKgorICogc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kOgorICogQGh0dHBz
dHJlYW06IGEgI1NvdXBIVFRQSW5wdXRTdHJlYW0KKyAqIEBjYW5jZWxsYWJsZTogb3B0aW9uYWwg
I0dDYW5jZWxsYWJsZSBvYmplY3QsICVOVUxMIHRvIGlnbm9yZS4KKyAqIEBlcnJvcjogbG9jYXRp
b24gdG8gc3RvcmUgdGhlIGVycm9yIG9jY3VyaW5nLCBvciAlTlVMTCB0byBpZ25vcmUKKyAqCisg
KiBTeW5jaHJvbm91c2x5IHNlbmRzIHRoZSBIVFRQIHJlcXVlc3QgYXNzb2NpYXRlZCB3aXRoIEBz
dHJlYW0sIGFuZAorICogcmVhZHMgdGhlIHJlc3BvbnNlIGhlYWRlcnMuIENhbGwgdGhpcyBhZnRl
ciBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX25ldygpCisgKiBhbmQgYmVmb3JlIHRoZSBmaXJzdCBn
X2lucHV0X3N0cmVhbV9yZWFkKCkgaWYgeW91IHdhbnQgdG8gY2hlY2sgdGhlCisgKiBIVFRQIHN0
YXR1cyBjb2RlIGJlZm9yZSB5b3Ugc3RhcnQgcmVhZGluZy4KKyAqCisgKiBSZXR1cm4gdmFsdWU6
ICVUUlVFIGlmIG1zZyBoYXMgYSBzdWNjZXNzZnVsICgyeHgpIHN0YXR1cywgJUZBTFNFIGlmCisg
KiBub3QuCisgKiovCitnYm9vbGVhbgorc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kIChTb3Vw
SFRUUElucHV0U3RyZWFtICAqaHR0cHN0cmVhbSwKKwkJCSAgICAgR0NhbmNlbGxhYmxlICAgICAg
ICAgKmNhbmNlbGxhYmxlLAorCQkJICAgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpCit7
CisJU291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBTT1VQX0hUVFBfSU5QVVRfU1RS
RUFNX0dFVF9QUklWQVRFIChodHRwc3RyZWFtKTsKKwlHSW5wdXRTdHJlYW0gKmlzdHJlYW0gPSAo
R0lucHV0U3RyZWFtICopaHR0cHN0cmVhbTsKKwlnYm9vbGVhbiByZXN1bHQ7CisKKwlnX3JldHVy
bl92YWxfaWZfZmFpbCAoU09VUF9JU19IVFRQX0lOUFVUX1NUUkVBTSAoaHR0cHN0cmVhbSksIEZB
TFNFKTsKKworCWlmICghZ19pbnB1dF9zdHJlYW1fc2V0X3BlbmRpbmcgKGlzdHJlYW0sIGVycm9y
KSkKKwkJcmV0dXJuIEZBTFNFOworCisJcHJpdi0+Z290X2hlYWRlcnNfY2IgPSBzZW5kX3N5bmNf
ZmluaXNoZWQ7CisJcHJpdi0+ZmluaXNoZWRfY2IgPSBzZW5kX3N5bmNfZmluaXNoZWQ7CisKKwly
ZXN1bHQgPSBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfaW50ZXJuYWwgKGlzdHJlYW0sIGNh
bmNlbGxhYmxlLCBlcnJvcik7CisJZ19pbnB1dF9zdHJlYW1fY2xlYXJfcGVuZGluZyAoaXN0cmVh
bSk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ3NzaXplCitzb3VwX2h0dHBfaW5w
dXRfc3RyZWFtX3JlYWQgKEdJbnB1dFN0cmVhbSAqc3RyZWFtLAorCQkJICAgICB2b2lkICAgICAg
ICAgKmJ1ZmZlciwKKwkJCSAgICAgZ3NpemUgY291bnQsCisJCQkgICAgIEdDYW5jZWxsYWJsZSAq
Y2FuY2VsbGFibGUsCisJCQkgICAgIEdFcnJvciAgICAgICoqZXJyb3IpCit7CisJU291cEhUVFBJ
bnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklW
QVRFIChzdHJlYW0pOworCisJaWYgKHByaXYtPmZpbmlzaGVkKQorCQlyZXR1cm4gMDsKKworCS8q
IElmIHRoZXJlIGlzIGRhdGEgbGVmdG92ZXIgZnJvbSBhIHByZXZpb3VzIHJlYWQsIHJldHVybiBp
dC4gKi8KKwlpZiAocHJpdi0+bGVmdG92ZXJfYnVmc2l6ZSkKKwkJcmV0dXJuIHJlYWRfZnJvbV9s
ZWZ0b3ZlciAocHJpdiwgYnVmZmVyLCBjb3VudCk7CisKKwkvKiBObyBsZWZ0b3ZlciBkYXRhLCBh
Y2NlcHQgb25lIGNodW5rIGZyb20gdGhlIG5ldHdvcmsgKi8KKwlzb3VwX2h0dHBfaW5wdXRfc3Ry
ZWFtX3ByZXBhcmVfZm9yX2lvIChzdHJlYW0sIGNhbmNlbGxhYmxlLCBidWZmZXIsIGNvdW50KTsK
Kwl3aGlsZSAoIXByaXYtPmZpbmlzaGVkICYmIHByaXYtPmNhbGxlcl9ucmVhZCA9PSAwICYmCisJ
ICAgICAgICFnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxlZCAoY2FuY2VsbGFibGUpKQorCQlnX21h
aW5fY29udGV4dF9pdGVyYXRpb24gKHByaXYtPmFzeW5jX2NvbnRleHQsIFRSVUUpOworCXNvdXBf
aHR0cF9pbnB1dF9zdHJlYW1fZG9uZV9pbyAoc3RyZWFtKTsKKworCWlmIChwcml2LT5jYWxsZXJf
bnJlYWQgPiAwKQorCQlyZXR1cm4gcHJpdi0+Y2FsbGVyX25yZWFkOworCisJaWYgKGdfY2FuY2Vs
bGFibGVfc2V0X2Vycm9yX2lmX2NhbmNlbGxlZCAoY2FuY2VsbGFibGUsIGVycm9yKSkKKwkJcmV0
dXJuIC0xOworCWVsc2UgaWYgKHNldF9lcnJvcl9pZl9odHRwX2ZhaWxlZCAocHJpdi0+bXNnLCBl
cnJvcikpCisJCXJldHVybiAtMTsKKwllbHNlCisJCXJldHVybiAwOworfQorCitzdGF0aWMgZ2Jv
b2xlYW4KK3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2UgKEdJbnB1dFN0cmVhbSAqc3RyZWFt
LAorCQkJICAgICAgR0NhbmNlbGxhYmxlICpjYW5jZWxsYWJsZSwKKwkJCSAgICAgIEdFcnJvciAg
ICAgICoqZXJyb3IpCit7CisJU291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBTT1VQ
X0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOworCisJaWYgKCFwcml2LT5m
aW5pc2hlZCkKKwkJc291cF9zZXNzaW9uX2NhbmNlbF9tZXNzYWdlIChwcml2LT5zZXNzaW9uLCBw
cml2LT5tc2csIFNPVVBfU1RBVFVTX0NBTkNFTExFRCk7CisKKwlyZXR1cm4gVFJVRTsKK30KKwor
c3RhdGljIHZvaWQKK3dyYXBwZXJfY2FsbGJhY2sgKEdPYmplY3QgKnNvdXJjZV9vYmplY3QsIEdB
c3luY1Jlc3VsdCAqcmVzLAorCQkgIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlHSW5wdXRTdHJl
YW0gKnN0cmVhbSA9IEdfSU5QVVRfU1RSRUFNIChzb3VyY2Vfb2JqZWN0KTsKKwlTb3VwSFRUUElu
cHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFNPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZB
VEUgKHN0cmVhbSk7CisKKwlnX2lucHV0X3N0cmVhbV9jbGVhcl9wZW5kaW5nIChzdHJlYW0pOwor
CWlmIChwcml2LT5vdXRzdGFuZGluZ19jYWxsYmFjaykKKwkJKCpwcml2LT5vdXRzdGFuZGluZ19j
YWxsYmFjaykoc291cmNlX29iamVjdCwgcmVzLCB1c2VyX2RhdGEpOworCXByaXYtPm91dHN0YW5k
aW5nX2NhbGxiYWNrID0gTlVMTDsKKwlnX29iamVjdF91bnJlZiAoc3RyZWFtKTsKK30KKworc3Rh
dGljIHZvaWQKK3NlbmRfYXN5bmNfdGhyZWFkIChHU2ltcGxlQXN5bmNSZXN1bHQgKnJlcywKKwkJ
ICAgR09iamVjdCAqb2JqZWN0LAorCQkgICBHQ2FuY2VsbGFibGUgKmNhbmNlbGxhYmxlKQorewor
CUdFcnJvciAqZXJyb3IgPSBOVUxMOworCWdib29sZWFuIHN1Y2Nlc3M7CisKKwlzdWNjZXNzID0g
c291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2ludGVybmFsIChHX0lOUFVUX1NUUkVBTSAob2Jq
ZWN0KSwKKwkJCQkJCQljYW5jZWxsYWJsZSwgJmVycm9yKTsKKwlnX3NpbXBsZV9hc3luY19yZXN1
bHRfc2V0X29wX3Jlc19nYm9vbGVhbiAocmVzLCBzdWNjZXNzKTsKKwlpZiAoZXJyb3IpIHsKKwkJ
Z19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9mcm9tX2Vycm9yIChyZXMsIGVycm9yKTsKKwkJZ19l
cnJvcl9mcmVlIChlcnJvcik7CisJfQorfQorCitzdGF0aWMgdm9pZAorc291cF9odHRwX2lucHV0
X3N0cmVhbV9zZW5kX2FzeW5jX2luX3RocmVhZCAoR0lucHV0U3RyZWFtICAgICAgICAqc3RyZWFt
LAorCQkJCQkgICAgIGludCBpb19wcmlvcml0eSwKKwkJCQkJICAgICBHQ2FuY2VsbGFibGUgICAg
ICAgICpjYW5jZWxsYWJsZSwKKwkJCQkJICAgICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNr
LAorCQkJCQkgICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlHU2ltcGxlQXN5bmNSZXN1bHQg
KnJlczsKKworCXJlcyA9IGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcgKEdfT0JKRUNUIChzdHJl
YW0pLCBjYWxsYmFjaywgdXNlcl9kYXRhLAorCQkJCQkgc291cF9odHRwX2lucHV0X3N0cmVhbV9z
ZW5kX2FzeW5jX2luX3RocmVhZCk7CisJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3J1bl9pbl90aHJl
YWQgKHJlcywgc2VuZF9hc3luY190aHJlYWQsCisJCQkJCSAgICAgaW9fcHJpb3JpdHksIGNhbmNl
bGxhYmxlKTsKKwlnX29iamVjdF91bnJlZiAocmVzKTsKK30KKworc3RhdGljIHZvaWQKK3NlbmRf
YXN5bmNfZmluaXNoZWQgKEdJbnB1dFN0cmVhbSAqc3RyZWFtKQoreworCVNvdXBIVFRQSW5wdXRT
dHJlYW1Qcml2YXRlICpwcml2ID0gU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAo
c3RyZWFtKTsKKwlHU2ltcGxlQXN5bmNSZXN1bHQgKnJlc3VsdDsKKwlHRXJyb3IgKmVycm9yID0g
TlVMTDsKKworCWlmICghZ19jYW5jZWxsYWJsZV9zZXRfZXJyb3JfaWZfY2FuY2VsbGVkIChwcml2
LT5jYW5jZWxsYWJsZSwgJmVycm9yKSkKKwkJc2V0X2Vycm9yX2lmX2h0dHBfZmFpbGVkIChwcml2
LT5tc2csICZlcnJvcik7CisKKwlwcml2LT5nb3RfaGVhZGVyc19jYiA9IE5VTEw7CisJcHJpdi0+
ZmluaXNoZWRfY2IgPSBOVUxMOworCXNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZG9uZV9pbyAoc3Ry
ZWFtKTsKKworCXJlc3VsdCA9IHByaXYtPnJlc3VsdDsKKwlwcml2LT5yZXN1bHQgPSBOVUxMOwor
CisJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ2Jvb2xlYW4gKHJlc3VsdCwgZXJy
b3IgPT0gTlVMTCk7CisJaWYgKGVycm9yKSB7CisJCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRf
ZnJvbV9lcnJvciAocmVzdWx0LCBlcnJvcik7CisJCWdfZXJyb3JfZnJlZSAoZXJyb3IpOworCX0K
KwlnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGUgKHJlc3VsdCk7Cit9CisKK3N0YXRpYyB2
b2lkCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmNfaW50ZXJuYWwgKEdJbnB1dFN0
cmVhbSAgICAgICAgKnN0cmVhbSwKKwkJCQkJICAgIGludCBpb19wcmlvcml0eSwKKwkJCQkJICAg
IEdDYW5jZWxsYWJsZSAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJCQkgICAgR0FzeW5jUmVhZHlD
YWxsYmFjayBjYWxsYmFjaywKKwkJCQkJICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlTb3Vw
SFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFNPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VU
X1BSSVZBVEUgKHN0cmVhbSk7CisKKwlnX29iamVjdF9yZWYgKHN0cmVhbSk7CisJcHJpdi0+b3V0
c3RhbmRpbmdfY2FsbGJhY2sgPSBjYWxsYmFjazsKKworCS8qIElmIHRoZSBzZXNzaW9uIHVzZXMg
dGhlIGRlZmF1bHQgR01haW5Db250ZXh0LCB0aGVuIHdlIGNhbiBkbworCSAqIGFzeW5jIEkvTyBk
aXJlY3RseS4gQnV0IGlmIGl0IGhhcyBpdHMgb3duIG1haW4gY29udGV4dCwgaXQncworCSAqIGVh
c2llciB0byBqdXN0IHJ1biBpdCBpbiBhbm90aGVyIHRocmVhZC4KKwkgKi8KKwlpZiAoc291cF9z
ZXNzaW9uX2dldF9hc3luY19jb250ZXh0IChwcml2LT5zZXNzaW9uKSkgeworCQlzb3VwX2h0dHBf
aW5wdXRfc3RyZWFtX3NlbmRfYXN5bmNfaW5fdGhyZWFkIChzdHJlYW0sIGlvX3ByaW9yaXR5LCBj
YW5jZWxsYWJsZSwKKwkJCQkJCQkgICAgIHdyYXBwZXJfY2FsbGJhY2ssIHVzZXJfZGF0YSk7CisJ
CXJldHVybjsKKwl9CisKKwlwcml2LT5nb3RfaGVhZGVyc19jYiA9IHNlbmRfYXN5bmNfZmluaXNo
ZWQ7CisJcHJpdi0+ZmluaXNoZWRfY2IgPSBzZW5kX2FzeW5jX2ZpbmlzaGVkOworCisJc291cF9o
dHRwX2lucHV0X3N0cmVhbV9wcmVwYXJlX2Zvcl9pbyAoc3RyZWFtLCBjYW5jZWxsYWJsZSwgTlVM
TCwgMCk7CisJcHJpdi0+cmVzdWx0ID0gZ19zaW1wbGVfYXN5bmNfcmVzdWx0X25ldyAoR19PQkpF
Q1QgKHN0cmVhbSksCisJCQkJCQkgIHdyYXBwZXJfY2FsbGJhY2ssIHVzZXJfZGF0YSwKKwkJCQkJ
CSAgc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jKTsKK30KKworLyoqCisgKiBzb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmM6CisgKiBAaHR0cHN0cmVhbTogYSAjU291cEhU
VFBJbnB1dFN0cmVhbQorICogQGlvX3ByaW9yaXR5OiB0aGUgaW8gcHJpb3JpdHkgb2YgdGhlIHJl
cXVlc3QuCisgKiBAY2FuY2VsbGFibGU6IG9wdGlvbmFsICNHQ2FuY2VsbGFibGUgb2JqZWN0LCAl
TlVMTCB0byBpZ25vcmUuCisgKiBAY2FsbGJhY2s6IGNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUg
cmVxdWVzdCBpcyBzYXRpc2ZpZWQKKyAqIEB1c2VyX2RhdGE6IHRoZSBkYXRhIHRvIHBhc3MgdG8g
Y2FsbGJhY2sgZnVuY3Rpb24KKyAqCisgKiBBc3luY2hyb25vdXNseSBzZW5kcyB0aGUgSFRUUCBy
ZXF1ZXN0IGFzc29jaWF0ZWQgd2l0aCBAc3RyZWFtLCBhbmQKKyAqIHJlYWRzIHRoZSByZXNwb25z
ZSBoZWFkZXJzLiBDYWxsIHRoaXMgYWZ0ZXIgc291cF9odHRwX2lucHV0X3N0cmVhbV9uZXcoKQor
ICogYW5kIGJlZm9yZSB0aGUgZmlyc3QgZ19pbnB1dF9zdHJlYW1fcmVhZF9hc3luYygpIGlmIHlv
dSB3YW50IHRvCisgKiBjaGVjayB0aGUgSFRUUCBzdGF0dXMgY29kZSBiZWZvcmUgeW91IHN0YXJ0
IHJlYWRpbmcuCisgKiovCit2b2lkCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmMg
KFNvdXBIVFRQSW5wdXRTdHJlYW0gKmh0dHBzdHJlYW0sCisJCQkJICAgaW50IGlvX3ByaW9yaXR5
LAorCQkJCSAgIEdDYW5jZWxsYWJsZSAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJCSAgIEdBc3lu
Y1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCisJCQkJICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQorewor
CUdJbnB1dFN0cmVhbSAqaXN0cmVhbSA9IChHSW5wdXRTdHJlYW0gKilodHRwc3RyZWFtOworCUdF
cnJvciAqZXJyb3IgPSBOVUxMOworCisJZ19yZXR1cm5faWZfZmFpbCAoU09VUF9JU19IVFRQX0lO
UFVUX1NUUkVBTSAoaHR0cHN0cmVhbSkpOworCisJaWYgKCFnX2lucHV0X3N0cmVhbV9zZXRfcGVu
ZGluZyAoaXN0cmVhbSwgJmVycm9yKSkgeworCQlnX3NpbXBsZV9hc3luY19yZXBvcnRfZ2Vycm9y
X2luX2lkbGUgKEdfT0JKRUNUIChodHRwc3RyZWFtKSwKKwkJCQkJCSAgICAgIGNhbGxiYWNrLAor
CQkJCQkJICAgICAgdXNlcl9kYXRhLAorCQkJCQkJICAgICAgZXJyb3IpOworCQlnX2Vycm9yX2Zy
ZWUgKGVycm9yKTsKKwkJcmV0dXJuOworCX0KKwlzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRf
YXN5bmNfaW50ZXJuYWwgKGlzdHJlYW0sIGlvX3ByaW9yaXR5LCBjYW5jZWxsYWJsZSwKKwkJCQkJ
CSAgICBjYWxsYmFjaywgdXNlcl9kYXRhKTsKK30KKworLyoqCisgKiBzb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX3NlbmRfZmluaXNoOgorICogQGh0dHBzdHJlYW06IGEgI1NvdXBIVFRQSW5wdXRTdHJl
YW0KKyAqIEByZXN1bHQ6IGEgI0dBc3luY1Jlc3VsdC4KKyAqIEBlcnJvcjogYSAjR0Vycm9yIGxv
Y2F0aW9uIHRvIHN0b3JlIHRoZSBlcnJvciBvY2N1cmluZywgb3IgJU5VTEwgdG8KKyAqIGlnbm9y
ZS4KKyAqCisgKiBGaW5pc2hlcyBhIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luYygp
IG9wZXJhdGlvbi4KKyAqCisgKiBSZXR1cm4gdmFsdWU6ICVUUlVFIGlmIHRoZSBtZXNzYWdlIHdh
cyBzZW50IHN1Y2Nlc3NmdWxseSBhbmQKKyAqIHJlY2VpdmVkIGEgc3VjY2Vzc2Z1bCBzdGF0dXMg
Y29kZSwgJUZBTFNFIGlmIG5vdC4KKyAqKi8KK2dib29sZWFuCitzb3VwX2h0dHBfaW5wdXRfc3Ry
ZWFtX3NlbmRfZmluaXNoIChTb3VwSFRUUElucHV0U3RyZWFtICAqaHR0cHN0cmVhbSwKKwkJCQkg
ICAgR0FzeW5jUmVzdWx0ICAgICAgICAgKnJlc3VsdCwKKwkJCQkgICAgR0Vycm9yICAgICAgICAg
ICAgICAqKmVycm9yKQoreworCUdTaW1wbGVBc3luY1Jlc3VsdCAqc2ltcGxlOworCisJZ19yZXR1
cm5fdmFsX2lmX2ZhaWwgKEdfSVNfU0lNUExFX0FTWU5DX1JFU1VMVCAocmVzdWx0KSwgRkFMU0Up
OworCXNpbXBsZSA9IEdfU0lNUExFX0FTWU5DX1JFU1VMVCAocmVzdWx0KTsKKworCWdfcmV0dXJu
X3ZhbF9pZl9mYWlsIChnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X3NvdXJjZV90YWcgKHNpbXBs
ZSkgPT0gc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jLCBGQUxTRSk7CisKKwlpZiAo
Z19zaW1wbGVfYXN5bmNfcmVzdWx0X3Byb3BhZ2F0ZV9lcnJvciAoc2ltcGxlLCBlcnJvcikpCisJ
CXJldHVybiBGQUxTRTsKKworCXJldHVybiBnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X29wX3Jl
c19nYm9vbGVhbiAoc2ltcGxlKTsKK30KKworc3RhdGljIHZvaWQKK3JlYWRfYXN5bmNfZG9uZSAo
R0lucHV0U3RyZWFtICpzdHJlYW0pCit7CisJU291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnBy
aXYgPSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOworCUdTaW1w
bGVBc3luY1Jlc3VsdCAqcmVzdWx0OworCUdFcnJvciAqZXJyb3IgPSBOVUxMOworCisJcmVzdWx0
ID0gcHJpdi0+cmVzdWx0OworCXByaXYtPnJlc3VsdCA9IE5VTEw7CisKKwlpZiAoZ19jYW5jZWxs
YWJsZV9zZXRfZXJyb3JfaWZfY2FuY2VsbGVkIChwcml2LT5jYW5jZWxsYWJsZSwgJmVycm9yKSB8
fAorCSAgICBzZXRfZXJyb3JfaWZfaHR0cF9mYWlsZWQgKHByaXYtPm1zZywgJmVycm9yKSkgewor
CQlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X2Zyb21fZXJyb3IgKHJlc3VsdCwgZXJyb3IpOwor
CQlnX2Vycm9yX2ZyZWUgKGVycm9yKTsKKwl9IGVsc2UKKwkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0
X3NldF9vcF9yZXNfZ3NzaXplIChyZXN1bHQsIHByaXYtPmNhbGxlcl9ucmVhZCk7CisKKwlwcml2
LT5nb3RfY2h1bmtfY2IgPSBOVUxMOworCXByaXYtPmZpbmlzaGVkX2NiID0gTlVMTDsKKwlwcml2
LT5jYW5jZWxsZWRfY2IgPSBOVUxMOworCXNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZG9uZV9pbyAo
c3RyZWFtKTsKKworCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZSAocmVzdWx0KTsKKwln
X29iamVjdF91bnJlZiAocmVzdWx0KTsKK30KKworc3RhdGljIHZvaWQKK3NvdXBfaHR0cF9pbnB1
dF9zdHJlYW1fcmVhZF9hc3luYyAoR0lucHV0U3RyZWFtICAgICAgICAqc3RyZWFtLAorCQkJCSAg
IHZvaWQgICAgICAgICAgICAgICAgKmJ1ZmZlciwKKwkJCQkgICBnc2l6ZSBjb3VudCwKKwkJCQkg
ICBpbnQgaW9fcHJpb3JpdHksCisJCQkJICAgR0NhbmNlbGxhYmxlICAgICAgICAqY2FuY2VsbGFi
bGUsCisJCQkJICAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKKwkJCQkgICBncG9pbnRl
ciB1c2VyX2RhdGEpCit7CisJU291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBTT1VQ
X0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOworCUdTaW1wbGVBc3luY1Jl
c3VsdCAqcmVzdWx0OworCisJLyogSWYgdGhlIHNlc3Npb24gdXNlcyB0aGUgZGVmYXVsdCBHTWFp
bkNvbnRleHQsIHRoZW4gd2UgY2FuIGRvCisJICogYXN5bmMgSS9PIGRpcmVjdGx5LiBCdXQgaWYg
aXQgaGFzIGl0cyBvd24gbWFpbiBjb250ZXh0LCB3ZSBmYWxsCisJICogYmFjayB0byB0aGUgYXN5
bmMtdmlhLXN5bmMtaW4tYW5vdGhlci10aHJlYWQgaW1wbGVtZW50YXRpb24uCisJICovCisJaWYg
KHNvdXBfc2Vzc2lvbl9nZXRfYXN5bmNfY29udGV4dCAocHJpdi0+c2Vzc2lvbikpIHsKKwkJR19J
TlBVVF9TVFJFQU1fQ0xBU1MgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcGFyZW50X2NsYXNzKS0+
CisJCXJlYWRfYXN5bmMgKHN0cmVhbSwgYnVmZmVyLCBjb3VudCwgaW9fcHJpb3JpdHksCisJCQkg
ICAgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyX2RhdGEpOworCQlyZXR1cm47CisJfQorCisJ
cmVzdWx0ID0gZ19zaW1wbGVfYXN5bmNfcmVzdWx0X25ldyAoR19PQkpFQ1QgKHN0cmVhbSksCisJ
CQkJCSAgICBjYWxsYmFjaywgdXNlcl9kYXRhLAorCQkJCQkgICAgc291cF9odHRwX2lucHV0X3N0
cmVhbV9yZWFkX2FzeW5jKTsKKworCWlmIChwcml2LT5maW5pc2hlZCkgeworCQlnX3NpbXBsZV9h
c3luY19yZXN1bHRfc2V0X29wX3Jlc19nc3NpemUgKHJlc3VsdCwgMCk7CisJCWdfc2ltcGxlX2Fz
eW5jX3Jlc3VsdF9jb21wbGV0ZV9pbl9pZGxlIChyZXN1bHQpOworCQlnX29iamVjdF91bnJlZiAo
cmVzdWx0KTsKKwkJcmV0dXJuOworCX0KKworCWlmIChwcml2LT5sZWZ0b3Zlcl9idWZzaXplKSB7
CisJCWdzaXplIG5yZWFkID0gcmVhZF9mcm9tX2xlZnRvdmVyIChwcml2LCBidWZmZXIsIGNvdW50
KTsKKwkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ3NzaXplIChyZXN1bHQsIG5y
ZWFkKTsKKwkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlX2luX2lkbGUgKHJlc3VsdCk7
CisJCWdfb2JqZWN0X3VucmVmIChyZXN1bHQpOworCQlyZXR1cm47CisJfQorCisJcHJpdi0+cmVz
dWx0ID0gcmVzdWx0OworCisJcHJpdi0+Z290X2NodW5rX2NiID0gcmVhZF9hc3luY19kb25lOwor
CXByaXYtPmZpbmlzaGVkX2NiID0gcmVhZF9hc3luY19kb25lOworCXByaXYtPmNhbmNlbGxlZF9j
YiA9IHJlYWRfYXN5bmNfZG9uZTsKKwlzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3ByZXBhcmVfZm9y
X2lvIChzdHJlYW0sIGNhbmNlbGxhYmxlLCBidWZmZXIsIGNvdW50KTsKK30KKworc3RhdGljIGdz
c2l6ZQorc291cF9odHRwX2lucHV0X3N0cmVhbV9yZWFkX2ZpbmlzaCAoR0lucHV0U3RyZWFtICAq
c3RyZWFtLAorCQkJCSAgICBHQXN5bmNSZXN1bHQgICpyZXN1bHQsCisJCQkJICAgIEdFcnJvciAg
ICAgICAqKmVycm9yKQoreworCUdTaW1wbGVBc3luY1Jlc3VsdCAqc2ltcGxlOworCisJZ19yZXR1
cm5fdmFsX2lmX2ZhaWwgKEdfSVNfU0lNUExFX0FTWU5DX1JFU1VMVCAocmVzdWx0KSwgLTEpOwor
CXNpbXBsZSA9IEdfU0lNUExFX0FTWU5DX1JFU1VMVCAocmVzdWx0KTsKKwlnX3JldHVybl92YWxf
aWZfZmFpbCAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9zb3VyY2VfdGFnIChzaW1wbGUpID09
IHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVhZF9hc3luYywgLTEpOworCisJcmV0dXJuIGdfc2lt
cGxlX2FzeW5jX3Jlc3VsdF9nZXRfb3BfcmVzX2dzc2l6ZSAoc2ltcGxlKTsKK30KKworc3RhdGlj
IHZvaWQKK3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2VfYXN5bmMgKEdJbnB1dFN0cmVhbSAg
ICAgICAqc3RyZWFtLAorCQkJCSAgICBpbnQgaW9fcHJpb3JpdHksCisJCQkJICAgIEdDYW5jZWxs
YWJsZSAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2Fs
bGJhY2ssCisJCQkJICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlHU2ltcGxlQXN5bmNSZXN1
bHQgKnJlc3VsdDsKKwlnYm9vbGVhbiBzdWNjZXNzOworCUdFcnJvciAqZXJyb3IgPSBOVUxMOwor
CisJcmVzdWx0ID0gZ19zaW1wbGVfYXN5bmNfcmVzdWx0X25ldyAoR19PQkpFQ1QgKHN0cmVhbSks
CisJCQkJCSAgICBjYWxsYmFjaywgdXNlcl9kYXRhLAorCQkJCQkgICAgc291cF9odHRwX2lucHV0
X3N0cmVhbV9jbG9zZV9hc3luYyk7CisJc3VjY2VzcyA9IHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1f
Y2xvc2UgKHN0cmVhbSwgY2FuY2VsbGFibGUsICZlcnJvcik7CisJZ19zaW1wbGVfYXN5bmNfcmVz
dWx0X3NldF9vcF9yZXNfZ2Jvb2xlYW4gKHJlc3VsdCwgc3VjY2Vzcyk7CisJaWYgKGVycm9yKSB7
CisJCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfZnJvbV9lcnJvciAocmVzdWx0LCBlcnJvcik7
CisJCWdfZXJyb3JfZnJlZSAoZXJyb3IpOworCX0KKworCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9j
b21wbGV0ZV9pbl9pZGxlIChyZXN1bHQpOworCWdfb2JqZWN0X3VucmVmIChyZXN1bHQpOworfQor
CitzdGF0aWMgZ2Jvb2xlYW4KK3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2VfZmluaXNoIChH
SW5wdXRTdHJlYW0gICpzdHJlYW0sCisJCQkJICAgICBHQXN5bmNSZXN1bHQgICpyZXN1bHQsCisJ
CQkJICAgICBHRXJyb3IgICAgICAgKiplcnJvcikKK3sKKwkvKiBGYWlsdXJlcyBoYW5kbGVkIGlu
IGdlbmVyaWMgY2xvc2VfZmluaXNoIGNvZGUgKi8KKwlyZXR1cm4gVFJVRTsKK30KKworc3RhdGlj
IGdvZmZzZXQKK3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fdGVsbCAoR1NlZWthYmxlICpzZWVrYWJs
ZSkKK3sKKwlTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFNPVVBfSFRUUF9JTlBV
VF9TVFJFQU1fR0VUX1BSSVZBVEUgKHNlZWthYmxlKTsKKworCXJldHVybiBwcml2LT5vZmZzZXQ7
Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorc291cF9odHRwX2lucHV0X3N0cmVhbV9jYW5fc2VlayAo
R1NlZWthYmxlICpzZWVrYWJsZSkKK3sKKwlyZXR1cm4gVFJVRTsKK30KKworZXh0ZXJuIHZvaWQg
c291cF9tZXNzYWdlX2lvX2NsZWFudXAgKFNvdXBNZXNzYWdlICptc2cpOworCitzdGF0aWMgZ2Jv
b2xlYW4KK3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VlayAoR1NlZWthYmxlICAgICAqc2Vla2Fi
bGUsCisJCQkgICAgIGdvZmZzZXQgb2Zmc2V0LAorCQkJICAgICBHU2Vla1R5cGUgdHlwZSwKKwkJ
CSAgICAgR0NhbmNlbGxhYmxlICAqY2FuY2VsbGFibGUsCisJCQkgICAgIEdFcnJvciAgICAgICAq
KmVycm9yKQoreworCUdJbnB1dFN0cmVhbSAqc3RyZWFtID0gR19JTlBVVF9TVFJFQU0gKHNlZWth
YmxlKTsKKwlTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFNPVVBfSFRUUF9JTlBV
VF9TVFJFQU1fR0VUX1BSSVZBVEUgKHNlZWthYmxlKTsKKwljaGFyICpyYW5nZTsKKworCWlmICh0
eXBlID09IEdfU0VFS19FTkQpIHsKKwkJLyogRklYTUU6IHdlIGNvdWxkIHNlbmQgImJ5dGVzPS1v
ZmZzZXQiLCBidXQgdW5sZXNzIHdlCisJCSAqIGtub3cgdGhlIENvbnRlbnQtTGVuZ3RoLCB3ZSB3
b3VsZG4ndCBiZSBhYmxlIHRvCisJCSAqIGFuc3dlciBhIHRlbGwoKSBwcm9wZXJseS4gV2UgY291
bGQgZmluZCB0aGUKKwkJICogQ29udGVudC1MZW5ndGggYnkgZG9pbmcgYSBIRUFELi4uCisJCSAq
LworCisJCWdfc2V0X2Vycm9yX2xpdGVyYWwgKGVycm9yLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9S
X05PVF9TVVBQT1JURUQsCisJCQkJICAgICAiR19TRUVLX0VORCBub3QgY3VycmVudGx5IHN1cHBv
cnRlZCIpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJaWYgKCFnX2lucHV0X3N0cmVhbV9zZXRf
cGVuZGluZyAoc3RyZWFtLCBlcnJvcikpCisJCXJldHVybiBGQUxTRTsKKworCXNvdXBfc2Vzc2lv
bl9jYW5jZWxfbWVzc2FnZSAocHJpdi0+c2Vzc2lvbiwgcHJpdi0+bXNnLCBTT1VQX1NUQVRVU19D
QU5DRUxMRUQpOworCXNvdXBfbWVzc2FnZV9pb19jbGVhbnVwIChwcml2LT5tc2cpOworCisJc3dp
dGNoICh0eXBlKSB7CisJCWNhc2UgR19TRUVLX0NVUjoKKwkJCW9mZnNldCArPSBwcml2LT5vZmZz
ZXQ7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCisJCWNhc2UgR19TRUVLX1NFVDoKKwkJCXJhbmdl
ID0gZ19zdHJkdXBfcHJpbnRmICgiYnl0ZXM9JSIgR19HVUlOVDY0X0ZPUk1BVCAiLSIsIChndWlu
dDY0KW9mZnNldCk7CisJCQlwcml2LT5vZmZzZXQgPSBvZmZzZXQ7CisJCQlicmVhazsKKworCQlj
YXNlIEdfU0VFS19FTkQ6CisJCQlyYW5nZSA9IE5VTEw7IC8qIGtlZXAgY29tcGlsZXJzIGhhcHB5
ICovCisJCQlnX3JldHVybl92YWxfaWZfcmVhY2hlZCAoRkFMU0UpOworCQkJYnJlYWs7CisKKwkJ
ZGVmYXVsdDoKKwkJCWdfcmV0dXJuX3ZhbF9pZl9yZWFjaGVkIChGQUxTRSk7CisJfQorCisJc291
cF9tZXNzYWdlX2hlYWRlcnNfcmVtb3ZlIChwcml2LT5tc2ctPnJlcXVlc3RfaGVhZGVycywgIlJh
bmdlIik7CisJc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kIChwcml2LT5tc2ctPnJlcXVlc3Rf
aGVhZGVycywgIlJhbmdlIiwgcmFuZ2UpOworCWdfZnJlZSAocmFuZ2UpOworCisJc291cF9odHRw
X2lucHV0X3N0cmVhbV9xdWV1ZV9tZXNzYWdlIChTT1VQX0hUVFBfSU5QVVRfU1RSRUFNIChzdHJl
YW0pKTsKKworCWdfaW5wdXRfc3RyZWFtX2NsZWFyX3BlbmRpbmcgKHN0cmVhbSk7CisJcmV0dXJu
IFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorc291cF9odHRwX2lucHV0X3N0cmVhbV9jYW5f
dHJ1bmNhdGUgKEdTZWVrYWJsZSAqc2Vla2FibGUpCit7CisJcmV0dXJuIEZBTFNFOworfQorCitz
dGF0aWMgZ2Jvb2xlYW4KK3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fdHJ1bmNhdGUgKEdTZWVrYWJs
ZSAgICAgKnNlZWthYmxlLAorCQkJCSBnb2Zmc2V0IG9mZnNldCwKKwkJCQkgR0NhbmNlbGxhYmxl
ICAqY2FuY2VsbGFibGUsCisJCQkJIEdFcnJvciAgICAgICAqKmVycm9yKQoreworCWdfc2V0X2Vy
cm9yX2xpdGVyYWwgKGVycm9yLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX05PVF9TVVBQT1JURUQs
CisJCQkgICAgICJUcnVuY2F0ZSBub3QgYWxsb3dlZCBvbiBpbnB1dCBzdHJlYW0iKTsKKwlyZXR1
cm4gRkFMU0U7Cit9CisKK1NvdXBNZXNzYWdlICoKK3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ2V0
X21lc3NhZ2UgKFNvdXBIVFRQSW5wdXRTdHJlYW0gKmh0dHBzdHJlYW0pCit7CisJU291cEhUVFBJ
bnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklW
QVRFIChodHRwc3RyZWFtKTsKKwlyZXR1cm4gcHJpdi0+bXNnID8gZ19vYmplY3RfcmVmIChwcml2
LT5tc2cpIDogTlVMTDsKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0uaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi43ZGU3YmMwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1odHRwLWlucHV0LXN0cmVhbS5oCkBAIC0w
LDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDkgUmVkIEhh
dCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5
IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0Eu
CisgKi8KKworI2lmbmRlZiBfX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fSF9fCisjZGVmaW5lIF9f
U09VUF9IVFRQX0lOUFVUX1NUUkVBTV9IX18KKworI2luY2x1ZGUgPGdpby9naW8uaD4KKyNpbmNs
dWRlIDxsaWJzb3VwL3NvdXAtdHlwZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFNP
VVBfVFlQRV9IVFRQX0lOUFVUX1NUUkVBTSAgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFt
X2dldF90eXBlICgpKQorI2RlZmluZSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNKG8pICAgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvKSwgU09VUF9UWVBFX0hUVFBfSU5QVVRf
U1RSRUFNLCBTb3VwSFRUUElucHV0U3RyZWFtKSkKKyNkZWZpbmUgU09VUF9IVFRQX0lOUFVUX1NU
UkVBTV9DTEFTUyhrKSAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoayksIFNPVVBfVFlQ
RV9IVFRQX0lOUFVUX1NUUkVBTSwgU291cEhUVFBJbnB1dFN0cmVhbUNsYXNzKSkKKyNkZWZpbmUg
U09VUF9JU19IVFRQX0lOUFVUX1NUUkVBTShvKSAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5D
RV9UWVBFICgobyksIFNPVVBfVFlQRV9IVFRQX0lOUFVUX1NUUkVBTSkpCisjZGVmaW5lIFNPVVBf
SVNfSFRUUF9JTlBVVF9TVFJFQU1fQ0xBU1MoaykgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAo
KGspLCBTT1VQX1RZUEVfSFRUUF9JTlBVVF9TVFJFQU0pKQorI2RlZmluZSBTT1VQX0hUVFBfSU5Q
VVRfU1RSRUFNX0dFVF9DTEFTUyhvKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG8pLCBT
T1VQX1RZUEVfSFRUUF9JTlBVVF9TVFJFQU0sIFNvdXBIVFRQSW5wdXRTdHJlYW1DbGFzcykpCisK
K3R5cGVkZWYgc3RydWN0IFNvdXBIVFRQSW5wdXRTdHJlYW0gU291cEhUVFBJbnB1dFN0cmVhbTsK
K3R5cGVkZWYgc3RydWN0IFNvdXBIVFRQSW5wdXRTdHJlYW1DbGFzcyBTb3VwSFRUUElucHV0U3Ry
ZWFtQ2xhc3M7CisKK3N0cnVjdCBTb3VwSFRUUElucHV0U3RyZWFtIHsKKwlHSW5wdXRTdHJlYW0g
cGFyZW50OworfTsKKworc3RydWN0IFNvdXBIVFRQSW5wdXRTdHJlYW1DbGFzcyB7CisJR0lucHV0
U3RyZWFtQ2xhc3MgcGFyZW50X2NsYXNzOworCisJLyogUGFkZGluZyBmb3IgZnV0dXJlIGV4cGFu
c2lvbiAqLworCXZvaWQgKCpfZ19yZXNlcnZlZDEpKHZvaWQpOworCXZvaWQgKCpfZ19yZXNlcnZl
ZDIpKHZvaWQpOworCXZvaWQgKCpfZ19yZXNlcnZlZDMpKHZvaWQpOworCXZvaWQgKCpfZ19yZXNl
cnZlZDQpKHZvaWQpOworCXZvaWQgKCpfZ19yZXNlcnZlZDUpKHZvaWQpOworfTsKKworR1R5cGUg
c291cF9odHRwX2lucHV0X3N0cmVhbV9nZXRfdHlwZSAodm9pZCkgR19HTlVDX0NPTlNUOworCitT
b3VwSFRUUElucHV0U3RyZWFtICpzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX25ldyAoU291cFNlc3Np
b24gICAgICAgICAqc2Vzc2lvbiwKKwkJCQkJCSBTb3VwTWVzc2FnZSAgICAgICAgICptc2cpOwor
CitnYm9vbGVhbiAgICAgICAgICAgICBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmQgKFNvdXBI
VFRQSW5wdXRTdHJlYW0gKmh0dHBzdHJlYW0sCisJCQkJCQkgIEdDYW5jZWxsYWJsZSAgICAgICAg
KmNhbmNlbGxhYmxlLAorCQkJCQkJICBHRXJyb3IgICAgICAgICAgICAgKiplcnJvcik7CisKK3Zv
aWQgICAgICAgICAgICAgICAgIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luYyAoU291
cEhUVFBJbnB1dFN0cmVhbSAqaHR0cHN0cmVhbSwKKwkJCQkJCQlpbnQgaW9fcHJpb3JpdHksCisJ
CQkJCQkJR0NhbmNlbGxhYmxlICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJCQkJR0FzeW5jUmVh
ZHlDYWxsYmFjayBjYWxsYmFjaywKKwkJCQkJCQlncG9pbnRlciB1c2VyX2RhdGEpOworZ2Jvb2xl
YW4gICAgICAgICAgICAgc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2ZpbmlzaCAoU291cEhU
VFBJbnB1dFN0cmVhbSAqaHR0cHN0cmVhbSwKKwkJCQkJCQkgR0FzeW5jUmVzdWx0ICAgICAgICAq
cmVzdWx0LAorCQkJCQkJCSBHRXJyb3IgICAgICAgICAgICAgKiplcnJvcik7CisKK1NvdXBNZXNz
YWdlICAgICAgICAgKnNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ2V0X21lc3NhZ2UgKFNvdXBIVFRQ
SW5wdXRTdHJlYW0gKmh0dHBzdHJlYW0pOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogX19T
T1VQX0hUVFBfSU5QVVRfU1RSRUFNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWRhdGEuYyBiL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uN2NmOTFjNgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmMKQEAgLTAsMCAr
MSwyMDUgQEAKKy8qCisgKiBzb3VwLXJlcXVlc3QtZGF0YS5jOiBkYXRhOiBVUkkgcmVxdWVzdCBv
YmplY3QKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwgSW5jLgorICogQ29weXJp
Z2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUg
PGNvbmZpZy5oPgorI2VuZGlmCisjaW5jbHVkZSAic291cC1yZXF1ZXN0LWRhdGEuaCIKKworI2lu
Y2x1ZGUgInNvdXAtcmVxdWVzdGVyLmgiCisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CisjaW5j
bHVkZSA8Z2xpYi9naTE4bi5oPgorCitHX0RFRklORV9UWVBFIChTb3VwUmVxdWVzdERhdGEsIHNv
dXBfcmVxdWVzdF9kYXRhLCBTT1VQX1RZUEVfUkVRVUVTVCkKKworc3RydWN0IF9Tb3VwUmVxdWVz
dERhdGFQcml2YXRlIHsKKwlnc2l6ZSBjb250ZW50X2xlbmd0aDsKKwljaGFyICpjb250ZW50X3R5
cGU7Cit9OworCitzdGF0aWMgdm9pZAorc291cF9yZXF1ZXN0X2RhdGFfaW5pdCAoU291cFJlcXVl
c3REYXRhICpkYXRhKQoreworCWRhdGEtPnByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZB
VEUgKGRhdGEsIFNPVVBfVFlQRV9SRVFVRVNUX0RBVEEsIFNvdXBSZXF1ZXN0RGF0YVByaXZhdGUp
OworfQorCitzdGF0aWMgdm9pZAorc291cF9yZXF1ZXN0X2RhdGFfZmluYWxpemUgKEdPYmplY3Qg
Km9iamVjdCkKK3sKKwlTb3VwUmVxdWVzdERhdGEgKmRhdGEgPSBTT1VQX1JFUVVFU1RfREFUQSAo
b2JqZWN0KTsKKworCWdfZnJlZSAoZGF0YS0+cHJpdi0+Y29udGVudF90eXBlKTsKKworCUdfT0JK
RUNUX0NMQVNTIChzb3VwX3JlcXVlc3RfZGF0YV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2Jq
ZWN0KTsKK30KKworc3RhdGljIGdib29sZWFuCitzb3VwX3JlcXVlc3RfZGF0YV9jaGVja191cmkg
KFNvdXBSZXF1ZXN0ICAqcmVxdWVzdCwKKwkJCSAgICAgU291cFVSSSAgICAgICp1cmksCisJCQkg
ICAgIEdFcnJvciAgICAgICoqZXJyb3IpCit7CisJcmV0dXJuIHVyaS0+aG9zdCA9PSBOVUxMOwor
fQorCisKKyNkZWZpbmUgWERJR0lUKGMpICgoYykgPD0gJzknID8gKGMpIC0gJzAnIDogKChjKSAm
IDB4NEYpIC0gJ0EnICsgMTApCisjZGVmaW5lIEhFWENIQVIocykgKChYRElHSVQgKHNbMV0pIDw8
IDQpICsgWERJR0lUIChzWzJdKSkKKworY2hhciAqCit1cmlfZGVjb2RlZF9jb3B5IChjb25zdCBj
aGFyICpwYXJ0LCBpbnQgbGVuZ3RoLCBnYm9vbGVhbiBmaXh1cCkKK3sKKwl1bnNpZ25lZCBjaGFy
ICpzLCAqZDsKKwljaGFyICpkZWNvZGVkID0gZ19zdHJuZHVwIChwYXJ0LCBsZW5ndGgpOworCisJ
cyA9IGQgPSAodW5zaWduZWQgY2hhciAqKWRlY29kZWQ7CisJZG8geworCQlpZiAoKnMgPT0gJyUn
KSB7CisJCQlpZiAoIWdfYXNjaWlfaXN4ZGlnaXQgKHNbMV0pIHx8CisJCQkgICAgIWdfYXNjaWlf
aXN4ZGlnaXQgKHNbMl0pKSB7CisJCQkJaWYgKCFmaXh1cCkgeworCQkJCQlnX2ZyZWUgKGRlY29k
ZWQpOworCQkJCQlyZXR1cm4gTlVMTDsKKwkJCQl9CisJCQkJKmQrKyA9ICpzOworCQkJCWNvbnRp
bnVlOworCQkJfQorCQkJKmQrKyA9IEhFWENIQVIgKHMpOworCQkJcyArPSAyOworCQl9IGVsc2UK
KwkJCSpkKysgPSAqczsKKwl9IHdoaWxlICgqcysrKTsKKworCXJldHVybiBkZWNvZGVkOworfQor
CitzdGF0aWMgR0lucHV0U3RyZWFtICoKK3NvdXBfcmVxdWVzdF9kYXRhX3NlbmQgKFNvdXBSZXF1
ZXN0ICAgKnJlcXVlc3QsCisJCQlHQ2FuY2VsbGFibGUgICpjYW5jZWxsYWJsZSwKKwkJCUdFcnJv
ciAgICAgICAqKmVycm9yKQoreworCVNvdXBSZXF1ZXN0RGF0YSAqZGF0YSA9IFNPVVBfUkVRVUVT
VF9EQVRBIChyZXF1ZXN0KTsKKwlTb3VwVVJJICp1cmkgPSBzb3VwX3JlcXVlc3RfZ2V0X3VyaSAo
cmVxdWVzdCk7CisJR0lucHV0U3RyZWFtICptZW1zdHJlYW07CisJY29uc3QgY2hhciAqY29tbWEs
ICpzZW1pLCAqc3RhcnQsICplbmQ7CisJZ2Jvb2xlYW4gYmFzZTY0ID0gRkFMU0U7CisKKwlnY2hh
ciAqdXJpc3RyID0gc291cF91cmlfdG9fc3RyaW5nICh1cmksIEZBTFNFKTsKKwljb21tYSA9IHN0
cmNociAodXJpc3RyLCAnLCcpOworCWlmIChjb21tYSAmJiBjb21tYSAhPSB1cmlzdHIpIHsKKwkJ
LyogRGVhbCB3aXRoIE1JTUUgdHlwZSAvIHBhcmFtcyAqLworCQlzZW1pID0gbWVtY2hyICh1cmlz
dHIsICc7JywgY29tbWEgLSB1cmlzdHIpOworCQllbmQgPSBzZW1pID8gc2VtaSA6IGNvbW1hOwor
CisJCWlmIChlbmQgIT0gdXJpc3RyKQorCQkJZGF0YS0+cHJpdi0+Y29udGVudF90eXBlID0gdXJp
X2RlY29kZWRfY29weSAodXJpc3RyLCBlbmQgLSB1cmlzdHIsIFRSVUUpOworCisJCWlmIChzZW1p
ICYmICFnX2FzY2lpX3N0cm5jYXNlY21wIChzZW1pLCAiO2Jhc2U2NCIsIE1BWCAoY29tbWEgLSBz
ZW1pLCBzdHJsZW4gKCI7YmFzZTY0IikpKSkKKwkJCWJhc2U2NCA9IFRSVUU7CisJfQorCisJbWVt
c3RyZWFtID0gZ19tZW1vcnlfaW5wdXRfc3RyZWFtX25ldyAoKTsKKworCXN0YXJ0ID0gY29tbWEg
PyBjb21tYSArIDEgOiB1cmlzdHI7CisKKwlpZiAoKnN0YXJ0KSB7CisJCWd1Y2hhciAqYnVmOwor
CisJCWlmIChiYXNlNjQpIHsKKwkJCWludCBpbmxlbiwgc3RhdGUgPSAwOworCQkJZ3VpbnQgc2F2
ZSA9IDA7CisJCQljaGFyICp1bmVzY2FwZWQ7CisKKwkJCWlmIChzdHJjaHIgKHN0YXJ0LCAnJScp
KSB7CisJCQkJc3RhcnQgPSB1bmVzY2FwZWQgPSB1cmlfZGVjb2RlZF9jb3B5IChzdGFydCwgc3Ry
bGVuIChzdGFydCksIFRSVUUpOworCQkJCWlmICghdW5lc2NhcGVkKQorCQkJCQlnb3RvIGZhaWw7
CisJCQl9IGVsc2UKKwkJCQl1bmVzY2FwZWQgPSBOVUxMOworCisJCQlpbmxlbiA9IHN0cmxlbiAo
c3RhcnQpOworCQkJYnVmID0gZ19tYWxsb2MgKGlubGVuICogMyAvIDQpOworCQkJZGF0YS0+cHJp
di0+Y29udGVudF9sZW5ndGggPQorCQkJCWdfYmFzZTY0X2RlY29kZV9zdGVwIChzdGFydCwgaW5s
ZW4sIGJ1ZiwKKwkJCQkJCSAgICAgICZzdGF0ZSwgJnNhdmUpOworCQkJZ19mcmVlICh1bmVzY2Fw
ZWQpOworCQkJaWYgKHN0YXRlICE9IDApIHsKKwkJCQlnX2ZyZWUgKGJ1Zik7CisJCQkJZ290byBm
YWlsOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogQ2Fubm90IHVzZSBnX3VyaV91bmVzY2FwZV9z
dHJpbmcgbm9yCisJCQkgICBzb3VwX3VyaV9kZWNvZGUgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRv
CisJCQkgICBmYWlsIGZvciB0aGluZ3MgbGlrZSAiJTNFJSUzQyIgLT4gIj4lPCIgKi8KKwkJCWJ1
ZiA9IChndWNoYXIgKil1cmlfZGVjb2RlZF9jb3B5IChzdGFydCwgc3RybGVuIChzdGFydCksIFRS
VUUpOworCQkJaWYgKCFidWYpCisJCQkJZ290byBmYWlsOworCQkJZGF0YS0+cHJpdi0+Y29udGVu
dF9sZW5ndGggPSBzdHJsZW4gKChjaGFyICopYnVmKTsKKwkJfQorCisJCWdfbWVtb3J5X2lucHV0
X3N0cmVhbV9hZGRfZGF0YSAoR19NRU1PUllfSU5QVVRfU1RSRUFNIChtZW1zdHJlYW0pLAorCQkJ
CQkJYnVmLCBkYXRhLT5wcml2LT5jb250ZW50X2xlbmd0aCwKKwkJCQkJCWdfZnJlZSk7CisJfQor
CWdfZnJlZSAodXJpc3RyKTsKKworCXJldHVybiBtZW1zdHJlYW07CisKKyBmYWlsOgorCWdfZnJl
ZSAodXJpc3RyKTsKKwlnX3NldF9lcnJvciAoZXJyb3IsIFNPVVBfRVJST1IsIFNPVVBfRVJST1Jf
QkFEX1VSSSwKKwkJICAgICBfICgiVW5hYmxlIHRvIGRlY29kZSBVUkk6ICVzIiksIHN0YXJ0KTsK
KwlnX29iamVjdF91bnJlZiAobWVtc3RyZWFtKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGlj
IGdvZmZzZXQKK3NvdXBfcmVxdWVzdF9kYXRhX2dldF9jb250ZW50X2xlbmd0aCAoU291cFJlcXVl
c3QgKnJlcXVlc3QpCit7CisJU291cFJlcXVlc3REYXRhICpkYXRhID0gU09VUF9SRVFVRVNUX0RB
VEEgKHJlcXVlc3QpOworCisJcmV0dXJuIGRhdGEtPnByaXYtPmNvbnRlbnRfbGVuZ3RoOworfQor
CitzdGF0aWMgY29uc3QgY2hhciAqCitzb3VwX3JlcXVlc3RfZGF0YV9nZXRfY29udGVudF90eXBl
IChTb3VwUmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlTb3VwUmVxdWVzdERhdGEgKmRhdGEgPSBTT1VQ
X1JFUVVFU1RfREFUQSAocmVxdWVzdCk7CisKKwlyZXR1cm4gZGF0YS0+cHJpdi0+Y29udGVudF90
eXBlOworfQorCitzdGF0aWMgdm9pZAorc291cF9yZXF1ZXN0X2RhdGFfY2xhc3NfaW5pdCAoU291
cFJlcXVlc3REYXRhQ2xhc3MgKnJlcXVlc3RfZGF0YV9jbGFzcykKK3sKKwlHT2JqZWN0Q2xhc3Mg
Km9iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChyZXF1ZXN0X2RhdGFfY2xhc3MpOworCVNv
dXBSZXF1ZXN0Q2xhc3MgKnJlcXVlc3RfY2xhc3MgPQorCQlTT1VQX1JFUVVFU1RfQ0xBU1MgKHJl
cXVlc3RfZGF0YV9jbGFzcyk7CisKKwlnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUgKHJlcXVlc3Rf
ZGF0YV9jbGFzcywgc2l6ZW9mIChTb3VwUmVxdWVzdERhdGFQcml2YXRlKSk7CisKKwlvYmplY3Rf
Y2xhc3MtPmZpbmFsaXplID0gc291cF9yZXF1ZXN0X2RhdGFfZmluYWxpemU7CisKKwlyZXF1ZXN0
X2NsYXNzLT5jaGVja191cmkgPSBzb3VwX3JlcXVlc3RfZGF0YV9jaGVja191cmk7CisJcmVxdWVz
dF9jbGFzcy0+c2VuZCA9IHNvdXBfcmVxdWVzdF9kYXRhX3NlbmQ7CisJcmVxdWVzdF9jbGFzcy0+
Z2V0X2NvbnRlbnRfbGVuZ3RoID0gc291cF9yZXF1ZXN0X2RhdGFfZ2V0X2NvbnRlbnRfbGVuZ3Ro
OworCXJlcXVlc3RfY2xhc3MtPmdldF9jb250ZW50X3R5cGUgPSBzb3VwX3JlcXVlc3RfZGF0YV9n
ZXRfY29udGVudF90eXBlOworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWRhdGEuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNWMxNGYzNwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmgKQEAgLTAsMCArMSw1MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgU09VUF9SRVFVRVNUX0RBVEFfSAorI2RlZmluZSBT
T1VQX1JFUVVFU1RfREFUQV9IIDEKKworI2luY2x1ZGUgInNvdXAtcmVxdWVzdC5oIgorCitHX0JF
R0lOX0RFQ0xTCisKKyNkZWZpbmUgU09VUF9UWVBFX1JFUVVFU1RfREFUQSAgICAgICAgICAgIChz
b3VwX3JlcXVlc3RfZGF0YV9nZXRfdHlwZSAoKSkKKyNkZWZpbmUgU09VUF9SRVFVRVNUX0RBVEEo
b2JqZWN0KSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iamVjdCksIFNP
VVBfVFlQRV9SRVFVRVNUX0RBVEEsIFNvdXBSZXF1ZXN0RGF0YSkpCisjZGVmaW5lIFNPVVBfUkVR
VUVTVF9EQVRBX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFz
cyksIFNPVVBfVFlQRV9SRVFVRVNUX0RBVEEsIFNvdXBSZXF1ZXN0RGF0YUNsYXNzKSkKKyNkZWZp
bmUgU09VUF9JU19SRVFVRVNUX0RBVEEob2JqZWN0KSAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfVFlQRSAoKG9iamVjdCksIFNPVVBfVFlQRV9SRVFVRVNUX0RBVEEpKQorI2RlZmluZSBTT1VQ
X0lTX1JFUVVFU1RfREFUQV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgo
a2xhc3MpLCBTT1VQX1RZUEVfUkVRVUVTVF9EQVRBKSkKKyNkZWZpbmUgU09VUF9SRVFVRVNUX0RB
VEFfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgU09V
UF9UWVBFX1JFUVVFU1RfREFUQSwgU291cFJlcXVlc3REYXRhQ2xhc3MpKQorCit0eXBlZGVmIHN0
cnVjdCBfU291cFJlcXVlc3REYXRhUHJpdmF0ZSBTb3VwUmVxdWVzdERhdGFQcml2YXRlOworCit0
eXBlZGVmIHN0cnVjdCB7CisJU291cFJlcXVlc3QgcGFyZW50OworCisJU291cFJlcXVlc3REYXRh
UHJpdmF0ZSAqcHJpdjsKK30gU291cFJlcXVlc3REYXRhOworCit0eXBlZGVmIHN0cnVjdCB7CisJ
U291cFJlcXVlc3RDbGFzcyBwYXJlbnQ7Cit9IFNvdXBSZXF1ZXN0RGF0YUNsYXNzOworCitHVHlw
ZSBzb3VwX3JlcXVlc3RfZGF0YV9nZXRfdHlwZSAodm9pZCk7CisKK0dfRU5EX0RFQ0xTCisKKyNl
bmRpZiAvKiBTT1VQX1JFUVVFU1RfREFUQV9IICovCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZmlsZS5jIGIvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWZpbGUuYwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2MxZjE2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWZpbGUuYwpAQCAtMCww
ICsxLDMxMyBAQAorLyoKKyAqIHNvdXAtcmVxdWVzdC1maWxlLmM6IGZpbGU6IFVSSSByZXF1ZXN0
IG9iamVjdAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVk
ZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgInNvdXAtcmVxdWVzdC1maWxlLmgiCisj
aW5jbHVkZSAic291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmgiCisjaW5jbHVkZSAic291cC1y
ZXF1ZXN0ZXIuaCIKKyNpbmNsdWRlIDxnbGliL2dpMThuLmg+CisKK0dfREVGSU5FX1RZUEUgKFNv
dXBSZXF1ZXN0RmlsZSwgc291cF9yZXF1ZXN0X2ZpbGUsIFNPVVBfVFlQRV9SRVFVRVNUKQorCitz
dHJ1Y3QgX1NvdXBSZXF1ZXN0RmlsZVByaXZhdGUgeworCUdGaWxlICpnZmlsZTsKKworCWNoYXIg
Km1pbWVfdHlwZTsKKwlnb2Zmc2V0IHNpemU7Cit9OworCitHRmlsZSAqCitzb3VwX3JlcXVlc3Rf
ZmlsZV9nZXRfZmlsZSAoU291cFJlcXVlc3RGaWxlICpmaWxlKQoreworCXJldHVybiBnX29iamVj
dF9yZWYgKGZpbGUtPnByaXYtPmdmaWxlKTsKK30KKworc3RhdGljIHZvaWQKK3NvdXBfcmVxdWVz
dF9maWxlX2luaXQgKFNvdXBSZXF1ZXN0RmlsZSAqZmlsZSkKK3sKKwlmaWxlLT5wcml2ID0gR19U
WVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFIChmaWxlLCBTT1VQX1RZUEVfUkVRVUVTVF9GSUxFLCBT
b3VwUmVxdWVzdEZpbGVQcml2YXRlKTsKKworCWZpbGUtPnByaXYtPnNpemUgPSAtMTsKK30KKwor
c3RhdGljIHZvaWQKK3NvdXBfcmVxdWVzdF9maWxlX2ZpbmFsaXplIChHT2JqZWN0ICpvYmplY3Qp
Cit7CisJU291cFJlcXVlc3RGaWxlICpmaWxlID0gU09VUF9SRVFVRVNUX0ZJTEUgKG9iamVjdCk7
CisKKwlpZiAoZmlsZS0+cHJpdi0+Z2ZpbGUpCisJCWdfb2JqZWN0X3VucmVmIChmaWxlLT5wcml2
LT5nZmlsZSk7CisJZ19mcmVlIChmaWxlLT5wcml2LT5taW1lX3R5cGUpOworCisJR19PQkpFQ1Rf
Q0xBU1MgKHNvdXBfcmVxdWVzdF9maWxlX3BhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3Qp
OworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3NvdXBfcmVxdWVzdF9maWxlX2NoZWNrX3VyaSAoU291
cFJlcXVlc3QgICpyZXF1ZXN0LAorCQkJICAgICBTb3VwVVJJICAgICAgKnVyaSwKKwkJCSAgICAg
R0Vycm9yICAgICAgKiplcnJvcikKK3sKKwkvKiAiZmlsZTovZm9vIiBpcyBub3QgdmFsaWQgKi8K
KwlpZiAoIXVyaS0+aG9zdCkKKwkJcmV0dXJuIEZBTFNFOworCisJLyogYnV0IGl0IG11c3QgYmUg
ImZpbGU6Ly8vLi4uIiBvciAiZmlsZTovL2xvY2FsaG9zdC8uLi4iICovCisJaWYgKHVyaS0+c2No
ZW1lID09IFNPVVBfVVJJX1NDSEVNRV9GSUxFICYmCisJICAgICp1cmktPmhvc3QgJiYKKwkgICAg
Z19hc2NpaV9zdHJjYXNlY21wICh1cmktPmhvc3QsICJsb2NhbGhvc3QiKSAhPSAwKQorCQlyZXR1
cm4gRkFMU0U7CisKKwlyZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQKK3NvdXBfcmVxdWVz
dF9maWxlX2Z0cF9tYWluX2xvb3BfcXVpdCAoR09iamVjdCAgICAgICpvYmplY3QsCisJCQkJICAg
ICAgR0FzeW5jUmVzdWx0ICpyZXN1bHQsCisJCQkJICAgICAgZ3BvaW50ZXIgbG9vcCkKK3sKKwln
X21haW5fbG9vcF9xdWl0IChsb29wKTsKK30KKworLyogVGhpcyBpcyBhIHNvbWV3aGF0IGhhY2t5
IHdheSB0byBnZXQgRlRQIHRvIGFsbW9zdCB3b3JrLiBUaGUgcHJvcGVyIHdheSB0bworICogZ2V0
IEZUUCB0byBfcmVhbGx5XyB3b3JrIGludm9sdmVzIGhhY2tpbmcgR0lPIHRvIGhhdmUgQVBJcyB0
byBoYW5kbGUKKyAqIGNhbm9uY2lhbCBVUkxzLgorICovCitzdGF0aWMgR0ZpbGUgKgorc291cF9y
ZXF1ZXN0X2ZpbGVfZW5zdXJlX2ZpbGVfZnRwIChTb3VwVVJJICAgICAgICp1cmksCisJCQkJICAg
R0NhbmNlbGxhYmxlICAqY2FuY2VsbGFibGUsCisJCQkJICAgR0Vycm9yICAgICAgICoqZXJyb3Ip
Cit7CisJU291cFVSSSAqaG9zdDsKKwljaGFyICpzOworCUdGaWxlICpmaWxlLCAqcmVzdWx0Owor
CUdNb3VudCAqbW91bnQ7CisKKwlob3N0ID0gc291cF91cmlfY29weV9ob3N0ICh1cmkpOworCXMg
PSBzb3VwX3VyaV90b19zdHJpbmcgKGhvc3QsIEZBTFNFKTsKKwlmaWxlID0gZ19maWxlX25ld19m
b3JfdXJpIChzKTsKKwlzb3VwX3VyaV9mcmVlIChob3N0KTsKKwlnX2ZyZWUgKHMpOworCisJbW91
bnQgPSBnX2ZpbGVfZmluZF9lbmNsb3NpbmdfbW91bnQgKGZpbGUsIGNhbmNlbGxhYmxlLCBlcnJv
cik7CisJaWYgKG1vdW50ID09IE5VTEwgJiYgZ19maWxlX3N1cHBvcnRzX3RocmVhZF9jb250ZXh0
cyAoZmlsZSkpIHsKKwkJR01haW5Db250ZXh0ICpjb250ZXh0ID0gZ19tYWluX2NvbnRleHRfbmV3
ICgpOworCQlHTWFpbkxvb3AgKmxvb3AgPSBnX21haW5fbG9vcF9uZXcgKGNvbnRleHQsIEZBTFNF
KTsKKworCQlnX2NsZWFyX2Vycm9yIChlcnJvcik7CisJCWdfbWFpbl9jb250ZXh0X3B1c2hfdGhy
ZWFkX2RlZmF1bHQgKGNvbnRleHQpOworCQlnX2ZpbGVfbW91bnRfZW5jbG9zaW5nX3ZvbHVtZSAo
ZmlsZSwKKwkJCQkJICAgICAgIEdfTU9VTlRfTU9VTlRfTk9ORSwKKwkJCQkJICAgICAgIE5VTEws
IC8qIEZJWE1FISAqLworCQkJCQkgICAgICAgY2FuY2VsbGFibGUsCisJCQkJCSAgICAgICBzb3Vw
X3JlcXVlc3RfZmlsZV9mdHBfbWFpbl9sb29wX3F1aXQsCisJCQkJCSAgICAgICBsb29wKTsKKwkJ
Z19tYWluX2xvb3BfcnVuIChsb29wKTsKKwkJZ19tYWluX2NvbnRleHRfcG9wX3RocmVhZF9kZWZh
dWx0IChjb250ZXh0KTsKKwkJZ19tYWluX2xvb3BfdW5yZWYgKGxvb3ApOworCQlnX21haW5fY29u
dGV4dF91bnJlZiAoY29udGV4dCk7CisJCW1vdW50ID0gZ19maWxlX2ZpbmRfZW5jbG9zaW5nX21v
dW50IChmaWxlLCBjYW5jZWxsYWJsZSwgZXJyb3IpOworCX0KKwlpZiAobW91bnQgPT0gTlVMTCkK
KwkJcmV0dXJuIE5VTEw7CisJZ19vYmplY3RfdW5yZWYgKGZpbGUpOworCisJZmlsZSA9IGdfbW91
bnRfZ2V0X2RlZmF1bHRfbG9jYXRpb24gKG1vdW50KTsKKwlnX29iamVjdF91bnJlZiAobW91bnQp
OworCisJcyA9IGdfc3RyZHVwICh1cmktPnBhdGgpOworCWlmIChzdHJjaHIgKHMsICc7JykpCisJ
CSpzdHJjaHIgKHMsICc7JykgPSAwOworCisJcmVzdWx0ID0gZ19maWxlX3Jlc29sdmVfcmVsYXRp
dmVfcGF0aCAoZmlsZSwgcyk7CisJZ19mcmVlIChzKTsKKwlnX29iamVjdF91bnJlZiAoZmlsZSk7
CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3NvdXBfcmVxdWVzdF9m
aWxlX2Vuc3VyZV9maWxlIChTb3VwUmVxdWVzdEZpbGUgICpmaWxlLAorCQkJICAgICAgIEdDYW5j
ZWxsYWJsZSAgICAgKmNhbmNlbGxhYmxlLAorCQkJICAgICAgIEdFcnJvciAgICAgICAgICAqKmVy
cm9yKQoreworCVNvdXBVUkkgKnVyaTsKKworCWlmIChmaWxlLT5wcml2LT5nZmlsZSkKKwkJcmV0
dXJuIFRSVUU7CisKKwl1cmkgPSBzb3VwX3JlcXVlc3RfZ2V0X3VyaSAoU09VUF9SRVFVRVNUIChm
aWxlKSk7CisJaWYgKHVyaS0+c2NoZW1lID09IFNPVVBfVVJJX1NDSEVNRV9GSUxFKSB7CisJCWZp
bGUtPnByaXYtPmdmaWxlID0gZ19maWxlX25ld19mb3JfcGF0aCAoc291cF91cmlfZGVjb2RlICh1
cmktPnBhdGgpKTsKKwkJcmV0dXJuIFRSVUU7CisJfSBlbHNlIGlmICh1cmktPnNjaGVtZSA9PSBT
T1VQX1VSSV9TQ0hFTUVfRlRQKSB7CisJCWZpbGUtPnByaXYtPmdmaWxlID0gc291cF9yZXF1ZXN0
X2ZpbGVfZW5zdXJlX2ZpbGVfZnRwICh1cmksCisJCQkJCQkJCSAgICAgICBjYW5jZWxsYWJsZSwK
KwkJCQkJCQkJICAgICAgIGVycm9yKTsKKwkJcmV0dXJuIGZpbGUtPnByaXYtPmdmaWxlICE9IE5V
TEw7CisJfQorCisJZ19zZXRfZXJyb3IgKGVycm9yLCBTT1VQX0VSUk9SLCBTT1VQX0VSUk9SX1VO
U1VQUE9SVEVEX1VSSV9TQ0hFTUUsCisJCSAgICAgXyAoIlVuc3VwcG9ydGVkIFVSSSBzY2hlbWUg
JyVzJyIpLCB1cmktPnNjaGVtZSk7CisJcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgR0lucHV0
U3RyZWFtICoKK3NvdXBfcmVxdWVzdF9maWxlX3NlbmQgKFNvdXBSZXF1ZXN0ICAgICAgICAgICpy
ZXF1ZXN0LAorCQkJR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJR0Vycm9y
ICAgICAgICAgICAgICAqKmVycm9yKQoreworCVNvdXBSZXF1ZXN0RmlsZSAqZmlsZSA9IFNPVVBf
UkVRVUVTVF9GSUxFIChyZXF1ZXN0KTsKKwlHSW5wdXRTdHJlYW0gKnN0cmVhbTsKKwlHRXJyb3Ig
Km15X2Vycm9yID0gTlVMTDsKKworCWlmICghc291cF9yZXF1ZXN0X2ZpbGVfZW5zdXJlX2ZpbGUg
KGZpbGUsIGNhbmNlbGxhYmxlLCBlcnJvcikpCisJCXJldHVybiBOVUxMOworCisJc3RyZWFtID0g
R19JTlBVVF9TVFJFQU0gKGdfZmlsZV9yZWFkIChmaWxlLT5wcml2LT5nZmlsZSwKKwkJCQkJICAg
ICAgY2FuY2VsbGFibGUsICZteV9lcnJvcikpOworCWlmIChzdHJlYW0gPT0gTlVMTCkgeworCQlp
ZiAoZ19lcnJvcl9tYXRjaGVzIChteV9lcnJvciwgR19JT19FUlJPUiwgR19JT19FUlJPUl9JU19E
SVJFQ1RPUlkpKSB7CisJCQlHRmlsZUVudW1lcmF0b3IgKmVudW1lcmF0b3I7CisJCQlnX2NsZWFy
X2Vycm9yICgmbXlfZXJyb3IpOworCQkJZW51bWVyYXRvciA9IGdfZmlsZV9lbnVtZXJhdGVfY2hp
bGRyZW4gKGZpbGUtPnByaXYtPmdmaWxlLAorCQkJCQkJCQkiKiIsCisJCQkJCQkJCUdfRklMRV9R
VUVSWV9JTkZPX05PTkUsCisJCQkJCQkJCWNhbmNlbGxhYmxlLAorCQkJCQkJCQllcnJvcik7CisJ
CQlpZiAoZW51bWVyYXRvcikgeworCQkJCXN0cmVhbSA9IHNvdXBfZGlyZWN0b3J5X2lucHV0X3N0
cmVhbV9uZXcgKGVudW1lcmF0b3IsCisJCQkJCQkJCQkgIHNvdXBfcmVxdWVzdF9nZXRfdXJpIChy
ZXF1ZXN0KSk7CisJCQkJZ19vYmplY3RfdW5yZWYgKGVudW1lcmF0b3IpOworCQkJCWZpbGUtPnBy
aXYtPm1pbWVfdHlwZSA9IGdfc3RyZHVwICgidGV4dC9odG1sIik7CisJCQl9CisJCX0gZWxzZSB7
CisJCQlnX3Byb3BhZ2F0ZV9lcnJvciAoZXJyb3IsIG15X2Vycm9yKTsKKwkJfQorCX0gZWxzZSB7
CisJCUdGaWxlSW5mbyAqaW5mbyA9IGdfZmlsZV9xdWVyeV9pbmZvIChmaWxlLT5wcml2LT5nZmls
ZSwKKwkJCQkJCSAgICAgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9DT05URU5UX1RZUEUgIiwi
CisJCQkJCQkgICAgIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfU0laRSwKKwkJCQkJCSAgICAg
MCwgY2FuY2VsbGFibGUsIE5VTEwpOworCQlpZiAoaW5mbykgeworCQkJY29uc3QgY2hhciAqY29u
dGVudF90eXBlOworCQkJZmlsZS0+cHJpdi0+c2l6ZSA9IGdfZmlsZV9pbmZvX2dldF9zaXplIChp
bmZvKTsKKwkJCWNvbnRlbnRfdHlwZSA9IGdfZmlsZV9pbmZvX2dldF9jb250ZW50X3R5cGUgKGlu
Zm8pOworCisJCQlpZiAoY29udGVudF90eXBlKQorCQkJCWZpbGUtPnByaXYtPm1pbWVfdHlwZSA9
IGdfY29udGVudF90eXBlX2dldF9taW1lX3R5cGUgKGNvbnRlbnRfdHlwZSk7CisJCQlnX29iamVj
dF91bnJlZiAoaW5mbyk7CisJCX0KKwl9CisKKwlyZXR1cm4gc3RyZWFtOworfQorCitzdGF0aWMg
dm9pZAorc291cF9yZXF1ZXN0X2ZpbGVfc2VuZF9hc3luY190aHJlYWQgKEdTaW1wbGVBc3luY1Jl
c3VsdCAqcmVzLAorCQkJCSAgICAgR09iamVjdCAgICAgICAgICAgICpvYmplY3QsCisJCQkJICAg
ICBHQ2FuY2VsbGFibGUgICAgICAgKmNhbmNlbGxhYmxlKQoreworCUdJbnB1dFN0cmVhbSAqc3Ry
ZWFtOworCVNvdXBSZXF1ZXN0ICpyZXF1ZXN0OworCUdFcnJvciAqZXJyb3IgPSBOVUxMOworCisJ
cmVxdWVzdCA9IFNPVVBfUkVRVUVTVCAob2JqZWN0KTsKKworCXN0cmVhbSA9IHNvdXBfcmVxdWVz
dF9maWxlX3NlbmQgKHJlcXVlc3QsIGNhbmNlbGxhYmxlLCAmZXJyb3IpOworCisJaWYgKHN0cmVh
bSA9PSBOVUxMKSB7CisJCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfZnJvbV9lcnJvciAocmVz
LCBlcnJvcik7CisJCWdfZXJyb3JfZnJlZSAoZXJyb3IpOworCX0gZWxzZSB7CisJCWdfc2ltcGxl
X2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dwb2ludGVyIChyZXMsIHN0cmVhbSwgZ19vYmplY3Rf
dW5yZWYpOworCX0KK30KKworc3RhdGljIHZvaWQKK3NvdXBfcmVxdWVzdF9maWxlX3NlbmRfYXN5
bmMgKFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAorCQkJICAgICAgR0NhbmNlbGxhYmxl
ICAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJICAgICAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxs
YmFjaywKKwkJCSAgICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlHU2ltcGxlQXN5bmNSZXN1
bHQgKnJlczsKKworCXJlcyA9IGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcgKEdfT0JKRUNUIChy
ZXF1ZXN0KSwgY2FsbGJhY2ssIHVzZXJfZGF0YSwgc291cF9yZXF1ZXN0X2ZpbGVfc2VuZF9hc3lu
Yyk7CisKKwlnX3NpbXBsZV9hc3luY19yZXN1bHRfcnVuX2luX3RocmVhZCAocmVzLCBzb3VwX3Jl
cXVlc3RfZmlsZV9zZW5kX2FzeW5jX3RocmVhZCwgR19QUklPUklUWV9ERUZBVUxULCBjYW5jZWxs
YWJsZSk7CisJZ19vYmplY3RfdW5yZWYgKHJlcyk7Cit9CisKK3N0YXRpYyBHSW5wdXRTdHJlYW0g
Kgorc291cF9yZXF1ZXN0X2ZpbGVfc2VuZF9maW5pc2ggKFNvdXBSZXF1ZXN0ICAgICAgICAgICpy
ZXF1ZXN0LAorCQkJICAgICAgIEdBc3luY1Jlc3VsdCAgICAgICAgICpyZXN1bHQsCisJCQkgICAg
ICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKQoreworCUdTaW1wbGVBc3luY1Jlc3VsdCAq
c2ltcGxlID0gR19TSU1QTEVfQVNZTkNfUkVTVUxUIChyZXN1bHQpOworCisJZ193YXJuX2lmX2Zh
aWwgKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfc291cmNlX3RhZyAoc2ltcGxlKSA9PSBzb3Vw
X3JlcXVlc3RfZmlsZV9zZW5kX2FzeW5jKTsKKworCWlmIChnX3NpbXBsZV9hc3luY19yZXN1bHRf
cHJvcGFnYXRlX2Vycm9yIChzaW1wbGUsIGVycm9yKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1
cm4gZ19vYmplY3RfcmVmIChnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X29wX3Jlc19ncG9pbnRl
ciAoc2ltcGxlKSk7Cit9CisKK3N0YXRpYyBnb2Zmc2V0Citzb3VwX3JlcXVlc3RfZmlsZV9nZXRf
Y29udGVudF9sZW5ndGggKFNvdXBSZXF1ZXN0ICpyZXF1ZXN0KQoreworCVNvdXBSZXF1ZXN0Rmls
ZSAqZmlsZSA9IFNPVVBfUkVRVUVTVF9GSUxFIChyZXF1ZXN0KTsKKworCXJldHVybiBmaWxlLT5w
cml2LT5zaXplOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitzb3VwX3JlcXVlc3RfZmlsZV9n
ZXRfY29udGVudF90eXBlIChTb3VwUmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlTb3VwUmVxdWVzdEZp
bGUgKmZpbGUgPSBTT1VQX1JFUVVFU1RfRklMRSAocmVxdWVzdCk7CisKKwlpZiAoIWZpbGUtPnBy
aXYtPm1pbWVfdHlwZSkKKwkJcmV0dXJuICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iOworCisJ
cmV0dXJuIGZpbGUtPnByaXYtPm1pbWVfdHlwZTsKK30KKworc3RhdGljIHZvaWQKK3NvdXBfcmVx
dWVzdF9maWxlX2NsYXNzX2luaXQgKFNvdXBSZXF1ZXN0RmlsZUNsYXNzICpyZXF1ZXN0X2ZpbGVf
Y2xhc3MpCit7CisJR09iamVjdENsYXNzICpvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAo
cmVxdWVzdF9maWxlX2NsYXNzKTsKKwlTb3VwUmVxdWVzdENsYXNzICpyZXF1ZXN0X2NsYXNzID0K
KwkJU09VUF9SRVFVRVNUX0NMQVNTIChyZXF1ZXN0X2ZpbGVfY2xhc3MpOworCisJZ190eXBlX2Ns
YXNzX2FkZF9wcml2YXRlIChyZXF1ZXN0X2ZpbGVfY2xhc3MsIHNpemVvZiAoU291cFJlcXVlc3RG
aWxlUHJpdmF0ZSkpOworCisJb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IHNvdXBfcmVxdWVzdF9m
aWxlX2ZpbmFsaXplOworCisJcmVxdWVzdF9jbGFzcy0+Y2hlY2tfdXJpID0gc291cF9yZXF1ZXN0
X2ZpbGVfY2hlY2tfdXJpOworCXJlcXVlc3RfY2xhc3MtPnNlbmQgPSBzb3VwX3JlcXVlc3RfZmls
ZV9zZW5kOworCXJlcXVlc3RfY2xhc3MtPnNlbmRfYXN5bmMgPSBzb3VwX3JlcXVlc3RfZmlsZV9z
ZW5kX2FzeW5jOworCXJlcXVlc3RfY2xhc3MtPnNlbmRfZmluaXNoID0gc291cF9yZXF1ZXN0X2Zp
bGVfc2VuZF9maW5pc2g7CisJcmVxdWVzdF9jbGFzcy0+Z2V0X2NvbnRlbnRfbGVuZ3RoID0gc291
cF9yZXF1ZXN0X2ZpbGVfZ2V0X2NvbnRlbnRfbGVuZ3RoOworCXJlcXVlc3RfY2xhc3MtPmdldF9j
b250ZW50X3R5cGUgPSBzb3VwX3JlcXVlc3RfZmlsZV9nZXRfY29udGVudF90eXBlOworfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0
LWZpbGUuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVz
dC1maWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q4OGQzZAotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAt
cmVxdWVzdC1maWxlLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5k
ZWYgU09VUF9SRVFVRVNUX0ZJTEVfSAorI2RlZmluZSBTT1VQX1JFUVVFU1RfRklMRV9IIDEKKwor
I2luY2x1ZGUgInNvdXAtcmVxdWVzdC5oIgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgU09V
UF9UWVBFX1JFUVVFU1RfRklMRSAgICAgICAgICAgIChzb3VwX3JlcXVlc3RfZmlsZV9nZXRfdHlw
ZSAoKSkKKyNkZWZpbmUgU09VUF9SRVFVRVNUX0ZJTEUob2JqZWN0KSAgICAgICAgIChHX1RZUEVf
Q0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iamVjdCksIFNPVVBfVFlQRV9SRVFVRVNUX0ZJTEUsIFNv
dXBSZXF1ZXN0RmlsZSkpCisjZGVmaW5lIFNPVVBfUkVRVUVTVF9GSUxFX0NMQVNTKGtsYXNzKSAg
ICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFNPVVBfVFlQRV9SRVFVRVNUX0ZJ
TEUsIFNvdXBSZXF1ZXN0RmlsZUNsYXNzKSkKKyNkZWZpbmUgU09VUF9JU19SRVFVRVNUX0ZJTEUo
b2JqZWN0KSAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iamVjdCksIFNPVVBf
VFlQRV9SRVFVRVNUX0ZJTEUpKQorI2RlZmluZSBTT1VQX0lTX1JFUVVFU1RfRklMRV9DTEFTUyhr
bGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBTT1VQX1RZUEVfUkVRVUVT
VF9GSUxFKSkKKyNkZWZpbmUgU09VUF9SRVFVRVNUX0ZJTEVfR0VUX0NMQVNTKG9iaikgIChHX1RZ
UEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgU09VUF9UWVBFX1JFUVVFU1RfRklMRSwgU291
cFJlcXVlc3RGaWxlQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfU291cFJlcXVlc3RGaWxlUHJp
dmF0ZSBTb3VwUmVxdWVzdEZpbGVQcml2YXRlOworCit0eXBlZGVmIHN0cnVjdCB7CisJU291cFJl
cXVlc3QgcGFyZW50OworCisJU291cFJlcXVlc3RGaWxlUHJpdmF0ZSAqcHJpdjsKK30gU291cFJl
cXVlc3RGaWxlOworCit0eXBlZGVmIHN0cnVjdCB7CisJU291cFJlcXVlc3RDbGFzcyBwYXJlbnQ7
Cit9IFNvdXBSZXF1ZXN0RmlsZUNsYXNzOworCitHVHlwZSBzb3VwX3JlcXVlc3RfZmlsZV9nZXRf
dHlwZSAodm9pZCk7CisKK0dGaWxlICAqc291cF9yZXF1ZXN0X2ZpbGVfZ2V0X2ZpbGUgKFNvdXBS
ZXF1ZXN0RmlsZSAqZmlsZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBTT1VQX1JFUVVF
U1RfRklMRV9IICovCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9j
YWNoZS9zb3VwLXJlcXVlc3QtaHR0cC5jIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
Y2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi44NzNjMmJlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuYwpAQCAtMCwwICsxLDMzOSBAQAorLyoKKyAq
IHNvdXAtcmVxdWVzdC1odHRwLmM6IGh0dHA6IFVSSSByZXF1ZXN0IG9iamVjdAorICoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdh
bGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5k
aWYKKworI2luY2x1ZGUgPGdsaWIvZ2kxOG4uaD4KKworI2luY2x1ZGUgInNvdXAtY2FjaGUuaCIK
KyNpbmNsdWRlICJzb3VwLWNhY2hlLXByaXZhdGUuaCIKKyNpbmNsdWRlICJzb3VwLWh0dHAtaW5w
dXQtc3RyZWFtLmgiCisjaW5jbHVkZSAic291cC1yZXF1ZXN0LWh0dHAuaCIKKworR19ERUZJTkVf
VFlQRSAoU291cFJlcXVlc3RIVFRQLCBzb3VwX3JlcXVlc3RfaHR0cCwgU09VUF9UWVBFX1JFUVVF
U1QpCisKK3N0cnVjdCBfU291cFJlcXVlc3RIVFRQUHJpdmF0ZSB7CisJU291cE1lc3NhZ2UgKm1z
ZzsKK307CisKKy8qKgorICogc291cF9yZXF1ZXN0X2h0dHBfZ2V0X21lc3NhZ2U6CisgKiBAaHR0
cDogYSAjU291cFJlcXVlc3RIVFRQIG9iamVjdAorICoKKyAqIEdldHMgYSBuZXcgcmVmZXJlbmNl
IHRvIHRoZSAjU291cE1lc3NhZ2UgYXNzb2NpYXRlZCB0byB0aGlzIFNvdXBSZXF1ZXN0CisgKgor
ICogUmV0dXJuczogYSBuZXcgcmVmZXJlbmNlIHRvIHRoZSAjU291cE1lc3NhZ2UKKyAqKi8KK1Nv
dXBNZXNzYWdlICoKK3NvdXBfcmVxdWVzdF9odHRwX2dldF9tZXNzYWdlIChTb3VwUmVxdWVzdEhU
VFAgKmh0dHApCit7CisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFNPVVBfSVNfUkVRVUVTVF9IVFRQ
IChodHRwKSwgTlVMTCk7CisKKwlyZXR1cm4gZ19vYmplY3RfcmVmIChodHRwLT5wcml2LT5tc2cp
OworfQorCitzdGF0aWMgdm9pZAorc291cF9yZXF1ZXN0X2h0dHBfaW5pdCAoU291cFJlcXVlc3RI
VFRQICpodHRwKQoreworCWh0dHAtPnByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUg
KGh0dHAsIFNPVVBfVFlQRV9SRVFVRVNUX0hUVFAsIFNvdXBSZXF1ZXN0SFRUUFByaXZhdGUpOwor
fQorCitzdGF0aWMgZ2Jvb2xlYW4KK3NvdXBfcmVxdWVzdF9odHRwX2NoZWNrX3VyaSAoU291cFJl
cXVlc3QgICpyZXF1ZXN0LAorCQkJICAgICBTb3VwVVJJICAgICAgKnVyaSwKKwkJCSAgICAgR0Vy
cm9yICAgICAgKiplcnJvcikKK3sKKwlTb3VwUmVxdWVzdEhUVFAgKmh0dHAgPSBTT1VQX1JFUVVF
U1RfSFRUUCAocmVxdWVzdCk7CisKKwlpZiAoIVNPVVBfVVJJX1ZBTElEX0ZPUl9IVFRQICh1cmkp
KQorCQlyZXR1cm4gRkFMU0U7CisKKwlodHRwLT5wcml2LT5tc2cgPSBzb3VwX21lc3NhZ2VfbmV3
X2Zyb21fdXJpIChTT1VQX01FVEhPRF9HRVQsIHVyaSk7CisJcmV0dXJuIFRSVUU7Cit9CisKK3N0
YXRpYyB2b2lkCitzb3VwX3JlcXVlc3RfaHR0cF9maW5hbGl6ZSAoR09iamVjdCAqb2JqZWN0KQor
eworCVNvdXBSZXF1ZXN0SFRUUCAqaHR0cCA9IFNPVVBfUkVRVUVTVF9IVFRQIChvYmplY3QpOwor
CisJaWYgKGh0dHAtPnByaXYtPm1zZykKKwkJZ19vYmplY3RfdW5yZWYgKGh0dHAtPnByaXYtPm1z
Zyk7CisKKwlHX09CSkVDVF9DTEFTUyAoc291cF9yZXF1ZXN0X2h0dHBfcGFyZW50X2NsYXNzKS0+
ZmluYWxpemUgKG9iamVjdCk7Cit9CisKK3N0YXRpYyBHSW5wdXRTdHJlYW0gKgorc291cF9yZXF1
ZXN0X2h0dHBfc2VuZCAoU291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCisJCQlHQ2FuY2Vs
bGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQlHRXJyb3IgICAgICAgICAgICAgICoqZXJy
b3IpCit7CisJU291cEhUVFBJbnB1dFN0cmVhbSAqaHR0cHN0cmVhbTsKKwlTb3VwUmVxdWVzdEhU
VFAgKmh0dHAgPSBTT1VQX1JFUVVFU1RfSFRUUCAocmVxdWVzdCk7CisKKwlodHRwc3RyZWFtID0g
c291cF9odHRwX2lucHV0X3N0cmVhbV9uZXcgKHNvdXBfcmVxdWVzdF9nZXRfc2Vzc2lvbiAocmVx
dWVzdCksIGh0dHAtPnByaXYtPm1zZyk7CisJaWYgKCFzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3Nl
bmQgKGh0dHBzdHJlYW0sIGNhbmNlbGxhYmxlLCBlcnJvcikpIHsKKwkJZ19vYmplY3RfdW5yZWYg
KGh0dHBzdHJlYW0pOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuIChHSW5wdXRTdHJlYW0g
KilodHRwc3RyZWFtOworfQorCisKK3N0YXRpYyB2b2lkCitzZW50X2FzeW5jIChHT2JqZWN0ICpz
b3VyY2UsIEdBc3luY1Jlc3VsdCAqcmVzdWx0LCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJU291
cEhUVFBJbnB1dFN0cmVhbSAqaHR0cHN0cmVhbSA9IFNPVVBfSFRUUF9JTlBVVF9TVFJFQU0gKHNv
dXJjZSk7CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpzaW1wbGUgPSB1c2VyX2RhdGE7CisJR0Vycm9y
ICplcnJvciA9IE5VTEw7CisKKwlpZiAoc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2Zpbmlz
aCAoaHR0cHN0cmVhbSwgcmVzdWx0LCAmZXJyb3IpKSB7CisJCWdfc2ltcGxlX2FzeW5jX3Jlc3Vs
dF9zZXRfb3BfcmVzX2dwb2ludGVyIChzaW1wbGUsIGh0dHBzdHJlYW0sIGdfb2JqZWN0X3VucmVm
KTsKKwl9IGVsc2UgeworCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X2Zyb21fZXJyb3IgKHNp
bXBsZSwgZXJyb3IpOworCQlnX2Vycm9yX2ZyZWUgKGVycm9yKTsKKwkJZ19vYmplY3RfdW5yZWYg
KGh0dHBzdHJlYW0pOworCX0KKwlnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGUgKHNpbXBs
ZSk7CisJZ19vYmplY3RfdW5yZWYgKHNpbXBsZSk7Cit9CisKKwordHlwZWRlZiBzdHJ1Y3Qgewor
CVNvdXBSZXF1ZXN0SFRUUCAqcmVxOworCVNvdXBNZXNzYWdlICpvcmlnaW5hbDsKKwlHQ2FuY2Vs
bGFibGUgKmNhbmNlbGxhYmxlOworCUdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2s7CisJZ3Bv
aW50ZXIgdXNlcl9kYXRhOworfSBDb25kaXRpb25hbEhlbHBlcjsKKworCitzdGF0aWMgdm9pZAor
Y29uZGl0aW9uYWxfZ2V0X3JlYWR5X2NiIChTb3VwU2Vzc2lvbiAqc2Vzc2lvbiwgU291cE1lc3Nh
Z2UgKm1zZywgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCUNvbmRpdGlvbmFsSGVscGVyICpoZWxw
ZXIgPSAoQ29uZGl0aW9uYWxIZWxwZXIgKil1c2VyX2RhdGE7CisJR1NpbXBsZUFzeW5jUmVzdWx0
ICpzaW1wbGU7CisJU291cEhUVFBJbnB1dFN0cmVhbSAqaHR0cHN0cmVhbTsKKworCXNpbXBsZSA9
IGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcgKEdfT0JKRUNUIChoZWxwZXItPnJlcSksCisJCQkJ
CSAgICBoZWxwZXItPmNhbGxiYWNrLCBoZWxwZXItPnVzZXJfZGF0YSwKKwkJCQkJICAgIGNvbmRp
dGlvbmFsX2dldF9yZWFkeV9jYik7CisKKwlpZiAobXNnLT5zdGF0dXNfY29kZSA9PSBTT1VQX1NU
QVRVU19OT1RfTU9ESUZJRUQpIHsKKwkJV2ViS2l0U291cENhY2hlICpjYWNoZSA9IChXZWJLaXRT
b3VwQ2FjaGUgKilzb3VwX3Nlc3Npb25fZ2V0X2ZlYXR1cmUgKHNlc3Npb24sIFdFQktJVF9UWVBF
X1NPVVBfQ0FDSEUpOworCisJCWh0dHBzdHJlYW0gPSAoU291cEhUVFBJbnB1dFN0cmVhbSAqKXdl
YmtpdF9zb3VwX2NhY2hlX3NlbmRfcmVzcG9uc2UgKGNhY2hlLCBtc2cpOworCQlpZiAoaHR0cHN0
cmVhbSkgeworCQkJY29uc3QgZ2NoYXIgKmNvbnRlbnRfdHlwZTsKKworCQkJZ19zaW1wbGVfYXN5
bmNfcmVzdWx0X3NldF9vcF9yZXNfZ3BvaW50ZXIgKHNpbXBsZSwgaHR0cHN0cmVhbSwgZ19vYmpl
Y3RfdW5yZWYpOworCisJCQlzb3VwX21lc3NhZ2VfZ290X2hlYWRlcnMgKGhlbHBlci0+b3JpZ2lu
YWwpOworCQkJY29udGVudF90eXBlID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2NvbnRlbnRf
dHlwZSAobXNnLT5yZXNwb25zZV9oZWFkZXJzLCBOVUxMKTsKKwkJCXNvdXBfbWVzc2FnZV9jb250
ZW50X3NuaWZmZWQgKGhlbHBlci0+b3JpZ2luYWwsIGNvbnRlbnRfdHlwZSwgTlVMTCk7CisKKwkJ
CWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZSAoc2ltcGxlKTsKKworCQkJc291cF9tZXNz
YWdlX2ZpbmlzaGVkIChoZWxwZXItPm9yaWdpbmFsKTsKKworCQkJZ19vYmplY3RfdW5yZWYgKHNp
bXBsZSk7CisJCX0gZWxzZSB7CisJCQkvKiBBc2sgYWdhaW4gZm9yIHRoZSByZXNvdXJjZSwgc29t
ZWhvdyB0aGUgY2FjaGUgY2Fubm90IGxvY2F0ZSBpdCAqLworCQkJaHR0cHN0cmVhbSA9IHNvdXBf
aHR0cF9pbnB1dF9zdHJlYW1fbmV3IChzZXNzaW9uLCBoZWxwZXItPm9yaWdpbmFsKTsKKwkJCXNv
dXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luYyAoaHR0cHN0cmVhbSwgR19QUklPUklUWV9E
RUZBVUxULAorCQkJCQkJCSAgIGhlbHBlci0+Y2FuY2VsbGFibGUsIHNlbnRfYXN5bmMsIHNpbXBs
ZSk7CisJCX0KKwl9IGVsc2UgeworCQkvKiBJdCBpcyBpbiB0aGUgY2FjaGUgYnV0IGl0IHdhcyBt
b2RpZmllZCByZW1vdGVseSAqLworCQlodHRwc3RyZWFtID0gc291cF9odHRwX2lucHV0X3N0cmVh
bV9uZXcgKHNlc3Npb24sIGhlbHBlci0+b3JpZ2luYWwpOworCQlzb3VwX2h0dHBfaW5wdXRfc3Ry
ZWFtX3NlbmRfYXN5bmMgKGh0dHBzdHJlYW0sIEdfUFJJT1JJVFlfREVGQVVMVCwKKwkJCQkJCSAg
IGhlbHBlci0+Y2FuY2VsbGFibGUsIHNlbnRfYXN5bmMsIHNpbXBsZSk7CisJfQorCisJZ19vYmpl
Y3RfdW5yZWYgKGhlbHBlci0+cmVxKTsKKwlnX29iamVjdF91bnJlZiAoaGVscGVyLT5vcmlnaW5h
bCk7CisJZ19zbGljZV9mcmVlIChDb25kaXRpb25hbEhlbHBlciwgaGVscGVyKTsKK30KKwordHlw
ZWRlZiBzdHJ1Y3QgeworCVNvdXBSZXF1ZXN0SFRUUCAqaHR0cDsKKwlHQXN5bmNSZWFkeUNhbGxi
YWNrIGNhbGxiYWNrOworCWdwb2ludGVyIHVzZXJfZGF0YTsKK30gU2VuZEFzeW5jSGVscGVyOwor
CitzdGF0aWMgdm9pZCBzb3VwX3JlcXVlc3RfaHR0cF9zZW5kX2FzeW5jIChTb3VwUmVxdWVzdCAg
ICAgICAgICAqcmVxdWVzdCwKKwkJCQkJICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFi
bGUsCisJCQkJCSAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKKwkJCQkJICBncG9pbnRl
ciB1c2VyX2RhdGEpOworCitzdGF0aWMgZ2Jvb2xlYW4KK3NlbmRfYXN5bmNfY2IgKGdwb2ludGVy
IGRhdGEpCit7CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpzaW1wbGU7CisJU291cEhUVFBJbnB1dFN0
cmVhbSAqaHR0cHN0cmVhbTsKKwlTb3VwU2Vzc2lvbiAqc2Vzc2lvbjsKKwlXZWJLaXRTb3VwQ2Fj
aGUgKmNhY2hlOworCVNlbmRBc3luY0hlbHBlciAqaGVscGVyID0gKFNlbmRBc3luY0hlbHBlciAq
KWRhdGE7CisKKwlzZXNzaW9uID0gc291cF9yZXF1ZXN0X2dldF9zZXNzaW9uIChTT1VQX1JFUVVF
U1QgKGhlbHBlci0+aHR0cCkpOworCWNhY2hlID0gKFdlYktpdFNvdXBDYWNoZSAqKXNvdXBfc2Vz
c2lvbl9nZXRfZmVhdHVyZSAoc2Vzc2lvbiwgV0VCS0lUX1RZUEVfU09VUF9DQUNIRSk7CisKKwlo
dHRwc3RyZWFtID0gKFNvdXBIVFRQSW5wdXRTdHJlYW0gKil3ZWJraXRfc291cF9jYWNoZV9zZW5k
X3Jlc3BvbnNlIChjYWNoZSwgU09VUF9NRVNTQUdFIChoZWxwZXItPmh0dHAtPnByaXYtPm1zZykp
OworCisJaWYgKGh0dHBzdHJlYW0pIHsKKwkJY29uc3QgZ2NoYXIgKmNvbnRlbnRfdHlwZTsKKwor
CQlzaW1wbGUgPSBnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3IChHX09CSkVDVCAoaGVscGVyLT5o
dHRwKSwKKwkJCQkJCSAgICBoZWxwZXItPmNhbGxiYWNrLCBoZWxwZXItPnVzZXJfZGF0YSwKKwkJ
CQkJCSAgICBzb3VwX3JlcXVlc3RfaHR0cF9zZW5kX2FzeW5jKTsKKwkJZ19zaW1wbGVfYXN5bmNf
cmVzdWx0X3NldF9vcF9yZXNfZ3BvaW50ZXIgKHNpbXBsZSwgaHR0cHN0cmVhbSwgZ19vYmplY3Rf
dW5yZWYpOworCisJCS8qIFVwZGF0ZSBtZXNzYWdlIHN0YXR1cyAqLworCQlzb3VwX21lc3NhZ2Vf
c2V0X3N0YXR1cyAoaGVscGVyLT5odHRwLT5wcml2LT5tc2csIFNPVVBfU1RBVFVTX09LKTsKKwor
CQkvKiBJc3N1ZSBzaWduYWxzICAqLworCQlzb3VwX21lc3NhZ2VfZ290X2hlYWRlcnMgKGhlbHBl
ci0+aHR0cC0+cHJpdi0+bXNnKTsKKwkJY29udGVudF90eXBlID0gc291cF9tZXNzYWdlX2hlYWRl
cnNfZ2V0X2NvbnRlbnRfdHlwZSAoaGVscGVyLT5odHRwLT5wcml2LT5tc2ctPnJlc3BvbnNlX2hl
YWRlcnMsIE5VTEwpOworCQlzb3VwX21lc3NhZ2VfY29udGVudF9zbmlmZmVkIChoZWxwZXItPmh0
dHAtPnByaXYtPm1zZywgY29udGVudF90eXBlLCBOVUxMKTsKKworCQlnX3NpbXBsZV9hc3luY19y
ZXN1bHRfY29tcGxldGUgKHNpbXBsZSk7CisKKwkJc291cF9tZXNzYWdlX2ZpbmlzaGVkIChoZWxw
ZXItPmh0dHAtPnByaXYtPm1zZyk7CisKKwkJZ19vYmplY3RfdW5yZWYgKHNpbXBsZSk7CisJfQor
CisJZ19zbGljZV9mcmVlIChTZW5kQXN5bmNIZWxwZXIsIGhlbHBlcik7CisKKwlyZXR1cm4gRkFM
U0U7Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX3JlcXVlc3RfaHR0cF9zZW5kX2FzeW5jIChTb3Vw
UmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKKwkJCSAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAg
ICpjYW5jZWxsYWJsZSwKKwkJCSAgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCisJ
CQkgICAgICBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJU291cFJlcXVlc3RIVFRQICpodHRwID0g
U09VUF9SRVFVRVNUX0hUVFAgKHJlcXVlc3QpOworCVNvdXBIVFRQSW5wdXRTdHJlYW0gKmh0dHBz
dHJlYW07CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpzaW1wbGU7CisJU291cFNlc3Npb24gKnNlc3Np
b247CisJV2ViS2l0U291cENhY2hlICpjYWNoZTsKKworCXNlc3Npb24gPSBzb3VwX3JlcXVlc3Rf
Z2V0X3Nlc3Npb24gKHJlcXVlc3QpOworCWNhY2hlID0gKFdlYktpdFNvdXBDYWNoZSAqKXNvdXBf
c2Vzc2lvbl9nZXRfZmVhdHVyZSAoc2Vzc2lvbiwgV0VCS0lUX1RZUEVfU09VUF9DQUNIRSk7CisK
KwlpZiAoY2FjaGUpIHsKKwkJV2ViS2l0U291cENhY2hlUmVzcG9uc2UgcmVzcG9uc2U7CisKKwkJ
cmVzcG9uc2UgPSB3ZWJraXRfc291cF9jYWNoZV9oYXNfcmVzcG9uc2UgKGNhY2hlLCBodHRwLT5w
cml2LT5tc2cpOworCQlpZiAocmVzcG9uc2UgPT0gV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0Vf
RlJFU0gpIHsKKwkJCS8qIERvIHJldHVybiB0aGUgc3RyZWFtIGFzeW5jaHJvbm91c2x5IGFzIGlu
CisJCQkgICB0aGUgb3RoZXIgY2FzZXMuIEl0J3Mgbm90IGVub3VnaCB0byB1c2UKKwkJCSAgIGdf
c2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZV9pbl9pZGxlIGFzCisJCQkgICB0aGUgc2lnbmFs
cyBtdXN0IGJlIGFsc28gZW1pdHRlZAorCQkJICAgYXN5bmNocm9ub3VzbHkgKi8KKwkJCVNlbmRB
c3luY0hlbHBlciAqaGVscGVyID0gZ19zbGljZV9uZXcgKFNlbmRBc3luY0hlbHBlcik7CisJCQlo
ZWxwZXItPmh0dHAgPSBodHRwOworCQkJaGVscGVyLT5jYWxsYmFjayA9IGNhbGxiYWNrOworCQkJ
aGVscGVyLT51c2VyX2RhdGEgPSB1c2VyX2RhdGE7CisJCQlnX3RpbWVvdXRfYWRkICgwLCBzZW5k
X2FzeW5jX2NiLCBoZWxwZXIpOworCQkJcmV0dXJuOworCQl9IGVsc2UgaWYgKHJlc3BvbnNlID09
IFdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX05FRURTX1ZBTElEQVRJT04pIHsKKwkJCVNvdXBN
ZXNzYWdlICpjb25kaXRpb25hbF9tc2c7CisJCQlDb25kaXRpb25hbEhlbHBlciAqaGVscGVyOwor
CisJCQljb25kaXRpb25hbF9tc2cgPSB3ZWJraXRfc291cF9jYWNoZV9nZW5lcmF0ZV9jb25kaXRp
b25hbF9yZXF1ZXN0IChjYWNoZSwgaHR0cC0+cHJpdi0+bXNnKTsKKworCQkJaGVscGVyID0gZ19z
bGljZV9uZXcwIChDb25kaXRpb25hbEhlbHBlcik7CisJCQloZWxwZXItPnJlcSA9IGdfb2JqZWN0
X3JlZiAoaHR0cCk7CisJCQloZWxwZXItPm9yaWdpbmFsID0gZ19vYmplY3RfcmVmIChodHRwLT5w
cml2LT5tc2cpOworCQkJaGVscGVyLT5jYW5jZWxsYWJsZSA9IGNhbmNlbGxhYmxlOworCQkJaGVs
cGVyLT5jYWxsYmFjayA9IGNhbGxiYWNrOworCQkJaGVscGVyLT51c2VyX2RhdGEgPSB1c2VyX2Rh
dGE7CisJCQlzb3VwX3Nlc3Npb25fcXVldWVfbWVzc2FnZSAoc2Vzc2lvbiwgY29uZGl0aW9uYWxf
bXNnLAorCQkJCQkJICAgIGNvbmRpdGlvbmFsX2dldF9yZWFkeV9jYiwKKwkJCQkJCSAgICBoZWxw
ZXIpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJc2ltcGxlID0gZ19zaW1wbGVfYXN5bmNfcmVz
dWx0X25ldyAoR19PQkpFQ1QgKGh0dHApLAorCQkJCQkgICAgY2FsbGJhY2ssIHVzZXJfZGF0YSwK
KwkJCQkJICAgIHNvdXBfcmVxdWVzdF9odHRwX3NlbmRfYXN5bmMpOworCWh0dHBzdHJlYW0gPSBz
b3VwX2h0dHBfaW5wdXRfc3RyZWFtX25ldyAoc291cF9yZXF1ZXN0X2dldF9zZXNzaW9uIChyZXF1
ZXN0KSwKKwkJCQkJCSBodHRwLT5wcml2LT5tc2cpOworCXNvdXBfaHR0cF9pbnB1dF9zdHJlYW1f
c2VuZF9hc3luYyAoaHR0cHN0cmVhbSwgR19QUklPUklUWV9ERUZBVUxULAorCQkJCQkgICBjYW5j
ZWxsYWJsZSwgc2VudF9hc3luYywgc2ltcGxlKTsKK30KKworc3RhdGljIEdJbnB1dFN0cmVhbSAq
Citzb3VwX3JlcXVlc3RfaHR0cF9zZW5kX2ZpbmlzaCAoU291cFJlcXVlc3QgICAgICAgICAgKnJl
cXVlc3QsCisJCQkgICAgICAgR0FzeW5jUmVzdWx0ICAgICAgICAgKnJlc3VsdCwKKwkJCSAgICAg
ICBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpCit7CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpz
aW1wbGU7CisKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2lz
X3ZhbGlkIChyZXN1bHQsIEdfT0JKRUNUIChyZXF1ZXN0KSwgc291cF9yZXF1ZXN0X2h0dHBfc2Vu
ZF9hc3luYykgfHwgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2lzX3ZhbGlkIChyZXN1bHQsIEdfT0JK
RUNUIChyZXF1ZXN0KSwgY29uZGl0aW9uYWxfZ2V0X3JlYWR5X2NiKSwgTlVMTCk7CisKKwlzaW1w
bGUgPSBHX1NJTVBMRV9BU1lOQ19SRVNVTFQgKHJlc3VsdCk7CisJaWYgKGdfc2ltcGxlX2FzeW5j
X3Jlc3VsdF9wcm9wYWdhdGVfZXJyb3IgKHNpbXBsZSwgZXJyb3IpKQorCQlyZXR1cm4gTlVMTDsK
KwlyZXR1cm4gZ19vYmplY3RfcmVmIChnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X29wX3Jlc19n
cG9pbnRlciAoc2ltcGxlKSk7Cit9CisKK3N0YXRpYyBnb2Zmc2V0Citzb3VwX3JlcXVlc3RfaHR0
cF9nZXRfY29udGVudF9sZW5ndGggKFNvdXBSZXF1ZXN0ICpyZXF1ZXN0KQoreworCVNvdXBSZXF1
ZXN0SFRUUCAqaHR0cCA9IFNPVVBfUkVRVUVTVF9IVFRQIChyZXF1ZXN0KTsKKworCXJldHVybiBz
b3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfY29udGVudF9sZW5ndGggKGh0dHAtPnByaXYtPm1zZy0+
cmVzcG9uc2VfaGVhZGVycyk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK3NvdXBfcmVxdWVz
dF9odHRwX2dldF9jb250ZW50X3R5cGUgKFNvdXBSZXF1ZXN0ICpyZXF1ZXN0KQoreworCVNvdXBS
ZXF1ZXN0SFRUUCAqaHR0cCA9IFNPVVBfUkVRVUVTVF9IVFRQIChyZXF1ZXN0KTsKKworCXJldHVy
biBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfY29udGVudF90eXBlIChodHRwLT5wcml2LT5tc2ct
PnJlc3BvbnNlX2hlYWRlcnMsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZAorc291cF9yZXF1ZXN0
X2h0dHBfY2xhc3NfaW5pdCAoU291cFJlcXVlc3RIVFRQQ2xhc3MgKnJlcXVlc3RfaHR0cF9jbGFz
cykKK3sKKwlHT2JqZWN0Q2xhc3MgKm9iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChyZXF1
ZXN0X2h0dHBfY2xhc3MpOworCVNvdXBSZXF1ZXN0Q2xhc3MgKnJlcXVlc3RfY2xhc3MgPQorCQlT
T1VQX1JFUVVFU1RfQ0xBU1MgKHJlcXVlc3RfaHR0cF9jbGFzcyk7CisKKwlnX3R5cGVfY2xhc3Nf
YWRkX3ByaXZhdGUgKHJlcXVlc3RfaHR0cF9jbGFzcywgc2l6ZW9mIChTb3VwUmVxdWVzdEhUVFBQ
cml2YXRlKSk7CisKKwlvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gc291cF9yZXF1ZXN0X2h0dHBf
ZmluYWxpemU7CisKKwlyZXF1ZXN0X2NsYXNzLT5jaGVja191cmkgPSBzb3VwX3JlcXVlc3RfaHR0
cF9jaGVja191cmk7CisJcmVxdWVzdF9jbGFzcy0+c2VuZCA9IHNvdXBfcmVxdWVzdF9odHRwX3Nl
bmQ7CisJcmVxdWVzdF9jbGFzcy0+c2VuZF9hc3luYyA9IHNvdXBfcmVxdWVzdF9odHRwX3NlbmRf
YXN5bmM7CisJcmVxdWVzdF9jbGFzcy0+c2VuZF9maW5pc2ggPSBzb3VwX3JlcXVlc3RfaHR0cF9z
ZW5kX2ZpbmlzaDsKKwlyZXF1ZXN0X2NsYXNzLT5nZXRfY29udGVudF9sZW5ndGggPSBzb3VwX3Jl
cXVlc3RfaHR0cF9nZXRfY29udGVudF9sZW5ndGg7CisJcmVxdWVzdF9jbGFzcy0+Z2V0X2NvbnRl
bnRfdHlwZSA9IHNvdXBfcmVxdWVzdF9odHRwX2dldF9jb250ZW50X3R5cGU7Cit9CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtaHR0
cC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0
dHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjMyZjBiCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1
ZXN0LWh0dHAuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJl
ZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBT
T1VQX1JFUVVFU1RfSFRUUF9ICisjZGVmaW5lIFNPVVBfUkVRVUVTVF9IVFRQX0ggMQorCisjaW5j
bHVkZSAic291cC1yZXF1ZXN0LmgiCisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBTT1VQX1RZ
UEVfUkVRVUVTVF9IVFRQICAgICAgICAgICAgKHNvdXBfcmVxdWVzdF9odHRwX2dldF90eXBlICgp
KQorI2RlZmluZSBTT1VQX1JFUVVFU1RfSFRUUChvYmplY3QpICAgICAgICAgKEdfVFlQRV9DSEVD
S19JTlNUQU5DRV9DQVNUICgob2JqZWN0KSwgU09VUF9UWVBFX1JFUVVFU1RfSFRUUCwgU291cFJl
cXVlc3RIVFRQKSkKKyNkZWZpbmUgU09VUF9SRVFVRVNUX0hUVFBfQ0xBU1Moa2xhc3MpICAgIChH
X1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgU09VUF9UWVBFX1JFUVVFU1RfSFRUUCwg
U291cFJlcXVlc3RIVFRQQ2xhc3MpKQorI2RlZmluZSBTT1VQX0lTX1JFUVVFU1RfSFRUUChvYmpl
Y3QpICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqZWN0KSwgU09VUF9UWVBF
X1JFUVVFU1RfSFRUUCkpCisjZGVmaW5lIFNPVVBfSVNfUkVRVUVTVF9IVFRQX0NMQVNTKGtsYXNz
KSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIFNPVVBfVFlQRV9SRVFVRVNUX0hU
VFApKQorI2RlZmluZSBTT1VQX1JFUVVFU1RfSFRUUF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9J
TlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBTT1VQX1RZUEVfUkVRVUVTVF9IVFRQLCBTb3VwUmVx
dWVzdEhUVFBDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9Tb3VwUmVxdWVzdEhUVFBQcml2YXRl
IFNvdXBSZXF1ZXN0SFRUUFByaXZhdGU7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlTb3VwUmVxdWVz
dCBwYXJlbnQ7CisKKwlTb3VwUmVxdWVzdEhUVFBQcml2YXRlICpwcml2OworfSBTb3VwUmVxdWVz
dEhUVFA7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlTb3VwUmVxdWVzdENsYXNzIHBhcmVudDsKK30g
U291cFJlcXVlc3RIVFRQQ2xhc3M7CisKK0dUeXBlIHNvdXBfcmVxdWVzdF9odHRwX2dldF90eXBl
ICh2b2lkKTsKKworU291cE1lc3NhZ2UgICpzb3VwX3JlcXVlc3RfaHR0cF9nZXRfbWVzc2FnZSAo
U291cFJlcXVlc3RIVFRQICpodHRwKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFNPVVBf
UkVRVUVTVF9IVFRQX0ggKi8KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5jIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
Y2FjaGUvc291cC1yZXF1ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
YzZhN2JkMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3Vw
L2NhY2hlL3NvdXAtcmVxdWVzdC5jCkBAIC0wLDAgKzEsMjc5IEBACisvKgorICogc291cC1yZXF1
ZXN0LmM6IFByb3RvY29sLWluZGVwZW5kZW50IHN0cmVhbWluZyByZXF1ZXN0IGludGVyZmFjZQor
ICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAsIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmln
Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGdsaWIvZ2kxOG4uaD4KKworI2luY2x1ZGUgInNvdXAt
cmVxdWVzdC5oIgorI2luY2x1ZGUgInNvdXAtcmVxdWVzdGVyLmgiCisKKy8qKgorICogU0VDVElP
Tjpzb3VwLXJlcXVlc3QKKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogUHJvdG9jb2wtaW5kZXBlbmRl
bnQgc3RyZWFtaW5nIHJlcXVlc3QgaW50ZXJmYWNlCisgKgorICogRklYTUUKKyAqKi8KKworLyoq
CisgKiBTb3VwUmVxdWVzdDoKKyAqCisgKiBGSVhNRQorICoKKyAqIFNpbmNlOiAyLjMwCisgKiov
CisKK3N0YXRpYyB2b2lkIHNvdXBfcmVxdWVzdF9pbml0YWJsZV9pbnRlcmZhY2VfaW5pdCAoR0lu
aXRhYmxlSWZhY2UgKmluaXRhYmxlX2ludGVyZmFjZSk7CisKK0dfREVGSU5FX1RZUEVfV0lUSF9D
T0RFIChTb3VwUmVxdWVzdCwgc291cF9yZXF1ZXN0LCBHX1RZUEVfT0JKRUNULAorCQkJIEdfSU1Q
TEVNRU5UX0lOVEVSRkFDRSAoR19UWVBFX0lOSVRBQkxFLAorCQkJCQkJc291cF9yZXF1ZXN0X2lu
aXRhYmxlX2ludGVyZmFjZV9pbml0KSkKKworZW51bSB7CisJUFJPUF8wLAorCVBST1BfVVJJLAor
CVBST1BfU0VTU0lPTgorfTsKKworc3RydWN0IF9Tb3VwUmVxdWVzdFByaXZhdGUgeworCVNvdXBV
UkkgKnVyaTsKKwlTb3VwU2Vzc2lvbiAqc2Vzc2lvbjsKK307CisKK3N0YXRpYyB2b2lkCitzb3Vw
X3JlcXVlc3RfaW5pdCAoU291cFJlcXVlc3QgKnJlcXVlc3QpCit7CisJcmVxdWVzdC0+cHJpdiA9
IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAocmVxdWVzdCwgU09VUF9UWVBFX1JFUVVFU1Qs
IFNvdXBSZXF1ZXN0UHJpdmF0ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX3JlcXVlc3RfZmlu
YWxpemUgKEdPYmplY3QgKm9iamVjdCkKK3sKKwlTb3VwUmVxdWVzdCAqcmVxdWVzdCA9IFNPVVBf
UkVRVUVTVCAob2JqZWN0KTsKKworCWlmIChyZXF1ZXN0LT5wcml2LT51cmkpCisJCXNvdXBfdXJp
X2ZyZWUgKHJlcXVlc3QtPnByaXYtPnVyaSk7CisJaWYgKHJlcXVlc3QtPnByaXYtPnNlc3Npb24p
CisJCWdfb2JqZWN0X3VucmVmIChyZXF1ZXN0LT5wcml2LT5zZXNzaW9uKTsKKworCUdfT0JKRUNU
X0NMQVNTIChzb3VwX3JlcXVlc3RfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Cit9
CisKK3N0YXRpYyB2b2lkCitzb3VwX3JlcXVlc3Rfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICAgICAg
Km9iamVjdCwKKwkJCSAgIGd1aW50IHByb3BfaWQsCisJCQkgICBjb25zdCBHVmFsdWUgKnZhbHVl
LAorCQkJICAgR1BhcmFtU3BlYyAgICpwc3BlYykKK3sKKwlTb3VwUmVxdWVzdCAqcmVxdWVzdCA9
IFNPVVBfUkVRVUVTVCAob2JqZWN0KTsKKworCXN3aXRjaCAocHJvcF9pZCkgeworCQljYXNlIFBS
T1BfVVJJOgorCQkJaWYgKHJlcXVlc3QtPnByaXYtPnVyaSkKKwkJCQlzb3VwX3VyaV9mcmVlIChy
ZXF1ZXN0LT5wcml2LT51cmkpOworCQkJcmVxdWVzdC0+cHJpdi0+dXJpID0gZ192YWx1ZV9kdXBf
Ym94ZWQgKHZhbHVlKTsKKwkJCWJyZWFrOworCQljYXNlIFBST1BfU0VTU0lPTjoKKwkJCWlmIChy
ZXF1ZXN0LT5wcml2LT5zZXNzaW9uKQorCQkJCWdfb2JqZWN0X3VucmVmIChyZXF1ZXN0LT5wcml2
LT5zZXNzaW9uKTsKKwkJCXJlcXVlc3QtPnByaXYtPnNlc3Npb24gPSBnX3ZhbHVlX2R1cF9vYmpl
Y3QgKHZhbHVlKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJR19PQkpFQ1RfV0FSTl9JTlZB
TElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKwkJCWJyZWFrOworCX0K
K30KKworc3RhdGljIHZvaWQKK3NvdXBfcmVxdWVzdF9nZXRfcHJvcGVydHkgKEdPYmplY3QgICAg
Km9iamVjdCwKKwkJCSAgIGd1aW50IHByb3BfaWQsCisJCQkgICBHVmFsdWUgICAgICp2YWx1ZSwK
KwkJCSAgIEdQYXJhbVNwZWMgKnBzcGVjKQoreworCVNvdXBSZXF1ZXN0ICpyZXF1ZXN0ID0gU09V
UF9SRVFVRVNUIChvYmplY3QpOworCisJc3dpdGNoIChwcm9wX2lkKSB7CisJCWNhc2UgUFJPUF9V
Ukk6CisJCQlnX3ZhbHVlX3NldF9ib3hlZCAodmFsdWUsIHJlcXVlc3QtPnByaXYtPnVyaSk7CisJ
CQlicmVhazsKKwkJY2FzZSBQUk9QX1NFU1NJT046CisJCQlnX3ZhbHVlX3NldF9vYmplY3QgKHZh
bHVlLCByZXF1ZXN0LT5wcml2LT5zZXNzaW9uKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJ
R19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVj
KTsKKwkJCWJyZWFrOworCX0KK30KKworc3RhdGljIGdib29sZWFuCitzb3VwX3JlcXVlc3RfaW5p
dGFibGVfaW5pdCAoR0luaXRhYmxlICAgICAqaW5pdGFibGUsCisJCQkgICAgR0NhbmNlbGxhYmxl
ICAqY2FuY2VsbGFibGUsCisJCQkgICAgR0Vycm9yICAgICAgICoqZXJyb3IpCit7CisJU291cFJl
cXVlc3QgKnJlcXVlc3QgPSBTT1VQX1JFUVVFU1QgKGluaXRhYmxlKTsKKwlnYm9vbGVhbiBvazsK
KworCWlmICghcmVxdWVzdC0+cHJpdi0+dXJpKSB7CisJCWdfc2V0X2Vycm9yIChlcnJvciwgU09V
UF9FUlJPUiwgU09VUF9FUlJPUl9CQURfVVJJLAorCQkJICAgICBfICgiTm8gVVJJIHByb3ZpZGVk
IikpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJb2sgPSBTT1VQX1JFUVVFU1RfR0VUX0NMQVNT
IChpbml0YWJsZSktPgorCSAgICAgY2hlY2tfdXJpIChyZXF1ZXN0LCByZXF1ZXN0LT5wcml2LT51
cmksIGVycm9yKTsKKworCWlmICghb2sgJiYgZXJyb3IpIHsKKwkJY2hhciAqdXJpX3N0cmluZyA9
IHNvdXBfdXJpX3RvX3N0cmluZyAocmVxdWVzdC0+cHJpdi0+dXJpLCBGQUxTRSk7CisJCWdfc2V0
X2Vycm9yIChlcnJvciwgU09VUF9FUlJPUiwgU09VUF9FUlJPUl9CQURfVVJJLAorCQkJICAgICBf
ICgiSW52YWxpZCAnJXMnIFVSSTogJXMiKSwKKwkJCSAgICAgcmVxdWVzdC0+cHJpdi0+dXJpLT5z
Y2hlbWUsCisJCQkgICAgIHVyaV9zdHJpbmcpOworCQlnX2ZyZWUgKHVyaV9zdHJpbmcpOworCX0K
KworCXJldHVybiBvazsKK30KKworc3RhdGljIGdib29sZWFuCitzb3VwX3JlcXVlc3RfZGVmYXVs
dF9jaGVja191cmkgKFNvdXBSZXF1ZXN0ICAqcmVxdWVzdCwKKwkJCQlTb3VwVVJJICAgICAgKnVy
aSwKKwkJCQlHRXJyb3IgICAgICAqKmVycm9yKQoreworCXJldHVybiBUUlVFOworfQorCisvKiBE
ZWZhdWx0IGltcGxlbWVudGF0aW9uOiBhc3N1bWUgdGhlIHN5bmMgaW1wbGVtZW50YXRpb24gZG9l
c24ndCBibG9jayAqLworc3RhdGljIHZvaWQKK3NvdXBfcmVxdWVzdF9kZWZhdWx0X3NlbmRfYXN5
bmMgKFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAorCQkJCSBHQ2FuY2VsbGFibGUgICAg
ICAgICAqY2FuY2VsbGFibGUsCisJCQkJIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCisJ
CQkJIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlHU2ltcGxlQXN5bmNSZXN1bHQgKnNpbXBsZTsK
KworCXNpbXBsZSA9IGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcgKEdfT0JKRUNUIChyZXF1ZXN0
KSwKKwkJCQkJICAgIGNhbGxiYWNrLCB1c2VyX2RhdGEsCisJCQkJCSAgICBzb3VwX3JlcXVlc3Rf
ZGVmYXVsdF9zZW5kX2FzeW5jKTsKKwlnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGVfaW5f
aWRsZSAoc2ltcGxlKTsKKwlnX29iamVjdF91bnJlZiAoc2ltcGxlKTsKK30KKworc3RhdGljIEdJ
bnB1dFN0cmVhbSAqCitzb3VwX3JlcXVlc3RfZGVmYXVsdF9zZW5kX2ZpbmlzaCAoU291cFJlcXVl
c3QgICAgICAgICAgKnJlcXVlc3QsCisJCQkJICBHQXN5bmNSZXN1bHQgICAgICAgICAqcmVzdWx0
LAorCQkJCSAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKQoreworCWdfcmV0dXJuX3ZhbF9p
Zl9mYWlsIChnX3NpbXBsZV9hc3luY19yZXN1bHRfaXNfdmFsaWQgKHJlc3VsdCwgR19PQkpFQ1Qg
KHJlcXVlc3QpLCBzb3VwX3JlcXVlc3RfZGVmYXVsdF9zZW5kX2FzeW5jKSwgTlVMTCk7CisKKwly
ZXR1cm4gc291cF9yZXF1ZXN0X3NlbmQgKHJlcXVlc3QsIE5VTEwsIGVycm9yKTsKK30KKworR0lu
cHV0U3RyZWFtICoKK3NvdXBfcmVxdWVzdF9zZW5kIChTb3VwUmVxdWVzdCAgICAgICAgICAqcmVx
dWVzdCwKKwkJICAgR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkgICBHRXJy
b3IgICAgICAgICAgICAgICoqZXJyb3IpCit7CisJcmV0dXJuIFNPVVBfUkVRVUVTVF9HRVRfQ0xB
U1MgKHJlcXVlc3QpLT4KKwkgICAgICAgc2VuZCAocmVxdWVzdCwgY2FuY2VsbGFibGUsIGVycm9y
KTsKK30KKwordm9pZAorc291cF9yZXF1ZXN0X3NlbmRfYXN5bmMgKFNvdXBSZXF1ZXN0ICAgICAg
ICAgICpyZXF1ZXN0LAorCQkJIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJ
CSBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAorCQkJIGdwb2ludGVyIHVzZXJfZGF0YSkK
K3sKKwlTT1VQX1JFUVVFU1RfR0VUX0NMQVNTIChyZXF1ZXN0KS0+CisJc2VuZF9hc3luYyAocmVx
dWVzdCwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyX2RhdGEpOworfQorCitHSW5wdXRTdHJl
YW0gKgorc291cF9yZXF1ZXN0X3NlbmRfZmluaXNoIChTb3VwUmVxdWVzdCAgICAgICAgICAqcmVx
dWVzdCwKKwkJCSAgR0FzeW5jUmVzdWx0ICAgICAgICAgKnJlc3VsdCwKKwkJCSAgR0Vycm9yICAg
ICAgICAgICAgICAqKmVycm9yKQoreworCXJldHVybiBTT1VQX1JFUVVFU1RfR0VUX0NMQVNTIChy
ZXF1ZXN0KS0+CisJICAgICAgIHNlbmRfZmluaXNoIChyZXF1ZXN0LCByZXN1bHQsIGVycm9yKTsK
K30KKworc3RhdGljIHZvaWQKK3NvdXBfcmVxdWVzdF9jbGFzc19pbml0IChTb3VwUmVxdWVzdENs
YXNzICpyZXF1ZXN0X2NsYXNzKQoreworCUdPYmplY3RDbGFzcyAqb2JqZWN0X2NsYXNzID0gR19P
QkpFQ1RfQ0xBU1MgKHJlcXVlc3RfY2xhc3MpOworCisJZ190eXBlX2NsYXNzX2FkZF9wcml2YXRl
IChyZXF1ZXN0X2NsYXNzLCBzaXplb2YgKFNvdXBSZXF1ZXN0UHJpdmF0ZSkpOworCisJcmVxdWVz
dF9jbGFzcy0+Y2hlY2tfdXJpID0gc291cF9yZXF1ZXN0X2RlZmF1bHRfY2hlY2tfdXJpOworCXJl
cXVlc3RfY2xhc3MtPnNlbmRfYXN5bmMgPSBzb3VwX3JlcXVlc3RfZGVmYXVsdF9zZW5kX2FzeW5j
OworCXJlcXVlc3RfY2xhc3MtPnNlbmRfZmluaXNoID0gc291cF9yZXF1ZXN0X2RlZmF1bHRfc2Vu
ZF9maW5pc2g7CisKKwlvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gc291cF9yZXF1ZXN0X2ZpbmFs
aXplOworCW9iamVjdF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gc291cF9yZXF1ZXN0X3NldF9wcm9w
ZXJ0eTsKKwlvYmplY3RfY2xhc3MtPmdldF9wcm9wZXJ0eSA9IHNvdXBfcmVxdWVzdF9nZXRfcHJv
cGVydHk7CisKKwlnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5ICgKKwkJb2JqZWN0X2Ns
YXNzLCBQUk9QX1VSSSwKKwkJZ19wYXJhbV9zcGVjX2JveGVkIChTT1VQX1JFUVVFU1RfVVJJLAor
CQkJCSAgICAiVVJJIiwKKwkJCQkgICAgIlRoZSByZXF1ZXN0IFVSSSIsCisJCQkJICAgIFNPVVBf
VFlQRV9VUkksCisJCQkJICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1Rf
T05MWSkpOworCWdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKAorCQlvYmplY3RfY2xh
c3MsIFBST1BfU0VTU0lPTiwKKwkJZ19wYXJhbV9zcGVjX29iamVjdCAoU09VUF9SRVFVRVNUX1NF
U1NJT04sCisJCQkJICAgICAiU2Vzc2lvbiIsCisJCQkJICAgICAiVGhlIHJlcXVlc3QncyBzZXNz
aW9uIiwKKwkJCQkgICAgIFNPVVBfVFlQRV9TRVNTSU9OLAorCQkJCSAgICAgR19QQVJBTV9SRUFE
V1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSk7Cit9CisKK3N0YXRpYyB2b2lkCitzb3Vw
X3JlcXVlc3RfaW5pdGFibGVfaW50ZXJmYWNlX2luaXQgKEdJbml0YWJsZUlmYWNlICppbml0YWJs
ZV9pbnRlcmZhY2UpCit7CisJaW5pdGFibGVfaW50ZXJmYWNlLT5pbml0ID0gc291cF9yZXF1ZXN0
X2luaXRhYmxlX2luaXQ7Cit9CisKK1NvdXBVUkkgKgorc291cF9yZXF1ZXN0X2dldF91cmkgKFNv
dXBSZXF1ZXN0ICpyZXF1ZXN0KQoreworCXJldHVybiByZXF1ZXN0LT5wcml2LT51cmk7Cit9CisK
K1NvdXBTZXNzaW9uICoKK3NvdXBfcmVxdWVzdF9nZXRfc2Vzc2lvbiAoU291cFJlcXVlc3QgKnJl
cXVlc3QpCit7CisJcmV0dXJuIHJlcXVlc3QtPnByaXYtPnNlc3Npb247Cit9CisKK2dvZmZzZXQK
K3NvdXBfcmVxdWVzdF9nZXRfY29udGVudF9sZW5ndGggKFNvdXBSZXF1ZXN0ICpyZXF1ZXN0KQor
eworCXJldHVybiBTT1VQX1JFUVVFU1RfR0VUX0NMQVNTIChyZXF1ZXN0KS0+Z2V0X2NvbnRlbnRf
bGVuZ3RoIChyZXF1ZXN0KTsKK30KKworY29uc3QgY2hhciAqCitzb3VwX3JlcXVlc3RfZ2V0X2Nv
bnRlbnRfdHlwZSAoU291cFJlcXVlc3QgICpyZXF1ZXN0KQoreworCXJldHVybiBTT1VQX1JFUVVF
U1RfR0VUX0NMQVNTIChyZXF1ZXN0KS0+Z2V0X2NvbnRlbnRfdHlwZSAocmVxdWVzdCk7Cit9CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVl
c3QuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNTBhYzIKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Qu
aApAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJlZCBIYXQsIElu
Yy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBTT1VQX1JFUVVF
U1RfSAorI2RlZmluZSBTT1VQX1JFUVVFU1RfSCAxCisKKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAu
aD4KKyNpbmNsdWRlIDxnaW8vZ2lvLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBTT1VQ
X1RZUEVfUkVRVUVTVCAgICAgICAgICAgIChzb3VwX3JlcXVlc3RfZ2V0X3R5cGUgKCkpCisjZGVm
aW5lIFNPVVBfUkVRVUVTVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9D
QVNUICgob2JqKSwgU09VUF9UWVBFX1JFUVVFU1QsIFNvdXBSZXF1ZXN0KSkKKyNkZWZpbmUgU09V
UF9SRVFVRVNUX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFz
cyksIFNPVVBfVFlQRV9SRVFVRVNULCBTb3VwUmVxdWVzdENsYXNzKSkKKyNkZWZpbmUgU09VUF9J
U19SRVFVRVNUKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmop
LCBTT1VQX1RZUEVfUkVRVUVTVCkpCisjZGVmaW5lIFNPVVBfSVNfUkVRVUVTVF9DTEFTUyhrbGFz
cykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBTT1VQX1RZUEVfUkVRVUVTVCkp
CisjZGVmaW5lIFNPVVBfUkVRVUVTVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9H
RVRfQ0xBU1MgKChvYmopLCBTT1VQX1RZUEVfUkVRVUVTVCwgU291cFJlcXVlc3RDbGFzcykpCisK
K3R5cGVkZWYgc3RydWN0IF9Tb3VwUmVxdWVzdCBTb3VwUmVxdWVzdDsKK3R5cGVkZWYgc3RydWN0
IF9Tb3VwUmVxdWVzdFByaXZhdGUgU291cFJlcXVlc3RQcml2YXRlOwordHlwZWRlZiBzdHJ1Y3Qg
X1NvdXBSZXF1ZXN0Q2xhc3MgU291cFJlcXVlc3RDbGFzczsKKworc3RydWN0IF9Tb3VwUmVxdWVz
dCB7CisJR09iamVjdCBwYXJlbnQ7CisKKwlTb3VwUmVxdWVzdFByaXZhdGUgKnByaXY7Cit9Owor
CitzdHJ1Y3QgX1NvdXBSZXF1ZXN0Q2xhc3MgeworCUdPYmplY3RDbGFzcyBwYXJlbnQ7CisKKwln
Ym9vbGVhbiAoKmNoZWNrX3VyaSkoU291cFJlcXVlc3QgICAgICAgICAgKnJlcV9iYXNlLAorCQkJ
ICAgICAgU291cFVSSSAgICAgICAgICAgICAgKnVyaSwKKwkJCSAgICAgIEdFcnJvciAgICAgICAg
ICAgICAgKiplcnJvcik7CisKKwlHSW5wdXRTdHJlYW0gKiAoKnNlbmQpKFNvdXBSZXF1ZXN0ICAg
ICAgICAgICpyZXF1ZXN0LAorCQkJICAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxs
YWJsZSwKKwkJCSAgICAgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpOworCXZvaWQgKCpz
ZW5kX2FzeW5jKShTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKKwkJCSAgIEdDYW5jZWxs
YWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCSAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2Fs
bGJhY2ssCisJCQkgICBncG9pbnRlciB1c2VyX2RhdGEpOworCUdJbnB1dFN0cmVhbSAqICgqc2Vu
ZF9maW5pc2gpKFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAorCQkJCSAgICAgIEdBc3lu
Y1Jlc3VsdCAgICAgICAgICpyZXN1bHQsCisJCQkJICAgICAgR0Vycm9yICAgICAgICAgICAgICAq
KmVycm9yKTsKKworCWdvZmZzZXQgKCpnZXRfY29udGVudF9sZW5ndGgpKFNvdXBSZXF1ZXN0ICAg
KnJlcXVlc3QpOworCWNvbnN0IGNoYXIgKiAgICgqZ2V0X2NvbnRlbnRfdHlwZSkoU291cFJlcXVl
c3QgICAqcmVxdWVzdCk7Cit9OworCitHVHlwZSBzb3VwX3JlcXVlc3RfZ2V0X3R5cGUgKHZvaWQp
OworCisjZGVmaW5lIFNPVVBfUkVRVUVTVF9VUkkgICAgICJ1cmkiCisjZGVmaW5lIFNPVVBfUkVR
VUVTVF9TRVNTSU9OICJzZXNzaW9uIgorCitHSW5wdXRTdHJlYW0gKnNvdXBfcmVxdWVzdF9zZW5k
IChTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKKwkJCQkgR0NhbmNlbGxhYmxlICAgICAg
ICAgKmNhbmNlbGxhYmxlLAorCQkJCSBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpOwordm9p
ZCAgICAgICAgICBzb3VwX3JlcXVlc3Rfc2VuZF9hc3luYyAoU291cFJlcXVlc3QgICAgICAgICAg
KnJlcXVlc3QsCisJCQkJICAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwK
KwkJCQkgICAgICAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKKwkJCQkgICAgICAgZ3Bv
aW50ZXIgdXNlcl9kYXRhKTsKK0dJbnB1dFN0cmVhbSAqc291cF9yZXF1ZXN0X3NlbmRfZmluaXNo
IChTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKKwkJCQkJR0FzeW5jUmVzdWx0ICAgICAg
ICAgKnJlc3VsdCwKKwkJCQkJR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKTsKKworU291cFVS
SSAgICAgICpzb3VwX3JlcXVlc3RfZ2V0X3VyaSAoU291cFJlcXVlc3QgICAgICAgICAgKnJlcXVl
c3QpOworU291cFNlc3Npb24gICpzb3VwX3JlcXVlc3RfZ2V0X3Nlc3Npb24gKFNvdXBSZXF1ZXN0
ICAgICAgICAgICpyZXF1ZXN0KTsKKworZ29mZnNldCAgICAgICBzb3VwX3JlcXVlc3RfZ2V0X2Nv
bnRlbnRfbGVuZ3RoIChTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCk7Citjb25zdCBjaGFy
ICAgKnNvdXBfcmVxdWVzdF9nZXRfY29udGVudF90eXBlIChTb3VwUmVxdWVzdCAgICAgICAgICAq
cmVxdWVzdCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBTT1VQX1JFUVVFU1RfSCAqLwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1
ZXN0ZXIuYyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVz
dGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJkZGIwYQotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVx
dWVzdGVyLmMKQEAgLTAsMCArMSwxODYgQEAKKy8qCisgKiBzb3VwLXJlcXVlc3Rlci5jOgorICoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCwgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgInNvdXAtcmVxdWVzdGVyLmgiCisKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3QtZGF0
YS5oIgorI2luY2x1ZGUgInNvdXAtcmVxdWVzdC1maWxlLmgiCisjaW5jbHVkZSAic291cC1yZXF1
ZXN0LWh0dHAuaCIKKyNpbmNsdWRlIDxnbGliL2dpMThuLmg+CisjaW5jbHVkZSA8bGlic291cC9z
b3VwLmg+CisKK3N0cnVjdCBfU291cFJlcXVlc3RlclByaXZhdGUgeworCUdIYXNoVGFibGUgKnJl
cXVlc3RfdHlwZXM7Cit9OworCisjZGVmaW5lIFNPVVBfUkVRVUVTVEVSX0dFVF9QUklWQVRFKG8p
IChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKChvKSwgU09VUF9UWVBFX1JFUVVFU1RFUiwg
U291cFJlcXVlc3RlclByaXZhdGUpKQorCitHX0RFRklORV9UWVBFIChTb3VwUmVxdWVzdGVyLCBz
b3VwX3JlcXVlc3RlciwgR19UWVBFX09CSkVDVCkKKworc3RhdGljIHZvaWQgc291cF9yZXF1ZXN0
ZXJfaW5pdCAoU291cFJlcXVlc3RlciAqcmVxdWVzdGVyKQoreworCXJlcXVlc3Rlci0+cHJpdiA9
IFNPVVBfUkVRVUVTVEVSX0dFVF9QUklWQVRFIChyZXF1ZXN0ZXIpOworCisJcmVxdWVzdGVyLT5w
cml2LT5yZXF1ZXN0X3R5cGVzID0gMDsKK30KKworc3RhdGljIHZvaWQgZmluYWxpemUgKEdPYmpl
Y3QgKm9iamVjdCkKK3sKKwlTb3VwUmVxdWVzdGVyICpyZXF1ZXN0ZXIgPSBTT1VQX1JFUVVFU1RF
UiAob2JqZWN0KTsKKworCWlmIChyZXF1ZXN0ZXItPnByaXYtPnJlcXVlc3RfdHlwZXMpCisJCWdf
aGFzaF90YWJsZV9kZXN0cm95IChyZXF1ZXN0ZXItPnByaXYtPnJlcXVlc3RfdHlwZXMpOworCisJ
R19PQkpFQ1RfQ0xBU1MgKHNvdXBfcmVxdWVzdGVyX3BhcmVudF9jbGFzcyktPmZpbmFsaXplIChv
YmplY3QpOworfQorCitzdGF0aWMgdm9pZCBzb3VwX3JlcXVlc3Rlcl9jbGFzc19pbml0IChTb3Vw
UmVxdWVzdGVyQ2xhc3MgKnJlcXVlc3Rlcl9jbGFzcykKK3sKKwlHT2JqZWN0Q2xhc3MgKm9iamVj
dF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChyZXF1ZXN0ZXJfY2xhc3MpOworCisJZ190eXBlX2Ns
YXNzX2FkZF9wcml2YXRlIChyZXF1ZXN0ZXJfY2xhc3MsIHNpemVvZiAoU291cFJlcXVlc3RlclBy
aXZhdGUpKTsKKworCS8qIHZpcnR1YWwgbWV0aG9kIG92ZXJyaWRlICovCisJb2JqZWN0X2NsYXNz
LT5maW5hbGl6ZSA9IGZpbmFsaXplOworfQorCitzdGF0aWMgdm9pZCBpbml0X3JlcXVlc3RfdHlw
ZXMgKFNvdXBSZXF1ZXN0ZXJQcml2YXRlICpwcml2KQoreworCWlmIChwcml2LT5yZXF1ZXN0X3R5
cGVzKQorCQlyZXR1cm47CisKKwlwcml2LT5yZXF1ZXN0X3R5cGVzID0gZ19oYXNoX3RhYmxlX25l
d19mdWxsIChzb3VwX3N0cl9jYXNlX2hhc2gsCisJCQkJCQkgICAgIHNvdXBfc3RyX2Nhc2VfZXF1
YWwsCisJCQkJCQkgICAgIGdfZnJlZSwgMCk7CisJZ19oYXNoX3RhYmxlX2luc2VydCAocHJpdi0+
cmVxdWVzdF90eXBlcywgZ19zdHJkdXAgKCJmaWxlIiksCisJCQkgICAgIEdTSVpFX1RPX1BPSU5U
RVIgKFNPVVBfVFlQRV9SRVFVRVNUX0ZJTEUpKTsKKwlnX2hhc2hfdGFibGVfaW5zZXJ0IChwcml2
LT5yZXF1ZXN0X3R5cGVzLCBnX3N0cmR1cCAoImRhdGEiKSwKKwkJCSAgICAgR1NJWkVfVE9fUE9J
TlRFUiAoU09VUF9UWVBFX1JFUVVFU1RfREFUQSkpOworCWdfaGFzaF90YWJsZV9pbnNlcnQgKHBy
aXYtPnJlcXVlc3RfdHlwZXMsIGdfc3RyZHVwICgiaHR0cCIpLAorCQkJICAgICBHU0laRV9UT19Q
T0lOVEVSIChTT1VQX1RZUEVfUkVRVUVTVF9IVFRQKSk7CisJZ19oYXNoX3RhYmxlX2luc2VydCAo
cHJpdi0+cmVxdWVzdF90eXBlcywgZ19zdHJkdXAgKCJodHRwcyIpLAorCQkJICAgICBHU0laRV9U
T19QT0lOVEVSIChTT1VQX1RZUEVfUkVRVUVTVF9IVFRQKSk7CisJZ19oYXNoX3RhYmxlX2luc2Vy
dCAocHJpdi0+cmVxdWVzdF90eXBlcywgZ19zdHJkdXAgKCJmdHAiKSwKKwkJCSAgICAgR1NJWkVf
VE9fUE9JTlRFUiAoU09VUF9UWVBFX1JFUVVFU1RfRklMRSkpOworfQorCitTb3VwUmVxdWVzdGVy
ICpzb3VwX3JlcXVlc3Rlcl9uZXcgKHZvaWQpCit7CisJcmV0dXJuIChTb3VwUmVxdWVzdGVyICop
Z19vYmplY3RfbmV3IChTT1VQX1RZUEVfUkVRVUVTVEVSLCAwKTsKK30KKworU291cFJlcXVlc3Qg
KnNvdXBfcmVxdWVzdGVyX3JlcXVlc3QgKFNvdXBSZXF1ZXN0ZXIgKnJlcXVlc3RlciwgY29uc3Qg
Y2hhciAqdXJpU3RyaW5nLCBTb3VwU2Vzc2lvbiAqc2Vzc2lvbiwgR0Vycm9yICoqZXJyb3IpCit7
CisJU291cFVSSSAqdXJpID0gc291cF91cmlfbmV3ICh1cmlTdHJpbmcpOworCVNvdXBSZXF1ZXN0
ICpyZXE7CisKKwlpZiAoIXVyaSkgeworCQlnX3NldF9lcnJvciAoZXJyb3IsIFNPVVBfRVJST1Is
IFNPVVBfRVJST1JfQkFEX1VSSSwKKwkJCSAgICAgXyAoIkNvdWxkIG5vdCBwYXJzZSBVUkkgJyVz
JyIpLCB1cmlTdHJpbmcpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXEgPSBzb3VwX3JlcXVlc3Rl
cl9yZXF1ZXN0X3VyaSAocmVxdWVzdGVyLCB1cmksIHNlc3Npb24sIGVycm9yKTsKKwlzb3VwX3Vy
aV9mcmVlICh1cmkpOworCXJldHVybiByZXE7Cit9CisKK1NvdXBSZXF1ZXN0ICpzb3VwX3JlcXVl
c3Rlcl9yZXF1ZXN0X3VyaSAoU291cFJlcXVlc3RlciAqcmVxdWVzdGVyLCBTb3VwVVJJICp1cmks
IFNvdXBTZXNzaW9uICpzZXNzaW9uLCBHRXJyb3IgKiplcnJvcikKK3sKKwlHVHlwZSByZXF1ZXN0
VHlwZTsKKworCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChTT1VQX0lTX1JFUVVFU1RFUiAocmVxdWVz
dGVyKSwgMCk7CisKKwlpbml0X3JlcXVlc3RfdHlwZXMgKHJlcXVlc3Rlci0+cHJpdik7CisJcmVx
dWVzdFR5cGUgPSAoR1R5cGUpR1BPSU5URVJfVE9fU0laRSAoZ19oYXNoX3RhYmxlX2xvb2t1cCAo
cmVxdWVzdGVyLT5wcml2LT5yZXF1ZXN0X3R5cGVzLCB1cmktPnNjaGVtZSkpOworCWlmICghcmVx
dWVzdFR5cGUpIHsKKwkJZ19zZXRfZXJyb3IgKGVycm9yLCBTT1VQX0VSUk9SLCBTT1VQX0VSUk9S
X1VOU1VQUE9SVEVEX1VSSV9TQ0hFTUUsCisJCQkgICAgIF8gKCJVbnN1cHBvcnRlZCBVUkkgc2No
ZW1lICclcyciKSwgdXJpLT5zY2hlbWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZ190eXBl
X2lzX2EgKHJlcXVlc3RUeXBlLCBHX1RZUEVfSU5JVEFCTEUpKSB7CisJCXJldHVybiAoU291cFJl
cXVlc3QgKilnX2luaXRhYmxlX25ldyAocmVxdWVzdFR5cGUsIDAsIGVycm9yLAorCQkJCQkJICAg
ICAgInVyaSIsIHVyaSwKKwkJCQkJCSAgICAgICJzZXNzaW9uIiwgc2Vzc2lvbiwKKwkJCQkJCSAg
ICAgIDApOworCX0gZWxzZSB7CisJCXJldHVybiAoU291cFJlcXVlc3QgKilnX29iamVjdF9uZXcg
KHJlcXVlc3RUeXBlLAorCQkJCQkJICAgICJ1cmkiLCB1cmksCisJCQkJCQkgICAgInNlc3Npb24i
LCBzZXNzaW9uLAorCQkJCQkJICAgIDApOworCX0KK30KKworLyogUkZDIDIzOTYsIDMuMSAqLwor
c3RhdGljIGdib29sZWFuCitzb3VwX3NjaGVtZV9pc192YWxpZCAoY29uc3QgY2hhciAqc2NoZW1l
KQoreworCWlmIChzY2hlbWUgPT0gTlVMTCB8fAorCSAgICAhZ19hc2NpaV9pc2FscGhhICgqc2No
ZW1lKSkKKwkJcmV0dXJuIEZBTFNFOworCisJc2NoZW1lKys7CisJd2hpbGUgKCpzY2hlbWUpIHsK
KwkJaWYgKCFnX2FzY2lpX2lzYWxwaGEgKCpzY2hlbWUpICYmCisJCSAgICAhZ19hc2NpaV9pc2Rp
Z2l0ICgqc2NoZW1lKSAmJgorCQkgICAgKnNjaGVtZSAhPSAnKycgJiYKKwkJICAgICpzY2hlbWUg
IT0gJy0nICYmCisJCSAgICAqc2NoZW1lICE9ICcuJykKKwkJCXJldHVybiBGQUxTRTsKKwkJc2No
ZW1lKys7CisJfQorCXJldHVybiBUUlVFOworfQorCit2b2lkCitzb3VwX3JlcXVlc3Rlcl9hZGRf
cHJvdG9jb2wgKFNvdXBSZXF1ZXN0ZXIgKnJlcXVlc3RlciwKKwkJCSAgICAgY29uc3QgY2hhciAg
KnNjaGVtZSwKKwkJCSAgICAgR1R5cGUgcmVxdWVzdF90eXBlKQoreworCWdfcmV0dXJuX2lmX2Zh
aWwgKFNPVVBfSVNfUkVRVUVTVEVSIChyZXF1ZXN0ZXIpKTsKKwlnX3JldHVybl9pZl9mYWlsIChz
b3VwX3NjaGVtZV9pc192YWxpZCAoc2NoZW1lKSk7CisKKwlpbml0X3JlcXVlc3RfdHlwZXMgKHJl
cXVlc3Rlci0+cHJpdik7CisJZ19oYXNoX3RhYmxlX2luc2VydCAocmVxdWVzdGVyLT5wcml2LT5y
ZXF1ZXN0X3R5cGVzLCBnX3N0cmR1cCAoc2NoZW1lKSwKKwkJCSAgICAgR1NJWkVfVE9fUE9JTlRF
UiAocmVxdWVzdF90eXBlKSk7Cit9CisKK3ZvaWQKK3NvdXBfcmVxdWVzdGVyX3JlbW92ZV9wcm90
b2NvbCAoU291cFJlcXVlc3RlciAqcmVxdWVzdGVyLAorCQkJCWNvbnN0IGNoYXIgICpzY2hlbWUp
Cit7CisJZ19yZXR1cm5faWZfZmFpbCAoU09VUF9JU19SRVFVRVNURVIgKHJlcXVlc3RlcikpOwor
CWdfcmV0dXJuX2lmX2ZhaWwgKHNvdXBfc2NoZW1lX2lzX3ZhbGlkIChzY2hlbWUpKTsKKworCWlu
aXRfcmVxdWVzdF90eXBlcyAocmVxdWVzdGVyLT5wcml2KTsKKwlnX2hhc2hfdGFibGVfcmVtb3Zl
IChyZXF1ZXN0ZXItPnByaXYtPnJlcXVlc3RfdHlwZXMsIHNjaGVtZSk7Cit9CisKK0dRdWFyawor
c291cF9lcnJvcl9xdWFyayAodm9pZCkKK3sKKwlzdGF0aWMgR1F1YXJrIGVycm9yOworCWlmICgh
ZXJyb3IpCisJCWVycm9yID0gZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKCJzb3VwX2Vycm9y
X3F1YXJrIik7CisJcmV0dXJuIGVycm9yOworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNmRlZDkwYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmgKQEAgLTAsMCArMSw4MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFNPVVBfUkVRVUVT
VEVSX0gKKyNkZWZpbmUgU09VUF9SRVFVRVNURVJfSCAxCisKKyNpbmNsdWRlICJzb3VwLXJlcXVl
c3QuaCIKKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVm
aW5lIFNPVVBfVFlQRV9SRVFVRVNURVIgICAgICAgICAgICAoc291cF9yZXF1ZXN0ZXJfZ2V0X3R5
cGUgKCkpCisjZGVmaW5lIFNPVVBfUkVRVUVTVEVSKG9iaikgICAgICAgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBTT1VQX1RZUEVfUkVRVUVTVEVSLCBTb3VwUmVxdWVz
dGVyKSkKKyNkZWZpbmUgU09VUF9SRVFVRVNURVJfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgU09VUF9UWVBFX1JFUVVFU1RFUiwgU291cFJlcXVlc3Rl
ckNsYXNzKSkKKyNkZWZpbmUgU09VUF9JU19SRVFVRVNURVIob2JqKSAgICAgICAgIChHX1RZUEVf
Q0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIFNPVVBfVFlQRV9SRVFVRVNURVIpKQorI2RlZmlu
ZSBTT1VQX0lTX1JFUVVFU1RFUl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBF
ICgob2JqKSwgU09VUF9UWVBFX1JFUVVFU1RFUikpCisjZGVmaW5lIFNPVVBfUkVRVUVTVEVSX0dF
VF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIFNPVVBfVFlQ
RV9SRVFVRVNURVIsIFNvdXBSZXF1ZXN0ZXJDbGFzcykpCisKKyNkZWZpbmUgU09VUF9FUlJPUiBz
b3VwX2Vycm9yX3F1YXJrICgpCisKK3R5cGVkZWYgZW51bSB7CisJU09VUF9FUlJPUl9CQURfVVJJ
LAorCVNPVVBfRVJST1JfVU5TVVBQT1JURURfVVJJX1NDSEVNRQorfSBTb3VwRXJyb3I7CisKK3R5
cGVkZWYgc3RydWN0IF9Tb3VwUmVxdWVzdGVyIFNvdXBSZXF1ZXN0ZXI7Cit0eXBlZGVmIHN0cnVj
dCBfU291cFJlcXVlc3RlclByaXZhdGUgU291cFJlcXVlc3RlclByaXZhdGU7CisKK3N0cnVjdCBf
U291cFJlcXVlc3RlciB7CisJR09iamVjdCBwYXJlbnQ7CisKKwlTb3VwUmVxdWVzdGVyUHJpdmF0
ZSAqcHJpdjsKK307CisKK3R5cGVkZWYgc3RydWN0IHsKKwlHT2JqZWN0Q2xhc3MgcGFyZW50X2Ns
YXNzOworfSBTb3VwUmVxdWVzdGVyQ2xhc3M7CisKK0dUeXBlIHNvdXBfcmVxdWVzdGVyX2dldF90
eXBlICh2b2lkKTsKKworU291cFJlcXVlc3RlciAqc291cF9yZXF1ZXN0ZXJfbmV3ICh2b2lkKTsK
KworR1F1YXJrIHNvdXBfZXJyb3JfcXVhcmsgKHZvaWQpOworCitTb3VwUmVxdWVzdCAqc291cF9y
ZXF1ZXN0ZXJfcmVxdWVzdCAoU291cFJlcXVlc3RlciAqcmVxdWVzdGVyLAorCQkJCSAgICAgY29u
c3QgY2hhciAqdXJpU3RyaW5nLAorCQkJCSAgICAgU291cFNlc3Npb24gKnNlc3Npb24sCisJCQkJ
ICAgICBHRXJyb3IgKiplcnJvcik7CisKK1NvdXBSZXF1ZXN0ICpzb3VwX3JlcXVlc3Rlcl9yZXF1
ZXN0X3VyaSAoU291cFJlcXVlc3RlciAqcmVxdWVzdGVyLAorCQkJCQkgU291cFVSSSAqdXJpLAor
CQkJCQkgU291cFNlc3Npb24gKnNlc3Npb24sCisJCQkJCSBHRXJyb3IgKiplcnJvcik7CisKK3Zv
aWQgc291cF9yZXF1ZXN0ZXJfYWRkX3Byb3RvY29sIChTb3VwUmVxdWVzdGVyICpyZXF1ZXN0ZXIs
CisJCQkJICBjb25zdCBjaGFyICAqc2NoZW1lLAorCQkJCSAgR1R5cGUgcmVxdWVzdF90eXBlKTsK
Kwordm9pZCBzb3VwX3JlcXVlc3Rlcl9yZW1vdmVfcHJvdG9jb2wgKFNvdXBSZXF1ZXN0ZXIgKnJl
cXVlc3RlciwKKwkJCQkgICAgIGNvbnN0IGNoYXIgICpzY2hlbWUpOworCitHX0VORF9ERUNMUwor
CisjZW5kaWYgLyogU09VUF9SRVFVRVNURVJfSCAqLwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUtcHJpdmF0ZS5oIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUtcHJpdmF0
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MTQ3ZjMKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291
cC1jYWNoZS1wcml2YXRlLmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIHNvdXAtY2FjaGUtcHJp
dmF0ZS5oOgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBX
RUJLSVRfU09VUF9DQUNIRV9QUklWQVRFX0gKKyNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FDSEVfUFJJ
VkFURV9IIDEKKworI2luY2x1ZGUgInNvdXAtY2FjaGUuaCIKKyNpbmNsdWRlIDxsaWJzb3VwL3Nv
dXAtbWVzc2FnZS5oPgorCitHX0JFR0lOX0RFQ0xTCisKK1dlYktpdFNvdXBDYWNoZVJlc3BvbnNl
IHdlYmtpdF9zb3VwX2NhY2hlX2hhc19yZXNwb25zZSAoV2ViS2l0U291cENhY2hlICAgKmNhY2hl
LAorCQkJCQkJCVNvdXBNZXNzYWdlICptc2cpOworR0lucHV0U3RyZWFtICp3ZWJraXRfc291cF9j
YWNoZV9zZW5kX3Jlc3BvbnNlIChXZWJLaXRTb3VwQ2FjaGUgICAqY2FjaGUsCisJCQkJCSAgICAg
ICBTb3VwTWVzc2FnZSAqbXNnKTsKK1dlYktpdFNvdXBDYWNoZWFiaWxpdHkgIHdlYmtpdF9zb3Vw
X2NhY2hlX2dldF9jYWNoZWFiaWxpdHkgKFdlYktpdFNvdXBDYWNoZSAgICpjYWNoZSwKKwkJCQkJ
CQkgICAgU291cE1lc3NhZ2UgKm1zZyk7CitTb3VwTWVzc2FnZSAqd2Via2l0X3NvdXBfY2FjaGVf
Z2VuZXJhdGVfY29uZGl0aW9uYWxfcmVxdWVzdCAoV2ViS2l0U291cENhY2hlICAgKmNhY2hlLAor
CQkJCQkJCSAgICAgU291cE1lc3NhZ2UgKm9yaWdpbmFsKTsKKworR19FTkRfREVDTFMKKworI2Vu
ZGlmIC8qIFdFQktJVF9TT1VQX0NBQ0hFX1BSSVZBVEVfSCAqLwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUuYyBiL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLmMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJhY2ZiMwotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLmMK
QEAgLTAsMCArMSwxNjUyIEBACisvKgorICogc291cC1jYWNoZS5jCisgKgorICogQ29weXJpZ2h0
IChDKSAyMDA5LCAyMDEwIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKy8qIFRPRE86CisgKiAtIE5lZWQgdG8gaG9vayB0
aGUgZmVhdHVyZSBpbiB0aGUgc3luYyBTb3VwU2Vzc2lvbi4KKyAqIC0gTmVlZCBtb3JlIHRlc3Rz
LgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5k
aWYKKworI2luY2x1ZGUgInNvdXAtY2FjaGUuaCIKKyNpbmNsdWRlICJzb3VwLWNhY2hlLXByaXZh
dGUuaCIKKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDxnaW8vZ2lvLmg+Cisj
aW5jbHVkZSA8c3RkbGliLmg+CisKK3N0YXRpYyBTb3VwU2Vzc2lvbkZlYXR1cmVJbnRlcmZhY2Ug
KndlYmtpdF9zb3VwX2NhY2hlX2RlZmF1bHRfZmVhdHVyZV9pbnRlcmZhY2U7CitzdGF0aWMgdm9p
ZCB3ZWJraXRfc291cF9jYWNoZV9zZXNzaW9uX2ZlYXR1cmVfaW5pdCAoU291cFNlc3Npb25GZWF0
dXJlSW50ZXJmYWNlICpmZWF0dXJlX2ludGVyZmFjZSwgZ3BvaW50ZXIgaW50ZXJmYWNlX2RhdGEp
OworCisjZGVmaW5lIERFRkFVTFRfTUFYX1NJWkUgNTAgKiAxMDI0ICogMTAyNAorI2RlZmluZSBN
QVhfRU5UUllfREFUQV9QRVJDRU5UQUdFIDEwIC8qIFBlcmNlbnRhZ2Ugb2YgdGhlIHRvdGFsIHNp
emUKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBjYWNoZSB0aGF0IGNh
biBiZQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbGVkIGJ5IGEgc2luZ2xl
IGVudHJ5ICovCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRTb3VwQ2FjaGVFbnRyeSB7CisJY2hh
ciAqa2V5OworCWNoYXIgKmZpbGVuYW1lOworCWd1aW50IGZyZXNobmVzc19saWZldGltZTsKKwln
Ym9vbGVhbiBtdXN0X3JldmFsaWRhdGU7CisJR1N0cmluZyAqZGF0YTsKKwlnc2l6ZSBwb3M7CisJ
Z3NpemUgbGVuZ3RoOworCXRpbWVfdCBjb3JyZWN0ZWRfaW5pdGlhbF9hZ2U7CisJdGltZV90IHJl
c3BvbnNlX3RpbWU7CisJZ2Jvb2xlYW4gd3JpdGluZzsKKwlnYm9vbGVhbiBkaXJ0eTsKKwlnYm9v
bGVhbiBnb3RfYm9keTsKKwlnYm9vbGVhbiBiZWluZ192YWxpZGF0ZWQ7CisJU291cE1lc3NhZ2VI
ZWFkZXJzICpoZWFkZXJzOworCUdPdXRwdXRTdHJlYW0gKnN0cmVhbTsKKwlHRXJyb3IgKmVycm9y
OworCWd1aW50IGhpdHM7CisJR0NhbmNlbGxhYmxlICpjYW5jZWxsYWJsZTsKK30gV2ViS2l0U291
cENhY2hlRW50cnk7CisKK3N0cnVjdCBfV2ViS2l0U291cENhY2hlUHJpdmF0ZSB7CisJY2hhciAq
Y2FjaGVfZGlyOworCUdIYXNoVGFibGUgKmNhY2hlOworCWd1aW50IG5fcGVuZGluZzsKKwlTb3Vw
U2Vzc2lvbiAqc2Vzc2lvbjsKKwlXZWJLaXRTb3VwQ2FjaGVUeXBlIGNhY2hlX3R5cGU7CisJZ3Vp
bnQgc2l6ZTsKKwlndWludCBtYXhfc2l6ZTsKKwlndWludCBtYXhfZW50cnlfZGF0YV9zaXplOyAv
KiBDb21wdXRlZCB2YWx1ZS4gSGVyZSBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyAqLworCUdMaXN0
ICpscnVfc3RhcnQ7Cit9OworCit0eXBlZGVmIHN0cnVjdCB7CisJV2ViS2l0U291cENhY2hlICpj
YWNoZTsKKwlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnk7CisJU291cE1lc3NhZ2UgKm1zZzsK
KwlndWxvbmcgZ290X2NodW5rX2hhbmRsZXI7CisJZ3Vsb25nIGdvdF9ib2R5X2hhbmRsZXI7CisJ
Z3Vsb25nIHJlc3RhcnRlZF9oYW5kbGVyOworfSBXZWJLaXRTb3VwQ2FjaGVXcml0aW5nRml4dHVy
ZTsKKworZW51bSB7CisJUFJPUF8wLAorCVBST1BfQ0FDSEVfRElSLAorCVBST1BfQ0FDSEVfVFlQ
RQorfTsKKworI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9HRVRfUFJJVkFURShvKSAoR19UWVBF
X0lOU1RBTkNFX0dFVF9QUklWQVRFICgobyksIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUsIFdlYktp
dFNvdXBDYWNoZVByaXZhdGUpKQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoV2ViS2l0U291
cENhY2hlLCB3ZWJraXRfc291cF9jYWNoZSwgR19UWVBFX09CSkVDVCwKKwkJCSBHX0lNUExFTUVO
VF9JTlRFUkZBQ0UgKFNPVVBfVFlQRV9TRVNTSU9OX0ZFQVRVUkUsCisJCQkJCQl3ZWJraXRfc291
cF9jYWNoZV9zZXNzaW9uX2ZlYXR1cmVfaW5pdCkpCisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRf
c291cF9jYWNoZV9lbnRyeV9yZW1vdmUgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsIFdlYktpdFNv
dXBDYWNoZUVudHJ5ICplbnRyeSk7CitzdGF0aWMgdm9pZCBtYWtlX3Jvb21fZm9yX25ld19lbnRy
eSAoV2ViS2l0U291cENhY2hlICpjYWNoZSwgZ3VpbnQgbGVuZ3RoX3RvX2FkZCk7CitzdGF0aWMg
Z2Jvb2xlYW4gY2FjaGVfYWNjZXB0c19lbnRyaWVzX29mX3NpemUgKFdlYktpdFNvdXBDYWNoZSAq
Y2FjaGUsIGd1aW50IGxlbmd0aF90b19hZGQpOworCitzdGF0aWMgV2ViS2l0U291cENhY2hlYWJp
bGl0eQorZ2V0X2NhY2hlYWJpbGl0eSAoV2ViS2l0U291cENhY2hlICpjYWNoZSwgU291cE1lc3Nh
Z2UgKm1zZykKK3sKKwlXZWJLaXRTb3VwQ2FjaGVhYmlsaXR5IGNhY2hlYWJpbGl0eTsKKwljb25z
dCBjaGFyICpjYWNoZV9jb250cm9sOworCisJLyogMS4gVGhlIHJlcXVlc3QgbWV0aG9kIG11c3Qg
YmUgY2FjaGVhYmxlICovCisJaWYgKG1zZy0+bWV0aG9kID09IFNPVVBfTUVUSE9EX0dFVCkKKwkJ
Y2FjaGVhYmlsaXR5ID0gV0VCS0lUX1NPVVBfQ0FDSEVfQ0FDSEVBQkxFOworCWVsc2UgaWYgKG1z
Zy0+bWV0aG9kID09IFNPVVBfTUVUSE9EX0hFQUQgfHwKKwkJIG1zZy0+bWV0aG9kID09IFNPVVBf
TUVUSE9EX1RSQUNFIHx8CisJCSBtc2ctPm1ldGhvZCA9PSBTT1VQX01FVEhPRF9DT05ORUNUKQor
CQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEU7CisJZWxzZQorCQlyZXR1cm4g
KFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFIHwgV0VCS0lUX1NPVVBfQ0FDSEVfSU5WQUxJ
REFURVMpOworCisJY2FjaGVfY29udHJvbCA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldCAobXNn
LT5yZXNwb25zZV9oZWFkZXJzLCAiQ2FjaGUtQ29udHJvbCIpOworCWlmIChjYWNoZV9jb250cm9s
KSB7CisJCUdIYXNoVGFibGUgKmhhc2g7CisJCVdlYktpdFNvdXBDYWNoZVByaXZhdGUgKnByaXYg
PSBXRUJLSVRfU09VUF9DQUNIRV9HRVRfUFJJVkFURSAoY2FjaGUpOworCisJCWhhc2ggPSBzb3Vw
X2hlYWRlcl9wYXJzZV9wYXJhbV9saXN0IChjYWNoZV9jb250cm9sKTsKKworCQkvKiBTaGFyZWQg
Y2FjaGVzIE1VU1QgTk9UIHN0b3JlIHByaXZhdGUgcmVzb3VyY2VzICovCisJCWlmIChwcml2LT5j
YWNoZV90eXBlID09IFdFQktJVF9TT1VQX0NBQ0hFX1NIQVJFRCkgeworCQkJaWYgKGdfaGFzaF90
YWJsZV9sb29rdXBfZXh0ZW5kZWQgKGhhc2gsICJwcml2YXRlIiwgTlVMTCwgTlVMTCkpIHsKKwkJ
CQlzb3VwX2hlYWRlcl9mcmVlX3BhcmFtX2xpc3QgKGhhc2gpOworCQkJCXJldHVybiBXRUJLSVRf
U09VUF9DQUNIRV9VTkNBQ0hFQUJMRTsKKwkJCX0KKwkJfQorCisJCS8qIDIuIFRoZSAnbm8tc3Rv
cmUnIGNhY2hlIGRpcmVjdGl2ZSBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlCisJCSAqIGhlYWRlcnMK
KwkJICovCisJCWlmIChnX2hhc2hfdGFibGVfbG9va3VwX2V4dGVuZGVkIChoYXNoLCAibm8tc3Rv
cmUiLCBOVUxMLCBOVUxMKSkgeworCQkJc291cF9oZWFkZXJfZnJlZV9wYXJhbV9saXN0IChoYXNo
KTsKKwkJCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRTsKKwkJfQorCisJCS8q
IFRoaXMgZG9lcyBub3QgYXBwZWFyIGluIHNlY3Rpb24gMi4xLCBidXQgSSB0aGluayBpdCBtYWtl
cworCQkgKiBzZW5zZSB0byBjaGVjayBpdCB0b28/CisJCSAqLworCQlpZiAoZ19oYXNoX3RhYmxl
X2xvb2t1cF9leHRlbmRlZCAoaGFzaCwgIm5vLWNhY2hlIiwgTlVMTCwgTlVMTCkpIHsKKwkJCXNv
dXBfaGVhZGVyX2ZyZWVfcGFyYW1fbGlzdCAoaGFzaCk7CisJCQlyZXR1cm4gV0VCS0lUX1NPVVBf
Q0FDSEVfVU5DQUNIRUFCTEU7CisJCX0KKwl9CisKKwlzd2l0Y2ggKG1zZy0+c3RhdHVzX2NvZGUp
IHsKKwkJY2FzZSBTT1VQX1NUQVRVU19QQVJUSUFMX0NPTlRFTlQ6CisJCQkvKiBXZSBkb24ndCBj
YWNoZSBwYXJ0aWFsIHJlc3BvbnNlcywgYnV0IHRoZXkgb25seQorCQkJICogaW52YWxpZGF0ZSBj
YWNoZWQgZnVsbCByZXNwb25zZXMgaWYgdGhlIGhlYWRlcnMKKwkJCSAqIGRvbid0IG1hdGNoLgor
CQkJICovCisJCQljYWNoZWFiaWxpdHkgPSBXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRTsK
KwkJCWJyZWFrOworCisJCWNhc2UgU09VUF9TVEFUVVNfTk9UX01PRElGSUVEOgorCQkJLyogQSAz
MDQgcmVzcG9uc2UgdmFsaWRhdGVzIGFuIGV4aXN0aW5nIGNhY2hlIGVudHJ5ICovCisJCQljYWNo
ZWFiaWxpdHkgPSBXRUJLSVRfU09VUF9DQUNIRV9WQUxJREFURVM7CisJCQlicmVhazsKKworCQlj
YXNlIFNPVVBfU1RBVFVTX01VTFRJUExFX0NIT0lDRVM6CisJCWNhc2UgU09VUF9TVEFUVVNfTU9W
RURfUEVSTUFORU5UTFk6CisJCWNhc2UgU09VUF9TVEFUVVNfR09ORToKKwkJCS8qIEZJWE1FOiBj
YWNoZWFibGUgdW5sZXNzIGluZGljYXRlZCBvdGhlcndpc2UgKi8KKwkJCWNhY2hlYWJpbGl0eSA9
IFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFOworCQkJYnJlYWs7CisKKwkJY2FzZSBTT1VQ
X1NUQVRVU19GT1VORDoKKwkJY2FzZSBTT1VQX1NUQVRVU19URU1QT1JBUllfUkVESVJFQ1Q6CisJ
CQkvKiBGSVhNRTogY2FjaGVhYmxlIGlmIGV4cGxpY2l0bHkgaW5kaWNhdGVkICovCisJCQljYWNo
ZWFiaWxpdHkgPSBXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRTsKKwkJCWJyZWFrOworCisJ
CWNhc2UgU09VUF9TVEFUVVNfU0VFX09USEVSOgorCQljYXNlIFNPVVBfU1RBVFVTX0ZPUkJJRERF
TjoKKwkJY2FzZSBTT1VQX1NUQVRVU19OT1RfRk9VTkQ6CisJCWNhc2UgU09VUF9TVEFUVVNfTUVU
SE9EX05PVF9BTExPV0VEOgorCQkJcmV0dXJuIChXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJM
RSB8IFdFQktJVF9TT1VQX0NBQ0hFX0lOVkFMSURBVEVTKTsKKworCQlkZWZhdWx0OgorCQkJLyog
QW55IDV4eCBzdGF0dXMgb3IgYW55IDR4eCBzdGF0dXMgbm90IGhhbmRsZWQgYWJvdmUKKwkJCSAq
IGlzIHVuY2FjaGVhYmxlIGJ1dCBkb2Vzbid0IGJyZWFrIHRoZSBjYWNoZS4KKwkJCSAqLworCQkJ
aWYgKChtc2ctPnN0YXR1c19jb2RlID49IFNPVVBfU1RBVFVTX0JBRF9SRVFVRVNUICYmCisJCQkg
ICAgIG1zZy0+c3RhdHVzX2NvZGUgPD0gU09VUF9TVEFUVVNfRkFJTEVEX0RFUEVOREVOQ1kpIHx8
CisJCQkgICAgbXNnLT5zdGF0dXNfY29kZSA+PSBTT1VQX1NUQVRVU19JTlRFUk5BTF9TRVJWRVJf
RVJST1IpCisJCQkJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFOworCisJCQkv
KiBBbiB1bnJlY29nbml6ZWQgMnh4LCAzeHgsIG9yIDR4eCByZXNwb25zZSBicmVha3MKKwkJCSAq
IHRoZSBjYWNoZS4KKwkJCSAqLworCQkJaWYgKChtc2ctPnN0YXR1c19jb2RlID4gU09VUF9TVEFU
VVNfUEFSVElBTF9DT05URU5UICYmCisJCQkgICAgIG1zZy0+c3RhdHVzX2NvZGUgPCBTT1VQX1NU
QVRVU19NVUxUSVBMRV9DSE9JQ0VTKSB8fAorCQkJICAgIChtc2ctPnN0YXR1c19jb2RlID4gU09V
UF9TVEFUVVNfVEVNUE9SQVJZX1JFRElSRUNUICYmCisJCQkgICAgIG1zZy0+c3RhdHVzX2NvZGUg
PCBTT1VQX1NUQVRVU19JTlRFUk5BTF9TRVJWRVJfRVJST1IpKQorCQkJCXJldHVybiAoV0VCS0lU
X1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEUgfCBXRUJLSVRfU09VUF9DQUNIRV9JTlZBTElEQVRFUyk7
CisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gY2FjaGVhYmlsaXR5OworfQorCitzdGF0aWMgdm9p
ZAord2Via2l0X3NvdXBfY2FjaGVfZW50cnlfZnJlZSAoV2ViS2l0U291cENhY2hlRW50cnkgKmVu
dHJ5LCBnYm9vbGVhbiBwdXJnZSkKK3sKKwlpZiAocHVyZ2UpIHsKKwkJR0ZpbGUgKmZpbGUgPSBn
X2ZpbGVfbmV3X2Zvcl9wYXRoIChlbnRyeS0+ZmlsZW5hbWUpOworCQlnX2ZpbGVfZGVsZXRlIChm
aWxlLCBOVUxMLCBOVUxMKTsKKwkJZ19vYmplY3RfdW5yZWYgKGZpbGUpOworCX0KKworCWdfZnJl
ZSAoZW50cnktPmZpbGVuYW1lKTsKKwllbnRyeS0+ZmlsZW5hbWUgPSBOVUxMOworCWdfZnJlZSAo
ZW50cnktPmtleSk7CisJZW50cnktPmtleSA9IE5VTEw7CisKKwlpZiAoZW50cnktPmhlYWRlcnMp
IHsKKwkJc291cF9tZXNzYWdlX2hlYWRlcnNfZnJlZSAoZW50cnktPmhlYWRlcnMpOworCQllbnRy
eS0+aGVhZGVycyA9IE5VTEw7CisJfQorCisJaWYgKGVudHJ5LT5kYXRhKSB7CisJCWdfc3RyaW5n
X2ZyZWUgKGVudHJ5LT5kYXRhLCBUUlVFKTsKKwkJZW50cnktPmRhdGEgPSBOVUxMOworCX0KKwlp
ZiAoZW50cnktPmVycm9yKSB7CisJCWdfZXJyb3JfZnJlZSAoZW50cnktPmVycm9yKTsKKwkJZW50
cnktPmVycm9yID0gTlVMTDsKKwl9CisJaWYgKGVudHJ5LT5jYW5jZWxsYWJsZSkgeworCQlnX29i
amVjdF91bnJlZiAoZW50cnktPmNhbmNlbGxhYmxlKTsKKwkJZW50cnktPmNhbmNlbGxhYmxlID0g
TlVMTDsKKwl9CisKKwlnX3NsaWNlX2ZyZWUgKFdlYktpdFNvdXBDYWNoZUVudHJ5LCBlbnRyeSk7
Cit9CisKK3N0YXRpYyB2b2lkCitjb3B5X2hlYWRlcnMgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0
IGNoYXIgKnZhbHVlLCBTb3VwTWVzc2FnZUhlYWRlcnMgKmhlYWRlcnMpCit7CisJc291cF9tZXNz
YWdlX2hlYWRlcnNfYXBwZW5kIChoZWFkZXJzLCBuYW1lLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyB2
b2lkCit1cGRhdGVfaGVhZGVycyAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUs
IFNvdXBNZXNzYWdlSGVhZGVycyAqaGVhZGVycykKK3sKKwlpZiAoc291cF9tZXNzYWdlX2hlYWRl
cnNfZ2V0IChoZWFkZXJzLCBuYW1lKSkKKwkJc291cF9tZXNzYWdlX2hlYWRlcnNfcmVwbGFjZSAo
aGVhZGVycywgbmFtZSwgdmFsdWUpOworCWVsc2UKKwkJc291cF9tZXNzYWdlX2hlYWRlcnNfYXBw
ZW5kIChoZWFkZXJzLCBuYW1lLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBndWludAord2Via2l0X3Nv
dXBfY2FjaGVfZW50cnlfZ2V0X2N1cnJlbnRfYWdlIChXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50
cnkpCit7CisJdGltZV90IG5vdyA9IHRpbWUgKE5VTEwpOworCXRpbWVfdCByZXNpZGVudF90aW1l
OworCisJcmVzaWRlbnRfdGltZSA9IG5vdyAtIGVudHJ5LT5yZXNwb25zZV90aW1lOworCXJldHVy
biBlbnRyeS0+Y29ycmVjdGVkX2luaXRpYWxfYWdlICsgcmVzaWRlbnRfdGltZTsKK30KKworc3Rh
dGljIGdib29sZWFuCit3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9pc19mcmVzaF9lbm91Z2ggKFdl
YktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSwgaW50IG1pbl9mcmVzaCkKK3sKKwl1bnNpZ25lZCBs
aW1pdCA9IChtaW5fZnJlc2ggPT0gLTEpID8gd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfZ2V0X2N1
cnJlbnRfYWdlIChlbnRyeSkgOiBtaW5fZnJlc2g7CisJcmV0dXJuIGVudHJ5LT5mcmVzaG5lc3Nf
bGlmZXRpbWUgPiBsaW1pdDsKK30KKworc3RhdGljIGNoYXIgKgorc291cF9tZXNzYWdlX2dldF9j
YWNoZV9rZXkgKFNvdXBNZXNzYWdlICptc2cpCit7CisJU291cFVSSSAqdXJpID0gc291cF9tZXNz
YWdlX2dldF91cmkgKG1zZyk7CisJcmV0dXJuIHNvdXBfdXJpX3RvX3N0cmluZyAodXJpLCBGQUxT
RSk7Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9zZXRfZnJlc2hu
ZXNzIChXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnksIFNvdXBNZXNzYWdlICptc2csIFdlYktp
dFNvdXBDYWNoZSAqY2FjaGUpCit7CisJY29uc3QgY2hhciAqY2FjaGVfY29udHJvbDsKKwljb25z
dCBjaGFyICpleHBpcmVzLCAqZGF0ZSwgKmxhc3RfbW9kaWZpZWQ7CisJR0hhc2hUYWJsZSAqaGFz
aDsKKworCWhhc2ggPSBOVUxMOworCisJY2FjaGVfY29udHJvbCA9IHNvdXBfbWVzc2FnZV9oZWFk
ZXJzX2dldCAoZW50cnktPmhlYWRlcnMsICJDYWNoZS1Db250cm9sIik7CisJaWYgKGNhY2hlX2Nv
bnRyb2wpIHsKKwkJY29uc3QgY2hhciAqbWF4X2FnZSwgKnNfbWF4YWdlOworCQlnaW50NjQgZnJl
c2huZXNzX2xpZmV0aW1lID0gMDsKKwkJV2ViS2l0U291cENhY2hlUHJpdmF0ZSAqcHJpdiA9IFdF
QktJVF9TT1VQX0NBQ0hFX0dFVF9QUklWQVRFIChjYWNoZSk7CisKKwkJaGFzaCA9IHNvdXBfaGVh
ZGVyX3BhcnNlX3BhcmFtX2xpc3QgKGNhY2hlX2NvbnRyb2wpOworCisJCS8qIFNob3VsZCB3ZSBy
ZS12YWxpZGF0ZSB0aGUgZW50cnkgd2hlbiBpdCBnb2VzIHN0YWxlICovCisJCWVudHJ5LT5tdXN0
X3JldmFsaWRhdGUgPSAoZ2Jvb2xlYW4pZ19oYXNoX3RhYmxlX2xvb2t1cCAoaGFzaCwgIm11c3Qt
cmV2YWxpZGF0ZSIpOworCisJCS8qIFNlY3Rpb24gMi4zLjEgKi8KKwkJaWYgKHByaXYtPmNhY2hl
X3R5cGUgPT0gV0VCS0lUX1NPVVBfQ0FDSEVfU0hBUkVEKSB7CisJCQlzX21heGFnZSA9IGdfaGFz
aF90YWJsZV9sb29rdXAgKGhhc2gsICJzLW1heGFnZSIpOworCQkJaWYgKHNfbWF4YWdlKSB7CisJ
CQkJZnJlc2huZXNzX2xpZmV0aW1lID0gZ19hc2NpaV9zdHJ0b2xsIChzX21heGFnZSwgTlVMTCwg
MTApOworCQkJCWlmIChmcmVzaG5lc3NfbGlmZXRpbWUpIHsKKwkJCQkJLyogSW1wbGllcyBwcm94
eS1yZXZhbGlkYXRlLiBUT0RPOiBpcyBpdCB0cnVlPyAqLworCQkJCQllbnRyeS0+bXVzdF9yZXZh
bGlkYXRlID0gVFJVRTsKKwkJCQkJc291cF9oZWFkZXJfZnJlZV9wYXJhbV9saXN0IChoYXNoKTsK
KwkJCQkJcmV0dXJuOworCQkJCX0KKwkJCX0KKwkJfQorCisJCS8qIElmICdtYXgtYWdlJyBjYWNo
ZSBkaXJlY3RpdmUgaXMgcHJlc2VudCwgdXNlIHRoYXQgKi8KKwkJbWF4X2FnZSA9IGdfaGFzaF90
YWJsZV9sb29rdXAgKGhhc2gsICJtYXgtYWdlIik7CisJCWlmIChtYXhfYWdlKQorCQkJZnJlc2hu
ZXNzX2xpZmV0aW1lID0gZ19hc2NpaV9zdHJ0b2xsIChtYXhfYWdlLCBOVUxMLCAxMCk7CisKKwkJ
aWYgKGZyZXNobmVzc19saWZldGltZSkgeworCQkJZW50cnktPmZyZXNobmVzc19saWZldGltZSA9
IChndWludClNSU4gKGZyZXNobmVzc19saWZldGltZSwgR19NQVhVSU5UMzIpOworCQkJc291cF9o
ZWFkZXJfZnJlZV9wYXJhbV9saXN0IChoYXNoKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWlm
IChoYXNoICE9IE5VTEwpCisJCXNvdXBfaGVhZGVyX2ZyZWVfcGFyYW1fbGlzdCAoaGFzaCk7CisK
KwkvKiBJZiB0aGUgJ0V4cGlyZXMnIHJlc3BvbnNlIGhlYWRlciBpcyBwcmVzZW50LCB1c2UgaXRz
IHZhbHVlCisJICogbWludXMgdGhlIHZhbHVlIG9mIHRoZSAnRGF0ZScgcmVzcG9uc2UgaGVhZGVy
CisJICovCisJZXhwaXJlcyA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldCAoZW50cnktPmhlYWRl
cnMsICJFeHBpcmVzIik7CisJZGF0ZSA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldCAoZW50cnkt
PmhlYWRlcnMsICJEYXRlIik7CisJaWYgKGV4cGlyZXMgJiYgZGF0ZSkgeworCQlTb3VwRGF0ZSAq
ZXhwaXJlc19kLCAqZGF0ZV9kOworCQl0aW1lX3QgZXhwaXJlc190LCBkYXRlX3Q7CisKKwkJZXhw
aXJlc19kID0gc291cF9kYXRlX25ld19mcm9tX3N0cmluZyAoZXhwaXJlcyk7CisJCWlmIChleHBp
cmVzX2QpIHsKKwkJCWRhdGVfZCA9IHNvdXBfZGF0ZV9uZXdfZnJvbV9zdHJpbmcgKGRhdGUpOwor
CisJCQlleHBpcmVzX3QgPSBzb3VwX2RhdGVfdG9fdGltZV90IChleHBpcmVzX2QpOworCQkJZGF0
ZV90ID0gc291cF9kYXRlX3RvX3RpbWVfdCAoZGF0ZV9kKTsKKworCQkJc291cF9kYXRlX2ZyZWUg
KGV4cGlyZXNfZCk7CisJCQlzb3VwX2RhdGVfZnJlZSAoZGF0ZV9kKTsKKworCQkJaWYgKGV4cGly
ZXNfdCAmJiBkYXRlX3QpIHsKKwkJCQllbnRyeS0+ZnJlc2huZXNzX2xpZmV0aW1lID0gKGd1aW50
KU1BWCAoZXhwaXJlc190IC0gZGF0ZV90LCAwKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0gZWxz
ZSB7CisJCQkvKiBJZiBFeHBpcmVzIGlzIG5vdCBhIHZhbGlkIGRhdGUgd2Ugc2hvdWxkCisJCQkg
ICB0cmVhdCBpdCBhcyBhbHJlYWR5IGV4cGlyZWQsIHNlZSBzZWN0aW9uCisJCQkgICAzLjMgKi8K
KwkJCWVudHJ5LT5mcmVzaG5lc3NfbGlmZXRpbWUgPSAwOworCQkJcmV0dXJuOworCQl9CisJfQor
CisJLyogT3RoZXJ3aXNlIGFuIGhldXJpc3RpYyBtYXkgYmUgdXNlZCAqLworCisJLyogSGV1cmlz
dGljcyBNVVNUIE5PVCBiZSB1c2VkIHdpdGggdGhlc2Ugc3RhdHVzIGNvZGVzCisJICAgKHNlY3Rp
b24gMi4zLjEuMSkgKi8KKwlpZiAobXNnLT5zdGF0dXNfY29kZSAhPSBTT1VQX1NUQVRVU19PSyAm
JgorCSAgICBtc2ctPnN0YXR1c19jb2RlICE9IFNPVVBfU1RBVFVTX05PTl9BVVRIT1JJVEFUSVZF
ICYmCisJICAgIG1zZy0+c3RhdHVzX2NvZGUgIT0gU09VUF9TVEFUVVNfUEFSVElBTF9DT05URU5U
ICYmCisJICAgIG1zZy0+c3RhdHVzX2NvZGUgIT0gU09VUF9TVEFUVVNfTVVMVElQTEVfQ0hPSUNF
UyAmJgorCSAgICBtc2ctPnN0YXR1c19jb2RlICE9IFNPVVBfU1RBVFVTX01PVkVEX1BFUk1BTkVO
VExZICYmCisJICAgIG1zZy0+c3RhdHVzX2NvZGUgIT0gU09VUF9TVEFUVVNfR09ORSkKKwkJZ290
byBleHBpcmU7CisKKwkvKiBUT0RPOiBhdHRhY2ggd2FybmluZyAxMTMgaWYgcmVzcG9uc2UncyBj
dXJyZW50X2FnZSBpcyBtb3JlCisJICAgdGhhbiAyNGggKHNlY3Rpb24gMi4zLjEuMSkgd2hlbiB1
c2luZyBoZXVyaXN0aWNzICovCisKKwkvKiBMYXN0LU1vZGlmaWVkIGJhc2VkIGhldXJpc3RpYyAq
LworCWxhc3RfbW9kaWZpZWQgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKGVudHJ5LT5oZWFk
ZXJzLCAiTGFzdC1Nb2RpZmllZCIpOworCWlmIChsYXN0X21vZGlmaWVkKSB7CisJCVNvdXBEYXRl
ICpzb3VwX2RhdGU7CisJCXRpbWVfdCBub3csIGxhc3RfbW9kaWZpZWRfdDsKKworCQlzb3VwX2Rh
dGUgPSBzb3VwX2RhdGVfbmV3X2Zyb21fc3RyaW5nIChsYXN0X21vZGlmaWVkKTsKKwkJbGFzdF9t
b2RpZmllZF90ID0gc291cF9kYXRlX3RvX3RpbWVfdCAoc291cF9kYXRlKTsKKwkJbm93ID0gdGlt
ZSAoTlVMTCk7CisKKyNkZWZpbmUgSEVVUklTVElDX0ZBQ1RPUiAwLjEgLyogRnJvbSBTZWN0aW9u
IDIuMy4xLjEgKi8KKworCQllbnRyeS0+ZnJlc2huZXNzX2xpZmV0aW1lID0gTUFYICgwLCAobm93
IC0gbGFzdF9tb2RpZmllZF90KSAqIEhFVVJJU1RJQ19GQUNUT1IpOworCQlzb3VwX2RhdGVfZnJl
ZSAoc291cF9kYXRlKTsKKwl9CisKKwlyZXR1cm47CisKKyBleHBpcmU6CisJLyogSWYgYWxsIGVs
c2UgZmFpbHMsIG1ha2UgdGhlIGVudHJ5IGV4cGlyZSBpbW1lZGlhdGVseSAqLworCWVudHJ5LT5m
cmVzaG5lc3NfbGlmZXRpbWUgPSAwOworfQorCitzdGF0aWMgV2ViS2l0U291cENhY2hlRW50cnkg
Kgord2Via2l0X3NvdXBfY2FjaGVfZW50cnlfbmV3IChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLCBT
b3VwTWVzc2FnZSAqbXNnLCB0aW1lX3QgcmVxdWVzdF90aW1lLCB0aW1lX3QgcmVzcG9uc2VfdGlt
ZSkKK3sKKwlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnk7CisJU291cE1lc3NhZ2VIZWFkZXJz
ICpoZWFkZXJzOworCWNvbnN0IGNoYXIgKmRhdGU7CisJY2hhciAqbWQ1OworCisJZW50cnkgPSBn
X3NsaWNlX25ldzAgKFdlYktpdFNvdXBDYWNoZUVudHJ5KTsKKwllbnRyeS0+ZGlydHkgPSBGQUxT
RTsKKwllbnRyeS0+d3JpdGluZyA9IEZBTFNFOworCWVudHJ5LT5nb3RfYm9keSA9IEZBTFNFOwor
CWVudHJ5LT5iZWluZ192YWxpZGF0ZWQgPSBGQUxTRTsKKwllbnRyeS0+ZGF0YSA9IGdfc3RyaW5n
X25ldyAoTlVMTCk7CisJZW50cnktPnBvcyA9IDA7CisJZW50cnktPmVycm9yID0gTlVMTDsKKwor
CS8qIGtleSAmIGZpbGVuYW1lICovCisJZW50cnktPmtleSA9IHNvdXBfbWVzc2FnZV9nZXRfY2Fj
aGVfa2V5IChtc2cpOworCW1kNSA9IGdfY29tcHV0ZV9jaGVja3N1bV9mb3Jfc3RyaW5nIChHX0NI
RUNLU1VNX01ENSwgZW50cnktPmtleSwgLTEpOworCWVudHJ5LT5maWxlbmFtZSA9IGdfYnVpbGRf
ZmlsZW5hbWUgKGNhY2hlLT5wcml2LT5jYWNoZV9kaXIsIG1kNSwgTlVMTCk7CisJZ19mcmVlICht
ZDUpOworCisJLyogSGVhZGVycyAqLworCWhlYWRlcnMgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19u
ZXcgKFNPVVBfTUVTU0FHRV9IRUFERVJTX1JFU1BPTlNFKTsKKwlzb3VwX21lc3NhZ2VfaGVhZGVy
c19mb3JlYWNoIChtc2ctPnJlc3BvbnNlX2hlYWRlcnMsCisJCQkJICAgICAgKFNvdXBNZXNzYWdl
SGVhZGVyc0ZvcmVhY2hGdW5jKWNvcHlfaGVhZGVycywKKwkJCQkgICAgICBoZWFkZXJzKTsKKwll
bnRyeS0+aGVhZGVycyA9IGhlYWRlcnM7CisKKwkvKiBMUlUgbGlzdCAqLworCWVudHJ5LT5oaXRz
ID0gMDsKKworCS8qIFNlY3Rpb24gMi4zLjEsIEZyZXNobmVzcyBMaWZldGltZSAqLworCXdlYmtp
dF9zb3VwX2NhY2hlX2VudHJ5X3NldF9mcmVzaG5lc3MgKGVudHJ5LCBtc2csIGNhY2hlKTsKKwor
CS8qIFNlY3Rpb24gMi4zLjIsIENhbGN1bGF0aW5nIEFnZSAqLworCWRhdGUgPSBzb3VwX21lc3Nh
Z2VfaGVhZGVyc19nZXQgKGVudHJ5LT5oZWFkZXJzLCAiRGF0ZSIpOworCisJaWYgKGRhdGUpIHsK
KwkJU291cERhdGUgKnNvdXBfZGF0ZTsKKwkJY29uc3QgY2hhciAqYWdlOworCQl0aW1lX3QgZGF0
ZV92YWx1ZSwgYXBwYXJlbnRfYWdlLCBjb3JyZWN0ZWRfcmVjZWl2ZWRfYWdlLCByZXNwb25zZV9k
ZWxheSwgYWdlX3ZhbHVlID0gMDsKKworCQlzb3VwX2RhdGUgPSBzb3VwX2RhdGVfbmV3X2Zyb21f
c3RyaW5nIChkYXRlKTsKKwkJZGF0ZV92YWx1ZSA9IHNvdXBfZGF0ZV90b190aW1lX3QgKHNvdXBf
ZGF0ZSk7CisJCXNvdXBfZGF0ZV9mcmVlIChzb3VwX2RhdGUpOworCisJCWFnZSA9IHNvdXBfbWVz
c2FnZV9oZWFkZXJzX2dldCAoZW50cnktPmhlYWRlcnMsICJBZ2UiKTsKKwkJaWYgKGFnZSkKKwkJ
CWFnZV92YWx1ZSA9IGdfYXNjaWlfc3RydG9sbCAoYWdlLCBOVUxMLCAxMCk7CisKKwkJZW50cnkt
PnJlc3BvbnNlX3RpbWUgPSByZXNwb25zZV90aW1lOworCQlhcHBhcmVudF9hZ2UgPSBNQVggKDAs
IGVudHJ5LT5yZXNwb25zZV90aW1lIC0gZGF0ZV92YWx1ZSk7CisJCWNvcnJlY3RlZF9yZWNlaXZl
ZF9hZ2UgPSBNQVggKGFwcGFyZW50X2FnZSwgYWdlX3ZhbHVlKTsKKwkJcmVzcG9uc2VfZGVsYXkg
PSBlbnRyeS0+cmVzcG9uc2VfdGltZSAtIHJlcXVlc3RfdGltZTsKKwkJZW50cnktPmNvcnJlY3Rl
ZF9pbml0aWFsX2FnZSA9IGNvcnJlY3RlZF9yZWNlaXZlZF9hZ2UgKyByZXNwb25zZV9kZWxheTsK
Kwl9IGVsc2UgeworCQkvKiBJcyB0aGlzIGNvcnJlY3QgPyAqLworCQllbnRyeS0+Y29ycmVjdGVk
X2luaXRpYWxfYWdlID0gdGltZSAoTlVMTCk7CisJfQorCisJcmV0dXJuIGVudHJ5OworfQorCitz
dGF0aWMgdm9pZAord2Via2l0X3NvdXBfY2FjaGVfd3JpdGluZ19maXh0dXJlX2ZyZWUgKFdlYktp
dFNvdXBDYWNoZVdyaXRpbmdGaXh0dXJlICpmaXh0dXJlKQoreworCS8qIEZyZWUgZml4dHVyZS4g
QW5kIGRpc2Nvbm5lY3Qgc2lnbmFscywgd2UgZG9uJ3Qgd2FudCB0bworCSAgIGxpc3RlbiB0byBt
b3JlIFNvdXBNZXNzYWdlIGV2ZW50cyBhcyB3ZSdyZSBmaW5pc2hlZCB3aXRoCisJICAgdGhpcyBy
ZXNvdXJjZSAqLworCWlmIChnX3NpZ25hbF9oYW5kbGVyX2lzX2Nvbm5lY3RlZCAoZml4dHVyZS0+
bXNnLCBmaXh0dXJlLT5nb3RfY2h1bmtfaGFuZGxlcikpCisJCWdfc2lnbmFsX2hhbmRsZXJfZGlz
Y29ubmVjdCAoZml4dHVyZS0+bXNnLCBmaXh0dXJlLT5nb3RfY2h1bmtfaGFuZGxlcik7CisJaWYg
KGdfc2lnbmFsX2hhbmRsZXJfaXNfY29ubmVjdGVkIChmaXh0dXJlLT5tc2csIGZpeHR1cmUtPmdv
dF9ib2R5X2hhbmRsZXIpKQorCQlnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QgKGZpeHR1cmUt
Pm1zZywgZml4dHVyZS0+Z290X2JvZHlfaGFuZGxlcik7CisJaWYgKGdfc2lnbmFsX2hhbmRsZXJf
aXNfY29ubmVjdGVkIChmaXh0dXJlLT5tc2csIGZpeHR1cmUtPnJlc3RhcnRlZF9oYW5kbGVyKSkK
KwkJZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0IChmaXh0dXJlLT5tc2csIGZpeHR1cmUtPnJl
c3RhcnRlZF9oYW5kbGVyKTsKKwlnX29iamVjdF91bnJlZiAoZml4dHVyZS0+bXNnKTsKKwlnX29i
amVjdF91bnJlZiAoZml4dHVyZS0+Y2FjaGUpOworCWdfc2xpY2VfZnJlZSAoV2ViS2l0U291cENh
Y2hlV3JpdGluZ0ZpeHR1cmUsIGZpeHR1cmUpOworfQorCitzdGF0aWMgdm9pZAorY2xvc2VfcmVh
ZHlfY2IgKEdPYmplY3QgKnNvdXJjZSwgR0FzeW5jUmVzdWx0ICpyZXN1bHQsIFdlYktpdFNvdXBD
YWNoZVdyaXRpbmdGaXh0dXJlICpmaXh0dXJlKQoreworCVdlYktpdFNvdXBDYWNoZUVudHJ5ICpl
bnRyeSA9IGZpeHR1cmUtPmVudHJ5OworCVdlYktpdFNvdXBDYWNoZSAqY2FjaGUgPSBmaXh0dXJl
LT5jYWNoZTsKKwlHT3V0cHV0U3RyZWFtICpzdHJlYW0gPSBHX09VVFBVVF9TVFJFQU0gKHNvdXJj
ZSk7CisJZ29mZnNldCBjb250ZW50X2xlbmd0aDsKKworCWdfd2Fybl9pZl9mYWlsIChlbnRyeS0+
ZXJyb3IgPT0gTlVMTCk7CisKKwkvKiBGSVhNRTogd2hhdCBkbyB3ZSBkbyBvbiBlcnJvciA/ICov
CisKKwlpZiAoc3RyZWFtKSB7CisJCWdfb3V0cHV0X3N0cmVhbV9jbG9zZV9maW5pc2ggKHN0cmVh
bSwgcmVzdWx0LCBOVUxMKTsKKwkJZ19vYmplY3RfdW5yZWYgKHN0cmVhbSk7CisJfQorCWVudHJ5
LT5zdHJlYW0gPSBOVUxMOworCisJY29udGVudF9sZW5ndGggPSBzb3VwX21lc3NhZ2VfaGVhZGVy
c19nZXRfY29udGVudF9sZW5ndGggKGVudHJ5LT5oZWFkZXJzKTsKKworCS8qIElmIHRoZSBwcm9j
ZXNzIHdhcyBjYW5jZWxsZWQsIHRoZW4gZGVsZXRlIHRoZSBlbnRyeSBmcm9tCisJICAgdGhlIGNh
Y2hlLiBEbyBpdCBhbHNvIGlmIHRoZSBzaXplIG9mIGEgY2h1bmtlZCByZXNvdXJjZSBpcworCSAg
IHRvbyBtdWNoIGZvciB0aGUgY2FjaGUgKi8KKwlpZiAoZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxs
ZWQgKGVudHJ5LT5jYW5jZWxsYWJsZSkpIHsKKwkJZW50cnktPmRpcnR5ID0gRkFMU0U7CisJCXdl
YmtpdF9zb3VwX2NhY2hlX2VudHJ5X3JlbW92ZSAoY2FjaGUsIGVudHJ5KTsKKwkJd2Via2l0X3Nv
dXBfY2FjaGVfZW50cnlfZnJlZSAoZW50cnksIFRSVUUpOworCQllbnRyeSA9IE5VTEw7CisJfSBl
bHNlIGlmICgoc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2VuY29kaW5nIChlbnRyeS0+aGVhZGVy
cykgPT0gU09VUF9FTkNPRElOR19DSFVOS0VEKSB8fAorCQkgICBlbnRyeS0+bGVuZ3RoICE9IGNv
bnRlbnRfbGVuZ3RoKSB7CisJCS8qKiBUd28gb3B0aW9ucyBoZXJlOgorCQkgKgorCQkgKiAxLiAi
Y2h1bmtlZCIgZGF0YSwgZW50cnkgd2FzIHRlbXBvcmFyaWx5IGFkZGVkIHRvCisJCSAqIGNhY2hl
IChhcyBjb250ZW50LWxlbmd0aCBpcyAwKSBhbmQgbm93IHRoYXQgd2UgaGF2ZQorCQkgKiB0aGUg
YWN0dWFsIHNpemUgd2UgaGF2ZSB0byBldmFsdWF0ZSBpZiB3ZSB3YW50IGl0CisJCSAqIGluIHRo
ZSBjYWNoZSBvciBub3QKKwkJICoKKwkJICogMi4gQ29udGVudC1MZW5ndGggaGFzIGEgZGlmZmVy
ZW50IHZhbHVlIHRoYW4gYWN0dWFsCisJCSAqIGxlbmd0aCwgbWVhbnMgdGhhdCB0aGUgY29udGVu
dCB3YXMgZW5jb2RlZCBmb3IKKwkJICogdHJhbnNtaXNzaW9uICh0eXBpY2FsbHkgY29tcHJlc3Nl
ZCkgYW5kIHRodXMgd2UKKwkJICogaGF2ZSB0byBzdWJzdHJhY3QgdGhlIGNvbnRlbnQtbGVuZ3Ro
IHZhbHVlIHRoYXQgd2FzCisJCSAqIGFkZGVkIHRvIHRoZSBjYWNoZSBhbmQgYWRkIHRoZSB1bmVu
Y29kZWQgbGVuZ3RoCisJCSAqKi8KKwkJZ2ludCBsZW5ndGhfdG9fYWRkID0gZW50cnktPmxlbmd0
aCAtIGNvbnRlbnRfbGVuZ3RoOworCisJCS8qIE1ha2Ugcm9vbSBpbiBjYWNoZSBpZiBuZWVkZWQg
Ki8KKwkJaWYgKGNhY2hlX2FjY2VwdHNfZW50cmllc19vZl9zaXplIChjYWNoZSwgbGVuZ3RoX3Rv
X2FkZCkpIHsKKwkJCW1ha2Vfcm9vbV9mb3JfbmV3X2VudHJ5IChjYWNoZSwgbGVuZ3RoX3RvX2Fk
ZCk7CisKKwkJCWNhY2hlLT5wcml2LT5zaXplICs9IGxlbmd0aF90b19hZGQ7CisJCX0gZWxzZSB7
CisJCQllbnRyeS0+ZGlydHkgPSBGQUxTRTsKKwkJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X3Jl
bW92ZSAoY2FjaGUsIGVudHJ5KTsKKwkJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUgKGVu
dHJ5LCBUUlVFKTsKKwkJCWVudHJ5ID0gTlVMTDsKKwkJfQorCX0KKworCWlmIChlbnRyeSkgewor
CQkvKiBHZXQgcmlkIG9mIHRoZSBHU3RyaW5nIGluIG1lbW9yeSBmb3IgdGhlIHJlc291cmNlIG5v
dyAqLworCQlpZiAoZW50cnktPmRhdGEpIHsKKwkJCWdfc3RyaW5nX2ZyZWUgKGVudHJ5LT5kYXRh
LCBUUlVFKTsKKwkJCWVudHJ5LT5kYXRhID0gTlVMTDsKKwkJfQorCisJCWVudHJ5LT5kaXJ0eSA9
IEZBTFNFOworCQllbnRyeS0+d3JpdGluZyA9IEZBTFNFOworCQllbnRyeS0+Z290X2JvZHkgPSBG
QUxTRTsKKwkJZW50cnktPnBvcyA9IDA7CisKKwkJZ19vYmplY3RfdW5yZWYgKGVudHJ5LT5jYW5j
ZWxsYWJsZSk7CisJCWVudHJ5LT5jYW5jZWxsYWJsZSA9IE5VTEw7CisJfQorCisJY2FjaGUtPnBy
aXYtPm5fcGVuZGluZy0tOworCisJLyogRnJlZXMgKi8KKwl3ZWJraXRfc291cF9jYWNoZV93cml0
aW5nX2ZpeHR1cmVfZnJlZSAoZml4dHVyZSk7Cit9CisKK3N0YXRpYyB2b2lkCit3cml0ZV9yZWFk
eV9jYiAoR09iamVjdCAqc291cmNlLCBHQXN5bmNSZXN1bHQgKnJlc3VsdCwgV2ViS2l0U291cENh
Y2hlV3JpdGluZ0ZpeHR1cmUgKmZpeHR1cmUpCit7CisJR091dHB1dFN0cmVhbSAqc3RyZWFtID0g
R19PVVRQVVRfU1RSRUFNIChzb3VyY2UpOworCUdFcnJvciAqZXJyb3IgPSBOVUxMOworCWdzc2l6
ZSB3cml0ZV9zaXplOworCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSA9IGZpeHR1cmUtPmVu
dHJ5OworCisJaWYgKGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkIChlbnRyeS0+Y2FuY2VsbGFi
bGUpKSB7CisJCWdfb3V0cHV0X3N0cmVhbV9jbG9zZV9hc3luYyAoc3RyZWFtLAorCQkJCQkgICAg
IEdfUFJJT1JJVFlfTE9XLAorCQkJCQkgICAgIGVudHJ5LT5jYW5jZWxsYWJsZSwKKwkJCQkJICAg
ICAoR0FzeW5jUmVhZHlDYWxsYmFjayljbG9zZV9yZWFkeV9jYiwKKwkJCQkJICAgICBmaXh0dXJl
KTsKKwkJcmV0dXJuOworCX0KKworCXdyaXRlX3NpemUgPSBnX291dHB1dF9zdHJlYW1fd3JpdGVf
ZmluaXNoIChzdHJlYW0sIHJlc3VsdCwgJmVycm9yKTsKKwlpZiAod3JpdGVfc2l6ZSA8PSAwIHx8
IGVycm9yKSB7CisJCWlmIChlcnJvcikKKwkJCWVudHJ5LT5lcnJvciA9IGVycm9yOworCQlnX291
dHB1dF9zdHJlYW1fY2xvc2VfYXN5bmMgKHN0cmVhbSwKKwkJCQkJICAgICBHX1BSSU9SSVRZX0xP
VywKKwkJCQkJICAgICBlbnRyeS0+Y2FuY2VsbGFibGUsCisJCQkJCSAgICAgKEdBc3luY1JlYWR5
Q2FsbGJhY2spY2xvc2VfcmVhZHlfY2IsCisJCQkJCSAgICAgZml4dHVyZSk7CisJCS8qIEZJWE1F
OiBXZSBzaG91bGQgY29tcGxldGVseSBzdG9wIGNhY2hpbmcgdGhlCisJCSAgIHJlc291cmNlIGF0
IHRoaXMgcG9pbnQgKi8KKwl9IGVsc2UgeworCQllbnRyeS0+cG9zICs9IHdyaXRlX3NpemU7CisK
KwkJLyogQXJlIHdlIHN0aWxsIHdyaXRpbmcgYW5kIGlzIHRoZXJlIG5ldyBkYXRhIHRvIHdyaXRl
CisJCSAgIGFscmVhZHkgPyAqLworCQlpZiAoZW50cnktPmRhdGEgJiYgZW50cnktPnBvcyA8IGVu
dHJ5LT5kYXRhLT5sZW4pIHsKKwkJCWdfb3V0cHV0X3N0cmVhbV93cml0ZV9hc3luYyAoZW50cnkt
PnN0cmVhbSwKKwkJCQkJCSAgICAgZW50cnktPmRhdGEtPnN0ciArIGVudHJ5LT5wb3MsCisJCQkJ
CQkgICAgIGVudHJ5LT5kYXRhLT5sZW4gLSBlbnRyeS0+cG9zLAorCQkJCQkJICAgICBHX1BSSU9S
SVRZX0xPVywKKwkJCQkJCSAgICAgZW50cnktPmNhbmNlbGxhYmxlLAorCQkJCQkJICAgICAoR0Fz
eW5jUmVhZHlDYWxsYmFjayl3cml0ZV9yZWFkeV9jYiwKKwkJCQkJCSAgICAgZml4dHVyZSk7CisJ
CX0gZWxzZSB7CisJCQllbnRyeS0+d3JpdGluZyA9IEZBTFNFOworCisJCQlpZiAoZW50cnktPmdv
dF9ib2R5KSB7CisJCQkJLyogSWYgd2UgYWxyZWFkeSByZWNlaXZlZCAnZ290LWJvZHknCisJCQkJ
ICAgYW5kIHdlIGhhdmUgd3JpdHRlbiBhbGwgdGhlIGRhdGEsCisJCQkJICAgd2UgY2FuIGNsb3Nl
IHRoZSBzdHJlYW0gKi8KKwkJCQlnX291dHB1dF9zdHJlYW1fY2xvc2VfYXN5bmMgKGVudHJ5LT5z
dHJlYW0sCisJCQkJCQkJICAgICBHX1BSSU9SSVRZX0xPVywKKwkJCQkJCQkgICAgIGVudHJ5LT5j
YW5jZWxsYWJsZSwKKwkJCQkJCQkgICAgIChHQXN5bmNSZWFkeUNhbGxiYWNrKWNsb3NlX3JlYWR5
X2NiLAorCQkJCQkJCSAgICAgZml4dHVyZSk7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2
b2lkCittc2dfZ290X2NodW5rX2NiIChTb3VwTWVzc2FnZSAqbXNnLCBTb3VwQnVmZmVyICpjaHVu
aywgV2ViS2l0U291cENhY2hlV3JpdGluZ0ZpeHR1cmUgKmZpeHR1cmUpCit7CisJV2ViS2l0U291
cENhY2hlRW50cnkgKmVudHJ5ID0gZml4dHVyZS0+ZW50cnk7CisKKwlnX3JldHVybl9pZl9mYWls
IChjaHVuay0+ZGF0YSAmJiBjaHVuay0+bGVuZ3RoKTsKKwlnX3JldHVybl9pZl9mYWlsIChlbnRy
eSk7CisKKwkvKiBJZ25vcmUgdGhpcyBpZiB0aGUgd3JpdGluZyBvciBhcHBlbmRpbmcgd2FzIGNh
bmNlbGxlZCAqLworCWlmICghZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQgKGVudHJ5LT5jYW5j
ZWxsYWJsZSkpIHsKKwkJZ19zdHJpbmdfYXBwZW5kX2xlbiAoZW50cnktPmRhdGEsIGNodW5rLT5k
YXRhLCBjaHVuay0+bGVuZ3RoKTsKKwkJZW50cnktPmxlbmd0aCA9IGVudHJ5LT5kYXRhLT5sZW47
CisKKwkJaWYgKCFjYWNoZV9hY2NlcHRzX2VudHJpZXNfb2Zfc2l6ZSAoZml4dHVyZS0+Y2FjaGUs
IGVudHJ5LT5sZW5ndGgpKSB7CisJCQkvKiBRdWlja2x5IGNhbmNlbCB0aGUgY2FjaGluZyBvZiB0
aGUgcmVzb3VyY2UgKi8KKwkJCWdfY2FuY2VsbGFibGVfY2FuY2VsIChlbnRyeS0+Y2FuY2VsbGFi
bGUpOworCQl9CisJfQorCisJLyogRklYTUU6IHJlbW92ZSB0aGUgZXJyb3IgY2hlY2sgd2hlbiB3
ZSBjYW5jZWwgdGhlIGNhY2hpbmcgYXQKKwkgICB0aGUgZmlyc3Qgd3JpdGUgZXJyb3IgKi8KKwkv
KiBPbmx5IHdyaXRlIGlmIHRoZSBlbnRyeSBzdHJlYW0gaXMgcmVhZHkgKi8KKwlpZiAoZW50cnkt
PndyaXRpbmcgPT0gRkFMU0UgJiYgZW50cnktPmVycm9yID09IE5VTEwgJiYgZW50cnktPnN0cmVh
bSkgeworCQlHU3RyaW5nICpkYXRhID0gZW50cnktPmRhdGE7CisJCWVudHJ5LT53cml0aW5nID0g
VFJVRTsKKwkJZ19vdXRwdXRfc3RyZWFtX3dyaXRlX2FzeW5jIChlbnRyeS0+c3RyZWFtLAorCQkJ
CQkgICAgIGRhdGEtPnN0ciArIGVudHJ5LT5wb3MsCisJCQkJCSAgICAgZGF0YS0+bGVuIC0gZW50
cnktPnBvcywKKwkJCQkJICAgICBHX1BSSU9SSVRZX0xPVywKKwkJCQkJICAgICBlbnRyeS0+Y2Fu
Y2VsbGFibGUsCisJCQkJCSAgICAgKEdBc3luY1JlYWR5Q2FsbGJhY2spd3JpdGVfcmVhZHlfY2Is
CisJCQkJCSAgICAgZml4dHVyZSk7CisJfQorfQorCitzdGF0aWMgdm9pZAorbXNnX2dvdF9ib2R5
X2NiIChTb3VwTWVzc2FnZSAqbXNnLCBXZWJLaXRTb3VwQ2FjaGVXcml0aW5nRml4dHVyZSAqZml4
dHVyZSkKK3sKKwlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkgPSBmaXh0dXJlLT5lbnRyeTsK
KwlnX3JldHVybl9pZl9mYWlsIChlbnRyeSk7CisKKwllbnRyeS0+Z290X2JvZHkgPSBUUlVFOwor
CisJaWYgKCFlbnRyeS0+c3RyZWFtICYmIGVudHJ5LT5wb3MgIT0gZW50cnktPmxlbmd0aCkKKwkJ
LyogVGhlIHN0cmVhbSBpcyBub3QgcmVhZHkgdG8gYmUgd3JpdHRlbiBidXQgd2Ugc3RpbGwKKwkJ
ICAgaGF2ZSBkYXRhIHRvIHdyaXRlLCB3ZSdsbCB3cml0ZSBpdCB3aGVuIHRoZSBzdHJlYW0KKwkJ
ICAgaXMgb3BlbmVkIGZvciB3cml0aW5nICovCisJCXJldHVybjsKKworCisJaWYgKGVudHJ5LT5w
b3MgIT0gZW50cnktPmxlbmd0aCkgeworCQkvKiBJZiB3ZSBzdGlsbCBoYXZlIGRhdGEgdG8gd3Jp
dGUsIHdyaXRlIGl0LAorCQkgICB3cml0ZV9yZWFkeV9jYiB3aWxsIGNsb3NlIHRoZSBzdHJlYW0g
Ki8KKwkJaWYgKGVudHJ5LT53cml0aW5nID09IEZBTFNFICYmIGVudHJ5LT5lcnJvciA9PSBOVUxM
ICYmIGVudHJ5LT5zdHJlYW0pIHsKKwkJCWdfb3V0cHV0X3N0cmVhbV93cml0ZV9hc3luYyAoZW50
cnktPnN0cmVhbSwKKwkJCQkJCSAgICAgZW50cnktPmRhdGEtPnN0ciArIGVudHJ5LT5wb3MsCisJ
CQkJCQkgICAgIGVudHJ5LT5kYXRhLT5sZW4gLSBlbnRyeS0+cG9zLAorCQkJCQkJICAgICBHX1BS
SU9SSVRZX0xPVywKKwkJCQkJCSAgICAgZW50cnktPmNhbmNlbGxhYmxlLAorCQkJCQkJICAgICAo
R0FzeW5jUmVhZHlDYWxsYmFjayl3cml0ZV9yZWFkeV9jYiwKKwkJCQkJCSAgICAgZml4dHVyZSk7
CisJCX0KKwkJcmV0dXJuOworCX0KKworCWlmIChlbnRyeS0+c3RyZWFtICYmICFlbnRyeS0+d3Jp
dGluZykKKwkJZ19vdXRwdXRfc3RyZWFtX2Nsb3NlX2FzeW5jIChlbnRyeS0+c3RyZWFtLAorCQkJ
CQkgICAgIEdfUFJJT1JJVFlfTE9XLAorCQkJCQkgICAgIGVudHJ5LT5jYW5jZWxsYWJsZSwKKwkJ
CQkJICAgICAoR0FzeW5jUmVhZHlDYWxsYmFjayljbG9zZV9yZWFkeV9jYiwKKwkJCQkJICAgICBm
aXh0dXJlKTsKK30KKworc3RhdGljIGdib29sZWFuCit3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9y
ZW1vdmUgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsIFdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRy
eSkKK3sKKwlHTGlzdCAqbHJ1X2l0ZW07CisKKwkvKiBpZiAoZW50cnktPmRpcnR5ICYmICFnX2Nh
bmNlbGxhYmxlX2lzX2NhbmNlbGxlZCAoZW50cnktPmNhbmNlbGxhYmxlKSkgeyAqLworCWlmIChl
bnRyeS0+ZGlydHkpIHsKKwkJZ19jYW5jZWxsYWJsZV9jYW5jZWwgKGVudHJ5LT5jYW5jZWxsYWJs
ZSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlnX2Fzc2VydCAoZ19saXN0X2xlbmd0aCAoY2Fj
aGUtPnByaXYtPmxydV9zdGFydCkgPT0gZ19oYXNoX3RhYmxlX3NpemUgKGNhY2hlLT5wcml2LT5j
YWNoZSkpOworCisJLyogUmVtb3ZlIGZyb20gY2FjaGUgKi8KKwlpZiAoIWdfaGFzaF90YWJsZV9y
ZW1vdmUgKGNhY2hlLT5wcml2LT5jYWNoZSwgZW50cnktPmtleSkpCisJCXJldHVybiBGQUxTRTsK
KworCS8qIFJlbW92ZSBmcm9tIExSVSAqLworCWxydV9pdGVtID0gZ19saXN0X2ZpbmQgKGNhY2hl
LT5wcml2LT5scnVfc3RhcnQsIGVudHJ5KTsKKwljYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0ID0gZ19s
aXN0X2RlbGV0ZV9saW5rIChjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0LCBscnVfaXRlbSk7CisKKwkv
KiBBZGp1c3QgY2FjaGUgc2l6ZSAqLworCWNhY2hlLT5wcml2LT5zaXplIC09IGVudHJ5LT5sZW5n
dGg7CisKKwlnX2Fzc2VydCAoZ19saXN0X2xlbmd0aCAoY2FjaGUtPnByaXYtPmxydV9zdGFydCkg
PT0gZ19oYXNoX3RhYmxlX3NpemUgKGNhY2hlLT5wcml2LT5jYWNoZSkpOworCisJcmV0dXJuIFRS
VUU7Cit9CisKK3N0YXRpYyBnaW50CitscnVfY29tcGFyZV9mdW5jIChnY29uc3Rwb2ludGVyIGEs
IGdjb25zdHBvaW50ZXIgYikKK3sKKwlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnlfYSA9IChX
ZWJLaXRTb3VwQ2FjaGVFbnRyeSAqKWE7CisJV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5X2Ig
PSAoV2ViS2l0U291cENhY2hlRW50cnkgKiliOworCisJLyoqIFRoZSByYXRpb25hbGUgb2YgdGhp
cyBzb3J0aW5nIGZ1bmMgaXMKKwkgKgorCSAqIDEuIHNvcnQgYnkgaGl0cyAtPiBMUlUgYWxnb3Jp
dGhtLCB0aGVuCisJICoKKwkgKiAyLiBzb3J0IGJ5IGZyZXNobmVzcyBsaWZldGltZSwgd2UgYmV0
dGVyIGRpc2NhcmQgZmlyc3QKKwkgKiBlbnRyaWVzIHRoYXQgYXJlIGNsb3NlIHRvIGV4cGlyZQor
CSAqCisJICogMy4gc29ydCBieSBzaXplLCByZXBsYWNlIGZpcnN0IHNtYWxsIHNpemUgcmVzb3Vy
Y2VzIGFzIHRoZXkKKwkgKiBhcmUgY2hlYXBlciB0byBkb3dubG9hZAorCSAqKi8KKworCS8qIFNv
cnQgYnkgaGl0cyAqLworCWlmIChlbnRyeV9hLT5oaXRzICE9IGVudHJ5X2ItPmhpdHMpCisJCXJl
dHVybiBlbnRyeV9hLT5oaXRzIC0gZW50cnlfYi0+aGl0czsKKworCS8qIFNvcnQgYnkgZnJlc2hu
ZXNzX2xpZmV0aW1lICovCisJaWYgKGVudHJ5X2EtPmZyZXNobmVzc19saWZldGltZSAhPSBlbnRy
eV9iLT5mcmVzaG5lc3NfbGlmZXRpbWUpCisJCXJldHVybiBlbnRyeV9hLT5mcmVzaG5lc3NfbGlm
ZXRpbWUgLSBlbnRyeV9iLT5mcmVzaG5lc3NfbGlmZXRpbWU7CisKKwkvKiBTb3J0IGJ5IHNpemUg
Ki8KKwlyZXR1cm4gZW50cnlfYS0+bGVuZ3RoIC0gZW50cnlfYi0+bGVuZ3RoOworfQorCitzdGF0
aWMgZ2Jvb2xlYW4KK2NhY2hlX2FjY2VwdHNfZW50cmllc19vZl9zaXplIChXZWJLaXRTb3VwQ2Fj
aGUgKmNhY2hlLCBndWludCBsZW5ndGhfdG9fYWRkKQoreworCS8qIFdlIGNvdWxkIGFkZCBoZXJl
IHNvbWUgbW9yZSBoZXVyaXN0aWNzLiBUT0RPOiByZXZpZXcgaG93CisJICAgdGhpcyBpcyBkb25l
IGJ5IG90aGVyIEhUVFAgY2FjaGVzICovCisKKwlyZXR1cm4gbGVuZ3RoX3RvX2FkZCA8PSBjYWNo
ZS0+cHJpdi0+bWF4X2VudHJ5X2RhdGFfc2l6ZTsKK30KKworc3RhdGljIHZvaWQKK21ha2Vfcm9v
bV9mb3JfbmV3X2VudHJ5IChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLCBndWludCBsZW5ndGhfdG9f
YWRkKQoreworCUdMaXN0ICpscnVfZW50cnkgPSBjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0OworCisJ
LyogQ2hlY2sgdGhhdCB0aGVyZSBpcyBlbm91Z2ggcm9vbSBmb3IgdGhlIG5ldyBlbnRyeS4gVGhp
cyBpcworCSAgIGFuIGFwcHJveGltYXRpb24gYXMgd2UncmUgbm90IHdvcmtpbmcgb3V0IHRoZSBz
aXplIG9mIHRoZQorCSAgIGNhY2hlIGZpbGUgb3IgdGhlIHNpemUgb2YgdGhlIGhlYWRlcnMgZm9y
IHBlcmZvcm1hbmNlCisJICAgcmVhc29ucy4gVE9ETzogY2hlY2sgaWYgdGhhdCB3b3VsZCBiZSBy
ZWFsbHkgdGhhdCBleHBlbnNpdmUgKi8KKworCXdoaWxlIChscnVfZW50cnkgJiYKKwkgICAgICAg
KGxlbmd0aF90b19hZGQgKyBjYWNoZS0+cHJpdi0+c2l6ZSA+IGNhY2hlLT5wcml2LT5tYXhfc2l6
ZSkpIHsKKwkJV2ViS2l0U291cENhY2hlRW50cnkgKm9sZF9lbnRyeSA9IChXZWJLaXRTb3VwQ2Fj
aGVFbnRyeSAqKWxydV9lbnRyeS0+ZGF0YTsKKworCQkvKiBEaXNjYXJkIGVudHJpZXMuIE9uY2Ug
Y2FuY2VsbGVkIHJlc291cmNlcyB3aWxsIGJlCisJCSAqIGZyZWVkIGluIGNsb3NlX3JlYWR5X2Ni
CisJCSAqLworCQlpZiAod2Via2l0X3NvdXBfY2FjaGVfZW50cnlfcmVtb3ZlIChjYWNoZSwgb2xk
X2VudHJ5KSkgeworCQkJd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfZnJlZSAob2xkX2VudHJ5LCBU
UlVFKTsKKwkJCWxydV9lbnRyeSA9IGNhY2hlLT5wcml2LT5scnVfc3RhcnQ7CisJCX0gZWxzZQor
CQkJbHJ1X2VudHJ5ID0gZ19saXN0X25leHQgKGxydV9lbnRyeSk7CisJfQorfQorCitzdGF0aWMg
Z2Jvb2xlYW4KK3dlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2luc2VydF9ieV9rZXkgKFdlYktpdFNv
dXBDYWNoZSAqY2FjaGUsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKmtleSwKKwkJCQkgICAgICAg
V2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5LAorCQkJCSAgICAgICBnYm9vbGVhbiBzb3J0KQor
eworCWd1aW50IGxlbmd0aF90b19hZGQgPSAwOworCisJaWYgKHNvdXBfbWVzc2FnZV9oZWFkZXJz
X2dldF9lbmNvZGluZyAoZW50cnktPmhlYWRlcnMpICE9IFNPVVBfRU5DT0RJTkdfQ0hVTktFRCkK
KwkJbGVuZ3RoX3RvX2FkZCA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9jb250ZW50X2xlbmd0
aCAoZW50cnktPmhlYWRlcnMpOworCisJLyogQ2hlY2sgaWYgd2UgYXJlIGdvaW5nIHRvIHN0b3Jl
IHRoZSByZXNvdXJjZSBkZXBlbmRpbmcgb24gaXRzIHNpemUgKi8KKwlpZiAobGVuZ3RoX3RvX2Fk
ZCkgeworCQlpZiAoIWNhY2hlX2FjY2VwdHNfZW50cmllc19vZl9zaXplIChjYWNoZSwgbGVuZ3Ro
X3RvX2FkZCkpCisJCQlyZXR1cm4gRkFMU0U7CisKKwkJLyogTWFrZSByb29tIGZvciBuZXcgZW50
cnkgaWYgbmVlZGVkICovCisJCW1ha2Vfcm9vbV9mb3JfbmV3X2VudHJ5IChjYWNoZSwgbGVuZ3Ro
X3RvX2FkZCk7CisJfQorCisJZ19oYXNoX3RhYmxlX2luc2VydCAoY2FjaGUtPnByaXYtPmNhY2hl
LCBnX3N0cmR1cCAoa2V5KSwgZW50cnkpOworCisJLyogQ29tcHV0ZSBuZXcgY2FjaGUgc2l6ZSAq
LworCWNhY2hlLT5wcml2LT5zaXplICs9IGxlbmd0aF90b19hZGQ7CisKKwkvKiBVcGRhdGUgTFJV
ICovCisJaWYgKHNvcnQpCisJCWNhY2hlLT5wcml2LT5scnVfc3RhcnQgPSBnX2xpc3RfaW5zZXJ0
X3NvcnRlZCAoY2FjaGUtPnByaXYtPmxydV9zdGFydCwgZW50cnksIGxydV9jb21wYXJlX2Z1bmMp
OworCWVsc2UKKwkJY2FjaGUtPnByaXYtPmxydV9zdGFydCA9IGdfbGlzdF9wcmVwZW5kIChjYWNo
ZS0+cHJpdi0+bHJ1X3N0YXJ0LCBlbnRyeSk7CisKKwlnX2Fzc2VydCAoZ19saXN0X2xlbmd0aCAo
Y2FjaGUtPnByaXYtPmxydV9zdGFydCkgPT0gZ19oYXNoX3RhYmxlX3NpemUgKGNhY2hlLT5wcml2
LT5jYWNoZSkpOworCisJcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkCittc2dfcmVzdGFy
dGVkX2NiIChTb3VwTWVzc2FnZSAqbXNnLCBXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkpCit7
CisJLyogRklYTUU6IFdoYXQgc2hvdWxkIHdlIGRvIGhlcmUgZXhhY3RseT8gKi8KK30KKworc3Rh
dGljIHZvaWQKK2FwcGVuZF90b19yZWFkeV9jYiAoR09iamVjdCAqc291cmNlLCBHQXN5bmNSZXN1
bHQgKnJlc3VsdCwgV2ViS2l0U291cENhY2hlV3JpdGluZ0ZpeHR1cmUgKmZpeHR1cmUpCit7CisJ
R0ZpbGUgKmZpbGUgPSAoR0ZpbGUgKilzb3VyY2U7CisJR091dHB1dFN0cmVhbSAqc3RyZWFtOwor
CVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSA9IGZpeHR1cmUtPmVudHJ5OworCisJc3RyZWFt
ID0gKEdPdXRwdXRTdHJlYW0gKilnX2ZpbGVfYXBwZW5kX3RvX2ZpbmlzaCAoZmlsZSwgcmVzdWx0
LCAmZW50cnktPmVycm9yKTsKKworCWlmIChnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxlZCAoZW50
cnktPmNhbmNlbGxhYmxlKSB8fCBlbnRyeS0+ZXJyb3IpIHsKKwkJZml4dHVyZS0+Y2FjaGUtPnBy
aXYtPm5fcGVuZGluZy0tOworCQllbnRyeS0+ZGlydHkgPSBGQUxTRTsKKwkJd2Via2l0X3NvdXBf
Y2FjaGVfZW50cnlfcmVtb3ZlIChmaXh0dXJlLT5jYWNoZSwgZW50cnkpOworCQl3ZWJraXRfc291
cF9jYWNoZV9lbnRyeV9mcmVlIChlbnRyeSwgVFJVRSk7CisJCXdlYmtpdF9zb3VwX2NhY2hlX3dy
aXRpbmdfZml4dHVyZV9mcmVlIChmaXh0dXJlKTsKKwkJcmV0dXJuOworCX0KKworCWVudHJ5LT5z
dHJlYW0gPSBnX29iamVjdF9yZWYgKHN0cmVhbSk7CisJZ19vYmplY3RfdW5yZWYgKGZpbGUpOwor
CisJLyogSWYgd2UgYWxyZWFkeSBnb3QgYWxsIHRoZSBkYXRhIHdlIGhhdmUgdG8gaW5pdGlhdGUg
dGhlCisJICAgd3JpdGluZyBoZXJlLCBzaW5jZSB3ZSB3b24ndCBnZXQgbW9yZSAnZ290LWNodW5r
JworCSAgIHNpZ25hbHMgKi8KKwlpZiAoZW50cnktPmdvdF9ib2R5KSB7CisJCUdTdHJpbmcgKmRh
dGEgPSBlbnRyeS0+ZGF0YTsKKworCQkvKiBJdCBjb3VsZCBoYXBwZW4gdGhhdCByZWFkaW5nIHRo
ZSBkYXRhIGZyb20gc2VydmVyCisJCSAgIHdhcyBjb21wbGV0ZWQgYmVmb3JlIHRoaXMgaGFwcGVu
cy4gSW4gdGhhdCBjYXNlCisJCSAgIHRoZXJlIGlzIG5vIGRhdGEgKi8KKwkJaWYgKGRhdGEpIHsK
KwkJCWVudHJ5LT53cml0aW5nID0gVFJVRTsKKwkJCWdfb3V0cHV0X3N0cmVhbV93cml0ZV9hc3lu
YyAoZW50cnktPnN0cmVhbSwKKwkJCQkJCSAgICAgZGF0YS0+c3RyICsgZW50cnktPnBvcywKKwkJ
CQkJCSAgICAgZGF0YS0+bGVuIC0gZW50cnktPnBvcywKKwkJCQkJCSAgICAgR19QUklPUklUWV9M
T1csCisJCQkJCQkgICAgIGVudHJ5LT5jYW5jZWxsYWJsZSwKKwkJCQkJCSAgICAgKEdBc3luY1Jl
YWR5Q2FsbGJhY2spd3JpdGVfcmVhZHlfY2IsCisJCQkJCQkgICAgIGZpeHR1cmUpOworCQl9CisJ
fQorfQorCit0eXBlZGVmIHN0cnVjdCB7CisJdGltZV90IHJlcXVlc3RfdGltZTsKKwlTb3VwU2Vz
c2lvbkZlYXR1cmUgKmZlYXR1cmU7CisJZ3Vsb25nIGdvdF9oZWFkZXJzX2hhbmRsZXI7Cit9IFJl
cXVlc3RIZWxwZXI7CisKK3N0YXRpYyB2b2lkCittc2dfZ290X2hlYWRlcnNfY2IgKFNvdXBNZXNz
YWdlICptc2csIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlXZWJLaXRTb3VwQ2FjaGUgKmNhY2hl
OworCVdlYktpdFNvdXBDYWNoZWFiaWxpdHkgY2FjaGVhYmxlOworCVJlcXVlc3RIZWxwZXIgKmhl
bHBlcjsKKwl0aW1lX3QgcmVxdWVzdF90aW1lLCByZXNwb25zZV90aW1lOworCisJcmVzcG9uc2Vf
dGltZSA9IHRpbWUgKE5VTEwpOworCisJaGVscGVyID0gKFJlcXVlc3RIZWxwZXIgKil1c2VyX2Rh
dGE7CisJY2FjaGUgPSBXRUJLSVRfU09VUF9DQUNIRSAoaGVscGVyLT5mZWF0dXJlKTsKKwlyZXF1
ZXN0X3RpbWUgPSBoZWxwZXItPnJlcXVlc3RfdGltZTsKKwlnX3NpZ25hbF9oYW5kbGVyc19kaXNj
b25uZWN0X2J5X2Z1bmMgKG1zZywgbXNnX2dvdF9oZWFkZXJzX2NiLCB1c2VyX2RhdGEpOworCWdf
c2xpY2VfZnJlZSAoUmVxdWVzdEhlbHBlciwgaGVscGVyKTsKKworCWNhY2hlYWJsZSA9IHdlYmtp
dF9zb3VwX2NhY2hlX2dldF9jYWNoZWFiaWxpdHkgKGNhY2hlLCBtc2cpOworCisJaWYgKGNhY2hl
YWJsZSAmIFdFQktJVF9TT1VQX0NBQ0hFX0NBQ0hFQUJMRSkgeworCQlXZWJLaXRTb3VwQ2FjaGVF
bnRyeSAqZW50cnk7CisJCWNoYXIgKmtleTsKKwkJR0ZpbGUgKmZpbGU7CisJCVdlYktpdFNvdXBD
YWNoZVdyaXRpbmdGaXh0dXJlICpmaXh0dXJlOworCisJCS8qIENoZWNrIGlmIHdlIGFyZSBhbHJl
YWR5IGNhY2hpbmcgdGhpcyByZXNvdXJjZSAqLworCQlrZXkgPSBzb3VwX21lc3NhZ2VfZ2V0X2Nh
Y2hlX2tleSAobXNnKTsKKwkJZW50cnkgPSBnX2hhc2hfdGFibGVfbG9va3VwIChjYWNoZS0+cHJp
di0+Y2FjaGUsIGtleSk7CisJCWdfZnJlZSAoa2V5KTsKKworCQlpZiAoZW50cnkgJiYgZW50cnkt
PmRpcnR5KQorCQkJcmV0dXJuOworCisJCS8qIENyZWF0ZSBhIG5ldyBlbnRyeSwgZGVsZXRpbmcg
YW55IG9sZCBvbmUgaWYgcHJlc2VudCAqLworCQlpZiAoZW50cnkpIHsKKwkJCXdlYmtpdF9zb3Vw
X2NhY2hlX2VudHJ5X3JlbW92ZSAoY2FjaGUsIGVudHJ5KTsKKwkJCXdlYmtpdF9zb3VwX2NhY2hl
X2VudHJ5X2ZyZWUgKGVudHJ5LCBUUlVFKTsKKwkJfQorCisJCWVudHJ5ID0gd2Via2l0X3NvdXBf
Y2FjaGVfZW50cnlfbmV3IChjYWNoZSwgbXNnLCByZXF1ZXN0X3RpbWUsIHJlc3BvbnNlX3RpbWUp
OworCQllbnRyeS0+aGl0cyA9IDE7CisKKwkJLyogRG8gbm90IGNvbnRpbnVlIGlmIGl0IGNhbiBu
b3QgYmUgc3RvcmVkICovCisJCWlmICghd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfaW5zZXJ0X2J5
X2tleSAoY2FjaGUsIChjb25zdCBnY2hhciAqKWVudHJ5LT5rZXksIGVudHJ5LCBUUlVFKSkgewor
CQkJd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfZnJlZSAoZW50cnksIFRSVUUpOworCQkJcmV0dXJu
OworCQl9CisKKwkJZml4dHVyZSA9IGdfc2xpY2VfbmV3MCAoV2ViS2l0U291cENhY2hlV3JpdGlu
Z0ZpeHR1cmUpOworCQlmaXh0dXJlLT5jYWNoZSA9IGdfb2JqZWN0X3JlZiAoY2FjaGUpOworCQlm
aXh0dXJlLT5lbnRyeSA9IGVudHJ5OworCQlmaXh0dXJlLT5tc2cgPSBnX29iamVjdF9yZWYgKG1z
Zyk7CisKKwkJLyogV2UgY29ubmVjdCBub3cgdG8gdGhlc2Ugc2lnbmFscyBhbmQgYnVmZmVyIHRo
ZSBkYXRhCisJCSAgIGlmIGl0IGNvbWVzIGJlZm9yZSB0aGUgZmlsZSBpcyByZWFkeSBmb3Igd3Jp
dGluZyAqLworCQlmaXh0dXJlLT5nb3RfY2h1bmtfaGFuZGxlciA9CisJCQlnX3NpZ25hbF9jb25u
ZWN0IChtc2csICJnb3QtY2h1bmsiLCBHX0NBTExCQUNLIChtc2dfZ290X2NodW5rX2NiKSwgZml4
dHVyZSk7CisJCWZpeHR1cmUtPmdvdF9ib2R5X2hhbmRsZXIgPQorCQkJZ19zaWduYWxfY29ubmVj
dCAobXNnLCAiZ290LWJvZHkiLCBHX0NBTExCQUNLIChtc2dfZ290X2JvZHlfY2IpLCBmaXh0dXJl
KTsKKwkJZml4dHVyZS0+cmVzdGFydGVkX2hhbmRsZXIgPQorCQkJZ19zaWduYWxfY29ubmVjdCAo
bXNnLCAicmVzdGFydGVkIiwgR19DQUxMQkFDSyAobXNnX3Jlc3RhcnRlZF9jYiksIGVudHJ5KTsK
KworCQkvKiBQcmVwYXJlIGVudHJ5ICovCisJCWZpbGUgPSBnX2ZpbGVfbmV3X2Zvcl9wYXRoIChl
bnRyeS0+ZmlsZW5hbWUpOworCQljYWNoZS0+cHJpdi0+bl9wZW5kaW5nKys7CisKKwkJZW50cnkt
PmRpcnR5ID0gVFJVRTsKKwkJZW50cnktPmNhbmNlbGxhYmxlID0gZ19jYW5jZWxsYWJsZV9uZXcg
KCk7CisJCWdfZmlsZV9hcHBlbmRfdG9fYXN5bmMgKGZpbGUsIDAsCisJCQkJCUdfUFJJT1JJVFlf
TE9XLCBlbnRyeS0+Y2FuY2VsbGFibGUsCisJCQkJCShHQXN5bmNSZWFkeUNhbGxiYWNrKWFwcGVu
ZF90b19yZWFkeV9jYiwKKwkJCQkJZml4dHVyZSk7CisJfSBlbHNlIGlmIChjYWNoZWFibGUgJiBX
RUJLSVRfU09VUF9DQUNIRV9JTlZBTElEQVRFUykgeworCQljaGFyICprZXk7CisJCVdlYktpdFNv
dXBDYWNoZUVudHJ5ICplbnRyeTsKKworCQlrZXkgPSBzb3VwX21lc3NhZ2VfZ2V0X2NhY2hlX2tl
eSAobXNnKTsKKwkJZW50cnkgPSBnX2hhc2hfdGFibGVfbG9va3VwIChjYWNoZS0+cHJpdi0+Y2Fj
aGUsIGtleSk7CisJCWdfZnJlZSAoa2V5KTsKKworCQlpZiAoZW50cnkpIHsKKwkJCWlmICh3ZWJr
aXRfc291cF9jYWNoZV9lbnRyeV9yZW1vdmUgKGNhY2hlLCBlbnRyeSkpCisJCQkJd2Via2l0X3Nv
dXBfY2FjaGVfZW50cnlfZnJlZSAoZW50cnksIFRSVUUpOworCQl9CisJfSBlbHNlIGlmIChjYWNo
ZWFibGUgJiBXRUJLSVRfU09VUF9DQUNIRV9WQUxJREFURVMpIHsKKwkJY2hhciAqa2V5OworCQlX
ZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnk7CisKKwkJa2V5ID0gc291cF9tZXNzYWdlX2dldF9j
YWNoZV9rZXkgKG1zZyk7CisJCWVudHJ5ID0gZ19oYXNoX3RhYmxlX2xvb2t1cCAoY2FjaGUtPnBy
aXYtPmNhY2hlLCBrZXkpOworCQlnX2ZyZWUgKGtleSk7CisKKwkJZ19yZXR1cm5faWZfZmFpbCAo
ZW50cnkpOworCisJCWVudHJ5LT5iZWluZ192YWxpZGF0ZWQgPSBGQUxTRTsKKworCQkvKiBXZSB1
cGRhdGUgdGhlIGhlYWRlcnMgb2YgdGhlIGV4aXN0aW5nIGNhY2hlIGl0ZW0sCisJCSAgIHBsdXMg
aXRzIGFnZSAqLworCQlzb3VwX21lc3NhZ2VfaGVhZGVyc19mb3JlYWNoIChtc2ctPnJlc3BvbnNl
X2hlYWRlcnMsCisJCQkJCSAgICAgIChTb3VwTWVzc2FnZUhlYWRlcnNGb3JlYWNoRnVuYyl1cGRh
dGVfaGVhZGVycywKKwkJCQkJICAgICAgZW50cnktPmhlYWRlcnMpOworCQl3ZWJraXRfc291cF9j
YWNoZV9lbnRyeV9zZXRfZnJlc2huZXNzIChlbnRyeSwgbXNnLCBjYWNoZSk7CisJfQorfQorCitH
SW5wdXRTdHJlYW0gKgord2Via2l0X3NvdXBfY2FjaGVfc2VuZF9yZXNwb25zZSAoV2ViS2l0U291
cENhY2hlICpjYWNoZSwgU291cE1lc3NhZ2UgKm1zZykKK3sKKwljaGFyICprZXk7CisJV2ViS2l0
U291cENhY2hlRW50cnkgKmVudHJ5OworCWNoYXIgKmN1cnJlbnRfYWdlOworCUdJbnB1dFN0cmVh
bSAqc3RyZWFtID0gTlVMTDsKKwlHRmlsZSAqZmlsZTsKKworCWdfcmV0dXJuX3ZhbF9pZl9mYWls
IChXRUJLSVRfSVNfU09VUF9DQUNIRSAoY2FjaGUpLCBOVUxMKTsKKwlnX3JldHVybl92YWxfaWZf
ZmFpbCAoU09VUF9JU19NRVNTQUdFIChtc2cpLCBOVUxMKTsKKworCWtleSA9IHNvdXBfbWVzc2Fn
ZV9nZXRfY2FjaGVfa2V5IChtc2cpOworCWVudHJ5ID0gZ19oYXNoX3RhYmxlX2xvb2t1cCAoY2Fj
aGUtPnByaXYtPmNhY2hlLCBrZXkpOworCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChlbnRyeSwgTlVM
TCk7CisKKwkvKiBJZiB3ZSBhcmUgdG9sZCB0byBzZW5kIGEgcmVzcG9uc2UgZnJvbSBjYWNoZSBh
bnkgdmFsaWRhdGlvbgorCSAgIGluIGNvdXJzZSBpcyBvdmVyIGJ5IG5vdyAqLworCWVudHJ5LT5i
ZWluZ192YWxpZGF0ZWQgPSBGQUxTRTsKKworCS8qIEhlYWRlcnMgKi8KKwlzb3VwX21lc3NhZ2Vf
aGVhZGVyc19mb3JlYWNoIChlbnRyeS0+aGVhZGVycywKKwkJCQkgICAgICAoU291cE1lc3NhZ2VI
ZWFkZXJzRm9yZWFjaEZ1bmMpdXBkYXRlX2hlYWRlcnMsCisJCQkJICAgICAgbXNnLT5yZXNwb25z
ZV9oZWFkZXJzKTsKKworCS8qIEFkZCAnQWdlJyBoZWFkZXIgd2l0aCB0aGUgY3VycmVudCBhZ2Ug
Ki8KKwljdXJyZW50X2FnZSA9IGdfc3RyZHVwX3ByaW50ZiAoIiVkIiwgd2Via2l0X3NvdXBfY2Fj
aGVfZW50cnlfZ2V0X2N1cnJlbnRfYWdlIChlbnRyeSkpOworCXNvdXBfbWVzc2FnZV9oZWFkZXJz
X3JlcGxhY2UgKG1zZy0+cmVzcG9uc2VfaGVhZGVycywKKwkJCQkgICAgICAiQWdlIiwKKwkJCQkg
ICAgICBjdXJyZW50X2FnZSk7CisJZ19mcmVlIChjdXJyZW50X2FnZSk7CisKKwkvKiBUT0RPOiB0
aGUgb3JpZ2luYWwgaWRlYSB3YXMgdG8gc2F2ZSByZWFkcywgYnV0IGN1cnJlbnQgY29kZQorCSAg
IGFzc3VtZXMgdGhhdCBhIHN0cmVhbSBpcyBhbHdheXMgcmV0dXJuZWQuIE5lZWQgdG8gcmVhY2gK
KwkgICBzb21lIGFncmVlbWVudCBoZXJlLiBBbHNvIHdlIGhhdmUgdG8gaGFuZGxlIHRoZSBzaXR1
YXRpb24KKwkgICB3ZXJlIHRoZSBmaWxlIHdhcyBubyBsb25nZXIgdGhlcmUgKGZvciBleGFtcGxl
IGZpbGVzCisJICAgcmVtb3ZlZCB3aXRob3V0IG5vdGlmeWluZyB0aGUgY2FjaGUgKi8KKwlmaWxl
ID0gZ19maWxlX25ld19mb3JfcGF0aCAoZW50cnktPmZpbGVuYW1lKTsKKwlzdHJlYW0gPSAoR0lu
cHV0U3RyZWFtICopZ19maWxlX3JlYWQgKGZpbGUsIE5VTEwsIE5VTEwpOworCisJcmV0dXJuIHN0
cmVhbTsKK30KKworc3RhdGljIHZvaWQKK3JlcXVlc3Rfc3RhcnRlZCAoU291cFNlc3Npb25GZWF0
dXJlICpmZWF0dXJlLCBTb3VwU2Vzc2lvbiAqc2Vzc2lvbiwKKwkJIFNvdXBNZXNzYWdlICptc2cs
IFNvdXBTb2NrZXQgKnNvY2tldCkKK3sKKwlSZXF1ZXN0SGVscGVyICpoZWxwZXIgPSBnX3NsaWNl
X25ldzAgKFJlcXVlc3RIZWxwZXIpOworCWhlbHBlci0+cmVxdWVzdF90aW1lID0gdGltZSAoTlVM
TCk7CisJaGVscGVyLT5mZWF0dXJlID0gZmVhdHVyZTsKKwloZWxwZXItPmdvdF9oZWFkZXJzX2hh
bmRsZXIgPSBnX3NpZ25hbF9jb25uZWN0IChtc2csICJnb3QtaGVhZGVycyIsCisJCQkJCQkJR19D
QUxMQkFDSyAobXNnX2dvdF9oZWFkZXJzX2NiKSwKKwkJCQkJCQloZWxwZXIpOworfQorCitzdGF0
aWMgdm9pZAorYXR0YWNoIChTb3VwU2Vzc2lvbkZlYXR1cmUgKmZlYXR1cmUsIFNvdXBTZXNzaW9u
ICpzZXNzaW9uKQoreworCVdlYktpdFNvdXBDYWNoZSAqY2FjaGUgPSBXRUJLSVRfU09VUF9DQUNI
RSAoZmVhdHVyZSk7CisJY2FjaGUtPnByaXYtPnNlc3Npb24gPSBzZXNzaW9uOworCisJd2Via2l0
X3NvdXBfY2FjaGVfZGVmYXVsdF9mZWF0dXJlX2ludGVyZmFjZS0+YXR0YWNoIChmZWF0dXJlLCBz
ZXNzaW9uKTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX2NhY2hlX3Nlc3Npb25fZmVh
dHVyZV9pbml0IChTb3VwU2Vzc2lvbkZlYXR1cmVJbnRlcmZhY2UgKmZlYXR1cmVfaW50ZXJmYWNl
LAorCQkJCQlncG9pbnRlciBpbnRlcmZhY2VfZGF0YSkKK3sKKwl3ZWJraXRfc291cF9jYWNoZV9k
ZWZhdWx0X2ZlYXR1cmVfaW50ZXJmYWNlID0KKwkJZ190eXBlX2RlZmF1bHRfaW50ZXJmYWNlX3Bl
ZWsgKFNPVVBfVFlQRV9TRVNTSU9OX0ZFQVRVUkUpOworCisJZmVhdHVyZV9pbnRlcmZhY2UtPmF0
dGFjaCA9IGF0dGFjaDsKKwlmZWF0dXJlX2ludGVyZmFjZS0+cmVxdWVzdF9zdGFydGVkID0gcmVx
dWVzdF9zdGFydGVkOworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfY2FjaGVfaW5pdCAo
V2ViS2l0U291cENhY2hlICpjYWNoZSkKK3sKKwlXZWJLaXRTb3VwQ2FjaGVQcml2YXRlICpwcml2
OworCisJcHJpdiA9IGNhY2hlLT5wcml2ID0gV0VCS0lUX1NPVVBfQ0FDSEVfR0VUX1BSSVZBVEUg
KGNhY2hlKTsKKworCXByaXYtPmNhY2hlID0gZ19oYXNoX3RhYmxlX25ld19mdWxsIChnX3N0cl9o
YXNoLAorCQkJCQkgICAgIGdfc3RyX2VxdWFsLAorCQkJCQkgICAgIChHRGVzdHJveU5vdGlmeSln
X2ZyZWUsCisJCQkJCSAgICAgTlVMTCk7CisKKwkvKiBMUlUgKi8KKwlwcml2LT5scnVfc3RhcnQg
PSBOVUxMOworCisJLyogKi8KKwlwcml2LT5uX3BlbmRpbmcgPSAwOworCisJLyogQ2FjaGUgc2l6
ZSAqLworCXByaXYtPm1heF9zaXplID0gREVGQVVMVF9NQVhfU0laRTsKKwlwcml2LT5tYXhfZW50
cnlfZGF0YV9zaXplID0gcHJpdi0+bWF4X3NpemUgLyBNQVhfRU5UUllfREFUQV9QRVJDRU5UQUdF
OworCXByaXYtPnNpemUgPSAwOworfQorCitzdGF0aWMgdm9pZAorcmVtb3ZlX2NhY2hlX2l0ZW0g
KGdwb2ludGVyIGtleSwKKwkJICAgZ3BvaW50ZXIgdmFsdWUsCisJCSAgIFdlYktpdFNvdXBDYWNo
ZSAqY2FjaGUpCit7CisJV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5ID0gZ19oYXNoX3RhYmxl
X2xvb2t1cCAoY2FjaGUtPnByaXYtPmNhY2hlLCAoY29uc3QgZ2NoYXIgKilrZXkpOworCWlmICh3
ZWJraXRfc291cF9jYWNoZV9lbnRyeV9yZW1vdmUgKGNhY2hlLCBlbnRyeSkpCisJCXdlYmtpdF9z
b3VwX2NhY2hlX2VudHJ5X2ZyZWUgKGVudHJ5LCBGQUxTRSk7Cit9CisKK3N0YXRpYyB2b2lkCit3
ZWJraXRfc291cF9jYWNoZV9maW5hbGl6ZSAoR09iamVjdCAqb2JqZWN0KQoreworCVdlYktpdFNv
dXBDYWNoZVByaXZhdGUgKnByaXY7CisKKwlwcml2ID0gV0VCS0lUX1NPVVBfQ0FDSEUgKG9iamVj
dCktPnByaXY7CisKKwlnX2hhc2hfdGFibGVfZm9yZWFjaCAocHJpdi0+Y2FjaGUsIChHSEZ1bmMp
cmVtb3ZlX2NhY2hlX2l0ZW0sIG9iamVjdCk7CisJZ19oYXNoX3RhYmxlX2Rlc3Ryb3kgKHByaXYt
PmNhY2hlKTsKKwlnX2ZyZWUgKHByaXYtPmNhY2hlX2Rpcik7CisKKwlnX2xpc3RfZnJlZSAocHJp
di0+bHJ1X3N0YXJ0KTsKKwlwcml2LT5scnVfc3RhcnQgPSBOVUxMOworCisJR19PQkpFQ1RfQ0xB
U1MgKHdlYmtpdF9zb3VwX2NhY2hlX3BhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOwor
fQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfY2FjaGVfc2V0X3Byb3BlcnR5IChHT2JqZWN0
ICpvYmplY3QsIGd1aW50IHByb3BfaWQsCisJCQkJY29uc3QgR1ZhbHVlICp2YWx1ZSwgR1BhcmFt
U3BlYyAqcHNwZWMpCit7CisJV2ViS2l0U291cENhY2hlUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9T
T1VQX0NBQ0hFIChvYmplY3QpLT5wcml2OworCisJc3dpdGNoIChwcm9wX2lkKSB7CisJCWNhc2Ug
UFJPUF9DQUNIRV9ESVI6CisJCQlwcml2LT5jYWNoZV9kaXIgPSBnX3ZhbHVlX2R1cF9zdHJpbmcg
KHZhbHVlKTsKKwkJCS8qIENyZWF0ZSBkaXJlY3RvcnkgaWYgaXQgZG9lcyBub3QgZXhpc3QgKEZJ
WE1FOiBzaG91bGQgd2U/KSAqLworCQkJaWYgKCFnX2ZpbGVfdGVzdCAocHJpdi0+Y2FjaGVfZGly
LCBHX0ZJTEVfVEVTVF9FWElTVFMgfCBHX0ZJTEVfVEVTVF9JU19ESVIpKQorCQkJCWdfbWtkaXJf
d2l0aF9wYXJlbnRzIChwcml2LT5jYWNoZV9kaXIsIDA3MDApOworCQkJYnJlYWs7CisJCWNhc2Ug
UFJPUF9DQUNIRV9UWVBFOgorCQkJcHJpdi0+Y2FjaGVfdHlwZSA9IGdfdmFsdWVfZ2V0X2VudW0g
KHZhbHVlKTsKKwkJCS8qIFRPRE86IGNsZWFyIHByaXZhdGUgZW50cmllcyBhbmQgaXNzdWUgYSB3
YXJuaW5nIGlmIG1vdmluZyB0byBzaGFyZWQ/ICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJ
CUdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3Bl
Yyk7CisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfc291cF9jYWNoZV9n
ZXRfcHJvcGVydHkgKEdPYmplY3QgKm9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKwkJCQlHVmFsdWUg
KnZhbHVlLCBHUGFyYW1TcGVjICpwc3BlYykKK3sKKwlXZWJLaXRTb3VwQ2FjaGVQcml2YXRlICpw
cml2ID0gV0VCS0lUX1NPVVBfQ0FDSEUgKG9iamVjdCktPnByaXY7CisKKwlzd2l0Y2ggKHByb3Bf
aWQpIHsKKwkJY2FzZSBQUk9QX0NBQ0hFX0RJUjoKKwkJCWdfdmFsdWVfc2V0X3N0cmluZyAodmFs
dWUsIHByaXYtPmNhY2hlX2Rpcik7CisJCQlicmVhazsKKwkJY2FzZSBQUk9QX0NBQ0hFX1RZUEU6
CisJCQlnX3ZhbHVlX3NldF9lbnVtICh2YWx1ZSwgcHJpdi0+Y2FjaGVfdHlwZSk7CisJCQlicmVh
azsKKwkJZGVmYXVsdDoKKwkJCUdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2Jq
ZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCit3
ZWJraXRfc291cF9jYWNoZV9jb25zdHJ1Y3RlZCAoR09iamVjdCAqb2JqZWN0KQoreworCVdlYktp
dFNvdXBDYWNoZVByaXZhdGUgKnByaXY7CisKKwlwcml2ID0gV0VCS0lUX1NPVVBfQ0FDSEUgKG9i
amVjdCktPnByaXY7CisKKwlpZiAoIXByaXYtPmNhY2hlX2RpcikgeworCQkvKiBTZXQgYSBkZWZh
dWx0IGNhY2hlIGRpciwgZGlmZmVyZW50IGZvciBlYWNoIHVzZXIgKi8KKwkJcHJpdi0+Y2FjaGVf
ZGlyID0gZ19idWlsZF9maWxlbmFtZSAoZ19nZXRfdXNlcl9jYWNoZV9kaXIgKCksCisJCQkJCQkg
ICAgImh0dHBjYWNoZSIsCisJCQkJCQkgICAgTlVMTCk7CisJCWlmICghZ19maWxlX3Rlc3QgKHBy
aXYtPmNhY2hlX2RpciwgR19GSUxFX1RFU1RfRVhJU1RTIHwgR19GSUxFX1RFU1RfSVNfRElSKSkK
KwkJCWdfbWtkaXJfd2l0aF9wYXJlbnRzIChwcml2LT5jYWNoZV9kaXIsIDA3MDApOworCX0KKwor
CWlmIChHX09CSkVDVF9DTEFTUyAod2Via2l0X3NvdXBfY2FjaGVfcGFyZW50X2NsYXNzKS0+Y29u
c3RydWN0ZWQpCisJCUdfT0JKRUNUX0NMQVNTICh3ZWJraXRfc291cF9jYWNoZV9wYXJlbnRfY2xh
c3MpLT5jb25zdHJ1Y3RlZCAob2JqZWN0KTsKK30KKworI2RlZmluZSBXRUJLSVRfU09VUF9DQUNI
RV9UWVBFX1RZUEUgKHdlYmtpdF9zb3VwX2NhY2hlX3R5cGVfZ2V0X3R5cGUgKCkpCitzdGF0aWMg
R1R5cGUKK3dlYmtpdF9zb3VwX2NhY2hlX3R5cGVfZ2V0X3R5cGUgKHZvaWQpCit7CisJc3RhdGlj
IEdUeXBlIGNhY2hlX3R5cGUgPSAwOworCisJc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgY2FjaGVf
dHlwZXNbXSA9IHsKKwkJeyBXRUJLSVRfU09VUF9DQUNIRV9TSU5HTEVfVVNFUiwgIlNpbmdsZSB1
c2VyIGNhY2hlIiwgInVzZXIiIH0sCisJCXsgV0VCS0lUX1NPVVBfQ0FDSEVfU0hBUkVELCAiU2hh
cmVkIGNhY2hlIiwgInNoYXJlZCIgfSwKKwkJeyAwLCBOVUxMLCBOVUxMIH0KKwl9OworCisJaWYg
KCFjYWNoZV90eXBlKSB7CisJCWNhY2hlX3R5cGUgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgi
V2ViS2l0U291cENhY2hlVHlwZSIsIGNhY2hlX3R5cGVzKTsKKwl9CisJcmV0dXJuIGNhY2hlX3R5
cGU7Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfc291cF9jYWNoZV9jbGFzc19pbml0IChXZWJL
aXRTb3VwQ2FjaGVDbGFzcyAqY2FjaGVfY2xhc3MpCit7CisJR09iamVjdENsYXNzICpnb2JqZWN0
X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKWNhY2hlX2NsYXNzOworCisJZ29iamVjdF9jbGFzcy0+
ZmluYWxpemUgPSB3ZWJraXRfc291cF9jYWNoZV9maW5hbGl6ZTsKKwlnb2JqZWN0X2NsYXNzLT5j
b25zdHJ1Y3RlZCA9IHdlYmtpdF9zb3VwX2NhY2hlX2NvbnN0cnVjdGVkOworCWdvYmplY3RfY2xh
c3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9zb3VwX2NhY2hlX3NldF9wcm9wZXJ0eTsKKwlnb2Jq
ZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfc291cF9jYWNoZV9nZXRfcHJvcGVydHk7
CisKKwljYWNoZV9jbGFzcy0+Z2V0X2NhY2hlYWJpbGl0eSA9IGdldF9jYWNoZWFiaWxpdHk7CisK
KwlnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0NB
Q0hFX0RJUiwKKwkJCQkJIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJjYWNoZS1kaXIiLAorCQkJCQkJ
CSAgICAgICJDYWNoZSBkaXJlY3RvcnkiLAorCQkJCQkJCSAgICAgICJUaGUgZGlyZWN0b3J5IHRv
IHN0b3JlIHRoZSBjYWNoZSBmaWxlcyIsCisJCQkJCQkJICAgICAgTlVMTCwKKwkJCQkJCQkgICAg
ICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKTsKKworCWdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQ0FDSEVfVFlQ
RSwKKwkJCQkJIGdfcGFyYW1fc3BlY19lbnVtICgiY2FjaGUtdHlwZSIsCisJCQkJCQkJICAgICJD
YWNoZSB0eXBlIiwKKwkJCQkJCQkgICAgIldoZXRoZXIgdGhlIGNhY2hlIGlzIHByaXZhdGUgb3Ig
c2hhcmVkIiwKKwkJCQkJCQkgICAgV0VCS0lUX1NPVVBfQ0FDSEVfVFlQRV9UWVBFLAorCQkJCQkJ
CSAgICBXRUJLSVRfU09VUF9DQUNIRV9TSU5HTEVfVVNFUiwKKwkJCQkJCQkgICAgR19QQVJBTV9S
RUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSk7CisKKwlnX3R5cGVfY2xhc3NfYWRk
X3ByaXZhdGUgKGNhY2hlX2NsYXNzLCBzaXplb2YgKFdlYktpdFNvdXBDYWNoZVByaXZhdGUpKTsK
K30KKworLyoqCisgKiB3ZWJraXRfc291cF9jYWNoZV9uZXc6CisgKiBAY2FjaGVfZGlyOiB0aGUg
ZGlyZWN0b3J5IHRvIHN0b3JlIHRoZSBjYWNoZWQgZGF0YSwgb3IgJU5VTEwgdG8gdXNlIHRoZSBk
ZWZhdWx0IG9uZQorICogQGNhY2hlX3R5cGU6IHRoZSAjV2ViS2l0U291cENhY2hlVHlwZSBvZiB0
aGUgY2FjaGUKKyAqCisgKiBDcmVhdGVzIGEgbmV3ICNXZWJLaXRTb3VwQ2FjaGUuCisgKgorICog
UmV0dXJuczogYSBuZXcgI1dlYktpdFNvdXBDYWNoZQorICoKKyAqIFNpbmNlOiAyLjI4CisgKiov
CitXZWJLaXRTb3VwQ2FjaGUgKgord2Via2l0X3NvdXBfY2FjaGVfbmV3IChjb25zdCBjaGFyICpj
YWNoZV9kaXIsIFdlYktpdFNvdXBDYWNoZVR5cGUgY2FjaGVfdHlwZSkKK3sKKwlyZXR1cm4gZ19v
YmplY3RfbmV3IChXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFLAorCQkJICAgICAiY2FjaGUtZGlyIiwg
Y2FjaGVfZGlyLAorCQkJICAgICAiY2FjaGUtdHlwZSIsIGNhY2hlX3R5cGUsCisJCQkgICAgIE5V
TEwpOworfQorCisvKioKKyAqIHdlYmtpdF9zb3VwX2NhY2hlX2hhc19yZXNwb25zZToKKyAqIEBj
YWNoZTogYSAjV2ViS2l0U291cENhY2hlCisgKiBAbXNnOiBhICNTb3VwTWVzc2FnZQorICoKKyAq
IFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyB3aGV0aGVyIHRoZSBAY2FjaGUgb2JqZWN0IGhhcyBh
IHByb3BlcgorICogcmVzcG9uc2UgZm9yIHRoZSByZXF1ZXN0IEBtc2cgZ2l2ZW4gdGhlIGZsYWdz
IGJvdGggaW4gdGhlIHJlcXVlc3QKKyAqIGFuZCB0aGUgY2FjaGVkIHJlcGx5IGFuZCB0aGUgdGlt
ZSBlbGxhcHNlZCBzaW5jZSBpdCB3YXMgY2FjaGVkLgorICoKKyAqIFJldHVybnM6IHdoZXRoZXIg
b3Igbm90IHRoZSBAY2FjaGUgaGFzIGEgdmFsaWQgcmVzcG9uc2UgZm9yIEBtc2cKKyAqKi8KK1dl
YktpdFNvdXBDYWNoZVJlc3BvbnNlCit3ZWJraXRfc291cF9jYWNoZV9oYXNfcmVzcG9uc2UgKFdl
YktpdFNvdXBDYWNoZSAqY2FjaGUsIFNvdXBNZXNzYWdlICptc2cpCit7CisJY2hhciAqa2V5Owor
CVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeTsKKwljb25zdCBjaGFyICpjYWNoZV9jb250cm9s
OworCUdIYXNoVGFibGUgKmhhc2g7CisJZ3BvaW50ZXIgdmFsdWU7CisJZ2Jvb2xlYW4gbXVzdF9y
ZXZhbGlkYXRlOworCWludCBtYXhfYWdlLCBtYXhfc3RhbGUsIG1pbl9mcmVzaDsKKwlHTGlzdCAq
bHJ1X2l0ZW0sICppdGVtOworCisJa2V5ID0gc291cF9tZXNzYWdlX2dldF9jYWNoZV9rZXkgKG1z
Zyk7CisJZW50cnkgPSBnX2hhc2hfdGFibGVfbG9va3VwIChjYWNoZS0+cHJpdi0+Y2FjaGUsIGtl
eSk7CisKKwkvKiAxLiBUaGUgcHJlc2VudGVkIFJlcXVlc3QtVVJJIGFuZCB0aGF0IG9mIHN0b3Jl
ZCByZXNwb25zZQorCSAqIG1hdGNoCisJICovCisJaWYgKCFlbnRyeSkKKwkJcmV0dXJuIFdFQktJ
VF9TT1VQX0NBQ0hFX1JFU1BPTlNFX1NUQUxFOworCisJLyogSW5jcmVhc2UgaGl0IGNvdW50LiBU
YWtlIHNvcnRpbmcgaW50byBhY2NvdW50ICovCisJZW50cnktPmhpdHMrKzsKKwlscnVfaXRlbSA9
IGdfbGlzdF9maW5kIChjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0LCBlbnRyeSk7CisJaXRlbSA9IGxy
dV9pdGVtOworCXdoaWxlIChpdGVtLT5uZXh0ICYmIGxydV9jb21wYXJlX2Z1bmMgKGl0ZW0tPmRh
dGEsIGl0ZW0tPm5leHQtPmRhdGEpID4gMCkKKwkJaXRlbSA9IGdfbGlzdF9uZXh0IChpdGVtKTsK
KworCWlmIChpdGVtICE9IGxydV9pdGVtKSB7CisJCWNhY2hlLT5wcml2LT5scnVfc3RhcnQgPSBn
X2xpc3RfcmVtb3ZlX2xpbmsgKGNhY2hlLT5wcml2LT5scnVfc3RhcnQsIGxydV9pdGVtKTsKKwkJ
aXRlbSA9IGdfbGlzdF9pbnNlcnRfc29ydGVkIChpdGVtLCBscnVfaXRlbS0+ZGF0YSwgbHJ1X2Nv
bXBhcmVfZnVuYyk7CisJCWdfbGlzdF9mcmVlIChscnVfaXRlbSk7CisJfQorCisJaWYgKGVudHJ5
LT5kaXJ0eSB8fCBlbnRyeS0+YmVpbmdfdmFsaWRhdGVkKQorCQlyZXR1cm4gV0VCS0lUX1NPVVBf
Q0FDSEVfUkVTUE9OU0VfU1RBTEU7CisKKwkvKiAyLiBUaGUgcmVxdWVzdCBtZXRob2QgYXNzb2Np
YXRlZCB3aXRoIHRoZSBzdG9yZWQgcmVzcG9uc2UKKwkgKiAgYWxsb3dzIGl0IHRvIGJlIHVzZWQg
Zm9yIHRoZSBwcmVzZW50ZWQgcmVxdWVzdAorCSAqLworCisJLyogSW4gcHJhY3RpY2UgdGhpcyBt
ZWFucyB3ZSBvbmx5IHJldHVybiBvdXIgcmVzb3VyY2UgZm9yIEdFVCwKKwkgKiBjYWNoZWFiaWxp
dHkgZm9yIG90aGVyIG1ldGhvZHMgaXMgYSBUT0RPIGluIHRoZSBSRkMKKwkgKiAoVE9ETzogYWx0
aG91Z2ggd2UgY291bGQgcmV0dXJuIHRoZSBoZWFkZXJzIGZvciBIRUFECisJICogcHJvYmFibHkp
LgorCSAqLworCWlmIChtc2ctPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpCisJCXJldHVybiBX
RUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9TVEFMRTsKKworCS8qIDMuIFNlbGVjdGluZyByZXF1
ZXN0LWhlYWRlcnMgbm9taW5hdGVkIGJ5IHRoZSBzdG9yZWQKKwkgKiByZXNwb25zZSAoaWYgYW55
KSBtYXRjaCB0aG9zZSBwcmVzZW50ZWQuCisJICovCisKKwkvKiBUT0RPICovCisKKwkvKiA0LiBU
aGUgcHJlc2VudGVkIHJlcXVlc3QgYW5kIHN0b3JlZCByZXNwb25zZSBhcmUgZnJlZSBmcm9tCisJ
ICogZGlyZWN0aXZlcyB0aGF0IHdvdWxkIHByZXZlbnQgaXRzIHVzZS4KKwkgKi8KKworCW11c3Rf
cmV2YWxpZGF0ZSA9IEZBTFNFOworCW1heF9hZ2UgPSBtYXhfc3RhbGUgPSBtaW5fZnJlc2ggPSAt
MTsKKworCWNhY2hlX2NvbnRyb2wgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKG1zZy0+cmVx
dWVzdF9oZWFkZXJzLCAiQ2FjaGUtQ29udHJvbCIpOworCWlmIChjYWNoZV9jb250cm9sKSB7CisJ
CWhhc2ggPSBzb3VwX2hlYWRlcl9wYXJzZV9wYXJhbV9saXN0IChjYWNoZV9jb250cm9sKTsKKwor
CQlpZiAoZ19oYXNoX3RhYmxlX2xvb2t1cF9leHRlbmRlZCAoaGFzaCwgIm5vLXN0b3JlIiwgTlVM
TCwgTlVMTCkpIHsKKwkJCWdfaGFzaF90YWJsZV9kZXN0cm95IChoYXNoKTsKKwkJCXJldHVybiBX
RUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9TVEFMRTsKKwkJfQorCisJCWlmIChnX2hhc2hfdGFi
bGVfbG9va3VwX2V4dGVuZGVkIChoYXNoLCAibm8tY2FjaGUiLCBOVUxMLCBOVUxMKSkgeworCQkJ
ZW50cnktPm11c3RfcmV2YWxpZGF0ZSA9IFRSVUU7CisJCX0KKworCQlpZiAoZ19oYXNoX3RhYmxl
X2xvb2t1cF9leHRlbmRlZCAoaGFzaCwgIm1heC1hZ2UiLCBOVUxMLCAmdmFsdWUpKSB7CisJCQlt
YXhfYWdlID0gKGludClNSU4gKGdfYXNjaWlfc3RydG9sbCAodmFsdWUsIE5VTEwsIDEwKSwgR19N
QVhJTlQzMik7CisJCX0KKworCQkvKiBtYXgtc3RhbGUgY2FuIGhhdmUgbm8gdmFsdWUgc2V0LCB3
ZSBuZWVkIHRvIHVzZSBfZXh0ZW5kZWQgKi8KKwkJaWYgKGdfaGFzaF90YWJsZV9sb29rdXBfZXh0
ZW5kZWQgKGhhc2gsICJtYXgtc3RhbGUiLCBOVUxMLCAmdmFsdWUpKSB7CisJCQlpZiAodmFsdWUp
CisJCQkJbWF4X3N0YWxlID0gKGludClNSU4gKGdfYXNjaWlfc3RydG9sbCAodmFsdWUsIE5VTEws
IDEwKSwgR19NQVhJTlQzMik7CisJCQllbHNlCisJCQkJbWF4X3N0YWxlID0gR19NQVhJTlQzMjsK
KwkJfQorCisJCXZhbHVlID0gZ19oYXNoX3RhYmxlX2xvb2t1cCAoaGFzaCwgIm1pbi1mcmVzaCIp
OworCQlpZiAodmFsdWUpCisJCQltaW5fZnJlc2ggPSAoaW50KU1JTiAoZ19hc2NpaV9zdHJ0b2xs
ICh2YWx1ZSwgTlVMTCwgMTApLCBHX01BWElOVDMyKTsKKworCQlnX2hhc2hfdGFibGVfZGVzdHJv
eSAoaGFzaCk7CisKKwkJaWYgKG1heF9hZ2UgIT0gLTEpIHsKKwkJCWd1aW50IGN1cnJlbnRfYWdl
ID0gd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfZ2V0X2N1cnJlbnRfYWdlIChlbnRyeSk7CisKKwkJ
CS8qIElmIHdlIGFyZSBvdmVyIG1heC1hZ2UgYW5kIG1heC1zdGFsZSBpcyBub3QKKwkJCSAgIHNl
dCwgZG8gbm90IHVzZSB0aGUgdmFsdWUgZnJvbSB0aGUgY2FjaGUKKwkJCSAgIHdpdGhvdXQgdmFs
aWRhdGlvbiAqLworCQkJaWYgKG1heF9hZ2UgPD0gY3VycmVudF9hZ2UgJiYgbWF4X3N0YWxlID09
IC0xKQorCQkJCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9ORUVEU19WQUxJREFU
SU9OOworCQl9CisJfQorCisJLyogNS4gVGhlIHN0b3JlZCByZXNwb25zZSBpcyBlaXRoZXI6IGZy
ZXNoLCBhbGxvd2VkIHRvIGJlCisJICogc2VydmVkIHN0YWxlIG9yIHN1Y2Nlc2Z1bGx5IHZhbGlk
YXRlZAorCSAqLworCS8qIFRPRE8gY29uc2lkZXIgYWxzbyBwcm94eS1yZXZhbGlkYXRlICYgcy1t
YXhhZ2UgKi8KKwlpZiAoZW50cnktPm11c3RfcmV2YWxpZGF0ZSkKKwkJcmV0dXJuIFdFQktJVF9T
T1VQX0NBQ0hFX1JFU1BPTlNFX05FRURTX1ZBTElEQVRJT047CisKKwlpZiAoIXdlYmtpdF9zb3Vw
X2NhY2hlX2VudHJ5X2lzX2ZyZXNoX2Vub3VnaCAoZW50cnksIG1pbl9mcmVzaCkpIHsKKwkJLyog
Tm90IGZyZXNoLCBjYW4gaXQgYmUgc2VydmVkIHN0YWxlPyAqLworCQlpZiAobWF4X3N0YWxlICE9
IC0xKSB7CisJCQkvKiBHX01BWElOVDMyIG1lYW5zIHdlIGFjY2VwdCBhbnkgc3RhbGVuZXNzICov
CisJCQlpZiAobWF4X3N0YWxlID09IEdfTUFYSU5UMzIpCisJCQkJcmV0dXJuIFdFQktJVF9TT1VQ
X0NBQ0hFX1JFU1BPTlNFX0ZSRVNIOworCisJCQlpZiAoKHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5
X2dldF9jdXJyZW50X2FnZSAoZW50cnkpIC0gZW50cnktPmZyZXNobmVzc19saWZldGltZSkgPD0g
bWF4X3N0YWxlKQorCQkJCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9GUkVTSDsK
KwkJfQorCisJCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9ORUVEU19WQUxJREFU
SU9OOworCX0KKworCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9GUkVTSDsKK30K
KworLyoqCisgKiB3ZWJraXRfc291cF9jYWNoZV9nZXRfY2FjaGVhYmlsaXR5OgorICogQGNhY2hl
OiBhICNXZWJLaXRTb3VwQ2FjaGUKKyAqIEBtc2c6IGEgI1NvdXBNZXNzYWdlCisgKgorICogQ2Fs
Y3VsYXRlcyB3aGV0aGVyIHRoZSBAbXNnIGNhbiBiZSBjYWNoZWQgb3Igbm90LgorICoKKyAqIFJl
dHVybnM6IGEgI1dlYktpdFNvdXBDYWNoZWFiaWxpdHkgdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVy
IHRoZSBAbXNnIGNhbiBiZSBjYWNoZWQgb3Igbm90LgorICoqLworV2ViS2l0U291cENhY2hlYWJp
bGl0eQord2Via2l0X3NvdXBfY2FjaGVfZ2V0X2NhY2hlYWJpbGl0eSAoV2ViS2l0U291cENhY2hl
ICpjYWNoZSwgU291cE1lc3NhZ2UgKm1zZykKK3sKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoV0VC
S0lUX0lTX1NPVVBfQ0FDSEUgKGNhY2hlKSwgV0VCS0lUX1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEUp
OworCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChTT1VQX0lTX01FU1NBR0UgKG1zZyksIFdFQktJVF9T
T1VQX0NBQ0hFX1VOQ0FDSEVBQkxFKTsKKworCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9HRVRf
Q0xBU1MgKGNhY2hlKS0+Z2V0X2NhY2hlYWJpbGl0eSAoY2FjaGUsIG1zZyk7Cit9CisKK3N0YXRp
YyBnYm9vbGVhbgorZm9yY2VfZmx1c2hfdGltZW91dCAoZ3BvaW50ZXIgZGF0YSkKK3sKKwlnYm9v
bGVhbiAqZm9yY2VkID0gKGdib29sZWFuICopZGF0YTsKKwkqZm9yY2VkID0gVFJVRTsKKworCXJl
dHVybiBGQUxTRTsKK30KKworLyoqCisgKiB3ZWJraXRfc291cF9jYWNoZV9mbHVzaDoKKyAqIEBj
YWNoZTogYSAjV2ViS2l0U291cENhY2hlCisgKiBAc2Vzc2lvbjogdGhlICNTb3VwU2Vzc2lvbiBh
c3NvY2lhdGVkIHdpdGggdGhlIEBjYWNoZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBmb3Jj
ZSBhbGwgcGVuZGluZyB3cml0ZXMgaW4gdGhlIEBjYWNoZSB0byBiZQorICogY29tbWl0dGVkIHRv
IGRpc2suIEZvciBkb2luZyBzbyBpdCB3aWxsIGl0ZXJhdGUgdGhlICNHTWFpbkNvbnRleHQKKyAq
IGFzc29jaWF0ZWQgd2l0aCB0aGUgQHNlc3Npb24gKHdoaWNoIGNhbiBiZSB0aGUgZGVmYXVsdCBv
bmUpIGFzIGxvbmcKKyAqIGFzIG5lZWRlZC4KKyAqKi8KK3ZvaWQKK3dlYmtpdF9zb3VwX2NhY2hl
X2ZsdXNoIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKQoreworCUdNYWluQ29udGV4dCAqYXN5bmNf
Y29udGV4dDsKKwlTb3VwU2Vzc2lvbiAqc2Vzc2lvbjsKKwlndWludCB0aW1lb3V0X2lkOworCWdi
b29sZWFuIGZvcmNlZCA9IEZBTFNFOworCisJZ19yZXR1cm5faWZfZmFpbCAoV0VCS0lUX0lTX1NP
VVBfQ0FDSEUgKGNhY2hlKSk7CisKKwlzZXNzaW9uID0gY2FjaGUtPnByaXYtPnNlc3Npb247CisJ
Z19yZXR1cm5faWZfZmFpbCAoU09VUF9JU19TRVNTSU9OIChzZXNzaW9uKSk7CisJYXN5bmNfY29u
dGV4dCA9IHNvdXBfc2Vzc2lvbl9nZXRfYXN5bmNfY29udGV4dCAoc2Vzc2lvbik7CisKKwkvKiBX
ZSBnaXZlIGNhY2hlIDEwIHNlY3MgdG8gZmluaXNoICovCisJdGltZW91dF9pZCA9IGdfdGltZW91
dF9hZGQgKDEwMDAwLCBmb3JjZV9mbHVzaF90aW1lb3V0LCAmZm9yY2VkKTsKKworCXdoaWxlICgh
Zm9yY2VkICYmIGNhY2hlLT5wcml2LT5uX3BlbmRpbmcgPiAwKQorCQlnX21haW5fY29udGV4dF9p
dGVyYXRpb24gKGFzeW5jX2NvbnRleHQsIEZBTFNFKTsKKworCWlmICghZm9yY2VkKQorCQlnX3Nv
dXJjZV9yZW1vdmUgKHRpbWVvdXRfaWQpOworCWVsc2UKKwkJZ193YXJuaW5nICgiQ2FjaGUgZmx1
c2ggZmluaXNoZWQgZGVzcGl0ZSAlZCBwZW5kaW5nIHJlcXVlc3RzIiwgY2FjaGUtPnByaXYtPm5f
cGVuZGluZyk7Cit9CisKK3N0YXRpYyB2b2lkCitjbGVhcl9jYWNoZV9pdGVtIChncG9pbnRlciBr
ZXksCisJCSAgZ3BvaW50ZXIgdmFsdWUsCisJCSAgV2ViS2l0U291cENhY2hlICpjYWNoZSkKK3sK
KwlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkgPSBnX2hhc2hfdGFibGVfbG9va3VwIChjYWNo
ZS0+cHJpdi0+Y2FjaGUsIChjb25zdCBnY2hhciAqKWtleSk7CisJaWYgKHdlYmtpdF9zb3VwX2Nh
Y2hlX2VudHJ5X3JlbW92ZSAoY2FjaGUsIGVudHJ5KSkKKwkJd2Via2l0X3NvdXBfY2FjaGVfZW50
cnlfZnJlZSAoZW50cnksIFRSVUUpOworfQorCisvKioKKyAqIHdlYmtpdF9zb3VwX2NhY2hlX2Ns
ZWFyOgorICogQGNhY2hlOiBhICNXZWJLaXRTb3VwQ2FjaGUKKyAqCisgKiBXaWxsIHJlbW92ZSBh
bGwgZW50cmllcyBpbiB0aGUgQGNhY2hlIHBsdXMgYWxsIHRoZSBjYWNoZSBmaWxlcworICogYXNz
b2NpYXRlZCB3aXRoIHRoZW0uCisgKiovCit2b2lkCit3ZWJraXRfc291cF9jYWNoZV9jbGVhciAo
V2ViS2l0U291cENhY2hlICpjYWNoZSkKK3sKKwlHSGFzaFRhYmxlICpoYXNoOworCisJZ19yZXR1
cm5faWZfZmFpbCAoV0VCS0lUX0lTX1NPVVBfQ0FDSEUgKGNhY2hlKSk7CisKKwloYXNoID0gY2Fj
aGUtPnByaXYtPmNhY2hlOworCWdfcmV0dXJuX2lmX2ZhaWwgKGhhc2gpOworCisJZ19oYXNoX3Rh
YmxlX2ZvcmVhY2ggKGhhc2gsIChHSEZ1bmMpY2xlYXJfY2FjaGVfaXRlbSwgY2FjaGUpOworfQor
CitTb3VwTWVzc2FnZSAqCit3ZWJraXRfc291cF9jYWNoZV9nZW5lcmF0ZV9jb25kaXRpb25hbF9y
ZXF1ZXN0IChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLCBTb3VwTWVzc2FnZSAqb3JpZ2luYWwpCit7
CisJU291cE1lc3NhZ2UgKm1zZzsKKwlTb3VwVVJJICp1cmk7CisJV2ViS2l0U291cENhY2hlRW50
cnkgKmVudHJ5OworCWNoYXIgKmtleTsKKwljb25zdCBjaGFyICp2YWx1ZTsKKworCWdfcmV0dXJu
X3ZhbF9pZl9mYWlsIChXRUJLSVRfSVNfU09VUF9DQUNIRSAoY2FjaGUpLCBOVUxMKTsKKwlnX3Jl
dHVybl92YWxfaWZfZmFpbCAoU09VUF9JU19NRVNTQUdFIChvcmlnaW5hbCksIE5VTEwpOworCisJ
LyogRmlyc3QgY29weSB0aGUgZGF0YSB3ZSBuZWVkIGZyb20gdGhlIG9yaWdpbmFsIG1lc3NhZ2Ug
Ki8KKwl1cmkgPSBzb3VwX21lc3NhZ2VfZ2V0X3VyaSAob3JpZ2luYWwpOworCW1zZyA9IHNvdXBf
bWVzc2FnZV9uZXdfZnJvbV91cmkgKG9yaWdpbmFsLT5tZXRob2QsIHVyaSk7CisKKwlzb3VwX21l
c3NhZ2VfaGVhZGVyc19mb3JlYWNoIChvcmlnaW5hbC0+cmVxdWVzdF9oZWFkZXJzLAorCQkJCSAg
ICAgIChTb3VwTWVzc2FnZUhlYWRlcnNGb3JlYWNoRnVuYyljb3B5X2hlYWRlcnMsCisJCQkJICAg
ICAgbXNnLT5yZXF1ZXN0X2hlYWRlcnMpOworCisJLyogTm93IGFkZCB0aGUgdmFsaWRhdG9yIGVu
dHJpZXMgaW4gdGhlIGhlYWRlciBmcm9tIHRoZSBjYWNoZWQKKwkgICBkYXRhICovCisJa2V5ID0g
c291cF9tZXNzYWdlX2dldF9jYWNoZV9rZXkgKG9yaWdpbmFsKTsKKwllbnRyeSA9IGdfaGFzaF90
YWJsZV9sb29rdXAgKGNhY2hlLT5wcml2LT5jYWNoZSwga2V5KTsKKwlnX2ZyZWUgKGtleSk7CisK
KwlnX3JldHVybl92YWxfaWZfZmFpbCAoZW50cnksIE5VTEwpOworCisJZW50cnktPmJlaW5nX3Zh
bGlkYXRlZCA9IFRSVUU7CisKKwl2YWx1ZSA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldCAoZW50
cnktPmhlYWRlcnMsICJMYXN0LU1vZGlmaWVkIik7CisJaWYgKHZhbHVlKQorCQlzb3VwX21lc3Nh
Z2VfaGVhZGVyc19hcHBlbmQgKG1zZy0+cmVxdWVzdF9oZWFkZXJzLAorCQkJCQkgICAgICJJZi1N
b2RpZmllZC1TaW5jZSIsCisJCQkJCSAgICAgdmFsdWUpOworCXZhbHVlID0gc291cF9tZXNzYWdl
X2hlYWRlcnNfZ2V0IChlbnRyeS0+aGVhZGVycywgIkVUYWciKTsKKwlpZiAodmFsdWUpCisJCXNv
dXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZCAobXNnLT5yZXF1ZXN0X2hlYWRlcnMsCisJCQkJCSAg
ICAgIklmLU5vbmUtTWF0Y2giLAorCQkJCQkgICAgIHZhbHVlKTsKKwlyZXR1cm4gbXNnOworfQor
CisjZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX0ZJTEUgInNvdXAuY2FjaGUiCisKKyNkZWZpbmUg
V0VCS0lUX1NPVVBfQ0FDSEVfSEVBREVSU19GT1JNQVQgIntzc30iCisjZGVmaW5lIFdFQktJVF9T
T1VQX0NBQ0hFX1BIRUFERVJTX0ZPUk1BVCAiKHNzYnV1dXV1YSIgV0VCS0lUX1NPVVBfQ0FDSEVf
SEVBREVSU19GT1JNQVQgIikiCisjZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX0VOVFJJRVNfRk9S
TUFUICJhIiBXRUJLSVRfU09VUF9DQUNIRV9QSEVBREVSU19GT1JNQVQKKworLyogQmFzaWNhbGx5
IHRoZSBzYW1lIGZvcm1hdCB0aGFuIGFib3ZlIGV4Y2VwdCB0aGF0IHNvbWUgc3RyaW5ncyBhcmUK
KyAgIHByZXBlbmRlZCB3aXRoICYuIFRoaXMgd2F5IHRoZSBHVmFyaWFudCByZXR1cm5zIGEgcG9p
bnRlciB0byB0aGUKKyAgIGRhdGEgaW5zdGVhZCBvZiBkdXBsaWNhdGluZyB0aGUgc3RyaW5nICov
CisjZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX0RFQ09ERV9IRUFERVJTX0ZPUk1BVCAieyZzJnN9
IgorCitzdGF0aWMgdm9pZAorcGFja19lbnRyeSAoZ3BvaW50ZXIgZGF0YSwKKwkgICAgZ3BvaW50
ZXIgdXNlcl9kYXRhKQoreworCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSA9IChXZWJLaXRT
b3VwQ2FjaGVFbnRyeSAqKSBkYXRhOworCVNvdXBNZXNzYWdlSGVhZGVyc0l0ZXIgaXRlcjsKKwlj
b25zdCBnY2hhciAqaGVhZGVyX2tleSwgKmhlYWRlcl92YWx1ZTsKKwlHVmFyaWFudEJ1aWxkZXIg
KmhlYWRlcnNfYnVpbGRlcjsKKwlHVmFyaWFudEJ1aWxkZXIgKmVudHJpZXNfYnVpbGRlciA9IChH
VmFyaWFudEJ1aWxkZXIgKil1c2VyX2RhdGE7CisKKwkvKiBEbyBub3Qgc3RvcmUgbm9uLWNvbnNv
bGlkYXRlZCBlbnRyaWVzICovCisJaWYgKGVudHJ5LT5kaXJ0eSB8fCBlbnRyeS0+d3JpdGluZyB8
fCAhZW50cnktPmtleSkKKwkJcmV0dXJuOworCisJLyogUGFjayBoZWFkZXJzICovCisJaGVhZGVy
c19idWlsZGVyID0gZ192YXJpYW50X2J1aWxkZXJfbmV3IChHX1ZBUklBTlRfVFlQRV9BUlJBWSk7
CisJc291cF9tZXNzYWdlX2hlYWRlcnNfaXRlcl9pbml0ICgmaXRlciwgZW50cnktPmhlYWRlcnMp
OworCXdoaWxlIChzb3VwX21lc3NhZ2VfaGVhZGVyc19pdGVyX25leHQgKCZpdGVyLCAmaGVhZGVy
X2tleSwgJmhlYWRlcl92YWx1ZSkpIHsKKwkJaWYgKGdfdXRmOF92YWxpZGF0ZSAoaGVhZGVyX3Zh
bHVlLCAtMSwgTlVMTCkpCisJCQlnX3ZhcmlhbnRfYnVpbGRlcl9hZGQgKGhlYWRlcnNfYnVpbGRl
ciwgV0VCS0lUX1NPVVBfQ0FDSEVfSEVBREVSU19GT1JNQVQsCisJCQkJCSAgICAgICBoZWFkZXJf
a2V5LCBoZWFkZXJfdmFsdWUpOworCX0KKworCS8qIEVudHJ5IGRhdGEgKi8KKwlnX3ZhcmlhbnRf
YnVpbGRlcl9hZGQgKGVudHJpZXNfYnVpbGRlciwgV0VCS0lUX1NPVVBfQ0FDSEVfUEhFQURFUlNf
Rk9STUFULAorCQkJICAgICAgIGVudHJ5LT5rZXksIGVudHJ5LT5maWxlbmFtZSwgZW50cnktPm11
c3RfcmV2YWxpZGF0ZSwKKwkJCSAgICAgICBlbnRyeS0+ZnJlc2huZXNzX2xpZmV0aW1lLCBlbnRy
eS0+Y29ycmVjdGVkX2luaXRpYWxfYWdlLAorCQkJICAgICAgIGVudHJ5LT5yZXNwb25zZV90aW1l
LCBlbnRyeS0+aGl0cywgZW50cnktPmxlbmd0aCwgaGVhZGVyc19idWlsZGVyKTsKKworCWdfdmFy
aWFudF9idWlsZGVyX3VucmVmIChoZWFkZXJzX2J1aWxkZXIpOworfQorCit2b2lkCit3ZWJraXRf
c291cF9jYWNoZV9kdW1wIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKQoreworCVdlYktpdFNvdXBD
YWNoZVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9DQUNIRV9HRVRfUFJJVkFURSAoY2FjaGUp
OworCWdjaGFyICpmaWxlbmFtZTsKKwlHVmFyaWFudEJ1aWxkZXIgKmVudHJpZXNfYnVpbGRlcjsK
KwlHVmFyaWFudCAqY2FjaGVfdmFyaWFudDsKKworCWlmICghZ19saXN0X2xlbmd0aCAoY2FjaGUt
PnByaXYtPmxydV9zdGFydCkpCisJCXJldHVybjsKKworCS8qIENyZWF0ZSB0aGUgYnVpbGRlciBh
bmQgaXRlcmF0ZSBvdmVyIGFsbCBlbnRyaWVzICovCisJZW50cmllc19idWlsZGVyID0gZ192YXJp
YW50X2J1aWxkZXJfbmV3IChHX1ZBUklBTlRfVFlQRV9BUlJBWSk7CisJZ19saXN0X2ZvcmVhY2gg
KGNhY2hlLT5wcml2LT5scnVfc3RhcnQsIHBhY2tfZW50cnksIGVudHJpZXNfYnVpbGRlcik7CisK
KwkvKiBTZXJpYWxpemUgYW5kIGR1bXAgKi8KKwljYWNoZV92YXJpYW50ID0gZ192YXJpYW50X25l
dyAoV0VCS0lUX1NPVVBfQ0FDSEVfRU5UUklFU19GT1JNQVQsIGVudHJpZXNfYnVpbGRlcik7CisJ
Z192YXJpYW50X2J1aWxkZXJfdW5yZWYgKGVudHJpZXNfYnVpbGRlcik7CisKKwlmaWxlbmFtZSA9
IGdfYnVpbGRfZmlsZW5hbWUgKHByaXYtPmNhY2hlX2RpciwgV0VCS0lUX1NPVVBfQ0FDSEVfRklM
RSwgTlVMTCk7CisJZ19maWxlX3NldF9jb250ZW50cyAoZmlsZW5hbWUsIChjb25zdCBnY2hhciAq
KWdfdmFyaWFudF9nZXRfZGF0YSAoY2FjaGVfdmFyaWFudCksCisJCQkgICAgIGdfdmFyaWFudF9n
ZXRfc2l6ZSAoY2FjaGVfdmFyaWFudCksIE5VTEwpOworCWdfZnJlZSAoZmlsZW5hbWUpOworCWdf
dmFyaWFudF91bnJlZiAoY2FjaGVfdmFyaWFudCk7Cit9CisKK3ZvaWQKK3dlYmtpdF9zb3VwX2Nh
Y2hlX2xvYWQgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUpCit7CisJZ2NoYXIgKmZpbGVuYW1lID0g
TlVMTCwgKmNvbnRlbnRzID0gTlVMTDsKKwlHVmFyaWFudCAqY2FjaGVfdmFyaWFudDsKKwlHVmFy
aWFudEl0ZXIgKmVudHJpZXNfaXRlciwgKmhlYWRlcnNfaXRlcjsKKwlHVmFyaWFudFR5cGUgKnZh
cmlhbnRfZm9ybWF0OworCWdzaXplIGxlbmd0aDsKKwlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50
cnk7CisJV2ViS2l0U291cENhY2hlUHJpdmF0ZSAqcHJpdiA9IGNhY2hlLT5wcml2OworCisJZmls
ZW5hbWUgPSBnX2J1aWxkX2ZpbGVuYW1lIChwcml2LT5jYWNoZV9kaXIsIFdFQktJVF9TT1VQX0NB
Q0hFX0ZJTEUsIE5VTEwpOworCWlmICghZ19maWxlX2dldF9jb250ZW50cyAoZmlsZW5hbWUsICZj
b250ZW50cywgJmxlbmd0aCwgTlVMTCkpIHsKKwkJZ19mcmVlIChmaWxlbmFtZSk7CisJCXJldHVy
bjsKKwl9CisJZ19mcmVlIChmaWxlbmFtZSk7CisKKwl2YXJpYW50X2Zvcm1hdCA9IGdfdmFyaWFu
dF90eXBlX25ldyAoV0VCS0lUX1NPVVBfQ0FDSEVfRU5UUklFU19GT1JNQVQpOworCWNhY2hlX3Zh
cmlhbnQgPSBnX3ZhcmlhbnRfbmV3X2Zyb21fZGF0YSAodmFyaWFudF9mb3JtYXQsIChjb25zdCBn
Y2hhciAqKWNvbnRlbnRzLCBsZW5ndGgsIEZBTFNFLCBOVUxMLCBOVUxMKTsKKwlnX3ZhcmlhbnRf
dHlwZV9mcmVlICh2YXJpYW50X2Zvcm1hdCk7CisKKwlnX3ZhcmlhbnRfZ2V0IChjYWNoZV92YXJp
YW50LCBXRUJLSVRfU09VUF9DQUNIRV9FTlRSSUVTX0ZPUk1BVCwgJmVudHJpZXNfaXRlcik7CisJ
ZW50cnkgPSBnX3NsaWNlX25ldzAgKFdlYktpdFNvdXBDYWNoZUVudHJ5KTsKKworCXdoaWxlIChn
X3ZhcmlhbnRfaXRlcl9sb29wIChlbnRyaWVzX2l0ZXIsIFdFQktJVF9TT1VQX0NBQ0hFX1BIRUFE
RVJTX0ZPUk1BVCwKKwkJCQkgICAgJmVudHJ5LT5rZXksICZlbnRyeS0+ZmlsZW5hbWUsICZlbnRy
eS0+bXVzdF9yZXZhbGlkYXRlLAorCQkJCSAgICAmZW50cnktPmZyZXNobmVzc19saWZldGltZSwg
JmVudHJ5LT5jb3JyZWN0ZWRfaW5pdGlhbF9hZ2UsCisJCQkJICAgICZlbnRyeS0+cmVzcG9uc2Vf
dGltZSwgJmVudHJ5LT5oaXRzLCAmZW50cnktPmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZoZWFkZXJzX2l0ZXIpKSB7CisJCWNvbnN0IGdjaGFyICpoZWFkZXJf
a2V5LCAqaGVhZGVyX3ZhbHVlOworCisJCS8qIFNvdXBNZXNzYWdlIEhlYWRlcnMgKi8KKwkJZW50
cnktPmhlYWRlcnMgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19uZXcgKFNPVVBfTUVTU0FHRV9IRUFE
RVJTX1JFU1BPTlNFKTsKKwkJd2hpbGUgKGdfdmFyaWFudF9pdGVyX2xvb3AgKGhlYWRlcnNfaXRl
ciwgV0VCS0lUX1NPVVBfQ0FDSEVfREVDT0RFX0hFQURFUlNfRk9STUFULCAmaGVhZGVyX2tleSwg
JmhlYWRlcl92YWx1ZSkpCisJCQlzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQgKGVudHJ5LT5o
ZWFkZXJzLCBoZWFkZXJfa2V5LCBoZWFkZXJfdmFsdWUpOworCisJCS8qIEluc2VydCBpbiBjYWNo
ZSAqLworCQlpZiAoIXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2luc2VydF9ieV9rZXkgKGNhY2hl
LCAoY29uc3QgZ2NoYXIgKillbnRyeS0+a2V5LCBlbnRyeSwgRkFMU0UpKQorCQkJd2Via2l0X3Nv
dXBfY2FjaGVfZW50cnlfZnJlZSAoZW50cnksIFRSVUUpOworCisJCS8qIE5ldyBlbnRyeSBmb3Ig
dGhlIG5leHQgaXRlcmF0aW9uLiBUaGlzIGNyZWF0ZXMgYW4KKwkJICAgZXh0cmEgb2JqZWN0IHRo
ZSBsYXN0IGl0ZXJhdGlvbiBidXQgaXQncyB3b3J0aCBpdAorCQkgICBhcyB3ZSBzYXZlIHNldmVy
YWwgaWYncyAqLworCQllbnRyeSA9IGdfc2xpY2VfbmV3MCAoV2ViS2l0U291cENhY2hlRW50cnkp
OworCX0KKwkvKiBSZW1vdmUgbGFzdCBjcmVhdGVkIGVudHJ5ICovCisJZ19zbGljZV9mcmVlIChX
ZWJLaXRTb3VwQ2FjaGVFbnRyeSwgZW50cnkpOworCisJLyogU29ydCBMUlUgKHNob3VsZG4ndCBi
ZSBuZWVkZWQpLiBGaXJzdCByZXZlcnNlIGFzIGVsZW1lbnRzCisJICogYXJlIGFsd2F5cyBwcmVw
ZW5kZWQgd2hlbiBpbnNlcnRpbmcKKwkgKi8KKwljYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0ID0gZ19s
aXN0X3JldmVyc2UgKGNhY2hlLT5wcml2LT5scnVfc3RhcnQpOworCWNhY2hlLT5wcml2LT5scnVf
c3RhcnQgPSBnX2xpc3Rfc29ydCAoY2FjaGUtPnByaXYtPmxydV9zdGFydCwgbHJ1X2NvbXBhcmVf
ZnVuYyk7CisKKwkvKiBmcmVlcyAqLworCWdfdmFyaWFudF9pdGVyX2ZyZWUgKGVudHJpZXNfaXRl
cik7CisJZ192YXJpYW50X3VucmVmIChjYWNoZV92YXJpYW50KTsKK30KKwordm9pZAord2Via2l0
X3NvdXBfY2FjaGVfc2V0X21heF9zaXplIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLAorCQkJCWd1
aW50IG1heF9zaXplKQoreworCWNhY2hlLT5wcml2LT5tYXhfc2l6ZSA9IG1heF9zaXplOworCWNh
Y2hlLT5wcml2LT5tYXhfZW50cnlfZGF0YV9zaXplID0gY2FjaGUtPnByaXYtPm1heF9zaXplIC8g
TUFYX0VOVFJZX0RBVEFfUEVSQ0VOVEFHRTsKK30KKworZ3VpbnQKK3dlYmtpdF9zb3VwX2NhY2hl
X2dldF9tYXhfc2l6ZSAoV2ViS2l0U291cENhY2hlICpjYWNoZSkKK3sKKwlyZXR1cm4gY2FjaGUt
PnByaXYtPm1heF9zaXplOworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYjgxN2QzZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLmgKQEAgLTAsMCArMSw5NSBAQAor
LyoKKyAqIHNvdXAtY2FjaGUuaDoKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgSWdh
bGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZm5kZWYgV0VCS0lUX1NPVVBfQ0FDSEVfSAorI2RlZmluZSBXRUJLSVRfU09V
UF9DQUNIRV9IIDEKKworI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkZWZpbmVzLmg+CisKKyNpbmNs
dWRlIDxsaWJzb3VwL3NvdXAtdHlwZXMuaD4KKyNpbmNsdWRlIDxnaW8vZ2lvLmg+CisKK0dfQkVH
SU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFICAgICAgICAgICAgKHdl
YmtpdF9zb3VwX2NhY2hlX2dldF90eXBlICgpKQorI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRShv
YmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgV0VCS0lU
X1RZUEVfU09VUF9DQUNIRSwgV2ViS2l0U291cENhY2hlKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBf
Q0FDSEVfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwg
V0VCS0lUX1RZUEVfU09VUF9DQUNIRSwgV2ViS2l0U291cENhY2hlQ2xhc3MpKQorI2RlZmluZSBX
RUJLSVRfSVNfU09VUF9DQUNIRShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9U
WVBFICgob2JqKSwgV0VCS0lUX1RZUEVfU09VUF9DQUNIRSkpCisjZGVmaW5lIFdFQktJVF9JU19T
T1VQX0NBQ0hFX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChvYmopLCBX
RUJLSVRfVFlQRV9TT1VQX0NBQ0hFKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FDSEVfR0VUX0NM
QVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgV0VCS0lUX1RZUEVf
U09VUF9DQUNIRSwgV2ViS2l0U291cENhY2hlQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0U291cENhY2hlIFdlYktpdFNvdXBDYWNoZTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRTb3Vw
Q2FjaGVQcml2YXRlIFdlYktpdFNvdXBDYWNoZVByaXZhdGU7CisKK3R5cGVkZWYgZW51bSB7CisJ
V0VCS0lUX1NPVVBfQ0FDSEVfQ0FDSEVBQkxFID0gKDEgPDwgMCksCisJV0VCS0lUX1NPVVBfQ0FD
SEVfVU5DQUNIRUFCTEUgPSAoMSA8PCAxKSwKKwlXRUJLSVRfU09VUF9DQUNIRV9JTlZBTElEQVRF
UyA9ICgxIDw8IDIpLAorCVdFQktJVF9TT1VQX0NBQ0hFX1ZBTElEQVRFUyA9ICgxIDw8IDMpCit9
IFdlYktpdFNvdXBDYWNoZWFiaWxpdHk7CisKK3R5cGVkZWYgZW51bSB7CisJV0VCS0lUX1NPVVBf
Q0FDSEVfUkVTUE9OU0VfRlJFU0gsCisJV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfTkVFRFNf
VkFMSURBVElPTiwKKwlXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9TVEFMRQorfSBXZWJLaXRT
b3VwQ2FjaGVSZXNwb25zZTsKKwordHlwZWRlZiBlbnVtIHsKKwlXRUJLSVRfU09VUF9DQUNIRV9T
SU5HTEVfVVNFUiwKKwlXRUJLSVRfU09VUF9DQUNIRV9TSEFSRUQKK30gV2ViS2l0U291cENhY2hl
VHlwZTsKKworc3RydWN0IF9XZWJLaXRTb3VwQ2FjaGUgeworCUdPYmplY3QgcGFyZW50X2luc3Rh
bmNlOworCisJV2ViS2l0U291cENhY2hlUHJpdmF0ZSAqcHJpdjsKK307CisKK3R5cGVkZWYgc3Ry
dWN0IHsKKwlHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworCisJLyogbWV0aG9kcyAqLworCVdl
YktpdFNvdXBDYWNoZWFiaWxpdHkgKCpnZXRfY2FjaGVhYmlsaXR5KShXZWJLaXRTb3VwQ2FjaGUg
KmNhY2hlLCBTb3VwTWVzc2FnZSAqbXNnKTsKKworCS8qIFBhZGRpbmcgZm9yIGZ1dHVyZSBleHBh
bnNpb24gKi8KKwl2b2lkICgqX2xpYnNvdXBfcmVzZXJ2ZWQxKSh2b2lkKTsKKwl2b2lkICgqX2xp
YnNvdXBfcmVzZXJ2ZWQyKSh2b2lkKTsKKwl2b2lkICgqX2xpYnNvdXBfcmVzZXJ2ZWQzKSh2b2lk
KTsKK30gV2ViS2l0U291cENhY2hlQ2xhc3M7CisKK1dFQktJVF9BUEkgR1R5cGUgICAgICAgICAg
ICAgd2Via2l0X3NvdXBfY2FjaGVfZ2V0X3R5cGUgKHZvaWQpOworV0VCS0lUX0FQSSBXZWJLaXRT
b3VwQ2FjaGUgICp3ZWJraXRfc291cF9jYWNoZV9uZXcgKGNvbnN0IGNoYXIgICpjYWNoZV9kaXIs
CisJCQkJCQkgICAgV2ViS2l0U291cENhY2hlVHlwZSBjYWNoZV90eXBlKTsKK1dFQktJVF9BUEkg
dm9pZCAgICAgICAgICAgICAgd2Via2l0X3NvdXBfY2FjaGVfZmx1c2ggKFdlYktpdFNvdXBDYWNo
ZSAgICpjYWNoZSk7CitXRUJLSVRfQVBJIHZvaWQgICAgICAgICAgICAgIHdlYmtpdF9zb3VwX2Nh
Y2hlX2NsZWFyIChXZWJLaXRTb3VwQ2FjaGUgICAqY2FjaGUpOworCitXRUJLSVRfQVBJIHZvaWQg
ICAgICAgICAgICAgIHdlYmtpdF9zb3VwX2NhY2hlX2R1bXAgKFdlYktpdFNvdXBDYWNoZSAqY2Fj
aGUpOworV0VCS0lUX0FQSSB2b2lkICAgICAgICAgICAgICB3ZWJraXRfc291cF9jYWNoZV9sb2Fk
IChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKTsKKworV0VCS0lUX0FQSSB2b2lkICAgICAgICAgICAg
ICB3ZWJraXRfc291cF9jYWNoZV9zZXRfbWF4X3NpemUgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUs
CisJCQkJCQkJICAgICBndWludCBtYXhfc2l6ZSk7CitXRUJLSVRfQVBJIGd1aW50ICAgICAgICAg
ICAgIHdlYmtpdF9zb3VwX2NhY2hlX2dldF9tYXhfc2l6ZSAoV2ViS2l0U291cENhY2hlICpjYWNo
ZSk7CisKK0dfRU5EX0RFQ0xTCisKKworI2VuZGlmIC8qIFdFQktJVF9TT1VQX0NBQ0hFX0ggKi8K
KwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nIGIvV2ViS2l0VG9vbHMvQ2hhbmdl
TG9nCmluZGV4IDQ4NTAzZTQuLjJlMmE2YzcgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0NoYW5n
ZUxvZworKysgYi9XZWJLaXRUb29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMC0w
OS0wNiAgU2VyZ2lvIFZpbGxhciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBBZGQgSFRUUCBj
YWNoaW5nIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ0MjYxCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogYWRkZWQgcGF0aHMgZm9y
IHRoZSBuZXcgc291cCBIVFRQIGNhY2hlIGNvZGUKKwogMjAxMC0wOS0xOSAgU2FtIFdlaW5pZyAg
PHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4K
ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0dOVW1ha2VmaWxlLmFtIGIvV2ViS2l0VG9vbHMvR05V
bWFrZWZpbGUuYW0KaW5kZXggMjkyY2E3ZS4uMWUzMWZhOCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9v
bHMvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViS2l0VG9vbHMvR05VbWFrZWZpbGUuYW0KQEAgLTYs
NiArNiw3IEBAIG5vaW5zdF9QUk9HUkFNUyArPSBcCiAjIEd0a0xhdW5jaGVyCiBQcm9ncmFtc19H
dGtMYXVuY2hlcl9DUFBGTEFHUyA9IFwKIAktSSQoc3JjZGlyKS9XZWJLaXQvZ3RrIFwKKwktSSQo
c3JjZGlyKS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS8gXAogCS1JJCh0b3Bf
YnVpbGRkaXIpL1dlYktpdC9ndGsgXAogCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2Vz
IFwKIAkkKGdsb2JhbF9jcHBmbGFncykgXApAQCAtMzcsNiArMzgsNyBAQCBkdW1wcmVuZGVydHJl
ZV9jcHBmbGFncyA6PSBcCiAJLUkkKHNyY2RpcikvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
Z3RrIFwKIAktSSQoc3JjZGlyKS9XZWJLaXQvZ3RrIFwKIAktSSQoc3JjZGlyKS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ayBcCisJLUkkKHNyY2RpcikvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
Y2FjaGUvIFwKIAktSSQodG9wX2J1aWxkZGlyKS9XZWJLaXQvZ3RrIFwKIAktSSQodG9wX2J1aWxk
ZGlyKS9EZXJpdmVkU291cmNlcyBcCiAJJChnbG9iYWxfY3BwZmxhZ3MpIFwKZGlmZiAtLWdpdCBh
L2F1dG90b29scy93ZWJraXQubTQgYi9hdXRvdG9vbHMvd2Via2l0Lm00CmluZGV4IDM3OWZhOGYu
LjZiNDRmMzAgMTAwNjQ0Ci0tLSBhL2F1dG90b29scy93ZWJraXQubTQKKysrIGIvYXV0b3Rvb2xz
L3dlYmtpdC5tNApAQCAtMTA4LDcgKzEwOCw3IEBAIEFDX0RFRlVOX09OQ0UoW19XRUJLSVRfQ0hF
Q0tfR0xJQl0sCiBbZG5sCiBkbmwgY2hlY2sgZm9yIGdsaWIKICMgVmVyc2lvbiByZXF1aXJlbWVu
dHMKLUdMSUJfUkVRVUlSRURfVkVSU0lPTj0yLjIxLjMKK0dMSUJfUkVRVUlSRURfVkVSU0lPTj0y
LjI0CiBHT0JKRUNUX1JFUVVJUkVEX1ZFUlNJT049Mi4wCiBHVEhSRUFEX1JFUVVJUkVEX1ZFUlNJ
T049Mi4wCiAKLS0gCjEuNy4xCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68350</attachid>
            <date>2010-09-22 02:07:40 -0700</date>
            <delta_ts>2010-09-24 02:47:35 -0700</delta_ts>
            <desc>WebKitGtk+ to use the new API from the imported SoupURILoader code</desc>
            <filename>0002-WebKitGtk-to-use-the-new-API-from-the-imported-SoupU.patch</filename>
            <type>text/plain</type>
            <size>31413</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">RnJvbSAwNTU0MmYzMzcyMzA0NjRjNzcwOTc4OTExYzU4ODdmNDNkZTdlN2YxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTZXJnaW8gVmlsbGFyIFNlbmluIDxzdmlsbGFyQGlnYWxpYS5j
b20+CkRhdGU6IFdlZCwgMjIgU2VwIDIwMTAgMTA6MTg6MDYgKzAyMDAKU3ViamVjdDogW1BBVENI
IDIvMl0gV2ViS2l0R3RrKyB0byB1c2UgdGhlIG5ldyBBUEkgZnJvbSB0aGUgaW1wb3J0ZWQgU291
cFVSSUxvYWRlciBjb2RlCgotLS0KIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhh
bmRsZUludGVybmFsLmggIHwgICAxNyArLQogLi4uL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNv
dXJjZUhhbmRsZVNvdXAuY3BwICAgfCAgNDczICsrKysrKysrKy0tLS0tLS0tLS0tCiBXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3QuaCAgICB8ICAgIDEgKwogLi4u
L3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcCAgfCAgIDIzICsK
IDQgZmlsZXMgY2hhbmdlZCwgMjYwIGluc2VydGlvbnMoKyksIDI1NCBkZWxldGlvbnMoLSkKCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5h
bC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaApp
bmRleCA3YjZkYjkwLi5hMzI1MjJhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmgKQEAgLTQ2LDYgKzQ2LDkgQEAKICNlbmRpZgogCiAj
aWYgVVNFKFNPVVApCisjaW5jbHVkZSAic291cC1yZXF1ZXN0LmgiCisjaW5jbHVkZSAic291cC1y
ZXF1ZXN0ZXIuaCIKKyNpbmNsdWRlIDxHUmVmUHRyLmg+CiAjaW5jbHVkZSA8bGlic291cC9zb3Vw
Lmg+CiBjbGFzcyBGcmFtZTsKICNlbmRpZgpAQCAtMTEzLDEzICsxMTYsMTQgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogI2lmIFVTRShTT1VQKQogICAgICAgICAgICAgLCBtX21zZygwKQogICAgICAg
ICAgICAgLCBtX2NhbmNlbGxlZChmYWxzZSkKLSAgICAgICAgICAgICwgbV9nZmlsZSgwKQorICAg
ICAgICAgICAgLCBtX3NvdXBSZXF1ZXN0KDApCisgICAgICAgICAgICAsIG1fcmVxdWVzdGVyKDAp
CiAgICAgICAgICAgICAsIG1faW5wdXRTdHJlYW0oMCkKICAgICAgICAgICAgICwgbV9jYW5jZWxs
YWJsZSgwKQogICAgICAgICAgICAgLCBtX2J1ZmZlcigwKQotICAgICAgICAgICAgLCBtX2J1ZmZl
clNpemUoMCkKICAgICAgICAgICAgICwgbV90b3RhbCgwKQogICAgICAgICAgICAgLCBtX2lkbGVI
YW5kbGVyKDApCisgICAgICAgICAgICAsIG1fZ290Q2h1bmtIYW5kbGVyKDApCiAjZW5kaWYKICNp
ZiBQTEFURk9STShRVCkKICAgICAgICAgICAgICwgbV9qb2IoMCkKQEAgLTEzNiw2ICsxNDAsOSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBtX3VzZXIgPSB1cmwudXNlcigpOwog
ICAgICAgICAgICAgbV9wYXNzID0gdXJsLnBhc3MoKTsKICAgICAgICAgICAgIG1fZmlyc3RSZXF1
ZXN0LnJlbW92ZUNyZWRlbnRpYWxzKCk7CisjaWYgVVNFKFNPVVApCisgICAgICAgICAgICBtX3Jl
cXVlc3RlciA9IHNvdXBfcmVxdWVzdGVyX25ldygpOworI2VuZGlmCiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIH5SZXNvdXJjZUhhbmRsZUludGVybmFsKCk7CkBAIC0xOTMsMTMgKzIwMCwx
NSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFNvdXBNZXNzYWdlKiBtX21zZzsKICAg
ICAgICAgUmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOwogICAgICAgICBib29sIG1fY2FuY2Vs
bGVkOwotICAgICAgICBHRmlsZSogbV9nZmlsZTsKKyAgICAgICAgUGxhdGZvcm1SZWZQdHI8U291
cFJlcXVlc3Q+IG1fc291cFJlcXVlc3Q7CisgICAgICAgIFBsYXRmb3JtUmVmUHRyPFNvdXBSZXF1
ZXN0ZXI+IG1fcmVxdWVzdGVyOwogICAgICAgICBHSW5wdXRTdHJlYW0qIG1faW5wdXRTdHJlYW07
CiAgICAgICAgIEdDYW5jZWxsYWJsZSogbV9jYW5jZWxsYWJsZTsKICAgICAgICAgY2hhciogbV9i
dWZmZXI7Ci0gICAgICAgIGdzaXplIG1fYnVmZmVyU2l6ZSwgbV90b3RhbDsKKyAgICAgICAgZ3Np
emUgbV90b3RhbDsKICAgICAgICAgZ3VpbnQgbV9pZGxlSGFuZGxlcjsKICAgICAgICAgUmVmUHRy
PE5ldHdvcmtpbmdDb250ZXh0PiBtX2NvbnRleHQ7CisgICAgICAgIGd1bG9uZyBtX2dvdENodW5r
SGFuZGxlcjsKICNlbmRpZgogI2lmIFBMQVRGT1JNKFFUKQogICAgICAgICBRTmV0d29ya1JlcGx5
SGFuZGxlciogbV9qb2I7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
UmVzb3VyY2VIYW5kbGVTb3VwLmNwcAppbmRleCAwMDA5ZTM2Li45NWZkNjcxIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAK
QEAgLTQ1LDggKzQ1LDggQEAKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCiAj
aW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgor
I2luY2x1ZGUgInNvdXAtcmVxdWVzdC1odHRwLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgi
Ci0KICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8Z2lv
L2dpby5oPgpAQCAtNTgsNiArNTgsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNkZWZp
bmUgUkVBRF9CVUZGRVJfU0laRSA4MTkyCisKIGNsYXNzIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRl
ciA6IHB1YmxpYyBSZXNvdXJjZUhhbmRsZUNsaWVudCwgcHVibGljIE5vbmNvcHlhYmxlIHsKIHB1
YmxpYzoKICAgICBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXIoUmVzb3VyY2VFcnJvciYsIFJlc291
cmNlUmVzcG9uc2UgJiwgVmVjdG9yPGNoYXI+Jik7CkBAIC0xMjAsOCArMTIyLDEwIEBAIHZvaWQg
V2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyOjpydW4oKQogICAgICAgICBnX21haW5fbG9vcF9ydW4o
bV9tYWluTG9vcCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNsZWFudXBHaW9PcGVyYXRpb24oUmVzb3Vy
Y2VIYW5kbGUqIGhhbmRsZSwgYm9vbCBpc0Rlc3Ryb3lpbmcpOwotc3RhdGljIGJvb2wgc3RhcnRE
YXRhKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIFN0cmluZyB1cmxTdHJpbmcpOworc3RhdGljIHZv
aWQgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGJv
b2wgaXNEZXN0cm95aW5nKTsKK3N0YXRpYyB2b2lkIHNlbmRSZXF1ZXN0Q2FsbGJhY2soR09iamVj
dCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIpOworc3RhdGljIHZvaWQgcmVh
ZENhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXMsIGdwb2ludGVyKTsK
K3N0YXRpYyB2b2lkIGNsb3NlQ2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQq
IHJlcywgZ3BvaW50ZXIpOwogc3RhdGljIGJvb2wgc3RhcnRHaW8oUmVzb3VyY2VIYW5kbGUqIGhh
bmRsZSwgS1VSTCB1cmwpOwogCiBSZXNvdXJjZUhhbmRsZUludGVybmFsOjp+UmVzb3VyY2VIYW5k
bGVJbnRlcm5hbCgpCkBAIC0xMzEsNiArMTM1LDkgQEAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6
flJlc291cmNlSGFuZGxlSW50ZXJuYWwoKQogICAgICAgICBtX21zZyA9IDA7CiAgICAgfQogCisg
ICAgaWYgKG1fc291cFJlcXVlc3QpCisgICAgICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNU
KG1fc291cFJlcXVlc3QuZ2V0KCkpLCAid2Via2l0LXJlc291cmNlIiwgMCk7CisKICAgICBpZiAo
bV9pZGxlSGFuZGxlcikgewogICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9pZGxlSGFuZGxlcik7
CiAgICAgICAgIG1faWRsZUhhbmRsZXIgPSAwOwpAQCAtMTQzLDcgKzE1MCw3IEBAIFJlc291cmNl
SGFuZGxlOjp+UmVzb3VyY2VIYW5kbGUoKQogICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNj
b25uZWN0X21hdGNoZWQoZC0+bV9tc2csIEdfU0lHTkFMX01BVENIX0RBVEEsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCB0aGlzKTsKIAot
ICAgIGNsZWFudXBHaW9PcGVyYXRpb24odGhpcywgdHJ1ZSk7CisgICAgY2xlYW51cFNvdXBSZXF1
ZXN0T3BlcmF0aW9uKHRoaXMsIHRydWUpOwogfQogCiB2b2lkIFJlc291cmNlSGFuZGxlOjpwcmVw
YXJlRm9yVVJMKGNvbnN0IEtVUkwgJnVybCkKQEAgLTE4NSw5ICsxOTIsOCBAQCBzdGF0aWMgdm9p
ZCByZXN0YXJ0ZWRDYWxsYmFjayhTb3VwTWVzc2FnZSogbXNnLCBncG9pbnRlciBkYXRhKQogICAg
IGlmIChkLT5tX2NhbmNlbGxlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY2hhciogdXJpID0g
c291cF91cmlfdG9fc3RyaW5nKHNvdXBfbWVzc2FnZV9nZXRfdXJpKG1zZyksIGZhbHNlKTsKLSAg
ICBTdHJpbmcgbG9jYXRpb24gPSBTdHJpbmcodXJpKTsKLSAgICBnX2ZyZWUodXJpKTsKKyAgICBH
T3duUHRyPGNoYXI+IHVyaShzb3VwX3VyaV90b19zdHJpbmcoc291cF9tZXNzYWdlX2dldF91cmko
bXNnKSwgZmFsc2UpKTsKKyAgICBTdHJpbmcgbG9jYXRpb24gPSBTdHJpbmc6OmZyb21VVEY4KHVy
aS5nZXQoKSk7CiAgICAgS1VSTCBuZXdVUkwgPSBLVVJMKGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCku
dXJsKCksIGxvY2F0aW9uKTsKIAogICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0ID0gaGFuZGxl
LT5maXJzdFJlcXVlc3QoKTsKQEAgLTI5Myw1MCArMjk5LDcgQEAgc3RhdGljIHZvaWQgZ290Q2h1
bmtDYWxsYmFjayhTb3VwTWVzc2FnZSogbXNnLCBTb3VwQnVmZmVyKiBjaHVuaywgZ3BvaW50ZXIg
ZGF0YSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0YShoYW5k
bGUuZ2V0KCksIGNodW5rLT5kYXRhLCBjaHVuay0+bGVuZ3RoLCBmYWxzZSk7Ci19Ci0KLS8vIENh
bGxlZCBhdCB0aGUgZW5kIG9mIHRoZSBtZXNzYWdlLCB3aXRoIGFsbCB0aGUgbmVjZXNzYXJ5IGFi
b3V0IHRoZSBsYXN0IGluZm9ybWF0aW9ucy4KLS8vIERvZXNuJ3QgZ2V0IGNhbGxlZCBmb3IgcmVk
aXJlY3RzLgotc3RhdGljIHZvaWQgZmluaXNoZWRDYWxsYmFjayhTb3VwU2Vzc2lvbiAqc2Vzc2lv
biwgU291cE1lc3NhZ2UqIG1zZywgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBSZWZQdHI8UmVzb3Vy
Y2VIYW5kbGU+IGhhbmRsZSA9IGFkb3B0UmVmKHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxlKj4o
ZGF0YSkpOwotICAgIC8vIFRPRE86IG1heWJlIHdlIHNob3VsZCBydW4gdGhpcyBjb2RlIGV2ZW4g
aWYgdGhlcmUncyBubyBjbGllbnQ/Ci0gICAgaWYgKCFoYW5kbGUpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFsKCk7
Ci0KLSAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0gaGFuZGxlLT5jbGllbnQoKTsK
LSAgICBpZiAoIWNsaWVudCkKLSAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGQtPm1fY2FuY2Vs
bGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoU09VUF9TVEFUVVNfSVNfVFJBTlNQT1JU
X0VSUk9SKG1zZy0+c3RhdHVzX2NvZGUpKSB7Ci0gICAgICAgIGNoYXIqIHVyaSA9IHNvdXBfdXJp
X3RvX3N0cmluZyhzb3VwX21lc3NhZ2VfZ2V0X3VyaShtc2cpLCBmYWxzZSk7Ci0gICAgICAgIFJl
c291cmNlRXJyb3IgZXJyb3IoZ19xdWFya190b19zdHJpbmcoU09VUF9IVFRQX0VSUk9SKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtc2ctPnN0YXR1c19jb2RlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVyaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc6
OmZyb21VVEY4KG1zZy0+cmVhc29uX3BocmFzZSkpOwotICAgICAgICBnX2ZyZWUodXJpKTsKLSAg
ICAgICAgY2xpZW50LT5kaWRGYWlsKGhhbmRsZS5nZXQoKSwgZXJyb3IpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKG1zZy0+c3RhdHVzX2NvZGUgPT0gU09VUF9TVEFUVVNfVU5B
VVRIT1JJWkVEKSB7Ci0gICAgICAgIGZpbGxSZXNwb25zZUZyb21NZXNzYWdlKG1zZywgJmQtPm1f
cmVzcG9uc2UpOwotICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShoYW5kbGUuZ2V0
KCksIGQtPm1fcmVzcG9uc2UpOwotCi0gICAgICAgIC8vIFdlYkNvcmUgbWlnaHQgaGF2ZSBjYW5j
ZWxsZWQgdGhlIGpvYiBpbiB0aGUgd2hpbGUKLSAgICAgICAgaWYgKGQtPm1fY2FuY2VsbGVkKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChtc2ctPnJlc3BvbnNlX2JvZHktPmRh
dGEpCi0gICAgICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVEYXRhKGhhbmRsZS5nZXQoKSwgbXNn
LT5yZXNwb25zZV9ib2R5LT5kYXRhLCBtc2ctPnJlc3BvbnNlX2JvZHktPmxlbmd0aCwgdHJ1ZSk7
Ci0gICAgfQotCi0gICAgY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKGhhbmRsZS5nZXQoKSwgMCk7
CiB9CiAKIC8vIHBhcnNlRGF0YVVybCgpIGlzIHRha2VuIGZyb20gdGhlIENVUkwgaHR0cCBiYWNr
ZW5kLgpAQCAtMzY0LDcgKzMyNyw2IEBAIHN0YXRpYyBnYm9vbGVhbiBwYXJzZURhdGFVcmwoZ3Bv
aW50ZXIgY2FsbGJhY2tEYXRhKQogICAgIH0KIAogICAgIFN0cmluZyBtZWRpYVR5cGUgPSB1cmwu
c3Vic3RyaW5nKDUsIGluZGV4IC0gNSk7Ci0gICAgU3RyaW5nIGRhdGEgPSB1cmwuc3Vic3RyaW5n
KGluZGV4ICsgMSk7CiAKICAgICBib29sIGlzQmFzZTY0ID0gbWVkaWFUeXBlLmVuZHNXaXRoKCI7
YmFzZTY0IiwgZmFsc2UpOwogICAgIGlmIChpc0Jhc2U2NCkKQEAgLTM4MSw3ICszNDMsNiBAQCBz
dGF0aWMgZ2Jvb2xlYW4gcGFyc2VEYXRhVXJsKGdwb2ludGVyIGNhbGxiYWNrRGF0YSkKICAgICBy
ZXNwb25zZS5zZXRNaW1lVHlwZShtaW1lVHlwZSk7CiAKICAgICBpZiAoaXNCYXNlNjQpIHsKLSAg
ICAgICAgZGF0YSA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhkYXRhKTsKICAgICAgICAgcmVz
cG9uc2Uuc2V0VGV4dEVuY29kaW5nTmFtZShjaGFyc2V0KTsKICAgICAgICAgY2xpZW50LT5kaWRS
ZWNlaXZlUmVzcG9uc2UoaGFuZGxlLCByZXNwb25zZSk7CiAKQEAgLTM5MCwzMiArMzUxLDM5IEBA
IHN0YXRpYyBnYm9vbGVhbiBwYXJzZURhdGFVcmwoZ3BvaW50ZXIgY2FsbGJhY2tEYXRhKQogICAg
ICAgICAvLyBvdXQgaW4gZWl0aGVyIG9mIHRob3NlIGNhc2VzLgogICAgICAgICBpZiAoZC0+bV9j
YW5jZWxsZWQgfHwgIWhhbmRsZS0+Y2xpZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgLy8gVXNlIHRoZSBHTGliIEJhc2U2NCwgc2luY2UgV2ViQ29yZSdzIGRlY29k
ZXIgaXNuJ3QKLSAgICAgICAgLy8gZ2VuZXJhbC1wdXJwb3NlIGFuZCBmYWlscyBvbiBBY2lkMyB0
ZXN0IDk3ICh3aGl0ZXNwYWNlKS4KLSAgICAgICAgc2l6ZV90IG91dExlbmd0aCA9IDA7Ci0gICAg
ICAgIGNoYXIqIG91dERhdGEgPSAwOwotICAgICAgICBvdXREYXRhID0gcmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oZ19iYXNlNjRfZGVjb2RlKGRhdGEudXRmOCgpLmRhdGEoKSwgJm91dExlbmd0aCkp
OwotICAgICAgICBpZiAob3V0RGF0YSAmJiBvdXRMZW5ndGggPiAwKQotICAgICAgICAgICAgY2xp
ZW50LT5kaWRSZWNlaXZlRGF0YShoYW5kbGUsIG91dERhdGEsIG91dExlbmd0aCwgMCk7Ci0gICAg
ICAgIGdfZnJlZShvdXREYXRhKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBXZSBoYXZlIHRv
IGNvbnZlcnQgdG8gVVRGLTE2IGVhcmx5IGR1ZSB0byBsaW1pdGF0aW9ucyBpbiBLVVJMCi0gICAg
ICAgIGRhdGEgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoZGF0YSwgVGV4dEVuY29kaW5nKGNo
YXJzZXQpKTsKICAgICAgICAgcmVzcG9uc2Uuc2V0VGV4dEVuY29kaW5nTmFtZSgiVVRGLTE2Iik7
CiAgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGhhbmRsZSwgcmVzcG9uc2UpOwog
CiAgICAgICAgIGlmIChkLT5tX2NhbmNlbGxlZCB8fCAhaGFuZGxlLT5jbGllbnQoKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoZGF0YS5sZW5ndGgoKSA+IDApCi0g
ICAgICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVEYXRhKGhhbmRsZSwgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBjaGFyKj4oZGF0YS5jaGFyYWN0ZXJzKCkpLCBkYXRhLmxlbmd0aCgpICogc2l6ZW9m
KFVDaGFyKSwgMCk7CiAgICAgfQogCiAgICAgaWYgKGQtPm1fY2FuY2VsbGVkIHx8ICFoYW5kbGUt
PmNsaWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBjbGllbnQtPmRpZEZpbmlz
aExvYWRpbmcoaGFuZGxlLCAwKTsKKyAgICBTb3VwU2Vzc2lvbiogc2Vzc2lvbiA9IGhhbmRsZS0+
ZGVmYXVsdFNlc3Npb24oKTsKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgZC0+bV9z
b3VwUmVxdWVzdCA9IHNvdXBfcmVxdWVzdGVyX3JlcXVlc3QoZC0+bV9yZXF1ZXN0ZXIuZ2V0KCks
IGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc2Vz
c2lvbiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIEdJbnB1dFN0cmVhbSogaW4gPSBzb3VwX3JlcXVlc3Rfc2VuZChkLT5tX3Nv
dXBSZXF1ZXN0LmdldCgpLCAwLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGlmIChlcnJvcikKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZC0+bV9pbnB1dFN0cmVhbSA9IGluOworICAgIGQt
Pm1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGdfbWFsbG9jKFJFQURfQlVGRkVSX1NJWkUp
KTsKKyAgICBkLT5tX3RvdGFsID0gMDsKKworICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNU
KGQtPm1faW5wdXRTdHJlYW0pLCAid2Via2l0LXJlc291cmNlIiwgaGFuZGxlKTsKKyAgICBoYW5k
bGUtPnJlZigpOworCisgICAgZC0+bV9jYW5jZWxsYWJsZSA9IGdfY2FuY2VsbGFibGVfbmV3KCk7
CisgICAgZ19pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyhkLT5tX2lucHV0U3RyZWFtLCBkLT5tX2J1
ZmZlciwgUkVBRF9CVUZGRVJfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdf
UFJJT1JJVFlfREVGQVVMVCwgZC0+bV9jYW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlYWRDYWxsYmFjaywgKGlzQmFzZTY0KSA/IDAgOiBHSU5UX1RPX1BPSU5URVIo
MSkpOwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtNDMyLDYgKzQwMCw3IEBAIHN0YXRpYyBi
b29sIHN0YXJ0RGF0YShSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBTdHJpbmcgdXJsU3RyaW5nKQog
ICAgIHJldHVybiB0cnVlOwogfQogCisKIHN0YXRpYyBTb3VwU2Vzc2lvbiogY3JlYXRlU291cFNl
c3Npb24oKQogewogICAgIHJldHVybiBzb3VwX3Nlc3Npb25fYXN5bmNfbmV3KCk7CkBAIC00Njks
NiArNDM4LDE0MiBAQCBzdGF0aWMgdm9pZCBlbnN1cmVTZXNzaW9uSXNJbml0aWFsaXplZChTb3Vw
U2Vzc2lvbiogc2Vzc2lvbikKICAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChzZXNzaW9u
KSwgIndlYmtpdC1pbml0IiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oMHhkZWFkYmVlZikpOwog
fQogCitzdGF0aWMgdm9pZCBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oUmVzb3VyY2VIYW5k
bGUqIGhhbmRsZSwgYm9vbCBpc0Rlc3Ryb3lpbmcgPSBmYWxzZSkKK3sKKyAgICBSZXNvdXJjZUhh
bmRsZUludGVybmFsKiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOworCisgICAgaWYgKGQtPm1f
c291cFJlcXVlc3QpIHsKKyAgICAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9z
b3VwUmVxdWVzdC5nZXQoKSksICJ3ZWJraXQtcmVzb3VyY2UiLCAwKTsKKyAgICAgICAgZC0+bV9z
b3VwUmVxdWVzdC5jbGVhcigpOworICAgIH0KKworICAgIGlmIChkLT5tX2NhbmNlbGxhYmxlKSB7
CisgICAgICAgIGdfb2JqZWN0X3VucmVmKGQtPm1fY2FuY2VsbGFibGUpOworICAgICAgICBkLT5t
X2NhbmNlbGxhYmxlID0gMDsKKyAgICB9CisKKyAgICBpZiAoZC0+bV9pbnB1dFN0cmVhbSkgewor
ICAgICAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5tX2lucHV0U3RyZWFtKSwgIndl
YmtpdC1yZXNvdXJjZSIsIDApOworICAgICAgICBnX29iamVjdF91bnJlZihkLT5tX2lucHV0U3Ry
ZWFtKTsKKyAgICAgICAgZC0+bV9pbnB1dFN0cmVhbSA9IDA7CisgICAgfQorCisgICAgaWYgKGQt
Pm1fYnVmZmVyKSB7CisgICAgICAgIGdfZnJlZShkLT5tX2J1ZmZlcik7CisgICAgICAgIGQtPm1f
YnVmZmVyID0gMDsKKyAgICB9CisKKyAgICBpZiAoIWlzRGVzdHJveWluZykKKyAgICAgICAgaGFu
ZGxlLT5kZXJlZigpOworfQorCitzdGF0aWMgdm9pZCBzZW5kUmVxdWVzdENhbGxiYWNrKEdPYmpl
Y3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXMsIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAg
IFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5k
bGUqPihnX29iamVjdF9nZXRfZGF0YShzb3VyY2UsICJ3ZWJraXQtcmVzb3VyY2UiKSk7CisgICAg
aWYgKCFoYW5kbGUpCisgICAgICAgIHJldHVybjsKKworICAgIFJlc291cmNlSGFuZGxlSW50ZXJu
YWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFsKCk7CisgICAgUmVzb3VyY2VIYW5kbGVDbGllbnQq
IGNsaWVudCA9IGhhbmRsZS0+Y2xpZW50KCk7CisKKyAgICBpZiAoZC0+bV9nb3RDaHVua0hhbmRs
ZXIpIHsKKyAgICAgICAgLy8gTm8gbmVlZCB0byBjYWxsIGdvdENodW5rSGFuZGxlciBhbnltb3Jl
LiBSZWNlaXZlZCBkYXRhIHdpbGwKKyAgICAgICAgLy8gYmUgcmVwb3J0ZWQgYnkgcmVhZENhbGxi
YWNrCisgICAgICAgIGlmIChnX3NpZ25hbF9oYW5kbGVyX2lzX2Nvbm5lY3RlZChkLT5tX21zZywg
ZC0+bV9nb3RDaHVua0hhbmRsZXIpKQorICAgICAgICAgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNj
b25uZWN0KGQtPm1fbXNnLCBkLT5tX2dvdENodW5rSGFuZGxlcik7CisgICAgfQorCisgICAgaWYg
KGQtPm1fY2FuY2VsbGVkIHx8ICFjbGllbnQpIHsKKyAgICAgICAgY2xlYW51cFNvdXBSZXF1ZXN0
T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBH
T3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgR0lucHV0U3RyZWFtKiBpbiA9IHNvdXBfcmVxdWVz
dF9zZW5kX2ZpbmlzaChkLT5tX3NvdXBSZXF1ZXN0LmdldCgpLCByZXMsICZlcnJvci5vdXRQdHIo
KSk7CisKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgaWYgKGQtPm1fbXNnICYmIFNPVVBfU1RB
VFVTX0lTX1RSQU5TUE9SVF9FUlJPUihkLT5tX21zZy0+c3RhdHVzX2NvZGUpKSB7CisgICAgICAg
ICAgICBTb3VwVVJJKiB1cmkgPSBzb3VwX3JlcXVlc3RfZ2V0X3VyaShkLT5tX3NvdXBSZXF1ZXN0
LmdldCgpKTsKKyAgICAgICAgICAgIEdPd25QdHI8Y2hhcj4gdXJpU3RyKHNvdXBfdXJpX3RvX3N0
cmluZyh1cmksIGZhbHNlKSk7CisgICAgICAgICAgICBSZXNvdXJjZUVycm9yIHJlc291cmNlRXJy
b3IoZ19xdWFya190b19zdHJpbmcoU09VUF9IVFRQX0VSUk9SKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkLT5tX21zZy0+c3RhdHVzX2NvZGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpU3RyLmdldCgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzo6ZnJvbVVURjgoZC0+bV9tc2ctPnJl
YXNvbl9waHJhc2UpKTsKKyAgICAgICAgICAgIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbiho
YW5kbGUuZ2V0KCkpOworICAgICAgICAgICAgY2xpZW50LT5kaWRGYWlsKGhhbmRsZS5nZXQoKSwg
cmVzb3VyY2VFcnJvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoZXJyb3ItPmRvbWFpbiA9PSBHX0lPX0VSUk9SKSB7CisgICAgICAgICAgICBTb3VwVVJJ
KiB1cmkgPSBzb3VwX3JlcXVlc3RfZ2V0X3VyaShkLT5tX3NvdXBSZXF1ZXN0LmdldCgpKTsKKyAg
ICAgICAgICAgIEdPd25QdHI8Y2hhcj4gdXJpU3RyKHNvdXBfdXJpX3RvX3N0cmluZyh1cmksIGZh
bHNlKSk7CisgICAgICAgICAgICBSZXNvdXJjZUVycm9yIHJlc291cmNlRXJyb3IoZ19xdWFya190
b19zdHJpbmcoR19JT19FUlJPUiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXJyb3ItPmNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdXJpU3RyLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVycm9yID8gU3RyaW5nOjpmcm9tVVRGOChlcnJvci0+bWVzc2FnZSkgOiBTdHJpbmcoKSk7Cisg
ICAgICAgICAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKKyAg
ICAgICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIHJlc291cmNlRXJyb3IpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGQtPm1fbXNnICYm
IGQtPm1fbXNnLT5zdGF0dXNfY29kZSA9PSBTT1VQX1NUQVRVU19VTkFVVEhPUklaRUQpIHsKKyAg
ICAgICAgICAgIGZpbGxSZXNwb25zZUZyb21NZXNzYWdlKGQtPm1fbXNnLCAmZC0+bV9yZXNwb25z
ZSk7CisgICAgICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShoYW5kbGUuZ2V0KCks
IGQtPm1fcmVzcG9uc2UpOworCisgICAgICAgICAgICAvLyBXZWJDb3JlIG1pZ2h0IGhhdmUgY2Fu
Y2VsbGVkIHRoZSBqb2IgaW4gdGhlIHdoaWxlCisgICAgICAgICAgICBpZiAoZC0+bV9jYW5jZWxs
ZWQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBpZiAoZC0+bV9tc2ct
PnJlc3BvbnNlX2JvZHktPmRhdGEpCisgICAgICAgICAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZl
RGF0YShoYW5kbGUuZ2V0KCksIGQtPm1fbXNnLT5yZXNwb25zZV9ib2R5LT5kYXRhLCBkLT5tX21z
Zy0+cmVzcG9uc2VfYm9keS0+bGVuZ3RoLCB0cnVlKTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IGRpZFJlY2VpdmVEYXRhIGFib3ZlIG1pZ2h0IGhhdmUgY2FuY2VsbGVkIGl0CisgICAgICAgIGlm
IChkLT5tX2NhbmNlbGxlZCB8fCAhY2xpZW50KSB7CisgICAgICAgICAgY2xlYW51cFNvdXBSZXF1
ZXN0T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKGhhbmRsZS5nZXQoKSwgMCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZC0+bV9jYW5jZWxsZWQpIHsKKyAgICAg
ICAgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBkLT5tX2lucHV0U3RyZWFtID0gaW47CisgICAgZC0+bV9idWZm
ZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oZ19tYWxsb2MoUkVBRF9CVUZGRVJfU0laRSkpOworICAg
IGQtPm1fdG90YWwgPSAwOworCisgICAgLy8gcmVhZENhbGxiYWNrIG5lZWRzIGl0CisgICAgZ19v
YmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9pbnB1dFN0cmVhbSksICJ3ZWJraXQtcmVzb3Vy
Y2UiLCBoYW5kbGUuZ2V0KCkpOworCisgICAgLy8gV2UgbmVlZCB0byBjaGVjayBpZiBpdCdzIGEg
ZmlsZTogVVJMIGFuZCBpZiBpdCBpcyBhIHJlZ3VsYXIKKyAgICAvLyBmaWxlIGFzIGl0IGNvdWxk
IGJlIGEgZGlyZWN0b3J5LiBJbiB0aGF0IGNhc2UgU291cCBwcm9wZXJseQorICAgIC8vIHJldHVy
bnMgYSBzdHJlYW0gd2hvc2UgY29udGVudCBpcyBhIEhUTUwgd2l0aCBhIGxpc3Qgb2YgZmlsZXMK
KyAgICAvLyBpbiB0aGUgZGlyZWN0b3J5CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGhhbmRs
ZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkucHJvdG9jb2woKSwgImZpbGUiKQorICAgICAgICAmJiBH
X0lTX0ZJTEVfSU5QVVRfU1RSRUFNKGluKSkgeworICAgICAgICBSZXNvdXJjZVJlc3BvbnNlIHJl
c3BvbnNlOworCisgICAgICAgIHJlc3BvbnNlLnNldFVSTChoYW5kbGUtPmZpcnN0UmVxdWVzdCgp
LnVybCgpKTsKKyAgICAgICAgcmVzcG9uc2Uuc2V0TWltZVR5cGUoc291cF9yZXF1ZXN0X2dldF9j
b250ZW50X3R5cGUoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSkpOworICAgICAgICByZXNwb25zZS5z
ZXRFeHBlY3RlZENvbnRlbnRMZW5ndGgoc291cF9yZXF1ZXN0X2dldF9jb250ZW50X2xlbmd0aChk
LT5tX3NvdXBSZXF1ZXN0LmdldCgpKSk7CisgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZVJlc3Bv
bnNlKGhhbmRsZS5nZXQoKSwgcmVzcG9uc2UpOworCisgICAgICAgIGlmIChkLT5tX2NhbmNlbGxl
ZCkgeworICAgICAgICAgICAgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKGhhbmRsZS5nZXQo
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBnX2lucHV0
X3N0cmVhbV9yZWFkX2FzeW5jKGQtPm1faW5wdXRTdHJlYW0sIGQtPm1fYnVmZmVyLCBSRUFEX0JV
RkZFUl9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QUklPUklUWV9ERUZB
VUxULCBkLT5tX2NhbmNlbGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVh
ZENhbGxiYWNrLCAwKTsKK30KKwogc3RhdGljIGJvb2wgc3RhcnRIdHRwKFJlc291cmNlSGFuZGxl
KiBoYW5kbGUpCiB7CiAgICAgQVNTRVJUKGhhbmRsZSk7CkBAIC00ODMsNyArNTg4LDE2IEBAIHN0
YXRpYyBib29sIHN0YXJ0SHR0cChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQogICAgIHVybC5yZW1v
dmVGcmFnbWVudElkZW50aWZpZXIoKTsKICAgICByZXF1ZXN0LnNldFVSTCh1cmwpOwogCi0gICAg
ZC0+bV9tc2cgPSByZXF1ZXN0LnRvU291cE1lc3NhZ2UoKTsKKyAgICBHT3duUHRyPEdFcnJvcj4g
ZXJyb3I7CisgICAgZC0+bV9zb3VwUmVxdWVzdCA9IHNvdXBfcmVxdWVzdGVyX3JlcXVlc3QoZC0+
bV9yZXF1ZXN0ZXIuZ2V0KCksIHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBzZXNzaW9uLCAm
ZXJyb3Iub3V0UHRyKCkpOworICAgIGlmIChlcnJvcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSks
ICJ3ZWJraXQtcmVzb3VyY2UiLCBoYW5kbGUpOworCisgICAgZC0+bV9tc2cgPSBzb3VwX3JlcXVl
c3RfaHR0cF9nZXRfbWVzc2FnZShTT1VQX1JFUVVFU1RfSFRUUChkLT5tX3NvdXBSZXF1ZXN0Lmdl
dCgpKSk7CisgICAgcmVxdWVzdC51cGRhdGVTb3VwTWVzc2FnZShkLT5tX21zZyk7CisKICAgICBp
ZiAoIWQtPm1fbXNnKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTQ5Myw3ICs2MDcsNyBA
QCBzdGF0aWMgYm9vbCBzdGFydEh0dHAoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKICAgICBnX3Np
Z25hbF9jb25uZWN0KGQtPm1fbXNnLCAicmVzdGFydGVkIiwgR19DQUxMQkFDSyhyZXN0YXJ0ZWRD
YWxsYmFjayksIGhhbmRsZSk7CiAgICAgZ19zaWduYWxfY29ubmVjdChkLT5tX21zZywgImdvdC1o
ZWFkZXJzIiwgR19DQUxMQkFDSyhnb3RIZWFkZXJzQ2FsbGJhY2spLCBoYW5kbGUpOwogICAgIGdf
c2lnbmFsX2Nvbm5lY3QoZC0+bV9tc2csICJjb250ZW50LXNuaWZmZWQiLCBHX0NBTExCQUNLKGNv
bnRlbnRTbmlmZmVkQ2FsbGJhY2spLCBoYW5kbGUpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoZC0+
bV9tc2csICJnb3QtY2h1bmsiLCBHX0NBTExCQUNLKGdvdENodW5rQ2FsbGJhY2spLCBoYW5kbGUp
OworICAgIGQtPm1fZ290Q2h1bmtIYW5kbGVyID0gZ19zaWduYWxfY29ubmVjdChkLT5tX21zZywg
ImdvdC1jaHVuayIsIEdfQ0FMTEJBQ0soZ290Q2h1bmtDYWxsYmFjayksIGhhbmRsZSk7CiAKICNp
ZmRlZiBIQVZFX0xJQlNPVVBfMl8yOV85MAogICAgIFN0cmluZyBmaXJzdFBhcnR5U3RyaW5nID0g
cmVxdWVzdC5maXJzdFBhcnR5Rm9yQ29va2llcygpLnN0cmluZygpOwpAQCAtNTAyLDcgKzYxNiw2
IEBAIHN0YXRpYyBib29sIHN0YXJ0SHR0cChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQogICAgICAg
ICBzb3VwX21lc3NhZ2Vfc2V0X2ZpcnN0X3BhcnR5KGQtPm1fbXNnLCBmaXJzdFBhcnR5LmdldCgp
KTsKICAgICB9CiAjZW5kaWYKLSAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5tX21z
ZyksICJyZXNvdXJjZUhhbmRsZSIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGhhbmRsZSkpOwog
CiAgICAgRm9ybURhdGEqIGh0dHBCb2R5ID0gZC0+bV9maXJzdFJlcXVlc3QuaHR0cEJvZHkoKTsK
ICAgICBpZiAoaHR0cEJvZHkgJiYgIWh0dHBCb2R5LT5pc0VtcHR5KCkpIHsKQEAgLTUzMiwxMiAr
NjQ1LDExIEBAIHN0YXRpYyBib29sIHN0YXJ0SHR0cChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQog
ICAgICAgICAgICAgICAgICAgICAgKiBtYXBwaW5nIGZvciB1cGxvYWRlZCBmaWxlcyBjb2RlIGlu
c3BpcmVkIGJ5IHRlY2huaXF1ZSB1c2VkIGluCiAgICAgICAgICAgICAgICAgICAgICAqIGxpYnNv
dXAncyBzaW1wbGUtaHR0cGQgdGVzdAogICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAg
ICAgICAgICAgICAgR0Vycm9yKiBlcnJvciA9IDA7CisgICAgICAgICAgICAgICAgICAgIEdPd25Q
dHI8R0Vycm9yPiBlcnJvcjsKICAgICAgICAgICAgICAgICAgICAgQ1N0cmluZyBmaWxlTmFtZSA9
IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihlbGVtZW50Lm1fZmlsZW5hbWUpOwotICAgICAgICAg
ICAgICAgICAgICBHTWFwcGVkRmlsZSogZmlsZU1hcHBpbmcgPSBnX21hcHBlZF9maWxlX25ldyhm
aWxlTmFtZS5kYXRhKCksIGZhbHNlLCAmZXJyb3IpOworICAgICAgICAgICAgICAgICAgICBHTWFw
cGVkRmlsZSogZmlsZU1hcHBpbmcgPSBnX21hcHBlZF9maWxlX25ldyhmaWxlTmFtZS5kYXRhKCks
IGZhbHNlLCAmZXJyb3Iub3V0UHRyKCkpOwogCiAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJv
cikgewotICAgICAgICAgICAgICAgICAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChk
LT5tX21zZywgR19TSUdOQUxfTUFUQ0hfREFUQSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCBoYW5kbGUpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgZ19vYmplY3RfdW5yZWYoZC0+bV9tc2cpOwpAQCAtNTYx
LDcgKzY3Myw3IEBAIHN0YXRpYyBib29sIHN0YXJ0SHR0cChSZXNvdXJjZUhhbmRsZSogaGFuZGxl
KQogICAgICAgICB9CiAgICAgfQogCi0gICAgLy8gYmFsYW5jZWQgYnkgYSBkZXJlZigpIGluIGZp
bmlzaGVkQ2FsbGJhY2ssIHdoaWNoIHNob3VsZCBhbHdheXMgcnVuCisgICAgLy8gYmFsYW5jZWQg
YnkgYSBkZXJlZigpIGluIGNsb3NlQ2FsbGJhY2ssIHdoaWNoIHNob3VsZCBhbHdheXMgcnVuCiAg
ICAgaGFuZGxlLT5yZWYoKTsKIAogICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGFuIEFjY2VwdCBo
ZWFkZXIgZm9yIHN1YnJlc291cmNlczsgc29tZSBzaXRlcwpAQCAtNTY5LDExICs2ODEsOCBAQCBz
dGF0aWMgYm9vbCBzdGFydEh0dHAoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKICAgICBpZiAoIXNv
dXBfbWVzc2FnZV9oZWFkZXJzX2dldF9vbmUoZC0+bV9tc2ctPnJlcXVlc3RfaGVhZGVycywgIkFj
Y2VwdCIpKQogICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQoZC0+bV9tc2ctPnJl
cXVlc3RfaGVhZGVycywgIkFjY2VwdCIsICIqLyoiKTsKIAotICAgIC8vIEJhbGFuY2VkIGluIFJl
c291cmNlSGFuZGxlSW50ZXJuYWwncyBkZXN0cnVjdG9yOyB3ZSBuZWVkIHRvCi0gICAgLy8ga2Vl
cCBvdXIgb3duIHJlZiwgYmVjYXVzZSBhZnRlciBxdWV1ZWluZyB0aGUgbWVzc2FnZSwgdGhlCi0g
ICAgLy8gc2Vzc2lvbiBvd25zIHRoZSBpbml0aWFsIHJlZmVyZW5jZS4KLSAgICBnX29iamVjdF9y
ZWYoZC0+bV9tc2cpOwotICAgIHNvdXBfc2Vzc2lvbl9xdWV1ZV9tZXNzYWdlKHNlc3Npb24sIGQt
Pm1fbXNnLCBmaW5pc2hlZENhbGxiYWNrLCBoYW5kbGUpOworICAgIGQtPm1fY2FuY2VsbGFibGUg
PSBnX2NhbmNlbGxhYmxlX25ldygpOworICAgIHNvdXBfcmVxdWVzdF9zZW5kX2FzeW5jKGQtPm1f
c291cFJlcXVlc3QuZ2V0KCksIGQtPm1fY2FuY2VsbGFibGUsIHNlbmRSZXF1ZXN0Q2FsbGJhY2ss
IDApOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC02NjcsMzggKzc3Niw2IEBAIHZvaWQgUmVz
b3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0CiAgICAgc3luY0xvYWRlci5ydW4oKTsKIH0KIAotLy8gR0lPLWJhc2Vk
IGxvYWRlcgotCi1zdGF0aWMgdm9pZCBjbGVhbnVwR2lvT3BlcmF0aW9uKFJlc291cmNlSGFuZGxl
KiBoYW5kbGUsIGJvb2wgaXNEZXN0cm95aW5nID0gZmFsc2UpCi17Ci0gICAgUmVzb3VyY2VIYW5k
bGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKLQotICAgIGlmIChkLT5tX2dm
aWxlKSB7Ci0gICAgICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1fZ2ZpbGUpLCAi
d2Via2l0LXJlc291cmNlIiwgMCk7Ci0gICAgICAgIGdfb2JqZWN0X3VucmVmKGQtPm1fZ2ZpbGUp
OwotICAgICAgICBkLT5tX2dmaWxlID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoZC0+bV9jYW5jZWxs
YWJsZSkgewotICAgICAgICBnX29iamVjdF91bnJlZihkLT5tX2NhbmNlbGxhYmxlKTsKLSAgICAg
ICAgZC0+bV9jYW5jZWxsYWJsZSA9IDA7Ci0gICAgfQotCi0gICAgaWYgKGQtPm1faW5wdXRTdHJl
YW0pIHsKLSAgICAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9pbnB1dFN0cmVh
bSksICJ3ZWJraXQtcmVzb3VyY2UiLCAwKTsKLSAgICAgICAgZ19vYmplY3RfdW5yZWYoZC0+bV9p
bnB1dFN0cmVhbSk7Ci0gICAgICAgIGQtPm1faW5wdXRTdHJlYW0gPSAwOwotICAgIH0KLQotICAg
IGlmIChkLT5tX2J1ZmZlcikgewotICAgICAgICBnX2ZyZWUoZC0+bV9idWZmZXIpOwotICAgICAg
ICBkLT5tX2J1ZmZlciA9IDA7Ci0gICAgfQotCi0gICAgaWYgKCFpc0Rlc3Ryb3lpbmcpCi0gICAg
ICAgIGhhbmRsZS0+ZGVyZWYoKTsKLX0KLQogc3RhdGljIHZvaWQgY2xvc2VDYWxsYmFjayhHT2Jq
ZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzLCBncG9pbnRlcikKIHsKICAgICBSZWZQdHI8
UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9IHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxlKj4oZ19v
YmplY3RfZ2V0X2RhdGEoc291cmNlLCAid2Via2l0LXJlc291cmNlIikpOwpAQCAtNzA5LDcgKzc4
Niw3IEBAIHN0YXRpYyB2b2lkIGNsb3NlQ2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNS
ZXN1bHQqIHJlcywgZ3BvaW50ZXIpCiAgICAgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCA9
IGhhbmRsZS0+Y2xpZW50KCk7CiAKICAgICBnX2lucHV0X3N0cmVhbV9jbG9zZV9maW5pc2goZC0+
bV9pbnB1dFN0cmVhbSwgcmVzLCAwKTsKLSAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5n
ZXQoKSk7CisgICAgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CiAK
ICAgICAvLyBUaGUgbG9hZCBtYXkgaGF2ZSBiZWVuIGNhbmNlbGxlZCwgdGhlIGNsaWVudCBtYXkg
aGF2ZSBiZWVuCiAgICAgLy8gZGVzdHJveWVkIGFscmVhZHkuIEluIHN1Y2ggY2FzZXMgY2FsbGlu
ZyBkaWRGaW5pc2hMb2FkaW5nIGlzIGEKQEAgLTcyMCwzMiArNzk3LDMyIEBAIHN0YXRpYyB2b2lk
IGNsb3NlQ2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50
ZXIpCiAgICAgY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKGhhbmRsZS5nZXQoKSwgMCk7CiB9CiAK
LXN0YXRpYyB2b2lkIHJlYWRDYWxsYmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCog
cmVzLCBncG9pbnRlcikKK3N0YXRpYyB2b2lkIHJlYWRDYWxsYmFjayhHT2JqZWN0KiBzb3VyY2Us
IEdBc3luY1Jlc3VsdCogcmVzLCBncG9pbnRlciBkYXRhKQogewogICAgIFJlZlB0cjxSZXNvdXJj
ZUhhbmRsZT4gaGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihnX29iamVjdF9n
ZXRfZGF0YShzb3VyY2UsICJ3ZWJraXQtcmVzb3VyY2UiKSk7CiAgICAgaWYgKCFoYW5kbGUpCiAg
ICAgICAgIHJldHVybjsKIAorICAgIGJvb2wgY29udmVydFRvVVRGMTYgPSBzdGF0aWNfY2FzdDxi
b29sPihkYXRhKTsKICAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0gaGFuZGxlLT5nZXRJ
bnRlcm5hbCgpOwogICAgIFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQgPSBoYW5kbGUtPmNs
aWVudCgpOwogCiAgICAgaWYgKGQtPm1fY2FuY2VsbGVkIHx8ICFjbGllbnQpIHsKLSAgICAgICAg
Y2xlYW51cEdpb09wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOworICAgICAgICBjbGVhbnVwU291cFJl
cXVlc3RPcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIEdFcnJvciogZXJyb3IgPSAwOworICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKIAotICAg
IGdzc2l6ZSBieXRlc1JlYWQgPSBnX2lucHV0X3N0cmVhbV9yZWFkX2ZpbmlzaChkLT5tX2lucHV0
U3RyZWFtLCByZXMsICZlcnJvcik7CisgICAgZ3NzaXplIGJ5dGVzUmVhZCA9IGdfaW5wdXRfc3Ry
ZWFtX3JlYWRfZmluaXNoKGQtPm1faW5wdXRTdHJlYW0sIHJlcywgJmVycm9yLm91dFB0cigpKTsK
ICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgY2hhciogdXJpID0gZ19maWxlX2dldF91cmkoZC0+
bV9nZmlsZSk7CisgICAgICAgIFNvdXBVUkkqIHVyaSA9IHNvdXBfcmVxdWVzdF9nZXRfdXJpKGQt
Pm1fc291cFJlcXVlc3QuZ2V0KCkpOworICAgICAgICBHT3duUHRyPGNoYXI+IHVyaVN0cihzb3Vw
X3VyaV90b19zdHJpbmcodXJpLCBmYWxzZSkpOwogICAgICAgICBSZXNvdXJjZUVycm9yIHJlc291
cmNlRXJyb3IoZ19xdWFya190b19zdHJpbmcoR19JT19FUlJPUiksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlcnJvci0+Y29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVyaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVy
aVN0ci5nZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID8g
U3RyaW5nOjpmcm9tVVRGOChlcnJvci0+bWVzc2FnZSkgOiBTdHJpbmcoKSk7Ci0gICAgICAgIGdf
ZnJlZSh1cmkpOwotICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOwotICAgICAgICBjbGVhbnVw
R2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAgIGNsZWFudXBTb3VwUmVxdWVzdE9w
ZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwogICAgICAgICBjbGllbnQtPmRpZEZhaWwoaGFuZGxlLmdl
dCgpLCByZXNvdXJjZUVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTc1NywxNDEg
KzgzNCwzNiBAQCBzdGF0aWMgdm9pZCByZWFkQ2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5
bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIpCiAgICAgfQogCiAgICAgZC0+bV90b3RhbCArPSBieXRl
c1JlYWQ7Ci0gICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0YShoYW5kbGUuZ2V0KCksIGQtPm1fYnVm
ZmVyLCBieXRlc1JlYWQsIGQtPm1fdG90YWwpOwotCi0gICAgLy8gZGlkUmVjZWl2ZURhdGEgbWF5
IGNhbmNlbCB0aGUgbG9hZCwgd2hpY2ggbWF5IHJlbGVhc2UgdGhlIGxhc3QgcmVmZXJlbmNlLgot
ICAgIGlmIChkLT5tX2NhbmNlbGxlZCkgewotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhh
bmRsZS5nZXQoKSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoR19MSUtFTFkoIWNvbnZlcnRU
b1VURjE2KSkKKyAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0YShoYW5kbGUuZ2V0KCksIGQt
Pm1fYnVmZmVyLCBieXRlc1JlYWQsIGQtPm1fdG90YWwpOworICAgIGVsc2UgeworICAgICAgICAv
LyBXZSBoYXZlIHRvIGNvbnZlcnQgaXQgdG8gVVRGLTE2IGR1ZSB0byBsaW1pdGF0aW9ucyBpbiBL
VVJMCisgICAgICAgIFN0cmluZyBkYXRhID0gU3RyaW5nOjpmcm9tVVRGOChkLT5tX2J1ZmZlciwg
Ynl0ZXNSZWFkKTsKKyAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0YShoYW5kbGUuZ2V0KCks
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEuY2hhcmFjdGVycygpKSwgZGF0YS5s
ZW5ndGgoKSAqIHNpemVvZihVQ2hhciksIDApOwogICAgIH0KIAotICAgIGdfaW5wdXRfc3RyZWFt
X3JlYWRfYXN5bmMoZC0+bV9pbnB1dFN0cmVhbSwgZC0+bV9idWZmZXIsIGQtPm1fYnVmZmVyU2l6
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUFJJT1JJVFlfREVGQVVMVCwgZC0+
bV9jYW5jZWxsYWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRDYWxsYmFj
aywgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIG9wZW5DYWxsYmFjayhHT2JqZWN0KiBzb3VyY2UsIEdB
c3luY1Jlc3VsdCogcmVzLCBncG9pbnRlcikKLXsKLSAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+
IGhhbmRsZSA9IHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxlKj4oZ19vYmplY3RfZ2V0X2RhdGEo
c291cmNlLCAid2Via2l0LXJlc291cmNlIikpOwotICAgIGlmICghaGFuZGxlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0gaGFuZGxlLT5nZXRJbnRl
cm5hbCgpOwotICAgIFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQgPSBoYW5kbGUtPmNsaWVu
dCgpOwotCisgICAgLy8gZGlkUmVjZWl2ZURhdGEgbWF5IGNhbmNlbCB0aGUgbG9hZCwgd2hpY2gg
bWF5IHJlbGVhc2UgdGhlIGxhc3QgcmVmZXJlbmNlLgogICAgIGlmIChkLT5tX2NhbmNlbGxlZCB8
fCAhY2xpZW50KSB7Ci0gICAgICAgIGNsZWFudXBHaW9PcGVyYXRpb24oaGFuZGxlLmdldCgpKTsK
KyAgICAgICAgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBHRXJyb3IqIGVycm9yID0gMDsKLSAgICBHRmlsZUlu
cHV0U3RyZWFtKiBpbiA9IGdfZmlsZV9yZWFkX2ZpbmlzaChHX0ZJTEUoc291cmNlKSwgcmVzLCAm
ZXJyb3IpOwotICAgIGlmIChlcnJvcikgewotICAgICAgICBjaGFyKiB1cmkgPSBnX2ZpbGVfZ2V0
X3VyaShkLT5tX2dmaWxlKTsKLSAgICAgICAgUmVzb3VyY2VFcnJvciByZXNvdXJjZUVycm9yKGdf
cXVhcmtfdG9fc3RyaW5nKEdfSU9fRVJST1IpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXJyb3ItPmNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1cmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA/IFN0cmlu
Zzo6ZnJvbVVURjgoZXJyb3ItPm1lc3NhZ2UpIDogU3RyaW5nKCkpOwotICAgICAgICBnX2ZyZWUo
dXJpKTsKLSAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKLSAgICAgICAgY2xlYW51cEdpb09w
ZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwotICAgICAgICBjbGllbnQtPmRpZEZhaWwoaGFuZGxlLmdl
dCgpLCByZXNvdXJjZUVycm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGQtPm1f
aW5wdXRTdHJlYW0gPSBHX0lOUFVUX1NUUkVBTShpbik7Ci0gICAgZC0+bV9idWZmZXJTaXplID0g
ODE5MjsKLSAgICBkLT5tX2J1ZmZlciA9IHN0YXRpY19jYXN0PGNoYXIqPihnX21hbGxvYyhkLT5t
X2J1ZmZlclNpemUpKTsKLSAgICBkLT5tX3RvdGFsID0gMDsKLQotICAgIGdfb2JqZWN0X3NldF9k
YXRhKEdfT0JKRUNUKGQtPm1faW5wdXRTdHJlYW0pLCAid2Via2l0LXJlc291cmNlIiwgaGFuZGxl
LmdldCgpKTsKLSAgICBnX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jKGQtPm1faW5wdXRTdHJlYW0s
IGQtPm1fYnVmZmVyLCBkLT5tX2J1ZmZlclNpemUsCisgICAgZ19pbnB1dF9zdHJlYW1fcmVhZF9h
c3luYyhkLT5tX2lucHV0U3RyZWFtLCBkLT5tX2J1ZmZlciwgUkVBRF9CVUZGRVJfU0laRSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUFJJT1JJVFlfREVGQVVMVCwgZC0+bV9jYW5j
ZWxsYWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRDYWxsYmFjaywgMCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkQ2FsbGJhY2ssIGRhdGEpOwogfQog
Ci1zdGF0aWMgdm9pZCBxdWVyeUluZm9DYWxsYmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jl
c3VsdCogcmVzLCBncG9pbnRlcikKLXsKLSAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRs
ZSA9IHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxlKj4oZ19vYmplY3RfZ2V0X2RhdGEoc291cmNl
LCAid2Via2l0LXJlc291cmNlIikpOwotICAgIGlmICghaGFuZGxlKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgp
OwotICAgIFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQgPSBoYW5kbGUtPmNsaWVudCgpOwot
Ci0gICAgaWYgKGQtPm1fY2FuY2VsbGVkKSB7Ci0gICAgICAgIGNsZWFudXBHaW9PcGVyYXRpb24o
aGFuZGxlLmdldCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlc291cmNlUmVz
cG9uc2UgcmVzcG9uc2U7Ci0KLSAgICBjaGFyKiB1cmkgPSBnX2ZpbGVfZ2V0X3VyaShkLT5tX2dm
aWxlKTsKLSAgICByZXNwb25zZS5zZXRVUkwoS1VSTChLVVJMKCksIHVyaSkpOwotICAgIGdfZnJl
ZSh1cmkpOwotCi0gICAgR0Vycm9yKiBlcnJvciA9IDA7Ci0gICAgR0ZpbGVJbmZvKiBpbmZvID0g
Z19maWxlX3F1ZXJ5X2luZm9fZmluaXNoKGQtPm1fZ2ZpbGUsIHJlcywgJmVycm9yKTsKLQotICAg
IGlmIChlcnJvcikgewotICAgICAgICAvLyBGSVhNRTogdG8gYmUgYWJsZSB0byBoYW5kbGUgZnRw
IFVSSXMgcHJvcGVybHksIHdlIG11c3QKLSAgICAgICAgLy8gY2hlY2sgaWYgdGhlIGVycm9yIGlz
IEdfSU9fRVJST1JfTk9UX01PVU5URUQsIGFuZCBpZiBzbywKLSAgICAgICAgLy8gY2FsbCBnX2Zp
bGVfbW91bnRfZW5jbG9zaW5nX3ZvbHVtZSgpIHRvIG1vdW50IHRoZSBmdHAKLSAgICAgICAgLy8g
c2VydmVyIChhbmQgdGhlbiBrZWVwIHRyYWNrIG9mIHRoZSBmYWN0IHRoYXQgd2UgbW91bnRlZCBp
dCwKLSAgICAgICAgLy8gYW5kIHNldCBhIHRpbWVvdXQgdG8gdW5tb3VudCBpdCBsYXRlciBhZnRl
ciBpdCdzIGJlZW4gaWRsZQotICAgICAgICAvLyBmb3IgYSB3aGlsZSkuCi0gICAgICAgIGNoYXIq
IHVyaSA9IGdfZmlsZV9nZXRfdXJpKGQtPm1fZ2ZpbGUpOwotICAgICAgICBSZXNvdXJjZUVycm9y
IHJlc291cmNlRXJyb3IoZ19xdWFya190b19zdHJpbmcoR19JT19FUlJPUiksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvci0+Y29kZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVyaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVycm9yID8gU3RyaW5nOjpmcm9tVVRGOChlcnJvci0+bWVzc2FnZSkgOiBTdHJpbmcoKSk7
Ci0gICAgICAgIGdfZnJlZSh1cmkpOwotICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOwotICAg
ICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7Ci0gICAgICAgIGNsaWVudC0+
ZGlkRmFpbChoYW5kbGUuZ2V0KCksIHJlc291cmNlRXJyb3IpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgaWYgKGdfZmlsZV9pbmZvX2dldF9maWxlX3R5cGUoaW5mbykgIT0gR19GSUxF
X1RZUEVfUkVHVUxBUikgewotICAgICAgICAvLyBGSVhNRTogd2hhdCBpZiB0aGUgVVJJIHBvaW50
cyB0byBhIGRpcmVjdG9yeT8gU2hvdWxkIHdlCi0gICAgICAgIC8vIGdlbmVyYXRlIGEgbGlzdGlu
Zz8gSG93PyBXaGF0IGRvIG90aGVyIGJhY2tlbmRzIGRvIGhlcmU/Ci0gICAgICAgIGNoYXIqIHVy
aSA9IGdfZmlsZV9nZXRfdXJpKGQtPm1fZ2ZpbGUpOwotICAgICAgICBSZXNvdXJjZUVycm9yIHJl
c291cmNlRXJyb3IoZ19xdWFya190b19zdHJpbmcoR19JT19FUlJPUiksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHX0lPX0VSUk9SX0ZBSUxFRCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVyaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFN0cmluZygpKTsKLSAgICAgICAgZ19mcmVlKHVyaSk7Ci0gICAgICAgIGNsZWFudXBH
aW9PcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKLSAgICAgICAgY2xpZW50LT5kaWRGYWlsKGhhbmRs
ZS5nZXQoKSwgcmVzb3VyY2VFcnJvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBy
ZXNwb25zZS5zZXRNaW1lVHlwZShnX2ZpbGVfaW5mb19nZXRfY29udGVudF90eXBlKGluZm8pKTsK
LSAgICByZXNwb25zZS5zZXRFeHBlY3RlZENvbnRlbnRMZW5ndGgoZ19maWxlX2luZm9fZ2V0X3Np
emUoaW5mbykpOwotCi0gICAgR1RpbWVWYWwgdHY7Ci0gICAgZ19maWxlX2luZm9fZ2V0X21vZGlm
aWNhdGlvbl90aW1lKGluZm8sICZ0dik7Ci0gICAgcmVzcG9uc2Uuc2V0TGFzdE1vZGlmaWVkRGF0
ZSh0di50dl9zZWMpOwotCi0gICAgY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UoaGFuZGxlLmdl
dCgpLCByZXNwb25zZSk7Ci0KLSAgICBpZiAoZC0+bV9jYW5jZWxsZWQpIHsKLSAgICAgICAgY2xl
YW51cEdpb09wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgZ19maWxlX3JlYWRfYXN5bmMoZC0+bV9nZmlsZSwgR19QUklPUklUWV9ERUZBVUxULCBk
LT5tX2NhbmNlbGxhYmxlLAotICAgICAgICAgICAgICAgICAgICAgIG9wZW5DYWxsYmFjaywgMCk7
Ci19CiBzdGF0aWMgYm9vbCBzdGFydEdpbyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBLVVJMIHVy
bCkKIHsKICAgICBBU1NFUlQoaGFuZGxlKTsKIAotICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwq
IGQgPSBoYW5kbGUtPmdldEludGVybmFsKCk7Ci0KICAgICBpZiAoaGFuZGxlLT5maXJzdFJlcXVl
c3QoKS5odHRwTWV0aG9kKCkgIT0gIkdFVCIgJiYgaGFuZGxlLT5maXJzdFJlcXVlc3QoKS5odHRw
TWV0aG9kKCkgIT0gIlBPU1QiKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBDU3RyaW5n
IHVybFN0cjsKKyAgICBTb3VwU2Vzc2lvbiogc2Vzc2lvbiA9IGhhbmRsZS0+ZGVmYXVsdFNlc3Np
b24oKTsKKyAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0gaGFuZGxlLT5nZXRJbnRlcm5h
bCgpOworCiAgICAgLy8gR0lPIGRvZXNuJ3Qga25vdyBob3cgdG8gaGFuZGxlIHJlZnMgYW5kIHF1
ZXJpZXMsIHNvIHJlbW92ZSB0aGVtCiAgICAgLy8gVE9ETzogdXNlIEtVUkwuZmlsZVN5c3RlbVBh
dGggYWZ0ZXIgS1VSTEd0ayBhbmQgRmlsZVN5c3RlbUd0ayBhcmUKICAgICAvLyB1c2luZyBHSU8g
aW50ZXJuYWxseSwgYW5kIHByb3ZpZGluZyBVUklzIGluc3RlYWQgb2YgZmlsZSBwYXRocwpAQCAt
OTA0LDIzICs4NzYsMjQgQEAgc3RhdGljIGJvb2wgc3RhcnRHaW8oUmVzb3VyY2VIYW5kbGUqIGhh
bmRsZSwgS1VSTCB1cmwpCiAgICAgLy8gZ19maWxlbmFtZV9mcm9tX3VyaSAodXNlZCBpbnRlcm5h
bGx5IGJ5IEdGaWxlKSBoYXMgcHJvYmxlbXMKICAgICAvLyBkZWNvZGluZyBzdHJpbmdzIHdpdGgg
YXJiaXRyYXJ5IHBlcmNlbnQgc2lnbnMKICAgICBpZiAodXJsLmlzTG9jYWxGaWxlKCkpCi0gICAg
ICAgIGQtPm1fZ2ZpbGUgPSBnX2ZpbGVfbmV3X2Zvcl9wYXRoKHVybC5wcmV0dHlVUkwoKS51dGY4
KCkuZGF0YSgpICsgc2l6ZW9mKCJmaWxlOi8vIikgLSAxKTsKKyAgICAgICAgdXJsU3RyID0gdXJs
LnByZXR0eVVSTCgpLnV0ZjgoKS5kYXRhKCk7CiAgICAgZWxzZQogI2VuZGlmCi0gICAgICAgIGQt
Pm1fZ2ZpbGUgPSBnX2ZpbGVfbmV3X2Zvcl91cmkodXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OwotICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1fZ2ZpbGUpLCAid2Via2l0LXJl
c291cmNlIiwgaGFuZGxlKTsKKyAgICAgICAgdXJsU3RyID0gdXJsLnN0cmluZygpLnV0ZjgoKS5k
YXRhKCk7CisKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgZC0+bV9zb3VwUmVxdWVz
dCA9IHNvdXBfcmVxdWVzdGVyX3JlcXVlc3QoZC0+bV9yZXF1ZXN0ZXIuZ2V0KCksIHVybFN0ci5k
YXRhKCksIHNlc3Npb24sICZlcnJvci5vdXRQdHIoKSk7CisgICAgaWYgKGVycm9yKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5tX3Nv
dXBSZXF1ZXN0LmdldCgpKSwgIndlYmtpdC1yZXNvdXJjZSIsIGhhbmRsZSk7CiAKLSAgICAvLyBi
YWxhbmNlZCBieSBhIGRlcmVmKCkgaW4gY2xlYW51cEdpb09wZXJhdGlvbiwgd2hpY2ggc2hvdWxk
IGFsd2F5cyBydW4KKyAgICAvLyBiYWxhbmNlZCBieSBhIGRlcmVmKCkgaW4gY2xlYW51cFNvdXBS
ZXF1ZXN0T3BlcmF0aW9uLCB3aGljaCBzaG91bGQgYWx3YXlzIHJ1bgogICAgIGhhbmRsZS0+cmVm
KCk7CiAKICAgICBkLT5tX2NhbmNlbGxhYmxlID0gZ19jYW5jZWxsYWJsZV9uZXcoKTsKLSAgICBn
X2ZpbGVfcXVlcnlfaW5mb19hc3luYyhkLT5tX2dmaWxlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfVFlQRSAiLCIKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX0NPTlRFTlRfVFlQRSAiLCIK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX1NJ
WkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR19GSUxFX1FVRVJZX0lORk9fTk9ORSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BSSU9SSVRZX0RFRkFVTFQsIGQtPm1fY2Fu
Y2VsbGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlJbmZvQ2FsbGJhY2ss
IDApOworICAgIHNvdXBfcmVxdWVzdF9zZW5kX2FzeW5jKGQtPm1fc291cFJlcXVlc3QuZ2V0KCks
IGQtPm1fY2FuY2VsbGFibGUsIHNlbmRSZXF1ZXN0Q2FsbGJhY2ssIDApOworCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jl
c291cmNlUmVxdWVzdC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VS
ZXF1ZXN0LmgKaW5kZXggYTFkOTE2Zi4uYzFjNzExNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0LmgKQEAgLTY3LDYgKzY3LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICAgICAgdXBkYXRlRnJvbVNvdXBNZXNzYWdlKHNvdXBNZXNz
YWdlKTsKICAgICAgICAgfQogCisgICAgICAgIHZvaWQgdXBkYXRlU291cE1lc3NhZ2UoU291cE1l
c3NhZ2UqIHNvdXBNZXNzYWdlKSBjb25zdDsKICAgICAgICAgU291cE1lc3NhZ2UqIHRvU291cE1l
c3NhZ2UoKSBjb25zdDsKICAgICAgICAgdm9pZCB1cGRhdGVGcm9tU291cE1lc3NhZ2UoU291cE1l
c3NhZ2UqIHNvdXBNZXNzYWdlKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcAppbmRleCA2MmRlYjAxLi4zODBmYzg0IDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RT
b3VwLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVl
c3RTb3VwLmNwcApAQCAtMzMsNiArMzMsMjkgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCit2b2lkIFJlc291cmNlUmVxdWVzdDo6dXBkYXRlU291cE1lc3Nh
Z2UoU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlKSBjb25zdAoreworICAgIGdfb2JqZWN0X3NldChz
b3VwTWVzc2FnZSwgU09VUF9NRVNTQUdFX01FVEhPRCwgaHR0cE1ldGhvZCgpLnV0ZjgoKS5kYXRh
KCksIE5VTEwpOworCisgICAgY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycyA9IGh0dHBIZWFk
ZXJGaWVsZHMoKTsKKyAgICBTb3VwTWVzc2FnZUhlYWRlcnMqIHNvdXBIZWFkZXJzID0gc291cE1l
c3NhZ2UtPnJlcXVlc3RfaGVhZGVyczsKKyAgICBpZiAoIWhlYWRlcnMuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRlcnMuZW5kKCk7
CisgICAgICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFk
ZXJzX2FwcGVuZChzb3VwSGVhZGVycywgaXQtPmZpcnN0LnN0cmluZygpLnV0ZjgoKS5kYXRhKCks
IGl0LT5zZWNvbmQudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCisjaWZkZWYgSEFWRV9MSUJTT1VQ
XzJfMjlfOTAKKyAgICBTdHJpbmcgZmlyc3RQYXJ0eVN0cmluZyA9IGZpcnN0UGFydHlGb3JDb29r
aWVzKCkuc3RyaW5nKCk7CisgICAgaWYgKCFmaXJzdFBhcnR5U3RyaW5nLmlzRW1wdHkoKSkgewor
ICAgICAgICBHT3duUHRyPFNvdXBVUkk+IGZpcnN0UGFydHkoc291cF91cmlfbmV3KGZpcnN0UGFy
dHlTdHJpbmcudXRmOCgpLmRhdGEoKSkpOworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X2ZpcnN0
X3BhcnR5KHNvdXBNZXNzYWdlLCBmaXJzdFBhcnR5LmdldCgpKTsKKyAgICB9CisjZW5kaWYKKwor
ICAgIHNvdXBfbWVzc2FnZV9zZXRfZmxhZ3Moc291cE1lc3NhZ2UsIG1fc291cEZsYWdzKTsKK30K
KwogU291cE1lc3NhZ2UqIFJlc291cmNlUmVxdWVzdDo6dG9Tb3VwTWVzc2FnZSgpIGNvbnN0CiB7
CiAgICAgU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlID0gc291cF9tZXNzYWdlX25ldyhodHRwTWV0
aG9kKCkudXRmOCgpLmRhdGEoKSwgdXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0tIAox
LjcuMQoK
</data>
<flag name="review"
          id="57858"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68505</attachid>
            <date>2010-09-23 02:03:48 -0700</date>
            <delta_ts>2010-09-29 09:54:37 -0700</delta_ts>
            <desc>Imported SoupURILoader to Webkit. New public API for HTTP cache</desc>
            <filename>0001-Imported-SoupURILoader-code-to-WebKit.-New-public-AP.patch</filename>
            <type>text/plain</type>
            <size>171161</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">RnJvbSA3ZDM0NDFiMjQ4NWZlOWRmYzg1MmExZDYzYWE0OTFlODA0ZmMzMDY0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTZXJnaW8gVmlsbGFyIFNlbmluIDxzdmlsbGFyQGlnYWxpYS5j
b20+CkRhdGU6IFdlZCwgMjIgU2VwIDIwMTAgMTA6MTY6NDQgKzAyMDAKU3ViamVjdDogW1BBVENI
IDEvMl0gSW1wb3J0ZWQgU291cFVSSUxvYWRlciBjb2RlIHRvIFdlYktpdC4gTmV3IHB1YmxpYyBB
UEkgZm9yIEhUVFAgY2FjaGUKCi0tLQogQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgIDEwICsKIEdOVW1ha2VmaWxlLmFtICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgICAxMCArLQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTkzICsrKwogV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIwICstCiAuLi4vc291cC9jYWNo
ZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uYyAgICAgICB8ICAxOTkgKysrCiAuLi4vc291
cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uaCAgICAgICB8ICAgNjEgKwogLi4u
L25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmMgICAgfCAgOTIxICsr
KysrKysrKysrCiAuLi4vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0u
aCAgICB8ICAgNzYgKwogLi4uL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5j
ICAgICAgICAgfCAgMjA1ICsrKwogLi4uL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Qt
ZGF0YS5oICAgICAgICAgfCAgIDUxICsKIC4uLi9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1
ZXN0LWZpbGUuYyAgICAgICAgIHwgIDMyMiArKysrCiAuLi4vbmV0d29yay9zb3VwL2NhY2hlL3Nv
dXAtcmVxdWVzdC1maWxlLmggICAgICAgICB8ICAgNTMgKwogLi4uL25ldHdvcmsvc291cC9jYWNo
ZS9zb3VwLXJlcXVlc3QtaHR0cC5jICAgICAgICAgfCAgMzM5ICsrKysKIC4uLi9uZXR3b3JrL3Nv
dXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuaCAgICAgICAgIHwgICA1MyArCiBXZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QuYyB8ICAyNzkgKysrKwogV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LmggfCAgIDkyICsr
CiAuLi4vcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmMgICB8ICAy
MDEgKysrCiAuLi4vcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmgg
ICB8ICAgODAgKwogLi4uL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS1wcml2
YXRlLmggfCAgIDQxICsKIC4uLi9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUu
YyAgICAgICAgIHwgMTY1MiArKysrKysrKysrKysrKysrKysrKwogLi4uL25ldHdvcmsvc291cC9j
YWNoZS93ZWJraXQvc291cC1jYWNoZS5oICAgICAgICAgfCAgIDk1ICsrCiBXZWJLaXRUb29scy9D
aGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDkgKwogV2ViS2l0VG9v
bHMvR05VbWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKIGF1dG90
b29scy93ZWJraXQubTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArLQog
MjQgZmlsZXMgY2hhbmdlZCwgNDk2MCBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAt
ZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmgKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3Vw
LWh0dHAtaW5wdXQtc3RyZWFtLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmgKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Qt
ZGF0YS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
Y2FjaGUvc291cC1yZXF1ZXN0LWRhdGEuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmMKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Qt
ZmlsZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
Y2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRwLmgKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Qu
YwogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3NvdXAtcmVxdWVzdC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmgKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291
cC1jYWNoZS1wcml2YXRlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUuaAoK
ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA4ZDlkNjU4Li43ODFlNWE1
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTAtMDktMDYgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gQWRk
IEhUVFAgY2FjaGluZyBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00NDI2MQorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IGFkZGVkIHBh
dGhzIGZvciBzb3VwIEhUVFAgY2FjaGUgY29kZQorICAgICAgICAqIGF1dG90b29scy93ZWJraXQu
bTQ6IHVwZ3JhZGVkIHJlcXVpcmVkIGdsaWIgdmVyc2lvbgorCiAyMDEwLTA5LTIyICBMdWNhcyBE
ZSBNYXJjaGkgIDxsdWNhcy5kZW1hcmNoaUBwcm9mdXNpb24ubW9iaT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBBbnRvbmlvIEdvbWVzLgpkaWZmIC0tZ2l0IGEvR05VbWFrZWZpbGUuYW0gYi9HTlVt
YWtlZmlsZS5hbQppbmRleCBjNzY5ZGIyLi5mMzkyN2RiIDEwMDY0NAotLS0gYS9HTlVtYWtlZmls
ZS5hbQorKysgYi9HTlVtYWtlZmlsZS5hbQpAQCAtMzAyLDI4ICszMDIsMjkgQEAgZ2xvYmFsX2Nw
cGZsYWdzICs9IFwKIGVuZGlmCiAKIHdlYmtpdGd0a19zdGF0aWNfaF9hcGkgKz0gXAorCSQoc3Jj
ZGlyKS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNo
ZS5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmggXAogCSQoc3JjZGly
KS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmggXAogCSQoc3JjZGlyKS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXRkb3dubG9hZC5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0ZXJyb3IuaCBcCisJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdl
b2xvY2F0aW9ucG9saWN5ZGVjaXNpb24uaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdGhpdHRlc3RyZXN1bHQuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdG5ldHdvcmtyZXF1ZXN0LmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXRuZXR3b3JrcmVzcG9uc2UuaCBcCisJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHNlY3VyaXR5b3JpZ2luLmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRz
b3VwYXV0aGRpYWxvZy5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vi
YmFja2ZvcndhcmRsaXN0LmggXAorCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3
ZWJkYXRhYmFzZS5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0
YXNvdXJjZS5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUu
aCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmhpc3RvcnlpdGVtLmgg
XAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJpbnNwZWN0b3IuaCBcCiAJ
JChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYm5hdmlnYXRpb25hY3Rpb24uaCBc
CiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBvbGljeWRlY2lzaW9uLmgg
XAotCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnZW9sb2NhdGlvbnBvbGljeWRl
Y2lzaW9uLmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJyZXNvdXJj
ZS5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vic2V0dGluZ3MuaCBc
CiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYndpbmRvd2ZlYXR1cmVzLmgg
XAotCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmggXAotCSQoc3Jj
ZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkYXRhYmFzZS5oIFwKLQkkKHNyY2Rpcikv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW4uaAorCSQoc3JjZGlyKS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmgKIAogd2Via2l0Z3RrX2J1aWx0X2hfYXBpICs9
IFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2ZXJzaW9uLmgKQEAgLTU0OCw2ICs1NDksNyBA
QCBub2luc3RfUFJPR1JBTVMgKz0gJChURVNUX1BST0dTKQogd2Via2l0X3Rlc3RzX2NmbGFncyA9
IFwKIAktZm5vLXN0cmljdC1hbGlhc2luZyBcCiAJLUkkKHNyY2RpcikvSmF2YVNjcmlwdENvcmUv
Rm9yd2FyZGluZ0hlYWRlcnMgXAorCS1JJChzcmNkaXIpL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL2NhY2hlIFwKIAktSSQoc3JjZGlyKS9XZWJLaXQvZ3RrIFwKIAktSSQodG9wX2J1aWxk
ZGlyKS9XZWJLaXQvZ3RrIFwKIAktSSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcyBcCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGEw
ODFjYWEuLjg0M2Y0ZmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNv
cmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTk2IEBACisyMDEwLTA5LTA2ICBTZXJnaW8gVmlsbGFy
IFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIEFkZCBIVFRQIGNhY2hpbmcgc3VwcG9ydAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQyNjEKKworICAg
ICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3Vy
Y2VIYW5kbGVJbnRlcm5hbC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVJbnRl
cm5hbDo6UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZUludGVybmFsOjp+UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZUhhbmRsZTo6flJlc291cmNlSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6
OnJlc3RhcnRlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmdvdENodW5rQ2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VEYXRhVXJsKToKKyAgICAgICAgKFdlYkNvcmU6OmNs
ZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpzZW5kUmVxdWVz
dENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OnN0YXJ0SHR0cCk6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdDo6dXBkYXRlU291cE1lc3NhZ2UpOgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uYzogQWRkZWQu
CisgICAgICAgIChzb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fcGFyc2VfaW5mbyk6CisgICAg
ICAgIChzb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fcmVhZF9uZXh0X2ZpbGUpOgorICAgICAg
ICAoc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX3JlYWQpOgorICAgICAgICAoc291cF9kaXJl
Y3RvcnlfaW5wdXRfc3RyZWFtX2Nsb3NlKToKKyAgICAgICAgKHNvdXBfZGlyZWN0b3J5X2lucHV0
X3N0cmVhbV9jbGFzc19pbml0KToKKyAgICAgICAgKHNvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVh
bV9pbml0KToKKyAgICAgICAgKHNvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9uZXcpOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1z
dHJlYW0uaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3Nv
dXAtaHR0cC1pbnB1dC1zdHJlYW0uYzogQWRkZWQuCisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX2ZpbmFsaXplKToKKyAgICAgICAgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xhc3Nf
aW5pdCk6CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlZWthYmxlX2lmYWNlX2lu
aXQpOgorICAgICAgICAoc291cF9odHRwX2lucHV0X3N0cmVhbV9pbml0KToKKyAgICAgICAgKHNv
dXBfaHR0cF9pbnB1dF9zdHJlYW1fcXVldWVfbWVzc2FnZSk6CisgICAgICAgIChzb3VwX2h0dHBf
aW5wdXRfc3RyZWFtX25ldyk6CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dvdF9o
ZWFkZXJzKToKKyAgICAgICAgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ290X2NodW5rKToKKyAg
ICAgICAgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZmluaXNoZWQpOgorICAgICAgICAoc291cF9o
dHRwX2lucHV0X3N0cmVhbV9jYW5jZWxsZWQpOgorICAgICAgICAoc291cF9odHRwX2lucHV0X3N0
cmVhbV9wcmVwYXJlX2Zvcl9pbyk6CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Rv
bmVfaW8pOgorICAgICAgICAoc2V0X2Vycm9yX2lmX2h0dHBfZmFpbGVkKToKKyAgICAgICAgKHJl
YWRfZnJvbV9sZWZ0b3Zlcik6CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRf
aW50ZXJuYWwpOgorICAgICAgICAoc2VuZF9zeW5jX2ZpbmlzaGVkKToKKyAgICAgICAgKHNvdXBf
aHR0cF9pbnB1dF9zdHJlYW1fc2VuZCk6CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFt
X3JlYWQpOgorICAgICAgICAoc291cF9odHRwX2lucHV0X3N0cmVhbV9jbG9zZSk6CisgICAgICAg
ICh3cmFwcGVyX2NhbGxiYWNrKToKKyAgICAgICAgKHNlbmRfYXN5bmNfdGhyZWFkKToKKyAgICAg
ICAgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luY19pbl90aHJlYWQpOgorICAgICAg
ICAoc2VuZF9hc3luY19maW5pc2hlZCk6CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFt
X3NlbmRfYXN5bmNfaW50ZXJuYWwpOgorICAgICAgICAoc291cF9odHRwX2lucHV0X3N0cmVhbV9z
ZW5kX2FzeW5jKToKKyAgICAgICAgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9maW5pc2gp
OgorICAgICAgICAocmVhZF9hc3luY19kb25lKToKKyAgICAgICAgKHNvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fcmVhZF9hc3luYyk6CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWRf
ZmluaXNoKToKKyAgICAgICAgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2VfYXN5bmMpOgor
ICAgICAgICAoc291cF9odHRwX2lucHV0X3N0cmVhbV9jbG9zZV9maW5pc2gpOgorICAgICAgICAo
c291cF9odHRwX2lucHV0X3N0cmVhbV90ZWxsKToKKyAgICAgICAgKHNvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fY2FuX3NlZWspOgorICAgICAgICAoc291cF9odHRwX2lucHV0X3N0cmVhbV9zZWVrKToK
KyAgICAgICAgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2FuX3RydW5jYXRlKToKKyAgICAgICAg
KHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fdHJ1bmNhdGUpOgorICAgICAgICAoc291cF9odHRwX2lu
cHV0X3N0cmVhbV9nZXRfbWVzc2FnZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3Vw
L2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0uaDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmM6IEFkZGVkLgorICAgICAg
ICAoc291cF9yZXF1ZXN0X2RhdGFfaW5pdCk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfZGF0YV9m
aW5hbGl6ZSk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfZGF0YV9jaGVja191cmkpOgorICAgICAg
ICAodXJpX2RlY29kZWRfY29weSk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfZGF0YV9zZW5kKToK
KyAgICAgICAgKHNvdXBfcmVxdWVzdF9kYXRhX2dldF9jb250ZW50X2xlbmd0aCk6CisgICAgICAg
IChzb3VwX3JlcXVlc3RfZGF0YV9nZXRfY29udGVudF90eXBlKToKKyAgICAgICAgKHNvdXBfcmVx
dWVzdF9kYXRhX2NsYXNzX2luaXQpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9j
YWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWZpbGUuYzogQWRkZWQuCisgICAgICAgIChzb3Vw
X3JlcXVlc3RfZmlsZV9nZXRfZmlsZSk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfZmlsZV9pbml0
KToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9maWxlX2ZpbmFsaXplKToKKyAgICAgICAgKHNvdXBf
cmVxdWVzdF9maWxlX2NoZWNrX3VyaSk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfZmlsZV9mdHBf
bWFpbl9sb29wX3F1aXQpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2ZpbGVfZW5zdXJlX2ZpbGVf
ZnRwKToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9maWxlX2Vuc3VyZV9maWxlKToKKyAgICAgICAg
KHNvdXBfcmVxdWVzdF9maWxlX3NlbmQpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2ZpbGVfc2Vu
ZF9hc3luY190aHJlYWQpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2ZpbGVfc2VuZF9hc3luYyk6
CisgICAgICAgIChzb3VwX3JlcXVlc3RfZmlsZV9zZW5kX2ZpbmlzaCk6CisgICAgICAgIChzb3Vw
X3JlcXVlc3RfZmlsZV9nZXRfY29udGVudF9sZW5ndGgpOgorICAgICAgICAoc291cF9yZXF1ZXN0
X2ZpbGVfZ2V0X2NvbnRlbnRfdHlwZSk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfZmlsZV9jbGFz
c19pbml0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1
ZXN0LWZpbGUuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3NvdXAtcmVxdWVzdC1odHRwLmM6IEFkZGVkLgorICAgICAgICAoc291cF9yZXF1ZXN0X2h0dHBf
Z2V0X21lc3NhZ2UpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2h0dHBfaW5pdCk6CisgICAgICAg
IChzb3VwX3JlcXVlc3RfaHR0cF9jaGVja191cmkpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2h0
dHBfZmluYWxpemUpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2h0dHBfc2VuZCk6CisgICAgICAg
IChzZW50X2FzeW5jKToKKyAgICAgICAgKGNvbmRpdGlvbmFsX2dldF9yZWFkeV9jYik6CisgICAg
ICAgIChzZW5kX2FzeW5jX2NiKToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9odHRwX3NlbmRfYXN5
bmMpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2h0dHBfc2VuZF9maW5pc2gpOgorICAgICAgICAo
c291cF9yZXF1ZXN0X2h0dHBfZ2V0X2NvbnRlbnRfbGVuZ3RoKToKKyAgICAgICAgKHNvdXBfcmVx
dWVzdF9odHRwX2dldF9jb250ZW50X3R5cGUpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2h0dHBf
Y2xhc3NfaW5pdCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAt
cmVxdWVzdC1odHRwLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9j
YWNoZS9zb3VwLXJlcXVlc3QuYzogQWRkZWQuCisgICAgICAgIChzb3VwX3JlcXVlc3RfaW5pdCk6
CisgICAgICAgIChzb3VwX3JlcXVlc3RfZmluYWxpemUpOgorICAgICAgICAoc291cF9yZXF1ZXN0
X3NldF9wcm9wZXJ0eSk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfZ2V0X3Byb3BlcnR5KToKKyAg
ICAgICAgKHNvdXBfcmVxdWVzdF9pbml0YWJsZV9pbml0KToKKyAgICAgICAgKHNvdXBfcmVxdWVz
dF9kZWZhdWx0X2NoZWNrX3VyaSk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfZGVmYXVsdF9zZW5k
X2FzeW5jKToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9kZWZhdWx0X3NlbmRfZmluaXNoKToKKyAg
ICAgICAgKHNvdXBfcmVxdWVzdF9zZW5kKToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9zZW5kX2Fz
eW5jKToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9zZW5kX2ZpbmlzaCk6CisgICAgICAgIChzb3Vw
X3JlcXVlc3RfY2xhc3NfaW5pdCk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfaW5pdGFibGVfaW50
ZXJmYWNlX2luaXQpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2dldF91cmkpOgorICAgICAgICAo
c291cF9yZXF1ZXN0X2dldF9zZXNzaW9uKToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9nZXRfY29u
dGVudF9sZW5ndGgpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2dldF9jb250ZW50X3R5cGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QuaDogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVy
LmM6IEFkZGVkLgorICAgICAgICAoc291cF9yZXF1ZXN0ZXJfaW5pdCk6CisgICAgICAgIChmaW5h
bGl6ZSk6CisgICAgICAgIChzb3VwX3JlcXVlc3Rlcl9jbGFzc19pbml0KToKKyAgICAgICAgKGlu
aXRfcmVxdWVzdF90eXBlcyk6CisgICAgICAgIChzb3VwX3JlcXVlc3Rlcl9uZXcpOgorICAgICAg
ICAoc291cF9yZXF1ZXN0ZXJfcmVxdWVzdCk6CisgICAgICAgIChzb3VwX3JlcXVlc3Rlcl9yZXF1
ZXN0X3VyaSk6CisgICAgICAgIChzb3VwX3NjaGVtZV9pc192YWxpZCk6CisgICAgICAgIChzb3Vw
X3JlcXVlc3Rlcl9hZGRfcHJvdG9jb2wpOgorICAgICAgICAoc291cF9yZXF1ZXN0ZXJfcmVtb3Zl
X3Byb3RvY29sKToKKyAgICAgICAgKHNvdXBfZXJyb3JfcXVhcmspOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Rlci5oOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUtcHJpdmF0ZS5o
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3Nv
dXAtY2FjaGUuYzogQWRkZWQuCisgICAgICAgIChnZXRfY2FjaGVhYmlsaXR5KToKKyAgICAgICAg
KHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUpOgorICAgICAgICAoY29weV9oZWFkZXJzKToK
KyAgICAgICAgKHVwZGF0ZV9oZWFkZXJzKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2Vu
dHJ5X2dldF9jdXJyZW50X2FnZSk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9p
c19mcmVzaF9lbm91Z2gpOgorICAgICAgICAoc291cF9tZXNzYWdlX2dldF9jYWNoZV9rZXkpOgor
ICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfZW50cnlfc2V0X2ZyZXNobmVzcyk6CisgICAgICAg
ICh3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9uZXcpOgorICAgICAgICAod2Via2l0X3NvdXBfY2Fj
aGVfd3JpdGluZ19maXh0dXJlX2ZyZWUpOgorICAgICAgICAoY2xvc2VfcmVhZHlfY2IpOgorICAg
ICAgICAod3JpdGVfcmVhZHlfY2IpOgorICAgICAgICAobXNnX2dvdF9jaHVua19jYik6CisgICAg
ICAgIChtc2dfZ290X2JvZHlfY2IpOgorICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfZW50cnlf
ZGVsZXRlKToKKyAgICAgICAgKGxydV9jb21wYXJlX2Z1bmMpOgorICAgICAgICAoY2FjaGVfYWNj
ZXB0c19lbnRyaWVzX29mX3NpemUpOgorICAgICAgICAobWFrZV9yb29tX2Zvcl9uZXdfZW50cnkp
OgorICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfZW50cnlfaW5zZXJ0X2J5X2tleSk6CisgICAg
ICAgIChtc2dfcmVzdGFydGVkX2NiKToKKyAgICAgICAgKGFwcGVuZF90b19yZWFkeV9jYik6Cisg
ICAgICAgIChtc2dfZ290X2hlYWRlcnNfY2IpOgorICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVf
c2VuZF9yZXNwb25zZSk6CisgICAgICAgIChyZXF1ZXN0X3N0YXJ0ZWQpOgorICAgICAgICAoYXR0
YWNoKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX3Nlc3Npb25fZmVhdHVyZV9pbml0KToK
KyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2luaXQpOgorICAgICAgICAod2Via2l0X3NvdXBf
Y2FjaGVfZmluYWxpemUpOgorICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfc2V0X3Byb3BlcnR5
KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2dldF9wcm9wZXJ0eSk6CisgICAgICAgICh3
ZWJraXRfc291cF9jYWNoZV9jb25zdHJ1Y3RlZCk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNo
ZV90eXBlX2dldF90eXBlKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2NsYXNzX2luaXQp
OgorICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfbmV3KToKKyAgICAgICAgKHdlYmtpdF9zb3Vw
X2NhY2hlX2hhc19yZXNwb25zZSk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9nZXRfY2Fj
aGVhYmlsaXR5KToKKyAgICAgICAgKGZvcmNlX2ZsdXNoX3RpbWVvdXQpOgorICAgICAgICAod2Vi
a2l0X3NvdXBfY2FjaGVfZmx1c2gpOgorICAgICAgICAocmVtb3ZlX2NhY2hlX2l0ZW0pOgorICAg
ICAgICAod2Via2l0X3NvdXBfY2FjaGVfY2xlYXIpOgorICAgICAgICAod2Via2l0X3NvdXBfY2Fj
aGVfZ2VuZXJhdGVfY29uZGl0aW9uYWxfcmVxdWVzdCk6CisgICAgICAgIChwYWNrX2VudHJ5KToK
KyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2R1bXApOgorICAgICAgICAod2Via2l0X3NvdXBf
Y2FjaGVfbG9hZCk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9zZXRfbWF4X3NpemUpOgor
ICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfZ2V0X21heF9zaXplKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUuaDogQWRkZWQuCisKIDIw
MTAtMDktMjIgIEt3YW5nIFl1bCBTZW8gIDxza3l1bEBjb21wYW55MTAwLm5ldD4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggZTcyNjViNi4uZjZkOGIyZSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCkBAIC03OSw3ICs3OSw5IEBAIHdlYmNvcmVndGtfY3BwZmxhZ3MgKz0gXAogCS1JJChzcmNk
aXIpL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyIFwKIAktSSQoc3JjZGlyKS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ayBcCiAJLUkkKHNyY2RpcikvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsgXAotCS1JJChzcmNkaXIpL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwCisJ
LUkkKHNyY2RpcikvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAgXAorCS1JJChzcmNkaXIp
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlIFwKKwktSSQoc3JjZGlyKS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQKIAogd2ViY29yZV9idWlsdF9u
b3NvdXJjZXMgKz0gXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvRG9jVHlwZVN0cmluZ3MuY3Bw
IFwKQEAgLTM0ODMsNiArMzQ4NSwyMiBAQCB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUVycm9yLmggXAogCVdlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZS5oIFwKIAlXZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGVTb3VwLmNwcCBcCisJV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFt
LmMgXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtZGlyZWN0b3J5
LWlucHV0LXN0cmVhbS5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9z
b3VwLWh0dHAtaW5wdXQtc3RyZWFtLmMgXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3Vw
L2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0uaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWRhdGEuYyBcCisJV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWRhdGEuaCBcCisJV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWZpbGUuYyBcCisJV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWZpbGUuaCBcCisJV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuYyBcCisJV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuaCBcCisJV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LmMgXAorCVdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5oIFwKKwlXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Rlci5jIFwKKwlXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Rlci5oIFwKKwlXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5jIFwKKwlXZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5oIFwKIAlX
ZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFHdGsuY3BwIFwKIAlXZWJDb3JlL3BsdWdpbnMv
Z3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwIFwKIAlXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZp
ZXdHdGsuY3BwCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNo
ZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uYyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL2NhY2hlL3NvdXAtZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5jCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyM2FjNmYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0u
YwpAQCAtMCwwICsxLDE5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBSZWQgSGF0LCBJ
bmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJ
R19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgInNvdXAtZGlyZWN0
b3J5LWlucHV0LXN0cmVhbS5oIgorCisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CisjaW5jbHVk
ZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2RlZmluZSBJTklUX1NUUklORyAi
PGh0bWw+PGhlYWQ+PHRpdGxlPk9NRyE8L3RpdGxlPjwvaGVhZD48Ym9keT48dGFibGU+IgorI2Rl
ZmluZSBFWElUX1NUUklORyAiPC90YWJsZT48L2h0bWw+IgorCitHX0RFRklORV9UWVBFIChTb3Vw
RGlyZWN0b3J5SW5wdXRTdHJlYW0sIHNvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbSwgR19UWVBF
X0lOUFVUX1NUUkVBTSkKKworc3RhdGljIFNvdXBCdWZmZXIgKgorc291cF9kaXJlY3RvcnlfaW5w
dXRfc3RyZWFtX3BhcnNlX2luZm8gKFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbSAqIHN0cmVhbSwK
KwkJCQkJR0ZpbGVJbmZvICogaW5mbykKK3sKKwlTb3VwQnVmZmVyICpidWZmZXI7CisJR1N0cmlu
ZyAqc3RyaW5nOworCWNvbnN0IGNoYXIgKnM7CisJY2hhciAqZXNjYXBlZCwgKnBhdGgsICp4bWxf
c3RyaW5nOworCisJaWYgKCFnX2ZpbGVfaW5mb19nZXRfbmFtZSAoaW5mbykpCisJCXJldHVybiBO
VUxMOworCisJcyA9IGdfZmlsZV9pbmZvX2dldF9kaXNwbGF5X25hbWUgKGluZm8pOworCWlmICgh
cykgeworCQlzID0gZ19maWxlX2luZm9fZ2V0X25hbWUgKGluZm8pOworCQkvKiBGSVhNRTogY29u
dmVydCBzb21laG93PyAqLworCQlpZiAoIWdfdXRmOF92YWxpZGF0ZSAocywgLTEsIE5VTEwpKQor
CQkJcmV0dXJuIE5VTEw7CisJfQorCXN0cmluZyA9IGdfc3RyaW5nX25ldyAoIjx0cj4iKTsKKwor
CXhtbF9zdHJpbmcgPSBnX21hcmt1cF9lc2NhcGVfdGV4dCAocywgLTEpOworCWVzY2FwZWQgPSBn
X3VyaV9lc2NhcGVfc3RyaW5nIChnX2ZpbGVfaW5mb19nZXRfbmFtZSAoaW5mbyksIE5VTEwsIEZB
TFNFKTsKKwlwYXRoID0gZ19zdHJjb25jYXQgKHN0cmVhbS0+dXJpLCAiLyIsIGVzY2FwZWQsIE5V
TEwpOworCWdfZnJlZSAoZXNjYXBlZCk7CisJZ19zdHJpbmdfYXBwZW5kX3ByaW50ZiAoc3RyaW5n
LCAiPHRkPjxhIGhyZWY9XCIlc1wiPiVzPC9hPjwvdGQ+IiwgcGF0aCwgeG1sX3N0cmluZyk7CisJ
Z19mcmVlIChwYXRoKTsKKwlnX2ZyZWUgKHhtbF9zdHJpbmcpOworCWdfc3RyaW5nX2FwcGVuZCAo
c3RyaW5nLCAiPC90cj4iKTsKKworCWJ1ZmZlciA9IHNvdXBfYnVmZmVyX25ldyAoU09VUF9NRU1P
UllfVEFLRSwgc3RyaW5nLT5zdHIsIHN0cmluZy0+bGVuKTsKKwlnX3N0cmluZ19mcmVlIChzdHJp
bmcsIEZBTFNFKTsKKworCXJldHVybiBidWZmZXI7Cit9CisKK3N0YXRpYyBTb3VwQnVmZmVyICoK
K3NvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9yZWFkX25leHRfZmlsZSAoU291cERpcmVjdG9y
eUlucHV0U3RyZWFtICAqc3RyZWFtLAorCQkJCQkgICAgR0NhbmNlbGxhYmxlICAgICAgICAgICAg
ICAqY2FuY2VsbGFibGUsCisJCQkJCSAgICBHRXJyb3IgICAgICAgICAgICAgICAgICAgKiplcnJv
cikKK3sKKwlHRmlsZUluZm8gKmluZm87CisJU291cEJ1ZmZlciAqYnVmZmVyOworCUdFcnJvciAq
ZXJyID0gTlVMTDsKKworCWRvIHsKKwkJaW5mbyA9IGdfZmlsZV9lbnVtZXJhdG9yX25leHRfZmls
ZSAoc3RyZWFtLT5lbnVtZXJhdG9yLCBjYW5jZWxsYWJsZSwgJmVycik7CisJCWlmIChpbmZvID09
IE5VTEwpIHsKKwkJCWlmIChlcnIpIHsKKwkJCQlnX3Byb3BhZ2F0ZV9lcnJvciAoZXJyb3IsIGVy
cik7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9IGVsc2UgaWYgKCFzdHJlYW0tPmRvbmUpIHsKKwkJ
CQlzdHJlYW0tPmRvbmUgPSBUUlVFOworCQkJCXJldHVybiBzb3VwX2J1ZmZlcl9uZXcgKFNPVVBf
TUVNT1JZX1NUQVRJQywKKwkJCQkJCQlFWElUX1NUUklORywKKwkJCQkJCQlzaXplb2YgKEVYSVRf
U1RSSU5HKSk7CisJCQl9IGVsc2UgeworCQkJCXJldHVybiBOVUxMOworCQkJfQorCQl9CisKKwkJ
YnVmZmVyID0gc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX3BhcnNlX2luZm8gKHN0cmVhbSwg
aW5mbyk7CisJfSB3aGlsZSAoYnVmZmVyID09IE5VTEwpOworCisJcmV0dXJuIGJ1ZmZlcjsKK30K
Kworc3RhdGljIGdzc2l6ZQorc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX3JlYWQgKEdJbnB1
dFN0cmVhbSAgKmlucHV0LAorCQkJCSAgdm9pZCAgICAgICAgICAqYnVmZmVyLAorCQkJCSAgZ3Np
emUgY291bnQsCisJCQkJICBHQ2FuY2VsbGFibGUgICpjYW5jZWxsYWJsZSwKKwkJCQkgIEdFcnJv
ciAgICAgICAqKmVycm9yKQoreworCVNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbSAqc3RyZWFtID0g
U09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNIChpbnB1dCk7CisJZ3NzaXplIHRvdGFsLCBzaXpl
OworCisJZm9yICh0b3RhbCA9IDA7IHRvdGFsIDwgY291bnQ7IHRvdGFsICs9IHNpemUpIHsKKwkJ
aWYgKHN0cmVhbS0+YnVmZmVyID09IE5VTEwpIHsKKwkJCXN0cmVhbS0+YnVmZmVyID0gc291cF9k
aXJlY3RvcnlfaW5wdXRfc3RyZWFtX3JlYWRfbmV4dF9maWxlIChzdHJlYW0sIGNhbmNlbGxhYmxl
LCBlcnJvcik7CisJCQlpZiAoc3RyZWFtLT5idWZmZXIgPT0gTlVMTCkgeworCQkJCS8qIEZJWE1F
OiBJcyB0aGlzIGNvcnJlY3Qgb3Igc2hvdWxkIHdlIGZvcndhcmQgdGhlIGVycm9yPyAqLworCQkJ
CWlmICh0b3RhbCkKKwkJCQkJZ19jbGVhcl9lcnJvciAoZXJyb3IpOworCQkJCXJldHVybiB0b3Rh
bDsKKwkJCX0KKwkJfQorCisJCXNpemUgPSBNSU4gKHN0cmVhbS0+YnVmZmVyLT5sZW5ndGgsIGNv
dW50IC0gdG90YWwpOworCQltZW1jcHkgKChjaGFyICopYnVmZmVyICsgdG90YWwsIHN0cmVhbS0+
YnVmZmVyLT5kYXRhLCBzaXplKTsKKwkJaWYgKHNpemUgPT0gc3RyZWFtLT5idWZmZXItPmxlbmd0
aCkgeworCQkJc291cF9idWZmZXJfZnJlZSAoc3RyZWFtLT5idWZmZXIpOworCQkJc3RyZWFtLT5i
dWZmZXIgPSBOVUxMOworCQl9IGVsc2UgeworCQkJU291cEJ1ZmZlciAqc3ViID0gc291cF9idWZm
ZXJfbmV3X3N1YmJ1ZmZlciAoc3RyZWFtLT5idWZmZXIsCisJCQkJCQkJCSAgICAgc2l6ZSwKKwkJ
CQkJCQkJICAgICBzdHJlYW0tPmJ1ZmZlci0+bGVuZ3RoIC0gc2l6ZSk7CisJCQlzb3VwX2J1ZmZl
cl9mcmVlIChzdHJlYW0tPmJ1ZmZlcik7CisJCQlzdHJlYW0tPmJ1ZmZlciA9IHN1YjsKKwkJfQor
CX0KKworCXJldHVybiB0b3RhbDsKK30KKworc3RhdGljIGdib29sZWFuCitzb3VwX2RpcmVjdG9y
eV9pbnB1dF9zdHJlYW1fY2xvc2UgKEdJbnB1dFN0cmVhbSAgKmlucHV0LAorCQkJCSAgIEdDYW5j
ZWxsYWJsZSAgKmNhbmNlbGxhYmxlLAorCQkJCSAgIEdFcnJvciAgICAgICAqKmVycm9yKQorewor
CVNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbSAqc3RyZWFtID0gU09VUF9ESVJFQ1RPUllfSU5QVVRf
U1RSRUFNIChpbnB1dCk7CisJZ2Jvb2xlYW4gcmVzdWx0OworCisJaWYgKHN0cmVhbS0+YnVmZmVy
KSB7CisJCXNvdXBfYnVmZmVyX2ZyZWUgKHN0cmVhbS0+YnVmZmVyKTsKKwkJc3RyZWFtLT5idWZm
ZXIgPSBOVUxMOworCX0KKworCXJlc3VsdCA9IGdfZmlsZV9lbnVtZXJhdG9yX2Nsb3NlIChzdHJl
YW0tPmVudW1lcmF0b3IsCisJCQkJCSAgY2FuY2VsbGFibGUsCisJCQkJCSAgZXJyb3IpOworCWdf
b2JqZWN0X3VucmVmIChzdHJlYW0tPmVudW1lcmF0b3IpOworCXN0cmVhbS0+ZW51bWVyYXRvciA9
IE5VTEw7CisKKwlnX2ZyZWUgKHN0cmVhbS0+dXJpKTsKKwlzdHJlYW0tPnVyaSA9IE5VTEw7CisK
KwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorc291cF9kaXJlY3RvcnlfaW5wdXRf
c3RyZWFtX2NsYXNzX2luaXQgKFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbUNsYXNzICpzdHJlYW1f
Y2xhc3MpCit7CisJR0lucHV0U3RyZWFtQ2xhc3MgKmlucHV0c3RyZWFtX2NsYXNzID0gR19JTlBV
VF9TVFJFQU1fQ0xBU1MgKHN0cmVhbV9jbGFzcyk7CisKKwlpbnB1dHN0cmVhbV9jbGFzcy0+cmVh
ZF9mbiA9IHNvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9yZWFkOworCWlucHV0c3RyZWFtX2Ns
YXNzLT5jbG9zZV9mbiA9IHNvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9jbG9zZTsKK30KKwor
c3RhdGljIHZvaWQKK3NvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9pbml0IChTb3VwRGlyZWN0
b3J5SW5wdXRTdHJlYW0gKnN0cmVhbSkKK3sKKwlzdHJlYW0tPmJ1ZmZlciA9IHNvdXBfYnVmZmVy
X25ldyAoU09VUF9NRU1PUllfU1RBVElDLAorCQkJCQkgIElOSVRfU1RSSU5HLAorCQkJCQkgIHNp
emVvZiAoSU5JVF9TVFJJTkcpKTsKK30KKworR0lucHV0U3RyZWFtICoKK3NvdXBfZGlyZWN0b3J5
X2lucHV0X3N0cmVhbV9uZXcgKEdGaWxlRW51bWVyYXRvciAqZW51bWVyYXRvciwKKwkJCQkgU291
cFVSSSAgICAgICAgICp1cmkpCit7CisJR0lucHV0U3RyZWFtICpzdHJlYW07CisKKwlnX3JldHVy
bl92YWxfaWZfZmFpbCAoR19JU19GSUxFX0VOVU1FUkFUT1IgKGVudW1lcmF0b3IpLCBOVUxMKTsK
KwlnX3JldHVybl92YWxfaWZfZmFpbCAodXJpICE9IE5VTEwsIE5VTEwpOworCisJc3RyZWFtID0g
Z19vYmplY3RfbmV3IChTT1VQX1RZUEVfRElSRUNUT1JZX0lOUFVUX1NUUkVBTSwgTlVMTCk7CisK
KwlTT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0gKHN0cmVhbSktPmVudW1lcmF0b3IgPSBnX29i
amVjdF9yZWYgKGVudW1lcmF0b3IpOworCVNPVVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTSAoc3Ry
ZWFtKS0+dXJpID0gc291cF91cmlfdG9fc3RyaW5nICh1cmksIEZBTFNFKTsKKworCXJldHVybiBz
dHJlYW07Cit9CisKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2Nh
Y2hlL3NvdXAtZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQzMjNkMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtZGlyZWN0b3J5LWlucHV0LXN0cmVh
bS5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUmVkIEhhdCwg
SW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFNPVVBfRElS
RUNUT1JZX0lOUFVUX1NUUkVBTV9ICisjZGVmaW5lIFNPVVBfRElSRUNUT1JZX0lOUFVUX1NUUkVB
TV9IIDEKKworI2luY2x1ZGUgPGdpby9naW8uaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAtdHlw
ZXMuaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAtbWVzc2FnZS1ib2R5Lmg+CisKK0dfQkVHSU5f
REVDTFMKKworI2RlZmluZSBTT1VQX1RZUEVfRElSRUNUT1JZX0lOUFVUX1NUUkVBTSAgICAgICAg
ICAgIChzb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fZ2V0X3R5cGUgKCkpCisjZGVmaW5lIFNP
VVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9DQVNUICgob2JqKSwgU09VUF9UWVBFX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0sIFNv
dXBEaXJlY3RvcnlJbnB1dFN0cmVhbSkpCisjZGVmaW5lIFNPVVBfRElSRUNUT1JZX0lOUFVUX1NU
UkVBTV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBT
T1VQX1RZUEVfRElSRUNUT1JZX0lOUFVUX1NUUkVBTSwgU291cERpcmVjdG9yeUlucHV0U3RyZWFt
Q2xhc3MpKQorI2RlZmluZSBTT1VQX0lTX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0ob2JqKSAgICAg
ICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIFNPVVBfVFlQRV9ESVJFQ1RP
UllfSU5QVVRfU1RSRUFNKSkKKyNkZWZpbmUgU09VUF9JU19ESVJFQ1RPUllfSU5QVVRfU1RSRUFN
X0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChvYmopLCBTT1VQX1RZUEVf
RElSRUNUT1JZX0lOUFVUX1NUUkVBTSkpCisjZGVmaW5lIFNPVVBfRElSRUNUT1JZX0lOUFVUX1NU
UkVBTV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBT
T1VQX1RZUEVfRElSRUNUT1JZX0lOUFVUX1NUUkVBTSwgU291cERpcmVjdG9yeUlucHV0U3RyZWFt
Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfU291cERpcmVjdG9yeUlucHV0U3RyZWFtIFNvdXBE
aXJlY3RvcnlJbnB1dFN0cmVhbTsKK3R5cGVkZWYgc3RydWN0IF9Tb3VwRGlyZWN0b3J5SW5wdXRT
dHJlYW1DbGFzcyBTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW1DbGFzczsKKworc3RydWN0IF9Tb3Vw
RGlyZWN0b3J5SW5wdXRTdHJlYW0geworCUdJbnB1dFN0cmVhbSBwYXJlbnQ7CisKKwlHRmlsZUVu
dW1lcmF0b3IgKmVudW1lcmF0b3I7CisJY2hhciAqdXJpOworCVNvdXBCdWZmZXIgKmJ1ZmZlcjsK
KwlnYm9vbGVhbiBkb25lOworfTsKKworc3RydWN0IF9Tb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW1D
bGFzcyB7CisJR0lucHV0U3RyZWFtQ2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworR1R5cGUgICAg
ICAgICAgc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX2dldF90eXBlICh2b2lkKTsKKworR0lu
cHV0U3RyZWFtICpzb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fbmV3IChHRmlsZUVudW1lcmF0
b3IgKmVudW1lcmF0b3IsCisJCQkJCSAgICAgICBTb3VwVVJJICAgICAgICAgKnVyaSk7CisKKwor
R19FTkRfREVDTFMKKworI2VuZGlmIC8qIFNPVVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTV9IICov
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0
dHAtaW5wdXQtc3RyZWFtLmMgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9z
b3VwLWh0dHAtaW5wdXQtc3RyZWFtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYWIyMTZiNgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0uYwpAQCAtMCwwICsxLDkyMSBAQAorLyog
c291cC1pbnB1dC1zdHJlYW0uYywgYmFzZWQgb24gZ3NvY2tldGlucHV0c3RyZWFtLmMKKyAqCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNyBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgKiBQdWJsaWMgTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAs
CisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8Y29uZmln
Lmg+CisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRl
IDxnaW8vZ2lvLmg+CisKKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKworI2luY2x1ZGUgInNv
dXAtaHR0cC1pbnB1dC1zdHJlYW0uaCIKKworc3RhdGljIHZvaWQgc291cF9odHRwX2lucHV0X3N0
cmVhbV9zZWVrYWJsZV9pZmFjZV9pbml0IChHU2Vla2FibGVJZmFjZSAqc2Vla2FibGVfaWZhY2Up
OworCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoU291cEhUVFBJbnB1dFN0cmVhbSwgc291cF9o
dHRwX2lucHV0X3N0cmVhbSwgR19UWVBFX0lOUFVUX1NUUkVBTSwKKwkJCSBHX0lNUExFTUVOVF9J
TlRFUkZBQ0UgKEdfVFlQRV9TRUVLQUJMRSwKKwkJCQkJCXNvdXBfaHR0cF9pbnB1dF9zdHJlYW1f
c2Vla2FibGVfaWZhY2VfaW5pdCkpCisKK3R5cGVkZWYgdm9pZCAoKlNvdXBIVFRQSW5wdXRTdHJl
YW1DYWxsYmFjaykoR0lucHV0U3RyZWFtICopOworCit0eXBlZGVmIHN0cnVjdCB7CisJU291cFNl
c3Npb24gKnNlc3Npb247CisJR01haW5Db250ZXh0ICphc3luY19jb250ZXh0OworCVNvdXBNZXNz
YWdlICptc2c7CisJZ2Jvb2xlYW4gZ290X2hlYWRlcnMsIGZpbmlzaGVkOworCWdvZmZzZXQgb2Zm
c2V0OworCisJR0NhbmNlbGxhYmxlICpjYW5jZWxsYWJsZTsKKwlHU291cmNlICpjYW5jZWxfd2F0
Y2g7CisJU291cEhUVFBJbnB1dFN0cmVhbUNhbGxiYWNrIGdvdF9oZWFkZXJzX2NiOworCVNvdXBI
VFRQSW5wdXRTdHJlYW1DYWxsYmFjayBnb3RfY2h1bmtfY2I7CisJU291cEhUVFBJbnB1dFN0cmVh
bUNhbGxiYWNrIGZpbmlzaGVkX2NiOworCVNvdXBIVFRQSW5wdXRTdHJlYW1DYWxsYmFjayBjYW5j
ZWxsZWRfY2I7CisKKwlndWNoYXIgKmxlZnRvdmVyX2J1ZmZlcjsKKwlnc2l6ZSBsZWZ0b3Zlcl9i
dWZzaXplLCBsZWZ0b3Zlcl9vZmZzZXQ7CisKKwlndWNoYXIgKmNhbGxlcl9idWZmZXI7CisJZ3Np
emUgY2FsbGVyX2J1ZnNpemUsIGNhbGxlcl9ucmVhZDsKKwlHQXN5bmNSZWFkeUNhbGxiYWNrIG91
dHN0YW5kaW5nX2NhbGxiYWNrOworCUdTaW1wbGVBc3luY1Jlc3VsdCAqcmVzdWx0OworfSBTb3Vw
SFRUUElucHV0U3RyZWFtUHJpdmF0ZTsKKyNkZWZpbmUgU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9H
RVRfUFJJVkFURShvKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFICgobyksIFNPVVBfVFlQ
RV9IVFRQX0lOUFVUX1NUUkVBTSwgU291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUpKQorCisKK3N0
YXRpYyBnc3NpemUgICBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWQgKEdJbnB1dFN0cmVhbSAg
ICAgICAgICpzdHJlYW0sCisJCQkJCSAgICAgdm9pZCAgICAgICAgICAgICAgICAgKmJ1ZmZlciwK
KwkJCQkJICAgICBnc2l6ZSBjb3VudCwKKwkJCQkJICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAq
Y2FuY2VsbGFibGUsCisJCQkJCSAgICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKTsKK3N0
YXRpYyBnYm9vbGVhbiBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlIChHSW5wdXRTdHJlYW0g
ICAgICAgICAqc3RyZWFtLAorCQkJCQkgICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2Vs
bGFibGUsCisJCQkJCSAgICAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcik7CitzdGF0aWMg
dm9pZCAgICAgc291cF9odHRwX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jIChHSW5wdXRTdHJlYW0g
ICAgICAgICAqc3RyZWFtLAorCQkJCQkJICAgdm9pZCAgICAgICAgICAgICAgICAgKmJ1ZmZlciwK
KwkJCQkJCSAgIGdzaXplIGNvdW50LAorCQkJCQkJICAgaW50IGlvX3ByaW9yaXR5LAorCQkJCQkJ
ICAgR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJCQkJICAgR0FzeW5jUmVh
ZHlDYWxsYmFjayBjYWxsYmFjaywKKwkJCQkJCSAgIGdwb2ludGVyIGRhdGEpOworc3RhdGljIGdz
c2l6ZSAgIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVhZF9maW5pc2ggKEdJbnB1dFN0cmVhbSAg
ICAgICAgICpzdHJlYW0sCisJCQkJCQkgICAgR0FzeW5jUmVzdWx0ICAgICAgICAgKnJlc3VsdCwK
KwkJCQkJCSAgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpOworc3RhdGljIHZvaWQgICAg
IHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2VfYXN5bmMgKEdJbnB1dFN0cmVhbSAgICAgICAg
ICpzdHJlYW0sCisJCQkJCQkgICAgaW50IGlvX3ByaW9yaXR5LAorCQkJCQkJICAgIEdDYW5jZWxs
YWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkJCSAgICBHQXN5bmNSZWFkeUNhbGxiYWNr
IGNhbGxiYWNrLAorCQkJCQkJICAgIGdwb2ludGVyIGRhdGEpOworc3RhdGljIGdib29sZWFuIHNv
dXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2VfZmluaXNoIChHSW5wdXRTdHJlYW0gICAgICAgICAq
c3RyZWFtLAorCQkJCQkJICAgICBHQXN5bmNSZXN1bHQgICAgICAgICAqcmVzdWx0LAorCQkJCQkJ
ICAgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpOworCitzdGF0aWMgZ29mZnNldCAgc291
cF9odHRwX2lucHV0X3N0cmVhbV90ZWxsIChHU2Vla2FibGUgICAgICAgICAgICAqc2Vla2FibGUp
OworCitzdGF0aWMgZ2Jvb2xlYW4gc291cF9odHRwX2lucHV0X3N0cmVhbV9jYW5fc2VlayAoR1Nl
ZWthYmxlICAgICAgICAgICAgKnNlZWthYmxlKTsKK3N0YXRpYyBnYm9vbGVhbiBzb3VwX2h0dHBf
aW5wdXRfc3RyZWFtX3NlZWsgKEdTZWVrYWJsZSAgICAgICAgICAgICpzZWVrYWJsZSwKKwkJCQkJ
ICAgICBnb2Zmc2V0IG9mZnNldCwKKwkJCQkJICAgICBHU2Vla1R5cGUgdHlwZSwKKwkJCQkJICAg
ICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJCSAgICAgR0Vycm9yICAg
ICAgICAgICAgICAqKmVycm9yKTsKKworc3RhdGljIGdib29sZWFuIHNvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fY2FuX3RydW5jYXRlIChHU2Vla2FibGUgICAgICAgICAgICAqc2Vla2FibGUpOworc3Rh
dGljIGdib29sZWFuIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fdHJ1bmNhdGUgKEdTZWVrYWJsZSAg
ICAgICAgICAgICpzZWVrYWJsZSwKKwkJCQkJCSBnb2Zmc2V0IG9mZnNldCwKKwkJCQkJCSBHQ2Fu
Y2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJCQkgR0Vycm9yICAgICAgICAgICAg
ICAqKmVycm9yKTsKKworc3RhdGljIHZvaWQgc291cF9odHRwX2lucHV0X3N0cmVhbV9nb3RfaGVh
ZGVycyAoU291cE1lc3NhZ2UgKm1zZywgZ3BvaW50ZXIgc3RyZWFtKTsKK3N0YXRpYyB2b2lkIHNv
dXBfaHR0cF9pbnB1dF9zdHJlYW1fZ290X2NodW5rIChTb3VwTWVzc2FnZSAqbXNnLCBTb3VwQnVm
ZmVyICpjaHVuaywgZ3BvaW50ZXIgc3RyZWFtKTsKK3N0YXRpYyB2b2lkIHNvdXBfaHR0cF9pbnB1
dF9zdHJlYW1fZmluaXNoZWQgKFNvdXBNZXNzYWdlICptc2csIGdwb2ludGVyIHN0cmVhbSk7CisK
K3N0YXRpYyB2b2lkCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2ZpbmFsaXplIChHT2JqZWN0ICpv
YmplY3QpCit7CisJU291cEhUVFBJbnB1dFN0cmVhbSAqc3RyZWFtID0gU09VUF9IVFRQX0lOUFVU
X1NUUkVBTSAob2JqZWN0KTsKKwlTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFNP
VVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7CisKKwlnX29iamVjdF91
bnJlZiAocHJpdi0+c2Vzc2lvbik7CisKKwlnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5
X2Z1bmMgKHByaXYtPm1zZywgR19DQUxMQkFDSyAoc291cF9odHRwX2lucHV0X3N0cmVhbV9nb3Rf
aGVhZGVycyksIHN0cmVhbSk7CisJZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5j
IChwcml2LT5tc2csIEdfQ0FMTEJBQ0sgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ290X2NodW5r
KSwgc3RyZWFtKTsKKwlnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMgKHByaXYt
Pm1zZywgR19DQUxMQkFDSyAoc291cF9odHRwX2lucHV0X3N0cmVhbV9maW5pc2hlZCksIHN0cmVh
bSk7CisJZ19vYmplY3RfdW5yZWYgKHByaXYtPm1zZyk7CisJZ19mcmVlIChwcml2LT5sZWZ0b3Zl
cl9idWZmZXIpOworCisJaWYgKEdfT0JKRUNUX0NMQVNTIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFt
X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKQorCQkoKkdfT0JKRUNUX0NMQVNTIChzb3VwX2h0dHBf
aW5wdXRfc3RyZWFtX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKShvYmplY3QpOworfQorCitzdGF0
aWMgdm9pZAorc291cF9odHRwX2lucHV0X3N0cmVhbV9jbGFzc19pbml0IChTb3VwSFRUUElucHV0
U3RyZWFtQ2xhc3MgKmtsYXNzKQoreworCUdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IEdf
T0JKRUNUX0NMQVNTIChrbGFzcyk7CisJR0lucHV0U3RyZWFtQ2xhc3MgKnN0cmVhbV9jbGFzcyA9
IEdfSU5QVVRfU1RSRUFNX0NMQVNTIChrbGFzcyk7CisKKwlnX3R5cGVfY2xhc3NfYWRkX3ByaXZh
dGUgKGtsYXNzLCBzaXplb2YgKFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlKSk7CisKKwlnb2Jq
ZWN0X2NsYXNzLT5maW5hbGl6ZSA9IHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZmluYWxpemU7CisK
KwlzdHJlYW1fY2xhc3MtPnJlYWRfZm4gPSBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWQ7CisJ
c3RyZWFtX2NsYXNzLT5jbG9zZV9mbiA9IHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2U7CisJ
c3RyZWFtX2NsYXNzLT5yZWFkX2FzeW5jID0gc291cF9odHRwX2lucHV0X3N0cmVhbV9yZWFkX2Fz
eW5jOworCXN0cmVhbV9jbGFzcy0+cmVhZF9maW5pc2ggPSBzb3VwX2h0dHBfaW5wdXRfc3RyZWFt
X3JlYWRfZmluaXNoOworCXN0cmVhbV9jbGFzcy0+Y2xvc2VfYXN5bmMgPSBzb3VwX2h0dHBfaW5w
dXRfc3RyZWFtX2Nsb3NlX2FzeW5jOworCXN0cmVhbV9jbGFzcy0+Y2xvc2VfZmluaXNoID0gc291
cF9odHRwX2lucHV0X3N0cmVhbV9jbG9zZV9maW5pc2g7Cit9CisKK3N0YXRpYyB2b2lkCitzb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX3NlZWthYmxlX2lmYWNlX2luaXQgKEdTZWVrYWJsZUlmYWNlICpz
ZWVrYWJsZV9pZmFjZSkKK3sKKwlzZWVrYWJsZV9pZmFjZS0+dGVsbCA9IHNvdXBfaHR0cF9pbnB1
dF9zdHJlYW1fdGVsbDsKKwlzZWVrYWJsZV9pZmFjZS0+Y2FuX3NlZWsgPSBzb3VwX2h0dHBfaW5w
dXRfc3RyZWFtX2Nhbl9zZWVrOworCXNlZWthYmxlX2lmYWNlLT5zZWVrID0gc291cF9odHRwX2lu
cHV0X3N0cmVhbV9zZWVrOworCXNlZWthYmxlX2lmYWNlLT5jYW5fdHJ1bmNhdGUgPSBzb3VwX2h0
dHBfaW5wdXRfc3RyZWFtX2Nhbl90cnVuY2F0ZTsKKwlzZWVrYWJsZV9pZmFjZS0+dHJ1bmNhdGVf
Zm4gPSBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3RydW5jYXRlOworfQorCitzdGF0aWMgdm9pZAor
c291cF9odHRwX2lucHV0X3N0cmVhbV9pbml0IChTb3VwSFRUUElucHV0U3RyZWFtICpzdHJlYW0p
Cit7CisJOworfQorCitzdGF0aWMgdm9pZAorc291cF9odHRwX2lucHV0X3N0cmVhbV9xdWV1ZV9t
ZXNzYWdlIChTb3VwSFRUUElucHV0U3RyZWFtICpzdHJlYW0pCit7CisJU291cEhUVFBJbnB1dFN0
cmVhbVByaXZhdGUgKnByaXYgPSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChz
dHJlYW0pOworCisJcHJpdi0+Z290X2hlYWRlcnMgPSBwcml2LT5maW5pc2hlZCA9IEZBTFNFOwor
CisJLyogQWRkIGFuIGV4dHJhIHJlZiBzaW5jZSBzb3VwX3Nlc3Npb25fcXVldWVfbWVzc2FnZSBz
dGVhbHMgb25lICovCisJZ19vYmplY3RfcmVmIChwcml2LT5tc2cpOworCXNvdXBfc2Vzc2lvbl9x
dWV1ZV9tZXNzYWdlIChwcml2LT5zZXNzaW9uLCBwcml2LT5tc2csIE5VTEwsIE5VTEwpOworfQor
CisvKioKKyAqIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fbmV3OgorICogQHNlc3Npb246IHRoZSAj
U291cFNlc3Npb24gdG8gdXNlCisgKiBAbXNnOiB0aGUgI1NvdXBNZXNzYWdlIHdob3NlIHJlc3Bv
bnNlIHdpbGwgYmUgc3RyZWFtZWQKKyAqCisgKiBQcmVwYXJlcyB0byBzZW5kIEBtc2cgb3ZlciBA
c2Vzc2lvbiwgYW5kIHJldHVybnMgYSAjR0lucHV0U3RyZWFtCisgKiB0aGF0IGNhbiBiZSB1c2Vk
IHRvIHJlYWQgdGhlIHJlc3BvbnNlLgorICoKKyAqIEBtc2cgbWF5IG5vdCBiZSBzZW50IHVudGls
IHRoZSBmaXJzdCByZWFkIGNhbGw7IGlmIHlvdSBuZWVkIHRvIGxvb2sKKyAqIGF0IHRoZSBzdGF0
dXMgY29kZSBvciByZXNwb25zZSBoZWFkZXJzIGJlZm9yZSByZWFkaW5nIHRoZSBib2R5LCB5b3UK
KyAqIGNhbiB1c2Ugc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kKCkgb3Igc291cF9odHRwX2lu
cHV0X3N0cmVhbV9zZW5kX2FzeW5jKCkKKyAqIHRvIGZvcmNlIHRoZSBtZXNzYWdlIHRvIGJlIHNl
bnQgYW5kIHRoZSByZXNwb25zZSBoZWFkZXJzIHJlYWQuCisgKgorICogSWYgQG1zZyBnZXRzIGEg
bm9uLTJ4eCByZXN1bHQsIHRoZSBmaXJzdCByZWFkIChvciBzZW5kKSB3aWxsIHJldHVybgorICog
YW4gZXJyb3Igd2l0aCB0eXBlICVTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0hUVFBfRVJST1IuCisg
KgorICogSW50ZXJuYWxseSwgI1NvdXBIVFRQSW5wdXRTdHJlYW0gaXMgaW1wbGVtZW50ZWQgdXNp
bmcgYXN5bmNocm9ub3VzIEkvTywKKyAqIHNvIGlmIHlvdSBhcmUgdXNpbmcgdGhlIHN5bmNocm9u
b3VzIEFQSSAoZWcsCisgKiBnX2lucHV0X3N0cmVhbV9yZWFkKCkpLCB5b3Ugc2hvdWxkIGNyZWF0
ZSBhIG5ldyAjR01haW5Db250ZXh0IGFuZAorICogc2V0IGl0IGFzIHRoZSAlU09VUF9TRVNTSU9O
X0FTWU5DX0NPTlRFWFQgcHJvcGVydHkgb24gQHNlc3Npb24uIChJZgorICogeW91IGRvbid0LCB0
aGVuIHN5bmNocm9ub3VzICNHSW5wdXRTdHJlYW0gY2FsbHMgd2lsbCBjYXVzZSB0aGUgbWFpbgor
ICogbG9vcCB0byBiZSBydW4gcmVjdXJzaXZlbHkuKSBUaGUgYXN5bmMgI0dJbnB1dFN0cmVhbSBB
UEkgd29ya3MgZmluZQorICogd2l0aCAlU09VUF9TRVNTSU9OX0FTWU5DX0NPTlRFWFQgZWl0aGVy
IHNldCBvciB1bnNldC4KKyAqCisgKiBSZXR1cm5zOiBhIG5ldyAjR0lucHV0U3RyZWFtLgorICoq
LworU291cEhUVFBJbnB1dFN0cmVhbSAqCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX25ldyAoU291
cFNlc3Npb24gKnNlc3Npb24sIFNvdXBNZXNzYWdlICptc2cpCit7CisJU291cEhUVFBJbnB1dFN0
cmVhbSAqc3RyZWFtOworCVNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2OworCisJZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwgKFNPVVBfSVNfTUVTU0FHRSAobXNnKSwgTlVMTCk7CisKKwlzdHJl
YW0gPSBnX29iamVjdF9uZXcgKFNPVVBfVFlQRV9IVFRQX0lOUFVUX1NUUkVBTSwgTlVMTCk7CisJ
cHJpdiA9IFNPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7CisKKwlw
cml2LT5zZXNzaW9uID0gZ19vYmplY3RfcmVmIChzZXNzaW9uKTsKKwlwcml2LT5hc3luY19jb250
ZXh0ID0gc291cF9zZXNzaW9uX2dldF9hc3luY19jb250ZXh0IChzZXNzaW9uKTsKKwlwcml2LT5t
c2cgPSBnX29iamVjdF9yZWYgKG1zZyk7CisKKwlnX3NpZ25hbF9jb25uZWN0IChtc2csICJnb3Rf
aGVhZGVycyIsCisJCQkgIEdfQ0FMTEJBQ0sgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ290X2hl
YWRlcnMpLCBzdHJlYW0pOworCWdfc2lnbmFsX2Nvbm5lY3QgKG1zZywgImdvdF9jaHVuayIsCisJ
CQkgIEdfQ0FMTEJBQ0sgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ290X2NodW5rKSwgc3RyZWFt
KTsKKwlnX3NpZ25hbF9jb25uZWN0IChtc2csICJmaW5pc2hlZCIsCisJCQkgIEdfQ0FMTEJBQ0sg
KHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZmluaXNoZWQpLCBzdHJlYW0pOworCisJc291cF9odHRw
X2lucHV0X3N0cmVhbV9xdWV1ZV9tZXNzYWdlIChzdHJlYW0pOworCXJldHVybiBzdHJlYW07Cit9
CisKK3N0YXRpYyB2b2lkCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dvdF9oZWFkZXJzIChTb3Vw
TWVzc2FnZSAqbXNnLCBncG9pbnRlciBzdHJlYW0pCit7CisJU291cEhUVFBJbnB1dFN0cmVhbVBy
aXZhdGUgKnByaXYgPSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0p
OworCisJLyogSWYgdGhlIHN0YXR1cyBpcyB1bnN1Y2Nlc3NmdWwsIHdlIGp1c3QgaWdub3JlIHRo
ZSBzaWduYWwgYW5kIGxldAorCSAqIGxpYnNvdXAga2VlcCBnb2luZyAoZXZlbnR1YWxseSBlaXRo
ZXIgaXQgd2lsbCByZXF1ZXVlIHRoZSByZXF1ZXN0CisJICogKGFmdGVyIGhhbmRsaW5nIGF1dGhl
bnRpY2F0aW9uL3JlZGlyZWN0aW9uKSwgb3IgZWxzZSB0aGUKKwkgKiAiZmluaXNoZWQiIGhhbmRs
ZXIgd2lsbCBydW4pLgorCSAqLworCWlmICghU09VUF9TVEFUVVNfSVNfU1VDQ0VTU0ZVTCAobXNn
LT5zdGF0dXNfY29kZSkpCisJCXJldHVybjsKKworCXByaXYtPmdvdF9oZWFkZXJzID0gVFJVRTsK
KwlpZiAoIXByaXYtPmNhbGxlcl9idWZmZXIpIHsKKwkJLyogTm90IHJlYWR5IHRvIHJlYWQgdGhl
IGJvZHkgeWV0ICovCisJCXNvdXBfc2Vzc2lvbl9wYXVzZV9tZXNzYWdlIChwcml2LT5zZXNzaW9u
LCBtc2cpOworCX0KKworCWlmIChwcml2LT5nb3RfaGVhZGVyc19jYikKKwkJcHJpdi0+Z290X2hl
YWRlcnNfY2IgKHN0cmVhbSk7Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX2h0dHBfaW5wdXRfc3Ry
ZWFtX2dvdF9jaHVuayAoU291cE1lc3NhZ2UgKm1zZywgU291cEJ1ZmZlciAqY2h1bmtfYnVmZmVy
LAorCQkJCSAgZ3BvaW50ZXIgc3RyZWFtKQoreworCVNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRl
ICpwcml2ID0gU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKwlj
b25zdCBnY2hhciAqY2h1bmsgPSBjaHVua19idWZmZXItPmRhdGE7CisJZ3NpemUgY2h1bmtfc2l6
ZSA9IGNodW5rX2J1ZmZlci0+bGVuZ3RoOworCisJLyogV2Ugb25seSBwYXkgYXR0ZW50aW9uIHRv
IHRoZSBjaHVuayBpZiBpdCdzIHBhcnQgb2YgYSBzdWNjZXNzZnVsCisJICogcmVzcG9uc2UuCisJ
ICovCisJaWYgKCFTT1VQX1NUQVRVU19JU19TVUNDRVNTRlVMIChtc2ctPnN0YXR1c19jb2RlKSkK
KwkJcmV0dXJuOworCisJLyogU2FuaXR5IGNoZWNrICovCisJaWYgKHByaXYtPmNhbGxlcl9idWZz
aXplID09IDAgfHwgcHJpdi0+bGVmdG92ZXJfYnVmc2l6ZSAhPSAwKQorCQlnX3dhcm5pbmcgKCJz
b3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dvdF9jaHVuayBjYWxsZWQgYWdhaW4gYmVmb3JlIHByZXZp
b3VzIGNodW5rIHdhcyBwcm9jZXNzZWQiKTsKKworCS8qIENvcHkgd2hhdCB3ZSBjYW4gaW50byBw
cml2LT5jYWxsZXJfYnVmZmVyICovCisJaWYgKHByaXYtPmNhbGxlcl9idWZzaXplIC0gcHJpdi0+
Y2FsbGVyX25yZWFkID4gMCkgeworCQlnc2l6ZSBucmVhZCA9IE1JTiAoY2h1bmtfc2l6ZSwgcHJp
di0+Y2FsbGVyX2J1ZnNpemUgLSBwcml2LT5jYWxsZXJfbnJlYWQpOworCisJCW1lbWNweSAocHJp
di0+Y2FsbGVyX2J1ZmZlciArIHByaXYtPmNhbGxlcl9ucmVhZCwgY2h1bmssIG5yZWFkKTsKKwkJ
cHJpdi0+Y2FsbGVyX25yZWFkICs9IG5yZWFkOworCQlwcml2LT5vZmZzZXQgKz0gbnJlYWQ7CisJ
CWNodW5rICs9IG5yZWFkOworCQljaHVua19zaXplIC09IG5yZWFkOworCX0KKworCWlmIChjaHVu
a19zaXplID4gMCkgeworCQkvKiBDb3B5IHRoZSByZXN0IGludG8gcHJpdi0+bGVmdG92ZXJfYnVm
ZmVyLiBJZgorCQkgKiB0aGVyZSdzIGFscmVhZHkgc29tZSBkYXRhIHRoZXJlLCByZWFsbG9jIGFu
ZAorCQkgKiBhcHBlbmQuIE90aGVyd2lzZSBqdXN0IGNvcHkuCisJCSAqLworCQlpZiAocHJpdi0+
bGVmdG92ZXJfYnVmc2l6ZSkgeworCQkJcHJpdi0+bGVmdG92ZXJfYnVmZmVyID0gZ19yZWFsbG9j
IChwcml2LT5sZWZ0b3Zlcl9idWZmZXIsCisJCQkJCQkJICAgcHJpdi0+bGVmdG92ZXJfYnVmc2l6
ZSArIGNodW5rX3NpemUpOworCQkJbWVtY3B5IChwcml2LT5sZWZ0b3Zlcl9idWZmZXIgKyBwcml2
LT5sZWZ0b3Zlcl9idWZzaXplLAorCQkJCWNodW5rLCBjaHVua19zaXplKTsKKwkJCXByaXYtPmxl
ZnRvdmVyX2J1ZnNpemUgKz0gY2h1bmtfc2l6ZTsKKwkJfSBlbHNlIHsKKwkJCXByaXYtPmxlZnRv
dmVyX2J1ZnNpemUgPSBjaHVua19zaXplOworCQkJcHJpdi0+bGVmdG92ZXJfYnVmZmVyID0gZ19t
ZW1kdXAgKGNodW5rLCBjaHVua19zaXplKTsKKwkJCXByaXYtPmxlZnRvdmVyX29mZnNldCA9IDA7
CisJCX0KKwl9CisKKwlzb3VwX3Nlc3Npb25fcGF1c2VfbWVzc2FnZSAocHJpdi0+c2Vzc2lvbiwg
bXNnKTsKKwlpZiAocHJpdi0+Z290X2NodW5rX2NiKQorCQlwcml2LT5nb3RfY2h1bmtfY2IgKHN0
cmVhbSk7Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2ZpbmlzaGVk
IChTb3VwTWVzc2FnZSAqbXNnLCBncG9pbnRlciBzdHJlYW0pCit7CisJU291cEhUVFBJbnB1dFN0
cmVhbVByaXZhdGUgKnByaXYgPSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChz
dHJlYW0pOworCisJcHJpdi0+ZmluaXNoZWQgPSBUUlVFOworCisJaWYgKHByaXYtPmZpbmlzaGVk
X2NiKQorCQlwcml2LT5maW5pc2hlZF9jYiAoc3RyZWFtKTsKK30KKworc3RhdGljIGdib29sZWFu
Citzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2NhbmNlbGxlZCAoR0lPQ2hhbm5lbCAqY2hhbiwgR0lP
Q29uZGl0aW9uIGNvbmRpdGlvbiwKKwkJCQkgIGdwb2ludGVyIHN0cmVhbSkKK3sKKwlTb3VwSFRU
UElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFNPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BS
SVZBVEUgKHN0cmVhbSk7CisKKwlwcml2LT5jYW5jZWxfd2F0Y2ggPSBOVUxMOworCisJc291cF9z
ZXNzaW9uX3BhdXNlX21lc3NhZ2UgKHByaXYtPnNlc3Npb24sIHByaXYtPm1zZyk7CisJaWYgKHBy
aXYtPmNhbmNlbGxlZF9jYikKKwkJcHJpdi0+Y2FuY2VsbGVkX2NiIChzdHJlYW0pOworCisJcmV0
dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZAorc291cF9odHRwX2lucHV0X3N0cmVhbV9wcmVw
YXJlX2Zvcl9pbyAoR0lucHV0U3RyZWFtICpzdHJlYW0sCisJCQkJICAgICAgIEdDYW5jZWxsYWJs
ZSAqY2FuY2VsbGFibGUsCisJCQkJICAgICAgIGd1Y2hhciAgICAgICAqYnVmZmVyLAorCQkJCSAg
ICAgICBnc2l6ZSBjb3VudCkKK3sKKwlTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9
IFNPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7CisJaW50IGNhbmNl
bF9mZDsKKworCXByaXYtPmNhbmNlbGxhYmxlID0gY2FuY2VsbGFibGU7CisJY2FuY2VsX2ZkID0g
Z19jYW5jZWxsYWJsZV9nZXRfZmQgKGNhbmNlbGxhYmxlKTsKKwlpZiAoY2FuY2VsX2ZkICE9IC0x
KSB7CisJCUdJT0NoYW5uZWwgKmNoYW4gPSBnX2lvX2NoYW5uZWxfdW5peF9uZXcgKGNhbmNlbF9m
ZCk7CisJCXByaXYtPmNhbmNlbF93YXRjaCA9IHNvdXBfYWRkX2lvX3dhdGNoIChwcml2LT5hc3lu
Y19jb250ZXh0LCBjaGFuLAorCQkJCQkJCUdfSU9fSU4gfCBHX0lPX0VSUiB8IEdfSU9fSFVQLAor
CQkJCQkJCXNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2FuY2VsbGVkLAorCQkJCQkJCXN0cmVhbSk7
CisJCWdfaW9fY2hhbm5lbF91bnJlZiAoY2hhbik7CisJfQorCisJcHJpdi0+Y2FsbGVyX2J1ZmZl
ciA9IGJ1ZmZlcjsKKwlwcml2LT5jYWxsZXJfYnVmc2l6ZSA9IGNvdW50OworCXByaXYtPmNhbGxl
cl9ucmVhZCA9IDA7CisKKwlpZiAocHJpdi0+Z290X2hlYWRlcnMpCisJCXNvdXBfc2Vzc2lvbl91
bnBhdXNlX21lc3NhZ2UgKHByaXYtPnNlc3Npb24sIHByaXYtPm1zZyk7Cit9CisKK3N0YXRpYyB2
b2lkCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2RvbmVfaW8gKEdJbnB1dFN0cmVhbSAqc3RyZWFt
KQoreworCVNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gU09VUF9IVFRQX0lOUFVU
X1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKworCWlmIChwcml2LT5jYW5jZWxfd2F0Y2gp
IHsKKwkJZ19zb3VyY2VfZGVzdHJveSAocHJpdi0+Y2FuY2VsX3dhdGNoKTsKKwkJcHJpdi0+Y2Fu
Y2VsX3dhdGNoID0gTlVMTDsKKwkJZ19jYW5jZWxsYWJsZV9yZWxlYXNlX2ZkIChwcml2LT5jYW5j
ZWxsYWJsZSk7CisJfQorCXByaXYtPmNhbmNlbGxhYmxlID0gTlVMTDsKKworCXByaXYtPmNhbGxl
cl9idWZmZXIgPSBOVUxMOworCXByaXYtPmNhbGxlcl9idWZzaXplID0gMDsKK30KKworc3RhdGlj
IGdib29sZWFuCitzZXRfZXJyb3JfaWZfaHR0cF9mYWlsZWQgKFNvdXBNZXNzYWdlICptc2csIEdF
cnJvciAqKmVycm9yKQoreworCWlmICghU09VUF9TVEFUVVNfSVNfU1VDQ0VTU0ZVTCAobXNnLT5z
dGF0dXNfY29kZSkpIHsKKwkJZ19zZXRfZXJyb3JfbGl0ZXJhbCAoZXJyb3IsIFNPVVBfSFRUUF9F
UlJPUiwKKwkJCQkgICAgIG1zZy0+c3RhdHVzX2NvZGUsIG1zZy0+cmVhc29uX3BocmFzZSk7CisJ
CXJldHVybiBUUlVFOworCX0KKwlyZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBnc2l6ZQorcmVh
ZF9mcm9tX2xlZnRvdmVyIChTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiwKKwkJICAg
IGdwb2ludGVyIGJ1ZmZlciwgZ3NpemUgYnVmc2l6ZSkKK3sKKwlnc2l6ZSBucmVhZDsKKworCWlm
IChwcml2LT5sZWZ0b3Zlcl9idWZzaXplIC0gcHJpdi0+bGVmdG92ZXJfb2Zmc2V0IDw9IGJ1ZnNp
emUpIHsKKwkJbnJlYWQgPSBwcml2LT5sZWZ0b3Zlcl9idWZzaXplIC0gcHJpdi0+bGVmdG92ZXJf
b2Zmc2V0OworCQltZW1jcHkgKGJ1ZmZlciwgcHJpdi0+bGVmdG92ZXJfYnVmZmVyICsgcHJpdi0+
bGVmdG92ZXJfb2Zmc2V0LCBucmVhZCk7CisKKwkJZ19mcmVlIChwcml2LT5sZWZ0b3Zlcl9idWZm
ZXIpOworCQlwcml2LT5sZWZ0b3Zlcl9idWZmZXIgPSBOVUxMOworCQlwcml2LT5sZWZ0b3Zlcl9i
dWZzaXplID0gcHJpdi0+bGVmdG92ZXJfb2Zmc2V0ID0gMDsKKwl9IGVsc2UgeworCQlucmVhZCA9
IGJ1ZnNpemU7CisJCW1lbWNweSAoYnVmZmVyLCBwcml2LT5sZWZ0b3Zlcl9idWZmZXIgKyBwcml2
LT5sZWZ0b3Zlcl9vZmZzZXQsIG5yZWFkKTsKKwkJcHJpdi0+bGVmdG92ZXJfb2Zmc2V0ICs9IG5y
ZWFkOworCX0KKworCXByaXYtPm9mZnNldCArPSBucmVhZDsKKwlyZXR1cm4gbnJlYWQ7Cit9CisK
Ky8qIFRoaXMgZG9lcyB0aGUgd29yayBvZiBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmQoKSwg
YXNzdW1pbmcgdGhhdCB0aGUKKyAqIEdJbnB1dFN0cmVhbSBwZW5kaW5nIGZsYWcgaGFzIGFscmVh
ZHkgYmVlbiBzZXQuIEl0IGlzIGFsc28gdXNlZCBieQorICogc291cF9odHRwX2lucHV0X3N0cmVh
bV9zZW5kX2FzeW5jKCkgaW4gc29tZSBjaXJjdW1zdGFuY2VzLgorICovCitzdGF0aWMgZ2Jvb2xl
YW4KK3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9pbnRlcm5hbCAoR0lucHV0U3RyZWFtICAq
c3RyZWFtLAorCQkJCSAgICAgIEdDYW5jZWxsYWJsZSAgKmNhbmNlbGxhYmxlLAorCQkJCSAgICAg
IEdFcnJvciAgICAgICAqKmVycm9yKQoreworCVNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpw
cml2ID0gU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKworCXNv
dXBfaHR0cF9pbnB1dF9zdHJlYW1fcHJlcGFyZV9mb3JfaW8gKHN0cmVhbSwgY2FuY2VsbGFibGUs
IE5VTEwsIDApOworCXdoaWxlICghcHJpdi0+ZmluaXNoZWQgJiYgIXByaXYtPmdvdF9oZWFkZXJz
ICYmCisJICAgICAgICFnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxlZCAoY2FuY2VsbGFibGUpKQor
CQlnX21haW5fY29udGV4dF9pdGVyYXRpb24gKHByaXYtPmFzeW5jX2NvbnRleHQsIFRSVUUpOwor
CXNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZG9uZV9pbyAoc3RyZWFtKTsKKworCWlmIChnX2NhbmNl
bGxhYmxlX3NldF9lcnJvcl9pZl9jYW5jZWxsZWQgKGNhbmNlbGxhYmxlLCBlcnJvcikpCisJCXJl
dHVybiBGQUxTRTsKKwllbHNlIGlmIChzZXRfZXJyb3JfaWZfaHR0cF9mYWlsZWQgKHByaXYtPm1z
ZywgZXJyb3IpKQorCQlyZXR1cm4gRkFMU0U7CisJcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2
b2lkCitzZW5kX3N5bmNfZmluaXNoZWQgKEdJbnB1dFN0cmVhbSAqc3RyZWFtKQoreworCVNvdXBI
VFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRf
UFJJVkFURSAoc3RyZWFtKTsKKwlHRXJyb3IgKmVycm9yID0gTlVMTDsKKworCWlmICghZ19jYW5j
ZWxsYWJsZV9zZXRfZXJyb3JfaWZfY2FuY2VsbGVkIChwcml2LT5jYW5jZWxsYWJsZSwgJmVycm9y
KSkKKwkJc2V0X2Vycm9yX2lmX2h0dHBfZmFpbGVkIChwcml2LT5tc2csICZlcnJvcik7CisKKwlw
cml2LT5nb3RfaGVhZGVyc19jYiA9IE5VTEw7CisJcHJpdi0+ZmluaXNoZWRfY2IgPSBOVUxMOwor
CisJLyogV2FrZSB1cCB0aGUgbWFpbiBjb250ZXh0IGl0ZXJhdGlvbiAqLworCWdfc291cmNlX2F0
dGFjaCAoZ19pZGxlX3NvdXJjZV9uZXcgKCksIE5VTEwpOworfQorCisvKioKKyAqIHNvdXBfaHR0
cF9pbnB1dF9zdHJlYW1fc2VuZDoKKyAqIEBodHRwc3RyZWFtOiBhICNTb3VwSFRUUElucHV0U3Ry
ZWFtCisgKiBAY2FuY2VsbGFibGU6IG9wdGlvbmFsICNHQ2FuY2VsbGFibGUgb2JqZWN0LCAlTlVM
TCB0byBpZ25vcmUuCisgKiBAZXJyb3I6IGxvY2F0aW9uIHRvIHN0b3JlIHRoZSBlcnJvciBvY2N1
cmluZywgb3IgJU5VTEwgdG8gaWdub3JlCisgKgorICogU3luY2hyb25vdXNseSBzZW5kcyB0aGUg
SFRUUCByZXF1ZXN0IGFzc29jaWF0ZWQgd2l0aCBAc3RyZWFtLCBhbmQKKyAqIHJlYWRzIHRoZSBy
ZXNwb25zZSBoZWFkZXJzLiBDYWxsIHRoaXMgYWZ0ZXIgc291cF9odHRwX2lucHV0X3N0cmVhbV9u
ZXcoKQorICogYW5kIGJlZm9yZSB0aGUgZmlyc3QgZ19pbnB1dF9zdHJlYW1fcmVhZCgpIGlmIHlv
dSB3YW50IHRvIGNoZWNrIHRoZQorICogSFRUUCBzdGF0dXMgY29kZSBiZWZvcmUgeW91IHN0YXJ0
IHJlYWRpbmcuCisgKgorICogUmV0dXJuIHZhbHVlOiAlVFJVRSBpZiBtc2cgaGFzIGEgc3VjY2Vz
c2Z1bCAoMnh4KSBzdGF0dXMsICVGQUxTRSBpZgorICogbm90LgorICoqLworZ2Jvb2xlYW4KK3Nv
dXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZCAoU291cEhUVFBJbnB1dFN0cmVhbSAgKmh0dHBzdHJl
YW0sCisJCQkgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCSAgICAg
R0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKQoreworCVNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2
YXRlICpwcml2ID0gU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoaHR0cHN0cmVh
bSk7CisJR0lucHV0U3RyZWFtICppc3RyZWFtID0gKEdJbnB1dFN0cmVhbSAqKWh0dHBzdHJlYW07
CisJZ2Jvb2xlYW4gcmVzdWx0OworCisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFNPVVBfSVNfSFRU
UF9JTlBVVF9TVFJFQU0gKGh0dHBzdHJlYW0pLCBGQUxTRSk7CisKKwlpZiAoIWdfaW5wdXRfc3Ry
ZWFtX3NldF9wZW5kaW5nIChpc3RyZWFtLCBlcnJvcikpCisJCXJldHVybiBGQUxTRTsKKworCXBy
aXYtPmdvdF9oZWFkZXJzX2NiID0gc2VuZF9zeW5jX2ZpbmlzaGVkOworCXByaXYtPmZpbmlzaGVk
X2NiID0gc2VuZF9zeW5jX2ZpbmlzaGVkOworCisJcmVzdWx0ID0gc291cF9odHRwX2lucHV0X3N0
cmVhbV9zZW5kX2ludGVybmFsIChpc3RyZWFtLCBjYW5jZWxsYWJsZSwgZXJyb3IpOworCWdfaW5w
dXRfc3RyZWFtX2NsZWFyX3BlbmRpbmcgKGlzdHJlYW0pOworCisJcmV0dXJuIHJlc3VsdDsKK30K
Kworc3RhdGljIGdzc2l6ZQorc291cF9odHRwX2lucHV0X3N0cmVhbV9yZWFkIChHSW5wdXRTdHJl
YW0gKnN0cmVhbSwKKwkJCSAgICAgdm9pZCAgICAgICAgICpidWZmZXIsCisJCQkgICAgIGdzaXpl
IGNvdW50LAorCQkJICAgICBHQ2FuY2VsbGFibGUgKmNhbmNlbGxhYmxlLAorCQkJICAgICBHRXJy
b3IgICAgICAqKmVycm9yKQoreworCVNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0g
U09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKworCWlmIChwcml2
LT5maW5pc2hlZCkKKwkJcmV0dXJuIDA7CisKKwkvKiBJZiB0aGVyZSBpcyBkYXRhIGxlZnRvdmVy
IGZyb20gYSBwcmV2aW91cyByZWFkLCByZXR1cm4gaXQuICovCisJaWYgKHByaXYtPmxlZnRvdmVy
X2J1ZnNpemUpCisJCXJldHVybiByZWFkX2Zyb21fbGVmdG92ZXIgKHByaXYsIGJ1ZmZlciwgY291
bnQpOworCisJLyogTm8gbGVmdG92ZXIgZGF0YSwgYWNjZXB0IG9uZSBjaHVuayBmcm9tIHRoZSBu
ZXR3b3JrICovCisJc291cF9odHRwX2lucHV0X3N0cmVhbV9wcmVwYXJlX2Zvcl9pbyAoc3RyZWFt
LCBjYW5jZWxsYWJsZSwgYnVmZmVyLCBjb3VudCk7CisJd2hpbGUgKCFwcml2LT5maW5pc2hlZCAm
JiBwcml2LT5jYWxsZXJfbnJlYWQgPT0gMCAmJgorCSAgICAgICAhZ19jYW5jZWxsYWJsZV9pc19j
YW5jZWxsZWQgKGNhbmNlbGxhYmxlKSkKKwkJZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uIChwcml2
LT5hc3luY19jb250ZXh0LCBUUlVFKTsKKwlzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2RvbmVfaW8g
KHN0cmVhbSk7CisKKwlpZiAocHJpdi0+Y2FsbGVyX25yZWFkID4gMCkKKwkJcmV0dXJuIHByaXYt
PmNhbGxlcl9ucmVhZDsKKworCWlmIChnX2NhbmNlbGxhYmxlX3NldF9lcnJvcl9pZl9jYW5jZWxs
ZWQgKGNhbmNlbGxhYmxlLCBlcnJvcikpCisJCXJldHVybiAtMTsKKwllbHNlIGlmIChzZXRfZXJy
b3JfaWZfaHR0cF9mYWlsZWQgKHByaXYtPm1zZywgZXJyb3IpKQorCQlyZXR1cm4gLTE7CisJZWxz
ZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGljIGdib29sZWFuCitzb3VwX2h0dHBfaW5wdXRfc3Ry
ZWFtX2Nsb3NlIChHSW5wdXRTdHJlYW0gKnN0cmVhbSwKKwkJCSAgICAgIEdDYW5jZWxsYWJsZSAq
Y2FuY2VsbGFibGUsCisJCQkgICAgICBHRXJyb3IgICAgICAqKmVycm9yKQoreworCVNvdXBIVFRQ
SW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJ
VkFURSAoc3RyZWFtKTsKKworCWlmICghcHJpdi0+ZmluaXNoZWQpCisJCXNvdXBfc2Vzc2lvbl9j
YW5jZWxfbWVzc2FnZSAocHJpdi0+c2Vzc2lvbiwgcHJpdi0+bXNnLCBTT1VQX1NUQVRVU19DQU5D
RUxMRUQpOworCisJcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkCit3cmFwcGVyX2NhbGxi
YWNrIChHT2JqZWN0ICpzb3VyY2Vfb2JqZWN0LCBHQXN5bmNSZXN1bHQgKnJlcywKKwkJICBncG9p
bnRlciB1c2VyX2RhdGEpCit7CisJR0lucHV0U3RyZWFtICpzdHJlYW0gPSBHX0lOUFVUX1NUUkVB
TSAoc291cmNlX29iamVjdCk7CisJU291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBT
T1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOworCisJZ19pbnB1dF9z
dHJlYW1fY2xlYXJfcGVuZGluZyAoc3RyZWFtKTsKKwlpZiAocHJpdi0+b3V0c3RhbmRpbmdfY2Fs
bGJhY2spCisJCSgqcHJpdi0+b3V0c3RhbmRpbmdfY2FsbGJhY2spKHNvdXJjZV9vYmplY3QsIHJl
cywgdXNlcl9kYXRhKTsKKwlwcml2LT5vdXRzdGFuZGluZ19jYWxsYmFjayA9IE5VTEw7CisJZ19v
YmplY3RfdW5yZWYgKHN0cmVhbSk7Cit9CisKK3N0YXRpYyB2b2lkCitzZW5kX2FzeW5jX3RocmVh
ZCAoR1NpbXBsZUFzeW5jUmVzdWx0ICpyZXMsCisJCSAgIEdPYmplY3QgKm9iamVjdCwKKwkJICAg
R0NhbmNlbGxhYmxlICpjYW5jZWxsYWJsZSkKK3sKKwlHRXJyb3IgKmVycm9yID0gTlVMTDsKKwln
Ym9vbGVhbiBzdWNjZXNzOworCisJc3VjY2VzcyA9IHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2Vu
ZF9pbnRlcm5hbCAoR19JTlBVVF9TVFJFQU0gKG9iamVjdCksCisJCQkJCQkJY2FuY2VsbGFibGUs
ICZlcnJvcik7CisJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ2Jvb2xlYW4gKHJl
cywgc3VjY2Vzcyk7CisJaWYgKGVycm9yKSB7CisJCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRf
ZnJvbV9lcnJvciAocmVzLCBlcnJvcik7CisJCWdfZXJyb3JfZnJlZSAoZXJyb3IpOworCX0KK30K
Kworc3RhdGljIHZvaWQKK3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luY19pbl90aHJl
YWQgKEdJbnB1dFN0cmVhbSAgICAgICAgKnN0cmVhbSwKKwkJCQkJICAgICBpbnQgaW9fcHJpb3Jp
dHksCisJCQkJCSAgICAgR0NhbmNlbGxhYmxlICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJCSAg
ICAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKKwkJCQkJICAgICBncG9pbnRlciB1c2Vy
X2RhdGEpCit7CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpyZXM7CisKKwlyZXMgPSBnX3NpbXBsZV9h
c3luY19yZXN1bHRfbmV3IChHX09CSkVDVCAoc3RyZWFtKSwgY2FsbGJhY2ssIHVzZXJfZGF0YSwK
KwkJCQkJIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luY19pbl90aHJlYWQpOworCWdf
c2ltcGxlX2FzeW5jX3Jlc3VsdF9ydW5faW5fdGhyZWFkIChyZXMsIHNlbmRfYXN5bmNfdGhyZWFk
LAorCQkJCQkgICAgIGlvX3ByaW9yaXR5LCBjYW5jZWxsYWJsZSk7CisJZ19vYmplY3RfdW5yZWYg
KHJlcyk7Cit9CisKK3N0YXRpYyB2b2lkCitzZW5kX2FzeW5jX2ZpbmlzaGVkIChHSW5wdXRTdHJl
YW0gKnN0cmVhbSkKK3sKKwlTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFNPVVBf
SFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7CisJR1NpbXBsZUFzeW5jUmVz
dWx0ICpyZXN1bHQ7CisJR0Vycm9yICplcnJvciA9IE5VTEw7CisKKwlpZiAoIWdfY2FuY2VsbGFi
bGVfc2V0X2Vycm9yX2lmX2NhbmNlbGxlZCAocHJpdi0+Y2FuY2VsbGFibGUsICZlcnJvcikpCisJ
CXNldF9lcnJvcl9pZl9odHRwX2ZhaWxlZCAocHJpdi0+bXNnLCAmZXJyb3IpOworCisJcHJpdi0+
Z290X2hlYWRlcnNfY2IgPSBOVUxMOworCXByaXYtPmZpbmlzaGVkX2NiID0gTlVMTDsKKwlzb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX2RvbmVfaW8gKHN0cmVhbSk7CisKKwlyZXN1bHQgPSBwcml2LT5y
ZXN1bHQ7CisJcHJpdi0+cmVzdWx0ID0gTlVMTDsKKworCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9z
ZXRfb3BfcmVzX2dib29sZWFuIChyZXN1bHQsIGVycm9yID09IE5VTEwpOworCWlmIChlcnJvcikg
eworCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X2Zyb21fZXJyb3IgKHJlc3VsdCwgZXJyb3Ip
OworCQlnX2Vycm9yX2ZyZWUgKGVycm9yKTsKKwl9CisJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2Nv
bXBsZXRlIChyZXN1bHQpOworfQorCitzdGF0aWMgdm9pZAorc291cF9odHRwX2lucHV0X3N0cmVh
bV9zZW5kX2FzeW5jX2ludGVybmFsIChHSW5wdXRTdHJlYW0gICAgICAgICpzdHJlYW0sCisJCQkJ
CSAgICBpbnQgaW9fcHJpb3JpdHksCisJCQkJCSAgICBHQ2FuY2VsbGFibGUgICAgICAgICpjYW5j
ZWxsYWJsZSwKKwkJCQkJICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCisJCQkJCSAg
ICBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJU291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnBy
aXYgPSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOworCisJZ19v
YmplY3RfcmVmIChzdHJlYW0pOworCXByaXYtPm91dHN0YW5kaW5nX2NhbGxiYWNrID0gY2FsbGJh
Y2s7CisKKwkvKiBJZiB0aGUgc2Vzc2lvbiB1c2VzIHRoZSBkZWZhdWx0IEdNYWluQ29udGV4dCwg
dGhlbiB3ZSBjYW4gZG8KKwkgKiBhc3luYyBJL08gZGlyZWN0bHkuIEJ1dCBpZiBpdCBoYXMgaXRz
IG93biBtYWluIGNvbnRleHQsIGl0J3MKKwkgKiBlYXNpZXIgdG8ganVzdCBydW4gaXQgaW4gYW5v
dGhlciB0aHJlYWQuCisJICovCisJaWYgKHNvdXBfc2Vzc2lvbl9nZXRfYXN5bmNfY29udGV4dCAo
cHJpdi0+c2Vzc2lvbikpIHsKKwkJc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jX2lu
X3RocmVhZCAoc3RyZWFtLCBpb19wcmlvcml0eSwgY2FuY2VsbGFibGUsCisJCQkJCQkJICAgICB3
cmFwcGVyX2NhbGxiYWNrLCB1c2VyX2RhdGEpOworCQlyZXR1cm47CisJfQorCisJcHJpdi0+Z290
X2hlYWRlcnNfY2IgPSBzZW5kX2FzeW5jX2ZpbmlzaGVkOworCXByaXYtPmZpbmlzaGVkX2NiID0g
c2VuZF9hc3luY19maW5pc2hlZDsKKworCXNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcHJlcGFyZV9m
b3JfaW8gKHN0cmVhbSwgY2FuY2VsbGFibGUsIE5VTEwsIDApOworCXByaXYtPnJlc3VsdCA9IGdf
c2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcgKEdfT0JKRUNUIChzdHJlYW0pLAorCQkJCQkJICB3cmFw
cGVyX2NhbGxiYWNrLCB1c2VyX2RhdGEsCisJCQkJCQkgIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1f
c2VuZF9hc3luYyk7Cit9CisKKy8qKgorICogc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2Fz
eW5jOgorICogQGh0dHBzdHJlYW06IGEgI1NvdXBIVFRQSW5wdXRTdHJlYW0KKyAqIEBpb19wcmlv
cml0eTogdGhlIGlvIHByaW9yaXR5IG9mIHRoZSByZXF1ZXN0LgorICogQGNhbmNlbGxhYmxlOiBv
cHRpb25hbCAjR0NhbmNlbGxhYmxlIG9iamVjdCwgJU5VTEwgdG8gaWdub3JlLgorICogQGNhbGxi
YWNrOiBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIHJlcXVlc3QgaXMgc2F0aXNmaWVkCisgKiBA
dXNlcl9kYXRhOiB0aGUgZGF0YSB0byBwYXNzIHRvIGNhbGxiYWNrIGZ1bmN0aW9uCisgKgorICog
QXN5bmNocm9ub3VzbHkgc2VuZHMgdGhlIEhUVFAgcmVxdWVzdCBhc3NvY2lhdGVkIHdpdGggQHN0
cmVhbSwgYW5kCisgKiByZWFkcyB0aGUgcmVzcG9uc2UgaGVhZGVycy4gQ2FsbCB0aGlzIGFmdGVy
IHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fbmV3KCkKKyAqIGFuZCBiZWZvcmUgdGhlIGZpcnN0IGdf
aW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMoKSBpZiB5b3Ugd2FudCB0bworICogY2hlY2sgdGhlIEhU
VFAgc3RhdHVzIGNvZGUgYmVmb3JlIHlvdSBzdGFydCByZWFkaW5nLgorICoqLwordm9pZAorc291
cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jIChTb3VwSFRUUElucHV0U3RyZWFtICpodHRw
c3RyZWFtLAorCQkJCSAgIGludCBpb19wcmlvcml0eSwKKwkJCQkgICBHQ2FuY2VsbGFibGUgICAg
ICAgICpjYW5jZWxsYWJsZSwKKwkJCQkgICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAor
CQkJCSAgIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlHSW5wdXRTdHJlYW0gKmlzdHJlYW0gPSAo
R0lucHV0U3RyZWFtICopaHR0cHN0cmVhbTsKKwlHRXJyb3IgKmVycm9yID0gTlVMTDsKKworCWdf
cmV0dXJuX2lmX2ZhaWwgKFNPVVBfSVNfSFRUUF9JTlBVVF9TVFJFQU0gKGh0dHBzdHJlYW0pKTsK
KworCWlmICghZ19pbnB1dF9zdHJlYW1fc2V0X3BlbmRpbmcgKGlzdHJlYW0sICZlcnJvcikpIHsK
KwkJZ19zaW1wbGVfYXN5bmNfcmVwb3J0X2dlcnJvcl9pbl9pZGxlIChHX09CSkVDVCAoaHR0cHN0
cmVhbSksCisJCQkJCQkgICAgICBjYWxsYmFjaywKKwkJCQkJCSAgICAgIHVzZXJfZGF0YSwKKwkJ
CQkJCSAgICAgIGVycm9yKTsKKwkJZ19lcnJvcl9mcmVlIChlcnJvcik7CisJCXJldHVybjsKKwl9
CisJc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jX2ludGVybmFsIChpc3RyZWFtLCBp
b19wcmlvcml0eSwgY2FuY2VsbGFibGUsCisJCQkJCQkgICAgY2FsbGJhY2ssIHVzZXJfZGF0YSk7
Cit9CisKKy8qKgorICogc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2ZpbmlzaDoKKyAqIEBo
dHRwc3RyZWFtOiBhICNTb3VwSFRUUElucHV0U3RyZWFtCisgKiBAcmVzdWx0OiBhICNHQXN5bmNS
ZXN1bHQuCisgKiBAZXJyb3I6IGEgI0dFcnJvciBsb2NhdGlvbiB0byBzdG9yZSB0aGUgZXJyb3Ig
b2NjdXJpbmcsIG9yICVOVUxMIHRvCisgKiBpZ25vcmUuCisgKgorICogRmluaXNoZXMgYSBzb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmMoKSBvcGVyYXRpb24uCisgKgorICogUmV0dXJu
IHZhbHVlOiAlVFJVRSBpZiB0aGUgbWVzc2FnZSB3YXMgc2VudCBzdWNjZXNzZnVsbHkgYW5kCisg
KiByZWNlaXZlZCBhIHN1Y2Nlc3NmdWwgc3RhdHVzIGNvZGUsICVGQUxTRSBpZiBub3QuCisgKiov
CitnYm9vbGVhbgorc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2ZpbmlzaCAoU291cEhUVFBJ
bnB1dFN0cmVhbSAgKmh0dHBzdHJlYW0sCisJCQkJICAgIEdBc3luY1Jlc3VsdCAgICAgICAgICpy
ZXN1bHQsCisJCQkJICAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcikKK3sKKwlHU2ltcGxl
QXN5bmNSZXN1bHQgKnNpbXBsZTsKKworCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHX0lTX1NJTVBM
RV9BU1lOQ19SRVNVTFQgKHJlc3VsdCksIEZBTFNFKTsKKwlzaW1wbGUgPSBHX1NJTVBMRV9BU1lO
Q19SRVNVTFQgKHJlc3VsdCk7CisKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoZ19zaW1wbGVfYXN5
bmNfcmVzdWx0X2dldF9zb3VyY2VfdGFnIChzaW1wbGUpID09IHNvdXBfaHR0cF9pbnB1dF9zdHJl
YW1fc2VuZF9hc3luYywgRkFMU0UpOworCisJaWYgKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9wcm9w
YWdhdGVfZXJyb3IgKHNpbXBsZSwgZXJyb3IpKQorCQlyZXR1cm4gRkFMU0U7CisKKwlyZXR1cm4g
Z19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9vcF9yZXNfZ2Jvb2xlYW4gKHNpbXBsZSk7Cit9CisK
K3N0YXRpYyB2b2lkCityZWFkX2FzeW5jX2RvbmUgKEdJbnB1dFN0cmVhbSAqc3RyZWFtKQorewor
CVNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gU09VUF9IVFRQX0lOUFVUX1NUUkVB
TV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKwlHU2ltcGxlQXN5bmNSZXN1bHQgKnJlc3VsdDsKKwlH
RXJyb3IgKmVycm9yID0gTlVMTDsKKworCXJlc3VsdCA9IHByaXYtPnJlc3VsdDsKKwlwcml2LT5y
ZXN1bHQgPSBOVUxMOworCisJaWYgKGdfY2FuY2VsbGFibGVfc2V0X2Vycm9yX2lmX2NhbmNlbGxl
ZCAocHJpdi0+Y2FuY2VsbGFibGUsICZlcnJvcikgfHwKKwkgICAgc2V0X2Vycm9yX2lmX2h0dHBf
ZmFpbGVkIChwcml2LT5tc2csICZlcnJvcikpIHsKKwkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3Nl
dF9mcm9tX2Vycm9yIChyZXN1bHQsIGVycm9yKTsKKwkJZ19lcnJvcl9mcmVlIChlcnJvcik7CisJ
fSBlbHNlCisJCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dzc2l6ZSAocmVzdWx0
LCBwcml2LT5jYWxsZXJfbnJlYWQpOworCisJcHJpdi0+Z290X2NodW5rX2NiID0gTlVMTDsKKwlw
cml2LT5maW5pc2hlZF9jYiA9IE5VTEw7CisJcHJpdi0+Y2FuY2VsbGVkX2NiID0gTlVMTDsKKwlz
b3VwX2h0dHBfaW5wdXRfc3RyZWFtX2RvbmVfaW8gKHN0cmVhbSk7CisKKwlnX3NpbXBsZV9hc3lu
Y19yZXN1bHRfY29tcGxldGUgKHJlc3VsdCk7CisJZ19vYmplY3RfdW5yZWYgKHJlc3VsdCk7Cit9
CisKK3N0YXRpYyB2b2lkCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMgKEdJbnB1
dFN0cmVhbSAgICAgICAgKnN0cmVhbSwKKwkJCQkgICB2b2lkICAgICAgICAgICAgICAgICpidWZm
ZXIsCisJCQkJICAgZ3NpemUgY291bnQsCisJCQkJICAgaW50IGlvX3ByaW9yaXR5LAorCQkJCSAg
IEdDYW5jZWxsYWJsZSAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJCSAgIEdBc3luY1JlYWR5Q2Fs
bGJhY2sgY2FsbGJhY2ssCisJCQkJICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCVNvdXBIVFRQ
SW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJ
VkFURSAoc3RyZWFtKTsKKwlHU2ltcGxlQXN5bmNSZXN1bHQgKnJlc3VsdDsKKworCS8qIElmIHRo
ZSBzZXNzaW9uIHVzZXMgdGhlIGRlZmF1bHQgR01haW5Db250ZXh0LCB0aGVuIHdlIGNhbiBkbwor
CSAqIGFzeW5jIEkvTyBkaXJlY3RseS4gQnV0IGlmIGl0IGhhcyBpdHMgb3duIG1haW4gY29udGV4
dCwgd2UgZmFsbAorCSAqIGJhY2sgdG8gdGhlIGFzeW5jLXZpYS1zeW5jLWluLWFub3RoZXItdGhy
ZWFkIGltcGxlbWVudGF0aW9uLgorCSAqLworCWlmIChzb3VwX3Nlc3Npb25fZ2V0X2FzeW5jX2Nv
bnRleHQgKHByaXYtPnNlc3Npb24pKSB7CisJCUdfSU5QVVRfU1RSRUFNX0NMQVNTIChzb3VwX2h0
dHBfaW5wdXRfc3RyZWFtX3BhcmVudF9jbGFzcyktPgorCQlyZWFkX2FzeW5jIChzdHJlYW0sIGJ1
ZmZlciwgY291bnQsIGlvX3ByaW9yaXR5LAorCQkJICAgIGNhbmNlbGxhYmxlLCBjYWxsYmFjaywg
dXNlcl9kYXRhKTsKKwkJcmV0dXJuOworCX0KKworCXJlc3VsdCA9IGdfc2ltcGxlX2FzeW5jX3Jl
c3VsdF9uZXcgKEdfT0JKRUNUIChzdHJlYW0pLAorCQkJCQkgICAgY2FsbGJhY2ssIHVzZXJfZGF0
YSwKKwkJCQkJICAgIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyk7CisKKwlpZiAo
cHJpdi0+ZmluaXNoZWQpIHsKKwkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ3Nz
aXplIChyZXN1bHQsIDApOworCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGVfaW5faWRs
ZSAocmVzdWx0KTsKKwkJZ19vYmplY3RfdW5yZWYgKHJlc3VsdCk7CisJCXJldHVybjsKKwl9CisK
KwlpZiAocHJpdi0+bGVmdG92ZXJfYnVmc2l6ZSkgeworCQlnc2l6ZSBucmVhZCA9IHJlYWRfZnJv
bV9sZWZ0b3ZlciAocHJpdiwgYnVmZmVyLCBjb3VudCk7CisJCWdfc2ltcGxlX2FzeW5jX3Jlc3Vs
dF9zZXRfb3BfcmVzX2dzc2l6ZSAocmVzdWx0LCBucmVhZCk7CisJCWdfc2ltcGxlX2FzeW5jX3Jl
c3VsdF9jb21wbGV0ZV9pbl9pZGxlIChyZXN1bHQpOworCQlnX29iamVjdF91bnJlZiAocmVzdWx0
KTsKKwkJcmV0dXJuOworCX0KKworCXByaXYtPnJlc3VsdCA9IHJlc3VsdDsKKworCXByaXYtPmdv
dF9jaHVua19jYiA9IHJlYWRfYXN5bmNfZG9uZTsKKwlwcml2LT5maW5pc2hlZF9jYiA9IHJlYWRf
YXN5bmNfZG9uZTsKKwlwcml2LT5jYW5jZWxsZWRfY2IgPSByZWFkX2FzeW5jX2RvbmU7CisJc291
cF9odHRwX2lucHV0X3N0cmVhbV9wcmVwYXJlX2Zvcl9pbyAoc3RyZWFtLCBjYW5jZWxsYWJsZSwg
YnVmZmVyLCBjb3VudCk7Cit9CisKK3N0YXRpYyBnc3NpemUKK3NvdXBfaHR0cF9pbnB1dF9zdHJl
YW1fcmVhZF9maW5pc2ggKEdJbnB1dFN0cmVhbSAgKnN0cmVhbSwKKwkJCQkgICAgR0FzeW5jUmVz
dWx0ICAqcmVzdWx0LAorCQkJCSAgICBHRXJyb3IgICAgICAgKiplcnJvcikKK3sKKwlHU2ltcGxl
QXN5bmNSZXN1bHQgKnNpbXBsZTsKKworCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHX0lTX1NJTVBM
RV9BU1lOQ19SRVNVTFQgKHJlc3VsdCksIC0xKTsKKwlzaW1wbGUgPSBHX1NJTVBMRV9BU1lOQ19S
RVNVTFQgKHJlc3VsdCk7CisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdfc2ltcGxlX2FzeW5jX3Jl
c3VsdF9nZXRfc291cmNlX3RhZyAoc2ltcGxlKSA9PSBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3Jl
YWRfYXN5bmMsIC0xKTsKKworCXJldHVybiBnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X29wX3Jl
c19nc3NpemUgKHNpbXBsZSk7Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX2h0dHBfaW5wdXRfc3Ry
ZWFtX2Nsb3NlX2FzeW5jIChHSW5wdXRTdHJlYW0gICAgICAgKnN0cmVhbSwKKwkJCQkgICAgaW50
IGlvX3ByaW9yaXR5LAorCQkJCSAgICBHQ2FuY2VsbGFibGUgICAgICAgKmNhbmNlbGxhYmxlLAor
CQkJCSAgICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAorCQkJCSAgICBncG9pbnRlciB1
c2VyX2RhdGEpCit7CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpyZXN1bHQ7CisJZ2Jvb2xlYW4gc3Vj
Y2VzczsKKwlHRXJyb3IgKmVycm9yID0gTlVMTDsKKworCXJlc3VsdCA9IGdfc2ltcGxlX2FzeW5j
X3Jlc3VsdF9uZXcgKEdfT0JKRUNUIChzdHJlYW0pLAorCQkJCQkgICAgY2FsbGJhY2ssIHVzZXJf
ZGF0YSwKKwkJCQkJICAgIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2VfYXN5bmMpOworCXN1
Y2Nlc3MgPSBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlIChzdHJlYW0sIGNhbmNlbGxhYmxl
LCAmZXJyb3IpOworCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dib29sZWFuIChy
ZXN1bHQsIHN1Y2Nlc3MpOworCWlmIChlcnJvcikgeworCQlnX3NpbXBsZV9hc3luY19yZXN1bHRf
c2V0X2Zyb21fZXJyb3IgKHJlc3VsdCwgZXJyb3IpOworCQlnX2Vycm9yX2ZyZWUgKGVycm9yKTsK
Kwl9CisKKwlnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGVfaW5faWRsZSAocmVzdWx0KTsK
KwlnX29iamVjdF91bnJlZiAocmVzdWx0KTsKK30KKworc3RhdGljIGdib29sZWFuCitzb3VwX2h0
dHBfaW5wdXRfc3RyZWFtX2Nsb3NlX2ZpbmlzaCAoR0lucHV0U3RyZWFtICAqc3RyZWFtLAorCQkJ
CSAgICAgR0FzeW5jUmVzdWx0ICAqcmVzdWx0LAorCQkJCSAgICAgR0Vycm9yICAgICAgICoqZXJy
b3IpCit7CisJLyogRmFpbHVyZXMgaGFuZGxlZCBpbiBnZW5lcmljIGNsb3NlX2ZpbmlzaCBjb2Rl
ICovCisJcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnb2Zmc2V0Citzb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX3RlbGwgKEdTZWVrYWJsZSAqc2Vla2FibGUpCit7CisJU291cEhUVFBJbnB1dFN0cmVh
bVByaXZhdGUgKnByaXYgPSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzZWVr
YWJsZSk7CisKKwlyZXR1cm4gcHJpdi0+b2Zmc2V0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3Nv
dXBfaHR0cF9pbnB1dF9zdHJlYW1fY2FuX3NlZWsgKEdTZWVrYWJsZSAqc2Vla2FibGUpCit7CisJ
cmV0dXJuIFRSVUU7Cit9CisKK2V4dGVybiB2b2lkIHNvdXBfbWVzc2FnZV9pb19jbGVhbnVwIChT
b3VwTWVzc2FnZSAqbXNnKTsKKworc3RhdGljIGdib29sZWFuCitzb3VwX2h0dHBfaW5wdXRfc3Ry
ZWFtX3NlZWsgKEdTZWVrYWJsZSAgICAgKnNlZWthYmxlLAorCQkJICAgICBnb2Zmc2V0IG9mZnNl
dCwKKwkJCSAgICAgR1NlZWtUeXBlIHR5cGUsCisJCQkgICAgIEdDYW5jZWxsYWJsZSAgKmNhbmNl
bGxhYmxlLAorCQkJICAgICBHRXJyb3IgICAgICAgKiplcnJvcikKK3sKKwlHSW5wdXRTdHJlYW0g
KnN0cmVhbSA9IEdfSU5QVVRfU1RSRUFNIChzZWVrYWJsZSk7CisJU291cEhUVFBJbnB1dFN0cmVh
bVByaXZhdGUgKnByaXYgPSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzZWVr
YWJsZSk7CisJY2hhciAqcmFuZ2U7CisKKwlpZiAodHlwZSA9PSBHX1NFRUtfRU5EKSB7CisJCS8q
IEZJWE1FOiB3ZSBjb3VsZCBzZW5kICJieXRlcz0tb2Zmc2V0IiwgYnV0IHVubGVzcyB3ZQorCQkg
KiBrbm93IHRoZSBDb250ZW50LUxlbmd0aCwgd2Ugd291bGRuJ3QgYmUgYWJsZSB0bworCQkgKiBh
bnN3ZXIgYSB0ZWxsKCkgcHJvcGVybHkuIFdlIGNvdWxkIGZpbmQgdGhlCisJCSAqIENvbnRlbnQt
TGVuZ3RoIGJ5IGRvaW5nIGEgSEVBRC4uLgorCQkgKi8KKworCQlnX3NldF9lcnJvcl9saXRlcmFs
IChlcnJvciwgR19JT19FUlJPUiwgR19JT19FUlJPUl9OT1RfU1VQUE9SVEVELAorCQkJCSAgICAg
IkdfU0VFS19FTkQgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQiKTsKKwkJcmV0dXJuIEZBTFNFOwor
CX0KKworCWlmICghZ19pbnB1dF9zdHJlYW1fc2V0X3BlbmRpbmcgKHN0cmVhbSwgZXJyb3IpKQor
CQlyZXR1cm4gRkFMU0U7CisKKwlzb3VwX3Nlc3Npb25fY2FuY2VsX21lc3NhZ2UgKHByaXYtPnNl
c3Npb24sIHByaXYtPm1zZywgU09VUF9TVEFUVVNfQ0FOQ0VMTEVEKTsKKwlzb3VwX21lc3NhZ2Vf
aW9fY2xlYW51cCAocHJpdi0+bXNnKTsKKworCXN3aXRjaCAodHlwZSkgeworCQljYXNlIEdfU0VF
S19DVVI6CisJCQlvZmZzZXQgKz0gcHJpdi0+b2Zmc2V0OworCQkvKiBmYWxsIHRocm91Z2ggKi8K
KworCQljYXNlIEdfU0VFS19TRVQ6CisJCQlyYW5nZSA9IGdfc3RyZHVwX3ByaW50ZiAoImJ5dGVz
PSUiIEdfR1VJTlQ2NF9GT1JNQVQgIi0iLCAoZ3VpbnQ2NClvZmZzZXQpOworCQkJcHJpdi0+b2Zm
c2V0ID0gb2Zmc2V0OworCQkJYnJlYWs7CisKKwkJY2FzZSBHX1NFRUtfRU5EOgorCQkJcmFuZ2Ug
PSBOVUxMOyAvKiBrZWVwIGNvbXBpbGVycyBoYXBweSAqLworCQkJZ19yZXR1cm5fdmFsX2lmX3Jl
YWNoZWQgKEZBTFNFKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlnX3JldHVybl92YWxf
aWZfcmVhY2hlZCAoRkFMU0UpOworCX0KKworCXNvdXBfbWVzc2FnZV9oZWFkZXJzX3JlbW92ZSAo
cHJpdi0+bXNnLT5yZXF1ZXN0X2hlYWRlcnMsICJSYW5nZSIpOworCXNvdXBfbWVzc2FnZV9oZWFk
ZXJzX2FwcGVuZCAocHJpdi0+bXNnLT5yZXF1ZXN0X2hlYWRlcnMsICJSYW5nZSIsIHJhbmdlKTsK
KwlnX2ZyZWUgKHJhbmdlKTsKKworCXNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcXVldWVfbWVzc2Fn
ZSAoU09VUF9IVFRQX0lOUFVUX1NUUkVBTSAoc3RyZWFtKSk7CisKKwlnX2lucHV0X3N0cmVhbV9j
bGVhcl9wZW5kaW5nIChzdHJlYW0pOworCXJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xl
YW4KK3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2FuX3RydW5jYXRlIChHU2Vla2FibGUgKnNlZWth
YmxlKQoreworCXJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGdib29sZWFuCitzb3VwX2h0dHBf
aW5wdXRfc3RyZWFtX3RydW5jYXRlIChHU2Vla2FibGUgICAgICpzZWVrYWJsZSwKKwkJCQkgZ29m
ZnNldCBvZmZzZXQsCisJCQkJIEdDYW5jZWxsYWJsZSAgKmNhbmNlbGxhYmxlLAorCQkJCSBHRXJy
b3IgICAgICAgKiplcnJvcikKK3sKKwlnX3NldF9lcnJvcl9saXRlcmFsIChlcnJvciwgR19JT19F
UlJPUiwgR19JT19FUlJPUl9OT1RfU1VQUE9SVEVELAorCQkJICAgICAiVHJ1bmNhdGUgbm90IGFs
bG93ZWQgb24gaW5wdXQgc3RyZWFtIik7CisJcmV0dXJuIEZBTFNFOworfQorCitTb3VwTWVzc2Fn
ZSAqCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dldF9tZXNzYWdlIChTb3VwSFRUUElucHV0U3Ry
ZWFtICpodHRwc3RyZWFtKQoreworCVNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0g
U09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoaHR0cHN0cmVhbSk7CisJcmV0dXJu
IHByaXYtPm1zZyA/IGdfb2JqZWN0X3JlZiAocHJpdi0+bXNnKSA6IE5VTEw7Cit9CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQt
c3RyZWFtLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAt
aW5wdXQtc3RyZWFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RlN2Jj
MAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0uaApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA3LCAyMDA5IFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykg
MjAxMCBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwK
KyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19TT1VQX0hU
VFBfSU5QVVRfU1RSRUFNX0hfXworI2RlZmluZSBfX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fSF9f
CisKKyNpbmNsdWRlIDxnaW8vZ2lvLmg+CisjaW5jbHVkZSA8bGlic291cC9zb3VwLXR5cGVzLmg+
CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBTT1VQX1RZUEVfSFRUUF9JTlBVVF9TVFJFQU0g
ICAgICAgICAoc291cF9odHRwX2lucHV0X3N0cmVhbV9nZXRfdHlwZSAoKSkKKyNkZWZpbmUgU09V
UF9IVFRQX0lOUFVUX1NUUkVBTShvKSAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9D
QVNUICgobyksIFNPVVBfVFlQRV9IVFRQX0lOUFVUX1NUUkVBTSwgU291cEhUVFBJbnB1dFN0cmVh
bSkpCisjZGVmaW5lIFNPVVBfSFRUUF9JTlBVVF9TVFJFQU1fQ0xBU1MoaykgICAgIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfQ0FTVCAoKGspLCBTT1VQX1RZUEVfSFRUUF9JTlBVVF9TVFJFQU0sIFNvdXBI
VFRQSW5wdXRTdHJlYW1DbGFzcykpCisjZGVmaW5lIFNPVVBfSVNfSFRUUF9JTlBVVF9TVFJFQU0o
bykgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG8pLCBTT1VQX1RZUEVfSFRU
UF9JTlBVVF9TVFJFQU0pKQorI2RlZmluZSBTT1VQX0lTX0hUVFBfSU5QVVRfU1RSRUFNX0NMQVNT
KGspICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrKSwgU09VUF9UWVBFX0hUVFBfSU5QVVRf
U1RSRUFNKSkKKyNkZWZpbmUgU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfQ0xBU1MobykgKEdf
VFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvKSwgU09VUF9UWVBFX0hUVFBfSU5QVVRfU1RSRUFN
LCBTb3VwSFRUUElucHV0U3RyZWFtQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBTb3VwSFRUUElu
cHV0U3RyZWFtIFNvdXBIVFRQSW5wdXRTdHJlYW07Cit0eXBlZGVmIHN0cnVjdCBTb3VwSFRUUElu
cHV0U3RyZWFtQ2xhc3MgU291cEhUVFBJbnB1dFN0cmVhbUNsYXNzOworCitzdHJ1Y3QgU291cEhU
VFBJbnB1dFN0cmVhbSB7CisJR0lucHV0U3RyZWFtIHBhcmVudDsKK307CisKK3N0cnVjdCBTb3Vw
SFRUUElucHV0U3RyZWFtQ2xhc3MgeworCUdJbnB1dFN0cmVhbUNsYXNzIHBhcmVudF9jbGFzczsK
KworCS8qIFBhZGRpbmcgZm9yIGZ1dHVyZSBleHBhbnNpb24gKi8KKwl2b2lkICgqX2dfcmVzZXJ2
ZWQxKSh2b2lkKTsKKwl2b2lkICgqX2dfcmVzZXJ2ZWQyKSh2b2lkKTsKKwl2b2lkICgqX2dfcmVz
ZXJ2ZWQzKSh2b2lkKTsKKwl2b2lkICgqX2dfcmVzZXJ2ZWQ0KSh2b2lkKTsKKwl2b2lkICgqX2df
cmVzZXJ2ZWQ1KSh2b2lkKTsKK307CisKK0dUeXBlIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ2V0
X3R5cGUgKHZvaWQpIEdfR05VQ19DT05TVDsKKworU291cEhUVFBJbnB1dFN0cmVhbSAqc291cF9o
dHRwX2lucHV0X3N0cmVhbV9uZXcgKFNvdXBTZXNzaW9uICAgICAgICAgKnNlc3Npb24sCisJCQkJ
CQkgU291cE1lc3NhZ2UgICAgICAgICAqbXNnKTsKKworZ2Jvb2xlYW4gICAgICAgICAgICAgc291
cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kIChTb3VwSFRUUElucHV0U3RyZWFtICpodHRwc3RyZWFt
LAorCQkJCQkJICBHQ2FuY2VsbGFibGUgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkJCSAgR0Vy
cm9yICAgICAgICAgICAgICoqZXJyb3IpOworCit2b2lkICAgICAgICAgICAgICAgICBzb3VwX2h0
dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmMgKFNvdXBIVFRQSW5wdXRTdHJlYW0gKmh0dHBzdHJl
YW0sCisJCQkJCQkJaW50IGlvX3ByaW9yaXR5LAorCQkJCQkJCUdDYW5jZWxsYWJsZSAgICAgICAg
KmNhbmNlbGxhYmxlLAorCQkJCQkJCUdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCisJCQkJ
CQkJZ3BvaW50ZXIgdXNlcl9kYXRhKTsKK2dib29sZWFuICAgICAgICAgICAgIHNvdXBfaHR0cF9p
bnB1dF9zdHJlYW1fc2VuZF9maW5pc2ggKFNvdXBIVFRQSW5wdXRTdHJlYW0gKmh0dHBzdHJlYW0s
CisJCQkJCQkJIEdBc3luY1Jlc3VsdCAgICAgICAgKnJlc3VsdCwKKwkJCQkJCQkgR0Vycm9yICAg
ICAgICAgICAgICoqZXJyb3IpOworCitTb3VwTWVzc2FnZSAgICAgICAgICpzb3VwX2h0dHBfaW5w
dXRfc3RyZWFtX2dldF9tZXNzYWdlIChTb3VwSFRUUElucHV0U3RyZWFtICpodHRwc3RyZWFtKTsK
KworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9fU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9IX18g
Ki8KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAt
cmVxdWVzdC1kYXRhLmMgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3Vw
LXJlcXVlc3QtZGF0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZjkx
YzYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNo
ZS9zb3VwLXJlcXVlc3QtZGF0YS5jCkBAIC0wLDAgKzEsMjA1IEBACisvKgorICogc291cC1yZXF1
ZXN0LWRhdGEuYzogZGF0YTogVVJJIHJlcXVlc3Qgb2JqZWN0CisgKgorICogQ29weXJpZ2h0IChD
KSAyMDA5IFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorI2luY2x1
ZGUgInNvdXAtcmVxdWVzdC1kYXRhLmgiCisKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3Rlci5oIgor
I2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorI2luY2x1ZGUgPGdsaWIvZ2kxOG4uaD4KKworR19E
RUZJTkVfVFlQRSAoU291cFJlcXVlc3REYXRhLCBzb3VwX3JlcXVlc3RfZGF0YSwgU09VUF9UWVBF
X1JFUVVFU1QpCisKK3N0cnVjdCBfU291cFJlcXVlc3REYXRhUHJpdmF0ZSB7CisJZ3NpemUgY29u
dGVudF9sZW5ndGg7CisJY2hhciAqY29udGVudF90eXBlOworfTsKKworc3RhdGljIHZvaWQKK3Nv
dXBfcmVxdWVzdF9kYXRhX2luaXQgKFNvdXBSZXF1ZXN0RGF0YSAqZGF0YSkKK3sKKwlkYXRhLT5w
cml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFIChkYXRhLCBTT1VQX1RZUEVfUkVRVUVT
VF9EQVRBLCBTb3VwUmVxdWVzdERhdGFQcml2YXRlKTsKK30KKworc3RhdGljIHZvaWQKK3NvdXBf
cmVxdWVzdF9kYXRhX2ZpbmFsaXplIChHT2JqZWN0ICpvYmplY3QpCit7CisJU291cFJlcXVlc3RE
YXRhICpkYXRhID0gU09VUF9SRVFVRVNUX0RBVEEgKG9iamVjdCk7CisKKwlnX2ZyZWUgKGRhdGEt
PnByaXYtPmNvbnRlbnRfdHlwZSk7CisKKwlHX09CSkVDVF9DTEFTUyAoc291cF9yZXF1ZXN0X2Rh
dGFfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Cit9CisKK3N0YXRpYyBnYm9vbGVh
bgorc291cF9yZXF1ZXN0X2RhdGFfY2hlY2tfdXJpIChTb3VwUmVxdWVzdCAgKnJlcXVlc3QsCisJ
CQkgICAgIFNvdXBVUkkgICAgICAqdXJpLAorCQkJICAgICBHRXJyb3IgICAgICAqKmVycm9yKQor
eworCXJldHVybiB1cmktPmhvc3QgPT0gTlVMTDsKK30KKworCisjZGVmaW5lIFhESUdJVChjKSAo
KGMpIDw9ICc5JyA/IChjKSAtICcwJyA6ICgoYykgJiAweDRGKSAtICdBJyArIDEwKQorI2RlZmlu
ZSBIRVhDSEFSKHMpICgoWERJR0lUIChzWzFdKSA8PCA0KSArIFhESUdJVCAoc1syXSkpCisKK2No
YXIgKgordXJpX2RlY29kZWRfY29weSAoY29uc3QgY2hhciAqcGFydCwgaW50IGxlbmd0aCwgZ2Jv
b2xlYW4gZml4dXApCit7CisJdW5zaWduZWQgY2hhciAqcywgKmQ7CisJY2hhciAqZGVjb2RlZCA9
IGdfc3RybmR1cCAocGFydCwgbGVuZ3RoKTsKKworCXMgPSBkID0gKHVuc2lnbmVkIGNoYXIgKilk
ZWNvZGVkOworCWRvIHsKKwkJaWYgKCpzID09ICclJykgeworCQkJaWYgKCFnX2FzY2lpX2lzeGRp
Z2l0IChzWzFdKSB8fAorCQkJICAgICFnX2FzY2lpX2lzeGRpZ2l0IChzWzJdKSkgeworCQkJCWlm
ICghZml4dXApIHsKKwkJCQkJZ19mcmVlIChkZWNvZGVkKTsKKwkJCQkJcmV0dXJuIE5VTEw7CisJ
CQkJfQorCQkJCSpkKysgPSAqczsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCSpkKysgPSBIRVhD
SEFSIChzKTsKKwkJCXMgKz0gMjsKKwkJfSBlbHNlCisJCQkqZCsrID0gKnM7CisJfSB3aGlsZSAo
KnMrKyk7CisKKwlyZXR1cm4gZGVjb2RlZDsKK30KKworc3RhdGljIEdJbnB1dFN0cmVhbSAqCitz
b3VwX3JlcXVlc3RfZGF0YV9zZW5kIChTb3VwUmVxdWVzdCAgICpyZXF1ZXN0LAorCQkJR0NhbmNl
bGxhYmxlICAqY2FuY2VsbGFibGUsCisJCQlHRXJyb3IgICAgICAgKiplcnJvcikKK3sKKwlTb3Vw
UmVxdWVzdERhdGEgKmRhdGEgPSBTT1VQX1JFUVVFU1RfREFUQSAocmVxdWVzdCk7CisJU291cFVS
SSAqdXJpID0gc291cF9yZXF1ZXN0X2dldF91cmkgKHJlcXVlc3QpOworCUdJbnB1dFN0cmVhbSAq
bWVtc3RyZWFtOworCWNvbnN0IGNoYXIgKmNvbW1hLCAqc2VtaSwgKnN0YXJ0LCAqZW5kOworCWdi
b29sZWFuIGJhc2U2NCA9IEZBTFNFOworCisJZ2NoYXIgKnVyaXN0ciA9IHNvdXBfdXJpX3RvX3N0
cmluZyAodXJpLCBGQUxTRSk7CisJY29tbWEgPSBzdHJjaHIgKHVyaXN0ciwgJywnKTsKKwlpZiAo
Y29tbWEgJiYgY29tbWEgIT0gdXJpc3RyKSB7CisJCS8qIERlYWwgd2l0aCBNSU1FIHR5cGUgLyBw
YXJhbXMgKi8KKwkJc2VtaSA9IG1lbWNociAodXJpc3RyLCAnOycsIGNvbW1hIC0gdXJpc3RyKTsK
KwkJZW5kID0gc2VtaSA/IHNlbWkgOiBjb21tYTsKKworCQlpZiAoZW5kICE9IHVyaXN0cikKKwkJ
CWRhdGEtPnByaXYtPmNvbnRlbnRfdHlwZSA9IHVyaV9kZWNvZGVkX2NvcHkgKHVyaXN0ciwgZW5k
IC0gdXJpc3RyLCBUUlVFKTsKKworCQlpZiAoc2VtaSAmJiAhZ19hc2NpaV9zdHJuY2FzZWNtcCAo
c2VtaSwgIjtiYXNlNjQiLCBNQVggKGNvbW1hIC0gc2VtaSwgc3RybGVuICgiO2Jhc2U2NCIpKSkp
CisJCQliYXNlNjQgPSBUUlVFOworCX0KKworCW1lbXN0cmVhbSA9IGdfbWVtb3J5X2lucHV0X3N0
cmVhbV9uZXcgKCk7CisKKwlzdGFydCA9IGNvbW1hID8gY29tbWEgKyAxIDogdXJpc3RyOworCisJ
aWYgKCpzdGFydCkgeworCQlndWNoYXIgKmJ1ZjsKKworCQlpZiAoYmFzZTY0KSB7CisJCQlpbnQg
aW5sZW4sIHN0YXRlID0gMDsKKwkJCWd1aW50IHNhdmUgPSAwOworCQkJY2hhciAqdW5lc2NhcGVk
OworCisJCQlpZiAoc3RyY2hyIChzdGFydCwgJyUnKSkgeworCQkJCXN0YXJ0ID0gdW5lc2NhcGVk
ID0gdXJpX2RlY29kZWRfY29weSAoc3RhcnQsIHN0cmxlbiAoc3RhcnQpLCBUUlVFKTsKKwkJCQlp
ZiAoIXVuZXNjYXBlZCkKKwkJCQkJZ290byBmYWlsOworCQkJfSBlbHNlCisJCQkJdW5lc2NhcGVk
ID0gTlVMTDsKKworCQkJaW5sZW4gPSBzdHJsZW4gKHN0YXJ0KTsKKwkJCWJ1ZiA9IGdfbWFsbG9j
IChpbmxlbiAqIDMgLyA0KTsKKwkJCWRhdGEtPnByaXYtPmNvbnRlbnRfbGVuZ3RoID0KKwkJCQln
X2Jhc2U2NF9kZWNvZGVfc3RlcCAoc3RhcnQsIGlubGVuLCBidWYsCisJCQkJCQkgICAgICAmc3Rh
dGUsICZzYXZlKTsKKwkJCWdfZnJlZSAodW5lc2NhcGVkKTsKKwkJCWlmIChzdGF0ZSAhPSAwKSB7
CisJCQkJZ19mcmVlIChidWYpOworCQkJCWdvdG8gZmFpbDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJ
CS8qIENhbm5vdCB1c2UgZ191cmlfdW5lc2NhcGVfc3RyaW5nIG5vcgorCQkJICAgc291cF91cmlf
ZGVjb2RlIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0bworCQkJICAgZmFpbCBmb3IgdGhpbmdzIGxp
a2UgIiUzRSUlM0MiIC0+ICI+JTwiICovCisJCQlidWYgPSAoZ3VjaGFyICopdXJpX2RlY29kZWRf
Y29weSAoc3RhcnQsIHN0cmxlbiAoc3RhcnQpLCBUUlVFKTsKKwkJCWlmICghYnVmKQorCQkJCWdv
dG8gZmFpbDsKKwkJCWRhdGEtPnByaXYtPmNvbnRlbnRfbGVuZ3RoID0gc3RybGVuICgoY2hhciAq
KWJ1Zik7CisJCX0KKworCQlnX21lbW9yeV9pbnB1dF9zdHJlYW1fYWRkX2RhdGEgKEdfTUVNT1JZ
X0lOUFVUX1NUUkVBTSAobWVtc3RyZWFtKSwKKwkJCQkJCWJ1ZiwgZGF0YS0+cHJpdi0+Y29udGVu
dF9sZW5ndGgsCisJCQkJCQlnX2ZyZWUpOworCX0KKwlnX2ZyZWUgKHVyaXN0cik7CisKKwlyZXR1
cm4gbWVtc3RyZWFtOworCisgZmFpbDoKKwlnX2ZyZWUgKHVyaXN0cik7CisJZ19zZXRfZXJyb3Ig
KGVycm9yLCBTT1VQX0VSUk9SLCBTT1VQX0VSUk9SX0JBRF9VUkksCisJCSAgICAgXyAoIlVuYWJs
ZSB0byBkZWNvZGUgVVJJOiAlcyIpLCBzdGFydCk7CisJZ19vYmplY3RfdW5yZWYgKG1lbXN0cmVh
bSk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBnb2Zmc2V0Citzb3VwX3JlcXVlc3RfZGF0
YV9nZXRfY29udGVudF9sZW5ndGggKFNvdXBSZXF1ZXN0ICpyZXF1ZXN0KQoreworCVNvdXBSZXF1
ZXN0RGF0YSAqZGF0YSA9IFNPVVBfUkVRVUVTVF9EQVRBIChyZXF1ZXN0KTsKKworCXJldHVybiBk
YXRhLT5wcml2LT5jb250ZW50X2xlbmd0aDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorc291
cF9yZXF1ZXN0X2RhdGFfZ2V0X2NvbnRlbnRfdHlwZSAoU291cFJlcXVlc3QgKnJlcXVlc3QpCit7
CisJU291cFJlcXVlc3REYXRhICpkYXRhID0gU09VUF9SRVFVRVNUX0RBVEEgKHJlcXVlc3QpOwor
CisJcmV0dXJuIGRhdGEtPnByaXYtPmNvbnRlbnRfdHlwZTsKK30KKworc3RhdGljIHZvaWQKK3Nv
dXBfcmVxdWVzdF9kYXRhX2NsYXNzX2luaXQgKFNvdXBSZXF1ZXN0RGF0YUNsYXNzICpyZXF1ZXN0
X2RhdGFfY2xhc3MpCit7CisJR09iamVjdENsYXNzICpvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9D
TEFTUyAocmVxdWVzdF9kYXRhX2NsYXNzKTsKKwlTb3VwUmVxdWVzdENsYXNzICpyZXF1ZXN0X2Ns
YXNzID0KKwkJU09VUF9SRVFVRVNUX0NMQVNTIChyZXF1ZXN0X2RhdGFfY2xhc3MpOworCisJZ190
eXBlX2NsYXNzX2FkZF9wcml2YXRlIChyZXF1ZXN0X2RhdGFfY2xhc3MsIHNpemVvZiAoU291cFJl
cXVlc3REYXRhUHJpdmF0ZSkpOworCisJb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IHNvdXBfcmVx
dWVzdF9kYXRhX2ZpbmFsaXplOworCisJcmVxdWVzdF9jbGFzcy0+Y2hlY2tfdXJpID0gc291cF9y
ZXF1ZXN0X2RhdGFfY2hlY2tfdXJpOworCXJlcXVlc3RfY2xhc3MtPnNlbmQgPSBzb3VwX3JlcXVl
c3RfZGF0YV9zZW5kOworCXJlcXVlc3RfY2xhc3MtPmdldF9jb250ZW50X2xlbmd0aCA9IHNvdXBf
cmVxdWVzdF9kYXRhX2dldF9jb250ZW50X2xlbmd0aDsKKwlyZXF1ZXN0X2NsYXNzLT5nZXRfY29u
dGVudF90eXBlID0gc291cF9yZXF1ZXN0X2RhdGFfZ2V0X2NvbnRlbnRfdHlwZTsKK30KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1k
YXRhLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Qt
ZGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjMTRmMzcKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJl
cXVlc3QtZGF0YS5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
UmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVm
IFNPVVBfUkVRVUVTVF9EQVRBX0gKKyNkZWZpbmUgU09VUF9SRVFVRVNUX0RBVEFfSCAxCisKKyNp
bmNsdWRlICJzb3VwLXJlcXVlc3QuaCIKKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFNPVVBf
VFlQRV9SRVFVRVNUX0RBVEEgICAgICAgICAgICAoc291cF9yZXF1ZXN0X2RhdGFfZ2V0X3R5cGUg
KCkpCisjZGVmaW5lIFNPVVBfUkVRVUVTVF9EQVRBKG9iamVjdCkgICAgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX0NBU1QgKChvYmplY3QpLCBTT1VQX1RZUEVfUkVRVUVTVF9EQVRBLCBTb3Vw
UmVxdWVzdERhdGEpKQorI2RlZmluZSBTT1VQX1JFUVVFU1RfREFUQV9DTEFTUyhrbGFzcykgICAg
KEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBTT1VQX1RZUEVfUkVRVUVTVF9EQVRB
LCBTb3VwUmVxdWVzdERhdGFDbGFzcykpCisjZGVmaW5lIFNPVVBfSVNfUkVRVUVTVF9EQVRBKG9i
amVjdCkgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmplY3QpLCBTT1VQX1RZ
UEVfUkVRVUVTVF9EQVRBKSkKKyNkZWZpbmUgU09VUF9JU19SRVFVRVNUX0RBVEFfQ0xBU1Moa2xh
c3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgU09VUF9UWVBFX1JFUVVFU1Rf
REFUQSkpCisjZGVmaW5lIFNPVVBfUkVRVUVTVF9EQVRBX0dFVF9DTEFTUyhvYmopICAoR19UWVBF
X0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIFNPVVBfVFlQRV9SRVFVRVNUX0RBVEEsIFNvdXBS
ZXF1ZXN0RGF0YUNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1NvdXBSZXF1ZXN0RGF0YVByaXZh
dGUgU291cFJlcXVlc3REYXRhUHJpdmF0ZTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCVNvdXBSZXF1
ZXN0IHBhcmVudDsKKworCVNvdXBSZXF1ZXN0RGF0YVByaXZhdGUgKnByaXY7Cit9IFNvdXBSZXF1
ZXN0RGF0YTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCVNvdXBSZXF1ZXN0Q2xhc3MgcGFyZW50Owor
fSBTb3VwUmVxdWVzdERhdGFDbGFzczsKKworR1R5cGUgc291cF9yZXF1ZXN0X2RhdGFfZ2V0X3R5
cGUgKHZvaWQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogU09VUF9SRVFVRVNUX0RBVEFf
SCAqLwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291
cC1yZXF1ZXN0LWZpbGUuYyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3Nv
dXAtcmVxdWVzdC1maWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNm
ZTc5ZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2Nh
Y2hlL3NvdXAtcmVxdWVzdC1maWxlLmMKQEAgLTAsMCArMSwzMjIgQEAKKy8qCisgKiBzb3VwLXJl
cXVlc3QtZmlsZS5jOiBmaWxlOiBVUkkgcmVxdWVzdCBvYmplY3QKKyAqCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5M
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNp
bmNsdWRlICJzb3VwLXJlcXVlc3QtZmlsZS5oIgorI2luY2x1ZGUgInNvdXAtZGlyZWN0b3J5LWlu
cHV0LXN0cmVhbS5oIgorI2luY2x1ZGUgInNvdXAtcmVxdWVzdGVyLmgiCisjaW5jbHVkZSA8Z2xp
Yi9naTE4bi5oPgorCitHX0RFRklORV9UWVBFIChTb3VwUmVxdWVzdEZpbGUsIHNvdXBfcmVxdWVz
dF9maWxlLCBTT1VQX1RZUEVfUkVRVUVTVCkKKworc3RydWN0IF9Tb3VwUmVxdWVzdEZpbGVQcml2
YXRlIHsKKwlHRmlsZSAqZ2ZpbGU7CisKKwljaGFyICptaW1lX3R5cGU7CisJZ29mZnNldCBzaXpl
OworfTsKKworR0ZpbGUgKgorc291cF9yZXF1ZXN0X2ZpbGVfZ2V0X2ZpbGUgKFNvdXBSZXF1ZXN0
RmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gZ19vYmplY3RfcmVmIChmaWxlLT5wcml2LT5nZmlsZSk7
Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX3JlcXVlc3RfZmlsZV9pbml0IChTb3VwUmVxdWVzdEZp
bGUgKmZpbGUpCit7CisJZmlsZS0+cHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAo
ZmlsZSwgU09VUF9UWVBFX1JFUVVFU1RfRklMRSwgU291cFJlcXVlc3RGaWxlUHJpdmF0ZSk7CisK
KwlmaWxlLT5wcml2LT5zaXplID0gLTE7Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX3JlcXVlc3Rf
ZmlsZV9maW5hbGl6ZSAoR09iamVjdCAqb2JqZWN0KQoreworCVNvdXBSZXF1ZXN0RmlsZSAqZmls
ZSA9IFNPVVBfUkVRVUVTVF9GSUxFIChvYmplY3QpOworCisJaWYgKGZpbGUtPnByaXYtPmdmaWxl
KQorCQlnX29iamVjdF91bnJlZiAoZmlsZS0+cHJpdi0+Z2ZpbGUpOworCWdfZnJlZSAoZmlsZS0+
cHJpdi0+bWltZV90eXBlKTsKKworCUdfT0JKRUNUX0NMQVNTIChzb3VwX3JlcXVlc3RfZmlsZV9w
YXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKK30KKworc3RhdGljIGdib29sZWFuCitz
b3VwX3JlcXVlc3RfZmlsZV9jaGVja191cmkgKFNvdXBSZXF1ZXN0ICAqcmVxdWVzdCwKKwkJCSAg
ICAgU291cFVSSSAgICAgICp1cmksCisJCQkgICAgIEdFcnJvciAgICAgICoqZXJyb3IpCit7CisJ
LyogImZpbGU6L2ZvbyIgaXMgbm90IHZhbGlkICovCisJaWYgKCF1cmktPmhvc3QpCisJCXJldHVy
biBGQUxTRTsKKworCS8qIGJ1dCBpdCBtdXN0IGJlICJmaWxlOi8vLy4uLiIgb3IgImZpbGU6Ly9s
b2NhbGhvc3QvLi4uIiAqLworCWlmICh1cmktPnNjaGVtZSA9PSBTT1VQX1VSSV9TQ0hFTUVfRklM
RSAmJgorCSAgICAqdXJpLT5ob3N0ICYmCisJICAgIGdfYXNjaWlfc3RyY2FzZWNtcCAodXJpLT5o
b3N0LCAibG9jYWxob3N0IikgIT0gMCkKKwkJcmV0dXJuIEZBTFNFOworCisJcmV0dXJuIFRSVUU7
Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX3JlcXVlc3RfZmlsZV9mdHBfbWFpbl9sb29wX3F1aXQg
KEdPYmplY3QgICAgICAqb2JqZWN0LAorCQkJCSAgICAgIEdBc3luY1Jlc3VsdCAqcmVzdWx0LAor
CQkJCSAgICAgIGdwb2ludGVyIGxvb3ApCit7CisJZ19tYWluX2xvb3BfcXVpdCAobG9vcCk7Cit9
CisKKy8qIFRoaXMgaXMgYSBzb21ld2hhdCBoYWNreSB3YXkgdG8gZ2V0IEZUUCB0byBhbG1vc3Qg
d29yay4gVGhlIHByb3BlciB3YXkgdG8KKyAqIGdldCBGVFAgdG8gX3JlYWxseV8gd29yayBpbnZv
bHZlcyBoYWNraW5nIEdJTyB0byBoYXZlIEFQSXMgdG8gaGFuZGxlCisgKiBjYW5vbmNpYWwgVVJM
cy4KKyAqLworc3RhdGljIEdGaWxlICoKK3NvdXBfcmVxdWVzdF9maWxlX2Vuc3VyZV9maWxlX2Z0
cCAoU291cFVSSSAgICAgICAqdXJpLAorCQkJCSAgIEdDYW5jZWxsYWJsZSAgKmNhbmNlbGxhYmxl
LAorCQkJCSAgIEdFcnJvciAgICAgICAqKmVycm9yKQoreworCVNvdXBVUkkgKmhvc3Q7CisJY2hh
ciAqczsKKwlHRmlsZSAqZmlsZSwgKnJlc3VsdDsKKwlHTW91bnQgKm1vdW50OworCisJaG9zdCA9
IHNvdXBfdXJpX2NvcHlfaG9zdCAodXJpKTsKKwlzID0gc291cF91cmlfdG9fc3RyaW5nIChob3N0
LCBGQUxTRSk7CisJZmlsZSA9IGdfZmlsZV9uZXdfZm9yX3VyaSAocyk7CisJc291cF91cmlfZnJl
ZSAoaG9zdCk7CisJZ19mcmVlIChzKTsKKworCW1vdW50ID0gZ19maWxlX2ZpbmRfZW5jbG9zaW5n
X21vdW50IChmaWxlLCBjYW5jZWxsYWJsZSwgZXJyb3IpOworCWlmIChtb3VudCA9PSBOVUxMICYm
IGdfZmlsZV9zdXBwb3J0c190aHJlYWRfY29udGV4dHMgKGZpbGUpKSB7CisJCUdNYWluQ29udGV4
dCAqY29udGV4dCA9IGdfbWFpbl9jb250ZXh0X25ldyAoKTsKKwkJR01haW5Mb29wICpsb29wID0g
Z19tYWluX2xvb3BfbmV3IChjb250ZXh0LCBGQUxTRSk7CisKKwkJZ19jbGVhcl9lcnJvciAoZXJy
b3IpOworCQlnX21haW5fY29udGV4dF9wdXNoX3RocmVhZF9kZWZhdWx0IChjb250ZXh0KTsKKwkJ
Z19maWxlX21vdW50X2VuY2xvc2luZ192b2x1bWUgKGZpbGUsCisJCQkJCSAgICAgICBHX01PVU5U
X01PVU5UX05PTkUsCisJCQkJCSAgICAgICBOVUxMLCAvKiBGSVhNRSEgKi8KKwkJCQkJICAgICAg
IGNhbmNlbGxhYmxlLAorCQkJCQkgICAgICAgc291cF9yZXF1ZXN0X2ZpbGVfZnRwX21haW5fbG9v
cF9xdWl0LAorCQkJCQkgICAgICAgbG9vcCk7CisJCWdfbWFpbl9sb29wX3J1biAobG9vcCk7CisJ
CWdfbWFpbl9jb250ZXh0X3BvcF90aHJlYWRfZGVmYXVsdCAoY29udGV4dCk7CisJCWdfbWFpbl9s
b29wX3VucmVmIChsb29wKTsKKwkJZ19tYWluX2NvbnRleHRfdW5yZWYgKGNvbnRleHQpOworCQlt
b3VudCA9IGdfZmlsZV9maW5kX2VuY2xvc2luZ19tb3VudCAoZmlsZSwgY2FuY2VsbGFibGUsIGVy
cm9yKTsKKwl9CisJaWYgKG1vdW50ID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCWdfb2JqZWN0
X3VucmVmIChmaWxlKTsKKworCWZpbGUgPSBnX21vdW50X2dldF9kZWZhdWx0X2xvY2F0aW9uICht
b3VudCk7CisJZ19vYmplY3RfdW5yZWYgKG1vdW50KTsKKworCXMgPSBnX3N0cmR1cCAodXJpLT5w
YXRoKTsKKwlpZiAoc3RyY2hyIChzLCAnOycpKQorCQkqc3RyY2hyIChzLCAnOycpID0gMDsKKwor
CXJlc3VsdCA9IGdfZmlsZV9yZXNvbHZlX3JlbGF0aXZlX3BhdGggKGZpbGUsIHMpOworCWdfZnJl
ZSAocyk7CisJZ19vYmplY3RfdW5yZWYgKGZpbGUpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKwor
c3RhdGljIGdib29sZWFuCitzb3VwX3JlcXVlc3RfZmlsZV9lbnN1cmVfZmlsZSAoU291cFJlcXVl
c3RGaWxlICAqZmlsZSwKKwkJCSAgICAgICBHQ2FuY2VsbGFibGUgICAgICpjYW5jZWxsYWJsZSwK
KwkJCSAgICAgICBHRXJyb3IgICAgICAgICAgKiplcnJvcikKK3sKKwlTb3VwVVJJICp1cmk7CisK
KwlpZiAoZmlsZS0+cHJpdi0+Z2ZpbGUpCisJCXJldHVybiBUUlVFOworCisJdXJpID0gc291cF9y
ZXF1ZXN0X2dldF91cmkgKFNPVVBfUkVRVUVTVCAoZmlsZSkpOworCWlmICh1cmktPnNjaGVtZSA9
PSBTT1VQX1VSSV9TQ0hFTUVfRklMRSkgeworCQlnY2hhciAqZGVjb2RlZF91cmkgPSBzb3VwX3Vy
aV9kZWNvZGUgKHNvdXBfdXJpX2dldF9wYXRoICh1cmkpKTsKKworCQlpZiAoZGVjb2RlZF91cmkp
IHsKKwkJCS8qIERvIG5vdCB1c2UgbmV3X2Zvcl91cmkoKSBhcyB0aGUgZGVjb2RlZCBVUkkKKwkJ
CSAqICBjb3VsZCBub3QgYmUgYSB2YWxpZCBVUkkKKwkJCSAqLworCQkJZmlsZS0+cHJpdi0+Z2Zp
bGUgPSBnX2ZpbGVfbmV3X2Zvcl9wYXRoIChkZWNvZGVkX3VyaSk7CisJCQlnX2ZyZWUgKGRlY29k
ZWRfdXJpKTsKKwkJfQorCisJCXJldHVybiBUUlVFOworCX0gZWxzZSBpZiAodXJpLT5zY2hlbWUg
PT0gU09VUF9VUklfU0NIRU1FX0ZUUCkgeworCQlmaWxlLT5wcml2LT5nZmlsZSA9IHNvdXBfcmVx
dWVzdF9maWxlX2Vuc3VyZV9maWxlX2Z0cCAodXJpLAorCQkJCQkJCQkgICAgICAgY2FuY2VsbGFi
bGUsCisJCQkJCQkJCSAgICAgICBlcnJvcik7CisJCXJldHVybiBmaWxlLT5wcml2LT5nZmlsZSAh
PSBOVUxMOworCX0KKworCWdfc2V0X2Vycm9yIChlcnJvciwgU09VUF9FUlJPUiwgU09VUF9FUlJP
Ul9VTlNVUFBPUlRFRF9VUklfU0NIRU1FLAorCQkgICAgIF8gKCJVbnN1cHBvcnRlZCBVUkkgc2No
ZW1lICclcyciKSwgdXJpLT5zY2hlbWUpOworCXJldHVybiBGQUxTRTsKK30KKworc3RhdGljIEdJ
bnB1dFN0cmVhbSAqCitzb3VwX3JlcXVlc3RfZmlsZV9zZW5kIChTb3VwUmVxdWVzdCAgICAgICAg
ICAqcmVxdWVzdCwKKwkJCUdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCUdF
cnJvciAgICAgICAgICAgICAgKiplcnJvcikKK3sKKwlTb3VwUmVxdWVzdEZpbGUgKmZpbGUgPSBT
T1VQX1JFUVVFU1RfRklMRSAocmVxdWVzdCk7CisJR0lucHV0U3RyZWFtICpzdHJlYW07CisJR0Vy
cm9yICpteV9lcnJvciA9IE5VTEw7CisKKwlpZiAoIXNvdXBfcmVxdWVzdF9maWxlX2Vuc3VyZV9m
aWxlIChmaWxlLCBjYW5jZWxsYWJsZSwgZXJyb3IpKQorCQlyZXR1cm4gTlVMTDsKKworCXN0cmVh
bSA9IEdfSU5QVVRfU1RSRUFNIChnX2ZpbGVfcmVhZCAoZmlsZS0+cHJpdi0+Z2ZpbGUsCisJCQkJ
CSAgICAgIGNhbmNlbGxhYmxlLCAmbXlfZXJyb3IpKTsKKwlpZiAoc3RyZWFtID09IE5VTEwpIHsK
KwkJaWYgKGdfZXJyb3JfbWF0Y2hlcyAobXlfZXJyb3IsIEdfSU9fRVJST1IsIEdfSU9fRVJST1Jf
SVNfRElSRUNUT1JZKSkgeworCQkJR0ZpbGVFbnVtZXJhdG9yICplbnVtZXJhdG9yOworCQkJZ19j
bGVhcl9lcnJvciAoJm15X2Vycm9yKTsKKwkJCWVudW1lcmF0b3IgPSBnX2ZpbGVfZW51bWVyYXRl
X2NoaWxkcmVuIChmaWxlLT5wcml2LT5nZmlsZSwKKwkJCQkJCQkJIioiLAorCQkJCQkJCQlHX0ZJ
TEVfUVVFUllfSU5GT19OT05FLAorCQkJCQkJCQljYW5jZWxsYWJsZSwKKwkJCQkJCQkJZXJyb3Ip
OworCQkJaWYgKGVudW1lcmF0b3IpIHsKKwkJCQlzdHJlYW0gPSBzb3VwX2RpcmVjdG9yeV9pbnB1
dF9zdHJlYW1fbmV3IChlbnVtZXJhdG9yLAorCQkJCQkJCQkJICBzb3VwX3JlcXVlc3RfZ2V0X3Vy
aSAocmVxdWVzdCkpOworCQkJCWdfb2JqZWN0X3VucmVmIChlbnVtZXJhdG9yKTsKKwkJCQlmaWxl
LT5wcml2LT5taW1lX3R5cGUgPSBnX3N0cmR1cCAoInRleHQvaHRtbCIpOworCQkJfQorCQl9IGVs
c2UgeworCQkJZ19wcm9wYWdhdGVfZXJyb3IgKGVycm9yLCBteV9lcnJvcik7CisJCX0KKwl9IGVs
c2UgeworCQlHRmlsZUluZm8gKmluZm8gPSBnX2ZpbGVfcXVlcnlfaW5mbyAoZmlsZS0+cHJpdi0+
Z2ZpbGUsCisJCQkJCQkgICAgIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfQ09OVEVOVF9UWVBF
ICIsIgorCQkJCQkJICAgICBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX1NJWkUsCisJCQkJCQkg
ICAgIDAsIGNhbmNlbGxhYmxlLCBOVUxMKTsKKwkJaWYgKGluZm8pIHsKKwkJCWNvbnN0IGNoYXIg
KmNvbnRlbnRfdHlwZTsKKwkJCWZpbGUtPnByaXYtPnNpemUgPSBnX2ZpbGVfaW5mb19nZXRfc2l6
ZSAoaW5mbyk7CisJCQljb250ZW50X3R5cGUgPSBnX2ZpbGVfaW5mb19nZXRfY29udGVudF90eXBl
IChpbmZvKTsKKworCQkJaWYgKGNvbnRlbnRfdHlwZSkKKwkJCQlmaWxlLT5wcml2LT5taW1lX3R5
cGUgPSBnX2NvbnRlbnRfdHlwZV9nZXRfbWltZV90eXBlIChjb250ZW50X3R5cGUpOworCQkJZ19v
YmplY3RfdW5yZWYgKGluZm8pOworCQl9CisJfQorCisJcmV0dXJuIHN0cmVhbTsKK30KKworc3Rh
dGljIHZvaWQKK3NvdXBfcmVxdWVzdF9maWxlX3NlbmRfYXN5bmNfdGhyZWFkIChHU2ltcGxlQXN5
bmNSZXN1bHQgKnJlcywKKwkJCQkgICAgIEdPYmplY3QgICAgICAgICAgICAqb2JqZWN0LAorCQkJ
CSAgICAgR0NhbmNlbGxhYmxlICAgICAgICpjYW5jZWxsYWJsZSkKK3sKKwlHSW5wdXRTdHJlYW0g
KnN0cmVhbTsKKwlTb3VwUmVxdWVzdCAqcmVxdWVzdDsKKwlHRXJyb3IgKmVycm9yID0gTlVMTDsK
KworCXJlcXVlc3QgPSBTT1VQX1JFUVVFU1QgKG9iamVjdCk7CisKKwlzdHJlYW0gPSBzb3VwX3Jl
cXVlc3RfZmlsZV9zZW5kIChyZXF1ZXN0LCBjYW5jZWxsYWJsZSwgJmVycm9yKTsKKworCWlmIChz
dHJlYW0gPT0gTlVMTCkgeworCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X2Zyb21fZXJyb3Ig
KHJlcywgZXJyb3IpOworCQlnX2Vycm9yX2ZyZWUgKGVycm9yKTsKKwl9IGVsc2UgeworCQlnX3Np
bXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19ncG9pbnRlciAocmVzLCBzdHJlYW0sIGdfb2Jq
ZWN0X3VucmVmKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX3JlcXVlc3RfZmlsZV9zZW5k
X2FzeW5jIChTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKKwkJCSAgICAgIEdDYW5jZWxs
YWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCSAgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sg
Y2FsbGJhY2ssCisJCQkgICAgICBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJR1NpbXBsZUFzeW5j
UmVzdWx0ICpyZXM7CisKKwlyZXMgPSBnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3IChHX09CSkVD
VCAocmVxdWVzdCksIGNhbGxiYWNrLCB1c2VyX2RhdGEsIHNvdXBfcmVxdWVzdF9maWxlX3NlbmRf
YXN5bmMpOworCisJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3J1bl9pbl90aHJlYWQgKHJlcywgc291
cF9yZXF1ZXN0X2ZpbGVfc2VuZF9hc3luY190aHJlYWQsIEdfUFJJT1JJVFlfREVGQVVMVCwgY2Fu
Y2VsbGFibGUpOworCWdfb2JqZWN0X3VucmVmIChyZXMpOworfQorCitzdGF0aWMgR0lucHV0U3Ry
ZWFtICoKK3NvdXBfcmVxdWVzdF9maWxlX3NlbmRfZmluaXNoIChTb3VwUmVxdWVzdCAgICAgICAg
ICAqcmVxdWVzdCwKKwkJCSAgICAgICBHQXN5bmNSZXN1bHQgICAgICAgICAqcmVzdWx0LAorCQkJ
ICAgICAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcikKK3sKKwlHU2ltcGxlQXN5bmNSZXN1
bHQgKnNpbXBsZSA9IEdfU0lNUExFX0FTWU5DX1JFU1VMVCAocmVzdWx0KTsKKworCWdfd2Fybl9p
Zl9mYWlsIChnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X3NvdXJjZV90YWcgKHNpbXBsZSkgPT0g
c291cF9yZXF1ZXN0X2ZpbGVfc2VuZF9hc3luYyk7CisKKwlpZiAoZ19zaW1wbGVfYXN5bmNfcmVz
dWx0X3Byb3BhZ2F0ZV9lcnJvciAoc2ltcGxlLCBlcnJvcikpCisJCXJldHVybiBOVUxMOworCisJ
cmV0dXJuIGdfb2JqZWN0X3JlZiAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9vcF9yZXNfZ3Bv
aW50ZXIgKHNpbXBsZSkpOworfQorCitzdGF0aWMgZ29mZnNldAorc291cF9yZXF1ZXN0X2ZpbGVf
Z2V0X2NvbnRlbnRfbGVuZ3RoIChTb3VwUmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlTb3VwUmVxdWVz
dEZpbGUgKmZpbGUgPSBTT1VQX1JFUVVFU1RfRklMRSAocmVxdWVzdCk7CisKKwlyZXR1cm4gZmls
ZS0+cHJpdi0+c2l6ZTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorc291cF9yZXF1ZXN0X2Zp
bGVfZ2V0X2NvbnRlbnRfdHlwZSAoU291cFJlcXVlc3QgKnJlcXVlc3QpCit7CisJU291cFJlcXVl
c3RGaWxlICpmaWxlID0gU09VUF9SRVFVRVNUX0ZJTEUgKHJlcXVlc3QpOworCisJaWYgKCFmaWxl
LT5wcml2LT5taW1lX3R5cGUpCisJCXJldHVybiAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIjsK
KworCXJldHVybiBmaWxlLT5wcml2LT5taW1lX3R5cGU7Cit9CisKK3N0YXRpYyB2b2lkCitzb3Vw
X3JlcXVlc3RfZmlsZV9jbGFzc19pbml0IChTb3VwUmVxdWVzdEZpbGVDbGFzcyAqcmVxdWVzdF9m
aWxlX2NsYXNzKQoreworCUdPYmplY3RDbGFzcyAqb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xB
U1MgKHJlcXVlc3RfZmlsZV9jbGFzcyk7CisJU291cFJlcXVlc3RDbGFzcyAqcmVxdWVzdF9jbGFz
cyA9CisJCVNPVVBfUkVRVUVTVF9DTEFTUyAocmVxdWVzdF9maWxlX2NsYXNzKTsKKworCWdfdHlw
ZV9jbGFzc19hZGRfcHJpdmF0ZSAocmVxdWVzdF9maWxlX2NsYXNzLCBzaXplb2YgKFNvdXBSZXF1
ZXN0RmlsZVByaXZhdGUpKTsKKworCW9iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBzb3VwX3JlcXVl
c3RfZmlsZV9maW5hbGl6ZTsKKworCXJlcXVlc3RfY2xhc3MtPmNoZWNrX3VyaSA9IHNvdXBfcmVx
dWVzdF9maWxlX2NoZWNrX3VyaTsKKwlyZXF1ZXN0X2NsYXNzLT5zZW5kID0gc291cF9yZXF1ZXN0
X2ZpbGVfc2VuZDsKKwlyZXF1ZXN0X2NsYXNzLT5zZW5kX2FzeW5jID0gc291cF9yZXF1ZXN0X2Zp
bGVfc2VuZF9hc3luYzsKKwlyZXF1ZXN0X2NsYXNzLT5zZW5kX2ZpbmlzaCA9IHNvdXBfcmVxdWVz
dF9maWxlX3NlbmRfZmluaXNoOworCXJlcXVlc3RfY2xhc3MtPmdldF9jb250ZW50X2xlbmd0aCA9
IHNvdXBfcmVxdWVzdF9maWxlX2dldF9jb250ZW50X2xlbmd0aDsKKwlyZXF1ZXN0X2NsYXNzLT5n
ZXRfY29udGVudF90eXBlID0gc291cF9yZXF1ZXN0X2ZpbGVfZ2V0X2NvbnRlbnRfdHlwZTsKK30K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVx
dWVzdC1maWxlLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJl
cXVlc3QtZmlsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkODhkM2QK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9z
b3VwLXJlcXVlc3QtZmlsZS5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWZuZGVmIFNPVVBfUkVRVUVTVF9GSUxFX0gKKyNkZWZpbmUgU09VUF9SRVFVRVNUX0ZJTEVfSCAx
CisKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3QuaCIKKworR19CRUdJTl9ERUNMUworCisjZGVmaW5l
IFNPVVBfVFlQRV9SRVFVRVNUX0ZJTEUgICAgICAgICAgICAoc291cF9yZXF1ZXN0X2ZpbGVfZ2V0
X3R5cGUgKCkpCisjZGVmaW5lIFNPVVBfUkVRVUVTVF9GSUxFKG9iamVjdCkgICAgICAgICAoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmplY3QpLCBTT1VQX1RZUEVfUkVRVUVTVF9GSUxF
LCBTb3VwUmVxdWVzdEZpbGUpKQorI2RlZmluZSBTT1VQX1JFUVVFU1RfRklMRV9DTEFTUyhrbGFz
cykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBTT1VQX1RZUEVfUkVRVUVT
VF9GSUxFLCBTb3VwUmVxdWVzdEZpbGVDbGFzcykpCisjZGVmaW5lIFNPVVBfSVNfUkVRVUVTVF9G
SUxFKG9iamVjdCkgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmplY3QpLCBT
T1VQX1RZUEVfUkVRVUVTVF9GSUxFKSkKKyNkZWZpbmUgU09VUF9JU19SRVFVRVNUX0ZJTEVfQ0xB
U1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgU09VUF9UWVBFX1JF
UVVFU1RfRklMRSkpCisjZGVmaW5lIFNPVVBfUkVRVUVTVF9GSUxFX0dFVF9DTEFTUyhvYmopICAo
R19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIFNPVVBfVFlQRV9SRVFVRVNUX0ZJTEUs
IFNvdXBSZXF1ZXN0RmlsZUNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1NvdXBSZXF1ZXN0Rmls
ZVByaXZhdGUgU291cFJlcXVlc3RGaWxlUHJpdmF0ZTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCVNv
dXBSZXF1ZXN0IHBhcmVudDsKKworCVNvdXBSZXF1ZXN0RmlsZVByaXZhdGUgKnByaXY7Cit9IFNv
dXBSZXF1ZXN0RmlsZTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCVNvdXBSZXF1ZXN0Q2xhc3MgcGFy
ZW50OworfSBTb3VwUmVxdWVzdEZpbGVDbGFzczsKKworR1R5cGUgc291cF9yZXF1ZXN0X2ZpbGVf
Z2V0X3R5cGUgKHZvaWQpOworCitHRmlsZSAgKnNvdXBfcmVxdWVzdF9maWxlX2dldF9maWxlIChT
b3VwUmVxdWVzdEZpbGUgKmZpbGUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogU09VUF9S
RVFVRVNUX0ZJTEVfSCAqLwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuYyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uODczYzJiZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRwLmMKQEAgLTAsMCArMSwzMzkgQEAKKy8q
CisgKiBzb3VwLXJlcXVlc3QtaHR0cC5jOiBodHRwOiBVUkkgcmVxdWVzdCBvYmplY3QKKyAqCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEw
IElnYWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgor
I2VuZGlmCisKKyNpbmNsdWRlIDxnbGliL2dpMThuLmg+CisKKyNpbmNsdWRlICJzb3VwLWNhY2hl
LmgiCisjaW5jbHVkZSAic291cC1jYWNoZS1wcml2YXRlLmgiCisjaW5jbHVkZSAic291cC1odHRw
LWlucHV0LXN0cmVhbS5oIgorI2luY2x1ZGUgInNvdXAtcmVxdWVzdC1odHRwLmgiCisKK0dfREVG
SU5FX1RZUEUgKFNvdXBSZXF1ZXN0SFRUUCwgc291cF9yZXF1ZXN0X2h0dHAsIFNPVVBfVFlQRV9S
RVFVRVNUKQorCitzdHJ1Y3QgX1NvdXBSZXF1ZXN0SFRUUFByaXZhdGUgeworCVNvdXBNZXNzYWdl
ICptc2c7Cit9OworCisvKioKKyAqIHNvdXBfcmVxdWVzdF9odHRwX2dldF9tZXNzYWdlOgorICog
QGh0dHA6IGEgI1NvdXBSZXF1ZXN0SFRUUCBvYmplY3QKKyAqCisgKiBHZXRzIGEgbmV3IHJlZmVy
ZW5jZSB0byB0aGUgI1NvdXBNZXNzYWdlIGFzc29jaWF0ZWQgdG8gdGhpcyBTb3VwUmVxdWVzdAor
ICoKKyAqIFJldHVybnM6IGEgbmV3IHJlZmVyZW5jZSB0byB0aGUgI1NvdXBNZXNzYWdlCisgKiov
CitTb3VwTWVzc2FnZSAqCitzb3VwX3JlcXVlc3RfaHR0cF9nZXRfbWVzc2FnZSAoU291cFJlcXVl
c3RIVFRQICpodHRwKQoreworCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChTT1VQX0lTX1JFUVVFU1Rf
SFRUUCAoaHR0cCksIE5VTEwpOworCisJcmV0dXJuIGdfb2JqZWN0X3JlZiAoaHR0cC0+cHJpdi0+
bXNnKTsKK30KKworc3RhdGljIHZvaWQKK3NvdXBfcmVxdWVzdF9odHRwX2luaXQgKFNvdXBSZXF1
ZXN0SFRUUCAqaHR0cCkKK3sKKwlodHRwLT5wcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklW
QVRFIChodHRwLCBTT1VQX1RZUEVfUkVRVUVTVF9IVFRQLCBTb3VwUmVxdWVzdEhUVFBQcml2YXRl
KTsKK30KKworc3RhdGljIGdib29sZWFuCitzb3VwX3JlcXVlc3RfaHR0cF9jaGVja191cmkgKFNv
dXBSZXF1ZXN0ICAqcmVxdWVzdCwKKwkJCSAgICAgU291cFVSSSAgICAgICp1cmksCisJCQkgICAg
IEdFcnJvciAgICAgICoqZXJyb3IpCit7CisJU291cFJlcXVlc3RIVFRQICpodHRwID0gU09VUF9S
RVFVRVNUX0hUVFAgKHJlcXVlc3QpOworCisJaWYgKCFTT1VQX1VSSV9WQUxJRF9GT1JfSFRUUCAo
dXJpKSkKKwkJcmV0dXJuIEZBTFNFOworCisJaHR0cC0+cHJpdi0+bXNnID0gc291cF9tZXNzYWdl
X25ld19mcm9tX3VyaSAoU09VUF9NRVRIT0RfR0VULCB1cmkpOworCXJldHVybiBUUlVFOworfQor
CitzdGF0aWMgdm9pZAorc291cF9yZXF1ZXN0X2h0dHBfZmluYWxpemUgKEdPYmplY3QgKm9iamVj
dCkKK3sKKwlTb3VwUmVxdWVzdEhUVFAgKmh0dHAgPSBTT1VQX1JFUVVFU1RfSFRUUCAob2JqZWN0
KTsKKworCWlmIChodHRwLT5wcml2LT5tc2cpCisJCWdfb2JqZWN0X3VucmVmIChodHRwLT5wcml2
LT5tc2cpOworCisJR19PQkpFQ1RfQ0xBU1MgKHNvdXBfcmVxdWVzdF9odHRwX3BhcmVudF9jbGFz
cyktPmZpbmFsaXplIChvYmplY3QpOworfQorCitzdGF0aWMgR0lucHV0U3RyZWFtICoKK3NvdXBf
cmVxdWVzdF9odHRwX3NlbmQgKFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAorCQkJR0Nh
bmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJR0Vycm9yICAgICAgICAgICAgICAq
KmVycm9yKQoreworCVNvdXBIVFRQSW5wdXRTdHJlYW0gKmh0dHBzdHJlYW07CisJU291cFJlcXVl
c3RIVFRQICpodHRwID0gU09VUF9SRVFVRVNUX0hUVFAgKHJlcXVlc3QpOworCisJaHR0cHN0cmVh
bSA9IHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fbmV3IChzb3VwX3JlcXVlc3RfZ2V0X3Nlc3Npb24g
KHJlcXVlc3QpLCBodHRwLT5wcml2LT5tc2cpOworCWlmICghc291cF9odHRwX2lucHV0X3N0cmVh
bV9zZW5kIChodHRwc3RyZWFtLCBjYW5jZWxsYWJsZSwgZXJyb3IpKSB7CisJCWdfb2JqZWN0X3Vu
cmVmIChodHRwc3RyZWFtKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiAoR0lucHV0U3Ry
ZWFtICopaHR0cHN0cmVhbTsKK30KKworCitzdGF0aWMgdm9pZAorc2VudF9hc3luYyAoR09iamVj
dCAqc291cmNlLCBHQXN5bmNSZXN1bHQgKnJlc3VsdCwgZ3BvaW50ZXIgdXNlcl9kYXRhKQorewor
CVNvdXBIVFRQSW5wdXRTdHJlYW0gKmh0dHBzdHJlYW0gPSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFN
IChzb3VyY2UpOworCUdTaW1wbGVBc3luY1Jlc3VsdCAqc2ltcGxlID0gdXNlcl9kYXRhOworCUdF
cnJvciAqZXJyb3IgPSBOVUxMOworCisJaWYgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9m
aW5pc2ggKGh0dHBzdHJlYW0sIHJlc3VsdCwgJmVycm9yKSkgeworCQlnX3NpbXBsZV9hc3luY19y
ZXN1bHRfc2V0X29wX3Jlc19ncG9pbnRlciAoc2ltcGxlLCBodHRwc3RyZWFtLCBnX29iamVjdF91
bnJlZik7CisJfSBlbHNlIHsKKwkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9mcm9tX2Vycm9y
IChzaW1wbGUsIGVycm9yKTsKKwkJZ19lcnJvcl9mcmVlIChlcnJvcik7CisJCWdfb2JqZWN0X3Vu
cmVmIChodHRwc3RyZWFtKTsKKwl9CisJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlIChz
aW1wbGUpOworCWdfb2JqZWN0X3VucmVmIChzaW1wbGUpOworfQorCisKK3R5cGVkZWYgc3RydWN0
IHsKKwlTb3VwUmVxdWVzdEhUVFAgKnJlcTsKKwlTb3VwTWVzc2FnZSAqb3JpZ2luYWw7CisJR0Nh
bmNlbGxhYmxlICpjYW5jZWxsYWJsZTsKKwlHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrOwor
CWdwb2ludGVyIHVzZXJfZGF0YTsKK30gQ29uZGl0aW9uYWxIZWxwZXI7CisKKworc3RhdGljIHZv
aWQKK2NvbmRpdGlvbmFsX2dldF9yZWFkeV9jYiAoU291cFNlc3Npb24gKnNlc3Npb24sIFNvdXBN
ZXNzYWdlICptc2csIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlDb25kaXRpb25hbEhlbHBlciAq
aGVscGVyID0gKENvbmRpdGlvbmFsSGVscGVyICopdXNlcl9kYXRhOworCUdTaW1wbGVBc3luY1Jl
c3VsdCAqc2ltcGxlOworCVNvdXBIVFRQSW5wdXRTdHJlYW0gKmh0dHBzdHJlYW07CisKKwlzaW1w
bGUgPSBnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3IChHX09CSkVDVCAoaGVscGVyLT5yZXEpLAor
CQkJCQkgICAgaGVscGVyLT5jYWxsYmFjaywgaGVscGVyLT51c2VyX2RhdGEsCisJCQkJCSAgICBj
b25kaXRpb25hbF9nZXRfcmVhZHlfY2IpOworCisJaWYgKG1zZy0+c3RhdHVzX2NvZGUgPT0gU09V
UF9TVEFUVVNfTk9UX01PRElGSUVEKSB7CisJCVdlYktpdFNvdXBDYWNoZSAqY2FjaGUgPSAoV2Vi
S2l0U291cENhY2hlICopc291cF9zZXNzaW9uX2dldF9mZWF0dXJlIChzZXNzaW9uLCBXRUJLSVRf
VFlQRV9TT1VQX0NBQ0hFKTsKKworCQlodHRwc3RyZWFtID0gKFNvdXBIVFRQSW5wdXRTdHJlYW0g
Kil3ZWJraXRfc291cF9jYWNoZV9zZW5kX3Jlc3BvbnNlIChjYWNoZSwgbXNnKTsKKwkJaWYgKGh0
dHBzdHJlYW0pIHsKKwkJCWNvbnN0IGdjaGFyICpjb250ZW50X3R5cGU7CisKKwkJCWdfc2ltcGxl
X2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dwb2ludGVyIChzaW1wbGUsIGh0dHBzdHJlYW0sIGdf
b2JqZWN0X3VucmVmKTsKKworCQkJc291cF9tZXNzYWdlX2dvdF9oZWFkZXJzIChoZWxwZXItPm9y
aWdpbmFsKTsKKwkJCWNvbnRlbnRfdHlwZSA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9jb250
ZW50X3R5cGUgKG1zZy0+cmVzcG9uc2VfaGVhZGVycywgTlVMTCk7CisJCQlzb3VwX21lc3NhZ2Vf
Y29udGVudF9zbmlmZmVkIChoZWxwZXItPm9yaWdpbmFsLCBjb250ZW50X3R5cGUsIE5VTEwpOwor
CisJCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGUgKHNpbXBsZSk7CisKKwkJCXNvdXBf
bWVzc2FnZV9maW5pc2hlZCAoaGVscGVyLT5vcmlnaW5hbCk7CisKKwkJCWdfb2JqZWN0X3VucmVm
IChzaW1wbGUpOworCQl9IGVsc2UgeworCQkJLyogQXNrIGFnYWluIGZvciB0aGUgcmVzb3VyY2Us
IHNvbWVob3cgdGhlIGNhY2hlIGNhbm5vdCBsb2NhdGUgaXQgKi8KKwkJCWh0dHBzdHJlYW0gPSBz
b3VwX2h0dHBfaW5wdXRfc3RyZWFtX25ldyAoc2Vzc2lvbiwgaGVscGVyLT5vcmlnaW5hbCk7CisJ
CQlzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmMgKGh0dHBzdHJlYW0sIEdfUFJJT1JJ
VFlfREVGQVVMVCwKKwkJCQkJCQkgICBoZWxwZXItPmNhbmNlbGxhYmxlLCBzZW50X2FzeW5jLCBz
aW1wbGUpOworCQl9CisJfSBlbHNlIHsKKwkJLyogSXQgaXMgaW4gdGhlIGNhY2hlIGJ1dCBpdCB3
YXMgbW9kaWZpZWQgcmVtb3RlbHkgKi8KKwkJaHR0cHN0cmVhbSA9IHNvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fbmV3IChzZXNzaW9uLCBoZWxwZXItPm9yaWdpbmFsKTsKKwkJc291cF9odHRwX2lucHV0
X3N0cmVhbV9zZW5kX2FzeW5jIChodHRwc3RyZWFtLCBHX1BSSU9SSVRZX0RFRkFVTFQsCisJCQkJ
CQkgICBoZWxwZXItPmNhbmNlbGxhYmxlLCBzZW50X2FzeW5jLCBzaW1wbGUpOworCX0KKworCWdf
b2JqZWN0X3VucmVmIChoZWxwZXItPnJlcSk7CisJZ19vYmplY3RfdW5yZWYgKGhlbHBlci0+b3Jp
Z2luYWwpOworCWdfc2xpY2VfZnJlZSAoQ29uZGl0aW9uYWxIZWxwZXIsIGhlbHBlcik7Cit9CisK
K3R5cGVkZWYgc3RydWN0IHsKKwlTb3VwUmVxdWVzdEhUVFAgKmh0dHA7CisJR0FzeW5jUmVhZHlD
YWxsYmFjayBjYWxsYmFjazsKKwlncG9pbnRlciB1c2VyX2RhdGE7Cit9IFNlbmRBc3luY0hlbHBl
cjsKKworc3RhdGljIHZvaWQgc291cF9yZXF1ZXN0X2h0dHBfc2VuZF9hc3luYyAoU291cFJlcXVl
c3QgICAgICAgICAgKnJlcXVlc3QsCisJCQkJCSAgR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNl
bGxhYmxlLAorCQkJCQkgIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCisJCQkJCSAgZ3Bv
aW50ZXIgdXNlcl9kYXRhKTsKKworc3RhdGljIGdib29sZWFuCitzZW5kX2FzeW5jX2NiIChncG9p
bnRlciBkYXRhKQoreworCUdTaW1wbGVBc3luY1Jlc3VsdCAqc2ltcGxlOworCVNvdXBIVFRQSW5w
dXRTdHJlYW0gKmh0dHBzdHJlYW07CisJU291cFNlc3Npb24gKnNlc3Npb247CisJV2ViS2l0U291
cENhY2hlICpjYWNoZTsKKwlTZW5kQXN5bmNIZWxwZXIgKmhlbHBlciA9IChTZW5kQXN5bmNIZWxw
ZXIgKilkYXRhOworCisJc2Vzc2lvbiA9IHNvdXBfcmVxdWVzdF9nZXRfc2Vzc2lvbiAoU09VUF9S
RVFVRVNUIChoZWxwZXItPmh0dHApKTsKKwljYWNoZSA9IChXZWJLaXRTb3VwQ2FjaGUgKilzb3Vw
X3Nlc3Npb25fZ2V0X2ZlYXR1cmUgKHNlc3Npb24sIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUpOwor
CisJaHR0cHN0cmVhbSA9IChTb3VwSFRUUElucHV0U3RyZWFtICopd2Via2l0X3NvdXBfY2FjaGVf
c2VuZF9yZXNwb25zZSAoY2FjaGUsIFNPVVBfTUVTU0FHRSAoaGVscGVyLT5odHRwLT5wcml2LT5t
c2cpKTsKKworCWlmIChodHRwc3RyZWFtKSB7CisJCWNvbnN0IGdjaGFyICpjb250ZW50X3R5cGU7
CisKKwkJc2ltcGxlID0gZ19zaW1wbGVfYXN5bmNfcmVzdWx0X25ldyAoR19PQkpFQ1QgKGhlbHBl
ci0+aHR0cCksCisJCQkJCQkgICAgaGVscGVyLT5jYWxsYmFjaywgaGVscGVyLT51c2VyX2RhdGEs
CisJCQkJCQkgICAgc291cF9yZXF1ZXN0X2h0dHBfc2VuZF9hc3luYyk7CisJCWdfc2ltcGxlX2Fz
eW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dwb2ludGVyIChzaW1wbGUsIGh0dHBzdHJlYW0sIGdfb2Jq
ZWN0X3VucmVmKTsKKworCQkvKiBVcGRhdGUgbWVzc2FnZSBzdGF0dXMgKi8KKwkJc291cF9tZXNz
YWdlX3NldF9zdGF0dXMgKGhlbHBlci0+aHR0cC0+cHJpdi0+bXNnLCBTT1VQX1NUQVRVU19PSyk7
CisKKwkJLyogSXNzdWUgc2lnbmFscyAgKi8KKwkJc291cF9tZXNzYWdlX2dvdF9oZWFkZXJzICho
ZWxwZXItPmh0dHAtPnByaXYtPm1zZyk7CisJCWNvbnRlbnRfdHlwZSA9IHNvdXBfbWVzc2FnZV9o
ZWFkZXJzX2dldF9jb250ZW50X3R5cGUgKGhlbHBlci0+aHR0cC0+cHJpdi0+bXNnLT5yZXNwb25z
ZV9oZWFkZXJzLCBOVUxMKTsKKwkJc291cF9tZXNzYWdlX2NvbnRlbnRfc25pZmZlZCAoaGVscGVy
LT5odHRwLT5wcml2LT5tc2csIGNvbnRlbnRfdHlwZSwgTlVMTCk7CisKKwkJZ19zaW1wbGVfYXN5
bmNfcmVzdWx0X2NvbXBsZXRlIChzaW1wbGUpOworCisJCXNvdXBfbWVzc2FnZV9maW5pc2hlZCAo
aGVscGVyLT5odHRwLT5wcml2LT5tc2cpOworCisJCWdfb2JqZWN0X3VucmVmIChzaW1wbGUpOwor
CX0KKworCWdfc2xpY2VfZnJlZSAoU2VuZEFzeW5jSGVscGVyLCBoZWxwZXIpOworCisJcmV0dXJu
IEZBTFNFOworfQorCitzdGF0aWMgdm9pZAorc291cF9yZXF1ZXN0X2h0dHBfc2VuZF9hc3luYyAo
U291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCisJCQkgICAgICBHQ2FuY2VsbGFibGUgICAg
ICAgICAqY2FuY2VsbGFibGUsCisJCQkgICAgICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNr
LAorCQkJICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCVNvdXBSZXF1ZXN0SFRUUCAqaHR0
cCA9IFNPVVBfUkVRVUVTVF9IVFRQIChyZXF1ZXN0KTsKKwlTb3VwSFRUUElucHV0U3RyZWFtICpo
dHRwc3RyZWFtOworCUdTaW1wbGVBc3luY1Jlc3VsdCAqc2ltcGxlOworCVNvdXBTZXNzaW9uICpz
ZXNzaW9uOworCVdlYktpdFNvdXBDYWNoZSAqY2FjaGU7CisKKwlzZXNzaW9uID0gc291cF9yZXF1
ZXN0X2dldF9zZXNzaW9uIChyZXF1ZXN0KTsKKwljYWNoZSA9IChXZWJLaXRTb3VwQ2FjaGUgKilz
b3VwX3Nlc3Npb25fZ2V0X2ZlYXR1cmUgKHNlc3Npb24sIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUp
OworCisJaWYgKGNhY2hlKSB7CisJCVdlYktpdFNvdXBDYWNoZVJlc3BvbnNlIHJlc3BvbnNlOwor
CisJCXJlc3BvbnNlID0gd2Via2l0X3NvdXBfY2FjaGVfaGFzX3Jlc3BvbnNlIChjYWNoZSwgaHR0
cC0+cHJpdi0+bXNnKTsKKwkJaWYgKHJlc3BvbnNlID09IFdFQktJVF9TT1VQX0NBQ0hFX1JFU1BP
TlNFX0ZSRVNIKSB7CisJCQkvKiBEbyByZXR1cm4gdGhlIHN0cmVhbSBhc3luY2hyb25vdXNseSBh
cyBpbgorCQkJICAgdGhlIG90aGVyIGNhc2VzLiBJdCdzIG5vdCBlbm91Z2ggdG8gdXNlCisJCQkg
ICBnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGVfaW5faWRsZSBhcworCQkJICAgdGhlIHNp
Z25hbHMgbXVzdCBiZSBhbHNvIGVtaXR0ZWQKKwkJCSAgIGFzeW5jaHJvbm91c2x5ICovCisJCQlT
ZW5kQXN5bmNIZWxwZXIgKmhlbHBlciA9IGdfc2xpY2VfbmV3IChTZW5kQXN5bmNIZWxwZXIpOwor
CQkJaGVscGVyLT5odHRwID0gaHR0cDsKKwkJCWhlbHBlci0+Y2FsbGJhY2sgPSBjYWxsYmFjazsK
KwkJCWhlbHBlci0+dXNlcl9kYXRhID0gdXNlcl9kYXRhOworCQkJZ190aW1lb3V0X2FkZCAoMCwg
c2VuZF9hc3luY19jYiwgaGVscGVyKTsKKwkJCXJldHVybjsKKwkJfSBlbHNlIGlmIChyZXNwb25z
ZSA9PSBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9ORUVEU19WQUxJREFUSU9OKSB7CisJCQlT
b3VwTWVzc2FnZSAqY29uZGl0aW9uYWxfbXNnOworCQkJQ29uZGl0aW9uYWxIZWxwZXIgKmhlbHBl
cjsKKworCQkJY29uZGl0aW9uYWxfbXNnID0gd2Via2l0X3NvdXBfY2FjaGVfZ2VuZXJhdGVfY29u
ZGl0aW9uYWxfcmVxdWVzdCAoY2FjaGUsIGh0dHAtPnByaXYtPm1zZyk7CisKKwkJCWhlbHBlciA9
IGdfc2xpY2VfbmV3MCAoQ29uZGl0aW9uYWxIZWxwZXIpOworCQkJaGVscGVyLT5yZXEgPSBnX29i
amVjdF9yZWYgKGh0dHApOworCQkJaGVscGVyLT5vcmlnaW5hbCA9IGdfb2JqZWN0X3JlZiAoaHR0
cC0+cHJpdi0+bXNnKTsKKwkJCWhlbHBlci0+Y2FuY2VsbGFibGUgPSBjYW5jZWxsYWJsZTsKKwkJ
CWhlbHBlci0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKwkJCWhlbHBlci0+dXNlcl9kYXRhID0gdXNl
cl9kYXRhOworCQkJc291cF9zZXNzaW9uX3F1ZXVlX21lc3NhZ2UgKHNlc3Npb24sIGNvbmRpdGlv
bmFsX21zZywKKwkJCQkJCSAgICBjb25kaXRpb25hbF9nZXRfcmVhZHlfY2IsCisJCQkJCQkgICAg
aGVscGVyKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCXNpbXBsZSA9IGdfc2ltcGxlX2FzeW5j
X3Jlc3VsdF9uZXcgKEdfT0JKRUNUIChodHRwKSwKKwkJCQkJICAgIGNhbGxiYWNrLCB1c2VyX2Rh
dGEsCisJCQkJCSAgICBzb3VwX3JlcXVlc3RfaHR0cF9zZW5kX2FzeW5jKTsKKwlodHRwc3RyZWFt
ID0gc291cF9odHRwX2lucHV0X3N0cmVhbV9uZXcgKHNvdXBfcmVxdWVzdF9nZXRfc2Vzc2lvbiAo
cmVxdWVzdCksCisJCQkJCQkgaHR0cC0+cHJpdi0+bXNnKTsKKwlzb3VwX2h0dHBfaW5wdXRfc3Ry
ZWFtX3NlbmRfYXN5bmMgKGh0dHBzdHJlYW0sIEdfUFJJT1JJVFlfREVGQVVMVCwKKwkJCQkJICAg
Y2FuY2VsbGFibGUsIHNlbnRfYXN5bmMsIHNpbXBsZSk7Cit9CisKK3N0YXRpYyBHSW5wdXRTdHJl
YW0gKgorc291cF9yZXF1ZXN0X2h0dHBfc2VuZF9maW5pc2ggKFNvdXBSZXF1ZXN0ICAgICAgICAg
ICpyZXF1ZXN0LAorCQkJICAgICAgIEdBc3luY1Jlc3VsdCAgICAgICAgICpyZXN1bHQsCisJCQkg
ICAgICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKQoreworCUdTaW1wbGVBc3luY1Jlc3Vs
dCAqc2ltcGxlOworCisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdfc2ltcGxlX2FzeW5jX3Jlc3Vs
dF9pc192YWxpZCAocmVzdWx0LCBHX09CSkVDVCAocmVxdWVzdCksIHNvdXBfcmVxdWVzdF9odHRw
X3NlbmRfYXN5bmMpIHx8IGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9pc192YWxpZCAocmVzdWx0LCBH
X09CSkVDVCAocmVxdWVzdCksIGNvbmRpdGlvbmFsX2dldF9yZWFkeV9jYiksIE5VTEwpOworCisJ
c2ltcGxlID0gR19TSU1QTEVfQVNZTkNfUkVTVUxUIChyZXN1bHQpOworCWlmIChnX3NpbXBsZV9h
c3luY19yZXN1bHRfcHJvcGFnYXRlX2Vycm9yIChzaW1wbGUsIGVycm9yKSkKKwkJcmV0dXJuIE5V
TEw7CisJcmV0dXJuIGdfb2JqZWN0X3JlZiAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9vcF9y
ZXNfZ3BvaW50ZXIgKHNpbXBsZSkpOworfQorCitzdGF0aWMgZ29mZnNldAorc291cF9yZXF1ZXN0
X2h0dHBfZ2V0X2NvbnRlbnRfbGVuZ3RoIChTb3VwUmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlTb3Vw
UmVxdWVzdEhUVFAgKmh0dHAgPSBTT1VQX1JFUVVFU1RfSFRUUCAocmVxdWVzdCk7CisKKwlyZXR1
cm4gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2NvbnRlbnRfbGVuZ3RoIChodHRwLT5wcml2LT5t
c2ctPnJlc3BvbnNlX2hlYWRlcnMpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitzb3VwX3Jl
cXVlc3RfaHR0cF9nZXRfY29udGVudF90eXBlIChTb3VwUmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlT
b3VwUmVxdWVzdEhUVFAgKmh0dHAgPSBTT1VQX1JFUVVFU1RfSFRUUCAocmVxdWVzdCk7CisKKwly
ZXR1cm4gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2NvbnRlbnRfdHlwZSAoaHR0cC0+cHJpdi0+
bXNnLT5yZXNwb25zZV9oZWFkZXJzLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQKK3NvdXBfcmVx
dWVzdF9odHRwX2NsYXNzX2luaXQgKFNvdXBSZXF1ZXN0SFRUUENsYXNzICpyZXF1ZXN0X2h0dHBf
Y2xhc3MpCit7CisJR09iamVjdENsYXNzICpvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAo
cmVxdWVzdF9odHRwX2NsYXNzKTsKKwlTb3VwUmVxdWVzdENsYXNzICpyZXF1ZXN0X2NsYXNzID0K
KwkJU09VUF9SRVFVRVNUX0NMQVNTIChyZXF1ZXN0X2h0dHBfY2xhc3MpOworCisJZ190eXBlX2Ns
YXNzX2FkZF9wcml2YXRlIChyZXF1ZXN0X2h0dHBfY2xhc3MsIHNpemVvZiAoU291cFJlcXVlc3RI
VFRQUHJpdmF0ZSkpOworCisJb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IHNvdXBfcmVxdWVzdF9o
dHRwX2ZpbmFsaXplOworCisJcmVxdWVzdF9jbGFzcy0+Y2hlY2tfdXJpID0gc291cF9yZXF1ZXN0
X2h0dHBfY2hlY2tfdXJpOworCXJlcXVlc3RfY2xhc3MtPnNlbmQgPSBzb3VwX3JlcXVlc3RfaHR0
cF9zZW5kOworCXJlcXVlc3RfY2xhc3MtPnNlbmRfYXN5bmMgPSBzb3VwX3JlcXVlc3RfaHR0cF9z
ZW5kX2FzeW5jOworCXJlcXVlc3RfY2xhc3MtPnNlbmRfZmluaXNoID0gc291cF9yZXF1ZXN0X2h0
dHBfc2VuZF9maW5pc2g7CisJcmVxdWVzdF9jbGFzcy0+Z2V0X2NvbnRlbnRfbGVuZ3RoID0gc291
cF9yZXF1ZXN0X2h0dHBfZ2V0X2NvbnRlbnRfbGVuZ3RoOworCXJlcXVlc3RfY2xhc3MtPmdldF9j
b250ZW50X3R5cGUgPSBzb3VwX3JlcXVlc3RfaHR0cF9nZXRfY29udGVudF90eXBlOworfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0
LWh0dHAuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVz
dC1odHRwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYzMmYwYgotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAt
cmVxdWVzdC1odHRwLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5k
ZWYgU09VUF9SRVFVRVNUX0hUVFBfSAorI2RlZmluZSBTT1VQX1JFUVVFU1RfSFRUUF9IIDEKKwor
I2luY2x1ZGUgInNvdXAtcmVxdWVzdC5oIgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgU09V
UF9UWVBFX1JFUVVFU1RfSFRUUCAgICAgICAgICAgIChzb3VwX3JlcXVlc3RfaHR0cF9nZXRfdHlw
ZSAoKSkKKyNkZWZpbmUgU09VUF9SRVFVRVNUX0hUVFAob2JqZWN0KSAgICAgICAgIChHX1RZUEVf
Q0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iamVjdCksIFNPVVBfVFlQRV9SRVFVRVNUX0hUVFAsIFNv
dXBSZXF1ZXN0SFRUUCkpCisjZGVmaW5lIFNPVVBfUkVRVUVTVF9IVFRQX0NMQVNTKGtsYXNzKSAg
ICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFNPVVBfVFlQRV9SRVFVRVNUX0hU
VFAsIFNvdXBSZXF1ZXN0SFRUUENsYXNzKSkKKyNkZWZpbmUgU09VUF9JU19SRVFVRVNUX0hUVFAo
b2JqZWN0KSAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iamVjdCksIFNPVVBf
VFlQRV9SRVFVRVNUX0hUVFApKQorI2RlZmluZSBTT1VQX0lTX1JFUVVFU1RfSFRUUF9DTEFTUyhr
bGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBTT1VQX1RZUEVfUkVRVUVT
VF9IVFRQKSkKKyNkZWZpbmUgU09VUF9SRVFVRVNUX0hUVFBfR0VUX0NMQVNTKG9iaikgIChHX1RZ
UEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgU09VUF9UWVBFX1JFUVVFU1RfSFRUUCwgU291
cFJlcXVlc3RIVFRQQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfU291cFJlcXVlc3RIVFRQUHJp
dmF0ZSBTb3VwUmVxdWVzdEhUVFBQcml2YXRlOworCit0eXBlZGVmIHN0cnVjdCB7CisJU291cFJl
cXVlc3QgcGFyZW50OworCisJU291cFJlcXVlc3RIVFRQUHJpdmF0ZSAqcHJpdjsKK30gU291cFJl
cXVlc3RIVFRQOworCit0eXBlZGVmIHN0cnVjdCB7CisJU291cFJlcXVlc3RDbGFzcyBwYXJlbnQ7
Cit9IFNvdXBSZXF1ZXN0SFRUUENsYXNzOworCitHVHlwZSBzb3VwX3JlcXVlc3RfaHR0cF9nZXRf
dHlwZSAodm9pZCk7CisKK1NvdXBNZXNzYWdlICAqc291cF9yZXF1ZXN0X2h0dHBfZ2V0X21lc3Nh
Z2UgKFNvdXBSZXF1ZXN0SFRUUCAqaHR0cCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBT
T1VQX1JFUVVFU1RfSFRUUF9IICovCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QuYyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmM2YTdiZDMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9jYWNoZS9zb3VwLXJlcXVlc3QuYwpAQCAtMCwwICsxLDI3OSBAQAorLyoKKyAqIHNvdXAt
cmVxdWVzdC5jOiBQcm90b2NvbC1pbmRlcGVuZGVudCBzdHJlYW1pbmcgcmVxdWVzdCBpbnRlcmZh
Y2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0
IChDKSAyMDEwLCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNv
bmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxnbGliL2dpMThuLmg+CisKKyNpbmNsdWRlICJz
b3VwLXJlcXVlc3QuaCIKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3Rlci5oIgorCisvKioKKyAqIFNF
Q1RJT046c291cC1yZXF1ZXN0CisgKiBAc2hvcnRfZGVzY3JpcHRpb246IFByb3RvY29sLWluZGVw
ZW5kZW50IHN0cmVhbWluZyByZXF1ZXN0IGludGVyZmFjZQorICoKKyAqIEZJWE1FCisgKiovCisK
Ky8qKgorICogU291cFJlcXVlc3Q6CisgKgorICogRklYTUUKKyAqCisgKiBTaW5jZTogMi4zMAor
ICoqLworCitzdGF0aWMgdm9pZCBzb3VwX3JlcXVlc3RfaW5pdGFibGVfaW50ZXJmYWNlX2luaXQg
KEdJbml0YWJsZUlmYWNlICppbml0YWJsZV9pbnRlcmZhY2UpOworCitHX0RFRklORV9UWVBFX1dJ
VEhfQ09ERSAoU291cFJlcXVlc3QsIHNvdXBfcmVxdWVzdCwgR19UWVBFX09CSkVDVCwKKwkJCSBH
X0lNUExFTUVOVF9JTlRFUkZBQ0UgKEdfVFlQRV9JTklUQUJMRSwKKwkJCQkJCXNvdXBfcmVxdWVz
dF9pbml0YWJsZV9pbnRlcmZhY2VfaW5pdCkpCisKK2VudW0geworCVBST1BfMCwKKwlQUk9QX1VS
SSwKKwlQUk9QX1NFU1NJT04KK307CisKK3N0cnVjdCBfU291cFJlcXVlc3RQcml2YXRlIHsKKwlT
b3VwVVJJICp1cmk7CisJU291cFNlc3Npb24gKnNlc3Npb247Cit9OworCitzdGF0aWMgdm9pZAor
c291cF9yZXF1ZXN0X2luaXQgKFNvdXBSZXF1ZXN0ICpyZXF1ZXN0KQoreworCXJlcXVlc3QtPnBy
aXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKHJlcXVlc3QsIFNPVVBfVFlQRV9SRVFV
RVNULCBTb3VwUmVxdWVzdFByaXZhdGUpOworfQorCitzdGF0aWMgdm9pZAorc291cF9yZXF1ZXN0
X2ZpbmFsaXplIChHT2JqZWN0ICpvYmplY3QpCit7CisJU291cFJlcXVlc3QgKnJlcXVlc3QgPSBT
T1VQX1JFUVVFU1QgKG9iamVjdCk7CisKKwlpZiAocmVxdWVzdC0+cHJpdi0+dXJpKQorCQlzb3Vw
X3VyaV9mcmVlIChyZXF1ZXN0LT5wcml2LT51cmkpOworCWlmIChyZXF1ZXN0LT5wcml2LT5zZXNz
aW9uKQorCQlnX29iamVjdF91bnJlZiAocmVxdWVzdC0+cHJpdi0+c2Vzc2lvbik7CisKKwlHX09C
SkVDVF9DTEFTUyAoc291cF9yZXF1ZXN0X3BhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3Qp
OworfQorCitzdGF0aWMgdm9pZAorc291cF9yZXF1ZXN0X3NldF9wcm9wZXJ0eSAoR09iamVjdCAg
ICAgICpvYmplY3QsCisJCQkgICBndWludCBwcm9wX2lkLAorCQkJICAgY29uc3QgR1ZhbHVlICp2
YWx1ZSwKKwkJCSAgIEdQYXJhbVNwZWMgICAqcHNwZWMpCit7CisJU291cFJlcXVlc3QgKnJlcXVl
c3QgPSBTT1VQX1JFUVVFU1QgKG9iamVjdCk7CisKKwlzd2l0Y2ggKHByb3BfaWQpIHsKKwkJY2Fz
ZSBQUk9QX1VSSToKKwkJCWlmIChyZXF1ZXN0LT5wcml2LT51cmkpCisJCQkJc291cF91cmlfZnJl
ZSAocmVxdWVzdC0+cHJpdi0+dXJpKTsKKwkJCXJlcXVlc3QtPnByaXYtPnVyaSA9IGdfdmFsdWVf
ZHVwX2JveGVkICh2YWx1ZSk7CisJCQlicmVhazsKKwkJY2FzZSBQUk9QX1NFU1NJT046CisJCQlp
ZiAocmVxdWVzdC0+cHJpdi0+c2Vzc2lvbikKKwkJCQlnX29iamVjdF91bnJlZiAocmVxdWVzdC0+
cHJpdi0+c2Vzc2lvbik7CisJCQlyZXF1ZXN0LT5wcml2LT5zZXNzaW9uID0gZ192YWx1ZV9kdXBf
b2JqZWN0ICh2YWx1ZSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUdfT0JKRUNUX1dBUk5f
SU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisJCQlicmVhazsK
Kwl9Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX3JlcXVlc3RfZ2V0X3Byb3BlcnR5IChHT2JqZWN0
ICAgICpvYmplY3QsCisJCQkgICBndWludCBwcm9wX2lkLAorCQkJICAgR1ZhbHVlICAgICAqdmFs
dWUsCisJCQkgICBHUGFyYW1TcGVjICpwc3BlYykKK3sKKwlTb3VwUmVxdWVzdCAqcmVxdWVzdCA9
IFNPVVBfUkVRVUVTVCAob2JqZWN0KTsKKworCXN3aXRjaCAocHJvcF9pZCkgeworCQljYXNlIFBS
T1BfVVJJOgorCQkJZ192YWx1ZV9zZXRfYm94ZWQgKHZhbHVlLCByZXF1ZXN0LT5wcml2LT51cmkp
OworCQkJYnJlYWs7CisJCWNhc2UgUFJPUF9TRVNTSU9OOgorCQkJZ192YWx1ZV9zZXRfb2JqZWN0
ICh2YWx1ZSwgcmVxdWVzdC0+cHJpdi0+c2Vzc2lvbik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoK
KwkJCUdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBw
c3BlYyk7CisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorc291cF9yZXF1ZXN0
X2luaXRhYmxlX2luaXQgKEdJbml0YWJsZSAgICAgKmluaXRhYmxlLAorCQkJICAgIEdDYW5jZWxs
YWJsZSAgKmNhbmNlbGxhYmxlLAorCQkJICAgIEdFcnJvciAgICAgICAqKmVycm9yKQoreworCVNv
dXBSZXF1ZXN0ICpyZXF1ZXN0ID0gU09VUF9SRVFVRVNUIChpbml0YWJsZSk7CisJZ2Jvb2xlYW4g
b2s7CisKKwlpZiAoIXJlcXVlc3QtPnByaXYtPnVyaSkgeworCQlnX3NldF9lcnJvciAoZXJyb3Is
IFNPVVBfRVJST1IsIFNPVVBfRVJST1JfQkFEX1VSSSwKKwkJCSAgICAgXyAoIk5vIFVSSSBwcm92
aWRlZCIpKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKworCW9rID0gU09VUF9SRVFVRVNUX0dFVF9D
TEFTUyAoaW5pdGFibGUpLT4KKwkgICAgIGNoZWNrX3VyaSAocmVxdWVzdCwgcmVxdWVzdC0+cHJp
di0+dXJpLCBlcnJvcik7CisKKwlpZiAoIW9rICYmIGVycm9yKSB7CisJCWNoYXIgKnVyaV9zdHJp
bmcgPSBzb3VwX3VyaV90b19zdHJpbmcgKHJlcXVlc3QtPnByaXYtPnVyaSwgRkFMU0UpOworCQln
X3NldF9lcnJvciAoZXJyb3IsIFNPVVBfRVJST1IsIFNPVVBfRVJST1JfQkFEX1VSSSwKKwkJCSAg
ICAgXyAoIkludmFsaWQgJyVzJyBVUkk6ICVzIiksCisJCQkgICAgIHJlcXVlc3QtPnByaXYtPnVy
aS0+c2NoZW1lLAorCQkJICAgICB1cmlfc3RyaW5nKTsKKwkJZ19mcmVlICh1cmlfc3RyaW5nKTsK
Kwl9CisKKwlyZXR1cm4gb2s7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorc291cF9yZXF1ZXN0X2Rl
ZmF1bHRfY2hlY2tfdXJpIChTb3VwUmVxdWVzdCAgKnJlcXVlc3QsCisJCQkJU291cFVSSSAgICAg
ICp1cmksCisJCQkJR0Vycm9yICAgICAgKiplcnJvcikKK3sKKwlyZXR1cm4gVFJVRTsKK30KKwor
LyogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbjogYXNzdW1lIHRoZSBzeW5jIGltcGxlbWVudGF0aW9u
IGRvZXNuJ3QgYmxvY2sgKi8KK3N0YXRpYyB2b2lkCitzb3VwX3JlcXVlc3RfZGVmYXVsdF9zZW5k
X2FzeW5jIChTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKKwkJCQkgR0NhbmNlbGxhYmxl
ICAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJCSBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNr
LAorCQkJCSBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpzaW1w
bGU7CisKKwlzaW1wbGUgPSBnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3IChHX09CSkVDVCAocmVx
dWVzdCksCisJCQkJCSAgICBjYWxsYmFjaywgdXNlcl9kYXRhLAorCQkJCQkgICAgc291cF9yZXF1
ZXN0X2RlZmF1bHRfc2VuZF9hc3luYyk7CisJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRl
X2luX2lkbGUgKHNpbXBsZSk7CisJZ19vYmplY3RfdW5yZWYgKHNpbXBsZSk7Cit9CisKK3N0YXRp
YyBHSW5wdXRTdHJlYW0gKgorc291cF9yZXF1ZXN0X2RlZmF1bHRfc2VuZF9maW5pc2ggKFNvdXBS
ZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAorCQkJCSAgR0FzeW5jUmVzdWx0ICAgICAgICAgKnJl
c3VsdCwKKwkJCQkgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcikKK3sKKwlnX3JldHVybl92
YWxfaWZfZmFpbCAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2lzX3ZhbGlkIChyZXN1bHQsIEdfT0JK
RUNUIChyZXF1ZXN0KSwgc291cF9yZXF1ZXN0X2RlZmF1bHRfc2VuZF9hc3luYyksIE5VTEwpOwor
CisJcmV0dXJuIHNvdXBfcmVxdWVzdF9zZW5kIChyZXF1ZXN0LCBOVUxMLCBlcnJvcik7Cit9CisK
K0dJbnB1dFN0cmVhbSAqCitzb3VwX3JlcXVlc3Rfc2VuZCAoU291cFJlcXVlc3QgICAgICAgICAg
KnJlcXVlc3QsCisJCSAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJICAg
R0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKQoreworCXJldHVybiBTT1VQX1JFUVVFU1RfR0VU
X0NMQVNTIChyZXF1ZXN0KS0+CisJICAgICAgIHNlbmQgKHJlcXVlc3QsIGNhbmNlbGxhYmxlLCBl
cnJvcik7Cit9CisKK3ZvaWQKK3NvdXBfcmVxdWVzdF9zZW5kX2FzeW5jIChTb3VwUmVxdWVzdCAg
ICAgICAgICAqcmVxdWVzdCwKKwkJCSBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUs
CisJCQkgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKKwkJCSBncG9pbnRlciB1c2VyX2Rh
dGEpCit7CisJU09VUF9SRVFVRVNUX0dFVF9DTEFTUyAocmVxdWVzdCktPgorCXNlbmRfYXN5bmMg
KHJlcXVlc3QsIGNhbmNlbGxhYmxlLCBjYWxsYmFjaywgdXNlcl9kYXRhKTsKK30KKworR0lucHV0
U3RyZWFtICoKK3NvdXBfcmVxdWVzdF9zZW5kX2ZpbmlzaCAoU291cFJlcXVlc3QgICAgICAgICAg
KnJlcXVlc3QsCisJCQkgIEdBc3luY1Jlc3VsdCAgICAgICAgICpyZXN1bHQsCisJCQkgIEdFcnJv
ciAgICAgICAgICAgICAgKiplcnJvcikKK3sKKwlyZXR1cm4gU09VUF9SRVFVRVNUX0dFVF9DTEFT
UyAocmVxdWVzdCktPgorCSAgICAgICBzZW5kX2ZpbmlzaCAocmVxdWVzdCwgcmVzdWx0LCBlcnJv
cik7Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX3JlcXVlc3RfY2xhc3NfaW5pdCAoU291cFJlcXVl
c3RDbGFzcyAqcmVxdWVzdF9jbGFzcykKK3sKKwlHT2JqZWN0Q2xhc3MgKm9iamVjdF9jbGFzcyA9
IEdfT0JKRUNUX0NMQVNTIChyZXF1ZXN0X2NsYXNzKTsKKworCWdfdHlwZV9jbGFzc19hZGRfcHJp
dmF0ZSAocmVxdWVzdF9jbGFzcywgc2l6ZW9mIChTb3VwUmVxdWVzdFByaXZhdGUpKTsKKworCXJl
cXVlc3RfY2xhc3MtPmNoZWNrX3VyaSA9IHNvdXBfcmVxdWVzdF9kZWZhdWx0X2NoZWNrX3VyaTsK
KwlyZXF1ZXN0X2NsYXNzLT5zZW5kX2FzeW5jID0gc291cF9yZXF1ZXN0X2RlZmF1bHRfc2VuZF9h
c3luYzsKKwlyZXF1ZXN0X2NsYXNzLT5zZW5kX2ZpbmlzaCA9IHNvdXBfcmVxdWVzdF9kZWZhdWx0
X3NlbmRfZmluaXNoOworCisJb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IHNvdXBfcmVxdWVzdF9m
aW5hbGl6ZTsKKwlvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IHNvdXBfcmVxdWVzdF9zZXRf
cHJvcGVydHk7CisJb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSBzb3VwX3JlcXVlc3RfZ2V0
X3Byb3BlcnR5OworCisJZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoCisJCW9iamVj
dF9jbGFzcywgUFJPUF9VUkksCisJCWdfcGFyYW1fc3BlY19ib3hlZCAoU09VUF9SRVFVRVNUX1VS
SSwKKwkJCQkgICAgIlVSSSIsCisJCQkJICAgICJUaGUgcmVxdWVzdCBVUkkiLAorCQkJCSAgICBT
T1VQX1RZUEVfVVJJLAorCQkJCSAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RS
VUNUX09OTFkpKTsKKwlnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5ICgKKwkJb2JqZWN0
X2NsYXNzLCBQUk9QX1NFU1NJT04sCisJCWdfcGFyYW1fc3BlY19vYmplY3QgKFNPVVBfUkVRVUVT
VF9TRVNTSU9OLAorCQkJCSAgICAgIlNlc3Npb24iLAorCQkJCSAgICAgIlRoZSByZXF1ZXN0J3Mg
c2Vzc2lvbiIsCisJCQkJICAgICBTT1VQX1RZUEVfU0VTU0lPTiwKKwkJCQkgICAgIEdfUEFSQU1f
UkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpOworfQorCitzdGF0aWMgdm9pZAor
c291cF9yZXF1ZXN0X2luaXRhYmxlX2ludGVyZmFjZV9pbml0IChHSW5pdGFibGVJZmFjZSAqaW5p
dGFibGVfaW50ZXJmYWNlKQoreworCWluaXRhYmxlX2ludGVyZmFjZS0+aW5pdCA9IHNvdXBfcmVx
dWVzdF9pbml0YWJsZV9pbml0OworfQorCitTb3VwVVJJICoKK3NvdXBfcmVxdWVzdF9nZXRfdXJp
IChTb3VwUmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlyZXR1cm4gcmVxdWVzdC0+cHJpdi0+dXJpOwor
fQorCitTb3VwU2Vzc2lvbiAqCitzb3VwX3JlcXVlc3RfZ2V0X3Nlc3Npb24gKFNvdXBSZXF1ZXN0
ICpyZXF1ZXN0KQoreworCXJldHVybiByZXF1ZXN0LT5wcml2LT5zZXNzaW9uOworfQorCitnb2Zm
c2V0Citzb3VwX3JlcXVlc3RfZ2V0X2NvbnRlbnRfbGVuZ3RoIChTb3VwUmVxdWVzdCAqcmVxdWVz
dCkKK3sKKwlyZXR1cm4gU09VUF9SRVFVRVNUX0dFVF9DTEFTUyAocmVxdWVzdCktPmdldF9jb250
ZW50X2xlbmd0aCAocmVxdWVzdCk7Cit9CisKK2NvbnN0IGNoYXIgKgorc291cF9yZXF1ZXN0X2dl
dF9jb250ZW50X3R5cGUgKFNvdXBSZXF1ZXN0ICAqcmVxdWVzdCkKK3sKKwlyZXR1cm4gU09VUF9S
RVFVRVNUX0dFVF9DTEFTUyAocmVxdWVzdCktPmdldF9jb250ZW50X3R5cGUgKHJlcXVlc3QpOwor
fQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1y
ZXF1ZXN0LmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVl
c3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjUwYWMyCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1
ZXN0LmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0
LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgU09VUF9S
RVFVRVNUX0gKKyNkZWZpbmUgU09VUF9SRVFVRVNUX0ggMQorCisjaW5jbHVkZSA8bGlic291cC9z
b3VwLmg+CisjaW5jbHVkZSA8Z2lvL2dpby5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUg
U09VUF9UWVBFX1JFUVVFU1QgICAgICAgICAgICAoc291cF9yZXF1ZXN0X2dldF90eXBlICgpKQor
I2RlZmluZSBTT1VQX1JFUVVFU1Qob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfQ0FTVCAoKG9iaiksIFNPVVBfVFlQRV9SRVFVRVNULCBTb3VwUmVxdWVzdCkpCisjZGVmaW5l
IFNPVVBfUkVRVUVTVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgo
a2xhc3MpLCBTT1VQX1RZUEVfUkVRVUVTVCwgU291cFJlcXVlc3RDbGFzcykpCisjZGVmaW5lIFNP
VVBfSVNfUkVRVUVTVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgo
b2JqKSwgU09VUF9UWVBFX1JFUVVFU1QpKQorI2RlZmluZSBTT1VQX0lTX1JFUVVFU1RfQ0xBU1Mo
a2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgU09VUF9UWVBFX1JFUVVF
U1QpKQorI2RlZmluZSBTT1VQX1JFUVVFU1RfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFO
Q0VfR0VUX0NMQVNTICgob2JqKSwgU09VUF9UWVBFX1JFUVVFU1QsIFNvdXBSZXF1ZXN0Q2xhc3Mp
KQorCit0eXBlZGVmIHN0cnVjdCBfU291cFJlcXVlc3QgU291cFJlcXVlc3Q7Cit0eXBlZGVmIHN0
cnVjdCBfU291cFJlcXVlc3RQcml2YXRlIFNvdXBSZXF1ZXN0UHJpdmF0ZTsKK3R5cGVkZWYgc3Ry
dWN0IF9Tb3VwUmVxdWVzdENsYXNzIFNvdXBSZXF1ZXN0Q2xhc3M7CisKK3N0cnVjdCBfU291cFJl
cXVlc3QgeworCUdPYmplY3QgcGFyZW50OworCisJU291cFJlcXVlc3RQcml2YXRlICpwcml2Owor
fTsKKworc3RydWN0IF9Tb3VwUmVxdWVzdENsYXNzIHsKKwlHT2JqZWN0Q2xhc3MgcGFyZW50Owor
CisJZ2Jvb2xlYW4gKCpjaGVja191cmkpKFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXFfYmFzZSwK
KwkJCSAgICAgIFNvdXBVUkkgICAgICAgICAgICAgICp1cmksCisJCQkgICAgICBHRXJyb3IgICAg
ICAgICAgICAgICoqZXJyb3IpOworCisJR0lucHV0U3RyZWFtICogKCpzZW5kKShTb3VwUmVxdWVz
dCAgICAgICAgICAqcmVxdWVzdCwKKwkJCSAgICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2Fu
Y2VsbGFibGUsCisJCQkgICAgICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKTsKKwl2b2lk
ICgqc2VuZF9hc3luYykoU291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCisJCQkgICBHQ2Fu
Y2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkgICBHQXN5bmNSZWFkeUNhbGxiYWNr
IGNhbGxiYWNrLAorCQkJICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKKwlHSW5wdXRTdHJlYW0gKiAo
KnNlbmRfZmluaXNoKShTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKKwkJCQkgICAgICBH
QXN5bmNSZXN1bHQgICAgICAgICAqcmVzdWx0LAorCQkJCSAgICAgIEdFcnJvciAgICAgICAgICAg
ICAgKiplcnJvcik7CisKKwlnb2Zmc2V0ICgqZ2V0X2NvbnRlbnRfbGVuZ3RoKShTb3VwUmVxdWVz
dCAgICpyZXF1ZXN0KTsKKwljb25zdCBjaGFyICogICAoKmdldF9jb250ZW50X3R5cGUpKFNvdXBS
ZXF1ZXN0ICAgKnJlcXVlc3QpOworfTsKKworR1R5cGUgc291cF9yZXF1ZXN0X2dldF90eXBlICh2
b2lkKTsKKworI2RlZmluZSBTT1VQX1JFUVVFU1RfVVJJICAgICAidXJpIgorI2RlZmluZSBTT1VQ
X1JFUVVFU1RfU0VTU0lPTiAic2Vzc2lvbiIKKworR0lucHV0U3RyZWFtICpzb3VwX3JlcXVlc3Rf
c2VuZCAoU291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCisJCQkJIEdDYW5jZWxsYWJsZSAg
ICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKTsK
K3ZvaWQgICAgICAgICAgc291cF9yZXF1ZXN0X3NlbmRfYXN5bmMgKFNvdXBSZXF1ZXN0ICAgICAg
ICAgICpyZXF1ZXN0LAorCQkJCSAgICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFi
bGUsCisJCQkJICAgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCisJCQkJICAgICAg
IGdwb2ludGVyIHVzZXJfZGF0YSk7CitHSW5wdXRTdHJlYW0gKnNvdXBfcmVxdWVzdF9zZW5kX2Zp
bmlzaCAoU291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCisJCQkJCUdBc3luY1Jlc3VsdCAg
ICAgICAgICpyZXN1bHQsCisJCQkJCUdFcnJvciAgICAgICAgICAgICAgKiplcnJvcik7CisKK1Nv
dXBVUkkgICAgICAqc291cF9yZXF1ZXN0X2dldF91cmkgKFNvdXBSZXF1ZXN0ICAgICAgICAgICpy
ZXF1ZXN0KTsKK1NvdXBTZXNzaW9uICAqc291cF9yZXF1ZXN0X2dldF9zZXNzaW9uIChTb3VwUmVx
dWVzdCAgICAgICAgICAqcmVxdWVzdCk7CisKK2dvZmZzZXQgICAgICAgc291cF9yZXF1ZXN0X2dl
dF9jb250ZW50X2xlbmd0aCAoU291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QpOworY29uc3Qg
Y2hhciAgICpzb3VwX3JlcXVlc3RfZ2V0X2NvbnRlbnRfdHlwZSAoU291cFJlcXVlc3QgICAgICAg
ICAgKnJlcXVlc3QpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogU09VUF9SRVFVRVNUX0gg
Ki8KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAt
cmVxdWVzdGVyLmMgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJl
cXVlc3Rlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3Njc4N2YKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3Vw
LXJlcXVlc3Rlci5jCkBAIC0wLDAgKzEsMjAxIEBACisvKgorICogc291cC1yZXF1ZXN0ZXIuYzoK
KyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3Rlci5oIgorCisjaW5jbHVkZSAic291cC1yZXF1ZXN0
LWRhdGEuaCIKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3QtZmlsZS5oIgorI2luY2x1ZGUgInNvdXAt
cmVxdWVzdC1odHRwLmgiCisjaW5jbHVkZSA8Z2xpYi9naTE4bi5oPgorI2luY2x1ZGUgPGxpYnNv
dXAvc291cC5oPgorCitzdHJ1Y3QgX1NvdXBSZXF1ZXN0ZXJQcml2YXRlIHsKKwlHSGFzaFRhYmxl
ICpyZXF1ZXN0X3R5cGVzOworfTsKKworI2RlZmluZSBTT1VQX1JFUVVFU1RFUl9HRVRfUFJJVkFU
RShvKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFICgobyksIFNPVVBfVFlQRV9SRVFVRVNU
RVIsIFNvdXBSZXF1ZXN0ZXJQcml2YXRlKSkKKworR19ERUZJTkVfVFlQRSAoU291cFJlcXVlc3Rl
ciwgc291cF9yZXF1ZXN0ZXIsIEdfVFlQRV9PQkpFQ1QpCisKK3N0YXRpYyB2b2lkIHNvdXBfcmVx
dWVzdGVyX2luaXQgKFNvdXBSZXF1ZXN0ZXIgKnJlcXVlc3RlcikKK3sKKwlyZXF1ZXN0ZXItPnBy
aXYgPSBTT1VQX1JFUVVFU1RFUl9HRVRfUFJJVkFURSAocmVxdWVzdGVyKTsKKworCXJlcXVlc3Rl
ci0+cHJpdi0+cmVxdWVzdF90eXBlcyA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmFsaXplIChH
T2JqZWN0ICpvYmplY3QpCit7CisJU291cFJlcXVlc3RlciAqcmVxdWVzdGVyID0gU09VUF9SRVFV
RVNURVIgKG9iamVjdCk7CisKKwlpZiAocmVxdWVzdGVyLT5wcml2LT5yZXF1ZXN0X3R5cGVzKQor
CQlnX2hhc2hfdGFibGVfZGVzdHJveSAocmVxdWVzdGVyLT5wcml2LT5yZXF1ZXN0X3R5cGVzKTsK
KworCUdfT0JKRUNUX0NMQVNTIChzb3VwX3JlcXVlc3Rlcl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6
ZSAob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgc291cF9yZXF1ZXN0ZXJfY2xhc3NfaW5pdCAo
U291cFJlcXVlc3RlckNsYXNzICpyZXF1ZXN0ZXJfY2xhc3MpCit7CisJR09iamVjdENsYXNzICpv
YmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAocmVxdWVzdGVyX2NsYXNzKTsKKworCWdfdHlw
ZV9jbGFzc19hZGRfcHJpdmF0ZSAocmVxdWVzdGVyX2NsYXNzLCBzaXplb2YgKFNvdXBSZXF1ZXN0
ZXJQcml2YXRlKSk7CisKKwkvKiB2aXJ0dWFsIG1ldGhvZCBvdmVycmlkZSAqLworCW9iamVjdF9j
bGFzcy0+ZmluYWxpemUgPSBmaW5hbGl6ZTsKK30KKworc3RhdGljIHZvaWQgaW5pdF9yZXF1ZXN0
X3R5cGVzIChTb3VwUmVxdWVzdGVyUHJpdmF0ZSAqcHJpdikKK3sKKwlpZiAocHJpdi0+cmVxdWVz
dF90eXBlcykKKwkJcmV0dXJuOworCisJcHJpdi0+cmVxdWVzdF90eXBlcyA9IGdfaGFzaF90YWJs
ZV9uZXdfZnVsbCAoc291cF9zdHJfY2FzZV9oYXNoLAorCQkJCQkJICAgICBzb3VwX3N0cl9jYXNl
X2VxdWFsLAorCQkJCQkJICAgICBnX2ZyZWUsIDApOworCWdfaGFzaF90YWJsZV9pbnNlcnQgKHBy
aXYtPnJlcXVlc3RfdHlwZXMsIGdfc3RyZHVwICgiZmlsZSIpLAorCQkJICAgICBHU0laRV9UT19Q
T0lOVEVSIChTT1VQX1RZUEVfUkVRVUVTVF9GSUxFKSk7CisJZ19oYXNoX3RhYmxlX2luc2VydCAo
cHJpdi0+cmVxdWVzdF90eXBlcywgZ19zdHJkdXAgKCJkYXRhIiksCisJCQkgICAgIEdTSVpFX1RP
X1BPSU5URVIgKFNPVVBfVFlQRV9SRVFVRVNUX0RBVEEpKTsKKwlnX2hhc2hfdGFibGVfaW5zZXJ0
IChwcml2LT5yZXF1ZXN0X3R5cGVzLCBnX3N0cmR1cCAoImh0dHAiKSwKKwkJCSAgICAgR1NJWkVf
VE9fUE9JTlRFUiAoU09VUF9UWVBFX1JFUVVFU1RfSFRUUCkpOworCWdfaGFzaF90YWJsZV9pbnNl
cnQgKHByaXYtPnJlcXVlc3RfdHlwZXMsIGdfc3RyZHVwICgiaHR0cHMiKSwKKwkJCSAgICAgR1NJ
WkVfVE9fUE9JTlRFUiAoU09VUF9UWVBFX1JFUVVFU1RfSFRUUCkpOworCWdfaGFzaF90YWJsZV9p
bnNlcnQgKHByaXYtPnJlcXVlc3RfdHlwZXMsIGdfc3RyZHVwICgiZnRwIiksCisJCQkgICAgIEdT
SVpFX1RPX1BPSU5URVIgKFNPVVBfVFlQRV9SRVFVRVNUX0ZJTEUpKTsKK30KKworU291cFJlcXVl
c3RlciAqc291cF9yZXF1ZXN0ZXJfbmV3ICh2b2lkKQoreworCXJldHVybiAoU291cFJlcXVlc3Rl
ciAqKWdfb2JqZWN0X25ldyAoU09VUF9UWVBFX1JFUVVFU1RFUiwgMCk7Cit9CisKK1NvdXBSZXF1
ZXN0ICpzb3VwX3JlcXVlc3Rlcl9yZXF1ZXN0IChTb3VwUmVxdWVzdGVyICpyZXF1ZXN0ZXIsIGNv
bnN0IGNoYXIgKnVyaVN0cmluZywgU291cFNlc3Npb24gKnNlc3Npb24sIEdFcnJvciAqKmVycm9y
KQoreworCVNvdXBVUkkgKnVyaSA9IE5VTEw7CisJU291cFJlcXVlc3QgKnJlcTsKKworCWlmICgh
c3RybmNtcCAodXJpU3RyaW5nLCAiZmlsZTovLyIsIDcpKSB7CisJCS8qIElmIGl0J3MgYSBsb2Nh
bCBmaWxlIHdlIG11c3QgZXNjYXBlIHRoZSBVUkwgdXNpbmcKKwkJICogdGhlIEdMaWIgY2FsbCBi
ZWNhdXNlIHNvdXBfdXJpX25ldyB3b24ndCBkbworCQkgKiBpdC4gT3RoZXJ3aXNlIGZvciB3ZWly
ZCBmaWxlbmFtZXMgdGhhdCBjb3VsZAorCQkgKiBjb250YWluIHBlcmNlbnQgZXNjYXBlIHRyaXBs
ZXRzCisJCSAqLworCQlnY2hhciAqZXNjYXBlZCA9IGdfZmlsZW5hbWVfdG9fdXJpICh1cmlTdHJp
bmcrNywgTlVMTCwgRkFMU0UpOworCQlpZiAoZXNjYXBlZCkgeworCQkJdXJpID0gc291cF91cmlf
bmV3IChlc2NhcGVkKTsKKwkJCWdfZnJlZSAoZXNjYXBlZCk7CisJCX0KKwl9IGVsc2UgeworCQl1
cmkgPSBzb3VwX3VyaV9uZXcgKHVyaVN0cmluZyk7CisJfQorCisJaWYgKCF1cmkpIHsKKwkJZ19z
ZXRfZXJyb3IgKGVycm9yLCBTT1VQX0VSUk9SLCBTT1VQX0VSUk9SX0JBRF9VUkksCisJCQkgICAg
IF8gKCJDb3VsZCBub3QgcGFyc2UgVVJJICclcyciKSwgdXJpU3RyaW5nKTsKKwkJcmV0dXJuIDA7
CisJfQorCisJcmVxID0gc291cF9yZXF1ZXN0ZXJfcmVxdWVzdF91cmkgKHJlcXVlc3RlciwgdXJp
LCBzZXNzaW9uLCBlcnJvcik7CisJc291cF91cmlfZnJlZSAodXJpKTsKKwlyZXR1cm4gcmVxOwor
fQorCitTb3VwUmVxdWVzdCAqc291cF9yZXF1ZXN0ZXJfcmVxdWVzdF91cmkgKFNvdXBSZXF1ZXN0
ZXIgKnJlcXVlc3RlciwgU291cFVSSSAqdXJpLCBTb3VwU2Vzc2lvbiAqc2Vzc2lvbiwgR0Vycm9y
ICoqZXJyb3IpCit7CisJR1R5cGUgcmVxdWVzdFR5cGU7CisKKwlnX3JldHVybl92YWxfaWZfZmFp
bCAoU09VUF9JU19SRVFVRVNURVIgKHJlcXVlc3RlciksIDApOworCisJaW5pdF9yZXF1ZXN0X3R5
cGVzIChyZXF1ZXN0ZXItPnByaXYpOworCXJlcXVlc3RUeXBlID0gKEdUeXBlKUdQT0lOVEVSX1RP
X1NJWkUgKGdfaGFzaF90YWJsZV9sb29rdXAgKHJlcXVlc3Rlci0+cHJpdi0+cmVxdWVzdF90eXBl
cywgdXJpLT5zY2hlbWUpKTsKKwlpZiAoIXJlcXVlc3RUeXBlKSB7CisJCWdfc2V0X2Vycm9yIChl
cnJvciwgU09VUF9FUlJPUiwgU09VUF9FUlJPUl9VTlNVUFBPUlRFRF9VUklfU0NIRU1FLAorCQkJ
ICAgICBfICgiVW5zdXBwb3J0ZWQgVVJJIHNjaGVtZSAnJXMnIiksIHVyaS0+c2NoZW1lKTsKKwkJ
cmV0dXJuIDA7CisJfQorCisJaWYgKGdfdHlwZV9pc19hIChyZXF1ZXN0VHlwZSwgR19UWVBFX0lO
SVRBQkxFKSkgeworCQlyZXR1cm4gKFNvdXBSZXF1ZXN0ICopZ19pbml0YWJsZV9uZXcgKHJlcXVl
c3RUeXBlLCAwLCBlcnJvciwKKwkJCQkJCSAgICAgICJ1cmkiLCB1cmksCisJCQkJCQkgICAgICAi
c2Vzc2lvbiIsIHNlc3Npb24sCisJCQkJCQkgICAgICAwKTsKKwl9IGVsc2UgeworCQlyZXR1cm4g
KFNvdXBSZXF1ZXN0ICopZ19vYmplY3RfbmV3IChyZXF1ZXN0VHlwZSwKKwkJCQkJCSAgICAidXJp
IiwgdXJpLAorCQkJCQkJICAgICJzZXNzaW9uIiwgc2Vzc2lvbiwKKwkJCQkJCSAgICAwKTsKKwl9
Cit9CisKKy8qIFJGQyAyMzk2LCAzLjEgKi8KK3N0YXRpYyBnYm9vbGVhbgorc291cF9zY2hlbWVf
aXNfdmFsaWQgKGNvbnN0IGNoYXIgKnNjaGVtZSkKK3sKKwlpZiAoc2NoZW1lID09IE5VTEwgfHwK
KwkgICAgIWdfYXNjaWlfaXNhbHBoYSAoKnNjaGVtZSkpCisJCXJldHVybiBGQUxTRTsKKworCXNj
aGVtZSsrOworCXdoaWxlICgqc2NoZW1lKSB7CisJCWlmICghZ19hc2NpaV9pc2FscGhhICgqc2No
ZW1lKSAmJgorCQkgICAgIWdfYXNjaWlfaXNkaWdpdCAoKnNjaGVtZSkgJiYKKwkJICAgICpzY2hl
bWUgIT0gJysnICYmCisJCSAgICAqc2NoZW1lICE9ICctJyAmJgorCQkgICAgKnNjaGVtZSAhPSAn
LicpCisJCQlyZXR1cm4gRkFMU0U7CisJCXNjaGVtZSsrOworCX0KKwlyZXR1cm4gVFJVRTsKK30K
Kwordm9pZAorc291cF9yZXF1ZXN0ZXJfYWRkX3Byb3RvY29sIChTb3VwUmVxdWVzdGVyICpyZXF1
ZXN0ZXIsCisJCQkgICAgIGNvbnN0IGNoYXIgICpzY2hlbWUsCisJCQkgICAgIEdUeXBlIHJlcXVl
c3RfdHlwZSkKK3sKKwlnX3JldHVybl9pZl9mYWlsIChTT1VQX0lTX1JFUVVFU1RFUiAocmVxdWVz
dGVyKSk7CisJZ19yZXR1cm5faWZfZmFpbCAoc291cF9zY2hlbWVfaXNfdmFsaWQgKHNjaGVtZSkp
OworCisJaW5pdF9yZXF1ZXN0X3R5cGVzIChyZXF1ZXN0ZXItPnByaXYpOworCWdfaGFzaF90YWJs
ZV9pbnNlcnQgKHJlcXVlc3Rlci0+cHJpdi0+cmVxdWVzdF90eXBlcywgZ19zdHJkdXAgKHNjaGVt
ZSksCisJCQkgICAgIEdTSVpFX1RPX1BPSU5URVIgKHJlcXVlc3RfdHlwZSkpOworfQorCit2b2lk
Citzb3VwX3JlcXVlc3Rlcl9yZW1vdmVfcHJvdG9jb2wgKFNvdXBSZXF1ZXN0ZXIgKnJlcXVlc3Rl
ciwKKwkJCQljb25zdCBjaGFyICAqc2NoZW1lKQoreworCWdfcmV0dXJuX2lmX2ZhaWwgKFNPVVBf
SVNfUkVRVUVTVEVSIChyZXF1ZXN0ZXIpKTsKKwlnX3JldHVybl9pZl9mYWlsIChzb3VwX3NjaGVt
ZV9pc192YWxpZCAoc2NoZW1lKSk7CisKKwlpbml0X3JlcXVlc3RfdHlwZXMgKHJlcXVlc3Rlci0+
cHJpdik7CisJZ19oYXNoX3RhYmxlX3JlbW92ZSAocmVxdWVzdGVyLT5wcml2LT5yZXF1ZXN0X3R5
cGVzLCBzY2hlbWUpOworfQorCitHUXVhcmsKK3NvdXBfZXJyb3JfcXVhcmsgKHZvaWQpCit7CisJ
c3RhdGljIEdRdWFyayBlcnJvcjsKKwlpZiAoIWVycm9yKQorCQllcnJvciA9IGdfcXVhcmtfZnJv
bV9zdGF0aWNfc3RyaW5nICgic291cF9lcnJvcl9xdWFyayIpOworCXJldHVybiBlcnJvcjsKK30K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVx
dWVzdGVyLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVl
c3Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZWQ5MGIKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJl
cXVlc3Rlci5oCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdh
bGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2lmbmRlZiBTT1VQX1JFUVVFU1RFUl9ICisjZGVmaW5lIFNPVVBfUkVRVUVTVEVS
X0ggMQorCisjaW5jbHVkZSAic291cC1yZXF1ZXN0LmgiCisjaW5jbHVkZSA8bGlic291cC9zb3Vw
Lmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBTT1VQX1RZUEVfUkVRVUVTVEVSICAgICAg
ICAgICAgKHNvdXBfcmVxdWVzdGVyX2dldF90eXBlICgpKQorI2RlZmluZSBTT1VQX1JFUVVFU1RF
UihvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgU09V
UF9UWVBFX1JFUVVFU1RFUiwgU291cFJlcXVlc3RlcikpCisjZGVmaW5lIFNPVVBfUkVRVUVTVEVS
X0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFNPVVBf
VFlQRV9SRVFVRVNURVIsIFNvdXBSZXF1ZXN0ZXJDbGFzcykpCisjZGVmaW5lIFNPVVBfSVNfUkVR
VUVTVEVSKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBT
T1VQX1RZUEVfUkVRVUVTVEVSKSkKKyNkZWZpbmUgU09VUF9JU19SRVFVRVNURVJfQ0xBU1Moa2xh
c3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKG9iaiksIFNPVVBfVFlQRV9SRVFVRVNURVIp
KQorI2RlZmluZSBTT1VQX1JFUVVFU1RFUl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5D
RV9HRVRfQ0xBU1MgKChvYmopLCBTT1VQX1RZUEVfUkVRVUVTVEVSLCBTb3VwUmVxdWVzdGVyQ2xh
c3MpKQorCisjZGVmaW5lIFNPVVBfRVJST1Igc291cF9lcnJvcl9xdWFyayAoKQorCit0eXBlZGVm
IGVudW0geworCVNPVVBfRVJST1JfQkFEX1VSSSwKKwlTT1VQX0VSUk9SX1VOU1VQUE9SVEVEX1VS
SV9TQ0hFTUUKK30gU291cEVycm9yOworCit0eXBlZGVmIHN0cnVjdCBfU291cFJlcXVlc3RlciBT
b3VwUmVxdWVzdGVyOwordHlwZWRlZiBzdHJ1Y3QgX1NvdXBSZXF1ZXN0ZXJQcml2YXRlIFNvdXBS
ZXF1ZXN0ZXJQcml2YXRlOworCitzdHJ1Y3QgX1NvdXBSZXF1ZXN0ZXIgeworCUdPYmplY3QgcGFy
ZW50OworCisJU291cFJlcXVlc3RlclByaXZhdGUgKnByaXY7Cit9OworCit0eXBlZGVmIHN0cnVj
dCB7CisJR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK30gU291cFJlcXVlc3RlckNsYXNzOwor
CitHVHlwZSBzb3VwX3JlcXVlc3Rlcl9nZXRfdHlwZSAodm9pZCk7CisKK1NvdXBSZXF1ZXN0ZXIg
KnNvdXBfcmVxdWVzdGVyX25ldyAodm9pZCk7CisKK0dRdWFyayBzb3VwX2Vycm9yX3F1YXJrICh2
b2lkKTsKKworU291cFJlcXVlc3QgKnNvdXBfcmVxdWVzdGVyX3JlcXVlc3QgKFNvdXBSZXF1ZXN0
ZXIgKnJlcXVlc3RlciwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKnVyaVN0cmluZywKKwkJCQkgICAg
IFNvdXBTZXNzaW9uICpzZXNzaW9uLAorCQkJCSAgICAgR0Vycm9yICoqZXJyb3IpOworCitTb3Vw
UmVxdWVzdCAqc291cF9yZXF1ZXN0ZXJfcmVxdWVzdF91cmkgKFNvdXBSZXF1ZXN0ZXIgKnJlcXVl
c3RlciwKKwkJCQkJIFNvdXBVUkkgKnVyaSwKKwkJCQkJIFNvdXBTZXNzaW9uICpzZXNzaW9uLAor
CQkJCQkgR0Vycm9yICoqZXJyb3IpOworCit2b2lkIHNvdXBfcmVxdWVzdGVyX2FkZF9wcm90b2Nv
bCAoU291cFJlcXVlc3RlciAqcmVxdWVzdGVyLAorCQkJCSAgY29uc3QgY2hhciAgKnNjaGVtZSwK
KwkJCQkgIEdUeXBlIHJlcXVlc3RfdHlwZSk7CisKK3ZvaWQgc291cF9yZXF1ZXN0ZXJfcmVtb3Zl
X3Byb3RvY29sIChTb3VwUmVxdWVzdGVyICpyZXF1ZXN0ZXIsCisJCQkJICAgICBjb25zdCBjaGFy
ICAqc2NoZW1lKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFNPVVBfUkVRVUVTVEVSX0gg
Ki8KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtp
dC9zb3VwLWNhY2hlLXByaXZhdGUuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2Nh
Y2hlL3dlYmtpdC9zb3VwLWNhY2hlLXByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4wOTE0N2YzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUtcHJpdmF0ZS5oCkBAIC0wLDAgKzEs
NDEgQEAKKy8qCisgKiBzb3VwLWNhY2hlLXByaXZhdGUuaDoKKyAqCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV0VCS0lUX1NPVVBfQ0FDSEVfUFJJVkFURV9ICisj
ZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX1BSSVZBVEVfSCAxCisKKyNpbmNsdWRlICJzb3VwLWNh
Y2hlLmgiCisjaW5jbHVkZSA8bGlic291cC9zb3VwLW1lc3NhZ2UuaD4KKworR19CRUdJTl9ERUNM
UworCitXZWJLaXRTb3VwQ2FjaGVSZXNwb25zZSB3ZWJraXRfc291cF9jYWNoZV9oYXNfcmVzcG9u
c2UgKFdlYktpdFNvdXBDYWNoZSAgICpjYWNoZSwKKwkJCQkJCQlTb3VwTWVzc2FnZSAqbXNnKTsK
K0dJbnB1dFN0cmVhbSAqd2Via2l0X3NvdXBfY2FjaGVfc2VuZF9yZXNwb25zZSAoV2ViS2l0U291
cENhY2hlICAgKmNhY2hlLAorCQkJCQkgICAgICAgU291cE1lc3NhZ2UgKm1zZyk7CitXZWJLaXRT
b3VwQ2FjaGVhYmlsaXR5ICB3ZWJraXRfc291cF9jYWNoZV9nZXRfY2FjaGVhYmlsaXR5IChXZWJL
aXRTb3VwQ2FjaGUgICAqY2FjaGUsCisJCQkJCQkJICAgIFNvdXBNZXNzYWdlICptc2cpOworU291
cE1lc3NhZ2UgKndlYmtpdF9zb3VwX2NhY2hlX2dlbmVyYXRlX2NvbmRpdGlvbmFsX3JlcXVlc3Qg
KFdlYktpdFNvdXBDYWNoZSAgICpjYWNoZSwKKwkJCQkJCQkgICAgIFNvdXBNZXNzYWdlICpvcmln
aW5hbCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfU09VUF9DQUNIRV9QUklW
QVRFX0ggKi8KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3dlYmtpdC9zb3VwLWNhY2hlLmMgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNo
ZS93ZWJraXQvc291cC1jYWNoZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjcyYWNmYjMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5jCkBAIC0wLDAgKzEsMTY1MiBAQAorLyoKKyAqIHNv
dXAtY2FjaGUuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBJZ2FsaWEgUy5MLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisv
KiBUT0RPOgorICogLSBOZWVkIHRvIGhvb2sgdGhlIGZlYXR1cmUgaW4gdGhlIHN5bmMgU291cFNl
c3Npb24uCisgKiAtIE5lZWQgbW9yZSB0ZXN0cy4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdf
SAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJzb3VwLWNhY2hlLmgi
CisjaW5jbHVkZSAic291cC1jYWNoZS1wcml2YXRlLmgiCisjaW5jbHVkZSA8bGlic291cC9zb3Vw
Lmg+CisjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitzdGF0aWMg
U291cFNlc3Npb25GZWF0dXJlSW50ZXJmYWNlICp3ZWJraXRfc291cF9jYWNoZV9kZWZhdWx0X2Zl
YXR1cmVfaW50ZXJmYWNlOworc3RhdGljIHZvaWQgd2Via2l0X3NvdXBfY2FjaGVfc2Vzc2lvbl9m
ZWF0dXJlX2luaXQgKFNvdXBTZXNzaW9uRmVhdHVyZUludGVyZmFjZSAqZmVhdHVyZV9pbnRlcmZh
Y2UsIGdwb2ludGVyIGludGVyZmFjZV9kYXRhKTsKKworI2RlZmluZSBERUZBVUxUX01BWF9TSVpF
IDUwICogMTAyNCAqIDEwMjQKKyNkZWZpbmUgTUFYX0VOVFJZX0RBVEFfUEVSQ0VOVEFHRSAxMCAv
KiBQZXJjZW50YWdlIG9mIHRoZSB0b3RhbCBzaXplCisJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvZiB0aGUgY2FjaGUgdGhhdCBjYW4gYmUKKwkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZpbGxlZCBieSBhIHNpbmdsZSBlbnRyeSAqLworCit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0U291cENhY2hlRW50cnkgeworCWNoYXIgKmtleTsKKwljaGFyICpmaWxlbmFtZTsKKwln
dWludCBmcmVzaG5lc3NfbGlmZXRpbWU7CisJZ2Jvb2xlYW4gbXVzdF9yZXZhbGlkYXRlOworCUdT
dHJpbmcgKmRhdGE7CisJZ3NpemUgcG9zOworCWdzaXplIGxlbmd0aDsKKwl0aW1lX3QgY29ycmVj
dGVkX2luaXRpYWxfYWdlOworCXRpbWVfdCByZXNwb25zZV90aW1lOworCWdib29sZWFuIHdyaXRp
bmc7CisJZ2Jvb2xlYW4gZGlydHk7CisJZ2Jvb2xlYW4gZ290X2JvZHk7CisJZ2Jvb2xlYW4gYmVp
bmdfdmFsaWRhdGVkOworCVNvdXBNZXNzYWdlSGVhZGVycyAqaGVhZGVyczsKKwlHT3V0cHV0U3Ry
ZWFtICpzdHJlYW07CisJR0Vycm9yICplcnJvcjsKKwlndWludCBoaXRzOworCUdDYW5jZWxsYWJs
ZSAqY2FuY2VsbGFibGU7Cit9IFdlYktpdFNvdXBDYWNoZUVudHJ5OworCitzdHJ1Y3QgX1dlYktp
dFNvdXBDYWNoZVByaXZhdGUgeworCWNoYXIgKmNhY2hlX2RpcjsKKwlHSGFzaFRhYmxlICpjYWNo
ZTsKKwlndWludCBuX3BlbmRpbmc7CisJU291cFNlc3Npb24gKnNlc3Npb247CisJV2ViS2l0U291
cENhY2hlVHlwZSBjYWNoZV90eXBlOworCWd1aW50IHNpemU7CisJZ3VpbnQgbWF4X3NpemU7CisJ
Z3VpbnQgbWF4X2VudHJ5X2RhdGFfc2l6ZTsgLyogQ29tcHV0ZWQgdmFsdWUuIEhlcmUgZm9yIHBl
cmZvcm1hbmNlIHJlYXNvbnMgKi8KKwlHTGlzdCAqbHJ1X3N0YXJ0OworfTsKKwordHlwZWRlZiBz
dHJ1Y3QgeworCVdlYktpdFNvdXBDYWNoZSAqY2FjaGU7CisJV2ViS2l0U291cENhY2hlRW50cnkg
KmVudHJ5OworCVNvdXBNZXNzYWdlICptc2c7CisJZ3Vsb25nIGdvdF9jaHVua19oYW5kbGVyOwor
CWd1bG9uZyBnb3RfYm9keV9oYW5kbGVyOworCWd1bG9uZyByZXN0YXJ0ZWRfaGFuZGxlcjsKK30g
V2ViS2l0U291cENhY2hlV3JpdGluZ0ZpeHR1cmU7CisKK2VudW0geworCVBST1BfMCwKKwlQUk9Q
X0NBQ0hFX0RJUiwKKwlQUk9QX0NBQ0hFX1RZUEUKK307CisKKyNkZWZpbmUgV0VCS0lUX1NPVVBf
Q0FDSEVfR0VUX1BSSVZBVEUobykgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAoKG8pLCBX
RUJLSVRfVFlQRV9TT1VQX0NBQ0hFLCBXZWJLaXRTb3VwQ2FjaGVQcml2YXRlKSkKKworR19ERUZJ
TkVfVFlQRV9XSVRIX0NPREUgKFdlYktpdFNvdXBDYWNoZSwgd2Via2l0X3NvdXBfY2FjaGUsIEdf
VFlQRV9PQkpFQ1QsCisJCQkgR19JTVBMRU1FTlRfSU5URVJGQUNFIChTT1VQX1RZUEVfU0VTU0lP
Tl9GRUFUVVJFLAorCQkJCQkJd2Via2l0X3NvdXBfY2FjaGVfc2Vzc2lvbl9mZWF0dXJlX2luaXQp
KQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfcmVtb3ZlIChXZWJL
aXRTb3VwQ2FjaGUgKmNhY2hlLCBXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkpOworc3RhdGlj
IHZvaWQgbWFrZV9yb29tX2Zvcl9uZXdfZW50cnkgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsIGd1
aW50IGxlbmd0aF90b19hZGQpOworc3RhdGljIGdib29sZWFuIGNhY2hlX2FjY2VwdHNfZW50cmll
c19vZl9zaXplIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLCBndWludCBsZW5ndGhfdG9fYWRkKTsK
Kworc3RhdGljIFdlYktpdFNvdXBDYWNoZWFiaWxpdHkKK2dldF9jYWNoZWFiaWxpdHkgKFdlYktp
dFNvdXBDYWNoZSAqY2FjaGUsIFNvdXBNZXNzYWdlICptc2cpCit7CisJV2ViS2l0U291cENhY2hl
YWJpbGl0eSBjYWNoZWFiaWxpdHk7CisJY29uc3QgY2hhciAqY2FjaGVfY29udHJvbDsKKworCS8q
IDEuIFRoZSByZXF1ZXN0IG1ldGhvZCBtdXN0IGJlIGNhY2hlYWJsZSAqLworCWlmIChtc2ctPm1l
dGhvZCA9PSBTT1VQX01FVEhPRF9HRVQpCisJCWNhY2hlYWJpbGl0eSA9IFdFQktJVF9TT1VQX0NB
Q0hFX0NBQ0hFQUJMRTsKKwllbHNlIGlmIChtc2ctPm1ldGhvZCA9PSBTT1VQX01FVEhPRF9IRUFE
IHx8CisJCSBtc2ctPm1ldGhvZCA9PSBTT1VQX01FVEhPRF9UUkFDRSB8fAorCQkgbXNnLT5tZXRo
b2QgPT0gU09VUF9NRVRIT0RfQ09OTkVDVCkKKwkJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1VO
Q0FDSEVBQkxFOworCWVsc2UKKwkJcmV0dXJuIChXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJM
RSB8IFdFQktJVF9TT1VQX0NBQ0hFX0lOVkFMSURBVEVTKTsKKworCWNhY2hlX2NvbnRyb2wgPSBz
b3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKG1zZy0+cmVzcG9uc2VfaGVhZGVycywgIkNhY2hlLUNv
bnRyb2wiKTsKKwlpZiAoY2FjaGVfY29udHJvbCkgeworCQlHSGFzaFRhYmxlICpoYXNoOworCQlX
ZWJLaXRTb3VwQ2FjaGVQcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfQ0FDSEVfR0VUX1BSSVZB
VEUgKGNhY2hlKTsKKworCQloYXNoID0gc291cF9oZWFkZXJfcGFyc2VfcGFyYW1fbGlzdCAoY2Fj
aGVfY29udHJvbCk7CisKKwkJLyogU2hhcmVkIGNhY2hlcyBNVVNUIE5PVCBzdG9yZSBwcml2YXRl
IHJlc291cmNlcyAqLworCQlpZiAocHJpdi0+Y2FjaGVfdHlwZSA9PSBXRUJLSVRfU09VUF9DQUNI
RV9TSEFSRUQpIHsKKwkJCWlmIChnX2hhc2hfdGFibGVfbG9va3VwX2V4dGVuZGVkIChoYXNoLCAi
cHJpdmF0ZSIsIE5VTEwsIE5VTEwpKSB7CisJCQkJc291cF9oZWFkZXJfZnJlZV9wYXJhbV9saXN0
IChoYXNoKTsKKwkJCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEU7CisJCQl9
CisJCX0KKworCQkvKiAyLiBUaGUgJ25vLXN0b3JlJyBjYWNoZSBkaXJlY3RpdmUgZG9lcyBub3Qg
YXBwZWFyIGluIHRoZQorCQkgKiBoZWFkZXJzCisJCSAqLworCQlpZiAoZ19oYXNoX3RhYmxlX2xv
b2t1cF9leHRlbmRlZCAoaGFzaCwgIm5vLXN0b3JlIiwgTlVMTCwgTlVMTCkpIHsKKwkJCXNvdXBf
aGVhZGVyX2ZyZWVfcGFyYW1fbGlzdCAoaGFzaCk7CisJCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FD
SEVfVU5DQUNIRUFCTEU7CisJCX0KKworCQkvKiBUaGlzIGRvZXMgbm90IGFwcGVhciBpbiBzZWN0
aW9uIDIuMSwgYnV0IEkgdGhpbmsgaXQgbWFrZXMKKwkJICogc2Vuc2UgdG8gY2hlY2sgaXQgdG9v
PworCQkgKi8KKwkJaWYgKGdfaGFzaF90YWJsZV9sb29rdXBfZXh0ZW5kZWQgKGhhc2gsICJuby1j
YWNoZSIsIE5VTEwsIE5VTEwpKSB7CisJCQlzb3VwX2hlYWRlcl9mcmVlX3BhcmFtX2xpc3QgKGhh
c2gpOworCQkJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFOworCQl9CisJfQor
CisJc3dpdGNoIChtc2ctPnN0YXR1c19jb2RlKSB7CisJCWNhc2UgU09VUF9TVEFUVVNfUEFSVElB
TF9DT05URU5UOgorCQkJLyogV2UgZG9uJ3QgY2FjaGUgcGFydGlhbCByZXNwb25zZXMsIGJ1dCB0
aGV5IG9ubHkKKwkJCSAqIGludmFsaWRhdGUgY2FjaGVkIGZ1bGwgcmVzcG9uc2VzIGlmIHRoZSBo
ZWFkZXJzCisJCQkgKiBkb24ndCBtYXRjaC4KKwkJCSAqLworCQkJY2FjaGVhYmlsaXR5ID0gV0VC
S0lUX1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEU7CisJCQlicmVhazsKKworCQljYXNlIFNPVVBfU1RB
VFVTX05PVF9NT0RJRklFRDoKKwkJCS8qIEEgMzA0IHJlc3BvbnNlIHZhbGlkYXRlcyBhbiBleGlz
dGluZyBjYWNoZSBlbnRyeSAqLworCQkJY2FjaGVhYmlsaXR5ID0gV0VCS0lUX1NPVVBfQ0FDSEVf
VkFMSURBVEVTOworCQkJYnJlYWs7CisKKwkJY2FzZSBTT1VQX1NUQVRVU19NVUxUSVBMRV9DSE9J
Q0VTOgorCQljYXNlIFNPVVBfU1RBVFVTX01PVkVEX1BFUk1BTkVOVExZOgorCQljYXNlIFNPVVBf
U1RBVFVTX0dPTkU6CisJCQkvKiBGSVhNRTogY2FjaGVhYmxlIHVubGVzcyBpbmRpY2F0ZWQgb3Ro
ZXJ3aXNlICovCisJCQljYWNoZWFiaWxpdHkgPSBXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJM
RTsKKwkJCWJyZWFrOworCisJCWNhc2UgU09VUF9TVEFUVVNfRk9VTkQ6CisJCWNhc2UgU09VUF9T
VEFUVVNfVEVNUE9SQVJZX1JFRElSRUNUOgorCQkJLyogRklYTUU6IGNhY2hlYWJsZSBpZiBleHBs
aWNpdGx5IGluZGljYXRlZCAqLworCQkJY2FjaGVhYmlsaXR5ID0gV0VCS0lUX1NPVVBfQ0FDSEVf
VU5DQUNIRUFCTEU7CisJCQlicmVhazsKKworCQljYXNlIFNPVVBfU1RBVFVTX1NFRV9PVEhFUjoK
KwkJY2FzZSBTT1VQX1NUQVRVU19GT1JCSURERU46CisJCWNhc2UgU09VUF9TVEFUVVNfTk9UX0ZP
VU5EOgorCQljYXNlIFNPVVBfU1RBVFVTX01FVEhPRF9OT1RfQUxMT1dFRDoKKwkJCXJldHVybiAo
V0VCS0lUX1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEUgfCBXRUJLSVRfU09VUF9DQUNIRV9JTlZBTElE
QVRFUyk7CisKKwkJZGVmYXVsdDoKKwkJCS8qIEFueSA1eHggc3RhdHVzIG9yIGFueSA0eHggc3Rh
dHVzIG5vdCBoYW5kbGVkIGFib3ZlCisJCQkgKiBpcyB1bmNhY2hlYWJsZSBidXQgZG9lc24ndCBi
cmVhayB0aGUgY2FjaGUuCisJCQkgKi8KKwkJCWlmICgobXNnLT5zdGF0dXNfY29kZSA+PSBTT1VQ
X1NUQVRVU19CQURfUkVRVUVTVCAmJgorCQkJICAgICBtc2ctPnN0YXR1c19jb2RlIDw9IFNPVVBf
U1RBVFVTX0ZBSUxFRF9ERVBFTkRFTkNZKSB8fAorCQkJICAgIG1zZy0+c3RhdHVzX2NvZGUgPj0g
U09VUF9TVEFUVVNfSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCXJldHVybiBXRUJLSVRfU09V
UF9DQUNIRV9VTkNBQ0hFQUJMRTsKKworCQkJLyogQW4gdW5yZWNvZ25pemVkIDJ4eCwgM3h4LCBv
ciA0eHggcmVzcG9uc2UgYnJlYWtzCisJCQkgKiB0aGUgY2FjaGUuCisJCQkgKi8KKwkJCWlmICgo
bXNnLT5zdGF0dXNfY29kZSA+IFNPVVBfU1RBVFVTX1BBUlRJQUxfQ09OVEVOVCAmJgorCQkJICAg
ICBtc2ctPnN0YXR1c19jb2RlIDwgU09VUF9TVEFUVVNfTVVMVElQTEVfQ0hPSUNFUykgfHwKKwkJ
CSAgICAobXNnLT5zdGF0dXNfY29kZSA+IFNPVVBfU1RBVFVTX1RFTVBPUkFSWV9SRURJUkVDVCAm
JgorCQkJICAgICBtc2ctPnN0YXR1c19jb2RlIDwgU09VUF9TVEFUVVNfSU5URVJOQUxfU0VSVkVS
X0VSUk9SKSkKKwkJCQlyZXR1cm4gKFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFIHwgV0VC
S0lUX1NPVVBfQ0FDSEVfSU5WQUxJREFURVMpOworCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGNh
Y2hlYWJpbGl0eTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2Zy
ZWUgKFdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSwgZ2Jvb2xlYW4gcHVyZ2UpCit7CisJaWYg
KHB1cmdlKSB7CisJCUdGaWxlICpmaWxlID0gZ19maWxlX25ld19mb3JfcGF0aCAoZW50cnktPmZp
bGVuYW1lKTsKKwkJZ19maWxlX2RlbGV0ZSAoZmlsZSwgTlVMTCwgTlVMTCk7CisJCWdfb2JqZWN0
X3VucmVmIChmaWxlKTsKKwl9CisKKwlnX2ZyZWUgKGVudHJ5LT5maWxlbmFtZSk7CisJZW50cnkt
PmZpbGVuYW1lID0gTlVMTDsKKwlnX2ZyZWUgKGVudHJ5LT5rZXkpOworCWVudHJ5LT5rZXkgPSBO
VUxMOworCisJaWYgKGVudHJ5LT5oZWFkZXJzKSB7CisJCXNvdXBfbWVzc2FnZV9oZWFkZXJzX2Zy
ZWUgKGVudHJ5LT5oZWFkZXJzKTsKKwkJZW50cnktPmhlYWRlcnMgPSBOVUxMOworCX0KKworCWlm
IChlbnRyeS0+ZGF0YSkgeworCQlnX3N0cmluZ19mcmVlIChlbnRyeS0+ZGF0YSwgVFJVRSk7CisJ
CWVudHJ5LT5kYXRhID0gTlVMTDsKKwl9CisJaWYgKGVudHJ5LT5lcnJvcikgeworCQlnX2Vycm9y
X2ZyZWUgKGVudHJ5LT5lcnJvcik7CisJCWVudHJ5LT5lcnJvciA9IE5VTEw7CisJfQorCWlmIChl
bnRyeS0+Y2FuY2VsbGFibGUpIHsKKwkJZ19vYmplY3RfdW5yZWYgKGVudHJ5LT5jYW5jZWxsYWJs
ZSk7CisJCWVudHJ5LT5jYW5jZWxsYWJsZSA9IE5VTEw7CisJfQorCisJZ19zbGljZV9mcmVlIChX
ZWJLaXRTb3VwQ2FjaGVFbnRyeSwgZW50cnkpOworfQorCitzdGF0aWMgdm9pZAorY29weV9oZWFk
ZXJzIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSwgU291cE1lc3NhZ2VIZWFk
ZXJzICpoZWFkZXJzKQoreworCXNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZCAoaGVhZGVycywg
bmFtZSwgdmFsdWUpOworfQorCitzdGF0aWMgdm9pZAordXBkYXRlX2hlYWRlcnMgKGNvbnN0IGNo
YXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlLCBTb3VwTWVzc2FnZUhlYWRlcnMgKmhlYWRlcnMp
Cit7CisJaWYgKHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldCAoaGVhZGVycywgbmFtZSkpCisJCXNv
dXBfbWVzc2FnZV9oZWFkZXJzX3JlcGxhY2UgKGhlYWRlcnMsIG5hbWUsIHZhbHVlKTsKKwllbHNl
CisJCXNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZCAoaGVhZGVycywgbmFtZSwgdmFsdWUpOwor
fQorCitzdGF0aWMgZ3VpbnQKK3dlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2dldF9jdXJyZW50X2Fn
ZSAoV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5KQoreworCXRpbWVfdCBub3cgPSB0aW1lIChO
VUxMKTsKKwl0aW1lX3QgcmVzaWRlbnRfdGltZTsKKworCXJlc2lkZW50X3RpbWUgPSBub3cgLSBl
bnRyeS0+cmVzcG9uc2VfdGltZTsKKwlyZXR1cm4gZW50cnktPmNvcnJlY3RlZF9pbml0aWFsX2Fn
ZSArIHJlc2lkZW50X3RpbWU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgord2Via2l0X3NvdXBfY2Fj
aGVfZW50cnlfaXNfZnJlc2hfZW5vdWdoIChXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnksIGlu
dCBtaW5fZnJlc2gpCit7CisJdW5zaWduZWQgbGltaXQgPSAobWluX2ZyZXNoID09IC0xKSA/IHdl
YmtpdF9zb3VwX2NhY2hlX2VudHJ5X2dldF9jdXJyZW50X2FnZSAoZW50cnkpIDogbWluX2ZyZXNo
OworCXJldHVybiBlbnRyeS0+ZnJlc2huZXNzX2xpZmV0aW1lID4gbGltaXQ7Cit9CisKK3N0YXRp
YyBjaGFyICoKK3NvdXBfbWVzc2FnZV9nZXRfY2FjaGVfa2V5IChTb3VwTWVzc2FnZSAqbXNnKQor
eworCVNvdXBVUkkgKnVyaSA9IHNvdXBfbWVzc2FnZV9nZXRfdXJpIChtc2cpOworCXJldHVybiBz
b3VwX3VyaV90b19zdHJpbmcgKHVyaSwgRkFMU0UpOworfQorCitzdGF0aWMgdm9pZAord2Via2l0
X3NvdXBfY2FjaGVfZW50cnlfc2V0X2ZyZXNobmVzcyAoV2ViS2l0U291cENhY2hlRW50cnkgKmVu
dHJ5LCBTb3VwTWVzc2FnZSAqbXNnLCBXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKQoreworCWNvbnN0
IGNoYXIgKmNhY2hlX2NvbnRyb2w7CisJY29uc3QgY2hhciAqZXhwaXJlcywgKmRhdGUsICpsYXN0
X21vZGlmaWVkOworCUdIYXNoVGFibGUgKmhhc2g7CisKKwloYXNoID0gTlVMTDsKKworCWNhY2hl
X2NvbnRyb2wgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKGVudHJ5LT5oZWFkZXJzLCAiQ2Fj
aGUtQ29udHJvbCIpOworCWlmIChjYWNoZV9jb250cm9sKSB7CisJCWNvbnN0IGNoYXIgKm1heF9h
Z2UsICpzX21heGFnZTsKKwkJZ2ludDY0IGZyZXNobmVzc19saWZldGltZSA9IDA7CisJCVdlYktp
dFNvdXBDYWNoZVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9DQUNIRV9HRVRfUFJJVkFURSAo
Y2FjaGUpOworCisJCWhhc2ggPSBzb3VwX2hlYWRlcl9wYXJzZV9wYXJhbV9saXN0IChjYWNoZV9j
b250cm9sKTsKKworCQkvKiBTaG91bGQgd2UgcmUtdmFsaWRhdGUgdGhlIGVudHJ5IHdoZW4gaXQg
Z29lcyBzdGFsZSAqLworCQllbnRyeS0+bXVzdF9yZXZhbGlkYXRlID0gKGdib29sZWFuKWdfaGFz
aF90YWJsZV9sb29rdXAgKGhhc2gsICJtdXN0LXJldmFsaWRhdGUiKTsKKworCQkvKiBTZWN0aW9u
IDIuMy4xICovCisJCWlmIChwcml2LT5jYWNoZV90eXBlID09IFdFQktJVF9TT1VQX0NBQ0hFX1NI
QVJFRCkgeworCQkJc19tYXhhZ2UgPSBnX2hhc2hfdGFibGVfbG9va3VwIChoYXNoLCAicy1tYXhh
Z2UiKTsKKwkJCWlmIChzX21heGFnZSkgeworCQkJCWZyZXNobmVzc19saWZldGltZSA9IGdfYXNj
aWlfc3RydG9sbCAoc19tYXhhZ2UsIE5VTEwsIDEwKTsKKwkJCQlpZiAoZnJlc2huZXNzX2xpZmV0
aW1lKSB7CisJCQkJCS8qIEltcGxpZXMgcHJveHktcmV2YWxpZGF0ZS4gVE9ETzogaXMgaXQgdHJ1
ZT8gKi8KKwkJCQkJZW50cnktPm11c3RfcmV2YWxpZGF0ZSA9IFRSVUU7CisJCQkJCXNvdXBfaGVh
ZGVyX2ZyZWVfcGFyYW1fbGlzdCAoaGFzaCk7CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQl9CisJ
CX0KKworCQkvKiBJZiAnbWF4LWFnZScgY2FjaGUgZGlyZWN0aXZlIGlzIHByZXNlbnQsIHVzZSB0
aGF0ICovCisJCW1heF9hZ2UgPSBnX2hhc2hfdGFibGVfbG9va3VwIChoYXNoLCAibWF4LWFnZSIp
OworCQlpZiAobWF4X2FnZSkKKwkJCWZyZXNobmVzc19saWZldGltZSA9IGdfYXNjaWlfc3RydG9s
bCAobWF4X2FnZSwgTlVMTCwgMTApOworCisJCWlmIChmcmVzaG5lc3NfbGlmZXRpbWUpIHsKKwkJ
CWVudHJ5LT5mcmVzaG5lc3NfbGlmZXRpbWUgPSAoZ3VpbnQpTUlOIChmcmVzaG5lc3NfbGlmZXRp
bWUsIEdfTUFYVUlOVDMyKTsKKwkJCXNvdXBfaGVhZGVyX2ZyZWVfcGFyYW1fbGlzdCAoaGFzaCk7
CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlpZiAoaGFzaCAhPSBOVUxMKQorCQlzb3VwX2hlYWRl
cl9mcmVlX3BhcmFtX2xpc3QgKGhhc2gpOworCisJLyogSWYgdGhlICdFeHBpcmVzJyByZXNwb25z
ZSBoZWFkZXIgaXMgcHJlc2VudCwgdXNlIGl0cyB2YWx1ZQorCSAqIG1pbnVzIHRoZSB2YWx1ZSBv
ZiB0aGUgJ0RhdGUnIHJlc3BvbnNlIGhlYWRlcgorCSAqLworCWV4cGlyZXMgPSBzb3VwX21lc3Nh
Z2VfaGVhZGVyc19nZXQgKGVudHJ5LT5oZWFkZXJzLCAiRXhwaXJlcyIpOworCWRhdGUgPSBzb3Vw
X21lc3NhZ2VfaGVhZGVyc19nZXQgKGVudHJ5LT5oZWFkZXJzLCAiRGF0ZSIpOworCWlmIChleHBp
cmVzICYmIGRhdGUpIHsKKwkJU291cERhdGUgKmV4cGlyZXNfZCwgKmRhdGVfZDsKKwkJdGltZV90
IGV4cGlyZXNfdCwgZGF0ZV90OworCisJCWV4cGlyZXNfZCA9IHNvdXBfZGF0ZV9uZXdfZnJvbV9z
dHJpbmcgKGV4cGlyZXMpOworCQlpZiAoZXhwaXJlc19kKSB7CisJCQlkYXRlX2QgPSBzb3VwX2Rh
dGVfbmV3X2Zyb21fc3RyaW5nIChkYXRlKTsKKworCQkJZXhwaXJlc190ID0gc291cF9kYXRlX3Rv
X3RpbWVfdCAoZXhwaXJlc19kKTsKKwkJCWRhdGVfdCA9IHNvdXBfZGF0ZV90b190aW1lX3QgKGRh
dGVfZCk7CisKKwkJCXNvdXBfZGF0ZV9mcmVlIChleHBpcmVzX2QpOworCQkJc291cF9kYXRlX2Zy
ZWUgKGRhdGVfZCk7CisKKwkJCWlmIChleHBpcmVzX3QgJiYgZGF0ZV90KSB7CisJCQkJZW50cnkt
PmZyZXNobmVzc19saWZldGltZSA9IChndWludClNQVggKGV4cGlyZXNfdCAtIGRhdGVfdCwgMCk7
CisJCQkJcmV0dXJuOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogSWYgRXhwaXJlcyBpcyBub3Qg
YSB2YWxpZCBkYXRlIHdlIHNob3VsZAorCQkJICAgdHJlYXQgaXQgYXMgYWxyZWFkeSBleHBpcmVk
LCBzZWUgc2VjdGlvbgorCQkJICAgMy4zICovCisJCQllbnRyeS0+ZnJlc2huZXNzX2xpZmV0aW1l
ID0gMDsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qIE90aGVyd2lzZSBhbiBoZXVyaXN0aWMg
bWF5IGJlIHVzZWQgKi8KKworCS8qIEhldXJpc3RpY3MgTVVTVCBOT1QgYmUgdXNlZCB3aXRoIHRo
ZXNlIHN0YXR1cyBjb2RlcworCSAgIChzZWN0aW9uIDIuMy4xLjEpICovCisJaWYgKG1zZy0+c3Rh
dHVzX2NvZGUgIT0gU09VUF9TVEFUVVNfT0sgJiYKKwkgICAgbXNnLT5zdGF0dXNfY29kZSAhPSBT
T1VQX1NUQVRVU19OT05fQVVUSE9SSVRBVElWRSAmJgorCSAgICBtc2ctPnN0YXR1c19jb2RlICE9
IFNPVVBfU1RBVFVTX1BBUlRJQUxfQ09OVEVOVCAmJgorCSAgICBtc2ctPnN0YXR1c19jb2RlICE9
IFNPVVBfU1RBVFVTX01VTFRJUExFX0NIT0lDRVMgJiYKKwkgICAgbXNnLT5zdGF0dXNfY29kZSAh
PSBTT1VQX1NUQVRVU19NT1ZFRF9QRVJNQU5FTlRMWSAmJgorCSAgICBtc2ctPnN0YXR1c19jb2Rl
ICE9IFNPVVBfU1RBVFVTX0dPTkUpCisJCWdvdG8gZXhwaXJlOworCisJLyogVE9ETzogYXR0YWNo
IHdhcm5pbmcgMTEzIGlmIHJlc3BvbnNlJ3MgY3VycmVudF9hZ2UgaXMgbW9yZQorCSAgIHRoYW4g
MjRoIChzZWN0aW9uIDIuMy4xLjEpIHdoZW4gdXNpbmcgaGV1cmlzdGljcyAqLworCisJLyogTGFz
dC1Nb2RpZmllZCBiYXNlZCBoZXVyaXN0aWMgKi8KKwlsYXN0X21vZGlmaWVkID0gc291cF9tZXNz
YWdlX2hlYWRlcnNfZ2V0IChlbnRyeS0+aGVhZGVycywgIkxhc3QtTW9kaWZpZWQiKTsKKwlpZiAo
bGFzdF9tb2RpZmllZCkgeworCQlTb3VwRGF0ZSAqc291cF9kYXRlOworCQl0aW1lX3Qgbm93LCBs
YXN0X21vZGlmaWVkX3Q7CisKKwkJc291cF9kYXRlID0gc291cF9kYXRlX25ld19mcm9tX3N0cmlu
ZyAobGFzdF9tb2RpZmllZCk7CisJCWxhc3RfbW9kaWZpZWRfdCA9IHNvdXBfZGF0ZV90b190aW1l
X3QgKHNvdXBfZGF0ZSk7CisJCW5vdyA9IHRpbWUgKE5VTEwpOworCisjZGVmaW5lIEhFVVJJU1RJ
Q19GQUNUT1IgMC4xIC8qIEZyb20gU2VjdGlvbiAyLjMuMS4xICovCisKKwkJZW50cnktPmZyZXNo
bmVzc19saWZldGltZSA9IE1BWCAoMCwgKG5vdyAtIGxhc3RfbW9kaWZpZWRfdCkgKiBIRVVSSVNU
SUNfRkFDVE9SKTsKKwkJc291cF9kYXRlX2ZyZWUgKHNvdXBfZGF0ZSk7CisJfQorCisJcmV0dXJu
OworCisgZXhwaXJlOgorCS8qIElmIGFsbCBlbHNlIGZhaWxzLCBtYWtlIHRoZSBlbnRyeSBleHBp
cmUgaW1tZWRpYXRlbHkgKi8KKwllbnRyeS0+ZnJlc2huZXNzX2xpZmV0aW1lID0gMDsKK30KKwor
c3RhdGljIFdlYktpdFNvdXBDYWNoZUVudHJ5ICoKK3dlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X25l
dyAoV2ViS2l0U291cENhY2hlICpjYWNoZSwgU291cE1lc3NhZ2UgKm1zZywgdGltZV90IHJlcXVl
c3RfdGltZSwgdGltZV90IHJlc3BvbnNlX3RpbWUpCit7CisJV2ViS2l0U291cENhY2hlRW50cnkg
KmVudHJ5OworCVNvdXBNZXNzYWdlSGVhZGVycyAqaGVhZGVyczsKKwljb25zdCBjaGFyICpkYXRl
OworCWNoYXIgKm1kNTsKKworCWVudHJ5ID0gZ19zbGljZV9uZXcwIChXZWJLaXRTb3VwQ2FjaGVF
bnRyeSk7CisJZW50cnktPmRpcnR5ID0gRkFMU0U7CisJZW50cnktPndyaXRpbmcgPSBGQUxTRTsK
KwllbnRyeS0+Z290X2JvZHkgPSBGQUxTRTsKKwllbnRyeS0+YmVpbmdfdmFsaWRhdGVkID0gRkFM
U0U7CisJZW50cnktPmRhdGEgPSBnX3N0cmluZ19uZXcgKE5VTEwpOworCWVudHJ5LT5wb3MgPSAw
OworCWVudHJ5LT5lcnJvciA9IE5VTEw7CisKKwkvKiBrZXkgJiBmaWxlbmFtZSAqLworCWVudHJ5
LT5rZXkgPSBzb3VwX21lc3NhZ2VfZ2V0X2NhY2hlX2tleSAobXNnKTsKKwltZDUgPSBnX2NvbXB1
dGVfY2hlY2tzdW1fZm9yX3N0cmluZyAoR19DSEVDS1NVTV9NRDUsIGVudHJ5LT5rZXksIC0xKTsK
KwllbnRyeS0+ZmlsZW5hbWUgPSBnX2J1aWxkX2ZpbGVuYW1lIChjYWNoZS0+cHJpdi0+Y2FjaGVf
ZGlyLCBtZDUsIE5VTEwpOworCWdfZnJlZSAobWQ1KTsKKworCS8qIEhlYWRlcnMgKi8KKwloZWFk
ZXJzID0gc291cF9tZXNzYWdlX2hlYWRlcnNfbmV3IChTT1VQX01FU1NBR0VfSEVBREVSU19SRVNQ
T05TRSk7CisJc291cF9tZXNzYWdlX2hlYWRlcnNfZm9yZWFjaCAobXNnLT5yZXNwb25zZV9oZWFk
ZXJzLAorCQkJCSAgICAgIChTb3VwTWVzc2FnZUhlYWRlcnNGb3JlYWNoRnVuYyljb3B5X2hlYWRl
cnMsCisJCQkJICAgICAgaGVhZGVycyk7CisJZW50cnktPmhlYWRlcnMgPSBoZWFkZXJzOworCisJ
LyogTFJVIGxpc3QgKi8KKwllbnRyeS0+aGl0cyA9IDA7CisKKwkvKiBTZWN0aW9uIDIuMy4xLCBG
cmVzaG5lc3MgTGlmZXRpbWUgKi8KKwl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9zZXRfZnJlc2hu
ZXNzIChlbnRyeSwgbXNnLCBjYWNoZSk7CisKKwkvKiBTZWN0aW9uIDIuMy4yLCBDYWxjdWxhdGlu
ZyBBZ2UgKi8KKwlkYXRlID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0IChlbnRyeS0+aGVhZGVy
cywgIkRhdGUiKTsKKworCWlmIChkYXRlKSB7CisJCVNvdXBEYXRlICpzb3VwX2RhdGU7CisJCWNv
bnN0IGNoYXIgKmFnZTsKKwkJdGltZV90IGRhdGVfdmFsdWUsIGFwcGFyZW50X2FnZSwgY29ycmVj
dGVkX3JlY2VpdmVkX2FnZSwgcmVzcG9uc2VfZGVsYXksIGFnZV92YWx1ZSA9IDA7CisKKwkJc291
cF9kYXRlID0gc291cF9kYXRlX25ld19mcm9tX3N0cmluZyAoZGF0ZSk7CisJCWRhdGVfdmFsdWUg
PSBzb3VwX2RhdGVfdG9fdGltZV90IChzb3VwX2RhdGUpOworCQlzb3VwX2RhdGVfZnJlZSAoc291
cF9kYXRlKTsKKworCQlhZ2UgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKGVudHJ5LT5oZWFk
ZXJzLCAiQWdlIik7CisJCWlmIChhZ2UpCisJCQlhZ2VfdmFsdWUgPSBnX2FzY2lpX3N0cnRvbGwg
KGFnZSwgTlVMTCwgMTApOworCisJCWVudHJ5LT5yZXNwb25zZV90aW1lID0gcmVzcG9uc2VfdGlt
ZTsKKwkJYXBwYXJlbnRfYWdlID0gTUFYICgwLCBlbnRyeS0+cmVzcG9uc2VfdGltZSAtIGRhdGVf
dmFsdWUpOworCQljb3JyZWN0ZWRfcmVjZWl2ZWRfYWdlID0gTUFYIChhcHBhcmVudF9hZ2UsIGFn
ZV92YWx1ZSk7CisJCXJlc3BvbnNlX2RlbGF5ID0gZW50cnktPnJlc3BvbnNlX3RpbWUgLSByZXF1
ZXN0X3RpbWU7CisJCWVudHJ5LT5jb3JyZWN0ZWRfaW5pdGlhbF9hZ2UgPSBjb3JyZWN0ZWRfcmVj
ZWl2ZWRfYWdlICsgcmVzcG9uc2VfZGVsYXk7CisJfSBlbHNlIHsKKwkJLyogSXMgdGhpcyBjb3Jy
ZWN0ID8gKi8KKwkJZW50cnktPmNvcnJlY3RlZF9pbml0aWFsX2FnZSA9IHRpbWUgKE5VTEwpOwor
CX0KKworCXJldHVybiBlbnRyeTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX2NhY2hl
X3dyaXRpbmdfZml4dHVyZV9mcmVlIChXZWJLaXRTb3VwQ2FjaGVXcml0aW5nRml4dHVyZSAqZml4
dHVyZSkKK3sKKwkvKiBGcmVlIGZpeHR1cmUuIEFuZCBkaXNjb25uZWN0IHNpZ25hbHMsIHdlIGRv
bid0IHdhbnQgdG8KKwkgICBsaXN0ZW4gdG8gbW9yZSBTb3VwTWVzc2FnZSBldmVudHMgYXMgd2Un
cmUgZmluaXNoZWQgd2l0aAorCSAgIHRoaXMgcmVzb3VyY2UgKi8KKwlpZiAoZ19zaWduYWxfaGFu
ZGxlcl9pc19jb25uZWN0ZWQgKGZpeHR1cmUtPm1zZywgZml4dHVyZS0+Z290X2NodW5rX2hhbmRs
ZXIpKQorCQlnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QgKGZpeHR1cmUtPm1zZywgZml4dHVy
ZS0+Z290X2NodW5rX2hhbmRsZXIpOworCWlmIChnX3NpZ25hbF9oYW5kbGVyX2lzX2Nvbm5lY3Rl
ZCAoZml4dHVyZS0+bXNnLCBmaXh0dXJlLT5nb3RfYm9keV9oYW5kbGVyKSkKKwkJZ19zaWduYWxf
aGFuZGxlcl9kaXNjb25uZWN0IChmaXh0dXJlLT5tc2csIGZpeHR1cmUtPmdvdF9ib2R5X2hhbmRs
ZXIpOworCWlmIChnX3NpZ25hbF9oYW5kbGVyX2lzX2Nvbm5lY3RlZCAoZml4dHVyZS0+bXNnLCBm
aXh0dXJlLT5yZXN0YXJ0ZWRfaGFuZGxlcikpCisJCWdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVj
dCAoZml4dHVyZS0+bXNnLCBmaXh0dXJlLT5yZXN0YXJ0ZWRfaGFuZGxlcik7CisJZ19vYmplY3Rf
dW5yZWYgKGZpeHR1cmUtPm1zZyk7CisJZ19vYmplY3RfdW5yZWYgKGZpeHR1cmUtPmNhY2hlKTsK
KwlnX3NsaWNlX2ZyZWUgKFdlYktpdFNvdXBDYWNoZVdyaXRpbmdGaXh0dXJlLCBmaXh0dXJlKTsK
K30KKworc3RhdGljIHZvaWQKK2Nsb3NlX3JlYWR5X2NiIChHT2JqZWN0ICpzb3VyY2UsIEdBc3lu
Y1Jlc3VsdCAqcmVzdWx0LCBXZWJLaXRTb3VwQ2FjaGVXcml0aW5nRml4dHVyZSAqZml4dHVyZSkK
K3sKKwlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkgPSBmaXh0dXJlLT5lbnRyeTsKKwlXZWJL
aXRTb3VwQ2FjaGUgKmNhY2hlID0gZml4dHVyZS0+Y2FjaGU7CisJR091dHB1dFN0cmVhbSAqc3Ry
ZWFtID0gR19PVVRQVVRfU1RSRUFNIChzb3VyY2UpOworCWdvZmZzZXQgY29udGVudF9sZW5ndGg7
CisKKwlnX3dhcm5faWZfZmFpbCAoZW50cnktPmVycm9yID09IE5VTEwpOworCisJLyogRklYTUU6
IHdoYXQgZG8gd2UgZG8gb24gZXJyb3IgPyAqLworCisJaWYgKHN0cmVhbSkgeworCQlnX291dHB1
dF9zdHJlYW1fY2xvc2VfZmluaXNoIChzdHJlYW0sIHJlc3VsdCwgTlVMTCk7CisJCWdfb2JqZWN0
X3VucmVmIChzdHJlYW0pOworCX0KKwllbnRyeS0+c3RyZWFtID0gTlVMTDsKKworCWNvbnRlbnRf
bGVuZ3RoID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2NvbnRlbnRfbGVuZ3RoIChlbnRyeS0+
aGVhZGVycyk7CisKKwkvKiBJZiB0aGUgcHJvY2VzcyB3YXMgY2FuY2VsbGVkLCB0aGVuIGRlbGV0
ZSB0aGUgZW50cnkgZnJvbQorCSAgIHRoZSBjYWNoZS4gRG8gaXQgYWxzbyBpZiB0aGUgc2l6ZSBv
ZiBhIGNodW5rZWQgcmVzb3VyY2UgaXMKKwkgICB0b28gbXVjaCBmb3IgdGhlIGNhY2hlICovCisJ
aWYgKGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkIChlbnRyeS0+Y2FuY2VsbGFibGUpKSB7CisJ
CWVudHJ5LT5kaXJ0eSA9IEZBTFNFOworCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9yZW1vdmUg
KGNhY2hlLCBlbnRyeSk7CisJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUgKGVudHJ5LCBU
UlVFKTsKKwkJZW50cnkgPSBOVUxMOworCX0gZWxzZSBpZiAoKHNvdXBfbWVzc2FnZV9oZWFkZXJz
X2dldF9lbmNvZGluZyAoZW50cnktPmhlYWRlcnMpID09IFNPVVBfRU5DT0RJTkdfQ0hVTktFRCkg
fHwKKwkJICAgZW50cnktPmxlbmd0aCAhPSBjb250ZW50X2xlbmd0aCkgeworCQkvKiogVHdvIG9w
dGlvbnMgaGVyZToKKwkJICoKKwkJICogMS4gImNodW5rZWQiIGRhdGEsIGVudHJ5IHdhcyB0ZW1w
b3JhcmlseSBhZGRlZCB0bworCQkgKiBjYWNoZSAoYXMgY29udGVudC1sZW5ndGggaXMgMCkgYW5k
IG5vdyB0aGF0IHdlIGhhdmUKKwkJICogdGhlIGFjdHVhbCBzaXplIHdlIGhhdmUgdG8gZXZhbHVh
dGUgaWYgd2Ugd2FudCBpdAorCQkgKiBpbiB0aGUgY2FjaGUgb3Igbm90CisJCSAqCisJCSAqIDIu
IENvbnRlbnQtTGVuZ3RoIGhhcyBhIGRpZmZlcmVudCB2YWx1ZSB0aGFuIGFjdHVhbAorCQkgKiBs
ZW5ndGgsIG1lYW5zIHRoYXQgdGhlIGNvbnRlbnQgd2FzIGVuY29kZWQgZm9yCisJCSAqIHRyYW5z
bWlzc2lvbiAodHlwaWNhbGx5IGNvbXByZXNzZWQpIGFuZCB0aHVzIHdlCisJCSAqIGhhdmUgdG8g
c3Vic3RyYWN0IHRoZSBjb250ZW50LWxlbmd0aCB2YWx1ZSB0aGF0IHdhcworCQkgKiBhZGRlZCB0
byB0aGUgY2FjaGUgYW5kIGFkZCB0aGUgdW5lbmNvZGVkIGxlbmd0aAorCQkgKiovCisJCWdpbnQg
bGVuZ3RoX3RvX2FkZCA9IGVudHJ5LT5sZW5ndGggLSBjb250ZW50X2xlbmd0aDsKKworCQkvKiBN
YWtlIHJvb20gaW4gY2FjaGUgaWYgbmVlZGVkICovCisJCWlmIChjYWNoZV9hY2NlcHRzX2VudHJp
ZXNfb2Zfc2l6ZSAoY2FjaGUsIGxlbmd0aF90b19hZGQpKSB7CisJCQltYWtlX3Jvb21fZm9yX25l
d19lbnRyeSAoY2FjaGUsIGxlbmd0aF90b19hZGQpOworCisJCQljYWNoZS0+cHJpdi0+c2l6ZSAr
PSBsZW5ndGhfdG9fYWRkOworCQl9IGVsc2UgeworCQkJZW50cnktPmRpcnR5ID0gRkFMU0U7CisJ
CQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9yZW1vdmUgKGNhY2hlLCBlbnRyeSk7CisJCQl3ZWJr
aXRfc291cF9jYWNoZV9lbnRyeV9mcmVlIChlbnRyeSwgVFJVRSk7CisJCQllbnRyeSA9IE5VTEw7
CisJCX0KKwl9CisKKwlpZiAoZW50cnkpIHsKKwkJLyogR2V0IHJpZCBvZiB0aGUgR1N0cmluZyBp
biBtZW1vcnkgZm9yIHRoZSByZXNvdXJjZSBub3cgKi8KKwkJaWYgKGVudHJ5LT5kYXRhKSB7CisJ
CQlnX3N0cmluZ19mcmVlIChlbnRyeS0+ZGF0YSwgVFJVRSk7CisJCQllbnRyeS0+ZGF0YSA9IE5V
TEw7CisJCX0KKworCQllbnRyeS0+ZGlydHkgPSBGQUxTRTsKKwkJZW50cnktPndyaXRpbmcgPSBG
QUxTRTsKKwkJZW50cnktPmdvdF9ib2R5ID0gRkFMU0U7CisJCWVudHJ5LT5wb3MgPSAwOworCisJ
CWdfb2JqZWN0X3VucmVmIChlbnRyeS0+Y2FuY2VsbGFibGUpOworCQllbnRyeS0+Y2FuY2VsbGFi
bGUgPSBOVUxMOworCX0KKworCWNhY2hlLT5wcml2LT5uX3BlbmRpbmctLTsKKworCS8qIEZyZWVz
ICovCisJd2Via2l0X3NvdXBfY2FjaGVfd3JpdGluZ19maXh0dXJlX2ZyZWUgKGZpeHR1cmUpOwor
fQorCitzdGF0aWMgdm9pZAord3JpdGVfcmVhZHlfY2IgKEdPYmplY3QgKnNvdXJjZSwgR0FzeW5j
UmVzdWx0ICpyZXN1bHQsIFdlYktpdFNvdXBDYWNoZVdyaXRpbmdGaXh0dXJlICpmaXh0dXJlKQor
eworCUdPdXRwdXRTdHJlYW0gKnN0cmVhbSA9IEdfT1VUUFVUX1NUUkVBTSAoc291cmNlKTsKKwlH
RXJyb3IgKmVycm9yID0gTlVMTDsKKwlnc3NpemUgd3JpdGVfc2l6ZTsKKwlXZWJLaXRTb3VwQ2Fj
aGVFbnRyeSAqZW50cnkgPSBmaXh0dXJlLT5lbnRyeTsKKworCWlmIChnX2NhbmNlbGxhYmxlX2lz
X2NhbmNlbGxlZCAoZW50cnktPmNhbmNlbGxhYmxlKSkgeworCQlnX291dHB1dF9zdHJlYW1fY2xv
c2VfYXN5bmMgKHN0cmVhbSwKKwkJCQkJICAgICBHX1BSSU9SSVRZX0xPVywKKwkJCQkJICAgICBl
bnRyeS0+Y2FuY2VsbGFibGUsCisJCQkJCSAgICAgKEdBc3luY1JlYWR5Q2FsbGJhY2spY2xvc2Vf
cmVhZHlfY2IsCisJCQkJCSAgICAgZml4dHVyZSk7CisJCXJldHVybjsKKwl9CisKKwl3cml0ZV9z
aXplID0gZ19vdXRwdXRfc3RyZWFtX3dyaXRlX2ZpbmlzaCAoc3RyZWFtLCByZXN1bHQsICZlcnJv
cik7CisJaWYgKHdyaXRlX3NpemUgPD0gMCB8fCBlcnJvcikgeworCQlpZiAoZXJyb3IpCisJCQll
bnRyeS0+ZXJyb3IgPSBlcnJvcjsKKwkJZ19vdXRwdXRfc3RyZWFtX2Nsb3NlX2FzeW5jIChzdHJl
YW0sCisJCQkJCSAgICAgR19QUklPUklUWV9MT1csCisJCQkJCSAgICAgZW50cnktPmNhbmNlbGxh
YmxlLAorCQkJCQkgICAgIChHQXN5bmNSZWFkeUNhbGxiYWNrKWNsb3NlX3JlYWR5X2NiLAorCQkJ
CQkgICAgIGZpeHR1cmUpOworCQkvKiBGSVhNRTogV2Ugc2hvdWxkIGNvbXBsZXRlbHkgc3RvcCBj
YWNoaW5nIHRoZQorCQkgICByZXNvdXJjZSBhdCB0aGlzIHBvaW50ICovCisJfSBlbHNlIHsKKwkJ
ZW50cnktPnBvcyArPSB3cml0ZV9zaXplOworCisJCS8qIEFyZSB3ZSBzdGlsbCB3cml0aW5nIGFu
ZCBpcyB0aGVyZSBuZXcgZGF0YSB0byB3cml0ZQorCQkgICBhbHJlYWR5ID8gKi8KKwkJaWYgKGVu
dHJ5LT5kYXRhICYmIGVudHJ5LT5wb3MgPCBlbnRyeS0+ZGF0YS0+bGVuKSB7CisJCQlnX291dHB1
dF9zdHJlYW1fd3JpdGVfYXN5bmMgKGVudHJ5LT5zdHJlYW0sCisJCQkJCQkgICAgIGVudHJ5LT5k
YXRhLT5zdHIgKyBlbnRyeS0+cG9zLAorCQkJCQkJICAgICBlbnRyeS0+ZGF0YS0+bGVuIC0gZW50
cnktPnBvcywKKwkJCQkJCSAgICAgR19QUklPUklUWV9MT1csCisJCQkJCQkgICAgIGVudHJ5LT5j
YW5jZWxsYWJsZSwKKwkJCQkJCSAgICAgKEdBc3luY1JlYWR5Q2FsbGJhY2spd3JpdGVfcmVhZHlf
Y2IsCisJCQkJCQkgICAgIGZpeHR1cmUpOworCQl9IGVsc2UgeworCQkJZW50cnktPndyaXRpbmcg
PSBGQUxTRTsKKworCQkJaWYgKGVudHJ5LT5nb3RfYm9keSkgeworCQkJCS8qIElmIHdlIGFscmVh
ZHkgcmVjZWl2ZWQgJ2dvdC1ib2R5JworCQkJCSAgIGFuZCB3ZSBoYXZlIHdyaXR0ZW4gYWxsIHRo
ZSBkYXRhLAorCQkJCSAgIHdlIGNhbiBjbG9zZSB0aGUgc3RyZWFtICovCisJCQkJZ19vdXRwdXRf
c3RyZWFtX2Nsb3NlX2FzeW5jIChlbnRyeS0+c3RyZWFtLAorCQkJCQkJCSAgICAgR19QUklPUklU
WV9MT1csCisJCQkJCQkJICAgICBlbnRyeS0+Y2FuY2VsbGFibGUsCisJCQkJCQkJICAgICAoR0Fz
eW5jUmVhZHlDYWxsYmFjayljbG9zZV9yZWFkeV9jYiwKKwkJCQkJCQkgICAgIGZpeHR1cmUpOwor
CQkJfQorCQl9CisJfQorfQorCitzdGF0aWMgdm9pZAorbXNnX2dvdF9jaHVua19jYiAoU291cE1l
c3NhZ2UgKm1zZywgU291cEJ1ZmZlciAqY2h1bmssIFdlYktpdFNvdXBDYWNoZVdyaXRpbmdGaXh0
dXJlICpmaXh0dXJlKQoreworCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSA9IGZpeHR1cmUt
PmVudHJ5OworCisJZ19yZXR1cm5faWZfZmFpbCAoY2h1bmstPmRhdGEgJiYgY2h1bmstPmxlbmd0
aCk7CisJZ19yZXR1cm5faWZfZmFpbCAoZW50cnkpOworCisJLyogSWdub3JlIHRoaXMgaWYgdGhl
IHdyaXRpbmcgb3IgYXBwZW5kaW5nIHdhcyBjYW5jZWxsZWQgKi8KKwlpZiAoIWdfY2FuY2VsbGFi
bGVfaXNfY2FuY2VsbGVkIChlbnRyeS0+Y2FuY2VsbGFibGUpKSB7CisJCWdfc3RyaW5nX2FwcGVu
ZF9sZW4gKGVudHJ5LT5kYXRhLCBjaHVuay0+ZGF0YSwgY2h1bmstPmxlbmd0aCk7CisJCWVudHJ5
LT5sZW5ndGggPSBlbnRyeS0+ZGF0YS0+bGVuOworCisJCWlmICghY2FjaGVfYWNjZXB0c19lbnRy
aWVzX29mX3NpemUgKGZpeHR1cmUtPmNhY2hlLCBlbnRyeS0+bGVuZ3RoKSkgeworCQkJLyogUXVp
Y2tseSBjYW5jZWwgdGhlIGNhY2hpbmcgb2YgdGhlIHJlc291cmNlICovCisJCQlnX2NhbmNlbGxh
YmxlX2NhbmNlbCAoZW50cnktPmNhbmNlbGxhYmxlKTsKKwkJfQorCX0KKworCS8qIEZJWE1FOiBy
ZW1vdmUgdGhlIGVycm9yIGNoZWNrIHdoZW4gd2UgY2FuY2VsIHRoZSBjYWNoaW5nIGF0CisJICAg
dGhlIGZpcnN0IHdyaXRlIGVycm9yICovCisJLyogT25seSB3cml0ZSBpZiB0aGUgZW50cnkgc3Ry
ZWFtIGlzIHJlYWR5ICovCisJaWYgKGVudHJ5LT53cml0aW5nID09IEZBTFNFICYmIGVudHJ5LT5l
cnJvciA9PSBOVUxMICYmIGVudHJ5LT5zdHJlYW0pIHsKKwkJR1N0cmluZyAqZGF0YSA9IGVudHJ5
LT5kYXRhOworCQllbnRyeS0+d3JpdGluZyA9IFRSVUU7CisJCWdfb3V0cHV0X3N0cmVhbV93cml0
ZV9hc3luYyAoZW50cnktPnN0cmVhbSwKKwkJCQkJICAgICBkYXRhLT5zdHIgKyBlbnRyeS0+cG9z
LAorCQkJCQkgICAgIGRhdGEtPmxlbiAtIGVudHJ5LT5wb3MsCisJCQkJCSAgICAgR19QUklPUklU
WV9MT1csCisJCQkJCSAgICAgZW50cnktPmNhbmNlbGxhYmxlLAorCQkJCQkgICAgIChHQXN5bmNS
ZWFkeUNhbGxiYWNrKXdyaXRlX3JlYWR5X2NiLAorCQkJCQkgICAgIGZpeHR1cmUpOworCX0KK30K
Kworc3RhdGljIHZvaWQKK21zZ19nb3RfYm9keV9jYiAoU291cE1lc3NhZ2UgKm1zZywgV2ViS2l0
U291cENhY2hlV3JpdGluZ0ZpeHR1cmUgKmZpeHR1cmUpCit7CisJV2ViS2l0U291cENhY2hlRW50
cnkgKmVudHJ5ID0gZml4dHVyZS0+ZW50cnk7CisJZ19yZXR1cm5faWZfZmFpbCAoZW50cnkpOwor
CisJZW50cnktPmdvdF9ib2R5ID0gVFJVRTsKKworCWlmICghZW50cnktPnN0cmVhbSAmJiBlbnRy
eS0+cG9zICE9IGVudHJ5LT5sZW5ndGgpCisJCS8qIFRoZSBzdHJlYW0gaXMgbm90IHJlYWR5IHRv
IGJlIHdyaXR0ZW4gYnV0IHdlIHN0aWxsCisJCSAgIGhhdmUgZGF0YSB0byB3cml0ZSwgd2UnbGwg
d3JpdGUgaXQgd2hlbiB0aGUgc3RyZWFtCisJCSAgIGlzIG9wZW5lZCBmb3Igd3JpdGluZyAqLwor
CQlyZXR1cm47CisKKworCWlmIChlbnRyeS0+cG9zICE9IGVudHJ5LT5sZW5ndGgpIHsKKwkJLyog
SWYgd2Ugc3RpbGwgaGF2ZSBkYXRhIHRvIHdyaXRlLCB3cml0ZSBpdCwKKwkJICAgd3JpdGVfcmVh
ZHlfY2Igd2lsbCBjbG9zZSB0aGUgc3RyZWFtICovCisJCWlmIChlbnRyeS0+d3JpdGluZyA9PSBG
QUxTRSAmJiBlbnRyeS0+ZXJyb3IgPT0gTlVMTCAmJiBlbnRyeS0+c3RyZWFtKSB7CisJCQlnX291
dHB1dF9zdHJlYW1fd3JpdGVfYXN5bmMgKGVudHJ5LT5zdHJlYW0sCisJCQkJCQkgICAgIGVudHJ5
LT5kYXRhLT5zdHIgKyBlbnRyeS0+cG9zLAorCQkJCQkJICAgICBlbnRyeS0+ZGF0YS0+bGVuIC0g
ZW50cnktPnBvcywKKwkJCQkJCSAgICAgR19QUklPUklUWV9MT1csCisJCQkJCQkgICAgIGVudHJ5
LT5jYW5jZWxsYWJsZSwKKwkJCQkJCSAgICAgKEdBc3luY1JlYWR5Q2FsbGJhY2spd3JpdGVfcmVh
ZHlfY2IsCisJCQkJCQkgICAgIGZpeHR1cmUpOworCQl9CisJCXJldHVybjsKKwl9CisKKwlpZiAo
ZW50cnktPnN0cmVhbSAmJiAhZW50cnktPndyaXRpbmcpCisJCWdfb3V0cHV0X3N0cmVhbV9jbG9z
ZV9hc3luYyAoZW50cnktPnN0cmVhbSwKKwkJCQkJICAgICBHX1BSSU9SSVRZX0xPVywKKwkJCQkJ
ICAgICBlbnRyeS0+Y2FuY2VsbGFibGUsCisJCQkJCSAgICAgKEdBc3luY1JlYWR5Q2FsbGJhY2sp
Y2xvc2VfcmVhZHlfY2IsCisJCQkJCSAgICAgZml4dHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVh
bgord2Via2l0X3NvdXBfY2FjaGVfZW50cnlfcmVtb3ZlIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hl
LCBXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkpCit7CisJR0xpc3QgKmxydV9pdGVtOworCisJ
LyogaWYgKGVudHJ5LT5kaXJ0eSAmJiAhZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQgKGVudHJ5
LT5jYW5jZWxsYWJsZSkpIHsgKi8KKwlpZiAoZW50cnktPmRpcnR5KSB7CisJCWdfY2FuY2VsbGFi
bGVfY2FuY2VsIChlbnRyeS0+Y2FuY2VsbGFibGUpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJ
Z19hc3NlcnQgKGdfbGlzdF9sZW5ndGggKGNhY2hlLT5wcml2LT5scnVfc3RhcnQpID09IGdfaGFz
aF90YWJsZV9zaXplIChjYWNoZS0+cHJpdi0+Y2FjaGUpKTsKKworCS8qIFJlbW92ZSBmcm9tIGNh
Y2hlICovCisJaWYgKCFnX2hhc2hfdGFibGVfcmVtb3ZlIChjYWNoZS0+cHJpdi0+Y2FjaGUsIGVu
dHJ5LT5rZXkpKQorCQlyZXR1cm4gRkFMU0U7CisKKwkvKiBSZW1vdmUgZnJvbSBMUlUgKi8KKwls
cnVfaXRlbSA9IGdfbGlzdF9maW5kIChjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0LCBlbnRyeSk7CisJ
Y2FjaGUtPnByaXYtPmxydV9zdGFydCA9IGdfbGlzdF9kZWxldGVfbGluayAoY2FjaGUtPnByaXYt
PmxydV9zdGFydCwgbHJ1X2l0ZW0pOworCisJLyogQWRqdXN0IGNhY2hlIHNpemUgKi8KKwljYWNo
ZS0+cHJpdi0+c2l6ZSAtPSBlbnRyeS0+bGVuZ3RoOworCisJZ19hc3NlcnQgKGdfbGlzdF9sZW5n
dGggKGNhY2hlLT5wcml2LT5scnVfc3RhcnQpID09IGdfaGFzaF90YWJsZV9zaXplIChjYWNoZS0+
cHJpdi0+Y2FjaGUpKTsKKworCXJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2ludAorbHJ1X2Nv
bXBhcmVfZnVuYyAoZ2NvbnN0cG9pbnRlciBhLCBnY29uc3Rwb2ludGVyIGIpCit7CisJV2ViS2l0
U291cENhY2hlRW50cnkgKmVudHJ5X2EgPSAoV2ViS2l0U291cENhY2hlRW50cnkgKilhOworCVdl
YktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeV9iID0gKFdlYktpdFNvdXBDYWNoZUVudHJ5ICopYjsK
KworCS8qKiBUaGUgcmF0aW9uYWxlIG9mIHRoaXMgc29ydGluZyBmdW5jIGlzCisJICoKKwkgKiAx
LiBzb3J0IGJ5IGhpdHMgLT4gTFJVIGFsZ29yaXRobSwgdGhlbgorCSAqCisJICogMi4gc29ydCBi
eSBmcmVzaG5lc3MgbGlmZXRpbWUsIHdlIGJldHRlciBkaXNjYXJkIGZpcnN0CisJICogZW50cmll
cyB0aGF0IGFyZSBjbG9zZSB0byBleHBpcmUKKwkgKgorCSAqIDMuIHNvcnQgYnkgc2l6ZSwgcmVw
bGFjZSBmaXJzdCBzbWFsbCBzaXplIHJlc291cmNlcyBhcyB0aGV5CisJICogYXJlIGNoZWFwZXIg
dG8gZG93bmxvYWQKKwkgKiovCisKKwkvKiBTb3J0IGJ5IGhpdHMgKi8KKwlpZiAoZW50cnlfYS0+
aGl0cyAhPSBlbnRyeV9iLT5oaXRzKQorCQlyZXR1cm4gZW50cnlfYS0+aGl0cyAtIGVudHJ5X2It
PmhpdHM7CisKKwkvKiBTb3J0IGJ5IGZyZXNobmVzc19saWZldGltZSAqLworCWlmIChlbnRyeV9h
LT5mcmVzaG5lc3NfbGlmZXRpbWUgIT0gZW50cnlfYi0+ZnJlc2huZXNzX2xpZmV0aW1lKQorCQly
ZXR1cm4gZW50cnlfYS0+ZnJlc2huZXNzX2xpZmV0aW1lIC0gZW50cnlfYi0+ZnJlc2huZXNzX2xp
ZmV0aW1lOworCisJLyogU29ydCBieSBzaXplICovCisJcmV0dXJuIGVudHJ5X2EtPmxlbmd0aCAt
IGVudHJ5X2ItPmxlbmd0aDsKK30KKworc3RhdGljIGdib29sZWFuCitjYWNoZV9hY2NlcHRzX2Vu
dHJpZXNfb2Zfc2l6ZSAoV2ViS2l0U291cENhY2hlICpjYWNoZSwgZ3VpbnQgbGVuZ3RoX3RvX2Fk
ZCkKK3sKKwkvKiBXZSBjb3VsZCBhZGQgaGVyZSBzb21lIG1vcmUgaGV1cmlzdGljcy4gVE9ETzog
cmV2aWV3IGhvdworCSAgIHRoaXMgaXMgZG9uZSBieSBvdGhlciBIVFRQIGNhY2hlcyAqLworCisJ
cmV0dXJuIGxlbmd0aF90b19hZGQgPD0gY2FjaGUtPnByaXYtPm1heF9lbnRyeV9kYXRhX3NpemU7
Cit9CisKK3N0YXRpYyB2b2lkCittYWtlX3Jvb21fZm9yX25ld19lbnRyeSAoV2ViS2l0U291cENh
Y2hlICpjYWNoZSwgZ3VpbnQgbGVuZ3RoX3RvX2FkZCkKK3sKKwlHTGlzdCAqbHJ1X2VudHJ5ID0g
Y2FjaGUtPnByaXYtPmxydV9zdGFydDsKKworCS8qIENoZWNrIHRoYXQgdGhlcmUgaXMgZW5vdWdo
IHJvb20gZm9yIHRoZSBuZXcgZW50cnkuIFRoaXMgaXMKKwkgICBhbiBhcHByb3hpbWF0aW9uIGFz
IHdlJ3JlIG5vdCB3b3JraW5nIG91dCB0aGUgc2l6ZSBvZiB0aGUKKwkgICBjYWNoZSBmaWxlIG9y
IHRoZSBzaXplIG9mIHRoZSBoZWFkZXJzIGZvciBwZXJmb3JtYW5jZQorCSAgIHJlYXNvbnMuIFRP
RE86IGNoZWNrIGlmIHRoYXQgd291bGQgYmUgcmVhbGx5IHRoYXQgZXhwZW5zaXZlICovCisKKwl3
aGlsZSAobHJ1X2VudHJ5ICYmCisJICAgICAgIChsZW5ndGhfdG9fYWRkICsgY2FjaGUtPnByaXYt
PnNpemUgPiBjYWNoZS0+cHJpdi0+bWF4X3NpemUpKSB7CisJCVdlYktpdFNvdXBDYWNoZUVudHJ5
ICpvbGRfZW50cnkgPSAoV2ViS2l0U291cENhY2hlRW50cnkgKilscnVfZW50cnktPmRhdGE7CisK
KwkJLyogRGlzY2FyZCBlbnRyaWVzLiBPbmNlIGNhbmNlbGxlZCByZXNvdXJjZXMgd2lsbCBiZQor
CQkgKiBmcmVlZCBpbiBjbG9zZV9yZWFkeV9jYgorCQkgKi8KKwkJaWYgKHdlYmtpdF9zb3VwX2Nh
Y2hlX2VudHJ5X3JlbW92ZSAoY2FjaGUsIG9sZF9lbnRyeSkpIHsKKwkJCXdlYmtpdF9zb3VwX2Nh
Y2hlX2VudHJ5X2ZyZWUgKG9sZF9lbnRyeSwgVFJVRSk7CisJCQlscnVfZW50cnkgPSBjYWNoZS0+
cHJpdi0+bHJ1X3N0YXJ0OworCQl9IGVsc2UKKwkJCWxydV9lbnRyeSA9IGdfbGlzdF9uZXh0IChs
cnVfZW50cnkpOworCX0KK30KKworc3RhdGljIGdib29sZWFuCit3ZWJraXRfc291cF9jYWNoZV9l
bnRyeV9pbnNlcnRfYnlfa2V5IChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLAorCQkJCSAgICAgICBj
b25zdCBjaGFyICprZXksCisJCQkJICAgICAgIFdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSwK
KwkJCQkgICAgICAgZ2Jvb2xlYW4gc29ydCkKK3sKKwlndWludCBsZW5ndGhfdG9fYWRkID0gMDsK
KworCWlmIChzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfZW5jb2RpbmcgKGVudHJ5LT5oZWFkZXJz
KSAhPSBTT1VQX0VOQ09ESU5HX0NIVU5LRUQpCisJCWxlbmd0aF90b19hZGQgPSBzb3VwX21lc3Nh
Z2VfaGVhZGVyc19nZXRfY29udGVudF9sZW5ndGggKGVudHJ5LT5oZWFkZXJzKTsKKworCS8qIENo
ZWNrIGlmIHdlIGFyZSBnb2luZyB0byBzdG9yZSB0aGUgcmVzb3VyY2UgZGVwZW5kaW5nIG9uIGl0
cyBzaXplICovCisJaWYgKGxlbmd0aF90b19hZGQpIHsKKwkJaWYgKCFjYWNoZV9hY2NlcHRzX2Vu
dHJpZXNfb2Zfc2l6ZSAoY2FjaGUsIGxlbmd0aF90b19hZGQpKQorCQkJcmV0dXJuIEZBTFNFOwor
CisJCS8qIE1ha2Ugcm9vbSBmb3IgbmV3IGVudHJ5IGlmIG5lZWRlZCAqLworCQltYWtlX3Jvb21f
Zm9yX25ld19lbnRyeSAoY2FjaGUsIGxlbmd0aF90b19hZGQpOworCX0KKworCWdfaGFzaF90YWJs
ZV9pbnNlcnQgKGNhY2hlLT5wcml2LT5jYWNoZSwgZ19zdHJkdXAgKGtleSksIGVudHJ5KTsKKwor
CS8qIENvbXB1dGUgbmV3IGNhY2hlIHNpemUgKi8KKwljYWNoZS0+cHJpdi0+c2l6ZSArPSBsZW5n
dGhfdG9fYWRkOworCisJLyogVXBkYXRlIExSVSAqLworCWlmIChzb3J0KQorCQljYWNoZS0+cHJp
di0+bHJ1X3N0YXJ0ID0gZ19saXN0X2luc2VydF9zb3J0ZWQgKGNhY2hlLT5wcml2LT5scnVfc3Rh
cnQsIGVudHJ5LCBscnVfY29tcGFyZV9mdW5jKTsKKwllbHNlCisJCWNhY2hlLT5wcml2LT5scnVf
c3RhcnQgPSBnX2xpc3RfcHJlcGVuZCAoY2FjaGUtPnByaXYtPmxydV9zdGFydCwgZW50cnkpOwor
CisJZ19hc3NlcnQgKGdfbGlzdF9sZW5ndGggKGNhY2hlLT5wcml2LT5scnVfc3RhcnQpID09IGdf
aGFzaF90YWJsZV9zaXplIChjYWNoZS0+cHJpdi0+Y2FjaGUpKTsKKworCXJldHVybiBUUlVFOwor
fQorCitzdGF0aWMgdm9pZAorbXNnX3Jlc3RhcnRlZF9jYiAoU291cE1lc3NhZ2UgKm1zZywgV2Vi
S2l0U291cENhY2hlRW50cnkgKmVudHJ5KQoreworCS8qIEZJWE1FOiBXaGF0IHNob3VsZCB3ZSBk
byBoZXJlIGV4YWN0bHk/ICovCit9CisKK3N0YXRpYyB2b2lkCithcHBlbmRfdG9fcmVhZHlfY2Ig
KEdPYmplY3QgKnNvdXJjZSwgR0FzeW5jUmVzdWx0ICpyZXN1bHQsIFdlYktpdFNvdXBDYWNoZVdy
aXRpbmdGaXh0dXJlICpmaXh0dXJlKQoreworCUdGaWxlICpmaWxlID0gKEdGaWxlICopc291cmNl
OworCUdPdXRwdXRTdHJlYW0gKnN0cmVhbTsKKwlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkg
PSBmaXh0dXJlLT5lbnRyeTsKKworCXN0cmVhbSA9IChHT3V0cHV0U3RyZWFtICopZ19maWxlX2Fw
cGVuZF90b19maW5pc2ggKGZpbGUsIHJlc3VsdCwgJmVudHJ5LT5lcnJvcik7CisKKwlpZiAoZ19j
YW5jZWxsYWJsZV9pc19jYW5jZWxsZWQgKGVudHJ5LT5jYW5jZWxsYWJsZSkgfHwgZW50cnktPmVy
cm9yKSB7CisJCWZpeHR1cmUtPmNhY2hlLT5wcml2LT5uX3BlbmRpbmctLTsKKwkJZW50cnktPmRp
cnR5ID0gRkFMU0U7CisJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X3JlbW92ZSAoZml4dHVyZS0+
Y2FjaGUsIGVudHJ5KTsKKwkJd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfZnJlZSAoZW50cnksIFRS
VUUpOworCQl3ZWJraXRfc291cF9jYWNoZV93cml0aW5nX2ZpeHR1cmVfZnJlZSAoZml4dHVyZSk7
CisJCXJldHVybjsKKwl9CisKKwllbnRyeS0+c3RyZWFtID0gZ19vYmplY3RfcmVmIChzdHJlYW0p
OworCWdfb2JqZWN0X3VucmVmIChmaWxlKTsKKworCS8qIElmIHdlIGFscmVhZHkgZ290IGFsbCB0
aGUgZGF0YSB3ZSBoYXZlIHRvIGluaXRpYXRlIHRoZQorCSAgIHdyaXRpbmcgaGVyZSwgc2luY2Ug
d2Ugd29uJ3QgZ2V0IG1vcmUgJ2dvdC1jaHVuaycKKwkgICBzaWduYWxzICovCisJaWYgKGVudHJ5
LT5nb3RfYm9keSkgeworCQlHU3RyaW5nICpkYXRhID0gZW50cnktPmRhdGE7CisKKwkJLyogSXQg
Y291bGQgaGFwcGVuIHRoYXQgcmVhZGluZyB0aGUgZGF0YSBmcm9tIHNlcnZlcgorCQkgICB3YXMg
Y29tcGxldGVkIGJlZm9yZSB0aGlzIGhhcHBlbnMuIEluIHRoYXQgY2FzZQorCQkgICB0aGVyZSBp
cyBubyBkYXRhICovCisJCWlmIChkYXRhKSB7CisJCQllbnRyeS0+d3JpdGluZyA9IFRSVUU7CisJ
CQlnX291dHB1dF9zdHJlYW1fd3JpdGVfYXN5bmMgKGVudHJ5LT5zdHJlYW0sCisJCQkJCQkgICAg
IGRhdGEtPnN0ciArIGVudHJ5LT5wb3MsCisJCQkJCQkgICAgIGRhdGEtPmxlbiAtIGVudHJ5LT5w
b3MsCisJCQkJCQkgICAgIEdfUFJJT1JJVFlfTE9XLAorCQkJCQkJICAgICBlbnRyeS0+Y2FuY2Vs
bGFibGUsCisJCQkJCQkgICAgIChHQXN5bmNSZWFkeUNhbGxiYWNrKXdyaXRlX3JlYWR5X2NiLAor
CQkJCQkJICAgICBmaXh0dXJlKTsKKwkJfQorCX0KK30KKwordHlwZWRlZiBzdHJ1Y3QgeworCXRp
bWVfdCByZXF1ZXN0X3RpbWU7CisJU291cFNlc3Npb25GZWF0dXJlICpmZWF0dXJlOworCWd1bG9u
ZyBnb3RfaGVhZGVyc19oYW5kbGVyOworfSBSZXF1ZXN0SGVscGVyOworCitzdGF0aWMgdm9pZAor
bXNnX2dvdF9oZWFkZXJzX2NiIChTb3VwTWVzc2FnZSAqbXNnLCBncG9pbnRlciB1c2VyX2RhdGEp
Cit7CisJV2ViS2l0U291cENhY2hlICpjYWNoZTsKKwlXZWJLaXRTb3VwQ2FjaGVhYmlsaXR5IGNh
Y2hlYWJsZTsKKwlSZXF1ZXN0SGVscGVyICpoZWxwZXI7CisJdGltZV90IHJlcXVlc3RfdGltZSwg
cmVzcG9uc2VfdGltZTsKKworCXJlc3BvbnNlX3RpbWUgPSB0aW1lIChOVUxMKTsKKworCWhlbHBl
ciA9IChSZXF1ZXN0SGVscGVyICopdXNlcl9kYXRhOworCWNhY2hlID0gV0VCS0lUX1NPVVBfQ0FD
SEUgKGhlbHBlci0+ZmVhdHVyZSk7CisJcmVxdWVzdF90aW1lID0gaGVscGVyLT5yZXF1ZXN0X3Rp
bWU7CisJZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jIChtc2csIG1zZ19nb3Rf
aGVhZGVyc19jYiwgdXNlcl9kYXRhKTsKKwlnX3NsaWNlX2ZyZWUgKFJlcXVlc3RIZWxwZXIsIGhl
bHBlcik7CisKKwljYWNoZWFibGUgPSB3ZWJraXRfc291cF9jYWNoZV9nZXRfY2FjaGVhYmlsaXR5
IChjYWNoZSwgbXNnKTsKKworCWlmIChjYWNoZWFibGUgJiBXRUJLSVRfU09VUF9DQUNIRV9DQUNI
RUFCTEUpIHsKKwkJV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5OworCQljaGFyICprZXk7CisJ
CUdGaWxlICpmaWxlOworCQlXZWJLaXRTb3VwQ2FjaGVXcml0aW5nRml4dHVyZSAqZml4dHVyZTsK
KworCQkvKiBDaGVjayBpZiB3ZSBhcmUgYWxyZWFkeSBjYWNoaW5nIHRoaXMgcmVzb3VyY2UgKi8K
KwkJa2V5ID0gc291cF9tZXNzYWdlX2dldF9jYWNoZV9rZXkgKG1zZyk7CisJCWVudHJ5ID0gZ19o
YXNoX3RhYmxlX2xvb2t1cCAoY2FjaGUtPnByaXYtPmNhY2hlLCBrZXkpOworCQlnX2ZyZWUgKGtl
eSk7CisKKwkJaWYgKGVudHJ5ICYmIGVudHJ5LT5kaXJ0eSkKKwkJCXJldHVybjsKKworCQkvKiBD
cmVhdGUgYSBuZXcgZW50cnksIGRlbGV0aW5nIGFueSBvbGQgb25lIGlmIHByZXNlbnQgKi8KKwkJ
aWYgKGVudHJ5KSB7CisJCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9yZW1vdmUgKGNhY2hlLCBl
bnRyeSk7CisJCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9mcmVlIChlbnRyeSwgVFJVRSk7CisJ
CX0KKworCQllbnRyeSA9IHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X25ldyAoY2FjaGUsIG1zZywg
cmVxdWVzdF90aW1lLCByZXNwb25zZV90aW1lKTsKKwkJZW50cnktPmhpdHMgPSAxOworCisJCS8q
IERvIG5vdCBjb250aW51ZSBpZiBpdCBjYW4gbm90IGJlIHN0b3JlZCAqLworCQlpZiAoIXdlYmtp
dF9zb3VwX2NhY2hlX2VudHJ5X2luc2VydF9ieV9rZXkgKGNhY2hlLCAoY29uc3QgZ2NoYXIgKill
bnRyeS0+a2V5LCBlbnRyeSwgVFJVRSkpIHsKKwkJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2Zy
ZWUgKGVudHJ5LCBUUlVFKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWZpeHR1cmUgPSBnX3NsaWNl
X25ldzAgKFdlYktpdFNvdXBDYWNoZVdyaXRpbmdGaXh0dXJlKTsKKwkJZml4dHVyZS0+Y2FjaGUg
PSBnX29iamVjdF9yZWYgKGNhY2hlKTsKKwkJZml4dHVyZS0+ZW50cnkgPSBlbnRyeTsKKwkJZml4
dHVyZS0+bXNnID0gZ19vYmplY3RfcmVmIChtc2cpOworCisJCS8qIFdlIGNvbm5lY3Qgbm93IHRv
IHRoZXNlIHNpZ25hbHMgYW5kIGJ1ZmZlciB0aGUgZGF0YQorCQkgICBpZiBpdCBjb21lcyBiZWZv
cmUgdGhlIGZpbGUgaXMgcmVhZHkgZm9yIHdyaXRpbmcgKi8KKwkJZml4dHVyZS0+Z290X2NodW5r
X2hhbmRsZXIgPQorCQkJZ19zaWduYWxfY29ubmVjdCAobXNnLCAiZ290LWNodW5rIiwgR19DQUxM
QkFDSyAobXNnX2dvdF9jaHVua19jYiksIGZpeHR1cmUpOworCQlmaXh0dXJlLT5nb3RfYm9keV9o
YW5kbGVyID0KKwkJCWdfc2lnbmFsX2Nvbm5lY3QgKG1zZywgImdvdC1ib2R5IiwgR19DQUxMQkFD
SyAobXNnX2dvdF9ib2R5X2NiKSwgZml4dHVyZSk7CisJCWZpeHR1cmUtPnJlc3RhcnRlZF9oYW5k
bGVyID0KKwkJCWdfc2lnbmFsX2Nvbm5lY3QgKG1zZywgInJlc3RhcnRlZCIsIEdfQ0FMTEJBQ0sg
KG1zZ19yZXN0YXJ0ZWRfY2IpLCBlbnRyeSk7CisKKwkJLyogUHJlcGFyZSBlbnRyeSAqLworCQlm
aWxlID0gZ19maWxlX25ld19mb3JfcGF0aCAoZW50cnktPmZpbGVuYW1lKTsKKwkJY2FjaGUtPnBy
aXYtPm5fcGVuZGluZysrOworCisJCWVudHJ5LT5kaXJ0eSA9IFRSVUU7CisJCWVudHJ5LT5jYW5j
ZWxsYWJsZSA9IGdfY2FuY2VsbGFibGVfbmV3ICgpOworCQlnX2ZpbGVfYXBwZW5kX3RvX2FzeW5j
IChmaWxlLCAwLAorCQkJCQlHX1BSSU9SSVRZX0xPVywgZW50cnktPmNhbmNlbGxhYmxlLAorCQkJ
CQkoR0FzeW5jUmVhZHlDYWxsYmFjaylhcHBlbmRfdG9fcmVhZHlfY2IsCisJCQkJCWZpeHR1cmUp
OworCX0gZWxzZSBpZiAoY2FjaGVhYmxlICYgV0VCS0lUX1NPVVBfQ0FDSEVfSU5WQUxJREFURVMp
IHsKKwkJY2hhciAqa2V5OworCQlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnk7CisKKwkJa2V5
ID0gc291cF9tZXNzYWdlX2dldF9jYWNoZV9rZXkgKG1zZyk7CisJCWVudHJ5ID0gZ19oYXNoX3Rh
YmxlX2xvb2t1cCAoY2FjaGUtPnByaXYtPmNhY2hlLCBrZXkpOworCQlnX2ZyZWUgKGtleSk7CisK
KwkJaWYgKGVudHJ5KSB7CisJCQlpZiAod2Via2l0X3NvdXBfY2FjaGVfZW50cnlfcmVtb3ZlIChj
YWNoZSwgZW50cnkpKQorCQkJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUgKGVudHJ5LCBU
UlVFKTsKKwkJfQorCX0gZWxzZSBpZiAoY2FjaGVhYmxlICYgV0VCS0lUX1NPVVBfQ0FDSEVfVkFM
SURBVEVTKSB7CisJCWNoYXIgKmtleTsKKwkJV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5Owor
CisJCWtleSA9IHNvdXBfbWVzc2FnZV9nZXRfY2FjaGVfa2V5IChtc2cpOworCQllbnRyeSA9IGdf
aGFzaF90YWJsZV9sb29rdXAgKGNhY2hlLT5wcml2LT5jYWNoZSwga2V5KTsKKwkJZ19mcmVlIChr
ZXkpOworCisJCWdfcmV0dXJuX2lmX2ZhaWwgKGVudHJ5KTsKKworCQllbnRyeS0+YmVpbmdfdmFs
aWRhdGVkID0gRkFMU0U7CisKKwkJLyogV2UgdXBkYXRlIHRoZSBoZWFkZXJzIG9mIHRoZSBleGlz
dGluZyBjYWNoZSBpdGVtLAorCQkgICBwbHVzIGl0cyBhZ2UgKi8KKwkJc291cF9tZXNzYWdlX2hl
YWRlcnNfZm9yZWFjaCAobXNnLT5yZXNwb25zZV9oZWFkZXJzLAorCQkJCQkgICAgICAoU291cE1l
c3NhZ2VIZWFkZXJzRm9yZWFjaEZ1bmMpdXBkYXRlX2hlYWRlcnMsCisJCQkJCSAgICAgIGVudHJ5
LT5oZWFkZXJzKTsKKwkJd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfc2V0X2ZyZXNobmVzcyAoZW50
cnksIG1zZywgY2FjaGUpOworCX0KK30KKworR0lucHV0U3RyZWFtICoKK3dlYmtpdF9zb3VwX2Nh
Y2hlX3NlbmRfcmVzcG9uc2UgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsIFNvdXBNZXNzYWdlICpt
c2cpCit7CisJY2hhciAqa2V5OworCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeTsKKwljaGFy
ICpjdXJyZW50X2FnZTsKKwlHSW5wdXRTdHJlYW0gKnN0cmVhbSA9IE5VTEw7CisJR0ZpbGUgKmZp
bGU7CisKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoV0VCS0lUX0lTX1NPVVBfQ0FDSEUgKGNhY2hl
KSwgTlVMTCk7CisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFNPVVBfSVNfTUVTU0FHRSAobXNnKSwg
TlVMTCk7CisKKwlrZXkgPSBzb3VwX21lc3NhZ2VfZ2V0X2NhY2hlX2tleSAobXNnKTsKKwllbnRy
eSA9IGdfaGFzaF90YWJsZV9sb29rdXAgKGNhY2hlLT5wcml2LT5jYWNoZSwga2V5KTsKKwlnX3Jl
dHVybl92YWxfaWZfZmFpbCAoZW50cnksIE5VTEwpOworCisJLyogSWYgd2UgYXJlIHRvbGQgdG8g
c2VuZCBhIHJlc3BvbnNlIGZyb20gY2FjaGUgYW55IHZhbGlkYXRpb24KKwkgICBpbiBjb3Vyc2Ug
aXMgb3ZlciBieSBub3cgKi8KKwllbnRyeS0+YmVpbmdfdmFsaWRhdGVkID0gRkFMU0U7CisKKwkv
KiBIZWFkZXJzICovCisJc291cF9tZXNzYWdlX2hlYWRlcnNfZm9yZWFjaCAoZW50cnktPmhlYWRl
cnMsCisJCQkJICAgICAgKFNvdXBNZXNzYWdlSGVhZGVyc0ZvcmVhY2hGdW5jKXVwZGF0ZV9oZWFk
ZXJzLAorCQkJCSAgICAgIG1zZy0+cmVzcG9uc2VfaGVhZGVycyk7CisKKwkvKiBBZGQgJ0FnZScg
aGVhZGVyIHdpdGggdGhlIGN1cnJlbnQgYWdlICovCisJY3VycmVudF9hZ2UgPSBnX3N0cmR1cF9w
cmludGYgKCIlZCIsIHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2dldF9jdXJyZW50X2FnZSAoZW50
cnkpKTsKKwlzb3VwX21lc3NhZ2VfaGVhZGVyc19yZXBsYWNlIChtc2ctPnJlc3BvbnNlX2hlYWRl
cnMsCisJCQkJICAgICAgIkFnZSIsCisJCQkJICAgICAgY3VycmVudF9hZ2UpOworCWdfZnJlZSAo
Y3VycmVudF9hZ2UpOworCisJLyogVE9ETzogdGhlIG9yaWdpbmFsIGlkZWEgd2FzIHRvIHNhdmUg
cmVhZHMsIGJ1dCBjdXJyZW50IGNvZGUKKwkgICBhc3N1bWVzIHRoYXQgYSBzdHJlYW0gaXMgYWx3
YXlzIHJldHVybmVkLiBOZWVkIHRvIHJlYWNoCisJICAgc29tZSBhZ3JlZW1lbnQgaGVyZS4gQWxz
byB3ZSBoYXZlIHRvIGhhbmRsZSB0aGUgc2l0dWF0aW9uCisJICAgd2VyZSB0aGUgZmlsZSB3YXMg
bm8gbG9uZ2VyIHRoZXJlIChmb3IgZXhhbXBsZSBmaWxlcworCSAgIHJlbW92ZWQgd2l0aG91dCBu
b3RpZnlpbmcgdGhlIGNhY2hlICovCisJZmlsZSA9IGdfZmlsZV9uZXdfZm9yX3BhdGggKGVudHJ5
LT5maWxlbmFtZSk7CisJc3RyZWFtID0gKEdJbnB1dFN0cmVhbSAqKWdfZmlsZV9yZWFkIChmaWxl
LCBOVUxMLCBOVUxMKTsKKworCXJldHVybiBzdHJlYW07Cit9CisKK3N0YXRpYyB2b2lkCityZXF1
ZXN0X3N0YXJ0ZWQgKFNvdXBTZXNzaW9uRmVhdHVyZSAqZmVhdHVyZSwgU291cFNlc3Npb24gKnNl
c3Npb24sCisJCSBTb3VwTWVzc2FnZSAqbXNnLCBTb3VwU29ja2V0ICpzb2NrZXQpCit7CisJUmVx
dWVzdEhlbHBlciAqaGVscGVyID0gZ19zbGljZV9uZXcwIChSZXF1ZXN0SGVscGVyKTsKKwloZWxw
ZXItPnJlcXVlc3RfdGltZSA9IHRpbWUgKE5VTEwpOworCWhlbHBlci0+ZmVhdHVyZSA9IGZlYXR1
cmU7CisJaGVscGVyLT5nb3RfaGVhZGVyc19oYW5kbGVyID0gZ19zaWduYWxfY29ubmVjdCAobXNn
LCAiZ290LWhlYWRlcnMiLAorCQkJCQkJCUdfQ0FMTEJBQ0sgKG1zZ19nb3RfaGVhZGVyc19jYiks
CisJCQkJCQkJaGVscGVyKTsKK30KKworc3RhdGljIHZvaWQKK2F0dGFjaCAoU291cFNlc3Npb25G
ZWF0dXJlICpmZWF0dXJlLCBTb3VwU2Vzc2lvbiAqc2Vzc2lvbikKK3sKKwlXZWJLaXRTb3VwQ2Fj
aGUgKmNhY2hlID0gV0VCS0lUX1NPVVBfQ0FDSEUgKGZlYXR1cmUpOworCWNhY2hlLT5wcml2LT5z
ZXNzaW9uID0gc2Vzc2lvbjsKKworCXdlYmtpdF9zb3VwX2NhY2hlX2RlZmF1bHRfZmVhdHVyZV9p
bnRlcmZhY2UtPmF0dGFjaCAoZmVhdHVyZSwgc2Vzc2lvbik7Cit9CisKK3N0YXRpYyB2b2lkCit3
ZWJraXRfc291cF9jYWNoZV9zZXNzaW9uX2ZlYXR1cmVfaW5pdCAoU291cFNlc3Npb25GZWF0dXJl
SW50ZXJmYWNlICpmZWF0dXJlX2ludGVyZmFjZSwKKwkJCQkJZ3BvaW50ZXIgaW50ZXJmYWNlX2Rh
dGEpCit7CisJd2Via2l0X3NvdXBfY2FjaGVfZGVmYXVsdF9mZWF0dXJlX2ludGVyZmFjZSA9CisJ
CWdfdHlwZV9kZWZhdWx0X2ludGVyZmFjZV9wZWVrIChTT1VQX1RZUEVfU0VTU0lPTl9GRUFUVVJF
KTsKKworCWZlYXR1cmVfaW50ZXJmYWNlLT5hdHRhY2ggPSBhdHRhY2g7CisJZmVhdHVyZV9pbnRl
cmZhY2UtPnJlcXVlc3Rfc3RhcnRlZCA9IHJlcXVlc3Rfc3RhcnRlZDsKK30KKworc3RhdGljIHZv
aWQKK3dlYmtpdF9zb3VwX2NhY2hlX2luaXQgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUpCit7CisJ
V2ViS2l0U291cENhY2hlUHJpdmF0ZSAqcHJpdjsKKworCXByaXYgPSBjYWNoZS0+cHJpdiA9IFdF
QktJVF9TT1VQX0NBQ0hFX0dFVF9QUklWQVRFIChjYWNoZSk7CisKKwlwcml2LT5jYWNoZSA9IGdf
aGFzaF90YWJsZV9uZXdfZnVsbCAoZ19zdHJfaGFzaCwKKwkJCQkJICAgICBnX3N0cl9lcXVhbCwK
KwkJCQkJICAgICAoR0Rlc3Ryb3lOb3RpZnkpZ19mcmVlLAorCQkJCQkgICAgIE5VTEwpOworCisJ
LyogTFJVICovCisJcHJpdi0+bHJ1X3N0YXJ0ID0gTlVMTDsKKworCS8qICovCisJcHJpdi0+bl9w
ZW5kaW5nID0gMDsKKworCS8qIENhY2hlIHNpemUgKi8KKwlwcml2LT5tYXhfc2l6ZSA9IERFRkFV
TFRfTUFYX1NJWkU7CisJcHJpdi0+bWF4X2VudHJ5X2RhdGFfc2l6ZSA9IHByaXYtPm1heF9zaXpl
IC8gTUFYX0VOVFJZX0RBVEFfUEVSQ0VOVEFHRTsKKwlwcml2LT5zaXplID0gMDsKK30KKworc3Rh
dGljIHZvaWQKK3JlbW92ZV9jYWNoZV9pdGVtIChncG9pbnRlciBrZXksCisJCSAgIGdwb2ludGVy
IHZhbHVlLAorCQkgICBXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKQoreworCVdlYktpdFNvdXBDYWNo
ZUVudHJ5ICplbnRyeSA9IGdfaGFzaF90YWJsZV9sb29rdXAgKGNhY2hlLT5wcml2LT5jYWNoZSwg
KGNvbnN0IGdjaGFyICopa2V5KTsKKwlpZiAod2Via2l0X3NvdXBfY2FjaGVfZW50cnlfcmVtb3Zl
IChjYWNoZSwgZW50cnkpKQorCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9mcmVlIChlbnRyeSwg
RkFMU0UpOworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfY2FjaGVfZmluYWxpemUgKEdP
YmplY3QgKm9iamVjdCkKK3sKKwlXZWJLaXRTb3VwQ2FjaGVQcml2YXRlICpwcml2OworCisJcHJp
diA9IFdFQktJVF9TT1VQX0NBQ0hFIChvYmplY3QpLT5wcml2OworCisJZ19oYXNoX3RhYmxlX2Zv
cmVhY2ggKHByaXYtPmNhY2hlLCAoR0hGdW5jKXJlbW92ZV9jYWNoZV9pdGVtLCBvYmplY3QpOwor
CWdfaGFzaF90YWJsZV9kZXN0cm95IChwcml2LT5jYWNoZSk7CisJZ19mcmVlIChwcml2LT5jYWNo
ZV9kaXIpOworCisJZ19saXN0X2ZyZWUgKHByaXYtPmxydV9zdGFydCk7CisJcHJpdi0+bHJ1X3N0
YXJ0ID0gTlVMTDsKKworCUdfT0JKRUNUX0NMQVNTICh3ZWJraXRfc291cF9jYWNoZV9wYXJlbnRf
Y2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3Vw
X2NhY2hlX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqb2JqZWN0LCBndWludCBwcm9wX2lkLAorCQkJ
CWNvbnN0IEdWYWx1ZSAqdmFsdWUsIEdQYXJhbVNwZWMgKnBzcGVjKQoreworCVdlYktpdFNvdXBD
YWNoZVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9DQUNIRSAob2JqZWN0KS0+cHJpdjsKKwor
CXN3aXRjaCAocHJvcF9pZCkgeworCQljYXNlIFBST1BfQ0FDSEVfRElSOgorCQkJcHJpdi0+Y2Fj
aGVfZGlyID0gZ192YWx1ZV9kdXBfc3RyaW5nICh2YWx1ZSk7CisJCQkvKiBDcmVhdGUgZGlyZWN0
b3J5IGlmIGl0IGRvZXMgbm90IGV4aXN0IChGSVhNRTogc2hvdWxkIHdlPykgKi8KKwkJCWlmICgh
Z19maWxlX3Rlc3QgKHByaXYtPmNhY2hlX2RpciwgR19GSUxFX1RFU1RfRVhJU1RTIHwgR19GSUxF
X1RFU1RfSVNfRElSKSkKKwkJCQlnX21rZGlyX3dpdGhfcGFyZW50cyAocHJpdi0+Y2FjaGVfZGly
LCAwNzAwKTsKKwkJCWJyZWFrOworCQljYXNlIFBST1BfQ0FDSEVfVFlQRToKKwkJCXByaXYtPmNh
Y2hlX3R5cGUgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7CisJCQkvKiBUT0RPOiBjbGVhciBw
cml2YXRlIGVudHJpZXMgYW5kIGlzc3VlIGEgd2FybmluZyBpZiBtb3ZpbmcgdG8gc2hhcmVkPyAq
LworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVS
VFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworCQkJYnJlYWs7CisJfQorfQorCitzdGF0
aWMgdm9pZAord2Via2l0X3NvdXBfY2FjaGVfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICpvYmplY3Qs
IGd1aW50IHByb3BfaWQsCisJCQkJR1ZhbHVlICp2YWx1ZSwgR1BhcmFtU3BlYyAqcHNwZWMpCit7
CisJV2ViS2l0U291cENhY2hlUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0NBQ0hFIChvYmpl
Y3QpLT5wcml2OworCisJc3dpdGNoIChwcm9wX2lkKSB7CisJCWNhc2UgUFJPUF9DQUNIRV9ESVI6
CisJCQlnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBwcml2LT5jYWNoZV9kaXIpOworCQkJYnJl
YWs7CisJCWNhc2UgUFJPUF9DQUNIRV9UWVBFOgorCQkJZ192YWx1ZV9zZXRfZW51bSAodmFsdWUs
IHByaXYtPmNhY2hlX3R5cGUpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlHX09CSkVDVF9X
QVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworCQkJYnJl
YWs7CisJfQorfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfY2FjaGVfY29uc3RydWN0ZWQg
KEdPYmplY3QgKm9iamVjdCkKK3sKKwlXZWJLaXRTb3VwQ2FjaGVQcml2YXRlICpwcml2OworCisJ
cHJpdiA9IFdFQktJVF9TT1VQX0NBQ0hFIChvYmplY3QpLT5wcml2OworCisJaWYgKCFwcml2LT5j
YWNoZV9kaXIpIHsKKwkJLyogU2V0IGEgZGVmYXVsdCBjYWNoZSBkaXIsIGRpZmZlcmVudCBmb3Ig
ZWFjaCB1c2VyICovCisJCXByaXYtPmNhY2hlX2RpciA9IGdfYnVpbGRfZmlsZW5hbWUgKGdfZ2V0
X3VzZXJfY2FjaGVfZGlyICgpLAorCQkJCQkJICAgICJodHRwY2FjaGUiLAorCQkJCQkJICAgIE5V
TEwpOworCQlpZiAoIWdfZmlsZV90ZXN0IChwcml2LT5jYWNoZV9kaXIsIEdfRklMRV9URVNUX0VY
SVNUUyB8IEdfRklMRV9URVNUX0lTX0RJUikpCisJCQlnX21rZGlyX3dpdGhfcGFyZW50cyAocHJp
di0+Y2FjaGVfZGlyLCAwNzAwKTsKKwl9CisKKwlpZiAoR19PQkpFQ1RfQ0xBU1MgKHdlYmtpdF9z
b3VwX2NhY2hlX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkKQorCQlHX09CSkVDVF9DTEFTUyAo
d2Via2l0X3NvdXBfY2FjaGVfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0ZWQgKG9iamVjdCk7Cit9
CisKKyNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FDSEVfVFlQRV9UWVBFICh3ZWJraXRfc291cF9jYWNo
ZV90eXBlX2dldF90eXBlICgpKQorc3RhdGljIEdUeXBlCit3ZWJraXRfc291cF9jYWNoZV90eXBl
X2dldF90eXBlICh2b2lkKQoreworCXN0YXRpYyBHVHlwZSBjYWNoZV90eXBlID0gMDsKKworCXN0
YXRpYyBjb25zdCBHRW51bVZhbHVlIGNhY2hlX3R5cGVzW10gPSB7CisJCXsgV0VCS0lUX1NPVVBf
Q0FDSEVfU0lOR0xFX1VTRVIsICJTaW5nbGUgdXNlciBjYWNoZSIsICJ1c2VyIiB9LAorCQl7IFdF
QktJVF9TT1VQX0NBQ0hFX1NIQVJFRCwgIlNoYXJlZCBjYWNoZSIsICJzaGFyZWQiIH0sCisJCXsg
MCwgTlVMTCwgTlVMTCB9CisJfTsKKworCWlmICghY2FjaGVfdHlwZSkgeworCQljYWNoZV90eXBl
ID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIldlYktpdFNvdXBDYWNoZVR5cGUiLCBjYWNoZV90
eXBlcyk7CisJfQorCXJldHVybiBjYWNoZV90eXBlOworfQorCitzdGF0aWMgdm9pZAord2Via2l0
X3NvdXBfY2FjaGVfY2xhc3NfaW5pdCAoV2ViS2l0U291cENhY2hlQ2xhc3MgKmNhY2hlX2NsYXNz
KQoreworCUdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKiljYWNo
ZV9jbGFzczsKKworCWdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gd2Via2l0X3NvdXBfY2FjaGVf
ZmluYWxpemU7CisJZ29iamVjdF9jbGFzcy0+Y29uc3RydWN0ZWQgPSB3ZWJraXRfc291cF9jYWNo
ZV9jb25zdHJ1Y3RlZDsKKwlnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfc291
cF9jYWNoZV9zZXRfcHJvcGVydHk7CisJZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Vi
a2l0X3NvdXBfY2FjaGVfZ2V0X3Byb3BlcnR5OworCisJY2FjaGVfY2xhc3MtPmdldF9jYWNoZWFi
aWxpdHkgPSBnZXRfY2FjaGVhYmlsaXR5OworCisJZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9DQUNIRV9ESVIsCisJCQkJCSBnX3BhcmFtX3NwZWNf
c3RyaW5nICgiY2FjaGUtZGlyIiwKKwkJCQkJCQkgICAgICAiQ2FjaGUgZGlyZWN0b3J5IiwKKwkJ
CQkJCQkgICAgICAiVGhlIGRpcmVjdG9yeSB0byBzdG9yZSB0aGUgY2FjaGUgZmlsZXMiLAorCQkJ
CQkJCSAgICAgIE5VTEwsCisJCQkJCQkJICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFN
X0NPTlNUUlVDVF9PTkxZKSk7CisKKwlnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChn
b2JqZWN0X2NsYXNzLCBQUk9QX0NBQ0hFX1RZUEUsCisJCQkJCSBnX3BhcmFtX3NwZWNfZW51bSAo
ImNhY2hlLXR5cGUiLAorCQkJCQkJCSAgICAiQ2FjaGUgdHlwZSIsCisJCQkJCQkJICAgICJXaGV0
aGVyIHRoZSBjYWNoZSBpcyBwcml2YXRlIG9yIHNoYXJlZCIsCisJCQkJCQkJICAgIFdFQktJVF9T
T1VQX0NBQ0hFX1RZUEVfVFlQRSwKKwkJCQkJCQkgICAgV0VCS0lUX1NPVVBfQ0FDSEVfU0lOR0xF
X1VTRVIsCisJCQkJCQkJICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1Rf
T05MWSkpOworCisJZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlIChjYWNoZV9jbGFzcywgc2l6ZW9m
IChXZWJLaXRTb3VwQ2FjaGVQcml2YXRlKSk7Cit9CisKKy8qKgorICogd2Via2l0X3NvdXBfY2Fj
aGVfbmV3OgorICogQGNhY2hlX2RpcjogdGhlIGRpcmVjdG9yeSB0byBzdG9yZSB0aGUgY2FjaGVk
IGRhdGEsIG9yICVOVUxMIHRvIHVzZSB0aGUgZGVmYXVsdCBvbmUKKyAqIEBjYWNoZV90eXBlOiB0
aGUgI1dlYktpdFNvdXBDYWNoZVR5cGUgb2YgdGhlIGNhY2hlCisgKgorICogQ3JlYXRlcyBhIG5l
dyAjV2ViS2l0U291cENhY2hlLgorICoKKyAqIFJldHVybnM6IGEgbmV3ICNXZWJLaXRTb3VwQ2Fj
aGUKKyAqCisgKiBTaW5jZTogMi4yOAorICoqLworV2ViS2l0U291cENhY2hlICoKK3dlYmtpdF9z
b3VwX2NhY2hlX25ldyAoY29uc3QgY2hhciAqY2FjaGVfZGlyLCBXZWJLaXRTb3VwQ2FjaGVUeXBl
IGNhY2hlX3R5cGUpCit7CisJcmV0dXJuIGdfb2JqZWN0X25ldyAoV0VCS0lUX1RZUEVfU09VUF9D
QUNIRSwKKwkJCSAgICAgImNhY2hlLWRpciIsIGNhY2hlX2RpciwKKwkJCSAgICAgImNhY2hlLXR5
cGUiLCBjYWNoZV90eXBlLAorCQkJICAgICBOVUxMKTsKK30KKworLyoqCisgKiB3ZWJraXRfc291
cF9jYWNoZV9oYXNfcmVzcG9uc2U6CisgKiBAY2FjaGU6IGEgI1dlYktpdFNvdXBDYWNoZQorICog
QG1zZzogYSAjU291cE1lc3NhZ2UKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgd2hl
dGhlciB0aGUgQGNhY2hlIG9iamVjdCBoYXMgYSBwcm9wZXIKKyAqIHJlc3BvbnNlIGZvciB0aGUg
cmVxdWVzdCBAbXNnIGdpdmVuIHRoZSBmbGFncyBib3RoIGluIHRoZSByZXF1ZXN0CisgKiBhbmQg
dGhlIGNhY2hlZCByZXBseSBhbmQgdGhlIHRpbWUgZWxsYXBzZWQgc2luY2UgaXQgd2FzIGNhY2hl
ZC4KKyAqCisgKiBSZXR1cm5zOiB3aGV0aGVyIG9yIG5vdCB0aGUgQGNhY2hlIGhhcyBhIHZhbGlk
IHJlc3BvbnNlIGZvciBAbXNnCisgKiovCitXZWJLaXRTb3VwQ2FjaGVSZXNwb25zZQord2Via2l0
X3NvdXBfY2FjaGVfaGFzX3Jlc3BvbnNlIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLCBTb3VwTWVz
c2FnZSAqbXNnKQoreworCWNoYXIgKmtleTsKKwlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnk7
CisJY29uc3QgY2hhciAqY2FjaGVfY29udHJvbDsKKwlHSGFzaFRhYmxlICpoYXNoOworCWdwb2lu
dGVyIHZhbHVlOworCWdib29sZWFuIG11c3RfcmV2YWxpZGF0ZTsKKwlpbnQgbWF4X2FnZSwgbWF4
X3N0YWxlLCBtaW5fZnJlc2g7CisJR0xpc3QgKmxydV9pdGVtLCAqaXRlbTsKKworCWtleSA9IHNv
dXBfbWVzc2FnZV9nZXRfY2FjaGVfa2V5IChtc2cpOworCWVudHJ5ID0gZ19oYXNoX3RhYmxlX2xv
b2t1cCAoY2FjaGUtPnByaXYtPmNhY2hlLCBrZXkpOworCisJLyogMS4gVGhlIHByZXNlbnRlZCBS
ZXF1ZXN0LVVSSSBhbmQgdGhhdCBvZiBzdG9yZWQgcmVzcG9uc2UKKwkgKiBtYXRjaAorCSAqLwor
CWlmICghZW50cnkpCisJCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9TVEFMRTsK
KworCS8qIEluY3JlYXNlIGhpdCBjb3VudC4gVGFrZSBzb3J0aW5nIGludG8gYWNjb3VudCAqLwor
CWVudHJ5LT5oaXRzKys7CisJbHJ1X2l0ZW0gPSBnX2xpc3RfZmluZCAoY2FjaGUtPnByaXYtPmxy
dV9zdGFydCwgZW50cnkpOworCWl0ZW0gPSBscnVfaXRlbTsKKwl3aGlsZSAoaXRlbS0+bmV4dCAm
JiBscnVfY29tcGFyZV9mdW5jIChpdGVtLT5kYXRhLCBpdGVtLT5uZXh0LT5kYXRhKSA+IDApCisJ
CWl0ZW0gPSBnX2xpc3RfbmV4dCAoaXRlbSk7CisKKwlpZiAoaXRlbSAhPSBscnVfaXRlbSkgewor
CQljYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0ID0gZ19saXN0X3JlbW92ZV9saW5rIChjYWNoZS0+cHJp
di0+bHJ1X3N0YXJ0LCBscnVfaXRlbSk7CisJCWl0ZW0gPSBnX2xpc3RfaW5zZXJ0X3NvcnRlZCAo
aXRlbSwgbHJ1X2l0ZW0tPmRhdGEsIGxydV9jb21wYXJlX2Z1bmMpOworCQlnX2xpc3RfZnJlZSAo
bHJ1X2l0ZW0pOworCX0KKworCWlmIChlbnRyeS0+ZGlydHkgfHwgZW50cnktPmJlaW5nX3ZhbGlk
YXRlZCkKKwkJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX1NUQUxFOworCisJLyog
Mi4gVGhlIHJlcXVlc3QgbWV0aG9kIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RvcmVkIHJlc3BvbnNl
CisJICogIGFsbG93cyBpdCB0byBiZSB1c2VkIGZvciB0aGUgcHJlc2VudGVkIHJlcXVlc3QKKwkg
Ki8KKworCS8qIEluIHByYWN0aWNlIHRoaXMgbWVhbnMgd2Ugb25seSByZXR1cm4gb3VyIHJlc291
cmNlIGZvciBHRVQsCisJICogY2FjaGVhYmlsaXR5IGZvciBvdGhlciBtZXRob2RzIGlzIGEgVE9E
TyBpbiB0aGUgUkZDCisJICogKFRPRE86IGFsdGhvdWdoIHdlIGNvdWxkIHJldHVybiB0aGUgaGVh
ZGVycyBmb3IgSEVBRAorCSAqIHByb2JhYmx5KS4KKwkgKi8KKwlpZiAobXNnLT5tZXRob2QgIT0g
U09VUF9NRVRIT0RfR0VUKQorCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfU1RB
TEU7CisKKwkvKiAzLiBTZWxlY3RpbmcgcmVxdWVzdC1oZWFkZXJzIG5vbWluYXRlZCBieSB0aGUg
c3RvcmVkCisJICogcmVzcG9uc2UgKGlmIGFueSkgbWF0Y2ggdGhvc2UgcHJlc2VudGVkLgorCSAq
LworCisJLyogVE9ETyAqLworCisJLyogNC4gVGhlIHByZXNlbnRlZCByZXF1ZXN0IGFuZCBzdG9y
ZWQgcmVzcG9uc2UgYXJlIGZyZWUgZnJvbQorCSAqIGRpcmVjdGl2ZXMgdGhhdCB3b3VsZCBwcmV2
ZW50IGl0cyB1c2UuCisJICovCisKKwltdXN0X3JldmFsaWRhdGUgPSBGQUxTRTsKKwltYXhfYWdl
ID0gbWF4X3N0YWxlID0gbWluX2ZyZXNoID0gLTE7CisKKwljYWNoZV9jb250cm9sID0gc291cF9t
ZXNzYWdlX2hlYWRlcnNfZ2V0IChtc2ctPnJlcXVlc3RfaGVhZGVycywgIkNhY2hlLUNvbnRyb2wi
KTsKKwlpZiAoY2FjaGVfY29udHJvbCkgeworCQloYXNoID0gc291cF9oZWFkZXJfcGFyc2VfcGFy
YW1fbGlzdCAoY2FjaGVfY29udHJvbCk7CisKKwkJaWYgKGdfaGFzaF90YWJsZV9sb29rdXBfZXh0
ZW5kZWQgKGhhc2gsICJuby1zdG9yZSIsIE5VTEwsIE5VTEwpKSB7CisJCQlnX2hhc2hfdGFibGVf
ZGVzdHJveSAoaGFzaCk7CisJCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfU1RB
TEU7CisJCX0KKworCQlpZiAoZ19oYXNoX3RhYmxlX2xvb2t1cF9leHRlbmRlZCAoaGFzaCwgIm5v
LWNhY2hlIiwgTlVMTCwgTlVMTCkpIHsKKwkJCWVudHJ5LT5tdXN0X3JldmFsaWRhdGUgPSBUUlVF
OworCQl9CisKKwkJaWYgKGdfaGFzaF90YWJsZV9sb29rdXBfZXh0ZW5kZWQgKGhhc2gsICJtYXgt
YWdlIiwgTlVMTCwgJnZhbHVlKSkgeworCQkJbWF4X2FnZSA9IChpbnQpTUlOIChnX2FzY2lpX3N0
cnRvbGwgKHZhbHVlLCBOVUxMLCAxMCksIEdfTUFYSU5UMzIpOworCQl9CisKKwkJLyogbWF4LXN0
YWxlIGNhbiBoYXZlIG5vIHZhbHVlIHNldCwgd2UgbmVlZCB0byB1c2UgX2V4dGVuZGVkICovCisJ
CWlmIChnX2hhc2hfdGFibGVfbG9va3VwX2V4dGVuZGVkIChoYXNoLCAibWF4LXN0YWxlIiwgTlVM
TCwgJnZhbHVlKSkgeworCQkJaWYgKHZhbHVlKQorCQkJCW1heF9zdGFsZSA9IChpbnQpTUlOIChn
X2FzY2lpX3N0cnRvbGwgKHZhbHVlLCBOVUxMLCAxMCksIEdfTUFYSU5UMzIpOworCQkJZWxzZQor
CQkJCW1heF9zdGFsZSA9IEdfTUFYSU5UMzI7CisJCX0KKworCQl2YWx1ZSA9IGdfaGFzaF90YWJs
ZV9sb29rdXAgKGhhc2gsICJtaW4tZnJlc2giKTsKKwkJaWYgKHZhbHVlKQorCQkJbWluX2ZyZXNo
ID0gKGludClNSU4gKGdfYXNjaWlfc3RydG9sbCAodmFsdWUsIE5VTEwsIDEwKSwgR19NQVhJTlQz
Mik7CisKKwkJZ19oYXNoX3RhYmxlX2Rlc3Ryb3kgKGhhc2gpOworCisJCWlmIChtYXhfYWdlICE9
IC0xKSB7CisJCQlndWludCBjdXJyZW50X2FnZSA9IHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2dl
dF9jdXJyZW50X2FnZSAoZW50cnkpOworCisJCQkvKiBJZiB3ZSBhcmUgb3ZlciBtYXgtYWdlIGFu
ZCBtYXgtc3RhbGUgaXMgbm90CisJCQkgICBzZXQsIGRvIG5vdCB1c2UgdGhlIHZhbHVlIGZyb20g
dGhlIGNhY2hlCisJCQkgICB3aXRob3V0IHZhbGlkYXRpb24gKi8KKwkJCWlmIChtYXhfYWdlIDw9
IGN1cnJlbnRfYWdlICYmIG1heF9zdGFsZSA9PSAtMSkKKwkJCQlyZXR1cm4gV0VCS0lUX1NPVVBf
Q0FDSEVfUkVTUE9OU0VfTkVFRFNfVkFMSURBVElPTjsKKwkJfQorCX0KKworCS8qIDUuIFRoZSBz
dG9yZWQgcmVzcG9uc2UgaXMgZWl0aGVyOiBmcmVzaCwgYWxsb3dlZCB0byBiZQorCSAqIHNlcnZl
ZCBzdGFsZSBvciBzdWNjZXNmdWxseSB2YWxpZGF0ZWQKKwkgKi8KKwkvKiBUT0RPIGNvbnNpZGVy
IGFsc28gcHJveHktcmV2YWxpZGF0ZSAmIHMtbWF4YWdlICovCisJaWYgKGVudHJ5LT5tdXN0X3Jl
dmFsaWRhdGUpCisJCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9ORUVEU19WQUxJ
REFUSU9OOworCisJaWYgKCF3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9pc19mcmVzaF9lbm91Z2gg
KGVudHJ5LCBtaW5fZnJlc2gpKSB7CisJCS8qIE5vdCBmcmVzaCwgY2FuIGl0IGJlIHNlcnZlZCBz
dGFsZT8gKi8KKwkJaWYgKG1heF9zdGFsZSAhPSAtMSkgeworCQkJLyogR19NQVhJTlQzMiBtZWFu
cyB3ZSBhY2NlcHQgYW55IHN0YWxlbmVzcyAqLworCQkJaWYgKG1heF9zdGFsZSA9PSBHX01BWElO
VDMyKQorCQkJCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9GUkVTSDsKKworCQkJ
aWYgKCh3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9nZXRfY3VycmVudF9hZ2UgKGVudHJ5KSAtIGVu
dHJ5LT5mcmVzaG5lc3NfbGlmZXRpbWUpIDw9IG1heF9zdGFsZSkKKwkJCQlyZXR1cm4gV0VCS0lU
X1NPVVBfQ0FDSEVfUkVTUE9OU0VfRlJFU0g7CisJCX0KKworCQlyZXR1cm4gV0VCS0lUX1NPVVBf
Q0FDSEVfUkVTUE9OU0VfTkVFRFNfVkFMSURBVElPTjsKKwl9CisKKwlyZXR1cm4gV0VCS0lUX1NP
VVBfQ0FDSEVfUkVTUE9OU0VfRlJFU0g7Cit9CisKKy8qKgorICogd2Via2l0X3NvdXBfY2FjaGVf
Z2V0X2NhY2hlYWJpbGl0eToKKyAqIEBjYWNoZTogYSAjV2ViS2l0U291cENhY2hlCisgKiBAbXNn
OiBhICNTb3VwTWVzc2FnZQorICoKKyAqIENhbGN1bGF0ZXMgd2hldGhlciB0aGUgQG1zZyBjYW4g
YmUgY2FjaGVkIG9yIG5vdC4KKyAqCisgKiBSZXR1cm5zOiBhICNXZWJLaXRTb3VwQ2FjaGVhYmls
aXR5IHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0aGUgQG1zZyBjYW4gYmUgY2FjaGVkIG9yIG5v
dC4KKyAqKi8KK1dlYktpdFNvdXBDYWNoZWFiaWxpdHkKK3dlYmtpdF9zb3VwX2NhY2hlX2dldF9j
YWNoZWFiaWxpdHkgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsIFNvdXBNZXNzYWdlICptc2cpCit7
CisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFdFQktJVF9JU19TT1VQX0NBQ0hFIChjYWNoZSksIFdF
QktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFKTsKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoU09V
UF9JU19NRVNTQUdFIChtc2cpLCBXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRSk7CisKKwly
ZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfR0VUX0NMQVNTIChjYWNoZSktPmdldF9jYWNoZWFiaWxp
dHkgKGNhY2hlLCBtc2cpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2ZvcmNlX2ZsdXNoX3RpbWVv
dXQgKGdwb2ludGVyIGRhdGEpCit7CisJZ2Jvb2xlYW4gKmZvcmNlZCA9IChnYm9vbGVhbiAqKWRh
dGE7CisJKmZvcmNlZCA9IFRSVUU7CisKKwlyZXR1cm4gRkFMU0U7Cit9CisKKy8qKgorICogd2Vi
a2l0X3NvdXBfY2FjaGVfZmx1c2g6CisgKiBAY2FjaGU6IGEgI1dlYktpdFNvdXBDYWNoZQorICog
QHNlc3Npb246IHRoZSAjU291cFNlc3Npb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBAY2FjaGUKKyAq
CisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZm9yY2UgYWxsIHBlbmRpbmcgd3JpdGVzIGluIHRoZSBA
Y2FjaGUgdG8gYmUKKyAqIGNvbW1pdHRlZCB0byBkaXNrLiBGb3IgZG9pbmcgc28gaXQgd2lsbCBp
dGVyYXRlIHRoZSAjR01haW5Db250ZXh0CisgKiBhc3NvY2lhdGVkIHdpdGggdGhlIEBzZXNzaW9u
ICh3aGljaCBjYW4gYmUgdGhlIGRlZmF1bHQgb25lKSBhcyBsb25nCisgKiBhcyBuZWVkZWQuCisg
KiovCit2b2lkCit3ZWJraXRfc291cF9jYWNoZV9mbHVzaCAoV2ViS2l0U291cENhY2hlICpjYWNo
ZSkKK3sKKwlHTWFpbkNvbnRleHQgKmFzeW5jX2NvbnRleHQ7CisJU291cFNlc3Npb24gKnNlc3Np
b247CisJZ3VpbnQgdGltZW91dF9pZDsKKwlnYm9vbGVhbiBmb3JjZWQgPSBGQUxTRTsKKworCWdf
cmV0dXJuX2lmX2ZhaWwgKFdFQktJVF9JU19TT1VQX0NBQ0hFIChjYWNoZSkpOworCisJc2Vzc2lv
biA9IGNhY2hlLT5wcml2LT5zZXNzaW9uOworCWdfcmV0dXJuX2lmX2ZhaWwgKFNPVVBfSVNfU0VT
U0lPTiAoc2Vzc2lvbikpOworCWFzeW5jX2NvbnRleHQgPSBzb3VwX3Nlc3Npb25fZ2V0X2FzeW5j
X2NvbnRleHQgKHNlc3Npb24pOworCisJLyogV2UgZ2l2ZSBjYWNoZSAxMCBzZWNzIHRvIGZpbmlz
aCAqLworCXRpbWVvdXRfaWQgPSBnX3RpbWVvdXRfYWRkICgxMDAwMCwgZm9yY2VfZmx1c2hfdGlt
ZW91dCwgJmZvcmNlZCk7CisKKwl3aGlsZSAoIWZvcmNlZCAmJiBjYWNoZS0+cHJpdi0+bl9wZW5k
aW5nID4gMCkKKwkJZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uIChhc3luY19jb250ZXh0LCBGQUxT
RSk7CisKKwlpZiAoIWZvcmNlZCkKKwkJZ19zb3VyY2VfcmVtb3ZlICh0aW1lb3V0X2lkKTsKKwll
bHNlCisJCWdfd2FybmluZyAoIkNhY2hlIGZsdXNoIGZpbmlzaGVkIGRlc3BpdGUgJWQgcGVuZGlu
ZyByZXF1ZXN0cyIsIGNhY2hlLT5wcml2LT5uX3BlbmRpbmcpOworfQorCitzdGF0aWMgdm9pZAor
Y2xlYXJfY2FjaGVfaXRlbSAoZ3BvaW50ZXIga2V5LAorCQkgIGdwb2ludGVyIHZhbHVlLAorCQkg
IFdlYktpdFNvdXBDYWNoZSAqY2FjaGUpCit7CisJV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5
ID0gZ19oYXNoX3RhYmxlX2xvb2t1cCAoY2FjaGUtPnByaXYtPmNhY2hlLCAoY29uc3QgZ2NoYXIg
KilrZXkpOworCWlmICh3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9yZW1vdmUgKGNhY2hlLCBlbnRy
eSkpCisJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUgKGVudHJ5LCBUUlVFKTsKK30KKwor
LyoqCisgKiB3ZWJraXRfc291cF9jYWNoZV9jbGVhcjoKKyAqIEBjYWNoZTogYSAjV2ViS2l0U291
cENhY2hlCisgKgorICogV2lsbCByZW1vdmUgYWxsIGVudHJpZXMgaW4gdGhlIEBjYWNoZSBwbHVz
IGFsbCB0aGUgY2FjaGUgZmlsZXMKKyAqIGFzc29jaWF0ZWQgd2l0aCB0aGVtLgorICoqLwordm9p
ZAord2Via2l0X3NvdXBfY2FjaGVfY2xlYXIgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUpCit7CisJ
R0hhc2hUYWJsZSAqaGFzaDsKKworCWdfcmV0dXJuX2lmX2ZhaWwgKFdFQktJVF9JU19TT1VQX0NB
Q0hFIChjYWNoZSkpOworCisJaGFzaCA9IGNhY2hlLT5wcml2LT5jYWNoZTsKKwlnX3JldHVybl9p
Zl9mYWlsIChoYXNoKTsKKworCWdfaGFzaF90YWJsZV9mb3JlYWNoIChoYXNoLCAoR0hGdW5jKWNs
ZWFyX2NhY2hlX2l0ZW0sIGNhY2hlKTsKK30KKworU291cE1lc3NhZ2UgKgord2Via2l0X3NvdXBf
Y2FjaGVfZ2VuZXJhdGVfY29uZGl0aW9uYWxfcmVxdWVzdCAoV2ViS2l0U291cENhY2hlICpjYWNo
ZSwgU291cE1lc3NhZ2UgKm9yaWdpbmFsKQoreworCVNvdXBNZXNzYWdlICptc2c7CisJU291cFVS
SSAqdXJpOworCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeTsKKwljaGFyICprZXk7CisJY29u
c3QgY2hhciAqdmFsdWU7CisKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoV0VCS0lUX0lTX1NPVVBf
Q0FDSEUgKGNhY2hlKSwgTlVMTCk7CisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFNPVVBfSVNfTUVT
U0FHRSAob3JpZ2luYWwpLCBOVUxMKTsKKworCS8qIEZpcnN0IGNvcHkgdGhlIGRhdGEgd2UgbmVl
ZCBmcm9tIHRoZSBvcmlnaW5hbCBtZXNzYWdlICovCisJdXJpID0gc291cF9tZXNzYWdlX2dldF91
cmkgKG9yaWdpbmFsKTsKKwltc2cgPSBzb3VwX21lc3NhZ2VfbmV3X2Zyb21fdXJpIChvcmlnaW5h
bC0+bWV0aG9kLCB1cmkpOworCisJc291cF9tZXNzYWdlX2hlYWRlcnNfZm9yZWFjaCAob3JpZ2lu
YWwtPnJlcXVlc3RfaGVhZGVycywKKwkJCQkgICAgICAoU291cE1lc3NhZ2VIZWFkZXJzRm9yZWFj
aEZ1bmMpY29weV9oZWFkZXJzLAorCQkJCSAgICAgIG1zZy0+cmVxdWVzdF9oZWFkZXJzKTsKKwor
CS8qIE5vdyBhZGQgdGhlIHZhbGlkYXRvciBlbnRyaWVzIGluIHRoZSBoZWFkZXIgZnJvbSB0aGUg
Y2FjaGVkCisJICAgZGF0YSAqLworCWtleSA9IHNvdXBfbWVzc2FnZV9nZXRfY2FjaGVfa2V5IChv
cmlnaW5hbCk7CisJZW50cnkgPSBnX2hhc2hfdGFibGVfbG9va3VwIChjYWNoZS0+cHJpdi0+Y2Fj
aGUsIGtleSk7CisJZ19mcmVlIChrZXkpOworCisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGVudHJ5
LCBOVUxMKTsKKworCWVudHJ5LT5iZWluZ192YWxpZGF0ZWQgPSBUUlVFOworCisJdmFsdWUgPSBz
b3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKGVudHJ5LT5oZWFkZXJzLCAiTGFzdC1Nb2RpZmllZCIp
OworCWlmICh2YWx1ZSkKKwkJc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kIChtc2ctPnJlcXVl
c3RfaGVhZGVycywKKwkJCQkJICAgICAiSWYtTW9kaWZpZWQtU2luY2UiLAorCQkJCQkgICAgIHZh
bHVlKTsKKwl2YWx1ZSA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldCAoZW50cnktPmhlYWRlcnMs
ICJFVGFnIik7CisJaWYgKHZhbHVlKQorCQlzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQgKG1z
Zy0+cmVxdWVzdF9oZWFkZXJzLAorCQkJCQkgICAgICJJZi1Ob25lLU1hdGNoIiwKKwkJCQkJICAg
ICB2YWx1ZSk7CisJcmV0dXJuIG1zZzsKK30KKworI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9G
SUxFICJzb3VwLmNhY2hlIgorCisjZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX0hFQURFUlNfRk9S
TUFUICJ7c3N9IgorI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9QSEVBREVSU19GT1JNQVQgIihz
c2J1dXV1dWEiIFdFQktJVF9TT1VQX0NBQ0hFX0hFQURFUlNfRk9STUFUICIpIgorI2RlZmluZSBX
RUJLSVRfU09VUF9DQUNIRV9FTlRSSUVTX0ZPUk1BVCAiYSIgV0VCS0lUX1NPVVBfQ0FDSEVfUEhF
QURFUlNfRk9STUFUCisKKy8qIEJhc2ljYWxseSB0aGUgc2FtZSBmb3JtYXQgdGhhbiBhYm92ZSBl
eGNlcHQgdGhhdCBzb21lIHN0cmluZ3MgYXJlCisgICBwcmVwZW5kZWQgd2l0aCAmLiBUaGlzIHdh
eSB0aGUgR1ZhcmlhbnQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlCisgICBkYXRhIGluc3RlYWQg
b2YgZHVwbGljYXRpbmcgdGhlIHN0cmluZyAqLworI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9E
RUNPREVfSEVBREVSU19GT1JNQVQgInsmcyZzfSIKKworc3RhdGljIHZvaWQKK3BhY2tfZW50cnkg
KGdwb2ludGVyIGRhdGEsCisJICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlXZWJLaXRTb3Vw
Q2FjaGVFbnRyeSAqZW50cnkgPSAoV2ViS2l0U291cENhY2hlRW50cnkgKikgZGF0YTsKKwlTb3Vw
TWVzc2FnZUhlYWRlcnNJdGVyIGl0ZXI7CisJY29uc3QgZ2NoYXIgKmhlYWRlcl9rZXksICpoZWFk
ZXJfdmFsdWU7CisJR1ZhcmlhbnRCdWlsZGVyICpoZWFkZXJzX2J1aWxkZXI7CisJR1ZhcmlhbnRC
dWlsZGVyICplbnRyaWVzX2J1aWxkZXIgPSAoR1ZhcmlhbnRCdWlsZGVyICopdXNlcl9kYXRhOwor
CisJLyogRG8gbm90IHN0b3JlIG5vbi1jb25zb2xpZGF0ZWQgZW50cmllcyAqLworCWlmIChlbnRy
eS0+ZGlydHkgfHwgZW50cnktPndyaXRpbmcgfHwgIWVudHJ5LT5rZXkpCisJCXJldHVybjsKKwor
CS8qIFBhY2sgaGVhZGVycyAqLworCWhlYWRlcnNfYnVpbGRlciA9IGdfdmFyaWFudF9idWlsZGVy
X25ldyAoR19WQVJJQU5UX1RZUEVfQVJSQVkpOworCXNvdXBfbWVzc2FnZV9oZWFkZXJzX2l0ZXJf
aW5pdCAoJml0ZXIsIGVudHJ5LT5oZWFkZXJzKTsKKwl3aGlsZSAoc291cF9tZXNzYWdlX2hlYWRl
cnNfaXRlcl9uZXh0ICgmaXRlciwgJmhlYWRlcl9rZXksICZoZWFkZXJfdmFsdWUpKSB7CisJCWlm
IChnX3V0ZjhfdmFsaWRhdGUgKGhlYWRlcl92YWx1ZSwgLTEsIE5VTEwpKQorCQkJZ192YXJpYW50
X2J1aWxkZXJfYWRkIChoZWFkZXJzX2J1aWxkZXIsIFdFQktJVF9TT1VQX0NBQ0hFX0hFQURFUlNf
Rk9STUFULAorCQkJCQkgICAgICAgaGVhZGVyX2tleSwgaGVhZGVyX3ZhbHVlKTsKKwl9CisKKwkv
KiBFbnRyeSBkYXRhICovCisJZ192YXJpYW50X2J1aWxkZXJfYWRkIChlbnRyaWVzX2J1aWxkZXIs
IFdFQktJVF9TT1VQX0NBQ0hFX1BIRUFERVJTX0ZPUk1BVCwKKwkJCSAgICAgICBlbnRyeS0+a2V5
LCBlbnRyeS0+ZmlsZW5hbWUsIGVudHJ5LT5tdXN0X3JldmFsaWRhdGUsCisJCQkgICAgICAgZW50
cnktPmZyZXNobmVzc19saWZldGltZSwgZW50cnktPmNvcnJlY3RlZF9pbml0aWFsX2FnZSwKKwkJ
CSAgICAgICBlbnRyeS0+cmVzcG9uc2VfdGltZSwgZW50cnktPmhpdHMsIGVudHJ5LT5sZW5ndGgs
IGhlYWRlcnNfYnVpbGRlcik7CisKKwlnX3ZhcmlhbnRfYnVpbGRlcl91bnJlZiAoaGVhZGVyc19i
dWlsZGVyKTsKK30KKwordm9pZAord2Via2l0X3NvdXBfY2FjaGVfZHVtcCAoV2ViS2l0U291cENh
Y2hlICpjYWNoZSkKK3sKKwlXZWJLaXRTb3VwQ2FjaGVQcml2YXRlICpwcml2ID0gV0VCS0lUX1NP
VVBfQ0FDSEVfR0VUX1BSSVZBVEUgKGNhY2hlKTsKKwlnY2hhciAqZmlsZW5hbWU7CisJR1Zhcmlh
bnRCdWlsZGVyICplbnRyaWVzX2J1aWxkZXI7CisJR1ZhcmlhbnQgKmNhY2hlX3ZhcmlhbnQ7CisK
KwlpZiAoIWdfbGlzdF9sZW5ndGggKGNhY2hlLT5wcml2LT5scnVfc3RhcnQpKQorCQlyZXR1cm47
CisKKwkvKiBDcmVhdGUgdGhlIGJ1aWxkZXIgYW5kIGl0ZXJhdGUgb3ZlciBhbGwgZW50cmllcyAq
LworCWVudHJpZXNfYnVpbGRlciA9IGdfdmFyaWFudF9idWlsZGVyX25ldyAoR19WQVJJQU5UX1RZ
UEVfQVJSQVkpOworCWdfbGlzdF9mb3JlYWNoIChjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0LCBwYWNr
X2VudHJ5LCBlbnRyaWVzX2J1aWxkZXIpOworCisJLyogU2VyaWFsaXplIGFuZCBkdW1wICovCisJ
Y2FjaGVfdmFyaWFudCA9IGdfdmFyaWFudF9uZXcgKFdFQktJVF9TT1VQX0NBQ0hFX0VOVFJJRVNf
Rk9STUFULCBlbnRyaWVzX2J1aWxkZXIpOworCWdfdmFyaWFudF9idWlsZGVyX3VucmVmIChlbnRy
aWVzX2J1aWxkZXIpOworCisJZmlsZW5hbWUgPSBnX2J1aWxkX2ZpbGVuYW1lIChwcml2LT5jYWNo
ZV9kaXIsIFdFQktJVF9TT1VQX0NBQ0hFX0ZJTEUsIE5VTEwpOworCWdfZmlsZV9zZXRfY29udGVu
dHMgKGZpbGVuYW1lLCAoY29uc3QgZ2NoYXIgKilnX3ZhcmlhbnRfZ2V0X2RhdGEgKGNhY2hlX3Zh
cmlhbnQpLAorCQkJICAgICBnX3ZhcmlhbnRfZ2V0X3NpemUgKGNhY2hlX3ZhcmlhbnQpLCBOVUxM
KTsKKwlnX2ZyZWUgKGZpbGVuYW1lKTsKKwlnX3ZhcmlhbnRfdW5yZWYgKGNhY2hlX3ZhcmlhbnQp
OworfQorCit2b2lkCit3ZWJraXRfc291cF9jYWNoZV9sb2FkIChXZWJLaXRTb3VwQ2FjaGUgKmNh
Y2hlKQoreworCWdjaGFyICpmaWxlbmFtZSA9IE5VTEwsICpjb250ZW50cyA9IE5VTEw7CisJR1Zh
cmlhbnQgKmNhY2hlX3ZhcmlhbnQ7CisJR1ZhcmlhbnRJdGVyICplbnRyaWVzX2l0ZXIsICpoZWFk
ZXJzX2l0ZXI7CisJR1ZhcmlhbnRUeXBlICp2YXJpYW50X2Zvcm1hdDsKKwlnc2l6ZSBsZW5ndGg7
CisJV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5OworCVdlYktpdFNvdXBDYWNoZVByaXZhdGUg
KnByaXYgPSBjYWNoZS0+cHJpdjsKKworCWZpbGVuYW1lID0gZ19idWlsZF9maWxlbmFtZSAocHJp
di0+Y2FjaGVfZGlyLCBXRUJLSVRfU09VUF9DQUNIRV9GSUxFLCBOVUxMKTsKKwlpZiAoIWdfZmls
ZV9nZXRfY29udGVudHMgKGZpbGVuYW1lLCAmY29udGVudHMsICZsZW5ndGgsIE5VTEwpKSB7CisJ
CWdfZnJlZSAoZmlsZW5hbWUpOworCQlyZXR1cm47CisJfQorCWdfZnJlZSAoZmlsZW5hbWUpOwor
CisJdmFyaWFudF9mb3JtYXQgPSBnX3ZhcmlhbnRfdHlwZV9uZXcgKFdFQktJVF9TT1VQX0NBQ0hF
X0VOVFJJRVNfRk9STUFUKTsKKwljYWNoZV92YXJpYW50ID0gZ192YXJpYW50X25ld19mcm9tX2Rh
dGEgKHZhcmlhbnRfZm9ybWF0LCAoY29uc3QgZ2NoYXIgKiljb250ZW50cywgbGVuZ3RoLCBGQUxT
RSwgTlVMTCwgTlVMTCk7CisJZ192YXJpYW50X3R5cGVfZnJlZSAodmFyaWFudF9mb3JtYXQpOwor
CisJZ192YXJpYW50X2dldCAoY2FjaGVfdmFyaWFudCwgV0VCS0lUX1NPVVBfQ0FDSEVfRU5UUklF
U19GT1JNQVQsICZlbnRyaWVzX2l0ZXIpOworCWVudHJ5ID0gZ19zbGljZV9uZXcwIChXZWJLaXRT
b3VwQ2FjaGVFbnRyeSk7CisKKwl3aGlsZSAoZ192YXJpYW50X2l0ZXJfbG9vcCAoZW50cmllc19p
dGVyLCBXRUJLSVRfU09VUF9DQUNIRV9QSEVBREVSU19GT1JNQVQsCisJCQkJICAgICZlbnRyeS0+
a2V5LCAmZW50cnktPmZpbGVuYW1lLCAmZW50cnktPm11c3RfcmV2YWxpZGF0ZSwKKwkJCQkgICAg
JmVudHJ5LT5mcmVzaG5lc3NfbGlmZXRpbWUsICZlbnRyeS0+Y29ycmVjdGVkX2luaXRpYWxfYWdl
LAorCQkJCSAgICAmZW50cnktPnJlc3BvbnNlX3RpbWUsICZlbnRyeS0+aGl0cywgJmVudHJ5LT5s
ZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGVhZGVyc19pdGVy
KSkgeworCQljb25zdCBnY2hhciAqaGVhZGVyX2tleSwgKmhlYWRlcl92YWx1ZTsKKworCQkvKiBT
b3VwTWVzc2FnZSBIZWFkZXJzICovCisJCWVudHJ5LT5oZWFkZXJzID0gc291cF9tZXNzYWdlX2hl
YWRlcnNfbmV3IChTT1VQX01FU1NBR0VfSEVBREVSU19SRVNQT05TRSk7CisJCXdoaWxlIChnX3Zh
cmlhbnRfaXRlcl9sb29wIChoZWFkZXJzX2l0ZXIsIFdFQktJVF9TT1VQX0NBQ0hFX0RFQ09ERV9I
RUFERVJTX0ZPUk1BVCwgJmhlYWRlcl9rZXksICZoZWFkZXJfdmFsdWUpKQorCQkJc291cF9tZXNz
YWdlX2hlYWRlcnNfYXBwZW5kIChlbnRyeS0+aGVhZGVycywgaGVhZGVyX2tleSwgaGVhZGVyX3Zh
bHVlKTsKKworCQkvKiBJbnNlcnQgaW4gY2FjaGUgKi8KKwkJaWYgKCF3ZWJraXRfc291cF9jYWNo
ZV9lbnRyeV9pbnNlcnRfYnlfa2V5IChjYWNoZSwgKGNvbnN0IGdjaGFyICopZW50cnktPmtleSwg
ZW50cnksIEZBTFNFKSkKKwkJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUgKGVudHJ5LCBU
UlVFKTsKKworCQkvKiBOZXcgZW50cnkgZm9yIHRoZSBuZXh0IGl0ZXJhdGlvbi4gVGhpcyBjcmVh
dGVzIGFuCisJCSAgIGV4dHJhIG9iamVjdCB0aGUgbGFzdCBpdGVyYXRpb24gYnV0IGl0J3Mgd29y
dGggaXQKKwkJICAgYXMgd2Ugc2F2ZSBzZXZlcmFsIGlmJ3MgKi8KKwkJZW50cnkgPSBnX3NsaWNl
X25ldzAgKFdlYktpdFNvdXBDYWNoZUVudHJ5KTsKKwl9CisJLyogUmVtb3ZlIGxhc3QgY3JlYXRl
ZCBlbnRyeSAqLworCWdfc2xpY2VfZnJlZSAoV2ViS2l0U291cENhY2hlRW50cnksIGVudHJ5KTsK
KworCS8qIFNvcnQgTFJVIChzaG91bGRuJ3QgYmUgbmVlZGVkKS4gRmlyc3QgcmV2ZXJzZSBhcyBl
bGVtZW50cworCSAqIGFyZSBhbHdheXMgcHJlcGVuZGVkIHdoZW4gaW5zZXJ0aW5nCisJICovCisJ
Y2FjaGUtPnByaXYtPmxydV9zdGFydCA9IGdfbGlzdF9yZXZlcnNlIChjYWNoZS0+cHJpdi0+bHJ1
X3N0YXJ0KTsKKwljYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0ID0gZ19saXN0X3NvcnQgKGNhY2hlLT5w
cml2LT5scnVfc3RhcnQsIGxydV9jb21wYXJlX2Z1bmMpOworCisJLyogZnJlZXMgKi8KKwlnX3Zh
cmlhbnRfaXRlcl9mcmVlIChlbnRyaWVzX2l0ZXIpOworCWdfdmFyaWFudF91bnJlZiAoY2FjaGVf
dmFyaWFudCk7Cit9CisKK3ZvaWQKK3dlYmtpdF9zb3VwX2NhY2hlX3NldF9tYXhfc2l6ZSAoV2Vi
S2l0U291cENhY2hlICpjYWNoZSwKKwkJCQlndWludCBtYXhfc2l6ZSkKK3sKKwljYWNoZS0+cHJp
di0+bWF4X3NpemUgPSBtYXhfc2l6ZTsKKwljYWNoZS0+cHJpdi0+bWF4X2VudHJ5X2RhdGFfc2l6
ZSA9IGNhY2hlLT5wcml2LT5tYXhfc2l6ZSAvIE1BWF9FTlRSWV9EQVRBX1BFUkNFTlRBR0U7Cit9
CisKK2d1aW50Cit3ZWJraXRfc291cF9jYWNoZV9nZXRfbWF4X3NpemUgKFdlYktpdFNvdXBDYWNo
ZSAqY2FjaGUpCit7CisJcmV0dXJuIGNhY2hlLT5wcml2LT5tYXhfc2l6ZTsKK30KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hl
LmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNo
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MTdkM2UKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291
cC1jYWNoZS5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBzb3VwLWNhY2hlLmg6CisgKgorICog
Q29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIElnYWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdFQktJVF9TT1VQ
X0NBQ0hFX0gKKyNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FDSEVfSCAxCisKKyNpbmNsdWRlIDx3ZWJr
aXQvd2Via2l0ZGVmaW5lcy5oPgorCisjaW5jbHVkZSA8bGlic291cC9zb3VwLXR5cGVzLmg+Cisj
aW5jbHVkZSA8Z2lvL2dpby5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZ
UEVfU09VUF9DQUNIRSAgICAgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9nZXRfdHlwZSAoKSkK
KyNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FDSEUob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tf
SU5TVEFOQ0VfQ0FTVCAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUsIFdlYktpdFNvdXBD
YWNoZSkpCisjZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX0NMQVNTKGtsYXNzKSAgICAoR19UWVBF
X0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUsIFdlYktp
dFNvdXBDYWNoZUNsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1NPVVBfQ0FDSEUob2JqKSAgICAg
ICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBf
Q0FDSEUpKQorI2RlZmluZSBXRUJLSVRfSVNfU09VUF9DQUNIRV9DTEFTUyhrbGFzcykgKEdfVFlQ
RV9DSEVDS19DTEFTU19UWVBFICgob2JqKSwgV0VCS0lUX1RZUEVfU09VUF9DQUNIRSkpCisjZGVm
aW5lIFdFQktJVF9TT1VQX0NBQ0hFX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dF
VF9DTEFTUyAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUsIFdlYktpdFNvdXBDYWNoZUNs
YXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBDYWNoZSBXZWJLaXRTb3VwQ2FjaGU7
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0U291cENhY2hlUHJpdmF0ZSBXZWJLaXRTb3VwQ2FjaGVQ
cml2YXRlOworCit0eXBlZGVmIGVudW0geworCVdFQktJVF9TT1VQX0NBQ0hFX0NBQ0hFQUJMRSA9
ICgxIDw8IDApLAorCVdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFID0gKDEgPDwgMSksCisJ
V0VCS0lUX1NPVVBfQ0FDSEVfSU5WQUxJREFURVMgPSAoMSA8PCAyKSwKKwlXRUJLSVRfU09VUF9D
QUNIRV9WQUxJREFURVMgPSAoMSA8PCAzKQorfSBXZWJLaXRTb3VwQ2FjaGVhYmlsaXR5OworCit0
eXBlZGVmIGVudW0geworCVdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX0ZSRVNILAorCVdFQktJ
VF9TT1VQX0NBQ0hFX1JFU1BPTlNFX05FRURTX1ZBTElEQVRJT04sCisJV0VCS0lUX1NPVVBfQ0FD
SEVfUkVTUE9OU0VfU1RBTEUKK30gV2ViS2l0U291cENhY2hlUmVzcG9uc2U7CisKK3R5cGVkZWYg
ZW51bSB7CisJV0VCS0lUX1NPVVBfQ0FDSEVfU0lOR0xFX1VTRVIsCisJV0VCS0lUX1NPVVBfQ0FD
SEVfU0hBUkVECit9IFdlYktpdFNvdXBDYWNoZVR5cGU7CisKK3N0cnVjdCBfV2ViS2l0U291cENh
Y2hlIHsKKwlHT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKKworCVdlYktpdFNvdXBDYWNoZVByaXZh
dGUgKnByaXY7Cit9OworCit0eXBlZGVmIHN0cnVjdCB7CisJR09iamVjdENsYXNzIHBhcmVudF9j
bGFzczsKKworCS8qIG1ldGhvZHMgKi8KKwlXZWJLaXRTb3VwQ2FjaGVhYmlsaXR5ICgqZ2V0X2Nh
Y2hlYWJpbGl0eSkoV2ViS2l0U291cENhY2hlICpjYWNoZSwgU291cE1lc3NhZ2UgKm1zZyk7CisK
KwkvKiBQYWRkaW5nIGZvciBmdXR1cmUgZXhwYW5zaW9uICovCisJdm9pZCAoKl9saWJzb3VwX3Jl
c2VydmVkMSkodm9pZCk7CisJdm9pZCAoKl9saWJzb3VwX3Jlc2VydmVkMikodm9pZCk7CisJdm9p
ZCAoKl9saWJzb3VwX3Jlc2VydmVkMykodm9pZCk7Cit9IFdlYktpdFNvdXBDYWNoZUNsYXNzOwor
CitXRUJLSVRfQVBJIEdUeXBlICAgICAgICAgICAgIHdlYmtpdF9zb3VwX2NhY2hlX2dldF90eXBl
ICh2b2lkKTsKK1dFQktJVF9BUEkgV2ViS2l0U291cENhY2hlICAqd2Via2l0X3NvdXBfY2FjaGVf
bmV3IChjb25zdCBjaGFyICAqY2FjaGVfZGlyLAorCQkJCQkJICAgIFdlYktpdFNvdXBDYWNoZVR5
cGUgY2FjaGVfdHlwZSk7CitXRUJLSVRfQVBJIHZvaWQgICAgICAgICAgICAgIHdlYmtpdF9zb3Vw
X2NhY2hlX2ZsdXNoIChXZWJLaXRTb3VwQ2FjaGUgICAqY2FjaGUpOworV0VCS0lUX0FQSSB2b2lk
ICAgICAgICAgICAgICB3ZWJraXRfc291cF9jYWNoZV9jbGVhciAoV2ViS2l0U291cENhY2hlICAg
KmNhY2hlKTsKKworV0VCS0lUX0FQSSB2b2lkICAgICAgICAgICAgICB3ZWJraXRfc291cF9jYWNo
ZV9kdW1wIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKTsKK1dFQktJVF9BUEkgdm9pZCAgICAgICAg
ICAgICAgd2Via2l0X3NvdXBfY2FjaGVfbG9hZCAoV2ViS2l0U291cENhY2hlICpjYWNoZSk7CisK
K1dFQktJVF9BUEkgdm9pZCAgICAgICAgICAgICAgd2Via2l0X3NvdXBfY2FjaGVfc2V0X21heF9z
aXplIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLAorCQkJCQkJCSAgICAgZ3VpbnQgbWF4X3NpemUp
OworV0VCS0lUX0FQSSBndWludCAgICAgICAgICAgICB3ZWJraXRfc291cF9jYWNoZV9nZXRfbWF4
X3NpemUgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUpOworCitHX0VORF9ERUNMUworCisKKyNlbmRp
ZiAvKiBXRUJLSVRfU09VUF9DQUNIRV9IICovCisKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0No
YW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxvZwppbmRleCA0NDI0YWMzLi4yOWI1YTcyIDEw
MDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMDktMDYgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxz
dmlsbGFyQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgW0dUS10gQWRkIEhUVFAgY2FjaGluZyBzdXBwb3J0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDI2MQorCisgICAgICAgICogR05V
bWFrZWZpbGUuYW06IGFkZGVkIHBhdGhzIGZvciB0aGUgbmV3IHNvdXAgSFRUUCBjYWNoZSBjb2Rl
CisKIDIwMTAtMDktMjIgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0dOVW1h
a2VmaWxlLmFtIGIvV2ViS2l0VG9vbHMvR05VbWFrZWZpbGUuYW0KaW5kZXggZTM4NDEwMS4uY2Fj
ZjA1YiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViS2l0
VG9vbHMvR05VbWFrZWZpbGUuYW0KQEAgLTYsNiArNiw3IEBAIG5vaW5zdF9QUk9HUkFNUyArPSBc
CiAjIEd0a0xhdW5jaGVyCiBQcm9ncmFtc19HdGtMYXVuY2hlcl9DUFBGTEFHUyA9IFwKIAktSSQo
c3JjZGlyKS9XZWJLaXQvZ3RrIFwKKwktSSQoc3JjZGlyKS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9jYWNoZS8gXAogCS1JJCh0b3BfYnVpbGRkaXIpL1dlYktpdC9ndGsgXAogCS1JJCh0
b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzIFwKIAkkKGdsb2JhbF9jcHBmbGFncykgXApAQCAt
MzgsNiArMzksNyBAQCBkdW1wcmVuZGVydHJlZV9jcHBmbGFncyA6PSBcCiAJLUkkKHNyY2Rpcikv
V2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrIFwKIAktSSQoc3JjZGlyKS9XZWJLaXQvZ3Rr
IFwKIAktSSQoc3JjZGlyKS9XZWJDb3JlL3BsYXRmb3JtL2d0ayBcCisJLUkkKHNyY2RpcikvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvIFwKIAktSSQodG9wX2J1aWxkZGlyKS9X
ZWJLaXQvZ3RrIFwKIAktSSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcyBcCiAJJChnbG9i
YWxfY3BwZmxhZ3MpIFwKZGlmZiAtLWdpdCBhL2F1dG90b29scy93ZWJraXQubTQgYi9hdXRvdG9v
bHMvd2Via2l0Lm00CmluZGV4IDM3OWZhOGYuLjZiNDRmMzAgMTAwNjQ0Ci0tLSBhL2F1dG90b29s
cy93ZWJraXQubTQKKysrIGIvYXV0b3Rvb2xzL3dlYmtpdC5tNApAQCAtMTA4LDcgKzEwOCw3IEBA
IEFDX0RFRlVOX09OQ0UoW19XRUJLSVRfQ0hFQ0tfR0xJQl0sCiBbZG5sCiBkbmwgY2hlY2sgZm9y
IGdsaWIKICMgVmVyc2lvbiByZXF1aXJlbWVudHMKLUdMSUJfUkVRVUlSRURfVkVSU0lPTj0yLjIx
LjMKK0dMSUJfUkVRVUlSRURfVkVSU0lPTj0yLjI0CiBHT0JKRUNUX1JFUVVJUkVEX1ZFUlNJT049
Mi4wCiBHVEhSRUFEX1JFUVVJUkVEX1ZFUlNJT049Mi4wCiAKLS0gCjEuNy4xCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68664</attachid>
            <date>2010-09-24 02:47:35 -0700</date>
            <delta_ts>2010-09-29 10:17:55 -0700</delta_ts>
            <desc>WebKitGtk+ to use the new API from the imported SoupURILoader code</desc>
            <filename>0001-WebKitGtk-to-use-the-new-API-from-the-imported-SoupU.patch</filename>
            <type>text/plain</type>
            <size>31433</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">RnJvbSA4ZWYyOGYzY2RhNjJmYjk0YTU0ODQ2ZGNjOGI5MzQ0MDJhZGZkMzczIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTZXJnaW8gVmlsbGFyIFNlbmluIDxzdmlsbGFyQGlnYWxpYS5j
b20+CkRhdGU6IFdlZCwgMjIgU2VwIDIwMTAgMTA6MTg6MDYgKzAyMDAKU3ViamVjdDogW1BBVENI
XSBXZWJLaXRHdGsrIHRvIHVzZSB0aGUgbmV3IEFQSSBmcm9tIHRoZSBpbXBvcnRlZCBTb3VwVVJJ
TG9hZGVyIGNvZGUKCi0tLQogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxl
SW50ZXJuYWwuaCAgfCAgIDE3ICstCiAuLi4vcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNl
SGFuZGxlU291cC5jcHAgICB8ICA0NzMgKysrKysrKysrLS0tLS0tLS0tLS0KIFdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdC5oICAgIHwgICAgMyArLQogLi4uL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcCAgfCAgIDIzICsKIDQg
ZmlsZXMgY2hhbmdlZCwgMjU4IGluc2VydGlvbnMoKyksIDI1OCBkZWxldGlvbnMoLSkKCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5o
IGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaAppbmRl
eCAxZjJjZmY5Li41ZTViYmU1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
UmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZUludGVybmFsLmgKQEAgLTQ2LDYgKzQ2LDkgQEAKICNlbmRpZgogCiAjaWYg
VVNFKFNPVVApCisjaW5jbHVkZSAic291cC1yZXF1ZXN0LmgiCisjaW5jbHVkZSAic291cC1yZXF1
ZXN0ZXIuaCIKKyNpbmNsdWRlIDxHUmVmUHRyLmg+CiAjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+
CiBjbGFzcyBGcmFtZTsKICNlbmRpZgpAQCAtMTExLDEzICsxMTQsMTQgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogI2lmIFVTRShTT1VQKQogICAgICAgICAgICAgLCBtX21zZygwKQogICAgICAgICAg
ICAgLCBtX2NhbmNlbGxlZChmYWxzZSkKLSAgICAgICAgICAgICwgbV9nZmlsZSgwKQorICAgICAg
ICAgICAgLCBtX3NvdXBSZXF1ZXN0KDApCisgICAgICAgICAgICAsIG1fcmVxdWVzdGVyKDApCiAg
ICAgICAgICAgICAsIG1faW5wdXRTdHJlYW0oMCkKICAgICAgICAgICAgICwgbV9jYW5jZWxsYWJs
ZSgwKQogICAgICAgICAgICAgLCBtX2J1ZmZlcigwKQotICAgICAgICAgICAgLCBtX2J1ZmZlclNp
emUoMCkKICAgICAgICAgICAgICwgbV90b3RhbCgwKQogICAgICAgICAgICAgLCBtX2lkbGVIYW5k
bGVyKDApCisgICAgICAgICAgICAsIG1fZ290Q2h1bmtIYW5kbGVyKDApCiAjZW5kaWYKICNpZiBQ
TEFURk9STShRVCkKICAgICAgICAgICAgICwgbV9qb2IoMCkKQEAgLTEzNCw2ICsxMzgsOSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBtX3VzZXIgPSB1cmwudXNlcigpOwogICAg
ICAgICAgICAgbV9wYXNzID0gdXJsLnBhc3MoKTsKICAgICAgICAgICAgIG1fZmlyc3RSZXF1ZXN0
LnJlbW92ZUNyZWRlbnRpYWxzKCk7CisjaWYgVVNFKFNPVVApCisgICAgICAgICAgICBtX3JlcXVl
c3RlciA9IHNvdXBfcmVxdWVzdGVyX25ldygpOworI2VuZGlmCiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIH5SZXNvdXJjZUhhbmRsZUludGVybmFsKCk7CkBAIC0xOTAsMTMgKzE5NywxNSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFNvdXBNZXNzYWdlKiBtX21zZzsKICAgICAg
ICAgUmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOwogICAgICAgICBib29sIG1fY2FuY2VsbGVk
OwotICAgICAgICBHRmlsZSogbV9nZmlsZTsKKyAgICAgICAgUGxhdGZvcm1SZWZQdHI8U291cFJl
cXVlc3Q+IG1fc291cFJlcXVlc3Q7CisgICAgICAgIFBsYXRmb3JtUmVmUHRyPFNvdXBSZXF1ZXN0
ZXI+IG1fcmVxdWVzdGVyOwogICAgICAgICBHSW5wdXRTdHJlYW0qIG1faW5wdXRTdHJlYW07CiAg
ICAgICAgIEdDYW5jZWxsYWJsZSogbV9jYW5jZWxsYWJsZTsKICAgICAgICAgY2hhciogbV9idWZm
ZXI7Ci0gICAgICAgIGdzaXplIG1fYnVmZmVyU2l6ZSwgbV90b3RhbDsKKyAgICAgICAgZ3NpemUg
bV90b3RhbDsKICAgICAgICAgZ3VpbnQgbV9pZGxlSGFuZGxlcjsKICAgICAgICAgUmVmUHRyPE5l
dHdvcmtpbmdDb250ZXh0PiBtX2NvbnRleHQ7CisgICAgICAgIGd1bG9uZyBtX2dvdENodW5rSGFu
ZGxlcjsKICNlbmRpZgogI2lmIFBMQVRGT1JNKFFUKQogICAgICAgICBRTmV0d29ya1JlcGx5SGFu
ZGxlciogbV9qb2I7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9S
ZXNvdXJjZUhhbmRsZVNvdXAuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVz
b3VyY2VIYW5kbGVTb3VwLmNwcAppbmRleCAwMDA5ZTM2Li4wZjU5NTVlIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKQEAg
LTQ1LDggKzQ1LDggQEAKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCiAjaW5j
bHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2lu
Y2x1ZGUgInNvdXAtcmVxdWVzdC1odHRwLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCi0K
ICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8Z2lvL2dp
by5oPgpAQCAtNTgsNiArNTgsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNkZWZpbmUg
UkVBRF9CVUZGRVJfU0laRSA4MTkyCisKIGNsYXNzIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlciA6
IHB1YmxpYyBSZXNvdXJjZUhhbmRsZUNsaWVudCwgcHVibGljIE5vbmNvcHlhYmxlIHsKIHB1Ymxp
YzoKICAgICBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXIoUmVzb3VyY2VFcnJvciYsIFJlc291cmNl
UmVzcG9uc2UgJiwgVmVjdG9yPGNoYXI+Jik7CkBAIC0xMjAsOSArMTIyLDExIEBAIHZvaWQgV2Vi
Q29yZVN5bmNocm9ub3VzTG9hZGVyOjpydW4oKQogICAgICAgICBnX21haW5fbG9vcF9ydW4obV9t
YWluTG9vcCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNsZWFudXBHaW9PcGVyYXRpb24oUmVzb3VyY2VI
YW5kbGUqIGhhbmRsZSwgYm9vbCBpc0Rlc3Ryb3lpbmcpOwotc3RhdGljIGJvb2wgc3RhcnREYXRh
KFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIFN0cmluZyB1cmxTdHJpbmcpOwotc3RhdGljIGJvb2wg
c3RhcnRHaW8oUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgS1VSTCB1cmwpOworc3RhdGljIHZvaWQg
Y2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKFJlc291cmNlSGFuZGxlKiwgYm9vbCBpc0Rlc3Ry
b3lpbmcpOworc3RhdGljIHZvaWQgc2VuZFJlcXVlc3RDYWxsYmFjayhHT2JqZWN0KiwgR0FzeW5j
UmVzdWx0KiwgZ3BvaW50ZXIpOworc3RhdGljIHZvaWQgcmVhZENhbGxiYWNrKEdPYmplY3QqLCBH
QXN5bmNSZXN1bHQqLCBncG9pbnRlcik7CitzdGF0aWMgdm9pZCBjbG9zZUNhbGxiYWNrKEdPYmpl
Y3QqLCBHQXN5bmNSZXN1bHQqLCBncG9pbnRlcik7CitzdGF0aWMgYm9vbCBzdGFydEdpbyhSZXNv
dXJjZUhhbmRsZSosIEtVUkwpOwogCiBSZXNvdXJjZUhhbmRsZUludGVybmFsOjp+UmVzb3VyY2VI
YW5kbGVJbnRlcm5hbCgpCiB7CkBAIC0xMzEsNiArMTM1LDkgQEAgUmVzb3VyY2VIYW5kbGVJbnRl
cm5hbDo6flJlc291cmNlSGFuZGxlSW50ZXJuYWwoKQogICAgICAgICBtX21zZyA9IDA7CiAgICAg
fQogCisgICAgaWYgKG1fc291cFJlcXVlc3QpCisgICAgICAgIGdfb2JqZWN0X3NldF9kYXRhKEdf
T0JKRUNUKG1fc291cFJlcXVlc3QuZ2V0KCkpLCAid2Via2l0LXJlc291cmNlIiwgMCk7CisKICAg
ICBpZiAobV9pZGxlSGFuZGxlcikgewogICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9pZGxlSGFu
ZGxlcik7CiAgICAgICAgIG1faWRsZUhhbmRsZXIgPSAwOwpAQCAtMTQzLDcgKzE1MCw3IEBAIFJl
c291cmNlSGFuZGxlOjp+UmVzb3VyY2VIYW5kbGUoKQogICAgICAgICBnX3NpZ25hbF9oYW5kbGVy
c19kaXNjb25uZWN0X21hdGNoZWQoZC0+bV9tc2csIEdfU0lHTkFMX01BVENIX0RBVEEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCB0aGlz
KTsKIAotICAgIGNsZWFudXBHaW9PcGVyYXRpb24odGhpcywgdHJ1ZSk7CisgICAgY2xlYW51cFNv
dXBSZXF1ZXN0T3BlcmF0aW9uKHRoaXMsIHRydWUpOwogfQogCiB2b2lkIFJlc291cmNlSGFuZGxl
OjpwcmVwYXJlRm9yVVJMKGNvbnN0IEtVUkwgJnVybCkKQEAgLTE4NSw5ICsxOTIsOCBAQCBzdGF0
aWMgdm9pZCByZXN0YXJ0ZWRDYWxsYmFjayhTb3VwTWVzc2FnZSogbXNnLCBncG9pbnRlciBkYXRh
KQogICAgIGlmIChkLT5tX2NhbmNlbGxlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY2hhciog
dXJpID0gc291cF91cmlfdG9fc3RyaW5nKHNvdXBfbWVzc2FnZV9nZXRfdXJpKG1zZyksIGZhbHNl
KTsKLSAgICBTdHJpbmcgbG9jYXRpb24gPSBTdHJpbmcodXJpKTsKLSAgICBnX2ZyZWUodXJpKTsK
KyAgICBHT3duUHRyPGNoYXI+IHVyaShzb3VwX3VyaV90b19zdHJpbmcoc291cF9tZXNzYWdlX2dl
dF91cmkobXNnKSwgZmFsc2UpKTsKKyAgICBTdHJpbmcgbG9jYXRpb24gPSBTdHJpbmc6OmZyb21V
VEY4KHVyaS5nZXQoKSk7CiAgICAgS1VSTCBuZXdVUkwgPSBLVVJMKGhhbmRsZS0+Zmlyc3RSZXF1
ZXN0KCkudXJsKCksIGxvY2F0aW9uKTsKIAogICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0ID0g
aGFuZGxlLT5maXJzdFJlcXVlc3QoKTsKQEAgLTI5Myw1MCArMjk5LDcgQEAgc3RhdGljIHZvaWQg
Z290Q2h1bmtDYWxsYmFjayhTb3VwTWVzc2FnZSogbXNnLCBTb3VwQnVmZmVyKiBjaHVuaywgZ3Bv
aW50ZXIgZGF0YSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0
YShoYW5kbGUuZ2V0KCksIGNodW5rLT5kYXRhLCBjaHVuay0+bGVuZ3RoLCBmYWxzZSk7Ci19Ci0K
LS8vIENhbGxlZCBhdCB0aGUgZW5kIG9mIHRoZSBtZXNzYWdlLCB3aXRoIGFsbCB0aGUgbmVjZXNz
YXJ5IGFib3V0IHRoZSBsYXN0IGluZm9ybWF0aW9ucy4KLS8vIERvZXNuJ3QgZ2V0IGNhbGxlZCBm
b3IgcmVkaXJlY3RzLgotc3RhdGljIHZvaWQgZmluaXNoZWRDYWxsYmFjayhTb3VwU2Vzc2lvbiAq
c2Vzc2lvbiwgU291cE1lc3NhZ2UqIG1zZywgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBSZWZQdHI8
UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9IGFkb3B0UmVmKHN0YXRpY19jYXN0PFJlc291cmNlSGFu
ZGxlKj4oZGF0YSkpOwotICAgIC8vIFRPRE86IG1heWJlIHdlIHNob3VsZCBydW4gdGhpcyBjb2Rl
IGV2ZW4gaWYgdGhlcmUncyBubyBjbGllbnQ/Ci0gICAgaWYgKCFoYW5kbGUpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVy
bmFsKCk7Ci0KLSAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0gaGFuZGxlLT5jbGll
bnQoKTsKLSAgICBpZiAoIWNsaWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGQtPm1f
Y2FuY2VsbGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoU09VUF9TVEFUVVNfSVNfVFJB
TlNQT1JUX0VSUk9SKG1zZy0+c3RhdHVzX2NvZGUpKSB7Ci0gICAgICAgIGNoYXIqIHVyaSA9IHNv
dXBfdXJpX3RvX3N0cmluZyhzb3VwX21lc3NhZ2VfZ2V0X3VyaShtc2cpLCBmYWxzZSk7Ci0gICAg
ICAgIFJlc291cmNlRXJyb3IgZXJyb3IoZ19xdWFya190b19zdHJpbmcoU09VUF9IVFRQX0VSUk9S
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2ctPnN0YXR1c19jb2RlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVyaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
dHJpbmc6OmZyb21VVEY4KG1zZy0+cmVhc29uX3BocmFzZSkpOwotICAgICAgICBnX2ZyZWUodXJp
KTsKLSAgICAgICAgY2xpZW50LT5kaWRGYWlsKGhhbmRsZS5nZXQoKSwgZXJyb3IpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1zZy0+c3RhdHVzX2NvZGUgPT0gU09VUF9TVEFU
VVNfVU5BVVRIT1JJWkVEKSB7Ci0gICAgICAgIGZpbGxSZXNwb25zZUZyb21NZXNzYWdlKG1zZywg
JmQtPm1fcmVzcG9uc2UpOwotICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShoYW5k
bGUuZ2V0KCksIGQtPm1fcmVzcG9uc2UpOwotCi0gICAgICAgIC8vIFdlYkNvcmUgbWlnaHQgaGF2
ZSBjYW5jZWxsZWQgdGhlIGpvYiBpbiB0aGUgd2hpbGUKLSAgICAgICAgaWYgKGQtPm1fY2FuY2Vs
bGVkKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmIChtc2ctPnJlc3BvbnNlX2Jv
ZHktPmRhdGEpCi0gICAgICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVEYXRhKGhhbmRsZS5nZXQo
KSwgbXNnLT5yZXNwb25zZV9ib2R5LT5kYXRhLCBtc2ctPnJlc3BvbnNlX2JvZHktPmxlbmd0aCwg
dHJ1ZSk7Ci0gICAgfQogCi0gICAgY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKGhhbmRsZS5nZXQo
KSwgMCk7CiB9CiAKIC8vIHBhcnNlRGF0YVVybCgpIGlzIHRha2VuIGZyb20gdGhlIENVUkwgaHR0
cCBiYWNrZW5kLgpAQCAtMzY0LDcgKzMyNyw2IEBAIHN0YXRpYyBnYm9vbGVhbiBwYXJzZURhdGFV
cmwoZ3BvaW50ZXIgY2FsbGJhY2tEYXRhKQogICAgIH0KIAogICAgIFN0cmluZyBtZWRpYVR5cGUg
PSB1cmwuc3Vic3RyaW5nKDUsIGluZGV4IC0gNSk7Ci0gICAgU3RyaW5nIGRhdGEgPSB1cmwuc3Vi
c3RyaW5nKGluZGV4ICsgMSk7CiAKICAgICBib29sIGlzQmFzZTY0ID0gbWVkaWFUeXBlLmVuZHNX
aXRoKCI7YmFzZTY0IiwgZmFsc2UpOwogICAgIGlmIChpc0Jhc2U2NCkKQEAgLTM4MSw3ICszNDMs
NiBAQCBzdGF0aWMgZ2Jvb2xlYW4gcGFyc2VEYXRhVXJsKGdwb2ludGVyIGNhbGxiYWNrRGF0YSkK
ICAgICByZXNwb25zZS5zZXRNaW1lVHlwZShtaW1lVHlwZSk7CiAKICAgICBpZiAoaXNCYXNlNjQp
IHsKLSAgICAgICAgZGF0YSA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhkYXRhKTsKICAgICAg
ICAgcmVzcG9uc2Uuc2V0VGV4dEVuY29kaW5nTmFtZShjaGFyc2V0KTsKICAgICAgICAgY2xpZW50
LT5kaWRSZWNlaXZlUmVzcG9uc2UoaGFuZGxlLCByZXNwb25zZSk7CiAKQEAgLTM5MCwzMiArMzUx
LDM5IEBAIHN0YXRpYyBnYm9vbGVhbiBwYXJzZURhdGFVcmwoZ3BvaW50ZXIgY2FsbGJhY2tEYXRh
KQogICAgICAgICAvLyBvdXQgaW4gZWl0aGVyIG9mIHRob3NlIGNhc2VzLgogICAgICAgICBpZiAo
ZC0+bV9jYW5jZWxsZWQgfHwgIWhhbmRsZS0+Y2xpZW50KCkpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAgICAgLy8gVXNlIHRoZSBHTGliIEJhc2U2NCwgc2luY2UgV2ViQ29yZSdz
IGRlY29kZXIgaXNuJ3QKLSAgICAgICAgLy8gZ2VuZXJhbC1wdXJwb3NlIGFuZCBmYWlscyBvbiBB
Y2lkMyB0ZXN0IDk3ICh3aGl0ZXNwYWNlKS4KLSAgICAgICAgc2l6ZV90IG91dExlbmd0aCA9IDA7
Ci0gICAgICAgIGNoYXIqIG91dERhdGEgPSAwOwotICAgICAgICBvdXREYXRhID0gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oZ19iYXNlNjRfZGVjb2RlKGRhdGEudXRmOCgpLmRhdGEoKSwgJm91dExl
bmd0aCkpOwotICAgICAgICBpZiAob3V0RGF0YSAmJiBvdXRMZW5ndGggPiAwKQotICAgICAgICAg
ICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0YShoYW5kbGUsIG91dERhdGEsIG91dExlbmd0aCwgMCk7
Ci0gICAgICAgIGdfZnJlZShvdXREYXRhKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBXZSBo
YXZlIHRvIGNvbnZlcnQgdG8gVVRGLTE2IGVhcmx5IGR1ZSB0byBsaW1pdGF0aW9ucyBpbiBLVVJM
Ci0gICAgICAgIGRhdGEgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoZGF0YSwgVGV4dEVuY29k
aW5nKGNoYXJzZXQpKTsKICAgICAgICAgcmVzcG9uc2Uuc2V0VGV4dEVuY29kaW5nTmFtZSgiVVRG
LTE2Iik7CiAgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGhhbmRsZSwgcmVzcG9u
c2UpOwogCiAgICAgICAgIGlmIChkLT5tX2NhbmNlbGxlZCB8fCAhaGFuZGxlLT5jbGllbnQoKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoZGF0YS5sZW5ndGgoKSA+
IDApCi0gICAgICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVEYXRhKGhhbmRsZSwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKj4oZGF0YS5jaGFyYWN0ZXJzKCkpLCBkYXRhLmxlbmd0aCgpICog
c2l6ZW9mKFVDaGFyKSwgMCk7CiAgICAgfQogCiAgICAgaWYgKGQtPm1fY2FuY2VsbGVkIHx8ICFo
YW5kbGUtPmNsaWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBjbGllbnQtPmRp
ZEZpbmlzaExvYWRpbmcoaGFuZGxlLCAwKTsKKyAgICBTb3VwU2Vzc2lvbiogc2Vzc2lvbiA9IGhh
bmRsZS0+ZGVmYXVsdFNlc3Npb24oKTsKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAg
ZC0+bV9zb3VwUmVxdWVzdCA9IHNvdXBfcmVxdWVzdGVyX3JlcXVlc3QoZC0+bV9yZXF1ZXN0ZXIu
Z2V0KCksIGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEo
KSwgc2Vzc2lvbiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIEdJbnB1dFN0cmVhbSogaW4gPSBzb3VwX3JlcXVlc3Rfc2VuZChk
LT5tX3NvdXBSZXF1ZXN0LmdldCgpLCAwLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGlmIChlcnJv
cikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZC0+bV9pbnB1dFN0cmVhbSA9IGluOwor
ICAgIGQtPm1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGdfbWFsbG9jKFJFQURfQlVGRkVS
X1NJWkUpKTsKKyAgICBkLT5tX3RvdGFsID0gMDsKKworICAgIGdfb2JqZWN0X3NldF9kYXRhKEdf
T0JKRUNUKGQtPm1faW5wdXRTdHJlYW0pLCAid2Via2l0LXJlc291cmNlIiwgaGFuZGxlKTsKKyAg
ICAvLyBiYWxhbmNlZCBieSBhIGRlcmVmKCkgaW4gY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9u
LCB3aGljaCBzaG91bGQgYWx3YXlzIHJ1bgorICAgIGhhbmRsZS0+cmVmKCk7CisKKyAgICBkLT5t
X2NhbmNlbGxhYmxlID0gZ19jYW5jZWxsYWJsZV9uZXcoKTsKKyAgICBnX2lucHV0X3N0cmVhbV9y
ZWFkX2FzeW5jKGQtPm1faW5wdXRTdHJlYW0sIGQtPm1fYnVmZmVyLCBSRUFEX0JVRkZFUl9TSVpF
LCBHX1BSSU9SSVRZX0RFRkFVTFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLT5t
X2NhbmNlbGxhYmxlLCByZWFkQ2FsbGJhY2ssIChpc0Jhc2U2NCkgPyAwIDogR0lOVF9UT19QT0lO
VEVSKDEpKTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTQ2OSw2ICs0MzcsMTM5IEBAIHN0
YXRpYyB2b2lkIGVuc3VyZVNlc3Npb25Jc0luaXRpYWxpemVkKFNvdXBTZXNzaW9uKiBzZXNzaW9u
KQogICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKHNlc3Npb24pLCAid2Via2l0LWluaXQi
LCByZWludGVycHJldF9jYXN0PHZvaWQqPigweGRlYWRiZWVmKSk7CiB9CiAKK3N0YXRpYyB2b2lk
IGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBib29s
IGlzRGVzdHJveWluZyA9IGZhbHNlKQoreworICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQg
PSBoYW5kbGUtPmdldEludGVybmFsKCk7CisKKyAgICBpZiAoZC0+bV9zb3VwUmVxdWVzdCkgewor
ICAgICAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5tX3NvdXBSZXF1ZXN0LmdldCgp
KSwgIndlYmtpdC1yZXNvdXJjZSIsIDApOworICAgICAgICBkLT5tX3NvdXBSZXF1ZXN0LmNsZWFy
KCk7CisgICAgfQorCisgICAgaWYgKGQtPm1fY2FuY2VsbGFibGUpIHsKKyAgICAgICAgZ19vYmpl
Y3RfdW5yZWYoZC0+bV9jYW5jZWxsYWJsZSk7CisgICAgICAgIGQtPm1fY2FuY2VsbGFibGUgPSAw
OworICAgIH0KKworICAgIGlmIChkLT5tX2lucHV0U3RyZWFtKSB7CisgICAgICAgIGdfb2JqZWN0
X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1faW5wdXRTdHJlYW0pLCAid2Via2l0LXJlc291cmNlIiwg
MCk7CisgICAgICAgIGdfb2JqZWN0X3VucmVmKGQtPm1faW5wdXRTdHJlYW0pOworICAgICAgICBk
LT5tX2lucHV0U3RyZWFtID0gMDsKKyAgICB9CisKKyAgICBpZiAoZC0+bV9idWZmZXIpIHsKKyAg
ICAgICAgZ19mcmVlKGQtPm1fYnVmZmVyKTsKKyAgICAgICAgZC0+bV9idWZmZXIgPSAwOworICAg
IH0KKworICAgIGlmICghaXNEZXN0cm95aW5nKQorICAgICAgICBoYW5kbGUtPmRlcmVmKCk7Cit9
CisKK3N0YXRpYyB2b2lkIHNlbmRSZXF1ZXN0Q2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5
bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgUmVmUHRyPFJlc291cmNl
SGFuZGxlPiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGdfb2JqZWN0X2dl
dF9kYXRhKHNvdXJjZSwgIndlYmtpdC1yZXNvdXJjZSIpKTsKKyAgICBpZiAoIWhhbmRsZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+
Z2V0SW50ZXJuYWwoKTsKKyAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0gaGFuZGxl
LT5jbGllbnQoKTsKKworICAgIGlmIChkLT5tX2dvdENodW5rSGFuZGxlcikgeworICAgICAgICAv
LyBObyBuZWVkIHRvIGNhbGwgZ290Q2h1bmtIYW5kbGVyIGFueW1vcmUuIFJlY2VpdmVkIGRhdGEg
d2lsbAorICAgICAgICAvLyBiZSByZXBvcnRlZCBieSByZWFkQ2FsbGJhY2sKKyAgICAgICAgaWYg
KGdfc2lnbmFsX2hhbmRsZXJfaXNfY29ubmVjdGVkKGQtPm1fbXNnLCBkLT5tX2dvdENodW5rSGFu
ZGxlcikpCisgICAgICAgICAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QoZC0+bV9tc2cs
IGQtPm1fZ290Q2h1bmtIYW5kbGVyKTsKKyAgICB9CisKKyAgICBpZiAoZC0+bV9jYW5jZWxsZWQg
fHwgIWNsaWVudCkgeworICAgICAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxl
LmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEdPd25QdHI8R0Vycm9yPiBl
cnJvcjsKKyAgICBHSW5wdXRTdHJlYW0qIGluID0gc291cF9yZXF1ZXN0X3NlbmRfZmluaXNoKGQt
Pm1fc291cFJlcXVlc3QuZ2V0KCksIHJlcywgJmVycm9yLm91dFB0cigpKTsKKworICAgIGlmIChl
cnJvcikgeworICAgICAgICBpZiAoZC0+bV9tc2cgJiYgU09VUF9TVEFUVVNfSVNfVFJBTlNQT1JU
X0VSUk9SKGQtPm1fbXNnLT5zdGF0dXNfY29kZSkpIHsKKyAgICAgICAgICAgIFNvdXBVUkkqIHVy
aSA9IHNvdXBfcmVxdWVzdF9nZXRfdXJpKGQtPm1fc291cFJlcXVlc3QuZ2V0KCkpOworICAgICAg
ICAgICAgR093blB0cjxjaGFyPiB1cmlTdHIoc291cF91cmlfdG9fc3RyaW5nKHVyaSwgZmFsc2Up
KTsKKyAgICAgICAgICAgIFJlc291cmNlRXJyb3IgcmVzb3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0
cmluZyhTT1VQX0hUVFBfRVJST1IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGQtPm1fbXNnLT5zdGF0dXNfY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1cmlTdHIuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU3RyaW5nOjpmcm9tVVRGOChkLT5tX21zZy0+cmVhc29uX3BocmFzZSkpOwor
ICAgICAgICAgICAgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7Cisg
ICAgICAgICAgICBjbGllbnQtPmRpZEZhaWwoaGFuZGxlLmdldCgpLCByZXNvdXJjZUVycm9yKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlcnJvci0+ZG9t
YWluID09IEdfSU9fRVJST1IpIHsKKyAgICAgICAgICAgIFNvdXBVUkkqIHVyaSA9IHNvdXBfcmVx
dWVzdF9nZXRfdXJpKGQtPm1fc291cFJlcXVlc3QuZ2V0KCkpOworICAgICAgICAgICAgR093blB0
cjxjaGFyPiB1cmlTdHIoc291cF91cmlfdG9fc3RyaW5nKHVyaSwgZmFsc2UpKTsKKyAgICAgICAg
ICAgIFJlc291cmNlRXJyb3IgcmVzb3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0cmluZyhHX0lPX0VS
Uk9SKSwgZXJyb3ItPmNvZGUsIHVyaVN0ci5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlcnJvciA/IFN0cmluZzo6ZnJvbVVURjgoZXJyb3ItPm1lc3NhZ2Up
IDogU3RyaW5nKCkpOworICAgICAgICAgICAgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKGhh
bmRsZS5nZXQoKSk7CisgICAgICAgICAgICBjbGllbnQtPmRpZEZhaWwoaGFuZGxlLmdldCgpLCBy
ZXNvdXJjZUVycm9yKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChkLT5tX21zZyAmJiBkLT5tX21zZy0+c3RhdHVzX2NvZGUgPT0gU09VUF9TVEFUVVNfVU5B
VVRIT1JJWkVEKSB7CisgICAgICAgICAgICBmaWxsUmVzcG9uc2VGcm9tTWVzc2FnZShkLT5tX21z
ZywgJmQtPm1fcmVzcG9uc2UpOworICAgICAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9u
c2UoaGFuZGxlLmdldCgpLCBkLT5tX3Jlc3BvbnNlKTsKKworICAgICAgICAgICAgLy8gV2ViQ29y
ZSBtaWdodCBoYXZlIGNhbmNlbGxlZCB0aGUgam9iIGluIHRoZSB3aGlsZQorICAgICAgICAgICAg
aWYgKGQtPm1fY2FuY2VsbGVkKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAg
ICAgaWYgKGQtPm1fbXNnLT5yZXNwb25zZV9ib2R5LT5kYXRhKQorICAgICAgICAgICAgICAgIGNs
aWVudC0+ZGlkUmVjZWl2ZURhdGEoaGFuZGxlLmdldCgpLCBkLT5tX21zZy0+cmVzcG9uc2VfYm9k
eS0+ZGF0YSwgZC0+bV9tc2ctPnJlc3BvbnNlX2JvZHktPmxlbmd0aCwgdHJ1ZSk7CisgICAgICAg
IH0KKworICAgICAgICAvLyBkaWRSZWNlaXZlRGF0YSBhYm92ZSBtaWdodCBoYXZlIGNhbmNlbGxl
ZCBpdAorICAgICAgICBpZiAoZC0+bV9jYW5jZWxsZWQgfHwgIWNsaWVudCkgeworICAgICAgICAg
IGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOworICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNsaWVudC0+ZGlkRmluaXNoTG9hZGluZyhoYW5k
bGUuZ2V0KCksIDApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGQtPm1fY2Fu
Y2VsbGVkKSB7CisgICAgICAgIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0
KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZC0+bV9pbnB1dFN0cmVhbSA9IGlu
OworICAgIGQtPm1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGdfbWFsbG9jKFJFQURfQlVG
RkVSX1NJWkUpKTsKKyAgICBkLT5tX3RvdGFsID0gMDsKKworICAgIC8vIHJlYWRDYWxsYmFjayBu
ZWVkcyBpdAorICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1faW5wdXRTdHJlYW0p
LCAid2Via2l0LXJlc291cmNlIiwgaGFuZGxlLmdldCgpKTsKKworICAgIC8vIFdlIG5lZWQgdG8g
Y2hlY2sgaWYgaXQncyBhIGZpbGU6IFVSTCBhbmQgaWYgaXQgaXMgYSByZWd1bGFyCisgICAgLy8g
ZmlsZSBhcyBpdCBjb3VsZCBiZSBhIGRpcmVjdG9yeS4gSW4gdGhhdCBjYXNlIFNvdXAgcHJvcGVy
bHkKKyAgICAvLyByZXR1cm5zIGEgc3RyZWFtIHdob3NlIGNvbnRlbnQgaXMgYSBIVE1MIHdpdGgg
YSBsaXN0IG9mIGZpbGVzCisgICAgLy8gaW4gdGhlIGRpcmVjdG9yeQorICAgIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnByb3RvY29sKCksICJmaWxl
IikKKyAgICAgICAgJiYgR19JU19GSUxFX0lOUFVUX1NUUkVBTShpbikpIHsKKyAgICAgICAgUmVz
b3VyY2VSZXNwb25zZSByZXNwb25zZTsKKworICAgICAgICByZXNwb25zZS5zZXRVUkwoaGFuZGxl
LT5maXJzdFJlcXVlc3QoKS51cmwoKSk7CisgICAgICAgIHJlc3BvbnNlLnNldE1pbWVUeXBlKHNv
dXBfcmVxdWVzdF9nZXRfY29udGVudF90eXBlKGQtPm1fc291cFJlcXVlc3QuZ2V0KCkpKTsKKyAg
ICAgICAgcmVzcG9uc2Uuc2V0RXhwZWN0ZWRDb250ZW50TGVuZ3RoKHNvdXBfcmVxdWVzdF9nZXRf
Y29udGVudF9sZW5ndGgoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSkpOworICAgICAgICBjbGllbnQt
PmRpZFJlY2VpdmVSZXNwb25zZShoYW5kbGUuZ2V0KCksIHJlc3BvbnNlKTsKKworICAgICAgICBp
ZiAoZC0+bV9jYW5jZWxsZWQpIHsKKyAgICAgICAgICAgIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJh
dGlvbihoYW5kbGUuZ2V0KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
fQorCisgICAgZ19pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyhkLT5tX2lucHV0U3RyZWFtLCBkLT5t
X2J1ZmZlciwgUkVBRF9CVUZGRVJfU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdfUFJJT1JJVFlfREVGQVVMVCwgZC0+bV9jYW5jZWxsYWJsZSwgcmVhZENhbGxiYWNrLCAwKTsK
K30KKwogc3RhdGljIGJvb2wgc3RhcnRIdHRwKFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCiB7CiAg
ICAgQVNTRVJUKGhhbmRsZSk7CkBAIC00ODMsNyArNTg0LDE2IEBAIHN0YXRpYyBib29sIHN0YXJ0
SHR0cChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQogICAgIHVybC5yZW1vdmVGcmFnbWVudElkZW50
aWZpZXIoKTsKICAgICByZXF1ZXN0LnNldFVSTCh1cmwpOwogCi0gICAgZC0+bV9tc2cgPSByZXF1
ZXN0LnRvU291cE1lc3NhZ2UoKTsKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgZC0+
bV9zb3VwUmVxdWVzdCA9IHNvdXBfcmVxdWVzdGVyX3JlcXVlc3QoZC0+bV9yZXF1ZXN0ZXIuZ2V0
KCksIHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBzZXNzaW9uLCAmZXJyb3Iub3V0UHRyKCkp
OworICAgIGlmIChlcnJvcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZ19vYmplY3Rf
c2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSksICJ3ZWJraXQtcmVzb3Vy
Y2UiLCBoYW5kbGUpOworCisgICAgZC0+bV9tc2cgPSBzb3VwX3JlcXVlc3RfaHR0cF9nZXRfbWVz
c2FnZShTT1VQX1JFUVVFU1RfSFRUUChkLT5tX3NvdXBSZXF1ZXN0LmdldCgpKSk7CisgICAgcmVx
dWVzdC51cGRhdGVTb3VwTWVzc2FnZShkLT5tX21zZyk7CisKICAgICBpZiAoIWQtPm1fbXNnKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTQ5Myw3ICs2MDMsNyBAQCBzdGF0aWMgYm9vbCBz
dGFydEh0dHAoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKICAgICBnX3NpZ25hbF9jb25uZWN0KGQt
Pm1fbXNnLCAicmVzdGFydGVkIiwgR19DQUxMQkFDSyhyZXN0YXJ0ZWRDYWxsYmFjayksIGhhbmRs
ZSk7CiAgICAgZ19zaWduYWxfY29ubmVjdChkLT5tX21zZywgImdvdC1oZWFkZXJzIiwgR19DQUxM
QkFDSyhnb3RIZWFkZXJzQ2FsbGJhY2spLCBoYW5kbGUpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
ZC0+bV9tc2csICJjb250ZW50LXNuaWZmZWQiLCBHX0NBTExCQUNLKGNvbnRlbnRTbmlmZmVkQ2Fs
bGJhY2spLCBoYW5kbGUpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoZC0+bV9tc2csICJnb3QtY2h1
bmsiLCBHX0NBTExCQUNLKGdvdENodW5rQ2FsbGJhY2spLCBoYW5kbGUpOworICAgIGQtPm1fZ290
Q2h1bmtIYW5kbGVyID0gZ19zaWduYWxfY29ubmVjdChkLT5tX21zZywgImdvdC1jaHVuayIsIEdf
Q0FMTEJBQ0soZ290Q2h1bmtDYWxsYmFjayksIGhhbmRsZSk7CiAKICNpZmRlZiBIQVZFX0xJQlNP
VVBfMl8yOV85MAogICAgIFN0cmluZyBmaXJzdFBhcnR5U3RyaW5nID0gcmVxdWVzdC5maXJzdFBh
cnR5Rm9yQ29va2llcygpLnN0cmluZygpOwpAQCAtNTAyLDcgKzYxMiw2IEBAIHN0YXRpYyBib29s
IHN0YXJ0SHR0cChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQogICAgICAgICBzb3VwX21lc3NhZ2Vf
c2V0X2ZpcnN0X3BhcnR5KGQtPm1fbXNnLCBmaXJzdFBhcnR5LmdldCgpKTsKICAgICB9CiAjZW5k
aWYKLSAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5tX21zZyksICJyZXNvdXJjZUhh
bmRsZSIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGhhbmRsZSkpOwogCiAgICAgRm9ybURhdGEq
IGh0dHBCb2R5ID0gZC0+bV9maXJzdFJlcXVlc3QuaHR0cEJvZHkoKTsKICAgICBpZiAoaHR0cEJv
ZHkgJiYgIWh0dHBCb2R5LT5pc0VtcHR5KCkpIHsKQEAgLTUzMiwxMiArNjQxLDExIEBAIHN0YXRp
YyBib29sIHN0YXJ0SHR0cChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQogICAgICAgICAgICAgICAg
ICAgICAgKiBtYXBwaW5nIGZvciB1cGxvYWRlZCBmaWxlcyBjb2RlIGluc3BpcmVkIGJ5IHRlY2hu
aXF1ZSB1c2VkIGluCiAgICAgICAgICAgICAgICAgICAgICAqIGxpYnNvdXAncyBzaW1wbGUtaHR0
cGQgdGVzdAogICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgR0Vy
cm9yKiBlcnJvciA9IDA7CisgICAgICAgICAgICAgICAgICAgIEdPd25QdHI8R0Vycm9yPiBlcnJv
cjsKICAgICAgICAgICAgICAgICAgICAgQ1N0cmluZyBmaWxlTmFtZSA9IGZpbGVTeXN0ZW1SZXBy
ZXNlbnRhdGlvbihlbGVtZW50Lm1fZmlsZW5hbWUpOwotICAgICAgICAgICAgICAgICAgICBHTWFw
cGVkRmlsZSogZmlsZU1hcHBpbmcgPSBnX21hcHBlZF9maWxlX25ldyhmaWxlTmFtZS5kYXRhKCks
IGZhbHNlLCAmZXJyb3IpOworICAgICAgICAgICAgICAgICAgICBHTWFwcGVkRmlsZSogZmlsZU1h
cHBpbmcgPSBnX21hcHBlZF9maWxlX25ldyhmaWxlTmFtZS5kYXRhKCksIGZhbHNlLCAmZXJyb3Iu
b3V0UHRyKCkpOwogCiAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAg
ICAgICAgICAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChkLT5tX21zZywgR19TSUdO
QUxfTUFUQ0hfREFUQSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCBoYW5kbGUpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgZ19vYmplY3RfdW5yZWYoZC0+bV9tc2cpOwpAQCAtNTYxLDcgKzY2OSw3IEBAIHN0
YXRpYyBib29sIHN0YXJ0SHR0cChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQogICAgICAgICB9CiAg
ICAgfQogCi0gICAgLy8gYmFsYW5jZWQgYnkgYSBkZXJlZigpIGluIGZpbmlzaGVkQ2FsbGJhY2ss
IHdoaWNoIHNob3VsZCBhbHdheXMgcnVuCisgICAgLy8gYmFsYW5jZWQgYnkgYSBkZXJlZigpIGlu
IGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbiwgd2hpY2ggc2hvdWxkIGFsd2F5cyBydW4KICAg
ICBoYW5kbGUtPnJlZigpOwogCiAgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYW4gQWNjZXB0IGhl
YWRlciBmb3Igc3VicmVzb3VyY2VzOyBzb21lIHNpdGVzCkBAIC01NjksMTEgKzY3Nyw4IEBAIHN0
YXRpYyBib29sIHN0YXJ0SHR0cChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQogICAgIGlmICghc291
cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X29uZShkLT5tX21zZy0+cmVxdWVzdF9oZWFkZXJzLCAiQWNj
ZXB0IikpCiAgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChkLT5tX21zZy0+cmVx
dWVzdF9oZWFkZXJzLCAiQWNjZXB0IiwgIiovKiIpOwogCi0gICAgLy8gQmFsYW5jZWQgaW4gUmVz
b3VyY2VIYW5kbGVJbnRlcm5hbCdzIGRlc3RydWN0b3I7IHdlIG5lZWQgdG8KLSAgICAvLyBrZWVw
IG91ciBvd24gcmVmLCBiZWNhdXNlIGFmdGVyIHF1ZXVlaW5nIHRoZSBtZXNzYWdlLCB0aGUKLSAg
ICAvLyBzZXNzaW9uIG93bnMgdGhlIGluaXRpYWwgcmVmZXJlbmNlLgotICAgIGdfb2JqZWN0X3Jl
ZihkLT5tX21zZyk7Ci0gICAgc291cF9zZXNzaW9uX3F1ZXVlX21lc3NhZ2Uoc2Vzc2lvbiwgZC0+
bV9tc2csIGZpbmlzaGVkQ2FsbGJhY2ssIGhhbmRsZSk7CisgICAgZC0+bV9jYW5jZWxsYWJsZSA9
IGdfY2FuY2VsbGFibGVfbmV3KCk7CisgICAgc291cF9yZXF1ZXN0X3NlbmRfYXN5bmMoZC0+bV9z
b3VwUmVxdWVzdC5nZXQoKSwgZC0+bV9jYW5jZWxsYWJsZSwgc2VuZFJlcXVlc3RDYWxsYmFjaywg
MCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTY2NywzOCArNzcyLDYgQEAgdm9pZCBSZXNv
dXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCog
Y29udGV4dCwgY29uc3QKICAgICBzeW5jTG9hZGVyLnJ1bigpOwogfQogCi0vLyBHSU8tYmFzZWQg
bG9hZGVyCi0KLXN0YXRpYyB2b2lkIGNsZWFudXBHaW9PcGVyYXRpb24oUmVzb3VyY2VIYW5kbGUq
IGhhbmRsZSwgYm9vbCBpc0Rlc3Ryb3lpbmcgPSBmYWxzZSkKLXsKLSAgICBSZXNvdXJjZUhhbmRs
ZUludGVybmFsKiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOwotCi0gICAgaWYgKGQtPm1fZ2Zp
bGUpIHsKLSAgICAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9nZmlsZSksICJ3
ZWJraXQtcmVzb3VyY2UiLCAwKTsKLSAgICAgICAgZ19vYmplY3RfdW5yZWYoZC0+bV9nZmlsZSk7
Ci0gICAgICAgIGQtPm1fZ2ZpbGUgPSAwOwotICAgIH0KLQotICAgIGlmIChkLT5tX2NhbmNlbGxh
YmxlKSB7Ci0gICAgICAgIGdfb2JqZWN0X3VucmVmKGQtPm1fY2FuY2VsbGFibGUpOwotICAgICAg
ICBkLT5tX2NhbmNlbGxhYmxlID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoZC0+bV9pbnB1dFN0cmVh
bSkgewotICAgICAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5tX2lucHV0U3RyZWFt
KSwgIndlYmtpdC1yZXNvdXJjZSIsIDApOwotICAgICAgICBnX29iamVjdF91bnJlZihkLT5tX2lu
cHV0U3RyZWFtKTsKLSAgICAgICAgZC0+bV9pbnB1dFN0cmVhbSA9IDA7Ci0gICAgfQotCi0gICAg
aWYgKGQtPm1fYnVmZmVyKSB7Ci0gICAgICAgIGdfZnJlZShkLT5tX2J1ZmZlcik7Ci0gICAgICAg
IGQtPm1fYnVmZmVyID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoIWlzRGVzdHJveWluZykKLSAgICAg
ICAgaGFuZGxlLT5kZXJlZigpOwotfQotCiBzdGF0aWMgdm9pZCBjbG9zZUNhbGxiYWNrKEdPYmpl
Y3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXMsIGdwb2ludGVyKQogewogICAgIFJlZlB0cjxS
ZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihnX29i
amVjdF9nZXRfZGF0YShzb3VyY2UsICJ3ZWJraXQtcmVzb3VyY2UiKSk7CkBAIC03MDksNyArNzgy
LDcgQEAgc3RhdGljIHZvaWQgY2xvc2VDYWxsYmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jl
c3VsdCogcmVzLCBncG9pbnRlcikKICAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0g
aGFuZGxlLT5jbGllbnQoKTsKIAogICAgIGdfaW5wdXRfc3RyZWFtX2Nsb3NlX2ZpbmlzaChkLT5t
X2lucHV0U3RyZWFtLCByZXMsIDApOwotICAgIGNsZWFudXBHaW9PcGVyYXRpb24oaGFuZGxlLmdl
dCgpKTsKKyAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKIAog
ICAgIC8vIFRoZSBsb2FkIG1heSBoYXZlIGJlZW4gY2FuY2VsbGVkLCB0aGUgY2xpZW50IG1heSBo
YXZlIGJlZW4KICAgICAvLyBkZXN0cm95ZWQgYWxyZWFkeS4gSW4gc3VjaCBjYXNlcyBjYWxsaW5n
IGRpZEZpbmlzaExvYWRpbmcgaXMgYQpAQCAtNzIwLDMyICs3OTMsMzAgQEAgc3RhdGljIHZvaWQg
Y2xvc2VDYWxsYmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzLCBncG9pbnRl
cikKICAgICBjbGllbnQtPmRpZEZpbmlzaExvYWRpbmcoaGFuZGxlLmdldCgpLCAwKTsKIH0KIAot
c3RhdGljIHZvaWQgcmVhZENhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiBy
ZXMsIGdwb2ludGVyKQorc3RhdGljIHZvaWQgcmVhZENhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwg
R0FzeW5jUmVzdWx0KiByZXMsIGdwb2ludGVyIGRhdGEpCiB7CiAgICAgUmVmUHRyPFJlc291cmNl
SGFuZGxlPiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGdfb2JqZWN0X2dl
dF9kYXRhKHNvdXJjZSwgIndlYmtpdC1yZXNvdXJjZSIpKTsKICAgICBpZiAoIWhhbmRsZSkKICAg
ICAgICAgcmV0dXJuOwogCisgICAgYm9vbCBjb252ZXJ0VG9VVEYxNiA9IHN0YXRpY19jYXN0PGJv
b2w+KGRhdGEpOwogICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldElu
dGVybmFsKCk7CiAgICAgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCA9IGhhbmRsZS0+Y2xp
ZW50KCk7CiAKICAgICBpZiAoZC0+bV9jYW5jZWxsZWQgfHwgIWNsaWVudCkgewotICAgICAgICBj
bGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAgIGNsZWFudXBTb3VwUmVx
dWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgR0Vycm9yKiBlcnJvciA9IDA7CisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOwogCi0gICAg
Z3NzaXplIGJ5dGVzUmVhZCA9IGdfaW5wdXRfc3RyZWFtX3JlYWRfZmluaXNoKGQtPm1faW5wdXRT
dHJlYW0sIHJlcywgJmVycm9yKTsKKyAgICBnc3NpemUgYnl0ZXNSZWFkID0gZ19pbnB1dF9zdHJl
YW1fcmVhZF9maW5pc2goZC0+bV9pbnB1dFN0cmVhbSwgcmVzLCAmZXJyb3Iub3V0UHRyKCkpOwog
ICAgIGlmIChlcnJvcikgewotICAgICAgICBjaGFyKiB1cmkgPSBnX2ZpbGVfZ2V0X3VyaShkLT5t
X2dmaWxlKTsKLSAgICAgICAgUmVzb3VyY2VFcnJvciByZXNvdXJjZUVycm9yKGdfcXVhcmtfdG9f
c3RyaW5nKEdfSU9fRVJST1IpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXJyb3ItPmNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmksCisg
ICAgICAgIFNvdXBVUkkqIHVyaSA9IHNvdXBfcmVxdWVzdF9nZXRfdXJpKGQtPm1fc291cFJlcXVl
c3QuZ2V0KCkpOworICAgICAgICBHT3duUHRyPGNoYXI+IHVyaVN0cihzb3VwX3VyaV90b19zdHJp
bmcodXJpLCBmYWxzZSkpOworICAgICAgICBSZXNvdXJjZUVycm9yIHJlc291cmNlRXJyb3IoZ19x
dWFya190b19zdHJpbmcoR19JT19FUlJPUiksIGVycm9yLT5jb2RlLCB1cmlTdHIuZ2V0KCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA/IFN0cmluZzo6ZnJvbVVU
RjgoZXJyb3ItPm1lc3NhZ2UpIDogU3RyaW5nKCkpOwotICAgICAgICBnX2ZyZWUodXJpKTsKLSAg
ICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKLSAgICAgICAgY2xlYW51cEdpb09wZXJhdGlvbiho
YW5kbGUuZ2V0KCkpOworICAgICAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxl
LmdldCgpKTsKICAgICAgICAgY2xpZW50LT5kaWRGYWlsKGhhbmRsZS5nZXQoKSwgcmVzb3VyY2VF
cnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC03NTcsMTQxICs4MjgsMzYgQEAgc3Rh
dGljIHZvaWQgcmVhZENhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXMs
IGdwb2ludGVyKQogICAgIH0KIAogICAgIGQtPm1fdG90YWwgKz0gYnl0ZXNSZWFkOwotICAgIGNs
aWVudC0+ZGlkUmVjZWl2ZURhdGEoaGFuZGxlLmdldCgpLCBkLT5tX2J1ZmZlciwgYnl0ZXNSZWFk
LCBkLT5tX3RvdGFsKTsKLQotICAgIC8vIGRpZFJlY2VpdmVEYXRhIG1heSBjYW5jZWwgdGhlIGxv
YWQsIHdoaWNoIG1heSByZWxlYXNlIHRoZSBsYXN0IHJlZmVyZW5jZS4KLSAgICBpZiAoZC0+bV9j
YW5jZWxsZWQpIHsKLSAgICAgICAgY2xlYW51cEdpb09wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwot
ICAgICAgICByZXR1cm47CisgICAgaWYgKEdfTElLRUxZKCFjb252ZXJ0VG9VVEYxNikpCisgICAg
ICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURhdGEoaGFuZGxlLmdldCgpLCBkLT5tX2J1ZmZlciwgYnl0
ZXNSZWFkLCBkLT5tX3RvdGFsKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gV2UgaGF2ZSB0byBj
b252ZXJ0IGl0IHRvIFVURi0xNiBkdWUgdG8gbGltaXRhdGlvbnMgaW4gS1VSTAorICAgICAgICBT
dHJpbmcgZGF0YSA9IFN0cmluZzo6ZnJvbVVURjgoZC0+bV9idWZmZXIsIGJ5dGVzUmVhZCk7Cisg
ICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURhdGEoaGFuZGxlLmdldCgpLCByZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPihkYXRhLmNoYXJhY3RlcnMoKSksIGRhdGEubGVuZ3RoKCkgKiBzaXpl
b2YoVUNoYXIpLCAwKTsKICAgICB9CiAKLSAgICBnX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jKGQt
Pm1faW5wdXRTdHJlYW0sIGQtPm1fYnVmZmVyLCBkLT5tX2J1ZmZlclNpemUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHX1BSSU9SSVRZX0RFRkFVTFQsIGQtPm1fY2FuY2VsbGFibGUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkQ2FsbGJhY2ssIDApOwotfQotCi1z
dGF0aWMgdm9pZCBvcGVuQ2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJl
cywgZ3BvaW50ZXIpCi17Ci0gICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUgPSBzdGF0
aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGdfb2JqZWN0X2dldF9kYXRhKHNvdXJjZSwgIndlYmtp
dC1yZXNvdXJjZSIpKTsKLSAgICBpZiAoIWhhbmRsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKLSAgICBS
ZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0gaGFuZGxlLT5jbGllbnQoKTsKLQorICAgIC8v
IGRpZFJlY2VpdmVEYXRhIG1heSBjYW5jZWwgdGhlIGxvYWQsIHdoaWNoIG1heSByZWxlYXNlIHRo
ZSBsYXN0IHJlZmVyZW5jZS4KICAgICBpZiAoZC0+bV9jYW5jZWxsZWQgfHwgIWNsaWVudCkgewot
ICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAgIGNsZWFu
dXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgR0Vycm9yKiBlcnJvciA9IDA7Ci0gICAgR0ZpbGVJbnB1dFN0cmVhbSogaW4g
PSBnX2ZpbGVfcmVhZF9maW5pc2goR19GSUxFKHNvdXJjZSksIHJlcywgJmVycm9yKTsKLSAgICBp
ZiAoZXJyb3IpIHsKLSAgICAgICAgY2hhciogdXJpID0gZ19maWxlX2dldF91cmkoZC0+bV9nZmls
ZSk7Ci0gICAgICAgIFJlc291cmNlRXJyb3IgcmVzb3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0cmlu
ZyhHX0lPX0VSUk9SKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9y
LT5jb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPyBTdHJpbmc6OmZyb21VVEY4KGVy
cm9yLT5tZXNzYWdlKSA6IFN0cmluZygpKTsKLSAgICAgICAgZ19mcmVlKHVyaSk7Ci0gICAgICAg
IGdfZXJyb3JfZnJlZShlcnJvcik7Ci0gICAgICAgIGNsZWFudXBHaW9PcGVyYXRpb24oaGFuZGxl
LmdldCgpKTsKLSAgICAgICAgY2xpZW50LT5kaWRGYWlsKGhhbmRsZS5nZXQoKSwgcmVzb3VyY2VF
cnJvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBkLT5tX2lucHV0U3RyZWFtID0g
R19JTlBVVF9TVFJFQU0oaW4pOwotICAgIGQtPm1fYnVmZmVyU2l6ZSA9IDgxOTI7Ci0gICAgZC0+
bV9idWZmZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oZ19tYWxsb2MoZC0+bV9idWZmZXJTaXplKSk7
Ci0gICAgZC0+bV90b3RhbCA9IDA7Ci0KLSAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChk
LT5tX2lucHV0U3RyZWFtKSwgIndlYmtpdC1yZXNvdXJjZSIsIGhhbmRsZS5nZXQoKSk7Ci0gICAg
Z19pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyhkLT5tX2lucHV0U3RyZWFtLCBkLT5tX2J1ZmZlciwg
ZC0+bV9idWZmZXJTaXplLAorICAgIGdfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMoZC0+bV9pbnB1
dFN0cmVhbSwgZC0+bV9idWZmZXIsIFJFQURfQlVGRkVSX1NJWkUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHX1BSSU9SSVRZX0RFRkFVTFQsIGQtPm1fY2FuY2VsbGFibGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkQ2FsbGJhY2ssIDApOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVhZENhbGxiYWNrLCBkYXRhKTsKIH0KIAotc3RhdGljIHZvaWQg
cXVlcnlJbmZvQ2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3Bv
aW50ZXIpCi17Ci0gICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUgPSBzdGF0aWNfY2Fz
dDxSZXNvdXJjZUhhbmRsZSo+KGdfb2JqZWN0X2dldF9kYXRhKHNvdXJjZSwgIndlYmtpdC1yZXNv
dXJjZSIpKTsKLSAgICBpZiAoIWhhbmRsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVzb3Vy
Y2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKLSAgICBSZXNvdXJj
ZUhhbmRsZUNsaWVudCogY2xpZW50ID0gaGFuZGxlLT5jbGllbnQoKTsKLQotICAgIGlmIChkLT5t
X2NhbmNlbGxlZCkgewotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNl
OwotCi0gICAgY2hhciogdXJpID0gZ19maWxlX2dldF91cmkoZC0+bV9nZmlsZSk7Ci0gICAgcmVz
cG9uc2Uuc2V0VVJMKEtVUkwoS1VSTCgpLCB1cmkpKTsKLSAgICBnX2ZyZWUodXJpKTsKLQotICAg
IEdFcnJvciogZXJyb3IgPSAwOwotICAgIEdGaWxlSW5mbyogaW5mbyA9IGdfZmlsZV9xdWVyeV9p
bmZvX2ZpbmlzaChkLT5tX2dmaWxlLCByZXMsICZlcnJvcik7Ci0KLSAgICBpZiAoZXJyb3IpIHsK
LSAgICAgICAgLy8gRklYTUU6IHRvIGJlIGFibGUgdG8gaGFuZGxlIGZ0cCBVUklzIHByb3Blcmx5
LCB3ZSBtdXN0Ci0gICAgICAgIC8vIGNoZWNrIGlmIHRoZSBlcnJvciBpcyBHX0lPX0VSUk9SX05P
VF9NT1VOVEVELCBhbmQgaWYgc28sCi0gICAgICAgIC8vIGNhbGwgZ19maWxlX21vdW50X2VuY2xv
c2luZ192b2x1bWUoKSB0byBtb3VudCB0aGUgZnRwCi0gICAgICAgIC8vIHNlcnZlciAoYW5kIHRo
ZW4ga2VlcCB0cmFjayBvZiB0aGUgZmFjdCB0aGF0IHdlIG1vdW50ZWQgaXQsCi0gICAgICAgIC8v
IGFuZCBzZXQgYSB0aW1lb3V0IHRvIHVubW91bnQgaXQgbGF0ZXIgYWZ0ZXIgaXQncyBiZWVuIGlk
bGUKLSAgICAgICAgLy8gZm9yIGEgd2hpbGUpLgotICAgICAgICBjaGFyKiB1cmkgPSBnX2ZpbGVf
Z2V0X3VyaShkLT5tX2dmaWxlKTsKLSAgICAgICAgUmVzb3VyY2VFcnJvciByZXNvdXJjZUVycm9y
KGdfcXVhcmtfdG9fc3RyaW5nKEdfSU9fRVJST1IpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXJyb3ItPmNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1cmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA/IFN0
cmluZzo6ZnJvbVVURjgoZXJyb3ItPm1lc3NhZ2UpIDogU3RyaW5nKCkpOwotICAgICAgICBnX2Zy
ZWUodXJpKTsKLSAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKLSAgICAgICAgY2xlYW51cEdp
b09wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwotICAgICAgICBjbGllbnQtPmRpZEZhaWwoaGFuZGxl
LmdldCgpLCByZXNvdXJjZUVycm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
IChnX2ZpbGVfaW5mb19nZXRfZmlsZV90eXBlKGluZm8pICE9IEdfRklMRV9UWVBFX1JFR1VMQVIp
IHsKLSAgICAgICAgLy8gRklYTUU6IHdoYXQgaWYgdGhlIFVSSSBwb2ludHMgdG8gYSBkaXJlY3Rv
cnk/IFNob3VsZCB3ZQotICAgICAgICAvLyBnZW5lcmF0ZSBhIGxpc3Rpbmc/IEhvdz8gV2hhdCBk
byBvdGhlciBiYWNrZW5kcyBkbyBoZXJlPwotICAgICAgICBjaGFyKiB1cmkgPSBnX2ZpbGVfZ2V0
X3VyaShkLT5tX2dmaWxlKTsKLSAgICAgICAgUmVzb3VyY2VFcnJvciByZXNvdXJjZUVycm9yKGdf
cXVhcmtfdG9fc3RyaW5nKEdfSU9fRVJST1IpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR19JT19FUlJPUl9GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1cmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmco
KSk7Ci0gICAgICAgIGdfZnJlZSh1cmkpOwotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhh
bmRsZS5nZXQoKSk7Ci0gICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIHJlc291
cmNlRXJyb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcmVzcG9uc2Uuc2V0TWlt
ZVR5cGUoZ19maWxlX2luZm9fZ2V0X2NvbnRlbnRfdHlwZShpbmZvKSk7Ci0gICAgcmVzcG9uc2Uu
c2V0RXhwZWN0ZWRDb250ZW50TGVuZ3RoKGdfZmlsZV9pbmZvX2dldF9zaXplKGluZm8pKTsKLQot
ICAgIEdUaW1lVmFsIHR2OwotICAgIGdfZmlsZV9pbmZvX2dldF9tb2RpZmljYXRpb25fdGltZShp
bmZvLCAmdHYpOwotICAgIHJlc3BvbnNlLnNldExhc3RNb2RpZmllZERhdGUodHYudHZfc2VjKTsK
LQotICAgIGNsaWVudC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGhhbmRsZS5nZXQoKSwgcmVzcG9uc2Up
OwotCi0gICAgaWYgKGQtPm1fY2FuY2VsbGVkKSB7Ci0gICAgICAgIGNsZWFudXBHaW9PcGVyYXRp
b24oaGFuZGxlLmdldCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGdfZmlsZV9y
ZWFkX2FzeW5jKGQtPm1fZ2ZpbGUsIEdfUFJJT1JJVFlfREVGQVVMVCwgZC0+bV9jYW5jZWxsYWJs
ZSwKLSAgICAgICAgICAgICAgICAgICAgICBvcGVuQ2FsbGJhY2ssIDApOwotfQogc3RhdGljIGJv
b2wgc3RhcnRHaW8oUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgS1VSTCB1cmwpCiB7CiAgICAgQVNT
RVJUKGhhbmRsZSk7CiAKLSAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0gaGFuZGxlLT5n
ZXRJbnRlcm5hbCgpOwotCiAgICAgaWYgKGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkuaHR0cE1ldGhv
ZCgpICE9ICJHRVQiICYmIGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkuaHR0cE1ldGhvZCgpICE9ICJQ
T1NUIikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgQ1N0cmluZyB1cmxTdHI7CisgICAg
U291cFNlc3Npb24qIHNlc3Npb24gPSBoYW5kbGUtPmRlZmF1bHRTZXNzaW9uKCk7CisgICAgUmVz
b3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKKwogICAgIC8v
IEdJTyBkb2Vzbid0IGtub3cgaG93IHRvIGhhbmRsZSByZWZzIGFuZCBxdWVyaWVzLCBzbyByZW1v
dmUgdGhlbQogICAgIC8vIFRPRE86IHVzZSBLVVJMLmZpbGVTeXN0ZW1QYXRoIGFmdGVyIEtVUkxH
dGsgYW5kIEZpbGVTeXN0ZW1HdGsgYXJlCiAgICAgLy8gdXNpbmcgR0lPIGludGVybmFsbHksIGFu
ZCBwcm92aWRpbmcgVVJJcyBpbnN0ZWFkIG9mIGZpbGUgcGF0aHMKQEAgLTkwNCwyMyArODcwLDI0
IEBAIHN0YXRpYyBib29sIHN0YXJ0R2lvKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIEtVUkwgdXJs
KQogICAgIC8vIGdfZmlsZW5hbWVfZnJvbV91cmkgKHVzZWQgaW50ZXJuYWxseSBieSBHRmlsZSkg
aGFzIHByb2JsZW1zCiAgICAgLy8gZGVjb2Rpbmcgc3RyaW5ncyB3aXRoIGFyYml0cmFyeSBwZXJj
ZW50IHNpZ25zCiAgICAgaWYgKHVybC5pc0xvY2FsRmlsZSgpKQotICAgICAgICBkLT5tX2dmaWxl
ID0gZ19maWxlX25ld19mb3JfcGF0aCh1cmwucHJldHR5VVJMKCkudXRmOCgpLmRhdGEoKSArIHNp
emVvZigiZmlsZTovLyIpIC0gMSk7CisgICAgICAgIHVybFN0ciA9IHVybC5wcmV0dHlVUkwoKS51
dGY4KCkuZGF0YSgpOwogICAgIGVsc2UKICNlbmRpZgotICAgICAgICBkLT5tX2dmaWxlID0gZ19m
aWxlX25ld19mb3JfdXJpKHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBnX29iamVj
dF9zZXRfZGF0YShHX09CSkVDVChkLT5tX2dmaWxlKSwgIndlYmtpdC1yZXNvdXJjZSIsIGhhbmRs
ZSk7CisgICAgICAgIHVybFN0ciA9IHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpOworCisgICAg
R093blB0cjxHRXJyb3I+IGVycm9yOworICAgIGQtPm1fc291cFJlcXVlc3QgPSBzb3VwX3JlcXVl
c3Rlcl9yZXF1ZXN0KGQtPm1fcmVxdWVzdGVyLmdldCgpLCB1cmxTdHIuZGF0YSgpLCBzZXNzaW9u
LCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGlmIChlcnJvcikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9zb3VwUmVxdWVzdC5nZXQo
KSksICJ3ZWJraXQtcmVzb3VyY2UiLCBoYW5kbGUpOwogCi0gICAgLy8gYmFsYW5jZWQgYnkgYSBk
ZXJlZigpIGluIGNsZWFudXBHaW9PcGVyYXRpb24sIHdoaWNoIHNob3VsZCBhbHdheXMgcnVuCisg
ICAgLy8gYmFsYW5jZWQgYnkgYSBkZXJlZigpIGluIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlv
biwgd2hpY2ggc2hvdWxkIGFsd2F5cyBydW4KICAgICBoYW5kbGUtPnJlZigpOwogCiAgICAgZC0+
bV9jYW5jZWxsYWJsZSA9IGdfY2FuY2VsbGFibGVfbmV3KCk7Ci0gICAgZ19maWxlX3F1ZXJ5X2lu
Zm9fYXN5bmMoZC0+bV9nZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX0ZJTEVf
QVRUUklCVVRFX1NUQU5EQVJEX1RZUEUgIiwiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
R19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9DT05URU5UX1RZUEUgIiwiCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9TSVpFLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdfRklMRV9RVUVSWV9JTkZPX05PTkUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR19QUklPUklUWV9ERUZBVUxULCBkLT5tX2NhbmNlbGxhYmxlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5SW5mb0NhbGxiYWNrLCAwKTsKKyAgICBzb3Vw
X3JlcXVlc3Rfc2VuZF9hc3luYyhkLT5tX3NvdXBSZXF1ZXN0LmdldCgpLCBkLT5tX2NhbmNlbGxh
YmxlLCBzZW5kUmVxdWVzdENhbGxiYWNrLCAwKTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3Qu
aCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdC5oCmluZGV4
IGExZDkxNmYuLjkyZGFiYWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL1Jlc291cmNlUmVxdWVzdC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3Vw
L1Jlc291cmNlUmVxdWVzdC5oCkBAIC02Nyw4ICs2Nyw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgICAgIHVwZGF0ZUZyb21Tb3VwTWVzc2FnZShzb3VwTWVzc2FnZSk7CiAgICAgICAg
IH0KIAorICAgICAgICB2b2lkIHVwZGF0ZVNvdXBNZXNzYWdlKFNvdXBNZXNzYWdlKikgY29uc3Q7
CiAgICAgICAgIFNvdXBNZXNzYWdlKiB0b1NvdXBNZXNzYWdlKCkgY29uc3Q7Ci0gICAgICAgIHZv
aWQgdXBkYXRlRnJvbVNvdXBNZXNzYWdlKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSk7CisgICAg
ICAgIHZvaWQgdXBkYXRlRnJvbVNvdXBNZXNzYWdlKFNvdXBNZXNzYWdlKik7CiAKICAgICAgICAg
U291cE1lc3NhZ2VGbGFncyBzb3VwTWVzc2FnZUZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9zb3Vw
RmxhZ3M7IH0KICAgICAgICAgdm9pZCBzZXRTb3VwTWVzc2FnZUZsYWdzKFNvdXBNZXNzYWdlRmxh
Z3Mgc291cEZsYWdzKSB7IG1fc291cEZsYWdzID0gc291cEZsYWdzOyB9CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3BwCmluZGV4
IDYyZGViMDEuLjM4MGZjODQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3BwCkBAIC0zMyw2ICszMywyOSBAQCB1c2luZyBu
YW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3ZvaWQgUmVzb3VyY2VSZXF1
ZXN0Ojp1cGRhdGVTb3VwTWVzc2FnZShTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UpIGNvbnN0Cit7
CisgICAgZ19vYmplY3Rfc2V0KHNvdXBNZXNzYWdlLCBTT1VQX01FU1NBR0VfTUVUSE9ELCBodHRw
TWV0aG9kKCkudXRmOCgpLmRhdGEoKSwgTlVMTCk7CisKKyAgICBjb25zdCBIVFRQSGVhZGVyTWFw
JiBoZWFkZXJzID0gaHR0cEhlYWRlckZpZWxkcygpOworICAgIFNvdXBNZXNzYWdlSGVhZGVycyog
c291cEhlYWRlcnMgPSBzb3VwTWVzc2FnZS0+cmVxdWVzdF9oZWFkZXJzOworICAgIGlmICghaGVh
ZGVycy5pc0VtcHR5KCkpIHsKKyAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gaGVhZGVycy5lbmQoKTsKKyAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IGhlYWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAg
ICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKHNvdXBIZWFkZXJzLCBpdC0+Zmlyc3Quc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSwgaXQtPnNlY29uZC51dGY4KCkuZGF0YSgpKTsKKyAgICB9CisK
KyNpZmRlZiBIQVZFX0xJQlNPVVBfMl8yOV85MAorICAgIFN0cmluZyBmaXJzdFBhcnR5U3RyaW5n
ID0gZmlyc3RQYXJ0eUZvckNvb2tpZXMoKS5zdHJpbmcoKTsKKyAgICBpZiAoIWZpcnN0UGFydHlT
dHJpbmcuaXNFbXB0eSgpKSB7CisgICAgICAgIEdPd25QdHI8U291cFVSST4gZmlyc3RQYXJ0eShz
b3VwX3VyaV9uZXcoZmlyc3RQYXJ0eVN0cmluZy51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIHNv
dXBfbWVzc2FnZV9zZXRfZmlyc3RfcGFydHkoc291cE1lc3NhZ2UsIGZpcnN0UGFydHkuZ2V0KCkp
OworICAgIH0KKyNlbmRpZgorCisgICAgc291cF9tZXNzYWdlX3NldF9mbGFncyhzb3VwTWVzc2Fn
ZSwgbV9zb3VwRmxhZ3MpOworfQorCiBTb3VwTWVzc2FnZSogUmVzb3VyY2VSZXF1ZXN0Ojp0b1Nv
dXBNZXNzYWdlKCkgY29uc3QKIHsKICAgICBTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UgPSBzb3Vw
X21lc3NhZ2VfbmV3KGh0dHBNZXRob2QoKS51dGY4KCkuZGF0YSgpLCB1cmwoKS5zdHJpbmcoKS51
dGY4KCkuZGF0YSgpKTsKLS0gCjEuNy4xCgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68717</attachid>
            <date>2010-09-24 11:22:36 -0700</date>
            <delta_ts>2010-09-24 11:22:36 -0700</delta_ts>
            <desc>patches to Sergio&apos;s patches</desc>
            <filename>uri-encoding-patches.diff</filename>
            <type>text/plain</type>
            <size>1968</size>
            <attacher name="Dan Winship">danw</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxl
U291cC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNv
dXAuY3BwCmluZGV4IDBmNTk1NWUuLjc4NjI2NmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcApAQCAtODY0LDE2ICs4NjQs
NyBAQCBzdGF0aWMgYm9vbCBzdGFydEdpbyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBLVVJMIHVy
bCkKICAgICB1cmwucmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7CiAgICAgdXJsLnNldFF1ZXJ5
KFN0cmluZygpKTsKICAgICB1cmwucmVtb3ZlUG9ydCgpOwotCi0jaWYgIU9TKFdJTkRPV1MpCi0g
ICAgLy8gd2UgYXZvaWQgdGhlIGVzY2FwaW5nIGZvciBsb2NhbCBmaWxlcywgYmVjYXVzZQotICAg
IC8vIGdfZmlsZW5hbWVfZnJvbV91cmkgKHVzZWQgaW50ZXJuYWxseSBieSBHRmlsZSkgaGFzIHBy
b2JsZW1zCi0gICAgLy8gZGVjb2Rpbmcgc3RyaW5ncyB3aXRoIGFyYml0cmFyeSBwZXJjZW50IHNp
Z25zCi0gICAgaWYgKHVybC5pc0xvY2FsRmlsZSgpKQotICAgICAgICB1cmxTdHIgPSB1cmwucHJl
dHR5VVJMKCkudXRmOCgpLmRhdGEoKTsKLSAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgdXJsU3Ry
ID0gdXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCk7CisgICAgdXJsU3RyID0gdXJsLnN0cmluZygp
LnV0ZjgoKS5kYXRhKCk7CiAKICAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CiAgICAgZC0+bV9z
b3VwUmVxdWVzdCA9IHNvdXBfcmVxdWVzdGVyX3JlcXVlc3QoZC0+bV9yZXF1ZXN0ZXIuZ2V0KCks
IHVybFN0ci5kYXRhKCksIHNlc3Npb24sICZlcnJvci5vdXRQdHIoKSk7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Rlci5jIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuYwppbmRleCBm
NzY3ODdmLi41MTFlNjEyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9jYWNoZS9zb3VwLXJlcXVlc3Rlci5jCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmMKQEAgLTkzLDIxICs5Myw3IEBAIFNvdXBSZXF1ZXN0
ICpzb3VwX3JlcXVlc3Rlcl9yZXF1ZXN0IChTb3VwUmVxdWVzdGVyICpyZXF1ZXN0ZXIsIGNvbnN0
IGNoYXIgKnVyaVN0CiAJU291cFVSSSAqdXJpID0gTlVMTDsKIAlTb3VwUmVxdWVzdCAqcmVxOwog
Ci0JaWYgKCFzdHJuY21wICh1cmlTdHJpbmcsICJmaWxlOi8vIiwgNykpIHsKLQkJLyogSWYgaXQn
cyBhIGxvY2FsIGZpbGUgd2UgbXVzdCBlc2NhcGUgdGhlIFVSTCB1c2luZwotCQkgKiB0aGUgR0xp
YiBjYWxsIGJlY2F1c2Ugc291cF91cmlfbmV3IHdvbid0IGRvCi0JCSAqIGl0LiBPdGhlcndpc2Ug
Zm9yIHdlaXJkIGZpbGVuYW1lcyB0aGF0IGNvdWxkCi0JCSAqIGNvbnRhaW4gcGVyY2VudCBlc2Nh
cGUgdHJpcGxldHMKLQkJICovCi0JCWdjaGFyICplc2NhcGVkID0gZ19maWxlbmFtZV90b191cmkg
KHVyaVN0cmluZys3LCBOVUxMLCBGQUxTRSk7Ci0JCWlmIChlc2NhcGVkKSB7Ci0JCQl1cmkgPSBz
b3VwX3VyaV9uZXcgKGVzY2FwZWQpOwotCQkJZ19mcmVlIChlc2NhcGVkKTsKLQkJfQotCX0gZWxz
ZSB7Ci0JCXVyaSA9IHNvdXBfdXJpX25ldyAodXJpU3RyaW5nKTsKLQl9Ci0KKwl1cmkgPSBzb3Vw
X3VyaV9uZXcgKHVyaVN0cmluZyk7CiAJaWYgKCF1cmkpIHsKIAkJZ19zZXRfZXJyb3IgKGVycm9y
LCBTT1VQX0VSUk9SLCBTT1VQX0VSUk9SX0JBRF9VUkksCiAJCQkgICAgIF8gKCJDb3VsZCBub3Qg
cGFyc2UgVVJJICclcyciKSwgdXJpU3RyaW5nKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69205</attachid>
            <date>2010-09-29 09:54:37 -0700</date>
            <delta_ts>2010-09-30 11:14:50 -0700</delta_ts>
            <desc>Imported SoupURILoader to Webkit. New public API for HTTP cache</desc>
            <filename>0001-Imported-SoupURILoader-code-to-WebKit.-New-public-AP.patch</filename>
            <type>text/plain</type>
            <size>170747</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">RnJvbSA4MDQyZDA5NWRlZTRhNTQzMzYxYWE5YmJiMzA3ZDFkMGY4NjU3MzYxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTZXJnaW8gVmlsbGFyIFNlbmluIDxzdmlsbGFyQGlnYWxpYS5j
b20+CkRhdGU6IFdlZCwgMjIgU2VwIDIwMTAgMTA6MTY6NDQgKzAyMDAKU3ViamVjdDogW1BBVENI
IDEvMl0gSW1wb3J0ZWQgU291cFVSSUxvYWRlciBjb2RlIHRvIFdlYktpdC4gTmV3IHB1YmxpYyBB
UEkgZm9yIEhUVFAgY2FjaGUKCi0tLQogQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgIDEwICsKIEdOVW1ha2VmaWxlLmFtICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgICAxMCArLQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTkzICsrKwogV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIwICstCiAuLi4vc291cC9jYWNo
ZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uYyAgICAgICB8ICAxOTkgKysrCiAuLi4vc291
cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uaCAgICAgICB8ICAgNjEgKwogLi4u
L25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmMgICAgfCAgOTIxICsr
KysrKysrKysrCiAuLi4vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0u
aCAgICB8ICAgNzYgKwogLi4uL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5j
ICAgICAgICAgfCAgMjA1ICsrKwogLi4uL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Qt
ZGF0YS5oICAgICAgICAgfCAgIDUxICsKIC4uLi9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1
ZXN0LWZpbGUuYyAgICAgICAgIHwgIDMyMiArKysrCiAuLi4vbmV0d29yay9zb3VwL2NhY2hlL3Nv
dXAtcmVxdWVzdC1maWxlLmggICAgICAgICB8ICAgNTMgKwogLi4uL25ldHdvcmsvc291cC9jYWNo
ZS9zb3VwLXJlcXVlc3QtaHR0cC5jICAgICAgICAgfCAgMzM5ICsrKysKIC4uLi9uZXR3b3JrL3Nv
dXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuaCAgICAgICAgIHwgICA1MyArCiBXZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QuYyB8ICAyNzkgKysrKwogV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LmggfCAgIDkyICsr
CiAuLi4vcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmMgICB8ICAx
ODcgKysrCiAuLi4vcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmgg
ICB8ICAgODAgKwogLi4uL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS1wcml2
YXRlLmggfCAgIDQxICsKIC4uLi9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUu
YyAgICAgICAgIHwgMTY1MiArKysrKysrKysrKysrKysrKysrKwogLi4uL25ldHdvcmsvc291cC9j
YWNoZS93ZWJraXQvc291cC1jYWNoZS5oICAgICAgICAgfCAgIDk1ICsrCiBXZWJLaXRUb29scy9D
aGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDkgKwogV2ViS2l0VG9v
bHMvR05VbWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKIGF1dG90
b29scy93ZWJraXQubTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArLQog
MjQgZmlsZXMgY2hhbmdlZCwgNDk0NiBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAt
ZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmgKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3Vw
LWh0dHAtaW5wdXQtc3RyZWFtLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmgKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Qt
ZGF0YS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
Y2FjaGUvc291cC1yZXF1ZXN0LWRhdGEuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmMKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Qt
ZmlsZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
Y2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRwLmgKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Qu
YwogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3NvdXAtcmVxdWVzdC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmgKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291
cC1jYWNoZS1wcml2YXRlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUuaAoK
ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA0NzFmMTk2Li5jNWQwNzE1
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTAtMDktMDYgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gQWRk
IEhUVFAgY2FjaGluZyBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00NDI2MQorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IGFkZGVkIHBh
dGhzIGZvciBzb3VwIEhUVFAgY2FjaGUgY29kZQorICAgICAgICAqIGF1dG90b29scy93ZWJraXQu
bTQ6IHVwZ3JhZGVkIHJlcXVpcmVkIGdsaWIgdmVyc2lvbgorCiAyMDEwLTA5LTI0ICBSb21haW4g
UG9rcnp5d2thICA8cm9tYWluQGtkYWIuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9u
IEhhdXNtYW5uLgpkaWZmIC0tZ2l0IGEvR05VbWFrZWZpbGUuYW0gYi9HTlVtYWtlZmlsZS5hbQpp
bmRleCBjNzY5ZGIyLi5mMzkyN2RiIDEwMDY0NAotLS0gYS9HTlVtYWtlZmlsZS5hbQorKysgYi9H
TlVtYWtlZmlsZS5hbQpAQCAtMzAyLDI4ICszMDIsMjkgQEAgZ2xvYmFsX2NwcGZsYWdzICs9IFwK
IGVuZGlmCiAKIHdlYmtpdGd0a19zdGF0aWNfaF9hcGkgKz0gXAorCSQoc3JjZGlyKS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5oIFwKIAkkKHNy
Y2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXRkZWZpbmVzLmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRkb3dubG9hZC5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZXJy
b3IuaCBcCisJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdlb2xvY2F0aW9ucG9s
aWN5ZGVjaXNpb24uaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGhpdHRl
c3RyZXN1bHQuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdG5ldHdvcmty
ZXF1ZXN0LmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRuZXR3b3JrcmVz
cG9uc2UuaCBcCisJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNlY3VyaXR5b3Jp
Z2luLmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzb3VwYXV0aGRpYWxv
Zy5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViYmFja2ZvcndhcmRs
aXN0LmggXAorCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkYXRhYmFzZS5o
IFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YXNvdXJjZS5oIFwK
IAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuaCBcCiAJJChzcmNk
aXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmhpc3RvcnlpdGVtLmggXAogCSQoc3JjZGly
KS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJpbnNwZWN0b3IuaCBcCiAJJChzcmNkaXIpL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYm5hdmlnYXRpb25hY3Rpb24uaCBcCiAJJChzcmNkaXIp
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBvbGljeWRlY2lzaW9uLmggXAotCSQoc3JjZGly
KS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnZW9sb2NhdGlvbnBvbGljeWRlY2lzaW9uLmggXAog
CSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJyZXNvdXJjZS5oIFwKIAkkKHNy
Y2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vic2V0dGluZ3MuaCBcCiAJJChzcmNkaXIp
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYndpbmRvd2ZlYXR1cmVzLmggXAotCSQoc3JjZGly
KS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmggXAotCSQoc3JjZGlyKS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXR3ZWJkYXRhYmFzZS5oIFwKLQkkKHNyY2RpcikvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW4uaAorCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJ2aWV3LmgKIAogd2Via2l0Z3RrX2J1aWx0X2hfYXBpICs9IFwKIAlXZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXR2ZXJzaW9uLmgKQEAgLTU0OCw2ICs1NDksNyBAQCBub2luc3RfUFJP
R1JBTVMgKz0gJChURVNUX1BST0dTKQogd2Via2l0X3Rlc3RzX2NmbGFncyA9IFwKIAktZm5vLXN0
cmljdC1hbGlhc2luZyBcCiAJLUkkKHNyY2RpcikvSmF2YVNjcmlwdENvcmUvRm9yd2FyZGluZ0hl
YWRlcnMgXAorCS1JJChzcmNkaXIpL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
IFwKIAktSSQoc3JjZGlyKS9XZWJLaXQvZ3RrIFwKIAktSSQodG9wX2J1aWxkZGlyKS9XZWJLaXQv
Z3RrIFwKIAktSSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcyBcCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDZmYTI5ZDkuLjMxMjZk
ODkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTk2IEBACisyMDEwLTA5LTA2ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3Zp
bGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFtHVEtdIEFkZCBIVFRQIGNhY2hpbmcgc3VwcG9ydAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQyNjEKKworICAgICAgICAqIEdOVW1h
a2VmaWxlLmFtOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRl
cm5hbC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6UmVzb3Vy
Y2VIYW5kbGVJbnRlcm5hbCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291
cmNlSGFuZGxlU291cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUludGVy
bmFsOjp+UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZTo6flJlc291cmNlSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OnJlc3RhcnRlZENh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmdvdENodW5rQ2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6cGFyc2VEYXRhVXJsKToKKyAgICAgICAgKFdlYkNvcmU6OmNsZWFudXBTb3VwUmVx
dWVzdE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpzZW5kUmVxdWVzdENhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OnN0YXJ0SHR0cCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9zb3VwL1Jlc291cmNlUmVxdWVzdC5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291
cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdDo6dXBkYXRlU291cE1lc3NhZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291
cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uYzogQWRkZWQuCisgICAgICAgIChz
b3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fcGFyc2VfaW5mbyk6CisgICAgICAgIChzb3VwX2Rp
cmVjdG9yeV9pbnB1dF9zdHJlYW1fcmVhZF9uZXh0X2ZpbGUpOgorICAgICAgICAoc291cF9kaXJl
Y3RvcnlfaW5wdXRfc3RyZWFtX3JlYWQpOgorICAgICAgICAoc291cF9kaXJlY3RvcnlfaW5wdXRf
c3RyZWFtX2Nsb3NlKToKKyAgICAgICAgKHNvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9jbGFz
c19pbml0KToKKyAgICAgICAgKHNvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9pbml0KToKKyAg
ICAgICAgKHNvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9uZXcpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uaDogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1
dC1zdHJlYW0uYzogQWRkZWQuCisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2ZpbmFs
aXplKToKKyAgICAgICAgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xhc3NfaW5pdCk6CisgICAg
ICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlZWthYmxlX2lmYWNlX2luaXQpOgorICAgICAg
ICAoc291cF9odHRwX2lucHV0X3N0cmVhbV9pbml0KToKKyAgICAgICAgKHNvdXBfaHR0cF9pbnB1
dF9zdHJlYW1fcXVldWVfbWVzc2FnZSk6CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFt
X25ldyk6CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dvdF9oZWFkZXJzKToKKyAg
ICAgICAgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ290X2NodW5rKToKKyAgICAgICAgKHNvdXBf
aHR0cF9pbnB1dF9zdHJlYW1fZmluaXNoZWQpOgorICAgICAgICAoc291cF9odHRwX2lucHV0X3N0
cmVhbV9jYW5jZWxsZWQpOgorICAgICAgICAoc291cF9odHRwX2lucHV0X3N0cmVhbV9wcmVwYXJl
X2Zvcl9pbyk6CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2RvbmVfaW8pOgorICAg
ICAgICAoc2V0X2Vycm9yX2lmX2h0dHBfZmFpbGVkKToKKyAgICAgICAgKHJlYWRfZnJvbV9sZWZ0
b3Zlcik6CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfaW50ZXJuYWwpOgor
ICAgICAgICAoc2VuZF9zeW5jX2ZpbmlzaGVkKToKKyAgICAgICAgKHNvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fc2VuZCk6CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWQpOgorICAg
ICAgICAoc291cF9odHRwX2lucHV0X3N0cmVhbV9jbG9zZSk6CisgICAgICAgICh3cmFwcGVyX2Nh
bGxiYWNrKToKKyAgICAgICAgKHNlbmRfYXN5bmNfdGhyZWFkKToKKyAgICAgICAgKHNvdXBfaHR0
cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luY19pbl90aHJlYWQpOgorICAgICAgICAoc2VuZF9hc3lu
Y19maW5pc2hlZCk6CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmNf
aW50ZXJuYWwpOgorICAgICAgICAoc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jKToK
KyAgICAgICAgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9maW5pc2gpOgorICAgICAgICAo
cmVhZF9hc3luY19kb25lKToKKyAgICAgICAgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVhZF9h
c3luYyk6CisgICAgICAgIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWRfZmluaXNoKToKKyAg
ICAgICAgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2VfYXN5bmMpOgorICAgICAgICAoc291
cF9odHRwX2lucHV0X3N0cmVhbV9jbG9zZV9maW5pc2gpOgorICAgICAgICAoc291cF9odHRwX2lu
cHV0X3N0cmVhbV90ZWxsKToKKyAgICAgICAgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2FuX3Nl
ZWspOgorICAgICAgICAoc291cF9odHRwX2lucHV0X3N0cmVhbV9zZWVrKToKKyAgICAgICAgKHNv
dXBfaHR0cF9pbnB1dF9zdHJlYW1fY2FuX3RydW5jYXRlKToKKyAgICAgICAgKHNvdXBfaHR0cF9p
bnB1dF9zdHJlYW1fdHJ1bmNhdGUpOgorICAgICAgICAoc291cF9odHRwX2lucHV0X3N0cmVhbV9n
ZXRfbWVzc2FnZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAt
aHR0cC1pbnB1dC1zdHJlYW0uaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9z
b3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmM6IEFkZGVkLgorICAgICAgICAoc291cF9yZXF1
ZXN0X2RhdGFfaW5pdCk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfZGF0YV9maW5hbGl6ZSk6Cisg
ICAgICAgIChzb3VwX3JlcXVlc3RfZGF0YV9jaGVja191cmkpOgorICAgICAgICAodXJpX2RlY29k
ZWRfY29weSk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfZGF0YV9zZW5kKToKKyAgICAgICAgKHNv
dXBfcmVxdWVzdF9kYXRhX2dldF9jb250ZW50X2xlbmd0aCk6CisgICAgICAgIChzb3VwX3JlcXVl
c3RfZGF0YV9nZXRfY29udGVudF90eXBlKToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9kYXRhX2Ns
YXNzX2luaXQpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJl
cXVlc3QtZGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2Fj
aGUvc291cC1yZXF1ZXN0LWZpbGUuYzogQWRkZWQuCisgICAgICAgIChzb3VwX3JlcXVlc3RfZmls
ZV9nZXRfZmlsZSk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfZmlsZV9pbml0KToKKyAgICAgICAg
KHNvdXBfcmVxdWVzdF9maWxlX2ZpbmFsaXplKToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9maWxl
X2NoZWNrX3VyaSk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfZmlsZV9mdHBfbWFpbl9sb29wX3F1
aXQpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2ZpbGVfZW5zdXJlX2ZpbGVfZnRwKToKKyAgICAg
ICAgKHNvdXBfcmVxdWVzdF9maWxlX2Vuc3VyZV9maWxlKToKKyAgICAgICAgKHNvdXBfcmVxdWVz
dF9maWxlX3NlbmQpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2ZpbGVfc2VuZF9hc3luY190aHJl
YWQpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2ZpbGVfc2VuZF9hc3luYyk6CisgICAgICAgIChz
b3VwX3JlcXVlc3RfZmlsZV9zZW5kX2ZpbmlzaCk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfZmls
ZV9nZXRfY29udGVudF9sZW5ndGgpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2ZpbGVfZ2V0X2Nv
bnRlbnRfdHlwZSk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfZmlsZV9jbGFzc19pbml0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWZpbGUuaDog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVz
dC1odHRwLmM6IEFkZGVkLgorICAgICAgICAoc291cF9yZXF1ZXN0X2h0dHBfZ2V0X21lc3NhZ2Up
OgorICAgICAgICAoc291cF9yZXF1ZXN0X2h0dHBfaW5pdCk6CisgICAgICAgIChzb3VwX3JlcXVl
c3RfaHR0cF9jaGVja191cmkpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2h0dHBfZmluYWxpemUp
OgorICAgICAgICAoc291cF9yZXF1ZXN0X2h0dHBfc2VuZCk6CisgICAgICAgIChzZW50X2FzeW5j
KToKKyAgICAgICAgKGNvbmRpdGlvbmFsX2dldF9yZWFkeV9jYik6CisgICAgICAgIChzZW5kX2Fz
eW5jX2NiKToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9odHRwX3NlbmRfYXN5bmMpOgorICAgICAg
ICAoc291cF9yZXF1ZXN0X2h0dHBfc2VuZF9maW5pc2gpOgorICAgICAgICAoc291cF9yZXF1ZXN0
X2h0dHBfZ2V0X2NvbnRlbnRfbGVuZ3RoKToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9odHRwX2dl
dF9jb250ZW50X3R5cGUpOgorICAgICAgICAoc291cF9yZXF1ZXN0X2h0dHBfY2xhc3NfaW5pdCk6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRw
Lmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJl
cXVlc3QuYzogQWRkZWQuCisgICAgICAgIChzb3VwX3JlcXVlc3RfaW5pdCk6CisgICAgICAgIChz
b3VwX3JlcXVlc3RfZmluYWxpemUpOgorICAgICAgICAoc291cF9yZXF1ZXN0X3NldF9wcm9wZXJ0
eSk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfZ2V0X3Byb3BlcnR5KToKKyAgICAgICAgKHNvdXBf
cmVxdWVzdF9pbml0YWJsZV9pbml0KToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9kZWZhdWx0X2No
ZWNrX3VyaSk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfZGVmYXVsdF9zZW5kX2FzeW5jKToKKyAg
ICAgICAgKHNvdXBfcmVxdWVzdF9kZWZhdWx0X3NlbmRfZmluaXNoKToKKyAgICAgICAgKHNvdXBf
cmVxdWVzdF9zZW5kKToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9zZW5kX2FzeW5jKToKKyAgICAg
ICAgKHNvdXBfcmVxdWVzdF9zZW5kX2ZpbmlzaCk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfY2xh
c3NfaW5pdCk6CisgICAgICAgIChzb3VwX3JlcXVlc3RfaW5pdGFibGVfaW50ZXJmYWNlX2luaXQp
OgorICAgICAgICAoc291cF9yZXF1ZXN0X2dldF91cmkpOgorICAgICAgICAoc291cF9yZXF1ZXN0
X2dldF9zZXNzaW9uKToKKyAgICAgICAgKHNvdXBfcmVxdWVzdF9nZXRfY29udGVudF9sZW5ndGgp
OgorICAgICAgICAoc291cF9yZXF1ZXN0X2dldF9jb250ZW50X3R5cGUpOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QuaDogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmM6IEFkZGVkLgor
ICAgICAgICAoc291cF9yZXF1ZXN0ZXJfaW5pdCk6CisgICAgICAgIChmaW5hbGl6ZSk6CisgICAg
ICAgIChzb3VwX3JlcXVlc3Rlcl9jbGFzc19pbml0KToKKyAgICAgICAgKGluaXRfcmVxdWVzdF90
eXBlcyk6CisgICAgICAgIChzb3VwX3JlcXVlc3Rlcl9uZXcpOgorICAgICAgICAoc291cF9yZXF1
ZXN0ZXJfcmVxdWVzdCk6CisgICAgICAgIChzb3VwX3JlcXVlc3Rlcl9yZXF1ZXN0X3VyaSk6Cisg
ICAgICAgIChzb3VwX3NjaGVtZV9pc192YWxpZCk6CisgICAgICAgIChzb3VwX3JlcXVlc3Rlcl9h
ZGRfcHJvdG9jb2wpOgorICAgICAgICAoc291cF9yZXF1ZXN0ZXJfcmVtb3ZlX3Byb3RvY29sKToK
KyAgICAgICAgKHNvdXBfZXJyb3JfcXVhcmspOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
c291cC9jYWNoZS9zb3VwLXJlcXVlc3Rlci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUtcHJpdmF0ZS5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUuYzog
QWRkZWQuCisgICAgICAgIChnZXRfY2FjaGVhYmlsaXR5KToKKyAgICAgICAgKHdlYmtpdF9zb3Vw
X2NhY2hlX2VudHJ5X2ZyZWUpOgorICAgICAgICAoY29weV9oZWFkZXJzKToKKyAgICAgICAgKHVw
ZGF0ZV9oZWFkZXJzKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2dldF9jdXJy
ZW50X2FnZSk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9pc19mcmVzaF9lbm91
Z2gpOgorICAgICAgICAoc291cF9tZXNzYWdlX2dldF9jYWNoZV9rZXkpOgorICAgICAgICAod2Vi
a2l0X3NvdXBfY2FjaGVfZW50cnlfc2V0X2ZyZXNobmVzcyk6CisgICAgICAgICh3ZWJraXRfc291
cF9jYWNoZV9lbnRyeV9uZXcpOgorICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfd3JpdGluZ19m
aXh0dXJlX2ZyZWUpOgorICAgICAgICAoY2xvc2VfcmVhZHlfY2IpOgorICAgICAgICAod3JpdGVf
cmVhZHlfY2IpOgorICAgICAgICAobXNnX2dvdF9jaHVua19jYik6CisgICAgICAgIChtc2dfZ290
X2JvZHlfY2IpOgorICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfZW50cnlfZGVsZXRlKToKKyAg
ICAgICAgKGxydV9jb21wYXJlX2Z1bmMpOgorICAgICAgICAoY2FjaGVfYWNjZXB0c19lbnRyaWVz
X29mX3NpemUpOgorICAgICAgICAobWFrZV9yb29tX2Zvcl9uZXdfZW50cnkpOgorICAgICAgICAo
d2Via2l0X3NvdXBfY2FjaGVfZW50cnlfaW5zZXJ0X2J5X2tleSk6CisgICAgICAgIChtc2dfcmVz
dGFydGVkX2NiKToKKyAgICAgICAgKGFwcGVuZF90b19yZWFkeV9jYik6CisgICAgICAgIChtc2df
Z290X2hlYWRlcnNfY2IpOgorICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfc2VuZF9yZXNwb25z
ZSk6CisgICAgICAgIChyZXF1ZXN0X3N0YXJ0ZWQpOgorICAgICAgICAoYXR0YWNoKToKKyAgICAg
ICAgKHdlYmtpdF9zb3VwX2NhY2hlX3Nlc3Npb25fZmVhdHVyZV9pbml0KToKKyAgICAgICAgKHdl
YmtpdF9zb3VwX2NhY2hlX2luaXQpOgorICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfZmluYWxp
emUpOgorICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfc2V0X3Byb3BlcnR5KToKKyAgICAgICAg
KHdlYmtpdF9zb3VwX2NhY2hlX2dldF9wcm9wZXJ0eSk6CisgICAgICAgICh3ZWJraXRfc291cF9j
YWNoZV9jb25zdHJ1Y3RlZCk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV90eXBlX2dldF90
eXBlKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2NsYXNzX2luaXQpOgorICAgICAgICAo
d2Via2l0X3NvdXBfY2FjaGVfbmV3KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2hhc19y
ZXNwb25zZSk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9nZXRfY2FjaGVhYmlsaXR5KToK
KyAgICAgICAgKGZvcmNlX2ZsdXNoX3RpbWVvdXQpOgorICAgICAgICAod2Via2l0X3NvdXBfY2Fj
aGVfZmx1c2gpOgorICAgICAgICAocmVtb3ZlX2NhY2hlX2l0ZW0pOgorICAgICAgICAod2Via2l0
X3NvdXBfY2FjaGVfY2xlYXIpOgorICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfZ2VuZXJhdGVf
Y29uZGl0aW9uYWxfcmVxdWVzdCk6CisgICAgICAgIChwYWNrX2VudHJ5KToKKyAgICAgICAgKHdl
YmtpdF9zb3VwX2NhY2hlX2R1bXApOgorICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfbG9hZCk6
CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9zZXRfbWF4X3NpemUpOgorICAgICAgICAod2Vi
a2l0X3NvdXBfY2FjaGVfZ2V0X21heF9zaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUuaDogQWRkZWQuCisKIDIwMTAtMDktMjYgIFBh
dHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgQWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDQ0YzcxYjUuLjVjOWQ3NmUgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtNzks
NyArNzksOSBAQCB3ZWJjb3JlZ3RrX2NwcGZsYWdzICs9IFwKIAktSSQoc3JjZGlyKS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lciBcCiAJLUkkKHNyY2RpcikvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsgXAogCS1JJChzcmNkaXIpL1dlYkNvcmUvcGxhdGZvcm0vZ3RrIFwK
LQktSSQoc3JjZGlyKS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cAorCS1JJChzcmNkaXIp
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwIFwKKwktSSQoc3JjZGlyKS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9jYWNoZSBcCisJLUkkKHNyY2RpcikvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0CiAKIHdlYmNvcmVfYnVpbHRfbm9zb3VyY2VzICs9
IFwKIAlEZXJpdmVkU291cmNlcy9XZWJDb3JlL0RvY1R5cGVTdHJpbmdzLmNwcCBcCkBAIC0zNDg2
LDYgKzM0ODgsMjIgQEAgd2ViY29yZWd0a19zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1FcnJvci5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGUuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlU291cC5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL2NhY2hlL3NvdXAtZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5jIFwKKwlXZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJl
YW0uaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1odHRwLWlu
cHV0LXN0cmVhbS5jIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3Vw
LWh0dHAtaW5wdXQtc3RyZWFtLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2Nh
Y2hlL3NvdXAtcmVxdWVzdC1kYXRhLmMgXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3Vw
L2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmMgXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRwLmMgXAorCVdlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRwLmggXAorCVdlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5jIFwKKwlXZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuYyBcCisJV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUuYyBcCisJV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUuaCBcCiAJV2ViQ29yZS9wbHVn
aW5zL2d0ay9QbHVnaW5EYXRhR3RrLmNwcCBcCiAJV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5Q
YWNrYWdlR3RrLmNwcCBcCiAJV2ViQ29yZS9wbHVnaW5zL2d0ay9QbHVnaW5WaWV3R3RrLmNwcApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1kaXJl
Y3RvcnktaW5wdXQtc3RyZWFtLmMgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNo
ZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi45MjNhYzZmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmMKQEAgLTAsMCAr
MSwxOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVkIEhhdCwgSW5jLgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1
ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJzb3VwLWRpcmVjdG9yeS1pbnB1dC1z
dHJlYW0uaCIKKworI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+
CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNkZWZpbmUgSU5JVF9TVFJJTkcgIjxodG1sPjxoZWFk
Pjx0aXRsZT5PTUchPC90aXRsZT48L2hlYWQ+PGJvZHk+PHRhYmxlPiIKKyNkZWZpbmUgRVhJVF9T
VFJJTkcgIjwvdGFibGU+PC9odG1sPiIKKworR19ERUZJTkVfVFlQRSAoU291cERpcmVjdG9yeUlu
cHV0U3RyZWFtLCBzb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW0sIEdfVFlQRV9JTlBVVF9TVFJF
QU0pCisKK3N0YXRpYyBTb3VwQnVmZmVyICoKK3NvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9w
YXJzZV9pbmZvIChTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW0gKiBzdHJlYW0sCisJCQkJCUdGaWxl
SW5mbyAqIGluZm8pCit7CisJU291cEJ1ZmZlciAqYnVmZmVyOworCUdTdHJpbmcgKnN0cmluZzsK
Kwljb25zdCBjaGFyICpzOworCWNoYXIgKmVzY2FwZWQsICpwYXRoLCAqeG1sX3N0cmluZzsKKwor
CWlmICghZ19maWxlX2luZm9fZ2V0X25hbWUgKGluZm8pKQorCQlyZXR1cm4gTlVMTDsKKworCXMg
PSBnX2ZpbGVfaW5mb19nZXRfZGlzcGxheV9uYW1lIChpbmZvKTsKKwlpZiAoIXMpIHsKKwkJcyA9
IGdfZmlsZV9pbmZvX2dldF9uYW1lIChpbmZvKTsKKwkJLyogRklYTUU6IGNvbnZlcnQgc29tZWhv
dz8gKi8KKwkJaWYgKCFnX3V0ZjhfdmFsaWRhdGUgKHMsIC0xLCBOVUxMKSkKKwkJCXJldHVybiBO
VUxMOworCX0KKwlzdHJpbmcgPSBnX3N0cmluZ19uZXcgKCI8dHI+Iik7CisKKwl4bWxfc3RyaW5n
ID0gZ19tYXJrdXBfZXNjYXBlX3RleHQgKHMsIC0xKTsKKwllc2NhcGVkID0gZ191cmlfZXNjYXBl
X3N0cmluZyAoZ19maWxlX2luZm9fZ2V0X25hbWUgKGluZm8pLCBOVUxMLCBGQUxTRSk7CisJcGF0
aCA9IGdfc3RyY29uY2F0IChzdHJlYW0tPnVyaSwgIi8iLCBlc2NhcGVkLCBOVUxMKTsKKwlnX2Zy
ZWUgKGVzY2FwZWQpOworCWdfc3RyaW5nX2FwcGVuZF9wcmludGYgKHN0cmluZywgIjx0ZD48YSBo
cmVmPVwiJXNcIj4lczwvYT48L3RkPiIsIHBhdGgsIHhtbF9zdHJpbmcpOworCWdfZnJlZSAocGF0
aCk7CisJZ19mcmVlICh4bWxfc3RyaW5nKTsKKwlnX3N0cmluZ19hcHBlbmQgKHN0cmluZywgIjwv
dHI+Iik7CisKKwlidWZmZXIgPSBzb3VwX2J1ZmZlcl9uZXcgKFNPVVBfTUVNT1JZX1RBS0UsIHN0
cmluZy0+c3RyLCBzdHJpbmctPmxlbik7CisJZ19zdHJpbmdfZnJlZSAoc3RyaW5nLCBGQUxTRSk7
CisKKwlyZXR1cm4gYnVmZmVyOworfQorCitzdGF0aWMgU291cEJ1ZmZlciAqCitzb3VwX2RpcmVj
dG9yeV9pbnB1dF9zdHJlYW1fcmVhZF9uZXh0X2ZpbGUgKFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVh
bSAgKnN0cmVhbSwKKwkJCQkJICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICAgICAgKmNhbmNlbGxh
YmxlLAorCQkJCQkgICAgR0Vycm9yICAgICAgICAgICAgICAgICAgICoqZXJyb3IpCit7CisJR0Zp
bGVJbmZvICppbmZvOworCVNvdXBCdWZmZXIgKmJ1ZmZlcjsKKwlHRXJyb3IgKmVyciA9IE5VTEw7
CisKKwlkbyB7CisJCWluZm8gPSBnX2ZpbGVfZW51bWVyYXRvcl9uZXh0X2ZpbGUgKHN0cmVhbS0+
ZW51bWVyYXRvciwgY2FuY2VsbGFibGUsICZlcnIpOworCQlpZiAoaW5mbyA9PSBOVUxMKSB7CisJ
CQlpZiAoZXJyKSB7CisJCQkJZ19wcm9wYWdhdGVfZXJyb3IgKGVycm9yLCBlcnIpOworCQkJCXJl
dHVybiBOVUxMOworCQkJfSBlbHNlIGlmICghc3RyZWFtLT5kb25lKSB7CisJCQkJc3RyZWFtLT5k
b25lID0gVFJVRTsKKwkJCQlyZXR1cm4gc291cF9idWZmZXJfbmV3IChTT1VQX01FTU9SWV9TVEFU
SUMsCisJCQkJCQkJRVhJVF9TVFJJTkcsCisJCQkJCQkJc2l6ZW9mIChFWElUX1NUUklORykpOwor
CQkJfSBlbHNlIHsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJfQorCisJCWJ1ZmZlciA9IHNv
dXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9wYXJzZV9pbmZvIChzdHJlYW0sIGluZm8pOworCX0g
d2hpbGUgKGJ1ZmZlciA9PSBOVUxMKTsKKworCXJldHVybiBidWZmZXI7Cit9CisKK3N0YXRpYyBn
c3NpemUKK3NvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9yZWFkIChHSW5wdXRTdHJlYW0gICpp
bnB1dCwKKwkJCQkgIHZvaWQgICAgICAgICAgKmJ1ZmZlciwKKwkJCQkgIGdzaXplIGNvdW50LAor
CQkJCSAgR0NhbmNlbGxhYmxlICAqY2FuY2VsbGFibGUsCisJCQkJICBHRXJyb3IgICAgICAgKipl
cnJvcikKK3sKKwlTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW0gKnN0cmVhbSA9IFNPVVBfRElSRUNU
T1JZX0lOUFVUX1NUUkVBTSAoaW5wdXQpOworCWdzc2l6ZSB0b3RhbCwgc2l6ZTsKKworCWZvciAo
dG90YWwgPSAwOyB0b3RhbCA8IGNvdW50OyB0b3RhbCArPSBzaXplKSB7CisJCWlmIChzdHJlYW0t
PmJ1ZmZlciA9PSBOVUxMKSB7CisJCQlzdHJlYW0tPmJ1ZmZlciA9IHNvdXBfZGlyZWN0b3J5X2lu
cHV0X3N0cmVhbV9yZWFkX25leHRfZmlsZSAoc3RyZWFtLCBjYW5jZWxsYWJsZSwgZXJyb3IpOwor
CQkJaWYgKHN0cmVhbS0+YnVmZmVyID09IE5VTEwpIHsKKwkJCQkvKiBGSVhNRTogSXMgdGhpcyBj
b3JyZWN0IG9yIHNob3VsZCB3ZSBmb3J3YXJkIHRoZSBlcnJvcj8gKi8KKwkJCQlpZiAodG90YWwp
CisJCQkJCWdfY2xlYXJfZXJyb3IgKGVycm9yKTsKKwkJCQlyZXR1cm4gdG90YWw7CisJCQl9CisJ
CX0KKworCQlzaXplID0gTUlOIChzdHJlYW0tPmJ1ZmZlci0+bGVuZ3RoLCBjb3VudCAtIHRvdGFs
KTsKKwkJbWVtY3B5ICgoY2hhciAqKWJ1ZmZlciArIHRvdGFsLCBzdHJlYW0tPmJ1ZmZlci0+ZGF0
YSwgc2l6ZSk7CisJCWlmIChzaXplID09IHN0cmVhbS0+YnVmZmVyLT5sZW5ndGgpIHsKKwkJCXNv
dXBfYnVmZmVyX2ZyZWUgKHN0cmVhbS0+YnVmZmVyKTsKKwkJCXN0cmVhbS0+YnVmZmVyID0gTlVM
TDsKKwkJfSBlbHNlIHsKKwkJCVNvdXBCdWZmZXIgKnN1YiA9IHNvdXBfYnVmZmVyX25ld19zdWJi
dWZmZXIgKHN0cmVhbS0+YnVmZmVyLAorCQkJCQkJCQkgICAgIHNpemUsCisJCQkJCQkJCSAgICAg
c3RyZWFtLT5idWZmZXItPmxlbmd0aCAtIHNpemUpOworCQkJc291cF9idWZmZXJfZnJlZSAoc3Ry
ZWFtLT5idWZmZXIpOworCQkJc3RyZWFtLT5idWZmZXIgPSBzdWI7CisJCX0KKwl9CisKKwlyZXR1
cm4gdG90YWw7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorc291cF9kaXJlY3RvcnlfaW5wdXRfc3Ry
ZWFtX2Nsb3NlIChHSW5wdXRTdHJlYW0gICppbnB1dCwKKwkJCQkgICBHQ2FuY2VsbGFibGUgICpj
YW5jZWxsYWJsZSwKKwkJCQkgICBHRXJyb3IgICAgICAgKiplcnJvcikKK3sKKwlTb3VwRGlyZWN0
b3J5SW5wdXRTdHJlYW0gKnN0cmVhbSA9IFNPVVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTSAoaW5w
dXQpOworCWdib29sZWFuIHJlc3VsdDsKKworCWlmIChzdHJlYW0tPmJ1ZmZlcikgeworCQlzb3Vw
X2J1ZmZlcl9mcmVlIChzdHJlYW0tPmJ1ZmZlcik7CisJCXN0cmVhbS0+YnVmZmVyID0gTlVMTDsK
Kwl9CisKKwlyZXN1bHQgPSBnX2ZpbGVfZW51bWVyYXRvcl9jbG9zZSAoc3RyZWFtLT5lbnVtZXJh
dG9yLAorCQkJCQkgIGNhbmNlbGxhYmxlLAorCQkJCQkgIGVycm9yKTsKKwlnX29iamVjdF91bnJl
ZiAoc3RyZWFtLT5lbnVtZXJhdG9yKTsKKwlzdHJlYW0tPmVudW1lcmF0b3IgPSBOVUxMOworCisJ
Z19mcmVlIChzdHJlYW0tPnVyaSk7CisJc3RyZWFtLT51cmkgPSBOVUxMOworCisJcmV0dXJuIHJl
c3VsdDsKK30KKworc3RhdGljIHZvaWQKK3NvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9jbGFz
c19pbml0IChTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW1DbGFzcyAqc3RyZWFtX2NsYXNzKQorewor
CUdJbnB1dFN0cmVhbUNsYXNzICppbnB1dHN0cmVhbV9jbGFzcyA9IEdfSU5QVVRfU1RSRUFNX0NM
QVNTIChzdHJlYW1fY2xhc3MpOworCisJaW5wdXRzdHJlYW1fY2xhc3MtPnJlYWRfZm4gPSBzb3Vw
X2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fcmVhZDsKKwlpbnB1dHN0cmVhbV9jbGFzcy0+Y2xvc2Vf
Zm4gPSBzb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fY2xvc2U7Cit9CisKK3N0YXRpYyB2b2lk
Citzb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1faW5pdCAoU291cERpcmVjdG9yeUlucHV0U3Ry
ZWFtICpzdHJlYW0pCit7CisJc3RyZWFtLT5idWZmZXIgPSBzb3VwX2J1ZmZlcl9uZXcgKFNPVVBf
TUVNT1JZX1NUQVRJQywKKwkJCQkJICBJTklUX1NUUklORywKKwkJCQkJICBzaXplb2YgKElOSVRf
U1RSSU5HKSk7Cit9CisKK0dJbnB1dFN0cmVhbSAqCitzb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJl
YW1fbmV3IChHRmlsZUVudW1lcmF0b3IgKmVudW1lcmF0b3IsCisJCQkJIFNvdXBVUkkgICAgICAg
ICAqdXJpKQoreworCUdJbnB1dFN0cmVhbSAqc3RyZWFtOworCisJZ19yZXR1cm5fdmFsX2lmX2Zh
aWwgKEdfSVNfRklMRV9FTlVNRVJBVE9SIChlbnVtZXJhdG9yKSwgTlVMTCk7CisJZ19yZXR1cm5f
dmFsX2lmX2ZhaWwgKHVyaSAhPSBOVUxMLCBOVUxMKTsKKworCXN0cmVhbSA9IGdfb2JqZWN0X25l
dyAoU09VUF9UWVBFX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0sIE5VTEwpOworCisJU09VUF9ESVJF
Q1RPUllfSU5QVVRfU1RSRUFNIChzdHJlYW0pLT5lbnVtZXJhdG9yID0gZ19vYmplY3RfcmVmIChl
bnVtZXJhdG9yKTsKKwlTT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0gKHN0cmVhbSktPnVyaSA9
IHNvdXBfdXJpX3RvX3N0cmluZyAodXJpLCBGQUxTRSk7CisKKwlyZXR1cm4gc3RyZWFtOworfQor
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWRp
cmVjdG9yeS1pbnB1dC1zdHJlYW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2Nh
Y2hlL3NvdXAtZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjRkMzIzZDIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uaApAQCAtMCww
ICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFJlZCBIYXQsIEluYy4KKyAqIENv
cHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBTT1VQX0RJUkVDVE9SWV9JTlBV
VF9TVFJFQU1fSAorI2RlZmluZSBTT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU1fSCAxCisKKyNp
bmNsdWRlIDxnaW8vZ2lvLmg+CisjaW5jbHVkZSA8bGlic291cC9zb3VwLXR5cGVzLmg+CisjaW5j
bHVkZSA8bGlic291cC9zb3VwLW1lc3NhZ2UtYm9keS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNk
ZWZpbmUgU09VUF9UWVBFX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0gICAgICAgICAgICAoc291cF9k
aXJlY3RvcnlfaW5wdXRfc3RyZWFtX2dldF90eXBlICgpKQorI2RlZmluZSBTT1VQX0RJUkVDVE9S
WV9JTlBVVF9TVFJFQU0ob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FT
VCAoKG9iaiksIFNPVVBfVFlQRV9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNLCBTb3VwRGlyZWN0b3J5
SW5wdXRTdHJlYW0pKQorI2RlZmluZSBTT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU1fQ0xBU1Mo
a2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgU09VUF9UWVBFX0RJ
UkVDVE9SWV9JTlBVVF9TVFJFQU0sIFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbUNsYXNzKSkKKyNk
ZWZpbmUgU09VUF9JU19ESVJFQ1RPUllfSU5QVVRfU1RSRUFNKG9iaikgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBTT1VQX1RZUEVfRElSRUNUT1JZX0lOUFVUX1NU
UkVBTSkpCisjZGVmaW5lIFNPVVBfSVNfRElSRUNUT1JZX0lOUFVUX1NUUkVBTV9DTEFTUyhrbGFz
cykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgob2JqKSwgU09VUF9UWVBFX0RJUkVDVE9SWV9J
TlBVVF9TVFJFQU0pKQorI2RlZmluZSBTT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU1fR0VUX0NM
QVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgU09VUF9UWVBFX0RJ
UkVDVE9SWV9JTlBVVF9TVFJFQU0sIFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbUNsYXNzKSkKKwor
dHlwZWRlZiBzdHJ1Y3QgX1NvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbSBTb3VwRGlyZWN0b3J5SW5w
dXRTdHJlYW07Cit0eXBlZGVmIHN0cnVjdCBfU291cERpcmVjdG9yeUlucHV0U3RyZWFtQ2xhc3Mg
U291cERpcmVjdG9yeUlucHV0U3RyZWFtQ2xhc3M7CisKK3N0cnVjdCBfU291cERpcmVjdG9yeUlu
cHV0U3RyZWFtIHsKKwlHSW5wdXRTdHJlYW0gcGFyZW50OworCisJR0ZpbGVFbnVtZXJhdG9yICpl
bnVtZXJhdG9yOworCWNoYXIgKnVyaTsKKwlTb3VwQnVmZmVyICpidWZmZXI7CisJZ2Jvb2xlYW4g
ZG9uZTsKK307CisKK3N0cnVjdCBfU291cERpcmVjdG9yeUlucHV0U3RyZWFtQ2xhc3MgeworCUdJ
bnB1dFN0cmVhbUNsYXNzIHBhcmVudF9jbGFzczsKK307CisKK0dUeXBlICAgICAgICAgIHNvdXBf
ZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9nZXRfdHlwZSAodm9pZCk7CisKK0dJbnB1dFN0cmVhbSAq
c291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX25ldyAoR0ZpbGVFbnVtZXJhdG9yICplbnVtZXJh
dG9yLAorCQkJCQkgICAgICAgU291cFVSSSAgICAgICAgICp1cmkpOworCisKK0dfRU5EX0RFQ0xT
CisKKyNlbmRpZiAvKiBTT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU1fSCAqLwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1odHRwLWlucHV0LXN0
cmVhbS5jIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1odHRwLWlu
cHV0LXN0cmVhbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiMjE2YjYK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9z
b3VwLWh0dHAtaW5wdXQtc3RyZWFtLmMKQEAgLTAsMCArMSw5MjEgQEAKKy8qIHNvdXAtaW5wdXQt
c3RyZWFtLmMsIGJhc2VkIG9uIGdzb2NrZXRpbnB1dHN0cmVhbS5jCisgKgorICogQ29weXJpZ2h0
IChDKSAyMDA2LTIwMDcgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxp
YSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLAorICogQm9zdG9u
LCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5j
bHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z2lvL2dpby5o
PgorCisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CisKKyNpbmNsdWRlICJzb3VwLWh0dHAtaW5w
dXQtc3RyZWFtLmgiCisKK3N0YXRpYyB2b2lkIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2Vla2Fi
bGVfaWZhY2VfaW5pdCAoR1NlZWthYmxlSWZhY2UgKnNlZWthYmxlX2lmYWNlKTsKKworR19ERUZJ
TkVfVFlQRV9XSVRIX0NPREUgKFNvdXBIVFRQSW5wdXRTdHJlYW0sIHNvdXBfaHR0cF9pbnB1dF9z
dHJlYW0sIEdfVFlQRV9JTlBVVF9TVFJFQU0sCisJCQkgR19JTVBMRU1FTlRfSU5URVJGQUNFIChH
X1RZUEVfU0VFS0FCTEUsCisJCQkJCQlzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlZWthYmxlX2lm
YWNlX2luaXQpKQorCit0eXBlZGVmIHZvaWQgKCpTb3VwSFRUUElucHV0U3RyZWFtQ2FsbGJhY2sp
KEdJbnB1dFN0cmVhbSAqKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCVNvdXBTZXNzaW9uICpzZXNz
aW9uOworCUdNYWluQ29udGV4dCAqYXN5bmNfY29udGV4dDsKKwlTb3VwTWVzc2FnZSAqbXNnOwor
CWdib29sZWFuIGdvdF9oZWFkZXJzLCBmaW5pc2hlZDsKKwlnb2Zmc2V0IG9mZnNldDsKKworCUdD
YW5jZWxsYWJsZSAqY2FuY2VsbGFibGU7CisJR1NvdXJjZSAqY2FuY2VsX3dhdGNoOworCVNvdXBI
VFRQSW5wdXRTdHJlYW1DYWxsYmFjayBnb3RfaGVhZGVyc19jYjsKKwlTb3VwSFRUUElucHV0U3Ry
ZWFtQ2FsbGJhY2sgZ290X2NodW5rX2NiOworCVNvdXBIVFRQSW5wdXRTdHJlYW1DYWxsYmFjayBm
aW5pc2hlZF9jYjsKKwlTb3VwSFRUUElucHV0U3RyZWFtQ2FsbGJhY2sgY2FuY2VsbGVkX2NiOwor
CisJZ3VjaGFyICpsZWZ0b3Zlcl9idWZmZXI7CisJZ3NpemUgbGVmdG92ZXJfYnVmc2l6ZSwgbGVm
dG92ZXJfb2Zmc2V0OworCisJZ3VjaGFyICpjYWxsZXJfYnVmZmVyOworCWdzaXplIGNhbGxlcl9i
dWZzaXplLCBjYWxsZXJfbnJlYWQ7CisJR0FzeW5jUmVhZHlDYWxsYmFjayBvdXRzdGFuZGluZ19j
YWxsYmFjazsKKwlHU2ltcGxlQXN5bmNSZXN1bHQgKnJlc3VsdDsKK30gU291cEhUVFBJbnB1dFN0
cmVhbVByaXZhdGU7CisjZGVmaW5lIFNPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUo
bykgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAoKG8pLCBTT1VQX1RZUEVfSFRUUF9JTlBV
VF9TVFJFQU0sIFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlKSkKKworCitzdGF0aWMgZ3NzaXpl
ICAgc291cF9odHRwX2lucHV0X3N0cmVhbV9yZWFkIChHSW5wdXRTdHJlYW0gICAgICAgICAqc3Ry
ZWFtLAorCQkJCQkgICAgIHZvaWQgICAgICAgICAgICAgICAgICpidWZmZXIsCisJCQkJCSAgICAg
Z3NpemUgY291bnQsCisJCQkJCSAgICAgR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxl
LAorCQkJCQkgICAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcik7CitzdGF0aWMgZ2Jvb2xl
YW4gc291cF9odHRwX2lucHV0X3N0cmVhbV9jbG9zZSAoR0lucHV0U3RyZWFtICAgICAgICAgKnN0
cmVhbSwKKwkJCQkJICAgICAgR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJ
CQkgICAgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpOworc3RhdGljIHZvaWQgICAgIHNv
dXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyAoR0lucHV0U3RyZWFtICAgICAgICAgKnN0
cmVhbSwKKwkJCQkJCSAgIHZvaWQgICAgICAgICAgICAgICAgICpidWZmZXIsCisJCQkJCQkgICBn
c2l6ZSBjb3VudCwKKwkJCQkJCSAgIGludCBpb19wcmlvcml0eSwKKwkJCQkJCSAgIEdDYW5jZWxs
YWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkJCSAgIEdBc3luY1JlYWR5Q2FsbGJhY2sg
Y2FsbGJhY2ssCisJCQkJCQkgICBncG9pbnRlciBkYXRhKTsKK3N0YXRpYyBnc3NpemUgICBzb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX3JlYWRfZmluaXNoIChHSW5wdXRTdHJlYW0gICAgICAgICAqc3Ry
ZWFtLAorCQkJCQkJICAgIEdBc3luY1Jlc3VsdCAgICAgICAgICpyZXN1bHQsCisJCQkJCQkgICAg
R0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKTsKK3N0YXRpYyB2b2lkICAgICBzb3VwX2h0dHBf
aW5wdXRfc3RyZWFtX2Nsb3NlX2FzeW5jIChHSW5wdXRTdHJlYW0gICAgICAgICAqc3RyZWFtLAor
CQkJCQkJICAgIGludCBpb19wcmlvcml0eSwKKwkJCQkJCSAgICBHQ2FuY2VsbGFibGUgICAgICAg
ICAqY2FuY2VsbGFibGUsCisJCQkJCQkgICAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywK
KwkJCQkJCSAgICBncG9pbnRlciBkYXRhKTsKK3N0YXRpYyBnYm9vbGVhbiBzb3VwX2h0dHBfaW5w
dXRfc3RyZWFtX2Nsb3NlX2ZpbmlzaCAoR0lucHV0U3RyZWFtICAgICAgICAgKnN0cmVhbSwKKwkJ
CQkJCSAgICAgR0FzeW5jUmVzdWx0ICAgICAgICAgKnJlc3VsdCwKKwkJCQkJCSAgICAgR0Vycm9y
ICAgICAgICAgICAgICAqKmVycm9yKTsKKworc3RhdGljIGdvZmZzZXQgIHNvdXBfaHR0cF9pbnB1
dF9zdHJlYW1fdGVsbCAoR1NlZWthYmxlICAgICAgICAgICAgKnNlZWthYmxlKTsKKworc3RhdGlj
IGdib29sZWFuIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2FuX3NlZWsgKEdTZWVrYWJsZSAgICAg
ICAgICAgICpzZWVrYWJsZSk7CitzdGF0aWMgZ2Jvb2xlYW4gc291cF9odHRwX2lucHV0X3N0cmVh
bV9zZWVrIChHU2Vla2FibGUgICAgICAgICAgICAqc2Vla2FibGUsCisJCQkJCSAgICAgZ29mZnNl
dCBvZmZzZXQsCisJCQkJCSAgICAgR1NlZWtUeXBlIHR5cGUsCisJCQkJCSAgICAgR0NhbmNlbGxh
YmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJCQkgICAgIEdFcnJvciAgICAgICAgICAgICAg
KiplcnJvcik7CisKK3N0YXRpYyBnYm9vbGVhbiBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nhbl90
cnVuY2F0ZSAoR1NlZWthYmxlICAgICAgICAgICAgKnNlZWthYmxlKTsKK3N0YXRpYyBnYm9vbGVh
biBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3RydW5jYXRlIChHU2Vla2FibGUgICAgICAgICAgICAq
c2Vla2FibGUsCisJCQkJCQkgZ29mZnNldCBvZmZzZXQsCisJCQkJCQkgR0NhbmNlbGxhYmxlICAg
ICAgICAgKmNhbmNlbGxhYmxlLAorCQkJCQkJIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcik7
CisKK3N0YXRpYyB2b2lkIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ290X2hlYWRlcnMgKFNvdXBN
ZXNzYWdlICptc2csIGdwb2ludGVyIHN0cmVhbSk7CitzdGF0aWMgdm9pZCBzb3VwX2h0dHBfaW5w
dXRfc3RyZWFtX2dvdF9jaHVuayAoU291cE1lc3NhZ2UgKm1zZywgU291cEJ1ZmZlciAqY2h1bmss
IGdwb2ludGVyIHN0cmVhbSk7CitzdGF0aWMgdm9pZCBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Zp
bmlzaGVkIChTb3VwTWVzc2FnZSAqbXNnLCBncG9pbnRlciBzdHJlYW0pOworCitzdGF0aWMgdm9p
ZAorc291cF9odHRwX2lucHV0X3N0cmVhbV9maW5hbGl6ZSAoR09iamVjdCAqb2JqZWN0KQorewor
CVNvdXBIVFRQSW5wdXRTdHJlYW0gKnN0cmVhbSA9IFNPVVBfSFRUUF9JTlBVVF9TVFJFQU0gKG9i
amVjdCk7CisJU291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBTT1VQX0hUVFBfSU5Q
VVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOworCisJZ19vYmplY3RfdW5yZWYgKHByaXYt
PnNlc3Npb24pOworCisJZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jIChwcml2
LT5tc2csIEdfQ0FMTEJBQ0sgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ290X2hlYWRlcnMpLCBz
dHJlYW0pOworCWdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyAocHJpdi0+bXNn
LCBHX0NBTExCQUNLIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dvdF9jaHVuayksIHN0cmVhbSk7
CisJZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jIChwcml2LT5tc2csIEdfQ0FM
TEJBQ0sgKHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZmluaXNoZWQpLCBzdHJlYW0pOworCWdfb2Jq
ZWN0X3VucmVmIChwcml2LT5tc2cpOworCWdfZnJlZSAocHJpdi0+bGVmdG92ZXJfYnVmZmVyKTsK
KworCWlmIChHX09CSkVDVF9DTEFTUyAoc291cF9odHRwX2lucHV0X3N0cmVhbV9wYXJlbnRfY2xh
c3MpLT5maW5hbGl6ZSkKKwkJKCpHX09CSkVDVF9DTEFTUyAoc291cF9odHRwX2lucHV0X3N0cmVh
bV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSkob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQKK3Nv
dXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xhc3NfaW5pdCAoU291cEhUVFBJbnB1dFN0cmVhbUNsYXNz
ICprbGFzcykKK3sKKwlHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFT
UyAoa2xhc3MpOworCUdJbnB1dFN0cmVhbUNsYXNzICpzdHJlYW1fY2xhc3MgPSBHX0lOUFVUX1NU
UkVBTV9DTEFTUyAoa2xhc3MpOworCisJZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlIChrbGFzcywg
c2l6ZW9mIChTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSkpOworCisJZ29iamVjdF9jbGFzcy0+
ZmluYWxpemUgPSBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2ZpbmFsaXplOworCisJc3RyZWFtX2Ns
YXNzLT5yZWFkX2ZuID0gc291cF9odHRwX2lucHV0X3N0cmVhbV9yZWFkOworCXN0cmVhbV9jbGFz
cy0+Y2xvc2VfZm4gPSBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlOworCXN0cmVhbV9jbGFz
cy0+cmVhZF9hc3luYyA9IHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVhZF9hc3luYzsKKwlzdHJl
YW1fY2xhc3MtPnJlYWRfZmluaXNoID0gc291cF9odHRwX2lucHV0X3N0cmVhbV9yZWFkX2Zpbmlz
aDsKKwlzdHJlYW1fY2xhc3MtPmNsb3NlX2FzeW5jID0gc291cF9odHRwX2lucHV0X3N0cmVhbV9j
bG9zZV9hc3luYzsKKwlzdHJlYW1fY2xhc3MtPmNsb3NlX2ZpbmlzaCA9IHNvdXBfaHR0cF9pbnB1
dF9zdHJlYW1fY2xvc2VfZmluaXNoOworfQorCitzdGF0aWMgdm9pZAorc291cF9odHRwX2lucHV0
X3N0cmVhbV9zZWVrYWJsZV9pZmFjZV9pbml0IChHU2Vla2FibGVJZmFjZSAqc2Vla2FibGVfaWZh
Y2UpCit7CisJc2Vla2FibGVfaWZhY2UtPnRlbGwgPSBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3Rl
bGw7CisJc2Vla2FibGVfaWZhY2UtPmNhbl9zZWVrID0gc291cF9odHRwX2lucHV0X3N0cmVhbV9j
YW5fc2VlazsKKwlzZWVrYWJsZV9pZmFjZS0+c2VlayA9IHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1f
c2VlazsKKwlzZWVrYWJsZV9pZmFjZS0+Y2FuX3RydW5jYXRlID0gc291cF9odHRwX2lucHV0X3N0
cmVhbV9jYW5fdHJ1bmNhdGU7CisJc2Vla2FibGVfaWZhY2UtPnRydW5jYXRlX2ZuID0gc291cF9o
dHRwX2lucHV0X3N0cmVhbV90cnVuY2F0ZTsKK30KKworc3RhdGljIHZvaWQKK3NvdXBfaHR0cF9p
bnB1dF9zdHJlYW1faW5pdCAoU291cEhUVFBJbnB1dFN0cmVhbSAqc3RyZWFtKQoreworCTsKK30K
Kworc3RhdGljIHZvaWQKK3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcXVldWVfbWVzc2FnZSAoU291
cEhUVFBJbnB1dFN0cmVhbSAqc3RyZWFtKQoreworCVNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRl
ICpwcml2ID0gU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKwor
CXByaXYtPmdvdF9oZWFkZXJzID0gcHJpdi0+ZmluaXNoZWQgPSBGQUxTRTsKKworCS8qIEFkZCBh
biBleHRyYSByZWYgc2luY2Ugc291cF9zZXNzaW9uX3F1ZXVlX21lc3NhZ2Ugc3RlYWxzIG9uZSAq
LworCWdfb2JqZWN0X3JlZiAocHJpdi0+bXNnKTsKKwlzb3VwX3Nlc3Npb25fcXVldWVfbWVzc2Fn
ZSAocHJpdi0+c2Vzc2lvbiwgcHJpdi0+bXNnLCBOVUxMLCBOVUxMKTsKK30KKworLyoqCisgKiBz
b3VwX2h0dHBfaW5wdXRfc3RyZWFtX25ldzoKKyAqIEBzZXNzaW9uOiB0aGUgI1NvdXBTZXNzaW9u
IHRvIHVzZQorICogQG1zZzogdGhlICNTb3VwTWVzc2FnZSB3aG9zZSByZXNwb25zZSB3aWxsIGJl
IHN0cmVhbWVkCisgKgorICogUHJlcGFyZXMgdG8gc2VuZCBAbXNnIG92ZXIgQHNlc3Npb24sIGFu
ZCByZXR1cm5zIGEgI0dJbnB1dFN0cmVhbQorICogdGhhdCBjYW4gYmUgdXNlZCB0byByZWFkIHRo
ZSByZXNwb25zZS4KKyAqCisgKiBAbXNnIG1heSBub3QgYmUgc2VudCB1bnRpbCB0aGUgZmlyc3Qg
cmVhZCBjYWxsOyBpZiB5b3UgbmVlZCB0byBsb29rCisgKiBhdCB0aGUgc3RhdHVzIGNvZGUgb3Ig
cmVzcG9uc2UgaGVhZGVycyBiZWZvcmUgcmVhZGluZyB0aGUgYm9keSwgeW91CisgKiBjYW4gdXNl
IHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZCgpIG9yIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1f
c2VuZF9hc3luYygpCisgKiB0byBmb3JjZSB0aGUgbWVzc2FnZSB0byBiZSBzZW50IGFuZCB0aGUg
cmVzcG9uc2UgaGVhZGVycyByZWFkLgorICoKKyAqIElmIEBtc2cgZ2V0cyBhIG5vbi0yeHggcmVz
dWx0LCB0aGUgZmlyc3QgcmVhZCAob3Igc2VuZCkgd2lsbCByZXR1cm4KKyAqIGFuIGVycm9yIHdp
dGggdHlwZSAlU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9IVFRQX0VSUk9SLgorICoKKyAqIEludGVy
bmFsbHksICNTb3VwSFRUUElucHV0U3RyZWFtIGlzIGltcGxlbWVudGVkIHVzaW5nIGFzeW5jaHJv
bm91cyBJL08sCisgKiBzbyBpZiB5b3UgYXJlIHVzaW5nIHRoZSBzeW5jaHJvbm91cyBBUEkgKGVn
LAorICogZ19pbnB1dF9zdHJlYW1fcmVhZCgpKSwgeW91IHNob3VsZCBjcmVhdGUgYSBuZXcgI0dN
YWluQ29udGV4dCBhbmQKKyAqIHNldCBpdCBhcyB0aGUgJVNPVVBfU0VTU0lPTl9BU1lOQ19DT05U
RVhUIHByb3BlcnR5IG9uIEBzZXNzaW9uLiAoSWYKKyAqIHlvdSBkb24ndCwgdGhlbiBzeW5jaHJv
bm91cyAjR0lucHV0U3RyZWFtIGNhbGxzIHdpbGwgY2F1c2UgdGhlIG1haW4KKyAqIGxvb3AgdG8g
YmUgcnVuIHJlY3Vyc2l2ZWx5LikgVGhlIGFzeW5jICNHSW5wdXRTdHJlYW0gQVBJIHdvcmtzIGZp
bmUKKyAqIHdpdGggJVNPVVBfU0VTU0lPTl9BU1lOQ19DT05URVhUIGVpdGhlciBzZXQgb3IgdW5z
ZXQuCisgKgorICogUmV0dXJuczogYSBuZXcgI0dJbnB1dFN0cmVhbS4KKyAqKi8KK1NvdXBIVFRQ
SW5wdXRTdHJlYW0gKgorc291cF9odHRwX2lucHV0X3N0cmVhbV9uZXcgKFNvdXBTZXNzaW9uICpz
ZXNzaW9uLCBTb3VwTWVzc2FnZSAqbXNnKQoreworCVNvdXBIVFRQSW5wdXRTdHJlYW0gKnN0cmVh
bTsKKwlTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdjsKKworCWdfcmV0dXJuX3ZhbF9p
Zl9mYWlsIChTT1VQX0lTX01FU1NBR0UgKG1zZyksIE5VTEwpOworCisJc3RyZWFtID0gZ19vYmpl
Y3RfbmV3IChTT1VQX1RZUEVfSFRUUF9JTlBVVF9TVFJFQU0sIE5VTEwpOworCXByaXYgPSBTT1VQ
X0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOworCisJcHJpdi0+c2Vzc2lv
biA9IGdfb2JqZWN0X3JlZiAoc2Vzc2lvbik7CisJcHJpdi0+YXN5bmNfY29udGV4dCA9IHNvdXBf
c2Vzc2lvbl9nZXRfYXN5bmNfY29udGV4dCAoc2Vzc2lvbik7CisJcHJpdi0+bXNnID0gZ19vYmpl
Y3RfcmVmIChtc2cpOworCisJZ19zaWduYWxfY29ubmVjdCAobXNnLCAiZ290X2hlYWRlcnMiLAor
CQkJICBHX0NBTExCQUNLIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dvdF9oZWFkZXJzKSwgc3Ry
ZWFtKTsKKwlnX3NpZ25hbF9jb25uZWN0IChtc2csICJnb3RfY2h1bmsiLAorCQkJICBHX0NBTExC
QUNLIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dvdF9jaHVuayksIHN0cmVhbSk7CisJZ19zaWdu
YWxfY29ubmVjdCAobXNnLCAiZmluaXNoZWQiLAorCQkJICBHX0NBTExCQUNLIChzb3VwX2h0dHBf
aW5wdXRfc3RyZWFtX2ZpbmlzaGVkKSwgc3RyZWFtKTsKKworCXNvdXBfaHR0cF9pbnB1dF9zdHJl
YW1fcXVldWVfbWVzc2FnZSAoc3RyZWFtKTsKKwlyZXR1cm4gc3RyZWFtOworfQorCitzdGF0aWMg
dm9pZAorc291cF9odHRwX2lucHV0X3N0cmVhbV9nb3RfaGVhZGVycyAoU291cE1lc3NhZ2UgKm1z
ZywgZ3BvaW50ZXIgc3RyZWFtKQoreworCVNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2
ID0gU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKworCS8qIElm
IHRoZSBzdGF0dXMgaXMgdW5zdWNjZXNzZnVsLCB3ZSBqdXN0IGlnbm9yZSB0aGUgc2lnbmFsIGFu
ZCBsZXQKKwkgKiBsaWJzb3VwIGtlZXAgZ29pbmcgKGV2ZW50dWFsbHkgZWl0aGVyIGl0IHdpbGwg
cmVxdWV1ZSB0aGUgcmVxdWVzdAorCSAqIChhZnRlciBoYW5kbGluZyBhdXRoZW50aWNhdGlvbi9y
ZWRpcmVjdGlvbiksIG9yIGVsc2UgdGhlCisJICogImZpbmlzaGVkIiBoYW5kbGVyIHdpbGwgcnVu
KS4KKwkgKi8KKwlpZiAoIVNPVVBfU1RBVFVTX0lTX1NVQ0NFU1NGVUwgKG1zZy0+c3RhdHVzX2Nv
ZGUpKQorCQlyZXR1cm47CisKKwlwcml2LT5nb3RfaGVhZGVycyA9IFRSVUU7CisJaWYgKCFwcml2
LT5jYWxsZXJfYnVmZmVyKSB7CisJCS8qIE5vdCByZWFkeSB0byByZWFkIHRoZSBib2R5IHlldCAq
LworCQlzb3VwX3Nlc3Npb25fcGF1c2VfbWVzc2FnZSAocHJpdi0+c2Vzc2lvbiwgbXNnKTsKKwl9
CisKKwlpZiAocHJpdi0+Z290X2hlYWRlcnNfY2IpCisJCXByaXYtPmdvdF9oZWFkZXJzX2NiIChz
dHJlYW0pOworfQorCitzdGF0aWMgdm9pZAorc291cF9odHRwX2lucHV0X3N0cmVhbV9nb3RfY2h1
bmsgKFNvdXBNZXNzYWdlICptc2csIFNvdXBCdWZmZXIgKmNodW5rX2J1ZmZlciwKKwkJCQkgIGdw
b2ludGVyIHN0cmVhbSkKK3sKKwlTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFNP
VVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7CisJY29uc3QgZ2NoYXIg
KmNodW5rID0gY2h1bmtfYnVmZmVyLT5kYXRhOworCWdzaXplIGNodW5rX3NpemUgPSBjaHVua19i
dWZmZXItPmxlbmd0aDsKKworCS8qIFdlIG9ubHkgcGF5IGF0dGVudGlvbiB0byB0aGUgY2h1bmsg
aWYgaXQncyBwYXJ0IG9mIGEgc3VjY2Vzc2Z1bAorCSAqIHJlc3BvbnNlLgorCSAqLworCWlmICgh
U09VUF9TVEFUVVNfSVNfU1VDQ0VTU0ZVTCAobXNnLT5zdGF0dXNfY29kZSkpCisJCXJldHVybjsK
KworCS8qIFNhbml0eSBjaGVjayAqLworCWlmIChwcml2LT5jYWxsZXJfYnVmc2l6ZSA9PSAwIHx8
IHByaXYtPmxlZnRvdmVyX2J1ZnNpemUgIT0gMCkKKwkJZ193YXJuaW5nICgic291cF9odHRwX2lu
cHV0X3N0cmVhbV9nb3RfY2h1bmsgY2FsbGVkIGFnYWluIGJlZm9yZSBwcmV2aW91cyBjaHVuayB3
YXMgcHJvY2Vzc2VkIik7CisKKwkvKiBDb3B5IHdoYXQgd2UgY2FuIGludG8gcHJpdi0+Y2FsbGVy
X2J1ZmZlciAqLworCWlmIChwcml2LT5jYWxsZXJfYnVmc2l6ZSAtIHByaXYtPmNhbGxlcl9ucmVh
ZCA+IDApIHsKKwkJZ3NpemUgbnJlYWQgPSBNSU4gKGNodW5rX3NpemUsIHByaXYtPmNhbGxlcl9i
dWZzaXplIC0gcHJpdi0+Y2FsbGVyX25yZWFkKTsKKworCQltZW1jcHkgKHByaXYtPmNhbGxlcl9i
dWZmZXIgKyBwcml2LT5jYWxsZXJfbnJlYWQsIGNodW5rLCBucmVhZCk7CisJCXByaXYtPmNhbGxl
cl9ucmVhZCArPSBucmVhZDsKKwkJcHJpdi0+b2Zmc2V0ICs9IG5yZWFkOworCQljaHVuayArPSBu
cmVhZDsKKwkJY2h1bmtfc2l6ZSAtPSBucmVhZDsKKwl9CisKKwlpZiAoY2h1bmtfc2l6ZSA+IDAp
IHsKKwkJLyogQ29weSB0aGUgcmVzdCBpbnRvIHByaXYtPmxlZnRvdmVyX2J1ZmZlci4gSWYKKwkJ
ICogdGhlcmUncyBhbHJlYWR5IHNvbWUgZGF0YSB0aGVyZSwgcmVhbGxvYyBhbmQKKwkJICogYXBw
ZW5kLiBPdGhlcndpc2UganVzdCBjb3B5LgorCQkgKi8KKwkJaWYgKHByaXYtPmxlZnRvdmVyX2J1
ZnNpemUpIHsKKwkJCXByaXYtPmxlZnRvdmVyX2J1ZmZlciA9IGdfcmVhbGxvYyAocHJpdi0+bGVm
dG92ZXJfYnVmZmVyLAorCQkJCQkJCSAgIHByaXYtPmxlZnRvdmVyX2J1ZnNpemUgKyBjaHVua19z
aXplKTsKKwkJCW1lbWNweSAocHJpdi0+bGVmdG92ZXJfYnVmZmVyICsgcHJpdi0+bGVmdG92ZXJf
YnVmc2l6ZSwKKwkJCQljaHVuaywgY2h1bmtfc2l6ZSk7CisJCQlwcml2LT5sZWZ0b3Zlcl9idWZz
aXplICs9IGNodW5rX3NpemU7CisJCX0gZWxzZSB7CisJCQlwcml2LT5sZWZ0b3Zlcl9idWZzaXpl
ID0gY2h1bmtfc2l6ZTsKKwkJCXByaXYtPmxlZnRvdmVyX2J1ZmZlciA9IGdfbWVtZHVwIChjaHVu
aywgY2h1bmtfc2l6ZSk7CisJCQlwcml2LT5sZWZ0b3Zlcl9vZmZzZXQgPSAwOworCQl9CisJfQor
CisJc291cF9zZXNzaW9uX3BhdXNlX21lc3NhZ2UgKHByaXYtPnNlc3Npb24sIG1zZyk7CisJaWYg
KHByaXYtPmdvdF9jaHVua19jYikKKwkJcHJpdi0+Z290X2NodW5rX2NiIChzdHJlYW0pOworfQor
CitzdGF0aWMgdm9pZAorc291cF9odHRwX2lucHV0X3N0cmVhbV9maW5pc2hlZCAoU291cE1lc3Nh
Z2UgKm1zZywgZ3BvaW50ZXIgc3RyZWFtKQoreworCVNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRl
ICpwcml2ID0gU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKwor
CXByaXYtPmZpbmlzaGVkID0gVFJVRTsKKworCWlmIChwcml2LT5maW5pc2hlZF9jYikKKwkJcHJp
di0+ZmluaXNoZWRfY2IgKHN0cmVhbSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorc291cF9odHRw
X2lucHV0X3N0cmVhbV9jYW5jZWxsZWQgKEdJT0NoYW5uZWwgKmNoYW4sIEdJT0NvbmRpdGlvbiBj
b25kaXRpb24sCisJCQkJICBncG9pbnRlciBzdHJlYW0pCit7CisJU291cEhUVFBJbnB1dFN0cmVh
bVByaXZhdGUgKnByaXYgPSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJl
YW0pOworCisJcHJpdi0+Y2FuY2VsX3dhdGNoID0gTlVMTDsKKworCXNvdXBfc2Vzc2lvbl9wYXVz
ZV9tZXNzYWdlIChwcml2LT5zZXNzaW9uLCBwcml2LT5tc2cpOworCWlmIChwcml2LT5jYW5jZWxs
ZWRfY2IpCisJCXByaXYtPmNhbmNlbGxlZF9jYiAoc3RyZWFtKTsKKworCXJldHVybiBGQUxTRTsK
K30KKworc3RhdGljIHZvaWQKK3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcHJlcGFyZV9mb3JfaW8g
KEdJbnB1dFN0cmVhbSAqc3RyZWFtLAorCQkJCSAgICAgICBHQ2FuY2VsbGFibGUgKmNhbmNlbGxh
YmxlLAorCQkJCSAgICAgICBndWNoYXIgICAgICAgKmJ1ZmZlciwKKwkJCQkgICAgICAgZ3NpemUg
Y291bnQpCit7CisJU291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBTT1VQX0hUVFBf
SU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOworCWludCBjYW5jZWxfZmQ7CisKKwlw
cml2LT5jYW5jZWxsYWJsZSA9IGNhbmNlbGxhYmxlOworCWNhbmNlbF9mZCA9IGdfY2FuY2VsbGFi
bGVfZ2V0X2ZkIChjYW5jZWxsYWJsZSk7CisJaWYgKGNhbmNlbF9mZCAhPSAtMSkgeworCQlHSU9D
aGFubmVsICpjaGFuID0gZ19pb19jaGFubmVsX3VuaXhfbmV3IChjYW5jZWxfZmQpOworCQlwcml2
LT5jYW5jZWxfd2F0Y2ggPSBzb3VwX2FkZF9pb193YXRjaCAocHJpdi0+YXN5bmNfY29udGV4dCwg
Y2hhbiwKKwkJCQkJCQlHX0lPX0lOIHwgR19JT19FUlIgfCBHX0lPX0hVUCwKKwkJCQkJCQlzb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX2NhbmNlbGxlZCwKKwkJCQkJCQlzdHJlYW0pOworCQlnX2lvX2No
YW5uZWxfdW5yZWYgKGNoYW4pOworCX0KKworCXByaXYtPmNhbGxlcl9idWZmZXIgPSBidWZmZXI7
CisJcHJpdi0+Y2FsbGVyX2J1ZnNpemUgPSBjb3VudDsKKwlwcml2LT5jYWxsZXJfbnJlYWQgPSAw
OworCisJaWYgKHByaXYtPmdvdF9oZWFkZXJzKQorCQlzb3VwX3Nlc3Npb25fdW5wYXVzZV9tZXNz
YWdlIChwcml2LT5zZXNzaW9uLCBwcml2LT5tc2cpOworfQorCitzdGF0aWMgdm9pZAorc291cF9o
dHRwX2lucHV0X3N0cmVhbV9kb25lX2lvIChHSW5wdXRTdHJlYW0gKnN0cmVhbSkKK3sKKwlTb3Vw
SFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFNPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VU
X1BSSVZBVEUgKHN0cmVhbSk7CisKKwlpZiAocHJpdi0+Y2FuY2VsX3dhdGNoKSB7CisJCWdfc291
cmNlX2Rlc3Ryb3kgKHByaXYtPmNhbmNlbF93YXRjaCk7CisJCXByaXYtPmNhbmNlbF93YXRjaCA9
IE5VTEw7CisJCWdfY2FuY2VsbGFibGVfcmVsZWFzZV9mZCAocHJpdi0+Y2FuY2VsbGFibGUpOwor
CX0KKwlwcml2LT5jYW5jZWxsYWJsZSA9IE5VTEw7CisKKwlwcml2LT5jYWxsZXJfYnVmZmVyID0g
TlVMTDsKKwlwcml2LT5jYWxsZXJfYnVmc2l6ZSA9IDA7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgor
c2V0X2Vycm9yX2lmX2h0dHBfZmFpbGVkIChTb3VwTWVzc2FnZSAqbXNnLCBHRXJyb3IgKiplcnJv
cikKK3sKKwlpZiAoIVNPVVBfU1RBVFVTX0lTX1NVQ0NFU1NGVUwgKG1zZy0+c3RhdHVzX2NvZGUp
KSB7CisJCWdfc2V0X2Vycm9yX2xpdGVyYWwgKGVycm9yLCBTT1VQX0hUVFBfRVJST1IsCisJCQkJ
ICAgICBtc2ctPnN0YXR1c19jb2RlLCBtc2ctPnJlYXNvbl9waHJhc2UpOworCQlyZXR1cm4gVFJV
RTsKKwl9CisJcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgZ3NpemUKK3JlYWRfZnJvbV9sZWZ0
b3ZlciAoU291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYsCisJCSAgICBncG9pbnRlciBi
dWZmZXIsIGdzaXplIGJ1ZnNpemUpCit7CisJZ3NpemUgbnJlYWQ7CisKKwlpZiAocHJpdi0+bGVm
dG92ZXJfYnVmc2l6ZSAtIHByaXYtPmxlZnRvdmVyX29mZnNldCA8PSBidWZzaXplKSB7CisJCW5y
ZWFkID0gcHJpdi0+bGVmdG92ZXJfYnVmc2l6ZSAtIHByaXYtPmxlZnRvdmVyX29mZnNldDsKKwkJ
bWVtY3B5IChidWZmZXIsIHByaXYtPmxlZnRvdmVyX2J1ZmZlciArIHByaXYtPmxlZnRvdmVyX29m
ZnNldCwgbnJlYWQpOworCisJCWdfZnJlZSAocHJpdi0+bGVmdG92ZXJfYnVmZmVyKTsKKwkJcHJp
di0+bGVmdG92ZXJfYnVmZmVyID0gTlVMTDsKKwkJcHJpdi0+bGVmdG92ZXJfYnVmc2l6ZSA9IHBy
aXYtPmxlZnRvdmVyX29mZnNldCA9IDA7CisJfSBlbHNlIHsKKwkJbnJlYWQgPSBidWZzaXplOwor
CQltZW1jcHkgKGJ1ZmZlciwgcHJpdi0+bGVmdG92ZXJfYnVmZmVyICsgcHJpdi0+bGVmdG92ZXJf
b2Zmc2V0LCBucmVhZCk7CisJCXByaXYtPmxlZnRvdmVyX29mZnNldCArPSBucmVhZDsKKwl9CisK
Kwlwcml2LT5vZmZzZXQgKz0gbnJlYWQ7CisJcmV0dXJuIG5yZWFkOworfQorCisvKiBUaGlzIGRv
ZXMgdGhlIHdvcmsgb2Ygc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kKCksIGFzc3VtaW5nIHRo
YXQgdGhlCisgKiBHSW5wdXRTdHJlYW0gcGVuZGluZyBmbGFnIGhhcyBhbHJlYWR5IGJlZW4gc2V0
LiBJdCBpcyBhbHNvIHVzZWQgYnkKKyAqIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3lu
YygpIGluIHNvbWUgY2lyY3Vtc3RhbmNlcy4KKyAqLworc3RhdGljIGdib29sZWFuCitzb3VwX2h0
dHBfaW5wdXRfc3RyZWFtX3NlbmRfaW50ZXJuYWwgKEdJbnB1dFN0cmVhbSAgKnN0cmVhbSwKKwkJ
CQkgICAgICBHQ2FuY2VsbGFibGUgICpjYW5jZWxsYWJsZSwKKwkJCQkgICAgICBHRXJyb3IgICAg
ICAgKiplcnJvcikKK3sKKwlTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFNPVVBf
SFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7CisKKwlzb3VwX2h0dHBfaW5w
dXRfc3RyZWFtX3ByZXBhcmVfZm9yX2lvIChzdHJlYW0sIGNhbmNlbGxhYmxlLCBOVUxMLCAwKTsK
Kwl3aGlsZSAoIXByaXYtPmZpbmlzaGVkICYmICFwcml2LT5nb3RfaGVhZGVycyAmJgorCSAgICAg
ICAhZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQgKGNhbmNlbGxhYmxlKSkKKwkJZ19tYWluX2Nv
bnRleHRfaXRlcmF0aW9uIChwcml2LT5hc3luY19jb250ZXh0LCBUUlVFKTsKKwlzb3VwX2h0dHBf
aW5wdXRfc3RyZWFtX2RvbmVfaW8gKHN0cmVhbSk7CisKKwlpZiAoZ19jYW5jZWxsYWJsZV9zZXRf
ZXJyb3JfaWZfY2FuY2VsbGVkIChjYW5jZWxsYWJsZSwgZXJyb3IpKQorCQlyZXR1cm4gRkFMU0U7
CisJZWxzZSBpZiAoc2V0X2Vycm9yX2lmX2h0dHBfZmFpbGVkIChwcml2LT5tc2csIGVycm9yKSkK
KwkJcmV0dXJuIEZBTFNFOworCXJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZAorc2VuZF9z
eW5jX2ZpbmlzaGVkIChHSW5wdXRTdHJlYW0gKnN0cmVhbSkKK3sKKwlTb3VwSFRUUElucHV0U3Ry
ZWFtUHJpdmF0ZSAqcHJpdiA9IFNPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0
cmVhbSk7CisJR0Vycm9yICplcnJvciA9IE5VTEw7CisKKwlpZiAoIWdfY2FuY2VsbGFibGVfc2V0
X2Vycm9yX2lmX2NhbmNlbGxlZCAocHJpdi0+Y2FuY2VsbGFibGUsICZlcnJvcikpCisJCXNldF9l
cnJvcl9pZl9odHRwX2ZhaWxlZCAocHJpdi0+bXNnLCAmZXJyb3IpOworCisJcHJpdi0+Z290X2hl
YWRlcnNfY2IgPSBOVUxMOworCXByaXYtPmZpbmlzaGVkX2NiID0gTlVMTDsKKworCS8qIFdha2Ug
dXAgdGhlIG1haW4gY29udGV4dCBpdGVyYXRpb24gKi8KKwlnX3NvdXJjZV9hdHRhY2ggKGdfaWRs
ZV9zb3VyY2VfbmV3ICgpLCBOVUxMKTsKK30KKworLyoqCisgKiBzb3VwX2h0dHBfaW5wdXRfc3Ry
ZWFtX3NlbmQ6CisgKiBAaHR0cHN0cmVhbTogYSAjU291cEhUVFBJbnB1dFN0cmVhbQorICogQGNh
bmNlbGxhYmxlOiBvcHRpb25hbCAjR0NhbmNlbGxhYmxlIG9iamVjdCwgJU5VTEwgdG8gaWdub3Jl
LgorICogQGVycm9yOiBsb2NhdGlvbiB0byBzdG9yZSB0aGUgZXJyb3Igb2NjdXJpbmcsIG9yICVO
VUxMIHRvIGlnbm9yZQorICoKKyAqIFN5bmNocm9ub3VzbHkgc2VuZHMgdGhlIEhUVFAgcmVxdWVz
dCBhc3NvY2lhdGVkIHdpdGggQHN0cmVhbSwgYW5kCisgKiByZWFkcyB0aGUgcmVzcG9uc2UgaGVh
ZGVycy4gQ2FsbCB0aGlzIGFmdGVyIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fbmV3KCkKKyAqIGFu
ZCBiZWZvcmUgdGhlIGZpcnN0IGdfaW5wdXRfc3RyZWFtX3JlYWQoKSBpZiB5b3Ugd2FudCB0byBj
aGVjayB0aGUKKyAqIEhUVFAgc3RhdHVzIGNvZGUgYmVmb3JlIHlvdSBzdGFydCByZWFkaW5nLgor
ICoKKyAqIFJldHVybiB2YWx1ZTogJVRSVUUgaWYgbXNnIGhhcyBhIHN1Y2Nlc3NmdWwgKDJ4eCkg
c3RhdHVzLCAlRkFMU0UgaWYKKyAqIG5vdC4KKyAqKi8KK2dib29sZWFuCitzb3VwX2h0dHBfaW5w
dXRfc3RyZWFtX3NlbmQgKFNvdXBIVFRQSW5wdXRTdHJlYW0gICpodHRwc3RyZWFtLAorCQkJICAg
ICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkgICAgIEdFcnJvciAgICAg
ICAgICAgICAgKiplcnJvcikKK3sKKwlTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9
IFNPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKGh0dHBzdHJlYW0pOworCUdJbnB1
dFN0cmVhbSAqaXN0cmVhbSA9IChHSW5wdXRTdHJlYW0gKilodHRwc3RyZWFtOworCWdib29sZWFu
IHJlc3VsdDsKKworCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChTT1VQX0lTX0hUVFBfSU5QVVRfU1RS
RUFNIChodHRwc3RyZWFtKSwgRkFMU0UpOworCisJaWYgKCFnX2lucHV0X3N0cmVhbV9zZXRfcGVu
ZGluZyAoaXN0cmVhbSwgZXJyb3IpKQorCQlyZXR1cm4gRkFMU0U7CisKKwlwcml2LT5nb3RfaGVh
ZGVyc19jYiA9IHNlbmRfc3luY19maW5pc2hlZDsKKwlwcml2LT5maW5pc2hlZF9jYiA9IHNlbmRf
c3luY19maW5pc2hlZDsKKworCXJlc3VsdCA9IHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9p
bnRlcm5hbCAoaXN0cmVhbSwgY2FuY2VsbGFibGUsIGVycm9yKTsKKwlnX2lucHV0X3N0cmVhbV9j
bGVhcl9wZW5kaW5nIChpc3RyZWFtKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBn
c3NpemUKK3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVhZCAoR0lucHV0U3RyZWFtICpzdHJlYW0s
CisJCQkgICAgIHZvaWQgICAgICAgICAqYnVmZmVyLAorCQkJICAgICBnc2l6ZSBjb3VudCwKKwkJ
CSAgICAgR0NhbmNlbGxhYmxlICpjYW5jZWxsYWJsZSwKKwkJCSAgICAgR0Vycm9yICAgICAgKipl
cnJvcikKK3sKKwlTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFNPVVBfSFRUUF9J
TlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7CisKKwlpZiAocHJpdi0+ZmluaXNoZWQp
CisJCXJldHVybiAwOworCisJLyogSWYgdGhlcmUgaXMgZGF0YSBsZWZ0b3ZlciBmcm9tIGEgcHJl
dmlvdXMgcmVhZCwgcmV0dXJuIGl0LiAqLworCWlmIChwcml2LT5sZWZ0b3Zlcl9idWZzaXplKQor
CQlyZXR1cm4gcmVhZF9mcm9tX2xlZnRvdmVyIChwcml2LCBidWZmZXIsIGNvdW50KTsKKworCS8q
IE5vIGxlZnRvdmVyIGRhdGEsIGFjY2VwdCBvbmUgY2h1bmsgZnJvbSB0aGUgbmV0d29yayAqLwor
CXNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcHJlcGFyZV9mb3JfaW8gKHN0cmVhbSwgY2FuY2VsbGFi
bGUsIGJ1ZmZlciwgY291bnQpOworCXdoaWxlICghcHJpdi0+ZmluaXNoZWQgJiYgcHJpdi0+Y2Fs
bGVyX25yZWFkID09IDAgJiYKKwkgICAgICAgIWdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkIChj
YW5jZWxsYWJsZSkpCisJCWdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbiAocHJpdi0+YXN5bmNfY29u
dGV4dCwgVFJVRSk7CisJc291cF9odHRwX2lucHV0X3N0cmVhbV9kb25lX2lvIChzdHJlYW0pOwor
CisJaWYgKHByaXYtPmNhbGxlcl9ucmVhZCA+IDApCisJCXJldHVybiBwcml2LT5jYWxsZXJfbnJl
YWQ7CisKKwlpZiAoZ19jYW5jZWxsYWJsZV9zZXRfZXJyb3JfaWZfY2FuY2VsbGVkIChjYW5jZWxs
YWJsZSwgZXJyb3IpKQorCQlyZXR1cm4gLTE7CisJZWxzZSBpZiAoc2V0X2Vycm9yX2lmX2h0dHBf
ZmFpbGVkIChwcml2LT5tc2csIGVycm9yKSkKKwkJcmV0dXJuIC0xOworCWVsc2UKKwkJcmV0dXJu
IDA7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorc291cF9odHRwX2lucHV0X3N0cmVhbV9jbG9zZSAo
R0lucHV0U3RyZWFtICpzdHJlYW0sCisJCQkgICAgICBHQ2FuY2VsbGFibGUgKmNhbmNlbGxhYmxl
LAorCQkJICAgICAgR0Vycm9yICAgICAgKiplcnJvcikKK3sKKwlTb3VwSFRUUElucHV0U3RyZWFt
UHJpdmF0ZSAqcHJpdiA9IFNPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVh
bSk7CisKKwlpZiAoIXByaXYtPmZpbmlzaGVkKQorCQlzb3VwX3Nlc3Npb25fY2FuY2VsX21lc3Nh
Z2UgKHByaXYtPnNlc3Npb24sIHByaXYtPm1zZywgU09VUF9TVEFUVVNfQ0FOQ0VMTEVEKTsKKwor
CXJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZAord3JhcHBlcl9jYWxsYmFjayAoR09iamVj
dCAqc291cmNlX29iamVjdCwgR0FzeW5jUmVzdWx0ICpyZXMsCisJCSAgZ3BvaW50ZXIgdXNlcl9k
YXRhKQoreworCUdJbnB1dFN0cmVhbSAqc3RyZWFtID0gR19JTlBVVF9TVFJFQU0gKHNvdXJjZV9v
YmplY3QpOworCVNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gU09VUF9IVFRQX0lO
UFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKworCWdfaW5wdXRfc3RyZWFtX2NsZWFy
X3BlbmRpbmcgKHN0cmVhbSk7CisJaWYgKHByaXYtPm91dHN0YW5kaW5nX2NhbGxiYWNrKQorCQko
KnByaXYtPm91dHN0YW5kaW5nX2NhbGxiYWNrKShzb3VyY2Vfb2JqZWN0LCByZXMsIHVzZXJfZGF0
YSk7CisJcHJpdi0+b3V0c3RhbmRpbmdfY2FsbGJhY2sgPSBOVUxMOworCWdfb2JqZWN0X3VucmVm
IChzdHJlYW0pOworfQorCitzdGF0aWMgdm9pZAorc2VuZF9hc3luY190aHJlYWQgKEdTaW1wbGVB
c3luY1Jlc3VsdCAqcmVzLAorCQkgICBHT2JqZWN0ICpvYmplY3QsCisJCSAgIEdDYW5jZWxsYWJs
ZSAqY2FuY2VsbGFibGUpCit7CisJR0Vycm9yICplcnJvciA9IE5VTEw7CisJZ2Jvb2xlYW4gc3Vj
Y2VzczsKKworCXN1Y2Nlc3MgPSBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfaW50ZXJuYWwg
KEdfSU5QVVRfU1RSRUFNIChvYmplY3QpLAorCQkJCQkJCWNhbmNlbGxhYmxlLCAmZXJyb3IpOwor
CWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dib29sZWFuIChyZXMsIHN1Y2Nlc3Mp
OworCWlmIChlcnJvcikgeworCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X2Zyb21fZXJyb3Ig
KHJlcywgZXJyb3IpOworCQlnX2Vycm9yX2ZyZWUgKGVycm9yKTsKKwl9Cit9CisKK3N0YXRpYyB2
b2lkCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmNfaW5fdGhyZWFkIChHSW5wdXRT
dHJlYW0gICAgICAgICpzdHJlYW0sCisJCQkJCSAgICAgaW50IGlvX3ByaW9yaXR5LAorCQkJCQkg
ICAgIEdDYW5jZWxsYWJsZSAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJCQkgICAgIEdBc3luY1Jl
YWR5Q2FsbGJhY2sgY2FsbGJhY2ssCisJCQkJCSAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQorewor
CUdTaW1wbGVBc3luY1Jlc3VsdCAqcmVzOworCisJcmVzID0gZ19zaW1wbGVfYXN5bmNfcmVzdWx0
X25ldyAoR19PQkpFQ1QgKHN0cmVhbSksIGNhbGxiYWNrLCB1c2VyX2RhdGEsCisJCQkJCSBzb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmNfaW5fdGhyZWFkKTsKKwlnX3NpbXBsZV9hc3lu
Y19yZXN1bHRfcnVuX2luX3RocmVhZCAocmVzLCBzZW5kX2FzeW5jX3RocmVhZCwKKwkJCQkJICAg
ICBpb19wcmlvcml0eSwgY2FuY2VsbGFibGUpOworCWdfb2JqZWN0X3VucmVmIChyZXMpOworfQor
CitzdGF0aWMgdm9pZAorc2VuZF9hc3luY19maW5pc2hlZCAoR0lucHV0U3RyZWFtICpzdHJlYW0p
Cit7CisJU291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBTT1VQX0hUVFBfSU5QVVRf
U1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOworCUdTaW1wbGVBc3luY1Jlc3VsdCAqcmVzdWx0
OworCUdFcnJvciAqZXJyb3IgPSBOVUxMOworCisJaWYgKCFnX2NhbmNlbGxhYmxlX3NldF9lcnJv
cl9pZl9jYW5jZWxsZWQgKHByaXYtPmNhbmNlbGxhYmxlLCAmZXJyb3IpKQorCQlzZXRfZXJyb3Jf
aWZfaHR0cF9mYWlsZWQgKHByaXYtPm1zZywgJmVycm9yKTsKKworCXByaXYtPmdvdF9oZWFkZXJz
X2NiID0gTlVMTDsKKwlwcml2LT5maW5pc2hlZF9jYiA9IE5VTEw7CisJc291cF9odHRwX2lucHV0
X3N0cmVhbV9kb25lX2lvIChzdHJlYW0pOworCisJcmVzdWx0ID0gcHJpdi0+cmVzdWx0OworCXBy
aXYtPnJlc3VsdCA9IE5VTEw7CisKKwlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19n
Ym9vbGVhbiAocmVzdWx0LCBlcnJvciA9PSBOVUxMKTsKKwlpZiAoZXJyb3IpIHsKKwkJZ19zaW1w
bGVfYXN5bmNfcmVzdWx0X3NldF9mcm9tX2Vycm9yIChyZXN1bHQsIGVycm9yKTsKKwkJZ19lcnJv
cl9mcmVlIChlcnJvcik7CisJfQorCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZSAocmVz
dWx0KTsKK30KKworc3RhdGljIHZvaWQKK3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3lu
Y19pbnRlcm5hbCAoR0lucHV0U3RyZWFtICAgICAgICAqc3RyZWFtLAorCQkJCQkgICAgaW50IGlv
X3ByaW9yaXR5LAorCQkJCQkgICAgR0NhbmNlbGxhYmxlICAgICAgICAqY2FuY2VsbGFibGUsCisJ
CQkJCSAgICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAorCQkJCQkgICAgZ3BvaW50ZXIg
dXNlcl9kYXRhKQoreworCVNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gU09VUF9I
VFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKworCWdfb2JqZWN0X3JlZiAo
c3RyZWFtKTsKKwlwcml2LT5vdXRzdGFuZGluZ19jYWxsYmFjayA9IGNhbGxiYWNrOworCisJLyog
SWYgdGhlIHNlc3Npb24gdXNlcyB0aGUgZGVmYXVsdCBHTWFpbkNvbnRleHQsIHRoZW4gd2UgY2Fu
IGRvCisJICogYXN5bmMgSS9PIGRpcmVjdGx5LiBCdXQgaWYgaXQgaGFzIGl0cyBvd24gbWFpbiBj
b250ZXh0LCBpdCdzCisJICogZWFzaWVyIHRvIGp1c3QgcnVuIGl0IGluIGFub3RoZXIgdGhyZWFk
LgorCSAqLworCWlmIChzb3VwX3Nlc3Npb25fZ2V0X2FzeW5jX2NvbnRleHQgKHByaXYtPnNlc3Np
b24pKSB7CisJCXNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luY19pbl90aHJlYWQgKHN0
cmVhbSwgaW9fcHJpb3JpdHksIGNhbmNlbGxhYmxlLAorCQkJCQkJCSAgICAgd3JhcHBlcl9jYWxs
YmFjaywgdXNlcl9kYXRhKTsKKwkJcmV0dXJuOworCX0KKworCXByaXYtPmdvdF9oZWFkZXJzX2Ni
ID0gc2VuZF9hc3luY19maW5pc2hlZDsKKwlwcml2LT5maW5pc2hlZF9jYiA9IHNlbmRfYXN5bmNf
ZmluaXNoZWQ7CisKKwlzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3ByZXBhcmVfZm9yX2lvIChzdHJl
YW0sIGNhbmNlbGxhYmxlLCBOVUxMLCAwKTsKKwlwcml2LT5yZXN1bHQgPSBnX3NpbXBsZV9hc3lu
Y19yZXN1bHRfbmV3IChHX09CSkVDVCAoc3RyZWFtKSwKKwkJCQkJCSAgd3JhcHBlcl9jYWxsYmFj
aywgdXNlcl9kYXRhLAorCQkJCQkJICBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmMp
OworfQorCisvKioKKyAqIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luYzoKKyAqIEBo
dHRwc3RyZWFtOiBhICNTb3VwSFRUUElucHV0U3RyZWFtCisgKiBAaW9fcHJpb3JpdHk6IHRoZSBp
byBwcmlvcml0eSBvZiB0aGUgcmVxdWVzdC4KKyAqIEBjYW5jZWxsYWJsZTogb3B0aW9uYWwgI0dD
YW5jZWxsYWJsZSBvYmplY3QsICVOVUxMIHRvIGlnbm9yZS4KKyAqIEBjYWxsYmFjazogY2FsbGJh
Y2sgdG8gY2FsbCB3aGVuIHRoZSByZXF1ZXN0IGlzIHNhdGlzZmllZAorICogQHVzZXJfZGF0YTog
dGhlIGRhdGEgdG8gcGFzcyB0byBjYWxsYmFjayBmdW5jdGlvbgorICoKKyAqIEFzeW5jaHJvbm91
c2x5IHNlbmRzIHRoZSBIVFRQIHJlcXVlc3QgYXNzb2NpYXRlZCB3aXRoIEBzdHJlYW0sIGFuZAor
ICogcmVhZHMgdGhlIHJlc3BvbnNlIGhlYWRlcnMuIENhbGwgdGhpcyBhZnRlciBzb3VwX2h0dHBf
aW5wdXRfc3RyZWFtX25ldygpCisgKiBhbmQgYmVmb3JlIHRoZSBmaXJzdCBnX2lucHV0X3N0cmVh
bV9yZWFkX2FzeW5jKCkgaWYgeW91IHdhbnQgdG8KKyAqIGNoZWNrIHRoZSBIVFRQIHN0YXR1cyBj
b2RlIGJlZm9yZSB5b3Ugc3RhcnQgcmVhZGluZy4KKyAqKi8KK3ZvaWQKK3NvdXBfaHR0cF9pbnB1
dF9zdHJlYW1fc2VuZF9hc3luYyAoU291cEhUVFBJbnB1dFN0cmVhbSAqaHR0cHN0cmVhbSwKKwkJ
CQkgICBpbnQgaW9fcHJpb3JpdHksCisJCQkJICAgR0NhbmNlbGxhYmxlICAgICAgICAqY2FuY2Vs
bGFibGUsCisJCQkJICAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKKwkJCQkgICBncG9p
bnRlciB1c2VyX2RhdGEpCit7CisJR0lucHV0U3RyZWFtICppc3RyZWFtID0gKEdJbnB1dFN0cmVh
bSAqKWh0dHBzdHJlYW07CisJR0Vycm9yICplcnJvciA9IE5VTEw7CisKKwlnX3JldHVybl9pZl9m
YWlsIChTT1VQX0lTX0hUVFBfSU5QVVRfU1RSRUFNIChodHRwc3RyZWFtKSk7CisKKwlpZiAoIWdf
aW5wdXRfc3RyZWFtX3NldF9wZW5kaW5nIChpc3RyZWFtLCAmZXJyb3IpKSB7CisJCWdfc2ltcGxl
X2FzeW5jX3JlcG9ydF9nZXJyb3JfaW5faWRsZSAoR19PQkpFQ1QgKGh0dHBzdHJlYW0pLAorCQkJ
CQkJICAgICAgY2FsbGJhY2ssCisJCQkJCQkgICAgICB1c2VyX2RhdGEsCisJCQkJCQkgICAgICBl
cnJvcik7CisJCWdfZXJyb3JfZnJlZSAoZXJyb3IpOworCQlyZXR1cm47CisJfQorCXNvdXBfaHR0
cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luY19pbnRlcm5hbCAoaXN0cmVhbSwgaW9fcHJpb3JpdHks
IGNhbmNlbGxhYmxlLAorCQkJCQkJICAgIGNhbGxiYWNrLCB1c2VyX2RhdGEpOworfQorCisvKioK
KyAqIHNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9maW5pc2g6CisgKiBAaHR0cHN0cmVhbTog
YSAjU291cEhUVFBJbnB1dFN0cmVhbQorICogQHJlc3VsdDogYSAjR0FzeW5jUmVzdWx0LgorICog
QGVycm9yOiBhICNHRXJyb3IgbG9jYXRpb24gdG8gc3RvcmUgdGhlIGVycm9yIG9jY3VyaW5nLCBv
ciAlTlVMTCB0bworICogaWdub3JlLgorICoKKyAqIEZpbmlzaGVzIGEgc291cF9odHRwX2lucHV0
X3N0cmVhbV9zZW5kX2FzeW5jKCkgb3BlcmF0aW9uLgorICoKKyAqIFJldHVybiB2YWx1ZTogJVRS
VUUgaWYgdGhlIG1lc3NhZ2Ugd2FzIHNlbnQgc3VjY2Vzc2Z1bGx5IGFuZAorICogcmVjZWl2ZWQg
YSBzdWNjZXNzZnVsIHN0YXR1cyBjb2RlLCAlRkFMU0UgaWYgbm90LgorICoqLworZ2Jvb2xlYW4K
K3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9maW5pc2ggKFNvdXBIVFRQSW5wdXRTdHJlYW0g
ICpodHRwc3RyZWFtLAorCQkJCSAgICBHQXN5bmNSZXN1bHQgICAgICAgICAqcmVzdWx0LAorCQkJ
CSAgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpCit7CisJR1NpbXBsZUFzeW5jUmVzdWx0
ICpzaW1wbGU7CisKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoR19JU19TSU1QTEVfQVNZTkNfUkVT
VUxUIChyZXN1bHQpLCBGQUxTRSk7CisJc2ltcGxlID0gR19TSU1QTEVfQVNZTkNfUkVTVUxUIChy
ZXN1bHQpOworCisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9n
ZXRfc291cmNlX3RhZyAoc2ltcGxlKSA9PSBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5
bmMsIEZBTFNFKTsKKworCWlmIChnX3NpbXBsZV9hc3luY19yZXN1bHRfcHJvcGFnYXRlX2Vycm9y
IChzaW1wbGUsIGVycm9yKSkKKwkJcmV0dXJuIEZBTFNFOworCisJcmV0dXJuIGdfc2ltcGxlX2Fz
eW5jX3Jlc3VsdF9nZXRfb3BfcmVzX2dib29sZWFuIChzaW1wbGUpOworfQorCitzdGF0aWMgdm9p
ZAorcmVhZF9hc3luY19kb25lIChHSW5wdXRTdHJlYW0gKnN0cmVhbSkKK3sKKwlTb3VwSFRUUElu
cHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFNPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZB
VEUgKHN0cmVhbSk7CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpyZXN1bHQ7CisJR0Vycm9yICplcnJv
ciA9IE5VTEw7CisKKwlyZXN1bHQgPSBwcml2LT5yZXN1bHQ7CisJcHJpdi0+cmVzdWx0ID0gTlVM
TDsKKworCWlmIChnX2NhbmNlbGxhYmxlX3NldF9lcnJvcl9pZl9jYW5jZWxsZWQgKHByaXYtPmNh
bmNlbGxhYmxlLCAmZXJyb3IpIHx8CisJICAgIHNldF9lcnJvcl9pZl9odHRwX2ZhaWxlZCAocHJp
di0+bXNnLCAmZXJyb3IpKSB7CisJCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfZnJvbV9lcnJv
ciAocmVzdWx0LCBlcnJvcik7CisJCWdfZXJyb3JfZnJlZSAoZXJyb3IpOworCX0gZWxzZQorCQln
X3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19nc3NpemUgKHJlc3VsdCwgcHJpdi0+Y2Fs
bGVyX25yZWFkKTsKKworCXByaXYtPmdvdF9jaHVua19jYiA9IE5VTEw7CisJcHJpdi0+ZmluaXNo
ZWRfY2IgPSBOVUxMOworCXByaXYtPmNhbmNlbGxlZF9jYiA9IE5VTEw7CisJc291cF9odHRwX2lu
cHV0X3N0cmVhbV9kb25lX2lvIChzdHJlYW0pOworCisJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2Nv
bXBsZXRlIChyZXN1bHQpOworCWdfb2JqZWN0X3VucmVmIChyZXN1bHQpOworfQorCitzdGF0aWMg
dm9pZAorc291cF9odHRwX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jIChHSW5wdXRTdHJlYW0gICAg
ICAgICpzdHJlYW0sCisJCQkJICAgdm9pZCAgICAgICAgICAgICAgICAqYnVmZmVyLAorCQkJCSAg
IGdzaXplIGNvdW50LAorCQkJCSAgIGludCBpb19wcmlvcml0eSwKKwkJCQkgICBHQ2FuY2VsbGFi
bGUgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkgICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxi
YWNrLAorCQkJCSAgIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlTb3VwSFRUUElucHV0U3RyZWFt
UHJpdmF0ZSAqcHJpdiA9IFNPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVh
bSk7CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpyZXN1bHQ7CisKKwkvKiBJZiB0aGUgc2Vzc2lvbiB1
c2VzIHRoZSBkZWZhdWx0IEdNYWluQ29udGV4dCwgdGhlbiB3ZSBjYW4gZG8KKwkgKiBhc3luYyBJ
L08gZGlyZWN0bHkuIEJ1dCBpZiBpdCBoYXMgaXRzIG93biBtYWluIGNvbnRleHQsIHdlIGZhbGwK
KwkgKiBiYWNrIHRvIHRoZSBhc3luYy12aWEtc3luYy1pbi1hbm90aGVyLXRocmVhZCBpbXBsZW1l
bnRhdGlvbi4KKwkgKi8KKwlpZiAoc291cF9zZXNzaW9uX2dldF9hc3luY19jb250ZXh0IChwcml2
LT5zZXNzaW9uKSkgeworCQlHX0lOUFVUX1NUUkVBTV9DTEFTUyAoc291cF9odHRwX2lucHV0X3N0
cmVhbV9wYXJlbnRfY2xhc3MpLT4KKwkJcmVhZF9hc3luYyAoc3RyZWFtLCBidWZmZXIsIGNvdW50
LCBpb19wcmlvcml0eSwKKwkJCSAgICBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJfZGF0YSk7
CisJCXJldHVybjsKKwl9CisKKwlyZXN1bHQgPSBnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3IChH
X09CSkVDVCAoc3RyZWFtKSwKKwkJCQkJICAgIGNhbGxiYWNrLCB1c2VyX2RhdGEsCisJCQkJCSAg
ICBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMpOworCisJaWYgKHByaXYtPmZpbmlz
aGVkKSB7CisJCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dzc2l6ZSAocmVzdWx0
LCAwKTsKKwkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlX2luX2lkbGUgKHJlc3VsdCk7
CisJCWdfb2JqZWN0X3VucmVmIChyZXN1bHQpOworCQlyZXR1cm47CisJfQorCisJaWYgKHByaXYt
PmxlZnRvdmVyX2J1ZnNpemUpIHsKKwkJZ3NpemUgbnJlYWQgPSByZWFkX2Zyb21fbGVmdG92ZXIg
KHByaXYsIGJ1ZmZlciwgY291bnQpOworCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jl
c19nc3NpemUgKHJlc3VsdCwgbnJlYWQpOworCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxl
dGVfaW5faWRsZSAocmVzdWx0KTsKKwkJZ19vYmplY3RfdW5yZWYgKHJlc3VsdCk7CisJCXJldHVy
bjsKKwl9CisKKwlwcml2LT5yZXN1bHQgPSByZXN1bHQ7CisKKwlwcml2LT5nb3RfY2h1bmtfY2Ig
PSByZWFkX2FzeW5jX2RvbmU7CisJcHJpdi0+ZmluaXNoZWRfY2IgPSByZWFkX2FzeW5jX2RvbmU7
CisJcHJpdi0+Y2FuY2VsbGVkX2NiID0gcmVhZF9hc3luY19kb25lOworCXNvdXBfaHR0cF9pbnB1
dF9zdHJlYW1fcHJlcGFyZV9mb3JfaW8gKHN0cmVhbSwgY2FuY2VsbGFibGUsIGJ1ZmZlciwgY291
bnQpOworfQorCitzdGF0aWMgZ3NzaXplCitzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWRfZmlu
aXNoIChHSW5wdXRTdHJlYW0gICpzdHJlYW0sCisJCQkJICAgIEdBc3luY1Jlc3VsdCAgKnJlc3Vs
dCwKKwkJCQkgICAgR0Vycm9yICAgICAgICoqZXJyb3IpCit7CisJR1NpbXBsZUFzeW5jUmVzdWx0
ICpzaW1wbGU7CisKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoR19JU19TSU1QTEVfQVNZTkNfUkVT
VUxUIChyZXN1bHQpLCAtMSk7CisJc2ltcGxlID0gR19TSU1QTEVfQVNZTkNfUkVTVUxUIChyZXN1
bHQpOworCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X3Nv
dXJjZV90YWcgKHNpbXBsZSkgPT0gc291cF9odHRwX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jLCAt
MSk7CisKKwlyZXR1cm4gZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9vcF9yZXNfZ3NzaXplIChz
aW1wbGUpOworfQorCitzdGF0aWMgdm9pZAorc291cF9odHRwX2lucHV0X3N0cmVhbV9jbG9zZV9h
c3luYyAoR0lucHV0U3RyZWFtICAgICAgICpzdHJlYW0sCisJCQkJICAgIGludCBpb19wcmlvcml0
eSwKKwkJCQkgICAgR0NhbmNlbGxhYmxlICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkgICAgR0Fz
eW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKKwkJCQkgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQor
eworCUdTaW1wbGVBc3luY1Jlc3VsdCAqcmVzdWx0OworCWdib29sZWFuIHN1Y2Nlc3M7CisJR0Vy
cm9yICplcnJvciA9IE5VTEw7CisKKwlyZXN1bHQgPSBnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3
IChHX09CSkVDVCAoc3RyZWFtKSwKKwkJCQkJICAgIGNhbGxiYWNrLCB1c2VyX2RhdGEsCisJCQkJ
CSAgICBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlX2FzeW5jKTsKKwlzdWNjZXNzID0gc291
cF9odHRwX2lucHV0X3N0cmVhbV9jbG9zZSAoc3RyZWFtLCBjYW5jZWxsYWJsZSwgJmVycm9yKTsK
KwlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19nYm9vbGVhbiAocmVzdWx0LCBzdWNj
ZXNzKTsKKwlpZiAoZXJyb3IpIHsKKwkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9mcm9tX2Vy
cm9yIChyZXN1bHQsIGVycm9yKTsKKwkJZ19lcnJvcl9mcmVlIChlcnJvcik7CisJfQorCisJZ19z
aW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlX2luX2lkbGUgKHJlc3VsdCk7CisJZ19vYmplY3Rf
dW5yZWYgKHJlc3VsdCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorc291cF9odHRwX2lucHV0X3N0
cmVhbV9jbG9zZV9maW5pc2ggKEdJbnB1dFN0cmVhbSAgKnN0cmVhbSwKKwkJCQkgICAgIEdBc3lu
Y1Jlc3VsdCAgKnJlc3VsdCwKKwkJCQkgICAgIEdFcnJvciAgICAgICAqKmVycm9yKQoreworCS8q
IEZhaWx1cmVzIGhhbmRsZWQgaW4gZ2VuZXJpYyBjbG9zZV9maW5pc2ggY29kZSAqLworCXJldHVy
biBUUlVFOworfQorCitzdGF0aWMgZ29mZnNldAorc291cF9odHRwX2lucHV0X3N0cmVhbV90ZWxs
IChHU2Vla2FibGUgKnNlZWthYmxlKQoreworCVNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpw
cml2ID0gU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc2Vla2FibGUpOworCisJ
cmV0dXJuIHByaXYtPm9mZnNldDsKK30KKworc3RhdGljIGdib29sZWFuCitzb3VwX2h0dHBfaW5w
dXRfc3RyZWFtX2Nhbl9zZWVrIChHU2Vla2FibGUgKnNlZWthYmxlKQoreworCXJldHVybiBUUlVF
OworfQorCitleHRlcm4gdm9pZCBzb3VwX21lc3NhZ2VfaW9fY2xlYW51cCAoU291cE1lc3NhZ2Ug
Km1zZyk7CisKK3N0YXRpYyBnYm9vbGVhbgorc291cF9odHRwX2lucHV0X3N0cmVhbV9zZWVrIChH
U2Vla2FibGUgICAgICpzZWVrYWJsZSwKKwkJCSAgICAgZ29mZnNldCBvZmZzZXQsCisJCQkgICAg
IEdTZWVrVHlwZSB0eXBlLAorCQkJICAgICBHQ2FuY2VsbGFibGUgICpjYW5jZWxsYWJsZSwKKwkJ
CSAgICAgR0Vycm9yICAgICAgICoqZXJyb3IpCit7CisJR0lucHV0U3RyZWFtICpzdHJlYW0gPSBH
X0lOUFVUX1NUUkVBTSAoc2Vla2FibGUpOworCVNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpw
cml2ID0gU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc2Vla2FibGUpOworCWNo
YXIgKnJhbmdlOworCisJaWYgKHR5cGUgPT0gR19TRUVLX0VORCkgeworCQkvKiBGSVhNRTogd2Ug
Y291bGQgc2VuZCAiYnl0ZXM9LW9mZnNldCIsIGJ1dCB1bmxlc3Mgd2UKKwkJICoga25vdyB0aGUg
Q29udGVudC1MZW5ndGgsIHdlIHdvdWxkbid0IGJlIGFibGUgdG8KKwkJICogYW5zd2VyIGEgdGVs
bCgpIHByb3Blcmx5LiBXZSBjb3VsZCBmaW5kIHRoZQorCQkgKiBDb250ZW50LUxlbmd0aCBieSBk
b2luZyBhIEhFQUQuLi4KKwkJICovCisKKwkJZ19zZXRfZXJyb3JfbGl0ZXJhbCAoZXJyb3IsIEdf
SU9fRVJST1IsIEdfSU9fRVJST1JfTk9UX1NVUFBPUlRFRCwKKwkJCQkgICAgICJHX1NFRUtfRU5E
IG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIik7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlpZiAo
IWdfaW5wdXRfc3RyZWFtX3NldF9wZW5kaW5nIChzdHJlYW0sIGVycm9yKSkKKwkJcmV0dXJuIEZB
TFNFOworCisJc291cF9zZXNzaW9uX2NhbmNlbF9tZXNzYWdlIChwcml2LT5zZXNzaW9uLCBwcml2
LT5tc2csIFNPVVBfU1RBVFVTX0NBTkNFTExFRCk7CisJc291cF9tZXNzYWdlX2lvX2NsZWFudXAg
KHByaXYtPm1zZyk7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwkJY2FzZSBHX1NFRUtfQ1VSOgorCQkJ
b2Zmc2V0ICs9IHByaXYtPm9mZnNldDsKKwkJLyogZmFsbCB0aHJvdWdoICovCisKKwkJY2FzZSBH
X1NFRUtfU0VUOgorCQkJcmFuZ2UgPSBnX3N0cmR1cF9wcmludGYgKCJieXRlcz0lIiBHX0dVSU5U
NjRfRk9STUFUICItIiwgKGd1aW50NjQpb2Zmc2V0KTsKKwkJCXByaXYtPm9mZnNldCA9IG9mZnNl
dDsKKwkJCWJyZWFrOworCisJCWNhc2UgR19TRUVLX0VORDoKKwkJCXJhbmdlID0gTlVMTDsgLyog
a2VlcCBjb21waWxlcnMgaGFwcHkgKi8KKwkJCWdfcmV0dXJuX3ZhbF9pZl9yZWFjaGVkIChGQUxT
RSk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZ19yZXR1cm5fdmFsX2lmX3JlYWNoZWQg
KEZBTFNFKTsKKwl9CisKKwlzb3VwX21lc3NhZ2VfaGVhZGVyc19yZW1vdmUgKHByaXYtPm1zZy0+
cmVxdWVzdF9oZWFkZXJzLCAiUmFuZ2UiKTsKKwlzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQg
KHByaXYtPm1zZy0+cmVxdWVzdF9oZWFkZXJzLCAiUmFuZ2UiLCByYW5nZSk7CisJZ19mcmVlIChy
YW5nZSk7CisKKwlzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3F1ZXVlX21lc3NhZ2UgKFNPVVBfSFRU
UF9JTlBVVF9TVFJFQU0gKHN0cmVhbSkpOworCisJZ19pbnB1dF9zdHJlYW1fY2xlYXJfcGVuZGlu
ZyAoc3RyZWFtKTsKKwlyZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuCitzb3VwX2h0
dHBfaW5wdXRfc3RyZWFtX2Nhbl90cnVuY2F0ZSAoR1NlZWthYmxlICpzZWVrYWJsZSkKK3sKKwly
ZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorc291cF9odHRwX2lucHV0X3N0cmVh
bV90cnVuY2F0ZSAoR1NlZWthYmxlICAgICAqc2Vla2FibGUsCisJCQkJIGdvZmZzZXQgb2Zmc2V0
LAorCQkJCSBHQ2FuY2VsbGFibGUgICpjYW5jZWxsYWJsZSwKKwkJCQkgR0Vycm9yICAgICAgICoq
ZXJyb3IpCit7CisJZ19zZXRfZXJyb3JfbGl0ZXJhbCAoZXJyb3IsIEdfSU9fRVJST1IsIEdfSU9f
RVJST1JfTk9UX1NVUFBPUlRFRCwKKwkJCSAgICAgIlRydW5jYXRlIG5vdCBhbGxvd2VkIG9uIGlu
cHV0IHN0cmVhbSIpOworCXJldHVybiBGQUxTRTsKK30KKworU291cE1lc3NhZ2UgKgorc291cF9o
dHRwX2lucHV0X3N0cmVhbV9nZXRfbWVzc2FnZSAoU291cEhUVFBJbnB1dFN0cmVhbSAqaHR0cHN0
cmVhbSkKK3sKKwlTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFNPVVBfSFRUUF9J
TlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKGh0dHBzdHJlYW0pOworCXJldHVybiBwcml2LT5tc2cg
PyBnX29iamVjdF9yZWYgKHByaXYtPm1zZykgOiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1odHRwLWlucHV0LXN0cmVhbS5oIGIv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1odHRwLWlucHV0LXN0cmVh
bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZTdiYzAKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAt
aW5wdXQtc3RyZWFtLmgKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNywgMjAwOSBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlh
LCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsCisgKiBCb3N0b24s
IE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fU09VUF9IVFRQX0lOUFVUX1NU
UkVBTV9IX18KKyNkZWZpbmUgX19TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0hfXworCisjaW5jbHVk
ZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC10eXBlcy5oPgorCitHX0JFR0lO
X0RFQ0xTCisKKyNkZWZpbmUgU09VUF9UWVBFX0hUVFBfSU5QVVRfU1RSRUFNICAgICAgICAgKHNv
dXBfaHR0cF9pbnB1dF9zdHJlYW1fZ2V0X3R5cGUgKCkpCisjZGVmaW5lIFNPVVBfSFRUUF9JTlBV
VF9TVFJFQU0obykgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG8pLCBT
T1VQX1RZUEVfSFRUUF9JTlBVVF9TVFJFQU0sIFNvdXBIVFRQSW5wdXRTdHJlYW0pKQorI2RlZmlu
ZSBTT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0NMQVNTKGspICAgICAoR19UWVBFX0NIRUNLX0NMQVNT
X0NBU1QgKChrKSwgU09VUF9UWVBFX0hUVFBfSU5QVVRfU1RSRUFNLCBTb3VwSFRUUElucHV0U3Ry
ZWFtQ2xhc3MpKQorI2RlZmluZSBTT1VQX0lTX0hUVFBfSU5QVVRfU1RSRUFNKG8pICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvKSwgU09VUF9UWVBFX0hUVFBfSU5QVVRfU1RS
RUFNKSkKKyNkZWZpbmUgU09VUF9JU19IVFRQX0lOUFVUX1NUUkVBTV9DTEFTUyhrKSAgKEdfVFlQ
RV9DSEVDS19DTEFTU19UWVBFICgoayksIFNPVVBfVFlQRV9IVFRQX0lOUFVUX1NUUkVBTSkpCisj
ZGVmaW5lIFNPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX0NMQVNTKG8pIChHX1RZUEVfSU5TVEFO
Q0VfR0VUX0NMQVNTICgobyksIFNPVVBfVFlQRV9IVFRQX0lOUFVUX1NUUkVBTSwgU291cEhUVFBJ
bnB1dFN0cmVhbUNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgU291cEhUVFBJbnB1dFN0cmVhbSBT
b3VwSFRUUElucHV0U3RyZWFtOwordHlwZWRlZiBzdHJ1Y3QgU291cEhUVFBJbnB1dFN0cmVhbUNs
YXNzIFNvdXBIVFRQSW5wdXRTdHJlYW1DbGFzczsKKworc3RydWN0IFNvdXBIVFRQSW5wdXRTdHJl
YW0geworCUdJbnB1dFN0cmVhbSBwYXJlbnQ7Cit9OworCitzdHJ1Y3QgU291cEhUVFBJbnB1dFN0
cmVhbUNsYXNzIHsKKwlHSW5wdXRTdHJlYW1DbGFzcyBwYXJlbnRfY2xhc3M7CisKKwkvKiBQYWRk
aW5nIGZvciBmdXR1cmUgZXhwYW5zaW9uICovCisJdm9pZCAoKl9nX3Jlc2VydmVkMSkodm9pZCk7
CisJdm9pZCAoKl9nX3Jlc2VydmVkMikodm9pZCk7CisJdm9pZCAoKl9nX3Jlc2VydmVkMykodm9p
ZCk7CisJdm9pZCAoKl9nX3Jlc2VydmVkNCkodm9pZCk7CisJdm9pZCAoKl9nX3Jlc2VydmVkNSko
dm9pZCk7Cit9OworCitHVHlwZSBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dldF90eXBlICh2b2lk
KSBHX0dOVUNfQ09OU1Q7CisKK1NvdXBIVFRQSW5wdXRTdHJlYW0gKnNvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fbmV3IChTb3VwU2Vzc2lvbiAgICAgICAgICpzZXNzaW9uLAorCQkJCQkJIFNvdXBNZXNz
YWdlICAgICAgICAgKm1zZyk7CisKK2dib29sZWFuICAgICAgICAgICAgIHNvdXBfaHR0cF9pbnB1
dF9zdHJlYW1fc2VuZCAoU291cEhUVFBJbnB1dFN0cmVhbSAqaHR0cHN0cmVhbSwKKwkJCQkJCSAg
R0NhbmNlbGxhYmxlICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJCQkgIEdFcnJvciAgICAgICAg
ICAgICAqKmVycm9yKTsKKwordm9pZCAgICAgICAgICAgICAgICAgc291cF9odHRwX2lucHV0X3N0
cmVhbV9zZW5kX2FzeW5jIChTb3VwSFRUUElucHV0U3RyZWFtICpodHRwc3RyZWFtLAorCQkJCQkJ
CWludCBpb19wcmlvcml0eSwKKwkJCQkJCQlHQ2FuY2VsbGFibGUgICAgICAgICpjYW5jZWxsYWJs
ZSwKKwkJCQkJCQlHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAorCQkJCQkJCWdwb2ludGVy
IHVzZXJfZGF0YSk7CitnYm9vbGVhbiAgICAgICAgICAgICBzb3VwX2h0dHBfaW5wdXRfc3RyZWFt
X3NlbmRfZmluaXNoIChTb3VwSFRUUElucHV0U3RyZWFtICpodHRwc3RyZWFtLAorCQkJCQkJCSBH
QXN5bmNSZXN1bHQgICAgICAgICpyZXN1bHQsCisJCQkJCQkJIEdFcnJvciAgICAgICAgICAgICAq
KmVycm9yKTsKKworU291cE1lc3NhZ2UgICAgICAgICAqc291cF9odHRwX2lucHV0X3N0cmVhbV9n
ZXRfbWVzc2FnZSAoU291cEhUVFBJbnB1dFN0cmVhbSAqaHR0cHN0cmVhbSk7CisKK0dfRU5EX0RF
Q0xTCisKKyNlbmRpZiAvKiBfX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fSF9fICovCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0
YS5jIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWRh
dGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2Y5MWM2Ci0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1
ZXN0LWRhdGEuYwpAQCAtMCwwICsxLDIwNSBAQAorLyoKKyAqIHNvdXAtcmVxdWVzdC1kYXRhLmM6
IGRhdGE6IFVSSSByZXF1ZXN0IG9iamVjdAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBSZWQg
SGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZmRlZiBIQVZF
X0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKyNpbmNsdWRlICJzb3VwLXJl
cXVlc3QtZGF0YS5oIgorCisjaW5jbHVkZSAic291cC1yZXF1ZXN0ZXIuaCIKKyNpbmNsdWRlIDxs
aWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDxnbGliL2dpMThuLmg+CisKK0dfREVGSU5FX1RZUEUg
KFNvdXBSZXF1ZXN0RGF0YSwgc291cF9yZXF1ZXN0X2RhdGEsIFNPVVBfVFlQRV9SRVFVRVNUKQor
CitzdHJ1Y3QgX1NvdXBSZXF1ZXN0RGF0YVByaXZhdGUgeworCWdzaXplIGNvbnRlbnRfbGVuZ3Ro
OworCWNoYXIgKmNvbnRlbnRfdHlwZTsKK307CisKK3N0YXRpYyB2b2lkCitzb3VwX3JlcXVlc3Rf
ZGF0YV9pbml0IChTb3VwUmVxdWVzdERhdGEgKmRhdGEpCit7CisJZGF0YS0+cHJpdiA9IEdfVFlQ
RV9JTlNUQU5DRV9HRVRfUFJJVkFURSAoZGF0YSwgU09VUF9UWVBFX1JFUVVFU1RfREFUQSwgU291
cFJlcXVlc3REYXRhUHJpdmF0ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX3JlcXVlc3RfZGF0
YV9maW5hbGl6ZSAoR09iamVjdCAqb2JqZWN0KQoreworCVNvdXBSZXF1ZXN0RGF0YSAqZGF0YSA9
IFNPVVBfUkVRVUVTVF9EQVRBIChvYmplY3QpOworCisJZ19mcmVlIChkYXRhLT5wcml2LT5jb250
ZW50X3R5cGUpOworCisJR19PQkpFQ1RfQ0xBU1MgKHNvdXBfcmVxdWVzdF9kYXRhX3BhcmVudF9j
bGFzcyktPmZpbmFsaXplIChvYmplY3QpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3NvdXBfcmVx
dWVzdF9kYXRhX2NoZWNrX3VyaSAoU291cFJlcXVlc3QgICpyZXF1ZXN0LAorCQkJICAgICBTb3Vw
VVJJICAgICAgKnVyaSwKKwkJCSAgICAgR0Vycm9yICAgICAgKiplcnJvcikKK3sKKwlyZXR1cm4g
dXJpLT5ob3N0ID09IE5VTEw7Cit9CisKKworI2RlZmluZSBYRElHSVQoYykgKChjKSA8PSAnOScg
PyAoYykgLSAnMCcgOiAoKGMpICYgMHg0RikgLSAnQScgKyAxMCkKKyNkZWZpbmUgSEVYQ0hBUihz
KSAoKFhESUdJVCAoc1sxXSkgPDwgNCkgKyBYRElHSVQgKHNbMl0pKQorCitjaGFyICoKK3VyaV9k
ZWNvZGVkX2NvcHkgKGNvbnN0IGNoYXIgKnBhcnQsIGludCBsZW5ndGgsIGdib29sZWFuIGZpeHVw
KQoreworCXVuc2lnbmVkIGNoYXIgKnMsICpkOworCWNoYXIgKmRlY29kZWQgPSBnX3N0cm5kdXAg
KHBhcnQsIGxlbmd0aCk7CisKKwlzID0gZCA9ICh1bnNpZ25lZCBjaGFyICopZGVjb2RlZDsKKwlk
byB7CisJCWlmICgqcyA9PSAnJScpIHsKKwkJCWlmICghZ19hc2NpaV9pc3hkaWdpdCAoc1sxXSkg
fHwKKwkJCSAgICAhZ19hc2NpaV9pc3hkaWdpdCAoc1syXSkpIHsKKwkJCQlpZiAoIWZpeHVwKSB7
CisJCQkJCWdfZnJlZSAoZGVjb2RlZCk7CisJCQkJCXJldHVybiBOVUxMOworCQkJCX0KKwkJCQkq
ZCsrID0gKnM7CisJCQkJY29udGludWU7CisJCQl9CisJCQkqZCsrID0gSEVYQ0hBUiAocyk7CisJ
CQlzICs9IDI7CisJCX0gZWxzZQorCQkJKmQrKyA9ICpzOworCX0gd2hpbGUgKCpzKyspOworCisJ
cmV0dXJuIGRlY29kZWQ7Cit9CisKK3N0YXRpYyBHSW5wdXRTdHJlYW0gKgorc291cF9yZXF1ZXN0
X2RhdGFfc2VuZCAoU291cFJlcXVlc3QgICAqcmVxdWVzdCwKKwkJCUdDYW5jZWxsYWJsZSAgKmNh
bmNlbGxhYmxlLAorCQkJR0Vycm9yICAgICAgICoqZXJyb3IpCit7CisJU291cFJlcXVlc3REYXRh
ICpkYXRhID0gU09VUF9SRVFVRVNUX0RBVEEgKHJlcXVlc3QpOworCVNvdXBVUkkgKnVyaSA9IHNv
dXBfcmVxdWVzdF9nZXRfdXJpIChyZXF1ZXN0KTsKKwlHSW5wdXRTdHJlYW0gKm1lbXN0cmVhbTsK
Kwljb25zdCBjaGFyICpjb21tYSwgKnNlbWksICpzdGFydCwgKmVuZDsKKwlnYm9vbGVhbiBiYXNl
NjQgPSBGQUxTRTsKKworCWdjaGFyICp1cmlzdHIgPSBzb3VwX3VyaV90b19zdHJpbmcgKHVyaSwg
RkFMU0UpOworCWNvbW1hID0gc3RyY2hyICh1cmlzdHIsICcsJyk7CisJaWYgKGNvbW1hICYmIGNv
bW1hICE9IHVyaXN0cikgeworCQkvKiBEZWFsIHdpdGggTUlNRSB0eXBlIC8gcGFyYW1zICovCisJ
CXNlbWkgPSBtZW1jaHIgKHVyaXN0ciwgJzsnLCBjb21tYSAtIHVyaXN0cik7CisJCWVuZCA9IHNl
bWkgPyBzZW1pIDogY29tbWE7CisKKwkJaWYgKGVuZCAhPSB1cmlzdHIpCisJCQlkYXRhLT5wcml2
LT5jb250ZW50X3R5cGUgPSB1cmlfZGVjb2RlZF9jb3B5ICh1cmlzdHIsIGVuZCAtIHVyaXN0ciwg
VFJVRSk7CisKKwkJaWYgKHNlbWkgJiYgIWdfYXNjaWlfc3RybmNhc2VjbXAgKHNlbWksICI7YmFz
ZTY0IiwgTUFYIChjb21tYSAtIHNlbWksIHN0cmxlbiAoIjtiYXNlNjQiKSkpKQorCQkJYmFzZTY0
ID0gVFJVRTsKKwl9CisKKwltZW1zdHJlYW0gPSBnX21lbW9yeV9pbnB1dF9zdHJlYW1fbmV3ICgp
OworCisJc3RhcnQgPSBjb21tYSA/IGNvbW1hICsgMSA6IHVyaXN0cjsKKworCWlmICgqc3RhcnQp
IHsKKwkJZ3VjaGFyICpidWY7CisKKwkJaWYgKGJhc2U2NCkgeworCQkJaW50IGlubGVuLCBzdGF0
ZSA9IDA7CisJCQlndWludCBzYXZlID0gMDsKKwkJCWNoYXIgKnVuZXNjYXBlZDsKKworCQkJaWYg
KHN0cmNociAoc3RhcnQsICclJykpIHsKKwkJCQlzdGFydCA9IHVuZXNjYXBlZCA9IHVyaV9kZWNv
ZGVkX2NvcHkgKHN0YXJ0LCBzdHJsZW4gKHN0YXJ0KSwgVFJVRSk7CisJCQkJaWYgKCF1bmVzY2Fw
ZWQpCisJCQkJCWdvdG8gZmFpbDsKKwkJCX0gZWxzZQorCQkJCXVuZXNjYXBlZCA9IE5VTEw7CisK
KwkJCWlubGVuID0gc3RybGVuIChzdGFydCk7CisJCQlidWYgPSBnX21hbGxvYyAoaW5sZW4gKiAz
IC8gNCk7CisJCQlkYXRhLT5wcml2LT5jb250ZW50X2xlbmd0aCA9CisJCQkJZ19iYXNlNjRfZGVj
b2RlX3N0ZXAgKHN0YXJ0LCBpbmxlbiwgYnVmLAorCQkJCQkJICAgICAgJnN0YXRlLCAmc2F2ZSk7
CisJCQlnX2ZyZWUgKHVuZXNjYXBlZCk7CisJCQlpZiAoc3RhdGUgIT0gMCkgeworCQkJCWdfZnJl
ZSAoYnVmKTsKKwkJCQlnb3RvIGZhaWw7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBDYW5ub3Qg
dXNlIGdfdXJpX3VuZXNjYXBlX3N0cmluZyBub3IKKwkJCSAgIHNvdXBfdXJpX2RlY29kZSBiZWNh
dXNlIHdlIGRvbid0IHdhbnQgdG8KKwkJCSAgIGZhaWwgZm9yIHRoaW5ncyBsaWtlICIlM0UlJTND
IiAtPiAiPiU8IiAqLworCQkJYnVmID0gKGd1Y2hhciAqKXVyaV9kZWNvZGVkX2NvcHkgKHN0YXJ0
LCBzdHJsZW4gKHN0YXJ0KSwgVFJVRSk7CisJCQlpZiAoIWJ1ZikKKwkJCQlnb3RvIGZhaWw7CisJ
CQlkYXRhLT5wcml2LT5jb250ZW50X2xlbmd0aCA9IHN0cmxlbiAoKGNoYXIgKilidWYpOworCQl9
CisKKwkJZ19tZW1vcnlfaW5wdXRfc3RyZWFtX2FkZF9kYXRhIChHX01FTU9SWV9JTlBVVF9TVFJF
QU0gKG1lbXN0cmVhbSksCisJCQkJCQlidWYsIGRhdGEtPnByaXYtPmNvbnRlbnRfbGVuZ3RoLAor
CQkJCQkJZ19mcmVlKTsKKwl9CisJZ19mcmVlICh1cmlzdHIpOworCisJcmV0dXJuIG1lbXN0cmVh
bTsKKworIGZhaWw6CisJZ19mcmVlICh1cmlzdHIpOworCWdfc2V0X2Vycm9yIChlcnJvciwgU09V
UF9FUlJPUiwgU09VUF9FUlJPUl9CQURfVVJJLAorCQkgICAgIF8gKCJVbmFibGUgdG8gZGVjb2Rl
IFVSSTogJXMiKSwgc3RhcnQpOworCWdfb2JqZWN0X3VucmVmIChtZW1zdHJlYW0pOworCXJldHVy
biBOVUxMOworfQorCitzdGF0aWMgZ29mZnNldAorc291cF9yZXF1ZXN0X2RhdGFfZ2V0X2NvbnRl
bnRfbGVuZ3RoIChTb3VwUmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlTb3VwUmVxdWVzdERhdGEgKmRh
dGEgPSBTT1VQX1JFUVVFU1RfREFUQSAocmVxdWVzdCk7CisKKwlyZXR1cm4gZGF0YS0+cHJpdi0+
Y29udGVudF9sZW5ndGg7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK3NvdXBfcmVxdWVzdF9k
YXRhX2dldF9jb250ZW50X3R5cGUgKFNvdXBSZXF1ZXN0ICpyZXF1ZXN0KQoreworCVNvdXBSZXF1
ZXN0RGF0YSAqZGF0YSA9IFNPVVBfUkVRVUVTVF9EQVRBIChyZXF1ZXN0KTsKKworCXJldHVybiBk
YXRhLT5wcml2LT5jb250ZW50X3R5cGU7Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX3JlcXVlc3Rf
ZGF0YV9jbGFzc19pbml0IChTb3VwUmVxdWVzdERhdGFDbGFzcyAqcmVxdWVzdF9kYXRhX2NsYXNz
KQoreworCUdPYmplY3RDbGFzcyAqb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKHJlcXVl
c3RfZGF0YV9jbGFzcyk7CisJU291cFJlcXVlc3RDbGFzcyAqcmVxdWVzdF9jbGFzcyA9CisJCVNP
VVBfUkVRVUVTVF9DTEFTUyAocmVxdWVzdF9kYXRhX2NsYXNzKTsKKworCWdfdHlwZV9jbGFzc19h
ZGRfcHJpdmF0ZSAocmVxdWVzdF9kYXRhX2NsYXNzLCBzaXplb2YgKFNvdXBSZXF1ZXN0RGF0YVBy
aXZhdGUpKTsKKworCW9iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBzb3VwX3JlcXVlc3RfZGF0YV9m
aW5hbGl6ZTsKKworCXJlcXVlc3RfY2xhc3MtPmNoZWNrX3VyaSA9IHNvdXBfcmVxdWVzdF9kYXRh
X2NoZWNrX3VyaTsKKwlyZXF1ZXN0X2NsYXNzLT5zZW5kID0gc291cF9yZXF1ZXN0X2RhdGFfc2Vu
ZDsKKwlyZXF1ZXN0X2NsYXNzLT5nZXRfY29udGVudF9sZW5ndGggPSBzb3VwX3JlcXVlc3RfZGF0
YV9nZXRfY29udGVudF9sZW5ndGg7CisJcmVxdWVzdF9jbGFzcy0+Z2V0X2NvbnRlbnRfdHlwZSA9
IHNvdXBfcmVxdWVzdF9kYXRhX2dldF9jb250ZW50X3R5cGU7Cit9CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5oIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWRhdGEuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzE0ZjM3Ci0tLSAvZGV2L251bGwKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWRhdGEu
aApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJlZCBIYXQsIElu
Yy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBTT1VQX1JFUVVF
U1RfREFUQV9ICisjZGVmaW5lIFNPVVBfUkVRVUVTVF9EQVRBX0ggMQorCisjaW5jbHVkZSAic291
cC1yZXF1ZXN0LmgiCisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBTT1VQX1RZUEVfUkVRVUVT
VF9EQVRBICAgICAgICAgICAgKHNvdXBfcmVxdWVzdF9kYXRhX2dldF90eXBlICgpKQorI2RlZmlu
ZSBTT1VQX1JFUVVFU1RfREFUQShvYmplY3QpICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5D
RV9DQVNUICgob2JqZWN0KSwgU09VUF9UWVBFX1JFUVVFU1RfREFUQSwgU291cFJlcXVlc3REYXRh
KSkKKyNkZWZpbmUgU09VUF9SRVFVRVNUX0RBVEFfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgU09VUF9UWVBFX1JFUVVFU1RfREFUQSwgU291cFJlcXVl
c3REYXRhQ2xhc3MpKQorI2RlZmluZSBTT1VQX0lTX1JFUVVFU1RfREFUQShvYmplY3QpICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqZWN0KSwgU09VUF9UWVBFX1JFUVVFU1Rf
REFUQSkpCisjZGVmaW5lIFNPVVBfSVNfUkVRVUVTVF9EQVRBX0NMQVNTKGtsYXNzKSAoR19UWVBF
X0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIFNPVVBfVFlQRV9SRVFVRVNUX0RBVEEpKQorI2Rl
ZmluZSBTT1VQX1JFUVVFU1RfREFUQV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9H
RVRfQ0xBU1MgKChvYmopLCBTT1VQX1RZUEVfUkVRVUVTVF9EQVRBLCBTb3VwUmVxdWVzdERhdGFD
bGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9Tb3VwUmVxdWVzdERhdGFQcml2YXRlIFNvdXBSZXF1
ZXN0RGF0YVByaXZhdGU7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlTb3VwUmVxdWVzdCBwYXJlbnQ7
CisKKwlTb3VwUmVxdWVzdERhdGFQcml2YXRlICpwcml2OworfSBTb3VwUmVxdWVzdERhdGE7CisK
K3R5cGVkZWYgc3RydWN0IHsKKwlTb3VwUmVxdWVzdENsYXNzIHBhcmVudDsKK30gU291cFJlcXVl
c3REYXRhQ2xhc3M7CisKK0dUeXBlIHNvdXBfcmVxdWVzdF9kYXRhX2dldF90eXBlICh2b2lkKTsK
KworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFNPVVBfUkVRVUVTVF9EQVRBX0ggKi8KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1m
aWxlLmMgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Qt
ZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjZmU3OWQKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJl
cXVlc3QtZmlsZS5jCkBAIC0wLDAgKzEsMzIyIEBACisvKgorICogc291cC1yZXF1ZXN0LWZpbGUu
YzogZmlsZTogVVJJIHJlcXVlc3Qgb2JqZWN0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJl
ZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmZGVmIEhB
VkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAic291
cC1yZXF1ZXN0LWZpbGUuaCIKKyNpbmNsdWRlICJzb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0u
aCIKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3Rlci5oIgorI2luY2x1ZGUgPGdsaWIvZ2kxOG4uaD4K
KworR19ERUZJTkVfVFlQRSAoU291cFJlcXVlc3RGaWxlLCBzb3VwX3JlcXVlc3RfZmlsZSwgU09V
UF9UWVBFX1JFUVVFU1QpCisKK3N0cnVjdCBfU291cFJlcXVlc3RGaWxlUHJpdmF0ZSB7CisJR0Zp
bGUgKmdmaWxlOworCisJY2hhciAqbWltZV90eXBlOworCWdvZmZzZXQgc2l6ZTsKK307CisKK0dG
aWxlICoKK3NvdXBfcmVxdWVzdF9maWxlX2dldF9maWxlIChTb3VwUmVxdWVzdEZpbGUgKmZpbGUp
Cit7CisJcmV0dXJuIGdfb2JqZWN0X3JlZiAoZmlsZS0+cHJpdi0+Z2ZpbGUpOworfQorCitzdGF0
aWMgdm9pZAorc291cF9yZXF1ZXN0X2ZpbGVfaW5pdCAoU291cFJlcXVlc3RGaWxlICpmaWxlKQor
eworCWZpbGUtPnByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKGZpbGUsIFNPVVBf
VFlQRV9SRVFVRVNUX0ZJTEUsIFNvdXBSZXF1ZXN0RmlsZVByaXZhdGUpOworCisJZmlsZS0+cHJp
di0+c2l6ZSA9IC0xOworfQorCitzdGF0aWMgdm9pZAorc291cF9yZXF1ZXN0X2ZpbGVfZmluYWxp
emUgKEdPYmplY3QgKm9iamVjdCkKK3sKKwlTb3VwUmVxdWVzdEZpbGUgKmZpbGUgPSBTT1VQX1JF
UVVFU1RfRklMRSAob2JqZWN0KTsKKworCWlmIChmaWxlLT5wcml2LT5nZmlsZSkKKwkJZ19vYmpl
Y3RfdW5yZWYgKGZpbGUtPnByaXYtPmdmaWxlKTsKKwlnX2ZyZWUgKGZpbGUtPnByaXYtPm1pbWVf
dHlwZSk7CisKKwlHX09CSkVDVF9DTEFTUyAoc291cF9yZXF1ZXN0X2ZpbGVfcGFyZW50X2NsYXNz
KS0+ZmluYWxpemUgKG9iamVjdCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorc291cF9yZXF1ZXN0
X2ZpbGVfY2hlY2tfdXJpIChTb3VwUmVxdWVzdCAgKnJlcXVlc3QsCisJCQkgICAgIFNvdXBVUkkg
ICAgICAqdXJpLAorCQkJICAgICBHRXJyb3IgICAgICAqKmVycm9yKQoreworCS8qICJmaWxlOi9m
b28iIGlzIG5vdCB2YWxpZCAqLworCWlmICghdXJpLT5ob3N0KQorCQlyZXR1cm4gRkFMU0U7CisK
KwkvKiBidXQgaXQgbXVzdCBiZSAiZmlsZTovLy8uLi4iIG9yICJmaWxlOi8vbG9jYWxob3N0Ly4u
LiIgKi8KKwlpZiAodXJpLT5zY2hlbWUgPT0gU09VUF9VUklfU0NIRU1FX0ZJTEUgJiYKKwkgICAg
KnVyaS0+aG9zdCAmJgorCSAgICBnX2FzY2lpX3N0cmNhc2VjbXAgKHVyaS0+aG9zdCwgImxvY2Fs
aG9zdCIpICE9IDApCisJCXJldHVybiBGQUxTRTsKKworCXJldHVybiBUUlVFOworfQorCitzdGF0
aWMgdm9pZAorc291cF9yZXF1ZXN0X2ZpbGVfZnRwX21haW5fbG9vcF9xdWl0IChHT2JqZWN0ICAg
ICAgKm9iamVjdCwKKwkJCQkgICAgICBHQXN5bmNSZXN1bHQgKnJlc3VsdCwKKwkJCQkgICAgICBn
cG9pbnRlciBsb29wKQoreworCWdfbWFpbl9sb29wX3F1aXQgKGxvb3ApOworfQorCisvKiBUaGlz
IGlzIGEgc29tZXdoYXQgaGFja3kgd2F5IHRvIGdldCBGVFAgdG8gYWxtb3N0IHdvcmsuIFRoZSBw
cm9wZXIgd2F5IHRvCisgKiBnZXQgRlRQIHRvIF9yZWFsbHlfIHdvcmsgaW52b2x2ZXMgaGFja2lu
ZyBHSU8gdG8gaGF2ZSBBUElzIHRvIGhhbmRsZQorICogY2Fub25jaWFsIFVSTHMuCisgKi8KK3N0
YXRpYyBHRmlsZSAqCitzb3VwX3JlcXVlc3RfZmlsZV9lbnN1cmVfZmlsZV9mdHAgKFNvdXBVUkkg
ICAgICAgKnVyaSwKKwkJCQkgICBHQ2FuY2VsbGFibGUgICpjYW5jZWxsYWJsZSwKKwkJCQkgICBH
RXJyb3IgICAgICAgKiplcnJvcikKK3sKKwlTb3VwVVJJICpob3N0OworCWNoYXIgKnM7CisJR0Zp
bGUgKmZpbGUsICpyZXN1bHQ7CisJR01vdW50ICptb3VudDsKKworCWhvc3QgPSBzb3VwX3VyaV9j
b3B5X2hvc3QgKHVyaSk7CisJcyA9IHNvdXBfdXJpX3RvX3N0cmluZyAoaG9zdCwgRkFMU0UpOwor
CWZpbGUgPSBnX2ZpbGVfbmV3X2Zvcl91cmkgKHMpOworCXNvdXBfdXJpX2ZyZWUgKGhvc3QpOwor
CWdfZnJlZSAocyk7CisKKwltb3VudCA9IGdfZmlsZV9maW5kX2VuY2xvc2luZ19tb3VudCAoZmls
ZSwgY2FuY2VsbGFibGUsIGVycm9yKTsKKwlpZiAobW91bnQgPT0gTlVMTCAmJiBnX2ZpbGVfc3Vw
cG9ydHNfdGhyZWFkX2NvbnRleHRzIChmaWxlKSkgeworCQlHTWFpbkNvbnRleHQgKmNvbnRleHQg
PSBnX21haW5fY29udGV4dF9uZXcgKCk7CisJCUdNYWluTG9vcCAqbG9vcCA9IGdfbWFpbl9sb29w
X25ldyAoY29udGV4dCwgRkFMU0UpOworCisJCWdfY2xlYXJfZXJyb3IgKGVycm9yKTsKKwkJZ19t
YWluX2NvbnRleHRfcHVzaF90aHJlYWRfZGVmYXVsdCAoY29udGV4dCk7CisJCWdfZmlsZV9tb3Vu
dF9lbmNsb3Npbmdfdm9sdW1lIChmaWxlLAorCQkJCQkgICAgICAgR19NT1VOVF9NT1VOVF9OT05F
LAorCQkJCQkgICAgICAgTlVMTCwgLyogRklYTUUhICovCisJCQkJCSAgICAgICBjYW5jZWxsYWJs
ZSwKKwkJCQkJICAgICAgIHNvdXBfcmVxdWVzdF9maWxlX2Z0cF9tYWluX2xvb3BfcXVpdCwKKwkJ
CQkJICAgICAgIGxvb3ApOworCQlnX21haW5fbG9vcF9ydW4gKGxvb3ApOworCQlnX21haW5fY29u
dGV4dF9wb3BfdGhyZWFkX2RlZmF1bHQgKGNvbnRleHQpOworCQlnX21haW5fbG9vcF91bnJlZiAo
bG9vcCk7CisJCWdfbWFpbl9jb250ZXh0X3VucmVmIChjb250ZXh0KTsKKwkJbW91bnQgPSBnX2Zp
bGVfZmluZF9lbmNsb3NpbmdfbW91bnQgKGZpbGUsIGNhbmNlbGxhYmxlLCBlcnJvcik7CisJfQor
CWlmIChtb3VudCA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwlnX29iamVjdF91bnJlZiAoZmls
ZSk7CisKKwlmaWxlID0gZ19tb3VudF9nZXRfZGVmYXVsdF9sb2NhdGlvbiAobW91bnQpOworCWdf
b2JqZWN0X3VucmVmIChtb3VudCk7CisKKwlzID0gZ19zdHJkdXAgKHVyaS0+cGF0aCk7CisJaWYg
KHN0cmNociAocywgJzsnKSkKKwkJKnN0cmNociAocywgJzsnKSA9IDA7CisKKwlyZXN1bHQgPSBn
X2ZpbGVfcmVzb2x2ZV9yZWxhdGl2ZV9wYXRoIChmaWxlLCBzKTsKKwlnX2ZyZWUgKHMpOworCWdf
b2JqZWN0X3VucmVmIChmaWxlKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9v
bGVhbgorc291cF9yZXF1ZXN0X2ZpbGVfZW5zdXJlX2ZpbGUgKFNvdXBSZXF1ZXN0RmlsZSAgKmZp
bGUsCisJCQkgICAgICAgR0NhbmNlbGxhYmxlICAgICAqY2FuY2VsbGFibGUsCisJCQkgICAgICAg
R0Vycm9yICAgICAgICAgICoqZXJyb3IpCit7CisJU291cFVSSSAqdXJpOworCisJaWYgKGZpbGUt
PnByaXYtPmdmaWxlKQorCQlyZXR1cm4gVFJVRTsKKworCXVyaSA9IHNvdXBfcmVxdWVzdF9nZXRf
dXJpIChTT1VQX1JFUVVFU1QgKGZpbGUpKTsKKwlpZiAodXJpLT5zY2hlbWUgPT0gU09VUF9VUklf
U0NIRU1FX0ZJTEUpIHsKKwkJZ2NoYXIgKmRlY29kZWRfdXJpID0gc291cF91cmlfZGVjb2RlIChz
b3VwX3VyaV9nZXRfcGF0aCAodXJpKSk7CisKKwkJaWYgKGRlY29kZWRfdXJpKSB7CisJCQkvKiBE
byBub3QgdXNlIG5ld19mb3JfdXJpKCkgYXMgdGhlIGRlY29kZWQgVVJJCisJCQkgKiAgY291bGQg
bm90IGJlIGEgdmFsaWQgVVJJCisJCQkgKi8KKwkJCWZpbGUtPnByaXYtPmdmaWxlID0gZ19maWxl
X25ld19mb3JfcGF0aCAoZGVjb2RlZF91cmkpOworCQkJZ19mcmVlIChkZWNvZGVkX3VyaSk7CisJ
CX0KKworCQlyZXR1cm4gVFJVRTsKKwl9IGVsc2UgaWYgKHVyaS0+c2NoZW1lID09IFNPVVBfVVJJ
X1NDSEVNRV9GVFApIHsKKwkJZmlsZS0+cHJpdi0+Z2ZpbGUgPSBzb3VwX3JlcXVlc3RfZmlsZV9l
bnN1cmVfZmlsZV9mdHAgKHVyaSwKKwkJCQkJCQkJICAgICAgIGNhbmNlbGxhYmxlLAorCQkJCQkJ
CQkgICAgICAgZXJyb3IpOworCQlyZXR1cm4gZmlsZS0+cHJpdi0+Z2ZpbGUgIT0gTlVMTDsKKwl9
CisKKwlnX3NldF9lcnJvciAoZXJyb3IsIFNPVVBfRVJST1IsIFNPVVBfRVJST1JfVU5TVVBQT1JU
RURfVVJJX1NDSEVNRSwKKwkJICAgICBfICgiVW5zdXBwb3J0ZWQgVVJJIHNjaGVtZSAnJXMnIiks
IHVyaS0+c2NoZW1lKTsKKwlyZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBHSW5wdXRTdHJlYW0g
Kgorc291cF9yZXF1ZXN0X2ZpbGVfc2VuZCAoU291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3Qs
CisJCQlHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQlHRXJyb3IgICAgICAg
ICAgICAgICoqZXJyb3IpCit7CisJU291cFJlcXVlc3RGaWxlICpmaWxlID0gU09VUF9SRVFVRVNU
X0ZJTEUgKHJlcXVlc3QpOworCUdJbnB1dFN0cmVhbSAqc3RyZWFtOworCUdFcnJvciAqbXlfZXJy
b3IgPSBOVUxMOworCisJaWYgKCFzb3VwX3JlcXVlc3RfZmlsZV9lbnN1cmVfZmlsZSAoZmlsZSwg
Y2FuY2VsbGFibGUsIGVycm9yKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzdHJlYW0gPSBHX0lOUFVU
X1NUUkVBTSAoZ19maWxlX3JlYWQgKGZpbGUtPnByaXYtPmdmaWxlLAorCQkJCQkgICAgICBjYW5j
ZWxsYWJsZSwgJm15X2Vycm9yKSk7CisJaWYgKHN0cmVhbSA9PSBOVUxMKSB7CisJCWlmIChnX2Vy
cm9yX21hdGNoZXMgKG15X2Vycm9yLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX0lTX0RJUkVDVE9S
WSkpIHsKKwkJCUdGaWxlRW51bWVyYXRvciAqZW51bWVyYXRvcjsKKwkJCWdfY2xlYXJfZXJyb3Ig
KCZteV9lcnJvcik7CisJCQllbnVtZXJhdG9yID0gZ19maWxlX2VudW1lcmF0ZV9jaGlsZHJlbiAo
ZmlsZS0+cHJpdi0+Z2ZpbGUsCisJCQkJCQkJCSIqIiwKKwkJCQkJCQkJR19GSUxFX1FVRVJZX0lO
Rk9fTk9ORSwKKwkJCQkJCQkJY2FuY2VsbGFibGUsCisJCQkJCQkJCWVycm9yKTsKKwkJCWlmIChl
bnVtZXJhdG9yKSB7CisJCQkJc3RyZWFtID0gc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX25l
dyAoZW51bWVyYXRvciwKKwkJCQkJCQkJCSAgc291cF9yZXF1ZXN0X2dldF91cmkgKHJlcXVlc3Qp
KTsKKwkJCQlnX29iamVjdF91bnJlZiAoZW51bWVyYXRvcik7CisJCQkJZmlsZS0+cHJpdi0+bWlt
ZV90eXBlID0gZ19zdHJkdXAgKCJ0ZXh0L2h0bWwiKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWdf
cHJvcGFnYXRlX2Vycm9yIChlcnJvciwgbXlfZXJyb3IpOworCQl9CisJfSBlbHNlIHsKKwkJR0Zp
bGVJbmZvICppbmZvID0gZ19maWxlX3F1ZXJ5X2luZm8gKGZpbGUtPnByaXYtPmdmaWxlLAorCQkJ
CQkJICAgICBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX0NPTlRFTlRfVFlQRSAiLCIKKwkJCQkJ
CSAgICAgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9TSVpFLAorCQkJCQkJICAgICAwLCBjYW5j
ZWxsYWJsZSwgTlVMTCk7CisJCWlmIChpbmZvKSB7CisJCQljb25zdCBjaGFyICpjb250ZW50X3R5
cGU7CisJCQlmaWxlLT5wcml2LT5zaXplID0gZ19maWxlX2luZm9fZ2V0X3NpemUgKGluZm8pOwor
CQkJY29udGVudF90eXBlID0gZ19maWxlX2luZm9fZ2V0X2NvbnRlbnRfdHlwZSAoaW5mbyk7CisK
KwkJCWlmIChjb250ZW50X3R5cGUpCisJCQkJZmlsZS0+cHJpdi0+bWltZV90eXBlID0gZ19jb250
ZW50X3R5cGVfZ2V0X21pbWVfdHlwZSAoY29udGVudF90eXBlKTsKKwkJCWdfb2JqZWN0X3VucmVm
IChpbmZvKTsKKwkJfQorCX0KKworCXJldHVybiBzdHJlYW07Cit9CisKK3N0YXRpYyB2b2lkCitz
b3VwX3JlcXVlc3RfZmlsZV9zZW5kX2FzeW5jX3RocmVhZCAoR1NpbXBsZUFzeW5jUmVzdWx0ICpy
ZXMsCisJCQkJICAgICBHT2JqZWN0ICAgICAgICAgICAgKm9iamVjdCwKKwkJCQkgICAgIEdDYW5j
ZWxsYWJsZSAgICAgICAqY2FuY2VsbGFibGUpCit7CisJR0lucHV0U3RyZWFtICpzdHJlYW07CisJ
U291cFJlcXVlc3QgKnJlcXVlc3Q7CisJR0Vycm9yICplcnJvciA9IE5VTEw7CisKKwlyZXF1ZXN0
ID0gU09VUF9SRVFVRVNUIChvYmplY3QpOworCisJc3RyZWFtID0gc291cF9yZXF1ZXN0X2ZpbGVf
c2VuZCAocmVxdWVzdCwgY2FuY2VsbGFibGUsICZlcnJvcik7CisKKwlpZiAoc3RyZWFtID09IE5V
TEwpIHsKKwkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9mcm9tX2Vycm9yIChyZXMsIGVycm9y
KTsKKwkJZ19lcnJvcl9mcmVlIChlcnJvcik7CisJfSBlbHNlIHsKKwkJZ19zaW1wbGVfYXN5bmNf
cmVzdWx0X3NldF9vcF9yZXNfZ3BvaW50ZXIgKHJlcywgc3RyZWFtLCBnX29iamVjdF91bnJlZik7
CisJfQorfQorCitzdGF0aWMgdm9pZAorc291cF9yZXF1ZXN0X2ZpbGVfc2VuZF9hc3luYyAoU291
cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCisJCQkgICAgICBHQ2FuY2VsbGFibGUgICAgICAg
ICAqY2FuY2VsbGFibGUsCisJCQkgICAgICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAor
CQkJICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCUdTaW1wbGVBc3luY1Jlc3VsdCAqcmVz
OworCisJcmVzID0gZ19zaW1wbGVfYXN5bmNfcmVzdWx0X25ldyAoR19PQkpFQ1QgKHJlcXVlc3Qp
LCBjYWxsYmFjaywgdXNlcl9kYXRhLCBzb3VwX3JlcXVlc3RfZmlsZV9zZW5kX2FzeW5jKTsKKwor
CWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9ydW5faW5fdGhyZWFkIChyZXMsIHNvdXBfcmVxdWVzdF9m
aWxlX3NlbmRfYXN5bmNfdGhyZWFkLCBHX1BSSU9SSVRZX0RFRkFVTFQsIGNhbmNlbGxhYmxlKTsK
KwlnX29iamVjdF91bnJlZiAocmVzKTsKK30KKworc3RhdGljIEdJbnB1dFN0cmVhbSAqCitzb3Vw
X3JlcXVlc3RfZmlsZV9zZW5kX2ZpbmlzaCAoU291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3Qs
CisJCQkgICAgICAgR0FzeW5jUmVzdWx0ICAgICAgICAgKnJlc3VsdCwKKwkJCSAgICAgICBHRXJy
b3IgICAgICAgICAgICAgICoqZXJyb3IpCit7CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpzaW1wbGUg
PSBHX1NJTVBMRV9BU1lOQ19SRVNVTFQgKHJlc3VsdCk7CisKKwlnX3dhcm5faWZfZmFpbCAoZ19z
aW1wbGVfYXN5bmNfcmVzdWx0X2dldF9zb3VyY2VfdGFnIChzaW1wbGUpID09IHNvdXBfcmVxdWVz
dF9maWxlX3NlbmRfYXN5bmMpOworCisJaWYgKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9wcm9wYWdh
dGVfZXJyb3IgKHNpbXBsZSwgZXJyb3IpKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBnX29i
amVjdF9yZWYgKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfb3BfcmVzX2dwb2ludGVyIChzaW1w
bGUpKTsKK30KKworc3RhdGljIGdvZmZzZXQKK3NvdXBfcmVxdWVzdF9maWxlX2dldF9jb250ZW50
X2xlbmd0aCAoU291cFJlcXVlc3QgKnJlcXVlc3QpCit7CisJU291cFJlcXVlc3RGaWxlICpmaWxl
ID0gU09VUF9SRVFVRVNUX0ZJTEUgKHJlcXVlc3QpOworCisJcmV0dXJuIGZpbGUtPnByaXYtPnNp
emU7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK3NvdXBfcmVxdWVzdF9maWxlX2dldF9jb250
ZW50X3R5cGUgKFNvdXBSZXF1ZXN0ICpyZXF1ZXN0KQoreworCVNvdXBSZXF1ZXN0RmlsZSAqZmls
ZSA9IFNPVVBfUkVRVUVTVF9GSUxFIChyZXF1ZXN0KTsKKworCWlmICghZmlsZS0+cHJpdi0+bWlt
ZV90eXBlKQorCQlyZXR1cm4gImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSI7CisKKwlyZXR1cm4g
ZmlsZS0+cHJpdi0+bWltZV90eXBlOworfQorCitzdGF0aWMgdm9pZAorc291cF9yZXF1ZXN0X2Zp
bGVfY2xhc3NfaW5pdCAoU291cFJlcXVlc3RGaWxlQ2xhc3MgKnJlcXVlc3RfZmlsZV9jbGFzcykK
K3sKKwlHT2JqZWN0Q2xhc3MgKm9iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChyZXF1ZXN0
X2ZpbGVfY2xhc3MpOworCVNvdXBSZXF1ZXN0Q2xhc3MgKnJlcXVlc3RfY2xhc3MgPQorCQlTT1VQ
X1JFUVVFU1RfQ0xBU1MgKHJlcXVlc3RfZmlsZV9jbGFzcyk7CisKKwlnX3R5cGVfY2xhc3NfYWRk
X3ByaXZhdGUgKHJlcXVlc3RfZmlsZV9jbGFzcywgc2l6ZW9mIChTb3VwUmVxdWVzdEZpbGVQcml2
YXRlKSk7CisKKwlvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gc291cF9yZXF1ZXN0X2ZpbGVfZmlu
YWxpemU7CisKKwlyZXF1ZXN0X2NsYXNzLT5jaGVja191cmkgPSBzb3VwX3JlcXVlc3RfZmlsZV9j
aGVja191cmk7CisJcmVxdWVzdF9jbGFzcy0+c2VuZCA9IHNvdXBfcmVxdWVzdF9maWxlX3NlbmQ7
CisJcmVxdWVzdF9jbGFzcy0+c2VuZF9hc3luYyA9IHNvdXBfcmVxdWVzdF9maWxlX3NlbmRfYXN5
bmM7CisJcmVxdWVzdF9jbGFzcy0+c2VuZF9maW5pc2ggPSBzb3VwX3JlcXVlc3RfZmlsZV9zZW5k
X2ZpbmlzaDsKKwlyZXF1ZXN0X2NsYXNzLT5nZXRfY29udGVudF9sZW5ndGggPSBzb3VwX3JlcXVl
c3RfZmlsZV9nZXRfY29udGVudF9sZW5ndGg7CisJcmVxdWVzdF9jbGFzcy0+Z2V0X2NvbnRlbnRf
dHlwZSA9IHNvdXBfcmVxdWVzdF9maWxlX2dldF9jb250ZW50X3R5cGU7Cit9CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZmlsZS5o
IGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWZpbGUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDg4ZDNkCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0
LWZpbGUuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJlZCBI
YXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBTT1VQ
X1JFUVVFU1RfRklMRV9ICisjZGVmaW5lIFNPVVBfUkVRVUVTVF9GSUxFX0ggMQorCisjaW5jbHVk
ZSAic291cC1yZXF1ZXN0LmgiCisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBTT1VQX1RZUEVf
UkVRVUVTVF9GSUxFICAgICAgICAgICAgKHNvdXBfcmVxdWVzdF9maWxlX2dldF90eXBlICgpKQor
I2RlZmluZSBTT1VQX1JFUVVFU1RfRklMRShvYmplY3QpICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9DQVNUICgob2JqZWN0KSwgU09VUF9UWVBFX1JFUVVFU1RfRklMRSwgU291cFJlcXVl
c3RGaWxlKSkKKyNkZWZpbmUgU09VUF9SRVFVRVNUX0ZJTEVfQ0xBU1Moa2xhc3MpICAgIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgU09VUF9UWVBFX1JFUVVFU1RfRklMRSwgU291
cFJlcXVlc3RGaWxlQ2xhc3MpKQorI2RlZmluZSBTT1VQX0lTX1JFUVVFU1RfRklMRShvYmplY3Qp
ICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqZWN0KSwgU09VUF9UWVBFX1JF
UVVFU1RfRklMRSkpCisjZGVmaW5lIFNPVVBfSVNfUkVRVUVTVF9GSUxFX0NMQVNTKGtsYXNzKSAo
R19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIFNPVVBfVFlQRV9SRVFVRVNUX0ZJTEUp
KQorI2RlZmluZSBTT1VQX1JFUVVFU1RfRklMRV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNU
QU5DRV9HRVRfQ0xBU1MgKChvYmopLCBTT1VQX1RZUEVfUkVRVUVTVF9GSUxFLCBTb3VwUmVxdWVz
dEZpbGVDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9Tb3VwUmVxdWVzdEZpbGVQcml2YXRlIFNv
dXBSZXF1ZXN0RmlsZVByaXZhdGU7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlTb3VwUmVxdWVzdCBw
YXJlbnQ7CisKKwlTb3VwUmVxdWVzdEZpbGVQcml2YXRlICpwcml2OworfSBTb3VwUmVxdWVzdEZp
bGU7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlTb3VwUmVxdWVzdENsYXNzIHBhcmVudDsKK30gU291
cFJlcXVlc3RGaWxlQ2xhc3M7CisKK0dUeXBlIHNvdXBfcmVxdWVzdF9maWxlX2dldF90eXBlICh2
b2lkKTsKKworR0ZpbGUgICpzb3VwX3JlcXVlc3RfZmlsZV9nZXRfZmlsZSAoU291cFJlcXVlc3RG
aWxlICpmaWxlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFNPVVBfUkVRVUVTVF9GSUxF
X0ggKi8KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3Nv
dXAtcmVxdWVzdC1odHRwLmMgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9z
b3VwLXJlcXVlc3QtaHR0cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3
M2MyYmUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9j
YWNoZS9zb3VwLXJlcXVlc3QtaHR0cC5jCkBAIC0wLDAgKzEsMzM5IEBACisvKgorICogc291cC1y
ZXF1ZXN0LWh0dHAuYzogaHR0cDogVVJJIHJlcXVlc3Qgb2JqZWN0CisgKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMu
TC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisj
aW5jbHVkZSA8Z2xpYi9naTE4bi5oPgorCisjaW5jbHVkZSAic291cC1jYWNoZS5oIgorI2luY2x1
ZGUgInNvdXAtY2FjaGUtcHJpdmF0ZS5oIgorI2luY2x1ZGUgInNvdXAtaHR0cC1pbnB1dC1zdHJl
YW0uaCIKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3QtaHR0cC5oIgorCitHX0RFRklORV9UWVBFIChT
b3VwUmVxdWVzdEhUVFAsIHNvdXBfcmVxdWVzdF9odHRwLCBTT1VQX1RZUEVfUkVRVUVTVCkKKwor
c3RydWN0IF9Tb3VwUmVxdWVzdEhUVFBQcml2YXRlIHsKKwlTb3VwTWVzc2FnZSAqbXNnOworfTsK
KworLyoqCisgKiBzb3VwX3JlcXVlc3RfaHR0cF9nZXRfbWVzc2FnZToKKyAqIEBodHRwOiBhICNT
b3VwUmVxdWVzdEhUVFAgb2JqZWN0CisgKgorICogR2V0cyBhIG5ldyByZWZlcmVuY2UgdG8gdGhl
ICNTb3VwTWVzc2FnZSBhc3NvY2lhdGVkIHRvIHRoaXMgU291cFJlcXVlc3QKKyAqCisgKiBSZXR1
cm5zOiBhIG5ldyByZWZlcmVuY2UgdG8gdGhlICNTb3VwTWVzc2FnZQorICoqLworU291cE1lc3Nh
Z2UgKgorc291cF9yZXF1ZXN0X2h0dHBfZ2V0X21lc3NhZ2UgKFNvdXBSZXF1ZXN0SFRUUCAqaHR0
cCkKK3sKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoU09VUF9JU19SRVFVRVNUX0hUVFAgKGh0dHAp
LCBOVUxMKTsKKworCXJldHVybiBnX29iamVjdF9yZWYgKGh0dHAtPnByaXYtPm1zZyk7Cit9CisK
K3N0YXRpYyB2b2lkCitzb3VwX3JlcXVlc3RfaHR0cF9pbml0IChTb3VwUmVxdWVzdEhUVFAgKmh0
dHApCit7CisJaHR0cC0+cHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAoaHR0cCwg
U09VUF9UWVBFX1JFUVVFU1RfSFRUUCwgU291cFJlcXVlc3RIVFRQUHJpdmF0ZSk7Cit9CisKK3N0
YXRpYyBnYm9vbGVhbgorc291cF9yZXF1ZXN0X2h0dHBfY2hlY2tfdXJpIChTb3VwUmVxdWVzdCAg
KnJlcXVlc3QsCisJCQkgICAgIFNvdXBVUkkgICAgICAqdXJpLAorCQkJICAgICBHRXJyb3IgICAg
ICAqKmVycm9yKQoreworCVNvdXBSZXF1ZXN0SFRUUCAqaHR0cCA9IFNPVVBfUkVRVUVTVF9IVFRQ
IChyZXF1ZXN0KTsKKworCWlmICghU09VUF9VUklfVkFMSURfRk9SX0hUVFAgKHVyaSkpCisJCXJl
dHVybiBGQUxTRTsKKworCWh0dHAtPnByaXYtPm1zZyA9IHNvdXBfbWVzc2FnZV9uZXdfZnJvbV91
cmkgKFNPVVBfTUVUSE9EX0dFVCwgdXJpKTsKKwlyZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZv
aWQKK3NvdXBfcmVxdWVzdF9odHRwX2ZpbmFsaXplIChHT2JqZWN0ICpvYmplY3QpCit7CisJU291
cFJlcXVlc3RIVFRQICpodHRwID0gU09VUF9SRVFVRVNUX0hUVFAgKG9iamVjdCk7CisKKwlpZiAo
aHR0cC0+cHJpdi0+bXNnKQorCQlnX29iamVjdF91bnJlZiAoaHR0cC0+cHJpdi0+bXNnKTsKKwor
CUdfT0JKRUNUX0NMQVNTIChzb3VwX3JlcXVlc3RfaHR0cF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6
ZSAob2JqZWN0KTsKK30KKworc3RhdGljIEdJbnB1dFN0cmVhbSAqCitzb3VwX3JlcXVlc3RfaHR0
cF9zZW5kIChTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKKwkJCUdDYW5jZWxsYWJsZSAg
ICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCUdFcnJvciAgICAgICAgICAgICAgKiplcnJvcikKK3sK
KwlTb3VwSFRUUElucHV0U3RyZWFtICpodHRwc3RyZWFtOworCVNvdXBSZXF1ZXN0SFRUUCAqaHR0
cCA9IFNPVVBfUkVRVUVTVF9IVFRQIChyZXF1ZXN0KTsKKworCWh0dHBzdHJlYW0gPSBzb3VwX2h0
dHBfaW5wdXRfc3RyZWFtX25ldyAoc291cF9yZXF1ZXN0X2dldF9zZXNzaW9uIChyZXF1ZXN0KSwg
aHR0cC0+cHJpdi0+bXNnKTsKKwlpZiAoIXNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZCAoaHR0
cHN0cmVhbSwgY2FuY2VsbGFibGUsIGVycm9yKSkgeworCQlnX29iamVjdF91bnJlZiAoaHR0cHN0
cmVhbSk7CisJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4gKEdJbnB1dFN0cmVhbSAqKWh0dHBz
dHJlYW07Cit9CisKKworc3RhdGljIHZvaWQKK3NlbnRfYXN5bmMgKEdPYmplY3QgKnNvdXJjZSwg
R0FzeW5jUmVzdWx0ICpyZXN1bHQsIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlTb3VwSFRUUElu
cHV0U3RyZWFtICpodHRwc3RyZWFtID0gU09VUF9IVFRQX0lOUFVUX1NUUkVBTSAoc291cmNlKTsK
KwlHU2ltcGxlQXN5bmNSZXN1bHQgKnNpbXBsZSA9IHVzZXJfZGF0YTsKKwlHRXJyb3IgKmVycm9y
ID0gTlVMTDsKKworCWlmIChzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfZmluaXNoIChodHRw
c3RyZWFtLCByZXN1bHQsICZlcnJvcikpIHsKKwkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9v
cF9yZXNfZ3BvaW50ZXIgKHNpbXBsZSwgaHR0cHN0cmVhbSwgZ19vYmplY3RfdW5yZWYpOworCX0g
ZWxzZSB7CisJCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfZnJvbV9lcnJvciAoc2ltcGxlLCBl
cnJvcik7CisJCWdfZXJyb3JfZnJlZSAoZXJyb3IpOworCQlnX29iamVjdF91bnJlZiAoaHR0cHN0
cmVhbSk7CisJfQorCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZSAoc2ltcGxlKTsKKwln
X29iamVjdF91bnJlZiAoc2ltcGxlKTsKK30KKworCit0eXBlZGVmIHN0cnVjdCB7CisJU291cFJl
cXVlc3RIVFRQICpyZXE7CisJU291cE1lc3NhZ2UgKm9yaWdpbmFsOworCUdDYW5jZWxsYWJsZSAq
Y2FuY2VsbGFibGU7CisJR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjazsKKwlncG9pbnRlciB1
c2VyX2RhdGE7Cit9IENvbmRpdGlvbmFsSGVscGVyOworCisKK3N0YXRpYyB2b2lkCitjb25kaXRp
b25hbF9nZXRfcmVhZHlfY2IgKFNvdXBTZXNzaW9uICpzZXNzaW9uLCBTb3VwTWVzc2FnZSAqbXNn
LCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJQ29uZGl0aW9uYWxIZWxwZXIgKmhlbHBlciA9IChD
b25kaXRpb25hbEhlbHBlciAqKXVzZXJfZGF0YTsKKwlHU2ltcGxlQXN5bmNSZXN1bHQgKnNpbXBs
ZTsKKwlTb3VwSFRUUElucHV0U3RyZWFtICpodHRwc3RyZWFtOworCisJc2ltcGxlID0gZ19zaW1w
bGVfYXN5bmNfcmVzdWx0X25ldyAoR19PQkpFQ1QgKGhlbHBlci0+cmVxKSwKKwkJCQkJICAgIGhl
bHBlci0+Y2FsbGJhY2ssIGhlbHBlci0+dXNlcl9kYXRhLAorCQkJCQkgICAgY29uZGl0aW9uYWxf
Z2V0X3JlYWR5X2NiKTsKKworCWlmIChtc2ctPnN0YXR1c19jb2RlID09IFNPVVBfU1RBVFVTX05P
VF9NT0RJRklFRCkgeworCQlXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlID0gKFdlYktpdFNvdXBDYWNo
ZSAqKXNvdXBfc2Vzc2lvbl9nZXRfZmVhdHVyZSAoc2Vzc2lvbiwgV0VCS0lUX1RZUEVfU09VUF9D
QUNIRSk7CisKKwkJaHR0cHN0cmVhbSA9IChTb3VwSFRUUElucHV0U3RyZWFtICopd2Via2l0X3Nv
dXBfY2FjaGVfc2VuZF9yZXNwb25zZSAoY2FjaGUsIG1zZyk7CisJCWlmIChodHRwc3RyZWFtKSB7
CisJCQljb25zdCBnY2hhciAqY29udGVudF90eXBlOworCisJCQlnX3NpbXBsZV9hc3luY19yZXN1
bHRfc2V0X29wX3Jlc19ncG9pbnRlciAoc2ltcGxlLCBodHRwc3RyZWFtLCBnX29iamVjdF91bnJl
Zik7CisKKwkJCXNvdXBfbWVzc2FnZV9nb3RfaGVhZGVycyAoaGVscGVyLT5vcmlnaW5hbCk7CisJ
CQljb250ZW50X3R5cGUgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfY29udGVudF90eXBlICht
c2ctPnJlc3BvbnNlX2hlYWRlcnMsIE5VTEwpOworCQkJc291cF9tZXNzYWdlX2NvbnRlbnRfc25p
ZmZlZCAoaGVscGVyLT5vcmlnaW5hbCwgY29udGVudF90eXBlLCBOVUxMKTsKKworCQkJZ19zaW1w
bGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlIChzaW1wbGUpOworCisJCQlzb3VwX21lc3NhZ2VfZmlu
aXNoZWQgKGhlbHBlci0+b3JpZ2luYWwpOworCisJCQlnX29iamVjdF91bnJlZiAoc2ltcGxlKTsK
KwkJfSBlbHNlIHsKKwkJCS8qIEFzayBhZ2FpbiBmb3IgdGhlIHJlc291cmNlLCBzb21laG93IHRo
ZSBjYWNoZSBjYW5ub3QgbG9jYXRlIGl0ICovCisJCQlodHRwc3RyZWFtID0gc291cF9odHRwX2lu
cHV0X3N0cmVhbV9uZXcgKHNlc3Npb24sIGhlbHBlci0+b3JpZ2luYWwpOworCQkJc291cF9odHRw
X2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jIChodHRwc3RyZWFtLCBHX1BSSU9SSVRZX0RFRkFVTFQs
CisJCQkJCQkJICAgaGVscGVyLT5jYW5jZWxsYWJsZSwgc2VudF9hc3luYywgc2ltcGxlKTsKKwkJ
fQorCX0gZWxzZSB7CisJCS8qIEl0IGlzIGluIHRoZSBjYWNoZSBidXQgaXQgd2FzIG1vZGlmaWVk
IHJlbW90ZWx5ICovCisJCWh0dHBzdHJlYW0gPSBzb3VwX2h0dHBfaW5wdXRfc3RyZWFtX25ldyAo
c2Vzc2lvbiwgaGVscGVyLT5vcmlnaW5hbCk7CisJCXNvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2Vu
ZF9hc3luYyAoaHR0cHN0cmVhbSwgR19QUklPUklUWV9ERUZBVUxULAorCQkJCQkJICAgaGVscGVy
LT5jYW5jZWxsYWJsZSwgc2VudF9hc3luYywgc2ltcGxlKTsKKwl9CisKKwlnX29iamVjdF91bnJl
ZiAoaGVscGVyLT5yZXEpOworCWdfb2JqZWN0X3VucmVmIChoZWxwZXItPm9yaWdpbmFsKTsKKwln
X3NsaWNlX2ZyZWUgKENvbmRpdGlvbmFsSGVscGVyLCBoZWxwZXIpOworfQorCit0eXBlZGVmIHN0
cnVjdCB7CisJU291cFJlcXVlc3RIVFRQICpodHRwOworCUdBc3luY1JlYWR5Q2FsbGJhY2sgY2Fs
bGJhY2s7CisJZ3BvaW50ZXIgdXNlcl9kYXRhOworfSBTZW5kQXN5bmNIZWxwZXI7CisKK3N0YXRp
YyB2b2lkIHNvdXBfcmVxdWVzdF9odHRwX3NlbmRfYXN5bmMgKFNvdXBSZXF1ZXN0ICAgICAgICAg
ICpyZXF1ZXN0LAorCQkJCQkgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJ
CQkJICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAorCQkJCQkgIGdwb2ludGVyIHVzZXJf
ZGF0YSk7CisKK3N0YXRpYyBnYm9vbGVhbgorc2VuZF9hc3luY19jYiAoZ3BvaW50ZXIgZGF0YSkK
K3sKKwlHU2ltcGxlQXN5bmNSZXN1bHQgKnNpbXBsZTsKKwlTb3VwSFRUUElucHV0U3RyZWFtICpo
dHRwc3RyZWFtOworCVNvdXBTZXNzaW9uICpzZXNzaW9uOworCVdlYktpdFNvdXBDYWNoZSAqY2Fj
aGU7CisJU2VuZEFzeW5jSGVscGVyICpoZWxwZXIgPSAoU2VuZEFzeW5jSGVscGVyICopZGF0YTsK
KworCXNlc3Npb24gPSBzb3VwX3JlcXVlc3RfZ2V0X3Nlc3Npb24gKFNPVVBfUkVRVUVTVCAoaGVs
cGVyLT5odHRwKSk7CisJY2FjaGUgPSAoV2ViS2l0U291cENhY2hlICopc291cF9zZXNzaW9uX2dl
dF9mZWF0dXJlIChzZXNzaW9uLCBXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFKTsKKworCWh0dHBzdHJl
YW0gPSAoU291cEhUVFBJbnB1dFN0cmVhbSAqKXdlYmtpdF9zb3VwX2NhY2hlX3NlbmRfcmVzcG9u
c2UgKGNhY2hlLCBTT1VQX01FU1NBR0UgKGhlbHBlci0+aHR0cC0+cHJpdi0+bXNnKSk7CisKKwlp
ZiAoaHR0cHN0cmVhbSkgeworCQljb25zdCBnY2hhciAqY29udGVudF90eXBlOworCisJCXNpbXBs
ZSA9IGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcgKEdfT0JKRUNUIChoZWxwZXItPmh0dHApLAor
CQkJCQkJICAgIGhlbHBlci0+Y2FsbGJhY2ssIGhlbHBlci0+dXNlcl9kYXRhLAorCQkJCQkJICAg
IHNvdXBfcmVxdWVzdF9odHRwX3NlbmRfYXN5bmMpOworCQlnX3NpbXBsZV9hc3luY19yZXN1bHRf
c2V0X29wX3Jlc19ncG9pbnRlciAoc2ltcGxlLCBodHRwc3RyZWFtLCBnX29iamVjdF91bnJlZik7
CisKKwkJLyogVXBkYXRlIG1lc3NhZ2Ugc3RhdHVzICovCisJCXNvdXBfbWVzc2FnZV9zZXRfc3Rh
dHVzIChoZWxwZXItPmh0dHAtPnByaXYtPm1zZywgU09VUF9TVEFUVVNfT0spOworCisJCS8qIElz
c3VlIHNpZ25hbHMgICovCisJCXNvdXBfbWVzc2FnZV9nb3RfaGVhZGVycyAoaGVscGVyLT5odHRw
LT5wcml2LT5tc2cpOworCQljb250ZW50X3R5cGUgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRf
Y29udGVudF90eXBlIChoZWxwZXItPmh0dHAtPnByaXYtPm1zZy0+cmVzcG9uc2VfaGVhZGVycywg
TlVMTCk7CisJCXNvdXBfbWVzc2FnZV9jb250ZW50X3NuaWZmZWQgKGhlbHBlci0+aHR0cC0+cHJp
di0+bXNnLCBjb250ZW50X3R5cGUsIE5VTEwpOworCisJCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9j
b21wbGV0ZSAoc2ltcGxlKTsKKworCQlzb3VwX21lc3NhZ2VfZmluaXNoZWQgKGhlbHBlci0+aHR0
cC0+cHJpdi0+bXNnKTsKKworCQlnX29iamVjdF91bnJlZiAoc2ltcGxlKTsKKwl9CisKKwlnX3Ns
aWNlX2ZyZWUgKFNlbmRBc3luY0hlbHBlciwgaGVscGVyKTsKKworCXJldHVybiBGQUxTRTsKK30K
Kworc3RhdGljIHZvaWQKK3NvdXBfcmVxdWVzdF9odHRwX3NlbmRfYXN5bmMgKFNvdXBSZXF1ZXN0
ICAgICAgICAgICpyZXF1ZXN0LAorCQkJICAgICAgR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNl
bGxhYmxlLAorCQkJICAgICAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKKwkJCSAgICAg
IGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlTb3VwUmVxdWVzdEhUVFAgKmh0dHAgPSBTT1VQX1JF
UVVFU1RfSFRUUCAocmVxdWVzdCk7CisJU291cEhUVFBJbnB1dFN0cmVhbSAqaHR0cHN0cmVhbTsK
KwlHU2ltcGxlQXN5bmNSZXN1bHQgKnNpbXBsZTsKKwlTb3VwU2Vzc2lvbiAqc2Vzc2lvbjsKKwlX
ZWJLaXRTb3VwQ2FjaGUgKmNhY2hlOworCisJc2Vzc2lvbiA9IHNvdXBfcmVxdWVzdF9nZXRfc2Vz
c2lvbiAocmVxdWVzdCk7CisJY2FjaGUgPSAoV2ViS2l0U291cENhY2hlICopc291cF9zZXNzaW9u
X2dldF9mZWF0dXJlIChzZXNzaW9uLCBXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFKTsKKworCWlmIChj
YWNoZSkgeworCQlXZWJLaXRTb3VwQ2FjaGVSZXNwb25zZSByZXNwb25zZTsKKworCQlyZXNwb25z
ZSA9IHdlYmtpdF9zb3VwX2NhY2hlX2hhc19yZXNwb25zZSAoY2FjaGUsIGh0dHAtPnByaXYtPm1z
Zyk7CisJCWlmIChyZXNwb25zZSA9PSBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9GUkVTSCkg
eworCQkJLyogRG8gcmV0dXJuIHRoZSBzdHJlYW0gYXN5bmNocm9ub3VzbHkgYXMgaW4KKwkJCSAg
IHRoZSBvdGhlciBjYXNlcy4gSXQncyBub3QgZW5vdWdoIHRvIHVzZQorCQkJICAgZ19zaW1wbGVf
YXN5bmNfcmVzdWx0X2NvbXBsZXRlX2luX2lkbGUgYXMKKwkJCSAgIHRoZSBzaWduYWxzIG11c3Qg
YmUgYWxzbyBlbWl0dGVkCisJCQkgICBhc3luY2hyb25vdXNseSAqLworCQkJU2VuZEFzeW5jSGVs
cGVyICpoZWxwZXIgPSBnX3NsaWNlX25ldyAoU2VuZEFzeW5jSGVscGVyKTsKKwkJCWhlbHBlci0+
aHR0cCA9IGh0dHA7CisJCQloZWxwZXItPmNhbGxiYWNrID0gY2FsbGJhY2s7CisJCQloZWxwZXIt
PnVzZXJfZGF0YSA9IHVzZXJfZGF0YTsKKwkJCWdfdGltZW91dF9hZGQgKDAsIHNlbmRfYXN5bmNf
Y2IsIGhlbHBlcik7CisJCQlyZXR1cm47CisJCX0gZWxzZSBpZiAocmVzcG9uc2UgPT0gV0VCS0lU
X1NPVVBfQ0FDSEVfUkVTUE9OU0VfTkVFRFNfVkFMSURBVElPTikgeworCQkJU291cE1lc3NhZ2Ug
KmNvbmRpdGlvbmFsX21zZzsKKwkJCUNvbmRpdGlvbmFsSGVscGVyICpoZWxwZXI7CisKKwkJCWNv
bmRpdGlvbmFsX21zZyA9IHdlYmtpdF9zb3VwX2NhY2hlX2dlbmVyYXRlX2NvbmRpdGlvbmFsX3Jl
cXVlc3QgKGNhY2hlLCBodHRwLT5wcml2LT5tc2cpOworCisJCQloZWxwZXIgPSBnX3NsaWNlX25l
dzAgKENvbmRpdGlvbmFsSGVscGVyKTsKKwkJCWhlbHBlci0+cmVxID0gZ19vYmplY3RfcmVmICho
dHRwKTsKKwkJCWhlbHBlci0+b3JpZ2luYWwgPSBnX29iamVjdF9yZWYgKGh0dHAtPnByaXYtPm1z
Zyk7CisJCQloZWxwZXItPmNhbmNlbGxhYmxlID0gY2FuY2VsbGFibGU7CisJCQloZWxwZXItPmNh
bGxiYWNrID0gY2FsbGJhY2s7CisJCQloZWxwZXItPnVzZXJfZGF0YSA9IHVzZXJfZGF0YTsKKwkJ
CXNvdXBfc2Vzc2lvbl9xdWV1ZV9tZXNzYWdlIChzZXNzaW9uLCBjb25kaXRpb25hbF9tc2csCisJ
CQkJCQkgICAgY29uZGl0aW9uYWxfZ2V0X3JlYWR5X2NiLAorCQkJCQkJICAgIGhlbHBlcik7CisJ
CQlyZXR1cm47CisJCX0KKwl9CisKKwlzaW1wbGUgPSBnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3
IChHX09CSkVDVCAoaHR0cCksCisJCQkJCSAgICBjYWxsYmFjaywgdXNlcl9kYXRhLAorCQkJCQkg
ICAgc291cF9yZXF1ZXN0X2h0dHBfc2VuZF9hc3luYyk7CisJaHR0cHN0cmVhbSA9IHNvdXBfaHR0
cF9pbnB1dF9zdHJlYW1fbmV3IChzb3VwX3JlcXVlc3RfZ2V0X3Nlc3Npb24gKHJlcXVlc3QpLAor
CQkJCQkJIGh0dHAtPnByaXYtPm1zZyk7CisJc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2Fz
eW5jIChodHRwc3RyZWFtLCBHX1BSSU9SSVRZX0RFRkFVTFQsCisJCQkJCSAgIGNhbmNlbGxhYmxl
LCBzZW50X2FzeW5jLCBzaW1wbGUpOworfQorCitzdGF0aWMgR0lucHV0U3RyZWFtICoKK3NvdXBf
cmVxdWVzdF9odHRwX3NlbmRfZmluaXNoIChTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwK
KwkJCSAgICAgICBHQXN5bmNSZXN1bHQgICAgICAgICAqcmVzdWx0LAorCQkJICAgICAgIEdFcnJv
ciAgICAgICAgICAgICAgKiplcnJvcikKK3sKKwlHU2ltcGxlQXN5bmNSZXN1bHQgKnNpbXBsZTsK
KworCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnX3NpbXBsZV9hc3luY19yZXN1bHRfaXNfdmFsaWQg
KHJlc3VsdCwgR19PQkpFQ1QgKHJlcXVlc3QpLCBzb3VwX3JlcXVlc3RfaHR0cF9zZW5kX2FzeW5j
KSB8fCBnX3NpbXBsZV9hc3luY19yZXN1bHRfaXNfdmFsaWQgKHJlc3VsdCwgR19PQkpFQ1QgKHJl
cXVlc3QpLCBjb25kaXRpb25hbF9nZXRfcmVhZHlfY2IpLCBOVUxMKTsKKworCXNpbXBsZSA9IEdf
U0lNUExFX0FTWU5DX1JFU1VMVCAocmVzdWx0KTsKKwlpZiAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0
X3Byb3BhZ2F0ZV9lcnJvciAoc2ltcGxlLCBlcnJvcikpCisJCXJldHVybiBOVUxMOworCXJldHVy
biBnX29iamVjdF9yZWYgKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfb3BfcmVzX2dwb2ludGVy
IChzaW1wbGUpKTsKK30KKworc3RhdGljIGdvZmZzZXQKK3NvdXBfcmVxdWVzdF9odHRwX2dldF9j
b250ZW50X2xlbmd0aCAoU291cFJlcXVlc3QgKnJlcXVlc3QpCit7CisJU291cFJlcXVlc3RIVFRQ
ICpodHRwID0gU09VUF9SRVFVRVNUX0hUVFAgKHJlcXVlc3QpOworCisJcmV0dXJuIHNvdXBfbWVz
c2FnZV9oZWFkZXJzX2dldF9jb250ZW50X2xlbmd0aCAoaHR0cC0+cHJpdi0+bXNnLT5yZXNwb25z
ZV9oZWFkZXJzKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorc291cF9yZXF1ZXN0X2h0dHBf
Z2V0X2NvbnRlbnRfdHlwZSAoU291cFJlcXVlc3QgKnJlcXVlc3QpCit7CisJU291cFJlcXVlc3RI
VFRQICpodHRwID0gU09VUF9SRVFVRVNUX0hUVFAgKHJlcXVlc3QpOworCisJcmV0dXJuIHNvdXBf
bWVzc2FnZV9oZWFkZXJzX2dldF9jb250ZW50X3R5cGUgKGh0dHAtPnByaXYtPm1zZy0+cmVzcG9u
c2VfaGVhZGVycywgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkCitzb3VwX3JlcXVlc3RfaHR0cF9j
bGFzc19pbml0IChTb3VwUmVxdWVzdEhUVFBDbGFzcyAqcmVxdWVzdF9odHRwX2NsYXNzKQorewor
CUdPYmplY3RDbGFzcyAqb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKHJlcXVlc3RfaHR0
cF9jbGFzcyk7CisJU291cFJlcXVlc3RDbGFzcyAqcmVxdWVzdF9jbGFzcyA9CisJCVNPVVBfUkVR
VUVTVF9DTEFTUyAocmVxdWVzdF9odHRwX2NsYXNzKTsKKworCWdfdHlwZV9jbGFzc19hZGRfcHJp
dmF0ZSAocmVxdWVzdF9odHRwX2NsYXNzLCBzaXplb2YgKFNvdXBSZXF1ZXN0SFRUUFByaXZhdGUp
KTsKKworCW9iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBzb3VwX3JlcXVlc3RfaHR0cF9maW5hbGl6
ZTsKKworCXJlcXVlc3RfY2xhc3MtPmNoZWNrX3VyaSA9IHNvdXBfcmVxdWVzdF9odHRwX2NoZWNr
X3VyaTsKKwlyZXF1ZXN0X2NsYXNzLT5zZW5kID0gc291cF9yZXF1ZXN0X2h0dHBfc2VuZDsKKwly
ZXF1ZXN0X2NsYXNzLT5zZW5kX2FzeW5jID0gc291cF9yZXF1ZXN0X2h0dHBfc2VuZF9hc3luYzsK
KwlyZXF1ZXN0X2NsYXNzLT5zZW5kX2ZpbmlzaCA9IHNvdXBfcmVxdWVzdF9odHRwX3NlbmRfZmlu
aXNoOworCXJlcXVlc3RfY2xhc3MtPmdldF9jb250ZW50X2xlbmd0aCA9IHNvdXBfcmVxdWVzdF9o
dHRwX2dldF9jb250ZW50X2xlbmd0aDsKKwlyZXF1ZXN0X2NsYXNzLT5nZXRfY29udGVudF90eXBl
ID0gc291cF9yZXF1ZXN0X2h0dHBfZ2V0X2NvbnRlbnRfdHlwZTsKK30KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRwLmggYi9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtaHR0cC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMzJmMGIKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtaHR0
cC5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwg
SW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFNPVVBfUkVR
VUVTVF9IVFRQX0gKKyNkZWZpbmUgU09VUF9SRVFVRVNUX0hUVFBfSCAxCisKKyNpbmNsdWRlICJz
b3VwLXJlcXVlc3QuaCIKKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFNPVVBfVFlQRV9SRVFV
RVNUX0hUVFAgICAgICAgICAgICAoc291cF9yZXF1ZXN0X2h0dHBfZ2V0X3R5cGUgKCkpCisjZGVm
aW5lIFNPVVBfUkVRVUVTVF9IVFRQKG9iamVjdCkgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX0NBU1QgKChvYmplY3QpLCBTT1VQX1RZUEVfUkVRVUVTVF9IVFRQLCBTb3VwUmVxdWVzdEhU
VFApKQorI2RlZmluZSBTT1VQX1JFUVVFU1RfSFRUUF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9D
SEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBTT1VQX1RZUEVfUkVRVUVTVF9IVFRQLCBTb3VwUmVx
dWVzdEhUVFBDbGFzcykpCisjZGVmaW5lIFNPVVBfSVNfUkVRVUVTVF9IVFRQKG9iamVjdCkgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmplY3QpLCBTT1VQX1RZUEVfUkVRVUVT
VF9IVFRQKSkKKyNkZWZpbmUgU09VUF9JU19SRVFVRVNUX0hUVFBfQ0xBU1Moa2xhc3MpIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgU09VUF9UWVBFX1JFUVVFU1RfSFRUUCkpCisj
ZGVmaW5lIFNPVVBfUkVRVUVTVF9IVFRQX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNF
X0dFVF9DTEFTUyAoKG9iaiksIFNPVVBfVFlQRV9SRVFVRVNUX0hUVFAsIFNvdXBSZXF1ZXN0SFRU
UENsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1NvdXBSZXF1ZXN0SFRUUFByaXZhdGUgU291cFJl
cXVlc3RIVFRQUHJpdmF0ZTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCVNvdXBSZXF1ZXN0IHBhcmVu
dDsKKworCVNvdXBSZXF1ZXN0SFRUUFByaXZhdGUgKnByaXY7Cit9IFNvdXBSZXF1ZXN0SFRUUDsK
KwordHlwZWRlZiBzdHJ1Y3QgeworCVNvdXBSZXF1ZXN0Q2xhc3MgcGFyZW50OworfSBTb3VwUmVx
dWVzdEhUVFBDbGFzczsKKworR1R5cGUgc291cF9yZXF1ZXN0X2h0dHBfZ2V0X3R5cGUgKHZvaWQp
OworCitTb3VwTWVzc2FnZSAgKnNvdXBfcmVxdWVzdF9odHRwX2dldF9tZXNzYWdlIChTb3VwUmVx
dWVzdEhUVFAgKmh0dHApOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogU09VUF9SRVFVRVNU
X0hUVFBfSCAqLwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2Fj
aGUvc291cC1yZXF1ZXN0LmMgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9z
b3VwLXJlcXVlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmE3YmQz
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUv
c291cC1yZXF1ZXN0LmMKQEAgLTAsMCArMSwyNzkgQEAKKy8qCisgKiBzb3VwLXJlcXVlc3QuYzog
UHJvdG9jb2wtaW5kZXBlbmRlbnQgc3RyZWFtaW5nIHJlcXVlc3QgaW50ZXJmYWNlCisgKgorICog
Q29weXJpZ2h0IChDKSAyMDA5IFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwg
SWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNl
bmRpZgorCisjaW5jbHVkZSA8Z2xpYi9naTE4bi5oPgorCisjaW5jbHVkZSAic291cC1yZXF1ZXN0
LmgiCisjaW5jbHVkZSAic291cC1yZXF1ZXN0ZXIuaCIKKworLyoqCisgKiBTRUNUSU9OOnNvdXAt
cmVxdWVzdAorICogQHNob3J0X2Rlc2NyaXB0aW9uOiBQcm90b2NvbC1pbmRlcGVuZGVudCBzdHJl
YW1pbmcgcmVxdWVzdCBpbnRlcmZhY2UKKyAqCisgKiBGSVhNRQorICoqLworCisvKioKKyAqIFNv
dXBSZXF1ZXN0OgorICoKKyAqIEZJWE1FCisgKgorICogU2luY2U6IDIuMzAKKyAqKi8KKworc3Rh
dGljIHZvaWQgc291cF9yZXF1ZXN0X2luaXRhYmxlX2ludGVyZmFjZV9pbml0IChHSW5pdGFibGVJ
ZmFjZSAqaW5pdGFibGVfaW50ZXJmYWNlKTsKKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKFNv
dXBSZXF1ZXN0LCBzb3VwX3JlcXVlc3QsIEdfVFlQRV9PQkpFQ1QsCisJCQkgR19JTVBMRU1FTlRf
SU5URVJGQUNFIChHX1RZUEVfSU5JVEFCTEUsCisJCQkJCQlzb3VwX3JlcXVlc3RfaW5pdGFibGVf
aW50ZXJmYWNlX2luaXQpKQorCitlbnVtIHsKKwlQUk9QXzAsCisJUFJPUF9VUkksCisJUFJPUF9T
RVNTSU9OCit9OworCitzdHJ1Y3QgX1NvdXBSZXF1ZXN0UHJpdmF0ZSB7CisJU291cFVSSSAqdXJp
OworCVNvdXBTZXNzaW9uICpzZXNzaW9uOworfTsKKworc3RhdGljIHZvaWQKK3NvdXBfcmVxdWVz
dF9pbml0IChTb3VwUmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlyZXF1ZXN0LT5wcml2ID0gR19UWVBF
X0lOU1RBTkNFX0dFVF9QUklWQVRFIChyZXF1ZXN0LCBTT1VQX1RZUEVfUkVRVUVTVCwgU291cFJl
cXVlc3RQcml2YXRlKTsKK30KKworc3RhdGljIHZvaWQKK3NvdXBfcmVxdWVzdF9maW5hbGl6ZSAo
R09iamVjdCAqb2JqZWN0KQoreworCVNvdXBSZXF1ZXN0ICpyZXF1ZXN0ID0gU09VUF9SRVFVRVNU
IChvYmplY3QpOworCisJaWYgKHJlcXVlc3QtPnByaXYtPnVyaSkKKwkJc291cF91cmlfZnJlZSAo
cmVxdWVzdC0+cHJpdi0+dXJpKTsKKwlpZiAocmVxdWVzdC0+cHJpdi0+c2Vzc2lvbikKKwkJZ19v
YmplY3RfdW5yZWYgKHJlcXVlc3QtPnByaXYtPnNlc3Npb24pOworCisJR19PQkpFQ1RfQ0xBU1Mg
KHNvdXBfcmVxdWVzdF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKK30KKworc3Rh
dGljIHZvaWQKK3NvdXBfcmVxdWVzdF9zZXRfcHJvcGVydHkgKEdPYmplY3QgICAgICAqb2JqZWN0
LAorCQkJICAgZ3VpbnQgcHJvcF9pZCwKKwkJCSAgIGNvbnN0IEdWYWx1ZSAqdmFsdWUsCisJCQkg
ICBHUGFyYW1TcGVjICAgKnBzcGVjKQoreworCVNvdXBSZXF1ZXN0ICpyZXF1ZXN0ID0gU09VUF9S
RVFVRVNUIChvYmplY3QpOworCisJc3dpdGNoIChwcm9wX2lkKSB7CisJCWNhc2UgUFJPUF9VUkk6
CisJCQlpZiAocmVxdWVzdC0+cHJpdi0+dXJpKQorCQkJCXNvdXBfdXJpX2ZyZWUgKHJlcXVlc3Qt
PnByaXYtPnVyaSk7CisJCQlyZXF1ZXN0LT5wcml2LT51cmkgPSBnX3ZhbHVlX2R1cF9ib3hlZCAo
dmFsdWUpOworCQkJYnJlYWs7CisJCWNhc2UgUFJPUF9TRVNTSU9OOgorCQkJaWYgKHJlcXVlc3Qt
PnByaXYtPnNlc3Npb24pCisJCQkJZ19vYmplY3RfdW5yZWYgKHJlcXVlc3QtPnByaXYtPnNlc3Np
b24pOworCQkJcmVxdWVzdC0+cHJpdi0+c2Vzc2lvbiA9IGdfdmFsdWVfZHVwX29iamVjdCAodmFs
dWUpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJP
UEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworCQkJYnJlYWs7CisJfQorfQorCitz
dGF0aWMgdm9pZAorc291cF9yZXF1ZXN0X2dldF9wcm9wZXJ0eSAoR09iamVjdCAgICAqb2JqZWN0
LAorCQkJICAgZ3VpbnQgcHJvcF9pZCwKKwkJCSAgIEdWYWx1ZSAgICAgKnZhbHVlLAorCQkJICAg
R1BhcmFtU3BlYyAqcHNwZWMpCit7CisJU291cFJlcXVlc3QgKnJlcXVlc3QgPSBTT1VQX1JFUVVF
U1QgKG9iamVjdCk7CisKKwlzd2l0Y2ggKHByb3BfaWQpIHsKKwkJY2FzZSBQUk9QX1VSSToKKwkJ
CWdfdmFsdWVfc2V0X2JveGVkICh2YWx1ZSwgcmVxdWVzdC0+cHJpdi0+dXJpKTsKKwkJCWJyZWFr
OworCQljYXNlIFBST1BfU0VTU0lPTjoKKwkJCWdfdmFsdWVfc2V0X29iamVjdCAodmFsdWUsIHJl
cXVlc3QtPnByaXYtPnNlc3Npb24pOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlHX09CSkVD
VF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworCQkJ
YnJlYWs7CisJfQorfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3NvdXBfcmVxdWVzdF9pbml0YWJsZV9p
bml0IChHSW5pdGFibGUgICAgICppbml0YWJsZSwKKwkJCSAgICBHQ2FuY2VsbGFibGUgICpjYW5j
ZWxsYWJsZSwKKwkJCSAgICBHRXJyb3IgICAgICAgKiplcnJvcikKK3sKKwlTb3VwUmVxdWVzdCAq
cmVxdWVzdCA9IFNPVVBfUkVRVUVTVCAoaW5pdGFibGUpOworCWdib29sZWFuIG9rOworCisJaWYg
KCFyZXF1ZXN0LT5wcml2LT51cmkpIHsKKwkJZ19zZXRfZXJyb3IgKGVycm9yLCBTT1VQX0VSUk9S
LCBTT1VQX0VSUk9SX0JBRF9VUkksCisJCQkgICAgIF8gKCJObyBVUkkgcHJvdmlkZWQiKSk7CisJ
CXJldHVybiBGQUxTRTsKKwl9CisKKwlvayA9IFNPVVBfUkVRVUVTVF9HRVRfQ0xBU1MgKGluaXRh
YmxlKS0+CisJICAgICBjaGVja191cmkgKHJlcXVlc3QsIHJlcXVlc3QtPnByaXYtPnVyaSwgZXJy
b3IpOworCisJaWYgKCFvayAmJiBlcnJvcikgeworCQljaGFyICp1cmlfc3RyaW5nID0gc291cF91
cmlfdG9fc3RyaW5nIChyZXF1ZXN0LT5wcml2LT51cmksIEZBTFNFKTsKKwkJZ19zZXRfZXJyb3Ig
KGVycm9yLCBTT1VQX0VSUk9SLCBTT1VQX0VSUk9SX0JBRF9VUkksCisJCQkgICAgIF8gKCJJbnZh
bGlkICclcycgVVJJOiAlcyIpLAorCQkJICAgICByZXF1ZXN0LT5wcml2LT51cmktPnNjaGVtZSwK
KwkJCSAgICAgdXJpX3N0cmluZyk7CisJCWdfZnJlZSAodXJpX3N0cmluZyk7CisJfQorCisJcmV0
dXJuIG9rOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3NvdXBfcmVxdWVzdF9kZWZhdWx0X2NoZWNr
X3VyaSAoU291cFJlcXVlc3QgICpyZXF1ZXN0LAorCQkJCVNvdXBVUkkgICAgICAqdXJpLAorCQkJ
CUdFcnJvciAgICAgICoqZXJyb3IpCit7CisJcmV0dXJuIFRSVUU7Cit9CisKKy8qIERlZmF1bHQg
aW1wbGVtZW50YXRpb246IGFzc3VtZSB0aGUgc3luYyBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IGJs
b2NrICovCitzdGF0aWMgdm9pZAorc291cF9yZXF1ZXN0X2RlZmF1bHRfc2VuZF9hc3luYyAoU291
cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCisJCQkJIEdDYW5jZWxsYWJsZSAgICAgICAgICpj
YW5jZWxsYWJsZSwKKwkJCQkgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKKwkJCQkgZ3Bv
aW50ZXIgdXNlcl9kYXRhKQoreworCUdTaW1wbGVBc3luY1Jlc3VsdCAqc2ltcGxlOworCisJc2lt
cGxlID0gZ19zaW1wbGVfYXN5bmNfcmVzdWx0X25ldyAoR19PQkpFQ1QgKHJlcXVlc3QpLAorCQkJ
CQkgICAgY2FsbGJhY2ssIHVzZXJfZGF0YSwKKwkJCQkJICAgIHNvdXBfcmVxdWVzdF9kZWZhdWx0
X3NlbmRfYXN5bmMpOworCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZV9pbl9pZGxlIChz
aW1wbGUpOworCWdfb2JqZWN0X3VucmVmIChzaW1wbGUpOworfQorCitzdGF0aWMgR0lucHV0U3Ry
ZWFtICoKK3NvdXBfcmVxdWVzdF9kZWZhdWx0X3NlbmRfZmluaXNoIChTb3VwUmVxdWVzdCAgICAg
ICAgICAqcmVxdWVzdCwKKwkJCQkgIEdBc3luY1Jlc3VsdCAgICAgICAgICpyZXN1bHQsCisJCQkJ
ICBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpCit7CisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwg
KGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9pc192YWxpZCAocmVzdWx0LCBHX09CSkVDVCAocmVxdWVz
dCksIHNvdXBfcmVxdWVzdF9kZWZhdWx0X3NlbmRfYXN5bmMpLCBOVUxMKTsKKworCXJldHVybiBz
b3VwX3JlcXVlc3Rfc2VuZCAocmVxdWVzdCwgTlVMTCwgZXJyb3IpOworfQorCitHSW5wdXRTdHJl
YW0gKgorc291cF9yZXF1ZXN0X3NlbmQgKFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAor
CQkgICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCSAgIEdFcnJvciAgICAg
ICAgICAgICAgKiplcnJvcikKK3sKKwlyZXR1cm4gU09VUF9SRVFVRVNUX0dFVF9DTEFTUyAocmVx
dWVzdCktPgorCSAgICAgICBzZW5kIChyZXF1ZXN0LCBjYW5jZWxsYWJsZSwgZXJyb3IpOworfQor
Cit2b2lkCitzb3VwX3JlcXVlc3Rfc2VuZF9hc3luYyAoU291cFJlcXVlc3QgICAgICAgICAgKnJl
cXVlc3QsCisJCQkgR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJIEdBc3lu
Y1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCisJCQkgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCVNP
VVBfUkVRVUVTVF9HRVRfQ0xBU1MgKHJlcXVlc3QpLT4KKwlzZW5kX2FzeW5jIChyZXF1ZXN0LCBj
YW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJfZGF0YSk7Cit9CisKK0dJbnB1dFN0cmVhbSAqCitz
b3VwX3JlcXVlc3Rfc2VuZF9maW5pc2ggKFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAor
CQkJICBHQXN5bmNSZXN1bHQgICAgICAgICAqcmVzdWx0LAorCQkJICBHRXJyb3IgICAgICAgICAg
ICAgICoqZXJyb3IpCit7CisJcmV0dXJuIFNPVVBfUkVRVUVTVF9HRVRfQ0xBU1MgKHJlcXVlc3Qp
LT4KKwkgICAgICAgc2VuZF9maW5pc2ggKHJlcXVlc3QsIHJlc3VsdCwgZXJyb3IpOworfQorCitz
dGF0aWMgdm9pZAorc291cF9yZXF1ZXN0X2NsYXNzX2luaXQgKFNvdXBSZXF1ZXN0Q2xhc3MgKnJl
cXVlc3RfY2xhc3MpCit7CisJR09iamVjdENsYXNzICpvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9D
TEFTUyAocmVxdWVzdF9jbGFzcyk7CisKKwlnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUgKHJlcXVl
c3RfY2xhc3MsIHNpemVvZiAoU291cFJlcXVlc3RQcml2YXRlKSk7CisKKwlyZXF1ZXN0X2NsYXNz
LT5jaGVja191cmkgPSBzb3VwX3JlcXVlc3RfZGVmYXVsdF9jaGVja191cmk7CisJcmVxdWVzdF9j
bGFzcy0+c2VuZF9hc3luYyA9IHNvdXBfcmVxdWVzdF9kZWZhdWx0X3NlbmRfYXN5bmM7CisJcmVx
dWVzdF9jbGFzcy0+c2VuZF9maW5pc2ggPSBzb3VwX3JlcXVlc3RfZGVmYXVsdF9zZW5kX2Zpbmlz
aDsKKworCW9iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBzb3VwX3JlcXVlc3RfZmluYWxpemU7CisJ
b2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSBzb3VwX3JlcXVlc3Rfc2V0X3Byb3BlcnR5Owor
CW9iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gc291cF9yZXF1ZXN0X2dldF9wcm9wZXJ0eTsK
KworCWdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKAorCQlvYmplY3RfY2xhc3MsIFBS
T1BfVVJJLAorCQlnX3BhcmFtX3NwZWNfYm94ZWQgKFNPVVBfUkVRVUVTVF9VUkksCisJCQkJICAg
ICJVUkkiLAorCQkJCSAgICAiVGhlIHJlcXVlc3QgVVJJIiwKKwkJCQkgICAgU09VUF9UWVBFX1VS
SSwKKwkJCQkgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSk7
CisJZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoCisJCW9iamVjdF9jbGFzcywgUFJP
UF9TRVNTSU9OLAorCQlnX3BhcmFtX3NwZWNfb2JqZWN0IChTT1VQX1JFUVVFU1RfU0VTU0lPTiwK
KwkJCQkgICAgICJTZXNzaW9uIiwKKwkJCQkgICAgICJUaGUgcmVxdWVzdCdzIHNlc3Npb24iLAor
CQkJCSAgICAgU09VUF9UWVBFX1NFU1NJT04sCisJCQkJICAgICBHX1BBUkFNX1JFQURXUklURSB8
IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKTsKK30KKworc3RhdGljIHZvaWQKK3NvdXBfcmVxdWVz
dF9pbml0YWJsZV9pbnRlcmZhY2VfaW5pdCAoR0luaXRhYmxlSWZhY2UgKmluaXRhYmxlX2ludGVy
ZmFjZSkKK3sKKwlpbml0YWJsZV9pbnRlcmZhY2UtPmluaXQgPSBzb3VwX3JlcXVlc3RfaW5pdGFi
bGVfaW5pdDsKK30KKworU291cFVSSSAqCitzb3VwX3JlcXVlc3RfZ2V0X3VyaSAoU291cFJlcXVl
c3QgKnJlcXVlc3QpCit7CisJcmV0dXJuIHJlcXVlc3QtPnByaXYtPnVyaTsKK30KKworU291cFNl
c3Npb24gKgorc291cF9yZXF1ZXN0X2dldF9zZXNzaW9uIChTb3VwUmVxdWVzdCAqcmVxdWVzdCkK
K3sKKwlyZXR1cm4gcmVxdWVzdC0+cHJpdi0+c2Vzc2lvbjsKK30KKworZ29mZnNldAorc291cF9y
ZXF1ZXN0X2dldF9jb250ZW50X2xlbmd0aCAoU291cFJlcXVlc3QgKnJlcXVlc3QpCit7CisJcmV0
dXJuIFNPVVBfUkVRVUVTVF9HRVRfQ0xBU1MgKHJlcXVlc3QpLT5nZXRfY29udGVudF9sZW5ndGgg
KHJlcXVlc3QpOworfQorCitjb25zdCBjaGFyICoKK3NvdXBfcmVxdWVzdF9nZXRfY29udGVudF90
eXBlIChTb3VwUmVxdWVzdCAgKnJlcXVlc3QpCit7CisJcmV0dXJuIFNPVVBfUkVRVUVTVF9HRVRf
Q0xBU1MgKHJlcXVlc3QpLT5nZXRfY29udGVudF90eXBlIChyZXF1ZXN0KTsKK30KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5oIGIv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI1MGFjMgotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5oCkBAIC0w
LDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwgSW5jLgorICog
Q29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFNPVVBfUkVRVUVTVF9ICisj
ZGVmaW5lIFNPVVBfUkVRVUVTVF9IIDEKKworI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorI2lu
Y2x1ZGUgPGdpby9naW8uaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFNPVVBfVFlQRV9S
RVFVRVNUICAgICAgICAgICAgKHNvdXBfcmVxdWVzdF9nZXRfdHlwZSAoKSkKKyNkZWZpbmUgU09V
UF9SRVFVRVNUKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChv
YmopLCBTT1VQX1RZUEVfUkVRVUVTVCwgU291cFJlcXVlc3QpKQorI2RlZmluZSBTT1VQX1JFUVVF
U1RfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgU09V
UF9UWVBFX1JFUVVFU1QsIFNvdXBSZXF1ZXN0Q2xhc3MpKQorI2RlZmluZSBTT1VQX0lTX1JFUVVF
U1Qob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIFNPVVBf
VFlQRV9SRVFVRVNUKSkKKyNkZWZpbmUgU09VUF9JU19SRVFVRVNUX0NMQVNTKGtsYXNzKSAoR19U
WVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIFNPVVBfVFlQRV9SRVFVRVNUKSkKKyNkZWZp
bmUgU09VUF9SRVFVRVNUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFT
UyAoKG9iaiksIFNPVVBfVFlQRV9SRVFVRVNULCBTb3VwUmVxdWVzdENsYXNzKSkKKwordHlwZWRl
ZiBzdHJ1Y3QgX1NvdXBSZXF1ZXN0IFNvdXBSZXF1ZXN0OwordHlwZWRlZiBzdHJ1Y3QgX1NvdXBS
ZXF1ZXN0UHJpdmF0ZSBTb3VwUmVxdWVzdFByaXZhdGU7Cit0eXBlZGVmIHN0cnVjdCBfU291cFJl
cXVlc3RDbGFzcyBTb3VwUmVxdWVzdENsYXNzOworCitzdHJ1Y3QgX1NvdXBSZXF1ZXN0IHsKKwlH
T2JqZWN0IHBhcmVudDsKKworCVNvdXBSZXF1ZXN0UHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVj
dCBfU291cFJlcXVlc3RDbGFzcyB7CisJR09iamVjdENsYXNzIHBhcmVudDsKKworCWdib29sZWFu
ICgqY2hlY2tfdXJpKShTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxX2Jhc2UsCisJCQkgICAgICBT
b3VwVVJJICAgICAgICAgICAgICAqdXJpLAorCQkJICAgICAgR0Vycm9yICAgICAgICAgICAgICAq
KmVycm9yKTsKKworCUdJbnB1dFN0cmVhbSAqICgqc2VuZCkoU291cFJlcXVlc3QgICAgICAgICAg
KnJlcXVlc3QsCisJCQkgICAgICAgR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAor
CQkJICAgICAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcik7CisJdm9pZCAoKnNlbmRfYXN5
bmMpKFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAorCQkJICAgR0NhbmNlbGxhYmxlICAg
ICAgICAgKmNhbmNlbGxhYmxlLAorCQkJICAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywK
KwkJCSAgIGdwb2ludGVyIHVzZXJfZGF0YSk7CisJR0lucHV0U3RyZWFtICogKCpzZW5kX2Zpbmlz
aCkoU291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCisJCQkJICAgICAgR0FzeW5jUmVzdWx0
ICAgICAgICAgKnJlc3VsdCwKKwkJCQkgICAgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3Ip
OworCisJZ29mZnNldCAoKmdldF9jb250ZW50X2xlbmd0aCkoU291cFJlcXVlc3QgICAqcmVxdWVz
dCk7CisJY29uc3QgY2hhciAqICAgKCpnZXRfY29udGVudF90eXBlKShTb3VwUmVxdWVzdCAgICpy
ZXF1ZXN0KTsKK307CisKK0dUeXBlIHNvdXBfcmVxdWVzdF9nZXRfdHlwZSAodm9pZCk7CisKKyNk
ZWZpbmUgU09VUF9SRVFVRVNUX1VSSSAgICAgInVyaSIKKyNkZWZpbmUgU09VUF9SRVFVRVNUX1NF
U1NJT04gInNlc3Npb24iCisKK0dJbnB1dFN0cmVhbSAqc291cF9yZXF1ZXN0X3NlbmQgKFNvdXBS
ZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAorCQkJCSBHQ2FuY2VsbGFibGUgICAgICAgICAqY2Fu
Y2VsbGFibGUsCisJCQkJIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcik7Cit2b2lkICAgICAg
ICAgIHNvdXBfcmVxdWVzdF9zZW5kX2FzeW5jIChTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVz
dCwKKwkJCQkgICAgICAgR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJCSAg
ICAgICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAorCQkJCSAgICAgICBncG9pbnRlciB1
c2VyX2RhdGEpOworR0lucHV0U3RyZWFtICpzb3VwX3JlcXVlc3Rfc2VuZF9maW5pc2ggKFNvdXBS
ZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAorCQkJCQlHQXN5bmNSZXN1bHQgICAgICAgICAqcmVz
dWx0LAorCQkJCQlHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpOworCitTb3VwVVJJICAgICAg
KnNvdXBfcmVxdWVzdF9nZXRfdXJpIChTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCk7CitT
b3VwU2Vzc2lvbiAgKnNvdXBfcmVxdWVzdF9nZXRfc2Vzc2lvbiAoU291cFJlcXVlc3QgICAgICAg
ICAgKnJlcXVlc3QpOworCitnb2Zmc2V0ICAgICAgIHNvdXBfcmVxdWVzdF9nZXRfY29udGVudF9s
ZW5ndGggKFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0KTsKK2NvbnN0IGNoYXIgICAqc291
cF9yZXF1ZXN0X2dldF9jb250ZW50X3R5cGUgKFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0
KTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFNPVVBfUkVRVUVTVF9IICovCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Rlci5j
IGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuYwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTFlNjEyCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIu
YwpAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqIHNvdXAtcmVxdWVzdGVyLmM6CisgKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwLCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAic291cC1yZXF1ZXN0ZXIuaCIKKworI2luY2x1ZGUgInNvdXAtcmVxdWVzdC1kYXRhLmgiCisj
aW5jbHVkZSAic291cC1yZXF1ZXN0LWZpbGUuaCIKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3QtaHR0
cC5oIgorI2luY2x1ZGUgPGdsaWIvZ2kxOG4uaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4K
Kworc3RydWN0IF9Tb3VwUmVxdWVzdGVyUHJpdmF0ZSB7CisJR0hhc2hUYWJsZSAqcmVxdWVzdF90
eXBlczsKK307CisKKyNkZWZpbmUgU09VUF9SRVFVRVNURVJfR0VUX1BSSVZBVEUobykgKEdfVFlQ
RV9JTlNUQU5DRV9HRVRfUFJJVkFURSAoKG8pLCBTT1VQX1RZUEVfUkVRVUVTVEVSLCBTb3VwUmVx
dWVzdGVyUHJpdmF0ZSkpCisKK0dfREVGSU5FX1RZUEUgKFNvdXBSZXF1ZXN0ZXIsIHNvdXBfcmVx
dWVzdGVyLCBHX1RZUEVfT0JKRUNUKQorCitzdGF0aWMgdm9pZCBzb3VwX3JlcXVlc3Rlcl9pbml0
IChTb3VwUmVxdWVzdGVyICpyZXF1ZXN0ZXIpCit7CisJcmVxdWVzdGVyLT5wcml2ID0gU09VUF9S
RVFVRVNURVJfR0VUX1BSSVZBVEUgKHJlcXVlc3Rlcik7CisKKwlyZXF1ZXN0ZXItPnByaXYtPnJl
cXVlc3RfdHlwZXMgPSAwOworfQorCitzdGF0aWMgdm9pZCBmaW5hbGl6ZSAoR09iamVjdCAqb2Jq
ZWN0KQoreworCVNvdXBSZXF1ZXN0ZXIgKnJlcXVlc3RlciA9IFNPVVBfUkVRVUVTVEVSIChvYmpl
Y3QpOworCisJaWYgKHJlcXVlc3Rlci0+cHJpdi0+cmVxdWVzdF90eXBlcykKKwkJZ19oYXNoX3Rh
YmxlX2Rlc3Ryb3kgKHJlcXVlc3Rlci0+cHJpdi0+cmVxdWVzdF90eXBlcyk7CisKKwlHX09CSkVD
VF9DTEFTUyAoc291cF9yZXF1ZXN0ZXJfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7
Cit9CisKK3N0YXRpYyB2b2lkIHNvdXBfcmVxdWVzdGVyX2NsYXNzX2luaXQgKFNvdXBSZXF1ZXN0
ZXJDbGFzcyAqcmVxdWVzdGVyX2NsYXNzKQoreworCUdPYmplY3RDbGFzcyAqb2JqZWN0X2NsYXNz
ID0gR19PQkpFQ1RfQ0xBU1MgKHJlcXVlc3Rlcl9jbGFzcyk7CisKKwlnX3R5cGVfY2xhc3NfYWRk
X3ByaXZhdGUgKHJlcXVlc3Rlcl9jbGFzcywgc2l6ZW9mIChTb3VwUmVxdWVzdGVyUHJpdmF0ZSkp
OworCisJLyogdmlydHVhbCBtZXRob2Qgb3ZlcnJpZGUgKi8KKwlvYmplY3RfY2xhc3MtPmZpbmFs
aXplID0gZmluYWxpemU7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfcmVxdWVzdF90eXBlcyAoU291
cFJlcXVlc3RlclByaXZhdGUgKnByaXYpCit7CisJaWYgKHByaXYtPnJlcXVlc3RfdHlwZXMpCisJ
CXJldHVybjsKKworCXByaXYtPnJlcXVlc3RfdHlwZXMgPSBnX2hhc2hfdGFibGVfbmV3X2Z1bGwg
KHNvdXBfc3RyX2Nhc2VfaGFzaCwKKwkJCQkJCSAgICAgc291cF9zdHJfY2FzZV9lcXVhbCwKKwkJ
CQkJCSAgICAgZ19mcmVlLCAwKTsKKwlnX2hhc2hfdGFibGVfaW5zZXJ0IChwcml2LT5yZXF1ZXN0
X3R5cGVzLCBnX3N0cmR1cCAoImZpbGUiKSwKKwkJCSAgICAgR1NJWkVfVE9fUE9JTlRFUiAoU09V
UF9UWVBFX1JFUVVFU1RfRklMRSkpOworCWdfaGFzaF90YWJsZV9pbnNlcnQgKHByaXYtPnJlcXVl
c3RfdHlwZXMsIGdfc3RyZHVwICgiZGF0YSIpLAorCQkJICAgICBHU0laRV9UT19QT0lOVEVSIChT
T1VQX1RZUEVfUkVRVUVTVF9EQVRBKSk7CisJZ19oYXNoX3RhYmxlX2luc2VydCAocHJpdi0+cmVx
dWVzdF90eXBlcywgZ19zdHJkdXAgKCJodHRwIiksCisJCQkgICAgIEdTSVpFX1RPX1BPSU5URVIg
KFNPVVBfVFlQRV9SRVFVRVNUX0hUVFApKTsKKwlnX2hhc2hfdGFibGVfaW5zZXJ0IChwcml2LT5y
ZXF1ZXN0X3R5cGVzLCBnX3N0cmR1cCAoImh0dHBzIiksCisJCQkgICAgIEdTSVpFX1RPX1BPSU5U
RVIgKFNPVVBfVFlQRV9SRVFVRVNUX0hUVFApKTsKKwlnX2hhc2hfdGFibGVfaW5zZXJ0IChwcml2
LT5yZXF1ZXN0X3R5cGVzLCBnX3N0cmR1cCAoImZ0cCIpLAorCQkJICAgICBHU0laRV9UT19QT0lO
VEVSIChTT1VQX1RZUEVfUkVRVUVTVF9GSUxFKSk7Cit9CisKK1NvdXBSZXF1ZXN0ZXIgKnNvdXBf
cmVxdWVzdGVyX25ldyAodm9pZCkKK3sKKwlyZXR1cm4gKFNvdXBSZXF1ZXN0ZXIgKilnX29iamVj
dF9uZXcgKFNPVVBfVFlQRV9SRVFVRVNURVIsIDApOworfQorCitTb3VwUmVxdWVzdCAqc291cF9y
ZXF1ZXN0ZXJfcmVxdWVzdCAoU291cFJlcXVlc3RlciAqcmVxdWVzdGVyLCBjb25zdCBjaGFyICp1
cmlTdHJpbmcsIFNvdXBTZXNzaW9uICpzZXNzaW9uLCBHRXJyb3IgKiplcnJvcikKK3sKKwlTb3Vw
VVJJICp1cmkgPSBOVUxMOworCVNvdXBSZXF1ZXN0ICpyZXE7CisKKwl1cmkgPSBzb3VwX3VyaV9u
ZXcgKHVyaVN0cmluZyk7CisJaWYgKCF1cmkpIHsKKwkJZ19zZXRfZXJyb3IgKGVycm9yLCBTT1VQ
X0VSUk9SLCBTT1VQX0VSUk9SX0JBRF9VUkksCisJCQkgICAgIF8gKCJDb3VsZCBub3QgcGFyc2Ug
VVJJICclcyciKSwgdXJpU3RyaW5nKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmVxID0gc291cF9y
ZXF1ZXN0ZXJfcmVxdWVzdF91cmkgKHJlcXVlc3RlciwgdXJpLCBzZXNzaW9uLCBlcnJvcik7CisJ
c291cF91cmlfZnJlZSAodXJpKTsKKwlyZXR1cm4gcmVxOworfQorCitTb3VwUmVxdWVzdCAqc291
cF9yZXF1ZXN0ZXJfcmVxdWVzdF91cmkgKFNvdXBSZXF1ZXN0ZXIgKnJlcXVlc3RlciwgU291cFVS
SSAqdXJpLCBTb3VwU2Vzc2lvbiAqc2Vzc2lvbiwgR0Vycm9yICoqZXJyb3IpCit7CisJR1R5cGUg
cmVxdWVzdFR5cGU7CisKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoU09VUF9JU19SRVFVRVNURVIg
KHJlcXVlc3RlciksIDApOworCisJaW5pdF9yZXF1ZXN0X3R5cGVzIChyZXF1ZXN0ZXItPnByaXYp
OworCXJlcXVlc3RUeXBlID0gKEdUeXBlKUdQT0lOVEVSX1RPX1NJWkUgKGdfaGFzaF90YWJsZV9s
b29rdXAgKHJlcXVlc3Rlci0+cHJpdi0+cmVxdWVzdF90eXBlcywgdXJpLT5zY2hlbWUpKTsKKwlp
ZiAoIXJlcXVlc3RUeXBlKSB7CisJCWdfc2V0X2Vycm9yIChlcnJvciwgU09VUF9FUlJPUiwgU09V
UF9FUlJPUl9VTlNVUFBPUlRFRF9VUklfU0NIRU1FLAorCQkJICAgICBfICgiVW5zdXBwb3J0ZWQg
VVJJIHNjaGVtZSAnJXMnIiksIHVyaS0+c2NoZW1lKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYg
KGdfdHlwZV9pc19hIChyZXF1ZXN0VHlwZSwgR19UWVBFX0lOSVRBQkxFKSkgeworCQlyZXR1cm4g
KFNvdXBSZXF1ZXN0ICopZ19pbml0YWJsZV9uZXcgKHJlcXVlc3RUeXBlLCAwLCBlcnJvciwKKwkJ
CQkJCSAgICAgICJ1cmkiLCB1cmksCisJCQkJCQkgICAgICAic2Vzc2lvbiIsIHNlc3Npb24sCisJ
CQkJCQkgICAgICAwKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gKFNvdXBSZXF1ZXN0ICopZ19vYmpl
Y3RfbmV3IChyZXF1ZXN0VHlwZSwKKwkJCQkJCSAgICAidXJpIiwgdXJpLAorCQkJCQkJICAgICJz
ZXNzaW9uIiwgc2Vzc2lvbiwKKwkJCQkJCSAgICAwKTsKKwl9Cit9CisKKy8qIFJGQyAyMzk2LCAz
LjEgKi8KK3N0YXRpYyBnYm9vbGVhbgorc291cF9zY2hlbWVfaXNfdmFsaWQgKGNvbnN0IGNoYXIg
KnNjaGVtZSkKK3sKKwlpZiAoc2NoZW1lID09IE5VTEwgfHwKKwkgICAgIWdfYXNjaWlfaXNhbHBo
YSAoKnNjaGVtZSkpCisJCXJldHVybiBGQUxTRTsKKworCXNjaGVtZSsrOworCXdoaWxlICgqc2No
ZW1lKSB7CisJCWlmICghZ19hc2NpaV9pc2FscGhhICgqc2NoZW1lKSAmJgorCQkgICAgIWdfYXNj
aWlfaXNkaWdpdCAoKnNjaGVtZSkgJiYKKwkJICAgICpzY2hlbWUgIT0gJysnICYmCisJCSAgICAq
c2NoZW1lICE9ICctJyAmJgorCQkgICAgKnNjaGVtZSAhPSAnLicpCisJCQlyZXR1cm4gRkFMU0U7
CisJCXNjaGVtZSsrOworCX0KKwlyZXR1cm4gVFJVRTsKK30KKwordm9pZAorc291cF9yZXF1ZXN0
ZXJfYWRkX3Byb3RvY29sIChTb3VwUmVxdWVzdGVyICpyZXF1ZXN0ZXIsCisJCQkgICAgIGNvbnN0
IGNoYXIgICpzY2hlbWUsCisJCQkgICAgIEdUeXBlIHJlcXVlc3RfdHlwZSkKK3sKKwlnX3JldHVy
bl9pZl9mYWlsIChTT1VQX0lTX1JFUVVFU1RFUiAocmVxdWVzdGVyKSk7CisJZ19yZXR1cm5faWZf
ZmFpbCAoc291cF9zY2hlbWVfaXNfdmFsaWQgKHNjaGVtZSkpOworCisJaW5pdF9yZXF1ZXN0X3R5
cGVzIChyZXF1ZXN0ZXItPnByaXYpOworCWdfaGFzaF90YWJsZV9pbnNlcnQgKHJlcXVlc3Rlci0+
cHJpdi0+cmVxdWVzdF90eXBlcywgZ19zdHJkdXAgKHNjaGVtZSksCisJCQkgICAgIEdTSVpFX1RP
X1BPSU5URVIgKHJlcXVlc3RfdHlwZSkpOworfQorCit2b2lkCitzb3VwX3JlcXVlc3Rlcl9yZW1v
dmVfcHJvdG9jb2wgKFNvdXBSZXF1ZXN0ZXIgKnJlcXVlc3RlciwKKwkJCQljb25zdCBjaGFyICAq
c2NoZW1lKQoreworCWdfcmV0dXJuX2lmX2ZhaWwgKFNPVVBfSVNfUkVRVUVTVEVSIChyZXF1ZXN0
ZXIpKTsKKwlnX3JldHVybl9pZl9mYWlsIChzb3VwX3NjaGVtZV9pc192YWxpZCAoc2NoZW1lKSk7
CisKKwlpbml0X3JlcXVlc3RfdHlwZXMgKHJlcXVlc3Rlci0+cHJpdik7CisJZ19oYXNoX3RhYmxl
X3JlbW92ZSAocmVxdWVzdGVyLT5wcml2LT5yZXF1ZXN0X3R5cGVzLCBzY2hlbWUpOworfQorCitH
UXVhcmsKK3NvdXBfZXJyb3JfcXVhcmsgKHZvaWQpCit7CisJc3RhdGljIEdRdWFyayBlcnJvcjsK
KwlpZiAoIWVycm9yKQorCQllcnJvciA9IGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nICgic291
cF9lcnJvcl9xdWFyayIpOworCXJldHVybiBlcnJvcjsKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmggYi9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Rlci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZWQ5MGIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Rlci5oCkBAIC0wLDAgKzEs
ODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBTT1VQ
X1JFUVVFU1RFUl9ICisjZGVmaW5lIFNPVVBfUkVRVUVTVEVSX0ggMQorCisjaW5jbHVkZSAic291
cC1yZXF1ZXN0LmgiCisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CisKK0dfQkVHSU5fREVDTFMK
KworI2RlZmluZSBTT1VQX1RZUEVfUkVRVUVTVEVSICAgICAgICAgICAgKHNvdXBfcmVxdWVzdGVy
X2dldF90eXBlICgpKQorI2RlZmluZSBTT1VQX1JFUVVFU1RFUihvYmopICAgICAgICAgICAgKEdf
VFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgU09VUF9UWVBFX1JFUVVFU1RFUiwgU291
cFJlcXVlc3RlcikpCisjZGVmaW5lIFNPVVBfUkVRVUVTVEVSX0NMQVNTKGtsYXNzKSAgICAoR19U
WVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFNPVVBfVFlQRV9SRVFVRVNURVIsIFNvdXBS
ZXF1ZXN0ZXJDbGFzcykpCisjZGVmaW5lIFNPVVBfSVNfUkVRVUVTVEVSKG9iaikgICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBTT1VQX1RZUEVfUkVRVUVTVEVSKSkK
KyNkZWZpbmUgU09VUF9JU19SRVFVRVNURVJfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfVFlQRSAoKG9iaiksIFNPVVBfVFlQRV9SRVFVRVNURVIpKQorI2RlZmluZSBTT1VQX1JFUVVF
U1RFUl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBT
T1VQX1RZUEVfUkVRVUVTVEVSLCBTb3VwUmVxdWVzdGVyQ2xhc3MpKQorCisjZGVmaW5lIFNPVVBf
RVJST1Igc291cF9lcnJvcl9xdWFyayAoKQorCit0eXBlZGVmIGVudW0geworCVNPVVBfRVJST1Jf
QkFEX1VSSSwKKwlTT1VQX0VSUk9SX1VOU1VQUE9SVEVEX1VSSV9TQ0hFTUUKK30gU291cEVycm9y
OworCit0eXBlZGVmIHN0cnVjdCBfU291cFJlcXVlc3RlciBTb3VwUmVxdWVzdGVyOwordHlwZWRl
ZiBzdHJ1Y3QgX1NvdXBSZXF1ZXN0ZXJQcml2YXRlIFNvdXBSZXF1ZXN0ZXJQcml2YXRlOworCitz
dHJ1Y3QgX1NvdXBSZXF1ZXN0ZXIgeworCUdPYmplY3QgcGFyZW50OworCisJU291cFJlcXVlc3Rl
clByaXZhdGUgKnByaXY7Cit9OworCit0eXBlZGVmIHN0cnVjdCB7CisJR09iamVjdENsYXNzIHBh
cmVudF9jbGFzczsKK30gU291cFJlcXVlc3RlckNsYXNzOworCitHVHlwZSBzb3VwX3JlcXVlc3Rl
cl9nZXRfdHlwZSAodm9pZCk7CisKK1NvdXBSZXF1ZXN0ZXIgKnNvdXBfcmVxdWVzdGVyX25ldyAo
dm9pZCk7CisKK0dRdWFyayBzb3VwX2Vycm9yX3F1YXJrICh2b2lkKTsKKworU291cFJlcXVlc3Qg
KnNvdXBfcmVxdWVzdGVyX3JlcXVlc3QgKFNvdXBSZXF1ZXN0ZXIgKnJlcXVlc3RlciwKKwkJCQkg
ICAgIGNvbnN0IGNoYXIgKnVyaVN0cmluZywKKwkJCQkgICAgIFNvdXBTZXNzaW9uICpzZXNzaW9u
LAorCQkJCSAgICAgR0Vycm9yICoqZXJyb3IpOworCitTb3VwUmVxdWVzdCAqc291cF9yZXF1ZXN0
ZXJfcmVxdWVzdF91cmkgKFNvdXBSZXF1ZXN0ZXIgKnJlcXVlc3RlciwKKwkJCQkJIFNvdXBVUkkg
KnVyaSwKKwkJCQkJIFNvdXBTZXNzaW9uICpzZXNzaW9uLAorCQkJCQkgR0Vycm9yICoqZXJyb3Ip
OworCit2b2lkIHNvdXBfcmVxdWVzdGVyX2FkZF9wcm90b2NvbCAoU291cFJlcXVlc3RlciAqcmVx
dWVzdGVyLAorCQkJCSAgY29uc3QgY2hhciAgKnNjaGVtZSwKKwkJCQkgIEdUeXBlIHJlcXVlc3Rf
dHlwZSk7CisKK3ZvaWQgc291cF9yZXF1ZXN0ZXJfcmVtb3ZlX3Byb3RvY29sIChTb3VwUmVxdWVz
dGVyICpyZXF1ZXN0ZXIsCisJCQkJICAgICBjb25zdCBjaGFyICAqc2NoZW1lKTsKKworR19FTkRf
REVDTFMKKworI2VuZGlmIC8qIFNPVVBfUkVRVUVTVEVSX0ggKi8KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLXByaXZhdGUu
aCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hl
LXByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTE0N2YzCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Vi
a2l0L3NvdXAtY2FjaGUtcHJpdmF0ZS5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBzb3VwLWNh
Y2hlLXByaXZhdGUuaDoKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgV0VCS0lUX1NPVVBfQ0FDSEVfUFJJVkFURV9ICisjZGVmaW5lIFdFQktJVF9TT1VQX0NB
Q0hFX1BSSVZBVEVfSCAxCisKKyNpbmNsdWRlICJzb3VwLWNhY2hlLmgiCisjaW5jbHVkZSA8bGli
c291cC9zb3VwLW1lc3NhZ2UuaD4KKworR19CRUdJTl9ERUNMUworCitXZWJLaXRTb3VwQ2FjaGVS
ZXNwb25zZSB3ZWJraXRfc291cF9jYWNoZV9oYXNfcmVzcG9uc2UgKFdlYktpdFNvdXBDYWNoZSAg
ICpjYWNoZSwKKwkJCQkJCQlTb3VwTWVzc2FnZSAqbXNnKTsKK0dJbnB1dFN0cmVhbSAqd2Via2l0
X3NvdXBfY2FjaGVfc2VuZF9yZXNwb25zZSAoV2ViS2l0U291cENhY2hlICAgKmNhY2hlLAorCQkJ
CQkgICAgICAgU291cE1lc3NhZ2UgKm1zZyk7CitXZWJLaXRTb3VwQ2FjaGVhYmlsaXR5ICB3ZWJr
aXRfc291cF9jYWNoZV9nZXRfY2FjaGVhYmlsaXR5IChXZWJLaXRTb3VwQ2FjaGUgICAqY2FjaGUs
CisJCQkJCQkJICAgIFNvdXBNZXNzYWdlICptc2cpOworU291cE1lc3NhZ2UgKndlYmtpdF9zb3Vw
X2NhY2hlX2dlbmVyYXRlX2NvbmRpdGlvbmFsX3JlcXVlc3QgKFdlYktpdFNvdXBDYWNoZSAgICpj
YWNoZSwKKwkJCQkJCQkgICAgIFNvdXBNZXNzYWdlICpvcmlnaW5hbCk7CisKK0dfRU5EX0RFQ0xT
CisKKyNlbmRpZiAvKiBXRUJLSVRfU09VUF9DQUNIRV9QUklWQVRFX0ggKi8KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLmMg
Yi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5j
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyYWNmYjMKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1j
YWNoZS5jCkBAIC0wLDAgKzEsMTY1MiBAQAorLyoKKyAqIHNvdXAtY2FjaGUuYworICoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSwgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisvKiBUT0RPOgorICogLSBOZWVkIHRv
IGhvb2sgdGhlIGZlYXR1cmUgaW4gdGhlIHN5bmMgU291cFNlc3Npb24uCisgKiAtIE5lZWQgbW9y
ZSB0ZXN0cy4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5o
PgorI2VuZGlmCisKKyNpbmNsdWRlICJzb3VwLWNhY2hlLmgiCisjaW5jbHVkZSAic291cC1jYWNo
ZS1wcml2YXRlLmgiCisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CisjaW5jbHVkZSA8Z2lvL2dp
by5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitzdGF0aWMgU291cFNlc3Npb25GZWF0dXJlSW50
ZXJmYWNlICp3ZWJraXRfc291cF9jYWNoZV9kZWZhdWx0X2ZlYXR1cmVfaW50ZXJmYWNlOworc3Rh
dGljIHZvaWQgd2Via2l0X3NvdXBfY2FjaGVfc2Vzc2lvbl9mZWF0dXJlX2luaXQgKFNvdXBTZXNz
aW9uRmVhdHVyZUludGVyZmFjZSAqZmVhdHVyZV9pbnRlcmZhY2UsIGdwb2ludGVyIGludGVyZmFj
ZV9kYXRhKTsKKworI2RlZmluZSBERUZBVUxUX01BWF9TSVpFIDUwICogMTAyNCAqIDEwMjQKKyNk
ZWZpbmUgTUFYX0VOVFJZX0RBVEFfUEVSQ0VOVEFHRSAxMCAvKiBQZXJjZW50YWdlIG9mIHRoZSB0
b3RhbCBzaXplCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgY2FjaGUg
dGhhdCBjYW4gYmUKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxlZCBieSBh
IHNpbmdsZSBlbnRyeSAqLworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0U291cENhY2hlRW50cnkg
eworCWNoYXIgKmtleTsKKwljaGFyICpmaWxlbmFtZTsKKwlndWludCBmcmVzaG5lc3NfbGlmZXRp
bWU7CisJZ2Jvb2xlYW4gbXVzdF9yZXZhbGlkYXRlOworCUdTdHJpbmcgKmRhdGE7CisJZ3NpemUg
cG9zOworCWdzaXplIGxlbmd0aDsKKwl0aW1lX3QgY29ycmVjdGVkX2luaXRpYWxfYWdlOworCXRp
bWVfdCByZXNwb25zZV90aW1lOworCWdib29sZWFuIHdyaXRpbmc7CisJZ2Jvb2xlYW4gZGlydHk7
CisJZ2Jvb2xlYW4gZ290X2JvZHk7CisJZ2Jvb2xlYW4gYmVpbmdfdmFsaWRhdGVkOworCVNvdXBN
ZXNzYWdlSGVhZGVycyAqaGVhZGVyczsKKwlHT3V0cHV0U3RyZWFtICpzdHJlYW07CisJR0Vycm9y
ICplcnJvcjsKKwlndWludCBoaXRzOworCUdDYW5jZWxsYWJsZSAqY2FuY2VsbGFibGU7Cit9IFdl
YktpdFNvdXBDYWNoZUVudHJ5OworCitzdHJ1Y3QgX1dlYktpdFNvdXBDYWNoZVByaXZhdGUgewor
CWNoYXIgKmNhY2hlX2RpcjsKKwlHSGFzaFRhYmxlICpjYWNoZTsKKwlndWludCBuX3BlbmRpbmc7
CisJU291cFNlc3Npb24gKnNlc3Npb247CisJV2ViS2l0U291cENhY2hlVHlwZSBjYWNoZV90eXBl
OworCWd1aW50IHNpemU7CisJZ3VpbnQgbWF4X3NpemU7CisJZ3VpbnQgbWF4X2VudHJ5X2RhdGFf
c2l6ZTsgLyogQ29tcHV0ZWQgdmFsdWUuIEhlcmUgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgKi8K
KwlHTGlzdCAqbHJ1X3N0YXJ0OworfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCVdlYktpdFNvdXBD
YWNoZSAqY2FjaGU7CisJV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5OworCVNvdXBNZXNzYWdl
ICptc2c7CisJZ3Vsb25nIGdvdF9jaHVua19oYW5kbGVyOworCWd1bG9uZyBnb3RfYm9keV9oYW5k
bGVyOworCWd1bG9uZyByZXN0YXJ0ZWRfaGFuZGxlcjsKK30gV2ViS2l0U291cENhY2hlV3JpdGlu
Z0ZpeHR1cmU7CisKK2VudW0geworCVBST1BfMCwKKwlQUk9QX0NBQ0hFX0RJUiwKKwlQUk9QX0NB
Q0hFX1RZUEUKK307CisKKyNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FDSEVfR0VUX1BSSVZBVEUobykg
KEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAoKG8pLCBXRUJLSVRfVFlQRV9TT1VQX0NBQ0hF
LCBXZWJLaXRTb3VwQ2FjaGVQcml2YXRlKSkKKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKFdl
YktpdFNvdXBDYWNoZSwgd2Via2l0X3NvdXBfY2FjaGUsIEdfVFlQRV9PQkpFQ1QsCisJCQkgR19J
TVBMRU1FTlRfSU5URVJGQUNFIChTT1VQX1RZUEVfU0VTU0lPTl9GRUFUVVJFLAorCQkJCQkJd2Vi
a2l0X3NvdXBfY2FjaGVfc2Vzc2lvbl9mZWF0dXJlX2luaXQpKQorCitzdGF0aWMgZ2Jvb2xlYW4g
d2Via2l0X3NvdXBfY2FjaGVfZW50cnlfcmVtb3ZlIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLCBX
ZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkpOworc3RhdGljIHZvaWQgbWFrZV9yb29tX2Zvcl9u
ZXdfZW50cnkgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsIGd1aW50IGxlbmd0aF90b19hZGQpOwor
c3RhdGljIGdib29sZWFuIGNhY2hlX2FjY2VwdHNfZW50cmllc19vZl9zaXplIChXZWJLaXRTb3Vw
Q2FjaGUgKmNhY2hlLCBndWludCBsZW5ndGhfdG9fYWRkKTsKKworc3RhdGljIFdlYktpdFNvdXBD
YWNoZWFiaWxpdHkKK2dldF9jYWNoZWFiaWxpdHkgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsIFNv
dXBNZXNzYWdlICptc2cpCit7CisJV2ViS2l0U291cENhY2hlYWJpbGl0eSBjYWNoZWFiaWxpdHk7
CisJY29uc3QgY2hhciAqY2FjaGVfY29udHJvbDsKKworCS8qIDEuIFRoZSByZXF1ZXN0IG1ldGhv
ZCBtdXN0IGJlIGNhY2hlYWJsZSAqLworCWlmIChtc2ctPm1ldGhvZCA9PSBTT1VQX01FVEhPRF9H
RVQpCisJCWNhY2hlYWJpbGl0eSA9IFdFQktJVF9TT1VQX0NBQ0hFX0NBQ0hFQUJMRTsKKwllbHNl
IGlmIChtc2ctPm1ldGhvZCA9PSBTT1VQX01FVEhPRF9IRUFEIHx8CisJCSBtc2ctPm1ldGhvZCA9
PSBTT1VQX01FVEhPRF9UUkFDRSB8fAorCQkgbXNnLT5tZXRob2QgPT0gU09VUF9NRVRIT0RfQ09O
TkVDVCkKKwkJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFOworCWVsc2UKKwkJ
cmV0dXJuIChXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRSB8IFdFQktJVF9TT1VQX0NBQ0hF
X0lOVkFMSURBVEVTKTsKKworCWNhY2hlX2NvbnRyb2wgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19n
ZXQgKG1zZy0+cmVzcG9uc2VfaGVhZGVycywgIkNhY2hlLUNvbnRyb2wiKTsKKwlpZiAoY2FjaGVf
Y29udHJvbCkgeworCQlHSGFzaFRhYmxlICpoYXNoOworCQlXZWJLaXRTb3VwQ2FjaGVQcml2YXRl
ICpwcml2ID0gV0VCS0lUX1NPVVBfQ0FDSEVfR0VUX1BSSVZBVEUgKGNhY2hlKTsKKworCQloYXNo
ID0gc291cF9oZWFkZXJfcGFyc2VfcGFyYW1fbGlzdCAoY2FjaGVfY29udHJvbCk7CisKKwkJLyog
U2hhcmVkIGNhY2hlcyBNVVNUIE5PVCBzdG9yZSBwcml2YXRlIHJlc291cmNlcyAqLworCQlpZiAo
cHJpdi0+Y2FjaGVfdHlwZSA9PSBXRUJLSVRfU09VUF9DQUNIRV9TSEFSRUQpIHsKKwkJCWlmIChn
X2hhc2hfdGFibGVfbG9va3VwX2V4dGVuZGVkIChoYXNoLCAicHJpdmF0ZSIsIE5VTEwsIE5VTEwp
KSB7CisJCQkJc291cF9oZWFkZXJfZnJlZV9wYXJhbV9saXN0IChoYXNoKTsKKwkJCQlyZXR1cm4g
V0VCS0lUX1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEU7CisJCQl9CisJCX0KKworCQkvKiAyLiBUaGUg
J25vLXN0b3JlJyBjYWNoZSBkaXJlY3RpdmUgZG9lcyBub3QgYXBwZWFyIGluIHRoZQorCQkgKiBo
ZWFkZXJzCisJCSAqLworCQlpZiAoZ19oYXNoX3RhYmxlX2xvb2t1cF9leHRlbmRlZCAoaGFzaCwg
Im5vLXN0b3JlIiwgTlVMTCwgTlVMTCkpIHsKKwkJCXNvdXBfaGVhZGVyX2ZyZWVfcGFyYW1fbGlz
dCAoaGFzaCk7CisJCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEU7CisJCX0K
KworCQkvKiBUaGlzIGRvZXMgbm90IGFwcGVhciBpbiBzZWN0aW9uIDIuMSwgYnV0IEkgdGhpbmsg
aXQgbWFrZXMKKwkJICogc2Vuc2UgdG8gY2hlY2sgaXQgdG9vPworCQkgKi8KKwkJaWYgKGdfaGFz
aF90YWJsZV9sb29rdXBfZXh0ZW5kZWQgKGhhc2gsICJuby1jYWNoZSIsIE5VTEwsIE5VTEwpKSB7
CisJCQlzb3VwX2hlYWRlcl9mcmVlX3BhcmFtX2xpc3QgKGhhc2gpOworCQkJcmV0dXJuIFdFQktJ
VF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFOworCQl9CisJfQorCisJc3dpdGNoIChtc2ctPnN0YXR1
c19jb2RlKSB7CisJCWNhc2UgU09VUF9TVEFUVVNfUEFSVElBTF9DT05URU5UOgorCQkJLyogV2Ug
ZG9uJ3QgY2FjaGUgcGFydGlhbCByZXNwb25zZXMsIGJ1dCB0aGV5IG9ubHkKKwkJCSAqIGludmFs
aWRhdGUgY2FjaGVkIGZ1bGwgcmVzcG9uc2VzIGlmIHRoZSBoZWFkZXJzCisJCQkgKiBkb24ndCBt
YXRjaC4KKwkJCSAqLworCQkJY2FjaGVhYmlsaXR5ID0gV0VCS0lUX1NPVVBfQ0FDSEVfVU5DQUNI
RUFCTEU7CisJCQlicmVhazsKKworCQljYXNlIFNPVVBfU1RBVFVTX05PVF9NT0RJRklFRDoKKwkJ
CS8qIEEgMzA0IHJlc3BvbnNlIHZhbGlkYXRlcyBhbiBleGlzdGluZyBjYWNoZSBlbnRyeSAqLwor
CQkJY2FjaGVhYmlsaXR5ID0gV0VCS0lUX1NPVVBfQ0FDSEVfVkFMSURBVEVTOworCQkJYnJlYWs7
CisKKwkJY2FzZSBTT1VQX1NUQVRVU19NVUxUSVBMRV9DSE9JQ0VTOgorCQljYXNlIFNPVVBfU1RB
VFVTX01PVkVEX1BFUk1BTkVOVExZOgorCQljYXNlIFNPVVBfU1RBVFVTX0dPTkU6CisJCQkvKiBG
SVhNRTogY2FjaGVhYmxlIHVubGVzcyBpbmRpY2F0ZWQgb3RoZXJ3aXNlICovCisJCQljYWNoZWFi
aWxpdHkgPSBXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRTsKKwkJCWJyZWFrOworCisJCWNh
c2UgU09VUF9TVEFUVVNfRk9VTkQ6CisJCWNhc2UgU09VUF9TVEFUVVNfVEVNUE9SQVJZX1JFRElS
RUNUOgorCQkJLyogRklYTUU6IGNhY2hlYWJsZSBpZiBleHBsaWNpdGx5IGluZGljYXRlZCAqLwor
CQkJY2FjaGVhYmlsaXR5ID0gV0VCS0lUX1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEU7CisJCQlicmVh
azsKKworCQljYXNlIFNPVVBfU1RBVFVTX1NFRV9PVEhFUjoKKwkJY2FzZSBTT1VQX1NUQVRVU19G
T1JCSURERU46CisJCWNhc2UgU09VUF9TVEFUVVNfTk9UX0ZPVU5EOgorCQljYXNlIFNPVVBfU1RB
VFVTX01FVEhPRF9OT1RfQUxMT1dFRDoKKwkJCXJldHVybiAoV0VCS0lUX1NPVVBfQ0FDSEVfVU5D
QUNIRUFCTEUgfCBXRUJLSVRfU09VUF9DQUNIRV9JTlZBTElEQVRFUyk7CisKKwkJZGVmYXVsdDoK
KwkJCS8qIEFueSA1eHggc3RhdHVzIG9yIGFueSA0eHggc3RhdHVzIG5vdCBoYW5kbGVkIGFib3Zl
CisJCQkgKiBpcyB1bmNhY2hlYWJsZSBidXQgZG9lc24ndCBicmVhayB0aGUgY2FjaGUuCisJCQkg
Ki8KKwkJCWlmICgobXNnLT5zdGF0dXNfY29kZSA+PSBTT1VQX1NUQVRVU19CQURfUkVRVUVTVCAm
JgorCQkJICAgICBtc2ctPnN0YXR1c19jb2RlIDw9IFNPVVBfU1RBVFVTX0ZBSUxFRF9ERVBFTkRF
TkNZKSB8fAorCQkJICAgIG1zZy0+c3RhdHVzX2NvZGUgPj0gU09VUF9TVEFUVVNfSU5URVJOQUxf
U0VSVkVSX0VSUk9SKQorCQkJCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRTsK
KworCQkJLyogQW4gdW5yZWNvZ25pemVkIDJ4eCwgM3h4LCBvciA0eHggcmVzcG9uc2UgYnJlYWtz
CisJCQkgKiB0aGUgY2FjaGUuCisJCQkgKi8KKwkJCWlmICgobXNnLT5zdGF0dXNfY29kZSA+IFNP
VVBfU1RBVFVTX1BBUlRJQUxfQ09OVEVOVCAmJgorCQkJICAgICBtc2ctPnN0YXR1c19jb2RlIDwg
U09VUF9TVEFUVVNfTVVMVElQTEVfQ0hPSUNFUykgfHwKKwkJCSAgICAobXNnLT5zdGF0dXNfY29k
ZSA+IFNPVVBfU1RBVFVTX1RFTVBPUkFSWV9SRURJUkVDVCAmJgorCQkJICAgICBtc2ctPnN0YXR1
c19jb2RlIDwgU09VUF9TVEFUVVNfSU5URVJOQUxfU0VSVkVSX0VSUk9SKSkKKwkJCQlyZXR1cm4g
KFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFIHwgV0VCS0lUX1NPVVBfQ0FDSEVfSU5WQUxJ
REFURVMpOworCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGNhY2hlYWJpbGl0eTsKK30KKworc3Rh
dGljIHZvaWQKK3dlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUgKFdlYktpdFNvdXBDYWNoZUVu
dHJ5ICplbnRyeSwgZ2Jvb2xlYW4gcHVyZ2UpCit7CisJaWYgKHB1cmdlKSB7CisJCUdGaWxlICpm
aWxlID0gZ19maWxlX25ld19mb3JfcGF0aCAoZW50cnktPmZpbGVuYW1lKTsKKwkJZ19maWxlX2Rl
bGV0ZSAoZmlsZSwgTlVMTCwgTlVMTCk7CisJCWdfb2JqZWN0X3VucmVmIChmaWxlKTsKKwl9CisK
KwlnX2ZyZWUgKGVudHJ5LT5maWxlbmFtZSk7CisJZW50cnktPmZpbGVuYW1lID0gTlVMTDsKKwln
X2ZyZWUgKGVudHJ5LT5rZXkpOworCWVudHJ5LT5rZXkgPSBOVUxMOworCisJaWYgKGVudHJ5LT5o
ZWFkZXJzKSB7CisJCXNvdXBfbWVzc2FnZV9oZWFkZXJzX2ZyZWUgKGVudHJ5LT5oZWFkZXJzKTsK
KwkJZW50cnktPmhlYWRlcnMgPSBOVUxMOworCX0KKworCWlmIChlbnRyeS0+ZGF0YSkgeworCQln
X3N0cmluZ19mcmVlIChlbnRyeS0+ZGF0YSwgVFJVRSk7CisJCWVudHJ5LT5kYXRhID0gTlVMTDsK
Kwl9CisJaWYgKGVudHJ5LT5lcnJvcikgeworCQlnX2Vycm9yX2ZyZWUgKGVudHJ5LT5lcnJvcik7
CisJCWVudHJ5LT5lcnJvciA9IE5VTEw7CisJfQorCWlmIChlbnRyeS0+Y2FuY2VsbGFibGUpIHsK
KwkJZ19vYmplY3RfdW5yZWYgKGVudHJ5LT5jYW5jZWxsYWJsZSk7CisJCWVudHJ5LT5jYW5jZWxs
YWJsZSA9IE5VTEw7CisJfQorCisJZ19zbGljZV9mcmVlIChXZWJLaXRTb3VwQ2FjaGVFbnRyeSwg
ZW50cnkpOworfQorCitzdGF0aWMgdm9pZAorY29weV9oZWFkZXJzIChjb25zdCBjaGFyICpuYW1l
LCBjb25zdCBjaGFyICp2YWx1ZSwgU291cE1lc3NhZ2VIZWFkZXJzICpoZWFkZXJzKQoreworCXNv
dXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZCAoaGVhZGVycywgbmFtZSwgdmFsdWUpOworfQorCitz
dGF0aWMgdm9pZAordXBkYXRlX2hlYWRlcnMgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIg
KnZhbHVlLCBTb3VwTWVzc2FnZUhlYWRlcnMgKmhlYWRlcnMpCit7CisJaWYgKHNvdXBfbWVzc2Fn
ZV9oZWFkZXJzX2dldCAoaGVhZGVycywgbmFtZSkpCisJCXNvdXBfbWVzc2FnZV9oZWFkZXJzX3Jl
cGxhY2UgKGhlYWRlcnMsIG5hbWUsIHZhbHVlKTsKKwllbHNlCisJCXNvdXBfbWVzc2FnZV9oZWFk
ZXJzX2FwcGVuZCAoaGVhZGVycywgbmFtZSwgdmFsdWUpOworfQorCitzdGF0aWMgZ3VpbnQKK3dl
YmtpdF9zb3VwX2NhY2hlX2VudHJ5X2dldF9jdXJyZW50X2FnZSAoV2ViS2l0U291cENhY2hlRW50
cnkgKmVudHJ5KQoreworCXRpbWVfdCBub3cgPSB0aW1lIChOVUxMKTsKKwl0aW1lX3QgcmVzaWRl
bnRfdGltZTsKKworCXJlc2lkZW50X3RpbWUgPSBub3cgLSBlbnRyeS0+cmVzcG9uc2VfdGltZTsK
KwlyZXR1cm4gZW50cnktPmNvcnJlY3RlZF9pbml0aWFsX2FnZSArIHJlc2lkZW50X3RpbWU7Cit9
CisKK3N0YXRpYyBnYm9vbGVhbgord2Via2l0X3NvdXBfY2FjaGVfZW50cnlfaXNfZnJlc2hfZW5v
dWdoIChXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnksIGludCBtaW5fZnJlc2gpCit7CisJdW5z
aWduZWQgbGltaXQgPSAobWluX2ZyZXNoID09IC0xKSA/IHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5
X2dldF9jdXJyZW50X2FnZSAoZW50cnkpIDogbWluX2ZyZXNoOworCXJldHVybiBlbnRyeS0+ZnJl
c2huZXNzX2xpZmV0aW1lID4gbGltaXQ7Cit9CisKK3N0YXRpYyBjaGFyICoKK3NvdXBfbWVzc2Fn
ZV9nZXRfY2FjaGVfa2V5IChTb3VwTWVzc2FnZSAqbXNnKQoreworCVNvdXBVUkkgKnVyaSA9IHNv
dXBfbWVzc2FnZV9nZXRfdXJpIChtc2cpOworCXJldHVybiBzb3VwX3VyaV90b19zdHJpbmcgKHVy
aSwgRkFMU0UpOworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfY2FjaGVfZW50cnlfc2V0
X2ZyZXNobmVzcyAoV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5LCBTb3VwTWVzc2FnZSAqbXNn
LCBXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKQoreworCWNvbnN0IGNoYXIgKmNhY2hlX2NvbnRyb2w7
CisJY29uc3QgY2hhciAqZXhwaXJlcywgKmRhdGUsICpsYXN0X21vZGlmaWVkOworCUdIYXNoVGFi
bGUgKmhhc2g7CisKKwloYXNoID0gTlVMTDsKKworCWNhY2hlX2NvbnRyb2wgPSBzb3VwX21lc3Nh
Z2VfaGVhZGVyc19nZXQgKGVudHJ5LT5oZWFkZXJzLCAiQ2FjaGUtQ29udHJvbCIpOworCWlmIChj
YWNoZV9jb250cm9sKSB7CisJCWNvbnN0IGNoYXIgKm1heF9hZ2UsICpzX21heGFnZTsKKwkJZ2lu
dDY0IGZyZXNobmVzc19saWZldGltZSA9IDA7CisJCVdlYktpdFNvdXBDYWNoZVByaXZhdGUgKnBy
aXYgPSBXRUJLSVRfU09VUF9DQUNIRV9HRVRfUFJJVkFURSAoY2FjaGUpOworCisJCWhhc2ggPSBz
b3VwX2hlYWRlcl9wYXJzZV9wYXJhbV9saXN0IChjYWNoZV9jb250cm9sKTsKKworCQkvKiBTaG91
bGQgd2UgcmUtdmFsaWRhdGUgdGhlIGVudHJ5IHdoZW4gaXQgZ29lcyBzdGFsZSAqLworCQllbnRy
eS0+bXVzdF9yZXZhbGlkYXRlID0gKGdib29sZWFuKWdfaGFzaF90YWJsZV9sb29rdXAgKGhhc2gs
ICJtdXN0LXJldmFsaWRhdGUiKTsKKworCQkvKiBTZWN0aW9uIDIuMy4xICovCisJCWlmIChwcml2
LT5jYWNoZV90eXBlID09IFdFQktJVF9TT1VQX0NBQ0hFX1NIQVJFRCkgeworCQkJc19tYXhhZ2Ug
PSBnX2hhc2hfdGFibGVfbG9va3VwIChoYXNoLCAicy1tYXhhZ2UiKTsKKwkJCWlmIChzX21heGFn
ZSkgeworCQkJCWZyZXNobmVzc19saWZldGltZSA9IGdfYXNjaWlfc3RydG9sbCAoc19tYXhhZ2Us
IE5VTEwsIDEwKTsKKwkJCQlpZiAoZnJlc2huZXNzX2xpZmV0aW1lKSB7CisJCQkJCS8qIEltcGxp
ZXMgcHJveHktcmV2YWxpZGF0ZS4gVE9ETzogaXMgaXQgdHJ1ZT8gKi8KKwkJCQkJZW50cnktPm11
c3RfcmV2YWxpZGF0ZSA9IFRSVUU7CisJCQkJCXNvdXBfaGVhZGVyX2ZyZWVfcGFyYW1fbGlzdCAo
aGFzaCk7CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKiBJZiAnbWF4LWFn
ZScgY2FjaGUgZGlyZWN0aXZlIGlzIHByZXNlbnQsIHVzZSB0aGF0ICovCisJCW1heF9hZ2UgPSBn
X2hhc2hfdGFibGVfbG9va3VwIChoYXNoLCAibWF4LWFnZSIpOworCQlpZiAobWF4X2FnZSkKKwkJ
CWZyZXNobmVzc19saWZldGltZSA9IGdfYXNjaWlfc3RydG9sbCAobWF4X2FnZSwgTlVMTCwgMTAp
OworCisJCWlmIChmcmVzaG5lc3NfbGlmZXRpbWUpIHsKKwkJCWVudHJ5LT5mcmVzaG5lc3NfbGlm
ZXRpbWUgPSAoZ3VpbnQpTUlOIChmcmVzaG5lc3NfbGlmZXRpbWUsIEdfTUFYVUlOVDMyKTsKKwkJ
CXNvdXBfaGVhZGVyX2ZyZWVfcGFyYW1fbGlzdCAoaGFzaCk7CisJCQlyZXR1cm47CisJCX0KKwl9
CisKKwlpZiAoaGFzaCAhPSBOVUxMKQorCQlzb3VwX2hlYWRlcl9mcmVlX3BhcmFtX2xpc3QgKGhh
c2gpOworCisJLyogSWYgdGhlICdFeHBpcmVzJyByZXNwb25zZSBoZWFkZXIgaXMgcHJlc2VudCwg
dXNlIGl0cyB2YWx1ZQorCSAqIG1pbnVzIHRoZSB2YWx1ZSBvZiB0aGUgJ0RhdGUnIHJlc3BvbnNl
IGhlYWRlcgorCSAqLworCWV4cGlyZXMgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKGVudHJ5
LT5oZWFkZXJzLCAiRXhwaXJlcyIpOworCWRhdGUgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQg
KGVudHJ5LT5oZWFkZXJzLCAiRGF0ZSIpOworCWlmIChleHBpcmVzICYmIGRhdGUpIHsKKwkJU291
cERhdGUgKmV4cGlyZXNfZCwgKmRhdGVfZDsKKwkJdGltZV90IGV4cGlyZXNfdCwgZGF0ZV90Owor
CisJCWV4cGlyZXNfZCA9IHNvdXBfZGF0ZV9uZXdfZnJvbV9zdHJpbmcgKGV4cGlyZXMpOworCQlp
ZiAoZXhwaXJlc19kKSB7CisJCQlkYXRlX2QgPSBzb3VwX2RhdGVfbmV3X2Zyb21fc3RyaW5nIChk
YXRlKTsKKworCQkJZXhwaXJlc190ID0gc291cF9kYXRlX3RvX3RpbWVfdCAoZXhwaXJlc19kKTsK
KwkJCWRhdGVfdCA9IHNvdXBfZGF0ZV90b190aW1lX3QgKGRhdGVfZCk7CisKKwkJCXNvdXBfZGF0
ZV9mcmVlIChleHBpcmVzX2QpOworCQkJc291cF9kYXRlX2ZyZWUgKGRhdGVfZCk7CisKKwkJCWlm
IChleHBpcmVzX3QgJiYgZGF0ZV90KSB7CisJCQkJZW50cnktPmZyZXNobmVzc19saWZldGltZSA9
IChndWludClNQVggKGV4cGlyZXNfdCAtIGRhdGVfdCwgMCk7CisJCQkJcmV0dXJuOworCQkJfQor
CQl9IGVsc2UgeworCQkJLyogSWYgRXhwaXJlcyBpcyBub3QgYSB2YWxpZCBkYXRlIHdlIHNob3Vs
ZAorCQkJICAgdHJlYXQgaXQgYXMgYWxyZWFkeSBleHBpcmVkLCBzZWUgc2VjdGlvbgorCQkJICAg
My4zICovCisJCQllbnRyeS0+ZnJlc2huZXNzX2xpZmV0aW1lID0gMDsKKwkJCXJldHVybjsKKwkJ
fQorCX0KKworCS8qIE90aGVyd2lzZSBhbiBoZXVyaXN0aWMgbWF5IGJlIHVzZWQgKi8KKworCS8q
IEhldXJpc3RpY3MgTVVTVCBOT1QgYmUgdXNlZCB3aXRoIHRoZXNlIHN0YXR1cyBjb2RlcworCSAg
IChzZWN0aW9uIDIuMy4xLjEpICovCisJaWYgKG1zZy0+c3RhdHVzX2NvZGUgIT0gU09VUF9TVEFU
VVNfT0sgJiYKKwkgICAgbXNnLT5zdGF0dXNfY29kZSAhPSBTT1VQX1NUQVRVU19OT05fQVVUSE9S
SVRBVElWRSAmJgorCSAgICBtc2ctPnN0YXR1c19jb2RlICE9IFNPVVBfU1RBVFVTX1BBUlRJQUxf
Q09OVEVOVCAmJgorCSAgICBtc2ctPnN0YXR1c19jb2RlICE9IFNPVVBfU1RBVFVTX01VTFRJUExF
X0NIT0lDRVMgJiYKKwkgICAgbXNnLT5zdGF0dXNfY29kZSAhPSBTT1VQX1NUQVRVU19NT1ZFRF9Q
RVJNQU5FTlRMWSAmJgorCSAgICBtc2ctPnN0YXR1c19jb2RlICE9IFNPVVBfU1RBVFVTX0dPTkUp
CisJCWdvdG8gZXhwaXJlOworCisJLyogVE9ETzogYXR0YWNoIHdhcm5pbmcgMTEzIGlmIHJlc3Bv
bnNlJ3MgY3VycmVudF9hZ2UgaXMgbW9yZQorCSAgIHRoYW4gMjRoIChzZWN0aW9uIDIuMy4xLjEp
IHdoZW4gdXNpbmcgaGV1cmlzdGljcyAqLworCisJLyogTGFzdC1Nb2RpZmllZCBiYXNlZCBoZXVy
aXN0aWMgKi8KKwlsYXN0X21vZGlmaWVkID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0IChlbnRy
eS0+aGVhZGVycywgIkxhc3QtTW9kaWZpZWQiKTsKKwlpZiAobGFzdF9tb2RpZmllZCkgeworCQlT
b3VwRGF0ZSAqc291cF9kYXRlOworCQl0aW1lX3Qgbm93LCBsYXN0X21vZGlmaWVkX3Q7CisKKwkJ
c291cF9kYXRlID0gc291cF9kYXRlX25ld19mcm9tX3N0cmluZyAobGFzdF9tb2RpZmllZCk7CisJ
CWxhc3RfbW9kaWZpZWRfdCA9IHNvdXBfZGF0ZV90b190aW1lX3QgKHNvdXBfZGF0ZSk7CisJCW5v
dyA9IHRpbWUgKE5VTEwpOworCisjZGVmaW5lIEhFVVJJU1RJQ19GQUNUT1IgMC4xIC8qIEZyb20g
U2VjdGlvbiAyLjMuMS4xICovCisKKwkJZW50cnktPmZyZXNobmVzc19saWZldGltZSA9IE1BWCAo
MCwgKG5vdyAtIGxhc3RfbW9kaWZpZWRfdCkgKiBIRVVSSVNUSUNfRkFDVE9SKTsKKwkJc291cF9k
YXRlX2ZyZWUgKHNvdXBfZGF0ZSk7CisJfQorCisJcmV0dXJuOworCisgZXhwaXJlOgorCS8qIElm
IGFsbCBlbHNlIGZhaWxzLCBtYWtlIHRoZSBlbnRyeSBleHBpcmUgaW1tZWRpYXRlbHkgKi8KKwll
bnRyeS0+ZnJlc2huZXNzX2xpZmV0aW1lID0gMDsKK30KKworc3RhdGljIFdlYktpdFNvdXBDYWNo
ZUVudHJ5ICoKK3dlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X25ldyAoV2ViS2l0U291cENhY2hlICpj
YWNoZSwgU291cE1lc3NhZ2UgKm1zZywgdGltZV90IHJlcXVlc3RfdGltZSwgdGltZV90IHJlc3Bv
bnNlX3RpbWUpCit7CisJV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5OworCVNvdXBNZXNzYWdl
SGVhZGVycyAqaGVhZGVyczsKKwljb25zdCBjaGFyICpkYXRlOworCWNoYXIgKm1kNTsKKworCWVu
dHJ5ID0gZ19zbGljZV9uZXcwIChXZWJLaXRTb3VwQ2FjaGVFbnRyeSk7CisJZW50cnktPmRpcnR5
ID0gRkFMU0U7CisJZW50cnktPndyaXRpbmcgPSBGQUxTRTsKKwllbnRyeS0+Z290X2JvZHkgPSBG
QUxTRTsKKwllbnRyeS0+YmVpbmdfdmFsaWRhdGVkID0gRkFMU0U7CisJZW50cnktPmRhdGEgPSBn
X3N0cmluZ19uZXcgKE5VTEwpOworCWVudHJ5LT5wb3MgPSAwOworCWVudHJ5LT5lcnJvciA9IE5V
TEw7CisKKwkvKiBrZXkgJiBmaWxlbmFtZSAqLworCWVudHJ5LT5rZXkgPSBzb3VwX21lc3NhZ2Vf
Z2V0X2NhY2hlX2tleSAobXNnKTsKKwltZDUgPSBnX2NvbXB1dGVfY2hlY2tzdW1fZm9yX3N0cmlu
ZyAoR19DSEVDS1NVTV9NRDUsIGVudHJ5LT5rZXksIC0xKTsKKwllbnRyeS0+ZmlsZW5hbWUgPSBn
X2J1aWxkX2ZpbGVuYW1lIChjYWNoZS0+cHJpdi0+Y2FjaGVfZGlyLCBtZDUsIE5VTEwpOworCWdf
ZnJlZSAobWQ1KTsKKworCS8qIEhlYWRlcnMgKi8KKwloZWFkZXJzID0gc291cF9tZXNzYWdlX2hl
YWRlcnNfbmV3IChTT1VQX01FU1NBR0VfSEVBREVSU19SRVNQT05TRSk7CisJc291cF9tZXNzYWdl
X2hlYWRlcnNfZm9yZWFjaCAobXNnLT5yZXNwb25zZV9oZWFkZXJzLAorCQkJCSAgICAgIChTb3Vw
TWVzc2FnZUhlYWRlcnNGb3JlYWNoRnVuYyljb3B5X2hlYWRlcnMsCisJCQkJICAgICAgaGVhZGVy
cyk7CisJZW50cnktPmhlYWRlcnMgPSBoZWFkZXJzOworCisJLyogTFJVIGxpc3QgKi8KKwllbnRy
eS0+aGl0cyA9IDA7CisKKwkvKiBTZWN0aW9uIDIuMy4xLCBGcmVzaG5lc3MgTGlmZXRpbWUgKi8K
Kwl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9zZXRfZnJlc2huZXNzIChlbnRyeSwgbXNnLCBjYWNo
ZSk7CisKKwkvKiBTZWN0aW9uIDIuMy4yLCBDYWxjdWxhdGluZyBBZ2UgKi8KKwlkYXRlID0gc291
cF9tZXNzYWdlX2hlYWRlcnNfZ2V0IChlbnRyeS0+aGVhZGVycywgIkRhdGUiKTsKKworCWlmIChk
YXRlKSB7CisJCVNvdXBEYXRlICpzb3VwX2RhdGU7CisJCWNvbnN0IGNoYXIgKmFnZTsKKwkJdGlt
ZV90IGRhdGVfdmFsdWUsIGFwcGFyZW50X2FnZSwgY29ycmVjdGVkX3JlY2VpdmVkX2FnZSwgcmVz
cG9uc2VfZGVsYXksIGFnZV92YWx1ZSA9IDA7CisKKwkJc291cF9kYXRlID0gc291cF9kYXRlX25l
d19mcm9tX3N0cmluZyAoZGF0ZSk7CisJCWRhdGVfdmFsdWUgPSBzb3VwX2RhdGVfdG9fdGltZV90
IChzb3VwX2RhdGUpOworCQlzb3VwX2RhdGVfZnJlZSAoc291cF9kYXRlKTsKKworCQlhZ2UgPSBz
b3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKGVudHJ5LT5oZWFkZXJzLCAiQWdlIik7CisJCWlmIChh
Z2UpCisJCQlhZ2VfdmFsdWUgPSBnX2FzY2lpX3N0cnRvbGwgKGFnZSwgTlVMTCwgMTApOworCisJ
CWVudHJ5LT5yZXNwb25zZV90aW1lID0gcmVzcG9uc2VfdGltZTsKKwkJYXBwYXJlbnRfYWdlID0g
TUFYICgwLCBlbnRyeS0+cmVzcG9uc2VfdGltZSAtIGRhdGVfdmFsdWUpOworCQljb3JyZWN0ZWRf
cmVjZWl2ZWRfYWdlID0gTUFYIChhcHBhcmVudF9hZ2UsIGFnZV92YWx1ZSk7CisJCXJlc3BvbnNl
X2RlbGF5ID0gZW50cnktPnJlc3BvbnNlX3RpbWUgLSByZXF1ZXN0X3RpbWU7CisJCWVudHJ5LT5j
b3JyZWN0ZWRfaW5pdGlhbF9hZ2UgPSBjb3JyZWN0ZWRfcmVjZWl2ZWRfYWdlICsgcmVzcG9uc2Vf
ZGVsYXk7CisJfSBlbHNlIHsKKwkJLyogSXMgdGhpcyBjb3JyZWN0ID8gKi8KKwkJZW50cnktPmNv
cnJlY3RlZF9pbml0aWFsX2FnZSA9IHRpbWUgKE5VTEwpOworCX0KKworCXJldHVybiBlbnRyeTsK
K30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX2NhY2hlX3dyaXRpbmdfZml4dHVyZV9mcmVl
IChXZWJLaXRTb3VwQ2FjaGVXcml0aW5nRml4dHVyZSAqZml4dHVyZSkKK3sKKwkvKiBGcmVlIGZp
eHR1cmUuIEFuZCBkaXNjb25uZWN0IHNpZ25hbHMsIHdlIGRvbid0IHdhbnQgdG8KKwkgICBsaXN0
ZW4gdG8gbW9yZSBTb3VwTWVzc2FnZSBldmVudHMgYXMgd2UncmUgZmluaXNoZWQgd2l0aAorCSAg
IHRoaXMgcmVzb3VyY2UgKi8KKwlpZiAoZ19zaWduYWxfaGFuZGxlcl9pc19jb25uZWN0ZWQgKGZp
eHR1cmUtPm1zZywgZml4dHVyZS0+Z290X2NodW5rX2hhbmRsZXIpKQorCQlnX3NpZ25hbF9oYW5k
bGVyX2Rpc2Nvbm5lY3QgKGZpeHR1cmUtPm1zZywgZml4dHVyZS0+Z290X2NodW5rX2hhbmRsZXIp
OworCWlmIChnX3NpZ25hbF9oYW5kbGVyX2lzX2Nvbm5lY3RlZCAoZml4dHVyZS0+bXNnLCBmaXh0
dXJlLT5nb3RfYm9keV9oYW5kbGVyKSkKKwkJZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0IChm
aXh0dXJlLT5tc2csIGZpeHR1cmUtPmdvdF9ib2R5X2hhbmRsZXIpOworCWlmIChnX3NpZ25hbF9o
YW5kbGVyX2lzX2Nvbm5lY3RlZCAoZml4dHVyZS0+bXNnLCBmaXh0dXJlLT5yZXN0YXJ0ZWRfaGFu
ZGxlcikpCisJCWdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCAoZml4dHVyZS0+bXNnLCBmaXh0
dXJlLT5yZXN0YXJ0ZWRfaGFuZGxlcik7CisJZ19vYmplY3RfdW5yZWYgKGZpeHR1cmUtPm1zZyk7
CisJZ19vYmplY3RfdW5yZWYgKGZpeHR1cmUtPmNhY2hlKTsKKwlnX3NsaWNlX2ZyZWUgKFdlYktp
dFNvdXBDYWNoZVdyaXRpbmdGaXh0dXJlLCBmaXh0dXJlKTsKK30KKworc3RhdGljIHZvaWQKK2Ns
b3NlX3JlYWR5X2NiIChHT2JqZWN0ICpzb3VyY2UsIEdBc3luY1Jlc3VsdCAqcmVzdWx0LCBXZWJL
aXRTb3VwQ2FjaGVXcml0aW5nRml4dHVyZSAqZml4dHVyZSkKK3sKKwlXZWJLaXRTb3VwQ2FjaGVF
bnRyeSAqZW50cnkgPSBmaXh0dXJlLT5lbnRyeTsKKwlXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlID0g
Zml4dHVyZS0+Y2FjaGU7CisJR091dHB1dFN0cmVhbSAqc3RyZWFtID0gR19PVVRQVVRfU1RSRUFN
IChzb3VyY2UpOworCWdvZmZzZXQgY29udGVudF9sZW5ndGg7CisKKwlnX3dhcm5faWZfZmFpbCAo
ZW50cnktPmVycm9yID09IE5VTEwpOworCisJLyogRklYTUU6IHdoYXQgZG8gd2UgZG8gb24gZXJy
b3IgPyAqLworCisJaWYgKHN0cmVhbSkgeworCQlnX291dHB1dF9zdHJlYW1fY2xvc2VfZmluaXNo
IChzdHJlYW0sIHJlc3VsdCwgTlVMTCk7CisJCWdfb2JqZWN0X3VucmVmIChzdHJlYW0pOworCX0K
KwllbnRyeS0+c3RyZWFtID0gTlVMTDsKKworCWNvbnRlbnRfbGVuZ3RoID0gc291cF9tZXNzYWdl
X2hlYWRlcnNfZ2V0X2NvbnRlbnRfbGVuZ3RoIChlbnRyeS0+aGVhZGVycyk7CisKKwkvKiBJZiB0
aGUgcHJvY2VzcyB3YXMgY2FuY2VsbGVkLCB0aGVuIGRlbGV0ZSB0aGUgZW50cnkgZnJvbQorCSAg
IHRoZSBjYWNoZS4gRG8gaXQgYWxzbyBpZiB0aGUgc2l6ZSBvZiBhIGNodW5rZWQgcmVzb3VyY2Ug
aXMKKwkgICB0b28gbXVjaCBmb3IgdGhlIGNhY2hlICovCisJaWYgKGdfY2FuY2VsbGFibGVfaXNf
Y2FuY2VsbGVkIChlbnRyeS0+Y2FuY2VsbGFibGUpKSB7CisJCWVudHJ5LT5kaXJ0eSA9IEZBTFNF
OworCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9yZW1vdmUgKGNhY2hlLCBlbnRyeSk7CisJCXdl
YmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUgKGVudHJ5LCBUUlVFKTsKKwkJZW50cnkgPSBOVUxM
OworCX0gZWxzZSBpZiAoKHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9lbmNvZGluZyAoZW50cnkt
PmhlYWRlcnMpID09IFNPVVBfRU5DT0RJTkdfQ0hVTktFRCkgfHwKKwkJICAgZW50cnktPmxlbmd0
aCAhPSBjb250ZW50X2xlbmd0aCkgeworCQkvKiogVHdvIG9wdGlvbnMgaGVyZToKKwkJICoKKwkJ
ICogMS4gImNodW5rZWQiIGRhdGEsIGVudHJ5IHdhcyB0ZW1wb3JhcmlseSBhZGRlZCB0bworCQkg
KiBjYWNoZSAoYXMgY29udGVudC1sZW5ndGggaXMgMCkgYW5kIG5vdyB0aGF0IHdlIGhhdmUKKwkJ
ICogdGhlIGFjdHVhbCBzaXplIHdlIGhhdmUgdG8gZXZhbHVhdGUgaWYgd2Ugd2FudCBpdAorCQkg
KiBpbiB0aGUgY2FjaGUgb3Igbm90CisJCSAqCisJCSAqIDIuIENvbnRlbnQtTGVuZ3RoIGhhcyBh
IGRpZmZlcmVudCB2YWx1ZSB0aGFuIGFjdHVhbAorCQkgKiBsZW5ndGgsIG1lYW5zIHRoYXQgdGhl
IGNvbnRlbnQgd2FzIGVuY29kZWQgZm9yCisJCSAqIHRyYW5zbWlzc2lvbiAodHlwaWNhbGx5IGNv
bXByZXNzZWQpIGFuZCB0aHVzIHdlCisJCSAqIGhhdmUgdG8gc3Vic3RyYWN0IHRoZSBjb250ZW50
LWxlbmd0aCB2YWx1ZSB0aGF0IHdhcworCQkgKiBhZGRlZCB0byB0aGUgY2FjaGUgYW5kIGFkZCB0
aGUgdW5lbmNvZGVkIGxlbmd0aAorCQkgKiovCisJCWdpbnQgbGVuZ3RoX3RvX2FkZCA9IGVudHJ5
LT5sZW5ndGggLSBjb250ZW50X2xlbmd0aDsKKworCQkvKiBNYWtlIHJvb20gaW4gY2FjaGUgaWYg
bmVlZGVkICovCisJCWlmIChjYWNoZV9hY2NlcHRzX2VudHJpZXNfb2Zfc2l6ZSAoY2FjaGUsIGxl
bmd0aF90b19hZGQpKSB7CisJCQltYWtlX3Jvb21fZm9yX25ld19lbnRyeSAoY2FjaGUsIGxlbmd0
aF90b19hZGQpOworCisJCQljYWNoZS0+cHJpdi0+c2l6ZSArPSBsZW5ndGhfdG9fYWRkOworCQl9
IGVsc2UgeworCQkJZW50cnktPmRpcnR5ID0gRkFMU0U7CisJCQl3ZWJraXRfc291cF9jYWNoZV9l
bnRyeV9yZW1vdmUgKGNhY2hlLCBlbnRyeSk7CisJCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9m
cmVlIChlbnRyeSwgVFJVRSk7CisJCQllbnRyeSA9IE5VTEw7CisJCX0KKwl9CisKKwlpZiAoZW50
cnkpIHsKKwkJLyogR2V0IHJpZCBvZiB0aGUgR1N0cmluZyBpbiBtZW1vcnkgZm9yIHRoZSByZXNv
dXJjZSBub3cgKi8KKwkJaWYgKGVudHJ5LT5kYXRhKSB7CisJCQlnX3N0cmluZ19mcmVlIChlbnRy
eS0+ZGF0YSwgVFJVRSk7CisJCQllbnRyeS0+ZGF0YSA9IE5VTEw7CisJCX0KKworCQllbnRyeS0+
ZGlydHkgPSBGQUxTRTsKKwkJZW50cnktPndyaXRpbmcgPSBGQUxTRTsKKwkJZW50cnktPmdvdF9i
b2R5ID0gRkFMU0U7CisJCWVudHJ5LT5wb3MgPSAwOworCisJCWdfb2JqZWN0X3VucmVmIChlbnRy
eS0+Y2FuY2VsbGFibGUpOworCQllbnRyeS0+Y2FuY2VsbGFibGUgPSBOVUxMOworCX0KKworCWNh
Y2hlLT5wcml2LT5uX3BlbmRpbmctLTsKKworCS8qIEZyZWVzICovCisJd2Via2l0X3NvdXBfY2Fj
aGVfd3JpdGluZ19maXh0dXJlX2ZyZWUgKGZpeHR1cmUpOworfQorCitzdGF0aWMgdm9pZAord3Jp
dGVfcmVhZHlfY2IgKEdPYmplY3QgKnNvdXJjZSwgR0FzeW5jUmVzdWx0ICpyZXN1bHQsIFdlYktp
dFNvdXBDYWNoZVdyaXRpbmdGaXh0dXJlICpmaXh0dXJlKQoreworCUdPdXRwdXRTdHJlYW0gKnN0
cmVhbSA9IEdfT1VUUFVUX1NUUkVBTSAoc291cmNlKTsKKwlHRXJyb3IgKmVycm9yID0gTlVMTDsK
Kwlnc3NpemUgd3JpdGVfc2l6ZTsKKwlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkgPSBmaXh0
dXJlLT5lbnRyeTsKKworCWlmIChnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxlZCAoZW50cnktPmNh
bmNlbGxhYmxlKSkgeworCQlnX291dHB1dF9zdHJlYW1fY2xvc2VfYXN5bmMgKHN0cmVhbSwKKwkJ
CQkJICAgICBHX1BSSU9SSVRZX0xPVywKKwkJCQkJICAgICBlbnRyeS0+Y2FuY2VsbGFibGUsCisJ
CQkJCSAgICAgKEdBc3luY1JlYWR5Q2FsbGJhY2spY2xvc2VfcmVhZHlfY2IsCisJCQkJCSAgICAg
Zml4dHVyZSk7CisJCXJldHVybjsKKwl9CisKKwl3cml0ZV9zaXplID0gZ19vdXRwdXRfc3RyZWFt
X3dyaXRlX2ZpbmlzaCAoc3RyZWFtLCByZXN1bHQsICZlcnJvcik7CisJaWYgKHdyaXRlX3NpemUg
PD0gMCB8fCBlcnJvcikgeworCQlpZiAoZXJyb3IpCisJCQllbnRyeS0+ZXJyb3IgPSBlcnJvcjsK
KwkJZ19vdXRwdXRfc3RyZWFtX2Nsb3NlX2FzeW5jIChzdHJlYW0sCisJCQkJCSAgICAgR19QUklP
UklUWV9MT1csCisJCQkJCSAgICAgZW50cnktPmNhbmNlbGxhYmxlLAorCQkJCQkgICAgIChHQXN5
bmNSZWFkeUNhbGxiYWNrKWNsb3NlX3JlYWR5X2NiLAorCQkJCQkgICAgIGZpeHR1cmUpOworCQkv
KiBGSVhNRTogV2Ugc2hvdWxkIGNvbXBsZXRlbHkgc3RvcCBjYWNoaW5nIHRoZQorCQkgICByZXNv
dXJjZSBhdCB0aGlzIHBvaW50ICovCisJfSBlbHNlIHsKKwkJZW50cnktPnBvcyArPSB3cml0ZV9z
aXplOworCisJCS8qIEFyZSB3ZSBzdGlsbCB3cml0aW5nIGFuZCBpcyB0aGVyZSBuZXcgZGF0YSB0
byB3cml0ZQorCQkgICBhbHJlYWR5ID8gKi8KKwkJaWYgKGVudHJ5LT5kYXRhICYmIGVudHJ5LT5w
b3MgPCBlbnRyeS0+ZGF0YS0+bGVuKSB7CisJCQlnX291dHB1dF9zdHJlYW1fd3JpdGVfYXN5bmMg
KGVudHJ5LT5zdHJlYW0sCisJCQkJCQkgICAgIGVudHJ5LT5kYXRhLT5zdHIgKyBlbnRyeS0+cG9z
LAorCQkJCQkJICAgICBlbnRyeS0+ZGF0YS0+bGVuIC0gZW50cnktPnBvcywKKwkJCQkJCSAgICAg
R19QUklPUklUWV9MT1csCisJCQkJCQkgICAgIGVudHJ5LT5jYW5jZWxsYWJsZSwKKwkJCQkJCSAg
ICAgKEdBc3luY1JlYWR5Q2FsbGJhY2spd3JpdGVfcmVhZHlfY2IsCisJCQkJCQkgICAgIGZpeHR1
cmUpOworCQl9IGVsc2UgeworCQkJZW50cnktPndyaXRpbmcgPSBGQUxTRTsKKworCQkJaWYgKGVu
dHJ5LT5nb3RfYm9keSkgeworCQkJCS8qIElmIHdlIGFscmVhZHkgcmVjZWl2ZWQgJ2dvdC1ib2R5
JworCQkJCSAgIGFuZCB3ZSBoYXZlIHdyaXR0ZW4gYWxsIHRoZSBkYXRhLAorCQkJCSAgIHdlIGNh
biBjbG9zZSB0aGUgc3RyZWFtICovCisJCQkJZ19vdXRwdXRfc3RyZWFtX2Nsb3NlX2FzeW5jIChl
bnRyeS0+c3RyZWFtLAorCQkJCQkJCSAgICAgR19QUklPUklUWV9MT1csCisJCQkJCQkJICAgICBl
bnRyeS0+Y2FuY2VsbGFibGUsCisJCQkJCQkJICAgICAoR0FzeW5jUmVhZHlDYWxsYmFjayljbG9z
ZV9yZWFkeV9jYiwKKwkJCQkJCQkgICAgIGZpeHR1cmUpOworCQkJfQorCQl9CisJfQorfQorCitz
dGF0aWMgdm9pZAorbXNnX2dvdF9jaHVua19jYiAoU291cE1lc3NhZ2UgKm1zZywgU291cEJ1ZmZl
ciAqY2h1bmssIFdlYktpdFNvdXBDYWNoZVdyaXRpbmdGaXh0dXJlICpmaXh0dXJlKQoreworCVdl
YktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSA9IGZpeHR1cmUtPmVudHJ5OworCisJZ19yZXR1cm5f
aWZfZmFpbCAoY2h1bmstPmRhdGEgJiYgY2h1bmstPmxlbmd0aCk7CisJZ19yZXR1cm5faWZfZmFp
bCAoZW50cnkpOworCisJLyogSWdub3JlIHRoaXMgaWYgdGhlIHdyaXRpbmcgb3IgYXBwZW5kaW5n
IHdhcyBjYW5jZWxsZWQgKi8KKwlpZiAoIWdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkIChlbnRy
eS0+Y2FuY2VsbGFibGUpKSB7CisJCWdfc3RyaW5nX2FwcGVuZF9sZW4gKGVudHJ5LT5kYXRhLCBj
aHVuay0+ZGF0YSwgY2h1bmstPmxlbmd0aCk7CisJCWVudHJ5LT5sZW5ndGggPSBlbnRyeS0+ZGF0
YS0+bGVuOworCisJCWlmICghY2FjaGVfYWNjZXB0c19lbnRyaWVzX29mX3NpemUgKGZpeHR1cmUt
PmNhY2hlLCBlbnRyeS0+bGVuZ3RoKSkgeworCQkJLyogUXVpY2tseSBjYW5jZWwgdGhlIGNhY2hp
bmcgb2YgdGhlIHJlc291cmNlICovCisJCQlnX2NhbmNlbGxhYmxlX2NhbmNlbCAoZW50cnktPmNh
bmNlbGxhYmxlKTsKKwkJfQorCX0KKworCS8qIEZJWE1FOiByZW1vdmUgdGhlIGVycm9yIGNoZWNr
IHdoZW4gd2UgY2FuY2VsIHRoZSBjYWNoaW5nIGF0CisJICAgdGhlIGZpcnN0IHdyaXRlIGVycm9y
ICovCisJLyogT25seSB3cml0ZSBpZiB0aGUgZW50cnkgc3RyZWFtIGlzIHJlYWR5ICovCisJaWYg
KGVudHJ5LT53cml0aW5nID09IEZBTFNFICYmIGVudHJ5LT5lcnJvciA9PSBOVUxMICYmIGVudHJ5
LT5zdHJlYW0pIHsKKwkJR1N0cmluZyAqZGF0YSA9IGVudHJ5LT5kYXRhOworCQllbnRyeS0+d3Jp
dGluZyA9IFRSVUU7CisJCWdfb3V0cHV0X3N0cmVhbV93cml0ZV9hc3luYyAoZW50cnktPnN0cmVh
bSwKKwkJCQkJICAgICBkYXRhLT5zdHIgKyBlbnRyeS0+cG9zLAorCQkJCQkgICAgIGRhdGEtPmxl
biAtIGVudHJ5LT5wb3MsCisJCQkJCSAgICAgR19QUklPUklUWV9MT1csCisJCQkJCSAgICAgZW50
cnktPmNhbmNlbGxhYmxlLAorCQkJCQkgICAgIChHQXN5bmNSZWFkeUNhbGxiYWNrKXdyaXRlX3Jl
YWR5X2NiLAorCQkJCQkgICAgIGZpeHR1cmUpOworCX0KK30KKworc3RhdGljIHZvaWQKK21zZ19n
b3RfYm9keV9jYiAoU291cE1lc3NhZ2UgKm1zZywgV2ViS2l0U291cENhY2hlV3JpdGluZ0ZpeHR1
cmUgKmZpeHR1cmUpCit7CisJV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5ID0gZml4dHVyZS0+
ZW50cnk7CisJZ19yZXR1cm5faWZfZmFpbCAoZW50cnkpOworCisJZW50cnktPmdvdF9ib2R5ID0g
VFJVRTsKKworCWlmICghZW50cnktPnN0cmVhbSAmJiBlbnRyeS0+cG9zICE9IGVudHJ5LT5sZW5n
dGgpCisJCS8qIFRoZSBzdHJlYW0gaXMgbm90IHJlYWR5IHRvIGJlIHdyaXR0ZW4gYnV0IHdlIHN0
aWxsCisJCSAgIGhhdmUgZGF0YSB0byB3cml0ZSwgd2UnbGwgd3JpdGUgaXQgd2hlbiB0aGUgc3Ry
ZWFtCisJCSAgIGlzIG9wZW5lZCBmb3Igd3JpdGluZyAqLworCQlyZXR1cm47CisKKworCWlmIChl
bnRyeS0+cG9zICE9IGVudHJ5LT5sZW5ndGgpIHsKKwkJLyogSWYgd2Ugc3RpbGwgaGF2ZSBkYXRh
IHRvIHdyaXRlLCB3cml0ZSBpdCwKKwkJICAgd3JpdGVfcmVhZHlfY2Igd2lsbCBjbG9zZSB0aGUg
c3RyZWFtICovCisJCWlmIChlbnRyeS0+d3JpdGluZyA9PSBGQUxTRSAmJiBlbnRyeS0+ZXJyb3Ig
PT0gTlVMTCAmJiBlbnRyeS0+c3RyZWFtKSB7CisJCQlnX291dHB1dF9zdHJlYW1fd3JpdGVfYXN5
bmMgKGVudHJ5LT5zdHJlYW0sCisJCQkJCQkgICAgIGVudHJ5LT5kYXRhLT5zdHIgKyBlbnRyeS0+
cG9zLAorCQkJCQkJICAgICBlbnRyeS0+ZGF0YS0+bGVuIC0gZW50cnktPnBvcywKKwkJCQkJCSAg
ICAgR19QUklPUklUWV9MT1csCisJCQkJCQkgICAgIGVudHJ5LT5jYW5jZWxsYWJsZSwKKwkJCQkJ
CSAgICAgKEdBc3luY1JlYWR5Q2FsbGJhY2spd3JpdGVfcmVhZHlfY2IsCisJCQkJCQkgICAgIGZp
eHR1cmUpOworCQl9CisJCXJldHVybjsKKwl9CisKKwlpZiAoZW50cnktPnN0cmVhbSAmJiAhZW50
cnktPndyaXRpbmcpCisJCWdfb3V0cHV0X3N0cmVhbV9jbG9zZV9hc3luYyAoZW50cnktPnN0cmVh
bSwKKwkJCQkJICAgICBHX1BSSU9SSVRZX0xPVywKKwkJCQkJICAgICBlbnRyeS0+Y2FuY2VsbGFi
bGUsCisJCQkJCSAgICAgKEdBc3luY1JlYWR5Q2FsbGJhY2spY2xvc2VfcmVhZHlfY2IsCisJCQkJ
CSAgICAgZml4dHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgord2Via2l0X3NvdXBfY2FjaGVf
ZW50cnlfcmVtb3ZlIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLCBXZWJLaXRTb3VwQ2FjaGVFbnRy
eSAqZW50cnkpCit7CisJR0xpc3QgKmxydV9pdGVtOworCisJLyogaWYgKGVudHJ5LT5kaXJ0eSAm
JiAhZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQgKGVudHJ5LT5jYW5jZWxsYWJsZSkpIHsgKi8K
KwlpZiAoZW50cnktPmRpcnR5KSB7CisJCWdfY2FuY2VsbGFibGVfY2FuY2VsIChlbnRyeS0+Y2Fu
Y2VsbGFibGUpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJZ19hc3NlcnQgKGdfbGlzdF9sZW5n
dGggKGNhY2hlLT5wcml2LT5scnVfc3RhcnQpID09IGdfaGFzaF90YWJsZV9zaXplIChjYWNoZS0+
cHJpdi0+Y2FjaGUpKTsKKworCS8qIFJlbW92ZSBmcm9tIGNhY2hlICovCisJaWYgKCFnX2hhc2hf
dGFibGVfcmVtb3ZlIChjYWNoZS0+cHJpdi0+Y2FjaGUsIGVudHJ5LT5rZXkpKQorCQlyZXR1cm4g
RkFMU0U7CisKKwkvKiBSZW1vdmUgZnJvbSBMUlUgKi8KKwlscnVfaXRlbSA9IGdfbGlzdF9maW5k
IChjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0LCBlbnRyeSk7CisJY2FjaGUtPnByaXYtPmxydV9zdGFy
dCA9IGdfbGlzdF9kZWxldGVfbGluayAoY2FjaGUtPnByaXYtPmxydV9zdGFydCwgbHJ1X2l0ZW0p
OworCisJLyogQWRqdXN0IGNhY2hlIHNpemUgKi8KKwljYWNoZS0+cHJpdi0+c2l6ZSAtPSBlbnRy
eS0+bGVuZ3RoOworCisJZ19hc3NlcnQgKGdfbGlzdF9sZW5ndGggKGNhY2hlLT5wcml2LT5scnVf
c3RhcnQpID09IGdfaGFzaF90YWJsZV9zaXplIChjYWNoZS0+cHJpdi0+Y2FjaGUpKTsKKworCXJl
dHVybiBUUlVFOworfQorCitzdGF0aWMgZ2ludAorbHJ1X2NvbXBhcmVfZnVuYyAoZ2NvbnN0cG9p
bnRlciBhLCBnY29uc3Rwb2ludGVyIGIpCit7CisJV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5
X2EgPSAoV2ViS2l0U291cENhY2hlRW50cnkgKilhOworCVdlYktpdFNvdXBDYWNoZUVudHJ5ICpl
bnRyeV9iID0gKFdlYktpdFNvdXBDYWNoZUVudHJ5ICopYjsKKworCS8qKiBUaGUgcmF0aW9uYWxl
IG9mIHRoaXMgc29ydGluZyBmdW5jIGlzCisJICoKKwkgKiAxLiBzb3J0IGJ5IGhpdHMgLT4gTFJV
IGFsZ29yaXRobSwgdGhlbgorCSAqCisJICogMi4gc29ydCBieSBmcmVzaG5lc3MgbGlmZXRpbWUs
IHdlIGJldHRlciBkaXNjYXJkIGZpcnN0CisJICogZW50cmllcyB0aGF0IGFyZSBjbG9zZSB0byBl
eHBpcmUKKwkgKgorCSAqIDMuIHNvcnQgYnkgc2l6ZSwgcmVwbGFjZSBmaXJzdCBzbWFsbCBzaXpl
IHJlc291cmNlcyBhcyB0aGV5CisJICogYXJlIGNoZWFwZXIgdG8gZG93bmxvYWQKKwkgKiovCisK
KwkvKiBTb3J0IGJ5IGhpdHMgKi8KKwlpZiAoZW50cnlfYS0+aGl0cyAhPSBlbnRyeV9iLT5oaXRz
KQorCQlyZXR1cm4gZW50cnlfYS0+aGl0cyAtIGVudHJ5X2ItPmhpdHM7CisKKwkvKiBTb3J0IGJ5
IGZyZXNobmVzc19saWZldGltZSAqLworCWlmIChlbnRyeV9hLT5mcmVzaG5lc3NfbGlmZXRpbWUg
IT0gZW50cnlfYi0+ZnJlc2huZXNzX2xpZmV0aW1lKQorCQlyZXR1cm4gZW50cnlfYS0+ZnJlc2hu
ZXNzX2xpZmV0aW1lIC0gZW50cnlfYi0+ZnJlc2huZXNzX2xpZmV0aW1lOworCisJLyogU29ydCBi
eSBzaXplICovCisJcmV0dXJuIGVudHJ5X2EtPmxlbmd0aCAtIGVudHJ5X2ItPmxlbmd0aDsKK30K
Kworc3RhdGljIGdib29sZWFuCitjYWNoZV9hY2NlcHRzX2VudHJpZXNfb2Zfc2l6ZSAoV2ViS2l0
U291cENhY2hlICpjYWNoZSwgZ3VpbnQgbGVuZ3RoX3RvX2FkZCkKK3sKKwkvKiBXZSBjb3VsZCBh
ZGQgaGVyZSBzb21lIG1vcmUgaGV1cmlzdGljcy4gVE9ETzogcmV2aWV3IGhvdworCSAgIHRoaXMg
aXMgZG9uZSBieSBvdGhlciBIVFRQIGNhY2hlcyAqLworCisJcmV0dXJuIGxlbmd0aF90b19hZGQg
PD0gY2FjaGUtPnByaXYtPm1heF9lbnRyeV9kYXRhX3NpemU7Cit9CisKK3N0YXRpYyB2b2lkCitt
YWtlX3Jvb21fZm9yX25ld19lbnRyeSAoV2ViS2l0U291cENhY2hlICpjYWNoZSwgZ3VpbnQgbGVu
Z3RoX3RvX2FkZCkKK3sKKwlHTGlzdCAqbHJ1X2VudHJ5ID0gY2FjaGUtPnByaXYtPmxydV9zdGFy
dDsKKworCS8qIENoZWNrIHRoYXQgdGhlcmUgaXMgZW5vdWdoIHJvb20gZm9yIHRoZSBuZXcgZW50
cnkuIFRoaXMgaXMKKwkgICBhbiBhcHByb3hpbWF0aW9uIGFzIHdlJ3JlIG5vdCB3b3JraW5nIG91
dCB0aGUgc2l6ZSBvZiB0aGUKKwkgICBjYWNoZSBmaWxlIG9yIHRoZSBzaXplIG9mIHRoZSBoZWFk
ZXJzIGZvciBwZXJmb3JtYW5jZQorCSAgIHJlYXNvbnMuIFRPRE86IGNoZWNrIGlmIHRoYXQgd291
bGQgYmUgcmVhbGx5IHRoYXQgZXhwZW5zaXZlICovCisKKwl3aGlsZSAobHJ1X2VudHJ5ICYmCisJ
ICAgICAgIChsZW5ndGhfdG9fYWRkICsgY2FjaGUtPnByaXYtPnNpemUgPiBjYWNoZS0+cHJpdi0+
bWF4X3NpemUpKSB7CisJCVdlYktpdFNvdXBDYWNoZUVudHJ5ICpvbGRfZW50cnkgPSAoV2ViS2l0
U291cENhY2hlRW50cnkgKilscnVfZW50cnktPmRhdGE7CisKKwkJLyogRGlzY2FyZCBlbnRyaWVz
LiBPbmNlIGNhbmNlbGxlZCByZXNvdXJjZXMgd2lsbCBiZQorCQkgKiBmcmVlZCBpbiBjbG9zZV9y
ZWFkeV9jYgorCQkgKi8KKwkJaWYgKHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X3JlbW92ZSAoY2Fj
aGUsIG9sZF9lbnRyeSkpIHsKKwkJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUgKG9sZF9l
bnRyeSwgVFJVRSk7CisJCQlscnVfZW50cnkgPSBjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0OworCQl9
IGVsc2UKKwkJCWxydV9lbnRyeSA9IGdfbGlzdF9uZXh0IChscnVfZW50cnkpOworCX0KK30KKwor
c3RhdGljIGdib29sZWFuCit3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9pbnNlcnRfYnlfa2V5IChX
ZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLAorCQkJCSAgICAgICBjb25zdCBjaGFyICprZXksCisJCQkJ
ICAgICAgIFdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSwKKwkJCQkgICAgICAgZ2Jvb2xlYW4g
c29ydCkKK3sKKwlndWludCBsZW5ndGhfdG9fYWRkID0gMDsKKworCWlmIChzb3VwX21lc3NhZ2Vf
aGVhZGVyc19nZXRfZW5jb2RpbmcgKGVudHJ5LT5oZWFkZXJzKSAhPSBTT1VQX0VOQ09ESU5HX0NI
VU5LRUQpCisJCWxlbmd0aF90b19hZGQgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfY29udGVu
dF9sZW5ndGggKGVudHJ5LT5oZWFkZXJzKTsKKworCS8qIENoZWNrIGlmIHdlIGFyZSBnb2luZyB0
byBzdG9yZSB0aGUgcmVzb3VyY2UgZGVwZW5kaW5nIG9uIGl0cyBzaXplICovCisJaWYgKGxlbmd0
aF90b19hZGQpIHsKKwkJaWYgKCFjYWNoZV9hY2NlcHRzX2VudHJpZXNfb2Zfc2l6ZSAoY2FjaGUs
IGxlbmd0aF90b19hZGQpKQorCQkJcmV0dXJuIEZBTFNFOworCisJCS8qIE1ha2Ugcm9vbSBmb3Ig
bmV3IGVudHJ5IGlmIG5lZWRlZCAqLworCQltYWtlX3Jvb21fZm9yX25ld19lbnRyeSAoY2FjaGUs
IGxlbmd0aF90b19hZGQpOworCX0KKworCWdfaGFzaF90YWJsZV9pbnNlcnQgKGNhY2hlLT5wcml2
LT5jYWNoZSwgZ19zdHJkdXAgKGtleSksIGVudHJ5KTsKKworCS8qIENvbXB1dGUgbmV3IGNhY2hl
IHNpemUgKi8KKwljYWNoZS0+cHJpdi0+c2l6ZSArPSBsZW5ndGhfdG9fYWRkOworCisJLyogVXBk
YXRlIExSVSAqLworCWlmIChzb3J0KQorCQljYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0ID0gZ19saXN0
X2luc2VydF9zb3J0ZWQgKGNhY2hlLT5wcml2LT5scnVfc3RhcnQsIGVudHJ5LCBscnVfY29tcGFy
ZV9mdW5jKTsKKwllbHNlCisJCWNhY2hlLT5wcml2LT5scnVfc3RhcnQgPSBnX2xpc3RfcHJlcGVu
ZCAoY2FjaGUtPnByaXYtPmxydV9zdGFydCwgZW50cnkpOworCisJZ19hc3NlcnQgKGdfbGlzdF9s
ZW5ndGggKGNhY2hlLT5wcml2LT5scnVfc3RhcnQpID09IGdfaGFzaF90YWJsZV9zaXplIChjYWNo
ZS0+cHJpdi0+Y2FjaGUpKTsKKworCXJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZAorbXNn
X3Jlc3RhcnRlZF9jYiAoU291cE1lc3NhZ2UgKm1zZywgV2ViS2l0U291cENhY2hlRW50cnkgKmVu
dHJ5KQoreworCS8qIEZJWE1FOiBXaGF0IHNob3VsZCB3ZSBkbyBoZXJlIGV4YWN0bHk/ICovCit9
CisKK3N0YXRpYyB2b2lkCithcHBlbmRfdG9fcmVhZHlfY2IgKEdPYmplY3QgKnNvdXJjZSwgR0Fz
eW5jUmVzdWx0ICpyZXN1bHQsIFdlYktpdFNvdXBDYWNoZVdyaXRpbmdGaXh0dXJlICpmaXh0dXJl
KQoreworCUdGaWxlICpmaWxlID0gKEdGaWxlICopc291cmNlOworCUdPdXRwdXRTdHJlYW0gKnN0
cmVhbTsKKwlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkgPSBmaXh0dXJlLT5lbnRyeTsKKwor
CXN0cmVhbSA9IChHT3V0cHV0U3RyZWFtICopZ19maWxlX2FwcGVuZF90b19maW5pc2ggKGZpbGUs
IHJlc3VsdCwgJmVudHJ5LT5lcnJvcik7CisKKwlpZiAoZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxs
ZWQgKGVudHJ5LT5jYW5jZWxsYWJsZSkgfHwgZW50cnktPmVycm9yKSB7CisJCWZpeHR1cmUtPmNh
Y2hlLT5wcml2LT5uX3BlbmRpbmctLTsKKwkJZW50cnktPmRpcnR5ID0gRkFMU0U7CisJCXdlYmtp
dF9zb3VwX2NhY2hlX2VudHJ5X3JlbW92ZSAoZml4dHVyZS0+Y2FjaGUsIGVudHJ5KTsKKwkJd2Vi
a2l0X3NvdXBfY2FjaGVfZW50cnlfZnJlZSAoZW50cnksIFRSVUUpOworCQl3ZWJraXRfc291cF9j
YWNoZV93cml0aW5nX2ZpeHR1cmVfZnJlZSAoZml4dHVyZSk7CisJCXJldHVybjsKKwl9CisKKwll
bnRyeS0+c3RyZWFtID0gZ19vYmplY3RfcmVmIChzdHJlYW0pOworCWdfb2JqZWN0X3VucmVmIChm
aWxlKTsKKworCS8qIElmIHdlIGFscmVhZHkgZ290IGFsbCB0aGUgZGF0YSB3ZSBoYXZlIHRvIGlu
aXRpYXRlIHRoZQorCSAgIHdyaXRpbmcgaGVyZSwgc2luY2Ugd2Ugd29uJ3QgZ2V0IG1vcmUgJ2dv
dC1jaHVuaycKKwkgICBzaWduYWxzICovCisJaWYgKGVudHJ5LT5nb3RfYm9keSkgeworCQlHU3Ry
aW5nICpkYXRhID0gZW50cnktPmRhdGE7CisKKwkJLyogSXQgY291bGQgaGFwcGVuIHRoYXQgcmVh
ZGluZyB0aGUgZGF0YSBmcm9tIHNlcnZlcgorCQkgICB3YXMgY29tcGxldGVkIGJlZm9yZSB0aGlz
IGhhcHBlbnMuIEluIHRoYXQgY2FzZQorCQkgICB0aGVyZSBpcyBubyBkYXRhICovCisJCWlmIChk
YXRhKSB7CisJCQllbnRyeS0+d3JpdGluZyA9IFRSVUU7CisJCQlnX291dHB1dF9zdHJlYW1fd3Jp
dGVfYXN5bmMgKGVudHJ5LT5zdHJlYW0sCisJCQkJCQkgICAgIGRhdGEtPnN0ciArIGVudHJ5LT5w
b3MsCisJCQkJCQkgICAgIGRhdGEtPmxlbiAtIGVudHJ5LT5wb3MsCisJCQkJCQkgICAgIEdfUFJJ
T1JJVFlfTE9XLAorCQkJCQkJICAgICBlbnRyeS0+Y2FuY2VsbGFibGUsCisJCQkJCQkgICAgIChH
QXN5bmNSZWFkeUNhbGxiYWNrKXdyaXRlX3JlYWR5X2NiLAorCQkJCQkJICAgICBmaXh0dXJlKTsK
KwkJfQorCX0KK30KKwordHlwZWRlZiBzdHJ1Y3QgeworCXRpbWVfdCByZXF1ZXN0X3RpbWU7CisJ
U291cFNlc3Npb25GZWF0dXJlICpmZWF0dXJlOworCWd1bG9uZyBnb3RfaGVhZGVyc19oYW5kbGVy
OworfSBSZXF1ZXN0SGVscGVyOworCitzdGF0aWMgdm9pZAorbXNnX2dvdF9oZWFkZXJzX2NiIChT
b3VwTWVzc2FnZSAqbXNnLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJV2ViS2l0U291cENhY2hl
ICpjYWNoZTsKKwlXZWJLaXRTb3VwQ2FjaGVhYmlsaXR5IGNhY2hlYWJsZTsKKwlSZXF1ZXN0SGVs
cGVyICpoZWxwZXI7CisJdGltZV90IHJlcXVlc3RfdGltZSwgcmVzcG9uc2VfdGltZTsKKworCXJl
c3BvbnNlX3RpbWUgPSB0aW1lIChOVUxMKTsKKworCWhlbHBlciA9IChSZXF1ZXN0SGVscGVyICop
dXNlcl9kYXRhOworCWNhY2hlID0gV0VCS0lUX1NPVVBfQ0FDSEUgKGhlbHBlci0+ZmVhdHVyZSk7
CisJcmVxdWVzdF90aW1lID0gaGVscGVyLT5yZXF1ZXN0X3RpbWU7CisJZ19zaWduYWxfaGFuZGxl
cnNfZGlzY29ubmVjdF9ieV9mdW5jIChtc2csIG1zZ19nb3RfaGVhZGVyc19jYiwgdXNlcl9kYXRh
KTsKKwlnX3NsaWNlX2ZyZWUgKFJlcXVlc3RIZWxwZXIsIGhlbHBlcik7CisKKwljYWNoZWFibGUg
PSB3ZWJraXRfc291cF9jYWNoZV9nZXRfY2FjaGVhYmlsaXR5IChjYWNoZSwgbXNnKTsKKworCWlm
IChjYWNoZWFibGUgJiBXRUJLSVRfU09VUF9DQUNIRV9DQUNIRUFCTEUpIHsKKwkJV2ViS2l0U291
cENhY2hlRW50cnkgKmVudHJ5OworCQljaGFyICprZXk7CisJCUdGaWxlICpmaWxlOworCQlXZWJL
aXRTb3VwQ2FjaGVXcml0aW5nRml4dHVyZSAqZml4dHVyZTsKKworCQkvKiBDaGVjayBpZiB3ZSBh
cmUgYWxyZWFkeSBjYWNoaW5nIHRoaXMgcmVzb3VyY2UgKi8KKwkJa2V5ID0gc291cF9tZXNzYWdl
X2dldF9jYWNoZV9rZXkgKG1zZyk7CisJCWVudHJ5ID0gZ19oYXNoX3RhYmxlX2xvb2t1cCAoY2Fj
aGUtPnByaXYtPmNhY2hlLCBrZXkpOworCQlnX2ZyZWUgKGtleSk7CisKKwkJaWYgKGVudHJ5ICYm
IGVudHJ5LT5kaXJ0eSkKKwkJCXJldHVybjsKKworCQkvKiBDcmVhdGUgYSBuZXcgZW50cnksIGRl
bGV0aW5nIGFueSBvbGQgb25lIGlmIHByZXNlbnQgKi8KKwkJaWYgKGVudHJ5KSB7CisJCQl3ZWJr
aXRfc291cF9jYWNoZV9lbnRyeV9yZW1vdmUgKGNhY2hlLCBlbnRyeSk7CisJCQl3ZWJraXRfc291
cF9jYWNoZV9lbnRyeV9mcmVlIChlbnRyeSwgVFJVRSk7CisJCX0KKworCQllbnRyeSA9IHdlYmtp
dF9zb3VwX2NhY2hlX2VudHJ5X25ldyAoY2FjaGUsIG1zZywgcmVxdWVzdF90aW1lLCByZXNwb25z
ZV90aW1lKTsKKwkJZW50cnktPmhpdHMgPSAxOworCisJCS8qIERvIG5vdCBjb250aW51ZSBpZiBp
dCBjYW4gbm90IGJlIHN0b3JlZCAqLworCQlpZiAoIXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2lu
c2VydF9ieV9rZXkgKGNhY2hlLCAoY29uc3QgZ2NoYXIgKillbnRyeS0+a2V5LCBlbnRyeSwgVFJV
RSkpIHsKKwkJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUgKGVudHJ5LCBUUlVFKTsKKwkJ
CXJldHVybjsKKwkJfQorCisJCWZpeHR1cmUgPSBnX3NsaWNlX25ldzAgKFdlYktpdFNvdXBDYWNo
ZVdyaXRpbmdGaXh0dXJlKTsKKwkJZml4dHVyZS0+Y2FjaGUgPSBnX29iamVjdF9yZWYgKGNhY2hl
KTsKKwkJZml4dHVyZS0+ZW50cnkgPSBlbnRyeTsKKwkJZml4dHVyZS0+bXNnID0gZ19vYmplY3Rf
cmVmIChtc2cpOworCisJCS8qIFdlIGNvbm5lY3Qgbm93IHRvIHRoZXNlIHNpZ25hbHMgYW5kIGJ1
ZmZlciB0aGUgZGF0YQorCQkgICBpZiBpdCBjb21lcyBiZWZvcmUgdGhlIGZpbGUgaXMgcmVhZHkg
Zm9yIHdyaXRpbmcgKi8KKwkJZml4dHVyZS0+Z290X2NodW5rX2hhbmRsZXIgPQorCQkJZ19zaWdu
YWxfY29ubmVjdCAobXNnLCAiZ290LWNodW5rIiwgR19DQUxMQkFDSyAobXNnX2dvdF9jaHVua19j
YiksIGZpeHR1cmUpOworCQlmaXh0dXJlLT5nb3RfYm9keV9oYW5kbGVyID0KKwkJCWdfc2lnbmFs
X2Nvbm5lY3QgKG1zZywgImdvdC1ib2R5IiwgR19DQUxMQkFDSyAobXNnX2dvdF9ib2R5X2NiKSwg
Zml4dHVyZSk7CisJCWZpeHR1cmUtPnJlc3RhcnRlZF9oYW5kbGVyID0KKwkJCWdfc2lnbmFsX2Nv
bm5lY3QgKG1zZywgInJlc3RhcnRlZCIsIEdfQ0FMTEJBQ0sgKG1zZ19yZXN0YXJ0ZWRfY2IpLCBl
bnRyeSk7CisKKwkJLyogUHJlcGFyZSBlbnRyeSAqLworCQlmaWxlID0gZ19maWxlX25ld19mb3Jf
cGF0aCAoZW50cnktPmZpbGVuYW1lKTsKKwkJY2FjaGUtPnByaXYtPm5fcGVuZGluZysrOworCisJ
CWVudHJ5LT5kaXJ0eSA9IFRSVUU7CisJCWVudHJ5LT5jYW5jZWxsYWJsZSA9IGdfY2FuY2VsbGFi
bGVfbmV3ICgpOworCQlnX2ZpbGVfYXBwZW5kX3RvX2FzeW5jIChmaWxlLCAwLAorCQkJCQlHX1BS
SU9SSVRZX0xPVywgZW50cnktPmNhbmNlbGxhYmxlLAorCQkJCQkoR0FzeW5jUmVhZHlDYWxsYmFj
aylhcHBlbmRfdG9fcmVhZHlfY2IsCisJCQkJCWZpeHR1cmUpOworCX0gZWxzZSBpZiAoY2FjaGVh
YmxlICYgV0VCS0lUX1NPVVBfQ0FDSEVfSU5WQUxJREFURVMpIHsKKwkJY2hhciAqa2V5OworCQlX
ZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnk7CisKKwkJa2V5ID0gc291cF9tZXNzYWdlX2dldF9j
YWNoZV9rZXkgKG1zZyk7CisJCWVudHJ5ID0gZ19oYXNoX3RhYmxlX2xvb2t1cCAoY2FjaGUtPnBy
aXYtPmNhY2hlLCBrZXkpOworCQlnX2ZyZWUgKGtleSk7CisKKwkJaWYgKGVudHJ5KSB7CisJCQlp
ZiAod2Via2l0X3NvdXBfY2FjaGVfZW50cnlfcmVtb3ZlIChjYWNoZSwgZW50cnkpKQorCQkJCXdl
YmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUgKGVudHJ5LCBUUlVFKTsKKwkJfQorCX0gZWxzZSBp
ZiAoY2FjaGVhYmxlICYgV0VCS0lUX1NPVVBfQ0FDSEVfVkFMSURBVEVTKSB7CisJCWNoYXIgKmtl
eTsKKwkJV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5OworCisJCWtleSA9IHNvdXBfbWVzc2Fn
ZV9nZXRfY2FjaGVfa2V5IChtc2cpOworCQllbnRyeSA9IGdfaGFzaF90YWJsZV9sb29rdXAgKGNh
Y2hlLT5wcml2LT5jYWNoZSwga2V5KTsKKwkJZ19mcmVlIChrZXkpOworCisJCWdfcmV0dXJuX2lm
X2ZhaWwgKGVudHJ5KTsKKworCQllbnRyeS0+YmVpbmdfdmFsaWRhdGVkID0gRkFMU0U7CisKKwkJ
LyogV2UgdXBkYXRlIHRoZSBoZWFkZXJzIG9mIHRoZSBleGlzdGluZyBjYWNoZSBpdGVtLAorCQkg
ICBwbHVzIGl0cyBhZ2UgKi8KKwkJc291cF9tZXNzYWdlX2hlYWRlcnNfZm9yZWFjaCAobXNnLT5y
ZXNwb25zZV9oZWFkZXJzLAorCQkJCQkgICAgICAoU291cE1lc3NhZ2VIZWFkZXJzRm9yZWFjaEZ1
bmMpdXBkYXRlX2hlYWRlcnMsCisJCQkJCSAgICAgIGVudHJ5LT5oZWFkZXJzKTsKKwkJd2Via2l0
X3NvdXBfY2FjaGVfZW50cnlfc2V0X2ZyZXNobmVzcyAoZW50cnksIG1zZywgY2FjaGUpOworCX0K
K30KKworR0lucHV0U3RyZWFtICoKK3dlYmtpdF9zb3VwX2NhY2hlX3NlbmRfcmVzcG9uc2UgKFdl
YktpdFNvdXBDYWNoZSAqY2FjaGUsIFNvdXBNZXNzYWdlICptc2cpCit7CisJY2hhciAqa2V5Owor
CVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeTsKKwljaGFyICpjdXJyZW50X2FnZTsKKwlHSW5w
dXRTdHJlYW0gKnN0cmVhbSA9IE5VTEw7CisJR0ZpbGUgKmZpbGU7CisKKwlnX3JldHVybl92YWxf
aWZfZmFpbCAoV0VCS0lUX0lTX1NPVVBfQ0FDSEUgKGNhY2hlKSwgTlVMTCk7CisJZ19yZXR1cm5f
dmFsX2lmX2ZhaWwgKFNPVVBfSVNfTUVTU0FHRSAobXNnKSwgTlVMTCk7CisKKwlrZXkgPSBzb3Vw
X21lc3NhZ2VfZ2V0X2NhY2hlX2tleSAobXNnKTsKKwllbnRyeSA9IGdfaGFzaF90YWJsZV9sb29r
dXAgKGNhY2hlLT5wcml2LT5jYWNoZSwga2V5KTsKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoZW50
cnksIE5VTEwpOworCisJLyogSWYgd2UgYXJlIHRvbGQgdG8gc2VuZCBhIHJlc3BvbnNlIGZyb20g
Y2FjaGUgYW55IHZhbGlkYXRpb24KKwkgICBpbiBjb3Vyc2UgaXMgb3ZlciBieSBub3cgKi8KKwll
bnRyeS0+YmVpbmdfdmFsaWRhdGVkID0gRkFMU0U7CisKKwkvKiBIZWFkZXJzICovCisJc291cF9t
ZXNzYWdlX2hlYWRlcnNfZm9yZWFjaCAoZW50cnktPmhlYWRlcnMsCisJCQkJICAgICAgKFNvdXBN
ZXNzYWdlSGVhZGVyc0ZvcmVhY2hGdW5jKXVwZGF0ZV9oZWFkZXJzLAorCQkJCSAgICAgIG1zZy0+
cmVzcG9uc2VfaGVhZGVycyk7CisKKwkvKiBBZGQgJ0FnZScgaGVhZGVyIHdpdGggdGhlIGN1cnJl
bnQgYWdlICovCisJY3VycmVudF9hZ2UgPSBnX3N0cmR1cF9wcmludGYgKCIlZCIsIHdlYmtpdF9z
b3VwX2NhY2hlX2VudHJ5X2dldF9jdXJyZW50X2FnZSAoZW50cnkpKTsKKwlzb3VwX21lc3NhZ2Vf
aGVhZGVyc19yZXBsYWNlIChtc2ctPnJlc3BvbnNlX2hlYWRlcnMsCisJCQkJICAgICAgIkFnZSIs
CisJCQkJICAgICAgY3VycmVudF9hZ2UpOworCWdfZnJlZSAoY3VycmVudF9hZ2UpOworCisJLyog
VE9ETzogdGhlIG9yaWdpbmFsIGlkZWEgd2FzIHRvIHNhdmUgcmVhZHMsIGJ1dCBjdXJyZW50IGNv
ZGUKKwkgICBhc3N1bWVzIHRoYXQgYSBzdHJlYW0gaXMgYWx3YXlzIHJldHVybmVkLiBOZWVkIHRv
IHJlYWNoCisJICAgc29tZSBhZ3JlZW1lbnQgaGVyZS4gQWxzbyB3ZSBoYXZlIHRvIGhhbmRsZSB0
aGUgc2l0dWF0aW9uCisJICAgd2VyZSB0aGUgZmlsZSB3YXMgbm8gbG9uZ2VyIHRoZXJlIChmb3Ig
ZXhhbXBsZSBmaWxlcworCSAgIHJlbW92ZWQgd2l0aG91dCBub3RpZnlpbmcgdGhlIGNhY2hlICov
CisJZmlsZSA9IGdfZmlsZV9uZXdfZm9yX3BhdGggKGVudHJ5LT5maWxlbmFtZSk7CisJc3RyZWFt
ID0gKEdJbnB1dFN0cmVhbSAqKWdfZmlsZV9yZWFkIChmaWxlLCBOVUxMLCBOVUxMKTsKKworCXJl
dHVybiBzdHJlYW07Cit9CisKK3N0YXRpYyB2b2lkCityZXF1ZXN0X3N0YXJ0ZWQgKFNvdXBTZXNz
aW9uRmVhdHVyZSAqZmVhdHVyZSwgU291cFNlc3Npb24gKnNlc3Npb24sCisJCSBTb3VwTWVzc2Fn
ZSAqbXNnLCBTb3VwU29ja2V0ICpzb2NrZXQpCit7CisJUmVxdWVzdEhlbHBlciAqaGVscGVyID0g
Z19zbGljZV9uZXcwIChSZXF1ZXN0SGVscGVyKTsKKwloZWxwZXItPnJlcXVlc3RfdGltZSA9IHRp
bWUgKE5VTEwpOworCWhlbHBlci0+ZmVhdHVyZSA9IGZlYXR1cmU7CisJaGVscGVyLT5nb3RfaGVh
ZGVyc19oYW5kbGVyID0gZ19zaWduYWxfY29ubmVjdCAobXNnLCAiZ290LWhlYWRlcnMiLAorCQkJ
CQkJCUdfQ0FMTEJBQ0sgKG1zZ19nb3RfaGVhZGVyc19jYiksCisJCQkJCQkJaGVscGVyKTsKK30K
Kworc3RhdGljIHZvaWQKK2F0dGFjaCAoU291cFNlc3Npb25GZWF0dXJlICpmZWF0dXJlLCBTb3Vw
U2Vzc2lvbiAqc2Vzc2lvbikKK3sKKwlXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlID0gV0VCS0lUX1NP
VVBfQ0FDSEUgKGZlYXR1cmUpOworCWNhY2hlLT5wcml2LT5zZXNzaW9uID0gc2Vzc2lvbjsKKwor
CXdlYmtpdF9zb3VwX2NhY2hlX2RlZmF1bHRfZmVhdHVyZV9pbnRlcmZhY2UtPmF0dGFjaCAoZmVh
dHVyZSwgc2Vzc2lvbik7Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfc291cF9jYWNoZV9zZXNz
aW9uX2ZlYXR1cmVfaW5pdCAoU291cFNlc3Npb25GZWF0dXJlSW50ZXJmYWNlICpmZWF0dXJlX2lu
dGVyZmFjZSwKKwkJCQkJZ3BvaW50ZXIgaW50ZXJmYWNlX2RhdGEpCit7CisJd2Via2l0X3NvdXBf
Y2FjaGVfZGVmYXVsdF9mZWF0dXJlX2ludGVyZmFjZSA9CisJCWdfdHlwZV9kZWZhdWx0X2ludGVy
ZmFjZV9wZWVrIChTT1VQX1RZUEVfU0VTU0lPTl9GRUFUVVJFKTsKKworCWZlYXR1cmVfaW50ZXJm
YWNlLT5hdHRhY2ggPSBhdHRhY2g7CisJZmVhdHVyZV9pbnRlcmZhY2UtPnJlcXVlc3Rfc3RhcnRl
ZCA9IHJlcXVlc3Rfc3RhcnRlZDsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX2NhY2hl
X2luaXQgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUpCit7CisJV2ViS2l0U291cENhY2hlUHJpdmF0
ZSAqcHJpdjsKKworCXByaXYgPSBjYWNoZS0+cHJpdiA9IFdFQktJVF9TT1VQX0NBQ0hFX0dFVF9Q
UklWQVRFIChjYWNoZSk7CisKKwlwcml2LT5jYWNoZSA9IGdfaGFzaF90YWJsZV9uZXdfZnVsbCAo
Z19zdHJfaGFzaCwKKwkJCQkJICAgICBnX3N0cl9lcXVhbCwKKwkJCQkJICAgICAoR0Rlc3Ryb3lO
b3RpZnkpZ19mcmVlLAorCQkJCQkgICAgIE5VTEwpOworCisJLyogTFJVICovCisJcHJpdi0+bHJ1
X3N0YXJ0ID0gTlVMTDsKKworCS8qICovCisJcHJpdi0+bl9wZW5kaW5nID0gMDsKKworCS8qIENh
Y2hlIHNpemUgKi8KKwlwcml2LT5tYXhfc2l6ZSA9IERFRkFVTFRfTUFYX1NJWkU7CisJcHJpdi0+
bWF4X2VudHJ5X2RhdGFfc2l6ZSA9IHByaXYtPm1heF9zaXplIC8gTUFYX0VOVFJZX0RBVEFfUEVS
Q0VOVEFHRTsKKwlwcml2LT5zaXplID0gMDsKK30KKworc3RhdGljIHZvaWQKK3JlbW92ZV9jYWNo
ZV9pdGVtIChncG9pbnRlciBrZXksCisJCSAgIGdwb2ludGVyIHZhbHVlLAorCQkgICBXZWJLaXRT
b3VwQ2FjaGUgKmNhY2hlKQoreworCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSA9IGdfaGFz
aF90YWJsZV9sb29rdXAgKGNhY2hlLT5wcml2LT5jYWNoZSwgKGNvbnN0IGdjaGFyICopa2V5KTsK
KwlpZiAod2Via2l0X3NvdXBfY2FjaGVfZW50cnlfcmVtb3ZlIChjYWNoZSwgZW50cnkpKQorCQl3
ZWJraXRfc291cF9jYWNoZV9lbnRyeV9mcmVlIChlbnRyeSwgRkFMU0UpOworfQorCitzdGF0aWMg
dm9pZAord2Via2l0X3NvdXBfY2FjaGVfZmluYWxpemUgKEdPYmplY3QgKm9iamVjdCkKK3sKKwlX
ZWJLaXRTb3VwQ2FjaGVQcml2YXRlICpwcml2OworCisJcHJpdiA9IFdFQktJVF9TT1VQX0NBQ0hF
IChvYmplY3QpLT5wcml2OworCisJZ19oYXNoX3RhYmxlX2ZvcmVhY2ggKHByaXYtPmNhY2hlLCAo
R0hGdW5jKXJlbW92ZV9jYWNoZV9pdGVtLCBvYmplY3QpOworCWdfaGFzaF90YWJsZV9kZXN0cm95
IChwcml2LT5jYWNoZSk7CisJZ19mcmVlIChwcml2LT5jYWNoZV9kaXIpOworCisJZ19saXN0X2Zy
ZWUgKHByaXYtPmxydV9zdGFydCk7CisJcHJpdi0+bHJ1X3N0YXJ0ID0gTlVMTDsKKworCUdfT0JK
RUNUX0NMQVNTICh3ZWJraXRfc291cF9jYWNoZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2Jq
ZWN0KTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX2NhY2hlX3NldF9wcm9wZXJ0eSAo
R09iamVjdCAqb2JqZWN0LCBndWludCBwcm9wX2lkLAorCQkJCWNvbnN0IEdWYWx1ZSAqdmFsdWUs
IEdQYXJhbVNwZWMgKnBzcGVjKQoreworCVdlYktpdFNvdXBDYWNoZVByaXZhdGUgKnByaXYgPSBX
RUJLSVRfU09VUF9DQUNIRSAob2JqZWN0KS0+cHJpdjsKKworCXN3aXRjaCAocHJvcF9pZCkgewor
CQljYXNlIFBST1BfQ0FDSEVfRElSOgorCQkJcHJpdi0+Y2FjaGVfZGlyID0gZ192YWx1ZV9kdXBf
c3RyaW5nICh2YWx1ZSk7CisJCQkvKiBDcmVhdGUgZGlyZWN0b3J5IGlmIGl0IGRvZXMgbm90IGV4
aXN0IChGSVhNRTogc2hvdWxkIHdlPykgKi8KKwkJCWlmICghZ19maWxlX3Rlc3QgKHByaXYtPmNh
Y2hlX2RpciwgR19GSUxFX1RFU1RfRVhJU1RTIHwgR19GSUxFX1RFU1RfSVNfRElSKSkKKwkJCQln
X21rZGlyX3dpdGhfcGFyZW50cyAocHJpdi0+Y2FjaGVfZGlyLCAwNzAwKTsKKwkJCWJyZWFrOwor
CQljYXNlIFBST1BfQ0FDSEVfVFlQRToKKwkJCXByaXYtPmNhY2hlX3R5cGUgPSBnX3ZhbHVlX2dl
dF9lbnVtICh2YWx1ZSk7CisJCQkvKiBUT0RPOiBjbGVhciBwcml2YXRlIGVudHJpZXMgYW5kIGlz
c3VlIGEgd2FybmluZyBpZiBtb3ZpbmcgdG8gc2hhcmVkPyAqLworCQkJYnJlYWs7CisJCWRlZmF1
bHQ6CisJCQlHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9p
ZCwgcHNwZWMpOworCQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBf
Y2FjaGVfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICpvYmplY3QsIGd1aW50IHByb3BfaWQsCisJCQkJ
R1ZhbHVlICp2YWx1ZSwgR1BhcmFtU3BlYyAqcHNwZWMpCit7CisJV2ViS2l0U291cENhY2hlUHJp
dmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0NBQ0hFIChvYmplY3QpLT5wcml2OworCisJc3dpdGNo
IChwcm9wX2lkKSB7CisJCWNhc2UgUFJPUF9DQUNIRV9ESVI6CisJCQlnX3ZhbHVlX3NldF9zdHJp
bmcgKHZhbHVlLCBwcml2LT5jYWNoZV9kaXIpOworCQkJYnJlYWs7CisJCWNhc2UgUFJPUF9DQUNI
RV9UWVBFOgorCQkJZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIHByaXYtPmNhY2hlX3R5cGUpOwor
CQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlf
SUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworCQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMg
dm9pZAord2Via2l0X3NvdXBfY2FjaGVfY29uc3RydWN0ZWQgKEdPYmplY3QgKm9iamVjdCkKK3sK
KwlXZWJLaXRTb3VwQ2FjaGVQcml2YXRlICpwcml2OworCisJcHJpdiA9IFdFQktJVF9TT1VQX0NB
Q0hFIChvYmplY3QpLT5wcml2OworCisJaWYgKCFwcml2LT5jYWNoZV9kaXIpIHsKKwkJLyogU2V0
IGEgZGVmYXVsdCBjYWNoZSBkaXIsIGRpZmZlcmVudCBmb3IgZWFjaCB1c2VyICovCisJCXByaXYt
PmNhY2hlX2RpciA9IGdfYnVpbGRfZmlsZW5hbWUgKGdfZ2V0X3VzZXJfY2FjaGVfZGlyICgpLAor
CQkJCQkJICAgICJodHRwY2FjaGUiLAorCQkJCQkJICAgIE5VTEwpOworCQlpZiAoIWdfZmlsZV90
ZXN0IChwcml2LT5jYWNoZV9kaXIsIEdfRklMRV9URVNUX0VYSVNUUyB8IEdfRklMRV9URVNUX0lT
X0RJUikpCisJCQlnX21rZGlyX3dpdGhfcGFyZW50cyAocHJpdi0+Y2FjaGVfZGlyLCAwNzAwKTsK
Kwl9CisKKwlpZiAoR19PQkpFQ1RfQ0xBU1MgKHdlYmtpdF9zb3VwX2NhY2hlX3BhcmVudF9jbGFz
cyktPmNvbnN0cnVjdGVkKQorCQlHX09CSkVDVF9DTEFTUyAod2Via2l0X3NvdXBfY2FjaGVfcGFy
ZW50X2NsYXNzKS0+Y29uc3RydWN0ZWQgKG9iamVjdCk7Cit9CisKKyNkZWZpbmUgV0VCS0lUX1NP
VVBfQ0FDSEVfVFlQRV9UWVBFICh3ZWJraXRfc291cF9jYWNoZV90eXBlX2dldF90eXBlICgpKQor
c3RhdGljIEdUeXBlCit3ZWJraXRfc291cF9jYWNoZV90eXBlX2dldF90eXBlICh2b2lkKQorewor
CXN0YXRpYyBHVHlwZSBjYWNoZV90eXBlID0gMDsKKworCXN0YXRpYyBjb25zdCBHRW51bVZhbHVl
IGNhY2hlX3R5cGVzW10gPSB7CisJCXsgV0VCS0lUX1NPVVBfQ0FDSEVfU0lOR0xFX1VTRVIsICJT
aW5nbGUgdXNlciBjYWNoZSIsICJ1c2VyIiB9LAorCQl7IFdFQktJVF9TT1VQX0NBQ0hFX1NIQVJF
RCwgIlNoYXJlZCBjYWNoZSIsICJzaGFyZWQiIH0sCisJCXsgMCwgTlVMTCwgTlVMTCB9CisJfTsK
KworCWlmICghY2FjaGVfdHlwZSkgeworCQljYWNoZV90eXBlID0gZ19lbnVtX3JlZ2lzdGVyX3N0
YXRpYyAoIldlYktpdFNvdXBDYWNoZVR5cGUiLCBjYWNoZV90eXBlcyk7CisJfQorCXJldHVybiBj
YWNoZV90eXBlOworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfY2FjaGVfY2xhc3NfaW5p
dCAoV2ViS2l0U291cENhY2hlQ2xhc3MgKmNhY2hlX2NsYXNzKQoreworCUdPYmplY3RDbGFzcyAq
Z29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKiljYWNoZV9jbGFzczsKKworCWdvYmplY3Rf
Y2xhc3MtPmZpbmFsaXplID0gd2Via2l0X3NvdXBfY2FjaGVfZmluYWxpemU7CisJZ29iamVjdF9j
bGFzcy0+Y29uc3RydWN0ZWQgPSB3ZWJraXRfc291cF9jYWNoZV9jb25zdHJ1Y3RlZDsKKwlnb2Jq
ZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfc291cF9jYWNoZV9zZXRfcHJvcGVydHk7
CisJZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X3NvdXBfY2FjaGVfZ2V0X3By
b3BlcnR5OworCisJY2FjaGVfY2xhc3MtPmdldF9jYWNoZWFiaWxpdHkgPSBnZXRfY2FjaGVhYmls
aXR5OworCisJZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywg
UFJPUF9DQUNIRV9ESVIsCisJCQkJCSBnX3BhcmFtX3NwZWNfc3RyaW5nICgiY2FjaGUtZGlyIiwK
KwkJCQkJCQkgICAgICAiQ2FjaGUgZGlyZWN0b3J5IiwKKwkJCQkJCQkgICAgICAiVGhlIGRpcmVj
dG9yeSB0byBzdG9yZSB0aGUgY2FjaGUgZmlsZXMiLAorCQkJCQkJCSAgICAgIE5VTEwsCisJCQkJ
CQkJICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSk7CisK
KwlnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0NB
Q0hFX1RZUEUsCisJCQkJCSBnX3BhcmFtX3NwZWNfZW51bSAoImNhY2hlLXR5cGUiLAorCQkJCQkJ
CSAgICAiQ2FjaGUgdHlwZSIsCisJCQkJCQkJICAgICJXaGV0aGVyIHRoZSBjYWNoZSBpcyBwcml2
YXRlIG9yIHNoYXJlZCIsCisJCQkJCQkJICAgIFdFQktJVF9TT1VQX0NBQ0hFX1RZUEVfVFlQRSwK
KwkJCQkJCQkgICAgV0VCS0lUX1NPVVBfQ0FDSEVfU0lOR0xFX1VTRVIsCisJCQkJCQkJICAgIEdf
UEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpOworCisJZ190eXBlX2Ns
YXNzX2FkZF9wcml2YXRlIChjYWNoZV9jbGFzcywgc2l6ZW9mIChXZWJLaXRTb3VwQ2FjaGVQcml2
YXRlKSk7Cit9CisKKy8qKgorICogd2Via2l0X3NvdXBfY2FjaGVfbmV3OgorICogQGNhY2hlX2Rp
cjogdGhlIGRpcmVjdG9yeSB0byBzdG9yZSB0aGUgY2FjaGVkIGRhdGEsIG9yICVOVUxMIHRvIHVz
ZSB0aGUgZGVmYXVsdCBvbmUKKyAqIEBjYWNoZV90eXBlOiB0aGUgI1dlYktpdFNvdXBDYWNoZVR5
cGUgb2YgdGhlIGNhY2hlCisgKgorICogQ3JlYXRlcyBhIG5ldyAjV2ViS2l0U291cENhY2hlLgor
ICoKKyAqIFJldHVybnM6IGEgbmV3ICNXZWJLaXRTb3VwQ2FjaGUKKyAqCisgKiBTaW5jZTogMi4y
OAorICoqLworV2ViS2l0U291cENhY2hlICoKK3dlYmtpdF9zb3VwX2NhY2hlX25ldyAoY29uc3Qg
Y2hhciAqY2FjaGVfZGlyLCBXZWJLaXRTb3VwQ2FjaGVUeXBlIGNhY2hlX3R5cGUpCit7CisJcmV0
dXJuIGdfb2JqZWN0X25ldyAoV0VCS0lUX1RZUEVfU09VUF9DQUNIRSwKKwkJCSAgICAgImNhY2hl
LWRpciIsIGNhY2hlX2RpciwKKwkJCSAgICAgImNhY2hlLXR5cGUiLCBjYWNoZV90eXBlLAorCQkJ
ICAgICBOVUxMKTsKK30KKworLyoqCisgKiB3ZWJraXRfc291cF9jYWNoZV9oYXNfcmVzcG9uc2U6
CisgKiBAY2FjaGU6IGEgI1dlYktpdFNvdXBDYWNoZQorICogQG1zZzogYSAjU291cE1lc3NhZ2UK
KyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgd2hldGhlciB0aGUgQGNhY2hlIG9iamVj
dCBoYXMgYSBwcm9wZXIKKyAqIHJlc3BvbnNlIGZvciB0aGUgcmVxdWVzdCBAbXNnIGdpdmVuIHRo
ZSBmbGFncyBib3RoIGluIHRoZSByZXF1ZXN0CisgKiBhbmQgdGhlIGNhY2hlZCByZXBseSBhbmQg
dGhlIHRpbWUgZWxsYXBzZWQgc2luY2UgaXQgd2FzIGNhY2hlZC4KKyAqCisgKiBSZXR1cm5zOiB3
aGV0aGVyIG9yIG5vdCB0aGUgQGNhY2hlIGhhcyBhIHZhbGlkIHJlc3BvbnNlIGZvciBAbXNnCisg
KiovCitXZWJLaXRTb3VwQ2FjaGVSZXNwb25zZQord2Via2l0X3NvdXBfY2FjaGVfaGFzX3Jlc3Bv
bnNlIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLCBTb3VwTWVzc2FnZSAqbXNnKQoreworCWNoYXIg
KmtleTsKKwlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnk7CisJY29uc3QgY2hhciAqY2FjaGVf
Y29udHJvbDsKKwlHSGFzaFRhYmxlICpoYXNoOworCWdwb2ludGVyIHZhbHVlOworCWdib29sZWFu
IG11c3RfcmV2YWxpZGF0ZTsKKwlpbnQgbWF4X2FnZSwgbWF4X3N0YWxlLCBtaW5fZnJlc2g7CisJ
R0xpc3QgKmxydV9pdGVtLCAqaXRlbTsKKworCWtleSA9IHNvdXBfbWVzc2FnZV9nZXRfY2FjaGVf
a2V5IChtc2cpOworCWVudHJ5ID0gZ19oYXNoX3RhYmxlX2xvb2t1cCAoY2FjaGUtPnByaXYtPmNh
Y2hlLCBrZXkpOworCisJLyogMS4gVGhlIHByZXNlbnRlZCBSZXF1ZXN0LVVSSSBhbmQgdGhhdCBv
ZiBzdG9yZWQgcmVzcG9uc2UKKwkgKiBtYXRjaAorCSAqLworCWlmICghZW50cnkpCisJCXJldHVy
biBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9TVEFMRTsKKworCS8qIEluY3JlYXNlIGhpdCBj
b3VudC4gVGFrZSBzb3J0aW5nIGludG8gYWNjb3VudCAqLworCWVudHJ5LT5oaXRzKys7CisJbHJ1
X2l0ZW0gPSBnX2xpc3RfZmluZCAoY2FjaGUtPnByaXYtPmxydV9zdGFydCwgZW50cnkpOworCWl0
ZW0gPSBscnVfaXRlbTsKKwl3aGlsZSAoaXRlbS0+bmV4dCAmJiBscnVfY29tcGFyZV9mdW5jIChp
dGVtLT5kYXRhLCBpdGVtLT5uZXh0LT5kYXRhKSA+IDApCisJCWl0ZW0gPSBnX2xpc3RfbmV4dCAo
aXRlbSk7CisKKwlpZiAoaXRlbSAhPSBscnVfaXRlbSkgeworCQljYWNoZS0+cHJpdi0+bHJ1X3N0
YXJ0ID0gZ19saXN0X3JlbW92ZV9saW5rIChjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0LCBscnVfaXRl
bSk7CisJCWl0ZW0gPSBnX2xpc3RfaW5zZXJ0X3NvcnRlZCAoaXRlbSwgbHJ1X2l0ZW0tPmRhdGEs
IGxydV9jb21wYXJlX2Z1bmMpOworCQlnX2xpc3RfZnJlZSAobHJ1X2l0ZW0pOworCX0KKworCWlm
IChlbnRyeS0+ZGlydHkgfHwgZW50cnktPmJlaW5nX3ZhbGlkYXRlZCkKKwkJcmV0dXJuIFdFQktJ
VF9TT1VQX0NBQ0hFX1JFU1BPTlNFX1NUQUxFOworCisJLyogMi4gVGhlIHJlcXVlc3QgbWV0aG9k
IGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RvcmVkIHJlc3BvbnNlCisJICogIGFsbG93cyBpdCB0byBi
ZSB1c2VkIGZvciB0aGUgcHJlc2VudGVkIHJlcXVlc3QKKwkgKi8KKworCS8qIEluIHByYWN0aWNl
IHRoaXMgbWVhbnMgd2Ugb25seSByZXR1cm4gb3VyIHJlc291cmNlIGZvciBHRVQsCisJICogY2Fj
aGVhYmlsaXR5IGZvciBvdGhlciBtZXRob2RzIGlzIGEgVE9ETyBpbiB0aGUgUkZDCisJICogKFRP
RE86IGFsdGhvdWdoIHdlIGNvdWxkIHJldHVybiB0aGUgaGVhZGVycyBmb3IgSEVBRAorCSAqIHBy
b2JhYmx5KS4KKwkgKi8KKwlpZiAobXNnLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKQorCQly
ZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfU1RBTEU7CisKKwkvKiAzLiBTZWxlY3Rp
bmcgcmVxdWVzdC1oZWFkZXJzIG5vbWluYXRlZCBieSB0aGUgc3RvcmVkCisJICogcmVzcG9uc2Ug
KGlmIGFueSkgbWF0Y2ggdGhvc2UgcHJlc2VudGVkLgorCSAqLworCisJLyogVE9ETyAqLworCisJ
LyogNC4gVGhlIHByZXNlbnRlZCByZXF1ZXN0IGFuZCBzdG9yZWQgcmVzcG9uc2UgYXJlIGZyZWUg
ZnJvbQorCSAqIGRpcmVjdGl2ZXMgdGhhdCB3b3VsZCBwcmV2ZW50IGl0cyB1c2UuCisJICovCisK
KwltdXN0X3JldmFsaWRhdGUgPSBGQUxTRTsKKwltYXhfYWdlID0gbWF4X3N0YWxlID0gbWluX2Zy
ZXNoID0gLTE7CisKKwljYWNoZV9jb250cm9sID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0ICht
c2ctPnJlcXVlc3RfaGVhZGVycywgIkNhY2hlLUNvbnRyb2wiKTsKKwlpZiAoY2FjaGVfY29udHJv
bCkgeworCQloYXNoID0gc291cF9oZWFkZXJfcGFyc2VfcGFyYW1fbGlzdCAoY2FjaGVfY29udHJv
bCk7CisKKwkJaWYgKGdfaGFzaF90YWJsZV9sb29rdXBfZXh0ZW5kZWQgKGhhc2gsICJuby1zdG9y
ZSIsIE5VTEwsIE5VTEwpKSB7CisJCQlnX2hhc2hfdGFibGVfZGVzdHJveSAoaGFzaCk7CisJCQly
ZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfU1RBTEU7CisJCX0KKworCQlpZiAoZ19o
YXNoX3RhYmxlX2xvb2t1cF9leHRlbmRlZCAoaGFzaCwgIm5vLWNhY2hlIiwgTlVMTCwgTlVMTCkp
IHsKKwkJCWVudHJ5LT5tdXN0X3JldmFsaWRhdGUgPSBUUlVFOworCQl9CisKKwkJaWYgKGdfaGFz
aF90YWJsZV9sb29rdXBfZXh0ZW5kZWQgKGhhc2gsICJtYXgtYWdlIiwgTlVMTCwgJnZhbHVlKSkg
eworCQkJbWF4X2FnZSA9IChpbnQpTUlOIChnX2FzY2lpX3N0cnRvbGwgKHZhbHVlLCBOVUxMLCAx
MCksIEdfTUFYSU5UMzIpOworCQl9CisKKwkJLyogbWF4LXN0YWxlIGNhbiBoYXZlIG5vIHZhbHVl
IHNldCwgd2UgbmVlZCB0byB1c2UgX2V4dGVuZGVkICovCisJCWlmIChnX2hhc2hfdGFibGVfbG9v
a3VwX2V4dGVuZGVkIChoYXNoLCAibWF4LXN0YWxlIiwgTlVMTCwgJnZhbHVlKSkgeworCQkJaWYg
KHZhbHVlKQorCQkJCW1heF9zdGFsZSA9IChpbnQpTUlOIChnX2FzY2lpX3N0cnRvbGwgKHZhbHVl
LCBOVUxMLCAxMCksIEdfTUFYSU5UMzIpOworCQkJZWxzZQorCQkJCW1heF9zdGFsZSA9IEdfTUFY
SU5UMzI7CisJCX0KKworCQl2YWx1ZSA9IGdfaGFzaF90YWJsZV9sb29rdXAgKGhhc2gsICJtaW4t
ZnJlc2giKTsKKwkJaWYgKHZhbHVlKQorCQkJbWluX2ZyZXNoID0gKGludClNSU4gKGdfYXNjaWlf
c3RydG9sbCAodmFsdWUsIE5VTEwsIDEwKSwgR19NQVhJTlQzMik7CisKKwkJZ19oYXNoX3RhYmxl
X2Rlc3Ryb3kgKGhhc2gpOworCisJCWlmIChtYXhfYWdlICE9IC0xKSB7CisJCQlndWludCBjdXJy
ZW50X2FnZSA9IHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2dldF9jdXJyZW50X2FnZSAoZW50cnkp
OworCisJCQkvKiBJZiB3ZSBhcmUgb3ZlciBtYXgtYWdlIGFuZCBtYXgtc3RhbGUgaXMgbm90CisJ
CQkgICBzZXQsIGRvIG5vdCB1c2UgdGhlIHZhbHVlIGZyb20gdGhlIGNhY2hlCisJCQkgICB3aXRo
b3V0IHZhbGlkYXRpb24gKi8KKwkJCWlmIChtYXhfYWdlIDw9IGN1cnJlbnRfYWdlICYmIG1heF9z
dGFsZSA9PSAtMSkKKwkJCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfTkVFRFNf
VkFMSURBVElPTjsKKwkJfQorCX0KKworCS8qIDUuIFRoZSBzdG9yZWQgcmVzcG9uc2UgaXMgZWl0
aGVyOiBmcmVzaCwgYWxsb3dlZCB0byBiZQorCSAqIHNlcnZlZCBzdGFsZSBvciBzdWNjZXNmdWxs
eSB2YWxpZGF0ZWQKKwkgKi8KKwkvKiBUT0RPIGNvbnNpZGVyIGFsc28gcHJveHktcmV2YWxpZGF0
ZSAmIHMtbWF4YWdlICovCisJaWYgKGVudHJ5LT5tdXN0X3JldmFsaWRhdGUpCisJCXJldHVybiBX
RUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9ORUVEU19WQUxJREFUSU9OOworCisJaWYgKCF3ZWJr
aXRfc291cF9jYWNoZV9lbnRyeV9pc19mcmVzaF9lbm91Z2ggKGVudHJ5LCBtaW5fZnJlc2gpKSB7
CisJCS8qIE5vdCBmcmVzaCwgY2FuIGl0IGJlIHNlcnZlZCBzdGFsZT8gKi8KKwkJaWYgKG1heF9z
dGFsZSAhPSAtMSkgeworCQkJLyogR19NQVhJTlQzMiBtZWFucyB3ZSBhY2NlcHQgYW55IHN0YWxl
bmVzcyAqLworCQkJaWYgKG1heF9zdGFsZSA9PSBHX01BWElOVDMyKQorCQkJCXJldHVybiBXRUJL
SVRfU09VUF9DQUNIRV9SRVNQT05TRV9GUkVTSDsKKworCQkJaWYgKCh3ZWJraXRfc291cF9jYWNo
ZV9lbnRyeV9nZXRfY3VycmVudF9hZ2UgKGVudHJ5KSAtIGVudHJ5LT5mcmVzaG5lc3NfbGlmZXRp
bWUpIDw9IG1heF9zdGFsZSkKKwkJCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0Vf
RlJFU0g7CisJCX0KKworCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfTkVFRFNf
VkFMSURBVElPTjsKKwl9CisKKwlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfRlJF
U0g7Cit9CisKKy8qKgorICogd2Via2l0X3NvdXBfY2FjaGVfZ2V0X2NhY2hlYWJpbGl0eToKKyAq
IEBjYWNoZTogYSAjV2ViS2l0U291cENhY2hlCisgKiBAbXNnOiBhICNTb3VwTWVzc2FnZQorICoK
KyAqIENhbGN1bGF0ZXMgd2hldGhlciB0aGUgQG1zZyBjYW4gYmUgY2FjaGVkIG9yIG5vdC4KKyAq
CisgKiBSZXR1cm5zOiBhICNXZWJLaXRTb3VwQ2FjaGVhYmlsaXR5IHZhbHVlIGluZGljYXRpbmcg
d2hldGhlciB0aGUgQG1zZyBjYW4gYmUgY2FjaGVkIG9yIG5vdC4KKyAqKi8KK1dlYktpdFNvdXBD
YWNoZWFiaWxpdHkKK3dlYmtpdF9zb3VwX2NhY2hlX2dldF9jYWNoZWFiaWxpdHkgKFdlYktpdFNv
dXBDYWNoZSAqY2FjaGUsIFNvdXBNZXNzYWdlICptc2cpCit7CisJZ19yZXR1cm5fdmFsX2lmX2Zh
aWwgKFdFQktJVF9JU19TT1VQX0NBQ0hFIChjYWNoZSksIFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FD
SEVBQkxFKTsKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoU09VUF9JU19NRVNTQUdFIChtc2cpLCBX
RUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRSk7CisKKwlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FD
SEVfR0VUX0NMQVNTIChjYWNoZSktPmdldF9jYWNoZWFiaWxpdHkgKGNhY2hlLCBtc2cpOworfQor
CitzdGF0aWMgZ2Jvb2xlYW4KK2ZvcmNlX2ZsdXNoX3RpbWVvdXQgKGdwb2ludGVyIGRhdGEpCit7
CisJZ2Jvb2xlYW4gKmZvcmNlZCA9IChnYm9vbGVhbiAqKWRhdGE7CisJKmZvcmNlZCA9IFRSVUU7
CisKKwlyZXR1cm4gRkFMU0U7Cit9CisKKy8qKgorICogd2Via2l0X3NvdXBfY2FjaGVfZmx1c2g6
CisgKiBAY2FjaGU6IGEgI1dlYktpdFNvdXBDYWNoZQorICogQHNlc3Npb246IHRoZSAjU291cFNl
c3Npb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBAY2FjaGUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdp
bGwgZm9yY2UgYWxsIHBlbmRpbmcgd3JpdGVzIGluIHRoZSBAY2FjaGUgdG8gYmUKKyAqIGNvbW1p
dHRlZCB0byBkaXNrLiBGb3IgZG9pbmcgc28gaXQgd2lsbCBpdGVyYXRlIHRoZSAjR01haW5Db250
ZXh0CisgKiBhc3NvY2lhdGVkIHdpdGggdGhlIEBzZXNzaW9uICh3aGljaCBjYW4gYmUgdGhlIGRl
ZmF1bHQgb25lKSBhcyBsb25nCisgKiBhcyBuZWVkZWQuCisgKiovCit2b2lkCit3ZWJraXRfc291
cF9jYWNoZV9mbHVzaCAoV2ViS2l0U291cENhY2hlICpjYWNoZSkKK3sKKwlHTWFpbkNvbnRleHQg
KmFzeW5jX2NvbnRleHQ7CisJU291cFNlc3Npb24gKnNlc3Npb247CisJZ3VpbnQgdGltZW91dF9p
ZDsKKwlnYm9vbGVhbiBmb3JjZWQgPSBGQUxTRTsKKworCWdfcmV0dXJuX2lmX2ZhaWwgKFdFQktJ
VF9JU19TT1VQX0NBQ0hFIChjYWNoZSkpOworCisJc2Vzc2lvbiA9IGNhY2hlLT5wcml2LT5zZXNz
aW9uOworCWdfcmV0dXJuX2lmX2ZhaWwgKFNPVVBfSVNfU0VTU0lPTiAoc2Vzc2lvbikpOworCWFz
eW5jX2NvbnRleHQgPSBzb3VwX3Nlc3Npb25fZ2V0X2FzeW5jX2NvbnRleHQgKHNlc3Npb24pOwor
CisJLyogV2UgZ2l2ZSBjYWNoZSAxMCBzZWNzIHRvIGZpbmlzaCAqLworCXRpbWVvdXRfaWQgPSBn
X3RpbWVvdXRfYWRkICgxMDAwMCwgZm9yY2VfZmx1c2hfdGltZW91dCwgJmZvcmNlZCk7CisKKwl3
aGlsZSAoIWZvcmNlZCAmJiBjYWNoZS0+cHJpdi0+bl9wZW5kaW5nID4gMCkKKwkJZ19tYWluX2Nv
bnRleHRfaXRlcmF0aW9uIChhc3luY19jb250ZXh0LCBGQUxTRSk7CisKKwlpZiAoIWZvcmNlZCkK
KwkJZ19zb3VyY2VfcmVtb3ZlICh0aW1lb3V0X2lkKTsKKwllbHNlCisJCWdfd2FybmluZyAoIkNh
Y2hlIGZsdXNoIGZpbmlzaGVkIGRlc3BpdGUgJWQgcGVuZGluZyByZXF1ZXN0cyIsIGNhY2hlLT5w
cml2LT5uX3BlbmRpbmcpOworfQorCitzdGF0aWMgdm9pZAorY2xlYXJfY2FjaGVfaXRlbSAoZ3Bv
aW50ZXIga2V5LAorCQkgIGdwb2ludGVyIHZhbHVlLAorCQkgIFdlYktpdFNvdXBDYWNoZSAqY2Fj
aGUpCit7CisJV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5ID0gZ19oYXNoX3RhYmxlX2xvb2t1
cCAoY2FjaGUtPnByaXYtPmNhY2hlLCAoY29uc3QgZ2NoYXIgKilrZXkpOworCWlmICh3ZWJraXRf
c291cF9jYWNoZV9lbnRyeV9yZW1vdmUgKGNhY2hlLCBlbnRyeSkpCisJCXdlYmtpdF9zb3VwX2Nh
Y2hlX2VudHJ5X2ZyZWUgKGVudHJ5LCBUUlVFKTsKK30KKworLyoqCisgKiB3ZWJraXRfc291cF9j
YWNoZV9jbGVhcjoKKyAqIEBjYWNoZTogYSAjV2ViS2l0U291cENhY2hlCisgKgorICogV2lsbCBy
ZW1vdmUgYWxsIGVudHJpZXMgaW4gdGhlIEBjYWNoZSBwbHVzIGFsbCB0aGUgY2FjaGUgZmlsZXMK
KyAqIGFzc29jaWF0ZWQgd2l0aCB0aGVtLgorICoqLwordm9pZAord2Via2l0X3NvdXBfY2FjaGVf
Y2xlYXIgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUpCit7CisJR0hhc2hUYWJsZSAqaGFzaDsKKwor
CWdfcmV0dXJuX2lmX2ZhaWwgKFdFQktJVF9JU19TT1VQX0NBQ0hFIChjYWNoZSkpOworCisJaGFz
aCA9IGNhY2hlLT5wcml2LT5jYWNoZTsKKwlnX3JldHVybl9pZl9mYWlsIChoYXNoKTsKKworCWdf
aGFzaF90YWJsZV9mb3JlYWNoIChoYXNoLCAoR0hGdW5jKWNsZWFyX2NhY2hlX2l0ZW0sIGNhY2hl
KTsKK30KKworU291cE1lc3NhZ2UgKgord2Via2l0X3NvdXBfY2FjaGVfZ2VuZXJhdGVfY29uZGl0
aW9uYWxfcmVxdWVzdCAoV2ViS2l0U291cENhY2hlICpjYWNoZSwgU291cE1lc3NhZ2UgKm9yaWdp
bmFsKQoreworCVNvdXBNZXNzYWdlICptc2c7CisJU291cFVSSSAqdXJpOworCVdlYktpdFNvdXBD
YWNoZUVudHJ5ICplbnRyeTsKKwljaGFyICprZXk7CisJY29uc3QgY2hhciAqdmFsdWU7CisKKwln
X3JldHVybl92YWxfaWZfZmFpbCAoV0VCS0lUX0lTX1NPVVBfQ0FDSEUgKGNhY2hlKSwgTlVMTCk7
CisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFNPVVBfSVNfTUVTU0FHRSAob3JpZ2luYWwpLCBOVUxM
KTsKKworCS8qIEZpcnN0IGNvcHkgdGhlIGRhdGEgd2UgbmVlZCBmcm9tIHRoZSBvcmlnaW5hbCBt
ZXNzYWdlICovCisJdXJpID0gc291cF9tZXNzYWdlX2dldF91cmkgKG9yaWdpbmFsKTsKKwltc2cg
PSBzb3VwX21lc3NhZ2VfbmV3X2Zyb21fdXJpIChvcmlnaW5hbC0+bWV0aG9kLCB1cmkpOworCisJ
c291cF9tZXNzYWdlX2hlYWRlcnNfZm9yZWFjaCAob3JpZ2luYWwtPnJlcXVlc3RfaGVhZGVycywK
KwkJCQkgICAgICAoU291cE1lc3NhZ2VIZWFkZXJzRm9yZWFjaEZ1bmMpY29weV9oZWFkZXJzLAor
CQkJCSAgICAgIG1zZy0+cmVxdWVzdF9oZWFkZXJzKTsKKworCS8qIE5vdyBhZGQgdGhlIHZhbGlk
YXRvciBlbnRyaWVzIGluIHRoZSBoZWFkZXIgZnJvbSB0aGUgY2FjaGVkCisJICAgZGF0YSAqLwor
CWtleSA9IHNvdXBfbWVzc2FnZV9nZXRfY2FjaGVfa2V5IChvcmlnaW5hbCk7CisJZW50cnkgPSBn
X2hhc2hfdGFibGVfbG9va3VwIChjYWNoZS0+cHJpdi0+Y2FjaGUsIGtleSk7CisJZ19mcmVlIChr
ZXkpOworCisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGVudHJ5LCBOVUxMKTsKKworCWVudHJ5LT5i
ZWluZ192YWxpZGF0ZWQgPSBUUlVFOworCisJdmFsdWUgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19n
ZXQgKGVudHJ5LT5oZWFkZXJzLCAiTGFzdC1Nb2RpZmllZCIpOworCWlmICh2YWx1ZSkKKwkJc291
cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kIChtc2ctPnJlcXVlc3RfaGVhZGVycywKKwkJCQkJICAg
ICAiSWYtTW9kaWZpZWQtU2luY2UiLAorCQkJCQkgICAgIHZhbHVlKTsKKwl2YWx1ZSA9IHNvdXBf
bWVzc2FnZV9oZWFkZXJzX2dldCAoZW50cnktPmhlYWRlcnMsICJFVGFnIik7CisJaWYgKHZhbHVl
KQorCQlzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQgKG1zZy0+cmVxdWVzdF9oZWFkZXJzLAor
CQkJCQkgICAgICJJZi1Ob25lLU1hdGNoIiwKKwkJCQkJICAgICB2YWx1ZSk7CisJcmV0dXJuIG1z
ZzsKK30KKworI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9GSUxFICJzb3VwLmNhY2hlIgorCisj
ZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX0hFQURFUlNfRk9STUFUICJ7c3N9IgorI2RlZmluZSBX
RUJLSVRfU09VUF9DQUNIRV9QSEVBREVSU19GT1JNQVQgIihzc2J1dXV1dWEiIFdFQktJVF9TT1VQ
X0NBQ0hFX0hFQURFUlNfRk9STUFUICIpIgorI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9FTlRS
SUVTX0ZPUk1BVCAiYSIgV0VCS0lUX1NPVVBfQ0FDSEVfUEhFQURFUlNfRk9STUFUCisKKy8qIEJh
c2ljYWxseSB0aGUgc2FtZSBmb3JtYXQgdGhhbiBhYm92ZSBleGNlcHQgdGhhdCBzb21lIHN0cmlu
Z3MgYXJlCisgICBwcmVwZW5kZWQgd2l0aCAmLiBUaGlzIHdheSB0aGUgR1ZhcmlhbnQgcmV0dXJu
cyBhIHBvaW50ZXIgdG8gdGhlCisgICBkYXRhIGluc3RlYWQgb2YgZHVwbGljYXRpbmcgdGhlIHN0
cmluZyAqLworI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9ERUNPREVfSEVBREVSU19GT1JNQVQg
InsmcyZzfSIKKworc3RhdGljIHZvaWQKK3BhY2tfZW50cnkgKGdwb2ludGVyIGRhdGEsCisJICAg
IGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkgPSAo
V2ViS2l0U291cENhY2hlRW50cnkgKikgZGF0YTsKKwlTb3VwTWVzc2FnZUhlYWRlcnNJdGVyIGl0
ZXI7CisJY29uc3QgZ2NoYXIgKmhlYWRlcl9rZXksICpoZWFkZXJfdmFsdWU7CisJR1ZhcmlhbnRC
dWlsZGVyICpoZWFkZXJzX2J1aWxkZXI7CisJR1ZhcmlhbnRCdWlsZGVyICplbnRyaWVzX2J1aWxk
ZXIgPSAoR1ZhcmlhbnRCdWlsZGVyICopdXNlcl9kYXRhOworCisJLyogRG8gbm90IHN0b3JlIG5v
bi1jb25zb2xpZGF0ZWQgZW50cmllcyAqLworCWlmIChlbnRyeS0+ZGlydHkgfHwgZW50cnktPndy
aXRpbmcgfHwgIWVudHJ5LT5rZXkpCisJCXJldHVybjsKKworCS8qIFBhY2sgaGVhZGVycyAqLwor
CWhlYWRlcnNfYnVpbGRlciA9IGdfdmFyaWFudF9idWlsZGVyX25ldyAoR19WQVJJQU5UX1RZUEVf
QVJSQVkpOworCXNvdXBfbWVzc2FnZV9oZWFkZXJzX2l0ZXJfaW5pdCAoJml0ZXIsIGVudHJ5LT5o
ZWFkZXJzKTsKKwl3aGlsZSAoc291cF9tZXNzYWdlX2hlYWRlcnNfaXRlcl9uZXh0ICgmaXRlciwg
JmhlYWRlcl9rZXksICZoZWFkZXJfdmFsdWUpKSB7CisJCWlmIChnX3V0ZjhfdmFsaWRhdGUgKGhl
YWRlcl92YWx1ZSwgLTEsIE5VTEwpKQorCQkJZ192YXJpYW50X2J1aWxkZXJfYWRkIChoZWFkZXJz
X2J1aWxkZXIsIFdFQktJVF9TT1VQX0NBQ0hFX0hFQURFUlNfRk9STUFULAorCQkJCQkgICAgICAg
aGVhZGVyX2tleSwgaGVhZGVyX3ZhbHVlKTsKKwl9CisKKwkvKiBFbnRyeSBkYXRhICovCisJZ192
YXJpYW50X2J1aWxkZXJfYWRkIChlbnRyaWVzX2J1aWxkZXIsIFdFQktJVF9TT1VQX0NBQ0hFX1BI
RUFERVJTX0ZPUk1BVCwKKwkJCSAgICAgICBlbnRyeS0+a2V5LCBlbnRyeS0+ZmlsZW5hbWUsIGVu
dHJ5LT5tdXN0X3JldmFsaWRhdGUsCisJCQkgICAgICAgZW50cnktPmZyZXNobmVzc19saWZldGlt
ZSwgZW50cnktPmNvcnJlY3RlZF9pbml0aWFsX2FnZSwKKwkJCSAgICAgICBlbnRyeS0+cmVzcG9u
c2VfdGltZSwgZW50cnktPmhpdHMsIGVudHJ5LT5sZW5ndGgsIGhlYWRlcnNfYnVpbGRlcik7CisK
KwlnX3ZhcmlhbnRfYnVpbGRlcl91bnJlZiAoaGVhZGVyc19idWlsZGVyKTsKK30KKwordm9pZAor
d2Via2l0X3NvdXBfY2FjaGVfZHVtcCAoV2ViS2l0U291cENhY2hlICpjYWNoZSkKK3sKKwlXZWJL
aXRTb3VwQ2FjaGVQcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfQ0FDSEVfR0VUX1BSSVZBVEUg
KGNhY2hlKTsKKwlnY2hhciAqZmlsZW5hbWU7CisJR1ZhcmlhbnRCdWlsZGVyICplbnRyaWVzX2J1
aWxkZXI7CisJR1ZhcmlhbnQgKmNhY2hlX3ZhcmlhbnQ7CisKKwlpZiAoIWdfbGlzdF9sZW5ndGgg
KGNhY2hlLT5wcml2LT5scnVfc3RhcnQpKQorCQlyZXR1cm47CisKKwkvKiBDcmVhdGUgdGhlIGJ1
aWxkZXIgYW5kIGl0ZXJhdGUgb3ZlciBhbGwgZW50cmllcyAqLworCWVudHJpZXNfYnVpbGRlciA9
IGdfdmFyaWFudF9idWlsZGVyX25ldyAoR19WQVJJQU5UX1RZUEVfQVJSQVkpOworCWdfbGlzdF9m
b3JlYWNoIChjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0LCBwYWNrX2VudHJ5LCBlbnRyaWVzX2J1aWxk
ZXIpOworCisJLyogU2VyaWFsaXplIGFuZCBkdW1wICovCisJY2FjaGVfdmFyaWFudCA9IGdfdmFy
aWFudF9uZXcgKFdFQktJVF9TT1VQX0NBQ0hFX0VOVFJJRVNfRk9STUFULCBlbnRyaWVzX2J1aWxk
ZXIpOworCWdfdmFyaWFudF9idWlsZGVyX3VucmVmIChlbnRyaWVzX2J1aWxkZXIpOworCisJZmls
ZW5hbWUgPSBnX2J1aWxkX2ZpbGVuYW1lIChwcml2LT5jYWNoZV9kaXIsIFdFQktJVF9TT1VQX0NB
Q0hFX0ZJTEUsIE5VTEwpOworCWdfZmlsZV9zZXRfY29udGVudHMgKGZpbGVuYW1lLCAoY29uc3Qg
Z2NoYXIgKilnX3ZhcmlhbnRfZ2V0X2RhdGEgKGNhY2hlX3ZhcmlhbnQpLAorCQkJICAgICBnX3Zh
cmlhbnRfZ2V0X3NpemUgKGNhY2hlX3ZhcmlhbnQpLCBOVUxMKTsKKwlnX2ZyZWUgKGZpbGVuYW1l
KTsKKwlnX3ZhcmlhbnRfdW5yZWYgKGNhY2hlX3ZhcmlhbnQpOworfQorCit2b2lkCit3ZWJraXRf
c291cF9jYWNoZV9sb2FkIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKQoreworCWdjaGFyICpmaWxl
bmFtZSA9IE5VTEwsICpjb250ZW50cyA9IE5VTEw7CisJR1ZhcmlhbnQgKmNhY2hlX3ZhcmlhbnQ7
CisJR1ZhcmlhbnRJdGVyICplbnRyaWVzX2l0ZXIsICpoZWFkZXJzX2l0ZXI7CisJR1ZhcmlhbnRU
eXBlICp2YXJpYW50X2Zvcm1hdDsKKwlnc2l6ZSBsZW5ndGg7CisJV2ViS2l0U291cENhY2hlRW50
cnkgKmVudHJ5OworCVdlYktpdFNvdXBDYWNoZVByaXZhdGUgKnByaXYgPSBjYWNoZS0+cHJpdjsK
KworCWZpbGVuYW1lID0gZ19idWlsZF9maWxlbmFtZSAocHJpdi0+Y2FjaGVfZGlyLCBXRUJLSVRf
U09VUF9DQUNIRV9GSUxFLCBOVUxMKTsKKwlpZiAoIWdfZmlsZV9nZXRfY29udGVudHMgKGZpbGVu
YW1lLCAmY29udGVudHMsICZsZW5ndGgsIE5VTEwpKSB7CisJCWdfZnJlZSAoZmlsZW5hbWUpOwor
CQlyZXR1cm47CisJfQorCWdfZnJlZSAoZmlsZW5hbWUpOworCisJdmFyaWFudF9mb3JtYXQgPSBn
X3ZhcmlhbnRfdHlwZV9uZXcgKFdFQktJVF9TT1VQX0NBQ0hFX0VOVFJJRVNfRk9STUFUKTsKKwlj
YWNoZV92YXJpYW50ID0gZ192YXJpYW50X25ld19mcm9tX2RhdGEgKHZhcmlhbnRfZm9ybWF0LCAo
Y29uc3QgZ2NoYXIgKiljb250ZW50cywgbGVuZ3RoLCBGQUxTRSwgTlVMTCwgTlVMTCk7CisJZ192
YXJpYW50X3R5cGVfZnJlZSAodmFyaWFudF9mb3JtYXQpOworCisJZ192YXJpYW50X2dldCAoY2Fj
aGVfdmFyaWFudCwgV0VCS0lUX1NPVVBfQ0FDSEVfRU5UUklFU19GT1JNQVQsICZlbnRyaWVzX2l0
ZXIpOworCWVudHJ5ID0gZ19zbGljZV9uZXcwIChXZWJLaXRTb3VwQ2FjaGVFbnRyeSk7CisKKwl3
aGlsZSAoZ192YXJpYW50X2l0ZXJfbG9vcCAoZW50cmllc19pdGVyLCBXRUJLSVRfU09VUF9DQUNI
RV9QSEVBREVSU19GT1JNQVQsCisJCQkJICAgICZlbnRyeS0+a2V5LCAmZW50cnktPmZpbGVuYW1l
LCAmZW50cnktPm11c3RfcmV2YWxpZGF0ZSwKKwkJCQkgICAgJmVudHJ5LT5mcmVzaG5lc3NfbGlm
ZXRpbWUsICZlbnRyeS0+Y29ycmVjdGVkX2luaXRpYWxfYWdlLAorCQkJCSAgICAmZW50cnktPnJl
c3BvbnNlX3RpbWUsICZlbnRyeS0+aGl0cywgJmVudHJ5LT5sZW5ndGgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmaGVhZGVyc19pdGVyKSkgeworCQljb25zdCBnY2hhciAq
aGVhZGVyX2tleSwgKmhlYWRlcl92YWx1ZTsKKworCQkvKiBTb3VwTWVzc2FnZSBIZWFkZXJzICov
CisJCWVudHJ5LT5oZWFkZXJzID0gc291cF9tZXNzYWdlX2hlYWRlcnNfbmV3IChTT1VQX01FU1NB
R0VfSEVBREVSU19SRVNQT05TRSk7CisJCXdoaWxlIChnX3ZhcmlhbnRfaXRlcl9sb29wIChoZWFk
ZXJzX2l0ZXIsIFdFQktJVF9TT1VQX0NBQ0hFX0RFQ09ERV9IRUFERVJTX0ZPUk1BVCwgJmhlYWRl
cl9rZXksICZoZWFkZXJfdmFsdWUpKQorCQkJc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kIChl
bnRyeS0+aGVhZGVycywgaGVhZGVyX2tleSwgaGVhZGVyX3ZhbHVlKTsKKworCQkvKiBJbnNlcnQg
aW4gY2FjaGUgKi8KKwkJaWYgKCF3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9pbnNlcnRfYnlfa2V5
IChjYWNoZSwgKGNvbnN0IGdjaGFyICopZW50cnktPmtleSwgZW50cnksIEZBTFNFKSkKKwkJCXdl
YmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUgKGVudHJ5LCBUUlVFKTsKKworCQkvKiBOZXcgZW50
cnkgZm9yIHRoZSBuZXh0IGl0ZXJhdGlvbi4gVGhpcyBjcmVhdGVzIGFuCisJCSAgIGV4dHJhIG9i
amVjdCB0aGUgbGFzdCBpdGVyYXRpb24gYnV0IGl0J3Mgd29ydGggaXQKKwkJICAgYXMgd2Ugc2F2
ZSBzZXZlcmFsIGlmJ3MgKi8KKwkJZW50cnkgPSBnX3NsaWNlX25ldzAgKFdlYktpdFNvdXBDYWNo
ZUVudHJ5KTsKKwl9CisJLyogUmVtb3ZlIGxhc3QgY3JlYXRlZCBlbnRyeSAqLworCWdfc2xpY2Vf
ZnJlZSAoV2ViS2l0U291cENhY2hlRW50cnksIGVudHJ5KTsKKworCS8qIFNvcnQgTFJVIChzaG91
bGRuJ3QgYmUgbmVlZGVkKS4gRmlyc3QgcmV2ZXJzZSBhcyBlbGVtZW50cworCSAqIGFyZSBhbHdh
eXMgcHJlcGVuZGVkIHdoZW4gaW5zZXJ0aW5nCisJICovCisJY2FjaGUtPnByaXYtPmxydV9zdGFy
dCA9IGdfbGlzdF9yZXZlcnNlIChjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0KTsKKwljYWNoZS0+cHJp
di0+bHJ1X3N0YXJ0ID0gZ19saXN0X3NvcnQgKGNhY2hlLT5wcml2LT5scnVfc3RhcnQsIGxydV9j
b21wYXJlX2Z1bmMpOworCisJLyogZnJlZXMgKi8KKwlnX3ZhcmlhbnRfaXRlcl9mcmVlIChlbnRy
aWVzX2l0ZXIpOworCWdfdmFyaWFudF91bnJlZiAoY2FjaGVfdmFyaWFudCk7Cit9CisKK3ZvaWQK
K3dlYmtpdF9zb3VwX2NhY2hlX3NldF9tYXhfc2l6ZSAoV2ViS2l0U291cENhY2hlICpjYWNoZSwK
KwkJCQlndWludCBtYXhfc2l6ZSkKK3sKKwljYWNoZS0+cHJpdi0+bWF4X3NpemUgPSBtYXhfc2l6
ZTsKKwljYWNoZS0+cHJpdi0+bWF4X2VudHJ5X2RhdGFfc2l6ZSA9IGNhY2hlLT5wcml2LT5tYXhf
c2l6ZSAvIE1BWF9FTlRSWV9EQVRBX1BFUkNFTlRBR0U7Cit9CisKK2d1aW50Cit3ZWJraXRfc291
cF9jYWNoZV9nZXRfbWF4X3NpemUgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUpCit7CisJcmV0dXJu
IGNhY2hlLT5wcml2LT5tYXhfc2l6ZTsKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLmggYi9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmI4MTdkM2UKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5oCkBAIC0wLDAgKzEs
OTUgQEAKKy8qCisgKiBzb3VwLWNhY2hlLmg6CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAy
MDEwIElnYWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdFQktJVF9TT1VQX0NBQ0hFX0gKKyNkZWZpbmUgV0VC
S0lUX1NPVVBfQ0FDSEVfSCAxCisKKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVmaW5lcy5oPgor
CisjaW5jbHVkZSA8bGlic291cC9zb3VwLXR5cGVzLmg+CisjaW5jbHVkZSA8Z2lvL2dpby5oPgor
CitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfU09VUF9DQUNIRSAgICAgICAg
ICAgICh3ZWJraXRfc291cF9jYWNoZV9nZXRfdHlwZSAoKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBf
Q0FDSEUob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiks
IFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUsIFdlYktpdFNvdXBDYWNoZSkpCisjZGVmaW5lIFdFQktJ
VF9TT1VQX0NBQ0hFX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChr
bGFzcyksIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUsIFdlYktpdFNvdXBDYWNoZUNsYXNzKSkKKyNk
ZWZpbmUgV0VCS0lUX0lTX1NPVVBfQ0FDSEUob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfVFlQRSAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUpKQorI2RlZmluZSBXRUJL
SVRfSVNfU09VUF9DQUNIRV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgo
b2JqKSwgV0VCS0lUX1RZUEVfU09VUF9DQUNIRSkpCisjZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hF
X0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIFdFQktJ
VF9UWVBFX1NPVVBfQ0FDSEUsIFdlYktpdFNvdXBDYWNoZUNsYXNzKSkKKwordHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdFNvdXBDYWNoZSBXZWJLaXRTb3VwQ2FjaGU7Cit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0U291cENhY2hlUHJpdmF0ZSBXZWJLaXRTb3VwQ2FjaGVQcml2YXRlOworCit0eXBlZGVmIGVu
dW0geworCVdFQktJVF9TT1VQX0NBQ0hFX0NBQ0hFQUJMRSA9ICgxIDw8IDApLAorCVdFQktJVF9T
T1VQX0NBQ0hFX1VOQ0FDSEVBQkxFID0gKDEgPDwgMSksCisJV0VCS0lUX1NPVVBfQ0FDSEVfSU5W
QUxJREFURVMgPSAoMSA8PCAyKSwKKwlXRUJLSVRfU09VUF9DQUNIRV9WQUxJREFURVMgPSAoMSA8
PCAzKQorfSBXZWJLaXRTb3VwQ2FjaGVhYmlsaXR5OworCit0eXBlZGVmIGVudW0geworCVdFQktJ
VF9TT1VQX0NBQ0hFX1JFU1BPTlNFX0ZSRVNILAorCVdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNF
X05FRURTX1ZBTElEQVRJT04sCisJV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfU1RBTEUKK30g
V2ViS2l0U291cENhY2hlUmVzcG9uc2U7CisKK3R5cGVkZWYgZW51bSB7CisJV0VCS0lUX1NPVVBf
Q0FDSEVfU0lOR0xFX1VTRVIsCisJV0VCS0lUX1NPVVBfQ0FDSEVfU0hBUkVECit9IFdlYktpdFNv
dXBDYWNoZVR5cGU7CisKK3N0cnVjdCBfV2ViS2l0U291cENhY2hlIHsKKwlHT2JqZWN0IHBhcmVu
dF9pbnN0YW5jZTsKKworCVdlYktpdFNvdXBDYWNoZVByaXZhdGUgKnByaXY7Cit9OworCit0eXBl
ZGVmIHN0cnVjdCB7CisJR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKKworCS8qIG1ldGhvZHMg
Ki8KKwlXZWJLaXRTb3VwQ2FjaGVhYmlsaXR5ICgqZ2V0X2NhY2hlYWJpbGl0eSkoV2ViS2l0U291
cENhY2hlICpjYWNoZSwgU291cE1lc3NhZ2UgKm1zZyk7CisKKwkvKiBQYWRkaW5nIGZvciBmdXR1
cmUgZXhwYW5zaW9uICovCisJdm9pZCAoKl9saWJzb3VwX3Jlc2VydmVkMSkodm9pZCk7CisJdm9p
ZCAoKl9saWJzb3VwX3Jlc2VydmVkMikodm9pZCk7CisJdm9pZCAoKl9saWJzb3VwX3Jlc2VydmVk
Mykodm9pZCk7Cit9IFdlYktpdFNvdXBDYWNoZUNsYXNzOworCitXRUJLSVRfQVBJIEdUeXBlICAg
ICAgICAgICAgIHdlYmtpdF9zb3VwX2NhY2hlX2dldF90eXBlICh2b2lkKTsKK1dFQktJVF9BUEkg
V2ViS2l0U291cENhY2hlICAqd2Via2l0X3NvdXBfY2FjaGVfbmV3IChjb25zdCBjaGFyICAqY2Fj
aGVfZGlyLAorCQkJCQkJICAgIFdlYktpdFNvdXBDYWNoZVR5cGUgY2FjaGVfdHlwZSk7CitXRUJL
SVRfQVBJIHZvaWQgICAgICAgICAgICAgIHdlYmtpdF9zb3VwX2NhY2hlX2ZsdXNoIChXZWJLaXRT
b3VwQ2FjaGUgICAqY2FjaGUpOworV0VCS0lUX0FQSSB2b2lkICAgICAgICAgICAgICB3ZWJraXRf
c291cF9jYWNoZV9jbGVhciAoV2ViS2l0U291cENhY2hlICAgKmNhY2hlKTsKKworV0VCS0lUX0FQ
SSB2b2lkICAgICAgICAgICAgICB3ZWJraXRfc291cF9jYWNoZV9kdW1wIChXZWJLaXRTb3VwQ2Fj
aGUgKmNhY2hlKTsKK1dFQktJVF9BUEkgdm9pZCAgICAgICAgICAgICAgd2Via2l0X3NvdXBfY2Fj
aGVfbG9hZCAoV2ViS2l0U291cENhY2hlICpjYWNoZSk7CisKK1dFQktJVF9BUEkgdm9pZCAgICAg
ICAgICAgICAgd2Via2l0X3NvdXBfY2FjaGVfc2V0X21heF9zaXplIChXZWJLaXRTb3VwQ2FjaGUg
KmNhY2hlLAorCQkJCQkJCSAgICAgZ3VpbnQgbWF4X3NpemUpOworV0VCS0lUX0FQSSBndWludCAg
ICAgICAgICAgICB3ZWJraXRfc291cF9jYWNoZV9nZXRfbWF4X3NpemUgKFdlYktpdFNvdXBDYWNo
ZSAqY2FjaGUpOworCitHX0VORF9ERUNMUworCisKKyNlbmRpZiAvKiBXRUJLSVRfU09VUF9DQUNI
RV9IICovCisKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xz
L0NoYW5nZUxvZwppbmRleCA2MDY1Y2QwLi5hNGRhZDFiIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMTAtMDktMDYgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gQWRk
IEhUVFAgY2FjaGluZyBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00NDI2MQorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IGFkZGVkIHBh
dGhzIGZvciB0aGUgbmV3IHNvdXAgSFRUUCBjYWNoZSBjb2RlCisKIDIwMTAtMDktMjYgIE1paGFp
IFBhcnBhcml0YSAgPG1paGFpcEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
T2phbiBWYWZhaS4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0dOVW1ha2VmaWxlLmFtIGIvV2Vi
S2l0VG9vbHMvR05VbWFrZWZpbGUuYW0KaW5kZXggZTM4NDEwMS4uY2FjZjA1YiAxMDA2NDQKLS0t
IGEvV2ViS2l0VG9vbHMvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViS2l0VG9vbHMvR05VbWFrZWZp
bGUuYW0KQEAgLTYsNiArNiw3IEBAIG5vaW5zdF9QUk9HUkFNUyArPSBcCiAjIEd0a0xhdW5jaGVy
CiBQcm9ncmFtc19HdGtMYXVuY2hlcl9DUFBGTEFHUyA9IFwKIAktSSQoc3JjZGlyKS9XZWJLaXQv
Z3RrIFwKKwktSSQoc3JjZGlyKS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS8g
XAogCS1JJCh0b3BfYnVpbGRkaXIpL1dlYktpdC9ndGsgXAogCS1JJCh0b3BfYnVpbGRkaXIpL0Rl
cml2ZWRTb3VyY2VzIFwKIAkkKGdsb2JhbF9jcHBmbGFncykgXApAQCAtMzgsNiArMzksNyBAQCBk
dW1wcmVuZGVydHJlZV9jcHBmbGFncyA6PSBcCiAJLUkkKHNyY2RpcikvV2ViS2l0VG9vbHMvRHVt
cFJlbmRlclRyZWUvZ3RrIFwKIAktSSQoc3JjZGlyKS9XZWJLaXQvZ3RrIFwKIAktSSQoc3JjZGly
KS9XZWJDb3JlL3BsYXRmb3JtL2d0ayBcCisJLUkkKHNyY2RpcikvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvY2FjaGUvIFwKIAktSSQodG9wX2J1aWxkZGlyKS9XZWJLaXQvZ3RrIFwKIAkt
SSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcyBcCiAJJChnbG9iYWxfY3BwZmxhZ3MpIFwK
ZGlmZiAtLWdpdCBhL2F1dG90b29scy93ZWJraXQubTQgYi9hdXRvdG9vbHMvd2Via2l0Lm00Cmlu
ZGV4IDM3OWZhOGYuLjZiNDRmMzAgMTAwNjQ0Ci0tLSBhL2F1dG90b29scy93ZWJraXQubTQKKysr
IGIvYXV0b3Rvb2xzL3dlYmtpdC5tNApAQCAtMTA4LDcgKzEwOCw3IEBAIEFDX0RFRlVOX09OQ0Uo
W19XRUJLSVRfQ0hFQ0tfR0xJQl0sCiBbZG5sCiBkbmwgY2hlY2sgZm9yIGdsaWIKICMgVmVyc2lv
biByZXF1aXJlbWVudHMKLUdMSUJfUkVRVUlSRURfVkVSU0lPTj0yLjIxLjMKK0dMSUJfUkVRVUlS
RURfVkVSU0lPTj0yLjI0CiBHT0JKRUNUX1JFUVVJUkVEX1ZFUlNJT049Mi4wCiBHVEhSRUFEX1JF
UVVJUkVEX1ZFUlNJT049Mi4wCiAKLS0gCjEuNy4xCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69209</attachid>
            <date>2010-09-29 10:17:55 -0700</date>
            <delta_ts>2010-09-30 11:16:06 -0700</delta_ts>
            <desc>WebKitGtk+ to use the new API from the imported SoupURILoader code</desc>
            <filename>0002-WebKitGtk-to-use-the-new-API-from-the-imported-SoupU.patch</filename>
            <type>text/plain</type>
            <size>33065</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">RnJvbSA1OTIwZTkxYjc2YzQ4ZTA5ZGYwYTYxNWNjMzUxMzE5MWMzN2IwNGI2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTZXJnaW8gVmlsbGFyIFNlbmluIDxzdmlsbGFyQGlnYWxpYS5j
b20+CkRhdGU6IFdlZCwgMjIgU2VwIDIwMTAgMTA6MTg6MDYgKzAyMDAKU3ViamVjdDogW1BBVENI
IDIvMl0gV2ViS2l0R3RrKyB0byB1c2UgdGhlIG5ldyBBUEkgZnJvbSB0aGUgaW1wb3J0ZWQgU291
cFVSSUxvYWRlciBjb2RlCgotLS0KIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhh
bmRsZUludGVybmFsLmggIHwgICAyMCArLQogLi4uL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNv
dXJjZUhhbmRsZVNvdXAuY3BwICAgfCAgNDgxICsrKysrKysrKy0tLS0tLS0tLS0tCiBXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3QuaCAgICB8ICAgIDMgKy0KIC4u
Li9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHAgIHwgICAyMyAr
CiA0IGZpbGVzIGNoYW5nZWQsIDI0OCBpbnNlcnRpb25zKCspLCAyNzkgZGVsZXRpb25zKC0pCgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJu
YWwuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmgK
aW5kZXggOTZmYmYwMC4uM2IwZjc1MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCkBAIC00Niw2ICs0Niw4IEBACiAjZW5kaWYKIAog
I2lmIFVTRShTT1VQKQorI2luY2x1ZGUgInNvdXAtcmVxdWVzdGVyLmgiCisjaW5jbHVkZSA8R1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgogY2xhc3MgRnJhbWU7CiAjZW5kaWYK
QEAgLTExMCwxMyArMTEyLDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNpZiBVU0UoU09VUCkK
ICAgICAgICAgICAgICwgbV9tc2coMCkKICAgICAgICAgICAgICwgbV9jYW5jZWxsZWQoZmFsc2Up
Ci0gICAgICAgICAgICAsIG1fZ2ZpbGUoMCkKKyAgICAgICAgICAgICwgbV9zb3VwUmVxdWVzdCgw
KQorICAgICAgICAgICAgLCBtX3JlcXVlc3RlcigwKQogICAgICAgICAgICAgLCBtX2lucHV0U3Ry
ZWFtKDApCiAgICAgICAgICAgICAsIG1fY2FuY2VsbGFibGUoMCkKICAgICAgICAgICAgICwgbV9i
dWZmZXIoMCkKLSAgICAgICAgICAgICwgbV9idWZmZXJTaXplKDApCiAgICAgICAgICAgICAsIG1f
dG90YWwoMCkKICAgICAgICAgICAgICwgbV9pZGxlSGFuZGxlcigwKQorICAgICAgICAgICAgLCBt
X2dvdENodW5rSGFuZGxlcigwKQogI2VuZGlmCiAjaWYgUExBVEZPUk0oUVQpCiAgICAgICAgICAg
ICAsIG1fam9iKDApCkBAIC0xMzMsNiArMTM2LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICAgICAgbV91c2VyID0gdXJsLnVzZXIoKTsKICAgICAgICAgICAgIG1fcGFzcyA9IHVybC5w
YXNzKCk7CiAgICAgICAgICAgICBtX2ZpcnN0UmVxdWVzdC5yZW1vdmVDcmVkZW50aWFscygpOwor
I2lmIFVTRShTT1VQKQorICAgICAgICAgICAgbV9yZXF1ZXN0ZXIgPSBzb3VwX3JlcXVlc3Rlcl9u
ZXcoKTsKKyNlbmRpZgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB+UmVzb3VyY2VIYW5k
bGVJbnRlcm5hbCgpOwpAQCAtMTg4LDEzICsxOTQsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBTb3VwTWVzc2FnZSogbV9tc2c7CiAgICAgICAgIFJlc291cmNlUmVzcG9uc2UgbV9y
ZXNwb25zZTsKICAgICAgICAgYm9vbCBtX2NhbmNlbGxlZDsKLSAgICAgICAgR0ZpbGUqIG1fZ2Zp
bGU7Ci0gICAgICAgIEdJbnB1dFN0cmVhbSogbV9pbnB1dFN0cmVhbTsKLSAgICAgICAgR0NhbmNl
bGxhYmxlKiBtX2NhbmNlbGxhYmxlOworICAgICAgICBQbGF0Zm9ybVJlZlB0cjxTb3VwUmVxdWVz
dD4gbV9zb3VwUmVxdWVzdDsKKyAgICAgICAgUGxhdGZvcm1SZWZQdHI8U291cFJlcXVlc3Rlcj4g
bV9yZXF1ZXN0ZXI7CisgICAgICAgIFBsYXRmb3JtUmVmUHRyPEdJbnB1dFN0cmVhbT4gbV9pbnB1
dFN0cmVhbTsKKyAgICAgICAgUGxhdGZvcm1SZWZQdHI8R0NhbmNlbGxhYmxlPiBtX2NhbmNlbGxh
YmxlOwogICAgICAgICBjaGFyKiBtX2J1ZmZlcjsKLSAgICAgICAgZ3NpemUgbV9idWZmZXJTaXpl
LCBtX3RvdGFsOworICAgICAgICBnc2l6ZSBtX3RvdGFsOwogICAgICAgICBndWludCBtX2lkbGVI
YW5kbGVyOwogICAgICAgICBSZWZQdHI8TmV0d29ya2luZ0NvbnRleHQ+IG1fY29udGV4dDsKKyAg
ICAgICAgZ3Vsb25nIG1fZ290Q2h1bmtIYW5kbGVyOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oUVQp
CiAgICAgICAgIFFOZXR3b3JrUmVwbHlIYW5kbGVyKiBtX2pvYjsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCmluZGV4IDBkODQz
ODguLjRiNGU2MzMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jl
c291cmNlSGFuZGxlU291cC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
UmVzb3VyY2VIYW5kbGVTb3VwLmNwcApAQCAtNDUsOCArNDUsOCBAQAogI2luY2x1ZGUgIlJlc291
cmNlSGFuZGxlSW50ZXJuYWwuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5j
bHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSAic291cC1yZXF1ZXN0LWh0dHAuaCIKICNp
bmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKLQogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8
ZmNudGwuaD4KICNpbmNsdWRlIDxnaW8vZ2lvLmg+CkBAIC01OCw2ICs1OCw4IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorI2RlZmluZSBSRUFEX0JVRkZFUl9TSVpFIDgxOTIKKwogY2xhc3Mg
V2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyIDogcHVibGljIFJlc291cmNlSGFuZGxlQ2xpZW50LCBw
dWJsaWMgTm9uY29weWFibGUgewogcHVibGljOgogICAgIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRl
cihSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSAmLCBWZWN0b3I8Y2hhcj4mKTsKQEAg
LTEyMCw5ICsxMjIsMTEgQEAgdm9pZCBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXI6OnJ1bigpCiAg
ICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKIH0KIAotc3RhdGljIHZvaWQgY2xl
YW51cEdpb09wZXJhdGlvbihSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBib29sIGlzRGVzdHJveWlu
Zyk7Ci1zdGF0aWMgYm9vbCBzdGFydERhdGEoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgU3RyaW5n
IHVybFN0cmluZyk7Ci1zdGF0aWMgYm9vbCBzdGFydEdpbyhSZXNvdXJjZUhhbmRsZSogaGFuZGxl
LCBLVVJMIHVybCk7CitzdGF0aWMgdm9pZCBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oUmVz
b3VyY2VIYW5kbGUqLCBib29sIGlzRGVzdHJveWluZyk7CitzdGF0aWMgdm9pZCBzZW5kUmVxdWVz
dENhbGxiYWNrKEdPYmplY3QqLCBHQXN5bmNSZXN1bHQqLCBncG9pbnRlcik7CitzdGF0aWMgdm9p
ZCByZWFkQ2FsbGJhY2soR09iamVjdCosIEdBc3luY1Jlc3VsdCosIGdwb2ludGVyKTsKK3N0YXRp
YyB2b2lkIGNsb3NlQ2FsbGJhY2soR09iamVjdCosIEdBc3luY1Jlc3VsdCosIGdwb2ludGVyKTsK
K3N0YXRpYyBib29sIHN0YXJ0R2lvKFJlc291cmNlSGFuZGxlKiwgS1VSTCk7CiAKIFJlc291cmNl
SGFuZGxlSW50ZXJuYWw6On5SZXNvdXJjZUhhbmRsZUludGVybmFsKCkKIHsKQEAgLTEzMSw2ICsx
MzUsOSBAQCBSZXNvdXJjZUhhbmRsZUludGVybmFsOjp+UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCgp
CiAgICAgICAgIG1fbXNnID0gMDsKICAgICB9CiAKKyAgICBpZiAobV9zb3VwUmVxdWVzdCkKKyAg
ICAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QobV9zb3VwUmVxdWVzdC5nZXQoKSksICJ3
ZWJraXQtcmVzb3VyY2UiLCAwKTsKKwogICAgIGlmIChtX2lkbGVIYW5kbGVyKSB7CiAgICAgICAg
IGdfc291cmNlX3JlbW92ZShtX2lkbGVIYW5kbGVyKTsKICAgICAgICAgbV9pZGxlSGFuZGxlciA9
IDA7CkBAIC0xNDMsNyArMTUwLDcgQEAgUmVzb3VyY2VIYW5kbGU6On5SZXNvdXJjZUhhbmRsZSgp
CiAgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChkLT5tX21zZywg
R19TSUdOQUxfTUFUQ0hfREFUQSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAsIDAsIDAsIDAsIHRoaXMpOwogCi0gICAgY2xlYW51cEdpb09wZXJhdGlvbih0
aGlzLCB0cnVlKTsKKyAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24odGhpcywgdHJ1ZSk7
CiB9CiAKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnByZXBhcmVGb3JVUkwoY29uc3QgS1VSTCAmdXJs
KQpAQCAtMTg1LDkgKzE5Miw4IEBAIHN0YXRpYyB2b2lkIHJlc3RhcnRlZENhbGxiYWNrKFNvdXBN
ZXNzYWdlKiBtc2csIGdwb2ludGVyIGRhdGEpCiAgICAgaWYgKGQtPm1fY2FuY2VsbGVkKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBjaGFyKiB1cmkgPSBzb3VwX3VyaV90b19zdHJpbmcoc291cF9t
ZXNzYWdlX2dldF91cmkobXNnKSwgZmFsc2UpOwotICAgIFN0cmluZyBsb2NhdGlvbiA9IFN0cmlu
Zyh1cmkpOwotICAgIGdfZnJlZSh1cmkpOworICAgIEdPd25QdHI8Y2hhcj4gdXJpKHNvdXBfdXJp
X3RvX3N0cmluZyhzb3VwX21lc3NhZ2VfZ2V0X3VyaShtc2cpLCBmYWxzZSkpOworICAgIFN0cmlu
ZyBsb2NhdGlvbiA9IFN0cmluZzo6ZnJvbVVURjgodXJpLmdldCgpKTsKICAgICBLVVJMIG5ld1VS
TCA9IEtVUkwoaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKSwgbG9jYXRpb24pOwogCiAgICAg
UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QgPSBoYW5kbGUtPmZpcnN0UmVxdWVzdCgpOwpAQCAtMjkz
LDUzICsyOTksOSBAQCBzdGF0aWMgdm9pZCBnb3RDaHVua0NhbGxiYWNrKFNvdXBNZXNzYWdlKiBt
c2csIFNvdXBCdWZmZXIqIGNodW5rLCBncG9pbnRlciBkYXRhKQogICAgICAgICByZXR1cm47CiAK
ICAgICBjbGllbnQtPmRpZFJlY2VpdmVEYXRhKGhhbmRsZS5nZXQoKSwgY2h1bmstPmRhdGEsIGNo
dW5rLT5sZW5ndGgsIGZhbHNlKTsKLX0KLQotLy8gQ2FsbGVkIGF0IHRoZSBlbmQgb2YgdGhlIG1l
c3NhZ2UsIHdpdGggYWxsIHRoZSBuZWNlc3NhcnkgYWJvdXQgdGhlIGxhc3QgaW5mb3JtYXRpb25z
LgotLy8gRG9lc24ndCBnZXQgY2FsbGVkIGZvciByZWRpcmVjdHMuCi1zdGF0aWMgdm9pZCBmaW5p
c2hlZENhbGxiYWNrKFNvdXBTZXNzaW9uICpzZXNzaW9uLCBTb3VwTWVzc2FnZSogbXNnLCBncG9p
bnRlciBkYXRhKQotewotICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gYWRvcHRS
ZWYoc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihkYXRhKSk7Ci0gICAgLy8gVE9ETzogbWF5
YmUgd2Ugc2hvdWxkIHJ1biB0aGlzIGNvZGUgZXZlbiBpZiB0aGVyZSdzIG5vIGNsaWVudD8KLSAg
ICBpZiAoIWhhbmRsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVzb3VyY2VIYW5kbGVJbnRl
cm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKLQotICAgIFJlc291cmNlSGFuZGxlQ2xp
ZW50KiBjbGllbnQgPSBoYW5kbGUtPmNsaWVudCgpOwotICAgIGlmICghY2xpZW50KQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAoZC0+bV9jYW5jZWxsZWQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChTT1VQX1NUQVRVU19JU19UUkFOU1BPUlRfRVJST1IobXNnLT5zdGF0dXNfY29kZSkp
IHsKLSAgICAgICAgY2hhciogdXJpID0gc291cF91cmlfdG9fc3RyaW5nKHNvdXBfbWVzc2FnZV9n
ZXRfdXJpKG1zZyksIGZhbHNlKTsKLSAgICAgICAgUmVzb3VyY2VFcnJvciBlcnJvcihnX3F1YXJr
X3RvX3N0cmluZyhTT1VQX0hUVFBfRVJST1IpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1zZy0+c3RhdHVzX2NvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzo6ZnJvbVVURjgobXNnLT5yZWFzb25fcGhy
YXNlKSk7Ci0gICAgICAgIGdfZnJlZSh1cmkpOwotICAgICAgICBjbGllbnQtPmRpZEZhaWwoaGFu
ZGxlLmdldCgpLCBlcnJvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobXNn
LT5zdGF0dXNfY29kZSA9PSBTT1VQX1NUQVRVU19VTkFVVEhPUklaRUQpIHsKLSAgICAgICAgZmls
bFJlc3BvbnNlRnJvbU1lc3NhZ2UobXNnLCAmZC0+bV9yZXNwb25zZSk7Ci0gICAgICAgIGNsaWVu
dC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGhhbmRsZS5nZXQoKSwgZC0+bV9yZXNwb25zZSk7Ci0KLSAg
ICAgICAgLy8gV2ViQ29yZSBtaWdodCBoYXZlIGNhbmNlbGxlZCB0aGUgam9iIGluIHRoZSB3aGls
ZQotICAgICAgICBpZiAoZC0+bV9jYW5jZWxsZWQpCi0gICAgICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgaWYgKG1zZy0+cmVzcG9uc2VfYm9keS0+ZGF0YSkKLSAgICAgICAgICAgIGNsaWVudC0+
ZGlkUmVjZWl2ZURhdGEoaGFuZGxlLmdldCgpLCBtc2ctPnJlc3BvbnNlX2JvZHktPmRhdGEsIG1z
Zy0+cmVzcG9uc2VfYm9keS0+bGVuZ3RoLCB0cnVlKTsKLSAgICB9Ci0KLSAgICBjbGllbnQtPmRp
ZEZpbmlzaExvYWRpbmcoaGFuZGxlLmdldCgpLCAwKTsKIH0KIAotLy8gcGFyc2VEYXRhVXJsKCkg
aXMgdGFrZW4gZnJvbSB0aGUgQ1VSTCBodHRwIGJhY2tlbmQuCiBzdGF0aWMgZ2Jvb2xlYW4gcGFy
c2VEYXRhVXJsKGdwb2ludGVyIGNhbGxiYWNrRGF0YSkKIHsKICAgICBSZXNvdXJjZUhhbmRsZSog
aGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihjYWxsYmFja0RhdGEpOwpAQCAt
MzY0LDcgKzMyNiw2IEBAIHN0YXRpYyBnYm9vbGVhbiBwYXJzZURhdGFVcmwoZ3BvaW50ZXIgY2Fs
bGJhY2tEYXRhKQogICAgIH0KIAogICAgIFN0cmluZyBtZWRpYVR5cGUgPSB1cmwuc3Vic3RyaW5n
KDUsIGluZGV4IC0gNSk7Ci0gICAgU3RyaW5nIGRhdGEgPSB1cmwuc3Vic3RyaW5nKGluZGV4ICsg
MSk7CiAKICAgICBib29sIGlzQmFzZTY0ID0gbWVkaWFUeXBlLmVuZHNXaXRoKCI7YmFzZTY0Iiwg
ZmFsc2UpOwogICAgIGlmIChpc0Jhc2U2NCkKQEAgLTM4MSw3ICszNDIsNiBAQCBzdGF0aWMgZ2Jv
b2xlYW4gcGFyc2VEYXRhVXJsKGdwb2ludGVyIGNhbGxiYWNrRGF0YSkKICAgICByZXNwb25zZS5z
ZXRNaW1lVHlwZShtaW1lVHlwZSk7CiAKICAgICBpZiAoaXNCYXNlNjQpIHsKLSAgICAgICAgZGF0
YSA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhkYXRhKTsKICAgICAgICAgcmVzcG9uc2Uuc2V0
VGV4dEVuY29kaW5nTmFtZShjaGFyc2V0KTsKICAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlUmVz
cG9uc2UoaGFuZGxlLCByZXNwb25zZSk7CiAKQEAgLTM5MCwzMiArMzUwLDM5IEBAIHN0YXRpYyBn
Ym9vbGVhbiBwYXJzZURhdGFVcmwoZ3BvaW50ZXIgY2FsbGJhY2tEYXRhKQogICAgICAgICAvLyBv
dXQgaW4gZWl0aGVyIG9mIHRob3NlIGNhc2VzLgogICAgICAgICBpZiAoZC0+bV9jYW5jZWxsZWQg
fHwgIWhhbmRsZS0+Y2xpZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgLy8gVXNlIHRoZSBHTGliIEJhc2U2NCwgc2luY2UgV2ViQ29yZSdzIGRlY29kZXIgaXNuJ3QK
LSAgICAgICAgLy8gZ2VuZXJhbC1wdXJwb3NlIGFuZCBmYWlscyBvbiBBY2lkMyB0ZXN0IDk3ICh3
aGl0ZXNwYWNlKS4KLSAgICAgICAgc2l6ZV90IG91dExlbmd0aCA9IDA7Ci0gICAgICAgIGNoYXIq
IG91dERhdGEgPSAwOwotICAgICAgICBvdXREYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
Z19iYXNlNjRfZGVjb2RlKGRhdGEudXRmOCgpLmRhdGEoKSwgJm91dExlbmd0aCkpOwotICAgICAg
ICBpZiAob3V0RGF0YSAmJiBvdXRMZW5ndGggPiAwKQotICAgICAgICAgICAgY2xpZW50LT5kaWRS
ZWNlaXZlRGF0YShoYW5kbGUsIG91dERhdGEsIG91dExlbmd0aCwgMCk7Ci0gICAgICAgIGdfZnJl
ZShvdXREYXRhKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBXZSBoYXZlIHRvIGNvbnZlcnQg
dG8gVVRGLTE2IGVhcmx5IGR1ZSB0byBsaW1pdGF0aW9ucyBpbiBLVVJMCi0gICAgICAgIGRhdGEg
PSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoZGF0YSwgVGV4dEVuY29kaW5nKGNoYXJzZXQpKTsK
ICAgICAgICAgcmVzcG9uc2Uuc2V0VGV4dEVuY29kaW5nTmFtZSgiVVRGLTE2Iik7CiAgICAgICAg
IGNsaWVudC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGhhbmRsZSwgcmVzcG9uc2UpOwogCiAgICAgICAg
IGlmIChkLT5tX2NhbmNlbGxlZCB8fCAhaGFuZGxlLT5jbGllbnQoKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoZGF0YS5sZW5ndGgoKSA+IDApCi0gICAgICAgICAg
ICBjbGllbnQtPmRpZFJlY2VpdmVEYXRhKGhhbmRsZSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBj
aGFyKj4oZGF0YS5jaGFyYWN0ZXJzKCkpLCBkYXRhLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSwg
MCk7CiAgICAgfQogCiAgICAgaWYgKGQtPm1fY2FuY2VsbGVkIHx8ICFoYW5kbGUtPmNsaWVudCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBjbGllbnQtPmRpZEZpbmlzaExvYWRpbmco
aGFuZGxlLCAwKTsKKyAgICBTb3VwU2Vzc2lvbiogc2Vzc2lvbiA9IGhhbmRsZS0+ZGVmYXVsdFNl
c3Npb24oKTsKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgZC0+bV9zb3VwUmVxdWVz
dCA9IHNvdXBfcmVxdWVzdGVyX3JlcXVlc3QoZC0+bV9yZXF1ZXN0ZXIuZ2V0KCksIGhhbmRsZS0+
Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc2Vzc2lvbiwgJmVy
cm9yLm91dFB0cigpKTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIEdJbnB1dFN0cmVhbSogaW4gPSBzb3VwX3JlcXVlc3Rfc2VuZChkLT5tX3NvdXBSZXF1ZXN0
LmdldCgpLCAwLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGlmIChlcnJvcikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgZC0+bV9pbnB1dFN0cmVhbSA9IGluOworICAgIGQtPm1fYnVmZmVy
ID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGdfbWFsbG9jKFJFQURfQlVGRkVSX1NJWkUpKTsKKyAgICBk
LT5tX3RvdGFsID0gMDsKKworICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1faW5w
dXRTdHJlYW0uZ2V0KCkpLCAid2Via2l0LXJlc291cmNlIiwgaGFuZGxlKTsKKyAgICAvLyBiYWxh
bmNlZCBieSBhIGRlcmVmKCkgaW4gY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uLCB3aGljaCBz
aG91bGQgYWx3YXlzIHJ1bgorICAgIGhhbmRsZS0+cmVmKCk7CisKKyAgICBkLT5tX2NhbmNlbGxh
YmxlID0gZ19jYW5jZWxsYWJsZV9uZXcoKTsKKyAgICBnX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5j
KGQtPm1faW5wdXRTdHJlYW0uZ2V0KCksIGQtPm1fYnVmZmVyLCBSRUFEX0JVRkZFUl9TSVpFLCBH
X1BSSU9SSVRZX0RFRkFVTFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLT5tX2Nh
bmNlbGxhYmxlLmdldCgpLCByZWFkQ2FsbGJhY2ssIEdJTlRfVE9fUE9JTlRFUighaXNCYXNlNjQp
KTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTQ2OSw2ICs0MzYsMTI2IEBAIHN0YXRpYyB2
b2lkIGVuc3VyZVNlc3Npb25Jc0luaXRpYWxpemVkKFNvdXBTZXNzaW9uKiBzZXNzaW9uKQogICAg
IGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKHNlc3Npb24pLCAid2Via2l0LWluaXQiLCByZWlu
dGVycHJldF9jYXN0PHZvaWQqPigweGRlYWRiZWVmKSk7CiB9CiAKK3N0YXRpYyB2b2lkIGNsZWFu
dXBTb3VwUmVxdWVzdE9wZXJhdGlvbihSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBib29sIGlzRGVz
dHJveWluZyA9IGZhbHNlKQoreworICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5k
bGUtPmdldEludGVybmFsKCk7CisKKyAgICBpZiAoZC0+bV9zb3VwUmVxdWVzdCkgeworICAgICAg
ICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5tX3NvdXBSZXF1ZXN0LmdldCgpKSwgIndl
YmtpdC1yZXNvdXJjZSIsIDApOworICAgICAgICBkLT5tX3NvdXBSZXF1ZXN0LmNsZWFyKCk7Cisg
ICAgfQorCisgICAgaWYgKGQtPm1faW5wdXRTdHJlYW0pIHsKKyAgICAgICAgZ19vYmplY3Rfc2V0
X2RhdGEoR19PQkpFQ1QoZC0+bV9pbnB1dFN0cmVhbS5nZXQoKSksICJ3ZWJraXQtcmVzb3VyY2Ui
LCAwKTsKKyAgICAgICAgZC0+bV9pbnB1dFN0cmVhbS5jbGVhcigpOworICAgIH0KKworICAgIGlm
IChkLT5tX2J1ZmZlcikgeworICAgICAgICBnX2ZyZWUoZC0+bV9idWZmZXIpOworICAgICAgICBk
LT5tX2J1ZmZlciA9IDA7CisgICAgfQorCisgICAgaWYgKCFpc0Rlc3Ryb3lpbmcpCisgICAgICAg
IGhhbmRsZS0+ZGVyZWYoKTsKK30KKworc3RhdGljIHZvaWQgc2VuZFJlcXVlc3RDYWxsYmFjayhH
T2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzLCBncG9pbnRlciB1c2VyRGF0YSkKK3sK
KyAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9IHN0YXRpY19jYXN0PFJlc291cmNl
SGFuZGxlKj4oZ19vYmplY3RfZ2V0X2RhdGEoc291cmNlLCAid2Via2l0LXJlc291cmNlIikpOwor
ICAgIGlmICghaGFuZGxlKQorICAgICAgICByZXR1cm47CisKKyAgICBSZXNvdXJjZUhhbmRsZUlu
dGVybmFsKiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOworICAgIFJlc291cmNlSGFuZGxlQ2xp
ZW50KiBjbGllbnQgPSBoYW5kbGUtPmNsaWVudCgpOworCisgICAgaWYgKGQtPm1fZ290Q2h1bmtI
YW5kbGVyKSB7CisgICAgICAgIC8vIE5vIG5lZWQgdG8gY2FsbCBnb3RDaHVua0hhbmRsZXIgYW55
bW9yZS4gUmVjZWl2ZWQgZGF0YSB3aWxsCisgICAgICAgIC8vIGJlIHJlcG9ydGVkIGJ5IHJlYWRD
YWxsYmFjaworICAgICAgICBpZiAoZ19zaWduYWxfaGFuZGxlcl9pc19jb25uZWN0ZWQoZC0+bV9t
c2csIGQtPm1fZ290Q2h1bmtIYW5kbGVyKSkKKyAgICAgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJf
ZGlzY29ubmVjdChkLT5tX21zZywgZC0+bV9nb3RDaHVua0hhbmRsZXIpOworICAgIH0KKworICAg
IGlmIChkLT5tX2NhbmNlbGxlZCB8fCAhY2xpZW50KSB7CisgICAgICAgIGNsZWFudXBTb3VwUmVx
dWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgIEdJbnB1dFN0cmVhbSogaW4gPSBzb3VwX3Jl
cXVlc3Rfc2VuZF9maW5pc2goZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSwgcmVzLCAmZXJyb3Iub3V0
UHRyKCkpOworCisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIGdib29sZWFuIGlzVHJhbnNwb3J0
RXJyb3IgPSBkLT5tX21zZyAmJiBTT1VQX1NUQVRVU19JU19UUkFOU1BPUlRfRVJST1IoZC0+bV9t
c2ctPnN0YXR1c19jb2RlKTsKKworICAgICAgICBpZiAoaXNUcmFuc3BvcnRFcnJvciB8fCAoZXJy
b3ItPmRvbWFpbiA9PSBHX0lPX0VSUk9SKSkgeworICAgICAgICAgICAgU291cFVSSSogdXJpID0g
c291cF9yZXF1ZXN0X2dldF91cmkoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSk7CisgICAgICAgICAg
ICBHT3duUHRyPGNoYXI+IHVyaVN0cihzb3VwX3VyaV90b19zdHJpbmcodXJpLCBmYWxzZSkpOwor
ICAgICAgICAgICAgZ2ludCBlcnJvckNvZGUgPSBpc1RyYW5zcG9ydEVycm9yID8gZC0+bV9tc2ct
PnN0YXR1c19jb2RlIDogZXJyb3ItPmNvZGU7CisgICAgICAgICAgICBjb25zdCBnY2hhciogZXJy
b3JNc2cgPSBpc1RyYW5zcG9ydEVycm9yID8gZC0+bV9tc2ctPnJlYXNvbl9waHJhc2UgOiBlcnJv
ci0+bWVzc2FnZTsKKyAgICAgICAgICAgIGNvbnN0IGdjaGFyKiBxdWFya1N0ciA9IGlzVHJhbnNw
b3J0RXJyb3IgPyBnX3F1YXJrX3RvX3N0cmluZyhTT1VQX0hUVFBfRVJST1IpIDogZ19xdWFya190
b19zdHJpbmcoR19JT19FUlJPUik7CisgICAgICAgICAgICBSZXNvdXJjZUVycm9yIHJlc291cmNl
RXJyb3IocXVhcmtTdHIsIGVycm9yQ29kZSwgdXJpU3RyLmdldCgpLCBTdHJpbmc6OmZyb21VVEY4
KGVycm9yTXNnKSk7CisKKyAgICAgICAgICAgIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbiho
YW5kbGUuZ2V0KCkpOworICAgICAgICAgICAgY2xpZW50LT5kaWRGYWlsKGhhbmRsZS5nZXQoKSwg
cmVzb3VyY2VFcnJvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoZC0+bV9tc2cgJiYgZC0+bV9tc2ctPnN0YXR1c19jb2RlID09IFNPVVBfU1RBVFVTX1VO
QVVUSE9SSVpFRCkgeworICAgICAgICAgICAgZmlsbFJlc3BvbnNlRnJvbU1lc3NhZ2UoZC0+bV9t
c2csICZkLT5tX3Jlc3BvbnNlKTsKKyAgICAgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZVJlc3Bv
bnNlKGhhbmRsZS5nZXQoKSwgZC0+bV9yZXNwb25zZSk7CisKKyAgICAgICAgICAgIC8vIFdlYkNv
cmUgbWlnaHQgaGF2ZSBjYW5jZWxsZWQgdGhlIGpvYiBpbiB0aGUgd2hpbGUKKyAgICAgICAgICAg
IGlmIChkLT5tX2NhbmNlbGxlZCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
ICAgIGlmIChkLT5tX21zZy0+cmVzcG9uc2VfYm9keS0+ZGF0YSkKKyAgICAgICAgICAgICAgICBj
bGllbnQtPmRpZFJlY2VpdmVEYXRhKGhhbmRsZS5nZXQoKSwgZC0+bV9tc2ctPnJlc3BvbnNlX2Jv
ZHktPmRhdGEsIGQtPm1fbXNnLT5yZXNwb25zZV9ib2R5LT5sZW5ndGgsIHRydWUpOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gZGlkUmVjZWl2ZURhdGEgYWJvdmUgbWlnaHQgaGF2ZSBjYW5jZWxs
ZWQgaXQKKyAgICAgICAgaWYgKGQtPm1fY2FuY2VsbGVkIHx8ICFjbGllbnQpIHsKKyAgICAgICAg
ICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKKyAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjbGllbnQtPmRpZEZpbmlzaExvYWRpbmcoaGFu
ZGxlLmdldCgpLCAwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChkLT5tX2Nh
bmNlbGxlZCkgeworICAgICAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdl
dCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGQtPm1faW5wdXRTdHJlYW0gPSBp
bjsKKyAgICBkLT5tX2J1ZmZlciA9IHN0YXRpY19jYXN0PGNoYXIqPihnX21hbGxvYyhSRUFEX0JV
RkZFUl9TSVpFKSk7CisgICAgZC0+bV90b3RhbCA9IDA7CisKKyAgICAvLyByZWFkQ2FsbGJhY2sg
bmVlZHMgaXQKKyAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5tX2lucHV0U3RyZWFt
LmdldCgpKSwgIndlYmtpdC1yZXNvdXJjZSIsIGhhbmRsZS5nZXQoKSk7CisKKyAgICAvLyBXZSBu
ZWVkIHRvIGNoZWNrIGlmIGl0J3MgYSBmaWxlOiBVUkwgYW5kIGlmIGl0IGlzIGEgcmVndWxhcgor
ICAgIC8vIGZpbGUgYXMgaXQgY291bGQgYmUgYSBkaXJlY3RvcnkuIEluIHRoYXQgY2FzZSBTb3Vw
IHByb3Blcmx5CisgICAgLy8gcmV0dXJucyBhIHN0cmVhbSB3aG9zZSBjb250ZW50IGlzIGEgSFRN
TCB3aXRoIGEgbGlzdCBvZiBmaWxlcworICAgIC8vIGluIHRoZSBkaXJlY3RvcnkKKyAgICBpZiAo
ZXF1YWxJZ25vcmluZ0Nhc2UoaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKS5wcm90b2NvbCgp
LCAiZmlsZSIpCisgICAgICAgICYmIEdfSVNfRklMRV9JTlBVVF9TVFJFQU0oaW4pKSB7CisgICAg
ICAgIFJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2U7CisKKyAgICAgICAgcmVzcG9uc2Uuc2V0VVJM
KGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkpOworICAgICAgICByZXNwb25zZS5zZXRNaW1l
VHlwZShzb3VwX3JlcXVlc3RfZ2V0X2NvbnRlbnRfdHlwZShkLT5tX3NvdXBSZXF1ZXN0LmdldCgp
KSk7CisgICAgICAgIHJlc3BvbnNlLnNldEV4cGVjdGVkQ29udGVudExlbmd0aChzb3VwX3JlcXVl
c3RfZ2V0X2NvbnRlbnRfbGVuZ3RoKGQtPm1fc291cFJlcXVlc3QuZ2V0KCkpKTsKKyAgICAgICAg
Y2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UoaGFuZGxlLmdldCgpLCByZXNwb25zZSk7CisKKyAg
ICAgICAgaWYgKGQtPm1fY2FuY2VsbGVkKSB7CisgICAgICAgICAgICBjbGVhbnVwU291cFJlcXVl
c3RPcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGdfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMoZC0+bV9pbnB1dFN0cmVh
bS5nZXQoKSwgZC0+bV9idWZmZXIsIFJFQURfQlVGRkVSX1NJWkUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHX1BSSU9SSVRZX0RFRkFVTFQsIGQtPm1fY2FuY2VsbGFibGUuZ2V0KCks
IHJlYWRDYWxsYmFjaywgMCk7Cit9CisKIHN0YXRpYyBib29sIHN0YXJ0SHR0cChSZXNvdXJjZUhh
bmRsZSogaGFuZGxlKQogewogICAgIEFTU0VSVChoYW5kbGUpOwpAQCAtNDgzLDcgKzU3MCwxNiBA
QCBzdGF0aWMgYm9vbCBzdGFydEh0dHAoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKICAgICB1cmwu
cmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7CiAgICAgcmVxdWVzdC5zZXRVUkwodXJsKTsKIAot
ICAgIGQtPm1fbXNnID0gcmVxdWVzdC50b1NvdXBNZXNzYWdlKCk7CisgICAgR093blB0cjxHRXJy
b3I+IGVycm9yOworICAgIGQtPm1fc291cFJlcXVlc3QgPSBzb3VwX3JlcXVlc3Rlcl9yZXF1ZXN0
KGQtPm1fcmVxdWVzdGVyLmdldCgpLCB1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc2Vzc2lv
biwgJmVycm9yLm91dFB0cigpKTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1fc291cFJlcXVlc3QuZ2V0
KCkpLCAid2Via2l0LXJlc291cmNlIiwgaGFuZGxlKTsKKworICAgIGQtPm1fbXNnID0gc291cF9y
ZXF1ZXN0X2h0dHBfZ2V0X21lc3NhZ2UoU09VUF9SRVFVRVNUX0hUVFAoZC0+bV9zb3VwUmVxdWVz
dC5nZXQoKSkpOworICAgIHJlcXVlc3QudXBkYXRlU291cE1lc3NhZ2UoZC0+bV9tc2cpOworCiAg
ICAgaWYgKCFkLT5tX21zZykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC00OTMsNyArNTg5
LDcgQEAgc3RhdGljIGJvb2wgc3RhcnRIdHRwKFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCiAgICAg
Z19zaWduYWxfY29ubmVjdChkLT5tX21zZywgInJlc3RhcnRlZCIsIEdfQ0FMTEJBQ0socmVzdGFy
dGVkQ2FsbGJhY2spLCBoYW5kbGUpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QoZC0+bV9tc2csICJn
b3QtaGVhZGVycyIsIEdfQ0FMTEJBQ0soZ290SGVhZGVyc0NhbGxiYWNrKSwgaGFuZGxlKTsKICAg
ICBnX3NpZ25hbF9jb25uZWN0KGQtPm1fbXNnLCAiY29udGVudC1zbmlmZmVkIiwgR19DQUxMQkFD
Syhjb250ZW50U25pZmZlZENhbGxiYWNrKSwgaGFuZGxlKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0
KGQtPm1fbXNnLCAiZ290LWNodW5rIiwgR19DQUxMQkFDSyhnb3RDaHVua0NhbGxiYWNrKSwgaGFu
ZGxlKTsKKyAgICBkLT5tX2dvdENodW5rSGFuZGxlciA9IGdfc2lnbmFsX2Nvbm5lY3QoZC0+bV9t
c2csICJnb3QtY2h1bmsiLCBHX0NBTExCQUNLKGdvdENodW5rQ2FsbGJhY2spLCBoYW5kbGUpOwog
CiAjaWZkZWYgSEFWRV9MSUJTT1VQXzJfMjlfOTAKICAgICBTdHJpbmcgZmlyc3RQYXJ0eVN0cmlu
ZyA9IHJlcXVlc3QuZmlyc3RQYXJ0eUZvckNvb2tpZXMoKS5zdHJpbmcoKTsKQEAgLTUwMiw3ICs1
OTgsNiBAQCBzdGF0aWMgYm9vbCBzdGFydEh0dHAoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKICAg
ICAgICAgc291cF9tZXNzYWdlX3NldF9maXJzdF9wYXJ0eShkLT5tX21zZywgZmlyc3RQYXJ0eS5n
ZXQoKSk7CiAgICAgfQogI2VuZGlmCi0gICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+
bV9tc2cpLCAicmVzb3VyY2VIYW5kbGUiLCByZWludGVycHJldF9jYXN0PHZvaWQqPihoYW5kbGUp
KTsKIAogICAgIEZvcm1EYXRhKiBodHRwQm9keSA9IGQtPm1fZmlyc3RSZXF1ZXN0Lmh0dHBCb2R5
KCk7CiAgICAgaWYgKGh0dHBCb2R5ICYmICFodHRwQm9keS0+aXNFbXB0eSgpKSB7CkBAIC01MzIs
MTIgKzYyNywxMSBAQCBzdGF0aWMgYm9vbCBzdGFydEh0dHAoUmVzb3VyY2VIYW5kbGUqIGhhbmRs
ZSkKICAgICAgICAgICAgICAgICAgICAgICogbWFwcGluZyBmb3IgdXBsb2FkZWQgZmlsZXMgY29k
ZSBpbnNwaXJlZCBieSB0ZWNobmlxdWUgdXNlZCBpbgogICAgICAgICAgICAgICAgICAgICAgKiBs
aWJzb3VwJ3Mgc2ltcGxlLWh0dHBkIHRlc3QKICAgICAgICAgICAgICAgICAgICAgICovCi0gICAg
ICAgICAgICAgICAgICAgIEdFcnJvciogZXJyb3IgPSAwOworICAgICAgICAgICAgICAgICAgICBH
T3duUHRyPEdFcnJvcj4gZXJyb3I7CiAgICAgICAgICAgICAgICAgICAgIENTdHJpbmcgZmlsZU5h
bWUgPSBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb24oZWxlbWVudC5tX2ZpbGVuYW1lKTsKLSAgICAg
ICAgICAgICAgICAgICAgR01hcHBlZEZpbGUqIGZpbGVNYXBwaW5nID0gZ19tYXBwZWRfZmlsZV9u
ZXcoZmlsZU5hbWUuZGF0YSgpLCBmYWxzZSwgJmVycm9yKTsKKyAgICAgICAgICAgICAgICAgICAg
R01hcHBlZEZpbGUqIGZpbGVNYXBwaW5nID0gZ19tYXBwZWRfZmlsZV9uZXcoZmlsZU5hbWUuZGF0
YSgpLCBmYWxzZSwgJmVycm9yLm91dFB0cigpKTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAo
ZXJyb3IpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNo
ZWQoZC0+bV9tc2csIEdfU0lHTkFMX01BVENIX0RBVEEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgaGFuZGxl
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGdfb2JqZWN0X3VucmVmKGQtPm1fbXNnKTsKQEAg
LTU0OSwxMSArNjQzLDcgQEAgc3RhdGljIGJvb2wgc3RhcnRIdHRwKFJlc291cmNlSGFuZGxlKiBo
YW5kbGUpCiAgICAgICAgICAgICAgICAgICAgIFNvdXBCdWZmZXIqIHNvdXBCdWZmZXIgPSBzb3Vw
X2J1ZmZlcl9uZXdfd2l0aF9vd25lcihnX21hcHBlZF9maWxlX2dldF9jb250ZW50cyhmaWxlTWFw
cGluZyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnX21hcHBlZF9maWxlX2dldF9sZW5ndGgoZmlsZU1hcHBp
bmcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmlsZU1hcHBpbmcsCi0jaWYgR0xJQl9DSEVDS19WRVJTSU9O
KDIsIDIxLCAzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlm
eT4oZ19tYXBwZWRfZmlsZV91bnJlZikpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdfbWFwcGVkX2ZpbGVfZnJlZSkpOwotI2VuZGlmCiAg
ICAgICAgICAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZF9idWZmZXIoZC0+bV9t
c2ctPnJlcXVlc3RfYm9keSwgc291cEJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgICAgIHNvdXBf
YnVmZmVyX2ZyZWUoc291cEJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgfQpAQCAtNTYxLDcgKzY1
MSw3IEBAIHN0YXRpYyBib29sIHN0YXJ0SHR0cChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQogICAg
ICAgICB9CiAgICAgfQogCi0gICAgLy8gYmFsYW5jZWQgYnkgYSBkZXJlZigpIGluIGZpbmlzaGVk
Q2FsbGJhY2ssIHdoaWNoIHNob3VsZCBhbHdheXMgcnVuCisgICAgLy8gYmFsYW5jZWQgYnkgYSBk
ZXJlZigpIGluIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbiwgd2hpY2ggc2hvdWxkIGFsd2F5
cyBydW4KICAgICBoYW5kbGUtPnJlZigpOwogCiAgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYW4g
QWNjZXB0IGhlYWRlciBmb3Igc3VicmVzb3VyY2VzOyBzb21lIHNpdGVzCkBAIC01NjksMTEgKzY1
OSw4IEBAIHN0YXRpYyBib29sIHN0YXJ0SHR0cChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQogICAg
IGlmICghc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X29uZShkLT5tX21zZy0+cmVxdWVzdF9oZWFk
ZXJzLCAiQWNjZXB0IikpCiAgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChkLT5t
X21zZy0+cmVxdWVzdF9oZWFkZXJzLCAiQWNjZXB0IiwgIiovKiIpOwogCi0gICAgLy8gQmFsYW5j
ZWQgaW4gUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCdzIGRlc3RydWN0b3I7IHdlIG5lZWQgdG8KLSAg
ICAvLyBrZWVwIG91ciBvd24gcmVmLCBiZWNhdXNlIGFmdGVyIHF1ZXVlaW5nIHRoZSBtZXNzYWdl
LCB0aGUKLSAgICAvLyBzZXNzaW9uIG93bnMgdGhlIGluaXRpYWwgcmVmZXJlbmNlLgotICAgIGdf
b2JqZWN0X3JlZihkLT5tX21zZyk7Ci0gICAgc291cF9zZXNzaW9uX3F1ZXVlX21lc3NhZ2Uoc2Vz
c2lvbiwgZC0+bV9tc2csIGZpbmlzaGVkQ2FsbGJhY2ssIGhhbmRsZSk7CisgICAgZC0+bV9jYW5j
ZWxsYWJsZSA9IGdfY2FuY2VsbGFibGVfbmV3KCk7CisgICAgc291cF9yZXF1ZXN0X3NlbmRfYXN5
bmMoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSwgZC0+bV9jYW5jZWxsYWJsZS5nZXQoKSwgc2VuZFJl
cXVlc3RDYWxsYmFjaywgMCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTYyMyw3ICs3MTAs
NyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpjYW5jZWwoKQogICAgIGlmIChkLT5tX21zZykKICAg
ICAgICAgc291cF9zZXNzaW9uX2NhbmNlbF9tZXNzYWdlKGRlZmF1bHRTZXNzaW9uKCksIGQtPm1f
bXNnLCBTT1VQX1NUQVRVU19DQU5DRUxMRUQpOwogICAgIGVsc2UgaWYgKGQtPm1fY2FuY2VsbGFi
bGUpCi0gICAgICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKGQtPm1fY2FuY2VsbGFibGUpOworICAg
ICAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChkLT5tX2NhbmNlbGxhYmxlLmdldCgpKTsKIH0KIAog
UGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IFJlc291cmNlSGFuZGxlOjpidWZmZXJlZERhdGEoKQpA
QCAtNjY3LDM4ICs3NTQsNiBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpsb2FkUmVzb3VyY2VTeW5j
aHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCBjb25zdAogICAgIHN5bmNMb2Fk
ZXIucnVuKCk7CiB9CiAKLS8vIEdJTy1iYXNlZCBsb2FkZXIKLQotc3RhdGljIHZvaWQgY2xlYW51
cEdpb09wZXJhdGlvbihSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBib29sIGlzRGVzdHJveWluZyA9
IGZhbHNlKQotewotICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldElu
dGVybmFsKCk7Ci0KLSAgICBpZiAoZC0+bV9nZmlsZSkgewotICAgICAgICBnX29iamVjdF9zZXRf
ZGF0YShHX09CSkVDVChkLT5tX2dmaWxlKSwgIndlYmtpdC1yZXNvdXJjZSIsIDApOwotICAgICAg
ICBnX29iamVjdF91bnJlZihkLT5tX2dmaWxlKTsKLSAgICAgICAgZC0+bV9nZmlsZSA9IDA7Ci0g
ICAgfQotCi0gICAgaWYgKGQtPm1fY2FuY2VsbGFibGUpIHsKLSAgICAgICAgZ19vYmplY3RfdW5y
ZWYoZC0+bV9jYW5jZWxsYWJsZSk7Ci0gICAgICAgIGQtPm1fY2FuY2VsbGFibGUgPSAwOwotICAg
IH0KLQotICAgIGlmIChkLT5tX2lucHV0U3RyZWFtKSB7Ci0gICAgICAgIGdfb2JqZWN0X3NldF9k
YXRhKEdfT0JKRUNUKGQtPm1faW5wdXRTdHJlYW0pLCAid2Via2l0LXJlc291cmNlIiwgMCk7Ci0g
ICAgICAgIGdfb2JqZWN0X3VucmVmKGQtPm1faW5wdXRTdHJlYW0pOwotICAgICAgICBkLT5tX2lu
cHV0U3RyZWFtID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoZC0+bV9idWZmZXIpIHsKLSAgICAgICAg
Z19mcmVlKGQtPm1fYnVmZmVyKTsKLSAgICAgICAgZC0+bV9idWZmZXIgPSAwOwotICAgIH0KLQot
ICAgIGlmICghaXNEZXN0cm95aW5nKQotICAgICAgICBoYW5kbGUtPmRlcmVmKCk7Ci19Ci0KIHN0
YXRpYyB2b2lkIGNsb3NlQ2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJl
cywgZ3BvaW50ZXIpCiB7CiAgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUgPSBzdGF0
aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGdfb2JqZWN0X2dldF9kYXRhKHNvdXJjZSwgIndlYmtp
dC1yZXNvdXJjZSIpKTsKQEAgLTcwOCw4ICs3NjMsOCBAQCBzdGF0aWMgdm9pZCBjbG9zZUNhbGxi
YWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXMsIGdwb2ludGVyKQogICAgIFJl
c291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFsKCk7CiAgICAgUmVz
b3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCA9IGhhbmRsZS0+Y2xpZW50KCk7CiAKLSAgICBnX2lu
cHV0X3N0cmVhbV9jbG9zZV9maW5pc2goZC0+bV9pbnB1dFN0cmVhbSwgcmVzLCAwKTsKLSAgICBj
bGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgZ19pbnB1dF9zdHJlYW1fY2xv
c2VfZmluaXNoKGQtPm1faW5wdXRTdHJlYW0uZ2V0KCksIHJlcywgMCk7CisgICAgY2xlYW51cFNv
dXBSZXF1ZXN0T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CiAKICAgICAvLyBUaGUgbG9hZCBtYXkg
aGF2ZSBiZWVuIGNhbmNlbGxlZCwgdGhlIGNsaWVudCBtYXkgaGF2ZSBiZWVuCiAgICAgLy8gZGVz
dHJveWVkIGFscmVhZHkuIEluIHN1Y2ggY2FzZXMgY2FsbGluZyBkaWRGaW5pc2hMb2FkaW5nIGlz
IGEKQEAgLTcyMCwyMTAgKzc3NSw5MiBAQCBzdGF0aWMgdm9pZCBjbG9zZUNhbGxiYWNrKEdPYmpl
Y3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXMsIGdwb2ludGVyKQogICAgIGNsaWVudC0+ZGlk
RmluaXNoTG9hZGluZyhoYW5kbGUuZ2V0KCksIDApOwogfQogCi1zdGF0aWMgdm9pZCByZWFkQ2Fs
bGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIpCitzdGF0
aWMgdm9pZCByZWFkQ2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywg
Z3BvaW50ZXIgZGF0YSkKIHsKICAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9IHN0
YXRpY19jYXN0PFJlc291cmNlSGFuZGxlKj4oZ19vYmplY3RfZ2V0X2RhdGEoc291cmNlLCAid2Vi
a2l0LXJlc291cmNlIikpOwogICAgIGlmICghaGFuZGxlKQogICAgICAgICByZXR1cm47CiAKKyAg
ICBib29sIGNvbnZlcnRUb1VURjE2ID0gc3RhdGljX2Nhc3Q8Ym9vbD4oZGF0YSk7CiAgICAgUmVz
b3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKICAgICBSZXNv
dXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0gaGFuZGxlLT5jbGllbnQoKTsKIAogICAgIGlmIChk
LT5tX2NhbmNlbGxlZCB8fCAhY2xpZW50KSB7Ci0gICAgICAgIGNsZWFudXBHaW9PcGVyYXRpb24o
aGFuZGxlLmdldCgpKTsKKyAgICAgICAgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKGhhbmRs
ZS5nZXQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBHRXJyb3IqIGVycm9yID0g
MDsKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CiAKLSAgICBnc3NpemUgYnl0ZXNSZWFkID0g
Z19pbnB1dF9zdHJlYW1fcmVhZF9maW5pc2goZC0+bV9pbnB1dFN0cmVhbSwgcmVzLCAmZXJyb3Ip
OworICAgIGdzc2l6ZSBieXRlc1JlYWQgPSBnX2lucHV0X3N0cmVhbV9yZWFkX2ZpbmlzaChkLT5t
X2lucHV0U3RyZWFtLmdldCgpLCByZXMsICZlcnJvci5vdXRQdHIoKSk7CiAgICAgaWYgKGVycm9y
KSB7Ci0gICAgICAgIGNoYXIqIHVyaSA9IGdfZmlsZV9nZXRfdXJpKGQtPm1fZ2ZpbGUpOwotICAg
ICAgICBSZXNvdXJjZUVycm9yIHJlc291cmNlRXJyb3IoZ19xdWFya190b19zdHJpbmcoR19JT19F
UlJPUiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvci0+Y29kZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaSwKKyAgICAgICAgU291cFVS
SSogdXJpID0gc291cF9yZXF1ZXN0X2dldF91cmkoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSk7Cisg
ICAgICAgIEdPd25QdHI8Y2hhcj4gdXJpU3RyKHNvdXBfdXJpX3RvX3N0cmluZyh1cmksIGZhbHNl
KSk7CisgICAgICAgIFJlc291cmNlRXJyb3IgcmVzb3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0cmlu
ZyhHX0lPX0VSUk9SKSwgZXJyb3ItPmNvZGUsIHVyaVN0ci5nZXQoKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVycm9yID8gU3RyaW5nOjpmcm9tVVRGOChlcnJvci0+bWVz
c2FnZSkgOiBTdHJpbmcoKSk7Ci0gICAgICAgIGdfZnJlZSh1cmkpOwotICAgICAgICBnX2Vycm9y
X2ZyZWUoZXJyb3IpOwotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7
CisgICAgICAgIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwogICAg
ICAgICBjbGllbnQtPmRpZEZhaWwoaGFuZGxlLmdldCgpLCByZXNvdXJjZUVycm9yKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmICghYnl0ZXNSZWFkKSB7Ci0gICAgICAgIGdfaW5w
dXRfc3RyZWFtX2Nsb3NlX2FzeW5jKGQtPm1faW5wdXRTdHJlYW0sIEdfUFJJT1JJVFlfREVGQVVM
VCwKKyAgICAgICAgZ19pbnB1dF9zdHJlYW1fY2xvc2VfYXN5bmMoZC0+bV9pbnB1dFN0cmVhbS5n
ZXQoKSwgR19QUklPUklUWV9ERUZBVUxULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLCBjbG9zZUNhbGxiYWNrLCAwKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IGQtPm1fdG90YWwgKz0gYnl0ZXNSZWFkOwotICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURhdGEoaGFu
ZGxlLmdldCgpLCBkLT5tX2J1ZmZlciwgYnl0ZXNSZWFkLCBkLT5tX3RvdGFsKTsKLQotICAgIC8v
IGRpZFJlY2VpdmVEYXRhIG1heSBjYW5jZWwgdGhlIGxvYWQsIHdoaWNoIG1heSByZWxlYXNlIHRo
ZSBsYXN0IHJlZmVyZW5jZS4KLSAgICBpZiAoZC0+bV9jYW5jZWxsZWQpIHsKLSAgICAgICAgY2xl
YW51cEdpb09wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwotICAgICAgICByZXR1cm47CisgICAgaWYg
KEdfTElLRUxZKCFjb252ZXJ0VG9VVEYxNikpCisgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURh
dGEoaGFuZGxlLmdldCgpLCBkLT5tX2J1ZmZlciwgYnl0ZXNSZWFkLCBkLT5tX3RvdGFsKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgLy8gV2UgaGF2ZSB0byBjb252ZXJ0IGl0IHRvIFVURi0xNiBkdWUg
dG8gbGltaXRhdGlvbnMgaW4gS1VSTAorICAgICAgICBTdHJpbmcgZGF0YSA9IFN0cmluZzo6ZnJv
bVVURjgoZC0+bV9idWZmZXIsIGJ5dGVzUmVhZCk7CisgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2
ZURhdGEoaGFuZGxlLmdldCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihkYXRhLmNo
YXJhY3RlcnMoKSksIGRhdGEubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpLCAwKTsKICAgICB9CiAK
LSAgICBnX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jKGQtPm1faW5wdXRTdHJlYW0sIGQtPm1fYnVm
ZmVyLCBkLT5tX2J1ZmZlclNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BS
SU9SSVRZX0RFRkFVTFQsIGQtPm1fY2FuY2VsbGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZWFkQ2FsbGJhY2ssIDApOwotfQotCi1zdGF0aWMgdm9pZCBvcGVuQ2FsbGJhY2so
R09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIpCi17Ci0gICAgUmVm
UHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+
KGdfb2JqZWN0X2dldF9kYXRhKHNvdXJjZSwgIndlYmtpdC1yZXNvdXJjZSIpKTsKLSAgICBpZiAo
IWhhbmRsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCog
ZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKLSAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xp
ZW50ID0gaGFuZGxlLT5jbGllbnQoKTsKLQorICAgIC8vIGRpZFJlY2VpdmVEYXRhIG1heSBjYW5j
ZWwgdGhlIGxvYWQsIHdoaWNoIG1heSByZWxlYXNlIHRoZSBsYXN0IHJlZmVyZW5jZS4KICAgICBp
ZiAoZC0+bV9jYW5jZWxsZWQgfHwgIWNsaWVudCkgewotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0
aW9uKGhhbmRsZS5nZXQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBHRXJyb3Iq
IGVycm9yID0gMDsKLSAgICBHRmlsZUlucHV0U3RyZWFtKiBpbiA9IGdfZmlsZV9yZWFkX2Zpbmlz
aChHX0ZJTEUoc291cmNlKSwgcmVzLCAmZXJyb3IpOwotICAgIGlmIChlcnJvcikgewotICAgICAg
ICBjaGFyKiB1cmkgPSBnX2ZpbGVfZ2V0X3VyaShkLT5tX2dmaWxlKTsKLSAgICAgICAgUmVzb3Vy
Y2VFcnJvciByZXNvdXJjZUVycm9yKGdfcXVhcmtfdG9fc3RyaW5nKEdfSU9fRVJST1IpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3ItPmNvZGUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1cmksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlcnJvciA/IFN0cmluZzo6ZnJvbVVURjgoZXJyb3ItPm1lc3NhZ2UpIDogU3Ry
aW5nKCkpOwotICAgICAgICBnX2ZyZWUodXJpKTsKLSAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9y
KTsKLSAgICAgICAgY2xlYW51cEdpb09wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwotICAgICAgICBj
bGllbnQtPmRpZEZhaWwoaGFuZGxlLmdldCgpLCByZXNvdXJjZUVycm9yKTsKKyAgICAgICAgY2xl
YW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBkLT5tX2lucHV0U3RyZWFtID0gR19JTlBVVF9TVFJFQU0oaW4pOwotICAg
IGQtPm1fYnVmZmVyU2l6ZSA9IDgxOTI7Ci0gICAgZC0+bV9idWZmZXIgPSBzdGF0aWNfY2FzdDxj
aGFyKj4oZ19tYWxsb2MoZC0+bV9idWZmZXJTaXplKSk7Ci0gICAgZC0+bV90b3RhbCA9IDA7Ci0K
LSAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5tX2lucHV0U3RyZWFtKSwgIndlYmtp
dC1yZXNvdXJjZSIsIGhhbmRsZS5nZXQoKSk7Ci0gICAgZ19pbnB1dF9zdHJlYW1fcmVhZF9hc3lu
YyhkLT5tX2lucHV0U3RyZWFtLCBkLT5tX2J1ZmZlciwgZC0+bV9idWZmZXJTaXplLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR19QUklPUklUWV9ERUZBVUxULCBkLT5tX2NhbmNlbGxh
YmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZENhbGxiYWNrLCAwKTsKKyAg
ICBnX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jKGQtPm1faW5wdXRTdHJlYW0uZ2V0KCksIGQtPm1f
YnVmZmVyLCBSRUFEX0JVRkZFUl9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R19QUklPUklUWV9ERUZBVUxULCBkLT5tX2NhbmNlbGxhYmxlLmdldCgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVhZENhbGxiYWNrLCBkYXRhKTsKIH0KIAotc3RhdGljIHZvaWQg
cXVlcnlJbmZvQ2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3Bv
aW50ZXIpCi17Ci0gICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUgPSBzdGF0aWNfY2Fz
dDxSZXNvdXJjZUhhbmRsZSo+KGdfb2JqZWN0X2dldF9kYXRhKHNvdXJjZSwgIndlYmtpdC1yZXNv
dXJjZSIpKTsKLSAgICBpZiAoIWhhbmRsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVzb3Vy
Y2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKLSAgICBSZXNvdXJj
ZUhhbmRsZUNsaWVudCogY2xpZW50ID0gaGFuZGxlLT5jbGllbnQoKTsKLQotICAgIGlmIChkLT5t
X2NhbmNlbGxlZCkgewotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNl
OwotCi0gICAgY2hhciogdXJpID0gZ19maWxlX2dldF91cmkoZC0+bV9nZmlsZSk7Ci0gICAgcmVz
cG9uc2Uuc2V0VVJMKEtVUkwoS1VSTCgpLCB1cmkpKTsKLSAgICBnX2ZyZWUodXJpKTsKLQotICAg
IEdFcnJvciogZXJyb3IgPSAwOwotICAgIEdGaWxlSW5mbyogaW5mbyA9IGdfZmlsZV9xdWVyeV9p
bmZvX2ZpbmlzaChkLT5tX2dmaWxlLCByZXMsICZlcnJvcik7Ci0KLSAgICBpZiAoZXJyb3IpIHsK
LSAgICAgICAgLy8gRklYTUU6IHRvIGJlIGFibGUgdG8gaGFuZGxlIGZ0cCBVUklzIHByb3Blcmx5
LCB3ZSBtdXN0Ci0gICAgICAgIC8vIGNoZWNrIGlmIHRoZSBlcnJvciBpcyBHX0lPX0VSUk9SX05P
VF9NT1VOVEVELCBhbmQgaWYgc28sCi0gICAgICAgIC8vIGNhbGwgZ19maWxlX21vdW50X2VuY2xv
c2luZ192b2x1bWUoKSB0byBtb3VudCB0aGUgZnRwCi0gICAgICAgIC8vIHNlcnZlciAoYW5kIHRo
ZW4ga2VlcCB0cmFjayBvZiB0aGUgZmFjdCB0aGF0IHdlIG1vdW50ZWQgaXQsCi0gICAgICAgIC8v
IGFuZCBzZXQgYSB0aW1lb3V0IHRvIHVubW91bnQgaXQgbGF0ZXIgYWZ0ZXIgaXQncyBiZWVuIGlk
bGUKLSAgICAgICAgLy8gZm9yIGEgd2hpbGUpLgotICAgICAgICBjaGFyKiB1cmkgPSBnX2ZpbGVf
Z2V0X3VyaShkLT5tX2dmaWxlKTsKLSAgICAgICAgUmVzb3VyY2VFcnJvciByZXNvdXJjZUVycm9y
KGdfcXVhcmtfdG9fc3RyaW5nKEdfSU9fRVJST1IpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXJyb3ItPmNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1cmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA/IFN0
cmluZzo6ZnJvbVVURjgoZXJyb3ItPm1lc3NhZ2UpIDogU3RyaW5nKCkpOwotICAgICAgICBnX2Zy
ZWUodXJpKTsKLSAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKLSAgICAgICAgY2xlYW51cEdp
b09wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwotICAgICAgICBjbGllbnQtPmRpZEZhaWwoaGFuZGxl
LmdldCgpLCByZXNvdXJjZUVycm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
IChnX2ZpbGVfaW5mb19nZXRfZmlsZV90eXBlKGluZm8pICE9IEdfRklMRV9UWVBFX1JFR1VMQVIp
IHsKLSAgICAgICAgLy8gRklYTUU6IHdoYXQgaWYgdGhlIFVSSSBwb2ludHMgdG8gYSBkaXJlY3Rv
cnk/IFNob3VsZCB3ZQotICAgICAgICAvLyBnZW5lcmF0ZSBhIGxpc3Rpbmc/IEhvdz8gV2hhdCBk
byBvdGhlciBiYWNrZW5kcyBkbyBoZXJlPwotICAgICAgICBjaGFyKiB1cmkgPSBnX2ZpbGVfZ2V0
X3VyaShkLT5tX2dmaWxlKTsKLSAgICAgICAgUmVzb3VyY2VFcnJvciByZXNvdXJjZUVycm9yKGdf
cXVhcmtfdG9fc3RyaW5nKEdfSU9fRVJST1IpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR19JT19FUlJPUl9GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1cmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmco
KSk7Ci0gICAgICAgIGdfZnJlZSh1cmkpOwotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhh
bmRsZS5nZXQoKSk7Ci0gICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIHJlc291
cmNlRXJyb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQWNjb3JkaW5nIHRv
IGh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9naW8vc3RhYmxlL2dpby1HQ29udGVudFR5
cGUuaHRtbAotICAgIC8vIEdDb250ZW50VHlwZSBvbiBVbml4IGlzIHRoZSBtaW1lIHR5cGUsIGJ1
dCBub3Qgb24gV2luMzIuCi0gICAgR093blB0cjxnY2hhcj4gbWltZVR5cGUoZ19jb250ZW50X3R5
cGVfZ2V0X21pbWVfdHlwZShnX2ZpbGVfaW5mb19nZXRfY29udGVudF90eXBlKGluZm8pKSk7Ci0g
ICAgcmVzcG9uc2Uuc2V0TWltZVR5cGUobWltZVR5cGUuZ2V0KCkpOwotICAgIHJlc3BvbnNlLnNl
dEV4cGVjdGVkQ29udGVudExlbmd0aChnX2ZpbGVfaW5mb19nZXRfc2l6ZShpbmZvKSk7Ci0KLSAg
ICBHVGltZVZhbCB0djsKLSAgICBnX2ZpbGVfaW5mb19nZXRfbW9kaWZpY2F0aW9uX3RpbWUoaW5m
bywgJnR2KTsKLSAgICByZXNwb25zZS5zZXRMYXN0TW9kaWZpZWREYXRlKHR2LnR2X3NlYyk7Ci0K
LSAgICBjbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShoYW5kbGUuZ2V0KCksIHJlc3BvbnNlKTsK
LQotICAgIGlmIChkLT5tX2NhbmNlbGxlZCkgewotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9u
KGhhbmRsZS5nZXQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBnX2ZpbGVfcmVh
ZF9hc3luYyhkLT5tX2dmaWxlLCBHX1BSSU9SSVRZX0RFRkFVTFQsIGQtPm1fY2FuY2VsbGFibGUs
Ci0gICAgICAgICAgICAgICAgICAgICAgb3BlbkNhbGxiYWNrLCAwKTsKLX0KIHN0YXRpYyBib29s
IHN0YXJ0R2lvKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIEtVUkwgdXJsKQogewogICAgIEFTU0VS
VChoYW5kbGUpOwogCi0gICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+Z2V0
SW50ZXJuYWwoKTsKLQogICAgIGlmIChoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmh0dHBNZXRob2Qo
KSAhPSAiR0VUIiAmJiBoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmh0dHBNZXRob2QoKSAhPSAiUE9T
VCIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIENTdHJpbmcgdXJsU3RyOworICAgIFNv
dXBTZXNzaW9uKiBzZXNzaW9uID0gaGFuZGxlLT5kZWZhdWx0U2Vzc2lvbigpOworICAgIFJlc291
cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFsKCk7CisKICAgICAvLyBH
SU8gZG9lc24ndCBrbm93IGhvdyB0byBoYW5kbGUgcmVmcyBhbmQgcXVlcmllcywgc28gcmVtb3Zl
IHRoZW0KICAgICAvLyBUT0RPOiB1c2UgS1VSTC5maWxlU3lzdGVtUGF0aCBhZnRlciBLVVJMR3Rr
IGFuZCBGaWxlU3lzdGVtR3RrIGFyZQogICAgIC8vIHVzaW5nIEdJTyBpbnRlcm5hbGx5LCBhbmQg
cHJvdmlkaW5nIFVSSXMgaW5zdGVhZCBvZiBmaWxlIHBhdGhzCiAgICAgdXJsLnJlbW92ZUZyYWdt
ZW50SWRlbnRpZmllcigpOwogICAgIHVybC5zZXRRdWVyeShTdHJpbmcoKSk7CiAgICAgdXJsLnJl
bW92ZVBvcnQoKTsKKyAgICB1cmxTdHIgPSB1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKTsKIAot
I2lmICFPUyhXSU5ET1dTKQotICAgIC8vIHdlIGF2b2lkIHRoZSBlc2NhcGluZyBmb3IgbG9jYWwg
ZmlsZXMsIGJlY2F1c2UKLSAgICAvLyBnX2ZpbGVuYW1lX2Zyb21fdXJpICh1c2VkIGludGVybmFs
bHkgYnkgR0ZpbGUpIGhhcyBwcm9ibGVtcwotICAgIC8vIGRlY29kaW5nIHN0cmluZ3Mgd2l0aCBh
cmJpdHJhcnkgcGVyY2VudCBzaWducwotICAgIGlmICh1cmwuaXNMb2NhbEZpbGUoKSkKLSAgICAg
ICAgZC0+bV9nZmlsZSA9IGdfZmlsZV9uZXdfZm9yX3BhdGgodXJsLnByZXR0eVVSTCgpLnV0Zjgo
KS5kYXRhKCkgKyBzaXplb2YoImZpbGU6Ly8iKSAtIDEpOwotICAgIGVsc2UKLSNlbmRpZgotICAg
ICAgICBkLT5tX2dmaWxlID0gZ19maWxlX25ld19mb3JfdXJpKHVybC5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKLSAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5tX2dmaWxlKSwgIndl
YmtpdC1yZXNvdXJjZSIsIGhhbmRsZSk7CisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAg
IGQtPm1fc291cFJlcXVlc3QgPSBzb3VwX3JlcXVlc3Rlcl9yZXF1ZXN0KGQtPm1fcmVxdWVzdGVy
LmdldCgpLCB1cmxTdHIuZGF0YSgpLCBzZXNzaW9uLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGlm
IChlcnJvcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZ19vYmplY3Rfc2V0X2RhdGEo
R19PQkpFQ1QoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSksICJ3ZWJraXQtcmVzb3VyY2UiLCBoYW5k
bGUpOwogCi0gICAgLy8gYmFsYW5jZWQgYnkgYSBkZXJlZigpIGluIGNsZWFudXBHaW9PcGVyYXRp
b24sIHdoaWNoIHNob3VsZCBhbHdheXMgcnVuCisgICAgLy8gYmFsYW5jZWQgYnkgYSBkZXJlZigp
IGluIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbiwgd2hpY2ggc2hvdWxkIGFsd2F5cyBydW4K
ICAgICBoYW5kbGUtPnJlZigpOwogCiAgICAgZC0+bV9jYW5jZWxsYWJsZSA9IGdfY2FuY2VsbGFi
bGVfbmV3KCk7Ci0gICAgZ19maWxlX3F1ZXJ5X2luZm9fYXN5bmMoZC0+bV9nZmlsZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX1RZUEUgIiwi
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9D
T05URU5UX1RZUEUgIiwiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR19GSUxFX0FUVFJJ
QlVURV9TVEFOREFSRF9TSVpFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfRklMRV9R
VUVSWV9JTkZPX05PTkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QUklPUklUWV9E
RUZBVUxULCBkLT5tX2NhbmNlbGxhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1
ZXJ5SW5mb0NhbGxiYWNrLCAwKTsKKyAgICBzb3VwX3JlcXVlc3Rfc2VuZF9hc3luYyhkLT5tX3Nv
dXBSZXF1ZXN0LmdldCgpLCBkLT5tX2NhbmNlbGxhYmxlLmdldCgpLCBzZW5kUmVxdWVzdENhbGxi
YWNrLCAwKTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3QuaCBiL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdC5oCmluZGV4IGExZDkxNmYuLjkyZGFiYWQgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdC5o
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdC5oCkBA
IC02Nyw4ICs2Nyw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHVwZGF0ZUZy
b21Tb3VwTWVzc2FnZShzb3VwTWVzc2FnZSk7CiAgICAgICAgIH0KIAorICAgICAgICB2b2lkIHVw
ZGF0ZVNvdXBNZXNzYWdlKFNvdXBNZXNzYWdlKikgY29uc3Q7CiAgICAgICAgIFNvdXBNZXNzYWdl
KiB0b1NvdXBNZXNzYWdlKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgdXBkYXRlRnJvbVNvdXBNZXNz
YWdlKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSk7CisgICAgICAgIHZvaWQgdXBkYXRlRnJvbVNv
dXBNZXNzYWdlKFNvdXBNZXNzYWdlKik7CiAKICAgICAgICAgU291cE1lc3NhZ2VGbGFncyBzb3Vw
TWVzc2FnZUZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9zb3VwRmxhZ3M7IH0KICAgICAgICAgdm9p
ZCBzZXRTb3VwTWVzc2FnZUZsYWdzKFNvdXBNZXNzYWdlRmxhZ3Mgc291cEZsYWdzKSB7IG1fc291
cEZsYWdzID0gc291cEZsYWdzOyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3BwCmluZGV4IDYyZGViMDEuLjM4MGZjODQgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNv
dXAuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVz
dFNvdXAuY3BwCkBAIC0zMyw2ICszMywyOSBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK3ZvaWQgUmVzb3VyY2VSZXF1ZXN0Ojp1cGRhdGVTb3VwTWVzc2Fn
ZShTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UpIGNvbnN0Cit7CisgICAgZ19vYmplY3Rfc2V0KHNv
dXBNZXNzYWdlLCBTT1VQX01FU1NBR0VfTUVUSE9ELCBodHRwTWV0aG9kKCkudXRmOCgpLmRhdGEo
KSwgTlVMTCk7CisKKyAgICBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzID0gaHR0cEhlYWRl
ckZpZWxkcygpOworICAgIFNvdXBNZXNzYWdlSGVhZGVycyogc291cEhlYWRlcnMgPSBzb3VwTWVz
c2FnZS0+cmVxdWVzdF9oZWFkZXJzOworICAgIGlmICghaGVhZGVycy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVhZGVycy5lbmQoKTsK
KyAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRlcnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgc291cF9tZXNzYWdlX2hlYWRl
cnNfYXBwZW5kKHNvdXBIZWFkZXJzLCBpdC0+Zmlyc3Quc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwg
aXQtPnNlY29uZC51dGY4KCkuZGF0YSgpKTsKKyAgICB9CisKKyNpZmRlZiBIQVZFX0xJQlNPVVBf
Ml8yOV85MAorICAgIFN0cmluZyBmaXJzdFBhcnR5U3RyaW5nID0gZmlyc3RQYXJ0eUZvckNvb2tp
ZXMoKS5zdHJpbmcoKTsKKyAgICBpZiAoIWZpcnN0UGFydHlTdHJpbmcuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIEdPd25QdHI8U291cFVSST4gZmlyc3RQYXJ0eShzb3VwX3VyaV9uZXcoZmlyc3RQYXJ0
eVN0cmluZy51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfZmlyc3Rf
cGFydHkoc291cE1lc3NhZ2UsIGZpcnN0UGFydHkuZ2V0KCkpOworICAgIH0KKyNlbmRpZgorCisg
ICAgc291cF9tZXNzYWdlX3NldF9mbGFncyhzb3VwTWVzc2FnZSwgbV9zb3VwRmxhZ3MpOworfQor
CiBTb3VwTWVzc2FnZSogUmVzb3VyY2VSZXF1ZXN0Ojp0b1NvdXBNZXNzYWdlKCkgY29uc3QKIHsK
ICAgICBTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UgPSBzb3VwX21lc3NhZ2VfbmV3KGh0dHBNZXRo
b2QoKS51dGY4KCkuZGF0YSgpLCB1cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLS0gCjEu
Ny4xCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69355</attachid>
            <date>2010-09-30 11:13:32 -0700</date>
            <delta_ts>2010-09-30 14:35:38 -0700</delta_ts>
            <desc>Imported SoupURILoader to Webkit. New public API for HTTP cache</desc>
            <filename>0001-Imported-SoupURILoader-code-to-WebKit.-New-public-AP.patch</filename>
            <type>text/plain</type>
            <size>176294</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">RnJvbSAyYWFkZjg0YzQ1NTQ2NjI3NmQ5Y2ZmY2IzYjQ5ZDU0YzA3MDIxOWE4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTZXJnaW8gVmlsbGFyIFNlbmluIDxzdmlsbGFyQGlnYWxpYS5j
b20+CkRhdGU6IFdlZCwgMjIgU2VwIDIwMTAgMTA6MTY6NDQgKzAyMDAKU3ViamVjdDogW1BBVENI
IDEvMl0gSW1wb3J0ZWQgU291cFVSSUxvYWRlciBjb2RlIHRvIFdlYktpdC4gTmV3IHB1YmxpYyBB
UEkgZm9yIEhUVFAgY2FjaGUKCi0tLQogQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgIDEwICsKIEdOVW1ha2VmaWxlLmFtICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgICAxMCArLQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTkzICsrKwogV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIwICstCiAuLi4vc291cC9jYWNo
ZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uYyAgICAgICB8ICAxOTkgKysrCiAuLi4vc291
cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uaCAgICAgICB8ICAgNjEgKwogLi4u
L25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmMgICAgfCAgOTIxICsr
KysrKysrKysrCiAuLi4vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0u
aCAgICB8ICAgNzYgKwogLi4uL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5j
ICAgICAgICAgfCAgMjA1ICsrKwogLi4uL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Qt
ZGF0YS5oICAgICAgICAgfCAgIDUxICsKIC4uLi9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1
ZXN0LWZpbGUuYyAgICAgICAgIHwgIDMyMiArKysrCiAuLi4vbmV0d29yay9zb3VwL2NhY2hlL3Nv
dXAtcmVxdWVzdC1maWxlLmggICAgICAgICB8ICAgNTMgKwogLi4uL25ldHdvcmsvc291cC9jYWNo
ZS9zb3VwLXJlcXVlc3QtaHR0cC5jICAgICAgICAgfCAgMzM5ICsrKysKIC4uLi9uZXR3b3JrL3Nv
dXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuaCAgICAgICAgIHwgICA1MyArCiBXZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QuYyB8ICAyNzkgKysrKwogV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LmggfCAgIDkyICsr
CiAuLi4vcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmMgICB8ICAx
ODcgKysrCiAuLi4vcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmgg
ICB8ICAgODAgKwogLi4uL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS1wcml2
YXRlLmggfCAgIDQxICsKIC4uLi9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUu
YyAgICAgICAgIHwgMTY1MiArKysrKysrKysrKysrKysrKysrKwogLi4uL25ldHdvcmsvc291cC9j
YWNoZS93ZWJraXQvc291cC1jYWNoZS5oICAgICAgICAgfCAgIDk1ICsrCiBXZWJLaXRUb29scy9D
aGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDkgKwogV2ViS2l0VG9v
bHMvR05VbWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKIGF1dG90
b29scy93ZWJraXQubTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArLQog
MjQgZmlsZXMgY2hhbmdlZCwgNDk0NiBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAt
ZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmgKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3Vw
LWh0dHAtaW5wdXQtc3RyZWFtLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmgKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Qt
ZGF0YS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
Y2FjaGUvc291cC1yZXF1ZXN0LWRhdGEuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmMKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Qt
ZmlsZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
Y2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRwLmgKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Qu
YwogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3NvdXAtcmVxdWVzdC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmgKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291
cC1jYWNoZS1wcml2YXRlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUuaAoK
ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA0NzFmMTk2Li5jNWQwNzE1
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTAtMDktMDYgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gQWRk
IEhUVFAgY2FjaGluZyBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00NDI2MQorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IGFkZGVkIHBh
dGhzIGZvciBzb3VwIEhUVFAgY2FjaGUgY29kZQorICAgICAgICAqIGF1dG90b29scy93ZWJraXQu
bTQ6IHVwZ3JhZGVkIHJlcXVpcmVkIGdsaWIgdmVyc2lvbgorCiAyMDEwLTA5LTI0ICBSb21haW4g
UG9rcnp5d2thICA8cm9tYWluQGtkYWIuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9u
IEhhdXNtYW5uLgpkaWZmIC0tZ2l0IGEvR05VbWFrZWZpbGUuYW0gYi9HTlVtYWtlZmlsZS5hbQpp
bmRleCBjNzY5ZGIyLi5mMzkyN2RiIDEwMDY0NAotLS0gYS9HTlVtYWtlZmlsZS5hbQorKysgYi9H
TlVtYWtlZmlsZS5hbQpAQCAtMzAyLDI4ICszMDIsMjkgQEAgZ2xvYmFsX2NwcGZsYWdzICs9IFwK
IGVuZGlmCiAKIHdlYmtpdGd0a19zdGF0aWNfaF9hcGkgKz0gXAorCSQoc3JjZGlyKS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5oIFwKIAkkKHNy
Y2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXRkZWZpbmVzLmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRkb3dubG9hZC5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZXJy
b3IuaCBcCisJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdlb2xvY2F0aW9ucG9s
aWN5ZGVjaXNpb24uaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGhpdHRl
c3RyZXN1bHQuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdG5ldHdvcmty
ZXF1ZXN0LmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRuZXR3b3JrcmVz
cG9uc2UuaCBcCisJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNlY3VyaXR5b3Jp
Z2luLmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzb3VwYXV0aGRpYWxv
Zy5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViYmFja2ZvcndhcmRs
aXN0LmggXAorCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkYXRhYmFzZS5o
IFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YXNvdXJjZS5oIFwK
IAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuaCBcCiAJJChzcmNk
aXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmhpc3RvcnlpdGVtLmggXAogCSQoc3JjZGly
KS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJpbnNwZWN0b3IuaCBcCiAJJChzcmNkaXIpL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYm5hdmlnYXRpb25hY3Rpb24uaCBcCiAJJChzcmNkaXIp
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnBvbGljeWRlY2lzaW9uLmggXAotCSQoc3JjZGly
KS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRnZW9sb2NhdGlvbnBvbGljeWRlY2lzaW9uLmggXAog
CSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJyZXNvdXJjZS5oIFwKIAkkKHNy
Y2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vic2V0dGluZ3MuaCBcCiAJJChzcmNkaXIp
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYndpbmRvd2ZlYXR1cmVzLmggXAotCSQoc3JjZGly
KS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmggXAotCSQoc3JjZGlyKS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXR3ZWJkYXRhYmFzZS5oIFwKLQkkKHNyY2RpcikvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW4uaAorCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJ2aWV3LmgKIAogd2Via2l0Z3RrX2J1aWx0X2hfYXBpICs9IFwKIAlXZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXR2ZXJzaW9uLmgKQEAgLTU0OCw2ICs1NDksNyBAQCBub2luc3RfUFJP
R1JBTVMgKz0gJChURVNUX1BST0dTKQogd2Via2l0X3Rlc3RzX2NmbGFncyA9IFwKIAktZm5vLXN0
cmljdC1hbGlhc2luZyBcCiAJLUkkKHNyY2RpcikvSmF2YVNjcmlwdENvcmUvRm9yd2FyZGluZ0hl
YWRlcnMgXAorCS1JJChzcmNkaXIpL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
IFwKIAktSSQoc3JjZGlyKS9XZWJLaXQvZ3RrIFwKIAktSSQodG9wX2J1aWxkZGlyKS9XZWJLaXQv
Z3RrIFwKIAktSSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcyBcCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDZmYTI5ZDkuLjY0OTBk
OTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTk2IEBACisyMDEwLTA5LTA2ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3Zp
bGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFtHVEtdIEFkZCBIVFRQIGNhY2hpbmcgc3VwcG9ydAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQyNjEKKworICAgICAgICAqIEdOVW1h
a2VmaWxlLmFtOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRl
cm5hbC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6UmVzb3Vy
Y2VIYW5kbGVJbnRlcm5hbCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291
cmNlSGFuZGxlU291cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUludGVy
bmFsOjp+UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZTo6flJlc291cmNlSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OnJlc3RhcnRlZENh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmdvdENodW5rQ2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6cGFyc2VEYXRhVXJsKToKKyAgICAgICAgKFdlYkNvcmU6OmNsZWFudXBTb3VwUmVx
dWVzdE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpzZW5kUmVxdWVzdENhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OnN0YXJ0SHR0cCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9zb3VwL1Jlc291cmNlUmVxdWVzdC5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291
cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdDo6dXBkYXRlU291cE1lc3NhZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291
cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uYzogQWRkZWQuCisgICAgICAgICh3
ZWJraXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX3BhcnNlX2luZm8pOgorICAgICAgICAo
d2Via2l0X3NvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9yZWFkX25leHRfZmlsZSk6CisgICAg
ICAgICh3ZWJraXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX3JlYWQpOgorICAgICAgICAo
d2Via2l0X3NvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9jbG9zZSk6CisgICAgICAgICh3ZWJr
aXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX2NsYXNzX2luaXQpOgorICAgICAgICAod2Vi
a2l0X3NvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9pbml0KToKKyAgICAgICAgKHdlYmtpdF9z
b3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fbmV3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmg6IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFt
LmM6IEFkZGVkLgorICAgICAgICAod2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZmluYWxp
emUpOgorICAgICAgICAod2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xhc3NfaW5pdCk6
CisgICAgICAgICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZWVrYWJsZV9pZmFjZV9p
bml0KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2luaXQpOgorICAg
ICAgICAod2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcXVldWVfbWVzc2FnZSk6CisgICAg
ICAgICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9uZXcpOgorICAgICAgICAod2Via2l0
X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ290X2hlYWRlcnMpOgorICAgICAgICAod2Via2l0X3Nv
dXBfaHR0cF9pbnB1dF9zdHJlYW1fZ290X2NodW5rKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2h0
dHBfaW5wdXRfc3RyZWFtX2ZpbmlzaGVkKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2h0dHBfaW5w
dXRfc3RyZWFtX2NhbmNlbGxlZCk6CisgICAgICAgICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0
cmVhbV9wcmVwYXJlX2Zvcl9pbyk6CisgICAgICAgICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0
cmVhbV9kb25lX2lvKToKKyAgICAgICAgKHNldF9lcnJvcl9pZl9odHRwX2ZhaWxlZCk6CisgICAg
ICAgIChyZWFkX2Zyb21fbGVmdG92ZXIpOgorICAgICAgICAod2Via2l0X3NvdXBfaHR0cF9pbnB1
dF9zdHJlYW1fc2VuZF9pbnRlcm5hbCk6CisgICAgICAgIChzZW5kX3N5bmNfZmluaXNoZWQpOgor
ICAgICAgICAod2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZCk6CisgICAgICAgICh3
ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9yZWFkKToKKyAgICAgICAgKHdlYmtpdF9zb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlKToKKyAgICAgICAgKHdyYXBwZXJfY2FsbGJhY2spOgor
ICAgICAgICAoc2VuZF9hc3luY190aHJlYWQpOgorICAgICAgICAod2Via2l0X3NvdXBfaHR0cF9p
bnB1dF9zdHJlYW1fc2VuZF9hc3luY19pbl90aHJlYWQpOgorICAgICAgICAoc2VuZF9hc3luY19m
aW5pc2hlZCk6CisgICAgICAgICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2Fz
eW5jX2ludGVybmFsKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3Nl
bmRfYXN5bmMpOgorICAgICAgICAod2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9m
aW5pc2gpOgorICAgICAgICAocmVhZF9hc3luY19kb25lKToKKyAgICAgICAgKHdlYmtpdF9zb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMpOgorICAgICAgICAod2Via2l0X3NvdXBfaHR0
cF9pbnB1dF9zdHJlYW1fcmVhZF9maW5pc2gpOgorICAgICAgICAod2Via2l0X3NvdXBfaHR0cF9p
bnB1dF9zdHJlYW1fY2xvc2VfYXN5bmMpOgorICAgICAgICAod2Via2l0X3NvdXBfaHR0cF9pbnB1
dF9zdHJlYW1fY2xvc2VfZmluaXNoKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX3RlbGwpOgorICAgICAgICAod2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2Fu
X3NlZWspOgorICAgICAgICAod2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2Vlayk6Cisg
ICAgICAgICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9jYW5fdHJ1bmNhdGUpOgorICAg
ICAgICAod2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fdHJ1bmNhdGUpOgorICAgICAgICAo
d2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ2V0X21lc3NhZ2UpOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmg6IEFkZGVk
LgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0
YS5jOiBBZGRlZC4KKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZGF0YV9pbml0KToKKyAg
ICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZGF0YV9maW5hbGl6ZSk6CisgICAgICAgICh3ZWJr
aXRfc291cF9yZXF1ZXN0X2RhdGFfY2hlY2tfdXJpKToKKyAgICAgICAgKHVyaV9kZWNvZGVkX2Nv
cHkpOgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9kYXRhX3NlbmQpOgorICAgICAgICAo
d2Via2l0X3NvdXBfcmVxdWVzdF9kYXRhX2dldF9jb250ZW50X2xlbmd0aCk6CisgICAgICAgICh3
ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFfZ2V0X2NvbnRlbnRfdHlwZSk6CisgICAgICAgICh3ZWJr
aXRfc291cF9yZXF1ZXN0X2RhdGFfY2xhc3NfaW5pdCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmg6IEFkZGVkLgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZmlsZS5jOiBBZGRlZC4KKyAg
ICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9nZXRfZmlsZSk6CisgICAgICAgICh3ZWJr
aXRfc291cF9yZXF1ZXN0X2ZpbGVfaW5pdCk6CisgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0
X2ZpbGVfZmluYWxpemUpOgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2NoZWNr
X3VyaSk6CisgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfZnRwX21haW5fbG9vcF9x
dWl0KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9lbnN1cmVfZmlsZV9mdHAp
OgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2Vuc3VyZV9maWxlKToKKyAgICAg
ICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9zZW5kKToKKyAgICAgICAgKHdlYmtpdF9zb3Vw
X3JlcXVlc3RfZmlsZV9zZW5kX2FzeW5jX3RocmVhZCk6CisgICAgICAgICh3ZWJraXRfc291cF9y
ZXF1ZXN0X2ZpbGVfc2VuZF9hc3luYyk6CisgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2Zp
bGVfc2VuZF9maW5pc2gpOgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2dldF9j
b250ZW50X2xlbmd0aCk6CisgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfZ2V0X2Nv
bnRlbnRfdHlwZSk6CisgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfY2xhc3NfaW5p
dCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1m
aWxlLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3Vw
LXJlcXVlc3QtaHR0cC5jOiBBZGRlZC4KKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0
cF9nZXRfbWVzc2FnZSk6CisgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfaW5pdCk6
CisgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfY2hlY2tfdXJpKToKKyAgICAgICAg
KHdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9maW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRfc291
cF9yZXF1ZXN0X2h0dHBfc2VuZCk6CisgICAgICAgIChzZW50X2FzeW5jKToKKyAgICAgICAgKGNv
bmRpdGlvbmFsX2dldF9yZWFkeV9jYik6CisgICAgICAgIChzZW5kX2FzeW5jX2NiKToKKyAgICAg
ICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9zZW5kX2FzeW5jKToKKyAgICAgICAgKHdlYmtp
dF9zb3VwX3JlcXVlc3RfaHR0cF9zZW5kX2ZpbmlzaCk6CisgICAgICAgICh3ZWJraXRfc291cF9y
ZXF1ZXN0X2h0dHBfZ2V0X2NvbnRlbnRfbGVuZ3RoKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3Jl
cXVlc3RfaHR0cF9nZXRfY29udGVudF90eXBlKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVl
c3RfaHR0cF9jbGFzc19pbml0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2Fj
aGUvc291cC1yZXF1ZXN0LWh0dHAuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5jOiBBZGRlZC4KKyAgICAgICAgKHdlYmtpdF9zb3Vw
X3JlcXVlc3RfaW5pdCk6CisgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbmFsaXplKToK
KyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3Rfc2V0X3Byb3BlcnR5KToKKyAgICAgICAgKHdl
YmtpdF9zb3VwX3JlcXVlc3RfZ2V0X3Byb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3Jl
cXVlc3RfaW5pdGFibGVfaW5pdCk6CisgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2RlZmF1
bHRfY2hlY2tfdXJpKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZGVmYXVsdF9zZW5k
X2FzeW5jKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZGVmYXVsdF9zZW5kX2Zpbmlz
aCk6CisgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X3NlbmQpOgorICAgICAgICAod2Via2l0
X3NvdXBfcmVxdWVzdF9zZW5kX2FzeW5jKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3Rf
c2VuZF9maW5pc2gpOgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9jbGFzc19pbml0KToK
KyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfaW5pdGFibGVfaW50ZXJmYWNlX2luaXQpOgor
ICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfdXJpKToKKyAgICAgICAgKHdlYmtpdF9z
b3VwX3JlcXVlc3RfZ2V0X3Nlc3Npb24pOgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9n
ZXRfY29udGVudF9sZW5ndGgpOgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfY29u
dGVudF90eXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1y
ZXF1ZXN0Lmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9z
b3VwLXJlcXVlc3Rlci5jOiBBZGRlZC4KKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3Rlcl9p
bml0KToKKyAgICAgICAgKGZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3Rl
cl9jbGFzc19pbml0KToKKyAgICAgICAgKGluaXRfcmVxdWVzdF90eXBlcyk6CisgICAgICAgICh3
ZWJraXRfc291cF9yZXF1ZXN0ZXJfbmV3KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3Rl
cl9yZXF1ZXN0KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3Rlcl9yZXF1ZXN0X3VyaSk6
CisgICAgICAgICh3ZWJraXRfc291cF9zY2hlbWVfaXNfdmFsaWQpOgorICAgICAgICAod2Via2l0
X3NvdXBfcmVxdWVzdGVyX2FkZF9wcm90b2NvbCk6CisgICAgICAgICh3ZWJraXRfc291cF9yZXF1
ZXN0ZXJfcmVtb3ZlX3Byb3RvY29sKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2Vycm9yX3F1YXJr
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIu
aDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9z
b3VwLWNhY2hlLXByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9z
b3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLmM6IEFkZGVkLgorICAgICAgICAoZ2V0X2NhY2hl
YWJpbGl0eSk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9mcmVlKToKKyAgICAg
ICAgKGNvcHlfaGVhZGVycyk6CisgICAgICAgICh1cGRhdGVfaGVhZGVycyk6CisgICAgICAgICh3
ZWJraXRfc291cF9jYWNoZV9lbnRyeV9nZXRfY3VycmVudF9hZ2UpOgorICAgICAgICAod2Via2l0
X3NvdXBfY2FjaGVfZW50cnlfaXNfZnJlc2hfZW5vdWdoKToKKyAgICAgICAgKHdlYmtpdF9zb3Vw
X21lc3NhZ2VfZ2V0X2NhY2hlX2tleSk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9lbnRy
eV9zZXRfZnJlc2huZXNzKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X25ldyk6
CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV93cml0aW5nX2ZpeHR1cmVfZnJlZSk6CisgICAg
ICAgIChjbG9zZV9yZWFkeV9jYik6CisgICAgICAgICh3cml0ZV9yZWFkeV9jYik6CisgICAgICAg
IChtc2dfZ290X2NodW5rX2NiKToKKyAgICAgICAgKG1zZ19nb3RfYm9keV9jYik6CisgICAgICAg
ICh3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9kZWxldGUpOgorICAgICAgICAobHJ1X2NvbXBhcmVf
ZnVuYyk6CisgICAgICAgIChjYWNoZV9hY2NlcHRzX2VudHJpZXNfb2Zfc2l6ZSk6CisgICAgICAg
IChtYWtlX3Jvb21fZm9yX25ld19lbnRyeSk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9l
bnRyeV9pbnNlcnRfYnlfa2V5KToKKyAgICAgICAgKG1zZ19yZXN0YXJ0ZWRfY2IpOgorICAgICAg
ICAoYXBwZW5kX3RvX3JlYWR5X2NiKToKKyAgICAgICAgKG1zZ19nb3RfaGVhZGVyc19jYik6Cisg
ICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9zZW5kX3Jlc3BvbnNlKToKKyAgICAgICAgKHJlcXVl
c3Rfc3RhcnRlZCk6CisgICAgICAgIChhdHRhY2gpOgorICAgICAgICAod2Via2l0X3NvdXBfY2Fj
aGVfc2Vzc2lvbl9mZWF0dXJlX2luaXQpOgorICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfaW5p
dCk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9maW5hbGl6ZSk6CisgICAgICAgICh3ZWJr
aXRfc291cF9jYWNoZV9zZXRfcHJvcGVydHkpOgorICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVf
Z2V0X3Byb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2NvbnN0cnVjdGVkKToK
KyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX3R5cGVfZ2V0X3R5cGUpOgorICAgICAgICAod2Vi
a2l0X3NvdXBfY2FjaGVfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9u
ZXcpOgorICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfaGFzX3Jlc3BvbnNlKToKKyAgICAgICAg
KHdlYmtpdF9zb3VwX2NhY2hlX2dldF9jYWNoZWFiaWxpdHkpOgorICAgICAgICAoZm9yY2VfZmx1
c2hfdGltZW91dCk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9mbHVzaCk6CisgICAgICAg
IChyZW1vdmVfY2FjaGVfaXRlbSk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9jbGVhcik6
CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9nZW5lcmF0ZV9jb25kaXRpb25hbF9yZXF1ZXN0
KToKKyAgICAgICAgKHBhY2tfZW50cnkpOgorICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfZHVt
cCk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9sb2FkKToKKyAgICAgICAgKHdlYmtpdF9z
b3VwX2NhY2hlX3NldF9tYXhfc2l6ZSk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9nZXRf
bWF4X3NpemUpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQv
c291cC1jYWNoZS5oOiBBZGRlZC4KKwogMjAxMC0wOS0yNiAgUGF0cmljayBHYW5zdGVyZXIgIDxw
YXJvZ2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0K
aW5kZXggNDRjNzFiNS4uNWM5ZDc2ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC03OSw3ICs3OSw5IEBAIHdlYmNvcmVn
dGtfY3BwZmxhZ3MgKz0gXAogCS1JJChzcmNkaXIpL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyIFwKIAktSSQoc3JjZGlyKS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ayBc
CiAJLUkkKHNyY2RpcikvV2ViQ29yZS9wbGF0Zm9ybS9ndGsgXAotCS1JJChzcmNkaXIpL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwCisJLUkkKHNyY2RpcikvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAgXAorCS1JJChzcmNkaXIpL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3Vw
L2NhY2hlIFwKKwktSSQoc3JjZGlyKS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNo
ZS93ZWJraXQKIAogd2ViY29yZV9idWlsdF9ub3NvdXJjZXMgKz0gXAogCURlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvRG9jVHlwZVN0cmluZ3MuY3BwIFwKQEAgLTM0ODYsNiArMzQ4OCwyMiBAQCB3ZWJj
b3JlZ3RrX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tl
dFN0cmVhbUVycm9yLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0
cmVhbUhhbmRsZS5oIFwKIAlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJl
YW1IYW5kbGVTb3VwLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUv
c291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmMgXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL2NhY2hlL3NvdXAtZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5oIFwKKwlXZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmMgXAorCVdl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0u
aCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWRh
dGEuYyBcCisJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0
LWRhdGEuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1
ZXN0LWZpbGUuYyBcCisJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1y
ZXF1ZXN0LWZpbGUuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291
cC1yZXF1ZXN0LWh0dHAuYyBcCisJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUv
c291cC1yZXF1ZXN0LWh0dHAuaCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2Fj
aGUvc291cC1yZXF1ZXN0LmMgXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3NvdXAtcmVxdWVzdC5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9z
b3VwLXJlcXVlc3Rlci5jIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9z
b3VwLXJlcXVlc3Rlci5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93
ZWJraXQvc291cC1jYWNoZS5jIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNo
ZS93ZWJraXQvc291cC1jYWNoZS5oIFwKIAlXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpbkRhdGFH
dGsuY3BwIFwKIAlXZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblBhY2thZ2VHdGsuY3BwIFwKIAlX
ZWJDb3JlL3BsdWdpbnMvZ3RrL1BsdWdpblZpZXdHdGsuY3BwCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0u
YyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtZGlyZWN0b3J5LWlu
cHV0LXN0cmVhbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZWMwOTYK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9z
b3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uYwpAQCAtMCwwICsxLDE5OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOCBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdh
bGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5k
aWYKKworI2luY2x1ZGUgInNvdXAtZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5oIgorCisjaW5jbHVk
ZSA8bGlic291cC9zb3VwLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcu
aD4KKworI2RlZmluZSBJTklUX1NUUklORyAiPGh0bWw+PGhlYWQ+PHRpdGxlPk9NRyE8L3RpdGxl
PjwvaGVhZD48Ym9keT48dGFibGU+IgorI2RlZmluZSBFWElUX1NUUklORyAiPC90YWJsZT48L2h0
bWw+IgorCitHX0RFRklORV9UWVBFIChXZWJLaXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW0sIHdl
YmtpdF9zb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW0sIEdfVFlQRV9JTlBVVF9TVFJFQU0pCisK
K3N0YXRpYyBTb3VwQnVmZmVyICoKK3dlYmtpdF9zb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1f
cGFyc2VfaW5mbyAoV2ViS2l0U291cERpcmVjdG9yeUlucHV0U3RyZWFtICogc3RyZWFtLAorCQkJ
CQkgICAgICAgR0ZpbGVJbmZvICogaW5mbykKK3sKKwlTb3VwQnVmZmVyICpidWZmZXI7CisJR1N0
cmluZyAqc3RyaW5nOworCWNvbnN0IGNoYXIgKnM7CisJY2hhciAqZXNjYXBlZCwgKnBhdGgsICp4
bWxfc3RyaW5nOworCisJaWYgKCFnX2ZpbGVfaW5mb19nZXRfbmFtZSAoaW5mbykpCisJCXJldHVy
biBOVUxMOworCisJcyA9IGdfZmlsZV9pbmZvX2dldF9kaXNwbGF5X25hbWUgKGluZm8pOworCWlm
ICghcykgeworCQlzID0gZ19maWxlX2luZm9fZ2V0X25hbWUgKGluZm8pOworCQkvKiBGSVhNRTog
Y29udmVydCBzb21laG93PyAqLworCQlpZiAoIWdfdXRmOF92YWxpZGF0ZSAocywgLTEsIE5VTEwp
KQorCQkJcmV0dXJuIE5VTEw7CisJfQorCXN0cmluZyA9IGdfc3RyaW5nX25ldyAoIjx0cj4iKTsK
KworCXhtbF9zdHJpbmcgPSBnX21hcmt1cF9lc2NhcGVfdGV4dCAocywgLTEpOworCWVzY2FwZWQg
PSBnX3VyaV9lc2NhcGVfc3RyaW5nIChnX2ZpbGVfaW5mb19nZXRfbmFtZSAoaW5mbyksIE5VTEws
IEZBTFNFKTsKKwlwYXRoID0gZ19zdHJjb25jYXQgKHN0cmVhbS0+dXJpLCAiLyIsIGVzY2FwZWQs
IE5VTEwpOworCWdfZnJlZSAoZXNjYXBlZCk7CisJZ19zdHJpbmdfYXBwZW5kX3ByaW50ZiAoc3Ry
aW5nLCAiPHRkPjxhIGhyZWY9XCIlc1wiPiVzPC9hPjwvdGQ+IiwgcGF0aCwgeG1sX3N0cmluZyk7
CisJZ19mcmVlIChwYXRoKTsKKwlnX2ZyZWUgKHhtbF9zdHJpbmcpOworCWdfc3RyaW5nX2FwcGVu
ZCAoc3RyaW5nLCAiPC90cj4iKTsKKworCWJ1ZmZlciA9IHNvdXBfYnVmZmVyX25ldyAoU09VUF9N
RU1PUllfVEFLRSwgc3RyaW5nLT5zdHIsIHN0cmluZy0+bGVuKTsKKwlnX3N0cmluZ19mcmVlIChz
dHJpbmcsIEZBTFNFKTsKKworCXJldHVybiBidWZmZXI7Cit9CisKK3N0YXRpYyBTb3VwQnVmZmVy
ICoKK3dlYmtpdF9zb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fcmVhZF9uZXh0X2ZpbGUgKFdl
YktpdFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbSAgKnN0cmVhbSwKKwkJCQkJCSAgIEdDYW5jZWxs
YWJsZSAgICAgICAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJCQkJICAgR0Vycm9yICAgICAgICAg
ICAgICAgICAgICoqZXJyb3IpCit7CisJR0ZpbGVJbmZvICppbmZvOworCVNvdXBCdWZmZXIgKmJ1
ZmZlcjsKKwlHRXJyb3IgKmVyciA9IE5VTEw7CisKKwlkbyB7CisJCWluZm8gPSBnX2ZpbGVfZW51
bWVyYXRvcl9uZXh0X2ZpbGUgKHN0cmVhbS0+ZW51bWVyYXRvciwgY2FuY2VsbGFibGUsICZlcnIp
OworCQlpZiAoaW5mbyA9PSBOVUxMKSB7CisJCQlpZiAoZXJyKSB7CisJCQkJZ19wcm9wYWdhdGVf
ZXJyb3IgKGVycm9yLCBlcnIpOworCQkJCXJldHVybiBOVUxMOworCQkJfSBlbHNlIGlmICghc3Ry
ZWFtLT5kb25lKSB7CisJCQkJc3RyZWFtLT5kb25lID0gVFJVRTsKKwkJCQlyZXR1cm4gc291cF9i
dWZmZXJfbmV3IChTT1VQX01FTU9SWV9TVEFUSUMsCisJCQkJCQkJRVhJVF9TVFJJTkcsCisJCQkJ
CQkJc2l6ZW9mIChFWElUX1NUUklORykpOworCQkJfSBlbHNlIHsKKwkJCQlyZXR1cm4gTlVMTDsK
KwkJCX0KKwkJfQorCisJCWJ1ZmZlciA9IHdlYmtpdF9zb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJl
YW1fcGFyc2VfaW5mbyAoc3RyZWFtLCBpbmZvKTsKKwl9IHdoaWxlIChidWZmZXIgPT0gTlVMTCk7
CisKKwlyZXR1cm4gYnVmZmVyOworfQorCitzdGF0aWMgZ3NzaXplCit3ZWJraXRfc291cF9kaXJl
Y3RvcnlfaW5wdXRfc3RyZWFtX3JlYWQgKEdJbnB1dFN0cmVhbSAgKmlucHV0LAorCQkJCQkgdm9p
ZCAgICAgICAgICAqYnVmZmVyLAorCQkJCQkgZ3NpemUgY291bnQsCisJCQkJCSBHQ2FuY2VsbGFi
bGUgICpjYW5jZWxsYWJsZSwKKwkJCQkJIEdFcnJvciAgICAgICAqKmVycm9yKQoreworCVdlYktp
dFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbSAqc3RyZWFtID0gV0VCS0lUX1NPVVBfRElSRUNUT1JZ
X0lOUFVUX1NUUkVBTSAoaW5wdXQpOworCWdzc2l6ZSB0b3RhbCwgc2l6ZTsKKworCWZvciAodG90
YWwgPSAwOyB0b3RhbCA8IGNvdW50OyB0b3RhbCArPSBzaXplKSB7CisJCWlmIChzdHJlYW0tPmJ1
ZmZlciA9PSBOVUxMKSB7CisJCQlzdHJlYW0tPmJ1ZmZlciA9IHdlYmtpdF9zb3VwX2RpcmVjdG9y
eV9pbnB1dF9zdHJlYW1fcmVhZF9uZXh0X2ZpbGUgKHN0cmVhbSwgY2FuY2VsbGFibGUsIGVycm9y
KTsKKwkJCWlmIChzdHJlYW0tPmJ1ZmZlciA9PSBOVUxMKSB7CisJCQkJLyogRklYTUU6IElzIHRo
aXMgY29ycmVjdCBvciBzaG91bGQgd2UgZm9yd2FyZCB0aGUgZXJyb3I/ICovCisJCQkJaWYgKHRv
dGFsKQorCQkJCQlnX2NsZWFyX2Vycm9yIChlcnJvcik7CisJCQkJcmV0dXJuIHRvdGFsOworCQkJ
fQorCQl9CisKKwkJc2l6ZSA9IE1JTiAoc3RyZWFtLT5idWZmZXItPmxlbmd0aCwgY291bnQgLSB0
b3RhbCk7CisJCW1lbWNweSAoKGNoYXIgKilidWZmZXIgKyB0b3RhbCwgc3RyZWFtLT5idWZmZXIt
PmRhdGEsIHNpemUpOworCQlpZiAoc2l6ZSA9PSBzdHJlYW0tPmJ1ZmZlci0+bGVuZ3RoKSB7CisJ
CQlzb3VwX2J1ZmZlcl9mcmVlIChzdHJlYW0tPmJ1ZmZlcik7CisJCQlzdHJlYW0tPmJ1ZmZlciA9
IE5VTEw7CisJCX0gZWxzZSB7CisJCQlTb3VwQnVmZmVyICpzdWIgPSBzb3VwX2J1ZmZlcl9uZXdf
c3ViYnVmZmVyIChzdHJlYW0tPmJ1ZmZlciwKKwkJCQkJCQkJICAgICBzaXplLAorCQkJCQkJCQkg
ICAgIHN0cmVhbS0+YnVmZmVyLT5sZW5ndGggLSBzaXplKTsKKwkJCXNvdXBfYnVmZmVyX2ZyZWUg
KHN0cmVhbS0+YnVmZmVyKTsKKwkJCXN0cmVhbS0+YnVmZmVyID0gc3ViOworCQl9CisJfQorCisJ
cmV0dXJuIHRvdGFsOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3dlYmtpdF9zb3VwX2RpcmVjdG9y
eV9pbnB1dF9zdHJlYW1fY2xvc2UgKEdJbnB1dFN0cmVhbSAgKmlucHV0LAorCQkJCQkgIEdDYW5j
ZWxsYWJsZSAgKmNhbmNlbGxhYmxlLAorCQkJCQkgIEdFcnJvciAgICAgICAqKmVycm9yKQorewor
CVdlYktpdFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbSAqc3RyZWFtID0gV0VCS0lUX1NPVVBfRElS
RUNUT1JZX0lOUFVUX1NUUkVBTSAoaW5wdXQpOworCWdib29sZWFuIHJlc3VsdDsKKworCWlmIChz
dHJlYW0tPmJ1ZmZlcikgeworCQlzb3VwX2J1ZmZlcl9mcmVlIChzdHJlYW0tPmJ1ZmZlcik7CisJ
CXN0cmVhbS0+YnVmZmVyID0gTlVMTDsKKwl9CisKKwlyZXN1bHQgPSBnX2ZpbGVfZW51bWVyYXRv
cl9jbG9zZSAoc3RyZWFtLT5lbnVtZXJhdG9yLAorCQkJCQkgIGNhbmNlbGxhYmxlLAorCQkJCQkg
IGVycm9yKTsKKwlnX29iamVjdF91bnJlZiAoc3RyZWFtLT5lbnVtZXJhdG9yKTsKKwlzdHJlYW0t
PmVudW1lcmF0b3IgPSBOVUxMOworCisJZ19mcmVlIChzdHJlYW0tPnVyaSk7CisJc3RyZWFtLT51
cmkgPSBOVUxMOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9z
b3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fY2xhc3NfaW5pdCAoV2ViS2l0U291cERpcmVjdG9y
eUlucHV0U3RyZWFtQ2xhc3MgKnN0cmVhbV9jbGFzcykKK3sKKwlHSW5wdXRTdHJlYW1DbGFzcyAq
aW5wdXRzdHJlYW1fY2xhc3MgPSBHX0lOUFVUX1NUUkVBTV9DTEFTUyAoc3RyZWFtX2NsYXNzKTsK
KworCWlucHV0c3RyZWFtX2NsYXNzLT5yZWFkX2ZuID0gd2Via2l0X3NvdXBfZGlyZWN0b3J5X2lu
cHV0X3N0cmVhbV9yZWFkOworCWlucHV0c3RyZWFtX2NsYXNzLT5jbG9zZV9mbiA9IHdlYmtpdF9z
b3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fY2xvc2U7Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJr
aXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX2luaXQgKFdlYktpdFNvdXBEaXJlY3RvcnlJ
bnB1dFN0cmVhbSAqc3RyZWFtKQoreworCXN0cmVhbS0+YnVmZmVyID0gc291cF9idWZmZXJfbmV3
IChTT1VQX01FTU9SWV9TVEFUSUMsCisJCQkJCSAgSU5JVF9TVFJJTkcsCisJCQkJCSAgc2l6ZW9m
IChJTklUX1NUUklORykpOworfQorCitHSW5wdXRTdHJlYW0gKgord2Via2l0X3NvdXBfZGlyZWN0
b3J5X2lucHV0X3N0cmVhbV9uZXcgKEdGaWxlRW51bWVyYXRvciAqZW51bWVyYXRvciwKKwkJCQkJ
U291cFVSSSAgICAgICAgICp1cmkpCit7CisJR0lucHV0U3RyZWFtICpzdHJlYW07CisKKwlnX3Jl
dHVybl92YWxfaWZfZmFpbCAoR19JU19GSUxFX0VOVU1FUkFUT1IgKGVudW1lcmF0b3IpLCBOVUxM
KTsKKwlnX3JldHVybl92YWxfaWZfZmFpbCAodXJpICE9IE5VTEwsIE5VTEwpOworCisJc3RyZWFt
ID0gZ19vYmplY3RfbmV3IChXRUJLSVRfVFlQRV9TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0s
IE5VTEwpOworCisJV0VCS0lUX1NPVVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTSAoc3RyZWFtKS0+
ZW51bWVyYXRvciA9IGdfb2JqZWN0X3JlZiAoZW51bWVyYXRvcik7CisJV0VCS0lUX1NPVVBfRElS
RUNUT1JZX0lOUFVUX1NUUkVBTSAoc3RyZWFtKS0+dXJpID0gc291cF91cmlfdG9fc3RyaW5nICh1
cmksIEZBTFNFKTsKKworCXJldHVybiBzdHJlYW07Cit9CisKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5o
IGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5w
dXQtc3RyZWFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU0N2ZjOQot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3Nv
dXAtZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxp
YSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWZuZGVmIFdFQktJVF9TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU1fSAorI2Rl
ZmluZSBXRUJLSVRfU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNX0ggMQorCisjaW5jbHVkZSA8
Z2lvL2dpby5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC10eXBlcy5oPgorI2luY2x1ZGUgPGxp
YnNvdXAvc291cC1tZXNzYWdlLWJvZHkuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdF
QktJVF9UWVBFX1NPVVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTSAgICAgICAgICAgICh3ZWJraXRf
c291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX2dldF90eXBlICgpKQorI2RlZmluZSBXRUJLSVRf
U09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX0NBU1QgKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX0RJUkVDVE9SWV9JTlBVVF9T
VFJFQU0sIFdlYktpdFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbSkpCisjZGVmaW5lIFdFQktJVF9T
T1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU1fQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfQ0FTVCAoKGtsYXNzKSwgV0VCS0lUX1RZUEVfU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RS
RUFNLCBXZWJLaXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW1DbGFzcykpCisjZGVmaW5lIFdFQktJ
VF9JU19TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0ob2JqKSAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfRElSRUNUT1JZX0lOUFVU
X1NUUkVBTSkpCisjZGVmaW5lIFdFQktJVF9JU19TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU1f
Q0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKG9iaiksIFdFQktJVF9UWVBF
X1NPVVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTSkpCisjZGVmaW5lIFdFQktJVF9TT1VQX0RJUkVD
VE9SWV9JTlBVVF9TVFJFQU1fR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NM
QVNTICgob2JqKSwgV0VCS0lUX1RZUEVfU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNLCBXZWJL
aXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW1DbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW0gV2ViS2l0U291cERpcmVjdG9yeUlucHV0U3RyZWFt
OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbUNsYXNzIFdl
YktpdFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbUNsYXNzOworCitzdHJ1Y3QgX1dlYktpdFNvdXBE
aXJlY3RvcnlJbnB1dFN0cmVhbSB7CisJR0lucHV0U3RyZWFtIHBhcmVudDsKKworCUdGaWxlRW51
bWVyYXRvciAqZW51bWVyYXRvcjsKKwljaGFyICp1cmk7CisJU291cEJ1ZmZlciAqYnVmZmVyOwor
CWdib29sZWFuIGRvbmU7Cit9OworCitzdHJ1Y3QgX1dlYktpdFNvdXBEaXJlY3RvcnlJbnB1dFN0
cmVhbUNsYXNzIHsKKwlHSW5wdXRTdHJlYW1DbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitHVHlw
ZSAgICAgICAgICB3ZWJraXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX2dldF90eXBlICh2
b2lkKTsKKworR0lucHV0U3RyZWFtICp3ZWJraXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFt
X25ldyAoR0ZpbGVFbnVtZXJhdG9yICplbnVtZXJhdG9yLAorCQkJCQkJICAgICAgU291cFVSSSAg
ICAgICAgICp1cmkpOworCisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfU09VUF9E
SVJFQ1RPUllfSU5QVVRfU1RSRUFNX0ggKi8KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0uYyBiL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0uYwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzdlNzU0Ci0tLSAvZGV2L251bGwKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1odHRwLWlucHV0LXN0cmVh
bS5jCkBAIC0wLDAgKzEsOTIxIEBACisvKiBzb3VwLWlucHV0LXN0cmVhbS5jLCBiYXNlZCBvbiBn
c29ja2V0aW5wdXRzdHJlYW0uYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA3IFJlZCBI
YXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNB
LgorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisj
aW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdpby9naW8uaD4KKworI2luY2x1ZGUgPGxpYnNv
dXAvc291cC5oPgorCisjaW5jbHVkZSAic291cC1odHRwLWlucHV0LXN0cmVhbS5oIgorCitzdGF0
aWMgdm9pZCB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZWVrYWJsZV9pZmFjZV9pbml0
IChHU2Vla2FibGVJZmFjZSAqc2Vla2FibGVfaWZhY2UpOworCitHX0RFRklORV9UWVBFX1dJVEhf
Q09ERSAoV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSwgd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9z
dHJlYW0sIEdfVFlQRV9JTlBVVF9TVFJFQU0sCisJCQkgR19JTVBMRU1FTlRfSU5URVJGQUNFIChH
X1RZUEVfU0VFS0FCTEUsCisJCQkJCQl3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZWVr
YWJsZV9pZmFjZV9pbml0KSkKKwordHlwZWRlZiB2b2lkICgqV2ViS2l0U291cEhUVFBJbnB1dFN0
cmVhbUNhbGxiYWNrKShHSW5wdXRTdHJlYW0gKik7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlTb3Vw
U2Vzc2lvbiAqc2Vzc2lvbjsKKwlHTWFpbkNvbnRleHQgKmFzeW5jX2NvbnRleHQ7CisJU291cE1l
c3NhZ2UgKm1zZzsKKwlnYm9vbGVhbiBnb3RfaGVhZGVycywgZmluaXNoZWQ7CisJZ29mZnNldCBv
ZmZzZXQ7CisKKwlHQ2FuY2VsbGFibGUgKmNhbmNlbGxhYmxlOworCUdTb3VyY2UgKmNhbmNlbF93
YXRjaDsKKwlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtQ2FsbGJhY2sgZ290X2hlYWRlcnNfY2I7
CisJV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbUNhbGxiYWNrIGdvdF9jaHVua19jYjsKKwlXZWJL
aXRTb3VwSFRUUElucHV0U3RyZWFtQ2FsbGJhY2sgZmluaXNoZWRfY2I7CisJV2ViS2l0U291cEhU
VFBJbnB1dFN0cmVhbUNhbGxiYWNrIGNhbmNlbGxlZF9jYjsKKworCWd1Y2hhciAqbGVmdG92ZXJf
YnVmZmVyOworCWdzaXplIGxlZnRvdmVyX2J1ZnNpemUsIGxlZnRvdmVyX29mZnNldDsKKworCWd1
Y2hhciAqY2FsbGVyX2J1ZmZlcjsKKwlnc2l6ZSBjYWxsZXJfYnVmc2l6ZSwgY2FsbGVyX25yZWFk
OworCUdBc3luY1JlYWR5Q2FsbGJhY2sgb3V0c3RhbmRpbmdfY2FsbGJhY2s7CisJR1NpbXBsZUFz
eW5jUmVzdWx0ICpyZXN1bHQ7Cit9IFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlOwor
I2RlZmluZSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURShvKSAoR19U
WVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFICgobyksIFNPVVBfVFlQRV9IVFRQX0lOUFVUX1NUUkVB
TSwgV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUpKQorCisKK3N0YXRpYyBnc3NpemUg
ICB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9yZWFkIChHSW5wdXRTdHJlYW0gICAgICAg
ICAqc3RyZWFtLAorCQkJCQkgICAgIHZvaWQgICAgICAgICAgICAgICAgICpidWZmZXIsCisJCQkJ
CSAgICAgZ3NpemUgY291bnQsCisJCQkJCSAgICAgR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNl
bGxhYmxlLAorCQkJCQkgICAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcik7CitzdGF0aWMg
Z2Jvb2xlYW4gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2UgKEdJbnB1dFN0cmVh
bSAgICAgICAgICpzdHJlYW0sCisJCQkJCSAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5j
ZWxsYWJsZSwKKwkJCQkJICAgICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKTsKK3N0YXRp
YyB2b2lkICAgICB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jIChHSW5w
dXRTdHJlYW0gICAgICAgICAqc3RyZWFtLAorCQkJCQkJICAgdm9pZCAgICAgICAgICAgICAgICAg
KmJ1ZmZlciwKKwkJCQkJCSAgIGdzaXplIGNvdW50LAorCQkJCQkJICAgaW50IGlvX3ByaW9yaXR5
LAorCQkJCQkJICAgR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJCQkJICAg
R0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKKwkJCQkJCSAgIGdwb2ludGVyIGRhdGEpOwor
c3RhdGljIGdzc2l6ZSAgIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWRfZmluaXNo
IChHSW5wdXRTdHJlYW0gICAgICAgICAqc3RyZWFtLAorCQkJCQkJICAgIEdBc3luY1Jlc3VsdCAg
ICAgICAgICpyZXN1bHQsCisJCQkJCQkgICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKTsK
K3N0YXRpYyB2b2lkICAgICB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9jbG9zZV9hc3lu
YyAoR0lucHV0U3RyZWFtICAgICAgICAgKnN0cmVhbSwKKwkJCQkJCSAgICBpbnQgaW9fcHJpb3Jp
dHksCisJCQkJCQkgICAgR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJCQkJ
ICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCisJCQkJCQkgICAgZ3BvaW50ZXIgZGF0
YSk7CitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2Vf
ZmluaXNoIChHSW5wdXRTdHJlYW0gICAgICAgICAqc3RyZWFtLAorCQkJCQkJICAgICBHQXN5bmNS
ZXN1bHQgICAgICAgICAqcmVzdWx0LAorCQkJCQkJICAgICBHRXJyb3IgICAgICAgICAgICAgICoq
ZXJyb3IpOworCitzdGF0aWMgZ29mZnNldCAgd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1f
dGVsbCAoR1NlZWthYmxlICAgICAgICAgICAgKnNlZWthYmxlKTsKKworc3RhdGljIGdib29sZWFu
IHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nhbl9zZWVrIChHU2Vla2FibGUgICAgICAg
ICAgICAqc2Vla2FibGUpOworc3RhdGljIGdib29sZWFuIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX3NlZWsgKEdTZWVrYWJsZSAgICAgICAgICAgICpzZWVrYWJsZSwKKwkJCQkJICAgICBn
b2Zmc2V0IG9mZnNldCwKKwkJCQkJICAgICBHU2Vla1R5cGUgdHlwZSwKKwkJCQkJICAgICBHQ2Fu
Y2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJCSAgICAgR0Vycm9yICAgICAgICAg
ICAgICAqKmVycm9yKTsKKworc3RhdGljIGdib29sZWFuIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX2Nhbl90cnVuY2F0ZSAoR1NlZWthYmxlICAgICAgICAgICAgKnNlZWthYmxlKTsKK3N0
YXRpYyBnYm9vbGVhbiB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV90cnVuY2F0ZSAoR1Nl
ZWthYmxlICAgICAgICAgICAgKnNlZWthYmxlLAorCQkJCQkJIGdvZmZzZXQgb2Zmc2V0LAorCQkJ
CQkJIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkJCSBHRXJyb3IgICAg
ICAgICAgICAgICoqZXJyb3IpOworCitzdGF0aWMgdm9pZCB3ZWJraXRfc291cF9odHRwX2lucHV0
X3N0cmVhbV9nb3RfaGVhZGVycyAoU291cE1lc3NhZ2UgKm1zZywgZ3BvaW50ZXIgc3RyZWFtKTsK
K3N0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dvdF9jaHVuayAoU291
cE1lc3NhZ2UgKm1zZywgU291cEJ1ZmZlciAqY2h1bmssIGdwb2ludGVyIHN0cmVhbSk7CitzdGF0
aWMgdm9pZCB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9maW5pc2hlZCAoU291cE1lc3Nh
Z2UgKm1zZywgZ3BvaW50ZXIgc3RyZWFtKTsKKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX2h0
dHBfaW5wdXRfc3RyZWFtX2ZpbmFsaXplIChHT2JqZWN0ICpvYmplY3QpCit7CisJV2ViS2l0U291
cEhUVFBJbnB1dFN0cmVhbSAqc3RyZWFtID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU0g
KG9iamVjdCk7CisJV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBXRUJL
SVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKworCWdfb2Jq
ZWN0X3VucmVmIChwcml2LT5zZXNzaW9uKTsKKworCWdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5l
Y3RfYnlfZnVuYyAocHJpdi0+bXNnLCBHX0NBTExCQUNLICh3ZWJraXRfc291cF9odHRwX2lucHV0
X3N0cmVhbV9nb3RfaGVhZGVycyksIHN0cmVhbSk7CisJZ19zaWduYWxfaGFuZGxlcnNfZGlzY29u
bmVjdF9ieV9mdW5jIChwcml2LT5tc2csIEdfQ0FMTEJBQ0sgKHdlYmtpdF9zb3VwX2h0dHBfaW5w
dXRfc3RyZWFtX2dvdF9jaHVuayksIHN0cmVhbSk7CisJZ19zaWduYWxfaGFuZGxlcnNfZGlzY29u
bmVjdF9ieV9mdW5jIChwcml2LT5tc2csIEdfQ0FMTEJBQ0sgKHdlYmtpdF9zb3VwX2h0dHBfaW5w
dXRfc3RyZWFtX2ZpbmlzaGVkKSwgc3RyZWFtKTsKKwlnX29iamVjdF91bnJlZiAocHJpdi0+bXNn
KTsKKwlnX2ZyZWUgKHByaXYtPmxlZnRvdmVyX2J1ZmZlcik7CisKKwlpZiAoR19PQkpFQ1RfQ0xB
U1MgKHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3BhcmVudF9jbGFzcyktPmZpbmFsaXpl
KQorCQkoKkdfT0JKRUNUX0NMQVNTICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9wYXJl
bnRfY2xhc3MpLT5maW5hbGl6ZSkob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9z
b3VwX2h0dHBfaW5wdXRfc3RyZWFtX2NsYXNzX2luaXQgKFdlYktpdFNvdXBIVFRQSW5wdXRTdHJl
YW1DbGFzcyAqa2xhc3MpCit7CisJR09iamVjdENsYXNzICpnb2JqZWN0X2NsYXNzID0gR19PQkpF
Q1RfQ0xBU1MgKGtsYXNzKTsKKwlHSW5wdXRTdHJlYW1DbGFzcyAqc3RyZWFtX2NsYXNzID0gR19J
TlBVVF9TVFJFQU1fQ0xBU1MgKGtsYXNzKTsKKworCWdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSAo
a2xhc3MsIHNpemVvZiAoV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUpKTsKKworCWdv
YmplY3RfY2xhc3MtPmZpbmFsaXplID0gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZmlu
YWxpemU7CisKKwlzdHJlYW1fY2xhc3MtPnJlYWRfZm4gPSB3ZWJraXRfc291cF9odHRwX2lucHV0
X3N0cmVhbV9yZWFkOworCXN0cmVhbV9jbGFzcy0+Y2xvc2VfZm4gPSB3ZWJraXRfc291cF9odHRw
X2lucHV0X3N0cmVhbV9jbG9zZTsKKwlzdHJlYW1fY2xhc3MtPnJlYWRfYXN5bmMgPSB3ZWJraXRf
c291cF9odHRwX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jOworCXN0cmVhbV9jbGFzcy0+cmVhZF9m
aW5pc2ggPSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9yZWFkX2ZpbmlzaDsKKwlzdHJl
YW1fY2xhc3MtPmNsb3NlX2FzeW5jID0gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xv
c2VfYXN5bmM7CisJc3RyZWFtX2NsYXNzLT5jbG9zZV9maW5pc2ggPSB3ZWJraXRfc291cF9odHRw
X2lucHV0X3N0cmVhbV9jbG9zZV9maW5pc2g7Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfc291
cF9odHRwX2lucHV0X3N0cmVhbV9zZWVrYWJsZV9pZmFjZV9pbml0IChHU2Vla2FibGVJZmFjZSAq
c2Vla2FibGVfaWZhY2UpCit7CisJc2Vla2FibGVfaWZhY2UtPnRlbGwgPSB3ZWJraXRfc291cF9o
dHRwX2lucHV0X3N0cmVhbV90ZWxsOworCXNlZWthYmxlX2lmYWNlLT5jYW5fc2VlayA9IHdlYmtp
dF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nhbl9zZWVrOworCXNlZWthYmxlX2lmYWNlLT5zZWVr
ID0gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VlazsKKwlzZWVrYWJsZV9pZmFjZS0+
Y2FuX3RydW5jYXRlID0gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2FuX3RydW5jYXRl
OworCXNlZWthYmxlX2lmYWNlLT50cnVuY2F0ZV9mbiA9IHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX3RydW5jYXRlOworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfaHR0cF9pbnB1
dF9zdHJlYW1faW5pdCAoV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSAqc3RyZWFtKQoreworCTsK
K30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3F1ZXVlX21l
c3NhZ2UgKFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gKnN0cmVhbSkKK3sKKwlXZWJLaXRTb3Vw
SFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RS
RUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOworCisJcHJpdi0+Z290X2hlYWRlcnMgPSBwcml2LT5m
aW5pc2hlZCA9IEZBTFNFOworCisJLyogQWRkIGFuIGV4dHJhIHJlZiBzaW5jZSBzb3VwX3Nlc3Np
b25fcXVldWVfbWVzc2FnZSBzdGVhbHMgb25lICovCisJZ19vYmplY3RfcmVmIChwcml2LT5tc2cp
OworCXNvdXBfc2Vzc2lvbl9xdWV1ZV9tZXNzYWdlIChwcml2LT5zZXNzaW9uLCBwcml2LT5tc2cs
IE5VTEwsIE5VTEwpOworfQorCisvKioKKyAqIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFt
X25ldzoKKyAqIEBzZXNzaW9uOiB0aGUgI1NvdXBTZXNzaW9uIHRvIHVzZQorICogQG1zZzogdGhl
ICNTb3VwTWVzc2FnZSB3aG9zZSByZXNwb25zZSB3aWxsIGJlIHN0cmVhbWVkCisgKgorICogUHJl
cGFyZXMgdG8gc2VuZCBAbXNnIG92ZXIgQHNlc3Npb24sIGFuZCByZXR1cm5zIGEgI0dJbnB1dFN0
cmVhbQorICogdGhhdCBjYW4gYmUgdXNlZCB0byByZWFkIHRoZSByZXNwb25zZS4KKyAqCisgKiBA
bXNnIG1heSBub3QgYmUgc2VudCB1bnRpbCB0aGUgZmlyc3QgcmVhZCBjYWxsOyBpZiB5b3UgbmVl
ZCB0byBsb29rCisgKiBhdCB0aGUgc3RhdHVzIGNvZGUgb3IgcmVzcG9uc2UgaGVhZGVycyBiZWZv
cmUgcmVhZGluZyB0aGUgYm9keSwgeW91CisgKiBjYW4gdXNlIHdlYmtpdF9zb3VwX2h0dHBfaW5w
dXRfc3RyZWFtX3NlbmQoKSBvciB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2Fz
eW5jKCkKKyAqIHRvIGZvcmNlIHRoZSBtZXNzYWdlIHRvIGJlIHNlbnQgYW5kIHRoZSByZXNwb25z
ZSBoZWFkZXJzIHJlYWQuCisgKgorICogSWYgQG1zZyBnZXRzIGEgbm9uLTJ4eCByZXN1bHQsIHRo
ZSBmaXJzdCByZWFkIChvciBzZW5kKSB3aWxsIHJldHVybgorICogYW4gZXJyb3Igd2l0aCB0eXBl
ICVXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9IVFRQX0VSUk9SLgorICoKKyAqIEludGVy
bmFsbHksICNXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtIGlzIGltcGxlbWVudGVkIHVzaW5nIGFz
eW5jaHJvbm91cyBJL08sCisgKiBzbyBpZiB5b3UgYXJlIHVzaW5nIHRoZSBzeW5jaHJvbm91cyBB
UEkgKGVnLAorICogZ19pbnB1dF9zdHJlYW1fcmVhZCgpKSwgeW91IHNob3VsZCBjcmVhdGUgYSBu
ZXcgI0dNYWluQ29udGV4dCBhbmQKKyAqIHNldCBpdCBhcyB0aGUgJVNPVVBfU0VTU0lPTl9BU1lO
Q19DT05URVhUIHByb3BlcnR5IG9uIEBzZXNzaW9uLiAoSWYKKyAqIHlvdSBkb24ndCwgdGhlbiBz
eW5jaHJvbm91cyAjR0lucHV0U3RyZWFtIGNhbGxzIHdpbGwgY2F1c2UgdGhlIG1haW4KKyAqIGxv
b3AgdG8gYmUgcnVuIHJlY3Vyc2l2ZWx5LikgVGhlIGFzeW5jICNHSW5wdXRTdHJlYW0gQVBJIHdv
cmtzIGZpbmUKKyAqIHdpdGggJVNPVVBfU0VTU0lPTl9BU1lOQ19DT05URVhUIGVpdGhlciBzZXQg
b3IgdW5zZXQuCisgKgorICogUmV0dXJuczogYSBuZXcgI0dJbnB1dFN0cmVhbS4KKyAqKi8KK1dl
YktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gKgord2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1f
bmV3IChTb3VwU2Vzc2lvbiAqc2Vzc2lvbiwgU291cE1lc3NhZ2UgKm1zZykKK3sKKwlXZWJLaXRT
b3VwSFRUUElucHV0U3RyZWFtICpzdHJlYW07CisJV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVBy
aXZhdGUgKnByaXY7CisKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoU09VUF9JU19NRVNTQUdFICht
c2cpLCBOVUxMKTsKKworCXN0cmVhbSA9IGdfb2JqZWN0X25ldyAoU09VUF9UWVBFX0hUVFBfSU5Q
VVRfU1RSRUFNLCBOVUxMKTsKKwlwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1f
R0VUX1BSSVZBVEUgKHN0cmVhbSk7CisKKwlwcml2LT5zZXNzaW9uID0gZ19vYmplY3RfcmVmIChz
ZXNzaW9uKTsKKwlwcml2LT5hc3luY19jb250ZXh0ID0gc291cF9zZXNzaW9uX2dldF9hc3luY19j
b250ZXh0IChzZXNzaW9uKTsKKwlwcml2LT5tc2cgPSBnX29iamVjdF9yZWYgKG1zZyk7CisKKwln
X3NpZ25hbF9jb25uZWN0IChtc2csICJnb3RfaGVhZGVycyIsCisJCQkgIEdfQ0FMTEJBQ0sgKHdl
YmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dvdF9oZWFkZXJzKSwgc3RyZWFtKTsKKwlnX3Np
Z25hbF9jb25uZWN0IChtc2csICJnb3RfY2h1bmsiLAorCQkJICBHX0NBTExCQUNLICh3ZWJraXRf
c291cF9odHRwX2lucHV0X3N0cmVhbV9nb3RfY2h1bmspLCBzdHJlYW0pOworCWdfc2lnbmFsX2Nv
bm5lY3QgKG1zZywgImZpbmlzaGVkIiwKKwkJCSAgR19DQUxMQkFDSyAod2Via2l0X3NvdXBfaHR0
cF9pbnB1dF9zdHJlYW1fZmluaXNoZWQpLCBzdHJlYW0pOworCisJd2Via2l0X3NvdXBfaHR0cF9p
bnB1dF9zdHJlYW1fcXVldWVfbWVzc2FnZSAoc3RyZWFtKTsKKwlyZXR1cm4gc3RyZWFtOworfQor
CitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ290X2hlYWRlcnMg
KFNvdXBNZXNzYWdlICptc2csIGdwb2ludGVyIHN0cmVhbSkKK3sKKwlXZWJLaXRTb3VwSFRUUElu
cHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dF
VF9QUklWQVRFIChzdHJlYW0pOworCisJLyogSWYgdGhlIHN0YXR1cyBpcyB1bnN1Y2Nlc3NmdWws
IHdlIGp1c3QgaWdub3JlIHRoZSBzaWduYWwgYW5kIGxldAorCSAqIGxpYnNvdXAga2VlcCBnb2lu
ZyAoZXZlbnR1YWxseSBlaXRoZXIgaXQgd2lsbCByZXF1ZXVlIHRoZSByZXF1ZXN0CisJICogKGFm
dGVyIGhhbmRsaW5nIGF1dGhlbnRpY2F0aW9uL3JlZGlyZWN0aW9uKSwgb3IgZWxzZSB0aGUKKwkg
KiAiZmluaXNoZWQiIGhhbmRsZXIgd2lsbCBydW4pLgorCSAqLworCWlmICghU09VUF9TVEFUVVNf
SVNfU1VDQ0VTU0ZVTCAobXNnLT5zdGF0dXNfY29kZSkpCisJCXJldHVybjsKKworCXByaXYtPmdv
dF9oZWFkZXJzID0gVFJVRTsKKwlpZiAoIXByaXYtPmNhbGxlcl9idWZmZXIpIHsKKwkJLyogTm90
IHJlYWR5IHRvIHJlYWQgdGhlIGJvZHkgeWV0ICovCisJCXNvdXBfc2Vzc2lvbl9wYXVzZV9tZXNz
YWdlIChwcml2LT5zZXNzaW9uLCBtc2cpOworCX0KKworCWlmIChwcml2LT5nb3RfaGVhZGVyc19j
YikKKwkJcHJpdi0+Z290X2hlYWRlcnNfY2IgKHN0cmVhbSk7Cit9CisKK3N0YXRpYyB2b2lkCit3
ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9nb3RfY2h1bmsgKFNvdXBNZXNzYWdlICptc2cs
IFNvdXBCdWZmZXIgKmNodW5rX2J1ZmZlciwKKwkJCQkgIGdwb2ludGVyIHN0cmVhbSkKK3sKKwlX
ZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBf
SU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOworCWNvbnN0IGdjaGFyICpjaHVuayA9
IGNodW5rX2J1ZmZlci0+ZGF0YTsKKwlnc2l6ZSBjaHVua19zaXplID0gY2h1bmtfYnVmZmVyLT5s
ZW5ndGg7CisKKwkvKiBXZSBvbmx5IHBheSBhdHRlbnRpb24gdG8gdGhlIGNodW5rIGlmIGl0J3Mg
cGFydCBvZiBhIHN1Y2Nlc3NmdWwKKwkgKiByZXNwb25zZS4KKwkgKi8KKwlpZiAoIVNPVVBfU1RB
VFVTX0lTX1NVQ0NFU1NGVUwgKG1zZy0+c3RhdHVzX2NvZGUpKQorCQlyZXR1cm47CisKKwkvKiBT
YW5pdHkgY2hlY2sgKi8KKwlpZiAocHJpdi0+Y2FsbGVyX2J1ZnNpemUgPT0gMCB8fCBwcml2LT5s
ZWZ0b3Zlcl9idWZzaXplICE9IDApCisJCWdfd2FybmluZyAoIndlYmtpdF9zb3VwX2h0dHBfaW5w
dXRfc3RyZWFtX2dvdF9jaHVuayBjYWxsZWQgYWdhaW4gYmVmb3JlIHByZXZpb3VzIGNodW5rIHdh
cyBwcm9jZXNzZWQiKTsKKworCS8qIENvcHkgd2hhdCB3ZSBjYW4gaW50byBwcml2LT5jYWxsZXJf
YnVmZmVyICovCisJaWYgKHByaXYtPmNhbGxlcl9idWZzaXplIC0gcHJpdi0+Y2FsbGVyX25yZWFk
ID4gMCkgeworCQlnc2l6ZSBucmVhZCA9IE1JTiAoY2h1bmtfc2l6ZSwgcHJpdi0+Y2FsbGVyX2J1
ZnNpemUgLSBwcml2LT5jYWxsZXJfbnJlYWQpOworCisJCW1lbWNweSAocHJpdi0+Y2FsbGVyX2J1
ZmZlciArIHByaXYtPmNhbGxlcl9ucmVhZCwgY2h1bmssIG5yZWFkKTsKKwkJcHJpdi0+Y2FsbGVy
X25yZWFkICs9IG5yZWFkOworCQlwcml2LT5vZmZzZXQgKz0gbnJlYWQ7CisJCWNodW5rICs9IG5y
ZWFkOworCQljaHVua19zaXplIC09IG5yZWFkOworCX0KKworCWlmIChjaHVua19zaXplID4gMCkg
eworCQkvKiBDb3B5IHRoZSByZXN0IGludG8gcHJpdi0+bGVmdG92ZXJfYnVmZmVyLiBJZgorCQkg
KiB0aGVyZSdzIGFscmVhZHkgc29tZSBkYXRhIHRoZXJlLCByZWFsbG9jIGFuZAorCQkgKiBhcHBl
bmQuIE90aGVyd2lzZSBqdXN0IGNvcHkuCisJCSAqLworCQlpZiAocHJpdi0+bGVmdG92ZXJfYnVm
c2l6ZSkgeworCQkJcHJpdi0+bGVmdG92ZXJfYnVmZmVyID0gZ19yZWFsbG9jIChwcml2LT5sZWZ0
b3Zlcl9idWZmZXIsCisJCQkJCQkJICAgcHJpdi0+bGVmdG92ZXJfYnVmc2l6ZSArIGNodW5rX3Np
emUpOworCQkJbWVtY3B5IChwcml2LT5sZWZ0b3Zlcl9idWZmZXIgKyBwcml2LT5sZWZ0b3Zlcl9i
dWZzaXplLAorCQkJCWNodW5rLCBjaHVua19zaXplKTsKKwkJCXByaXYtPmxlZnRvdmVyX2J1ZnNp
emUgKz0gY2h1bmtfc2l6ZTsKKwkJfSBlbHNlIHsKKwkJCXByaXYtPmxlZnRvdmVyX2J1ZnNpemUg
PSBjaHVua19zaXplOworCQkJcHJpdi0+bGVmdG92ZXJfYnVmZmVyID0gZ19tZW1kdXAgKGNodW5r
LCBjaHVua19zaXplKTsKKwkJCXByaXYtPmxlZnRvdmVyX29mZnNldCA9IDA7CisJCX0KKwl9CisK
Kwlzb3VwX3Nlc3Npb25fcGF1c2VfbWVzc2FnZSAocHJpdi0+c2Vzc2lvbiwgbXNnKTsKKwlpZiAo
cHJpdi0+Z290X2NodW5rX2NiKQorCQlwcml2LT5nb3RfY2h1bmtfY2IgKHN0cmVhbSk7Cit9CisK
K3N0YXRpYyB2b2lkCit3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9maW5pc2hlZCAoU291
cE1lc3NhZ2UgKm1zZywgZ3BvaW50ZXIgc3RyZWFtKQoreworCVdlYktpdFNvdXBIVFRQSW5wdXRT
dHJlYW1Qcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BS
SVZBVEUgKHN0cmVhbSk7CisKKwlwcml2LT5maW5pc2hlZCA9IFRSVUU7CisKKwlpZiAocHJpdi0+
ZmluaXNoZWRfY2IpCisJCXByaXYtPmZpbmlzaGVkX2NiIChzdHJlYW0pOworfQorCitzdGF0aWMg
Z2Jvb2xlYW4KK3dlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2NhbmNlbGxlZCAoR0lPQ2hh
bm5lbCAqY2hhbiwgR0lPQ29uZGl0aW9uIGNvbmRpdGlvbiwKKwkJCQkgIGdwb2ludGVyIHN0cmVh
bSkKK3sKKwlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9T
T1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOworCisJcHJpdi0+Y2Fu
Y2VsX3dhdGNoID0gTlVMTDsKKworCXNvdXBfc2Vzc2lvbl9wYXVzZV9tZXNzYWdlIChwcml2LT5z
ZXNzaW9uLCBwcml2LT5tc2cpOworCWlmIChwcml2LT5jYW5jZWxsZWRfY2IpCisJCXByaXYtPmNh
bmNlbGxlZF9jYiAoc3RyZWFtKTsKKworCXJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQK
K3dlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3ByZXBhcmVfZm9yX2lvIChHSW5wdXRTdHJl
YW0gKnN0cmVhbSwKKwkJCQkgICAgICAgR0NhbmNlbGxhYmxlICpjYW5jZWxsYWJsZSwKKwkJCQkg
ICAgICAgZ3VjaGFyICAgICAgICpidWZmZXIsCisJCQkJICAgICAgIGdzaXplIGNvdW50KQorewor
CVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfSFRU
UF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7CisJaW50IGNhbmNlbF9mZDsKKwor
CXByaXYtPmNhbmNlbGxhYmxlID0gY2FuY2VsbGFibGU7CisJY2FuY2VsX2ZkID0gZ19jYW5jZWxs
YWJsZV9nZXRfZmQgKGNhbmNlbGxhYmxlKTsKKwlpZiAoY2FuY2VsX2ZkICE9IC0xKSB7CisJCUdJ
T0NoYW5uZWwgKmNoYW4gPSBnX2lvX2NoYW5uZWxfdW5peF9uZXcgKGNhbmNlbF9mZCk7CisJCXBy
aXYtPmNhbmNlbF93YXRjaCA9IHNvdXBfYWRkX2lvX3dhdGNoIChwcml2LT5hc3luY19jb250ZXh0
LCBjaGFuLAorCQkJCQkJCUdfSU9fSU4gfCBHX0lPX0VSUiB8IEdfSU9fSFVQLAorCQkJCQkJCXdl
YmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2NhbmNlbGxlZCwKKwkJCQkJCQlzdHJlYW0pOwor
CQlnX2lvX2NoYW5uZWxfdW5yZWYgKGNoYW4pOworCX0KKworCXByaXYtPmNhbGxlcl9idWZmZXIg
PSBidWZmZXI7CisJcHJpdi0+Y2FsbGVyX2J1ZnNpemUgPSBjb3VudDsKKwlwcml2LT5jYWxsZXJf
bnJlYWQgPSAwOworCisJaWYgKHByaXYtPmdvdF9oZWFkZXJzKQorCQlzb3VwX3Nlc3Npb25fdW5w
YXVzZV9tZXNzYWdlIChwcml2LT5zZXNzaW9uLCBwcml2LT5tc2cpOworfQorCitzdGF0aWMgdm9p
ZAord2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZG9uZV9pbyAoR0lucHV0U3RyZWFtICpz
dHJlYW0pCit7CisJV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBXRUJL
SVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKworCWlmIChw
cml2LT5jYW5jZWxfd2F0Y2gpIHsKKwkJZ19zb3VyY2VfZGVzdHJveSAocHJpdi0+Y2FuY2VsX3dh
dGNoKTsKKwkJcHJpdi0+Y2FuY2VsX3dhdGNoID0gTlVMTDsKKwkJZ19jYW5jZWxsYWJsZV9yZWxl
YXNlX2ZkIChwcml2LT5jYW5jZWxsYWJsZSk7CisJfQorCXByaXYtPmNhbmNlbGxhYmxlID0gTlVM
TDsKKworCXByaXYtPmNhbGxlcl9idWZmZXIgPSBOVUxMOworCXByaXYtPmNhbGxlcl9idWZzaXpl
ID0gMDsKK30KKworc3RhdGljIGdib29sZWFuCitzZXRfZXJyb3JfaWZfaHR0cF9mYWlsZWQgKFNv
dXBNZXNzYWdlICptc2csIEdFcnJvciAqKmVycm9yKQoreworCWlmICghU09VUF9TVEFUVVNfSVNf
U1VDQ0VTU0ZVTCAobXNnLT5zdGF0dXNfY29kZSkpIHsKKwkJZ19zZXRfZXJyb3JfbGl0ZXJhbCAo
ZXJyb3IsIFNPVVBfSFRUUF9FUlJPUiwKKwkJCQkgICAgIG1zZy0+c3RhdHVzX2NvZGUsIG1zZy0+
cmVhc29uX3BocmFzZSk7CisJCXJldHVybiBUUlVFOworCX0KKwlyZXR1cm4gRkFMU0U7Cit9CisK
K3N0YXRpYyBnc2l6ZQorcmVhZF9mcm9tX2xlZnRvdmVyIChXZWJLaXRTb3VwSFRUUElucHV0U3Ry
ZWFtUHJpdmF0ZSAqcHJpdiwKKwkJICAgIGdwb2ludGVyIGJ1ZmZlciwgZ3NpemUgYnVmc2l6ZSkK
K3sKKwlnc2l6ZSBucmVhZDsKKworCWlmIChwcml2LT5sZWZ0b3Zlcl9idWZzaXplIC0gcHJpdi0+
bGVmdG92ZXJfb2Zmc2V0IDw9IGJ1ZnNpemUpIHsKKwkJbnJlYWQgPSBwcml2LT5sZWZ0b3Zlcl9i
dWZzaXplIC0gcHJpdi0+bGVmdG92ZXJfb2Zmc2V0OworCQltZW1jcHkgKGJ1ZmZlciwgcHJpdi0+
bGVmdG92ZXJfYnVmZmVyICsgcHJpdi0+bGVmdG92ZXJfb2Zmc2V0LCBucmVhZCk7CisKKwkJZ19m
cmVlIChwcml2LT5sZWZ0b3Zlcl9idWZmZXIpOworCQlwcml2LT5sZWZ0b3Zlcl9idWZmZXIgPSBO
VUxMOworCQlwcml2LT5sZWZ0b3Zlcl9idWZzaXplID0gcHJpdi0+bGVmdG92ZXJfb2Zmc2V0ID0g
MDsKKwl9IGVsc2UgeworCQlucmVhZCA9IGJ1ZnNpemU7CisJCW1lbWNweSAoYnVmZmVyLCBwcml2
LT5sZWZ0b3Zlcl9idWZmZXIgKyBwcml2LT5sZWZ0b3Zlcl9vZmZzZXQsIG5yZWFkKTsKKwkJcHJp
di0+bGVmdG92ZXJfb2Zmc2V0ICs9IG5yZWFkOworCX0KKworCXByaXYtPm9mZnNldCArPSBucmVh
ZDsKKwlyZXR1cm4gbnJlYWQ7Cit9CisKKy8qIFRoaXMgZG9lcyB0aGUgd29yayBvZiB3ZWJraXRf
c291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kKCksIGFzc3VtaW5nIHRoYXQgdGhlCisgKiBHSW5w
dXRTdHJlYW0gcGVuZGluZyBmbGFnIGhhcyBhbHJlYWR5IGJlZW4gc2V0LiBJdCBpcyBhbHNvIHVz
ZWQgYnkKKyAqIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmMoKSBpbiBz
b21lIGNpcmN1bXN0YW5jZXMuCisgKi8KK3N0YXRpYyBnYm9vbGVhbgord2Via2l0X3NvdXBfaHR0
cF9pbnB1dF9zdHJlYW1fc2VuZF9pbnRlcm5hbCAoR0lucHV0U3RyZWFtICAqc3RyZWFtLAorCQkJ
CSAgICAgIEdDYW5jZWxsYWJsZSAgKmNhbmNlbGxhYmxlLAorCQkJCSAgICAgIEdFcnJvciAgICAg
ICAqKmVycm9yKQoreworCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0g
V0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7CisKKwl3
ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9wcmVwYXJlX2Zvcl9pbyAoc3RyZWFtLCBjYW5j
ZWxsYWJsZSwgTlVMTCwgMCk7CisJd2hpbGUgKCFwcml2LT5maW5pc2hlZCAmJiAhcHJpdi0+Z290
X2hlYWRlcnMgJiYKKwkgICAgICAgIWdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkIChjYW5jZWxs
YWJsZSkpCisJCWdfbWFpbl9jb250ZXh0X2l0ZXJhdGlvbiAocHJpdi0+YXN5bmNfY29udGV4dCwg
VFJVRSk7CisJd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZG9uZV9pbyAoc3RyZWFtKTsK
KworCWlmIChnX2NhbmNlbGxhYmxlX3NldF9lcnJvcl9pZl9jYW5jZWxsZWQgKGNhbmNlbGxhYmxl
LCBlcnJvcikpCisJCXJldHVybiBGQUxTRTsKKwllbHNlIGlmIChzZXRfZXJyb3JfaWZfaHR0cF9m
YWlsZWQgKHByaXYtPm1zZywgZXJyb3IpKQorCQlyZXR1cm4gRkFMU0U7CisJcmV0dXJuIFRSVUU7
Cit9CisKK3N0YXRpYyB2b2lkCitzZW5kX3N5bmNfZmluaXNoZWQgKEdJbnB1dFN0cmVhbSAqc3Ry
ZWFtKQoreworCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gV0VCS0lU
X1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7CisJR0Vycm9yICpl
cnJvciA9IE5VTEw7CisKKwlpZiAoIWdfY2FuY2VsbGFibGVfc2V0X2Vycm9yX2lmX2NhbmNlbGxl
ZCAocHJpdi0+Y2FuY2VsbGFibGUsICZlcnJvcikpCisJCXNldF9lcnJvcl9pZl9odHRwX2ZhaWxl
ZCAocHJpdi0+bXNnLCAmZXJyb3IpOworCisJcHJpdi0+Z290X2hlYWRlcnNfY2IgPSBOVUxMOwor
CXByaXYtPmZpbmlzaGVkX2NiID0gTlVMTDsKKworCS8qIFdha2UgdXAgdGhlIG1haW4gY29udGV4
dCBpdGVyYXRpb24gKi8KKwlnX3NvdXJjZV9hdHRhY2ggKGdfaWRsZV9zb3VyY2VfbmV3ICgpLCBO
VUxMKTsKK30KKworLyoqCisgKiB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kOgor
ICogQGh0dHBzdHJlYW06IGEgI1dlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0KKyAqIEBjYW5jZWxs
YWJsZTogb3B0aW9uYWwgI0dDYW5jZWxsYWJsZSBvYmplY3QsICVOVUxMIHRvIGlnbm9yZS4KKyAq
IEBlcnJvcjogbG9jYXRpb24gdG8gc3RvcmUgdGhlIGVycm9yIG9jY3VyaW5nLCBvciAlTlVMTCB0
byBpZ25vcmUKKyAqCisgKiBTeW5jaHJvbm91c2x5IHNlbmRzIHRoZSBIVFRQIHJlcXVlc3QgYXNz
b2NpYXRlZCB3aXRoIEBzdHJlYW0sIGFuZAorICogcmVhZHMgdGhlIHJlc3BvbnNlIGhlYWRlcnMu
IENhbGwgdGhpcyBhZnRlciB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9uZXcoKQorICog
YW5kIGJlZm9yZSB0aGUgZmlyc3QgZ19pbnB1dF9zdHJlYW1fcmVhZCgpIGlmIHlvdSB3YW50IHRv
IGNoZWNrIHRoZQorICogSFRUUCBzdGF0dXMgY29kZSBiZWZvcmUgeW91IHN0YXJ0IHJlYWRpbmcu
CisgKgorICogUmV0dXJuIHZhbHVlOiAlVFJVRSBpZiBtc2cgaGFzIGEgc3VjY2Vzc2Z1bCAoMnh4
KSBzdGF0dXMsICVGQUxTRSBpZgorICogbm90LgorICoqLworZ2Jvb2xlYW4KK3dlYmtpdF9zb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX3NlbmQgKFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gICpodHRw
c3RyZWFtLAorCQkJICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkg
ICAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcikKK3sKKwlXZWJLaXRTb3VwSFRUUElucHV0
U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9Q
UklWQVRFIChodHRwc3RyZWFtKTsKKwlHSW5wdXRTdHJlYW0gKmlzdHJlYW0gPSAoR0lucHV0U3Ry
ZWFtICopaHR0cHN0cmVhbTsKKwlnYm9vbGVhbiByZXN1bHQ7CisKKwlnX3JldHVybl92YWxfaWZf
ZmFpbCAoU09VUF9JU19IVFRQX0lOUFVUX1NUUkVBTSAoaHR0cHN0cmVhbSksIEZBTFNFKTsKKwor
CWlmICghZ19pbnB1dF9zdHJlYW1fc2V0X3BlbmRpbmcgKGlzdHJlYW0sIGVycm9yKSkKKwkJcmV0
dXJuIEZBTFNFOworCisJcHJpdi0+Z290X2hlYWRlcnNfY2IgPSBzZW5kX3N5bmNfZmluaXNoZWQ7
CisJcHJpdi0+ZmluaXNoZWRfY2IgPSBzZW5kX3N5bmNfZmluaXNoZWQ7CisKKwlyZXN1bHQgPSB3
ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2ludGVybmFsIChpc3RyZWFtLCBjYW5j
ZWxsYWJsZSwgZXJyb3IpOworCWdfaW5wdXRfc3RyZWFtX2NsZWFyX3BlbmRpbmcgKGlzdHJlYW0p
OworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdzc2l6ZQord2Via2l0X3NvdXBfaHR0
cF9pbnB1dF9zdHJlYW1fcmVhZCAoR0lucHV0U3RyZWFtICpzdHJlYW0sCisJCQkgICAgIHZvaWQg
ICAgICAgICAqYnVmZmVyLAorCQkJICAgICBnc2l6ZSBjb3VudCwKKwkJCSAgICAgR0NhbmNlbGxh
YmxlICpjYW5jZWxsYWJsZSwKKwkJCSAgICAgR0Vycm9yICAgICAgKiplcnJvcikKK3sKKwlXZWJL
aXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBfSU5Q
VVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOworCisJaWYgKHByaXYtPmZpbmlzaGVkKQor
CQlyZXR1cm4gMDsKKworCS8qIElmIHRoZXJlIGlzIGRhdGEgbGVmdG92ZXIgZnJvbSBhIHByZXZp
b3VzIHJlYWQsIHJldHVybiBpdC4gKi8KKwlpZiAocHJpdi0+bGVmdG92ZXJfYnVmc2l6ZSkKKwkJ
cmV0dXJuIHJlYWRfZnJvbV9sZWZ0b3ZlciAocHJpdiwgYnVmZmVyLCBjb3VudCk7CisKKwkvKiBO
byBsZWZ0b3ZlciBkYXRhLCBhY2NlcHQgb25lIGNodW5rIGZyb20gdGhlIG5ldHdvcmsgKi8KKwl3
ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9wcmVwYXJlX2Zvcl9pbyAoc3RyZWFtLCBjYW5j
ZWxsYWJsZSwgYnVmZmVyLCBjb3VudCk7CisJd2hpbGUgKCFwcml2LT5maW5pc2hlZCAmJiBwcml2
LT5jYWxsZXJfbnJlYWQgPT0gMCAmJgorCSAgICAgICAhZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxs
ZWQgKGNhbmNlbGxhYmxlKSkKKwkJZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uIChwcml2LT5hc3lu
Y19jb250ZXh0LCBUUlVFKTsKKwl3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9kb25lX2lv
IChzdHJlYW0pOworCisJaWYgKHByaXYtPmNhbGxlcl9ucmVhZCA+IDApCisJCXJldHVybiBwcml2
LT5jYWxsZXJfbnJlYWQ7CisKKwlpZiAoZ19jYW5jZWxsYWJsZV9zZXRfZXJyb3JfaWZfY2FuY2Vs
bGVkIChjYW5jZWxsYWJsZSwgZXJyb3IpKQorCQlyZXR1cm4gLTE7CisJZWxzZSBpZiAoc2V0X2Vy
cm9yX2lmX2h0dHBfZmFpbGVkIChwcml2LT5tc2csIGVycm9yKSkKKwkJcmV0dXJuIC0xOworCWVs
c2UKKwkJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgord2Via2l0X3NvdXBfaHR0cF9p
bnB1dF9zdHJlYW1fY2xvc2UgKEdJbnB1dFN0cmVhbSAqc3RyZWFtLAorCQkJICAgICAgR0NhbmNl
bGxhYmxlICpjYW5jZWxsYWJsZSwKKwkJCSAgICAgIEdFcnJvciAgICAgICoqZXJyb3IpCit7CisJ
V2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9IVFRQ
X0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKworCWlmICghcHJpdi0+ZmluaXNo
ZWQpCisJCXNvdXBfc2Vzc2lvbl9jYW5jZWxfbWVzc2FnZSAocHJpdi0+c2Vzc2lvbiwgcHJpdi0+
bXNnLCBTT1VQX1NUQVRVU19DQU5DRUxMRUQpOworCisJcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRp
YyB2b2lkCit3cmFwcGVyX2NhbGxiYWNrIChHT2JqZWN0ICpzb3VyY2Vfb2JqZWN0LCBHQXN5bmNS
ZXN1bHQgKnJlcywKKwkJICBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJR0lucHV0U3RyZWFtICpz
dHJlYW0gPSBHX0lOUFVUX1NUUkVBTSAoc291cmNlX29iamVjdCk7CisJV2ViS2l0U291cEhUVFBJ
bnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9H
RVRfUFJJVkFURSAoc3RyZWFtKTsKKworCWdfaW5wdXRfc3RyZWFtX2NsZWFyX3BlbmRpbmcgKHN0
cmVhbSk7CisJaWYgKHByaXYtPm91dHN0YW5kaW5nX2NhbGxiYWNrKQorCQkoKnByaXYtPm91dHN0
YW5kaW5nX2NhbGxiYWNrKShzb3VyY2Vfb2JqZWN0LCByZXMsIHVzZXJfZGF0YSk7CisJcHJpdi0+
b3V0c3RhbmRpbmdfY2FsbGJhY2sgPSBOVUxMOworCWdfb2JqZWN0X3VucmVmIChzdHJlYW0pOwor
fQorCitzdGF0aWMgdm9pZAorc2VuZF9hc3luY190aHJlYWQgKEdTaW1wbGVBc3luY1Jlc3VsdCAq
cmVzLAorCQkgICBHT2JqZWN0ICpvYmplY3QsCisJCSAgIEdDYW5jZWxsYWJsZSAqY2FuY2VsbGFi
bGUpCit7CisJR0Vycm9yICplcnJvciA9IE5VTEw7CisJZ2Jvb2xlYW4gc3VjY2VzczsKKworCXN1
Y2Nlc3MgPSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2ludGVybmFsIChHX0lO
UFVUX1NUUkVBTSAob2JqZWN0KSwKKwkJCQkJCQljYW5jZWxsYWJsZSwgJmVycm9yKTsKKwlnX3Np
bXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19nYm9vbGVhbiAocmVzLCBzdWNjZXNzKTsKKwlp
ZiAoZXJyb3IpIHsKKwkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9mcm9tX2Vycm9yIChyZXMs
IGVycm9yKTsKKwkJZ19lcnJvcl9mcmVlIChlcnJvcik7CisJfQorfQorCitzdGF0aWMgdm9pZAor
d2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luY19pbl90aHJlYWQgKEdJbnB1
dFN0cmVhbSAgICAgICAgKnN0cmVhbSwKKwkJCQkJICAgICBpbnQgaW9fcHJpb3JpdHksCisJCQkJ
CSAgICAgR0NhbmNlbGxhYmxlICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJCSAgICAgR0FzeW5j
UmVhZHlDYWxsYmFjayBjYWxsYmFjaywKKwkJCQkJICAgICBncG9pbnRlciB1c2VyX2RhdGEpCit7
CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpyZXM7CisKKwlyZXMgPSBnX3NpbXBsZV9hc3luY19yZXN1
bHRfbmV3IChHX09CSkVDVCAoc3RyZWFtKSwgY2FsbGJhY2ssIHVzZXJfZGF0YSwKKwkJCQkJIHdl
YmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmNfaW5fdGhyZWFkKTsKKwlnX3Np
bXBsZV9hc3luY19yZXN1bHRfcnVuX2luX3RocmVhZCAocmVzLCBzZW5kX2FzeW5jX3RocmVhZCwK
KwkJCQkJICAgICBpb19wcmlvcml0eSwgY2FuY2VsbGFibGUpOworCWdfb2JqZWN0X3VucmVmIChy
ZXMpOworfQorCitzdGF0aWMgdm9pZAorc2VuZF9hc3luY19maW5pc2hlZCAoR0lucHV0U3RyZWFt
ICpzdHJlYW0pCit7CisJV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBX
RUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKwlHU2lt
cGxlQXN5bmNSZXN1bHQgKnJlc3VsdDsKKwlHRXJyb3IgKmVycm9yID0gTlVMTDsKKworCWlmICgh
Z19jYW5jZWxsYWJsZV9zZXRfZXJyb3JfaWZfY2FuY2VsbGVkIChwcml2LT5jYW5jZWxsYWJsZSwg
JmVycm9yKSkKKwkJc2V0X2Vycm9yX2lmX2h0dHBfZmFpbGVkIChwcml2LT5tc2csICZlcnJvcik7
CisKKwlwcml2LT5nb3RfaGVhZGVyc19jYiA9IE5VTEw7CisJcHJpdi0+ZmluaXNoZWRfY2IgPSBO
VUxMOworCXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2RvbmVfaW8gKHN0cmVhbSk7CisK
KwlyZXN1bHQgPSBwcml2LT5yZXN1bHQ7CisJcHJpdi0+cmVzdWx0ID0gTlVMTDsKKworCWdfc2lt
cGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dib29sZWFuIChyZXN1bHQsIGVycm9yID09IE5V
TEwpOworCWlmIChlcnJvcikgeworCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X2Zyb21fZXJy
b3IgKHJlc3VsdCwgZXJyb3IpOworCQlnX2Vycm9yX2ZyZWUgKGVycm9yKTsKKwl9CisJZ19zaW1w
bGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlIChyZXN1bHQpOworfQorCitzdGF0aWMgdm9pZAord2Vi
a2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luY19pbnRlcm5hbCAoR0lucHV0U3Ry
ZWFtICAgICAgICAqc3RyZWFtLAorCQkJCQkgICAgaW50IGlvX3ByaW9yaXR5LAorCQkJCQkgICAg
R0NhbmNlbGxhYmxlICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJCSAgICBHQXN5bmNSZWFkeUNh
bGxiYWNrIGNhbGxiYWNrLAorCQkJCQkgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCVdlYktp
dFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBV
VF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7CisKKwlnX29iamVjdF9yZWYgKHN0cmVhbSk7
CisJcHJpdi0+b3V0c3RhbmRpbmdfY2FsbGJhY2sgPSBjYWxsYmFjazsKKworCS8qIElmIHRoZSBz
ZXNzaW9uIHVzZXMgdGhlIGRlZmF1bHQgR01haW5Db250ZXh0LCB0aGVuIHdlIGNhbiBkbworCSAq
IGFzeW5jIEkvTyBkaXJlY3RseS4gQnV0IGlmIGl0IGhhcyBpdHMgb3duIG1haW4gY29udGV4dCwg
aXQncworCSAqIGVhc2llciB0byBqdXN0IHJ1biBpdCBpbiBhbm90aGVyIHRocmVhZC4KKwkgKi8K
KwlpZiAoc291cF9zZXNzaW9uX2dldF9hc3luY19jb250ZXh0IChwcml2LT5zZXNzaW9uKSkgewor
CQl3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jX2luX3RocmVhZCAoc3Ry
ZWFtLCBpb19wcmlvcml0eSwgY2FuY2VsbGFibGUsCisJCQkJCQkJICAgICB3cmFwcGVyX2NhbGxi
YWNrLCB1c2VyX2RhdGEpOworCQlyZXR1cm47CisJfQorCisJcHJpdi0+Z290X2hlYWRlcnNfY2Ig
PSBzZW5kX2FzeW5jX2ZpbmlzaGVkOworCXByaXYtPmZpbmlzaGVkX2NiID0gc2VuZF9hc3luY19m
aW5pc2hlZDsKKworCXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3ByZXBhcmVfZm9yX2lv
IChzdHJlYW0sIGNhbmNlbGxhYmxlLCBOVUxMLCAwKTsKKwlwcml2LT5yZXN1bHQgPSBnX3NpbXBs
ZV9hc3luY19yZXN1bHRfbmV3IChHX09CSkVDVCAoc3RyZWFtKSwKKwkJCQkJCSAgd3JhcHBlcl9j
YWxsYmFjaywgdXNlcl9kYXRhLAorCQkJCQkJICB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVh
bV9zZW5kX2FzeW5jKTsKK30KKworLyoqCisgKiB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVh
bV9zZW5kX2FzeW5jOgorICogQGh0dHBzdHJlYW06IGEgI1dlYktpdFNvdXBIVFRQSW5wdXRTdHJl
YW0KKyAqIEBpb19wcmlvcml0eTogdGhlIGlvIHByaW9yaXR5IG9mIHRoZSByZXF1ZXN0LgorICog
QGNhbmNlbGxhYmxlOiBvcHRpb25hbCAjR0NhbmNlbGxhYmxlIG9iamVjdCwgJU5VTEwgdG8gaWdu
b3JlLgorICogQGNhbGxiYWNrOiBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIHJlcXVlc3QgaXMg
c2F0aXNmaWVkCisgKiBAdXNlcl9kYXRhOiB0aGUgZGF0YSB0byBwYXNzIHRvIGNhbGxiYWNrIGZ1
bmN0aW9uCisgKgorICogQXN5bmNocm9ub3VzbHkgc2VuZHMgdGhlIEhUVFAgcmVxdWVzdCBhc3Nv
Y2lhdGVkIHdpdGggQHN0cmVhbSwgYW5kCisgKiByZWFkcyB0aGUgcmVzcG9uc2UgaGVhZGVycy4g
Q2FsbCB0aGlzIGFmdGVyIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX25ldygpCisgKiBh
bmQgYmVmb3JlIHRoZSBmaXJzdCBnX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jKCkgaWYgeW91IHdh
bnQgdG8KKyAqIGNoZWNrIHRoZSBIVFRQIHN0YXR1cyBjb2RlIGJlZm9yZSB5b3Ugc3RhcnQgcmVh
ZGluZy4KKyAqKi8KK3ZvaWQKK3dlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5
bmMgKFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gKmh0dHBzdHJlYW0sCisJCQkJICAgaW50IGlv
X3ByaW9yaXR5LAorCQkJCSAgIEdDYW5jZWxsYWJsZSAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJ
CSAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCisJCQkJICAgZ3BvaW50ZXIgdXNlcl9k
YXRhKQoreworCUdJbnB1dFN0cmVhbSAqaXN0cmVhbSA9IChHSW5wdXRTdHJlYW0gKilodHRwc3Ry
ZWFtOworCUdFcnJvciAqZXJyb3IgPSBOVUxMOworCisJZ19yZXR1cm5faWZfZmFpbCAoU09VUF9J
U19IVFRQX0lOUFVUX1NUUkVBTSAoaHR0cHN0cmVhbSkpOworCisJaWYgKCFnX2lucHV0X3N0cmVh
bV9zZXRfcGVuZGluZyAoaXN0cmVhbSwgJmVycm9yKSkgeworCQlnX3NpbXBsZV9hc3luY19yZXBv
cnRfZ2Vycm9yX2luX2lkbGUgKEdfT0JKRUNUIChodHRwc3RyZWFtKSwKKwkJCQkJCSAgICAgIGNh
bGxiYWNrLAorCQkJCQkJICAgICAgdXNlcl9kYXRhLAorCQkJCQkJICAgICAgZXJyb3IpOworCQln
X2Vycm9yX2ZyZWUgKGVycm9yKTsKKwkJcmV0dXJuOworCX0KKwl3ZWJraXRfc291cF9odHRwX2lu
cHV0X3N0cmVhbV9zZW5kX2FzeW5jX2ludGVybmFsIChpc3RyZWFtLCBpb19wcmlvcml0eSwgY2Fu
Y2VsbGFibGUsCisJCQkJCQkgICAgY2FsbGJhY2ssIHVzZXJfZGF0YSk7Cit9CisKKy8qKgorICog
d2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9maW5pc2g6CisgKiBAaHR0cHN0cmVh
bTogYSAjV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbQorICogQHJlc3VsdDogYSAjR0FzeW5jUmVz
dWx0LgorICogQGVycm9yOiBhICNHRXJyb3IgbG9jYXRpb24gdG8gc3RvcmUgdGhlIGVycm9yIG9j
Y3VyaW5nLCBvciAlTlVMTCB0bworICogaWdub3JlLgorICoKKyAqIEZpbmlzaGVzIGEgd2Via2l0
X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luYygpIG9wZXJhdGlvbi4KKyAqCisgKiBS
ZXR1cm4gdmFsdWU6ICVUUlVFIGlmIHRoZSBtZXNzYWdlIHdhcyBzZW50IHN1Y2Nlc3NmdWxseSBh
bmQKKyAqIHJlY2VpdmVkIGEgc3VjY2Vzc2Z1bCBzdGF0dXMgY29kZSwgJUZBTFNFIGlmIG5vdC4K
KyAqKi8KK2dib29sZWFuCit3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2Zpbmlz
aCAoV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSAgKmh0dHBzdHJlYW0sCisJCQkJICAgIEdBc3lu
Y1Jlc3VsdCAgICAgICAgICpyZXN1bHQsCisJCQkJICAgIEdFcnJvciAgICAgICAgICAgICAgKipl
cnJvcikKK3sKKwlHU2ltcGxlQXN5bmNSZXN1bHQgKnNpbXBsZTsKKworCWdfcmV0dXJuX3ZhbF9p
Zl9mYWlsIChHX0lTX1NJTVBMRV9BU1lOQ19SRVNVTFQgKHJlc3VsdCksIEZBTFNFKTsKKwlzaW1w
bGUgPSBHX1NJTVBMRV9BU1lOQ19SRVNVTFQgKHJlc3VsdCk7CisKKwlnX3JldHVybl92YWxfaWZf
ZmFpbCAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9zb3VyY2VfdGFnIChzaW1wbGUpID09IHdl
YmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmMsIEZBTFNFKTsKKworCWlmIChn
X3NpbXBsZV9hc3luY19yZXN1bHRfcHJvcGFnYXRlX2Vycm9yIChzaW1wbGUsIGVycm9yKSkKKwkJ
cmV0dXJuIEZBTFNFOworCisJcmV0dXJuIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfb3BfcmVz
X2dib29sZWFuIChzaW1wbGUpOworfQorCitzdGF0aWMgdm9pZAorcmVhZF9hc3luY19kb25lIChH
SW5wdXRTdHJlYW0gKnN0cmVhbSkKK3sKKwlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0
ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJl
YW0pOworCUdTaW1wbGVBc3luY1Jlc3VsdCAqcmVzdWx0OworCUdFcnJvciAqZXJyb3IgPSBOVUxM
OworCisJcmVzdWx0ID0gcHJpdi0+cmVzdWx0OworCXByaXYtPnJlc3VsdCA9IE5VTEw7CisKKwlp
ZiAoZ19jYW5jZWxsYWJsZV9zZXRfZXJyb3JfaWZfY2FuY2VsbGVkIChwcml2LT5jYW5jZWxsYWJs
ZSwgJmVycm9yKSB8fAorCSAgICBzZXRfZXJyb3JfaWZfaHR0cF9mYWlsZWQgKHByaXYtPm1zZywg
JmVycm9yKSkgeworCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X2Zyb21fZXJyb3IgKHJlc3Vs
dCwgZXJyb3IpOworCQlnX2Vycm9yX2ZyZWUgKGVycm9yKTsKKwl9IGVsc2UKKwkJZ19zaW1wbGVf
YXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ3NzaXplIChyZXN1bHQsIHByaXYtPmNhbGxlcl9ucmVh
ZCk7CisKKwlwcml2LT5nb3RfY2h1bmtfY2IgPSBOVUxMOworCXByaXYtPmZpbmlzaGVkX2NiID0g
TlVMTDsKKwlwcml2LT5jYW5jZWxsZWRfY2IgPSBOVUxMOworCXdlYmtpdF9zb3VwX2h0dHBfaW5w
dXRfc3RyZWFtX2RvbmVfaW8gKHN0cmVhbSk7CisKKwlnX3NpbXBsZV9hc3luY19yZXN1bHRfY29t
cGxldGUgKHJlc3VsdCk7CisJZ19vYmplY3RfdW5yZWYgKHJlc3VsdCk7Cit9CisKK3N0YXRpYyB2
b2lkCit3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jIChHSW5wdXRTdHJl
YW0gICAgICAgICpzdHJlYW0sCisJCQkJICAgdm9pZCAgICAgICAgICAgICAgICAqYnVmZmVyLAor
CQkJCSAgIGdzaXplIGNvdW50LAorCQkJCSAgIGludCBpb19wcmlvcml0eSwKKwkJCQkgICBHQ2Fu
Y2VsbGFibGUgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkgICBHQXN5bmNSZWFkeUNhbGxiYWNr
IGNhbGxiYWNrLAorCQkJCSAgIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlXZWJLaXRTb3VwSFRU
UElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFN
X0dFVF9QUklWQVRFIChzdHJlYW0pOworCUdTaW1wbGVBc3luY1Jlc3VsdCAqcmVzdWx0OworCisJ
LyogSWYgdGhlIHNlc3Npb24gdXNlcyB0aGUgZGVmYXVsdCBHTWFpbkNvbnRleHQsIHRoZW4gd2Ug
Y2FuIGRvCisJICogYXN5bmMgSS9PIGRpcmVjdGx5LiBCdXQgaWYgaXQgaGFzIGl0cyBvd24gbWFp
biBjb250ZXh0LCB3ZSBmYWxsCisJICogYmFjayB0byB0aGUgYXN5bmMtdmlhLXN5bmMtaW4tYW5v
dGhlci10aHJlYWQgaW1wbGVtZW50YXRpb24uCisJICovCisJaWYgKHNvdXBfc2Vzc2lvbl9nZXRf
YXN5bmNfY29udGV4dCAocHJpdi0+c2Vzc2lvbikpIHsKKwkJR19JTlBVVF9TVFJFQU1fQ0xBU1Mg
KHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3BhcmVudF9jbGFzcyktPgorCQlyZWFkX2Fz
eW5jIChzdHJlYW0sIGJ1ZmZlciwgY291bnQsIGlvX3ByaW9yaXR5LAorCQkJICAgIGNhbmNlbGxh
YmxlLCBjYWxsYmFjaywgdXNlcl9kYXRhKTsKKwkJcmV0dXJuOworCX0KKworCXJlc3VsdCA9IGdf
c2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcgKEdfT0JKRUNUIChzdHJlYW0pLAorCQkJCQkgICAgY2Fs
bGJhY2ssIHVzZXJfZGF0YSwKKwkJCQkJICAgIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFt
X3JlYWRfYXN5bmMpOworCisJaWYgKHByaXYtPmZpbmlzaGVkKSB7CisJCWdfc2ltcGxlX2FzeW5j
X3Jlc3VsdF9zZXRfb3BfcmVzX2dzc2l6ZSAocmVzdWx0LCAwKTsKKwkJZ19zaW1wbGVfYXN5bmNf
cmVzdWx0X2NvbXBsZXRlX2luX2lkbGUgKHJlc3VsdCk7CisJCWdfb2JqZWN0X3VucmVmIChyZXN1
bHQpOworCQlyZXR1cm47CisJfQorCisJaWYgKHByaXYtPmxlZnRvdmVyX2J1ZnNpemUpIHsKKwkJ
Z3NpemUgbnJlYWQgPSByZWFkX2Zyb21fbGVmdG92ZXIgKHByaXYsIGJ1ZmZlciwgY291bnQpOwor
CQlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19nc3NpemUgKHJlc3VsdCwgbnJlYWQp
OworCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGVfaW5faWRsZSAocmVzdWx0KTsKKwkJ
Z19vYmplY3RfdW5yZWYgKHJlc3VsdCk7CisJCXJldHVybjsKKwl9CisKKwlwcml2LT5yZXN1bHQg
PSByZXN1bHQ7CisKKwlwcml2LT5nb3RfY2h1bmtfY2IgPSByZWFkX2FzeW5jX2RvbmU7CisJcHJp
di0+ZmluaXNoZWRfY2IgPSByZWFkX2FzeW5jX2RvbmU7CisJcHJpdi0+Y2FuY2VsbGVkX2NiID0g
cmVhZF9hc3luY19kb25lOworCXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3ByZXBhcmVf
Zm9yX2lvIChzdHJlYW0sIGNhbmNlbGxhYmxlLCBidWZmZXIsIGNvdW50KTsKK30KKworc3RhdGlj
IGdzc2l6ZQord2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVhZF9maW5pc2ggKEdJbnB1
dFN0cmVhbSAgKnN0cmVhbSwKKwkJCQkgICAgR0FzeW5jUmVzdWx0ICAqcmVzdWx0LAorCQkJCSAg
ICBHRXJyb3IgICAgICAgKiplcnJvcikKK3sKKwlHU2ltcGxlQXN5bmNSZXN1bHQgKnNpbXBsZTsK
KworCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChHX0lTX1NJTVBMRV9BU1lOQ19SRVNVTFQgKHJlc3Vs
dCksIC0xKTsKKwlzaW1wbGUgPSBHX1NJTVBMRV9BU1lOQ19SRVNVTFQgKHJlc3VsdCk7CisJZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwgKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfc291cmNlX3RhZyAo
c2ltcGxlKSA9PSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jLCAtMSk7
CisKKwlyZXR1cm4gZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9vcF9yZXNfZ3NzaXplIChzaW1w
bGUpOworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xv
c2VfYXN5bmMgKEdJbnB1dFN0cmVhbSAgICAgICAqc3RyZWFtLAorCQkJCSAgICBpbnQgaW9fcHJp
b3JpdHksCisJCQkJICAgIEdDYW5jZWxsYWJsZSAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJICAg
IEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCisJCQkJICAgIGdwb2ludGVyIHVzZXJfZGF0
YSkKK3sKKwlHU2ltcGxlQXN5bmNSZXN1bHQgKnJlc3VsdDsKKwlnYm9vbGVhbiBzdWNjZXNzOwor
CUdFcnJvciAqZXJyb3IgPSBOVUxMOworCisJcmVzdWx0ID0gZ19zaW1wbGVfYXN5bmNfcmVzdWx0
X25ldyAoR19PQkpFQ1QgKHN0cmVhbSksCisJCQkJCSAgICBjYWxsYmFjaywgdXNlcl9kYXRhLAor
CQkJCQkgICAgd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2VfYXN5bmMpOworCXN1
Y2Nlc3MgPSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9jbG9zZSAoc3RyZWFtLCBjYW5j
ZWxsYWJsZSwgJmVycm9yKTsKKwlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19nYm9v
bGVhbiAocmVzdWx0LCBzdWNjZXNzKTsKKwlpZiAoZXJyb3IpIHsKKwkJZ19zaW1wbGVfYXN5bmNf
cmVzdWx0X3NldF9mcm9tX2Vycm9yIChyZXN1bHQsIGVycm9yKTsKKwkJZ19lcnJvcl9mcmVlIChl
cnJvcik7CisJfQorCisJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlX2luX2lkbGUgKHJl
c3VsdCk7CisJZ19vYmplY3RfdW5yZWYgKHJlc3VsdCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgor
d2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2VfZmluaXNoIChHSW5wdXRTdHJlYW0g
ICpzdHJlYW0sCisJCQkJICAgICBHQXN5bmNSZXN1bHQgICpyZXN1bHQsCisJCQkJICAgICBHRXJy
b3IgICAgICAgKiplcnJvcikKK3sKKwkvKiBGYWlsdXJlcyBoYW5kbGVkIGluIGdlbmVyaWMgY2xv
c2VfZmluaXNoIGNvZGUgKi8KKwlyZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdvZmZzZXQKK3dl
YmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3RlbGwgKEdTZWVrYWJsZSAqc2Vla2FibGUpCit7
CisJV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9I
VFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc2Vla2FibGUpOworCisJcmV0dXJuIHByaXYt
Pm9mZnNldDsKK30KKworc3RhdGljIGdib29sZWFuCit3ZWJraXRfc291cF9odHRwX2lucHV0X3N0
cmVhbV9jYW5fc2VlayAoR1NlZWthYmxlICpzZWVrYWJsZSkKK3sKKwlyZXR1cm4gVFJVRTsKK30K
KworZXh0ZXJuIHZvaWQgc291cF9tZXNzYWdlX2lvX2NsZWFudXAgKFNvdXBNZXNzYWdlICptc2cp
OworCitzdGF0aWMgZ2Jvb2xlYW4KK3dlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlZWsg
KEdTZWVrYWJsZSAgICAgKnNlZWthYmxlLAorCQkJICAgICBnb2Zmc2V0IG9mZnNldCwKKwkJCSAg
ICAgR1NlZWtUeXBlIHR5cGUsCisJCQkgICAgIEdDYW5jZWxsYWJsZSAgKmNhbmNlbGxhYmxlLAor
CQkJICAgICBHRXJyb3IgICAgICAgKiplcnJvcikKK3sKKwlHSW5wdXRTdHJlYW0gKnN0cmVhbSA9
IEdfSU5QVVRfU1RSRUFNIChzZWVrYWJsZSk7CisJV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVBy
aXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAo
c2Vla2FibGUpOworCWNoYXIgKnJhbmdlOworCisJaWYgKHR5cGUgPT0gR19TRUVLX0VORCkgewor
CQkvKiBGSVhNRTogd2UgY291bGQgc2VuZCAiYnl0ZXM9LW9mZnNldCIsIGJ1dCB1bmxlc3Mgd2UK
KwkJICoga25vdyB0aGUgQ29udGVudC1MZW5ndGgsIHdlIHdvdWxkbid0IGJlIGFibGUgdG8KKwkJ
ICogYW5zd2VyIGEgdGVsbCgpIHByb3Blcmx5LiBXZSBjb3VsZCBmaW5kIHRoZQorCQkgKiBDb250
ZW50LUxlbmd0aCBieSBkb2luZyBhIEhFQUQuLi4KKwkJICovCisKKwkJZ19zZXRfZXJyb3JfbGl0
ZXJhbCAoZXJyb3IsIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfTk9UX1NVUFBPUlRFRCwKKwkJCQkg
ICAgICJHX1NFRUtfRU5EIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIik7CisJCXJldHVybiBGQUxT
RTsKKwl9CisKKwlpZiAoIWdfaW5wdXRfc3RyZWFtX3NldF9wZW5kaW5nIChzdHJlYW0sIGVycm9y
KSkKKwkJcmV0dXJuIEZBTFNFOworCisJc291cF9zZXNzaW9uX2NhbmNlbF9tZXNzYWdlIChwcml2
LT5zZXNzaW9uLCBwcml2LT5tc2csIFNPVVBfU1RBVFVTX0NBTkNFTExFRCk7CisJc291cF9tZXNz
YWdlX2lvX2NsZWFudXAgKHByaXYtPm1zZyk7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwkJY2FzZSBH
X1NFRUtfQ1VSOgorCQkJb2Zmc2V0ICs9IHByaXYtPm9mZnNldDsKKwkJLyogZmFsbCB0aHJvdWdo
ICovCisKKwkJY2FzZSBHX1NFRUtfU0VUOgorCQkJcmFuZ2UgPSBnX3N0cmR1cF9wcmludGYgKCJi
eXRlcz0lIiBHX0dVSU5UNjRfRk9STUFUICItIiwgKGd1aW50NjQpb2Zmc2V0KTsKKwkJCXByaXYt
Pm9mZnNldCA9IG9mZnNldDsKKwkJCWJyZWFrOworCisJCWNhc2UgR19TRUVLX0VORDoKKwkJCXJh
bmdlID0gTlVMTDsgLyoga2VlcCBjb21waWxlcnMgaGFwcHkgKi8KKwkJCWdfcmV0dXJuX3ZhbF9p
Zl9yZWFjaGVkIChGQUxTRSk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZ19yZXR1cm5f
dmFsX2lmX3JlYWNoZWQgKEZBTFNFKTsKKwl9CisKKwlzb3VwX21lc3NhZ2VfaGVhZGVyc19yZW1v
dmUgKHByaXYtPm1zZy0+cmVxdWVzdF9oZWFkZXJzLCAiUmFuZ2UiKTsKKwlzb3VwX21lc3NhZ2Vf
aGVhZGVyc19hcHBlbmQgKHByaXYtPm1zZy0+cmVxdWVzdF9oZWFkZXJzLCAiUmFuZ2UiLCByYW5n
ZSk7CisJZ19mcmVlIChyYW5nZSk7CisKKwl3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9x
dWV1ZV9tZXNzYWdlIChXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTSAoc3RyZWFtKSk7CisK
KwlnX2lucHV0X3N0cmVhbV9jbGVhcl9wZW5kaW5nIChzdHJlYW0pOworCXJldHVybiBUUlVFOwor
fQorCitzdGF0aWMgZ2Jvb2xlYW4KK3dlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nhbl90
cnVuY2F0ZSAoR1NlZWthYmxlICpzZWVrYWJsZSkKK3sKKwlyZXR1cm4gRkFMU0U7Cit9CisKK3N0
YXRpYyBnYm9vbGVhbgord2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fdHJ1bmNhdGUgKEdT
ZWVrYWJsZSAgICAgKnNlZWthYmxlLAorCQkJCSBnb2Zmc2V0IG9mZnNldCwKKwkJCQkgR0NhbmNl
bGxhYmxlICAqY2FuY2VsbGFibGUsCisJCQkJIEdFcnJvciAgICAgICAqKmVycm9yKQoreworCWdf
c2V0X2Vycm9yX2xpdGVyYWwgKGVycm9yLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX05PVF9TVVBQ
T1JURUQsCisJCQkgICAgICJUcnVuY2F0ZSBub3QgYWxsb3dlZCBvbiBpbnB1dCBzdHJlYW0iKTsK
KwlyZXR1cm4gRkFMU0U7Cit9CisKK1NvdXBNZXNzYWdlICoKK3dlYmtpdF9zb3VwX2h0dHBfaW5w
dXRfc3RyZWFtX2dldF9tZXNzYWdlIChXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtICpodHRwc3Ry
ZWFtKQoreworCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gV0VCS0lU
X1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKGh0dHBzdHJlYW0pOworCXJldHVy
biBwcml2LT5tc2cgPyBnX29iamVjdF9yZWYgKHByaXYtPm1zZykgOiBOVUxMOworfQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1odHRwLWlucHV0
LXN0cmVhbS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1odHRw
LWlucHV0LXN0cmVhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNWVh
Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNo
ZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmgKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNywgMjAwOSBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsCisgKiBQdWJsaWMgTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAs
CisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaWZuZGVmIF9fV0VCS0lU
X1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fSF9fCisjZGVmaW5lIF9fV0VCS0lUX1NPVVBfSFRUUF9J
TlBVVF9TVFJFQU1fSF9fCisKKyNpbmNsdWRlIDxnaW8vZ2lvLmg+CisjaW5jbHVkZSA8bGlic291
cC9zb3VwLXR5cGVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBTT1VQX1RZUEVfSFRU
UF9JTlBVVF9TVFJFQU0gICAgICAgICAod2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ2V0
X3R5cGUgKCkpCisjZGVmaW5lIFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNKG8pICAgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvKSwgU09VUF9UWVBFX0hUVFBfSU5Q
VVRfU1RSRUFNLCBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtKSkKKyNkZWZpbmUgV0VCS0lUX1NP
VVBfSFRUUF9JTlBVVF9TVFJFQU1fQ0xBU1MoaykgICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FT
VCAoKGspLCBTT1VQX1RZUEVfSFRUUF9JTlBVVF9TVFJFQU0sIFdlYktpdFNvdXBIVFRQSW5wdXRT
dHJlYW1DbGFzcykpCisjZGVmaW5lIFNPVVBfSVNfSFRUUF9JTlBVVF9TVFJFQU0obykgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG8pLCBTT1VQX1RZUEVfSFRUUF9JTlBVVF9T
VFJFQU0pKQorI2RlZmluZSBTT1VQX0lTX0hUVFBfSU5QVVRfU1RSRUFNX0NMQVNTKGspICAoR19U
WVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrKSwgU09VUF9UWVBFX0hUVFBfSU5QVVRfU1RSRUFNKSkK
KyNkZWZpbmUgV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX0NMQVNTKG8pIChHX1RZ
UEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgobyksIFNPVVBfVFlQRV9IVFRQX0lOUFVUX1NUUkVBTSwg
V2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbUNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgV2ViS2l0
U291cEhUVFBJbnB1dFN0cmVhbSBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtOwordHlwZWRlZiBz
dHJ1Y3QgV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbUNsYXNzIFdlYktpdFNvdXBIVFRQSW5wdXRT
dHJlYW1DbGFzczsKKworc3RydWN0IFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0geworCUdJbnB1
dFN0cmVhbSBwYXJlbnQ7Cit9OworCitzdHJ1Y3QgV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbUNs
YXNzIHsKKwlHSW5wdXRTdHJlYW1DbGFzcyBwYXJlbnRfY2xhc3M7CisKKwkvKiBQYWRkaW5nIGZv
ciBmdXR1cmUgZXhwYW5zaW9uICovCisJdm9pZCAoKl9nX3Jlc2VydmVkMSkodm9pZCk7CisJdm9p
ZCAoKl9nX3Jlc2VydmVkMikodm9pZCk7CisJdm9pZCAoKl9nX3Jlc2VydmVkMykodm9pZCk7CisJ
dm9pZCAoKl9nX3Jlc2VydmVkNCkodm9pZCk7CisJdm9pZCAoKl9nX3Jlc2VydmVkNSkodm9pZCk7
Cit9OworCitHVHlwZSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9nZXRfdHlwZSAodm9p
ZCkgR19HTlVDX0NPTlNUOworCitXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtICp3ZWJraXRfc291
cF9odHRwX2lucHV0X3N0cmVhbV9uZXcgKFNvdXBTZXNzaW9uICAgICAgICAgKnNlc3Npb24sCisJ
CQkJCQkJICAgICAgU291cE1lc3NhZ2UgICAgICAgICAqbXNnKTsKKworZ2Jvb2xlYW4gICAgICAg
ICAgICAgd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZCAoV2ViS2l0U291cEhUVFBJ
bnB1dFN0cmVhbSAqaHR0cHN0cmVhbSwKKwkJCQkJCQkgR0NhbmNlbGxhYmxlICAgICAgICAqY2Fu
Y2VsbGFibGUsCisJCQkJCQkJIEdFcnJvciAgICAgICAgICAgICAqKmVycm9yKTsKKwordm9pZCAg
ICAgICAgICAgICAgICAgd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luYyAo
V2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSAqaHR0cHN0cmVhbSwKKwkJCQkJCQkgICAgICAgaW50
IGlvX3ByaW9yaXR5LAorCQkJCQkJCSAgICAgICBHQ2FuY2VsbGFibGUgICAgICAgICpjYW5jZWxs
YWJsZSwKKwkJCQkJCQkgICAgICAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKKwkJCQkJ
CQkgICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKK2dib29sZWFuICAgICAgICAgICAgIHdlYmtp
dF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfZmluaXNoIChXZWJLaXRTb3VwSFRUUElucHV0
U3RyZWFtICpodHRwc3RyZWFtLAorCQkJCQkJCQlHQXN5bmNSZXN1bHQgICAgICAgICpyZXN1bHQs
CisJCQkJCQkJCUdFcnJvciAgICAgICAgICAgICAqKmVycm9yKTsKKworU291cE1lc3NhZ2UgICAg
ICAgICAqd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ2V0X21lc3NhZ2UgKFdlYktpdFNv
dXBIVFRQSW5wdXRTdHJlYW0gKmh0dHBzdHJlYW0pOworCitHX0VORF9ERUNMUworCisjZW5kaWYg
LyogX19XRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9IX18gKi8KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmMgYi9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5jCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2NGRiYzMKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0
YS5jCkBAIC0wLDAgKzEsMjA1IEBACisvKgorICogc291cC1yZXF1ZXN0LWRhdGEuYzogZGF0YTog
VVJJIHJlcXVlc3Qgb2JqZWN0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJlZCBIYXQsIElu
Yy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklH
X0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorI2luY2x1ZGUgInNvdXAtcmVxdWVzdC1k
YXRhLmgiCisKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3Rlci5oIgorI2luY2x1ZGUgPGxpYnNvdXAv
c291cC5oPgorI2luY2x1ZGUgPGdsaWIvZ2kxOG4uaD4KKworR19ERUZJTkVfVFlQRSAoV2ViS2l0
U291cFJlcXVlc3REYXRhLCB3ZWJraXRfc291cF9yZXF1ZXN0X2RhdGEsIFdFQktJVF9UWVBFX1NP
VVBfUkVRVUVTVCkKKworc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdERhdGFQcml2YXRlIHsKKwln
c2l6ZSBjb250ZW50X2xlbmd0aDsKKwljaGFyICpjb250ZW50X3R5cGU7Cit9OworCitzdGF0aWMg
dm9pZAord2Via2l0X3NvdXBfcmVxdWVzdF9kYXRhX2luaXQgKFdlYktpdFNvdXBSZXF1ZXN0RGF0
YSAqZGF0YSkKK3sKKwlkYXRhLT5wcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFIChk
YXRhLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfREFUQSwgV2ViS2l0U291cFJlcXVlc3REYXRh
UHJpdmF0ZSk7Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFfZmlu
YWxpemUgKEdPYmplY3QgKm9iamVjdCkKK3sKKwlXZWJLaXRTb3VwUmVxdWVzdERhdGEgKmRhdGEg
PSBXRUJLSVRfU09VUF9SRVFVRVNUX0RBVEEgKG9iamVjdCk7CisKKwlnX2ZyZWUgKGRhdGEtPnBy
aXYtPmNvbnRlbnRfdHlwZSk7CisKKwlHX09CSkVDVF9DTEFTUyAod2Via2l0X3NvdXBfcmVxdWVz
dF9kYXRhX3BhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOworfQorCitzdGF0aWMgZ2Jv
b2xlYW4KK3dlYmtpdF9zb3VwX3JlcXVlc3RfZGF0YV9jaGVja191cmkgKFdlYktpdFNvdXBSZXF1
ZXN0ICAqcmVxdWVzdCwKKwkJCSAgICAgU291cFVSSSAgICAgICp1cmksCisJCQkgICAgIEdFcnJv
ciAgICAgICoqZXJyb3IpCit7CisJcmV0dXJuIHVyaS0+aG9zdCA9PSBOVUxMOworfQorCisKKyNk
ZWZpbmUgWERJR0lUKGMpICgoYykgPD0gJzknID8gKGMpIC0gJzAnIDogKChjKSAmIDB4NEYpIC0g
J0EnICsgMTApCisjZGVmaW5lIEhFWENIQVIocykgKChYRElHSVQgKHNbMV0pIDw8IDQpICsgWERJ
R0lUIChzWzJdKSkKKworY2hhciAqCit1cmlfZGVjb2RlZF9jb3B5IChjb25zdCBjaGFyICpwYXJ0
LCBpbnQgbGVuZ3RoLCBnYm9vbGVhbiBmaXh1cCkKK3sKKwl1bnNpZ25lZCBjaGFyICpzLCAqZDsK
KwljaGFyICpkZWNvZGVkID0gZ19zdHJuZHVwIChwYXJ0LCBsZW5ndGgpOworCisJcyA9IGQgPSAo
dW5zaWduZWQgY2hhciAqKWRlY29kZWQ7CisJZG8geworCQlpZiAoKnMgPT0gJyUnKSB7CisJCQlp
ZiAoIWdfYXNjaWlfaXN4ZGlnaXQgKHNbMV0pIHx8CisJCQkgICAgIWdfYXNjaWlfaXN4ZGlnaXQg
KHNbMl0pKSB7CisJCQkJaWYgKCFmaXh1cCkgeworCQkJCQlnX2ZyZWUgKGRlY29kZWQpOworCQkJ
CQlyZXR1cm4gTlVMTDsKKwkJCQl9CisJCQkJKmQrKyA9ICpzOworCQkJCWNvbnRpbnVlOworCQkJ
fQorCQkJKmQrKyA9IEhFWENIQVIgKHMpOworCQkJcyArPSAyOworCQl9IGVsc2UKKwkJCSpkKysg
PSAqczsKKwl9IHdoaWxlICgqcysrKTsKKworCXJldHVybiBkZWNvZGVkOworfQorCitzdGF0aWMg
R0lucHV0U3RyZWFtICoKK3dlYmtpdF9zb3VwX3JlcXVlc3RfZGF0YV9zZW5kIChXZWJLaXRTb3Vw
UmVxdWVzdCAgICpyZXF1ZXN0LAorCQkJR0NhbmNlbGxhYmxlICAqY2FuY2VsbGFibGUsCisJCQlH
RXJyb3IgICAgICAgKiplcnJvcikKK3sKKwlXZWJLaXRTb3VwUmVxdWVzdERhdGEgKmRhdGEgPSBX
RUJLSVRfU09VUF9SRVFVRVNUX0RBVEEgKHJlcXVlc3QpOworCVNvdXBVUkkgKnVyaSA9IHdlYmtp
dF9zb3VwX3JlcXVlc3RfZ2V0X3VyaSAocmVxdWVzdCk7CisJR0lucHV0U3RyZWFtICptZW1zdHJl
YW07CisJY29uc3QgY2hhciAqY29tbWEsICpzZW1pLCAqc3RhcnQsICplbmQ7CisJZ2Jvb2xlYW4g
YmFzZTY0ID0gRkFMU0U7CisKKwlnY2hhciAqdXJpc3RyID0gc291cF91cmlfdG9fc3RyaW5nICh1
cmksIEZBTFNFKTsKKwljb21tYSA9IHN0cmNociAodXJpc3RyLCAnLCcpOworCWlmIChjb21tYSAm
JiBjb21tYSAhPSB1cmlzdHIpIHsKKwkJLyogRGVhbCB3aXRoIE1JTUUgdHlwZSAvIHBhcmFtcyAq
LworCQlzZW1pID0gbWVtY2hyICh1cmlzdHIsICc7JywgY29tbWEgLSB1cmlzdHIpOworCQllbmQg
PSBzZW1pID8gc2VtaSA6IGNvbW1hOworCisJCWlmIChlbmQgIT0gdXJpc3RyKQorCQkJZGF0YS0+
cHJpdi0+Y29udGVudF90eXBlID0gdXJpX2RlY29kZWRfY29weSAodXJpc3RyLCBlbmQgLSB1cmlz
dHIsIFRSVUUpOworCisJCWlmIChzZW1pICYmICFnX2FzY2lpX3N0cm5jYXNlY21wIChzZW1pLCAi
O2Jhc2U2NCIsIE1BWCAoY29tbWEgLSBzZW1pLCBzdHJsZW4gKCI7YmFzZTY0IikpKSkKKwkJCWJh
c2U2NCA9IFRSVUU7CisJfQorCisJbWVtc3RyZWFtID0gZ19tZW1vcnlfaW5wdXRfc3RyZWFtX25l
dyAoKTsKKworCXN0YXJ0ID0gY29tbWEgPyBjb21tYSArIDEgOiB1cmlzdHI7CisKKwlpZiAoKnN0
YXJ0KSB7CisJCWd1Y2hhciAqYnVmOworCisJCWlmIChiYXNlNjQpIHsKKwkJCWludCBpbmxlbiwg
c3RhdGUgPSAwOworCQkJZ3VpbnQgc2F2ZSA9IDA7CisJCQljaGFyICp1bmVzY2FwZWQ7CisKKwkJ
CWlmIChzdHJjaHIgKHN0YXJ0LCAnJScpKSB7CisJCQkJc3RhcnQgPSB1bmVzY2FwZWQgPSB1cmlf
ZGVjb2RlZF9jb3B5IChzdGFydCwgc3RybGVuIChzdGFydCksIFRSVUUpOworCQkJCWlmICghdW5l
c2NhcGVkKQorCQkJCQlnb3RvIGZhaWw7CisJCQl9IGVsc2UKKwkJCQl1bmVzY2FwZWQgPSBOVUxM
OworCisJCQlpbmxlbiA9IHN0cmxlbiAoc3RhcnQpOworCQkJYnVmID0gZ19tYWxsb2MgKGlubGVu
ICogMyAvIDQpOworCQkJZGF0YS0+cHJpdi0+Y29udGVudF9sZW5ndGggPQorCQkJCWdfYmFzZTY0
X2RlY29kZV9zdGVwIChzdGFydCwgaW5sZW4sIGJ1ZiwKKwkJCQkJCSAgICAgICZzdGF0ZSwgJnNh
dmUpOworCQkJZ19mcmVlICh1bmVzY2FwZWQpOworCQkJaWYgKHN0YXRlICE9IDApIHsKKwkJCQln
X2ZyZWUgKGJ1Zik7CisJCQkJZ290byBmYWlsOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogQ2Fu
bm90IHVzZSBnX3VyaV91bmVzY2FwZV9zdHJpbmcgbm9yCisJCQkgICBzb3VwX3VyaV9kZWNvZGUg
YmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvCisJCQkgICBmYWlsIGZvciB0aGluZ3MgbGlrZSAiJTNF
JSUzQyIgLT4gIj4lPCIgKi8KKwkJCWJ1ZiA9IChndWNoYXIgKil1cmlfZGVjb2RlZF9jb3B5IChz
dGFydCwgc3RybGVuIChzdGFydCksIFRSVUUpOworCQkJaWYgKCFidWYpCisJCQkJZ290byBmYWls
OworCQkJZGF0YS0+cHJpdi0+Y29udGVudF9sZW5ndGggPSBzdHJsZW4gKChjaGFyICopYnVmKTsK
KwkJfQorCisJCWdfbWVtb3J5X2lucHV0X3N0cmVhbV9hZGRfZGF0YSAoR19NRU1PUllfSU5QVVRf
U1RSRUFNIChtZW1zdHJlYW0pLAorCQkJCQkJYnVmLCBkYXRhLT5wcml2LT5jb250ZW50X2xlbmd0
aCwKKwkJCQkJCWdfZnJlZSk7CisJfQorCWdfZnJlZSAodXJpc3RyKTsKKworCXJldHVybiBtZW1z
dHJlYW07CisKKyBmYWlsOgorCWdfZnJlZSAodXJpc3RyKTsKKwlnX3NldF9lcnJvciAoZXJyb3Is
IFdFQktJVF9TT1VQX0VSUk9SLCBXRUJLSVRfU09VUF9FUlJPUl9CQURfVVJJLAorCQkgICAgIF8g
KCJVbmFibGUgdG8gZGVjb2RlIFVSSTogJXMiKSwgc3RhcnQpOworCWdfb2JqZWN0X3VucmVmICht
ZW1zdHJlYW0pOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgZ29mZnNldAord2Via2l0X3Nv
dXBfcmVxdWVzdF9kYXRhX2dldF9jb250ZW50X2xlbmd0aCAoV2ViS2l0U291cFJlcXVlc3QgKnJl
cXVlc3QpCit7CisJV2ViS2l0U291cFJlcXVlc3REYXRhICpkYXRhID0gV0VCS0lUX1NPVVBfUkVR
VUVTVF9EQVRBIChyZXF1ZXN0KTsKKworCXJldHVybiBkYXRhLT5wcml2LT5jb250ZW50X2xlbmd0
aDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgord2Via2l0X3NvdXBfcmVxdWVzdF9kYXRhX2dl
dF9jb250ZW50X3R5cGUgKFdlYktpdFNvdXBSZXF1ZXN0ICpyZXF1ZXN0KQoreworCVdlYktpdFNv
dXBSZXF1ZXN0RGF0YSAqZGF0YSA9IFdFQktJVF9TT1VQX1JFUVVFU1RfREFUQSAocmVxdWVzdCk7
CisKKwlyZXR1cm4gZGF0YS0+cHJpdi0+Y29udGVudF90eXBlOworfQorCitzdGF0aWMgdm9pZAor
d2Via2l0X3NvdXBfcmVxdWVzdF9kYXRhX2NsYXNzX2luaXQgKFdlYktpdFNvdXBSZXF1ZXN0RGF0
YUNsYXNzICpyZXF1ZXN0X2RhdGFfY2xhc3MpCit7CisJR09iamVjdENsYXNzICpvYmplY3RfY2xh
c3MgPSBHX09CSkVDVF9DTEFTUyAocmVxdWVzdF9kYXRhX2NsYXNzKTsKKwlXZWJLaXRTb3VwUmVx
dWVzdENsYXNzICpyZXF1ZXN0X2NsYXNzID0KKwkJV0VCS0lUX1NPVVBfUkVRVUVTVF9DTEFTUyAo
cmVxdWVzdF9kYXRhX2NsYXNzKTsKKworCWdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSAocmVxdWVz
dF9kYXRhX2NsYXNzLCBzaXplb2YgKFdlYktpdFNvdXBSZXF1ZXN0RGF0YVByaXZhdGUpKTsKKwor
CW9iamVjdF9jbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFfZmluYWxp
emU7CisKKwlyZXF1ZXN0X2NsYXNzLT5jaGVja191cmkgPSB3ZWJraXRfc291cF9yZXF1ZXN0X2Rh
dGFfY2hlY2tfdXJpOworCXJlcXVlc3RfY2xhc3MtPnNlbmQgPSB3ZWJraXRfc291cF9yZXF1ZXN0
X2RhdGFfc2VuZDsKKwlyZXF1ZXN0X2NsYXNzLT5nZXRfY29udGVudF9sZW5ndGggPSB3ZWJraXRf
c291cF9yZXF1ZXN0X2RhdGFfZ2V0X2NvbnRlbnRfbGVuZ3RoOworCXJlcXVlc3RfY2xhc3MtPmdl
dF9jb250ZW50X3R5cGUgPSB3ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFfZ2V0X2NvbnRlbnRfdHlw
ZTsKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3Nv
dXAtcmVxdWVzdC1kYXRhLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9z
b3VwLXJlcXVlc3QtZGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQz
OTA1MjIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9j
YWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwg
Uy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaWZuZGVmIFdFQktJVF9TT1VQX1JFUVVFU1RfREFUQV9ICisjZGVmaW5lIFdFQktJVF9T
T1VQX1JFUVVFU1RfREFUQV9IIDEKKworI2luY2x1ZGUgInNvdXAtcmVxdWVzdC5oIgorCitHX0JF
R0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0RBVEEgICAgICAg
ICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9kYXRhX2dldF90eXBlICgpKQorI2RlZmluZSBXRUJL
SVRfU09VUF9SRVFVRVNUX0RBVEEob2JqZWN0KSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfQ0FTVCAoKG9iamVjdCksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9EQVRBLCBXZWJLaXRT
b3VwUmVxdWVzdERhdGEpKQorI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNUX0RBVEFfQ0xBU1Mo
a2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgV0VCS0lUX1RZUEVf
U09VUF9SRVFVRVNUX0RBVEEsIFdlYktpdFNvdXBSZXF1ZXN0RGF0YUNsYXNzKSkKKyNkZWZpbmUg
V0VCS0lUX0lTX1NPVVBfUkVRVUVTVF9EQVRBKG9iamVjdCkgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX1RZUEUgKChvYmplY3QpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfREFUQSkpCisj
ZGVmaW5lIFdFQktJVF9JU19TT1VQX1JFUVVFU1RfREFUQV9DTEFTUyhrbGFzcykgKEdfVFlQRV9D
SEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfREFUQSkp
CisjZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfREFUQV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQ
RV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfREFU
QSwgV2ViS2l0U291cFJlcXVlc3REYXRhQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
U291cFJlcXVlc3REYXRhUHJpdmF0ZSBXZWJLaXRTb3VwUmVxdWVzdERhdGFQcml2YXRlOworCit0
eXBlZGVmIHN0cnVjdCB7CisJV2ViS2l0U291cFJlcXVlc3QgcGFyZW50OworCisJV2ViS2l0U291
cFJlcXVlc3REYXRhUHJpdmF0ZSAqcHJpdjsKK30gV2ViS2l0U291cFJlcXVlc3REYXRhOworCit0
eXBlZGVmIHN0cnVjdCB7CisJV2ViS2l0U291cFJlcXVlc3RDbGFzcyBwYXJlbnQ7Cit9IFdlYktp
dFNvdXBSZXF1ZXN0RGF0YUNsYXNzOworCitHVHlwZSB3ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFf
Z2V0X3R5cGUgKHZvaWQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX1NPVVBf
UkVRVUVTVF9EQVRBX0ggKi8KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmMgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjJiYWI5MTYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZmlsZS5jCkBAIC0wLDAgKzEsMzIyIEBACisv
KgorICogc291cC1yZXF1ZXN0LWZpbGUuYzogZmlsZTogVVJJIHJlcXVlc3Qgb2JqZWN0CisgKgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAx
MCBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4K
KyNlbmRpZgorCisjaW5jbHVkZSAic291cC1yZXF1ZXN0LWZpbGUuaCIKKyNpbmNsdWRlICJzb3Vw
LWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uaCIKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3Rlci5oIgor
I2luY2x1ZGUgPGdsaWIvZ2kxOG4uaD4KKworR19ERUZJTkVfVFlQRSAoV2ViS2l0U291cFJlcXVl
c3RGaWxlLCB3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGUsIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVT
VCkKKworc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdEZpbGVQcml2YXRlIHsKKwlHRmlsZSAqZ2Zp
bGU7CisKKwljaGFyICptaW1lX3R5cGU7CisJZ29mZnNldCBzaXplOworfTsKKworR0ZpbGUgKgor
d2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2dldF9maWxlIChXZWJLaXRTb3VwUmVxdWVzdEZpbGUg
KmZpbGUpCit7CisJcmV0dXJuIGdfb2JqZWN0X3JlZiAoZmlsZS0+cHJpdi0+Z2ZpbGUpOworfQor
CitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2luaXQgKFdlYktpdFNvdXBS
ZXF1ZXN0RmlsZSAqZmlsZSkKK3sKKwlmaWxlLT5wcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9Q
UklWQVRFIChmaWxlLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfRklMRSwgV2ViS2l0U291cFJl
cXVlc3RGaWxlUHJpdmF0ZSk7CisKKwlmaWxlLT5wcml2LT5zaXplID0gLTE7Cit9CisKK3N0YXRp
YyB2b2lkCit3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfZmluYWxpemUgKEdPYmplY3QgKm9iamVj
dCkKK3sKKwlXZWJLaXRTb3VwUmVxdWVzdEZpbGUgKmZpbGUgPSBXRUJLSVRfU09VUF9SRVFVRVNU
X0ZJTEUgKG9iamVjdCk7CisKKwlpZiAoZmlsZS0+cHJpdi0+Z2ZpbGUpCisJCWdfb2JqZWN0X3Vu
cmVmIChmaWxlLT5wcml2LT5nZmlsZSk7CisJZ19mcmVlIChmaWxlLT5wcml2LT5taW1lX3R5cGUp
OworCisJR19PQkpFQ1RfQ0xBU1MgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9wYXJlbnRfY2xh
c3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKK30KKworc3RhdGljIGdib29sZWFuCit3ZWJraXRfc291
cF9yZXF1ZXN0X2ZpbGVfY2hlY2tfdXJpIChXZWJLaXRTb3VwUmVxdWVzdCAgKnJlcXVlc3QsCisJ
CQkgICAgIFNvdXBVUkkgICAgICAqdXJpLAorCQkJICAgICBHRXJyb3IgICAgICAqKmVycm9yKQor
eworCS8qICJmaWxlOi9mb28iIGlzIG5vdCB2YWxpZCAqLworCWlmICghdXJpLT5ob3N0KQorCQly
ZXR1cm4gRkFMU0U7CisKKwkvKiBidXQgaXQgbXVzdCBiZSAiZmlsZTovLy8uLi4iIG9yICJmaWxl
Oi8vbG9jYWxob3N0Ly4uLiIgKi8KKwlpZiAodXJpLT5zY2hlbWUgPT0gU09VUF9VUklfU0NIRU1F
X0ZJTEUgJiYKKwkgICAgKnVyaS0+aG9zdCAmJgorCSAgICBnX2FzY2lpX3N0cmNhc2VjbXAgKHVy
aS0+aG9zdCwgImxvY2FsaG9zdCIpICE9IDApCisJCXJldHVybiBGQUxTRTsKKworCXJldHVybiBU
UlVFOworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2Z0cF9tYWlu
X2xvb3BfcXVpdCAoR09iamVjdCAgICAgICpvYmplY3QsCisJCQkJICAgICAgR0FzeW5jUmVzdWx0
ICpyZXN1bHQsCisJCQkJICAgICAgZ3BvaW50ZXIgbG9vcCkKK3sKKwlnX21haW5fbG9vcF9xdWl0
IChsb29wKTsKK30KKworLyogVGhpcyBpcyBhIHNvbWV3aGF0IGhhY2t5IHdheSB0byBnZXQgRlRQ
IHRvIGFsbW9zdCB3b3JrLiBUaGUgcHJvcGVyIHdheSB0bworICogZ2V0IEZUUCB0byBfcmVhbGx5
XyB3b3JrIGludm9sdmVzIGhhY2tpbmcgR0lPIHRvIGhhdmUgQVBJcyB0byBoYW5kbGUKKyAqIGNh
bm9uY2lhbCBVUkxzLgorICovCitzdGF0aWMgR0ZpbGUgKgord2Via2l0X3NvdXBfcmVxdWVzdF9m
aWxlX2Vuc3VyZV9maWxlX2Z0cCAoU291cFVSSSAgICAgICAqdXJpLAorCQkJCSAgIEdDYW5jZWxs
YWJsZSAgKmNhbmNlbGxhYmxlLAorCQkJCSAgIEdFcnJvciAgICAgICAqKmVycm9yKQoreworCVNv
dXBVUkkgKmhvc3Q7CisJY2hhciAqczsKKwlHRmlsZSAqZmlsZSwgKnJlc3VsdDsKKwlHTW91bnQg
Km1vdW50OworCisJaG9zdCA9IHNvdXBfdXJpX2NvcHlfaG9zdCAodXJpKTsKKwlzID0gc291cF91
cmlfdG9fc3RyaW5nIChob3N0LCBGQUxTRSk7CisJZmlsZSA9IGdfZmlsZV9uZXdfZm9yX3VyaSAo
cyk7CisJc291cF91cmlfZnJlZSAoaG9zdCk7CisJZ19mcmVlIChzKTsKKworCW1vdW50ID0gZ19m
aWxlX2ZpbmRfZW5jbG9zaW5nX21vdW50IChmaWxlLCBjYW5jZWxsYWJsZSwgZXJyb3IpOworCWlm
IChtb3VudCA9PSBOVUxMICYmIGdfZmlsZV9zdXBwb3J0c190aHJlYWRfY29udGV4dHMgKGZpbGUp
KSB7CisJCUdNYWluQ29udGV4dCAqY29udGV4dCA9IGdfbWFpbl9jb250ZXh0X25ldyAoKTsKKwkJ
R01haW5Mb29wICpsb29wID0gZ19tYWluX2xvb3BfbmV3IChjb250ZXh0LCBGQUxTRSk7CisKKwkJ
Z19jbGVhcl9lcnJvciAoZXJyb3IpOworCQlnX21haW5fY29udGV4dF9wdXNoX3RocmVhZF9kZWZh
dWx0IChjb250ZXh0KTsKKwkJZ19maWxlX21vdW50X2VuY2xvc2luZ192b2x1bWUgKGZpbGUsCisJ
CQkJCSAgICAgICBHX01PVU5UX01PVU5UX05PTkUsCisJCQkJCSAgICAgICBOVUxMLCAvKiBGSVhN
RSEgKi8KKwkJCQkJICAgICAgIGNhbmNlbGxhYmxlLAorCQkJCQkgICAgICAgd2Via2l0X3NvdXBf
cmVxdWVzdF9maWxlX2Z0cF9tYWluX2xvb3BfcXVpdCwKKwkJCQkJICAgICAgIGxvb3ApOworCQln
X21haW5fbG9vcF9ydW4gKGxvb3ApOworCQlnX21haW5fY29udGV4dF9wb3BfdGhyZWFkX2RlZmF1
bHQgKGNvbnRleHQpOworCQlnX21haW5fbG9vcF91bnJlZiAobG9vcCk7CisJCWdfbWFpbl9jb250
ZXh0X3VucmVmIChjb250ZXh0KTsKKwkJbW91bnQgPSBnX2ZpbGVfZmluZF9lbmNsb3NpbmdfbW91
bnQgKGZpbGUsIGNhbmNlbGxhYmxlLCBlcnJvcik7CisJfQorCWlmIChtb3VudCA9PSBOVUxMKQor
CQlyZXR1cm4gTlVMTDsKKwlnX29iamVjdF91bnJlZiAoZmlsZSk7CisKKwlmaWxlID0gZ19tb3Vu
dF9nZXRfZGVmYXVsdF9sb2NhdGlvbiAobW91bnQpOworCWdfb2JqZWN0X3VucmVmIChtb3VudCk7
CisKKwlzID0gZ19zdHJkdXAgKHVyaS0+cGF0aCk7CisJaWYgKHN0cmNociAocywgJzsnKSkKKwkJ
KnN0cmNociAocywgJzsnKSA9IDA7CisKKwlyZXN1bHQgPSBnX2ZpbGVfcmVzb2x2ZV9yZWxhdGl2
ZV9wYXRoIChmaWxlLCBzKTsKKwlnX2ZyZWUgKHMpOworCWdfb2JqZWN0X3VucmVmIChmaWxlKTsK
KworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgord2Via2l0X3NvdXBfcmVx
dWVzdF9maWxlX2Vuc3VyZV9maWxlIChXZWJLaXRTb3VwUmVxdWVzdEZpbGUgICpmaWxlLAorCQkJ
ICAgICAgIEdDYW5jZWxsYWJsZSAgICAgKmNhbmNlbGxhYmxlLAorCQkJICAgICAgIEdFcnJvciAg
ICAgICAgICAqKmVycm9yKQoreworCVNvdXBVUkkgKnVyaTsKKworCWlmIChmaWxlLT5wcml2LT5n
ZmlsZSkKKwkJcmV0dXJuIFRSVUU7CisKKwl1cmkgPSB3ZWJraXRfc291cF9yZXF1ZXN0X2dldF91
cmkgKFdFQktJVF9TT1VQX1JFUVVFU1QgKGZpbGUpKTsKKwlpZiAodXJpLT5zY2hlbWUgPT0gU09V
UF9VUklfU0NIRU1FX0ZJTEUpIHsKKwkJZ2NoYXIgKmRlY29kZWRfdXJpID0gc291cF91cmlfZGVj
b2RlIChzb3VwX3VyaV9nZXRfcGF0aCAodXJpKSk7CisKKwkJaWYgKGRlY29kZWRfdXJpKSB7CisJ
CQkvKiBEbyBub3QgdXNlIG5ld19mb3JfdXJpKCkgYXMgdGhlIGRlY29kZWQgVVJJCisJCQkgKiAg
Y291bGQgbm90IGJlIGEgdmFsaWQgVVJJCisJCQkgKi8KKwkJCWZpbGUtPnByaXYtPmdmaWxlID0g
Z19maWxlX25ld19mb3JfcGF0aCAoZGVjb2RlZF91cmkpOworCQkJZ19mcmVlIChkZWNvZGVkX3Vy
aSk7CisJCX0KKworCQlyZXR1cm4gVFJVRTsKKwl9IGVsc2UgaWYgKHVyaS0+c2NoZW1lID09IFNP
VVBfVVJJX1NDSEVNRV9GVFApIHsKKwkJZmlsZS0+cHJpdi0+Z2ZpbGUgPSB3ZWJraXRfc291cF9y
ZXF1ZXN0X2ZpbGVfZW5zdXJlX2ZpbGVfZnRwICh1cmksCisJCQkJCQkJCSAgICAgICBjYW5jZWxs
YWJsZSwKKwkJCQkJCQkJICAgICAgIGVycm9yKTsKKwkJcmV0dXJuIGZpbGUtPnByaXYtPmdmaWxl
ICE9IE5VTEw7CisJfQorCisJZ19zZXRfZXJyb3IgKGVycm9yLCBXRUJLSVRfU09VUF9FUlJPUiwg
V0VCS0lUX1NPVVBfRVJST1JfVU5TVVBQT1JURURfVVJJX1NDSEVNRSwKKwkJICAgICBfICgiVW5z
dXBwb3J0ZWQgVVJJIHNjaGVtZSAnJXMnIiksIHVyaS0+c2NoZW1lKTsKKwlyZXR1cm4gRkFMU0U7
Cit9CisKK3N0YXRpYyBHSW5wdXRTdHJlYW0gKgord2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX3Nl
bmQgKFdlYktpdFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAorCQkJR0NhbmNlbGxhYmxl
ICAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKQor
eworCVdlYktpdFNvdXBSZXF1ZXN0RmlsZSAqZmlsZSA9IFdFQktJVF9TT1VQX1JFUVVFU1RfRklM
RSAocmVxdWVzdCk7CisJR0lucHV0U3RyZWFtICpzdHJlYW07CisJR0Vycm9yICpteV9lcnJvciA9
IE5VTEw7CisKKwlpZiAoIXdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9lbnN1cmVfZmlsZSAoZmls
ZSwgY2FuY2VsbGFibGUsIGVycm9yKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzdHJlYW0gPSBHX0lO
UFVUX1NUUkVBTSAoZ19maWxlX3JlYWQgKGZpbGUtPnByaXYtPmdmaWxlLAorCQkJCQkgICAgICBj
YW5jZWxsYWJsZSwgJm15X2Vycm9yKSk7CisJaWYgKHN0cmVhbSA9PSBOVUxMKSB7CisJCWlmIChn
X2Vycm9yX21hdGNoZXMgKG15X2Vycm9yLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX0lTX0RJUkVD
VE9SWSkpIHsKKwkJCUdGaWxlRW51bWVyYXRvciAqZW51bWVyYXRvcjsKKwkJCWdfY2xlYXJfZXJy
b3IgKCZteV9lcnJvcik7CisJCQllbnVtZXJhdG9yID0gZ19maWxlX2VudW1lcmF0ZV9jaGlsZHJl
biAoZmlsZS0+cHJpdi0+Z2ZpbGUsCisJCQkJCQkJCSIqIiwKKwkJCQkJCQkJR19GSUxFX1FVRVJZ
X0lORk9fTk9ORSwKKwkJCQkJCQkJY2FuY2VsbGFibGUsCisJCQkJCQkJCWVycm9yKTsKKwkJCWlm
IChlbnVtZXJhdG9yKSB7CisJCQkJc3RyZWFtID0gd2Via2l0X3NvdXBfZGlyZWN0b3J5X2lucHV0
X3N0cmVhbV9uZXcgKGVudW1lcmF0b3IsCisJCQkJCQkJCQkJIHdlYmtpdF9zb3VwX3JlcXVlc3Rf
Z2V0X3VyaSAocmVxdWVzdCkpOworCQkJCWdfb2JqZWN0X3VucmVmIChlbnVtZXJhdG9yKTsKKwkJ
CQlmaWxlLT5wcml2LT5taW1lX3R5cGUgPSBnX3N0cmR1cCAoInRleHQvaHRtbCIpOworCQkJfQor
CQl9IGVsc2UgeworCQkJZ19wcm9wYWdhdGVfZXJyb3IgKGVycm9yLCBteV9lcnJvcik7CisJCX0K
Kwl9IGVsc2UgeworCQlHRmlsZUluZm8gKmluZm8gPSBnX2ZpbGVfcXVlcnlfaW5mbyAoZmlsZS0+
cHJpdi0+Z2ZpbGUsCisJCQkJCQkgICAgIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfQ09OVEVO
VF9UWVBFICIsIgorCQkJCQkJICAgICBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX1NJWkUsCisJ
CQkJCQkgICAgIDAsIGNhbmNlbGxhYmxlLCBOVUxMKTsKKwkJaWYgKGluZm8pIHsKKwkJCWNvbnN0
IGNoYXIgKmNvbnRlbnRfdHlwZTsKKwkJCWZpbGUtPnByaXYtPnNpemUgPSBnX2ZpbGVfaW5mb19n
ZXRfc2l6ZSAoaW5mbyk7CisJCQljb250ZW50X3R5cGUgPSBnX2ZpbGVfaW5mb19nZXRfY29udGVu
dF90eXBlIChpbmZvKTsKKworCQkJaWYgKGNvbnRlbnRfdHlwZSkKKwkJCQlmaWxlLT5wcml2LT5t
aW1lX3R5cGUgPSBnX2NvbnRlbnRfdHlwZV9nZXRfbWltZV90eXBlIChjb250ZW50X3R5cGUpOwor
CQkJZ19vYmplY3RfdW5yZWYgKGluZm8pOworCQl9CisJfQorCisJcmV0dXJuIHN0cmVhbTsKK30K
Kworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9zZW5kX2FzeW5jX3RocmVh
ZCAoR1NpbXBsZUFzeW5jUmVzdWx0ICpyZXMsCisJCQkJICAgICBHT2JqZWN0ICAgICAgICAgICAg
Km9iamVjdCwKKwkJCQkgICAgIEdDYW5jZWxsYWJsZSAgICAgICAqY2FuY2VsbGFibGUpCit7CisJ
R0lucHV0U3RyZWFtICpzdHJlYW07CisJV2ViS2l0U291cFJlcXVlc3QgKnJlcXVlc3Q7CisJR0Vy
cm9yICplcnJvciA9IE5VTEw7CisKKwlyZXF1ZXN0ID0gV0VCS0lUX1NPVVBfUkVRVUVTVCAob2Jq
ZWN0KTsKKworCXN0cmVhbSA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9zZW5kIChyZXF1ZXN0
LCBjYW5jZWxsYWJsZSwgJmVycm9yKTsKKworCWlmIChzdHJlYW0gPT0gTlVMTCkgeworCQlnX3Np
bXBsZV9hc3luY19yZXN1bHRfc2V0X2Zyb21fZXJyb3IgKHJlcywgZXJyb3IpOworCQlnX2Vycm9y
X2ZyZWUgKGVycm9yKTsKKwl9IGVsc2UgeworCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X29w
X3Jlc19ncG9pbnRlciAocmVzLCBzdHJlYW0sIGdfb2JqZWN0X3VucmVmKTsKKwl9Cit9CisKK3N0
YXRpYyB2b2lkCit3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfc2VuZF9hc3luYyAoV2ViS2l0U291
cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCisJCQkgICAgICBHQ2FuY2VsbGFibGUgICAgICAg
ICAqY2FuY2VsbGFibGUsCisJCQkgICAgICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAor
CQkJICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCUdTaW1wbGVBc3luY1Jlc3VsdCAqcmVz
OworCisJcmVzID0gZ19zaW1wbGVfYXN5bmNfcmVzdWx0X25ldyAoR19PQkpFQ1QgKHJlcXVlc3Qp
LCBjYWxsYmFjaywgdXNlcl9kYXRhLCB3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfc2VuZF9hc3lu
Yyk7CisKKwlnX3NpbXBsZV9hc3luY19yZXN1bHRfcnVuX2luX3RocmVhZCAocmVzLCB3ZWJraXRf
c291cF9yZXF1ZXN0X2ZpbGVfc2VuZF9hc3luY190aHJlYWQsIEdfUFJJT1JJVFlfREVGQVVMVCwg
Y2FuY2VsbGFibGUpOworCWdfb2JqZWN0X3VucmVmIChyZXMpOworfQorCitzdGF0aWMgR0lucHV0
U3RyZWFtICoKK3dlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9zZW5kX2ZpbmlzaCAoV2ViS2l0U291
cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCisJCQkgICAgICAgR0FzeW5jUmVzdWx0ICAgICAg
ICAgKnJlc3VsdCwKKwkJCSAgICAgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpCit7CisJ
R1NpbXBsZUFzeW5jUmVzdWx0ICpzaW1wbGUgPSBHX1NJTVBMRV9BU1lOQ19SRVNVTFQgKHJlc3Vs
dCk7CisKKwlnX3dhcm5faWZfZmFpbCAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9zb3VyY2Vf
dGFnIChzaW1wbGUpID09IHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9zZW5kX2FzeW5jKTsKKwor
CWlmIChnX3NpbXBsZV9hc3luY19yZXN1bHRfcHJvcGFnYXRlX2Vycm9yIChzaW1wbGUsIGVycm9y
KSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gZ19vYmplY3RfcmVmIChnX3NpbXBsZV9hc3lu
Y19yZXN1bHRfZ2V0X29wX3Jlc19ncG9pbnRlciAoc2ltcGxlKSk7Cit9CisKK3N0YXRpYyBnb2Zm
c2V0Cit3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfZ2V0X2NvbnRlbnRfbGVuZ3RoIChXZWJLaXRT
b3VwUmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlXZWJLaXRTb3VwUmVxdWVzdEZpbGUgKmZpbGUgPSBX
RUJLSVRfU09VUF9SRVFVRVNUX0ZJTEUgKHJlcXVlc3QpOworCisJcmV0dXJuIGZpbGUtPnByaXYt
PnNpemU7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK3dlYmtpdF9zb3VwX3JlcXVlc3RfZmls
ZV9nZXRfY29udGVudF90eXBlIChXZWJLaXRTb3VwUmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlXZWJL
aXRTb3VwUmVxdWVzdEZpbGUgKmZpbGUgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0ZJTEUgKHJlcXVl
c3QpOworCisJaWYgKCFmaWxlLT5wcml2LT5taW1lX3R5cGUpCisJCXJldHVybiAiYXBwbGljYXRp
b24vb2N0ZXQtc3RyZWFtIjsKKworCXJldHVybiBmaWxlLT5wcml2LT5taW1lX3R5cGU7Cit9CisK
K3N0YXRpYyB2b2lkCit3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfY2xhc3NfaW5pdCAoV2ViS2l0
U291cFJlcXVlc3RGaWxlQ2xhc3MgKnJlcXVlc3RfZmlsZV9jbGFzcykKK3sKKwlHT2JqZWN0Q2xh
c3MgKm9iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChyZXF1ZXN0X2ZpbGVfY2xhc3MpOwor
CVdlYktpdFNvdXBSZXF1ZXN0Q2xhc3MgKnJlcXVlc3RfY2xhc3MgPQorCQlXRUJLSVRfU09VUF9S
RVFVRVNUX0NMQVNTIChyZXF1ZXN0X2ZpbGVfY2xhc3MpOworCisJZ190eXBlX2NsYXNzX2FkZF9w
cml2YXRlIChyZXF1ZXN0X2ZpbGVfY2xhc3MsIHNpemVvZiAoV2ViS2l0U291cFJlcXVlc3RGaWxl
UHJpdmF0ZSkpOworCisJb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9zb3VwX3JlcXVl
c3RfZmlsZV9maW5hbGl6ZTsKKworCXJlcXVlc3RfY2xhc3MtPmNoZWNrX3VyaSA9IHdlYmtpdF9z
b3VwX3JlcXVlc3RfZmlsZV9jaGVja191cmk7CisJcmVxdWVzdF9jbGFzcy0+c2VuZCA9IHdlYmtp
dF9zb3VwX3JlcXVlc3RfZmlsZV9zZW5kOworCXJlcXVlc3RfY2xhc3MtPnNlbmRfYXN5bmMgPSB3
ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfc2VuZF9hc3luYzsKKwlyZXF1ZXN0X2NsYXNzLT5zZW5k
X2ZpbmlzaCA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9zZW5kX2ZpbmlzaDsKKwlyZXF1ZXN0
X2NsYXNzLT5nZXRfY29udGVudF9sZW5ndGggPSB3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfZ2V0
X2NvbnRlbnRfbGVuZ3RoOworCXJlcXVlc3RfY2xhc3MtPmdldF9jb250ZW50X3R5cGUgPSB3ZWJr
aXRfc291cF9yZXF1ZXN0X2ZpbGVfZ2V0X2NvbnRlbnRfdHlwZTsKK30KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmggYi9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZmlsZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0YmZmOTcKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZmls
ZS5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwg
SW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdFQktJVF9T
T1VQX1JFUVVFU1RfRklMRV9ICisjZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfRklMRV9IIDEK
KworI2luY2x1ZGUgInNvdXAtcmVxdWVzdC5oIgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUg
V0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0ZJTEUgICAgICAgICAgICAod2Via2l0X3NvdXBfcmVx
dWVzdF9maWxlX2dldF90eXBlICgpKQorI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNUX0ZJTEUo
b2JqZWN0KSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iamVjdCksIFdF
QktJVF9UWVBFX1NPVVBfUkVRVUVTVF9GSUxFLCBXZWJLaXRTb3VwUmVxdWVzdEZpbGUpKQorI2Rl
ZmluZSBXRUJLSVRfU09VUF9SRVFVRVNUX0ZJTEVfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0ZJTEUsIFdl
YktpdFNvdXBSZXF1ZXN0RmlsZUNsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1NPVVBfUkVRVUVT
VF9GSUxFKG9iamVjdCkgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmplY3Qp
LCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfRklMRSkpCisjZGVmaW5lIFdFQktJVF9JU19TT1VQ
X1JFUVVFU1RfRklMRV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xh
c3MpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfRklMRSkpCisjZGVmaW5lIFdFQktJVF9TT1VQ
X1JFUVVFU1RfRklMRV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1Mg
KChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfRklMRSwgV2ViS2l0U291cFJlcXVlc3RG
aWxlQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0U291cFJlcXVlc3RGaWxlUHJpdmF0
ZSBXZWJLaXRTb3VwUmVxdWVzdEZpbGVQcml2YXRlOworCit0eXBlZGVmIHN0cnVjdCB7CisJV2Vi
S2l0U291cFJlcXVlc3QgcGFyZW50OworCisJV2ViS2l0U291cFJlcXVlc3RGaWxlUHJpdmF0ZSAq
cHJpdjsKK30gV2ViS2l0U291cFJlcXVlc3RGaWxlOworCit0eXBlZGVmIHN0cnVjdCB7CisJV2Vi
S2l0U291cFJlcXVlc3RDbGFzcyBwYXJlbnQ7Cit9IFdlYktpdFNvdXBSZXF1ZXN0RmlsZUNsYXNz
OworCitHVHlwZSB3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfZ2V0X3R5cGUgKHZvaWQpOworCitH
RmlsZSAgKndlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9nZXRfZmlsZSAoV2ViS2l0U291cFJlcXVl
c3RGaWxlICpmaWxlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9TT1VQX1JF
UVVFU1RfRklMRV9IICovCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9jYWNoZS9zb3VwLXJlcXVlc3QtaHR0cC5jIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi40MmQyNDYxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuYwpAQCAtMCwwICsxLDMzOSBAQAorLyoK
KyAqIHNvdXAtcmVxdWVzdC1odHRwLmM6IGh0dHA6IFVSSSByZXF1ZXN0IG9iamVjdAorICoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
SWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+Cisj
ZW5kaWYKKworI2luY2x1ZGUgPGdsaWIvZ2kxOG4uaD4KKworI2luY2x1ZGUgInNvdXAtY2FjaGUu
aCIKKyNpbmNsdWRlICJzb3VwLWNhY2hlLXByaXZhdGUuaCIKKyNpbmNsdWRlICJzb3VwLWh0dHAt
aW5wdXQtc3RyZWFtLmgiCisjaW5jbHVkZSAic291cC1yZXF1ZXN0LWh0dHAuaCIKKworR19ERUZJ
TkVfVFlQRSAoV2ViS2l0U291cFJlcXVlc3RIVFRQLCB3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHAs
IFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVCkKKworc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdEhU
VFBQcml2YXRlIHsKKwlTb3VwTWVzc2FnZSAqbXNnOworfTsKKworLyoqCisgKiB3ZWJraXRfc291
cF9yZXF1ZXN0X2h0dHBfZ2V0X21lc3NhZ2U6CisgKiBAaHR0cDogYSAjV2ViS2l0U291cFJlcXVl
c3RIVFRQIG9iamVjdAorICoKKyAqIEdldHMgYSBuZXcgcmVmZXJlbmNlIHRvIHRoZSAjU291cE1l
c3NhZ2UgYXNzb2NpYXRlZCB0byB0aGlzIFNvdXBSZXF1ZXN0CisgKgorICogUmV0dXJuczogYSBu
ZXcgcmVmZXJlbmNlIHRvIHRoZSAjU291cE1lc3NhZ2UKKyAqKi8KK1NvdXBNZXNzYWdlICoKK3dl
YmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9nZXRfbWVzc2FnZSAoV2ViS2l0U291cFJlcXVlc3RIVFRQ
ICpodHRwKQoreworCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChXRUJLSVRfSVNfU09VUF9SRVFVRVNU
X0hUVFAgKGh0dHApLCBOVUxMKTsKKworCXJldHVybiBnX29iamVjdF9yZWYgKGh0dHAtPnByaXYt
Pm1zZyk7Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfaW5pdCAo
V2ViS2l0U291cFJlcXVlc3RIVFRQICpodHRwKQoreworCWh0dHAtPnByaXYgPSBHX1RZUEVfSU5T
VEFOQ0VfR0VUX1BSSVZBVEUgKGh0dHAsIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9IVFRQLCBX
ZWJLaXRTb3VwUmVxdWVzdEhUVFBQcml2YXRlKTsKK30KKworc3RhdGljIGdib29sZWFuCit3ZWJr
aXRfc291cF9yZXF1ZXN0X2h0dHBfY2hlY2tfdXJpIChXZWJLaXRTb3VwUmVxdWVzdCAgKnJlcXVl
c3QsCisJCQkgICAgIFNvdXBVUkkgICAgICAqdXJpLAorCQkJICAgICBHRXJyb3IgICAgICAqKmVy
cm9yKQoreworCVdlYktpdFNvdXBSZXF1ZXN0SFRUUCAqaHR0cCA9IFdFQktJVF9TT1VQX1JFUVVF
U1RfSFRUUCAocmVxdWVzdCk7CisKKwlpZiAoIVNPVVBfVVJJX1ZBTElEX0ZPUl9IVFRQICh1cmkp
KQorCQlyZXR1cm4gRkFMU0U7CisKKwlodHRwLT5wcml2LT5tc2cgPSBzb3VwX21lc3NhZ2VfbmV3
X2Zyb21fdXJpIChTT1VQX01FVEhPRF9HRVQsIHVyaSk7CisJcmV0dXJuIFRSVUU7Cit9CisKK3N0
YXRpYyB2b2lkCit3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfZmluYWxpemUgKEdPYmplY3QgKm9i
amVjdCkKK3sKKwlXZWJLaXRTb3VwUmVxdWVzdEhUVFAgKmh0dHAgPSBXRUJLSVRfU09VUF9SRVFV
RVNUX0hUVFAgKG9iamVjdCk7CisKKwlpZiAoaHR0cC0+cHJpdi0+bXNnKQorCQlnX29iamVjdF91
bnJlZiAoaHR0cC0+cHJpdi0+bXNnKTsKKworCUdfT0JKRUNUX0NMQVNTICh3ZWJraXRfc291cF9y
ZXF1ZXN0X2h0dHBfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Cit9CisKK3N0YXRp
YyBHSW5wdXRTdHJlYW0gKgord2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX3NlbmQgKFdlYktpdFNv
dXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAorCQkJR0NhbmNlbGxhYmxlICAgICAgICAgKmNh
bmNlbGxhYmxlLAorCQkJR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKQoreworCVdlYktpdFNv
dXBIVFRQSW5wdXRTdHJlYW0gKmh0dHBzdHJlYW07CisJV2ViS2l0U291cFJlcXVlc3RIVFRQICpo
dHRwID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9IVFRQIChyZXF1ZXN0KTsKKworCWh0dHBzdHJlYW0g
PSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9uZXcgKHdlYmtpdF9zb3VwX3JlcXVlc3Rf
Z2V0X3Nlc3Npb24gKHJlcXVlc3QpLCBodHRwLT5wcml2LT5tc2cpOworCWlmICghd2Via2l0X3Nv
dXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZCAoaHR0cHN0cmVhbSwgY2FuY2VsbGFibGUsIGVycm9y
KSkgeworCQlnX29iamVjdF91bnJlZiAoaHR0cHN0cmVhbSk7CisJCXJldHVybiBOVUxMOworCX0K
KwlyZXR1cm4gKEdJbnB1dFN0cmVhbSAqKWh0dHBzdHJlYW07Cit9CisKKworc3RhdGljIHZvaWQK
K3NlbnRfYXN5bmMgKEdPYmplY3QgKnNvdXJjZSwgR0FzeW5jUmVzdWx0ICpyZXN1bHQsIGdwb2lu
dGVyIHVzZXJfZGF0YSkKK3sKKwlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtICpodHRwc3RyZWFt
ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU0gKHNvdXJjZSk7CisJR1NpbXBsZUFzeW5j
UmVzdWx0ICpzaW1wbGUgPSB1c2VyX2RhdGE7CisJR0Vycm9yICplcnJvciA9IE5VTEw7CisKKwlp
ZiAod2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9maW5pc2ggKGh0dHBzdHJlYW0s
IHJlc3VsdCwgJmVycm9yKSkgeworCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19n
cG9pbnRlciAoc2ltcGxlLCBodHRwc3RyZWFtLCBnX29iamVjdF91bnJlZik7CisJfSBlbHNlIHsK
KwkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9mcm9tX2Vycm9yIChzaW1wbGUsIGVycm9yKTsK
KwkJZ19lcnJvcl9mcmVlIChlcnJvcik7CisJCWdfb2JqZWN0X3VucmVmIChodHRwc3RyZWFtKTsK
Kwl9CisJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlIChzaW1wbGUpOworCWdfb2JqZWN0
X3VucmVmIChzaW1wbGUpOworfQorCisKK3R5cGVkZWYgc3RydWN0IHsKKwlXZWJLaXRTb3VwUmVx
dWVzdEhUVFAgKnJlcTsKKwlTb3VwTWVzc2FnZSAqb3JpZ2luYWw7CisJR0NhbmNlbGxhYmxlICpj
YW5jZWxsYWJsZTsKKwlHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrOworCWdwb2ludGVyIHVz
ZXJfZGF0YTsKK30gQ29uZGl0aW9uYWxIZWxwZXI7CisKKworc3RhdGljIHZvaWQKK2NvbmRpdGlv
bmFsX2dldF9yZWFkeV9jYiAoU291cFNlc3Npb24gKnNlc3Npb24sIFNvdXBNZXNzYWdlICptc2cs
IGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlDb25kaXRpb25hbEhlbHBlciAqaGVscGVyID0gKENv
bmRpdGlvbmFsSGVscGVyICopdXNlcl9kYXRhOworCUdTaW1wbGVBc3luY1Jlc3VsdCAqc2ltcGxl
OworCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gKmh0dHBzdHJlYW07CisKKwlzaW1wbGUgPSBn
X3NpbXBsZV9hc3luY19yZXN1bHRfbmV3IChHX09CSkVDVCAoaGVscGVyLT5yZXEpLAorCQkJCQkg
ICAgaGVscGVyLT5jYWxsYmFjaywgaGVscGVyLT51c2VyX2RhdGEsCisJCQkJCSAgICBjb25kaXRp
b25hbF9nZXRfcmVhZHlfY2IpOworCisJaWYgKG1zZy0+c3RhdHVzX2NvZGUgPT0gU09VUF9TVEFU
VVNfTk9UX01PRElGSUVEKSB7CisJCVdlYktpdFNvdXBDYWNoZSAqY2FjaGUgPSAoV2ViS2l0U291
cENhY2hlICopc291cF9zZXNzaW9uX2dldF9mZWF0dXJlIChzZXNzaW9uLCBXRUJLSVRfVFlQRV9T
T1VQX0NBQ0hFKTsKKworCQlodHRwc3RyZWFtID0gKFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0g
Kil3ZWJraXRfc291cF9jYWNoZV9zZW5kX3Jlc3BvbnNlIChjYWNoZSwgbXNnKTsKKwkJaWYgKGh0
dHBzdHJlYW0pIHsKKwkJCWNvbnN0IGdjaGFyICpjb250ZW50X3R5cGU7CisKKwkJCWdfc2ltcGxl
X2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dwb2ludGVyIChzaW1wbGUsIGh0dHBzdHJlYW0sIGdf
b2JqZWN0X3VucmVmKTsKKworCQkJc291cF9tZXNzYWdlX2dvdF9oZWFkZXJzIChoZWxwZXItPm9y
aWdpbmFsKTsKKwkJCWNvbnRlbnRfdHlwZSA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9jb250
ZW50X3R5cGUgKG1zZy0+cmVzcG9uc2VfaGVhZGVycywgTlVMTCk7CisJCQlzb3VwX21lc3NhZ2Vf
Y29udGVudF9zbmlmZmVkIChoZWxwZXItPm9yaWdpbmFsLCBjb250ZW50X3R5cGUsIE5VTEwpOwor
CisJCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGUgKHNpbXBsZSk7CisKKwkJCXNvdXBf
bWVzc2FnZV9maW5pc2hlZCAoaGVscGVyLT5vcmlnaW5hbCk7CisKKwkJCWdfb2JqZWN0X3VucmVm
IChzaW1wbGUpOworCQl9IGVsc2UgeworCQkJLyogQXNrIGFnYWluIGZvciB0aGUgcmVzb3VyY2Us
IHNvbWVob3cgdGhlIGNhY2hlIGNhbm5vdCBsb2NhdGUgaXQgKi8KKwkJCWh0dHBzdHJlYW0gPSB3
ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9uZXcgKHNlc3Npb24sIGhlbHBlci0+b3JpZ2lu
YWwpOworCQkJd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luYyAoaHR0cHN0
cmVhbSwgR19QUklPUklUWV9ERUZBVUxULAorCQkJCQkJCQkgIGhlbHBlci0+Y2FuY2VsbGFibGUs
IHNlbnRfYXN5bmMsIHNpbXBsZSk7CisJCX0KKwl9IGVsc2UgeworCQkvKiBJdCBpcyBpbiB0aGUg
Y2FjaGUgYnV0IGl0IHdhcyBtb2RpZmllZCByZW1vdGVseSAqLworCQlodHRwc3RyZWFtID0gd2Vi
a2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fbmV3IChzZXNzaW9uLCBoZWxwZXItPm9yaWdpbmFs
KTsKKwkJd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luYyAoaHR0cHN0cmVh
bSwgR19QUklPUklUWV9ERUZBVUxULAorCQkJCQkJCSAgaGVscGVyLT5jYW5jZWxsYWJsZSwgc2Vu
dF9hc3luYywgc2ltcGxlKTsKKwl9CisKKwlnX29iamVjdF91bnJlZiAoaGVscGVyLT5yZXEpOwor
CWdfb2JqZWN0X3VucmVmIChoZWxwZXItPm9yaWdpbmFsKTsKKwlnX3NsaWNlX2ZyZWUgKENvbmRp
dGlvbmFsSGVscGVyLCBoZWxwZXIpOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisJV2ViS2l0U291
cFJlcXVlc3RIVFRQICpodHRwOworCUdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2s7CisJZ3Bv
aW50ZXIgdXNlcl9kYXRhOworfSBTZW5kQXN5bmNIZWxwZXI7CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF9zb3VwX3JlcXVlc3RfaHR0cF9zZW5kX2FzeW5jIChXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAg
ICAqcmVxdWVzdCwKKwkJCQkJICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJ
CQkJCSAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKKwkJCQkJICBncG9pbnRlciB1c2Vy
X2RhdGEpOworCitzdGF0aWMgZ2Jvb2xlYW4KK3NlbmRfYXN5bmNfY2IgKGdwb2ludGVyIGRhdGEp
Cit7CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpzaW1wbGU7CisJV2ViS2l0U291cEhUVFBJbnB1dFN0
cmVhbSAqaHR0cHN0cmVhbTsKKwlTb3VwU2Vzc2lvbiAqc2Vzc2lvbjsKKwlXZWJLaXRTb3VwQ2Fj
aGUgKmNhY2hlOworCVNlbmRBc3luY0hlbHBlciAqaGVscGVyID0gKFNlbmRBc3luY0hlbHBlciAq
KWRhdGE7CisKKwlzZXNzaW9uID0gd2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfc2Vzc2lvbiAoV0VC
S0lUX1NPVVBfUkVRVUVTVCAoaGVscGVyLT5odHRwKSk7CisJY2FjaGUgPSAoV2ViS2l0U291cENh
Y2hlICopc291cF9zZXNzaW9uX2dldF9mZWF0dXJlIChzZXNzaW9uLCBXRUJLSVRfVFlQRV9TT1VQ
X0NBQ0hFKTsKKworCWh0dHBzdHJlYW0gPSAoV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSAqKXdl
YmtpdF9zb3VwX2NhY2hlX3NlbmRfcmVzcG9uc2UgKGNhY2hlLCBTT1VQX01FU1NBR0UgKGhlbHBl
ci0+aHR0cC0+cHJpdi0+bXNnKSk7CisKKwlpZiAoaHR0cHN0cmVhbSkgeworCQljb25zdCBnY2hh
ciAqY29udGVudF90eXBlOworCisJCXNpbXBsZSA9IGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcg
KEdfT0JKRUNUIChoZWxwZXItPmh0dHApLAorCQkJCQkJICAgIGhlbHBlci0+Y2FsbGJhY2ssIGhl
bHBlci0+dXNlcl9kYXRhLAorCQkJCQkJICAgIHdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9zZW5k
X2FzeW5jKTsKKwkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ3BvaW50ZXIgKHNp
bXBsZSwgaHR0cHN0cmVhbSwgZ19vYmplY3RfdW5yZWYpOworCisJCS8qIFVwZGF0ZSBtZXNzYWdl
IHN0YXR1cyAqLworCQlzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyAoaGVscGVyLT5odHRwLT5wcml2
LT5tc2csIFNPVVBfU1RBVFVTX09LKTsKKworCQkvKiBJc3N1ZSBzaWduYWxzICAqLworCQlzb3Vw
X21lc3NhZ2VfZ290X2hlYWRlcnMgKGhlbHBlci0+aHR0cC0+cHJpdi0+bXNnKTsKKwkJY29udGVu
dF90eXBlID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2NvbnRlbnRfdHlwZSAoaGVscGVyLT5o
dHRwLT5wcml2LT5tc2ctPnJlc3BvbnNlX2hlYWRlcnMsIE5VTEwpOworCQlzb3VwX21lc3NhZ2Vf
Y29udGVudF9zbmlmZmVkIChoZWxwZXItPmh0dHAtPnByaXYtPm1zZywgY29udGVudF90eXBlLCBO
VUxMKTsKKworCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGUgKHNpbXBsZSk7CisKKwkJ
c291cF9tZXNzYWdlX2ZpbmlzaGVkIChoZWxwZXItPmh0dHAtPnByaXYtPm1zZyk7CisKKwkJZ19v
YmplY3RfdW5yZWYgKHNpbXBsZSk7CisJfQorCisJZ19zbGljZV9mcmVlIChTZW5kQXN5bmNIZWxw
ZXIsIGhlbHBlcik7CisKKwlyZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRf
c291cF9yZXF1ZXN0X2h0dHBfc2VuZF9hc3luYyAoV2ViS2l0U291cFJlcXVlc3QgICAgICAgICAg
KnJlcXVlc3QsCisJCQkgICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJ
CQkgICAgICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAorCQkJICAgICAgZ3BvaW50ZXIg
dXNlcl9kYXRhKQoreworCVdlYktpdFNvdXBSZXF1ZXN0SFRUUCAqaHR0cCA9IFdFQktJVF9TT1VQ
X1JFUVVFU1RfSFRUUCAocmVxdWVzdCk7CisJV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSAqaHR0
cHN0cmVhbTsKKwlHU2ltcGxlQXN5bmNSZXN1bHQgKnNpbXBsZTsKKwlTb3VwU2Vzc2lvbiAqc2Vz
c2lvbjsKKwlXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlOworCisJc2Vzc2lvbiA9IHdlYmtpdF9zb3Vw
X3JlcXVlc3RfZ2V0X3Nlc3Npb24gKHJlcXVlc3QpOworCWNhY2hlID0gKFdlYktpdFNvdXBDYWNo
ZSAqKXNvdXBfc2Vzc2lvbl9nZXRfZmVhdHVyZSAoc2Vzc2lvbiwgV0VCS0lUX1RZUEVfU09VUF9D
QUNIRSk7CisKKwlpZiAoY2FjaGUpIHsKKwkJV2ViS2l0U291cENhY2hlUmVzcG9uc2UgcmVzcG9u
c2U7CisKKwkJcmVzcG9uc2UgPSB3ZWJraXRfc291cF9jYWNoZV9oYXNfcmVzcG9uc2UgKGNhY2hl
LCBodHRwLT5wcml2LT5tc2cpOworCQlpZiAocmVzcG9uc2UgPT0gV0VCS0lUX1NPVVBfQ0FDSEVf
UkVTUE9OU0VfRlJFU0gpIHsKKwkJCS8qIERvIHJldHVybiB0aGUgc3RyZWFtIGFzeW5jaHJvbm91
c2x5IGFzIGluCisJCQkgICB0aGUgb3RoZXIgY2FzZXMuIEl0J3Mgbm90IGVub3VnaCB0byB1c2UK
KwkJCSAgIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZV9pbl9pZGxlIGFzCisJCQkgICB0
aGUgc2lnbmFscyBtdXN0IGJlIGFsc28gZW1pdHRlZAorCQkJICAgYXN5bmNocm9ub3VzbHkgKi8K
KwkJCVNlbmRBc3luY0hlbHBlciAqaGVscGVyID0gZ19zbGljZV9uZXcgKFNlbmRBc3luY0hlbHBl
cik7CisJCQloZWxwZXItPmh0dHAgPSBodHRwOworCQkJaGVscGVyLT5jYWxsYmFjayA9IGNhbGxi
YWNrOworCQkJaGVscGVyLT51c2VyX2RhdGEgPSB1c2VyX2RhdGE7CisJCQlnX3RpbWVvdXRfYWRk
ICgwLCBzZW5kX2FzeW5jX2NiLCBoZWxwZXIpOworCQkJcmV0dXJuOworCQl9IGVsc2UgaWYgKHJl
c3BvbnNlID09IFdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX05FRURTX1ZBTElEQVRJT04pIHsK
KwkJCVNvdXBNZXNzYWdlICpjb25kaXRpb25hbF9tc2c7CisJCQlDb25kaXRpb25hbEhlbHBlciAq
aGVscGVyOworCisJCQljb25kaXRpb25hbF9tc2cgPSB3ZWJraXRfc291cF9jYWNoZV9nZW5lcmF0
ZV9jb25kaXRpb25hbF9yZXF1ZXN0IChjYWNoZSwgaHR0cC0+cHJpdi0+bXNnKTsKKworCQkJaGVs
cGVyID0gZ19zbGljZV9uZXcwIChDb25kaXRpb25hbEhlbHBlcik7CisJCQloZWxwZXItPnJlcSA9
IGdfb2JqZWN0X3JlZiAoaHR0cCk7CisJCQloZWxwZXItPm9yaWdpbmFsID0gZ19vYmplY3RfcmVm
IChodHRwLT5wcml2LT5tc2cpOworCQkJaGVscGVyLT5jYW5jZWxsYWJsZSA9IGNhbmNlbGxhYmxl
OworCQkJaGVscGVyLT5jYWxsYmFjayA9IGNhbGxiYWNrOworCQkJaGVscGVyLT51c2VyX2RhdGEg
PSB1c2VyX2RhdGE7CisJCQlzb3VwX3Nlc3Npb25fcXVldWVfbWVzc2FnZSAoc2Vzc2lvbiwgY29u
ZGl0aW9uYWxfbXNnLAorCQkJCQkJICAgIGNvbmRpdGlvbmFsX2dldF9yZWFkeV9jYiwKKwkJCQkJ
CSAgICBoZWxwZXIpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJc2ltcGxlID0gZ19zaW1wbGVf
YXN5bmNfcmVzdWx0X25ldyAoR19PQkpFQ1QgKGh0dHApLAorCQkJCQkgICAgY2FsbGJhY2ssIHVz
ZXJfZGF0YSwKKwkJCQkJICAgIHdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9zZW5kX2FzeW5jKTsK
KwlodHRwc3RyZWFtID0gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fbmV3ICh3ZWJraXRf
c291cF9yZXF1ZXN0X2dldF9zZXNzaW9uIChyZXF1ZXN0KSwKKwkJCQkJCQlodHRwLT5wcml2LT5t
c2cpOworCXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmMgKGh0dHBzdHJl
YW0sIEdfUFJJT1JJVFlfREVGQVVMVCwKKwkJCQkJCSAgY2FuY2VsbGFibGUsIHNlbnRfYXN5bmMs
IHNpbXBsZSk7Cit9CisKK3N0YXRpYyBHSW5wdXRTdHJlYW0gKgord2Via2l0X3NvdXBfcmVxdWVz
dF9odHRwX3NlbmRfZmluaXNoIChXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwK
KwkJCSAgICAgICBHQXN5bmNSZXN1bHQgICAgICAgICAqcmVzdWx0LAorCQkJICAgICAgIEdFcnJv
ciAgICAgICAgICAgICAgKiplcnJvcikKK3sKKwlHU2ltcGxlQXN5bmNSZXN1bHQgKnNpbXBsZTsK
KworCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnX3NpbXBsZV9hc3luY19yZXN1bHRfaXNfdmFsaWQg
KHJlc3VsdCwgR19PQkpFQ1QgKHJlcXVlc3QpLCB3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfc2Vu
ZF9hc3luYykgfHwgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2lzX3ZhbGlkIChyZXN1bHQsIEdfT0JK
RUNUIChyZXF1ZXN0KSwgY29uZGl0aW9uYWxfZ2V0X3JlYWR5X2NiKSwgTlVMTCk7CisKKwlzaW1w
bGUgPSBHX1NJTVBMRV9BU1lOQ19SRVNVTFQgKHJlc3VsdCk7CisJaWYgKGdfc2ltcGxlX2FzeW5j
X3Jlc3VsdF9wcm9wYWdhdGVfZXJyb3IgKHNpbXBsZSwgZXJyb3IpKQorCQlyZXR1cm4gTlVMTDsK
KwlyZXR1cm4gZ19vYmplY3RfcmVmIChnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X29wX3Jlc19n
cG9pbnRlciAoc2ltcGxlKSk7Cit9CisKK3N0YXRpYyBnb2Zmc2V0Cit3ZWJraXRfc291cF9yZXF1
ZXN0X2h0dHBfZ2V0X2NvbnRlbnRfbGVuZ3RoIChXZWJLaXRTb3VwUmVxdWVzdCAqcmVxdWVzdCkK
K3sKKwlXZWJLaXRTb3VwUmVxdWVzdEhUVFAgKmh0dHAgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0hU
VFAgKHJlcXVlc3QpOworCisJcmV0dXJuIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9jb250ZW50
X2xlbmd0aCAoaHR0cC0+cHJpdi0+bXNnLT5yZXNwb25zZV9oZWFkZXJzKTsKK30KKworc3RhdGlj
IGNvbnN0IGNoYXIgKgord2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX2dldF9jb250ZW50X3R5cGUg
KFdlYktpdFNvdXBSZXF1ZXN0ICpyZXF1ZXN0KQoreworCVdlYktpdFNvdXBSZXF1ZXN0SFRUUCAq
aHR0cCA9IFdFQktJVF9TT1VQX1JFUVVFU1RfSFRUUCAocmVxdWVzdCk7CisKKwlyZXR1cm4gc291
cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2NvbnRlbnRfdHlwZSAoaHR0cC0+cHJpdi0+bXNnLT5yZXNw
b25zZV9oZWFkZXJzLCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX3JlcXVl
c3RfaHR0cF9jbGFzc19pbml0IChXZWJLaXRTb3VwUmVxdWVzdEhUVFBDbGFzcyAqcmVxdWVzdF9o
dHRwX2NsYXNzKQoreworCUdPYmplY3RDbGFzcyAqb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xB
U1MgKHJlcXVlc3RfaHR0cF9jbGFzcyk7CisJV2ViS2l0U291cFJlcXVlc3RDbGFzcyAqcmVxdWVz
dF9jbGFzcyA9CisJCVdFQktJVF9TT1VQX1JFUVVFU1RfQ0xBU1MgKHJlcXVlc3RfaHR0cF9jbGFz
cyk7CisKKwlnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUgKHJlcXVlc3RfaHR0cF9jbGFzcywgc2l6
ZW9mIChXZWJLaXRTb3VwUmVxdWVzdEhUVFBQcml2YXRlKSk7CisKKwlvYmplY3RfY2xhc3MtPmZp
bmFsaXplID0gd2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX2ZpbmFsaXplOworCisJcmVxdWVzdF9j
bGFzcy0+Y2hlY2tfdXJpID0gd2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX2NoZWNrX3VyaTsKKwly
ZXF1ZXN0X2NsYXNzLT5zZW5kID0gd2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX3NlbmQ7CisJcmVx
dWVzdF9jbGFzcy0+c2VuZF9hc3luYyA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9zZW5kX2Fz
eW5jOworCXJlcXVlc3RfY2xhc3MtPnNlbmRfZmluaXNoID0gd2Via2l0X3NvdXBfcmVxdWVzdF9o
dHRwX3NlbmRfZmluaXNoOworCXJlcXVlc3RfY2xhc3MtPmdldF9jb250ZW50X2xlbmd0aCA9IHdl
YmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9nZXRfY29udGVudF9sZW5ndGg7CisJcmVxdWVzdF9jbGFz
cy0+Z2V0X2NvbnRlbnRfdHlwZSA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9nZXRfY29udGVu
dF90eXBlOworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2Fj
aGUvc291cC1yZXF1ZXN0LWh0dHAuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2Nh
Y2hlL3NvdXAtcmVxdWVzdC1odHRwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNGJmMjI2NAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRwLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdh
bGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZm5kZWYgV0VCS0lUX1NPVVBfUkVRVUVTVF9IVFRQX0gKKyNkZWZpbmUgV0VC
S0lUX1NPVVBfUkVRVUVTVF9IVFRQX0ggMQorCisjaW5jbHVkZSAic291cC1yZXF1ZXN0LmgiCisK
K0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfSFRUUCAg
ICAgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfZ2V0X3R5cGUgKCkpCisjZGVmaW5l
IFdFQktJVF9TT1VQX1JFUVVFU1RfSFRUUChvYmplY3QpICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9DQVNUICgob2JqZWN0KSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0hUVFAsIFdl
YktpdFNvdXBSZXF1ZXN0SFRUUCkpCisjZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfSFRUUF9D
TEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBXRUJLSVRf
VFlQRV9TT1VQX1JFUVVFU1RfSFRUUCwgV2ViS2l0U291cFJlcXVlc3RIVFRQQ2xhc3MpKQorI2Rl
ZmluZSBXRUJLSVRfSVNfU09VUF9SRVFVRVNUX0hUVFAob2JqZWN0KSAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfVFlQRSAoKG9iamVjdCksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9IVFRQ
KSkKKyNkZWZpbmUgV0VCS0lUX0lTX1NPVVBfUkVRVUVTVF9IVFRQX0NMQVNTKGtsYXNzKSAoR19U
WVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9I
VFRQKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9IVFRQX0dFVF9DTEFTUyhvYmopICAo
R19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVT
VF9IVFRQLCBXZWJLaXRTb3VwUmVxdWVzdEhUVFBDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9X
ZWJLaXRTb3VwUmVxdWVzdEhUVFBQcml2YXRlIFdlYktpdFNvdXBSZXF1ZXN0SFRUUFByaXZhdGU7
CisKK3R5cGVkZWYgc3RydWN0IHsKKwlXZWJLaXRTb3VwUmVxdWVzdCBwYXJlbnQ7CisKKwlXZWJL
aXRTb3VwUmVxdWVzdEhUVFBQcml2YXRlICpwcml2OworfSBXZWJLaXRTb3VwUmVxdWVzdEhUVFA7
CisKK3R5cGVkZWYgc3RydWN0IHsKKwlXZWJLaXRTb3VwUmVxdWVzdENsYXNzIHBhcmVudDsKK30g
V2ViS2l0U291cFJlcXVlc3RIVFRQQ2xhc3M7CisKK0dUeXBlIHdlYmtpdF9zb3VwX3JlcXVlc3Rf
aHR0cF9nZXRfdHlwZSAodm9pZCk7CisKK1NvdXBNZXNzYWdlICAqd2Via2l0X3NvdXBfcmVxdWVz
dF9odHRwX2dldF9tZXNzYWdlIChXZWJLaXRTb3VwUmVxdWVzdEhUVFAgKmh0dHApOworCitHX0VO
RF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX1NPVVBfUkVRVUVTVF9IVFRQX0ggKi8KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5j
IGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LmMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY2MWY4OAotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5jCkBA
IC0wLDAgKzEsMjc5IEBACisvKgorICogc291cC1yZXF1ZXN0LmM6IFByb3RvY29sLWluZGVwZW5k
ZW50IHN0cmVhbWluZyByZXF1ZXN0IGludGVyZmFjZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIElnYWxpYSBTLkwuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZmRl
ZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUg
PGdsaWIvZ2kxOG4uaD4KKworI2luY2x1ZGUgInNvdXAtcmVxdWVzdC5oIgorI2luY2x1ZGUgInNv
dXAtcmVxdWVzdGVyLmgiCisKKy8qKgorICogU0VDVElPTjpzb3VwLXJlcXVlc3QKKyAqIEBzaG9y
dF9kZXNjcmlwdGlvbjogUHJvdG9jb2wtaW5kZXBlbmRlbnQgc3RyZWFtaW5nIHJlcXVlc3QgaW50
ZXJmYWNlCisgKgorICogRklYTUUKKyAqKi8KKworLyoqCisgKiBXZWJLaXRTb3VwUmVxdWVzdDoK
KyAqCisgKiBGSVhNRQorICoKKyAqIFNpbmNlOiAyLjMwCisgKiovCisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9zb3VwX3JlcXVlc3RfaW5pdGFibGVfaW50ZXJmYWNlX2luaXQgKEdJbml0YWJsZUlmYWNl
ICppbml0YWJsZV9pbnRlcmZhY2UpOworCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoV2ViS2l0
U291cFJlcXVlc3QsIHdlYmtpdF9zb3VwX3JlcXVlc3QsIEdfVFlQRV9PQkpFQ1QsCisJCQkgR19J
TVBMRU1FTlRfSU5URVJGQUNFIChHX1RZUEVfSU5JVEFCTEUsCisJCQkJCQl3ZWJraXRfc291cF9y
ZXF1ZXN0X2luaXRhYmxlX2ludGVyZmFjZV9pbml0KSkKKworZW51bSB7CisJUFJPUF8wLAorCVBS
T1BfVVJJLAorCVBST1BfU0VTU0lPTgorfTsKKworc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdFBy
aXZhdGUgeworCVNvdXBVUkkgKnVyaTsKKwlTb3VwU2Vzc2lvbiAqc2Vzc2lvbjsKK307CisKK3N0
YXRpYyB2b2lkCit3ZWJraXRfc291cF9yZXF1ZXN0X2luaXQgKFdlYktpdFNvdXBSZXF1ZXN0ICpy
ZXF1ZXN0KQoreworCXJlcXVlc3QtPnByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUg
KHJlcXVlc3QsIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVCwgV2ViS2l0U291cFJlcXVlc3RQcml2
YXRlKTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX3JlcXVlc3RfZmluYWxpemUgKEdP
YmplY3QgKm9iamVjdCkKK3sKKwlXZWJLaXRTb3VwUmVxdWVzdCAqcmVxdWVzdCA9IFdFQktJVF9T
T1VQX1JFUVVFU1QgKG9iamVjdCk7CisKKwlpZiAocmVxdWVzdC0+cHJpdi0+dXJpKQorCQlzb3Vw
X3VyaV9mcmVlIChyZXF1ZXN0LT5wcml2LT51cmkpOworCWlmIChyZXF1ZXN0LT5wcml2LT5zZXNz
aW9uKQorCQlnX29iamVjdF91bnJlZiAocmVxdWVzdC0+cHJpdi0+c2Vzc2lvbik7CisKKwlHX09C
SkVDVF9DTEFTUyAod2Via2l0X3NvdXBfcmVxdWVzdF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAo
b2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX3JlcXVlc3Rfc2V0X3Byb3Bl
cnR5IChHT2JqZWN0ICAgICAgKm9iamVjdCwKKwkJCSAgIGd1aW50IHByb3BfaWQsCisJCQkgICBj
b25zdCBHVmFsdWUgKnZhbHVlLAorCQkJICAgR1BhcmFtU3BlYyAgICpwc3BlYykKK3sKKwlXZWJL
aXRTb3VwUmVxdWVzdCAqcmVxdWVzdCA9IFdFQktJVF9TT1VQX1JFUVVFU1QgKG9iamVjdCk7CisK
Kwlzd2l0Y2ggKHByb3BfaWQpIHsKKwkJY2FzZSBQUk9QX1VSSToKKwkJCWlmIChyZXF1ZXN0LT5w
cml2LT51cmkpCisJCQkJc291cF91cmlfZnJlZSAocmVxdWVzdC0+cHJpdi0+dXJpKTsKKwkJCXJl
cXVlc3QtPnByaXYtPnVyaSA9IGdfdmFsdWVfZHVwX2JveGVkICh2YWx1ZSk7CisJCQlicmVhazsK
KwkJY2FzZSBQUk9QX1NFU1NJT046CisJCQlpZiAocmVxdWVzdC0+cHJpdi0+c2Vzc2lvbikKKwkJ
CQlnX29iamVjdF91bnJlZiAocmVxdWVzdC0+cHJpdi0+c2Vzc2lvbik7CisJCQlyZXF1ZXN0LT5w
cml2LT5zZXNzaW9uID0gZ192YWx1ZV9kdXBfb2JqZWN0ICh2YWx1ZSk7CisJCQlicmVhazsKKwkJ
ZGVmYXVsdDoKKwkJCUdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAob2JqZWN0LCBw
cm9wX2lkLCBwc3BlYyk7CisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRf
c291cF9yZXF1ZXN0X2dldF9wcm9wZXJ0eSAoR09iamVjdCAgICAqb2JqZWN0LAorCQkJICAgZ3Vp
bnQgcHJvcF9pZCwKKwkJCSAgIEdWYWx1ZSAgICAgKnZhbHVlLAorCQkJICAgR1BhcmFtU3BlYyAq
cHNwZWMpCit7CisJV2ViS2l0U291cFJlcXVlc3QgKnJlcXVlc3QgPSBXRUJLSVRfU09VUF9SRVFV
RVNUIChvYmplY3QpOworCisJc3dpdGNoIChwcm9wX2lkKSB7CisJCWNhc2UgUFJPUF9VUkk6CisJ
CQlnX3ZhbHVlX3NldF9ib3hlZCAodmFsdWUsIHJlcXVlc3QtPnByaXYtPnVyaSk7CisJCQlicmVh
azsKKwkJY2FzZSBQUk9QX1NFU1NJT046CisJCQlnX3ZhbHVlX3NldF9vYmplY3QgKHZhbHVlLCBy
ZXF1ZXN0LT5wcml2LT5zZXNzaW9uKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJR19PQkpF
Q1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKwkJ
CWJyZWFrOworCX0KK30KKworc3RhdGljIGdib29sZWFuCit3ZWJraXRfc291cF9yZXF1ZXN0X2lu
aXRhYmxlX2luaXQgKEdJbml0YWJsZSAgICAgKmluaXRhYmxlLAorCQkJICAgIEdDYW5jZWxsYWJs
ZSAgKmNhbmNlbGxhYmxlLAorCQkJICAgIEdFcnJvciAgICAgICAqKmVycm9yKQoreworCVdlYktp
dFNvdXBSZXF1ZXN0ICpyZXF1ZXN0ID0gV0VCS0lUX1NPVVBfUkVRVUVTVCAoaW5pdGFibGUpOwor
CWdib29sZWFuIG9rOworCisJaWYgKCFyZXF1ZXN0LT5wcml2LT51cmkpIHsKKwkJZ19zZXRfZXJy
b3IgKGVycm9yLCBXRUJLSVRfU09VUF9FUlJPUiwgV0VCS0lUX1NPVVBfRVJST1JfQkFEX1VSSSwK
KwkJCSAgICAgXyAoIk5vIFVSSSBwcm92aWRlZCIpKTsKKwkJcmV0dXJuIEZBTFNFOworCX0KKwor
CW9rID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9HRVRfQ0xBU1MgKGluaXRhYmxlKS0+CisJICAgICBj
aGVja191cmkgKHJlcXVlc3QsIHJlcXVlc3QtPnByaXYtPnVyaSwgZXJyb3IpOworCisJaWYgKCFv
ayAmJiBlcnJvcikgeworCQljaGFyICp1cmlfc3RyaW5nID0gc291cF91cmlfdG9fc3RyaW5nIChy
ZXF1ZXN0LT5wcml2LT51cmksIEZBTFNFKTsKKwkJZ19zZXRfZXJyb3IgKGVycm9yLCBXRUJLSVRf
U09VUF9FUlJPUiwgV0VCS0lUX1NPVVBfRVJST1JfQkFEX1VSSSwKKwkJCSAgICAgXyAoIkludmFs
aWQgJyVzJyBVUkk6ICVzIiksCisJCQkgICAgIHJlcXVlc3QtPnByaXYtPnVyaS0+c2NoZW1lLAor
CQkJICAgICB1cmlfc3RyaW5nKTsKKwkJZ19mcmVlICh1cmlfc3RyaW5nKTsKKwl9CisKKwlyZXR1
cm4gb2s7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgord2Via2l0X3NvdXBfcmVxdWVzdF9kZWZhdWx0
X2NoZWNrX3VyaSAoV2ViS2l0U291cFJlcXVlc3QgICpyZXF1ZXN0LAorCQkJCVNvdXBVUkkgICAg
ICAqdXJpLAorCQkJCUdFcnJvciAgICAgICoqZXJyb3IpCit7CisJcmV0dXJuIFRSVUU7Cit9CisK
Ky8qIERlZmF1bHQgaW1wbGVtZW50YXRpb246IGFzc3VtZSB0aGUgc3luYyBpbXBsZW1lbnRhdGlv
biBkb2Vzbid0IGJsb2NrICovCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfcmVxdWVzdF9kZWZh
dWx0X3NlbmRfYXN5bmMgKFdlYktpdFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAorCQkJ
CSBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJIEdBc3luY1JlYWR5Q2Fs
bGJhY2sgY2FsbGJhY2ssCisJCQkJIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlHU2ltcGxlQXN5
bmNSZXN1bHQgKnNpbXBsZTsKKworCXNpbXBsZSA9IGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcg
KEdfT0JKRUNUIChyZXF1ZXN0KSwKKwkJCQkJICAgIGNhbGxiYWNrLCB1c2VyX2RhdGEsCisJCQkJ
CSAgICB3ZWJraXRfc291cF9yZXF1ZXN0X2RlZmF1bHRfc2VuZF9hc3luYyk7CisJZ19zaW1wbGVf
YXN5bmNfcmVzdWx0X2NvbXBsZXRlX2luX2lkbGUgKHNpbXBsZSk7CisJZ19vYmplY3RfdW5yZWYg
KHNpbXBsZSk7Cit9CisKK3N0YXRpYyBHSW5wdXRTdHJlYW0gKgord2Via2l0X3NvdXBfcmVxdWVz
dF9kZWZhdWx0X3NlbmRfZmluaXNoIChXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVz
dCwKKwkJCQkgIEdBc3luY1Jlc3VsdCAgICAgICAgICpyZXN1bHQsCisJCQkJICBHRXJyb3IgICAg
ICAgICAgICAgICoqZXJyb3IpCit7CisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdfc2ltcGxlX2Fz
eW5jX3Jlc3VsdF9pc192YWxpZCAocmVzdWx0LCBHX09CSkVDVCAocmVxdWVzdCksIHdlYmtpdF9z
b3VwX3JlcXVlc3RfZGVmYXVsdF9zZW5kX2FzeW5jKSwgTlVMTCk7CisKKwlyZXR1cm4gd2Via2l0
X3NvdXBfcmVxdWVzdF9zZW5kIChyZXF1ZXN0LCBOVUxMLCBlcnJvcik7Cit9CisKK0dJbnB1dFN0
cmVhbSAqCit3ZWJraXRfc291cF9yZXF1ZXN0X3NlbmQgKFdlYktpdFNvdXBSZXF1ZXN0ICAgICAg
ICAgICpyZXF1ZXN0LAorCQkgICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJ
CSAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcikKK3sKKwlyZXR1cm4gV0VCS0lUX1NPVVBf
UkVRVUVTVF9HRVRfQ0xBU1MgKHJlcXVlc3QpLT4KKwkgICAgICAgc2VuZCAocmVxdWVzdCwgY2Fu
Y2VsbGFibGUsIGVycm9yKTsKK30KKwordm9pZAord2Via2l0X3NvdXBfcmVxdWVzdF9zZW5kX2Fz
eW5jIChXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKKwkJCSBHQ2FuY2VsbGFi
bGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFj
aywKKwkJCSBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJV0VCS0lUX1NPVVBfUkVRVUVTVF9HRVRf
Q0xBU1MgKHJlcXVlc3QpLT4KKwlzZW5kX2FzeW5jIChyZXF1ZXN0LCBjYW5jZWxsYWJsZSwgY2Fs
bGJhY2ssIHVzZXJfZGF0YSk7Cit9CisKK0dJbnB1dFN0cmVhbSAqCit3ZWJraXRfc291cF9yZXF1
ZXN0X3NlbmRfZmluaXNoIChXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKKwkJ
CSAgR0FzeW5jUmVzdWx0ICAgICAgICAgKnJlc3VsdCwKKwkJCSAgR0Vycm9yICAgICAgICAgICAg
ICAqKmVycm9yKQoreworCXJldHVybiBXRUJLSVRfU09VUF9SRVFVRVNUX0dFVF9DTEFTUyAocmVx
dWVzdCktPgorCSAgICAgICBzZW5kX2ZpbmlzaCAocmVxdWVzdCwgcmVzdWx0LCBlcnJvcik7Cit9
CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfc291cF9yZXF1ZXN0X2NsYXNzX2luaXQgKFdlYktpdFNv
dXBSZXF1ZXN0Q2xhc3MgKnJlcXVlc3RfY2xhc3MpCit7CisJR09iamVjdENsYXNzICpvYmplY3Rf
Y2xhc3MgPSBHX09CSkVDVF9DTEFTUyAocmVxdWVzdF9jbGFzcyk7CisKKwlnX3R5cGVfY2xhc3Nf
YWRkX3ByaXZhdGUgKHJlcXVlc3RfY2xhc3MsIHNpemVvZiAoV2ViS2l0U291cFJlcXVlc3RQcml2
YXRlKSk7CisKKwlyZXF1ZXN0X2NsYXNzLT5jaGVja191cmkgPSB3ZWJraXRfc291cF9yZXF1ZXN0
X2RlZmF1bHRfY2hlY2tfdXJpOworCXJlcXVlc3RfY2xhc3MtPnNlbmRfYXN5bmMgPSB3ZWJraXRf
c291cF9yZXF1ZXN0X2RlZmF1bHRfc2VuZF9hc3luYzsKKwlyZXF1ZXN0X2NsYXNzLT5zZW5kX2Zp
bmlzaCA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfZGVmYXVsdF9zZW5kX2ZpbmlzaDsKKworCW9iamVj
dF9jbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbmFsaXplOworCW9iamVj
dF9jbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X3NvdXBfcmVxdWVzdF9zZXRfcHJvcGVydHk7
CisJb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfc291cF9yZXF1ZXN0X2dldF9w
cm9wZXJ0eTsKKworCWdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKAorCQlvYmplY3Rf
Y2xhc3MsIFBST1BfVVJJLAorCQlnX3BhcmFtX3NwZWNfYm94ZWQgKFdFQktJVF9TT1VQX1JFUVVF
U1RfVVJJLAorCQkJCSAgICAiVVJJIiwKKwkJCQkgICAgIlRoZSByZXF1ZXN0IFVSSSIsCisJCQkJ
ICAgIFNPVVBfVFlQRV9VUkksCisJCQkJICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9D
T05TVFJVQ1RfT05MWSkpOworCWdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKAorCQlv
YmplY3RfY2xhc3MsIFBST1BfU0VTU0lPTiwKKwkJZ19wYXJhbV9zcGVjX29iamVjdCAoV0VCS0lU
X1NPVVBfUkVRVUVTVF9TRVNTSU9OLAorCQkJCSAgICAgIlNlc3Npb24iLAorCQkJCSAgICAgIlRo
ZSByZXF1ZXN0J3Mgc2Vzc2lvbiIsCisJCQkJICAgICBTT1VQX1RZUEVfU0VTU0lPTiwKKwkJCQkg
ICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpOworfQorCitz
dGF0aWMgdm9pZAord2Via2l0X3NvdXBfcmVxdWVzdF9pbml0YWJsZV9pbnRlcmZhY2VfaW5pdCAo
R0luaXRhYmxlSWZhY2UgKmluaXRhYmxlX2ludGVyZmFjZSkKK3sKKwlpbml0YWJsZV9pbnRlcmZh
Y2UtPmluaXQgPSB3ZWJraXRfc291cF9yZXF1ZXN0X2luaXRhYmxlX2luaXQ7Cit9CisKK1NvdXBV
UkkgKgord2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfdXJpIChXZWJLaXRTb3VwUmVxdWVzdCAqcmVx
dWVzdCkKK3sKKwlyZXR1cm4gcmVxdWVzdC0+cHJpdi0+dXJpOworfQorCitTb3VwU2Vzc2lvbiAq
Cit3ZWJraXRfc291cF9yZXF1ZXN0X2dldF9zZXNzaW9uIChXZWJLaXRTb3VwUmVxdWVzdCAqcmVx
dWVzdCkKK3sKKwlyZXR1cm4gcmVxdWVzdC0+cHJpdi0+c2Vzc2lvbjsKK30KKworZ29mZnNldAor
d2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfY29udGVudF9sZW5ndGggKFdlYktpdFNvdXBSZXF1ZXN0
ICpyZXF1ZXN0KQoreworCXJldHVybiBXRUJLSVRfU09VUF9SRVFVRVNUX0dFVF9DTEFTUyAocmVx
dWVzdCktPmdldF9jb250ZW50X2xlbmd0aCAocmVxdWVzdCk7Cit9CisKK2NvbnN0IGNoYXIgKgor
d2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfY29udGVudF90eXBlIChXZWJLaXRTb3VwUmVxdWVzdCAg
KnJlcXVlc3QpCit7CisJcmV0dXJuIFdFQktJVF9TT1VQX1JFUVVFU1RfR0VUX0NMQVNTIChyZXF1
ZXN0KS0+Z2V0X2NvbnRlbnRfdHlwZSAocmVxdWVzdCk7Cit9CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QuaCBiL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmZiY2Y5MTgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QuaApAQCAtMCwwICsxLDkyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAo
QykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXRUJLSVRfU09VUF9SRVFVRVNUX0gKKyNkZWZp
bmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9IIDEKKworI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgor
I2luY2x1ZGUgPGdpby9naW8uaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9U
WVBFX1NPVVBfUkVRVUVTVCAgICAgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2dldF90eXBl
ICgpKQorI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNUKG9iaikgICAgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1QsIFdl
YktpdFNvdXBSZXF1ZXN0KSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9DTEFTUyhrbGFz
cykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBXRUJLSVRfVFlQRV9TT1VQ
X1JFUVVFU1QsIFdlYktpdFNvdXBSZXF1ZXN0Q2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfU09V
UF9SRVFVRVNUKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmop
LCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1QpKQorI2RlZmluZSBXRUJLSVRfSVNfU09VUF9SRVFV
RVNUX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIFdFQktJ
VF9UWVBFX1NPVVBfUkVRVUVTVCkpCisjZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfR0VUX0NM
QVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgV0VCS0lUX1RZUEVf
U09VUF9SRVFVRVNULCBXZWJLaXRTb3VwUmVxdWVzdENsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdFNvdXBSZXF1ZXN0IFdlYktpdFNvdXBSZXF1ZXN0OwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdFNvdXBSZXF1ZXN0UHJpdmF0ZSBXZWJLaXRTb3VwUmVxdWVzdFByaXZhdGU7Cit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0U291cFJlcXVlc3RDbGFzcyBXZWJLaXRTb3VwUmVxdWVzdENsYXNzOwor
CitzdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0IHsKKwlHT2JqZWN0IHBhcmVudDsKKworCVdlYktp
dFNvdXBSZXF1ZXN0UHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0U291cFJlcXVl
c3RDbGFzcyB7CisJR09iamVjdENsYXNzIHBhcmVudDsKKworCWdib29sZWFuICgqY2hlY2tfdXJp
KShXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxX2Jhc2UsCisJCQkgICAgICBTb3VwVVJJ
ICAgICAgICAgICAgICAqdXJpLAorCQkJICAgICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9y
KTsKKworCUdJbnB1dFN0cmVhbSAqICgqc2VuZCkoV2ViS2l0U291cFJlcXVlc3QgICAgICAgICAg
KnJlcXVlc3QsCisJCQkgICAgICAgR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAor
CQkJICAgICAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcik7CisJdm9pZCAoKnNlbmRfYXN5
bmMpKFdlYktpdFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAorCQkJICAgR0NhbmNlbGxh
YmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJICAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxs
YmFjaywKKwkJCSAgIGdwb2ludGVyIHVzZXJfZGF0YSk7CisJR0lucHV0U3RyZWFtICogKCpzZW5k
X2ZpbmlzaCkoV2ViS2l0U291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCisJCQkJICAgICAg
R0FzeW5jUmVzdWx0ICAgICAgICAgKnJlc3VsdCwKKwkJCQkgICAgICBHRXJyb3IgICAgICAgICAg
ICAgICoqZXJyb3IpOworCisJZ29mZnNldCAoKmdldF9jb250ZW50X2xlbmd0aCkoV2ViS2l0U291
cFJlcXVlc3QgICAqcmVxdWVzdCk7CisJY29uc3QgY2hhciAqICAgKCpnZXRfY29udGVudF90eXBl
KShXZWJLaXRTb3VwUmVxdWVzdCAgICpyZXF1ZXN0KTsKK307CisKK0dUeXBlIHdlYmtpdF9zb3Vw
X3JlcXVlc3RfZ2V0X3R5cGUgKHZvaWQpOworCisjZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1Rf
VVJJICAgICAidXJpIgorI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNUX1NFU1NJT04gInNlc3Np
b24iCisKK0dJbnB1dFN0cmVhbSAqd2Via2l0X3NvdXBfcmVxdWVzdF9zZW5kIChXZWJLaXRTb3Vw
UmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKKwkJCQkgR0NhbmNlbGxhYmxlICAgICAgICAgKmNh
bmNlbGxhYmxlLAorCQkJCSBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpOwordm9pZCAgICAg
ICAgICB3ZWJraXRfc291cF9yZXF1ZXN0X3NlbmRfYXN5bmMgKFdlYktpdFNvdXBSZXF1ZXN0ICAg
ICAgICAgICpyZXF1ZXN0LAorCQkJCSAgICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2Vs
bGFibGUsCisJCQkJICAgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCisJCQkJICAg
ICAgIGdwb2ludGVyIHVzZXJfZGF0YSk7CitHSW5wdXRTdHJlYW0gKndlYmtpdF9zb3VwX3JlcXVl
c3Rfc2VuZF9maW5pc2ggKFdlYktpdFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAorCQkJ
CQlHQXN5bmNSZXN1bHQgICAgICAgICAqcmVzdWx0LAorCQkJCQlHRXJyb3IgICAgICAgICAgICAg
ICoqZXJyb3IpOworCitTb3VwVVJJICAgICAgKndlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X3VyaSAo
V2ViS2l0U291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QpOworU291cFNlc3Npb24gICp3ZWJr
aXRfc291cF9yZXF1ZXN0X2dldF9zZXNzaW9uIChXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAgICAq
cmVxdWVzdCk7CisKK2dvZmZzZXQgICAgICAgd2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfY29udGVu
dF9sZW5ndGggKFdlYktpdFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0KTsKK2NvbnN0IGNo
YXIgICAqd2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfY29udGVudF90eXBlIChXZWJLaXRTb3VwUmVx
dWVzdCAgICAgICAgICAqcmVxdWVzdCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJL
SVRfU09VUF9SRVFVRVNUX0ggKi8KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmMgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9jYWNoZS9zb3VwLXJlcXVlc3Rlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjgzMzYwZTYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Rlci5jCkBAIC0wLDAgKzEsMTg3IEBACisvKgorICog
c291cC1yZXF1ZXN0ZXIuYzoKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIElnYWxpYSBTLkwu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3Rlci5oIgorCisjaW5j
bHVkZSAic291cC1yZXF1ZXN0LWRhdGEuaCIKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3QtZmlsZS5o
IgorI2luY2x1ZGUgInNvdXAtcmVxdWVzdC1odHRwLmgiCisjaW5jbHVkZSA8Z2xpYi9naTE4bi5o
PgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorCitzdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0
ZXJQcml2YXRlIHsKKwlHSGFzaFRhYmxlICpyZXF1ZXN0X3R5cGVzOworfTsKKworI2RlZmluZSBX
RUJLSVRfU09VUF9SRVFVRVNURVJfR0VUX1BSSVZBVEUobykgKEdfVFlQRV9JTlNUQU5DRV9HRVRf
UFJJVkFURSAoKG8pLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RFUiwgV2ViS2l0U291cFJlcXVl
c3RlclByaXZhdGUpKQorCitHX0RFRklORV9UWVBFIChXZWJLaXRTb3VwUmVxdWVzdGVyLCB3ZWJr
aXRfc291cF9yZXF1ZXN0ZXIsIEdfVFlQRV9PQkpFQ1QpCisKK3N0YXRpYyB2b2lkIHdlYmtpdF9z
b3VwX3JlcXVlc3Rlcl9pbml0IChXZWJLaXRTb3VwUmVxdWVzdGVyICpyZXF1ZXN0ZXIpCit7CisJ
cmVxdWVzdGVyLT5wcml2ID0gV0VCS0lUX1NPVVBfUkVRVUVTVEVSX0dFVF9QUklWQVRFIChyZXF1
ZXN0ZXIpOworCisJcmVxdWVzdGVyLT5wcml2LT5yZXF1ZXN0X3R5cGVzID0gMDsKK30KKworc3Rh
dGljIHZvaWQgZmluYWxpemUgKEdPYmplY3QgKm9iamVjdCkKK3sKKwlXZWJLaXRTb3VwUmVxdWVz
dGVyICpyZXF1ZXN0ZXIgPSBXRUJLSVRfU09VUF9SRVFVRVNURVIgKG9iamVjdCk7CisKKwlpZiAo
cmVxdWVzdGVyLT5wcml2LT5yZXF1ZXN0X3R5cGVzKQorCQlnX2hhc2hfdGFibGVfZGVzdHJveSAo
cmVxdWVzdGVyLT5wcml2LT5yZXF1ZXN0X3R5cGVzKTsKKworCUdfT0JKRUNUX0NMQVNTICh3ZWJr
aXRfc291cF9yZXF1ZXN0ZXJfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX3JlcXVlc3Rlcl9jbGFzc19pbml0IChXZWJLaXRTb3Vw
UmVxdWVzdGVyQ2xhc3MgKnJlcXVlc3Rlcl9jbGFzcykKK3sKKwlHT2JqZWN0Q2xhc3MgKm9iamVj
dF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChyZXF1ZXN0ZXJfY2xhc3MpOworCisJZ190eXBlX2Ns
YXNzX2FkZF9wcml2YXRlIChyZXF1ZXN0ZXJfY2xhc3MsIHNpemVvZiAoV2ViS2l0U291cFJlcXVl
c3RlclByaXZhdGUpKTsKKworCS8qIHZpcnR1YWwgbWV0aG9kIG92ZXJyaWRlICovCisJb2JqZWN0
X2NsYXNzLT5maW5hbGl6ZSA9IGZpbmFsaXplOworfQorCitzdGF0aWMgdm9pZCBpbml0X3JlcXVl
c3RfdHlwZXMgKFdlYktpdFNvdXBSZXF1ZXN0ZXJQcml2YXRlICpwcml2KQoreworCWlmIChwcml2
LT5yZXF1ZXN0X3R5cGVzKQorCQlyZXR1cm47CisKKwlwcml2LT5yZXF1ZXN0X3R5cGVzID0gZ19o
YXNoX3RhYmxlX25ld19mdWxsIChzb3VwX3N0cl9jYXNlX2hhc2gsCisJCQkJCQkgICAgIHNvdXBf
c3RyX2Nhc2VfZXF1YWwsCisJCQkJCQkgICAgIGdfZnJlZSwgMCk7CisJZ19oYXNoX3RhYmxlX2lu
c2VydCAocHJpdi0+cmVxdWVzdF90eXBlcywgZ19zdHJkdXAgKCJmaWxlIiksCisJCQkgICAgIEdT
SVpFX1RPX1BPSU5URVIgKFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9GSUxFKSk7CisJZ19oYXNo
X3RhYmxlX2luc2VydCAocHJpdi0+cmVxdWVzdF90eXBlcywgZ19zdHJkdXAgKCJkYXRhIiksCisJ
CQkgICAgIEdTSVpFX1RPX1BPSU5URVIgKFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9EQVRBKSk7
CisJZ19oYXNoX3RhYmxlX2luc2VydCAocHJpdi0+cmVxdWVzdF90eXBlcywgZ19zdHJkdXAgKCJo
dHRwIiksCisJCQkgICAgIEdTSVpFX1RPX1BPSU5URVIgKFdFQktJVF9UWVBFX1NPVVBfUkVRVUVT
VF9IVFRQKSk7CisJZ19oYXNoX3RhYmxlX2luc2VydCAocHJpdi0+cmVxdWVzdF90eXBlcywgZ19z
dHJkdXAgKCJodHRwcyIpLAorCQkJICAgICBHU0laRV9UT19QT0lOVEVSIChXRUJLSVRfVFlQRV9T
T1VQX1JFUVVFU1RfSFRUUCkpOworCWdfaGFzaF90YWJsZV9pbnNlcnQgKHByaXYtPnJlcXVlc3Rf
dHlwZXMsIGdfc3RyZHVwICgiZnRwIiksCisJCQkgICAgIEdTSVpFX1RPX1BPSU5URVIgKFdFQktJ
VF9UWVBFX1NPVVBfUkVRVUVTVF9GSUxFKSk7Cit9CisKK1dlYktpdFNvdXBSZXF1ZXN0ZXIgKndl
YmtpdF9zb3VwX3JlcXVlc3Rlcl9uZXcgKHZvaWQpCit7CisJcmV0dXJuIChXZWJLaXRTb3VwUmVx
dWVzdGVyICopZ19vYmplY3RfbmV3IChXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RFUiwgMCk7Cit9
CisKK1dlYktpdFNvdXBSZXF1ZXN0ICp3ZWJraXRfc291cF9yZXF1ZXN0ZXJfcmVxdWVzdCAoV2Vi
S2l0U291cFJlcXVlc3RlciAqcmVxdWVzdGVyLCBjb25zdCBjaGFyICp1cmlTdHJpbmcsIFNvdXBT
ZXNzaW9uICpzZXNzaW9uLCBHRXJyb3IgKiplcnJvcikKK3sKKwlTb3VwVVJJICp1cmkgPSBOVUxM
OworCVdlYktpdFNvdXBSZXF1ZXN0ICpyZXE7CisKKwl1cmkgPSBzb3VwX3VyaV9uZXcgKHVyaVN0
cmluZyk7CisJaWYgKCF1cmkpIHsKKwkJZ19zZXRfZXJyb3IgKGVycm9yLCBXRUJLSVRfU09VUF9F
UlJPUiwgV0VCS0lUX1NPVVBfRVJST1JfQkFEX1VSSSwKKwkJCSAgICAgXyAoIkNvdWxkIG5vdCBw
YXJzZSBVUkkgJyVzJyIpLCB1cmlTdHJpbmcpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXEgPSB3
ZWJraXRfc291cF9yZXF1ZXN0ZXJfcmVxdWVzdF91cmkgKHJlcXVlc3RlciwgdXJpLCBzZXNzaW9u
LCBlcnJvcik7CisJc291cF91cmlfZnJlZSAodXJpKTsKKwlyZXR1cm4gcmVxOworfQorCitXZWJL
aXRTb3VwUmVxdWVzdCAqd2Via2l0X3NvdXBfcmVxdWVzdGVyX3JlcXVlc3RfdXJpIChXZWJLaXRT
b3VwUmVxdWVzdGVyICpyZXF1ZXN0ZXIsIFNvdXBVUkkgKnVyaSwgU291cFNlc3Npb24gKnNlc3Np
b24sIEdFcnJvciAqKmVycm9yKQoreworCUdUeXBlIHJlcXVlc3RUeXBlOworCisJZ19yZXR1cm5f
dmFsX2lmX2ZhaWwgKFdFQktJVF9JU19TT1VQX1JFUVVFU1RFUiAocmVxdWVzdGVyKSwgMCk7CisK
Kwlpbml0X3JlcXVlc3RfdHlwZXMgKHJlcXVlc3Rlci0+cHJpdik7CisJcmVxdWVzdFR5cGUgPSAo
R1R5cGUpR1BPSU5URVJfVE9fU0laRSAoZ19oYXNoX3RhYmxlX2xvb2t1cCAocmVxdWVzdGVyLT5w
cml2LT5yZXF1ZXN0X3R5cGVzLCB1cmktPnNjaGVtZSkpOworCWlmICghcmVxdWVzdFR5cGUpIHsK
KwkJZ19zZXRfZXJyb3IgKGVycm9yLCBXRUJLSVRfU09VUF9FUlJPUiwgV0VCS0lUX1NPVVBfRVJS
T1JfVU5TVVBQT1JURURfVVJJX1NDSEVNRSwKKwkJCSAgICAgXyAoIlVuc3VwcG9ydGVkIFVSSSBz
Y2hlbWUgJyVzJyIpLCB1cmktPnNjaGVtZSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChnX3R5
cGVfaXNfYSAocmVxdWVzdFR5cGUsIEdfVFlQRV9JTklUQUJMRSkpIHsKKwkJcmV0dXJuIChXZWJL
aXRTb3VwUmVxdWVzdCAqKWdfaW5pdGFibGVfbmV3IChyZXF1ZXN0VHlwZSwgMCwgZXJyb3IsCisJ
CQkJCQkJICAgICJ1cmkiLCB1cmksCisJCQkJCQkJICAgICJzZXNzaW9uIiwgc2Vzc2lvbiwKKwkJ
CQkJCQkgICAgMCk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIChXZWJLaXRTb3VwUmVxdWVzdCAqKWdf
b2JqZWN0X25ldyAocmVxdWVzdFR5cGUsCisJCQkJCQkJICAidXJpIiwgdXJpLAorCQkJCQkJCSAg
InNlc3Npb24iLCBzZXNzaW9uLAorCQkJCQkJCSAgMCk7CisJfQorfQorCisvKiBSRkMgMjM5Niwg
My4xICovCitzdGF0aWMgZ2Jvb2xlYW4KK3NvdXBfc2NoZW1lX2lzX3ZhbGlkIChjb25zdCBjaGFy
ICpzY2hlbWUpCit7CisJaWYgKHNjaGVtZSA9PSBOVUxMIHx8CisJICAgICFnX2FzY2lpX2lzYWxw
aGEgKCpzY2hlbWUpKQorCQlyZXR1cm4gRkFMU0U7CisKKwlzY2hlbWUrKzsKKwl3aGlsZSAoKnNj
aGVtZSkgeworCQlpZiAoIWdfYXNjaWlfaXNhbHBoYSAoKnNjaGVtZSkgJiYKKwkJICAgICFnX2Fz
Y2lpX2lzZGlnaXQgKCpzY2hlbWUpICYmCisJCSAgICAqc2NoZW1lICE9ICcrJyAmJgorCQkgICAg
KnNjaGVtZSAhPSAnLScgJiYKKwkJICAgICpzY2hlbWUgIT0gJy4nKQorCQkJcmV0dXJuIEZBTFNF
OworCQlzY2hlbWUrKzsKKwl9CisJcmV0dXJuIFRSVUU7Cit9CisKK3ZvaWQKK3dlYmtpdF9zb3Vw
X3JlcXVlc3Rlcl9hZGRfcHJvdG9jb2wgKFdlYktpdFNvdXBSZXF1ZXN0ZXIgKnJlcXVlc3RlciwK
KwkJCSAgICAgY29uc3QgY2hhciAgKnNjaGVtZSwKKwkJCSAgICAgR1R5cGUgcmVxdWVzdF90eXBl
KQoreworCWdfcmV0dXJuX2lmX2ZhaWwgKFdFQktJVF9JU19TT1VQX1JFUVVFU1RFUiAocmVxdWVz
dGVyKSk7CisJZ19yZXR1cm5faWZfZmFpbCAoc291cF9zY2hlbWVfaXNfdmFsaWQgKHNjaGVtZSkp
OworCisJaW5pdF9yZXF1ZXN0X3R5cGVzIChyZXF1ZXN0ZXItPnByaXYpOworCWdfaGFzaF90YWJs
ZV9pbnNlcnQgKHJlcXVlc3Rlci0+cHJpdi0+cmVxdWVzdF90eXBlcywgZ19zdHJkdXAgKHNjaGVt
ZSksCisJCQkgICAgIEdTSVpFX1RPX1BPSU5URVIgKHJlcXVlc3RfdHlwZSkpOworfQorCit2b2lk
Cit3ZWJraXRfc291cF9yZXF1ZXN0ZXJfcmVtb3ZlX3Byb3RvY29sIChXZWJLaXRTb3VwUmVxdWVz
dGVyICpyZXF1ZXN0ZXIsCisJCQkJY29uc3QgY2hhciAgKnNjaGVtZSkKK3sKKwlnX3JldHVybl9p
Zl9mYWlsIChXRUJLSVRfSVNfU09VUF9SRVFVRVNURVIgKHJlcXVlc3RlcikpOworCWdfcmV0dXJu
X2lmX2ZhaWwgKHNvdXBfc2NoZW1lX2lzX3ZhbGlkIChzY2hlbWUpKTsKKworCWluaXRfcmVxdWVz
dF90eXBlcyAocmVxdWVzdGVyLT5wcml2KTsKKwlnX2hhc2hfdGFibGVfcmVtb3ZlIChyZXF1ZXN0
ZXItPnByaXYtPnJlcXVlc3RfdHlwZXMsIHNjaGVtZSk7Cit9CisKK0dRdWFyaword2Via2l0X3Nv
dXBfZXJyb3JfcXVhcmsgKHZvaWQpCit7CisJc3RhdGljIEdRdWFyayBlcnJvcjsKKwlpZiAoIWVy
cm9yKQorCQllcnJvciA9IGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nICgid2Via2l0X3NvdXBf
ZXJyb3JfcXVhcmsiKTsKKwlyZXR1cm4gZXJyb3I7Cit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Rlci5oIGIvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5lYTk1YmZmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuaApAQCAtMCwwICsxLDgw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV0VCS0lU
X1NPVVBfUkVRVUVTVEVSX0gKKyNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVEVSX0ggMQorCisj
aW5jbHVkZSAic291cC1yZXF1ZXN0LmgiCisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CisKK0df
QkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RFUiAgICAgICAg
ICAgICh3ZWJraXRfc291cF9yZXF1ZXN0ZXJfZ2V0X3R5cGUgKCkpCisjZGVmaW5lIFdFQktJVF9T
T1VQX1JFUVVFU1RFUihvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNU
ICgob2JqKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNURVIsIFdlYktpdFNvdXBSZXF1ZXN0ZXIp
KQorI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNURVJfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNURVIsIFdl
YktpdFNvdXBSZXF1ZXN0ZXJDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19TT1VQX1JFUVVFU1RF
UihvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgV0VCS0lU
X1RZUEVfU09VUF9SRVFVRVNURVIpKQorI2RlZmluZSBXRUJLSVRfSVNfU09VUF9SRVFVRVNURVJf
Q0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKG9iaiksIFdFQktJVF9UWVBF
X1NPVVBfUkVRVUVTVEVSKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVEVSX0dFVF9DTEFT
UyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIFdFQktJVF9UWVBFX1NP
VVBfUkVRVUVTVEVSLCBXZWJLaXRTb3VwUmVxdWVzdGVyQ2xhc3MpKQorCisjZGVmaW5lIFdFQktJ
VF9TT1VQX0VSUk9SIHdlYmtpdF9zb3VwX2Vycm9yX3F1YXJrICgpCisKK3R5cGVkZWYgZW51bSB7
CisJV0VCS0lUX1NPVVBfRVJST1JfQkFEX1VSSSwKKwlXRUJLSVRfU09VUF9FUlJPUl9VTlNVUFBP
UlRFRF9VUklfU0NIRU1FCit9IFdlYktpdFNvdXBFcnJvcjsKKwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdFNvdXBSZXF1ZXN0ZXIgV2ViS2l0U291cFJlcXVlc3RlcjsKK3R5cGVkZWYgc3RydWN0IF9X
ZWJLaXRTb3VwUmVxdWVzdGVyUHJpdmF0ZSBXZWJLaXRTb3VwUmVxdWVzdGVyUHJpdmF0ZTsKKwor
c3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdGVyIHsKKwlHT2JqZWN0IHBhcmVudDsKKworCVdlYktp
dFNvdXBSZXF1ZXN0ZXJQcml2YXRlICpwcml2OworfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCUdP
YmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9IFdlYktpdFNvdXBSZXF1ZXN0ZXJDbGFzczsKKwor
R1R5cGUgd2Via2l0X3NvdXBfcmVxdWVzdGVyX2dldF90eXBlICh2b2lkKTsKKworV2ViS2l0U291
cFJlcXVlc3RlciAqd2Via2l0X3NvdXBfcmVxdWVzdGVyX25ldyAodm9pZCk7CisKK0dRdWFyayB3
ZWJraXRfc291cF9lcnJvcl9xdWFyayAodm9pZCk7CisKK1dlYktpdFNvdXBSZXF1ZXN0ICp3ZWJr
aXRfc291cF9yZXF1ZXN0ZXJfcmVxdWVzdCAoV2ViS2l0U291cFJlcXVlc3RlciAqcmVxdWVzdGVy
LAorCQkJCQkgICBjb25zdCBjaGFyICp1cmlTdHJpbmcsCisJCQkJCSAgIFNvdXBTZXNzaW9uICpz
ZXNzaW9uLAorCQkJCQkgICBHRXJyb3IgKiplcnJvcik7CisKK1dlYktpdFNvdXBSZXF1ZXN0ICp3
ZWJraXRfc291cF9yZXF1ZXN0ZXJfcmVxdWVzdF91cmkgKFdlYktpdFNvdXBSZXF1ZXN0ZXIgKnJl
cXVlc3RlciwKKwkJCQkJICAgICAgIFNvdXBVUkkgKnVyaSwKKwkJCQkJICAgICAgIFNvdXBTZXNz
aW9uICpzZXNzaW9uLAorCQkJCQkgICAgICAgR0Vycm9yICoqZXJyb3IpOworCit2b2lkIHdlYmtp
dF9zb3VwX3JlcXVlc3Rlcl9hZGRfcHJvdG9jb2wgKFdlYktpdFNvdXBSZXF1ZXN0ZXIgKnJlcXVl
c3RlciwKKwkJCQkgIGNvbnN0IGNoYXIgICpzY2hlbWUsCisJCQkJICBHVHlwZSByZXF1ZXN0X3R5
cGUpOworCit2b2lkIHdlYmtpdF9zb3VwX3JlcXVlc3Rlcl9yZW1vdmVfcHJvdG9jb2wgKFdlYktp
dFNvdXBSZXF1ZXN0ZXIgKnJlcXVlc3RlciwKKwkJCQkgICAgIGNvbnN0IGNoYXIgICpzY2hlbWUp
OworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX1NPVVBfUkVRVUVTVEVSX0ggKi8K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9z
b3VwLWNhY2hlLXByaXZhdGUuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3dlYmtpdC9zb3VwLWNhY2hlLXByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4wOTE0N2YzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUtcHJpdmF0ZS5oCkBAIC0wLDAgKzEsNDEg
QEAKKy8qCisgKiBzb3VwLWNhY2hlLXByaXZhdGUuaDoKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpZm5kZWYgV0VCS0lUX1NPVVBfQ0FDSEVfUFJJVkFURV9ICisjZGVm
aW5lIFdFQktJVF9TT1VQX0NBQ0hFX1BSSVZBVEVfSCAxCisKKyNpbmNsdWRlICJzb3VwLWNhY2hl
LmgiCisjaW5jbHVkZSA8bGlic291cC9zb3VwLW1lc3NhZ2UuaD4KKworR19CRUdJTl9ERUNMUwor
CitXZWJLaXRTb3VwQ2FjaGVSZXNwb25zZSB3ZWJraXRfc291cF9jYWNoZV9oYXNfcmVzcG9uc2Ug
KFdlYktpdFNvdXBDYWNoZSAgICpjYWNoZSwKKwkJCQkJCQlTb3VwTWVzc2FnZSAqbXNnKTsKK0dJ
bnB1dFN0cmVhbSAqd2Via2l0X3NvdXBfY2FjaGVfc2VuZF9yZXNwb25zZSAoV2ViS2l0U291cENh
Y2hlICAgKmNhY2hlLAorCQkJCQkgICAgICAgU291cE1lc3NhZ2UgKm1zZyk7CitXZWJLaXRTb3Vw
Q2FjaGVhYmlsaXR5ICB3ZWJraXRfc291cF9jYWNoZV9nZXRfY2FjaGVhYmlsaXR5IChXZWJLaXRT
b3VwQ2FjaGUgICAqY2FjaGUsCisJCQkJCQkJICAgIFNvdXBNZXNzYWdlICptc2cpOworU291cE1l
c3NhZ2UgKndlYmtpdF9zb3VwX2NhY2hlX2dlbmVyYXRlX2NvbmRpdGlvbmFsX3JlcXVlc3QgKFdl
YktpdFNvdXBDYWNoZSAgICpjYWNoZSwKKwkJCQkJCQkgICAgIFNvdXBNZXNzYWdlICpvcmlnaW5h
bCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfU09VUF9DQUNIRV9QUklWQVRF
X0ggKi8KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dl
YmtpdC9zb3VwLWNhY2hlLmMgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93
ZWJraXQvc291cC1jYWNoZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcy
YWNmYjMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9j
YWNoZS93ZWJraXQvc291cC1jYWNoZS5jCkBAIC0wLDAgKzEsMTY1MiBAQAorLyoKKyAqIHNvdXAt
Y2FjaGUuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBJZ2FsaWEgUy5MLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisvKiBU
T0RPOgorICogLSBOZWVkIHRvIGhvb2sgdGhlIGZlYXR1cmUgaW4gdGhlIHN5bmMgU291cFNlc3Np
b24uCisgKiAtIE5lZWQgbW9yZSB0ZXN0cy4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAor
I2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJzb3VwLWNhY2hlLmgiCisj
aW5jbHVkZSAic291cC1jYWNoZS1wcml2YXRlLmgiCisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+
CisjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitzdGF0aWMgU291
cFNlc3Npb25GZWF0dXJlSW50ZXJmYWNlICp3ZWJraXRfc291cF9jYWNoZV9kZWZhdWx0X2ZlYXR1
cmVfaW50ZXJmYWNlOworc3RhdGljIHZvaWQgd2Via2l0X3NvdXBfY2FjaGVfc2Vzc2lvbl9mZWF0
dXJlX2luaXQgKFNvdXBTZXNzaW9uRmVhdHVyZUludGVyZmFjZSAqZmVhdHVyZV9pbnRlcmZhY2Us
IGdwb2ludGVyIGludGVyZmFjZV9kYXRhKTsKKworI2RlZmluZSBERUZBVUxUX01BWF9TSVpFIDUw
ICogMTAyNCAqIDEwMjQKKyNkZWZpbmUgTUFYX0VOVFJZX0RBVEFfUEVSQ0VOVEFHRSAxMCAvKiBQ
ZXJjZW50YWdlIG9mIHRoZSB0b3RhbCBzaXplCisJICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvZiB0aGUgY2FjaGUgdGhhdCBjYW4gYmUKKwkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZpbGxlZCBieSBhIHNpbmdsZSBlbnRyeSAqLworCit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0U291cENhY2hlRW50cnkgeworCWNoYXIgKmtleTsKKwljaGFyICpmaWxlbmFtZTsKKwlndWlu
dCBmcmVzaG5lc3NfbGlmZXRpbWU7CisJZ2Jvb2xlYW4gbXVzdF9yZXZhbGlkYXRlOworCUdTdHJp
bmcgKmRhdGE7CisJZ3NpemUgcG9zOworCWdzaXplIGxlbmd0aDsKKwl0aW1lX3QgY29ycmVjdGVk
X2luaXRpYWxfYWdlOworCXRpbWVfdCByZXNwb25zZV90aW1lOworCWdib29sZWFuIHdyaXRpbmc7
CisJZ2Jvb2xlYW4gZGlydHk7CisJZ2Jvb2xlYW4gZ290X2JvZHk7CisJZ2Jvb2xlYW4gYmVpbmdf
dmFsaWRhdGVkOworCVNvdXBNZXNzYWdlSGVhZGVycyAqaGVhZGVyczsKKwlHT3V0cHV0U3RyZWFt
ICpzdHJlYW07CisJR0Vycm9yICplcnJvcjsKKwlndWludCBoaXRzOworCUdDYW5jZWxsYWJsZSAq
Y2FuY2VsbGFibGU7Cit9IFdlYktpdFNvdXBDYWNoZUVudHJ5OworCitzdHJ1Y3QgX1dlYktpdFNv
dXBDYWNoZVByaXZhdGUgeworCWNoYXIgKmNhY2hlX2RpcjsKKwlHSGFzaFRhYmxlICpjYWNoZTsK
KwlndWludCBuX3BlbmRpbmc7CisJU291cFNlc3Npb24gKnNlc3Npb247CisJV2ViS2l0U291cENh
Y2hlVHlwZSBjYWNoZV90eXBlOworCWd1aW50IHNpemU7CisJZ3VpbnQgbWF4X3NpemU7CisJZ3Vp
bnQgbWF4X2VudHJ5X2RhdGFfc2l6ZTsgLyogQ29tcHV0ZWQgdmFsdWUuIEhlcmUgZm9yIHBlcmZv
cm1hbmNlIHJlYXNvbnMgKi8KKwlHTGlzdCAqbHJ1X3N0YXJ0OworfTsKKwordHlwZWRlZiBzdHJ1
Y3QgeworCVdlYktpdFNvdXBDYWNoZSAqY2FjaGU7CisJV2ViS2l0U291cENhY2hlRW50cnkgKmVu
dHJ5OworCVNvdXBNZXNzYWdlICptc2c7CisJZ3Vsb25nIGdvdF9jaHVua19oYW5kbGVyOworCWd1
bG9uZyBnb3RfYm9keV9oYW5kbGVyOworCWd1bG9uZyByZXN0YXJ0ZWRfaGFuZGxlcjsKK30gV2Vi
S2l0U291cENhY2hlV3JpdGluZ0ZpeHR1cmU7CisKK2VudW0geworCVBST1BfMCwKKwlQUk9QX0NB
Q0hFX0RJUiwKKwlQUk9QX0NBQ0hFX1RZUEUKK307CisKKyNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FD
SEVfR0VUX1BSSVZBVEUobykgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAoKG8pLCBXRUJL
SVRfVFlQRV9TT1VQX0NBQ0hFLCBXZWJLaXRTb3VwQ2FjaGVQcml2YXRlKSkKKworR19ERUZJTkVf
VFlQRV9XSVRIX0NPREUgKFdlYktpdFNvdXBDYWNoZSwgd2Via2l0X3NvdXBfY2FjaGUsIEdfVFlQ
RV9PQkpFQ1QsCisJCQkgR19JTVBMRU1FTlRfSU5URVJGQUNFIChTT1VQX1RZUEVfU0VTU0lPTl9G
RUFUVVJFLAorCQkJCQkJd2Via2l0X3NvdXBfY2FjaGVfc2Vzc2lvbl9mZWF0dXJlX2luaXQpKQor
CitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfcmVtb3ZlIChXZWJLaXRT
b3VwQ2FjaGUgKmNhY2hlLCBXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkpOworc3RhdGljIHZv
aWQgbWFrZV9yb29tX2Zvcl9uZXdfZW50cnkgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsIGd1aW50
IGxlbmd0aF90b19hZGQpOworc3RhdGljIGdib29sZWFuIGNhY2hlX2FjY2VwdHNfZW50cmllc19v
Zl9zaXplIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLCBndWludCBsZW5ndGhfdG9fYWRkKTsKKwor
c3RhdGljIFdlYktpdFNvdXBDYWNoZWFiaWxpdHkKK2dldF9jYWNoZWFiaWxpdHkgKFdlYktpdFNv
dXBDYWNoZSAqY2FjaGUsIFNvdXBNZXNzYWdlICptc2cpCit7CisJV2ViS2l0U291cENhY2hlYWJp
bGl0eSBjYWNoZWFiaWxpdHk7CisJY29uc3QgY2hhciAqY2FjaGVfY29udHJvbDsKKworCS8qIDEu
IFRoZSByZXF1ZXN0IG1ldGhvZCBtdXN0IGJlIGNhY2hlYWJsZSAqLworCWlmIChtc2ctPm1ldGhv
ZCA9PSBTT1VQX01FVEhPRF9HRVQpCisJCWNhY2hlYWJpbGl0eSA9IFdFQktJVF9TT1VQX0NBQ0hF
X0NBQ0hFQUJMRTsKKwllbHNlIGlmIChtc2ctPm1ldGhvZCA9PSBTT1VQX01FVEhPRF9IRUFEIHx8
CisJCSBtc2ctPm1ldGhvZCA9PSBTT1VQX01FVEhPRF9UUkFDRSB8fAorCQkgbXNnLT5tZXRob2Qg
PT0gU09VUF9NRVRIT0RfQ09OTkVDVCkKKwkJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FD
SEVBQkxFOworCWVsc2UKKwkJcmV0dXJuIChXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRSB8
IFdFQktJVF9TT1VQX0NBQ0hFX0lOVkFMSURBVEVTKTsKKworCWNhY2hlX2NvbnRyb2wgPSBzb3Vw
X21lc3NhZ2VfaGVhZGVyc19nZXQgKG1zZy0+cmVzcG9uc2VfaGVhZGVycywgIkNhY2hlLUNvbnRy
b2wiKTsKKwlpZiAoY2FjaGVfY29udHJvbCkgeworCQlHSGFzaFRhYmxlICpoYXNoOworCQlXZWJL
aXRTb3VwQ2FjaGVQcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfQ0FDSEVfR0VUX1BSSVZBVEUg
KGNhY2hlKTsKKworCQloYXNoID0gc291cF9oZWFkZXJfcGFyc2VfcGFyYW1fbGlzdCAoY2FjaGVf
Y29udHJvbCk7CisKKwkJLyogU2hhcmVkIGNhY2hlcyBNVVNUIE5PVCBzdG9yZSBwcml2YXRlIHJl
c291cmNlcyAqLworCQlpZiAocHJpdi0+Y2FjaGVfdHlwZSA9PSBXRUJLSVRfU09VUF9DQUNIRV9T
SEFSRUQpIHsKKwkJCWlmIChnX2hhc2hfdGFibGVfbG9va3VwX2V4dGVuZGVkIChoYXNoLCAicHJp
dmF0ZSIsIE5VTEwsIE5VTEwpKSB7CisJCQkJc291cF9oZWFkZXJfZnJlZV9wYXJhbV9saXN0ICho
YXNoKTsKKwkJCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEU7CisJCQl9CisJ
CX0KKworCQkvKiAyLiBUaGUgJ25vLXN0b3JlJyBjYWNoZSBkaXJlY3RpdmUgZG9lcyBub3QgYXBw
ZWFyIGluIHRoZQorCQkgKiBoZWFkZXJzCisJCSAqLworCQlpZiAoZ19oYXNoX3RhYmxlX2xvb2t1
cF9leHRlbmRlZCAoaGFzaCwgIm5vLXN0b3JlIiwgTlVMTCwgTlVMTCkpIHsKKwkJCXNvdXBfaGVh
ZGVyX2ZyZWVfcGFyYW1fbGlzdCAoaGFzaCk7CisJCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVf
VU5DQUNIRUFCTEU7CisJCX0KKworCQkvKiBUaGlzIGRvZXMgbm90IGFwcGVhciBpbiBzZWN0aW9u
IDIuMSwgYnV0IEkgdGhpbmsgaXQgbWFrZXMKKwkJICogc2Vuc2UgdG8gY2hlY2sgaXQgdG9vPwor
CQkgKi8KKwkJaWYgKGdfaGFzaF90YWJsZV9sb29rdXBfZXh0ZW5kZWQgKGhhc2gsICJuby1jYWNo
ZSIsIE5VTEwsIE5VTEwpKSB7CisJCQlzb3VwX2hlYWRlcl9mcmVlX3BhcmFtX2xpc3QgKGhhc2gp
OworCQkJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFOworCQl9CisJfQorCisJ
c3dpdGNoIChtc2ctPnN0YXR1c19jb2RlKSB7CisJCWNhc2UgU09VUF9TVEFUVVNfUEFSVElBTF9D
T05URU5UOgorCQkJLyogV2UgZG9uJ3QgY2FjaGUgcGFydGlhbCByZXNwb25zZXMsIGJ1dCB0aGV5
IG9ubHkKKwkJCSAqIGludmFsaWRhdGUgY2FjaGVkIGZ1bGwgcmVzcG9uc2VzIGlmIHRoZSBoZWFk
ZXJzCisJCQkgKiBkb24ndCBtYXRjaC4KKwkJCSAqLworCQkJY2FjaGVhYmlsaXR5ID0gV0VCS0lU
X1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEU7CisJCQlicmVhazsKKworCQljYXNlIFNPVVBfU1RBVFVT
X05PVF9NT0RJRklFRDoKKwkJCS8qIEEgMzA0IHJlc3BvbnNlIHZhbGlkYXRlcyBhbiBleGlzdGlu
ZyBjYWNoZSBlbnRyeSAqLworCQkJY2FjaGVhYmlsaXR5ID0gV0VCS0lUX1NPVVBfQ0FDSEVfVkFM
SURBVEVTOworCQkJYnJlYWs7CisKKwkJY2FzZSBTT1VQX1NUQVRVU19NVUxUSVBMRV9DSE9JQ0VT
OgorCQljYXNlIFNPVVBfU1RBVFVTX01PVkVEX1BFUk1BTkVOVExZOgorCQljYXNlIFNPVVBfU1RB
VFVTX0dPTkU6CisJCQkvKiBGSVhNRTogY2FjaGVhYmxlIHVubGVzcyBpbmRpY2F0ZWQgb3RoZXJ3
aXNlICovCisJCQljYWNoZWFiaWxpdHkgPSBXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRTsK
KwkJCWJyZWFrOworCisJCWNhc2UgU09VUF9TVEFUVVNfRk9VTkQ6CisJCWNhc2UgU09VUF9TVEFU
VVNfVEVNUE9SQVJZX1JFRElSRUNUOgorCQkJLyogRklYTUU6IGNhY2hlYWJsZSBpZiBleHBsaWNp
dGx5IGluZGljYXRlZCAqLworCQkJY2FjaGVhYmlsaXR5ID0gV0VCS0lUX1NPVVBfQ0FDSEVfVU5D
QUNIRUFCTEU7CisJCQlicmVhazsKKworCQljYXNlIFNPVVBfU1RBVFVTX1NFRV9PVEhFUjoKKwkJ
Y2FzZSBTT1VQX1NUQVRVU19GT1JCSURERU46CisJCWNhc2UgU09VUF9TVEFUVVNfTk9UX0ZPVU5E
OgorCQljYXNlIFNPVVBfU1RBVFVTX01FVEhPRF9OT1RfQUxMT1dFRDoKKwkJCXJldHVybiAoV0VC
S0lUX1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEUgfCBXRUJLSVRfU09VUF9DQUNIRV9JTlZBTElEQVRF
Uyk7CisKKwkJZGVmYXVsdDoKKwkJCS8qIEFueSA1eHggc3RhdHVzIG9yIGFueSA0eHggc3RhdHVz
IG5vdCBoYW5kbGVkIGFib3ZlCisJCQkgKiBpcyB1bmNhY2hlYWJsZSBidXQgZG9lc24ndCBicmVh
ayB0aGUgY2FjaGUuCisJCQkgKi8KKwkJCWlmICgobXNnLT5zdGF0dXNfY29kZSA+PSBTT1VQX1NU
QVRVU19CQURfUkVRVUVTVCAmJgorCQkJICAgICBtc2ctPnN0YXR1c19jb2RlIDw9IFNPVVBfU1RB
VFVTX0ZBSUxFRF9ERVBFTkRFTkNZKSB8fAorCQkJICAgIG1zZy0+c3RhdHVzX2NvZGUgPj0gU09V
UF9TVEFUVVNfSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJCXJldHVybiBXRUJLSVRfU09VUF9D
QUNIRV9VTkNBQ0hFQUJMRTsKKworCQkJLyogQW4gdW5yZWNvZ25pemVkIDJ4eCwgM3h4LCBvciA0
eHggcmVzcG9uc2UgYnJlYWtzCisJCQkgKiB0aGUgY2FjaGUuCisJCQkgKi8KKwkJCWlmICgobXNn
LT5zdGF0dXNfY29kZSA+IFNPVVBfU1RBVFVTX1BBUlRJQUxfQ09OVEVOVCAmJgorCQkJICAgICBt
c2ctPnN0YXR1c19jb2RlIDwgU09VUF9TVEFUVVNfTVVMVElQTEVfQ0hPSUNFUykgfHwKKwkJCSAg
ICAobXNnLT5zdGF0dXNfY29kZSA+IFNPVVBfU1RBVFVTX1RFTVBPUkFSWV9SRURJUkVDVCAmJgor
CQkJICAgICBtc2ctPnN0YXR1c19jb2RlIDwgU09VUF9TVEFUVVNfSU5URVJOQUxfU0VSVkVSX0VS
Uk9SKSkKKwkJCQlyZXR1cm4gKFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFIHwgV0VCS0lU
X1NPVVBfQ0FDSEVfSU5WQUxJREFURVMpOworCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGNhY2hl
YWJpbGl0eTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUg
KFdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSwgZ2Jvb2xlYW4gcHVyZ2UpCit7CisJaWYgKHB1
cmdlKSB7CisJCUdGaWxlICpmaWxlID0gZ19maWxlX25ld19mb3JfcGF0aCAoZW50cnktPmZpbGVu
YW1lKTsKKwkJZ19maWxlX2RlbGV0ZSAoZmlsZSwgTlVMTCwgTlVMTCk7CisJCWdfb2JqZWN0X3Vu
cmVmIChmaWxlKTsKKwl9CisKKwlnX2ZyZWUgKGVudHJ5LT5maWxlbmFtZSk7CisJZW50cnktPmZp
bGVuYW1lID0gTlVMTDsKKwlnX2ZyZWUgKGVudHJ5LT5rZXkpOworCWVudHJ5LT5rZXkgPSBOVUxM
OworCisJaWYgKGVudHJ5LT5oZWFkZXJzKSB7CisJCXNvdXBfbWVzc2FnZV9oZWFkZXJzX2ZyZWUg
KGVudHJ5LT5oZWFkZXJzKTsKKwkJZW50cnktPmhlYWRlcnMgPSBOVUxMOworCX0KKworCWlmIChl
bnRyeS0+ZGF0YSkgeworCQlnX3N0cmluZ19mcmVlIChlbnRyeS0+ZGF0YSwgVFJVRSk7CisJCWVu
dHJ5LT5kYXRhID0gTlVMTDsKKwl9CisJaWYgKGVudHJ5LT5lcnJvcikgeworCQlnX2Vycm9yX2Zy
ZWUgKGVudHJ5LT5lcnJvcik7CisJCWVudHJ5LT5lcnJvciA9IE5VTEw7CisJfQorCWlmIChlbnRy
eS0+Y2FuY2VsbGFibGUpIHsKKwkJZ19vYmplY3RfdW5yZWYgKGVudHJ5LT5jYW5jZWxsYWJsZSk7
CisJCWVudHJ5LT5jYW5jZWxsYWJsZSA9IE5VTEw7CisJfQorCisJZ19zbGljZV9mcmVlIChXZWJL
aXRTb3VwQ2FjaGVFbnRyeSwgZW50cnkpOworfQorCitzdGF0aWMgdm9pZAorY29weV9oZWFkZXJz
IChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSwgU291cE1lc3NhZ2VIZWFkZXJz
ICpoZWFkZXJzKQoreworCXNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZCAoaGVhZGVycywgbmFt
ZSwgdmFsdWUpOworfQorCitzdGF0aWMgdm9pZAordXBkYXRlX2hlYWRlcnMgKGNvbnN0IGNoYXIg
Km5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlLCBTb3VwTWVzc2FnZUhlYWRlcnMgKmhlYWRlcnMpCit7
CisJaWYgKHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldCAoaGVhZGVycywgbmFtZSkpCisJCXNvdXBf
bWVzc2FnZV9oZWFkZXJzX3JlcGxhY2UgKGhlYWRlcnMsIG5hbWUsIHZhbHVlKTsKKwllbHNlCisJ
CXNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZCAoaGVhZGVycywgbmFtZSwgdmFsdWUpOworfQor
CitzdGF0aWMgZ3VpbnQKK3dlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2dldF9jdXJyZW50X2FnZSAo
V2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5KQoreworCXRpbWVfdCBub3cgPSB0aW1lIChOVUxM
KTsKKwl0aW1lX3QgcmVzaWRlbnRfdGltZTsKKworCXJlc2lkZW50X3RpbWUgPSBub3cgLSBlbnRy
eS0+cmVzcG9uc2VfdGltZTsKKwlyZXR1cm4gZW50cnktPmNvcnJlY3RlZF9pbml0aWFsX2FnZSAr
IHJlc2lkZW50X3RpbWU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgord2Via2l0X3NvdXBfY2FjaGVf
ZW50cnlfaXNfZnJlc2hfZW5vdWdoIChXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnksIGludCBt
aW5fZnJlc2gpCit7CisJdW5zaWduZWQgbGltaXQgPSAobWluX2ZyZXNoID09IC0xKSA/IHdlYmtp
dF9zb3VwX2NhY2hlX2VudHJ5X2dldF9jdXJyZW50X2FnZSAoZW50cnkpIDogbWluX2ZyZXNoOwor
CXJldHVybiBlbnRyeS0+ZnJlc2huZXNzX2xpZmV0aW1lID4gbGltaXQ7Cit9CisKK3N0YXRpYyBj
aGFyICoKK3NvdXBfbWVzc2FnZV9nZXRfY2FjaGVfa2V5IChTb3VwTWVzc2FnZSAqbXNnKQorewor
CVNvdXBVUkkgKnVyaSA9IHNvdXBfbWVzc2FnZV9nZXRfdXJpIChtc2cpOworCXJldHVybiBzb3Vw
X3VyaV90b19zdHJpbmcgKHVyaSwgRkFMU0UpOworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3Nv
dXBfY2FjaGVfZW50cnlfc2V0X2ZyZXNobmVzcyAoV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5
LCBTb3VwTWVzc2FnZSAqbXNnLCBXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKQoreworCWNvbnN0IGNo
YXIgKmNhY2hlX2NvbnRyb2w7CisJY29uc3QgY2hhciAqZXhwaXJlcywgKmRhdGUsICpsYXN0X21v
ZGlmaWVkOworCUdIYXNoVGFibGUgKmhhc2g7CisKKwloYXNoID0gTlVMTDsKKworCWNhY2hlX2Nv
bnRyb2wgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKGVudHJ5LT5oZWFkZXJzLCAiQ2FjaGUt
Q29udHJvbCIpOworCWlmIChjYWNoZV9jb250cm9sKSB7CisJCWNvbnN0IGNoYXIgKm1heF9hZ2Us
ICpzX21heGFnZTsKKwkJZ2ludDY0IGZyZXNobmVzc19saWZldGltZSA9IDA7CisJCVdlYktpdFNv
dXBDYWNoZVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9DQUNIRV9HRVRfUFJJVkFURSAoY2Fj
aGUpOworCisJCWhhc2ggPSBzb3VwX2hlYWRlcl9wYXJzZV9wYXJhbV9saXN0IChjYWNoZV9jb250
cm9sKTsKKworCQkvKiBTaG91bGQgd2UgcmUtdmFsaWRhdGUgdGhlIGVudHJ5IHdoZW4gaXQgZ29l
cyBzdGFsZSAqLworCQllbnRyeS0+bXVzdF9yZXZhbGlkYXRlID0gKGdib29sZWFuKWdfaGFzaF90
YWJsZV9sb29rdXAgKGhhc2gsICJtdXN0LXJldmFsaWRhdGUiKTsKKworCQkvKiBTZWN0aW9uIDIu
My4xICovCisJCWlmIChwcml2LT5jYWNoZV90eXBlID09IFdFQktJVF9TT1VQX0NBQ0hFX1NIQVJF
RCkgeworCQkJc19tYXhhZ2UgPSBnX2hhc2hfdGFibGVfbG9va3VwIChoYXNoLCAicy1tYXhhZ2Ui
KTsKKwkJCWlmIChzX21heGFnZSkgeworCQkJCWZyZXNobmVzc19saWZldGltZSA9IGdfYXNjaWlf
c3RydG9sbCAoc19tYXhhZ2UsIE5VTEwsIDEwKTsKKwkJCQlpZiAoZnJlc2huZXNzX2xpZmV0aW1l
KSB7CisJCQkJCS8qIEltcGxpZXMgcHJveHktcmV2YWxpZGF0ZS4gVE9ETzogaXMgaXQgdHJ1ZT8g
Ki8KKwkJCQkJZW50cnktPm11c3RfcmV2YWxpZGF0ZSA9IFRSVUU7CisJCQkJCXNvdXBfaGVhZGVy
X2ZyZWVfcGFyYW1fbGlzdCAoaGFzaCk7CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQl9CisJCX0K
KworCQkvKiBJZiAnbWF4LWFnZScgY2FjaGUgZGlyZWN0aXZlIGlzIHByZXNlbnQsIHVzZSB0aGF0
ICovCisJCW1heF9hZ2UgPSBnX2hhc2hfdGFibGVfbG9va3VwIChoYXNoLCAibWF4LWFnZSIpOwor
CQlpZiAobWF4X2FnZSkKKwkJCWZyZXNobmVzc19saWZldGltZSA9IGdfYXNjaWlfc3RydG9sbCAo
bWF4X2FnZSwgTlVMTCwgMTApOworCisJCWlmIChmcmVzaG5lc3NfbGlmZXRpbWUpIHsKKwkJCWVu
dHJ5LT5mcmVzaG5lc3NfbGlmZXRpbWUgPSAoZ3VpbnQpTUlOIChmcmVzaG5lc3NfbGlmZXRpbWUs
IEdfTUFYVUlOVDMyKTsKKwkJCXNvdXBfaGVhZGVyX2ZyZWVfcGFyYW1fbGlzdCAoaGFzaCk7CisJ
CQlyZXR1cm47CisJCX0KKwl9CisKKwlpZiAoaGFzaCAhPSBOVUxMKQorCQlzb3VwX2hlYWRlcl9m
cmVlX3BhcmFtX2xpc3QgKGhhc2gpOworCisJLyogSWYgdGhlICdFeHBpcmVzJyByZXNwb25zZSBo
ZWFkZXIgaXMgcHJlc2VudCwgdXNlIGl0cyB2YWx1ZQorCSAqIG1pbnVzIHRoZSB2YWx1ZSBvZiB0
aGUgJ0RhdGUnIHJlc3BvbnNlIGhlYWRlcgorCSAqLworCWV4cGlyZXMgPSBzb3VwX21lc3NhZ2Vf
aGVhZGVyc19nZXQgKGVudHJ5LT5oZWFkZXJzLCAiRXhwaXJlcyIpOworCWRhdGUgPSBzb3VwX21l
c3NhZ2VfaGVhZGVyc19nZXQgKGVudHJ5LT5oZWFkZXJzLCAiRGF0ZSIpOworCWlmIChleHBpcmVz
ICYmIGRhdGUpIHsKKwkJU291cERhdGUgKmV4cGlyZXNfZCwgKmRhdGVfZDsKKwkJdGltZV90IGV4
cGlyZXNfdCwgZGF0ZV90OworCisJCWV4cGlyZXNfZCA9IHNvdXBfZGF0ZV9uZXdfZnJvbV9zdHJp
bmcgKGV4cGlyZXMpOworCQlpZiAoZXhwaXJlc19kKSB7CisJCQlkYXRlX2QgPSBzb3VwX2RhdGVf
bmV3X2Zyb21fc3RyaW5nIChkYXRlKTsKKworCQkJZXhwaXJlc190ID0gc291cF9kYXRlX3RvX3Rp
bWVfdCAoZXhwaXJlc19kKTsKKwkJCWRhdGVfdCA9IHNvdXBfZGF0ZV90b190aW1lX3QgKGRhdGVf
ZCk7CisKKwkJCXNvdXBfZGF0ZV9mcmVlIChleHBpcmVzX2QpOworCQkJc291cF9kYXRlX2ZyZWUg
KGRhdGVfZCk7CisKKwkJCWlmIChleHBpcmVzX3QgJiYgZGF0ZV90KSB7CisJCQkJZW50cnktPmZy
ZXNobmVzc19saWZldGltZSA9IChndWludClNQVggKGV4cGlyZXNfdCAtIGRhdGVfdCwgMCk7CisJ
CQkJcmV0dXJuOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogSWYgRXhwaXJlcyBpcyBub3QgYSB2
YWxpZCBkYXRlIHdlIHNob3VsZAorCQkJICAgdHJlYXQgaXQgYXMgYWxyZWFkeSBleHBpcmVkLCBz
ZWUgc2VjdGlvbgorCQkJICAgMy4zICovCisJCQllbnRyeS0+ZnJlc2huZXNzX2xpZmV0aW1lID0g
MDsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qIE90aGVyd2lzZSBhbiBoZXVyaXN0aWMgbWF5
IGJlIHVzZWQgKi8KKworCS8qIEhldXJpc3RpY3MgTVVTVCBOT1QgYmUgdXNlZCB3aXRoIHRoZXNl
IHN0YXR1cyBjb2RlcworCSAgIChzZWN0aW9uIDIuMy4xLjEpICovCisJaWYgKG1zZy0+c3RhdHVz
X2NvZGUgIT0gU09VUF9TVEFUVVNfT0sgJiYKKwkgICAgbXNnLT5zdGF0dXNfY29kZSAhPSBTT1VQ
X1NUQVRVU19OT05fQVVUSE9SSVRBVElWRSAmJgorCSAgICBtc2ctPnN0YXR1c19jb2RlICE9IFNP
VVBfU1RBVFVTX1BBUlRJQUxfQ09OVEVOVCAmJgorCSAgICBtc2ctPnN0YXR1c19jb2RlICE9IFNP
VVBfU1RBVFVTX01VTFRJUExFX0NIT0lDRVMgJiYKKwkgICAgbXNnLT5zdGF0dXNfY29kZSAhPSBT
T1VQX1NUQVRVU19NT1ZFRF9QRVJNQU5FTlRMWSAmJgorCSAgICBtc2ctPnN0YXR1c19jb2RlICE9
IFNPVVBfU1RBVFVTX0dPTkUpCisJCWdvdG8gZXhwaXJlOworCisJLyogVE9ETzogYXR0YWNoIHdh
cm5pbmcgMTEzIGlmIHJlc3BvbnNlJ3MgY3VycmVudF9hZ2UgaXMgbW9yZQorCSAgIHRoYW4gMjRo
IChzZWN0aW9uIDIuMy4xLjEpIHdoZW4gdXNpbmcgaGV1cmlzdGljcyAqLworCisJLyogTGFzdC1N
b2RpZmllZCBiYXNlZCBoZXVyaXN0aWMgKi8KKwlsYXN0X21vZGlmaWVkID0gc291cF9tZXNzYWdl
X2hlYWRlcnNfZ2V0IChlbnRyeS0+aGVhZGVycywgIkxhc3QtTW9kaWZpZWQiKTsKKwlpZiAobGFz
dF9tb2RpZmllZCkgeworCQlTb3VwRGF0ZSAqc291cF9kYXRlOworCQl0aW1lX3Qgbm93LCBsYXN0
X21vZGlmaWVkX3Q7CisKKwkJc291cF9kYXRlID0gc291cF9kYXRlX25ld19mcm9tX3N0cmluZyAo
bGFzdF9tb2RpZmllZCk7CisJCWxhc3RfbW9kaWZpZWRfdCA9IHNvdXBfZGF0ZV90b190aW1lX3Qg
KHNvdXBfZGF0ZSk7CisJCW5vdyA9IHRpbWUgKE5VTEwpOworCisjZGVmaW5lIEhFVVJJU1RJQ19G
QUNUT1IgMC4xIC8qIEZyb20gU2VjdGlvbiAyLjMuMS4xICovCisKKwkJZW50cnktPmZyZXNobmVz
c19saWZldGltZSA9IE1BWCAoMCwgKG5vdyAtIGxhc3RfbW9kaWZpZWRfdCkgKiBIRVVSSVNUSUNf
RkFDVE9SKTsKKwkJc291cF9kYXRlX2ZyZWUgKHNvdXBfZGF0ZSk7CisJfQorCisJcmV0dXJuOwor
CisgZXhwaXJlOgorCS8qIElmIGFsbCBlbHNlIGZhaWxzLCBtYWtlIHRoZSBlbnRyeSBleHBpcmUg
aW1tZWRpYXRlbHkgKi8KKwllbnRyeS0+ZnJlc2huZXNzX2xpZmV0aW1lID0gMDsKK30KKworc3Rh
dGljIFdlYktpdFNvdXBDYWNoZUVudHJ5ICoKK3dlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X25ldyAo
V2ViS2l0U291cENhY2hlICpjYWNoZSwgU291cE1lc3NhZ2UgKm1zZywgdGltZV90IHJlcXVlc3Rf
dGltZSwgdGltZV90IHJlc3BvbnNlX3RpbWUpCit7CisJV2ViS2l0U291cENhY2hlRW50cnkgKmVu
dHJ5OworCVNvdXBNZXNzYWdlSGVhZGVycyAqaGVhZGVyczsKKwljb25zdCBjaGFyICpkYXRlOwor
CWNoYXIgKm1kNTsKKworCWVudHJ5ID0gZ19zbGljZV9uZXcwIChXZWJLaXRTb3VwQ2FjaGVFbnRy
eSk7CisJZW50cnktPmRpcnR5ID0gRkFMU0U7CisJZW50cnktPndyaXRpbmcgPSBGQUxTRTsKKwll
bnRyeS0+Z290X2JvZHkgPSBGQUxTRTsKKwllbnRyeS0+YmVpbmdfdmFsaWRhdGVkID0gRkFMU0U7
CisJZW50cnktPmRhdGEgPSBnX3N0cmluZ19uZXcgKE5VTEwpOworCWVudHJ5LT5wb3MgPSAwOwor
CWVudHJ5LT5lcnJvciA9IE5VTEw7CisKKwkvKiBrZXkgJiBmaWxlbmFtZSAqLworCWVudHJ5LT5r
ZXkgPSBzb3VwX21lc3NhZ2VfZ2V0X2NhY2hlX2tleSAobXNnKTsKKwltZDUgPSBnX2NvbXB1dGVf
Y2hlY2tzdW1fZm9yX3N0cmluZyAoR19DSEVDS1NVTV9NRDUsIGVudHJ5LT5rZXksIC0xKTsKKwll
bnRyeS0+ZmlsZW5hbWUgPSBnX2J1aWxkX2ZpbGVuYW1lIChjYWNoZS0+cHJpdi0+Y2FjaGVfZGly
LCBtZDUsIE5VTEwpOworCWdfZnJlZSAobWQ1KTsKKworCS8qIEhlYWRlcnMgKi8KKwloZWFkZXJz
ID0gc291cF9tZXNzYWdlX2hlYWRlcnNfbmV3IChTT1VQX01FU1NBR0VfSEVBREVSU19SRVNQT05T
RSk7CisJc291cF9tZXNzYWdlX2hlYWRlcnNfZm9yZWFjaCAobXNnLT5yZXNwb25zZV9oZWFkZXJz
LAorCQkJCSAgICAgIChTb3VwTWVzc2FnZUhlYWRlcnNGb3JlYWNoRnVuYyljb3B5X2hlYWRlcnMs
CisJCQkJICAgICAgaGVhZGVycyk7CisJZW50cnktPmhlYWRlcnMgPSBoZWFkZXJzOworCisJLyog
TFJVIGxpc3QgKi8KKwllbnRyeS0+aGl0cyA9IDA7CisKKwkvKiBTZWN0aW9uIDIuMy4xLCBGcmVz
aG5lc3MgTGlmZXRpbWUgKi8KKwl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9zZXRfZnJlc2huZXNz
IChlbnRyeSwgbXNnLCBjYWNoZSk7CisKKwkvKiBTZWN0aW9uIDIuMy4yLCBDYWxjdWxhdGluZyBB
Z2UgKi8KKwlkYXRlID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0IChlbnRyeS0+aGVhZGVycywg
IkRhdGUiKTsKKworCWlmIChkYXRlKSB7CisJCVNvdXBEYXRlICpzb3VwX2RhdGU7CisJCWNvbnN0
IGNoYXIgKmFnZTsKKwkJdGltZV90IGRhdGVfdmFsdWUsIGFwcGFyZW50X2FnZSwgY29ycmVjdGVk
X3JlY2VpdmVkX2FnZSwgcmVzcG9uc2VfZGVsYXksIGFnZV92YWx1ZSA9IDA7CisKKwkJc291cF9k
YXRlID0gc291cF9kYXRlX25ld19mcm9tX3N0cmluZyAoZGF0ZSk7CisJCWRhdGVfdmFsdWUgPSBz
b3VwX2RhdGVfdG9fdGltZV90IChzb3VwX2RhdGUpOworCQlzb3VwX2RhdGVfZnJlZSAoc291cF9k
YXRlKTsKKworCQlhZ2UgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKGVudHJ5LT5oZWFkZXJz
LCAiQWdlIik7CisJCWlmIChhZ2UpCisJCQlhZ2VfdmFsdWUgPSBnX2FzY2lpX3N0cnRvbGwgKGFn
ZSwgTlVMTCwgMTApOworCisJCWVudHJ5LT5yZXNwb25zZV90aW1lID0gcmVzcG9uc2VfdGltZTsK
KwkJYXBwYXJlbnRfYWdlID0gTUFYICgwLCBlbnRyeS0+cmVzcG9uc2VfdGltZSAtIGRhdGVfdmFs
dWUpOworCQljb3JyZWN0ZWRfcmVjZWl2ZWRfYWdlID0gTUFYIChhcHBhcmVudF9hZ2UsIGFnZV92
YWx1ZSk7CisJCXJlc3BvbnNlX2RlbGF5ID0gZW50cnktPnJlc3BvbnNlX3RpbWUgLSByZXF1ZXN0
X3RpbWU7CisJCWVudHJ5LT5jb3JyZWN0ZWRfaW5pdGlhbF9hZ2UgPSBjb3JyZWN0ZWRfcmVjZWl2
ZWRfYWdlICsgcmVzcG9uc2VfZGVsYXk7CisJfSBlbHNlIHsKKwkJLyogSXMgdGhpcyBjb3JyZWN0
ID8gKi8KKwkJZW50cnktPmNvcnJlY3RlZF9pbml0aWFsX2FnZSA9IHRpbWUgKE5VTEwpOworCX0K
KworCXJldHVybiBlbnRyeTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX2NhY2hlX3dy
aXRpbmdfZml4dHVyZV9mcmVlIChXZWJLaXRTb3VwQ2FjaGVXcml0aW5nRml4dHVyZSAqZml4dHVy
ZSkKK3sKKwkvKiBGcmVlIGZpeHR1cmUuIEFuZCBkaXNjb25uZWN0IHNpZ25hbHMsIHdlIGRvbid0
IHdhbnQgdG8KKwkgICBsaXN0ZW4gdG8gbW9yZSBTb3VwTWVzc2FnZSBldmVudHMgYXMgd2UncmUg
ZmluaXNoZWQgd2l0aAorCSAgIHRoaXMgcmVzb3VyY2UgKi8KKwlpZiAoZ19zaWduYWxfaGFuZGxl
cl9pc19jb25uZWN0ZWQgKGZpeHR1cmUtPm1zZywgZml4dHVyZS0+Z290X2NodW5rX2hhbmRsZXIp
KQorCQlnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QgKGZpeHR1cmUtPm1zZywgZml4dHVyZS0+
Z290X2NodW5rX2hhbmRsZXIpOworCWlmIChnX3NpZ25hbF9oYW5kbGVyX2lzX2Nvbm5lY3RlZCAo
Zml4dHVyZS0+bXNnLCBmaXh0dXJlLT5nb3RfYm9keV9oYW5kbGVyKSkKKwkJZ19zaWduYWxfaGFu
ZGxlcl9kaXNjb25uZWN0IChmaXh0dXJlLT5tc2csIGZpeHR1cmUtPmdvdF9ib2R5X2hhbmRsZXIp
OworCWlmIChnX3NpZ25hbF9oYW5kbGVyX2lzX2Nvbm5lY3RlZCAoZml4dHVyZS0+bXNnLCBmaXh0
dXJlLT5yZXN0YXJ0ZWRfaGFuZGxlcikpCisJCWdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCAo
Zml4dHVyZS0+bXNnLCBmaXh0dXJlLT5yZXN0YXJ0ZWRfaGFuZGxlcik7CisJZ19vYmplY3RfdW5y
ZWYgKGZpeHR1cmUtPm1zZyk7CisJZ19vYmplY3RfdW5yZWYgKGZpeHR1cmUtPmNhY2hlKTsKKwln
X3NsaWNlX2ZyZWUgKFdlYktpdFNvdXBDYWNoZVdyaXRpbmdGaXh0dXJlLCBmaXh0dXJlKTsKK30K
Kworc3RhdGljIHZvaWQKK2Nsb3NlX3JlYWR5X2NiIChHT2JqZWN0ICpzb3VyY2UsIEdBc3luY1Jl
c3VsdCAqcmVzdWx0LCBXZWJLaXRTb3VwQ2FjaGVXcml0aW5nRml4dHVyZSAqZml4dHVyZSkKK3sK
KwlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkgPSBmaXh0dXJlLT5lbnRyeTsKKwlXZWJLaXRT
b3VwQ2FjaGUgKmNhY2hlID0gZml4dHVyZS0+Y2FjaGU7CisJR091dHB1dFN0cmVhbSAqc3RyZWFt
ID0gR19PVVRQVVRfU1RSRUFNIChzb3VyY2UpOworCWdvZmZzZXQgY29udGVudF9sZW5ndGg7CisK
KwlnX3dhcm5faWZfZmFpbCAoZW50cnktPmVycm9yID09IE5VTEwpOworCisJLyogRklYTUU6IHdo
YXQgZG8gd2UgZG8gb24gZXJyb3IgPyAqLworCisJaWYgKHN0cmVhbSkgeworCQlnX291dHB1dF9z
dHJlYW1fY2xvc2VfZmluaXNoIChzdHJlYW0sIHJlc3VsdCwgTlVMTCk7CisJCWdfb2JqZWN0X3Vu
cmVmIChzdHJlYW0pOworCX0KKwllbnRyeS0+c3RyZWFtID0gTlVMTDsKKworCWNvbnRlbnRfbGVu
Z3RoID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2NvbnRlbnRfbGVuZ3RoIChlbnRyeS0+aGVh
ZGVycyk7CisKKwkvKiBJZiB0aGUgcHJvY2VzcyB3YXMgY2FuY2VsbGVkLCB0aGVuIGRlbGV0ZSB0
aGUgZW50cnkgZnJvbQorCSAgIHRoZSBjYWNoZS4gRG8gaXQgYWxzbyBpZiB0aGUgc2l6ZSBvZiBh
IGNodW5rZWQgcmVzb3VyY2UgaXMKKwkgICB0b28gbXVjaCBmb3IgdGhlIGNhY2hlICovCisJaWYg
KGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkIChlbnRyeS0+Y2FuY2VsbGFibGUpKSB7CisJCWVu
dHJ5LT5kaXJ0eSA9IEZBTFNFOworCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9yZW1vdmUgKGNh
Y2hlLCBlbnRyeSk7CisJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUgKGVudHJ5LCBUUlVF
KTsKKwkJZW50cnkgPSBOVUxMOworCX0gZWxzZSBpZiAoKHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dl
dF9lbmNvZGluZyAoZW50cnktPmhlYWRlcnMpID09IFNPVVBfRU5DT0RJTkdfQ0hVTktFRCkgfHwK
KwkJICAgZW50cnktPmxlbmd0aCAhPSBjb250ZW50X2xlbmd0aCkgeworCQkvKiogVHdvIG9wdGlv
bnMgaGVyZToKKwkJICoKKwkJICogMS4gImNodW5rZWQiIGRhdGEsIGVudHJ5IHdhcyB0ZW1wb3Jh
cmlseSBhZGRlZCB0bworCQkgKiBjYWNoZSAoYXMgY29udGVudC1sZW5ndGggaXMgMCkgYW5kIG5v
dyB0aGF0IHdlIGhhdmUKKwkJICogdGhlIGFjdHVhbCBzaXplIHdlIGhhdmUgdG8gZXZhbHVhdGUg
aWYgd2Ugd2FudCBpdAorCQkgKiBpbiB0aGUgY2FjaGUgb3Igbm90CisJCSAqCisJCSAqIDIuIENv
bnRlbnQtTGVuZ3RoIGhhcyBhIGRpZmZlcmVudCB2YWx1ZSB0aGFuIGFjdHVhbAorCQkgKiBsZW5n
dGgsIG1lYW5zIHRoYXQgdGhlIGNvbnRlbnQgd2FzIGVuY29kZWQgZm9yCisJCSAqIHRyYW5zbWlz
c2lvbiAodHlwaWNhbGx5IGNvbXByZXNzZWQpIGFuZCB0aHVzIHdlCisJCSAqIGhhdmUgdG8gc3Vi
c3RyYWN0IHRoZSBjb250ZW50LWxlbmd0aCB2YWx1ZSB0aGF0IHdhcworCQkgKiBhZGRlZCB0byB0
aGUgY2FjaGUgYW5kIGFkZCB0aGUgdW5lbmNvZGVkIGxlbmd0aAorCQkgKiovCisJCWdpbnQgbGVu
Z3RoX3RvX2FkZCA9IGVudHJ5LT5sZW5ndGggLSBjb250ZW50X2xlbmd0aDsKKworCQkvKiBNYWtl
IHJvb20gaW4gY2FjaGUgaWYgbmVlZGVkICovCisJCWlmIChjYWNoZV9hY2NlcHRzX2VudHJpZXNf
b2Zfc2l6ZSAoY2FjaGUsIGxlbmd0aF90b19hZGQpKSB7CisJCQltYWtlX3Jvb21fZm9yX25ld19l
bnRyeSAoY2FjaGUsIGxlbmd0aF90b19hZGQpOworCisJCQljYWNoZS0+cHJpdi0+c2l6ZSArPSBs
ZW5ndGhfdG9fYWRkOworCQl9IGVsc2UgeworCQkJZW50cnktPmRpcnR5ID0gRkFMU0U7CisJCQl3
ZWJraXRfc291cF9jYWNoZV9lbnRyeV9yZW1vdmUgKGNhY2hlLCBlbnRyeSk7CisJCQl3ZWJraXRf
c291cF9jYWNoZV9lbnRyeV9mcmVlIChlbnRyeSwgVFJVRSk7CisJCQllbnRyeSA9IE5VTEw7CisJ
CX0KKwl9CisKKwlpZiAoZW50cnkpIHsKKwkJLyogR2V0IHJpZCBvZiB0aGUgR1N0cmluZyBpbiBt
ZW1vcnkgZm9yIHRoZSByZXNvdXJjZSBub3cgKi8KKwkJaWYgKGVudHJ5LT5kYXRhKSB7CisJCQln
X3N0cmluZ19mcmVlIChlbnRyeS0+ZGF0YSwgVFJVRSk7CisJCQllbnRyeS0+ZGF0YSA9IE5VTEw7
CisJCX0KKworCQllbnRyeS0+ZGlydHkgPSBGQUxTRTsKKwkJZW50cnktPndyaXRpbmcgPSBGQUxT
RTsKKwkJZW50cnktPmdvdF9ib2R5ID0gRkFMU0U7CisJCWVudHJ5LT5wb3MgPSAwOworCisJCWdf
b2JqZWN0X3VucmVmIChlbnRyeS0+Y2FuY2VsbGFibGUpOworCQllbnRyeS0+Y2FuY2VsbGFibGUg
PSBOVUxMOworCX0KKworCWNhY2hlLT5wcml2LT5uX3BlbmRpbmctLTsKKworCS8qIEZyZWVzICov
CisJd2Via2l0X3NvdXBfY2FjaGVfd3JpdGluZ19maXh0dXJlX2ZyZWUgKGZpeHR1cmUpOworfQor
CitzdGF0aWMgdm9pZAord3JpdGVfcmVhZHlfY2IgKEdPYmplY3QgKnNvdXJjZSwgR0FzeW5jUmVz
dWx0ICpyZXN1bHQsIFdlYktpdFNvdXBDYWNoZVdyaXRpbmdGaXh0dXJlICpmaXh0dXJlKQorewor
CUdPdXRwdXRTdHJlYW0gKnN0cmVhbSA9IEdfT1VUUFVUX1NUUkVBTSAoc291cmNlKTsKKwlHRXJy
b3IgKmVycm9yID0gTlVMTDsKKwlnc3NpemUgd3JpdGVfc2l6ZTsKKwlXZWJLaXRTb3VwQ2FjaGVF
bnRyeSAqZW50cnkgPSBmaXh0dXJlLT5lbnRyeTsKKworCWlmIChnX2NhbmNlbGxhYmxlX2lzX2Nh
bmNlbGxlZCAoZW50cnktPmNhbmNlbGxhYmxlKSkgeworCQlnX291dHB1dF9zdHJlYW1fY2xvc2Vf
YXN5bmMgKHN0cmVhbSwKKwkJCQkJICAgICBHX1BSSU9SSVRZX0xPVywKKwkJCQkJICAgICBlbnRy
eS0+Y2FuY2VsbGFibGUsCisJCQkJCSAgICAgKEdBc3luY1JlYWR5Q2FsbGJhY2spY2xvc2VfcmVh
ZHlfY2IsCisJCQkJCSAgICAgZml4dHVyZSk7CisJCXJldHVybjsKKwl9CisKKwl3cml0ZV9zaXpl
ID0gZ19vdXRwdXRfc3RyZWFtX3dyaXRlX2ZpbmlzaCAoc3RyZWFtLCByZXN1bHQsICZlcnJvcik7
CisJaWYgKHdyaXRlX3NpemUgPD0gMCB8fCBlcnJvcikgeworCQlpZiAoZXJyb3IpCisJCQllbnRy
eS0+ZXJyb3IgPSBlcnJvcjsKKwkJZ19vdXRwdXRfc3RyZWFtX2Nsb3NlX2FzeW5jIChzdHJlYW0s
CisJCQkJCSAgICAgR19QUklPUklUWV9MT1csCisJCQkJCSAgICAgZW50cnktPmNhbmNlbGxhYmxl
LAorCQkJCQkgICAgIChHQXN5bmNSZWFkeUNhbGxiYWNrKWNsb3NlX3JlYWR5X2NiLAorCQkJCQkg
ICAgIGZpeHR1cmUpOworCQkvKiBGSVhNRTogV2Ugc2hvdWxkIGNvbXBsZXRlbHkgc3RvcCBjYWNo
aW5nIHRoZQorCQkgICByZXNvdXJjZSBhdCB0aGlzIHBvaW50ICovCisJfSBlbHNlIHsKKwkJZW50
cnktPnBvcyArPSB3cml0ZV9zaXplOworCisJCS8qIEFyZSB3ZSBzdGlsbCB3cml0aW5nIGFuZCBp
cyB0aGVyZSBuZXcgZGF0YSB0byB3cml0ZQorCQkgICBhbHJlYWR5ID8gKi8KKwkJaWYgKGVudHJ5
LT5kYXRhICYmIGVudHJ5LT5wb3MgPCBlbnRyeS0+ZGF0YS0+bGVuKSB7CisJCQlnX291dHB1dF9z
dHJlYW1fd3JpdGVfYXN5bmMgKGVudHJ5LT5zdHJlYW0sCisJCQkJCQkgICAgIGVudHJ5LT5kYXRh
LT5zdHIgKyBlbnRyeS0+cG9zLAorCQkJCQkJICAgICBlbnRyeS0+ZGF0YS0+bGVuIC0gZW50cnkt
PnBvcywKKwkJCQkJCSAgICAgR19QUklPUklUWV9MT1csCisJCQkJCQkgICAgIGVudHJ5LT5jYW5j
ZWxsYWJsZSwKKwkJCQkJCSAgICAgKEdBc3luY1JlYWR5Q2FsbGJhY2spd3JpdGVfcmVhZHlfY2Is
CisJCQkJCQkgICAgIGZpeHR1cmUpOworCQl9IGVsc2UgeworCQkJZW50cnktPndyaXRpbmcgPSBG
QUxTRTsKKworCQkJaWYgKGVudHJ5LT5nb3RfYm9keSkgeworCQkJCS8qIElmIHdlIGFscmVhZHkg
cmVjZWl2ZWQgJ2dvdC1ib2R5JworCQkJCSAgIGFuZCB3ZSBoYXZlIHdyaXR0ZW4gYWxsIHRoZSBk
YXRhLAorCQkJCSAgIHdlIGNhbiBjbG9zZSB0aGUgc3RyZWFtICovCisJCQkJZ19vdXRwdXRfc3Ry
ZWFtX2Nsb3NlX2FzeW5jIChlbnRyeS0+c3RyZWFtLAorCQkJCQkJCSAgICAgR19QUklPUklUWV9M
T1csCisJCQkJCQkJICAgICBlbnRyeS0+Y2FuY2VsbGFibGUsCisJCQkJCQkJICAgICAoR0FzeW5j
UmVhZHlDYWxsYmFjayljbG9zZV9yZWFkeV9jYiwKKwkJCQkJCQkgICAgIGZpeHR1cmUpOworCQkJ
fQorCQl9CisJfQorfQorCitzdGF0aWMgdm9pZAorbXNnX2dvdF9jaHVua19jYiAoU291cE1lc3Nh
Z2UgKm1zZywgU291cEJ1ZmZlciAqY2h1bmssIFdlYktpdFNvdXBDYWNoZVdyaXRpbmdGaXh0dXJl
ICpmaXh0dXJlKQoreworCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSA9IGZpeHR1cmUtPmVu
dHJ5OworCisJZ19yZXR1cm5faWZfZmFpbCAoY2h1bmstPmRhdGEgJiYgY2h1bmstPmxlbmd0aCk7
CisJZ19yZXR1cm5faWZfZmFpbCAoZW50cnkpOworCisJLyogSWdub3JlIHRoaXMgaWYgdGhlIHdy
aXRpbmcgb3IgYXBwZW5kaW5nIHdhcyBjYW5jZWxsZWQgKi8KKwlpZiAoIWdfY2FuY2VsbGFibGVf
aXNfY2FuY2VsbGVkIChlbnRyeS0+Y2FuY2VsbGFibGUpKSB7CisJCWdfc3RyaW5nX2FwcGVuZF9s
ZW4gKGVudHJ5LT5kYXRhLCBjaHVuay0+ZGF0YSwgY2h1bmstPmxlbmd0aCk7CisJCWVudHJ5LT5s
ZW5ndGggPSBlbnRyeS0+ZGF0YS0+bGVuOworCisJCWlmICghY2FjaGVfYWNjZXB0c19lbnRyaWVz
X29mX3NpemUgKGZpeHR1cmUtPmNhY2hlLCBlbnRyeS0+bGVuZ3RoKSkgeworCQkJLyogUXVpY2ts
eSBjYW5jZWwgdGhlIGNhY2hpbmcgb2YgdGhlIHJlc291cmNlICovCisJCQlnX2NhbmNlbGxhYmxl
X2NhbmNlbCAoZW50cnktPmNhbmNlbGxhYmxlKTsKKwkJfQorCX0KKworCS8qIEZJWE1FOiByZW1v
dmUgdGhlIGVycm9yIGNoZWNrIHdoZW4gd2UgY2FuY2VsIHRoZSBjYWNoaW5nIGF0CisJICAgdGhl
IGZpcnN0IHdyaXRlIGVycm9yICovCisJLyogT25seSB3cml0ZSBpZiB0aGUgZW50cnkgc3RyZWFt
IGlzIHJlYWR5ICovCisJaWYgKGVudHJ5LT53cml0aW5nID09IEZBTFNFICYmIGVudHJ5LT5lcnJv
ciA9PSBOVUxMICYmIGVudHJ5LT5zdHJlYW0pIHsKKwkJR1N0cmluZyAqZGF0YSA9IGVudHJ5LT5k
YXRhOworCQllbnRyeS0+d3JpdGluZyA9IFRSVUU7CisJCWdfb3V0cHV0X3N0cmVhbV93cml0ZV9h
c3luYyAoZW50cnktPnN0cmVhbSwKKwkJCQkJICAgICBkYXRhLT5zdHIgKyBlbnRyeS0+cG9zLAor
CQkJCQkgICAgIGRhdGEtPmxlbiAtIGVudHJ5LT5wb3MsCisJCQkJCSAgICAgR19QUklPUklUWV9M
T1csCisJCQkJCSAgICAgZW50cnktPmNhbmNlbGxhYmxlLAorCQkJCQkgICAgIChHQXN5bmNSZWFk
eUNhbGxiYWNrKXdyaXRlX3JlYWR5X2NiLAorCQkJCQkgICAgIGZpeHR1cmUpOworCX0KK30KKwor
c3RhdGljIHZvaWQKK21zZ19nb3RfYm9keV9jYiAoU291cE1lc3NhZ2UgKm1zZywgV2ViS2l0U291
cENhY2hlV3JpdGluZ0ZpeHR1cmUgKmZpeHR1cmUpCit7CisJV2ViS2l0U291cENhY2hlRW50cnkg
KmVudHJ5ID0gZml4dHVyZS0+ZW50cnk7CisJZ19yZXR1cm5faWZfZmFpbCAoZW50cnkpOworCisJ
ZW50cnktPmdvdF9ib2R5ID0gVFJVRTsKKworCWlmICghZW50cnktPnN0cmVhbSAmJiBlbnRyeS0+
cG9zICE9IGVudHJ5LT5sZW5ndGgpCisJCS8qIFRoZSBzdHJlYW0gaXMgbm90IHJlYWR5IHRvIGJl
IHdyaXR0ZW4gYnV0IHdlIHN0aWxsCisJCSAgIGhhdmUgZGF0YSB0byB3cml0ZSwgd2UnbGwgd3Jp
dGUgaXQgd2hlbiB0aGUgc3RyZWFtCisJCSAgIGlzIG9wZW5lZCBmb3Igd3JpdGluZyAqLworCQly
ZXR1cm47CisKKworCWlmIChlbnRyeS0+cG9zICE9IGVudHJ5LT5sZW5ndGgpIHsKKwkJLyogSWYg
d2Ugc3RpbGwgaGF2ZSBkYXRhIHRvIHdyaXRlLCB3cml0ZSBpdCwKKwkJICAgd3JpdGVfcmVhZHlf
Y2Igd2lsbCBjbG9zZSB0aGUgc3RyZWFtICovCisJCWlmIChlbnRyeS0+d3JpdGluZyA9PSBGQUxT
RSAmJiBlbnRyeS0+ZXJyb3IgPT0gTlVMTCAmJiBlbnRyeS0+c3RyZWFtKSB7CisJCQlnX291dHB1
dF9zdHJlYW1fd3JpdGVfYXN5bmMgKGVudHJ5LT5zdHJlYW0sCisJCQkJCQkgICAgIGVudHJ5LT5k
YXRhLT5zdHIgKyBlbnRyeS0+cG9zLAorCQkJCQkJICAgICBlbnRyeS0+ZGF0YS0+bGVuIC0gZW50
cnktPnBvcywKKwkJCQkJCSAgICAgR19QUklPUklUWV9MT1csCisJCQkJCQkgICAgIGVudHJ5LT5j
YW5jZWxsYWJsZSwKKwkJCQkJCSAgICAgKEdBc3luY1JlYWR5Q2FsbGJhY2spd3JpdGVfcmVhZHlf
Y2IsCisJCQkJCQkgICAgIGZpeHR1cmUpOworCQl9CisJCXJldHVybjsKKwl9CisKKwlpZiAoZW50
cnktPnN0cmVhbSAmJiAhZW50cnktPndyaXRpbmcpCisJCWdfb3V0cHV0X3N0cmVhbV9jbG9zZV9h
c3luYyAoZW50cnktPnN0cmVhbSwKKwkJCQkJICAgICBHX1BSSU9SSVRZX0xPVywKKwkJCQkJICAg
ICBlbnRyeS0+Y2FuY2VsbGFibGUsCisJCQkJCSAgICAgKEdBc3luY1JlYWR5Q2FsbGJhY2spY2xv
c2VfcmVhZHlfY2IsCisJCQkJCSAgICAgZml4dHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgor
d2Via2l0X3NvdXBfY2FjaGVfZW50cnlfcmVtb3ZlIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLCBX
ZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkpCit7CisJR0xpc3QgKmxydV9pdGVtOworCisJLyog
aWYgKGVudHJ5LT5kaXJ0eSAmJiAhZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQgKGVudHJ5LT5j
YW5jZWxsYWJsZSkpIHsgKi8KKwlpZiAoZW50cnktPmRpcnR5KSB7CisJCWdfY2FuY2VsbGFibGVf
Y2FuY2VsIChlbnRyeS0+Y2FuY2VsbGFibGUpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJZ19h
c3NlcnQgKGdfbGlzdF9sZW5ndGggKGNhY2hlLT5wcml2LT5scnVfc3RhcnQpID09IGdfaGFzaF90
YWJsZV9zaXplIChjYWNoZS0+cHJpdi0+Y2FjaGUpKTsKKworCS8qIFJlbW92ZSBmcm9tIGNhY2hl
ICovCisJaWYgKCFnX2hhc2hfdGFibGVfcmVtb3ZlIChjYWNoZS0+cHJpdi0+Y2FjaGUsIGVudHJ5
LT5rZXkpKQorCQlyZXR1cm4gRkFMU0U7CisKKwkvKiBSZW1vdmUgZnJvbSBMUlUgKi8KKwlscnVf
aXRlbSA9IGdfbGlzdF9maW5kIChjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0LCBlbnRyeSk7CisJY2Fj
aGUtPnByaXYtPmxydV9zdGFydCA9IGdfbGlzdF9kZWxldGVfbGluayAoY2FjaGUtPnByaXYtPmxy
dV9zdGFydCwgbHJ1X2l0ZW0pOworCisJLyogQWRqdXN0IGNhY2hlIHNpemUgKi8KKwljYWNoZS0+
cHJpdi0+c2l6ZSAtPSBlbnRyeS0+bGVuZ3RoOworCisJZ19hc3NlcnQgKGdfbGlzdF9sZW5ndGgg
KGNhY2hlLT5wcml2LT5scnVfc3RhcnQpID09IGdfaGFzaF90YWJsZV9zaXplIChjYWNoZS0+cHJp
di0+Y2FjaGUpKTsKKworCXJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2ludAorbHJ1X2NvbXBh
cmVfZnVuYyAoZ2NvbnN0cG9pbnRlciBhLCBnY29uc3Rwb2ludGVyIGIpCit7CisJV2ViS2l0U291
cENhY2hlRW50cnkgKmVudHJ5X2EgPSAoV2ViS2l0U291cENhY2hlRW50cnkgKilhOworCVdlYktp
dFNvdXBDYWNoZUVudHJ5ICplbnRyeV9iID0gKFdlYktpdFNvdXBDYWNoZUVudHJ5ICopYjsKKwor
CS8qKiBUaGUgcmF0aW9uYWxlIG9mIHRoaXMgc29ydGluZyBmdW5jIGlzCisJICoKKwkgKiAxLiBz
b3J0IGJ5IGhpdHMgLT4gTFJVIGFsZ29yaXRobSwgdGhlbgorCSAqCisJICogMi4gc29ydCBieSBm
cmVzaG5lc3MgbGlmZXRpbWUsIHdlIGJldHRlciBkaXNjYXJkIGZpcnN0CisJICogZW50cmllcyB0
aGF0IGFyZSBjbG9zZSB0byBleHBpcmUKKwkgKgorCSAqIDMuIHNvcnQgYnkgc2l6ZSwgcmVwbGFj
ZSBmaXJzdCBzbWFsbCBzaXplIHJlc291cmNlcyBhcyB0aGV5CisJICogYXJlIGNoZWFwZXIgdG8g
ZG93bmxvYWQKKwkgKiovCisKKwkvKiBTb3J0IGJ5IGhpdHMgKi8KKwlpZiAoZW50cnlfYS0+aGl0
cyAhPSBlbnRyeV9iLT5oaXRzKQorCQlyZXR1cm4gZW50cnlfYS0+aGl0cyAtIGVudHJ5X2ItPmhp
dHM7CisKKwkvKiBTb3J0IGJ5IGZyZXNobmVzc19saWZldGltZSAqLworCWlmIChlbnRyeV9hLT5m
cmVzaG5lc3NfbGlmZXRpbWUgIT0gZW50cnlfYi0+ZnJlc2huZXNzX2xpZmV0aW1lKQorCQlyZXR1
cm4gZW50cnlfYS0+ZnJlc2huZXNzX2xpZmV0aW1lIC0gZW50cnlfYi0+ZnJlc2huZXNzX2xpZmV0
aW1lOworCisJLyogU29ydCBieSBzaXplICovCisJcmV0dXJuIGVudHJ5X2EtPmxlbmd0aCAtIGVu
dHJ5X2ItPmxlbmd0aDsKK30KKworc3RhdGljIGdib29sZWFuCitjYWNoZV9hY2NlcHRzX2VudHJp
ZXNfb2Zfc2l6ZSAoV2ViS2l0U291cENhY2hlICpjYWNoZSwgZ3VpbnQgbGVuZ3RoX3RvX2FkZCkK
K3sKKwkvKiBXZSBjb3VsZCBhZGQgaGVyZSBzb21lIG1vcmUgaGV1cmlzdGljcy4gVE9ETzogcmV2
aWV3IGhvdworCSAgIHRoaXMgaXMgZG9uZSBieSBvdGhlciBIVFRQIGNhY2hlcyAqLworCisJcmV0
dXJuIGxlbmd0aF90b19hZGQgPD0gY2FjaGUtPnByaXYtPm1heF9lbnRyeV9kYXRhX3NpemU7Cit9
CisKK3N0YXRpYyB2b2lkCittYWtlX3Jvb21fZm9yX25ld19lbnRyeSAoV2ViS2l0U291cENhY2hl
ICpjYWNoZSwgZ3VpbnQgbGVuZ3RoX3RvX2FkZCkKK3sKKwlHTGlzdCAqbHJ1X2VudHJ5ID0gY2Fj
aGUtPnByaXYtPmxydV9zdGFydDsKKworCS8qIENoZWNrIHRoYXQgdGhlcmUgaXMgZW5vdWdoIHJv
b20gZm9yIHRoZSBuZXcgZW50cnkuIFRoaXMgaXMKKwkgICBhbiBhcHByb3hpbWF0aW9uIGFzIHdl
J3JlIG5vdCB3b3JraW5nIG91dCB0aGUgc2l6ZSBvZiB0aGUKKwkgICBjYWNoZSBmaWxlIG9yIHRo
ZSBzaXplIG9mIHRoZSBoZWFkZXJzIGZvciBwZXJmb3JtYW5jZQorCSAgIHJlYXNvbnMuIFRPRE86
IGNoZWNrIGlmIHRoYXQgd291bGQgYmUgcmVhbGx5IHRoYXQgZXhwZW5zaXZlICovCisKKwl3aGls
ZSAobHJ1X2VudHJ5ICYmCisJICAgICAgIChsZW5ndGhfdG9fYWRkICsgY2FjaGUtPnByaXYtPnNp
emUgPiBjYWNoZS0+cHJpdi0+bWF4X3NpemUpKSB7CisJCVdlYktpdFNvdXBDYWNoZUVudHJ5ICpv
bGRfZW50cnkgPSAoV2ViS2l0U291cENhY2hlRW50cnkgKilscnVfZW50cnktPmRhdGE7CisKKwkJ
LyogRGlzY2FyZCBlbnRyaWVzLiBPbmNlIGNhbmNlbGxlZCByZXNvdXJjZXMgd2lsbCBiZQorCQkg
KiBmcmVlZCBpbiBjbG9zZV9yZWFkeV9jYgorCQkgKi8KKwkJaWYgKHdlYmtpdF9zb3VwX2NhY2hl
X2VudHJ5X3JlbW92ZSAoY2FjaGUsIG9sZF9lbnRyeSkpIHsKKwkJCXdlYmtpdF9zb3VwX2NhY2hl
X2VudHJ5X2ZyZWUgKG9sZF9lbnRyeSwgVFJVRSk7CisJCQlscnVfZW50cnkgPSBjYWNoZS0+cHJp
di0+bHJ1X3N0YXJ0OworCQl9IGVsc2UKKwkJCWxydV9lbnRyeSA9IGdfbGlzdF9uZXh0IChscnVf
ZW50cnkpOworCX0KK30KKworc3RhdGljIGdib29sZWFuCit3ZWJraXRfc291cF9jYWNoZV9lbnRy
eV9pbnNlcnRfYnlfa2V5IChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLAorCQkJCSAgICAgICBjb25z
dCBjaGFyICprZXksCisJCQkJICAgICAgIFdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSwKKwkJ
CQkgICAgICAgZ2Jvb2xlYW4gc29ydCkKK3sKKwlndWludCBsZW5ndGhfdG9fYWRkID0gMDsKKwor
CWlmIChzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfZW5jb2RpbmcgKGVudHJ5LT5oZWFkZXJzKSAh
PSBTT1VQX0VOQ09ESU5HX0NIVU5LRUQpCisJCWxlbmd0aF90b19hZGQgPSBzb3VwX21lc3NhZ2Vf
aGVhZGVyc19nZXRfY29udGVudF9sZW5ndGggKGVudHJ5LT5oZWFkZXJzKTsKKworCS8qIENoZWNr
IGlmIHdlIGFyZSBnb2luZyB0byBzdG9yZSB0aGUgcmVzb3VyY2UgZGVwZW5kaW5nIG9uIGl0cyBz
aXplICovCisJaWYgKGxlbmd0aF90b19hZGQpIHsKKwkJaWYgKCFjYWNoZV9hY2NlcHRzX2VudHJp
ZXNfb2Zfc2l6ZSAoY2FjaGUsIGxlbmd0aF90b19hZGQpKQorCQkJcmV0dXJuIEZBTFNFOworCisJ
CS8qIE1ha2Ugcm9vbSBmb3IgbmV3IGVudHJ5IGlmIG5lZWRlZCAqLworCQltYWtlX3Jvb21fZm9y
X25ld19lbnRyeSAoY2FjaGUsIGxlbmd0aF90b19hZGQpOworCX0KKworCWdfaGFzaF90YWJsZV9p
bnNlcnQgKGNhY2hlLT5wcml2LT5jYWNoZSwgZ19zdHJkdXAgKGtleSksIGVudHJ5KTsKKworCS8q
IENvbXB1dGUgbmV3IGNhY2hlIHNpemUgKi8KKwljYWNoZS0+cHJpdi0+c2l6ZSArPSBsZW5ndGhf
dG9fYWRkOworCisJLyogVXBkYXRlIExSVSAqLworCWlmIChzb3J0KQorCQljYWNoZS0+cHJpdi0+
bHJ1X3N0YXJ0ID0gZ19saXN0X2luc2VydF9zb3J0ZWQgKGNhY2hlLT5wcml2LT5scnVfc3RhcnQs
IGVudHJ5LCBscnVfY29tcGFyZV9mdW5jKTsKKwllbHNlCisJCWNhY2hlLT5wcml2LT5scnVfc3Rh
cnQgPSBnX2xpc3RfcHJlcGVuZCAoY2FjaGUtPnByaXYtPmxydV9zdGFydCwgZW50cnkpOworCisJ
Z19hc3NlcnQgKGdfbGlzdF9sZW5ndGggKGNhY2hlLT5wcml2LT5scnVfc3RhcnQpID09IGdfaGFz
aF90YWJsZV9zaXplIChjYWNoZS0+cHJpdi0+Y2FjaGUpKTsKKworCXJldHVybiBUUlVFOworfQor
CitzdGF0aWMgdm9pZAorbXNnX3Jlc3RhcnRlZF9jYiAoU291cE1lc3NhZ2UgKm1zZywgV2ViS2l0
U291cENhY2hlRW50cnkgKmVudHJ5KQoreworCS8qIEZJWE1FOiBXaGF0IHNob3VsZCB3ZSBkbyBo
ZXJlIGV4YWN0bHk/ICovCit9CisKK3N0YXRpYyB2b2lkCithcHBlbmRfdG9fcmVhZHlfY2IgKEdP
YmplY3QgKnNvdXJjZSwgR0FzeW5jUmVzdWx0ICpyZXN1bHQsIFdlYktpdFNvdXBDYWNoZVdyaXRp
bmdGaXh0dXJlICpmaXh0dXJlKQoreworCUdGaWxlICpmaWxlID0gKEdGaWxlICopc291cmNlOwor
CUdPdXRwdXRTdHJlYW0gKnN0cmVhbTsKKwlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkgPSBm
aXh0dXJlLT5lbnRyeTsKKworCXN0cmVhbSA9IChHT3V0cHV0U3RyZWFtICopZ19maWxlX2FwcGVu
ZF90b19maW5pc2ggKGZpbGUsIHJlc3VsdCwgJmVudHJ5LT5lcnJvcik7CisKKwlpZiAoZ19jYW5j
ZWxsYWJsZV9pc19jYW5jZWxsZWQgKGVudHJ5LT5jYW5jZWxsYWJsZSkgfHwgZW50cnktPmVycm9y
KSB7CisJCWZpeHR1cmUtPmNhY2hlLT5wcml2LT5uX3BlbmRpbmctLTsKKwkJZW50cnktPmRpcnR5
ID0gRkFMU0U7CisJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X3JlbW92ZSAoZml4dHVyZS0+Y2Fj
aGUsIGVudHJ5KTsKKwkJd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfZnJlZSAoZW50cnksIFRSVUUp
OworCQl3ZWJraXRfc291cF9jYWNoZV93cml0aW5nX2ZpeHR1cmVfZnJlZSAoZml4dHVyZSk7CisJ
CXJldHVybjsKKwl9CisKKwllbnRyeS0+c3RyZWFtID0gZ19vYmplY3RfcmVmIChzdHJlYW0pOwor
CWdfb2JqZWN0X3VucmVmIChmaWxlKTsKKworCS8qIElmIHdlIGFscmVhZHkgZ290IGFsbCB0aGUg
ZGF0YSB3ZSBoYXZlIHRvIGluaXRpYXRlIHRoZQorCSAgIHdyaXRpbmcgaGVyZSwgc2luY2Ugd2Ug
d29uJ3QgZ2V0IG1vcmUgJ2dvdC1jaHVuaycKKwkgICBzaWduYWxzICovCisJaWYgKGVudHJ5LT5n
b3RfYm9keSkgeworCQlHU3RyaW5nICpkYXRhID0gZW50cnktPmRhdGE7CisKKwkJLyogSXQgY291
bGQgaGFwcGVuIHRoYXQgcmVhZGluZyB0aGUgZGF0YSBmcm9tIHNlcnZlcgorCQkgICB3YXMgY29t
cGxldGVkIGJlZm9yZSB0aGlzIGhhcHBlbnMuIEluIHRoYXQgY2FzZQorCQkgICB0aGVyZSBpcyBu
byBkYXRhICovCisJCWlmIChkYXRhKSB7CisJCQllbnRyeS0+d3JpdGluZyA9IFRSVUU7CisJCQln
X291dHB1dF9zdHJlYW1fd3JpdGVfYXN5bmMgKGVudHJ5LT5zdHJlYW0sCisJCQkJCQkgICAgIGRh
dGEtPnN0ciArIGVudHJ5LT5wb3MsCisJCQkJCQkgICAgIGRhdGEtPmxlbiAtIGVudHJ5LT5wb3Ms
CisJCQkJCQkgICAgIEdfUFJJT1JJVFlfTE9XLAorCQkJCQkJICAgICBlbnRyeS0+Y2FuY2VsbGFi
bGUsCisJCQkJCQkgICAgIChHQXN5bmNSZWFkeUNhbGxiYWNrKXdyaXRlX3JlYWR5X2NiLAorCQkJ
CQkJICAgICBmaXh0dXJlKTsKKwkJfQorCX0KK30KKwordHlwZWRlZiBzdHJ1Y3QgeworCXRpbWVf
dCByZXF1ZXN0X3RpbWU7CisJU291cFNlc3Npb25GZWF0dXJlICpmZWF0dXJlOworCWd1bG9uZyBn
b3RfaGVhZGVyc19oYW5kbGVyOworfSBSZXF1ZXN0SGVscGVyOworCitzdGF0aWMgdm9pZAorbXNn
X2dvdF9oZWFkZXJzX2NiIChTb3VwTWVzc2FnZSAqbXNnLCBncG9pbnRlciB1c2VyX2RhdGEpCit7
CisJV2ViS2l0U291cENhY2hlICpjYWNoZTsKKwlXZWJLaXRTb3VwQ2FjaGVhYmlsaXR5IGNhY2hl
YWJsZTsKKwlSZXF1ZXN0SGVscGVyICpoZWxwZXI7CisJdGltZV90IHJlcXVlc3RfdGltZSwgcmVz
cG9uc2VfdGltZTsKKworCXJlc3BvbnNlX3RpbWUgPSB0aW1lIChOVUxMKTsKKworCWhlbHBlciA9
IChSZXF1ZXN0SGVscGVyICopdXNlcl9kYXRhOworCWNhY2hlID0gV0VCS0lUX1NPVVBfQ0FDSEUg
KGhlbHBlci0+ZmVhdHVyZSk7CisJcmVxdWVzdF90aW1lID0gaGVscGVyLT5yZXF1ZXN0X3RpbWU7
CisJZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jIChtc2csIG1zZ19nb3RfaGVh
ZGVyc19jYiwgdXNlcl9kYXRhKTsKKwlnX3NsaWNlX2ZyZWUgKFJlcXVlc3RIZWxwZXIsIGhlbHBl
cik7CisKKwljYWNoZWFibGUgPSB3ZWJraXRfc291cF9jYWNoZV9nZXRfY2FjaGVhYmlsaXR5IChj
YWNoZSwgbXNnKTsKKworCWlmIChjYWNoZWFibGUgJiBXRUJLSVRfU09VUF9DQUNIRV9DQUNIRUFC
TEUpIHsKKwkJV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5OworCQljaGFyICprZXk7CisJCUdG
aWxlICpmaWxlOworCQlXZWJLaXRTb3VwQ2FjaGVXcml0aW5nRml4dHVyZSAqZml4dHVyZTsKKwor
CQkvKiBDaGVjayBpZiB3ZSBhcmUgYWxyZWFkeSBjYWNoaW5nIHRoaXMgcmVzb3VyY2UgKi8KKwkJ
a2V5ID0gc291cF9tZXNzYWdlX2dldF9jYWNoZV9rZXkgKG1zZyk7CisJCWVudHJ5ID0gZ19oYXNo
X3RhYmxlX2xvb2t1cCAoY2FjaGUtPnByaXYtPmNhY2hlLCBrZXkpOworCQlnX2ZyZWUgKGtleSk7
CisKKwkJaWYgKGVudHJ5ICYmIGVudHJ5LT5kaXJ0eSkKKwkJCXJldHVybjsKKworCQkvKiBDcmVh
dGUgYSBuZXcgZW50cnksIGRlbGV0aW5nIGFueSBvbGQgb25lIGlmIHByZXNlbnQgKi8KKwkJaWYg
KGVudHJ5KSB7CisJCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9yZW1vdmUgKGNhY2hlLCBlbnRy
eSk7CisJCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9mcmVlIChlbnRyeSwgVFJVRSk7CisJCX0K
KworCQllbnRyeSA9IHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X25ldyAoY2FjaGUsIG1zZywgcmVx
dWVzdF90aW1lLCByZXNwb25zZV90aW1lKTsKKwkJZW50cnktPmhpdHMgPSAxOworCisJCS8qIERv
IG5vdCBjb250aW51ZSBpZiBpdCBjYW4gbm90IGJlIHN0b3JlZCAqLworCQlpZiAoIXdlYmtpdF9z
b3VwX2NhY2hlX2VudHJ5X2luc2VydF9ieV9rZXkgKGNhY2hlLCAoY29uc3QgZ2NoYXIgKillbnRy
eS0+a2V5LCBlbnRyeSwgVFJVRSkpIHsKKwkJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUg
KGVudHJ5LCBUUlVFKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWZpeHR1cmUgPSBnX3NsaWNlX25l
dzAgKFdlYktpdFNvdXBDYWNoZVdyaXRpbmdGaXh0dXJlKTsKKwkJZml4dHVyZS0+Y2FjaGUgPSBn
X29iamVjdF9yZWYgKGNhY2hlKTsKKwkJZml4dHVyZS0+ZW50cnkgPSBlbnRyeTsKKwkJZml4dHVy
ZS0+bXNnID0gZ19vYmplY3RfcmVmIChtc2cpOworCisJCS8qIFdlIGNvbm5lY3Qgbm93IHRvIHRo
ZXNlIHNpZ25hbHMgYW5kIGJ1ZmZlciB0aGUgZGF0YQorCQkgICBpZiBpdCBjb21lcyBiZWZvcmUg
dGhlIGZpbGUgaXMgcmVhZHkgZm9yIHdyaXRpbmcgKi8KKwkJZml4dHVyZS0+Z290X2NodW5rX2hh
bmRsZXIgPQorCQkJZ19zaWduYWxfY29ubmVjdCAobXNnLCAiZ290LWNodW5rIiwgR19DQUxMQkFD
SyAobXNnX2dvdF9jaHVua19jYiksIGZpeHR1cmUpOworCQlmaXh0dXJlLT5nb3RfYm9keV9oYW5k
bGVyID0KKwkJCWdfc2lnbmFsX2Nvbm5lY3QgKG1zZywgImdvdC1ib2R5IiwgR19DQUxMQkFDSyAo
bXNnX2dvdF9ib2R5X2NiKSwgZml4dHVyZSk7CisJCWZpeHR1cmUtPnJlc3RhcnRlZF9oYW5kbGVy
ID0KKwkJCWdfc2lnbmFsX2Nvbm5lY3QgKG1zZywgInJlc3RhcnRlZCIsIEdfQ0FMTEJBQ0sgKG1z
Z19yZXN0YXJ0ZWRfY2IpLCBlbnRyeSk7CisKKwkJLyogUHJlcGFyZSBlbnRyeSAqLworCQlmaWxl
ID0gZ19maWxlX25ld19mb3JfcGF0aCAoZW50cnktPmZpbGVuYW1lKTsKKwkJY2FjaGUtPnByaXYt
Pm5fcGVuZGluZysrOworCisJCWVudHJ5LT5kaXJ0eSA9IFRSVUU7CisJCWVudHJ5LT5jYW5jZWxs
YWJsZSA9IGdfY2FuY2VsbGFibGVfbmV3ICgpOworCQlnX2ZpbGVfYXBwZW5kX3RvX2FzeW5jIChm
aWxlLCAwLAorCQkJCQlHX1BSSU9SSVRZX0xPVywgZW50cnktPmNhbmNlbGxhYmxlLAorCQkJCQko
R0FzeW5jUmVhZHlDYWxsYmFjaylhcHBlbmRfdG9fcmVhZHlfY2IsCisJCQkJCWZpeHR1cmUpOwor
CX0gZWxzZSBpZiAoY2FjaGVhYmxlICYgV0VCS0lUX1NPVVBfQ0FDSEVfSU5WQUxJREFURVMpIHsK
KwkJY2hhciAqa2V5OworCQlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnk7CisKKwkJa2V5ID0g
c291cF9tZXNzYWdlX2dldF9jYWNoZV9rZXkgKG1zZyk7CisJCWVudHJ5ID0gZ19oYXNoX3RhYmxl
X2xvb2t1cCAoY2FjaGUtPnByaXYtPmNhY2hlLCBrZXkpOworCQlnX2ZyZWUgKGtleSk7CisKKwkJ
aWYgKGVudHJ5KSB7CisJCQlpZiAod2Via2l0X3NvdXBfY2FjaGVfZW50cnlfcmVtb3ZlIChjYWNo
ZSwgZW50cnkpKQorCQkJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUgKGVudHJ5LCBUUlVF
KTsKKwkJfQorCX0gZWxzZSBpZiAoY2FjaGVhYmxlICYgV0VCS0lUX1NPVVBfQ0FDSEVfVkFMSURB
VEVTKSB7CisJCWNoYXIgKmtleTsKKwkJV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5OworCisJ
CWtleSA9IHNvdXBfbWVzc2FnZV9nZXRfY2FjaGVfa2V5IChtc2cpOworCQllbnRyeSA9IGdfaGFz
aF90YWJsZV9sb29rdXAgKGNhY2hlLT5wcml2LT5jYWNoZSwga2V5KTsKKwkJZ19mcmVlIChrZXkp
OworCisJCWdfcmV0dXJuX2lmX2ZhaWwgKGVudHJ5KTsKKworCQllbnRyeS0+YmVpbmdfdmFsaWRh
dGVkID0gRkFMU0U7CisKKwkJLyogV2UgdXBkYXRlIHRoZSBoZWFkZXJzIG9mIHRoZSBleGlzdGlu
ZyBjYWNoZSBpdGVtLAorCQkgICBwbHVzIGl0cyBhZ2UgKi8KKwkJc291cF9tZXNzYWdlX2hlYWRl
cnNfZm9yZWFjaCAobXNnLT5yZXNwb25zZV9oZWFkZXJzLAorCQkJCQkgICAgICAoU291cE1lc3Nh
Z2VIZWFkZXJzRm9yZWFjaEZ1bmMpdXBkYXRlX2hlYWRlcnMsCisJCQkJCSAgICAgIGVudHJ5LT5o
ZWFkZXJzKTsKKwkJd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfc2V0X2ZyZXNobmVzcyAoZW50cnks
IG1zZywgY2FjaGUpOworCX0KK30KKworR0lucHV0U3RyZWFtICoKK3dlYmtpdF9zb3VwX2NhY2hl
X3NlbmRfcmVzcG9uc2UgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsIFNvdXBNZXNzYWdlICptc2cp
Cit7CisJY2hhciAqa2V5OworCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeTsKKwljaGFyICpj
dXJyZW50X2FnZTsKKwlHSW5wdXRTdHJlYW0gKnN0cmVhbSA9IE5VTEw7CisJR0ZpbGUgKmZpbGU7
CisKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoV0VCS0lUX0lTX1NPVVBfQ0FDSEUgKGNhY2hlKSwg
TlVMTCk7CisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFNPVVBfSVNfTUVTU0FHRSAobXNnKSwgTlVM
TCk7CisKKwlrZXkgPSBzb3VwX21lc3NhZ2VfZ2V0X2NhY2hlX2tleSAobXNnKTsKKwllbnRyeSA9
IGdfaGFzaF90YWJsZV9sb29rdXAgKGNhY2hlLT5wcml2LT5jYWNoZSwga2V5KTsKKwlnX3JldHVy
bl92YWxfaWZfZmFpbCAoZW50cnksIE5VTEwpOworCisJLyogSWYgd2UgYXJlIHRvbGQgdG8gc2Vu
ZCBhIHJlc3BvbnNlIGZyb20gY2FjaGUgYW55IHZhbGlkYXRpb24KKwkgICBpbiBjb3Vyc2UgaXMg
b3ZlciBieSBub3cgKi8KKwllbnRyeS0+YmVpbmdfdmFsaWRhdGVkID0gRkFMU0U7CisKKwkvKiBI
ZWFkZXJzICovCisJc291cF9tZXNzYWdlX2hlYWRlcnNfZm9yZWFjaCAoZW50cnktPmhlYWRlcnMs
CisJCQkJICAgICAgKFNvdXBNZXNzYWdlSGVhZGVyc0ZvcmVhY2hGdW5jKXVwZGF0ZV9oZWFkZXJz
LAorCQkJCSAgICAgIG1zZy0+cmVzcG9uc2VfaGVhZGVycyk7CisKKwkvKiBBZGQgJ0FnZScgaGVh
ZGVyIHdpdGggdGhlIGN1cnJlbnQgYWdlICovCisJY3VycmVudF9hZ2UgPSBnX3N0cmR1cF9wcmlu
dGYgKCIlZCIsIHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2dldF9jdXJyZW50X2FnZSAoZW50cnkp
KTsKKwlzb3VwX21lc3NhZ2VfaGVhZGVyc19yZXBsYWNlIChtc2ctPnJlc3BvbnNlX2hlYWRlcnMs
CisJCQkJICAgICAgIkFnZSIsCisJCQkJICAgICAgY3VycmVudF9hZ2UpOworCWdfZnJlZSAoY3Vy
cmVudF9hZ2UpOworCisJLyogVE9ETzogdGhlIG9yaWdpbmFsIGlkZWEgd2FzIHRvIHNhdmUgcmVh
ZHMsIGJ1dCBjdXJyZW50IGNvZGUKKwkgICBhc3N1bWVzIHRoYXQgYSBzdHJlYW0gaXMgYWx3YXlz
IHJldHVybmVkLiBOZWVkIHRvIHJlYWNoCisJICAgc29tZSBhZ3JlZW1lbnQgaGVyZS4gQWxzbyB3
ZSBoYXZlIHRvIGhhbmRsZSB0aGUgc2l0dWF0aW9uCisJICAgd2VyZSB0aGUgZmlsZSB3YXMgbm8g
bG9uZ2VyIHRoZXJlIChmb3IgZXhhbXBsZSBmaWxlcworCSAgIHJlbW92ZWQgd2l0aG91dCBub3Rp
ZnlpbmcgdGhlIGNhY2hlICovCisJZmlsZSA9IGdfZmlsZV9uZXdfZm9yX3BhdGggKGVudHJ5LT5m
aWxlbmFtZSk7CisJc3RyZWFtID0gKEdJbnB1dFN0cmVhbSAqKWdfZmlsZV9yZWFkIChmaWxlLCBO
VUxMLCBOVUxMKTsKKworCXJldHVybiBzdHJlYW07Cit9CisKK3N0YXRpYyB2b2lkCityZXF1ZXN0
X3N0YXJ0ZWQgKFNvdXBTZXNzaW9uRmVhdHVyZSAqZmVhdHVyZSwgU291cFNlc3Npb24gKnNlc3Np
b24sCisJCSBTb3VwTWVzc2FnZSAqbXNnLCBTb3VwU29ja2V0ICpzb2NrZXQpCit7CisJUmVxdWVz
dEhlbHBlciAqaGVscGVyID0gZ19zbGljZV9uZXcwIChSZXF1ZXN0SGVscGVyKTsKKwloZWxwZXIt
PnJlcXVlc3RfdGltZSA9IHRpbWUgKE5VTEwpOworCWhlbHBlci0+ZmVhdHVyZSA9IGZlYXR1cmU7
CisJaGVscGVyLT5nb3RfaGVhZGVyc19oYW5kbGVyID0gZ19zaWduYWxfY29ubmVjdCAobXNnLCAi
Z290LWhlYWRlcnMiLAorCQkJCQkJCUdfQ0FMTEJBQ0sgKG1zZ19nb3RfaGVhZGVyc19jYiksCisJ
CQkJCQkJaGVscGVyKTsKK30KKworc3RhdGljIHZvaWQKK2F0dGFjaCAoU291cFNlc3Npb25GZWF0
dXJlICpmZWF0dXJlLCBTb3VwU2Vzc2lvbiAqc2Vzc2lvbikKK3sKKwlXZWJLaXRTb3VwQ2FjaGUg
KmNhY2hlID0gV0VCS0lUX1NPVVBfQ0FDSEUgKGZlYXR1cmUpOworCWNhY2hlLT5wcml2LT5zZXNz
aW9uID0gc2Vzc2lvbjsKKworCXdlYmtpdF9zb3VwX2NhY2hlX2RlZmF1bHRfZmVhdHVyZV9pbnRl
cmZhY2UtPmF0dGFjaCAoZmVhdHVyZSwgc2Vzc2lvbik7Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJr
aXRfc291cF9jYWNoZV9zZXNzaW9uX2ZlYXR1cmVfaW5pdCAoU291cFNlc3Npb25GZWF0dXJlSW50
ZXJmYWNlICpmZWF0dXJlX2ludGVyZmFjZSwKKwkJCQkJZ3BvaW50ZXIgaW50ZXJmYWNlX2RhdGEp
Cit7CisJd2Via2l0X3NvdXBfY2FjaGVfZGVmYXVsdF9mZWF0dXJlX2ludGVyZmFjZSA9CisJCWdf
dHlwZV9kZWZhdWx0X2ludGVyZmFjZV9wZWVrIChTT1VQX1RZUEVfU0VTU0lPTl9GRUFUVVJFKTsK
KworCWZlYXR1cmVfaW50ZXJmYWNlLT5hdHRhY2ggPSBhdHRhY2g7CisJZmVhdHVyZV9pbnRlcmZh
Y2UtPnJlcXVlc3Rfc3RhcnRlZCA9IHJlcXVlc3Rfc3RhcnRlZDsKK30KKworc3RhdGljIHZvaWQK
K3dlYmtpdF9zb3VwX2NhY2hlX2luaXQgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUpCit7CisJV2Vi
S2l0U291cENhY2hlUHJpdmF0ZSAqcHJpdjsKKworCXByaXYgPSBjYWNoZS0+cHJpdiA9IFdFQktJ
VF9TT1VQX0NBQ0hFX0dFVF9QUklWQVRFIChjYWNoZSk7CisKKwlwcml2LT5jYWNoZSA9IGdfaGFz
aF90YWJsZV9uZXdfZnVsbCAoZ19zdHJfaGFzaCwKKwkJCQkJICAgICBnX3N0cl9lcXVhbCwKKwkJ
CQkJICAgICAoR0Rlc3Ryb3lOb3RpZnkpZ19mcmVlLAorCQkJCQkgICAgIE5VTEwpOworCisJLyog
TFJVICovCisJcHJpdi0+bHJ1X3N0YXJ0ID0gTlVMTDsKKworCS8qICovCisJcHJpdi0+bl9wZW5k
aW5nID0gMDsKKworCS8qIENhY2hlIHNpemUgKi8KKwlwcml2LT5tYXhfc2l6ZSA9IERFRkFVTFRf
TUFYX1NJWkU7CisJcHJpdi0+bWF4X2VudHJ5X2RhdGFfc2l6ZSA9IHByaXYtPm1heF9zaXplIC8g
TUFYX0VOVFJZX0RBVEFfUEVSQ0VOVEFHRTsKKwlwcml2LT5zaXplID0gMDsKK30KKworc3RhdGlj
IHZvaWQKK3JlbW92ZV9jYWNoZV9pdGVtIChncG9pbnRlciBrZXksCisJCSAgIGdwb2ludGVyIHZh
bHVlLAorCQkgICBXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKQoreworCVdlYktpdFNvdXBDYWNoZUVu
dHJ5ICplbnRyeSA9IGdfaGFzaF90YWJsZV9sb29rdXAgKGNhY2hlLT5wcml2LT5jYWNoZSwgKGNv
bnN0IGdjaGFyICopa2V5KTsKKwlpZiAod2Via2l0X3NvdXBfY2FjaGVfZW50cnlfcmVtb3ZlIChj
YWNoZSwgZW50cnkpKQorCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9mcmVlIChlbnRyeSwgRkFM
U0UpOworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfY2FjaGVfZmluYWxpemUgKEdPYmpl
Y3QgKm9iamVjdCkKK3sKKwlXZWJLaXRTb3VwQ2FjaGVQcml2YXRlICpwcml2OworCisJcHJpdiA9
IFdFQktJVF9TT1VQX0NBQ0hFIChvYmplY3QpLT5wcml2OworCisJZ19oYXNoX3RhYmxlX2ZvcmVh
Y2ggKHByaXYtPmNhY2hlLCAoR0hGdW5jKXJlbW92ZV9jYWNoZV9pdGVtLCBvYmplY3QpOworCWdf
aGFzaF90YWJsZV9kZXN0cm95IChwcml2LT5jYWNoZSk7CisJZ19mcmVlIChwcml2LT5jYWNoZV9k
aXIpOworCisJZ19saXN0X2ZyZWUgKHByaXYtPmxydV9zdGFydCk7CisJcHJpdi0+bHJ1X3N0YXJ0
ID0gTlVMTDsKKworCUdfT0JKRUNUX0NMQVNTICh3ZWJraXRfc291cF9jYWNoZV9wYXJlbnRfY2xh
c3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX2Nh
Y2hlX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqb2JqZWN0LCBndWludCBwcm9wX2lkLAorCQkJCWNv
bnN0IEdWYWx1ZSAqdmFsdWUsIEdQYXJhbVNwZWMgKnBzcGVjKQoreworCVdlYktpdFNvdXBDYWNo
ZVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9DQUNIRSAob2JqZWN0KS0+cHJpdjsKKworCXN3
aXRjaCAocHJvcF9pZCkgeworCQljYXNlIFBST1BfQ0FDSEVfRElSOgorCQkJcHJpdi0+Y2FjaGVf
ZGlyID0gZ192YWx1ZV9kdXBfc3RyaW5nICh2YWx1ZSk7CisJCQkvKiBDcmVhdGUgZGlyZWN0b3J5
IGlmIGl0IGRvZXMgbm90IGV4aXN0IChGSVhNRTogc2hvdWxkIHdlPykgKi8KKwkJCWlmICghZ19m
aWxlX3Rlc3QgKHByaXYtPmNhY2hlX2RpciwgR19GSUxFX1RFU1RfRVhJU1RTIHwgR19GSUxFX1RF
U1RfSVNfRElSKSkKKwkJCQlnX21rZGlyX3dpdGhfcGFyZW50cyAocHJpdi0+Y2FjaGVfZGlyLCAw
NzAwKTsKKwkJCWJyZWFrOworCQljYXNlIFBST1BfQ0FDSEVfVFlQRToKKwkJCXByaXYtPmNhY2hl
X3R5cGUgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7CisJCQkvKiBUT0RPOiBjbGVhciBwcml2
YXRlIGVudHJpZXMgYW5kIGlzc3VlIGEgd2FybmluZyBpZiBtb3ZpbmcgdG8gc2hhcmVkPyAqLwor
CQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlf
SUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworCQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMg
dm9pZAord2Via2l0X3NvdXBfY2FjaGVfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICpvYmplY3QsIGd1
aW50IHByb3BfaWQsCisJCQkJR1ZhbHVlICp2YWx1ZSwgR1BhcmFtU3BlYyAqcHNwZWMpCit7CisJ
V2ViS2l0U291cENhY2hlUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0NBQ0hFIChvYmplY3Qp
LT5wcml2OworCisJc3dpdGNoIChwcm9wX2lkKSB7CisJCWNhc2UgUFJPUF9DQUNIRV9ESVI6CisJ
CQlnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBwcml2LT5jYWNoZV9kaXIpOworCQkJYnJlYWs7
CisJCWNhc2UgUFJPUF9DQUNIRV9UWVBFOgorCQkJZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIHBy
aXYtPmNhY2hlX3R5cGUpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlHX09CSkVDVF9XQVJO
X0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworCQkJYnJlYWs7
CisJfQorfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfY2FjaGVfY29uc3RydWN0ZWQgKEdP
YmplY3QgKm9iamVjdCkKK3sKKwlXZWJLaXRTb3VwQ2FjaGVQcml2YXRlICpwcml2OworCisJcHJp
diA9IFdFQktJVF9TT1VQX0NBQ0hFIChvYmplY3QpLT5wcml2OworCisJaWYgKCFwcml2LT5jYWNo
ZV9kaXIpIHsKKwkJLyogU2V0IGEgZGVmYXVsdCBjYWNoZSBkaXIsIGRpZmZlcmVudCBmb3IgZWFj
aCB1c2VyICovCisJCXByaXYtPmNhY2hlX2RpciA9IGdfYnVpbGRfZmlsZW5hbWUgKGdfZ2V0X3Vz
ZXJfY2FjaGVfZGlyICgpLAorCQkJCQkJICAgICJodHRwY2FjaGUiLAorCQkJCQkJICAgIE5VTEwp
OworCQlpZiAoIWdfZmlsZV90ZXN0IChwcml2LT5jYWNoZV9kaXIsIEdfRklMRV9URVNUX0VYSVNU
UyB8IEdfRklMRV9URVNUX0lTX0RJUikpCisJCQlnX21rZGlyX3dpdGhfcGFyZW50cyAocHJpdi0+
Y2FjaGVfZGlyLCAwNzAwKTsKKwl9CisKKwlpZiAoR19PQkpFQ1RfQ0xBU1MgKHdlYmtpdF9zb3Vw
X2NhY2hlX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkKQorCQlHX09CSkVDVF9DTEFTUyAod2Vi
a2l0X3NvdXBfY2FjaGVfcGFyZW50X2NsYXNzKS0+Y29uc3RydWN0ZWQgKG9iamVjdCk7Cit9CisK
KyNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FDSEVfVFlQRV9UWVBFICh3ZWJraXRfc291cF9jYWNoZV90
eXBlX2dldF90eXBlICgpKQorc3RhdGljIEdUeXBlCit3ZWJraXRfc291cF9jYWNoZV90eXBlX2dl
dF90eXBlICh2b2lkKQoreworCXN0YXRpYyBHVHlwZSBjYWNoZV90eXBlID0gMDsKKworCXN0YXRp
YyBjb25zdCBHRW51bVZhbHVlIGNhY2hlX3R5cGVzW10gPSB7CisJCXsgV0VCS0lUX1NPVVBfQ0FD
SEVfU0lOR0xFX1VTRVIsICJTaW5nbGUgdXNlciBjYWNoZSIsICJ1c2VyIiB9LAorCQl7IFdFQktJ
VF9TT1VQX0NBQ0hFX1NIQVJFRCwgIlNoYXJlZCBjYWNoZSIsICJzaGFyZWQiIH0sCisJCXsgMCwg
TlVMTCwgTlVMTCB9CisJfTsKKworCWlmICghY2FjaGVfdHlwZSkgeworCQljYWNoZV90eXBlID0g
Z19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIldlYktpdFNvdXBDYWNoZVR5cGUiLCBjYWNoZV90eXBl
cyk7CisJfQorCXJldHVybiBjYWNoZV90eXBlOworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3Nv
dXBfY2FjaGVfY2xhc3NfaW5pdCAoV2ViS2l0U291cENhY2hlQ2xhc3MgKmNhY2hlX2NsYXNzKQor
eworCUdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IChHT2JqZWN0Q2xhc3MgKiljYWNoZV9j
bGFzczsKKworCWdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gd2Via2l0X3NvdXBfY2FjaGVfZmlu
YWxpemU7CisJZ29iamVjdF9jbGFzcy0+Y29uc3RydWN0ZWQgPSB3ZWJraXRfc291cF9jYWNoZV9j
b25zdHJ1Y3RlZDsKKwlnb2JqZWN0X2NsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfc291cF9j
YWNoZV9zZXRfcHJvcGVydHk7CisJZ29iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0
X3NvdXBfY2FjaGVfZ2V0X3Byb3BlcnR5OworCisJY2FjaGVfY2xhc3MtPmdldF9jYWNoZWFiaWxp
dHkgPSBnZXRfY2FjaGVhYmlsaXR5OworCisJZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eSAoZ29iamVjdF9jbGFzcywgUFJPUF9DQUNIRV9ESVIsCisJCQkJCSBnX3BhcmFtX3NwZWNfc3Ry
aW5nICgiY2FjaGUtZGlyIiwKKwkJCQkJCQkgICAgICAiQ2FjaGUgZGlyZWN0b3J5IiwKKwkJCQkJ
CQkgICAgICAiVGhlIGRpcmVjdG9yeSB0byBzdG9yZSB0aGUgY2FjaGUgZmlsZXMiLAorCQkJCQkJ
CSAgICAgIE5VTEwsCisJCQkJCQkJICAgICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NP
TlNUUlVDVF9PTkxZKSk7CisKKwlnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2Jq
ZWN0X2NsYXNzLCBQUk9QX0NBQ0hFX1RZUEUsCisJCQkJCSBnX3BhcmFtX3NwZWNfZW51bSAoImNh
Y2hlLXR5cGUiLAorCQkJCQkJCSAgICAiQ2FjaGUgdHlwZSIsCisJCQkJCQkJICAgICJXaGV0aGVy
IHRoZSBjYWNoZSBpcyBwcml2YXRlIG9yIHNoYXJlZCIsCisJCQkJCQkJICAgIFdFQktJVF9TT1VQ
X0NBQ0hFX1RZUEVfVFlQRSwKKwkJCQkJCQkgICAgV0VCS0lUX1NPVVBfQ0FDSEVfU0lOR0xFX1VT
RVIsCisJCQkJCQkJICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05M
WSkpOworCisJZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlIChjYWNoZV9jbGFzcywgc2l6ZW9mIChX
ZWJLaXRTb3VwQ2FjaGVQcml2YXRlKSk7Cit9CisKKy8qKgorICogd2Via2l0X3NvdXBfY2FjaGVf
bmV3OgorICogQGNhY2hlX2RpcjogdGhlIGRpcmVjdG9yeSB0byBzdG9yZSB0aGUgY2FjaGVkIGRh
dGEsIG9yICVOVUxMIHRvIHVzZSB0aGUgZGVmYXVsdCBvbmUKKyAqIEBjYWNoZV90eXBlOiB0aGUg
I1dlYktpdFNvdXBDYWNoZVR5cGUgb2YgdGhlIGNhY2hlCisgKgorICogQ3JlYXRlcyBhIG5ldyAj
V2ViS2l0U291cENhY2hlLgorICoKKyAqIFJldHVybnM6IGEgbmV3ICNXZWJLaXRTb3VwQ2FjaGUK
KyAqCisgKiBTaW5jZTogMi4yOAorICoqLworV2ViS2l0U291cENhY2hlICoKK3dlYmtpdF9zb3Vw
X2NhY2hlX25ldyAoY29uc3QgY2hhciAqY2FjaGVfZGlyLCBXZWJLaXRTb3VwQ2FjaGVUeXBlIGNh
Y2hlX3R5cGUpCit7CisJcmV0dXJuIGdfb2JqZWN0X25ldyAoV0VCS0lUX1RZUEVfU09VUF9DQUNI
RSwKKwkJCSAgICAgImNhY2hlLWRpciIsIGNhY2hlX2RpciwKKwkJCSAgICAgImNhY2hlLXR5cGUi
LCBjYWNoZV90eXBlLAorCQkJICAgICBOVUxMKTsKK30KKworLyoqCisgKiB3ZWJraXRfc291cF9j
YWNoZV9oYXNfcmVzcG9uc2U6CisgKiBAY2FjaGU6IGEgI1dlYktpdFNvdXBDYWNoZQorICogQG1z
ZzogYSAjU291cE1lc3NhZ2UKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgd2hldGhl
ciB0aGUgQGNhY2hlIG9iamVjdCBoYXMgYSBwcm9wZXIKKyAqIHJlc3BvbnNlIGZvciB0aGUgcmVx
dWVzdCBAbXNnIGdpdmVuIHRoZSBmbGFncyBib3RoIGluIHRoZSByZXF1ZXN0CisgKiBhbmQgdGhl
IGNhY2hlZCByZXBseSBhbmQgdGhlIHRpbWUgZWxsYXBzZWQgc2luY2UgaXQgd2FzIGNhY2hlZC4K
KyAqCisgKiBSZXR1cm5zOiB3aGV0aGVyIG9yIG5vdCB0aGUgQGNhY2hlIGhhcyBhIHZhbGlkIHJl
c3BvbnNlIGZvciBAbXNnCisgKiovCitXZWJLaXRTb3VwQ2FjaGVSZXNwb25zZQord2Via2l0X3Nv
dXBfY2FjaGVfaGFzX3Jlc3BvbnNlIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLCBTb3VwTWVzc2Fn
ZSAqbXNnKQoreworCWNoYXIgKmtleTsKKwlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnk7CisJ
Y29uc3QgY2hhciAqY2FjaGVfY29udHJvbDsKKwlHSGFzaFRhYmxlICpoYXNoOworCWdwb2ludGVy
IHZhbHVlOworCWdib29sZWFuIG11c3RfcmV2YWxpZGF0ZTsKKwlpbnQgbWF4X2FnZSwgbWF4X3N0
YWxlLCBtaW5fZnJlc2g7CisJR0xpc3QgKmxydV9pdGVtLCAqaXRlbTsKKworCWtleSA9IHNvdXBf
bWVzc2FnZV9nZXRfY2FjaGVfa2V5IChtc2cpOworCWVudHJ5ID0gZ19oYXNoX3RhYmxlX2xvb2t1
cCAoY2FjaGUtPnByaXYtPmNhY2hlLCBrZXkpOworCisJLyogMS4gVGhlIHByZXNlbnRlZCBSZXF1
ZXN0LVVSSSBhbmQgdGhhdCBvZiBzdG9yZWQgcmVzcG9uc2UKKwkgKiBtYXRjaAorCSAqLworCWlm
ICghZW50cnkpCisJCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9TVEFMRTsKKwor
CS8qIEluY3JlYXNlIGhpdCBjb3VudC4gVGFrZSBzb3J0aW5nIGludG8gYWNjb3VudCAqLworCWVu
dHJ5LT5oaXRzKys7CisJbHJ1X2l0ZW0gPSBnX2xpc3RfZmluZCAoY2FjaGUtPnByaXYtPmxydV9z
dGFydCwgZW50cnkpOworCWl0ZW0gPSBscnVfaXRlbTsKKwl3aGlsZSAoaXRlbS0+bmV4dCAmJiBs
cnVfY29tcGFyZV9mdW5jIChpdGVtLT5kYXRhLCBpdGVtLT5uZXh0LT5kYXRhKSA+IDApCisJCWl0
ZW0gPSBnX2xpc3RfbmV4dCAoaXRlbSk7CisKKwlpZiAoaXRlbSAhPSBscnVfaXRlbSkgeworCQlj
YWNoZS0+cHJpdi0+bHJ1X3N0YXJ0ID0gZ19saXN0X3JlbW92ZV9saW5rIChjYWNoZS0+cHJpdi0+
bHJ1X3N0YXJ0LCBscnVfaXRlbSk7CisJCWl0ZW0gPSBnX2xpc3RfaW5zZXJ0X3NvcnRlZCAoaXRl
bSwgbHJ1X2l0ZW0tPmRhdGEsIGxydV9jb21wYXJlX2Z1bmMpOworCQlnX2xpc3RfZnJlZSAobHJ1
X2l0ZW0pOworCX0KKworCWlmIChlbnRyeS0+ZGlydHkgfHwgZW50cnktPmJlaW5nX3ZhbGlkYXRl
ZCkKKwkJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX1NUQUxFOworCisJLyogMi4g
VGhlIHJlcXVlc3QgbWV0aG9kIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3RvcmVkIHJlc3BvbnNlCisJ
ICogIGFsbG93cyBpdCB0byBiZSB1c2VkIGZvciB0aGUgcHJlc2VudGVkIHJlcXVlc3QKKwkgKi8K
KworCS8qIEluIHByYWN0aWNlIHRoaXMgbWVhbnMgd2Ugb25seSByZXR1cm4gb3VyIHJlc291cmNl
IGZvciBHRVQsCisJICogY2FjaGVhYmlsaXR5IGZvciBvdGhlciBtZXRob2RzIGlzIGEgVE9ETyBp
biB0aGUgUkZDCisJICogKFRPRE86IGFsdGhvdWdoIHdlIGNvdWxkIHJldHVybiB0aGUgaGVhZGVy
cyBmb3IgSEVBRAorCSAqIHByb2JhYmx5KS4KKwkgKi8KKwlpZiAobXNnLT5tZXRob2QgIT0gU09V
UF9NRVRIT0RfR0VUKQorCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfU1RBTEU7
CisKKwkvKiAzLiBTZWxlY3RpbmcgcmVxdWVzdC1oZWFkZXJzIG5vbWluYXRlZCBieSB0aGUgc3Rv
cmVkCisJICogcmVzcG9uc2UgKGlmIGFueSkgbWF0Y2ggdGhvc2UgcHJlc2VudGVkLgorCSAqLwor
CisJLyogVE9ETyAqLworCisJLyogNC4gVGhlIHByZXNlbnRlZCByZXF1ZXN0IGFuZCBzdG9yZWQg
cmVzcG9uc2UgYXJlIGZyZWUgZnJvbQorCSAqIGRpcmVjdGl2ZXMgdGhhdCB3b3VsZCBwcmV2ZW50
IGl0cyB1c2UuCisJICovCisKKwltdXN0X3JldmFsaWRhdGUgPSBGQUxTRTsKKwltYXhfYWdlID0g
bWF4X3N0YWxlID0gbWluX2ZyZXNoID0gLTE7CisKKwljYWNoZV9jb250cm9sID0gc291cF9tZXNz
YWdlX2hlYWRlcnNfZ2V0IChtc2ctPnJlcXVlc3RfaGVhZGVycywgIkNhY2hlLUNvbnRyb2wiKTsK
KwlpZiAoY2FjaGVfY29udHJvbCkgeworCQloYXNoID0gc291cF9oZWFkZXJfcGFyc2VfcGFyYW1f
bGlzdCAoY2FjaGVfY29udHJvbCk7CisKKwkJaWYgKGdfaGFzaF90YWJsZV9sb29rdXBfZXh0ZW5k
ZWQgKGhhc2gsICJuby1zdG9yZSIsIE5VTEwsIE5VTEwpKSB7CisJCQlnX2hhc2hfdGFibGVfZGVz
dHJveSAoaGFzaCk7CisJCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfU1RBTEU7
CisJCX0KKworCQlpZiAoZ19oYXNoX3RhYmxlX2xvb2t1cF9leHRlbmRlZCAoaGFzaCwgIm5vLWNh
Y2hlIiwgTlVMTCwgTlVMTCkpIHsKKwkJCWVudHJ5LT5tdXN0X3JldmFsaWRhdGUgPSBUUlVFOwor
CQl9CisKKwkJaWYgKGdfaGFzaF90YWJsZV9sb29rdXBfZXh0ZW5kZWQgKGhhc2gsICJtYXgtYWdl
IiwgTlVMTCwgJnZhbHVlKSkgeworCQkJbWF4X2FnZSA9IChpbnQpTUlOIChnX2FzY2lpX3N0cnRv
bGwgKHZhbHVlLCBOVUxMLCAxMCksIEdfTUFYSU5UMzIpOworCQl9CisKKwkJLyogbWF4LXN0YWxl
IGNhbiBoYXZlIG5vIHZhbHVlIHNldCwgd2UgbmVlZCB0byB1c2UgX2V4dGVuZGVkICovCisJCWlm
IChnX2hhc2hfdGFibGVfbG9va3VwX2V4dGVuZGVkIChoYXNoLCAibWF4LXN0YWxlIiwgTlVMTCwg
JnZhbHVlKSkgeworCQkJaWYgKHZhbHVlKQorCQkJCW1heF9zdGFsZSA9IChpbnQpTUlOIChnX2Fz
Y2lpX3N0cnRvbGwgKHZhbHVlLCBOVUxMLCAxMCksIEdfTUFYSU5UMzIpOworCQkJZWxzZQorCQkJ
CW1heF9zdGFsZSA9IEdfTUFYSU5UMzI7CisJCX0KKworCQl2YWx1ZSA9IGdfaGFzaF90YWJsZV9s
b29rdXAgKGhhc2gsICJtaW4tZnJlc2giKTsKKwkJaWYgKHZhbHVlKQorCQkJbWluX2ZyZXNoID0g
KGludClNSU4gKGdfYXNjaWlfc3RydG9sbCAodmFsdWUsIE5VTEwsIDEwKSwgR19NQVhJTlQzMik7
CisKKwkJZ19oYXNoX3RhYmxlX2Rlc3Ryb3kgKGhhc2gpOworCisJCWlmIChtYXhfYWdlICE9IC0x
KSB7CisJCQlndWludCBjdXJyZW50X2FnZSA9IHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2dldF9j
dXJyZW50X2FnZSAoZW50cnkpOworCisJCQkvKiBJZiB3ZSBhcmUgb3ZlciBtYXgtYWdlIGFuZCBt
YXgtc3RhbGUgaXMgbm90CisJCQkgICBzZXQsIGRvIG5vdCB1c2UgdGhlIHZhbHVlIGZyb20gdGhl
IGNhY2hlCisJCQkgICB3aXRob3V0IHZhbGlkYXRpb24gKi8KKwkJCWlmIChtYXhfYWdlIDw9IGN1
cnJlbnRfYWdlICYmIG1heF9zdGFsZSA9PSAtMSkKKwkJCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FD
SEVfUkVTUE9OU0VfTkVFRFNfVkFMSURBVElPTjsKKwkJfQorCX0KKworCS8qIDUuIFRoZSBzdG9y
ZWQgcmVzcG9uc2UgaXMgZWl0aGVyOiBmcmVzaCwgYWxsb3dlZCB0byBiZQorCSAqIHNlcnZlZCBz
dGFsZSBvciBzdWNjZXNmdWxseSB2YWxpZGF0ZWQKKwkgKi8KKwkvKiBUT0RPIGNvbnNpZGVyIGFs
c28gcHJveHktcmV2YWxpZGF0ZSAmIHMtbWF4YWdlICovCisJaWYgKGVudHJ5LT5tdXN0X3JldmFs
aWRhdGUpCisJCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9ORUVEU19WQUxJREFU
SU9OOworCisJaWYgKCF3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9pc19mcmVzaF9lbm91Z2ggKGVu
dHJ5LCBtaW5fZnJlc2gpKSB7CisJCS8qIE5vdCBmcmVzaCwgY2FuIGl0IGJlIHNlcnZlZCBzdGFs
ZT8gKi8KKwkJaWYgKG1heF9zdGFsZSAhPSAtMSkgeworCQkJLyogR19NQVhJTlQzMiBtZWFucyB3
ZSBhY2NlcHQgYW55IHN0YWxlbmVzcyAqLworCQkJaWYgKG1heF9zdGFsZSA9PSBHX01BWElOVDMy
KQorCQkJCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9GUkVTSDsKKworCQkJaWYg
KCh3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9nZXRfY3VycmVudF9hZ2UgKGVudHJ5KSAtIGVudHJ5
LT5mcmVzaG5lc3NfbGlmZXRpbWUpIDw9IG1heF9zdGFsZSkKKwkJCQlyZXR1cm4gV0VCS0lUX1NP
VVBfQ0FDSEVfUkVTUE9OU0VfRlJFU0g7CisJCX0KKworCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FD
SEVfUkVTUE9OU0VfTkVFRFNfVkFMSURBVElPTjsKKwl9CisKKwlyZXR1cm4gV0VCS0lUX1NPVVBf
Q0FDSEVfUkVTUE9OU0VfRlJFU0g7Cit9CisKKy8qKgorICogd2Via2l0X3NvdXBfY2FjaGVfZ2V0
X2NhY2hlYWJpbGl0eToKKyAqIEBjYWNoZTogYSAjV2ViS2l0U291cENhY2hlCisgKiBAbXNnOiBh
ICNTb3VwTWVzc2FnZQorICoKKyAqIENhbGN1bGF0ZXMgd2hldGhlciB0aGUgQG1zZyBjYW4gYmUg
Y2FjaGVkIG9yIG5vdC4KKyAqCisgKiBSZXR1cm5zOiBhICNXZWJLaXRTb3VwQ2FjaGVhYmlsaXR5
IHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0aGUgQG1zZyBjYW4gYmUgY2FjaGVkIG9yIG5vdC4K
KyAqKi8KK1dlYktpdFNvdXBDYWNoZWFiaWxpdHkKK3dlYmtpdF9zb3VwX2NhY2hlX2dldF9jYWNo
ZWFiaWxpdHkgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsIFNvdXBNZXNzYWdlICptc2cpCit7CisJ
Z19yZXR1cm5fdmFsX2lmX2ZhaWwgKFdFQktJVF9JU19TT1VQX0NBQ0hFIChjYWNoZSksIFdFQktJ
VF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFKTsKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoU09VUF9J
U19NRVNTQUdFIChtc2cpLCBXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRSk7CisKKwlyZXR1
cm4gV0VCS0lUX1NPVVBfQ0FDSEVfR0VUX0NMQVNTIChjYWNoZSktPmdldF9jYWNoZWFiaWxpdHkg
KGNhY2hlLCBtc2cpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK2ZvcmNlX2ZsdXNoX3RpbWVvdXQg
KGdwb2ludGVyIGRhdGEpCit7CisJZ2Jvb2xlYW4gKmZvcmNlZCA9IChnYm9vbGVhbiAqKWRhdGE7
CisJKmZvcmNlZCA9IFRSVUU7CisKKwlyZXR1cm4gRkFMU0U7Cit9CisKKy8qKgorICogd2Via2l0
X3NvdXBfY2FjaGVfZmx1c2g6CisgKiBAY2FjaGU6IGEgI1dlYktpdFNvdXBDYWNoZQorICogQHNl
c3Npb246IHRoZSAjU291cFNlc3Npb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBAY2FjaGUKKyAqCisg
KiBUaGlzIGZ1bmN0aW9uIHdpbGwgZm9yY2UgYWxsIHBlbmRpbmcgd3JpdGVzIGluIHRoZSBAY2Fj
aGUgdG8gYmUKKyAqIGNvbW1pdHRlZCB0byBkaXNrLiBGb3IgZG9pbmcgc28gaXQgd2lsbCBpdGVy
YXRlIHRoZSAjR01haW5Db250ZXh0CisgKiBhc3NvY2lhdGVkIHdpdGggdGhlIEBzZXNzaW9uICh3
aGljaCBjYW4gYmUgdGhlIGRlZmF1bHQgb25lKSBhcyBsb25nCisgKiBhcyBuZWVkZWQuCisgKiov
Cit2b2lkCit3ZWJraXRfc291cF9jYWNoZV9mbHVzaCAoV2ViS2l0U291cENhY2hlICpjYWNoZSkK
K3sKKwlHTWFpbkNvbnRleHQgKmFzeW5jX2NvbnRleHQ7CisJU291cFNlc3Npb24gKnNlc3Npb247
CisJZ3VpbnQgdGltZW91dF9pZDsKKwlnYm9vbGVhbiBmb3JjZWQgPSBGQUxTRTsKKworCWdfcmV0
dXJuX2lmX2ZhaWwgKFdFQktJVF9JU19TT1VQX0NBQ0hFIChjYWNoZSkpOworCisJc2Vzc2lvbiA9
IGNhY2hlLT5wcml2LT5zZXNzaW9uOworCWdfcmV0dXJuX2lmX2ZhaWwgKFNPVVBfSVNfU0VTU0lP
TiAoc2Vzc2lvbikpOworCWFzeW5jX2NvbnRleHQgPSBzb3VwX3Nlc3Npb25fZ2V0X2FzeW5jX2Nv
bnRleHQgKHNlc3Npb24pOworCisJLyogV2UgZ2l2ZSBjYWNoZSAxMCBzZWNzIHRvIGZpbmlzaCAq
LworCXRpbWVvdXRfaWQgPSBnX3RpbWVvdXRfYWRkICgxMDAwMCwgZm9yY2VfZmx1c2hfdGltZW91
dCwgJmZvcmNlZCk7CisKKwl3aGlsZSAoIWZvcmNlZCAmJiBjYWNoZS0+cHJpdi0+bl9wZW5kaW5n
ID4gMCkKKwkJZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uIChhc3luY19jb250ZXh0LCBGQUxTRSk7
CisKKwlpZiAoIWZvcmNlZCkKKwkJZ19zb3VyY2VfcmVtb3ZlICh0aW1lb3V0X2lkKTsKKwllbHNl
CisJCWdfd2FybmluZyAoIkNhY2hlIGZsdXNoIGZpbmlzaGVkIGRlc3BpdGUgJWQgcGVuZGluZyBy
ZXF1ZXN0cyIsIGNhY2hlLT5wcml2LT5uX3BlbmRpbmcpOworfQorCitzdGF0aWMgdm9pZAorY2xl
YXJfY2FjaGVfaXRlbSAoZ3BvaW50ZXIga2V5LAorCQkgIGdwb2ludGVyIHZhbHVlLAorCQkgIFdl
YktpdFNvdXBDYWNoZSAqY2FjaGUpCit7CisJV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5ID0g
Z19oYXNoX3RhYmxlX2xvb2t1cCAoY2FjaGUtPnByaXYtPmNhY2hlLCAoY29uc3QgZ2NoYXIgKilr
ZXkpOworCWlmICh3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9yZW1vdmUgKGNhY2hlLCBlbnRyeSkp
CisJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUgKGVudHJ5LCBUUlVFKTsKK30KKworLyoq
CisgKiB3ZWJraXRfc291cF9jYWNoZV9jbGVhcjoKKyAqIEBjYWNoZTogYSAjV2ViS2l0U291cENh
Y2hlCisgKgorICogV2lsbCByZW1vdmUgYWxsIGVudHJpZXMgaW4gdGhlIEBjYWNoZSBwbHVzIGFs
bCB0aGUgY2FjaGUgZmlsZXMKKyAqIGFzc29jaWF0ZWQgd2l0aCB0aGVtLgorICoqLwordm9pZAor
d2Via2l0X3NvdXBfY2FjaGVfY2xlYXIgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUpCit7CisJR0hh
c2hUYWJsZSAqaGFzaDsKKworCWdfcmV0dXJuX2lmX2ZhaWwgKFdFQktJVF9JU19TT1VQX0NBQ0hF
IChjYWNoZSkpOworCisJaGFzaCA9IGNhY2hlLT5wcml2LT5jYWNoZTsKKwlnX3JldHVybl9pZl9m
YWlsIChoYXNoKTsKKworCWdfaGFzaF90YWJsZV9mb3JlYWNoIChoYXNoLCAoR0hGdW5jKWNsZWFy
X2NhY2hlX2l0ZW0sIGNhY2hlKTsKK30KKworU291cE1lc3NhZ2UgKgord2Via2l0X3NvdXBfY2Fj
aGVfZ2VuZXJhdGVfY29uZGl0aW9uYWxfcmVxdWVzdCAoV2ViS2l0U291cENhY2hlICpjYWNoZSwg
U291cE1lc3NhZ2UgKm9yaWdpbmFsKQoreworCVNvdXBNZXNzYWdlICptc2c7CisJU291cFVSSSAq
dXJpOworCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeTsKKwljaGFyICprZXk7CisJY29uc3Qg
Y2hhciAqdmFsdWU7CisKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoV0VCS0lUX0lTX1NPVVBfQ0FD
SEUgKGNhY2hlKSwgTlVMTCk7CisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFNPVVBfSVNfTUVTU0FH
RSAob3JpZ2luYWwpLCBOVUxMKTsKKworCS8qIEZpcnN0IGNvcHkgdGhlIGRhdGEgd2UgbmVlZCBm
cm9tIHRoZSBvcmlnaW5hbCBtZXNzYWdlICovCisJdXJpID0gc291cF9tZXNzYWdlX2dldF91cmkg
KG9yaWdpbmFsKTsKKwltc2cgPSBzb3VwX21lc3NhZ2VfbmV3X2Zyb21fdXJpIChvcmlnaW5hbC0+
bWV0aG9kLCB1cmkpOworCisJc291cF9tZXNzYWdlX2hlYWRlcnNfZm9yZWFjaCAob3JpZ2luYWwt
PnJlcXVlc3RfaGVhZGVycywKKwkJCQkgICAgICAoU291cE1lc3NhZ2VIZWFkZXJzRm9yZWFjaEZ1
bmMpY29weV9oZWFkZXJzLAorCQkJCSAgICAgIG1zZy0+cmVxdWVzdF9oZWFkZXJzKTsKKworCS8q
IE5vdyBhZGQgdGhlIHZhbGlkYXRvciBlbnRyaWVzIGluIHRoZSBoZWFkZXIgZnJvbSB0aGUgY2Fj
aGVkCisJICAgZGF0YSAqLworCWtleSA9IHNvdXBfbWVzc2FnZV9nZXRfY2FjaGVfa2V5IChvcmln
aW5hbCk7CisJZW50cnkgPSBnX2hhc2hfdGFibGVfbG9va3VwIChjYWNoZS0+cHJpdi0+Y2FjaGUs
IGtleSk7CisJZ19mcmVlIChrZXkpOworCisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGVudHJ5LCBO
VUxMKTsKKworCWVudHJ5LT5iZWluZ192YWxpZGF0ZWQgPSBUUlVFOworCisJdmFsdWUgPSBzb3Vw
X21lc3NhZ2VfaGVhZGVyc19nZXQgKGVudHJ5LT5oZWFkZXJzLCAiTGFzdC1Nb2RpZmllZCIpOwor
CWlmICh2YWx1ZSkKKwkJc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kIChtc2ctPnJlcXVlc3Rf
aGVhZGVycywKKwkJCQkJICAgICAiSWYtTW9kaWZpZWQtU2luY2UiLAorCQkJCQkgICAgIHZhbHVl
KTsKKwl2YWx1ZSA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldCAoZW50cnktPmhlYWRlcnMsICJF
VGFnIik7CisJaWYgKHZhbHVlKQorCQlzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQgKG1zZy0+
cmVxdWVzdF9oZWFkZXJzLAorCQkJCQkgICAgICJJZi1Ob25lLU1hdGNoIiwKKwkJCQkJICAgICB2
YWx1ZSk7CisJcmV0dXJuIG1zZzsKK30KKworI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9GSUxF
ICJzb3VwLmNhY2hlIgorCisjZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX0hFQURFUlNfRk9STUFU
ICJ7c3N9IgorI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9QSEVBREVSU19GT1JNQVQgIihzc2J1
dXV1dWEiIFdFQktJVF9TT1VQX0NBQ0hFX0hFQURFUlNfRk9STUFUICIpIgorI2RlZmluZSBXRUJL
SVRfU09VUF9DQUNIRV9FTlRSSUVTX0ZPUk1BVCAiYSIgV0VCS0lUX1NPVVBfQ0FDSEVfUEhFQURF
UlNfRk9STUFUCisKKy8qIEJhc2ljYWxseSB0aGUgc2FtZSBmb3JtYXQgdGhhbiBhYm92ZSBleGNl
cHQgdGhhdCBzb21lIHN0cmluZ3MgYXJlCisgICBwcmVwZW5kZWQgd2l0aCAmLiBUaGlzIHdheSB0
aGUgR1ZhcmlhbnQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlCisgICBkYXRhIGluc3RlYWQgb2Yg
ZHVwbGljYXRpbmcgdGhlIHN0cmluZyAqLworI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9ERUNP
REVfSEVBREVSU19GT1JNQVQgInsmcyZzfSIKKworc3RhdGljIHZvaWQKK3BhY2tfZW50cnkgKGdw
b2ludGVyIGRhdGEsCisJICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlXZWJLaXRTb3VwQ2Fj
aGVFbnRyeSAqZW50cnkgPSAoV2ViS2l0U291cENhY2hlRW50cnkgKikgZGF0YTsKKwlTb3VwTWVz
c2FnZUhlYWRlcnNJdGVyIGl0ZXI7CisJY29uc3QgZ2NoYXIgKmhlYWRlcl9rZXksICpoZWFkZXJf
dmFsdWU7CisJR1ZhcmlhbnRCdWlsZGVyICpoZWFkZXJzX2J1aWxkZXI7CisJR1ZhcmlhbnRCdWls
ZGVyICplbnRyaWVzX2J1aWxkZXIgPSAoR1ZhcmlhbnRCdWlsZGVyICopdXNlcl9kYXRhOworCisJ
LyogRG8gbm90IHN0b3JlIG5vbi1jb25zb2xpZGF0ZWQgZW50cmllcyAqLworCWlmIChlbnRyeS0+
ZGlydHkgfHwgZW50cnktPndyaXRpbmcgfHwgIWVudHJ5LT5rZXkpCisJCXJldHVybjsKKworCS8q
IFBhY2sgaGVhZGVycyAqLworCWhlYWRlcnNfYnVpbGRlciA9IGdfdmFyaWFudF9idWlsZGVyX25l
dyAoR19WQVJJQU5UX1RZUEVfQVJSQVkpOworCXNvdXBfbWVzc2FnZV9oZWFkZXJzX2l0ZXJfaW5p
dCAoJml0ZXIsIGVudHJ5LT5oZWFkZXJzKTsKKwl3aGlsZSAoc291cF9tZXNzYWdlX2hlYWRlcnNf
aXRlcl9uZXh0ICgmaXRlciwgJmhlYWRlcl9rZXksICZoZWFkZXJfdmFsdWUpKSB7CisJCWlmIChn
X3V0ZjhfdmFsaWRhdGUgKGhlYWRlcl92YWx1ZSwgLTEsIE5VTEwpKQorCQkJZ192YXJpYW50X2J1
aWxkZXJfYWRkIChoZWFkZXJzX2J1aWxkZXIsIFdFQktJVF9TT1VQX0NBQ0hFX0hFQURFUlNfRk9S
TUFULAorCQkJCQkgICAgICAgaGVhZGVyX2tleSwgaGVhZGVyX3ZhbHVlKTsKKwl9CisKKwkvKiBF
bnRyeSBkYXRhICovCisJZ192YXJpYW50X2J1aWxkZXJfYWRkIChlbnRyaWVzX2J1aWxkZXIsIFdF
QktJVF9TT1VQX0NBQ0hFX1BIRUFERVJTX0ZPUk1BVCwKKwkJCSAgICAgICBlbnRyeS0+a2V5LCBl
bnRyeS0+ZmlsZW5hbWUsIGVudHJ5LT5tdXN0X3JldmFsaWRhdGUsCisJCQkgICAgICAgZW50cnkt
PmZyZXNobmVzc19saWZldGltZSwgZW50cnktPmNvcnJlY3RlZF9pbml0aWFsX2FnZSwKKwkJCSAg
ICAgICBlbnRyeS0+cmVzcG9uc2VfdGltZSwgZW50cnktPmhpdHMsIGVudHJ5LT5sZW5ndGgsIGhl
YWRlcnNfYnVpbGRlcik7CisKKwlnX3ZhcmlhbnRfYnVpbGRlcl91bnJlZiAoaGVhZGVyc19idWls
ZGVyKTsKK30KKwordm9pZAord2Via2l0X3NvdXBfY2FjaGVfZHVtcCAoV2ViS2l0U291cENhY2hl
ICpjYWNoZSkKK3sKKwlXZWJLaXRTb3VwQ2FjaGVQcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBf
Q0FDSEVfR0VUX1BSSVZBVEUgKGNhY2hlKTsKKwlnY2hhciAqZmlsZW5hbWU7CisJR1ZhcmlhbnRC
dWlsZGVyICplbnRyaWVzX2J1aWxkZXI7CisJR1ZhcmlhbnQgKmNhY2hlX3ZhcmlhbnQ7CisKKwlp
ZiAoIWdfbGlzdF9sZW5ndGggKGNhY2hlLT5wcml2LT5scnVfc3RhcnQpKQorCQlyZXR1cm47CisK
KwkvKiBDcmVhdGUgdGhlIGJ1aWxkZXIgYW5kIGl0ZXJhdGUgb3ZlciBhbGwgZW50cmllcyAqLwor
CWVudHJpZXNfYnVpbGRlciA9IGdfdmFyaWFudF9idWlsZGVyX25ldyAoR19WQVJJQU5UX1RZUEVf
QVJSQVkpOworCWdfbGlzdF9mb3JlYWNoIChjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0LCBwYWNrX2Vu
dHJ5LCBlbnRyaWVzX2J1aWxkZXIpOworCisJLyogU2VyaWFsaXplIGFuZCBkdW1wICovCisJY2Fj
aGVfdmFyaWFudCA9IGdfdmFyaWFudF9uZXcgKFdFQktJVF9TT1VQX0NBQ0hFX0VOVFJJRVNfRk9S
TUFULCBlbnRyaWVzX2J1aWxkZXIpOworCWdfdmFyaWFudF9idWlsZGVyX3VucmVmIChlbnRyaWVz
X2J1aWxkZXIpOworCisJZmlsZW5hbWUgPSBnX2J1aWxkX2ZpbGVuYW1lIChwcml2LT5jYWNoZV9k
aXIsIFdFQktJVF9TT1VQX0NBQ0hFX0ZJTEUsIE5VTEwpOworCWdfZmlsZV9zZXRfY29udGVudHMg
KGZpbGVuYW1lLCAoY29uc3QgZ2NoYXIgKilnX3ZhcmlhbnRfZ2V0X2RhdGEgKGNhY2hlX3Zhcmlh
bnQpLAorCQkJICAgICBnX3ZhcmlhbnRfZ2V0X3NpemUgKGNhY2hlX3ZhcmlhbnQpLCBOVUxMKTsK
KwlnX2ZyZWUgKGZpbGVuYW1lKTsKKwlnX3ZhcmlhbnRfdW5yZWYgKGNhY2hlX3ZhcmlhbnQpOwor
fQorCit2b2lkCit3ZWJraXRfc291cF9jYWNoZV9sb2FkIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hl
KQoreworCWdjaGFyICpmaWxlbmFtZSA9IE5VTEwsICpjb250ZW50cyA9IE5VTEw7CisJR1Zhcmlh
bnQgKmNhY2hlX3ZhcmlhbnQ7CisJR1ZhcmlhbnRJdGVyICplbnRyaWVzX2l0ZXIsICpoZWFkZXJz
X2l0ZXI7CisJR1ZhcmlhbnRUeXBlICp2YXJpYW50X2Zvcm1hdDsKKwlnc2l6ZSBsZW5ndGg7CisJ
V2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5OworCVdlYktpdFNvdXBDYWNoZVByaXZhdGUgKnBy
aXYgPSBjYWNoZS0+cHJpdjsKKworCWZpbGVuYW1lID0gZ19idWlsZF9maWxlbmFtZSAocHJpdi0+
Y2FjaGVfZGlyLCBXRUJLSVRfU09VUF9DQUNIRV9GSUxFLCBOVUxMKTsKKwlpZiAoIWdfZmlsZV9n
ZXRfY29udGVudHMgKGZpbGVuYW1lLCAmY29udGVudHMsICZsZW5ndGgsIE5VTEwpKSB7CisJCWdf
ZnJlZSAoZmlsZW5hbWUpOworCQlyZXR1cm47CisJfQorCWdfZnJlZSAoZmlsZW5hbWUpOworCisJ
dmFyaWFudF9mb3JtYXQgPSBnX3ZhcmlhbnRfdHlwZV9uZXcgKFdFQktJVF9TT1VQX0NBQ0hFX0VO
VFJJRVNfRk9STUFUKTsKKwljYWNoZV92YXJpYW50ID0gZ192YXJpYW50X25ld19mcm9tX2RhdGEg
KHZhcmlhbnRfZm9ybWF0LCAoY29uc3QgZ2NoYXIgKiljb250ZW50cywgbGVuZ3RoLCBGQUxTRSwg
TlVMTCwgTlVMTCk7CisJZ192YXJpYW50X3R5cGVfZnJlZSAodmFyaWFudF9mb3JtYXQpOworCisJ
Z192YXJpYW50X2dldCAoY2FjaGVfdmFyaWFudCwgV0VCS0lUX1NPVVBfQ0FDSEVfRU5UUklFU19G
T1JNQVQsICZlbnRyaWVzX2l0ZXIpOworCWVudHJ5ID0gZ19zbGljZV9uZXcwIChXZWJLaXRTb3Vw
Q2FjaGVFbnRyeSk7CisKKwl3aGlsZSAoZ192YXJpYW50X2l0ZXJfbG9vcCAoZW50cmllc19pdGVy
LCBXRUJLSVRfU09VUF9DQUNIRV9QSEVBREVSU19GT1JNQVQsCisJCQkJICAgICZlbnRyeS0+a2V5
LCAmZW50cnktPmZpbGVuYW1lLCAmZW50cnktPm11c3RfcmV2YWxpZGF0ZSwKKwkJCQkgICAgJmVu
dHJ5LT5mcmVzaG5lc3NfbGlmZXRpbWUsICZlbnRyeS0+Y29ycmVjdGVkX2luaXRpYWxfYWdlLAor
CQkJCSAgICAmZW50cnktPnJlc3BvbnNlX3RpbWUsICZlbnRyeS0+aGl0cywgJmVudHJ5LT5sZW5n
dGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaGVhZGVyc19pdGVyKSkg
eworCQljb25zdCBnY2hhciAqaGVhZGVyX2tleSwgKmhlYWRlcl92YWx1ZTsKKworCQkvKiBTb3Vw
TWVzc2FnZSBIZWFkZXJzICovCisJCWVudHJ5LT5oZWFkZXJzID0gc291cF9tZXNzYWdlX2hlYWRl
cnNfbmV3IChTT1VQX01FU1NBR0VfSEVBREVSU19SRVNQT05TRSk7CisJCXdoaWxlIChnX3Zhcmlh
bnRfaXRlcl9sb29wIChoZWFkZXJzX2l0ZXIsIFdFQktJVF9TT1VQX0NBQ0hFX0RFQ09ERV9IRUFE
RVJTX0ZPUk1BVCwgJmhlYWRlcl9rZXksICZoZWFkZXJfdmFsdWUpKQorCQkJc291cF9tZXNzYWdl
X2hlYWRlcnNfYXBwZW5kIChlbnRyeS0+aGVhZGVycywgaGVhZGVyX2tleSwgaGVhZGVyX3ZhbHVl
KTsKKworCQkvKiBJbnNlcnQgaW4gY2FjaGUgKi8KKwkJaWYgKCF3ZWJraXRfc291cF9jYWNoZV9l
bnRyeV9pbnNlcnRfYnlfa2V5IChjYWNoZSwgKGNvbnN0IGdjaGFyICopZW50cnktPmtleSwgZW50
cnksIEZBTFNFKSkKKwkJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUgKGVudHJ5LCBUUlVF
KTsKKworCQkvKiBOZXcgZW50cnkgZm9yIHRoZSBuZXh0IGl0ZXJhdGlvbi4gVGhpcyBjcmVhdGVz
IGFuCisJCSAgIGV4dHJhIG9iamVjdCB0aGUgbGFzdCBpdGVyYXRpb24gYnV0IGl0J3Mgd29ydGgg
aXQKKwkJICAgYXMgd2Ugc2F2ZSBzZXZlcmFsIGlmJ3MgKi8KKwkJZW50cnkgPSBnX3NsaWNlX25l
dzAgKFdlYktpdFNvdXBDYWNoZUVudHJ5KTsKKwl9CisJLyogUmVtb3ZlIGxhc3QgY3JlYXRlZCBl
bnRyeSAqLworCWdfc2xpY2VfZnJlZSAoV2ViS2l0U291cENhY2hlRW50cnksIGVudHJ5KTsKKwor
CS8qIFNvcnQgTFJVIChzaG91bGRuJ3QgYmUgbmVlZGVkKS4gRmlyc3QgcmV2ZXJzZSBhcyBlbGVt
ZW50cworCSAqIGFyZSBhbHdheXMgcHJlcGVuZGVkIHdoZW4gaW5zZXJ0aW5nCisJICovCisJY2Fj
aGUtPnByaXYtPmxydV9zdGFydCA9IGdfbGlzdF9yZXZlcnNlIChjYWNoZS0+cHJpdi0+bHJ1X3N0
YXJ0KTsKKwljYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0ID0gZ19saXN0X3NvcnQgKGNhY2hlLT5wcml2
LT5scnVfc3RhcnQsIGxydV9jb21wYXJlX2Z1bmMpOworCisJLyogZnJlZXMgKi8KKwlnX3Zhcmlh
bnRfaXRlcl9mcmVlIChlbnRyaWVzX2l0ZXIpOworCWdfdmFyaWFudF91bnJlZiAoY2FjaGVfdmFy
aWFudCk7Cit9CisKK3ZvaWQKK3dlYmtpdF9zb3VwX2NhY2hlX3NldF9tYXhfc2l6ZSAoV2ViS2l0
U291cENhY2hlICpjYWNoZSwKKwkJCQlndWludCBtYXhfc2l6ZSkKK3sKKwljYWNoZS0+cHJpdi0+
bWF4X3NpemUgPSBtYXhfc2l6ZTsKKwljYWNoZS0+cHJpdi0+bWF4X2VudHJ5X2RhdGFfc2l6ZSA9
IGNhY2hlLT5wcml2LT5tYXhfc2l6ZSAvIE1BWF9FTlRSWV9EQVRBX1BFUkNFTlRBR0U7Cit9CisK
K2d1aW50Cit3ZWJraXRfc291cF9jYWNoZV9nZXRfbWF4X3NpemUgKFdlYktpdFNvdXBDYWNoZSAq
Y2FjaGUpCit7CisJcmV0dXJuIGNhY2hlLT5wcml2LT5tYXhfc2l6ZTsKK30KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLmgg
Yi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MTdkM2UKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1j
YWNoZS5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBzb3VwLWNhY2hlLmg6CisgKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5LCAyMDEwIElnYWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdFQktJVF9TT1VQX0NB
Q0hFX0gKKyNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FDSEVfSCAxCisKKyNpbmNsdWRlIDx3ZWJraXQv
d2Via2l0ZGVmaW5lcy5oPgorCisjaW5jbHVkZSA8bGlic291cC9zb3VwLXR5cGVzLmg+CisjaW5j
bHVkZSA8Z2lvL2dpby5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVf
U09VUF9DQUNIRSAgICAgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9nZXRfdHlwZSAoKSkKKyNk
ZWZpbmUgV0VCS0lUX1NPVVBfQ0FDSEUob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5T
VEFOQ0VfQ0FTVCAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUsIFdlYktpdFNvdXBDYWNo
ZSkpCisjZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NI
RUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUsIFdlYktpdFNv
dXBDYWNoZUNsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1NPVVBfQ0FDSEUob2JqKSAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfQ0FD
SEUpKQorI2RlZmluZSBXRUJLSVRfSVNfU09VUF9DQUNIRV9DTEFTUyhrbGFzcykgKEdfVFlQRV9D
SEVDS19DTEFTU19UWVBFICgob2JqKSwgV0VCS0lUX1RZUEVfU09VUF9DQUNIRSkpCisjZGVmaW5l
IFdFQktJVF9TT1VQX0NBQ0hFX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9D
TEFTUyAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUsIFdlYktpdFNvdXBDYWNoZUNsYXNz
KSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBDYWNoZSBXZWJLaXRTb3VwQ2FjaGU7Cit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0U291cENhY2hlUHJpdmF0ZSBXZWJLaXRTb3VwQ2FjaGVQcml2
YXRlOworCit0eXBlZGVmIGVudW0geworCVdFQktJVF9TT1VQX0NBQ0hFX0NBQ0hFQUJMRSA9ICgx
IDw8IDApLAorCVdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFID0gKDEgPDwgMSksCisJV0VC
S0lUX1NPVVBfQ0FDSEVfSU5WQUxJREFURVMgPSAoMSA8PCAyKSwKKwlXRUJLSVRfU09VUF9DQUNI
RV9WQUxJREFURVMgPSAoMSA8PCAzKQorfSBXZWJLaXRTb3VwQ2FjaGVhYmlsaXR5OworCit0eXBl
ZGVmIGVudW0geworCVdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX0ZSRVNILAorCVdFQktJVF9T
T1VQX0NBQ0hFX1JFU1BPTlNFX05FRURTX1ZBTElEQVRJT04sCisJV0VCS0lUX1NPVVBfQ0FDSEVf
UkVTUE9OU0VfU1RBTEUKK30gV2ViS2l0U291cENhY2hlUmVzcG9uc2U7CisKK3R5cGVkZWYgZW51
bSB7CisJV0VCS0lUX1NPVVBfQ0FDSEVfU0lOR0xFX1VTRVIsCisJV0VCS0lUX1NPVVBfQ0FDSEVf
U0hBUkVECit9IFdlYktpdFNvdXBDYWNoZVR5cGU7CisKK3N0cnVjdCBfV2ViS2l0U291cENhY2hl
IHsKKwlHT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKKworCVdlYktpdFNvdXBDYWNoZVByaXZhdGUg
KnByaXY7Cit9OworCit0eXBlZGVmIHN0cnVjdCB7CisJR09iamVjdENsYXNzIHBhcmVudF9jbGFz
czsKKworCS8qIG1ldGhvZHMgKi8KKwlXZWJLaXRTb3VwQ2FjaGVhYmlsaXR5ICgqZ2V0X2NhY2hl
YWJpbGl0eSkoV2ViS2l0U291cENhY2hlICpjYWNoZSwgU291cE1lc3NhZ2UgKm1zZyk7CisKKwkv
KiBQYWRkaW5nIGZvciBmdXR1cmUgZXhwYW5zaW9uICovCisJdm9pZCAoKl9saWJzb3VwX3Jlc2Vy
dmVkMSkodm9pZCk7CisJdm9pZCAoKl9saWJzb3VwX3Jlc2VydmVkMikodm9pZCk7CisJdm9pZCAo
Kl9saWJzb3VwX3Jlc2VydmVkMykodm9pZCk7Cit9IFdlYktpdFNvdXBDYWNoZUNsYXNzOworCitX
RUJLSVRfQVBJIEdUeXBlICAgICAgICAgICAgIHdlYmtpdF9zb3VwX2NhY2hlX2dldF90eXBlICh2
b2lkKTsKK1dFQktJVF9BUEkgV2ViS2l0U291cENhY2hlICAqd2Via2l0X3NvdXBfY2FjaGVfbmV3
IChjb25zdCBjaGFyICAqY2FjaGVfZGlyLAorCQkJCQkJICAgIFdlYktpdFNvdXBDYWNoZVR5cGUg
Y2FjaGVfdHlwZSk7CitXRUJLSVRfQVBJIHZvaWQgICAgICAgICAgICAgIHdlYmtpdF9zb3VwX2Nh
Y2hlX2ZsdXNoIChXZWJLaXRTb3VwQ2FjaGUgICAqY2FjaGUpOworV0VCS0lUX0FQSSB2b2lkICAg
ICAgICAgICAgICB3ZWJraXRfc291cF9jYWNoZV9jbGVhciAoV2ViS2l0U291cENhY2hlICAgKmNh
Y2hlKTsKKworV0VCS0lUX0FQSSB2b2lkICAgICAgICAgICAgICB3ZWJraXRfc291cF9jYWNoZV9k
dW1wIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKTsKK1dFQktJVF9BUEkgdm9pZCAgICAgICAgICAg
ICAgd2Via2l0X3NvdXBfY2FjaGVfbG9hZCAoV2ViS2l0U291cENhY2hlICpjYWNoZSk7CisKK1dF
QktJVF9BUEkgdm9pZCAgICAgICAgICAgICAgd2Via2l0X3NvdXBfY2FjaGVfc2V0X21heF9zaXpl
IChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLAorCQkJCQkJCSAgICAgZ3VpbnQgbWF4X3NpemUpOwor
V0VCS0lUX0FQSSBndWludCAgICAgICAgICAgICB3ZWJraXRfc291cF9jYWNoZV9nZXRfbWF4X3Np
emUgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUpOworCitHX0VORF9ERUNMUworCisKKyNlbmRpZiAv
KiBXRUJLSVRfU09VUF9DQUNIRV9IICovCisKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5n
ZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxvZwppbmRleCA2MDY1Y2QwLi5hNGRhZDFiIDEwMDY0
NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMDktMDYgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmls
bGFyQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgW0dUS10gQWRkIEhUVFAgY2FjaGluZyBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDI2MQorCisgICAgICAgICogR05VbWFr
ZWZpbGUuYW06IGFkZGVkIHBhdGhzIGZvciB0aGUgbmV3IHNvdXAgSFRUUCBjYWNoZSBjb2RlCisK
IDIwMTAtMDktMjYgIE1paGFpIFBhcnBhcml0YSAgPG1paGFpcEBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgT2phbiBWYWZhaS4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0dO
VW1ha2VmaWxlLmFtIGIvV2ViS2l0VG9vbHMvR05VbWFrZWZpbGUuYW0KaW5kZXggZTM4NDEwMS4u
Y2FjZjA1YiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvR05VbWFrZWZpbGUuYW0KKysrIGIvV2Vi
S2l0VG9vbHMvR05VbWFrZWZpbGUuYW0KQEAgLTYsNiArNiw3IEBAIG5vaW5zdF9QUk9HUkFNUyAr
PSBcCiAjIEd0a0xhdW5jaGVyCiBQcm9ncmFtc19HdGtMYXVuY2hlcl9DUFBGTEFHUyA9IFwKIAkt
SSQoc3JjZGlyKS9XZWJLaXQvZ3RrIFwKKwktSSQoc3JjZGlyKS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9jYWNoZS8gXAogCS1JJCh0b3BfYnVpbGRkaXIpL1dlYktpdC9ndGsgXAogCS1J
JCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzIFwKIAkkKGdsb2JhbF9jcHBmbGFncykgXApA
QCAtMzgsNiArMzksNyBAQCBkdW1wcmVuZGVydHJlZV9jcHBmbGFncyA6PSBcCiAJLUkkKHNyY2Rp
cikvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrIFwKIAktSSQoc3JjZGlyKS9XZWJLaXQv
Z3RrIFwKIAktSSQoc3JjZGlyKS9XZWJDb3JlL3BsYXRmb3JtL2d0ayBcCisJLUkkKHNyY2Rpcikv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvIFwKIAktSSQodG9wX2J1aWxkZGly
KS9XZWJLaXQvZ3RrIFwKIAktSSQodG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcyBcCiAJJChn
bG9iYWxfY3BwZmxhZ3MpIFwKZGlmZiAtLWdpdCBhL2F1dG90b29scy93ZWJraXQubTQgYi9hdXRv
dG9vbHMvd2Via2l0Lm00CmluZGV4IDM3OWZhOGYuLjZiNDRmMzAgMTAwNjQ0Ci0tLSBhL2F1dG90
b29scy93ZWJraXQubTQKKysrIGIvYXV0b3Rvb2xzL3dlYmtpdC5tNApAQCAtMTA4LDcgKzEwOCw3
IEBAIEFDX0RFRlVOX09OQ0UoW19XRUJLSVRfQ0hFQ0tfR0xJQl0sCiBbZG5sCiBkbmwgY2hlY2sg
Zm9yIGdsaWIKICMgVmVyc2lvbiByZXF1aXJlbWVudHMKLUdMSUJfUkVRVUlSRURfVkVSU0lPTj0y
LjIxLjMKK0dMSUJfUkVRVUlSRURfVkVSU0lPTj0yLjI0CiBHT0JKRUNUX1JFUVVJUkVEX1ZFUlNJ
T049Mi4wCiBHVEhSRUFEX1JFUVVJUkVEX1ZFUlNJT049Mi4wCiAKLS0gCjEuNy4xCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69356</attachid>
            <date>2010-09-30 11:16:06 -0700</date>
            <delta_ts>2010-10-01 02:47:29 -0700</delta_ts>
            <desc>WebKitGtk+ to use the new API from the imported SoupURILoader code</desc>
            <filename>0002-WebKitGtk-to-use-the-new-API-from-the-imported-SoupU.patch</filename>
            <type>text/plain</type>
            <size>33694</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">RnJvbSA3MGFmY2I5MTUwMDE4MWNjMGYwZjI1ODIxZmY3ZDBjN2IyODcxZjkzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTZXJnaW8gVmlsbGFyIFNlbmluIDxzdmlsbGFyQGlnYWxpYS5j
b20+CkRhdGU6IFdlZCwgMjIgU2VwIDIwMTAgMTA6MTg6MDYgKzAyMDAKU3ViamVjdDogW1BBVENI
IDIvMl0gV2ViS2l0R3RrKyB0byB1c2UgdGhlIG5ldyBBUEkgZnJvbSB0aGUgaW1wb3J0ZWQgU291
cFVSSUxvYWRlciBjb2RlCgotLS0KIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhh
bmRsZUludGVybmFsLmggIHwgICAyMCArLQogLi4uL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNv
dXJjZUhhbmRsZVNvdXAuY3BwICAgfCAgNTA1ICsrKysrKysrKy0tLS0tLS0tLS0tCiBXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3QuaCAgICB8ICAgIDMgKy0KIC4u
Li9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHAgIHwgICAyMyAr
CiA0IGZpbGVzIGNoYW5nZWQsIDI1NSBpbnNlcnRpb25zKCspLCAyOTYgZGVsZXRpb25zKC0pCgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJu
YWwuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmgK
aW5kZXggOTZmYmYwMC4uNjkxMDk3MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCkBAIC00Niw2ICs0Niw4IEBACiAjZW5kaWYKIAog
I2lmIFVTRShTT1VQKQorI2luY2x1ZGUgInNvdXAtcmVxdWVzdGVyLmgiCisjaW5jbHVkZSA8R1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgogY2xhc3MgRnJhbWU7CiAjZW5kaWYK
QEAgLTExMCwxMyArMTEyLDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNpZiBVU0UoU09VUCkK
ICAgICAgICAgICAgICwgbV9tc2coMCkKICAgICAgICAgICAgICwgbV9jYW5jZWxsZWQoZmFsc2Up
Ci0gICAgICAgICAgICAsIG1fZ2ZpbGUoMCkKKyAgICAgICAgICAgICwgbV9zb3VwUmVxdWVzdCgw
KQorICAgICAgICAgICAgLCBtX3JlcXVlc3RlcigwKQogICAgICAgICAgICAgLCBtX2lucHV0U3Ry
ZWFtKDApCiAgICAgICAgICAgICAsIG1fY2FuY2VsbGFibGUoMCkKICAgICAgICAgICAgICwgbV9i
dWZmZXIoMCkKLSAgICAgICAgICAgICwgbV9idWZmZXJTaXplKDApCiAgICAgICAgICAgICAsIG1f
dG90YWwoMCkKICAgICAgICAgICAgICwgbV9pZGxlSGFuZGxlcigwKQorICAgICAgICAgICAgLCBt
X2dvdENodW5rSGFuZGxlcigwKQogI2VuZGlmCiAjaWYgUExBVEZPUk0oUVQpCiAgICAgICAgICAg
ICAsIG1fam9iKDApCkBAIC0xMzMsNiArMTM2LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICAgICAgbV91c2VyID0gdXJsLnVzZXIoKTsKICAgICAgICAgICAgIG1fcGFzcyA9IHVybC5w
YXNzKCk7CiAgICAgICAgICAgICBtX2ZpcnN0UmVxdWVzdC5yZW1vdmVDcmVkZW50aWFscygpOwor
I2lmIFVTRShTT1VQKQorICAgICAgICAgICAgbV9yZXF1ZXN0ZXIgPSB3ZWJraXRfc291cF9yZXF1
ZXN0ZXJfbmV3KCk7CisjZW5kaWYKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgflJlc291
cmNlSGFuZGxlSW50ZXJuYWwoKTsKQEAgLTE4OCwxMyArMTk0LDE1IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgU291cE1lc3NhZ2UqIG1fbXNnOwogICAgICAgICBSZXNvdXJjZVJlc3Bv
bnNlIG1fcmVzcG9uc2U7CiAgICAgICAgIGJvb2wgbV9jYW5jZWxsZWQ7Ci0gICAgICAgIEdGaWxl
KiBtX2dmaWxlOwotICAgICAgICBHSW5wdXRTdHJlYW0qIG1faW5wdXRTdHJlYW07Ci0gICAgICAg
IEdDYW5jZWxsYWJsZSogbV9jYW5jZWxsYWJsZTsKKyAgICAgICAgUGxhdGZvcm1SZWZQdHI8V2Vi
S2l0U291cFJlcXVlc3Q+IG1fc291cFJlcXVlc3Q7CisgICAgICAgIFBsYXRmb3JtUmVmUHRyPFdl
YktpdFNvdXBSZXF1ZXN0ZXI+IG1fcmVxdWVzdGVyOworICAgICAgICBQbGF0Zm9ybVJlZlB0cjxH
SW5wdXRTdHJlYW0+IG1faW5wdXRTdHJlYW07CisgICAgICAgIFBsYXRmb3JtUmVmUHRyPEdDYW5j
ZWxsYWJsZT4gbV9jYW5jZWxsYWJsZTsKICAgICAgICAgY2hhciogbV9idWZmZXI7Ci0gICAgICAg
IGdzaXplIG1fYnVmZmVyU2l6ZSwgbV90b3RhbDsKKyAgICAgICAgZ3NpemUgbV90b3RhbDsKICAg
ICAgICAgZ3VpbnQgbV9pZGxlSGFuZGxlcjsKICAgICAgICAgUmVmUHRyPE5ldHdvcmtpbmdDb250
ZXh0PiBtX2NvbnRleHQ7CisgICAgICAgIGd1bG9uZyBtX2dvdENodW5rSGFuZGxlcjsKICNlbmRp
ZgogI2lmIFBMQVRGT1JNKFFUKQogICAgICAgICBRTmV0d29ya1JlcGx5SGFuZGxlciogbV9qb2I7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRs
ZVNvdXAuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVT
b3VwLmNwcAppbmRleCAwZDg0Mzg4Li42MmIzNzk4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKQEAgLTQ1LDggKzQ1LDgg
QEAKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCiAjaW5jbHVkZSAiUmVzb3Vy
Y2VSZXNwb25zZS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgInNvdXAt
cmVxdWVzdC1odHRwLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCi0KICNpbmNsdWRlIDxl
cnJuby5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8Z2lvL2dpby5oPgpAQCAtNTgs
NiArNTgsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNkZWZpbmUgUkVBRF9CVUZGRVJf
U0laRSA4MTkyCisKIGNsYXNzIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlciA6IHB1YmxpYyBSZXNv
dXJjZUhhbmRsZUNsaWVudCwgcHVibGljIE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoKICAgICBXZWJD
b3JlU3luY2hyb25vdXNMb2FkZXIoUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UgJiwg
VmVjdG9yPGNoYXI+Jik7CkBAIC0xMjAsOSArMTIyLDExIEBAIHZvaWQgV2ViQ29yZVN5bmNocm9u
b3VzTG9hZGVyOjpydW4oKQogICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CiB9
CiAKLXN0YXRpYyB2b2lkIGNsZWFudXBHaW9PcGVyYXRpb24oUmVzb3VyY2VIYW5kbGUqIGhhbmRs
ZSwgYm9vbCBpc0Rlc3Ryb3lpbmcpOwotc3RhdGljIGJvb2wgc3RhcnREYXRhKFJlc291cmNlSGFu
ZGxlKiBoYW5kbGUsIFN0cmluZyB1cmxTdHJpbmcpOwotc3RhdGljIGJvb2wgc3RhcnRHaW8oUmVz
b3VyY2VIYW5kbGUqIGhhbmRsZSwgS1VSTCB1cmwpOworc3RhdGljIHZvaWQgY2xlYW51cFNvdXBS
ZXF1ZXN0T3BlcmF0aW9uKFJlc291cmNlSGFuZGxlKiwgYm9vbCBpc0Rlc3Ryb3lpbmcpOworc3Rh
dGljIHZvaWQgc2VuZFJlcXVlc3RDYWxsYmFjayhHT2JqZWN0KiwgR0FzeW5jUmVzdWx0KiwgZ3Bv
aW50ZXIpOworc3RhdGljIHZvaWQgcmVhZENhbGxiYWNrKEdPYmplY3QqLCBHQXN5bmNSZXN1bHQq
LCBncG9pbnRlcik7CitzdGF0aWMgdm9pZCBjbG9zZUNhbGxiYWNrKEdPYmplY3QqLCBHQXN5bmNS
ZXN1bHQqLCBncG9pbnRlcik7CitzdGF0aWMgYm9vbCBzdGFydEdpbyhSZXNvdXJjZUhhbmRsZSos
IEtVUkwpOwogCiBSZXNvdXJjZUhhbmRsZUludGVybmFsOjp+UmVzb3VyY2VIYW5kbGVJbnRlcm5h
bCgpCiB7CkBAIC0xMzEsNiArMTM1LDkgQEAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6flJlc291
cmNlSGFuZGxlSW50ZXJuYWwoKQogICAgICAgICBtX21zZyA9IDA7CiAgICAgfQogCisgICAgaWYg
KG1fc291cFJlcXVlc3QpCisgICAgICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKG1fc291
cFJlcXVlc3QuZ2V0KCkpLCAid2Via2l0LXJlc291cmNlIiwgMCk7CisKICAgICBpZiAobV9pZGxl
SGFuZGxlcikgewogICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9pZGxlSGFuZGxlcik7CiAgICAg
ICAgIG1faWRsZUhhbmRsZXIgPSAwOwpAQCAtMTQzLDcgKzE1MCw3IEBAIFJlc291cmNlSGFuZGxl
Ojp+UmVzb3VyY2VIYW5kbGUoKQogICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0
X21hdGNoZWQoZC0+bV9tc2csIEdfU0lHTkFMX01BVENIX0RBVEEsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCB0aGlzKTsKIAotICAgIGNs
ZWFudXBHaW9PcGVyYXRpb24odGhpcywgdHJ1ZSk7CisgICAgY2xlYW51cFNvdXBSZXF1ZXN0T3Bl
cmF0aW9uKHRoaXMsIHRydWUpOwogfQogCiB2b2lkIFJlc291cmNlSGFuZGxlOjpwcmVwYXJlRm9y
VVJMKGNvbnN0IEtVUkwgJnVybCkKQEAgLTE4NSw5ICsxOTIsOCBAQCBzdGF0aWMgdm9pZCByZXN0
YXJ0ZWRDYWxsYmFjayhTb3VwTWVzc2FnZSogbXNnLCBncG9pbnRlciBkYXRhKQogICAgIGlmIChk
LT5tX2NhbmNlbGxlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY2hhciogdXJpID0gc291cF91
cmlfdG9fc3RyaW5nKHNvdXBfbWVzc2FnZV9nZXRfdXJpKG1zZyksIGZhbHNlKTsKLSAgICBTdHJp
bmcgbG9jYXRpb24gPSBTdHJpbmcodXJpKTsKLSAgICBnX2ZyZWUodXJpKTsKKyAgICBHT3duUHRy
PGNoYXI+IHVyaShzb3VwX3VyaV90b19zdHJpbmcoc291cF9tZXNzYWdlX2dldF91cmkobXNnKSwg
ZmFsc2UpKTsKKyAgICBTdHJpbmcgbG9jYXRpb24gPSBTdHJpbmc6OmZyb21VVEY4KHVyaS5nZXQo
KSk7CiAgICAgS1VSTCBuZXdVUkwgPSBLVVJMKGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCks
IGxvY2F0aW9uKTsKIAogICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0ID0gaGFuZGxlLT5maXJz
dFJlcXVlc3QoKTsKQEAgLTI5Myw1MyArMjk5LDkgQEAgc3RhdGljIHZvaWQgZ290Q2h1bmtDYWxs
YmFjayhTb3VwTWVzc2FnZSogbXNnLCBTb3VwQnVmZmVyKiBjaHVuaywgZ3BvaW50ZXIgZGF0YSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0YShoYW5kbGUuZ2V0
KCksIGNodW5rLT5kYXRhLCBjaHVuay0+bGVuZ3RoLCBmYWxzZSk7Ci19Ci0KLS8vIENhbGxlZCBh
dCB0aGUgZW5kIG9mIHRoZSBtZXNzYWdlLCB3aXRoIGFsbCB0aGUgbmVjZXNzYXJ5IGFib3V0IHRo
ZSBsYXN0IGluZm9ybWF0aW9ucy4KLS8vIERvZXNuJ3QgZ2V0IGNhbGxlZCBmb3IgcmVkaXJlY3Rz
Lgotc3RhdGljIHZvaWQgZmluaXNoZWRDYWxsYmFjayhTb3VwU2Vzc2lvbiAqc2Vzc2lvbiwgU291
cE1lc3NhZ2UqIG1zZywgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBSZWZQdHI8UmVzb3VyY2VIYW5k
bGU+IGhhbmRsZSA9IGFkb3B0UmVmKHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxlKj4oZGF0YSkp
OwotICAgIC8vIFRPRE86IG1heWJlIHdlIHNob3VsZCBydW4gdGhpcyBjb2RlIGV2ZW4gaWYgdGhl
cmUncyBubyBjbGllbnQ/Ci0gICAgaWYgKCFoYW5kbGUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFsKCk7Ci0KLSAg
ICBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0gaGFuZGxlLT5jbGllbnQoKTsKLSAgICBp
ZiAoIWNsaWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGQtPm1fY2FuY2VsbGVkKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoU09VUF9TVEFUVVNfSVNfVFJBTlNQT1JUX0VSUk9S
KG1zZy0+c3RhdHVzX2NvZGUpKSB7Ci0gICAgICAgIGNoYXIqIHVyaSA9IHNvdXBfdXJpX3RvX3N0
cmluZyhzb3VwX21lc3NhZ2VfZ2V0X3VyaShtc2cpLCBmYWxzZSk7Ci0gICAgICAgIFJlc291cmNl
RXJyb3IgZXJyb3IoZ19xdWFya190b19zdHJpbmcoU09VUF9IVFRQX0VSUk9SKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtc2ctPnN0YXR1c19jb2RlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVyaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc6OmZyb21V
VEY4KG1zZy0+cmVhc29uX3BocmFzZSkpOwotICAgICAgICBnX2ZyZWUodXJpKTsKLSAgICAgICAg
Y2xpZW50LT5kaWRGYWlsKGhhbmRsZS5nZXQoKSwgZXJyb3IpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgaWYgKG1zZy0+c3RhdHVzX2NvZGUgPT0gU09VUF9TVEFUVVNfVU5BVVRIT1JJ
WkVEKSB7Ci0gICAgICAgIGZpbGxSZXNwb25zZUZyb21NZXNzYWdlKG1zZywgJmQtPm1fcmVzcG9u
c2UpOwotICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShoYW5kbGUuZ2V0KCksIGQt
Pm1fcmVzcG9uc2UpOwotCi0gICAgICAgIC8vIFdlYkNvcmUgbWlnaHQgaGF2ZSBjYW5jZWxsZWQg
dGhlIGpvYiBpbiB0aGUgd2hpbGUKLSAgICAgICAgaWYgKGQtPm1fY2FuY2VsbGVkKQotICAgICAg
ICAgICAgcmV0dXJuOwogCi0gICAgICAgIGlmIChtc2ctPnJlc3BvbnNlX2JvZHktPmRhdGEpCi0g
ICAgICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVEYXRhKGhhbmRsZS5nZXQoKSwgbXNnLT5yZXNw
b25zZV9ib2R5LT5kYXRhLCBtc2ctPnJlc3BvbnNlX2JvZHktPmxlbmd0aCwgdHJ1ZSk7Ci0gICAg
fQotCi0gICAgY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKGhhbmRsZS5nZXQoKSwgMCk7CiB9CiAK
LS8vIHBhcnNlRGF0YVVybCgpIGlzIHRha2VuIGZyb20gdGhlIENVUkwgaHR0cCBiYWNrZW5kLgog
c3RhdGljIGdib29sZWFuIHBhcnNlRGF0YVVybChncG9pbnRlciBjYWxsYmFja0RhdGEpCiB7CiAg
ICAgUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSA9IHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxlKj4o
Y2FsbGJhY2tEYXRhKTsKQEAgLTM2NCw3ICszMjYsNiBAQCBzdGF0aWMgZ2Jvb2xlYW4gcGFyc2VE
YXRhVXJsKGdwb2ludGVyIGNhbGxiYWNrRGF0YSkKICAgICB9CiAKICAgICBTdHJpbmcgbWVkaWFU
eXBlID0gdXJsLnN1YnN0cmluZyg1LCBpbmRleCAtIDUpOwotICAgIFN0cmluZyBkYXRhID0gdXJs
LnN1YnN0cmluZyhpbmRleCArIDEpOwogCiAgICAgYm9vbCBpc0Jhc2U2NCA9IG1lZGlhVHlwZS5l
bmRzV2l0aCgiO2Jhc2U2NCIsIGZhbHNlKTsKICAgICBpZiAoaXNCYXNlNjQpCkBAIC0zODAsNDIg
KzM0MSwzOCBAQCBzdGF0aWMgZ2Jvb2xlYW4gcGFyc2VEYXRhVXJsKGdwb2ludGVyIGNhbGxiYWNr
RGF0YSkKICAgICByZXNwb25zZS5zZXRVUkwoaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKSk7
CiAgICAgcmVzcG9uc2Uuc2V0TWltZVR5cGUobWltZVR5cGUpOwogCi0gICAgaWYgKGlzQmFzZTY0
KSB7Ci0gICAgICAgIGRhdGEgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoZGF0YSk7Ci0gICAg
ICAgIHJlc3BvbnNlLnNldFRleHRFbmNvZGluZ05hbWUoY2hhcnNldCk7Ci0gICAgICAgIGNsaWVu
dC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGhhbmRsZSwgcmVzcG9uc2UpOwotCi0gICAgICAgIC8vIFRo
ZSBsb2FkIG1heSBiZSBjYW5jZWxsZWQsIGFuZCB0aGUgY2xpZW50IG1heSBiZSBkZXN0cm95ZWQK
LSAgICAgICAgLy8gYnkgYW55IG9mIHRoZSBjbGllbnQgcmVwb3J0aW5nIGNhbGxzLCBzbyB3ZSBj
aGVjaywgYW5kIGJhaWwKLSAgICAgICAgLy8gb3V0IGluIGVpdGhlciBvZiB0aG9zZSBjYXNlcy4K
LSAgICAgICAgaWYgKGQtPm1fY2FuY2VsbGVkIHx8ICFoYW5kbGUtPmNsaWVudCgpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8vIFVzZSB0aGUgR0xpYiBCYXNlNjQsIHNp
bmNlIFdlYkNvcmUncyBkZWNvZGVyIGlzbid0Ci0gICAgICAgIC8vIGdlbmVyYWwtcHVycG9zZSBh
bmQgZmFpbHMgb24gQWNpZDMgdGVzdCA5NyAod2hpdGVzcGFjZSkuCi0gICAgICAgIHNpemVfdCBv
dXRMZW5ndGggPSAwOwotICAgICAgICBjaGFyKiBvdXREYXRhID0gMDsKLSAgICAgICAgb3V0RGF0
YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGdfYmFzZTY0X2RlY29kZShkYXRhLnV0ZjgoKS5k
YXRhKCksICZvdXRMZW5ndGgpKTsKLSAgICAgICAgaWYgKG91dERhdGEgJiYgb3V0TGVuZ3RoID4g
MCkKLSAgICAgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURhdGEoaGFuZGxlLCBvdXREYXRhLCBv
dXRMZW5ndGgsIDApOwotICAgICAgICBnX2ZyZWUob3V0RGF0YSk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgLy8gV2UgaGF2ZSB0byBjb252ZXJ0IHRvIFVURi0xNiBlYXJseSBkdWUgdG8gbGltaXRh
dGlvbnMgaW4gS1VSTAotICAgICAgICBkYXRhID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGRh
dGEsIFRleHRFbmNvZGluZyhjaGFyc2V0KSk7Ci0gICAgICAgIHJlc3BvbnNlLnNldFRleHRFbmNv
ZGluZ05hbWUoIlVURi0xNiIpOwotICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZSho
YW5kbGUsIHJlc3BvbnNlKTsKLQotICAgICAgICBpZiAoZC0+bV9jYW5jZWxsZWQgfHwgIWhhbmRs
ZS0+Y2xpZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKGRh
dGEubGVuZ3RoKCkgPiAwKQotICAgICAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0YShoYW5k
bGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEuY2hhcmFjdGVycygpKSwgZGF0
YS5sZW5ndGgoKSAqIHNpemVvZihVQ2hhciksIDApOwotICAgIH0KKyAgICAvLyBGb3Igbm9uIGJh
c2U2NCBlbmNvZGVkIGRhdGEgd2UgaGF2ZSB0byBjb252ZXJ0IHRvIFVURi0xNiBlYXJseQorICAg
IC8vIGR1ZSB0byBsaW1pdGF0aW9ucyBpbiBLVVJMCisgICAgcmVzcG9uc2Uuc2V0VGV4dEVuY29k
aW5nTmFtZShpc0Jhc2U2NCA/IGNoYXJzZXQgOiAiVVRGLTE2Iik7CisgICAgY2xpZW50LT5kaWRS
ZWNlaXZlUmVzcG9uc2UoaGFuZGxlLCByZXNwb25zZSk7CiAKKyAgICAvLyBUaGUgbG9hZCBtYXkg
YmUgY2FuY2VsbGVkLCBhbmQgdGhlIGNsaWVudCBtYXkgYmUgZGVzdHJveWVkCisgICAgLy8gYnkg
YW55IG9mIHRoZSBjbGllbnQgcmVwb3J0aW5nIGNhbGxzLCBzbyB3ZSBjaGVjaywgYW5kIGJhaWwK
KyAgICAvLyBvdXQgaW4gZWl0aGVyIG9mIHRob3NlIGNhc2VzLgogICAgIGlmIChkLT5tX2NhbmNl
bGxlZCB8fCAhaGFuZGxlLT5jbGllbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
Y2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKGhhbmRsZSwgMCk7CisgICAgU291cFNlc3Npb24qIHNl
c3Npb24gPSBoYW5kbGUtPmRlZmF1bHRTZXNzaW9uKCk7CisgICAgR093blB0cjxHRXJyb3I+IGVy
cm9yOworICAgIGQtPm1fc291cFJlcXVlc3QgPSB3ZWJraXRfc291cF9yZXF1ZXN0ZXJfcmVxdWVz
dChkLT5tX3JlcXVlc3Rlci5nZXQoKSwgaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpLCBzZXNzaW9uLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGlmIChl
cnJvcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR0lucHV0U3RyZWFtKiBpbiA9IHdl
YmtpdF9zb3VwX3JlcXVlc3Rfc2VuZChkLT5tX3NvdXBSZXF1ZXN0LmdldCgpLCAwLCAmZXJyb3Iu
b3V0UHRyKCkpOworICAgIGlmIChlcnJvcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ZC0+bV9pbnB1dFN0cmVhbSA9IGluOworICAgIGQtPm1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8Y2hh
cio+KGdfbWFsbG9jKFJFQURfQlVGRkVSX1NJWkUpKTsKKyAgICBkLT5tX3RvdGFsID0gMDsKKwor
ICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1faW5wdXRTdHJlYW0uZ2V0KCkpLCAi
d2Via2l0LXJlc291cmNlIiwgaGFuZGxlKTsKKyAgICAvLyBiYWxhbmNlZCBieSBhIGRlcmVmKCkg
aW4gY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uLCB3aGljaCBzaG91bGQgYWx3YXlzIHJ1bgor
ICAgIGhhbmRsZS0+cmVmKCk7CisKKyAgICBkLT5tX2NhbmNlbGxhYmxlID0gZ19jYW5jZWxsYWJs
ZV9uZXcoKTsKKyAgICBnX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jKGQtPm1faW5wdXRTdHJlYW0u
Z2V0KCksIGQtPm1fYnVmZmVyLCBSRUFEX0JVRkZFUl9TSVpFLCBHX1BSSU9SSVRZX0RFRkFVTFQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLT5tX2NhbmNlbGxhYmxlLmdldCgpLCBy
ZWFkQ2FsbGJhY2ssIEdJTlRfVE9fUE9JTlRFUighaXNCYXNlNjQpKTsKIAogICAgIHJldHVybiBm
YWxzZTsKIH0KQEAgLTQ2OSw2ICs0MjYsMTI2IEBAIHN0YXRpYyB2b2lkIGVuc3VyZVNlc3Npb25J
c0luaXRpYWxpemVkKFNvdXBTZXNzaW9uKiBzZXNzaW9uKQogICAgIGdfb2JqZWN0X3NldF9kYXRh
KEdfT0JKRUNUKHNlc3Npb24pLCAid2Via2l0LWluaXQiLCByZWludGVycHJldF9jYXN0PHZvaWQq
PigweGRlYWRiZWVmKSk7CiB9CiAKK3N0YXRpYyB2b2lkIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJh
dGlvbihSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBib29sIGlzRGVzdHJveWluZyA9IGZhbHNlKQor
eworICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFsKCk7
CisKKyAgICBpZiAoZC0+bV9zb3VwUmVxdWVzdCkgeworICAgICAgICBnX29iamVjdF9zZXRfZGF0
YShHX09CSkVDVChkLT5tX3NvdXBSZXF1ZXN0LmdldCgpKSwgIndlYmtpdC1yZXNvdXJjZSIsIDAp
OworICAgICAgICBkLT5tX3NvdXBSZXF1ZXN0LmNsZWFyKCk7CisgICAgfQorCisgICAgaWYgKGQt
Pm1faW5wdXRTdHJlYW0pIHsKKyAgICAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+
bV9pbnB1dFN0cmVhbS5nZXQoKSksICJ3ZWJraXQtcmVzb3VyY2UiLCAwKTsKKyAgICAgICAgZC0+
bV9pbnB1dFN0cmVhbS5jbGVhcigpOworICAgIH0KKworICAgIGlmIChkLT5tX2J1ZmZlcikgewor
ICAgICAgICBnX2ZyZWUoZC0+bV9idWZmZXIpOworICAgICAgICBkLT5tX2J1ZmZlciA9IDA7Cisg
ICAgfQorCisgICAgaWYgKCFpc0Rlc3Ryb3lpbmcpCisgICAgICAgIGhhbmRsZS0+ZGVyZWYoKTsK
K30KKworc3RhdGljIHZvaWQgc2VuZFJlcXVlc3RDYWxsYmFjayhHT2JqZWN0KiBzb3VyY2UsIEdB
c3luY1Jlc3VsdCogcmVzLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBSZWZQdHI8UmVzb3Vy
Y2VIYW5kbGU+IGhhbmRsZSA9IHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxlKj4oZ19vYmplY3Rf
Z2V0X2RhdGEoc291cmNlLCAid2Via2l0LXJlc291cmNlIikpOworICAgIGlmICghaGFuZGxlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0gaGFuZGxl
LT5nZXRJbnRlcm5hbCgpOworICAgIFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQgPSBoYW5k
bGUtPmNsaWVudCgpOworCisgICAgaWYgKGQtPm1fZ290Q2h1bmtIYW5kbGVyKSB7CisgICAgICAg
IC8vIE5vIG5lZWQgdG8gY2FsbCBnb3RDaHVua0hhbmRsZXIgYW55bW9yZS4gUmVjZWl2ZWQgZGF0
YSB3aWxsCisgICAgICAgIC8vIGJlIHJlcG9ydGVkIGJ5IHJlYWRDYWxsYmFjaworICAgICAgICBp
ZiAoZ19zaWduYWxfaGFuZGxlcl9pc19jb25uZWN0ZWQoZC0+bV9tc2csIGQtPm1fZ290Q2h1bmtI
YW5kbGVyKSkKKyAgICAgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdChkLT5tX21z
ZywgZC0+bV9nb3RDaHVua0hhbmRsZXIpOworICAgIH0KKworICAgIGlmIChkLT5tX2NhbmNlbGxl
ZCB8fCAhY2xpZW50KSB7CisgICAgICAgIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5k
bGUuZ2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgR093blB0cjxHRXJyb3I+
IGVycm9yOworICAgIEdJbnB1dFN0cmVhbSogaW4gPSB3ZWJraXRfc291cF9yZXF1ZXN0X3NlbmRf
ZmluaXNoKGQtPm1fc291cFJlcXVlc3QuZ2V0KCksIHJlcywgJmVycm9yLm91dFB0cigpKTsKKwor
ICAgIGlmIChlcnJvcikgeworICAgICAgICBnYm9vbGVhbiBpc1RyYW5zcG9ydEVycm9yID0gZC0+
bV9tc2cgJiYgU09VUF9TVEFUVVNfSVNfVFJBTlNQT1JUX0VSUk9SKGQtPm1fbXNnLT5zdGF0dXNf
Y29kZSk7CisKKyAgICAgICAgaWYgKGlzVHJhbnNwb3J0RXJyb3IgfHwgKGVycm9yLT5kb21haW4g
PT0gR19JT19FUlJPUikpIHsKKyAgICAgICAgICAgIFNvdXBVUkkqIHVyaSA9IHdlYmtpdF9zb3Vw
X3JlcXVlc3RfZ2V0X3VyaShkLT5tX3NvdXBSZXF1ZXN0LmdldCgpKTsKKyAgICAgICAgICAgIEdP
d25QdHI8Y2hhcj4gdXJpU3RyKHNvdXBfdXJpX3RvX3N0cmluZyh1cmksIGZhbHNlKSk7CisgICAg
ICAgICAgICBnaW50IGVycm9yQ29kZSA9IGlzVHJhbnNwb3J0RXJyb3IgPyBkLT5tX21zZy0+c3Rh
dHVzX2NvZGUgOiBlcnJvci0+Y29kZTsKKyAgICAgICAgICAgIGNvbnN0IGdjaGFyKiBlcnJvck1z
ZyA9IGlzVHJhbnNwb3J0RXJyb3IgPyBkLT5tX21zZy0+cmVhc29uX3BocmFzZSA6IGVycm9yLT5t
ZXNzYWdlOworICAgICAgICAgICAgY29uc3QgZ2NoYXIqIHF1YXJrU3RyID0gaXNUcmFuc3BvcnRF
cnJvciA/IGdfcXVhcmtfdG9fc3RyaW5nKFNPVVBfSFRUUF9FUlJPUikgOiBnX3F1YXJrX3RvX3N0
cmluZyhHX0lPX0VSUk9SKTsKKyAgICAgICAgICAgIFJlc291cmNlRXJyb3IgcmVzb3VyY2VFcnJv
cihxdWFya1N0ciwgZXJyb3JDb2RlLCB1cmlTdHIuZ2V0KCksIFN0cmluZzo6ZnJvbVVURjgoZXJy
b3JNc2cpKTsKKworICAgICAgICAgICAgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKGhhbmRs
ZS5nZXQoKSk7CisgICAgICAgICAgICBjbGllbnQtPmRpZEZhaWwoaGFuZGxlLmdldCgpLCByZXNv
dXJjZUVycm9yKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChkLT5tX21zZyAmJiBkLT5tX21zZy0+c3RhdHVzX2NvZGUgPT0gU09VUF9TVEFUVVNfVU5BVVRI
T1JJWkVEKSB7CisgICAgICAgICAgICBmaWxsUmVzcG9uc2VGcm9tTWVzc2FnZShkLT5tX21zZywg
JmQtPm1fcmVzcG9uc2UpOworICAgICAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2Uo
aGFuZGxlLmdldCgpLCBkLT5tX3Jlc3BvbnNlKTsKKworICAgICAgICAgICAgLy8gV2ViQ29yZSBt
aWdodCBoYXZlIGNhbmNlbGxlZCB0aGUgam9iIGluIHRoZSB3aGlsZQorICAgICAgICAgICAgaWYg
KGQtPm1fY2FuY2VsbGVkKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAg
aWYgKGQtPm1fbXNnLT5yZXNwb25zZV9ib2R5LT5kYXRhKQorICAgICAgICAgICAgICAgIGNsaWVu
dC0+ZGlkUmVjZWl2ZURhdGEoaGFuZGxlLmdldCgpLCBkLT5tX21zZy0+cmVzcG9uc2VfYm9keS0+
ZGF0YSwgZC0+bV9tc2ctPnJlc3BvbnNlX2JvZHktPmxlbmd0aCwgdHJ1ZSk7CisgICAgICAgIH0K
KworICAgICAgICAvLyBkaWRSZWNlaXZlRGF0YSBhYm92ZSBtaWdodCBoYXZlIGNhbmNlbGxlZCBp
dAorICAgICAgICBpZiAoZC0+bV9jYW5jZWxsZWQgfHwgIWNsaWVudCkgeworICAgICAgICAgIGNs
ZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOworICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGNsaWVudC0+ZGlkRmluaXNoTG9hZGluZyhoYW5kbGUu
Z2V0KCksIDApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGQtPm1fY2FuY2Vs
bGVkKSB7CisgICAgICAgIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZC0+bV9pbnB1dFN0cmVhbSA9IGluOwor
ICAgIGQtPm1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGdfbWFsbG9jKFJFQURfQlVGRkVS
X1NJWkUpKTsKKyAgICBkLT5tX3RvdGFsID0gMDsKKworICAgIC8vIHJlYWRDYWxsYmFjayBuZWVk
cyBpdAorICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1faW5wdXRTdHJlYW0uZ2V0
KCkpLCAid2Via2l0LXJlc291cmNlIiwgaGFuZGxlLmdldCgpKTsKKworICAgIC8vIFdlIG5lZWQg
dG8gY2hlY2sgaWYgaXQncyBhIGZpbGU6IFVSTCBhbmQgaWYgaXQgaXMgYSByZWd1bGFyCisgICAg
Ly8gZmlsZSBhcyBpdCBjb3VsZCBiZSBhIGRpcmVjdG9yeS4gSW4gdGhhdCBjYXNlIFNvdXAgcHJv
cGVybHkKKyAgICAvLyByZXR1cm5zIGEgc3RyZWFtIHdob3NlIGNvbnRlbnQgaXMgYSBIVE1MIHdp
dGggYSBsaXN0IG9mIGZpbGVzCisgICAgLy8gaW4gdGhlIGRpcmVjdG9yeQorICAgIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnByb3RvY29sKCksICJm
aWxlIikKKyAgICAgICAgJiYgR19JU19GSUxFX0lOUFVUX1NUUkVBTShpbikpIHsKKyAgICAgICAg
UmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsKKworICAgICAgICByZXNwb25zZS5zZXRVUkwoaGFu
ZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKSk7CisgICAgICAgIHJlc3BvbnNlLnNldE1pbWVUeXBl
KHdlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X2NvbnRlbnRfdHlwZShkLT5tX3NvdXBSZXF1ZXN0Lmdl
dCgpKSk7CisgICAgICAgIHJlc3BvbnNlLnNldEV4cGVjdGVkQ29udGVudExlbmd0aCh3ZWJraXRf
c291cF9yZXF1ZXN0X2dldF9jb250ZW50X2xlbmd0aChkLT5tX3NvdXBSZXF1ZXN0LmdldCgpKSk7
CisgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGhhbmRsZS5nZXQoKSwgcmVzcG9u
c2UpOworCisgICAgICAgIGlmIChkLT5tX2NhbmNlbGxlZCkgeworICAgICAgICAgICAgY2xlYW51
cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBnX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jKGQtPm1f
aW5wdXRTdHJlYW0uZ2V0KCksIGQtPm1fYnVmZmVyLCBSRUFEX0JVRkZFUl9TSVpFLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR19QUklPUklUWV9ERUZBVUxULCBkLT5tX2NhbmNlbGxh
YmxlLmdldCgpLCByZWFkQ2FsbGJhY2ssIDApOworfQorCiBzdGF0aWMgYm9vbCBzdGFydEh0dHAo
UmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKIHsKICAgICBBU1NFUlQoaGFuZGxlKTsKQEAgLTQ4Myw3
ICs1NjAsMTYgQEAgc3RhdGljIGJvb2wgc3RhcnRIdHRwKFJlc291cmNlSGFuZGxlKiBoYW5kbGUp
CiAgICAgdXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwogICAgIHJlcXVlc3Quc2V0VVJM
KHVybCk7CiAKLSAgICBkLT5tX21zZyA9IHJlcXVlc3QudG9Tb3VwTWVzc2FnZSgpOworICAgIEdP
d25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBkLT5tX3NvdXBSZXF1ZXN0ID0gd2Via2l0X3NvdXBf
cmVxdWVzdGVyX3JlcXVlc3QoZC0+bV9yZXF1ZXN0ZXIuZ2V0KCksIHVybC5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpLCBzZXNzaW9uLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGlmIChlcnJvcikKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+
bV9zb3VwUmVxdWVzdC5nZXQoKSksICJ3ZWJraXQtcmVzb3VyY2UiLCBoYW5kbGUpOworCisgICAg
ZC0+bV9tc2cgPSB3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfZ2V0X21lc3NhZ2UoV0VCS0lUX1NP
VVBfUkVRVUVTVF9IVFRQKGQtPm1fc291cFJlcXVlc3QuZ2V0KCkpKTsKKyAgICByZXF1ZXN0LnVw
ZGF0ZVNvdXBNZXNzYWdlKGQtPm1fbXNnKTsKKwogICAgIGlmICghZC0+bV9tc2cpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIApAQCAtNDkzLDcgKzU3OSw3IEBAIHN0YXRpYyBib29sIHN0YXJ0SHR0
cChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQogICAgIGdfc2lnbmFsX2Nvbm5lY3QoZC0+bV9tc2cs
ICJyZXN0YXJ0ZWQiLCBHX0NBTExCQUNLKHJlc3RhcnRlZENhbGxiYWNrKSwgaGFuZGxlKTsKICAg
ICBnX3NpZ25hbF9jb25uZWN0KGQtPm1fbXNnLCAiZ290LWhlYWRlcnMiLCBHX0NBTExCQUNLKGdv
dEhlYWRlcnNDYWxsYmFjayksIGhhbmRsZSk7CiAgICAgZ19zaWduYWxfY29ubmVjdChkLT5tX21z
ZywgImNvbnRlbnQtc25pZmZlZCIsIEdfQ0FMTEJBQ0soY29udGVudFNuaWZmZWRDYWxsYmFjayks
IGhhbmRsZSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChkLT5tX21zZywgImdvdC1jaHVuayIsIEdf
Q0FMTEJBQ0soZ290Q2h1bmtDYWxsYmFjayksIGhhbmRsZSk7CisgICAgZC0+bV9nb3RDaHVua0hh
bmRsZXIgPSBnX3NpZ25hbF9jb25uZWN0KGQtPm1fbXNnLCAiZ290LWNodW5rIiwgR19DQUxMQkFD
Syhnb3RDaHVua0NhbGxiYWNrKSwgaGFuZGxlKTsKIAogI2lmZGVmIEhBVkVfTElCU09VUF8yXzI5
XzkwCiAgICAgU3RyaW5nIGZpcnN0UGFydHlTdHJpbmcgPSByZXF1ZXN0LmZpcnN0UGFydHlGb3JD
b29raWVzKCkuc3RyaW5nKCk7CkBAIC01MDIsNyArNTg4LDYgQEAgc3RhdGljIGJvb2wgc3RhcnRI
dHRwKFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCiAgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfZmly
c3RfcGFydHkoZC0+bV9tc2csIGZpcnN0UGFydHkuZ2V0KCkpOwogICAgIH0KICNlbmRpZgotICAg
IGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1fbXNnKSwgInJlc291cmNlSGFuZGxlIiwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaGFuZGxlKSk7CiAKICAgICBGb3JtRGF0YSogaHR0cEJv
ZHkgPSBkLT5tX2ZpcnN0UmVxdWVzdC5odHRwQm9keSgpOwogICAgIGlmIChodHRwQm9keSAmJiAh
aHR0cEJvZHktPmlzRW1wdHkoKSkgewpAQCAtNTMyLDEyICs2MTcsMTEgQEAgc3RhdGljIGJvb2wg
c3RhcnRIdHRwKFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCiAgICAgICAgICAgICAgICAgICAgICAq
IG1hcHBpbmcgZm9yIHVwbG9hZGVkIGZpbGVzIGNvZGUgaW5zcGlyZWQgYnkgdGVjaG5pcXVlIHVz
ZWQgaW4KICAgICAgICAgICAgICAgICAgICAgICogbGlic291cCdzIHNpbXBsZS1odHRwZCB0ZXN0
CiAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICBHRXJyb3IqIGVy
cm9yID0gMDsKKyAgICAgICAgICAgICAgICAgICAgR093blB0cjxHRXJyb3I+IGVycm9yOwogICAg
ICAgICAgICAgICAgICAgICBDU3RyaW5nIGZpbGVOYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0
aW9uKGVsZW1lbnQubV9maWxlbmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIEdNYXBwZWRGaWxl
KiBmaWxlTWFwcGluZyA9IGdfbWFwcGVkX2ZpbGVfbmV3KGZpbGVOYW1lLmRhdGEoKSwgZmFsc2Us
ICZlcnJvcik7CisgICAgICAgICAgICAgICAgICAgIEdNYXBwZWRGaWxlKiBmaWxlTWFwcGluZyA9
IGdfbWFwcGVkX2ZpbGVfbmV3KGZpbGVOYW1lLmRhdGEoKSwgZmFsc2UsICZlcnJvci5vdXRQdHIo
KSk7CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOwogICAgICAgICAgICAgICAgICAgICAgICAgZ19z
aWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKGQtPm1fbXNnLCBHX1NJR05BTF9NQVRD
SF9EQVRBLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDAsIDAsIDAsIDAsIGhhbmRsZSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBnX29iamVjdF91bnJlZihkLT5tX21zZyk7CkBAIC01NDksMTEgKzYzMyw3IEBAIHN0YXRpYyBi
b29sIHN0YXJ0SHR0cChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQogICAgICAgICAgICAgICAgICAg
ICBTb3VwQnVmZmVyKiBzb3VwQnVmZmVyID0gc291cF9idWZmZXJfbmV3X3dpdGhfb3duZXIoZ19t
YXBwZWRfZmlsZV9nZXRfY29udGVudHMoZmlsZU1hcHBpbmcpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19t
YXBwZWRfZmlsZV9nZXRfbGVuZ3RoKGZpbGVNYXBwaW5nKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVN
YXBwaW5nLAotI2lmIEdMSUJfQ0hFQ0tfVkVSU0lPTigyLCAyMSwgMykKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdfbWFwcGVkX2ZpbGVfdW5yZWYpKTsK
LSNlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5Pihn
X21hcHBlZF9maWxlX2ZyZWUpKTsKLSNlbmRpZgogICAgICAgICAgICAgICAgICAgICBzb3VwX21l
c3NhZ2VfYm9keV9hcHBlbmRfYnVmZmVyKGQtPm1fbXNnLT5yZXF1ZXN0X2JvZHksIHNvdXBCdWZm
ZXIpOwogICAgICAgICAgICAgICAgICAgICBzb3VwX2J1ZmZlcl9mcmVlKHNvdXBCdWZmZXIpOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTU2MSw3ICs2NDEsNyBAQCBzdGF0aWMgYm9vbCBzdGFydEh0
dHAoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIGJh
bGFuY2VkIGJ5IGEgZGVyZWYoKSBpbiBmaW5pc2hlZENhbGxiYWNrLCB3aGljaCBzaG91bGQgYWx3
YXlzIHJ1bgorICAgIC8vIGJhbGFuY2VkIGJ5IGEgZGVyZWYoKSBpbiBjbGVhbnVwU291cFJlcXVl
c3RPcGVyYXRpb24sIHdoaWNoIHNob3VsZCBhbHdheXMgcnVuCiAgICAgaGFuZGxlLT5yZWYoKTsK
IAogICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGFuIEFjY2VwdCBoZWFkZXIgZm9yIHN1YnJlc291
cmNlczsgc29tZSBzaXRlcwpAQCAtNTY5LDExICs2NDksOCBAQCBzdGF0aWMgYm9vbCBzdGFydEh0
dHAoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKICAgICBpZiAoIXNvdXBfbWVzc2FnZV9oZWFkZXJz
X2dldF9vbmUoZC0+bV9tc2ctPnJlcXVlc3RfaGVhZGVycywgIkFjY2VwdCIpKQogICAgICAgICBz
b3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQoZC0+bV9tc2ctPnJlcXVlc3RfaGVhZGVycywgIkFj
Y2VwdCIsICIqLyoiKTsKIAotICAgIC8vIEJhbGFuY2VkIGluIFJlc291cmNlSGFuZGxlSW50ZXJu
YWwncyBkZXN0cnVjdG9yOyB3ZSBuZWVkIHRvCi0gICAgLy8ga2VlcCBvdXIgb3duIHJlZiwgYmVj
YXVzZSBhZnRlciBxdWV1ZWluZyB0aGUgbWVzc2FnZSwgdGhlCi0gICAgLy8gc2Vzc2lvbiBvd25z
IHRoZSBpbml0aWFsIHJlZmVyZW5jZS4KLSAgICBnX29iamVjdF9yZWYoZC0+bV9tc2cpOwotICAg
IHNvdXBfc2Vzc2lvbl9xdWV1ZV9tZXNzYWdlKHNlc3Npb24sIGQtPm1fbXNnLCBmaW5pc2hlZENh
bGxiYWNrLCBoYW5kbGUpOworICAgIGQtPm1fY2FuY2VsbGFibGUgPSBnX2NhbmNlbGxhYmxlX25l
dygpOworICAgIHdlYmtpdF9zb3VwX3JlcXVlc3Rfc2VuZF9hc3luYyhkLT5tX3NvdXBSZXF1ZXN0
LmdldCgpLCBkLT5tX2NhbmNlbGxhYmxlLmdldCgpLCBzZW5kUmVxdWVzdENhbGxiYWNrLCAwKTsK
IAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNjIzLDcgKzcwMCw3IEBAIHZvaWQgUmVzb3VyY2VI
YW5kbGU6OmNhbmNlbCgpCiAgICAgaWYgKGQtPm1fbXNnKQogICAgICAgICBzb3VwX3Nlc3Npb25f
Y2FuY2VsX21lc3NhZ2UoZGVmYXVsdFNlc3Npb24oKSwgZC0+bV9tc2csIFNPVVBfU1RBVFVTX0NB
TkNFTExFRCk7CiAgICAgZWxzZSBpZiAoZC0+bV9jYW5jZWxsYWJsZSkKLSAgICAgICAgZ19jYW5j
ZWxsYWJsZV9jYW5jZWwoZC0+bV9jYW5jZWxsYWJsZSk7CisgICAgICAgIGdfY2FuY2VsbGFibGVf
Y2FuY2VsKGQtPm1fY2FuY2VsbGFibGUuZ2V0KCkpOwogfQogCiBQYXNzUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gUmVzb3VyY2VIYW5kbGU6OmJ1ZmZlcmVkRGF0YSgpCkBAIC02NjcsMzggKzc0NCw2IEBA
IHZvaWQgUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2lu
Z0NvbnRleHQqIGNvbnRleHQsIGNvbnN0CiAgICAgc3luY0xvYWRlci5ydW4oKTsKIH0KIAotLy8g
R0lPLWJhc2VkIGxvYWRlcgotCi1zdGF0aWMgdm9pZCBjbGVhbnVwR2lvT3BlcmF0aW9uKFJlc291
cmNlSGFuZGxlKiBoYW5kbGUsIGJvb2wgaXNEZXN0cm95aW5nID0gZmFsc2UpCi17Ci0gICAgUmVz
b3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKLQotICAgIGlm
IChkLT5tX2dmaWxlKSB7Ci0gICAgICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1f
Z2ZpbGUpLCAid2Via2l0LXJlc291cmNlIiwgMCk7Ci0gICAgICAgIGdfb2JqZWN0X3VucmVmKGQt
Pm1fZ2ZpbGUpOwotICAgICAgICBkLT5tX2dmaWxlID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoZC0+
bV9jYW5jZWxsYWJsZSkgewotICAgICAgICBnX29iamVjdF91bnJlZihkLT5tX2NhbmNlbGxhYmxl
KTsKLSAgICAgICAgZC0+bV9jYW5jZWxsYWJsZSA9IDA7Ci0gICAgfQotCi0gICAgaWYgKGQtPm1f
aW5wdXRTdHJlYW0pIHsKLSAgICAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9p
bnB1dFN0cmVhbSksICJ3ZWJraXQtcmVzb3VyY2UiLCAwKTsKLSAgICAgICAgZ19vYmplY3RfdW5y
ZWYoZC0+bV9pbnB1dFN0cmVhbSk7Ci0gICAgICAgIGQtPm1faW5wdXRTdHJlYW0gPSAwOwotICAg
IH0KLQotICAgIGlmIChkLT5tX2J1ZmZlcikgewotICAgICAgICBnX2ZyZWUoZC0+bV9idWZmZXIp
OwotICAgICAgICBkLT5tX2J1ZmZlciA9IDA7Ci0gICAgfQotCi0gICAgaWYgKCFpc0Rlc3Ryb3lp
bmcpCi0gICAgICAgIGhhbmRsZS0+ZGVyZWYoKTsKLX0KLQogc3RhdGljIHZvaWQgY2xvc2VDYWxs
YmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzLCBncG9pbnRlcikKIHsKICAg
ICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9IHN0YXRpY19jYXN0PFJlc291cmNlSGFu
ZGxlKj4oZ19vYmplY3RfZ2V0X2RhdGEoc291cmNlLCAid2Via2l0LXJlc291cmNlIikpOwpAQCAt
NzA4LDggKzc1Myw4IEBAIHN0YXRpYyB2b2lkIGNsb3NlQ2FsbGJhY2soR09iamVjdCogc291cmNl
LCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIpCiAgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5h
bCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKICAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCog
Y2xpZW50ID0gaGFuZGxlLT5jbGllbnQoKTsKIAotICAgIGdfaW5wdXRfc3RyZWFtX2Nsb3NlX2Zp
bmlzaChkLT5tX2lucHV0U3RyZWFtLCByZXMsIDApOwotICAgIGNsZWFudXBHaW9PcGVyYXRpb24o
aGFuZGxlLmdldCgpKTsKKyAgICBnX2lucHV0X3N0cmVhbV9jbG9zZV9maW5pc2goZC0+bV9pbnB1
dFN0cmVhbS5nZXQoKSwgcmVzLCAwKTsKKyAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24o
aGFuZGxlLmdldCgpKTsKIAogICAgIC8vIFRoZSBsb2FkIG1heSBoYXZlIGJlZW4gY2FuY2VsbGVk
LCB0aGUgY2xpZW50IG1heSBoYXZlIGJlZW4KICAgICAvLyBkZXN0cm95ZWQgYWxyZWFkeS4gSW4g
c3VjaCBjYXNlcyBjYWxsaW5nIGRpZEZpbmlzaExvYWRpbmcgaXMgYQpAQCAtNzIwLDIxMCArNzY1
LDkyIEBAIHN0YXRpYyB2b2lkIGNsb3NlQ2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNS
ZXN1bHQqIHJlcywgZ3BvaW50ZXIpCiAgICAgY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKGhhbmRs
ZS5nZXQoKSwgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJlYWRDYWxsYmFjayhHT2JqZWN0KiBzb3Vy
Y2UsIEdBc3luY1Jlc3VsdCogcmVzLCBncG9pbnRlcikKK3N0YXRpYyB2b2lkIHJlYWRDYWxsYmFj
ayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzLCBncG9pbnRlciBkYXRhKQogewog
ICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VI
YW5kbGUqPihnX29iamVjdF9nZXRfZGF0YShzb3VyY2UsICJ3ZWJraXQtcmVzb3VyY2UiKSk7CiAg
ICAgaWYgKCFoYW5kbGUpCiAgICAgICAgIHJldHVybjsKIAorICAgIGJvb2wgY29udmVydFRvVVRG
MTYgPSBzdGF0aWNfY2FzdDxib29sPihkYXRhKTsKICAgICBSZXNvdXJjZUhhbmRsZUludGVybmFs
KiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOwogICAgIFJlc291cmNlSGFuZGxlQ2xpZW50KiBj
bGllbnQgPSBoYW5kbGUtPmNsaWVudCgpOwogCiAgICAgaWYgKGQtPm1fY2FuY2VsbGVkIHx8ICFj
bGllbnQpIHsKLSAgICAgICAgY2xlYW51cEdpb09wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOworICAg
ICAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIEdFcnJvciogZXJyb3IgPSAwOworICAgIEdPd25QdHI8R0Vy
cm9yPiBlcnJvcjsKIAotICAgIGdzc2l6ZSBieXRlc1JlYWQgPSBnX2lucHV0X3N0cmVhbV9yZWFk
X2ZpbmlzaChkLT5tX2lucHV0U3RyZWFtLCByZXMsICZlcnJvcik7CisgICAgZ3NzaXplIGJ5dGVz
UmVhZCA9IGdfaW5wdXRfc3RyZWFtX3JlYWRfZmluaXNoKGQtPm1faW5wdXRTdHJlYW0uZ2V0KCks
IHJlcywgJmVycm9yLm91dFB0cigpKTsKICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgY2hhciog
dXJpID0gZ19maWxlX2dldF91cmkoZC0+bV9nZmlsZSk7Ci0gICAgICAgIFJlc291cmNlRXJyb3Ig
cmVzb3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0cmluZyhHX0lPX0VSUk9SKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLT5jb2RlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdXJpLAorICAgICAgICBTb3VwVVJJKiB1cmkgPSB3ZWJraXRfc291
cF9yZXF1ZXN0X2dldF91cmkoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSk7CisgICAgICAgIEdPd25Q
dHI8Y2hhcj4gdXJpU3RyKHNvdXBfdXJpX3RvX3N0cmluZyh1cmksIGZhbHNlKSk7CisgICAgICAg
IFJlc291cmNlRXJyb3IgcmVzb3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0cmluZyhHX0lPX0VSUk9S
KSwgZXJyb3ItPmNvZGUsIHVyaVN0ci5nZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVycm9yID8gU3RyaW5nOjpmcm9tVVRGOChlcnJvci0+bWVzc2FnZSkgOiBTdHJp
bmcoKSk7Ci0gICAgICAgIGdfZnJlZSh1cmkpOwotICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3Ip
OwotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAgIGNs
ZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwogICAgICAgICBjbGllbnQt
PmRpZEZhaWwoaGFuZGxlLmdldCgpLCByZXNvdXJjZUVycm9yKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIGlmICghYnl0ZXNSZWFkKSB7Ci0gICAgICAgIGdfaW5wdXRfc3RyZWFtX2Ns
b3NlX2FzeW5jKGQtPm1faW5wdXRTdHJlYW0sIEdfUFJJT1JJVFlfREVGQVVMVCwKKyAgICAgICAg
Z19pbnB1dF9zdHJlYW1fY2xvc2VfYXN5bmMoZC0+bV9pbnB1dFN0cmVhbS5nZXQoKSwgR19QUklP
UklUWV9ERUZBVUxULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBjbG9z
ZUNhbGxiYWNrLCAwKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGQtPm1fdG90YWwg
Kz0gYnl0ZXNSZWFkOwotICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURhdGEoaGFuZGxlLmdldCgpLCBk
LT5tX2J1ZmZlciwgYnl0ZXNSZWFkLCBkLT5tX3RvdGFsKTsKLQotICAgIC8vIGRpZFJlY2VpdmVE
YXRhIG1heSBjYW5jZWwgdGhlIGxvYWQsIHdoaWNoIG1heSByZWxlYXNlIHRoZSBsYXN0IHJlZmVy
ZW5jZS4KLSAgICBpZiAoZC0+bV9jYW5jZWxsZWQpIHsKLSAgICAgICAgY2xlYW51cEdpb09wZXJh
dGlvbihoYW5kbGUuZ2V0KCkpOwotICAgICAgICByZXR1cm47CisgICAgaWYgKEdfTElLRUxZKCFj
b252ZXJ0VG9VVEYxNikpCisgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURhdGEoaGFuZGxlLmdl
dCgpLCBkLT5tX2J1ZmZlciwgYnl0ZXNSZWFkLCBkLT5tX3RvdGFsKTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgLy8gV2UgaGF2ZSB0byBjb252ZXJ0IGl0IHRvIFVURi0xNiBkdWUgdG8gbGltaXRhdGlv
bnMgaW4gS1VSTAorICAgICAgICBTdHJpbmcgZGF0YSA9IFN0cmluZzo6ZnJvbVVURjgoZC0+bV9i
dWZmZXIsIGJ5dGVzUmVhZCk7CisgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURhdGEoaGFuZGxl
LmdldCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihkYXRhLmNoYXJhY3RlcnMoKSks
IGRhdGEubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpLCAwKTsKICAgICB9CiAKLSAgICBnX2lucHV0
X3N0cmVhbV9yZWFkX2FzeW5jKGQtPm1faW5wdXRTdHJlYW0sIGQtPm1fYnVmZmVyLCBkLT5tX2J1
ZmZlclNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BSSU9SSVRZX0RFRkFV
TFQsIGQtPm1fY2FuY2VsbGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFk
Q2FsbGJhY2ssIDApOwotfQotCi1zdGF0aWMgdm9pZCBvcGVuQ2FsbGJhY2soR09iamVjdCogc291
cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIpCi17Ci0gICAgUmVmUHRyPFJlc291cmNl
SGFuZGxlPiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGdfb2JqZWN0X2dl
dF9kYXRhKHNvdXJjZSwgIndlYmtpdC1yZXNvdXJjZSIpKTsKLSAgICBpZiAoIWhhbmRsZSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+
Z2V0SW50ZXJuYWwoKTsKLSAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0gaGFuZGxl
LT5jbGllbnQoKTsKLQorICAgIC8vIGRpZFJlY2VpdmVEYXRhIG1heSBjYW5jZWwgdGhlIGxvYWQs
IHdoaWNoIG1heSByZWxlYXNlIHRoZSBsYXN0IHJlZmVyZW5jZS4KICAgICBpZiAoZC0+bV9jYW5j
ZWxsZWQgfHwgIWNsaWVudCkgewotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5n
ZXQoKSk7CisgICAgICAgIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgR0Vycm9yKiBlcnJvciA9IDA7Ci0gICAg
R0ZpbGVJbnB1dFN0cmVhbSogaW4gPSBnX2ZpbGVfcmVhZF9maW5pc2goR19GSUxFKHNvdXJjZSks
IHJlcywgJmVycm9yKTsKLSAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgY2hhciogdXJpID0gZ19m
aWxlX2dldF91cmkoZC0+bV9nZmlsZSk7Ci0gICAgICAgIFJlc291cmNlRXJyb3IgcmVzb3VyY2VF
cnJvcihnX3F1YXJrX3RvX3N0cmluZyhHX0lPX0VSUk9SKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVycm9yLT5jb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdXJpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Ig
PyBTdHJpbmc6OmZyb21VVEY4KGVycm9yLT5tZXNzYWdlKSA6IFN0cmluZygpKTsKLSAgICAgICAg
Z19mcmVlKHVyaSk7Ci0gICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7Ci0gICAgICAgIGNsZWFu
dXBHaW9PcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKLSAgICAgICAgY2xpZW50LT5kaWRGYWlsKGhh
bmRsZS5nZXQoKSwgcmVzb3VyY2VFcnJvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBkLT5tX2lucHV0U3RyZWFtID0gR19JTlBVVF9TVFJFQU0oaW4pOwotICAgIGQtPm1fYnVmZmVy
U2l6ZSA9IDgxOTI7Ci0gICAgZC0+bV9idWZmZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oZ19tYWxs
b2MoZC0+bV9idWZmZXJTaXplKSk7Ci0gICAgZC0+bV90b3RhbCA9IDA7Ci0KLSAgICBnX29iamVj
dF9zZXRfZGF0YShHX09CSkVDVChkLT5tX2lucHV0U3RyZWFtKSwgIndlYmtpdC1yZXNvdXJjZSIs
IGhhbmRsZS5nZXQoKSk7Ci0gICAgZ19pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyhkLT5tX2lucHV0
U3RyZWFtLCBkLT5tX2J1ZmZlciwgZC0+bV9idWZmZXJTaXplLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR19QUklPUklUWV9ERUZBVUxULCBkLT5tX2NhbmNlbGxhYmxlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVhZENhbGxiYWNrLCAwKTsKKyAgICBnX2lucHV0X3N0
cmVhbV9yZWFkX2FzeW5jKGQtPm1faW5wdXRTdHJlYW0uZ2V0KCksIGQtPm1fYnVmZmVyLCBSRUFE
X0JVRkZFUl9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QUklPUklUWV9E
RUZBVUxULCBkLT5tX2NhbmNlbGxhYmxlLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVhZENhbGxiYWNrLCBkYXRhKTsKIH0KIAotc3RhdGljIHZvaWQgcXVlcnlJbmZvQ2Fs
bGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIpCi17Ci0g
ICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhh
bmRsZSo+KGdfb2JqZWN0X2dldF9kYXRhKHNvdXJjZSwgIndlYmtpdC1yZXNvdXJjZSIpKTsKLSAg
ICBpZiAoIWhhbmRsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVzb3VyY2VIYW5kbGVJbnRl
cm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKLSAgICBSZXNvdXJjZUhhbmRsZUNsaWVu
dCogY2xpZW50ID0gaGFuZGxlLT5jbGllbnQoKTsKLQotICAgIGlmIChkLT5tX2NhbmNlbGxlZCkg
ewotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOwotCi0gICAgY2hh
ciogdXJpID0gZ19maWxlX2dldF91cmkoZC0+bV9nZmlsZSk7Ci0gICAgcmVzcG9uc2Uuc2V0VVJM
KEtVUkwoS1VSTCgpLCB1cmkpKTsKLSAgICBnX2ZyZWUodXJpKTsKLQotICAgIEdFcnJvciogZXJy
b3IgPSAwOwotICAgIEdGaWxlSW5mbyogaW5mbyA9IGdfZmlsZV9xdWVyeV9pbmZvX2ZpbmlzaChk
LT5tX2dmaWxlLCByZXMsICZlcnJvcik7Ci0KLSAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgLy8g
RklYTUU6IHRvIGJlIGFibGUgdG8gaGFuZGxlIGZ0cCBVUklzIHByb3Blcmx5LCB3ZSBtdXN0Ci0g
ICAgICAgIC8vIGNoZWNrIGlmIHRoZSBlcnJvciBpcyBHX0lPX0VSUk9SX05PVF9NT1VOVEVELCBh
bmQgaWYgc28sCi0gICAgICAgIC8vIGNhbGwgZ19maWxlX21vdW50X2VuY2xvc2luZ192b2x1bWUo
KSB0byBtb3VudCB0aGUgZnRwCi0gICAgICAgIC8vIHNlcnZlciAoYW5kIHRoZW4ga2VlcCB0cmFj
ayBvZiB0aGUgZmFjdCB0aGF0IHdlIG1vdW50ZWQgaXQsCi0gICAgICAgIC8vIGFuZCBzZXQgYSB0
aW1lb3V0IHRvIHVubW91bnQgaXQgbGF0ZXIgYWZ0ZXIgaXQncyBiZWVuIGlkbGUKLSAgICAgICAg
Ly8gZm9yIGEgd2hpbGUpLgotICAgICAgICBjaGFyKiB1cmkgPSBnX2ZpbGVfZ2V0X3VyaShkLT5t
X2dmaWxlKTsKLSAgICAgICAgUmVzb3VyY2VFcnJvciByZXNvdXJjZUVycm9yKGdfcXVhcmtfdG9f
c3RyaW5nKEdfSU9fRVJST1IpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXJyb3ItPmNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA/IFN0cmluZzo6ZnJvbVVU
RjgoZXJyb3ItPm1lc3NhZ2UpIDogU3RyaW5nKCkpOwotICAgICAgICBnX2ZyZWUodXJpKTsKLSAg
ICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKLSAgICAgICAgY2xlYW51cEdpb09wZXJhdGlvbiho
YW5kbGUuZ2V0KCkpOwotICAgICAgICBjbGllbnQtPmRpZEZhaWwoaGFuZGxlLmdldCgpLCByZXNv
dXJjZUVycm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChnX2ZpbGVfaW5m
b19nZXRfZmlsZV90eXBlKGluZm8pICE9IEdfRklMRV9UWVBFX1JFR1VMQVIpIHsKLSAgICAgICAg
Ly8gRklYTUU6IHdoYXQgaWYgdGhlIFVSSSBwb2ludHMgdG8gYSBkaXJlY3Rvcnk/IFNob3VsZCB3
ZQotICAgICAgICAvLyBnZW5lcmF0ZSBhIGxpc3Rpbmc/IEhvdz8gV2hhdCBkbyBvdGhlciBiYWNr
ZW5kcyBkbyBoZXJlPwotICAgICAgICBjaGFyKiB1cmkgPSBnX2ZpbGVfZ2V0X3VyaShkLT5tX2dm
aWxlKTsKLSAgICAgICAgUmVzb3VyY2VFcnJvciByZXNvdXJjZUVycm9yKGdfcXVhcmtfdG9fc3Ry
aW5nKEdfSU9fRVJST1IpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19J
T19FUlJPUl9GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcoKSk7Ci0gICAgICAg
IGdfZnJlZSh1cmkpOwotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7
Ci0gICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIHJlc291cmNlRXJyb3IpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQWNjb3JkaW5nIHRvIGh0dHA6Ly9saWJy
YXJ5Lmdub21lLm9yZy9kZXZlbC9naW8vc3RhYmxlL2dpby1HQ29udGVudFR5cGUuaHRtbAotICAg
IC8vIEdDb250ZW50VHlwZSBvbiBVbml4IGlzIHRoZSBtaW1lIHR5cGUsIGJ1dCBub3Qgb24gV2lu
MzIuCi0gICAgR093blB0cjxnY2hhcj4gbWltZVR5cGUoZ19jb250ZW50X3R5cGVfZ2V0X21pbWVf
dHlwZShnX2ZpbGVfaW5mb19nZXRfY29udGVudF90eXBlKGluZm8pKSk7Ci0gICAgcmVzcG9uc2Uu
c2V0TWltZVR5cGUobWltZVR5cGUuZ2V0KCkpOwotICAgIHJlc3BvbnNlLnNldEV4cGVjdGVkQ29u
dGVudExlbmd0aChnX2ZpbGVfaW5mb19nZXRfc2l6ZShpbmZvKSk7Ci0KLSAgICBHVGltZVZhbCB0
djsKLSAgICBnX2ZpbGVfaW5mb19nZXRfbW9kaWZpY2F0aW9uX3RpbWUoaW5mbywgJnR2KTsKLSAg
ICByZXNwb25zZS5zZXRMYXN0TW9kaWZpZWREYXRlKHR2LnR2X3NlYyk7Ci0KLSAgICBjbGllbnQt
PmRpZFJlY2VpdmVSZXNwb25zZShoYW5kbGUuZ2V0KCksIHJlc3BvbnNlKTsKLQotICAgIGlmIChk
LT5tX2NhbmNlbGxlZCkgewotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQo
KSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBnX2ZpbGVfcmVhZF9hc3luYyhkLT5t
X2dmaWxlLCBHX1BSSU9SSVRZX0RFRkFVTFQsIGQtPm1fY2FuY2VsbGFibGUsCi0gICAgICAgICAg
ICAgICAgICAgICAgb3BlbkNhbGxiYWNrLCAwKTsKLX0KIHN0YXRpYyBib29sIHN0YXJ0R2lvKFJl
c291cmNlSGFuZGxlKiBoYW5kbGUsIEtVUkwgdXJsKQogewogICAgIEFTU0VSVChoYW5kbGUpOwog
Ci0gICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsK
LQogICAgIGlmIChoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmh0dHBNZXRob2QoKSAhPSAiR0VUIiAm
JiBoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmh0dHBNZXRob2QoKSAhPSAiUE9TVCIpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAorICAgIENTdHJpbmcgdXJsU3RyOworICAgIFNvdXBTZXNzaW9uKiBz
ZXNzaW9uID0gaGFuZGxlLT5kZWZhdWx0U2Vzc2lvbigpOworICAgIFJlc291cmNlSGFuZGxlSW50
ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFsKCk7CisKICAgICAvLyBHSU8gZG9lc24ndCBr
bm93IGhvdyB0byBoYW5kbGUgcmVmcyBhbmQgcXVlcmllcywgc28gcmVtb3ZlIHRoZW0KICAgICAv
LyBUT0RPOiB1c2UgS1VSTC5maWxlU3lzdGVtUGF0aCBhZnRlciBLVVJMR3RrIGFuZCBGaWxlU3lz
dGVtR3RrIGFyZQogICAgIC8vIHVzaW5nIEdJTyBpbnRlcm5hbGx5LCBhbmQgcHJvdmlkaW5nIFVS
SXMgaW5zdGVhZCBvZiBmaWxlIHBhdGhzCiAgICAgdXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmll
cigpOwogICAgIHVybC5zZXRRdWVyeShTdHJpbmcoKSk7CiAgICAgdXJsLnJlbW92ZVBvcnQoKTsK
KyAgICB1cmxTdHIgPSB1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKTsKIAotI2lmICFPUyhXSU5E
T1dTKQotICAgIC8vIHdlIGF2b2lkIHRoZSBlc2NhcGluZyBmb3IgbG9jYWwgZmlsZXMsIGJlY2F1
c2UKLSAgICAvLyBnX2ZpbGVuYW1lX2Zyb21fdXJpICh1c2VkIGludGVybmFsbHkgYnkgR0ZpbGUp
IGhhcyBwcm9ibGVtcwotICAgIC8vIGRlY29kaW5nIHN0cmluZ3Mgd2l0aCBhcmJpdHJhcnkgcGVy
Y2VudCBzaWducwotICAgIGlmICh1cmwuaXNMb2NhbEZpbGUoKSkKLSAgICAgICAgZC0+bV9nZmls
ZSA9IGdfZmlsZV9uZXdfZm9yX3BhdGgodXJsLnByZXR0eVVSTCgpLnV0ZjgoKS5kYXRhKCkgKyBz
aXplb2YoImZpbGU6Ly8iKSAtIDEpOwotICAgIGVsc2UKLSNlbmRpZgotICAgICAgICBkLT5tX2dm
aWxlID0gZ19maWxlX25ld19mb3JfdXJpKHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAg
ICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5tX2dmaWxlKSwgIndlYmtpdC1yZXNvdXJj
ZSIsIGhhbmRsZSk7CisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgIGQtPm1fc291cFJl
cXVlc3QgPSB3ZWJraXRfc291cF9yZXF1ZXN0ZXJfcmVxdWVzdChkLT5tX3JlcXVlc3Rlci5nZXQo
KSwgdXJsU3RyLmRhdGEoKSwgc2Vzc2lvbiwgJmVycm9yLm91dFB0cigpKTsKKyAgICBpZiAoZXJy
b3IpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIC8vIGJhbGFuY2VkIGJ5IGEgZGVyZWYo
KSBpbiBjbGVhbnVwR2lvT3BlcmF0aW9uLCB3aGljaCBzaG91bGQgYWx3YXlzIHJ1bgorICAgIGdf
b2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1fc291cFJlcXVlc3QuZ2V0KCkpLCAid2Via2l0
LXJlc291cmNlIiwgaGFuZGxlKTsKKworICAgIC8vIGJhbGFuY2VkIGJ5IGEgZGVyZWYoKSBpbiBj
bGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24sIHdoaWNoIHNob3VsZCBhbHdheXMgcnVuCiAgICAg
aGFuZGxlLT5yZWYoKTsKIAogICAgIGQtPm1fY2FuY2VsbGFibGUgPSBnX2NhbmNlbGxhYmxlX25l
dygpOwotICAgIGdfZmlsZV9xdWVyeV9pbmZvX2FzeW5jKGQtPm1fZ2ZpbGUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9UWVBFICIsIgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfQ09OVEVO
VF9UWVBFICIsIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfRklMRV9BVFRSSUJVVEVf
U1RBTkRBUkRfU0laRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX0ZJTEVfUVVFUllf
SU5GT19OT05FLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUFJJT1JJVFlfREVGQVVM
VCwgZC0+bV9jYW5jZWxsYWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeUlu
Zm9DYWxsYmFjaywgMCk7CisgICAgd2Via2l0X3NvdXBfcmVxdWVzdF9zZW5kX2FzeW5jKGQtPm1f
c291cFJlcXVlc3QuZ2V0KCksIGQtPm1fY2FuY2VsbGFibGUuZ2V0KCksIHNlbmRSZXF1ZXN0Q2Fs
bGJhY2ssIDApOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdC5oIGIvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0LmgKaW5kZXggYTFkOTE2Zi4uOTJkYWJhZCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0
LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0LmgK
QEAgLTY3LDggKzY3LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgdXBkYXRl
RnJvbVNvdXBNZXNzYWdlKHNvdXBNZXNzYWdlKTsKICAgICAgICAgfQogCisgICAgICAgIHZvaWQg
dXBkYXRlU291cE1lc3NhZ2UoU291cE1lc3NhZ2UqKSBjb25zdDsKICAgICAgICAgU291cE1lc3Nh
Z2UqIHRvU291cE1lc3NhZ2UoKSBjb25zdDsKLSAgICAgICAgdm9pZCB1cGRhdGVGcm9tU291cE1l
c3NhZ2UoU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlKTsKKyAgICAgICAgdm9pZCB1cGRhdGVGcm9t
U291cE1lc3NhZ2UoU291cE1lc3NhZ2UqKTsKIAogICAgICAgICBTb3VwTWVzc2FnZUZsYWdzIHNv
dXBNZXNzYWdlRmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX3NvdXBGbGFnczsgfQogICAgICAgICB2
b2lkIHNldFNvdXBNZXNzYWdlRmxhZ3MoU291cE1lc3NhZ2VGbGFncyBzb3VwRmxhZ3MpIHsgbV9z
b3VwRmxhZ3MgPSBzb3VwRmxhZ3M7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHAKaW5kZXggNjJkZWIwMS4uMzgwZmM4NCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0
U291cC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1
ZXN0U291cC5jcHAKQEAgLTMzLDYgKzMzLDI5IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAordm9pZCBSZXNvdXJjZVJlcXVlc3Q6OnVwZGF0ZVNvdXBNZXNz
YWdlKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSkgY29uc3QKK3sKKyAgICBnX29iamVjdF9zZXQo
c291cE1lc3NhZ2UsIFNPVVBfTUVTU0FHRV9NRVRIT0QsIGh0dHBNZXRob2QoKS51dGY4KCkuZGF0
YSgpLCBOVUxMKTsKKworICAgIGNvbnN0IEhUVFBIZWFkZXJNYXAmIGhlYWRlcnMgPSBodHRwSGVh
ZGVyRmllbGRzKCk7CisgICAgU291cE1lc3NhZ2VIZWFkZXJzKiBzb3VwSGVhZGVycyA9IHNvdXBN
ZXNzYWdlLT5yZXF1ZXN0X2hlYWRlcnM7CisgICAgaWYgKCFoZWFkZXJzLmlzRW1wdHkoKSkgewor
ICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJzLmVuZCgp
OworICAgICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVy
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBzb3VwX21lc3NhZ2VfaGVh
ZGVyc19hcHBlbmQoc291cEhlYWRlcnMsIGl0LT5maXJzdC5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
LCBpdC0+c2Vjb25kLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKworI2lmZGVmIEhBVkVfTElCU09V
UF8yXzI5XzkwCisgICAgU3RyaW5nIGZpcnN0UGFydHlTdHJpbmcgPSBmaXJzdFBhcnR5Rm9yQ29v
a2llcygpLnN0cmluZygpOworICAgIGlmICghZmlyc3RQYXJ0eVN0cmluZy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgR093blB0cjxTb3VwVVJJPiBmaXJzdFBhcnR5KHNvdXBfdXJpX25ldyhmaXJzdFBh
cnR5U3RyaW5nLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9maXJz
dF9wYXJ0eShzb3VwTWVzc2FnZSwgZmlyc3RQYXJ0eS5nZXQoKSk7CisgICAgfQorI2VuZGlmCisK
KyAgICBzb3VwX21lc3NhZ2Vfc2V0X2ZsYWdzKHNvdXBNZXNzYWdlLCBtX3NvdXBGbGFncyk7Cit9
CisKIFNvdXBNZXNzYWdlKiBSZXNvdXJjZVJlcXVlc3Q6OnRvU291cE1lc3NhZ2UoKSBjb25zdAog
ewogICAgIFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSA9IHNvdXBfbWVzc2FnZV9uZXcoaHR0cE1l
dGhvZCgpLnV0ZjgoKS5kYXRhKCksIHVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotLSAK
MS43LjEKCg==
</data>
<flag name="review"
          id="59035"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69384</attachid>
            <date>2010-09-30 14:35:38 -0700</date>
            <delta_ts>2010-10-05 10:59:08 -0700</delta_ts>
            <desc>Imported SoupURILoader to Webkit. New public API for HTTP cache</desc>
            <filename>0001-Imported-SoupURILoader-code-to-WebKit.-New-public-AP.patch</filename>
            <type>text/plain</type>
            <size>177512</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">RnJvbSA5YmNiN2M1Njk2ZDQzYzU4YWU2YjkwMjY3ZjFhZmVhN2E0ZmZmYjdkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTZXJnaW8gVmlsbGFyIFNlbmluIDxzdmlsbGFyQGlnYWxpYS5j
b20+CkRhdGU6IFdlZCwgMjIgU2VwIDIwMTAgMTA6MTY6NDQgKzAyMDAKU3ViamVjdDogW1BBVENI
IDEvMl0gSW1wb3J0ZWQgU291cFVSSUxvYWRlciBjb2RlIHRvIFdlYktpdC4gTmV3IHB1YmxpYyBB
UEkgZm9yIEhUVFAgY2FjaGUKCi0tLQogQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgIDEwICsKIEdOVW1ha2VmaWxlLmFtICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgICAxMCArLQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTkzICsrKwogV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIwICstCiAuLi4vc291cC9jYWNo
ZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uYyAgICAgICB8ICAxOTkgKysrCiAuLi4vc291
cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uaCAgICAgICB8ICAgNjEgKwogLi4u
L25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmMgICAgfCAgOTIxICsr
KysrKysrKysrCiAuLi4vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0u
aCAgICB8ICAgNzYgKwogLi4uL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5j
ICAgICAgICAgfCAgMTY5ICsrCiAuLi4vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1k
YXRhLmggICAgICAgICB8ICAgNTEgKwogLi4uL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVl
c3QtZmlsZS5jICAgICAgICAgfCAgMzMxICsrKysKIC4uLi9uZXR3b3JrL3NvdXAvY2FjaGUvc291
cC1yZXF1ZXN0LWZpbGUuaCAgICAgICAgIHwgICA1MyArCiAuLi4vbmV0d29yay9zb3VwL2NhY2hl
L3NvdXAtcmVxdWVzdC1odHRwLmMgICAgICAgICB8ICAzMzkgKysrKwogLi4uL25ldHdvcmsvc291
cC9jYWNoZS9zb3VwLXJlcXVlc3QtaHR0cC5oICAgICAgICAgfCAgIDUzICsKIFdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5jIHwgIDMxMSArKysrCiBXZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QuaCB8ICAgOTkgKysK
IC4uLi9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuYyAgIHwgIDE4
NyArKysKIC4uLi9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuaCAg
IHwgICA4MCArCiAuLi4vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLXByaXZh
dGUuaCB8ICAgNDEgKwogLi4uL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5j
ICAgICAgICAgfCAxNjUyICsrKysrKysrKysrKysrKysrKysrCiAuLi4vbmV0d29yay9zb3VwL2Nh
Y2hlL3dlYmtpdC9zb3VwLWNhY2hlLmggICAgICAgICB8ICAgOTUgKysKIFdlYktpdFRvb2xzL0No
YW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgOSArCiBXZWJLaXRUb29s
cy9HTlVtYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKwogYXV0b3Rv
b2xzL3dlYmtpdC5tNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICstCiAy
NCBmaWxlcyBjaGFuZ2VkLCA0OTU4IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCiBjcmVh
dGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1k
aXJlY3RvcnktaW5wdXQtc3RyZWFtLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uaAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAt
aHR0cC1pbnB1dC1zdHJlYW0uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0uaAogY3JlYXRlIG1vZGUg
MTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1k
YXRhLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9j
YWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWZpbGUuYwogY3JlYXRlIG1vZGUg
MTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1m
aWxlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9j
YWNoZS9zb3VwLXJlcXVlc3QtaHR0cC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuaAogY3JlYXRlIG1vZGUg
MTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5j
CiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUv
c291cC1yZXF1ZXN0LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Rlci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuaAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3Vw
LWNhY2hlLXByaXZhdGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBX
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5oCgpk
aWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDQ3MWYxOTYuLmM1ZDA3MTUg
MTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAor
MjAxMC0wOS0wNiAgU2VyZ2lvIFZpbGxhciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBBZGQg
SFRUUCBjYWNoaW5nIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ0MjYxCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogYWRkZWQgcGF0
aHMgZm9yIHNvdXAgSFRUUCBjYWNoZSBjb2RlCisgICAgICAgICogYXV0b3Rvb2xzL3dlYmtpdC5t
NDogdXBncmFkZWQgcmVxdWlyZWQgZ2xpYiB2ZXJzaW9uCisKIDIwMTAtMDktMjQgIFJvbWFpbiBQ
b2tyenl3a2EgIDxyb21haW5Aa2RhYi5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24g
SGF1c21hbm4uCmRpZmYgLS1naXQgYS9HTlVtYWtlZmlsZS5hbSBiL0dOVW1ha2VmaWxlLmFtCmlu
ZGV4IGM3NjlkYjIuLmYzOTI3ZGIgMTAwNjQ0Ci0tLSBhL0dOVW1ha2VmaWxlLmFtCisrKyBiL0dO
VW1ha2VmaWxlLmFtCkBAIC0zMDIsMjggKzMwMiwyOSBAQCBnbG9iYWxfY3BwZmxhZ3MgKz0gXAog
ZW5kaWYKIAogd2Via2l0Z3RrX3N0YXRpY19oX2FwaSArPSBcCisJJChzcmNkaXIpL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLmggXAogCSQoc3Jj
ZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdGRlZmluZXMuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdGRvd25sb2FkLmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRlcnJv
ci5oIFwKKwkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2VvbG9jYXRpb25wb2xp
Y3lkZWNpc2lvbi5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0aGl0dGVz
dHJlc3VsdC5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0bmV0d29ya3Jl
cXVlc3QuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdG5ldHdvcmtyZXNw
b25zZS5oIFwKKwkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c2VjdXJpdHlvcmln
aW4uaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNvdXBhdXRoZGlhbG9n
LmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJiYWNrZm9yd2FyZGxp
c3QuaCBcCisJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFiYXNlLmgg
XAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkYXRhc291cmNlLmggXAog
CSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5oIFwKIAkkKHNyY2Rp
cikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViaGlzdG9yeWl0ZW0uaCBcCiAJJChzcmNkaXIp
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmluc3BlY3Rvci5oIFwKIAkkKHNyY2RpcikvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2VibmF2aWdhdGlvbmFjdGlvbi5oIFwKIAkkKHNyY2Rpcikv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VicG9saWN5ZGVjaXNpb24uaCBcCi0JJChzcmNkaXIp
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdlb2xvY2F0aW9ucG9saWN5ZGVjaXNpb24uaCBcCiAJ
JChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnJlc291cmNlLmggXAogCSQoc3Jj
ZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJzZXR0aW5ncy5oIFwKIAkkKHNyY2Rpcikv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vid2luZG93ZmVhdHVyZXMuaCBcCi0JJChzcmNkaXIp
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaCBcCi0JJChzcmNkaXIpL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYmRhdGFiYXNlLmggXAotCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXRzZWN1cml0eW9yaWdpbi5oCisJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHdlYnZpZXcuaAogCiB3ZWJraXRndGtfYnVpbHRfaF9hcGkgKz0gXAogCVdlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHZlcnNpb24uaApAQCAtNTQ4LDYgKzU0OSw3IEBAIG5vaW5zdF9QUk9H
UkFNUyArPSAkKFRFU1RfUFJPR1MpCiB3ZWJraXRfdGVzdHNfY2ZsYWdzID0gXAogCS1mbm8tc3Ry
aWN0LWFsaWFzaW5nIFwKIAktSSQoc3JjZGlyKS9KYXZhU2NyaXB0Q29yZS9Gb3J3YXJkaW5nSGVh
ZGVycyBcCisJLUkkKHNyY2RpcikvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUg
XAogCS1JJChzcmNkaXIpL1dlYktpdC9ndGsgXAogCS1JJCh0b3BfYnVpbGRkaXIpL1dlYktpdC9n
dGsgXAogCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzIFwKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmZhMjlkOS4uNjQ5MGQ5
MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxOTYgQEAKKzIwMTAtMDktMDYgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmls
bGFyQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgW0dUS10gQWRkIEhUVFAgY2FjaGluZyBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDI2MQorCisgICAgICAgICogR05VbWFr
ZWZpbGUuYW06CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVy
bmFsLmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUludGVybmFsOjpSZXNvdXJj
ZUhhbmRsZUludGVybmFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3Vy
Y2VIYW5kbGVTb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlSW50ZXJu
YWw6On5SZXNvdXJjZUhhbmRsZUludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNl
SGFuZGxlOjp+UmVzb3VyY2VIYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6cmVzdGFydGVkQ2Fs
bGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Z290Q2h1bmtDYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpwYXJzZURhdGFVcmwpOgorICAgICAgICAoV2ViQ29yZTo6Y2xlYW51cFNvdXBSZXF1
ZXN0T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnNlbmRSZXF1ZXN0Q2FsbGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6c3RhcnRIdHRwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvUmVzb3VyY2VSZXF1ZXN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3Vw
L1Jlc291cmNlUmVxdWVzdFNvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0Ojp1cGRhdGVTb3VwTWVzc2FnZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3Vw
L2NhY2hlL3NvdXAtZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5jOiBBZGRlZC4KKyAgICAgICAgKHdl
YmtpdF9zb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fcGFyc2VfaW5mbyk6CisgICAgICAgICh3
ZWJraXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX3JlYWRfbmV4dF9maWxlKToKKyAgICAg
ICAgKHdlYmtpdF9zb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fcmVhZCk6CisgICAgICAgICh3
ZWJraXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX2Nsb3NlKToKKyAgICAgICAgKHdlYmtp
dF9zb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJr
aXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX2luaXQpOgorICAgICAgICAod2Via2l0X3Nv
dXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9uZXcpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvc291cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uaDogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0u
YzogQWRkZWQuCisgICAgICAgICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9maW5hbGl6
ZSk6CisgICAgICAgICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9jbGFzc19pbml0KToK
KyAgICAgICAgKHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlZWthYmxlX2lmYWNlX2lu
aXQpOgorICAgICAgICAod2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1faW5pdCk6CisgICAg
ICAgICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9xdWV1ZV9tZXNzYWdlKToKKyAgICAg
ICAgKHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX25ldyk6CisgICAgICAgICh3ZWJraXRf
c291cF9odHRwX2lucHV0X3N0cmVhbV9nb3RfaGVhZGVycyk6CisgICAgICAgICh3ZWJraXRfc291
cF9odHRwX2lucHV0X3N0cmVhbV9nb3RfY2h1bmspOgorICAgICAgICAod2Via2l0X3NvdXBfaHR0
cF9pbnB1dF9zdHJlYW1fZmluaXNoZWQpOgorICAgICAgICAod2Via2l0X3NvdXBfaHR0cF9pbnB1
dF9zdHJlYW1fY2FuY2VsbGVkKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3Ry
ZWFtX3ByZXBhcmVfZm9yX2lvKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3Ry
ZWFtX2RvbmVfaW8pOgorICAgICAgICAoc2V0X2Vycm9yX2lmX2h0dHBfZmFpbGVkKToKKyAgICAg
ICAgKHJlYWRfZnJvbV9sZWZ0b3Zlcik6CisgICAgICAgICh3ZWJraXRfc291cF9odHRwX2lucHV0
X3N0cmVhbV9zZW5kX2ludGVybmFsKToKKyAgICAgICAgKHNlbmRfc3luY19maW5pc2hlZCk6Cisg
ICAgICAgICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kKToKKyAgICAgICAgKHdl
YmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWQpOgorICAgICAgICAod2Via2l0X3NvdXBf
aHR0cF9pbnB1dF9zdHJlYW1fY2xvc2UpOgorICAgICAgICAod3JhcHBlcl9jYWxsYmFjayk6Cisg
ICAgICAgIChzZW5kX2FzeW5jX3RocmVhZCk6CisgICAgICAgICh3ZWJraXRfc291cF9odHRwX2lu
cHV0X3N0cmVhbV9zZW5kX2FzeW5jX2luX3RocmVhZCk6CisgICAgICAgIChzZW5kX2FzeW5jX2Zp
bmlzaGVkKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5
bmNfaW50ZXJuYWwpOgorICAgICAgICAod2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2Vu
ZF9hc3luYyk6CisgICAgICAgICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2Zp
bmlzaCk6CisgICAgICAgIChyZWFkX2FzeW5jX2RvbmUpOgorICAgICAgICAod2Via2l0X3NvdXBf
aHR0cF9pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyk6CisgICAgICAgICh3ZWJraXRfc291cF9odHRw
X2lucHV0X3N0cmVhbV9yZWFkX2ZpbmlzaCk6CisgICAgICAgICh3ZWJraXRfc291cF9odHRwX2lu
cHV0X3N0cmVhbV9jbG9zZV9hc3luYyk6CisgICAgICAgICh3ZWJraXRfc291cF9odHRwX2lucHV0
X3N0cmVhbV9jbG9zZV9maW5pc2gpOgorICAgICAgICAod2Via2l0X3NvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fdGVsbCk6CisgICAgICAgICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9jYW5f
c2Vlayk6CisgICAgICAgICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZWVrKToKKyAg
ICAgICAgKHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nhbl90cnVuY2F0ZSk6CisgICAg
ICAgICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV90cnVuY2F0ZSk6CisgICAgICAgICh3
ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9nZXRfbWVzc2FnZSk6CisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0uaDogQWRkZWQu
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRh
LmM6IEFkZGVkLgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9kYXRhX2luaXQpOgorICAg
ICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9kYXRhX2ZpbmFsaXplKToKKyAgICAgICAgKHdlYmtp
dF9zb3VwX3JlcXVlc3RfZGF0YV9jaGVja191cmkpOgorICAgICAgICAodXJpX2RlY29kZWRfY29w
eSk6CisgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFfc2VuZCk6CisgICAgICAgICh3
ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFfZ2V0X2NvbnRlbnRfbGVuZ3RoKToKKyAgICAgICAgKHdl
YmtpdF9zb3VwX3JlcXVlc3RfZGF0YV9nZXRfY29udGVudF90eXBlKToKKyAgICAgICAgKHdlYmtp
dF9zb3VwX3JlcXVlc3RfZGF0YV9jbGFzc19pbml0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWRhdGEuaDogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmM6IEFkZGVkLgorICAg
ICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2dldF9maWxlKToKKyAgICAgICAgKHdlYmtp
dF9zb3VwX3JlcXVlc3RfZmlsZV9pbml0KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3Rf
ZmlsZV9maW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfY2hlY2tf
dXJpKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9mdHBfbWFpbl9sb29wX3F1
aXQpOgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2Vuc3VyZV9maWxlX2Z0cCk6
CisgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfZW5zdXJlX2ZpbGUpOgorICAgICAg
ICAod2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX3NlbmQpOgorICAgICAgICAod2Via2l0X3NvdXBf
cmVxdWVzdF9maWxlX3NlbmRfYXN5bmNfdGhyZWFkKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3Jl
cXVlc3RfZmlsZV9zZW5kX2FzeW5jKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZmls
ZV9zZW5kX2ZpbmlzaCk6CisgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfZ2V0X2Nv
bnRlbnRfbGVuZ3RoKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9nZXRfY29u
dGVudF90eXBlKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9jbGFzc19pbml0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWZp
bGUuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAt
cmVxdWVzdC1odHRwLmM6IEFkZGVkLgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9odHRw
X2dldF9tZXNzYWdlKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9pbml0KToK
KyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9jaGVja191cmkpOgorICAgICAgICAo
d2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX2ZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF9zb3Vw
X3JlcXVlc3RfaHR0cF9zZW5kKToKKyAgICAgICAgKHNlbnRfYXN5bmMpOgorICAgICAgICAoY29u
ZGl0aW9uYWxfZ2V0X3JlYWR5X2NiKToKKyAgICAgICAgKHNlbmRfYXN5bmNfY2IpOgorICAgICAg
ICAod2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX3NlbmRfYXN5bmMpOgorICAgICAgICAod2Via2l0
X3NvdXBfcmVxdWVzdF9odHRwX3NlbmRfZmluaXNoKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3Jl
cXVlc3RfaHR0cF9nZXRfY29udGVudF9sZW5ndGgpOgorICAgICAgICAod2Via2l0X3NvdXBfcmVx
dWVzdF9odHRwX2dldF9jb250ZW50X3R5cGUpOgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVz
dF9odHRwX2NsYXNzX2luaXQpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9jYWNo
ZS9zb3VwLXJlcXVlc3QtaHR0cC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LmM6IEFkZGVkLgorICAgICAgICAod2Via2l0X3NvdXBf
cmVxdWVzdF9pbml0KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZmluYWxpemUpOgor
ICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9zZXRfcHJvcGVydHkpOgorICAgICAgICAod2Vi
a2l0X3NvdXBfcmVxdWVzdF9nZXRfcHJvcGVydHkpOgorICAgICAgICAod2Via2l0X3NvdXBfcmVx
dWVzdF9pbml0YWJsZV9pbml0KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZGVmYXVs
dF9jaGVja191cmkpOgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9kZWZhdWx0X3NlbmRf
YXN5bmMpOgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9kZWZhdWx0X3NlbmRfZmluaXNo
KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3Rfc2VuZCk6CisgICAgICAgICh3ZWJraXRf
c291cF9yZXF1ZXN0X3NlbmRfYXN5bmMpOgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9z
ZW5kX2ZpbmlzaCk6CisgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2NsYXNzX2luaXQpOgor
ICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9pbml0YWJsZV9pbnRlcmZhY2VfaW5pdCk6Cisg
ICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2dldF91cmkpOgorICAgICAgICAod2Via2l0X3Nv
dXBfcmVxdWVzdF9nZXRfc2Vzc2lvbik6CisgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2dl
dF9jb250ZW50X2xlbmd0aCk6CisgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2dldF9jb250
ZW50X3R5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJl
cXVlc3QuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3Nv
dXAtcmVxdWVzdGVyLmM6IEFkZGVkLgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdGVyX2lu
aXQpOgorICAgICAgICAoZmluYWxpemUpOgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdGVy
X2NsYXNzX2luaXQpOgorICAgICAgICAoaW5pdF9yZXF1ZXN0X3R5cGVzKToKKyAgICAgICAgKHdl
YmtpdF9zb3VwX3JlcXVlc3Rlcl9uZXcpOgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdGVy
X3JlcXVlc3QpOgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdGVyX3JlcXVlc3RfdXJpKToK
KyAgICAgICAgKHdlYmtpdF9zb3VwX3NjaGVtZV9pc192YWxpZCk6CisgICAgICAgICh3ZWJraXRf
c291cF9yZXF1ZXN0ZXJfYWRkX3Byb3RvY29sKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVl
c3Rlcl9yZW1vdmVfcHJvdG9jb2wpOgorICAgICAgICAod2Via2l0X3NvdXBfZXJyb3JfcXVhcmsp
OgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Rlci5o
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3Nv
dXAtY2FjaGUtcHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUuYzogQWRkZWQuCisgICAgICAgIChnZXRfY2FjaGVh
YmlsaXR5KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUpOgorICAgICAg
ICAoY29weV9oZWFkZXJzKToKKyAgICAgICAgKHVwZGF0ZV9oZWFkZXJzKToKKyAgICAgICAgKHdl
YmtpdF9zb3VwX2NhY2hlX2VudHJ5X2dldF9jdXJyZW50X2FnZSk6CisgICAgICAgICh3ZWJraXRf
c291cF9jYWNoZV9lbnRyeV9pc19mcmVzaF9lbm91Z2gpOgorICAgICAgICAod2Via2l0X3NvdXBf
bWVzc2FnZV9nZXRfY2FjaGVfa2V5KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5
X3NldF9mcmVzaG5lc3MpOgorICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfZW50cnlfbmV3KToK
KyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX3dyaXRpbmdfZml4dHVyZV9mcmVlKToKKyAgICAg
ICAgKGNsb3NlX3JlYWR5X2NiKToKKyAgICAgICAgKHdyaXRlX3JlYWR5X2NiKToKKyAgICAgICAg
KG1zZ19nb3RfY2h1bmtfY2IpOgorICAgICAgICAobXNnX2dvdF9ib2R5X2NiKToKKyAgICAgICAg
KHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2RlbGV0ZSk6CisgICAgICAgIChscnVfY29tcGFyZV9m
dW5jKToKKyAgICAgICAgKGNhY2hlX2FjY2VwdHNfZW50cmllc19vZl9zaXplKToKKyAgICAgICAg
KG1ha2Vfcm9vbV9mb3JfbmV3X2VudHJ5KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2Vu
dHJ5X2luc2VydF9ieV9rZXkpOgorICAgICAgICAobXNnX3Jlc3RhcnRlZF9jYik6CisgICAgICAg
IChhcHBlbmRfdG9fcmVhZHlfY2IpOgorICAgICAgICAobXNnX2dvdF9oZWFkZXJzX2NiKToKKyAg
ICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX3NlbmRfcmVzcG9uc2UpOgorICAgICAgICAocmVxdWVz
dF9zdGFydGVkKToKKyAgICAgICAgKGF0dGFjaCk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNo
ZV9zZXNzaW9uX2ZlYXR1cmVfaW5pdCk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9pbml0
KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2ZpbmFsaXplKToKKyAgICAgICAgKHdlYmtp
dF9zb3VwX2NhY2hlX3NldF9wcm9wZXJ0eSk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9n
ZXRfcHJvcGVydHkpOgorICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfY29uc3RydWN0ZWQpOgor
ICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfdHlwZV9nZXRfdHlwZSk6CisgICAgICAgICh3ZWJr
aXRfc291cF9jYWNoZV9jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX25l
dyk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9oYXNfcmVzcG9uc2UpOgorICAgICAgICAo
d2Via2l0X3NvdXBfY2FjaGVfZ2V0X2NhY2hlYWJpbGl0eSk6CisgICAgICAgIChmb3JjZV9mbHVz
aF90aW1lb3V0KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2ZsdXNoKToKKyAgICAgICAg
KHJlbW92ZV9jYWNoZV9pdGVtKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2NsZWFyKToK
KyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2dlbmVyYXRlX2NvbmRpdGlvbmFsX3JlcXVlc3Qp
OgorICAgICAgICAocGFja19lbnRyeSk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9kdW1w
KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2xvYWQpOgorICAgICAgICAod2Via2l0X3Nv
dXBfY2FjaGVfc2V0X21heF9zaXplKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2dldF9t
YXhfc2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9z
b3VwLWNhY2hlLmg6IEFkZGVkLgorCiAyMDEwLTA5LTI2ICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBh
cm9nYUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCmRpZmYg
LS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpp
bmRleCA0NGM3MWI1Li41YzlkNzZlIDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFt
CisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTc5LDcgKzc5LDkgQEAgd2ViY29yZWd0
a19jcHBmbGFncyArPSBcCiAJLUkkKHNyY2RpcikvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIgXAogCS1JJChzcmNkaXIpL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrIFwK
IAktSSQoc3JjZGlyKS9XZWJDb3JlL3BsYXRmb3JtL2d0ayBcCi0JLUkkKHNyY2RpcikvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAKKwktSSQoc3JjZGlyKS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cCBcCisJLUkkKHNyY2RpcikvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
Y2FjaGUgXAorCS1JJChzcmNkaXIpL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3dlYmtpdAogCiB3ZWJjb3JlX2J1aWx0X25vc291cmNlcyArPSBcCiAJRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS9Eb2NUeXBlU3RyaW5ncy5jcHAgXApAQCAtMzQ4Niw2ICszNDg4LDIyIEBAIHdlYmNv
cmVndGtfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0
U3RyZWFtRXJyb3IuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0U3Ry
ZWFtSGFuZGxlLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVh
bUhhbmRsZVNvdXAuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9z
b3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uYyBcCisJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmggXAorCVdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0uYyBcCisJV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1odHRwLWlucHV0LXN0cmVhbS5o
IFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0
YS5jIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Qt
ZGF0YS5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVl
c3QtZmlsZS5jIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJl
cXVlc3QtZmlsZS5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3Vw
LXJlcXVlc3QtaHR0cC5jIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9z
b3VwLXJlcXVlc3QtaHR0cC5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNo
ZS9zb3VwLXJlcXVlc3QuYyBcCisJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUv
c291cC1yZXF1ZXN0LmggXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3Nv
dXAtcmVxdWVzdGVyLmMgXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3Nv
dXAtcmVxdWVzdGVyLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dl
YmtpdC9zb3VwLWNhY2hlLmMgXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3dlYmtpdC9zb3VwLWNhY2hlLmggXAogCVdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YUd0
ay5jcHAgXAogCVdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHAgXAogCVdl
YkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5j
IGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5w
dXQtc3RyZWFtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZlYzA5Ngot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3Nv
dXAtZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5jCkBAIC0wLDAgKzEsMTk5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA4IFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2Fs
aWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRp
ZgorCisjaW5jbHVkZSAic291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmgiCisKKyNpbmNsdWRl
IDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5o
PgorCisjZGVmaW5lIElOSVRfU1RSSU5HICI8aHRtbD48aGVhZD48dGl0bGU+T01HITwvdGl0bGU+
PC9oZWFkPjxib2R5Pjx0YWJsZT4iCisjZGVmaW5lIEVYSVRfU1RSSU5HICI8L3RhYmxlPjwvaHRt
bD4iCisKK0dfREVGSU5FX1RZUEUgKFdlYktpdFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbSwgd2Vi
a2l0X3NvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbSwgR19UWVBFX0lOUFVUX1NUUkVBTSkKKwor
c3RhdGljIFNvdXBCdWZmZXIgKgord2Via2l0X3NvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9w
YXJzZV9pbmZvIChXZWJLaXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW0gKiBzdHJlYW0sCisJCQkJ
CSAgICAgICBHRmlsZUluZm8gKiBpbmZvKQoreworCVNvdXBCdWZmZXIgKmJ1ZmZlcjsKKwlHU3Ry
aW5nICpzdHJpbmc7CisJY29uc3QgY2hhciAqczsKKwljaGFyICplc2NhcGVkLCAqcGF0aCwgKnht
bF9zdHJpbmc7CisKKwlpZiAoIWdfZmlsZV9pbmZvX2dldF9uYW1lIChpbmZvKSkKKwkJcmV0dXJu
IE5VTEw7CisKKwlzID0gZ19maWxlX2luZm9fZ2V0X2Rpc3BsYXlfbmFtZSAoaW5mbyk7CisJaWYg
KCFzKSB7CisJCXMgPSBnX2ZpbGVfaW5mb19nZXRfbmFtZSAoaW5mbyk7CisJCS8qIEZJWE1FOiBj
b252ZXJ0IHNvbWVob3c/ICovCisJCWlmICghZ191dGY4X3ZhbGlkYXRlIChzLCAtMSwgTlVMTCkp
CisJCQlyZXR1cm4gTlVMTDsKKwl9CisJc3RyaW5nID0gZ19zdHJpbmdfbmV3ICgiPHRyPiIpOwor
CisJeG1sX3N0cmluZyA9IGdfbWFya3VwX2VzY2FwZV90ZXh0IChzLCAtMSk7CisJZXNjYXBlZCA9
IGdfdXJpX2VzY2FwZV9zdHJpbmcgKGdfZmlsZV9pbmZvX2dldF9uYW1lIChpbmZvKSwgTlVMTCwg
RkFMU0UpOworCXBhdGggPSBnX3N0cmNvbmNhdCAoc3RyZWFtLT51cmksICIvIiwgZXNjYXBlZCwg
TlVMTCk7CisJZ19mcmVlIChlc2NhcGVkKTsKKwlnX3N0cmluZ19hcHBlbmRfcHJpbnRmIChzdHJp
bmcsICI8dGQ+PGEgaHJlZj1cIiVzXCI+JXM8L2E+PC90ZD4iLCBwYXRoLCB4bWxfc3RyaW5nKTsK
KwlnX2ZyZWUgKHBhdGgpOworCWdfZnJlZSAoeG1sX3N0cmluZyk7CisJZ19zdHJpbmdfYXBwZW5k
IChzdHJpbmcsICI8L3RyPiIpOworCisJYnVmZmVyID0gc291cF9idWZmZXJfbmV3IChTT1VQX01F
TU9SWV9UQUtFLCBzdHJpbmctPnN0ciwgc3RyaW5nLT5sZW4pOworCWdfc3RyaW5nX2ZyZWUgKHN0
cmluZywgRkFMU0UpOworCisJcmV0dXJuIGJ1ZmZlcjsKK30KKworc3RhdGljIFNvdXBCdWZmZXIg
Kgord2Via2l0X3NvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9yZWFkX25leHRfZmlsZSAoV2Vi
S2l0U291cERpcmVjdG9yeUlucHV0U3RyZWFtICAqc3RyZWFtLAorCQkJCQkJICAgR0NhbmNlbGxh
YmxlICAgICAgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJCQkgICBHRXJyb3IgICAgICAgICAg
ICAgICAgICAgKiplcnJvcikKK3sKKwlHRmlsZUluZm8gKmluZm87CisJU291cEJ1ZmZlciAqYnVm
ZmVyOworCUdFcnJvciAqZXJyID0gTlVMTDsKKworCWRvIHsKKwkJaW5mbyA9IGdfZmlsZV9lbnVt
ZXJhdG9yX25leHRfZmlsZSAoc3RyZWFtLT5lbnVtZXJhdG9yLCBjYW5jZWxsYWJsZSwgJmVycik7
CisJCWlmIChpbmZvID09IE5VTEwpIHsKKwkJCWlmIChlcnIpIHsKKwkJCQlnX3Byb3BhZ2F0ZV9l
cnJvciAoZXJyb3IsIGVycik7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9IGVsc2UgaWYgKCFzdHJl
YW0tPmRvbmUpIHsKKwkJCQlzdHJlYW0tPmRvbmUgPSBUUlVFOworCQkJCXJldHVybiBzb3VwX2J1
ZmZlcl9uZXcgKFNPVVBfTUVNT1JZX1NUQVRJQywKKwkJCQkJCQlFWElUX1NUUklORywKKwkJCQkJ
CQlzaXplb2YgKEVYSVRfU1RSSU5HKSk7CisJCQl9IGVsc2UgeworCQkJCXJldHVybiBOVUxMOwor
CQkJfQorCQl9CisKKwkJYnVmZmVyID0gd2Via2l0X3NvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVh
bV9wYXJzZV9pbmZvIChzdHJlYW0sIGluZm8pOworCX0gd2hpbGUgKGJ1ZmZlciA9PSBOVUxMKTsK
KworCXJldHVybiBidWZmZXI7Cit9CisKK3N0YXRpYyBnc3NpemUKK3dlYmtpdF9zb3VwX2RpcmVj
dG9yeV9pbnB1dF9zdHJlYW1fcmVhZCAoR0lucHV0U3RyZWFtICAqaW5wdXQsCisJCQkJCSB2b2lk
ICAgICAgICAgICpidWZmZXIsCisJCQkJCSBnc2l6ZSBjb3VudCwKKwkJCQkJIEdDYW5jZWxsYWJs
ZSAgKmNhbmNlbGxhYmxlLAorCQkJCQkgR0Vycm9yICAgICAgICoqZXJyb3IpCit7CisJV2ViS2l0
U291cERpcmVjdG9yeUlucHV0U3RyZWFtICpzdHJlYW0gPSBXRUJLSVRfU09VUF9ESVJFQ1RPUllf
SU5QVVRfU1RSRUFNIChpbnB1dCk7CisJZ3NzaXplIHRvdGFsLCBzaXplOworCisJZm9yICh0b3Rh
bCA9IDA7IHRvdGFsIDwgY291bnQ7IHRvdGFsICs9IHNpemUpIHsKKwkJaWYgKHN0cmVhbS0+YnVm
ZmVyID09IE5VTEwpIHsKKwkJCXN0cmVhbS0+YnVmZmVyID0gd2Via2l0X3NvdXBfZGlyZWN0b3J5
X2lucHV0X3N0cmVhbV9yZWFkX25leHRfZmlsZSAoc3RyZWFtLCBjYW5jZWxsYWJsZSwgZXJyb3Ip
OworCQkJaWYgKHN0cmVhbS0+YnVmZmVyID09IE5VTEwpIHsKKwkJCQkvKiBGSVhNRTogSXMgdGhp
cyBjb3JyZWN0IG9yIHNob3VsZCB3ZSBmb3J3YXJkIHRoZSBlcnJvcj8gKi8KKwkJCQlpZiAodG90
YWwpCisJCQkJCWdfY2xlYXJfZXJyb3IgKGVycm9yKTsKKwkJCQlyZXR1cm4gdG90YWw7CisJCQl9
CisJCX0KKworCQlzaXplID0gTUlOIChzdHJlYW0tPmJ1ZmZlci0+bGVuZ3RoLCBjb3VudCAtIHRv
dGFsKTsKKwkJbWVtY3B5ICgoY2hhciAqKWJ1ZmZlciArIHRvdGFsLCBzdHJlYW0tPmJ1ZmZlci0+
ZGF0YSwgc2l6ZSk7CisJCWlmIChzaXplID09IHN0cmVhbS0+YnVmZmVyLT5sZW5ndGgpIHsKKwkJ
CXNvdXBfYnVmZmVyX2ZyZWUgKHN0cmVhbS0+YnVmZmVyKTsKKwkJCXN0cmVhbS0+YnVmZmVyID0g
TlVMTDsKKwkJfSBlbHNlIHsKKwkJCVNvdXBCdWZmZXIgKnN1YiA9IHNvdXBfYnVmZmVyX25ld19z
dWJidWZmZXIgKHN0cmVhbS0+YnVmZmVyLAorCQkJCQkJCQkgICAgIHNpemUsCisJCQkJCQkJCSAg
ICAgc3RyZWFtLT5idWZmZXItPmxlbmd0aCAtIHNpemUpOworCQkJc291cF9idWZmZXJfZnJlZSAo
c3RyZWFtLT5idWZmZXIpOworCQkJc3RyZWFtLT5idWZmZXIgPSBzdWI7CisJCX0KKwl9CisKKwly
ZXR1cm4gdG90YWw7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgord2Via2l0X3NvdXBfZGlyZWN0b3J5
X2lucHV0X3N0cmVhbV9jbG9zZSAoR0lucHV0U3RyZWFtICAqaW5wdXQsCisJCQkJCSAgR0NhbmNl
bGxhYmxlICAqY2FuY2VsbGFibGUsCisJCQkJCSAgR0Vycm9yICAgICAgICoqZXJyb3IpCit7CisJ
V2ViS2l0U291cERpcmVjdG9yeUlucHV0U3RyZWFtICpzdHJlYW0gPSBXRUJLSVRfU09VUF9ESVJF
Q1RPUllfSU5QVVRfU1RSRUFNIChpbnB1dCk7CisJZ2Jvb2xlYW4gcmVzdWx0OworCisJaWYgKHN0
cmVhbS0+YnVmZmVyKSB7CisJCXNvdXBfYnVmZmVyX2ZyZWUgKHN0cmVhbS0+YnVmZmVyKTsKKwkJ
c3RyZWFtLT5idWZmZXIgPSBOVUxMOworCX0KKworCXJlc3VsdCA9IGdfZmlsZV9lbnVtZXJhdG9y
X2Nsb3NlIChzdHJlYW0tPmVudW1lcmF0b3IsCisJCQkJCSAgY2FuY2VsbGFibGUsCisJCQkJCSAg
ZXJyb3IpOworCWdfb2JqZWN0X3VucmVmIChzdHJlYW0tPmVudW1lcmF0b3IpOworCXN0cmVhbS0+
ZW51bWVyYXRvciA9IE5VTEw7CisKKwlnX2ZyZWUgKHN0cmVhbS0+dXJpKTsKKwlzdHJlYW0tPnVy
aSA9IE5VTEw7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3Nv
dXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9jbGFzc19pbml0IChXZWJLaXRTb3VwRGlyZWN0b3J5
SW5wdXRTdHJlYW1DbGFzcyAqc3RyZWFtX2NsYXNzKQoreworCUdJbnB1dFN0cmVhbUNsYXNzICpp
bnB1dHN0cmVhbV9jbGFzcyA9IEdfSU5QVVRfU1RSRUFNX0NMQVNTIChzdHJlYW1fY2xhc3MpOwor
CisJaW5wdXRzdHJlYW1fY2xhc3MtPnJlYWRfZm4gPSB3ZWJraXRfc291cF9kaXJlY3RvcnlfaW5w
dXRfc3RyZWFtX3JlYWQ7CisJaW5wdXRzdHJlYW1fY2xhc3MtPmNsb3NlX2ZuID0gd2Via2l0X3Nv
dXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9jbG9zZTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtp
dF9zb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1faW5pdCAoV2ViS2l0U291cERpcmVjdG9yeUlu
cHV0U3RyZWFtICpzdHJlYW0pCit7CisJc3RyZWFtLT5idWZmZXIgPSBzb3VwX2J1ZmZlcl9uZXcg
KFNPVVBfTUVNT1JZX1NUQVRJQywKKwkJCQkJICBJTklUX1NUUklORywKKwkJCQkJICBzaXplb2Yg
KElOSVRfU1RSSU5HKSk7Cit9CisKK0dJbnB1dFN0cmVhbSAqCit3ZWJraXRfc291cF9kaXJlY3Rv
cnlfaW5wdXRfc3RyZWFtX25ldyAoR0ZpbGVFbnVtZXJhdG9yICplbnVtZXJhdG9yLAorCQkJCQlT
b3VwVVJJICAgICAgICAgKnVyaSkKK3sKKwlHSW5wdXRTdHJlYW0gKnN0cmVhbTsKKworCWdfcmV0
dXJuX3ZhbF9pZl9mYWlsIChHX0lTX0ZJTEVfRU5VTUVSQVRPUiAoZW51bWVyYXRvciksIE5VTEwp
OworCWdfcmV0dXJuX3ZhbF9pZl9mYWlsICh1cmkgIT0gTlVMTCwgTlVMTCk7CisKKwlzdHJlYW0g
PSBnX29iamVjdF9uZXcgKFdFQktJVF9UWVBFX1NPVVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTSwg
TlVMTCk7CisKKwlXRUJLSVRfU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNIChzdHJlYW0pLT5l
bnVtZXJhdG9yID0gZ19vYmplY3RfcmVmIChlbnVtZXJhdG9yKTsKKwlXRUJLSVRfU09VUF9ESVJF
Q1RPUllfSU5QVVRfU1RSRUFNIChzdHJlYW0pLT51cmkgPSBzb3VwX3VyaV90b19zdHJpbmcgKHVy
aSwgRkFMU0UpOworCisJcmV0dXJuIHN0cmVhbTsKK30KKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmgg
Yi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1
dC1zdHJlYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTQ3ZmM5Ci0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291
cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlh
LCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZm5kZWYgV0VCS0lUX1NPVVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTV9ICisjZGVm
aW5lIFdFQktJVF9TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU1fSCAxCisKKyNpbmNsdWRlIDxn
aW8vZ2lvLmg+CisjaW5jbHVkZSA8bGlic291cC9zb3VwLXR5cGVzLmg+CisjaW5jbHVkZSA8bGli
c291cC9zb3VwLW1lc3NhZ2UtYm9keS5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VC
S0lUX1RZUEVfU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNICAgICAgICAgICAgKHdlYmtpdF9z
b3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fZ2V0X3R5cGUgKCkpCisjZGVmaW5lIFdFQktJVF9T
T1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0ob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tf
SU5TVEFOQ0VfQ0FTVCAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfRElSRUNUT1JZX0lOUFVUX1NU
UkVBTSwgV2ViS2l0U291cERpcmVjdG9yeUlucHV0U3RyZWFtKSkKKyNkZWZpbmUgV0VCS0lUX1NP
VVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19D
TEFTU19DQVNUICgoa2xhc3MpLCBXRUJLSVRfVFlQRV9TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJF
QU0sIFdlYktpdFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbUNsYXNzKSkKKyNkZWZpbmUgV0VCS0lU
X0lTX1NPVVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTShvYmopICAgICAgICAgKEdfVFlQRV9DSEVD
S19JTlNUQU5DRV9UWVBFICgob2JqKSwgV0VCS0lUX1RZUEVfU09VUF9ESVJFQ1RPUllfSU5QVVRf
U1RSRUFNKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1NPVVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTV9D
TEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgob2JqKSwgV0VCS0lUX1RZUEVf
U09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfRElSRUNU
T1JZX0lOUFVUX1NUUkVBTV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xB
U1MgKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0sIFdlYktp
dFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbUNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbSBXZWJLaXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW07
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0U291cERpcmVjdG9yeUlucHV0U3RyZWFtQ2xhc3MgV2Vi
S2l0U291cERpcmVjdG9yeUlucHV0U3RyZWFtQ2xhc3M7CisKK3N0cnVjdCBfV2ViS2l0U291cERp
cmVjdG9yeUlucHV0U3RyZWFtIHsKKwlHSW5wdXRTdHJlYW0gcGFyZW50OworCisJR0ZpbGVFbnVt
ZXJhdG9yICplbnVtZXJhdG9yOworCWNoYXIgKnVyaTsKKwlTb3VwQnVmZmVyICpidWZmZXI7CisJ
Z2Jvb2xlYW4gZG9uZTsKK307CisKK3N0cnVjdCBfV2ViS2l0U291cERpcmVjdG9yeUlucHV0U3Ry
ZWFtQ2xhc3MgeworCUdJbnB1dFN0cmVhbUNsYXNzIHBhcmVudF9jbGFzczsKK307CisKK0dUeXBl
ICAgICAgICAgIHdlYmtpdF9zb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fZ2V0X3R5cGUgKHZv
aWQpOworCitHSW5wdXRTdHJlYW0gKndlYmtpdF9zb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1f
bmV3IChHRmlsZUVudW1lcmF0b3IgKmVudW1lcmF0b3IsCisJCQkJCQkgICAgICBTb3VwVVJJICAg
ICAgICAgKnVyaSk7CisKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9TT1VQX0RJ
UkVDVE9SWV9JTlBVVF9TVFJFQU1fSCAqLwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvY2FjaGUvc291cC1odHRwLWlucHV0LXN0cmVhbS5jIGIvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1odHRwLWlucHV0LXN0cmVhbS5jCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4M2IwZjIKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFt
LmMKQEAgLTAsMCArMSw5MjEgQEAKKy8qIHNvdXAtaW5wdXQtc3RyZWFtLmMsIGJhc2VkIG9uIGdz
b2NrZXRpbnB1dHN0cmVhbS5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDcgUmVkIEhh
dCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5
IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgPGNvbmZpZy5oPgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNp
bmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z2lvL2dpby5oPgorCisjaW5jbHVkZSA8bGlic291
cC9zb3VwLmg+CisKKyNpbmNsdWRlICJzb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmgiCisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlZWthYmxlX2lmYWNlX2luaXQg
KEdTZWVrYWJsZUlmYWNlICpzZWVrYWJsZV9pZmFjZSk7CisKK0dfREVGSU5FX1RZUEVfV0lUSF9D
T0RFIChXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtLCB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0
cmVhbSwgR19UWVBFX0lOUFVUX1NUUkVBTSwKKwkJCSBHX0lNUExFTUVOVF9JTlRFUkZBQ0UgKEdf
VFlQRV9TRUVLQUJMRSwKKwkJCQkJCXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlZWth
YmxlX2lmYWNlX2luaXQpKQorCit0eXBlZGVmIHZvaWQgKCpXZWJLaXRTb3VwSFRUUElucHV0U3Ry
ZWFtQ2FsbGJhY2spKEdJbnB1dFN0cmVhbSAqKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCVNvdXBT
ZXNzaW9uICpzZXNzaW9uOworCUdNYWluQ29udGV4dCAqYXN5bmNfY29udGV4dDsKKwlTb3VwTWVz
c2FnZSAqbXNnOworCWdib29sZWFuIGdvdF9oZWFkZXJzLCBmaW5pc2hlZDsKKwlnb2Zmc2V0IG9m
ZnNldDsKKworCUdDYW5jZWxsYWJsZSAqY2FuY2VsbGFibGU7CisJR1NvdXJjZSAqY2FuY2VsX3dh
dGNoOworCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1DYWxsYmFjayBnb3RfaGVhZGVyc19jYjsK
KwlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtQ2FsbGJhY2sgZ290X2NodW5rX2NiOworCVdlYktp
dFNvdXBIVFRQSW5wdXRTdHJlYW1DYWxsYmFjayBmaW5pc2hlZF9jYjsKKwlXZWJLaXRTb3VwSFRU
UElucHV0U3RyZWFtQ2FsbGJhY2sgY2FuY2VsbGVkX2NiOworCisJZ3VjaGFyICpsZWZ0b3Zlcl9i
dWZmZXI7CisJZ3NpemUgbGVmdG92ZXJfYnVmc2l6ZSwgbGVmdG92ZXJfb2Zmc2V0OworCisJZ3Vj
aGFyICpjYWxsZXJfYnVmZmVyOworCWdzaXplIGNhbGxlcl9idWZzaXplLCBjYWxsZXJfbnJlYWQ7
CisJR0FzeW5jUmVhZHlDYWxsYmFjayBvdXRzdGFuZGluZ19jYWxsYmFjazsKKwlHU2ltcGxlQXN5
bmNSZXN1bHQgKnJlc3VsdDsKK30gV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGU7Cisj
ZGVmaW5lIFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFKG8pIChHX1RZ
UEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKChvKSwgU09VUF9UWVBFX0hUVFBfSU5QVVRfU1RSRUFN
LCBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSkpCisKKworc3RhdGljIGdzc2l6ZSAg
IHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWQgKEdJbnB1dFN0cmVhbSAgICAgICAg
ICpzdHJlYW0sCisJCQkJCQkgICAgdm9pZCAgICAgICAgICAgICAgICAgKmJ1ZmZlciwKKwkJCQkJ
CSAgICBnc2l6ZSBjb3VudCwKKwkJCQkJCSAgICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2Vs
bGFibGUsCisJCQkJCQkgICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKTsKK3N0YXRpYyBn
Ym9vbGVhbiB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9jbG9zZSAoR0lucHV0U3RyZWFt
ICAgICAgICAgKnN0cmVhbSwKKwkJCQkJCSAgICAgR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNl
bGxhYmxlLAorCQkJCQkJICAgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpOworc3RhdGlj
IHZvaWQgICAgIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMgKEdJbnB1
dFN0cmVhbSAgICAgICAgICpzdHJlYW0sCisJCQkJCQkJICB2b2lkICAgICAgICAgICAgICAgICAq
YnVmZmVyLAorCQkJCQkJCSAgZ3NpemUgY291bnQsCisJCQkJCQkJICBpbnQgaW9fcHJpb3JpdHks
CisJCQkJCQkJICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJCQkJICBH
QXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAorCQkJCQkJCSAgZ3BvaW50ZXIgZGF0YSk7Citz
dGF0aWMgZ3NzaXplICAgd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVhZF9maW5pc2gg
KEdJbnB1dFN0cmVhbSAgICAgICAgICpzdHJlYW0sCisJCQkJCQkJICAgR0FzeW5jUmVzdWx0ICAg
ICAgICAgKnJlc3VsdCwKKwkJCQkJCQkgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpOwor
c3RhdGljIHZvaWQgICAgIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlX2FzeW5j
IChHSW5wdXRTdHJlYW0gICAgICAgICAqc3RyZWFtLAorCQkJCQkJCSAgIGludCBpb19wcmlvcml0
eSwKKwkJCQkJCQkgICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJCQkJ
ICAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKKwkJCQkJCQkgICBncG9pbnRlciBkYXRh
KTsKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9jbG9zZV9m
aW5pc2ggKEdJbnB1dFN0cmVhbSAgICAgICAgICpzdHJlYW0sCisJCQkJCQkJICAgIEdBc3luY1Jl
c3VsdCAgICAgICAgICpyZXN1bHQsCisJCQkJCQkJICAgIEdFcnJvciAgICAgICAgICAgICAgKipl
cnJvcik7CisKK3N0YXRpYyBnb2Zmc2V0ICB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV90
ZWxsIChHU2Vla2FibGUgICAgICAgICAgICAqc2Vla2FibGUpOworCitzdGF0aWMgZ2Jvb2xlYW4g
d2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2FuX3NlZWsgKEdTZWVrYWJsZSAgICAgICAg
ICAgICpzZWVrYWJsZSk7CitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fc2VlayAoR1NlZWthYmxlICAgICAgICAgICAgKnNlZWthYmxlLAorCQkJCQkJICAgIGdv
ZmZzZXQgb2Zmc2V0LAorCQkJCQkJICAgIEdTZWVrVHlwZSB0eXBlLAorCQkJCQkJICAgIEdDYW5j
ZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkJCSAgICBHRXJyb3IgICAgICAgICAg
ICAgICoqZXJyb3IpOworCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fY2FuX3RydW5jYXRlIChHU2Vla2FibGUgICAgICAgICAgICAqc2Vla2FibGUpOworc3Rh
dGljIGdib29sZWFuIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3RydW5jYXRlIChHU2Vl
a2FibGUgICAgICAgICAgICAqc2Vla2FibGUsCisJCQkJCQkJZ29mZnNldCBvZmZzZXQsCisJCQkJ
CQkJR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJCQkJCUdFcnJvciAgICAg
ICAgICAgICAgKiplcnJvcik7CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX2dvdF9oZWFkZXJzIChTb3VwTWVzc2FnZSAqbXNnLCBncG9pbnRlciBzdHJlYW0pOwor
c3RhdGljIHZvaWQgd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ290X2NodW5rIChTb3Vw
TWVzc2FnZSAqbXNnLCBTb3VwQnVmZmVyICpjaHVuaywgZ3BvaW50ZXIgc3RyZWFtKTsKK3N0YXRp
YyB2b2lkIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2ZpbmlzaGVkIChTb3VwTWVzc2Fn
ZSAqbXNnLCBncG9pbnRlciBzdHJlYW0pOworCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfaHR0
cF9pbnB1dF9zdHJlYW1fZmluYWxpemUgKEdPYmplY3QgKm9iamVjdCkKK3sKKwlXZWJLaXRTb3Vw
SFRUUElucHV0U3RyZWFtICpzdHJlYW0gPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTSAo
b2JqZWN0KTsKKwlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFdFQktJ
VF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOworCisJZ19vYmpl
Y3RfdW5yZWYgKHByaXYtPnNlc3Npb24pOworCisJZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVj
dF9ieV9mdW5jIChwcml2LT5tc2csIEdfQ0FMTEJBQ0sgKHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX2dvdF9oZWFkZXJzKSwgc3RyZWFtKTsKKwlnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25u
ZWN0X2J5X2Z1bmMgKHByaXYtPm1zZywgR19DQUxMQkFDSyAod2Via2l0X3NvdXBfaHR0cF9pbnB1
dF9zdHJlYW1fZ290X2NodW5rKSwgc3RyZWFtKTsKKwlnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25u
ZWN0X2J5X2Z1bmMgKHByaXYtPm1zZywgR19DQUxMQkFDSyAod2Via2l0X3NvdXBfaHR0cF9pbnB1
dF9zdHJlYW1fZmluaXNoZWQpLCBzdHJlYW0pOworCWdfb2JqZWN0X3VucmVmIChwcml2LT5tc2cp
OworCWdfZnJlZSAocHJpdi0+bGVmdG92ZXJfYnVmZmVyKTsKKworCWlmIChHX09CSkVDVF9DTEFT
UyAod2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcGFyZW50X2NsYXNzKS0+ZmluYWxpemUp
CisJCSgqR19PQkpFQ1RfQ0xBU1MgKHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3BhcmVu
dF9jbGFzcyktPmZpbmFsaXplKShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3Nv
dXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xhc3NfaW5pdCAoV2ViS2l0U291cEhUVFBJbnB1dFN0cmVh
bUNsYXNzICprbGFzcykKK3sKKwlHT2JqZWN0Q2xhc3MgKmdvYmplY3RfY2xhc3MgPSBHX09CSkVD
VF9DTEFTUyAoa2xhc3MpOworCUdJbnB1dFN0cmVhbUNsYXNzICpzdHJlYW1fY2xhc3MgPSBHX0lO
UFVUX1NUUkVBTV9DTEFTUyAoa2xhc3MpOworCisJZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlIChr
bGFzcywgc2l6ZW9mIChXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSkpOworCisJZ29i
amVjdF9jbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9maW5h
bGl6ZTsKKworCXN0cmVhbV9jbGFzcy0+cmVhZF9mbiA9IHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX3JlYWQ7CisJc3RyZWFtX2NsYXNzLT5jbG9zZV9mbiA9IHdlYmtpdF9zb3VwX2h0dHBf
aW5wdXRfc3RyZWFtX2Nsb3NlOworCXN0cmVhbV9jbGFzcy0+cmVhZF9hc3luYyA9IHdlYmtpdF9z
b3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmM7CisJc3RyZWFtX2NsYXNzLT5yZWFkX2Zp
bmlzaCA9IHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWRfZmluaXNoOworCXN0cmVh
bV9jbGFzcy0+Y2xvc2VfYXN5bmMgPSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9jbG9z
ZV9hc3luYzsKKwlzdHJlYW1fY2xhc3MtPmNsb3NlX2ZpbmlzaCA9IHdlYmtpdF9zb3VwX2h0dHBf
aW5wdXRfc3RyZWFtX2Nsb3NlX2ZpbmlzaDsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX3NlZWthYmxlX2lmYWNlX2luaXQgKEdTZWVrYWJsZUlmYWNlICpz
ZWVrYWJsZV9pZmFjZSkKK3sKKwlzZWVrYWJsZV9pZmFjZS0+dGVsbCA9IHdlYmtpdF9zb3VwX2h0
dHBfaW5wdXRfc3RyZWFtX3RlbGw7CisJc2Vla2FibGVfaWZhY2UtPmNhbl9zZWVrID0gd2Via2l0
X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2FuX3NlZWs7CisJc2Vla2FibGVfaWZhY2UtPnNlZWsg
PSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZWVrOworCXNlZWthYmxlX2lmYWNlLT5j
YW5fdHJ1bmNhdGUgPSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9jYW5fdHJ1bmNhdGU7
CisJc2Vla2FibGVfaWZhY2UtPnRydW5jYXRlX2ZuID0gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fdHJ1bmNhdGU7Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfc291cF9odHRwX2lucHV0
X3N0cmVhbV9pbml0IChXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtICpzdHJlYW0pCit7CisJOwor
fQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcXVldWVfbWVz
c2FnZSAoV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSAqc3RyZWFtKQoreworCVdlYktpdFNvdXBI
VFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJF
QU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7CisKKwlwcml2LT5nb3RfaGVhZGVycyA9IHByaXYtPmZp
bmlzaGVkID0gRkFMU0U7CisKKwkvKiBBZGQgYW4gZXh0cmEgcmVmIHNpbmNlIHNvdXBfc2Vzc2lv
bl9xdWV1ZV9tZXNzYWdlIHN0ZWFscyBvbmUgKi8KKwlnX29iamVjdF9yZWYgKHByaXYtPm1zZyk7
CisJc291cF9zZXNzaW9uX3F1ZXVlX21lc3NhZ2UgKHByaXYtPnNlc3Npb24sIHByaXYtPm1zZywg
TlVMTCwgTlVMTCk7Cit9CisKKy8qKgorICogd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1f
bmV3OgorICogQHNlc3Npb246IHRoZSAjU291cFNlc3Npb24gdG8gdXNlCisgKiBAbXNnOiB0aGUg
I1NvdXBNZXNzYWdlIHdob3NlIHJlc3BvbnNlIHdpbGwgYmUgc3RyZWFtZWQKKyAqCisgKiBQcmVw
YXJlcyB0byBzZW5kIEBtc2cgb3ZlciBAc2Vzc2lvbiwgYW5kIHJldHVybnMgYSAjR0lucHV0U3Ry
ZWFtCisgKiB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlYWQgdGhlIHJlc3BvbnNlLgorICoKKyAqIEBt
c2cgbWF5IG5vdCBiZSBzZW50IHVudGlsIHRoZSBmaXJzdCByZWFkIGNhbGw7IGlmIHlvdSBuZWVk
IHRvIGxvb2sKKyAqIGF0IHRoZSBzdGF0dXMgY29kZSBvciByZXNwb25zZSBoZWFkZXJzIGJlZm9y
ZSByZWFkaW5nIHRoZSBib2R5LCB5b3UKKyAqIGNhbiB1c2Ugd2Via2l0X3NvdXBfaHR0cF9pbnB1
dF9zdHJlYW1fc2VuZCgpIG9yIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5
bmMoKQorICogdG8gZm9yY2UgdGhlIG1lc3NhZ2UgdG8gYmUgc2VudCBhbmQgdGhlIHJlc3BvbnNl
IGhlYWRlcnMgcmVhZC4KKyAqCisgKiBJZiBAbXNnIGdldHMgYSBub24tMnh4IHJlc3VsdCwgdGhl
IGZpcnN0IHJlYWQgKG9yIHNlbmQpIHdpbGwgcmV0dXJuCisgKiBhbiBlcnJvciB3aXRoIHR5cGUg
JVdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0hUVFBfRVJST1IuCisgKgorICogSW50ZXJu
YWxseSwgI1dlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gaXMgaW1wbGVtZW50ZWQgdXNpbmcgYXN5
bmNocm9ub3VzIEkvTywKKyAqIHNvIGlmIHlvdSBhcmUgdXNpbmcgdGhlIHN5bmNocm9ub3VzIEFQ
SSAoZWcsCisgKiBnX2lucHV0X3N0cmVhbV9yZWFkKCkpLCB5b3Ugc2hvdWxkIGNyZWF0ZSBhIG5l
dyAjR01haW5Db250ZXh0IGFuZAorICogc2V0IGl0IGFzIHRoZSAlU09VUF9TRVNTSU9OX0FTWU5D
X0NPTlRFWFQgcHJvcGVydHkgb24gQHNlc3Npb24uIChJZgorICogeW91IGRvbid0LCB0aGVuIHN5
bmNocm9ub3VzICNHSW5wdXRTdHJlYW0gY2FsbHMgd2lsbCBjYXVzZSB0aGUgbWFpbgorICogbG9v
cCB0byBiZSBydW4gcmVjdXJzaXZlbHkuKSBUaGUgYXN5bmMgI0dJbnB1dFN0cmVhbSBBUEkgd29y
a3MgZmluZQorICogd2l0aCAlU09VUF9TRVNTSU9OX0FTWU5DX0NPTlRFWFQgZWl0aGVyIHNldCBv
ciB1bnNldC4KKyAqCisgKiBSZXR1cm5zOiBhIG5ldyAjR0lucHV0U3RyZWFtLgorICoqLworV2Vi
S2l0U291cEhUVFBJbnB1dFN0cmVhbSAqCit3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9u
ZXcgKFNvdXBTZXNzaW9uICpzZXNzaW9uLCBTb3VwTWVzc2FnZSAqbXNnKQoreworCVdlYktpdFNv
dXBIVFRQSW5wdXRTdHJlYW0gKnN0cmVhbTsKKwlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJp
dmF0ZSAqcHJpdjsKKworCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChTT1VQX0lTX01FU1NBR0UgKG1z
ZyksIE5VTEwpOworCisJc3RyZWFtID0gZ19vYmplY3RfbmV3IChTT1VQX1RZUEVfSFRUUF9JTlBV
VF9TVFJFQU0sIE5VTEwpOworCXByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9H
RVRfUFJJVkFURSAoc3RyZWFtKTsKKworCXByaXYtPnNlc3Npb24gPSBnX29iamVjdF9yZWYgKHNl
c3Npb24pOworCXByaXYtPmFzeW5jX2NvbnRleHQgPSBzb3VwX3Nlc3Npb25fZ2V0X2FzeW5jX2Nv
bnRleHQgKHNlc3Npb24pOworCXByaXYtPm1zZyA9IGdfb2JqZWN0X3JlZiAobXNnKTsKKworCWdf
c2lnbmFsX2Nvbm5lY3QgKG1zZywgImdvdF9oZWFkZXJzIiwKKwkJCSAgR19DQUxMQkFDSyAod2Vi
a2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ290X2hlYWRlcnMpLCBzdHJlYW0pOworCWdfc2ln
bmFsX2Nvbm5lY3QgKG1zZywgImdvdF9jaHVuayIsCisJCQkgIEdfQ0FMTEJBQ0sgKHdlYmtpdF9z
b3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dvdF9jaHVuayksIHN0cmVhbSk7CisJZ19zaWduYWxfY29u
bmVjdCAobXNnLCAiZmluaXNoZWQiLAorCQkJICBHX0NBTExCQUNLICh3ZWJraXRfc291cF9odHRw
X2lucHV0X3N0cmVhbV9maW5pc2hlZCksIHN0cmVhbSk7CisKKwl3ZWJraXRfc291cF9odHRwX2lu
cHV0X3N0cmVhbV9xdWV1ZV9tZXNzYWdlIChzdHJlYW0pOworCXJldHVybiBzdHJlYW07Cit9CisK
K3N0YXRpYyB2b2lkCit3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9nb3RfaGVhZGVycyAo
U291cE1lc3NhZ2UgKm1zZywgZ3BvaW50ZXIgc3RyZWFtKQoreworCVdlYktpdFNvdXBIVFRQSW5w
dXRTdHJlYW1Qcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VU
X1BSSVZBVEUgKHN0cmVhbSk7CisKKwkvKiBJZiB0aGUgc3RhdHVzIGlzIHVuc3VjY2Vzc2Z1bCwg
d2UganVzdCBpZ25vcmUgdGhlIHNpZ25hbCBhbmQgbGV0CisJICogbGlic291cCBrZWVwIGdvaW5n
IChldmVudHVhbGx5IGVpdGhlciBpdCB3aWxsIHJlcXVldWUgdGhlIHJlcXVlc3QKKwkgKiAoYWZ0
ZXIgaGFuZGxpbmcgYXV0aGVudGljYXRpb24vcmVkaXJlY3Rpb24pLCBvciBlbHNlIHRoZQorCSAq
ICJmaW5pc2hlZCIgaGFuZGxlciB3aWxsIHJ1bikuCisJICovCisJaWYgKCFTT1VQX1NUQVRVU19J
U19TVUNDRVNTRlVMIChtc2ctPnN0YXR1c19jb2RlKSkKKwkJcmV0dXJuOworCisJcHJpdi0+Z290
X2hlYWRlcnMgPSBUUlVFOworCWlmICghcHJpdi0+Y2FsbGVyX2J1ZmZlcikgeworCQkvKiBOb3Qg
cmVhZHkgdG8gcmVhZCB0aGUgYm9keSB5ZXQgKi8KKwkJc291cF9zZXNzaW9uX3BhdXNlX21lc3Nh
Z2UgKHByaXYtPnNlc3Npb24sIG1zZyk7CisJfQorCisJaWYgKHByaXYtPmdvdF9oZWFkZXJzX2Ni
KQorCQlwcml2LT5nb3RfaGVhZGVyc19jYiAoc3RyZWFtKTsKK30KKworc3RhdGljIHZvaWQKK3dl
YmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dvdF9jaHVuayAoU291cE1lc3NhZ2UgKm1zZywg
U291cEJ1ZmZlciAqY2h1bmtfYnVmZmVyLAorCQkJCQkgZ3BvaW50ZXIgc3RyZWFtKQoreworCVdl
YktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9J
TlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7CisJY29uc3QgZ2NoYXIgKmNodW5rID0g
Y2h1bmtfYnVmZmVyLT5kYXRhOworCWdzaXplIGNodW5rX3NpemUgPSBjaHVua19idWZmZXItPmxl
bmd0aDsKKworCS8qIFdlIG9ubHkgcGF5IGF0dGVudGlvbiB0byB0aGUgY2h1bmsgaWYgaXQncyBw
YXJ0IG9mIGEgc3VjY2Vzc2Z1bAorCSAqIHJlc3BvbnNlLgorCSAqLworCWlmICghU09VUF9TVEFU
VVNfSVNfU1VDQ0VTU0ZVTCAobXNnLT5zdGF0dXNfY29kZSkpCisJCXJldHVybjsKKworCS8qIFNh
bml0eSBjaGVjayAqLworCWlmIChwcml2LT5jYWxsZXJfYnVmc2l6ZSA9PSAwIHx8IHByaXYtPmxl
ZnRvdmVyX2J1ZnNpemUgIT0gMCkKKwkJZ193YXJuaW5nICgid2Via2l0X3NvdXBfaHR0cF9pbnB1
dF9zdHJlYW1fZ290X2NodW5rIGNhbGxlZCBhZ2FpbiBiZWZvcmUgcHJldmlvdXMgY2h1bmsgd2Fz
IHByb2Nlc3NlZCIpOworCisJLyogQ29weSB3aGF0IHdlIGNhbiBpbnRvIHByaXYtPmNhbGxlcl9i
dWZmZXIgKi8KKwlpZiAocHJpdi0+Y2FsbGVyX2J1ZnNpemUgLSBwcml2LT5jYWxsZXJfbnJlYWQg
PiAwKSB7CisJCWdzaXplIG5yZWFkID0gTUlOIChjaHVua19zaXplLCBwcml2LT5jYWxsZXJfYnVm
c2l6ZSAtIHByaXYtPmNhbGxlcl9ucmVhZCk7CisKKwkJbWVtY3B5IChwcml2LT5jYWxsZXJfYnVm
ZmVyICsgcHJpdi0+Y2FsbGVyX25yZWFkLCBjaHVuaywgbnJlYWQpOworCQlwcml2LT5jYWxsZXJf
bnJlYWQgKz0gbnJlYWQ7CisJCXByaXYtPm9mZnNldCArPSBucmVhZDsKKwkJY2h1bmsgKz0gbnJl
YWQ7CisJCWNodW5rX3NpemUgLT0gbnJlYWQ7CisJfQorCisJaWYgKGNodW5rX3NpemUgPiAwKSB7
CisJCS8qIENvcHkgdGhlIHJlc3QgaW50byBwcml2LT5sZWZ0b3Zlcl9idWZmZXIuIElmCisJCSAq
IHRoZXJlJ3MgYWxyZWFkeSBzb21lIGRhdGEgdGhlcmUsIHJlYWxsb2MgYW5kCisJCSAqIGFwcGVu
ZC4gT3RoZXJ3aXNlIGp1c3QgY29weS4KKwkJICovCisJCWlmIChwcml2LT5sZWZ0b3Zlcl9idWZz
aXplKSB7CisJCQlwcml2LT5sZWZ0b3Zlcl9idWZmZXIgPSBnX3JlYWxsb2MgKHByaXYtPmxlZnRv
dmVyX2J1ZmZlciwKKwkJCQkJCQkgICBwcml2LT5sZWZ0b3Zlcl9idWZzaXplICsgY2h1bmtfc2l6
ZSk7CisJCQltZW1jcHkgKHByaXYtPmxlZnRvdmVyX2J1ZmZlciArIHByaXYtPmxlZnRvdmVyX2J1
ZnNpemUsCisJCQkJY2h1bmssIGNodW5rX3NpemUpOworCQkJcHJpdi0+bGVmdG92ZXJfYnVmc2l6
ZSArPSBjaHVua19zaXplOworCQl9IGVsc2UgeworCQkJcHJpdi0+bGVmdG92ZXJfYnVmc2l6ZSA9
IGNodW5rX3NpemU7CisJCQlwcml2LT5sZWZ0b3Zlcl9idWZmZXIgPSBnX21lbWR1cCAoY2h1bmss
IGNodW5rX3NpemUpOworCQkJcHJpdi0+bGVmdG92ZXJfb2Zmc2V0ID0gMDsKKwkJfQorCX0KKwor
CXNvdXBfc2Vzc2lvbl9wYXVzZV9tZXNzYWdlIChwcml2LT5zZXNzaW9uLCBtc2cpOworCWlmIChw
cml2LT5nb3RfY2h1bmtfY2IpCisJCXByaXYtPmdvdF9jaHVua19jYiAoc3RyZWFtKTsKK30KKwor
c3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2ZpbmlzaGVkIChTb3Vw
TWVzc2FnZSAqbXNnLCBncG9pbnRlciBzdHJlYW0pCit7CisJV2ViS2l0U291cEhUVFBJbnB1dFN0
cmVhbVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJ
VkFURSAoc3RyZWFtKTsKKworCXByaXYtPmZpbmlzaGVkID0gVFJVRTsKKworCWlmIChwcml2LT5m
aW5pc2hlZF9jYikKKwkJcHJpdi0+ZmluaXNoZWRfY2IgKHN0cmVhbSk7Cit9CisKK3N0YXRpYyBn
Ym9vbGVhbgord2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2FuY2VsbGVkIChHSU9DaGFu
bmVsICpjaGFuLCBHSU9Db25kaXRpb24gY29uZGl0aW9uLAorCQkJCQkgZ3BvaW50ZXIgc3RyZWFt
KQoreworCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gV0VCS0lUX1NP
VVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7CisKKwlwcml2LT5jYW5j
ZWxfd2F0Y2ggPSBOVUxMOworCisJc291cF9zZXNzaW9uX3BhdXNlX21lc3NhZ2UgKHByaXYtPnNl
c3Npb24sIHByaXYtPm1zZyk7CisJaWYgKHByaXYtPmNhbmNlbGxlZF9jYikKKwkJcHJpdi0+Y2Fu
Y2VsbGVkX2NiIChzdHJlYW0pOworCisJcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZAor
d2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcHJlcGFyZV9mb3JfaW8gKEdJbnB1dFN0cmVh
bSAqc3RyZWFtLAorCQkJCQkgICAgICBHQ2FuY2VsbGFibGUgKmNhbmNlbGxhYmxlLAorCQkJCQkg
ICAgICBndWNoYXIgICAgICAgKmJ1ZmZlciwKKwkJCQkJICAgICAgZ3NpemUgY291bnQpCit7CisJ
V2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9IVFRQ
X0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKwlpbnQgY2FuY2VsX2ZkOworCisJ
cHJpdi0+Y2FuY2VsbGFibGUgPSBjYW5jZWxsYWJsZTsKKwljYW5jZWxfZmQgPSBnX2NhbmNlbGxh
YmxlX2dldF9mZCAoY2FuY2VsbGFibGUpOworCWlmIChjYW5jZWxfZmQgIT0gLTEpIHsKKwkJR0lP
Q2hhbm5lbCAqY2hhbiA9IGdfaW9fY2hhbm5lbF91bml4X25ldyAoY2FuY2VsX2ZkKTsKKwkJcHJp
di0+Y2FuY2VsX3dhdGNoID0gc291cF9hZGRfaW9fd2F0Y2ggKHByaXYtPmFzeW5jX2NvbnRleHQs
IGNoYW4sCisJCQkJCQkJR19JT19JTiB8IEdfSU9fRVJSIHwgR19JT19IVVAsCisJCQkJCQkJd2Vi
a2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2FuY2VsbGVkLAorCQkJCQkJCXN0cmVhbSk7CisJ
CWdfaW9fY2hhbm5lbF91bnJlZiAoY2hhbik7CisJfQorCisJcHJpdi0+Y2FsbGVyX2J1ZmZlciA9
IGJ1ZmZlcjsKKwlwcml2LT5jYWxsZXJfYnVmc2l6ZSA9IGNvdW50OworCXByaXYtPmNhbGxlcl9u
cmVhZCA9IDA7CisKKwlpZiAocHJpdi0+Z290X2hlYWRlcnMpCisJCXNvdXBfc2Vzc2lvbl91bnBh
dXNlX21lc3NhZ2UgKHByaXYtPnNlc3Npb24sIHByaXYtPm1zZyk7Cit9CisKK3N0YXRpYyB2b2lk
Cit3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9kb25lX2lvIChHSW5wdXRTdHJlYW0gKnN0
cmVhbSkKK3sKKwlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFdFQktJ
VF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOworCisJaWYgKHBy
aXYtPmNhbmNlbF93YXRjaCkgeworCQlnX3NvdXJjZV9kZXN0cm95IChwcml2LT5jYW5jZWxfd2F0
Y2gpOworCQlwcml2LT5jYW5jZWxfd2F0Y2ggPSBOVUxMOworCQlnX2NhbmNlbGxhYmxlX3JlbGVh
c2VfZmQgKHByaXYtPmNhbmNlbGxhYmxlKTsKKwl9CisJcHJpdi0+Y2FuY2VsbGFibGUgPSBOVUxM
OworCisJcHJpdi0+Y2FsbGVyX2J1ZmZlciA9IE5VTEw7CisJcHJpdi0+Y2FsbGVyX2J1ZnNpemUg
PSAwOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3NldF9lcnJvcl9pZl9odHRwX2ZhaWxlZCAoU291
cE1lc3NhZ2UgKm1zZywgR0Vycm9yICoqZXJyb3IpCit7CisJaWYgKCFTT1VQX1NUQVRVU19JU19T
VUNDRVNTRlVMIChtc2ctPnN0YXR1c19jb2RlKSkgeworCQlnX3NldF9lcnJvcl9saXRlcmFsIChl
cnJvciwgU09VUF9IVFRQX0VSUk9SLAorCQkJCSAgICAgbXNnLT5zdGF0dXNfY29kZSwgbXNnLT5y
ZWFzb25fcGhyYXNlKTsKKwkJcmV0dXJuIFRSVUU7CisJfQorCXJldHVybiBGQUxTRTsKK30KKwor
c3RhdGljIGdzaXplCityZWFkX2Zyb21fbGVmdG92ZXIgKFdlYktpdFNvdXBIVFRQSW5wdXRTdHJl
YW1Qcml2YXRlICpwcml2LAorCQkgICAgZ3BvaW50ZXIgYnVmZmVyLCBnc2l6ZSBidWZzaXplKQor
eworCWdzaXplIG5yZWFkOworCisJaWYgKHByaXYtPmxlZnRvdmVyX2J1ZnNpemUgLSBwcml2LT5s
ZWZ0b3Zlcl9vZmZzZXQgPD0gYnVmc2l6ZSkgeworCQlucmVhZCA9IHByaXYtPmxlZnRvdmVyX2J1
ZnNpemUgLSBwcml2LT5sZWZ0b3Zlcl9vZmZzZXQ7CisJCW1lbWNweSAoYnVmZmVyLCBwcml2LT5s
ZWZ0b3Zlcl9idWZmZXIgKyBwcml2LT5sZWZ0b3Zlcl9vZmZzZXQsIG5yZWFkKTsKKworCQlnX2Zy
ZWUgKHByaXYtPmxlZnRvdmVyX2J1ZmZlcik7CisJCXByaXYtPmxlZnRvdmVyX2J1ZmZlciA9IE5V
TEw7CisJCXByaXYtPmxlZnRvdmVyX2J1ZnNpemUgPSBwcml2LT5sZWZ0b3Zlcl9vZmZzZXQgPSAw
OworCX0gZWxzZSB7CisJCW5yZWFkID0gYnVmc2l6ZTsKKwkJbWVtY3B5IChidWZmZXIsIHByaXYt
PmxlZnRvdmVyX2J1ZmZlciArIHByaXYtPmxlZnRvdmVyX29mZnNldCwgbnJlYWQpOworCQlwcml2
LT5sZWZ0b3Zlcl9vZmZzZXQgKz0gbnJlYWQ7CisJfQorCisJcHJpdi0+b2Zmc2V0ICs9IG5yZWFk
OworCXJldHVybiBucmVhZDsKK30KKworLyogVGhpcyBkb2VzIHRoZSB3b3JrIG9mIHdlYmtpdF9z
b3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmQoKSwgYXNzdW1pbmcgdGhhdCB0aGUKKyAqIEdJbnB1
dFN0cmVhbSBwZW5kaW5nIGZsYWcgaGFzIGFscmVhZHkgYmVlbiBzZXQuIEl0IGlzIGFsc28gdXNl
ZCBieQorICogd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luYygpIGluIHNv
bWUgY2lyY3Vtc3RhbmNlcy4KKyAqLworc3RhdGljIGdib29sZWFuCit3ZWJraXRfc291cF9odHRw
X2lucHV0X3N0cmVhbV9zZW5kX2ludGVybmFsIChHSW5wdXRTdHJlYW0gICpzdHJlYW0sCisJCQkJ
CSAgICAgR0NhbmNlbGxhYmxlICAqY2FuY2VsbGFibGUsCisJCQkJCSAgICAgR0Vycm9yICAgICAg
ICoqZXJyb3IpCit7CisJV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBX
RUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKworCXdl
YmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3ByZXBhcmVfZm9yX2lvIChzdHJlYW0sIGNhbmNl
bGxhYmxlLCBOVUxMLCAwKTsKKwl3aGlsZSAoIXByaXYtPmZpbmlzaGVkICYmICFwcml2LT5nb3Rf
aGVhZGVycyAmJgorCSAgICAgICAhZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQgKGNhbmNlbGxh
YmxlKSkKKwkJZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uIChwcml2LT5hc3luY19jb250ZXh0LCBU
UlVFKTsKKwl3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9kb25lX2lvIChzdHJlYW0pOwor
CisJaWYgKGdfY2FuY2VsbGFibGVfc2V0X2Vycm9yX2lmX2NhbmNlbGxlZCAoY2FuY2VsbGFibGUs
IGVycm9yKSkKKwkJcmV0dXJuIEZBTFNFOworCWVsc2UgaWYgKHNldF9lcnJvcl9pZl9odHRwX2Zh
aWxlZCAocHJpdi0+bXNnLCBlcnJvcikpCisJCXJldHVybiBGQUxTRTsKKwlyZXR1cm4gVFJVRTsK
K30KKworc3RhdGljIHZvaWQKK3NlbmRfc3luY19maW5pc2hlZCAoR0lucHV0U3RyZWFtICpzdHJl
YW0pCit7CisJV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBXRUJLSVRf
U09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKwlHRXJyb3IgKmVy
cm9yID0gTlVMTDsKKworCWlmICghZ19jYW5jZWxsYWJsZV9zZXRfZXJyb3JfaWZfY2FuY2VsbGVk
IChwcml2LT5jYW5jZWxsYWJsZSwgJmVycm9yKSkKKwkJc2V0X2Vycm9yX2lmX2h0dHBfZmFpbGVk
IChwcml2LT5tc2csICZlcnJvcik7CisKKwlwcml2LT5nb3RfaGVhZGVyc19jYiA9IE5VTEw7CisJ
cHJpdi0+ZmluaXNoZWRfY2IgPSBOVUxMOworCisJLyogV2FrZSB1cCB0aGUgbWFpbiBjb250ZXh0
IGl0ZXJhdGlvbiAqLworCWdfc291cmNlX2F0dGFjaCAoZ19pZGxlX3NvdXJjZV9uZXcgKCksIE5V
TEwpOworfQorCisvKioKKyAqIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmQ6Cisg
KiBAaHR0cHN0cmVhbTogYSAjV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbQorICogQGNhbmNlbGxh
YmxlOiBvcHRpb25hbCAjR0NhbmNlbGxhYmxlIG9iamVjdCwgJU5VTEwgdG8gaWdub3JlLgorICog
QGVycm9yOiBsb2NhdGlvbiB0byBzdG9yZSB0aGUgZXJyb3Igb2NjdXJpbmcsIG9yICVOVUxMIHRv
IGlnbm9yZQorICoKKyAqIFN5bmNocm9ub3VzbHkgc2VuZHMgdGhlIEhUVFAgcmVxdWVzdCBhc3Nv
Y2lhdGVkIHdpdGggQHN0cmVhbSwgYW5kCisgKiByZWFkcyB0aGUgcmVzcG9uc2UgaGVhZGVycy4g
Q2FsbCB0aGlzIGFmdGVyIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX25ldygpCisgKiBh
bmQgYmVmb3JlIHRoZSBmaXJzdCBnX2lucHV0X3N0cmVhbV9yZWFkKCkgaWYgeW91IHdhbnQgdG8g
Y2hlY2sgdGhlCisgKiBIVFRQIHN0YXR1cyBjb2RlIGJlZm9yZSB5b3Ugc3RhcnQgcmVhZGluZy4K
KyAqCisgKiBSZXR1cm4gdmFsdWU6ICVUUlVFIGlmIG1zZyBoYXMgYSBzdWNjZXNzZnVsICgyeHgp
IHN0YXR1cywgJUZBTFNFIGlmCisgKiBub3QuCisgKiovCitnYm9vbGVhbgord2Via2l0X3NvdXBf
aHR0cF9pbnB1dF9zdHJlYW1fc2VuZCAoV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSAgKmh0dHBz
dHJlYW0sCisJCQkJICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkg
ICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKQoreworCVdlYktpdFNvdXBIVFRQSW5wdXRT
dHJlYW1Qcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BS
SVZBVEUgKGh0dHBzdHJlYW0pOworCUdJbnB1dFN0cmVhbSAqaXN0cmVhbSA9IChHSW5wdXRTdHJl
YW0gKilodHRwc3RyZWFtOworCWdib29sZWFuIHJlc3VsdDsKKworCWdfcmV0dXJuX3ZhbF9pZl9m
YWlsIChTT1VQX0lTX0hUVFBfSU5QVVRfU1RSRUFNIChodHRwc3RyZWFtKSwgRkFMU0UpOworCisJ
aWYgKCFnX2lucHV0X3N0cmVhbV9zZXRfcGVuZGluZyAoaXN0cmVhbSwgZXJyb3IpKQorCQlyZXR1
cm4gRkFMU0U7CisKKwlwcml2LT5nb3RfaGVhZGVyc19jYiA9IHNlbmRfc3luY19maW5pc2hlZDsK
Kwlwcml2LT5maW5pc2hlZF9jYiA9IHNlbmRfc3luY19maW5pc2hlZDsKKworCXJlc3VsdCA9IHdl
YmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfaW50ZXJuYWwgKGlzdHJlYW0sIGNhbmNl
bGxhYmxlLCBlcnJvcik7CisJZ19pbnB1dF9zdHJlYW1fY2xlYXJfcGVuZGluZyAoaXN0cmVhbSk7
CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgZ3NzaXplCit3ZWJraXRfc291cF9odHRw
X2lucHV0X3N0cmVhbV9yZWFkIChHSW5wdXRTdHJlYW0gKnN0cmVhbSwKKwkJCQkgICAgdm9pZCAg
ICAgICAgICpidWZmZXIsCisJCQkJICAgIGdzaXplIGNvdW50LAorCQkJCSAgICBHQ2FuY2VsbGFi
bGUgKmNhbmNlbGxhYmxlLAorCQkJCSAgICBHRXJyb3IgICAgICAqKmVycm9yKQoreworCVdlYktp
dFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBV
VF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7CisKKwlpZiAocHJpdi0+ZmluaXNoZWQpCisJ
CXJldHVybiAwOworCisJLyogSWYgdGhlcmUgaXMgZGF0YSBsZWZ0b3ZlciBmcm9tIGEgcHJldmlv
dXMgcmVhZCwgcmV0dXJuIGl0LiAqLworCWlmIChwcml2LT5sZWZ0b3Zlcl9idWZzaXplKQorCQly
ZXR1cm4gcmVhZF9mcm9tX2xlZnRvdmVyIChwcml2LCBidWZmZXIsIGNvdW50KTsKKworCS8qIE5v
IGxlZnRvdmVyIGRhdGEsIGFjY2VwdCBvbmUgY2h1bmsgZnJvbSB0aGUgbmV0d29yayAqLworCXdl
YmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3ByZXBhcmVfZm9yX2lvIChzdHJlYW0sIGNhbmNl
bGxhYmxlLCBidWZmZXIsIGNvdW50KTsKKwl3aGlsZSAoIXByaXYtPmZpbmlzaGVkICYmIHByaXYt
PmNhbGxlcl9ucmVhZCA9PSAwICYmCisJICAgICAgICFnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxl
ZCAoY2FuY2VsbGFibGUpKQorCQlnX21haW5fY29udGV4dF9pdGVyYXRpb24gKHByaXYtPmFzeW5j
X2NvbnRleHQsIFRSVUUpOworCXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2RvbmVfaW8g
KHN0cmVhbSk7CisKKwlpZiAocHJpdi0+Y2FsbGVyX25yZWFkID4gMCkKKwkJcmV0dXJuIHByaXYt
PmNhbGxlcl9ucmVhZDsKKworCWlmIChnX2NhbmNlbGxhYmxlX3NldF9lcnJvcl9pZl9jYW5jZWxs
ZWQgKGNhbmNlbGxhYmxlLCBlcnJvcikpCisJCXJldHVybiAtMTsKKwllbHNlIGlmIChzZXRfZXJy
b3JfaWZfaHR0cF9mYWlsZWQgKHByaXYtPm1zZywgZXJyb3IpKQorCQlyZXR1cm4gLTE7CisJZWxz
ZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGljIGdib29sZWFuCit3ZWJraXRfc291cF9odHRwX2lu
cHV0X3N0cmVhbV9jbG9zZSAoR0lucHV0U3RyZWFtICpzdHJlYW0sCisJCQkJICAgICBHQ2FuY2Vs
bGFibGUgKmNhbmNlbGxhYmxlLAorCQkJCSAgICAgR0Vycm9yICAgICAgKiplcnJvcikKK3sKKwlX
ZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBf
SU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOworCisJaWYgKCFwcml2LT5maW5pc2hl
ZCkKKwkJc291cF9zZXNzaW9uX2NhbmNlbF9tZXNzYWdlIChwcml2LT5zZXNzaW9uLCBwcml2LT5t
c2csIFNPVVBfU1RBVFVTX0NBTkNFTExFRCk7CisKKwlyZXR1cm4gVFJVRTsKK30KKworc3RhdGlj
IHZvaWQKK3dyYXBwZXJfY2FsbGJhY2sgKEdPYmplY3QgKnNvdXJjZV9vYmplY3QsIEdBc3luY1Jl
c3VsdCAqcmVzLAorCQkgIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlHSW5wdXRTdHJlYW0gKnN0
cmVhbSA9IEdfSU5QVVRfU1RSRUFNIChzb3VyY2Vfb2JqZWN0KTsKKwlXZWJLaXRTb3VwSFRUUElu
cHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dF
VF9QUklWQVRFIChzdHJlYW0pOworCisJZ19pbnB1dF9zdHJlYW1fY2xlYXJfcGVuZGluZyAoc3Ry
ZWFtKTsKKwlpZiAocHJpdi0+b3V0c3RhbmRpbmdfY2FsbGJhY2spCisJCSgqcHJpdi0+b3V0c3Rh
bmRpbmdfY2FsbGJhY2spKHNvdXJjZV9vYmplY3QsIHJlcywgdXNlcl9kYXRhKTsKKwlwcml2LT5v
dXRzdGFuZGluZ19jYWxsYmFjayA9IE5VTEw7CisJZ19vYmplY3RfdW5yZWYgKHN0cmVhbSk7Cit9
CisKK3N0YXRpYyB2b2lkCitzZW5kX2FzeW5jX3RocmVhZCAoR1NpbXBsZUFzeW5jUmVzdWx0ICpy
ZXMsCisJCSAgIEdPYmplY3QgKm9iamVjdCwKKwkJICAgR0NhbmNlbGxhYmxlICpjYW5jZWxsYWJs
ZSkKK3sKKwlHRXJyb3IgKmVycm9yID0gTlVMTDsKKwlnYm9vbGVhbiBzdWNjZXNzOworCisJc3Vj
Y2VzcyA9IHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfaW50ZXJuYWwgKEdfSU5Q
VVRfU1RSRUFNIChvYmplY3QpLAorCQkJCQkJCWNhbmNlbGxhYmxlLCAmZXJyb3IpOworCWdfc2lt
cGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dib29sZWFuIChyZXMsIHN1Y2Nlc3MpOworCWlm
IChlcnJvcikgeworCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X2Zyb21fZXJyb3IgKHJlcywg
ZXJyb3IpOworCQlnX2Vycm9yX2ZyZWUgKGVycm9yKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCit3
ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jX2luX3RocmVhZCAoR0lucHV0
U3RyZWFtICAgICAgICAqc3RyZWFtLAorCQkJCQkJICAgIGludCBpb19wcmlvcml0eSwKKwkJCQkJ
CSAgICBHQ2FuY2VsbGFibGUgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkJCSAgICBHQXN5bmNS
ZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAorCQkJCQkJICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sK
KwlHU2ltcGxlQXN5bmNSZXN1bHQgKnJlczsKKworCXJlcyA9IGdfc2ltcGxlX2FzeW5jX3Jlc3Vs
dF9uZXcgKEdfT0JKRUNUIChzdHJlYW0pLCBjYWxsYmFjaywgdXNlcl9kYXRhLAorCQkJCQkgd2Vi
a2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luY19pbl90aHJlYWQpOworCWdfc2lt
cGxlX2FzeW5jX3Jlc3VsdF9ydW5faW5fdGhyZWFkIChyZXMsIHNlbmRfYXN5bmNfdGhyZWFkLAor
CQkJCQkgICAgIGlvX3ByaW9yaXR5LCBjYW5jZWxsYWJsZSk7CisJZ19vYmplY3RfdW5yZWYgKHJl
cyk7Cit9CisKK3N0YXRpYyB2b2lkCitzZW5kX2FzeW5jX2ZpbmlzaGVkIChHSW5wdXRTdHJlYW0g
KnN0cmVhbSkKK3sKKwlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFdF
QktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOworCUdTaW1w
bGVBc3luY1Jlc3VsdCAqcmVzdWx0OworCUdFcnJvciAqZXJyb3IgPSBOVUxMOworCisJaWYgKCFn
X2NhbmNlbGxhYmxlX3NldF9lcnJvcl9pZl9jYW5jZWxsZWQgKHByaXYtPmNhbmNlbGxhYmxlLCAm
ZXJyb3IpKQorCQlzZXRfZXJyb3JfaWZfaHR0cF9mYWlsZWQgKHByaXYtPm1zZywgJmVycm9yKTsK
KworCXByaXYtPmdvdF9oZWFkZXJzX2NiID0gTlVMTDsKKwlwcml2LT5maW5pc2hlZF9jYiA9IE5V
TEw7CisJd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZG9uZV9pbyAoc3RyZWFtKTsKKwor
CXJlc3VsdCA9IHByaXYtPnJlc3VsdDsKKwlwcml2LT5yZXN1bHQgPSBOVUxMOworCisJZ19zaW1w
bGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ2Jvb2xlYW4gKHJlc3VsdCwgZXJyb3IgPT0gTlVM
TCk7CisJaWYgKGVycm9yKSB7CisJCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfZnJvbV9lcnJv
ciAocmVzdWx0LCBlcnJvcik7CisJCWdfZXJyb3JfZnJlZSAoZXJyb3IpOworCX0KKwlnX3NpbXBs
ZV9hc3luY19yZXN1bHRfY29tcGxldGUgKHJlc3VsdCk7Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJr
aXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jX2ludGVybmFsIChHSW5wdXRTdHJl
YW0gICAgICAgICpzdHJlYW0sCisJCQkJCQkgICBpbnQgaW9fcHJpb3JpdHksCisJCQkJCQkgICBH
Q2FuY2VsbGFibGUgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkJCSAgIEdBc3luY1JlYWR5Q2Fs
bGJhY2sgY2FsbGJhY2ssCisJCQkJCQkgICBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJV2ViS2l0
U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVU
X1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKworCWdfb2JqZWN0X3JlZiAoc3RyZWFtKTsK
Kwlwcml2LT5vdXRzdGFuZGluZ19jYWxsYmFjayA9IGNhbGxiYWNrOworCisJLyogSWYgdGhlIHNl
c3Npb24gdXNlcyB0aGUgZGVmYXVsdCBHTWFpbkNvbnRleHQsIHRoZW4gd2UgY2FuIGRvCisJICog
YXN5bmMgSS9PIGRpcmVjdGx5LiBCdXQgaWYgaXQgaGFzIGl0cyBvd24gbWFpbiBjb250ZXh0LCBp
dCdzCisJICogZWFzaWVyIHRvIGp1c3QgcnVuIGl0IGluIGFub3RoZXIgdGhyZWFkLgorCSAqLwor
CWlmIChzb3VwX3Nlc3Npb25fZ2V0X2FzeW5jX2NvbnRleHQgKHByaXYtPnNlc3Npb24pKSB7CisJ
CXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmNfaW5fdGhyZWFkIChzdHJl
YW0sIGlvX3ByaW9yaXR5LCBjYW5jZWxsYWJsZSwKKwkJCQkJCQkgICAgIHdyYXBwZXJfY2FsbGJh
Y2ssIHVzZXJfZGF0YSk7CisJCXJldHVybjsKKwl9CisKKwlwcml2LT5nb3RfaGVhZGVyc19jYiA9
IHNlbmRfYXN5bmNfZmluaXNoZWQ7CisJcHJpdi0+ZmluaXNoZWRfY2IgPSBzZW5kX2FzeW5jX2Zp
bmlzaGVkOworCisJd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcHJlcGFyZV9mb3JfaW8g
KHN0cmVhbSwgY2FuY2VsbGFibGUsIE5VTEwsIDApOworCXByaXYtPnJlc3VsdCA9IGdfc2ltcGxl
X2FzeW5jX3Jlc3VsdF9uZXcgKEdfT0JKRUNUIChzdHJlYW0pLAorCQkJCQkJICB3cmFwcGVyX2Nh
bGxiYWNrLCB1c2VyX2RhdGEsCisJCQkJCQkgIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFt
X3NlbmRfYXN5bmMpOworfQorCisvKioKKyAqIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFt
X3NlbmRfYXN5bmM6CisgKiBAaHR0cHN0cmVhbTogYSAjV2ViS2l0U291cEhUVFBJbnB1dFN0cmVh
bQorICogQGlvX3ByaW9yaXR5OiB0aGUgaW8gcHJpb3JpdHkgb2YgdGhlIHJlcXVlc3QuCisgKiBA
Y2FuY2VsbGFibGU6IG9wdGlvbmFsICNHQ2FuY2VsbGFibGUgb2JqZWN0LCAlTlVMTCB0byBpZ25v
cmUuCisgKiBAY2FsbGJhY2s6IGNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgcmVxdWVzdCBpcyBz
YXRpc2ZpZWQKKyAqIEB1c2VyX2RhdGE6IHRoZSBkYXRhIHRvIHBhc3MgdG8gY2FsbGJhY2sgZnVu
Y3Rpb24KKyAqCisgKiBBc3luY2hyb25vdXNseSBzZW5kcyB0aGUgSFRUUCByZXF1ZXN0IGFzc29j
aWF0ZWQgd2l0aCBAc3RyZWFtLCBhbmQKKyAqIHJlYWRzIHRoZSByZXNwb25zZSBoZWFkZXJzLiBD
YWxsIHRoaXMgYWZ0ZXIgd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fbmV3KCkKKyAqIGFu
ZCBiZWZvcmUgdGhlIGZpcnN0IGdfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMoKSBpZiB5b3Ugd2Fu
dCB0bworICogY2hlY2sgdGhlIEhUVFAgc3RhdHVzIGNvZGUgYmVmb3JlIHlvdSBzdGFydCByZWFk
aW5nLgorICoqLwordm9pZAord2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3lu
YyAoV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSAqaHR0cHN0cmVhbSwKKwkJCQkJICBpbnQgaW9f
cHJpb3JpdHksCisJCQkJCSAgR0NhbmNlbGxhYmxlICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJ
CSAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKKwkJCQkJICBncG9pbnRlciB1c2VyX2Rh
dGEpCit7CisJR0lucHV0U3RyZWFtICppc3RyZWFtID0gKEdJbnB1dFN0cmVhbSAqKWh0dHBzdHJl
YW07CisJR0Vycm9yICplcnJvciA9IE5VTEw7CisKKwlnX3JldHVybl9pZl9mYWlsIChTT1VQX0lT
X0hUVFBfSU5QVVRfU1RSRUFNIChodHRwc3RyZWFtKSk7CisKKwlpZiAoIWdfaW5wdXRfc3RyZWFt
X3NldF9wZW5kaW5nIChpc3RyZWFtLCAmZXJyb3IpKSB7CisJCWdfc2ltcGxlX2FzeW5jX3JlcG9y
dF9nZXJyb3JfaW5faWRsZSAoR19PQkpFQ1QgKGh0dHBzdHJlYW0pLAorCQkJCQkJICAgICAgY2Fs
bGJhY2ssCisJCQkJCQkgICAgICB1c2VyX2RhdGEsCisJCQkJCQkgICAgICBlcnJvcik7CisJCWdf
ZXJyb3JfZnJlZSAoZXJyb3IpOworCQlyZXR1cm47CisJfQorCXdlYmtpdF9zb3VwX2h0dHBfaW5w
dXRfc3RyZWFtX3NlbmRfYXN5bmNfaW50ZXJuYWwgKGlzdHJlYW0sIGlvX3ByaW9yaXR5LCBjYW5j
ZWxsYWJsZSwKKwkJCQkJCSAgICBjYWxsYmFjaywgdXNlcl9kYXRhKTsKK30KKworLyoqCisgKiB3
ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2ZpbmlzaDoKKyAqIEBodHRwc3RyZWFt
OiBhICNXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtCisgKiBAcmVzdWx0OiBhICNHQXN5bmNSZXN1
bHQuCisgKiBAZXJyb3I6IGEgI0dFcnJvciBsb2NhdGlvbiB0byBzdG9yZSB0aGUgZXJyb3Igb2Nj
dXJpbmcsIG9yICVOVUxMIHRvCisgKiBpZ25vcmUuCisgKgorICogRmluaXNoZXMgYSB3ZWJraXRf
c291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jKCkgb3BlcmF0aW9uLgorICoKKyAqIFJl
dHVybiB2YWx1ZTogJVRSVUUgaWYgdGhlIG1lc3NhZ2Ugd2FzIHNlbnQgc3VjY2Vzc2Z1bGx5IGFu
ZAorICogcmVjZWl2ZWQgYSBzdWNjZXNzZnVsIHN0YXR1cyBjb2RlLCAlRkFMU0UgaWYgbm90Lgor
ICoqLworZ2Jvb2xlYW4KK3dlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfZmluaXNo
IChXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtICAqaHR0cHN0cmVhbSwKKwkJCQkJICAgR0FzeW5j
UmVzdWx0ICAgICAgICAgKnJlc3VsdCwKKwkJCQkJICAgR0Vycm9yICAgICAgICAgICAgICAqKmVy
cm9yKQoreworCUdTaW1wbGVBc3luY1Jlc3VsdCAqc2ltcGxlOworCisJZ19yZXR1cm5fdmFsX2lm
X2ZhaWwgKEdfSVNfU0lNUExFX0FTWU5DX1JFU1VMVCAocmVzdWx0KSwgRkFMU0UpOworCXNpbXBs
ZSA9IEdfU0lNUExFX0FTWU5DX1JFU1VMVCAocmVzdWx0KTsKKworCWdfcmV0dXJuX3ZhbF9pZl9m
YWlsIChnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X3NvdXJjZV90YWcgKHNpbXBsZSkgPT0gd2Vi
a2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luYywgRkFMU0UpOworCisJaWYgKGdf
c2ltcGxlX2FzeW5jX3Jlc3VsdF9wcm9wYWdhdGVfZXJyb3IgKHNpbXBsZSwgZXJyb3IpKQorCQly
ZXR1cm4gRkFMU0U7CisKKwlyZXR1cm4gZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9vcF9yZXNf
Z2Jvb2xlYW4gKHNpbXBsZSk7Cit9CisKK3N0YXRpYyB2b2lkCityZWFkX2FzeW5jX2RvbmUgKEdJ
bnB1dFN0cmVhbSAqc3RyZWFtKQoreworCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRl
ICpwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVh
bSk7CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpyZXN1bHQ7CisJR0Vycm9yICplcnJvciA9IE5VTEw7
CisKKwlyZXN1bHQgPSBwcml2LT5yZXN1bHQ7CisJcHJpdi0+cmVzdWx0ID0gTlVMTDsKKworCWlm
IChnX2NhbmNlbGxhYmxlX3NldF9lcnJvcl9pZl9jYW5jZWxsZWQgKHByaXYtPmNhbmNlbGxhYmxl
LCAmZXJyb3IpIHx8CisJICAgIHNldF9lcnJvcl9pZl9odHRwX2ZhaWxlZCAocHJpdi0+bXNnLCAm
ZXJyb3IpKSB7CisJCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfZnJvbV9lcnJvciAocmVzdWx0
LCBlcnJvcik7CisJCWdfZXJyb3JfZnJlZSAoZXJyb3IpOworCX0gZWxzZQorCQlnX3NpbXBsZV9h
c3luY19yZXN1bHRfc2V0X29wX3Jlc19nc3NpemUgKHJlc3VsdCwgcHJpdi0+Y2FsbGVyX25yZWFk
KTsKKworCXByaXYtPmdvdF9jaHVua19jYiA9IE5VTEw7CisJcHJpdi0+ZmluaXNoZWRfY2IgPSBO
VUxMOworCXByaXYtPmNhbmNlbGxlZF9jYiA9IE5VTEw7CisJd2Via2l0X3NvdXBfaHR0cF9pbnB1
dF9zdHJlYW1fZG9uZV9pbyAoc3RyZWFtKTsKKworCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21w
bGV0ZSAocmVzdWx0KTsKKwlnX29iamVjdF91bnJlZiAocmVzdWx0KTsKK30KKworc3RhdGljIHZv
aWQKK3dlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMgKEdJbnB1dFN0cmVh
bSAgICAgICAgKnN0cmVhbSwKKwkJCQkJICB2b2lkICAgICAgICAgICAgICAgICpidWZmZXIsCisJ
CQkJCSAgZ3NpemUgY291bnQsCisJCQkJCSAgaW50IGlvX3ByaW9yaXR5LAorCQkJCQkgIEdDYW5j
ZWxsYWJsZSAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJCQkgIEdBc3luY1JlYWR5Q2FsbGJhY2sg
Y2FsbGJhY2ssCisJCQkJCSAgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCVdlYktpdFNvdXBIVFRQ
SW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1f
R0VUX1BSSVZBVEUgKHN0cmVhbSk7CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpyZXN1bHQ7CisKKwkv
KiBJZiB0aGUgc2Vzc2lvbiB1c2VzIHRoZSBkZWZhdWx0IEdNYWluQ29udGV4dCwgdGhlbiB3ZSBj
YW4gZG8KKwkgKiBhc3luYyBJL08gZGlyZWN0bHkuIEJ1dCBpZiBpdCBoYXMgaXRzIG93biBtYWlu
IGNvbnRleHQsIHdlIGZhbGwKKwkgKiBiYWNrIHRvIHRoZSBhc3luYy12aWEtc3luYy1pbi1hbm90
aGVyLXRocmVhZCBpbXBsZW1lbnRhdGlvbi4KKwkgKi8KKwlpZiAoc291cF9zZXNzaW9uX2dldF9h
c3luY19jb250ZXh0IChwcml2LT5zZXNzaW9uKSkgeworCQlHX0lOUFVUX1NUUkVBTV9DTEFTUyAo
d2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcGFyZW50X2NsYXNzKS0+CisJCXJlYWRfYXN5
bmMgKHN0cmVhbSwgYnVmZmVyLCBjb3VudCwgaW9fcHJpb3JpdHksCisJCQkgICAgY2FuY2VsbGFi
bGUsIGNhbGxiYWNrLCB1c2VyX2RhdGEpOworCQlyZXR1cm47CisJfQorCisJcmVzdWx0ID0gZ19z
aW1wbGVfYXN5bmNfcmVzdWx0X25ldyAoR19PQkpFQ1QgKHN0cmVhbSksCisJCQkJCSAgICBjYWxs
YmFjaywgdXNlcl9kYXRhLAorCQkJCQkgICAgd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1f
cmVhZF9hc3luYyk7CisKKwlpZiAocHJpdi0+ZmluaXNoZWQpIHsKKwkJZ19zaW1wbGVfYXN5bmNf
cmVzdWx0X3NldF9vcF9yZXNfZ3NzaXplIChyZXN1bHQsIDApOworCQlnX3NpbXBsZV9hc3luY19y
ZXN1bHRfY29tcGxldGVfaW5faWRsZSAocmVzdWx0KTsKKwkJZ19vYmplY3RfdW5yZWYgKHJlc3Vs
dCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAocHJpdi0+bGVmdG92ZXJfYnVmc2l6ZSkgeworCQln
c2l6ZSBucmVhZCA9IHJlYWRfZnJvbV9sZWZ0b3ZlciAocHJpdiwgYnVmZmVyLCBjb3VudCk7CisJ
CWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dzc2l6ZSAocmVzdWx0LCBucmVhZCk7
CisJCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZV9pbl9pZGxlIChyZXN1bHQpOworCQln
X29iamVjdF91bnJlZiAocmVzdWx0KTsKKwkJcmV0dXJuOworCX0KKworCXByaXYtPnJlc3VsdCA9
IHJlc3VsdDsKKworCXByaXYtPmdvdF9jaHVua19jYiA9IHJlYWRfYXN5bmNfZG9uZTsKKwlwcml2
LT5maW5pc2hlZF9jYiA9IHJlYWRfYXN5bmNfZG9uZTsKKwlwcml2LT5jYW5jZWxsZWRfY2IgPSBy
ZWFkX2FzeW5jX2RvbmU7CisJd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcHJlcGFyZV9m
b3JfaW8gKHN0cmVhbSwgY2FuY2VsbGFibGUsIGJ1ZmZlciwgY291bnQpOworfQorCitzdGF0aWMg
Z3NzaXplCit3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9yZWFkX2ZpbmlzaCAoR0lucHV0
U3RyZWFtICAqc3RyZWFtLAorCQkJCQkgICBHQXN5bmNSZXN1bHQgICpyZXN1bHQsCisJCQkJCSAg
IEdFcnJvciAgICAgICAqKmVycm9yKQoreworCUdTaW1wbGVBc3luY1Jlc3VsdCAqc2ltcGxlOwor
CisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfSVNfU0lNUExFX0FTWU5DX1JFU1VMVCAocmVzdWx0
KSwgLTEpOworCXNpbXBsZSA9IEdfU0lNUExFX0FTWU5DX1JFU1VMVCAocmVzdWx0KTsKKwlnX3Jl
dHVybl92YWxfaWZfZmFpbCAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9zb3VyY2VfdGFnIChz
aW1wbGUpID09IHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMsIC0xKTsK
KworCXJldHVybiBnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X29wX3Jlc19nc3NpemUgKHNpbXBs
ZSk7Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9jbG9z
ZV9hc3luYyAoR0lucHV0U3RyZWFtICAgICAgICpzdHJlYW0sCisJCQkJCSAgIGludCBpb19wcmlv
cml0eSwKKwkJCQkJICAgR0NhbmNlbGxhYmxlICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkJICAg
R0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKKwkJCQkJICAgZ3BvaW50ZXIgdXNlcl9kYXRh
KQoreworCUdTaW1wbGVBc3luY1Jlc3VsdCAqcmVzdWx0OworCWdib29sZWFuIHN1Y2Nlc3M7CisJ
R0Vycm9yICplcnJvciA9IE5VTEw7CisKKwlyZXN1bHQgPSBnX3NpbXBsZV9hc3luY19yZXN1bHRf
bmV3IChHX09CSkVDVCAoc3RyZWFtKSwKKwkJCQkJICAgIGNhbGxiYWNrLCB1c2VyX2RhdGEsCisJ
CQkJCSAgICB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9jbG9zZV9hc3luYyk7CisJc3Vj
Y2VzcyA9IHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlIChzdHJlYW0sIGNhbmNl
bGxhYmxlLCAmZXJyb3IpOworCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dib29s
ZWFuIChyZXN1bHQsIHN1Y2Nlc3MpOworCWlmIChlcnJvcikgeworCQlnX3NpbXBsZV9hc3luY19y
ZXN1bHRfc2V0X2Zyb21fZXJyb3IgKHJlc3VsdCwgZXJyb3IpOworCQlnX2Vycm9yX2ZyZWUgKGVy
cm9yKTsKKwl9CisKKwlnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGVfaW5faWRsZSAocmVz
dWx0KTsKKwlnX29iamVjdF91bnJlZiAocmVzdWx0KTsKK30KKworc3RhdGljIGdib29sZWFuCit3
ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9jbG9zZV9maW5pc2ggKEdJbnB1dFN0cmVhbSAg
KnN0cmVhbSwKKwkJCQkJICAgIEdBc3luY1Jlc3VsdCAgKnJlc3VsdCwKKwkJCQkJICAgIEdFcnJv
ciAgICAgICAqKmVycm9yKQoreworCS8qIEZhaWx1cmVzIGhhbmRsZWQgaW4gZ2VuZXJpYyBjbG9z
ZV9maW5pc2ggY29kZSAqLworCXJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ29mZnNldAord2Vi
a2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fdGVsbCAoR1NlZWthYmxlICpzZWVrYWJsZSkKK3sK
KwlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0hU
VFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzZWVrYWJsZSk7CisKKwlyZXR1cm4gcHJpdi0+
b2Zmc2V0OworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3dlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3Ry
ZWFtX2Nhbl9zZWVrIChHU2Vla2FibGUgKnNlZWthYmxlKQoreworCXJldHVybiBUUlVFOworfQor
CitleHRlcm4gdm9pZCBzb3VwX21lc3NhZ2VfaW9fY2xlYW51cCAoU291cE1lc3NhZ2UgKm1zZyk7
CisKK3N0YXRpYyBnYm9vbGVhbgord2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VlayAo
R1NlZWthYmxlICAgICAqc2Vla2FibGUsCisJCQkJICAgIGdvZmZzZXQgb2Zmc2V0LAorCQkJCSAg
ICBHU2Vla1R5cGUgdHlwZSwKKwkJCQkgICAgR0NhbmNlbGxhYmxlICAqY2FuY2VsbGFibGUsCisJ
CQkJICAgIEdFcnJvciAgICAgICAqKmVycm9yKQoreworCUdJbnB1dFN0cmVhbSAqc3RyZWFtID0g
R19JTlBVVF9TVFJFQU0gKHNlZWthYmxlKTsKKwlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJp
dmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChz
ZWVrYWJsZSk7CisJY2hhciAqcmFuZ2U7CisKKwlpZiAodHlwZSA9PSBHX1NFRUtfRU5EKSB7CisJ
CS8qIEZJWE1FOiB3ZSBjb3VsZCBzZW5kICJieXRlcz0tb2Zmc2V0IiwgYnV0IHVubGVzcyB3ZQor
CQkgKiBrbm93IHRoZSBDb250ZW50LUxlbmd0aCwgd2Ugd291bGRuJ3QgYmUgYWJsZSB0bworCQkg
KiBhbnN3ZXIgYSB0ZWxsKCkgcHJvcGVybHkuIFdlIGNvdWxkIGZpbmQgdGhlCisJCSAqIENvbnRl
bnQtTGVuZ3RoIGJ5IGRvaW5nIGEgSEVBRC4uLgorCQkgKi8KKworCQlnX3NldF9lcnJvcl9saXRl
cmFsIChlcnJvciwgR19JT19FUlJPUiwgR19JT19FUlJPUl9OT1RfU1VQUE9SVEVELAorCQkJCSAg
ICAgIkdfU0VFS19FTkQgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQiKTsKKwkJcmV0dXJuIEZBTFNF
OworCX0KKworCWlmICghZ19pbnB1dF9zdHJlYW1fc2V0X3BlbmRpbmcgKHN0cmVhbSwgZXJyb3Ip
KQorCQlyZXR1cm4gRkFMU0U7CisKKwlzb3VwX3Nlc3Npb25fY2FuY2VsX21lc3NhZ2UgKHByaXYt
PnNlc3Npb24sIHByaXYtPm1zZywgU09VUF9TVEFUVVNfQ0FOQ0VMTEVEKTsKKwlzb3VwX21lc3Nh
Z2VfaW9fY2xlYW51cCAocHJpdi0+bXNnKTsKKworCXN3aXRjaCAodHlwZSkgeworCQljYXNlIEdf
U0VFS19DVVI6CisJCQlvZmZzZXQgKz0gcHJpdi0+b2Zmc2V0OworCQkvKiBmYWxsIHRocm91Z2gg
Ki8KKworCQljYXNlIEdfU0VFS19TRVQ6CisJCQlyYW5nZSA9IGdfc3RyZHVwX3ByaW50ZiAoImJ5
dGVzPSUiIEdfR1VJTlQ2NF9GT1JNQVQgIi0iLCAoZ3VpbnQ2NClvZmZzZXQpOworCQkJcHJpdi0+
b2Zmc2V0ID0gb2Zmc2V0OworCQkJYnJlYWs7CisKKwkJY2FzZSBHX1NFRUtfRU5EOgorCQkJcmFu
Z2UgPSBOVUxMOyAvKiBrZWVwIGNvbXBpbGVycyBoYXBweSAqLworCQkJZ19yZXR1cm5fdmFsX2lm
X3JlYWNoZWQgKEZBTFNFKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlnX3JldHVybl92
YWxfaWZfcmVhY2hlZCAoRkFMU0UpOworCX0KKworCXNvdXBfbWVzc2FnZV9oZWFkZXJzX3JlbW92
ZSAocHJpdi0+bXNnLT5yZXF1ZXN0X2hlYWRlcnMsICJSYW5nZSIpOworCXNvdXBfbWVzc2FnZV9o
ZWFkZXJzX2FwcGVuZCAocHJpdi0+bXNnLT5yZXF1ZXN0X2hlYWRlcnMsICJSYW5nZSIsIHJhbmdl
KTsKKwlnX2ZyZWUgKHJhbmdlKTsKKworCXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3F1
ZXVlX21lc3NhZ2UgKFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNIChzdHJlYW0pKTsKKwor
CWdfaW5wdXRfc3RyZWFtX2NsZWFyX3BlbmRpbmcgKHN0cmVhbSk7CisJcmV0dXJuIFRSVUU7Cit9
CisKK3N0YXRpYyBnYm9vbGVhbgord2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2FuX3Ry
dW5jYXRlIChHU2Vla2FibGUgKnNlZWthYmxlKQoreworCXJldHVybiBGQUxTRTsKK30KKworc3Rh
dGljIGdib29sZWFuCit3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV90cnVuY2F0ZSAoR1Nl
ZWthYmxlICAgICAqc2Vla2FibGUsCisJCQkJCWdvZmZzZXQgb2Zmc2V0LAorCQkJCQlHQ2FuY2Vs
bGFibGUgICpjYW5jZWxsYWJsZSwKKwkJCQkJR0Vycm9yICAgICAgICoqZXJyb3IpCit7CisJZ19z
ZXRfZXJyb3JfbGl0ZXJhbCAoZXJyb3IsIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfTk9UX1NVUFBP
UlRFRCwKKwkJCSAgICAgIlRydW5jYXRlIG5vdCBhbGxvd2VkIG9uIGlucHV0IHN0cmVhbSIpOwor
CXJldHVybiBGQUxTRTsKK30KKworU291cE1lc3NhZ2UgKgord2Via2l0X3NvdXBfaHR0cF9pbnB1
dF9zdHJlYW1fZ2V0X21lc3NhZ2UgKFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gKmh0dHBzdHJl
YW0pCit7CisJV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBXRUJLSVRf
U09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoaHR0cHN0cmVhbSk7CisJcmV0dXJu
IHByaXYtPm1zZyA/IGdfb2JqZWN0X3JlZiAocHJpdi0+bXNnKSA6IE5VTEw7Cit9CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQt
c3RyZWFtLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAt
aW5wdXQtc3RyZWFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM1ZWFj
YwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0uaApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA3LCAyMDA5IFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykg
MjAxMCBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwK
KyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpZm5kZWYgX19XRUJLSVRf
U09VUF9IVFRQX0lOUFVUX1NUUkVBTV9IX18KKyNkZWZpbmUgX19XRUJLSVRfU09VUF9IVFRQX0lO
UFVUX1NUUkVBTV9IX18KKworI2luY2x1ZGUgPGdpby9naW8uaD4KKyNpbmNsdWRlIDxsaWJzb3Vw
L3NvdXAtdHlwZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFNPVVBfVFlQRV9IVFRQ
X0lOUFVUX1NUUkVBTSAgICAgICAgICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9nZXRf
dHlwZSAoKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU0obykgICAgICAg
ICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG8pLCBTT1VQX1RZUEVfSFRUUF9JTlBV
VF9TVFJFQU0sIFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0pKQorI2RlZmluZSBXRUJLSVRfU09V
UF9IVFRQX0lOUFVUX1NUUkVBTV9DTEFTUyhrKSAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNU
ICgoayksIFNPVVBfVFlQRV9IVFRQX0lOUFVUX1NUUkVBTSwgV2ViS2l0U291cEhUVFBJbnB1dFN0
cmVhbUNsYXNzKSkKKyNkZWZpbmUgU09VUF9JU19IVFRQX0lOUFVUX1NUUkVBTShvKSAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgobyksIFNPVVBfVFlQRV9IVFRQX0lOUFVUX1NU
UkVBTSkpCisjZGVmaW5lIFNPVVBfSVNfSFRUUF9JTlBVVF9TVFJFQU1fQ0xBU1MoaykgIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGspLCBTT1VQX1RZUEVfSFRUUF9JTlBVVF9TVFJFQU0pKQor
I2RlZmluZSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfQ0xBU1MobykgKEdfVFlQ
RV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvKSwgU09VUF9UWVBFX0hUVFBfSU5QVVRfU1RSRUFNLCBX
ZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBXZWJLaXRT
b3VwSFRUUElucHV0U3RyZWFtIFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW07Cit0eXBlZGVmIHN0
cnVjdCBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtQ2xhc3MgV2ViS2l0U291cEhUVFBJbnB1dFN0
cmVhbUNsYXNzOworCitzdHJ1Y3QgV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSB7CisJR0lucHV0
U3RyZWFtIHBhcmVudDsKK307CisKK3N0cnVjdCBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtQ2xh
c3MgeworCUdJbnB1dFN0cmVhbUNsYXNzIHBhcmVudF9jbGFzczsKKworCS8qIFBhZGRpbmcgZm9y
IGZ1dHVyZSBleHBhbnNpb24gKi8KKwl2b2lkICgqX2dfcmVzZXJ2ZWQxKSh2b2lkKTsKKwl2b2lk
ICgqX2dfcmVzZXJ2ZWQyKSh2b2lkKTsKKwl2b2lkICgqX2dfcmVzZXJ2ZWQzKSh2b2lkKTsKKwl2
b2lkICgqX2dfcmVzZXJ2ZWQ0KSh2b2lkKTsKKwl2b2lkICgqX2dfcmVzZXJ2ZWQ1KSh2b2lkKTsK
K307CisKK0dUeXBlIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dldF90eXBlICh2b2lk
KSBHX0dOVUNfQ09OU1Q7CisKK1dlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gKndlYmtpdF9zb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX25ldyAoU291cFNlc3Npb24gICAgICAgICAqc2Vzc2lvbiwKKwkJ
CQkJCQkgICAgICBTb3VwTWVzc2FnZSAgICAgICAgICptc2cpOworCitnYm9vbGVhbiAgICAgICAg
ICAgICB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kIChXZWJLaXRTb3VwSFRUUElu
cHV0U3RyZWFtICpodHRwc3RyZWFtLAorCQkJCQkJCSBHQ2FuY2VsbGFibGUgICAgICAgICpjYW5j
ZWxsYWJsZSwKKwkJCQkJCQkgR0Vycm9yICAgICAgICAgICAgICoqZXJyb3IpOworCit2b2lkICAg
ICAgICAgICAgICAgICB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jIChX
ZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtICpodHRwc3RyZWFtLAorCQkJCQkJCSAgICAgICBpbnQg
aW9fcHJpb3JpdHksCisJCQkJCQkJICAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgKmNhbmNlbGxh
YmxlLAorCQkJCQkJCSAgICAgICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAorCQkJCQkJ
CSAgICAgICBncG9pbnRlciB1c2VyX2RhdGEpOworZ2Jvb2xlYW4gICAgICAgICAgICAgd2Via2l0
X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9maW5pc2ggKFdlYktpdFNvdXBIVFRQSW5wdXRT
dHJlYW0gKmh0dHBzdHJlYW0sCisJCQkJCQkJCUdBc3luY1Jlc3VsdCAgICAgICAgKnJlc3VsdCwK
KwkJCQkJCQkJR0Vycm9yICAgICAgICAgICAgICoqZXJyb3IpOworCitTb3VwTWVzc2FnZSAgICAg
ICAgICp3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9nZXRfbWVzc2FnZSAoV2ViS2l0U291
cEhUVFBJbnB1dFN0cmVhbSAqaHR0cHN0cmVhbSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAv
KiBfX1dFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWRhdGEuYyBiL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FmYzk5NgotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRh
LmMKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBzb3VwLXJlcXVlc3QtZGF0YS5jOiBkYXRhOiBV
UkkgcmVxdWVzdCBvYmplY3QKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwgSW5j
LgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdf
SAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisjaW5jbHVkZSAic291cC1yZXF1ZXN0LWRh
dGEuaCIKKworI2luY2x1ZGUgInNvdXAtcmVxdWVzdGVyLmgiCisjaW5jbHVkZSA8bGlic291cC9z
b3VwLmg+CisjaW5jbHVkZSA8Z2xpYi9naTE4bi5oPgorCitHX0RFRklORV9UWVBFIChXZWJLaXRT
b3VwUmVxdWVzdERhdGEsIHdlYmtpdF9zb3VwX3JlcXVlc3RfZGF0YSwgV0VCS0lUX1RZUEVfU09V
UF9SRVFVRVNUKQorCitzdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0RGF0YVByaXZhdGUgeworCWdz
aXplIGNvbnRlbnRfbGVuZ3RoOworCWNoYXIgKmNvbnRlbnRfdHlwZTsKK307CisKK3N0YXRpYyB2
b2lkCit3ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFfaW5pdCAoV2ViS2l0U291cFJlcXVlc3REYXRh
ICpkYXRhKQoreworCWRhdGEtPnByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKGRh
dGEsIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9EQVRBLCBXZWJLaXRTb3VwUmVxdWVzdERhdGFQ
cml2YXRlKTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX3JlcXVlc3RfZGF0YV9maW5h
bGl6ZSAoR09iamVjdCAqb2JqZWN0KQoreworCVdlYktpdFNvdXBSZXF1ZXN0RGF0YSAqZGF0YSA9
IFdFQktJVF9TT1VQX1JFUVVFU1RfREFUQSAob2JqZWN0KTsKKworCWdfZnJlZSAoZGF0YS0+cHJp
di0+Y29udGVudF90eXBlKTsKKworCUdfT0JKRUNUX0NMQVNTICh3ZWJraXRfc291cF9yZXF1ZXN0
X2RhdGFfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Cit9CisKK3N0YXRpYyBnYm9v
bGVhbgord2Via2l0X3NvdXBfcmVxdWVzdF9kYXRhX2NoZWNrX3VyaSAoV2ViS2l0U291cFJlcXVl
c3QgICpyZXF1ZXN0LAorCQkJCSAgICBTb3VwVVJJICAgICAgKnVyaSwKKwkJCQkgICAgR0Vycm9y
ICAgICAgKiplcnJvcikKK3sKKwlyZXR1cm4gdXJpLT5ob3N0ID09IE5VTEw7Cit9CisKK3N0YXRp
YyBHSW5wdXRTdHJlYW0gKgord2Via2l0X3NvdXBfcmVxdWVzdF9kYXRhX3NlbmQgKFdlYktpdFNv
dXBSZXF1ZXN0ICAgKnJlcXVlc3QsCisJCQkgICAgICAgR0NhbmNlbGxhYmxlICAqY2FuY2VsbGFi
bGUsCisJCQkgICAgICAgR0Vycm9yICAgICAgICoqZXJyb3IpCit7CisJV2ViS2l0U291cFJlcXVl
c3REYXRhICpkYXRhID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9EQVRBIChyZXF1ZXN0KTsKKwlTb3Vw
VVJJICp1cmkgPSB3ZWJraXRfc291cF9yZXF1ZXN0X2dldF91cmkgKHJlcXVlc3QpOworCUdJbnB1
dFN0cmVhbSAqbWVtc3RyZWFtOworCWNvbnN0IGNoYXIgKmNvbW1hLCAqc2VtaSwgKnN0YXJ0LCAq
ZW5kOworCWdib29sZWFuIGJhc2U2NCA9IEZBTFNFOworCisJZ2NoYXIgKnVyaXN0ciA9IHNvdXBf
dXJpX3RvX3N0cmluZyAodXJpLCBGQUxTRSk7CisJY29tbWEgPSBzdHJjaHIgKHVyaXN0ciwgJywn
KTsKKwlpZiAoY29tbWEgJiYgY29tbWEgIT0gdXJpc3RyKSB7CisJCS8qIERlYWwgd2l0aCBNSU1F
IHR5cGUgLyBwYXJhbXMgKi8KKwkJc2VtaSA9IG1lbWNociAodXJpc3RyLCAnOycsIGNvbW1hIC0g
dXJpc3RyKTsKKwkJZW5kID0gc2VtaSA/IHNlbWkgOiBjb21tYTsKKworCQlpZiAoc2VtaSAmJiAh
Z19hc2NpaV9zdHJuY2FzZWNtcCAoc2VtaSwgIjtiYXNlNjQiLCBNQVggKGNvbW1hIC0gc2VtaSwg
c3RybGVuICgiO2Jhc2U2NCIpKSkpCisJCQliYXNlNjQgPSBUUlVFOworCisJCWlmIChlbmQgIT0g
dXJpc3RyKQorCQkJaWYgKGJhc2U2NCkKKwkJCQlkYXRhLT5wcml2LT5jb250ZW50X3R5cGUgPSBn
X3N0cm5kdXAgKHVyaXN0ciwgZW5kIC0gdXJpc3RyKTsKKwkJCWVsc2UKKwkJCQlkYXRhLT5wcml2
LT5jb250ZW50X3R5cGUgPQorCQkJCQl3ZWJraXRfc291cF9yZXF1ZXN0X3VyaV9kZWNvZGVkX2Nv
cHkgKHVyaXN0ciwgZW5kIC0gdXJpc3RyKTsKKwl9CisKKwltZW1zdHJlYW0gPSBnX21lbW9yeV9p
bnB1dF9zdHJlYW1fbmV3ICgpOworCisJc3RhcnQgPSBjb21tYSA/IGNvbW1hICsgMSA6IHVyaXN0
cjsKKworCWlmICgqc3RhcnQpIHsKKwkJZ3VjaGFyICpidWY7CisKKwkJaWYgKGJhc2U2NCkgewor
CQkJaW50IGlubGVuLCBzdGF0ZSA9IDA7CisJCQlndWludCBzYXZlID0gMDsKKworCQkJaW5sZW4g
PSBzdHJsZW4gKHN0YXJ0KTsKKwkJCWJ1ZiA9IGdfbWFsbG9jIChpbmxlbiAqIDMgLyA0KTsKKwkJ
CWRhdGEtPnByaXYtPmNvbnRlbnRfbGVuZ3RoID0KKwkJCQlnX2Jhc2U2NF9kZWNvZGVfc3RlcCAo
c3RhcnQsIGlubGVuLCBidWYsCisJCQkJCQkgICAgICAmc3RhdGUsICZzYXZlKTsKKwkJCWlmIChz
dGF0ZSAhPSAwKSB7CisJCQkJZ19mcmVlIChidWYpOworCQkJCWdvdG8gZmFpbDsKKwkJCX0KKwkJ
fSBlbHNlIHsKKwkJCS8qIENhbm5vdCB1c2UgZ191cmlfdW5lc2NhcGVfc3RyaW5nIG5vcgorCQkJ
ICAgc291cF91cmlfZGVjb2RlIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0bworCQkJICAgZmFpbCBm
b3IgdGhpbmdzIGxpa2UgIiUzRSUlM0MiIC0+ICI+JTwiICovCisJCQlidWYgPSAoZ3VjaGFyICop
d2Via2l0X3NvdXBfcmVxdWVzdF91cmlfZGVjb2RlZF9jb3B5IChzdGFydCwgc3RybGVuIChzdGFy
dCkpOworCQkJaWYgKCFidWYpCisJCQkJZ290byBmYWlsOworCQkJZGF0YS0+cHJpdi0+Y29udGVu
dF9sZW5ndGggPSBzdHJsZW4gKChjaGFyICopYnVmKTsKKwkJfQorCisJCWdfbWVtb3J5X2lucHV0
X3N0cmVhbV9hZGRfZGF0YSAoR19NRU1PUllfSU5QVVRfU1RSRUFNIChtZW1zdHJlYW0pLAorCQkJ
CQkJYnVmLCBkYXRhLT5wcml2LT5jb250ZW50X2xlbmd0aCwKKwkJCQkJCWdfZnJlZSk7CisJfQor
CWdfZnJlZSAodXJpc3RyKTsKKworCXJldHVybiBtZW1zdHJlYW07CisKKyBmYWlsOgorCWdfZnJl
ZSAodXJpc3RyKTsKKwlnX3NldF9lcnJvciAoZXJyb3IsIFdFQktJVF9TT1VQX0VSUk9SLCBXRUJL
SVRfU09VUF9FUlJPUl9CQURfVVJJLAorCQkgICAgIF8gKCJVbmFibGUgdG8gZGVjb2RlIFVSSTog
JXMiKSwgc3RhcnQpOworCWdfb2JqZWN0X3VucmVmIChtZW1zdHJlYW0pOworCXJldHVybiBOVUxM
OworfQorCitzdGF0aWMgZ29mZnNldAord2Via2l0X3NvdXBfcmVxdWVzdF9kYXRhX2dldF9jb250
ZW50X2xlbmd0aCAoV2ViS2l0U291cFJlcXVlc3QgKnJlcXVlc3QpCit7CisJV2ViS2l0U291cFJl
cXVlc3REYXRhICpkYXRhID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9EQVRBIChyZXF1ZXN0KTsKKwor
CXJldHVybiBkYXRhLT5wcml2LT5jb250ZW50X2xlbmd0aDsKK30KKworc3RhdGljIGNvbnN0IGNo
YXIgKgord2Via2l0X3NvdXBfcmVxdWVzdF9kYXRhX2dldF9jb250ZW50X3R5cGUgKFdlYktpdFNv
dXBSZXF1ZXN0ICpyZXF1ZXN0KQoreworCVdlYktpdFNvdXBSZXF1ZXN0RGF0YSAqZGF0YSA9IFdF
QktJVF9TT1VQX1JFUVVFU1RfREFUQSAocmVxdWVzdCk7CisKKwlyZXR1cm4gZGF0YS0+cHJpdi0+
Y29udGVudF90eXBlOworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfcmVxdWVzdF9kYXRh
X2NsYXNzX2luaXQgKFdlYktpdFNvdXBSZXF1ZXN0RGF0YUNsYXNzICpyZXF1ZXN0X2RhdGFfY2xh
c3MpCit7CisJR09iamVjdENsYXNzICpvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAocmVx
dWVzdF9kYXRhX2NsYXNzKTsKKwlXZWJLaXRTb3VwUmVxdWVzdENsYXNzICpyZXF1ZXN0X2NsYXNz
ID0KKwkJV0VCS0lUX1NPVVBfUkVRVUVTVF9DTEFTUyAocmVxdWVzdF9kYXRhX2NsYXNzKTsKKwor
CWdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSAocmVxdWVzdF9kYXRhX2NsYXNzLCBzaXplb2YgKFdl
YktpdFNvdXBSZXF1ZXN0RGF0YVByaXZhdGUpKTsKKworCW9iamVjdF9jbGFzcy0+ZmluYWxpemUg
PSB3ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFfZmluYWxpemU7CisKKwlyZXF1ZXN0X2NsYXNzLT5j
aGVja191cmkgPSB3ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFfY2hlY2tfdXJpOworCXJlcXVlc3Rf
Y2xhc3MtPnNlbmQgPSB3ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFfc2VuZDsKKwlyZXF1ZXN0X2Ns
YXNzLT5nZXRfY29udGVudF9sZW5ndGggPSB3ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFfZ2V0X2Nv
bnRlbnRfbGVuZ3RoOworCXJlcXVlc3RfY2xhc3MtPmdldF9jb250ZW50X3R5cGUgPSB3ZWJraXRf
c291cF9yZXF1ZXN0X2RhdGFfZ2V0X2NvbnRlbnRfdHlwZTsKK30KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmggYi9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzOTA1MjIKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5o
CkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwgSW5j
LgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdFQktJVF9TT1VQ
X1JFUVVFU1RfREFUQV9ICisjZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfREFUQV9IIDEKKwor
I2luY2x1ZGUgInNvdXAtcmVxdWVzdC5oIgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VC
S0lUX1RZUEVfU09VUF9SRVFVRVNUX0RBVEEgICAgICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVz
dF9kYXRhX2dldF90eXBlICgpKQorI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNUX0RBVEEob2Jq
ZWN0KSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iamVjdCksIFdFQktJ
VF9UWVBFX1NPVVBfUkVRVUVTVF9EQVRBLCBXZWJLaXRTb3VwUmVxdWVzdERhdGEpKQorI2RlZmlu
ZSBXRUJLSVRfU09VUF9SRVFVRVNUX0RBVEFfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfQ0FTVCAoKGtsYXNzKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0RBVEEsIFdlYktp
dFNvdXBSZXF1ZXN0RGF0YUNsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1NPVVBfUkVRVUVTVF9E
QVRBKG9iamVjdCkgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmplY3QpLCBX
RUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfREFUQSkpCisjZGVmaW5lIFdFQktJVF9JU19TT1VQX1JF
UVVFU1RfREFUQV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3Mp
LCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfREFUQSkpCisjZGVmaW5lIFdFQktJVF9TT1VQX1JF
UVVFU1RfREFUQV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChv
YmopLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfREFUQSwgV2ViS2l0U291cFJlcXVlc3REYXRh
Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0U291cFJlcXVlc3REYXRhUHJpdmF0ZSBX
ZWJLaXRTb3VwUmVxdWVzdERhdGFQcml2YXRlOworCit0eXBlZGVmIHN0cnVjdCB7CisJV2ViS2l0
U291cFJlcXVlc3QgcGFyZW50OworCisJV2ViS2l0U291cFJlcXVlc3REYXRhUHJpdmF0ZSAqcHJp
djsKK30gV2ViS2l0U291cFJlcXVlc3REYXRhOworCit0eXBlZGVmIHN0cnVjdCB7CisJV2ViS2l0
U291cFJlcXVlc3RDbGFzcyBwYXJlbnQ7Cit9IFdlYktpdFNvdXBSZXF1ZXN0RGF0YUNsYXNzOwor
CitHVHlwZSB3ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFfZ2V0X3R5cGUgKHZvaWQpOworCitHX0VO
RF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX1NPVVBfUkVRVUVTVF9EQVRBX0ggKi8KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1m
aWxlLmMgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Qt
ZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YWQ5ZTYKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJl
cXVlc3QtZmlsZS5jCkBAIC0wLDAgKzEsMzMxIEBACisvKgorICogc291cC1yZXF1ZXN0LWZpbGUu
YzogZmlsZTogVVJJIHJlcXVlc3Qgb2JqZWN0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJl
ZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmZGVmIEhB
VkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAic291
cC1yZXF1ZXN0LWZpbGUuaCIKKyNpbmNsdWRlICJzb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0u
aCIKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3Rlci5oIgorI2luY2x1ZGUgPGdsaWIvZ2kxOG4uaD4K
KworR19ERUZJTkVfVFlQRSAoV2ViS2l0U291cFJlcXVlc3RGaWxlLCB3ZWJraXRfc291cF9yZXF1
ZXN0X2ZpbGUsIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVCkKKworc3RydWN0IF9XZWJLaXRTb3Vw
UmVxdWVzdEZpbGVQcml2YXRlIHsKKwlHRmlsZSAqZ2ZpbGU7CisKKwljaGFyICptaW1lX3R5cGU7
CisJZ29mZnNldCBzaXplOworfTsKKworR0ZpbGUgKgord2Via2l0X3NvdXBfcmVxdWVzdF9maWxl
X2dldF9maWxlIChXZWJLaXRTb3VwUmVxdWVzdEZpbGUgKmZpbGUpCit7CisJcmV0dXJuIGdfb2Jq
ZWN0X3JlZiAoZmlsZS0+cHJpdi0+Z2ZpbGUpOworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3Nv
dXBfcmVxdWVzdF9maWxlX2luaXQgKFdlYktpdFNvdXBSZXF1ZXN0RmlsZSAqZmlsZSkKK3sKKwlm
aWxlLT5wcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFIChmaWxlLCBXRUJLSVRfVFlQ
RV9TT1VQX1JFUVVFU1RfRklMRSwgV2ViS2l0U291cFJlcXVlc3RGaWxlUHJpdmF0ZSk7CisKKwlm
aWxlLT5wcml2LT5zaXplID0gLTE7Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfc291cF9yZXF1
ZXN0X2ZpbGVfZmluYWxpemUgKEdPYmplY3QgKm9iamVjdCkKK3sKKwlXZWJLaXRTb3VwUmVxdWVz
dEZpbGUgKmZpbGUgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0ZJTEUgKG9iamVjdCk7CisKKwlpZiAo
ZmlsZS0+cHJpdi0+Z2ZpbGUpCisJCWdfb2JqZWN0X3VucmVmIChmaWxlLT5wcml2LT5nZmlsZSk7
CisJZ19mcmVlIChmaWxlLT5wcml2LT5taW1lX3R5cGUpOworCisJR19PQkpFQ1RfQ0xBU1MgKHdl
YmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsK
K30KKworc3RhdGljIGdib29sZWFuCit3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfY2hlY2tfdXJp
IChXZWJLaXRTb3VwUmVxdWVzdCAgKnJlcXVlc3QsCisJCQkJICAgIFNvdXBVUkkgICAgICAqdXJp
LAorCQkJCSAgICBHRXJyb3IgICAgICAqKmVycm9yKQoreworCS8qICJmaWxlOi9mb28iIGlzIG5v
dCB2YWxpZCAqLworCWlmICghdXJpLT5ob3N0KQorCQlyZXR1cm4gRkFMU0U7CisKKwkvKiBidXQg
aXQgbXVzdCBiZSAiZmlsZTovLy8uLi4iIG9yICJmaWxlOi8vbG9jYWxob3N0Ly4uLiIgKi8KKwlp
ZiAodXJpLT5zY2hlbWUgPT0gU09VUF9VUklfU0NIRU1FX0ZJTEUgJiYKKwkgICAgKnVyaS0+aG9z
dCAmJgorCSAgICBnX2FzY2lpX3N0cmNhc2VjbXAgKHVyaS0+aG9zdCwgImxvY2FsaG9zdCIpICE9
IDApCisJCXJldHVybiBGQUxTRTsKKworCXJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZAor
d2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2Z0cF9tYWluX2xvb3BfcXVpdCAoR09iamVjdCAgICAg
ICpvYmplY3QsCisJCQkJCSAgICAgR0FzeW5jUmVzdWx0ICpyZXN1bHQsCisJCQkJCSAgICAgZ3Bv
aW50ZXIgbG9vcCkKK3sKKwlnX21haW5fbG9vcF9xdWl0IChsb29wKTsKK30KKworLyogVGhpcyBp
cyBhIHNvbWV3aGF0IGhhY2t5IHdheSB0byBnZXQgRlRQIHRvIGFsbW9zdCB3b3JrLiBUaGUgcHJv
cGVyIHdheSB0bworICogZ2V0IEZUUCB0byBfcmVhbGx5XyB3b3JrIGludm9sdmVzIGhhY2tpbmcg
R0lPIHRvIGhhdmUgQVBJcyB0byBoYW5kbGUKKyAqIGNhbm9uY2lhbCBVUkxzLgorICovCitzdGF0
aWMgR0ZpbGUgKgord2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2Vuc3VyZV9maWxlX2Z0cCAoU291
cFVSSSAgICAgICAqdXJpLAorCQkJCQkgIEdDYW5jZWxsYWJsZSAgKmNhbmNlbGxhYmxlLAorCQkJ
CQkgIEdFcnJvciAgICAgICAqKmVycm9yKQoreworCVNvdXBVUkkgKmhvc3Q7CisJY2hhciAqczsK
KwlHRmlsZSAqZmlsZSwgKnJlc3VsdDsKKwlHTW91bnQgKm1vdW50OworCisJaG9zdCA9IHNvdXBf
dXJpX2NvcHlfaG9zdCAodXJpKTsKKwlzID0gc291cF91cmlfdG9fc3RyaW5nIChob3N0LCBGQUxT
RSk7CisJZmlsZSA9IGdfZmlsZV9uZXdfZm9yX3VyaSAocyk7CisJc291cF91cmlfZnJlZSAoaG9z
dCk7CisJZ19mcmVlIChzKTsKKworCW1vdW50ID0gZ19maWxlX2ZpbmRfZW5jbG9zaW5nX21vdW50
IChmaWxlLCBjYW5jZWxsYWJsZSwgZXJyb3IpOworCWlmIChtb3VudCA9PSBOVUxMICYmIGdfZmls
ZV9zdXBwb3J0c190aHJlYWRfY29udGV4dHMgKGZpbGUpKSB7CisJCUdNYWluQ29udGV4dCAqY29u
dGV4dCA9IGdfbWFpbl9jb250ZXh0X25ldyAoKTsKKwkJR01haW5Mb29wICpsb29wID0gZ19tYWlu
X2xvb3BfbmV3IChjb250ZXh0LCBGQUxTRSk7CisKKwkJZ19jbGVhcl9lcnJvciAoZXJyb3IpOwor
CQlnX21haW5fY29udGV4dF9wdXNoX3RocmVhZF9kZWZhdWx0IChjb250ZXh0KTsKKwkJZ19maWxl
X21vdW50X2VuY2xvc2luZ192b2x1bWUgKGZpbGUsCisJCQkJCSAgICAgICBHX01PVU5UX01PVU5U
X05PTkUsCisJCQkJCSAgICAgICBOVUxMLCAvKiBGSVhNRSEgKi8KKwkJCQkJICAgICAgIGNhbmNl
bGxhYmxlLAorCQkJCQkgICAgICAgd2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2Z0cF9tYWluX2xv
b3BfcXVpdCwKKwkJCQkJICAgICAgIGxvb3ApOworCQlnX21haW5fbG9vcF9ydW4gKGxvb3ApOwor
CQlnX21haW5fY29udGV4dF9wb3BfdGhyZWFkX2RlZmF1bHQgKGNvbnRleHQpOworCQlnX21haW5f
bG9vcF91bnJlZiAobG9vcCk7CisJCWdfbWFpbl9jb250ZXh0X3VucmVmIChjb250ZXh0KTsKKwkJ
bW91bnQgPSBnX2ZpbGVfZmluZF9lbmNsb3NpbmdfbW91bnQgKGZpbGUsIGNhbmNlbGxhYmxlLCBl
cnJvcik7CisJfQorCWlmIChtb3VudCA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwlnX29iamVj
dF91bnJlZiAoZmlsZSk7CisKKwlmaWxlID0gZ19tb3VudF9nZXRfZGVmYXVsdF9sb2NhdGlvbiAo
bW91bnQpOworCWdfb2JqZWN0X3VucmVmIChtb3VudCk7CisKKwlzID0gZ19zdHJkdXAgKHVyaS0+
cGF0aCk7CisJaWYgKHN0cmNociAocywgJzsnKSkKKwkJKnN0cmNociAocywgJzsnKSA9IDA7CisK
KwlyZXN1bHQgPSBnX2ZpbGVfcmVzb2x2ZV9yZWxhdGl2ZV9wYXRoIChmaWxlLCBzKTsKKwlnX2Zy
ZWUgKHMpOworCWdfb2JqZWN0X3VucmVmIChmaWxlKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisK
K3N0YXRpYyBnYm9vbGVhbgord2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2Vuc3VyZV9maWxlIChX
ZWJLaXRTb3VwUmVxdWVzdEZpbGUgICpmaWxlLAorCQkJCSAgICAgIEdDYW5jZWxsYWJsZSAgICAg
KmNhbmNlbGxhYmxlLAorCQkJCSAgICAgIEdFcnJvciAgICAgICAgICAqKmVycm9yKQoreworCVNv
dXBVUkkgKnVyaTsKKworCWlmIChmaWxlLT5wcml2LT5nZmlsZSkKKwkJcmV0dXJuIFRSVUU7CisK
Kwl1cmkgPSB3ZWJraXRfc291cF9yZXF1ZXN0X2dldF91cmkgKFdFQktJVF9TT1VQX1JFUVVFU1Qg
KGZpbGUpKTsKKwlpZiAodXJpLT5zY2hlbWUgPT0gU09VUF9VUklfU0NIRU1FX0ZJTEUpIHsKKwkJ
LyogV2UgY2Fubm90IHVzZSBzb3VwX3VyaV9kZWNvZGUgYXMgaXQgaW5jb3JyZWN0bHkKKwkJICog
cmV0dXJucyBOVUxMIGZvciBpbmNvcnJlY3RseSBlbmNvZGVkIFVSSXMgKHRoYXQKKwkJICogY291
bGQgYmUgdmFsaWQgZmlsZW5hbWVzKS4gVGhpcyB3aWxsIGJlIGhvcGVmdWxseQorCQkgKiBzaGlw
cGVkIGluIGxpYnNvdXAgMi4zMi4xIGJ1dCB3ZSB3YW50IHRvIGxhbmQgdGhpcworCQkgKiBmaXJz
dC4gVE9ETzogcmVwbGFjZSB1cmlfZGVjb2RlZF9jb3B5IGJ5CisJCSAqIHNvdXBfdXJpX2RlY29k
ZSB3aGVuIHRoZSByZXF1aXJlZCBsaWJzb3VwIHZlcnNpb24KKwkJICogaXMgYnVtcGVkIG91dCB0
byAyLjMyLjEKKwkJICovCisJCWdjaGFyICp1cmlfcGF0aCA9IHNvdXBfdXJpX2dldF9wYXRoICh1
cmkpOworCQlnY2hhciAqZGVjb2RlZF91cmkgPSB3ZWJraXRfc291cF9yZXF1ZXN0X3VyaV9kZWNv
ZGVkX2NvcHkgKHVyaV9wYXRoLCBzdHJsZW4gKHVyaV9wYXRoKSk7CisKKwkJaWYgKGRlY29kZWRf
dXJpKSB7CisJCQkvKiBEbyBub3QgdXNlIG5ld19mb3JfdXJpKCkgYXMgdGhlIGRlY29kZWQgVVJJ
CisJCQkgKiAgY291bGQgbm90IGJlIGEgdmFsaWQgVVJJCisJCQkgKi8KKwkJCWZpbGUtPnByaXYt
PmdmaWxlID0gZ19maWxlX25ld19mb3JfcGF0aCAoZGVjb2RlZF91cmkpOworCQkJZ19mcmVlIChk
ZWNvZGVkX3VyaSk7CisJCX0KKworCQlyZXR1cm4gVFJVRTsKKwl9IGVsc2UgaWYgKHVyaS0+c2No
ZW1lID09IFNPVVBfVVJJX1NDSEVNRV9GVFApIHsKKwkJZmlsZS0+cHJpdi0+Z2ZpbGUgPSB3ZWJr
aXRfc291cF9yZXF1ZXN0X2ZpbGVfZW5zdXJlX2ZpbGVfZnRwICh1cmksCisJCQkJCQkJCSAgICAg
ICBjYW5jZWxsYWJsZSwKKwkJCQkJCQkJICAgICAgIGVycm9yKTsKKwkJcmV0dXJuIGZpbGUtPnBy
aXYtPmdmaWxlICE9IE5VTEw7CisJfQorCisJZ19zZXRfZXJyb3IgKGVycm9yLCBXRUJLSVRfU09V
UF9FUlJPUiwgV0VCS0lUX1NPVVBfRVJST1JfVU5TVVBQT1JURURfVVJJX1NDSEVNRSwKKwkJICAg
ICBfICgiVW5zdXBwb3J0ZWQgVVJJIHNjaGVtZSAnJXMnIiksIHVyaS0+c2NoZW1lKTsKKwlyZXR1
cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBHSW5wdXRTdHJlYW0gKgord2Via2l0X3NvdXBfcmVxdWVz
dF9maWxlX3NlbmQgKFdlYktpdFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAorCQkJICAg
ICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCSAgICAgICBHRXJyb3Ig
ICAgICAgICAgICAgICoqZXJyb3IpCit7CisJV2ViS2l0U291cFJlcXVlc3RGaWxlICpmaWxlID0g
V0VCS0lUX1NPVVBfUkVRVUVTVF9GSUxFIChyZXF1ZXN0KTsKKwlHSW5wdXRTdHJlYW0gKnN0cmVh
bTsKKwlHRXJyb3IgKm15X2Vycm9yID0gTlVMTDsKKworCWlmICghd2Via2l0X3NvdXBfcmVxdWVz
dF9maWxlX2Vuc3VyZV9maWxlIChmaWxlLCBjYW5jZWxsYWJsZSwgZXJyb3IpKQorCQlyZXR1cm4g
TlVMTDsKKworCXN0cmVhbSA9IEdfSU5QVVRfU1RSRUFNIChnX2ZpbGVfcmVhZCAoZmlsZS0+cHJp
di0+Z2ZpbGUsCisJCQkJCSAgICAgIGNhbmNlbGxhYmxlLCAmbXlfZXJyb3IpKTsKKwlpZiAoc3Ry
ZWFtID09IE5VTEwpIHsKKwkJaWYgKGdfZXJyb3JfbWF0Y2hlcyAobXlfZXJyb3IsIEdfSU9fRVJS
T1IsIEdfSU9fRVJST1JfSVNfRElSRUNUT1JZKSkgeworCQkJR0ZpbGVFbnVtZXJhdG9yICplbnVt
ZXJhdG9yOworCQkJZ19jbGVhcl9lcnJvciAoJm15X2Vycm9yKTsKKwkJCWVudW1lcmF0b3IgPSBn
X2ZpbGVfZW51bWVyYXRlX2NoaWxkcmVuIChmaWxlLT5wcml2LT5nZmlsZSwKKwkJCQkJCQkJIioi
LAorCQkJCQkJCQlHX0ZJTEVfUVVFUllfSU5GT19OT05FLAorCQkJCQkJCQljYW5jZWxsYWJsZSwK
KwkJCQkJCQkJZXJyb3IpOworCQkJaWYgKGVudW1lcmF0b3IpIHsKKwkJCQlzdHJlYW0gPSB3ZWJr
aXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX25ldyAoZW51bWVyYXRvciwKKwkJCQkJCQkJ
CQkgd2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfdXJpIChyZXF1ZXN0KSk7CisJCQkJZ19vYmplY3Rf
dW5yZWYgKGVudW1lcmF0b3IpOworCQkJCWZpbGUtPnByaXYtPm1pbWVfdHlwZSA9IGdfc3RyZHVw
ICgidGV4dC9odG1sIik7CisJCQl9CisJCX0gZWxzZSB7CisJCQlnX3Byb3BhZ2F0ZV9lcnJvciAo
ZXJyb3IsIG15X2Vycm9yKTsKKwkJfQorCX0gZWxzZSB7CisJCUdGaWxlSW5mbyAqaW5mbyA9IGdf
ZmlsZV9xdWVyeV9pbmZvIChmaWxlLT5wcml2LT5nZmlsZSwKKwkJCQkJCSAgICAgR19GSUxFX0FU
VFJJQlVURV9TVEFOREFSRF9DT05URU5UX1RZUEUgIiwiCisJCQkJCQkgICAgIEdfRklMRV9BVFRS
SUJVVEVfU1RBTkRBUkRfU0laRSwKKwkJCQkJCSAgICAgMCwgY2FuY2VsbGFibGUsIE5VTEwpOwor
CQlpZiAoaW5mbykgeworCQkJY29uc3QgY2hhciAqY29udGVudF90eXBlOworCQkJZmlsZS0+cHJp
di0+c2l6ZSA9IGdfZmlsZV9pbmZvX2dldF9zaXplIChpbmZvKTsKKwkJCWNvbnRlbnRfdHlwZSA9
IGdfZmlsZV9pbmZvX2dldF9jb250ZW50X3R5cGUgKGluZm8pOworCisJCQlpZiAoY29udGVudF90
eXBlKQorCQkJCWZpbGUtPnByaXYtPm1pbWVfdHlwZSA9IGdfY29udGVudF90eXBlX2dldF9taW1l
X3R5cGUgKGNvbnRlbnRfdHlwZSk7CisJCQlnX29iamVjdF91bnJlZiAoaW5mbyk7CisJCX0KKwl9
CisKKwlyZXR1cm4gc3RyZWFtOworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfcmVxdWVz
dF9maWxlX3NlbmRfYXN5bmNfdGhyZWFkIChHU2ltcGxlQXN5bmNSZXN1bHQgKnJlcywKKwkJCQkJ
ICAgIEdPYmplY3QgICAgICAgICAgICAqb2JqZWN0LAorCQkJCQkgICAgR0NhbmNlbGxhYmxlICAg
ICAgICpjYW5jZWxsYWJsZSkKK3sKKwlHSW5wdXRTdHJlYW0gKnN0cmVhbTsKKwlXZWJLaXRTb3Vw
UmVxdWVzdCAqcmVxdWVzdDsKKwlHRXJyb3IgKmVycm9yID0gTlVMTDsKKworCXJlcXVlc3QgPSBX
RUJLSVRfU09VUF9SRVFVRVNUIChvYmplY3QpOworCisJc3RyZWFtID0gd2Via2l0X3NvdXBfcmVx
dWVzdF9maWxlX3NlbmQgKHJlcXVlc3QsIGNhbmNlbGxhYmxlLCAmZXJyb3IpOworCisJaWYgKHN0
cmVhbSA9PSBOVUxMKSB7CisJCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfZnJvbV9lcnJvciAo
cmVzLCBlcnJvcik7CisJCWdfZXJyb3JfZnJlZSAoZXJyb3IpOworCX0gZWxzZSB7CisJCWdfc2lt
cGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dwb2ludGVyIChyZXMsIHN0cmVhbSwgZ19vYmpl
Y3RfdW5yZWYpOworCX0KK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX3JlcXVlc3RfZmls
ZV9zZW5kX2FzeW5jIChXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKKwkJCQkg
ICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkgICAgIEdBc3luY1Jl
YWR5Q2FsbGJhY2sgY2FsbGJhY2ssCisJCQkJICAgICBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJ
R1NpbXBsZUFzeW5jUmVzdWx0ICpyZXM7CisKKwlyZXMgPSBnX3NpbXBsZV9hc3luY19yZXN1bHRf
bmV3IChHX09CSkVDVCAocmVxdWVzdCksIGNhbGxiYWNrLCB1c2VyX2RhdGEsIHdlYmtpdF9zb3Vw
X3JlcXVlc3RfZmlsZV9zZW5kX2FzeW5jKTsKKworCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9ydW5f
aW5fdGhyZWFkIChyZXMsIHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9zZW5kX2FzeW5jX3RocmVh
ZCwgR19QUklPUklUWV9ERUZBVUxULCBjYW5jZWxsYWJsZSk7CisJZ19vYmplY3RfdW5yZWYgKHJl
cyk7Cit9CisKK3N0YXRpYyBHSW5wdXRTdHJlYW0gKgord2Via2l0X3NvdXBfcmVxdWVzdF9maWxl
X3NlbmRfZmluaXNoIChXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKKwkJCQkg
ICAgICBHQXN5bmNSZXN1bHQgICAgICAgICAqcmVzdWx0LAorCQkJCSAgICAgIEdFcnJvciAgICAg
ICAgICAgICAgKiplcnJvcikKK3sKKwlHU2ltcGxlQXN5bmNSZXN1bHQgKnNpbXBsZSA9IEdfU0lN
UExFX0FTWU5DX1JFU1VMVCAocmVzdWx0KTsKKworCWdfd2Fybl9pZl9mYWlsIChnX3NpbXBsZV9h
c3luY19yZXN1bHRfZ2V0X3NvdXJjZV90YWcgKHNpbXBsZSkgPT0gd2Via2l0X3NvdXBfcmVxdWVz
dF9maWxlX3NlbmRfYXN5bmMpOworCisJaWYgKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9wcm9wYWdh
dGVfZXJyb3IgKHNpbXBsZSwgZXJyb3IpKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBnX29i
amVjdF9yZWYgKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfb3BfcmVzX2dwb2ludGVyIChzaW1w
bGUpKTsKK30KKworc3RhdGljIGdvZmZzZXQKK3dlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9nZXRf
Y29udGVudF9sZW5ndGggKFdlYktpdFNvdXBSZXF1ZXN0ICpyZXF1ZXN0KQoreworCVdlYktpdFNv
dXBSZXF1ZXN0RmlsZSAqZmlsZSA9IFdFQktJVF9TT1VQX1JFUVVFU1RfRklMRSAocmVxdWVzdCk7
CisKKwlyZXR1cm4gZmlsZS0+cHJpdi0+c2l6ZTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgor
d2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2dldF9jb250ZW50X3R5cGUgKFdlYktpdFNvdXBSZXF1
ZXN0ICpyZXF1ZXN0KQoreworCVdlYktpdFNvdXBSZXF1ZXN0RmlsZSAqZmlsZSA9IFdFQktJVF9T
T1VQX1JFUVVFU1RfRklMRSAocmVxdWVzdCk7CisKKwlpZiAoIWZpbGUtPnByaXYtPm1pbWVfdHlw
ZSkKKwkJcmV0dXJuICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iOworCisJcmV0dXJuIGZpbGUt
PnByaXYtPm1pbWVfdHlwZTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX3JlcXVlc3Rf
ZmlsZV9jbGFzc19pbml0IChXZWJLaXRTb3VwUmVxdWVzdEZpbGVDbGFzcyAqcmVxdWVzdF9maWxl
X2NsYXNzKQoreworCUdPYmplY3RDbGFzcyAqb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1Mg
KHJlcXVlc3RfZmlsZV9jbGFzcyk7CisJV2ViS2l0U291cFJlcXVlc3RDbGFzcyAqcmVxdWVzdF9j
bGFzcyA9CisJCVdFQktJVF9TT1VQX1JFUVVFU1RfQ0xBU1MgKHJlcXVlc3RfZmlsZV9jbGFzcyk7
CisKKwlnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUgKHJlcXVlc3RfZmlsZV9jbGFzcywgc2l6ZW9m
IChXZWJLaXRTb3VwUmVxdWVzdEZpbGVQcml2YXRlKSk7CisKKwlvYmplY3RfY2xhc3MtPmZpbmFs
aXplID0gd2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2ZpbmFsaXplOworCisJcmVxdWVzdF9jbGFz
cy0+Y2hlY2tfdXJpID0gd2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2NoZWNrX3VyaTsKKwlyZXF1
ZXN0X2NsYXNzLT5zZW5kID0gd2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX3NlbmQ7CisJcmVxdWVz
dF9jbGFzcy0+c2VuZF9hc3luYyA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9zZW5kX2FzeW5j
OworCXJlcXVlc3RfY2xhc3MtPnNlbmRfZmluaXNoID0gd2Via2l0X3NvdXBfcmVxdWVzdF9maWxl
X3NlbmRfZmluaXNoOworCXJlcXVlc3RfY2xhc3MtPmdldF9jb250ZW50X2xlbmd0aCA9IHdlYmtp
dF9zb3VwX3JlcXVlc3RfZmlsZV9nZXRfY29udGVudF9sZW5ndGg7CisJcmVxdWVzdF9jbGFzcy0+
Z2V0X2NvbnRlbnRfdHlwZSA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9nZXRfY29udGVudF90
eXBlOworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUv
c291cC1yZXF1ZXN0LWZpbGUuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3NvdXAtcmVxdWVzdC1maWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZjRiZmY5NwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3Vw
L2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlh
LCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZm5kZWYgV0VCS0lUX1NPVVBfUkVRVUVTVF9GSUxFX0gKKyNkZWZpbmUgV0VCS0lU
X1NPVVBfUkVRVUVTVF9GSUxFX0ggMQorCisjaW5jbHVkZSAic291cC1yZXF1ZXN0LmgiCisKK0df
QkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfRklMRSAgICAg
ICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfZ2V0X3R5cGUgKCkpCisjZGVmaW5lIFdF
QktJVF9TT1VQX1JFUVVFU1RfRklMRShvYmplY3QpICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9DQVNUICgob2JqZWN0KSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0ZJTEUsIFdlYktp
dFNvdXBSZXF1ZXN0RmlsZSkpCisjZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfRklMRV9DTEFT
UyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBXRUJLSVRfVFlQ
RV9TT1VQX1JFUVVFU1RfRklMRSwgV2ViS2l0U291cFJlcXVlc3RGaWxlQ2xhc3MpKQorI2RlZmlu
ZSBXRUJLSVRfSVNfU09VUF9SRVFVRVNUX0ZJTEUob2JqZWN0KSAgICAgIChHX1RZUEVfQ0hFQ0tf
SU5TVEFOQ0VfVFlQRSAoKG9iamVjdCksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9GSUxFKSkK
KyNkZWZpbmUgV0VCS0lUX0lTX1NPVVBfUkVRVUVTVF9GSUxFX0NMQVNTKGtsYXNzKSAoR19UWVBF
X0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9GSUxF
KSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9GSUxFX0dFVF9DTEFTUyhvYmopICAoR19U
WVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9G
SUxFLCBXZWJLaXRTb3VwUmVxdWVzdEZpbGVDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRTb3VwUmVxdWVzdEZpbGVQcml2YXRlIFdlYktpdFNvdXBSZXF1ZXN0RmlsZVByaXZhdGU7CisK
K3R5cGVkZWYgc3RydWN0IHsKKwlXZWJLaXRTb3VwUmVxdWVzdCBwYXJlbnQ7CisKKwlXZWJLaXRT
b3VwUmVxdWVzdEZpbGVQcml2YXRlICpwcml2OworfSBXZWJLaXRTb3VwUmVxdWVzdEZpbGU7CisK
K3R5cGVkZWYgc3RydWN0IHsKKwlXZWJLaXRTb3VwUmVxdWVzdENsYXNzIHBhcmVudDsKK30gV2Vi
S2l0U291cFJlcXVlc3RGaWxlQ2xhc3M7CisKK0dUeXBlIHdlYmtpdF9zb3VwX3JlcXVlc3RfZmls
ZV9nZXRfdHlwZSAodm9pZCk7CisKK0dGaWxlICAqd2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2dl
dF9maWxlIChXZWJLaXRTb3VwUmVxdWVzdEZpbGUgKmZpbGUpOworCitHX0VORF9ERUNMUworCisj
ZW5kaWYgLyogV0VCS0lUX1NPVVBfUkVRVUVTVF9GSUxFX0ggKi8KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRwLmMgYi9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtaHR0cC5jCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiOTNiY2IKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtaHR0cC5j
CkBAIC0wLDAgKzEsMzM5IEBACisvKgorICogc291cC1yZXF1ZXN0LWh0dHAuYzogaHR0cDogVVJJ
IHJlcXVlc3Qgb2JqZWN0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJlZCBIYXQsIEluYy4K
KyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gK
KyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8Z2xpYi9naTE4bi5oPgor
CisjaW5jbHVkZSAic291cC1jYWNoZS5oIgorI2luY2x1ZGUgInNvdXAtY2FjaGUtcHJpdmF0ZS5o
IgorI2luY2x1ZGUgInNvdXAtaHR0cC1pbnB1dC1zdHJlYW0uaCIKKyNpbmNsdWRlICJzb3VwLXJl
cXVlc3QtaHR0cC5oIgorCitHX0RFRklORV9UWVBFIChXZWJLaXRTb3VwUmVxdWVzdEhUVFAsIHdl
YmtpdF9zb3VwX3JlcXVlc3RfaHR0cCwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUKQorCitzdHJ1
Y3QgX1dlYktpdFNvdXBSZXF1ZXN0SFRUUFByaXZhdGUgeworCVNvdXBNZXNzYWdlICptc2c7Cit9
OworCisvKioKKyAqIHdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9nZXRfbWVzc2FnZToKKyAqIEBo
dHRwOiBhICNXZWJLaXRTb3VwUmVxdWVzdEhUVFAgb2JqZWN0CisgKgorICogR2V0cyBhIG5ldyBy
ZWZlcmVuY2UgdG8gdGhlICNTb3VwTWVzc2FnZSBhc3NvY2lhdGVkIHRvIHRoaXMgU291cFJlcXVl
c3QKKyAqCisgKiBSZXR1cm5zOiBhIG5ldyByZWZlcmVuY2UgdG8gdGhlICNTb3VwTWVzc2FnZQor
ICoqLworU291cE1lc3NhZ2UgKgord2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX2dldF9tZXNzYWdl
IChXZWJLaXRTb3VwUmVxdWVzdEhUVFAgKmh0dHApCit7CisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwg
KFdFQktJVF9JU19TT1VQX1JFUVVFU1RfSFRUUCAoaHR0cCksIE5VTEwpOworCisJcmV0dXJuIGdf
b2JqZWN0X3JlZiAoaHR0cC0+cHJpdi0+bXNnKTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9z
b3VwX3JlcXVlc3RfaHR0cF9pbml0IChXZWJLaXRTb3VwUmVxdWVzdEhUVFAgKmh0dHApCit7CisJ
aHR0cC0+cHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAoaHR0cCwgV0VCS0lUX1RZ
UEVfU09VUF9SRVFVRVNUX0hUVFAsIFdlYktpdFNvdXBSZXF1ZXN0SFRUUFByaXZhdGUpOworfQor
CitzdGF0aWMgZ2Jvb2xlYW4KK3dlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9jaGVja191cmkgKFdl
YktpdFNvdXBSZXF1ZXN0ICAqcmVxdWVzdCwKKwkJCQkgICAgU291cFVSSSAgICAgICp1cmksCisJ
CQkJICAgIEdFcnJvciAgICAgICoqZXJyb3IpCit7CisJV2ViS2l0U291cFJlcXVlc3RIVFRQICpo
dHRwID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9IVFRQIChyZXF1ZXN0KTsKKworCWlmICghU09VUF9V
UklfVkFMSURfRk9SX0hUVFAgKHVyaSkpCisJCXJldHVybiBGQUxTRTsKKworCWh0dHAtPnByaXYt
Pm1zZyA9IHNvdXBfbWVzc2FnZV9uZXdfZnJvbV91cmkgKFNPVVBfTUVUSE9EX0dFVCwgdXJpKTsK
KwlyZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX3JlcXVlc3RfaHR0
cF9maW5hbGl6ZSAoR09iamVjdCAqb2JqZWN0KQoreworCVdlYktpdFNvdXBSZXF1ZXN0SFRUUCAq
aHR0cCA9IFdFQktJVF9TT1VQX1JFUVVFU1RfSFRUUCAob2JqZWN0KTsKKworCWlmIChodHRwLT5w
cml2LT5tc2cpCisJCWdfb2JqZWN0X3VucmVmIChodHRwLT5wcml2LT5tc2cpOworCisJR19PQkpF
Q1RfQ0xBU1MgKHdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6
ZSAob2JqZWN0KTsKK30KKworc3RhdGljIEdJbnB1dFN0cmVhbSAqCit3ZWJraXRfc291cF9yZXF1
ZXN0X2h0dHBfc2VuZCAoV2ViS2l0U291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCisJCQkg
ICAgICAgR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJICAgICAgIEdFcnJv
ciAgICAgICAgICAgICAgKiplcnJvcikKK3sKKwlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtICpo
dHRwc3RyZWFtOworCVdlYktpdFNvdXBSZXF1ZXN0SFRUUCAqaHR0cCA9IFdFQktJVF9TT1VQX1JF
UVVFU1RfSFRUUCAocmVxdWVzdCk7CisKKwlodHRwc3RyZWFtID0gd2Via2l0X3NvdXBfaHR0cF9p
bnB1dF9zdHJlYW1fbmV3ICh3ZWJraXRfc291cF9yZXF1ZXN0X2dldF9zZXNzaW9uIChyZXF1ZXN0
KSwgaHR0cC0+cHJpdi0+bXNnKTsKKwlpZiAoIXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFt
X3NlbmQgKGh0dHBzdHJlYW0sIGNhbmNlbGxhYmxlLCBlcnJvcikpIHsKKwkJZ19vYmplY3RfdW5y
ZWYgKGh0dHBzdHJlYW0pOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuIChHSW5wdXRTdHJl
YW0gKilodHRwc3RyZWFtOworfQorCisKK3N0YXRpYyB2b2lkCitzZW50X2FzeW5jIChHT2JqZWN0
ICpzb3VyY2UsIEdBc3luY1Jlc3VsdCAqcmVzdWx0LCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJ
V2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSAqaHR0cHN0cmVhbSA9IFdFQktJVF9TT1VQX0hUVFBf
SU5QVVRfU1RSRUFNIChzb3VyY2UpOworCUdTaW1wbGVBc3luY1Jlc3VsdCAqc2ltcGxlID0gdXNl
cl9kYXRhOworCUdFcnJvciAqZXJyb3IgPSBOVUxMOworCisJaWYgKHdlYmtpdF9zb3VwX2h0dHBf
aW5wdXRfc3RyZWFtX3NlbmRfZmluaXNoIChodHRwc3RyZWFtLCByZXN1bHQsICZlcnJvcikpIHsK
KwkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ3BvaW50ZXIgKHNpbXBsZSwgaHR0
cHN0cmVhbSwgZ19vYmplY3RfdW5yZWYpOworCX0gZWxzZSB7CisJCWdfc2ltcGxlX2FzeW5jX3Jl
c3VsdF9zZXRfZnJvbV9lcnJvciAoc2ltcGxlLCBlcnJvcik7CisJCWdfZXJyb3JfZnJlZSAoZXJy
b3IpOworCQlnX29iamVjdF91bnJlZiAoaHR0cHN0cmVhbSk7CisJfQorCWdfc2ltcGxlX2FzeW5j
X3Jlc3VsdF9jb21wbGV0ZSAoc2ltcGxlKTsKKwlnX29iamVjdF91bnJlZiAoc2ltcGxlKTsKK30K
KworCit0eXBlZGVmIHN0cnVjdCB7CisJV2ViS2l0U291cFJlcXVlc3RIVFRQICpyZXE7CisJU291
cE1lc3NhZ2UgKm9yaWdpbmFsOworCUdDYW5jZWxsYWJsZSAqY2FuY2VsbGFibGU7CisJR0FzeW5j
UmVhZHlDYWxsYmFjayBjYWxsYmFjazsKKwlncG9pbnRlciB1c2VyX2RhdGE7Cit9IENvbmRpdGlv
bmFsSGVscGVyOworCisKK3N0YXRpYyB2b2lkCitjb25kaXRpb25hbF9nZXRfcmVhZHlfY2IgKFNv
dXBTZXNzaW9uICpzZXNzaW9uLCBTb3VwTWVzc2FnZSAqbXNnLCBncG9pbnRlciB1c2VyX2RhdGEp
Cit7CisJQ29uZGl0aW9uYWxIZWxwZXIgKmhlbHBlciA9IChDb25kaXRpb25hbEhlbHBlciAqKXVz
ZXJfZGF0YTsKKwlHU2ltcGxlQXN5bmNSZXN1bHQgKnNpbXBsZTsKKwlXZWJLaXRTb3VwSFRUUElu
cHV0U3RyZWFtICpodHRwc3RyZWFtOworCisJc2ltcGxlID0gZ19zaW1wbGVfYXN5bmNfcmVzdWx0
X25ldyAoR19PQkpFQ1QgKGhlbHBlci0+cmVxKSwKKwkJCQkJICAgIGhlbHBlci0+Y2FsbGJhY2ss
IGhlbHBlci0+dXNlcl9kYXRhLAorCQkJCQkgICAgY29uZGl0aW9uYWxfZ2V0X3JlYWR5X2NiKTsK
KworCWlmIChtc2ctPnN0YXR1c19jb2RlID09IFNPVVBfU1RBVFVTX05PVF9NT0RJRklFRCkgewor
CQlXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlID0gKFdlYktpdFNvdXBDYWNoZSAqKXNvdXBfc2Vzc2lv
bl9nZXRfZmVhdHVyZSAoc2Vzc2lvbiwgV0VCS0lUX1RZUEVfU09VUF9DQUNIRSk7CisKKwkJaHR0
cHN0cmVhbSA9IChXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtICopd2Via2l0X3NvdXBfY2FjaGVf
c2VuZF9yZXNwb25zZSAoY2FjaGUsIG1zZyk7CisJCWlmIChodHRwc3RyZWFtKSB7CisJCQljb25z
dCBnY2hhciAqY29udGVudF90eXBlOworCisJCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X29w
X3Jlc19ncG9pbnRlciAoc2ltcGxlLCBodHRwc3RyZWFtLCBnX29iamVjdF91bnJlZik7CisKKwkJ
CXNvdXBfbWVzc2FnZV9nb3RfaGVhZGVycyAoaGVscGVyLT5vcmlnaW5hbCk7CisJCQljb250ZW50
X3R5cGUgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfY29udGVudF90eXBlIChtc2ctPnJlc3Bv
bnNlX2hlYWRlcnMsIE5VTEwpOworCQkJc291cF9tZXNzYWdlX2NvbnRlbnRfc25pZmZlZCAoaGVs
cGVyLT5vcmlnaW5hbCwgY29udGVudF90eXBlLCBOVUxMKTsKKworCQkJZ19zaW1wbGVfYXN5bmNf
cmVzdWx0X2NvbXBsZXRlIChzaW1wbGUpOworCisJCQlzb3VwX21lc3NhZ2VfZmluaXNoZWQgKGhl
bHBlci0+b3JpZ2luYWwpOworCisJCQlnX29iamVjdF91bnJlZiAoc2ltcGxlKTsKKwkJfSBlbHNl
IHsKKwkJCS8qIEFzayBhZ2FpbiBmb3IgdGhlIHJlc291cmNlLCBzb21laG93IHRoZSBjYWNoZSBj
YW5ub3QgbG9jYXRlIGl0ICovCisJCQlodHRwc3RyZWFtID0gd2Via2l0X3NvdXBfaHR0cF9pbnB1
dF9zdHJlYW1fbmV3IChzZXNzaW9uLCBoZWxwZXItPm9yaWdpbmFsKTsKKwkJCXdlYmtpdF9zb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmMgKGh0dHBzdHJlYW0sIEdfUFJJT1JJVFlfREVG
QVVMVCwKKwkJCQkJCQkJICBoZWxwZXItPmNhbmNlbGxhYmxlLCBzZW50X2FzeW5jLCBzaW1wbGUp
OworCQl9CisJfSBlbHNlIHsKKwkJLyogSXQgaXMgaW4gdGhlIGNhY2hlIGJ1dCBpdCB3YXMgbW9k
aWZpZWQgcmVtb3RlbHkgKi8KKwkJaHR0cHN0cmVhbSA9IHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX25ldyAoc2Vzc2lvbiwgaGVscGVyLT5vcmlnaW5hbCk7CisJCXdlYmtpdF9zb3VwX2h0
dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmMgKGh0dHBzdHJlYW0sIEdfUFJJT1JJVFlfREVGQVVM
VCwKKwkJCQkJCQkgIGhlbHBlci0+Y2FuY2VsbGFibGUsIHNlbnRfYXN5bmMsIHNpbXBsZSk7CisJ
fQorCisJZ19vYmplY3RfdW5yZWYgKGhlbHBlci0+cmVxKTsKKwlnX29iamVjdF91bnJlZiAoaGVs
cGVyLT5vcmlnaW5hbCk7CisJZ19zbGljZV9mcmVlIChDb25kaXRpb25hbEhlbHBlciwgaGVscGVy
KTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworCVdlYktpdFNvdXBSZXF1ZXN0SFRUUCAqaHR0cDsK
KwlHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrOworCWdwb2ludGVyIHVzZXJfZGF0YTsKK30g
U2VuZEFzeW5jSGVscGVyOworCitzdGF0aWMgdm9pZCB3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBf
c2VuZF9hc3luYyAoV2ViS2l0U291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCisJCQkJCQkg
R0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJCQkJIEdBc3luY1JlYWR5Q2Fs
bGJhY2sgY2FsbGJhY2ssCisJCQkJCQkgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKKworc3RhdGljIGdi
b29sZWFuCitzZW5kX2FzeW5jX2NiIChncG9pbnRlciBkYXRhKQoreworCUdTaW1wbGVBc3luY1Jl
c3VsdCAqc2ltcGxlOworCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gKmh0dHBzdHJlYW07CisJ
U291cFNlc3Npb24gKnNlc3Npb247CisJV2ViS2l0U291cENhY2hlICpjYWNoZTsKKwlTZW5kQXN5
bmNIZWxwZXIgKmhlbHBlciA9IChTZW5kQXN5bmNIZWxwZXIgKilkYXRhOworCisJc2Vzc2lvbiA9
IHdlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X3Nlc3Npb24gKFdFQktJVF9TT1VQX1JFUVVFU1QgKGhl
bHBlci0+aHR0cCkpOworCWNhY2hlID0gKFdlYktpdFNvdXBDYWNoZSAqKXNvdXBfc2Vzc2lvbl9n
ZXRfZmVhdHVyZSAoc2Vzc2lvbiwgV0VCS0lUX1RZUEVfU09VUF9DQUNIRSk7CisKKwlodHRwc3Ry
ZWFtID0gKFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gKil3ZWJraXRfc291cF9jYWNoZV9zZW5k
X3Jlc3BvbnNlIChjYWNoZSwgU09VUF9NRVNTQUdFIChoZWxwZXItPmh0dHAtPnByaXYtPm1zZykp
OworCisJaWYgKGh0dHBzdHJlYW0pIHsKKwkJY29uc3QgZ2NoYXIgKmNvbnRlbnRfdHlwZTsKKwor
CQlzaW1wbGUgPSBnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3IChHX09CSkVDVCAoaGVscGVyLT5o
dHRwKSwKKwkJCQkJCSAgICBoZWxwZXItPmNhbGxiYWNrLCBoZWxwZXItPnVzZXJfZGF0YSwKKwkJ
CQkJCSAgICB3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfc2VuZF9hc3luYyk7CisJCWdfc2ltcGxl
X2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dwb2ludGVyIChzaW1wbGUsIGh0dHBzdHJlYW0sIGdf
b2JqZWN0X3VucmVmKTsKKworCQkvKiBVcGRhdGUgbWVzc2FnZSBzdGF0dXMgKi8KKwkJc291cF9t
ZXNzYWdlX3NldF9zdGF0dXMgKGhlbHBlci0+aHR0cC0+cHJpdi0+bXNnLCBTT1VQX1NUQVRVU19P
Syk7CisKKwkJLyogSXNzdWUgc2lnbmFscyAgKi8KKwkJc291cF9tZXNzYWdlX2dvdF9oZWFkZXJz
IChoZWxwZXItPmh0dHAtPnByaXYtPm1zZyk7CisJCWNvbnRlbnRfdHlwZSA9IHNvdXBfbWVzc2Fn
ZV9oZWFkZXJzX2dldF9jb250ZW50X3R5cGUgKGhlbHBlci0+aHR0cC0+cHJpdi0+bXNnLT5yZXNw
b25zZV9oZWFkZXJzLCBOVUxMKTsKKwkJc291cF9tZXNzYWdlX2NvbnRlbnRfc25pZmZlZCAoaGVs
cGVyLT5odHRwLT5wcml2LT5tc2csIGNvbnRlbnRfdHlwZSwgTlVMTCk7CisKKwkJZ19zaW1wbGVf
YXN5bmNfcmVzdWx0X2NvbXBsZXRlIChzaW1wbGUpOworCisJCXNvdXBfbWVzc2FnZV9maW5pc2hl
ZCAoaGVscGVyLT5odHRwLT5wcml2LT5tc2cpOworCisJCWdfb2JqZWN0X3VucmVmIChzaW1wbGUp
OworCX0KKworCWdfc2xpY2VfZnJlZSAoU2VuZEFzeW5jSGVscGVyLCBoZWxwZXIpOworCisJcmV0
dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX3Nl
bmRfYXN5bmMgKFdlYktpdFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAorCQkJCSAgICAg
R0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJCSAgICAgR0FzeW5jUmVhZHlD
YWxsYmFjayBjYWxsYmFjaywKKwkJCQkgICAgIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlXZWJL
aXRTb3VwUmVxdWVzdEhUVFAgKmh0dHAgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0hUVFAgKHJlcXVl
c3QpOworCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gKmh0dHBzdHJlYW07CisJR1NpbXBsZUFz
eW5jUmVzdWx0ICpzaW1wbGU7CisJU291cFNlc3Npb24gKnNlc3Npb247CisJV2ViS2l0U291cENh
Y2hlICpjYWNoZTsKKworCXNlc3Npb24gPSB3ZWJraXRfc291cF9yZXF1ZXN0X2dldF9zZXNzaW9u
IChyZXF1ZXN0KTsKKwljYWNoZSA9IChXZWJLaXRTb3VwQ2FjaGUgKilzb3VwX3Nlc3Npb25fZ2V0
X2ZlYXR1cmUgKHNlc3Npb24sIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUpOworCisJaWYgKGNhY2hl
KSB7CisJCVdlYktpdFNvdXBDYWNoZVJlc3BvbnNlIHJlc3BvbnNlOworCisJCXJlc3BvbnNlID0g
d2Via2l0X3NvdXBfY2FjaGVfaGFzX3Jlc3BvbnNlIChjYWNoZSwgaHR0cC0+cHJpdi0+bXNnKTsK
KwkJaWYgKHJlc3BvbnNlID09IFdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX0ZSRVNIKSB7CisJ
CQkvKiBEbyByZXR1cm4gdGhlIHN0cmVhbSBhc3luY2hyb25vdXNseSBhcyBpbgorCQkJICAgdGhl
IG90aGVyIGNhc2VzLiBJdCdzIG5vdCBlbm91Z2ggdG8gdXNlCisJCQkgICBnX3NpbXBsZV9hc3lu
Y19yZXN1bHRfY29tcGxldGVfaW5faWRsZSBhcworCQkJICAgdGhlIHNpZ25hbHMgbXVzdCBiZSBh
bHNvIGVtaXR0ZWQKKwkJCSAgIGFzeW5jaHJvbm91c2x5ICovCisJCQlTZW5kQXN5bmNIZWxwZXIg
KmhlbHBlciA9IGdfc2xpY2VfbmV3IChTZW5kQXN5bmNIZWxwZXIpOworCQkJaGVscGVyLT5odHRw
ID0gaHR0cDsKKwkJCWhlbHBlci0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKwkJCWhlbHBlci0+dXNl
cl9kYXRhID0gdXNlcl9kYXRhOworCQkJZ190aW1lb3V0X2FkZCAoMCwgc2VuZF9hc3luY19jYiwg
aGVscGVyKTsKKwkJCXJldHVybjsKKwkJfSBlbHNlIGlmIChyZXNwb25zZSA9PSBXRUJLSVRfU09V
UF9DQUNIRV9SRVNQT05TRV9ORUVEU19WQUxJREFUSU9OKSB7CisJCQlTb3VwTWVzc2FnZSAqY29u
ZGl0aW9uYWxfbXNnOworCQkJQ29uZGl0aW9uYWxIZWxwZXIgKmhlbHBlcjsKKworCQkJY29uZGl0
aW9uYWxfbXNnID0gd2Via2l0X3NvdXBfY2FjaGVfZ2VuZXJhdGVfY29uZGl0aW9uYWxfcmVxdWVz
dCAoY2FjaGUsIGh0dHAtPnByaXYtPm1zZyk7CisKKwkJCWhlbHBlciA9IGdfc2xpY2VfbmV3MCAo
Q29uZGl0aW9uYWxIZWxwZXIpOworCQkJaGVscGVyLT5yZXEgPSBnX29iamVjdF9yZWYgKGh0dHAp
OworCQkJaGVscGVyLT5vcmlnaW5hbCA9IGdfb2JqZWN0X3JlZiAoaHR0cC0+cHJpdi0+bXNnKTsK
KwkJCWhlbHBlci0+Y2FuY2VsbGFibGUgPSBjYW5jZWxsYWJsZTsKKwkJCWhlbHBlci0+Y2FsbGJh
Y2sgPSBjYWxsYmFjazsKKwkJCWhlbHBlci0+dXNlcl9kYXRhID0gdXNlcl9kYXRhOworCQkJc291
cF9zZXNzaW9uX3F1ZXVlX21lc3NhZ2UgKHNlc3Npb24sIGNvbmRpdGlvbmFsX21zZywKKwkJCQkJ
CSAgICBjb25kaXRpb25hbF9nZXRfcmVhZHlfY2IsCisJCQkJCQkgICAgaGVscGVyKTsKKwkJCXJl
dHVybjsKKwkJfQorCX0KKworCXNpbXBsZSA9IGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcgKEdf
T0JKRUNUIChodHRwKSwKKwkJCQkJICAgIGNhbGxiYWNrLCB1c2VyX2RhdGEsCisJCQkJCSAgICB3
ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfc2VuZF9hc3luYyk7CisJaHR0cHN0cmVhbSA9IHdlYmtp
dF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX25ldyAod2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfc2Vz
c2lvbiAocmVxdWVzdCksCisJCQkJCQkJaHR0cC0+cHJpdi0+bXNnKTsKKwl3ZWJraXRfc291cF9o
dHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jIChodHRwc3RyZWFtLCBHX1BSSU9SSVRZX0RFRkFV
TFQsCisJCQkJCQkgIGNhbmNlbGxhYmxlLCBzZW50X2FzeW5jLCBzaW1wbGUpOworfQorCitzdGF0
aWMgR0lucHV0U3RyZWFtICoKK3dlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9zZW5kX2ZpbmlzaCAo
V2ViS2l0U291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCisJCQkJICAgICAgR0FzeW5jUmVz
dWx0ICAgICAgICAgKnJlc3VsdCwKKwkJCQkgICAgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJy
b3IpCit7CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpzaW1wbGU7CisKKwlnX3JldHVybl92YWxfaWZf
ZmFpbCAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2lzX3ZhbGlkIChyZXN1bHQsIEdfT0JKRUNUIChy
ZXF1ZXN0KSwgd2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX3NlbmRfYXN5bmMpIHx8IGdfc2ltcGxl
X2FzeW5jX3Jlc3VsdF9pc192YWxpZCAocmVzdWx0LCBHX09CSkVDVCAocmVxdWVzdCksIGNvbmRp
dGlvbmFsX2dldF9yZWFkeV9jYiksIE5VTEwpOworCisJc2ltcGxlID0gR19TSU1QTEVfQVNZTkNf
UkVTVUxUIChyZXN1bHQpOworCWlmIChnX3NpbXBsZV9hc3luY19yZXN1bHRfcHJvcGFnYXRlX2Vy
cm9yIChzaW1wbGUsIGVycm9yKSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGdfb2JqZWN0X3Jl
ZiAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dldF9vcF9yZXNfZ3BvaW50ZXIgKHNpbXBsZSkpOwor
fQorCitzdGF0aWMgZ29mZnNldAord2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX2dldF9jb250ZW50
X2xlbmd0aCAoV2ViS2l0U291cFJlcXVlc3QgKnJlcXVlc3QpCit7CisJV2ViS2l0U291cFJlcXVl
c3RIVFRQICpodHRwID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9IVFRQIChyZXF1ZXN0KTsKKworCXJl
dHVybiBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfY29udGVudF9sZW5ndGggKGh0dHAtPnByaXYt
Pm1zZy0+cmVzcG9uc2VfaGVhZGVycyk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK3dlYmtp
dF9zb3VwX3JlcXVlc3RfaHR0cF9nZXRfY29udGVudF90eXBlIChXZWJLaXRTb3VwUmVxdWVzdCAq
cmVxdWVzdCkKK3sKKwlXZWJLaXRTb3VwUmVxdWVzdEhUVFAgKmh0dHAgPSBXRUJLSVRfU09VUF9S
RVFVRVNUX0hUVFAgKHJlcXVlc3QpOworCisJcmV0dXJuIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dl
dF9jb250ZW50X3R5cGUgKGh0dHAtPnByaXYtPm1zZy0+cmVzcG9uc2VfaGVhZGVycywgTlVMTCk7
Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfY2xhc3NfaW5pdCAo
V2ViS2l0U291cFJlcXVlc3RIVFRQQ2xhc3MgKnJlcXVlc3RfaHR0cF9jbGFzcykKK3sKKwlHT2Jq
ZWN0Q2xhc3MgKm9iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChyZXF1ZXN0X2h0dHBfY2xh
c3MpOworCVdlYktpdFNvdXBSZXF1ZXN0Q2xhc3MgKnJlcXVlc3RfY2xhc3MgPQorCQlXRUJLSVRf
U09VUF9SRVFVRVNUX0NMQVNTIChyZXF1ZXN0X2h0dHBfY2xhc3MpOworCisJZ190eXBlX2NsYXNz
X2FkZF9wcml2YXRlIChyZXF1ZXN0X2h0dHBfY2xhc3MsIHNpemVvZiAoV2ViS2l0U291cFJlcXVl
c3RIVFRQUHJpdmF0ZSkpOworCisJb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9zb3Vw
X3JlcXVlc3RfaHR0cF9maW5hbGl6ZTsKKworCXJlcXVlc3RfY2xhc3MtPmNoZWNrX3VyaSA9IHdl
YmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9jaGVja191cmk7CisJcmVxdWVzdF9jbGFzcy0+c2VuZCA9
IHdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9zZW5kOworCXJlcXVlc3RfY2xhc3MtPnNlbmRfYXN5
bmMgPSB3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfc2VuZF9hc3luYzsKKwlyZXF1ZXN0X2NsYXNz
LT5zZW5kX2ZpbmlzaCA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9zZW5kX2ZpbmlzaDsKKwly
ZXF1ZXN0X2NsYXNzLT5nZXRfY29udGVudF9sZW5ndGggPSB3ZWJraXRfc291cF9yZXF1ZXN0X2h0
dHBfZ2V0X2NvbnRlbnRfbGVuZ3RoOworCXJlcXVlc3RfY2xhc3MtPmdldF9jb250ZW50X3R5cGUg
PSB3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfZ2V0X2NvbnRlbnRfdHlwZTsKK30KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRw
LmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtaHR0
cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZjIyNjQKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVl
c3QtaHR0cC5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVk
IEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdF
QktJVF9TT1VQX1JFUVVFU1RfSFRUUF9ICisjZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfSFRU
UF9IIDEKKworI2luY2x1ZGUgInNvdXAtcmVxdWVzdC5oIgorCitHX0JFR0lOX0RFQ0xTCisKKyNk
ZWZpbmUgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0hUVFAgICAgICAgICAgICAod2Via2l0X3Nv
dXBfcmVxdWVzdF9odHRwX2dldF90eXBlICgpKQorI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNU
X0hUVFAob2JqZWN0KSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iamVj
dCksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9IVFRQLCBXZWJLaXRTb3VwUmVxdWVzdEhUVFAp
KQorI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNUX0hUVFBfQ0xBU1Moa2xhc3MpICAgIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0hU
VFAsIFdlYktpdFNvdXBSZXF1ZXN0SFRUUENsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1NPVVBf
UkVRVUVTVF9IVFRQKG9iamVjdCkgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChv
YmplY3QpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfSFRUUCkpCisjZGVmaW5lIFdFQktJVF9J
U19TT1VQX1JFUVVFU1RfSFRUUF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBF
ICgoa2xhc3MpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfSFRUUCkpCisjZGVmaW5lIFdFQktJ
VF9TT1VQX1JFUVVFU1RfSFRUUF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRf
Q0xBU1MgKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfSFRUUCwgV2ViS2l0U291cFJl
cXVlc3RIVFRQQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0U291cFJlcXVlc3RIVFRQ
UHJpdmF0ZSBXZWJLaXRTb3VwUmVxdWVzdEhUVFBQcml2YXRlOworCit0eXBlZGVmIHN0cnVjdCB7
CisJV2ViS2l0U291cFJlcXVlc3QgcGFyZW50OworCisJV2ViS2l0U291cFJlcXVlc3RIVFRQUHJp
dmF0ZSAqcHJpdjsKK30gV2ViS2l0U291cFJlcXVlc3RIVFRQOworCit0eXBlZGVmIHN0cnVjdCB7
CisJV2ViS2l0U291cFJlcXVlc3RDbGFzcyBwYXJlbnQ7Cit9IFdlYktpdFNvdXBSZXF1ZXN0SFRU
UENsYXNzOworCitHVHlwZSB3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfZ2V0X3R5cGUgKHZvaWQp
OworCitTb3VwTWVzc2FnZSAgKndlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9nZXRfbWVzc2FnZSAo
V2ViS2l0U291cFJlcXVlc3RIVFRQICpodHRwKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8q
IFdFQktJVF9TT1VQX1JFUVVFU1RfSFRUUF9IICovCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QuYyBiL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmQ5NWVjOWQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QuYwpAQCAtMCwwICsxLDMxMSBAQAorLyoK
KyAqIHNvdXAtcmVxdWVzdC5jOiBQcm90b2NvbC1pbmRlcGVuZGVudCBzdHJlYW1pbmcgcmVxdWVz
dCBpbnRlcmZhY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwgSW5jLgorICog
Q29weXJpZ2h0IChDKSAyMDEwLCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2lu
Y2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxnbGliL2dpMThuLmg+CisKKyNp
bmNsdWRlICJzb3VwLXJlcXVlc3QuaCIKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3Rlci5oIgorCisv
KioKKyAqIFNFQ1RJT046c291cC1yZXF1ZXN0CisgKiBAc2hvcnRfZGVzY3JpcHRpb246IFByb3Rv
Y29sLWluZGVwZW5kZW50IHN0cmVhbWluZyByZXF1ZXN0IGludGVyZmFjZQorICoKKyAqIEZJWE1F
CisgKiovCisKKy8qKgorICogV2ViS2l0U291cFJlcXVlc3Q6CisgKgorICogRklYTUUKKyAqCisg
KiBTaW5jZTogMi4zMAorICoqLworCitzdGF0aWMgdm9pZCB3ZWJraXRfc291cF9yZXF1ZXN0X2lu
aXRhYmxlX2ludGVyZmFjZV9pbml0IChHSW5pdGFibGVJZmFjZSAqaW5pdGFibGVfaW50ZXJmYWNl
KTsKKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKFdlYktpdFNvdXBSZXF1ZXN0LCB3ZWJraXRf
c291cF9yZXF1ZXN0LCBHX1RZUEVfT0JKRUNULAorCQkJIEdfSU1QTEVNRU5UX0lOVEVSRkFDRSAo
R19UWVBFX0lOSVRBQkxFLAorCQkJCQkJd2Via2l0X3NvdXBfcmVxdWVzdF9pbml0YWJsZV9pbnRl
cmZhY2VfaW5pdCkpCisKK2VudW0geworCVBST1BfMCwKKwlQUk9QX1VSSSwKKwlQUk9QX1NFU1NJ
T04KK307CisKK3N0cnVjdCBfV2ViS2l0U291cFJlcXVlc3RQcml2YXRlIHsKKwlTb3VwVVJJICp1
cmk7CisJU291cFNlc3Npb24gKnNlc3Npb247Cit9OworCitzdGF0aWMgdm9pZAord2Via2l0X3Nv
dXBfcmVxdWVzdF9pbml0IChXZWJLaXRTb3VwUmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlyZXF1ZXN0
LT5wcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFIChyZXF1ZXN0LCBXRUJLSVRfVFlQ
RV9TT1VQX1JFUVVFU1QsIFdlYktpdFNvdXBSZXF1ZXN0UHJpdmF0ZSk7Cit9CisKK3N0YXRpYyB2
b2lkCit3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbmFsaXplIChHT2JqZWN0ICpvYmplY3QpCit7CisJ
V2ViS2l0U291cFJlcXVlc3QgKnJlcXVlc3QgPSBXRUJLSVRfU09VUF9SRVFVRVNUIChvYmplY3Qp
OworCisJaWYgKHJlcXVlc3QtPnByaXYtPnVyaSkKKwkJc291cF91cmlfZnJlZSAocmVxdWVzdC0+
cHJpdi0+dXJpKTsKKwlpZiAocmVxdWVzdC0+cHJpdi0+c2Vzc2lvbikKKwkJZ19vYmplY3RfdW5y
ZWYgKHJlcXVlc3QtPnByaXYtPnNlc3Npb24pOworCisJR19PQkpFQ1RfQ0xBU1MgKHdlYmtpdF9z
b3VwX3JlcXVlc3RfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Cit9CisKK3N0YXRp
YyB2b2lkCit3ZWJraXRfc291cF9yZXF1ZXN0X3NldF9wcm9wZXJ0eSAoR09iamVjdCAgICAgICpv
YmplY3QsCisJCQkJICBndWludCBwcm9wX2lkLAorCQkJCSAgY29uc3QgR1ZhbHVlICp2YWx1ZSwK
KwkJCQkgIEdQYXJhbVNwZWMgICAqcHNwZWMpCit7CisJV2ViS2l0U291cFJlcXVlc3QgKnJlcXVl
c3QgPSBXRUJLSVRfU09VUF9SRVFVRVNUIChvYmplY3QpOworCisJc3dpdGNoIChwcm9wX2lkKSB7
CisJCWNhc2UgUFJPUF9VUkk6CisJCQlpZiAocmVxdWVzdC0+cHJpdi0+dXJpKQorCQkJCXNvdXBf
dXJpX2ZyZWUgKHJlcXVlc3QtPnByaXYtPnVyaSk7CisJCQlyZXF1ZXN0LT5wcml2LT51cmkgPSBn
X3ZhbHVlX2R1cF9ib3hlZCAodmFsdWUpOworCQkJYnJlYWs7CisJCWNhc2UgUFJPUF9TRVNTSU9O
OgorCQkJaWYgKHJlcXVlc3QtPnByaXYtPnNlc3Npb24pCisJCQkJZ19vYmplY3RfdW5yZWYgKHJl
cXVlc3QtPnByaXYtPnNlc3Npb24pOworCQkJcmVxdWVzdC0+cHJpdi0+c2Vzc2lvbiA9IGdfdmFs
dWVfZHVwX29iamVjdCAodmFsdWUpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlHX09CSkVD
VF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworCQkJ
YnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfcHJv
cGVydHkgKEdPYmplY3QgICAgKm9iamVjdCwKKwkJCQkgIGd1aW50IHByb3BfaWQsCisJCQkJICBH
VmFsdWUgICAgICp2YWx1ZSwKKwkJCQkgIEdQYXJhbVNwZWMgKnBzcGVjKQoreworCVdlYktpdFNv
dXBSZXF1ZXN0ICpyZXF1ZXN0ID0gV0VCS0lUX1NPVVBfUkVRVUVTVCAob2JqZWN0KTsKKworCXN3
aXRjaCAocHJvcF9pZCkgeworCQljYXNlIFBST1BfVVJJOgorCQkJZ192YWx1ZV9zZXRfYm94ZWQg
KHZhbHVlLCByZXF1ZXN0LT5wcml2LT51cmkpOworCQkJYnJlYWs7CisJCWNhc2UgUFJPUF9TRVNT
SU9OOgorCQkJZ192YWx1ZV9zZXRfb2JqZWN0ICh2YWx1ZSwgcmVxdWVzdC0+cHJpdi0+c2Vzc2lv
bik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9Q
RVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisJCQlicmVhazsKKwl9Cit9CisKK3N0
YXRpYyBnYm9vbGVhbgord2Via2l0X3NvdXBfcmVxdWVzdF9pbml0YWJsZV9pbml0IChHSW5pdGFi
bGUgICAgICppbml0YWJsZSwKKwkJCQkgICBHQ2FuY2VsbGFibGUgICpjYW5jZWxsYWJsZSwKKwkJ
CQkgICBHRXJyb3IgICAgICAgKiplcnJvcikKK3sKKwlXZWJLaXRTb3VwUmVxdWVzdCAqcmVxdWVz
dCA9IFdFQktJVF9TT1VQX1JFUVVFU1QgKGluaXRhYmxlKTsKKwlnYm9vbGVhbiBvazsKKworCWlm
ICghcmVxdWVzdC0+cHJpdi0+dXJpKSB7CisJCWdfc2V0X2Vycm9yIChlcnJvciwgV0VCS0lUX1NP
VVBfRVJST1IsIFdFQktJVF9TT1VQX0VSUk9SX0JBRF9VUkksCisJCQkgICAgIF8gKCJObyBVUkkg
cHJvdmlkZWQiKSk7CisJCXJldHVybiBGQUxTRTsKKwl9CisKKwlvayA9IFdFQktJVF9TT1VQX1JF
UVVFU1RfR0VUX0NMQVNTIChpbml0YWJsZSktPgorCSAgICAgY2hlY2tfdXJpIChyZXF1ZXN0LCBy
ZXF1ZXN0LT5wcml2LT51cmksIGVycm9yKTsKKworCWlmICghb2sgJiYgZXJyb3IpIHsKKwkJY2hh
ciAqdXJpX3N0cmluZyA9IHNvdXBfdXJpX3RvX3N0cmluZyAocmVxdWVzdC0+cHJpdi0+dXJpLCBG
QUxTRSk7CisJCWdfc2V0X2Vycm9yIChlcnJvciwgV0VCS0lUX1NPVVBfRVJST1IsIFdFQktJVF9T
T1VQX0VSUk9SX0JBRF9VUkksCisJCQkgICAgIF8gKCJJbnZhbGlkICclcycgVVJJOiAlcyIpLAor
CQkJICAgICByZXF1ZXN0LT5wcml2LT51cmktPnNjaGVtZSwKKwkJCSAgICAgdXJpX3N0cmluZyk7
CisJCWdfZnJlZSAodXJpX3N0cmluZyk7CisJfQorCisJcmV0dXJuIG9rOworfQorCitzdGF0aWMg
Z2Jvb2xlYW4KK3dlYmtpdF9zb3VwX3JlcXVlc3RfZGVmYXVsdF9jaGVja191cmkgKFdlYktpdFNv
dXBSZXF1ZXN0ICAqcmVxdWVzdCwKKwkJCQkgICAgICAgU291cFVSSSAgICAgICp1cmksCisJCQkJ
ICAgICAgIEdFcnJvciAgICAgICoqZXJyb3IpCit7CisJcmV0dXJuIFRSVUU7Cit9CisKKy8qIERl
ZmF1bHQgaW1wbGVtZW50YXRpb246IGFzc3VtZSB0aGUgc3luYyBpbXBsZW1lbnRhdGlvbiBkb2Vz
bid0IGJsb2NrICovCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfcmVxdWVzdF9kZWZhdWx0X3Nl
bmRfYXN5bmMgKFdlYktpdFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAorCQkJCQlHQ2Fu
Y2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJCUdBc3luY1JlYWR5Q2FsbGJhY2sg
Y2FsbGJhY2ssCisJCQkJCWdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlHU2ltcGxlQXN5bmNSZXN1
bHQgKnNpbXBsZTsKKworCXNpbXBsZSA9IGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcgKEdfT0JK
RUNUIChyZXF1ZXN0KSwKKwkJCQkJICAgIGNhbGxiYWNrLCB1c2VyX2RhdGEsCisJCQkJCSAgICB3
ZWJraXRfc291cF9yZXF1ZXN0X2RlZmF1bHRfc2VuZF9hc3luYyk7CisJZ19zaW1wbGVfYXN5bmNf
cmVzdWx0X2NvbXBsZXRlX2luX2lkbGUgKHNpbXBsZSk7CisJZ19vYmplY3RfdW5yZWYgKHNpbXBs
ZSk7Cit9CisKK3N0YXRpYyBHSW5wdXRTdHJlYW0gKgord2Via2l0X3NvdXBfcmVxdWVzdF9kZWZh
dWx0X3NlbmRfZmluaXNoIChXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKKwkJ
CQkJIEdBc3luY1Jlc3VsdCAgICAgICAgICpyZXN1bHQsCisJCQkJCSBHRXJyb3IgICAgICAgICAg
ICAgICoqZXJyb3IpCit7CisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdfc2ltcGxlX2FzeW5jX3Jl
c3VsdF9pc192YWxpZCAocmVzdWx0LCBHX09CSkVDVCAocmVxdWVzdCksIHdlYmtpdF9zb3VwX3Jl
cXVlc3RfZGVmYXVsdF9zZW5kX2FzeW5jKSwgTlVMTCk7CisKKwlyZXR1cm4gd2Via2l0X3NvdXBf
cmVxdWVzdF9zZW5kIChyZXF1ZXN0LCBOVUxMLCBlcnJvcik7Cit9CisKK0dJbnB1dFN0cmVhbSAq
Cit3ZWJraXRfc291cF9yZXF1ZXN0X3NlbmQgKFdlYktpdFNvdXBSZXF1ZXN0ICAgICAgICAgICpy
ZXF1ZXN0LAorCQkJICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkgIEdF
cnJvciAgICAgICAgICAgICAgKiplcnJvcikKK3sKKwlyZXR1cm4gV0VCS0lUX1NPVVBfUkVRVUVT
VF9HRVRfQ0xBU1MgKHJlcXVlc3QpLT4KKwkgICAgICAgc2VuZCAocmVxdWVzdCwgY2FuY2VsbGFi
bGUsIGVycm9yKTsKK30KKwordm9pZAord2Via2l0X3NvdXBfcmVxdWVzdF9zZW5kX2FzeW5jIChX
ZWJLaXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKKwkJCQlHQ2FuY2VsbGFibGUgICAg
ICAgICAqY2FuY2VsbGFibGUsCisJCQkJR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKKwkJ
CQlncG9pbnRlciB1c2VyX2RhdGEpCit7CisJV0VCS0lUX1NPVVBfUkVRVUVTVF9HRVRfQ0xBU1Mg
KHJlcXVlc3QpLT4KKwlzZW5kX2FzeW5jIChyZXF1ZXN0LCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ss
IHVzZXJfZGF0YSk7Cit9CisKK0dJbnB1dFN0cmVhbSAqCit3ZWJraXRfc291cF9yZXF1ZXN0X3Nl
bmRfZmluaXNoIChXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKKwkJCQkgR0Fz
eW5jUmVzdWx0ICAgICAgICAgKnJlc3VsdCwKKwkJCQkgR0Vycm9yICAgICAgICAgICAgICAqKmVy
cm9yKQoreworCXJldHVybiBXRUJLSVRfU09VUF9SRVFVRVNUX0dFVF9DTEFTUyAocmVxdWVzdCkt
PgorCSAgICAgICBzZW5kX2ZpbmlzaCAocmVxdWVzdCwgcmVzdWx0LCBlcnJvcik7Cit9CisKK3N0
YXRpYyB2b2lkCit3ZWJraXRfc291cF9yZXF1ZXN0X2NsYXNzX2luaXQgKFdlYktpdFNvdXBSZXF1
ZXN0Q2xhc3MgKnJlcXVlc3RfY2xhc3MpCit7CisJR09iamVjdENsYXNzICpvYmplY3RfY2xhc3Mg
PSBHX09CSkVDVF9DTEFTUyAocmVxdWVzdF9jbGFzcyk7CisKKwlnX3R5cGVfY2xhc3NfYWRkX3By
aXZhdGUgKHJlcXVlc3RfY2xhc3MsIHNpemVvZiAoV2ViS2l0U291cFJlcXVlc3RQcml2YXRlKSk7
CisKKwlyZXF1ZXN0X2NsYXNzLT5jaGVja191cmkgPSB3ZWJraXRfc291cF9yZXF1ZXN0X2RlZmF1
bHRfY2hlY2tfdXJpOworCXJlcXVlc3RfY2xhc3MtPnNlbmRfYXN5bmMgPSB3ZWJraXRfc291cF9y
ZXF1ZXN0X2RlZmF1bHRfc2VuZF9hc3luYzsKKwlyZXF1ZXN0X2NsYXNzLT5zZW5kX2ZpbmlzaCA9
IHdlYmtpdF9zb3VwX3JlcXVlc3RfZGVmYXVsdF9zZW5kX2ZpbmlzaDsKKworCW9iamVjdF9jbGFz
cy0+ZmluYWxpemUgPSB3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbmFsaXplOworCW9iamVjdF9jbGFz
cy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X3NvdXBfcmVxdWVzdF9zZXRfcHJvcGVydHk7CisJb2Jq
ZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfc291cF9yZXF1ZXN0X2dldF9wcm9wZXJ0
eTsKKworCWdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKAorCQlvYmplY3RfY2xhc3Ms
IFBST1BfVVJJLAorCQlnX3BhcmFtX3NwZWNfYm94ZWQgKFdFQktJVF9TT1VQX1JFUVVFU1RfVVJJ
LAorCQkJCSAgICAiVVJJIiwKKwkJCQkgICAgIlRoZSByZXF1ZXN0IFVSSSIsCisJCQkJICAgIFNP
VVBfVFlQRV9VUkksCisJCQkJICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJV
Q1RfT05MWSkpOworCWdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKAorCQlvYmplY3Rf
Y2xhc3MsIFBST1BfU0VTU0lPTiwKKwkJZ19wYXJhbV9zcGVjX29iamVjdCAoV0VCS0lUX1NPVVBf
UkVRVUVTVF9TRVNTSU9OLAorCQkJCSAgICAgIlNlc3Npb24iLAorCQkJCSAgICAgIlRoZSByZXF1
ZXN0J3Mgc2Vzc2lvbiIsCisJCQkJICAgICBTT1VQX1RZUEVfU0VTU0lPTiwKKwkJCQkgICAgIEdf
UEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpOworfQorCitzdGF0aWMg
dm9pZAord2Via2l0X3NvdXBfcmVxdWVzdF9pbml0YWJsZV9pbnRlcmZhY2VfaW5pdCAoR0luaXRh
YmxlSWZhY2UgKmluaXRhYmxlX2ludGVyZmFjZSkKK3sKKwlpbml0YWJsZV9pbnRlcmZhY2UtPmlu
aXQgPSB3ZWJraXRfc291cF9yZXF1ZXN0X2luaXRhYmxlX2luaXQ7Cit9CisKK1NvdXBVUkkgKgor
d2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfdXJpIChXZWJLaXRTb3VwUmVxdWVzdCAqcmVxdWVzdCkK
K3sKKwlyZXR1cm4gcmVxdWVzdC0+cHJpdi0+dXJpOworfQorCitTb3VwU2Vzc2lvbiAqCit3ZWJr
aXRfc291cF9yZXF1ZXN0X2dldF9zZXNzaW9uIChXZWJLaXRTb3VwUmVxdWVzdCAqcmVxdWVzdCkK
K3sKKwlyZXR1cm4gcmVxdWVzdC0+cHJpdi0+c2Vzc2lvbjsKK30KKworZ29mZnNldAord2Via2l0
X3NvdXBfcmVxdWVzdF9nZXRfY29udGVudF9sZW5ndGggKFdlYktpdFNvdXBSZXF1ZXN0ICpyZXF1
ZXN0KQoreworCXJldHVybiBXRUJLSVRfU09VUF9SRVFVRVNUX0dFVF9DTEFTUyAocmVxdWVzdCkt
PmdldF9jb250ZW50X2xlbmd0aCAocmVxdWVzdCk7Cit9CisKK2NvbnN0IGNoYXIgKgord2Via2l0
X3NvdXBfcmVxdWVzdF9nZXRfY29udGVudF90eXBlIChXZWJLaXRTb3VwUmVxdWVzdCAgKnJlcXVl
c3QpCit7CisJcmV0dXJuIFdFQktJVF9TT1VQX1JFUVVFU1RfR0VUX0NMQVNTIChyZXF1ZXN0KS0+
Z2V0X2NvbnRlbnRfdHlwZSAocmVxdWVzdCk7Cit9CisKKyNkZWZpbmUgWERJR0lUKGMpICgoYykg
PD0gJzknID8gKGMpIC0gJzAnIDogKChjKSAmIDB4NEYpIC0gJ0EnICsgMTApCisjZGVmaW5lIEhF
WENIQVIocykgKChYRElHSVQgKHNbMV0pIDw8IDQpICsgWERJR0lUIChzWzJdKSkKKworLyogQ29w
eSZwYXN0ZWQgZnJvbSBsaWJzb3VwJ3Mgc291cC11cmkuYyBhZnRlciBhcHBseWluZyB0aGUgcGF0
Y2ggaW4KKyAqIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MzA1
NDAuIFdlIG5lZWQgdGhpcworICogaW5zdGVhZCBvZiBzb3VwX3VyaV9kZWNvZGUoKSBhcyBpdCBp
bmNvcnJlY3RseSByZXR1cm5zIE5VTEwgZm9yCisgKiBpbmNvcnJlY3RseSBlbmNvZGVkIFVSTHMu
IFRPRE86IHJlbW92ZSB0aGlzIHdoZW4gcmVxdWlyZWQgbGlic291cAorICogdmVyc2lvbiBpcyBi
dW1wZWQgb3V0IHRvIDIuMzIuMQorICovCitnY2hhciAqCit3ZWJraXRfc291cF9yZXF1ZXN0X3Vy
aV9kZWNvZGVkX2NvcHkgKGNvbnN0IGNoYXIgKnBhcnQsIGludCBsZW5ndGgpCit7CisJdW5zaWdu
ZWQgY2hhciAqcywgKmQ7CisgICAgICAgIGNoYXIgKmRlY29kZWQgPSBnX3N0cm5kdXAgKHBhcnQs
IGxlbmd0aCk7CisKKyAgICAgICAgcyA9IGQgPSAodW5zaWduZWQgY2hhciAqKWRlY29kZWQ7Cisg
ICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBpZiAoKnMgPT0gJyUnKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIWdfYXNjaWlfaXN4ZGlnaXQgKHNbMV0pIHx8CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIWdfYXNjaWlfaXN4ZGlnaXQgKHNbMl0pKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICpkKysgPSAqczsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAqZCsrID0gSEVYQ0hBUiAocyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzICs9IDI7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAg
ICAqZCsrID0gKnM7CisgICAgICAgIH0gd2hpbGUgKCpzKyspOworCisgICAgICAgIHJldHVybiBk
ZWNvZGVkOworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2Fj
aGUvc291cC1yZXF1ZXN0LmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9z
b3VwLXJlcXVlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGJhZGVm
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUv
c291cC1yZXF1ZXN0LmgKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5k
ZWYgV0VCS0lUX1NPVVBfUkVRVUVTVF9ICisjZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfSCAx
CisKKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDxnaW8vZ2lvLmg+CisKK0df
QkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1QgICAgICAgICAg
ICAod2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfdHlwZSAoKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBf
UkVRVUVTVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2Jq
KSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNULCBXZWJLaXRTb3VwUmVxdWVzdCkpCisjZGVmaW5l
IFdFQktJVF9TT1VQX1JFUVVFU1RfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
Q0FTVCAoKGtsYXNzKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNULCBXZWJLaXRTb3VwUmVxdWVz
dENsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1NPVVBfUkVRVUVTVChvYmopICAgICAgICAgKEdf
VFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNU
KSkKKyNkZWZpbmUgV0VCS0lUX0lTX1NPVVBfUkVRVUVTVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9D
SEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1QpKQorI2Rl
ZmluZSBXRUJLSVRfU09VUF9SRVFVRVNUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNF
X0dFVF9DTEFTUyAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVCwgV2ViS2l0U291cFJl
cXVlc3RDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdCBXZWJLaXRT
b3VwUmVxdWVzdDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdFByaXZhdGUgV2Vi
S2l0U291cFJlcXVlc3RQcml2YXRlOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0
Q2xhc3MgV2ViS2l0U291cFJlcXVlc3RDbGFzczsKKworc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVz
dCB7CisJR09iamVjdCBwYXJlbnQ7CisKKwlXZWJLaXRTb3VwUmVxdWVzdFByaXZhdGUgKnByaXY7
Cit9OworCitzdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0Q2xhc3MgeworCUdPYmplY3RDbGFzcyBw
YXJlbnQ7CisKKwlnYm9vbGVhbiAoKmNoZWNrX3VyaSkoV2ViS2l0U291cFJlcXVlc3QgICAgICAg
ICAgKnJlcV9iYXNlLAorCQkJICAgICAgU291cFVSSSAgICAgICAgICAgICAgKnVyaSwKKwkJCSAg
ICAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcik7CisKKwlHSW5wdXRTdHJlYW0gKiAoKnNl
bmQpKFdlYktpdFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAorCQkJICAgICAgIEdDYW5j
ZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCSAgICAgICBHRXJyb3IgICAgICAgICAg
ICAgICoqZXJyb3IpOworCXZvaWQgKCpzZW5kX2FzeW5jKShXZWJLaXRTb3VwUmVxdWVzdCAgICAg
ICAgICAqcmVxdWVzdCwKKwkJCSAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwK
KwkJCSAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCisJCQkgICBncG9pbnRlciB1c2Vy
X2RhdGEpOworCUdJbnB1dFN0cmVhbSAqICgqc2VuZF9maW5pc2gpKFdlYktpdFNvdXBSZXF1ZXN0
ICAgICAgICAgICpyZXF1ZXN0LAorCQkJCSAgICAgIEdBc3luY1Jlc3VsdCAgICAgICAgICpyZXN1
bHQsCisJCQkJICAgICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKTsKKworCWdvZmZzZXQg
KCpnZXRfY29udGVudF9sZW5ndGgpKFdlYktpdFNvdXBSZXF1ZXN0ICAgKnJlcXVlc3QpOworCWNv
bnN0IGNoYXIgKiAgICgqZ2V0X2NvbnRlbnRfdHlwZSkoV2ViS2l0U291cFJlcXVlc3QgICAqcmVx
dWVzdCk7Cit9OworCitHVHlwZSB3ZWJraXRfc291cF9yZXF1ZXN0X2dldF90eXBlICh2b2lkKTsK
KworI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNUX1VSSSAgICAgInVyaSIKKyNkZWZpbmUgV0VC
S0lUX1NPVVBfUkVRVUVTVF9TRVNTSU9OICJzZXNzaW9uIgorCitHSW5wdXRTdHJlYW0gKndlYmtp
dF9zb3VwX3JlcXVlc3Rfc2VuZCAoV2ViS2l0U291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3Qs
CisJCQkJIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkgR0Vycm9yICAg
ICAgICAgICAgICAqKmVycm9yKTsKK3ZvaWQgICAgICAgICAgd2Via2l0X3NvdXBfcmVxdWVzdF9z
ZW5kX2FzeW5jIChXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKKwkJCQkgICAg
ICAgR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJCSAgICAgICBHQXN5bmNS
ZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAorCQkJCSAgICAgICBncG9pbnRlciB1c2VyX2RhdGEpOwor
R0lucHV0U3RyZWFtICp3ZWJraXRfc291cF9yZXF1ZXN0X3NlbmRfZmluaXNoIChXZWJLaXRTb3Vw
UmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKKwkJCQkJR0FzeW5jUmVzdWx0ICAgICAgICAgKnJl
c3VsdCwKKwkJCQkJR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKTsKKworU291cFVSSSAgICAg
ICp3ZWJraXRfc291cF9yZXF1ZXN0X2dldF91cmkgKFdlYktpdFNvdXBSZXF1ZXN0ICAgICAgICAg
ICpyZXF1ZXN0KTsKK1NvdXBTZXNzaW9uICAqd2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfc2Vzc2lv
biAoV2ViS2l0U291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QpOworCitnb2Zmc2V0ICAgICAg
IHdlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X2NvbnRlbnRfbGVuZ3RoIChXZWJLaXRTb3VwUmVxdWVz
dCAgICAgICAgICAqcmVxdWVzdCk7Citjb25zdCBjaGFyICAgKndlYmtpdF9zb3VwX3JlcXVlc3Rf
Z2V0X2NvbnRlbnRfdHlwZSAoV2ViS2l0U291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QpOwor
CisvKiBVc2VkIGJ5IFdlYktpdFNvdXBSZXF1ZXN0RmlsZSBhbmQgV2ViS2l0U291cFJlcXVlc3RE
YXRhLiBJZGVhbGx5CisgKiBzaG91bGQgYmUgbG9jYXRlZCBpbiBzb21lIHV0aWwgZmlsZSBidXQg
SSdsbCBwbGFjZSBpdCBoZXJlIGFzIGl0CisgKiB3aWxsIGJlIHJlbW92ZWQgd2l0aCBsaWJzb3Vw
IDIuMzIuMSB0aGF0IHdpbGwgc2hpcCBmaXhlZCB2ZXJzaW9ucworICogb2Ygc291cF91cmlfZGVj
b2RlL25vcm1hbGl6ZQorICovCitnY2hhciAqd2Via2l0X3NvdXBfcmVxdWVzdF91cmlfZGVjb2Rl
ZF9jb3B5IChjb25zdCBjaGFyICpwYXJ0LCBpbnQgbGVuZ3RoKTsKKworR19FTkRfREVDTFMKKwor
I2VuZGlmIC8qIFdFQktJVF9TT1VQX1JFUVVFU1RfSCAqLwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuYyBiL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNGYyYzVhYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmMKQEAgLTAsMCArMSwx
ODcgQEAKKy8qCisgKiBzb3VwLXJlcXVlc3Rlci5jOgorICoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCwgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInNvdXAtcmVxdWVz
dGVyLmgiCisKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3QtZGF0YS5oIgorI2luY2x1ZGUgInNvdXAt
cmVxdWVzdC1maWxlLmgiCisjaW5jbHVkZSAic291cC1yZXF1ZXN0LWh0dHAuaCIKKyNpbmNsdWRl
IDxnbGliL2dpMThuLmg+CisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CisKK3N0cnVjdCBfV2Vi
S2l0U291cFJlcXVlc3RlclByaXZhdGUgeworCUdIYXNoVGFibGUgKnJlcXVlc3RfdHlwZXM7Cit9
OworCisjZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RFUl9HRVRfUFJJVkFURShvKSAoR19UWVBF
X0lOU1RBTkNFX0dFVF9QUklWQVRFICgobyksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVEVSLCBX
ZWJLaXRTb3VwUmVxdWVzdGVyUHJpdmF0ZSkpCisKK0dfREVGSU5FX1RZUEUgKFdlYktpdFNvdXBS
ZXF1ZXN0ZXIsIHdlYmtpdF9zb3VwX3JlcXVlc3RlciwgR19UWVBFX09CSkVDVCkKKworc3RhdGlj
IHZvaWQgd2Via2l0X3NvdXBfcmVxdWVzdGVyX2luaXQgKFdlYktpdFNvdXBSZXF1ZXN0ZXIgKnJl
cXVlc3RlcikKK3sKKwlyZXF1ZXN0ZXItPnByaXYgPSBXRUJLSVRfU09VUF9SRVFVRVNURVJfR0VU
X1BSSVZBVEUgKHJlcXVlc3Rlcik7CisKKwlyZXF1ZXN0ZXItPnByaXYtPnJlcXVlc3RfdHlwZXMg
PSAwOworfQorCitzdGF0aWMgdm9pZCBmaW5hbGl6ZSAoR09iamVjdCAqb2JqZWN0KQoreworCVdl
YktpdFNvdXBSZXF1ZXN0ZXIgKnJlcXVlc3RlciA9IFdFQktJVF9TT1VQX1JFUVVFU1RFUiAob2Jq
ZWN0KTsKKworCWlmIChyZXF1ZXN0ZXItPnByaXYtPnJlcXVlc3RfdHlwZXMpCisJCWdfaGFzaF90
YWJsZV9kZXN0cm95IChyZXF1ZXN0ZXItPnByaXYtPnJlcXVlc3RfdHlwZXMpOworCisJR19PQkpF
Q1RfQ0xBU1MgKHdlYmtpdF9zb3VwX3JlcXVlc3Rlcl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAo
b2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3NvdXBfcmVxdWVzdGVyX2NsYXNzX2lu
aXQgKFdlYktpdFNvdXBSZXF1ZXN0ZXJDbGFzcyAqcmVxdWVzdGVyX2NsYXNzKQoreworCUdPYmpl
Y3RDbGFzcyAqb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKHJlcXVlc3Rlcl9jbGFzcyk7
CisKKwlnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUgKHJlcXVlc3Rlcl9jbGFzcywgc2l6ZW9mIChX
ZWJLaXRTb3VwUmVxdWVzdGVyUHJpdmF0ZSkpOworCisJLyogdmlydHVhbCBtZXRob2Qgb3ZlcnJp
ZGUgKi8KKwlvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gZmluYWxpemU7Cit9CisKK3N0YXRpYyB2
b2lkIGluaXRfcmVxdWVzdF90eXBlcyAoV2ViS2l0U291cFJlcXVlc3RlclByaXZhdGUgKnByaXYp
Cit7CisJaWYgKHByaXYtPnJlcXVlc3RfdHlwZXMpCisJCXJldHVybjsKKworCXByaXYtPnJlcXVl
c3RfdHlwZXMgPSBnX2hhc2hfdGFibGVfbmV3X2Z1bGwgKHNvdXBfc3RyX2Nhc2VfaGFzaCwKKwkJ
CQkJCSAgICAgc291cF9zdHJfY2FzZV9lcXVhbCwKKwkJCQkJCSAgICAgZ19mcmVlLCAwKTsKKwln
X2hhc2hfdGFibGVfaW5zZXJ0IChwcml2LT5yZXF1ZXN0X3R5cGVzLCBnX3N0cmR1cCAoImZpbGUi
KSwKKwkJCSAgICAgR1NJWkVfVE9fUE9JTlRFUiAoV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0ZJ
TEUpKTsKKwlnX2hhc2hfdGFibGVfaW5zZXJ0IChwcml2LT5yZXF1ZXN0X3R5cGVzLCBnX3N0cmR1
cCAoImRhdGEiKSwKKwkJCSAgICAgR1NJWkVfVE9fUE9JTlRFUiAoV0VCS0lUX1RZUEVfU09VUF9S
RVFVRVNUX0RBVEEpKTsKKwlnX2hhc2hfdGFibGVfaW5zZXJ0IChwcml2LT5yZXF1ZXN0X3R5cGVz
LCBnX3N0cmR1cCAoImh0dHAiKSwKKwkJCSAgICAgR1NJWkVfVE9fUE9JTlRFUiAoV0VCS0lUX1RZ
UEVfU09VUF9SRVFVRVNUX0hUVFApKTsKKwlnX2hhc2hfdGFibGVfaW5zZXJ0IChwcml2LT5yZXF1
ZXN0X3R5cGVzLCBnX3N0cmR1cCAoImh0dHBzIiksCisJCQkgICAgIEdTSVpFX1RPX1BPSU5URVIg
KFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9IVFRQKSk7CisJZ19oYXNoX3RhYmxlX2luc2VydCAo
cHJpdi0+cmVxdWVzdF90eXBlcywgZ19zdHJkdXAgKCJmdHAiKSwKKwkJCSAgICAgR1NJWkVfVE9f
UE9JTlRFUiAoV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0ZJTEUpKTsKK30KKworV2ViS2l0U291
cFJlcXVlc3RlciAqd2Via2l0X3NvdXBfcmVxdWVzdGVyX25ldyAodm9pZCkKK3sKKwlyZXR1cm4g
KFdlYktpdFNvdXBSZXF1ZXN0ZXIgKilnX29iamVjdF9uZXcgKFdFQktJVF9UWVBFX1NPVVBfUkVR
VUVTVEVSLCAwKTsKK30KKworV2ViS2l0U291cFJlcXVlc3QgKndlYmtpdF9zb3VwX3JlcXVlc3Rl
cl9yZXF1ZXN0IChXZWJLaXRTb3VwUmVxdWVzdGVyICpyZXF1ZXN0ZXIsIGNvbnN0IGNoYXIgKnVy
aVN0cmluZywgU291cFNlc3Npb24gKnNlc3Npb24sIEdFcnJvciAqKmVycm9yKQoreworCVNvdXBV
UkkgKnVyaSA9IE5VTEw7CisJV2ViS2l0U291cFJlcXVlc3QgKnJlcTsKKworCXVyaSA9IHNvdXBf
dXJpX25ldyAodXJpU3RyaW5nKTsKKwlpZiAoIXVyaSkgeworCQlnX3NldF9lcnJvciAoZXJyb3Is
IFdFQktJVF9TT1VQX0VSUk9SLCBXRUJLSVRfU09VUF9FUlJPUl9CQURfVVJJLAorCQkJICAgICBf
ICgiQ291bGQgbm90IHBhcnNlIFVSSSAnJXMnIiksIHVyaVN0cmluZyk7CisJCXJldHVybiAwOwor
CX0KKworCXJlcSA9IHdlYmtpdF9zb3VwX3JlcXVlc3Rlcl9yZXF1ZXN0X3VyaSAocmVxdWVzdGVy
LCB1cmksIHNlc3Npb24sIGVycm9yKTsKKwlzb3VwX3VyaV9mcmVlICh1cmkpOworCXJldHVybiBy
ZXE7Cit9CisKK1dlYktpdFNvdXBSZXF1ZXN0ICp3ZWJraXRfc291cF9yZXF1ZXN0ZXJfcmVxdWVz
dF91cmkgKFdlYktpdFNvdXBSZXF1ZXN0ZXIgKnJlcXVlc3RlciwgU291cFVSSSAqdXJpLCBTb3Vw
U2Vzc2lvbiAqc2Vzc2lvbiwgR0Vycm9yICoqZXJyb3IpCit7CisJR1R5cGUgcmVxdWVzdFR5cGU7
CisKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoV0VCS0lUX0lTX1NPVVBfUkVRVUVTVEVSIChyZXF1
ZXN0ZXIpLCAwKTsKKworCWluaXRfcmVxdWVzdF90eXBlcyAocmVxdWVzdGVyLT5wcml2KTsKKwly
ZXF1ZXN0VHlwZSA9IChHVHlwZSlHUE9JTlRFUl9UT19TSVpFIChnX2hhc2hfdGFibGVfbG9va3Vw
IChyZXF1ZXN0ZXItPnByaXYtPnJlcXVlc3RfdHlwZXMsIHVyaS0+c2NoZW1lKSk7CisJaWYgKCFy
ZXF1ZXN0VHlwZSkgeworCQlnX3NldF9lcnJvciAoZXJyb3IsIFdFQktJVF9TT1VQX0VSUk9SLCBX
RUJLSVRfU09VUF9FUlJPUl9VTlNVUFBPUlRFRF9VUklfU0NIRU1FLAorCQkJICAgICBfICgiVW5z
dXBwb3J0ZWQgVVJJIHNjaGVtZSAnJXMnIiksIHVyaS0+c2NoZW1lKTsKKwkJcmV0dXJuIDA7CisJ
fQorCisJaWYgKGdfdHlwZV9pc19hIChyZXF1ZXN0VHlwZSwgR19UWVBFX0lOSVRBQkxFKSkgewor
CQlyZXR1cm4gKFdlYktpdFNvdXBSZXF1ZXN0ICopZ19pbml0YWJsZV9uZXcgKHJlcXVlc3RUeXBl
LCAwLCBlcnJvciwKKwkJCQkJCQkgICAgInVyaSIsIHVyaSwKKwkJCQkJCQkgICAgInNlc3Npb24i
LCBzZXNzaW9uLAorCQkJCQkJCSAgICAwKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gKFdlYktpdFNv
dXBSZXF1ZXN0ICopZ19vYmplY3RfbmV3IChyZXF1ZXN0VHlwZSwKKwkJCQkJCQkgICJ1cmkiLCB1
cmksCisJCQkJCQkJICAic2Vzc2lvbiIsIHNlc3Npb24sCisJCQkJCQkJICAwKTsKKwl9Cit9CisK
Ky8qIFJGQyAyMzk2LCAzLjEgKi8KK3N0YXRpYyBnYm9vbGVhbgorc291cF9zY2hlbWVfaXNfdmFs
aWQgKGNvbnN0IGNoYXIgKnNjaGVtZSkKK3sKKwlpZiAoc2NoZW1lID09IE5VTEwgfHwKKwkgICAg
IWdfYXNjaWlfaXNhbHBoYSAoKnNjaGVtZSkpCisJCXJldHVybiBGQUxTRTsKKworCXNjaGVtZSsr
OworCXdoaWxlICgqc2NoZW1lKSB7CisJCWlmICghZ19hc2NpaV9pc2FscGhhICgqc2NoZW1lKSAm
JgorCQkgICAgIWdfYXNjaWlfaXNkaWdpdCAoKnNjaGVtZSkgJiYKKwkJICAgICpzY2hlbWUgIT0g
JysnICYmCisJCSAgICAqc2NoZW1lICE9ICctJyAmJgorCQkgICAgKnNjaGVtZSAhPSAnLicpCisJ
CQlyZXR1cm4gRkFMU0U7CisJCXNjaGVtZSsrOworCX0KKwlyZXR1cm4gVFJVRTsKK30KKwordm9p
ZAord2Via2l0X3NvdXBfcmVxdWVzdGVyX2FkZF9wcm90b2NvbCAoV2ViS2l0U291cFJlcXVlc3Rl
ciAqcmVxdWVzdGVyLAorCQkJCSAgICBjb25zdCBjaGFyICAqc2NoZW1lLAorCQkJCSAgICBHVHlw
ZSByZXF1ZXN0X3R5cGUpCit7CisJZ19yZXR1cm5faWZfZmFpbCAoV0VCS0lUX0lTX1NPVVBfUkVR
VUVTVEVSIChyZXF1ZXN0ZXIpKTsKKwlnX3JldHVybl9pZl9mYWlsIChzb3VwX3NjaGVtZV9pc192
YWxpZCAoc2NoZW1lKSk7CisKKwlpbml0X3JlcXVlc3RfdHlwZXMgKHJlcXVlc3Rlci0+cHJpdik7
CisJZ19oYXNoX3RhYmxlX2luc2VydCAocmVxdWVzdGVyLT5wcml2LT5yZXF1ZXN0X3R5cGVzLCBn
X3N0cmR1cCAoc2NoZW1lKSwKKwkJCSAgICAgR1NJWkVfVE9fUE9JTlRFUiAocmVxdWVzdF90eXBl
KSk7Cit9CisKK3ZvaWQKK3dlYmtpdF9zb3VwX3JlcXVlc3Rlcl9yZW1vdmVfcHJvdG9jb2wgKFdl
YktpdFNvdXBSZXF1ZXN0ZXIgKnJlcXVlc3RlciwKKwkJCQkgICAgICAgY29uc3QgY2hhciAgKnNj
aGVtZSkKK3sKKwlnX3JldHVybl9pZl9mYWlsIChXRUJLSVRfSVNfU09VUF9SRVFVRVNURVIgKHJl
cXVlc3RlcikpOworCWdfcmV0dXJuX2lmX2ZhaWwgKHNvdXBfc2NoZW1lX2lzX3ZhbGlkIChzY2hl
bWUpKTsKKworCWluaXRfcmVxdWVzdF90eXBlcyAocmVxdWVzdGVyLT5wcml2KTsKKwlnX2hhc2hf
dGFibGVfcmVtb3ZlIChyZXF1ZXN0ZXItPnByaXYtPnJlcXVlc3RfdHlwZXMsIHNjaGVtZSk7Cit9
CisKK0dRdWFyaword2Via2l0X3NvdXBfZXJyb3JfcXVhcmsgKHZvaWQpCit7CisJc3RhdGljIEdR
dWFyayBlcnJvcjsKKwlpZiAoIWVycm9yKQorCQllcnJvciA9IGdfcXVhcmtfZnJvbV9zdGF0aWNf
c3RyaW5nICgid2Via2l0X3NvdXBfZXJyb3JfcXVhcmsiKTsKKwlyZXR1cm4gZXJyb3I7Cit9CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVl
c3Rlci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTk1YmZmCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1
ZXN0ZXIuaApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxp
YSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZm5kZWYgV0VCS0lUX1NPVVBfUkVRVUVTVEVSX0gKKyNkZWZpbmUgV0VCS0lUX1NP
VVBfUkVRVUVTVEVSX0ggMQorCisjaW5jbHVkZSAic291cC1yZXF1ZXN0LmgiCisjaW5jbHVkZSA8
bGlic291cC9zb3VwLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9T
T1VQX1JFUVVFU1RFUiAgICAgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0ZXJfZ2V0X3R5cGUg
KCkpCisjZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RFUihvYmopICAgICAgICAgICAgKEdfVFlQ
RV9DSEVDS19JTlNUQU5DRV9DQVNUICgob2JqKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNURVIs
IFdlYktpdFNvdXBSZXF1ZXN0ZXIpKQorI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNURVJfQ0xB
U1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgV0VCS0lUX1RZ
UEVfU09VUF9SRVFVRVNURVIsIFdlYktpdFNvdXBSZXF1ZXN0ZXJDbGFzcykpCisjZGVmaW5lIFdF
QktJVF9JU19TT1VQX1JFUVVFU1RFUihvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5D
RV9UWVBFICgob2JqKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNURVIpKQorI2RlZmluZSBXRUJL
SVRfSVNfU09VUF9SRVFVRVNURVJfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQ
RSAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVEVSKSkKKyNkZWZpbmUgV0VCS0lUX1NP
VVBfUkVRVUVTVEVSX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAo
KG9iaiksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVEVSLCBXZWJLaXRTb3VwUmVxdWVzdGVyQ2xh
c3MpKQorCisjZGVmaW5lIFdFQktJVF9TT1VQX0VSUk9SIHdlYmtpdF9zb3VwX2Vycm9yX3F1YXJr
ICgpCisKK3R5cGVkZWYgZW51bSB7CisJV0VCS0lUX1NPVVBfRVJST1JfQkFEX1VSSSwKKwlXRUJL
SVRfU09VUF9FUlJPUl9VTlNVUFBPUlRFRF9VUklfU0NIRU1FCit9IFdlYktpdFNvdXBFcnJvcjsK
KwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0ZXIgV2ViS2l0U291cFJlcXVlc3Rl
cjsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdGVyUHJpdmF0ZSBXZWJLaXRTb3Vw
UmVxdWVzdGVyUHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdGVyIHsKKwlHT2Jq
ZWN0IHBhcmVudDsKKworCVdlYktpdFNvdXBSZXF1ZXN0ZXJQcml2YXRlICpwcml2OworfTsKKwor
dHlwZWRlZiBzdHJ1Y3QgeworCUdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9IFdlYktpdFNv
dXBSZXF1ZXN0ZXJDbGFzczsKKworR1R5cGUgd2Via2l0X3NvdXBfcmVxdWVzdGVyX2dldF90eXBl
ICh2b2lkKTsKKworV2ViS2l0U291cFJlcXVlc3RlciAqd2Via2l0X3NvdXBfcmVxdWVzdGVyX25l
dyAodm9pZCk7CisKK0dRdWFyayB3ZWJraXRfc291cF9lcnJvcl9xdWFyayAodm9pZCk7CisKK1dl
YktpdFNvdXBSZXF1ZXN0ICp3ZWJraXRfc291cF9yZXF1ZXN0ZXJfcmVxdWVzdCAoV2ViS2l0U291
cFJlcXVlc3RlciAqcmVxdWVzdGVyLAorCQkJCQkgICBjb25zdCBjaGFyICp1cmlTdHJpbmcsCisJ
CQkJCSAgIFNvdXBTZXNzaW9uICpzZXNzaW9uLAorCQkJCQkgICBHRXJyb3IgKiplcnJvcik7CisK
K1dlYktpdFNvdXBSZXF1ZXN0ICp3ZWJraXRfc291cF9yZXF1ZXN0ZXJfcmVxdWVzdF91cmkgKFdl
YktpdFNvdXBSZXF1ZXN0ZXIgKnJlcXVlc3RlciwKKwkJCQkJICAgICAgIFNvdXBVUkkgKnVyaSwK
KwkJCQkJICAgICAgIFNvdXBTZXNzaW9uICpzZXNzaW9uLAorCQkJCQkgICAgICAgR0Vycm9yICoq
ZXJyb3IpOworCit2b2lkIHdlYmtpdF9zb3VwX3JlcXVlc3Rlcl9hZGRfcHJvdG9jb2wgKFdlYktp
dFNvdXBSZXF1ZXN0ZXIgKnJlcXVlc3RlciwKKwkJCQkgIGNvbnN0IGNoYXIgICpzY2hlbWUsCisJ
CQkJICBHVHlwZSByZXF1ZXN0X3R5cGUpOworCit2b2lkIHdlYmtpdF9zb3VwX3JlcXVlc3Rlcl9y
ZW1vdmVfcHJvdG9jb2wgKFdlYktpdFNvdXBSZXF1ZXN0ZXIgKnJlcXVlc3RlciwKKwkJCQkgICAg
IGNvbnN0IGNoYXIgICpzY2hlbWUpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lU
X1NPVVBfUkVRVUVTVEVSX0ggKi8KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLXByaXZhdGUuaCBiL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLXByaXZhdGUuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTE0N2YzCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUtcHJp
dmF0ZS5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBzb3VwLWNhY2hlLXByaXZhdGUuaDoKKyAq
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV0VCS0lUX1NPVVBf
Q0FDSEVfUFJJVkFURV9ICisjZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX1BSSVZBVEVfSCAxCisK
KyNpbmNsdWRlICJzb3VwLWNhY2hlLmgiCisjaW5jbHVkZSA8bGlic291cC9zb3VwLW1lc3NhZ2Uu
aD4KKworR19CRUdJTl9ERUNMUworCitXZWJLaXRTb3VwQ2FjaGVSZXNwb25zZSB3ZWJraXRfc291
cF9jYWNoZV9oYXNfcmVzcG9uc2UgKFdlYktpdFNvdXBDYWNoZSAgICpjYWNoZSwKKwkJCQkJCQlT
b3VwTWVzc2FnZSAqbXNnKTsKK0dJbnB1dFN0cmVhbSAqd2Via2l0X3NvdXBfY2FjaGVfc2VuZF9y
ZXNwb25zZSAoV2ViS2l0U291cENhY2hlICAgKmNhY2hlLAorCQkJCQkgICAgICAgU291cE1lc3Nh
Z2UgKm1zZyk7CitXZWJLaXRTb3VwQ2FjaGVhYmlsaXR5ICB3ZWJraXRfc291cF9jYWNoZV9nZXRf
Y2FjaGVhYmlsaXR5IChXZWJLaXRTb3VwQ2FjaGUgICAqY2FjaGUsCisJCQkJCQkJICAgIFNvdXBN
ZXNzYWdlICptc2cpOworU291cE1lc3NhZ2UgKndlYmtpdF9zb3VwX2NhY2hlX2dlbmVyYXRlX2Nv
bmRpdGlvbmFsX3JlcXVlc3QgKFdlYktpdFNvdXBDYWNoZSAgICpjYWNoZSwKKwkJCQkJCQkgICAg
IFNvdXBNZXNzYWdlICpvcmlnaW5hbCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJL
SVRfU09VUF9DQUNIRV9QUklWQVRFX0ggKi8KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLmMgYi9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5jCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjcyYWNmYjMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5jCkBAIC0wLDAgKzEs
MTY1MiBAQAorLyoKKyAqIHNvdXAtY2FjaGUuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwg
MjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisvKiBUT0RPOgorICogLSBOZWVkIHRvIGhvb2sgdGhlIGZlYXR1cmUg
aW4gdGhlIHN5bmMgU291cFNlc3Npb24uCisgKiAtIE5lZWQgbW9yZSB0ZXN0cy4KKyAqLworCisj
aWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNs
dWRlICJzb3VwLWNhY2hlLmgiCisjaW5jbHVkZSAic291cC1jYWNoZS1wcml2YXRlLmgiCisjaW5j
bHVkZSA8bGlic291cC9zb3VwLmg+CisjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUgPHN0
ZGxpYi5oPgorCitzdGF0aWMgU291cFNlc3Npb25GZWF0dXJlSW50ZXJmYWNlICp3ZWJraXRfc291
cF9jYWNoZV9kZWZhdWx0X2ZlYXR1cmVfaW50ZXJmYWNlOworc3RhdGljIHZvaWQgd2Via2l0X3Nv
dXBfY2FjaGVfc2Vzc2lvbl9mZWF0dXJlX2luaXQgKFNvdXBTZXNzaW9uRmVhdHVyZUludGVyZmFj
ZSAqZmVhdHVyZV9pbnRlcmZhY2UsIGdwb2ludGVyIGludGVyZmFjZV9kYXRhKTsKKworI2RlZmlu
ZSBERUZBVUxUX01BWF9TSVpFIDUwICogMTAyNCAqIDEwMjQKKyNkZWZpbmUgTUFYX0VOVFJZX0RB
VEFfUEVSQ0VOVEFHRSAxMCAvKiBQZXJjZW50YWdlIG9mIHRoZSB0b3RhbCBzaXplCisJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgY2FjaGUgdGhhdCBjYW4gYmUKKwkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxlZCBieSBhIHNpbmdsZSBlbnRyeSAqLwor
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0U291cENhY2hlRW50cnkgeworCWNoYXIgKmtleTsKKwlj
aGFyICpmaWxlbmFtZTsKKwlndWludCBmcmVzaG5lc3NfbGlmZXRpbWU7CisJZ2Jvb2xlYW4gbXVz
dF9yZXZhbGlkYXRlOworCUdTdHJpbmcgKmRhdGE7CisJZ3NpemUgcG9zOworCWdzaXplIGxlbmd0
aDsKKwl0aW1lX3QgY29ycmVjdGVkX2luaXRpYWxfYWdlOworCXRpbWVfdCByZXNwb25zZV90aW1l
OworCWdib29sZWFuIHdyaXRpbmc7CisJZ2Jvb2xlYW4gZGlydHk7CisJZ2Jvb2xlYW4gZ290X2Jv
ZHk7CisJZ2Jvb2xlYW4gYmVpbmdfdmFsaWRhdGVkOworCVNvdXBNZXNzYWdlSGVhZGVycyAqaGVh
ZGVyczsKKwlHT3V0cHV0U3RyZWFtICpzdHJlYW07CisJR0Vycm9yICplcnJvcjsKKwlndWludCBo
aXRzOworCUdDYW5jZWxsYWJsZSAqY2FuY2VsbGFibGU7Cit9IFdlYktpdFNvdXBDYWNoZUVudHJ5
OworCitzdHJ1Y3QgX1dlYktpdFNvdXBDYWNoZVByaXZhdGUgeworCWNoYXIgKmNhY2hlX2RpcjsK
KwlHSGFzaFRhYmxlICpjYWNoZTsKKwlndWludCBuX3BlbmRpbmc7CisJU291cFNlc3Npb24gKnNl
c3Npb247CisJV2ViS2l0U291cENhY2hlVHlwZSBjYWNoZV90eXBlOworCWd1aW50IHNpemU7CisJ
Z3VpbnQgbWF4X3NpemU7CisJZ3VpbnQgbWF4X2VudHJ5X2RhdGFfc2l6ZTsgLyogQ29tcHV0ZWQg
dmFsdWUuIEhlcmUgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgKi8KKwlHTGlzdCAqbHJ1X3N0YXJ0
OworfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCVdlYktpdFNvdXBDYWNoZSAqY2FjaGU7CisJV2Vi
S2l0U291cENhY2hlRW50cnkgKmVudHJ5OworCVNvdXBNZXNzYWdlICptc2c7CisJZ3Vsb25nIGdv
dF9jaHVua19oYW5kbGVyOworCWd1bG9uZyBnb3RfYm9keV9oYW5kbGVyOworCWd1bG9uZyByZXN0
YXJ0ZWRfaGFuZGxlcjsKK30gV2ViS2l0U291cENhY2hlV3JpdGluZ0ZpeHR1cmU7CisKK2VudW0g
eworCVBST1BfMCwKKwlQUk9QX0NBQ0hFX0RJUiwKKwlQUk9QX0NBQ0hFX1RZUEUKK307CisKKyNk
ZWZpbmUgV0VCS0lUX1NPVVBfQ0FDSEVfR0VUX1BSSVZBVEUobykgKEdfVFlQRV9JTlNUQU5DRV9H
RVRfUFJJVkFURSAoKG8pLCBXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFLCBXZWJLaXRTb3VwQ2FjaGVQ
cml2YXRlKSkKKworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUgKFdlYktpdFNvdXBDYWNoZSwgd2Vi
a2l0X3NvdXBfY2FjaGUsIEdfVFlQRV9PQkpFQ1QsCisJCQkgR19JTVBMRU1FTlRfSU5URVJGQUNF
IChTT1VQX1RZUEVfU0VTU0lPTl9GRUFUVVJFLAorCQkJCQkJd2Via2l0X3NvdXBfY2FjaGVfc2Vz
c2lvbl9mZWF0dXJlX2luaXQpKQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3NvdXBfY2FjaGVf
ZW50cnlfcmVtb3ZlIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLCBXZWJLaXRTb3VwQ2FjaGVFbnRy
eSAqZW50cnkpOworc3RhdGljIHZvaWQgbWFrZV9yb29tX2Zvcl9uZXdfZW50cnkgKFdlYktpdFNv
dXBDYWNoZSAqY2FjaGUsIGd1aW50IGxlbmd0aF90b19hZGQpOworc3RhdGljIGdib29sZWFuIGNh
Y2hlX2FjY2VwdHNfZW50cmllc19vZl9zaXplIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLCBndWlu
dCBsZW5ndGhfdG9fYWRkKTsKKworc3RhdGljIFdlYktpdFNvdXBDYWNoZWFiaWxpdHkKK2dldF9j
YWNoZWFiaWxpdHkgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsIFNvdXBNZXNzYWdlICptc2cpCit7
CisJV2ViS2l0U291cENhY2hlYWJpbGl0eSBjYWNoZWFiaWxpdHk7CisJY29uc3QgY2hhciAqY2Fj
aGVfY29udHJvbDsKKworCS8qIDEuIFRoZSByZXF1ZXN0IG1ldGhvZCBtdXN0IGJlIGNhY2hlYWJs
ZSAqLworCWlmIChtc2ctPm1ldGhvZCA9PSBTT1VQX01FVEhPRF9HRVQpCisJCWNhY2hlYWJpbGl0
eSA9IFdFQktJVF9TT1VQX0NBQ0hFX0NBQ0hFQUJMRTsKKwllbHNlIGlmIChtc2ctPm1ldGhvZCA9
PSBTT1VQX01FVEhPRF9IRUFEIHx8CisJCSBtc2ctPm1ldGhvZCA9PSBTT1VQX01FVEhPRF9UUkFD
RSB8fAorCQkgbXNnLT5tZXRob2QgPT0gU09VUF9NRVRIT0RfQ09OTkVDVCkKKwkJcmV0dXJuIFdF
QktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFOworCWVsc2UKKwkJcmV0dXJuIChXRUJLSVRfU09V
UF9DQUNIRV9VTkNBQ0hFQUJMRSB8IFdFQktJVF9TT1VQX0NBQ0hFX0lOVkFMSURBVEVTKTsKKwor
CWNhY2hlX2NvbnRyb2wgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKG1zZy0+cmVzcG9uc2Vf
aGVhZGVycywgIkNhY2hlLUNvbnRyb2wiKTsKKwlpZiAoY2FjaGVfY29udHJvbCkgeworCQlHSGFz
aFRhYmxlICpoYXNoOworCQlXZWJLaXRTb3VwQ2FjaGVQcml2YXRlICpwcml2ID0gV0VCS0lUX1NP
VVBfQ0FDSEVfR0VUX1BSSVZBVEUgKGNhY2hlKTsKKworCQloYXNoID0gc291cF9oZWFkZXJfcGFy
c2VfcGFyYW1fbGlzdCAoY2FjaGVfY29udHJvbCk7CisKKwkJLyogU2hhcmVkIGNhY2hlcyBNVVNU
IE5PVCBzdG9yZSBwcml2YXRlIHJlc291cmNlcyAqLworCQlpZiAocHJpdi0+Y2FjaGVfdHlwZSA9
PSBXRUJLSVRfU09VUF9DQUNIRV9TSEFSRUQpIHsKKwkJCWlmIChnX2hhc2hfdGFibGVfbG9va3Vw
X2V4dGVuZGVkIChoYXNoLCAicHJpdmF0ZSIsIE5VTEwsIE5VTEwpKSB7CisJCQkJc291cF9oZWFk
ZXJfZnJlZV9wYXJhbV9saXN0IChoYXNoKTsKKwkJCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVf
VU5DQUNIRUFCTEU7CisJCQl9CisJCX0KKworCQkvKiAyLiBUaGUgJ25vLXN0b3JlJyBjYWNoZSBk
aXJlY3RpdmUgZG9lcyBub3QgYXBwZWFyIGluIHRoZQorCQkgKiBoZWFkZXJzCisJCSAqLworCQlp
ZiAoZ19oYXNoX3RhYmxlX2xvb2t1cF9leHRlbmRlZCAoaGFzaCwgIm5vLXN0b3JlIiwgTlVMTCwg
TlVMTCkpIHsKKwkJCXNvdXBfaGVhZGVyX2ZyZWVfcGFyYW1fbGlzdCAoaGFzaCk7CisJCQlyZXR1
cm4gV0VCS0lUX1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEU7CisJCX0KKworCQkvKiBUaGlzIGRvZXMg
bm90IGFwcGVhciBpbiBzZWN0aW9uIDIuMSwgYnV0IEkgdGhpbmsgaXQgbWFrZXMKKwkJICogc2Vu
c2UgdG8gY2hlY2sgaXQgdG9vPworCQkgKi8KKwkJaWYgKGdfaGFzaF90YWJsZV9sb29rdXBfZXh0
ZW5kZWQgKGhhc2gsICJuby1jYWNoZSIsIE5VTEwsIE5VTEwpKSB7CisJCQlzb3VwX2hlYWRlcl9m
cmVlX3BhcmFtX2xpc3QgKGhhc2gpOworCQkJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FD
SEVBQkxFOworCQl9CisJfQorCisJc3dpdGNoIChtc2ctPnN0YXR1c19jb2RlKSB7CisJCWNhc2Ug
U09VUF9TVEFUVVNfUEFSVElBTF9DT05URU5UOgorCQkJLyogV2UgZG9uJ3QgY2FjaGUgcGFydGlh
bCByZXNwb25zZXMsIGJ1dCB0aGV5IG9ubHkKKwkJCSAqIGludmFsaWRhdGUgY2FjaGVkIGZ1bGwg
cmVzcG9uc2VzIGlmIHRoZSBoZWFkZXJzCisJCQkgKiBkb24ndCBtYXRjaC4KKwkJCSAqLworCQkJ
Y2FjaGVhYmlsaXR5ID0gV0VCS0lUX1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEU7CisJCQlicmVhazsK
KworCQljYXNlIFNPVVBfU1RBVFVTX05PVF9NT0RJRklFRDoKKwkJCS8qIEEgMzA0IHJlc3BvbnNl
IHZhbGlkYXRlcyBhbiBleGlzdGluZyBjYWNoZSBlbnRyeSAqLworCQkJY2FjaGVhYmlsaXR5ID0g
V0VCS0lUX1NPVVBfQ0FDSEVfVkFMSURBVEVTOworCQkJYnJlYWs7CisKKwkJY2FzZSBTT1VQX1NU
QVRVU19NVUxUSVBMRV9DSE9JQ0VTOgorCQljYXNlIFNPVVBfU1RBVFVTX01PVkVEX1BFUk1BTkVO
VExZOgorCQljYXNlIFNPVVBfU1RBVFVTX0dPTkU6CisJCQkvKiBGSVhNRTogY2FjaGVhYmxlIHVu
bGVzcyBpbmRpY2F0ZWQgb3RoZXJ3aXNlICovCisJCQljYWNoZWFiaWxpdHkgPSBXRUJLSVRfU09V
UF9DQUNIRV9VTkNBQ0hFQUJMRTsKKwkJCWJyZWFrOworCisJCWNhc2UgU09VUF9TVEFUVVNfRk9V
TkQ6CisJCWNhc2UgU09VUF9TVEFUVVNfVEVNUE9SQVJZX1JFRElSRUNUOgorCQkJLyogRklYTUU6
IGNhY2hlYWJsZSBpZiBleHBsaWNpdGx5IGluZGljYXRlZCAqLworCQkJY2FjaGVhYmlsaXR5ID0g
V0VCS0lUX1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEU7CisJCQlicmVhazsKKworCQljYXNlIFNPVVBf
U1RBVFVTX1NFRV9PVEhFUjoKKwkJY2FzZSBTT1VQX1NUQVRVU19GT1JCSURERU46CisJCWNhc2Ug
U09VUF9TVEFUVVNfTk9UX0ZPVU5EOgorCQljYXNlIFNPVVBfU1RBVFVTX01FVEhPRF9OT1RfQUxM
T1dFRDoKKwkJCXJldHVybiAoV0VCS0lUX1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEUgfCBXRUJLSVRf
U09VUF9DQUNIRV9JTlZBTElEQVRFUyk7CisKKwkJZGVmYXVsdDoKKwkJCS8qIEFueSA1eHggc3Rh
dHVzIG9yIGFueSA0eHggc3RhdHVzIG5vdCBoYW5kbGVkIGFib3ZlCisJCQkgKiBpcyB1bmNhY2hl
YWJsZSBidXQgZG9lc24ndCBicmVhayB0aGUgY2FjaGUuCisJCQkgKi8KKwkJCWlmICgobXNnLT5z
dGF0dXNfY29kZSA+PSBTT1VQX1NUQVRVU19CQURfUkVRVUVTVCAmJgorCQkJICAgICBtc2ctPnN0
YXR1c19jb2RlIDw9IFNPVVBfU1RBVFVTX0ZBSUxFRF9ERVBFTkRFTkNZKSB8fAorCQkJICAgIG1z
Zy0+c3RhdHVzX2NvZGUgPj0gU09VUF9TVEFUVVNfSU5URVJOQUxfU0VSVkVSX0VSUk9SKQorCQkJ
CXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRTsKKworCQkJLyogQW4gdW5yZWNv
Z25pemVkIDJ4eCwgM3h4LCBvciA0eHggcmVzcG9uc2UgYnJlYWtzCisJCQkgKiB0aGUgY2FjaGUu
CisJCQkgKi8KKwkJCWlmICgobXNnLT5zdGF0dXNfY29kZSA+IFNPVVBfU1RBVFVTX1BBUlRJQUxf
Q09OVEVOVCAmJgorCQkJICAgICBtc2ctPnN0YXR1c19jb2RlIDwgU09VUF9TVEFUVVNfTVVMVElQ
TEVfQ0hPSUNFUykgfHwKKwkJCSAgICAobXNnLT5zdGF0dXNfY29kZSA+IFNPVVBfU1RBVFVTX1RF
TVBPUkFSWV9SRURJUkVDVCAmJgorCQkJICAgICBtc2ctPnN0YXR1c19jb2RlIDwgU09VUF9TVEFU
VVNfSU5URVJOQUxfU0VSVkVSX0VSUk9SKSkKKwkJCQlyZXR1cm4gKFdFQktJVF9TT1VQX0NBQ0hF
X1VOQ0FDSEVBQkxFIHwgV0VCS0lUX1NPVVBfQ0FDSEVfSU5WQUxJREFURVMpOworCQkJYnJlYWs7
CisJfQorCisJcmV0dXJuIGNhY2hlYWJpbGl0eTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9z
b3VwX2NhY2hlX2VudHJ5X2ZyZWUgKFdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSwgZ2Jvb2xl
YW4gcHVyZ2UpCit7CisJaWYgKHB1cmdlKSB7CisJCUdGaWxlICpmaWxlID0gZ19maWxlX25ld19m
b3JfcGF0aCAoZW50cnktPmZpbGVuYW1lKTsKKwkJZ19maWxlX2RlbGV0ZSAoZmlsZSwgTlVMTCwg
TlVMTCk7CisJCWdfb2JqZWN0X3VucmVmIChmaWxlKTsKKwl9CisKKwlnX2ZyZWUgKGVudHJ5LT5m
aWxlbmFtZSk7CisJZW50cnktPmZpbGVuYW1lID0gTlVMTDsKKwlnX2ZyZWUgKGVudHJ5LT5rZXkp
OworCWVudHJ5LT5rZXkgPSBOVUxMOworCisJaWYgKGVudHJ5LT5oZWFkZXJzKSB7CisJCXNvdXBf
bWVzc2FnZV9oZWFkZXJzX2ZyZWUgKGVudHJ5LT5oZWFkZXJzKTsKKwkJZW50cnktPmhlYWRlcnMg
PSBOVUxMOworCX0KKworCWlmIChlbnRyeS0+ZGF0YSkgeworCQlnX3N0cmluZ19mcmVlIChlbnRy
eS0+ZGF0YSwgVFJVRSk7CisJCWVudHJ5LT5kYXRhID0gTlVMTDsKKwl9CisJaWYgKGVudHJ5LT5l
cnJvcikgeworCQlnX2Vycm9yX2ZyZWUgKGVudHJ5LT5lcnJvcik7CisJCWVudHJ5LT5lcnJvciA9
IE5VTEw7CisJfQorCWlmIChlbnRyeS0+Y2FuY2VsbGFibGUpIHsKKwkJZ19vYmplY3RfdW5yZWYg
KGVudHJ5LT5jYW5jZWxsYWJsZSk7CisJCWVudHJ5LT5jYW5jZWxsYWJsZSA9IE5VTEw7CisJfQor
CisJZ19zbGljZV9mcmVlIChXZWJLaXRTb3VwQ2FjaGVFbnRyeSwgZW50cnkpOworfQorCitzdGF0
aWMgdm9pZAorY29weV9oZWFkZXJzIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1
ZSwgU291cE1lc3NhZ2VIZWFkZXJzICpoZWFkZXJzKQoreworCXNvdXBfbWVzc2FnZV9oZWFkZXJz
X2FwcGVuZCAoaGVhZGVycywgbmFtZSwgdmFsdWUpOworfQorCitzdGF0aWMgdm9pZAordXBkYXRl
X2hlYWRlcnMgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlLCBTb3VwTWVzc2Fn
ZUhlYWRlcnMgKmhlYWRlcnMpCit7CisJaWYgKHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldCAoaGVh
ZGVycywgbmFtZSkpCisJCXNvdXBfbWVzc2FnZV9oZWFkZXJzX3JlcGxhY2UgKGhlYWRlcnMsIG5h
bWUsIHZhbHVlKTsKKwllbHNlCisJCXNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZCAoaGVhZGVy
cywgbmFtZSwgdmFsdWUpOworfQorCitzdGF0aWMgZ3VpbnQKK3dlYmtpdF9zb3VwX2NhY2hlX2Vu
dHJ5X2dldF9jdXJyZW50X2FnZSAoV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5KQoreworCXRp
bWVfdCBub3cgPSB0aW1lIChOVUxMKTsKKwl0aW1lX3QgcmVzaWRlbnRfdGltZTsKKworCXJlc2lk
ZW50X3RpbWUgPSBub3cgLSBlbnRyeS0+cmVzcG9uc2VfdGltZTsKKwlyZXR1cm4gZW50cnktPmNv
cnJlY3RlZF9pbml0aWFsX2FnZSArIHJlc2lkZW50X3RpbWU7Cit9CisKK3N0YXRpYyBnYm9vbGVh
bgord2Via2l0X3NvdXBfY2FjaGVfZW50cnlfaXNfZnJlc2hfZW5vdWdoIChXZWJLaXRTb3VwQ2Fj
aGVFbnRyeSAqZW50cnksIGludCBtaW5fZnJlc2gpCit7CisJdW5zaWduZWQgbGltaXQgPSAobWlu
X2ZyZXNoID09IC0xKSA/IHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2dldF9jdXJyZW50X2FnZSAo
ZW50cnkpIDogbWluX2ZyZXNoOworCXJldHVybiBlbnRyeS0+ZnJlc2huZXNzX2xpZmV0aW1lID4g
bGltaXQ7Cit9CisKK3N0YXRpYyBjaGFyICoKK3NvdXBfbWVzc2FnZV9nZXRfY2FjaGVfa2V5IChT
b3VwTWVzc2FnZSAqbXNnKQoreworCVNvdXBVUkkgKnVyaSA9IHNvdXBfbWVzc2FnZV9nZXRfdXJp
IChtc2cpOworCXJldHVybiBzb3VwX3VyaV90b19zdHJpbmcgKHVyaSwgRkFMU0UpOworfQorCitz
dGF0aWMgdm9pZAord2Via2l0X3NvdXBfY2FjaGVfZW50cnlfc2V0X2ZyZXNobmVzcyAoV2ViS2l0
U291cENhY2hlRW50cnkgKmVudHJ5LCBTb3VwTWVzc2FnZSAqbXNnLCBXZWJLaXRTb3VwQ2FjaGUg
KmNhY2hlKQoreworCWNvbnN0IGNoYXIgKmNhY2hlX2NvbnRyb2w7CisJY29uc3QgY2hhciAqZXhw
aXJlcywgKmRhdGUsICpsYXN0X21vZGlmaWVkOworCUdIYXNoVGFibGUgKmhhc2g7CisKKwloYXNo
ID0gTlVMTDsKKworCWNhY2hlX2NvbnRyb2wgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKGVu
dHJ5LT5oZWFkZXJzLCAiQ2FjaGUtQ29udHJvbCIpOworCWlmIChjYWNoZV9jb250cm9sKSB7CisJ
CWNvbnN0IGNoYXIgKm1heF9hZ2UsICpzX21heGFnZTsKKwkJZ2ludDY0IGZyZXNobmVzc19saWZl
dGltZSA9IDA7CisJCVdlYktpdFNvdXBDYWNoZVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9D
QUNIRV9HRVRfUFJJVkFURSAoY2FjaGUpOworCisJCWhhc2ggPSBzb3VwX2hlYWRlcl9wYXJzZV9w
YXJhbV9saXN0IChjYWNoZV9jb250cm9sKTsKKworCQkvKiBTaG91bGQgd2UgcmUtdmFsaWRhdGUg
dGhlIGVudHJ5IHdoZW4gaXQgZ29lcyBzdGFsZSAqLworCQllbnRyeS0+bXVzdF9yZXZhbGlkYXRl
ID0gKGdib29sZWFuKWdfaGFzaF90YWJsZV9sb29rdXAgKGhhc2gsICJtdXN0LXJldmFsaWRhdGUi
KTsKKworCQkvKiBTZWN0aW9uIDIuMy4xICovCisJCWlmIChwcml2LT5jYWNoZV90eXBlID09IFdF
QktJVF9TT1VQX0NBQ0hFX1NIQVJFRCkgeworCQkJc19tYXhhZ2UgPSBnX2hhc2hfdGFibGVfbG9v
a3VwIChoYXNoLCAicy1tYXhhZ2UiKTsKKwkJCWlmIChzX21heGFnZSkgeworCQkJCWZyZXNobmVz
c19saWZldGltZSA9IGdfYXNjaWlfc3RydG9sbCAoc19tYXhhZ2UsIE5VTEwsIDEwKTsKKwkJCQlp
ZiAoZnJlc2huZXNzX2xpZmV0aW1lKSB7CisJCQkJCS8qIEltcGxpZXMgcHJveHktcmV2YWxpZGF0
ZS4gVE9ETzogaXMgaXQgdHJ1ZT8gKi8KKwkJCQkJZW50cnktPm11c3RfcmV2YWxpZGF0ZSA9IFRS
VUU7CisJCQkJCXNvdXBfaGVhZGVyX2ZyZWVfcGFyYW1fbGlzdCAoaGFzaCk7CisJCQkJCXJldHVy
bjsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKiBJZiAnbWF4LWFnZScgY2FjaGUgZGlyZWN0aXZl
IGlzIHByZXNlbnQsIHVzZSB0aGF0ICovCisJCW1heF9hZ2UgPSBnX2hhc2hfdGFibGVfbG9va3Vw
IChoYXNoLCAibWF4LWFnZSIpOworCQlpZiAobWF4X2FnZSkKKwkJCWZyZXNobmVzc19saWZldGlt
ZSA9IGdfYXNjaWlfc3RydG9sbCAobWF4X2FnZSwgTlVMTCwgMTApOworCisJCWlmIChmcmVzaG5l
c3NfbGlmZXRpbWUpIHsKKwkJCWVudHJ5LT5mcmVzaG5lc3NfbGlmZXRpbWUgPSAoZ3VpbnQpTUlO
IChmcmVzaG5lc3NfbGlmZXRpbWUsIEdfTUFYVUlOVDMyKTsKKwkJCXNvdXBfaGVhZGVyX2ZyZWVf
cGFyYW1fbGlzdCAoaGFzaCk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlpZiAoaGFzaCAhPSBO
VUxMKQorCQlzb3VwX2hlYWRlcl9mcmVlX3BhcmFtX2xpc3QgKGhhc2gpOworCisJLyogSWYgdGhl
ICdFeHBpcmVzJyByZXNwb25zZSBoZWFkZXIgaXMgcHJlc2VudCwgdXNlIGl0cyB2YWx1ZQorCSAq
IG1pbnVzIHRoZSB2YWx1ZSBvZiB0aGUgJ0RhdGUnIHJlc3BvbnNlIGhlYWRlcgorCSAqLworCWV4
cGlyZXMgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKGVudHJ5LT5oZWFkZXJzLCAiRXhwaXJl
cyIpOworCWRhdGUgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKGVudHJ5LT5oZWFkZXJzLCAi
RGF0ZSIpOworCWlmIChleHBpcmVzICYmIGRhdGUpIHsKKwkJU291cERhdGUgKmV4cGlyZXNfZCwg
KmRhdGVfZDsKKwkJdGltZV90IGV4cGlyZXNfdCwgZGF0ZV90OworCisJCWV4cGlyZXNfZCA9IHNv
dXBfZGF0ZV9uZXdfZnJvbV9zdHJpbmcgKGV4cGlyZXMpOworCQlpZiAoZXhwaXJlc19kKSB7CisJ
CQlkYXRlX2QgPSBzb3VwX2RhdGVfbmV3X2Zyb21fc3RyaW5nIChkYXRlKTsKKworCQkJZXhwaXJl
c190ID0gc291cF9kYXRlX3RvX3RpbWVfdCAoZXhwaXJlc19kKTsKKwkJCWRhdGVfdCA9IHNvdXBf
ZGF0ZV90b190aW1lX3QgKGRhdGVfZCk7CisKKwkJCXNvdXBfZGF0ZV9mcmVlIChleHBpcmVzX2Qp
OworCQkJc291cF9kYXRlX2ZyZWUgKGRhdGVfZCk7CisKKwkJCWlmIChleHBpcmVzX3QgJiYgZGF0
ZV90KSB7CisJCQkJZW50cnktPmZyZXNobmVzc19saWZldGltZSA9IChndWludClNQVggKGV4cGly
ZXNfdCAtIGRhdGVfdCwgMCk7CisJCQkJcmV0dXJuOworCQkJfQorCQl9IGVsc2UgeworCQkJLyog
SWYgRXhwaXJlcyBpcyBub3QgYSB2YWxpZCBkYXRlIHdlIHNob3VsZAorCQkJICAgdHJlYXQgaXQg
YXMgYWxyZWFkeSBleHBpcmVkLCBzZWUgc2VjdGlvbgorCQkJICAgMy4zICovCisJCQllbnRyeS0+
ZnJlc2huZXNzX2xpZmV0aW1lID0gMDsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qIE90aGVy
d2lzZSBhbiBoZXVyaXN0aWMgbWF5IGJlIHVzZWQgKi8KKworCS8qIEhldXJpc3RpY3MgTVVTVCBO
T1QgYmUgdXNlZCB3aXRoIHRoZXNlIHN0YXR1cyBjb2RlcworCSAgIChzZWN0aW9uIDIuMy4xLjEp
ICovCisJaWYgKG1zZy0+c3RhdHVzX2NvZGUgIT0gU09VUF9TVEFUVVNfT0sgJiYKKwkgICAgbXNn
LT5zdGF0dXNfY29kZSAhPSBTT1VQX1NUQVRVU19OT05fQVVUSE9SSVRBVElWRSAmJgorCSAgICBt
c2ctPnN0YXR1c19jb2RlICE9IFNPVVBfU1RBVFVTX1BBUlRJQUxfQ09OVEVOVCAmJgorCSAgICBt
c2ctPnN0YXR1c19jb2RlICE9IFNPVVBfU1RBVFVTX01VTFRJUExFX0NIT0lDRVMgJiYKKwkgICAg
bXNnLT5zdGF0dXNfY29kZSAhPSBTT1VQX1NUQVRVU19NT1ZFRF9QRVJNQU5FTlRMWSAmJgorCSAg
ICBtc2ctPnN0YXR1c19jb2RlICE9IFNPVVBfU1RBVFVTX0dPTkUpCisJCWdvdG8gZXhwaXJlOwor
CisJLyogVE9ETzogYXR0YWNoIHdhcm5pbmcgMTEzIGlmIHJlc3BvbnNlJ3MgY3VycmVudF9hZ2Ug
aXMgbW9yZQorCSAgIHRoYW4gMjRoIChzZWN0aW9uIDIuMy4xLjEpIHdoZW4gdXNpbmcgaGV1cmlz
dGljcyAqLworCisJLyogTGFzdC1Nb2RpZmllZCBiYXNlZCBoZXVyaXN0aWMgKi8KKwlsYXN0X21v
ZGlmaWVkID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0IChlbnRyeS0+aGVhZGVycywgIkxhc3Qt
TW9kaWZpZWQiKTsKKwlpZiAobGFzdF9tb2RpZmllZCkgeworCQlTb3VwRGF0ZSAqc291cF9kYXRl
OworCQl0aW1lX3Qgbm93LCBsYXN0X21vZGlmaWVkX3Q7CisKKwkJc291cF9kYXRlID0gc291cF9k
YXRlX25ld19mcm9tX3N0cmluZyAobGFzdF9tb2RpZmllZCk7CisJCWxhc3RfbW9kaWZpZWRfdCA9
IHNvdXBfZGF0ZV90b190aW1lX3QgKHNvdXBfZGF0ZSk7CisJCW5vdyA9IHRpbWUgKE5VTEwpOwor
CisjZGVmaW5lIEhFVVJJU1RJQ19GQUNUT1IgMC4xIC8qIEZyb20gU2VjdGlvbiAyLjMuMS4xICov
CisKKwkJZW50cnktPmZyZXNobmVzc19saWZldGltZSA9IE1BWCAoMCwgKG5vdyAtIGxhc3RfbW9k
aWZpZWRfdCkgKiBIRVVSSVNUSUNfRkFDVE9SKTsKKwkJc291cF9kYXRlX2ZyZWUgKHNvdXBfZGF0
ZSk7CisJfQorCisJcmV0dXJuOworCisgZXhwaXJlOgorCS8qIElmIGFsbCBlbHNlIGZhaWxzLCBt
YWtlIHRoZSBlbnRyeSBleHBpcmUgaW1tZWRpYXRlbHkgKi8KKwllbnRyeS0+ZnJlc2huZXNzX2xp
ZmV0aW1lID0gMDsKK30KKworc3RhdGljIFdlYktpdFNvdXBDYWNoZUVudHJ5ICoKK3dlYmtpdF9z
b3VwX2NhY2hlX2VudHJ5X25ldyAoV2ViS2l0U291cENhY2hlICpjYWNoZSwgU291cE1lc3NhZ2Ug
Km1zZywgdGltZV90IHJlcXVlc3RfdGltZSwgdGltZV90IHJlc3BvbnNlX3RpbWUpCit7CisJV2Vi
S2l0U291cENhY2hlRW50cnkgKmVudHJ5OworCVNvdXBNZXNzYWdlSGVhZGVycyAqaGVhZGVyczsK
Kwljb25zdCBjaGFyICpkYXRlOworCWNoYXIgKm1kNTsKKworCWVudHJ5ID0gZ19zbGljZV9uZXcw
IChXZWJLaXRTb3VwQ2FjaGVFbnRyeSk7CisJZW50cnktPmRpcnR5ID0gRkFMU0U7CisJZW50cnkt
PndyaXRpbmcgPSBGQUxTRTsKKwllbnRyeS0+Z290X2JvZHkgPSBGQUxTRTsKKwllbnRyeS0+YmVp
bmdfdmFsaWRhdGVkID0gRkFMU0U7CisJZW50cnktPmRhdGEgPSBnX3N0cmluZ19uZXcgKE5VTEwp
OworCWVudHJ5LT5wb3MgPSAwOworCWVudHJ5LT5lcnJvciA9IE5VTEw7CisKKwkvKiBrZXkgJiBm
aWxlbmFtZSAqLworCWVudHJ5LT5rZXkgPSBzb3VwX21lc3NhZ2VfZ2V0X2NhY2hlX2tleSAobXNn
KTsKKwltZDUgPSBnX2NvbXB1dGVfY2hlY2tzdW1fZm9yX3N0cmluZyAoR19DSEVDS1NVTV9NRDUs
IGVudHJ5LT5rZXksIC0xKTsKKwllbnRyeS0+ZmlsZW5hbWUgPSBnX2J1aWxkX2ZpbGVuYW1lIChj
YWNoZS0+cHJpdi0+Y2FjaGVfZGlyLCBtZDUsIE5VTEwpOworCWdfZnJlZSAobWQ1KTsKKworCS8q
IEhlYWRlcnMgKi8KKwloZWFkZXJzID0gc291cF9tZXNzYWdlX2hlYWRlcnNfbmV3IChTT1VQX01F
U1NBR0VfSEVBREVSU19SRVNQT05TRSk7CisJc291cF9tZXNzYWdlX2hlYWRlcnNfZm9yZWFjaCAo
bXNnLT5yZXNwb25zZV9oZWFkZXJzLAorCQkJCSAgICAgIChTb3VwTWVzc2FnZUhlYWRlcnNGb3Jl
YWNoRnVuYyljb3B5X2hlYWRlcnMsCisJCQkJICAgICAgaGVhZGVycyk7CisJZW50cnktPmhlYWRl
cnMgPSBoZWFkZXJzOworCisJLyogTFJVIGxpc3QgKi8KKwllbnRyeS0+aGl0cyA9IDA7CisKKwkv
KiBTZWN0aW9uIDIuMy4xLCBGcmVzaG5lc3MgTGlmZXRpbWUgKi8KKwl3ZWJraXRfc291cF9jYWNo
ZV9lbnRyeV9zZXRfZnJlc2huZXNzIChlbnRyeSwgbXNnLCBjYWNoZSk7CisKKwkvKiBTZWN0aW9u
IDIuMy4yLCBDYWxjdWxhdGluZyBBZ2UgKi8KKwlkYXRlID0gc291cF9tZXNzYWdlX2hlYWRlcnNf
Z2V0IChlbnRyeS0+aGVhZGVycywgIkRhdGUiKTsKKworCWlmIChkYXRlKSB7CisJCVNvdXBEYXRl
ICpzb3VwX2RhdGU7CisJCWNvbnN0IGNoYXIgKmFnZTsKKwkJdGltZV90IGRhdGVfdmFsdWUsIGFw
cGFyZW50X2FnZSwgY29ycmVjdGVkX3JlY2VpdmVkX2FnZSwgcmVzcG9uc2VfZGVsYXksIGFnZV92
YWx1ZSA9IDA7CisKKwkJc291cF9kYXRlID0gc291cF9kYXRlX25ld19mcm9tX3N0cmluZyAoZGF0
ZSk7CisJCWRhdGVfdmFsdWUgPSBzb3VwX2RhdGVfdG9fdGltZV90IChzb3VwX2RhdGUpOworCQlz
b3VwX2RhdGVfZnJlZSAoc291cF9kYXRlKTsKKworCQlhZ2UgPSBzb3VwX21lc3NhZ2VfaGVhZGVy
c19nZXQgKGVudHJ5LT5oZWFkZXJzLCAiQWdlIik7CisJCWlmIChhZ2UpCisJCQlhZ2VfdmFsdWUg
PSBnX2FzY2lpX3N0cnRvbGwgKGFnZSwgTlVMTCwgMTApOworCisJCWVudHJ5LT5yZXNwb25zZV90
aW1lID0gcmVzcG9uc2VfdGltZTsKKwkJYXBwYXJlbnRfYWdlID0gTUFYICgwLCBlbnRyeS0+cmVz
cG9uc2VfdGltZSAtIGRhdGVfdmFsdWUpOworCQljb3JyZWN0ZWRfcmVjZWl2ZWRfYWdlID0gTUFY
IChhcHBhcmVudF9hZ2UsIGFnZV92YWx1ZSk7CisJCXJlc3BvbnNlX2RlbGF5ID0gZW50cnktPnJl
c3BvbnNlX3RpbWUgLSByZXF1ZXN0X3RpbWU7CisJCWVudHJ5LT5jb3JyZWN0ZWRfaW5pdGlhbF9h
Z2UgPSBjb3JyZWN0ZWRfcmVjZWl2ZWRfYWdlICsgcmVzcG9uc2VfZGVsYXk7CisJfSBlbHNlIHsK
KwkJLyogSXMgdGhpcyBjb3JyZWN0ID8gKi8KKwkJZW50cnktPmNvcnJlY3RlZF9pbml0aWFsX2Fn
ZSA9IHRpbWUgKE5VTEwpOworCX0KKworCXJldHVybiBlbnRyeTsKK30KKworc3RhdGljIHZvaWQK
K3dlYmtpdF9zb3VwX2NhY2hlX3dyaXRpbmdfZml4dHVyZV9mcmVlIChXZWJLaXRTb3VwQ2FjaGVX
cml0aW5nRml4dHVyZSAqZml4dHVyZSkKK3sKKwkvKiBGcmVlIGZpeHR1cmUuIEFuZCBkaXNjb25u
ZWN0IHNpZ25hbHMsIHdlIGRvbid0IHdhbnQgdG8KKwkgICBsaXN0ZW4gdG8gbW9yZSBTb3VwTWVz
c2FnZSBldmVudHMgYXMgd2UncmUgZmluaXNoZWQgd2l0aAorCSAgIHRoaXMgcmVzb3VyY2UgKi8K
KwlpZiAoZ19zaWduYWxfaGFuZGxlcl9pc19jb25uZWN0ZWQgKGZpeHR1cmUtPm1zZywgZml4dHVy
ZS0+Z290X2NodW5rX2hhbmRsZXIpKQorCQlnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QgKGZp
eHR1cmUtPm1zZywgZml4dHVyZS0+Z290X2NodW5rX2hhbmRsZXIpOworCWlmIChnX3NpZ25hbF9o
YW5kbGVyX2lzX2Nvbm5lY3RlZCAoZml4dHVyZS0+bXNnLCBmaXh0dXJlLT5nb3RfYm9keV9oYW5k
bGVyKSkKKwkJZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0IChmaXh0dXJlLT5tc2csIGZpeHR1
cmUtPmdvdF9ib2R5X2hhbmRsZXIpOworCWlmIChnX3NpZ25hbF9oYW5kbGVyX2lzX2Nvbm5lY3Rl
ZCAoZml4dHVyZS0+bXNnLCBmaXh0dXJlLT5yZXN0YXJ0ZWRfaGFuZGxlcikpCisJCWdfc2lnbmFs
X2hhbmRsZXJfZGlzY29ubmVjdCAoZml4dHVyZS0+bXNnLCBmaXh0dXJlLT5yZXN0YXJ0ZWRfaGFu
ZGxlcik7CisJZ19vYmplY3RfdW5yZWYgKGZpeHR1cmUtPm1zZyk7CisJZ19vYmplY3RfdW5yZWYg
KGZpeHR1cmUtPmNhY2hlKTsKKwlnX3NsaWNlX2ZyZWUgKFdlYktpdFNvdXBDYWNoZVdyaXRpbmdG
aXh0dXJlLCBmaXh0dXJlKTsKK30KKworc3RhdGljIHZvaWQKK2Nsb3NlX3JlYWR5X2NiIChHT2Jq
ZWN0ICpzb3VyY2UsIEdBc3luY1Jlc3VsdCAqcmVzdWx0LCBXZWJLaXRTb3VwQ2FjaGVXcml0aW5n
Rml4dHVyZSAqZml4dHVyZSkKK3sKKwlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkgPSBmaXh0
dXJlLT5lbnRyeTsKKwlXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlID0gZml4dHVyZS0+Y2FjaGU7CisJ
R091dHB1dFN0cmVhbSAqc3RyZWFtID0gR19PVVRQVVRfU1RSRUFNIChzb3VyY2UpOworCWdvZmZz
ZXQgY29udGVudF9sZW5ndGg7CisKKwlnX3dhcm5faWZfZmFpbCAoZW50cnktPmVycm9yID09IE5V
TEwpOworCisJLyogRklYTUU6IHdoYXQgZG8gd2UgZG8gb24gZXJyb3IgPyAqLworCisJaWYgKHN0
cmVhbSkgeworCQlnX291dHB1dF9zdHJlYW1fY2xvc2VfZmluaXNoIChzdHJlYW0sIHJlc3VsdCwg
TlVMTCk7CisJCWdfb2JqZWN0X3VucmVmIChzdHJlYW0pOworCX0KKwllbnRyeS0+c3RyZWFtID0g
TlVMTDsKKworCWNvbnRlbnRfbGVuZ3RoID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2NvbnRl
bnRfbGVuZ3RoIChlbnRyeS0+aGVhZGVycyk7CisKKwkvKiBJZiB0aGUgcHJvY2VzcyB3YXMgY2Fu
Y2VsbGVkLCB0aGVuIGRlbGV0ZSB0aGUgZW50cnkgZnJvbQorCSAgIHRoZSBjYWNoZS4gRG8gaXQg
YWxzbyBpZiB0aGUgc2l6ZSBvZiBhIGNodW5rZWQgcmVzb3VyY2UgaXMKKwkgICB0b28gbXVjaCBm
b3IgdGhlIGNhY2hlICovCisJaWYgKGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkIChlbnRyeS0+
Y2FuY2VsbGFibGUpKSB7CisJCWVudHJ5LT5kaXJ0eSA9IEZBTFNFOworCQl3ZWJraXRfc291cF9j
YWNoZV9lbnRyeV9yZW1vdmUgKGNhY2hlLCBlbnRyeSk7CisJCXdlYmtpdF9zb3VwX2NhY2hlX2Vu
dHJ5X2ZyZWUgKGVudHJ5LCBUUlVFKTsKKwkJZW50cnkgPSBOVUxMOworCX0gZWxzZSBpZiAoKHNv
dXBfbWVzc2FnZV9oZWFkZXJzX2dldF9lbmNvZGluZyAoZW50cnktPmhlYWRlcnMpID09IFNPVVBf
RU5DT0RJTkdfQ0hVTktFRCkgfHwKKwkJICAgZW50cnktPmxlbmd0aCAhPSBjb250ZW50X2xlbmd0
aCkgeworCQkvKiogVHdvIG9wdGlvbnMgaGVyZToKKwkJICoKKwkJICogMS4gImNodW5rZWQiIGRh
dGEsIGVudHJ5IHdhcyB0ZW1wb3JhcmlseSBhZGRlZCB0bworCQkgKiBjYWNoZSAoYXMgY29udGVu
dC1sZW5ndGggaXMgMCkgYW5kIG5vdyB0aGF0IHdlIGhhdmUKKwkJICogdGhlIGFjdHVhbCBzaXpl
IHdlIGhhdmUgdG8gZXZhbHVhdGUgaWYgd2Ugd2FudCBpdAorCQkgKiBpbiB0aGUgY2FjaGUgb3Ig
bm90CisJCSAqCisJCSAqIDIuIENvbnRlbnQtTGVuZ3RoIGhhcyBhIGRpZmZlcmVudCB2YWx1ZSB0
aGFuIGFjdHVhbAorCQkgKiBsZW5ndGgsIG1lYW5zIHRoYXQgdGhlIGNvbnRlbnQgd2FzIGVuY29k
ZWQgZm9yCisJCSAqIHRyYW5zbWlzc2lvbiAodHlwaWNhbGx5IGNvbXByZXNzZWQpIGFuZCB0aHVz
IHdlCisJCSAqIGhhdmUgdG8gc3Vic3RyYWN0IHRoZSBjb250ZW50LWxlbmd0aCB2YWx1ZSB0aGF0
IHdhcworCQkgKiBhZGRlZCB0byB0aGUgY2FjaGUgYW5kIGFkZCB0aGUgdW5lbmNvZGVkIGxlbmd0
aAorCQkgKiovCisJCWdpbnQgbGVuZ3RoX3RvX2FkZCA9IGVudHJ5LT5sZW5ndGggLSBjb250ZW50
X2xlbmd0aDsKKworCQkvKiBNYWtlIHJvb20gaW4gY2FjaGUgaWYgbmVlZGVkICovCisJCWlmIChj
YWNoZV9hY2NlcHRzX2VudHJpZXNfb2Zfc2l6ZSAoY2FjaGUsIGxlbmd0aF90b19hZGQpKSB7CisJ
CQltYWtlX3Jvb21fZm9yX25ld19lbnRyeSAoY2FjaGUsIGxlbmd0aF90b19hZGQpOworCisJCQlj
YWNoZS0+cHJpdi0+c2l6ZSArPSBsZW5ndGhfdG9fYWRkOworCQl9IGVsc2UgeworCQkJZW50cnkt
PmRpcnR5ID0gRkFMU0U7CisJCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9yZW1vdmUgKGNhY2hl
LCBlbnRyeSk7CisJCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9mcmVlIChlbnRyeSwgVFJVRSk7
CisJCQllbnRyeSA9IE5VTEw7CisJCX0KKwl9CisKKwlpZiAoZW50cnkpIHsKKwkJLyogR2V0IHJp
ZCBvZiB0aGUgR1N0cmluZyBpbiBtZW1vcnkgZm9yIHRoZSByZXNvdXJjZSBub3cgKi8KKwkJaWYg
KGVudHJ5LT5kYXRhKSB7CisJCQlnX3N0cmluZ19mcmVlIChlbnRyeS0+ZGF0YSwgVFJVRSk7CisJ
CQllbnRyeS0+ZGF0YSA9IE5VTEw7CisJCX0KKworCQllbnRyeS0+ZGlydHkgPSBGQUxTRTsKKwkJ
ZW50cnktPndyaXRpbmcgPSBGQUxTRTsKKwkJZW50cnktPmdvdF9ib2R5ID0gRkFMU0U7CisJCWVu
dHJ5LT5wb3MgPSAwOworCisJCWdfb2JqZWN0X3VucmVmIChlbnRyeS0+Y2FuY2VsbGFibGUpOwor
CQllbnRyeS0+Y2FuY2VsbGFibGUgPSBOVUxMOworCX0KKworCWNhY2hlLT5wcml2LT5uX3BlbmRp
bmctLTsKKworCS8qIEZyZWVzICovCisJd2Via2l0X3NvdXBfY2FjaGVfd3JpdGluZ19maXh0dXJl
X2ZyZWUgKGZpeHR1cmUpOworfQorCitzdGF0aWMgdm9pZAord3JpdGVfcmVhZHlfY2IgKEdPYmpl
Y3QgKnNvdXJjZSwgR0FzeW5jUmVzdWx0ICpyZXN1bHQsIFdlYktpdFNvdXBDYWNoZVdyaXRpbmdG
aXh0dXJlICpmaXh0dXJlKQoreworCUdPdXRwdXRTdHJlYW0gKnN0cmVhbSA9IEdfT1VUUFVUX1NU
UkVBTSAoc291cmNlKTsKKwlHRXJyb3IgKmVycm9yID0gTlVMTDsKKwlnc3NpemUgd3JpdGVfc2l6
ZTsKKwlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkgPSBmaXh0dXJlLT5lbnRyeTsKKworCWlm
IChnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxlZCAoZW50cnktPmNhbmNlbGxhYmxlKSkgeworCQln
X291dHB1dF9zdHJlYW1fY2xvc2VfYXN5bmMgKHN0cmVhbSwKKwkJCQkJICAgICBHX1BSSU9SSVRZ
X0xPVywKKwkJCQkJICAgICBlbnRyeS0+Y2FuY2VsbGFibGUsCisJCQkJCSAgICAgKEdBc3luY1Jl
YWR5Q2FsbGJhY2spY2xvc2VfcmVhZHlfY2IsCisJCQkJCSAgICAgZml4dHVyZSk7CisJCXJldHVy
bjsKKwl9CisKKwl3cml0ZV9zaXplID0gZ19vdXRwdXRfc3RyZWFtX3dyaXRlX2ZpbmlzaCAoc3Ry
ZWFtLCByZXN1bHQsICZlcnJvcik7CisJaWYgKHdyaXRlX3NpemUgPD0gMCB8fCBlcnJvcikgewor
CQlpZiAoZXJyb3IpCisJCQllbnRyeS0+ZXJyb3IgPSBlcnJvcjsKKwkJZ19vdXRwdXRfc3RyZWFt
X2Nsb3NlX2FzeW5jIChzdHJlYW0sCisJCQkJCSAgICAgR19QUklPUklUWV9MT1csCisJCQkJCSAg
ICAgZW50cnktPmNhbmNlbGxhYmxlLAorCQkJCQkgICAgIChHQXN5bmNSZWFkeUNhbGxiYWNrKWNs
b3NlX3JlYWR5X2NiLAorCQkJCQkgICAgIGZpeHR1cmUpOworCQkvKiBGSVhNRTogV2Ugc2hvdWxk
IGNvbXBsZXRlbHkgc3RvcCBjYWNoaW5nIHRoZQorCQkgICByZXNvdXJjZSBhdCB0aGlzIHBvaW50
ICovCisJfSBlbHNlIHsKKwkJZW50cnktPnBvcyArPSB3cml0ZV9zaXplOworCisJCS8qIEFyZSB3
ZSBzdGlsbCB3cml0aW5nIGFuZCBpcyB0aGVyZSBuZXcgZGF0YSB0byB3cml0ZQorCQkgICBhbHJl
YWR5ID8gKi8KKwkJaWYgKGVudHJ5LT5kYXRhICYmIGVudHJ5LT5wb3MgPCBlbnRyeS0+ZGF0YS0+
bGVuKSB7CisJCQlnX291dHB1dF9zdHJlYW1fd3JpdGVfYXN5bmMgKGVudHJ5LT5zdHJlYW0sCisJ
CQkJCQkgICAgIGVudHJ5LT5kYXRhLT5zdHIgKyBlbnRyeS0+cG9zLAorCQkJCQkJICAgICBlbnRy
eS0+ZGF0YS0+bGVuIC0gZW50cnktPnBvcywKKwkJCQkJCSAgICAgR19QUklPUklUWV9MT1csCisJ
CQkJCQkgICAgIGVudHJ5LT5jYW5jZWxsYWJsZSwKKwkJCQkJCSAgICAgKEdBc3luY1JlYWR5Q2Fs
bGJhY2spd3JpdGVfcmVhZHlfY2IsCisJCQkJCQkgICAgIGZpeHR1cmUpOworCQl9IGVsc2Ugewor
CQkJZW50cnktPndyaXRpbmcgPSBGQUxTRTsKKworCQkJaWYgKGVudHJ5LT5nb3RfYm9keSkgewor
CQkJCS8qIElmIHdlIGFscmVhZHkgcmVjZWl2ZWQgJ2dvdC1ib2R5JworCQkJCSAgIGFuZCB3ZSBo
YXZlIHdyaXR0ZW4gYWxsIHRoZSBkYXRhLAorCQkJCSAgIHdlIGNhbiBjbG9zZSB0aGUgc3RyZWFt
ICovCisJCQkJZ19vdXRwdXRfc3RyZWFtX2Nsb3NlX2FzeW5jIChlbnRyeS0+c3RyZWFtLAorCQkJ
CQkJCSAgICAgR19QUklPUklUWV9MT1csCisJCQkJCQkJICAgICBlbnRyeS0+Y2FuY2VsbGFibGUs
CisJCQkJCQkJICAgICAoR0FzeW5jUmVhZHlDYWxsYmFjayljbG9zZV9yZWFkeV9jYiwKKwkJCQkJ
CQkgICAgIGZpeHR1cmUpOworCQkJfQorCQl9CisJfQorfQorCitzdGF0aWMgdm9pZAorbXNnX2dv
dF9jaHVua19jYiAoU291cE1lc3NhZ2UgKm1zZywgU291cEJ1ZmZlciAqY2h1bmssIFdlYktpdFNv
dXBDYWNoZVdyaXRpbmdGaXh0dXJlICpmaXh0dXJlKQoreworCVdlYktpdFNvdXBDYWNoZUVudHJ5
ICplbnRyeSA9IGZpeHR1cmUtPmVudHJ5OworCisJZ19yZXR1cm5faWZfZmFpbCAoY2h1bmstPmRh
dGEgJiYgY2h1bmstPmxlbmd0aCk7CisJZ19yZXR1cm5faWZfZmFpbCAoZW50cnkpOworCisJLyog
SWdub3JlIHRoaXMgaWYgdGhlIHdyaXRpbmcgb3IgYXBwZW5kaW5nIHdhcyBjYW5jZWxsZWQgKi8K
KwlpZiAoIWdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkIChlbnRyeS0+Y2FuY2VsbGFibGUpKSB7
CisJCWdfc3RyaW5nX2FwcGVuZF9sZW4gKGVudHJ5LT5kYXRhLCBjaHVuay0+ZGF0YSwgY2h1bmst
Pmxlbmd0aCk7CisJCWVudHJ5LT5sZW5ndGggPSBlbnRyeS0+ZGF0YS0+bGVuOworCisJCWlmICgh
Y2FjaGVfYWNjZXB0c19lbnRyaWVzX29mX3NpemUgKGZpeHR1cmUtPmNhY2hlLCBlbnRyeS0+bGVu
Z3RoKSkgeworCQkJLyogUXVpY2tseSBjYW5jZWwgdGhlIGNhY2hpbmcgb2YgdGhlIHJlc291cmNl
ICovCisJCQlnX2NhbmNlbGxhYmxlX2NhbmNlbCAoZW50cnktPmNhbmNlbGxhYmxlKTsKKwkJfQor
CX0KKworCS8qIEZJWE1FOiByZW1vdmUgdGhlIGVycm9yIGNoZWNrIHdoZW4gd2UgY2FuY2VsIHRo
ZSBjYWNoaW5nIGF0CisJICAgdGhlIGZpcnN0IHdyaXRlIGVycm9yICovCisJLyogT25seSB3cml0
ZSBpZiB0aGUgZW50cnkgc3RyZWFtIGlzIHJlYWR5ICovCisJaWYgKGVudHJ5LT53cml0aW5nID09
IEZBTFNFICYmIGVudHJ5LT5lcnJvciA9PSBOVUxMICYmIGVudHJ5LT5zdHJlYW0pIHsKKwkJR1N0
cmluZyAqZGF0YSA9IGVudHJ5LT5kYXRhOworCQllbnRyeS0+d3JpdGluZyA9IFRSVUU7CisJCWdf
b3V0cHV0X3N0cmVhbV93cml0ZV9hc3luYyAoZW50cnktPnN0cmVhbSwKKwkJCQkJICAgICBkYXRh
LT5zdHIgKyBlbnRyeS0+cG9zLAorCQkJCQkgICAgIGRhdGEtPmxlbiAtIGVudHJ5LT5wb3MsCisJ
CQkJCSAgICAgR19QUklPUklUWV9MT1csCisJCQkJCSAgICAgZW50cnktPmNhbmNlbGxhYmxlLAor
CQkJCQkgICAgIChHQXN5bmNSZWFkeUNhbGxiYWNrKXdyaXRlX3JlYWR5X2NiLAorCQkJCQkgICAg
IGZpeHR1cmUpOworCX0KK30KKworc3RhdGljIHZvaWQKK21zZ19nb3RfYm9keV9jYiAoU291cE1l
c3NhZ2UgKm1zZywgV2ViS2l0U291cENhY2hlV3JpdGluZ0ZpeHR1cmUgKmZpeHR1cmUpCit7CisJ
V2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5ID0gZml4dHVyZS0+ZW50cnk7CisJZ19yZXR1cm5f
aWZfZmFpbCAoZW50cnkpOworCisJZW50cnktPmdvdF9ib2R5ID0gVFJVRTsKKworCWlmICghZW50
cnktPnN0cmVhbSAmJiBlbnRyeS0+cG9zICE9IGVudHJ5LT5sZW5ndGgpCisJCS8qIFRoZSBzdHJl
YW0gaXMgbm90IHJlYWR5IHRvIGJlIHdyaXR0ZW4gYnV0IHdlIHN0aWxsCisJCSAgIGhhdmUgZGF0
YSB0byB3cml0ZSwgd2UnbGwgd3JpdGUgaXQgd2hlbiB0aGUgc3RyZWFtCisJCSAgIGlzIG9wZW5l
ZCBmb3Igd3JpdGluZyAqLworCQlyZXR1cm47CisKKworCWlmIChlbnRyeS0+cG9zICE9IGVudHJ5
LT5sZW5ndGgpIHsKKwkJLyogSWYgd2Ugc3RpbGwgaGF2ZSBkYXRhIHRvIHdyaXRlLCB3cml0ZSBp
dCwKKwkJICAgd3JpdGVfcmVhZHlfY2Igd2lsbCBjbG9zZSB0aGUgc3RyZWFtICovCisJCWlmIChl
bnRyeS0+d3JpdGluZyA9PSBGQUxTRSAmJiBlbnRyeS0+ZXJyb3IgPT0gTlVMTCAmJiBlbnRyeS0+
c3RyZWFtKSB7CisJCQlnX291dHB1dF9zdHJlYW1fd3JpdGVfYXN5bmMgKGVudHJ5LT5zdHJlYW0s
CisJCQkJCQkgICAgIGVudHJ5LT5kYXRhLT5zdHIgKyBlbnRyeS0+cG9zLAorCQkJCQkJICAgICBl
bnRyeS0+ZGF0YS0+bGVuIC0gZW50cnktPnBvcywKKwkJCQkJCSAgICAgR19QUklPUklUWV9MT1cs
CisJCQkJCQkgICAgIGVudHJ5LT5jYW5jZWxsYWJsZSwKKwkJCQkJCSAgICAgKEdBc3luY1JlYWR5
Q2FsbGJhY2spd3JpdGVfcmVhZHlfY2IsCisJCQkJCQkgICAgIGZpeHR1cmUpOworCQl9CisJCXJl
dHVybjsKKwl9CisKKwlpZiAoZW50cnktPnN0cmVhbSAmJiAhZW50cnktPndyaXRpbmcpCisJCWdf
b3V0cHV0X3N0cmVhbV9jbG9zZV9hc3luYyAoZW50cnktPnN0cmVhbSwKKwkJCQkJICAgICBHX1BS
SU9SSVRZX0xPVywKKwkJCQkJICAgICBlbnRyeS0+Y2FuY2VsbGFibGUsCisJCQkJCSAgICAgKEdB
c3luY1JlYWR5Q2FsbGJhY2spY2xvc2VfcmVhZHlfY2IsCisJCQkJCSAgICAgZml4dHVyZSk7Cit9
CisKK3N0YXRpYyBnYm9vbGVhbgord2Via2l0X3NvdXBfY2FjaGVfZW50cnlfcmVtb3ZlIChXZWJL
aXRTb3VwQ2FjaGUgKmNhY2hlLCBXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkpCit7CisJR0xp
c3QgKmxydV9pdGVtOworCisJLyogaWYgKGVudHJ5LT5kaXJ0eSAmJiAhZ19jYW5jZWxsYWJsZV9p
c19jYW5jZWxsZWQgKGVudHJ5LT5jYW5jZWxsYWJsZSkpIHsgKi8KKwlpZiAoZW50cnktPmRpcnR5
KSB7CisJCWdfY2FuY2VsbGFibGVfY2FuY2VsIChlbnRyeS0+Y2FuY2VsbGFibGUpOworCQlyZXR1
cm4gRkFMU0U7CisJfQorCisJZ19hc3NlcnQgKGdfbGlzdF9sZW5ndGggKGNhY2hlLT5wcml2LT5s
cnVfc3RhcnQpID09IGdfaGFzaF90YWJsZV9zaXplIChjYWNoZS0+cHJpdi0+Y2FjaGUpKTsKKwor
CS8qIFJlbW92ZSBmcm9tIGNhY2hlICovCisJaWYgKCFnX2hhc2hfdGFibGVfcmVtb3ZlIChjYWNo
ZS0+cHJpdi0+Y2FjaGUsIGVudHJ5LT5rZXkpKQorCQlyZXR1cm4gRkFMU0U7CisKKwkvKiBSZW1v
dmUgZnJvbSBMUlUgKi8KKwlscnVfaXRlbSA9IGdfbGlzdF9maW5kIChjYWNoZS0+cHJpdi0+bHJ1
X3N0YXJ0LCBlbnRyeSk7CisJY2FjaGUtPnByaXYtPmxydV9zdGFydCA9IGdfbGlzdF9kZWxldGVf
bGluayAoY2FjaGUtPnByaXYtPmxydV9zdGFydCwgbHJ1X2l0ZW0pOworCisJLyogQWRqdXN0IGNh
Y2hlIHNpemUgKi8KKwljYWNoZS0+cHJpdi0+c2l6ZSAtPSBlbnRyeS0+bGVuZ3RoOworCisJZ19h
c3NlcnQgKGdfbGlzdF9sZW5ndGggKGNhY2hlLT5wcml2LT5scnVfc3RhcnQpID09IGdfaGFzaF90
YWJsZV9zaXplIChjYWNoZS0+cHJpdi0+Y2FjaGUpKTsKKworCXJldHVybiBUUlVFOworfQorCitz
dGF0aWMgZ2ludAorbHJ1X2NvbXBhcmVfZnVuYyAoZ2NvbnN0cG9pbnRlciBhLCBnY29uc3Rwb2lu
dGVyIGIpCit7CisJV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5X2EgPSAoV2ViS2l0U291cENh
Y2hlRW50cnkgKilhOworCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeV9iID0gKFdlYktpdFNv
dXBDYWNoZUVudHJ5ICopYjsKKworCS8qKiBUaGUgcmF0aW9uYWxlIG9mIHRoaXMgc29ydGluZyBm
dW5jIGlzCisJICoKKwkgKiAxLiBzb3J0IGJ5IGhpdHMgLT4gTFJVIGFsZ29yaXRobSwgdGhlbgor
CSAqCisJICogMi4gc29ydCBieSBmcmVzaG5lc3MgbGlmZXRpbWUsIHdlIGJldHRlciBkaXNjYXJk
IGZpcnN0CisJICogZW50cmllcyB0aGF0IGFyZSBjbG9zZSB0byBleHBpcmUKKwkgKgorCSAqIDMu
IHNvcnQgYnkgc2l6ZSwgcmVwbGFjZSBmaXJzdCBzbWFsbCBzaXplIHJlc291cmNlcyBhcyB0aGV5
CisJICogYXJlIGNoZWFwZXIgdG8gZG93bmxvYWQKKwkgKiovCisKKwkvKiBTb3J0IGJ5IGhpdHMg
Ki8KKwlpZiAoZW50cnlfYS0+aGl0cyAhPSBlbnRyeV9iLT5oaXRzKQorCQlyZXR1cm4gZW50cnlf
YS0+aGl0cyAtIGVudHJ5X2ItPmhpdHM7CisKKwkvKiBTb3J0IGJ5IGZyZXNobmVzc19saWZldGlt
ZSAqLworCWlmIChlbnRyeV9hLT5mcmVzaG5lc3NfbGlmZXRpbWUgIT0gZW50cnlfYi0+ZnJlc2hu
ZXNzX2xpZmV0aW1lKQorCQlyZXR1cm4gZW50cnlfYS0+ZnJlc2huZXNzX2xpZmV0aW1lIC0gZW50
cnlfYi0+ZnJlc2huZXNzX2xpZmV0aW1lOworCisJLyogU29ydCBieSBzaXplICovCisJcmV0dXJu
IGVudHJ5X2EtPmxlbmd0aCAtIGVudHJ5X2ItPmxlbmd0aDsKK30KKworc3RhdGljIGdib29sZWFu
CitjYWNoZV9hY2NlcHRzX2VudHJpZXNfb2Zfc2l6ZSAoV2ViS2l0U291cENhY2hlICpjYWNoZSwg
Z3VpbnQgbGVuZ3RoX3RvX2FkZCkKK3sKKwkvKiBXZSBjb3VsZCBhZGQgaGVyZSBzb21lIG1vcmUg
aGV1cmlzdGljcy4gVE9ETzogcmV2aWV3IGhvdworCSAgIHRoaXMgaXMgZG9uZSBieSBvdGhlciBI
VFRQIGNhY2hlcyAqLworCisJcmV0dXJuIGxlbmd0aF90b19hZGQgPD0gY2FjaGUtPnByaXYtPm1h
eF9lbnRyeV9kYXRhX3NpemU7Cit9CisKK3N0YXRpYyB2b2lkCittYWtlX3Jvb21fZm9yX25ld19l
bnRyeSAoV2ViS2l0U291cENhY2hlICpjYWNoZSwgZ3VpbnQgbGVuZ3RoX3RvX2FkZCkKK3sKKwlH
TGlzdCAqbHJ1X2VudHJ5ID0gY2FjaGUtPnByaXYtPmxydV9zdGFydDsKKworCS8qIENoZWNrIHRo
YXQgdGhlcmUgaXMgZW5vdWdoIHJvb20gZm9yIHRoZSBuZXcgZW50cnkuIFRoaXMgaXMKKwkgICBh
biBhcHByb3hpbWF0aW9uIGFzIHdlJ3JlIG5vdCB3b3JraW5nIG91dCB0aGUgc2l6ZSBvZiB0aGUK
KwkgICBjYWNoZSBmaWxlIG9yIHRoZSBzaXplIG9mIHRoZSBoZWFkZXJzIGZvciBwZXJmb3JtYW5j
ZQorCSAgIHJlYXNvbnMuIFRPRE86IGNoZWNrIGlmIHRoYXQgd291bGQgYmUgcmVhbGx5IHRoYXQg
ZXhwZW5zaXZlICovCisKKwl3aGlsZSAobHJ1X2VudHJ5ICYmCisJICAgICAgIChsZW5ndGhfdG9f
YWRkICsgY2FjaGUtPnByaXYtPnNpemUgPiBjYWNoZS0+cHJpdi0+bWF4X3NpemUpKSB7CisJCVdl
YktpdFNvdXBDYWNoZUVudHJ5ICpvbGRfZW50cnkgPSAoV2ViS2l0U291cENhY2hlRW50cnkgKils
cnVfZW50cnktPmRhdGE7CisKKwkJLyogRGlzY2FyZCBlbnRyaWVzLiBPbmNlIGNhbmNlbGxlZCBy
ZXNvdXJjZXMgd2lsbCBiZQorCQkgKiBmcmVlZCBpbiBjbG9zZV9yZWFkeV9jYgorCQkgKi8KKwkJ
aWYgKHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X3JlbW92ZSAoY2FjaGUsIG9sZF9lbnRyeSkpIHsK
KwkJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUgKG9sZF9lbnRyeSwgVFJVRSk7CisJCQls
cnVfZW50cnkgPSBjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0OworCQl9IGVsc2UKKwkJCWxydV9lbnRy
eSA9IGdfbGlzdF9uZXh0IChscnVfZW50cnkpOworCX0KK30KKworc3RhdGljIGdib29sZWFuCit3
ZWJraXRfc291cF9jYWNoZV9lbnRyeV9pbnNlcnRfYnlfa2V5IChXZWJLaXRTb3VwQ2FjaGUgKmNh
Y2hlLAorCQkJCSAgICAgICBjb25zdCBjaGFyICprZXksCisJCQkJICAgICAgIFdlYktpdFNvdXBD
YWNoZUVudHJ5ICplbnRyeSwKKwkJCQkgICAgICAgZ2Jvb2xlYW4gc29ydCkKK3sKKwlndWludCBs
ZW5ndGhfdG9fYWRkID0gMDsKKworCWlmIChzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfZW5jb2Rp
bmcgKGVudHJ5LT5oZWFkZXJzKSAhPSBTT1VQX0VOQ09ESU5HX0NIVU5LRUQpCisJCWxlbmd0aF90
b19hZGQgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfY29udGVudF9sZW5ndGggKGVudHJ5LT5o
ZWFkZXJzKTsKKworCS8qIENoZWNrIGlmIHdlIGFyZSBnb2luZyB0byBzdG9yZSB0aGUgcmVzb3Vy
Y2UgZGVwZW5kaW5nIG9uIGl0cyBzaXplICovCisJaWYgKGxlbmd0aF90b19hZGQpIHsKKwkJaWYg
KCFjYWNoZV9hY2NlcHRzX2VudHJpZXNfb2Zfc2l6ZSAoY2FjaGUsIGxlbmd0aF90b19hZGQpKQor
CQkJcmV0dXJuIEZBTFNFOworCisJCS8qIE1ha2Ugcm9vbSBmb3IgbmV3IGVudHJ5IGlmIG5lZWRl
ZCAqLworCQltYWtlX3Jvb21fZm9yX25ld19lbnRyeSAoY2FjaGUsIGxlbmd0aF90b19hZGQpOwor
CX0KKworCWdfaGFzaF90YWJsZV9pbnNlcnQgKGNhY2hlLT5wcml2LT5jYWNoZSwgZ19zdHJkdXAg
KGtleSksIGVudHJ5KTsKKworCS8qIENvbXB1dGUgbmV3IGNhY2hlIHNpemUgKi8KKwljYWNoZS0+
cHJpdi0+c2l6ZSArPSBsZW5ndGhfdG9fYWRkOworCisJLyogVXBkYXRlIExSVSAqLworCWlmIChz
b3J0KQorCQljYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0ID0gZ19saXN0X2luc2VydF9zb3J0ZWQgKGNh
Y2hlLT5wcml2LT5scnVfc3RhcnQsIGVudHJ5LCBscnVfY29tcGFyZV9mdW5jKTsKKwllbHNlCisJ
CWNhY2hlLT5wcml2LT5scnVfc3RhcnQgPSBnX2xpc3RfcHJlcGVuZCAoY2FjaGUtPnByaXYtPmxy
dV9zdGFydCwgZW50cnkpOworCisJZ19hc3NlcnQgKGdfbGlzdF9sZW5ndGggKGNhY2hlLT5wcml2
LT5scnVfc3RhcnQpID09IGdfaGFzaF90YWJsZV9zaXplIChjYWNoZS0+cHJpdi0+Y2FjaGUpKTsK
KworCXJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZAorbXNnX3Jlc3RhcnRlZF9jYiAoU291
cE1lc3NhZ2UgKm1zZywgV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5KQoreworCS8qIEZJWE1F
OiBXaGF0IHNob3VsZCB3ZSBkbyBoZXJlIGV4YWN0bHk/ICovCit9CisKK3N0YXRpYyB2b2lkCith
cHBlbmRfdG9fcmVhZHlfY2IgKEdPYmplY3QgKnNvdXJjZSwgR0FzeW5jUmVzdWx0ICpyZXN1bHQs
IFdlYktpdFNvdXBDYWNoZVdyaXRpbmdGaXh0dXJlICpmaXh0dXJlKQoreworCUdGaWxlICpmaWxl
ID0gKEdGaWxlICopc291cmNlOworCUdPdXRwdXRTdHJlYW0gKnN0cmVhbTsKKwlXZWJLaXRTb3Vw
Q2FjaGVFbnRyeSAqZW50cnkgPSBmaXh0dXJlLT5lbnRyeTsKKworCXN0cmVhbSA9IChHT3V0cHV0
U3RyZWFtICopZ19maWxlX2FwcGVuZF90b19maW5pc2ggKGZpbGUsIHJlc3VsdCwgJmVudHJ5LT5l
cnJvcik7CisKKwlpZiAoZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQgKGVudHJ5LT5jYW5jZWxs
YWJsZSkgfHwgZW50cnktPmVycm9yKSB7CisJCWZpeHR1cmUtPmNhY2hlLT5wcml2LT5uX3BlbmRp
bmctLTsKKwkJZW50cnktPmRpcnR5ID0gRkFMU0U7CisJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5
X3JlbW92ZSAoZml4dHVyZS0+Y2FjaGUsIGVudHJ5KTsKKwkJd2Via2l0X3NvdXBfY2FjaGVfZW50
cnlfZnJlZSAoZW50cnksIFRSVUUpOworCQl3ZWJraXRfc291cF9jYWNoZV93cml0aW5nX2ZpeHR1
cmVfZnJlZSAoZml4dHVyZSk7CisJCXJldHVybjsKKwl9CisKKwllbnRyeS0+c3RyZWFtID0gZ19v
YmplY3RfcmVmIChzdHJlYW0pOworCWdfb2JqZWN0X3VucmVmIChmaWxlKTsKKworCS8qIElmIHdl
IGFscmVhZHkgZ290IGFsbCB0aGUgZGF0YSB3ZSBoYXZlIHRvIGluaXRpYXRlIHRoZQorCSAgIHdy
aXRpbmcgaGVyZSwgc2luY2Ugd2Ugd29uJ3QgZ2V0IG1vcmUgJ2dvdC1jaHVuaycKKwkgICBzaWdu
YWxzICovCisJaWYgKGVudHJ5LT5nb3RfYm9keSkgeworCQlHU3RyaW5nICpkYXRhID0gZW50cnkt
PmRhdGE7CisKKwkJLyogSXQgY291bGQgaGFwcGVuIHRoYXQgcmVhZGluZyB0aGUgZGF0YSBmcm9t
IHNlcnZlcgorCQkgICB3YXMgY29tcGxldGVkIGJlZm9yZSB0aGlzIGhhcHBlbnMuIEluIHRoYXQg
Y2FzZQorCQkgICB0aGVyZSBpcyBubyBkYXRhICovCisJCWlmIChkYXRhKSB7CisJCQllbnRyeS0+
d3JpdGluZyA9IFRSVUU7CisJCQlnX291dHB1dF9zdHJlYW1fd3JpdGVfYXN5bmMgKGVudHJ5LT5z
dHJlYW0sCisJCQkJCQkgICAgIGRhdGEtPnN0ciArIGVudHJ5LT5wb3MsCisJCQkJCQkgICAgIGRh
dGEtPmxlbiAtIGVudHJ5LT5wb3MsCisJCQkJCQkgICAgIEdfUFJJT1JJVFlfTE9XLAorCQkJCQkJ
ICAgICBlbnRyeS0+Y2FuY2VsbGFibGUsCisJCQkJCQkgICAgIChHQXN5bmNSZWFkeUNhbGxiYWNr
KXdyaXRlX3JlYWR5X2NiLAorCQkJCQkJICAgICBmaXh0dXJlKTsKKwkJfQorCX0KK30KKwordHlw
ZWRlZiBzdHJ1Y3QgeworCXRpbWVfdCByZXF1ZXN0X3RpbWU7CisJU291cFNlc3Npb25GZWF0dXJl
ICpmZWF0dXJlOworCWd1bG9uZyBnb3RfaGVhZGVyc19oYW5kbGVyOworfSBSZXF1ZXN0SGVscGVy
OworCitzdGF0aWMgdm9pZAorbXNnX2dvdF9oZWFkZXJzX2NiIChTb3VwTWVzc2FnZSAqbXNnLCBn
cG9pbnRlciB1c2VyX2RhdGEpCit7CisJV2ViS2l0U291cENhY2hlICpjYWNoZTsKKwlXZWJLaXRT
b3VwQ2FjaGVhYmlsaXR5IGNhY2hlYWJsZTsKKwlSZXF1ZXN0SGVscGVyICpoZWxwZXI7CisJdGlt
ZV90IHJlcXVlc3RfdGltZSwgcmVzcG9uc2VfdGltZTsKKworCXJlc3BvbnNlX3RpbWUgPSB0aW1l
IChOVUxMKTsKKworCWhlbHBlciA9IChSZXF1ZXN0SGVscGVyICopdXNlcl9kYXRhOworCWNhY2hl
ID0gV0VCS0lUX1NPVVBfQ0FDSEUgKGhlbHBlci0+ZmVhdHVyZSk7CisJcmVxdWVzdF90aW1lID0g
aGVscGVyLT5yZXF1ZXN0X3RpbWU7CisJZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9m
dW5jIChtc2csIG1zZ19nb3RfaGVhZGVyc19jYiwgdXNlcl9kYXRhKTsKKwlnX3NsaWNlX2ZyZWUg
KFJlcXVlc3RIZWxwZXIsIGhlbHBlcik7CisKKwljYWNoZWFibGUgPSB3ZWJraXRfc291cF9jYWNo
ZV9nZXRfY2FjaGVhYmlsaXR5IChjYWNoZSwgbXNnKTsKKworCWlmIChjYWNoZWFibGUgJiBXRUJL
SVRfU09VUF9DQUNIRV9DQUNIRUFCTEUpIHsKKwkJV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5
OworCQljaGFyICprZXk7CisJCUdGaWxlICpmaWxlOworCQlXZWJLaXRTb3VwQ2FjaGVXcml0aW5n
Rml4dHVyZSAqZml4dHVyZTsKKworCQkvKiBDaGVjayBpZiB3ZSBhcmUgYWxyZWFkeSBjYWNoaW5n
IHRoaXMgcmVzb3VyY2UgKi8KKwkJa2V5ID0gc291cF9tZXNzYWdlX2dldF9jYWNoZV9rZXkgKG1z
Zyk7CisJCWVudHJ5ID0gZ19oYXNoX3RhYmxlX2xvb2t1cCAoY2FjaGUtPnByaXYtPmNhY2hlLCBr
ZXkpOworCQlnX2ZyZWUgKGtleSk7CisKKwkJaWYgKGVudHJ5ICYmIGVudHJ5LT5kaXJ0eSkKKwkJ
CXJldHVybjsKKworCQkvKiBDcmVhdGUgYSBuZXcgZW50cnksIGRlbGV0aW5nIGFueSBvbGQgb25l
IGlmIHByZXNlbnQgKi8KKwkJaWYgKGVudHJ5KSB7CisJCQl3ZWJraXRfc291cF9jYWNoZV9lbnRy
eV9yZW1vdmUgKGNhY2hlLCBlbnRyeSk7CisJCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9mcmVl
IChlbnRyeSwgVFJVRSk7CisJCX0KKworCQllbnRyeSA9IHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5
X25ldyAoY2FjaGUsIG1zZywgcmVxdWVzdF90aW1lLCByZXNwb25zZV90aW1lKTsKKwkJZW50cnkt
PmhpdHMgPSAxOworCisJCS8qIERvIG5vdCBjb250aW51ZSBpZiBpdCBjYW4gbm90IGJlIHN0b3Jl
ZCAqLworCQlpZiAoIXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2luc2VydF9ieV9rZXkgKGNhY2hl
LCAoY29uc3QgZ2NoYXIgKillbnRyeS0+a2V5LCBlbnRyeSwgVFJVRSkpIHsKKwkJCXdlYmtpdF9z
b3VwX2NhY2hlX2VudHJ5X2ZyZWUgKGVudHJ5LCBUUlVFKTsKKwkJCXJldHVybjsKKwkJfQorCisJ
CWZpeHR1cmUgPSBnX3NsaWNlX25ldzAgKFdlYktpdFNvdXBDYWNoZVdyaXRpbmdGaXh0dXJlKTsK
KwkJZml4dHVyZS0+Y2FjaGUgPSBnX29iamVjdF9yZWYgKGNhY2hlKTsKKwkJZml4dHVyZS0+ZW50
cnkgPSBlbnRyeTsKKwkJZml4dHVyZS0+bXNnID0gZ19vYmplY3RfcmVmIChtc2cpOworCisJCS8q
IFdlIGNvbm5lY3Qgbm93IHRvIHRoZXNlIHNpZ25hbHMgYW5kIGJ1ZmZlciB0aGUgZGF0YQorCQkg
ICBpZiBpdCBjb21lcyBiZWZvcmUgdGhlIGZpbGUgaXMgcmVhZHkgZm9yIHdyaXRpbmcgKi8KKwkJ
Zml4dHVyZS0+Z290X2NodW5rX2hhbmRsZXIgPQorCQkJZ19zaWduYWxfY29ubmVjdCAobXNnLCAi
Z290LWNodW5rIiwgR19DQUxMQkFDSyAobXNnX2dvdF9jaHVua19jYiksIGZpeHR1cmUpOworCQlm
aXh0dXJlLT5nb3RfYm9keV9oYW5kbGVyID0KKwkJCWdfc2lnbmFsX2Nvbm5lY3QgKG1zZywgImdv
dC1ib2R5IiwgR19DQUxMQkFDSyAobXNnX2dvdF9ib2R5X2NiKSwgZml4dHVyZSk7CisJCWZpeHR1
cmUtPnJlc3RhcnRlZF9oYW5kbGVyID0KKwkJCWdfc2lnbmFsX2Nvbm5lY3QgKG1zZywgInJlc3Rh
cnRlZCIsIEdfQ0FMTEJBQ0sgKG1zZ19yZXN0YXJ0ZWRfY2IpLCBlbnRyeSk7CisKKwkJLyogUHJl
cGFyZSBlbnRyeSAqLworCQlmaWxlID0gZ19maWxlX25ld19mb3JfcGF0aCAoZW50cnktPmZpbGVu
YW1lKTsKKwkJY2FjaGUtPnByaXYtPm5fcGVuZGluZysrOworCisJCWVudHJ5LT5kaXJ0eSA9IFRS
VUU7CisJCWVudHJ5LT5jYW5jZWxsYWJsZSA9IGdfY2FuY2VsbGFibGVfbmV3ICgpOworCQlnX2Zp
bGVfYXBwZW5kX3RvX2FzeW5jIChmaWxlLCAwLAorCQkJCQlHX1BSSU9SSVRZX0xPVywgZW50cnkt
PmNhbmNlbGxhYmxlLAorCQkJCQkoR0FzeW5jUmVhZHlDYWxsYmFjaylhcHBlbmRfdG9fcmVhZHlf
Y2IsCisJCQkJCWZpeHR1cmUpOworCX0gZWxzZSBpZiAoY2FjaGVhYmxlICYgV0VCS0lUX1NPVVBf
Q0FDSEVfSU5WQUxJREFURVMpIHsKKwkJY2hhciAqa2V5OworCQlXZWJLaXRTb3VwQ2FjaGVFbnRy
eSAqZW50cnk7CisKKwkJa2V5ID0gc291cF9tZXNzYWdlX2dldF9jYWNoZV9rZXkgKG1zZyk7CisJ
CWVudHJ5ID0gZ19oYXNoX3RhYmxlX2xvb2t1cCAoY2FjaGUtPnByaXYtPmNhY2hlLCBrZXkpOwor
CQlnX2ZyZWUgKGtleSk7CisKKwkJaWYgKGVudHJ5KSB7CisJCQlpZiAod2Via2l0X3NvdXBfY2Fj
aGVfZW50cnlfcmVtb3ZlIChjYWNoZSwgZW50cnkpKQorCQkJCXdlYmtpdF9zb3VwX2NhY2hlX2Vu
dHJ5X2ZyZWUgKGVudHJ5LCBUUlVFKTsKKwkJfQorCX0gZWxzZSBpZiAoY2FjaGVhYmxlICYgV0VC
S0lUX1NPVVBfQ0FDSEVfVkFMSURBVEVTKSB7CisJCWNoYXIgKmtleTsKKwkJV2ViS2l0U291cENh
Y2hlRW50cnkgKmVudHJ5OworCisJCWtleSA9IHNvdXBfbWVzc2FnZV9nZXRfY2FjaGVfa2V5ICht
c2cpOworCQllbnRyeSA9IGdfaGFzaF90YWJsZV9sb29rdXAgKGNhY2hlLT5wcml2LT5jYWNoZSwg
a2V5KTsKKwkJZ19mcmVlIChrZXkpOworCisJCWdfcmV0dXJuX2lmX2ZhaWwgKGVudHJ5KTsKKwor
CQllbnRyeS0+YmVpbmdfdmFsaWRhdGVkID0gRkFMU0U7CisKKwkJLyogV2UgdXBkYXRlIHRoZSBo
ZWFkZXJzIG9mIHRoZSBleGlzdGluZyBjYWNoZSBpdGVtLAorCQkgICBwbHVzIGl0cyBhZ2UgKi8K
KwkJc291cF9tZXNzYWdlX2hlYWRlcnNfZm9yZWFjaCAobXNnLT5yZXNwb25zZV9oZWFkZXJzLAor
CQkJCQkgICAgICAoU291cE1lc3NhZ2VIZWFkZXJzRm9yZWFjaEZ1bmMpdXBkYXRlX2hlYWRlcnMs
CisJCQkJCSAgICAgIGVudHJ5LT5oZWFkZXJzKTsKKwkJd2Via2l0X3NvdXBfY2FjaGVfZW50cnlf
c2V0X2ZyZXNobmVzcyAoZW50cnksIG1zZywgY2FjaGUpOworCX0KK30KKworR0lucHV0U3RyZWFt
ICoKK3dlYmtpdF9zb3VwX2NhY2hlX3NlbmRfcmVzcG9uc2UgKFdlYktpdFNvdXBDYWNoZSAqY2Fj
aGUsIFNvdXBNZXNzYWdlICptc2cpCit7CisJY2hhciAqa2V5OworCVdlYktpdFNvdXBDYWNoZUVu
dHJ5ICplbnRyeTsKKwljaGFyICpjdXJyZW50X2FnZTsKKwlHSW5wdXRTdHJlYW0gKnN0cmVhbSA9
IE5VTEw7CisJR0ZpbGUgKmZpbGU7CisKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoV0VCS0lUX0lT
X1NPVVBfQ0FDSEUgKGNhY2hlKSwgTlVMTCk7CisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFNPVVBf
SVNfTUVTU0FHRSAobXNnKSwgTlVMTCk7CisKKwlrZXkgPSBzb3VwX21lc3NhZ2VfZ2V0X2NhY2hl
X2tleSAobXNnKTsKKwllbnRyeSA9IGdfaGFzaF90YWJsZV9sb29rdXAgKGNhY2hlLT5wcml2LT5j
YWNoZSwga2V5KTsKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoZW50cnksIE5VTEwpOworCisJLyog
SWYgd2UgYXJlIHRvbGQgdG8gc2VuZCBhIHJlc3BvbnNlIGZyb20gY2FjaGUgYW55IHZhbGlkYXRp
b24KKwkgICBpbiBjb3Vyc2UgaXMgb3ZlciBieSBub3cgKi8KKwllbnRyeS0+YmVpbmdfdmFsaWRh
dGVkID0gRkFMU0U7CisKKwkvKiBIZWFkZXJzICovCisJc291cF9tZXNzYWdlX2hlYWRlcnNfZm9y
ZWFjaCAoZW50cnktPmhlYWRlcnMsCisJCQkJICAgICAgKFNvdXBNZXNzYWdlSGVhZGVyc0ZvcmVh
Y2hGdW5jKXVwZGF0ZV9oZWFkZXJzLAorCQkJCSAgICAgIG1zZy0+cmVzcG9uc2VfaGVhZGVycyk7
CisKKwkvKiBBZGQgJ0FnZScgaGVhZGVyIHdpdGggdGhlIGN1cnJlbnQgYWdlICovCisJY3VycmVu
dF9hZ2UgPSBnX3N0cmR1cF9wcmludGYgKCIlZCIsIHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2dl
dF9jdXJyZW50X2FnZSAoZW50cnkpKTsKKwlzb3VwX21lc3NhZ2VfaGVhZGVyc19yZXBsYWNlICht
c2ctPnJlc3BvbnNlX2hlYWRlcnMsCisJCQkJICAgICAgIkFnZSIsCisJCQkJICAgICAgY3VycmVu
dF9hZ2UpOworCWdfZnJlZSAoY3VycmVudF9hZ2UpOworCisJLyogVE9ETzogdGhlIG9yaWdpbmFs
IGlkZWEgd2FzIHRvIHNhdmUgcmVhZHMsIGJ1dCBjdXJyZW50IGNvZGUKKwkgICBhc3N1bWVzIHRo
YXQgYSBzdHJlYW0gaXMgYWx3YXlzIHJldHVybmVkLiBOZWVkIHRvIHJlYWNoCisJICAgc29tZSBh
Z3JlZW1lbnQgaGVyZS4gQWxzbyB3ZSBoYXZlIHRvIGhhbmRsZSB0aGUgc2l0dWF0aW9uCisJICAg
d2VyZSB0aGUgZmlsZSB3YXMgbm8gbG9uZ2VyIHRoZXJlIChmb3IgZXhhbXBsZSBmaWxlcworCSAg
IHJlbW92ZWQgd2l0aG91dCBub3RpZnlpbmcgdGhlIGNhY2hlICovCisJZmlsZSA9IGdfZmlsZV9u
ZXdfZm9yX3BhdGggKGVudHJ5LT5maWxlbmFtZSk7CisJc3RyZWFtID0gKEdJbnB1dFN0cmVhbSAq
KWdfZmlsZV9yZWFkIChmaWxlLCBOVUxMLCBOVUxMKTsKKworCXJldHVybiBzdHJlYW07Cit9CisK
K3N0YXRpYyB2b2lkCityZXF1ZXN0X3N0YXJ0ZWQgKFNvdXBTZXNzaW9uRmVhdHVyZSAqZmVhdHVy
ZSwgU291cFNlc3Npb24gKnNlc3Npb24sCisJCSBTb3VwTWVzc2FnZSAqbXNnLCBTb3VwU29ja2V0
ICpzb2NrZXQpCit7CisJUmVxdWVzdEhlbHBlciAqaGVscGVyID0gZ19zbGljZV9uZXcwIChSZXF1
ZXN0SGVscGVyKTsKKwloZWxwZXItPnJlcXVlc3RfdGltZSA9IHRpbWUgKE5VTEwpOworCWhlbHBl
ci0+ZmVhdHVyZSA9IGZlYXR1cmU7CisJaGVscGVyLT5nb3RfaGVhZGVyc19oYW5kbGVyID0gZ19z
aWduYWxfY29ubmVjdCAobXNnLCAiZ290LWhlYWRlcnMiLAorCQkJCQkJCUdfQ0FMTEJBQ0sgKG1z
Z19nb3RfaGVhZGVyc19jYiksCisJCQkJCQkJaGVscGVyKTsKK30KKworc3RhdGljIHZvaWQKK2F0
dGFjaCAoU291cFNlc3Npb25GZWF0dXJlICpmZWF0dXJlLCBTb3VwU2Vzc2lvbiAqc2Vzc2lvbikK
K3sKKwlXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlID0gV0VCS0lUX1NPVVBfQ0FDSEUgKGZlYXR1cmUp
OworCWNhY2hlLT5wcml2LT5zZXNzaW9uID0gc2Vzc2lvbjsKKworCXdlYmtpdF9zb3VwX2NhY2hl
X2RlZmF1bHRfZmVhdHVyZV9pbnRlcmZhY2UtPmF0dGFjaCAoZmVhdHVyZSwgc2Vzc2lvbik7Cit9
CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfc291cF9jYWNoZV9zZXNzaW9uX2ZlYXR1cmVfaW5pdCAo
U291cFNlc3Npb25GZWF0dXJlSW50ZXJmYWNlICpmZWF0dXJlX2ludGVyZmFjZSwKKwkJCQkJZ3Bv
aW50ZXIgaW50ZXJmYWNlX2RhdGEpCit7CisJd2Via2l0X3NvdXBfY2FjaGVfZGVmYXVsdF9mZWF0
dXJlX2ludGVyZmFjZSA9CisJCWdfdHlwZV9kZWZhdWx0X2ludGVyZmFjZV9wZWVrIChTT1VQX1RZ
UEVfU0VTU0lPTl9GRUFUVVJFKTsKKworCWZlYXR1cmVfaW50ZXJmYWNlLT5hdHRhY2ggPSBhdHRh
Y2g7CisJZmVhdHVyZV9pbnRlcmZhY2UtPnJlcXVlc3Rfc3RhcnRlZCA9IHJlcXVlc3Rfc3RhcnRl
ZDsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX2NhY2hlX2luaXQgKFdlYktpdFNvdXBD
YWNoZSAqY2FjaGUpCit7CisJV2ViS2l0U291cENhY2hlUHJpdmF0ZSAqcHJpdjsKKworCXByaXYg
PSBjYWNoZS0+cHJpdiA9IFdFQktJVF9TT1VQX0NBQ0hFX0dFVF9QUklWQVRFIChjYWNoZSk7CisK
Kwlwcml2LT5jYWNoZSA9IGdfaGFzaF90YWJsZV9uZXdfZnVsbCAoZ19zdHJfaGFzaCwKKwkJCQkJ
ICAgICBnX3N0cl9lcXVhbCwKKwkJCQkJICAgICAoR0Rlc3Ryb3lOb3RpZnkpZ19mcmVlLAorCQkJ
CQkgICAgIE5VTEwpOworCisJLyogTFJVICovCisJcHJpdi0+bHJ1X3N0YXJ0ID0gTlVMTDsKKwor
CS8qICovCisJcHJpdi0+bl9wZW5kaW5nID0gMDsKKworCS8qIENhY2hlIHNpemUgKi8KKwlwcml2
LT5tYXhfc2l6ZSA9IERFRkFVTFRfTUFYX1NJWkU7CisJcHJpdi0+bWF4X2VudHJ5X2RhdGFfc2l6
ZSA9IHByaXYtPm1heF9zaXplIC8gTUFYX0VOVFJZX0RBVEFfUEVSQ0VOVEFHRTsKKwlwcml2LT5z
aXplID0gMDsKK30KKworc3RhdGljIHZvaWQKK3JlbW92ZV9jYWNoZV9pdGVtIChncG9pbnRlciBr
ZXksCisJCSAgIGdwb2ludGVyIHZhbHVlLAorCQkgICBXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKQor
eworCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSA9IGdfaGFzaF90YWJsZV9sb29rdXAgKGNh
Y2hlLT5wcml2LT5jYWNoZSwgKGNvbnN0IGdjaGFyICopa2V5KTsKKwlpZiAod2Via2l0X3NvdXBf
Y2FjaGVfZW50cnlfcmVtb3ZlIChjYWNoZSwgZW50cnkpKQorCQl3ZWJraXRfc291cF9jYWNoZV9l
bnRyeV9mcmVlIChlbnRyeSwgRkFMU0UpOworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBf
Y2FjaGVfZmluYWxpemUgKEdPYmplY3QgKm9iamVjdCkKK3sKKwlXZWJLaXRTb3VwQ2FjaGVQcml2
YXRlICpwcml2OworCisJcHJpdiA9IFdFQktJVF9TT1VQX0NBQ0hFIChvYmplY3QpLT5wcml2Owor
CisJZ19oYXNoX3RhYmxlX2ZvcmVhY2ggKHByaXYtPmNhY2hlLCAoR0hGdW5jKXJlbW92ZV9jYWNo
ZV9pdGVtLCBvYmplY3QpOworCWdfaGFzaF90YWJsZV9kZXN0cm95IChwcml2LT5jYWNoZSk7CisJ
Z19mcmVlIChwcml2LT5jYWNoZV9kaXIpOworCisJZ19saXN0X2ZyZWUgKHByaXYtPmxydV9zdGFy
dCk7CisJcHJpdi0+bHJ1X3N0YXJ0ID0gTlVMTDsKKworCUdfT0JKRUNUX0NMQVNTICh3ZWJraXRf
c291cF9jYWNoZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKK30KKworc3RhdGlj
IHZvaWQKK3dlYmtpdF9zb3VwX2NhY2hlX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqb2JqZWN0LCBn
dWludCBwcm9wX2lkLAorCQkJCWNvbnN0IEdWYWx1ZSAqdmFsdWUsIEdQYXJhbVNwZWMgKnBzcGVj
KQoreworCVdlYktpdFNvdXBDYWNoZVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9DQUNIRSAo
b2JqZWN0KS0+cHJpdjsKKworCXN3aXRjaCAocHJvcF9pZCkgeworCQljYXNlIFBST1BfQ0FDSEVf
RElSOgorCQkJcHJpdi0+Y2FjaGVfZGlyID0gZ192YWx1ZV9kdXBfc3RyaW5nICh2YWx1ZSk7CisJ
CQkvKiBDcmVhdGUgZGlyZWN0b3J5IGlmIGl0IGRvZXMgbm90IGV4aXN0IChGSVhNRTogc2hvdWxk
IHdlPykgKi8KKwkJCWlmICghZ19maWxlX3Rlc3QgKHByaXYtPmNhY2hlX2RpciwgR19GSUxFX1RF
U1RfRVhJU1RTIHwgR19GSUxFX1RFU1RfSVNfRElSKSkKKwkJCQlnX21rZGlyX3dpdGhfcGFyZW50
cyAocHJpdi0+Y2FjaGVfZGlyLCAwNzAwKTsKKwkJCWJyZWFrOworCQljYXNlIFBST1BfQ0FDSEVf
VFlQRToKKwkJCXByaXYtPmNhY2hlX3R5cGUgPSBnX3ZhbHVlX2dldF9lbnVtICh2YWx1ZSk7CisJ
CQkvKiBUT0RPOiBjbGVhciBwcml2YXRlIGVudHJpZXMgYW5kIGlzc3VlIGEgd2FybmluZyBpZiBt
b3ZpbmcgdG8gc2hhcmVkPyAqLworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlHX09CSkVDVF9X
QVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworCQkJYnJl
YWs7CisJfQorfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfY2FjaGVfZ2V0X3Byb3BlcnR5
IChHT2JqZWN0ICpvYmplY3QsIGd1aW50IHByb3BfaWQsCisJCQkJR1ZhbHVlICp2YWx1ZSwgR1Bh
cmFtU3BlYyAqcHNwZWMpCit7CisJV2ViS2l0U291cENhY2hlUHJpdmF0ZSAqcHJpdiA9IFdFQktJ
VF9TT1VQX0NBQ0hFIChvYmplY3QpLT5wcml2OworCisJc3dpdGNoIChwcm9wX2lkKSB7CisJCWNh
c2UgUFJPUF9DQUNIRV9ESVI6CisJCQlnX3ZhbHVlX3NldF9zdHJpbmcgKHZhbHVlLCBwcml2LT5j
YWNoZV9kaXIpOworCQkJYnJlYWs7CisJCWNhc2UgUFJPUF9DQUNIRV9UWVBFOgorCQkJZ192YWx1
ZV9zZXRfZW51bSAodmFsdWUsIHByaXYtPmNhY2hlX3R5cGUpOworCQkJYnJlYWs7CisJCWRlZmF1
bHQ6CisJCQlHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9p
ZCwgcHNwZWMpOworCQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBf
Y2FjaGVfY29uc3RydWN0ZWQgKEdPYmplY3QgKm9iamVjdCkKK3sKKwlXZWJLaXRTb3VwQ2FjaGVQ
cml2YXRlICpwcml2OworCisJcHJpdiA9IFdFQktJVF9TT1VQX0NBQ0hFIChvYmplY3QpLT5wcml2
OworCisJaWYgKCFwcml2LT5jYWNoZV9kaXIpIHsKKwkJLyogU2V0IGEgZGVmYXVsdCBjYWNoZSBk
aXIsIGRpZmZlcmVudCBmb3IgZWFjaCB1c2VyICovCisJCXByaXYtPmNhY2hlX2RpciA9IGdfYnVp
bGRfZmlsZW5hbWUgKGdfZ2V0X3VzZXJfY2FjaGVfZGlyICgpLAorCQkJCQkJICAgICJodHRwY2Fj
aGUiLAorCQkJCQkJICAgIE5VTEwpOworCQlpZiAoIWdfZmlsZV90ZXN0IChwcml2LT5jYWNoZV9k
aXIsIEdfRklMRV9URVNUX0VYSVNUUyB8IEdfRklMRV9URVNUX0lTX0RJUikpCisJCQlnX21rZGly
X3dpdGhfcGFyZW50cyAocHJpdi0+Y2FjaGVfZGlyLCAwNzAwKTsKKwl9CisKKwlpZiAoR19PQkpF
Q1RfQ0xBU1MgKHdlYmtpdF9zb3VwX2NhY2hlX3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkKQor
CQlHX09CSkVDVF9DTEFTUyAod2Via2l0X3NvdXBfY2FjaGVfcGFyZW50X2NsYXNzKS0+Y29uc3Ry
dWN0ZWQgKG9iamVjdCk7Cit9CisKKyNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FDSEVfVFlQRV9UWVBF
ICh3ZWJraXRfc291cF9jYWNoZV90eXBlX2dldF90eXBlICgpKQorc3RhdGljIEdUeXBlCit3ZWJr
aXRfc291cF9jYWNoZV90eXBlX2dldF90eXBlICh2b2lkKQoreworCXN0YXRpYyBHVHlwZSBjYWNo
ZV90eXBlID0gMDsKKworCXN0YXRpYyBjb25zdCBHRW51bVZhbHVlIGNhY2hlX3R5cGVzW10gPSB7
CisJCXsgV0VCS0lUX1NPVVBfQ0FDSEVfU0lOR0xFX1VTRVIsICJTaW5nbGUgdXNlciBjYWNoZSIs
ICJ1c2VyIiB9LAorCQl7IFdFQktJVF9TT1VQX0NBQ0hFX1NIQVJFRCwgIlNoYXJlZCBjYWNoZSIs
ICJzaGFyZWQiIH0sCisJCXsgMCwgTlVMTCwgTlVMTCB9CisJfTsKKworCWlmICghY2FjaGVfdHlw
ZSkgeworCQljYWNoZV90eXBlID0gZ19lbnVtX3JlZ2lzdGVyX3N0YXRpYyAoIldlYktpdFNvdXBD
YWNoZVR5cGUiLCBjYWNoZV90eXBlcyk7CisJfQorCXJldHVybiBjYWNoZV90eXBlOworfQorCitz
dGF0aWMgdm9pZAord2Via2l0X3NvdXBfY2FjaGVfY2xhc3NfaW5pdCAoV2ViS2l0U291cENhY2hl
Q2xhc3MgKmNhY2hlX2NsYXNzKQoreworCUdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IChH
T2JqZWN0Q2xhc3MgKiljYWNoZV9jbGFzczsKKworCWdvYmplY3RfY2xhc3MtPmZpbmFsaXplID0g
d2Via2l0X3NvdXBfY2FjaGVfZmluYWxpemU7CisJZ29iamVjdF9jbGFzcy0+Y29uc3RydWN0ZWQg
PSB3ZWJraXRfc291cF9jYWNoZV9jb25zdHJ1Y3RlZDsKKwlnb2JqZWN0X2NsYXNzLT5zZXRfcHJv
cGVydHkgPSB3ZWJraXRfc291cF9jYWNoZV9zZXRfcHJvcGVydHk7CisJZ29iamVjdF9jbGFzcy0+
Z2V0X3Byb3BlcnR5ID0gd2Via2l0X3NvdXBfY2FjaGVfZ2V0X3Byb3BlcnR5OworCisJY2FjaGVf
Y2xhc3MtPmdldF9jYWNoZWFiaWxpdHkgPSBnZXRfY2FjaGVhYmlsaXR5OworCisJZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSAoZ29iamVjdF9jbGFzcywgUFJPUF9DQUNIRV9ESVIsCisJ
CQkJCSBnX3BhcmFtX3NwZWNfc3RyaW5nICgiY2FjaGUtZGlyIiwKKwkJCQkJCQkgICAgICAiQ2Fj
aGUgZGlyZWN0b3J5IiwKKwkJCQkJCQkgICAgICAiVGhlIGRpcmVjdG9yeSB0byBzdG9yZSB0aGUg
Y2FjaGUgZmlsZXMiLAorCQkJCQkJCSAgICAgIE5VTEwsCisJCQkJCQkJICAgICAgR19QQVJBTV9S
RUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSk7CisKKwlnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0NBQ0hFX1RZUEUsCisJCQkJCSBn
X3BhcmFtX3NwZWNfZW51bSAoImNhY2hlLXR5cGUiLAorCQkJCQkJCSAgICAiQ2FjaGUgdHlwZSIs
CisJCQkJCQkJICAgICJXaGV0aGVyIHRoZSBjYWNoZSBpcyBwcml2YXRlIG9yIHNoYXJlZCIsCisJ
CQkJCQkJICAgIFdFQktJVF9TT1VQX0NBQ0hFX1RZUEVfVFlQRSwKKwkJCQkJCQkgICAgV0VCS0lU
X1NPVVBfQ0FDSEVfU0lOR0xFX1VTRVIsCisJCQkJCQkJICAgIEdfUEFSQU1fUkVBRFdSSVRFIHwg
R19QQVJBTV9DT05TVFJVQ1RfT05MWSkpOworCisJZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlIChj
YWNoZV9jbGFzcywgc2l6ZW9mIChXZWJLaXRTb3VwQ2FjaGVQcml2YXRlKSk7Cit9CisKKy8qKgor
ICogd2Via2l0X3NvdXBfY2FjaGVfbmV3OgorICogQGNhY2hlX2RpcjogdGhlIGRpcmVjdG9yeSB0
byBzdG9yZSB0aGUgY2FjaGVkIGRhdGEsIG9yICVOVUxMIHRvIHVzZSB0aGUgZGVmYXVsdCBvbmUK
KyAqIEBjYWNoZV90eXBlOiB0aGUgI1dlYktpdFNvdXBDYWNoZVR5cGUgb2YgdGhlIGNhY2hlCisg
KgorICogQ3JlYXRlcyBhIG5ldyAjV2ViS2l0U291cENhY2hlLgorICoKKyAqIFJldHVybnM6IGEg
bmV3ICNXZWJLaXRTb3VwQ2FjaGUKKyAqCisgKiBTaW5jZTogMi4yOAorICoqLworV2ViS2l0U291
cENhY2hlICoKK3dlYmtpdF9zb3VwX2NhY2hlX25ldyAoY29uc3QgY2hhciAqY2FjaGVfZGlyLCBX
ZWJLaXRTb3VwQ2FjaGVUeXBlIGNhY2hlX3R5cGUpCit7CisJcmV0dXJuIGdfb2JqZWN0X25ldyAo
V0VCS0lUX1RZUEVfU09VUF9DQUNIRSwKKwkJCSAgICAgImNhY2hlLWRpciIsIGNhY2hlX2RpciwK
KwkJCSAgICAgImNhY2hlLXR5cGUiLCBjYWNoZV90eXBlLAorCQkJICAgICBOVUxMKTsKK30KKwor
LyoqCisgKiB3ZWJraXRfc291cF9jYWNoZV9oYXNfcmVzcG9uc2U6CisgKiBAY2FjaGU6IGEgI1dl
YktpdFNvdXBDYWNoZQorICogQG1zZzogYSAjU291cE1lc3NhZ2UKKyAqCisgKiBUaGlzIGZ1bmN0
aW9uIGNhbGN1bGF0ZXMgd2hldGhlciB0aGUgQGNhY2hlIG9iamVjdCBoYXMgYSBwcm9wZXIKKyAq
IHJlc3BvbnNlIGZvciB0aGUgcmVxdWVzdCBAbXNnIGdpdmVuIHRoZSBmbGFncyBib3RoIGluIHRo
ZSByZXF1ZXN0CisgKiBhbmQgdGhlIGNhY2hlZCByZXBseSBhbmQgdGhlIHRpbWUgZWxsYXBzZWQg
c2luY2UgaXQgd2FzIGNhY2hlZC4KKyAqCisgKiBSZXR1cm5zOiB3aGV0aGVyIG9yIG5vdCB0aGUg
QGNhY2hlIGhhcyBhIHZhbGlkIHJlc3BvbnNlIGZvciBAbXNnCisgKiovCitXZWJLaXRTb3VwQ2Fj
aGVSZXNwb25zZQord2Via2l0X3NvdXBfY2FjaGVfaGFzX3Jlc3BvbnNlIChXZWJLaXRTb3VwQ2Fj
aGUgKmNhY2hlLCBTb3VwTWVzc2FnZSAqbXNnKQoreworCWNoYXIgKmtleTsKKwlXZWJLaXRTb3Vw
Q2FjaGVFbnRyeSAqZW50cnk7CisJY29uc3QgY2hhciAqY2FjaGVfY29udHJvbDsKKwlHSGFzaFRh
YmxlICpoYXNoOworCWdwb2ludGVyIHZhbHVlOworCWdib29sZWFuIG11c3RfcmV2YWxpZGF0ZTsK
KwlpbnQgbWF4X2FnZSwgbWF4X3N0YWxlLCBtaW5fZnJlc2g7CisJR0xpc3QgKmxydV9pdGVtLCAq
aXRlbTsKKworCWtleSA9IHNvdXBfbWVzc2FnZV9nZXRfY2FjaGVfa2V5IChtc2cpOworCWVudHJ5
ID0gZ19oYXNoX3RhYmxlX2xvb2t1cCAoY2FjaGUtPnByaXYtPmNhY2hlLCBrZXkpOworCisJLyog
MS4gVGhlIHByZXNlbnRlZCBSZXF1ZXN0LVVSSSBhbmQgdGhhdCBvZiBzdG9yZWQgcmVzcG9uc2UK
KwkgKiBtYXRjaAorCSAqLworCWlmICghZW50cnkpCisJCXJldHVybiBXRUJLSVRfU09VUF9DQUNI
RV9SRVNQT05TRV9TVEFMRTsKKworCS8qIEluY3JlYXNlIGhpdCBjb3VudC4gVGFrZSBzb3J0aW5n
IGludG8gYWNjb3VudCAqLworCWVudHJ5LT5oaXRzKys7CisJbHJ1X2l0ZW0gPSBnX2xpc3RfZmlu
ZCAoY2FjaGUtPnByaXYtPmxydV9zdGFydCwgZW50cnkpOworCWl0ZW0gPSBscnVfaXRlbTsKKwl3
aGlsZSAoaXRlbS0+bmV4dCAmJiBscnVfY29tcGFyZV9mdW5jIChpdGVtLT5kYXRhLCBpdGVtLT5u
ZXh0LT5kYXRhKSA+IDApCisJCWl0ZW0gPSBnX2xpc3RfbmV4dCAoaXRlbSk7CisKKwlpZiAoaXRl
bSAhPSBscnVfaXRlbSkgeworCQljYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0ID0gZ19saXN0X3JlbW92
ZV9saW5rIChjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0LCBscnVfaXRlbSk7CisJCWl0ZW0gPSBnX2xp
c3RfaW5zZXJ0X3NvcnRlZCAoaXRlbSwgbHJ1X2l0ZW0tPmRhdGEsIGxydV9jb21wYXJlX2Z1bmMp
OworCQlnX2xpc3RfZnJlZSAobHJ1X2l0ZW0pOworCX0KKworCWlmIChlbnRyeS0+ZGlydHkgfHwg
ZW50cnktPmJlaW5nX3ZhbGlkYXRlZCkKKwkJcmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1JFU1BP
TlNFX1NUQUxFOworCisJLyogMi4gVGhlIHJlcXVlc3QgbWV0aG9kIGFzc29jaWF0ZWQgd2l0aCB0
aGUgc3RvcmVkIHJlc3BvbnNlCisJICogIGFsbG93cyBpdCB0byBiZSB1c2VkIGZvciB0aGUgcHJl
c2VudGVkIHJlcXVlc3QKKwkgKi8KKworCS8qIEluIHByYWN0aWNlIHRoaXMgbWVhbnMgd2Ugb25s
eSByZXR1cm4gb3VyIHJlc291cmNlIGZvciBHRVQsCisJICogY2FjaGVhYmlsaXR5IGZvciBvdGhl
ciBtZXRob2RzIGlzIGEgVE9ETyBpbiB0aGUgUkZDCisJICogKFRPRE86IGFsdGhvdWdoIHdlIGNv
dWxkIHJldHVybiB0aGUgaGVhZGVycyBmb3IgSEVBRAorCSAqIHByb2JhYmx5KS4KKwkgKi8KKwlp
ZiAobXNnLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKQorCQlyZXR1cm4gV0VCS0lUX1NPVVBf
Q0FDSEVfUkVTUE9OU0VfU1RBTEU7CisKKwkvKiAzLiBTZWxlY3RpbmcgcmVxdWVzdC1oZWFkZXJz
IG5vbWluYXRlZCBieSB0aGUgc3RvcmVkCisJICogcmVzcG9uc2UgKGlmIGFueSkgbWF0Y2ggdGhv
c2UgcHJlc2VudGVkLgorCSAqLworCisJLyogVE9ETyAqLworCisJLyogNC4gVGhlIHByZXNlbnRl
ZCByZXF1ZXN0IGFuZCBzdG9yZWQgcmVzcG9uc2UgYXJlIGZyZWUgZnJvbQorCSAqIGRpcmVjdGl2
ZXMgdGhhdCB3b3VsZCBwcmV2ZW50IGl0cyB1c2UuCisJICovCisKKwltdXN0X3JldmFsaWRhdGUg
PSBGQUxTRTsKKwltYXhfYWdlID0gbWF4X3N0YWxlID0gbWluX2ZyZXNoID0gLTE7CisKKwljYWNo
ZV9jb250cm9sID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0IChtc2ctPnJlcXVlc3RfaGVhZGVy
cywgIkNhY2hlLUNvbnRyb2wiKTsKKwlpZiAoY2FjaGVfY29udHJvbCkgeworCQloYXNoID0gc291
cF9oZWFkZXJfcGFyc2VfcGFyYW1fbGlzdCAoY2FjaGVfY29udHJvbCk7CisKKwkJaWYgKGdfaGFz
aF90YWJsZV9sb29rdXBfZXh0ZW5kZWQgKGhhc2gsICJuby1zdG9yZSIsIE5VTEwsIE5VTEwpKSB7
CisJCQlnX2hhc2hfdGFibGVfZGVzdHJveSAoaGFzaCk7CisJCQlyZXR1cm4gV0VCS0lUX1NPVVBf
Q0FDSEVfUkVTUE9OU0VfU1RBTEU7CisJCX0KKworCQlpZiAoZ19oYXNoX3RhYmxlX2xvb2t1cF9l
eHRlbmRlZCAoaGFzaCwgIm5vLWNhY2hlIiwgTlVMTCwgTlVMTCkpIHsKKwkJCWVudHJ5LT5tdXN0
X3JldmFsaWRhdGUgPSBUUlVFOworCQl9CisKKwkJaWYgKGdfaGFzaF90YWJsZV9sb29rdXBfZXh0
ZW5kZWQgKGhhc2gsICJtYXgtYWdlIiwgTlVMTCwgJnZhbHVlKSkgeworCQkJbWF4X2FnZSA9IChp
bnQpTUlOIChnX2FzY2lpX3N0cnRvbGwgKHZhbHVlLCBOVUxMLCAxMCksIEdfTUFYSU5UMzIpOwor
CQl9CisKKwkJLyogbWF4LXN0YWxlIGNhbiBoYXZlIG5vIHZhbHVlIHNldCwgd2UgbmVlZCB0byB1
c2UgX2V4dGVuZGVkICovCisJCWlmIChnX2hhc2hfdGFibGVfbG9va3VwX2V4dGVuZGVkIChoYXNo
LCAibWF4LXN0YWxlIiwgTlVMTCwgJnZhbHVlKSkgeworCQkJaWYgKHZhbHVlKQorCQkJCW1heF9z
dGFsZSA9IChpbnQpTUlOIChnX2FzY2lpX3N0cnRvbGwgKHZhbHVlLCBOVUxMLCAxMCksIEdfTUFY
SU5UMzIpOworCQkJZWxzZQorCQkJCW1heF9zdGFsZSA9IEdfTUFYSU5UMzI7CisJCX0KKworCQl2
YWx1ZSA9IGdfaGFzaF90YWJsZV9sb29rdXAgKGhhc2gsICJtaW4tZnJlc2giKTsKKwkJaWYgKHZh
bHVlKQorCQkJbWluX2ZyZXNoID0gKGludClNSU4gKGdfYXNjaWlfc3RydG9sbCAodmFsdWUsIE5V
TEwsIDEwKSwgR19NQVhJTlQzMik7CisKKwkJZ19oYXNoX3RhYmxlX2Rlc3Ryb3kgKGhhc2gpOwor
CisJCWlmIChtYXhfYWdlICE9IC0xKSB7CisJCQlndWludCBjdXJyZW50X2FnZSA9IHdlYmtpdF9z
b3VwX2NhY2hlX2VudHJ5X2dldF9jdXJyZW50X2FnZSAoZW50cnkpOworCisJCQkvKiBJZiB3ZSBh
cmUgb3ZlciBtYXgtYWdlIGFuZCBtYXgtc3RhbGUgaXMgbm90CisJCQkgICBzZXQsIGRvIG5vdCB1
c2UgdGhlIHZhbHVlIGZyb20gdGhlIGNhY2hlCisJCQkgICB3aXRob3V0IHZhbGlkYXRpb24gKi8K
KwkJCWlmIChtYXhfYWdlIDw9IGN1cnJlbnRfYWdlICYmIG1heF9zdGFsZSA9PSAtMSkKKwkJCQly
ZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfTkVFRFNfVkFMSURBVElPTjsKKwkJfQor
CX0KKworCS8qIDUuIFRoZSBzdG9yZWQgcmVzcG9uc2UgaXMgZWl0aGVyOiBmcmVzaCwgYWxsb3dl
ZCB0byBiZQorCSAqIHNlcnZlZCBzdGFsZSBvciBzdWNjZXNmdWxseSB2YWxpZGF0ZWQKKwkgKi8K
KwkvKiBUT0RPIGNvbnNpZGVyIGFsc28gcHJveHktcmV2YWxpZGF0ZSAmIHMtbWF4YWdlICovCisJ
aWYgKGVudHJ5LT5tdXN0X3JldmFsaWRhdGUpCisJCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9S
RVNQT05TRV9ORUVEU19WQUxJREFUSU9OOworCisJaWYgKCF3ZWJraXRfc291cF9jYWNoZV9lbnRy
eV9pc19mcmVzaF9lbm91Z2ggKGVudHJ5LCBtaW5fZnJlc2gpKSB7CisJCS8qIE5vdCBmcmVzaCwg
Y2FuIGl0IGJlIHNlcnZlZCBzdGFsZT8gKi8KKwkJaWYgKG1heF9zdGFsZSAhPSAtMSkgeworCQkJ
LyogR19NQVhJTlQzMiBtZWFucyB3ZSBhY2NlcHQgYW55IHN0YWxlbmVzcyAqLworCQkJaWYgKG1h
eF9zdGFsZSA9PSBHX01BWElOVDMyKQorCQkJCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9SRVNQ
T05TRV9GUkVTSDsKKworCQkJaWYgKCh3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9nZXRfY3VycmVu
dF9hZ2UgKGVudHJ5KSAtIGVudHJ5LT5mcmVzaG5lc3NfbGlmZXRpbWUpIDw9IG1heF9zdGFsZSkK
KwkJCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfRlJFU0g7CisJCX0KKworCQly
ZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfTkVFRFNfVkFMSURBVElPTjsKKwl9CisK
KwlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfRlJFU0g7Cit9CisKKy8qKgorICog
d2Via2l0X3NvdXBfY2FjaGVfZ2V0X2NhY2hlYWJpbGl0eToKKyAqIEBjYWNoZTogYSAjV2ViS2l0
U291cENhY2hlCisgKiBAbXNnOiBhICNTb3VwTWVzc2FnZQorICoKKyAqIENhbGN1bGF0ZXMgd2hl
dGhlciB0aGUgQG1zZyBjYW4gYmUgY2FjaGVkIG9yIG5vdC4KKyAqCisgKiBSZXR1cm5zOiBhICNX
ZWJLaXRTb3VwQ2FjaGVhYmlsaXR5IHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0aGUgQG1zZyBj
YW4gYmUgY2FjaGVkIG9yIG5vdC4KKyAqKi8KK1dlYktpdFNvdXBDYWNoZWFiaWxpdHkKK3dlYmtp
dF9zb3VwX2NhY2hlX2dldF9jYWNoZWFiaWxpdHkgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsIFNv
dXBNZXNzYWdlICptc2cpCit7CisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFdFQktJVF9JU19TT1VQ
X0NBQ0hFIChjYWNoZSksIFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFKTsKKwlnX3JldHVy
bl92YWxfaWZfZmFpbCAoU09VUF9JU19NRVNTQUdFIChtc2cpLCBXRUJLSVRfU09VUF9DQUNIRV9V
TkNBQ0hFQUJMRSk7CisKKwlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfR0VUX0NMQVNTIChjYWNo
ZSktPmdldF9jYWNoZWFiaWxpdHkgKGNhY2hlLCBtc2cpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4K
K2ZvcmNlX2ZsdXNoX3RpbWVvdXQgKGdwb2ludGVyIGRhdGEpCit7CisJZ2Jvb2xlYW4gKmZvcmNl
ZCA9IChnYm9vbGVhbiAqKWRhdGE7CisJKmZvcmNlZCA9IFRSVUU7CisKKwlyZXR1cm4gRkFMU0U7
Cit9CisKKy8qKgorICogd2Via2l0X3NvdXBfY2FjaGVfZmx1c2g6CisgKiBAY2FjaGU6IGEgI1dl
YktpdFNvdXBDYWNoZQorICogQHNlc3Npb246IHRoZSAjU291cFNlc3Npb24gYXNzb2NpYXRlZCB3
aXRoIHRoZSBAY2FjaGUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgZm9yY2UgYWxsIHBlbmRp
bmcgd3JpdGVzIGluIHRoZSBAY2FjaGUgdG8gYmUKKyAqIGNvbW1pdHRlZCB0byBkaXNrLiBGb3Ig
ZG9pbmcgc28gaXQgd2lsbCBpdGVyYXRlIHRoZSAjR01haW5Db250ZXh0CisgKiBhc3NvY2lhdGVk
IHdpdGggdGhlIEBzZXNzaW9uICh3aGljaCBjYW4gYmUgdGhlIGRlZmF1bHQgb25lKSBhcyBsb25n
CisgKiBhcyBuZWVkZWQuCisgKiovCit2b2lkCit3ZWJraXRfc291cF9jYWNoZV9mbHVzaCAoV2Vi
S2l0U291cENhY2hlICpjYWNoZSkKK3sKKwlHTWFpbkNvbnRleHQgKmFzeW5jX2NvbnRleHQ7CisJ
U291cFNlc3Npb24gKnNlc3Npb247CisJZ3VpbnQgdGltZW91dF9pZDsKKwlnYm9vbGVhbiBmb3Jj
ZWQgPSBGQUxTRTsKKworCWdfcmV0dXJuX2lmX2ZhaWwgKFdFQktJVF9JU19TT1VQX0NBQ0hFIChj
YWNoZSkpOworCisJc2Vzc2lvbiA9IGNhY2hlLT5wcml2LT5zZXNzaW9uOworCWdfcmV0dXJuX2lm
X2ZhaWwgKFNPVVBfSVNfU0VTU0lPTiAoc2Vzc2lvbikpOworCWFzeW5jX2NvbnRleHQgPSBzb3Vw
X3Nlc3Npb25fZ2V0X2FzeW5jX2NvbnRleHQgKHNlc3Npb24pOworCisJLyogV2UgZ2l2ZSBjYWNo
ZSAxMCBzZWNzIHRvIGZpbmlzaCAqLworCXRpbWVvdXRfaWQgPSBnX3RpbWVvdXRfYWRkICgxMDAw
MCwgZm9yY2VfZmx1c2hfdGltZW91dCwgJmZvcmNlZCk7CisKKwl3aGlsZSAoIWZvcmNlZCAmJiBj
YWNoZS0+cHJpdi0+bl9wZW5kaW5nID4gMCkKKwkJZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uIChh
c3luY19jb250ZXh0LCBGQUxTRSk7CisKKwlpZiAoIWZvcmNlZCkKKwkJZ19zb3VyY2VfcmVtb3Zl
ICh0aW1lb3V0X2lkKTsKKwllbHNlCisJCWdfd2FybmluZyAoIkNhY2hlIGZsdXNoIGZpbmlzaGVk
IGRlc3BpdGUgJWQgcGVuZGluZyByZXF1ZXN0cyIsIGNhY2hlLT5wcml2LT5uX3BlbmRpbmcpOwor
fQorCitzdGF0aWMgdm9pZAorY2xlYXJfY2FjaGVfaXRlbSAoZ3BvaW50ZXIga2V5LAorCQkgIGdw
b2ludGVyIHZhbHVlLAorCQkgIFdlYktpdFNvdXBDYWNoZSAqY2FjaGUpCit7CisJV2ViS2l0U291
cENhY2hlRW50cnkgKmVudHJ5ID0gZ19oYXNoX3RhYmxlX2xvb2t1cCAoY2FjaGUtPnByaXYtPmNh
Y2hlLCAoY29uc3QgZ2NoYXIgKilrZXkpOworCWlmICh3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9y
ZW1vdmUgKGNhY2hlLCBlbnRyeSkpCisJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUgKGVu
dHJ5LCBUUlVFKTsKK30KKworLyoqCisgKiB3ZWJraXRfc291cF9jYWNoZV9jbGVhcjoKKyAqIEBj
YWNoZTogYSAjV2ViS2l0U291cENhY2hlCisgKgorICogV2lsbCByZW1vdmUgYWxsIGVudHJpZXMg
aW4gdGhlIEBjYWNoZSBwbHVzIGFsbCB0aGUgY2FjaGUgZmlsZXMKKyAqIGFzc29jaWF0ZWQgd2l0
aCB0aGVtLgorICoqLwordm9pZAord2Via2l0X3NvdXBfY2FjaGVfY2xlYXIgKFdlYktpdFNvdXBD
YWNoZSAqY2FjaGUpCit7CisJR0hhc2hUYWJsZSAqaGFzaDsKKworCWdfcmV0dXJuX2lmX2ZhaWwg
KFdFQktJVF9JU19TT1VQX0NBQ0hFIChjYWNoZSkpOworCisJaGFzaCA9IGNhY2hlLT5wcml2LT5j
YWNoZTsKKwlnX3JldHVybl9pZl9mYWlsIChoYXNoKTsKKworCWdfaGFzaF90YWJsZV9mb3JlYWNo
IChoYXNoLCAoR0hGdW5jKWNsZWFyX2NhY2hlX2l0ZW0sIGNhY2hlKTsKK30KKworU291cE1lc3Nh
Z2UgKgord2Via2l0X3NvdXBfY2FjaGVfZ2VuZXJhdGVfY29uZGl0aW9uYWxfcmVxdWVzdCAoV2Vi
S2l0U291cENhY2hlICpjYWNoZSwgU291cE1lc3NhZ2UgKm9yaWdpbmFsKQoreworCVNvdXBNZXNz
YWdlICptc2c7CisJU291cFVSSSAqdXJpOworCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeTsK
KwljaGFyICprZXk7CisJY29uc3QgY2hhciAqdmFsdWU7CisKKwlnX3JldHVybl92YWxfaWZfZmFp
bCAoV0VCS0lUX0lTX1NPVVBfQ0FDSEUgKGNhY2hlKSwgTlVMTCk7CisJZ19yZXR1cm5fdmFsX2lm
X2ZhaWwgKFNPVVBfSVNfTUVTU0FHRSAob3JpZ2luYWwpLCBOVUxMKTsKKworCS8qIEZpcnN0IGNv
cHkgdGhlIGRhdGEgd2UgbmVlZCBmcm9tIHRoZSBvcmlnaW5hbCBtZXNzYWdlICovCisJdXJpID0g
c291cF9tZXNzYWdlX2dldF91cmkgKG9yaWdpbmFsKTsKKwltc2cgPSBzb3VwX21lc3NhZ2VfbmV3
X2Zyb21fdXJpIChvcmlnaW5hbC0+bWV0aG9kLCB1cmkpOworCisJc291cF9tZXNzYWdlX2hlYWRl
cnNfZm9yZWFjaCAob3JpZ2luYWwtPnJlcXVlc3RfaGVhZGVycywKKwkJCQkgICAgICAoU291cE1l
c3NhZ2VIZWFkZXJzRm9yZWFjaEZ1bmMpY29weV9oZWFkZXJzLAorCQkJCSAgICAgIG1zZy0+cmVx
dWVzdF9oZWFkZXJzKTsKKworCS8qIE5vdyBhZGQgdGhlIHZhbGlkYXRvciBlbnRyaWVzIGluIHRo
ZSBoZWFkZXIgZnJvbSB0aGUgY2FjaGVkCisJICAgZGF0YSAqLworCWtleSA9IHNvdXBfbWVzc2Fn
ZV9nZXRfY2FjaGVfa2V5IChvcmlnaW5hbCk7CisJZW50cnkgPSBnX2hhc2hfdGFibGVfbG9va3Vw
IChjYWNoZS0+cHJpdi0+Y2FjaGUsIGtleSk7CisJZ19mcmVlIChrZXkpOworCisJZ19yZXR1cm5f
dmFsX2lmX2ZhaWwgKGVudHJ5LCBOVUxMKTsKKworCWVudHJ5LT5iZWluZ192YWxpZGF0ZWQgPSBU
UlVFOworCisJdmFsdWUgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKGVudHJ5LT5oZWFkZXJz
LCAiTGFzdC1Nb2RpZmllZCIpOworCWlmICh2YWx1ZSkKKwkJc291cF9tZXNzYWdlX2hlYWRlcnNf
YXBwZW5kIChtc2ctPnJlcXVlc3RfaGVhZGVycywKKwkJCQkJICAgICAiSWYtTW9kaWZpZWQtU2lu
Y2UiLAorCQkJCQkgICAgIHZhbHVlKTsKKwl2YWx1ZSA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dl
dCAoZW50cnktPmhlYWRlcnMsICJFVGFnIik7CisJaWYgKHZhbHVlKQorCQlzb3VwX21lc3NhZ2Vf
aGVhZGVyc19hcHBlbmQgKG1zZy0+cmVxdWVzdF9oZWFkZXJzLAorCQkJCQkgICAgICJJZi1Ob25l
LU1hdGNoIiwKKwkJCQkJICAgICB2YWx1ZSk7CisJcmV0dXJuIG1zZzsKK30KKworI2RlZmluZSBX
RUJLSVRfU09VUF9DQUNIRV9GSUxFICJzb3VwLmNhY2hlIgorCisjZGVmaW5lIFdFQktJVF9TT1VQ
X0NBQ0hFX0hFQURFUlNfRk9STUFUICJ7c3N9IgorI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9Q
SEVBREVSU19GT1JNQVQgIihzc2J1dXV1dWEiIFdFQktJVF9TT1VQX0NBQ0hFX0hFQURFUlNfRk9S
TUFUICIpIgorI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9FTlRSSUVTX0ZPUk1BVCAiYSIgV0VC
S0lUX1NPVVBfQ0FDSEVfUEhFQURFUlNfRk9STUFUCisKKy8qIEJhc2ljYWxseSB0aGUgc2FtZSBm
b3JtYXQgdGhhbiBhYm92ZSBleGNlcHQgdGhhdCBzb21lIHN0cmluZ3MgYXJlCisgICBwcmVwZW5k
ZWQgd2l0aCAmLiBUaGlzIHdheSB0aGUgR1ZhcmlhbnQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhl
CisgICBkYXRhIGluc3RlYWQgb2YgZHVwbGljYXRpbmcgdGhlIHN0cmluZyAqLworI2RlZmluZSBX
RUJLSVRfU09VUF9DQUNIRV9ERUNPREVfSEVBREVSU19GT1JNQVQgInsmcyZzfSIKKworc3RhdGlj
IHZvaWQKK3BhY2tfZW50cnkgKGdwb2ludGVyIGRhdGEsCisJICAgIGdwb2ludGVyIHVzZXJfZGF0
YSkKK3sKKwlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkgPSAoV2ViS2l0U291cENhY2hlRW50
cnkgKikgZGF0YTsKKwlTb3VwTWVzc2FnZUhlYWRlcnNJdGVyIGl0ZXI7CisJY29uc3QgZ2NoYXIg
KmhlYWRlcl9rZXksICpoZWFkZXJfdmFsdWU7CisJR1ZhcmlhbnRCdWlsZGVyICpoZWFkZXJzX2J1
aWxkZXI7CisJR1ZhcmlhbnRCdWlsZGVyICplbnRyaWVzX2J1aWxkZXIgPSAoR1ZhcmlhbnRCdWls
ZGVyICopdXNlcl9kYXRhOworCisJLyogRG8gbm90IHN0b3JlIG5vbi1jb25zb2xpZGF0ZWQgZW50
cmllcyAqLworCWlmIChlbnRyeS0+ZGlydHkgfHwgZW50cnktPndyaXRpbmcgfHwgIWVudHJ5LT5r
ZXkpCisJCXJldHVybjsKKworCS8qIFBhY2sgaGVhZGVycyAqLworCWhlYWRlcnNfYnVpbGRlciA9
IGdfdmFyaWFudF9idWlsZGVyX25ldyAoR19WQVJJQU5UX1RZUEVfQVJSQVkpOworCXNvdXBfbWVz
c2FnZV9oZWFkZXJzX2l0ZXJfaW5pdCAoJml0ZXIsIGVudHJ5LT5oZWFkZXJzKTsKKwl3aGlsZSAo
c291cF9tZXNzYWdlX2hlYWRlcnNfaXRlcl9uZXh0ICgmaXRlciwgJmhlYWRlcl9rZXksICZoZWFk
ZXJfdmFsdWUpKSB7CisJCWlmIChnX3V0ZjhfdmFsaWRhdGUgKGhlYWRlcl92YWx1ZSwgLTEsIE5V
TEwpKQorCQkJZ192YXJpYW50X2J1aWxkZXJfYWRkIChoZWFkZXJzX2J1aWxkZXIsIFdFQktJVF9T
T1VQX0NBQ0hFX0hFQURFUlNfRk9STUFULAorCQkJCQkgICAgICAgaGVhZGVyX2tleSwgaGVhZGVy
X3ZhbHVlKTsKKwl9CisKKwkvKiBFbnRyeSBkYXRhICovCisJZ192YXJpYW50X2J1aWxkZXJfYWRk
IChlbnRyaWVzX2J1aWxkZXIsIFdFQktJVF9TT1VQX0NBQ0hFX1BIRUFERVJTX0ZPUk1BVCwKKwkJ
CSAgICAgICBlbnRyeS0+a2V5LCBlbnRyeS0+ZmlsZW5hbWUsIGVudHJ5LT5tdXN0X3JldmFsaWRh
dGUsCisJCQkgICAgICAgZW50cnktPmZyZXNobmVzc19saWZldGltZSwgZW50cnktPmNvcnJlY3Rl
ZF9pbml0aWFsX2FnZSwKKwkJCSAgICAgICBlbnRyeS0+cmVzcG9uc2VfdGltZSwgZW50cnktPmhp
dHMsIGVudHJ5LT5sZW5ndGgsIGhlYWRlcnNfYnVpbGRlcik7CisKKwlnX3ZhcmlhbnRfYnVpbGRl
cl91bnJlZiAoaGVhZGVyc19idWlsZGVyKTsKK30KKwordm9pZAord2Via2l0X3NvdXBfY2FjaGVf
ZHVtcCAoV2ViS2l0U291cENhY2hlICpjYWNoZSkKK3sKKwlXZWJLaXRTb3VwQ2FjaGVQcml2YXRl
ICpwcml2ID0gV0VCS0lUX1NPVVBfQ0FDSEVfR0VUX1BSSVZBVEUgKGNhY2hlKTsKKwlnY2hhciAq
ZmlsZW5hbWU7CisJR1ZhcmlhbnRCdWlsZGVyICplbnRyaWVzX2J1aWxkZXI7CisJR1ZhcmlhbnQg
KmNhY2hlX3ZhcmlhbnQ7CisKKwlpZiAoIWdfbGlzdF9sZW5ndGggKGNhY2hlLT5wcml2LT5scnVf
c3RhcnQpKQorCQlyZXR1cm47CisKKwkvKiBDcmVhdGUgdGhlIGJ1aWxkZXIgYW5kIGl0ZXJhdGUg
b3ZlciBhbGwgZW50cmllcyAqLworCWVudHJpZXNfYnVpbGRlciA9IGdfdmFyaWFudF9idWlsZGVy
X25ldyAoR19WQVJJQU5UX1RZUEVfQVJSQVkpOworCWdfbGlzdF9mb3JlYWNoIChjYWNoZS0+cHJp
di0+bHJ1X3N0YXJ0LCBwYWNrX2VudHJ5LCBlbnRyaWVzX2J1aWxkZXIpOworCisJLyogU2VyaWFs
aXplIGFuZCBkdW1wICovCisJY2FjaGVfdmFyaWFudCA9IGdfdmFyaWFudF9uZXcgKFdFQktJVF9T
T1VQX0NBQ0hFX0VOVFJJRVNfRk9STUFULCBlbnRyaWVzX2J1aWxkZXIpOworCWdfdmFyaWFudF9i
dWlsZGVyX3VucmVmIChlbnRyaWVzX2J1aWxkZXIpOworCisJZmlsZW5hbWUgPSBnX2J1aWxkX2Zp
bGVuYW1lIChwcml2LT5jYWNoZV9kaXIsIFdFQktJVF9TT1VQX0NBQ0hFX0ZJTEUsIE5VTEwpOwor
CWdfZmlsZV9zZXRfY29udGVudHMgKGZpbGVuYW1lLCAoY29uc3QgZ2NoYXIgKilnX3ZhcmlhbnRf
Z2V0X2RhdGEgKGNhY2hlX3ZhcmlhbnQpLAorCQkJICAgICBnX3ZhcmlhbnRfZ2V0X3NpemUgKGNh
Y2hlX3ZhcmlhbnQpLCBOVUxMKTsKKwlnX2ZyZWUgKGZpbGVuYW1lKTsKKwlnX3ZhcmlhbnRfdW5y
ZWYgKGNhY2hlX3ZhcmlhbnQpOworfQorCit2b2lkCit3ZWJraXRfc291cF9jYWNoZV9sb2FkIChX
ZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKQoreworCWdjaGFyICpmaWxlbmFtZSA9IE5VTEwsICpjb250
ZW50cyA9IE5VTEw7CisJR1ZhcmlhbnQgKmNhY2hlX3ZhcmlhbnQ7CisJR1ZhcmlhbnRJdGVyICpl
bnRyaWVzX2l0ZXIsICpoZWFkZXJzX2l0ZXI7CisJR1ZhcmlhbnRUeXBlICp2YXJpYW50X2Zvcm1h
dDsKKwlnc2l6ZSBsZW5ndGg7CisJV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5OworCVdlYktp
dFNvdXBDYWNoZVByaXZhdGUgKnByaXYgPSBjYWNoZS0+cHJpdjsKKworCWZpbGVuYW1lID0gZ19i
dWlsZF9maWxlbmFtZSAocHJpdi0+Y2FjaGVfZGlyLCBXRUJLSVRfU09VUF9DQUNIRV9GSUxFLCBO
VUxMKTsKKwlpZiAoIWdfZmlsZV9nZXRfY29udGVudHMgKGZpbGVuYW1lLCAmY29udGVudHMsICZs
ZW5ndGgsIE5VTEwpKSB7CisJCWdfZnJlZSAoZmlsZW5hbWUpOworCQlyZXR1cm47CisJfQorCWdf
ZnJlZSAoZmlsZW5hbWUpOworCisJdmFyaWFudF9mb3JtYXQgPSBnX3ZhcmlhbnRfdHlwZV9uZXcg
KFdFQktJVF9TT1VQX0NBQ0hFX0VOVFJJRVNfRk9STUFUKTsKKwljYWNoZV92YXJpYW50ID0gZ192
YXJpYW50X25ld19mcm9tX2RhdGEgKHZhcmlhbnRfZm9ybWF0LCAoY29uc3QgZ2NoYXIgKiljb250
ZW50cywgbGVuZ3RoLCBGQUxTRSwgTlVMTCwgTlVMTCk7CisJZ192YXJpYW50X3R5cGVfZnJlZSAo
dmFyaWFudF9mb3JtYXQpOworCisJZ192YXJpYW50X2dldCAoY2FjaGVfdmFyaWFudCwgV0VCS0lU
X1NPVVBfQ0FDSEVfRU5UUklFU19GT1JNQVQsICZlbnRyaWVzX2l0ZXIpOworCWVudHJ5ID0gZ19z
bGljZV9uZXcwIChXZWJLaXRTb3VwQ2FjaGVFbnRyeSk7CisKKwl3aGlsZSAoZ192YXJpYW50X2l0
ZXJfbG9vcCAoZW50cmllc19pdGVyLCBXRUJLSVRfU09VUF9DQUNIRV9QSEVBREVSU19GT1JNQVQs
CisJCQkJICAgICZlbnRyeS0+a2V5LCAmZW50cnktPmZpbGVuYW1lLCAmZW50cnktPm11c3RfcmV2
YWxpZGF0ZSwKKwkJCQkgICAgJmVudHJ5LT5mcmVzaG5lc3NfbGlmZXRpbWUsICZlbnRyeS0+Y29y
cmVjdGVkX2luaXRpYWxfYWdlLAorCQkJCSAgICAmZW50cnktPnJlc3BvbnNlX3RpbWUsICZlbnRy
eS0+aGl0cywgJmVudHJ5LT5sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmaGVhZGVyc19pdGVyKSkgeworCQljb25zdCBnY2hhciAqaGVhZGVyX2tleSwgKmhlYWRl
cl92YWx1ZTsKKworCQkvKiBTb3VwTWVzc2FnZSBIZWFkZXJzICovCisJCWVudHJ5LT5oZWFkZXJz
ID0gc291cF9tZXNzYWdlX2hlYWRlcnNfbmV3IChTT1VQX01FU1NBR0VfSEVBREVSU19SRVNQT05T
RSk7CisJCXdoaWxlIChnX3ZhcmlhbnRfaXRlcl9sb29wIChoZWFkZXJzX2l0ZXIsIFdFQktJVF9T
T1VQX0NBQ0hFX0RFQ09ERV9IRUFERVJTX0ZPUk1BVCwgJmhlYWRlcl9rZXksICZoZWFkZXJfdmFs
dWUpKQorCQkJc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kIChlbnRyeS0+aGVhZGVycywgaGVh
ZGVyX2tleSwgaGVhZGVyX3ZhbHVlKTsKKworCQkvKiBJbnNlcnQgaW4gY2FjaGUgKi8KKwkJaWYg
KCF3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9pbnNlcnRfYnlfa2V5IChjYWNoZSwgKGNvbnN0IGdj
aGFyICopZW50cnktPmtleSwgZW50cnksIEZBTFNFKSkKKwkJCXdlYmtpdF9zb3VwX2NhY2hlX2Vu
dHJ5X2ZyZWUgKGVudHJ5LCBUUlVFKTsKKworCQkvKiBOZXcgZW50cnkgZm9yIHRoZSBuZXh0IGl0
ZXJhdGlvbi4gVGhpcyBjcmVhdGVzIGFuCisJCSAgIGV4dHJhIG9iamVjdCB0aGUgbGFzdCBpdGVy
YXRpb24gYnV0IGl0J3Mgd29ydGggaXQKKwkJICAgYXMgd2Ugc2F2ZSBzZXZlcmFsIGlmJ3MgKi8K
KwkJZW50cnkgPSBnX3NsaWNlX25ldzAgKFdlYktpdFNvdXBDYWNoZUVudHJ5KTsKKwl9CisJLyog
UmVtb3ZlIGxhc3QgY3JlYXRlZCBlbnRyeSAqLworCWdfc2xpY2VfZnJlZSAoV2ViS2l0U291cENh
Y2hlRW50cnksIGVudHJ5KTsKKworCS8qIFNvcnQgTFJVIChzaG91bGRuJ3QgYmUgbmVlZGVkKS4g
Rmlyc3QgcmV2ZXJzZSBhcyBlbGVtZW50cworCSAqIGFyZSBhbHdheXMgcHJlcGVuZGVkIHdoZW4g
aW5zZXJ0aW5nCisJICovCisJY2FjaGUtPnByaXYtPmxydV9zdGFydCA9IGdfbGlzdF9yZXZlcnNl
IChjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0KTsKKwljYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0ID0gZ19s
aXN0X3NvcnQgKGNhY2hlLT5wcml2LT5scnVfc3RhcnQsIGxydV9jb21wYXJlX2Z1bmMpOworCisJ
LyogZnJlZXMgKi8KKwlnX3ZhcmlhbnRfaXRlcl9mcmVlIChlbnRyaWVzX2l0ZXIpOworCWdfdmFy
aWFudF91bnJlZiAoY2FjaGVfdmFyaWFudCk7Cit9CisKK3ZvaWQKK3dlYmtpdF9zb3VwX2NhY2hl
X3NldF9tYXhfc2l6ZSAoV2ViS2l0U291cENhY2hlICpjYWNoZSwKKwkJCQlndWludCBtYXhfc2l6
ZSkKK3sKKwljYWNoZS0+cHJpdi0+bWF4X3NpemUgPSBtYXhfc2l6ZTsKKwljYWNoZS0+cHJpdi0+
bWF4X2VudHJ5X2RhdGFfc2l6ZSA9IGNhY2hlLT5wcml2LT5tYXhfc2l6ZSAvIE1BWF9FTlRSWV9E
QVRBX1BFUkNFTlRBR0U7Cit9CisKK2d1aW50Cit3ZWJraXRfc291cF9jYWNoZV9nZXRfbWF4X3Np
emUgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUpCit7CisJcmV0dXJuIGNhY2hlLT5wcml2LT5tYXhf
c2l6ZTsKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3dlYmtpdC9zb3VwLWNhY2hlLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNo
ZS93ZWJraXQvc291cC1jYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmI4MTdkM2UKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBzb3Vw
LWNhY2hlLmg6CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIElnYWxpYSwgUy5MLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWZuZGVmIFdFQktJVF9TT1VQX0NBQ0hFX0gKKyNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FDSEVfSCAx
CisKKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVmaW5lcy5oPgorCisjaW5jbHVkZSA8bGlic291
cC9zb3VwLXR5cGVzLmg+CisjaW5jbHVkZSA8Z2lvL2dpby5oPgorCitHX0JFR0lOX0RFQ0xTCisK
KyNkZWZpbmUgV0VCS0lUX1RZUEVfU09VUF9DQUNIRSAgICAgICAgICAgICh3ZWJraXRfc291cF9j
YWNoZV9nZXRfdHlwZSAoKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FDSEUob2JqKSAgICAgICAg
ICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBf
Q0FDSEUsIFdlYktpdFNvdXBDYWNoZSkpCisjZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX0NMQVNT
KGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFdFQktJVF9UWVBF
X1NPVVBfQ0FDSEUsIFdlYktpdFNvdXBDYWNoZUNsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1NP
VVBfQ0FDSEUob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiks
IFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUpKQorI2RlZmluZSBXRUJLSVRfSVNfU09VUF9DQUNIRV9D
TEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgob2JqKSwgV0VCS0lUX1RZUEVf
U09VUF9DQUNIRSkpCisjZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX0dFVF9DTEFTUyhvYmopICAo
R19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUs
IFdlYktpdFNvdXBDYWNoZUNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBDYWNo
ZSBXZWJLaXRTb3VwQ2FjaGU7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0U291cENhY2hlUHJpdmF0
ZSBXZWJLaXRTb3VwQ2FjaGVQcml2YXRlOworCit0eXBlZGVmIGVudW0geworCVdFQktJVF9TT1VQ
X0NBQ0hFX0NBQ0hFQUJMRSA9ICgxIDw8IDApLAorCVdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVB
QkxFID0gKDEgPDwgMSksCisJV0VCS0lUX1NPVVBfQ0FDSEVfSU5WQUxJREFURVMgPSAoMSA8PCAy
KSwKKwlXRUJLSVRfU09VUF9DQUNIRV9WQUxJREFURVMgPSAoMSA8PCAzKQorfSBXZWJLaXRTb3Vw
Q2FjaGVhYmlsaXR5OworCit0eXBlZGVmIGVudW0geworCVdFQktJVF9TT1VQX0NBQ0hFX1JFU1BP
TlNFX0ZSRVNILAorCVdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX05FRURTX1ZBTElEQVRJT04s
CisJV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfU1RBTEUKK30gV2ViS2l0U291cENhY2hlUmVz
cG9uc2U7CisKK3R5cGVkZWYgZW51bSB7CisJV0VCS0lUX1NPVVBfQ0FDSEVfU0lOR0xFX1VTRVIs
CisJV0VCS0lUX1NPVVBfQ0FDSEVfU0hBUkVECit9IFdlYktpdFNvdXBDYWNoZVR5cGU7CisKK3N0
cnVjdCBfV2ViS2l0U291cENhY2hlIHsKKwlHT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKKworCVdl
YktpdFNvdXBDYWNoZVByaXZhdGUgKnByaXY7Cit9OworCit0eXBlZGVmIHN0cnVjdCB7CisJR09i
amVjdENsYXNzIHBhcmVudF9jbGFzczsKKworCS8qIG1ldGhvZHMgKi8KKwlXZWJLaXRTb3VwQ2Fj
aGVhYmlsaXR5ICgqZ2V0X2NhY2hlYWJpbGl0eSkoV2ViS2l0U291cENhY2hlICpjYWNoZSwgU291
cE1lc3NhZ2UgKm1zZyk7CisKKwkvKiBQYWRkaW5nIGZvciBmdXR1cmUgZXhwYW5zaW9uICovCisJ
dm9pZCAoKl9saWJzb3VwX3Jlc2VydmVkMSkodm9pZCk7CisJdm9pZCAoKl9saWJzb3VwX3Jlc2Vy
dmVkMikodm9pZCk7CisJdm9pZCAoKl9saWJzb3VwX3Jlc2VydmVkMykodm9pZCk7Cit9IFdlYktp
dFNvdXBDYWNoZUNsYXNzOworCitXRUJLSVRfQVBJIEdUeXBlICAgICAgICAgICAgIHdlYmtpdF9z
b3VwX2NhY2hlX2dldF90eXBlICh2b2lkKTsKK1dFQktJVF9BUEkgV2ViS2l0U291cENhY2hlICAq
d2Via2l0X3NvdXBfY2FjaGVfbmV3IChjb25zdCBjaGFyICAqY2FjaGVfZGlyLAorCQkJCQkJICAg
IFdlYktpdFNvdXBDYWNoZVR5cGUgY2FjaGVfdHlwZSk7CitXRUJLSVRfQVBJIHZvaWQgICAgICAg
ICAgICAgIHdlYmtpdF9zb3VwX2NhY2hlX2ZsdXNoIChXZWJLaXRTb3VwQ2FjaGUgICAqY2FjaGUp
OworV0VCS0lUX0FQSSB2b2lkICAgICAgICAgICAgICB3ZWJraXRfc291cF9jYWNoZV9jbGVhciAo
V2ViS2l0U291cENhY2hlICAgKmNhY2hlKTsKKworV0VCS0lUX0FQSSB2b2lkICAgICAgICAgICAg
ICB3ZWJraXRfc291cF9jYWNoZV9kdW1wIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKTsKK1dFQktJ
VF9BUEkgdm9pZCAgICAgICAgICAgICAgd2Via2l0X3NvdXBfY2FjaGVfbG9hZCAoV2ViS2l0U291
cENhY2hlICpjYWNoZSk7CisKK1dFQktJVF9BUEkgdm9pZCAgICAgICAgICAgICAgd2Via2l0X3Nv
dXBfY2FjaGVfc2V0X21heF9zaXplIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLAorCQkJCQkJCSAg
ICAgZ3VpbnQgbWF4X3NpemUpOworV0VCS0lUX0FQSSBndWludCAgICAgICAgICAgICB3ZWJraXRf
c291cF9jYWNoZV9nZXRfbWF4X3NpemUgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUpOworCitHX0VO
RF9ERUNMUworCisKKyNlbmRpZiAvKiBXRUJLSVRfU09VUF9DQUNIRV9IICovCisKZGlmZiAtLWdp
dCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxvZwppbmRleCA2
MDY1Y2QwLi5hNGRhZDFiIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VMb2cKKysrIGIv
V2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMDktMDYgIFNlcmdp
byBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gQWRkIEhUVFAgY2FjaGluZyBzdXBw
b3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDI2
MQorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IGFkZGVkIHBhdGhzIGZvciB0aGUgbmV3IHNv
dXAgSFRUUCBjYWNoZSBjb2RlCisKIDIwMTAtMDktMjYgIE1paGFpIFBhcnBhcml0YSAgPG1paGFp
cEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2phbiBWYWZhaS4KZGlmZiAt
LWdpdCBhL1dlYktpdFRvb2xzL0dOVW1ha2VmaWxlLmFtIGIvV2ViS2l0VG9vbHMvR05VbWFrZWZp
bGUuYW0KaW5kZXggZTM4NDEwMS4uY2FjZjA1YiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvR05V
bWFrZWZpbGUuYW0KKysrIGIvV2ViS2l0VG9vbHMvR05VbWFrZWZpbGUuYW0KQEAgLTYsNiArNiw3
IEBAIG5vaW5zdF9QUk9HUkFNUyArPSBcCiAjIEd0a0xhdW5jaGVyCiBQcm9ncmFtc19HdGtMYXVu
Y2hlcl9DUFBGTEFHUyA9IFwKIAktSSQoc3JjZGlyKS9XZWJLaXQvZ3RrIFwKKwktSSQoc3JjZGly
KS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS8gXAogCS1JJCh0b3BfYnVpbGRk
aXIpL1dlYktpdC9ndGsgXAogCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzIFwKIAkk
KGdsb2JhbF9jcHBmbGFncykgXApAQCAtMzgsNiArMzksNyBAQCBkdW1wcmVuZGVydHJlZV9jcHBm
bGFncyA6PSBcCiAJLUkkKHNyY2RpcikvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrIFwK
IAktSSQoc3JjZGlyKS9XZWJLaXQvZ3RrIFwKIAktSSQoc3JjZGlyKS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ayBcCisJLUkkKHNyY2RpcikvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUv
IFwKIAktSSQodG9wX2J1aWxkZGlyKS9XZWJLaXQvZ3RrIFwKIAktSSQodG9wX2J1aWxkZGlyKS9E
ZXJpdmVkU291cmNlcyBcCiAJJChnbG9iYWxfY3BwZmxhZ3MpIFwKZGlmZiAtLWdpdCBhL2F1dG90
b29scy93ZWJraXQubTQgYi9hdXRvdG9vbHMvd2Via2l0Lm00CmluZGV4IDM3OWZhOGYuLjZiNDRm
MzAgMTAwNjQ0Ci0tLSBhL2F1dG90b29scy93ZWJraXQubTQKKysrIGIvYXV0b3Rvb2xzL3dlYmtp
dC5tNApAQCAtMTA4LDcgKzEwOCw3IEBAIEFDX0RFRlVOX09OQ0UoW19XRUJLSVRfQ0hFQ0tfR0xJ
Ql0sCiBbZG5sCiBkbmwgY2hlY2sgZm9yIGdsaWIKICMgVmVyc2lvbiByZXF1aXJlbWVudHMKLUdM
SUJfUkVRVUlSRURfVkVSU0lPTj0yLjIxLjMKK0dMSUJfUkVRVUlSRURfVkVSU0lPTj0yLjI0CiBH
T0JKRUNUX1JFUVVJUkVEX1ZFUlNJT049Mi4wCiBHVEhSRUFEX1JFUVVJUkVEX1ZFUlNJT049Mi4w
CiAKLS0gCjEuNy4xCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>69436</attachid>
            <date>2010-10-01 02:47:29 -0700</date>
            <delta_ts>2010-10-01 02:56:38 -0700</delta_ts>
            <desc>WebKitGtk+ to use the new API from the imported SoupURILoader code</desc>
            <filename>0002-WebKitGtk-to-use-the-new-API-from-the-imported-SoupU.patch</filename>
            <type>application/octet-stream</type>
            <size>39707</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">RnJvbSA1MDA2ZTk4MDYwZTllYWVkMzE5ZTQzZTRkYzExYTc2ZjBkZWMwMzE5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTZXJnaW8gVmlsbGFyIFNlbmluIDxzdmlsbGFyQGlnYWxpYS5j
b20+CkRhdGU6IFdlZCwgMjIgU2VwIDIwMTAgMTA6MTg6MDYgKzAyMDAKU3ViamVjdDogW1BBVENI
IDIvMl0gV2ViS2l0R3RrKyB0byB1c2UgdGhlIG5ldyBBUEkgZnJvbSB0aGUgaW1wb3J0ZWQgU291
cFVSSUxvYWRlciBjb2RlCgotLS0KIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhh
bmRsZUludGVybmFsLmggIHwgICAyMyArLQogLi4uL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNv
dXJjZUhhbmRsZVNvdXAuY3BwICAgfCAgNTY1ICsrKysrKysrKy0tLS0tLS0tLS0tCiBXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3QuaCAgICB8ICAgIDMgKy0KIC4u
Li9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHAgIHwgICAyMyAr
CiBXZWJLaXQvZ3RrL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
MTMgKwogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuY3BwICAgICAgICAgICAgICAg
fCAgICA4ICstCiA2IGZpbGVzIGNoYW5nZWQsIDMwNSBpbnNlcnRpb25zKCspLCAzMzAgZGVsZXRp
b25zKC0pCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFu
ZGxlSW50ZXJuYWwuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUlu
dGVybmFsLmgKaW5kZXggOTZmYmYwMC4uMTU0MmZmMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCkBAIC00Niw2ICs0Niw4IEBACiAj
ZW5kaWYKIAogI2lmIFVTRShTT1VQKQorI2luY2x1ZGUgInNvdXAtcmVxdWVzdGVyLmgiCisjaW5j
bHVkZSA8R1JlZlB0ci5oPgogI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgogY2xhc3MgRnJhbWU7
CiAjZW5kaWYKQEAgLTEwOCwxNSArMTEwLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgICAgICwgbV9mb3JtRGF0YVN0cmVhbShsb2FkZXIpCiAjZW5kaWYKICNpZiBVU0UoU09VUCkK
LSAgICAgICAgICAgICwgbV9tc2coMCkKICAgICAgICAgICAgICwgbV9jYW5jZWxsZWQoZmFsc2Up
Ci0gICAgICAgICAgICAsIG1fZ2ZpbGUoMCkKLSAgICAgICAgICAgICwgbV9pbnB1dFN0cmVhbSgw
KQotICAgICAgICAgICAgLCBtX2NhbmNlbGxhYmxlKDApCiAgICAgICAgICAgICAsIG1fYnVmZmVy
KDApCi0gICAgICAgICAgICAsIG1fYnVmZmVyU2l6ZSgwKQogICAgICAgICAgICAgLCBtX3RvdGFs
KDApCiAgICAgICAgICAgICAsIG1faWRsZUhhbmRsZXIoMCkKKyAgICAgICAgICAgICwgbV9nb3RD
aHVua0hhbmRsZXIoMCkKICNlbmRpZgogI2lmIFBMQVRGT1JNKFFUKQogICAgICAgICAgICAgLCBt
X2pvYigwKQpAQCAtMTMzLDYgKzEzMSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
ICAgIG1fdXNlciA9IHVybC51c2VyKCk7CiAgICAgICAgICAgICBtX3Bhc3MgPSB1cmwucGFzcygp
OwogICAgICAgICAgICAgbV9maXJzdFJlcXVlc3QucmVtb3ZlQ3JlZGVudGlhbHMoKTsKKyNpZiBV
U0UoU09VUCkKKyAgICAgICAgICAgIG1fcmVxdWVzdGVyID0gYWRvcHRQbGF0Zm9ybVJlZih3ZWJr
aXRfc291cF9yZXF1ZXN0ZXJfbmV3KCkpOworI2VuZGlmCiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIH5SZXNvdXJjZUhhbmRsZUludGVybmFsKCk7CkBAIC0xODUsMTYgKzE4NiwxOCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFZlY3RvcjxjaGFyPiBtX3Bvc3RCeXRlczsKICNl
bmRpZgogI2lmIFVTRShTT1VQKQotICAgICAgICBTb3VwTWVzc2FnZSogbV9tc2c7CisgICAgICAg
IFBsYXRmb3JtUmVmUHRyPFNvdXBNZXNzYWdlPiBtX3NvdXBNc2c7CiAgICAgICAgIFJlc291cmNl
UmVzcG9uc2UgbV9yZXNwb25zZTsKICAgICAgICAgYm9vbCBtX2NhbmNlbGxlZDsKLSAgICAgICAg
R0ZpbGUqIG1fZ2ZpbGU7Ci0gICAgICAgIEdJbnB1dFN0cmVhbSogbV9pbnB1dFN0cmVhbTsKLSAg
ICAgICAgR0NhbmNlbGxhYmxlKiBtX2NhbmNlbGxhYmxlOworICAgICAgICBQbGF0Zm9ybVJlZlB0
cjxXZWJLaXRTb3VwUmVxdWVzdD4gbV9zb3VwUmVxdWVzdDsKKyAgICAgICAgUGxhdGZvcm1SZWZQ
dHI8V2ViS2l0U291cFJlcXVlc3Rlcj4gbV9yZXF1ZXN0ZXI7CisgICAgICAgIFBsYXRmb3JtUmVm
UHRyPEdJbnB1dFN0cmVhbT4gbV9pbnB1dFN0cmVhbTsKKyAgICAgICAgUGxhdGZvcm1SZWZQdHI8
R0NhbmNlbGxhYmxlPiBtX2NhbmNlbGxhYmxlOwogICAgICAgICBjaGFyKiBtX2J1ZmZlcjsKLSAg
ICAgICAgZ3NpemUgbV9idWZmZXJTaXplLCBtX3RvdGFsOworICAgICAgICBnc2l6ZSBtX3RvdGFs
OwogICAgICAgICBndWludCBtX2lkbGVIYW5kbGVyOwogICAgICAgICBSZWZQdHI8TmV0d29ya2lu
Z0NvbnRleHQ+IG1fY29udGV4dDsKKyAgICAgICAgZ3Vsb25nIG1fZ290Q2h1bmtIYW5kbGVyOwog
I2VuZGlmCiAjaWYgUExBVEZPUk0oUVQpCiAgICAgICAgIFFOZXR3b3JrUmVwbHlIYW5kbGVyKiBt
X2pvYjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNl
SGFuZGxlU291cC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhh
bmRsZVNvdXAuY3BwCmluZGV4IDBkODQzODguLjRmYjBhOTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcApAQCAtNDUsOCAr
NDUsOCBAQAogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCIKICNpbmNsdWRlICJS
ZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSAi
c291cC1yZXF1ZXN0LWh0dHAuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKLQogI2luY2x1
ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8ZmNudGwuaD4KICNpbmNsdWRlIDxnaW8vZ2lvLmg+CkBA
IC01OCw2ICs1OCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2RlZmluZSBSRUFEX0JV
RkZFUl9TSVpFIDgxOTIKKwogY2xhc3MgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyIDogcHVibGlj
IFJlc291cmNlSGFuZGxlQ2xpZW50LCBwdWJsaWMgTm9uY29weWFibGUgewogcHVibGljOgogICAg
IFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlcihSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25z
ZSAmLCBWZWN0b3I8Y2hhcj4mKTsKQEAgLTEyMCwxNiArMTIyLDE2IEBAIHZvaWQgV2ViQ29yZVN5
bmNocm9ub3VzTG9hZGVyOjpydW4oKQogICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9v
cCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNsZWFudXBHaW9PcGVyYXRpb24oUmVzb3VyY2VIYW5kbGUq
IGhhbmRsZSwgYm9vbCBpc0Rlc3Ryb3lpbmcpOwotc3RhdGljIGJvb2wgc3RhcnREYXRhKFJlc291
cmNlSGFuZGxlKiBoYW5kbGUsIFN0cmluZyB1cmxTdHJpbmcpOwotc3RhdGljIGJvb2wgc3RhcnRH
aW8oUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgS1VSTCB1cmwpOworc3RhdGljIHZvaWQgY2xlYW51
cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKFJlc291cmNlSGFuZGxlKiwgYm9vbCBpc0Rlc3Ryb3lpbmcp
Oworc3RhdGljIHZvaWQgc2VuZFJlcXVlc3RDYWxsYmFjayhHT2JqZWN0KiwgR0FzeW5jUmVzdWx0
KiwgZ3BvaW50ZXIpOworc3RhdGljIHZvaWQgcmVhZENhbGxiYWNrKEdPYmplY3QqLCBHQXN5bmNS
ZXN1bHQqLCBncG9pbnRlcik7CitzdGF0aWMgdm9pZCBjbG9zZUNhbGxiYWNrKEdPYmplY3QqLCBH
QXN5bmNSZXN1bHQqLCBncG9pbnRlcik7CitzdGF0aWMgYm9vbCBzdGFydEdpbyhSZXNvdXJjZUhh
bmRsZSosIEtVUkwpOwogCiBSZXNvdXJjZUhhbmRsZUludGVybmFsOjp+UmVzb3VyY2VIYW5kbGVJ
bnRlcm5hbCgpCiB7Ci0gICAgaWYgKG1fbXNnKSB7Ci0gICAgICAgIGdfb2JqZWN0X3VucmVmKG1f
bXNnKTsKLSAgICAgICAgbV9tc2cgPSAwOwotICAgIH0KKyAgICBpZiAobV9zb3VwUmVxdWVzdCkK
KyAgICAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QobV9zb3VwUmVxdWVzdC5nZXQoKSks
ICJ3ZWJraXQtcmVzb3VyY2UiLCAwKTsKIAogICAgIGlmIChtX2lkbGVIYW5kbGVyKSB7CiAgICAg
ICAgIGdfc291cmNlX3JlbW92ZShtX2lkbGVIYW5kbGVyKTsKQEAgLTEzOSwxMSArMTQxLDExIEBA
IFJlc291cmNlSGFuZGxlSW50ZXJuYWw6On5SZXNvdXJjZUhhbmRsZUludGVybmFsKCkKIAogUmVz
b3VyY2VIYW5kbGU6On5SZXNvdXJjZUhhbmRsZSgpCiB7Ci0gICAgaWYgKGQtPm1fbXNnKQotICAg
ICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQoZC0+bV9tc2csIEdfU0lH
TkFMX01BVENIX0RBVEEsCisgICAgaWYgKGQtPm1fc291cE1zZykKKyAgICAgICAgZ19zaWduYWxf
aGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKGQtPm1fc291cE1zZy5nZXQoKSwgR19TSUdOQUxf
TUFUQ0hfREFUQSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDAsIDAsIDAsIDAsIHRoaXMpOwogCi0gICAgY2xlYW51cEdpb09wZXJhdGlvbih0aGlzLCB0cnVl
KTsKKyAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24odGhpcywgdHJ1ZSk7CiB9CiAKIHZv
aWQgUmVzb3VyY2VIYW5kbGU6OnByZXBhcmVGb3JVUkwoY29uc3QgS1VSTCAmdXJsKQpAQCAtMTg1
LDkgKzE4Nyw4IEBAIHN0YXRpYyB2b2lkIHJlc3RhcnRlZENhbGxiYWNrKFNvdXBNZXNzYWdlKiBt
c2csIGdwb2ludGVyIGRhdGEpCiAgICAgaWYgKGQtPm1fY2FuY2VsbGVkKQogICAgICAgICByZXR1
cm47CiAKLSAgICBjaGFyKiB1cmkgPSBzb3VwX3VyaV90b19zdHJpbmcoc291cF9tZXNzYWdlX2dl
dF91cmkobXNnKSwgZmFsc2UpOwotICAgIFN0cmluZyBsb2NhdGlvbiA9IFN0cmluZyh1cmkpOwot
ICAgIGdfZnJlZSh1cmkpOworICAgIEdPd25QdHI8Y2hhcj4gdXJpKHNvdXBfdXJpX3RvX3N0cmlu
Zyhzb3VwX21lc3NhZ2VfZ2V0X3VyaShtc2cpLCBmYWxzZSkpOworICAgIFN0cmluZyBsb2NhdGlv
biA9IFN0cmluZzo6ZnJvbVVURjgodXJpLmdldCgpKTsKICAgICBLVVJMIG5ld1VSTCA9IEtVUkwo
aGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKSwgbG9jYXRpb24pOwogCiAgICAgUmVzb3VyY2VS
ZXF1ZXN0IHJlcXVlc3QgPSBoYW5kbGUtPmZpcnN0UmVxdWVzdCgpOwpAQCAtMjEzLDcgKzIxNCw3
IEBAIHN0YXRpYyB2b2lkIHJlc3RhcnRlZENhbGxiYWNrKFNvdXBNZXNzYWdlKiBtc2csIGdwb2lu
dGVyIGRhdGEpCiAgICAgU3RyaW5nIGZpcnN0UGFydHlTdHJpbmcgPSByZXF1ZXN0LmZpcnN0UGFy
dHlGb3JDb29raWVzKCkuc3RyaW5nKCk7CiAgICAgaWYgKCFmaXJzdFBhcnR5U3RyaW5nLmlzRW1w
dHkoKSkgewogICAgICAgICBHT3duUHRyPFNvdXBVUkk+IGZpcnN0UGFydHkoc291cF91cmlfbmV3
KGZpcnN0UGFydHlTdHJpbmcudXRmOCgpLmRhdGEoKSkpOwotICAgICAgICBzb3VwX21lc3NhZ2Vf
c2V0X2ZpcnN0X3BhcnR5KGQtPm1fbXNnLCBmaXJzdFBhcnR5LmdldCgpKTsKKyAgICAgICAgc291
cF9tZXNzYWdlX3NldF9maXJzdF9wYXJ0eShkLT5tX3NvdXBNc2cuZ2V0KCksIGZpcnN0UGFydHku
Z2V0KCkpOwogICAgIH0KICNlbmRpZgogfQpAQCAtMjkzLDUzICsyOTQsOSBAQCBzdGF0aWMgdm9p
ZCBnb3RDaHVua0NhbGxiYWNrKFNvdXBNZXNzYWdlKiBtc2csIFNvdXBCdWZmZXIqIGNodW5rLCBn
cG9pbnRlciBkYXRhKQogICAgICAgICByZXR1cm47CiAKICAgICBjbGllbnQtPmRpZFJlY2VpdmVE
YXRhKGhhbmRsZS5nZXQoKSwgY2h1bmstPmRhdGEsIGNodW5rLT5sZW5ndGgsIGZhbHNlKTsKLX0K
LQotLy8gQ2FsbGVkIGF0IHRoZSBlbmQgb2YgdGhlIG1lc3NhZ2UsIHdpdGggYWxsIHRoZSBuZWNl
c3NhcnkgYWJvdXQgdGhlIGxhc3QgaW5mb3JtYXRpb25zLgotLy8gRG9lc24ndCBnZXQgY2FsbGVk
IGZvciByZWRpcmVjdHMuCi1zdGF0aWMgdm9pZCBmaW5pc2hlZENhbGxiYWNrKFNvdXBTZXNzaW9u
ICpzZXNzaW9uLCBTb3VwTWVzc2FnZSogbXNnLCBncG9pbnRlciBkYXRhKQotewotICAgIFJlZlB0
cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8UmVzb3VyY2VI
YW5kbGUqPihkYXRhKSk7Ci0gICAgLy8gVE9ETzogbWF5YmUgd2Ugc2hvdWxkIHJ1biB0aGlzIGNv
ZGUgZXZlbiBpZiB0aGVyZSdzIG5vIGNsaWVudD8KLSAgICBpZiAoIWhhbmRsZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50
ZXJuYWwoKTsKLQotICAgIFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQgPSBoYW5kbGUtPmNs
aWVudCgpOwotICAgIGlmICghY2xpZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZC0+
bV9jYW5jZWxsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChTT1VQX1NUQVRVU19JU19U
UkFOU1BPUlRfRVJST1IobXNnLT5zdGF0dXNfY29kZSkpIHsKLSAgICAgICAgY2hhciogdXJpID0g
c291cF91cmlfdG9fc3RyaW5nKHNvdXBfbWVzc2FnZV9nZXRfdXJpKG1zZyksIGZhbHNlKTsKLSAg
ICAgICAgUmVzb3VyY2VFcnJvciBlcnJvcihnX3F1YXJrX3RvX3N0cmluZyhTT1VQX0hUVFBfRVJS
T1IpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZy0+c3RhdHVzX2NvZGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdXJpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFN0cmluZzo6ZnJvbVVURjgobXNnLT5yZWFzb25fcGhyYXNlKSk7Ci0gICAgICAgIGdfZnJlZSh1
cmkpOwotICAgICAgICBjbGllbnQtPmRpZEZhaWwoaGFuZGxlLmdldCgpLCBlcnJvcik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobXNnLT5zdGF0dXNfY29kZSA9PSBTT1VQX1NU
QVRVU19VTkFVVEhPUklaRUQpIHsKLSAgICAgICAgZmlsbFJlc3BvbnNlRnJvbU1lc3NhZ2UobXNn
LCAmZC0+bV9yZXNwb25zZSk7Ci0gICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGhh
bmRsZS5nZXQoKSwgZC0+bV9yZXNwb25zZSk7Ci0KLSAgICAgICAgLy8gV2ViQ29yZSBtaWdodCBo
YXZlIGNhbmNlbGxlZCB0aGUgam9iIGluIHRoZSB3aGlsZQotICAgICAgICBpZiAoZC0+bV9jYW5j
ZWxsZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKG1zZy0+cmVzcG9uc2Vf
Ym9keS0+ZGF0YSkKLSAgICAgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURhdGEoaGFuZGxlLmdl
dCgpLCBtc2ctPnJlc3BvbnNlX2JvZHktPmRhdGEsIG1zZy0+cmVzcG9uc2VfYm9keS0+bGVuZ3Ro
LCB0cnVlKTsKLSAgICB9CiAKLSAgICBjbGllbnQtPmRpZEZpbmlzaExvYWRpbmcoaGFuZGxlLmdl
dCgpLCAwKTsKIH0KIAotLy8gcGFyc2VEYXRhVXJsKCkgaXMgdGFrZW4gZnJvbSB0aGUgQ1VSTCBo
dHRwIGJhY2tlbmQuCiBzdGF0aWMgZ2Jvb2xlYW4gcGFyc2VEYXRhVXJsKGdwb2ludGVyIGNhbGxi
YWNrRGF0YSkKIHsKICAgICBSZXNvdXJjZUhhbmRsZSogaGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVz
b3VyY2VIYW5kbGUqPihjYWxsYmFja0RhdGEpOwpAQCAtMzY0LDcgKzMyMSw2IEBAIHN0YXRpYyBn
Ym9vbGVhbiBwYXJzZURhdGFVcmwoZ3BvaW50ZXIgY2FsbGJhY2tEYXRhKQogICAgIH0KIAogICAg
IFN0cmluZyBtZWRpYVR5cGUgPSB1cmwuc3Vic3RyaW5nKDUsIGluZGV4IC0gNSk7Ci0gICAgU3Ry
aW5nIGRhdGEgPSB1cmwuc3Vic3RyaW5nKGluZGV4ICsgMSk7CiAKICAgICBib29sIGlzQmFzZTY0
ID0gbWVkaWFUeXBlLmVuZHNXaXRoKCI7YmFzZTY0IiwgZmFsc2UpOwogICAgIGlmIChpc0Jhc2U2
NCkKQEAgLTM4MCw0MiArMzM2LDQxIEBAIHN0YXRpYyBnYm9vbGVhbiBwYXJzZURhdGFVcmwoZ3Bv
aW50ZXIgY2FsbGJhY2tEYXRhKQogICAgIHJlc3BvbnNlLnNldFVSTChoYW5kbGUtPmZpcnN0UmVx
dWVzdCgpLnVybCgpKTsKICAgICByZXNwb25zZS5zZXRNaW1lVHlwZShtaW1lVHlwZSk7CiAKLSAg
ICBpZiAoaXNCYXNlNjQpIHsKLSAgICAgICAgZGF0YSA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNl
cyhkYXRhKTsKLSAgICAgICAgcmVzcG9uc2Uuc2V0VGV4dEVuY29kaW5nTmFtZShjaGFyc2V0KTsK
LSAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UoaGFuZGxlLCByZXNwb25zZSk7Ci0K
LSAgICAgICAgLy8gVGhlIGxvYWQgbWF5IGJlIGNhbmNlbGxlZCwgYW5kIHRoZSBjbGllbnQgbWF5
IGJlIGRlc3Ryb3llZAotICAgICAgICAvLyBieSBhbnkgb2YgdGhlIGNsaWVudCByZXBvcnRpbmcg
Y2FsbHMsIHNvIHdlIGNoZWNrLCBhbmQgYmFpbAotICAgICAgICAvLyBvdXQgaW4gZWl0aGVyIG9m
IHRob3NlIGNhc2VzLgotICAgICAgICBpZiAoZC0+bV9jYW5jZWxsZWQgfHwgIWhhbmRsZS0+Y2xp
ZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gVXNlIHRoZSBH
TGliIEJhc2U2NCwgc2luY2UgV2ViQ29yZSdzIGRlY29kZXIgaXNuJ3QKLSAgICAgICAgLy8gZ2Vu
ZXJhbC1wdXJwb3NlIGFuZCBmYWlscyBvbiBBY2lkMyB0ZXN0IDk3ICh3aGl0ZXNwYWNlKS4KLSAg
ICAgICAgc2l6ZV90IG91dExlbmd0aCA9IDA7Ci0gICAgICAgIGNoYXIqIG91dERhdGEgPSAwOwot
ICAgICAgICBvdXREYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZ19iYXNlNjRfZGVjb2Rl
KGRhdGEudXRmOCgpLmRhdGEoKSwgJm91dExlbmd0aCkpOwotICAgICAgICBpZiAob3V0RGF0YSAm
JiBvdXRMZW5ndGggPiAwKQotICAgICAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0YShoYW5k
bGUsIG91dERhdGEsIG91dExlbmd0aCwgMCk7Ci0gICAgICAgIGdfZnJlZShvdXREYXRhKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICAvLyBXZSBoYXZlIHRvIGNvbnZlcnQgdG8gVVRGLTE2IGVhcmx5
IGR1ZSB0byBsaW1pdGF0aW9ucyBpbiBLVVJMCi0gICAgICAgIGRhdGEgPSBkZWNvZGVVUkxFc2Nh
cGVTZXF1ZW5jZXMoZGF0YSwgVGV4dEVuY29kaW5nKGNoYXJzZXQpKTsKLSAgICAgICAgcmVzcG9u
c2Uuc2V0VGV4dEVuY29kaW5nTmFtZSgiVVRGLTE2Iik7Ci0gICAgICAgIGNsaWVudC0+ZGlkUmVj
ZWl2ZVJlc3BvbnNlKGhhbmRsZSwgcmVzcG9uc2UpOwotCi0gICAgICAgIGlmIChkLT5tX2NhbmNl
bGxlZCB8fCAhaGFuZGxlLT5jbGllbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgICAgICBpZiAoZGF0YS5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgICBjbGllbnQtPmRpZFJl
Y2VpdmVEYXRhKGhhbmRsZSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZGF0YS5jaGFy
YWN0ZXJzKCkpLCBkYXRhLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSwgMCk7Ci0gICAgfQorICAg
IC8vIEZvciBub24gYmFzZTY0IGVuY29kZWQgZGF0YSB3ZSBoYXZlIHRvIGNvbnZlcnQgdG8gVVRG
LTE2IGVhcmx5CisgICAgLy8gZHVlIHRvIGxpbWl0YXRpb25zIGluIEtVUkwKKyAgICByZXNwb25z
ZS5zZXRUZXh0RW5jb2RpbmdOYW1lKGlzQmFzZTY0ID8gY2hhcnNldCA6ICJVVEYtMTYiKTsKKyAg
ICBjbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShoYW5kbGUsIHJlc3BvbnNlKTsKIAorICAgIC8v
IFRoZSBsb2FkIG1heSBiZSBjYW5jZWxsZWQsIGFuZCB0aGUgY2xpZW50IG1heSBiZSBkZXN0cm95
ZWQKKyAgICAvLyBieSBhbnkgb2YgdGhlIGNsaWVudCByZXBvcnRpbmcgY2FsbHMsIHNvIHdlIGNo
ZWNrLCBhbmQgYmFpbAorICAgIC8vIG91dCBpbiBlaXRoZXIgb2YgdGhvc2UgY2FzZXMuCiAgICAg
aWYgKGQtPm1fY2FuY2VsbGVkIHx8ICFoYW5kbGUtPmNsaWVudCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBjbGllbnQtPmRpZEZpbmlzaExvYWRpbmcoaGFuZGxlLCAwKTsKKyAgICBT
b3VwU2Vzc2lvbiogc2Vzc2lvbiA9IGhhbmRsZS0+ZGVmYXVsdFNlc3Npb24oKTsKKyAgICBHT3du
UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgZC0+bV9zb3VwUmVxdWVzdCA9IGFkb3B0UGxhdGZvcm1S
ZWYod2Via2l0X3NvdXBfcmVxdWVzdGVyX3JlcXVlc3QoZC0+bV9yZXF1ZXN0ZXIuZ2V0KCksIGhh
bmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc2Vzc2lv
biwgJmVycm9yLm91dFB0cigpKSk7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIGQtPm1fc291
cFJlcXVlc3QgPSAwOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZC0+bV9p
bnB1dFN0cmVhbSA9IGFkb3B0UGxhdGZvcm1SZWYod2Via2l0X3NvdXBfcmVxdWVzdF9zZW5kKGQt
Pm1fc291cFJlcXVlc3QuZ2V0KCksIDAsICZlcnJvci5vdXRQdHIoKSkpOworICAgIGlmIChlcnJv
cikgeworICAgICAgICBkLT5tX2lucHV0U3RyZWFtID0gMDsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGQtPm1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGdfbWFsbG9j
KFJFQURfQlVGRkVSX1NJWkUpKTsKKyAgICBkLT5tX3RvdGFsID0gMDsKKworICAgIGdfb2JqZWN0
X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1faW5wdXRTdHJlYW0uZ2V0KCkpLCAid2Via2l0LXJlc291
cmNlIiwgaGFuZGxlKTsKKyAgICAvLyBiYWxhbmNlZCBieSBhIGRlcmVmKCkgaW4gY2xlYW51cFNv
dXBSZXF1ZXN0T3BlcmF0aW9uLCB3aGljaCBzaG91bGQgYWx3YXlzIHJ1bgorICAgIGhhbmRsZS0+
cmVmKCk7CisKKyAgICBkLT5tX2NhbmNlbGxhYmxlID0gYWRvcHRQbGF0Zm9ybVJlZihnX2NhbmNl
bGxhYmxlX25ldygpKTsKKyAgICBnX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jKGQtPm1faW5wdXRT
dHJlYW0uZ2V0KCksIGQtPm1fYnVmZmVyLCBSRUFEX0JVRkZFUl9TSVpFLCBHX1BSSU9SSVRZX0RF
RkFVTFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLT5tX2NhbmNlbGxhYmxlLmdl
dCgpLCByZWFkQ2FsbGJhY2ssIEdJTlRfVE9fUE9JTlRFUighaXNCYXNlNjQpKTsKIAogICAgIHJl
dHVybiBmYWxzZTsKIH0KQEAgLTQ2OSw2ICs0MjQsMTMzIEBAIHN0YXRpYyB2b2lkIGVuc3VyZVNl
c3Npb25Jc0luaXRpYWxpemVkKFNvdXBTZXNzaW9uKiBzZXNzaW9uKQogICAgIGdfb2JqZWN0X3Nl
dF9kYXRhKEdfT0JKRUNUKHNlc3Npb24pLCAid2Via2l0LWluaXQiLCByZWludGVycHJldF9jYXN0
PHZvaWQqPigweGRlYWRiZWVmKSk7CiB9CiAKK3N0YXRpYyB2b2lkIGNsZWFudXBTb3VwUmVxdWVz
dE9wZXJhdGlvbihSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBib29sIGlzRGVzdHJveWluZyA9IGZh
bHNlKQoreworICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVy
bmFsKCk7CisKKyAgICBpZiAoZC0+bV9zb3VwUmVxdWVzdCkgeworICAgICAgICBnX29iamVjdF9z
ZXRfZGF0YShHX09CSkVDVChkLT5tX3NvdXBSZXF1ZXN0LmdldCgpKSwgIndlYmtpdC1yZXNvdXJj
ZSIsIDApOworICAgICAgICBkLT5tX3NvdXBSZXF1ZXN0LmNsZWFyKCk7CisgICAgfQorCisgICAg
aWYgKGQtPm1faW5wdXRTdHJlYW0pIHsKKyAgICAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpF
Q1QoZC0+bV9pbnB1dFN0cmVhbS5nZXQoKSksICJ3ZWJraXQtcmVzb3VyY2UiLCAwKTsKKyAgICAg
ICAgZC0+bV9pbnB1dFN0cmVhbS5jbGVhcigpOworICAgIH0KKworICAgIGlmIChkLT5tX2NhbmNl
bGxhYmxlKQorICAgICAgICBkLT5tX2NhbmNlbGxhYmxlLmNsZWFyKCk7CisKKyAgICBpZiAoZC0+
bV9zb3VwTXNnKQorICAgICAgICBkLT5tX3NvdXBNc2cuY2xlYXIoKTsKKworICAgIGlmIChkLT5t
X2J1ZmZlcikgeworICAgICAgICBnX2ZyZWUoZC0+bV9idWZmZXIpOworICAgICAgICBkLT5tX2J1
ZmZlciA9IDA7CisgICAgfQorCisgICAgaWYgKCFpc0Rlc3Ryb3lpbmcpCisgICAgICAgIGhhbmRs
ZS0+ZGVyZWYoKTsKK30KKworc3RhdGljIHZvaWQgc2VuZFJlcXVlc3RDYWxsYmFjayhHT2JqZWN0
KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBS
ZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9IHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxl
Kj4oZ19vYmplY3RfZ2V0X2RhdGEoc291cmNlLCAid2Via2l0LXJlc291cmNlIikpOworICAgIGlm
ICghaGFuZGxlKQorICAgICAgICByZXR1cm47CisKKyAgICBSZXNvdXJjZUhhbmRsZUludGVybmFs
KiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOworICAgIFJlc291cmNlSGFuZGxlQ2xpZW50KiBj
bGllbnQgPSBoYW5kbGUtPmNsaWVudCgpOworCisgICAgaWYgKGQtPm1fZ290Q2h1bmtIYW5kbGVy
KSB7CisgICAgICAgIC8vIE5vIG5lZWQgdG8gY2FsbCBnb3RDaHVua0hhbmRsZXIgYW55bW9yZS4g
UmVjZWl2ZWQgZGF0YSB3aWxsCisgICAgICAgIC8vIGJlIHJlcG9ydGVkIGJ5IHJlYWRDYWxsYmFj
aworICAgICAgICBpZiAoZ19zaWduYWxfaGFuZGxlcl9pc19jb25uZWN0ZWQoZC0+bV9zb3VwTXNn
LmdldCgpLCBkLT5tX2dvdENodW5rSGFuZGxlcikpCisgICAgICAgICAgICBnX3NpZ25hbF9oYW5k
bGVyX2Rpc2Nvbm5lY3QoZC0+bV9zb3VwTXNnLmdldCgpLCBkLT5tX2dvdENodW5rSGFuZGxlcik7
CisgICAgfQorCisgICAgaWYgKGQtPm1fY2FuY2VsbGVkIHx8ICFjbGllbnQpIHsKKyAgICAgICAg
Y2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgR0lucHV0U3RyZWFt
KiBpbiA9IHdlYmtpdF9zb3VwX3JlcXVlc3Rfc2VuZF9maW5pc2goZC0+bV9zb3VwUmVxdWVzdC5n
ZXQoKSwgcmVzLCAmZXJyb3Iub3V0UHRyKCkpOworCisgICAgaWYgKGVycm9yKSB7CisgICAgICAg
IFNvdXBNZXNzYWdlICpzb3VwTXNnID0gZC0+bV9zb3VwTXNnLmdldCgpOworICAgICAgICBnYm9v
bGVhbiBpc1RyYW5zcG9ydEVycm9yID0gZC0+bV9zb3VwTXNnICYmIFNPVVBfU1RBVFVTX0lTX1RS
QU5TUE9SVF9FUlJPUihzb3VwTXNnLT5zdGF0dXNfY29kZSk7CisKKyAgICAgICAgaWYgKGlzVHJh
bnNwb3J0RXJyb3IgfHwgKGVycm9yLT5kb21haW4gPT0gR19JT19FUlJPUikpIHsKKyAgICAgICAg
ICAgIFNvdXBVUkkqIHVyaSA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X3VyaShkLT5tX3NvdXBS
ZXF1ZXN0LmdldCgpKTsKKyAgICAgICAgICAgIEdPd25QdHI8Y2hhcj4gdXJpU3RyKHNvdXBfdXJp
X3RvX3N0cmluZyh1cmksIGZhbHNlKSk7CisgICAgICAgICAgICBnaW50IGVycm9yQ29kZSA9IGlz
VHJhbnNwb3J0RXJyb3IgPyBzb3VwTXNnLT5zdGF0dXNfY29kZSA6IGVycm9yLT5jb2RlOworICAg
ICAgICAgICAgY29uc3QgZ2NoYXIqIGVycm9yTXNnID0gaXNUcmFuc3BvcnRFcnJvciA/IHNvdXBN
c2ctPnJlYXNvbl9waHJhc2UgOiBlcnJvci0+bWVzc2FnZTsKKyAgICAgICAgICAgIGNvbnN0IGdj
aGFyKiBxdWFya1N0ciA9IGlzVHJhbnNwb3J0RXJyb3IgPyBnX3F1YXJrX3RvX3N0cmluZyhTT1VQ
X0hUVFBfRVJST1IpIDogZ19xdWFya190b19zdHJpbmcoR19JT19FUlJPUik7CisgICAgICAgICAg
ICBSZXNvdXJjZUVycm9yIHJlc291cmNlRXJyb3IocXVhcmtTdHIsIGVycm9yQ29kZSwgdXJpU3Ry
LmdldCgpLCBTdHJpbmc6OmZyb21VVEY4KGVycm9yTXNnKSk7CisKKyAgICAgICAgICAgIGNsZWFu
dXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOworICAgICAgICAgICAgY2xpZW50
LT5kaWRGYWlsKGhhbmRsZS5nZXQoKSwgcmVzb3VyY2VFcnJvcik7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoZC0+bV9zb3VwTXNnICYmIHNvdXBNc2ctPnN0
YXR1c19jb2RlID09IFNPVVBfU1RBVFVTX1VOQVVUSE9SSVpFRCkgeworICAgICAgICAgICAgZmls
bFJlc3BvbnNlRnJvbU1lc3NhZ2Uoc291cE1zZywgJmQtPm1fcmVzcG9uc2UpOworICAgICAgICAg
ICAgY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UoaGFuZGxlLmdldCgpLCBkLT5tX3Jlc3BvbnNl
KTsKKworICAgICAgICAgICAgLy8gV2ViQ29yZSBtaWdodCBoYXZlIGNhbmNlbGxlZCB0aGUgam9i
IGluIHRoZSB3aGlsZQorICAgICAgICAgICAgaWYgKGQtPm1fY2FuY2VsbGVkKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKHNvdXBNc2ctPnJlc3BvbnNlX2JvZHkt
PmRhdGEpCisgICAgICAgICAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0YShoYW5kbGUuZ2V0
KCksIHNvdXBNc2ctPnJlc3BvbnNlX2JvZHktPmRhdGEsIHNvdXBNc2ctPnJlc3BvbnNlX2JvZHkt
Pmxlbmd0aCwgdHJ1ZSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBkaWRSZWNlaXZlRGF0YSBh
Ym92ZSBtaWdodCBoYXZlIGNhbmNlbGxlZCBpdAorICAgICAgICBpZiAoZC0+bV9jYW5jZWxsZWQg
fHwgIWNsaWVudCkgeworICAgICAgICAgIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5k
bGUuZ2V0KCkpOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNsaWVu
dC0+ZGlkRmluaXNoTG9hZGluZyhoYW5kbGUuZ2V0KCksIDApOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGQtPm1fY2FuY2VsbGVkKSB7CisgICAgICAgIGNsZWFudXBTb3VwUmVx
dWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgZC0+bV9pbnB1dFN0cmVhbSA9IGFkb3B0UGxhdGZvcm1SZWYoaW4pOworICAgIGQtPm1fYnVm
ZmVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGdfbWFsbG9jKFJFQURfQlVGRkVSX1NJWkUpKTsKKyAg
ICBkLT5tX3RvdGFsID0gMDsKKworICAgIC8vIHJlYWRDYWxsYmFjayBuZWVkcyBpdAorICAgIGdf
b2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1faW5wdXRTdHJlYW0uZ2V0KCkpLCAid2Via2l0
LXJlc291cmNlIiwgaGFuZGxlLmdldCgpKTsKKworICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYg
aXQncyBhIGZpbGU6IFVSTCBhbmQgaWYgaXQgaXMgYSByZWd1bGFyCisgICAgLy8gZmlsZSBhcyBp
dCBjb3VsZCBiZSBhIGRpcmVjdG9yeS4gSW4gdGhhdCBjYXNlIFNvdXAgcHJvcGVybHkKKyAgICAv
LyByZXR1cm5zIGEgc3RyZWFtIHdob3NlIGNvbnRlbnQgaXMgYSBIVE1MIHdpdGggYSBsaXN0IG9m
IGZpbGVzCisgICAgLy8gaW4gdGhlIGRpcmVjdG9yeQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZShoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnByb3RvY29sKCksICJmaWxlIikKKyAgICAg
ICAgJiYgR19JU19GSUxFX0lOUFVUX1NUUkVBTShpbikpIHsKKyAgICAgICAgUmVzb3VyY2VSZXNw
b25zZSByZXNwb25zZTsKKworICAgICAgICByZXNwb25zZS5zZXRVUkwoaGFuZGxlLT5maXJzdFJl
cXVlc3QoKS51cmwoKSk7CisgICAgICAgIHJlc3BvbnNlLnNldE1pbWVUeXBlKHdlYmtpdF9zb3Vw
X3JlcXVlc3RfZ2V0X2NvbnRlbnRfdHlwZShkLT5tX3NvdXBSZXF1ZXN0LmdldCgpKSk7CisgICAg
ICAgIHJlc3BvbnNlLnNldEV4cGVjdGVkQ29udGVudExlbmd0aCh3ZWJraXRfc291cF9yZXF1ZXN0
X2dldF9jb250ZW50X2xlbmd0aChkLT5tX3NvdXBSZXF1ZXN0LmdldCgpKSk7CisgICAgICAgIGNs
aWVudC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGhhbmRsZS5nZXQoKSwgcmVzcG9uc2UpOworCisgICAg
ICAgIGlmIChkLT5tX2NhbmNlbGxlZCkgeworICAgICAgICAgICAgY2xlYW51cFNvdXBSZXF1ZXN0
T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBnX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jKGQtPm1faW5wdXRTdHJlYW0u
Z2V0KCksIGQtPm1fYnVmZmVyLCBSRUFEX0JVRkZFUl9TSVpFLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR19QUklPUklUWV9ERUZBVUxULCBkLT5tX2NhbmNlbGxhYmxlLmdldCgpLCBy
ZWFkQ2FsbGJhY2ssIDApOworfQorCiBzdGF0aWMgYm9vbCBzdGFydEh0dHAoUmVzb3VyY2VIYW5k
bGUqIGhhbmRsZSkKIHsKICAgICBBU1NFUlQoaGFuZGxlKTsKQEAgLTQ4MywyNiArNTY1LDM3IEBA
IHN0YXRpYyBib29sIHN0YXJ0SHR0cChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQogICAgIHVybC5y
ZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsKICAgICByZXF1ZXN0LnNldFVSTCh1cmwpOwogCi0g
ICAgZC0+bV9tc2cgPSByZXF1ZXN0LnRvU291cE1lc3NhZ2UoKTsKLSAgICBpZiAoIWQtPm1fbXNn
KQorICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBkLT5tX3NvdXBSZXF1ZXN0ID0gYWRv
cHRQbGF0Zm9ybVJlZih3ZWJraXRfc291cF9yZXF1ZXN0ZXJfcmVxdWVzdChkLT5tX3JlcXVlc3Rl
ci5nZXQoKSwgdXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHNlc3Npb24sICZlcnJvci5vdXRQ
dHIoKSkpOworICAgIGlmIChlcnJvcikgeworICAgICAgICBkLT5tX3NvdXBSZXF1ZXN0ID0gMDsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGdfb2JqZWN0X3NldF9kYXRhKEdf
T0JKRUNUKGQtPm1fc291cFJlcXVlc3QuZ2V0KCkpLCAid2Via2l0LXJlc291cmNlIiwgaGFuZGxl
KTsKKworICAgIGQtPm1fc291cE1zZyA9IGFkb3B0UGxhdGZvcm1SZWYod2Via2l0X3NvdXBfcmVx
dWVzdF9odHRwX2dldF9tZXNzYWdlKFdFQktJVF9TT1VQX1JFUVVFU1RfSFRUUChkLT5tX3NvdXBS
ZXF1ZXN0LmdldCgpKSkpOworICAgIFNvdXBNZXNzYWdlICpzb3VwTXNnID0gZC0+bV9zb3VwTXNn
LmdldCgpOworICAgIHJlcXVlc3QudXBkYXRlU291cE1lc3NhZ2Uoc291cE1zZyk7CisKKyAgICBp
ZiAoIWQtPm1fc291cE1zZykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFoYW5k
bGUtPnNob3VsZENvbnRlbnRTbmlmZigpKQotICAgICAgICBzb3VwX21lc3NhZ2VfZGlzYWJsZV9m
ZWF0dXJlKGQtPm1fbXNnLCBTT1VQX1RZUEVfQ09OVEVOVF9TTklGRkVSKTsKKyAgICAgICAgc291
cF9tZXNzYWdlX2Rpc2FibGVfZmVhdHVyZShzb3VwTXNnLCBTT1VQX1RZUEVfQ09OVEVOVF9TTklG
RkVSKTsKIAotICAgIGdfc2lnbmFsX2Nvbm5lY3QoZC0+bV9tc2csICJyZXN0YXJ0ZWQiLCBHX0NB
TExCQUNLKHJlc3RhcnRlZENhbGxiYWNrKSwgaGFuZGxlKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0
KGQtPm1fbXNnLCAiZ290LWhlYWRlcnMiLCBHX0NBTExCQUNLKGdvdEhlYWRlcnNDYWxsYmFjayks
IGhhbmRsZSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChkLT5tX21zZywgImNvbnRlbnQtc25pZmZl
ZCIsIEdfQ0FMTEJBQ0soY29udGVudFNuaWZmZWRDYWxsYmFjayksIGhhbmRsZSk7Ci0gICAgZ19z
aWduYWxfY29ubmVjdChkLT5tX21zZywgImdvdC1jaHVuayIsIEdfQ0FMTEJBQ0soZ290Q2h1bmtD
YWxsYmFjayksIGhhbmRsZSk7CisgICAgZ19zaWduYWxfY29ubmVjdChzb3VwTXNnLCAicmVzdGFy
dGVkIiwgR19DQUxMQkFDSyhyZXN0YXJ0ZWRDYWxsYmFjayksIGhhbmRsZSk7CisgICAgZ19zaWdu
YWxfY29ubmVjdChzb3VwTXNnLCAiZ290LWhlYWRlcnMiLCBHX0NBTExCQUNLKGdvdEhlYWRlcnND
YWxsYmFjayksIGhhbmRsZSk7CisgICAgZ19zaWduYWxfY29ubmVjdChzb3VwTXNnLCAiY29udGVu
dC1zbmlmZmVkIiwgR19DQUxMQkFDSyhjb250ZW50U25pZmZlZENhbGxiYWNrKSwgaGFuZGxlKTsK
KyAgICBkLT5tX2dvdENodW5rSGFuZGxlciA9IGdfc2lnbmFsX2Nvbm5lY3Qoc291cE1zZywgImdv
dC1jaHVuayIsIEdfQ0FMTEJBQ0soZ290Q2h1bmtDYWxsYmFjayksIGhhbmRsZSk7CiAKICNpZmRl
ZiBIQVZFX0xJQlNPVVBfMl8yOV85MAogICAgIFN0cmluZyBmaXJzdFBhcnR5U3RyaW5nID0gcmVx
dWVzdC5maXJzdFBhcnR5Rm9yQ29va2llcygpLnN0cmluZygpOwogICAgIGlmICghZmlyc3RQYXJ0
eVN0cmluZy5pc0VtcHR5KCkpIHsKICAgICAgICAgR093blB0cjxTb3VwVVJJPiBmaXJzdFBhcnR5
KHNvdXBfdXJpX25ldyhmaXJzdFBhcnR5U3RyaW5nLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICAgICAg
c291cF9tZXNzYWdlX3NldF9maXJzdF9wYXJ0eShkLT5tX21zZywgZmlyc3RQYXJ0eS5nZXQoKSk7
CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfZmlyc3RfcGFydHkoc291cE1zZywgZmlyc3RQYXJ0
eS5nZXQoKSk7CiAgICAgfQogI2VuZGlmCi0gICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1Qo
ZC0+bV9tc2cpLCAicmVzb3VyY2VIYW5kbGUiLCByZWludGVycHJldF9jYXN0PHZvaWQqPihoYW5k
bGUpKTsKIAogICAgIEZvcm1EYXRhKiBodHRwQm9keSA9IGQtPm1fZmlyc3RSZXF1ZXN0Lmh0dHBC
b2R5KCk7CiAgICAgaWYgKGh0dHBCb2R5ICYmICFodHRwQm9keS0+aXNFbXB0eSgpKSB7CkBAIC01
MTIsNyArNjA1LDcgQEAgc3RhdGljIGJvb2wgc3RhcnRIdHRwKFJlc291cmNlSGFuZGxlKiBoYW5k
bGUpCiAgICAgICAgIGlmIChudW1FbGVtZW50cyA8IDIpIHsKICAgICAgICAgICAgIFZlY3Rvcjxj
aGFyPiBib2R5OwogICAgICAgICAgICAgaHR0cEJvZHktPmZsYXR0ZW4oYm9keSk7Ci0gICAgICAg
ICAgICBzb3VwX21lc3NhZ2Vfc2V0X3JlcXVlc3QoZC0+bV9tc2csIGQtPm1fZmlyc3RSZXF1ZXN0
Lmh0dHBDb250ZW50VHlwZSgpLnV0ZjgoKS5kYXRhKCksCisgICAgICAgICAgICBzb3VwX21lc3Nh
Z2Vfc2V0X3JlcXVlc3Qoc291cE1zZywgZC0+bV9maXJzdFJlcXVlc3QuaHR0cENvbnRlbnRUeXBl
KCkudXRmOCgpLmRhdGEoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
T1VQX01FTU9SWV9DT1BZLCBib2R5LmRhdGEoKSwgYm9keS5zaXplKCkpOwogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgLyoKQEAgLTUyMSwyNyArNjE0LDI1IEBAIHN0YXRpYyBib29sIHN0
YXJ0SHR0cChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQogICAgICAgICAgICAgICogY29weWluZyBp
bnRvIG1lbW9yeTsgVE9ETzogc3VwcG9ydCB1cGxvYWQgb2Ygbm9uLWxvY2FsCiAgICAgICAgICAg
ICAgKiAodGhpbmsgc2Z0cDovLykgZmlsZXMgYnkgdXNpbmcgR0lPPwogICAgICAgICAgICAgICov
Ci0gICAgICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9zZXRfYWNjdW11bGF0ZShkLT5tX21zZy0+
cmVxdWVzdF9ib2R5LCBGQUxTRSk7CisgICAgICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9zZXRf
YWNjdW11bGF0ZShzb3VwTXNnLT5yZXF1ZXN0X2JvZHksIEZBTFNFKTsKICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykgewogICAgICAgICAgICAgICAg
IGNvbnN0IEZvcm1EYXRhRWxlbWVudCYgZWxlbWVudCA9IGh0dHBCb2R5LT5lbGVtZW50cygpW2ld
OwogCiAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQubV90eXBlID09IEZvcm1EYXRhRWxlbWVu
dDo6ZGF0YSkKLSAgICAgICAgICAgICAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKGQt
Pm1fbXNnLT5yZXF1ZXN0X2JvZHksIFNPVVBfTUVNT1JZX1RFTVBPUkFSWSwgZWxlbWVudC5tX2Rh
dGEuZGF0YSgpLCBlbGVtZW50Lm1fZGF0YS5zaXplKCkpOworICAgICAgICAgICAgICAgICAgICBz
b3VwX21lc3NhZ2VfYm9keV9hcHBlbmQoc291cE1zZy0+cmVxdWVzdF9ib2R5LCBTT1VQX01FTU9S
WV9URU1QT1JBUlksIGVsZW1lbnQubV9kYXRhLmRhdGEoKSwgZWxlbWVudC5tX2RhdGEuc2l6ZSgp
KTsKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgLyoKICAgICAg
ICAgICAgICAgICAgICAgICogbWFwcGluZyBmb3IgdXBsb2FkZWQgZmlsZXMgY29kZSBpbnNwaXJl
ZCBieSB0ZWNobmlxdWUgdXNlZCBpbgogICAgICAgICAgICAgICAgICAgICAgKiBsaWJzb3VwJ3Mg
c2ltcGxlLWh0dHBkIHRlc3QKICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAg
ICAgICAgIEdFcnJvciogZXJyb3IgPSAwOworICAgICAgICAgICAgICAgICAgICBHT3duUHRyPEdF
cnJvcj4gZXJyb3I7CiAgICAgICAgICAgICAgICAgICAgIENTdHJpbmcgZmlsZU5hbWUgPSBmaWxl
U3lzdGVtUmVwcmVzZW50YXRpb24oZWxlbWVudC5tX2ZpbGVuYW1lKTsKLSAgICAgICAgICAgICAg
ICAgICAgR01hcHBlZEZpbGUqIGZpbGVNYXBwaW5nID0gZ19tYXBwZWRfZmlsZV9uZXcoZmlsZU5h
bWUuZGF0YSgpLCBmYWxzZSwgJmVycm9yKTsKKyAgICAgICAgICAgICAgICAgICAgR01hcHBlZEZp
bGUqIGZpbGVNYXBwaW5nID0gZ19tYXBwZWRfZmlsZV9uZXcoZmlsZU5hbWUuZGF0YSgpLCBmYWxz
ZSwgJmVycm9yLm91dFB0cigpKTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQoZC0+bV9t
c2csIEdfU0lHTkFMX01BVENIX0RBVEEsCisgICAgICAgICAgICAgICAgICAgICAgICBnX3NpZ25h
bF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQoc291cE1zZywgR19TSUdOQUxfTUFUQ0hfREFU
QSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLCAwLCAwLCAwLCBoYW5kbGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgZ19v
YmplY3RfdW5yZWYoZC0+bV9tc2cpOwotICAgICAgICAgICAgICAgICAgICAgICAgZC0+bV9tc2cg
PSAwOworICAgICAgICAgICAgICAgICAgICAgICAgZC0+bV9zb3VwTXNnLmNsZWFyKCk7CiAKICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAg
fQpAQCAtNTQ5LDM4ICs2NDAsMzEgQEAgc3RhdGljIGJvb2wgc3RhcnRIdHRwKFJlc291cmNlSGFu
ZGxlKiBoYW5kbGUpCiAgICAgICAgICAgICAgICAgICAgIFNvdXBCdWZmZXIqIHNvdXBCdWZmZXIg
PSBzb3VwX2J1ZmZlcl9uZXdfd2l0aF9vd25lcihnX21hcHBlZF9maWxlX2dldF9jb250ZW50cyhm
aWxlTWFwcGluZyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX21hcHBlZF9maWxlX2dldF9sZW5ndGgoZmls
ZU1hcHBpbmcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU1hcHBpbmcsCi0jaWYgR0xJQl9DSEVDS19W
RVJTSU9OKDIsIDIxLCAzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJv
eU5vdGlmeT4oZ19tYXBwZWRfZmlsZV91bnJlZikpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdfbWFwcGVkX2ZpbGVfZnJlZSkpOwotI2Vu
ZGlmCi0gICAgICAgICAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZF9idWZmZXIo
ZC0+bV9tc2ctPnJlcXVlc3RfYm9keSwgc291cEJ1ZmZlcik7CisgICAgICAgICAgICAgICAgICAg
IHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZF9idWZmZXIoc291cE1zZy0+cmVxdWVzdF9ib2R5LCBz
b3VwQnVmZmVyKTsKICAgICAgICAgICAgICAgICAgICAgc291cF9idWZmZXJfZnJlZShzb3VwQnVm
ZmVyKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICAvLyBiYWxhbmNlZCBieSBhIGRlcmVmKCkgaW4gZmluaXNoZWRDYWxsYmFjaywgd2hp
Y2ggc2hvdWxkIGFsd2F5cyBydW4KKyAgICAvLyBiYWxhbmNlZCBieSBhIGRlcmVmKCkgaW4gY2xl
YW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uLCB3aGljaCBzaG91bGQgYWx3YXlzIHJ1bgogICAgIGhh
bmRsZS0+cmVmKCk7CiAKICAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBhbiBBY2NlcHQgaGVhZGVy
IGZvciBzdWJyZXNvdXJjZXM7IHNvbWUgc2l0ZXMKICAgICAvLyB3YW50IHRoaXMgdG8gc2VydmUg
c29tZSBvZiB0aGVpciBzdWJyZXNvdXJjZXMKLSAgICBpZiAoIXNvdXBfbWVzc2FnZV9oZWFkZXJz
X2dldF9vbmUoZC0+bV9tc2ctPnJlcXVlc3RfaGVhZGVycywgIkFjY2VwdCIpKQotICAgICAgICBz
b3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQoZC0+bV9tc2ctPnJlcXVlc3RfaGVhZGVycywgIkFj
Y2VwdCIsICIqLyoiKTsKKyAgICBpZiAoIXNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9vbmUoc291
cE1zZy0+cmVxdWVzdF9oZWFkZXJzLCAiQWNjZXB0IikpCisgICAgICAgIHNvdXBfbWVzc2FnZV9o
ZWFkZXJzX2FwcGVuZChzb3VwTXNnLT5yZXF1ZXN0X2hlYWRlcnMsICJBY2NlcHQiLCAiKi8qIik7
CiAKLSAgICAvLyBCYWxhbmNlZCBpbiBSZXNvdXJjZUhhbmRsZUludGVybmFsJ3MgZGVzdHJ1Y3Rv
cjsgd2UgbmVlZCB0bwotICAgIC8vIGtlZXAgb3VyIG93biByZWYsIGJlY2F1c2UgYWZ0ZXIgcXVl
dWVpbmcgdGhlIG1lc3NhZ2UsIHRoZQotICAgIC8vIHNlc3Npb24gb3ducyB0aGUgaW5pdGlhbCBy
ZWZlcmVuY2UuCi0gICAgZ19vYmplY3RfcmVmKGQtPm1fbXNnKTsKLSAgICBzb3VwX3Nlc3Npb25f
cXVldWVfbWVzc2FnZShzZXNzaW9uLCBkLT5tX21zZywgZmluaXNoZWRDYWxsYmFjaywgaGFuZGxl
KTsKKyAgICBkLT5tX2NhbmNlbGxhYmxlID0gYWRvcHRQbGF0Zm9ybVJlZihnX2NhbmNlbGxhYmxl
X25ldygpKTsKKyAgICB3ZWJraXRfc291cF9yZXF1ZXN0X3NlbmRfYXN5bmMoZC0+bV9zb3VwUmVx
dWVzdC5nZXQoKSwgZC0+bV9jYW5jZWxsYWJsZS5nZXQoKSwgc2VuZFJlcXVlc3RDYWxsYmFjaywg
MCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBSZXNvdXJjZUhhbmRsZTo6c3RhcnQo
TmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgQVNTRVJUKCFkLT5tX21zZyk7Cisg
ICAgQVNTRVJUKCFkLT5tX3NvdXBNc2cpOwogCiAgICAgLy8gVGhlIGZyYW1lIGNvdWxkIGJlIG51
bGwgaWYgdGhlIFJlc291cmNlSGFuZGxlIGlzIG5vdCBhc3NvY2lhdGVkIHRvIGFueQogICAgIC8v
IEZyYW1lLCBlLmcuIGlmIHdlIGFyZSBkb3dubG9hZGluZyBhIGZpbGUuCkBAIC02MjAsMTAgKzcw
NCwxMCBAQCBib29sIFJlc291cmNlSGFuZGxlOjpzdGFydChOZXR3b3JraW5nQ29udGV4dCogY29u
dGV4dCkKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmNhbmNlbCgpCiB7CiAgICAgZC0+bV9jYW5jZWxs
ZWQgPSB0cnVlOwotICAgIGlmIChkLT5tX21zZykKLSAgICAgICAgc291cF9zZXNzaW9uX2NhbmNl
bF9tZXNzYWdlKGRlZmF1bHRTZXNzaW9uKCksIGQtPm1fbXNnLCBTT1VQX1NUQVRVU19DQU5DRUxM
RUQpOworICAgIGlmIChkLT5tX3NvdXBNc2cpCisgICAgICAgIHNvdXBfc2Vzc2lvbl9jYW5jZWxf
bWVzc2FnZShkZWZhdWx0U2Vzc2lvbigpLCBkLT5tX3NvdXBNc2cuZ2V0KCksIFNPVVBfU1RBVFVT
X0NBTkNFTExFRCk7CiAgICAgZWxzZSBpZiAoZC0+bV9jYW5jZWxsYWJsZSkKLSAgICAgICAgZ19j
YW5jZWxsYWJsZV9jYW5jZWwoZC0+bV9jYW5jZWxsYWJsZSk7CisgICAgICAgIGdfY2FuY2VsbGFi
bGVfY2FuY2VsKGQtPm1fY2FuY2VsbGFibGUuZ2V0KCkpOwogfQogCiBQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gUmVzb3VyY2VIYW5kbGU6OmJ1ZmZlcmVkRGF0YSgpCkBAIC02NjcsMzggKzc1MSw2
IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29y
a2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0CiAgICAgc3luY0xvYWRlci5ydW4oKTsKIH0KIAot
Ly8gR0lPLWJhc2VkIGxvYWRlcgotCi1zdGF0aWMgdm9pZCBjbGVhbnVwR2lvT3BlcmF0aW9uKFJl
c291cmNlSGFuZGxlKiBoYW5kbGUsIGJvb2wgaXNEZXN0cm95aW5nID0gZmFsc2UpCi17Ci0gICAg
UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKLQotICAg
IGlmIChkLT5tX2dmaWxlKSB7Ci0gICAgICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQt
Pm1fZ2ZpbGUpLCAid2Via2l0LXJlc291cmNlIiwgMCk7Ci0gICAgICAgIGdfb2JqZWN0X3VucmVm
KGQtPm1fZ2ZpbGUpOwotICAgICAgICBkLT5tX2dmaWxlID0gMDsKLSAgICB9Ci0KLSAgICBpZiAo
ZC0+bV9jYW5jZWxsYWJsZSkgewotICAgICAgICBnX29iamVjdF91bnJlZihkLT5tX2NhbmNlbGxh
YmxlKTsKLSAgICAgICAgZC0+bV9jYW5jZWxsYWJsZSA9IDA7Ci0gICAgfQotCi0gICAgaWYgKGQt
Pm1faW5wdXRTdHJlYW0pIHsKLSAgICAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+
bV9pbnB1dFN0cmVhbSksICJ3ZWJraXQtcmVzb3VyY2UiLCAwKTsKLSAgICAgICAgZ19vYmplY3Rf
dW5yZWYoZC0+bV9pbnB1dFN0cmVhbSk7Ci0gICAgICAgIGQtPm1faW5wdXRTdHJlYW0gPSAwOwot
ICAgIH0KLQotICAgIGlmIChkLT5tX2J1ZmZlcikgewotICAgICAgICBnX2ZyZWUoZC0+bV9idWZm
ZXIpOwotICAgICAgICBkLT5tX2J1ZmZlciA9IDA7Ci0gICAgfQotCi0gICAgaWYgKCFpc0Rlc3Ry
b3lpbmcpCi0gICAgICAgIGhhbmRsZS0+ZGVyZWYoKTsKLX0KLQogc3RhdGljIHZvaWQgY2xvc2VD
YWxsYmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzLCBncG9pbnRlcikKIHsK
ICAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9IHN0YXRpY19jYXN0PFJlc291cmNl
SGFuZGxlKj4oZ19vYmplY3RfZ2V0X2RhdGEoc291cmNlLCAid2Via2l0LXJlc291cmNlIikpOwpA
QCAtNzA4LDggKzc2MCw4IEBAIHN0YXRpYyB2b2lkIGNsb3NlQ2FsbGJhY2soR09iamVjdCogc291
cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIpCiAgICAgUmVzb3VyY2VIYW5kbGVJbnRl
cm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKICAgICBSZXNvdXJjZUhhbmRsZUNsaWVu
dCogY2xpZW50ID0gaGFuZGxlLT5jbGllbnQoKTsKIAotICAgIGdfaW5wdXRfc3RyZWFtX2Nsb3Nl
X2ZpbmlzaChkLT5tX2lucHV0U3RyZWFtLCByZXMsIDApOwotICAgIGNsZWFudXBHaW9PcGVyYXRp
b24oaGFuZGxlLmdldCgpKTsKKyAgICBnX2lucHV0X3N0cmVhbV9jbG9zZV9maW5pc2goZC0+bV9p
bnB1dFN0cmVhbS5nZXQoKSwgcmVzLCAwKTsKKyAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRp
b24oaGFuZGxlLmdldCgpKTsKIAogICAgIC8vIFRoZSBsb2FkIG1heSBoYXZlIGJlZW4gY2FuY2Vs
bGVkLCB0aGUgY2xpZW50IG1heSBoYXZlIGJlZW4KICAgICAvLyBkZXN0cm95ZWQgYWxyZWFkeS4g
SW4gc3VjaCBjYXNlcyBjYWxsaW5nIGRpZEZpbmlzaExvYWRpbmcgaXMgYQpAQCAtNzIwLDIxMCAr
NzcyLDkzIEBAIHN0YXRpYyB2b2lkIGNsb3NlQ2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5
bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIpCiAgICAgY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKGhh
bmRsZS5nZXQoKSwgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJlYWRDYWxsYmFjayhHT2JqZWN0KiBz
b3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzLCBncG9pbnRlcikKK3N0YXRpYyB2b2lkIHJlYWRDYWxs
YmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzLCBncG9pbnRlciBkYXRhKQog
ewogICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3Vy
Y2VIYW5kbGUqPihnX29iamVjdF9nZXRfZGF0YShzb3VyY2UsICJ3ZWJraXQtcmVzb3VyY2UiKSk7
CiAgICAgaWYgKCFoYW5kbGUpCiAgICAgICAgIHJldHVybjsKIAorICAgIGJvb2wgY29udmVydFRv
VVRGMTYgPSBzdGF0aWNfY2FzdDxib29sPihkYXRhKTsKICAgICBSZXNvdXJjZUhhbmRsZUludGVy
bmFsKiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOwogICAgIFJlc291cmNlSGFuZGxlQ2xpZW50
KiBjbGllbnQgPSBoYW5kbGUtPmNsaWVudCgpOwogCiAgICAgaWYgKGQtPm1fY2FuY2VsbGVkIHx8
ICFjbGllbnQpIHsKLSAgICAgICAgY2xlYW51cEdpb09wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwor
ICAgICAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIEdFcnJvciogZXJyb3IgPSAwOworICAgIEdPd25QdHI8
R0Vycm9yPiBlcnJvcjsKIAotICAgIGdzc2l6ZSBieXRlc1JlYWQgPSBnX2lucHV0X3N0cmVhbV9y
ZWFkX2ZpbmlzaChkLT5tX2lucHV0U3RyZWFtLCByZXMsICZlcnJvcik7CisgICAgZ3NzaXplIGJ5
dGVzUmVhZCA9IGdfaW5wdXRfc3RyZWFtX3JlYWRfZmluaXNoKGQtPm1faW5wdXRTdHJlYW0uZ2V0
KCksIHJlcywgJmVycm9yLm91dFB0cigpKTsKICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgY2hh
ciogdXJpID0gZ19maWxlX2dldF91cmkoZC0+bV9nZmlsZSk7Ci0gICAgICAgIFJlc291cmNlRXJy
b3IgcmVzb3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0cmluZyhHX0lPX0VSUk9SKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLT5jb2RlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdXJpLAorICAgICAgICBTb3VwVVJJKiB1cmkgPSB3ZWJraXRf
c291cF9yZXF1ZXN0X2dldF91cmkoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSk7CisgICAgICAgIEdP
d25QdHI8Y2hhcj4gdXJpU3RyKHNvdXBfdXJpX3RvX3N0cmluZyh1cmksIGZhbHNlKSk7CisgICAg
ICAgIFJlc291cmNlRXJyb3IgcmVzb3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0cmluZyhHX0lPX0VS
Uk9SKSwgZXJyb3ItPmNvZGUsIHVyaVN0ci5nZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVycm9yID8gU3RyaW5nOjpmcm9tVVRGOChlcnJvci0+bWVzc2FnZSkgOiBT
dHJpbmcoKSk7Ci0gICAgICAgIGdfZnJlZSh1cmkpOwotICAgICAgICBnX2Vycm9yX2ZyZWUoZXJy
b3IpOwotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAg
IGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwogICAgICAgICBjbGll
bnQtPmRpZEZhaWwoaGFuZGxlLmdldCgpLCByZXNvdXJjZUVycm9yKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIGlmICghYnl0ZXNSZWFkKSB7Ci0gICAgICAgIGdfaW5wdXRfc3RyZWFt
X2Nsb3NlX2FzeW5jKGQtPm1faW5wdXRTdHJlYW0sIEdfUFJJT1JJVFlfREVGQVVMVCwKKyAgICAg
ICAgZ19pbnB1dF9zdHJlYW1fY2xvc2VfYXN5bmMoZC0+bV9pbnB1dFN0cmVhbS5nZXQoKSwgR19Q
UklPUklUWV9ERUZBVUxULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBj
bG9zZUNhbGxiYWNrLCAwKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGQtPm1fdG90
YWwgKz0gYnl0ZXNSZWFkOwotICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURhdGEoaGFuZGxlLmdldCgp
LCBkLT5tX2J1ZmZlciwgYnl0ZXNSZWFkLCBkLT5tX3RvdGFsKTsKLQotICAgIC8vIGRpZFJlY2Vp
dmVEYXRhIG1heSBjYW5jZWwgdGhlIGxvYWQsIHdoaWNoIG1heSByZWxlYXNlIHRoZSBsYXN0IHJl
ZmVyZW5jZS4KLSAgICBpZiAoZC0+bV9jYW5jZWxsZWQpIHsKLSAgICAgICAgY2xlYW51cEdpb09w
ZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwotICAgICAgICByZXR1cm47CisgICAgaWYgKEdfTElLRUxZ
KCFjb252ZXJ0VG9VVEYxNikpCisgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURhdGEoaGFuZGxl
LmdldCgpLCBkLT5tX2J1ZmZlciwgYnl0ZXNSZWFkLCBkLT5tX3RvdGFsKTsKKyAgICBlbHNlIHsK
KyAgICAgICAgLy8gV2UgaGF2ZSB0byBjb252ZXJ0IGl0IHRvIFVURi0xNiBkdWUgdG8gbGltaXRh
dGlvbnMgaW4gS1VSTAorICAgICAgICBTdHJpbmcgZGF0YSA9IFN0cmluZzo6ZnJvbVVURjgoZC0+
bV9idWZmZXIsIGJ5dGVzUmVhZCk7CisgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURhdGEoaGFu
ZGxlLmdldCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihkYXRhLmNoYXJhY3RlcnMo
KSksIGRhdGEubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpLCAwKTsKICAgICB9CiAKLSAgICBnX2lu
cHV0X3N0cmVhbV9yZWFkX2FzeW5jKGQtPm1faW5wdXRTdHJlYW0sIGQtPm1fYnVmZmVyLCBkLT5t
X2J1ZmZlclNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BSSU9SSVRZX0RF
RkFVTFQsIGQtPm1fY2FuY2VsbGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZWFkQ2FsbGJhY2ssIDApOwotfQotCi1zdGF0aWMgdm9pZCBvcGVuQ2FsbGJhY2soR09iamVjdCog
c291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIpCi17Ci0gICAgUmVmUHRyPFJlc291
cmNlSGFuZGxlPiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGdfb2JqZWN0
X2dldF9kYXRhKHNvdXJjZSwgIndlYmtpdC1yZXNvdXJjZSIpKTsKLSAgICBpZiAoIWhhbmRsZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRs
ZS0+Z2V0SW50ZXJuYWwoKTsKLSAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0gaGFu
ZGxlLT5jbGllbnQoKTsKLQorICAgIC8vIGRpZFJlY2VpdmVEYXRhIG1heSBjYW5jZWwgdGhlIGxv
YWQsIHdoaWNoIG1heSByZWxlYXNlIHRoZSBsYXN0IHJlZmVyZW5jZS4KICAgICBpZiAoZC0+bV9j
YW5jZWxsZWQgfHwgIWNsaWVudCkgewotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRs
ZS5nZXQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBHRXJyb3IqIGVycm9yID0g
MDsKLSAgICBHRmlsZUlucHV0U3RyZWFtKiBpbiA9IGdfZmlsZV9yZWFkX2ZpbmlzaChHX0ZJTEUo
c291cmNlKSwgcmVzLCAmZXJyb3IpOwotICAgIGlmIChlcnJvcikgewotICAgICAgICBjaGFyKiB1
cmkgPSBnX2ZpbGVfZ2V0X3VyaShkLT5tX2dmaWxlKTsKLSAgICAgICAgUmVzb3VyY2VFcnJvciBy
ZXNvdXJjZUVycm9yKGdfcXVhcmtfdG9fc3RyaW5nKEdfSU9fRVJST1IpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3ItPmNvZGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1cmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlcnJvciA/IFN0cmluZzo6ZnJvbVVURjgoZXJyb3ItPm1lc3NhZ2UpIDogU3RyaW5nKCkpOwot
ICAgICAgICBnX2ZyZWUodXJpKTsKLSAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKLSAgICAg
ICAgY2xlYW51cEdpb09wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwotICAgICAgICBjbGllbnQtPmRp
ZEZhaWwoaGFuZGxlLmdldCgpLCByZXNvdXJjZUVycm9yKTsKKyAgICAgICAgY2xlYW51cFNvdXBS
ZXF1ZXN0T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBkLT5tX2lucHV0U3RyZWFtID0gR19JTlBVVF9TVFJFQU0oaW4pOwotICAgIGQtPm1fYnVm
ZmVyU2l6ZSA9IDgxOTI7Ci0gICAgZC0+bV9idWZmZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oZ19t
YWxsb2MoZC0+bV9idWZmZXJTaXplKSk7Ci0gICAgZC0+bV90b3RhbCA9IDA7Ci0KLSAgICBnX29i
amVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5tX2lucHV0U3RyZWFtKSwgIndlYmtpdC1yZXNvdXJj
ZSIsIGhhbmRsZS5nZXQoKSk7Ci0gICAgZ19pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyhkLT5tX2lu
cHV0U3RyZWFtLCBkLT5tX2J1ZmZlciwgZC0+bV9idWZmZXJTaXplLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR19QUklPUklUWV9ERUZBVUxULCBkLT5tX2NhbmNlbGxhYmxlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZENhbGxiYWNrLCAwKTsKKyAgICBnX2lucHV0
X3N0cmVhbV9yZWFkX2FzeW5jKGQtPm1faW5wdXRTdHJlYW0uZ2V0KCksIGQtPm1fYnVmZmVyLCBS
RUFEX0JVRkZFUl9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QUklPUklU
WV9ERUZBVUxULCBkLT5tX2NhbmNlbGxhYmxlLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVhZENhbGxiYWNrLCBkYXRhKTsKIH0KIAotc3RhdGljIHZvaWQgcXVlcnlJbmZv
Q2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIpCi17
Ci0gICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxSZXNvdXJj
ZUhhbmRsZSo+KGdfb2JqZWN0X2dldF9kYXRhKHNvdXJjZSwgIndlYmtpdC1yZXNvdXJjZSIpKTsK
LSAgICBpZiAoIWhhbmRsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVzb3VyY2VIYW5kbGVJ
bnRlcm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKLSAgICBSZXNvdXJjZUhhbmRsZUNs
aWVudCogY2xpZW50ID0gaGFuZGxlLT5jbGllbnQoKTsKLQotICAgIGlmIChkLT5tX2NhbmNlbGxl
ZCkgewotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOwotCi0gICAg
Y2hhciogdXJpID0gZ19maWxlX2dldF91cmkoZC0+bV9nZmlsZSk7Ci0gICAgcmVzcG9uc2Uuc2V0
VVJMKEtVUkwoS1VSTCgpLCB1cmkpKTsKLSAgICBnX2ZyZWUodXJpKTsKLQotICAgIEdFcnJvciog
ZXJyb3IgPSAwOwotICAgIEdGaWxlSW5mbyogaW5mbyA9IGdfZmlsZV9xdWVyeV9pbmZvX2Zpbmlz
aChkLT5tX2dmaWxlLCByZXMsICZlcnJvcik7Ci0KLSAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAg
Ly8gRklYTUU6IHRvIGJlIGFibGUgdG8gaGFuZGxlIGZ0cCBVUklzIHByb3Blcmx5LCB3ZSBtdXN0
Ci0gICAgICAgIC8vIGNoZWNrIGlmIHRoZSBlcnJvciBpcyBHX0lPX0VSUk9SX05PVF9NT1VOVEVE
LCBhbmQgaWYgc28sCi0gICAgICAgIC8vIGNhbGwgZ19maWxlX21vdW50X2VuY2xvc2luZ192b2x1
bWUoKSB0byBtb3VudCB0aGUgZnRwCi0gICAgICAgIC8vIHNlcnZlciAoYW5kIHRoZW4ga2VlcCB0
cmFjayBvZiB0aGUgZmFjdCB0aGF0IHdlIG1vdW50ZWQgaXQsCi0gICAgICAgIC8vIGFuZCBzZXQg
YSB0aW1lb3V0IHRvIHVubW91bnQgaXQgbGF0ZXIgYWZ0ZXIgaXQncyBiZWVuIGlkbGUKLSAgICAg
ICAgLy8gZm9yIGEgd2hpbGUpLgotICAgICAgICBjaGFyKiB1cmkgPSBnX2ZpbGVfZ2V0X3VyaShk
LT5tX2dmaWxlKTsKLSAgICAgICAgUmVzb3VyY2VFcnJvciByZXNvdXJjZUVycm9yKGdfcXVhcmtf
dG9fc3RyaW5nKEdfSU9fRVJST1IpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXJyb3ItPmNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA/IFN0cmluZzo6ZnJv
bVVURjgoZXJyb3ItPm1lc3NhZ2UpIDogU3RyaW5nKCkpOwotICAgICAgICBnX2ZyZWUodXJpKTsK
LSAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKLSAgICAgICAgY2xlYW51cEdpb09wZXJhdGlv
bihoYW5kbGUuZ2V0KCkpOwotICAgICAgICBjbGllbnQtPmRpZEZhaWwoaGFuZGxlLmdldCgpLCBy
ZXNvdXJjZUVycm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChnX2ZpbGVf
aW5mb19nZXRfZmlsZV90eXBlKGluZm8pICE9IEdfRklMRV9UWVBFX1JFR1VMQVIpIHsKLSAgICAg
ICAgLy8gRklYTUU6IHdoYXQgaWYgdGhlIFVSSSBwb2ludHMgdG8gYSBkaXJlY3Rvcnk/IFNob3Vs
ZCB3ZQotICAgICAgICAvLyBnZW5lcmF0ZSBhIGxpc3Rpbmc/IEhvdz8gV2hhdCBkbyBvdGhlciBi
YWNrZW5kcyBkbyBoZXJlPwotICAgICAgICBjaGFyKiB1cmkgPSBnX2ZpbGVfZ2V0X3VyaShkLT5t
X2dmaWxlKTsKLSAgICAgICAgUmVzb3VyY2VFcnJvciByZXNvdXJjZUVycm9yKGdfcXVhcmtfdG9f
c3RyaW5nKEdfSU9fRVJST1IpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R19JT19FUlJPUl9GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
cmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcoKSk7Ci0gICAg
ICAgIGdfZnJlZSh1cmkpOwotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQo
KSk7Ci0gICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIHJlc291cmNlRXJyb3Ip
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQWNjb3JkaW5nIHRvIGh0dHA6Ly9s
aWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9naW8vc3RhYmxlL2dpby1HQ29udGVudFR5cGUuaHRtbAot
ICAgIC8vIEdDb250ZW50VHlwZSBvbiBVbml4IGlzIHRoZSBtaW1lIHR5cGUsIGJ1dCBub3Qgb24g
V2luMzIuCi0gICAgR093blB0cjxnY2hhcj4gbWltZVR5cGUoZ19jb250ZW50X3R5cGVfZ2V0X21p
bWVfdHlwZShnX2ZpbGVfaW5mb19nZXRfY29udGVudF90eXBlKGluZm8pKSk7Ci0gICAgcmVzcG9u
c2Uuc2V0TWltZVR5cGUobWltZVR5cGUuZ2V0KCkpOwotICAgIHJlc3BvbnNlLnNldEV4cGVjdGVk
Q29udGVudExlbmd0aChnX2ZpbGVfaW5mb19nZXRfc2l6ZShpbmZvKSk7Ci0KLSAgICBHVGltZVZh
bCB0djsKLSAgICBnX2ZpbGVfaW5mb19nZXRfbW9kaWZpY2F0aW9uX3RpbWUoaW5mbywgJnR2KTsK
LSAgICByZXNwb25zZS5zZXRMYXN0TW9kaWZpZWREYXRlKHR2LnR2X3NlYyk7Ci0KLSAgICBjbGll
bnQtPmRpZFJlY2VpdmVSZXNwb25zZShoYW5kbGUuZ2V0KCksIHJlc3BvbnNlKTsKLQotICAgIGlm
IChkLT5tX2NhbmNlbGxlZCkgewotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5n
ZXQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBnX2ZpbGVfcmVhZF9hc3luYyhk
LT5tX2dmaWxlLCBHX1BSSU9SSVRZX0RFRkFVTFQsIGQtPm1fY2FuY2VsbGFibGUsCi0gICAgICAg
ICAgICAgICAgICAgICAgb3BlbkNhbGxiYWNrLCAwKTsKLX0KIHN0YXRpYyBib29sIHN0YXJ0R2lv
KFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIEtVUkwgdXJsKQogewogICAgIEFTU0VSVChoYW5kbGUp
OwogCi0gICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwo
KTsKLQogICAgIGlmIChoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmh0dHBNZXRob2QoKSAhPSAiR0VU
IiAmJiBoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmh0dHBNZXRob2QoKSAhPSAiUE9TVCIpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAorICAgIFNvdXBTZXNzaW9uKiBzZXNzaW9uID0gaGFuZGxlLT5k
ZWZhdWx0U2Vzc2lvbigpOworICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUt
PmdldEludGVybmFsKCk7CisKICAgICAvLyBHSU8gZG9lc24ndCBrbm93IGhvdyB0byBoYW5kbGUg
cmVmcyBhbmQgcXVlcmllcywgc28gcmVtb3ZlIHRoZW0KICAgICAvLyBUT0RPOiB1c2UgS1VSTC5m
aWxlU3lzdGVtUGF0aCBhZnRlciBLVVJMR3RrIGFuZCBGaWxlU3lzdGVtR3RrIGFyZQogICAgIC8v
IHVzaW5nIEdJTyBpbnRlcm5hbGx5LCBhbmQgcHJvdmlkaW5nIFVSSXMgaW5zdGVhZCBvZiBmaWxl
IHBhdGhzCiAgICAgdXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwogICAgIHVybC5zZXRR
dWVyeShTdHJpbmcoKSk7CiAgICAgdXJsLnJlbW92ZVBvcnQoKTsKKyAgICBDU3RyaW5nIHVybFN0
ciA9IHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpOwogCi0jaWYgIU9TKFdJTkRPV1MpCi0gICAg
Ly8gd2UgYXZvaWQgdGhlIGVzY2FwaW5nIGZvciBsb2NhbCBmaWxlcywgYmVjYXVzZQotICAgIC8v
IGdfZmlsZW5hbWVfZnJvbV91cmkgKHVzZWQgaW50ZXJuYWxseSBieSBHRmlsZSkgaGFzIHByb2Js
ZW1zCi0gICAgLy8gZGVjb2Rpbmcgc3RyaW5ncyB3aXRoIGFyYml0cmFyeSBwZXJjZW50IHNpZ25z
Ci0gICAgaWYgKHVybC5pc0xvY2FsRmlsZSgpKQotICAgICAgICBkLT5tX2dmaWxlID0gZ19maWxl
X25ld19mb3JfcGF0aCh1cmwucHJldHR5VVJMKCkudXRmOCgpLmRhdGEoKSArIHNpemVvZigiZmls
ZTovLyIpIC0gMSk7Ci0gICAgZWxzZQotI2VuZGlmCi0gICAgICAgIGQtPm1fZ2ZpbGUgPSBnX2Zp
bGVfbmV3X2Zvcl91cmkodXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGdfb2JqZWN0
X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1fZ2ZpbGUpLCAid2Via2l0LXJlc291cmNlIiwgaGFuZGxl
KTsKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgZC0+bV9zb3VwUmVxdWVzdCA9IGFk
b3B0UGxhdGZvcm1SZWYod2Via2l0X3NvdXBfcmVxdWVzdGVyX3JlcXVlc3QoZC0+bV9yZXF1ZXN0
ZXIuZ2V0KCksIHVybFN0ci5kYXRhKCksIHNlc3Npb24sICZlcnJvci5vdXRQdHIoKSkpOworICAg
IGlmIChlcnJvcikgeworICAgICAgICBkLT5tX3NvdXBSZXF1ZXN0ID0gMDsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1f
c291cFJlcXVlc3QuZ2V0KCkpLCAid2Via2l0LXJlc291cmNlIiwgaGFuZGxlKTsKIAotICAgIC8v
IGJhbGFuY2VkIGJ5IGEgZGVyZWYoKSBpbiBjbGVhbnVwR2lvT3BlcmF0aW9uLCB3aGljaCBzaG91
bGQgYWx3YXlzIHJ1bgorICAgIC8vIGJhbGFuY2VkIGJ5IGEgZGVyZWYoKSBpbiBjbGVhbnVwU291
cFJlcXVlc3RPcGVyYXRpb24sIHdoaWNoIHNob3VsZCBhbHdheXMgcnVuCiAgICAgaGFuZGxlLT5y
ZWYoKTsKIAotICAgIGQtPm1fY2FuY2VsbGFibGUgPSBnX2NhbmNlbGxhYmxlX25ldygpOwotICAg
IGdfZmlsZV9xdWVyeV9pbmZvX2FzeW5jKGQtPm1fZ2ZpbGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9UWVBFICIsIgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfQ09OVEVOVF9UWVBFICIs
IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRf
U0laRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX0ZJTEVfUVVFUllfSU5GT19OT05F
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUFJJT1JJVFlfREVGQVVMVCwgZC0+bV9j
YW5jZWxsYWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeUluZm9DYWxsYmFj
aywgMCk7CisgICAgZC0+bV9jYW5jZWxsYWJsZSA9IGFkb3B0UGxhdGZvcm1SZWYoZ19jYW5jZWxs
YWJsZV9uZXcoKSk7CisgICAgd2Via2l0X3NvdXBfcmVxdWVzdF9zZW5kX2FzeW5jKGQtPm1fc291
cFJlcXVlc3QuZ2V0KCksIGQtPm1fY2FuY2VsbGFibGUuZ2V0KCksIHNlbmRSZXF1ZXN0Q2FsbGJh
Y2ssIDApOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0LmgKaW5kZXggYTFkOTE2Zi4uOTJkYWJhZCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0LmgK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0LmgKQEAg
LTY3LDggKzY3LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgdXBkYXRlRnJv
bVNvdXBNZXNzYWdlKHNvdXBNZXNzYWdlKTsKICAgICAgICAgfQogCisgICAgICAgIHZvaWQgdXBk
YXRlU291cE1lc3NhZ2UoU291cE1lc3NhZ2UqKSBjb25zdDsKICAgICAgICAgU291cE1lc3NhZ2Uq
IHRvU291cE1lc3NhZ2UoKSBjb25zdDsKLSAgICAgICAgdm9pZCB1cGRhdGVGcm9tU291cE1lc3Nh
Z2UoU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlKTsKKyAgICAgICAgdm9pZCB1cGRhdGVGcm9tU291
cE1lc3NhZ2UoU291cE1lc3NhZ2UqKTsKIAogICAgICAgICBTb3VwTWVzc2FnZUZsYWdzIHNvdXBN
ZXNzYWdlRmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX3NvdXBGbGFnczsgfQogICAgICAgICB2b2lk
IHNldFNvdXBNZXNzYWdlRmxhZ3MoU291cE1lc3NhZ2VGbGFncyBzb3VwRmxhZ3MpIHsgbV9zb3Vw
RmxhZ3MgPSBzb3VwRmxhZ3M7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHAKaW5kZXggNjJkZWIwMS4uMzgwZmM4NCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291
cC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0
U291cC5jcHAKQEAgLTMzLDYgKzMzLDI5IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAordm9pZCBSZXNvdXJjZVJlcXVlc3Q6OnVwZGF0ZVNvdXBNZXNzYWdl
KFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSkgY29uc3QKK3sKKyAgICBnX29iamVjdF9zZXQoc291
cE1lc3NhZ2UsIFNPVVBfTUVTU0FHRV9NRVRIT0QsIGh0dHBNZXRob2QoKS51dGY4KCkuZGF0YSgp
LCBOVUxMKTsKKworICAgIGNvbnN0IEhUVFBIZWFkZXJNYXAmIGhlYWRlcnMgPSBodHRwSGVhZGVy
RmllbGRzKCk7CisgICAgU291cE1lc3NhZ2VIZWFkZXJzKiBzb3VwSGVhZGVycyA9IHNvdXBNZXNz
YWdlLT5yZXF1ZXN0X2hlYWRlcnM7CisgICAgaWYgKCFoZWFkZXJzLmlzRW1wdHkoKSkgeworICAg
ICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJzLmVuZCgpOwor
ICAgICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVy
c19hcHBlbmQoc291cEhlYWRlcnMsIGl0LT5maXJzdC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBp
dC0+c2Vjb25kLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKworI2lmZGVmIEhBVkVfTElCU09VUF8y
XzI5XzkwCisgICAgU3RyaW5nIGZpcnN0UGFydHlTdHJpbmcgPSBmaXJzdFBhcnR5Rm9yQ29va2ll
cygpLnN0cmluZygpOworICAgIGlmICghZmlyc3RQYXJ0eVN0cmluZy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgR093blB0cjxTb3VwVVJJPiBmaXJzdFBhcnR5KHNvdXBfdXJpX25ldyhmaXJzdFBhcnR5
U3RyaW5nLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9maXJzdF9w
YXJ0eShzb3VwTWVzc2FnZSwgZmlyc3RQYXJ0eS5nZXQoKSk7CisgICAgfQorI2VuZGlmCisKKyAg
ICBzb3VwX21lc3NhZ2Vfc2V0X2ZsYWdzKHNvdXBNZXNzYWdlLCBtX3NvdXBGbGFncyk7Cit9CisK
IFNvdXBNZXNzYWdlKiBSZXNvdXJjZVJlcXVlc3Q6OnRvU291cE1lc3NhZ2UoKSBjb25zdAogewog
ICAgIFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSA9IHNvdXBfbWVzc2FnZV9uZXcoaHR0cE1ldGhv
ZCgpLnV0ZjgoKS5kYXRhKCksIHVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwpkaWZmIC0t
Z2l0IGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCBl
MGMzMmI4Li4xZDc5ZGQyIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9X
ZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEwLTEwLTAxICBTZXJnaW8g
VmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIEFkZCBIVFRQIGNhY2hpbmcgc3VwcG9y
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQyNjEK
KworICAgICAgICBSZXNvdXJjZUhhbmRsZSdzIG1fbXNnIHJlbmFtZWQgdG8gbV9zb3VwTXNnIGFu
ZCBpdCdzIGFsc28gbm93IGEgUGxhdGZvcm1SZWZQdHIKKworICAgICAgICAqIHdlYmtpdC93ZWJr
aXRkb3dubG9hZC5jcHA6CisgICAgICAgICh3ZWJraXRfZG93bmxvYWRfbmV3X3dpdGhfaGFuZGxl
KToKKyAgICAgICAgKHdlYmtpdF9kb3dubG9hZF9zdGFydCk6CisKIDIwMTAtMDktMjYgIEplbm4g
QnJhaXRod2FpdGUgIDxqZW5uYkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
QWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2Fk
LmNwcCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmNwcAppbmRleCAxNDcyY2I1
Li5jODRlOTVhIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkb3dubG9hZC5j
cHAKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuY3BwCkBAIC00MTksOCAr
NDE5LDggQEAgV2ViS2l0RG93bmxvYWQqIHdlYmtpdF9kb3dubG9hZF9uZXdfd2l0aF9oYW5kbGUo
V2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QsIFcKICAgICBnX3JldHVybl92YWxfaWZfZmFp
bChyZXF1ZXN0LCBOVUxMKTsKIAogICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5k
bGUtPmdldEludGVybmFsKCk7Ci0gICAgaWYgKGQtPm1fbXNnKQotICAgICAgICBzb3VwX3Nlc3Np
b25fcGF1c2VfbWVzc2FnZSh3ZWJraXRfZ2V0X2RlZmF1bHRfc2Vzc2lvbigpLCBkLT5tX21zZyk7
CisgICAgaWYgKGQtPm1fc291cE1zZykKKyAgICAgICAgc291cF9zZXNzaW9uX3BhdXNlX21lc3Nh
Z2Uod2Via2l0X2dldF9kZWZhdWx0X3Nlc3Npb24oKSwgZC0+bV9zb3VwTXNnLmdldCgpKTsKIAog
ICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9hZCA9IFdFQktJVF9ET1dOTE9BRChnX29iamVjdF9u
ZXcoV0VCS0lUX1RZUEVfRE9XTkxPQUQsICJuZXR3b3JrLXJlcXVlc3QiLCByZXF1ZXN0LCBOVUxM
KSk7CiAgICAgV2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2ID0gZG93bmxvYWQtPnByaXY7CkBA
IC00OTIsOCArNDkyLDggQEAgdm9pZCB3ZWJraXRfZG93bmxvYWRfc3RhcnQoV2ViS2l0RG93bmxv
YWQqIGRvd25sb2FkKQogICAgICAgICBwcml2LT5yZXNvdXJjZUhhbmRsZS0+c2V0Q2xpZW50KHBy
aXYtPmRvd25sb2FkQ2xpZW50KTsKIAogICAgICAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBk
ID0gcHJpdi0+cmVzb3VyY2VIYW5kbGUtPmdldEludGVybmFsKCk7Ci0gICAgICAgIGlmIChkLT5t
X21zZykKLSAgICAgICAgICAgIHNvdXBfc2Vzc2lvbl91bnBhdXNlX21lc3NhZ2Uod2Via2l0X2dl
dF9kZWZhdWx0X3Nlc3Npb24oKSwgZC0+bV9tc2cpOworICAgICAgICBpZiAoZC0+bV9zb3VwTXNn
KQorICAgICAgICAgICAgc291cF9zZXNzaW9uX3VucGF1c2VfbWVzc2FnZSh3ZWJraXRfZ2V0X2Rl
ZmF1bHRfc2Vzc2lvbigpLCBkLT5tX3NvdXBNc2cuZ2V0KCkpOwogICAgIH0KIAogICAgIHByaXYt
PnRpbWVyID0gZ190aW1lcl9uZXcoKTsKLS0gCjEuNy4xCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69438</attachid>
            <date>2010-10-01 02:56:38 -0700</date>
            <delta_ts>2010-10-04 03:35:40 -0700</delta_ts>
            <desc>WebKitGtk+ to use the new API from the imported SoupURILoader code</desc>
            <filename>0002-WebKitGtk-to-use-the-new-API-from-the-imported-SoupU.patch</filename>
            <type>text/plain</type>
            <size>39707</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">RnJvbSAyZjVkOWNjNjQxNTA1N2U4ZjM3ZjkyYTBlY2NmODBlYWY5NTBiNDY1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTZXJnaW8gVmlsbGFyIFNlbmluIDxzdmlsbGFyQGlnYWxpYS5j
b20+CkRhdGU6IFdlZCwgMjIgU2VwIDIwMTAgMTA6MTg6MDYgKzAyMDAKU3ViamVjdDogW1BBVENI
IDIvMl0gV2ViS2l0R3RrKyB0byB1c2UgdGhlIG5ldyBBUEkgZnJvbSB0aGUgaW1wb3J0ZWQgU291
cFVSSUxvYWRlciBjb2RlCgotLS0KIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhh
bmRsZUludGVybmFsLmggIHwgICAyMyArLQogLi4uL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNv
dXJjZUhhbmRsZVNvdXAuY3BwICAgfCAgNTY1ICsrKysrKysrKy0tLS0tLS0tLS0tCiBXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3QuaCAgICB8ICAgIDMgKy0KIC4u
Li9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHAgIHwgICAyMyAr
CiBXZWJLaXQvZ3RrL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
MTMgKwogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuY3BwICAgICAgICAgICAgICAg
fCAgICA4ICstCiA2IGZpbGVzIGNoYW5nZWQsIDMwNSBpbnNlcnRpb25zKCspLCAzMzAgZGVsZXRp
b25zKC0pCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFu
ZGxlSW50ZXJuYWwuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUlu
dGVybmFsLmgKaW5kZXggOTZmYmYwMC4uMTU0MmZmMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCkBAIC00Niw2ICs0Niw4IEBACiAj
ZW5kaWYKIAogI2lmIFVTRShTT1VQKQorI2luY2x1ZGUgInNvdXAtcmVxdWVzdGVyLmgiCisjaW5j
bHVkZSA8R1JlZlB0ci5oPgogI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgogY2xhc3MgRnJhbWU7
CiAjZW5kaWYKQEAgLTEwOCwxNSArMTEwLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgICAgICwgbV9mb3JtRGF0YVN0cmVhbShsb2FkZXIpCiAjZW5kaWYKICNpZiBVU0UoU09VUCkK
LSAgICAgICAgICAgICwgbV9tc2coMCkKICAgICAgICAgICAgICwgbV9jYW5jZWxsZWQoZmFsc2Up
Ci0gICAgICAgICAgICAsIG1fZ2ZpbGUoMCkKLSAgICAgICAgICAgICwgbV9pbnB1dFN0cmVhbSgw
KQotICAgICAgICAgICAgLCBtX2NhbmNlbGxhYmxlKDApCiAgICAgICAgICAgICAsIG1fYnVmZmVy
KDApCi0gICAgICAgICAgICAsIG1fYnVmZmVyU2l6ZSgwKQogICAgICAgICAgICAgLCBtX3RvdGFs
KDApCiAgICAgICAgICAgICAsIG1faWRsZUhhbmRsZXIoMCkKKyAgICAgICAgICAgICwgbV9nb3RD
aHVua0hhbmRsZXIoMCkKICNlbmRpZgogI2lmIFBMQVRGT1JNKFFUKQogICAgICAgICAgICAgLCBt
X2pvYigwKQpAQCAtMTMzLDYgKzEzMSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
ICAgIG1fdXNlciA9IHVybC51c2VyKCk7CiAgICAgICAgICAgICBtX3Bhc3MgPSB1cmwucGFzcygp
OwogICAgICAgICAgICAgbV9maXJzdFJlcXVlc3QucmVtb3ZlQ3JlZGVudGlhbHMoKTsKKyNpZiBV
U0UoU09VUCkKKyAgICAgICAgICAgIG1fcmVxdWVzdGVyID0gYWRvcHRQbGF0Zm9ybVJlZih3ZWJr
aXRfc291cF9yZXF1ZXN0ZXJfbmV3KCkpOworI2VuZGlmCiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIH5SZXNvdXJjZUhhbmRsZUludGVybmFsKCk7CkBAIC0xODUsMTYgKzE4NiwxOCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFZlY3RvcjxjaGFyPiBtX3Bvc3RCeXRlczsKICNl
bmRpZgogI2lmIFVTRShTT1VQKQotICAgICAgICBTb3VwTWVzc2FnZSogbV9tc2c7CisgICAgICAg
IFBsYXRmb3JtUmVmUHRyPFNvdXBNZXNzYWdlPiBtX3NvdXBNc2c7CiAgICAgICAgIFJlc291cmNl
UmVzcG9uc2UgbV9yZXNwb25zZTsKICAgICAgICAgYm9vbCBtX2NhbmNlbGxlZDsKLSAgICAgICAg
R0ZpbGUqIG1fZ2ZpbGU7Ci0gICAgICAgIEdJbnB1dFN0cmVhbSogbV9pbnB1dFN0cmVhbTsKLSAg
ICAgICAgR0NhbmNlbGxhYmxlKiBtX2NhbmNlbGxhYmxlOworICAgICAgICBQbGF0Zm9ybVJlZlB0
cjxXZWJLaXRTb3VwUmVxdWVzdD4gbV9zb3VwUmVxdWVzdDsKKyAgICAgICAgUGxhdGZvcm1SZWZQ
dHI8V2ViS2l0U291cFJlcXVlc3Rlcj4gbV9yZXF1ZXN0ZXI7CisgICAgICAgIFBsYXRmb3JtUmVm
UHRyPEdJbnB1dFN0cmVhbT4gbV9pbnB1dFN0cmVhbTsKKyAgICAgICAgUGxhdGZvcm1SZWZQdHI8
R0NhbmNlbGxhYmxlPiBtX2NhbmNlbGxhYmxlOwogICAgICAgICBjaGFyKiBtX2J1ZmZlcjsKLSAg
ICAgICAgZ3NpemUgbV9idWZmZXJTaXplLCBtX3RvdGFsOworICAgICAgICBnc2l6ZSBtX3RvdGFs
OwogICAgICAgICBndWludCBtX2lkbGVIYW5kbGVyOwogICAgICAgICBSZWZQdHI8TmV0d29ya2lu
Z0NvbnRleHQ+IG1fY29udGV4dDsKKyAgICAgICAgZ3Vsb25nIG1fZ290Q2h1bmtIYW5kbGVyOwog
I2VuZGlmCiAjaWYgUExBVEZPUk0oUVQpCiAgICAgICAgIFFOZXR3b3JrUmVwbHlIYW5kbGVyKiBt
X2pvYjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNl
SGFuZGxlU291cC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhh
bmRsZVNvdXAuY3BwCmluZGV4IDBkODQzODguLjBjZTI5NmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcApAQCAtNDUsOCAr
NDUsOCBAQAogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlSW50ZXJuYWwuaCIKICNpbmNsdWRlICJS
ZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSAi
c291cC1yZXF1ZXN0LWh0dHAuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKLQogI2luY2x1
ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8ZmNudGwuaD4KICNpbmNsdWRlIDxnaW8vZ2lvLmg+CkBA
IC01OCw2ICs1OCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2RlZmluZSBSRUFEX0JV
RkZFUl9TSVpFIDgxOTIKKwogY2xhc3MgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyIDogcHVibGlj
IFJlc291cmNlSGFuZGxlQ2xpZW50LCBwdWJsaWMgTm9uY29weWFibGUgewogcHVibGljOgogICAg
IFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlcihSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25z
ZSAmLCBWZWN0b3I8Y2hhcj4mKTsKQEAgLTEyMCwxNiArMTIyLDE2IEBAIHZvaWQgV2ViQ29yZVN5
bmNocm9ub3VzTG9hZGVyOjpydW4oKQogICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9v
cCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNsZWFudXBHaW9PcGVyYXRpb24oUmVzb3VyY2VIYW5kbGUq
IGhhbmRsZSwgYm9vbCBpc0Rlc3Ryb3lpbmcpOwotc3RhdGljIGJvb2wgc3RhcnREYXRhKFJlc291
cmNlSGFuZGxlKiBoYW5kbGUsIFN0cmluZyB1cmxTdHJpbmcpOwotc3RhdGljIGJvb2wgc3RhcnRH
aW8oUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgS1VSTCB1cmwpOworc3RhdGljIHZvaWQgY2xlYW51
cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKFJlc291cmNlSGFuZGxlKiwgYm9vbCBpc0Rlc3Ryb3lpbmcp
Oworc3RhdGljIHZvaWQgc2VuZFJlcXVlc3RDYWxsYmFjayhHT2JqZWN0KiwgR0FzeW5jUmVzdWx0
KiwgZ3BvaW50ZXIpOworc3RhdGljIHZvaWQgcmVhZENhbGxiYWNrKEdPYmplY3QqLCBHQXN5bmNS
ZXN1bHQqLCBncG9pbnRlcik7CitzdGF0aWMgdm9pZCBjbG9zZUNhbGxiYWNrKEdPYmplY3QqLCBH
QXN5bmNSZXN1bHQqLCBncG9pbnRlcik7CitzdGF0aWMgYm9vbCBzdGFydEdpbyhSZXNvdXJjZUhh
bmRsZSosIEtVUkwpOwogCiBSZXNvdXJjZUhhbmRsZUludGVybmFsOjp+UmVzb3VyY2VIYW5kbGVJ
bnRlcm5hbCgpCiB7Ci0gICAgaWYgKG1fbXNnKSB7Ci0gICAgICAgIGdfb2JqZWN0X3VucmVmKG1f
bXNnKTsKLSAgICAgICAgbV9tc2cgPSAwOwotICAgIH0KKyAgICBpZiAobV9zb3VwUmVxdWVzdCkK
KyAgICAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QobV9zb3VwUmVxdWVzdC5nZXQoKSks
ICJ3ZWJraXQtcmVzb3VyY2UiLCAwKTsKIAogICAgIGlmIChtX2lkbGVIYW5kbGVyKSB7CiAgICAg
ICAgIGdfc291cmNlX3JlbW92ZShtX2lkbGVIYW5kbGVyKTsKQEAgLTEzOSwxMSArMTQxLDExIEBA
IFJlc291cmNlSGFuZGxlSW50ZXJuYWw6On5SZXNvdXJjZUhhbmRsZUludGVybmFsKCkKIAogUmVz
b3VyY2VIYW5kbGU6On5SZXNvdXJjZUhhbmRsZSgpCiB7Ci0gICAgaWYgKGQtPm1fbXNnKQotICAg
ICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQoZC0+bV9tc2csIEdfU0lH
TkFMX01BVENIX0RBVEEsCisgICAgaWYgKGQtPm1fc291cE1zZykKKyAgICAgICAgZ19zaWduYWxf
aGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKGQtPm1fc291cE1zZy5nZXQoKSwgR19TSUdOQUxf
TUFUQ0hfREFUQSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDAsIDAsIDAsIDAsIHRoaXMpOwogCi0gICAgY2xlYW51cEdpb09wZXJhdGlvbih0aGlzLCB0cnVl
KTsKKyAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24odGhpcywgdHJ1ZSk7CiB9CiAKIHZv
aWQgUmVzb3VyY2VIYW5kbGU6OnByZXBhcmVGb3JVUkwoY29uc3QgS1VSTCAmdXJsKQpAQCAtMTg1
LDkgKzE4Nyw4IEBAIHN0YXRpYyB2b2lkIHJlc3RhcnRlZENhbGxiYWNrKFNvdXBNZXNzYWdlKiBt
c2csIGdwb2ludGVyIGRhdGEpCiAgICAgaWYgKGQtPm1fY2FuY2VsbGVkKQogICAgICAgICByZXR1
cm47CiAKLSAgICBjaGFyKiB1cmkgPSBzb3VwX3VyaV90b19zdHJpbmcoc291cF9tZXNzYWdlX2dl
dF91cmkobXNnKSwgZmFsc2UpOwotICAgIFN0cmluZyBsb2NhdGlvbiA9IFN0cmluZyh1cmkpOwot
ICAgIGdfZnJlZSh1cmkpOworICAgIEdPd25QdHI8Y2hhcj4gdXJpKHNvdXBfdXJpX3RvX3N0cmlu
Zyhzb3VwX21lc3NhZ2VfZ2V0X3VyaShtc2cpLCBmYWxzZSkpOworICAgIFN0cmluZyBsb2NhdGlv
biA9IFN0cmluZzo6ZnJvbVVURjgodXJpLmdldCgpKTsKICAgICBLVVJMIG5ld1VSTCA9IEtVUkwo
aGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKSwgbG9jYXRpb24pOwogCiAgICAgUmVzb3VyY2VS
ZXF1ZXN0IHJlcXVlc3QgPSBoYW5kbGUtPmZpcnN0UmVxdWVzdCgpOwpAQCAtMjEzLDcgKzIxNCw3
IEBAIHN0YXRpYyB2b2lkIHJlc3RhcnRlZENhbGxiYWNrKFNvdXBNZXNzYWdlKiBtc2csIGdwb2lu
dGVyIGRhdGEpCiAgICAgU3RyaW5nIGZpcnN0UGFydHlTdHJpbmcgPSByZXF1ZXN0LmZpcnN0UGFy
dHlGb3JDb29raWVzKCkuc3RyaW5nKCk7CiAgICAgaWYgKCFmaXJzdFBhcnR5U3RyaW5nLmlzRW1w
dHkoKSkgewogICAgICAgICBHT3duUHRyPFNvdXBVUkk+IGZpcnN0UGFydHkoc291cF91cmlfbmV3
KGZpcnN0UGFydHlTdHJpbmcudXRmOCgpLmRhdGEoKSkpOwotICAgICAgICBzb3VwX21lc3NhZ2Vf
c2V0X2ZpcnN0X3BhcnR5KGQtPm1fbXNnLCBmaXJzdFBhcnR5LmdldCgpKTsKKyAgICAgICAgc291
cF9tZXNzYWdlX3NldF9maXJzdF9wYXJ0eShkLT5tX3NvdXBNc2cuZ2V0KCksIGZpcnN0UGFydHku
Z2V0KCkpOwogICAgIH0KICNlbmRpZgogfQpAQCAtMjkzLDUzICsyOTQsOSBAQCBzdGF0aWMgdm9p
ZCBnb3RDaHVua0NhbGxiYWNrKFNvdXBNZXNzYWdlKiBtc2csIFNvdXBCdWZmZXIqIGNodW5rLCBn
cG9pbnRlciBkYXRhKQogICAgICAgICByZXR1cm47CiAKICAgICBjbGllbnQtPmRpZFJlY2VpdmVE
YXRhKGhhbmRsZS5nZXQoKSwgY2h1bmstPmRhdGEsIGNodW5rLT5sZW5ndGgsIGZhbHNlKTsKLX0K
LQotLy8gQ2FsbGVkIGF0IHRoZSBlbmQgb2YgdGhlIG1lc3NhZ2UsIHdpdGggYWxsIHRoZSBuZWNl
c3NhcnkgYWJvdXQgdGhlIGxhc3QgaW5mb3JtYXRpb25zLgotLy8gRG9lc24ndCBnZXQgY2FsbGVk
IGZvciByZWRpcmVjdHMuCi1zdGF0aWMgdm9pZCBmaW5pc2hlZENhbGxiYWNrKFNvdXBTZXNzaW9u
ICpzZXNzaW9uLCBTb3VwTWVzc2FnZSogbXNnLCBncG9pbnRlciBkYXRhKQotewotICAgIFJlZlB0
cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gYWRvcHRSZWYoc3RhdGljX2Nhc3Q8UmVzb3VyY2VI
YW5kbGUqPihkYXRhKSk7Ci0gICAgLy8gVE9ETzogbWF5YmUgd2Ugc2hvdWxkIHJ1biB0aGlzIGNv
ZGUgZXZlbiBpZiB0aGVyZSdzIG5vIGNsaWVudD8KLSAgICBpZiAoIWhhbmRsZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50
ZXJuYWwoKTsKLQotICAgIFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQgPSBoYW5kbGUtPmNs
aWVudCgpOwotICAgIGlmICghY2xpZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZC0+
bV9jYW5jZWxsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChTT1VQX1NUQVRVU19JU19U
UkFOU1BPUlRfRVJST1IobXNnLT5zdGF0dXNfY29kZSkpIHsKLSAgICAgICAgY2hhciogdXJpID0g
c291cF91cmlfdG9fc3RyaW5nKHNvdXBfbWVzc2FnZV9nZXRfdXJpKG1zZyksIGZhbHNlKTsKLSAg
ICAgICAgUmVzb3VyY2VFcnJvciBlcnJvcihnX3F1YXJrX3RvX3N0cmluZyhTT1VQX0hUVFBfRVJS
T1IpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZy0+c3RhdHVzX2NvZGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdXJpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFN0cmluZzo6ZnJvbVVURjgobXNnLT5yZWFzb25fcGhyYXNlKSk7Ci0gICAgICAgIGdfZnJlZSh1
cmkpOwotICAgICAgICBjbGllbnQtPmRpZEZhaWwoaGFuZGxlLmdldCgpLCBlcnJvcik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobXNnLT5zdGF0dXNfY29kZSA9PSBTT1VQX1NU
QVRVU19VTkFVVEhPUklaRUQpIHsKLSAgICAgICAgZmlsbFJlc3BvbnNlRnJvbU1lc3NhZ2UobXNn
LCAmZC0+bV9yZXNwb25zZSk7Ci0gICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGhh
bmRsZS5nZXQoKSwgZC0+bV9yZXNwb25zZSk7Ci0KLSAgICAgICAgLy8gV2ViQ29yZSBtaWdodCBo
YXZlIGNhbmNlbGxlZCB0aGUgam9iIGluIHRoZSB3aGlsZQotICAgICAgICBpZiAoZC0+bV9jYW5j
ZWxsZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKG1zZy0+cmVzcG9uc2Vf
Ym9keS0+ZGF0YSkKLSAgICAgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURhdGEoaGFuZGxlLmdl
dCgpLCBtc2ctPnJlc3BvbnNlX2JvZHktPmRhdGEsIG1zZy0+cmVzcG9uc2VfYm9keS0+bGVuZ3Ro
LCB0cnVlKTsKLSAgICB9CiAKLSAgICBjbGllbnQtPmRpZEZpbmlzaExvYWRpbmcoaGFuZGxlLmdl
dCgpLCAwKTsKIH0KIAotLy8gcGFyc2VEYXRhVXJsKCkgaXMgdGFrZW4gZnJvbSB0aGUgQ1VSTCBo
dHRwIGJhY2tlbmQuCiBzdGF0aWMgZ2Jvb2xlYW4gcGFyc2VEYXRhVXJsKGdwb2ludGVyIGNhbGxi
YWNrRGF0YSkKIHsKICAgICBSZXNvdXJjZUhhbmRsZSogaGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVz
b3VyY2VIYW5kbGUqPihjYWxsYmFja0RhdGEpOwpAQCAtMzY0LDcgKzMyMSw2IEBAIHN0YXRpYyBn
Ym9vbGVhbiBwYXJzZURhdGFVcmwoZ3BvaW50ZXIgY2FsbGJhY2tEYXRhKQogICAgIH0KIAogICAg
IFN0cmluZyBtZWRpYVR5cGUgPSB1cmwuc3Vic3RyaW5nKDUsIGluZGV4IC0gNSk7Ci0gICAgU3Ry
aW5nIGRhdGEgPSB1cmwuc3Vic3RyaW5nKGluZGV4ICsgMSk7CiAKICAgICBib29sIGlzQmFzZTY0
ID0gbWVkaWFUeXBlLmVuZHNXaXRoKCI7YmFzZTY0IiwgZmFsc2UpOwogICAgIGlmIChpc0Jhc2U2
NCkKQEAgLTM4MCw0MiArMzM2LDQxIEBAIHN0YXRpYyBnYm9vbGVhbiBwYXJzZURhdGFVcmwoZ3Bv
aW50ZXIgY2FsbGJhY2tEYXRhKQogICAgIHJlc3BvbnNlLnNldFVSTChoYW5kbGUtPmZpcnN0UmVx
dWVzdCgpLnVybCgpKTsKICAgICByZXNwb25zZS5zZXRNaW1lVHlwZShtaW1lVHlwZSk7CiAKLSAg
ICBpZiAoaXNCYXNlNjQpIHsKLSAgICAgICAgZGF0YSA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNl
cyhkYXRhKTsKLSAgICAgICAgcmVzcG9uc2Uuc2V0VGV4dEVuY29kaW5nTmFtZShjaGFyc2V0KTsK
LSAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UoaGFuZGxlLCByZXNwb25zZSk7Ci0K
LSAgICAgICAgLy8gVGhlIGxvYWQgbWF5IGJlIGNhbmNlbGxlZCwgYW5kIHRoZSBjbGllbnQgbWF5
IGJlIGRlc3Ryb3llZAotICAgICAgICAvLyBieSBhbnkgb2YgdGhlIGNsaWVudCByZXBvcnRpbmcg
Y2FsbHMsIHNvIHdlIGNoZWNrLCBhbmQgYmFpbAotICAgICAgICAvLyBvdXQgaW4gZWl0aGVyIG9m
IHRob3NlIGNhc2VzLgotICAgICAgICBpZiAoZC0+bV9jYW5jZWxsZWQgfHwgIWhhbmRsZS0+Y2xp
ZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gVXNlIHRoZSBH
TGliIEJhc2U2NCwgc2luY2UgV2ViQ29yZSdzIGRlY29kZXIgaXNuJ3QKLSAgICAgICAgLy8gZ2Vu
ZXJhbC1wdXJwb3NlIGFuZCBmYWlscyBvbiBBY2lkMyB0ZXN0IDk3ICh3aGl0ZXNwYWNlKS4KLSAg
ICAgICAgc2l6ZV90IG91dExlbmd0aCA9IDA7Ci0gICAgICAgIGNoYXIqIG91dERhdGEgPSAwOwot
ICAgICAgICBvdXREYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZ19iYXNlNjRfZGVjb2Rl
KGRhdGEudXRmOCgpLmRhdGEoKSwgJm91dExlbmd0aCkpOwotICAgICAgICBpZiAob3V0RGF0YSAm
JiBvdXRMZW5ndGggPiAwKQotICAgICAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0YShoYW5k
bGUsIG91dERhdGEsIG91dExlbmd0aCwgMCk7Ci0gICAgICAgIGdfZnJlZShvdXREYXRhKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICAvLyBXZSBoYXZlIHRvIGNvbnZlcnQgdG8gVVRGLTE2IGVhcmx5
IGR1ZSB0byBsaW1pdGF0aW9ucyBpbiBLVVJMCi0gICAgICAgIGRhdGEgPSBkZWNvZGVVUkxFc2Nh
cGVTZXF1ZW5jZXMoZGF0YSwgVGV4dEVuY29kaW5nKGNoYXJzZXQpKTsKLSAgICAgICAgcmVzcG9u
c2Uuc2V0VGV4dEVuY29kaW5nTmFtZSgiVVRGLTE2Iik7Ci0gICAgICAgIGNsaWVudC0+ZGlkUmVj
ZWl2ZVJlc3BvbnNlKGhhbmRsZSwgcmVzcG9uc2UpOwotCi0gICAgICAgIGlmIChkLT5tX2NhbmNl
bGxlZCB8fCAhaGFuZGxlLT5jbGllbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgICAgICBpZiAoZGF0YS5sZW5ndGgoKSA+IDApCi0gICAgICAgICAgICBjbGllbnQtPmRpZFJl
Y2VpdmVEYXRhKGhhbmRsZSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZGF0YS5jaGFy
YWN0ZXJzKCkpLCBkYXRhLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSwgMCk7Ci0gICAgfQorICAg
IC8vIEZvciBub24gYmFzZTY0IGVuY29kZWQgZGF0YSB3ZSBoYXZlIHRvIGNvbnZlcnQgdG8gVVRG
LTE2IGVhcmx5CisgICAgLy8gZHVlIHRvIGxpbWl0YXRpb25zIGluIEtVUkwKKyAgICByZXNwb25z
ZS5zZXRUZXh0RW5jb2RpbmdOYW1lKGlzQmFzZTY0ID8gY2hhcnNldCA6ICJVVEYtMTYiKTsKKyAg
ICBjbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShoYW5kbGUsIHJlc3BvbnNlKTsKIAorICAgIC8v
IFRoZSBsb2FkIG1heSBiZSBjYW5jZWxsZWQsIGFuZCB0aGUgY2xpZW50IG1heSBiZSBkZXN0cm95
ZWQKKyAgICAvLyBieSBhbnkgb2YgdGhlIGNsaWVudCByZXBvcnRpbmcgY2FsbHMsIHNvIHdlIGNo
ZWNrLCBhbmQgYmFpbAorICAgIC8vIG91dCBpbiBlaXRoZXIgb2YgdGhvc2UgY2FzZXMuCiAgICAg
aWYgKGQtPm1fY2FuY2VsbGVkIHx8ICFoYW5kbGUtPmNsaWVudCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBjbGllbnQtPmRpZEZpbmlzaExvYWRpbmcoaGFuZGxlLCAwKTsKKyAgICBT
b3VwU2Vzc2lvbiogc2Vzc2lvbiA9IGhhbmRsZS0+ZGVmYXVsdFNlc3Npb24oKTsKKyAgICBHT3du
UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgZC0+bV9zb3VwUmVxdWVzdCA9IGFkb3B0UGxhdGZvcm1S
ZWYod2Via2l0X3NvdXBfcmVxdWVzdGVyX3JlcXVlc3QoZC0+bV9yZXF1ZXN0ZXIuZ2V0KCksIGhh
bmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc2Vzc2lv
biwgJmVycm9yLm91dFB0cigpKSk7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIGQtPm1fc291
cFJlcXVlc3QgPSAwOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZC0+bV9p
bnB1dFN0cmVhbSA9IGFkb3B0UGxhdGZvcm1SZWYod2Via2l0X3NvdXBfcmVxdWVzdF9zZW5kKGQt
Pm1fc291cFJlcXVlc3QuZ2V0KCksIDAsICZlcnJvci5vdXRQdHIoKSkpOworICAgIGlmIChlcnJv
cikgeworICAgICAgICBkLT5tX2lucHV0U3RyZWFtID0gMDsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGQtPm1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGdfbWFsbG9j
KFJFQURfQlVGRkVSX1NJWkUpKTsKKyAgICBkLT5tX3RvdGFsID0gMDsKKworICAgIGdfb2JqZWN0
X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1faW5wdXRTdHJlYW0uZ2V0KCkpLCAid2Via2l0LXJlc291
cmNlIiwgaGFuZGxlKTsKKyAgICAvLyBiYWxhbmNlZCBieSBhIGRlcmVmKCkgaW4gY2xlYW51cFNv
dXBSZXF1ZXN0T3BlcmF0aW9uLCB3aGljaCBzaG91bGQgYWx3YXlzIHJ1bgorICAgIGhhbmRsZS0+
cmVmKCk7CisKKyAgICBkLT5tX2NhbmNlbGxhYmxlID0gYWRvcHRQbGF0Zm9ybVJlZihnX2NhbmNl
bGxhYmxlX25ldygpKTsKKyAgICBnX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jKGQtPm1faW5wdXRT
dHJlYW0uZ2V0KCksIGQtPm1fYnVmZmVyLCBSRUFEX0JVRkZFUl9TSVpFLCBHX1BSSU9SSVRZX0RF
RkFVTFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLT5tX2NhbmNlbGxhYmxlLmdl
dCgpLCByZWFkQ2FsbGJhY2ssIEdJTlRfVE9fUE9JTlRFUighaXNCYXNlNjQpKTsKIAogICAgIHJl
dHVybiBmYWxzZTsKIH0KQEAgLTQ2OSw2ICs0MjQsMTMzIEBAIHN0YXRpYyB2b2lkIGVuc3VyZVNl
c3Npb25Jc0luaXRpYWxpemVkKFNvdXBTZXNzaW9uKiBzZXNzaW9uKQogICAgIGdfb2JqZWN0X3Nl
dF9kYXRhKEdfT0JKRUNUKHNlc3Npb24pLCAid2Via2l0LWluaXQiLCByZWludGVycHJldF9jYXN0
PHZvaWQqPigweGRlYWRiZWVmKSk7CiB9CiAKK3N0YXRpYyB2b2lkIGNsZWFudXBTb3VwUmVxdWVz
dE9wZXJhdGlvbihSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBib29sIGlzRGVzdHJveWluZyA9IGZh
bHNlKQoreworICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVy
bmFsKCk7CisKKyAgICBpZiAoZC0+bV9zb3VwUmVxdWVzdCkgeworICAgICAgICBnX29iamVjdF9z
ZXRfZGF0YShHX09CSkVDVChkLT5tX3NvdXBSZXF1ZXN0LmdldCgpKSwgIndlYmtpdC1yZXNvdXJj
ZSIsIDApOworICAgICAgICBkLT5tX3NvdXBSZXF1ZXN0LmNsZWFyKCk7CisgICAgfQorCisgICAg
aWYgKGQtPm1faW5wdXRTdHJlYW0pIHsKKyAgICAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpF
Q1QoZC0+bV9pbnB1dFN0cmVhbS5nZXQoKSksICJ3ZWJraXQtcmVzb3VyY2UiLCAwKTsKKyAgICAg
ICAgZC0+bV9pbnB1dFN0cmVhbS5jbGVhcigpOworICAgIH0KKworICAgIGlmIChkLT5tX2NhbmNl
bGxhYmxlKQorICAgICAgICBkLT5tX2NhbmNlbGxhYmxlLmNsZWFyKCk7CisKKyAgICBpZiAoZC0+
bV9zb3VwTXNnKQorICAgICAgICBkLT5tX3NvdXBNc2cuY2xlYXIoKTsKKworICAgIGlmIChkLT5t
X2J1ZmZlcikgeworICAgICAgICBnX2ZyZWUoZC0+bV9idWZmZXIpOworICAgICAgICBkLT5tX2J1
ZmZlciA9IDA7CisgICAgfQorCisgICAgaWYgKCFpc0Rlc3Ryb3lpbmcpCisgICAgICAgIGhhbmRs
ZS0+ZGVyZWYoKTsKK30KKworc3RhdGljIHZvaWQgc2VuZFJlcXVlc3RDYWxsYmFjayhHT2JqZWN0
KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBS
ZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9IHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxl
Kj4oZ19vYmplY3RfZ2V0X2RhdGEoc291cmNlLCAid2Via2l0LXJlc291cmNlIikpOworICAgIGlm
ICghaGFuZGxlKQorICAgICAgICByZXR1cm47CisKKyAgICBSZXNvdXJjZUhhbmRsZUludGVybmFs
KiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOworICAgIFJlc291cmNlSGFuZGxlQ2xpZW50KiBj
bGllbnQgPSBoYW5kbGUtPmNsaWVudCgpOworCisgICAgaWYgKGQtPm1fZ290Q2h1bmtIYW5kbGVy
KSB7CisgICAgICAgIC8vIE5vIG5lZWQgdG8gY2FsbCBnb3RDaHVua0hhbmRsZXIgYW55bW9yZS4g
UmVjZWl2ZWQgZGF0YSB3aWxsCisgICAgICAgIC8vIGJlIHJlcG9ydGVkIGJ5IHJlYWRDYWxsYmFj
aworICAgICAgICBpZiAoZ19zaWduYWxfaGFuZGxlcl9pc19jb25uZWN0ZWQoZC0+bV9zb3VwTXNn
LmdldCgpLCBkLT5tX2dvdENodW5rSGFuZGxlcikpCisgICAgICAgICAgICBnX3NpZ25hbF9oYW5k
bGVyX2Rpc2Nvbm5lY3QoZC0+bV9zb3VwTXNnLmdldCgpLCBkLT5tX2dvdENodW5rSGFuZGxlcik7
CisgICAgfQorCisgICAgaWYgKGQtPm1fY2FuY2VsbGVkIHx8ICFjbGllbnQpIHsKKyAgICAgICAg
Y2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgR0lucHV0U3RyZWFt
KiBpbiA9IHdlYmtpdF9zb3VwX3JlcXVlc3Rfc2VuZF9maW5pc2goZC0+bV9zb3VwUmVxdWVzdC5n
ZXQoKSwgcmVzLCAmZXJyb3Iub3V0UHRyKCkpOworCisgICAgaWYgKGVycm9yKSB7CisgICAgICAg
IFNvdXBNZXNzYWdlKiBzb3VwTXNnID0gZC0+bV9zb3VwTXNnLmdldCgpOworICAgICAgICBnYm9v
bGVhbiBpc1RyYW5zcG9ydEVycm9yID0gZC0+bV9zb3VwTXNnICYmIFNPVVBfU1RBVFVTX0lTX1RS
QU5TUE9SVF9FUlJPUihzb3VwTXNnLT5zdGF0dXNfY29kZSk7CisKKyAgICAgICAgaWYgKGlzVHJh
bnNwb3J0RXJyb3IgfHwgKGVycm9yLT5kb21haW4gPT0gR19JT19FUlJPUikpIHsKKyAgICAgICAg
ICAgIFNvdXBVUkkqIHVyaSA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X3VyaShkLT5tX3NvdXBS
ZXF1ZXN0LmdldCgpKTsKKyAgICAgICAgICAgIEdPd25QdHI8Y2hhcj4gdXJpU3RyKHNvdXBfdXJp
X3RvX3N0cmluZyh1cmksIGZhbHNlKSk7CisgICAgICAgICAgICBnaW50IGVycm9yQ29kZSA9IGlz
VHJhbnNwb3J0RXJyb3IgPyBzb3VwTXNnLT5zdGF0dXNfY29kZSA6IGVycm9yLT5jb2RlOworICAg
ICAgICAgICAgY29uc3QgZ2NoYXIqIGVycm9yTXNnID0gaXNUcmFuc3BvcnRFcnJvciA/IHNvdXBN
c2ctPnJlYXNvbl9waHJhc2UgOiBlcnJvci0+bWVzc2FnZTsKKyAgICAgICAgICAgIGNvbnN0IGdj
aGFyKiBxdWFya1N0ciA9IGlzVHJhbnNwb3J0RXJyb3IgPyBnX3F1YXJrX3RvX3N0cmluZyhTT1VQ
X0hUVFBfRVJST1IpIDogZ19xdWFya190b19zdHJpbmcoR19JT19FUlJPUik7CisgICAgICAgICAg
ICBSZXNvdXJjZUVycm9yIHJlc291cmNlRXJyb3IocXVhcmtTdHIsIGVycm9yQ29kZSwgdXJpU3Ry
LmdldCgpLCBTdHJpbmc6OmZyb21VVEY4KGVycm9yTXNnKSk7CisKKyAgICAgICAgICAgIGNsZWFu
dXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOworICAgICAgICAgICAgY2xpZW50
LT5kaWRGYWlsKGhhbmRsZS5nZXQoKSwgcmVzb3VyY2VFcnJvcik7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoZC0+bV9zb3VwTXNnICYmIHNvdXBNc2ctPnN0
YXR1c19jb2RlID09IFNPVVBfU1RBVFVTX1VOQVVUSE9SSVpFRCkgeworICAgICAgICAgICAgZmls
bFJlc3BvbnNlRnJvbU1lc3NhZ2Uoc291cE1zZywgJmQtPm1fcmVzcG9uc2UpOworICAgICAgICAg
ICAgY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UoaGFuZGxlLmdldCgpLCBkLT5tX3Jlc3BvbnNl
KTsKKworICAgICAgICAgICAgLy8gV2ViQ29yZSBtaWdodCBoYXZlIGNhbmNlbGxlZCB0aGUgam9i
IGluIHRoZSB3aGlsZQorICAgICAgICAgICAgaWYgKGQtPm1fY2FuY2VsbGVkKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgaWYgKHNvdXBNc2ctPnJlc3BvbnNlX2JvZHkt
PmRhdGEpCisgICAgICAgICAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0YShoYW5kbGUuZ2V0
KCksIHNvdXBNc2ctPnJlc3BvbnNlX2JvZHktPmRhdGEsIHNvdXBNc2ctPnJlc3BvbnNlX2JvZHkt
Pmxlbmd0aCwgdHJ1ZSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBkaWRSZWNlaXZlRGF0YSBh
Ym92ZSBtaWdodCBoYXZlIGNhbmNlbGxlZCBpdAorICAgICAgICBpZiAoZC0+bV9jYW5jZWxsZWQg
fHwgIWNsaWVudCkgeworICAgICAgICAgIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5k
bGUuZ2V0KCkpOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNsaWVu
dC0+ZGlkRmluaXNoTG9hZGluZyhoYW5kbGUuZ2V0KCksIDApOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGQtPm1fY2FuY2VsbGVkKSB7CisgICAgICAgIGNsZWFudXBTb3VwUmVx
dWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgZC0+bV9pbnB1dFN0cmVhbSA9IGFkb3B0UGxhdGZvcm1SZWYoaW4pOworICAgIGQtPm1fYnVm
ZmVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGdfbWFsbG9jKFJFQURfQlVGRkVSX1NJWkUpKTsKKyAg
ICBkLT5tX3RvdGFsID0gMDsKKworICAgIC8vIHJlYWRDYWxsYmFjayBuZWVkcyBpdAorICAgIGdf
b2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1faW5wdXRTdHJlYW0uZ2V0KCkpLCAid2Via2l0
LXJlc291cmNlIiwgaGFuZGxlLmdldCgpKTsKKworICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYg
aXQncyBhIGZpbGU6IFVSTCBhbmQgaWYgaXQgaXMgYSByZWd1bGFyCisgICAgLy8gZmlsZSBhcyBp
dCBjb3VsZCBiZSBhIGRpcmVjdG9yeS4gSW4gdGhhdCBjYXNlIFNvdXAgcHJvcGVybHkKKyAgICAv
LyByZXR1cm5zIGEgc3RyZWFtIHdob3NlIGNvbnRlbnQgaXMgYSBIVE1MIHdpdGggYSBsaXN0IG9m
IGZpbGVzCisgICAgLy8gaW4gdGhlIGRpcmVjdG9yeQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZShoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnByb3RvY29sKCksICJmaWxlIikKKyAgICAg
ICAgJiYgR19JU19GSUxFX0lOUFVUX1NUUkVBTShpbikpIHsKKyAgICAgICAgUmVzb3VyY2VSZXNw
b25zZSByZXNwb25zZTsKKworICAgICAgICByZXNwb25zZS5zZXRVUkwoaGFuZGxlLT5maXJzdFJl
cXVlc3QoKS51cmwoKSk7CisgICAgICAgIHJlc3BvbnNlLnNldE1pbWVUeXBlKHdlYmtpdF9zb3Vw
X3JlcXVlc3RfZ2V0X2NvbnRlbnRfdHlwZShkLT5tX3NvdXBSZXF1ZXN0LmdldCgpKSk7CisgICAg
ICAgIHJlc3BvbnNlLnNldEV4cGVjdGVkQ29udGVudExlbmd0aCh3ZWJraXRfc291cF9yZXF1ZXN0
X2dldF9jb250ZW50X2xlbmd0aChkLT5tX3NvdXBSZXF1ZXN0LmdldCgpKSk7CisgICAgICAgIGNs
aWVudC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGhhbmRsZS5nZXQoKSwgcmVzcG9uc2UpOworCisgICAg
ICAgIGlmIChkLT5tX2NhbmNlbGxlZCkgeworICAgICAgICAgICAgY2xlYW51cFNvdXBSZXF1ZXN0
T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBnX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jKGQtPm1faW5wdXRTdHJlYW0u
Z2V0KCksIGQtPm1fYnVmZmVyLCBSRUFEX0JVRkZFUl9TSVpFLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR19QUklPUklUWV9ERUZBVUxULCBkLT5tX2NhbmNlbGxhYmxlLmdldCgpLCBy
ZWFkQ2FsbGJhY2ssIDApOworfQorCiBzdGF0aWMgYm9vbCBzdGFydEh0dHAoUmVzb3VyY2VIYW5k
bGUqIGhhbmRsZSkKIHsKICAgICBBU1NFUlQoaGFuZGxlKTsKQEAgLTQ4MywyNiArNTY1LDM3IEBA
IHN0YXRpYyBib29sIHN0YXJ0SHR0cChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQogICAgIHVybC5y
ZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsKICAgICByZXF1ZXN0LnNldFVSTCh1cmwpOwogCi0g
ICAgZC0+bV9tc2cgPSByZXF1ZXN0LnRvU291cE1lc3NhZ2UoKTsKLSAgICBpZiAoIWQtPm1fbXNn
KQorICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBkLT5tX3NvdXBSZXF1ZXN0ID0gYWRv
cHRQbGF0Zm9ybVJlZih3ZWJraXRfc291cF9yZXF1ZXN0ZXJfcmVxdWVzdChkLT5tX3JlcXVlc3Rl
ci5nZXQoKSwgdXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHNlc3Npb24sICZlcnJvci5vdXRQ
dHIoKSkpOworICAgIGlmIChlcnJvcikgeworICAgICAgICBkLT5tX3NvdXBSZXF1ZXN0ID0gMDsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGdfb2JqZWN0X3NldF9kYXRhKEdf
T0JKRUNUKGQtPm1fc291cFJlcXVlc3QuZ2V0KCkpLCAid2Via2l0LXJlc291cmNlIiwgaGFuZGxl
KTsKKworICAgIGQtPm1fc291cE1zZyA9IGFkb3B0UGxhdGZvcm1SZWYod2Via2l0X3NvdXBfcmVx
dWVzdF9odHRwX2dldF9tZXNzYWdlKFdFQktJVF9TT1VQX1JFUVVFU1RfSFRUUChkLT5tX3NvdXBS
ZXF1ZXN0LmdldCgpKSkpOworICAgIFNvdXBNZXNzYWdlKiBzb3VwTXNnID0gZC0+bV9zb3VwTXNn
LmdldCgpOworICAgIHJlcXVlc3QudXBkYXRlU291cE1lc3NhZ2Uoc291cE1zZyk7CisKKyAgICBp
ZiAoIWQtPm1fc291cE1zZykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFoYW5k
bGUtPnNob3VsZENvbnRlbnRTbmlmZigpKQotICAgICAgICBzb3VwX21lc3NhZ2VfZGlzYWJsZV9m
ZWF0dXJlKGQtPm1fbXNnLCBTT1VQX1RZUEVfQ09OVEVOVF9TTklGRkVSKTsKKyAgICAgICAgc291
cF9tZXNzYWdlX2Rpc2FibGVfZmVhdHVyZShzb3VwTXNnLCBTT1VQX1RZUEVfQ09OVEVOVF9TTklG
RkVSKTsKIAotICAgIGdfc2lnbmFsX2Nvbm5lY3QoZC0+bV9tc2csICJyZXN0YXJ0ZWQiLCBHX0NB
TExCQUNLKHJlc3RhcnRlZENhbGxiYWNrKSwgaGFuZGxlKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0
KGQtPm1fbXNnLCAiZ290LWhlYWRlcnMiLCBHX0NBTExCQUNLKGdvdEhlYWRlcnNDYWxsYmFjayks
IGhhbmRsZSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChkLT5tX21zZywgImNvbnRlbnQtc25pZmZl
ZCIsIEdfQ0FMTEJBQ0soY29udGVudFNuaWZmZWRDYWxsYmFjayksIGhhbmRsZSk7Ci0gICAgZ19z
aWduYWxfY29ubmVjdChkLT5tX21zZywgImdvdC1jaHVuayIsIEdfQ0FMTEJBQ0soZ290Q2h1bmtD
YWxsYmFjayksIGhhbmRsZSk7CisgICAgZ19zaWduYWxfY29ubmVjdChzb3VwTXNnLCAicmVzdGFy
dGVkIiwgR19DQUxMQkFDSyhyZXN0YXJ0ZWRDYWxsYmFjayksIGhhbmRsZSk7CisgICAgZ19zaWdu
YWxfY29ubmVjdChzb3VwTXNnLCAiZ290LWhlYWRlcnMiLCBHX0NBTExCQUNLKGdvdEhlYWRlcnND
YWxsYmFjayksIGhhbmRsZSk7CisgICAgZ19zaWduYWxfY29ubmVjdChzb3VwTXNnLCAiY29udGVu
dC1zbmlmZmVkIiwgR19DQUxMQkFDSyhjb250ZW50U25pZmZlZENhbGxiYWNrKSwgaGFuZGxlKTsK
KyAgICBkLT5tX2dvdENodW5rSGFuZGxlciA9IGdfc2lnbmFsX2Nvbm5lY3Qoc291cE1zZywgImdv
dC1jaHVuayIsIEdfQ0FMTEJBQ0soZ290Q2h1bmtDYWxsYmFjayksIGhhbmRsZSk7CiAKICNpZmRl
ZiBIQVZFX0xJQlNPVVBfMl8yOV85MAogICAgIFN0cmluZyBmaXJzdFBhcnR5U3RyaW5nID0gcmVx
dWVzdC5maXJzdFBhcnR5Rm9yQ29va2llcygpLnN0cmluZygpOwogICAgIGlmICghZmlyc3RQYXJ0
eVN0cmluZy5pc0VtcHR5KCkpIHsKICAgICAgICAgR093blB0cjxTb3VwVVJJPiBmaXJzdFBhcnR5
KHNvdXBfdXJpX25ldyhmaXJzdFBhcnR5U3RyaW5nLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICAgICAg
c291cF9tZXNzYWdlX3NldF9maXJzdF9wYXJ0eShkLT5tX21zZywgZmlyc3RQYXJ0eS5nZXQoKSk7
CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfZmlyc3RfcGFydHkoc291cE1zZywgZmlyc3RQYXJ0
eS5nZXQoKSk7CiAgICAgfQogI2VuZGlmCi0gICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1Qo
ZC0+bV9tc2cpLCAicmVzb3VyY2VIYW5kbGUiLCByZWludGVycHJldF9jYXN0PHZvaWQqPihoYW5k
bGUpKTsKIAogICAgIEZvcm1EYXRhKiBodHRwQm9keSA9IGQtPm1fZmlyc3RSZXF1ZXN0Lmh0dHBC
b2R5KCk7CiAgICAgaWYgKGh0dHBCb2R5ICYmICFodHRwQm9keS0+aXNFbXB0eSgpKSB7CkBAIC01
MTIsNyArNjA1LDcgQEAgc3RhdGljIGJvb2wgc3RhcnRIdHRwKFJlc291cmNlSGFuZGxlKiBoYW5k
bGUpCiAgICAgICAgIGlmIChudW1FbGVtZW50cyA8IDIpIHsKICAgICAgICAgICAgIFZlY3Rvcjxj
aGFyPiBib2R5OwogICAgICAgICAgICAgaHR0cEJvZHktPmZsYXR0ZW4oYm9keSk7Ci0gICAgICAg
ICAgICBzb3VwX21lc3NhZ2Vfc2V0X3JlcXVlc3QoZC0+bV9tc2csIGQtPm1fZmlyc3RSZXF1ZXN0
Lmh0dHBDb250ZW50VHlwZSgpLnV0ZjgoKS5kYXRhKCksCisgICAgICAgICAgICBzb3VwX21lc3Nh
Z2Vfc2V0X3JlcXVlc3Qoc291cE1zZywgZC0+bV9maXJzdFJlcXVlc3QuaHR0cENvbnRlbnRUeXBl
KCkudXRmOCgpLmRhdGEoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
T1VQX01FTU9SWV9DT1BZLCBib2R5LmRhdGEoKSwgYm9keS5zaXplKCkpOwogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgLyoKQEAgLTUyMSwyNyArNjE0LDI1IEBAIHN0YXRpYyBib29sIHN0
YXJ0SHR0cChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQogICAgICAgICAgICAgICogY29weWluZyBp
bnRvIG1lbW9yeTsgVE9ETzogc3VwcG9ydCB1cGxvYWQgb2Ygbm9uLWxvY2FsCiAgICAgICAgICAg
ICAgKiAodGhpbmsgc2Z0cDovLykgZmlsZXMgYnkgdXNpbmcgR0lPPwogICAgICAgICAgICAgICov
Ci0gICAgICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9zZXRfYWNjdW11bGF0ZShkLT5tX21zZy0+
cmVxdWVzdF9ib2R5LCBGQUxTRSk7CisgICAgICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9zZXRf
YWNjdW11bGF0ZShzb3VwTXNnLT5yZXF1ZXN0X2JvZHksIEZBTFNFKTsKICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykgewogICAgICAgICAgICAgICAg
IGNvbnN0IEZvcm1EYXRhRWxlbWVudCYgZWxlbWVudCA9IGh0dHBCb2R5LT5lbGVtZW50cygpW2ld
OwogCiAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQubV90eXBlID09IEZvcm1EYXRhRWxlbWVu
dDo6ZGF0YSkKLSAgICAgICAgICAgICAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKGQt
Pm1fbXNnLT5yZXF1ZXN0X2JvZHksIFNPVVBfTUVNT1JZX1RFTVBPUkFSWSwgZWxlbWVudC5tX2Rh
dGEuZGF0YSgpLCBlbGVtZW50Lm1fZGF0YS5zaXplKCkpOworICAgICAgICAgICAgICAgICAgICBz
b3VwX21lc3NhZ2VfYm9keV9hcHBlbmQoc291cE1zZy0+cmVxdWVzdF9ib2R5LCBTT1VQX01FTU9S
WV9URU1QT1JBUlksIGVsZW1lbnQubV9kYXRhLmRhdGEoKSwgZWxlbWVudC5tX2RhdGEuc2l6ZSgp
KTsKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgLyoKICAgICAg
ICAgICAgICAgICAgICAgICogbWFwcGluZyBmb3IgdXBsb2FkZWQgZmlsZXMgY29kZSBpbnNwaXJl
ZCBieSB0ZWNobmlxdWUgdXNlZCBpbgogICAgICAgICAgICAgICAgICAgICAgKiBsaWJzb3VwJ3Mg
c2ltcGxlLWh0dHBkIHRlc3QKICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAg
ICAgICAgIEdFcnJvciogZXJyb3IgPSAwOworICAgICAgICAgICAgICAgICAgICBHT3duUHRyPEdF
cnJvcj4gZXJyb3I7CiAgICAgICAgICAgICAgICAgICAgIENTdHJpbmcgZmlsZU5hbWUgPSBmaWxl
U3lzdGVtUmVwcmVzZW50YXRpb24oZWxlbWVudC5tX2ZpbGVuYW1lKTsKLSAgICAgICAgICAgICAg
ICAgICAgR01hcHBlZEZpbGUqIGZpbGVNYXBwaW5nID0gZ19tYXBwZWRfZmlsZV9uZXcoZmlsZU5h
bWUuZGF0YSgpLCBmYWxzZSwgJmVycm9yKTsKKyAgICAgICAgICAgICAgICAgICAgR01hcHBlZEZp
bGUqIGZpbGVNYXBwaW5nID0gZ19tYXBwZWRfZmlsZV9uZXcoZmlsZU5hbWUuZGF0YSgpLCBmYWxz
ZSwgJmVycm9yLm91dFB0cigpKTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQoZC0+bV9t
c2csIEdfU0lHTkFMX01BVENIX0RBVEEsCisgICAgICAgICAgICAgICAgICAgICAgICBnX3NpZ25h
bF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQoc291cE1zZywgR19TSUdOQUxfTUFUQ0hfREFU
QSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLCAwLCAwLCAwLCBoYW5kbGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgZ19v
YmplY3RfdW5yZWYoZC0+bV9tc2cpOwotICAgICAgICAgICAgICAgICAgICAgICAgZC0+bV9tc2cg
PSAwOworICAgICAgICAgICAgICAgICAgICAgICAgZC0+bV9zb3VwTXNnLmNsZWFyKCk7CiAKICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAg
fQpAQCAtNTQ5LDM4ICs2NDAsMzEgQEAgc3RhdGljIGJvb2wgc3RhcnRIdHRwKFJlc291cmNlSGFu
ZGxlKiBoYW5kbGUpCiAgICAgICAgICAgICAgICAgICAgIFNvdXBCdWZmZXIqIHNvdXBCdWZmZXIg
PSBzb3VwX2J1ZmZlcl9uZXdfd2l0aF9vd25lcihnX21hcHBlZF9maWxlX2dldF9jb250ZW50cyhm
aWxlTWFwcGluZyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX21hcHBlZF9maWxlX2dldF9sZW5ndGgoZmls
ZU1hcHBpbmcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU1hcHBpbmcsCi0jaWYgR0xJQl9DSEVDS19W
RVJTSU9OKDIsIDIxLCAzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJv
eU5vdGlmeT4oZ19tYXBwZWRfZmlsZV91bnJlZikpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdfbWFwcGVkX2ZpbGVfZnJlZSkpOwotI2Vu
ZGlmCi0gICAgICAgICAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZF9idWZmZXIo
ZC0+bV9tc2ctPnJlcXVlc3RfYm9keSwgc291cEJ1ZmZlcik7CisgICAgICAgICAgICAgICAgICAg
IHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZF9idWZmZXIoc291cE1zZy0+cmVxdWVzdF9ib2R5LCBz
b3VwQnVmZmVyKTsKICAgICAgICAgICAgICAgICAgICAgc291cF9idWZmZXJfZnJlZShzb3VwQnVm
ZmVyKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICAvLyBiYWxhbmNlZCBieSBhIGRlcmVmKCkgaW4gZmluaXNoZWRDYWxsYmFjaywgd2hp
Y2ggc2hvdWxkIGFsd2F5cyBydW4KKyAgICAvLyBiYWxhbmNlZCBieSBhIGRlcmVmKCkgaW4gY2xl
YW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uLCB3aGljaCBzaG91bGQgYWx3YXlzIHJ1bgogICAgIGhh
bmRsZS0+cmVmKCk7CiAKICAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBhbiBBY2NlcHQgaGVhZGVy
IGZvciBzdWJyZXNvdXJjZXM7IHNvbWUgc2l0ZXMKICAgICAvLyB3YW50IHRoaXMgdG8gc2VydmUg
c29tZSBvZiB0aGVpciBzdWJyZXNvdXJjZXMKLSAgICBpZiAoIXNvdXBfbWVzc2FnZV9oZWFkZXJz
X2dldF9vbmUoZC0+bV9tc2ctPnJlcXVlc3RfaGVhZGVycywgIkFjY2VwdCIpKQotICAgICAgICBz
b3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQoZC0+bV9tc2ctPnJlcXVlc3RfaGVhZGVycywgIkFj
Y2VwdCIsICIqLyoiKTsKKyAgICBpZiAoIXNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9vbmUoc291
cE1zZy0+cmVxdWVzdF9oZWFkZXJzLCAiQWNjZXB0IikpCisgICAgICAgIHNvdXBfbWVzc2FnZV9o
ZWFkZXJzX2FwcGVuZChzb3VwTXNnLT5yZXF1ZXN0X2hlYWRlcnMsICJBY2NlcHQiLCAiKi8qIik7
CiAKLSAgICAvLyBCYWxhbmNlZCBpbiBSZXNvdXJjZUhhbmRsZUludGVybmFsJ3MgZGVzdHJ1Y3Rv
cjsgd2UgbmVlZCB0bwotICAgIC8vIGtlZXAgb3VyIG93biByZWYsIGJlY2F1c2UgYWZ0ZXIgcXVl
dWVpbmcgdGhlIG1lc3NhZ2UsIHRoZQotICAgIC8vIHNlc3Npb24gb3ducyB0aGUgaW5pdGlhbCBy
ZWZlcmVuY2UuCi0gICAgZ19vYmplY3RfcmVmKGQtPm1fbXNnKTsKLSAgICBzb3VwX3Nlc3Npb25f
cXVldWVfbWVzc2FnZShzZXNzaW9uLCBkLT5tX21zZywgZmluaXNoZWRDYWxsYmFjaywgaGFuZGxl
KTsKKyAgICBkLT5tX2NhbmNlbGxhYmxlID0gYWRvcHRQbGF0Zm9ybVJlZihnX2NhbmNlbGxhYmxl
X25ldygpKTsKKyAgICB3ZWJraXRfc291cF9yZXF1ZXN0X3NlbmRfYXN5bmMoZC0+bV9zb3VwUmVx
dWVzdC5nZXQoKSwgZC0+bV9jYW5jZWxsYWJsZS5nZXQoKSwgc2VuZFJlcXVlc3RDYWxsYmFjaywg
MCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBSZXNvdXJjZUhhbmRsZTo6c3RhcnQo
TmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgQVNTRVJUKCFkLT5tX21zZyk7Cisg
ICAgQVNTRVJUKCFkLT5tX3NvdXBNc2cpOwogCiAgICAgLy8gVGhlIGZyYW1lIGNvdWxkIGJlIG51
bGwgaWYgdGhlIFJlc291cmNlSGFuZGxlIGlzIG5vdCBhc3NvY2lhdGVkIHRvIGFueQogICAgIC8v
IEZyYW1lLCBlLmcuIGlmIHdlIGFyZSBkb3dubG9hZGluZyBhIGZpbGUuCkBAIC02MjAsMTAgKzcw
NCwxMCBAQCBib29sIFJlc291cmNlSGFuZGxlOjpzdGFydChOZXR3b3JraW5nQ29udGV4dCogY29u
dGV4dCkKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmNhbmNlbCgpCiB7CiAgICAgZC0+bV9jYW5jZWxs
ZWQgPSB0cnVlOwotICAgIGlmIChkLT5tX21zZykKLSAgICAgICAgc291cF9zZXNzaW9uX2NhbmNl
bF9tZXNzYWdlKGRlZmF1bHRTZXNzaW9uKCksIGQtPm1fbXNnLCBTT1VQX1NUQVRVU19DQU5DRUxM
RUQpOworICAgIGlmIChkLT5tX3NvdXBNc2cpCisgICAgICAgIHNvdXBfc2Vzc2lvbl9jYW5jZWxf
bWVzc2FnZShkZWZhdWx0U2Vzc2lvbigpLCBkLT5tX3NvdXBNc2cuZ2V0KCksIFNPVVBfU1RBVFVT
X0NBTkNFTExFRCk7CiAgICAgZWxzZSBpZiAoZC0+bV9jYW5jZWxsYWJsZSkKLSAgICAgICAgZ19j
YW5jZWxsYWJsZV9jYW5jZWwoZC0+bV9jYW5jZWxsYWJsZSk7CisgICAgICAgIGdfY2FuY2VsbGFi
bGVfY2FuY2VsKGQtPm1fY2FuY2VsbGFibGUuZ2V0KCkpOwogfQogCiBQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gUmVzb3VyY2VIYW5kbGU6OmJ1ZmZlcmVkRGF0YSgpCkBAIC02NjcsMzggKzc1MSw2
IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29y
a2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0CiAgICAgc3luY0xvYWRlci5ydW4oKTsKIH0KIAot
Ly8gR0lPLWJhc2VkIGxvYWRlcgotCi1zdGF0aWMgdm9pZCBjbGVhbnVwR2lvT3BlcmF0aW9uKFJl
c291cmNlSGFuZGxlKiBoYW5kbGUsIGJvb2wgaXNEZXN0cm95aW5nID0gZmFsc2UpCi17Ci0gICAg
UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKLQotICAg
IGlmIChkLT5tX2dmaWxlKSB7Ci0gICAgICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQt
Pm1fZ2ZpbGUpLCAid2Via2l0LXJlc291cmNlIiwgMCk7Ci0gICAgICAgIGdfb2JqZWN0X3VucmVm
KGQtPm1fZ2ZpbGUpOwotICAgICAgICBkLT5tX2dmaWxlID0gMDsKLSAgICB9Ci0KLSAgICBpZiAo
ZC0+bV9jYW5jZWxsYWJsZSkgewotICAgICAgICBnX29iamVjdF91bnJlZihkLT5tX2NhbmNlbGxh
YmxlKTsKLSAgICAgICAgZC0+bV9jYW5jZWxsYWJsZSA9IDA7Ci0gICAgfQotCi0gICAgaWYgKGQt
Pm1faW5wdXRTdHJlYW0pIHsKLSAgICAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+
bV9pbnB1dFN0cmVhbSksICJ3ZWJraXQtcmVzb3VyY2UiLCAwKTsKLSAgICAgICAgZ19vYmplY3Rf
dW5yZWYoZC0+bV9pbnB1dFN0cmVhbSk7Ci0gICAgICAgIGQtPm1faW5wdXRTdHJlYW0gPSAwOwot
ICAgIH0KLQotICAgIGlmIChkLT5tX2J1ZmZlcikgewotICAgICAgICBnX2ZyZWUoZC0+bV9idWZm
ZXIpOwotICAgICAgICBkLT5tX2J1ZmZlciA9IDA7Ci0gICAgfQotCi0gICAgaWYgKCFpc0Rlc3Ry
b3lpbmcpCi0gICAgICAgIGhhbmRsZS0+ZGVyZWYoKTsKLX0KLQogc3RhdGljIHZvaWQgY2xvc2VD
YWxsYmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzLCBncG9pbnRlcikKIHsK
ICAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9IHN0YXRpY19jYXN0PFJlc291cmNl
SGFuZGxlKj4oZ19vYmplY3RfZ2V0X2RhdGEoc291cmNlLCAid2Via2l0LXJlc291cmNlIikpOwpA
QCAtNzA4LDggKzc2MCw4IEBAIHN0YXRpYyB2b2lkIGNsb3NlQ2FsbGJhY2soR09iamVjdCogc291
cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIpCiAgICAgUmVzb3VyY2VIYW5kbGVJbnRl
cm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKICAgICBSZXNvdXJjZUhhbmRsZUNsaWVu
dCogY2xpZW50ID0gaGFuZGxlLT5jbGllbnQoKTsKIAotICAgIGdfaW5wdXRfc3RyZWFtX2Nsb3Nl
X2ZpbmlzaChkLT5tX2lucHV0U3RyZWFtLCByZXMsIDApOwotICAgIGNsZWFudXBHaW9PcGVyYXRp
b24oaGFuZGxlLmdldCgpKTsKKyAgICBnX2lucHV0X3N0cmVhbV9jbG9zZV9maW5pc2goZC0+bV9p
bnB1dFN0cmVhbS5nZXQoKSwgcmVzLCAwKTsKKyAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRp
b24oaGFuZGxlLmdldCgpKTsKIAogICAgIC8vIFRoZSBsb2FkIG1heSBoYXZlIGJlZW4gY2FuY2Vs
bGVkLCB0aGUgY2xpZW50IG1heSBoYXZlIGJlZW4KICAgICAvLyBkZXN0cm95ZWQgYWxyZWFkeS4g
SW4gc3VjaCBjYXNlcyBjYWxsaW5nIGRpZEZpbmlzaExvYWRpbmcgaXMgYQpAQCAtNzIwLDIxMCAr
NzcyLDkzIEBAIHN0YXRpYyB2b2lkIGNsb3NlQ2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5
bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIpCiAgICAgY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKGhh
bmRsZS5nZXQoKSwgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJlYWRDYWxsYmFjayhHT2JqZWN0KiBz
b3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzLCBncG9pbnRlcikKK3N0YXRpYyB2b2lkIHJlYWRDYWxs
YmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzLCBncG9pbnRlciBkYXRhKQog
ewogICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3Vy
Y2VIYW5kbGUqPihnX29iamVjdF9nZXRfZGF0YShzb3VyY2UsICJ3ZWJraXQtcmVzb3VyY2UiKSk7
CiAgICAgaWYgKCFoYW5kbGUpCiAgICAgICAgIHJldHVybjsKIAorICAgIGJvb2wgY29udmVydFRv
VVRGMTYgPSBzdGF0aWNfY2FzdDxib29sPihkYXRhKTsKICAgICBSZXNvdXJjZUhhbmRsZUludGVy
bmFsKiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOwogICAgIFJlc291cmNlSGFuZGxlQ2xpZW50
KiBjbGllbnQgPSBoYW5kbGUtPmNsaWVudCgpOwogCiAgICAgaWYgKGQtPm1fY2FuY2VsbGVkIHx8
ICFjbGllbnQpIHsKLSAgICAgICAgY2xlYW51cEdpb09wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwor
ICAgICAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIEdFcnJvciogZXJyb3IgPSAwOworICAgIEdPd25QdHI8
R0Vycm9yPiBlcnJvcjsKIAotICAgIGdzc2l6ZSBieXRlc1JlYWQgPSBnX2lucHV0X3N0cmVhbV9y
ZWFkX2ZpbmlzaChkLT5tX2lucHV0U3RyZWFtLCByZXMsICZlcnJvcik7CisgICAgZ3NzaXplIGJ5
dGVzUmVhZCA9IGdfaW5wdXRfc3RyZWFtX3JlYWRfZmluaXNoKGQtPm1faW5wdXRTdHJlYW0uZ2V0
KCksIHJlcywgJmVycm9yLm91dFB0cigpKTsKICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgY2hh
ciogdXJpID0gZ19maWxlX2dldF91cmkoZC0+bV9nZmlsZSk7Ci0gICAgICAgIFJlc291cmNlRXJy
b3IgcmVzb3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0cmluZyhHX0lPX0VSUk9SKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLT5jb2RlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdXJpLAorICAgICAgICBTb3VwVVJJKiB1cmkgPSB3ZWJraXRf
c291cF9yZXF1ZXN0X2dldF91cmkoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSk7CisgICAgICAgIEdP
d25QdHI8Y2hhcj4gdXJpU3RyKHNvdXBfdXJpX3RvX3N0cmluZyh1cmksIGZhbHNlKSk7CisgICAg
ICAgIFJlc291cmNlRXJyb3IgcmVzb3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0cmluZyhHX0lPX0VS
Uk9SKSwgZXJyb3ItPmNvZGUsIHVyaVN0ci5nZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVycm9yID8gU3RyaW5nOjpmcm9tVVRGOChlcnJvci0+bWVzc2FnZSkgOiBT
dHJpbmcoKSk7Ci0gICAgICAgIGdfZnJlZSh1cmkpOwotICAgICAgICBnX2Vycm9yX2ZyZWUoZXJy
b3IpOwotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAg
IGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwogICAgICAgICBjbGll
bnQtPmRpZEZhaWwoaGFuZGxlLmdldCgpLCByZXNvdXJjZUVycm9yKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIGlmICghYnl0ZXNSZWFkKSB7Ci0gICAgICAgIGdfaW5wdXRfc3RyZWFt
X2Nsb3NlX2FzeW5jKGQtPm1faW5wdXRTdHJlYW0sIEdfUFJJT1JJVFlfREVGQVVMVCwKKyAgICAg
ICAgZ19pbnB1dF9zdHJlYW1fY2xvc2VfYXN5bmMoZC0+bV9pbnB1dFN0cmVhbS5nZXQoKSwgR19Q
UklPUklUWV9ERUZBVUxULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBj
bG9zZUNhbGxiYWNrLCAwKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGQtPm1fdG90
YWwgKz0gYnl0ZXNSZWFkOwotICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURhdGEoaGFuZGxlLmdldCgp
LCBkLT5tX2J1ZmZlciwgYnl0ZXNSZWFkLCBkLT5tX3RvdGFsKTsKLQotICAgIC8vIGRpZFJlY2Vp
dmVEYXRhIG1heSBjYW5jZWwgdGhlIGxvYWQsIHdoaWNoIG1heSByZWxlYXNlIHRoZSBsYXN0IHJl
ZmVyZW5jZS4KLSAgICBpZiAoZC0+bV9jYW5jZWxsZWQpIHsKLSAgICAgICAgY2xlYW51cEdpb09w
ZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwotICAgICAgICByZXR1cm47CisgICAgaWYgKEdfTElLRUxZ
KCFjb252ZXJ0VG9VVEYxNikpCisgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURhdGEoaGFuZGxl
LmdldCgpLCBkLT5tX2J1ZmZlciwgYnl0ZXNSZWFkLCBkLT5tX3RvdGFsKTsKKyAgICBlbHNlIHsK
KyAgICAgICAgLy8gV2UgaGF2ZSB0byBjb252ZXJ0IGl0IHRvIFVURi0xNiBkdWUgdG8gbGltaXRh
dGlvbnMgaW4gS1VSTAorICAgICAgICBTdHJpbmcgZGF0YSA9IFN0cmluZzo6ZnJvbVVURjgoZC0+
bV9idWZmZXIsIGJ5dGVzUmVhZCk7CisgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURhdGEoaGFu
ZGxlLmdldCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihkYXRhLmNoYXJhY3RlcnMo
KSksIGRhdGEubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpLCAwKTsKICAgICB9CiAKLSAgICBnX2lu
cHV0X3N0cmVhbV9yZWFkX2FzeW5jKGQtPm1faW5wdXRTdHJlYW0sIGQtPm1fYnVmZmVyLCBkLT5t
X2J1ZmZlclNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BSSU9SSVRZX0RF
RkFVTFQsIGQtPm1fY2FuY2VsbGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZWFkQ2FsbGJhY2ssIDApOwotfQotCi1zdGF0aWMgdm9pZCBvcGVuQ2FsbGJhY2soR09iamVjdCog
c291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIpCi17Ci0gICAgUmVmUHRyPFJlc291
cmNlSGFuZGxlPiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGdfb2JqZWN0
X2dldF9kYXRhKHNvdXJjZSwgIndlYmtpdC1yZXNvdXJjZSIpKTsKLSAgICBpZiAoIWhhbmRsZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRs
ZS0+Z2V0SW50ZXJuYWwoKTsKLSAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0gaGFu
ZGxlLT5jbGllbnQoKTsKLQorICAgIC8vIGRpZFJlY2VpdmVEYXRhIG1heSBjYW5jZWwgdGhlIGxv
YWQsIHdoaWNoIG1heSByZWxlYXNlIHRoZSBsYXN0IHJlZmVyZW5jZS4KICAgICBpZiAoZC0+bV9j
YW5jZWxsZWQgfHwgIWNsaWVudCkgewotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRs
ZS5nZXQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBHRXJyb3IqIGVycm9yID0g
MDsKLSAgICBHRmlsZUlucHV0U3RyZWFtKiBpbiA9IGdfZmlsZV9yZWFkX2ZpbmlzaChHX0ZJTEUo
c291cmNlKSwgcmVzLCAmZXJyb3IpOwotICAgIGlmIChlcnJvcikgewotICAgICAgICBjaGFyKiB1
cmkgPSBnX2ZpbGVfZ2V0X3VyaShkLT5tX2dmaWxlKTsKLSAgICAgICAgUmVzb3VyY2VFcnJvciBy
ZXNvdXJjZUVycm9yKGdfcXVhcmtfdG9fc3RyaW5nKEdfSU9fRVJST1IpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3ItPmNvZGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1cmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlcnJvciA/IFN0cmluZzo6ZnJvbVVURjgoZXJyb3ItPm1lc3NhZ2UpIDogU3RyaW5nKCkpOwot
ICAgICAgICBnX2ZyZWUodXJpKTsKLSAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKLSAgICAg
ICAgY2xlYW51cEdpb09wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwotICAgICAgICBjbGllbnQtPmRp
ZEZhaWwoaGFuZGxlLmdldCgpLCByZXNvdXJjZUVycm9yKTsKKyAgICAgICAgY2xlYW51cFNvdXBS
ZXF1ZXN0T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBkLT5tX2lucHV0U3RyZWFtID0gR19JTlBVVF9TVFJFQU0oaW4pOwotICAgIGQtPm1fYnVm
ZmVyU2l6ZSA9IDgxOTI7Ci0gICAgZC0+bV9idWZmZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oZ19t
YWxsb2MoZC0+bV9idWZmZXJTaXplKSk7Ci0gICAgZC0+bV90b3RhbCA9IDA7Ci0KLSAgICBnX29i
amVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5tX2lucHV0U3RyZWFtKSwgIndlYmtpdC1yZXNvdXJj
ZSIsIGhhbmRsZS5nZXQoKSk7Ci0gICAgZ19pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyhkLT5tX2lu
cHV0U3RyZWFtLCBkLT5tX2J1ZmZlciwgZC0+bV9idWZmZXJTaXplLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR19QUklPUklUWV9ERUZBVUxULCBkLT5tX2NhbmNlbGxhYmxlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZENhbGxiYWNrLCAwKTsKKyAgICBnX2lucHV0
X3N0cmVhbV9yZWFkX2FzeW5jKGQtPm1faW5wdXRTdHJlYW0uZ2V0KCksIGQtPm1fYnVmZmVyLCBS
RUFEX0JVRkZFUl9TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QUklPUklU
WV9ERUZBVUxULCBkLT5tX2NhbmNlbGxhYmxlLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVhZENhbGxiYWNrLCBkYXRhKTsKIH0KIAotc3RhdGljIHZvaWQgcXVlcnlJbmZv
Q2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIpCi17
Ci0gICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxSZXNvdXJj
ZUhhbmRsZSo+KGdfb2JqZWN0X2dldF9kYXRhKHNvdXJjZSwgIndlYmtpdC1yZXNvdXJjZSIpKTsK
LSAgICBpZiAoIWhhbmRsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVzb3VyY2VIYW5kbGVJ
bnRlcm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKLSAgICBSZXNvdXJjZUhhbmRsZUNs
aWVudCogY2xpZW50ID0gaGFuZGxlLT5jbGllbnQoKTsKLQotICAgIGlmIChkLT5tX2NhbmNlbGxl
ZCkgewotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOwotCi0gICAg
Y2hhciogdXJpID0gZ19maWxlX2dldF91cmkoZC0+bV9nZmlsZSk7Ci0gICAgcmVzcG9uc2Uuc2V0
VVJMKEtVUkwoS1VSTCgpLCB1cmkpKTsKLSAgICBnX2ZyZWUodXJpKTsKLQotICAgIEdFcnJvciog
ZXJyb3IgPSAwOwotICAgIEdGaWxlSW5mbyogaW5mbyA9IGdfZmlsZV9xdWVyeV9pbmZvX2Zpbmlz
aChkLT5tX2dmaWxlLCByZXMsICZlcnJvcik7Ci0KLSAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAg
Ly8gRklYTUU6IHRvIGJlIGFibGUgdG8gaGFuZGxlIGZ0cCBVUklzIHByb3Blcmx5LCB3ZSBtdXN0
Ci0gICAgICAgIC8vIGNoZWNrIGlmIHRoZSBlcnJvciBpcyBHX0lPX0VSUk9SX05PVF9NT1VOVEVE
LCBhbmQgaWYgc28sCi0gICAgICAgIC8vIGNhbGwgZ19maWxlX21vdW50X2VuY2xvc2luZ192b2x1
bWUoKSB0byBtb3VudCB0aGUgZnRwCi0gICAgICAgIC8vIHNlcnZlciAoYW5kIHRoZW4ga2VlcCB0
cmFjayBvZiB0aGUgZmFjdCB0aGF0IHdlIG1vdW50ZWQgaXQsCi0gICAgICAgIC8vIGFuZCBzZXQg
YSB0aW1lb3V0IHRvIHVubW91bnQgaXQgbGF0ZXIgYWZ0ZXIgaXQncyBiZWVuIGlkbGUKLSAgICAg
ICAgLy8gZm9yIGEgd2hpbGUpLgotICAgICAgICBjaGFyKiB1cmkgPSBnX2ZpbGVfZ2V0X3VyaShk
LT5tX2dmaWxlKTsKLSAgICAgICAgUmVzb3VyY2VFcnJvciByZXNvdXJjZUVycm9yKGdfcXVhcmtf
dG9fc3RyaW5nKEdfSU9fRVJST1IpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXJyb3ItPmNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA/IFN0cmluZzo6ZnJv
bVVURjgoZXJyb3ItPm1lc3NhZ2UpIDogU3RyaW5nKCkpOwotICAgICAgICBnX2ZyZWUodXJpKTsK
LSAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKLSAgICAgICAgY2xlYW51cEdpb09wZXJhdGlv
bihoYW5kbGUuZ2V0KCkpOwotICAgICAgICBjbGllbnQtPmRpZEZhaWwoaGFuZGxlLmdldCgpLCBy
ZXNvdXJjZUVycm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChnX2ZpbGVf
aW5mb19nZXRfZmlsZV90eXBlKGluZm8pICE9IEdfRklMRV9UWVBFX1JFR1VMQVIpIHsKLSAgICAg
ICAgLy8gRklYTUU6IHdoYXQgaWYgdGhlIFVSSSBwb2ludHMgdG8gYSBkaXJlY3Rvcnk/IFNob3Vs
ZCB3ZQotICAgICAgICAvLyBnZW5lcmF0ZSBhIGxpc3Rpbmc/IEhvdz8gV2hhdCBkbyBvdGhlciBi
YWNrZW5kcyBkbyBoZXJlPwotICAgICAgICBjaGFyKiB1cmkgPSBnX2ZpbGVfZ2V0X3VyaShkLT5t
X2dmaWxlKTsKLSAgICAgICAgUmVzb3VyY2VFcnJvciByZXNvdXJjZUVycm9yKGdfcXVhcmtfdG9f
c3RyaW5nKEdfSU9fRVJST1IpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R19JT19FUlJPUl9GQUlMRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
cmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcoKSk7Ci0gICAg
ICAgIGdfZnJlZSh1cmkpOwotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQo
KSk7Ci0gICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIHJlc291cmNlRXJyb3Ip
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQWNjb3JkaW5nIHRvIGh0dHA6Ly9s
aWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9naW8vc3RhYmxlL2dpby1HQ29udGVudFR5cGUuaHRtbAot
ICAgIC8vIEdDb250ZW50VHlwZSBvbiBVbml4IGlzIHRoZSBtaW1lIHR5cGUsIGJ1dCBub3Qgb24g
V2luMzIuCi0gICAgR093blB0cjxnY2hhcj4gbWltZVR5cGUoZ19jb250ZW50X3R5cGVfZ2V0X21p
bWVfdHlwZShnX2ZpbGVfaW5mb19nZXRfY29udGVudF90eXBlKGluZm8pKSk7Ci0gICAgcmVzcG9u
c2Uuc2V0TWltZVR5cGUobWltZVR5cGUuZ2V0KCkpOwotICAgIHJlc3BvbnNlLnNldEV4cGVjdGVk
Q29udGVudExlbmd0aChnX2ZpbGVfaW5mb19nZXRfc2l6ZShpbmZvKSk7Ci0KLSAgICBHVGltZVZh
bCB0djsKLSAgICBnX2ZpbGVfaW5mb19nZXRfbW9kaWZpY2F0aW9uX3RpbWUoaW5mbywgJnR2KTsK
LSAgICByZXNwb25zZS5zZXRMYXN0TW9kaWZpZWREYXRlKHR2LnR2X3NlYyk7Ci0KLSAgICBjbGll
bnQtPmRpZFJlY2VpdmVSZXNwb25zZShoYW5kbGUuZ2V0KCksIHJlc3BvbnNlKTsKLQotICAgIGlm
IChkLT5tX2NhbmNlbGxlZCkgewotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5n
ZXQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBnX2ZpbGVfcmVhZF9hc3luYyhk
LT5tX2dmaWxlLCBHX1BSSU9SSVRZX0RFRkFVTFQsIGQtPm1fY2FuY2VsbGFibGUsCi0gICAgICAg
ICAgICAgICAgICAgICAgb3BlbkNhbGxiYWNrLCAwKTsKLX0KIHN0YXRpYyBib29sIHN0YXJ0R2lv
KFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIEtVUkwgdXJsKQogewogICAgIEFTU0VSVChoYW5kbGUp
OwogCi0gICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwo
KTsKLQogICAgIGlmIChoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmh0dHBNZXRob2QoKSAhPSAiR0VU
IiAmJiBoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmh0dHBNZXRob2QoKSAhPSAiUE9TVCIpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAorICAgIFNvdXBTZXNzaW9uKiBzZXNzaW9uID0gaGFuZGxlLT5k
ZWZhdWx0U2Vzc2lvbigpOworICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUt
PmdldEludGVybmFsKCk7CisKICAgICAvLyBHSU8gZG9lc24ndCBrbm93IGhvdyB0byBoYW5kbGUg
cmVmcyBhbmQgcXVlcmllcywgc28gcmVtb3ZlIHRoZW0KICAgICAvLyBUT0RPOiB1c2UgS1VSTC5m
aWxlU3lzdGVtUGF0aCBhZnRlciBLVVJMR3RrIGFuZCBGaWxlU3lzdGVtR3RrIGFyZQogICAgIC8v
IHVzaW5nIEdJTyBpbnRlcm5hbGx5LCBhbmQgcHJvdmlkaW5nIFVSSXMgaW5zdGVhZCBvZiBmaWxl
IHBhdGhzCiAgICAgdXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwogICAgIHVybC5zZXRR
dWVyeShTdHJpbmcoKSk7CiAgICAgdXJsLnJlbW92ZVBvcnQoKTsKKyAgICBDU3RyaW5nIHVybFN0
ciA9IHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpOwogCi0jaWYgIU9TKFdJTkRPV1MpCi0gICAg
Ly8gd2UgYXZvaWQgdGhlIGVzY2FwaW5nIGZvciBsb2NhbCBmaWxlcywgYmVjYXVzZQotICAgIC8v
IGdfZmlsZW5hbWVfZnJvbV91cmkgKHVzZWQgaW50ZXJuYWxseSBieSBHRmlsZSkgaGFzIHByb2Js
ZW1zCi0gICAgLy8gZGVjb2Rpbmcgc3RyaW5ncyB3aXRoIGFyYml0cmFyeSBwZXJjZW50IHNpZ25z
Ci0gICAgaWYgKHVybC5pc0xvY2FsRmlsZSgpKQotICAgICAgICBkLT5tX2dmaWxlID0gZ19maWxl
X25ld19mb3JfcGF0aCh1cmwucHJldHR5VVJMKCkudXRmOCgpLmRhdGEoKSArIHNpemVvZigiZmls
ZTovLyIpIC0gMSk7Ci0gICAgZWxzZQotI2VuZGlmCi0gICAgICAgIGQtPm1fZ2ZpbGUgPSBnX2Zp
bGVfbmV3X2Zvcl91cmkodXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGdfb2JqZWN0
X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1fZ2ZpbGUpLCAid2Via2l0LXJlc291cmNlIiwgaGFuZGxl
KTsKKyAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgZC0+bV9zb3VwUmVxdWVzdCA9IGFk
b3B0UGxhdGZvcm1SZWYod2Via2l0X3NvdXBfcmVxdWVzdGVyX3JlcXVlc3QoZC0+bV9yZXF1ZXN0
ZXIuZ2V0KCksIHVybFN0ci5kYXRhKCksIHNlc3Npb24sICZlcnJvci5vdXRQdHIoKSkpOworICAg
IGlmIChlcnJvcikgeworICAgICAgICBkLT5tX3NvdXBSZXF1ZXN0ID0gMDsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1f
c291cFJlcXVlc3QuZ2V0KCkpLCAid2Via2l0LXJlc291cmNlIiwgaGFuZGxlKTsKIAotICAgIC8v
IGJhbGFuY2VkIGJ5IGEgZGVyZWYoKSBpbiBjbGVhbnVwR2lvT3BlcmF0aW9uLCB3aGljaCBzaG91
bGQgYWx3YXlzIHJ1bgorICAgIC8vIGJhbGFuY2VkIGJ5IGEgZGVyZWYoKSBpbiBjbGVhbnVwU291
cFJlcXVlc3RPcGVyYXRpb24sIHdoaWNoIHNob3VsZCBhbHdheXMgcnVuCiAgICAgaGFuZGxlLT5y
ZWYoKTsKIAotICAgIGQtPm1fY2FuY2VsbGFibGUgPSBnX2NhbmNlbGxhYmxlX25ldygpOwotICAg
IGdfZmlsZV9xdWVyeV9pbmZvX2FzeW5jKGQtPm1fZ2ZpbGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9UWVBFICIsIgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfQ09OVEVOVF9UWVBFICIs
IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRf
U0laRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX0ZJTEVfUVVFUllfSU5GT19OT05F
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUFJJT1JJVFlfREVGQVVMVCwgZC0+bV9j
YW5jZWxsYWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeUluZm9DYWxsYmFj
aywgMCk7CisgICAgZC0+bV9jYW5jZWxsYWJsZSA9IGFkb3B0UGxhdGZvcm1SZWYoZ19jYW5jZWxs
YWJsZV9uZXcoKSk7CisgICAgd2Via2l0X3NvdXBfcmVxdWVzdF9zZW5kX2FzeW5jKGQtPm1fc291
cFJlcXVlc3QuZ2V0KCksIGQtPm1fY2FuY2VsbGFibGUuZ2V0KCksIHNlbmRSZXF1ZXN0Q2FsbGJh
Y2ssIDApOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0LmgKaW5kZXggYTFkOTE2Zi4uOTJkYWJhZCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0LmgK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0LmgKQEAg
LTY3LDggKzY3LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgdXBkYXRlRnJv
bVNvdXBNZXNzYWdlKHNvdXBNZXNzYWdlKTsKICAgICAgICAgfQogCisgICAgICAgIHZvaWQgdXBk
YXRlU291cE1lc3NhZ2UoU291cE1lc3NhZ2UqKSBjb25zdDsKICAgICAgICAgU291cE1lc3NhZ2Uq
IHRvU291cE1lc3NhZ2UoKSBjb25zdDsKLSAgICAgICAgdm9pZCB1cGRhdGVGcm9tU291cE1lc3Nh
Z2UoU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlKTsKKyAgICAgICAgdm9pZCB1cGRhdGVGcm9tU291
cE1lc3NhZ2UoU291cE1lc3NhZ2UqKTsKIAogICAgICAgICBTb3VwTWVzc2FnZUZsYWdzIHNvdXBN
ZXNzYWdlRmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX3NvdXBGbGFnczsgfQogICAgICAgICB2b2lk
IHNldFNvdXBNZXNzYWdlRmxhZ3MoU291cE1lc3NhZ2VGbGFncyBzb3VwRmxhZ3MpIHsgbV9zb3Vw
RmxhZ3MgPSBzb3VwRmxhZ3M7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHAKaW5kZXggNjJkZWIwMS4uMzgwZmM4NCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291
cC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0
U291cC5jcHAKQEAgLTMzLDYgKzMzLDI5IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAordm9pZCBSZXNvdXJjZVJlcXVlc3Q6OnVwZGF0ZVNvdXBNZXNzYWdl
KFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSkgY29uc3QKK3sKKyAgICBnX29iamVjdF9zZXQoc291
cE1lc3NhZ2UsIFNPVVBfTUVTU0FHRV9NRVRIT0QsIGh0dHBNZXRob2QoKS51dGY4KCkuZGF0YSgp
LCBOVUxMKTsKKworICAgIGNvbnN0IEhUVFBIZWFkZXJNYXAmIGhlYWRlcnMgPSBodHRwSGVhZGVy
RmllbGRzKCk7CisgICAgU291cE1lc3NhZ2VIZWFkZXJzKiBzb3VwSGVhZGVycyA9IHNvdXBNZXNz
YWdlLT5yZXF1ZXN0X2hlYWRlcnM7CisgICAgaWYgKCFoZWFkZXJzLmlzRW1wdHkoKSkgeworICAg
ICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJzLmVuZCgpOwor
ICAgICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVy
c19hcHBlbmQoc291cEhlYWRlcnMsIGl0LT5maXJzdC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBp
dC0+c2Vjb25kLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKworI2lmZGVmIEhBVkVfTElCU09VUF8y
XzI5XzkwCisgICAgU3RyaW5nIGZpcnN0UGFydHlTdHJpbmcgPSBmaXJzdFBhcnR5Rm9yQ29va2ll
cygpLnN0cmluZygpOworICAgIGlmICghZmlyc3RQYXJ0eVN0cmluZy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgR093blB0cjxTb3VwVVJJPiBmaXJzdFBhcnR5KHNvdXBfdXJpX25ldyhmaXJzdFBhcnR5
U3RyaW5nLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9maXJzdF9w
YXJ0eShzb3VwTWVzc2FnZSwgZmlyc3RQYXJ0eS5nZXQoKSk7CisgICAgfQorI2VuZGlmCisKKyAg
ICBzb3VwX21lc3NhZ2Vfc2V0X2ZsYWdzKHNvdXBNZXNzYWdlLCBtX3NvdXBGbGFncyk7Cit9CisK
IFNvdXBNZXNzYWdlKiBSZXNvdXJjZVJlcXVlc3Q6OnRvU291cE1lc3NhZ2UoKSBjb25zdAogewog
ICAgIFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSA9IHNvdXBfbWVzc2FnZV9uZXcoaHR0cE1ldGhv
ZCgpLnV0ZjgoKS5kYXRhKCksIHVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwpkaWZmIC0t
Z2l0IGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCBl
MGMzMmI4Li4xZDc5ZGQyIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9X
ZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEwLTEwLTAxICBTZXJnaW8g
VmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIEFkZCBIVFRQIGNhY2hpbmcgc3VwcG9y
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQyNjEK
KworICAgICAgICBSZXNvdXJjZUhhbmRsZSdzIG1fbXNnIHJlbmFtZWQgdG8gbV9zb3VwTXNnIGFu
ZCBpdCdzIGFsc28gbm93IGEgUGxhdGZvcm1SZWZQdHIKKworICAgICAgICAqIHdlYmtpdC93ZWJr
aXRkb3dubG9hZC5jcHA6CisgICAgICAgICh3ZWJraXRfZG93bmxvYWRfbmV3X3dpdGhfaGFuZGxl
KToKKyAgICAgICAgKHdlYmtpdF9kb3dubG9hZF9zdGFydCk6CisKIDIwMTAtMDktMjYgIEplbm4g
QnJhaXRod2FpdGUgIDxqZW5uYkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
QWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2Fk
LmNwcCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmNwcAppbmRleCAxNDcyY2I1
Li5jODRlOTVhIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkb3dubG9hZC5j
cHAKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuY3BwCkBAIC00MTksOCAr
NDE5LDggQEAgV2ViS2l0RG93bmxvYWQqIHdlYmtpdF9kb3dubG9hZF9uZXdfd2l0aF9oYW5kbGUo
V2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QsIFcKICAgICBnX3JldHVybl92YWxfaWZfZmFp
bChyZXF1ZXN0LCBOVUxMKTsKIAogICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5k
bGUtPmdldEludGVybmFsKCk7Ci0gICAgaWYgKGQtPm1fbXNnKQotICAgICAgICBzb3VwX3Nlc3Np
b25fcGF1c2VfbWVzc2FnZSh3ZWJraXRfZ2V0X2RlZmF1bHRfc2Vzc2lvbigpLCBkLT5tX21zZyk7
CisgICAgaWYgKGQtPm1fc291cE1zZykKKyAgICAgICAgc291cF9zZXNzaW9uX3BhdXNlX21lc3Nh
Z2Uod2Via2l0X2dldF9kZWZhdWx0X3Nlc3Npb24oKSwgZC0+bV9zb3VwTXNnLmdldCgpKTsKIAog
ICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9hZCA9IFdFQktJVF9ET1dOTE9BRChnX29iamVjdF9u
ZXcoV0VCS0lUX1RZUEVfRE9XTkxPQUQsICJuZXR3b3JrLXJlcXVlc3QiLCByZXF1ZXN0LCBOVUxM
KSk7CiAgICAgV2ViS2l0RG93bmxvYWRQcml2YXRlKiBwcml2ID0gZG93bmxvYWQtPnByaXY7CkBA
IC00OTIsOCArNDkyLDggQEAgdm9pZCB3ZWJraXRfZG93bmxvYWRfc3RhcnQoV2ViS2l0RG93bmxv
YWQqIGRvd25sb2FkKQogICAgICAgICBwcml2LT5yZXNvdXJjZUhhbmRsZS0+c2V0Q2xpZW50KHBy
aXYtPmRvd25sb2FkQ2xpZW50KTsKIAogICAgICAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBk
ID0gcHJpdi0+cmVzb3VyY2VIYW5kbGUtPmdldEludGVybmFsKCk7Ci0gICAgICAgIGlmIChkLT5t
X21zZykKLSAgICAgICAgICAgIHNvdXBfc2Vzc2lvbl91bnBhdXNlX21lc3NhZ2Uod2Via2l0X2dl
dF9kZWZhdWx0X3Nlc3Npb24oKSwgZC0+bV9tc2cpOworICAgICAgICBpZiAoZC0+bV9zb3VwTXNn
KQorICAgICAgICAgICAgc291cF9zZXNzaW9uX3VucGF1c2VfbWVzc2FnZSh3ZWJraXRfZ2V0X2Rl
ZmF1bHRfc2Vzc2lvbigpLCBkLT5tX3NvdXBNc2cuZ2V0KCkpOwogICAgIH0KIAogICAgIHByaXYt
PnRpbWVyID0gZ190aW1lcl9uZXcoKTsKLS0gCjEuNy4xCgo=
</data>
<flag name="review"
          id="59142"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69611</attachid>
            <date>2010-10-04 03:35:40 -0700</date>
            <delta_ts>2010-10-13 11:08:38 -0700</delta_ts>
            <desc>WebKitGtk+ to use the new API from the imported SoupURILoader code</desc>
            <filename>0002-WebKitGtk-to-use-the-new-API-from-the-imported-SoupU.patch</filename>
            <type>text/plain</type>
            <size>39856</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">RnJvbSBhNzRiYmMxODBkNWNjNTU0YWIwMGZmOTU5NTE1YWJiMjUzOTBkMmQxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTZXJnaW8gVmlsbGFyIFNlbmluIDxzdmlsbGFyQGlnYWxpYS5j
b20+CkRhdGU6IFdlZCwgMjIgU2VwIDIwMTAgMTA6MTg6MDYgKzAyMDAKU3ViamVjdDogW1BBVENI
IDIvMl0gV2ViS2l0R3RrKyB0byB1c2UgdGhlIG5ldyBBUEkgZnJvbSB0aGUgaW1wb3J0ZWQgU291
cFVSSUxvYWRlciBjb2RlCgotLS0KIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhh
bmRsZUludGVybmFsLmggIHwgICAyMyArLQogLi4uL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNv
dXJjZUhhbmRsZVNvdXAuY3BwICAgfCAgNTYzICsrKysrKysrKy0tLS0tLS0tLS0tCiBXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3QuaCAgICB8ICAgIDMgKy0KIC4u
Li9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHAgIHwgICAyMyAr
CiBXZWJLaXQvZ3RrL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
MTMgKwogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuY3BwICAgICAgICAgICAgICAg
fCAgICA4ICstCiA2IGZpbGVzIGNoYW5nZWQsIDMwMSBpbnNlcnRpb25zKCspLCAzMzIgZGVsZXRp
b25zKC0pCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFu
ZGxlSW50ZXJuYWwuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUlu
dGVybmFsLmgKaW5kZXggOTZmYmYwMC4uOWNjY2VjZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCkBAIC00Niw2ICs0Niw4IEBACiAj
ZW5kaWYKIAogI2lmIFVTRShTT1VQKQorI2luY2x1ZGUgInNvdXAtcmVxdWVzdGVyLmgiCisjaW5j
bHVkZSA8R1JlZlB0ci5oPgogI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgogY2xhc3MgRnJhbWU7
CiAjZW5kaWYKQEAgLTEwOCwxNSArMTEwLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgICAgICwgbV9mb3JtRGF0YVN0cmVhbShsb2FkZXIpCiAjZW5kaWYKICNpZiBVU0UoU09VUCkK
LSAgICAgICAgICAgICwgbV9tc2coMCkKICAgICAgICAgICAgICwgbV9jYW5jZWxsZWQoZmFsc2Up
Ci0gICAgICAgICAgICAsIG1fZ2ZpbGUoMCkKLSAgICAgICAgICAgICwgbV9pbnB1dFN0cmVhbSgw
KQotICAgICAgICAgICAgLCBtX2NhbmNlbGxhYmxlKDApCiAgICAgICAgICAgICAsIG1fYnVmZmVy
KDApCi0gICAgICAgICAgICAsIG1fYnVmZmVyU2l6ZSgwKQogICAgICAgICAgICAgLCBtX3RvdGFs
KDApCiAgICAgICAgICAgICAsIG1faWRsZUhhbmRsZXIoMCkKKyAgICAgICAgICAgICwgbV9nb3RD
aHVua0hhbmRsZXIoMCkKICNlbmRpZgogI2lmIFBMQVRGT1JNKFFUKQogICAgICAgICAgICAgLCBt
X2pvYigwKQpAQCAtMTMzLDYgKzEzMSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
ICAgIG1fdXNlciA9IHVybC51c2VyKCk7CiAgICAgICAgICAgICBtX3Bhc3MgPSB1cmwucGFzcygp
OwogICAgICAgICAgICAgbV9maXJzdFJlcXVlc3QucmVtb3ZlQ3JlZGVudGlhbHMoKTsKKyNpZiBV
U0UoU09VUCkKKyAgICAgICAgICAgIG1fcmVxdWVzdGVyID0gYWRvcHRQbGF0Zm9ybVJlZih3ZWJr
aXRfc291cF9yZXF1ZXN0ZXJfbmV3KCkpOworI2VuZGlmCiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIH5SZXNvdXJjZUhhbmRsZUludGVybmFsKCk7CkBAIC0xODUsMTYgKzE4NiwxOCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFZlY3RvcjxjaGFyPiBtX3Bvc3RCeXRlczsKICNl
bmRpZgogI2lmIFVTRShTT1VQKQotICAgICAgICBTb3VwTWVzc2FnZSogbV9tc2c7CisgICAgICAg
IFBsYXRmb3JtUmVmUHRyPFNvdXBNZXNzYWdlPiBtX3NvdXBNZXNzYWdlOwogICAgICAgICBSZXNv
dXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7CiAgICAgICAgIGJvb2wgbV9jYW5jZWxsZWQ7Ci0gICAg
ICAgIEdGaWxlKiBtX2dmaWxlOwotICAgICAgICBHSW5wdXRTdHJlYW0qIG1faW5wdXRTdHJlYW07
Ci0gICAgICAgIEdDYW5jZWxsYWJsZSogbV9jYW5jZWxsYWJsZTsKKyAgICAgICAgUGxhdGZvcm1S
ZWZQdHI8V2ViS2l0U291cFJlcXVlc3Q+IG1fc291cFJlcXVlc3Q7CisgICAgICAgIFBsYXRmb3Jt
UmVmUHRyPFdlYktpdFNvdXBSZXF1ZXN0ZXI+IG1fcmVxdWVzdGVyOworICAgICAgICBQbGF0Zm9y
bVJlZlB0cjxHSW5wdXRTdHJlYW0+IG1faW5wdXRTdHJlYW07CisgICAgICAgIFBsYXRmb3JtUmVm
UHRyPEdDYW5jZWxsYWJsZT4gbV9jYW5jZWxsYWJsZTsKICAgICAgICAgY2hhciogbV9idWZmZXI7
Ci0gICAgICAgIGdzaXplIG1fYnVmZmVyU2l6ZSwgbV90b3RhbDsKKyAgICAgICAgZ3NpemUgbV90
b3RhbDsKICAgICAgICAgZ3VpbnQgbV9pZGxlSGFuZGxlcjsKICAgICAgICAgUmVmUHRyPE5ldHdv
cmtpbmdDb250ZXh0PiBtX2NvbnRleHQ7CisgICAgICAgIGd1bG9uZyBtX2dvdENodW5rSGFuZGxl
cjsKICNlbmRpZgogI2lmIFBMQVRGT1JNKFFUKQogICAgICAgICBRTmV0d29ya1JlcGx5SGFuZGxl
ciogbV9qb2I7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNv
dXJjZUhhbmRsZVNvdXAuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3Vy
Y2VIYW5kbGVTb3VwLmNwcAppbmRleCAwZDg0Mzg4Li5mNzY4ZDhmIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKQEAgLTQ1
LDggKzQ1LDggQEAKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUludGVybmFsLmgiCiAjaW5jbHVk
ZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1
ZGUgInNvdXAtcmVxdWVzdC1odHRwLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCi0KICNp
bmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8Z2lvL2dpby5o
PgpAQCAtNTgsNiArNTgsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNkZWZpbmUgUkVB
RF9CVUZGRVJfU0laRSA4MTkyCisKIGNsYXNzIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlciA6IHB1
YmxpYyBSZXNvdXJjZUhhbmRsZUNsaWVudCwgcHVibGljIE5vbmNvcHlhYmxlIHsKIHB1YmxpYzoK
ICAgICBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXIoUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVz
cG9uc2UgJiwgVmVjdG9yPGNoYXI+Jik7CkBAIC0xMjAsMTYgKzEyMiwxNiBAQCB2b2lkIFdlYkNv
cmVTeW5jaHJvbm91c0xvYWRlcjo6cnVuKCkKICAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFp
bkxvb3ApOwogfQogCi1zdGF0aWMgdm9pZCBjbGVhbnVwR2lvT3BlcmF0aW9uKFJlc291cmNlSGFu
ZGxlKiBoYW5kbGUsIGJvb2wgaXNEZXN0cm95aW5nKTsKLXN0YXRpYyBib29sIHN0YXJ0RGF0YShS
ZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBTdHJpbmcgdXJsU3RyaW5nKTsKLXN0YXRpYyBib29sIHN0
YXJ0R2lvKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIEtVUkwgdXJsKTsKK3N0YXRpYyB2b2lkIGNs
ZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihSZXNvdXJjZUhhbmRsZSosIGJvb2wgaXNEZXN0cm95
aW5nKTsKK3N0YXRpYyB2b2lkIHNlbmRSZXF1ZXN0Q2FsbGJhY2soR09iamVjdCosIEdBc3luY1Jl
c3VsdCosIGdwb2ludGVyKTsKK3N0YXRpYyB2b2lkIHJlYWRDYWxsYmFjayhHT2JqZWN0KiwgR0Fz
eW5jUmVzdWx0KiwgZ3BvaW50ZXIpOworc3RhdGljIHZvaWQgY2xvc2VDYWxsYmFjayhHT2JqZWN0
KiwgR0FzeW5jUmVzdWx0KiwgZ3BvaW50ZXIpOworc3RhdGljIGJvb2wgc3RhcnRHaW8oUmVzb3Vy
Y2VIYW5kbGUqLCBLVVJMKTsKIAogUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6flJlc291cmNlSGFu
ZGxlSW50ZXJuYWwoKQogewotICAgIGlmIChtX21zZykgewotICAgICAgICBnX29iamVjdF91bnJl
ZihtX21zZyk7Ci0gICAgICAgIG1fbXNnID0gMDsKLSAgICB9CisgICAgaWYgKG1fc291cFJlcXVl
c3QpCisgICAgICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKG1fc291cFJlcXVlc3QuZ2V0
KCkpLCAid2Via2l0LXJlc291cmNlIiwgMCk7CiAKICAgICBpZiAobV9pZGxlSGFuZGxlcikgewog
ICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9pZGxlSGFuZGxlcik7CkBAIC0xMzksMTEgKzE0MSw3
IEBAIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6On5SZXNvdXJjZUhhbmRsZUludGVybmFsKCkKIAog
UmVzb3VyY2VIYW5kbGU6On5SZXNvdXJjZUhhbmRsZSgpCiB7Ci0gICAgaWYgKGQtPm1fbXNnKQot
ICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQoZC0+bV9tc2csIEdf
U0lHTkFMX01BVENIX0RBVEEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLCAwLCAwLCAwLCB0aGlzKTsKLQotICAgIGNsZWFudXBHaW9PcGVyYXRpb24odGhp
cywgdHJ1ZSk7CisgICAgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKHRoaXMsIHRydWUpOwog
fQogCiB2b2lkIFJlc291cmNlSGFuZGxlOjpwcmVwYXJlRm9yVVJMKGNvbnN0IEtVUkwgJnVybCkK
QEAgLTE4NSw5ICsxODMsOCBAQCBzdGF0aWMgdm9pZCByZXN0YXJ0ZWRDYWxsYmFjayhTb3VwTWVz
c2FnZSogbXNnLCBncG9pbnRlciBkYXRhKQogICAgIGlmIChkLT5tX2NhbmNlbGxlZCkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgY2hhciogdXJpID0gc291cF91cmlfdG9fc3RyaW5nKHNvdXBfbWVz
c2FnZV9nZXRfdXJpKG1zZyksIGZhbHNlKTsKLSAgICBTdHJpbmcgbG9jYXRpb24gPSBTdHJpbmco
dXJpKTsKLSAgICBnX2ZyZWUodXJpKTsKKyAgICBHT3duUHRyPGNoYXI+IHVyaShzb3VwX3VyaV90
b19zdHJpbmcoc291cF9tZXNzYWdlX2dldF91cmkobXNnKSwgZmFsc2UpKTsKKyAgICBTdHJpbmcg
bG9jYXRpb24gPSBTdHJpbmc6OmZyb21VVEY4KHVyaS5nZXQoKSk7CiAgICAgS1VSTCBuZXdVUkwg
PSBLVVJMKGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCksIGxvY2F0aW9uKTsKIAogICAgIFJl
c291cmNlUmVxdWVzdCByZXF1ZXN0ID0gaGFuZGxlLT5maXJzdFJlcXVlc3QoKTsKQEAgLTIxMyw3
ICsyMTAsNyBAQCBzdGF0aWMgdm9pZCByZXN0YXJ0ZWRDYWxsYmFjayhTb3VwTWVzc2FnZSogbXNn
LCBncG9pbnRlciBkYXRhKQogICAgIFN0cmluZyBmaXJzdFBhcnR5U3RyaW5nID0gcmVxdWVzdC5m
aXJzdFBhcnR5Rm9yQ29va2llcygpLnN0cmluZygpOwogICAgIGlmICghZmlyc3RQYXJ0eVN0cmlu
Zy5pc0VtcHR5KCkpIHsKICAgICAgICAgR093blB0cjxTb3VwVVJJPiBmaXJzdFBhcnR5KHNvdXBf
dXJpX25ldyhmaXJzdFBhcnR5U3RyaW5nLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICAgICAgc291cF9t
ZXNzYWdlX3NldF9maXJzdF9wYXJ0eShkLT5tX21zZywgZmlyc3RQYXJ0eS5nZXQoKSk7CisgICAg
ICAgIHNvdXBfbWVzc2FnZV9zZXRfZmlyc3RfcGFydHkoZC0+bV9zb3VwTWVzc2FnZS5nZXQoKSwg
Zmlyc3RQYXJ0eS5nZXQoKSk7CiAgICAgfQogI2VuZGlmCiB9CkBAIC0yOTMsNTMgKzI5MCw5IEBA
IHN0YXRpYyB2b2lkIGdvdENodW5rQ2FsbGJhY2soU291cE1lc3NhZ2UqIG1zZywgU291cEJ1ZmZl
ciogY2h1bmssIGdwb2ludGVyIGRhdGEpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNsaWVudC0+
ZGlkUmVjZWl2ZURhdGEoaGFuZGxlLmdldCgpLCBjaHVuay0+ZGF0YSwgY2h1bmstPmxlbmd0aCwg
ZmFsc2UpOwotfQotCi0vLyBDYWxsZWQgYXQgdGhlIGVuZCBvZiB0aGUgbWVzc2FnZSwgd2l0aCBh
bGwgdGhlIG5lY2Vzc2FyeSBhYm91dCB0aGUgbGFzdCBpbmZvcm1hdGlvbnMuCi0vLyBEb2Vzbid0
IGdldCBjYWxsZWQgZm9yIHJlZGlyZWN0cy4KLXN0YXRpYyB2b2lkIGZpbmlzaGVkQ2FsbGJhY2so
U291cFNlc3Npb24gKnNlc3Npb24sIFNvdXBNZXNzYWdlKiBtc2csIGdwb2ludGVyIGRhdGEpCi17
Ci0gICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUgPSBhZG9wdFJlZihzdGF0aWNfY2Fz
dDxSZXNvdXJjZUhhbmRsZSo+KGRhdGEpKTsKLSAgICAvLyBUT0RPOiBtYXliZSB3ZSBzaG91bGQg
cnVuIHRoaXMgY29kZSBldmVuIGlmIHRoZXJlJ3Mgbm8gY2xpZW50PwotICAgIGlmICghaGFuZGxl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0gaGFu
ZGxlLT5nZXRJbnRlcm5hbCgpOwotCi0gICAgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCA9
IGhhbmRsZS0+Y2xpZW50KCk7Ci0gICAgaWYgKCFjbGllbnQpCi0gICAgICAgIHJldHVybjsKIAot
ICAgIGlmIChkLT5tX2NhbmNlbGxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKFNPVVBf
U1RBVFVTX0lTX1RSQU5TUE9SVF9FUlJPUihtc2ctPnN0YXR1c19jb2RlKSkgewotICAgICAgICBj
aGFyKiB1cmkgPSBzb3VwX3VyaV90b19zdHJpbmcoc291cF9tZXNzYWdlX2dldF91cmkobXNnKSwg
ZmFsc2UpOwotICAgICAgICBSZXNvdXJjZUVycm9yIGVycm9yKGdfcXVhcmtfdG9fc3RyaW5nKFNP
VVBfSFRUUF9FUlJPUiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLT5zdGF0dXNf
Y29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU3RyaW5nOjpmcm9tVVRGOChtc2ctPnJlYXNvbl9waHJhc2UpKTsKLSAgICAg
ICAgZ19mcmVlKHVyaSk7Ci0gICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIGVy
cm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtc2ctPnN0YXR1c19jb2Rl
ID09IFNPVVBfU1RBVFVTX1VOQVVUSE9SSVpFRCkgewotICAgICAgICBmaWxsUmVzcG9uc2VGcm9t
TWVzc2FnZShtc2csICZkLT5tX3Jlc3BvbnNlKTsKLSAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZl
UmVzcG9uc2UoaGFuZGxlLmdldCgpLCBkLT5tX3Jlc3BvbnNlKTsKLQotICAgICAgICAvLyBXZWJD
b3JlIG1pZ2h0IGhhdmUgY2FuY2VsbGVkIHRoZSBqb2IgaW4gdGhlIHdoaWxlCi0gICAgICAgIGlm
IChkLT5tX2NhbmNlbGxlZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAobXNn
LT5yZXNwb25zZV9ib2R5LT5kYXRhKQotICAgICAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0
YShoYW5kbGUuZ2V0KCksIG1zZy0+cmVzcG9uc2VfYm9keS0+ZGF0YSwgbXNnLT5yZXNwb25zZV9i
b2R5LT5sZW5ndGgsIHRydWUpOwotICAgIH0KLQotICAgIGNsaWVudC0+ZGlkRmluaXNoTG9hZGlu
ZyhoYW5kbGUuZ2V0KCksIDApOwogfQogCi0vLyBwYXJzZURhdGFVcmwoKSBpcyB0YWtlbiBmcm9t
IHRoZSBDVVJMIGh0dHAgYmFja2VuZC4KIHN0YXRpYyBnYm9vbGVhbiBwYXJzZURhdGFVcmwoZ3Bv
aW50ZXIgY2FsbGJhY2tEYXRhKQogewogICAgIFJlc291cmNlSGFuZGxlKiBoYW5kbGUgPSBzdGF0
aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGNhbGxiYWNrRGF0YSk7CkBAIC0zNjQsNyArMzE3LDYg
QEAgc3RhdGljIGdib29sZWFuIHBhcnNlRGF0YVVybChncG9pbnRlciBjYWxsYmFja0RhdGEpCiAg
ICAgfQogCiAgICAgU3RyaW5nIG1lZGlhVHlwZSA9IHVybC5zdWJzdHJpbmcoNSwgaW5kZXggLSA1
KTsKLSAgICBTdHJpbmcgZGF0YSA9IHVybC5zdWJzdHJpbmcoaW5kZXggKyAxKTsKIAogICAgIGJv
b2wgaXNCYXNlNjQgPSBtZWRpYVR5cGUuZW5kc1dpdGgoIjtiYXNlNjQiLCBmYWxzZSk7CiAgICAg
aWYgKGlzQmFzZTY0KQpAQCAtMzgwLDQyICszMzIsNDEgQEAgc3RhdGljIGdib29sZWFuIHBhcnNl
RGF0YVVybChncG9pbnRlciBjYWxsYmFja0RhdGEpCiAgICAgcmVzcG9uc2Uuc2V0VVJMKGhhbmRs
ZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkpOwogICAgIHJlc3BvbnNlLnNldE1pbWVUeXBlKG1pbWVU
eXBlKTsKIAotICAgIGlmIChpc0Jhc2U2NCkgewotICAgICAgICBkYXRhID0gZGVjb2RlVVJMRXNj
YXBlU2VxdWVuY2VzKGRhdGEpOwotICAgICAgICByZXNwb25zZS5zZXRUZXh0RW5jb2RpbmdOYW1l
KGNoYXJzZXQpOwotICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShoYW5kbGUsIHJl
c3BvbnNlKTsKLQotICAgICAgICAvLyBUaGUgbG9hZCBtYXkgYmUgY2FuY2VsbGVkLCBhbmQgdGhl
IGNsaWVudCBtYXkgYmUgZGVzdHJveWVkCi0gICAgICAgIC8vIGJ5IGFueSBvZiB0aGUgY2xpZW50
IHJlcG9ydGluZyBjYWxscywgc28gd2UgY2hlY2ssIGFuZCBiYWlsCi0gICAgICAgIC8vIG91dCBp
biBlaXRoZXIgb2YgdGhvc2UgY2FzZXMuCi0gICAgICAgIGlmIChkLT5tX2NhbmNlbGxlZCB8fCAh
aGFuZGxlLT5jbGllbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAv
LyBVc2UgdGhlIEdMaWIgQmFzZTY0LCBzaW5jZSBXZWJDb3JlJ3MgZGVjb2RlciBpc24ndAotICAg
ICAgICAvLyBnZW5lcmFsLXB1cnBvc2UgYW5kIGZhaWxzIG9uIEFjaWQzIHRlc3QgOTcgKHdoaXRl
c3BhY2UpLgotICAgICAgICBzaXplX3Qgb3V0TGVuZ3RoID0gMDsKLSAgICAgICAgY2hhciogb3V0
RGF0YSA9IDA7Ci0gICAgICAgIG91dERhdGEgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihnX2Jh
c2U2NF9kZWNvZGUoZGF0YS51dGY4KCkuZGF0YSgpLCAmb3V0TGVuZ3RoKSk7Ci0gICAgICAgIGlm
IChvdXREYXRhICYmIG91dExlbmd0aCA+IDApCi0gICAgICAgICAgICBjbGllbnQtPmRpZFJlY2Vp
dmVEYXRhKGhhbmRsZSwgb3V0RGF0YSwgb3V0TGVuZ3RoLCAwKTsKLSAgICAgICAgZ19mcmVlKG91
dERhdGEpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFdlIGhhdmUgdG8gY29udmVydCB0byBV
VEYtMTYgZWFybHkgZHVlIHRvIGxpbWl0YXRpb25zIGluIEtVUkwKLSAgICAgICAgZGF0YSA9IGRl
Y29kZVVSTEVzY2FwZVNlcXVlbmNlcyhkYXRhLCBUZXh0RW5jb2RpbmcoY2hhcnNldCkpOwotICAg
ICAgICByZXNwb25zZS5zZXRUZXh0RW5jb2RpbmdOYW1lKCJVVEYtMTYiKTsKLSAgICAgICAgY2xp
ZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UoaGFuZGxlLCByZXNwb25zZSk7Ci0KLSAgICAgICAgaWYg
KGQtPm1fY2FuY2VsbGVkIHx8ICFoYW5kbGUtPmNsaWVudCgpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgICAgIGlmIChkYXRhLmxlbmd0aCgpID4gMCkKLSAgICAgICAgICAgIGNs
aWVudC0+ZGlkUmVjZWl2ZURhdGEoaGFuZGxlLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIq
PihkYXRhLmNoYXJhY3RlcnMoKSksIGRhdGEubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpLCAwKTsK
LSAgICB9CisgICAgLy8gRm9yIG5vbiBiYXNlNjQgZW5jb2RlZCBkYXRhIHdlIGhhdmUgdG8gY29u
dmVydCB0byBVVEYtMTYgZWFybHkKKyAgICAvLyBkdWUgdG8gbGltaXRhdGlvbnMgaW4gS1VSTAor
ICAgIHJlc3BvbnNlLnNldFRleHRFbmNvZGluZ05hbWUoaXNCYXNlNjQgPyBjaGFyc2V0IDogIlVU
Ri0xNiIpOworICAgIGNsaWVudC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGhhbmRsZSwgcmVzcG9uc2Up
OwogCisgICAgLy8gVGhlIGxvYWQgbWF5IGJlIGNhbmNlbGxlZCwgYW5kIHRoZSBjbGllbnQgbWF5
IGJlIGRlc3Ryb3llZAorICAgIC8vIGJ5IGFueSBvZiB0aGUgY2xpZW50IHJlcG9ydGluZyBjYWxs
cywgc28gd2UgY2hlY2ssIGFuZCBiYWlsCisgICAgLy8gb3V0IGluIGVpdGhlciBvZiB0aG9zZSBj
YXNlcy4KICAgICBpZiAoZC0+bV9jYW5jZWxsZWQgfHwgIWhhbmRsZS0+Y2xpZW50KCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIGNsaWVudC0+ZGlkRmluaXNoTG9hZGluZyhoYW5kbGUs
IDApOworICAgIFNvdXBTZXNzaW9uKiBzZXNzaW9uID0gaGFuZGxlLT5kZWZhdWx0U2Vzc2lvbigp
OworICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBkLT5tX3NvdXBSZXF1ZXN0ID0gYWRv
cHRQbGF0Zm9ybVJlZih3ZWJraXRfc291cF9yZXF1ZXN0ZXJfcmVxdWVzdChkLT5tX3JlcXVlc3Rl
ci5nZXQoKSwgaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0
YSgpLCBzZXNzaW9uLCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAg
ICAgZC0+bV9zb3VwUmVxdWVzdCA9IDA7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBkLT5tX2lucHV0U3RyZWFtID0gYWRvcHRQbGF0Zm9ybVJlZih3ZWJraXRfc291cF9yZXF1
ZXN0X3NlbmQoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSwgMCwgJmVycm9yLm91dFB0cigpKSk7Cisg
ICAgaWYgKGVycm9yKSB7CisgICAgICAgIGQtPm1faW5wdXRTdHJlYW0gPSAwOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZC0+bV9idWZmZXIgPSBzdGF0aWNfY2FzdDxjaGFy
Kj4oZ19zbGljZV9hbGxvYzAoUkVBRF9CVUZGRVJfU0laRSkpOworICAgIGQtPm1fdG90YWwgPSAw
OworCisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9pbnB1dFN0cmVhbS5nZXQo
KSksICJ3ZWJraXQtcmVzb3VyY2UiLCBoYW5kbGUpOworICAgIC8vIGJhbGFuY2VkIGJ5IGEgZGVy
ZWYoKSBpbiBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24sIHdoaWNoIHNob3VsZCBhbHdheXMg
cnVuCisgICAgaGFuZGxlLT5yZWYoKTsKKworICAgIGQtPm1fY2FuY2VsbGFibGUgPSBhZG9wdFBs
YXRmb3JtUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpOworICAgIGdfaW5wdXRfc3RyZWFtX3JlYWRf
YXN5bmMoZC0+bV9pbnB1dFN0cmVhbS5nZXQoKSwgZC0+bV9idWZmZXIsIFJFQURfQlVGRkVSX1NJ
WkUsIEdfUFJJT1JJVFlfREVGQVVMVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQt
Pm1fY2FuY2VsbGFibGUuZ2V0KCksIHJlYWRDYWxsYmFjaywgR0lOVF9UT19QT0lOVEVSKCFpc0Jh
c2U2NCkpOwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtNDY5LDYgKzQyMCwxMzIgQEAgc3Rh
dGljIHZvaWQgZW5zdXJlU2Vzc2lvbklzSW5pdGlhbGl6ZWQoU291cFNlc3Npb24qIHNlc3Npb24p
CiAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1Qoc2Vzc2lvbiksICJ3ZWJraXQtaW5pdCIs
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KDB4ZGVhZGJlZWYpKTsKIH0KIAorc3RhdGljIHZvaWQg
Y2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGJvb2wg
aXNEZXN0cm95aW5nID0gZmFsc2UpCit7CisgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9
IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKKworICAgIGlmIChkLT5tX3NvdXBSZXF1ZXN0KSB7Cisg
ICAgICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1fc291cFJlcXVlc3QuZ2V0KCkp
LCAid2Via2l0LXJlc291cmNlIiwgMCk7CisgICAgICAgIGQtPm1fc291cFJlcXVlc3QuY2xlYXIo
KTsKKyAgICB9CisKKyAgICBpZiAoZC0+bV9pbnB1dFN0cmVhbSkgeworICAgICAgICBnX29iamVj
dF9zZXRfZGF0YShHX09CSkVDVChkLT5tX2lucHV0U3RyZWFtLmdldCgpKSwgIndlYmtpdC1yZXNv
dXJjZSIsIDApOworICAgICAgICBkLT5tX2lucHV0U3RyZWFtLmNsZWFyKCk7CisgICAgfQorCisg
ICAgZC0+bV9jYW5jZWxsYWJsZS5jbGVhcigpOworCisgICAgaWYgKGQtPm1fc291cE1lc3NhZ2Up
IHsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKGQtPm1fc291
cE1lc3NhZ2UuZ2V0KCksIEdfU0lHTkFMX01BVENIX0RBVEEsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCBoYW5kbGUpOworICAgICAgICBk
LT5tX3NvdXBNZXNzYWdlLmNsZWFyKCk7CisgICAgfQorCisgICAgaWYgKGQtPm1fYnVmZmVyKSB7
CisgICAgICAgIGdfc2xpY2VfZnJlZTEoUkVBRF9CVUZGRVJfU0laRSwgZC0+bV9idWZmZXIpOwor
ICAgICAgICBkLT5tX2J1ZmZlciA9IDA7CisgICAgfQorCisgICAgaWYgKCFpc0Rlc3Ryb3lpbmcp
CisgICAgICAgIGhhbmRsZS0+ZGVyZWYoKTsKK30KKworc3RhdGljIHZvaWQgc2VuZFJlcXVlc3RD
YWxsYmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzLCBncG9pbnRlciB1c2Vy
RGF0YSkKK3sKKyAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9IHN0YXRpY19jYXN0
PFJlc291cmNlSGFuZGxlKj4oZ19vYmplY3RfZ2V0X2RhdGEoc291cmNlLCAid2Via2l0LXJlc291
cmNlIikpOworICAgIGlmICghaGFuZGxlKQorICAgICAgICByZXR1cm47CisKKyAgICBSZXNvdXJj
ZUhhbmRsZUludGVybmFsKiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOworICAgIFJlc291cmNl
SGFuZGxlQ2xpZW50KiBjbGllbnQgPSBoYW5kbGUtPmNsaWVudCgpOworCisgICAgaWYgKGQtPm1f
Z290Q2h1bmtIYW5kbGVyKSB7CisgICAgICAgIC8vIE5vIG5lZWQgdG8gY2FsbCBnb3RDaHVua0hh
bmRsZXIgYW55bW9yZS4gUmVjZWl2ZWQgZGF0YSB3aWxsCisgICAgICAgIC8vIGJlIHJlcG9ydGVk
IGJ5IHJlYWRDYWxsYmFjaworICAgICAgICBpZiAoZ19zaWduYWxfaGFuZGxlcl9pc19jb25uZWN0
ZWQoZC0+bV9zb3VwTWVzc2FnZS5nZXQoKSwgZC0+bV9nb3RDaHVua0hhbmRsZXIpKQorICAgICAg
ICAgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KGQtPm1fc291cE1lc3NhZ2UuZ2V0KCks
IGQtPm1fZ290Q2h1bmtIYW5kbGVyKTsKKyAgICB9CisKKyAgICBpZiAoZC0+bV9jYW5jZWxsZWQg
fHwgIWNsaWVudCkgeworICAgICAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxl
LmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEdPd25QdHI8R0Vycm9yPiBl
cnJvcjsKKyAgICBHSW5wdXRTdHJlYW0qIGluID0gd2Via2l0X3NvdXBfcmVxdWVzdF9zZW5kX2Zp
bmlzaChkLT5tX3NvdXBSZXF1ZXN0LmdldCgpLCByZXMsICZlcnJvci5vdXRQdHIoKSk7CisKKyAg
ICBpZiAoZXJyb3IpIHsKKyAgICAgICAgU291cE1lc3NhZ2UqIHNvdXBNc2cgPSBkLT5tX3NvdXBN
ZXNzYWdlLmdldCgpOworICAgICAgICBnYm9vbGVhbiBpc1RyYW5zcG9ydEVycm9yID0gZC0+bV9z
b3VwTWVzc2FnZSAmJiBTT1VQX1NUQVRVU19JU19UUkFOU1BPUlRfRVJST1Ioc291cE1zZy0+c3Rh
dHVzX2NvZGUpOworCisgICAgICAgIGlmIChpc1RyYW5zcG9ydEVycm9yIHx8IChlcnJvci0+ZG9t
YWluID09IEdfSU9fRVJST1IpKSB7CisgICAgICAgICAgICBTb3VwVVJJKiB1cmkgPSB3ZWJraXRf
c291cF9yZXF1ZXN0X2dldF91cmkoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSk7CisgICAgICAgICAg
ICBHT3duUHRyPGNoYXI+IHVyaVN0cihzb3VwX3VyaV90b19zdHJpbmcodXJpLCBmYWxzZSkpOwor
ICAgICAgICAgICAgZ2ludCBlcnJvckNvZGUgPSBpc1RyYW5zcG9ydEVycm9yID8gc291cE1zZy0+
c3RhdHVzX2NvZGUgOiBlcnJvci0+Y29kZTsKKyAgICAgICAgICAgIGNvbnN0IGdjaGFyKiBlcnJv
ck1zZyA9IGlzVHJhbnNwb3J0RXJyb3IgPyBzb3VwTXNnLT5yZWFzb25fcGhyYXNlIDogZXJyb3It
Pm1lc3NhZ2U7CisgICAgICAgICAgICBjb25zdCBnY2hhciogcXVhcmtTdHIgPSBpc1RyYW5zcG9y
dEVycm9yID8gZ19xdWFya190b19zdHJpbmcoU09VUF9IVFRQX0VSUk9SKSA6IGdfcXVhcmtfdG9f
c3RyaW5nKEdfSU9fRVJST1IpOworICAgICAgICAgICAgUmVzb3VyY2VFcnJvciByZXNvdXJjZUVy
cm9yKHF1YXJrU3RyLCBlcnJvckNvZGUsIHVyaVN0ci5nZXQoKSwgU3RyaW5nOjpmcm9tVVRGOChl
cnJvck1zZykpOworCisgICAgICAgICAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFu
ZGxlLmdldCgpKTsKKyAgICAgICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIHJl
c291cmNlRXJyb3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGQtPm1fc291cE1lc3NhZ2UgJiYgc291cE1lc3NhZ2UtPnN0YXR1c19jb2RlID09IFNPVVBf
U1RBVFVTX1VOQVVUSE9SSVpFRCkgeworICAgICAgICAgICAgZmlsbFJlc3BvbnNlRnJvbU1lc3Nh
Z2Uoc291cE1zZywgJmQtPm1fcmVzcG9uc2UpOworICAgICAgICAgICAgY2xpZW50LT5kaWRSZWNl
aXZlUmVzcG9uc2UoaGFuZGxlLmdldCgpLCBkLT5tX3Jlc3BvbnNlKTsKKworICAgICAgICAgICAg
Ly8gV2ViQ29yZSBtaWdodCBoYXZlIGNhbmNlbGxlZCB0aGUgam9iIGluIHRoZSB3aGlsZQorICAg
ICAgICAgICAgaWYgKCFkLT5tX2NhbmNlbGxlZCAmJiBzb3VwTXNnLT5yZXNwb25zZV9ib2R5LT5k
YXRhKQorICAgICAgICAgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURhdGEoaGFuZGxlLmdldCgp
LCBzb3VwTXNnLT5yZXNwb25zZV9ib2R5LT5kYXRhLCBzb3VwTXNnLT5yZXNwb25zZV9ib2R5LT5s
ZW5ndGgsIHRydWUpOworICAgICAgICB9CisKKyAgICAgICAgLy8gZGlkUmVjZWl2ZURhdGEgYWJv
dmUgbWlnaHQgaGF2ZSBjYW5jZWxsZWQgaXQKKyAgICAgICAgaWYgKGQtPm1fY2FuY2VsbGVkIHx8
ICFjbGllbnQpIHsKKyAgICAgICAgICAgIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5k
bGUuZ2V0KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY2xp
ZW50LT5kaWRGaW5pc2hMb2FkaW5nKGhhbmRsZS5nZXQoKSwgMCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoZC0+bV9jYW5jZWxsZWQpIHsKKyAgICAgICAgY2xlYW51cFNvdXBS
ZXF1ZXN0T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBkLT5tX2lucHV0U3RyZWFtID0gYWRvcHRQbGF0Zm9ybVJlZihpbik7CisgICAgZC0+bV9i
dWZmZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oZ19zbGljZV9hbGxvYzAoUkVBRF9CVUZGRVJfU0la
RSkpOworICAgIGQtPm1fdG90YWwgPSAwOworCisgICAgLy8gcmVhZENhbGxiYWNrIG5lZWRzIGl0
CisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9pbnB1dFN0cmVhbS5nZXQoKSks
ICJ3ZWJraXQtcmVzb3VyY2UiLCBoYW5kbGUuZ2V0KCkpOworCisgICAgLy8gV2UgbmVlZCB0byBj
aGVjayBpZiBpdCdzIGEgZmlsZTogVVJMIGFuZCBpZiBpdCBpcyBhIHJlZ3VsYXIKKyAgICAvLyBm
aWxlIGFzIGl0IGNvdWxkIGJlIGEgZGlyZWN0b3J5LiBJbiB0aGF0IGNhc2UgU291cCBwcm9wZXJs
eQorICAgIC8vIHJldHVybnMgYSBzdHJlYW0gd2hvc2UgY29udGVudCBpcyBhIEhUTUwgd2l0aCBh
IGxpc3Qgb2YgZmlsZXMKKyAgICAvLyBpbiB0aGUgZGlyZWN0b3J5CisgICAgaWYgKGVxdWFsSWdu
b3JpbmdDYXNlKGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkucHJvdG9jb2woKSwgImZpbGUi
KQorICAgICAgICAmJiBHX0lTX0ZJTEVfSU5QVVRfU1RSRUFNKGluKSkgeworICAgICAgICBSZXNv
dXJjZVJlc3BvbnNlIHJlc3BvbnNlOworCisgICAgICAgIHJlc3BvbnNlLnNldFVSTChoYW5kbGUt
PmZpcnN0UmVxdWVzdCgpLnVybCgpKTsKKyAgICAgICAgcmVzcG9uc2Uuc2V0TWltZVR5cGUod2Vi
a2l0X3NvdXBfcmVxdWVzdF9nZXRfY29udGVudF90eXBlKGQtPm1fc291cFJlcXVlc3QuZ2V0KCkp
KTsKKyAgICAgICAgcmVzcG9uc2Uuc2V0RXhwZWN0ZWRDb250ZW50TGVuZ3RoKHdlYmtpdF9zb3Vw
X3JlcXVlc3RfZ2V0X2NvbnRlbnRfbGVuZ3RoKGQtPm1fc291cFJlcXVlc3QuZ2V0KCkpKTsKKyAg
ICAgICAgY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UoaGFuZGxlLmdldCgpLCByZXNwb25zZSk7
CisKKyAgICAgICAgaWYgKGQtPm1fY2FuY2VsbGVkKSB7CisgICAgICAgICAgICBjbGVhbnVwU291
cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGdfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMoZC0+bV9pbnB1
dFN0cmVhbS5nZXQoKSwgZC0+bV9idWZmZXIsIFJFQURfQlVGRkVSX1NJWkUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHX1BSSU9SSVRZX0RFRkFVTFQsIGQtPm1fY2FuY2VsbGFibGUu
Z2V0KCksIHJlYWRDYWxsYmFjaywgMCk7Cit9CisKIHN0YXRpYyBib29sIHN0YXJ0SHR0cChSZXNv
dXJjZUhhbmRsZSogaGFuZGxlKQogewogICAgIEFTU0VSVChoYW5kbGUpOwpAQCAtNDgzLDI2ICs1
NjAsMzcgQEAgc3RhdGljIGJvb2wgc3RhcnRIdHRwKFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCiAg
ICAgdXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwogICAgIHJlcXVlc3Quc2V0VVJMKHVy
bCk7CiAKLSAgICBkLT5tX21zZyA9IHJlcXVlc3QudG9Tb3VwTWVzc2FnZSgpOwotICAgIGlmICgh
ZC0+bV9tc2cpCisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgIGQtPm1fc291cFJlcXVl
c3QgPSBhZG9wdFBsYXRmb3JtUmVmKHdlYmtpdF9zb3VwX3JlcXVlc3Rlcl9yZXF1ZXN0KGQtPm1f
cmVxdWVzdGVyLmdldCgpLCB1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc2Vzc2lvbiwgJmVy
cm9yLm91dFB0cigpKSk7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIGQtPm1fc291cFJlcXVl
c3QgPSAwOwogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZ19vYmplY3Rfc2V0
X2RhdGEoR19PQkpFQ1QoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSksICJ3ZWJraXQtcmVzb3VyY2Ui
LCBoYW5kbGUpOworCisgICAgZC0+bV9zb3VwTWVzc2FnZSA9IGFkb3B0UGxhdGZvcm1SZWYod2Vi
a2l0X3NvdXBfcmVxdWVzdF9odHRwX2dldF9tZXNzYWdlKFdFQktJVF9TT1VQX1JFUVVFU1RfSFRU
UChkLT5tX3NvdXBSZXF1ZXN0LmdldCgpKSkpOworICAgIGlmICghZC0+bV9zb3VwTWVzc2FnZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlID0g
ZC0+bV9zb3VwTWVzc2FnZS5nZXQoKTsKKyAgICByZXF1ZXN0LnVwZGF0ZVNvdXBNZXNzYWdlKHNv
dXBNZXNzYWdlKTsKIAogICAgIGlmICghaGFuZGxlLT5zaG91bGRDb250ZW50U25pZmYoKSkKLSAg
ICAgICAgc291cF9tZXNzYWdlX2Rpc2FibGVfZmVhdHVyZShkLT5tX21zZywgU09VUF9UWVBFX0NP
TlRFTlRfU05JRkZFUik7CisgICAgICAgIHNvdXBfbWVzc2FnZV9kaXNhYmxlX2ZlYXR1cmUoc291
cE1lc3NhZ2UsIFNPVVBfVFlQRV9DT05URU5UX1NOSUZGRVIpOwogCi0gICAgZ19zaWduYWxfY29u
bmVjdChkLT5tX21zZywgInJlc3RhcnRlZCIsIEdfQ0FMTEJBQ0socmVzdGFydGVkQ2FsbGJhY2sp
LCBoYW5kbGUpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoZC0+bV9tc2csICJnb3QtaGVhZGVycyIs
IEdfQ0FMTEJBQ0soZ290SGVhZGVyc0NhbGxiYWNrKSwgaGFuZGxlKTsKLSAgICBnX3NpZ25hbF9j
b25uZWN0KGQtPm1fbXNnLCAiY29udGVudC1zbmlmZmVkIiwgR19DQUxMQkFDSyhjb250ZW50U25p
ZmZlZENhbGxiYWNrKSwgaGFuZGxlKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KGQtPm1fbXNnLCAi
Z290LWNodW5rIiwgR19DQUxMQkFDSyhnb3RDaHVua0NhbGxiYWNrKSwgaGFuZGxlKTsKKyAgICBn
X3NpZ25hbF9jb25uZWN0KHNvdXBNZXNzYWdlLCAicmVzdGFydGVkIiwgR19DQUxMQkFDSyhyZXN0
YXJ0ZWRDYWxsYmFjayksIGhhbmRsZSk7CisgICAgZ19zaWduYWxfY29ubmVjdChzb3VwTWVzc2Fn
ZSwgImdvdC1oZWFkZXJzIiwgR19DQUxMQkFDSyhnb3RIZWFkZXJzQ2FsbGJhY2spLCBoYW5kbGUp
OworICAgIGdfc2lnbmFsX2Nvbm5lY3Qoc291cE1lc3NhZ2UsICJjb250ZW50LXNuaWZmZWQiLCBH
X0NBTExCQUNLKGNvbnRlbnRTbmlmZmVkQ2FsbGJhY2spLCBoYW5kbGUpOworICAgIGQtPm1fZ290
Q2h1bmtIYW5kbGVyID0gZ19zaWduYWxfY29ubmVjdChzb3VwTWVzc2FnZSwgImdvdC1jaHVuayIs
IEdfQ0FMTEJBQ0soZ290Q2h1bmtDYWxsYmFjayksIGhhbmRsZSk7CiAKICNpZmRlZiBIQVZFX0xJ
QlNPVVBfMl8yOV85MAogICAgIFN0cmluZyBmaXJzdFBhcnR5U3RyaW5nID0gcmVxdWVzdC5maXJz
dFBhcnR5Rm9yQ29va2llcygpLnN0cmluZygpOwogICAgIGlmICghZmlyc3RQYXJ0eVN0cmluZy5p
c0VtcHR5KCkpIHsKICAgICAgICAgR093blB0cjxTb3VwVVJJPiBmaXJzdFBhcnR5KHNvdXBfdXJp
X25ldyhmaXJzdFBhcnR5U3RyaW5nLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICAgICAgc291cF9tZXNz
YWdlX3NldF9maXJzdF9wYXJ0eShkLT5tX21zZywgZmlyc3RQYXJ0eS5nZXQoKSk7CisgICAgICAg
IHNvdXBfbWVzc2FnZV9zZXRfZmlyc3RfcGFydHkoc291cE1lc3NhZ2UsIGZpcnN0UGFydHkuZ2V0
KCkpOwogICAgIH0KICNlbmRpZgotICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1f
bXNnKSwgInJlc291cmNlSGFuZGxlIiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaGFuZGxlKSk7
CiAKICAgICBGb3JtRGF0YSogaHR0cEJvZHkgPSBkLT5tX2ZpcnN0UmVxdWVzdC5odHRwQm9keSgp
OwogICAgIGlmIChodHRwQm9keSAmJiAhaHR0cEJvZHktPmlzRW1wdHkoKSkgewpAQCAtNTEyLDcg
KzYwMCw3IEBAIHN0YXRpYyBib29sIHN0YXJ0SHR0cChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQog
ICAgICAgICBpZiAobnVtRWxlbWVudHMgPCAyKSB7CiAgICAgICAgICAgICBWZWN0b3I8Y2hhcj4g
Ym9keTsKICAgICAgICAgICAgIGh0dHBCb2R5LT5mbGF0dGVuKGJvZHkpOwotICAgICAgICAgICAg
c291cF9tZXNzYWdlX3NldF9yZXF1ZXN0KGQtPm1fbXNnLCBkLT5tX2ZpcnN0UmVxdWVzdC5odHRw
Q29udGVudFR5cGUoKS51dGY4KCkuZGF0YSgpLAorICAgICAgICAgICAgc291cF9tZXNzYWdlX3Nl
dF9yZXF1ZXN0KHNvdXBNZXNzYWdlLCBkLT5tX2ZpcnN0UmVxdWVzdC5odHRwQ29udGVudFR5cGUo
KS51dGY4KCkuZGF0YSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNP
VVBfTUVNT1JZX0NPUFksIGJvZHkuZGF0YSgpLCBib2R5LnNpemUoKSk7CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAvKgpAQCAtNTIxLDI3ICs2MDksMjUgQEAgc3RhdGljIGJvb2wgc3Rh
cnRIdHRwKFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCiAgICAgICAgICAgICAgKiBjb3B5aW5nIGlu
dG8gbWVtb3J5OyBUT0RPOiBzdXBwb3J0IHVwbG9hZCBvZiBub24tbG9jYWwKICAgICAgICAgICAg
ICAqICh0aGluayBzZnRwOi8vKSBmaWxlcyBieSB1c2luZyBHSU8/CiAgICAgICAgICAgICAgKi8K
LSAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X3NldF9hY2N1bXVsYXRlKGQtPm1fbXNnLT5y
ZXF1ZXN0X2JvZHksIEZBTFNFKTsKKyAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X3NldF9h
Y2N1bXVsYXRlKHNvdXBNZXNzYWdlLT5yZXF1ZXN0X2JvZHksIEZBTFNFKTsKICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykgewogICAgICAgICAgICAg
ICAgIGNvbnN0IEZvcm1EYXRhRWxlbWVudCYgZWxlbWVudCA9IGh0dHBCb2R5LT5lbGVtZW50cygp
W2ldOwogCiAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQubV90eXBlID09IEZvcm1EYXRhRWxl
bWVudDo6ZGF0YSkKLSAgICAgICAgICAgICAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5k
KGQtPm1fbXNnLT5yZXF1ZXN0X2JvZHksIFNPVVBfTUVNT1JZX1RFTVBPUkFSWSwgZWxlbWVudC5t
X2RhdGEuZGF0YSgpLCBlbGVtZW50Lm1fZGF0YS5zaXplKCkpOworICAgICAgICAgICAgICAgICAg
ICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQoc291cE1lc3NhZ2UtPnJlcXVlc3RfYm9keSwgU09V
UF9NRU1PUllfVEVNUE9SQVJZLCBlbGVtZW50Lm1fZGF0YS5kYXRhKCksIGVsZW1lbnQubV9kYXRh
LnNpemUoKSk7CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIC8q
CiAgICAgICAgICAgICAgICAgICAgICAqIG1hcHBpbmcgZm9yIHVwbG9hZGVkIGZpbGVzIGNvZGUg
aW5zcGlyZWQgYnkgdGVjaG5pcXVlIHVzZWQgaW4KICAgICAgICAgICAgICAgICAgICAgICogbGli
c291cCdzIHNpbXBsZS1odHRwZCB0ZXN0CiAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAg
ICAgICAgICAgICAgICBHRXJyb3IqIGVycm9yID0gMDsKKyAgICAgICAgICAgICAgICAgICAgR093
blB0cjxHRXJyb3I+IGVycm9yOwogICAgICAgICAgICAgICAgICAgICBDU3RyaW5nIGZpbGVOYW1l
ID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGVsZW1lbnQubV9maWxlbmFtZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIEdNYXBwZWRGaWxlKiBmaWxlTWFwcGluZyA9IGdfbWFwcGVkX2ZpbGVfbmV3
KGZpbGVOYW1lLmRhdGEoKSwgZmFsc2UsICZlcnJvcik7CisgICAgICAgICAgICAgICAgICAgIEdN
YXBwZWRGaWxlKiBmaWxlTWFwcGluZyA9IGdfbWFwcGVkX2ZpbGVfbmV3KGZpbGVOYW1lLmRhdGEo
KSwgZmFsc2UsICZlcnJvci5vdXRQdHIoKSk7CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKGVy
cm9yKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVk
KGQtPm1fbXNnLCBHX1NJR05BTF9NQVRDSF9EQVRBLAorICAgICAgICAgICAgICAgICAgICAgICAg
Z19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKHNvdXBNZXNzYWdlLCBHX1NJR05B
TF9NQVRDSF9EQVRBLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsIGhhbmRsZSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBnX29iamVjdF91bnJlZihkLT5tX21zZyk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBkLT5tX21zZyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBkLT5tX3NvdXBNZXNzYWdl
LmNsZWFyKCk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgICAgICAgICAgfQpAQCAtNTQ5LDM4ICs2MzUsMzEgQEAgc3RhdGljIGJvb2wgc3RhcnRI
dHRwKFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCiAgICAgICAgICAgICAgICAgICAgIFNvdXBCdWZm
ZXIqIHNvdXBCdWZmZXIgPSBzb3VwX2J1ZmZlcl9uZXdfd2l0aF9vd25lcihnX21hcHBlZF9maWxl
X2dldF9jb250ZW50cyhmaWxlTWFwcGluZyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX21hcHBlZF9maWxl
X2dldF9sZW5ndGgoZmlsZU1hcHBpbmcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU1hcHBpbmcsCi0j
aWYgR0xJQl9DSEVDS19WRVJTSU9OKDIsIDIxLCAzKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnBy
ZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oZ19tYXBwZWRfZmlsZV91bnJlZikpOwotI2Vsc2UKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdfbWFwcGVkX2Zp
bGVfZnJlZSkpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5
X2FwcGVuZF9idWZmZXIoZC0+bV9tc2ctPnJlcXVlc3RfYm9keSwgc291cEJ1ZmZlcik7CisgICAg
ICAgICAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZF9idWZmZXIoc291cE1lc3Nh
Z2UtPnJlcXVlc3RfYm9keSwgc291cEJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgICAgIHNvdXBf
YnVmZmVyX2ZyZWUoc291cEJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgfQogCi0gICAgLy8gYmFsYW5jZWQgYnkgYSBkZXJlZigpIGluIGZp
bmlzaGVkQ2FsbGJhY2ssIHdoaWNoIHNob3VsZCBhbHdheXMgcnVuCisgICAgLy8gYmFsYW5jZWQg
YnkgYSBkZXJlZigpIGluIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbiwgd2hpY2ggc2hvdWxk
IGFsd2F5cyBydW4KICAgICBoYW5kbGUtPnJlZigpOwogCiAgICAgLy8gTWFrZSBzdXJlIHdlIGhh
dmUgYW4gQWNjZXB0IGhlYWRlciBmb3Igc3VicmVzb3VyY2VzOyBzb21lIHNpdGVzCiAgICAgLy8g
d2FudCB0aGlzIHRvIHNlcnZlIHNvbWUgb2YgdGhlaXIgc3VicmVzb3VyY2VzCi0gICAgaWYgKCFz
b3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfb25lKGQtPm1fbXNnLT5yZXF1ZXN0X2hlYWRlcnMsICJB
Y2NlcHQiKSkKLSAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKGQtPm1fbXNnLT5y
ZXF1ZXN0X2hlYWRlcnMsICJBY2NlcHQiLCAiKi8qIik7CisgICAgaWYgKCFzb3VwX21lc3NhZ2Vf
aGVhZGVyc19nZXRfb25lKHNvdXBNZXNzYWdlLT5yZXF1ZXN0X2hlYWRlcnMsICJBY2NlcHQiKSkK
KyAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKHNvdXBNZXNzYWdlLT5yZXF1ZXN0
X2hlYWRlcnMsICJBY2NlcHQiLCAiKi8qIik7CiAKLSAgICAvLyBCYWxhbmNlZCBpbiBSZXNvdXJj
ZUhhbmRsZUludGVybmFsJ3MgZGVzdHJ1Y3Rvcjsgd2UgbmVlZCB0bwotICAgIC8vIGtlZXAgb3Vy
IG93biByZWYsIGJlY2F1c2UgYWZ0ZXIgcXVldWVpbmcgdGhlIG1lc3NhZ2UsIHRoZQotICAgIC8v
IHNlc3Npb24gb3ducyB0aGUgaW5pdGlhbCByZWZlcmVuY2UuCi0gICAgZ19vYmplY3RfcmVmKGQt
Pm1fbXNnKTsKLSAgICBzb3VwX3Nlc3Npb25fcXVldWVfbWVzc2FnZShzZXNzaW9uLCBkLT5tX21z
ZywgZmluaXNoZWRDYWxsYmFjaywgaGFuZGxlKTsKKyAgICBkLT5tX2NhbmNlbGxhYmxlID0gYWRv
cHRQbGF0Zm9ybVJlZihnX2NhbmNlbGxhYmxlX25ldygpKTsKKyAgICB3ZWJraXRfc291cF9yZXF1
ZXN0X3NlbmRfYXN5bmMoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSwgZC0+bV9jYW5jZWxsYWJsZS5n
ZXQoKSwgc2VuZFJlcXVlc3RDYWxsYmFjaywgMCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAog
Ym9vbCBSZXNvdXJjZUhhbmRsZTo6c3RhcnQoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQpCiB7
Ci0gICAgQVNTRVJUKCFkLT5tX21zZyk7CisgICAgQVNTRVJUKCFkLT5tX3NvdXBNZXNzYWdlKTsK
IAogICAgIC8vIFRoZSBmcmFtZSBjb3VsZCBiZSBudWxsIGlmIHRoZSBSZXNvdXJjZUhhbmRsZSBp
cyBub3QgYXNzb2NpYXRlZCB0byBhbnkKICAgICAvLyBGcmFtZSwgZS5nLiBpZiB3ZSBhcmUgZG93
bmxvYWRpbmcgYSBmaWxlLgpAQCAtNjIwLDEwICs2OTksMTAgQEAgYm9vbCBSZXNvdXJjZUhhbmRs
ZTo6c3RhcnQoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQpCiB2b2lkIFJlc291cmNlSGFuZGxl
OjpjYW5jZWwoKQogewogICAgIGQtPm1fY2FuY2VsbGVkID0gdHJ1ZTsKLSAgICBpZiAoZC0+bV9t
c2cpCi0gICAgICAgIHNvdXBfc2Vzc2lvbl9jYW5jZWxfbWVzc2FnZShkZWZhdWx0U2Vzc2lvbigp
LCBkLT5tX21zZywgU09VUF9TVEFUVVNfQ0FOQ0VMTEVEKTsKKyAgICBpZiAoZC0+bV9zb3VwTWVz
c2FnZSkKKyAgICAgICAgc291cF9zZXNzaW9uX2NhbmNlbF9tZXNzYWdlKGRlZmF1bHRTZXNzaW9u
KCksIGQtPm1fc291cE1lc3NhZ2UuZ2V0KCksIFNPVVBfU1RBVFVTX0NBTkNFTExFRCk7CiAgICAg
ZWxzZSBpZiAoZC0+bV9jYW5jZWxsYWJsZSkKLSAgICAgICAgZ19jYW5jZWxsYWJsZV9jYW5jZWwo
ZC0+bV9jYW5jZWxsYWJsZSk7CisgICAgICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKGQtPm1fY2Fu
Y2VsbGFibGUuZ2V0KCkpOwogfQogCiBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gUmVzb3VyY2VI
YW5kbGU6OmJ1ZmZlcmVkRGF0YSgpCkBAIC02NjcsMzggKzc0Niw2IEBAIHZvaWQgUmVzb3VyY2VI
YW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0CiAgICAgc3luY0xvYWRlci5ydW4oKTsKIH0KIAotLy8gR0lPLWJhc2VkIGxvYWRl
cgotCi1zdGF0aWMgdm9pZCBjbGVhbnVwR2lvT3BlcmF0aW9uKFJlc291cmNlSGFuZGxlKiBoYW5k
bGUsIGJvb2wgaXNEZXN0cm95aW5nID0gZmFsc2UpCi17Ci0gICAgUmVzb3VyY2VIYW5kbGVJbnRl
cm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKLQotICAgIGlmIChkLT5tX2dmaWxlKSB7
Ci0gICAgICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1fZ2ZpbGUpLCAid2Via2l0
LXJlc291cmNlIiwgMCk7Ci0gICAgICAgIGdfb2JqZWN0X3VucmVmKGQtPm1fZ2ZpbGUpOwotICAg
ICAgICBkLT5tX2dmaWxlID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoZC0+bV9jYW5jZWxsYWJsZSkg
ewotICAgICAgICBnX29iamVjdF91bnJlZihkLT5tX2NhbmNlbGxhYmxlKTsKLSAgICAgICAgZC0+
bV9jYW5jZWxsYWJsZSA9IDA7Ci0gICAgfQotCi0gICAgaWYgKGQtPm1faW5wdXRTdHJlYW0pIHsK
LSAgICAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9pbnB1dFN0cmVhbSksICJ3
ZWJraXQtcmVzb3VyY2UiLCAwKTsKLSAgICAgICAgZ19vYmplY3RfdW5yZWYoZC0+bV9pbnB1dFN0
cmVhbSk7Ci0gICAgICAgIGQtPm1faW5wdXRTdHJlYW0gPSAwOwotICAgIH0KLQotICAgIGlmIChk
LT5tX2J1ZmZlcikgewotICAgICAgICBnX2ZyZWUoZC0+bV9idWZmZXIpOwotICAgICAgICBkLT5t
X2J1ZmZlciA9IDA7Ci0gICAgfQotCi0gICAgaWYgKCFpc0Rlc3Ryb3lpbmcpCi0gICAgICAgIGhh
bmRsZS0+ZGVyZWYoKTsKLX0KLQogc3RhdGljIHZvaWQgY2xvc2VDYWxsYmFjayhHT2JqZWN0KiBz
b3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzLCBncG9pbnRlcikKIHsKICAgICBSZWZQdHI8UmVzb3Vy
Y2VIYW5kbGU+IGhhbmRsZSA9IHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxlKj4oZ19vYmplY3Rf
Z2V0X2RhdGEoc291cmNlLCAid2Via2l0LXJlc291cmNlIikpOwpAQCAtNzA4LDggKzc1NSw4IEBA
IHN0YXRpYyB2b2lkIGNsb3NlQ2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQq
IHJlcywgZ3BvaW50ZXIpCiAgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+
Z2V0SW50ZXJuYWwoKTsKICAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0gaGFuZGxl
LT5jbGllbnQoKTsKIAotICAgIGdfaW5wdXRfc3RyZWFtX2Nsb3NlX2ZpbmlzaChkLT5tX2lucHV0
U3RyZWFtLCByZXMsIDApOwotICAgIGNsZWFudXBHaW9PcGVyYXRpb24oaGFuZGxlLmdldCgpKTsK
KyAgICBnX2lucHV0X3N0cmVhbV9jbG9zZV9maW5pc2goZC0+bV9pbnB1dFN0cmVhbS5nZXQoKSwg
cmVzLCAwKTsKKyAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdldCgpKTsK
IAogICAgIC8vIFRoZSBsb2FkIG1heSBoYXZlIGJlZW4gY2FuY2VsbGVkLCB0aGUgY2xpZW50IG1h
eSBoYXZlIGJlZW4KICAgICAvLyBkZXN0cm95ZWQgYWxyZWFkeS4gSW4gc3VjaCBjYXNlcyBjYWxs
aW5nIGRpZEZpbmlzaExvYWRpbmcgaXMgYQpAQCAtNzIwLDIxMCArNzY3LDkyIEBAIHN0YXRpYyB2
b2lkIGNsb3NlQ2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3Bv
aW50ZXIpCiAgICAgY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKGhhbmRsZS5nZXQoKSwgMCk7CiB9
CiAKLXN0YXRpYyB2b2lkIHJlYWRDYWxsYmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3Vs
dCogcmVzLCBncG9pbnRlcikKK3N0YXRpYyB2b2lkIHJlYWRDYWxsYmFjayhHT2JqZWN0KiBzb3Vy
Y2UsIEdBc3luY1Jlc3VsdCogYXN5bmNSZXN1bHQsIGdwb2ludGVyIGRhdGEpCiB7CiAgICAgUmVm
UHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+
KGdfb2JqZWN0X2dldF9kYXRhKHNvdXJjZSwgIndlYmtpdC1yZXNvdXJjZSIpKTsKICAgICBpZiAo
IWhhbmRsZSkKICAgICAgICAgcmV0dXJuOwogCisgICAgYm9vbCBjb252ZXJ0VG9VVEYxNiA9IHN0
YXRpY19jYXN0PGJvb2w+KGRhdGEpOwogICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBo
YW5kbGUtPmdldEludGVybmFsKCk7CiAgICAgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCA9
IGhhbmRsZS0+Y2xpZW50KCk7CiAKICAgICBpZiAoZC0+bV9jYW5jZWxsZWQgfHwgIWNsaWVudCkg
ewotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAgIGNs
ZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgR0Vycm9yKiBlcnJvciA9IDA7CisgICAgR093blB0cjxHRXJyb3I+IGVy
cm9yOwogCi0gICAgZ3NzaXplIGJ5dGVzUmVhZCA9IGdfaW5wdXRfc3RyZWFtX3JlYWRfZmluaXNo
KGQtPm1faW5wdXRTdHJlYW0sIHJlcywgJmVycm9yKTsKKyAgICBnc3NpemUgYnl0ZXNSZWFkID0g
Z19pbnB1dF9zdHJlYW1fcmVhZF9maW5pc2goZC0+bV9pbnB1dFN0cmVhbS5nZXQoKSwgYXN5bmNS
ZXN1bHQsICZlcnJvci5vdXRQdHIoKSk7CiAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAgIGNoYXIq
IHVyaSA9IGdfZmlsZV9nZXRfdXJpKGQtPm1fZ2ZpbGUpOwotICAgICAgICBSZXNvdXJjZUVycm9y
IHJlc291cmNlRXJyb3IoZ19xdWFya190b19zdHJpbmcoR19JT19FUlJPUiksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvci0+Y29kZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVyaSwKKyAgICAgICAgU291cFVSSSogdXJpID0gd2Via2l0X3Nv
dXBfcmVxdWVzdF9nZXRfdXJpKGQtPm1fc291cFJlcXVlc3QuZ2V0KCkpOworICAgICAgICBHT3du
UHRyPGNoYXI+IHVyaVN0cihzb3VwX3VyaV90b19zdHJpbmcodXJpLCBmYWxzZSkpOworICAgICAg
ICBSZXNvdXJjZUVycm9yIHJlc291cmNlRXJyb3IoZ19xdWFya190b19zdHJpbmcoR19JT19FUlJP
UiksIGVycm9yLT5jb2RlLCB1cmlTdHIuZ2V0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlcnJvciA/IFN0cmluZzo6ZnJvbVVURjgoZXJyb3ItPm1lc3NhZ2UpIDogU3Ry
aW5nKCkpOwotICAgICAgICBnX2ZyZWUodXJpKTsKLSAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9y
KTsKLSAgICAgICAgY2xlYW51cEdpb09wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOworICAgICAgICBj
bGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKICAgICAgICAgY2xpZW50
LT5kaWRGYWlsKGhhbmRsZS5nZXQoKSwgcmVzb3VyY2VFcnJvcik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICBpZiAoIWJ5dGVzUmVhZCkgewotICAgICAgICBnX2lucHV0X3N0cmVhbV9j
bG9zZV9hc3luYyhkLT5tX2lucHV0U3RyZWFtLCBHX1BSSU9SSVRZX0RFRkFVTFQsCisgICAgICAg
IGdfaW5wdXRfc3RyZWFtX2Nsb3NlX2FzeW5jKGQtPm1faW5wdXRTdHJlYW0uZ2V0KCksIEdfUFJJ
T1JJVFlfREVGQVVMVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgY2xv
c2VDYWxsYmFjaywgMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBkLT5tX3RvdGFs
ICs9IGJ5dGVzUmVhZDsKLSAgICBjbGllbnQtPmRpZFJlY2VpdmVEYXRhKGhhbmRsZS5nZXQoKSwg
ZC0+bV9idWZmZXIsIGJ5dGVzUmVhZCwgZC0+bV90b3RhbCk7Ci0KLSAgICAvLyBkaWRSZWNlaXZl
RGF0YSBtYXkgY2FuY2VsIHRoZSBsb2FkLCB3aGljaCBtYXkgcmVsZWFzZSB0aGUgbGFzdCByZWZl
cmVuY2UuCi0gICAgaWYgKGQtPm1fY2FuY2VsbGVkKSB7Ci0gICAgICAgIGNsZWFudXBHaW9PcGVy
YXRpb24oaGFuZGxlLmdldCgpKTsKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChHX0xJS0VMWSgh
Y29udmVydFRvVVRGMTYpKQorICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVEYXRhKGhhbmRsZS5n
ZXQoKSwgZC0+bV9idWZmZXIsIGJ5dGVzUmVhZCwgZC0+bV90b3RhbCk7CisgICAgZWxzZSB7Cisg
ICAgICAgIC8vIFdlIGhhdmUgdG8gY29udmVydCBpdCB0byBVVEYtMTYgZHVlIHRvIGxpbWl0YXRp
b25zIGluIEtVUkwKKyAgICAgICAgU3RyaW5nIGRhdGEgPSBTdHJpbmc6OmZyb21VVEY4KGQtPm1f
YnVmZmVyLCBieXRlc1JlYWQpOworICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVEYXRhKGhhbmRs
ZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZGF0YS5jaGFyYWN0ZXJzKCkp
LCBkYXRhLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSwgMCk7CiAgICAgfQogCi0gICAgZ19pbnB1
dF9zdHJlYW1fcmVhZF9hc3luYyhkLT5tX2lucHV0U3RyZWFtLCBkLT5tX2J1ZmZlciwgZC0+bV9i
dWZmZXJTaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QUklPUklUWV9ERUZB
VUxULCBkLT5tX2NhbmNlbGxhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVh
ZENhbGxiYWNrLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgb3BlbkNhbGxiYWNrKEdPYmplY3QqIHNv
dXJjZSwgR0FzeW5jUmVzdWx0KiByZXMsIGdwb2ludGVyKQotewotICAgIFJlZlB0cjxSZXNvdXJj
ZUhhbmRsZT4gaGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihnX29iamVjdF9n
ZXRfZGF0YShzb3VyY2UsICJ3ZWJraXQtcmVzb3VyY2UiKSk7Ci0gICAgaWYgKCFoYW5kbGUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUt
PmdldEludGVybmFsKCk7Ci0gICAgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCA9IGhhbmRs
ZS0+Y2xpZW50KCk7Ci0KKyAgICAvLyBkaWRSZWNlaXZlRGF0YSBtYXkgY2FuY2VsIHRoZSBsb2Fk
LCB3aGljaCBtYXkgcmVsZWFzZSB0aGUgbGFzdCByZWZlcmVuY2UuCiAgICAgaWYgKGQtPm1fY2Fu
Y2VsbGVkIHx8ICFjbGllbnQpIHsKLSAgICAgICAgY2xlYW51cEdpb09wZXJhdGlvbihoYW5kbGUu
Z2V0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgR0Vycm9yKiBlcnJvciA9IDA7
Ci0gICAgR0ZpbGVJbnB1dFN0cmVhbSogaW4gPSBnX2ZpbGVfcmVhZF9maW5pc2goR19GSUxFKHNv
dXJjZSksIHJlcywgJmVycm9yKTsKLSAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgY2hhciogdXJp
ID0gZ19maWxlX2dldF91cmkoZC0+bV9nZmlsZSk7Ci0gICAgICAgIFJlc291cmNlRXJyb3IgcmVz
b3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0cmluZyhHX0lPX0VSUk9SKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVycm9yLT5jb2RlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdXJpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXJyb3IgPyBTdHJpbmc6OmZyb21VVEY4KGVycm9yLT5tZXNzYWdlKSA6IFN0cmluZygpKTsKLSAg
ICAgICAgZ19mcmVlKHVyaSk7Ci0gICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7Ci0gICAgICAg
IGNsZWFudXBHaW9PcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKLSAgICAgICAgY2xpZW50LT5kaWRG
YWlsKGhhbmRsZS5nZXQoKSwgcmVzb3VyY2VFcnJvcik7CisgICAgICAgIGNsZWFudXBTb3VwUmVx
dWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgZC0+bV9pbnB1dFN0cmVhbSA9IEdfSU5QVVRfU1RSRUFNKGluKTsKLSAgICBkLT5tX2J1ZmZl
clNpemUgPSA4MTkyOwotICAgIGQtPm1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGdfbWFs
bG9jKGQtPm1fYnVmZmVyU2l6ZSkpOwotICAgIGQtPm1fdG90YWwgPSAwOwotCi0gICAgZ19vYmpl
Y3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9pbnB1dFN0cmVhbSksICJ3ZWJraXQtcmVzb3VyY2Ui
LCBoYW5kbGUuZ2V0KCkpOwotICAgIGdfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMoZC0+bV9pbnB1
dFN0cmVhbSwgZC0+bV9idWZmZXIsIGQtPm1fYnVmZmVyU2l6ZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdfUFJJT1JJVFlfREVGQVVMVCwgZC0+bV9jYW5jZWxsYWJsZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRDYWxsYmFjaywgMCk7CisgICAgZ19pbnB1dF9z
dHJlYW1fcmVhZF9hc3luYyhkLT5tX2lucHV0U3RyZWFtLmdldCgpLCBkLT5tX2J1ZmZlciwgUkVB
RF9CVUZGRVJfU0laRSwgR19QUklPUklUWV9ERUZBVUxULAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZC0+bV9jYW5jZWxsYWJsZS5nZXQoKSwgcmVhZENhbGxiYWNrLCBkYXRhKTsKIH0K
IAotc3RhdGljIHZvaWQgcXVlcnlJbmZvQ2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNS
ZXN1bHQqIHJlcywgZ3BvaW50ZXIpCi17Ci0gICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5k
bGUgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGdfb2JqZWN0X2dldF9kYXRhKHNvdXJj
ZSwgIndlYmtpdC1yZXNvdXJjZSIpKTsKLSAgICBpZiAoIWhhbmRsZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwo
KTsKLSAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0gaGFuZGxlLT5jbGllbnQoKTsK
LQotICAgIGlmIChkLT5tX2NhbmNlbGxlZCkgewotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9u
KGhhbmRsZS5nZXQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZXNvdXJjZVJl
c3BvbnNlIHJlc3BvbnNlOwotCi0gICAgY2hhciogdXJpID0gZ19maWxlX2dldF91cmkoZC0+bV9n
ZmlsZSk7Ci0gICAgcmVzcG9uc2Uuc2V0VVJMKEtVUkwoS1VSTCgpLCB1cmkpKTsKLSAgICBnX2Zy
ZWUodXJpKTsKLQotICAgIEdFcnJvciogZXJyb3IgPSAwOwotICAgIEdGaWxlSW5mbyogaW5mbyA9
IGdfZmlsZV9xdWVyeV9pbmZvX2ZpbmlzaChkLT5tX2dmaWxlLCByZXMsICZlcnJvcik7Ci0KLSAg
ICBpZiAoZXJyb3IpIHsKLSAgICAgICAgLy8gRklYTUU6IHRvIGJlIGFibGUgdG8gaGFuZGxlIGZ0
cCBVUklzIHByb3Blcmx5LCB3ZSBtdXN0Ci0gICAgICAgIC8vIGNoZWNrIGlmIHRoZSBlcnJvciBp
cyBHX0lPX0VSUk9SX05PVF9NT1VOVEVELCBhbmQgaWYgc28sCi0gICAgICAgIC8vIGNhbGwgZ19m
aWxlX21vdW50X2VuY2xvc2luZ192b2x1bWUoKSB0byBtb3VudCB0aGUgZnRwCi0gICAgICAgIC8v
IHNlcnZlciAoYW5kIHRoZW4ga2VlcCB0cmFjayBvZiB0aGUgZmFjdCB0aGF0IHdlIG1vdW50ZWQg
aXQsCi0gICAgICAgIC8vIGFuZCBzZXQgYSB0aW1lb3V0IHRvIHVubW91bnQgaXQgbGF0ZXIgYWZ0
ZXIgaXQncyBiZWVuIGlkbGUKLSAgICAgICAgLy8gZm9yIGEgd2hpbGUpLgotICAgICAgICBjaGFy
KiB1cmkgPSBnX2ZpbGVfZ2V0X3VyaShkLT5tX2dmaWxlKTsKLSAgICAgICAgUmVzb3VyY2VFcnJv
ciByZXNvdXJjZUVycm9yKGdfcXVhcmtfdG9fc3RyaW5nKEdfSU9fRVJST1IpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3ItPmNvZGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1cmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlcnJvciA/IFN0cmluZzo6ZnJvbVVURjgoZXJyb3ItPm1lc3NhZ2UpIDogU3RyaW5nKCkp
OwotICAgICAgICBnX2ZyZWUodXJpKTsKLSAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKLSAg
ICAgICAgY2xlYW51cEdpb09wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwotICAgICAgICBjbGllbnQt
PmRpZEZhaWwoaGFuZGxlLmdldCgpLCByZXNvdXJjZUVycm9yKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmIChnX2ZpbGVfaW5mb19nZXRfZmlsZV90eXBlKGluZm8pICE9IEdfRklM
RV9UWVBFX1JFR1VMQVIpIHsKLSAgICAgICAgLy8gRklYTUU6IHdoYXQgaWYgdGhlIFVSSSBwb2lu
dHMgdG8gYSBkaXJlY3Rvcnk/IFNob3VsZCB3ZQotICAgICAgICAvLyBnZW5lcmF0ZSBhIGxpc3Rp
bmc/IEhvdz8gV2hhdCBkbyBvdGhlciBiYWNrZW5kcyBkbyBoZXJlPwotICAgICAgICBjaGFyKiB1
cmkgPSBnX2ZpbGVfZ2V0X3VyaShkLT5tX2dmaWxlKTsKLSAgICAgICAgUmVzb3VyY2VFcnJvciBy
ZXNvdXJjZUVycm9yKGdfcXVhcmtfdG9fc3RyaW5nKEdfSU9fRVJST1IpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR19JT19FUlJPUl9GQUlMRUQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1cmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTdHJpbmcoKSk7Ci0gICAgICAgIGdfZnJlZSh1cmkpOwotICAgICAgICBjbGVhbnVw
R2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7Ci0gICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5k
bGUuZ2V0KCksIHJlc291cmNlRXJyb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Ly8gQWNjb3JkaW5nIHRvIGh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9kZXZlbC9naW8vc3RhYmxl
L2dpby1HQ29udGVudFR5cGUuaHRtbAotICAgIC8vIEdDb250ZW50VHlwZSBvbiBVbml4IGlzIHRo
ZSBtaW1lIHR5cGUsIGJ1dCBub3Qgb24gV2luMzIuCi0gICAgR093blB0cjxnY2hhcj4gbWltZVR5
cGUoZ19jb250ZW50X3R5cGVfZ2V0X21pbWVfdHlwZShnX2ZpbGVfaW5mb19nZXRfY29udGVudF90
eXBlKGluZm8pKSk7Ci0gICAgcmVzcG9uc2Uuc2V0TWltZVR5cGUobWltZVR5cGUuZ2V0KCkpOwot
ICAgIHJlc3BvbnNlLnNldEV4cGVjdGVkQ29udGVudExlbmd0aChnX2ZpbGVfaW5mb19nZXRfc2l6
ZShpbmZvKSk7Ci0KLSAgICBHVGltZVZhbCB0djsKLSAgICBnX2ZpbGVfaW5mb19nZXRfbW9kaWZp
Y2F0aW9uX3RpbWUoaW5mbywgJnR2KTsKLSAgICByZXNwb25zZS5zZXRMYXN0TW9kaWZpZWREYXRl
KHR2LnR2X3NlYyk7Ci0KLSAgICBjbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShoYW5kbGUuZ2V0
KCksIHJlc3BvbnNlKTsKLQotICAgIGlmIChkLT5tX2NhbmNlbGxlZCkgewotICAgICAgICBjbGVh
bnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBnX2ZpbGVfcmVhZF9hc3luYyhkLT5tX2dmaWxlLCBHX1BSSU9SSVRZX0RFRkFVTFQsIGQt
Pm1fY2FuY2VsbGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BlbkNhbGxiYWNrLCAwKTsK
LX0KIHN0YXRpYyBib29sIHN0YXJ0R2lvKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIEtVUkwgdXJs
KQogewogICAgIEFTU0VSVChoYW5kbGUpOwogCi0gICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCog
ZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKLQogICAgIGlmIChoYW5kbGUtPmZpcnN0UmVxdWVz
dCgpLmh0dHBNZXRob2QoKSAhPSAiR0VUIiAmJiBoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLmh0dHBN
ZXRob2QoKSAhPSAiUE9TVCIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIFNvdXBTZXNz
aW9uKiBzZXNzaW9uID0gaGFuZGxlLT5kZWZhdWx0U2Vzc2lvbigpOworICAgIFJlc291cmNlSGFu
ZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFsKCk7CisKICAgICAvLyBHSU8gZG9l
c24ndCBrbm93IGhvdyB0byBoYW5kbGUgcmVmcyBhbmQgcXVlcmllcywgc28gcmVtb3ZlIHRoZW0K
ICAgICAvLyBUT0RPOiB1c2UgS1VSTC5maWxlU3lzdGVtUGF0aCBhZnRlciBLVVJMR3RrIGFuZCBG
aWxlU3lzdGVtR3RrIGFyZQogICAgIC8vIHVzaW5nIEdJTyBpbnRlcm5hbGx5LCBhbmQgcHJvdmlk
aW5nIFVSSXMgaW5zdGVhZCBvZiBmaWxlIHBhdGhzCiAgICAgdXJsLnJlbW92ZUZyYWdtZW50SWRl
bnRpZmllcigpOwogICAgIHVybC5zZXRRdWVyeShTdHJpbmcoKSk7CiAgICAgdXJsLnJlbW92ZVBv
cnQoKTsKKyAgICBDU3RyaW5nIHVybFN0ciA9IHVybC5zdHJpbmcoKS51dGY4KCk7CiAKLSNpZiAh
T1MoV0lORE9XUykKLSAgICAvLyB3ZSBhdm9pZCB0aGUgZXNjYXBpbmcgZm9yIGxvY2FsIGZpbGVz
LCBiZWNhdXNlCi0gICAgLy8gZ19maWxlbmFtZV9mcm9tX3VyaSAodXNlZCBpbnRlcm5hbGx5IGJ5
IEdGaWxlKSBoYXMgcHJvYmxlbXMKLSAgICAvLyBkZWNvZGluZyBzdHJpbmdzIHdpdGggYXJiaXRy
YXJ5IHBlcmNlbnQgc2lnbnMKLSAgICBpZiAodXJsLmlzTG9jYWxGaWxlKCkpCi0gICAgICAgIGQt
Pm1fZ2ZpbGUgPSBnX2ZpbGVfbmV3X2Zvcl9wYXRoKHVybC5wcmV0dHlVUkwoKS51dGY4KCkuZGF0
YSgpICsgc2l6ZW9mKCJmaWxlOi8vIikgLSAxKTsKLSAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAg
ZC0+bV9nZmlsZSA9IGdfZmlsZV9uZXdfZm9yX3VyaSh1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEo
KSk7Ci0gICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9nZmlsZSksICJ3ZWJraXQt
cmVzb3VyY2UiLCBoYW5kbGUpOworICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBkLT5t
X3NvdXBSZXF1ZXN0ID0gYWRvcHRQbGF0Zm9ybVJlZih3ZWJraXRfc291cF9yZXF1ZXN0ZXJfcmVx
dWVzdChkLT5tX3JlcXVlc3Rlci5nZXQoKSwgdXJsU3RyLmRhdGEoKSwgc2Vzc2lvbiwgJmVycm9y
Lm91dFB0cigpKSk7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIGQtPm1fc291cFJlcXVlc3Qg
PSAwOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZ19vYmplY3Rfc2V0X2Rh
dGEoR19PQkpFQ1QoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSksICJ3ZWJraXQtcmVzb3VyY2UiLCBo
YW5kbGUpOwogCi0gICAgLy8gYmFsYW5jZWQgYnkgYSBkZXJlZigpIGluIGNsZWFudXBHaW9PcGVy
YXRpb24sIHdoaWNoIHNob3VsZCBhbHdheXMgcnVuCisgICAgLy8gYmFsYW5jZWQgYnkgYSBkZXJl
ZigpIGluIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbiwgd2hpY2ggc2hvdWxkIGFsd2F5cyBy
dW4KICAgICBoYW5kbGUtPnJlZigpOwogCi0gICAgZC0+bV9jYW5jZWxsYWJsZSA9IGdfY2FuY2Vs
bGFibGVfbmV3KCk7Ci0gICAgZ19maWxlX3F1ZXJ5X2luZm9fYXN5bmMoZC0+bV9nZmlsZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX1RZUEUg
IiwiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR19GSUxFX0FUVFJJQlVURV9TVEFOREFS
RF9DT05URU5UX1RZUEUgIiwiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR19GSUxFX0FU
VFJJQlVURV9TVEFOREFSRF9TSVpFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfRklM
RV9RVUVSWV9JTkZPX05PTkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QUklPUklU
WV9ERUZBVUxULCBkLT5tX2NhbmNlbGxhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHF1ZXJ5SW5mb0NhbGxiYWNrLCAwKTsKKyAgICBkLT5tX2NhbmNlbGxhYmxlID0gYWRvcHRQbGF0
Zm9ybVJlZihnX2NhbmNlbGxhYmxlX25ldygpKTsKKyAgICB3ZWJraXRfc291cF9yZXF1ZXN0X3Nl
bmRfYXN5bmMoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSwgZC0+bV9jYW5jZWxsYWJsZS5nZXQoKSwg
c2VuZFJlcXVlc3RDYWxsYmFjaywgMCk7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0LmggYi9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3QuaAppbmRleCBjMmM0
NDE5Li44NzlhNDdmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9S
ZXNvdXJjZVJlcXVlc3QuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNv
dXJjZVJlcXVlc3QuaApAQCAtNjcsOCArNjcsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgICAgICB1cGRhdGVGcm9tU291cE1lc3NhZ2Uoc291cE1lc3NhZ2UpOwogICAgICAgICB9CiAK
KyAgICAgICAgdm9pZCB1cGRhdGVTb3VwTWVzc2FnZShTb3VwTWVzc2FnZSopIGNvbnN0OwogICAg
ICAgICBTb3VwTWVzc2FnZSogdG9Tb3VwTWVzc2FnZSgpIGNvbnN0OwotICAgICAgICB2b2lkIHVw
ZGF0ZUZyb21Tb3VwTWVzc2FnZShTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UpOworICAgICAgICB2
b2lkIHVwZGF0ZUZyb21Tb3VwTWVzc2FnZShTb3VwTWVzc2FnZSopOwogCiAgICAgICAgIFNvdXBN
ZXNzYWdlRmxhZ3Mgc291cE1lc3NhZ2VGbGFncygpIGNvbnN0IHsgcmV0dXJuIG1fc291cEZsYWdz
OyB9CiAgICAgICAgIHZvaWQgc2V0U291cE1lc3NhZ2VGbGFncyhTb3VwTWVzc2FnZUZsYWdzIHNv
dXBGbGFncykgeyBtX3NvdXBGbGFncyA9IHNvdXBGbGFnczsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcAppbmRleCA2MmRl
YjAxLi4zODBmYzg0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9S
ZXNvdXJjZVJlcXVlc3RTb3VwLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcApAQCAtMzMsNiArMzMsMjkgQEAgdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit2b2lkIFJlc291cmNlUmVxdWVzdDo6
dXBkYXRlU291cE1lc3NhZ2UoU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlKSBjb25zdAoreworICAg
IGdfb2JqZWN0X3NldChzb3VwTWVzc2FnZSwgU09VUF9NRVNTQUdFX01FVEhPRCwgaHR0cE1ldGhv
ZCgpLnV0ZjgoKS5kYXRhKCksIE5VTEwpOworCisgICAgY29uc3QgSFRUUEhlYWRlck1hcCYgaGVh
ZGVycyA9IGh0dHBIZWFkZXJGaWVsZHMoKTsKKyAgICBTb3VwTWVzc2FnZUhlYWRlcnMqIHNvdXBI
ZWFkZXJzID0gc291cE1lc3NhZ2UtPnJlcXVlc3RfaGVhZGVyczsKKyAgICBpZiAoIWhlYWRlcnMu
aXNFbXB0eSgpKSB7CisgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IGhlYWRlcnMuZW5kKCk7CisgICAgICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBoZWFkZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIHNv
dXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChzb3VwSGVhZGVycywgaXQtPmZpcnN0LnN0cmluZygp
LnV0ZjgoKS5kYXRhKCksIGl0LT5zZWNvbmQudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCisjaWZk
ZWYgSEFWRV9MSUJTT1VQXzJfMjlfOTAKKyAgICBTdHJpbmcgZmlyc3RQYXJ0eVN0cmluZyA9IGZp
cnN0UGFydHlGb3JDb29raWVzKCkuc3RyaW5nKCk7CisgICAgaWYgKCFmaXJzdFBhcnR5U3RyaW5n
LmlzRW1wdHkoKSkgeworICAgICAgICBHT3duUHRyPFNvdXBVUkk+IGZpcnN0UGFydHkoc291cF91
cmlfbmV3KGZpcnN0UGFydHlTdHJpbmcudXRmOCgpLmRhdGEoKSkpOworICAgICAgICBzb3VwX21l
c3NhZ2Vfc2V0X2ZpcnN0X3BhcnR5KHNvdXBNZXNzYWdlLCBmaXJzdFBhcnR5LmdldCgpKTsKKyAg
ICB9CisjZW5kaWYKKworICAgIHNvdXBfbWVzc2FnZV9zZXRfZmxhZ3Moc291cE1lc3NhZ2UsIG1f
c291cEZsYWdzKTsKK30KKwogU291cE1lc3NhZ2UqIFJlc291cmNlUmVxdWVzdDo6dG9Tb3VwTWVz
c2FnZSgpIGNvbnN0CiB7CiAgICAgU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlID0gc291cF9tZXNz
YWdlX25ldyhodHRwTWV0aG9kKCkudXRmOCgpLmRhdGEoKSwgdXJsKCkuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1dlYktpdC9ndGsv
Q2hhbmdlTG9nCmluZGV4IGM2MDJhYzEuLjRjZWQyYzggMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsv
Q2hhbmdlTG9nCisrKyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIw
MTAtMTAtMDEgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gQWRkIEhU
VFAgY2FjaGluZyBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00NDI2MQorCisgICAgICAgIFJlc291cmNlSGFuZGxlJ3MgbV9tc2cgcmVuYW1l
ZCB0byBtX3NvdXBNc2cgYW5kIGl0J3MgYWxzbyBub3cgYSBQbGF0Zm9ybVJlZlB0cgorCisgICAg
ICAgICogd2Via2l0L3dlYmtpdGRvd25sb2FkLmNwcDoKKyAgICAgICAgKHdlYmtpdF9kb3dubG9h
ZF9uZXdfd2l0aF9oYW5kbGUpOgorICAgICAgICAod2Via2l0X2Rvd25sb2FkX3N0YXJ0KToKKwog
MjAxMC0wOS0yOCAgSmVubiBCcmFpdGh3YWl0ZSAgPGplbm5iQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBEbWl0cnkgVGl0b3YuCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXRkb3dubG9hZC5jcHAgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkb3dubG9h
ZC5jcHAKaW5kZXggMTQ3MmNiNS4uMThiNjRhYiAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0ZG93bmxvYWQuY3BwCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25s
b2FkLmNwcApAQCAtNDE5LDggKzQxOSw4IEBAIFdlYktpdERvd25sb2FkKiB3ZWJraXRfZG93bmxv
YWRfbmV3X3dpdGhfaGFuZGxlKFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0LCBXCiAgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwocmVxdWVzdCwgTlVMTCk7CiAKICAgICBSZXNvdXJjZUhhbmRs
ZUludGVybmFsKiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOwotICAgIGlmIChkLT5tX21zZykK
LSAgICAgICAgc291cF9zZXNzaW9uX3BhdXNlX21lc3NhZ2Uod2Via2l0X2dldF9kZWZhdWx0X3Nl
c3Npb24oKSwgZC0+bV9tc2cpOworICAgIGlmIChkLT5tX3NvdXBNZXNzYWdlKQorICAgICAgICBz
b3VwX3Nlc3Npb25fcGF1c2VfbWVzc2FnZSh3ZWJraXRfZ2V0X2RlZmF1bHRfc2Vzc2lvbigpLCBk
LT5tX3NvdXBNZXNzYWdlLmdldCgpKTsKIAogICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9hZCA9
IFdFQktJVF9ET1dOTE9BRChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRE9XTkxPQUQsICJuZXR3
b3JrLXJlcXVlc3QiLCByZXF1ZXN0LCBOVUxMKSk7CiAgICAgV2ViS2l0RG93bmxvYWRQcml2YXRl
KiBwcml2ID0gZG93bmxvYWQtPnByaXY7CkBAIC00OTIsOCArNDkyLDggQEAgdm9pZCB3ZWJraXRf
ZG93bmxvYWRfc3RhcnQoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQogICAgICAgICBwcml2LT5y
ZXNvdXJjZUhhbmRsZS0+c2V0Q2xpZW50KHByaXYtPmRvd25sb2FkQ2xpZW50KTsKIAogICAgICAg
ICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0gcHJpdi0+cmVzb3VyY2VIYW5kbGUtPmdldElu
dGVybmFsKCk7Ci0gICAgICAgIGlmIChkLT5tX21zZykKLSAgICAgICAgICAgIHNvdXBfc2Vzc2lv
bl91bnBhdXNlX21lc3NhZ2Uod2Via2l0X2dldF9kZWZhdWx0X3Nlc3Npb24oKSwgZC0+bV9tc2cp
OworICAgICAgICBpZiAoZC0+bV9zb3VwTWVzc2FnZSkKKyAgICAgICAgICAgIHNvdXBfc2Vzc2lv
bl91bnBhdXNlX21lc3NhZ2Uod2Via2l0X2dldF9kZWZhdWx0X3Nlc3Npb24oKSwgZC0+bV9zb3Vw
TWVzc2FnZS5nZXQoKSk7CiAgICAgfQogCiAgICAgcHJpdi0+dGltZXIgPSBnX3RpbWVyX25ldygp
OwotLSAKMS43LjEKCg==
</data>
<flag name="review"
          id="60410"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69810</attachid>
            <date>2010-10-05 10:59:08 -0700</date>
            <delta_ts>2010-10-13 10:55:47 -0700</delta_ts>
            <desc>Imported SoupURILoader to Webkit. New public API for HTTP cache</desc>
            <filename>0001-Imported-SoupURILoader-code-to-WebKit.-New-public-AP.patch</filename>
            <type>text/plain</type>
            <size>178772</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">RnJvbSBlYmRhZjMzOWQ5NGVkOTE1NzE2YWFhMTgxZWVkMWYwYjg1OTVhZmJhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTZXJnaW8gVmlsbGFyIFNlbmluIDxzdmlsbGFyQGlnYWxpYS5j
b20+CkRhdGU6IFdlZCwgMjIgU2VwIDIwMTAgMTA6MTY6NDQgKzAyMDAKU3ViamVjdDogW1BBVENI
IDEvMl0gSW1wb3J0ZWQgU291cFVSSUxvYWRlciBjb2RlIHRvIFdlYktpdC4gTmV3IHB1YmxpYyBB
UEkgZm9yIEhUVFAgY2FjaGUKCi0tLQogQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgIDEwICsKIEdOVW1ha2VmaWxlLmFtICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgICAxMCArLQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTkzICsrKwogV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIwICstCiAuLi4vc291cC9jYWNo
ZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uYyAgICAgICB8ICAyMDAgKysrCiAuLi4vc291
cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uaCAgICAgICB8ICAgNjIgKwogLi4u
L25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmMgICAgfCAgOTIxICsr
KysrKysrKysrCiAuLi4vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0u
aCAgICB8ICAgNzcgKwogLi4uL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5j
ICAgICAgICAgfCAgMTcwICsrCiAuLi4vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1k
YXRhLmggICAgICAgICB8ICAgNTIgKwogLi4uL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVl
c3QtZmlsZS5jICAgICAgICAgfCAgMzMyICsrKysKIC4uLi9uZXR3b3JrL3NvdXAvY2FjaGUvc291
cC1yZXF1ZXN0LWZpbGUuaCAgICAgICAgIHwgICA1NCArCiAuLi4vbmV0d29yay9zb3VwL2NhY2hl
L3NvdXAtcmVxdWVzdC1odHRwLmMgICAgICAgICB8ICAzNDAgKysrKwogLi4uL25ldHdvcmsvc291
cC9jYWNoZS9zb3VwLXJlcXVlc3QtaHR0cC5oICAgICAgICAgfCAgIDU0ICsKIFdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5jIHwgIDMxMiArKysrCiBXZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QuaCB8ICAxMDAgKysK
IC4uLi9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuYyAgIHwgIDE4
OCArKysKIC4uLi9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuaCAg
IHwgICA4MSArCiAuLi4vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLXByaXZh
dGUuaCB8ICAgNDIgKwogLi4uL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5j
ICAgICAgICAgfCAxNjUzICsrKysrKysrKysrKysrKysrKysrCiAuLi4vbmV0d29yay9zb3VwL2Nh
Y2hlL3dlYmtpdC9zb3VwLWNhY2hlLmggICAgICAgICB8ICAgOTYgKysKIFdlYktpdFRvb2xzL0No
YW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgOSArCiBXZWJLaXRUb29s
cy9HTlVtYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKwogYXV0b3Rv
b2xzL3dlYmtpdC5tNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICstCiAy
NCBmaWxlcyBjaGFuZ2VkLCA0OTc0IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCiBjcmVh
dGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1k
aXJlY3RvcnktaW5wdXQtc3RyZWFtLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uaAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAt
aHR0cC1pbnB1dC1zdHJlYW0uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0uaAogY3JlYXRlIG1vZGUg
MTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1k
YXRhLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9j
YWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWZpbGUuYwogY3JlYXRlIG1vZGUg
MTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1m
aWxlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9j
YWNoZS9zb3VwLXJlcXVlc3QtaHR0cC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuaAogY3JlYXRlIG1vZGUg
MTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5j
CiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUv
c291cC1yZXF1ZXN0LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Rlci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuaAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3Vw
LWNhY2hlLXByaXZhdGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBX
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5oCgpk
aWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IGEwOGUyMWMuLmI0YWU5ZjAg
MTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAor
MjAxMC0wOS0wNiAgU2VyZ2lvIFZpbGxhciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBBZGQg
SFRUUCBjYWNoaW5nIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ0MjYxCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogYWRkZWQgcGF0
aHMgZm9yIHNvdXAgSFRUUCBjYWNoZSBjb2RlCisgICAgICAgICogYXV0b3Rvb2xzL3dlYmtpdC5t
NDogdXBncmFkZWQgcmVxdWlyZWQgZ2xpYiB2ZXJzaW9uCisKIDIwMTAtMDktMzAgIEtldmluIE9s
bGl2aWVyICA8a2V2aW5vQHRoZW9sbGl2aWVycy5jb20+CiAKICAgICAgICAgW3d4XSBGaXggdHlw
byBpbiBidWlsZCBzY3JpcHQuCmRpZmYgLS1naXQgYS9HTlVtYWtlZmlsZS5hbSBiL0dOVW1ha2Vm
aWxlLmFtCmluZGV4IDFjOTVjZDEuLjkzNjU1MzUgMTAwNjQ0Ci0tLSBhL0dOVW1ha2VmaWxlLmFt
CisrKyBiL0dOVW1ha2VmaWxlLmFtCkBAIC0zMDgsMjggKzMwOCwyOSBAQCBnbG9iYWxfY3BwZmxh
Z3MgKz0gXAogZW5kaWYKIAogd2Via2l0Z3RrX3N0YXRpY19oX2FwaSArPSBcCisJJChzcmNkaXIp
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLmgg
XAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaCBcCiAJJChzcmNkaXIpL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdGRvd25sb2FkLmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRlcnJvci5oIFwKKwkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2VvbG9j
YXRpb25wb2xpY3lkZWNpc2lvbi5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0aGl0dGVzdHJlc3VsdC5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
bmV0d29ya3JlcXVlc3QuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdG5l
dHdvcmtyZXNwb25zZS5oIFwKKwkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c2Vj
dXJpdHlvcmlnaW4uaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNvdXBh
dXRoZGlhbG9nLmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJiYWNr
Zm9yd2FyZGxpc3QuaCBcCisJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRh
dGFiYXNlLmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkYXRhc291
cmNlLmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5oIFwK
IAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViaGlzdG9yeWl0ZW0uaCBcCiAJ
JChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmluc3BlY3Rvci5oIFwKIAkkKHNy
Y2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VibmF2aWdhdGlvbmFjdGlvbi5oIFwKIAkk
KHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VicG9saWN5ZGVjaXNpb24uaCBcCi0J
JChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGdlb2xvY2F0aW9ucG9saWN5ZGVjaXNp
b24uaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnJlc291cmNlLmgg
XAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJzZXR0aW5ncy5oIFwKIAkk
KHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vid2luZG93ZmVhdHVyZXMuaCBcCi0J
JChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaCBcCi0JJChzcmNkaXIp
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFiYXNlLmggXAotCSQoc3JjZGlyKS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXRzZWN1cml0eW9yaWdpbi5oCisJJChzcmNkaXIpL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaAogCiB3ZWJraXRndGtfYnVpbHRfaF9hcGkgKz0gXAog
CVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZlcnNpb24uaApAQCAtNTU0LDYgKzU1NSw3IEBAIG5v
aW5zdF9QUk9HUkFNUyArPSAkKFRFU1RfUFJPR1MpCiB3ZWJraXRfdGVzdHNfY2ZsYWdzID0gXAog
CS1mbm8tc3RyaWN0LWFsaWFzaW5nIFwKIAktSSQoc3JjZGlyKS9KYXZhU2NyaXB0Q29yZS9Gb3J3
YXJkaW5nSGVhZGVycyBcCisJLUkkKHNyY2RpcikvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvY2FjaGUgXAogCS1JJChzcmNkaXIpL1dlYktpdC9ndGsgXAogCS1JJCh0b3BfYnVpbGRkaXIp
L1dlYktpdC9ndGsgXAogCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2VzIFwKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDViOTc3
NS4uZDFhZjYzZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxOTYgQEAKKzIwMTAtMDktMDYgIFNlcmdpbyBWaWxsYXIgU2Vu
aW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgW0dUS10gQWRkIEhUVFAgY2FjaGluZyBzdXBwb3J0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDI2MQorCisgICAgICAg
ICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhh
bmRsZUludGVybmFsLmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUludGVybmFs
OjpSZXNvdXJjZUhhbmRsZUludGVybmFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFu
ZGxlSW50ZXJuYWw6On5SZXNvdXJjZUhhbmRsZUludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlc291cmNlSGFuZGxlOjp+UmVzb3VyY2VIYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6cmVz
dGFydGVkQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Z290Q2h1bmtDYWxsYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpwYXJzZURhdGFVcmwpOgorICAgICAgICAoV2ViQ29yZTo6Y2xlYW51
cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnNlbmRSZXF1ZXN0Q2Fs
bGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6c3RhcnRIdHRwKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0Ojp1cGRhdGVTb3VwTWVzc2FnZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9zb3VwL2NhY2hlL3NvdXAtZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5jOiBBZGRlZC4KKyAg
ICAgICAgKHdlYmtpdF9zb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fcGFyc2VfaW5mbyk6Cisg
ICAgICAgICh3ZWJraXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX3JlYWRfbmV4dF9maWxl
KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fcmVhZCk6Cisg
ICAgICAgICh3ZWJraXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX2Nsb3NlKToKKyAgICAg
ICAgKHdlYmtpdF9zb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fY2xhc3NfaW5pdCk6CisgICAg
ICAgICh3ZWJraXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX2luaXQpOgorICAgICAgICAo
d2Via2l0X3NvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9uZXcpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uaDogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1
dC1zdHJlYW0uYzogQWRkZWQuCisgICAgICAgICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVh
bV9maW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9jbGFz
c19pbml0KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlZWthYmxl
X2lmYWNlX2luaXQpOgorICAgICAgICAod2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1faW5p
dCk6CisgICAgICAgICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9xdWV1ZV9tZXNzYWdl
KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX25ldyk6CisgICAgICAg
ICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9nb3RfaGVhZGVycyk6CisgICAgICAgICh3
ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9nb3RfY2h1bmspOgorICAgICAgICAod2Via2l0
X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZmluaXNoZWQpOgorICAgICAgICAod2Via2l0X3NvdXBf
aHR0cF9pbnB1dF9zdHJlYW1fY2FuY2VsbGVkKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2h0dHBf
aW5wdXRfc3RyZWFtX3ByZXBhcmVfZm9yX2lvKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2h0dHBf
aW5wdXRfc3RyZWFtX2RvbmVfaW8pOgorICAgICAgICAoc2V0X2Vycm9yX2lmX2h0dHBfZmFpbGVk
KToKKyAgICAgICAgKHJlYWRfZnJvbV9sZWZ0b3Zlcik6CisgICAgICAgICh3ZWJraXRfc291cF9o
dHRwX2lucHV0X3N0cmVhbV9zZW5kX2ludGVybmFsKToKKyAgICAgICAgKHNlbmRfc3luY19maW5p
c2hlZCk6CisgICAgICAgICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kKToKKyAg
ICAgICAgKHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWQpOgorICAgICAgICAod2Vi
a2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2UpOgorICAgICAgICAod3JhcHBlcl9jYWxs
YmFjayk6CisgICAgICAgIChzZW5kX2FzeW5jX3RocmVhZCk6CisgICAgICAgICh3ZWJraXRfc291
cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jX2luX3RocmVhZCk6CisgICAgICAgIChzZW5k
X2FzeW5jX2ZpbmlzaGVkKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFt
X3NlbmRfYXN5bmNfaW50ZXJuYWwpOgorICAgICAgICAod2Via2l0X3NvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fc2VuZF9hc3luYyk6CisgICAgICAgICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVh
bV9zZW5kX2ZpbmlzaCk6CisgICAgICAgIChyZWFkX2FzeW5jX2RvbmUpOgorICAgICAgICAod2Vi
a2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyk6CisgICAgICAgICh3ZWJraXRf
c291cF9odHRwX2lucHV0X3N0cmVhbV9yZWFkX2ZpbmlzaCk6CisgICAgICAgICh3ZWJraXRfc291
cF9odHRwX2lucHV0X3N0cmVhbV9jbG9zZV9hc3luYyk6CisgICAgICAgICh3ZWJraXRfc291cF9o
dHRwX2lucHV0X3N0cmVhbV9jbG9zZV9maW5pc2gpOgorICAgICAgICAod2Via2l0X3NvdXBfaHR0
cF9pbnB1dF9zdHJlYW1fdGVsbCk6CisgICAgICAgICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0
cmVhbV9jYW5fc2Vlayk6CisgICAgICAgICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9z
ZWVrKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nhbl90cnVuY2F0
ZSk6CisgICAgICAgICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV90cnVuY2F0ZSk6Cisg
ICAgICAgICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9nZXRfbWVzc2FnZSk6CisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0u
aDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVx
dWVzdC1kYXRhLmM6IEFkZGVkLgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9kYXRhX2lu
aXQpOgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9kYXRhX2ZpbmFsaXplKToKKyAgICAg
ICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZGF0YV9jaGVja191cmkpOgorICAgICAgICAodXJpX2Rl
Y29kZWRfY29weSk6CisgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFfc2VuZCk6Cisg
ICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFfZ2V0X2NvbnRlbnRfbGVuZ3RoKToKKyAg
ICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZGF0YV9nZXRfY29udGVudF90eXBlKToKKyAgICAg
ICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZGF0YV9jbGFzc19pbml0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWRhdGEuaDogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmM6IEFk
ZGVkLgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2dldF9maWxlKToKKyAgICAg
ICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9pbml0KToKKyAgICAgICAgKHdlYmtpdF9zb3Vw
X3JlcXVlc3RfZmlsZV9maW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2Zp
bGVfY2hlY2tfdXJpKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9mdHBfbWFp
bl9sb29wX3F1aXQpOgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2Vuc3VyZV9m
aWxlX2Z0cCk6CisgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfZW5zdXJlX2ZpbGUp
OgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX3NlbmQpOgorICAgICAgICAod2Vi
a2l0X3NvdXBfcmVxdWVzdF9maWxlX3NlbmRfYXN5bmNfdGhyZWFkKToKKyAgICAgICAgKHdlYmtp
dF9zb3VwX3JlcXVlc3RfZmlsZV9zZW5kX2FzeW5jKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3Jl
cXVlc3RfZmlsZV9zZW5kX2ZpbmlzaCk6CisgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2Zp
bGVfZ2V0X2NvbnRlbnRfbGVuZ3RoKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZmls
ZV9nZXRfY29udGVudF90eXBlKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9j
bGFzc19pbml0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1y
ZXF1ZXN0LWZpbGUuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2Nh
Y2hlL3NvdXAtcmVxdWVzdC1odHRwLmM6IEFkZGVkLgorICAgICAgICAod2Via2l0X3NvdXBfcmVx
dWVzdF9odHRwX2dldF9tZXNzYWdlKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0
cF9pbml0KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9jaGVja191cmkpOgor
ICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX2ZpbmFsaXplKToKKyAgICAgICAgKHdl
YmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9zZW5kKToKKyAgICAgICAgKHNlbnRfYXN5bmMpOgorICAg
ICAgICAoY29uZGl0aW9uYWxfZ2V0X3JlYWR5X2NiKToKKyAgICAgICAgKHNlbmRfYXN5bmNfY2Ip
OgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX3NlbmRfYXN5bmMpOgorICAgICAg
ICAod2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX3NlbmRfZmluaXNoKToKKyAgICAgICAgKHdlYmtp
dF9zb3VwX3JlcXVlc3RfaHR0cF9nZXRfY29udGVudF9sZW5ndGgpOgorICAgICAgICAod2Via2l0
X3NvdXBfcmVxdWVzdF9odHRwX2dldF9jb250ZW50X3R5cGUpOgorICAgICAgICAod2Via2l0X3Nv
dXBfcmVxdWVzdF9odHRwX2NsYXNzX2luaXQpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
c291cC9jYWNoZS9zb3VwLXJlcXVlc3QtaHR0cC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LmM6IEFkZGVkLgorICAgICAgICAod2Vi
a2l0X3NvdXBfcmVxdWVzdF9pbml0KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlu
YWxpemUpOgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9zZXRfcHJvcGVydHkpOgorICAg
ICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfcHJvcGVydHkpOgorICAgICAgICAod2Via2l0
X3NvdXBfcmVxdWVzdF9pbml0YWJsZV9pbml0KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVl
c3RfZGVmYXVsdF9jaGVja191cmkpOgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9kZWZh
dWx0X3NlbmRfYXN5bmMpOgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9kZWZhdWx0X3Nl
bmRfZmluaXNoKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3Rfc2VuZCk6CisgICAgICAg
ICh3ZWJraXRfc291cF9yZXF1ZXN0X3NlbmRfYXN5bmMpOgorICAgICAgICAod2Via2l0X3NvdXBf
cmVxdWVzdF9zZW5kX2ZpbmlzaCk6CisgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2NsYXNz
X2luaXQpOgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9pbml0YWJsZV9pbnRlcmZhY2Vf
aW5pdCk6CisgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2dldF91cmkpOgorICAgICAgICAo
d2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfc2Vzc2lvbik6CisgICAgICAgICh3ZWJraXRfc291cF9y
ZXF1ZXN0X2dldF9jb250ZW50X2xlbmd0aCk6CisgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0
X2dldF9jb250ZW50X3R5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9jYWNo
ZS9zb3VwLXJlcXVlc3QuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3Vw
L2NhY2hlL3NvdXAtcmVxdWVzdGVyLmM6IEFkZGVkLgorICAgICAgICAod2Via2l0X3NvdXBfcmVx
dWVzdGVyX2luaXQpOgorICAgICAgICAoZmluYWxpemUpOgorICAgICAgICAod2Via2l0X3NvdXBf
cmVxdWVzdGVyX2NsYXNzX2luaXQpOgorICAgICAgICAoaW5pdF9yZXF1ZXN0X3R5cGVzKToKKyAg
ICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3Rlcl9uZXcpOgorICAgICAgICAod2Via2l0X3NvdXBf
cmVxdWVzdGVyX3JlcXVlc3QpOgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdGVyX3JlcXVl
c3RfdXJpKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3NjaGVtZV9pc192YWxpZCk6CisgICAgICAg
ICh3ZWJraXRfc291cF9yZXF1ZXN0ZXJfYWRkX3Byb3RvY29sKToKKyAgICAgICAgKHdlYmtpdF9z
b3VwX3JlcXVlc3Rlcl9yZW1vdmVfcHJvdG9jb2wpOgorICAgICAgICAod2Via2l0X3NvdXBfZXJy
b3JfcXVhcmspOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJl
cXVlc3Rlci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUv
d2Via2l0L3NvdXAtY2FjaGUtcHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUuYzogQWRkZWQuCisgICAgICAgIChn
ZXRfY2FjaGVhYmlsaXR5KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUp
OgorICAgICAgICAoY29weV9oZWFkZXJzKToKKyAgICAgICAgKHVwZGF0ZV9oZWFkZXJzKToKKyAg
ICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2dldF9jdXJyZW50X2FnZSk6CisgICAgICAg
ICh3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9pc19mcmVzaF9lbm91Z2gpOgorICAgICAgICAod2Vi
a2l0X3NvdXBfbWVzc2FnZV9nZXRfY2FjaGVfa2V5KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2Nh
Y2hlX2VudHJ5X3NldF9mcmVzaG5lc3MpOgorICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfZW50
cnlfbmV3KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX3dyaXRpbmdfZml4dHVyZV9mcmVl
KToKKyAgICAgICAgKGNsb3NlX3JlYWR5X2NiKToKKyAgICAgICAgKHdyaXRlX3JlYWR5X2NiKToK
KyAgICAgICAgKG1zZ19nb3RfY2h1bmtfY2IpOgorICAgICAgICAobXNnX2dvdF9ib2R5X2NiKToK
KyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2RlbGV0ZSk6CisgICAgICAgIChscnVf
Y29tcGFyZV9mdW5jKToKKyAgICAgICAgKGNhY2hlX2FjY2VwdHNfZW50cmllc19vZl9zaXplKToK
KyAgICAgICAgKG1ha2Vfcm9vbV9mb3JfbmV3X2VudHJ5KToKKyAgICAgICAgKHdlYmtpdF9zb3Vw
X2NhY2hlX2VudHJ5X2luc2VydF9ieV9rZXkpOgorICAgICAgICAobXNnX3Jlc3RhcnRlZF9jYik6
CisgICAgICAgIChhcHBlbmRfdG9fcmVhZHlfY2IpOgorICAgICAgICAobXNnX2dvdF9oZWFkZXJz
X2NiKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX3NlbmRfcmVzcG9uc2UpOgorICAgICAg
ICAocmVxdWVzdF9zdGFydGVkKToKKyAgICAgICAgKGF0dGFjaCk6CisgICAgICAgICh3ZWJraXRf
c291cF9jYWNoZV9zZXNzaW9uX2ZlYXR1cmVfaW5pdCk6CisgICAgICAgICh3ZWJraXRfc291cF9j
YWNoZV9pbml0KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2ZpbmFsaXplKToKKyAgICAg
ICAgKHdlYmtpdF9zb3VwX2NhY2hlX3NldF9wcm9wZXJ0eSk6CisgICAgICAgICh3ZWJraXRfc291
cF9jYWNoZV9nZXRfcHJvcGVydHkpOgorICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfY29uc3Ry
dWN0ZWQpOgorICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfdHlwZV9nZXRfdHlwZSk6CisgICAg
ICAgICh3ZWJraXRfc291cF9jYWNoZV9jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdF9zb3Vw
X2NhY2hlX25ldyk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9oYXNfcmVzcG9uc2UpOgor
ICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfZ2V0X2NhY2hlYWJpbGl0eSk6CisgICAgICAgIChm
b3JjZV9mbHVzaF90aW1lb3V0KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2ZsdXNoKToK
KyAgICAgICAgKHJlbW92ZV9jYWNoZV9pdGVtKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hl
X2NsZWFyKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2dlbmVyYXRlX2NvbmRpdGlvbmFs
X3JlcXVlc3QpOgorICAgICAgICAocGFja19lbnRyeSk6CisgICAgICAgICh3ZWJraXRfc291cF9j
YWNoZV9kdW1wKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2xvYWQpOgorICAgICAgICAo
d2Via2l0X3NvdXBfY2FjaGVfc2V0X21heF9zaXplKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2Nh
Y2hlX2dldF9tYXhfc2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3dlYmtpdC9zb3VwLWNhY2hlLmg6IEFkZGVkLgorCiAyMDEwLTEwLTAzICBBZGFtIEJhcnRoICA8
YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSG9sZ2VyIEZyZXl0aGVy
LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZp
bGUuYW0KaW5kZXggNzk1YzkyNi4uZWY2YWUyZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC03OCw3ICs3OCw5IEBAIHdl
YmNvcmVndGtfY3BwZmxhZ3MgKz0gXAogCS1JJChzcmNkaXIpL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyIFwKIAktSSQoc3JjZGlyKS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2d0ayBcCiAJLUkkKHNyY2RpcikvV2ViQ29yZS9wbGF0Zm9ybS9ndGsgXAotCS1JJChzcmNkaXIp
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwCisJLUkkKHNyY2RpcikvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAgXAorCS1JJChzcmNkaXIpL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL2NhY2hlIFwKKwktSSQoc3JjZGlyKS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9jYWNoZS93ZWJraXQKIAogd2ViY29yZV9idWlsdF9ub3NvdXJjZXMgKz0gXAogCURlcml2ZWRT
b3VyY2VzL1dlYkNvcmUvdG9rZW5pemVyLmNwcApAQCAtMzU1Nyw2ICszNTU5LDIyIEBAIHdlYmNv
cmVndGtfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0
U3RyZWFtRXJyb3IuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0U3Ry
ZWFtSGFuZGxlLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVh
bUhhbmRsZVNvdXAuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9z
b3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uYyBcCisJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmggXAorCVdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0uYyBcCisJV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1odHRwLWlucHV0LXN0cmVhbS5o
IFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0
YS5jIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Qt
ZGF0YS5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVl
c3QtZmlsZS5jIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJl
cXVlc3QtZmlsZS5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3Vw
LXJlcXVlc3QtaHR0cC5jIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9z
b3VwLXJlcXVlc3QtaHR0cC5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNo
ZS9zb3VwLXJlcXVlc3QuYyBcCisJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUv
c291cC1yZXF1ZXN0LmggXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3Nv
dXAtcmVxdWVzdGVyLmMgXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3Nv
dXAtcmVxdWVzdGVyLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dl
YmtpdC9zb3VwLWNhY2hlLmMgXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3dlYmtpdC9zb3VwLWNhY2hlLmggXAogCVdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YUd0
ay5jcHAgXAogCVdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHAgXAogCVdl
YkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luVmlld0d0ay5jcHAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5j
IGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5w
dXQtc3RyZWFtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYxNmRiYgot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3Nv
dXAtZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5jCkBAIC0wLDAgKzEsMjAwIEBACisvKiAtKi0gTW9k
ZTogQzsgdGFiLXdpZHRoOiA4OyBpbmRlbnQtdGFicy1tb2RlOiB0OyBjLWJhc2ljLW9mZnNldDog
OCAtKi0gKi8KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVkIEhhdCwgSW5jLgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1
ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJzb3VwLWRpcmVjdG9yeS1pbnB1dC1z
dHJlYW0uaCIKKworI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+
CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNkZWZpbmUgSU5JVF9TVFJJTkcgIjxodG1sPjxoZWFk
Pjx0aXRsZT5PTUchPC90aXRsZT48L2hlYWQ+PGJvZHk+PHRhYmxlPiIKKyNkZWZpbmUgRVhJVF9T
VFJJTkcgIjwvdGFibGU+PC9odG1sPiIKKworR19ERUZJTkVfVFlQRSAoV2ViS2l0U291cERpcmVj
dG9yeUlucHV0U3RyZWFtLCB3ZWJraXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtLCBHX1RZ
UEVfSU5QVVRfU1RSRUFNKQorCitzdGF0aWMgU291cEJ1ZmZlciAqCit3ZWJraXRfc291cF9kaXJl
Y3RvcnlfaW5wdXRfc3RyZWFtX3BhcnNlX2luZm8gKFdlYktpdFNvdXBEaXJlY3RvcnlJbnB1dFN0
cmVhbSAqIHN0cmVhbSwKKwkJCQkJICAgICAgIEdGaWxlSW5mbyAqIGluZm8pCit7CisJU291cEJ1
ZmZlciAqYnVmZmVyOworCUdTdHJpbmcgKnN0cmluZzsKKwljb25zdCBjaGFyICpzOworCWNoYXIg
KmVzY2FwZWQsICpwYXRoLCAqeG1sX3N0cmluZzsKKworCWlmICghZ19maWxlX2luZm9fZ2V0X25h
bWUgKGluZm8pKQorCQlyZXR1cm4gTlVMTDsKKworCXMgPSBnX2ZpbGVfaW5mb19nZXRfZGlzcGxh
eV9uYW1lIChpbmZvKTsKKwlpZiAoIXMpIHsKKwkJcyA9IGdfZmlsZV9pbmZvX2dldF9uYW1lIChp
bmZvKTsKKwkJLyogRklYTUU6IGNvbnZlcnQgc29tZWhvdz8gKi8KKwkJaWYgKCFnX3V0ZjhfdmFs
aWRhdGUgKHMsIC0xLCBOVUxMKSkKKwkJCXJldHVybiBOVUxMOworCX0KKwlzdHJpbmcgPSBnX3N0
cmluZ19uZXcgKCI8dHI+Iik7CisKKwl4bWxfc3RyaW5nID0gZ19tYXJrdXBfZXNjYXBlX3RleHQg
KHMsIC0xKTsKKwllc2NhcGVkID0gZ191cmlfZXNjYXBlX3N0cmluZyAoZ19maWxlX2luZm9fZ2V0
X25hbWUgKGluZm8pLCBOVUxMLCBGQUxTRSk7CisJcGF0aCA9IGdfc3RyY29uY2F0IChzdHJlYW0t
PnVyaSwgIi8iLCBlc2NhcGVkLCBOVUxMKTsKKwlnX2ZyZWUgKGVzY2FwZWQpOworCWdfc3RyaW5n
X2FwcGVuZF9wcmludGYgKHN0cmluZywgIjx0ZD48YSBocmVmPVwiJXNcIj4lczwvYT48L3RkPiIs
IHBhdGgsIHhtbF9zdHJpbmcpOworCWdfZnJlZSAocGF0aCk7CisJZ19mcmVlICh4bWxfc3RyaW5n
KTsKKwlnX3N0cmluZ19hcHBlbmQgKHN0cmluZywgIjwvdHI+Iik7CisKKwlidWZmZXIgPSBzb3Vw
X2J1ZmZlcl9uZXcgKFNPVVBfTUVNT1JZX1RBS0UsIHN0cmluZy0+c3RyLCBzdHJpbmctPmxlbik7
CisJZ19zdHJpbmdfZnJlZSAoc3RyaW5nLCBGQUxTRSk7CisKKwlyZXR1cm4gYnVmZmVyOworfQor
CitzdGF0aWMgU291cEJ1ZmZlciAqCit3ZWJraXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFt
X3JlYWRfbmV4dF9maWxlIChXZWJLaXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW0gICpzdHJlYW0s
CisJCQkJCQkgICBHQ2FuY2VsbGFibGUgICAgICAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkJ
CSAgIEdFcnJvciAgICAgICAgICAgICAgICAgICAqKmVycm9yKQoreworCUdGaWxlSW5mbyAqaW5m
bzsKKwlTb3VwQnVmZmVyICpidWZmZXI7CisJR0Vycm9yICplcnIgPSBOVUxMOworCisJZG8gewor
CQlpbmZvID0gZ19maWxlX2VudW1lcmF0b3JfbmV4dF9maWxlIChzdHJlYW0tPmVudW1lcmF0b3Is
IGNhbmNlbGxhYmxlLCAmZXJyKTsKKwkJaWYgKGluZm8gPT0gTlVMTCkgeworCQkJaWYgKGVycikg
eworCQkJCWdfcHJvcGFnYXRlX2Vycm9yIChlcnJvciwgZXJyKTsKKwkJCQlyZXR1cm4gTlVMTDsK
KwkJCX0gZWxzZSBpZiAoIXN0cmVhbS0+ZG9uZSkgeworCQkJCXN0cmVhbS0+ZG9uZSA9IFRSVUU7
CisJCQkJcmV0dXJuIHNvdXBfYnVmZmVyX25ldyAoU09VUF9NRU1PUllfU1RBVElDLAorCQkJCQkJ
CUVYSVRfU1RSSU5HLAorCQkJCQkJCXNpemVvZiAoRVhJVF9TVFJJTkcpKTsKKwkJCX0gZWxzZSB7
CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCX0KKworCQlidWZmZXIgPSB3ZWJraXRfc291cF9k
aXJlY3RvcnlfaW5wdXRfc3RyZWFtX3BhcnNlX2luZm8gKHN0cmVhbSwgaW5mbyk7CisJfSB3aGls
ZSAoYnVmZmVyID09IE5VTEwpOworCisJcmV0dXJuIGJ1ZmZlcjsKK30KKworc3RhdGljIGdzc2l6
ZQord2Via2l0X3NvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9yZWFkIChHSW5wdXRTdHJlYW0g
ICppbnB1dCwKKwkJCQkJIHZvaWQgICAgICAgICAgKmJ1ZmZlciwKKwkJCQkJIGdzaXplIGNvdW50
LAorCQkJCQkgR0NhbmNlbGxhYmxlICAqY2FuY2VsbGFibGUsCisJCQkJCSBHRXJyb3IgICAgICAg
KiplcnJvcikKK3sKKwlXZWJLaXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW0gKnN0cmVhbSA9IFdF
QktJVF9TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0gKGlucHV0KTsKKwlnc3NpemUgdG90YWws
IHNpemU7CisKKwlmb3IgKHRvdGFsID0gMDsgdG90YWwgPCBjb3VudDsgdG90YWwgKz0gc2l6ZSkg
eworCQlpZiAoc3RyZWFtLT5idWZmZXIgPT0gTlVMTCkgeworCQkJc3RyZWFtLT5idWZmZXIgPSB3
ZWJraXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX3JlYWRfbmV4dF9maWxlIChzdHJlYW0s
IGNhbmNlbGxhYmxlLCBlcnJvcik7CisJCQlpZiAoc3RyZWFtLT5idWZmZXIgPT0gTlVMTCkgewor
CQkJCS8qIEZJWE1FOiBJcyB0aGlzIGNvcnJlY3Qgb3Igc2hvdWxkIHdlIGZvcndhcmQgdGhlIGVy
cm9yPyAqLworCQkJCWlmICh0b3RhbCkKKwkJCQkJZ19jbGVhcl9lcnJvciAoZXJyb3IpOworCQkJ
CXJldHVybiB0b3RhbDsKKwkJCX0KKwkJfQorCisJCXNpemUgPSBNSU4gKHN0cmVhbS0+YnVmZmVy
LT5sZW5ndGgsIGNvdW50IC0gdG90YWwpOworCQltZW1jcHkgKChjaGFyICopYnVmZmVyICsgdG90
YWwsIHN0cmVhbS0+YnVmZmVyLT5kYXRhLCBzaXplKTsKKwkJaWYgKHNpemUgPT0gc3RyZWFtLT5i
dWZmZXItPmxlbmd0aCkgeworCQkJc291cF9idWZmZXJfZnJlZSAoc3RyZWFtLT5idWZmZXIpOwor
CQkJc3RyZWFtLT5idWZmZXIgPSBOVUxMOworCQl9IGVsc2UgeworCQkJU291cEJ1ZmZlciAqc3Vi
ID0gc291cF9idWZmZXJfbmV3X3N1YmJ1ZmZlciAoc3RyZWFtLT5idWZmZXIsCisJCQkJCQkJCSAg
ICAgc2l6ZSwKKwkJCQkJCQkJICAgICBzdHJlYW0tPmJ1ZmZlci0+bGVuZ3RoIC0gc2l6ZSk7CisJ
CQlzb3VwX2J1ZmZlcl9mcmVlIChzdHJlYW0tPmJ1ZmZlcik7CisJCQlzdHJlYW0tPmJ1ZmZlciA9
IHN1YjsKKwkJfQorCX0KKworCXJldHVybiB0b3RhbDsKK30KKworc3RhdGljIGdib29sZWFuCit3
ZWJraXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX2Nsb3NlIChHSW5wdXRTdHJlYW0gICpp
bnB1dCwKKwkJCQkJICBHQ2FuY2VsbGFibGUgICpjYW5jZWxsYWJsZSwKKwkJCQkJICBHRXJyb3Ig
ICAgICAgKiplcnJvcikKK3sKKwlXZWJLaXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW0gKnN0cmVh
bSA9IFdFQktJVF9TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0gKGlucHV0KTsKKwlnYm9vbGVh
biByZXN1bHQ7CisKKwlpZiAoc3RyZWFtLT5idWZmZXIpIHsKKwkJc291cF9idWZmZXJfZnJlZSAo
c3RyZWFtLT5idWZmZXIpOworCQlzdHJlYW0tPmJ1ZmZlciA9IE5VTEw7CisJfQorCisJcmVzdWx0
ID0gZ19maWxlX2VudW1lcmF0b3JfY2xvc2UgKHN0cmVhbS0+ZW51bWVyYXRvciwKKwkJCQkJICBj
YW5jZWxsYWJsZSwKKwkJCQkJICBlcnJvcik7CisJZ19vYmplY3RfdW5yZWYgKHN0cmVhbS0+ZW51
bWVyYXRvcik7CisJc3RyZWFtLT5lbnVtZXJhdG9yID0gTlVMTDsKKworCWdfZnJlZSAoc3RyZWFt
LT51cmkpOworCXN0cmVhbS0+dXJpID0gTlVMTDsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0
YXRpYyB2b2lkCit3ZWJraXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX2NsYXNzX2luaXQg
KFdlYktpdFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbUNsYXNzICpzdHJlYW1fY2xhc3MpCit7CisJ
R0lucHV0U3RyZWFtQ2xhc3MgKmlucHV0c3RyZWFtX2NsYXNzID0gR19JTlBVVF9TVFJFQU1fQ0xB
U1MgKHN0cmVhbV9jbGFzcyk7CisKKwlpbnB1dHN0cmVhbV9jbGFzcy0+cmVhZF9mbiA9IHdlYmtp
dF9zb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fcmVhZDsKKwlpbnB1dHN0cmVhbV9jbGFzcy0+
Y2xvc2VfZm4gPSB3ZWJraXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX2Nsb3NlOworfQor
CitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9pbml0IChX
ZWJLaXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW0gKnN0cmVhbSkKK3sKKwlzdHJlYW0tPmJ1ZmZl
ciA9IHNvdXBfYnVmZmVyX25ldyAoU09VUF9NRU1PUllfU1RBVElDLAorCQkJCQkgIElOSVRfU1RS
SU5HLAorCQkJCQkgIHNpemVvZiAoSU5JVF9TVFJJTkcpKTsKK30KKworR0lucHV0U3RyZWFtICoK
K3dlYmtpdF9zb3VwX2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fbmV3IChHRmlsZUVudW1lcmF0b3Ig
KmVudW1lcmF0b3IsCisJCQkJCVNvdXBVUkkgICAgICAgICAqdXJpKQoreworCUdJbnB1dFN0cmVh
bSAqc3RyZWFtOworCisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfSVNfRklMRV9FTlVNRVJBVE9S
IChlbnVtZXJhdG9yKSwgTlVMTCk7CisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHVyaSAhPSBOVUxM
LCBOVUxMKTsKKworCXN0cmVhbSA9IGdfb2JqZWN0X25ldyAoV0VCS0lUX1RZUEVfU09VUF9ESVJF
Q1RPUllfSU5QVVRfU1RSRUFNLCBOVUxMKTsKKworCVdFQktJVF9TT1VQX0RJUkVDVE9SWV9JTlBV
VF9TVFJFQU0gKHN0cmVhbSktPmVudW1lcmF0b3IgPSBnX29iamVjdF9yZWYgKGVudW1lcmF0b3Ip
OworCVdFQktJVF9TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0gKHN0cmVhbSktPnVyaSA9IHNv
dXBfdXJpX3RvX3N0cmluZyAodXJpLCBGQUxTRSk7CisKKwlyZXR1cm4gc3RyZWFtOworfQorCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWRpcmVj
dG9yeS1pbnB1dC1zdHJlYW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3NvdXAtZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjBjNWIwYmUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uaApAQCAtMCwwICsx
LDYyIEBACisvKiAtKi0gTW9kZTogQzsgdGFiLXdpZHRoOiA4OyBpbmRlbnQtdGFicy1tb2RlOiB0
OyBjLWJhc2ljLW9mZnNldDogOCAtKi0gKi8KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUmVk
IEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdF
QktJVF9TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU1fSAorI2RlZmluZSBXRUJLSVRfU09VUF9E
SVJFQ1RPUllfSU5QVVRfU1RSRUFNX0ggMQorCisjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2luY2x1
ZGUgPGxpYnNvdXAvc291cC10eXBlcy5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC1tZXNzYWdl
LWJvZHkuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX1NPVVBfRElS
RUNUT1JZX0lOUFVUX1NUUkVBTSAgICAgICAgICAgICh3ZWJraXRfc291cF9kaXJlY3RvcnlfaW5w
dXRfc3RyZWFtX2dldF90eXBlICgpKQorI2RlZmluZSBXRUJLSVRfU09VUF9ESVJFQ1RPUllfSU5Q
VVRfU1RSRUFNKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChv
YmopLCBXRUJLSVRfVFlQRV9TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0sIFdlYktpdFNvdXBE
aXJlY3RvcnlJbnB1dFN0cmVhbSkpCisjZGVmaW5lIFdFQktJVF9TT1VQX0RJUkVDVE9SWV9JTlBV
VF9TVFJFQU1fQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNz
KSwgV0VCS0lUX1RZUEVfU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNLCBXZWJLaXRTb3VwRGly
ZWN0b3J5SW5wdXRTdHJlYW1DbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19TT1VQX0RJUkVDVE9S
WV9JTlBVVF9TVFJFQU0ob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAo
KG9iaiksIFdFQktJVF9UWVBFX1NPVVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTSkpCisjZGVmaW5l
IFdFQktJVF9JU19TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU1fQ0xBU1Moa2xhc3MpIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfRElSRUNUT1JZX0lO
UFVUX1NUUkVBTSkpCisjZGVmaW5lIFdFQktJVF9TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU1f
R0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgV0VCS0lU
X1RZUEVfU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNLCBXZWJLaXRTb3VwRGlyZWN0b3J5SW5w
dXRTdHJlYW1DbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRTb3VwRGlyZWN0b3J5SW5w
dXRTdHJlYW0gV2ViS2l0U291cERpcmVjdG9yeUlucHV0U3RyZWFtOwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbUNsYXNzIFdlYktpdFNvdXBEaXJlY3RvcnlJ
bnB1dFN0cmVhbUNsYXNzOworCitzdHJ1Y3QgX1dlYktpdFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVh
bSB7CisJR0lucHV0U3RyZWFtIHBhcmVudDsKKworCUdGaWxlRW51bWVyYXRvciAqZW51bWVyYXRv
cjsKKwljaGFyICp1cmk7CisJU291cEJ1ZmZlciAqYnVmZmVyOworCWdib29sZWFuIGRvbmU7Cit9
OworCitzdHJ1Y3QgX1dlYktpdFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbUNsYXNzIHsKKwlHSW5w
dXRTdHJlYW1DbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitHVHlwZSAgICAgICAgICB3ZWJraXRf
c291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX2dldF90eXBlICh2b2lkKTsKKworR0lucHV0U3Ry
ZWFtICp3ZWJraXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX25ldyAoR0ZpbGVFbnVtZXJh
dG9yICplbnVtZXJhdG9yLAorCQkJCQkJICAgICAgU291cFVSSSAgICAgICAgICp1cmkpOworCisK
K0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RS
RUFNX0ggKi8KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0uYyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3Vw
L2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5kYzk1ZDZlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvY2FjaGUvc291cC1odHRwLWlucHV0LXN0cmVhbS5jCkBAIC0wLDAgKzEsOTIx
IEBACisvKiBzb3VwLWlucHV0LXN0cmVhbS5jLCBiYXNlZCBvbiBnc29ja2V0aW5wdXRzdHJlYW0u
YworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA3IFJlZCBIYXQsIEluYy4KKyAqIENvcHly
aWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAqIFB1
YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1
aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRl
IDxjb25maWcuaD4KKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8Z2xpYi5oPgor
I2luY2x1ZGUgPGdpby9naW8uaD4KKworI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorCisjaW5j
bHVkZSAic291cC1odHRwLWlucHV0LXN0cmVhbS5oIgorCitzdGF0aWMgdm9pZCB3ZWJraXRfc291
cF9odHRwX2lucHV0X3N0cmVhbV9zZWVrYWJsZV9pZmFjZV9pbml0IChHU2Vla2FibGVJZmFjZSAq
c2Vla2FibGVfaWZhY2UpOworCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoV2ViS2l0U291cEhU
VFBJbnB1dFN0cmVhbSwgd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW0sIEdfVFlQRV9JTlBV
VF9TVFJFQU0sCisJCQkgR19JTVBMRU1FTlRfSU5URVJGQUNFIChHX1RZUEVfU0VFS0FCTEUsCisJ
CQkJCQl3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZWVrYWJsZV9pZmFjZV9pbml0KSkK
KwordHlwZWRlZiB2b2lkICgqV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbUNhbGxiYWNrKShHSW5w
dXRTdHJlYW0gKik7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlTb3VwU2Vzc2lvbiAqc2Vzc2lvbjsK
KwlHTWFpbkNvbnRleHQgKmFzeW5jX2NvbnRleHQ7CisJU291cE1lc3NhZ2UgKm1zZzsKKwlnYm9v
bGVhbiBnb3RfaGVhZGVycywgZmluaXNoZWQ7CisJZ29mZnNldCBvZmZzZXQ7CisKKwlHQ2FuY2Vs
bGFibGUgKmNhbmNlbGxhYmxlOworCUdTb3VyY2UgKmNhbmNlbF93YXRjaDsKKwlXZWJLaXRTb3Vw
SFRUUElucHV0U3RyZWFtQ2FsbGJhY2sgZ290X2hlYWRlcnNfY2I7CisJV2ViS2l0U291cEhUVFBJ
bnB1dFN0cmVhbUNhbGxiYWNrIGdvdF9jaHVua19jYjsKKwlXZWJLaXRTb3VwSFRUUElucHV0U3Ry
ZWFtQ2FsbGJhY2sgZmluaXNoZWRfY2I7CisJV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbUNhbGxi
YWNrIGNhbmNlbGxlZF9jYjsKKworCWd1Y2hhciAqbGVmdG92ZXJfYnVmZmVyOworCWdzaXplIGxl
ZnRvdmVyX2J1ZnNpemUsIGxlZnRvdmVyX29mZnNldDsKKworCWd1Y2hhciAqY2FsbGVyX2J1ZmZl
cjsKKwlnc2l6ZSBjYWxsZXJfYnVmc2l6ZSwgY2FsbGVyX25yZWFkOworCUdBc3luY1JlYWR5Q2Fs
bGJhY2sgb3V0c3RhbmRpbmdfY2FsbGJhY2s7CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpyZXN1bHQ7
Cit9IFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlOworI2RlZmluZSBXRUJLSVRfU09V
UF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURShvKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9Q
UklWQVRFICgobyksIFdFQktJVF9UWVBFX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU0sIFdlYktpdFNv
dXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlKSkKKworCitzdGF0aWMgZ3NzaXplICAgd2Via2l0X3Nv
dXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVhZCAoR0lucHV0U3RyZWFtICAgICAgICAgKnN0cmVhbSwK
KwkJCQkJCSAgICB2b2lkICAgICAgICAgICAgICAgICAqYnVmZmVyLAorCQkJCQkJICAgIGdzaXpl
IGNvdW50LAorCQkJCQkJICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJ
CQkJCSAgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpOworc3RhdGljIGdib29sZWFuIHdl
YmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlIChHSW5wdXRTdHJlYW0gICAgICAgICAq
c3RyZWFtLAorCQkJCQkJICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJ
CQkJCQkgICAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcik7CitzdGF0aWMgdm9pZCAgICAg
d2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyAoR0lucHV0U3RyZWFtICAg
ICAgICAgKnN0cmVhbSwKKwkJCQkJCQkgIHZvaWQgICAgICAgICAgICAgICAgICpidWZmZXIsCisJ
CQkJCQkJICBnc2l6ZSBjb3VudCwKKwkJCQkJCQkgIGludCBpb19wcmlvcml0eSwKKwkJCQkJCQkg
IEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkJCQkgIEdBc3luY1JlYWR5
Q2FsbGJhY2sgY2FsbGJhY2ssCisJCQkJCQkJICBncG9pbnRlciBkYXRhKTsKK3N0YXRpYyBnc3Np
emUgICB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9yZWFkX2ZpbmlzaCAoR0lucHV0U3Ry
ZWFtICAgICAgICAgKnN0cmVhbSwKKwkJCQkJCQkgICBHQXN5bmNSZXN1bHQgICAgICAgICAqcmVz
dWx0LAorCQkJCQkJCSAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcik7CitzdGF0aWMgdm9p
ZCAgICAgd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2VfYXN5bmMgKEdJbnB1dFN0
cmVhbSAgICAgICAgICpzdHJlYW0sCisJCQkJCQkJICAgaW50IGlvX3ByaW9yaXR5LAorCQkJCQkJ
CSAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkJCQkgICBHQXN5bmNS
ZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAorCQkJCQkJCSAgIGdwb2ludGVyIGRhdGEpOworc3RhdGlj
IGdib29sZWFuIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlX2ZpbmlzaCAoR0lu
cHV0U3RyZWFtICAgICAgICAgKnN0cmVhbSwKKwkJCQkJCQkgICAgR0FzeW5jUmVzdWx0ICAgICAg
ICAgKnJlc3VsdCwKKwkJCQkJCQkgICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKTsKKwor
c3RhdGljIGdvZmZzZXQgIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3RlbGwgKEdTZWVr
YWJsZSAgICAgICAgICAgICpzZWVrYWJsZSk7CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfc291
cF9odHRwX2lucHV0X3N0cmVhbV9jYW5fc2VlayAoR1NlZWthYmxlICAgICAgICAgICAgKnNlZWth
YmxlKTsKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZWVr
IChHU2Vla2FibGUgICAgICAgICAgICAqc2Vla2FibGUsCisJCQkJCQkgICAgZ29mZnNldCBvZmZz
ZXQsCisJCQkJCQkgICAgR1NlZWtUeXBlIHR5cGUsCisJCQkJCQkgICAgR0NhbmNlbGxhYmxlICAg
ICAgICAgKmNhbmNlbGxhYmxlLAorCQkJCQkJICAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJv
cik7CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9jYW5f
dHJ1bmNhdGUgKEdTZWVrYWJsZSAgICAgICAgICAgICpzZWVrYWJsZSk7CitzdGF0aWMgZ2Jvb2xl
YW4gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fdHJ1bmNhdGUgKEdTZWVrYWJsZSAgICAg
ICAgICAgICpzZWVrYWJsZSwKKwkJCQkJCQlnb2Zmc2V0IG9mZnNldCwKKwkJCQkJCQlHQ2FuY2Vs
bGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJCQkJR0Vycm9yICAgICAgICAgICAgICAq
KmVycm9yKTsKKworc3RhdGljIHZvaWQgd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ290
X2hlYWRlcnMgKFNvdXBNZXNzYWdlICptc2csIGdwb2ludGVyIHN0cmVhbSk7CitzdGF0aWMgdm9p
ZCB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9nb3RfY2h1bmsgKFNvdXBNZXNzYWdlICpt
c2csIFNvdXBCdWZmZXIgKmNodW5rLCBncG9pbnRlciBzdHJlYW0pOworc3RhdGljIHZvaWQgd2Vi
a2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZmluaXNoZWQgKFNvdXBNZXNzYWdlICptc2csIGdw
b2ludGVyIHN0cmVhbSk7CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfc291cF9odHRwX2lucHV0X3N0
cmVhbV9maW5hbGl6ZSAoR09iamVjdCAqb2JqZWN0KQoreworCVdlYktpdFNvdXBIVFRQSW5wdXRT
dHJlYW0gKnN0cmVhbSA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNIChvYmplY3QpOwor
CVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfSFRU
UF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7CisKKwlnX29iamVjdF91bnJlZiAo
cHJpdi0+c2Vzc2lvbik7CisKKwlnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMg
KHByaXYtPm1zZywgR19DQUxMQkFDSyAod2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ290
X2hlYWRlcnMpLCBzdHJlYW0pOworCWdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVu
YyAocHJpdi0+bXNnLCBHX0NBTExCQUNLICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9n
b3RfY2h1bmspLCBzdHJlYW0pOworCWdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVu
YyAocHJpdi0+bXNnLCBHX0NBTExCQUNLICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9m
aW5pc2hlZCksIHN0cmVhbSk7CisJZ19vYmplY3RfdW5yZWYgKHByaXYtPm1zZyk7CisJZ19mcmVl
IChwcml2LT5sZWZ0b3Zlcl9idWZmZXIpOworCisJaWYgKEdfT0JKRUNUX0NMQVNTICh3ZWJraXRf
c291cF9odHRwX2lucHV0X3N0cmVhbV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSkKKwkJKCpHX09C
SkVDVF9DTEFTUyAod2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcGFyZW50X2NsYXNzKS0+
ZmluYWxpemUpKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfc291cF9odHRwX2lu
cHV0X3N0cmVhbV9jbGFzc19pbml0IChXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtQ2xhc3MgKmts
YXNzKQoreworCUdPYmplY3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChr
bGFzcyk7CisJR0lucHV0U3RyZWFtQ2xhc3MgKnN0cmVhbV9jbGFzcyA9IEdfSU5QVVRfU1RSRUFN
X0NMQVNTIChrbGFzcyk7CisKKwlnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUgKGtsYXNzLCBzaXpl
b2YgKFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlKSk7CisKKwlnb2JqZWN0X2NsYXNz
LT5maW5hbGl6ZSA9IHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2ZpbmFsaXplOworCisJ
c3RyZWFtX2NsYXNzLT5yZWFkX2ZuID0gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVh
ZDsKKwlzdHJlYW1fY2xhc3MtPmNsb3NlX2ZuID0gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJl
YW1fY2xvc2U7CisJc3RyZWFtX2NsYXNzLT5yZWFkX2FzeW5jID0gd2Via2l0X3NvdXBfaHR0cF9p
bnB1dF9zdHJlYW1fcmVhZF9hc3luYzsKKwlzdHJlYW1fY2xhc3MtPnJlYWRfZmluaXNoID0gd2Vi
a2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVhZF9maW5pc2g7CisJc3RyZWFtX2NsYXNzLT5j
bG9zZV9hc3luYyA9IHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlX2FzeW5jOwor
CXN0cmVhbV9jbGFzcy0+Y2xvc2VfZmluaXNoID0gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJl
YW1fY2xvc2VfZmluaXNoOworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfaHR0cF9pbnB1
dF9zdHJlYW1fc2Vla2FibGVfaWZhY2VfaW5pdCAoR1NlZWthYmxlSWZhY2UgKnNlZWthYmxlX2lm
YWNlKQoreworCXNlZWthYmxlX2lmYWNlLT50ZWxsID0gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fdGVsbDsKKwlzZWVrYWJsZV9pZmFjZS0+Y2FuX3NlZWsgPSB3ZWJraXRfc291cF9odHRw
X2lucHV0X3N0cmVhbV9jYW5fc2VlazsKKwlzZWVrYWJsZV9pZmFjZS0+c2VlayA9IHdlYmtpdF9z
b3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlZWs7CisJc2Vla2FibGVfaWZhY2UtPmNhbl90cnVuY2F0
ZSA9IHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nhbl90cnVuY2F0ZTsKKwlzZWVrYWJs
ZV9pZmFjZS0+dHJ1bmNhdGVfZm4gPSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV90cnVu
Y2F0ZTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2lu
aXQgKFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gKnN0cmVhbSkKK3sKKwk7Cit9CisKK3N0YXRp
YyB2b2lkCit3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9xdWV1ZV9tZXNzYWdlIChXZWJL
aXRTb3VwSFRUUElucHV0U3RyZWFtICpzdHJlYW0pCit7CisJV2ViS2l0U291cEhUVFBJbnB1dFN0
cmVhbVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJ
VkFURSAoc3RyZWFtKTsKKworCXByaXYtPmdvdF9oZWFkZXJzID0gcHJpdi0+ZmluaXNoZWQgPSBG
QUxTRTsKKworCS8qIEFkZCBhbiBleHRyYSByZWYgc2luY2Ugc291cF9zZXNzaW9uX3F1ZXVlX21l
c3NhZ2Ugc3RlYWxzIG9uZSAqLworCWdfb2JqZWN0X3JlZiAocHJpdi0+bXNnKTsKKwlzb3VwX3Nl
c3Npb25fcXVldWVfbWVzc2FnZSAocHJpdi0+c2Vzc2lvbiwgcHJpdi0+bXNnLCBOVUxMLCBOVUxM
KTsKK30KKworLyoqCisgKiB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9uZXc6CisgKiBA
c2Vzc2lvbjogdGhlICNTb3VwU2Vzc2lvbiB0byB1c2UKKyAqIEBtc2c6IHRoZSAjU291cE1lc3Nh
Z2Ugd2hvc2UgcmVzcG9uc2Ugd2lsbCBiZSBzdHJlYW1lZAorICoKKyAqIFByZXBhcmVzIHRvIHNl
bmQgQG1zZyBvdmVyIEBzZXNzaW9uLCBhbmQgcmV0dXJucyBhICNHSW5wdXRTdHJlYW0KKyAqIHRo
YXQgY2FuIGJlIHVzZWQgdG8gcmVhZCB0aGUgcmVzcG9uc2UuCisgKgorICogQG1zZyBtYXkgbm90
IGJlIHNlbnQgdW50aWwgdGhlIGZpcnN0IHJlYWQgY2FsbDsgaWYgeW91IG5lZWQgdG8gbG9vawor
ICogYXQgdGhlIHN0YXR1cyBjb2RlIG9yIHJlc3BvbnNlIGhlYWRlcnMgYmVmb3JlIHJlYWRpbmcg
dGhlIGJvZHksIHlvdQorICogY2FuIHVzZSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9z
ZW5kKCkgb3Igd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luYygpCisgKiB0
byBmb3JjZSB0aGUgbWVzc2FnZSB0byBiZSBzZW50IGFuZCB0aGUgcmVzcG9uc2UgaGVhZGVycyBy
ZWFkLgorICoKKyAqIElmIEBtc2cgZ2V0cyBhIG5vbi0yeHggcmVzdWx0LCB0aGUgZmlyc3QgcmVh
ZCAob3Igc2VuZCkgd2lsbCByZXR1cm4KKyAqIGFuIGVycm9yIHdpdGggdHlwZSAlV0VCS0lUX1NP
VVBfSFRUUF9JTlBVVF9TVFJFQU1fSFRUUF9FUlJPUi4KKyAqCisgKiBJbnRlcm5hbGx5LCAjV2Vi
S2l0U291cEhUVFBJbnB1dFN0cmVhbSBpcyBpbXBsZW1lbnRlZCB1c2luZyBhc3luY2hyb25vdXMg
SS9PLAorICogc28gaWYgeW91IGFyZSB1c2luZyB0aGUgc3luY2hyb25vdXMgQVBJIChlZywKKyAq
IGdfaW5wdXRfc3RyZWFtX3JlYWQoKSksIHlvdSBzaG91bGQgY3JlYXRlIGEgbmV3ICNHTWFpbkNv
bnRleHQgYW5kCisgKiBzZXQgaXQgYXMgdGhlICVTT1VQX1NFU1NJT05fQVNZTkNfQ09OVEVYVCBw
cm9wZXJ0eSBvbiBAc2Vzc2lvbi4gKElmCisgKiB5b3UgZG9uJ3QsIHRoZW4gc3luY2hyb25vdXMg
I0dJbnB1dFN0cmVhbSBjYWxscyB3aWxsIGNhdXNlIHRoZSBtYWluCisgKiBsb29wIHRvIGJlIHJ1
biByZWN1cnNpdmVseS4pIFRoZSBhc3luYyAjR0lucHV0U3RyZWFtIEFQSSB3b3JrcyBmaW5lCisg
KiB3aXRoICVTT1VQX1NFU1NJT05fQVNZTkNfQ09OVEVYVCBlaXRoZXIgc2V0IG9yIHVuc2V0Lgor
ICoKKyAqIFJldHVybnM6IGEgbmV3ICNHSW5wdXRTdHJlYW0uCisgKiovCitXZWJLaXRTb3VwSFRU
UElucHV0U3RyZWFtICoKK3dlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX25ldyAoU291cFNl
c3Npb24gKnNlc3Npb24sIFNvdXBNZXNzYWdlICptc2cpCit7CisJV2ViS2l0U291cEhUVFBJbnB1
dFN0cmVhbSAqc3RyZWFtOworCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2
OworCisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFNPVVBfSVNfTUVTU0FHRSAobXNnKSwgTlVMTCk7
CisKKwlzdHJlYW0gPSBnX29iamVjdF9uZXcgKFdFQktJVF9UWVBFX1NPVVBfSFRUUF9JTlBVVF9T
VFJFQU0sIE5VTEwpOworCXByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRf
UFJJVkFURSAoc3RyZWFtKTsKKworCXByaXYtPnNlc3Npb24gPSBnX29iamVjdF9yZWYgKHNlc3Np
b24pOworCXByaXYtPmFzeW5jX2NvbnRleHQgPSBzb3VwX3Nlc3Npb25fZ2V0X2FzeW5jX2NvbnRl
eHQgKHNlc3Npb24pOworCXByaXYtPm1zZyA9IGdfb2JqZWN0X3JlZiAobXNnKTsKKworCWdfc2ln
bmFsX2Nvbm5lY3QgKG1zZywgImdvdF9oZWFkZXJzIiwKKwkJCSAgR19DQUxMQkFDSyAod2Via2l0
X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ290X2hlYWRlcnMpLCBzdHJlYW0pOworCWdfc2lnbmFs
X2Nvbm5lY3QgKG1zZywgImdvdF9jaHVuayIsCisJCQkgIEdfQ0FMTEJBQ0sgKHdlYmtpdF9zb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX2dvdF9jaHVuayksIHN0cmVhbSk7CisJZ19zaWduYWxfY29ubmVj
dCAobXNnLCAiZmluaXNoZWQiLAorCQkJICBHX0NBTExCQUNLICh3ZWJraXRfc291cF9odHRwX2lu
cHV0X3N0cmVhbV9maW5pc2hlZCksIHN0cmVhbSk7CisKKwl3ZWJraXRfc291cF9odHRwX2lucHV0
X3N0cmVhbV9xdWV1ZV9tZXNzYWdlIChzdHJlYW0pOworCXJldHVybiBzdHJlYW07Cit9CisKK3N0
YXRpYyB2b2lkCit3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9nb3RfaGVhZGVycyAoU291
cE1lc3NhZ2UgKm1zZywgZ3BvaW50ZXIgc3RyZWFtKQoreworCVdlYktpdFNvdXBIVFRQSW5wdXRT
dHJlYW1Qcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BS
SVZBVEUgKHN0cmVhbSk7CisKKwkvKiBJZiB0aGUgc3RhdHVzIGlzIHVuc3VjY2Vzc2Z1bCwgd2Ug
anVzdCBpZ25vcmUgdGhlIHNpZ25hbCBhbmQgbGV0CisJICogbGlic291cCBrZWVwIGdvaW5nIChl
dmVudHVhbGx5IGVpdGhlciBpdCB3aWxsIHJlcXVldWUgdGhlIHJlcXVlc3QKKwkgKiAoYWZ0ZXIg
aGFuZGxpbmcgYXV0aGVudGljYXRpb24vcmVkaXJlY3Rpb24pLCBvciBlbHNlIHRoZQorCSAqICJm
aW5pc2hlZCIgaGFuZGxlciB3aWxsIHJ1bikuCisJICovCisJaWYgKCFTT1VQX1NUQVRVU19JU19T
VUNDRVNTRlVMIChtc2ctPnN0YXR1c19jb2RlKSkKKwkJcmV0dXJuOworCisJcHJpdi0+Z290X2hl
YWRlcnMgPSBUUlVFOworCWlmICghcHJpdi0+Y2FsbGVyX2J1ZmZlcikgeworCQkvKiBOb3QgcmVh
ZHkgdG8gcmVhZCB0aGUgYm9keSB5ZXQgKi8KKwkJc291cF9zZXNzaW9uX3BhdXNlX21lc3NhZ2Ug
KHByaXYtPnNlc3Npb24sIG1zZyk7CisJfQorCisJaWYgKHByaXYtPmdvdF9oZWFkZXJzX2NiKQor
CQlwcml2LT5nb3RfaGVhZGVyc19jYiAoc3RyZWFtKTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtp
dF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dvdF9jaHVuayAoU291cE1lc3NhZ2UgKm1zZywgU291
cEJ1ZmZlciAqY2h1bmtfYnVmZmVyLAorCQkJCQkgZ3BvaW50ZXIgc3RyZWFtKQoreworCVdlYktp
dFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBV
VF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7CisJY29uc3QgZ2NoYXIgKmNodW5rID0gY2h1
bmtfYnVmZmVyLT5kYXRhOworCWdzaXplIGNodW5rX3NpemUgPSBjaHVua19idWZmZXItPmxlbmd0
aDsKKworCS8qIFdlIG9ubHkgcGF5IGF0dGVudGlvbiB0byB0aGUgY2h1bmsgaWYgaXQncyBwYXJ0
IG9mIGEgc3VjY2Vzc2Z1bAorCSAqIHJlc3BvbnNlLgorCSAqLworCWlmICghU09VUF9TVEFUVVNf
SVNfU1VDQ0VTU0ZVTCAobXNnLT5zdGF0dXNfY29kZSkpCisJCXJldHVybjsKKworCS8qIFNhbml0
eSBjaGVjayAqLworCWlmIChwcml2LT5jYWxsZXJfYnVmc2l6ZSA9PSAwIHx8IHByaXYtPmxlZnRv
dmVyX2J1ZnNpemUgIT0gMCkKKwkJZ193YXJuaW5nICgid2Via2l0X3NvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fZ290X2NodW5rIGNhbGxlZCBhZ2FpbiBiZWZvcmUgcHJldmlvdXMgY2h1bmsgd2FzIHBy
b2Nlc3NlZCIpOworCisJLyogQ29weSB3aGF0IHdlIGNhbiBpbnRvIHByaXYtPmNhbGxlcl9idWZm
ZXIgKi8KKwlpZiAocHJpdi0+Y2FsbGVyX2J1ZnNpemUgLSBwcml2LT5jYWxsZXJfbnJlYWQgPiAw
KSB7CisJCWdzaXplIG5yZWFkID0gTUlOIChjaHVua19zaXplLCBwcml2LT5jYWxsZXJfYnVmc2l6
ZSAtIHByaXYtPmNhbGxlcl9ucmVhZCk7CisKKwkJbWVtY3B5IChwcml2LT5jYWxsZXJfYnVmZmVy
ICsgcHJpdi0+Y2FsbGVyX25yZWFkLCBjaHVuaywgbnJlYWQpOworCQlwcml2LT5jYWxsZXJfbnJl
YWQgKz0gbnJlYWQ7CisJCXByaXYtPm9mZnNldCArPSBucmVhZDsKKwkJY2h1bmsgKz0gbnJlYWQ7
CisJCWNodW5rX3NpemUgLT0gbnJlYWQ7CisJfQorCisJaWYgKGNodW5rX3NpemUgPiAwKSB7CisJ
CS8qIENvcHkgdGhlIHJlc3QgaW50byBwcml2LT5sZWZ0b3Zlcl9idWZmZXIuIElmCisJCSAqIHRo
ZXJlJ3MgYWxyZWFkeSBzb21lIGRhdGEgdGhlcmUsIHJlYWxsb2MgYW5kCisJCSAqIGFwcGVuZC4g
T3RoZXJ3aXNlIGp1c3QgY29weS4KKwkJICovCisJCWlmIChwcml2LT5sZWZ0b3Zlcl9idWZzaXpl
KSB7CisJCQlwcml2LT5sZWZ0b3Zlcl9idWZmZXIgPSBnX3JlYWxsb2MgKHByaXYtPmxlZnRvdmVy
X2J1ZmZlciwKKwkJCQkJCQkgICBwcml2LT5sZWZ0b3Zlcl9idWZzaXplICsgY2h1bmtfc2l6ZSk7
CisJCQltZW1jcHkgKHByaXYtPmxlZnRvdmVyX2J1ZmZlciArIHByaXYtPmxlZnRvdmVyX2J1ZnNp
emUsCisJCQkJY2h1bmssIGNodW5rX3NpemUpOworCQkJcHJpdi0+bGVmdG92ZXJfYnVmc2l6ZSAr
PSBjaHVua19zaXplOworCQl9IGVsc2UgeworCQkJcHJpdi0+bGVmdG92ZXJfYnVmc2l6ZSA9IGNo
dW5rX3NpemU7CisJCQlwcml2LT5sZWZ0b3Zlcl9idWZmZXIgPSBnX21lbWR1cCAoY2h1bmssIGNo
dW5rX3NpemUpOworCQkJcHJpdi0+bGVmdG92ZXJfb2Zmc2V0ID0gMDsKKwkJfQorCX0KKworCXNv
dXBfc2Vzc2lvbl9wYXVzZV9tZXNzYWdlIChwcml2LT5zZXNzaW9uLCBtc2cpOworCWlmIChwcml2
LT5nb3RfY2h1bmtfY2IpCisJCXByaXYtPmdvdF9jaHVua19jYiAoc3RyZWFtKTsKK30KKworc3Rh
dGljIHZvaWQKK3dlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2ZpbmlzaGVkIChTb3VwTWVz
c2FnZSAqbXNnLCBncG9pbnRlciBzdHJlYW0pCit7CisJV2ViS2l0U291cEhUVFBJbnB1dFN0cmVh
bVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFU
RSAoc3RyZWFtKTsKKworCXByaXYtPmZpbmlzaGVkID0gVFJVRTsKKworCWlmIChwcml2LT5maW5p
c2hlZF9jYikKKwkJcHJpdi0+ZmluaXNoZWRfY2IgKHN0cmVhbSk7Cit9CisKK3N0YXRpYyBnYm9v
bGVhbgord2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2FuY2VsbGVkIChHSU9DaGFubmVs
ICpjaGFuLCBHSU9Db25kaXRpb24gY29uZGl0aW9uLAorCQkJCQkgZ3BvaW50ZXIgc3RyZWFtKQor
eworCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBf
SFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7CisKKwlwcml2LT5jYW5jZWxf
d2F0Y2ggPSBOVUxMOworCisJc291cF9zZXNzaW9uX3BhdXNlX21lc3NhZ2UgKHByaXYtPnNlc3Np
b24sIHByaXYtPm1zZyk7CisJaWYgKHByaXYtPmNhbmNlbGxlZF9jYikKKwkJcHJpdi0+Y2FuY2Vs
bGVkX2NiIChzdHJlYW0pOworCisJcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZAord2Vi
a2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcHJlcGFyZV9mb3JfaW8gKEdJbnB1dFN0cmVhbSAq
c3RyZWFtLAorCQkJCQkgICAgICBHQ2FuY2VsbGFibGUgKmNhbmNlbGxhYmxlLAorCQkJCQkgICAg
ICBndWNoYXIgICAgICAgKmJ1ZmZlciwKKwkJCQkJICAgICAgZ3NpemUgY291bnQpCit7CisJV2Vi
S2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lO
UFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKwlpbnQgY2FuY2VsX2ZkOworCisJcHJp
di0+Y2FuY2VsbGFibGUgPSBjYW5jZWxsYWJsZTsKKwljYW5jZWxfZmQgPSBnX2NhbmNlbGxhYmxl
X2dldF9mZCAoY2FuY2VsbGFibGUpOworCWlmIChjYW5jZWxfZmQgIT0gLTEpIHsKKwkJR0lPQ2hh
bm5lbCAqY2hhbiA9IGdfaW9fY2hhbm5lbF91bml4X25ldyAoY2FuY2VsX2ZkKTsKKwkJcHJpdi0+
Y2FuY2VsX3dhdGNoID0gc291cF9hZGRfaW9fd2F0Y2ggKHByaXYtPmFzeW5jX2NvbnRleHQsIGNo
YW4sCisJCQkJCQkJR19JT19JTiB8IEdfSU9fRVJSIHwgR19JT19IVVAsCisJCQkJCQkJd2Via2l0
X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2FuY2VsbGVkLAorCQkJCQkJCXN0cmVhbSk7CisJCWdf
aW9fY2hhbm5lbF91bnJlZiAoY2hhbik7CisJfQorCisJcHJpdi0+Y2FsbGVyX2J1ZmZlciA9IGJ1
ZmZlcjsKKwlwcml2LT5jYWxsZXJfYnVmc2l6ZSA9IGNvdW50OworCXByaXYtPmNhbGxlcl9ucmVh
ZCA9IDA7CisKKwlpZiAocHJpdi0+Z290X2hlYWRlcnMpCisJCXNvdXBfc2Vzc2lvbl91bnBhdXNl
X21lc3NhZ2UgKHByaXYtPnNlc3Npb24sIHByaXYtPm1zZyk7Cit9CisKK3N0YXRpYyB2b2lkCit3
ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9kb25lX2lvIChHSW5wdXRTdHJlYW0gKnN0cmVh
bSkKK3sKKwlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9T
T1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOworCisJaWYgKHByaXYt
PmNhbmNlbF93YXRjaCkgeworCQlnX3NvdXJjZV9kZXN0cm95IChwcml2LT5jYW5jZWxfd2F0Y2gp
OworCQlwcml2LT5jYW5jZWxfd2F0Y2ggPSBOVUxMOworCQlnX2NhbmNlbGxhYmxlX3JlbGVhc2Vf
ZmQgKHByaXYtPmNhbmNlbGxhYmxlKTsKKwl9CisJcHJpdi0+Y2FuY2VsbGFibGUgPSBOVUxMOwor
CisJcHJpdi0+Y2FsbGVyX2J1ZmZlciA9IE5VTEw7CisJcHJpdi0+Y2FsbGVyX2J1ZnNpemUgPSAw
OworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3NldF9lcnJvcl9pZl9odHRwX2ZhaWxlZCAoU291cE1l
c3NhZ2UgKm1zZywgR0Vycm9yICoqZXJyb3IpCit7CisJaWYgKCFTT1VQX1NUQVRVU19JU19TVUND
RVNTRlVMIChtc2ctPnN0YXR1c19jb2RlKSkgeworCQlnX3NldF9lcnJvcl9saXRlcmFsIChlcnJv
ciwgU09VUF9IVFRQX0VSUk9SLAorCQkJCSAgICAgbXNnLT5zdGF0dXNfY29kZSwgbXNnLT5yZWFz
b25fcGhyYXNlKTsKKwkJcmV0dXJuIFRSVUU7CisJfQorCXJldHVybiBGQUxTRTsKK30KKworc3Rh
dGljIGdzaXplCityZWFkX2Zyb21fbGVmdG92ZXIgKFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Q
cml2YXRlICpwcml2LAorCQkgICAgZ3BvaW50ZXIgYnVmZmVyLCBnc2l6ZSBidWZzaXplKQorewor
CWdzaXplIG5yZWFkOworCisJaWYgKHByaXYtPmxlZnRvdmVyX2J1ZnNpemUgLSBwcml2LT5sZWZ0
b3Zlcl9vZmZzZXQgPD0gYnVmc2l6ZSkgeworCQlucmVhZCA9IHByaXYtPmxlZnRvdmVyX2J1ZnNp
emUgLSBwcml2LT5sZWZ0b3Zlcl9vZmZzZXQ7CisJCW1lbWNweSAoYnVmZmVyLCBwcml2LT5sZWZ0
b3Zlcl9idWZmZXIgKyBwcml2LT5sZWZ0b3Zlcl9vZmZzZXQsIG5yZWFkKTsKKworCQlnX2ZyZWUg
KHByaXYtPmxlZnRvdmVyX2J1ZmZlcik7CisJCXByaXYtPmxlZnRvdmVyX2J1ZmZlciA9IE5VTEw7
CisJCXByaXYtPmxlZnRvdmVyX2J1ZnNpemUgPSBwcml2LT5sZWZ0b3Zlcl9vZmZzZXQgPSAwOwor
CX0gZWxzZSB7CisJCW5yZWFkID0gYnVmc2l6ZTsKKwkJbWVtY3B5IChidWZmZXIsIHByaXYtPmxl
ZnRvdmVyX2J1ZmZlciArIHByaXYtPmxlZnRvdmVyX29mZnNldCwgbnJlYWQpOworCQlwcml2LT5s
ZWZ0b3Zlcl9vZmZzZXQgKz0gbnJlYWQ7CisJfQorCisJcHJpdi0+b2Zmc2V0ICs9IG5yZWFkOwor
CXJldHVybiBucmVhZDsKK30KKworLyogVGhpcyBkb2VzIHRoZSB3b3JrIG9mIHdlYmtpdF9zb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX3NlbmQoKSwgYXNzdW1pbmcgdGhhdCB0aGUKKyAqIEdJbnB1dFN0
cmVhbSBwZW5kaW5nIGZsYWcgaGFzIGFscmVhZHkgYmVlbiBzZXQuIEl0IGlzIGFsc28gdXNlZCBi
eQorICogd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luYygpIGluIHNvbWUg
Y2lyY3Vtc3RhbmNlcy4KKyAqLworc3RhdGljIGdib29sZWFuCit3ZWJraXRfc291cF9odHRwX2lu
cHV0X3N0cmVhbV9zZW5kX2ludGVybmFsIChHSW5wdXRTdHJlYW0gICpzdHJlYW0sCisJCQkJCSAg
ICAgR0NhbmNlbGxhYmxlICAqY2FuY2VsbGFibGUsCisJCQkJCSAgICAgR0Vycm9yICAgICAgICoq
ZXJyb3IpCit7CisJV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBXRUJL
SVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKworCXdlYmtp
dF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3ByZXBhcmVfZm9yX2lvIChzdHJlYW0sIGNhbmNlbGxh
YmxlLCBOVUxMLCAwKTsKKwl3aGlsZSAoIXByaXYtPmZpbmlzaGVkICYmICFwcml2LT5nb3RfaGVh
ZGVycyAmJgorCSAgICAgICAhZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQgKGNhbmNlbGxhYmxl
KSkKKwkJZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uIChwcml2LT5hc3luY19jb250ZXh0LCBUUlVF
KTsKKwl3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9kb25lX2lvIChzdHJlYW0pOworCisJ
aWYgKGdfY2FuY2VsbGFibGVfc2V0X2Vycm9yX2lmX2NhbmNlbGxlZCAoY2FuY2VsbGFibGUsIGVy
cm9yKSkKKwkJcmV0dXJuIEZBTFNFOworCWVsc2UgaWYgKHNldF9lcnJvcl9pZl9odHRwX2ZhaWxl
ZCAocHJpdi0+bXNnLCBlcnJvcikpCisJCXJldHVybiBGQUxTRTsKKwlyZXR1cm4gVFJVRTsKK30K
Kworc3RhdGljIHZvaWQKK3NlbmRfc3luY19maW5pc2hlZCAoR0lucHV0U3RyZWFtICpzdHJlYW0p
Cit7CisJV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09V
UF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKwlHRXJyb3IgKmVycm9y
ID0gTlVMTDsKKworCWlmICghZ19jYW5jZWxsYWJsZV9zZXRfZXJyb3JfaWZfY2FuY2VsbGVkIChw
cml2LT5jYW5jZWxsYWJsZSwgJmVycm9yKSkKKwkJc2V0X2Vycm9yX2lmX2h0dHBfZmFpbGVkIChw
cml2LT5tc2csICZlcnJvcik7CisKKwlwcml2LT5nb3RfaGVhZGVyc19jYiA9IE5VTEw7CisJcHJp
di0+ZmluaXNoZWRfY2IgPSBOVUxMOworCisJLyogV2FrZSB1cCB0aGUgbWFpbiBjb250ZXh0IGl0
ZXJhdGlvbiAqLworCWdfc291cmNlX2F0dGFjaCAoZ19pZGxlX3NvdXJjZV9uZXcgKCksIE5VTEwp
OworfQorCisvKioKKyAqIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmQ6CisgKiBA
aHR0cHN0cmVhbTogYSAjV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbQorICogQGNhbmNlbGxhYmxl
OiBvcHRpb25hbCAjR0NhbmNlbGxhYmxlIG9iamVjdCwgJU5VTEwgdG8gaWdub3JlLgorICogQGVy
cm9yOiBsb2NhdGlvbiB0byBzdG9yZSB0aGUgZXJyb3Igb2NjdXJpbmcsIG9yICVOVUxMIHRvIGln
bm9yZQorICoKKyAqIFN5bmNocm9ub3VzbHkgc2VuZHMgdGhlIEhUVFAgcmVxdWVzdCBhc3NvY2lh
dGVkIHdpdGggQHN0cmVhbSwgYW5kCisgKiByZWFkcyB0aGUgcmVzcG9uc2UgaGVhZGVycy4gQ2Fs
bCB0aGlzIGFmdGVyIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX25ldygpCisgKiBhbmQg
YmVmb3JlIHRoZSBmaXJzdCBnX2lucHV0X3N0cmVhbV9yZWFkKCkgaWYgeW91IHdhbnQgdG8gY2hl
Y2sgdGhlCisgKiBIVFRQIHN0YXR1cyBjb2RlIGJlZm9yZSB5b3Ugc3RhcnQgcmVhZGluZy4KKyAq
CisgKiBSZXR1cm4gdmFsdWU6ICVUUlVFIGlmIG1zZyBoYXMgYSBzdWNjZXNzZnVsICgyeHgpIHN0
YXR1cywgJUZBTFNFIGlmCisgKiBub3QuCisgKiovCitnYm9vbGVhbgord2Via2l0X3NvdXBfaHR0
cF9pbnB1dF9zdHJlYW1fc2VuZCAoV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSAgKmh0dHBzdHJl
YW0sCisJCQkJICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkgICAg
R0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKQoreworCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJl
YW1Qcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZB
VEUgKGh0dHBzdHJlYW0pOworCUdJbnB1dFN0cmVhbSAqaXN0cmVhbSA9IChHSW5wdXRTdHJlYW0g
KilodHRwc3RyZWFtOworCWdib29sZWFuIHJlc3VsdDsKKworCWdfcmV0dXJuX3ZhbF9pZl9mYWls
IChXRUJLSVRfSVNfU09VUF9IVFRQX0lOUFVUX1NUUkVBTSAoaHR0cHN0cmVhbSksIEZBTFNFKTsK
KworCWlmICghZ19pbnB1dF9zdHJlYW1fc2V0X3BlbmRpbmcgKGlzdHJlYW0sIGVycm9yKSkKKwkJ
cmV0dXJuIEZBTFNFOworCisJcHJpdi0+Z290X2hlYWRlcnNfY2IgPSBzZW5kX3N5bmNfZmluaXNo
ZWQ7CisJcHJpdi0+ZmluaXNoZWRfY2IgPSBzZW5kX3N5bmNfZmluaXNoZWQ7CisKKwlyZXN1bHQg
PSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2ludGVybmFsIChpc3RyZWFtLCBj
YW5jZWxsYWJsZSwgZXJyb3IpOworCWdfaW5wdXRfc3RyZWFtX2NsZWFyX3BlbmRpbmcgKGlzdHJl
YW0pOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGdzc2l6ZQord2Via2l0X3NvdXBf
aHR0cF9pbnB1dF9zdHJlYW1fcmVhZCAoR0lucHV0U3RyZWFtICpzdHJlYW0sCisJCQkJICAgIHZv
aWQgICAgICAgICAqYnVmZmVyLAorCQkJCSAgICBnc2l6ZSBjb3VudCwKKwkJCQkgICAgR0NhbmNl
bGxhYmxlICpjYW5jZWxsYWJsZSwKKwkJCQkgICAgR0Vycm9yICAgICAgKiplcnJvcikKK3sKKwlX
ZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBf
SU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOworCisJaWYgKHByaXYtPmZpbmlzaGVk
KQorCQlyZXR1cm4gMDsKKworCS8qIElmIHRoZXJlIGlzIGRhdGEgbGVmdG92ZXIgZnJvbSBhIHBy
ZXZpb3VzIHJlYWQsIHJldHVybiBpdC4gKi8KKwlpZiAocHJpdi0+bGVmdG92ZXJfYnVmc2l6ZSkK
KwkJcmV0dXJuIHJlYWRfZnJvbV9sZWZ0b3ZlciAocHJpdiwgYnVmZmVyLCBjb3VudCk7CisKKwkv
KiBObyBsZWZ0b3ZlciBkYXRhLCBhY2NlcHQgb25lIGNodW5rIGZyb20gdGhlIG5ldHdvcmsgKi8K
Kwl3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9wcmVwYXJlX2Zvcl9pbyAoc3RyZWFtLCBj
YW5jZWxsYWJsZSwgYnVmZmVyLCBjb3VudCk7CisJd2hpbGUgKCFwcml2LT5maW5pc2hlZCAmJiBw
cml2LT5jYWxsZXJfbnJlYWQgPT0gMCAmJgorCSAgICAgICAhZ19jYW5jZWxsYWJsZV9pc19jYW5j
ZWxsZWQgKGNhbmNlbGxhYmxlKSkKKwkJZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uIChwcml2LT5h
c3luY19jb250ZXh0LCBUUlVFKTsKKwl3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9kb25l
X2lvIChzdHJlYW0pOworCisJaWYgKHByaXYtPmNhbGxlcl9ucmVhZCA+IDApCisJCXJldHVybiBw
cml2LT5jYWxsZXJfbnJlYWQ7CisKKwlpZiAoZ19jYW5jZWxsYWJsZV9zZXRfZXJyb3JfaWZfY2Fu
Y2VsbGVkIChjYW5jZWxsYWJsZSwgZXJyb3IpKQorCQlyZXR1cm4gLTE7CisJZWxzZSBpZiAoc2V0
X2Vycm9yX2lmX2h0dHBfZmFpbGVkIChwcml2LT5tc2csIGVycm9yKSkKKwkJcmV0dXJuIC0xOwor
CWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgord2Via2l0X3NvdXBfaHR0
cF9pbnB1dF9zdHJlYW1fY2xvc2UgKEdJbnB1dFN0cmVhbSAqc3RyZWFtLAorCQkJCSAgICAgR0Nh
bmNlbGxhYmxlICpjYW5jZWxsYWJsZSwKKwkJCQkgICAgIEdFcnJvciAgICAgICoqZXJyb3IpCit7
CisJV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9I
VFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKworCWlmICghcHJpdi0+Zmlu
aXNoZWQpCisJCXNvdXBfc2Vzc2lvbl9jYW5jZWxfbWVzc2FnZSAocHJpdi0+c2Vzc2lvbiwgcHJp
di0+bXNnLCBTT1VQX1NUQVRVU19DQU5DRUxMRUQpOworCisJcmV0dXJuIFRSVUU7Cit9CisKK3N0
YXRpYyB2b2lkCit3cmFwcGVyX2NhbGxiYWNrIChHT2JqZWN0ICpzb3VyY2Vfb2JqZWN0LCBHQXN5
bmNSZXN1bHQgKnJlcywKKwkJICBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJR0lucHV0U3RyZWFt
ICpzdHJlYW0gPSBHX0lOUFVUX1NUUkVBTSAoc291cmNlX29iamVjdCk7CisJV2ViS2l0U291cEhU
VFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVB
TV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKworCWdfaW5wdXRfc3RyZWFtX2NsZWFyX3BlbmRpbmcg
KHN0cmVhbSk7CisJaWYgKHByaXYtPm91dHN0YW5kaW5nX2NhbGxiYWNrKQorCQkoKnByaXYtPm91
dHN0YW5kaW5nX2NhbGxiYWNrKShzb3VyY2Vfb2JqZWN0LCByZXMsIHVzZXJfZGF0YSk7CisJcHJp
di0+b3V0c3RhbmRpbmdfY2FsbGJhY2sgPSBOVUxMOworCWdfb2JqZWN0X3VucmVmIChzdHJlYW0p
OworfQorCitzdGF0aWMgdm9pZAorc2VuZF9hc3luY190aHJlYWQgKEdTaW1wbGVBc3luY1Jlc3Vs
dCAqcmVzLAorCQkgICBHT2JqZWN0ICpvYmplY3QsCisJCSAgIEdDYW5jZWxsYWJsZSAqY2FuY2Vs
bGFibGUpCit7CisJR0Vycm9yICplcnJvciA9IE5VTEw7CisJZ2Jvb2xlYW4gc3VjY2VzczsKKwor
CXN1Y2Nlc3MgPSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2ludGVybmFsIChH
X0lOUFVUX1NUUkVBTSAob2JqZWN0KSwKKwkJCQkJCQljYW5jZWxsYWJsZSwgJmVycm9yKTsKKwln
X3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19nYm9vbGVhbiAocmVzLCBzdWNjZXNzKTsK
KwlpZiAoZXJyb3IpIHsKKwkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9mcm9tX2Vycm9yIChy
ZXMsIGVycm9yKTsKKwkJZ19lcnJvcl9mcmVlIChlcnJvcik7CisJfQorfQorCitzdGF0aWMgdm9p
ZAord2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luY19pbl90aHJlYWQgKEdJ
bnB1dFN0cmVhbSAgICAgICAgKnN0cmVhbSwKKwkJCQkJCSAgICBpbnQgaW9fcHJpb3JpdHksCisJ
CQkJCQkgICAgR0NhbmNlbGxhYmxlICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJCQkgICAgR0Fz
eW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjaywKKwkJCQkJCSAgICBncG9pbnRlciB1c2VyX2RhdGEp
Cit7CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpyZXM7CisKKwlyZXMgPSBnX3NpbXBsZV9hc3luY19y
ZXN1bHRfbmV3IChHX09CSkVDVCAoc3RyZWFtKSwgY2FsbGJhY2ssIHVzZXJfZGF0YSwKKwkJCQkJ
IHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmNfaW5fdGhyZWFkKTsKKwln
X3NpbXBsZV9hc3luY19yZXN1bHRfcnVuX2luX3RocmVhZCAocmVzLCBzZW5kX2FzeW5jX3RocmVh
ZCwKKwkJCQkJICAgICBpb19wcmlvcml0eSwgY2FuY2VsbGFibGUpOworCWdfb2JqZWN0X3VucmVm
IChyZXMpOworfQorCitzdGF0aWMgdm9pZAorc2VuZF9hc3luY19maW5pc2hlZCAoR0lucHV0U3Ry
ZWFtICpzdHJlYW0pCit7CisJV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYg
PSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKwlH
U2ltcGxlQXN5bmNSZXN1bHQgKnJlc3VsdDsKKwlHRXJyb3IgKmVycm9yID0gTlVMTDsKKworCWlm
ICghZ19jYW5jZWxsYWJsZV9zZXRfZXJyb3JfaWZfY2FuY2VsbGVkIChwcml2LT5jYW5jZWxsYWJs
ZSwgJmVycm9yKSkKKwkJc2V0X2Vycm9yX2lmX2h0dHBfZmFpbGVkIChwcml2LT5tc2csICZlcnJv
cik7CisKKwlwcml2LT5nb3RfaGVhZGVyc19jYiA9IE5VTEw7CisJcHJpdi0+ZmluaXNoZWRfY2Ig
PSBOVUxMOworCXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2RvbmVfaW8gKHN0cmVhbSk7
CisKKwlyZXN1bHQgPSBwcml2LT5yZXN1bHQ7CisJcHJpdi0+cmVzdWx0ID0gTlVMTDsKKworCWdf
c2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dib29sZWFuIChyZXN1bHQsIGVycm9yID09
IE5VTEwpOworCWlmIChlcnJvcikgeworCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X2Zyb21f
ZXJyb3IgKHJlc3VsdCwgZXJyb3IpOworCQlnX2Vycm9yX2ZyZWUgKGVycm9yKTsKKwl9CisJZ19z
aW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlIChyZXN1bHQpOworfQorCitzdGF0aWMgdm9pZAor
d2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luY19pbnRlcm5hbCAoR0lucHV0
U3RyZWFtICAgICAgICAqc3RyZWFtLAorCQkJCQkJICAgaW50IGlvX3ByaW9yaXR5LAorCQkJCQkJ
ICAgR0NhbmNlbGxhYmxlICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJCQkgICBHQXN5bmNSZWFk
eUNhbGxiYWNrIGNhbGxiYWNrLAorCQkJCQkJICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCVdl
YktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9J
TlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7CisKKwlnX29iamVjdF9yZWYgKHN0cmVh
bSk7CisJcHJpdi0+b3V0c3RhbmRpbmdfY2FsbGJhY2sgPSBjYWxsYmFjazsKKworCS8qIElmIHRo
ZSBzZXNzaW9uIHVzZXMgdGhlIGRlZmF1bHQgR01haW5Db250ZXh0LCB0aGVuIHdlIGNhbiBkbwor
CSAqIGFzeW5jIEkvTyBkaXJlY3RseS4gQnV0IGlmIGl0IGhhcyBpdHMgb3duIG1haW4gY29udGV4
dCwgaXQncworCSAqIGVhc2llciB0byBqdXN0IHJ1biBpdCBpbiBhbm90aGVyIHRocmVhZC4KKwkg
Ki8KKwlpZiAoc291cF9zZXNzaW9uX2dldF9hc3luY19jb250ZXh0IChwcml2LT5zZXNzaW9uKSkg
eworCQl3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jX2luX3RocmVhZCAo
c3RyZWFtLCBpb19wcmlvcml0eSwgY2FuY2VsbGFibGUsCisJCQkJCQkJICAgICB3cmFwcGVyX2Nh
bGxiYWNrLCB1c2VyX2RhdGEpOworCQlyZXR1cm47CisJfQorCisJcHJpdi0+Z290X2hlYWRlcnNf
Y2IgPSBzZW5kX2FzeW5jX2ZpbmlzaGVkOworCXByaXYtPmZpbmlzaGVkX2NiID0gc2VuZF9hc3lu
Y19maW5pc2hlZDsKKworCXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3ByZXBhcmVfZm9y
X2lvIChzdHJlYW0sIGNhbmNlbGxhYmxlLCBOVUxMLCAwKTsKKwlwcml2LT5yZXN1bHQgPSBnX3Np
bXBsZV9hc3luY19yZXN1bHRfbmV3IChHX09CSkVDVCAoc3RyZWFtKSwKKwkJCQkJCSAgd3JhcHBl
cl9jYWxsYmFjaywgdXNlcl9kYXRhLAorCQkJCQkJICB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0
cmVhbV9zZW5kX2FzeW5jKTsKK30KKworLyoqCisgKiB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0
cmVhbV9zZW5kX2FzeW5jOgorICogQGh0dHBzdHJlYW06IGEgI1dlYktpdFNvdXBIVFRQSW5wdXRT
dHJlYW0KKyAqIEBpb19wcmlvcml0eTogdGhlIGlvIHByaW9yaXR5IG9mIHRoZSByZXF1ZXN0Lgor
ICogQGNhbmNlbGxhYmxlOiBvcHRpb25hbCAjR0NhbmNlbGxhYmxlIG9iamVjdCwgJU5VTEwgdG8g
aWdub3JlLgorICogQGNhbGxiYWNrOiBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIHJlcXVlc3Qg
aXMgc2F0aXNmaWVkCisgKiBAdXNlcl9kYXRhOiB0aGUgZGF0YSB0byBwYXNzIHRvIGNhbGxiYWNr
IGZ1bmN0aW9uCisgKgorICogQXN5bmNocm9ub3VzbHkgc2VuZHMgdGhlIEhUVFAgcmVxdWVzdCBh
c3NvY2lhdGVkIHdpdGggQHN0cmVhbSwgYW5kCisgKiByZWFkcyB0aGUgcmVzcG9uc2UgaGVhZGVy
cy4gQ2FsbCB0aGlzIGFmdGVyIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX25ldygpCisg
KiBhbmQgYmVmb3JlIHRoZSBmaXJzdCBnX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jKCkgaWYgeW91
IHdhbnQgdG8KKyAqIGNoZWNrIHRoZSBIVFRQIHN0YXR1cyBjb2RlIGJlZm9yZSB5b3Ugc3RhcnQg
cmVhZGluZy4KKyAqKi8KK3ZvaWQKK3dlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRf
YXN5bmMgKFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gKmh0dHBzdHJlYW0sCisJCQkJCSAgaW50
IGlvX3ByaW9yaXR5LAorCQkJCQkgIEdDYW5jZWxsYWJsZSAgICAgICAgKmNhbmNlbGxhYmxlLAor
CQkJCQkgIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCisJCQkJCSAgZ3BvaW50ZXIgdXNl
cl9kYXRhKQoreworCUdJbnB1dFN0cmVhbSAqaXN0cmVhbSA9IChHSW5wdXRTdHJlYW0gKilodHRw
c3RyZWFtOworCUdFcnJvciAqZXJyb3IgPSBOVUxMOworCisJZ19yZXR1cm5faWZfZmFpbCAoV0VC
S0lUX0lTX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU0gKGh0dHBzdHJlYW0pKTsKKworCWlmICghZ19p
bnB1dF9zdHJlYW1fc2V0X3BlbmRpbmcgKGlzdHJlYW0sICZlcnJvcikpIHsKKwkJZ19zaW1wbGVf
YXN5bmNfcmVwb3J0X2dlcnJvcl9pbl9pZGxlIChHX09CSkVDVCAoaHR0cHN0cmVhbSksCisJCQkJ
CQkgICAgICBjYWxsYmFjaywKKwkJCQkJCSAgICAgIHVzZXJfZGF0YSwKKwkJCQkJCSAgICAgIGVy
cm9yKTsKKwkJZ19lcnJvcl9mcmVlIChlcnJvcik7CisJCXJldHVybjsKKwl9CisJd2Via2l0X3Nv
dXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luY19pbnRlcm5hbCAoaXN0cmVhbSwgaW9fcHJp
b3JpdHksIGNhbmNlbGxhYmxlLAorCQkJCQkJICAgIGNhbGxiYWNrLCB1c2VyX2RhdGEpOworfQor
CisvKioKKyAqIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfZmluaXNoOgorICog
QGh0dHBzdHJlYW06IGEgI1dlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0KKyAqIEByZXN1bHQ6IGEg
I0dBc3luY1Jlc3VsdC4KKyAqIEBlcnJvcjogYSAjR0Vycm9yIGxvY2F0aW9uIHRvIHN0b3JlIHRo
ZSBlcnJvciBvY2N1cmluZywgb3IgJU5VTEwgdG8KKyAqIGlnbm9yZS4KKyAqCisgKiBGaW5pc2hl
cyBhIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmMoKSBvcGVyYXRpb24u
CisgKgorICogUmV0dXJuIHZhbHVlOiAlVFJVRSBpZiB0aGUgbWVzc2FnZSB3YXMgc2VudCBzdWNj
ZXNzZnVsbHkgYW5kCisgKiByZWNlaXZlZCBhIHN1Y2Nlc3NmdWwgc3RhdHVzIGNvZGUsICVGQUxT
RSBpZiBub3QuCisgKiovCitnYm9vbGVhbgord2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1f
c2VuZF9maW5pc2ggKFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gICpodHRwc3RyZWFtLAorCQkJ
CQkgICBHQXN5bmNSZXN1bHQgICAgICAgICAqcmVzdWx0LAorCQkJCQkgICBHRXJyb3IgICAgICAg
ICAgICAgICoqZXJyb3IpCit7CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpzaW1wbGU7CisKKwlnX3Jl
dHVybl92YWxfaWZfZmFpbCAoR19JU19TSU1QTEVfQVNZTkNfUkVTVUxUIChyZXN1bHQpLCBGQUxT
RSk7CisJc2ltcGxlID0gR19TSU1QTEVfQVNZTkNfUkVTVUxUIChyZXN1bHQpOworCisJZ19yZXR1
cm5fdmFsX2lmX2ZhaWwgKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfc291cmNlX3RhZyAoc2lt
cGxlKSA9PSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jLCBGQUxTRSk7
CisKKwlpZiAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3Byb3BhZ2F0ZV9lcnJvciAoc2ltcGxlLCBl
cnJvcikpCisJCXJldHVybiBGQUxTRTsKKworCXJldHVybiBnX3NpbXBsZV9hc3luY19yZXN1bHRf
Z2V0X29wX3Jlc19nYm9vbGVhbiAoc2ltcGxlKTsKK30KKworc3RhdGljIHZvaWQKK3JlYWRfYXN5
bmNfZG9uZSAoR0lucHV0U3RyZWFtICpzdHJlYW0pCit7CisJV2ViS2l0U291cEhUVFBJbnB1dFN0
cmVhbVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJ
VkFURSAoc3RyZWFtKTsKKwlHU2ltcGxlQXN5bmNSZXN1bHQgKnJlc3VsdDsKKwlHRXJyb3IgKmVy
cm9yID0gTlVMTDsKKworCXJlc3VsdCA9IHByaXYtPnJlc3VsdDsKKwlwcml2LT5yZXN1bHQgPSBO
VUxMOworCisJaWYgKGdfY2FuY2VsbGFibGVfc2V0X2Vycm9yX2lmX2NhbmNlbGxlZCAocHJpdi0+
Y2FuY2VsbGFibGUsICZlcnJvcikgfHwKKwkgICAgc2V0X2Vycm9yX2lmX2h0dHBfZmFpbGVkIChw
cml2LT5tc2csICZlcnJvcikpIHsKKwkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9mcm9tX2Vy
cm9yIChyZXN1bHQsIGVycm9yKTsKKwkJZ19lcnJvcl9mcmVlIChlcnJvcik7CisJfSBlbHNlCisJ
CWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dzc2l6ZSAocmVzdWx0LCBwcml2LT5j
YWxsZXJfbnJlYWQpOworCisJcHJpdi0+Z290X2NodW5rX2NiID0gTlVMTDsKKwlwcml2LT5maW5p
c2hlZF9jYiA9IE5VTEw7CisJcHJpdi0+Y2FuY2VsbGVkX2NiID0gTlVMTDsKKwl3ZWJraXRfc291
cF9odHRwX2lucHV0X3N0cmVhbV9kb25lX2lvIChzdHJlYW0pOworCisJZ19zaW1wbGVfYXN5bmNf
cmVzdWx0X2NvbXBsZXRlIChyZXN1bHQpOworCWdfb2JqZWN0X3VucmVmIChyZXN1bHQpOworfQor
CitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyAo
R0lucHV0U3RyZWFtICAgICAgICAqc3RyZWFtLAorCQkJCQkgIHZvaWQgICAgICAgICAgICAgICAg
KmJ1ZmZlciwKKwkJCQkJICBnc2l6ZSBjb3VudCwKKwkJCQkJICBpbnQgaW9fcHJpb3JpdHksCisJ
CQkJCSAgR0NhbmNlbGxhYmxlICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJCSAgR0FzeW5jUmVh
ZHlDYWxsYmFjayBjYWxsYmFjaywKKwkJCQkJICBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJV2Vi
S2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lO
UFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKwlHU2ltcGxlQXN5bmNSZXN1bHQgKnJl
c3VsdDsKKworCS8qIElmIHRoZSBzZXNzaW9uIHVzZXMgdGhlIGRlZmF1bHQgR01haW5Db250ZXh0
LCB0aGVuIHdlIGNhbiBkbworCSAqIGFzeW5jIEkvTyBkaXJlY3RseS4gQnV0IGlmIGl0IGhhcyBp
dHMgb3duIG1haW4gY29udGV4dCwgd2UgZmFsbAorCSAqIGJhY2sgdG8gdGhlIGFzeW5jLXZpYS1z
eW5jLWluLWFub3RoZXItdGhyZWFkIGltcGxlbWVudGF0aW9uLgorCSAqLworCWlmIChzb3VwX3Nl
c3Npb25fZ2V0X2FzeW5jX2NvbnRleHQgKHByaXYtPnNlc3Npb24pKSB7CisJCUdfSU5QVVRfU1RS
RUFNX0NMQVNTICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9wYXJlbnRfY2xhc3MpLT4K
KwkJcmVhZF9hc3luYyAoc3RyZWFtLCBidWZmZXIsIGNvdW50LCBpb19wcmlvcml0eSwKKwkJCSAg
ICBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJfZGF0YSk7CisJCXJldHVybjsKKwl9CisKKwly
ZXN1bHQgPSBnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3IChHX09CSkVDVCAoc3RyZWFtKSwKKwkJ
CQkJICAgIGNhbGxiYWNrLCB1c2VyX2RhdGEsCisJCQkJCSAgICB3ZWJraXRfc291cF9odHRwX2lu
cHV0X3N0cmVhbV9yZWFkX2FzeW5jKTsKKworCWlmIChwcml2LT5maW5pc2hlZCkgeworCQlnX3Np
bXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19nc3NpemUgKHJlc3VsdCwgMCk7CisJCWdfc2lt
cGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZV9pbl9pZGxlIChyZXN1bHQpOworCQlnX29iamVjdF91
bnJlZiAocmVzdWx0KTsKKwkJcmV0dXJuOworCX0KKworCWlmIChwcml2LT5sZWZ0b3Zlcl9idWZz
aXplKSB7CisJCWdzaXplIG5yZWFkID0gcmVhZF9mcm9tX2xlZnRvdmVyIChwcml2LCBidWZmZXIs
IGNvdW50KTsKKwkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ3NzaXplIChyZXN1
bHQsIG5yZWFkKTsKKwkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlX2luX2lkbGUgKHJl
c3VsdCk7CisJCWdfb2JqZWN0X3VucmVmIChyZXN1bHQpOworCQlyZXR1cm47CisJfQorCisJcHJp
di0+cmVzdWx0ID0gcmVzdWx0OworCisJcHJpdi0+Z290X2NodW5rX2NiID0gcmVhZF9hc3luY19k
b25lOworCXByaXYtPmZpbmlzaGVkX2NiID0gcmVhZF9hc3luY19kb25lOworCXByaXYtPmNhbmNl
bGxlZF9jYiA9IHJlYWRfYXN5bmNfZG9uZTsKKwl3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVh
bV9wcmVwYXJlX2Zvcl9pbyAoc3RyZWFtLCBjYW5jZWxsYWJsZSwgYnVmZmVyLCBjb3VudCk7Cit9
CisKK3N0YXRpYyBnc3NpemUKK3dlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWRfZmlu
aXNoIChHSW5wdXRTdHJlYW0gICpzdHJlYW0sCisJCQkJCSAgIEdBc3luY1Jlc3VsdCAgKnJlc3Vs
dCwKKwkJCQkJICAgR0Vycm9yICAgICAgICoqZXJyb3IpCit7CisJR1NpbXBsZUFzeW5jUmVzdWx0
ICpzaW1wbGU7CisKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoR19JU19TSU1QTEVfQVNZTkNfUkVT
VUxUIChyZXN1bHQpLCAtMSk7CisJc2ltcGxlID0gR19TSU1QTEVfQVNZTkNfUkVTVUxUIChyZXN1
bHQpOworCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X3Nv
dXJjZV90YWcgKHNpbXBsZSkgPT0gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVhZF9h
c3luYywgLTEpOworCisJcmV0dXJuIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfb3BfcmVzX2dz
c2l6ZSAoc2ltcGxlKTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX2Nsb3NlX2FzeW5jIChHSW5wdXRTdHJlYW0gICAgICAgKnN0cmVhbSwKKwkJCQkJICAg
aW50IGlvX3ByaW9yaXR5LAorCQkJCQkgICBHQ2FuY2VsbGFibGUgICAgICAgKmNhbmNlbGxhYmxl
LAorCQkJCQkgICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAorCQkJCQkgICBncG9pbnRl
ciB1c2VyX2RhdGEpCit7CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpyZXN1bHQ7CisJZ2Jvb2xlYW4g
c3VjY2VzczsKKwlHRXJyb3IgKmVycm9yID0gTlVMTDsKKworCXJlc3VsdCA9IGdfc2ltcGxlX2Fz
eW5jX3Jlc3VsdF9uZXcgKEdfT0JKRUNUIChzdHJlYW0pLAorCQkJCQkgICAgY2FsbGJhY2ssIHVz
ZXJfZGF0YSwKKwkJCQkJICAgIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlX2Fz
eW5jKTsKKwlzdWNjZXNzID0gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2UgKHN0
cmVhbSwgY2FuY2VsbGFibGUsICZlcnJvcik7CisJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9v
cF9yZXNfZ2Jvb2xlYW4gKHJlc3VsdCwgc3VjY2Vzcyk7CisJaWYgKGVycm9yKSB7CisJCWdfc2lt
cGxlX2FzeW5jX3Jlc3VsdF9zZXRfZnJvbV9lcnJvciAocmVzdWx0LCBlcnJvcik7CisJCWdfZXJy
b3JfZnJlZSAoZXJyb3IpOworCX0KKworCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZV9p
bl9pZGxlIChyZXN1bHQpOworCWdfb2JqZWN0X3VucmVmIChyZXN1bHQpOworfQorCitzdGF0aWMg
Z2Jvb2xlYW4KK3dlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlX2ZpbmlzaCAoR0lu
cHV0U3RyZWFtICAqc3RyZWFtLAorCQkJCQkgICAgR0FzeW5jUmVzdWx0ICAqcmVzdWx0LAorCQkJ
CQkgICAgR0Vycm9yICAgICAgICoqZXJyb3IpCit7CisJLyogRmFpbHVyZXMgaGFuZGxlZCBpbiBn
ZW5lcmljIGNsb3NlX2ZpbmlzaCBjb2RlICovCisJcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBn
b2Zmc2V0Cit3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV90ZWxsIChHU2Vla2FibGUgKnNl
ZWthYmxlKQoreworCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gV0VC
S0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHNlZWthYmxlKTsKKworCXJl
dHVybiBwcml2LT5vZmZzZXQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgord2Via2l0X3NvdXBfaHR0
cF9pbnB1dF9zdHJlYW1fY2FuX3NlZWsgKEdTZWVrYWJsZSAqc2Vla2FibGUpCit7CisJcmV0dXJu
IFRSVUU7Cit9CisKK2V4dGVybiB2b2lkIHNvdXBfbWVzc2FnZV9pb19jbGVhbnVwIChTb3VwTWVz
c2FnZSAqbXNnKTsKKworc3RhdGljIGdib29sZWFuCit3ZWJraXRfc291cF9odHRwX2lucHV0X3N0
cmVhbV9zZWVrIChHU2Vla2FibGUgICAgICpzZWVrYWJsZSwKKwkJCQkgICAgZ29mZnNldCBvZmZz
ZXQsCisJCQkJICAgIEdTZWVrVHlwZSB0eXBlLAorCQkJCSAgICBHQ2FuY2VsbGFibGUgICpjYW5j
ZWxsYWJsZSwKKwkJCQkgICAgR0Vycm9yICAgICAgICoqZXJyb3IpCit7CisJR0lucHV0U3RyZWFt
ICpzdHJlYW0gPSBHX0lOUFVUX1NUUkVBTSAoc2Vla2FibGUpOworCVdlYktpdFNvdXBIVFRQSW5w
dXRTdHJlYW1Qcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VU
X1BSSVZBVEUgKHNlZWthYmxlKTsKKwljaGFyICpyYW5nZTsKKworCWlmICh0eXBlID09IEdfU0VF
S19FTkQpIHsKKwkJLyogRklYTUU6IHdlIGNvdWxkIHNlbmQgImJ5dGVzPS1vZmZzZXQiLCBidXQg
dW5sZXNzIHdlCisJCSAqIGtub3cgdGhlIENvbnRlbnQtTGVuZ3RoLCB3ZSB3b3VsZG4ndCBiZSBh
YmxlIHRvCisJCSAqIGFuc3dlciBhIHRlbGwoKSBwcm9wZXJseS4gV2UgY291bGQgZmluZCB0aGUK
KwkJICogQ29udGVudC1MZW5ndGggYnkgZG9pbmcgYSBIRUFELi4uCisJCSAqLworCisJCWdfc2V0
X2Vycm9yX2xpdGVyYWwgKGVycm9yLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX05PVF9TVVBQT1JU
RUQsCisJCQkJICAgICAiR19TRUVLX0VORCBub3QgY3VycmVudGx5IHN1cHBvcnRlZCIpOworCQly
ZXR1cm4gRkFMU0U7CisJfQorCisJaWYgKCFnX2lucHV0X3N0cmVhbV9zZXRfcGVuZGluZyAoc3Ry
ZWFtLCBlcnJvcikpCisJCXJldHVybiBGQUxTRTsKKworCXNvdXBfc2Vzc2lvbl9jYW5jZWxfbWVz
c2FnZSAocHJpdi0+c2Vzc2lvbiwgcHJpdi0+bXNnLCBTT1VQX1NUQVRVU19DQU5DRUxMRUQpOwor
CXNvdXBfbWVzc2FnZV9pb19jbGVhbnVwIChwcml2LT5tc2cpOworCisJc3dpdGNoICh0eXBlKSB7
CisJCWNhc2UgR19TRUVLX0NVUjoKKwkJCW9mZnNldCArPSBwcml2LT5vZmZzZXQ7CisJCS8qIGZh
bGwgdGhyb3VnaCAqLworCisJCWNhc2UgR19TRUVLX1NFVDoKKwkJCXJhbmdlID0gZ19zdHJkdXBf
cHJpbnRmICgiYnl0ZXM9JSIgR19HVUlOVDY0X0ZPUk1BVCAiLSIsIChndWludDY0KW9mZnNldCk7
CisJCQlwcml2LT5vZmZzZXQgPSBvZmZzZXQ7CisJCQlicmVhazsKKworCQljYXNlIEdfU0VFS19F
TkQ6CisJCQlyYW5nZSA9IE5VTEw7IC8qIGtlZXAgY29tcGlsZXJzIGhhcHB5ICovCisJCQlnX3Jl
dHVybl92YWxfaWZfcmVhY2hlZCAoRkFMU0UpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJ
CWdfcmV0dXJuX3ZhbF9pZl9yZWFjaGVkIChGQUxTRSk7CisJfQorCisJc291cF9tZXNzYWdlX2hl
YWRlcnNfcmVtb3ZlIChwcml2LT5tc2ctPnJlcXVlc3RfaGVhZGVycywgIlJhbmdlIik7CisJc291
cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kIChwcml2LT5tc2ctPnJlcXVlc3RfaGVhZGVycywgIlJh
bmdlIiwgcmFuZ2UpOworCWdfZnJlZSAocmFuZ2UpOworCisJd2Via2l0X3NvdXBfaHR0cF9pbnB1
dF9zdHJlYW1fcXVldWVfbWVzc2FnZSAoV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU0gKHN0
cmVhbSkpOworCisJZ19pbnB1dF9zdHJlYW1fY2xlYXJfcGVuZGluZyAoc3RyZWFtKTsKKwlyZXR1
cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuCit3ZWJraXRfc291cF9odHRwX2lucHV0X3N0
cmVhbV9jYW5fdHJ1bmNhdGUgKEdTZWVrYWJsZSAqc2Vla2FibGUpCit7CisJcmV0dXJuIEZBTFNF
OworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3dlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3Ry
dW5jYXRlIChHU2Vla2FibGUgICAgICpzZWVrYWJsZSwKKwkJCQkJZ29mZnNldCBvZmZzZXQsCisJ
CQkJCUdDYW5jZWxsYWJsZSAgKmNhbmNlbGxhYmxlLAorCQkJCQlHRXJyb3IgICAgICAgKiplcnJv
cikKK3sKKwlnX3NldF9lcnJvcl9saXRlcmFsIChlcnJvciwgR19JT19FUlJPUiwgR19JT19FUlJP
Ul9OT1RfU1VQUE9SVEVELAorCQkJICAgICAiVHJ1bmNhdGUgbm90IGFsbG93ZWQgb24gaW5wdXQg
c3RyZWFtIik7CisJcmV0dXJuIEZBTFNFOworfQorCitTb3VwTWVzc2FnZSAqCit3ZWJraXRfc291
cF9odHRwX2lucHV0X3N0cmVhbV9nZXRfbWVzc2FnZSAoV2ViS2l0U291cEhUVFBJbnB1dFN0cmVh
bSAqaHR0cHN0cmVhbSkKK3sKKwlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJp
diA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChodHRwc3RyZWFt
KTsKKwlyZXR1cm4gcHJpdi0+bXNnID8gZ19vYmplY3RfcmVmIChwcml2LT5tc2cpIDogTlVMTDsK
K30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAt
aHR0cC1pbnB1dC1zdHJlYW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hl
L3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi42Yjk4NTU5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvY2FjaGUvc291cC1odHRwLWlucHV0LXN0cmVhbS5oCkBAIC0wLDAgKzEsNzcgQEAKKy8q
IC0qLSBNb2RlOiBDOyB0YWItd2lkdGg6IDg7IGluZGVudC10YWJzLW1vZGU6IHQ7IGMtYmFzaWMt
b2Zmc2V0OiA4IC0qLSAqLworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOSBS
ZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcs
IFVTQS4KKyAqLworCisjaWZuZGVmIF9fV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fSF9f
CisjZGVmaW5lIF9fV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fSF9fCisKKyNpbmNsdWRl
IDxnaW8vZ2lvLmg+CisjaW5jbHVkZSA8bGlic291cC9zb3VwLXR5cGVzLmg+CisKK0dfQkVHSU5f
REVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNICAgICAg
ICAgKHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2dldF90eXBlICgpKQorI2RlZmluZSBX
RUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTShvKSAgICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9DQVNUICgobyksIFdFQktJVF9UWVBFX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU0sIFdl
YktpdFNvdXBIVFRQSW5wdXRTdHJlYW0pKQorI2RlZmluZSBXRUJLSVRfU09VUF9IVFRQX0lOUFVU
X1NUUkVBTV9DTEFTUyhrKSAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoayksIFdFQktJ
VF9UWVBFX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU0sIFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1D
bGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19TT1VQX0hUVFBfSU5QVVRfU1RSRUFNKG8pICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvKSwgV0VCS0lUX1RZUEVfU09VUF9IVFRQ
X0lOUFVUX1NUUkVBTSkpCisjZGVmaW5lIFdFQktJVF9JU19TT1VQX0hUVFBfSU5QVVRfU1RSRUFN
X0NMQVNTKGspICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrKSwgV0VCS0lUX1RZUEVfU09V
UF9IVFRQX0lOUFVUX1NUUkVBTSkpCisjZGVmaW5lIFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RS
RUFNX0dFVF9DTEFTUyhvKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG8pLCBXRUJLSVRf
VFlQRV9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNLCBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtQ2xh
c3MpKQorCit0eXBlZGVmIHN0cnVjdCBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtIFdlYktpdFNv
dXBIVFRQSW5wdXRTdHJlYW07Cit0eXBlZGVmIHN0cnVjdCBXZWJLaXRTb3VwSFRUUElucHV0U3Ry
ZWFtQ2xhc3MgV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbUNsYXNzOworCitzdHJ1Y3QgV2ViS2l0
U291cEhUVFBJbnB1dFN0cmVhbSB7CisJR0lucHV0U3RyZWFtIHBhcmVudDsKK307CisKK3N0cnVj
dCBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtQ2xhc3MgeworCUdJbnB1dFN0cmVhbUNsYXNzIHBh
cmVudF9jbGFzczsKKworCS8qIFBhZGRpbmcgZm9yIGZ1dHVyZSBleHBhbnNpb24gKi8KKwl2b2lk
ICgqX2dfcmVzZXJ2ZWQxKSh2b2lkKTsKKwl2b2lkICgqX2dfcmVzZXJ2ZWQyKSh2b2lkKTsKKwl2
b2lkICgqX2dfcmVzZXJ2ZWQzKSh2b2lkKTsKKwl2b2lkICgqX2dfcmVzZXJ2ZWQ0KSh2b2lkKTsK
Kwl2b2lkICgqX2dfcmVzZXJ2ZWQ1KSh2b2lkKTsKK307CisKK0dUeXBlIHdlYmtpdF9zb3VwX2h0
dHBfaW5wdXRfc3RyZWFtX2dldF90eXBlICh2b2lkKSBHX0dOVUNfQ09OU1Q7CisKK1dlYktpdFNv
dXBIVFRQSW5wdXRTdHJlYW0gKndlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX25ldyAoU291
cFNlc3Npb24gICAgICAgICAqc2Vzc2lvbiwKKwkJCQkJCQkgICAgICBTb3VwTWVzc2FnZSAgICAg
ICAgICptc2cpOworCitnYm9vbGVhbiAgICAgICAgICAgICB3ZWJraXRfc291cF9odHRwX2lucHV0
X3N0cmVhbV9zZW5kIChXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtICpodHRwc3RyZWFtLAorCQkJ
CQkJCSBHQ2FuY2VsbGFibGUgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkJCQkgR0Vycm9yICAg
ICAgICAgICAgICoqZXJyb3IpOworCit2b2lkICAgICAgICAgICAgICAgICB3ZWJraXRfc291cF9o
dHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jIChXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtICpo
dHRwc3RyZWFtLAorCQkJCQkJCSAgICAgICBpbnQgaW9fcHJpb3JpdHksCisJCQkJCQkJICAgICAg
IEdDYW5jZWxsYWJsZSAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJCQkJCSAgICAgICBHQXN5bmNS
ZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAorCQkJCQkJCSAgICAgICBncG9pbnRlciB1c2VyX2RhdGEp
OworZ2Jvb2xlYW4gICAgICAgICAgICAgd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2Vu
ZF9maW5pc2ggKFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gKmh0dHBzdHJlYW0sCisJCQkJCQkJ
CUdBc3luY1Jlc3VsdCAgICAgICAgKnJlc3VsdCwKKwkJCQkJCQkJR0Vycm9yICAgICAgICAgICAg
ICoqZXJyb3IpOworCitTb3VwTWVzc2FnZSAgICAgICAgICp3ZWJraXRfc291cF9odHRwX2lucHV0
X3N0cmVhbV9nZXRfbWVzc2FnZSAoV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSAqaHR0cHN0cmVh
bSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfX1dFQktJVF9TT1VQX0hUVFBfSU5QVVRf
U1RSRUFNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
Y2FjaGUvc291cC1yZXF1ZXN0LWRhdGEuYyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3Vw
L2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uOTg0OTI2OQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmMKQEAgLTAsMCArMSwxNzAgQEAKKy8qIC0q
LSBNb2RlOiBDOyB0YWItd2lkdGg6IDg7IGluZGVudC10YWJzLW1vZGU6IHQ7IGMtYmFzaWMtb2Zm
c2V0OiA4IC0qLSAqLworLyoKKyAqIHNvdXAtcmVxdWVzdC1kYXRhLmM6IGRhdGE6IFVSSSByZXF1
ZXN0IG9iamVjdAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5j
bHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3QtZGF0YS5oIgor
CisjaW5jbHVkZSAic291cC1yZXF1ZXN0ZXIuaCIKKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4K
KyNpbmNsdWRlIDxnbGliL2dpMThuLmg+CisKK0dfREVGSU5FX1RZUEUgKFdlYktpdFNvdXBSZXF1
ZXN0RGF0YSwgd2Via2l0X3NvdXBfcmVxdWVzdF9kYXRhLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVF
U1QpCisKK3N0cnVjdCBfV2ViS2l0U291cFJlcXVlc3REYXRhUHJpdmF0ZSB7CisJZ3NpemUgY29u
dGVudF9sZW5ndGg7CisJY2hhciAqY29udGVudF90eXBlOworfTsKKworc3RhdGljIHZvaWQKK3dl
YmtpdF9zb3VwX3JlcXVlc3RfZGF0YV9pbml0IChXZWJLaXRTb3VwUmVxdWVzdERhdGEgKmRhdGEp
Cit7CisJZGF0YS0+cHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAoZGF0YSwgV0VC
S0lUX1RZUEVfU09VUF9SRVFVRVNUX0RBVEEsIFdlYktpdFNvdXBSZXF1ZXN0RGF0YVByaXZhdGUp
OworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfcmVxdWVzdF9kYXRhX2ZpbmFsaXplIChH
T2JqZWN0ICpvYmplY3QpCit7CisJV2ViS2l0U291cFJlcXVlc3REYXRhICpkYXRhID0gV0VCS0lU
X1NPVVBfUkVRVUVTVF9EQVRBIChvYmplY3QpOworCisJZ19mcmVlIChkYXRhLT5wcml2LT5jb250
ZW50X3R5cGUpOworCisJR19PQkpFQ1RfQ0xBU1MgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZGF0YV9w
YXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKK30KKworc3RhdGljIGdib29sZWFuCit3
ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFfY2hlY2tfdXJpIChXZWJLaXRTb3VwUmVxdWVzdCAgKnJl
cXVlc3QsCisJCQkJICAgIFNvdXBVUkkgICAgICAqdXJpLAorCQkJCSAgICBHRXJyb3IgICAgICAq
KmVycm9yKQoreworCXJldHVybiB1cmktPmhvc3QgPT0gTlVMTDsKK30KKworc3RhdGljIEdJbnB1
dFN0cmVhbSAqCit3ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFfc2VuZCAoV2ViS2l0U291cFJlcXVl
c3QgICAqcmVxdWVzdCwKKwkJCSAgICAgICBHQ2FuY2VsbGFibGUgICpjYW5jZWxsYWJsZSwKKwkJ
CSAgICAgICBHRXJyb3IgICAgICAgKiplcnJvcikKK3sKKwlXZWJLaXRTb3VwUmVxdWVzdERhdGEg
KmRhdGEgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0RBVEEgKHJlcXVlc3QpOworCVNvdXBVUkkgKnVy
aSA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X3VyaSAocmVxdWVzdCk7CisJR0lucHV0U3RyZWFt
ICptZW1zdHJlYW07CisJY29uc3QgY2hhciAqY29tbWEsICpzZW1pLCAqc3RhcnQsICplbmQ7CisJ
Z2Jvb2xlYW4gYmFzZTY0ID0gRkFMU0U7CisKKwlnY2hhciAqdXJpc3RyID0gc291cF91cmlfdG9f
c3RyaW5nICh1cmksIEZBTFNFKTsKKwljb21tYSA9IHN0cmNociAodXJpc3RyLCAnLCcpOworCWlm
IChjb21tYSAmJiBjb21tYSAhPSB1cmlzdHIpIHsKKwkJLyogRGVhbCB3aXRoIE1JTUUgdHlwZSAv
IHBhcmFtcyAqLworCQlzZW1pID0gbWVtY2hyICh1cmlzdHIsICc7JywgY29tbWEgLSB1cmlzdHIp
OworCQllbmQgPSBzZW1pID8gc2VtaSA6IGNvbW1hOworCisJCWlmIChzZW1pICYmICFnX2FzY2lp
X3N0cm5jYXNlY21wIChzZW1pLCAiO2Jhc2U2NCIsIE1BWCAoY29tbWEgLSBzZW1pLCBzdHJsZW4g
KCI7YmFzZTY0IikpKSkKKwkJCWJhc2U2NCA9IFRSVUU7CisKKwkJaWYgKGVuZCAhPSB1cmlzdHIp
CisJCQlpZiAoYmFzZTY0KQorCQkJCWRhdGEtPnByaXYtPmNvbnRlbnRfdHlwZSA9IGdfc3RybmR1
cCAodXJpc3RyLCBlbmQgLSB1cmlzdHIpOworCQkJZWxzZQorCQkJCWRhdGEtPnByaXYtPmNvbnRl
bnRfdHlwZSA9CisJCQkJCXdlYmtpdF9zb3VwX3JlcXVlc3RfdXJpX2RlY29kZWRfY29weSAodXJp
c3RyLCBlbmQgLSB1cmlzdHIpOworCX0KKworCW1lbXN0cmVhbSA9IGdfbWVtb3J5X2lucHV0X3N0
cmVhbV9uZXcgKCk7CisKKwlzdGFydCA9IGNvbW1hID8gY29tbWEgKyAxIDogdXJpc3RyOworCisJ
aWYgKCpzdGFydCkgeworCQlndWNoYXIgKmJ1ZjsKKworCQlpZiAoYmFzZTY0KSB7CisJCQlpbnQg
aW5sZW4sIHN0YXRlID0gMDsKKwkJCWd1aW50IHNhdmUgPSAwOworCisJCQlpbmxlbiA9IHN0cmxl
biAoc3RhcnQpOworCQkJYnVmID0gZ19tYWxsb2MgKGlubGVuICogMyAvIDQpOworCQkJZGF0YS0+
cHJpdi0+Y29udGVudF9sZW5ndGggPQorCQkJCWdfYmFzZTY0X2RlY29kZV9zdGVwIChzdGFydCwg
aW5sZW4sIGJ1ZiwKKwkJCQkJCSAgICAgICZzdGF0ZSwgJnNhdmUpOworCQkJaWYgKHN0YXRlICE9
IDApIHsKKwkJCQlnX2ZyZWUgKGJ1Zik7CisJCQkJZ290byBmYWlsOworCQkJfQorCQl9IGVsc2Ug
eworCQkJLyogQ2Fubm90IHVzZSBnX3VyaV91bmVzY2FwZV9zdHJpbmcgbm9yCisJCQkgICBzb3Vw
X3VyaV9kZWNvZGUgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvCisJCQkgICBmYWlsIGZvciB0aGlu
Z3MgbGlrZSAiJTNFJSUzQyIgLT4gIj4lPCIgKi8KKwkJCWJ1ZiA9IChndWNoYXIgKil3ZWJraXRf
c291cF9yZXF1ZXN0X3VyaV9kZWNvZGVkX2NvcHkgKHN0YXJ0LCBzdHJsZW4gKHN0YXJ0KSk7CisJ
CQlpZiAoIWJ1ZikKKwkJCQlnb3RvIGZhaWw7CisJCQlkYXRhLT5wcml2LT5jb250ZW50X2xlbmd0
aCA9IHN0cmxlbiAoKGNoYXIgKilidWYpOworCQl9CisKKwkJZ19tZW1vcnlfaW5wdXRfc3RyZWFt
X2FkZF9kYXRhIChHX01FTU9SWV9JTlBVVF9TVFJFQU0gKG1lbXN0cmVhbSksCisJCQkJCQlidWYs
IGRhdGEtPnByaXYtPmNvbnRlbnRfbGVuZ3RoLAorCQkJCQkJZ19mcmVlKTsKKwl9CisJZ19mcmVl
ICh1cmlzdHIpOworCisJcmV0dXJuIG1lbXN0cmVhbTsKKworIGZhaWw6CisJZ19mcmVlICh1cmlz
dHIpOworCWdfc2V0X2Vycm9yIChlcnJvciwgV0VCS0lUX1NPVVBfRVJST1IsIFdFQktJVF9TT1VQ
X0VSUk9SX0JBRF9VUkksCisJCSAgICAgXyAoIlVuYWJsZSB0byBkZWNvZGUgVVJJOiAlcyIpLCBz
dGFydCk7CisJZ19vYmplY3RfdW5yZWYgKG1lbXN0cmVhbSk7CisJcmV0dXJuIE5VTEw7Cit9CisK
K3N0YXRpYyBnb2Zmc2V0Cit3ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFfZ2V0X2NvbnRlbnRfbGVu
Z3RoIChXZWJLaXRTb3VwUmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlXZWJLaXRTb3VwUmVxdWVzdERh
dGEgKmRhdGEgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0RBVEEgKHJlcXVlc3QpOworCisJcmV0dXJu
IGRhdGEtPnByaXYtPmNvbnRlbnRfbGVuZ3RoOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCit3
ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFfZ2V0X2NvbnRlbnRfdHlwZSAoV2ViS2l0U291cFJlcXVl
c3QgKnJlcXVlc3QpCit7CisJV2ViS2l0U291cFJlcXVlc3REYXRhICpkYXRhID0gV0VCS0lUX1NP
VVBfUkVRVUVTVF9EQVRBIChyZXF1ZXN0KTsKKworCXJldHVybiBkYXRhLT5wcml2LT5jb250ZW50
X3R5cGU7Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFfY2xhc3Nf
aW5pdCAoV2ViS2l0U291cFJlcXVlc3REYXRhQ2xhc3MgKnJlcXVlc3RfZGF0YV9jbGFzcykKK3sK
KwlHT2JqZWN0Q2xhc3MgKm9iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChyZXF1ZXN0X2Rh
dGFfY2xhc3MpOworCVdlYktpdFNvdXBSZXF1ZXN0Q2xhc3MgKnJlcXVlc3RfY2xhc3MgPQorCQlX
RUJLSVRfU09VUF9SRVFVRVNUX0NMQVNTIChyZXF1ZXN0X2RhdGFfY2xhc3MpOworCisJZ190eXBl
X2NsYXNzX2FkZF9wcml2YXRlIChyZXF1ZXN0X2RhdGFfY2xhc3MsIHNpemVvZiAoV2ViS2l0U291
cFJlcXVlc3REYXRhUHJpdmF0ZSkpOworCisJb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IHdlYmtp
dF9zb3VwX3JlcXVlc3RfZGF0YV9maW5hbGl6ZTsKKworCXJlcXVlc3RfY2xhc3MtPmNoZWNrX3Vy
aSA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfZGF0YV9jaGVja191cmk7CisJcmVxdWVzdF9jbGFzcy0+
c2VuZCA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfZGF0YV9zZW5kOworCXJlcXVlc3RfY2xhc3MtPmdl
dF9jb250ZW50X2xlbmd0aCA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfZGF0YV9nZXRfY29udGVudF9s
ZW5ndGg7CisJcmVxdWVzdF9jbGFzcy0+Z2V0X2NvbnRlbnRfdHlwZSA9IHdlYmtpdF9zb3VwX3Jl
cXVlc3RfZGF0YV9nZXRfY29udGVudF90eXBlOworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWRhdGEuaCBiL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk2MzFhNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmgKQEAgLTAs
MCArMSw1MiBAQAorLyogLSotIE1vZGU6IEM7IHRhYi13aWR0aDogODsgaW5kZW50LXRhYnMtbW9k
ZTogdDsgYy1iYXNpYy1vZmZzZXQ6IDggLSotICovCisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5
IFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRl
ZiBXRUJLSVRfU09VUF9SRVFVRVNUX0RBVEFfSAorI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNU
X0RBVEFfSCAxCisKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3QuaCIKKworR19CRUdJTl9ERUNMUwor
CisjZGVmaW5lIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9EQVRBICAgICAgICAgICAgKHdlYmtp
dF9zb3VwX3JlcXVlc3RfZGF0YV9nZXRfdHlwZSAoKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfUkVR
VUVTVF9EQVRBKG9iamVjdCkgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChv
YmplY3QpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfREFUQSwgV2ViS2l0U291cFJlcXVlc3RE
YXRhKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9EQVRBX0NMQVNTKGtsYXNzKSAgICAo
R19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVT
VF9EQVRBLCBXZWJLaXRTb3VwUmVxdWVzdERhdGFDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19T
T1VQX1JFUVVFU1RfREFUQShvYmplY3QpICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBF
ICgob2JqZWN0KSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0RBVEEpKQorI2RlZmluZSBXRUJL
SVRfSVNfU09VUF9SRVFVRVNUX0RBVEFfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
VFlQRSAoKGtsYXNzKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0RBVEEpKQorI2RlZmluZSBX
RUJLSVRfU09VUF9SRVFVRVNUX0RBVEFfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0Vf
R0VUX0NMQVNTICgob2JqKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0RBVEEsIFdlYktpdFNv
dXBSZXF1ZXN0RGF0YUNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0
RGF0YVByaXZhdGUgV2ViS2l0U291cFJlcXVlc3REYXRhUHJpdmF0ZTsKKwordHlwZWRlZiBzdHJ1
Y3QgeworCVdlYktpdFNvdXBSZXF1ZXN0IHBhcmVudDsKKworCVdlYktpdFNvdXBSZXF1ZXN0RGF0
YVByaXZhdGUgKnByaXY7Cit9IFdlYktpdFNvdXBSZXF1ZXN0RGF0YTsKKwordHlwZWRlZiBzdHJ1
Y3QgeworCVdlYktpdFNvdXBSZXF1ZXN0Q2xhc3MgcGFyZW50OworfSBXZWJLaXRTb3VwUmVxdWVz
dERhdGFDbGFzczsKKworR1R5cGUgd2Via2l0X3NvdXBfcmVxdWVzdF9kYXRhX2dldF90eXBlICh2
b2lkKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9TT1VQX1JFUVVFU1RfREFU
QV9IICovCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9z
b3VwLXJlcXVlc3QtZmlsZS5jIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUv
c291cC1yZXF1ZXN0LWZpbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4x
OWRlZGI2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
Y2FjaGUvc291cC1yZXF1ZXN0LWZpbGUuYwpAQCAtMCwwICsxLDMzMiBAQAorLyogLSotIE1vZGU6
IEM7IHRhYi13aWR0aDogODsgaW5kZW50LXRhYnMtbW9kZTogdDsgYy1iYXNpYy1vZmZzZXQ6IDgg
LSotICovCisvKgorICogc291cC1yZXF1ZXN0LWZpbGUuYzogZmlsZTogVVJJIHJlcXVlc3Qgb2Jq
ZWN0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxj
b25maWcuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAic291cC1yZXF1ZXN0LWZpbGUuaCIKKyNpbmNs
dWRlICJzb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uaCIKKyNpbmNsdWRlICJzb3VwLXJlcXVl
c3Rlci5oIgorI2luY2x1ZGUgPGdsaWIvZ2kxOG4uaD4KKworR19ERUZJTkVfVFlQRSAoV2ViS2l0
U291cFJlcXVlc3RGaWxlLCB3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGUsIFdFQktJVF9UWVBFX1NP
VVBfUkVRVUVTVCkKKworc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdEZpbGVQcml2YXRlIHsKKwlH
RmlsZSAqZ2ZpbGU7CisKKwljaGFyICptaW1lX3R5cGU7CisJZ29mZnNldCBzaXplOworfTsKKwor
R0ZpbGUgKgord2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2dldF9maWxlIChXZWJLaXRTb3VwUmVx
dWVzdEZpbGUgKmZpbGUpCit7CisJcmV0dXJuIGdfb2JqZWN0X3JlZiAoZmlsZS0+cHJpdi0+Z2Zp
bGUpOworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2luaXQgKFdl
YktpdFNvdXBSZXF1ZXN0RmlsZSAqZmlsZSkKK3sKKwlmaWxlLT5wcml2ID0gR19UWVBFX0lOU1RB
TkNFX0dFVF9QUklWQVRFIChmaWxlLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfRklMRSwgV2Vi
S2l0U291cFJlcXVlc3RGaWxlUHJpdmF0ZSk7CisKKwlmaWxlLT5wcml2LT5zaXplID0gLTE7Cit9
CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfZmluYWxpemUgKEdPYmpl
Y3QgKm9iamVjdCkKK3sKKwlXZWJLaXRTb3VwUmVxdWVzdEZpbGUgKmZpbGUgPSBXRUJLSVRfU09V
UF9SRVFVRVNUX0ZJTEUgKG9iamVjdCk7CisKKwlpZiAoZmlsZS0+cHJpdi0+Z2ZpbGUpCisJCWdf
b2JqZWN0X3VucmVmIChmaWxlLT5wcml2LT5nZmlsZSk7CisJZ19mcmVlIChmaWxlLT5wcml2LT5t
aW1lX3R5cGUpOworCisJR19PQkpFQ1RfQ0xBU1MgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9w
YXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKK30KKworc3RhdGljIGdib29sZWFuCit3
ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfY2hlY2tfdXJpIChXZWJLaXRTb3VwUmVxdWVzdCAgKnJl
cXVlc3QsCisJCQkJICAgIFNvdXBVUkkgICAgICAqdXJpLAorCQkJCSAgICBHRXJyb3IgICAgICAq
KmVycm9yKQoreworCS8qICJmaWxlOi9mb28iIGlzIG5vdCB2YWxpZCAqLworCWlmICghdXJpLT5o
b3N0KQorCQlyZXR1cm4gRkFMU0U7CisKKwkvKiBidXQgaXQgbXVzdCBiZSAiZmlsZTovLy8uLi4i
IG9yICJmaWxlOi8vbG9jYWxob3N0Ly4uLiIgKi8KKwlpZiAodXJpLT5zY2hlbWUgPT0gU09VUF9V
UklfU0NIRU1FX0ZJTEUgJiYKKwkgICAgKnVyaS0+aG9zdCAmJgorCSAgICBnX2FzY2lpX3N0cmNh
c2VjbXAgKHVyaS0+aG9zdCwgImxvY2FsaG9zdCIpICE9IDApCisJCXJldHVybiBGQUxTRTsKKwor
CXJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfcmVxdWVzdF9maWxl
X2Z0cF9tYWluX2xvb3BfcXVpdCAoR09iamVjdCAgICAgICpvYmplY3QsCisJCQkJCSAgICAgR0Fz
eW5jUmVzdWx0ICpyZXN1bHQsCisJCQkJCSAgICAgZ3BvaW50ZXIgbG9vcCkKK3sKKwlnX21haW5f
bG9vcF9xdWl0IChsb29wKTsKK30KKworLyogVGhpcyBpcyBhIHNvbWV3aGF0IGhhY2t5IHdheSB0
byBnZXQgRlRQIHRvIGFsbW9zdCB3b3JrLiBUaGUgcHJvcGVyIHdheSB0bworICogZ2V0IEZUUCB0
byBfcmVhbGx5XyB3b3JrIGludm9sdmVzIGhhY2tpbmcgR0lPIHRvIGhhdmUgQVBJcyB0byBoYW5k
bGUKKyAqIGNhbm9uY2lhbCBVUkxzLgorICovCitzdGF0aWMgR0ZpbGUgKgord2Via2l0X3NvdXBf
cmVxdWVzdF9maWxlX2Vuc3VyZV9maWxlX2Z0cCAoU291cFVSSSAgICAgICAqdXJpLAorCQkJCQkg
IEdDYW5jZWxsYWJsZSAgKmNhbmNlbGxhYmxlLAorCQkJCQkgIEdFcnJvciAgICAgICAqKmVycm9y
KQoreworCVNvdXBVUkkgKmhvc3Q7CisJY2hhciAqczsKKwlHRmlsZSAqZmlsZSwgKnJlc3VsdDsK
KwlHTW91bnQgKm1vdW50OworCisJaG9zdCA9IHNvdXBfdXJpX2NvcHlfaG9zdCAodXJpKTsKKwlz
ID0gc291cF91cmlfdG9fc3RyaW5nIChob3N0LCBGQUxTRSk7CisJZmlsZSA9IGdfZmlsZV9uZXdf
Zm9yX3VyaSAocyk7CisJc291cF91cmlfZnJlZSAoaG9zdCk7CisJZ19mcmVlIChzKTsKKworCW1v
dW50ID0gZ19maWxlX2ZpbmRfZW5jbG9zaW5nX21vdW50IChmaWxlLCBjYW5jZWxsYWJsZSwgZXJy
b3IpOworCWlmIChtb3VudCA9PSBOVUxMICYmIGdfZmlsZV9zdXBwb3J0c190aHJlYWRfY29udGV4
dHMgKGZpbGUpKSB7CisJCUdNYWluQ29udGV4dCAqY29udGV4dCA9IGdfbWFpbl9jb250ZXh0X25l
dyAoKTsKKwkJR01haW5Mb29wICpsb29wID0gZ19tYWluX2xvb3BfbmV3IChjb250ZXh0LCBGQUxT
RSk7CisKKwkJZ19jbGVhcl9lcnJvciAoZXJyb3IpOworCQlnX21haW5fY29udGV4dF9wdXNoX3Ro
cmVhZF9kZWZhdWx0IChjb250ZXh0KTsKKwkJZ19maWxlX21vdW50X2VuY2xvc2luZ192b2x1bWUg
KGZpbGUsCisJCQkJCSAgICAgICBHX01PVU5UX01PVU5UX05PTkUsCisJCQkJCSAgICAgICBOVUxM
LCAvKiBGSVhNRSEgKi8KKwkJCQkJICAgICAgIGNhbmNlbGxhYmxlLAorCQkJCQkgICAgICAgd2Vi
a2l0X3NvdXBfcmVxdWVzdF9maWxlX2Z0cF9tYWluX2xvb3BfcXVpdCwKKwkJCQkJICAgICAgIGxv
b3ApOworCQlnX21haW5fbG9vcF9ydW4gKGxvb3ApOworCQlnX21haW5fY29udGV4dF9wb3BfdGhy
ZWFkX2RlZmF1bHQgKGNvbnRleHQpOworCQlnX21haW5fbG9vcF91bnJlZiAobG9vcCk7CisJCWdf
bWFpbl9jb250ZXh0X3VucmVmIChjb250ZXh0KTsKKwkJbW91bnQgPSBnX2ZpbGVfZmluZF9lbmNs
b3NpbmdfbW91bnQgKGZpbGUsIGNhbmNlbGxhYmxlLCBlcnJvcik7CisJfQorCWlmIChtb3VudCA9
PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwlnX29iamVjdF91bnJlZiAoZmlsZSk7CisKKwlmaWxl
ID0gZ19tb3VudF9nZXRfZGVmYXVsdF9sb2NhdGlvbiAobW91bnQpOworCWdfb2JqZWN0X3VucmVm
IChtb3VudCk7CisKKwlzID0gZ19zdHJkdXAgKHVyaS0+cGF0aCk7CisJaWYgKHN0cmNociAocywg
JzsnKSkKKwkJKnN0cmNociAocywgJzsnKSA9IDA7CisKKwlyZXN1bHQgPSBnX2ZpbGVfcmVzb2x2
ZV9yZWxhdGl2ZV9wYXRoIChmaWxlLCBzKTsKKwlnX2ZyZWUgKHMpOworCWdfb2JqZWN0X3VucmVm
IChmaWxlKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgord2Via2l0
X3NvdXBfcmVxdWVzdF9maWxlX2Vuc3VyZV9maWxlIChXZWJLaXRTb3VwUmVxdWVzdEZpbGUgICpm
aWxlLAorCQkJCSAgICAgIEdDYW5jZWxsYWJsZSAgICAgKmNhbmNlbGxhYmxlLAorCQkJCSAgICAg
IEdFcnJvciAgICAgICAgICAqKmVycm9yKQoreworCVNvdXBVUkkgKnVyaTsKKworCWlmIChmaWxl
LT5wcml2LT5nZmlsZSkKKwkJcmV0dXJuIFRSVUU7CisKKwl1cmkgPSB3ZWJraXRfc291cF9yZXF1
ZXN0X2dldF91cmkgKFdFQktJVF9TT1VQX1JFUVVFU1QgKGZpbGUpKTsKKwlpZiAodXJpLT5zY2hl
bWUgPT0gU09VUF9VUklfU0NIRU1FX0ZJTEUpIHsKKwkJLyogV2UgY2Fubm90IHVzZSBzb3VwX3Vy
aV9kZWNvZGUgYXMgaXQgaW5jb3JyZWN0bHkKKwkJICogcmV0dXJucyBOVUxMIGZvciBpbmNvcnJl
Y3RseSBlbmNvZGVkIFVSSXMgKHRoYXQKKwkJICogY291bGQgYmUgdmFsaWQgZmlsZW5hbWVzKS4g
VGhpcyB3aWxsIGJlIGhvcGVmdWxseQorCQkgKiBzaGlwcGVkIGluIGxpYnNvdXAgMi4zMi4xIGJ1
dCB3ZSB3YW50IHRvIGxhbmQgdGhpcworCQkgKiBmaXJzdC4gVE9ETzogcmVwbGFjZSB1cmlfZGVj
b2RlZF9jb3B5IGJ5CisJCSAqIHNvdXBfdXJpX2RlY29kZSB3aGVuIHRoZSByZXF1aXJlZCBsaWJz
b3VwIHZlcnNpb24KKwkJICogaXMgYnVtcGVkIG91dCB0byAyLjMyLjEKKwkJICovCisJCWdjaGFy
ICp1cmlfcGF0aCA9IHNvdXBfdXJpX2dldF9wYXRoICh1cmkpOworCQlnY2hhciAqZGVjb2RlZF91
cmkgPSB3ZWJraXRfc291cF9yZXF1ZXN0X3VyaV9kZWNvZGVkX2NvcHkgKHVyaV9wYXRoLCBzdHJs
ZW4gKHVyaV9wYXRoKSk7CisKKwkJaWYgKGRlY29kZWRfdXJpKSB7CisJCQkvKiBEbyBub3QgdXNl
IG5ld19mb3JfdXJpKCkgYXMgdGhlIGRlY29kZWQgVVJJCisJCQkgKiAgY291bGQgbm90IGJlIGEg
dmFsaWQgVVJJCisJCQkgKi8KKwkJCWZpbGUtPnByaXYtPmdmaWxlID0gZ19maWxlX25ld19mb3Jf
cGF0aCAoZGVjb2RlZF91cmkpOworCQkJZ19mcmVlIChkZWNvZGVkX3VyaSk7CisJCX0KKworCQly
ZXR1cm4gVFJVRTsKKwl9IGVsc2UgaWYgKHVyaS0+c2NoZW1lID09IFNPVVBfVVJJX1NDSEVNRV9G
VFApIHsKKwkJZmlsZS0+cHJpdi0+Z2ZpbGUgPSB3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfZW5z
dXJlX2ZpbGVfZnRwICh1cmksCisJCQkJCQkJCQkgICAgICBjYW5jZWxsYWJsZSwKKwkJCQkJCQkJ
CSAgICAgIGVycm9yKTsKKwkJcmV0dXJuIGZpbGUtPnByaXYtPmdmaWxlICE9IE5VTEw7CisJfQor
CisJZ19zZXRfZXJyb3IgKGVycm9yLCBXRUJLSVRfU09VUF9FUlJPUiwgV0VCS0lUX1NPVVBfRVJS
T1JfVU5TVVBQT1JURURfVVJJX1NDSEVNRSwKKwkJICAgICBfICgiVW5zdXBwb3J0ZWQgVVJJIHNj
aGVtZSAnJXMnIiksIHVyaS0+c2NoZW1lKTsKKwlyZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBH
SW5wdXRTdHJlYW0gKgord2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX3NlbmQgKFdlYktpdFNvdXBS
ZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAorCQkJICAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAg
ICpjYW5jZWxsYWJsZSwKKwkJCSAgICAgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpCit7
CisJV2ViS2l0U291cFJlcXVlc3RGaWxlICpmaWxlID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9GSUxF
IChyZXF1ZXN0KTsKKwlHSW5wdXRTdHJlYW0gKnN0cmVhbTsKKwlHRXJyb3IgKm15X2Vycm9yID0g
TlVMTDsKKworCWlmICghd2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2Vuc3VyZV9maWxlIChmaWxl
LCBjYW5jZWxsYWJsZSwgZXJyb3IpKQorCQlyZXR1cm4gTlVMTDsKKworCXN0cmVhbSA9IEdfSU5Q
VVRfU1RSRUFNIChnX2ZpbGVfcmVhZCAoZmlsZS0+cHJpdi0+Z2ZpbGUsCisJCQkJCSAgICAgIGNh
bmNlbGxhYmxlLCAmbXlfZXJyb3IpKTsKKwlpZiAoc3RyZWFtID09IE5VTEwpIHsKKwkJaWYgKGdf
ZXJyb3JfbWF0Y2hlcyAobXlfZXJyb3IsIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfSVNfRElSRUNU
T1JZKSkgeworCQkJR0ZpbGVFbnVtZXJhdG9yICplbnVtZXJhdG9yOworCQkJZ19jbGVhcl9lcnJv
ciAoJm15X2Vycm9yKTsKKwkJCWVudW1lcmF0b3IgPSBnX2ZpbGVfZW51bWVyYXRlX2NoaWxkcmVu
IChmaWxlLT5wcml2LT5nZmlsZSwKKwkJCQkJCQkJIioiLAorCQkJCQkJCQlHX0ZJTEVfUVVFUllf
SU5GT19OT05FLAorCQkJCQkJCQljYW5jZWxsYWJsZSwKKwkJCQkJCQkJZXJyb3IpOworCQkJaWYg
KGVudW1lcmF0b3IpIHsKKwkJCQlzdHJlYW0gPSB3ZWJraXRfc291cF9kaXJlY3RvcnlfaW5wdXRf
c3RyZWFtX25ldyAoZW51bWVyYXRvciwKKwkJCQkJCQkJCQkgd2Via2l0X3NvdXBfcmVxdWVzdF9n
ZXRfdXJpIChyZXF1ZXN0KSk7CisJCQkJZ19vYmplY3RfdW5yZWYgKGVudW1lcmF0b3IpOworCQkJ
CWZpbGUtPnByaXYtPm1pbWVfdHlwZSA9IGdfc3RyZHVwICgidGV4dC9odG1sIik7CisJCQl9CisJ
CX0gZWxzZSB7CisJCQlnX3Byb3BhZ2F0ZV9lcnJvciAoZXJyb3IsIG15X2Vycm9yKTsKKwkJfQor
CX0gZWxzZSB7CisJCUdGaWxlSW5mbyAqaW5mbyA9IGdfZmlsZV9xdWVyeV9pbmZvIChmaWxlLT5w
cml2LT5nZmlsZSwKKwkJCQkJCSAgICAgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9DT05URU5U
X1RZUEUgIiwiCisJCQkJCQkgICAgIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfU0laRSwKKwkJ
CQkJCSAgICAgMCwgY2FuY2VsbGFibGUsIE5VTEwpOworCQlpZiAoaW5mbykgeworCQkJY29uc3Qg
Y2hhciAqY29udGVudF90eXBlOworCQkJZmlsZS0+cHJpdi0+c2l6ZSA9IGdfZmlsZV9pbmZvX2dl
dF9zaXplIChpbmZvKTsKKwkJCWNvbnRlbnRfdHlwZSA9IGdfZmlsZV9pbmZvX2dldF9jb250ZW50
X3R5cGUgKGluZm8pOworCisJCQlpZiAoY29udGVudF90eXBlKQorCQkJCWZpbGUtPnByaXYtPm1p
bWVfdHlwZSA9IGdfY29udGVudF90eXBlX2dldF9taW1lX3R5cGUgKGNvbnRlbnRfdHlwZSk7CisJ
CQlnX29iamVjdF91bnJlZiAoaW5mbyk7CisJCX0KKwl9CisKKwlyZXR1cm4gc3RyZWFtOworfQor
CitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX3NlbmRfYXN5bmNfdGhyZWFk
IChHU2ltcGxlQXN5bmNSZXN1bHQgKnJlcywKKwkJCQkJICAgIEdPYmplY3QgICAgICAgICAgICAq
b2JqZWN0LAorCQkJCQkgICAgR0NhbmNlbGxhYmxlICAgICAgICpjYW5jZWxsYWJsZSkKK3sKKwlH
SW5wdXRTdHJlYW0gKnN0cmVhbTsKKwlXZWJLaXRTb3VwUmVxdWVzdCAqcmVxdWVzdDsKKwlHRXJy
b3IgKmVycm9yID0gTlVMTDsKKworCXJlcXVlc3QgPSBXRUJLSVRfU09VUF9SRVFVRVNUIChvYmpl
Y3QpOworCisJc3RyZWFtID0gd2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX3NlbmQgKHJlcXVlc3Qs
IGNhbmNlbGxhYmxlLCAmZXJyb3IpOworCisJaWYgKHN0cmVhbSA9PSBOVUxMKSB7CisJCWdfc2lt
cGxlX2FzeW5jX3Jlc3VsdF9zZXRfZnJvbV9lcnJvciAocmVzLCBlcnJvcik7CisJCWdfZXJyb3Jf
ZnJlZSAoZXJyb3IpOworCX0gZWxzZSB7CisJCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3Bf
cmVzX2dwb2ludGVyIChyZXMsIHN0cmVhbSwgZ19vYmplY3RfdW5yZWYpOworCX0KK30KKworc3Rh
dGljIHZvaWQKK3dlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9zZW5kX2FzeW5jIChXZWJLaXRTb3Vw
UmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKKwkJCQkgICAgIEdDYW5jZWxsYWJsZSAgICAgICAg
ICpjYW5jZWxsYWJsZSwKKwkJCQkgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCisJ
CQkJICAgICBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpyZXM7
CisKKwlyZXMgPSBnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3IChHX09CSkVDVCAocmVxdWVzdCks
IGNhbGxiYWNrLCB1c2VyX2RhdGEsIHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9zZW5kX2FzeW5j
KTsKKworCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9ydW5faW5fdGhyZWFkIChyZXMsIHdlYmtpdF9z
b3VwX3JlcXVlc3RfZmlsZV9zZW5kX2FzeW5jX3RocmVhZCwgR19QUklPUklUWV9ERUZBVUxULCBj
YW5jZWxsYWJsZSk7CisJZ19vYmplY3RfdW5yZWYgKHJlcyk7Cit9CisKK3N0YXRpYyBHSW5wdXRT
dHJlYW0gKgord2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX3NlbmRfZmluaXNoIChXZWJLaXRTb3Vw
UmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKKwkJCQkgICAgICBHQXN5bmNSZXN1bHQgICAgICAg
ICAqcmVzdWx0LAorCQkJCSAgICAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcikKK3sKKwlH
U2ltcGxlQXN5bmNSZXN1bHQgKnNpbXBsZSA9IEdfU0lNUExFX0FTWU5DX1JFU1VMVCAocmVzdWx0
KTsKKworCWdfd2Fybl9pZl9mYWlsIChnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X3NvdXJjZV90
YWcgKHNpbXBsZSkgPT0gd2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX3NlbmRfYXN5bmMpOworCisJ
aWYgKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9wcm9wYWdhdGVfZXJyb3IgKHNpbXBsZSwgZXJyb3Ip
KQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBnX29iamVjdF9yZWYgKGdfc2ltcGxlX2FzeW5j
X3Jlc3VsdF9nZXRfb3BfcmVzX2dwb2ludGVyIChzaW1wbGUpKTsKK30KKworc3RhdGljIGdvZmZz
ZXQKK3dlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9nZXRfY29udGVudF9sZW5ndGggKFdlYktpdFNv
dXBSZXF1ZXN0ICpyZXF1ZXN0KQoreworCVdlYktpdFNvdXBSZXF1ZXN0RmlsZSAqZmlsZSA9IFdF
QktJVF9TT1VQX1JFUVVFU1RfRklMRSAocmVxdWVzdCk7CisKKwlyZXR1cm4gZmlsZS0+cHJpdi0+
c2l6ZTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgord2Via2l0X3NvdXBfcmVxdWVzdF9maWxl
X2dldF9jb250ZW50X3R5cGUgKFdlYktpdFNvdXBSZXF1ZXN0ICpyZXF1ZXN0KQoreworCVdlYktp
dFNvdXBSZXF1ZXN0RmlsZSAqZmlsZSA9IFdFQktJVF9TT1VQX1JFUVVFU1RfRklMRSAocmVxdWVz
dCk7CisKKwlpZiAoIWZpbGUtPnByaXYtPm1pbWVfdHlwZSkKKwkJcmV0dXJuICJhcHBsaWNhdGlv
bi9vY3RldC1zdHJlYW0iOworCisJcmV0dXJuIGZpbGUtPnByaXYtPm1pbWVfdHlwZTsKK30KKwor
c3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9jbGFzc19pbml0IChXZWJLaXRT
b3VwUmVxdWVzdEZpbGVDbGFzcyAqcmVxdWVzdF9maWxlX2NsYXNzKQoreworCUdPYmplY3RDbGFz
cyAqb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKHJlcXVlc3RfZmlsZV9jbGFzcyk7CisJ
V2ViS2l0U291cFJlcXVlc3RDbGFzcyAqcmVxdWVzdF9jbGFzcyA9CisJCVdFQktJVF9TT1VQX1JF
UVVFU1RfQ0xBU1MgKHJlcXVlc3RfZmlsZV9jbGFzcyk7CisKKwlnX3R5cGVfY2xhc3NfYWRkX3By
aXZhdGUgKHJlcXVlc3RfZmlsZV9jbGFzcywgc2l6ZW9mIChXZWJLaXRTb3VwUmVxdWVzdEZpbGVQ
cml2YXRlKSk7CisKKwlvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gd2Via2l0X3NvdXBfcmVxdWVz
dF9maWxlX2ZpbmFsaXplOworCisJcmVxdWVzdF9jbGFzcy0+Y2hlY2tfdXJpID0gd2Via2l0X3Nv
dXBfcmVxdWVzdF9maWxlX2NoZWNrX3VyaTsKKwlyZXF1ZXN0X2NsYXNzLT5zZW5kID0gd2Via2l0
X3NvdXBfcmVxdWVzdF9maWxlX3NlbmQ7CisJcmVxdWVzdF9jbGFzcy0+c2VuZF9hc3luYyA9IHdl
YmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9zZW5kX2FzeW5jOworCXJlcXVlc3RfY2xhc3MtPnNlbmRf
ZmluaXNoID0gd2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX3NlbmRfZmluaXNoOworCXJlcXVlc3Rf
Y2xhc3MtPmdldF9jb250ZW50X2xlbmd0aCA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9nZXRf
Y29udGVudF9sZW5ndGg7CisJcmVxdWVzdF9jbGFzcy0+Z2V0X2NvbnRlbnRfdHlwZSA9IHdlYmtp
dF9zb3VwX3JlcXVlc3RfZmlsZV9nZXRfY29udGVudF90eXBlOworfQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWZpbGUuaCBiL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU5ZTgyYQotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxl
LmgKQEAgLTAsMCArMSw1NCBAQAorLyogLSotIE1vZGU6IEM7IHRhYi13aWR0aDogODsgaW5kZW50
LXRhYnMtbW9kZTogdDsgYy1iYXNpYy1vZmZzZXQ6IDggLSotICovCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMu
TC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmbmRlZiBXRUJLSVRfU09VUF9SRVFVRVNUX0ZJTEVfSAorI2RlZmluZSBXRUJLSVRfU09V
UF9SRVFVRVNUX0ZJTEVfSCAxCisKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3QuaCIKKworR19CRUdJ
Tl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9GSUxFICAgICAgICAg
ICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9nZXRfdHlwZSAoKSkKKyNkZWZpbmUgV0VCS0lU
X1NPVVBfUkVRVUVTVF9GSUxFKG9iamVjdCkgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNF
X0NBU1QgKChvYmplY3QpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfRklMRSwgV2ViS2l0U291
cFJlcXVlc3RGaWxlKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9GSUxFX0NMQVNTKGts
YXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFdFQktJVF9UWVBFX1NP
VVBfUkVRVUVTVF9GSUxFLCBXZWJLaXRTb3VwUmVxdWVzdEZpbGVDbGFzcykpCisjZGVmaW5lIFdF
QktJVF9JU19TT1VQX1JFUVVFU1RfRklMRShvYmplY3QpICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9UWVBFICgob2JqZWN0KSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0ZJTEUpKQorI2Rl
ZmluZSBXRUJLSVRfSVNfU09VUF9SRVFVRVNUX0ZJTEVfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0ZJTEUpKQor
I2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNUX0ZJTEVfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVf
SU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0ZJTEUs
IFdlYktpdFNvdXBSZXF1ZXN0RmlsZUNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNv
dXBSZXF1ZXN0RmlsZVByaXZhdGUgV2ViS2l0U291cFJlcXVlc3RGaWxlUHJpdmF0ZTsKKwordHlw
ZWRlZiBzdHJ1Y3QgeworCVdlYktpdFNvdXBSZXF1ZXN0IHBhcmVudDsKKworCVdlYktpdFNvdXBS
ZXF1ZXN0RmlsZVByaXZhdGUgKnByaXY7Cit9IFdlYktpdFNvdXBSZXF1ZXN0RmlsZTsKKwordHlw
ZWRlZiBzdHJ1Y3QgeworCVdlYktpdFNvdXBSZXF1ZXN0Q2xhc3MgcGFyZW50OworfSBXZWJLaXRT
b3VwUmVxdWVzdEZpbGVDbGFzczsKKworR1R5cGUgd2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2dl
dF90eXBlICh2b2lkKTsKKworR0ZpbGUgICp3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfZ2V0X2Zp
bGUgKFdlYktpdFNvdXBSZXF1ZXN0RmlsZSAqZmlsZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRp
ZiAvKiBXRUJLSVRfU09VUF9SRVFVRVNUX0ZJTEVfSCAqLwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuYyBiL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRwLmMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE1N2NmYwotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRwLmMKQEAg
LTAsMCArMSwzNDAgQEAKKy8qIC0qLSBNb2RlOiBDOyB0YWItd2lkdGg6IDg7IGluZGVudC10YWJz
LW1vZGU6IHQ7IGMtYmFzaWMtb2Zmc2V0OiA4IC0qLSAqLworLyoKKyAqIHNvdXAtcmVxdWVzdC1o
dHRwLmM6IGh0dHA6IFVSSSByZXF1ZXN0IG9iamVjdAorICoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZmRl
ZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUg
PGdsaWIvZ2kxOG4uaD4KKworI2luY2x1ZGUgInNvdXAtY2FjaGUuaCIKKyNpbmNsdWRlICJzb3Vw
LWNhY2hlLXByaXZhdGUuaCIKKyNpbmNsdWRlICJzb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmgiCisj
aW5jbHVkZSAic291cC1yZXF1ZXN0LWh0dHAuaCIKKworR19ERUZJTkVfVFlQRSAoV2ViS2l0U291
cFJlcXVlc3RIVFRQLCB3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHAsIFdFQktJVF9UWVBFX1NPVVBf
UkVRVUVTVCkKKworc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdEhUVFBQcml2YXRlIHsKKwlTb3Vw
TWVzc2FnZSAqbXNnOworfTsKKworLyoqCisgKiB3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfZ2V0
X21lc3NhZ2U6CisgKiBAaHR0cDogYSAjV2ViS2l0U291cFJlcXVlc3RIVFRQIG9iamVjdAorICoK
KyAqIEdldHMgYSBuZXcgcmVmZXJlbmNlIHRvIHRoZSAjU291cE1lc3NhZ2UgYXNzb2NpYXRlZCB0
byB0aGlzIFNvdXBSZXF1ZXN0CisgKgorICogUmV0dXJuczogYSBuZXcgcmVmZXJlbmNlIHRvIHRo
ZSAjU291cE1lc3NhZ2UKKyAqKi8KK1NvdXBNZXNzYWdlICoKK3dlYmtpdF9zb3VwX3JlcXVlc3Rf
aHR0cF9nZXRfbWVzc2FnZSAoV2ViS2l0U291cFJlcXVlc3RIVFRQICpodHRwKQoreworCWdfcmV0
dXJuX3ZhbF9pZl9mYWlsIChXRUJLSVRfSVNfU09VUF9SRVFVRVNUX0hUVFAgKGh0dHApLCBOVUxM
KTsKKworCXJldHVybiBnX29iamVjdF9yZWYgKGh0dHAtPnByaXYtPm1zZyk7Cit9CisKK3N0YXRp
YyB2b2lkCit3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfaW5pdCAoV2ViS2l0U291cFJlcXVlc3RI
VFRQICpodHRwKQoreworCWh0dHAtPnByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUg
KGh0dHAsIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9IVFRQLCBXZWJLaXRTb3VwUmVxdWVzdEhU
VFBQcml2YXRlKTsKK30KKworc3RhdGljIGdib29sZWFuCit3ZWJraXRfc291cF9yZXF1ZXN0X2h0
dHBfY2hlY2tfdXJpIChXZWJLaXRTb3VwUmVxdWVzdCAgKnJlcXVlc3QsCisJCQkJICAgIFNvdXBV
UkkgICAgICAqdXJpLAorCQkJCSAgICBHRXJyb3IgICAgICAqKmVycm9yKQoreworCVdlYktpdFNv
dXBSZXF1ZXN0SFRUUCAqaHR0cCA9IFdFQktJVF9TT1VQX1JFUVVFU1RfSFRUUCAocmVxdWVzdCk7
CisKKwlpZiAoIVNPVVBfVVJJX1ZBTElEX0ZPUl9IVFRQICh1cmkpKQorCQlyZXR1cm4gRkFMU0U7
CisKKwlodHRwLT5wcml2LT5tc2cgPSBzb3VwX21lc3NhZ2VfbmV3X2Zyb21fdXJpIChTT1VQX01F
VEhPRF9HRVQsIHVyaSk7CisJcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRf
c291cF9yZXF1ZXN0X2h0dHBfZmluYWxpemUgKEdPYmplY3QgKm9iamVjdCkKK3sKKwlXZWJLaXRT
b3VwUmVxdWVzdEhUVFAgKmh0dHAgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0hUVFAgKG9iamVjdCk7
CisKKwlpZiAoaHR0cC0+cHJpdi0+bXNnKQorCQlnX29iamVjdF91bnJlZiAoaHR0cC0+cHJpdi0+
bXNnKTsKKworCUdfT0JKRUNUX0NMQVNTICh3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfcGFyZW50
X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7Cit9CisKK3N0YXRpYyBHSW5wdXRTdHJlYW0gKgor
d2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX3NlbmQgKFdlYktpdFNvdXBSZXF1ZXN0ICAgICAgICAg
ICpyZXF1ZXN0LAorCQkJICAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwK
KwkJCSAgICAgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpCit7CisJV2ViS2l0U291cEhU
VFBJbnB1dFN0cmVhbSAqaHR0cHN0cmVhbTsKKwlXZWJLaXRTb3VwUmVxdWVzdEhUVFAgKmh0dHAg
PSBXRUJLSVRfU09VUF9SRVFVRVNUX0hUVFAgKHJlcXVlc3QpOworCisJaHR0cHN0cmVhbSA9IHdl
YmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX25ldyAod2Via2l0X3NvdXBfcmVxdWVzdF9nZXRf
c2Vzc2lvbiAocmVxdWVzdCksIGh0dHAtPnByaXYtPm1zZyk7CisJaWYgKCF3ZWJraXRfc291cF9o
dHRwX2lucHV0X3N0cmVhbV9zZW5kIChodHRwc3RyZWFtLCBjYW5jZWxsYWJsZSwgZXJyb3IpKSB7
CisJCWdfb2JqZWN0X3VucmVmIChodHRwc3RyZWFtKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJl
dHVybiAoR0lucHV0U3RyZWFtICopaHR0cHN0cmVhbTsKK30KKworCitzdGF0aWMgdm9pZAorc2Vu
dF9hc3luYyAoR09iamVjdCAqc291cmNlLCBHQXN5bmNSZXN1bHQgKnJlc3VsdCwgZ3BvaW50ZXIg
dXNlcl9kYXRhKQoreworCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gKmh0dHBzdHJlYW0gPSBX
RUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTSAoc291cmNlKTsKKwlHU2ltcGxlQXN5bmNSZXN1
bHQgKnNpbXBsZSA9IHVzZXJfZGF0YTsKKwlHRXJyb3IgKmVycm9yID0gTlVMTDsKKworCWlmICh3
ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2ZpbmlzaCAoaHR0cHN0cmVhbSwgcmVz
dWx0LCAmZXJyb3IpKSB7CisJCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dwb2lu
dGVyIChzaW1wbGUsIGh0dHBzdHJlYW0sIGdfb2JqZWN0X3VucmVmKTsKKwl9IGVsc2UgeworCQln
X3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X2Zyb21fZXJyb3IgKHNpbXBsZSwgZXJyb3IpOworCQln
X2Vycm9yX2ZyZWUgKGVycm9yKTsKKwkJZ19vYmplY3RfdW5yZWYgKGh0dHBzdHJlYW0pOworCX0K
KwlnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGUgKHNpbXBsZSk7CisJZ19vYmplY3RfdW5y
ZWYgKHNpbXBsZSk7Cit9CisKKwordHlwZWRlZiBzdHJ1Y3QgeworCVdlYktpdFNvdXBSZXF1ZXN0
SFRUUCAqcmVxOworCVNvdXBNZXNzYWdlICpvcmlnaW5hbDsKKwlHQ2FuY2VsbGFibGUgKmNhbmNl
bGxhYmxlOworCUdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2s7CisJZ3BvaW50ZXIgdXNlcl9k
YXRhOworfSBDb25kaXRpb25hbEhlbHBlcjsKKworCitzdGF0aWMgdm9pZAorY29uZGl0aW9uYWxf
Z2V0X3JlYWR5X2NiIChTb3VwU2Vzc2lvbiAqc2Vzc2lvbiwgU291cE1lc3NhZ2UgKm1zZywgZ3Bv
aW50ZXIgdXNlcl9kYXRhKQoreworCUNvbmRpdGlvbmFsSGVscGVyICpoZWxwZXIgPSAoQ29uZGl0
aW9uYWxIZWxwZXIgKil1c2VyX2RhdGE7CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpzaW1wbGU7CisJ
V2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSAqaHR0cHN0cmVhbTsKKworCXNpbXBsZSA9IGdfc2lt
cGxlX2FzeW5jX3Jlc3VsdF9uZXcgKEdfT0JKRUNUIChoZWxwZXItPnJlcSksCisJCQkJCSAgICBo
ZWxwZXItPmNhbGxiYWNrLCBoZWxwZXItPnVzZXJfZGF0YSwKKwkJCQkJICAgIGNvbmRpdGlvbmFs
X2dldF9yZWFkeV9jYik7CisKKwlpZiAobXNnLT5zdGF0dXNfY29kZSA9PSBTT1VQX1NUQVRVU19O
T1RfTU9ESUZJRUQpIHsKKwkJV2ViS2l0U291cENhY2hlICpjYWNoZSA9IChXZWJLaXRTb3VwQ2Fj
aGUgKilzb3VwX3Nlc3Npb25fZ2V0X2ZlYXR1cmUgKHNlc3Npb24sIFdFQktJVF9UWVBFX1NPVVBf
Q0FDSEUpOworCisJCWh0dHBzdHJlYW0gPSAoV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSAqKXdl
YmtpdF9zb3VwX2NhY2hlX3NlbmRfcmVzcG9uc2UgKGNhY2hlLCBtc2cpOworCQlpZiAoaHR0cHN0
cmVhbSkgeworCQkJY29uc3QgZ2NoYXIgKmNvbnRlbnRfdHlwZTsKKworCQkJZ19zaW1wbGVfYXN5
bmNfcmVzdWx0X3NldF9vcF9yZXNfZ3BvaW50ZXIgKHNpbXBsZSwgaHR0cHN0cmVhbSwgZ19vYmpl
Y3RfdW5yZWYpOworCisJCQlzb3VwX21lc3NhZ2VfZ290X2hlYWRlcnMgKGhlbHBlci0+b3JpZ2lu
YWwpOworCQkJY29udGVudF90eXBlID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2NvbnRlbnRf
dHlwZSAobXNnLT5yZXNwb25zZV9oZWFkZXJzLCBOVUxMKTsKKwkJCXNvdXBfbWVzc2FnZV9jb250
ZW50X3NuaWZmZWQgKGhlbHBlci0+b3JpZ2luYWwsIGNvbnRlbnRfdHlwZSwgTlVMTCk7CisKKwkJ
CWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZSAoc2ltcGxlKTsKKworCQkJc291cF9tZXNz
YWdlX2ZpbmlzaGVkIChoZWxwZXItPm9yaWdpbmFsKTsKKworCQkJZ19vYmplY3RfdW5yZWYgKHNp
bXBsZSk7CisJCX0gZWxzZSB7CisJCQkvKiBBc2sgYWdhaW4gZm9yIHRoZSByZXNvdXJjZSwgc29t
ZWhvdyB0aGUgY2FjaGUgY2Fubm90IGxvY2F0ZSBpdCAqLworCQkJaHR0cHN0cmVhbSA9IHdlYmtp
dF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX25ldyAoc2Vzc2lvbiwgaGVscGVyLT5vcmlnaW5hbCk7
CisJCQl3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jIChodHRwc3RyZWFt
LCBHX1BSSU9SSVRZX0RFRkFVTFQsCisJCQkJCQkJCSAgaGVscGVyLT5jYW5jZWxsYWJsZSwgc2Vu
dF9hc3luYywgc2ltcGxlKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIEl0IGlzIGluIHRoZSBjYWNo
ZSBidXQgaXQgd2FzIG1vZGlmaWVkIHJlbW90ZWx5ICovCisJCWh0dHBzdHJlYW0gPSB3ZWJraXRf
c291cF9odHRwX2lucHV0X3N0cmVhbV9uZXcgKHNlc3Npb24sIGhlbHBlci0+b3JpZ2luYWwpOwor
CQl3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jIChodHRwc3RyZWFtLCBH
X1BSSU9SSVRZX0RFRkFVTFQsCisJCQkJCQkJICBoZWxwZXItPmNhbmNlbGxhYmxlLCBzZW50X2Fz
eW5jLCBzaW1wbGUpOworCX0KKworCWdfb2JqZWN0X3VucmVmIChoZWxwZXItPnJlcSk7CisJZ19v
YmplY3RfdW5yZWYgKGhlbHBlci0+b3JpZ2luYWwpOworCWdfc2xpY2VfZnJlZSAoQ29uZGl0aW9u
YWxIZWxwZXIsIGhlbHBlcik7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKwlXZWJLaXRTb3VwUmVx
dWVzdEhUVFAgKmh0dHA7CisJR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjazsKKwlncG9pbnRl
ciB1c2VyX2RhdGE7Cit9IFNlbmRBc3luY0hlbHBlcjsKKworc3RhdGljIHZvaWQgd2Via2l0X3Nv
dXBfcmVxdWVzdF9odHRwX3NlbmRfYXN5bmMgKFdlYktpdFNvdXBSZXF1ZXN0ICAgICAgICAgICpy
ZXF1ZXN0LAorCQkJCQkJIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkJ
CSBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAorCQkJCQkJIGdwb2ludGVyIHVzZXJfZGF0
YSk7CisKK3N0YXRpYyBnYm9vbGVhbgorc2VuZF9hc3luY19jYiAoZ3BvaW50ZXIgZGF0YSkKK3sK
KwlHU2ltcGxlQXN5bmNSZXN1bHQgKnNpbXBsZTsKKwlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFt
ICpodHRwc3RyZWFtOworCVNvdXBTZXNzaW9uICpzZXNzaW9uOworCVdlYktpdFNvdXBDYWNoZSAq
Y2FjaGU7CisJU2VuZEFzeW5jSGVscGVyICpoZWxwZXIgPSAoU2VuZEFzeW5jSGVscGVyICopZGF0
YTsKKworCXNlc3Npb24gPSB3ZWJraXRfc291cF9yZXF1ZXN0X2dldF9zZXNzaW9uIChXRUJLSVRf
U09VUF9SRVFVRVNUIChoZWxwZXItPmh0dHApKTsKKwljYWNoZSA9IChXZWJLaXRTb3VwQ2FjaGUg
Kilzb3VwX3Nlc3Npb25fZ2V0X2ZlYXR1cmUgKHNlc3Npb24sIFdFQktJVF9UWVBFX1NPVVBfQ0FD
SEUpOworCisJaHR0cHN0cmVhbSA9IChXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtICopd2Via2l0
X3NvdXBfY2FjaGVfc2VuZF9yZXNwb25zZSAoY2FjaGUsIFNPVVBfTUVTU0FHRSAoaGVscGVyLT5o
dHRwLT5wcml2LT5tc2cpKTsKKworCWlmIChodHRwc3RyZWFtKSB7CisJCWNvbnN0IGdjaGFyICpj
b250ZW50X3R5cGU7CisKKwkJc2ltcGxlID0gZ19zaW1wbGVfYXN5bmNfcmVzdWx0X25ldyAoR19P
QkpFQ1QgKGhlbHBlci0+aHR0cCksCisJCQkJCQkgICAgaGVscGVyLT5jYWxsYmFjaywgaGVscGVy
LT51c2VyX2RhdGEsCisJCQkJCQkgICAgd2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX3NlbmRfYXN5
bmMpOworCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19ncG9pbnRlciAoc2ltcGxl
LCBodHRwc3RyZWFtLCBnX29iamVjdF91bnJlZik7CisKKwkJLyogVXBkYXRlIG1lc3NhZ2Ugc3Rh
dHVzICovCisJCXNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzIChoZWxwZXItPmh0dHAtPnByaXYtPm1z
ZywgU09VUF9TVEFUVVNfT0spOworCisJCS8qIElzc3VlIHNpZ25hbHMgICovCisJCXNvdXBfbWVz
c2FnZV9nb3RfaGVhZGVycyAoaGVscGVyLT5odHRwLT5wcml2LT5tc2cpOworCQljb250ZW50X3R5
cGUgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfY29udGVudF90eXBlIChoZWxwZXItPmh0dHAt
PnByaXYtPm1zZy0+cmVzcG9uc2VfaGVhZGVycywgTlVMTCk7CisJCXNvdXBfbWVzc2FnZV9jb250
ZW50X3NuaWZmZWQgKGhlbHBlci0+aHR0cC0+cHJpdi0+bXNnLCBjb250ZW50X3R5cGUsIE5VTEwp
OworCisJCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZSAoc2ltcGxlKTsKKworCQlzb3Vw
X21lc3NhZ2VfZmluaXNoZWQgKGhlbHBlci0+aHR0cC0+cHJpdi0+bXNnKTsKKworCQlnX29iamVj
dF91bnJlZiAoc2ltcGxlKTsKKwl9CisKKwlnX3NsaWNlX2ZyZWUgKFNlbmRBc3luY0hlbHBlciwg
aGVscGVyKTsKKworCXJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3Vw
X3JlcXVlc3RfaHR0cF9zZW5kX2FzeW5jIChXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVx
dWVzdCwKKwkJCQkgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkg
ICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCisJCQkJICAgICBncG9pbnRlciB1c2Vy
X2RhdGEpCit7CisJV2ViS2l0U291cFJlcXVlc3RIVFRQICpodHRwID0gV0VCS0lUX1NPVVBfUkVR
VUVTVF9IVFRQIChyZXF1ZXN0KTsKKwlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtICpodHRwc3Ry
ZWFtOworCUdTaW1wbGVBc3luY1Jlc3VsdCAqc2ltcGxlOworCVNvdXBTZXNzaW9uICpzZXNzaW9u
OworCVdlYktpdFNvdXBDYWNoZSAqY2FjaGU7CisKKwlzZXNzaW9uID0gd2Via2l0X3NvdXBfcmVx
dWVzdF9nZXRfc2Vzc2lvbiAocmVxdWVzdCk7CisJY2FjaGUgPSAoV2ViS2l0U291cENhY2hlICop
c291cF9zZXNzaW9uX2dldF9mZWF0dXJlIChzZXNzaW9uLCBXRUJLSVRfVFlQRV9TT1VQX0NBQ0hF
KTsKKworCWlmIChjYWNoZSkgeworCQlXZWJLaXRTb3VwQ2FjaGVSZXNwb25zZSByZXNwb25zZTsK
KworCQlyZXNwb25zZSA9IHdlYmtpdF9zb3VwX2NhY2hlX2hhc19yZXNwb25zZSAoY2FjaGUsIGh0
dHAtPnByaXYtPm1zZyk7CisJCWlmIChyZXNwb25zZSA9PSBXRUJLSVRfU09VUF9DQUNIRV9SRVNQ
T05TRV9GUkVTSCkgeworCQkJLyogRG8gcmV0dXJuIHRoZSBzdHJlYW0gYXN5bmNocm9ub3VzbHkg
YXMgaW4KKwkJCSAgIHRoZSBvdGhlciBjYXNlcy4gSXQncyBub3QgZW5vdWdoIHRvIHVzZQorCQkJ
ICAgZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlX2luX2lkbGUgYXMKKwkJCSAgIHRoZSBz
aWduYWxzIG11c3QgYmUgYWxzbyBlbWl0dGVkCisJCQkgICBhc3luY2hyb25vdXNseSAqLworCQkJ
U2VuZEFzeW5jSGVscGVyICpoZWxwZXIgPSBnX3NsaWNlX25ldyAoU2VuZEFzeW5jSGVscGVyKTsK
KwkJCWhlbHBlci0+aHR0cCA9IGh0dHA7CisJCQloZWxwZXItPmNhbGxiYWNrID0gY2FsbGJhY2s7
CisJCQloZWxwZXItPnVzZXJfZGF0YSA9IHVzZXJfZGF0YTsKKwkJCWdfdGltZW91dF9hZGQgKDAs
IHNlbmRfYXN5bmNfY2IsIGhlbHBlcik7CisJCQlyZXR1cm47CisJCX0gZWxzZSBpZiAocmVzcG9u
c2UgPT0gV0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfTkVFRFNfVkFMSURBVElPTikgeworCQkJ
U291cE1lc3NhZ2UgKmNvbmRpdGlvbmFsX21zZzsKKwkJCUNvbmRpdGlvbmFsSGVscGVyICpoZWxw
ZXI7CisKKwkJCWNvbmRpdGlvbmFsX21zZyA9IHdlYmtpdF9zb3VwX2NhY2hlX2dlbmVyYXRlX2Nv
bmRpdGlvbmFsX3JlcXVlc3QgKGNhY2hlLCBodHRwLT5wcml2LT5tc2cpOworCisJCQloZWxwZXIg
PSBnX3NsaWNlX25ldzAgKENvbmRpdGlvbmFsSGVscGVyKTsKKwkJCWhlbHBlci0+cmVxID0gZ19v
YmplY3RfcmVmIChodHRwKTsKKwkJCWhlbHBlci0+b3JpZ2luYWwgPSBnX29iamVjdF9yZWYgKGh0
dHAtPnByaXYtPm1zZyk7CisJCQloZWxwZXItPmNhbmNlbGxhYmxlID0gY2FuY2VsbGFibGU7CisJ
CQloZWxwZXItPmNhbGxiYWNrID0gY2FsbGJhY2s7CisJCQloZWxwZXItPnVzZXJfZGF0YSA9IHVz
ZXJfZGF0YTsKKwkJCXNvdXBfc2Vzc2lvbl9xdWV1ZV9tZXNzYWdlIChzZXNzaW9uLCBjb25kaXRp
b25hbF9tc2csCisJCQkJCQkgICAgY29uZGl0aW9uYWxfZ2V0X3JlYWR5X2NiLAorCQkJCQkJICAg
IGhlbHBlcik7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlzaW1wbGUgPSBnX3NpbXBsZV9hc3lu
Y19yZXN1bHRfbmV3IChHX09CSkVDVCAoaHR0cCksCisJCQkJCSAgICBjYWxsYmFjaywgdXNlcl9k
YXRhLAorCQkJCQkgICAgd2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX3NlbmRfYXN5bmMpOworCWh0
dHBzdHJlYW0gPSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9uZXcgKHdlYmtpdF9zb3Vw
X3JlcXVlc3RfZ2V0X3Nlc3Npb24gKHJlcXVlc3QpLAorCQkJCQkJCWh0dHAtPnByaXYtPm1zZyk7
CisJd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luYyAoaHR0cHN0cmVhbSwg
R19QUklPUklUWV9ERUZBVUxULAorCQkJCQkJICBjYW5jZWxsYWJsZSwgc2VudF9hc3luYywgc2lt
cGxlKTsKK30KKworc3RhdGljIEdJbnB1dFN0cmVhbSAqCit3ZWJraXRfc291cF9yZXF1ZXN0X2h0
dHBfc2VuZF9maW5pc2ggKFdlYktpdFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAorCQkJ
CSAgICAgIEdBc3luY1Jlc3VsdCAgICAgICAgICpyZXN1bHQsCisJCQkJICAgICAgR0Vycm9yICAg
ICAgICAgICAgICAqKmVycm9yKQoreworCUdTaW1wbGVBc3luY1Jlc3VsdCAqc2ltcGxlOworCisJ
Z19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9pc192YWxpZCAocmVz
dWx0LCBHX09CSkVDVCAocmVxdWVzdCksIHdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9zZW5kX2Fz
eW5jKSB8fCBnX3NpbXBsZV9hc3luY19yZXN1bHRfaXNfdmFsaWQgKHJlc3VsdCwgR19PQkpFQ1Qg
KHJlcXVlc3QpLCBjb25kaXRpb25hbF9nZXRfcmVhZHlfY2IpLCBOVUxMKTsKKworCXNpbXBsZSA9
IEdfU0lNUExFX0FTWU5DX1JFU1VMVCAocmVzdWx0KTsKKwlpZiAoZ19zaW1wbGVfYXN5bmNfcmVz
dWx0X3Byb3BhZ2F0ZV9lcnJvciAoc2ltcGxlLCBlcnJvcikpCisJCXJldHVybiBOVUxMOworCXJl
dHVybiBnX29iamVjdF9yZWYgKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfb3BfcmVzX2dwb2lu
dGVyIChzaW1wbGUpKTsKK30KKworc3RhdGljIGdvZmZzZXQKK3dlYmtpdF9zb3VwX3JlcXVlc3Rf
aHR0cF9nZXRfY29udGVudF9sZW5ndGggKFdlYktpdFNvdXBSZXF1ZXN0ICpyZXF1ZXN0KQorewor
CVdlYktpdFNvdXBSZXF1ZXN0SFRUUCAqaHR0cCA9IFdFQktJVF9TT1VQX1JFUVVFU1RfSFRUUCAo
cmVxdWVzdCk7CisKKwlyZXR1cm4gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2NvbnRlbnRfbGVu
Z3RoIChodHRwLT5wcml2LT5tc2ctPnJlc3BvbnNlX2hlYWRlcnMpOworfQorCitzdGF0aWMgY29u
c3QgY2hhciAqCit3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfZ2V0X2NvbnRlbnRfdHlwZSAoV2Vi
S2l0U291cFJlcXVlc3QgKnJlcXVlc3QpCit7CisJV2ViS2l0U291cFJlcXVlc3RIVFRQICpodHRw
ID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9IVFRQIChyZXF1ZXN0KTsKKworCXJldHVybiBzb3VwX21l
c3NhZ2VfaGVhZGVyc19nZXRfY29udGVudF90eXBlIChodHRwLT5wcml2LT5tc2ctPnJlc3BvbnNl
X2hlYWRlcnMsIE5VTEwpOworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfcmVxdWVzdF9o
dHRwX2NsYXNzX2luaXQgKFdlYktpdFNvdXBSZXF1ZXN0SFRUUENsYXNzICpyZXF1ZXN0X2h0dHBf
Y2xhc3MpCit7CisJR09iamVjdENsYXNzICpvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAo
cmVxdWVzdF9odHRwX2NsYXNzKTsKKwlXZWJLaXRTb3VwUmVxdWVzdENsYXNzICpyZXF1ZXN0X2Ns
YXNzID0KKwkJV0VCS0lUX1NPVVBfUkVRVUVTVF9DTEFTUyAocmVxdWVzdF9odHRwX2NsYXNzKTsK
KworCWdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSAocmVxdWVzdF9odHRwX2NsYXNzLCBzaXplb2Yg
KFdlYktpdFNvdXBSZXF1ZXN0SFRUUFByaXZhdGUpKTsKKworCW9iamVjdF9jbGFzcy0+ZmluYWxp
emUgPSB3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfZmluYWxpemU7CisKKwlyZXF1ZXN0X2NsYXNz
LT5jaGVja191cmkgPSB3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfY2hlY2tfdXJpOworCXJlcXVl
c3RfY2xhc3MtPnNlbmQgPSB3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfc2VuZDsKKwlyZXF1ZXN0
X2NsYXNzLT5zZW5kX2FzeW5jID0gd2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX3NlbmRfYXN5bmM7
CisJcmVxdWVzdF9jbGFzcy0+c2VuZF9maW5pc2ggPSB3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBf
c2VuZF9maW5pc2g7CisJcmVxdWVzdF9jbGFzcy0+Z2V0X2NvbnRlbnRfbGVuZ3RoID0gd2Via2l0
X3NvdXBfcmVxdWVzdF9odHRwX2dldF9jb250ZW50X2xlbmd0aDsKKwlyZXF1ZXN0X2NsYXNzLT5n
ZXRfY29udGVudF90eXBlID0gd2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX2dldF9jb250ZW50X3R5
cGU7Cit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9z
b3VwLXJlcXVlc3QtaHR0cC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUv
c291cC1yZXF1ZXN0LWh0dHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5h
MDZhODIxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
Y2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuaApAQCAtMCwwICsxLDU0IEBACisvKiAtKi0gTW9kZTog
QzsgdGFiLXdpZHRoOiA4OyBpbmRlbnQtdGFicy1tb2RlOiB0OyBjLWJhc2ljLW9mZnNldDogOCAt
Ki0gKi8KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwgSW5jLgorICogQ29weXJp
Z2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdFQktJVF9TT1VQX1JFUVVFU1RfSFRU
UF9ICisjZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfSFRUUF9IIDEKKworI2luY2x1ZGUgInNv
dXAtcmVxdWVzdC5oIgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfU09V
UF9SRVFVRVNUX0hUVFAgICAgICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX2dldF90
eXBlICgpKQorI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNUX0hUVFAob2JqZWN0KSAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iamVjdCksIFdFQktJVF9UWVBFX1NPVVBf
UkVRVUVTVF9IVFRQLCBXZWJLaXRTb3VwUmVxdWVzdEhUVFApKQorI2RlZmluZSBXRUJLSVRfU09V
UF9SRVFVRVNUX0hUVFBfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAo
KGtsYXNzKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0hUVFAsIFdlYktpdFNvdXBSZXF1ZXN0
SFRUUENsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1NPVVBfUkVRVUVTVF9IVFRQKG9iamVjdCkg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmplY3QpLCBXRUJLSVRfVFlQRV9T
T1VQX1JFUVVFU1RfSFRUUCkpCisjZGVmaW5lIFdFQktJVF9JU19TT1VQX1JFUVVFU1RfSFRUUF9D
TEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBXRUJLSVRfVFlQ
RV9TT1VQX1JFUVVFU1RfSFRUUCkpCisjZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfSFRUUF9H
RVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBXRUJLSVRf
VFlQRV9TT1VQX1JFUVVFU1RfSFRUUCwgV2ViS2l0U291cFJlcXVlc3RIVFRQQ2xhc3MpKQorCit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0U291cFJlcXVlc3RIVFRQUHJpdmF0ZSBXZWJLaXRTb3VwUmVx
dWVzdEhUVFBQcml2YXRlOworCit0eXBlZGVmIHN0cnVjdCB7CisJV2ViS2l0U291cFJlcXVlc3Qg
cGFyZW50OworCisJV2ViS2l0U291cFJlcXVlc3RIVFRQUHJpdmF0ZSAqcHJpdjsKK30gV2ViS2l0
U291cFJlcXVlc3RIVFRQOworCit0eXBlZGVmIHN0cnVjdCB7CisJV2ViS2l0U291cFJlcXVlc3RD
bGFzcyBwYXJlbnQ7Cit9IFdlYktpdFNvdXBSZXF1ZXN0SFRUUENsYXNzOworCitHVHlwZSB3ZWJr
aXRfc291cF9yZXF1ZXN0X2h0dHBfZ2V0X3R5cGUgKHZvaWQpOworCitTb3VwTWVzc2FnZSAgKndl
YmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9nZXRfbWVzc2FnZSAoV2ViS2l0U291cFJlcXVlc3RIVFRQ
ICpodHRwKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9TT1VQX1JFUVVFU1Rf
SFRUUF9IICovCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNo
ZS9zb3VwLXJlcXVlc3QuYyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3Nv
dXAtcmVxdWVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2YjlmNWEK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9z
b3VwLXJlcXVlc3QuYwpAQCAtMCwwICsxLDMxMiBAQAorLyogLSotIE1vZGU6IEM7IHRhYi13aWR0
aDogODsgaW5kZW50LXRhYnMtbW9kZTogdDsgYy1iYXNpYy1vZmZzZXQ6IDggLSotICovCisvKgor
ICogc291cC1yZXF1ZXN0LmM6IFByb3RvY29sLWluZGVwZW5kZW50IHN0cmVhbWluZyByZXF1ZXN0
IGludGVyZmFjZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAsIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5j
bHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGdsaWIvZ2kxOG4uaD4KKworI2lu
Y2x1ZGUgInNvdXAtcmVxdWVzdC5oIgorI2luY2x1ZGUgInNvdXAtcmVxdWVzdGVyLmgiCisKKy8q
KgorICogU0VDVElPTjpzb3VwLXJlcXVlc3QKKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogUHJvdG9j
b2wtaW5kZXBlbmRlbnQgc3RyZWFtaW5nIHJlcXVlc3QgaW50ZXJmYWNlCisgKgorICogRklYTUUK
KyAqKi8KKworLyoqCisgKiBXZWJLaXRTb3VwUmVxdWVzdDoKKyAqCisgKiBGSVhNRQorICoKKyAq
IFNpbmNlOiAyLjMwCisgKiovCisKK3N0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX3JlcXVlc3RfaW5p
dGFibGVfaW50ZXJmYWNlX2luaXQgKEdJbml0YWJsZUlmYWNlICppbml0YWJsZV9pbnRlcmZhY2Up
OworCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoV2ViS2l0U291cFJlcXVlc3QsIHdlYmtpdF9z
b3VwX3JlcXVlc3QsIEdfVFlQRV9PQkpFQ1QsCisJCQkgR19JTVBMRU1FTlRfSU5URVJGQUNFIChH
X1RZUEVfSU5JVEFCTEUsCisJCQkJCQl3ZWJraXRfc291cF9yZXF1ZXN0X2luaXRhYmxlX2ludGVy
ZmFjZV9pbml0KSkKKworZW51bSB7CisJUFJPUF8wLAorCVBST1BfVVJJLAorCVBST1BfU0VTU0lP
TgorfTsKKworc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdFByaXZhdGUgeworCVNvdXBVUkkgKnVy
aTsKKwlTb3VwU2Vzc2lvbiAqc2Vzc2lvbjsKK307CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfc291
cF9yZXF1ZXN0X2luaXQgKFdlYktpdFNvdXBSZXF1ZXN0ICpyZXF1ZXN0KQoreworCXJlcXVlc3Qt
PnByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKHJlcXVlc3QsIFdFQktJVF9UWVBF
X1NPVVBfUkVRVUVTVCwgV2ViS2l0U291cFJlcXVlc3RQcml2YXRlKTsKK30KKworc3RhdGljIHZv
aWQKK3dlYmtpdF9zb3VwX3JlcXVlc3RfZmluYWxpemUgKEdPYmplY3QgKm9iamVjdCkKK3sKKwlX
ZWJLaXRTb3VwUmVxdWVzdCAqcmVxdWVzdCA9IFdFQktJVF9TT1VQX1JFUVVFU1QgKG9iamVjdCk7
CisKKwlpZiAocmVxdWVzdC0+cHJpdi0+dXJpKQorCQlzb3VwX3VyaV9mcmVlIChyZXF1ZXN0LT5w
cml2LT51cmkpOworCWlmIChyZXF1ZXN0LT5wcml2LT5zZXNzaW9uKQorCQlnX29iamVjdF91bnJl
ZiAocmVxdWVzdC0+cHJpdi0+c2Vzc2lvbik7CisKKwlHX09CSkVDVF9DTEFTUyAod2Via2l0X3Nv
dXBfcmVxdWVzdF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKK30KKworc3RhdGlj
IHZvaWQKK3dlYmtpdF9zb3VwX3JlcXVlc3Rfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICAgICAgKm9i
amVjdCwKKwkJCQkgIGd1aW50IHByb3BfaWQsCisJCQkJICBjb25zdCBHVmFsdWUgKnZhbHVlLAor
CQkJCSAgR1BhcmFtU3BlYyAgICpwc3BlYykKK3sKKwlXZWJLaXRTb3VwUmVxdWVzdCAqcmVxdWVz
dCA9IFdFQktJVF9TT1VQX1JFUVVFU1QgKG9iamVjdCk7CisKKwlzd2l0Y2ggKHByb3BfaWQpIHsK
KwljYXNlIFBST1BfVVJJOgorCQlpZiAocmVxdWVzdC0+cHJpdi0+dXJpKQorCQkJc291cF91cmlf
ZnJlZSAocmVxdWVzdC0+cHJpdi0+dXJpKTsKKwkJcmVxdWVzdC0+cHJpdi0+dXJpID0gZ192YWx1
ZV9kdXBfYm94ZWQgKHZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBQUk9QX1NFU1NJT046CisJCWlm
IChyZXF1ZXN0LT5wcml2LT5zZXNzaW9uKQorCQkJZ19vYmplY3RfdW5yZWYgKHJlcXVlc3QtPnBy
aXYtPnNlc3Npb24pOworCQlyZXF1ZXN0LT5wcml2LT5zZXNzaW9uID0gZ192YWx1ZV9kdXBfb2Jq
ZWN0ICh2YWx1ZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUdfT0JKRUNUX1dBUk5fSU5WQUxJ
RF9QUk9QRVJUWV9JRCAob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisJCWJyZWFrOworCX0KK30K
Kworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X3Byb3BlcnR5IChHT2JqZWN0
ICAgICpvYmplY3QsCisJCQkJICBndWludCBwcm9wX2lkLAorCQkJCSAgR1ZhbHVlICAgICAqdmFs
dWUsCisJCQkJICBHUGFyYW1TcGVjICpwc3BlYykKK3sKKwlXZWJLaXRTb3VwUmVxdWVzdCAqcmVx
dWVzdCA9IFdFQktJVF9TT1VQX1JFUVVFU1QgKG9iamVjdCk7CisKKwlzd2l0Y2ggKHByb3BfaWQp
IHsKKwljYXNlIFBST1BfVVJJOgorCQlnX3ZhbHVlX3NldF9ib3hlZCAodmFsdWUsIHJlcXVlc3Qt
PnByaXYtPnVyaSk7CisJCWJyZWFrOworCWNhc2UgUFJPUF9TRVNTSU9OOgorCQlnX3ZhbHVlX3Nl
dF9vYmplY3QgKHZhbHVlLCByZXF1ZXN0LT5wcml2LT5zZXNzaW9uKTsKKwkJYnJlYWs7CisJZGVm
YXVsdDoKKwkJR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3Bf
aWQsIHBzcGVjKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3dlYmtpdF9z
b3VwX3JlcXVlc3RfaW5pdGFibGVfaW5pdCAoR0luaXRhYmxlICAgICAqaW5pdGFibGUsCisJCQkJ
ICAgR0NhbmNlbGxhYmxlICAqY2FuY2VsbGFibGUsCisJCQkJICAgR0Vycm9yICAgICAgICoqZXJy
b3IpCit7CisJV2ViS2l0U291cFJlcXVlc3QgKnJlcXVlc3QgPSBXRUJLSVRfU09VUF9SRVFVRVNU
IChpbml0YWJsZSk7CisJZ2Jvb2xlYW4gb2s7CisKKwlpZiAoIXJlcXVlc3QtPnByaXYtPnVyaSkg
eworCQlnX3NldF9lcnJvciAoZXJyb3IsIFdFQktJVF9TT1VQX0VSUk9SLCBXRUJLSVRfU09VUF9F
UlJPUl9CQURfVVJJLAorCQkJICAgICBfICgiTm8gVVJJIHByb3ZpZGVkIikpOworCQlyZXR1cm4g
RkFMU0U7CisJfQorCisJb2sgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0dFVF9DTEFTUyAoaW5pdGFi
bGUpLT4KKwkJY2hlY2tfdXJpIChyZXF1ZXN0LCByZXF1ZXN0LT5wcml2LT51cmksIGVycm9yKTsK
KworCWlmICghb2sgJiYgZXJyb3IpIHsKKwkJY2hhciAqdXJpX3N0cmluZyA9IHNvdXBfdXJpX3Rv
X3N0cmluZyAocmVxdWVzdC0+cHJpdi0+dXJpLCBGQUxTRSk7CisJCWdfc2V0X2Vycm9yIChlcnJv
ciwgV0VCS0lUX1NPVVBfRVJST1IsIFdFQktJVF9TT1VQX0VSUk9SX0JBRF9VUkksCisJCQkgICAg
IF8gKCJJbnZhbGlkICclcycgVVJJOiAlcyIpLAorCQkJICAgICByZXF1ZXN0LT5wcml2LT51cmkt
PnNjaGVtZSwKKwkJCSAgICAgdXJpX3N0cmluZyk7CisJCWdfZnJlZSAodXJpX3N0cmluZyk7CisJ
fQorCisJcmV0dXJuIG9rOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3dlYmtpdF9zb3VwX3JlcXVl
c3RfZGVmYXVsdF9jaGVja191cmkgKFdlYktpdFNvdXBSZXF1ZXN0ICAqcmVxdWVzdCwKKwkJCQkg
ICAgICAgU291cFVSSSAgICAgICp1cmksCisJCQkJICAgICAgIEdFcnJvciAgICAgICoqZXJyb3Ip
Cit7CisJcmV0dXJuIFRSVUU7Cit9CisKKy8qIERlZmF1bHQgaW1wbGVtZW50YXRpb246IGFzc3Vt
ZSB0aGUgc3luYyBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IGJsb2NrICovCitzdGF0aWMgdm9pZAor
d2Via2l0X3NvdXBfcmVxdWVzdF9kZWZhdWx0X3NlbmRfYXN5bmMgKFdlYktpdFNvdXBSZXF1ZXN0
ICAgICAgICAgICpyZXF1ZXN0LAorCQkJCQlHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFi
bGUsCisJCQkJCUdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCisJCQkJCWdwb2ludGVyIHVz
ZXJfZGF0YSkKK3sKKwlHU2ltcGxlQXN5bmNSZXN1bHQgKnNpbXBsZTsKKworCXNpbXBsZSA9IGdf
c2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcgKEdfT0JKRUNUIChyZXF1ZXN0KSwKKwkJCQkJICAgIGNh
bGxiYWNrLCB1c2VyX2RhdGEsCisJCQkJCSAgICB3ZWJraXRfc291cF9yZXF1ZXN0X2RlZmF1bHRf
c2VuZF9hc3luYyk7CisJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlX2luX2lkbGUgKHNp
bXBsZSk7CisJZ19vYmplY3RfdW5yZWYgKHNpbXBsZSk7Cit9CisKK3N0YXRpYyBHSW5wdXRTdHJl
YW0gKgord2Via2l0X3NvdXBfcmVxdWVzdF9kZWZhdWx0X3NlbmRfZmluaXNoIChXZWJLaXRTb3Vw
UmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKKwkJCQkJIEdBc3luY1Jlc3VsdCAgICAgICAgICpy
ZXN1bHQsCisJCQkJCSBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpCit7CisJZ19yZXR1cm5f
dmFsX2lmX2ZhaWwgKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9pc192YWxpZCAocmVzdWx0LCBHX09C
SkVDVCAocmVxdWVzdCksIHdlYmtpdF9zb3VwX3JlcXVlc3RfZGVmYXVsdF9zZW5kX2FzeW5jKSwg
TlVMTCk7CisKKwlyZXR1cm4gd2Via2l0X3NvdXBfcmVxdWVzdF9zZW5kIChyZXF1ZXN0LCBOVUxM
LCBlcnJvcik7Cit9CisKK0dJbnB1dFN0cmVhbSAqCit3ZWJraXRfc291cF9yZXF1ZXN0X3NlbmQg
KFdlYktpdFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAorCQkJICBHQ2FuY2VsbGFibGUg
ICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcikK
K3sKKwlyZXR1cm4gV0VCS0lUX1NPVVBfUkVRVUVTVF9HRVRfQ0xBU1MgKHJlcXVlc3QpLT4KKwkJ
c2VuZCAocmVxdWVzdCwgY2FuY2VsbGFibGUsIGVycm9yKTsKK30KKwordm9pZAord2Via2l0X3Nv
dXBfcmVxdWVzdF9zZW5kX2FzeW5jIChXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVz
dCwKKwkJCQlHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJR0FzeW5jUmVh
ZHlDYWxsYmFjayBjYWxsYmFjaywKKwkJCQlncG9pbnRlciB1c2VyX2RhdGEpCit7CisJV0VCS0lU
X1NPVVBfUkVRVUVTVF9HRVRfQ0xBU1MgKHJlcXVlc3QpLT4KKwkJc2VuZF9hc3luYyAocmVxdWVz
dCwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyX2RhdGEpOworfQorCitHSW5wdXRTdHJlYW0g
Kgord2Via2l0X3NvdXBfcmVxdWVzdF9zZW5kX2ZpbmlzaCAoV2ViS2l0U291cFJlcXVlc3QgICAg
ICAgICAgKnJlcXVlc3QsCisJCQkJIEdBc3luY1Jlc3VsdCAgICAgICAgICpyZXN1bHQsCisJCQkJ
IEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcikKK3sKKwlyZXR1cm4gV0VCS0lUX1NPVVBfUkVR
VUVTVF9HRVRfQ0xBU1MgKHJlcXVlc3QpLT4KKwkJc2VuZF9maW5pc2ggKHJlcXVlc3QsIHJlc3Vs
dCwgZXJyb3IpOworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfcmVxdWVzdF9jbGFzc19p
bml0IChXZWJLaXRTb3VwUmVxdWVzdENsYXNzICpyZXF1ZXN0X2NsYXNzKQoreworCUdPYmplY3RD
bGFzcyAqb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MgKHJlcXVlc3RfY2xhc3MpOworCisJ
Z190eXBlX2NsYXNzX2FkZF9wcml2YXRlIChyZXF1ZXN0X2NsYXNzLCBzaXplb2YgKFdlYktpdFNv
dXBSZXF1ZXN0UHJpdmF0ZSkpOworCisJcmVxdWVzdF9jbGFzcy0+Y2hlY2tfdXJpID0gd2Via2l0
X3NvdXBfcmVxdWVzdF9kZWZhdWx0X2NoZWNrX3VyaTsKKwlyZXF1ZXN0X2NsYXNzLT5zZW5kX2Fz
eW5jID0gd2Via2l0X3NvdXBfcmVxdWVzdF9kZWZhdWx0X3NlbmRfYXN5bmM7CisJcmVxdWVzdF9j
bGFzcy0+c2VuZF9maW5pc2ggPSB3ZWJraXRfc291cF9yZXF1ZXN0X2RlZmF1bHRfc2VuZF9maW5p
c2g7CisKKwlvYmplY3RfY2xhc3MtPmZpbmFsaXplID0gd2Via2l0X3NvdXBfcmVxdWVzdF9maW5h
bGl6ZTsKKwlvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9zb3VwX3JlcXVlc3Rf
c2V0X3Byb3BlcnR5OworCW9iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X3NvdXBf
cmVxdWVzdF9nZXRfcHJvcGVydHk7CisKKwlnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
ICgKKwkJIG9iamVjdF9jbGFzcywgUFJPUF9VUkksCisJCSBnX3BhcmFtX3NwZWNfYm94ZWQgKFdF
QktJVF9TT1VQX1JFUVVFU1RfVVJJLAorCQkJCSAgICAgIlVSSSIsCisJCQkJICAgICAiVGhlIHJl
cXVlc3QgVVJJIiwKKwkJCQkgICAgIFNPVVBfVFlQRV9VUkksCisJCQkJICAgICBHX1BBUkFNX1JF
QURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKTsKKwlnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5ICgKKwkJIG9iamVjdF9jbGFzcywgUFJPUF9TRVNTSU9OLAorCQkgZ19wYXJh
bV9zcGVjX29iamVjdCAoV0VCS0lUX1NPVVBfUkVRVUVTVF9TRVNTSU9OLAorCQkJCSAgICAgICJT
ZXNzaW9uIiwKKwkJCQkgICAgICAiVGhlIHJlcXVlc3QncyBzZXNzaW9uIiwKKwkJCQkgICAgICBT
T1VQX1RZUEVfU0VTU0lPTiwKKwkJCQkgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1f
Q09OU1RSVUNUX09OTFkpKTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX3JlcXVlc3Rf
aW5pdGFibGVfaW50ZXJmYWNlX2luaXQgKEdJbml0YWJsZUlmYWNlICppbml0YWJsZV9pbnRlcmZh
Y2UpCit7CisJaW5pdGFibGVfaW50ZXJmYWNlLT5pbml0ID0gd2Via2l0X3NvdXBfcmVxdWVzdF9p
bml0YWJsZV9pbml0OworfQorCitTb3VwVVJJICoKK3dlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X3Vy
aSAoV2ViS2l0U291cFJlcXVlc3QgKnJlcXVlc3QpCit7CisJcmV0dXJuIHJlcXVlc3QtPnByaXYt
PnVyaTsKK30KKworU291cFNlc3Npb24gKgord2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfc2Vzc2lv
biAoV2ViS2l0U291cFJlcXVlc3QgKnJlcXVlc3QpCit7CisJcmV0dXJuIHJlcXVlc3QtPnByaXYt
PnNlc3Npb247Cit9CisKK2dvZmZzZXQKK3dlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X2NvbnRlbnRf
bGVuZ3RoIChXZWJLaXRTb3VwUmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlyZXR1cm4gV0VCS0lUX1NP
VVBfUkVRVUVTVF9HRVRfQ0xBU1MgKHJlcXVlc3QpLT5nZXRfY29udGVudF9sZW5ndGggKHJlcXVl
c3QpOworfQorCitjb25zdCBjaGFyICoKK3dlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X2NvbnRlbnRf
dHlwZSAoV2ViS2l0U291cFJlcXVlc3QgICpyZXF1ZXN0KQoreworCXJldHVybiBXRUJLSVRfU09V
UF9SRVFVRVNUX0dFVF9DTEFTUyAocmVxdWVzdCktPmdldF9jb250ZW50X3R5cGUgKHJlcXVlc3Qp
OworfQorCisjZGVmaW5lIFhESUdJVChjKSAoKGMpIDw9ICc5JyA/IChjKSAtICcwJyA6ICgoYykg
JiAweDRGKSAtICdBJyArIDEwKQorI2RlZmluZSBIRVhDSEFSKHMpICgoWERJR0lUIChzWzFdKSA8
PCA0KSArIFhESUdJVCAoc1syXSkpCisKKy8qIENvcHkmcGFzdGVkIGZyb20gbGlic291cCdzIHNv
dXAtdXJpLmMgYWZ0ZXIgYXBwbHlpbmcgdGhlIHBhdGNoIGluCisgKiBodHRwczovL2J1Z3ppbGxh
Lmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjMwNTQwLiBXZSBuZWVkIHRoaXMKKyAqIGluc3Rl
YWQgb2Ygc291cF91cmlfZGVjb2RlKCkgYXMgaXQgaW5jb3JyZWN0bHkgcmV0dXJucyBOVUxMIGZv
cgorICogaW5jb3JyZWN0bHkgZW5jb2RlZCBVUkxzLiBUT0RPOiByZW1vdmUgdGhpcyB3aGVuIHJl
cXVpcmVkIGxpYnNvdXAKKyAqIHZlcnNpb24gaXMgYnVtcGVkIG91dCB0byAyLjMyLjEKKyAqLwor
Z2NoYXIgKgord2Via2l0X3NvdXBfcmVxdWVzdF91cmlfZGVjb2RlZF9jb3B5IChjb25zdCBjaGFy
ICpwYXJ0LCBpbnQgbGVuZ3RoKQoreworCXVuc2lnbmVkIGNoYXIgKnMsICpkOworICAgICAgICBj
aGFyICpkZWNvZGVkID0gZ19zdHJuZHVwIChwYXJ0LCBsZW5ndGgpOworCisgICAgICAgIHMgPSBk
ID0gKHVuc2lnbmVkIGNoYXIgKilkZWNvZGVkOworICAgICAgICBkbyB7CisgICAgICAgICAgICAg
ICAgaWYgKCpzID09ICclJykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFnX2FzY2lp
X2lzeGRpZ2l0IChzWzFdKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICFnX2FzY2lp
X2lzeGRpZ2l0IChzWzJdKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZCsr
ID0gKnM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgKmQrKyA9IEhFWENI
QVIgKHMpOworICAgICAgICAgICAgICAgICAgICAgICAgcyArPSAyOworICAgICAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgKmQrKyA9ICpzOworICAgICAgICB9IHdo
aWxlICgqcysrKTsKKworICAgICAgICByZXR1cm4gZGVjb2RlZDsKK30KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5oIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM3ZDhmNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5oCkBAIC0wLDAgKzEs
MTAwIEBACisvKiAtKi0gTW9kZTogQzsgdGFiLXdpZHRoOiA4OyBpbmRlbnQtdGFicy1tb2RlOiB0
OyBjLWJhc2ljLW9mZnNldDogOCAtKi0gKi8KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVk
IEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdF
QktJVF9TT1VQX1JFUVVFU1RfSAorI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNUX0ggMQorCisj
aW5jbHVkZSA8bGlic291cC9zb3VwLmg+CisjaW5jbHVkZSA8Z2lvL2dpby5oPgorCitHX0JFR0lO
X0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUICAgICAgICAgICAgKHdl
YmtpdF9zb3VwX3JlcXVlc3RfZ2V0X3R5cGUgKCkpCisjZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVF
U1Qob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIFdF
QktJVF9UWVBFX1NPVVBfUkVRVUVTVCwgV2ViS2l0U291cFJlcXVlc3QpKQorI2RlZmluZSBXRUJL
SVRfU09VUF9SRVFVRVNUX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1Qg
KChrbGFzcyksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVCwgV2ViS2l0U291cFJlcXVlc3RDbGFz
cykpCisjZGVmaW5lIFdFQktJVF9JU19TT1VQX1JFUVVFU1Qob2JqKSAgICAgICAgIChHX1RZUEVf
Q0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVCkpCisj
ZGVmaW5lIFdFQktJVF9JU19TT1VQX1JFUVVFU1RfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfVFlQRSAoKGtsYXNzKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUKSkKKyNkZWZpbmUg
V0VCS0lUX1NPVVBfUkVRVUVTVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRf
Q0xBU1MgKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1QsIFdlYktpdFNvdXBSZXF1ZXN0
Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0U291cFJlcXVlc3QgV2ViS2l0U291cFJl
cXVlc3Q7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0U291cFJlcXVlc3RQcml2YXRlIFdlYktpdFNv
dXBSZXF1ZXN0UHJpdmF0ZTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdENsYXNz
IFdlYktpdFNvdXBSZXF1ZXN0Q2xhc3M7CisKK3N0cnVjdCBfV2ViS2l0U291cFJlcXVlc3Qgewor
CUdPYmplY3QgcGFyZW50OworCisJV2ViS2l0U291cFJlcXVlc3RQcml2YXRlICpwcml2OworfTsK
Kworc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdENsYXNzIHsKKwlHT2JqZWN0Q2xhc3MgcGFyZW50
OworCisJZ2Jvb2xlYW4gKCpjaGVja191cmkpKFdlYktpdFNvdXBSZXF1ZXN0ICAgICAgICAgICpy
ZXFfYmFzZSwKKwkJCSAgICAgIFNvdXBVUkkgICAgICAgICAgICAgICp1cmksCisJCQkgICAgICBH
RXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpOworCisJR0lucHV0U3RyZWFtICogKCpzZW5kKShX
ZWJLaXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKKwkJCSAgICAgICBHQ2FuY2VsbGFi
bGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkgICAgICAgR0Vycm9yICAgICAgICAgICAgICAq
KmVycm9yKTsKKwl2b2lkICgqc2VuZF9hc3luYykoV2ViS2l0U291cFJlcXVlc3QgICAgICAgICAg
KnJlcXVlc3QsCisJCQkgICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkg
ICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAorCQkJICAgZ3BvaW50ZXIgdXNlcl9kYXRh
KTsKKwlHSW5wdXRTdHJlYW0gKiAoKnNlbmRfZmluaXNoKShXZWJLaXRTb3VwUmVxdWVzdCAgICAg
ICAgICAqcmVxdWVzdCwKKwkJCQkgICAgICBHQXN5bmNSZXN1bHQgICAgICAgICAqcmVzdWx0LAor
CQkJCSAgICAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcik7CisKKwlnb2Zmc2V0ICgqZ2V0
X2NvbnRlbnRfbGVuZ3RoKShXZWJLaXRTb3VwUmVxdWVzdCAgICpyZXF1ZXN0KTsKKwljb25zdCBj
aGFyICogICAoKmdldF9jb250ZW50X3R5cGUpKFdlYktpdFNvdXBSZXF1ZXN0ICAgKnJlcXVlc3Qp
OworfTsKKworR1R5cGUgd2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfdHlwZSAodm9pZCk7CisKKyNk
ZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9VUkkgICAgICJ1cmkiCisjZGVmaW5lIFdFQktJVF9T
T1VQX1JFUVVFU1RfU0VTU0lPTiAic2Vzc2lvbiIKKworR0lucHV0U3RyZWFtICp3ZWJraXRfc291
cF9yZXF1ZXN0X3NlbmQgKFdlYktpdFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAorCQkJ
CQlHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJCUdFcnJvciAgICAgICAg
ICAgICAgKiplcnJvcik7Cit2b2lkICAgICAgICAgIHdlYmtpdF9zb3VwX3JlcXVlc3Rfc2VuZF9h
c3luYyAoV2ViS2l0U291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCisJCQkJCSAgICAgIEdD
YW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkJICAgICAgR0FzeW5jUmVhZHlD
YWxsYmFjayBjYWxsYmFjaywKKwkJCQkJICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKK0dJbnB1
dFN0cmVhbSAqd2Via2l0X3NvdXBfcmVxdWVzdF9zZW5kX2ZpbmlzaCAoV2ViS2l0U291cFJlcXVl
c3QgICAgICAgICAgKnJlcXVlc3QsCisJCQkJCSAgICAgICBHQXN5bmNSZXN1bHQgICAgICAgICAq
cmVzdWx0LAorCQkJCQkgICAgICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKTsKKworU291
cFVSSSAgICAgICp3ZWJraXRfc291cF9yZXF1ZXN0X2dldF91cmkgKFdlYktpdFNvdXBSZXF1ZXN0
ICAgICAgICAgICpyZXF1ZXN0KTsKK1NvdXBTZXNzaW9uICAqd2Via2l0X3NvdXBfcmVxdWVzdF9n
ZXRfc2Vzc2lvbiAoV2ViS2l0U291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QpOworCitnb2Zm
c2V0ICAgICAgIHdlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X2NvbnRlbnRfbGVuZ3RoIChXZWJLaXRT
b3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCk7Citjb25zdCBjaGFyICAgKndlYmtpdF9zb3Vw
X3JlcXVlc3RfZ2V0X2NvbnRlbnRfdHlwZSAoV2ViS2l0U291cFJlcXVlc3QgICAgICAgICAgKnJl
cXVlc3QpOworCisvKiBVc2VkIGJ5IFdlYktpdFNvdXBSZXF1ZXN0RmlsZSBhbmQgV2ViS2l0U291
cFJlcXVlc3REYXRhLiBJZGVhbGx5CisgKiBzaG91bGQgYmUgbG9jYXRlZCBpbiBzb21lIHV0aWwg
ZmlsZSBidXQgSSdsbCBwbGFjZSBpdCBoZXJlIGFzIGl0CisgKiB3aWxsIGJlIHJlbW92ZWQgd2l0
aCBsaWJzb3VwIDIuMzIuMSB0aGF0IHdpbGwgc2hpcCBmaXhlZCB2ZXJzaW9ucworICogb2Ygc291
cF91cmlfZGVjb2RlL25vcm1hbGl6ZQorICovCitnY2hhciAqd2Via2l0X3NvdXBfcmVxdWVzdF91
cmlfZGVjb2RlZF9jb3B5IChjb25zdCBjaGFyICpwYXJ0LCBpbnQgbGVuZ3RoKTsKKworR19FTkRf
REVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9TT1VQX1JFUVVFU1RfSCAqLwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuYyBiL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNlODlkOQotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmMKQEAg
LTAsMCArMSwxODggQEAKKy8qIC0qLSBNb2RlOiBDOyB0YWItd2lkdGg6IDg7IGluZGVudC10YWJz
LW1vZGU6IHQ7IGMtYmFzaWMtb2Zmc2V0OiA4IC0qLSAqLworLyoKKyAqIHNvdXAtcmVxdWVzdGVy
LmM6CisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAic291cC1yZXF1ZXN0ZXIuaCIKKworI2luY2x1ZGUgInNvdXAtcmVx
dWVzdC1kYXRhLmgiCisjaW5jbHVkZSAic291cC1yZXF1ZXN0LWZpbGUuaCIKKyNpbmNsdWRlICJz
b3VwLXJlcXVlc3QtaHR0cC5oIgorI2luY2x1ZGUgPGdsaWIvZ2kxOG4uaD4KKyNpbmNsdWRlIDxs
aWJzb3VwL3NvdXAuaD4KKworc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdGVyUHJpdmF0ZSB7CisJ
R0hhc2hUYWJsZSAqcmVxdWVzdF90eXBlczsKK307CisKKyNkZWZpbmUgV0VCS0lUX1NPVVBfUkVR
VUVTVEVSX0dFVF9QUklWQVRFKG8pIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKChvKSwg
V0VCS0lUX1RZUEVfU09VUF9SRVFVRVNURVIsIFdlYktpdFNvdXBSZXF1ZXN0ZXJQcml2YXRlKSkK
KworR19ERUZJTkVfVFlQRSAoV2ViS2l0U291cFJlcXVlc3Rlciwgd2Via2l0X3NvdXBfcmVxdWVz
dGVyLCBHX1RZUEVfT0JKRUNUKQorCitzdGF0aWMgdm9pZCB3ZWJraXRfc291cF9yZXF1ZXN0ZXJf
aW5pdCAoV2ViS2l0U291cFJlcXVlc3RlciAqcmVxdWVzdGVyKQoreworCXJlcXVlc3Rlci0+cHJp
diA9IFdFQktJVF9TT1VQX1JFUVVFU1RFUl9HRVRfUFJJVkFURSAocmVxdWVzdGVyKTsKKworCXJl
cXVlc3Rlci0+cHJpdi0+cmVxdWVzdF90eXBlcyA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmFs
aXplIChHT2JqZWN0ICpvYmplY3QpCit7CisJV2ViS2l0U291cFJlcXVlc3RlciAqcmVxdWVzdGVy
ID0gV0VCS0lUX1NPVVBfUkVRVUVTVEVSIChvYmplY3QpOworCisJaWYgKHJlcXVlc3Rlci0+cHJp
di0+cmVxdWVzdF90eXBlcykKKwkJZ19oYXNoX3RhYmxlX2Rlc3Ryb3kgKHJlcXVlc3Rlci0+cHJp
di0+cmVxdWVzdF90eXBlcyk7CisKKwlHX09CSkVDVF9DTEFTUyAod2Via2l0X3NvdXBfcmVxdWVz
dGVyX3BhcmVudF9jbGFzcyktPmZpbmFsaXplIChvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRfc291cF9yZXF1ZXN0ZXJfY2xhc3NfaW5pdCAoV2ViS2l0U291cFJlcXVlc3RlckNsYXNz
ICpyZXF1ZXN0ZXJfY2xhc3MpCit7CisJR09iamVjdENsYXNzICpvYmplY3RfY2xhc3MgPSBHX09C
SkVDVF9DTEFTUyAocmVxdWVzdGVyX2NsYXNzKTsKKworCWdfdHlwZV9jbGFzc19hZGRfcHJpdmF0
ZSAocmVxdWVzdGVyX2NsYXNzLCBzaXplb2YgKFdlYktpdFNvdXBSZXF1ZXN0ZXJQcml2YXRlKSk7
CisKKwkvKiB2aXJ0dWFsIG1ldGhvZCBvdmVycmlkZSAqLworCW9iamVjdF9jbGFzcy0+ZmluYWxp
emUgPSBmaW5hbGl6ZTsKK30KKworc3RhdGljIHZvaWQgaW5pdF9yZXF1ZXN0X3R5cGVzIChXZWJL
aXRTb3VwUmVxdWVzdGVyUHJpdmF0ZSAqcHJpdikKK3sKKwlpZiAocHJpdi0+cmVxdWVzdF90eXBl
cykKKwkJcmV0dXJuOworCisJcHJpdi0+cmVxdWVzdF90eXBlcyA9IGdfaGFzaF90YWJsZV9uZXdf
ZnVsbCAoc291cF9zdHJfY2FzZV9oYXNoLAorCQkJCQkJICAgICBzb3VwX3N0cl9jYXNlX2VxdWFs
LAorCQkJCQkJICAgICBnX2ZyZWUsIDApOworCWdfaGFzaF90YWJsZV9pbnNlcnQgKHByaXYtPnJl
cXVlc3RfdHlwZXMsIGdfc3RyZHVwICgiZmlsZSIpLAorCQkJICAgICBHU0laRV9UT19QT0lOVEVS
IChXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfRklMRSkpOworCWdfaGFzaF90YWJsZV9pbnNlcnQg
KHByaXYtPnJlcXVlc3RfdHlwZXMsIGdfc3RyZHVwICgiZGF0YSIpLAorCQkJICAgICBHU0laRV9U
T19QT0lOVEVSIChXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfREFUQSkpOworCWdfaGFzaF90YWJs
ZV9pbnNlcnQgKHByaXYtPnJlcXVlc3RfdHlwZXMsIGdfc3RyZHVwICgiaHR0cCIpLAorCQkJICAg
ICBHU0laRV9UT19QT0lOVEVSIChXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfSFRUUCkpOworCWdf
aGFzaF90YWJsZV9pbnNlcnQgKHByaXYtPnJlcXVlc3RfdHlwZXMsIGdfc3RyZHVwICgiaHR0cHMi
KSwKKwkJCSAgICAgR1NJWkVfVE9fUE9JTlRFUiAoV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0hU
VFApKTsKKwlnX2hhc2hfdGFibGVfaW5zZXJ0IChwcml2LT5yZXF1ZXN0X3R5cGVzLCBnX3N0cmR1
cCAoImZ0cCIpLAorCQkJICAgICBHU0laRV9UT19QT0lOVEVSIChXRUJLSVRfVFlQRV9TT1VQX1JF
UVVFU1RfRklMRSkpOworfQorCitXZWJLaXRTb3VwUmVxdWVzdGVyICp3ZWJraXRfc291cF9yZXF1
ZXN0ZXJfbmV3ICh2b2lkKQoreworCXJldHVybiAoV2ViS2l0U291cFJlcXVlc3RlciAqKWdfb2Jq
ZWN0X25ldyAoV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNURVIsIDApOworfQorCitXZWJLaXRTb3Vw
UmVxdWVzdCAqd2Via2l0X3NvdXBfcmVxdWVzdGVyX3JlcXVlc3QgKFdlYktpdFNvdXBSZXF1ZXN0
ZXIgKnJlcXVlc3RlciwgY29uc3QgY2hhciAqdXJpU3RyaW5nLCBTb3VwU2Vzc2lvbiAqc2Vzc2lv
biwgR0Vycm9yICoqZXJyb3IpCit7CisJU291cFVSSSAqdXJpID0gTlVMTDsKKwlXZWJLaXRTb3Vw
UmVxdWVzdCAqcmVxOworCisJdXJpID0gc291cF91cmlfbmV3ICh1cmlTdHJpbmcpOworCWlmICgh
dXJpKSB7CisJCWdfc2V0X2Vycm9yIChlcnJvciwgV0VCS0lUX1NPVVBfRVJST1IsIFdFQktJVF9T
T1VQX0VSUk9SX0JBRF9VUkksCisJCQkgICAgIF8gKCJDb3VsZCBub3QgcGFyc2UgVVJJICclcyci
KSwgdXJpU3RyaW5nKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmVxID0gd2Via2l0X3NvdXBfcmVx
dWVzdGVyX3JlcXVlc3RfdXJpIChyZXF1ZXN0ZXIsIHVyaSwgc2Vzc2lvbiwgZXJyb3IpOworCXNv
dXBfdXJpX2ZyZWUgKHVyaSk7CisJcmV0dXJuIHJlcTsKK30KKworV2ViS2l0U291cFJlcXVlc3Qg
KndlYmtpdF9zb3VwX3JlcXVlc3Rlcl9yZXF1ZXN0X3VyaSAoV2ViS2l0U291cFJlcXVlc3RlciAq
cmVxdWVzdGVyLCBTb3VwVVJJICp1cmksIFNvdXBTZXNzaW9uICpzZXNzaW9uLCBHRXJyb3IgKipl
cnJvcikKK3sKKwlHVHlwZSByZXF1ZXN0VHlwZTsKKworCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChX
RUJLSVRfSVNfU09VUF9SRVFVRVNURVIgKHJlcXVlc3RlciksIDApOworCisJaW5pdF9yZXF1ZXN0
X3R5cGVzIChyZXF1ZXN0ZXItPnByaXYpOworCXJlcXVlc3RUeXBlID0gKEdUeXBlKUdQT0lOVEVS
X1RPX1NJWkUgKGdfaGFzaF90YWJsZV9sb29rdXAgKHJlcXVlc3Rlci0+cHJpdi0+cmVxdWVzdF90
eXBlcywgdXJpLT5zY2hlbWUpKTsKKwlpZiAoIXJlcXVlc3RUeXBlKSB7CisJCWdfc2V0X2Vycm9y
IChlcnJvciwgV0VCS0lUX1NPVVBfRVJST1IsIFdFQktJVF9TT1VQX0VSUk9SX1VOU1VQUE9SVEVE
X1VSSV9TQ0hFTUUsCisJCQkgICAgIF8gKCJVbnN1cHBvcnRlZCBVUkkgc2NoZW1lICclcyciKSwg
dXJpLT5zY2hlbWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZ190eXBlX2lzX2EgKHJlcXVl
c3RUeXBlLCBHX1RZUEVfSU5JVEFCTEUpKSB7CisJCXJldHVybiAoV2ViS2l0U291cFJlcXVlc3Qg
KilnX2luaXRhYmxlX25ldyAocmVxdWVzdFR5cGUsIDAsIGVycm9yLAorCQkJCQkJCSAgICAidXJp
IiwgdXJpLAorCQkJCQkJCSAgICAic2Vzc2lvbiIsIHNlc3Npb24sCisJCQkJCQkJICAgIDApOwor
CX0gZWxzZSB7CisJCXJldHVybiAoV2ViS2l0U291cFJlcXVlc3QgKilnX29iamVjdF9uZXcgKHJl
cXVlc3RUeXBlLAorCQkJCQkJCSAgInVyaSIsIHVyaSwKKwkJCQkJCQkgICJzZXNzaW9uIiwgc2Vz
c2lvbiwKKwkJCQkJCQkgIDApOworCX0KK30KKworLyogUkZDIDIzOTYsIDMuMSAqLworc3RhdGlj
IGdib29sZWFuCitzb3VwX3NjaGVtZV9pc192YWxpZCAoY29uc3QgY2hhciAqc2NoZW1lKQorewor
CWlmIChzY2hlbWUgPT0gTlVMTCB8fAorCSAgICAhZ19hc2NpaV9pc2FscGhhICgqc2NoZW1lKSkK
KwkJcmV0dXJuIEZBTFNFOworCisJc2NoZW1lKys7CisJd2hpbGUgKCpzY2hlbWUpIHsKKwkJaWYg
KCFnX2FzY2lpX2lzYWxwaGEgKCpzY2hlbWUpICYmCisJCSAgICAhZ19hc2NpaV9pc2RpZ2l0ICgq
c2NoZW1lKSAmJgorCQkgICAgKnNjaGVtZSAhPSAnKycgJiYKKwkJICAgICpzY2hlbWUgIT0gJy0n
ICYmCisJCSAgICAqc2NoZW1lICE9ICcuJykKKwkJCXJldHVybiBGQUxTRTsKKwkJc2NoZW1lKys7
CisJfQorCXJldHVybiBUUlVFOworfQorCit2b2lkCit3ZWJraXRfc291cF9yZXF1ZXN0ZXJfYWRk
X3Byb3RvY29sIChXZWJLaXRTb3VwUmVxdWVzdGVyICpyZXF1ZXN0ZXIsCisJCQkJICAgIGNvbnN0
IGNoYXIgICpzY2hlbWUsCisJCQkJICAgIEdUeXBlIHJlcXVlc3RfdHlwZSkKK3sKKwlnX3JldHVy
bl9pZl9mYWlsIChXRUJLSVRfSVNfU09VUF9SRVFVRVNURVIgKHJlcXVlc3RlcikpOworCWdfcmV0
dXJuX2lmX2ZhaWwgKHNvdXBfc2NoZW1lX2lzX3ZhbGlkIChzY2hlbWUpKTsKKworCWluaXRfcmVx
dWVzdF90eXBlcyAocmVxdWVzdGVyLT5wcml2KTsKKwlnX2hhc2hfdGFibGVfaW5zZXJ0IChyZXF1
ZXN0ZXItPnByaXYtPnJlcXVlc3RfdHlwZXMsIGdfc3RyZHVwIChzY2hlbWUpLAorCQkJICAgICBH
U0laRV9UT19QT0lOVEVSIChyZXF1ZXN0X3R5cGUpKTsKK30KKwordm9pZAord2Via2l0X3NvdXBf
cmVxdWVzdGVyX3JlbW92ZV9wcm90b2NvbCAoV2ViS2l0U291cFJlcXVlc3RlciAqcmVxdWVzdGVy
LAorCQkJCSAgICAgICBjb25zdCBjaGFyICAqc2NoZW1lKQoreworCWdfcmV0dXJuX2lmX2ZhaWwg
KFdFQktJVF9JU19TT1VQX1JFUVVFU1RFUiAocmVxdWVzdGVyKSk7CisJZ19yZXR1cm5faWZfZmFp
bCAoc291cF9zY2hlbWVfaXNfdmFsaWQgKHNjaGVtZSkpOworCisJaW5pdF9yZXF1ZXN0X3R5cGVz
IChyZXF1ZXN0ZXItPnByaXYpOworCWdfaGFzaF90YWJsZV9yZW1vdmUgKHJlcXVlc3Rlci0+cHJp
di0+cmVxdWVzdF90eXBlcywgc2NoZW1lKTsKK30KKworR1F1YXJrCit3ZWJraXRfc291cF9lcnJv
cl9xdWFyayAodm9pZCkKK3sKKwlzdGF0aWMgR1F1YXJrIGVycm9yOworCWlmICghZXJyb3IpCisJ
CWVycm9yID0gZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcgKCJ3ZWJraXRfc291cF9lcnJvcl9x
dWFyayIpOworCXJldHVybiBlcnJvcjsKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmggYi9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjcxZmYxMDMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Rlci5oCkBAIC0wLDAgKzEsODEgQEAKKy8q
IC0qLSBNb2RlOiBDOyB0YWItd2lkdGg6IDg7IGluZGVudC10YWJzLW1vZGU6IHQ7IGMtYmFzaWMt
b2Zmc2V0OiA4IC0qLSAqLworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWZuZGVmIFdFQktJVF9TT1VQX1JFUVVFU1RFUl9ICisjZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVF
U1RFUl9IIDEKKworI2luY2x1ZGUgInNvdXAtcmVxdWVzdC5oIgorI2luY2x1ZGUgPGxpYnNvdXAv
c291cC5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfU09VUF9SRVFV
RVNURVIgICAgICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdGVyX2dldF90eXBlICgpKQorI2Rl
ZmluZSBXRUJLSVRfU09VUF9SRVFVRVNURVIob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tf
SU5TVEFOQ0VfQ0FTVCAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVEVSLCBXZWJLaXRT
b3VwUmVxdWVzdGVyKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVEVSX0NMQVNTKGtsYXNz
KSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFdFQktJVF9UWVBFX1NPVVBf
UkVRVUVTVEVSLCBXZWJLaXRTb3VwUmVxdWVzdGVyQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNf
U09VUF9SRVFVRVNURVIob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAo
KG9iaiksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVEVSKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1NP
VVBfUkVRVUVTVEVSX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChvYmop
LCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RFUikpCisjZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVF
U1RFUl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBX
RUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RFUiwgV2ViS2l0U291cFJlcXVlc3RlckNsYXNzKSkKKwor
I2RlZmluZSBXRUJLSVRfU09VUF9FUlJPUiB3ZWJraXRfc291cF9lcnJvcl9xdWFyayAoKQorCit0
eXBlZGVmIGVudW0geworCVdFQktJVF9TT1VQX0VSUk9SX0JBRF9VUkksCisJV0VCS0lUX1NPVVBf
RVJST1JfVU5TVVBQT1JURURfVVJJX1NDSEVNRQorfSBXZWJLaXRTb3VwRXJyb3I7CisKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdGVyIFdlYktpdFNvdXBSZXF1ZXN0ZXI7Cit0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0U291cFJlcXVlc3RlclByaXZhdGUgV2ViS2l0U291cFJlcXVlc3Rl
clByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0U291cFJlcXVlc3RlciB7CisJR09iamVjdCBwYXJl
bnQ7CisKKwlXZWJLaXRTb3VwUmVxdWVzdGVyUHJpdmF0ZSAqcHJpdjsKK307CisKK3R5cGVkZWYg
c3RydWN0IHsKKwlHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfSBXZWJLaXRTb3VwUmVxdWVz
dGVyQ2xhc3M7CisKK0dUeXBlIHdlYmtpdF9zb3VwX3JlcXVlc3Rlcl9nZXRfdHlwZSAodm9pZCk7
CisKK1dlYktpdFNvdXBSZXF1ZXN0ZXIgKndlYmtpdF9zb3VwX3JlcXVlc3Rlcl9uZXcgKHZvaWQp
OworCitHUXVhcmsgd2Via2l0X3NvdXBfZXJyb3JfcXVhcmsgKHZvaWQpOworCitXZWJLaXRTb3Vw
UmVxdWVzdCAqd2Via2l0X3NvdXBfcmVxdWVzdGVyX3JlcXVlc3QgKFdlYktpdFNvdXBSZXF1ZXN0
ZXIgKnJlcXVlc3RlciwKKwkJCQkJCSAgY29uc3QgY2hhciAqdXJpU3RyaW5nLAorCQkJCQkJICBT
b3VwU2Vzc2lvbiAqc2Vzc2lvbiwKKwkJCQkJCSAgR0Vycm9yICoqZXJyb3IpOworCitXZWJLaXRT
b3VwUmVxdWVzdCAqd2Via2l0X3NvdXBfcmVxdWVzdGVyX3JlcXVlc3RfdXJpIChXZWJLaXRTb3Vw
UmVxdWVzdGVyICpyZXF1ZXN0ZXIsCisJCQkJCQkgICAgICBTb3VwVVJJICp1cmksCisJCQkJCQkg
ICAgICBTb3VwU2Vzc2lvbiAqc2Vzc2lvbiwKKwkJCQkJCSAgICAgIEdFcnJvciAqKmVycm9yKTsK
Kwordm9pZCB3ZWJraXRfc291cF9yZXF1ZXN0ZXJfYWRkX3Byb3RvY29sIChXZWJLaXRTb3VwUmVx
dWVzdGVyICpyZXF1ZXN0ZXIsCisJCQkJCSBjb25zdCBjaGFyICAqc2NoZW1lLAorCQkJCQkgR1R5
cGUgcmVxdWVzdF90eXBlKTsKKwordm9pZCB3ZWJraXRfc291cF9yZXF1ZXN0ZXJfcmVtb3ZlX3By
b3RvY29sIChXZWJLaXRTb3VwUmVxdWVzdGVyICpyZXF1ZXN0ZXIsCisJCQkJCSAgICBjb25zdCBj
aGFyICAqc2NoZW1lKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9TT1VQX1JF
UVVFU1RFUl9IICovCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9j
YWNoZS93ZWJraXQvc291cC1jYWNoZS1wcml2YXRlLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS1wcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uOGFmOGRlMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLXByaXZhdGUuaApA
QCAtMCwwICsxLDQyIEBACisvKiAtKi0gTW9kZTogQzsgdGFiLXdpZHRoOiA4OyBpbmRlbnQtdGFi
cy1tb2RlOiB0OyBjLWJhc2ljLW9mZnNldDogOCAtKi0gKi8KKy8qCisgKiBzb3VwLWNhY2hlLXBy
aXZhdGUuaDoKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYg
V0VCS0lUX1NPVVBfQ0FDSEVfUFJJVkFURV9ICisjZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX1BS
SVZBVEVfSCAxCisKKyNpbmNsdWRlICJzb3VwLWNhY2hlLmgiCisjaW5jbHVkZSA8bGlic291cC9z
b3VwLW1lc3NhZ2UuaD4KKworR19CRUdJTl9ERUNMUworCitXZWJLaXRTb3VwQ2FjaGVSZXNwb25z
ZSB3ZWJraXRfc291cF9jYWNoZV9oYXNfcmVzcG9uc2UgKFdlYktpdFNvdXBDYWNoZSAgICpjYWNo
ZSwKKwkJCQkJCQlTb3VwTWVzc2FnZSAqbXNnKTsKK0dJbnB1dFN0cmVhbSAqd2Via2l0X3NvdXBf
Y2FjaGVfc2VuZF9yZXNwb25zZSAoV2ViS2l0U291cENhY2hlICAgKmNhY2hlLAorCQkJCQkgICAg
ICAgU291cE1lc3NhZ2UgKm1zZyk7CitXZWJLaXRTb3VwQ2FjaGVhYmlsaXR5ICB3ZWJraXRfc291
cF9jYWNoZV9nZXRfY2FjaGVhYmlsaXR5IChXZWJLaXRTb3VwQ2FjaGUgICAqY2FjaGUsCisJCQkJ
CQkJICAgIFNvdXBNZXNzYWdlICptc2cpOworU291cE1lc3NhZ2UgKndlYmtpdF9zb3VwX2NhY2hl
X2dlbmVyYXRlX2NvbmRpdGlvbmFsX3JlcXVlc3QgKFdlYktpdFNvdXBDYWNoZSAgICpjYWNoZSwK
KwkJCQkJCQkgICAgIFNvdXBNZXNzYWdlICpvcmlnaW5hbCk7CisKK0dfRU5EX0RFQ0xTCisKKyNl
bmRpZiAvKiBXRUJLSVRfU09VUF9DQUNIRV9QUklWQVRFX0ggKi8KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLmMgYi9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5jCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NDQ2ZmUKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5j
CkBAIC0wLDAgKzEsMTY1MyBAQAorLyogLSotIE1vZGU6IEM7IHRhYi13aWR0aDogODsgaW5kZW50
LXRhYnMtbW9kZTogdDsgYy1iYXNpYy1vZmZzZXQ6IDggLSotICovCisvKgorICogc291cC1jYWNo
ZS5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIElnYWxpYSBTLkwuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKy8qIFRPRE86
CisgKiAtIE5lZWQgdG8gaG9vayB0aGUgZmVhdHVyZSBpbiB0aGUgc3luYyBTb3VwU2Vzc2lvbi4K
KyAqIC0gTmVlZCBtb3JlIHRlc3RzLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5j
bHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgInNvdXAtY2FjaGUuaCIKKyNpbmNs
dWRlICJzb3VwLWNhY2hlLXByaXZhdGUuaCIKKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNp
bmNsdWRlIDxnaW8vZ2lvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKK3N0YXRpYyBTb3VwU2Vz
c2lvbkZlYXR1cmVJbnRlcmZhY2UgKndlYmtpdF9zb3VwX2NhY2hlX2RlZmF1bHRfZmVhdHVyZV9p
bnRlcmZhY2U7CitzdGF0aWMgdm9pZCB3ZWJraXRfc291cF9jYWNoZV9zZXNzaW9uX2ZlYXR1cmVf
aW5pdCAoU291cFNlc3Npb25GZWF0dXJlSW50ZXJmYWNlICpmZWF0dXJlX2ludGVyZmFjZSwgZ3Bv
aW50ZXIgaW50ZXJmYWNlX2RhdGEpOworCisjZGVmaW5lIERFRkFVTFRfTUFYX1NJWkUgNTAgKiAx
MDI0ICogMTAyNAorI2RlZmluZSBNQVhfRU5UUllfREFUQV9QRVJDRU5UQUdFIDEwIC8qIFBlcmNl
bnRhZ2Ugb2YgdGhlIHRvdGFsIHNpemUKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9mIHRoZSBjYWNoZSB0aGF0IGNhbiBiZQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZmlsbGVkIGJ5IGEgc2luZ2xlIGVudHJ5ICovCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRT
b3VwQ2FjaGVFbnRyeSB7CisJY2hhciAqa2V5OworCWNoYXIgKmZpbGVuYW1lOworCWd1aW50IGZy
ZXNobmVzc19saWZldGltZTsKKwlnYm9vbGVhbiBtdXN0X3JldmFsaWRhdGU7CisJR1N0cmluZyAq
ZGF0YTsKKwlnc2l6ZSBwb3M7CisJZ3NpemUgbGVuZ3RoOworCXRpbWVfdCBjb3JyZWN0ZWRfaW5p
dGlhbF9hZ2U7CisJdGltZV90IHJlc3BvbnNlX3RpbWU7CisJZ2Jvb2xlYW4gd3JpdGluZzsKKwln
Ym9vbGVhbiBkaXJ0eTsKKwlnYm9vbGVhbiBnb3RfYm9keTsKKwlnYm9vbGVhbiBiZWluZ192YWxp
ZGF0ZWQ7CisJU291cE1lc3NhZ2VIZWFkZXJzICpoZWFkZXJzOworCUdPdXRwdXRTdHJlYW0gKnN0
cmVhbTsKKwlHRXJyb3IgKmVycm9yOworCWd1aW50IGhpdHM7CisJR0NhbmNlbGxhYmxlICpjYW5j
ZWxsYWJsZTsKK30gV2ViS2l0U291cENhY2hlRW50cnk7CisKK3N0cnVjdCBfV2ViS2l0U291cENh
Y2hlUHJpdmF0ZSB7CisJY2hhciAqY2FjaGVfZGlyOworCUdIYXNoVGFibGUgKmNhY2hlOworCWd1
aW50IG5fcGVuZGluZzsKKwlTb3VwU2Vzc2lvbiAqc2Vzc2lvbjsKKwlXZWJLaXRTb3VwQ2FjaGVU
eXBlIGNhY2hlX3R5cGU7CisJZ3VpbnQgc2l6ZTsKKwlndWludCBtYXhfc2l6ZTsKKwlndWludCBt
YXhfZW50cnlfZGF0YV9zaXplOyAvKiBDb21wdXRlZCB2YWx1ZS4gSGVyZSBmb3IgcGVyZm9ybWFu
Y2UgcmVhc29ucyAqLworCUdMaXN0ICpscnVfc3RhcnQ7Cit9OworCit0eXBlZGVmIHN0cnVjdCB7
CisJV2ViS2l0U291cENhY2hlICpjYWNoZTsKKwlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnk7
CisJU291cE1lc3NhZ2UgKm1zZzsKKwlndWxvbmcgZ290X2NodW5rX2hhbmRsZXI7CisJZ3Vsb25n
IGdvdF9ib2R5X2hhbmRsZXI7CisJZ3Vsb25nIHJlc3RhcnRlZF9oYW5kbGVyOworfSBXZWJLaXRT
b3VwQ2FjaGVXcml0aW5nRml4dHVyZTsKKworZW51bSB7CisJUFJPUF8wLAorCVBST1BfQ0FDSEVf
RElSLAorCVBST1BfQ0FDSEVfVFlQRQorfTsKKworI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9H
RVRfUFJJVkFURShvKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFICgobyksIFdFQktJVF9U
WVBFX1NPVVBfQ0FDSEUsIFdlYktpdFNvdXBDYWNoZVByaXZhdGUpKQorCitHX0RFRklORV9UWVBF
X1dJVEhfQ09ERSAoV2ViS2l0U291cENhY2hlLCB3ZWJraXRfc291cF9jYWNoZSwgR19UWVBFX09C
SkVDVCwKKwkJCSBHX0lNUExFTUVOVF9JTlRFUkZBQ0UgKFNPVVBfVFlQRV9TRVNTSU9OX0ZFQVRV
UkUsCisJCQkJCQl3ZWJraXRfc291cF9jYWNoZV9zZXNzaW9uX2ZlYXR1cmVfaW5pdCkpCisKK3N0
YXRpYyBnYm9vbGVhbiB3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9yZW1vdmUgKFdlYktpdFNvdXBD
YWNoZSAqY2FjaGUsIFdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSk7CitzdGF0aWMgdm9pZCBt
YWtlX3Jvb21fZm9yX25ld19lbnRyeSAoV2ViS2l0U291cENhY2hlICpjYWNoZSwgZ3VpbnQgbGVu
Z3RoX3RvX2FkZCk7CitzdGF0aWMgZ2Jvb2xlYW4gY2FjaGVfYWNjZXB0c19lbnRyaWVzX29mX3Np
emUgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsIGd1aW50IGxlbmd0aF90b19hZGQpOworCitzdGF0
aWMgV2ViS2l0U291cENhY2hlYWJpbGl0eQorZ2V0X2NhY2hlYWJpbGl0eSAoV2ViS2l0U291cENh
Y2hlICpjYWNoZSwgU291cE1lc3NhZ2UgKm1zZykKK3sKKwlXZWJLaXRTb3VwQ2FjaGVhYmlsaXR5
IGNhY2hlYWJpbGl0eTsKKwljb25zdCBjaGFyICpjYWNoZV9jb250cm9sOworCisJLyogMS4gVGhl
IHJlcXVlc3QgbWV0aG9kIG11c3QgYmUgY2FjaGVhYmxlICovCisJaWYgKG1zZy0+bWV0aG9kID09
IFNPVVBfTUVUSE9EX0dFVCkKKwkJY2FjaGVhYmlsaXR5ID0gV0VCS0lUX1NPVVBfQ0FDSEVfQ0FD
SEVBQkxFOworCWVsc2UgaWYgKG1zZy0+bWV0aG9kID09IFNPVVBfTUVUSE9EX0hFQUQgfHwKKwkJ
IG1zZy0+bWV0aG9kID09IFNPVVBfTUVUSE9EX1RSQUNFIHx8CisJCSBtc2ctPm1ldGhvZCA9PSBT
T1VQX01FVEhPRF9DT05ORUNUKQorCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfVU5DQUNIRUFC
TEU7CisJZWxzZQorCQlyZXR1cm4gKFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFIHwgV0VC
S0lUX1NPVVBfQ0FDSEVfSU5WQUxJREFURVMpOworCisJY2FjaGVfY29udHJvbCA9IHNvdXBfbWVz
c2FnZV9oZWFkZXJzX2dldCAobXNnLT5yZXNwb25zZV9oZWFkZXJzLCAiQ2FjaGUtQ29udHJvbCIp
OworCWlmIChjYWNoZV9jb250cm9sKSB7CisJCUdIYXNoVGFibGUgKmhhc2g7CisJCVdlYktpdFNv
dXBDYWNoZVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9DQUNIRV9HRVRfUFJJVkFURSAoY2Fj
aGUpOworCisJCWhhc2ggPSBzb3VwX2hlYWRlcl9wYXJzZV9wYXJhbV9saXN0IChjYWNoZV9jb250
cm9sKTsKKworCQkvKiBTaGFyZWQgY2FjaGVzIE1VU1QgTk9UIHN0b3JlIHByaXZhdGUgcmVzb3Vy
Y2VzICovCisJCWlmIChwcml2LT5jYWNoZV90eXBlID09IFdFQktJVF9TT1VQX0NBQ0hFX1NIQVJF
RCkgeworCQkJaWYgKGdfaGFzaF90YWJsZV9sb29rdXBfZXh0ZW5kZWQgKGhhc2gsICJwcml2YXRl
IiwgTlVMTCwgTlVMTCkpIHsKKwkJCQlzb3VwX2hlYWRlcl9mcmVlX3BhcmFtX2xpc3QgKGhhc2gp
OworCQkJCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRTsKKwkJCX0KKwkJfQor
CisJCS8qIDIuIFRoZSAnbm8tc3RvcmUnIGNhY2hlIGRpcmVjdGl2ZSBkb2VzIG5vdCBhcHBlYXIg
aW4gdGhlCisJCSAqIGhlYWRlcnMKKwkJICovCisJCWlmIChnX2hhc2hfdGFibGVfbG9va3VwX2V4
dGVuZGVkIChoYXNoLCAibm8tc3RvcmUiLCBOVUxMLCBOVUxMKSkgeworCQkJc291cF9oZWFkZXJf
ZnJlZV9wYXJhbV9saXN0IChoYXNoKTsKKwkJCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9VTkNB
Q0hFQUJMRTsKKwkJfQorCisJCS8qIFRoaXMgZG9lcyBub3QgYXBwZWFyIGluIHNlY3Rpb24gMi4x
LCBidXQgSSB0aGluayBpdCBtYWtlcworCQkgKiBzZW5zZSB0byBjaGVjayBpdCB0b28/CisJCSAq
LworCQlpZiAoZ19oYXNoX3RhYmxlX2xvb2t1cF9leHRlbmRlZCAoaGFzaCwgIm5vLWNhY2hlIiwg
TlVMTCwgTlVMTCkpIHsKKwkJCXNvdXBfaGVhZGVyX2ZyZWVfcGFyYW1fbGlzdCAoaGFzaCk7CisJ
CQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEU7CisJCX0KKwl9CisKKwlzd2l0
Y2ggKG1zZy0+c3RhdHVzX2NvZGUpIHsKKwljYXNlIFNPVVBfU1RBVFVTX1BBUlRJQUxfQ09OVEVO
VDoKKwkJLyogV2UgZG9uJ3QgY2FjaGUgcGFydGlhbCByZXNwb25zZXMsIGJ1dCB0aGV5IG9ubHkK
KwkJICogaW52YWxpZGF0ZSBjYWNoZWQgZnVsbCByZXNwb25zZXMgaWYgdGhlIGhlYWRlcnMKKwkJ
ICogZG9uJ3QgbWF0Y2guCisJCSAqLworCQljYWNoZWFiaWxpdHkgPSBXRUJLSVRfU09VUF9DQUNI
RV9VTkNBQ0hFQUJMRTsKKwkJYnJlYWs7CisKKwljYXNlIFNPVVBfU1RBVFVTX05PVF9NT0RJRklF
RDoKKwkJLyogQSAzMDQgcmVzcG9uc2UgdmFsaWRhdGVzIGFuIGV4aXN0aW5nIGNhY2hlIGVudHJ5
ICovCisJCWNhY2hlYWJpbGl0eSA9IFdFQktJVF9TT1VQX0NBQ0hFX1ZBTElEQVRFUzsKKwkJYnJl
YWs7CisKKwljYXNlIFNPVVBfU1RBVFVTX01VTFRJUExFX0NIT0lDRVM6CisJY2FzZSBTT1VQX1NU
QVRVU19NT1ZFRF9QRVJNQU5FTlRMWToKKwljYXNlIFNPVVBfU1RBVFVTX0dPTkU6CisJCS8qIEZJ
WE1FOiBjYWNoZWFibGUgdW5sZXNzIGluZGljYXRlZCBvdGhlcndpc2UgKi8KKwkJY2FjaGVhYmls
aXR5ID0gV0VCS0lUX1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEU7CisJCWJyZWFrOworCisJY2FzZSBT
T1VQX1NUQVRVU19GT1VORDoKKwljYXNlIFNPVVBfU1RBVFVTX1RFTVBPUkFSWV9SRURJUkVDVDoK
KwkJLyogRklYTUU6IGNhY2hlYWJsZSBpZiBleHBsaWNpdGx5IGluZGljYXRlZCAqLworCQljYWNo
ZWFiaWxpdHkgPSBXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRTsKKwkJYnJlYWs7CisKKwlj
YXNlIFNPVVBfU1RBVFVTX1NFRV9PVEhFUjoKKwljYXNlIFNPVVBfU1RBVFVTX0ZPUkJJRERFTjoK
KwljYXNlIFNPVVBfU1RBVFVTX05PVF9GT1VORDoKKwljYXNlIFNPVVBfU1RBVFVTX01FVEhPRF9O
T1RfQUxMT1dFRDoKKwkJcmV0dXJuIChXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRSB8IFdF
QktJVF9TT1VQX0NBQ0hFX0lOVkFMSURBVEVTKTsKKworCWRlZmF1bHQ6CisJCS8qIEFueSA1eHgg
c3RhdHVzIG9yIGFueSA0eHggc3RhdHVzIG5vdCBoYW5kbGVkIGFib3ZlCisJCSAqIGlzIHVuY2Fj
aGVhYmxlIGJ1dCBkb2Vzbid0IGJyZWFrIHRoZSBjYWNoZS4KKwkJICovCisJCWlmICgobXNnLT5z
dGF0dXNfY29kZSA+PSBTT1VQX1NUQVRVU19CQURfUkVRVUVTVCAmJgorCQkgICAgIG1zZy0+c3Rh
dHVzX2NvZGUgPD0gU09VUF9TVEFUVVNfRkFJTEVEX0RFUEVOREVOQ1kpIHx8CisJCSAgICBtc2ct
PnN0YXR1c19jb2RlID49IFNPVVBfU1RBVFVTX0lOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCXJl
dHVybiBXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRTsKKworCQkvKiBBbiB1bnJlY29nbml6
ZWQgMnh4LCAzeHgsIG9yIDR4eCByZXNwb25zZSBicmVha3MKKwkJICogdGhlIGNhY2hlLgorCQkg
Ki8KKwkJaWYgKChtc2ctPnN0YXR1c19jb2RlID4gU09VUF9TVEFUVVNfUEFSVElBTF9DT05URU5U
ICYmCisJCSAgICAgbXNnLT5zdGF0dXNfY29kZSA8IFNPVVBfU1RBVFVTX01VTFRJUExFX0NIT0lD
RVMpIHx8CisJCSAgICAobXNnLT5zdGF0dXNfY29kZSA+IFNPVVBfU1RBVFVTX1RFTVBPUkFSWV9S
RURJUkVDVCAmJgorCQkgICAgIG1zZy0+c3RhdHVzX2NvZGUgPCBTT1VQX1NUQVRVU19JTlRFUk5B
TF9TRVJWRVJfRVJST1IpKQorCQkJcmV0dXJuIChXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJM
RSB8IFdFQktJVF9TT1VQX0NBQ0hFX0lOVkFMSURBVEVTKTsKKwkJYnJlYWs7CisJfQorCisJcmV0
dXJuIGNhY2hlYWJpbGl0eTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX2NhY2hlX2Vu
dHJ5X2ZyZWUgKFdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSwgZ2Jvb2xlYW4gcHVyZ2UpCit7
CisJaWYgKHB1cmdlKSB7CisJCUdGaWxlICpmaWxlID0gZ19maWxlX25ld19mb3JfcGF0aCAoZW50
cnktPmZpbGVuYW1lKTsKKwkJZ19maWxlX2RlbGV0ZSAoZmlsZSwgTlVMTCwgTlVMTCk7CisJCWdf
b2JqZWN0X3VucmVmIChmaWxlKTsKKwl9CisKKwlnX2ZyZWUgKGVudHJ5LT5maWxlbmFtZSk7CisJ
ZW50cnktPmZpbGVuYW1lID0gTlVMTDsKKwlnX2ZyZWUgKGVudHJ5LT5rZXkpOworCWVudHJ5LT5r
ZXkgPSBOVUxMOworCisJaWYgKGVudHJ5LT5oZWFkZXJzKSB7CisJCXNvdXBfbWVzc2FnZV9oZWFk
ZXJzX2ZyZWUgKGVudHJ5LT5oZWFkZXJzKTsKKwkJZW50cnktPmhlYWRlcnMgPSBOVUxMOworCX0K
KworCWlmIChlbnRyeS0+ZGF0YSkgeworCQlnX3N0cmluZ19mcmVlIChlbnRyeS0+ZGF0YSwgVFJV
RSk7CisJCWVudHJ5LT5kYXRhID0gTlVMTDsKKwl9CisJaWYgKGVudHJ5LT5lcnJvcikgeworCQln
X2Vycm9yX2ZyZWUgKGVudHJ5LT5lcnJvcik7CisJCWVudHJ5LT5lcnJvciA9IE5VTEw7CisJfQor
CWlmIChlbnRyeS0+Y2FuY2VsbGFibGUpIHsKKwkJZ19vYmplY3RfdW5yZWYgKGVudHJ5LT5jYW5j
ZWxsYWJsZSk7CisJCWVudHJ5LT5jYW5jZWxsYWJsZSA9IE5VTEw7CisJfQorCisJZ19zbGljZV9m
cmVlIChXZWJLaXRTb3VwQ2FjaGVFbnRyeSwgZW50cnkpOworfQorCitzdGF0aWMgdm9pZAorY29w
eV9oZWFkZXJzIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSwgU291cE1lc3Nh
Z2VIZWFkZXJzICpoZWFkZXJzKQoreworCXNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZCAoaGVh
ZGVycywgbmFtZSwgdmFsdWUpOworfQorCitzdGF0aWMgdm9pZAordXBkYXRlX2hlYWRlcnMgKGNv
bnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlLCBTb3VwTWVzc2FnZUhlYWRlcnMgKmhl
YWRlcnMpCit7CisJaWYgKHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldCAoaGVhZGVycywgbmFtZSkp
CisJCXNvdXBfbWVzc2FnZV9oZWFkZXJzX3JlcGxhY2UgKGhlYWRlcnMsIG5hbWUsIHZhbHVlKTsK
KwllbHNlCisJCXNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZCAoaGVhZGVycywgbmFtZSwgdmFs
dWUpOworfQorCitzdGF0aWMgZ3VpbnQKK3dlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2dldF9jdXJy
ZW50X2FnZSAoV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5KQoreworCXRpbWVfdCBub3cgPSB0
aW1lIChOVUxMKTsKKwl0aW1lX3QgcmVzaWRlbnRfdGltZTsKKworCXJlc2lkZW50X3RpbWUgPSBu
b3cgLSBlbnRyeS0+cmVzcG9uc2VfdGltZTsKKwlyZXR1cm4gZW50cnktPmNvcnJlY3RlZF9pbml0
aWFsX2FnZSArIHJlc2lkZW50X3RpbWU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgord2Via2l0X3Nv
dXBfY2FjaGVfZW50cnlfaXNfZnJlc2hfZW5vdWdoIChXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50
cnksIGludCBtaW5fZnJlc2gpCit7CisJdW5zaWduZWQgbGltaXQgPSAobWluX2ZyZXNoID09IC0x
KSA/IHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2dldF9jdXJyZW50X2FnZSAoZW50cnkpIDogbWlu
X2ZyZXNoOworCXJldHVybiBlbnRyeS0+ZnJlc2huZXNzX2xpZmV0aW1lID4gbGltaXQ7Cit9CisK
K3N0YXRpYyBjaGFyICoKK3NvdXBfbWVzc2FnZV9nZXRfY2FjaGVfa2V5IChTb3VwTWVzc2FnZSAq
bXNnKQoreworCVNvdXBVUkkgKnVyaSA9IHNvdXBfbWVzc2FnZV9nZXRfdXJpIChtc2cpOworCXJl
dHVybiBzb3VwX3VyaV90b19zdHJpbmcgKHVyaSwgRkFMU0UpOworfQorCitzdGF0aWMgdm9pZAor
d2Via2l0X3NvdXBfY2FjaGVfZW50cnlfc2V0X2ZyZXNobmVzcyAoV2ViS2l0U291cENhY2hlRW50
cnkgKmVudHJ5LCBTb3VwTWVzc2FnZSAqbXNnLCBXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKQorewor
CWNvbnN0IGNoYXIgKmNhY2hlX2NvbnRyb2w7CisJY29uc3QgY2hhciAqZXhwaXJlcywgKmRhdGUs
ICpsYXN0X21vZGlmaWVkOworCUdIYXNoVGFibGUgKmhhc2g7CisKKwloYXNoID0gTlVMTDsKKwor
CWNhY2hlX2NvbnRyb2wgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKGVudHJ5LT5oZWFkZXJz
LCAiQ2FjaGUtQ29udHJvbCIpOworCWlmIChjYWNoZV9jb250cm9sKSB7CisJCWNvbnN0IGNoYXIg
Km1heF9hZ2UsICpzX21heGFnZTsKKwkJZ2ludDY0IGZyZXNobmVzc19saWZldGltZSA9IDA7CisJ
CVdlYktpdFNvdXBDYWNoZVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9DQUNIRV9HRVRfUFJJ
VkFURSAoY2FjaGUpOworCisJCWhhc2ggPSBzb3VwX2hlYWRlcl9wYXJzZV9wYXJhbV9saXN0IChj
YWNoZV9jb250cm9sKTsKKworCQkvKiBTaG91bGQgd2UgcmUtdmFsaWRhdGUgdGhlIGVudHJ5IHdo
ZW4gaXQgZ29lcyBzdGFsZSAqLworCQllbnRyeS0+bXVzdF9yZXZhbGlkYXRlID0gKGdib29sZWFu
KWdfaGFzaF90YWJsZV9sb29rdXAgKGhhc2gsICJtdXN0LXJldmFsaWRhdGUiKTsKKworCQkvKiBT
ZWN0aW9uIDIuMy4xICovCisJCWlmIChwcml2LT5jYWNoZV90eXBlID09IFdFQktJVF9TT1VQX0NB
Q0hFX1NIQVJFRCkgeworCQkJc19tYXhhZ2UgPSBnX2hhc2hfdGFibGVfbG9va3VwIChoYXNoLCAi
cy1tYXhhZ2UiKTsKKwkJCWlmIChzX21heGFnZSkgeworCQkJCWZyZXNobmVzc19saWZldGltZSA9
IGdfYXNjaWlfc3RydG9sbCAoc19tYXhhZ2UsIE5VTEwsIDEwKTsKKwkJCQlpZiAoZnJlc2huZXNz
X2xpZmV0aW1lKSB7CisJCQkJCS8qIEltcGxpZXMgcHJveHktcmV2YWxpZGF0ZS4gVE9ETzogaXMg
aXQgdHJ1ZT8gKi8KKwkJCQkJZW50cnktPm11c3RfcmV2YWxpZGF0ZSA9IFRSVUU7CisJCQkJCXNv
dXBfaGVhZGVyX2ZyZWVfcGFyYW1fbGlzdCAoaGFzaCk7CisJCQkJCXJldHVybjsKKwkJCQl9CisJ
CQl9CisJCX0KKworCQkvKiBJZiAnbWF4LWFnZScgY2FjaGUgZGlyZWN0aXZlIGlzIHByZXNlbnQs
IHVzZSB0aGF0ICovCisJCW1heF9hZ2UgPSBnX2hhc2hfdGFibGVfbG9va3VwIChoYXNoLCAibWF4
LWFnZSIpOworCQlpZiAobWF4X2FnZSkKKwkJCWZyZXNobmVzc19saWZldGltZSA9IGdfYXNjaWlf
c3RydG9sbCAobWF4X2FnZSwgTlVMTCwgMTApOworCisJCWlmIChmcmVzaG5lc3NfbGlmZXRpbWUp
IHsKKwkJCWVudHJ5LT5mcmVzaG5lc3NfbGlmZXRpbWUgPSAoZ3VpbnQpTUlOIChmcmVzaG5lc3Nf
bGlmZXRpbWUsIEdfTUFYVUlOVDMyKTsKKwkJCXNvdXBfaGVhZGVyX2ZyZWVfcGFyYW1fbGlzdCAo
aGFzaCk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlpZiAoaGFzaCAhPSBOVUxMKQorCQlzb3Vw
X2hlYWRlcl9mcmVlX3BhcmFtX2xpc3QgKGhhc2gpOworCisJLyogSWYgdGhlICdFeHBpcmVzJyBy
ZXNwb25zZSBoZWFkZXIgaXMgcHJlc2VudCwgdXNlIGl0cyB2YWx1ZQorCSAqIG1pbnVzIHRoZSB2
YWx1ZSBvZiB0aGUgJ0RhdGUnIHJlc3BvbnNlIGhlYWRlcgorCSAqLworCWV4cGlyZXMgPSBzb3Vw
X21lc3NhZ2VfaGVhZGVyc19nZXQgKGVudHJ5LT5oZWFkZXJzLCAiRXhwaXJlcyIpOworCWRhdGUg
PSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKGVudHJ5LT5oZWFkZXJzLCAiRGF0ZSIpOworCWlm
IChleHBpcmVzICYmIGRhdGUpIHsKKwkJU291cERhdGUgKmV4cGlyZXNfZCwgKmRhdGVfZDsKKwkJ
dGltZV90IGV4cGlyZXNfdCwgZGF0ZV90OworCisJCWV4cGlyZXNfZCA9IHNvdXBfZGF0ZV9uZXdf
ZnJvbV9zdHJpbmcgKGV4cGlyZXMpOworCQlpZiAoZXhwaXJlc19kKSB7CisJCQlkYXRlX2QgPSBz
b3VwX2RhdGVfbmV3X2Zyb21fc3RyaW5nIChkYXRlKTsKKworCQkJZXhwaXJlc190ID0gc291cF9k
YXRlX3RvX3RpbWVfdCAoZXhwaXJlc19kKTsKKwkJCWRhdGVfdCA9IHNvdXBfZGF0ZV90b190aW1l
X3QgKGRhdGVfZCk7CisKKwkJCXNvdXBfZGF0ZV9mcmVlIChleHBpcmVzX2QpOworCQkJc291cF9k
YXRlX2ZyZWUgKGRhdGVfZCk7CisKKwkJCWlmIChleHBpcmVzX3QgJiYgZGF0ZV90KSB7CisJCQkJ
ZW50cnktPmZyZXNobmVzc19saWZldGltZSA9IChndWludClNQVggKGV4cGlyZXNfdCAtIGRhdGVf
dCwgMCk7CisJCQkJcmV0dXJuOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogSWYgRXhwaXJlcyBp
cyBub3QgYSB2YWxpZCBkYXRlIHdlIHNob3VsZAorCQkJICAgdHJlYXQgaXQgYXMgYWxyZWFkeSBl
eHBpcmVkLCBzZWUgc2VjdGlvbgorCQkJICAgMy4zICovCisJCQllbnRyeS0+ZnJlc2huZXNzX2xp
ZmV0aW1lID0gMDsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qIE90aGVyd2lzZSBhbiBoZXVy
aXN0aWMgbWF5IGJlIHVzZWQgKi8KKworCS8qIEhldXJpc3RpY3MgTVVTVCBOT1QgYmUgdXNlZCB3
aXRoIHRoZXNlIHN0YXR1cyBjb2RlcworCSAgIChzZWN0aW9uIDIuMy4xLjEpICovCisJaWYgKG1z
Zy0+c3RhdHVzX2NvZGUgIT0gU09VUF9TVEFUVVNfT0sgJiYKKwkgICAgbXNnLT5zdGF0dXNfY29k
ZSAhPSBTT1VQX1NUQVRVU19OT05fQVVUSE9SSVRBVElWRSAmJgorCSAgICBtc2ctPnN0YXR1c19j
b2RlICE9IFNPVVBfU1RBVFVTX1BBUlRJQUxfQ09OVEVOVCAmJgorCSAgICBtc2ctPnN0YXR1c19j
b2RlICE9IFNPVVBfU1RBVFVTX01VTFRJUExFX0NIT0lDRVMgJiYKKwkgICAgbXNnLT5zdGF0dXNf
Y29kZSAhPSBTT1VQX1NUQVRVU19NT1ZFRF9QRVJNQU5FTlRMWSAmJgorCSAgICBtc2ctPnN0YXR1
c19jb2RlICE9IFNPVVBfU1RBVFVTX0dPTkUpCisJCWdvdG8gZXhwaXJlOworCisJLyogVE9ETzog
YXR0YWNoIHdhcm5pbmcgMTEzIGlmIHJlc3BvbnNlJ3MgY3VycmVudF9hZ2UgaXMgbW9yZQorCSAg
IHRoYW4gMjRoIChzZWN0aW9uIDIuMy4xLjEpIHdoZW4gdXNpbmcgaGV1cmlzdGljcyAqLworCisJ
LyogTGFzdC1Nb2RpZmllZCBiYXNlZCBoZXVyaXN0aWMgKi8KKwlsYXN0X21vZGlmaWVkID0gc291
cF9tZXNzYWdlX2hlYWRlcnNfZ2V0IChlbnRyeS0+aGVhZGVycywgIkxhc3QtTW9kaWZpZWQiKTsK
KwlpZiAobGFzdF9tb2RpZmllZCkgeworCQlTb3VwRGF0ZSAqc291cF9kYXRlOworCQl0aW1lX3Qg
bm93LCBsYXN0X21vZGlmaWVkX3Q7CisKKwkJc291cF9kYXRlID0gc291cF9kYXRlX25ld19mcm9t
X3N0cmluZyAobGFzdF9tb2RpZmllZCk7CisJCWxhc3RfbW9kaWZpZWRfdCA9IHNvdXBfZGF0ZV90
b190aW1lX3QgKHNvdXBfZGF0ZSk7CisJCW5vdyA9IHRpbWUgKE5VTEwpOworCisjZGVmaW5lIEhF
VVJJU1RJQ19GQUNUT1IgMC4xIC8qIEZyb20gU2VjdGlvbiAyLjMuMS4xICovCisKKwkJZW50cnkt
PmZyZXNobmVzc19saWZldGltZSA9IE1BWCAoMCwgKG5vdyAtIGxhc3RfbW9kaWZpZWRfdCkgKiBI
RVVSSVNUSUNfRkFDVE9SKTsKKwkJc291cF9kYXRlX2ZyZWUgKHNvdXBfZGF0ZSk7CisJfQorCisJ
cmV0dXJuOworCisgZXhwaXJlOgorCS8qIElmIGFsbCBlbHNlIGZhaWxzLCBtYWtlIHRoZSBlbnRy
eSBleHBpcmUgaW1tZWRpYXRlbHkgKi8KKwllbnRyeS0+ZnJlc2huZXNzX2xpZmV0aW1lID0gMDsK
K30KKworc3RhdGljIFdlYktpdFNvdXBDYWNoZUVudHJ5ICoKK3dlYmtpdF9zb3VwX2NhY2hlX2Vu
dHJ5X25ldyAoV2ViS2l0U291cENhY2hlICpjYWNoZSwgU291cE1lc3NhZ2UgKm1zZywgdGltZV90
IHJlcXVlc3RfdGltZSwgdGltZV90IHJlc3BvbnNlX3RpbWUpCit7CisJV2ViS2l0U291cENhY2hl
RW50cnkgKmVudHJ5OworCVNvdXBNZXNzYWdlSGVhZGVycyAqaGVhZGVyczsKKwljb25zdCBjaGFy
ICpkYXRlOworCWNoYXIgKm1kNTsKKworCWVudHJ5ID0gZ19zbGljZV9uZXcwIChXZWJLaXRTb3Vw
Q2FjaGVFbnRyeSk7CisJZW50cnktPmRpcnR5ID0gRkFMU0U7CisJZW50cnktPndyaXRpbmcgPSBG
QUxTRTsKKwllbnRyeS0+Z290X2JvZHkgPSBGQUxTRTsKKwllbnRyeS0+YmVpbmdfdmFsaWRhdGVk
ID0gRkFMU0U7CisJZW50cnktPmRhdGEgPSBnX3N0cmluZ19uZXcgKE5VTEwpOworCWVudHJ5LT5w
b3MgPSAwOworCWVudHJ5LT5lcnJvciA9IE5VTEw7CisKKwkvKiBrZXkgJiBmaWxlbmFtZSAqLwor
CWVudHJ5LT5rZXkgPSBzb3VwX21lc3NhZ2VfZ2V0X2NhY2hlX2tleSAobXNnKTsKKwltZDUgPSBn
X2NvbXB1dGVfY2hlY2tzdW1fZm9yX3N0cmluZyAoR19DSEVDS1NVTV9NRDUsIGVudHJ5LT5rZXks
IC0xKTsKKwllbnRyeS0+ZmlsZW5hbWUgPSBnX2J1aWxkX2ZpbGVuYW1lIChjYWNoZS0+cHJpdi0+
Y2FjaGVfZGlyLCBtZDUsIE5VTEwpOworCWdfZnJlZSAobWQ1KTsKKworCS8qIEhlYWRlcnMgKi8K
KwloZWFkZXJzID0gc291cF9tZXNzYWdlX2hlYWRlcnNfbmV3IChTT1VQX01FU1NBR0VfSEVBREVS
U19SRVNQT05TRSk7CisJc291cF9tZXNzYWdlX2hlYWRlcnNfZm9yZWFjaCAobXNnLT5yZXNwb25z
ZV9oZWFkZXJzLAorCQkJCSAgICAgIChTb3VwTWVzc2FnZUhlYWRlcnNGb3JlYWNoRnVuYyljb3B5
X2hlYWRlcnMsCisJCQkJICAgICAgaGVhZGVycyk7CisJZW50cnktPmhlYWRlcnMgPSBoZWFkZXJz
OworCisJLyogTFJVIGxpc3QgKi8KKwllbnRyeS0+aGl0cyA9IDA7CisKKwkvKiBTZWN0aW9uIDIu
My4xLCBGcmVzaG5lc3MgTGlmZXRpbWUgKi8KKwl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9zZXRf
ZnJlc2huZXNzIChlbnRyeSwgbXNnLCBjYWNoZSk7CisKKwkvKiBTZWN0aW9uIDIuMy4yLCBDYWxj
dWxhdGluZyBBZ2UgKi8KKwlkYXRlID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0IChlbnRyeS0+
aGVhZGVycywgIkRhdGUiKTsKKworCWlmIChkYXRlKSB7CisJCVNvdXBEYXRlICpzb3VwX2RhdGU7
CisJCWNvbnN0IGNoYXIgKmFnZTsKKwkJdGltZV90IGRhdGVfdmFsdWUsIGFwcGFyZW50X2FnZSwg
Y29ycmVjdGVkX3JlY2VpdmVkX2FnZSwgcmVzcG9uc2VfZGVsYXksIGFnZV92YWx1ZSA9IDA7CisK
KwkJc291cF9kYXRlID0gc291cF9kYXRlX25ld19mcm9tX3N0cmluZyAoZGF0ZSk7CisJCWRhdGVf
dmFsdWUgPSBzb3VwX2RhdGVfdG9fdGltZV90IChzb3VwX2RhdGUpOworCQlzb3VwX2RhdGVfZnJl
ZSAoc291cF9kYXRlKTsKKworCQlhZ2UgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKGVudHJ5
LT5oZWFkZXJzLCAiQWdlIik7CisJCWlmIChhZ2UpCisJCQlhZ2VfdmFsdWUgPSBnX2FzY2lpX3N0
cnRvbGwgKGFnZSwgTlVMTCwgMTApOworCisJCWVudHJ5LT5yZXNwb25zZV90aW1lID0gcmVzcG9u
c2VfdGltZTsKKwkJYXBwYXJlbnRfYWdlID0gTUFYICgwLCBlbnRyeS0+cmVzcG9uc2VfdGltZSAt
IGRhdGVfdmFsdWUpOworCQljb3JyZWN0ZWRfcmVjZWl2ZWRfYWdlID0gTUFYIChhcHBhcmVudF9h
Z2UsIGFnZV92YWx1ZSk7CisJCXJlc3BvbnNlX2RlbGF5ID0gZW50cnktPnJlc3BvbnNlX3RpbWUg
LSByZXF1ZXN0X3RpbWU7CisJCWVudHJ5LT5jb3JyZWN0ZWRfaW5pdGlhbF9hZ2UgPSBjb3JyZWN0
ZWRfcmVjZWl2ZWRfYWdlICsgcmVzcG9uc2VfZGVsYXk7CisJfSBlbHNlIHsKKwkJLyogSXMgdGhp
cyBjb3JyZWN0ID8gKi8KKwkJZW50cnktPmNvcnJlY3RlZF9pbml0aWFsX2FnZSA9IHRpbWUgKE5V
TEwpOworCX0KKworCXJldHVybiBlbnRyeTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3Vw
X2NhY2hlX3dyaXRpbmdfZml4dHVyZV9mcmVlIChXZWJLaXRTb3VwQ2FjaGVXcml0aW5nRml4dHVy
ZSAqZml4dHVyZSkKK3sKKwkvKiBGcmVlIGZpeHR1cmUuIEFuZCBkaXNjb25uZWN0IHNpZ25hbHMs
IHdlIGRvbid0IHdhbnQgdG8KKwkgICBsaXN0ZW4gdG8gbW9yZSBTb3VwTWVzc2FnZSBldmVudHMg
YXMgd2UncmUgZmluaXNoZWQgd2l0aAorCSAgIHRoaXMgcmVzb3VyY2UgKi8KKwlpZiAoZ19zaWdu
YWxfaGFuZGxlcl9pc19jb25uZWN0ZWQgKGZpeHR1cmUtPm1zZywgZml4dHVyZS0+Z290X2NodW5r
X2hhbmRsZXIpKQorCQlnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QgKGZpeHR1cmUtPm1zZywg
Zml4dHVyZS0+Z290X2NodW5rX2hhbmRsZXIpOworCWlmIChnX3NpZ25hbF9oYW5kbGVyX2lzX2Nv
bm5lY3RlZCAoZml4dHVyZS0+bXNnLCBmaXh0dXJlLT5nb3RfYm9keV9oYW5kbGVyKSkKKwkJZ19z
aWduYWxfaGFuZGxlcl9kaXNjb25uZWN0IChmaXh0dXJlLT5tc2csIGZpeHR1cmUtPmdvdF9ib2R5
X2hhbmRsZXIpOworCWlmIChnX3NpZ25hbF9oYW5kbGVyX2lzX2Nvbm5lY3RlZCAoZml4dHVyZS0+
bXNnLCBmaXh0dXJlLT5yZXN0YXJ0ZWRfaGFuZGxlcikpCisJCWdfc2lnbmFsX2hhbmRsZXJfZGlz
Y29ubmVjdCAoZml4dHVyZS0+bXNnLCBmaXh0dXJlLT5yZXN0YXJ0ZWRfaGFuZGxlcik7CisJZ19v
YmplY3RfdW5yZWYgKGZpeHR1cmUtPm1zZyk7CisJZ19vYmplY3RfdW5yZWYgKGZpeHR1cmUtPmNh
Y2hlKTsKKwlnX3NsaWNlX2ZyZWUgKFdlYktpdFNvdXBDYWNoZVdyaXRpbmdGaXh0dXJlLCBmaXh0
dXJlKTsKK30KKworc3RhdGljIHZvaWQKK2Nsb3NlX3JlYWR5X2NiIChHT2JqZWN0ICpzb3VyY2Us
IEdBc3luY1Jlc3VsdCAqcmVzdWx0LCBXZWJLaXRTb3VwQ2FjaGVXcml0aW5nRml4dHVyZSAqZml4
dHVyZSkKK3sKKwlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkgPSBmaXh0dXJlLT5lbnRyeTsK
KwlXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlID0gZml4dHVyZS0+Y2FjaGU7CisJR091dHB1dFN0cmVh
bSAqc3RyZWFtID0gR19PVVRQVVRfU1RSRUFNIChzb3VyY2UpOworCWdvZmZzZXQgY29udGVudF9s
ZW5ndGg7CisKKwlnX3dhcm5faWZfZmFpbCAoZW50cnktPmVycm9yID09IE5VTEwpOworCisJLyog
RklYTUU6IHdoYXQgZG8gd2UgZG8gb24gZXJyb3IgPyAqLworCisJaWYgKHN0cmVhbSkgeworCQln
X291dHB1dF9zdHJlYW1fY2xvc2VfZmluaXNoIChzdHJlYW0sIHJlc3VsdCwgTlVMTCk7CisJCWdf
b2JqZWN0X3VucmVmIChzdHJlYW0pOworCX0KKwllbnRyeS0+c3RyZWFtID0gTlVMTDsKKworCWNv
bnRlbnRfbGVuZ3RoID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2NvbnRlbnRfbGVuZ3RoIChl
bnRyeS0+aGVhZGVycyk7CisKKwkvKiBJZiB0aGUgcHJvY2VzcyB3YXMgY2FuY2VsbGVkLCB0aGVu
IGRlbGV0ZSB0aGUgZW50cnkgZnJvbQorCSAgIHRoZSBjYWNoZS4gRG8gaXQgYWxzbyBpZiB0aGUg
c2l6ZSBvZiBhIGNodW5rZWQgcmVzb3VyY2UgaXMKKwkgICB0b28gbXVjaCBmb3IgdGhlIGNhY2hl
ICovCisJaWYgKGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkIChlbnRyeS0+Y2FuY2VsbGFibGUp
KSB7CisJCWVudHJ5LT5kaXJ0eSA9IEZBTFNFOworCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9y
ZW1vdmUgKGNhY2hlLCBlbnRyeSk7CisJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUgKGVu
dHJ5LCBUUlVFKTsKKwkJZW50cnkgPSBOVUxMOworCX0gZWxzZSBpZiAoKHNvdXBfbWVzc2FnZV9o
ZWFkZXJzX2dldF9lbmNvZGluZyAoZW50cnktPmhlYWRlcnMpID09IFNPVVBfRU5DT0RJTkdfQ0hV
TktFRCkgfHwKKwkJICAgZW50cnktPmxlbmd0aCAhPSBjb250ZW50X2xlbmd0aCkgeworCQkvKiog
VHdvIG9wdGlvbnMgaGVyZToKKwkJICoKKwkJICogMS4gImNodW5rZWQiIGRhdGEsIGVudHJ5IHdh
cyB0ZW1wb3JhcmlseSBhZGRlZCB0bworCQkgKiBjYWNoZSAoYXMgY29udGVudC1sZW5ndGggaXMg
MCkgYW5kIG5vdyB0aGF0IHdlIGhhdmUKKwkJICogdGhlIGFjdHVhbCBzaXplIHdlIGhhdmUgdG8g
ZXZhbHVhdGUgaWYgd2Ugd2FudCBpdAorCQkgKiBpbiB0aGUgY2FjaGUgb3Igbm90CisJCSAqCisJ
CSAqIDIuIENvbnRlbnQtTGVuZ3RoIGhhcyBhIGRpZmZlcmVudCB2YWx1ZSB0aGFuIGFjdHVhbAor
CQkgKiBsZW5ndGgsIG1lYW5zIHRoYXQgdGhlIGNvbnRlbnQgd2FzIGVuY29kZWQgZm9yCisJCSAq
IHRyYW5zbWlzc2lvbiAodHlwaWNhbGx5IGNvbXByZXNzZWQpIGFuZCB0aHVzIHdlCisJCSAqIGhh
dmUgdG8gc3Vic3RyYWN0IHRoZSBjb250ZW50LWxlbmd0aCB2YWx1ZSB0aGF0IHdhcworCQkgKiBh
ZGRlZCB0byB0aGUgY2FjaGUgYW5kIGFkZCB0aGUgdW5lbmNvZGVkIGxlbmd0aAorCQkgKiovCisJ
CWdpbnQgbGVuZ3RoX3RvX2FkZCA9IGVudHJ5LT5sZW5ndGggLSBjb250ZW50X2xlbmd0aDsKKwor
CQkvKiBNYWtlIHJvb20gaW4gY2FjaGUgaWYgbmVlZGVkICovCisJCWlmIChjYWNoZV9hY2NlcHRz
X2VudHJpZXNfb2Zfc2l6ZSAoY2FjaGUsIGxlbmd0aF90b19hZGQpKSB7CisJCQltYWtlX3Jvb21f
Zm9yX25ld19lbnRyeSAoY2FjaGUsIGxlbmd0aF90b19hZGQpOworCisJCQljYWNoZS0+cHJpdi0+
c2l6ZSArPSBsZW5ndGhfdG9fYWRkOworCQl9IGVsc2UgeworCQkJZW50cnktPmRpcnR5ID0gRkFM
U0U7CisJCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9yZW1vdmUgKGNhY2hlLCBlbnRyeSk7CisJ
CQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9mcmVlIChlbnRyeSwgVFJVRSk7CisJCQllbnRyeSA9
IE5VTEw7CisJCX0KKwl9CisKKwlpZiAoZW50cnkpIHsKKwkJLyogR2V0IHJpZCBvZiB0aGUgR1N0
cmluZyBpbiBtZW1vcnkgZm9yIHRoZSByZXNvdXJjZSBub3cgKi8KKwkJaWYgKGVudHJ5LT5kYXRh
KSB7CisJCQlnX3N0cmluZ19mcmVlIChlbnRyeS0+ZGF0YSwgVFJVRSk7CisJCQllbnRyeS0+ZGF0
YSA9IE5VTEw7CisJCX0KKworCQllbnRyeS0+ZGlydHkgPSBGQUxTRTsKKwkJZW50cnktPndyaXRp
bmcgPSBGQUxTRTsKKwkJZW50cnktPmdvdF9ib2R5ID0gRkFMU0U7CisJCWVudHJ5LT5wb3MgPSAw
OworCisJCWdfb2JqZWN0X3VucmVmIChlbnRyeS0+Y2FuY2VsbGFibGUpOworCQllbnRyeS0+Y2Fu
Y2VsbGFibGUgPSBOVUxMOworCX0KKworCWNhY2hlLT5wcml2LT5uX3BlbmRpbmctLTsKKworCS8q
IEZyZWVzICovCisJd2Via2l0X3NvdXBfY2FjaGVfd3JpdGluZ19maXh0dXJlX2ZyZWUgKGZpeHR1
cmUpOworfQorCitzdGF0aWMgdm9pZAord3JpdGVfcmVhZHlfY2IgKEdPYmplY3QgKnNvdXJjZSwg
R0FzeW5jUmVzdWx0ICpyZXN1bHQsIFdlYktpdFNvdXBDYWNoZVdyaXRpbmdGaXh0dXJlICpmaXh0
dXJlKQoreworCUdPdXRwdXRTdHJlYW0gKnN0cmVhbSA9IEdfT1VUUFVUX1NUUkVBTSAoc291cmNl
KTsKKwlHRXJyb3IgKmVycm9yID0gTlVMTDsKKwlnc3NpemUgd3JpdGVfc2l6ZTsKKwlXZWJLaXRT
b3VwQ2FjaGVFbnRyeSAqZW50cnkgPSBmaXh0dXJlLT5lbnRyeTsKKworCWlmIChnX2NhbmNlbGxh
YmxlX2lzX2NhbmNlbGxlZCAoZW50cnktPmNhbmNlbGxhYmxlKSkgeworCQlnX291dHB1dF9zdHJl
YW1fY2xvc2VfYXN5bmMgKHN0cmVhbSwKKwkJCQkJICAgICBHX1BSSU9SSVRZX0xPVywKKwkJCQkJ
ICAgICBlbnRyeS0+Y2FuY2VsbGFibGUsCisJCQkJCSAgICAgKEdBc3luY1JlYWR5Q2FsbGJhY2sp
Y2xvc2VfcmVhZHlfY2IsCisJCQkJCSAgICAgZml4dHVyZSk7CisJCXJldHVybjsKKwl9CisKKwl3
cml0ZV9zaXplID0gZ19vdXRwdXRfc3RyZWFtX3dyaXRlX2ZpbmlzaCAoc3RyZWFtLCByZXN1bHQs
ICZlcnJvcik7CisJaWYgKHdyaXRlX3NpemUgPD0gMCB8fCBlcnJvcikgeworCQlpZiAoZXJyb3Ip
CisJCQllbnRyeS0+ZXJyb3IgPSBlcnJvcjsKKwkJZ19vdXRwdXRfc3RyZWFtX2Nsb3NlX2FzeW5j
IChzdHJlYW0sCisJCQkJCSAgICAgR19QUklPUklUWV9MT1csCisJCQkJCSAgICAgZW50cnktPmNh
bmNlbGxhYmxlLAorCQkJCQkgICAgIChHQXN5bmNSZWFkeUNhbGxiYWNrKWNsb3NlX3JlYWR5X2Ni
LAorCQkJCQkgICAgIGZpeHR1cmUpOworCQkvKiBGSVhNRTogV2Ugc2hvdWxkIGNvbXBsZXRlbHkg
c3RvcCBjYWNoaW5nIHRoZQorCQkgICByZXNvdXJjZSBhdCB0aGlzIHBvaW50ICovCisJfSBlbHNl
IHsKKwkJZW50cnktPnBvcyArPSB3cml0ZV9zaXplOworCisJCS8qIEFyZSB3ZSBzdGlsbCB3cml0
aW5nIGFuZCBpcyB0aGVyZSBuZXcgZGF0YSB0byB3cml0ZQorCQkgICBhbHJlYWR5ID8gKi8KKwkJ
aWYgKGVudHJ5LT5kYXRhICYmIGVudHJ5LT5wb3MgPCBlbnRyeS0+ZGF0YS0+bGVuKSB7CisJCQln
X291dHB1dF9zdHJlYW1fd3JpdGVfYXN5bmMgKGVudHJ5LT5zdHJlYW0sCisJCQkJCQkgICAgIGVu
dHJ5LT5kYXRhLT5zdHIgKyBlbnRyeS0+cG9zLAorCQkJCQkJICAgICBlbnRyeS0+ZGF0YS0+bGVu
IC0gZW50cnktPnBvcywKKwkJCQkJCSAgICAgR19QUklPUklUWV9MT1csCisJCQkJCQkgICAgIGVu
dHJ5LT5jYW5jZWxsYWJsZSwKKwkJCQkJCSAgICAgKEdBc3luY1JlYWR5Q2FsbGJhY2spd3JpdGVf
cmVhZHlfY2IsCisJCQkJCQkgICAgIGZpeHR1cmUpOworCQl9IGVsc2UgeworCQkJZW50cnktPndy
aXRpbmcgPSBGQUxTRTsKKworCQkJaWYgKGVudHJ5LT5nb3RfYm9keSkgeworCQkJCS8qIElmIHdl
IGFscmVhZHkgcmVjZWl2ZWQgJ2dvdC1ib2R5JworCQkJCSAgIGFuZCB3ZSBoYXZlIHdyaXR0ZW4g
YWxsIHRoZSBkYXRhLAorCQkJCSAgIHdlIGNhbiBjbG9zZSB0aGUgc3RyZWFtICovCisJCQkJZ19v
dXRwdXRfc3RyZWFtX2Nsb3NlX2FzeW5jIChlbnRyeS0+c3RyZWFtLAorCQkJCQkJCSAgICAgR19Q
UklPUklUWV9MT1csCisJCQkJCQkJICAgICBlbnRyeS0+Y2FuY2VsbGFibGUsCisJCQkJCQkJICAg
ICAoR0FzeW5jUmVhZHlDYWxsYmFjayljbG9zZV9yZWFkeV9jYiwKKwkJCQkJCQkgICAgIGZpeHR1
cmUpOworCQkJfQorCQl9CisJfQorfQorCitzdGF0aWMgdm9pZAorbXNnX2dvdF9jaHVua19jYiAo
U291cE1lc3NhZ2UgKm1zZywgU291cEJ1ZmZlciAqY2h1bmssIFdlYktpdFNvdXBDYWNoZVdyaXRp
bmdGaXh0dXJlICpmaXh0dXJlKQoreworCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSA9IGZp
eHR1cmUtPmVudHJ5OworCisJZ19yZXR1cm5faWZfZmFpbCAoY2h1bmstPmRhdGEgJiYgY2h1bmst
Pmxlbmd0aCk7CisJZ19yZXR1cm5faWZfZmFpbCAoZW50cnkpOworCisJLyogSWdub3JlIHRoaXMg
aWYgdGhlIHdyaXRpbmcgb3IgYXBwZW5kaW5nIHdhcyBjYW5jZWxsZWQgKi8KKwlpZiAoIWdfY2Fu
Y2VsbGFibGVfaXNfY2FuY2VsbGVkIChlbnRyeS0+Y2FuY2VsbGFibGUpKSB7CisJCWdfc3RyaW5n
X2FwcGVuZF9sZW4gKGVudHJ5LT5kYXRhLCBjaHVuay0+ZGF0YSwgY2h1bmstPmxlbmd0aCk7CisJ
CWVudHJ5LT5sZW5ndGggPSBlbnRyeS0+ZGF0YS0+bGVuOworCisJCWlmICghY2FjaGVfYWNjZXB0
c19lbnRyaWVzX29mX3NpemUgKGZpeHR1cmUtPmNhY2hlLCBlbnRyeS0+bGVuZ3RoKSkgeworCQkJ
LyogUXVpY2tseSBjYW5jZWwgdGhlIGNhY2hpbmcgb2YgdGhlIHJlc291cmNlICovCisJCQlnX2Nh
bmNlbGxhYmxlX2NhbmNlbCAoZW50cnktPmNhbmNlbGxhYmxlKTsKKwkJfQorCX0KKworCS8qIEZJ
WE1FOiByZW1vdmUgdGhlIGVycm9yIGNoZWNrIHdoZW4gd2UgY2FuY2VsIHRoZSBjYWNoaW5nIGF0
CisJICAgdGhlIGZpcnN0IHdyaXRlIGVycm9yICovCisJLyogT25seSB3cml0ZSBpZiB0aGUgZW50
cnkgc3RyZWFtIGlzIHJlYWR5ICovCisJaWYgKGVudHJ5LT53cml0aW5nID09IEZBTFNFICYmIGVu
dHJ5LT5lcnJvciA9PSBOVUxMICYmIGVudHJ5LT5zdHJlYW0pIHsKKwkJR1N0cmluZyAqZGF0YSA9
IGVudHJ5LT5kYXRhOworCQllbnRyeS0+d3JpdGluZyA9IFRSVUU7CisJCWdfb3V0cHV0X3N0cmVh
bV93cml0ZV9hc3luYyAoZW50cnktPnN0cmVhbSwKKwkJCQkJICAgICBkYXRhLT5zdHIgKyBlbnRy
eS0+cG9zLAorCQkJCQkgICAgIGRhdGEtPmxlbiAtIGVudHJ5LT5wb3MsCisJCQkJCSAgICAgR19Q
UklPUklUWV9MT1csCisJCQkJCSAgICAgZW50cnktPmNhbmNlbGxhYmxlLAorCQkJCQkgICAgIChH
QXN5bmNSZWFkeUNhbGxiYWNrKXdyaXRlX3JlYWR5X2NiLAorCQkJCQkgICAgIGZpeHR1cmUpOwor
CX0KK30KKworc3RhdGljIHZvaWQKK21zZ19nb3RfYm9keV9jYiAoU291cE1lc3NhZ2UgKm1zZywg
V2ViS2l0U291cENhY2hlV3JpdGluZ0ZpeHR1cmUgKmZpeHR1cmUpCit7CisJV2ViS2l0U291cENh
Y2hlRW50cnkgKmVudHJ5ID0gZml4dHVyZS0+ZW50cnk7CisJZ19yZXR1cm5faWZfZmFpbCAoZW50
cnkpOworCisJZW50cnktPmdvdF9ib2R5ID0gVFJVRTsKKworCWlmICghZW50cnktPnN0cmVhbSAm
JiBlbnRyeS0+cG9zICE9IGVudHJ5LT5sZW5ndGgpCisJCS8qIFRoZSBzdHJlYW0gaXMgbm90IHJl
YWR5IHRvIGJlIHdyaXR0ZW4gYnV0IHdlIHN0aWxsCisJCSAgIGhhdmUgZGF0YSB0byB3cml0ZSwg
d2UnbGwgd3JpdGUgaXQgd2hlbiB0aGUgc3RyZWFtCisJCSAgIGlzIG9wZW5lZCBmb3Igd3JpdGlu
ZyAqLworCQlyZXR1cm47CisKKworCWlmIChlbnRyeS0+cG9zICE9IGVudHJ5LT5sZW5ndGgpIHsK
KwkJLyogSWYgd2Ugc3RpbGwgaGF2ZSBkYXRhIHRvIHdyaXRlLCB3cml0ZSBpdCwKKwkJICAgd3Jp
dGVfcmVhZHlfY2Igd2lsbCBjbG9zZSB0aGUgc3RyZWFtICovCisJCWlmIChlbnRyeS0+d3JpdGlu
ZyA9PSBGQUxTRSAmJiBlbnRyeS0+ZXJyb3IgPT0gTlVMTCAmJiBlbnRyeS0+c3RyZWFtKSB7CisJ
CQlnX291dHB1dF9zdHJlYW1fd3JpdGVfYXN5bmMgKGVudHJ5LT5zdHJlYW0sCisJCQkJCQkgICAg
IGVudHJ5LT5kYXRhLT5zdHIgKyBlbnRyeS0+cG9zLAorCQkJCQkJICAgICBlbnRyeS0+ZGF0YS0+
bGVuIC0gZW50cnktPnBvcywKKwkJCQkJCSAgICAgR19QUklPUklUWV9MT1csCisJCQkJCQkgICAg
IGVudHJ5LT5jYW5jZWxsYWJsZSwKKwkJCQkJCSAgICAgKEdBc3luY1JlYWR5Q2FsbGJhY2spd3Jp
dGVfcmVhZHlfY2IsCisJCQkJCQkgICAgIGZpeHR1cmUpOworCQl9CisJCXJldHVybjsKKwl9CisK
KwlpZiAoZW50cnktPnN0cmVhbSAmJiAhZW50cnktPndyaXRpbmcpCisJCWdfb3V0cHV0X3N0cmVh
bV9jbG9zZV9hc3luYyAoZW50cnktPnN0cmVhbSwKKwkJCQkJICAgICBHX1BSSU9SSVRZX0xPVywK
KwkJCQkJICAgICBlbnRyeS0+Y2FuY2VsbGFibGUsCisJCQkJCSAgICAgKEdBc3luY1JlYWR5Q2Fs
bGJhY2spY2xvc2VfcmVhZHlfY2IsCisJCQkJCSAgICAgZml4dHVyZSk7Cit9CisKK3N0YXRpYyBn
Ym9vbGVhbgord2Via2l0X3NvdXBfY2FjaGVfZW50cnlfcmVtb3ZlIChXZWJLaXRTb3VwQ2FjaGUg
KmNhY2hlLCBXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkpCit7CisJR0xpc3QgKmxydV9pdGVt
OworCisJLyogaWYgKGVudHJ5LT5kaXJ0eSAmJiAhZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQg
KGVudHJ5LT5jYW5jZWxsYWJsZSkpIHsgKi8KKwlpZiAoZW50cnktPmRpcnR5KSB7CisJCWdfY2Fu
Y2VsbGFibGVfY2FuY2VsIChlbnRyeS0+Y2FuY2VsbGFibGUpOworCQlyZXR1cm4gRkFMU0U7CisJ
fQorCisJZ19hc3NlcnQgKGdfbGlzdF9sZW5ndGggKGNhY2hlLT5wcml2LT5scnVfc3RhcnQpID09
IGdfaGFzaF90YWJsZV9zaXplIChjYWNoZS0+cHJpdi0+Y2FjaGUpKTsKKworCS8qIFJlbW92ZSBm
cm9tIGNhY2hlICovCisJaWYgKCFnX2hhc2hfdGFibGVfcmVtb3ZlIChjYWNoZS0+cHJpdi0+Y2Fj
aGUsIGVudHJ5LT5rZXkpKQorCQlyZXR1cm4gRkFMU0U7CisKKwkvKiBSZW1vdmUgZnJvbSBMUlUg
Ki8KKwlscnVfaXRlbSA9IGdfbGlzdF9maW5kIChjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0LCBlbnRy
eSk7CisJY2FjaGUtPnByaXYtPmxydV9zdGFydCA9IGdfbGlzdF9kZWxldGVfbGluayAoY2FjaGUt
PnByaXYtPmxydV9zdGFydCwgbHJ1X2l0ZW0pOworCisJLyogQWRqdXN0IGNhY2hlIHNpemUgKi8K
KwljYWNoZS0+cHJpdi0+c2l6ZSAtPSBlbnRyeS0+bGVuZ3RoOworCisJZ19hc3NlcnQgKGdfbGlz
dF9sZW5ndGggKGNhY2hlLT5wcml2LT5scnVfc3RhcnQpID09IGdfaGFzaF90YWJsZV9zaXplIChj
YWNoZS0+cHJpdi0+Y2FjaGUpKTsKKworCXJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2ludAor
bHJ1X2NvbXBhcmVfZnVuYyAoZ2NvbnN0cG9pbnRlciBhLCBnY29uc3Rwb2ludGVyIGIpCit7CisJ
V2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5X2EgPSAoV2ViS2l0U291cENhY2hlRW50cnkgKilh
OworCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeV9iID0gKFdlYktpdFNvdXBDYWNoZUVudHJ5
ICopYjsKKworCS8qKiBUaGUgcmF0aW9uYWxlIG9mIHRoaXMgc29ydGluZyBmdW5jIGlzCisJICoK
KwkgKiAxLiBzb3J0IGJ5IGhpdHMgLT4gTFJVIGFsZ29yaXRobSwgdGhlbgorCSAqCisJICogMi4g
c29ydCBieSBmcmVzaG5lc3MgbGlmZXRpbWUsIHdlIGJldHRlciBkaXNjYXJkIGZpcnN0CisJICog
ZW50cmllcyB0aGF0IGFyZSBjbG9zZSB0byBleHBpcmUKKwkgKgorCSAqIDMuIHNvcnQgYnkgc2l6
ZSwgcmVwbGFjZSBmaXJzdCBzbWFsbCBzaXplIHJlc291cmNlcyBhcyB0aGV5CisJICogYXJlIGNo
ZWFwZXIgdG8gZG93bmxvYWQKKwkgKiovCisKKwkvKiBTb3J0IGJ5IGhpdHMgKi8KKwlpZiAoZW50
cnlfYS0+aGl0cyAhPSBlbnRyeV9iLT5oaXRzKQorCQlyZXR1cm4gZW50cnlfYS0+aGl0cyAtIGVu
dHJ5X2ItPmhpdHM7CisKKwkvKiBTb3J0IGJ5IGZyZXNobmVzc19saWZldGltZSAqLworCWlmIChl
bnRyeV9hLT5mcmVzaG5lc3NfbGlmZXRpbWUgIT0gZW50cnlfYi0+ZnJlc2huZXNzX2xpZmV0aW1l
KQorCQlyZXR1cm4gZW50cnlfYS0+ZnJlc2huZXNzX2xpZmV0aW1lIC0gZW50cnlfYi0+ZnJlc2hu
ZXNzX2xpZmV0aW1lOworCisJLyogU29ydCBieSBzaXplICovCisJcmV0dXJuIGVudHJ5X2EtPmxl
bmd0aCAtIGVudHJ5X2ItPmxlbmd0aDsKK30KKworc3RhdGljIGdib29sZWFuCitjYWNoZV9hY2Nl
cHRzX2VudHJpZXNfb2Zfc2l6ZSAoV2ViS2l0U291cENhY2hlICpjYWNoZSwgZ3VpbnQgbGVuZ3Ro
X3RvX2FkZCkKK3sKKwkvKiBXZSBjb3VsZCBhZGQgaGVyZSBzb21lIG1vcmUgaGV1cmlzdGljcy4g
VE9ETzogcmV2aWV3IGhvdworCSAgIHRoaXMgaXMgZG9uZSBieSBvdGhlciBIVFRQIGNhY2hlcyAq
LworCisJcmV0dXJuIGxlbmd0aF90b19hZGQgPD0gY2FjaGUtPnByaXYtPm1heF9lbnRyeV9kYXRh
X3NpemU7Cit9CisKK3N0YXRpYyB2b2lkCittYWtlX3Jvb21fZm9yX25ld19lbnRyeSAoV2ViS2l0
U291cENhY2hlICpjYWNoZSwgZ3VpbnQgbGVuZ3RoX3RvX2FkZCkKK3sKKwlHTGlzdCAqbHJ1X2Vu
dHJ5ID0gY2FjaGUtPnByaXYtPmxydV9zdGFydDsKKworCS8qIENoZWNrIHRoYXQgdGhlcmUgaXMg
ZW5vdWdoIHJvb20gZm9yIHRoZSBuZXcgZW50cnkuIFRoaXMgaXMKKwkgICBhbiBhcHByb3hpbWF0
aW9uIGFzIHdlJ3JlIG5vdCB3b3JraW5nIG91dCB0aGUgc2l6ZSBvZiB0aGUKKwkgICBjYWNoZSBm
aWxlIG9yIHRoZSBzaXplIG9mIHRoZSBoZWFkZXJzIGZvciBwZXJmb3JtYW5jZQorCSAgIHJlYXNv
bnMuIFRPRE86IGNoZWNrIGlmIHRoYXQgd291bGQgYmUgcmVhbGx5IHRoYXQgZXhwZW5zaXZlICov
CisKKwl3aGlsZSAobHJ1X2VudHJ5ICYmCisJICAgICAgIChsZW5ndGhfdG9fYWRkICsgY2FjaGUt
PnByaXYtPnNpemUgPiBjYWNoZS0+cHJpdi0+bWF4X3NpemUpKSB7CisJCVdlYktpdFNvdXBDYWNo
ZUVudHJ5ICpvbGRfZW50cnkgPSAoV2ViS2l0U291cENhY2hlRW50cnkgKilscnVfZW50cnktPmRh
dGE7CisKKwkJLyogRGlzY2FyZCBlbnRyaWVzLiBPbmNlIGNhbmNlbGxlZCByZXNvdXJjZXMgd2ls
bCBiZQorCQkgKiBmcmVlZCBpbiBjbG9zZV9yZWFkeV9jYgorCQkgKi8KKwkJaWYgKHdlYmtpdF9z
b3VwX2NhY2hlX2VudHJ5X3JlbW92ZSAoY2FjaGUsIG9sZF9lbnRyeSkpIHsKKwkJCXdlYmtpdF9z
b3VwX2NhY2hlX2VudHJ5X2ZyZWUgKG9sZF9lbnRyeSwgVFJVRSk7CisJCQlscnVfZW50cnkgPSBj
YWNoZS0+cHJpdi0+bHJ1X3N0YXJ0OworCQl9IGVsc2UKKwkJCWxydV9lbnRyeSA9IGdfbGlzdF9u
ZXh0IChscnVfZW50cnkpOworCX0KK30KKworc3RhdGljIGdib29sZWFuCit3ZWJraXRfc291cF9j
YWNoZV9lbnRyeV9pbnNlcnRfYnlfa2V5IChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLAorCQkJCSAg
ICAgICBjb25zdCBjaGFyICprZXksCisJCQkJICAgICAgIFdlYktpdFNvdXBDYWNoZUVudHJ5ICpl
bnRyeSwKKwkJCQkgICAgICAgZ2Jvb2xlYW4gc29ydCkKK3sKKwlndWludCBsZW5ndGhfdG9fYWRk
ID0gMDsKKworCWlmIChzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfZW5jb2RpbmcgKGVudHJ5LT5o
ZWFkZXJzKSAhPSBTT1VQX0VOQ09ESU5HX0NIVU5LRUQpCisJCWxlbmd0aF90b19hZGQgPSBzb3Vw
X21lc3NhZ2VfaGVhZGVyc19nZXRfY29udGVudF9sZW5ndGggKGVudHJ5LT5oZWFkZXJzKTsKKwor
CS8qIENoZWNrIGlmIHdlIGFyZSBnb2luZyB0byBzdG9yZSB0aGUgcmVzb3VyY2UgZGVwZW5kaW5n
IG9uIGl0cyBzaXplICovCisJaWYgKGxlbmd0aF90b19hZGQpIHsKKwkJaWYgKCFjYWNoZV9hY2Nl
cHRzX2VudHJpZXNfb2Zfc2l6ZSAoY2FjaGUsIGxlbmd0aF90b19hZGQpKQorCQkJcmV0dXJuIEZB
TFNFOworCisJCS8qIE1ha2Ugcm9vbSBmb3IgbmV3IGVudHJ5IGlmIG5lZWRlZCAqLworCQltYWtl
X3Jvb21fZm9yX25ld19lbnRyeSAoY2FjaGUsIGxlbmd0aF90b19hZGQpOworCX0KKworCWdfaGFz
aF90YWJsZV9pbnNlcnQgKGNhY2hlLT5wcml2LT5jYWNoZSwgZ19zdHJkdXAgKGtleSksIGVudHJ5
KTsKKworCS8qIENvbXB1dGUgbmV3IGNhY2hlIHNpemUgKi8KKwljYWNoZS0+cHJpdi0+c2l6ZSAr
PSBsZW5ndGhfdG9fYWRkOworCisJLyogVXBkYXRlIExSVSAqLworCWlmIChzb3J0KQorCQljYWNo
ZS0+cHJpdi0+bHJ1X3N0YXJ0ID0gZ19saXN0X2luc2VydF9zb3J0ZWQgKGNhY2hlLT5wcml2LT5s
cnVfc3RhcnQsIGVudHJ5LCBscnVfY29tcGFyZV9mdW5jKTsKKwllbHNlCisJCWNhY2hlLT5wcml2
LT5scnVfc3RhcnQgPSBnX2xpc3RfcHJlcGVuZCAoY2FjaGUtPnByaXYtPmxydV9zdGFydCwgZW50
cnkpOworCisJZ19hc3NlcnQgKGdfbGlzdF9sZW5ndGggKGNhY2hlLT5wcml2LT5scnVfc3RhcnQp
ID09IGdfaGFzaF90YWJsZV9zaXplIChjYWNoZS0+cHJpdi0+Y2FjaGUpKTsKKworCXJldHVybiBU
UlVFOworfQorCitzdGF0aWMgdm9pZAorbXNnX3Jlc3RhcnRlZF9jYiAoU291cE1lc3NhZ2UgKm1z
ZywgV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5KQoreworCS8qIEZJWE1FOiBXaGF0IHNob3Vs
ZCB3ZSBkbyBoZXJlIGV4YWN0bHk/ICovCit9CisKK3N0YXRpYyB2b2lkCithcHBlbmRfdG9fcmVh
ZHlfY2IgKEdPYmplY3QgKnNvdXJjZSwgR0FzeW5jUmVzdWx0ICpyZXN1bHQsIFdlYktpdFNvdXBD
YWNoZVdyaXRpbmdGaXh0dXJlICpmaXh0dXJlKQoreworCUdGaWxlICpmaWxlID0gKEdGaWxlICop
c291cmNlOworCUdPdXRwdXRTdHJlYW0gKnN0cmVhbTsKKwlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAq
ZW50cnkgPSBmaXh0dXJlLT5lbnRyeTsKKworCXN0cmVhbSA9IChHT3V0cHV0U3RyZWFtICopZ19m
aWxlX2FwcGVuZF90b19maW5pc2ggKGZpbGUsIHJlc3VsdCwgJmVudHJ5LT5lcnJvcik7CisKKwlp
ZiAoZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQgKGVudHJ5LT5jYW5jZWxsYWJsZSkgfHwgZW50
cnktPmVycm9yKSB7CisJCWZpeHR1cmUtPmNhY2hlLT5wcml2LT5uX3BlbmRpbmctLTsKKwkJZW50
cnktPmRpcnR5ID0gRkFMU0U7CisJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X3JlbW92ZSAoZml4
dHVyZS0+Y2FjaGUsIGVudHJ5KTsKKwkJd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfZnJlZSAoZW50
cnksIFRSVUUpOworCQl3ZWJraXRfc291cF9jYWNoZV93cml0aW5nX2ZpeHR1cmVfZnJlZSAoZml4
dHVyZSk7CisJCXJldHVybjsKKwl9CisKKwllbnRyeS0+c3RyZWFtID0gZ19vYmplY3RfcmVmIChz
dHJlYW0pOworCWdfb2JqZWN0X3VucmVmIChmaWxlKTsKKworCS8qIElmIHdlIGFscmVhZHkgZ290
IGFsbCB0aGUgZGF0YSB3ZSBoYXZlIHRvIGluaXRpYXRlIHRoZQorCSAgIHdyaXRpbmcgaGVyZSwg
c2luY2Ugd2Ugd29uJ3QgZ2V0IG1vcmUgJ2dvdC1jaHVuaycKKwkgICBzaWduYWxzICovCisJaWYg
KGVudHJ5LT5nb3RfYm9keSkgeworCQlHU3RyaW5nICpkYXRhID0gZW50cnktPmRhdGE7CisKKwkJ
LyogSXQgY291bGQgaGFwcGVuIHRoYXQgcmVhZGluZyB0aGUgZGF0YSBmcm9tIHNlcnZlcgorCQkg
ICB3YXMgY29tcGxldGVkIGJlZm9yZSB0aGlzIGhhcHBlbnMuIEluIHRoYXQgY2FzZQorCQkgICB0
aGVyZSBpcyBubyBkYXRhICovCisJCWlmIChkYXRhKSB7CisJCQllbnRyeS0+d3JpdGluZyA9IFRS
VUU7CisJCQlnX291dHB1dF9zdHJlYW1fd3JpdGVfYXN5bmMgKGVudHJ5LT5zdHJlYW0sCisJCQkJ
CQkgICAgIGRhdGEtPnN0ciArIGVudHJ5LT5wb3MsCisJCQkJCQkgICAgIGRhdGEtPmxlbiAtIGVu
dHJ5LT5wb3MsCisJCQkJCQkgICAgIEdfUFJJT1JJVFlfTE9XLAorCQkJCQkJICAgICBlbnRyeS0+
Y2FuY2VsbGFibGUsCisJCQkJCQkgICAgIChHQXN5bmNSZWFkeUNhbGxiYWNrKXdyaXRlX3JlYWR5
X2NiLAorCQkJCQkJICAgICBmaXh0dXJlKTsKKwkJfQorCX0KK30KKwordHlwZWRlZiBzdHJ1Y3Qg
eworCXRpbWVfdCByZXF1ZXN0X3RpbWU7CisJU291cFNlc3Npb25GZWF0dXJlICpmZWF0dXJlOwor
CWd1bG9uZyBnb3RfaGVhZGVyc19oYW5kbGVyOworfSBSZXF1ZXN0SGVscGVyOworCitzdGF0aWMg
dm9pZAorbXNnX2dvdF9oZWFkZXJzX2NiIChTb3VwTWVzc2FnZSAqbXNnLCBncG9pbnRlciB1c2Vy
X2RhdGEpCit7CisJV2ViS2l0U291cENhY2hlICpjYWNoZTsKKwlXZWJLaXRTb3VwQ2FjaGVhYmls
aXR5IGNhY2hlYWJsZTsKKwlSZXF1ZXN0SGVscGVyICpoZWxwZXI7CisJdGltZV90IHJlcXVlc3Rf
dGltZSwgcmVzcG9uc2VfdGltZTsKKworCXJlc3BvbnNlX3RpbWUgPSB0aW1lIChOVUxMKTsKKwor
CWhlbHBlciA9IChSZXF1ZXN0SGVscGVyICopdXNlcl9kYXRhOworCWNhY2hlID0gV0VCS0lUX1NP
VVBfQ0FDSEUgKGhlbHBlci0+ZmVhdHVyZSk7CisJcmVxdWVzdF90aW1lID0gaGVscGVyLT5yZXF1
ZXN0X3RpbWU7CisJZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jIChtc2csIG1z
Z19nb3RfaGVhZGVyc19jYiwgdXNlcl9kYXRhKTsKKwlnX3NsaWNlX2ZyZWUgKFJlcXVlc3RIZWxw
ZXIsIGhlbHBlcik7CisKKwljYWNoZWFibGUgPSB3ZWJraXRfc291cF9jYWNoZV9nZXRfY2FjaGVh
YmlsaXR5IChjYWNoZSwgbXNnKTsKKworCWlmIChjYWNoZWFibGUgJiBXRUJLSVRfU09VUF9DQUNI
RV9DQUNIRUFCTEUpIHsKKwkJV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5OworCQljaGFyICpr
ZXk7CisJCUdGaWxlICpmaWxlOworCQlXZWJLaXRTb3VwQ2FjaGVXcml0aW5nRml4dHVyZSAqZml4
dHVyZTsKKworCQkvKiBDaGVjayBpZiB3ZSBhcmUgYWxyZWFkeSBjYWNoaW5nIHRoaXMgcmVzb3Vy
Y2UgKi8KKwkJa2V5ID0gc291cF9tZXNzYWdlX2dldF9jYWNoZV9rZXkgKG1zZyk7CisJCWVudHJ5
ID0gZ19oYXNoX3RhYmxlX2xvb2t1cCAoY2FjaGUtPnByaXYtPmNhY2hlLCBrZXkpOworCQlnX2Zy
ZWUgKGtleSk7CisKKwkJaWYgKGVudHJ5ICYmIGVudHJ5LT5kaXJ0eSkKKwkJCXJldHVybjsKKwor
CQkvKiBDcmVhdGUgYSBuZXcgZW50cnksIGRlbGV0aW5nIGFueSBvbGQgb25lIGlmIHByZXNlbnQg
Ki8KKwkJaWYgKGVudHJ5KSB7CisJCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9yZW1vdmUgKGNh
Y2hlLCBlbnRyeSk7CisJCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9mcmVlIChlbnRyeSwgVFJV
RSk7CisJCX0KKworCQllbnRyeSA9IHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X25ldyAoY2FjaGUs
IG1zZywgcmVxdWVzdF90aW1lLCByZXNwb25zZV90aW1lKTsKKwkJZW50cnktPmhpdHMgPSAxOwor
CisJCS8qIERvIG5vdCBjb250aW51ZSBpZiBpdCBjYW4gbm90IGJlIHN0b3JlZCAqLworCQlpZiAo
IXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2luc2VydF9ieV9rZXkgKGNhY2hlLCAoY29uc3QgZ2No
YXIgKillbnRyeS0+a2V5LCBlbnRyeSwgVFJVRSkpIHsKKwkJCXdlYmtpdF9zb3VwX2NhY2hlX2Vu
dHJ5X2ZyZWUgKGVudHJ5LCBUUlVFKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWZpeHR1cmUgPSBn
X3NsaWNlX25ldzAgKFdlYktpdFNvdXBDYWNoZVdyaXRpbmdGaXh0dXJlKTsKKwkJZml4dHVyZS0+
Y2FjaGUgPSBnX29iamVjdF9yZWYgKGNhY2hlKTsKKwkJZml4dHVyZS0+ZW50cnkgPSBlbnRyeTsK
KwkJZml4dHVyZS0+bXNnID0gZ19vYmplY3RfcmVmIChtc2cpOworCisJCS8qIFdlIGNvbm5lY3Qg
bm93IHRvIHRoZXNlIHNpZ25hbHMgYW5kIGJ1ZmZlciB0aGUgZGF0YQorCQkgICBpZiBpdCBjb21l
cyBiZWZvcmUgdGhlIGZpbGUgaXMgcmVhZHkgZm9yIHdyaXRpbmcgKi8KKwkJZml4dHVyZS0+Z290
X2NodW5rX2hhbmRsZXIgPQorCQkJZ19zaWduYWxfY29ubmVjdCAobXNnLCAiZ290LWNodW5rIiwg
R19DQUxMQkFDSyAobXNnX2dvdF9jaHVua19jYiksIGZpeHR1cmUpOworCQlmaXh0dXJlLT5nb3Rf
Ym9keV9oYW5kbGVyID0KKwkJCWdfc2lnbmFsX2Nvbm5lY3QgKG1zZywgImdvdC1ib2R5IiwgR19D
QUxMQkFDSyAobXNnX2dvdF9ib2R5X2NiKSwgZml4dHVyZSk7CisJCWZpeHR1cmUtPnJlc3RhcnRl
ZF9oYW5kbGVyID0KKwkJCWdfc2lnbmFsX2Nvbm5lY3QgKG1zZywgInJlc3RhcnRlZCIsIEdfQ0FM
TEJBQ0sgKG1zZ19yZXN0YXJ0ZWRfY2IpLCBlbnRyeSk7CisKKwkJLyogUHJlcGFyZSBlbnRyeSAq
LworCQlmaWxlID0gZ19maWxlX25ld19mb3JfcGF0aCAoZW50cnktPmZpbGVuYW1lKTsKKwkJY2Fj
aGUtPnByaXYtPm5fcGVuZGluZysrOworCisJCWVudHJ5LT5kaXJ0eSA9IFRSVUU7CisJCWVudHJ5
LT5jYW5jZWxsYWJsZSA9IGdfY2FuY2VsbGFibGVfbmV3ICgpOworCQlnX2ZpbGVfYXBwZW5kX3Rv
X2FzeW5jIChmaWxlLCAwLAorCQkJCQlHX1BSSU9SSVRZX0xPVywgZW50cnktPmNhbmNlbGxhYmxl
LAorCQkJCQkoR0FzeW5jUmVhZHlDYWxsYmFjaylhcHBlbmRfdG9fcmVhZHlfY2IsCisJCQkJCWZp
eHR1cmUpOworCX0gZWxzZSBpZiAoY2FjaGVhYmxlICYgV0VCS0lUX1NPVVBfQ0FDSEVfSU5WQUxJ
REFURVMpIHsKKwkJY2hhciAqa2V5OworCQlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnk7CisK
KwkJa2V5ID0gc291cF9tZXNzYWdlX2dldF9jYWNoZV9rZXkgKG1zZyk7CisJCWVudHJ5ID0gZ19o
YXNoX3RhYmxlX2xvb2t1cCAoY2FjaGUtPnByaXYtPmNhY2hlLCBrZXkpOworCQlnX2ZyZWUgKGtl
eSk7CisKKwkJaWYgKGVudHJ5KSB7CisJCQlpZiAod2Via2l0X3NvdXBfY2FjaGVfZW50cnlfcmVt
b3ZlIChjYWNoZSwgZW50cnkpKQorCQkJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUgKGVu
dHJ5LCBUUlVFKTsKKwkJfQorCX0gZWxzZSBpZiAoY2FjaGVhYmxlICYgV0VCS0lUX1NPVVBfQ0FD
SEVfVkFMSURBVEVTKSB7CisJCWNoYXIgKmtleTsKKwkJV2ViS2l0U291cENhY2hlRW50cnkgKmVu
dHJ5OworCisJCWtleSA9IHNvdXBfbWVzc2FnZV9nZXRfY2FjaGVfa2V5IChtc2cpOworCQllbnRy
eSA9IGdfaGFzaF90YWJsZV9sb29rdXAgKGNhY2hlLT5wcml2LT5jYWNoZSwga2V5KTsKKwkJZ19m
cmVlIChrZXkpOworCisJCWdfcmV0dXJuX2lmX2ZhaWwgKGVudHJ5KTsKKworCQllbnRyeS0+YmVp
bmdfdmFsaWRhdGVkID0gRkFMU0U7CisKKwkJLyogV2UgdXBkYXRlIHRoZSBoZWFkZXJzIG9mIHRo
ZSBleGlzdGluZyBjYWNoZSBpdGVtLAorCQkgICBwbHVzIGl0cyBhZ2UgKi8KKwkJc291cF9tZXNz
YWdlX2hlYWRlcnNfZm9yZWFjaCAobXNnLT5yZXNwb25zZV9oZWFkZXJzLAorCQkJCQkgICAgICAo
U291cE1lc3NhZ2VIZWFkZXJzRm9yZWFjaEZ1bmMpdXBkYXRlX2hlYWRlcnMsCisJCQkJCSAgICAg
IGVudHJ5LT5oZWFkZXJzKTsKKwkJd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfc2V0X2ZyZXNobmVz
cyAoZW50cnksIG1zZywgY2FjaGUpOworCX0KK30KKworR0lucHV0U3RyZWFtICoKK3dlYmtpdF9z
b3VwX2NhY2hlX3NlbmRfcmVzcG9uc2UgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsIFNvdXBNZXNz
YWdlICptc2cpCit7CisJY2hhciAqa2V5OworCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeTsK
KwljaGFyICpjdXJyZW50X2FnZTsKKwlHSW5wdXRTdHJlYW0gKnN0cmVhbSA9IE5VTEw7CisJR0Zp
bGUgKmZpbGU7CisKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoV0VCS0lUX0lTX1NPVVBfQ0FDSEUg
KGNhY2hlKSwgTlVMTCk7CisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFNPVVBfSVNfTUVTU0FHRSAo
bXNnKSwgTlVMTCk7CisKKwlrZXkgPSBzb3VwX21lc3NhZ2VfZ2V0X2NhY2hlX2tleSAobXNnKTsK
KwllbnRyeSA9IGdfaGFzaF90YWJsZV9sb29rdXAgKGNhY2hlLT5wcml2LT5jYWNoZSwga2V5KTsK
KwlnX3JldHVybl92YWxfaWZfZmFpbCAoZW50cnksIE5VTEwpOworCisJLyogSWYgd2UgYXJlIHRv
bGQgdG8gc2VuZCBhIHJlc3BvbnNlIGZyb20gY2FjaGUgYW55IHZhbGlkYXRpb24KKwkgICBpbiBj
b3Vyc2UgaXMgb3ZlciBieSBub3cgKi8KKwllbnRyeS0+YmVpbmdfdmFsaWRhdGVkID0gRkFMU0U7
CisKKwkvKiBIZWFkZXJzICovCisJc291cF9tZXNzYWdlX2hlYWRlcnNfZm9yZWFjaCAoZW50cnkt
PmhlYWRlcnMsCisJCQkJICAgICAgKFNvdXBNZXNzYWdlSGVhZGVyc0ZvcmVhY2hGdW5jKXVwZGF0
ZV9oZWFkZXJzLAorCQkJCSAgICAgIG1zZy0+cmVzcG9uc2VfaGVhZGVycyk7CisKKwkvKiBBZGQg
J0FnZScgaGVhZGVyIHdpdGggdGhlIGN1cnJlbnQgYWdlICovCisJY3VycmVudF9hZ2UgPSBnX3N0
cmR1cF9wcmludGYgKCIlZCIsIHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2dldF9jdXJyZW50X2Fn
ZSAoZW50cnkpKTsKKwlzb3VwX21lc3NhZ2VfaGVhZGVyc19yZXBsYWNlIChtc2ctPnJlc3BvbnNl
X2hlYWRlcnMsCisJCQkJICAgICAgIkFnZSIsCisJCQkJICAgICAgY3VycmVudF9hZ2UpOworCWdf
ZnJlZSAoY3VycmVudF9hZ2UpOworCisJLyogVE9ETzogdGhlIG9yaWdpbmFsIGlkZWEgd2FzIHRv
IHNhdmUgcmVhZHMsIGJ1dCBjdXJyZW50IGNvZGUKKwkgICBhc3N1bWVzIHRoYXQgYSBzdHJlYW0g
aXMgYWx3YXlzIHJldHVybmVkLiBOZWVkIHRvIHJlYWNoCisJICAgc29tZSBhZ3JlZW1lbnQgaGVy
ZS4gQWxzbyB3ZSBoYXZlIHRvIGhhbmRsZSB0aGUgc2l0dWF0aW9uCisJICAgd2VyZSB0aGUgZmls
ZSB3YXMgbm8gbG9uZ2VyIHRoZXJlIChmb3IgZXhhbXBsZSBmaWxlcworCSAgIHJlbW92ZWQgd2l0
aG91dCBub3RpZnlpbmcgdGhlIGNhY2hlICovCisJZmlsZSA9IGdfZmlsZV9uZXdfZm9yX3BhdGgg
KGVudHJ5LT5maWxlbmFtZSk7CisJc3RyZWFtID0gKEdJbnB1dFN0cmVhbSAqKWdfZmlsZV9yZWFk
IChmaWxlLCBOVUxMLCBOVUxMKTsKKworCXJldHVybiBzdHJlYW07Cit9CisKK3N0YXRpYyB2b2lk
CityZXF1ZXN0X3N0YXJ0ZWQgKFNvdXBTZXNzaW9uRmVhdHVyZSAqZmVhdHVyZSwgU291cFNlc3Np
b24gKnNlc3Npb24sCisJCSBTb3VwTWVzc2FnZSAqbXNnLCBTb3VwU29ja2V0ICpzb2NrZXQpCit7
CisJUmVxdWVzdEhlbHBlciAqaGVscGVyID0gZ19zbGljZV9uZXcwIChSZXF1ZXN0SGVscGVyKTsK
KwloZWxwZXItPnJlcXVlc3RfdGltZSA9IHRpbWUgKE5VTEwpOworCWhlbHBlci0+ZmVhdHVyZSA9
IGZlYXR1cmU7CisJaGVscGVyLT5nb3RfaGVhZGVyc19oYW5kbGVyID0gZ19zaWduYWxfY29ubmVj
dCAobXNnLCAiZ290LWhlYWRlcnMiLAorCQkJCQkJCUdfQ0FMTEJBQ0sgKG1zZ19nb3RfaGVhZGVy
c19jYiksCisJCQkJCQkJaGVscGVyKTsKK30KKworc3RhdGljIHZvaWQKK2F0dGFjaCAoU291cFNl
c3Npb25GZWF0dXJlICpmZWF0dXJlLCBTb3VwU2Vzc2lvbiAqc2Vzc2lvbikKK3sKKwlXZWJLaXRT
b3VwQ2FjaGUgKmNhY2hlID0gV0VCS0lUX1NPVVBfQ0FDSEUgKGZlYXR1cmUpOworCWNhY2hlLT5w
cml2LT5zZXNzaW9uID0gc2Vzc2lvbjsKKworCXdlYmtpdF9zb3VwX2NhY2hlX2RlZmF1bHRfZmVh
dHVyZV9pbnRlcmZhY2UtPmF0dGFjaCAoZmVhdHVyZSwgc2Vzc2lvbik7Cit9CisKK3N0YXRpYyB2
b2lkCit3ZWJraXRfc291cF9jYWNoZV9zZXNzaW9uX2ZlYXR1cmVfaW5pdCAoU291cFNlc3Npb25G
ZWF0dXJlSW50ZXJmYWNlICpmZWF0dXJlX2ludGVyZmFjZSwKKwkJCQkJZ3BvaW50ZXIgaW50ZXJm
YWNlX2RhdGEpCit7CisJd2Via2l0X3NvdXBfY2FjaGVfZGVmYXVsdF9mZWF0dXJlX2ludGVyZmFj
ZSA9CisJCWdfdHlwZV9kZWZhdWx0X2ludGVyZmFjZV9wZWVrIChTT1VQX1RZUEVfU0VTU0lPTl9G
RUFUVVJFKTsKKworCWZlYXR1cmVfaW50ZXJmYWNlLT5hdHRhY2ggPSBhdHRhY2g7CisJZmVhdHVy
ZV9pbnRlcmZhY2UtPnJlcXVlc3Rfc3RhcnRlZCA9IHJlcXVlc3Rfc3RhcnRlZDsKK30KKworc3Rh
dGljIHZvaWQKK3dlYmtpdF9zb3VwX2NhY2hlX2luaXQgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUp
Cit7CisJV2ViS2l0U291cENhY2hlUHJpdmF0ZSAqcHJpdjsKKworCXByaXYgPSBjYWNoZS0+cHJp
diA9IFdFQktJVF9TT1VQX0NBQ0hFX0dFVF9QUklWQVRFIChjYWNoZSk7CisKKwlwcml2LT5jYWNo
ZSA9IGdfaGFzaF90YWJsZV9uZXdfZnVsbCAoZ19zdHJfaGFzaCwKKwkJCQkJICAgICBnX3N0cl9l
cXVhbCwKKwkJCQkJICAgICAoR0Rlc3Ryb3lOb3RpZnkpZ19mcmVlLAorCQkJCQkgICAgIE5VTEwp
OworCisJLyogTFJVICovCisJcHJpdi0+bHJ1X3N0YXJ0ID0gTlVMTDsKKworCS8qICovCisJcHJp
di0+bl9wZW5kaW5nID0gMDsKKworCS8qIENhY2hlIHNpemUgKi8KKwlwcml2LT5tYXhfc2l6ZSA9
IERFRkFVTFRfTUFYX1NJWkU7CisJcHJpdi0+bWF4X2VudHJ5X2RhdGFfc2l6ZSA9IHByaXYtPm1h
eF9zaXplIC8gTUFYX0VOVFJZX0RBVEFfUEVSQ0VOVEFHRTsKKwlwcml2LT5zaXplID0gMDsKK30K
Kworc3RhdGljIHZvaWQKK3JlbW92ZV9jYWNoZV9pdGVtIChncG9pbnRlciBrZXksCisJCSAgIGdw
b2ludGVyIHZhbHVlLAorCQkgICBXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKQoreworCVdlYktpdFNv
dXBDYWNoZUVudHJ5ICplbnRyeSA9IGdfaGFzaF90YWJsZV9sb29rdXAgKGNhY2hlLT5wcml2LT5j
YWNoZSwgKGNvbnN0IGdjaGFyICopa2V5KTsKKwlpZiAod2Via2l0X3NvdXBfY2FjaGVfZW50cnlf
cmVtb3ZlIChjYWNoZSwgZW50cnkpKQorCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9mcmVlIChl
bnRyeSwgRkFMU0UpOworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfY2FjaGVfZmluYWxp
emUgKEdPYmplY3QgKm9iamVjdCkKK3sKKwlXZWJLaXRTb3VwQ2FjaGVQcml2YXRlICpwcml2Owor
CisJcHJpdiA9IFdFQktJVF9TT1VQX0NBQ0hFIChvYmplY3QpLT5wcml2OworCisJZ19oYXNoX3Rh
YmxlX2ZvcmVhY2ggKHByaXYtPmNhY2hlLCAoR0hGdW5jKXJlbW92ZV9jYWNoZV9pdGVtLCBvYmpl
Y3QpOworCWdfaGFzaF90YWJsZV9kZXN0cm95IChwcml2LT5jYWNoZSk7CisJZ19mcmVlIChwcml2
LT5jYWNoZV9kaXIpOworCisJZ19saXN0X2ZyZWUgKHByaXYtPmxydV9zdGFydCk7CisJcHJpdi0+
bHJ1X3N0YXJ0ID0gTlVMTDsKKworCUdfT0JKRUNUX0NMQVNTICh3ZWJraXRfc291cF9jYWNoZV9w
YXJlbnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtp
dF9zb3VwX2NhY2hlX3NldF9wcm9wZXJ0eSAoR09iamVjdCAqb2JqZWN0LCBndWludCBwcm9wX2lk
LAorCQkJCWNvbnN0IEdWYWx1ZSAqdmFsdWUsIEdQYXJhbVNwZWMgKnBzcGVjKQoreworCVdlYktp
dFNvdXBDYWNoZVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9DQUNIRSAob2JqZWN0KS0+cHJp
djsKKworCXN3aXRjaCAocHJvcF9pZCkgeworCWNhc2UgUFJPUF9DQUNIRV9ESVI6CisJCXByaXYt
PmNhY2hlX2RpciA9IGdfdmFsdWVfZHVwX3N0cmluZyAodmFsdWUpOworCQkvKiBDcmVhdGUgZGly
ZWN0b3J5IGlmIGl0IGRvZXMgbm90IGV4aXN0IChGSVhNRTogc2hvdWxkIHdlPykgKi8KKwkJaWYg
KCFnX2ZpbGVfdGVzdCAocHJpdi0+Y2FjaGVfZGlyLCBHX0ZJTEVfVEVTVF9FWElTVFMgfCBHX0ZJ
TEVfVEVTVF9JU19ESVIpKQorCQkJZ19ta2Rpcl93aXRoX3BhcmVudHMgKHByaXYtPmNhY2hlX2Rp
ciwgMDcwMCk7CisJCWJyZWFrOworCWNhc2UgUFJPUF9DQUNIRV9UWVBFOgorCQlwcml2LT5jYWNo
ZV90eXBlID0gZ192YWx1ZV9nZXRfZW51bSAodmFsdWUpOworCQkvKiBUT0RPOiBjbGVhciBwcml2
YXRlIGVudHJpZXMgYW5kIGlzc3VlIGEgd2FybmluZyBpZiBtb3ZpbmcgdG8gc2hhcmVkPyAqLwor
CQlicmVhazsKKwlkZWZhdWx0OgorCQlHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQg
KG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lk
Cit3ZWJraXRfc291cF9jYWNoZV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKm9iamVjdCwgZ3VpbnQg
cHJvcF9pZCwKKwkJCQlHVmFsdWUgKnZhbHVlLCBHUGFyYW1TcGVjICpwc3BlYykKK3sKKwlXZWJL
aXRTb3VwQ2FjaGVQcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfQ0FDSEUgKG9iamVjdCktPnBy
aXY7CisKKwlzd2l0Y2ggKHByb3BfaWQpIHsKKwljYXNlIFBST1BfQ0FDSEVfRElSOgorCQlnX3Zh
bHVlX3NldF9zdHJpbmcgKHZhbHVlLCBwcml2LT5jYWNoZV9kaXIpOworCQlicmVhazsKKwljYXNl
IFBST1BfQ0FDSEVfVFlQRToKKwkJZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIHByaXYtPmNhY2hl
X3R5cGUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJP
UEVSVFlfSUQgKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworCQlicmVhazsKKwl9Cit9CisKK3N0
YXRpYyB2b2lkCit3ZWJraXRfc291cF9jYWNoZV9jb25zdHJ1Y3RlZCAoR09iamVjdCAqb2JqZWN0
KQoreworCVdlYktpdFNvdXBDYWNoZVByaXZhdGUgKnByaXY7CisKKwlwcml2ID0gV0VCS0lUX1NP
VVBfQ0FDSEUgKG9iamVjdCktPnByaXY7CisKKwlpZiAoIXByaXYtPmNhY2hlX2RpcikgeworCQkv
KiBTZXQgYSBkZWZhdWx0IGNhY2hlIGRpciwgZGlmZmVyZW50IGZvciBlYWNoIHVzZXIgKi8KKwkJ
cHJpdi0+Y2FjaGVfZGlyID0gZ19idWlsZF9maWxlbmFtZSAoZ19nZXRfdXNlcl9jYWNoZV9kaXIg
KCksCisJCQkJCQkgICAgImh0dHBjYWNoZSIsCisJCQkJCQkgICAgTlVMTCk7CisJCWlmICghZ19m
aWxlX3Rlc3QgKHByaXYtPmNhY2hlX2RpciwgR19GSUxFX1RFU1RfRVhJU1RTIHwgR19GSUxFX1RF
U1RfSVNfRElSKSkKKwkJCWdfbWtkaXJfd2l0aF9wYXJlbnRzIChwcml2LT5jYWNoZV9kaXIsIDA3
MDApOworCX0KKworCWlmIChHX09CSkVDVF9DTEFTUyAod2Via2l0X3NvdXBfY2FjaGVfcGFyZW50
X2NsYXNzKS0+Y29uc3RydWN0ZWQpCisJCUdfT0JKRUNUX0NMQVNTICh3ZWJraXRfc291cF9jYWNo
ZV9wYXJlbnRfY2xhc3MpLT5jb25zdHJ1Y3RlZCAob2JqZWN0KTsKK30KKworI2RlZmluZSBXRUJL
SVRfU09VUF9DQUNIRV9UWVBFX1RZUEUgKHdlYmtpdF9zb3VwX2NhY2hlX3R5cGVfZ2V0X3R5cGUg
KCkpCitzdGF0aWMgR1R5cGUKK3dlYmtpdF9zb3VwX2NhY2hlX3R5cGVfZ2V0X3R5cGUgKHZvaWQp
Cit7CisJc3RhdGljIEdUeXBlIGNhY2hlX3R5cGUgPSAwOworCisJc3RhdGljIGNvbnN0IEdFbnVt
VmFsdWUgY2FjaGVfdHlwZXNbXSA9IHsKKwkJeyBXRUJLSVRfU09VUF9DQUNIRV9TSU5HTEVfVVNF
UiwgIlNpbmdsZSB1c2VyIGNhY2hlIiwgInVzZXIiIH0sCisJCXsgV0VCS0lUX1NPVVBfQ0FDSEVf
U0hBUkVELCAiU2hhcmVkIGNhY2hlIiwgInNoYXJlZCIgfSwKKwkJeyAwLCBOVUxMLCBOVUxMIH0K
Kwl9OworCisJaWYgKCFjYWNoZV90eXBlKSB7CisJCWNhY2hlX3R5cGUgPSBnX2VudW1fcmVnaXN0
ZXJfc3RhdGljICgiV2ViS2l0U291cENhY2hlVHlwZSIsIGNhY2hlX3R5cGVzKTsKKwl9CisJcmV0
dXJuIGNhY2hlX3R5cGU7Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfc291cF9jYWNoZV9jbGFz
c19pbml0IChXZWJLaXRTb3VwQ2FjaGVDbGFzcyAqY2FjaGVfY2xhc3MpCit7CisJR09iamVjdENs
YXNzICpnb2JqZWN0X2NsYXNzID0gKEdPYmplY3RDbGFzcyAqKWNhY2hlX2NsYXNzOworCisJZ29i
amVjdF9jbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfc291cF9jYWNoZV9maW5hbGl6ZTsKKwlnb2Jq
ZWN0X2NsYXNzLT5jb25zdHJ1Y3RlZCA9IHdlYmtpdF9zb3VwX2NhY2hlX2NvbnN0cnVjdGVkOwor
CWdvYmplY3RfY2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9zb3VwX2NhY2hlX3NldF9wcm9w
ZXJ0eTsKKwlnb2JqZWN0X2NsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfc291cF9jYWNoZV9n
ZXRfcHJvcGVydHk7CisKKwljYWNoZV9jbGFzcy0+Z2V0X2NhY2hlYWJpbGl0eSA9IGdldF9jYWNo
ZWFiaWxpdHk7CisKKwlnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2Ns
YXNzLCBQUk9QX0NBQ0hFX0RJUiwKKwkJCQkJIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJjYWNoZS1k
aXIiLAorCQkJCQkJCSAgICAgICJDYWNoZSBkaXJlY3RvcnkiLAorCQkJCQkJCSAgICAgICJUaGUg
ZGlyZWN0b3J5IHRvIHN0b3JlIHRoZSBjYWNoZSBmaWxlcyIsCisJCQkJCQkJICAgICAgTlVMTCwK
KwkJCQkJCQkgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkp
KTsKKworCWdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBS
T1BfQ0FDSEVfVFlQRSwKKwkJCQkJIGdfcGFyYW1fc3BlY19lbnVtICgiY2FjaGUtdHlwZSIsCisJ
CQkJCQkJICAgICJDYWNoZSB0eXBlIiwKKwkJCQkJCQkgICAgIldoZXRoZXIgdGhlIGNhY2hlIGlz
IHByaXZhdGUgb3Igc2hhcmVkIiwKKwkJCQkJCQkgICAgV0VCS0lUX1NPVVBfQ0FDSEVfVFlQRV9U
WVBFLAorCQkJCQkJCSAgICBXRUJLSVRfU09VUF9DQUNIRV9TSU5HTEVfVVNFUiwKKwkJCQkJCQkg
ICAgR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSk7CisKKwlnX3R5
cGVfY2xhc3NfYWRkX3ByaXZhdGUgKGNhY2hlX2NsYXNzLCBzaXplb2YgKFdlYktpdFNvdXBDYWNo
ZVByaXZhdGUpKTsKK30KKworLyoqCisgKiB3ZWJraXRfc291cF9jYWNoZV9uZXc6CisgKiBAY2Fj
aGVfZGlyOiB0aGUgZGlyZWN0b3J5IHRvIHN0b3JlIHRoZSBjYWNoZWQgZGF0YSwgb3IgJU5VTEwg
dG8gdXNlIHRoZSBkZWZhdWx0IG9uZQorICogQGNhY2hlX3R5cGU6IHRoZSAjV2ViS2l0U291cENh
Y2hlVHlwZSBvZiB0aGUgY2FjaGUKKyAqCisgKiBDcmVhdGVzIGEgbmV3ICNXZWJLaXRTb3VwQ2Fj
aGUuCisgKgorICogUmV0dXJuczogYSBuZXcgI1dlYktpdFNvdXBDYWNoZQorICoKKyAqIFNpbmNl
OiAyLjI4CisgKiovCitXZWJLaXRTb3VwQ2FjaGUgKgord2Via2l0X3NvdXBfY2FjaGVfbmV3IChj
b25zdCBjaGFyICpjYWNoZV9kaXIsIFdlYktpdFNvdXBDYWNoZVR5cGUgY2FjaGVfdHlwZSkKK3sK
KwlyZXR1cm4gZ19vYmplY3RfbmV3IChXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFLAorCQkJICAgICAi
Y2FjaGUtZGlyIiwgY2FjaGVfZGlyLAorCQkJICAgICAiY2FjaGUtdHlwZSIsIGNhY2hlX3R5cGUs
CisJCQkgICAgIE5VTEwpOworfQorCisvKioKKyAqIHdlYmtpdF9zb3VwX2NhY2hlX2hhc19yZXNw
b25zZToKKyAqIEBjYWNoZTogYSAjV2ViS2l0U291cENhY2hlCisgKiBAbXNnOiBhICNTb3VwTWVz
c2FnZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyB3aGV0aGVyIHRoZSBAY2FjaGUg
b2JqZWN0IGhhcyBhIHByb3BlcgorICogcmVzcG9uc2UgZm9yIHRoZSByZXF1ZXN0IEBtc2cgZ2l2
ZW4gdGhlIGZsYWdzIGJvdGggaW4gdGhlIHJlcXVlc3QKKyAqIGFuZCB0aGUgY2FjaGVkIHJlcGx5
IGFuZCB0aGUgdGltZSBlbGxhcHNlZCBzaW5jZSBpdCB3YXMgY2FjaGVkLgorICoKKyAqIFJldHVy
bnM6IHdoZXRoZXIgb3Igbm90IHRoZSBAY2FjaGUgaGFzIGEgdmFsaWQgcmVzcG9uc2UgZm9yIEBt
c2cKKyAqKi8KK1dlYktpdFNvdXBDYWNoZVJlc3BvbnNlCit3ZWJraXRfc291cF9jYWNoZV9oYXNf
cmVzcG9uc2UgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsIFNvdXBNZXNzYWdlICptc2cpCit7CisJ
Y2hhciAqa2V5OworCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeTsKKwljb25zdCBjaGFyICpj
YWNoZV9jb250cm9sOworCUdIYXNoVGFibGUgKmhhc2g7CisJZ3BvaW50ZXIgdmFsdWU7CisJZ2Jv
b2xlYW4gbXVzdF9yZXZhbGlkYXRlOworCWludCBtYXhfYWdlLCBtYXhfc3RhbGUsIG1pbl9mcmVz
aDsKKwlHTGlzdCAqbHJ1X2l0ZW0sICppdGVtOworCisJa2V5ID0gc291cF9tZXNzYWdlX2dldF9j
YWNoZV9rZXkgKG1zZyk7CisJZW50cnkgPSBnX2hhc2hfdGFibGVfbG9va3VwIChjYWNoZS0+cHJp
di0+Y2FjaGUsIGtleSk7CisKKwkvKiAxLiBUaGUgcHJlc2VudGVkIFJlcXVlc3QtVVJJIGFuZCB0
aGF0IG9mIHN0b3JlZCByZXNwb25zZQorCSAqIG1hdGNoCisJICovCisJaWYgKCFlbnRyeSkKKwkJ
cmV0dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX1NUQUxFOworCisJLyogSW5jcmVhc2Ug
aGl0IGNvdW50LiBUYWtlIHNvcnRpbmcgaW50byBhY2NvdW50ICovCisJZW50cnktPmhpdHMrKzsK
KwlscnVfaXRlbSA9IGdfbGlzdF9maW5kIChjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0LCBlbnRyeSk7
CisJaXRlbSA9IGxydV9pdGVtOworCXdoaWxlIChpdGVtLT5uZXh0ICYmIGxydV9jb21wYXJlX2Z1
bmMgKGl0ZW0tPmRhdGEsIGl0ZW0tPm5leHQtPmRhdGEpID4gMCkKKwkJaXRlbSA9IGdfbGlzdF9u
ZXh0IChpdGVtKTsKKworCWlmIChpdGVtICE9IGxydV9pdGVtKSB7CisJCWNhY2hlLT5wcml2LT5s
cnVfc3RhcnQgPSBnX2xpc3RfcmVtb3ZlX2xpbmsgKGNhY2hlLT5wcml2LT5scnVfc3RhcnQsIGxy
dV9pdGVtKTsKKwkJaXRlbSA9IGdfbGlzdF9pbnNlcnRfc29ydGVkIChpdGVtLCBscnVfaXRlbS0+
ZGF0YSwgbHJ1X2NvbXBhcmVfZnVuYyk7CisJCWdfbGlzdF9mcmVlIChscnVfaXRlbSk7CisJfQor
CisJaWYgKGVudHJ5LT5kaXJ0eSB8fCBlbnRyeS0+YmVpbmdfdmFsaWRhdGVkKQorCQlyZXR1cm4g
V0VCS0lUX1NPVVBfQ0FDSEVfUkVTUE9OU0VfU1RBTEU7CisKKwkvKiAyLiBUaGUgcmVxdWVzdCBt
ZXRob2QgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdG9yZWQgcmVzcG9uc2UKKwkgKiAgYWxsb3dzIGl0
IHRvIGJlIHVzZWQgZm9yIHRoZSBwcmVzZW50ZWQgcmVxdWVzdAorCSAqLworCisJLyogSW4gcHJh
Y3RpY2UgdGhpcyBtZWFucyB3ZSBvbmx5IHJldHVybiBvdXIgcmVzb3VyY2UgZm9yIEdFVCwKKwkg
KiBjYWNoZWFiaWxpdHkgZm9yIG90aGVyIG1ldGhvZHMgaXMgYSBUT0RPIGluIHRoZSBSRkMKKwkg
KiAoVE9ETzogYWx0aG91Z2ggd2UgY291bGQgcmV0dXJuIHRoZSBoZWFkZXJzIGZvciBIRUFECisJ
ICogcHJvYmFibHkpLgorCSAqLworCWlmIChtc2ctPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQp
CisJCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9TVEFMRTsKKworCS8qIDMuIFNl
bGVjdGluZyByZXF1ZXN0LWhlYWRlcnMgbm9taW5hdGVkIGJ5IHRoZSBzdG9yZWQKKwkgKiByZXNw
b25zZSAoaWYgYW55KSBtYXRjaCB0aG9zZSBwcmVzZW50ZWQuCisJICovCisKKwkvKiBUT0RPICov
CisKKwkvKiA0LiBUaGUgcHJlc2VudGVkIHJlcXVlc3QgYW5kIHN0b3JlZCByZXNwb25zZSBhcmUg
ZnJlZSBmcm9tCisJICogZGlyZWN0aXZlcyB0aGF0IHdvdWxkIHByZXZlbnQgaXRzIHVzZS4KKwkg
Ki8KKworCW11c3RfcmV2YWxpZGF0ZSA9IEZBTFNFOworCW1heF9hZ2UgPSBtYXhfc3RhbGUgPSBt
aW5fZnJlc2ggPSAtMTsKKworCWNhY2hlX2NvbnRyb2wgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19n
ZXQgKG1zZy0+cmVxdWVzdF9oZWFkZXJzLCAiQ2FjaGUtQ29udHJvbCIpOworCWlmIChjYWNoZV9j
b250cm9sKSB7CisJCWhhc2ggPSBzb3VwX2hlYWRlcl9wYXJzZV9wYXJhbV9saXN0IChjYWNoZV9j
b250cm9sKTsKKworCQlpZiAoZ19oYXNoX3RhYmxlX2xvb2t1cF9leHRlbmRlZCAoaGFzaCwgIm5v
LXN0b3JlIiwgTlVMTCwgTlVMTCkpIHsKKwkJCWdfaGFzaF90YWJsZV9kZXN0cm95IChoYXNoKTsK
KwkJCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9TVEFMRTsKKwkJfQorCisJCWlm
IChnX2hhc2hfdGFibGVfbG9va3VwX2V4dGVuZGVkIChoYXNoLCAibm8tY2FjaGUiLCBOVUxMLCBO
VUxMKSkgeworCQkJZW50cnktPm11c3RfcmV2YWxpZGF0ZSA9IFRSVUU7CisJCX0KKworCQlpZiAo
Z19oYXNoX3RhYmxlX2xvb2t1cF9leHRlbmRlZCAoaGFzaCwgIm1heC1hZ2UiLCBOVUxMLCAmdmFs
dWUpKSB7CisJCQltYXhfYWdlID0gKGludClNSU4gKGdfYXNjaWlfc3RydG9sbCAodmFsdWUsIE5V
TEwsIDEwKSwgR19NQVhJTlQzMik7CisJCX0KKworCQkvKiBtYXgtc3RhbGUgY2FuIGhhdmUgbm8g
dmFsdWUgc2V0LCB3ZSBuZWVkIHRvIHVzZSBfZXh0ZW5kZWQgKi8KKwkJaWYgKGdfaGFzaF90YWJs
ZV9sb29rdXBfZXh0ZW5kZWQgKGhhc2gsICJtYXgtc3RhbGUiLCBOVUxMLCAmdmFsdWUpKSB7CisJ
CQlpZiAodmFsdWUpCisJCQkJbWF4X3N0YWxlID0gKGludClNSU4gKGdfYXNjaWlfc3RydG9sbCAo
dmFsdWUsIE5VTEwsIDEwKSwgR19NQVhJTlQzMik7CisJCQllbHNlCisJCQkJbWF4X3N0YWxlID0g
R19NQVhJTlQzMjsKKwkJfQorCisJCXZhbHVlID0gZ19oYXNoX3RhYmxlX2xvb2t1cCAoaGFzaCwg
Im1pbi1mcmVzaCIpOworCQlpZiAodmFsdWUpCisJCQltaW5fZnJlc2ggPSAoaW50KU1JTiAoZ19h
c2NpaV9zdHJ0b2xsICh2YWx1ZSwgTlVMTCwgMTApLCBHX01BWElOVDMyKTsKKworCQlnX2hhc2hf
dGFibGVfZGVzdHJveSAoaGFzaCk7CisKKwkJaWYgKG1heF9hZ2UgIT0gLTEpIHsKKwkJCWd1aW50
IGN1cnJlbnRfYWdlID0gd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfZ2V0X2N1cnJlbnRfYWdlIChl
bnRyeSk7CisKKwkJCS8qIElmIHdlIGFyZSBvdmVyIG1heC1hZ2UgYW5kIG1heC1zdGFsZSBpcyBu
b3QKKwkJCSAgIHNldCwgZG8gbm90IHVzZSB0aGUgdmFsdWUgZnJvbSB0aGUgY2FjaGUKKwkJCSAg
IHdpdGhvdXQgdmFsaWRhdGlvbiAqLworCQkJaWYgKG1heF9hZ2UgPD0gY3VycmVudF9hZ2UgJiYg
bWF4X3N0YWxlID09IC0xKQorCQkJCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9O
RUVEU19WQUxJREFUSU9OOworCQl9CisJfQorCisJLyogNS4gVGhlIHN0b3JlZCByZXNwb25zZSBp
cyBlaXRoZXI6IGZyZXNoLCBhbGxvd2VkIHRvIGJlCisJICogc2VydmVkIHN0YWxlIG9yIHN1Y2Nl
c2Z1bGx5IHZhbGlkYXRlZAorCSAqLworCS8qIFRPRE8gY29uc2lkZXIgYWxzbyBwcm94eS1yZXZh
bGlkYXRlICYgcy1tYXhhZ2UgKi8KKwlpZiAoZW50cnktPm11c3RfcmV2YWxpZGF0ZSkKKwkJcmV0
dXJuIFdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX05FRURTX1ZBTElEQVRJT047CisKKwlpZiAo
IXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2lzX2ZyZXNoX2Vub3VnaCAoZW50cnksIG1pbl9mcmVz
aCkpIHsKKwkJLyogTm90IGZyZXNoLCBjYW4gaXQgYmUgc2VydmVkIHN0YWxlPyAqLworCQlpZiAo
bWF4X3N0YWxlICE9IC0xKSB7CisJCQkvKiBHX01BWElOVDMyIG1lYW5zIHdlIGFjY2VwdCBhbnkg
c3RhbGVuZXNzICovCisJCQlpZiAobWF4X3N0YWxlID09IEdfTUFYSU5UMzIpCisJCQkJcmV0dXJu
IFdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNFX0ZSRVNIOworCisJCQlpZiAoKHdlYmtpdF9zb3Vw
X2NhY2hlX2VudHJ5X2dldF9jdXJyZW50X2FnZSAoZW50cnkpIC0gZW50cnktPmZyZXNobmVzc19s
aWZldGltZSkgPD0gbWF4X3N0YWxlKQorCQkJCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9SRVNQ
T05TRV9GUkVTSDsKKwkJfQorCisJCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9O
RUVEU19WQUxJREFUSU9OOworCX0KKworCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05T
RV9GUkVTSDsKK30KKworLyoqCisgKiB3ZWJraXRfc291cF9jYWNoZV9nZXRfY2FjaGVhYmlsaXR5
OgorICogQGNhY2hlOiBhICNXZWJLaXRTb3VwQ2FjaGUKKyAqIEBtc2c6IGEgI1NvdXBNZXNzYWdl
CisgKgorICogQ2FsY3VsYXRlcyB3aGV0aGVyIHRoZSBAbXNnIGNhbiBiZSBjYWNoZWQgb3Igbm90
LgorICoKKyAqIFJldHVybnM6IGEgI1dlYktpdFNvdXBDYWNoZWFiaWxpdHkgdmFsdWUgaW5kaWNh
dGluZyB3aGV0aGVyIHRoZSBAbXNnIGNhbiBiZSBjYWNoZWQgb3Igbm90LgorICoqLworV2ViS2l0
U291cENhY2hlYWJpbGl0eQord2Via2l0X3NvdXBfY2FjaGVfZ2V0X2NhY2hlYWJpbGl0eSAoV2Vi
S2l0U291cENhY2hlICpjYWNoZSwgU291cE1lc3NhZ2UgKm1zZykKK3sKKwlnX3JldHVybl92YWxf
aWZfZmFpbCAoV0VCS0lUX0lTX1NPVVBfQ0FDSEUgKGNhY2hlKSwgV0VCS0lUX1NPVVBfQ0FDSEVf
VU5DQUNIRUFCTEUpOworCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChTT1VQX0lTX01FU1NBR0UgKG1z
ZyksIFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFKTsKKworCXJldHVybiBXRUJLSVRfU09V
UF9DQUNIRV9HRVRfQ0xBU1MgKGNhY2hlKS0+Z2V0X2NhY2hlYWJpbGl0eSAoY2FjaGUsIG1zZyk7
Cit9CisKK3N0YXRpYyBnYm9vbGVhbgorZm9yY2VfZmx1c2hfdGltZW91dCAoZ3BvaW50ZXIgZGF0
YSkKK3sKKwlnYm9vbGVhbiAqZm9yY2VkID0gKGdib29sZWFuICopZGF0YTsKKwkqZm9yY2VkID0g
VFJVRTsKKworCXJldHVybiBGQUxTRTsKK30KKworLyoqCisgKiB3ZWJraXRfc291cF9jYWNoZV9m
bHVzaDoKKyAqIEBjYWNoZTogYSAjV2ViS2l0U291cENhY2hlCisgKiBAc2Vzc2lvbjogdGhlICNT
b3VwU2Vzc2lvbiBhc3NvY2lhdGVkIHdpdGggdGhlIEBjYWNoZQorICoKKyAqIFRoaXMgZnVuY3Rp
b24gd2lsbCBmb3JjZSBhbGwgcGVuZGluZyB3cml0ZXMgaW4gdGhlIEBjYWNoZSB0byBiZQorICog
Y29tbWl0dGVkIHRvIGRpc2suIEZvciBkb2luZyBzbyBpdCB3aWxsIGl0ZXJhdGUgdGhlICNHTWFp
bkNvbnRleHQKKyAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgQHNlc3Npb24gKHdoaWNoIGNhbiBiZSB0
aGUgZGVmYXVsdCBvbmUpIGFzIGxvbmcKKyAqIGFzIG5lZWRlZC4KKyAqKi8KK3ZvaWQKK3dlYmtp
dF9zb3VwX2NhY2hlX2ZsdXNoIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKQoreworCUdNYWluQ29u
dGV4dCAqYXN5bmNfY29udGV4dDsKKwlTb3VwU2Vzc2lvbiAqc2Vzc2lvbjsKKwlndWludCB0aW1l
b3V0X2lkOworCWdib29sZWFuIGZvcmNlZCA9IEZBTFNFOworCisJZ19yZXR1cm5faWZfZmFpbCAo
V0VCS0lUX0lTX1NPVVBfQ0FDSEUgKGNhY2hlKSk7CisKKwlzZXNzaW9uID0gY2FjaGUtPnByaXYt
PnNlc3Npb247CisJZ19yZXR1cm5faWZfZmFpbCAoU09VUF9JU19TRVNTSU9OIChzZXNzaW9uKSk7
CisJYXN5bmNfY29udGV4dCA9IHNvdXBfc2Vzc2lvbl9nZXRfYXN5bmNfY29udGV4dCAoc2Vzc2lv
bik7CisKKwkvKiBXZSBnaXZlIGNhY2hlIDEwIHNlY3MgdG8gZmluaXNoICovCisJdGltZW91dF9p
ZCA9IGdfdGltZW91dF9hZGQgKDEwMDAwLCBmb3JjZV9mbHVzaF90aW1lb3V0LCAmZm9yY2VkKTsK
KworCXdoaWxlICghZm9yY2VkICYmIGNhY2hlLT5wcml2LT5uX3BlbmRpbmcgPiAwKQorCQlnX21h
aW5fY29udGV4dF9pdGVyYXRpb24gKGFzeW5jX2NvbnRleHQsIEZBTFNFKTsKKworCWlmICghZm9y
Y2VkKQorCQlnX3NvdXJjZV9yZW1vdmUgKHRpbWVvdXRfaWQpOworCWVsc2UKKwkJZ193YXJuaW5n
ICgiQ2FjaGUgZmx1c2ggZmluaXNoZWQgZGVzcGl0ZSAlZCBwZW5kaW5nIHJlcXVlc3RzIiwgY2Fj
aGUtPnByaXYtPm5fcGVuZGluZyk7Cit9CisKK3N0YXRpYyB2b2lkCitjbGVhcl9jYWNoZV9pdGVt
IChncG9pbnRlciBrZXksCisJCSAgZ3BvaW50ZXIgdmFsdWUsCisJCSAgV2ViS2l0U291cENhY2hl
ICpjYWNoZSkKK3sKKwlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkgPSBnX2hhc2hfdGFibGVf
bG9va3VwIChjYWNoZS0+cHJpdi0+Y2FjaGUsIChjb25zdCBnY2hhciAqKWtleSk7CisJaWYgKHdl
YmtpdF9zb3VwX2NhY2hlX2VudHJ5X3JlbW92ZSAoY2FjaGUsIGVudHJ5KSkKKwkJd2Via2l0X3Nv
dXBfY2FjaGVfZW50cnlfZnJlZSAoZW50cnksIFRSVUUpOworfQorCisvKioKKyAqIHdlYmtpdF9z
b3VwX2NhY2hlX2NsZWFyOgorICogQGNhY2hlOiBhICNXZWJLaXRTb3VwQ2FjaGUKKyAqCisgKiBX
aWxsIHJlbW92ZSBhbGwgZW50cmllcyBpbiB0aGUgQGNhY2hlIHBsdXMgYWxsIHRoZSBjYWNoZSBm
aWxlcworICogYXNzb2NpYXRlZCB3aXRoIHRoZW0uCisgKiovCit2b2lkCit3ZWJraXRfc291cF9j
YWNoZV9jbGVhciAoV2ViS2l0U291cENhY2hlICpjYWNoZSkKK3sKKwlHSGFzaFRhYmxlICpoYXNo
OworCisJZ19yZXR1cm5faWZfZmFpbCAoV0VCS0lUX0lTX1NPVVBfQ0FDSEUgKGNhY2hlKSk7CisK
KwloYXNoID0gY2FjaGUtPnByaXYtPmNhY2hlOworCWdfcmV0dXJuX2lmX2ZhaWwgKGhhc2gpOwor
CisJZ19oYXNoX3RhYmxlX2ZvcmVhY2ggKGhhc2gsIChHSEZ1bmMpY2xlYXJfY2FjaGVfaXRlbSwg
Y2FjaGUpOworfQorCitTb3VwTWVzc2FnZSAqCit3ZWJraXRfc291cF9jYWNoZV9nZW5lcmF0ZV9j
b25kaXRpb25hbF9yZXF1ZXN0IChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLCBTb3VwTWVzc2FnZSAq
b3JpZ2luYWwpCit7CisJU291cE1lc3NhZ2UgKm1zZzsKKwlTb3VwVVJJICp1cmk7CisJV2ViS2l0
U291cENhY2hlRW50cnkgKmVudHJ5OworCWNoYXIgKmtleTsKKwljb25zdCBjaGFyICp2YWx1ZTsK
KworCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChXRUJLSVRfSVNfU09VUF9DQUNIRSAoY2FjaGUpLCBO
VUxMKTsKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoU09VUF9JU19NRVNTQUdFIChvcmlnaW5hbCks
IE5VTEwpOworCisJLyogRmlyc3QgY29weSB0aGUgZGF0YSB3ZSBuZWVkIGZyb20gdGhlIG9yaWdp
bmFsIG1lc3NhZ2UgKi8KKwl1cmkgPSBzb3VwX21lc3NhZ2VfZ2V0X3VyaSAob3JpZ2luYWwpOwor
CW1zZyA9IHNvdXBfbWVzc2FnZV9uZXdfZnJvbV91cmkgKG9yaWdpbmFsLT5tZXRob2QsIHVyaSk7
CisKKwlzb3VwX21lc3NhZ2VfaGVhZGVyc19mb3JlYWNoIChvcmlnaW5hbC0+cmVxdWVzdF9oZWFk
ZXJzLAorCQkJCSAgICAgIChTb3VwTWVzc2FnZUhlYWRlcnNGb3JlYWNoRnVuYyljb3B5X2hlYWRl
cnMsCisJCQkJICAgICAgbXNnLT5yZXF1ZXN0X2hlYWRlcnMpOworCisJLyogTm93IGFkZCB0aGUg
dmFsaWRhdG9yIGVudHJpZXMgaW4gdGhlIGhlYWRlciBmcm9tIHRoZSBjYWNoZWQKKwkgICBkYXRh
ICovCisJa2V5ID0gc291cF9tZXNzYWdlX2dldF9jYWNoZV9rZXkgKG9yaWdpbmFsKTsKKwllbnRy
eSA9IGdfaGFzaF90YWJsZV9sb29rdXAgKGNhY2hlLT5wcml2LT5jYWNoZSwga2V5KTsKKwlnX2Zy
ZWUgKGtleSk7CisKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoZW50cnksIE5VTEwpOworCisJZW50
cnktPmJlaW5nX3ZhbGlkYXRlZCA9IFRSVUU7CisKKwl2YWx1ZSA9IHNvdXBfbWVzc2FnZV9oZWFk
ZXJzX2dldCAoZW50cnktPmhlYWRlcnMsICJMYXN0LU1vZGlmaWVkIik7CisJaWYgKHZhbHVlKQor
CQlzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQgKG1zZy0+cmVxdWVzdF9oZWFkZXJzLAorCQkJ
CQkgICAgICJJZi1Nb2RpZmllZC1TaW5jZSIsCisJCQkJCSAgICAgdmFsdWUpOworCXZhbHVlID0g
c291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0IChlbnRyeS0+aGVhZGVycywgIkVUYWciKTsKKwlpZiAo
dmFsdWUpCisJCXNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZCAobXNnLT5yZXF1ZXN0X2hlYWRl
cnMsCisJCQkJCSAgICAgIklmLU5vbmUtTWF0Y2giLAorCQkJCQkgICAgIHZhbHVlKTsKKwlyZXR1
cm4gbXNnOworfQorCisjZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX0ZJTEUgInNvdXAuY2FjaGUi
CisKKyNkZWZpbmUgV0VCS0lUX1NPVVBfQ0FDSEVfSEVBREVSU19GT1JNQVQgIntzc30iCisjZGVm
aW5lIFdFQktJVF9TT1VQX0NBQ0hFX1BIRUFERVJTX0ZPUk1BVCAiKHNzYnV1dXV1YSIgV0VCS0lU
X1NPVVBfQ0FDSEVfSEVBREVSU19GT1JNQVQgIikiCisjZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hF
X0VOVFJJRVNfRk9STUFUICJhIiBXRUJLSVRfU09VUF9DQUNIRV9QSEVBREVSU19GT1JNQVQKKwor
LyogQmFzaWNhbGx5IHRoZSBzYW1lIGZvcm1hdCB0aGFuIGFib3ZlIGV4Y2VwdCB0aGF0IHNvbWUg
c3RyaW5ncyBhcmUKKyAgIHByZXBlbmRlZCB3aXRoICYuIFRoaXMgd2F5IHRoZSBHVmFyaWFudCBy
ZXR1cm5zIGEgcG9pbnRlciB0byB0aGUKKyAgIGRhdGEgaW5zdGVhZCBvZiBkdXBsaWNhdGluZyB0
aGUgc3RyaW5nICovCisjZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX0RFQ09ERV9IRUFERVJTX0ZP
Uk1BVCAieyZzJnN9IgorCitzdGF0aWMgdm9pZAorcGFja19lbnRyeSAoZ3BvaW50ZXIgZGF0YSwK
KwkgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRy
eSA9IChXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqKSBkYXRhOworCVNvdXBNZXNzYWdlSGVhZGVyc0l0
ZXIgaXRlcjsKKwljb25zdCBnY2hhciAqaGVhZGVyX2tleSwgKmhlYWRlcl92YWx1ZTsKKwlHVmFy
aWFudEJ1aWxkZXIgKmhlYWRlcnNfYnVpbGRlcjsKKwlHVmFyaWFudEJ1aWxkZXIgKmVudHJpZXNf
YnVpbGRlciA9IChHVmFyaWFudEJ1aWxkZXIgKil1c2VyX2RhdGE7CisKKwkvKiBEbyBub3Qgc3Rv
cmUgbm9uLWNvbnNvbGlkYXRlZCBlbnRyaWVzICovCisJaWYgKGVudHJ5LT5kaXJ0eSB8fCBlbnRy
eS0+d3JpdGluZyB8fCAhZW50cnktPmtleSkKKwkJcmV0dXJuOworCisJLyogUGFjayBoZWFkZXJz
ICovCisJaGVhZGVyc19idWlsZGVyID0gZ192YXJpYW50X2J1aWxkZXJfbmV3IChHX1ZBUklBTlRf
VFlQRV9BUlJBWSk7CisJc291cF9tZXNzYWdlX2hlYWRlcnNfaXRlcl9pbml0ICgmaXRlciwgZW50
cnktPmhlYWRlcnMpOworCXdoaWxlIChzb3VwX21lc3NhZ2VfaGVhZGVyc19pdGVyX25leHQgKCZp
dGVyLCAmaGVhZGVyX2tleSwgJmhlYWRlcl92YWx1ZSkpIHsKKwkJaWYgKGdfdXRmOF92YWxpZGF0
ZSAoaGVhZGVyX3ZhbHVlLCAtMSwgTlVMTCkpCisJCQlnX3ZhcmlhbnRfYnVpbGRlcl9hZGQgKGhl
YWRlcnNfYnVpbGRlciwgV0VCS0lUX1NPVVBfQ0FDSEVfSEVBREVSU19GT1JNQVQsCisJCQkJCSAg
ICAgICBoZWFkZXJfa2V5LCBoZWFkZXJfdmFsdWUpOworCX0KKworCS8qIEVudHJ5IGRhdGEgKi8K
KwlnX3ZhcmlhbnRfYnVpbGRlcl9hZGQgKGVudHJpZXNfYnVpbGRlciwgV0VCS0lUX1NPVVBfQ0FD
SEVfUEhFQURFUlNfRk9STUFULAorCQkJICAgICAgIGVudHJ5LT5rZXksIGVudHJ5LT5maWxlbmFt
ZSwgZW50cnktPm11c3RfcmV2YWxpZGF0ZSwKKwkJCSAgICAgICBlbnRyeS0+ZnJlc2huZXNzX2xp
ZmV0aW1lLCBlbnRyeS0+Y29ycmVjdGVkX2luaXRpYWxfYWdlLAorCQkJICAgICAgIGVudHJ5LT5y
ZXNwb25zZV90aW1lLCBlbnRyeS0+aGl0cywgZW50cnktPmxlbmd0aCwgaGVhZGVyc19idWlsZGVy
KTsKKworCWdfdmFyaWFudF9idWlsZGVyX3VucmVmIChoZWFkZXJzX2J1aWxkZXIpOworfQorCit2
b2lkCit3ZWJraXRfc291cF9jYWNoZV9kdW1wIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKQorewor
CVdlYktpdFNvdXBDYWNoZVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9DQUNIRV9HRVRfUFJJ
VkFURSAoY2FjaGUpOworCWdjaGFyICpmaWxlbmFtZTsKKwlHVmFyaWFudEJ1aWxkZXIgKmVudHJp
ZXNfYnVpbGRlcjsKKwlHVmFyaWFudCAqY2FjaGVfdmFyaWFudDsKKworCWlmICghZ19saXN0X2xl
bmd0aCAoY2FjaGUtPnByaXYtPmxydV9zdGFydCkpCisJCXJldHVybjsKKworCS8qIENyZWF0ZSB0
aGUgYnVpbGRlciBhbmQgaXRlcmF0ZSBvdmVyIGFsbCBlbnRyaWVzICovCisJZW50cmllc19idWls
ZGVyID0gZ192YXJpYW50X2J1aWxkZXJfbmV3IChHX1ZBUklBTlRfVFlQRV9BUlJBWSk7CisJZ19s
aXN0X2ZvcmVhY2ggKGNhY2hlLT5wcml2LT5scnVfc3RhcnQsIHBhY2tfZW50cnksIGVudHJpZXNf
YnVpbGRlcik7CisKKwkvKiBTZXJpYWxpemUgYW5kIGR1bXAgKi8KKwljYWNoZV92YXJpYW50ID0g
Z192YXJpYW50X25ldyAoV0VCS0lUX1NPVVBfQ0FDSEVfRU5UUklFU19GT1JNQVQsIGVudHJpZXNf
YnVpbGRlcik7CisJZ192YXJpYW50X2J1aWxkZXJfdW5yZWYgKGVudHJpZXNfYnVpbGRlcik7CisK
KwlmaWxlbmFtZSA9IGdfYnVpbGRfZmlsZW5hbWUgKHByaXYtPmNhY2hlX2RpciwgV0VCS0lUX1NP
VVBfQ0FDSEVfRklMRSwgTlVMTCk7CisJZ19maWxlX3NldF9jb250ZW50cyAoZmlsZW5hbWUsIChj
b25zdCBnY2hhciAqKWdfdmFyaWFudF9nZXRfZGF0YSAoY2FjaGVfdmFyaWFudCksCisJCQkgICAg
IGdfdmFyaWFudF9nZXRfc2l6ZSAoY2FjaGVfdmFyaWFudCksIE5VTEwpOworCWdfZnJlZSAoZmls
ZW5hbWUpOworCWdfdmFyaWFudF91bnJlZiAoY2FjaGVfdmFyaWFudCk7Cit9CisKK3ZvaWQKK3dl
YmtpdF9zb3VwX2NhY2hlX2xvYWQgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUpCit7CisJZ2NoYXIg
KmZpbGVuYW1lID0gTlVMTCwgKmNvbnRlbnRzID0gTlVMTDsKKwlHVmFyaWFudCAqY2FjaGVfdmFy
aWFudDsKKwlHVmFyaWFudEl0ZXIgKmVudHJpZXNfaXRlciwgKmhlYWRlcnNfaXRlcjsKKwlHVmFy
aWFudFR5cGUgKnZhcmlhbnRfZm9ybWF0OworCWdzaXplIGxlbmd0aDsKKwlXZWJLaXRTb3VwQ2Fj
aGVFbnRyeSAqZW50cnk7CisJV2ViS2l0U291cENhY2hlUHJpdmF0ZSAqcHJpdiA9IGNhY2hlLT5w
cml2OworCisJZmlsZW5hbWUgPSBnX2J1aWxkX2ZpbGVuYW1lIChwcml2LT5jYWNoZV9kaXIsIFdF
QktJVF9TT1VQX0NBQ0hFX0ZJTEUsIE5VTEwpOworCWlmICghZ19maWxlX2dldF9jb250ZW50cyAo
ZmlsZW5hbWUsICZjb250ZW50cywgJmxlbmd0aCwgTlVMTCkpIHsKKwkJZ19mcmVlIChmaWxlbmFt
ZSk7CisJCXJldHVybjsKKwl9CisJZ19mcmVlIChmaWxlbmFtZSk7CisKKwl2YXJpYW50X2Zvcm1h
dCA9IGdfdmFyaWFudF90eXBlX25ldyAoV0VCS0lUX1NPVVBfQ0FDSEVfRU5UUklFU19GT1JNQVQp
OworCWNhY2hlX3ZhcmlhbnQgPSBnX3ZhcmlhbnRfbmV3X2Zyb21fZGF0YSAodmFyaWFudF9mb3Jt
YXQsIChjb25zdCBnY2hhciAqKWNvbnRlbnRzLCBsZW5ndGgsIEZBTFNFLCBOVUxMLCBOVUxMKTsK
KwlnX3ZhcmlhbnRfdHlwZV9mcmVlICh2YXJpYW50X2Zvcm1hdCk7CisKKwlnX3ZhcmlhbnRfZ2V0
IChjYWNoZV92YXJpYW50LCBXRUJLSVRfU09VUF9DQUNIRV9FTlRSSUVTX0ZPUk1BVCwgJmVudHJp
ZXNfaXRlcik7CisJZW50cnkgPSBnX3NsaWNlX25ldzAgKFdlYktpdFNvdXBDYWNoZUVudHJ5KTsK
KworCXdoaWxlIChnX3ZhcmlhbnRfaXRlcl9sb29wIChlbnRyaWVzX2l0ZXIsIFdFQktJVF9TT1VQ
X0NBQ0hFX1BIRUFERVJTX0ZPUk1BVCwKKwkJCQkgICAgJmVudHJ5LT5rZXksICZlbnRyeS0+Zmls
ZW5hbWUsICZlbnRyeS0+bXVzdF9yZXZhbGlkYXRlLAorCQkJCSAgICAmZW50cnktPmZyZXNobmVz
c19saWZldGltZSwgJmVudHJ5LT5jb3JyZWN0ZWRfaW5pdGlhbF9hZ2UsCisJCQkJICAgICZlbnRy
eS0+cmVzcG9uc2VfdGltZSwgJmVudHJ5LT5oaXRzLCAmZW50cnktPmxlbmd0aCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZoZWFkZXJzX2l0ZXIpKSB7CisJCWNvbnN0IGdj
aGFyICpoZWFkZXJfa2V5LCAqaGVhZGVyX3ZhbHVlOworCisJCS8qIFNvdXBNZXNzYWdlIEhlYWRl
cnMgKi8KKwkJZW50cnktPmhlYWRlcnMgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19uZXcgKFNPVVBf
TUVTU0FHRV9IRUFERVJTX1JFU1BPTlNFKTsKKwkJd2hpbGUgKGdfdmFyaWFudF9pdGVyX2xvb3Ag
KGhlYWRlcnNfaXRlciwgV0VCS0lUX1NPVVBfQ0FDSEVfREVDT0RFX0hFQURFUlNfRk9STUFULCAm
aGVhZGVyX2tleSwgJmhlYWRlcl92YWx1ZSkpCisJCQlzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBl
bmQgKGVudHJ5LT5oZWFkZXJzLCBoZWFkZXJfa2V5LCBoZWFkZXJfdmFsdWUpOworCisJCS8qIElu
c2VydCBpbiBjYWNoZSAqLworCQlpZiAoIXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2luc2VydF9i
eV9rZXkgKGNhY2hlLCAoY29uc3QgZ2NoYXIgKillbnRyeS0+a2V5LCBlbnRyeSwgRkFMU0UpKQor
CQkJd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfZnJlZSAoZW50cnksIFRSVUUpOworCisJCS8qIE5l
dyBlbnRyeSBmb3IgdGhlIG5leHQgaXRlcmF0aW9uLiBUaGlzIGNyZWF0ZXMgYW4KKwkJICAgZXh0
cmEgb2JqZWN0IHRoZSBsYXN0IGl0ZXJhdGlvbiBidXQgaXQncyB3b3J0aCBpdAorCQkgICBhcyB3
ZSBzYXZlIHNldmVyYWwgaWYncyAqLworCQllbnRyeSA9IGdfc2xpY2VfbmV3MCAoV2ViS2l0U291
cENhY2hlRW50cnkpOworCX0KKwkvKiBSZW1vdmUgbGFzdCBjcmVhdGVkIGVudHJ5ICovCisJZ19z
bGljZV9mcmVlIChXZWJLaXRTb3VwQ2FjaGVFbnRyeSwgZW50cnkpOworCisJLyogU29ydCBMUlUg
KHNob3VsZG4ndCBiZSBuZWVkZWQpLiBGaXJzdCByZXZlcnNlIGFzIGVsZW1lbnRzCisJICogYXJl
IGFsd2F5cyBwcmVwZW5kZWQgd2hlbiBpbnNlcnRpbmcKKwkgKi8KKwljYWNoZS0+cHJpdi0+bHJ1
X3N0YXJ0ID0gZ19saXN0X3JldmVyc2UgKGNhY2hlLT5wcml2LT5scnVfc3RhcnQpOworCWNhY2hl
LT5wcml2LT5scnVfc3RhcnQgPSBnX2xpc3Rfc29ydCAoY2FjaGUtPnByaXYtPmxydV9zdGFydCwg
bHJ1X2NvbXBhcmVfZnVuYyk7CisKKwkvKiBmcmVlcyAqLworCWdfdmFyaWFudF9pdGVyX2ZyZWUg
KGVudHJpZXNfaXRlcik7CisJZ192YXJpYW50X3VucmVmIChjYWNoZV92YXJpYW50KTsKK30KKwor
dm9pZAord2Via2l0X3NvdXBfY2FjaGVfc2V0X21heF9zaXplIChXZWJLaXRTb3VwQ2FjaGUgKmNh
Y2hlLAorCQkJCWd1aW50IG1heF9zaXplKQoreworCWNhY2hlLT5wcml2LT5tYXhfc2l6ZSA9IG1h
eF9zaXplOworCWNhY2hlLT5wcml2LT5tYXhfZW50cnlfZGF0YV9zaXplID0gY2FjaGUtPnByaXYt
Pm1heF9zaXplIC8gTUFYX0VOVFJZX0RBVEFfUEVSQ0VOVEFHRTsKK30KKworZ3VpbnQKK3dlYmtp
dF9zb3VwX2NhY2hlX2dldF9tYXhfc2l6ZSAoV2ViS2l0U291cENhY2hlICpjYWNoZSkKK3sKKwly
ZXR1cm4gY2FjaGUtPnByaXYtPm1heF9zaXplOworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUuaCBiL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE2MmJiOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLmgKQEAgLTAs
MCArMSw5NiBAQAorLyogLSotIE1vZGU6IEM7IHRhYi13aWR0aDogODsgaW5kZW50LXRhYnMtbW9k
ZTogdDsgYy1iYXNpYy1vZmZzZXQ6IDggLSotICovCisvKgorICogc291cC1jYWNoZS5oOgorICoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXRUJLSVRf
U09VUF9DQUNIRV9ICisjZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX0ggMQorCisjaW5jbHVkZSA8
d2Via2l0L3dlYmtpdGRlZmluZXMuaD4KKworI2luY2x1ZGUgPGxpYnNvdXAvc291cC10eXBlcy5o
PgorI2luY2x1ZGUgPGdpby9naW8uaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJ
VF9UWVBFX1NPVVBfQ0FDSEUgICAgICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfZ2V0X3R5cGUg
KCkpCisjZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFKG9iaikgICAgICAgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFLCBXZWJLaXRT
b3VwQ2FjaGUpKQorI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9DTEFTUyhrbGFzcykgICAgKEdf
VFlQRV9DSEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFLCBX
ZWJLaXRTb3VwQ2FjaGVDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19TT1VQX0NBQ0hFKG9iaikg
ICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBXRUJLSVRfVFlQRV9T
T1VQX0NBQ0hFKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1NPVVBfQ0FDSEVfQ0xBU1Moa2xhc3MpIChH
X1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUpKQor
I2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5D
RV9HRVRfQ0xBU1MgKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFLCBXZWJLaXRTb3VwQ2Fj
aGVDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRTb3VwQ2FjaGUgV2ViS2l0U291cENh
Y2hlOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBDYWNoZVByaXZhdGUgV2ViS2l0U291cENh
Y2hlUHJpdmF0ZTsKKwordHlwZWRlZiBlbnVtIHsKKwlXRUJLSVRfU09VUF9DQUNIRV9DQUNIRUFC
TEUgPSAoMSA8PCAwKSwKKwlXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRSA9ICgxIDw8IDEp
LAorCVdFQktJVF9TT1VQX0NBQ0hFX0lOVkFMSURBVEVTID0gKDEgPDwgMiksCisJV0VCS0lUX1NP
VVBfQ0FDSEVfVkFMSURBVEVTID0gKDEgPDwgMykKK30gV2ViS2l0U291cENhY2hlYWJpbGl0eTsK
KwordHlwZWRlZiBlbnVtIHsKKwlXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9GUkVTSCwKKwlX
RUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9ORUVEU19WQUxJREFUSU9OLAorCVdFQktJVF9TT1VQ
X0NBQ0hFX1JFU1BPTlNFX1NUQUxFCit9IFdlYktpdFNvdXBDYWNoZVJlc3BvbnNlOworCit0eXBl
ZGVmIGVudW0geworCVdFQktJVF9TT1VQX0NBQ0hFX1NJTkdMRV9VU0VSLAorCVdFQktJVF9TT1VQ
X0NBQ0hFX1NIQVJFRAorfSBXZWJLaXRTb3VwQ2FjaGVUeXBlOworCitzdHJ1Y3QgX1dlYktpdFNv
dXBDYWNoZSB7CisJR09iamVjdCBwYXJlbnRfaW5zdGFuY2U7CisKKwlXZWJLaXRTb3VwQ2FjaGVQ
cml2YXRlICpwcml2OworfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCUdPYmplY3RDbGFzcyBwYXJl
bnRfY2xhc3M7CisKKwkvKiBtZXRob2RzICovCisJV2ViS2l0U291cENhY2hlYWJpbGl0eSAoKmdl
dF9jYWNoZWFiaWxpdHkpKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsIFNvdXBNZXNzYWdlICptc2cp
OworCisJLyogUGFkZGluZyBmb3IgZnV0dXJlIGV4cGFuc2lvbiAqLworCXZvaWQgKCpfbGlic291
cF9yZXNlcnZlZDEpKHZvaWQpOworCXZvaWQgKCpfbGlic291cF9yZXNlcnZlZDIpKHZvaWQpOwor
CXZvaWQgKCpfbGlic291cF9yZXNlcnZlZDMpKHZvaWQpOworfSBXZWJLaXRTb3VwQ2FjaGVDbGFz
czsKKworV0VCS0lUX0FQSSBHVHlwZSAgICAgICAgICAgICB3ZWJraXRfc291cF9jYWNoZV9nZXRf
dHlwZSAodm9pZCk7CitXRUJLSVRfQVBJIFdlYktpdFNvdXBDYWNoZSAgKndlYmtpdF9zb3VwX2Nh
Y2hlX25ldyAoY29uc3QgY2hhciAgKmNhY2hlX2RpciwKKwkJCQkJCSAgICBXZWJLaXRTb3VwQ2Fj
aGVUeXBlIGNhY2hlX3R5cGUpOworV0VCS0lUX0FQSSB2b2lkICAgICAgICAgICAgICB3ZWJraXRf
c291cF9jYWNoZV9mbHVzaCAoV2ViS2l0U291cENhY2hlICAgKmNhY2hlKTsKK1dFQktJVF9BUEkg
dm9pZCAgICAgICAgICAgICAgd2Via2l0X3NvdXBfY2FjaGVfY2xlYXIgKFdlYktpdFNvdXBDYWNo
ZSAgICpjYWNoZSk7CisKK1dFQktJVF9BUEkgdm9pZCAgICAgICAgICAgICAgd2Via2l0X3NvdXBf
Y2FjaGVfZHVtcCAoV2ViS2l0U291cENhY2hlICpjYWNoZSk7CitXRUJLSVRfQVBJIHZvaWQgICAg
ICAgICAgICAgIHdlYmtpdF9zb3VwX2NhY2hlX2xvYWQgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUp
OworCitXRUJLSVRfQVBJIHZvaWQgICAgICAgICAgICAgIHdlYmtpdF9zb3VwX2NhY2hlX3NldF9t
YXhfc2l6ZSAoV2ViS2l0U291cENhY2hlICpjYWNoZSwKKwkJCQkJCQkgICAgIGd1aW50IG1heF9z
aXplKTsKK1dFQktJVF9BUEkgZ3VpbnQgICAgICAgICAgICAgd2Via2l0X3NvdXBfY2FjaGVfZ2V0
X21heF9zaXplIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKTsKKworR19FTkRfREVDTFMKKworCisj
ZW5kaWYgLyogV0VCS0lUX1NPVVBfQ0FDSEVfSCAqLworCmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cgYi9XZWJLaXRUb29scy9DaGFuZ2VMb2cKaW5kZXggNzdhMjkwNS4uNzdkYTQ0
NiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1dlYktpdFRvb2xzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDEwLTA5LTA2ICBTZXJnaW8gVmlsbGFyIFNlbmlu
ICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtHVEtdIEFkZCBIVFRQIGNhY2hpbmcgc3VwcG9ydAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQyNjEKKworICAgICAgICAq
IEdOVW1ha2VmaWxlLmFtOiBhZGRlZCBwYXRocyBmb3IgdGhlIG5ldyBzb3VwIEhUVFAgY2FjaGUg
Y29kZQorCiAyMDEwLTEwLTAyICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29t
PgogCiAgICAgICAgIEFkZCB0aGUgYWJpbGl0eSB0byBqdW1wIHRvIGEgc3BlY2lmaWMgdGVzdC4K
ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0dOVW1ha2VmaWxlLmFtIGIvV2ViS2l0VG9vbHMvR05V
bWFrZWZpbGUuYW0KaW5kZXggMTU5OWU4OS4uNTI1N2VjZSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9v
bHMvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViS2l0VG9vbHMvR05VbWFrZWZpbGUuYW0KQEAgLTYs
NiArNiw3IEBAIG5vaW5zdF9QUk9HUkFNUyArPSBcCiAjIEd0a0xhdW5jaGVyCiBQcm9ncmFtc19H
dGtMYXVuY2hlcl9DUFBGTEFHUyA9IFwKIAktSSQoc3JjZGlyKS9XZWJLaXQvZ3RrIFwKKwktSSQo
c3JjZGlyKS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS8gXAogCS1JJCh0b3Bf
YnVpbGRkaXIpL1dlYktpdC9ndGsgXAogCS1JJCh0b3BfYnVpbGRkaXIpL0Rlcml2ZWRTb3VyY2Vz
IFwKIAkkKGdsb2JhbF9jcHBmbGFncykgXApAQCAtMzgsNiArMzksNyBAQCBkdW1wcmVuZGVydHJl
ZV9jcHBmbGFncyA6PSBcCiAJLUkkKHNyY2RpcikvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
Z3RrIFwKIAktSSQoc3JjZGlyKS9XZWJLaXQvZ3RrIFwKIAktSSQoc3JjZGlyKS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ayBcCisJLUkkKHNyY2RpcikvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
Y2FjaGUvIFwKIAktSSQodG9wX2J1aWxkZGlyKS9XZWJLaXQvZ3RrIFwKIAktSSQodG9wX2J1aWxk
ZGlyKS9EZXJpdmVkU291cmNlcyBcCiAJJChnbG9iYWxfY3BwZmxhZ3MpIFwKZGlmZiAtLWdpdCBh
L2F1dG90b29scy93ZWJraXQubTQgYi9hdXRvdG9vbHMvd2Via2l0Lm00CmluZGV4IDM3OWZhOGYu
LjZiNDRmMzAgMTAwNjQ0Ci0tLSBhL2F1dG90b29scy93ZWJraXQubTQKKysrIGIvYXV0b3Rvb2xz
L3dlYmtpdC5tNApAQCAtMTA4LDcgKzEwOCw3IEBAIEFDX0RFRlVOX09OQ0UoW19XRUJLSVRfQ0hF
Q0tfR0xJQl0sCiBbZG5sCiBkbmwgY2hlY2sgZm9yIGdsaWIKICMgVmVyc2lvbiByZXF1aXJlbWVu
dHMKLUdMSUJfUkVRVUlSRURfVkVSU0lPTj0yLjIxLjMKK0dMSUJfUkVRVUlSRURfVkVSU0lPTj0y
LjI0CiBHT0JKRUNUX1JFUVVJUkVEX1ZFUlNJT049Mi4wCiBHVEhSRUFEX1JFUVVJUkVEX1ZFUlNJ
T049Mi4wCiAKLS0gCjEuNy4xCgo=
</data>
<flag name="review"
          id="59549"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70628</attachid>
            <date>2010-10-13 10:55:47 -0700</date>
            <delta_ts>2010-10-13 18:37:28 -0700</delta_ts>
            <desc>Imported SoupURILoader to Webkit. New public API for HTTP cache</desc>
            <filename>0001-Imported-SoupURILoader-code-to-WebKit.-New-public-AP.patch</filename>
            <type>text/plain</type>
            <size>179199</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">RnJvbSAxYTUwZDZjNzMwNDQ2MmYwY2ExNjdmNTg4Nzk3YzkxMTg3ZmQ0NzczIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTZXJnaW8gVmlsbGFyIFNlbmluIDxzdmlsbGFyQGlnYWxpYS5j
b20+CkRhdGU6IFdlZCwgMjIgU2VwIDIwMTAgMTA6MTY6NDQgKzAyMDAKU3ViamVjdDogW1BBVENI
IDEvMl0gSW1wb3J0ZWQgU291cFVSSUxvYWRlciBjb2RlIHRvIFdlYktpdC4gTmV3IHB1YmxpYyBB
UEkgZm9yIEhUVFAgY2FjaGUKCi0tLQogQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgIDE0ICsKIEdOVW1ha2VmaWxlLmFtICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgICAxMCArLQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTk0ICsrKwogV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIwICstCiAuLi4vc291cC9jYWNo
ZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uYyAgICAgICB8ICAyMDAgKysrCiAuLi4vc291
cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uaCAgICAgICB8ICAgNjIgKwogLi4u
L25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmMgICAgfCAgOTIxICsr
KysrKysrKysrCiAuLi4vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0u
aCAgICB8ICAgNzcgKwogLi4uL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5j
ICAgICAgICAgfCAgMTcwICsrCiAuLi4vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1k
YXRhLmggICAgICAgICB8ICAgNTIgKwogLi4uL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVl
c3QtZmlsZS5jICAgICAgICAgfCAgMzMyICsrKysKIC4uLi9uZXR3b3JrL3NvdXAvY2FjaGUvc291
cC1yZXF1ZXN0LWZpbGUuaCAgICAgICAgIHwgICA1NCArCiAuLi4vbmV0d29yay9zb3VwL2NhY2hl
L3NvdXAtcmVxdWVzdC1odHRwLmMgICAgICAgICB8ICAzNDAgKysrKwogLi4uL25ldHdvcmsvc291
cC9jYWNoZS9zb3VwLXJlcXVlc3QtaHR0cC5oICAgICAgICAgfCAgIDU0ICsKIFdlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5jIHwgIDMxMiArKysrCiBXZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QuaCB8ICAxMDAgKysK
IC4uLi9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuYyAgIHwgIDE4
OCArKysKIC4uLi9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuaCAg
IHwgICA4MSArCiAuLi4vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLXByaXZh
dGUuaCB8ICAgNDIgKwogLi4uL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5j
ICAgICAgICAgfCAxNjUzICsrKysrKysrKysrKysrKysrKysrCiAuLi4vbmV0d29yay9zb3VwL2Nh
Y2hlL3dlYmtpdC9zb3VwLWNhY2hlLmggICAgICAgICB8ICAgOTYgKysKIFdlYktpdFRvb2xzL0No
YW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMSArCiBXZWJLaXRUb29s
cy9HTlVtYWtlZmlsZS5hbSAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKwogYXV0b3Rv
b2xzL3dlYmtpdC5tNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICstCiAy
NCBmaWxlcyBjaGFuZ2VkLCA0OTgxIGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCiBjcmVh
dGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1k
aXJlY3RvcnktaW5wdXQtc3RyZWFtLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uaAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAt
aHR0cC1pbnB1dC1zdHJlYW0uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0uaAogY3JlYXRlIG1vZGUg
MTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1k
YXRhLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9j
YWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWZpbGUuYwogY3JlYXRlIG1vZGUg
MTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1m
aWxlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9j
YWNoZS9zb3VwLXJlcXVlc3QtaHR0cC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuaAogY3JlYXRlIG1vZGUg
MTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5j
CiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUv
c291cC1yZXF1ZXN0LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Rlci5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuaAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3Vw
LWNhY2hlLXByaXZhdGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBX
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5oCgpk
aWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IGUxOTAyZTEuLjg1ZDI2NjIg
MTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAor
MjAxMC0wOS0wNiAgU2VyZ2lvIFZpbGxhciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBBZGQg
SFRUUCBjYWNoaW5nIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ0MjYxCisKKyAgICAgICAgQnVtcCB0aGUgcmVxdWlyZWQgdmVyc2lvbiBv
ZiBHTGliLiBUaGUKKyAgICAgICAgc2VyaWFsaXphdGlvbi9kZXNlcmlhbGl6YXRpb24gY29kZSBv
ZiBsaWJzb3VwIGNhY2hpbmcgY29kZSB1c2VzCisgICAgICAgIEdWYXJpYW50LCB3aGljaCB3YXMg
YWRkZWQgdG8gR0xpYiBpbiB2ZXJzaW9uIDIuMjQuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5h
bTogYWRkZWQgcGF0aHMgZm9yIHNvdXAgSFRUUCBjYWNoZSBjb2RlCisgICAgICAgICogYXV0b3Rv
b2xzL3dlYmtpdC5tNDogdXBncmFkZWQgcmVxdWlyZWQgZ2xpYiB2ZXJzaW9uCisKIDIwMTAtMTAt
MDggIEJhbGF6cyBLZWxlbWVuICA8a2JhbGF6c0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IENzYWJhIE9zenRyb2dvbsOhYy4KZGlmZiAtLWdpdCBhL0dOVW1ha2VmaWxlLmFtIGIv
R05VbWFrZWZpbGUuYW0KaW5kZXggMWM5NWNkMS4uOTM2NTUzNSAxMDA2NDQKLS0tIGEvR05VbWFr
ZWZpbGUuYW0KKysrIGIvR05VbWFrZWZpbGUuYW0KQEAgLTMwOCwyOCArMzA4LDI5IEBAIGdsb2Jh
bF9jcHBmbGFncyArPSBcCiBlbmRpZgogCiB3ZWJraXRndGtfc3RhdGljX2hfYXBpICs9IFwKKwkk
KHNyY2RpcikvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAt
Y2FjaGUuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oIFwKIAkkKHNy
Y2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oIFwKIAkkKHNyY2RpcikvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdGVycm9yLmggXAorCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXRnZW9sb2NhdGlvbnBvbGljeWRlY2lzaW9uLmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXRoaXR0ZXN0cmVzdWx0LmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRuZXR3b3JrcmVxdWVzdC5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0bmV0d29ya3Jlc3BvbnNlLmggXAorCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRzZWN1cml0eW9yaWdpbi5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0c291cGF1dGhkaWFsb2cuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYmJhY2tmb3J3YXJkbGlzdC5oIFwKKwkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0d2ViZGF0YWJhc2UuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdl
YmRhdGFzb3VyY2UuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZy
YW1lLmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJoaXN0b3J5aXRl
bS5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViaW5zcGVjdG9yLmgg
XAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJuYXZpZ2F0aW9uYWN0aW9u
LmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJwb2xpY3lkZWNpc2lv
bi5oIFwKLQkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0Z2VvbG9jYXRpb25wb2xp
Y3lkZWNpc2lvbi5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2VicmVz
b3VyY2UuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnNldHRpbmdz
LmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ3aW5kb3dmZWF0dXJl
cy5oIFwKLQkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oIFwKLQkk
KHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuaCBcCi0JJChzcmNk
aXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNlY3VyaXR5b3JpZ2luLmgKKwkkKHNyY2Rpcikv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oCiAKIHdlYmtpdGd0a19idWlsdF9oX2Fw
aSArPSBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmVyc2lvbi5oCkBAIC01NTQsNiArNTU1
LDcgQEAgbm9pbnN0X1BST0dSQU1TICs9ICQoVEVTVF9QUk9HUykKIHdlYmtpdF90ZXN0c19jZmxh
Z3MgPSBcCiAJLWZuby1zdHJpY3QtYWxpYXNpbmcgXAogCS1JJChzcmNkaXIpL0phdmFTY3JpcHRD
b3JlL0ZvcndhcmRpbmdIZWFkZXJzIFwKKwktSSQoc3JjZGlyKS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9jYWNoZSBcCiAJLUkkKHNyY2RpcikvV2ViS2l0L2d0ayBcCiAJLUkkKHRvcF9i
dWlsZGRpcikvV2ViS2l0L2d0ayBcCiAJLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMg
XApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCA3OWViZWMxLi4wZDk5YTIyIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5NyBAQAorMjAxMC0wOS0wNiAgU2VyZ2lvIFZp
bGxhciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBBZGQgSFRUUCBjYWNoaW5nIHN1cHBvcnQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0MjYxCisK
KyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIEhUVFAgY2FjaGluZyBzdXBwb3J0IHRvIGxpYnNvdXAg
bmV0d29ya2luZworICAgICAgICBiYWNrZW5kLiBUaGlzIGNvZGUgd2lsbCBldmVudHVhbGx5IGJl
IHBhcnQgb2YgbGlic291cCwgYnV0IGhhcworICAgICAgICBiZWVuIHRlbXBvcmFyaWx5IGltcG9y
dGVkIGludG8gdGhlIFdlYkNvcmUgdHJlZSBmb3IgdGVzdGluZworICAgICAgICBwdXJwb3Nlcy4g
QWxsIGxpYnNvdXAgY29kZSBpcyBsb2NhdGVkIGluCisgICAgICAgIFdlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL2NhY2hlLiBUaGUgd2Via2l0IHByZWZpeCB3YXMgYWRkZWQKKyAgICAgICAg
dG8gYWxsIHRoZSBzeW1ib2xzIHRvIHByZXZlbnQgcHJvYmxlbXMgd2hlbiB0aGlzIGxhbmRzIGlu
CisgICAgICAgIGxpYnNvdXAuIFNvbWUgZXh0ZXJuYWwgQVBJIHdhcyBhbHNvIGFkZGVkIHVuZGVy
IHdlYmtpdC8gZGlyZWN0b3J5CisgICAgICAgIGFuZCB3aWxsIGJlIHVzZWQgYnkgbGlicmFyeSBj
bGllbnRzIHRvIGVuYWJsZSBIVFRQIGNhY2hpbmcuCisKKyAgICAgICAgVGhlcmUgYXJlIHR3byBw
YXJ0cyB0byB0aGlzIGltcG9ydGVkIGNvZGUsIHRoZSBmaXJzdCBvbmUgaXMgdGhlCisgICAgICAg
IGNvZGUgdW5kZXIgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvIHRoYXQgY29u
dGFpbnMgYWxsCisgICAgICAgIHRoZSBTb3VwVVJJTG9hZGVyIGNvZGUgdGhhdCBzdXBwb3J0cyB0
aGUgZGV2ZWxvcG1lbnQgb2YgdGhlCisgICAgICAgIGNhY2hlLiBUaGUgc2Vjb25kIHBhcnQgaXMg
dGhlIEhUVFAgY2FjaGUgaW1wbGVtZW50YXRpb24gbG9jYXRlZCBpbgorICAgICAgICBXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvLgorCisgICAgICAgICogR05VbWFr
ZWZpbGUuYW06CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtZGly
ZWN0b3J5LWlucHV0LXN0cmVhbS5jOiBBZGRlZC4KKyAgICAgICAgKHdlYmtpdF9zb3VwX2RpcmVj
dG9yeV9pbnB1dF9zdHJlYW1fcGFyc2VfaW5mbyk6CisgICAgICAgICh3ZWJraXRfc291cF9kaXJl
Y3RvcnlfaW5wdXRfc3RyZWFtX3JlYWRfbmV4dF9maWxlKToKKyAgICAgICAgKHdlYmtpdF9zb3Vw
X2RpcmVjdG9yeV9pbnB1dF9zdHJlYW1fcmVhZCk6CisgICAgICAgICh3ZWJraXRfc291cF9kaXJl
Y3RvcnlfaW5wdXRfc3RyZWFtX2Nsb3NlKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2RpcmVjdG9y
eV9pbnB1dF9zdHJlYW1fY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfc291cF9kaXJlY3Rv
cnlfaW5wdXRfc3RyZWFtX2luaXQpOgorICAgICAgICAod2Via2l0X3NvdXBfZGlyZWN0b3J5X2lu
cHV0X3N0cmVhbV9uZXcpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9z
b3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0uYzogQWRkZWQuCisgICAg
ICAgICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9maW5hbGl6ZSk6CisgICAgICAgICh3
ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtp
dF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlZWthYmxlX2lmYWNlX2luaXQpOgorICAgICAgICAo
d2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1faW5pdCk6CisgICAgICAgICh3ZWJraXRfc291
cF9odHRwX2lucHV0X3N0cmVhbV9xdWV1ZV9tZXNzYWdlKToKKyAgICAgICAgKHdlYmtpdF9zb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX25ldyk6CisgICAgICAgICh3ZWJraXRfc291cF9odHRwX2lucHV0
X3N0cmVhbV9nb3RfaGVhZGVycyk6CisgICAgICAgICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0
cmVhbV9nb3RfY2h1bmspOgorICAgICAgICAod2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1f
ZmluaXNoZWQpOgorICAgICAgICAod2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2FuY2Vs
bGVkKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3ByZXBhcmVfZm9y
X2lvKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2RvbmVfaW8pOgor
ICAgICAgICAoc2V0X2Vycm9yX2lmX2h0dHBfZmFpbGVkKToKKyAgICAgICAgKHJlYWRfZnJvbV9s
ZWZ0b3Zlcik6CisgICAgICAgICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2lu
dGVybmFsKToKKyAgICAgICAgKHNlbmRfc3luY19maW5pc2hlZCk6CisgICAgICAgICh3ZWJraXRf
c291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2h0dHBf
aW5wdXRfc3RyZWFtX3JlYWQpOgorICAgICAgICAod2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJl
YW1fY2xvc2UpOgorICAgICAgICAod3JhcHBlcl9jYWxsYmFjayk6CisgICAgICAgIChzZW5kX2Fz
eW5jX3RocmVhZCk6CisgICAgICAgICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5k
X2FzeW5jX2luX3RocmVhZCk6CisgICAgICAgIChzZW5kX2FzeW5jX2ZpbmlzaGVkKToKKyAgICAg
ICAgKHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmNfaW50ZXJuYWwpOgor
ICAgICAgICAod2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luYyk6CisgICAg
ICAgICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2ZpbmlzaCk6CisgICAgICAg
IChyZWFkX2FzeW5jX2RvbmUpOgorICAgICAgICAod2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJl
YW1fcmVhZF9hc3luYyk6CisgICAgICAgICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9y
ZWFkX2ZpbmlzaCk6CisgICAgICAgICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9jbG9z
ZV9hc3luYyk6CisgICAgICAgICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9jbG9zZV9m
aW5pc2gpOgorICAgICAgICAod2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fdGVsbCk6Cisg
ICAgICAgICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9jYW5fc2Vlayk6CisgICAgICAg
ICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZWVrKToKKyAgICAgICAgKHdlYmtpdF9z
b3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nhbl90cnVuY2F0ZSk6CisgICAgICAgICh3ZWJraXRfc291
cF9odHRwX2lucHV0X3N0cmVhbV90cnVuY2F0ZSk6CisgICAgICAgICh3ZWJraXRfc291cF9odHRw
X2lucHV0X3N0cmVhbV9nZXRfbWVzc2FnZSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9z
b3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0uaDogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmM6IEFkZGVkLgorICAg
ICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9kYXRhX2luaXQpOgorICAgICAgICAod2Via2l0X3Nv
dXBfcmVxdWVzdF9kYXRhX2ZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3Rf
ZGF0YV9jaGVja191cmkpOgorICAgICAgICAodXJpX2RlY29kZWRfY29weSk6CisgICAgICAgICh3
ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFfc2VuZCk6CisgICAgICAgICh3ZWJraXRfc291cF9yZXF1
ZXN0X2RhdGFfZ2V0X2NvbnRlbnRfbGVuZ3RoKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVl
c3RfZGF0YV9nZXRfY29udGVudF90eXBlKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3Rf
ZGF0YV9jbGFzc19pbml0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUv
c291cC1yZXF1ZXN0LWRhdGEuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9z
b3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmM6IEFkZGVkLgorICAgICAgICAod2Via2l0X3Nv
dXBfcmVxdWVzdF9maWxlX2dldF9maWxlKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3Rf
ZmlsZV9pbml0KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9maW5hbGl6ZSk6
CisgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfY2hlY2tfdXJpKToKKyAgICAgICAg
KHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9mdHBfbWFpbl9sb29wX3F1aXQpOgorICAgICAgICAo
d2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2Vuc3VyZV9maWxlX2Z0cCk6CisgICAgICAgICh3ZWJr
aXRfc291cF9yZXF1ZXN0X2ZpbGVfZW5zdXJlX2ZpbGUpOgorICAgICAgICAod2Via2l0X3NvdXBf
cmVxdWVzdF9maWxlX3NlbmQpOgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX3Nl
bmRfYXN5bmNfdGhyZWFkKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9zZW5k
X2FzeW5jKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9zZW5kX2ZpbmlzaCk6
CisgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfZ2V0X2NvbnRlbnRfbGVuZ3RoKToK
KyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9nZXRfY29udGVudF90eXBlKToKKyAg
ICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9jbGFzc19pbml0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWZpbGUuaDogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRwLmM6
IEFkZGVkLgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX2dldF9tZXNzYWdlKToK
KyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9pbml0KToKKyAgICAgICAgKHdlYmtp
dF9zb3VwX3JlcXVlc3RfaHR0cF9jaGVja191cmkpOgorICAgICAgICAod2Via2l0X3NvdXBfcmVx
dWVzdF9odHRwX2ZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9z
ZW5kKToKKyAgICAgICAgKHNlbnRfYXN5bmMpOgorICAgICAgICAoY29uZGl0aW9uYWxfZ2V0X3Jl
YWR5X2NiKToKKyAgICAgICAgKHNlbmRfYXN5bmNfY2IpOgorICAgICAgICAod2Via2l0X3NvdXBf
cmVxdWVzdF9odHRwX3NlbmRfYXN5bmMpOgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9o
dHRwX3NlbmRfZmluaXNoKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9nZXRf
Y29udGVudF9sZW5ndGgpOgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX2dldF9j
b250ZW50X3R5cGUpOgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX2NsYXNzX2lu
aXQpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Qt
aHR0cC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291
cC1yZXF1ZXN0LmM6IEFkZGVkLgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9pbml0KToK
KyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZmluYWxpemUpOgorICAgICAgICAod2Via2l0
X3NvdXBfcmVxdWVzdF9zZXRfcHJvcGVydHkpOgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVz
dF9nZXRfcHJvcGVydHkpOgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9pbml0YWJsZV9p
bml0KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZGVmYXVsdF9jaGVja191cmkpOgor
ICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9kZWZhdWx0X3NlbmRfYXN5bmMpOgorICAgICAg
ICAod2Via2l0X3NvdXBfcmVxdWVzdF9kZWZhdWx0X3NlbmRfZmluaXNoKToKKyAgICAgICAgKHdl
YmtpdF9zb3VwX3JlcXVlc3Rfc2VuZCk6CisgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X3Nl
bmRfYXN5bmMpOgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9zZW5kX2ZpbmlzaCk6Cisg
ICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0
X3NvdXBfcmVxdWVzdF9pbml0YWJsZV9pbnRlcmZhY2VfaW5pdCk6CisgICAgICAgICh3ZWJraXRf
c291cF9yZXF1ZXN0X2dldF91cmkpOgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9nZXRf
c2Vzc2lvbik6CisgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2dldF9jb250ZW50X2xlbmd0
aCk6CisgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0X2dldF9jb250ZW50X3R5cGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QuaDogQWRkZWQu
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmM6
IEFkZGVkLgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdGVyX2luaXQpOgorICAgICAgICAo
ZmluYWxpemUpOgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdGVyX2NsYXNzX2luaXQpOgor
ICAgICAgICAoaW5pdF9yZXF1ZXN0X3R5cGVzKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVl
c3Rlcl9uZXcpOgorICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdGVyX3JlcXVlc3QpOgorICAg
ICAgICAod2Via2l0X3NvdXBfcmVxdWVzdGVyX3JlcXVlc3RfdXJpKToKKyAgICAgICAgKHdlYmtp
dF9zb3VwX3NjaGVtZV9pc192YWxpZCk6CisgICAgICAgICh3ZWJraXRfc291cF9yZXF1ZXN0ZXJf
YWRkX3Byb3RvY29sKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3Rlcl9yZW1vdmVfcHJv
dG9jb2wpOgorICAgICAgICAod2Via2l0X3NvdXBfZXJyb3JfcXVhcmspOgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Rlci5oOiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUtcHJpdmF0
ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvd2Via2l0
L3NvdXAtY2FjaGUuYzogQWRkZWQuCisgICAgICAgIChnZXRfY2FjaGVhYmlsaXR5KToKKyAgICAg
ICAgKHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUpOgorICAgICAgICAoY29weV9oZWFkZXJz
KToKKyAgICAgICAgKHVwZGF0ZV9oZWFkZXJzKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hl
X2VudHJ5X2dldF9jdXJyZW50X2FnZSk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9lbnRy
eV9pc19mcmVzaF9lbm91Z2gpOgorICAgICAgICAod2Via2l0X3NvdXBfbWVzc2FnZV9nZXRfY2Fj
aGVfa2V5KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X3NldF9mcmVzaG5lc3Mp
OgorICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfZW50cnlfbmV3KToKKyAgICAgICAgKHdlYmtp
dF9zb3VwX2NhY2hlX3dyaXRpbmdfZml4dHVyZV9mcmVlKToKKyAgICAgICAgKGNsb3NlX3JlYWR5
X2NiKToKKyAgICAgICAgKHdyaXRlX3JlYWR5X2NiKToKKyAgICAgICAgKG1zZ19nb3RfY2h1bmtf
Y2IpOgorICAgICAgICAobXNnX2dvdF9ib2R5X2NiKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2Nh
Y2hlX2VudHJ5X2RlbGV0ZSk6CisgICAgICAgIChscnVfY29tcGFyZV9mdW5jKToKKyAgICAgICAg
KGNhY2hlX2FjY2VwdHNfZW50cmllc19vZl9zaXplKToKKyAgICAgICAgKG1ha2Vfcm9vbV9mb3Jf
bmV3X2VudHJ5KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2luc2VydF9ieV9r
ZXkpOgorICAgICAgICAobXNnX3Jlc3RhcnRlZF9jYik6CisgICAgICAgIChhcHBlbmRfdG9fcmVh
ZHlfY2IpOgorICAgICAgICAobXNnX2dvdF9oZWFkZXJzX2NiKToKKyAgICAgICAgKHdlYmtpdF9z
b3VwX2NhY2hlX3NlbmRfcmVzcG9uc2UpOgorICAgICAgICAocmVxdWVzdF9zdGFydGVkKToKKyAg
ICAgICAgKGF0dGFjaCk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9zZXNzaW9uX2ZlYXR1
cmVfaW5pdCk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9pbml0KToKKyAgICAgICAgKHdl
YmtpdF9zb3VwX2NhY2hlX2ZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX3Nl
dF9wcm9wZXJ0eSk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9nZXRfcHJvcGVydHkpOgor
ICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfY29uc3RydWN0ZWQpOgorICAgICAgICAod2Via2l0
X3NvdXBfY2FjaGVfdHlwZV9nZXRfdHlwZSk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9j
bGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX25ldyk6CisgICAgICAgICh3
ZWJraXRfc291cF9jYWNoZV9oYXNfcmVzcG9uc2UpOgorICAgICAgICAod2Via2l0X3NvdXBfY2Fj
aGVfZ2V0X2NhY2hlYWJpbGl0eSk6CisgICAgICAgIChmb3JjZV9mbHVzaF90aW1lb3V0KToKKyAg
ICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2ZsdXNoKToKKyAgICAgICAgKHJlbW92ZV9jYWNoZV9p
dGVtKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2NsZWFyKToKKyAgICAgICAgKHdlYmtp
dF9zb3VwX2NhY2hlX2dlbmVyYXRlX2NvbmRpdGlvbmFsX3JlcXVlc3QpOgorICAgICAgICAocGFj
a19lbnRyeSk6CisgICAgICAgICh3ZWJraXRfc291cF9jYWNoZV9kdW1wKToKKyAgICAgICAgKHdl
YmtpdF9zb3VwX2NhY2hlX2xvYWQpOgorICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfc2V0X21h
eF9zaXplKToKKyAgICAgICAgKHdlYmtpdF9zb3VwX2NhY2hlX2dldF9tYXhfc2l6ZSk6CisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLmg6IEFk
ZGVkLgorCiAyMDEwLTEwLTEyICBSb2xhbmQgU3RlaW5lciAgPHJvbGFuZHN0ZWluZXJAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIEh5YXR0LgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggZGM2
ZTU0OC4uZDg2Zjg5ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC03OCw3ICs3OCw5IEBAIHdlYmNvcmVndGtfY3BwZmxh
Z3MgKz0gXAogCS1JJChzcmNkaXIpL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
IFwKIAktSSQoc3JjZGlyKS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ayBcCiAJLUkkKHNy
Y2RpcikvV2ViQ29yZS9wbGF0Zm9ybS9ndGsgXAotCS1JJChzcmNkaXIpL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwCisJLUkkKHNyY2RpcikvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAgXAorCS1JJChzcmNkaXIpL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlIFwK
KwktSSQoc3JjZGlyKS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQK
IAogd2ViY29yZV9idWlsdF9ub3NvdXJjZXMgKz0gXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
dG9rZW5pemVyLmNwcApAQCAtMzU4MCw2ICszNTgyLDIyIEBAIHdlYmNvcmVndGtfc291cmNlcyAr
PSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtRXJyb3IuaCBc
CiAJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU29ja2V0U3RyZWFtSGFuZGxlLmggXAog
CVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1NvY2tldFN0cmVhbUhhbmRsZVNvdXAuY3Bw
IFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1p
bnB1dC1zdHJlYW0uYyBcCisJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291
cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmggXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJlYW0uYyBcCisJV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvY2FjaGUvc291cC1odHRwLWlucHV0LXN0cmVhbS5oIFwKKwlXZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5jIFwKKwlXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZGF0YS5oIFwKKwlXZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZmlsZS5jIFwKKwlX
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZmlsZS5oIFwK
KwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtaHR0cC5j
IFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtaHR0
cC5oIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Qu
YyBcCisJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0Lmgg
XAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmMg
XAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmgg
XAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hl
LmMgXAorCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNh
Y2hlLmggXAogCVdlYkNvcmUvcGx1Z2lucy9ndGsvUGx1Z2luRGF0YUd0ay5jcHAgXAogCVdlYkNv
cmUvcGx1Z2lucy9ndGsvUGx1Z2luUGFja2FnZUd0ay5jcHAgXAogCVdlYkNvcmUvcGx1Z2lucy9n
dGsvUGx1Z2luVmlld0d0ay5jcHAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL2NhY2hlL3NvdXAtZGlyZWN0b3J5LWlucHV0LXN0cmVhbS5jIGIvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1kaXJlY3RvcnktaW5wdXQtc3RyZWFtLmMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYxNmRiYgotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtZGlyZWN0b3J5LWlu
cHV0LXN0cmVhbS5jCkBAIC0wLDAgKzEsMjAwIEBACisvKiAtKi0gTW9kZTogQzsgdGFiLXdpZHRo
OiA4OyBpbmRlbnQtdGFicy1tb2RlOiB0OyBjLWJhc2ljLW9mZnNldDogOCAtKi0gKi8KKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEw
IElnYWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgPGNvbmZpZy5oPgor
I2VuZGlmCisKKyNpbmNsdWRlICJzb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uaCIKKworI2lu
Y2x1ZGUgPGxpYnNvdXAvc291cC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3Ry
aW5nLmg+CisKKyNkZWZpbmUgSU5JVF9TVFJJTkcgIjxodG1sPjxoZWFkPjx0aXRsZT5PTUchPC90
aXRsZT48L2hlYWQ+PGJvZHk+PHRhYmxlPiIKKyNkZWZpbmUgRVhJVF9TVFJJTkcgIjwvdGFibGU+
PC9odG1sPiIKKworR19ERUZJTkVfVFlQRSAoV2ViS2l0U291cERpcmVjdG9yeUlucHV0U3RyZWFt
LCB3ZWJraXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtLCBHX1RZUEVfSU5QVVRfU1RSRUFN
KQorCitzdGF0aWMgU291cEJ1ZmZlciAqCit3ZWJraXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3Ry
ZWFtX3BhcnNlX2luZm8gKFdlYktpdFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbSAqIHN0cmVhbSwK
KwkJCQkJICAgICAgIEdGaWxlSW5mbyAqIGluZm8pCit7CisJU291cEJ1ZmZlciAqYnVmZmVyOwor
CUdTdHJpbmcgKnN0cmluZzsKKwljb25zdCBjaGFyICpzOworCWNoYXIgKmVzY2FwZWQsICpwYXRo
LCAqeG1sX3N0cmluZzsKKworCWlmICghZ19maWxlX2luZm9fZ2V0X25hbWUgKGluZm8pKQorCQly
ZXR1cm4gTlVMTDsKKworCXMgPSBnX2ZpbGVfaW5mb19nZXRfZGlzcGxheV9uYW1lIChpbmZvKTsK
KwlpZiAoIXMpIHsKKwkJcyA9IGdfZmlsZV9pbmZvX2dldF9uYW1lIChpbmZvKTsKKwkJLyogRklY
TUU6IGNvbnZlcnQgc29tZWhvdz8gKi8KKwkJaWYgKCFnX3V0ZjhfdmFsaWRhdGUgKHMsIC0xLCBO
VUxMKSkKKwkJCXJldHVybiBOVUxMOworCX0KKwlzdHJpbmcgPSBnX3N0cmluZ19uZXcgKCI8dHI+
Iik7CisKKwl4bWxfc3RyaW5nID0gZ19tYXJrdXBfZXNjYXBlX3RleHQgKHMsIC0xKTsKKwllc2Nh
cGVkID0gZ191cmlfZXNjYXBlX3N0cmluZyAoZ19maWxlX2luZm9fZ2V0X25hbWUgKGluZm8pLCBO
VUxMLCBGQUxTRSk7CisJcGF0aCA9IGdfc3RyY29uY2F0IChzdHJlYW0tPnVyaSwgIi8iLCBlc2Nh
cGVkLCBOVUxMKTsKKwlnX2ZyZWUgKGVzY2FwZWQpOworCWdfc3RyaW5nX2FwcGVuZF9wcmludGYg
KHN0cmluZywgIjx0ZD48YSBocmVmPVwiJXNcIj4lczwvYT48L3RkPiIsIHBhdGgsIHhtbF9zdHJp
bmcpOworCWdfZnJlZSAocGF0aCk7CisJZ19mcmVlICh4bWxfc3RyaW5nKTsKKwlnX3N0cmluZ19h
cHBlbmQgKHN0cmluZywgIjwvdHI+Iik7CisKKwlidWZmZXIgPSBzb3VwX2J1ZmZlcl9uZXcgKFNP
VVBfTUVNT1JZX1RBS0UsIHN0cmluZy0+c3RyLCBzdHJpbmctPmxlbik7CisJZ19zdHJpbmdfZnJl
ZSAoc3RyaW5nLCBGQUxTRSk7CisKKwlyZXR1cm4gYnVmZmVyOworfQorCitzdGF0aWMgU291cEJ1
ZmZlciAqCit3ZWJraXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX3JlYWRfbmV4dF9maWxl
IChXZWJLaXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW0gICpzdHJlYW0sCisJCQkJCQkgICBHQ2Fu
Y2VsbGFibGUgICAgICAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkJCSAgIEdFcnJvciAgICAg
ICAgICAgICAgICAgICAqKmVycm9yKQoreworCUdGaWxlSW5mbyAqaW5mbzsKKwlTb3VwQnVmZmVy
ICpidWZmZXI7CisJR0Vycm9yICplcnIgPSBOVUxMOworCisJZG8geworCQlpbmZvID0gZ19maWxl
X2VudW1lcmF0b3JfbmV4dF9maWxlIChzdHJlYW0tPmVudW1lcmF0b3IsIGNhbmNlbGxhYmxlLCAm
ZXJyKTsKKwkJaWYgKGluZm8gPT0gTlVMTCkgeworCQkJaWYgKGVycikgeworCQkJCWdfcHJvcGFn
YXRlX2Vycm9yIChlcnJvciwgZXJyKTsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0gZWxzZSBpZiAo
IXN0cmVhbS0+ZG9uZSkgeworCQkJCXN0cmVhbS0+ZG9uZSA9IFRSVUU7CisJCQkJcmV0dXJuIHNv
dXBfYnVmZmVyX25ldyAoU09VUF9NRU1PUllfU1RBVElDLAorCQkJCQkJCUVYSVRfU1RSSU5HLAor
CQkJCQkJCXNpemVvZiAoRVhJVF9TVFJJTkcpKTsKKwkJCX0gZWxzZSB7CisJCQkJcmV0dXJuIE5V
TEw7CisJCQl9CisJCX0KKworCQlidWZmZXIgPSB3ZWJraXRfc291cF9kaXJlY3RvcnlfaW5wdXRf
c3RyZWFtX3BhcnNlX2luZm8gKHN0cmVhbSwgaW5mbyk7CisJfSB3aGlsZSAoYnVmZmVyID09IE5V
TEwpOworCisJcmV0dXJuIGJ1ZmZlcjsKK30KKworc3RhdGljIGdzc2l6ZQord2Via2l0X3NvdXBf
ZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9yZWFkIChHSW5wdXRTdHJlYW0gICppbnB1dCwKKwkJCQkJ
IHZvaWQgICAgICAgICAgKmJ1ZmZlciwKKwkJCQkJIGdzaXplIGNvdW50LAorCQkJCQkgR0NhbmNl
bGxhYmxlICAqY2FuY2VsbGFibGUsCisJCQkJCSBHRXJyb3IgICAgICAgKiplcnJvcikKK3sKKwlX
ZWJLaXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW0gKnN0cmVhbSA9IFdFQktJVF9TT1VQX0RJUkVD
VE9SWV9JTlBVVF9TVFJFQU0gKGlucHV0KTsKKwlnc3NpemUgdG90YWwsIHNpemU7CisKKwlmb3Ig
KHRvdGFsID0gMDsgdG90YWwgPCBjb3VudDsgdG90YWwgKz0gc2l6ZSkgeworCQlpZiAoc3RyZWFt
LT5idWZmZXIgPT0gTlVMTCkgeworCQkJc3RyZWFtLT5idWZmZXIgPSB3ZWJraXRfc291cF9kaXJl
Y3RvcnlfaW5wdXRfc3RyZWFtX3JlYWRfbmV4dF9maWxlIChzdHJlYW0sIGNhbmNlbGxhYmxlLCBl
cnJvcik7CisJCQlpZiAoc3RyZWFtLT5idWZmZXIgPT0gTlVMTCkgeworCQkJCS8qIEZJWE1FOiBJ
cyB0aGlzIGNvcnJlY3Qgb3Igc2hvdWxkIHdlIGZvcndhcmQgdGhlIGVycm9yPyAqLworCQkJCWlm
ICh0b3RhbCkKKwkJCQkJZ19jbGVhcl9lcnJvciAoZXJyb3IpOworCQkJCXJldHVybiB0b3RhbDsK
KwkJCX0KKwkJfQorCisJCXNpemUgPSBNSU4gKHN0cmVhbS0+YnVmZmVyLT5sZW5ndGgsIGNvdW50
IC0gdG90YWwpOworCQltZW1jcHkgKChjaGFyICopYnVmZmVyICsgdG90YWwsIHN0cmVhbS0+YnVm
ZmVyLT5kYXRhLCBzaXplKTsKKwkJaWYgKHNpemUgPT0gc3RyZWFtLT5idWZmZXItPmxlbmd0aCkg
eworCQkJc291cF9idWZmZXJfZnJlZSAoc3RyZWFtLT5idWZmZXIpOworCQkJc3RyZWFtLT5idWZm
ZXIgPSBOVUxMOworCQl9IGVsc2UgeworCQkJU291cEJ1ZmZlciAqc3ViID0gc291cF9idWZmZXJf
bmV3X3N1YmJ1ZmZlciAoc3RyZWFtLT5idWZmZXIsCisJCQkJCQkJCSAgICAgc2l6ZSwKKwkJCQkJ
CQkJICAgICBzdHJlYW0tPmJ1ZmZlci0+bGVuZ3RoIC0gc2l6ZSk7CisJCQlzb3VwX2J1ZmZlcl9m
cmVlIChzdHJlYW0tPmJ1ZmZlcik7CisJCQlzdHJlYW0tPmJ1ZmZlciA9IHN1YjsKKwkJfQorCX0K
KworCXJldHVybiB0b3RhbDsKK30KKworc3RhdGljIGdib29sZWFuCit3ZWJraXRfc291cF9kaXJl
Y3RvcnlfaW5wdXRfc3RyZWFtX2Nsb3NlIChHSW5wdXRTdHJlYW0gICppbnB1dCwKKwkJCQkJICBH
Q2FuY2VsbGFibGUgICpjYW5jZWxsYWJsZSwKKwkJCQkJICBHRXJyb3IgICAgICAgKiplcnJvcikK
K3sKKwlXZWJLaXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW0gKnN0cmVhbSA9IFdFQktJVF9TT1VQ
X0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0gKGlucHV0KTsKKwlnYm9vbGVhbiByZXN1bHQ7CisKKwlp
ZiAoc3RyZWFtLT5idWZmZXIpIHsKKwkJc291cF9idWZmZXJfZnJlZSAoc3RyZWFtLT5idWZmZXIp
OworCQlzdHJlYW0tPmJ1ZmZlciA9IE5VTEw7CisJfQorCisJcmVzdWx0ID0gZ19maWxlX2VudW1l
cmF0b3JfY2xvc2UgKHN0cmVhbS0+ZW51bWVyYXRvciwKKwkJCQkJICBjYW5jZWxsYWJsZSwKKwkJ
CQkJICBlcnJvcik7CisJZ19vYmplY3RfdW5yZWYgKHN0cmVhbS0+ZW51bWVyYXRvcik7CisJc3Ry
ZWFtLT5lbnVtZXJhdG9yID0gTlVMTDsKKworCWdfZnJlZSAoc3RyZWFtLT51cmkpOworCXN0cmVh
bS0+dXJpID0gTlVMTDsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJr
aXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX2NsYXNzX2luaXQgKFdlYktpdFNvdXBEaXJl
Y3RvcnlJbnB1dFN0cmVhbUNsYXNzICpzdHJlYW1fY2xhc3MpCit7CisJR0lucHV0U3RyZWFtQ2xh
c3MgKmlucHV0c3RyZWFtX2NsYXNzID0gR19JTlBVVF9TVFJFQU1fQ0xBU1MgKHN0cmVhbV9jbGFz
cyk7CisKKwlpbnB1dHN0cmVhbV9jbGFzcy0+cmVhZF9mbiA9IHdlYmtpdF9zb3VwX2RpcmVjdG9y
eV9pbnB1dF9zdHJlYW1fcmVhZDsKKwlpbnB1dHN0cmVhbV9jbGFzcy0+Y2xvc2VfZm4gPSB3ZWJr
aXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX2Nsb3NlOworfQorCitzdGF0aWMgdm9pZAor
d2Via2l0X3NvdXBfZGlyZWN0b3J5X2lucHV0X3N0cmVhbV9pbml0IChXZWJLaXRTb3VwRGlyZWN0
b3J5SW5wdXRTdHJlYW0gKnN0cmVhbSkKK3sKKwlzdHJlYW0tPmJ1ZmZlciA9IHNvdXBfYnVmZmVy
X25ldyAoU09VUF9NRU1PUllfU1RBVElDLAorCQkJCQkgIElOSVRfU1RSSU5HLAorCQkJCQkgIHNp
emVvZiAoSU5JVF9TVFJJTkcpKTsKK30KKworR0lucHV0U3RyZWFtICoKK3dlYmtpdF9zb3VwX2Rp
cmVjdG9yeV9pbnB1dF9zdHJlYW1fbmV3IChHRmlsZUVudW1lcmF0b3IgKmVudW1lcmF0b3IsCisJ
CQkJCVNvdXBVUkkgICAgICAgICAqdXJpKQoreworCUdJbnB1dFN0cmVhbSAqc3RyZWFtOworCisJ
Z19yZXR1cm5fdmFsX2lmX2ZhaWwgKEdfSVNfRklMRV9FTlVNRVJBVE9SIChlbnVtZXJhdG9yKSwg
TlVMTCk7CisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKHVyaSAhPSBOVUxMLCBOVUxMKTsKKworCXN0
cmVhbSA9IGdfb2JqZWN0X25ldyAoV0VCS0lUX1RZUEVfU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RS
RUFNLCBOVUxMKTsKKworCVdFQktJVF9TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0gKHN0cmVh
bSktPmVudW1lcmF0b3IgPSBnX29iamVjdF9yZWYgKGVudW1lcmF0b3IpOworCVdFQktJVF9TT1VQ
X0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0gKHN0cmVhbSktPnVyaSA9IHNvdXBfdXJpX3RvX3N0cmlu
ZyAodXJpLCBGQUxTRSk7CisKKwlyZXR1cm4gc3RyZWFtOworfQorCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJl
YW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtZGlyZWN0b3J5
LWlucHV0LXN0cmVhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNWIw
YmUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNo
ZS9zb3VwLWRpcmVjdG9yeS1pbnB1dC1zdHJlYW0uaApAQCAtMCwwICsxLDYyIEBACisvKiAtKi0g
TW9kZTogQzsgdGFiLXdpZHRoOiA4OyBpbmRlbnQtdGFicy1tb2RlOiB0OyBjLWJhc2ljLW9mZnNl
dDogOCAtKi0gKi8KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgUmVkIEhhdCwgSW5jLgorICog
Q29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdFQktJVF9TT1VQX0RJUkVD
VE9SWV9JTlBVVF9TVFJFQU1fSAorI2RlZmluZSBXRUJLSVRfU09VUF9ESVJFQ1RPUllfSU5QVVRf
U1RSRUFNX0ggMQorCisjaW5jbHVkZSA8Z2lvL2dpby5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291
cC10eXBlcy5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC1tZXNzYWdlLWJvZHkuaD4KKworR19C
RUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX1NPVVBfRElSRUNUT1JZX0lOUFVUX1NU
UkVBTSAgICAgICAgICAgICh3ZWJraXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX2dldF90
eXBlICgpKQorI2RlZmluZSBXRUJLSVRfU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNKG9iaikg
ICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmopLCBXRUJLSVRfVFlQ
RV9TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0sIFdlYktpdFNvdXBEaXJlY3RvcnlJbnB1dFN0
cmVhbSkpCisjZGVmaW5lIFdFQktJVF9TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU1fQ0xBU1Mo
a2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgV0VCS0lUX1RZUEVf
U09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNLCBXZWJLaXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJl
YW1DbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU0o
b2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIFdFQktJVF9U
WVBFX1NPVVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTSkpCisjZGVmaW5lIFdFQktJVF9JU19TT1VQ
X0RJUkVDVE9SWV9JTlBVVF9TVFJFQU1fQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
VFlQRSAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfRElSRUNUT1JZX0lOUFVUX1NUUkVBTSkpCisj
ZGVmaW5lIFdFQktJVF9TT1VQX0RJUkVDVE9SWV9JTlBVVF9TVFJFQU1fR0VUX0NMQVNTKG9iaikg
IChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2JqKSwgV0VCS0lUX1RZUEVfU09VUF9ESVJF
Q1RPUllfSU5QVVRfU1RSRUFNLCBXZWJLaXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW1DbGFzcykp
CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRTb3VwRGlyZWN0b3J5SW5wdXRTdHJlYW0gV2ViS2l0
U291cERpcmVjdG9yeUlucHV0U3RyZWFtOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBEaXJl
Y3RvcnlJbnB1dFN0cmVhbUNsYXNzIFdlYktpdFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbUNsYXNz
OworCitzdHJ1Y3QgX1dlYktpdFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbSB7CisJR0lucHV0U3Ry
ZWFtIHBhcmVudDsKKworCUdGaWxlRW51bWVyYXRvciAqZW51bWVyYXRvcjsKKwljaGFyICp1cmk7
CisJU291cEJ1ZmZlciAqYnVmZmVyOworCWdib29sZWFuIGRvbmU7Cit9OworCitzdHJ1Y3QgX1dl
YktpdFNvdXBEaXJlY3RvcnlJbnB1dFN0cmVhbUNsYXNzIHsKKwlHSW5wdXRTdHJlYW1DbGFzcyBw
YXJlbnRfY2xhc3M7Cit9OworCitHVHlwZSAgICAgICAgICB3ZWJraXRfc291cF9kaXJlY3Rvcnlf
aW5wdXRfc3RyZWFtX2dldF90eXBlICh2b2lkKTsKKworR0lucHV0U3RyZWFtICp3ZWJraXRfc291
cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX25ldyAoR0ZpbGVFbnVtZXJhdG9yICplbnVtZXJhdG9y
LAorCQkJCQkJICAgICAgU291cFVSSSAgICAgICAgICp1cmkpOworCisKK0dfRU5EX0RFQ0xTCisK
KyNlbmRpZiAvKiBXRUJLSVRfU09VUF9ESVJFQ1RPUllfSU5QVVRfU1RSRUFNX0ggKi8KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1
dC1zdHJlYW0uYyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0
cC1pbnB1dC1zdHJlYW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzk1
ZDZlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2Fj
aGUvc291cC1odHRwLWlucHV0LXN0cmVhbS5jCkBAIC0wLDAgKzEsOTIxIEBACisvKiBzb3VwLWlu
cHV0LXN0cmVhbS5jLCBiYXNlZCBvbiBnc29ja2V0aW5wdXRzdHJlYW0uYworICoKKyAqIENvcHly
aWdodCAoQykgMjAwNi0yMDA3IFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJ
Z2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZQorICogRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwKKyAqIEJv
c3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKwor
I2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdpby9n
aW8uaD4KKworI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorCisjaW5jbHVkZSAic291cC1odHRw
LWlucHV0LXN0cmVhbS5oIgorCitzdGF0aWMgdm9pZCB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0
cmVhbV9zZWVrYWJsZV9pZmFjZV9pbml0IChHU2Vla2FibGVJZmFjZSAqc2Vla2FibGVfaWZhY2Up
OworCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSwg
d2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW0sIEdfVFlQRV9JTlBVVF9TVFJFQU0sCisJCQkg
R19JTVBMRU1FTlRfSU5URVJGQUNFIChHX1RZUEVfU0VFS0FCTEUsCisJCQkJCQl3ZWJraXRfc291
cF9odHRwX2lucHV0X3N0cmVhbV9zZWVrYWJsZV9pZmFjZV9pbml0KSkKKwordHlwZWRlZiB2b2lk
ICgqV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbUNhbGxiYWNrKShHSW5wdXRTdHJlYW0gKik7CisK
K3R5cGVkZWYgc3RydWN0IHsKKwlTb3VwU2Vzc2lvbiAqc2Vzc2lvbjsKKwlHTWFpbkNvbnRleHQg
KmFzeW5jX2NvbnRleHQ7CisJU291cE1lc3NhZ2UgKm1zZzsKKwlnYm9vbGVhbiBnb3RfaGVhZGVy
cywgZmluaXNoZWQ7CisJZ29mZnNldCBvZmZzZXQ7CisKKwlHQ2FuY2VsbGFibGUgKmNhbmNlbGxh
YmxlOworCUdTb3VyY2UgKmNhbmNlbF93YXRjaDsKKwlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFt
Q2FsbGJhY2sgZ290X2hlYWRlcnNfY2I7CisJV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbUNhbGxi
YWNrIGdvdF9jaHVua19jYjsKKwlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtQ2FsbGJhY2sgZmlu
aXNoZWRfY2I7CisJV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbUNhbGxiYWNrIGNhbmNlbGxlZF9j
YjsKKworCWd1Y2hhciAqbGVmdG92ZXJfYnVmZmVyOworCWdzaXplIGxlZnRvdmVyX2J1ZnNpemUs
IGxlZnRvdmVyX29mZnNldDsKKworCWd1Y2hhciAqY2FsbGVyX2J1ZmZlcjsKKwlnc2l6ZSBjYWxs
ZXJfYnVmc2l6ZSwgY2FsbGVyX25yZWFkOworCUdBc3luY1JlYWR5Q2FsbGJhY2sgb3V0c3RhbmRp
bmdfY2FsbGJhY2s7CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpyZXN1bHQ7Cit9IFdlYktpdFNvdXBI
VFRQSW5wdXRTdHJlYW1Qcml2YXRlOworI2RlZmluZSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NU
UkVBTV9HRVRfUFJJVkFURShvKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFICgobyksIFdF
QktJVF9UWVBFX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU0sIFdlYktpdFNvdXBIVFRQSW5wdXRTdHJl
YW1Qcml2YXRlKSkKKworCitzdGF0aWMgZ3NzaXplICAgd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fcmVhZCAoR0lucHV0U3RyZWFtICAgICAgICAgKnN0cmVhbSwKKwkJCQkJCSAgICB2b2lk
ICAgICAgICAgICAgICAgICAqYnVmZmVyLAorCQkJCQkJICAgIGdzaXplIGNvdW50LAorCQkJCQkJ
ICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkJCSAgICBHRXJyb3Ig
ICAgICAgICAgICAgICoqZXJyb3IpOworc3RhdGljIGdib29sZWFuIHdlYmtpdF9zb3VwX2h0dHBf
aW5wdXRfc3RyZWFtX2Nsb3NlIChHSW5wdXRTdHJlYW0gICAgICAgICAqc3RyZWFtLAorCQkJCQkJ
ICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJCQkgICAgIEdFcnJv
ciAgICAgICAgICAgICAgKiplcnJvcik7CitzdGF0aWMgdm9pZCAgICAgd2Via2l0X3NvdXBfaHR0
cF9pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyAoR0lucHV0U3RyZWFtICAgICAgICAgKnN0cmVhbSwK
KwkJCQkJCQkgIHZvaWQgICAgICAgICAgICAgICAgICpidWZmZXIsCisJCQkJCQkJICBnc2l6ZSBj
b3VudCwKKwkJCQkJCQkgIGludCBpb19wcmlvcml0eSwKKwkJCQkJCQkgIEdDYW5jZWxsYWJsZSAg
ICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkJCQkgIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJh
Y2ssCisJCQkJCQkJICBncG9pbnRlciBkYXRhKTsKK3N0YXRpYyBnc3NpemUgICB3ZWJraXRfc291
cF9odHRwX2lucHV0X3N0cmVhbV9yZWFkX2ZpbmlzaCAoR0lucHV0U3RyZWFtICAgICAgICAgKnN0
cmVhbSwKKwkJCQkJCQkgICBHQXN5bmNSZXN1bHQgICAgICAgICAqcmVzdWx0LAorCQkJCQkJCSAg
IEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcik7CitzdGF0aWMgdm9pZCAgICAgd2Via2l0X3Nv
dXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2VfYXN5bmMgKEdJbnB1dFN0cmVhbSAgICAgICAgICpz
dHJlYW0sCisJCQkJCQkJICAgaW50IGlvX3ByaW9yaXR5LAorCQkJCQkJCSAgIEdDYW5jZWxsYWJs
ZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkJCQkgICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNh
bGxiYWNrLAorCQkJCQkJCSAgIGdwb2ludGVyIGRhdGEpOworc3RhdGljIGdib29sZWFuIHdlYmtp
dF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlX2ZpbmlzaCAoR0lucHV0U3RyZWFtICAgICAg
ICAgKnN0cmVhbSwKKwkJCQkJCQkgICAgR0FzeW5jUmVzdWx0ICAgICAgICAgKnJlc3VsdCwKKwkJ
CQkJCQkgICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKTsKKworc3RhdGljIGdvZmZzZXQg
IHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3RlbGwgKEdTZWVrYWJsZSAgICAgICAgICAg
ICpzZWVrYWJsZSk7CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0
cmVhbV9jYW5fc2VlayAoR1NlZWthYmxlICAgICAgICAgICAgKnNlZWthYmxlKTsKK3N0YXRpYyBn
Ym9vbGVhbiB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZWVrIChHU2Vla2FibGUgICAg
ICAgICAgICAqc2Vla2FibGUsCisJCQkJCQkgICAgZ29mZnNldCBvZmZzZXQsCisJCQkJCQkgICAg
R1NlZWtUeXBlIHR5cGUsCisJCQkJCQkgICAgR0NhbmNlbGxhYmxlICAgICAgICAgKmNhbmNlbGxh
YmxlLAorCQkJCQkJICAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcik7CisKK3N0YXRpYyBn
Ym9vbGVhbiB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9jYW5fdHJ1bmNhdGUgKEdTZWVr
YWJsZSAgICAgICAgICAgICpzZWVrYWJsZSk7CitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3NvdXBf
aHR0cF9pbnB1dF9zdHJlYW1fdHJ1bmNhdGUgKEdTZWVrYWJsZSAgICAgICAgICAgICpzZWVrYWJs
ZSwKKwkJCQkJCQlnb2Zmc2V0IG9mZnNldCwKKwkJCQkJCQlHQ2FuY2VsbGFibGUgICAgICAgICAq
Y2FuY2VsbGFibGUsCisJCQkJCQkJR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKTsKKworc3Rh
dGljIHZvaWQgd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ290X2hlYWRlcnMgKFNvdXBN
ZXNzYWdlICptc2csIGdwb2ludGVyIHN0cmVhbSk7CitzdGF0aWMgdm9pZCB3ZWJraXRfc291cF9o
dHRwX2lucHV0X3N0cmVhbV9nb3RfY2h1bmsgKFNvdXBNZXNzYWdlICptc2csIFNvdXBCdWZmZXIg
KmNodW5rLCBncG9pbnRlciBzdHJlYW0pOworc3RhdGljIHZvaWQgd2Via2l0X3NvdXBfaHR0cF9p
bnB1dF9zdHJlYW1fZmluaXNoZWQgKFNvdXBNZXNzYWdlICptc2csIGdwb2ludGVyIHN0cmVhbSk7
CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9maW5hbGl6ZSAo
R09iamVjdCAqb2JqZWN0KQoreworCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gKnN0cmVhbSA9
IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNIChvYmplY3QpOworCVdlYktpdFNvdXBIVFRQ
SW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1f
R0VUX1BSSVZBVEUgKHN0cmVhbSk7CisKKwlnX29iamVjdF91bnJlZiAocHJpdi0+c2Vzc2lvbik7
CisKKwlnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMgKHByaXYtPm1zZywgR19D
QUxMQkFDSyAod2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ290X2hlYWRlcnMpLCBzdHJl
YW0pOworCWdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyAocHJpdi0+bXNnLCBH
X0NBTExCQUNLICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9nb3RfY2h1bmspLCBzdHJl
YW0pOworCWdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyAocHJpdi0+bXNnLCBH
X0NBTExCQUNLICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9maW5pc2hlZCksIHN0cmVh
bSk7CisJZ19vYmplY3RfdW5yZWYgKHByaXYtPm1zZyk7CisJZ19mcmVlIChwcml2LT5sZWZ0b3Zl
cl9idWZmZXIpOworCisJaWYgKEdfT0JKRUNUX0NMQVNTICh3ZWJraXRfc291cF9odHRwX2lucHV0
X3N0cmVhbV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZSkKKwkJKCpHX09CSkVDVF9DTEFTUyAod2Vi
a2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcGFyZW50X2NsYXNzKS0+ZmluYWxpemUpKG9iamVj
dCk7Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9jbGFz
c19pbml0IChXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtQ2xhc3MgKmtsYXNzKQoreworCUdPYmpl
Y3RDbGFzcyAqZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChrbGFzcyk7CisJR0lucHV0
U3RyZWFtQ2xhc3MgKnN0cmVhbV9jbGFzcyA9IEdfSU5QVVRfU1RSRUFNX0NMQVNTIChrbGFzcyk7
CisKKwlnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUgKGtsYXNzLCBzaXplb2YgKFdlYktpdFNvdXBI
VFRQSW5wdXRTdHJlYW1Qcml2YXRlKSk7CisKKwlnb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IHdl
YmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2ZpbmFsaXplOworCisJc3RyZWFtX2NsYXNzLT5y
ZWFkX2ZuID0gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVhZDsKKwlzdHJlYW1fY2xh
c3MtPmNsb3NlX2ZuID0gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2U7CisJc3Ry
ZWFtX2NsYXNzLT5yZWFkX2FzeW5jID0gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVh
ZF9hc3luYzsKKwlzdHJlYW1fY2xhc3MtPnJlYWRfZmluaXNoID0gd2Via2l0X3NvdXBfaHR0cF9p
bnB1dF9zdHJlYW1fcmVhZF9maW5pc2g7CisJc3RyZWFtX2NsYXNzLT5jbG9zZV9hc3luYyA9IHdl
YmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlX2FzeW5jOworCXN0cmVhbV9jbGFzcy0+
Y2xvc2VfZmluaXNoID0gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2VfZmluaXNo
OworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2Vla2Fi
bGVfaWZhY2VfaW5pdCAoR1NlZWthYmxlSWZhY2UgKnNlZWthYmxlX2lmYWNlKQoreworCXNlZWth
YmxlX2lmYWNlLT50ZWxsID0gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fdGVsbDsKKwlz
ZWVrYWJsZV9pZmFjZS0+Y2FuX3NlZWsgPSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9j
YW5fc2VlazsKKwlzZWVrYWJsZV9pZmFjZS0+c2VlayA9IHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRf
c3RyZWFtX3NlZWs7CisJc2Vla2FibGVfaWZhY2UtPmNhbl90cnVuY2F0ZSA9IHdlYmtpdF9zb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX2Nhbl90cnVuY2F0ZTsKKwlzZWVrYWJsZV9pZmFjZS0+dHJ1bmNh
dGVfZm4gPSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV90cnVuY2F0ZTsKK30KKworc3Rh
dGljIHZvaWQKK3dlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2luaXQgKFdlYktpdFNvdXBI
VFRQSW5wdXRTdHJlYW0gKnN0cmVhbSkKK3sKKwk7Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRf
c291cF9odHRwX2lucHV0X3N0cmVhbV9xdWV1ZV9tZXNzYWdlIChXZWJLaXRTb3VwSFRUUElucHV0
U3RyZWFtICpzdHJlYW0pCit7CisJV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnBy
aXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsK
KworCXByaXYtPmdvdF9oZWFkZXJzID0gcHJpdi0+ZmluaXNoZWQgPSBGQUxTRTsKKworCS8qIEFk
ZCBhbiBleHRyYSByZWYgc2luY2Ugc291cF9zZXNzaW9uX3F1ZXVlX21lc3NhZ2Ugc3RlYWxzIG9u
ZSAqLworCWdfb2JqZWN0X3JlZiAocHJpdi0+bXNnKTsKKwlzb3VwX3Nlc3Npb25fcXVldWVfbWVz
c2FnZSAocHJpdi0+c2Vzc2lvbiwgcHJpdi0+bXNnLCBOVUxMLCBOVUxMKTsKK30KKworLyoqCisg
KiB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9uZXc6CisgKiBAc2Vzc2lvbjogdGhlICNT
b3VwU2Vzc2lvbiB0byB1c2UKKyAqIEBtc2c6IHRoZSAjU291cE1lc3NhZ2Ugd2hvc2UgcmVzcG9u
c2Ugd2lsbCBiZSBzdHJlYW1lZAorICoKKyAqIFByZXBhcmVzIHRvIHNlbmQgQG1zZyBvdmVyIEBz
ZXNzaW9uLCBhbmQgcmV0dXJucyBhICNHSW5wdXRTdHJlYW0KKyAqIHRoYXQgY2FuIGJlIHVzZWQg
dG8gcmVhZCB0aGUgcmVzcG9uc2UuCisgKgorICogQG1zZyBtYXkgbm90IGJlIHNlbnQgdW50aWwg
dGhlIGZpcnN0IHJlYWQgY2FsbDsgaWYgeW91IG5lZWQgdG8gbG9vaworICogYXQgdGhlIHN0YXR1
cyBjb2RlIG9yIHJlc3BvbnNlIGhlYWRlcnMgYmVmb3JlIHJlYWRpbmcgdGhlIGJvZHksIHlvdQor
ICogY2FuIHVzZSB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kKCkgb3Igd2Via2l0
X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luYygpCisgKiB0byBmb3JjZSB0aGUgbWVz
c2FnZSB0byBiZSBzZW50IGFuZCB0aGUgcmVzcG9uc2UgaGVhZGVycyByZWFkLgorICoKKyAqIElm
IEBtc2cgZ2V0cyBhIG5vbi0yeHggcmVzdWx0LCB0aGUgZmlyc3QgcmVhZCAob3Igc2VuZCkgd2ls
bCByZXR1cm4KKyAqIGFuIGVycm9yIHdpdGggdHlwZSAlV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9T
VFJFQU1fSFRUUF9FUlJPUi4KKyAqCisgKiBJbnRlcm5hbGx5LCAjV2ViS2l0U291cEhUVFBJbnB1
dFN0cmVhbSBpcyBpbXBsZW1lbnRlZCB1c2luZyBhc3luY2hyb25vdXMgSS9PLAorICogc28gaWYg
eW91IGFyZSB1c2luZyB0aGUgc3luY2hyb25vdXMgQVBJIChlZywKKyAqIGdfaW5wdXRfc3RyZWFt
X3JlYWQoKSksIHlvdSBzaG91bGQgY3JlYXRlIGEgbmV3ICNHTWFpbkNvbnRleHQgYW5kCisgKiBz
ZXQgaXQgYXMgdGhlICVTT1VQX1NFU1NJT05fQVNZTkNfQ09OVEVYVCBwcm9wZXJ0eSBvbiBAc2Vz
c2lvbi4gKElmCisgKiB5b3UgZG9uJ3QsIHRoZW4gc3luY2hyb25vdXMgI0dJbnB1dFN0cmVhbSBj
YWxscyB3aWxsIGNhdXNlIHRoZSBtYWluCisgKiBsb29wIHRvIGJlIHJ1biByZWN1cnNpdmVseS4p
IFRoZSBhc3luYyAjR0lucHV0U3RyZWFtIEFQSSB3b3JrcyBmaW5lCisgKiB3aXRoICVTT1VQX1NF
U1NJT05fQVNZTkNfQ09OVEVYVCBlaXRoZXIgc2V0IG9yIHVuc2V0LgorICoKKyAqIFJldHVybnM6
IGEgbmV3ICNHSW5wdXRTdHJlYW0uCisgKiovCitXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtICoK
K3dlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX25ldyAoU291cFNlc3Npb24gKnNlc3Npb24s
IFNvdXBNZXNzYWdlICptc2cpCit7CisJV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSAqc3RyZWFt
OworCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2OworCisJZ19yZXR1cm5f
dmFsX2lmX2ZhaWwgKFNPVVBfSVNfTUVTU0FHRSAobXNnKSwgTlVMTCk7CisKKwlzdHJlYW0gPSBn
X29iamVjdF9uZXcgKFdFQktJVF9UWVBFX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU0sIE5VTEwpOwor
CXByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFt
KTsKKworCXByaXYtPnNlc3Npb24gPSBnX29iamVjdF9yZWYgKHNlc3Npb24pOworCXByaXYtPmFz
eW5jX2NvbnRleHQgPSBzb3VwX3Nlc3Npb25fZ2V0X2FzeW5jX2NvbnRleHQgKHNlc3Npb24pOwor
CXByaXYtPm1zZyA9IGdfb2JqZWN0X3JlZiAobXNnKTsKKworCWdfc2lnbmFsX2Nvbm5lY3QgKG1z
ZywgImdvdF9oZWFkZXJzIiwKKwkJCSAgR19DQUxMQkFDSyAod2Via2l0X3NvdXBfaHR0cF9pbnB1
dF9zdHJlYW1fZ290X2hlYWRlcnMpLCBzdHJlYW0pOworCWdfc2lnbmFsX2Nvbm5lY3QgKG1zZywg
ImdvdF9jaHVuayIsCisJCQkgIEdfQ0FMTEJBQ0sgKHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3Ry
ZWFtX2dvdF9jaHVuayksIHN0cmVhbSk7CisJZ19zaWduYWxfY29ubmVjdCAobXNnLCAiZmluaXNo
ZWQiLAorCQkJICBHX0NBTExCQUNLICh3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9maW5p
c2hlZCksIHN0cmVhbSk7CisKKwl3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9xdWV1ZV9t
ZXNzYWdlIChzdHJlYW0pOworCXJldHVybiBzdHJlYW07Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJr
aXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9nb3RfaGVhZGVycyAoU291cE1lc3NhZ2UgKm1zZywg
Z3BvaW50ZXIgc3RyZWFtKQoreworCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpw
cml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7
CisKKwkvKiBJZiB0aGUgc3RhdHVzIGlzIHVuc3VjY2Vzc2Z1bCwgd2UganVzdCBpZ25vcmUgdGhl
IHNpZ25hbCBhbmQgbGV0CisJICogbGlic291cCBrZWVwIGdvaW5nIChldmVudHVhbGx5IGVpdGhl
ciBpdCB3aWxsIHJlcXVldWUgdGhlIHJlcXVlc3QKKwkgKiAoYWZ0ZXIgaGFuZGxpbmcgYXV0aGVu
dGljYXRpb24vcmVkaXJlY3Rpb24pLCBvciBlbHNlIHRoZQorCSAqICJmaW5pc2hlZCIgaGFuZGxl
ciB3aWxsIHJ1bikuCisJICovCisJaWYgKCFTT1VQX1NUQVRVU19JU19TVUNDRVNTRlVMIChtc2ct
PnN0YXR1c19jb2RlKSkKKwkJcmV0dXJuOworCisJcHJpdi0+Z290X2hlYWRlcnMgPSBUUlVFOwor
CWlmICghcHJpdi0+Y2FsbGVyX2J1ZmZlcikgeworCQkvKiBOb3QgcmVhZHkgdG8gcmVhZCB0aGUg
Ym9keSB5ZXQgKi8KKwkJc291cF9zZXNzaW9uX3BhdXNlX21lc3NhZ2UgKHByaXYtPnNlc3Npb24s
IG1zZyk7CisJfQorCisJaWYgKHByaXYtPmdvdF9oZWFkZXJzX2NiKQorCQlwcml2LT5nb3RfaGVh
ZGVyc19jYiAoc3RyZWFtKTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX2h0dHBfaW5w
dXRfc3RyZWFtX2dvdF9jaHVuayAoU291cE1lc3NhZ2UgKm1zZywgU291cEJ1ZmZlciAqY2h1bmtf
YnVmZmVyLAorCQkJCQkgZ3BvaW50ZXIgc3RyZWFtKQoreworCVdlYktpdFNvdXBIVFRQSW5wdXRT
dHJlYW1Qcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BS
SVZBVEUgKHN0cmVhbSk7CisJY29uc3QgZ2NoYXIgKmNodW5rID0gY2h1bmtfYnVmZmVyLT5kYXRh
OworCWdzaXplIGNodW5rX3NpemUgPSBjaHVua19idWZmZXItPmxlbmd0aDsKKworCS8qIFdlIG9u
bHkgcGF5IGF0dGVudGlvbiB0byB0aGUgY2h1bmsgaWYgaXQncyBwYXJ0IG9mIGEgc3VjY2Vzc2Z1
bAorCSAqIHJlc3BvbnNlLgorCSAqLworCWlmICghU09VUF9TVEFUVVNfSVNfU1VDQ0VTU0ZVTCAo
bXNnLT5zdGF0dXNfY29kZSkpCisJCXJldHVybjsKKworCS8qIFNhbml0eSBjaGVjayAqLworCWlm
IChwcml2LT5jYWxsZXJfYnVmc2l6ZSA9PSAwIHx8IHByaXYtPmxlZnRvdmVyX2J1ZnNpemUgIT0g
MCkKKwkJZ193YXJuaW5nICgid2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fZ290X2NodW5r
IGNhbGxlZCBhZ2FpbiBiZWZvcmUgcHJldmlvdXMgY2h1bmsgd2FzIHByb2Nlc3NlZCIpOworCisJ
LyogQ29weSB3aGF0IHdlIGNhbiBpbnRvIHByaXYtPmNhbGxlcl9idWZmZXIgKi8KKwlpZiAocHJp
di0+Y2FsbGVyX2J1ZnNpemUgLSBwcml2LT5jYWxsZXJfbnJlYWQgPiAwKSB7CisJCWdzaXplIG5y
ZWFkID0gTUlOIChjaHVua19zaXplLCBwcml2LT5jYWxsZXJfYnVmc2l6ZSAtIHByaXYtPmNhbGxl
cl9ucmVhZCk7CisKKwkJbWVtY3B5IChwcml2LT5jYWxsZXJfYnVmZmVyICsgcHJpdi0+Y2FsbGVy
X25yZWFkLCBjaHVuaywgbnJlYWQpOworCQlwcml2LT5jYWxsZXJfbnJlYWQgKz0gbnJlYWQ7CisJ
CXByaXYtPm9mZnNldCArPSBucmVhZDsKKwkJY2h1bmsgKz0gbnJlYWQ7CisJCWNodW5rX3NpemUg
LT0gbnJlYWQ7CisJfQorCisJaWYgKGNodW5rX3NpemUgPiAwKSB7CisJCS8qIENvcHkgdGhlIHJl
c3QgaW50byBwcml2LT5sZWZ0b3Zlcl9idWZmZXIuIElmCisJCSAqIHRoZXJlJ3MgYWxyZWFkeSBz
b21lIGRhdGEgdGhlcmUsIHJlYWxsb2MgYW5kCisJCSAqIGFwcGVuZC4gT3RoZXJ3aXNlIGp1c3Qg
Y29weS4KKwkJICovCisJCWlmIChwcml2LT5sZWZ0b3Zlcl9idWZzaXplKSB7CisJCQlwcml2LT5s
ZWZ0b3Zlcl9idWZmZXIgPSBnX3JlYWxsb2MgKHByaXYtPmxlZnRvdmVyX2J1ZmZlciwKKwkJCQkJ
CQkgICBwcml2LT5sZWZ0b3Zlcl9idWZzaXplICsgY2h1bmtfc2l6ZSk7CisJCQltZW1jcHkgKHBy
aXYtPmxlZnRvdmVyX2J1ZmZlciArIHByaXYtPmxlZnRvdmVyX2J1ZnNpemUsCisJCQkJY2h1bmss
IGNodW5rX3NpemUpOworCQkJcHJpdi0+bGVmdG92ZXJfYnVmc2l6ZSArPSBjaHVua19zaXplOwor
CQl9IGVsc2UgeworCQkJcHJpdi0+bGVmdG92ZXJfYnVmc2l6ZSA9IGNodW5rX3NpemU7CisJCQlw
cml2LT5sZWZ0b3Zlcl9idWZmZXIgPSBnX21lbWR1cCAoY2h1bmssIGNodW5rX3NpemUpOworCQkJ
cHJpdi0+bGVmdG92ZXJfb2Zmc2V0ID0gMDsKKwkJfQorCX0KKworCXNvdXBfc2Vzc2lvbl9wYXVz
ZV9tZXNzYWdlIChwcml2LT5zZXNzaW9uLCBtc2cpOworCWlmIChwcml2LT5nb3RfY2h1bmtfY2Ip
CisJCXByaXYtPmdvdF9jaHVua19jYiAoc3RyZWFtKTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtp
dF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2ZpbmlzaGVkIChTb3VwTWVzc2FnZSAqbXNnLCBncG9p
bnRlciBzdHJlYW0pCit7CisJV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYg
PSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKwor
CXByaXYtPmZpbmlzaGVkID0gVFJVRTsKKworCWlmIChwcml2LT5maW5pc2hlZF9jYikKKwkJcHJp
di0+ZmluaXNoZWRfY2IgKHN0cmVhbSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgord2Via2l0X3Nv
dXBfaHR0cF9pbnB1dF9zdHJlYW1fY2FuY2VsbGVkIChHSU9DaGFubmVsICpjaGFuLCBHSU9Db25k
aXRpb24gY29uZGl0aW9uLAorCQkJCQkgZ3BvaW50ZXIgc3RyZWFtKQoreworCVdlYktpdFNvdXBI
VFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJF
QU1fR0VUX1BSSVZBVEUgKHN0cmVhbSk7CisKKwlwcml2LT5jYW5jZWxfd2F0Y2ggPSBOVUxMOwor
CisJc291cF9zZXNzaW9uX3BhdXNlX21lc3NhZ2UgKHByaXYtPnNlc3Npb24sIHByaXYtPm1zZyk7
CisJaWYgKHByaXYtPmNhbmNlbGxlZF9jYikKKwkJcHJpdi0+Y2FuY2VsbGVkX2NiIChzdHJlYW0p
OworCisJcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfaHR0cF9p
bnB1dF9zdHJlYW1fcHJlcGFyZV9mb3JfaW8gKEdJbnB1dFN0cmVhbSAqc3RyZWFtLAorCQkJCQkg
ICAgICBHQ2FuY2VsbGFibGUgKmNhbmNlbGxhYmxlLAorCQkJCQkgICAgICBndWNoYXIgICAgICAg
KmJ1ZmZlciwKKwkJCQkJICAgICAgZ3NpemUgY291bnQpCit7CisJV2ViS2l0U291cEhUVFBJbnB1
dFN0cmVhbVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRf
UFJJVkFURSAoc3RyZWFtKTsKKwlpbnQgY2FuY2VsX2ZkOworCisJcHJpdi0+Y2FuY2VsbGFibGUg
PSBjYW5jZWxsYWJsZTsKKwljYW5jZWxfZmQgPSBnX2NhbmNlbGxhYmxlX2dldF9mZCAoY2FuY2Vs
bGFibGUpOworCWlmIChjYW5jZWxfZmQgIT0gLTEpIHsKKwkJR0lPQ2hhbm5lbCAqY2hhbiA9IGdf
aW9fY2hhbm5lbF91bml4X25ldyAoY2FuY2VsX2ZkKTsKKwkJcHJpdi0+Y2FuY2VsX3dhdGNoID0g
c291cF9hZGRfaW9fd2F0Y2ggKHByaXYtPmFzeW5jX2NvbnRleHQsIGNoYW4sCisJCQkJCQkJR19J
T19JTiB8IEdfSU9fRVJSIHwgR19JT19IVVAsCisJCQkJCQkJd2Via2l0X3NvdXBfaHR0cF9pbnB1
dF9zdHJlYW1fY2FuY2VsbGVkLAorCQkJCQkJCXN0cmVhbSk7CisJCWdfaW9fY2hhbm5lbF91bnJl
ZiAoY2hhbik7CisJfQorCisJcHJpdi0+Y2FsbGVyX2J1ZmZlciA9IGJ1ZmZlcjsKKwlwcml2LT5j
YWxsZXJfYnVmc2l6ZSA9IGNvdW50OworCXByaXYtPmNhbGxlcl9ucmVhZCA9IDA7CisKKwlpZiAo
cHJpdi0+Z290X2hlYWRlcnMpCisJCXNvdXBfc2Vzc2lvbl91bnBhdXNlX21lc3NhZ2UgKHByaXYt
PnNlc3Npb24sIHByaXYtPm1zZyk7Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfc291cF9odHRw
X2lucHV0X3N0cmVhbV9kb25lX2lvIChHSW5wdXRTdHJlYW0gKnN0cmVhbSkKK3sKKwlXZWJLaXRT
b3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRf
U1RSRUFNX0dFVF9QUklWQVRFIChzdHJlYW0pOworCisJaWYgKHByaXYtPmNhbmNlbF93YXRjaCkg
eworCQlnX3NvdXJjZV9kZXN0cm95IChwcml2LT5jYW5jZWxfd2F0Y2gpOworCQlwcml2LT5jYW5j
ZWxfd2F0Y2ggPSBOVUxMOworCQlnX2NhbmNlbGxhYmxlX3JlbGVhc2VfZmQgKHByaXYtPmNhbmNl
bGxhYmxlKTsKKwl9CisJcHJpdi0+Y2FuY2VsbGFibGUgPSBOVUxMOworCisJcHJpdi0+Y2FsbGVy
X2J1ZmZlciA9IE5VTEw7CisJcHJpdi0+Y2FsbGVyX2J1ZnNpemUgPSAwOworfQorCitzdGF0aWMg
Z2Jvb2xlYW4KK3NldF9lcnJvcl9pZl9odHRwX2ZhaWxlZCAoU291cE1lc3NhZ2UgKm1zZywgR0Vy
cm9yICoqZXJyb3IpCit7CisJaWYgKCFTT1VQX1NUQVRVU19JU19TVUNDRVNTRlVMIChtc2ctPnN0
YXR1c19jb2RlKSkgeworCQlnX3NldF9lcnJvcl9saXRlcmFsIChlcnJvciwgU09VUF9IVFRQX0VS
Uk9SLAorCQkJCSAgICAgbXNnLT5zdGF0dXNfY29kZSwgbXNnLT5yZWFzb25fcGhyYXNlKTsKKwkJ
cmV0dXJuIFRSVUU7CisJfQorCXJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGdzaXplCityZWFk
X2Zyb21fbGVmdG92ZXIgKFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2LAor
CQkgICAgZ3BvaW50ZXIgYnVmZmVyLCBnc2l6ZSBidWZzaXplKQoreworCWdzaXplIG5yZWFkOwor
CisJaWYgKHByaXYtPmxlZnRvdmVyX2J1ZnNpemUgLSBwcml2LT5sZWZ0b3Zlcl9vZmZzZXQgPD0g
YnVmc2l6ZSkgeworCQlucmVhZCA9IHByaXYtPmxlZnRvdmVyX2J1ZnNpemUgLSBwcml2LT5sZWZ0
b3Zlcl9vZmZzZXQ7CisJCW1lbWNweSAoYnVmZmVyLCBwcml2LT5sZWZ0b3Zlcl9idWZmZXIgKyBw
cml2LT5sZWZ0b3Zlcl9vZmZzZXQsIG5yZWFkKTsKKworCQlnX2ZyZWUgKHByaXYtPmxlZnRvdmVy
X2J1ZmZlcik7CisJCXByaXYtPmxlZnRvdmVyX2J1ZmZlciA9IE5VTEw7CisJCXByaXYtPmxlZnRv
dmVyX2J1ZnNpemUgPSBwcml2LT5sZWZ0b3Zlcl9vZmZzZXQgPSAwOworCX0gZWxzZSB7CisJCW5y
ZWFkID0gYnVmc2l6ZTsKKwkJbWVtY3B5IChidWZmZXIsIHByaXYtPmxlZnRvdmVyX2J1ZmZlciAr
IHByaXYtPmxlZnRvdmVyX29mZnNldCwgbnJlYWQpOworCQlwcml2LT5sZWZ0b3Zlcl9vZmZzZXQg
Kz0gbnJlYWQ7CisJfQorCisJcHJpdi0+b2Zmc2V0ICs9IG5yZWFkOworCXJldHVybiBucmVhZDsK
K30KKworLyogVGhpcyBkb2VzIHRoZSB3b3JrIG9mIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3Ry
ZWFtX3NlbmQoKSwgYXNzdW1pbmcgdGhhdCB0aGUKKyAqIEdJbnB1dFN0cmVhbSBwZW5kaW5nIGZs
YWcgaGFzIGFscmVhZHkgYmVlbiBzZXQuIEl0IGlzIGFsc28gdXNlZCBieQorICogd2Via2l0X3Nv
dXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luYygpIGluIHNvbWUgY2lyY3Vtc3RhbmNlcy4K
KyAqLworc3RhdGljIGdib29sZWFuCit3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5k
X2ludGVybmFsIChHSW5wdXRTdHJlYW0gICpzdHJlYW0sCisJCQkJCSAgICAgR0NhbmNlbGxhYmxl
ICAqY2FuY2VsbGFibGUsCisJCQkJCSAgICAgR0Vycm9yICAgICAgICoqZXJyb3IpCit7CisJV2Vi
S2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lO
UFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKworCXdlYmtpdF9zb3VwX2h0dHBfaW5w
dXRfc3RyZWFtX3ByZXBhcmVfZm9yX2lvIChzdHJlYW0sIGNhbmNlbGxhYmxlLCBOVUxMLCAwKTsK
Kwl3aGlsZSAoIXByaXYtPmZpbmlzaGVkICYmICFwcml2LT5nb3RfaGVhZGVycyAmJgorCSAgICAg
ICAhZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQgKGNhbmNlbGxhYmxlKSkKKwkJZ19tYWluX2Nv
bnRleHRfaXRlcmF0aW9uIChwcml2LT5hc3luY19jb250ZXh0LCBUUlVFKTsKKwl3ZWJraXRfc291
cF9odHRwX2lucHV0X3N0cmVhbV9kb25lX2lvIChzdHJlYW0pOworCisJaWYgKGdfY2FuY2VsbGFi
bGVfc2V0X2Vycm9yX2lmX2NhbmNlbGxlZCAoY2FuY2VsbGFibGUsIGVycm9yKSkKKwkJcmV0dXJu
IEZBTFNFOworCWVsc2UgaWYgKHNldF9lcnJvcl9pZl9odHRwX2ZhaWxlZCAocHJpdi0+bXNnLCBl
cnJvcikpCisJCXJldHVybiBGQUxTRTsKKwlyZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQK
K3NlbmRfc3luY19maW5pc2hlZCAoR0lucHV0U3RyZWFtICpzdHJlYW0pCit7CisJV2ViS2l0U291
cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NU
UkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKwlHRXJyb3IgKmVycm9yID0gTlVMTDsKKworCWlm
ICghZ19jYW5jZWxsYWJsZV9zZXRfZXJyb3JfaWZfY2FuY2VsbGVkIChwcml2LT5jYW5jZWxsYWJs
ZSwgJmVycm9yKSkKKwkJc2V0X2Vycm9yX2lmX2h0dHBfZmFpbGVkIChwcml2LT5tc2csICZlcnJv
cik7CisKKwlwcml2LT5nb3RfaGVhZGVyc19jYiA9IE5VTEw7CisJcHJpdi0+ZmluaXNoZWRfY2Ig
PSBOVUxMOworCisJLyogV2FrZSB1cCB0aGUgbWFpbiBjb250ZXh0IGl0ZXJhdGlvbiAqLworCWdf
c291cmNlX2F0dGFjaCAoZ19pZGxlX3NvdXJjZV9uZXcgKCksIE5VTEwpOworfQorCisvKioKKyAq
IHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmQ6CisgKiBAaHR0cHN0cmVhbTogYSAj
V2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbQorICogQGNhbmNlbGxhYmxlOiBvcHRpb25hbCAjR0Nh
bmNlbGxhYmxlIG9iamVjdCwgJU5VTEwgdG8gaWdub3JlLgorICogQGVycm9yOiBsb2NhdGlvbiB0
byBzdG9yZSB0aGUgZXJyb3Igb2NjdXJpbmcsIG9yICVOVUxMIHRvIGlnbm9yZQorICoKKyAqIFN5
bmNocm9ub3VzbHkgc2VuZHMgdGhlIEhUVFAgcmVxdWVzdCBhc3NvY2lhdGVkIHdpdGggQHN0cmVh
bSwgYW5kCisgKiByZWFkcyB0aGUgcmVzcG9uc2UgaGVhZGVycy4gQ2FsbCB0aGlzIGFmdGVyIHdl
YmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX25ldygpCisgKiBhbmQgYmVmb3JlIHRoZSBmaXJz
dCBnX2lucHV0X3N0cmVhbV9yZWFkKCkgaWYgeW91IHdhbnQgdG8gY2hlY2sgdGhlCisgKiBIVFRQ
IHN0YXR1cyBjb2RlIGJlZm9yZSB5b3Ugc3RhcnQgcmVhZGluZy4KKyAqCisgKiBSZXR1cm4gdmFs
dWU6ICVUUlVFIGlmIG1zZyBoYXMgYSBzdWNjZXNzZnVsICgyeHgpIHN0YXR1cywgJUZBTFNFIGlm
CisgKiBub3QuCisgKiovCitnYm9vbGVhbgord2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1f
c2VuZCAoV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSAgKmh0dHBzdHJlYW0sCisJCQkJICAgIEdD
YW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkgICAgR0Vycm9yICAgICAgICAg
ICAgICAqKmVycm9yKQoreworCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2
ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKGh0dHBzdHJlYW0p
OworCUdJbnB1dFN0cmVhbSAqaXN0cmVhbSA9IChHSW5wdXRTdHJlYW0gKilodHRwc3RyZWFtOwor
CWdib29sZWFuIHJlc3VsdDsKKworCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChXRUJLSVRfSVNfU09V
UF9IVFRQX0lOUFVUX1NUUkVBTSAoaHR0cHN0cmVhbSksIEZBTFNFKTsKKworCWlmICghZ19pbnB1
dF9zdHJlYW1fc2V0X3BlbmRpbmcgKGlzdHJlYW0sIGVycm9yKSkKKwkJcmV0dXJuIEZBTFNFOwor
CisJcHJpdi0+Z290X2hlYWRlcnNfY2IgPSBzZW5kX3N5bmNfZmluaXNoZWQ7CisJcHJpdi0+Zmlu
aXNoZWRfY2IgPSBzZW5kX3N5bmNfZmluaXNoZWQ7CisKKwlyZXN1bHQgPSB3ZWJraXRfc291cF9o
dHRwX2lucHV0X3N0cmVhbV9zZW5kX2ludGVybmFsIChpc3RyZWFtLCBjYW5jZWxsYWJsZSwgZXJy
b3IpOworCWdfaW5wdXRfc3RyZWFtX2NsZWFyX3BlbmRpbmcgKGlzdHJlYW0pOworCisJcmV0dXJu
IHJlc3VsdDsKK30KKworc3RhdGljIGdzc2l6ZQord2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJl
YW1fcmVhZCAoR0lucHV0U3RyZWFtICpzdHJlYW0sCisJCQkJICAgIHZvaWQgICAgICAgICAqYnVm
ZmVyLAorCQkJCSAgICBnc2l6ZSBjb3VudCwKKwkJCQkgICAgR0NhbmNlbGxhYmxlICpjYW5jZWxs
YWJsZSwKKwkJCQkgICAgR0Vycm9yICAgICAgKiplcnJvcikKK3sKKwlXZWJLaXRTb3VwSFRUUElu
cHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dF
VF9QUklWQVRFIChzdHJlYW0pOworCisJaWYgKHByaXYtPmZpbmlzaGVkKQorCQlyZXR1cm4gMDsK
KworCS8qIElmIHRoZXJlIGlzIGRhdGEgbGVmdG92ZXIgZnJvbSBhIHByZXZpb3VzIHJlYWQsIHJl
dHVybiBpdC4gKi8KKwlpZiAocHJpdi0+bGVmdG92ZXJfYnVmc2l6ZSkKKwkJcmV0dXJuIHJlYWRf
ZnJvbV9sZWZ0b3ZlciAocHJpdiwgYnVmZmVyLCBjb3VudCk7CisKKwkvKiBObyBsZWZ0b3ZlciBk
YXRhLCBhY2NlcHQgb25lIGNodW5rIGZyb20gdGhlIG5ldHdvcmsgKi8KKwl3ZWJraXRfc291cF9o
dHRwX2lucHV0X3N0cmVhbV9wcmVwYXJlX2Zvcl9pbyAoc3RyZWFtLCBjYW5jZWxsYWJsZSwgYnVm
ZmVyLCBjb3VudCk7CisJd2hpbGUgKCFwcml2LT5maW5pc2hlZCAmJiBwcml2LT5jYWxsZXJfbnJl
YWQgPT0gMCAmJgorCSAgICAgICAhZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQgKGNhbmNlbGxh
YmxlKSkKKwkJZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uIChwcml2LT5hc3luY19jb250ZXh0LCBU
UlVFKTsKKwl3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9kb25lX2lvIChzdHJlYW0pOwor
CisJaWYgKHByaXYtPmNhbGxlcl9ucmVhZCA+IDApCisJCXJldHVybiBwcml2LT5jYWxsZXJfbnJl
YWQ7CisKKwlpZiAoZ19jYW5jZWxsYWJsZV9zZXRfZXJyb3JfaWZfY2FuY2VsbGVkIChjYW5jZWxs
YWJsZSwgZXJyb3IpKQorCQlyZXR1cm4gLTE7CisJZWxzZSBpZiAoc2V0X2Vycm9yX2lmX2h0dHBf
ZmFpbGVkIChwcml2LT5tc2csIGVycm9yKSkKKwkJcmV0dXJuIC0xOworCWVsc2UKKwkJcmV0dXJu
IDA7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgord2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1f
Y2xvc2UgKEdJbnB1dFN0cmVhbSAqc3RyZWFtLAorCQkJCSAgICAgR0NhbmNlbGxhYmxlICpjYW5j
ZWxsYWJsZSwKKwkJCQkgICAgIEdFcnJvciAgICAgICoqZXJyb3IpCit7CisJV2ViS2l0U291cEhU
VFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVB
TV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKworCWlmICghcHJpdi0+ZmluaXNoZWQpCisJCXNvdXBf
c2Vzc2lvbl9jYW5jZWxfbWVzc2FnZSAocHJpdi0+c2Vzc2lvbiwgcHJpdi0+bXNnLCBTT1VQX1NU
QVRVU19DQU5DRUxMRUQpOworCisJcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkCit3cmFw
cGVyX2NhbGxiYWNrIChHT2JqZWN0ICpzb3VyY2Vfb2JqZWN0LCBHQXN5bmNSZXN1bHQgKnJlcywK
KwkJICBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJR0lucHV0U3RyZWFtICpzdHJlYW0gPSBHX0lO
UFVUX1NUUkVBTSAoc291cmNlX29iamVjdCk7CisJV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVBy
aXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAo
c3RyZWFtKTsKKworCWdfaW5wdXRfc3RyZWFtX2NsZWFyX3BlbmRpbmcgKHN0cmVhbSk7CisJaWYg
KHByaXYtPm91dHN0YW5kaW5nX2NhbGxiYWNrKQorCQkoKnByaXYtPm91dHN0YW5kaW5nX2NhbGxi
YWNrKShzb3VyY2Vfb2JqZWN0LCByZXMsIHVzZXJfZGF0YSk7CisJcHJpdi0+b3V0c3RhbmRpbmdf
Y2FsbGJhY2sgPSBOVUxMOworCWdfb2JqZWN0X3VucmVmIChzdHJlYW0pOworfQorCitzdGF0aWMg
dm9pZAorc2VuZF9hc3luY190aHJlYWQgKEdTaW1wbGVBc3luY1Jlc3VsdCAqcmVzLAorCQkgICBH
T2JqZWN0ICpvYmplY3QsCisJCSAgIEdDYW5jZWxsYWJsZSAqY2FuY2VsbGFibGUpCit7CisJR0Vy
cm9yICplcnJvciA9IE5VTEw7CisJZ2Jvb2xlYW4gc3VjY2VzczsKKworCXN1Y2Nlc3MgPSB3ZWJr
aXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2ludGVybmFsIChHX0lOUFVUX1NUUkVBTSAo
b2JqZWN0KSwKKwkJCQkJCQljYW5jZWxsYWJsZSwgJmVycm9yKTsKKwlnX3NpbXBsZV9hc3luY19y
ZXN1bHRfc2V0X29wX3Jlc19nYm9vbGVhbiAocmVzLCBzdWNjZXNzKTsKKwlpZiAoZXJyb3IpIHsK
KwkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9mcm9tX2Vycm9yIChyZXMsIGVycm9yKTsKKwkJ
Z19lcnJvcl9mcmVlIChlcnJvcik7CisJfQorfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBf
aHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luY19pbl90aHJlYWQgKEdJbnB1dFN0cmVhbSAgICAg
ICAgKnN0cmVhbSwKKwkJCQkJCSAgICBpbnQgaW9fcHJpb3JpdHksCisJCQkJCQkgICAgR0NhbmNl
bGxhYmxlICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJCQkgICAgR0FzeW5jUmVhZHlDYWxsYmFj
ayBjYWxsYmFjaywKKwkJCQkJCSAgICBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJR1NpbXBsZUFz
eW5jUmVzdWx0ICpyZXM7CisKKwlyZXMgPSBnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3IChHX09C
SkVDVCAoc3RyZWFtKSwgY2FsbGJhY2ssIHVzZXJfZGF0YSwKKwkJCQkJIHdlYmtpdF9zb3VwX2h0
dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmNfaW5fdGhyZWFkKTsKKwlnX3NpbXBsZV9hc3luY19y
ZXN1bHRfcnVuX2luX3RocmVhZCAocmVzLCBzZW5kX2FzeW5jX3RocmVhZCwKKwkJCQkJICAgICBp
b19wcmlvcml0eSwgY2FuY2VsbGFibGUpOworCWdfb2JqZWN0X3VucmVmIChyZXMpOworfQorCitz
dGF0aWMgdm9pZAorc2VuZF9hc3luY19maW5pc2hlZCAoR0lucHV0U3RyZWFtICpzdHJlYW0pCit7
CisJV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9I
VFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsKKwlHU2ltcGxlQXN5bmNSZXN1
bHQgKnJlc3VsdDsKKwlHRXJyb3IgKmVycm9yID0gTlVMTDsKKworCWlmICghZ19jYW5jZWxsYWJs
ZV9zZXRfZXJyb3JfaWZfY2FuY2VsbGVkIChwcml2LT5jYW5jZWxsYWJsZSwgJmVycm9yKSkKKwkJ
c2V0X2Vycm9yX2lmX2h0dHBfZmFpbGVkIChwcml2LT5tc2csICZlcnJvcik7CisKKwlwcml2LT5n
b3RfaGVhZGVyc19jYiA9IE5VTEw7CisJcHJpdi0+ZmluaXNoZWRfY2IgPSBOVUxMOworCXdlYmtp
dF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2RvbmVfaW8gKHN0cmVhbSk7CisKKwlyZXN1bHQgPSBw
cml2LT5yZXN1bHQ7CisJcHJpdi0+cmVzdWx0ID0gTlVMTDsKKworCWdfc2ltcGxlX2FzeW5jX3Jl
c3VsdF9zZXRfb3BfcmVzX2dib29sZWFuIChyZXN1bHQsIGVycm9yID09IE5VTEwpOworCWlmIChl
cnJvcikgeworCQlnX3NpbXBsZV9hc3luY19yZXN1bHRfc2V0X2Zyb21fZXJyb3IgKHJlc3VsdCwg
ZXJyb3IpOworCQlnX2Vycm9yX2ZyZWUgKGVycm9yKTsKKwl9CisJZ19zaW1wbGVfYXN5bmNfcmVz
dWx0X2NvbXBsZXRlIChyZXN1bHQpOworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfaHR0
cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luY19pbnRlcm5hbCAoR0lucHV0U3RyZWFtICAgICAgICAq
c3RyZWFtLAorCQkJCQkJICAgaW50IGlvX3ByaW9yaXR5LAorCQkJCQkJICAgR0NhbmNlbGxhYmxl
ICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJCQkgICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxi
YWNrLAorCQkJCQkJICAgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCVdlYktpdFNvdXBIVFRQSW5w
dXRTdHJlYW1Qcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VU
X1BSSVZBVEUgKHN0cmVhbSk7CisKKwlnX29iamVjdF9yZWYgKHN0cmVhbSk7CisJcHJpdi0+b3V0
c3RhbmRpbmdfY2FsbGJhY2sgPSBjYWxsYmFjazsKKworCS8qIElmIHRoZSBzZXNzaW9uIHVzZXMg
dGhlIGRlZmF1bHQgR01haW5Db250ZXh0LCB0aGVuIHdlIGNhbiBkbworCSAqIGFzeW5jIEkvTyBk
aXJlY3RseS4gQnV0IGlmIGl0IGhhcyBpdHMgb3duIG1haW4gY29udGV4dCwgaXQncworCSAqIGVh
c2llciB0byBqdXN0IHJ1biBpdCBpbiBhbm90aGVyIHRocmVhZC4KKwkgKi8KKwlpZiAoc291cF9z
ZXNzaW9uX2dldF9hc3luY19jb250ZXh0IChwcml2LT5zZXNzaW9uKSkgeworCQl3ZWJraXRfc291
cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jX2luX3RocmVhZCAoc3RyZWFtLCBpb19wcmlv
cml0eSwgY2FuY2VsbGFibGUsCisJCQkJCQkJICAgICB3cmFwcGVyX2NhbGxiYWNrLCB1c2VyX2Rh
dGEpOworCQlyZXR1cm47CisJfQorCisJcHJpdi0+Z290X2hlYWRlcnNfY2IgPSBzZW5kX2FzeW5j
X2ZpbmlzaGVkOworCXByaXYtPmZpbmlzaGVkX2NiID0gc2VuZF9hc3luY19maW5pc2hlZDsKKwor
CXdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3ByZXBhcmVfZm9yX2lvIChzdHJlYW0sIGNh
bmNlbGxhYmxlLCBOVUxMLCAwKTsKKwlwcml2LT5yZXN1bHQgPSBnX3NpbXBsZV9hc3luY19yZXN1
bHRfbmV3IChHX09CSkVDVCAoc3RyZWFtKSwKKwkJCQkJCSAgd3JhcHBlcl9jYWxsYmFjaywgdXNl
cl9kYXRhLAorCQkJCQkJICB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5j
KTsKK30KKworLyoqCisgKiB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5j
OgorICogQGh0dHBzdHJlYW06IGEgI1dlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0KKyAqIEBpb19w
cmlvcml0eTogdGhlIGlvIHByaW9yaXR5IG9mIHRoZSByZXF1ZXN0LgorICogQGNhbmNlbGxhYmxl
OiBvcHRpb25hbCAjR0NhbmNlbGxhYmxlIG9iamVjdCwgJU5VTEwgdG8gaWdub3JlLgorICogQGNh
bGxiYWNrOiBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIHJlcXVlc3QgaXMgc2F0aXNmaWVkCisg
KiBAdXNlcl9kYXRhOiB0aGUgZGF0YSB0byBwYXNzIHRvIGNhbGxiYWNrIGZ1bmN0aW9uCisgKgor
ICogQXN5bmNocm9ub3VzbHkgc2VuZHMgdGhlIEhUVFAgcmVxdWVzdCBhc3NvY2lhdGVkIHdpdGgg
QHN0cmVhbSwgYW5kCisgKiByZWFkcyB0aGUgcmVzcG9uc2UgaGVhZGVycy4gQ2FsbCB0aGlzIGFm
dGVyIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX25ldygpCisgKiBhbmQgYmVmb3JlIHRo
ZSBmaXJzdCBnX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jKCkgaWYgeW91IHdhbnQgdG8KKyAqIGNo
ZWNrIHRoZSBIVFRQIHN0YXR1cyBjb2RlIGJlZm9yZSB5b3Ugc3RhcnQgcmVhZGluZy4KKyAqKi8K
K3ZvaWQKK3dlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmMgKFdlYktpdFNv
dXBIVFRQSW5wdXRTdHJlYW0gKmh0dHBzdHJlYW0sCisJCQkJCSAgaW50IGlvX3ByaW9yaXR5LAor
CQkJCQkgIEdDYW5jZWxsYWJsZSAgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJCQkgIEdBc3luY1Jl
YWR5Q2FsbGJhY2sgY2FsbGJhY2ssCisJCQkJCSAgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCUdJ
bnB1dFN0cmVhbSAqaXN0cmVhbSA9IChHSW5wdXRTdHJlYW0gKilodHRwc3RyZWFtOworCUdFcnJv
ciAqZXJyb3IgPSBOVUxMOworCisJZ19yZXR1cm5faWZfZmFpbCAoV0VCS0lUX0lTX1NPVVBfSFRU
UF9JTlBVVF9TVFJFQU0gKGh0dHBzdHJlYW0pKTsKKworCWlmICghZ19pbnB1dF9zdHJlYW1fc2V0
X3BlbmRpbmcgKGlzdHJlYW0sICZlcnJvcikpIHsKKwkJZ19zaW1wbGVfYXN5bmNfcmVwb3J0X2dl
cnJvcl9pbl9pZGxlIChHX09CSkVDVCAoaHR0cHN0cmVhbSksCisJCQkJCQkgICAgICBjYWxsYmFj
aywKKwkJCQkJCSAgICAgIHVzZXJfZGF0YSwKKwkJCQkJCSAgICAgIGVycm9yKTsKKwkJZ19lcnJv
cl9mcmVlIChlcnJvcik7CisJCXJldHVybjsKKwl9CisJd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9z
dHJlYW1fc2VuZF9hc3luY19pbnRlcm5hbCAoaXN0cmVhbSwgaW9fcHJpb3JpdHksIGNhbmNlbGxh
YmxlLAorCQkJCQkJICAgIGNhbGxiYWNrLCB1c2VyX2RhdGEpOworfQorCisvKioKKyAqIHdlYmtp
dF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfZmluaXNoOgorICogQGh0dHBzdHJlYW06IGEg
I1dlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0KKyAqIEByZXN1bHQ6IGEgI0dBc3luY1Jlc3VsdC4K
KyAqIEBlcnJvcjogYSAjR0Vycm9yIGxvY2F0aW9uIHRvIHN0b3JlIHRoZSBlcnJvciBvY2N1cmlu
Zywgb3IgJU5VTEwgdG8KKyAqIGlnbm9yZS4KKyAqCisgKiBGaW5pc2hlcyBhIHdlYmtpdF9zb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX3NlbmRfYXN5bmMoKSBvcGVyYXRpb24uCisgKgorICogUmV0dXJu
IHZhbHVlOiAlVFJVRSBpZiB0aGUgbWVzc2FnZSB3YXMgc2VudCBzdWNjZXNzZnVsbHkgYW5kCisg
KiByZWNlaXZlZCBhIHN1Y2Nlc3NmdWwgc3RhdHVzIGNvZGUsICVGQUxTRSBpZiBub3QuCisgKiov
CitnYm9vbGVhbgord2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9maW5pc2ggKFdl
YktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gICpodHRwc3RyZWFtLAorCQkJCQkgICBHQXN5bmNSZXN1
bHQgICAgICAgICAqcmVzdWx0LAorCQkJCQkgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3Ip
Cit7CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpzaW1wbGU7CisKKwlnX3JldHVybl92YWxfaWZfZmFp
bCAoR19JU19TSU1QTEVfQVNZTkNfUkVTVUxUIChyZXN1bHQpLCBGQUxTRSk7CisJc2ltcGxlID0g
R19TSU1QTEVfQVNZTkNfUkVTVUxUIChyZXN1bHQpOworCisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwg
KGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfc291cmNlX3RhZyAoc2ltcGxlKSA9PSB3ZWJraXRf
c291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jLCBGQUxTRSk7CisKKwlpZiAoZ19zaW1w
bGVfYXN5bmNfcmVzdWx0X3Byb3BhZ2F0ZV9lcnJvciAoc2ltcGxlLCBlcnJvcikpCisJCXJldHVy
biBGQUxTRTsKKworCXJldHVybiBnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X29wX3Jlc19nYm9v
bGVhbiAoc2ltcGxlKTsKK30KKworc3RhdGljIHZvaWQKK3JlYWRfYXN5bmNfZG9uZSAoR0lucHV0
U3RyZWFtICpzdHJlYW0pCit7CisJV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbVByaXZhdGUgKnBy
aXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRfUFJJVkFURSAoc3RyZWFtKTsK
KwlHU2ltcGxlQXN5bmNSZXN1bHQgKnJlc3VsdDsKKwlHRXJyb3IgKmVycm9yID0gTlVMTDsKKwor
CXJlc3VsdCA9IHByaXYtPnJlc3VsdDsKKwlwcml2LT5yZXN1bHQgPSBOVUxMOworCisJaWYgKGdf
Y2FuY2VsbGFibGVfc2V0X2Vycm9yX2lmX2NhbmNlbGxlZCAocHJpdi0+Y2FuY2VsbGFibGUsICZl
cnJvcikgfHwKKwkgICAgc2V0X2Vycm9yX2lmX2h0dHBfZmFpbGVkIChwcml2LT5tc2csICZlcnJv
cikpIHsKKwkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9mcm9tX2Vycm9yIChyZXN1bHQsIGVy
cm9yKTsKKwkJZ19lcnJvcl9mcmVlIChlcnJvcik7CisJfSBlbHNlCisJCWdfc2ltcGxlX2FzeW5j
X3Jlc3VsdF9zZXRfb3BfcmVzX2dzc2l6ZSAocmVzdWx0LCBwcml2LT5jYWxsZXJfbnJlYWQpOwor
CisJcHJpdi0+Z290X2NodW5rX2NiID0gTlVMTDsKKwlwcml2LT5maW5pc2hlZF9jYiA9IE5VTEw7
CisJcHJpdi0+Y2FuY2VsbGVkX2NiID0gTlVMTDsKKwl3ZWJraXRfc291cF9odHRwX2lucHV0X3N0
cmVhbV9kb25lX2lvIChzdHJlYW0pOworCisJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRl
IChyZXN1bHQpOworCWdfb2JqZWN0X3VucmVmIChyZXN1bHQpOworfQorCitzdGF0aWMgdm9pZAor
d2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyAoR0lucHV0U3RyZWFtICAg
ICAgICAqc3RyZWFtLAorCQkJCQkgIHZvaWQgICAgICAgICAgICAgICAgKmJ1ZmZlciwKKwkJCQkJ
ICBnc2l6ZSBjb3VudCwKKwkJCQkJICBpbnQgaW9fcHJpb3JpdHksCisJCQkJCSAgR0NhbmNlbGxh
YmxlICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJCSAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxs
YmFjaywKKwkJCQkJICBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJV2ViS2l0U291cEhUVFBJbnB1
dFN0cmVhbVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9HRVRf
UFJJVkFURSAoc3RyZWFtKTsKKwlHU2ltcGxlQXN5bmNSZXN1bHQgKnJlc3VsdDsKKworCS8qIElm
IHRoZSBzZXNzaW9uIHVzZXMgdGhlIGRlZmF1bHQgR01haW5Db250ZXh0LCB0aGVuIHdlIGNhbiBk
bworCSAqIGFzeW5jIEkvTyBkaXJlY3RseS4gQnV0IGlmIGl0IGhhcyBpdHMgb3duIG1haW4gY29u
dGV4dCwgd2UgZmFsbAorCSAqIGJhY2sgdG8gdGhlIGFzeW5jLXZpYS1zeW5jLWluLWFub3RoZXIt
dGhyZWFkIGltcGxlbWVudGF0aW9uLgorCSAqLworCWlmIChzb3VwX3Nlc3Npb25fZ2V0X2FzeW5j
X2NvbnRleHQgKHByaXYtPnNlc3Npb24pKSB7CisJCUdfSU5QVVRfU1RSRUFNX0NMQVNTICh3ZWJr
aXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9wYXJlbnRfY2xhc3MpLT4KKwkJcmVhZF9hc3luYyAo
c3RyZWFtLCBidWZmZXIsIGNvdW50LCBpb19wcmlvcml0eSwKKwkJCSAgICBjYW5jZWxsYWJsZSwg
Y2FsbGJhY2ssIHVzZXJfZGF0YSk7CisJCXJldHVybjsKKwl9CisKKwlyZXN1bHQgPSBnX3NpbXBs
ZV9hc3luY19yZXN1bHRfbmV3IChHX09CSkVDVCAoc3RyZWFtKSwKKwkJCQkJICAgIGNhbGxiYWNr
LCB1c2VyX2RhdGEsCisJCQkJCSAgICB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9yZWFk
X2FzeW5jKTsKKworCWlmIChwcml2LT5maW5pc2hlZCkgeworCQlnX3NpbXBsZV9hc3luY19yZXN1
bHRfc2V0X29wX3Jlc19nc3NpemUgKHJlc3VsdCwgMCk7CisJCWdfc2ltcGxlX2FzeW5jX3Jlc3Vs
dF9jb21wbGV0ZV9pbl9pZGxlIChyZXN1bHQpOworCQlnX29iamVjdF91bnJlZiAocmVzdWx0KTsK
KwkJcmV0dXJuOworCX0KKworCWlmIChwcml2LT5sZWZ0b3Zlcl9idWZzaXplKSB7CisJCWdzaXpl
IG5yZWFkID0gcmVhZF9mcm9tX2xlZnRvdmVyIChwcml2LCBidWZmZXIsIGNvdW50KTsKKwkJZ19z
aW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ3NzaXplIChyZXN1bHQsIG5yZWFkKTsKKwkJ
Z19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlX2luX2lkbGUgKHJlc3VsdCk7CisJCWdfb2Jq
ZWN0X3VucmVmIChyZXN1bHQpOworCQlyZXR1cm47CisJfQorCisJcHJpdi0+cmVzdWx0ID0gcmVz
dWx0OworCisJcHJpdi0+Z290X2NodW5rX2NiID0gcmVhZF9hc3luY19kb25lOworCXByaXYtPmZp
bmlzaGVkX2NiID0gcmVhZF9hc3luY19kb25lOworCXByaXYtPmNhbmNlbGxlZF9jYiA9IHJlYWRf
YXN5bmNfZG9uZTsKKwl3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9wcmVwYXJlX2Zvcl9p
byAoc3RyZWFtLCBjYW5jZWxsYWJsZSwgYnVmZmVyLCBjb3VudCk7Cit9CisKK3N0YXRpYyBnc3Np
emUKK3dlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3JlYWRfZmluaXNoIChHSW5wdXRTdHJl
YW0gICpzdHJlYW0sCisJCQkJCSAgIEdBc3luY1Jlc3VsdCAgKnJlc3VsdCwKKwkJCQkJICAgR0Vy
cm9yICAgICAgICoqZXJyb3IpCit7CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpzaW1wbGU7CisKKwln
X3JldHVybl92YWxfaWZfZmFpbCAoR19JU19TSU1QTEVfQVNZTkNfUkVTVUxUIChyZXN1bHQpLCAt
MSk7CisJc2ltcGxlID0gR19TSU1QTEVfQVNZTkNfUkVTVUxUIChyZXN1bHQpOworCWdfcmV0dXJu
X3ZhbF9pZl9mYWlsIChnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X3NvdXJjZV90YWcgKHNpbXBs
ZSkgPT0gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcmVhZF9hc3luYywgLTEpOworCisJ
cmV0dXJuIGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfb3BfcmVzX2dzc2l6ZSAoc2ltcGxlKTsK
K30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlX2Fz
eW5jIChHSW5wdXRTdHJlYW0gICAgICAgKnN0cmVhbSwKKwkJCQkJICAgaW50IGlvX3ByaW9yaXR5
LAorCQkJCQkgICBHQ2FuY2VsbGFibGUgICAgICAgKmNhbmNlbGxhYmxlLAorCQkJCQkgICBHQXN5
bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAorCQkJCQkgICBncG9pbnRlciB1c2VyX2RhdGEpCit7
CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpyZXN1bHQ7CisJZ2Jvb2xlYW4gc3VjY2VzczsKKwlHRXJy
b3IgKmVycm9yID0gTlVMTDsKKworCXJlc3VsdCA9IGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9uZXcg
KEdfT0JKRUNUIChzdHJlYW0pLAorCQkJCQkgICAgY2FsbGJhY2ssIHVzZXJfZGF0YSwKKwkJCQkJ
ICAgIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlX2FzeW5jKTsKKwlzdWNjZXNz
ID0gd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fY2xvc2UgKHN0cmVhbSwgY2FuY2VsbGFi
bGUsICZlcnJvcik7CisJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9vcF9yZXNfZ2Jvb2xlYW4g
KHJlc3VsdCwgc3VjY2Vzcyk7CisJaWYgKGVycm9yKSB7CisJCWdfc2ltcGxlX2FzeW5jX3Jlc3Vs
dF9zZXRfZnJvbV9lcnJvciAocmVzdWx0LCBlcnJvcik7CisJCWdfZXJyb3JfZnJlZSAoZXJyb3Ip
OworCX0KKworCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9jb21wbGV0ZV9pbl9pZGxlIChyZXN1bHQp
OworCWdfb2JqZWN0X3VucmVmIChyZXN1bHQpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3dlYmtp
dF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX2Nsb3NlX2ZpbmlzaCAoR0lucHV0U3RyZWFtICAqc3Ry
ZWFtLAorCQkJCQkgICAgR0FzeW5jUmVzdWx0ICAqcmVzdWx0LAorCQkJCQkgICAgR0Vycm9yICAg
ICAgICoqZXJyb3IpCit7CisJLyogRmFpbHVyZXMgaGFuZGxlZCBpbiBnZW5lcmljIGNsb3NlX2Zp
bmlzaCBjb2RlICovCisJcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnb2Zmc2V0Cit3ZWJraXRf
c291cF9odHRwX2lucHV0X3N0cmVhbV90ZWxsIChHU2Vla2FibGUgKnNlZWthYmxlKQoreworCVdl
YktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9J
TlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHNlZWthYmxlKTsKKworCXJldHVybiBwcml2LT5vZmZz
ZXQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgord2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1f
Y2FuX3NlZWsgKEdTZWVrYWJsZSAqc2Vla2FibGUpCit7CisJcmV0dXJuIFRSVUU7Cit9CisKK2V4
dGVybiB2b2lkIHNvdXBfbWVzc2FnZV9pb19jbGVhbnVwIChTb3VwTWVzc2FnZSAqbXNnKTsKKwor
c3RhdGljIGdib29sZWFuCit3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZWVrIChHU2Vl
a2FibGUgICAgICpzZWVrYWJsZSwKKwkJCQkgICAgZ29mZnNldCBvZmZzZXQsCisJCQkJICAgIEdT
ZWVrVHlwZSB0eXBlLAorCQkJCSAgICBHQ2FuY2VsbGFibGUgICpjYW5jZWxsYWJsZSwKKwkJCQkg
ICAgR0Vycm9yICAgICAgICoqZXJyb3IpCit7CisJR0lucHV0U3RyZWFtICpzdHJlYW0gPSBHX0lO
UFVUX1NUUkVBTSAoc2Vla2FibGUpOworCVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1Qcml2YXRl
ICpwcml2ID0gV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fR0VUX1BSSVZBVEUgKHNlZWth
YmxlKTsKKwljaGFyICpyYW5nZTsKKworCWlmICh0eXBlID09IEdfU0VFS19FTkQpIHsKKwkJLyog
RklYTUU6IHdlIGNvdWxkIHNlbmQgImJ5dGVzPS1vZmZzZXQiLCBidXQgdW5sZXNzIHdlCisJCSAq
IGtub3cgdGhlIENvbnRlbnQtTGVuZ3RoLCB3ZSB3b3VsZG4ndCBiZSBhYmxlIHRvCisJCSAqIGFu
c3dlciBhIHRlbGwoKSBwcm9wZXJseS4gV2UgY291bGQgZmluZCB0aGUKKwkJICogQ29udGVudC1M
ZW5ndGggYnkgZG9pbmcgYSBIRUFELi4uCisJCSAqLworCisJCWdfc2V0X2Vycm9yX2xpdGVyYWwg
KGVycm9yLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX05PVF9TVVBQT1JURUQsCisJCQkJICAgICAi
R19TRUVLX0VORCBub3QgY3VycmVudGx5IHN1cHBvcnRlZCIpOworCQlyZXR1cm4gRkFMU0U7CisJ
fQorCisJaWYgKCFnX2lucHV0X3N0cmVhbV9zZXRfcGVuZGluZyAoc3RyZWFtLCBlcnJvcikpCisJ
CXJldHVybiBGQUxTRTsKKworCXNvdXBfc2Vzc2lvbl9jYW5jZWxfbWVzc2FnZSAocHJpdi0+c2Vz
c2lvbiwgcHJpdi0+bXNnLCBTT1VQX1NUQVRVU19DQU5DRUxMRUQpOworCXNvdXBfbWVzc2FnZV9p
b19jbGVhbnVwIChwcml2LT5tc2cpOworCisJc3dpdGNoICh0eXBlKSB7CisJCWNhc2UgR19TRUVL
X0NVUjoKKwkJCW9mZnNldCArPSBwcml2LT5vZmZzZXQ7CisJCS8qIGZhbGwgdGhyb3VnaCAqLwor
CisJCWNhc2UgR19TRUVLX1NFVDoKKwkJCXJhbmdlID0gZ19zdHJkdXBfcHJpbnRmICgiYnl0ZXM9
JSIgR19HVUlOVDY0X0ZPUk1BVCAiLSIsIChndWludDY0KW9mZnNldCk7CisJCQlwcml2LT5vZmZz
ZXQgPSBvZmZzZXQ7CisJCQlicmVhazsKKworCQljYXNlIEdfU0VFS19FTkQ6CisJCQlyYW5nZSA9
IE5VTEw7IC8qIGtlZXAgY29tcGlsZXJzIGhhcHB5ICovCisJCQlnX3JldHVybl92YWxfaWZfcmVh
Y2hlZCAoRkFMU0UpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCWdfcmV0dXJuX3ZhbF9p
Zl9yZWFjaGVkIChGQUxTRSk7CisJfQorCisJc291cF9tZXNzYWdlX2hlYWRlcnNfcmVtb3ZlIChw
cml2LT5tc2ctPnJlcXVlc3RfaGVhZGVycywgIlJhbmdlIik7CisJc291cF9tZXNzYWdlX2hlYWRl
cnNfYXBwZW5kIChwcml2LT5tc2ctPnJlcXVlc3RfaGVhZGVycywgIlJhbmdlIiwgcmFuZ2UpOwor
CWdfZnJlZSAocmFuZ2UpOworCisJd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fcXVldWVf
bWVzc2FnZSAoV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU0gKHN0cmVhbSkpOworCisJZ19p
bnB1dF9zdHJlYW1fY2xlYXJfcGVuZGluZyAoc3RyZWFtKTsKKwlyZXR1cm4gVFJVRTsKK30KKwor
c3RhdGljIGdib29sZWFuCit3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9jYW5fdHJ1bmNh
dGUgKEdTZWVrYWJsZSAqc2Vla2FibGUpCit7CisJcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMg
Z2Jvb2xlYW4KK3dlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX3RydW5jYXRlIChHU2Vla2Fi
bGUgICAgICpzZWVrYWJsZSwKKwkJCQkJZ29mZnNldCBvZmZzZXQsCisJCQkJCUdDYW5jZWxsYWJs
ZSAgKmNhbmNlbGxhYmxlLAorCQkJCQlHRXJyb3IgICAgICAgKiplcnJvcikKK3sKKwlnX3NldF9l
cnJvcl9saXRlcmFsIChlcnJvciwgR19JT19FUlJPUiwgR19JT19FUlJPUl9OT1RfU1VQUE9SVEVE
LAorCQkJICAgICAiVHJ1bmNhdGUgbm90IGFsbG93ZWQgb24gaW5wdXQgc3RyZWFtIik7CisJcmV0
dXJuIEZBTFNFOworfQorCitTb3VwTWVzc2FnZSAqCit3ZWJraXRfc291cF9odHRwX2lucHV0X3N0
cmVhbV9nZXRfbWVzc2FnZSAoV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSAqaHR0cHN0cmVhbSkK
K3sKKwlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtUHJpdmF0ZSAqcHJpdiA9IFdFQktJVF9TT1VQ
X0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9QUklWQVRFIChodHRwc3RyZWFtKTsKKwlyZXR1cm4gcHJp
di0+bXNnID8gZ19vYmplY3RfcmVmIChwcml2LT5tc2cpIDogTlVMTDsKK30KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1dC1zdHJl
YW0uaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtaHR0cC1pbnB1
dC1zdHJlYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Yjk4NTU5Ci0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291
cC1odHRwLWlucHV0LXN0cmVhbS5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qIC0qLSBNb2RlOiBDOyB0
YWItd2lkdGg6IDg7IGluZGVudC10YWJzLW1vZGU6IHQ7IGMtYmFzaWMtb2Zmc2V0OiA4IC0qLSAq
LworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOSBSZWQgSGF0LCBJbmMuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
CisgKiBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0
ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBs
YWNlLCBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisj
aWZuZGVmIF9fV0VCS0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fSF9fCisjZGVmaW5lIF9fV0VC
S0lUX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU1fSF9fCisKKyNpbmNsdWRlIDxnaW8vZ2lvLmg+Cisj
aW5jbHVkZSA8bGlic291cC9zb3VwLXR5cGVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmlu
ZSBXRUJLSVRfVFlQRV9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNICAgICAgICAgKHdlYmtpdF9zb3Vw
X2h0dHBfaW5wdXRfc3RyZWFtX2dldF90eXBlICgpKQorI2RlZmluZSBXRUJLSVRfU09VUF9IVFRQ
X0lOUFVUX1NUUkVBTShvKSAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUICgo
byksIFdFQktJVF9UWVBFX1NPVVBfSFRUUF9JTlBVVF9TVFJFQU0sIFdlYktpdFNvdXBIVFRQSW5w
dXRTdHJlYW0pKQorI2RlZmluZSBXRUJLSVRfU09VUF9IVFRQX0lOUFVUX1NUUkVBTV9DTEFTUyhr
KSAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUICgoayksIFdFQktJVF9UWVBFX1NPVVBfSFRU
UF9JTlBVVF9TVFJFQU0sIFdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW1DbGFzcykpCisjZGVmaW5l
IFdFQktJVF9JU19TT1VQX0hUVFBfSU5QVVRfU1RSRUFNKG8pICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX1RZUEUgKChvKSwgV0VCS0lUX1RZUEVfU09VUF9IVFRQX0lOUFVUX1NUUkVBTSkp
CisjZGVmaW5lIFdFQktJVF9JU19TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0NMQVNTKGspICAoR19U
WVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrKSwgV0VCS0lUX1RZUEVfU09VUF9IVFRQX0lOUFVUX1NU
UkVBTSkpCisjZGVmaW5lIFdFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0dFVF9DTEFTUyhv
KSAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUyAoKG8pLCBXRUJLSVRfVFlQRV9TT1VQX0hUVFBf
SU5QVVRfU1RSRUFNLCBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtQ2xhc3MpKQorCit0eXBlZGVm
IHN0cnVjdCBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtIFdlYktpdFNvdXBIVFRQSW5wdXRTdHJl
YW07Cit0eXBlZGVmIHN0cnVjdCBXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtQ2xhc3MgV2ViS2l0
U291cEhUVFBJbnB1dFN0cmVhbUNsYXNzOworCitzdHJ1Y3QgV2ViS2l0U291cEhUVFBJbnB1dFN0
cmVhbSB7CisJR0lucHV0U3RyZWFtIHBhcmVudDsKK307CisKK3N0cnVjdCBXZWJLaXRTb3VwSFRU
UElucHV0U3RyZWFtQ2xhc3MgeworCUdJbnB1dFN0cmVhbUNsYXNzIHBhcmVudF9jbGFzczsKKwor
CS8qIFBhZGRpbmcgZm9yIGZ1dHVyZSBleHBhbnNpb24gKi8KKwl2b2lkICgqX2dfcmVzZXJ2ZWQx
KSh2b2lkKTsKKwl2b2lkICgqX2dfcmVzZXJ2ZWQyKSh2b2lkKTsKKwl2b2lkICgqX2dfcmVzZXJ2
ZWQzKSh2b2lkKTsKKwl2b2lkICgqX2dfcmVzZXJ2ZWQ0KSh2b2lkKTsKKwl2b2lkICgqX2dfcmVz
ZXJ2ZWQ1KSh2b2lkKTsKK307CisKK0dUeXBlIHdlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFt
X2dldF90eXBlICh2b2lkKSBHX0dOVUNfQ09OU1Q7CisKK1dlYktpdFNvdXBIVFRQSW5wdXRTdHJl
YW0gKndlYmtpdF9zb3VwX2h0dHBfaW5wdXRfc3RyZWFtX25ldyAoU291cFNlc3Npb24gICAgICAg
ICAqc2Vzc2lvbiwKKwkJCQkJCQkgICAgICBTb3VwTWVzc2FnZSAgICAgICAgICptc2cpOworCitn
Ym9vbGVhbiAgICAgICAgICAgICB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kIChX
ZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtICpodHRwc3RyZWFtLAorCQkJCQkJCSBHQ2FuY2VsbGFi
bGUgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkJCQkgR0Vycm9yICAgICAgICAgICAgICoqZXJy
b3IpOworCit2b2lkICAgICAgICAgICAgICAgICB3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVh
bV9zZW5kX2FzeW5jIChXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtICpodHRwc3RyZWFtLAorCQkJ
CQkJCSAgICAgICBpbnQgaW9fcHJpb3JpdHksCisJCQkJCQkJICAgICAgIEdDYW5jZWxsYWJsZSAg
ICAgICAgKmNhbmNlbGxhYmxlLAorCQkJCQkJCSAgICAgICBHQXN5bmNSZWFkeUNhbGxiYWNrIGNh
bGxiYWNrLAorCQkJCQkJCSAgICAgICBncG9pbnRlciB1c2VyX2RhdGEpOworZ2Jvb2xlYW4gICAg
ICAgICAgICAgd2Via2l0X3NvdXBfaHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9maW5pc2ggKFdlYktp
dFNvdXBIVFRQSW5wdXRTdHJlYW0gKmh0dHBzdHJlYW0sCisJCQkJCQkJCUdBc3luY1Jlc3VsdCAg
ICAgICAgKnJlc3VsdCwKKwkJCQkJCQkJR0Vycm9yICAgICAgICAgICAgICoqZXJyb3IpOworCitT
b3VwTWVzc2FnZSAgICAgICAgICp3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9nZXRfbWVz
c2FnZSAoV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSAqaHR0cHN0cmVhbSk7CisKK0dfRU5EX0RF
Q0xTCisKKyNlbmRpZiAvKiBfX1dFQktJVF9TT1VQX0hUVFBfSU5QVVRfU1RSRUFNX0hfXyAqLwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1
ZXN0LWRhdGEuYyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVx
dWVzdC1kYXRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg0OTI2OQot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3Nv
dXAtcmVxdWVzdC1kYXRhLmMKQEAgLTAsMCArMSwxNzAgQEAKKy8qIC0qLSBNb2RlOiBDOyB0YWIt
d2lkdGg6IDg7IGluZGVudC10YWJzLW1vZGU6IHQ7IGMtYmFzaWMtb2Zmc2V0OiA4IC0qLSAqLwor
LyoKKyAqIHNvdXAtcmVxdWVzdC1kYXRhLmM6IGRhdGE6IFVSSSByZXF1ZXN0IG9iamVjdAorICoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+
CisjZW5kaWYKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3QtZGF0YS5oIgorCisjaW5jbHVkZSAic291
cC1yZXF1ZXN0ZXIuaCIKKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDxnbGli
L2dpMThuLmg+CisKK0dfREVGSU5FX1RZUEUgKFdlYktpdFNvdXBSZXF1ZXN0RGF0YSwgd2Via2l0
X3NvdXBfcmVxdWVzdF9kYXRhLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1QpCisKK3N0cnVjdCBf
V2ViS2l0U291cFJlcXVlc3REYXRhUHJpdmF0ZSB7CisJZ3NpemUgY29udGVudF9sZW5ndGg7CisJ
Y2hhciAqY29udGVudF90eXBlOworfTsKKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX3JlcXVl
c3RfZGF0YV9pbml0IChXZWJLaXRTb3VwUmVxdWVzdERhdGEgKmRhdGEpCit7CisJZGF0YS0+cHJp
diA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSAoZGF0YSwgV0VCS0lUX1RZUEVfU09VUF9S
RVFVRVNUX0RBVEEsIFdlYktpdFNvdXBSZXF1ZXN0RGF0YVByaXZhdGUpOworfQorCitzdGF0aWMg
dm9pZAord2Via2l0X3NvdXBfcmVxdWVzdF9kYXRhX2ZpbmFsaXplIChHT2JqZWN0ICpvYmplY3Qp
Cit7CisJV2ViS2l0U291cFJlcXVlc3REYXRhICpkYXRhID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9E
QVRBIChvYmplY3QpOworCisJZ19mcmVlIChkYXRhLT5wcml2LT5jb250ZW50X3R5cGUpOworCisJ
R19PQkpFQ1RfQ0xBU1MgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZGF0YV9wYXJlbnRfY2xhc3MpLT5m
aW5hbGl6ZSAob2JqZWN0KTsKK30KKworc3RhdGljIGdib29sZWFuCit3ZWJraXRfc291cF9yZXF1
ZXN0X2RhdGFfY2hlY2tfdXJpIChXZWJLaXRTb3VwUmVxdWVzdCAgKnJlcXVlc3QsCisJCQkJICAg
IFNvdXBVUkkgICAgICAqdXJpLAorCQkJCSAgICBHRXJyb3IgICAgICAqKmVycm9yKQoreworCXJl
dHVybiB1cmktPmhvc3QgPT0gTlVMTDsKK30KKworc3RhdGljIEdJbnB1dFN0cmVhbSAqCit3ZWJr
aXRfc291cF9yZXF1ZXN0X2RhdGFfc2VuZCAoV2ViS2l0U291cFJlcXVlc3QgICAqcmVxdWVzdCwK
KwkJCSAgICAgICBHQ2FuY2VsbGFibGUgICpjYW5jZWxsYWJsZSwKKwkJCSAgICAgICBHRXJyb3Ig
ICAgICAgKiplcnJvcikKK3sKKwlXZWJLaXRTb3VwUmVxdWVzdERhdGEgKmRhdGEgPSBXRUJLSVRf
U09VUF9SRVFVRVNUX0RBVEEgKHJlcXVlc3QpOworCVNvdXBVUkkgKnVyaSA9IHdlYmtpdF9zb3Vw
X3JlcXVlc3RfZ2V0X3VyaSAocmVxdWVzdCk7CisJR0lucHV0U3RyZWFtICptZW1zdHJlYW07CisJ
Y29uc3QgY2hhciAqY29tbWEsICpzZW1pLCAqc3RhcnQsICplbmQ7CisJZ2Jvb2xlYW4gYmFzZTY0
ID0gRkFMU0U7CisKKwlnY2hhciAqdXJpc3RyID0gc291cF91cmlfdG9fc3RyaW5nICh1cmksIEZB
TFNFKTsKKwljb21tYSA9IHN0cmNociAodXJpc3RyLCAnLCcpOworCWlmIChjb21tYSAmJiBjb21t
YSAhPSB1cmlzdHIpIHsKKwkJLyogRGVhbCB3aXRoIE1JTUUgdHlwZSAvIHBhcmFtcyAqLworCQlz
ZW1pID0gbWVtY2hyICh1cmlzdHIsICc7JywgY29tbWEgLSB1cmlzdHIpOworCQllbmQgPSBzZW1p
ID8gc2VtaSA6IGNvbW1hOworCisJCWlmIChzZW1pICYmICFnX2FzY2lpX3N0cm5jYXNlY21wIChz
ZW1pLCAiO2Jhc2U2NCIsIE1BWCAoY29tbWEgLSBzZW1pLCBzdHJsZW4gKCI7YmFzZTY0IikpKSkK
KwkJCWJhc2U2NCA9IFRSVUU7CisKKwkJaWYgKGVuZCAhPSB1cmlzdHIpCisJCQlpZiAoYmFzZTY0
KQorCQkJCWRhdGEtPnByaXYtPmNvbnRlbnRfdHlwZSA9IGdfc3RybmR1cCAodXJpc3RyLCBlbmQg
LSB1cmlzdHIpOworCQkJZWxzZQorCQkJCWRhdGEtPnByaXYtPmNvbnRlbnRfdHlwZSA9CisJCQkJ
CXdlYmtpdF9zb3VwX3JlcXVlc3RfdXJpX2RlY29kZWRfY29weSAodXJpc3RyLCBlbmQgLSB1cmlz
dHIpOworCX0KKworCW1lbXN0cmVhbSA9IGdfbWVtb3J5X2lucHV0X3N0cmVhbV9uZXcgKCk7CisK
KwlzdGFydCA9IGNvbW1hID8gY29tbWEgKyAxIDogdXJpc3RyOworCisJaWYgKCpzdGFydCkgewor
CQlndWNoYXIgKmJ1ZjsKKworCQlpZiAoYmFzZTY0KSB7CisJCQlpbnQgaW5sZW4sIHN0YXRlID0g
MDsKKwkJCWd1aW50IHNhdmUgPSAwOworCisJCQlpbmxlbiA9IHN0cmxlbiAoc3RhcnQpOworCQkJ
YnVmID0gZ19tYWxsb2MgKGlubGVuICogMyAvIDQpOworCQkJZGF0YS0+cHJpdi0+Y29udGVudF9s
ZW5ndGggPQorCQkJCWdfYmFzZTY0X2RlY29kZV9zdGVwIChzdGFydCwgaW5sZW4sIGJ1ZiwKKwkJ
CQkJCSAgICAgICZzdGF0ZSwgJnNhdmUpOworCQkJaWYgKHN0YXRlICE9IDApIHsKKwkJCQlnX2Zy
ZWUgKGJ1Zik7CisJCQkJZ290byBmYWlsOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogQ2Fubm90
IHVzZSBnX3VyaV91bmVzY2FwZV9zdHJpbmcgbm9yCisJCQkgICBzb3VwX3VyaV9kZWNvZGUgYmVj
YXVzZSB3ZSBkb24ndCB3YW50IHRvCisJCQkgICBmYWlsIGZvciB0aGluZ3MgbGlrZSAiJTNFJSUz
QyIgLT4gIj4lPCIgKi8KKwkJCWJ1ZiA9IChndWNoYXIgKil3ZWJraXRfc291cF9yZXF1ZXN0X3Vy
aV9kZWNvZGVkX2NvcHkgKHN0YXJ0LCBzdHJsZW4gKHN0YXJ0KSk7CisJCQlpZiAoIWJ1ZikKKwkJ
CQlnb3RvIGZhaWw7CisJCQlkYXRhLT5wcml2LT5jb250ZW50X2xlbmd0aCA9IHN0cmxlbiAoKGNo
YXIgKilidWYpOworCQl9CisKKwkJZ19tZW1vcnlfaW5wdXRfc3RyZWFtX2FkZF9kYXRhIChHX01F
TU9SWV9JTlBVVF9TVFJFQU0gKG1lbXN0cmVhbSksCisJCQkJCQlidWYsIGRhdGEtPnByaXYtPmNv
bnRlbnRfbGVuZ3RoLAorCQkJCQkJZ19mcmVlKTsKKwl9CisJZ19mcmVlICh1cmlzdHIpOworCisJ
cmV0dXJuIG1lbXN0cmVhbTsKKworIGZhaWw6CisJZ19mcmVlICh1cmlzdHIpOworCWdfc2V0X2Vy
cm9yIChlcnJvciwgV0VCS0lUX1NPVVBfRVJST1IsIFdFQktJVF9TT1VQX0VSUk9SX0JBRF9VUkks
CisJCSAgICAgXyAoIlVuYWJsZSB0byBkZWNvZGUgVVJJOiAlcyIpLCBzdGFydCk7CisJZ19vYmpl
Y3RfdW5yZWYgKG1lbXN0cmVhbSk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBnb2Zmc2V0
Cit3ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFfZ2V0X2NvbnRlbnRfbGVuZ3RoIChXZWJLaXRTb3Vw
UmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlXZWJLaXRTb3VwUmVxdWVzdERhdGEgKmRhdGEgPSBXRUJL
SVRfU09VUF9SRVFVRVNUX0RBVEEgKHJlcXVlc3QpOworCisJcmV0dXJuIGRhdGEtPnByaXYtPmNv
bnRlbnRfbGVuZ3RoOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCit3ZWJraXRfc291cF9yZXF1
ZXN0X2RhdGFfZ2V0X2NvbnRlbnRfdHlwZSAoV2ViS2l0U291cFJlcXVlc3QgKnJlcXVlc3QpCit7
CisJV2ViS2l0U291cFJlcXVlc3REYXRhICpkYXRhID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9EQVRB
IChyZXF1ZXN0KTsKKworCXJldHVybiBkYXRhLT5wcml2LT5jb250ZW50X3R5cGU7Cit9CisKK3N0
YXRpYyB2b2lkCit3ZWJraXRfc291cF9yZXF1ZXN0X2RhdGFfY2xhc3NfaW5pdCAoV2ViS2l0U291
cFJlcXVlc3REYXRhQ2xhc3MgKnJlcXVlc3RfZGF0YV9jbGFzcykKK3sKKwlHT2JqZWN0Q2xhc3Mg
Km9iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTIChyZXF1ZXN0X2RhdGFfY2xhc3MpOworCVdl
YktpdFNvdXBSZXF1ZXN0Q2xhc3MgKnJlcXVlc3RfY2xhc3MgPQorCQlXRUJLSVRfU09VUF9SRVFV
RVNUX0NMQVNTIChyZXF1ZXN0X2RhdGFfY2xhc3MpOworCisJZ190eXBlX2NsYXNzX2FkZF9wcml2
YXRlIChyZXF1ZXN0X2RhdGFfY2xhc3MsIHNpemVvZiAoV2ViS2l0U291cFJlcXVlc3REYXRhUHJp
dmF0ZSkpOworCisJb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9zb3VwX3JlcXVlc3Rf
ZGF0YV9maW5hbGl6ZTsKKworCXJlcXVlc3RfY2xhc3MtPmNoZWNrX3VyaSA9IHdlYmtpdF9zb3Vw
X3JlcXVlc3RfZGF0YV9jaGVja191cmk7CisJcmVxdWVzdF9jbGFzcy0+c2VuZCA9IHdlYmtpdF9z
b3VwX3JlcXVlc3RfZGF0YV9zZW5kOworCXJlcXVlc3RfY2xhc3MtPmdldF9jb250ZW50X2xlbmd0
aCA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfZGF0YV9nZXRfY29udGVudF9sZW5ndGg7CisJcmVxdWVz
dF9jbGFzcy0+Z2V0X2NvbnRlbnRfdHlwZSA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfZGF0YV9nZXRf
Y29udGVudF90eXBlOworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvY2FjaGUvc291cC1yZXF1ZXN0LWRhdGEuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYzk2MzFhNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1kYXRhLmgKQEAgLTAsMCArMSw1MiBAQAorLyog
LSotIE1vZGU6IEM7IHRhYi13aWR0aDogODsgaW5kZW50LXRhYnMtbW9kZTogdDsgYy1iYXNpYy1v
ZmZzZXQ6IDggLSotICovCisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJlZCBIYXQsIEluYy4K
KyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXRUJLSVRfU09VUF9S
RVFVRVNUX0RBVEFfSAorI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNUX0RBVEFfSCAxCisKKyNp
bmNsdWRlICJzb3VwLXJlcXVlc3QuaCIKKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJ
VF9UWVBFX1NPVVBfUkVRVUVTVF9EQVRBICAgICAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVlc3Rf
ZGF0YV9nZXRfdHlwZSAoKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9EQVRBKG9iamVj
dCkgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmplY3QpLCBXRUJLSVRf
VFlQRV9TT1VQX1JFUVVFU1RfREFUQSwgV2ViS2l0U291cFJlcXVlc3REYXRhKSkKKyNkZWZpbmUg
V0VCS0lUX1NPVVBfUkVRVUVTVF9EQVRBX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NM
QVNTX0NBU1QgKChrbGFzcyksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9EQVRBLCBXZWJLaXRT
b3VwUmVxdWVzdERhdGFDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19TT1VQX1JFUVVFU1RfREFU
QShvYmplY3QpICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqZWN0KSwgV0VC
S0lUX1RZUEVfU09VUF9SRVFVRVNUX0RBVEEpKQorI2RlZmluZSBXRUJLSVRfSVNfU09VUF9SRVFV
RVNUX0RBVEFfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwg
V0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0RBVEEpKQorI2RlZmluZSBXRUJLSVRfU09VUF9SRVFV
RVNUX0RBVEFfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTICgob2Jq
KSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0RBVEEsIFdlYktpdFNvdXBSZXF1ZXN0RGF0YUNs
YXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0RGF0YVByaXZhdGUgV2Vi
S2l0U291cFJlcXVlc3REYXRhUHJpdmF0ZTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCVdlYktpdFNv
dXBSZXF1ZXN0IHBhcmVudDsKKworCVdlYktpdFNvdXBSZXF1ZXN0RGF0YVByaXZhdGUgKnByaXY7
Cit9IFdlYktpdFNvdXBSZXF1ZXN0RGF0YTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCVdlYktpdFNv
dXBSZXF1ZXN0Q2xhc3MgcGFyZW50OworfSBXZWJLaXRTb3VwUmVxdWVzdERhdGFDbGFzczsKKwor
R1R5cGUgd2Via2l0X3NvdXBfcmVxdWVzdF9kYXRhX2dldF90eXBlICh2b2lkKTsKKworR19FTkRf
REVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9TT1VQX1JFUVVFU1RfREFUQV9IICovCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtZmls
ZS5jIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWZp
bGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWRlZGI2Ci0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1
ZXN0LWZpbGUuYwpAQCAtMCwwICsxLDMzMiBAQAorLyogLSotIE1vZGU6IEM7IHRhYi13aWR0aDog
ODsgaW5kZW50LXRhYnMtbW9kZTogdDsgYy1iYXNpYy1vZmZzZXQ6IDggLSotICovCisvKgorICog
c291cC1yZXF1ZXN0LWZpbGUuYzogZmlsZTogVVJJIHJlcXVlc3Qgb2JqZWN0CisgKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2Fs
aWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRp
ZgorCisjaW5jbHVkZSAic291cC1yZXF1ZXN0LWZpbGUuaCIKKyNpbmNsdWRlICJzb3VwLWRpcmVj
dG9yeS1pbnB1dC1zdHJlYW0uaCIKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3Rlci5oIgorI2luY2x1
ZGUgPGdsaWIvZ2kxOG4uaD4KKworR19ERUZJTkVfVFlQRSAoV2ViS2l0U291cFJlcXVlc3RGaWxl
LCB3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGUsIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVCkKKwor
c3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdEZpbGVQcml2YXRlIHsKKwlHRmlsZSAqZ2ZpbGU7CisK
KwljaGFyICptaW1lX3R5cGU7CisJZ29mZnNldCBzaXplOworfTsKKworR0ZpbGUgKgord2Via2l0
X3NvdXBfcmVxdWVzdF9maWxlX2dldF9maWxlIChXZWJLaXRTb3VwUmVxdWVzdEZpbGUgKmZpbGUp
Cit7CisJcmV0dXJuIGdfb2JqZWN0X3JlZiAoZmlsZS0+cHJpdi0+Z2ZpbGUpOworfQorCitzdGF0
aWMgdm9pZAord2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2luaXQgKFdlYktpdFNvdXBSZXF1ZXN0
RmlsZSAqZmlsZSkKK3sKKwlmaWxlLT5wcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRF
IChmaWxlLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfRklMRSwgV2ViS2l0U291cFJlcXVlc3RG
aWxlUHJpdmF0ZSk7CisKKwlmaWxlLT5wcml2LT5zaXplID0gLTE7Cit9CisKK3N0YXRpYyB2b2lk
Cit3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfZmluYWxpemUgKEdPYmplY3QgKm9iamVjdCkKK3sK
KwlXZWJLaXRTb3VwUmVxdWVzdEZpbGUgKmZpbGUgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0ZJTEUg
KG9iamVjdCk7CisKKwlpZiAoZmlsZS0+cHJpdi0+Z2ZpbGUpCisJCWdfb2JqZWN0X3VucmVmIChm
aWxlLT5wcml2LT5nZmlsZSk7CisJZ19mcmVlIChmaWxlLT5wcml2LT5taW1lX3R5cGUpOworCisJ
R19PQkpFQ1RfQ0xBU1MgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9wYXJlbnRfY2xhc3MpLT5m
aW5hbGl6ZSAob2JqZWN0KTsKK30KKworc3RhdGljIGdib29sZWFuCit3ZWJraXRfc291cF9yZXF1
ZXN0X2ZpbGVfY2hlY2tfdXJpIChXZWJLaXRTb3VwUmVxdWVzdCAgKnJlcXVlc3QsCisJCQkJICAg
IFNvdXBVUkkgICAgICAqdXJpLAorCQkJCSAgICBHRXJyb3IgICAgICAqKmVycm9yKQoreworCS8q
ICJmaWxlOi9mb28iIGlzIG5vdCB2YWxpZCAqLworCWlmICghdXJpLT5ob3N0KQorCQlyZXR1cm4g
RkFMU0U7CisKKwkvKiBidXQgaXQgbXVzdCBiZSAiZmlsZTovLy8uLi4iIG9yICJmaWxlOi8vbG9j
YWxob3N0Ly4uLiIgKi8KKwlpZiAodXJpLT5zY2hlbWUgPT0gU09VUF9VUklfU0NIRU1FX0ZJTEUg
JiYKKwkgICAgKnVyaS0+aG9zdCAmJgorCSAgICBnX2FzY2lpX3N0cmNhc2VjbXAgKHVyaS0+aG9z
dCwgImxvY2FsaG9zdCIpICE9IDApCisJCXJldHVybiBGQUxTRTsKKworCXJldHVybiBUUlVFOwor
fQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2Z0cF9tYWluX2xvb3Bf
cXVpdCAoR09iamVjdCAgICAgICpvYmplY3QsCisJCQkJCSAgICAgR0FzeW5jUmVzdWx0ICpyZXN1
bHQsCisJCQkJCSAgICAgZ3BvaW50ZXIgbG9vcCkKK3sKKwlnX21haW5fbG9vcF9xdWl0IChsb29w
KTsKK30KKworLyogVGhpcyBpcyBhIHNvbWV3aGF0IGhhY2t5IHdheSB0byBnZXQgRlRQIHRvIGFs
bW9zdCB3b3JrLiBUaGUgcHJvcGVyIHdheSB0bworICogZ2V0IEZUUCB0byBfcmVhbGx5XyB3b3Jr
IGludm9sdmVzIGhhY2tpbmcgR0lPIHRvIGhhdmUgQVBJcyB0byBoYW5kbGUKKyAqIGNhbm9uY2lh
bCBVUkxzLgorICovCitzdGF0aWMgR0ZpbGUgKgord2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2Vu
c3VyZV9maWxlX2Z0cCAoU291cFVSSSAgICAgICAqdXJpLAorCQkJCQkgIEdDYW5jZWxsYWJsZSAg
KmNhbmNlbGxhYmxlLAorCQkJCQkgIEdFcnJvciAgICAgICAqKmVycm9yKQoreworCVNvdXBVUkkg
Kmhvc3Q7CisJY2hhciAqczsKKwlHRmlsZSAqZmlsZSwgKnJlc3VsdDsKKwlHTW91bnQgKm1vdW50
OworCisJaG9zdCA9IHNvdXBfdXJpX2NvcHlfaG9zdCAodXJpKTsKKwlzID0gc291cF91cmlfdG9f
c3RyaW5nIChob3N0LCBGQUxTRSk7CisJZmlsZSA9IGdfZmlsZV9uZXdfZm9yX3VyaSAocyk7CisJ
c291cF91cmlfZnJlZSAoaG9zdCk7CisJZ19mcmVlIChzKTsKKworCW1vdW50ID0gZ19maWxlX2Zp
bmRfZW5jbG9zaW5nX21vdW50IChmaWxlLCBjYW5jZWxsYWJsZSwgZXJyb3IpOworCWlmIChtb3Vu
dCA9PSBOVUxMICYmIGdfZmlsZV9zdXBwb3J0c190aHJlYWRfY29udGV4dHMgKGZpbGUpKSB7CisJ
CUdNYWluQ29udGV4dCAqY29udGV4dCA9IGdfbWFpbl9jb250ZXh0X25ldyAoKTsKKwkJR01haW5M
b29wICpsb29wID0gZ19tYWluX2xvb3BfbmV3IChjb250ZXh0LCBGQUxTRSk7CisKKwkJZ19jbGVh
cl9lcnJvciAoZXJyb3IpOworCQlnX21haW5fY29udGV4dF9wdXNoX3RocmVhZF9kZWZhdWx0IChj
b250ZXh0KTsKKwkJZ19maWxlX21vdW50X2VuY2xvc2luZ192b2x1bWUgKGZpbGUsCisJCQkJCSAg
ICAgICBHX01PVU5UX01PVU5UX05PTkUsCisJCQkJCSAgICAgICBOVUxMLCAvKiBGSVhNRSEgKi8K
KwkJCQkJICAgICAgIGNhbmNlbGxhYmxlLAorCQkJCQkgICAgICAgd2Via2l0X3NvdXBfcmVxdWVz
dF9maWxlX2Z0cF9tYWluX2xvb3BfcXVpdCwKKwkJCQkJICAgICAgIGxvb3ApOworCQlnX21haW5f
bG9vcF9ydW4gKGxvb3ApOworCQlnX21haW5fY29udGV4dF9wb3BfdGhyZWFkX2RlZmF1bHQgKGNv
bnRleHQpOworCQlnX21haW5fbG9vcF91bnJlZiAobG9vcCk7CisJCWdfbWFpbl9jb250ZXh0X3Vu
cmVmIChjb250ZXh0KTsKKwkJbW91bnQgPSBnX2ZpbGVfZmluZF9lbmNsb3NpbmdfbW91bnQgKGZp
bGUsIGNhbmNlbGxhYmxlLCBlcnJvcik7CisJfQorCWlmIChtb3VudCA9PSBOVUxMKQorCQlyZXR1
cm4gTlVMTDsKKwlnX29iamVjdF91bnJlZiAoZmlsZSk7CisKKwlmaWxlID0gZ19tb3VudF9nZXRf
ZGVmYXVsdF9sb2NhdGlvbiAobW91bnQpOworCWdfb2JqZWN0X3VucmVmIChtb3VudCk7CisKKwlz
ID0gZ19zdHJkdXAgKHVyaS0+cGF0aCk7CisJaWYgKHN0cmNociAocywgJzsnKSkKKwkJKnN0cmNo
ciAocywgJzsnKSA9IDA7CisKKwlyZXN1bHQgPSBnX2ZpbGVfcmVzb2x2ZV9yZWxhdGl2ZV9wYXRo
IChmaWxlLCBzKTsKKwlnX2ZyZWUgKHMpOworCWdfb2JqZWN0X3VucmVmIChmaWxlKTsKKworCXJl
dHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgord2Via2l0X3NvdXBfcmVxdWVzdF9m
aWxlX2Vuc3VyZV9maWxlIChXZWJLaXRTb3VwUmVxdWVzdEZpbGUgICpmaWxlLAorCQkJCSAgICAg
IEdDYW5jZWxsYWJsZSAgICAgKmNhbmNlbGxhYmxlLAorCQkJCSAgICAgIEdFcnJvciAgICAgICAg
ICAqKmVycm9yKQoreworCVNvdXBVUkkgKnVyaTsKKworCWlmIChmaWxlLT5wcml2LT5nZmlsZSkK
KwkJcmV0dXJuIFRSVUU7CisKKwl1cmkgPSB3ZWJraXRfc291cF9yZXF1ZXN0X2dldF91cmkgKFdF
QktJVF9TT1VQX1JFUVVFU1QgKGZpbGUpKTsKKwlpZiAodXJpLT5zY2hlbWUgPT0gU09VUF9VUklf
U0NIRU1FX0ZJTEUpIHsKKwkJLyogV2UgY2Fubm90IHVzZSBzb3VwX3VyaV9kZWNvZGUgYXMgaXQg
aW5jb3JyZWN0bHkKKwkJICogcmV0dXJucyBOVUxMIGZvciBpbmNvcnJlY3RseSBlbmNvZGVkIFVS
SXMgKHRoYXQKKwkJICogY291bGQgYmUgdmFsaWQgZmlsZW5hbWVzKS4gVGhpcyB3aWxsIGJlIGhv
cGVmdWxseQorCQkgKiBzaGlwcGVkIGluIGxpYnNvdXAgMi4zMi4xIGJ1dCB3ZSB3YW50IHRvIGxh
bmQgdGhpcworCQkgKiBmaXJzdC4gVE9ETzogcmVwbGFjZSB1cmlfZGVjb2RlZF9jb3B5IGJ5CisJ
CSAqIHNvdXBfdXJpX2RlY29kZSB3aGVuIHRoZSByZXF1aXJlZCBsaWJzb3VwIHZlcnNpb24KKwkJ
ICogaXMgYnVtcGVkIG91dCB0byAyLjMyLjEKKwkJICovCisJCWdjaGFyICp1cmlfcGF0aCA9IHNv
dXBfdXJpX2dldF9wYXRoICh1cmkpOworCQlnY2hhciAqZGVjb2RlZF91cmkgPSB3ZWJraXRfc291
cF9yZXF1ZXN0X3VyaV9kZWNvZGVkX2NvcHkgKHVyaV9wYXRoLCBzdHJsZW4gKHVyaV9wYXRoKSk7
CisKKwkJaWYgKGRlY29kZWRfdXJpKSB7CisJCQkvKiBEbyBub3QgdXNlIG5ld19mb3JfdXJpKCkg
YXMgdGhlIGRlY29kZWQgVVJJCisJCQkgKiAgY291bGQgbm90IGJlIGEgdmFsaWQgVVJJCisJCQkg
Ki8KKwkJCWZpbGUtPnByaXYtPmdmaWxlID0gZ19maWxlX25ld19mb3JfcGF0aCAoZGVjb2RlZF91
cmkpOworCQkJZ19mcmVlIChkZWNvZGVkX3VyaSk7CisJCX0KKworCQlyZXR1cm4gVFJVRTsKKwl9
IGVsc2UgaWYgKHVyaS0+c2NoZW1lID09IFNPVVBfVVJJX1NDSEVNRV9GVFApIHsKKwkJZmlsZS0+
cHJpdi0+Z2ZpbGUgPSB3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfZW5zdXJlX2ZpbGVfZnRwICh1
cmksCisJCQkJCQkJCQkgICAgICBjYW5jZWxsYWJsZSwKKwkJCQkJCQkJCSAgICAgIGVycm9yKTsK
KwkJcmV0dXJuIGZpbGUtPnByaXYtPmdmaWxlICE9IE5VTEw7CisJfQorCisJZ19zZXRfZXJyb3Ig
KGVycm9yLCBXRUJLSVRfU09VUF9FUlJPUiwgV0VCS0lUX1NPVVBfRVJST1JfVU5TVVBQT1JURURf
VVJJX1NDSEVNRSwKKwkJICAgICBfICgiVW5zdXBwb3J0ZWQgVVJJIHNjaGVtZSAnJXMnIiksIHVy
aS0+c2NoZW1lKTsKKwlyZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBHSW5wdXRTdHJlYW0gKgor
d2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX3NlbmQgKFdlYktpdFNvdXBSZXF1ZXN0ICAgICAgICAg
ICpyZXF1ZXN0LAorCQkJICAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwK
KwkJCSAgICAgICBHRXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpCit7CisJV2ViS2l0U291cFJl
cXVlc3RGaWxlICpmaWxlID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9GSUxFIChyZXF1ZXN0KTsKKwlH
SW5wdXRTdHJlYW0gKnN0cmVhbTsKKwlHRXJyb3IgKm15X2Vycm9yID0gTlVMTDsKKworCWlmICgh
d2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2Vuc3VyZV9maWxlIChmaWxlLCBjYW5jZWxsYWJsZSwg
ZXJyb3IpKQorCQlyZXR1cm4gTlVMTDsKKworCXN0cmVhbSA9IEdfSU5QVVRfU1RSRUFNIChnX2Zp
bGVfcmVhZCAoZmlsZS0+cHJpdi0+Z2ZpbGUsCisJCQkJCSAgICAgIGNhbmNlbGxhYmxlLCAmbXlf
ZXJyb3IpKTsKKwlpZiAoc3RyZWFtID09IE5VTEwpIHsKKwkJaWYgKGdfZXJyb3JfbWF0Y2hlcyAo
bXlfZXJyb3IsIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfSVNfRElSRUNUT1JZKSkgeworCQkJR0Zp
bGVFbnVtZXJhdG9yICplbnVtZXJhdG9yOworCQkJZ19jbGVhcl9lcnJvciAoJm15X2Vycm9yKTsK
KwkJCWVudW1lcmF0b3IgPSBnX2ZpbGVfZW51bWVyYXRlX2NoaWxkcmVuIChmaWxlLT5wcml2LT5n
ZmlsZSwKKwkJCQkJCQkJIioiLAorCQkJCQkJCQlHX0ZJTEVfUVVFUllfSU5GT19OT05FLAorCQkJ
CQkJCQljYW5jZWxsYWJsZSwKKwkJCQkJCQkJZXJyb3IpOworCQkJaWYgKGVudW1lcmF0b3IpIHsK
KwkJCQlzdHJlYW0gPSB3ZWJraXRfc291cF9kaXJlY3RvcnlfaW5wdXRfc3RyZWFtX25ldyAoZW51
bWVyYXRvciwKKwkJCQkJCQkJCQkgd2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfdXJpIChyZXF1ZXN0
KSk7CisJCQkJZ19vYmplY3RfdW5yZWYgKGVudW1lcmF0b3IpOworCQkJCWZpbGUtPnByaXYtPm1p
bWVfdHlwZSA9IGdfc3RyZHVwICgidGV4dC9odG1sIik7CisJCQl9CisJCX0gZWxzZSB7CisJCQln
X3Byb3BhZ2F0ZV9lcnJvciAoZXJyb3IsIG15X2Vycm9yKTsKKwkJfQorCX0gZWxzZSB7CisJCUdG
aWxlSW5mbyAqaW5mbyA9IGdfZmlsZV9xdWVyeV9pbmZvIChmaWxlLT5wcml2LT5nZmlsZSwKKwkJ
CQkJCSAgICAgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9DT05URU5UX1RZUEUgIiwiCisJCQkJ
CQkgICAgIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfU0laRSwKKwkJCQkJCSAgICAgMCwgY2Fu
Y2VsbGFibGUsIE5VTEwpOworCQlpZiAoaW5mbykgeworCQkJY29uc3QgY2hhciAqY29udGVudF90
eXBlOworCQkJZmlsZS0+cHJpdi0+c2l6ZSA9IGdfZmlsZV9pbmZvX2dldF9zaXplIChpbmZvKTsK
KwkJCWNvbnRlbnRfdHlwZSA9IGdfZmlsZV9pbmZvX2dldF9jb250ZW50X3R5cGUgKGluZm8pOwor
CisJCQlpZiAoY29udGVudF90eXBlKQorCQkJCWZpbGUtPnByaXYtPm1pbWVfdHlwZSA9IGdfY29u
dGVudF90eXBlX2dldF9taW1lX3R5cGUgKGNvbnRlbnRfdHlwZSk7CisJCQlnX29iamVjdF91bnJl
ZiAoaW5mbyk7CisJCX0KKwl9CisKKwlyZXR1cm4gc3RyZWFtOworfQorCitzdGF0aWMgdm9pZAor
d2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX3NlbmRfYXN5bmNfdGhyZWFkIChHU2ltcGxlQXN5bmNS
ZXN1bHQgKnJlcywKKwkJCQkJICAgIEdPYmplY3QgICAgICAgICAgICAqb2JqZWN0LAorCQkJCQkg
ICAgR0NhbmNlbGxhYmxlICAgICAgICpjYW5jZWxsYWJsZSkKK3sKKwlHSW5wdXRTdHJlYW0gKnN0
cmVhbTsKKwlXZWJLaXRTb3VwUmVxdWVzdCAqcmVxdWVzdDsKKwlHRXJyb3IgKmVycm9yID0gTlVM
TDsKKworCXJlcXVlc3QgPSBXRUJLSVRfU09VUF9SRVFVRVNUIChvYmplY3QpOworCisJc3RyZWFt
ID0gd2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX3NlbmQgKHJlcXVlc3QsIGNhbmNlbGxhYmxlLCAm
ZXJyb3IpOworCisJaWYgKHN0cmVhbSA9PSBOVUxMKSB7CisJCWdfc2ltcGxlX2FzeW5jX3Jlc3Vs
dF9zZXRfZnJvbV9lcnJvciAocmVzLCBlcnJvcik7CisJCWdfZXJyb3JfZnJlZSAoZXJyb3IpOwor
CX0gZWxzZSB7CisJCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dwb2ludGVyIChy
ZXMsIHN0cmVhbSwgZ19vYmplY3RfdW5yZWYpOworCX0KK30KKworc3RhdGljIHZvaWQKK3dlYmtp
dF9zb3VwX3JlcXVlc3RfZmlsZV9zZW5kX2FzeW5jIChXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAg
ICAqcmVxdWVzdCwKKwkJCQkgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwK
KwkJCQkgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCisJCQkJICAgICBncG9pbnRl
ciB1c2VyX2RhdGEpCit7CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpyZXM7CisKKwlyZXMgPSBnX3Np
bXBsZV9hc3luY19yZXN1bHRfbmV3IChHX09CSkVDVCAocmVxdWVzdCksIGNhbGxiYWNrLCB1c2Vy
X2RhdGEsIHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9zZW5kX2FzeW5jKTsKKworCWdfc2ltcGxl
X2FzeW5jX3Jlc3VsdF9ydW5faW5fdGhyZWFkIChyZXMsIHdlYmtpdF9zb3VwX3JlcXVlc3RfZmls
ZV9zZW5kX2FzeW5jX3RocmVhZCwgR19QUklPUklUWV9ERUZBVUxULCBjYW5jZWxsYWJsZSk7CisJ
Z19vYmplY3RfdW5yZWYgKHJlcyk7Cit9CisKK3N0YXRpYyBHSW5wdXRTdHJlYW0gKgord2Via2l0
X3NvdXBfcmVxdWVzdF9maWxlX3NlbmRfZmluaXNoIChXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAg
ICAqcmVxdWVzdCwKKwkJCQkgICAgICBHQXN5bmNSZXN1bHQgICAgICAgICAqcmVzdWx0LAorCQkJ
CSAgICAgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcikKK3sKKwlHU2ltcGxlQXN5bmNSZXN1
bHQgKnNpbXBsZSA9IEdfU0lNUExFX0FTWU5DX1JFU1VMVCAocmVzdWx0KTsKKworCWdfd2Fybl9p
Zl9mYWlsIChnX3NpbXBsZV9hc3luY19yZXN1bHRfZ2V0X3NvdXJjZV90YWcgKHNpbXBsZSkgPT0g
d2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX3NlbmRfYXN5bmMpOworCisJaWYgKGdfc2ltcGxlX2Fz
eW5jX3Jlc3VsdF9wcm9wYWdhdGVfZXJyb3IgKHNpbXBsZSwgZXJyb3IpKQorCQlyZXR1cm4gTlVM
TDsKKworCXJldHVybiBnX29iamVjdF9yZWYgKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfb3Bf
cmVzX2dwb2ludGVyIChzaW1wbGUpKTsKK30KKworc3RhdGljIGdvZmZzZXQKK3dlYmtpdF9zb3Vw
X3JlcXVlc3RfZmlsZV9nZXRfY29udGVudF9sZW5ndGggKFdlYktpdFNvdXBSZXF1ZXN0ICpyZXF1
ZXN0KQoreworCVdlYktpdFNvdXBSZXF1ZXN0RmlsZSAqZmlsZSA9IFdFQktJVF9TT1VQX1JFUVVF
U1RfRklMRSAocmVxdWVzdCk7CisKKwlyZXR1cm4gZmlsZS0+cHJpdi0+c2l6ZTsKK30KKworc3Rh
dGljIGNvbnN0IGNoYXIgKgord2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2dldF9jb250ZW50X3R5
cGUgKFdlYktpdFNvdXBSZXF1ZXN0ICpyZXF1ZXN0KQoreworCVdlYktpdFNvdXBSZXF1ZXN0Rmls
ZSAqZmlsZSA9IFdFQktJVF9TT1VQX1JFUVVFU1RfRklMRSAocmVxdWVzdCk7CisKKwlpZiAoIWZp
bGUtPnByaXYtPm1pbWVfdHlwZSkKKwkJcmV0dXJuICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0i
OworCisJcmV0dXJuIGZpbGUtPnByaXYtPm1pbWVfdHlwZTsKK30KKworc3RhdGljIHZvaWQKK3dl
YmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9jbGFzc19pbml0IChXZWJLaXRTb3VwUmVxdWVzdEZpbGVD
bGFzcyAqcmVxdWVzdF9maWxlX2NsYXNzKQoreworCUdPYmplY3RDbGFzcyAqb2JqZWN0X2NsYXNz
ID0gR19PQkpFQ1RfQ0xBU1MgKHJlcXVlc3RfZmlsZV9jbGFzcyk7CisJV2ViS2l0U291cFJlcXVl
c3RDbGFzcyAqcmVxdWVzdF9jbGFzcyA9CisJCVdFQktJVF9TT1VQX1JFUVVFU1RfQ0xBU1MgKHJl
cXVlc3RfZmlsZV9jbGFzcyk7CisKKwlnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUgKHJlcXVlc3Rf
ZmlsZV9jbGFzcywgc2l6ZW9mIChXZWJLaXRTb3VwUmVxdWVzdEZpbGVQcml2YXRlKSk7CisKKwlv
YmplY3RfY2xhc3MtPmZpbmFsaXplID0gd2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2ZpbmFsaXpl
OworCisJcmVxdWVzdF9jbGFzcy0+Y2hlY2tfdXJpID0gd2Via2l0X3NvdXBfcmVxdWVzdF9maWxl
X2NoZWNrX3VyaTsKKwlyZXF1ZXN0X2NsYXNzLT5zZW5kID0gd2Via2l0X3NvdXBfcmVxdWVzdF9m
aWxlX3NlbmQ7CisJcmVxdWVzdF9jbGFzcy0+c2VuZF9hc3luYyA9IHdlYmtpdF9zb3VwX3JlcXVl
c3RfZmlsZV9zZW5kX2FzeW5jOworCXJlcXVlc3RfY2xhc3MtPnNlbmRfZmluaXNoID0gd2Via2l0
X3NvdXBfcmVxdWVzdF9maWxlX3NlbmRfZmluaXNoOworCXJlcXVlc3RfY2xhc3MtPmdldF9jb250
ZW50X2xlbmd0aCA9IHdlYmtpdF9zb3VwX3JlcXVlc3RfZmlsZV9nZXRfY29udGVudF9sZW5ndGg7
CisJcmVxdWVzdF9jbGFzcy0+Z2V0X2NvbnRlbnRfdHlwZSA9IHdlYmtpdF9zb3VwX3JlcXVlc3Rf
ZmlsZV9nZXRfY29udGVudF90eXBlOworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWZpbGUuaCBiL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNDU5ZTgyYQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1maWxlLmgKQEAgLTAsMCArMSw1
NCBAQAorLyogLSotIE1vZGU6IEM7IHRhYi13aWR0aDogODsgaW5kZW50LXRhYnMtbW9kZTogdDsg
Yy1iYXNpYy1vZmZzZXQ6IDggLSotICovCisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJlZCBI
YXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXRUJL
SVRfU09VUF9SRVFVRVNUX0ZJTEVfSAorI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNUX0ZJTEVf
SCAxCisKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3QuaCIKKworR19CRUdJTl9ERUNMUworCisjZGVm
aW5lIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9GSUxFICAgICAgICAgICAgKHdlYmtpdF9zb3Vw
X3JlcXVlc3RfZmlsZV9nZXRfdHlwZSAoKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9G
SUxFKG9iamVjdCkgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QgKChvYmplY3Qp
LCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfRklMRSwgV2ViS2l0U291cFJlcXVlc3RGaWxlKSkK
KyNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVF9GSUxFX0NMQVNTKGtsYXNzKSAgICAoR19UWVBF
X0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9GSUxF
LCBXZWJLaXRTb3VwUmVxdWVzdEZpbGVDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19TT1VQX1JF
UVVFU1RfRklMRShvYmplY3QpICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2Jq
ZWN0KSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0ZJTEUpKQorI2RlZmluZSBXRUJLSVRfSVNf
U09VUF9SRVFVRVNUX0ZJTEVfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAo
KGtsYXNzKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0ZJTEUpKQorI2RlZmluZSBXRUJLSVRf
U09VUF9SRVFVRVNUX0ZJTEVfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NM
QVNTICgob2JqKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0ZJTEUsIFdlYktpdFNvdXBSZXF1
ZXN0RmlsZUNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFNvdXBSZXF1ZXN0RmlsZVBy
aXZhdGUgV2ViS2l0U291cFJlcXVlc3RGaWxlUHJpdmF0ZTsKKwordHlwZWRlZiBzdHJ1Y3Qgewor
CVdlYktpdFNvdXBSZXF1ZXN0IHBhcmVudDsKKworCVdlYktpdFNvdXBSZXF1ZXN0RmlsZVByaXZh
dGUgKnByaXY7Cit9IFdlYktpdFNvdXBSZXF1ZXN0RmlsZTsKKwordHlwZWRlZiBzdHJ1Y3Qgewor
CVdlYktpdFNvdXBSZXF1ZXN0Q2xhc3MgcGFyZW50OworfSBXZWJLaXRTb3VwUmVxdWVzdEZpbGVD
bGFzczsKKworR1R5cGUgd2Via2l0X3NvdXBfcmVxdWVzdF9maWxlX2dldF90eXBlICh2b2lkKTsK
KworR0ZpbGUgICp3ZWJraXRfc291cF9yZXF1ZXN0X2ZpbGVfZ2V0X2ZpbGUgKFdlYktpdFNvdXBS
ZXF1ZXN0RmlsZSAqZmlsZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRfU09V
UF9SRVFVRVNUX0ZJTEVfSCAqLwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0dHAuYyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZjE1N2NmYwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC1odHRwLmMKQEAgLTAsMCArMSwzNDAgQEAK
Ky8qIC0qLSBNb2RlOiBDOyB0YWItd2lkdGg6IDg7IGluZGVudC10YWJzLW1vZGU6IHQ7IGMtYmFz
aWMtb2Zmc2V0OiA4IC0qLSAqLworLyoKKyAqIHNvdXAtcmVxdWVzdC1odHRwLmM6IGh0dHA6IFVS
SSByZXF1ZXN0IG9iamVjdAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19I
CisjaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGdsaWIvZ2kxOG4uaD4K
KworI2luY2x1ZGUgInNvdXAtY2FjaGUuaCIKKyNpbmNsdWRlICJzb3VwLWNhY2hlLXByaXZhdGUu
aCIKKyNpbmNsdWRlICJzb3VwLWh0dHAtaW5wdXQtc3RyZWFtLmgiCisjaW5jbHVkZSAic291cC1y
ZXF1ZXN0LWh0dHAuaCIKKworR19ERUZJTkVfVFlQRSAoV2ViS2l0U291cFJlcXVlc3RIVFRQLCB3
ZWJraXRfc291cF9yZXF1ZXN0X2h0dHAsIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVCkKKworc3Ry
dWN0IF9XZWJLaXRTb3VwUmVxdWVzdEhUVFBQcml2YXRlIHsKKwlTb3VwTWVzc2FnZSAqbXNnOwor
fTsKKworLyoqCisgKiB3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfZ2V0X21lc3NhZ2U6CisgKiBA
aHR0cDogYSAjV2ViS2l0U291cFJlcXVlc3RIVFRQIG9iamVjdAorICoKKyAqIEdldHMgYSBuZXcg
cmVmZXJlbmNlIHRvIHRoZSAjU291cE1lc3NhZ2UgYXNzb2NpYXRlZCB0byB0aGlzIFNvdXBSZXF1
ZXN0CisgKgorICogUmV0dXJuczogYSBuZXcgcmVmZXJlbmNlIHRvIHRoZSAjU291cE1lc3NhZ2UK
KyAqKi8KK1NvdXBNZXNzYWdlICoKK3dlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9nZXRfbWVzc2Fn
ZSAoV2ViS2l0U291cFJlcXVlc3RIVFRQICpodHRwKQoreworCWdfcmV0dXJuX3ZhbF9pZl9mYWls
IChXRUJLSVRfSVNfU09VUF9SRVFVRVNUX0hUVFAgKGh0dHApLCBOVUxMKTsKKworCXJldHVybiBn
X29iamVjdF9yZWYgKGh0dHAtPnByaXYtPm1zZyk7Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRf
c291cF9yZXF1ZXN0X2h0dHBfaW5pdCAoV2ViS2l0U291cFJlcXVlc3RIVFRQICpodHRwKQorewor
CWh0dHAtPnByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKGh0dHAsIFdFQktJVF9U
WVBFX1NPVVBfUkVRVUVTVF9IVFRQLCBXZWJLaXRTb3VwUmVxdWVzdEhUVFBQcml2YXRlKTsKK30K
Kworc3RhdGljIGdib29sZWFuCit3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfY2hlY2tfdXJpIChX
ZWJLaXRTb3VwUmVxdWVzdCAgKnJlcXVlc3QsCisJCQkJICAgIFNvdXBVUkkgICAgICAqdXJpLAor
CQkJCSAgICBHRXJyb3IgICAgICAqKmVycm9yKQoreworCVdlYktpdFNvdXBSZXF1ZXN0SFRUUCAq
aHR0cCA9IFdFQktJVF9TT1VQX1JFUVVFU1RfSFRUUCAocmVxdWVzdCk7CisKKwlpZiAoIVNPVVBf
VVJJX1ZBTElEX0ZPUl9IVFRQICh1cmkpKQorCQlyZXR1cm4gRkFMU0U7CisKKwlodHRwLT5wcml2
LT5tc2cgPSBzb3VwX21lc3NhZ2VfbmV3X2Zyb21fdXJpIChTT1VQX01FVEhPRF9HRVQsIHVyaSk7
CisJcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfc291cF9yZXF1ZXN0X2h0
dHBfZmluYWxpemUgKEdPYmplY3QgKm9iamVjdCkKK3sKKwlXZWJLaXRTb3VwUmVxdWVzdEhUVFAg
Kmh0dHAgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0hUVFAgKG9iamVjdCk7CisKKwlpZiAoaHR0cC0+
cHJpdi0+bXNnKQorCQlnX29iamVjdF91bnJlZiAoaHR0cC0+cHJpdi0+bXNnKTsKKworCUdfT0JK
RUNUX0NMQVNTICh3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfcGFyZW50X2NsYXNzKS0+ZmluYWxp
emUgKG9iamVjdCk7Cit9CisKK3N0YXRpYyBHSW5wdXRTdHJlYW0gKgord2Via2l0X3NvdXBfcmVx
dWVzdF9odHRwX3NlbmQgKFdlYktpdFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAorCQkJ
ICAgICAgIEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCSAgICAgICBHRXJy
b3IgICAgICAgICAgICAgICoqZXJyb3IpCit7CisJV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSAq
aHR0cHN0cmVhbTsKKwlXZWJLaXRTb3VwUmVxdWVzdEhUVFAgKmh0dHAgPSBXRUJLSVRfU09VUF9S
RVFVRVNUX0hUVFAgKHJlcXVlc3QpOworCisJaHR0cHN0cmVhbSA9IHdlYmtpdF9zb3VwX2h0dHBf
aW5wdXRfc3RyZWFtX25ldyAod2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfc2Vzc2lvbiAocmVxdWVz
dCksIGh0dHAtPnByaXYtPm1zZyk7CisJaWYgKCF3ZWJraXRfc291cF9odHRwX2lucHV0X3N0cmVh
bV9zZW5kIChodHRwc3RyZWFtLCBjYW5jZWxsYWJsZSwgZXJyb3IpKSB7CisJCWdfb2JqZWN0X3Vu
cmVmIChodHRwc3RyZWFtKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiAoR0lucHV0U3Ry
ZWFtICopaHR0cHN0cmVhbTsKK30KKworCitzdGF0aWMgdm9pZAorc2VudF9hc3luYyAoR09iamVj
dCAqc291cmNlLCBHQXN5bmNSZXN1bHQgKnJlc3VsdCwgZ3BvaW50ZXIgdXNlcl9kYXRhKQorewor
CVdlYktpdFNvdXBIVFRQSW5wdXRTdHJlYW0gKmh0dHBzdHJlYW0gPSBXRUJLSVRfU09VUF9IVFRQ
X0lOUFVUX1NUUkVBTSAoc291cmNlKTsKKwlHU2ltcGxlQXN5bmNSZXN1bHQgKnNpbXBsZSA9IHVz
ZXJfZGF0YTsKKwlHRXJyb3IgKmVycm9yID0gTlVMTDsKKworCWlmICh3ZWJraXRfc291cF9odHRw
X2lucHV0X3N0cmVhbV9zZW5kX2ZpbmlzaCAoaHR0cHN0cmVhbSwgcmVzdWx0LCAmZXJyb3IpKSB7
CisJCWdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9zZXRfb3BfcmVzX2dwb2ludGVyIChzaW1wbGUsIGh0
dHBzdHJlYW0sIGdfb2JqZWN0X3VucmVmKTsKKwl9IGVsc2UgeworCQlnX3NpbXBsZV9hc3luY19y
ZXN1bHRfc2V0X2Zyb21fZXJyb3IgKHNpbXBsZSwgZXJyb3IpOworCQlnX2Vycm9yX2ZyZWUgKGVy
cm9yKTsKKwkJZ19vYmplY3RfdW5yZWYgKGh0dHBzdHJlYW0pOworCX0KKwlnX3NpbXBsZV9hc3lu
Y19yZXN1bHRfY29tcGxldGUgKHNpbXBsZSk7CisJZ19vYmplY3RfdW5yZWYgKHNpbXBsZSk7Cit9
CisKKwordHlwZWRlZiBzdHJ1Y3QgeworCVdlYktpdFNvdXBSZXF1ZXN0SFRUUCAqcmVxOworCVNv
dXBNZXNzYWdlICpvcmlnaW5hbDsKKwlHQ2FuY2VsbGFibGUgKmNhbmNlbGxhYmxlOworCUdBc3lu
Y1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2s7CisJZ3BvaW50ZXIgdXNlcl9kYXRhOworfSBDb25kaXRp
b25hbEhlbHBlcjsKKworCitzdGF0aWMgdm9pZAorY29uZGl0aW9uYWxfZ2V0X3JlYWR5X2NiIChT
b3VwU2Vzc2lvbiAqc2Vzc2lvbiwgU291cE1lc3NhZ2UgKm1zZywgZ3BvaW50ZXIgdXNlcl9kYXRh
KQoreworCUNvbmRpdGlvbmFsSGVscGVyICpoZWxwZXIgPSAoQ29uZGl0aW9uYWxIZWxwZXIgKil1
c2VyX2RhdGE7CisJR1NpbXBsZUFzeW5jUmVzdWx0ICpzaW1wbGU7CisJV2ViS2l0U291cEhUVFBJ
bnB1dFN0cmVhbSAqaHR0cHN0cmVhbTsKKworCXNpbXBsZSA9IGdfc2ltcGxlX2FzeW5jX3Jlc3Vs
dF9uZXcgKEdfT0JKRUNUIChoZWxwZXItPnJlcSksCisJCQkJCSAgICBoZWxwZXItPmNhbGxiYWNr
LCBoZWxwZXItPnVzZXJfZGF0YSwKKwkJCQkJICAgIGNvbmRpdGlvbmFsX2dldF9yZWFkeV9jYik7
CisKKwlpZiAobXNnLT5zdGF0dXNfY29kZSA9PSBTT1VQX1NUQVRVU19OT1RfTU9ESUZJRUQpIHsK
KwkJV2ViS2l0U291cENhY2hlICpjYWNoZSA9IChXZWJLaXRTb3VwQ2FjaGUgKilzb3VwX3Nlc3Np
b25fZ2V0X2ZlYXR1cmUgKHNlc3Npb24sIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUpOworCisJCWh0
dHBzdHJlYW0gPSAoV2ViS2l0U291cEhUVFBJbnB1dFN0cmVhbSAqKXdlYmtpdF9zb3VwX2NhY2hl
X3NlbmRfcmVzcG9uc2UgKGNhY2hlLCBtc2cpOworCQlpZiAoaHR0cHN0cmVhbSkgeworCQkJY29u
c3QgZ2NoYXIgKmNvbnRlbnRfdHlwZTsKKworCQkJZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3NldF9v
cF9yZXNfZ3BvaW50ZXIgKHNpbXBsZSwgaHR0cHN0cmVhbSwgZ19vYmplY3RfdW5yZWYpOworCisJ
CQlzb3VwX21lc3NhZ2VfZ290X2hlYWRlcnMgKGhlbHBlci0+b3JpZ2luYWwpOworCQkJY29udGVu
dF90eXBlID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2NvbnRlbnRfdHlwZSAobXNnLT5yZXNw
b25zZV9oZWFkZXJzLCBOVUxMKTsKKwkJCXNvdXBfbWVzc2FnZV9jb250ZW50X3NuaWZmZWQgKGhl
bHBlci0+b3JpZ2luYWwsIGNvbnRlbnRfdHlwZSwgTlVMTCk7CisKKwkJCWdfc2ltcGxlX2FzeW5j
X3Jlc3VsdF9jb21wbGV0ZSAoc2ltcGxlKTsKKworCQkJc291cF9tZXNzYWdlX2ZpbmlzaGVkICho
ZWxwZXItPm9yaWdpbmFsKTsKKworCQkJZ19vYmplY3RfdW5yZWYgKHNpbXBsZSk7CisJCX0gZWxz
ZSB7CisJCQkvKiBBc2sgYWdhaW4gZm9yIHRoZSByZXNvdXJjZSwgc29tZWhvdyB0aGUgY2FjaGUg
Y2Fubm90IGxvY2F0ZSBpdCAqLworCQkJaHR0cHN0cmVhbSA9IHdlYmtpdF9zb3VwX2h0dHBfaW5w
dXRfc3RyZWFtX25ldyAoc2Vzc2lvbiwgaGVscGVyLT5vcmlnaW5hbCk7CisJCQl3ZWJraXRfc291
cF9odHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jIChodHRwc3RyZWFtLCBHX1BSSU9SSVRZX0RF
RkFVTFQsCisJCQkJCQkJCSAgaGVscGVyLT5jYW5jZWxsYWJsZSwgc2VudF9hc3luYywgc2ltcGxl
KTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIEl0IGlzIGluIHRoZSBjYWNoZSBidXQgaXQgd2FzIG1v
ZGlmaWVkIHJlbW90ZWx5ICovCisJCWh0dHBzdHJlYW0gPSB3ZWJraXRfc291cF9odHRwX2lucHV0
X3N0cmVhbV9uZXcgKHNlc3Npb24sIGhlbHBlci0+b3JpZ2luYWwpOworCQl3ZWJraXRfc291cF9o
dHRwX2lucHV0X3N0cmVhbV9zZW5kX2FzeW5jIChodHRwc3RyZWFtLCBHX1BSSU9SSVRZX0RFRkFV
TFQsCisJCQkJCQkJICBoZWxwZXItPmNhbmNlbGxhYmxlLCBzZW50X2FzeW5jLCBzaW1wbGUpOwor
CX0KKworCWdfb2JqZWN0X3VucmVmIChoZWxwZXItPnJlcSk7CisJZ19vYmplY3RfdW5yZWYgKGhl
bHBlci0+b3JpZ2luYWwpOworCWdfc2xpY2VfZnJlZSAoQ29uZGl0aW9uYWxIZWxwZXIsIGhlbHBl
cik7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKwlXZWJLaXRTb3VwUmVxdWVzdEhUVFAgKmh0dHA7
CisJR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFjazsKKwlncG9pbnRlciB1c2VyX2RhdGE7Cit9
IFNlbmRBc3luY0hlbHBlcjsKKworc3RhdGljIHZvaWQgd2Via2l0X3NvdXBfcmVxdWVzdF9odHRw
X3NlbmRfYXN5bmMgKFdlYktpdFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAorCQkJCQkJ
IEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkJCSBHQXN5bmNSZWFkeUNh
bGxiYWNrIGNhbGxiYWNrLAorCQkJCQkJIGdwb2ludGVyIHVzZXJfZGF0YSk7CisKK3N0YXRpYyBn
Ym9vbGVhbgorc2VuZF9hc3luY19jYiAoZ3BvaW50ZXIgZGF0YSkKK3sKKwlHU2ltcGxlQXN5bmNS
ZXN1bHQgKnNpbXBsZTsKKwlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtICpodHRwc3RyZWFtOwor
CVNvdXBTZXNzaW9uICpzZXNzaW9uOworCVdlYktpdFNvdXBDYWNoZSAqY2FjaGU7CisJU2VuZEFz
eW5jSGVscGVyICpoZWxwZXIgPSAoU2VuZEFzeW5jSGVscGVyICopZGF0YTsKKworCXNlc3Npb24g
PSB3ZWJraXRfc291cF9yZXF1ZXN0X2dldF9zZXNzaW9uIChXRUJLSVRfU09VUF9SRVFVRVNUICho
ZWxwZXItPmh0dHApKTsKKwljYWNoZSA9IChXZWJLaXRTb3VwQ2FjaGUgKilzb3VwX3Nlc3Npb25f
Z2V0X2ZlYXR1cmUgKHNlc3Npb24sIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUpOworCisJaHR0cHN0
cmVhbSA9IChXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtICopd2Via2l0X3NvdXBfY2FjaGVfc2Vu
ZF9yZXNwb25zZSAoY2FjaGUsIFNPVVBfTUVTU0FHRSAoaGVscGVyLT5odHRwLT5wcml2LT5tc2cp
KTsKKworCWlmIChodHRwc3RyZWFtKSB7CisJCWNvbnN0IGdjaGFyICpjb250ZW50X3R5cGU7CisK
KwkJc2ltcGxlID0gZ19zaW1wbGVfYXN5bmNfcmVzdWx0X25ldyAoR19PQkpFQ1QgKGhlbHBlci0+
aHR0cCksCisJCQkJCQkgICAgaGVscGVyLT5jYWxsYmFjaywgaGVscGVyLT51c2VyX2RhdGEsCisJ
CQkJCQkgICAgd2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX3NlbmRfYXN5bmMpOworCQlnX3NpbXBs
ZV9hc3luY19yZXN1bHRfc2V0X29wX3Jlc19ncG9pbnRlciAoc2ltcGxlLCBodHRwc3RyZWFtLCBn
X29iamVjdF91bnJlZik7CisKKwkJLyogVXBkYXRlIG1lc3NhZ2Ugc3RhdHVzICovCisJCXNvdXBf
bWVzc2FnZV9zZXRfc3RhdHVzIChoZWxwZXItPmh0dHAtPnByaXYtPm1zZywgU09VUF9TVEFUVVNf
T0spOworCisJCS8qIElzc3VlIHNpZ25hbHMgICovCisJCXNvdXBfbWVzc2FnZV9nb3RfaGVhZGVy
cyAoaGVscGVyLT5odHRwLT5wcml2LT5tc2cpOworCQljb250ZW50X3R5cGUgPSBzb3VwX21lc3Nh
Z2VfaGVhZGVyc19nZXRfY29udGVudF90eXBlIChoZWxwZXItPmh0dHAtPnByaXYtPm1zZy0+cmVz
cG9uc2VfaGVhZGVycywgTlVMTCk7CisJCXNvdXBfbWVzc2FnZV9jb250ZW50X3NuaWZmZWQgKGhl
bHBlci0+aHR0cC0+cHJpdi0+bXNnLCBjb250ZW50X3R5cGUsIE5VTEwpOworCisJCWdfc2ltcGxl
X2FzeW5jX3Jlc3VsdF9jb21wbGV0ZSAoc2ltcGxlKTsKKworCQlzb3VwX21lc3NhZ2VfZmluaXNo
ZWQgKGhlbHBlci0+aHR0cC0+cHJpdi0+bXNnKTsKKworCQlnX29iamVjdF91bnJlZiAoc2ltcGxl
KTsKKwl9CisKKwlnX3NsaWNlX2ZyZWUgKFNlbmRBc3luY0hlbHBlciwgaGVscGVyKTsKKworCXJl
dHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9z
ZW5kX2FzeW5jIChXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKKwkJCQkgICAg
IEdDYW5jZWxsYWJsZSAgICAgICAgICpjYW5jZWxsYWJsZSwKKwkJCQkgICAgIEdBc3luY1JlYWR5
Q2FsbGJhY2sgY2FsbGJhY2ssCisJCQkJICAgICBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJV2Vi
S2l0U291cFJlcXVlc3RIVFRQICpodHRwID0gV0VCS0lUX1NPVVBfUkVRVUVTVF9IVFRQIChyZXF1
ZXN0KTsKKwlXZWJLaXRTb3VwSFRUUElucHV0U3RyZWFtICpodHRwc3RyZWFtOworCUdTaW1wbGVB
c3luY1Jlc3VsdCAqc2ltcGxlOworCVNvdXBTZXNzaW9uICpzZXNzaW9uOworCVdlYktpdFNvdXBD
YWNoZSAqY2FjaGU7CisKKwlzZXNzaW9uID0gd2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfc2Vzc2lv
biAocmVxdWVzdCk7CisJY2FjaGUgPSAoV2ViS2l0U291cENhY2hlICopc291cF9zZXNzaW9uX2dl
dF9mZWF0dXJlIChzZXNzaW9uLCBXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFKTsKKworCWlmIChjYWNo
ZSkgeworCQlXZWJLaXRTb3VwQ2FjaGVSZXNwb25zZSByZXNwb25zZTsKKworCQlyZXNwb25zZSA9
IHdlYmtpdF9zb3VwX2NhY2hlX2hhc19yZXNwb25zZSAoY2FjaGUsIGh0dHAtPnByaXYtPm1zZyk7
CisJCWlmIChyZXNwb25zZSA9PSBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9GUkVTSCkgewor
CQkJLyogRG8gcmV0dXJuIHRoZSBzdHJlYW0gYXN5bmNocm9ub3VzbHkgYXMgaW4KKwkJCSAgIHRo
ZSBvdGhlciBjYXNlcy4gSXQncyBub3QgZW5vdWdoIHRvIHVzZQorCQkJICAgZ19zaW1wbGVfYXN5
bmNfcmVzdWx0X2NvbXBsZXRlX2luX2lkbGUgYXMKKwkJCSAgIHRoZSBzaWduYWxzIG11c3QgYmUg
YWxzbyBlbWl0dGVkCisJCQkgICBhc3luY2hyb25vdXNseSAqLworCQkJU2VuZEFzeW5jSGVscGVy
ICpoZWxwZXIgPSBnX3NsaWNlX25ldyAoU2VuZEFzeW5jSGVscGVyKTsKKwkJCWhlbHBlci0+aHR0
cCA9IGh0dHA7CisJCQloZWxwZXItPmNhbGxiYWNrID0gY2FsbGJhY2s7CisJCQloZWxwZXItPnVz
ZXJfZGF0YSA9IHVzZXJfZGF0YTsKKwkJCWdfdGltZW91dF9hZGQgKDAsIHNlbmRfYXN5bmNfY2Is
IGhlbHBlcik7CisJCQlyZXR1cm47CisJCX0gZWxzZSBpZiAocmVzcG9uc2UgPT0gV0VCS0lUX1NP
VVBfQ0FDSEVfUkVTUE9OU0VfTkVFRFNfVkFMSURBVElPTikgeworCQkJU291cE1lc3NhZ2UgKmNv
bmRpdGlvbmFsX21zZzsKKwkJCUNvbmRpdGlvbmFsSGVscGVyICpoZWxwZXI7CisKKwkJCWNvbmRp
dGlvbmFsX21zZyA9IHdlYmtpdF9zb3VwX2NhY2hlX2dlbmVyYXRlX2NvbmRpdGlvbmFsX3JlcXVl
c3QgKGNhY2hlLCBodHRwLT5wcml2LT5tc2cpOworCisJCQloZWxwZXIgPSBnX3NsaWNlX25ldzAg
KENvbmRpdGlvbmFsSGVscGVyKTsKKwkJCWhlbHBlci0+cmVxID0gZ19vYmplY3RfcmVmIChodHRw
KTsKKwkJCWhlbHBlci0+b3JpZ2luYWwgPSBnX29iamVjdF9yZWYgKGh0dHAtPnByaXYtPm1zZyk7
CisJCQloZWxwZXItPmNhbmNlbGxhYmxlID0gY2FuY2VsbGFibGU7CisJCQloZWxwZXItPmNhbGxi
YWNrID0gY2FsbGJhY2s7CisJCQloZWxwZXItPnVzZXJfZGF0YSA9IHVzZXJfZGF0YTsKKwkJCXNv
dXBfc2Vzc2lvbl9xdWV1ZV9tZXNzYWdlIChzZXNzaW9uLCBjb25kaXRpb25hbF9tc2csCisJCQkJ
CQkgICAgY29uZGl0aW9uYWxfZ2V0X3JlYWR5X2NiLAorCQkJCQkJICAgIGhlbHBlcik7CisJCQly
ZXR1cm47CisJCX0KKwl9CisKKwlzaW1wbGUgPSBnX3NpbXBsZV9hc3luY19yZXN1bHRfbmV3IChH
X09CSkVDVCAoaHR0cCksCisJCQkJCSAgICBjYWxsYmFjaywgdXNlcl9kYXRhLAorCQkJCQkgICAg
d2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX3NlbmRfYXN5bmMpOworCWh0dHBzdHJlYW0gPSB3ZWJr
aXRfc291cF9odHRwX2lucHV0X3N0cmVhbV9uZXcgKHdlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X3Nl
c3Npb24gKHJlcXVlc3QpLAorCQkJCQkJCWh0dHAtPnByaXYtPm1zZyk7CisJd2Via2l0X3NvdXBf
aHR0cF9pbnB1dF9zdHJlYW1fc2VuZF9hc3luYyAoaHR0cHN0cmVhbSwgR19QUklPUklUWV9ERUZB
VUxULAorCQkJCQkJICBjYW5jZWxsYWJsZSwgc2VudF9hc3luYywgc2ltcGxlKTsKK30KKworc3Rh
dGljIEdJbnB1dFN0cmVhbSAqCit3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfc2VuZF9maW5pc2gg
KFdlYktpdFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAorCQkJCSAgICAgIEdBc3luY1Jl
c3VsdCAgICAgICAgICpyZXN1bHQsCisJCQkJICAgICAgR0Vycm9yICAgICAgICAgICAgICAqKmVy
cm9yKQoreworCUdTaW1wbGVBc3luY1Jlc3VsdCAqc2ltcGxlOworCisJZ19yZXR1cm5fdmFsX2lm
X2ZhaWwgKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9pc192YWxpZCAocmVzdWx0LCBHX09CSkVDVCAo
cmVxdWVzdCksIHdlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9zZW5kX2FzeW5jKSB8fCBnX3NpbXBs
ZV9hc3luY19yZXN1bHRfaXNfdmFsaWQgKHJlc3VsdCwgR19PQkpFQ1QgKHJlcXVlc3QpLCBjb25k
aXRpb25hbF9nZXRfcmVhZHlfY2IpLCBOVUxMKTsKKworCXNpbXBsZSA9IEdfU0lNUExFX0FTWU5D
X1JFU1VMVCAocmVzdWx0KTsKKwlpZiAoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X3Byb3BhZ2F0ZV9l
cnJvciAoc2ltcGxlLCBlcnJvcikpCisJCXJldHVybiBOVUxMOworCXJldHVybiBnX29iamVjdF9y
ZWYgKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfb3BfcmVzX2dwb2ludGVyIChzaW1wbGUpKTsK
K30KKworc3RhdGljIGdvZmZzZXQKK3dlYmtpdF9zb3VwX3JlcXVlc3RfaHR0cF9nZXRfY29udGVu
dF9sZW5ndGggKFdlYktpdFNvdXBSZXF1ZXN0ICpyZXF1ZXN0KQoreworCVdlYktpdFNvdXBSZXF1
ZXN0SFRUUCAqaHR0cCA9IFdFQktJVF9TT1VQX1JFUVVFU1RfSFRUUCAocmVxdWVzdCk7CisKKwly
ZXR1cm4gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2NvbnRlbnRfbGVuZ3RoIChodHRwLT5wcml2
LT5tc2ctPnJlc3BvbnNlX2hlYWRlcnMpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCit3ZWJr
aXRfc291cF9yZXF1ZXN0X2h0dHBfZ2V0X2NvbnRlbnRfdHlwZSAoV2ViS2l0U291cFJlcXVlc3Qg
KnJlcXVlc3QpCit7CisJV2ViS2l0U291cFJlcXVlc3RIVFRQICpodHRwID0gV0VCS0lUX1NPVVBf
UkVRVUVTVF9IVFRQIChyZXF1ZXN0KTsKKworCXJldHVybiBzb3VwX21lc3NhZ2VfaGVhZGVyc19n
ZXRfY29udGVudF90eXBlIChodHRwLT5wcml2LT5tc2ctPnJlc3BvbnNlX2hlYWRlcnMsIE5VTEwp
OworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX2NsYXNzX2luaXQg
KFdlYktpdFNvdXBSZXF1ZXN0SFRUUENsYXNzICpyZXF1ZXN0X2h0dHBfY2xhc3MpCit7CisJR09i
amVjdENsYXNzICpvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAocmVxdWVzdF9odHRwX2Ns
YXNzKTsKKwlXZWJLaXRTb3VwUmVxdWVzdENsYXNzICpyZXF1ZXN0X2NsYXNzID0KKwkJV0VCS0lU
X1NPVVBfUkVRVUVTVF9DTEFTUyAocmVxdWVzdF9odHRwX2NsYXNzKTsKKworCWdfdHlwZV9jbGFz
c19hZGRfcHJpdmF0ZSAocmVxdWVzdF9odHRwX2NsYXNzLCBzaXplb2YgKFdlYktpdFNvdXBSZXF1
ZXN0SFRUUFByaXZhdGUpKTsKKworCW9iamVjdF9jbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfc291
cF9yZXF1ZXN0X2h0dHBfZmluYWxpemU7CisKKwlyZXF1ZXN0X2NsYXNzLT5jaGVja191cmkgPSB3
ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfY2hlY2tfdXJpOworCXJlcXVlc3RfY2xhc3MtPnNlbmQg
PSB3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfc2VuZDsKKwlyZXF1ZXN0X2NsYXNzLT5zZW5kX2Fz
eW5jID0gd2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX3NlbmRfYXN5bmM7CisJcmVxdWVzdF9jbGFz
cy0+c2VuZF9maW5pc2ggPSB3ZWJraXRfc291cF9yZXF1ZXN0X2h0dHBfc2VuZF9maW5pc2g7CisJ
cmVxdWVzdF9jbGFzcy0+Z2V0X2NvbnRlbnRfbGVuZ3RoID0gd2Via2l0X3NvdXBfcmVxdWVzdF9o
dHRwX2dldF9jb250ZW50X2xlbmd0aDsKKwlyZXF1ZXN0X2NsYXNzLT5nZXRfY29udGVudF90eXBl
ID0gd2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX2dldF9jb250ZW50X3R5cGU7Cit9CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QtaHR0
cC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LWh0
dHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDZhODIxCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1
ZXN0LWh0dHAuaApAQCAtMCwwICsxLDU0IEBACisvKiAtKi0gTW9kZTogQzsgdGFiLXdpZHRoOiA4
OyBpbmRlbnQtdGFicy1tb2RlOiB0OyBjLWJhc2ljLW9mZnNldDogOCAtKi0gKi8KKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEln
YWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaWZuZGVmIFdFQktJVF9TT1VQX1JFUVVFU1RfSFRUUF9ICisjZGVmaW5lIFdF
QktJVF9TT1VQX1JFUVVFU1RfSFRUUF9IIDEKKworI2luY2x1ZGUgInNvdXAtcmVxdWVzdC5oIgor
CitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0hUVFAg
ICAgICAgICAgICAod2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX2dldF90eXBlICgpKQorI2RlZmlu
ZSBXRUJLSVRfU09VUF9SRVFVRVNUX0hUVFAob2JqZWN0KSAgICAgICAgIChHX1RZUEVfQ0hFQ0tf
SU5TVEFOQ0VfQ0FTVCAoKG9iamVjdCksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVF9IVFRQLCBX
ZWJLaXRTb3VwUmVxdWVzdEhUVFApKQorI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNUX0hUVFBf
Q0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgV0VCS0lU
X1RZUEVfU09VUF9SRVFVRVNUX0hUVFAsIFdlYktpdFNvdXBSZXF1ZXN0SFRUUENsYXNzKSkKKyNk
ZWZpbmUgV0VCS0lUX0lTX1NPVVBfUkVRVUVTVF9IVFRQKG9iamVjdCkgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX1RZUEUgKChvYmplY3QpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfSFRU
UCkpCisjZGVmaW5lIFdFQktJVF9JU19TT1VQX1JFUVVFU1RfSFRUUF9DTEFTUyhrbGFzcykgKEdf
VFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1Rf
SFRUUCkpCisjZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfSFRUUF9HRVRfQ0xBU1Mob2JqKSAg
KEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX1JFUVVF
U1RfSFRUUCwgV2ViS2l0U291cFJlcXVlc3RIVFRQQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0U291cFJlcXVlc3RIVFRQUHJpdmF0ZSBXZWJLaXRTb3VwUmVxdWVzdEhUVFBQcml2YXRl
OworCit0eXBlZGVmIHN0cnVjdCB7CisJV2ViS2l0U291cFJlcXVlc3QgcGFyZW50OworCisJV2Vi
S2l0U291cFJlcXVlc3RIVFRQUHJpdmF0ZSAqcHJpdjsKK30gV2ViS2l0U291cFJlcXVlc3RIVFRQ
OworCit0eXBlZGVmIHN0cnVjdCB7CisJV2ViS2l0U291cFJlcXVlc3RDbGFzcyBwYXJlbnQ7Cit9
IFdlYktpdFNvdXBSZXF1ZXN0SFRUUENsYXNzOworCitHVHlwZSB3ZWJraXRfc291cF9yZXF1ZXN0
X2h0dHBfZ2V0X3R5cGUgKHZvaWQpOworCitTb3VwTWVzc2FnZSAgKndlYmtpdF9zb3VwX3JlcXVl
c3RfaHR0cF9nZXRfbWVzc2FnZSAoV2ViS2l0U291cFJlcXVlc3RIVFRQICpodHRwKTsKKworR19F
TkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9TT1VQX1JFUVVFU1RfSFRUUF9IICovCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3Qu
YyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5jCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2YjlmNWEKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS9zb3VwLXJlcXVlc3QuYwpA
QCAtMCwwICsxLDMxMiBAQAorLyogLSotIE1vZGU6IEM7IHRhYi13aWR0aDogODsgaW5kZW50LXRh
YnMtbW9kZTogdDsgYy1iYXNpYy1vZmZzZXQ6IDggLSotICovCisvKgorICogc291cC1yZXF1ZXN0
LmM6IFByb3RvY29sLWluZGVwZW5kZW50IHN0cmVhbWluZyByZXF1ZXN0IGludGVyZmFjZQorICoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAsIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+
CisjZW5kaWYKKworI2luY2x1ZGUgPGdsaWIvZ2kxOG4uaD4KKworI2luY2x1ZGUgInNvdXAtcmVx
dWVzdC5oIgorI2luY2x1ZGUgInNvdXAtcmVxdWVzdGVyLmgiCisKKy8qKgorICogU0VDVElPTjpz
b3VwLXJlcXVlc3QKKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogUHJvdG9jb2wtaW5kZXBlbmRlbnQg
c3RyZWFtaW5nIHJlcXVlc3QgaW50ZXJmYWNlCisgKgorICogRklYTUUKKyAqKi8KKworLyoqCisg
KiBXZWJLaXRTb3VwUmVxdWVzdDoKKyAqCisgKiBGSVhNRQorICoKKyAqIFNpbmNlOiAyLjMwCisg
KiovCisKK3N0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX3JlcXVlc3RfaW5pdGFibGVfaW50ZXJmYWNl
X2luaXQgKEdJbml0YWJsZUlmYWNlICppbml0YWJsZV9pbnRlcmZhY2UpOworCitHX0RFRklORV9U
WVBFX1dJVEhfQ09ERSAoV2ViS2l0U291cFJlcXVlc3QsIHdlYmtpdF9zb3VwX3JlcXVlc3QsIEdf
VFlQRV9PQkpFQ1QsCisJCQkgR19JTVBMRU1FTlRfSU5URVJGQUNFIChHX1RZUEVfSU5JVEFCTEUs
CisJCQkJCQl3ZWJraXRfc291cF9yZXF1ZXN0X2luaXRhYmxlX2ludGVyZmFjZV9pbml0KSkKKwor
ZW51bSB7CisJUFJPUF8wLAorCVBST1BfVVJJLAorCVBST1BfU0VTU0lPTgorfTsKKworc3RydWN0
IF9XZWJLaXRTb3VwUmVxdWVzdFByaXZhdGUgeworCVNvdXBVUkkgKnVyaTsKKwlTb3VwU2Vzc2lv
biAqc2Vzc2lvbjsKK307CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfc291cF9yZXF1ZXN0X2luaXQg
KFdlYktpdFNvdXBSZXF1ZXN0ICpyZXF1ZXN0KQoreworCXJlcXVlc3QtPnByaXYgPSBHX1RZUEVf
SU5TVEFOQ0VfR0VUX1BSSVZBVEUgKHJlcXVlc3QsIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVCwg
V2ViS2l0U291cFJlcXVlc3RQcml2YXRlKTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3Vw
X3JlcXVlc3RfZmluYWxpemUgKEdPYmplY3QgKm9iamVjdCkKK3sKKwlXZWJLaXRTb3VwUmVxdWVz
dCAqcmVxdWVzdCA9IFdFQktJVF9TT1VQX1JFUVVFU1QgKG9iamVjdCk7CisKKwlpZiAocmVxdWVz
dC0+cHJpdi0+dXJpKQorCQlzb3VwX3VyaV9mcmVlIChyZXF1ZXN0LT5wcml2LT51cmkpOworCWlm
IChyZXF1ZXN0LT5wcml2LT5zZXNzaW9uKQorCQlnX29iamVjdF91bnJlZiAocmVxdWVzdC0+cHJp
di0+c2Vzc2lvbik7CisKKwlHX09CSkVDVF9DTEFTUyAod2Via2l0X3NvdXBfcmVxdWVzdF9wYXJl
bnRfY2xhc3MpLT5maW5hbGl6ZSAob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9z
b3VwX3JlcXVlc3Rfc2V0X3Byb3BlcnR5IChHT2JqZWN0ICAgICAgKm9iamVjdCwKKwkJCQkgIGd1
aW50IHByb3BfaWQsCisJCQkJICBjb25zdCBHVmFsdWUgKnZhbHVlLAorCQkJCSAgR1BhcmFtU3Bl
YyAgICpwc3BlYykKK3sKKwlXZWJLaXRTb3VwUmVxdWVzdCAqcmVxdWVzdCA9IFdFQktJVF9TT1VQ
X1JFUVVFU1QgKG9iamVjdCk7CisKKwlzd2l0Y2ggKHByb3BfaWQpIHsKKwljYXNlIFBST1BfVVJJ
OgorCQlpZiAocmVxdWVzdC0+cHJpdi0+dXJpKQorCQkJc291cF91cmlfZnJlZSAocmVxdWVzdC0+
cHJpdi0+dXJpKTsKKwkJcmVxdWVzdC0+cHJpdi0+dXJpID0gZ192YWx1ZV9kdXBfYm94ZWQgKHZh
bHVlKTsKKwkJYnJlYWs7CisJY2FzZSBQUk9QX1NFU1NJT046CisJCWlmIChyZXF1ZXN0LT5wcml2
LT5zZXNzaW9uKQorCQkJZ19vYmplY3RfdW5yZWYgKHJlcXVlc3QtPnByaXYtPnNlc3Npb24pOwor
CQlyZXF1ZXN0LT5wcml2LT5zZXNzaW9uID0gZ192YWx1ZV9kdXBfb2JqZWN0ICh2YWx1ZSk7CisJ
CWJyZWFrOworCWRlZmF1bHQ6CisJCUdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRCAo
b2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQK
K3dlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X3Byb3BlcnR5IChHT2JqZWN0ICAgICpvYmplY3QsCisJ
CQkJICBndWludCBwcm9wX2lkLAorCQkJCSAgR1ZhbHVlICAgICAqdmFsdWUsCisJCQkJICBHUGFy
YW1TcGVjICpwc3BlYykKK3sKKwlXZWJLaXRTb3VwUmVxdWVzdCAqcmVxdWVzdCA9IFdFQktJVF9T
T1VQX1JFUVVFU1QgKG9iamVjdCk7CisKKwlzd2l0Y2ggKHByb3BfaWQpIHsKKwljYXNlIFBST1Bf
VVJJOgorCQlnX3ZhbHVlX3NldF9ib3hlZCAodmFsdWUsIHJlcXVlc3QtPnByaXYtPnVyaSk7CisJ
CWJyZWFrOworCWNhc2UgUFJPUF9TRVNTSU9OOgorCQlnX3ZhbHVlX3NldF9vYmplY3QgKHZhbHVl
LCByZXF1ZXN0LT5wcml2LT5zZXNzaW9uKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJR19PQkpF
Q1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEIChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKwkJ
YnJlYWs7CisJfQorfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3dlYmtpdF9zb3VwX3JlcXVlc3RfaW5p
dGFibGVfaW5pdCAoR0luaXRhYmxlICAgICAqaW5pdGFibGUsCisJCQkJICAgR0NhbmNlbGxhYmxl
ICAqY2FuY2VsbGFibGUsCisJCQkJICAgR0Vycm9yICAgICAgICoqZXJyb3IpCit7CisJV2ViS2l0
U291cFJlcXVlc3QgKnJlcXVlc3QgPSBXRUJLSVRfU09VUF9SRVFVRVNUIChpbml0YWJsZSk7CisJ
Z2Jvb2xlYW4gb2s7CisKKwlpZiAoIXJlcXVlc3QtPnByaXYtPnVyaSkgeworCQlnX3NldF9lcnJv
ciAoZXJyb3IsIFdFQktJVF9TT1VQX0VSUk9SLCBXRUJLSVRfU09VUF9FUlJPUl9CQURfVVJJLAor
CQkJICAgICBfICgiTm8gVVJJIHByb3ZpZGVkIikpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJ
b2sgPSBXRUJLSVRfU09VUF9SRVFVRVNUX0dFVF9DTEFTUyAoaW5pdGFibGUpLT4KKwkJY2hlY2tf
dXJpIChyZXF1ZXN0LCByZXF1ZXN0LT5wcml2LT51cmksIGVycm9yKTsKKworCWlmICghb2sgJiYg
ZXJyb3IpIHsKKwkJY2hhciAqdXJpX3N0cmluZyA9IHNvdXBfdXJpX3RvX3N0cmluZyAocmVxdWVz
dC0+cHJpdi0+dXJpLCBGQUxTRSk7CisJCWdfc2V0X2Vycm9yIChlcnJvciwgV0VCS0lUX1NPVVBf
RVJST1IsIFdFQktJVF9TT1VQX0VSUk9SX0JBRF9VUkksCisJCQkgICAgIF8gKCJJbnZhbGlkICcl
cycgVVJJOiAlcyIpLAorCQkJICAgICByZXF1ZXN0LT5wcml2LT51cmktPnNjaGVtZSwKKwkJCSAg
ICAgdXJpX3N0cmluZyk7CisJCWdfZnJlZSAodXJpX3N0cmluZyk7CisJfQorCisJcmV0dXJuIG9r
OworfQorCitzdGF0aWMgZ2Jvb2xlYW4KK3dlYmtpdF9zb3VwX3JlcXVlc3RfZGVmYXVsdF9jaGVj
a191cmkgKFdlYktpdFNvdXBSZXF1ZXN0ICAqcmVxdWVzdCwKKwkJCQkgICAgICAgU291cFVSSSAg
ICAgICp1cmksCisJCQkJICAgICAgIEdFcnJvciAgICAgICoqZXJyb3IpCit7CisJcmV0dXJuIFRS
VUU7Cit9CisKKy8qIERlZmF1bHQgaW1wbGVtZW50YXRpb246IGFzc3VtZSB0aGUgc3luYyBpbXBs
ZW1lbnRhdGlvbiBkb2Vzbid0IGJsb2NrICovCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfcmVx
dWVzdF9kZWZhdWx0X3NlbmRfYXN5bmMgKFdlYktpdFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1
ZXN0LAorCQkJCQlHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJCUdBc3lu
Y1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssCisJCQkJCWdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlH
U2ltcGxlQXN5bmNSZXN1bHQgKnNpbXBsZTsKKworCXNpbXBsZSA9IGdfc2ltcGxlX2FzeW5jX3Jl
c3VsdF9uZXcgKEdfT0JKRUNUIChyZXF1ZXN0KSwKKwkJCQkJICAgIGNhbGxiYWNrLCB1c2VyX2Rh
dGEsCisJCQkJCSAgICB3ZWJraXRfc291cF9yZXF1ZXN0X2RlZmF1bHRfc2VuZF9hc3luYyk7CisJ
Z19zaW1wbGVfYXN5bmNfcmVzdWx0X2NvbXBsZXRlX2luX2lkbGUgKHNpbXBsZSk7CisJZ19vYmpl
Y3RfdW5yZWYgKHNpbXBsZSk7Cit9CisKK3N0YXRpYyBHSW5wdXRTdHJlYW0gKgord2Via2l0X3Nv
dXBfcmVxdWVzdF9kZWZhdWx0X3NlbmRfZmluaXNoIChXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAg
ICAqcmVxdWVzdCwKKwkJCQkJIEdBc3luY1Jlc3VsdCAgICAgICAgICpyZXN1bHQsCisJCQkJCSBH
RXJyb3IgICAgICAgICAgICAgICoqZXJyb3IpCit7CisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKGdf
c2ltcGxlX2FzeW5jX3Jlc3VsdF9pc192YWxpZCAocmVzdWx0LCBHX09CSkVDVCAocmVxdWVzdCks
IHdlYmtpdF9zb3VwX3JlcXVlc3RfZGVmYXVsdF9zZW5kX2FzeW5jKSwgTlVMTCk7CisKKwlyZXR1
cm4gd2Via2l0X3NvdXBfcmVxdWVzdF9zZW5kIChyZXF1ZXN0LCBOVUxMLCBlcnJvcik7Cit9CisK
K0dJbnB1dFN0cmVhbSAqCit3ZWJraXRfc291cF9yZXF1ZXN0X3NlbmQgKFdlYktpdFNvdXBSZXF1
ZXN0ICAgICAgICAgICpyZXF1ZXN0LAorCQkJICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2Vs
bGFibGUsCisJCQkgIEdFcnJvciAgICAgICAgICAgICAgKiplcnJvcikKK3sKKwlyZXR1cm4gV0VC
S0lUX1NPVVBfUkVRVUVTVF9HRVRfQ0xBU1MgKHJlcXVlc3QpLT4KKwkJc2VuZCAocmVxdWVzdCwg
Y2FuY2VsbGFibGUsIGVycm9yKTsKK30KKwordm9pZAord2Via2l0X3NvdXBfcmVxdWVzdF9zZW5k
X2FzeW5jIChXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwKKwkJCQlHQ2FuY2Vs
bGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxs
YmFjaywKKwkJCQlncG9pbnRlciB1c2VyX2RhdGEpCit7CisJV0VCS0lUX1NPVVBfUkVRVUVTVF9H
RVRfQ0xBU1MgKHJlcXVlc3QpLT4KKwkJc2VuZF9hc3luYyAocmVxdWVzdCwgY2FuY2VsbGFibGUs
IGNhbGxiYWNrLCB1c2VyX2RhdGEpOworfQorCitHSW5wdXRTdHJlYW0gKgord2Via2l0X3NvdXBf
cmVxdWVzdF9zZW5kX2ZpbmlzaCAoV2ViS2l0U291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3Qs
CisJCQkJIEdBc3luY1Jlc3VsdCAgICAgICAgICpyZXN1bHQsCisJCQkJIEdFcnJvciAgICAgICAg
ICAgICAgKiplcnJvcikKK3sKKwlyZXR1cm4gV0VCS0lUX1NPVVBfUkVRVUVTVF9HRVRfQ0xBU1Mg
KHJlcXVlc3QpLT4KKwkJc2VuZF9maW5pc2ggKHJlcXVlc3QsIHJlc3VsdCwgZXJyb3IpOworfQor
CitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfcmVxdWVzdF9jbGFzc19pbml0IChXZWJLaXRTb3Vw
UmVxdWVzdENsYXNzICpyZXF1ZXN0X2NsYXNzKQoreworCUdPYmplY3RDbGFzcyAqb2JqZWN0X2Ns
YXNzID0gR19PQkpFQ1RfQ0xBU1MgKHJlcXVlc3RfY2xhc3MpOworCisJZ190eXBlX2NsYXNzX2Fk
ZF9wcml2YXRlIChyZXF1ZXN0X2NsYXNzLCBzaXplb2YgKFdlYktpdFNvdXBSZXF1ZXN0UHJpdmF0
ZSkpOworCisJcmVxdWVzdF9jbGFzcy0+Y2hlY2tfdXJpID0gd2Via2l0X3NvdXBfcmVxdWVzdF9k
ZWZhdWx0X2NoZWNrX3VyaTsKKwlyZXF1ZXN0X2NsYXNzLT5zZW5kX2FzeW5jID0gd2Via2l0X3Nv
dXBfcmVxdWVzdF9kZWZhdWx0X3NlbmRfYXN5bmM7CisJcmVxdWVzdF9jbGFzcy0+c2VuZF9maW5p
c2ggPSB3ZWJraXRfc291cF9yZXF1ZXN0X2RlZmF1bHRfc2VuZF9maW5pc2g7CisKKwlvYmplY3Rf
Y2xhc3MtPmZpbmFsaXplID0gd2Via2l0X3NvdXBfcmVxdWVzdF9maW5hbGl6ZTsKKwlvYmplY3Rf
Y2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9zb3VwX3JlcXVlc3Rfc2V0X3Byb3BlcnR5Owor
CW9iamVjdF9jbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfcHJv
cGVydHk7CisKKwlnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5ICgKKwkJIG9iamVjdF9j
bGFzcywgUFJPUF9VUkksCisJCSBnX3BhcmFtX3NwZWNfYm94ZWQgKFdFQktJVF9TT1VQX1JFUVVF
U1RfVVJJLAorCQkJCSAgICAgIlVSSSIsCisJCQkJICAgICAiVGhlIHJlcXVlc3QgVVJJIiwKKwkJ
CQkgICAgIFNPVVBfVFlQRV9VUkksCisJCQkJICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFS
QU1fQ09OU1RSVUNUX09OTFkpKTsKKwlnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5ICgK
KwkJIG9iamVjdF9jbGFzcywgUFJPUF9TRVNTSU9OLAorCQkgZ19wYXJhbV9zcGVjX29iamVjdCAo
V0VCS0lUX1NPVVBfUkVRVUVTVF9TRVNTSU9OLAorCQkJCSAgICAgICJTZXNzaW9uIiwKKwkJCQkg
ICAgICAiVGhlIHJlcXVlc3QncyBzZXNzaW9uIiwKKwkJCQkgICAgICBTT1VQX1RZUEVfU0VTU0lP
TiwKKwkJCQkgICAgICBHX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkp
KTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX3JlcXVlc3RfaW5pdGFibGVfaW50ZXJm
YWNlX2luaXQgKEdJbml0YWJsZUlmYWNlICppbml0YWJsZV9pbnRlcmZhY2UpCit7CisJaW5pdGFi
bGVfaW50ZXJmYWNlLT5pbml0ID0gd2Via2l0X3NvdXBfcmVxdWVzdF9pbml0YWJsZV9pbml0Owor
fQorCitTb3VwVVJJICoKK3dlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X3VyaSAoV2ViS2l0U291cFJl
cXVlc3QgKnJlcXVlc3QpCit7CisJcmV0dXJuIHJlcXVlc3QtPnByaXYtPnVyaTsKK30KKworU291
cFNlc3Npb24gKgord2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfc2Vzc2lvbiAoV2ViS2l0U291cFJl
cXVlc3QgKnJlcXVlc3QpCit7CisJcmV0dXJuIHJlcXVlc3QtPnByaXYtPnNlc3Npb247Cit9CisK
K2dvZmZzZXQKK3dlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X2NvbnRlbnRfbGVuZ3RoIChXZWJLaXRT
b3VwUmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlyZXR1cm4gV0VCS0lUX1NPVVBfUkVRVUVTVF9HRVRf
Q0xBU1MgKHJlcXVlc3QpLT5nZXRfY29udGVudF9sZW5ndGggKHJlcXVlc3QpOworfQorCitjb25z
dCBjaGFyICoKK3dlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X2NvbnRlbnRfdHlwZSAoV2ViS2l0U291
cFJlcXVlc3QgICpyZXF1ZXN0KQoreworCXJldHVybiBXRUJLSVRfU09VUF9SRVFVRVNUX0dFVF9D
TEFTUyAocmVxdWVzdCktPmdldF9jb250ZW50X3R5cGUgKHJlcXVlc3QpOworfQorCisjZGVmaW5l
IFhESUdJVChjKSAoKGMpIDw9ICc5JyA/IChjKSAtICcwJyA6ICgoYykgJiAweDRGKSAtICdBJyAr
IDEwKQorI2RlZmluZSBIRVhDSEFSKHMpICgoWERJR0lUIChzWzFdKSA8PCA0KSArIFhESUdJVCAo
c1syXSkpCisKKy8qIENvcHkmcGFzdGVkIGZyb20gbGlic291cCdzIHNvdXAtdXJpLmMgYWZ0ZXIg
YXBwbHlpbmcgdGhlIHBhdGNoIGluCisgKiBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjMwNTQwLiBXZSBuZWVkIHRoaXMKKyAqIGluc3RlYWQgb2Ygc291cF91cmlf
ZGVjb2RlKCkgYXMgaXQgaW5jb3JyZWN0bHkgcmV0dXJucyBOVUxMIGZvcgorICogaW5jb3JyZWN0
bHkgZW5jb2RlZCBVUkxzLiBUT0RPOiByZW1vdmUgdGhpcyB3aGVuIHJlcXVpcmVkIGxpYnNvdXAK
KyAqIHZlcnNpb24gaXMgYnVtcGVkIG91dCB0byAyLjMyLjEKKyAqLworZ2NoYXIgKgord2Via2l0
X3NvdXBfcmVxdWVzdF91cmlfZGVjb2RlZF9jb3B5IChjb25zdCBjaGFyICpwYXJ0LCBpbnQgbGVu
Z3RoKQoreworCXVuc2lnbmVkIGNoYXIgKnMsICpkOworICAgICAgICBjaGFyICpkZWNvZGVkID0g
Z19zdHJuZHVwIChwYXJ0LCBsZW5ndGgpOworCisgICAgICAgIHMgPSBkID0gKHVuc2lnbmVkIGNo
YXIgKilkZWNvZGVkOworICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgaWYgKCpzID09ICcl
JykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFnX2FzY2lpX2lzeGRpZ2l0IChzWzFd
KSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICFnX2FzY2lpX2lzeGRpZ2l0IChzWzJd
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqZCsrID0gKnM7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgKmQrKyA9IEhFWENIQVIgKHMpOworICAgICAg
ICAgICAgICAgICAgICAgICAgcyArPSAyOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgICAgICAgICAgICAgKmQrKyA9ICpzOworICAgICAgICB9IHdoaWxlICgqcysrKTsKKwor
ICAgICAgICByZXR1cm4gZGVjb2RlZDsKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uODM3ZDhmNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdC5oCkBAIC0wLDAgKzEsMTAwIEBACisvKiAtKi0g
TW9kZTogQzsgdGFiLXdpZHRoOiA4OyBpbmRlbnQtdGFicy1tb2RlOiB0OyBjLWJhc2ljLW9mZnNl
dDogOCAtKi0gKi8KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwgSW5jLgorICog
Q29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSwgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdFQktJVF9TT1VQX1JFUVVF
U1RfSAorI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNUX0ggMQorCisjaW5jbHVkZSA8bGlic291
cC9zb3VwLmg+CisjaW5jbHVkZSA8Z2lvL2dpby5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZp
bmUgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUICAgICAgICAgICAgKHdlYmtpdF9zb3VwX3JlcXVl
c3RfZ2V0X3R5cGUgKCkpCisjZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1Qob2JqKSAgICAgICAg
ICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBf
UkVRVUVTVCwgV2ViS2l0U291cFJlcXVlc3QpKQorI2RlZmluZSBXRUJLSVRfU09VUF9SRVFVRVNU
X0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFdFQktJ
VF9UWVBFX1NPVVBfUkVRVUVTVCwgV2ViS2l0U291cFJlcXVlc3RDbGFzcykpCisjZGVmaW5lIFdF
QktJVF9JU19TT1VQX1JFUVVFU1Qob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
VFlQRSAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVCkpCisjZGVmaW5lIFdFQktJVF9J
U19TT1VQX1JFUVVFU1RfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGts
YXNzKSwgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUKSkKKyNkZWZpbmUgV0VCS0lUX1NPVVBfUkVR
VUVTVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBX
RUJLSVRfVFlQRV9TT1VQX1JFUVVFU1QsIFdlYktpdFNvdXBSZXF1ZXN0Q2xhc3MpKQorCit0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0U291cFJlcXVlc3QgV2ViS2l0U291cFJlcXVlc3Q7Cit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0U291cFJlcXVlc3RQcml2YXRlIFdlYktpdFNvdXBSZXF1ZXN0UHJpdmF0
ZTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdENsYXNzIFdlYktpdFNvdXBSZXF1
ZXN0Q2xhc3M7CisKK3N0cnVjdCBfV2ViS2l0U291cFJlcXVlc3QgeworCUdPYmplY3QgcGFyZW50
OworCisJV2ViS2l0U291cFJlcXVlc3RQcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJL
aXRTb3VwUmVxdWVzdENsYXNzIHsKKwlHT2JqZWN0Q2xhc3MgcGFyZW50OworCisJZ2Jvb2xlYW4g
KCpjaGVja191cmkpKFdlYktpdFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXFfYmFzZSwKKwkJCSAg
ICAgIFNvdXBVUkkgICAgICAgICAgICAgICp1cmksCisJCQkgICAgICBHRXJyb3IgICAgICAgICAg
ICAgICoqZXJyb3IpOworCisJR0lucHV0U3RyZWFtICogKCpzZW5kKShXZWJLaXRTb3VwUmVxdWVz
dCAgICAgICAgICAqcmVxdWVzdCwKKwkJCSAgICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2Fu
Y2VsbGFibGUsCisJCQkgICAgICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKTsKKwl2b2lk
ICgqc2VuZF9hc3luYykoV2ViS2l0U291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCisJCQkg
ICBHQ2FuY2VsbGFibGUgICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkgICBHQXN5bmNSZWFkeUNh
bGxiYWNrIGNhbGxiYWNrLAorCQkJICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKKwlHSW5wdXRTdHJl
YW0gKiAoKnNlbmRfZmluaXNoKShXZWJLaXRTb3VwUmVxdWVzdCAgICAgICAgICAqcmVxdWVzdCwK
KwkJCQkgICAgICBHQXN5bmNSZXN1bHQgICAgICAgICAqcmVzdWx0LAorCQkJCSAgICAgIEdFcnJv
ciAgICAgICAgICAgICAgKiplcnJvcik7CisKKwlnb2Zmc2V0ICgqZ2V0X2NvbnRlbnRfbGVuZ3Ro
KShXZWJLaXRTb3VwUmVxdWVzdCAgICpyZXF1ZXN0KTsKKwljb25zdCBjaGFyICogICAoKmdldF9j
b250ZW50X3R5cGUpKFdlYktpdFNvdXBSZXF1ZXN0ICAgKnJlcXVlc3QpOworfTsKKworR1R5cGUg
d2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfdHlwZSAodm9pZCk7CisKKyNkZWZpbmUgV0VCS0lUX1NP
VVBfUkVRVUVTVF9VUkkgICAgICJ1cmkiCisjZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RfU0VT
U0lPTiAic2Vzc2lvbiIKKworR0lucHV0U3RyZWFtICp3ZWJraXRfc291cF9yZXF1ZXN0X3NlbmQg
KFdlYktpdFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1ZXN0LAorCQkJCQlHQ2FuY2VsbGFibGUg
ICAgICAgICAqY2FuY2VsbGFibGUsCisJCQkJCUdFcnJvciAgICAgICAgICAgICAgKiplcnJvcik7
Cit2b2lkICAgICAgICAgIHdlYmtpdF9zb3VwX3JlcXVlc3Rfc2VuZF9hc3luYyAoV2ViS2l0U291
cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QsCisJCQkJCSAgICAgIEdDYW5jZWxsYWJsZSAgICAg
ICAgICpjYW5jZWxsYWJsZSwKKwkJCQkJICAgICAgR0FzeW5jUmVhZHlDYWxsYmFjayBjYWxsYmFj
aywKKwkJCQkJICAgICAgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKK0dJbnB1dFN0cmVhbSAqd2Via2l0
X3NvdXBfcmVxdWVzdF9zZW5kX2ZpbmlzaCAoV2ViS2l0U291cFJlcXVlc3QgICAgICAgICAgKnJl
cXVlc3QsCisJCQkJCSAgICAgICBHQXN5bmNSZXN1bHQgICAgICAgICAqcmVzdWx0LAorCQkJCQkg
ICAgICAgR0Vycm9yICAgICAgICAgICAgICAqKmVycm9yKTsKKworU291cFVSSSAgICAgICp3ZWJr
aXRfc291cF9yZXF1ZXN0X2dldF91cmkgKFdlYktpdFNvdXBSZXF1ZXN0ICAgICAgICAgICpyZXF1
ZXN0KTsKK1NvdXBTZXNzaW9uICAqd2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfc2Vzc2lvbiAoV2Vi
S2l0U291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QpOworCitnb2Zmc2V0ICAgICAgIHdlYmtp
dF9zb3VwX3JlcXVlc3RfZ2V0X2NvbnRlbnRfbGVuZ3RoIChXZWJLaXRTb3VwUmVxdWVzdCAgICAg
ICAgICAqcmVxdWVzdCk7Citjb25zdCBjaGFyICAgKndlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X2Nv
bnRlbnRfdHlwZSAoV2ViS2l0U291cFJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QpOworCisvKiBV
c2VkIGJ5IFdlYktpdFNvdXBSZXF1ZXN0RmlsZSBhbmQgV2ViS2l0U291cFJlcXVlc3REYXRhLiBJ
ZGVhbGx5CisgKiBzaG91bGQgYmUgbG9jYXRlZCBpbiBzb21lIHV0aWwgZmlsZSBidXQgSSdsbCBw
bGFjZSBpdCBoZXJlIGFzIGl0CisgKiB3aWxsIGJlIHJlbW92ZWQgd2l0aCBsaWJzb3VwIDIuMzIu
MSB0aGF0IHdpbGwgc2hpcCBmaXhlZCB2ZXJzaW9ucworICogb2Ygc291cF91cmlfZGVjb2RlL25v
cm1hbGl6ZQorICovCitnY2hhciAqd2Via2l0X3NvdXBfcmVxdWVzdF91cmlfZGVjb2RlZF9jb3B5
IChjb25zdCBjaGFyICpwYXJ0LCBpbnQgbGVuZ3RoKTsKKworR19FTkRfREVDTFMKKworI2VuZGlm
IC8qIFdFQktJVF9TT1VQX1JFUVVFU1RfSCAqLwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvY2FjaGUvc291cC1yZXF1ZXN0ZXIuYyBiL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNmNlODlkOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL2NhY2hlL3NvdXAtcmVxdWVzdGVyLmMKQEAgLTAsMCArMSwxODggQEAK
Ky8qIC0qLSBNb2RlOiBDOyB0YWItd2lkdGg6IDg7IGluZGVudC10YWJzLW1vZGU6IHQ7IGMtYmFz
aWMtb2Zmc2V0OiA4IC0qLSAqLworLyoKKyAqIHNvdXAtcmVxdWVzdGVyLmM6CisgKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwLCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAic291cC1yZXF1ZXN0ZXIuaCIKKworI2luY2x1ZGUgInNvdXAtcmVxdWVzdC1kYXRhLmgiCisj
aW5jbHVkZSAic291cC1yZXF1ZXN0LWZpbGUuaCIKKyNpbmNsdWRlICJzb3VwLXJlcXVlc3QtaHR0
cC5oIgorI2luY2x1ZGUgPGdsaWIvZ2kxOG4uaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4K
Kworc3RydWN0IF9XZWJLaXRTb3VwUmVxdWVzdGVyUHJpdmF0ZSB7CisJR0hhc2hUYWJsZSAqcmVx
dWVzdF90eXBlczsKK307CisKKyNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVEVSX0dFVF9QUklW
QVRFKG8pIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUgKChvKSwgV0VCS0lUX1RZUEVfU09V
UF9SRVFVRVNURVIsIFdlYktpdFNvdXBSZXF1ZXN0ZXJQcml2YXRlKSkKKworR19ERUZJTkVfVFlQ
RSAoV2ViS2l0U291cFJlcXVlc3Rlciwgd2Via2l0X3NvdXBfcmVxdWVzdGVyLCBHX1RZUEVfT0JK
RUNUKQorCitzdGF0aWMgdm9pZCB3ZWJraXRfc291cF9yZXF1ZXN0ZXJfaW5pdCAoV2ViS2l0U291
cFJlcXVlc3RlciAqcmVxdWVzdGVyKQoreworCXJlcXVlc3Rlci0+cHJpdiA9IFdFQktJVF9TT1VQ
X1JFUVVFU1RFUl9HRVRfUFJJVkFURSAocmVxdWVzdGVyKTsKKworCXJlcXVlc3Rlci0+cHJpdi0+
cmVxdWVzdF90eXBlcyA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGZpbmFsaXplIChHT2JqZWN0ICpv
YmplY3QpCit7CisJV2ViS2l0U291cFJlcXVlc3RlciAqcmVxdWVzdGVyID0gV0VCS0lUX1NPVVBf
UkVRVUVTVEVSIChvYmplY3QpOworCisJaWYgKHJlcXVlc3Rlci0+cHJpdi0+cmVxdWVzdF90eXBl
cykKKwkJZ19oYXNoX3RhYmxlX2Rlc3Ryb3kgKHJlcXVlc3Rlci0+cHJpdi0+cmVxdWVzdF90eXBl
cyk7CisKKwlHX09CSkVDVF9DTEFTUyAod2Via2l0X3NvdXBfcmVxdWVzdGVyX3BhcmVudF9jbGFz
cyktPmZpbmFsaXplIChvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfc291cF9yZXF1
ZXN0ZXJfY2xhc3NfaW5pdCAoV2ViS2l0U291cFJlcXVlc3RlckNsYXNzICpyZXF1ZXN0ZXJfY2xh
c3MpCit7CisJR09iamVjdENsYXNzICpvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyAocmVx
dWVzdGVyX2NsYXNzKTsKKworCWdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSAocmVxdWVzdGVyX2Ns
YXNzLCBzaXplb2YgKFdlYktpdFNvdXBSZXF1ZXN0ZXJQcml2YXRlKSk7CisKKwkvKiB2aXJ0dWFs
IG1ldGhvZCBvdmVycmlkZSAqLworCW9iamVjdF9jbGFzcy0+ZmluYWxpemUgPSBmaW5hbGl6ZTsK
K30KKworc3RhdGljIHZvaWQgaW5pdF9yZXF1ZXN0X3R5cGVzIChXZWJLaXRTb3VwUmVxdWVzdGVy
UHJpdmF0ZSAqcHJpdikKK3sKKwlpZiAocHJpdi0+cmVxdWVzdF90eXBlcykKKwkJcmV0dXJuOwor
CisJcHJpdi0+cmVxdWVzdF90eXBlcyA9IGdfaGFzaF90YWJsZV9uZXdfZnVsbCAoc291cF9zdHJf
Y2FzZV9oYXNoLAorCQkJCQkJICAgICBzb3VwX3N0cl9jYXNlX2VxdWFsLAorCQkJCQkJICAgICBn
X2ZyZWUsIDApOworCWdfaGFzaF90YWJsZV9pbnNlcnQgKHByaXYtPnJlcXVlc3RfdHlwZXMsIGdf
c3RyZHVwICgiZmlsZSIpLAorCQkJICAgICBHU0laRV9UT19QT0lOVEVSIChXRUJLSVRfVFlQRV9T
T1VQX1JFUVVFU1RfRklMRSkpOworCWdfaGFzaF90YWJsZV9pbnNlcnQgKHByaXYtPnJlcXVlc3Rf
dHlwZXMsIGdfc3RyZHVwICgiZGF0YSIpLAorCQkJICAgICBHU0laRV9UT19QT0lOVEVSIChXRUJL
SVRfVFlQRV9TT1VQX1JFUVVFU1RfREFUQSkpOworCWdfaGFzaF90YWJsZV9pbnNlcnQgKHByaXYt
PnJlcXVlc3RfdHlwZXMsIGdfc3RyZHVwICgiaHR0cCIpLAorCQkJICAgICBHU0laRV9UT19QT0lO
VEVSIChXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfSFRUUCkpOworCWdfaGFzaF90YWJsZV9pbnNl
cnQgKHByaXYtPnJlcXVlc3RfdHlwZXMsIGdfc3RyZHVwICgiaHR0cHMiKSwKKwkJCSAgICAgR1NJ
WkVfVE9fUE9JTlRFUiAoV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNUX0hUVFApKTsKKwlnX2hhc2hf
dGFibGVfaW5zZXJ0IChwcml2LT5yZXF1ZXN0X3R5cGVzLCBnX3N0cmR1cCAoImZ0cCIpLAorCQkJ
ICAgICBHU0laRV9UT19QT0lOVEVSIChXRUJLSVRfVFlQRV9TT1VQX1JFUVVFU1RfRklMRSkpOwor
fQorCitXZWJLaXRTb3VwUmVxdWVzdGVyICp3ZWJraXRfc291cF9yZXF1ZXN0ZXJfbmV3ICh2b2lk
KQoreworCXJldHVybiAoV2ViS2l0U291cFJlcXVlc3RlciAqKWdfb2JqZWN0X25ldyAoV0VCS0lU
X1RZUEVfU09VUF9SRVFVRVNURVIsIDApOworfQorCitXZWJLaXRTb3VwUmVxdWVzdCAqd2Via2l0
X3NvdXBfcmVxdWVzdGVyX3JlcXVlc3QgKFdlYktpdFNvdXBSZXF1ZXN0ZXIgKnJlcXVlc3Rlciwg
Y29uc3QgY2hhciAqdXJpU3RyaW5nLCBTb3VwU2Vzc2lvbiAqc2Vzc2lvbiwgR0Vycm9yICoqZXJy
b3IpCit7CisJU291cFVSSSAqdXJpID0gTlVMTDsKKwlXZWJLaXRTb3VwUmVxdWVzdCAqcmVxOwor
CisJdXJpID0gc291cF91cmlfbmV3ICh1cmlTdHJpbmcpOworCWlmICghdXJpKSB7CisJCWdfc2V0
X2Vycm9yIChlcnJvciwgV0VCS0lUX1NPVVBfRVJST1IsIFdFQktJVF9TT1VQX0VSUk9SX0JBRF9V
UkksCisJCQkgICAgIF8gKCJDb3VsZCBub3QgcGFyc2UgVVJJICclcyciKSwgdXJpU3RyaW5nKTsK
KwkJcmV0dXJuIDA7CisJfQorCisJcmVxID0gd2Via2l0X3NvdXBfcmVxdWVzdGVyX3JlcXVlc3Rf
dXJpIChyZXF1ZXN0ZXIsIHVyaSwgc2Vzc2lvbiwgZXJyb3IpOworCXNvdXBfdXJpX2ZyZWUgKHVy
aSk7CisJcmV0dXJuIHJlcTsKK30KKworV2ViS2l0U291cFJlcXVlc3QgKndlYmtpdF9zb3VwX3Jl
cXVlc3Rlcl9yZXF1ZXN0X3VyaSAoV2ViS2l0U291cFJlcXVlc3RlciAqcmVxdWVzdGVyLCBTb3Vw
VVJJICp1cmksIFNvdXBTZXNzaW9uICpzZXNzaW9uLCBHRXJyb3IgKiplcnJvcikKK3sKKwlHVHlw
ZSByZXF1ZXN0VHlwZTsKKworCWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChXRUJLSVRfSVNfU09VUF9S
RVFVRVNURVIgKHJlcXVlc3RlciksIDApOworCisJaW5pdF9yZXF1ZXN0X3R5cGVzIChyZXF1ZXN0
ZXItPnByaXYpOworCXJlcXVlc3RUeXBlID0gKEdUeXBlKUdQT0lOVEVSX1RPX1NJWkUgKGdfaGFz
aF90YWJsZV9sb29rdXAgKHJlcXVlc3Rlci0+cHJpdi0+cmVxdWVzdF90eXBlcywgdXJpLT5zY2hl
bWUpKTsKKwlpZiAoIXJlcXVlc3RUeXBlKSB7CisJCWdfc2V0X2Vycm9yIChlcnJvciwgV0VCS0lU
X1NPVVBfRVJST1IsIFdFQktJVF9TT1VQX0VSUk9SX1VOU1VQUE9SVEVEX1VSSV9TQ0hFTUUsCisJ
CQkgICAgIF8gKCJVbnN1cHBvcnRlZCBVUkkgc2NoZW1lICclcyciKSwgdXJpLT5zY2hlbWUpOwor
CQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZ190eXBlX2lzX2EgKHJlcXVlc3RUeXBlLCBHX1RZUEVf
SU5JVEFCTEUpKSB7CisJCXJldHVybiAoV2ViS2l0U291cFJlcXVlc3QgKilnX2luaXRhYmxlX25l
dyAocmVxdWVzdFR5cGUsIDAsIGVycm9yLAorCQkJCQkJCSAgICAidXJpIiwgdXJpLAorCQkJCQkJ
CSAgICAic2Vzc2lvbiIsIHNlc3Npb24sCisJCQkJCQkJICAgIDApOworCX0gZWxzZSB7CisJCXJl
dHVybiAoV2ViS2l0U291cFJlcXVlc3QgKilnX29iamVjdF9uZXcgKHJlcXVlc3RUeXBlLAorCQkJ
CQkJCSAgInVyaSIsIHVyaSwKKwkJCQkJCQkgICJzZXNzaW9uIiwgc2Vzc2lvbiwKKwkJCQkJCQkg
IDApOworCX0KK30KKworLyogUkZDIDIzOTYsIDMuMSAqLworc3RhdGljIGdib29sZWFuCitzb3Vw
X3NjaGVtZV9pc192YWxpZCAoY29uc3QgY2hhciAqc2NoZW1lKQoreworCWlmIChzY2hlbWUgPT0g
TlVMTCB8fAorCSAgICAhZ19hc2NpaV9pc2FscGhhICgqc2NoZW1lKSkKKwkJcmV0dXJuIEZBTFNF
OworCisJc2NoZW1lKys7CisJd2hpbGUgKCpzY2hlbWUpIHsKKwkJaWYgKCFnX2FzY2lpX2lzYWxw
aGEgKCpzY2hlbWUpICYmCisJCSAgICAhZ19hc2NpaV9pc2RpZ2l0ICgqc2NoZW1lKSAmJgorCQkg
ICAgKnNjaGVtZSAhPSAnKycgJiYKKwkJICAgICpzY2hlbWUgIT0gJy0nICYmCisJCSAgICAqc2No
ZW1lICE9ICcuJykKKwkJCXJldHVybiBGQUxTRTsKKwkJc2NoZW1lKys7CisJfQorCXJldHVybiBU
UlVFOworfQorCit2b2lkCit3ZWJraXRfc291cF9yZXF1ZXN0ZXJfYWRkX3Byb3RvY29sIChXZWJL
aXRTb3VwUmVxdWVzdGVyICpyZXF1ZXN0ZXIsCisJCQkJICAgIGNvbnN0IGNoYXIgICpzY2hlbWUs
CisJCQkJICAgIEdUeXBlIHJlcXVlc3RfdHlwZSkKK3sKKwlnX3JldHVybl9pZl9mYWlsIChXRUJL
SVRfSVNfU09VUF9SRVFVRVNURVIgKHJlcXVlc3RlcikpOworCWdfcmV0dXJuX2lmX2ZhaWwgKHNv
dXBfc2NoZW1lX2lzX3ZhbGlkIChzY2hlbWUpKTsKKworCWluaXRfcmVxdWVzdF90eXBlcyAocmVx
dWVzdGVyLT5wcml2KTsKKwlnX2hhc2hfdGFibGVfaW5zZXJ0IChyZXF1ZXN0ZXItPnByaXYtPnJl
cXVlc3RfdHlwZXMsIGdfc3RyZHVwIChzY2hlbWUpLAorCQkJICAgICBHU0laRV9UT19QT0lOVEVS
IChyZXF1ZXN0X3R5cGUpKTsKK30KKwordm9pZAord2Via2l0X3NvdXBfcmVxdWVzdGVyX3JlbW92
ZV9wcm90b2NvbCAoV2ViS2l0U291cFJlcXVlc3RlciAqcmVxdWVzdGVyLAorCQkJCSAgICAgICBj
b25zdCBjaGFyICAqc2NoZW1lKQoreworCWdfcmV0dXJuX2lmX2ZhaWwgKFdFQktJVF9JU19TT1VQ
X1JFUVVFU1RFUiAocmVxdWVzdGVyKSk7CisJZ19yZXR1cm5faWZfZmFpbCAoc291cF9zY2hlbWVf
aXNfdmFsaWQgKHNjaGVtZSkpOworCisJaW5pdF9yZXF1ZXN0X3R5cGVzIChyZXF1ZXN0ZXItPnBy
aXYpOworCWdfaGFzaF90YWJsZV9yZW1vdmUgKHJlcXVlc3Rlci0+cHJpdi0+cmVxdWVzdF90eXBl
cywgc2NoZW1lKTsKK30KKworR1F1YXJrCit3ZWJraXRfc291cF9lcnJvcl9xdWFyayAodm9pZCkK
K3sKKwlzdGF0aWMgR1F1YXJrIGVycm9yOworCWlmICghZXJyb3IpCisJCWVycm9yID0gZ19xdWFy
a19mcm9tX3N0YXRpY19zdHJpbmcgKCJ3ZWJraXRfc291cF9lcnJvcl9xdWFyayIpOworCXJldHVy
biBlcnJvcjsKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2Nh
Y2hlL3NvdXAtcmVxdWVzdGVyLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNo
ZS9zb3VwLXJlcXVlc3Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcx
ZmYxMDMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9j
YWNoZS9zb3VwLXJlcXVlc3Rlci5oCkBAIC0wLDAgKzEsODEgQEAKKy8qIC0qLSBNb2RlOiBDOyB0
YWItd2lkdGg6IDg7IGluZGVudC10YWJzLW1vZGU6IHQ7IGMtYmFzaWMtb2Zmc2V0OiA4IC0qLSAq
LworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdFQktJVF9T
T1VQX1JFUVVFU1RFUl9ICisjZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RFUl9IIDEKKworI2lu
Y2x1ZGUgInNvdXAtcmVxdWVzdC5oIgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorCitHX0JF
R0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfU09VUF9SRVFVRVNURVIgICAgICAgICAg
ICAod2Via2l0X3NvdXBfcmVxdWVzdGVyX2dldF90eXBlICgpKQorI2RlZmluZSBXRUJLSVRfU09V
UF9SRVFVRVNURVIob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAo
KG9iaiksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVEVSLCBXZWJLaXRTb3VwUmVxdWVzdGVyKSkK
KyNkZWZpbmUgV0VCS0lUX1NPVVBfUkVRVUVTVEVSX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NI
RUNLX0NMQVNTX0NBU1QgKChrbGFzcyksIFdFQktJVF9UWVBFX1NPVVBfUkVRVUVTVEVSLCBXZWJL
aXRTb3VwUmVxdWVzdGVyQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfU09VUF9SRVFVRVNURVIo
b2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIFdFQktJVF9U
WVBFX1NPVVBfUkVRVUVTVEVSKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1NPVVBfUkVRVUVTVEVSX0NM
QVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChvYmopLCBXRUJLSVRfVFlQRV9T
T1VQX1JFUVVFU1RFUikpCisjZGVmaW5lIFdFQktJVF9TT1VQX1JFUVVFU1RFUl9HRVRfQ0xBU1Mo
b2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQ
X1JFUVVFU1RFUiwgV2ViS2l0U291cFJlcXVlc3RlckNsYXNzKSkKKworI2RlZmluZSBXRUJLSVRf
U09VUF9FUlJPUiB3ZWJraXRfc291cF9lcnJvcl9xdWFyayAoKQorCit0eXBlZGVmIGVudW0gewor
CVdFQktJVF9TT1VQX0VSUk9SX0JBRF9VUkksCisJV0VCS0lUX1NPVVBfRVJST1JfVU5TVVBQT1JU
RURfVVJJX1NDSEVNRQorfSBXZWJLaXRTb3VwRXJyb3I7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRTb3VwUmVxdWVzdGVyIFdlYktpdFNvdXBSZXF1ZXN0ZXI7Cit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0U291cFJlcXVlc3RlclByaXZhdGUgV2ViS2l0U291cFJlcXVlc3RlclByaXZhdGU7CisKK3N0
cnVjdCBfV2ViS2l0U291cFJlcXVlc3RlciB7CisJR09iamVjdCBwYXJlbnQ7CisKKwlXZWJLaXRT
b3VwUmVxdWVzdGVyUHJpdmF0ZSAqcHJpdjsKK307CisKK3R5cGVkZWYgc3RydWN0IHsKKwlHT2Jq
ZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfSBXZWJLaXRTb3VwUmVxdWVzdGVyQ2xhc3M7CisKK0dU
eXBlIHdlYmtpdF9zb3VwX3JlcXVlc3Rlcl9nZXRfdHlwZSAodm9pZCk7CisKK1dlYktpdFNvdXBS
ZXF1ZXN0ZXIgKndlYmtpdF9zb3VwX3JlcXVlc3Rlcl9uZXcgKHZvaWQpOworCitHUXVhcmsgd2Vi
a2l0X3NvdXBfZXJyb3JfcXVhcmsgKHZvaWQpOworCitXZWJLaXRTb3VwUmVxdWVzdCAqd2Via2l0
X3NvdXBfcmVxdWVzdGVyX3JlcXVlc3QgKFdlYktpdFNvdXBSZXF1ZXN0ZXIgKnJlcXVlc3RlciwK
KwkJCQkJCSAgY29uc3QgY2hhciAqdXJpU3RyaW5nLAorCQkJCQkJICBTb3VwU2Vzc2lvbiAqc2Vz
c2lvbiwKKwkJCQkJCSAgR0Vycm9yICoqZXJyb3IpOworCitXZWJLaXRTb3VwUmVxdWVzdCAqd2Vi
a2l0X3NvdXBfcmVxdWVzdGVyX3JlcXVlc3RfdXJpIChXZWJLaXRTb3VwUmVxdWVzdGVyICpyZXF1
ZXN0ZXIsCisJCQkJCQkgICAgICBTb3VwVVJJICp1cmksCisJCQkJCQkgICAgICBTb3VwU2Vzc2lv
biAqc2Vzc2lvbiwKKwkJCQkJCSAgICAgIEdFcnJvciAqKmVycm9yKTsKKwordm9pZCB3ZWJraXRf
c291cF9yZXF1ZXN0ZXJfYWRkX3Byb3RvY29sIChXZWJLaXRTb3VwUmVxdWVzdGVyICpyZXF1ZXN0
ZXIsCisJCQkJCSBjb25zdCBjaGFyICAqc2NoZW1lLAorCQkJCQkgR1R5cGUgcmVxdWVzdF90eXBl
KTsKKwordm9pZCB3ZWJraXRfc291cF9yZXF1ZXN0ZXJfcmVtb3ZlX3Byb3RvY29sIChXZWJLaXRT
b3VwUmVxdWVzdGVyICpyZXF1ZXN0ZXIsCisJCQkJCSAgICBjb25zdCBjaGFyICAqc2NoZW1lKTsK
KworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdFQktJVF9TT1VQX1JFUVVFU1RFUl9IICovCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291
cC1jYWNoZS1wcml2YXRlLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9jYWNoZS93
ZWJraXQvc291cC1jYWNoZS1wcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uOGFmOGRlMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLXByaXZhdGUuaApAQCAtMCwwICsxLDQyIEBA
CisvKiAtKi0gTW9kZTogQzsgdGFiLXdpZHRoOiA4OyBpbmRlbnQtdGFicy1tb2RlOiB0OyBjLWJh
c2ljLW9mZnNldDogOCAtKi0gKi8KKy8qCisgKiBzb3VwLWNhY2hlLXByaXZhdGUuaDoKKyAqCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhLCBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV0VCS0lUX1NPVVBfQ0FD
SEVfUFJJVkFURV9ICisjZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX1BSSVZBVEVfSCAxCisKKyNp
bmNsdWRlICJzb3VwLWNhY2hlLmgiCisjaW5jbHVkZSA8bGlic291cC9zb3VwLW1lc3NhZ2UuaD4K
KworR19CRUdJTl9ERUNMUworCitXZWJLaXRTb3VwQ2FjaGVSZXNwb25zZSB3ZWJraXRfc291cF9j
YWNoZV9oYXNfcmVzcG9uc2UgKFdlYktpdFNvdXBDYWNoZSAgICpjYWNoZSwKKwkJCQkJCQlTb3Vw
TWVzc2FnZSAqbXNnKTsKK0dJbnB1dFN0cmVhbSAqd2Via2l0X3NvdXBfY2FjaGVfc2VuZF9yZXNw
b25zZSAoV2ViS2l0U291cENhY2hlICAgKmNhY2hlLAorCQkJCQkgICAgICAgU291cE1lc3NhZ2Ug
Km1zZyk7CitXZWJLaXRTb3VwQ2FjaGVhYmlsaXR5ICB3ZWJraXRfc291cF9jYWNoZV9nZXRfY2Fj
aGVhYmlsaXR5IChXZWJLaXRTb3VwQ2FjaGUgICAqY2FjaGUsCisJCQkJCQkJICAgIFNvdXBNZXNz
YWdlICptc2cpOworU291cE1lc3NhZ2UgKndlYmtpdF9zb3VwX2NhY2hlX2dlbmVyYXRlX2NvbmRp
dGlvbmFsX3JlcXVlc3QgKFdlYktpdFNvdXBDYWNoZSAgICpjYWNoZSwKKwkJCQkJCQkgICAgIFNv
dXBNZXNzYWdlICpvcmlnaW5hbCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBXRUJLSVRf
U09VUF9DQUNIRV9QUklWQVRFX0ggKi8KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLmMgYi9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmE5NDQ2ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9jYWNoZS93ZWJraXQvc291cC1jYWNoZS5jCkBAIC0wLDAgKzEsMTY1
MyBAQAorLyogLSotIE1vZGU6IEM7IHRhYi13aWR0aDogODsgaW5kZW50LXRhYnMtbW9kZTogdDsg
Yy1iYXNpYy1vZmZzZXQ6IDggLSotICovCisvKgorICogc291cC1jYWNoZS5jCisgKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5LCAyMDEwIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKy8qIFRPRE86CisgKiAtIE5lZWQgdG8g
aG9vayB0aGUgZmVhdHVyZSBpbiB0aGUgc3luYyBTb3VwU2Vzc2lvbi4KKyAqIC0gTmVlZCBtb3Jl
IHRlc3RzLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSA8Y29uZmlnLmg+
CisjZW5kaWYKKworI2luY2x1ZGUgInNvdXAtY2FjaGUuaCIKKyNpbmNsdWRlICJzb3VwLWNhY2hl
LXByaXZhdGUuaCIKKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDxnaW8vZ2lv
Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKK3N0YXRpYyBTb3VwU2Vzc2lvbkZlYXR1cmVJbnRl
cmZhY2UgKndlYmtpdF9zb3VwX2NhY2hlX2RlZmF1bHRfZmVhdHVyZV9pbnRlcmZhY2U7CitzdGF0
aWMgdm9pZCB3ZWJraXRfc291cF9jYWNoZV9zZXNzaW9uX2ZlYXR1cmVfaW5pdCAoU291cFNlc3Np
b25GZWF0dXJlSW50ZXJmYWNlICpmZWF0dXJlX2ludGVyZmFjZSwgZ3BvaW50ZXIgaW50ZXJmYWNl
X2RhdGEpOworCisjZGVmaW5lIERFRkFVTFRfTUFYX1NJWkUgNTAgKiAxMDI0ICogMTAyNAorI2Rl
ZmluZSBNQVhfRU5UUllfREFUQV9QRVJDRU5UQUdFIDEwIC8qIFBlcmNlbnRhZ2Ugb2YgdGhlIHRv
dGFsIHNpemUKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBjYWNoZSB0
aGF0IGNhbiBiZQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbGVkIGJ5IGEg
c2luZ2xlIGVudHJ5ICovCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRTb3VwQ2FjaGVFbnRyeSB7
CisJY2hhciAqa2V5OworCWNoYXIgKmZpbGVuYW1lOworCWd1aW50IGZyZXNobmVzc19saWZldGlt
ZTsKKwlnYm9vbGVhbiBtdXN0X3JldmFsaWRhdGU7CisJR1N0cmluZyAqZGF0YTsKKwlnc2l6ZSBw
b3M7CisJZ3NpemUgbGVuZ3RoOworCXRpbWVfdCBjb3JyZWN0ZWRfaW5pdGlhbF9hZ2U7CisJdGlt
ZV90IHJlc3BvbnNlX3RpbWU7CisJZ2Jvb2xlYW4gd3JpdGluZzsKKwlnYm9vbGVhbiBkaXJ0eTsK
KwlnYm9vbGVhbiBnb3RfYm9keTsKKwlnYm9vbGVhbiBiZWluZ192YWxpZGF0ZWQ7CisJU291cE1l
c3NhZ2VIZWFkZXJzICpoZWFkZXJzOworCUdPdXRwdXRTdHJlYW0gKnN0cmVhbTsKKwlHRXJyb3Ig
KmVycm9yOworCWd1aW50IGhpdHM7CisJR0NhbmNlbGxhYmxlICpjYW5jZWxsYWJsZTsKK30gV2Vi
S2l0U291cENhY2hlRW50cnk7CisKK3N0cnVjdCBfV2ViS2l0U291cENhY2hlUHJpdmF0ZSB7CisJ
Y2hhciAqY2FjaGVfZGlyOworCUdIYXNoVGFibGUgKmNhY2hlOworCWd1aW50IG5fcGVuZGluZzsK
KwlTb3VwU2Vzc2lvbiAqc2Vzc2lvbjsKKwlXZWJLaXRTb3VwQ2FjaGVUeXBlIGNhY2hlX3R5cGU7
CisJZ3VpbnQgc2l6ZTsKKwlndWludCBtYXhfc2l6ZTsKKwlndWludCBtYXhfZW50cnlfZGF0YV9z
aXplOyAvKiBDb21wdXRlZCB2YWx1ZS4gSGVyZSBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyAqLwor
CUdMaXN0ICpscnVfc3RhcnQ7Cit9OworCit0eXBlZGVmIHN0cnVjdCB7CisJV2ViS2l0U291cENh
Y2hlICpjYWNoZTsKKwlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnk7CisJU291cE1lc3NhZ2Ug
Km1zZzsKKwlndWxvbmcgZ290X2NodW5rX2hhbmRsZXI7CisJZ3Vsb25nIGdvdF9ib2R5X2hhbmRs
ZXI7CisJZ3Vsb25nIHJlc3RhcnRlZF9oYW5kbGVyOworfSBXZWJLaXRTb3VwQ2FjaGVXcml0aW5n
Rml4dHVyZTsKKworZW51bSB7CisJUFJPUF8wLAorCVBST1BfQ0FDSEVfRElSLAorCVBST1BfQ0FD
SEVfVFlQRQorfTsKKworI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9HRVRfUFJJVkFURShvKSAo
R19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFICgobyksIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUs
IFdlYktpdFNvdXBDYWNoZVByaXZhdGUpKQorCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERSAoV2Vi
S2l0U291cENhY2hlLCB3ZWJraXRfc291cF9jYWNoZSwgR19UWVBFX09CSkVDVCwKKwkJCSBHX0lN
UExFTUVOVF9JTlRFUkZBQ0UgKFNPVVBfVFlQRV9TRVNTSU9OX0ZFQVRVUkUsCisJCQkJCQl3ZWJr
aXRfc291cF9jYWNoZV9zZXNzaW9uX2ZlYXR1cmVfaW5pdCkpCisKK3N0YXRpYyBnYm9vbGVhbiB3
ZWJraXRfc291cF9jYWNoZV9lbnRyeV9yZW1vdmUgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsIFdl
YktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSk7CitzdGF0aWMgdm9pZCBtYWtlX3Jvb21fZm9yX25l
d19lbnRyeSAoV2ViS2l0U291cENhY2hlICpjYWNoZSwgZ3VpbnQgbGVuZ3RoX3RvX2FkZCk7Citz
dGF0aWMgZ2Jvb2xlYW4gY2FjaGVfYWNjZXB0c19lbnRyaWVzX29mX3NpemUgKFdlYktpdFNvdXBD
YWNoZSAqY2FjaGUsIGd1aW50IGxlbmd0aF90b19hZGQpOworCitzdGF0aWMgV2ViS2l0U291cENh
Y2hlYWJpbGl0eQorZ2V0X2NhY2hlYWJpbGl0eSAoV2ViS2l0U291cENhY2hlICpjYWNoZSwgU291
cE1lc3NhZ2UgKm1zZykKK3sKKwlXZWJLaXRTb3VwQ2FjaGVhYmlsaXR5IGNhY2hlYWJpbGl0eTsK
Kwljb25zdCBjaGFyICpjYWNoZV9jb250cm9sOworCisJLyogMS4gVGhlIHJlcXVlc3QgbWV0aG9k
IG11c3QgYmUgY2FjaGVhYmxlICovCisJaWYgKG1zZy0+bWV0aG9kID09IFNPVVBfTUVUSE9EX0dF
VCkKKwkJY2FjaGVhYmlsaXR5ID0gV0VCS0lUX1NPVVBfQ0FDSEVfQ0FDSEVBQkxFOworCWVsc2Ug
aWYgKG1zZy0+bWV0aG9kID09IFNPVVBfTUVUSE9EX0hFQUQgfHwKKwkJIG1zZy0+bWV0aG9kID09
IFNPVVBfTUVUSE9EX1RSQUNFIHx8CisJCSBtc2ctPm1ldGhvZCA9PSBTT1VQX01FVEhPRF9DT05O
RUNUKQorCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEU7CisJZWxzZQorCQly
ZXR1cm4gKFdFQktJVF9TT1VQX0NBQ0hFX1VOQ0FDSEVBQkxFIHwgV0VCS0lUX1NPVVBfQ0FDSEVf
SU5WQUxJREFURVMpOworCisJY2FjaGVfY29udHJvbCA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dl
dCAobXNnLT5yZXNwb25zZV9oZWFkZXJzLCAiQ2FjaGUtQ29udHJvbCIpOworCWlmIChjYWNoZV9j
b250cm9sKSB7CisJCUdIYXNoVGFibGUgKmhhc2g7CisJCVdlYktpdFNvdXBDYWNoZVByaXZhdGUg
KnByaXYgPSBXRUJLSVRfU09VUF9DQUNIRV9HRVRfUFJJVkFURSAoY2FjaGUpOworCisJCWhhc2gg
PSBzb3VwX2hlYWRlcl9wYXJzZV9wYXJhbV9saXN0IChjYWNoZV9jb250cm9sKTsKKworCQkvKiBT
aGFyZWQgY2FjaGVzIE1VU1QgTk9UIHN0b3JlIHByaXZhdGUgcmVzb3VyY2VzICovCisJCWlmIChw
cml2LT5jYWNoZV90eXBlID09IFdFQktJVF9TT1VQX0NBQ0hFX1NIQVJFRCkgeworCQkJaWYgKGdf
aGFzaF90YWJsZV9sb29rdXBfZXh0ZW5kZWQgKGhhc2gsICJwcml2YXRlIiwgTlVMTCwgTlVMTCkp
IHsKKwkJCQlzb3VwX2hlYWRlcl9mcmVlX3BhcmFtX2xpc3QgKGhhc2gpOworCQkJCXJldHVybiBX
RUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRTsKKwkJCX0KKwkJfQorCisJCS8qIDIuIFRoZSAn
bm8tc3RvcmUnIGNhY2hlIGRpcmVjdGl2ZSBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlCisJCSAqIGhl
YWRlcnMKKwkJICovCisJCWlmIChnX2hhc2hfdGFibGVfbG9va3VwX2V4dGVuZGVkIChoYXNoLCAi
bm8tc3RvcmUiLCBOVUxMLCBOVUxMKSkgeworCQkJc291cF9oZWFkZXJfZnJlZV9wYXJhbV9saXN0
IChoYXNoKTsKKwkJCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRTsKKwkJfQor
CisJCS8qIFRoaXMgZG9lcyBub3QgYXBwZWFyIGluIHNlY3Rpb24gMi4xLCBidXQgSSB0aGluayBp
dCBtYWtlcworCQkgKiBzZW5zZSB0byBjaGVjayBpdCB0b28/CisJCSAqLworCQlpZiAoZ19oYXNo
X3RhYmxlX2xvb2t1cF9leHRlbmRlZCAoaGFzaCwgIm5vLWNhY2hlIiwgTlVMTCwgTlVMTCkpIHsK
KwkJCXNvdXBfaGVhZGVyX2ZyZWVfcGFyYW1fbGlzdCAoaGFzaCk7CisJCQlyZXR1cm4gV0VCS0lU
X1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEU7CisJCX0KKwl9CisKKwlzd2l0Y2ggKG1zZy0+c3RhdHVz
X2NvZGUpIHsKKwljYXNlIFNPVVBfU1RBVFVTX1BBUlRJQUxfQ09OVEVOVDoKKwkJLyogV2UgZG9u
J3QgY2FjaGUgcGFydGlhbCByZXNwb25zZXMsIGJ1dCB0aGV5IG9ubHkKKwkJICogaW52YWxpZGF0
ZSBjYWNoZWQgZnVsbCByZXNwb25zZXMgaWYgdGhlIGhlYWRlcnMKKwkJICogZG9uJ3QgbWF0Y2gu
CisJCSAqLworCQljYWNoZWFiaWxpdHkgPSBXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRTsK
KwkJYnJlYWs7CisKKwljYXNlIFNPVVBfU1RBVFVTX05PVF9NT0RJRklFRDoKKwkJLyogQSAzMDQg
cmVzcG9uc2UgdmFsaWRhdGVzIGFuIGV4aXN0aW5nIGNhY2hlIGVudHJ5ICovCisJCWNhY2hlYWJp
bGl0eSA9IFdFQktJVF9TT1VQX0NBQ0hFX1ZBTElEQVRFUzsKKwkJYnJlYWs7CisKKwljYXNlIFNP
VVBfU1RBVFVTX01VTFRJUExFX0NIT0lDRVM6CisJY2FzZSBTT1VQX1NUQVRVU19NT1ZFRF9QRVJN
QU5FTlRMWToKKwljYXNlIFNPVVBfU1RBVFVTX0dPTkU6CisJCS8qIEZJWE1FOiBjYWNoZWFibGUg
dW5sZXNzIGluZGljYXRlZCBvdGhlcndpc2UgKi8KKwkJY2FjaGVhYmlsaXR5ID0gV0VCS0lUX1NP
VVBfQ0FDSEVfVU5DQUNIRUFCTEU7CisJCWJyZWFrOworCisJY2FzZSBTT1VQX1NUQVRVU19GT1VO
RDoKKwljYXNlIFNPVVBfU1RBVFVTX1RFTVBPUkFSWV9SRURJUkVDVDoKKwkJLyogRklYTUU6IGNh
Y2hlYWJsZSBpZiBleHBsaWNpdGx5IGluZGljYXRlZCAqLworCQljYWNoZWFiaWxpdHkgPSBXRUJL
SVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRTsKKwkJYnJlYWs7CisKKwljYXNlIFNPVVBfU1RBVFVT
X1NFRV9PVEhFUjoKKwljYXNlIFNPVVBfU1RBVFVTX0ZPUkJJRERFTjoKKwljYXNlIFNPVVBfU1RB
VFVTX05PVF9GT1VORDoKKwljYXNlIFNPVVBfU1RBVFVTX01FVEhPRF9OT1RfQUxMT1dFRDoKKwkJ
cmV0dXJuIChXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRSB8IFdFQktJVF9TT1VQX0NBQ0hF
X0lOVkFMSURBVEVTKTsKKworCWRlZmF1bHQ6CisJCS8qIEFueSA1eHggc3RhdHVzIG9yIGFueSA0
eHggc3RhdHVzIG5vdCBoYW5kbGVkIGFib3ZlCisJCSAqIGlzIHVuY2FjaGVhYmxlIGJ1dCBkb2Vz
bid0IGJyZWFrIHRoZSBjYWNoZS4KKwkJICovCisJCWlmICgobXNnLT5zdGF0dXNfY29kZSA+PSBT
T1VQX1NUQVRVU19CQURfUkVRVUVTVCAmJgorCQkgICAgIG1zZy0+c3RhdHVzX2NvZGUgPD0gU09V
UF9TVEFUVVNfRkFJTEVEX0RFUEVOREVOQ1kpIHx8CisJCSAgICBtc2ctPnN0YXR1c19jb2RlID49
IFNPVVBfU1RBVFVTX0lOVEVSTkFMX1NFUlZFUl9FUlJPUikKKwkJCXJldHVybiBXRUJLSVRfU09V
UF9DQUNIRV9VTkNBQ0hFQUJMRTsKKworCQkvKiBBbiB1bnJlY29nbml6ZWQgMnh4LCAzeHgsIG9y
IDR4eCByZXNwb25zZSBicmVha3MKKwkJICogdGhlIGNhY2hlLgorCQkgKi8KKwkJaWYgKChtc2ct
PnN0YXR1c19jb2RlID4gU09VUF9TVEFUVVNfUEFSVElBTF9DT05URU5UICYmCisJCSAgICAgbXNn
LT5zdGF0dXNfY29kZSA8IFNPVVBfU1RBVFVTX01VTFRJUExFX0NIT0lDRVMpIHx8CisJCSAgICAo
bXNnLT5zdGF0dXNfY29kZSA+IFNPVVBfU1RBVFVTX1RFTVBPUkFSWV9SRURJUkVDVCAmJgorCQkg
ICAgIG1zZy0+c3RhdHVzX2NvZGUgPCBTT1VQX1NUQVRVU19JTlRFUk5BTF9TRVJWRVJfRVJST1Ip
KQorCQkJcmV0dXJuIChXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRSB8IFdFQktJVF9TT1VQ
X0NBQ0hFX0lOVkFMSURBVEVTKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGNhY2hlYWJpbGl0
eTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUgKFdlYktp
dFNvdXBDYWNoZUVudHJ5ICplbnRyeSwgZ2Jvb2xlYW4gcHVyZ2UpCit7CisJaWYgKHB1cmdlKSB7
CisJCUdGaWxlICpmaWxlID0gZ19maWxlX25ld19mb3JfcGF0aCAoZW50cnktPmZpbGVuYW1lKTsK
KwkJZ19maWxlX2RlbGV0ZSAoZmlsZSwgTlVMTCwgTlVMTCk7CisJCWdfb2JqZWN0X3VucmVmIChm
aWxlKTsKKwl9CisKKwlnX2ZyZWUgKGVudHJ5LT5maWxlbmFtZSk7CisJZW50cnktPmZpbGVuYW1l
ID0gTlVMTDsKKwlnX2ZyZWUgKGVudHJ5LT5rZXkpOworCWVudHJ5LT5rZXkgPSBOVUxMOworCisJ
aWYgKGVudHJ5LT5oZWFkZXJzKSB7CisJCXNvdXBfbWVzc2FnZV9oZWFkZXJzX2ZyZWUgKGVudHJ5
LT5oZWFkZXJzKTsKKwkJZW50cnktPmhlYWRlcnMgPSBOVUxMOworCX0KKworCWlmIChlbnRyeS0+
ZGF0YSkgeworCQlnX3N0cmluZ19mcmVlIChlbnRyeS0+ZGF0YSwgVFJVRSk7CisJCWVudHJ5LT5k
YXRhID0gTlVMTDsKKwl9CisJaWYgKGVudHJ5LT5lcnJvcikgeworCQlnX2Vycm9yX2ZyZWUgKGVu
dHJ5LT5lcnJvcik7CisJCWVudHJ5LT5lcnJvciA9IE5VTEw7CisJfQorCWlmIChlbnRyeS0+Y2Fu
Y2VsbGFibGUpIHsKKwkJZ19vYmplY3RfdW5yZWYgKGVudHJ5LT5jYW5jZWxsYWJsZSk7CisJCWVu
dHJ5LT5jYW5jZWxsYWJsZSA9IE5VTEw7CisJfQorCisJZ19zbGljZV9mcmVlIChXZWJLaXRTb3Vw
Q2FjaGVFbnRyeSwgZW50cnkpOworfQorCitzdGF0aWMgdm9pZAorY29weV9oZWFkZXJzIChjb25z
dCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSwgU291cE1lc3NhZ2VIZWFkZXJzICpoZWFk
ZXJzKQoreworCXNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZCAoaGVhZGVycywgbmFtZSwgdmFs
dWUpOworfQorCitzdGF0aWMgdm9pZAordXBkYXRlX2hlYWRlcnMgKGNvbnN0IGNoYXIgKm5hbWUs
IGNvbnN0IGNoYXIgKnZhbHVlLCBTb3VwTWVzc2FnZUhlYWRlcnMgKmhlYWRlcnMpCit7CisJaWYg
KHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldCAoaGVhZGVycywgbmFtZSkpCisJCXNvdXBfbWVzc2Fn
ZV9oZWFkZXJzX3JlcGxhY2UgKGhlYWRlcnMsIG5hbWUsIHZhbHVlKTsKKwllbHNlCisJCXNvdXBf
bWVzc2FnZV9oZWFkZXJzX2FwcGVuZCAoaGVhZGVycywgbmFtZSwgdmFsdWUpOworfQorCitzdGF0
aWMgZ3VpbnQKK3dlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2dldF9jdXJyZW50X2FnZSAoV2ViS2l0
U291cENhY2hlRW50cnkgKmVudHJ5KQoreworCXRpbWVfdCBub3cgPSB0aW1lIChOVUxMKTsKKwl0
aW1lX3QgcmVzaWRlbnRfdGltZTsKKworCXJlc2lkZW50X3RpbWUgPSBub3cgLSBlbnRyeS0+cmVz
cG9uc2VfdGltZTsKKwlyZXR1cm4gZW50cnktPmNvcnJlY3RlZF9pbml0aWFsX2FnZSArIHJlc2lk
ZW50X3RpbWU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgord2Via2l0X3NvdXBfY2FjaGVfZW50cnlf
aXNfZnJlc2hfZW5vdWdoIChXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnksIGludCBtaW5fZnJl
c2gpCit7CisJdW5zaWduZWQgbGltaXQgPSAobWluX2ZyZXNoID09IC0xKSA/IHdlYmtpdF9zb3Vw
X2NhY2hlX2VudHJ5X2dldF9jdXJyZW50X2FnZSAoZW50cnkpIDogbWluX2ZyZXNoOworCXJldHVy
biBlbnRyeS0+ZnJlc2huZXNzX2xpZmV0aW1lID4gbGltaXQ7Cit9CisKK3N0YXRpYyBjaGFyICoK
K3NvdXBfbWVzc2FnZV9nZXRfY2FjaGVfa2V5IChTb3VwTWVzc2FnZSAqbXNnKQoreworCVNvdXBV
UkkgKnVyaSA9IHNvdXBfbWVzc2FnZV9nZXRfdXJpIChtc2cpOworCXJldHVybiBzb3VwX3VyaV90
b19zdHJpbmcgKHVyaSwgRkFMU0UpOworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfY2Fj
aGVfZW50cnlfc2V0X2ZyZXNobmVzcyAoV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5LCBTb3Vw
TWVzc2FnZSAqbXNnLCBXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKQoreworCWNvbnN0IGNoYXIgKmNh
Y2hlX2NvbnRyb2w7CisJY29uc3QgY2hhciAqZXhwaXJlcywgKmRhdGUsICpsYXN0X21vZGlmaWVk
OworCUdIYXNoVGFibGUgKmhhc2g7CisKKwloYXNoID0gTlVMTDsKKworCWNhY2hlX2NvbnRyb2wg
PSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKGVudHJ5LT5oZWFkZXJzLCAiQ2FjaGUtQ29udHJv
bCIpOworCWlmIChjYWNoZV9jb250cm9sKSB7CisJCWNvbnN0IGNoYXIgKm1heF9hZ2UsICpzX21h
eGFnZTsKKwkJZ2ludDY0IGZyZXNobmVzc19saWZldGltZSA9IDA7CisJCVdlYktpdFNvdXBDYWNo
ZVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9DQUNIRV9HRVRfUFJJVkFURSAoY2FjaGUpOwor
CisJCWhhc2ggPSBzb3VwX2hlYWRlcl9wYXJzZV9wYXJhbV9saXN0IChjYWNoZV9jb250cm9sKTsK
KworCQkvKiBTaG91bGQgd2UgcmUtdmFsaWRhdGUgdGhlIGVudHJ5IHdoZW4gaXQgZ29lcyBzdGFs
ZSAqLworCQllbnRyeS0+bXVzdF9yZXZhbGlkYXRlID0gKGdib29sZWFuKWdfaGFzaF90YWJsZV9s
b29rdXAgKGhhc2gsICJtdXN0LXJldmFsaWRhdGUiKTsKKworCQkvKiBTZWN0aW9uIDIuMy4xICov
CisJCWlmIChwcml2LT5jYWNoZV90eXBlID09IFdFQktJVF9TT1VQX0NBQ0hFX1NIQVJFRCkgewor
CQkJc19tYXhhZ2UgPSBnX2hhc2hfdGFibGVfbG9va3VwIChoYXNoLCAicy1tYXhhZ2UiKTsKKwkJ
CWlmIChzX21heGFnZSkgeworCQkJCWZyZXNobmVzc19saWZldGltZSA9IGdfYXNjaWlfc3RydG9s
bCAoc19tYXhhZ2UsIE5VTEwsIDEwKTsKKwkJCQlpZiAoZnJlc2huZXNzX2xpZmV0aW1lKSB7CisJ
CQkJCS8qIEltcGxpZXMgcHJveHktcmV2YWxpZGF0ZS4gVE9ETzogaXMgaXQgdHJ1ZT8gKi8KKwkJ
CQkJZW50cnktPm11c3RfcmV2YWxpZGF0ZSA9IFRSVUU7CisJCQkJCXNvdXBfaGVhZGVyX2ZyZWVf
cGFyYW1fbGlzdCAoaGFzaCk7CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQl9CisJCX0KKworCQkv
KiBJZiAnbWF4LWFnZScgY2FjaGUgZGlyZWN0aXZlIGlzIHByZXNlbnQsIHVzZSB0aGF0ICovCisJ
CW1heF9hZ2UgPSBnX2hhc2hfdGFibGVfbG9va3VwIChoYXNoLCAibWF4LWFnZSIpOworCQlpZiAo
bWF4X2FnZSkKKwkJCWZyZXNobmVzc19saWZldGltZSA9IGdfYXNjaWlfc3RydG9sbCAobWF4X2Fn
ZSwgTlVMTCwgMTApOworCisJCWlmIChmcmVzaG5lc3NfbGlmZXRpbWUpIHsKKwkJCWVudHJ5LT5m
cmVzaG5lc3NfbGlmZXRpbWUgPSAoZ3VpbnQpTUlOIChmcmVzaG5lc3NfbGlmZXRpbWUsIEdfTUFY
VUlOVDMyKTsKKwkJCXNvdXBfaGVhZGVyX2ZyZWVfcGFyYW1fbGlzdCAoaGFzaCk7CisJCQlyZXR1
cm47CisJCX0KKwl9CisKKwlpZiAoaGFzaCAhPSBOVUxMKQorCQlzb3VwX2hlYWRlcl9mcmVlX3Bh
cmFtX2xpc3QgKGhhc2gpOworCisJLyogSWYgdGhlICdFeHBpcmVzJyByZXNwb25zZSBoZWFkZXIg
aXMgcHJlc2VudCwgdXNlIGl0cyB2YWx1ZQorCSAqIG1pbnVzIHRoZSB2YWx1ZSBvZiB0aGUgJ0Rh
dGUnIHJlc3BvbnNlIGhlYWRlcgorCSAqLworCWV4cGlyZXMgPSBzb3VwX21lc3NhZ2VfaGVhZGVy
c19nZXQgKGVudHJ5LT5oZWFkZXJzLCAiRXhwaXJlcyIpOworCWRhdGUgPSBzb3VwX21lc3NhZ2Vf
aGVhZGVyc19nZXQgKGVudHJ5LT5oZWFkZXJzLCAiRGF0ZSIpOworCWlmIChleHBpcmVzICYmIGRh
dGUpIHsKKwkJU291cERhdGUgKmV4cGlyZXNfZCwgKmRhdGVfZDsKKwkJdGltZV90IGV4cGlyZXNf
dCwgZGF0ZV90OworCisJCWV4cGlyZXNfZCA9IHNvdXBfZGF0ZV9uZXdfZnJvbV9zdHJpbmcgKGV4
cGlyZXMpOworCQlpZiAoZXhwaXJlc19kKSB7CisJCQlkYXRlX2QgPSBzb3VwX2RhdGVfbmV3X2Zy
b21fc3RyaW5nIChkYXRlKTsKKworCQkJZXhwaXJlc190ID0gc291cF9kYXRlX3RvX3RpbWVfdCAo
ZXhwaXJlc19kKTsKKwkJCWRhdGVfdCA9IHNvdXBfZGF0ZV90b190aW1lX3QgKGRhdGVfZCk7CisK
KwkJCXNvdXBfZGF0ZV9mcmVlIChleHBpcmVzX2QpOworCQkJc291cF9kYXRlX2ZyZWUgKGRhdGVf
ZCk7CisKKwkJCWlmIChleHBpcmVzX3QgJiYgZGF0ZV90KSB7CisJCQkJZW50cnktPmZyZXNobmVz
c19saWZldGltZSA9IChndWludClNQVggKGV4cGlyZXNfdCAtIGRhdGVfdCwgMCk7CisJCQkJcmV0
dXJuOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogSWYgRXhwaXJlcyBpcyBub3QgYSB2YWxpZCBk
YXRlIHdlIHNob3VsZAorCQkJICAgdHJlYXQgaXQgYXMgYWxyZWFkeSBleHBpcmVkLCBzZWUgc2Vj
dGlvbgorCQkJICAgMy4zICovCisJCQllbnRyeS0+ZnJlc2huZXNzX2xpZmV0aW1lID0gMDsKKwkJ
CXJldHVybjsKKwkJfQorCX0KKworCS8qIE90aGVyd2lzZSBhbiBoZXVyaXN0aWMgbWF5IGJlIHVz
ZWQgKi8KKworCS8qIEhldXJpc3RpY3MgTVVTVCBOT1QgYmUgdXNlZCB3aXRoIHRoZXNlIHN0YXR1
cyBjb2RlcworCSAgIChzZWN0aW9uIDIuMy4xLjEpICovCisJaWYgKG1zZy0+c3RhdHVzX2NvZGUg
IT0gU09VUF9TVEFUVVNfT0sgJiYKKwkgICAgbXNnLT5zdGF0dXNfY29kZSAhPSBTT1VQX1NUQVRV
U19OT05fQVVUSE9SSVRBVElWRSAmJgorCSAgICBtc2ctPnN0YXR1c19jb2RlICE9IFNPVVBfU1RB
VFVTX1BBUlRJQUxfQ09OVEVOVCAmJgorCSAgICBtc2ctPnN0YXR1c19jb2RlICE9IFNPVVBfU1RB
VFVTX01VTFRJUExFX0NIT0lDRVMgJiYKKwkgICAgbXNnLT5zdGF0dXNfY29kZSAhPSBTT1VQX1NU
QVRVU19NT1ZFRF9QRVJNQU5FTlRMWSAmJgorCSAgICBtc2ctPnN0YXR1c19jb2RlICE9IFNPVVBf
U1RBVFVTX0dPTkUpCisJCWdvdG8gZXhwaXJlOworCisJLyogVE9ETzogYXR0YWNoIHdhcm5pbmcg
MTEzIGlmIHJlc3BvbnNlJ3MgY3VycmVudF9hZ2UgaXMgbW9yZQorCSAgIHRoYW4gMjRoIChzZWN0
aW9uIDIuMy4xLjEpIHdoZW4gdXNpbmcgaGV1cmlzdGljcyAqLworCisJLyogTGFzdC1Nb2RpZmll
ZCBiYXNlZCBoZXVyaXN0aWMgKi8KKwlsYXN0X21vZGlmaWVkID0gc291cF9tZXNzYWdlX2hlYWRl
cnNfZ2V0IChlbnRyeS0+aGVhZGVycywgIkxhc3QtTW9kaWZpZWQiKTsKKwlpZiAobGFzdF9tb2Rp
ZmllZCkgeworCQlTb3VwRGF0ZSAqc291cF9kYXRlOworCQl0aW1lX3Qgbm93LCBsYXN0X21vZGlm
aWVkX3Q7CisKKwkJc291cF9kYXRlID0gc291cF9kYXRlX25ld19mcm9tX3N0cmluZyAobGFzdF9t
b2RpZmllZCk7CisJCWxhc3RfbW9kaWZpZWRfdCA9IHNvdXBfZGF0ZV90b190aW1lX3QgKHNvdXBf
ZGF0ZSk7CisJCW5vdyA9IHRpbWUgKE5VTEwpOworCisjZGVmaW5lIEhFVVJJU1RJQ19GQUNUT1Ig
MC4xIC8qIEZyb20gU2VjdGlvbiAyLjMuMS4xICovCisKKwkJZW50cnktPmZyZXNobmVzc19saWZl
dGltZSA9IE1BWCAoMCwgKG5vdyAtIGxhc3RfbW9kaWZpZWRfdCkgKiBIRVVSSVNUSUNfRkFDVE9S
KTsKKwkJc291cF9kYXRlX2ZyZWUgKHNvdXBfZGF0ZSk7CisJfQorCisJcmV0dXJuOworCisgZXhw
aXJlOgorCS8qIElmIGFsbCBlbHNlIGZhaWxzLCBtYWtlIHRoZSBlbnRyeSBleHBpcmUgaW1tZWRp
YXRlbHkgKi8KKwllbnRyeS0+ZnJlc2huZXNzX2xpZmV0aW1lID0gMDsKK30KKworc3RhdGljIFdl
YktpdFNvdXBDYWNoZUVudHJ5ICoKK3dlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X25ldyAoV2ViS2l0
U291cENhY2hlICpjYWNoZSwgU291cE1lc3NhZ2UgKm1zZywgdGltZV90IHJlcXVlc3RfdGltZSwg
dGltZV90IHJlc3BvbnNlX3RpbWUpCit7CisJV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5Owor
CVNvdXBNZXNzYWdlSGVhZGVycyAqaGVhZGVyczsKKwljb25zdCBjaGFyICpkYXRlOworCWNoYXIg
Km1kNTsKKworCWVudHJ5ID0gZ19zbGljZV9uZXcwIChXZWJLaXRTb3VwQ2FjaGVFbnRyeSk7CisJ
ZW50cnktPmRpcnR5ID0gRkFMU0U7CisJZW50cnktPndyaXRpbmcgPSBGQUxTRTsKKwllbnRyeS0+
Z290X2JvZHkgPSBGQUxTRTsKKwllbnRyeS0+YmVpbmdfdmFsaWRhdGVkID0gRkFMU0U7CisJZW50
cnktPmRhdGEgPSBnX3N0cmluZ19uZXcgKE5VTEwpOworCWVudHJ5LT5wb3MgPSAwOworCWVudHJ5
LT5lcnJvciA9IE5VTEw7CisKKwkvKiBrZXkgJiBmaWxlbmFtZSAqLworCWVudHJ5LT5rZXkgPSBz
b3VwX21lc3NhZ2VfZ2V0X2NhY2hlX2tleSAobXNnKTsKKwltZDUgPSBnX2NvbXB1dGVfY2hlY2tz
dW1fZm9yX3N0cmluZyAoR19DSEVDS1NVTV9NRDUsIGVudHJ5LT5rZXksIC0xKTsKKwllbnRyeS0+
ZmlsZW5hbWUgPSBnX2J1aWxkX2ZpbGVuYW1lIChjYWNoZS0+cHJpdi0+Y2FjaGVfZGlyLCBtZDUs
IE5VTEwpOworCWdfZnJlZSAobWQ1KTsKKworCS8qIEhlYWRlcnMgKi8KKwloZWFkZXJzID0gc291
cF9tZXNzYWdlX2hlYWRlcnNfbmV3IChTT1VQX01FU1NBR0VfSEVBREVSU19SRVNQT05TRSk7CisJ
c291cF9tZXNzYWdlX2hlYWRlcnNfZm9yZWFjaCAobXNnLT5yZXNwb25zZV9oZWFkZXJzLAorCQkJ
CSAgICAgIChTb3VwTWVzc2FnZUhlYWRlcnNGb3JlYWNoRnVuYyljb3B5X2hlYWRlcnMsCisJCQkJ
ICAgICAgaGVhZGVycyk7CisJZW50cnktPmhlYWRlcnMgPSBoZWFkZXJzOworCisJLyogTFJVIGxp
c3QgKi8KKwllbnRyeS0+aGl0cyA9IDA7CisKKwkvKiBTZWN0aW9uIDIuMy4xLCBGcmVzaG5lc3Mg
TGlmZXRpbWUgKi8KKwl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9zZXRfZnJlc2huZXNzIChlbnRy
eSwgbXNnLCBjYWNoZSk7CisKKwkvKiBTZWN0aW9uIDIuMy4yLCBDYWxjdWxhdGluZyBBZ2UgKi8K
KwlkYXRlID0gc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0IChlbnRyeS0+aGVhZGVycywgIkRhdGUi
KTsKKworCWlmIChkYXRlKSB7CisJCVNvdXBEYXRlICpzb3VwX2RhdGU7CisJCWNvbnN0IGNoYXIg
KmFnZTsKKwkJdGltZV90IGRhdGVfdmFsdWUsIGFwcGFyZW50X2FnZSwgY29ycmVjdGVkX3JlY2Vp
dmVkX2FnZSwgcmVzcG9uc2VfZGVsYXksIGFnZV92YWx1ZSA9IDA7CisKKwkJc291cF9kYXRlID0g
c291cF9kYXRlX25ld19mcm9tX3N0cmluZyAoZGF0ZSk7CisJCWRhdGVfdmFsdWUgPSBzb3VwX2Rh
dGVfdG9fdGltZV90IChzb3VwX2RhdGUpOworCQlzb3VwX2RhdGVfZnJlZSAoc291cF9kYXRlKTsK
KworCQlhZ2UgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKGVudHJ5LT5oZWFkZXJzLCAiQWdl
Iik7CisJCWlmIChhZ2UpCisJCQlhZ2VfdmFsdWUgPSBnX2FzY2lpX3N0cnRvbGwgKGFnZSwgTlVM
TCwgMTApOworCisJCWVudHJ5LT5yZXNwb25zZV90aW1lID0gcmVzcG9uc2VfdGltZTsKKwkJYXBw
YXJlbnRfYWdlID0gTUFYICgwLCBlbnRyeS0+cmVzcG9uc2VfdGltZSAtIGRhdGVfdmFsdWUpOwor
CQljb3JyZWN0ZWRfcmVjZWl2ZWRfYWdlID0gTUFYIChhcHBhcmVudF9hZ2UsIGFnZV92YWx1ZSk7
CisJCXJlc3BvbnNlX2RlbGF5ID0gZW50cnktPnJlc3BvbnNlX3RpbWUgLSByZXF1ZXN0X3RpbWU7
CisJCWVudHJ5LT5jb3JyZWN0ZWRfaW5pdGlhbF9hZ2UgPSBjb3JyZWN0ZWRfcmVjZWl2ZWRfYWdl
ICsgcmVzcG9uc2VfZGVsYXk7CisJfSBlbHNlIHsKKwkJLyogSXMgdGhpcyBjb3JyZWN0ID8gKi8K
KwkJZW50cnktPmNvcnJlY3RlZF9pbml0aWFsX2FnZSA9IHRpbWUgKE5VTEwpOworCX0KKworCXJl
dHVybiBlbnRyeTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX2NhY2hlX3dyaXRpbmdf
Zml4dHVyZV9mcmVlIChXZWJLaXRTb3VwQ2FjaGVXcml0aW5nRml4dHVyZSAqZml4dHVyZSkKK3sK
KwkvKiBGcmVlIGZpeHR1cmUuIEFuZCBkaXNjb25uZWN0IHNpZ25hbHMsIHdlIGRvbid0IHdhbnQg
dG8KKwkgICBsaXN0ZW4gdG8gbW9yZSBTb3VwTWVzc2FnZSBldmVudHMgYXMgd2UncmUgZmluaXNo
ZWQgd2l0aAorCSAgIHRoaXMgcmVzb3VyY2UgKi8KKwlpZiAoZ19zaWduYWxfaGFuZGxlcl9pc19j
b25uZWN0ZWQgKGZpeHR1cmUtPm1zZywgZml4dHVyZS0+Z290X2NodW5rX2hhbmRsZXIpKQorCQln
X3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QgKGZpeHR1cmUtPm1zZywgZml4dHVyZS0+Z290X2No
dW5rX2hhbmRsZXIpOworCWlmIChnX3NpZ25hbF9oYW5kbGVyX2lzX2Nvbm5lY3RlZCAoZml4dHVy
ZS0+bXNnLCBmaXh0dXJlLT5nb3RfYm9keV9oYW5kbGVyKSkKKwkJZ19zaWduYWxfaGFuZGxlcl9k
aXNjb25uZWN0IChmaXh0dXJlLT5tc2csIGZpeHR1cmUtPmdvdF9ib2R5X2hhbmRsZXIpOworCWlm
IChnX3NpZ25hbF9oYW5kbGVyX2lzX2Nvbm5lY3RlZCAoZml4dHVyZS0+bXNnLCBmaXh0dXJlLT5y
ZXN0YXJ0ZWRfaGFuZGxlcikpCisJCWdfc2lnbmFsX2hhbmRsZXJfZGlzY29ubmVjdCAoZml4dHVy
ZS0+bXNnLCBmaXh0dXJlLT5yZXN0YXJ0ZWRfaGFuZGxlcik7CisJZ19vYmplY3RfdW5yZWYgKGZp
eHR1cmUtPm1zZyk7CisJZ19vYmplY3RfdW5yZWYgKGZpeHR1cmUtPmNhY2hlKTsKKwlnX3NsaWNl
X2ZyZWUgKFdlYktpdFNvdXBDYWNoZVdyaXRpbmdGaXh0dXJlLCBmaXh0dXJlKTsKK30KKworc3Rh
dGljIHZvaWQKK2Nsb3NlX3JlYWR5X2NiIChHT2JqZWN0ICpzb3VyY2UsIEdBc3luY1Jlc3VsdCAq
cmVzdWx0LCBXZWJLaXRTb3VwQ2FjaGVXcml0aW5nRml4dHVyZSAqZml4dHVyZSkKK3sKKwlXZWJL
aXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkgPSBmaXh0dXJlLT5lbnRyeTsKKwlXZWJLaXRTb3VwQ2Fj
aGUgKmNhY2hlID0gZml4dHVyZS0+Y2FjaGU7CisJR091dHB1dFN0cmVhbSAqc3RyZWFtID0gR19P
VVRQVVRfU1RSRUFNIChzb3VyY2UpOworCWdvZmZzZXQgY29udGVudF9sZW5ndGg7CisKKwlnX3dh
cm5faWZfZmFpbCAoZW50cnktPmVycm9yID09IE5VTEwpOworCisJLyogRklYTUU6IHdoYXQgZG8g
d2UgZG8gb24gZXJyb3IgPyAqLworCisJaWYgKHN0cmVhbSkgeworCQlnX291dHB1dF9zdHJlYW1f
Y2xvc2VfZmluaXNoIChzdHJlYW0sIHJlc3VsdCwgTlVMTCk7CisJCWdfb2JqZWN0X3VucmVmIChz
dHJlYW0pOworCX0KKwllbnRyeS0+c3RyZWFtID0gTlVMTDsKKworCWNvbnRlbnRfbGVuZ3RoID0g
c291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X2NvbnRlbnRfbGVuZ3RoIChlbnRyeS0+aGVhZGVycyk7
CisKKwkvKiBJZiB0aGUgcHJvY2VzcyB3YXMgY2FuY2VsbGVkLCB0aGVuIGRlbGV0ZSB0aGUgZW50
cnkgZnJvbQorCSAgIHRoZSBjYWNoZS4gRG8gaXQgYWxzbyBpZiB0aGUgc2l6ZSBvZiBhIGNodW5r
ZWQgcmVzb3VyY2UgaXMKKwkgICB0b28gbXVjaCBmb3IgdGhlIGNhY2hlICovCisJaWYgKGdfY2Fu
Y2VsbGFibGVfaXNfY2FuY2VsbGVkIChlbnRyeS0+Y2FuY2VsbGFibGUpKSB7CisJCWVudHJ5LT5k
aXJ0eSA9IEZBTFNFOworCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9yZW1vdmUgKGNhY2hlLCBl
bnRyeSk7CisJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUgKGVudHJ5LCBUUlVFKTsKKwkJ
ZW50cnkgPSBOVUxMOworCX0gZWxzZSBpZiAoKHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9lbmNv
ZGluZyAoZW50cnktPmhlYWRlcnMpID09IFNPVVBfRU5DT0RJTkdfQ0hVTktFRCkgfHwKKwkJICAg
ZW50cnktPmxlbmd0aCAhPSBjb250ZW50X2xlbmd0aCkgeworCQkvKiogVHdvIG9wdGlvbnMgaGVy
ZToKKwkJICoKKwkJICogMS4gImNodW5rZWQiIGRhdGEsIGVudHJ5IHdhcyB0ZW1wb3JhcmlseSBh
ZGRlZCB0bworCQkgKiBjYWNoZSAoYXMgY29udGVudC1sZW5ndGggaXMgMCkgYW5kIG5vdyB0aGF0
IHdlIGhhdmUKKwkJICogdGhlIGFjdHVhbCBzaXplIHdlIGhhdmUgdG8gZXZhbHVhdGUgaWYgd2Ug
d2FudCBpdAorCQkgKiBpbiB0aGUgY2FjaGUgb3Igbm90CisJCSAqCisJCSAqIDIuIENvbnRlbnQt
TGVuZ3RoIGhhcyBhIGRpZmZlcmVudCB2YWx1ZSB0aGFuIGFjdHVhbAorCQkgKiBsZW5ndGgsIG1l
YW5zIHRoYXQgdGhlIGNvbnRlbnQgd2FzIGVuY29kZWQgZm9yCisJCSAqIHRyYW5zbWlzc2lvbiAo
dHlwaWNhbGx5IGNvbXByZXNzZWQpIGFuZCB0aHVzIHdlCisJCSAqIGhhdmUgdG8gc3Vic3RyYWN0
IHRoZSBjb250ZW50LWxlbmd0aCB2YWx1ZSB0aGF0IHdhcworCQkgKiBhZGRlZCB0byB0aGUgY2Fj
aGUgYW5kIGFkZCB0aGUgdW5lbmNvZGVkIGxlbmd0aAorCQkgKiovCisJCWdpbnQgbGVuZ3RoX3Rv
X2FkZCA9IGVudHJ5LT5sZW5ndGggLSBjb250ZW50X2xlbmd0aDsKKworCQkvKiBNYWtlIHJvb20g
aW4gY2FjaGUgaWYgbmVlZGVkICovCisJCWlmIChjYWNoZV9hY2NlcHRzX2VudHJpZXNfb2Zfc2l6
ZSAoY2FjaGUsIGxlbmd0aF90b19hZGQpKSB7CisJCQltYWtlX3Jvb21fZm9yX25ld19lbnRyeSAo
Y2FjaGUsIGxlbmd0aF90b19hZGQpOworCisJCQljYWNoZS0+cHJpdi0+c2l6ZSArPSBsZW5ndGhf
dG9fYWRkOworCQl9IGVsc2UgeworCQkJZW50cnktPmRpcnR5ID0gRkFMU0U7CisJCQl3ZWJraXRf
c291cF9jYWNoZV9lbnRyeV9yZW1vdmUgKGNhY2hlLCBlbnRyeSk7CisJCQl3ZWJraXRfc291cF9j
YWNoZV9lbnRyeV9mcmVlIChlbnRyeSwgVFJVRSk7CisJCQllbnRyeSA9IE5VTEw7CisJCX0KKwl9
CisKKwlpZiAoZW50cnkpIHsKKwkJLyogR2V0IHJpZCBvZiB0aGUgR1N0cmluZyBpbiBtZW1vcnkg
Zm9yIHRoZSByZXNvdXJjZSBub3cgKi8KKwkJaWYgKGVudHJ5LT5kYXRhKSB7CisJCQlnX3N0cmlu
Z19mcmVlIChlbnRyeS0+ZGF0YSwgVFJVRSk7CisJCQllbnRyeS0+ZGF0YSA9IE5VTEw7CisJCX0K
KworCQllbnRyeS0+ZGlydHkgPSBGQUxTRTsKKwkJZW50cnktPndyaXRpbmcgPSBGQUxTRTsKKwkJ
ZW50cnktPmdvdF9ib2R5ID0gRkFMU0U7CisJCWVudHJ5LT5wb3MgPSAwOworCisJCWdfb2JqZWN0
X3VucmVmIChlbnRyeS0+Y2FuY2VsbGFibGUpOworCQllbnRyeS0+Y2FuY2VsbGFibGUgPSBOVUxM
OworCX0KKworCWNhY2hlLT5wcml2LT5uX3BlbmRpbmctLTsKKworCS8qIEZyZWVzICovCisJd2Vi
a2l0X3NvdXBfY2FjaGVfd3JpdGluZ19maXh0dXJlX2ZyZWUgKGZpeHR1cmUpOworfQorCitzdGF0
aWMgdm9pZAord3JpdGVfcmVhZHlfY2IgKEdPYmplY3QgKnNvdXJjZSwgR0FzeW5jUmVzdWx0ICpy
ZXN1bHQsIFdlYktpdFNvdXBDYWNoZVdyaXRpbmdGaXh0dXJlICpmaXh0dXJlKQoreworCUdPdXRw
dXRTdHJlYW0gKnN0cmVhbSA9IEdfT1VUUFVUX1NUUkVBTSAoc291cmNlKTsKKwlHRXJyb3IgKmVy
cm9yID0gTlVMTDsKKwlnc3NpemUgd3JpdGVfc2l6ZTsKKwlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAq
ZW50cnkgPSBmaXh0dXJlLT5lbnRyeTsKKworCWlmIChnX2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxl
ZCAoZW50cnktPmNhbmNlbGxhYmxlKSkgeworCQlnX291dHB1dF9zdHJlYW1fY2xvc2VfYXN5bmMg
KHN0cmVhbSwKKwkJCQkJICAgICBHX1BSSU9SSVRZX0xPVywKKwkJCQkJICAgICBlbnRyeS0+Y2Fu
Y2VsbGFibGUsCisJCQkJCSAgICAgKEdBc3luY1JlYWR5Q2FsbGJhY2spY2xvc2VfcmVhZHlfY2Is
CisJCQkJCSAgICAgZml4dHVyZSk7CisJCXJldHVybjsKKwl9CisKKwl3cml0ZV9zaXplID0gZ19v
dXRwdXRfc3RyZWFtX3dyaXRlX2ZpbmlzaCAoc3RyZWFtLCByZXN1bHQsICZlcnJvcik7CisJaWYg
KHdyaXRlX3NpemUgPD0gMCB8fCBlcnJvcikgeworCQlpZiAoZXJyb3IpCisJCQllbnRyeS0+ZXJy
b3IgPSBlcnJvcjsKKwkJZ19vdXRwdXRfc3RyZWFtX2Nsb3NlX2FzeW5jIChzdHJlYW0sCisJCQkJ
CSAgICAgR19QUklPUklUWV9MT1csCisJCQkJCSAgICAgZW50cnktPmNhbmNlbGxhYmxlLAorCQkJ
CQkgICAgIChHQXN5bmNSZWFkeUNhbGxiYWNrKWNsb3NlX3JlYWR5X2NiLAorCQkJCQkgICAgIGZp
eHR1cmUpOworCQkvKiBGSVhNRTogV2Ugc2hvdWxkIGNvbXBsZXRlbHkgc3RvcCBjYWNoaW5nIHRo
ZQorCQkgICByZXNvdXJjZSBhdCB0aGlzIHBvaW50ICovCisJfSBlbHNlIHsKKwkJZW50cnktPnBv
cyArPSB3cml0ZV9zaXplOworCisJCS8qIEFyZSB3ZSBzdGlsbCB3cml0aW5nIGFuZCBpcyB0aGVy
ZSBuZXcgZGF0YSB0byB3cml0ZQorCQkgICBhbHJlYWR5ID8gKi8KKwkJaWYgKGVudHJ5LT5kYXRh
ICYmIGVudHJ5LT5wb3MgPCBlbnRyeS0+ZGF0YS0+bGVuKSB7CisJCQlnX291dHB1dF9zdHJlYW1f
d3JpdGVfYXN5bmMgKGVudHJ5LT5zdHJlYW0sCisJCQkJCQkgICAgIGVudHJ5LT5kYXRhLT5zdHIg
KyBlbnRyeS0+cG9zLAorCQkJCQkJICAgICBlbnRyeS0+ZGF0YS0+bGVuIC0gZW50cnktPnBvcywK
KwkJCQkJCSAgICAgR19QUklPUklUWV9MT1csCisJCQkJCQkgICAgIGVudHJ5LT5jYW5jZWxsYWJs
ZSwKKwkJCQkJCSAgICAgKEdBc3luY1JlYWR5Q2FsbGJhY2spd3JpdGVfcmVhZHlfY2IsCisJCQkJ
CQkgICAgIGZpeHR1cmUpOworCQl9IGVsc2UgeworCQkJZW50cnktPndyaXRpbmcgPSBGQUxTRTsK
KworCQkJaWYgKGVudHJ5LT5nb3RfYm9keSkgeworCQkJCS8qIElmIHdlIGFscmVhZHkgcmVjZWl2
ZWQgJ2dvdC1ib2R5JworCQkJCSAgIGFuZCB3ZSBoYXZlIHdyaXR0ZW4gYWxsIHRoZSBkYXRhLAor
CQkJCSAgIHdlIGNhbiBjbG9zZSB0aGUgc3RyZWFtICovCisJCQkJZ19vdXRwdXRfc3RyZWFtX2Ns
b3NlX2FzeW5jIChlbnRyeS0+c3RyZWFtLAorCQkJCQkJCSAgICAgR19QUklPUklUWV9MT1csCisJ
CQkJCQkJICAgICBlbnRyeS0+Y2FuY2VsbGFibGUsCisJCQkJCQkJICAgICAoR0FzeW5jUmVhZHlD
YWxsYmFjayljbG9zZV9yZWFkeV9jYiwKKwkJCQkJCQkgICAgIGZpeHR1cmUpOworCQkJfQorCQl9
CisJfQorfQorCitzdGF0aWMgdm9pZAorbXNnX2dvdF9jaHVua19jYiAoU291cE1lc3NhZ2UgKm1z
ZywgU291cEJ1ZmZlciAqY2h1bmssIFdlYktpdFNvdXBDYWNoZVdyaXRpbmdGaXh0dXJlICpmaXh0
dXJlKQoreworCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSA9IGZpeHR1cmUtPmVudHJ5Owor
CisJZ19yZXR1cm5faWZfZmFpbCAoY2h1bmstPmRhdGEgJiYgY2h1bmstPmxlbmd0aCk7CisJZ19y
ZXR1cm5faWZfZmFpbCAoZW50cnkpOworCisJLyogSWdub3JlIHRoaXMgaWYgdGhlIHdyaXRpbmcg
b3IgYXBwZW5kaW5nIHdhcyBjYW5jZWxsZWQgKi8KKwlpZiAoIWdfY2FuY2VsbGFibGVfaXNfY2Fu
Y2VsbGVkIChlbnRyeS0+Y2FuY2VsbGFibGUpKSB7CisJCWdfc3RyaW5nX2FwcGVuZF9sZW4gKGVu
dHJ5LT5kYXRhLCBjaHVuay0+ZGF0YSwgY2h1bmstPmxlbmd0aCk7CisJCWVudHJ5LT5sZW5ndGgg
PSBlbnRyeS0+ZGF0YS0+bGVuOworCisJCWlmICghY2FjaGVfYWNjZXB0c19lbnRyaWVzX29mX3Np
emUgKGZpeHR1cmUtPmNhY2hlLCBlbnRyeS0+bGVuZ3RoKSkgeworCQkJLyogUXVpY2tseSBjYW5j
ZWwgdGhlIGNhY2hpbmcgb2YgdGhlIHJlc291cmNlICovCisJCQlnX2NhbmNlbGxhYmxlX2NhbmNl
bCAoZW50cnktPmNhbmNlbGxhYmxlKTsKKwkJfQorCX0KKworCS8qIEZJWE1FOiByZW1vdmUgdGhl
IGVycm9yIGNoZWNrIHdoZW4gd2UgY2FuY2VsIHRoZSBjYWNoaW5nIGF0CisJICAgdGhlIGZpcnN0
IHdyaXRlIGVycm9yICovCisJLyogT25seSB3cml0ZSBpZiB0aGUgZW50cnkgc3RyZWFtIGlzIHJl
YWR5ICovCisJaWYgKGVudHJ5LT53cml0aW5nID09IEZBTFNFICYmIGVudHJ5LT5lcnJvciA9PSBO
VUxMICYmIGVudHJ5LT5zdHJlYW0pIHsKKwkJR1N0cmluZyAqZGF0YSA9IGVudHJ5LT5kYXRhOwor
CQllbnRyeS0+d3JpdGluZyA9IFRSVUU7CisJCWdfb3V0cHV0X3N0cmVhbV93cml0ZV9hc3luYyAo
ZW50cnktPnN0cmVhbSwKKwkJCQkJICAgICBkYXRhLT5zdHIgKyBlbnRyeS0+cG9zLAorCQkJCQkg
ICAgIGRhdGEtPmxlbiAtIGVudHJ5LT5wb3MsCisJCQkJCSAgICAgR19QUklPUklUWV9MT1csCisJ
CQkJCSAgICAgZW50cnktPmNhbmNlbGxhYmxlLAorCQkJCQkgICAgIChHQXN5bmNSZWFkeUNhbGxi
YWNrKXdyaXRlX3JlYWR5X2NiLAorCQkJCQkgICAgIGZpeHR1cmUpOworCX0KK30KKworc3RhdGlj
IHZvaWQKK21zZ19nb3RfYm9keV9jYiAoU291cE1lc3NhZ2UgKm1zZywgV2ViS2l0U291cENhY2hl
V3JpdGluZ0ZpeHR1cmUgKmZpeHR1cmUpCit7CisJV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5
ID0gZml4dHVyZS0+ZW50cnk7CisJZ19yZXR1cm5faWZfZmFpbCAoZW50cnkpOworCisJZW50cnkt
PmdvdF9ib2R5ID0gVFJVRTsKKworCWlmICghZW50cnktPnN0cmVhbSAmJiBlbnRyeS0+cG9zICE9
IGVudHJ5LT5sZW5ndGgpCisJCS8qIFRoZSBzdHJlYW0gaXMgbm90IHJlYWR5IHRvIGJlIHdyaXR0
ZW4gYnV0IHdlIHN0aWxsCisJCSAgIGhhdmUgZGF0YSB0byB3cml0ZSwgd2UnbGwgd3JpdGUgaXQg
d2hlbiB0aGUgc3RyZWFtCisJCSAgIGlzIG9wZW5lZCBmb3Igd3JpdGluZyAqLworCQlyZXR1cm47
CisKKworCWlmIChlbnRyeS0+cG9zICE9IGVudHJ5LT5sZW5ndGgpIHsKKwkJLyogSWYgd2Ugc3Rp
bGwgaGF2ZSBkYXRhIHRvIHdyaXRlLCB3cml0ZSBpdCwKKwkJICAgd3JpdGVfcmVhZHlfY2Igd2ls
bCBjbG9zZSB0aGUgc3RyZWFtICovCisJCWlmIChlbnRyeS0+d3JpdGluZyA9PSBGQUxTRSAmJiBl
bnRyeS0+ZXJyb3IgPT0gTlVMTCAmJiBlbnRyeS0+c3RyZWFtKSB7CisJCQlnX291dHB1dF9zdHJl
YW1fd3JpdGVfYXN5bmMgKGVudHJ5LT5zdHJlYW0sCisJCQkJCQkgICAgIGVudHJ5LT5kYXRhLT5z
dHIgKyBlbnRyeS0+cG9zLAorCQkJCQkJICAgICBlbnRyeS0+ZGF0YS0+bGVuIC0gZW50cnktPnBv
cywKKwkJCQkJCSAgICAgR19QUklPUklUWV9MT1csCisJCQkJCQkgICAgIGVudHJ5LT5jYW5jZWxs
YWJsZSwKKwkJCQkJCSAgICAgKEdBc3luY1JlYWR5Q2FsbGJhY2spd3JpdGVfcmVhZHlfY2IsCisJ
CQkJCQkgICAgIGZpeHR1cmUpOworCQl9CisJCXJldHVybjsKKwl9CisKKwlpZiAoZW50cnktPnN0
cmVhbSAmJiAhZW50cnktPndyaXRpbmcpCisJCWdfb3V0cHV0X3N0cmVhbV9jbG9zZV9hc3luYyAo
ZW50cnktPnN0cmVhbSwKKwkJCQkJICAgICBHX1BSSU9SSVRZX0xPVywKKwkJCQkJICAgICBlbnRy
eS0+Y2FuY2VsbGFibGUsCisJCQkJCSAgICAgKEdBc3luY1JlYWR5Q2FsbGJhY2spY2xvc2VfcmVh
ZHlfY2IsCisJCQkJCSAgICAgZml4dHVyZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgord2Via2l0
X3NvdXBfY2FjaGVfZW50cnlfcmVtb3ZlIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLCBXZWJLaXRT
b3VwQ2FjaGVFbnRyeSAqZW50cnkpCit7CisJR0xpc3QgKmxydV9pdGVtOworCisJLyogaWYgKGVu
dHJ5LT5kaXJ0eSAmJiAhZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQgKGVudHJ5LT5jYW5jZWxs
YWJsZSkpIHsgKi8KKwlpZiAoZW50cnktPmRpcnR5KSB7CisJCWdfY2FuY2VsbGFibGVfY2FuY2Vs
IChlbnRyeS0+Y2FuY2VsbGFibGUpOworCQlyZXR1cm4gRkFMU0U7CisJfQorCisJZ19hc3NlcnQg
KGdfbGlzdF9sZW5ndGggKGNhY2hlLT5wcml2LT5scnVfc3RhcnQpID09IGdfaGFzaF90YWJsZV9z
aXplIChjYWNoZS0+cHJpdi0+Y2FjaGUpKTsKKworCS8qIFJlbW92ZSBmcm9tIGNhY2hlICovCisJ
aWYgKCFnX2hhc2hfdGFibGVfcmVtb3ZlIChjYWNoZS0+cHJpdi0+Y2FjaGUsIGVudHJ5LT5rZXkp
KQorCQlyZXR1cm4gRkFMU0U7CisKKwkvKiBSZW1vdmUgZnJvbSBMUlUgKi8KKwlscnVfaXRlbSA9
IGdfbGlzdF9maW5kIChjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0LCBlbnRyeSk7CisJY2FjaGUtPnBy
aXYtPmxydV9zdGFydCA9IGdfbGlzdF9kZWxldGVfbGluayAoY2FjaGUtPnByaXYtPmxydV9zdGFy
dCwgbHJ1X2l0ZW0pOworCisJLyogQWRqdXN0IGNhY2hlIHNpemUgKi8KKwljYWNoZS0+cHJpdi0+
c2l6ZSAtPSBlbnRyeS0+bGVuZ3RoOworCisJZ19hc3NlcnQgKGdfbGlzdF9sZW5ndGggKGNhY2hl
LT5wcml2LT5scnVfc3RhcnQpID09IGdfaGFzaF90YWJsZV9zaXplIChjYWNoZS0+cHJpdi0+Y2Fj
aGUpKTsKKworCXJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2ludAorbHJ1X2NvbXBhcmVfZnVu
YyAoZ2NvbnN0cG9pbnRlciBhLCBnY29uc3Rwb2ludGVyIGIpCit7CisJV2ViS2l0U291cENhY2hl
RW50cnkgKmVudHJ5X2EgPSAoV2ViS2l0U291cENhY2hlRW50cnkgKilhOworCVdlYktpdFNvdXBD
YWNoZUVudHJ5ICplbnRyeV9iID0gKFdlYktpdFNvdXBDYWNoZUVudHJ5ICopYjsKKworCS8qKiBU
aGUgcmF0aW9uYWxlIG9mIHRoaXMgc29ydGluZyBmdW5jIGlzCisJICoKKwkgKiAxLiBzb3J0IGJ5
IGhpdHMgLT4gTFJVIGFsZ29yaXRobSwgdGhlbgorCSAqCisJICogMi4gc29ydCBieSBmcmVzaG5l
c3MgbGlmZXRpbWUsIHdlIGJldHRlciBkaXNjYXJkIGZpcnN0CisJICogZW50cmllcyB0aGF0IGFy
ZSBjbG9zZSB0byBleHBpcmUKKwkgKgorCSAqIDMuIHNvcnQgYnkgc2l6ZSwgcmVwbGFjZSBmaXJz
dCBzbWFsbCBzaXplIHJlc291cmNlcyBhcyB0aGV5CisJICogYXJlIGNoZWFwZXIgdG8gZG93bmxv
YWQKKwkgKiovCisKKwkvKiBTb3J0IGJ5IGhpdHMgKi8KKwlpZiAoZW50cnlfYS0+aGl0cyAhPSBl
bnRyeV9iLT5oaXRzKQorCQlyZXR1cm4gZW50cnlfYS0+aGl0cyAtIGVudHJ5X2ItPmhpdHM7CisK
KwkvKiBTb3J0IGJ5IGZyZXNobmVzc19saWZldGltZSAqLworCWlmIChlbnRyeV9hLT5mcmVzaG5l
c3NfbGlmZXRpbWUgIT0gZW50cnlfYi0+ZnJlc2huZXNzX2xpZmV0aW1lKQorCQlyZXR1cm4gZW50
cnlfYS0+ZnJlc2huZXNzX2xpZmV0aW1lIC0gZW50cnlfYi0+ZnJlc2huZXNzX2xpZmV0aW1lOwor
CisJLyogU29ydCBieSBzaXplICovCisJcmV0dXJuIGVudHJ5X2EtPmxlbmd0aCAtIGVudHJ5X2It
Pmxlbmd0aDsKK30KKworc3RhdGljIGdib29sZWFuCitjYWNoZV9hY2NlcHRzX2VudHJpZXNfb2Zf
c2l6ZSAoV2ViS2l0U291cENhY2hlICpjYWNoZSwgZ3VpbnQgbGVuZ3RoX3RvX2FkZCkKK3sKKwkv
KiBXZSBjb3VsZCBhZGQgaGVyZSBzb21lIG1vcmUgaGV1cmlzdGljcy4gVE9ETzogcmV2aWV3IGhv
dworCSAgIHRoaXMgaXMgZG9uZSBieSBvdGhlciBIVFRQIGNhY2hlcyAqLworCisJcmV0dXJuIGxl
bmd0aF90b19hZGQgPD0gY2FjaGUtPnByaXYtPm1heF9lbnRyeV9kYXRhX3NpemU7Cit9CisKK3N0
YXRpYyB2b2lkCittYWtlX3Jvb21fZm9yX25ld19lbnRyeSAoV2ViS2l0U291cENhY2hlICpjYWNo
ZSwgZ3VpbnQgbGVuZ3RoX3RvX2FkZCkKK3sKKwlHTGlzdCAqbHJ1X2VudHJ5ID0gY2FjaGUtPnBy
aXYtPmxydV9zdGFydDsKKworCS8qIENoZWNrIHRoYXQgdGhlcmUgaXMgZW5vdWdoIHJvb20gZm9y
IHRoZSBuZXcgZW50cnkuIFRoaXMgaXMKKwkgICBhbiBhcHByb3hpbWF0aW9uIGFzIHdlJ3JlIG5v
dCB3b3JraW5nIG91dCB0aGUgc2l6ZSBvZiB0aGUKKwkgICBjYWNoZSBmaWxlIG9yIHRoZSBzaXpl
IG9mIHRoZSBoZWFkZXJzIGZvciBwZXJmb3JtYW5jZQorCSAgIHJlYXNvbnMuIFRPRE86IGNoZWNr
IGlmIHRoYXQgd291bGQgYmUgcmVhbGx5IHRoYXQgZXhwZW5zaXZlICovCisKKwl3aGlsZSAobHJ1
X2VudHJ5ICYmCisJICAgICAgIChsZW5ndGhfdG9fYWRkICsgY2FjaGUtPnByaXYtPnNpemUgPiBj
YWNoZS0+cHJpdi0+bWF4X3NpemUpKSB7CisJCVdlYktpdFNvdXBDYWNoZUVudHJ5ICpvbGRfZW50
cnkgPSAoV2ViS2l0U291cENhY2hlRW50cnkgKilscnVfZW50cnktPmRhdGE7CisKKwkJLyogRGlz
Y2FyZCBlbnRyaWVzLiBPbmNlIGNhbmNlbGxlZCByZXNvdXJjZXMgd2lsbCBiZQorCQkgKiBmcmVl
ZCBpbiBjbG9zZV9yZWFkeV9jYgorCQkgKi8KKwkJaWYgKHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5
X3JlbW92ZSAoY2FjaGUsIG9sZF9lbnRyeSkpIHsKKwkJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5
X2ZyZWUgKG9sZF9lbnRyeSwgVFJVRSk7CisJCQlscnVfZW50cnkgPSBjYWNoZS0+cHJpdi0+bHJ1
X3N0YXJ0OworCQl9IGVsc2UKKwkJCWxydV9lbnRyeSA9IGdfbGlzdF9uZXh0IChscnVfZW50cnkp
OworCX0KK30KKworc3RhdGljIGdib29sZWFuCit3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9pbnNl
cnRfYnlfa2V5IChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLAorCQkJCSAgICAgICBjb25zdCBjaGFy
ICprZXksCisJCQkJICAgICAgIFdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSwKKwkJCQkgICAg
ICAgZ2Jvb2xlYW4gc29ydCkKK3sKKwlndWludCBsZW5ndGhfdG9fYWRkID0gMDsKKworCWlmIChz
b3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfZW5jb2RpbmcgKGVudHJ5LT5oZWFkZXJzKSAhPSBTT1VQ
X0VOQ09ESU5HX0NIVU5LRUQpCisJCWxlbmd0aF90b19hZGQgPSBzb3VwX21lc3NhZ2VfaGVhZGVy
c19nZXRfY29udGVudF9sZW5ndGggKGVudHJ5LT5oZWFkZXJzKTsKKworCS8qIENoZWNrIGlmIHdl
IGFyZSBnb2luZyB0byBzdG9yZSB0aGUgcmVzb3VyY2UgZGVwZW5kaW5nIG9uIGl0cyBzaXplICov
CisJaWYgKGxlbmd0aF90b19hZGQpIHsKKwkJaWYgKCFjYWNoZV9hY2NlcHRzX2VudHJpZXNfb2Zf
c2l6ZSAoY2FjaGUsIGxlbmd0aF90b19hZGQpKQorCQkJcmV0dXJuIEZBTFNFOworCisJCS8qIE1h
a2Ugcm9vbSBmb3IgbmV3IGVudHJ5IGlmIG5lZWRlZCAqLworCQltYWtlX3Jvb21fZm9yX25ld19l
bnRyeSAoY2FjaGUsIGxlbmd0aF90b19hZGQpOworCX0KKworCWdfaGFzaF90YWJsZV9pbnNlcnQg
KGNhY2hlLT5wcml2LT5jYWNoZSwgZ19zdHJkdXAgKGtleSksIGVudHJ5KTsKKworCS8qIENvbXB1
dGUgbmV3IGNhY2hlIHNpemUgKi8KKwljYWNoZS0+cHJpdi0+c2l6ZSArPSBsZW5ndGhfdG9fYWRk
OworCisJLyogVXBkYXRlIExSVSAqLworCWlmIChzb3J0KQorCQljYWNoZS0+cHJpdi0+bHJ1X3N0
YXJ0ID0gZ19saXN0X2luc2VydF9zb3J0ZWQgKGNhY2hlLT5wcml2LT5scnVfc3RhcnQsIGVudHJ5
LCBscnVfY29tcGFyZV9mdW5jKTsKKwllbHNlCisJCWNhY2hlLT5wcml2LT5scnVfc3RhcnQgPSBn
X2xpc3RfcHJlcGVuZCAoY2FjaGUtPnByaXYtPmxydV9zdGFydCwgZW50cnkpOworCisJZ19hc3Nl
cnQgKGdfbGlzdF9sZW5ndGggKGNhY2hlLT5wcml2LT5scnVfc3RhcnQpID09IGdfaGFzaF90YWJs
ZV9zaXplIChjYWNoZS0+cHJpdi0+Y2FjaGUpKTsKKworCXJldHVybiBUUlVFOworfQorCitzdGF0
aWMgdm9pZAorbXNnX3Jlc3RhcnRlZF9jYiAoU291cE1lc3NhZ2UgKm1zZywgV2ViS2l0U291cENh
Y2hlRW50cnkgKmVudHJ5KQoreworCS8qIEZJWE1FOiBXaGF0IHNob3VsZCB3ZSBkbyBoZXJlIGV4
YWN0bHk/ICovCit9CisKK3N0YXRpYyB2b2lkCithcHBlbmRfdG9fcmVhZHlfY2IgKEdPYmplY3Qg
KnNvdXJjZSwgR0FzeW5jUmVzdWx0ICpyZXN1bHQsIFdlYktpdFNvdXBDYWNoZVdyaXRpbmdGaXh0
dXJlICpmaXh0dXJlKQoreworCUdGaWxlICpmaWxlID0gKEdGaWxlICopc291cmNlOworCUdPdXRw
dXRTdHJlYW0gKnN0cmVhbTsKKwlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkgPSBmaXh0dXJl
LT5lbnRyeTsKKworCXN0cmVhbSA9IChHT3V0cHV0U3RyZWFtICopZ19maWxlX2FwcGVuZF90b19m
aW5pc2ggKGZpbGUsIHJlc3VsdCwgJmVudHJ5LT5lcnJvcik7CisKKwlpZiAoZ19jYW5jZWxsYWJs
ZV9pc19jYW5jZWxsZWQgKGVudHJ5LT5jYW5jZWxsYWJsZSkgfHwgZW50cnktPmVycm9yKSB7CisJ
CWZpeHR1cmUtPmNhY2hlLT5wcml2LT5uX3BlbmRpbmctLTsKKwkJZW50cnktPmRpcnR5ID0gRkFM
U0U7CisJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X3JlbW92ZSAoZml4dHVyZS0+Y2FjaGUsIGVu
dHJ5KTsKKwkJd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfZnJlZSAoZW50cnksIFRSVUUpOworCQl3
ZWJraXRfc291cF9jYWNoZV93cml0aW5nX2ZpeHR1cmVfZnJlZSAoZml4dHVyZSk7CisJCXJldHVy
bjsKKwl9CisKKwllbnRyeS0+c3RyZWFtID0gZ19vYmplY3RfcmVmIChzdHJlYW0pOworCWdfb2Jq
ZWN0X3VucmVmIChmaWxlKTsKKworCS8qIElmIHdlIGFscmVhZHkgZ290IGFsbCB0aGUgZGF0YSB3
ZSBoYXZlIHRvIGluaXRpYXRlIHRoZQorCSAgIHdyaXRpbmcgaGVyZSwgc2luY2Ugd2Ugd29uJ3Qg
Z2V0IG1vcmUgJ2dvdC1jaHVuaycKKwkgICBzaWduYWxzICovCisJaWYgKGVudHJ5LT5nb3RfYm9k
eSkgeworCQlHU3RyaW5nICpkYXRhID0gZW50cnktPmRhdGE7CisKKwkJLyogSXQgY291bGQgaGFw
cGVuIHRoYXQgcmVhZGluZyB0aGUgZGF0YSBmcm9tIHNlcnZlcgorCQkgICB3YXMgY29tcGxldGVk
IGJlZm9yZSB0aGlzIGhhcHBlbnMuIEluIHRoYXQgY2FzZQorCQkgICB0aGVyZSBpcyBubyBkYXRh
ICovCisJCWlmIChkYXRhKSB7CisJCQllbnRyeS0+d3JpdGluZyA9IFRSVUU7CisJCQlnX291dHB1
dF9zdHJlYW1fd3JpdGVfYXN5bmMgKGVudHJ5LT5zdHJlYW0sCisJCQkJCQkgICAgIGRhdGEtPnN0
ciArIGVudHJ5LT5wb3MsCisJCQkJCQkgICAgIGRhdGEtPmxlbiAtIGVudHJ5LT5wb3MsCisJCQkJ
CQkgICAgIEdfUFJJT1JJVFlfTE9XLAorCQkJCQkJICAgICBlbnRyeS0+Y2FuY2VsbGFibGUsCisJ
CQkJCQkgICAgIChHQXN5bmNSZWFkeUNhbGxiYWNrKXdyaXRlX3JlYWR5X2NiLAorCQkJCQkJICAg
ICBmaXh0dXJlKTsKKwkJfQorCX0KK30KKwordHlwZWRlZiBzdHJ1Y3QgeworCXRpbWVfdCByZXF1
ZXN0X3RpbWU7CisJU291cFNlc3Npb25GZWF0dXJlICpmZWF0dXJlOworCWd1bG9uZyBnb3RfaGVh
ZGVyc19oYW5kbGVyOworfSBSZXF1ZXN0SGVscGVyOworCitzdGF0aWMgdm9pZAorbXNnX2dvdF9o
ZWFkZXJzX2NiIChTb3VwTWVzc2FnZSAqbXNnLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJV2Vi
S2l0U291cENhY2hlICpjYWNoZTsKKwlXZWJLaXRTb3VwQ2FjaGVhYmlsaXR5IGNhY2hlYWJsZTsK
KwlSZXF1ZXN0SGVscGVyICpoZWxwZXI7CisJdGltZV90IHJlcXVlc3RfdGltZSwgcmVzcG9uc2Vf
dGltZTsKKworCXJlc3BvbnNlX3RpbWUgPSB0aW1lIChOVUxMKTsKKworCWhlbHBlciA9IChSZXF1
ZXN0SGVscGVyICopdXNlcl9kYXRhOworCWNhY2hlID0gV0VCS0lUX1NPVVBfQ0FDSEUgKGhlbHBl
ci0+ZmVhdHVyZSk7CisJcmVxdWVzdF90aW1lID0gaGVscGVyLT5yZXF1ZXN0X3RpbWU7CisJZ19z
aWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jIChtc2csIG1zZ19nb3RfaGVhZGVyc19j
YiwgdXNlcl9kYXRhKTsKKwlnX3NsaWNlX2ZyZWUgKFJlcXVlc3RIZWxwZXIsIGhlbHBlcik7CisK
KwljYWNoZWFibGUgPSB3ZWJraXRfc291cF9jYWNoZV9nZXRfY2FjaGVhYmlsaXR5IChjYWNoZSwg
bXNnKTsKKworCWlmIChjYWNoZWFibGUgJiBXRUJLSVRfU09VUF9DQUNIRV9DQUNIRUFCTEUpIHsK
KwkJV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5OworCQljaGFyICprZXk7CisJCUdGaWxlICpm
aWxlOworCQlXZWJLaXRTb3VwQ2FjaGVXcml0aW5nRml4dHVyZSAqZml4dHVyZTsKKworCQkvKiBD
aGVjayBpZiB3ZSBhcmUgYWxyZWFkeSBjYWNoaW5nIHRoaXMgcmVzb3VyY2UgKi8KKwkJa2V5ID0g
c291cF9tZXNzYWdlX2dldF9jYWNoZV9rZXkgKG1zZyk7CisJCWVudHJ5ID0gZ19oYXNoX3RhYmxl
X2xvb2t1cCAoY2FjaGUtPnByaXYtPmNhY2hlLCBrZXkpOworCQlnX2ZyZWUgKGtleSk7CisKKwkJ
aWYgKGVudHJ5ICYmIGVudHJ5LT5kaXJ0eSkKKwkJCXJldHVybjsKKworCQkvKiBDcmVhdGUgYSBu
ZXcgZW50cnksIGRlbGV0aW5nIGFueSBvbGQgb25lIGlmIHByZXNlbnQgKi8KKwkJaWYgKGVudHJ5
KSB7CisJCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9yZW1vdmUgKGNhY2hlLCBlbnRyeSk7CisJ
CQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9mcmVlIChlbnRyeSwgVFJVRSk7CisJCX0KKworCQll
bnRyeSA9IHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X25ldyAoY2FjaGUsIG1zZywgcmVxdWVzdF90
aW1lLCByZXNwb25zZV90aW1lKTsKKwkJZW50cnktPmhpdHMgPSAxOworCisJCS8qIERvIG5vdCBj
b250aW51ZSBpZiBpdCBjYW4gbm90IGJlIHN0b3JlZCAqLworCQlpZiAoIXdlYmtpdF9zb3VwX2Nh
Y2hlX2VudHJ5X2luc2VydF9ieV9rZXkgKGNhY2hlLCAoY29uc3QgZ2NoYXIgKillbnRyeS0+a2V5
LCBlbnRyeSwgVFJVRSkpIHsKKwkJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUgKGVudHJ5
LCBUUlVFKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWZpeHR1cmUgPSBnX3NsaWNlX25ldzAgKFdl
YktpdFNvdXBDYWNoZVdyaXRpbmdGaXh0dXJlKTsKKwkJZml4dHVyZS0+Y2FjaGUgPSBnX29iamVj
dF9yZWYgKGNhY2hlKTsKKwkJZml4dHVyZS0+ZW50cnkgPSBlbnRyeTsKKwkJZml4dHVyZS0+bXNn
ID0gZ19vYmplY3RfcmVmIChtc2cpOworCisJCS8qIFdlIGNvbm5lY3Qgbm93IHRvIHRoZXNlIHNp
Z25hbHMgYW5kIGJ1ZmZlciB0aGUgZGF0YQorCQkgICBpZiBpdCBjb21lcyBiZWZvcmUgdGhlIGZp
bGUgaXMgcmVhZHkgZm9yIHdyaXRpbmcgKi8KKwkJZml4dHVyZS0+Z290X2NodW5rX2hhbmRsZXIg
PQorCQkJZ19zaWduYWxfY29ubmVjdCAobXNnLCAiZ290LWNodW5rIiwgR19DQUxMQkFDSyAobXNn
X2dvdF9jaHVua19jYiksIGZpeHR1cmUpOworCQlmaXh0dXJlLT5nb3RfYm9keV9oYW5kbGVyID0K
KwkJCWdfc2lnbmFsX2Nvbm5lY3QgKG1zZywgImdvdC1ib2R5IiwgR19DQUxMQkFDSyAobXNnX2dv
dF9ib2R5X2NiKSwgZml4dHVyZSk7CisJCWZpeHR1cmUtPnJlc3RhcnRlZF9oYW5kbGVyID0KKwkJ
CWdfc2lnbmFsX2Nvbm5lY3QgKG1zZywgInJlc3RhcnRlZCIsIEdfQ0FMTEJBQ0sgKG1zZ19yZXN0
YXJ0ZWRfY2IpLCBlbnRyeSk7CisKKwkJLyogUHJlcGFyZSBlbnRyeSAqLworCQlmaWxlID0gZ19m
aWxlX25ld19mb3JfcGF0aCAoZW50cnktPmZpbGVuYW1lKTsKKwkJY2FjaGUtPnByaXYtPm5fcGVu
ZGluZysrOworCisJCWVudHJ5LT5kaXJ0eSA9IFRSVUU7CisJCWVudHJ5LT5jYW5jZWxsYWJsZSA9
IGdfY2FuY2VsbGFibGVfbmV3ICgpOworCQlnX2ZpbGVfYXBwZW5kX3RvX2FzeW5jIChmaWxlLCAw
LAorCQkJCQlHX1BSSU9SSVRZX0xPVywgZW50cnktPmNhbmNlbGxhYmxlLAorCQkJCQkoR0FzeW5j
UmVhZHlDYWxsYmFjaylhcHBlbmRfdG9fcmVhZHlfY2IsCisJCQkJCWZpeHR1cmUpOworCX0gZWxz
ZSBpZiAoY2FjaGVhYmxlICYgV0VCS0lUX1NPVVBfQ0FDSEVfSU5WQUxJREFURVMpIHsKKwkJY2hh
ciAqa2V5OworCQlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnk7CisKKwkJa2V5ID0gc291cF9t
ZXNzYWdlX2dldF9jYWNoZV9rZXkgKG1zZyk7CisJCWVudHJ5ID0gZ19oYXNoX3RhYmxlX2xvb2t1
cCAoY2FjaGUtPnByaXYtPmNhY2hlLCBrZXkpOworCQlnX2ZyZWUgKGtleSk7CisKKwkJaWYgKGVu
dHJ5KSB7CisJCQlpZiAod2Via2l0X3NvdXBfY2FjaGVfZW50cnlfcmVtb3ZlIChjYWNoZSwgZW50
cnkpKQorCQkJCXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2ZyZWUgKGVudHJ5LCBUUlVFKTsKKwkJ
fQorCX0gZWxzZSBpZiAoY2FjaGVhYmxlICYgV0VCS0lUX1NPVVBfQ0FDSEVfVkFMSURBVEVTKSB7
CisJCWNoYXIgKmtleTsKKwkJV2ViS2l0U291cENhY2hlRW50cnkgKmVudHJ5OworCisJCWtleSA9
IHNvdXBfbWVzc2FnZV9nZXRfY2FjaGVfa2V5IChtc2cpOworCQllbnRyeSA9IGdfaGFzaF90YWJs
ZV9sb29rdXAgKGNhY2hlLT5wcml2LT5jYWNoZSwga2V5KTsKKwkJZ19mcmVlIChrZXkpOworCisJ
CWdfcmV0dXJuX2lmX2ZhaWwgKGVudHJ5KTsKKworCQllbnRyeS0+YmVpbmdfdmFsaWRhdGVkID0g
RkFMU0U7CisKKwkJLyogV2UgdXBkYXRlIHRoZSBoZWFkZXJzIG9mIHRoZSBleGlzdGluZyBjYWNo
ZSBpdGVtLAorCQkgICBwbHVzIGl0cyBhZ2UgKi8KKwkJc291cF9tZXNzYWdlX2hlYWRlcnNfZm9y
ZWFjaCAobXNnLT5yZXNwb25zZV9oZWFkZXJzLAorCQkJCQkgICAgICAoU291cE1lc3NhZ2VIZWFk
ZXJzRm9yZWFjaEZ1bmMpdXBkYXRlX2hlYWRlcnMsCisJCQkJCSAgICAgIGVudHJ5LT5oZWFkZXJz
KTsKKwkJd2Via2l0X3NvdXBfY2FjaGVfZW50cnlfc2V0X2ZyZXNobmVzcyAoZW50cnksIG1zZywg
Y2FjaGUpOworCX0KK30KKworR0lucHV0U3RyZWFtICoKK3dlYmtpdF9zb3VwX2NhY2hlX3NlbmRf
cmVzcG9uc2UgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsIFNvdXBNZXNzYWdlICptc2cpCit7CisJ
Y2hhciAqa2V5OworCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeTsKKwljaGFyICpjdXJyZW50
X2FnZTsKKwlHSW5wdXRTdHJlYW0gKnN0cmVhbSA9IE5VTEw7CisJR0ZpbGUgKmZpbGU7CisKKwln
X3JldHVybl92YWxfaWZfZmFpbCAoV0VCS0lUX0lTX1NPVVBfQ0FDSEUgKGNhY2hlKSwgTlVMTCk7
CisJZ19yZXR1cm5fdmFsX2lmX2ZhaWwgKFNPVVBfSVNfTUVTU0FHRSAobXNnKSwgTlVMTCk7CisK
KwlrZXkgPSBzb3VwX21lc3NhZ2VfZ2V0X2NhY2hlX2tleSAobXNnKTsKKwllbnRyeSA9IGdfaGFz
aF90YWJsZV9sb29rdXAgKGNhY2hlLT5wcml2LT5jYWNoZSwga2V5KTsKKwlnX3JldHVybl92YWxf
aWZfZmFpbCAoZW50cnksIE5VTEwpOworCisJLyogSWYgd2UgYXJlIHRvbGQgdG8gc2VuZCBhIHJl
c3BvbnNlIGZyb20gY2FjaGUgYW55IHZhbGlkYXRpb24KKwkgICBpbiBjb3Vyc2UgaXMgb3ZlciBi
eSBub3cgKi8KKwllbnRyeS0+YmVpbmdfdmFsaWRhdGVkID0gRkFMU0U7CisKKwkvKiBIZWFkZXJz
ICovCisJc291cF9tZXNzYWdlX2hlYWRlcnNfZm9yZWFjaCAoZW50cnktPmhlYWRlcnMsCisJCQkJ
ICAgICAgKFNvdXBNZXNzYWdlSGVhZGVyc0ZvcmVhY2hGdW5jKXVwZGF0ZV9oZWFkZXJzLAorCQkJ
CSAgICAgIG1zZy0+cmVzcG9uc2VfaGVhZGVycyk7CisKKwkvKiBBZGQgJ0FnZScgaGVhZGVyIHdp
dGggdGhlIGN1cnJlbnQgYWdlICovCisJY3VycmVudF9hZ2UgPSBnX3N0cmR1cF9wcmludGYgKCIl
ZCIsIHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2dldF9jdXJyZW50X2FnZSAoZW50cnkpKTsKKwlz
b3VwX21lc3NhZ2VfaGVhZGVyc19yZXBsYWNlIChtc2ctPnJlc3BvbnNlX2hlYWRlcnMsCisJCQkJ
ICAgICAgIkFnZSIsCisJCQkJICAgICAgY3VycmVudF9hZ2UpOworCWdfZnJlZSAoY3VycmVudF9h
Z2UpOworCisJLyogVE9ETzogdGhlIG9yaWdpbmFsIGlkZWEgd2FzIHRvIHNhdmUgcmVhZHMsIGJ1
dCBjdXJyZW50IGNvZGUKKwkgICBhc3N1bWVzIHRoYXQgYSBzdHJlYW0gaXMgYWx3YXlzIHJldHVy
bmVkLiBOZWVkIHRvIHJlYWNoCisJICAgc29tZSBhZ3JlZW1lbnQgaGVyZS4gQWxzbyB3ZSBoYXZl
IHRvIGhhbmRsZSB0aGUgc2l0dWF0aW9uCisJICAgd2VyZSB0aGUgZmlsZSB3YXMgbm8gbG9uZ2Vy
IHRoZXJlIChmb3IgZXhhbXBsZSBmaWxlcworCSAgIHJlbW92ZWQgd2l0aG91dCBub3RpZnlpbmcg
dGhlIGNhY2hlICovCisJZmlsZSA9IGdfZmlsZV9uZXdfZm9yX3BhdGggKGVudHJ5LT5maWxlbmFt
ZSk7CisJc3RyZWFtID0gKEdJbnB1dFN0cmVhbSAqKWdfZmlsZV9yZWFkIChmaWxlLCBOVUxMLCBO
VUxMKTsKKworCXJldHVybiBzdHJlYW07Cit9CisKK3N0YXRpYyB2b2lkCityZXF1ZXN0X3N0YXJ0
ZWQgKFNvdXBTZXNzaW9uRmVhdHVyZSAqZmVhdHVyZSwgU291cFNlc3Npb24gKnNlc3Npb24sCisJ
CSBTb3VwTWVzc2FnZSAqbXNnLCBTb3VwU29ja2V0ICpzb2NrZXQpCit7CisJUmVxdWVzdEhlbHBl
ciAqaGVscGVyID0gZ19zbGljZV9uZXcwIChSZXF1ZXN0SGVscGVyKTsKKwloZWxwZXItPnJlcXVl
c3RfdGltZSA9IHRpbWUgKE5VTEwpOworCWhlbHBlci0+ZmVhdHVyZSA9IGZlYXR1cmU7CisJaGVs
cGVyLT5nb3RfaGVhZGVyc19oYW5kbGVyID0gZ19zaWduYWxfY29ubmVjdCAobXNnLCAiZ290LWhl
YWRlcnMiLAorCQkJCQkJCUdfQ0FMTEJBQ0sgKG1zZ19nb3RfaGVhZGVyc19jYiksCisJCQkJCQkJ
aGVscGVyKTsKK30KKworc3RhdGljIHZvaWQKK2F0dGFjaCAoU291cFNlc3Npb25GZWF0dXJlICpm
ZWF0dXJlLCBTb3VwU2Vzc2lvbiAqc2Vzc2lvbikKK3sKKwlXZWJLaXRTb3VwQ2FjaGUgKmNhY2hl
ID0gV0VCS0lUX1NPVVBfQ0FDSEUgKGZlYXR1cmUpOworCWNhY2hlLT5wcml2LT5zZXNzaW9uID0g
c2Vzc2lvbjsKKworCXdlYmtpdF9zb3VwX2NhY2hlX2RlZmF1bHRfZmVhdHVyZV9pbnRlcmZhY2Ut
PmF0dGFjaCAoZmVhdHVyZSwgc2Vzc2lvbik7Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfc291
cF9jYWNoZV9zZXNzaW9uX2ZlYXR1cmVfaW5pdCAoU291cFNlc3Npb25GZWF0dXJlSW50ZXJmYWNl
ICpmZWF0dXJlX2ludGVyZmFjZSwKKwkJCQkJZ3BvaW50ZXIgaW50ZXJmYWNlX2RhdGEpCit7CisJ
d2Via2l0X3NvdXBfY2FjaGVfZGVmYXVsdF9mZWF0dXJlX2ludGVyZmFjZSA9CisJCWdfdHlwZV9k
ZWZhdWx0X2ludGVyZmFjZV9wZWVrIChTT1VQX1RZUEVfU0VTU0lPTl9GRUFUVVJFKTsKKworCWZl
YXR1cmVfaW50ZXJmYWNlLT5hdHRhY2ggPSBhdHRhY2g7CisJZmVhdHVyZV9pbnRlcmZhY2UtPnJl
cXVlc3Rfc3RhcnRlZCA9IHJlcXVlc3Rfc3RhcnRlZDsKK30KKworc3RhdGljIHZvaWQKK3dlYmtp
dF9zb3VwX2NhY2hlX2luaXQgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUpCit7CisJV2ViS2l0U291
cENhY2hlUHJpdmF0ZSAqcHJpdjsKKworCXByaXYgPSBjYWNoZS0+cHJpdiA9IFdFQktJVF9TT1VQ
X0NBQ0hFX0dFVF9QUklWQVRFIChjYWNoZSk7CisKKwlwcml2LT5jYWNoZSA9IGdfaGFzaF90YWJs
ZV9uZXdfZnVsbCAoZ19zdHJfaGFzaCwKKwkJCQkJICAgICBnX3N0cl9lcXVhbCwKKwkJCQkJICAg
ICAoR0Rlc3Ryb3lOb3RpZnkpZ19mcmVlLAorCQkJCQkgICAgIE5VTEwpOworCisJLyogTFJVICov
CisJcHJpdi0+bHJ1X3N0YXJ0ID0gTlVMTDsKKworCS8qICovCisJcHJpdi0+bl9wZW5kaW5nID0g
MDsKKworCS8qIENhY2hlIHNpemUgKi8KKwlwcml2LT5tYXhfc2l6ZSA9IERFRkFVTFRfTUFYX1NJ
WkU7CisJcHJpdi0+bWF4X2VudHJ5X2RhdGFfc2l6ZSA9IHByaXYtPm1heF9zaXplIC8gTUFYX0VO
VFJZX0RBVEFfUEVSQ0VOVEFHRTsKKwlwcml2LT5zaXplID0gMDsKK30KKworc3RhdGljIHZvaWQK
K3JlbW92ZV9jYWNoZV9pdGVtIChncG9pbnRlciBrZXksCisJCSAgIGdwb2ludGVyIHZhbHVlLAor
CQkgICBXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKQoreworCVdlYktpdFNvdXBDYWNoZUVudHJ5ICpl
bnRyeSA9IGdfaGFzaF90YWJsZV9sb29rdXAgKGNhY2hlLT5wcml2LT5jYWNoZSwgKGNvbnN0IGdj
aGFyICopa2V5KTsKKwlpZiAod2Via2l0X3NvdXBfY2FjaGVfZW50cnlfcmVtb3ZlIChjYWNoZSwg
ZW50cnkpKQorCQl3ZWJraXRfc291cF9jYWNoZV9lbnRyeV9mcmVlIChlbnRyeSwgRkFMU0UpOwor
fQorCitzdGF0aWMgdm9pZAord2Via2l0X3NvdXBfY2FjaGVfZmluYWxpemUgKEdPYmplY3QgKm9i
amVjdCkKK3sKKwlXZWJLaXRTb3VwQ2FjaGVQcml2YXRlICpwcml2OworCisJcHJpdiA9IFdFQktJ
VF9TT1VQX0NBQ0hFIChvYmplY3QpLT5wcml2OworCisJZ19oYXNoX3RhYmxlX2ZvcmVhY2ggKHBy
aXYtPmNhY2hlLCAoR0hGdW5jKXJlbW92ZV9jYWNoZV9pdGVtLCBvYmplY3QpOworCWdfaGFzaF90
YWJsZV9kZXN0cm95IChwcml2LT5jYWNoZSk7CisJZ19mcmVlIChwcml2LT5jYWNoZV9kaXIpOwor
CisJZ19saXN0X2ZyZWUgKHByaXYtPmxydV9zdGFydCk7CisJcHJpdi0+bHJ1X3N0YXJ0ID0gTlVM
TDsKKworCUdfT0JKRUNUX0NMQVNTICh3ZWJraXRfc291cF9jYWNoZV9wYXJlbnRfY2xhc3MpLT5m
aW5hbGl6ZSAob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQKK3dlYmtpdF9zb3VwX2NhY2hlX3Nl
dF9wcm9wZXJ0eSAoR09iamVjdCAqb2JqZWN0LCBndWludCBwcm9wX2lkLAorCQkJCWNvbnN0IEdW
YWx1ZSAqdmFsdWUsIEdQYXJhbVNwZWMgKnBzcGVjKQoreworCVdlYktpdFNvdXBDYWNoZVByaXZh
dGUgKnByaXYgPSBXRUJLSVRfU09VUF9DQUNIRSAob2JqZWN0KS0+cHJpdjsKKworCXN3aXRjaCAo
cHJvcF9pZCkgeworCWNhc2UgUFJPUF9DQUNIRV9ESVI6CisJCXByaXYtPmNhY2hlX2RpciA9IGdf
dmFsdWVfZHVwX3N0cmluZyAodmFsdWUpOworCQkvKiBDcmVhdGUgZGlyZWN0b3J5IGlmIGl0IGRv
ZXMgbm90IGV4aXN0IChGSVhNRTogc2hvdWxkIHdlPykgKi8KKwkJaWYgKCFnX2ZpbGVfdGVzdCAo
cHJpdi0+Y2FjaGVfZGlyLCBHX0ZJTEVfVEVTVF9FWElTVFMgfCBHX0ZJTEVfVEVTVF9JU19ESVIp
KQorCQkJZ19ta2Rpcl93aXRoX3BhcmVudHMgKHByaXYtPmNhY2hlX2RpciwgMDcwMCk7CisJCWJy
ZWFrOworCWNhc2UgUFJPUF9DQUNIRV9UWVBFOgorCQlwcml2LT5jYWNoZV90eXBlID0gZ192YWx1
ZV9nZXRfZW51bSAodmFsdWUpOworCQkvKiBUT0RPOiBjbGVhciBwcml2YXRlIGVudHJpZXMgYW5k
IGlzc3VlIGEgd2FybmluZyBpZiBtb3ZpbmcgdG8gc2hhcmVkPyAqLworCQlicmVhazsKKwlkZWZh
dWx0OgorCQlHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVjdCwgcHJvcF9p
ZCwgcHNwZWMpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfc291cF9j
YWNoZV9nZXRfcHJvcGVydHkgKEdPYmplY3QgKm9iamVjdCwgZ3VpbnQgcHJvcF9pZCwKKwkJCQlH
VmFsdWUgKnZhbHVlLCBHUGFyYW1TcGVjICpwc3BlYykKK3sKKwlXZWJLaXRTb3VwQ2FjaGVQcml2
YXRlICpwcml2ID0gV0VCS0lUX1NPVVBfQ0FDSEUgKG9iamVjdCktPnByaXY7CisKKwlzd2l0Y2gg
KHByb3BfaWQpIHsKKwljYXNlIFBST1BfQ0FDSEVfRElSOgorCQlnX3ZhbHVlX3NldF9zdHJpbmcg
KHZhbHVlLCBwcml2LT5jYWNoZV9kaXIpOworCQlicmVhazsKKwljYXNlIFBST1BfQ0FDSEVfVFlQ
RToKKwkJZ192YWx1ZV9zZXRfZW51bSAodmFsdWUsIHByaXYtPmNhY2hlX3R5cGUpOworCQlicmVh
azsKKwlkZWZhdWx0OgorCQlHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQgKG9iamVj
dCwgcHJvcF9pZCwgcHNwZWMpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJr
aXRfc291cF9jYWNoZV9jb25zdHJ1Y3RlZCAoR09iamVjdCAqb2JqZWN0KQoreworCVdlYktpdFNv
dXBDYWNoZVByaXZhdGUgKnByaXY7CisKKwlwcml2ID0gV0VCS0lUX1NPVVBfQ0FDSEUgKG9iamVj
dCktPnByaXY7CisKKwlpZiAoIXByaXYtPmNhY2hlX2RpcikgeworCQkvKiBTZXQgYSBkZWZhdWx0
IGNhY2hlIGRpciwgZGlmZmVyZW50IGZvciBlYWNoIHVzZXIgKi8KKwkJcHJpdi0+Y2FjaGVfZGly
ID0gZ19idWlsZF9maWxlbmFtZSAoZ19nZXRfdXNlcl9jYWNoZV9kaXIgKCksCisJCQkJCQkgICAg
Imh0dHBjYWNoZSIsCisJCQkJCQkgICAgTlVMTCk7CisJCWlmICghZ19maWxlX3Rlc3QgKHByaXYt
PmNhY2hlX2RpciwgR19GSUxFX1RFU1RfRVhJU1RTIHwgR19GSUxFX1RFU1RfSVNfRElSKSkKKwkJ
CWdfbWtkaXJfd2l0aF9wYXJlbnRzIChwcml2LT5jYWNoZV9kaXIsIDA3MDApOworCX0KKworCWlm
IChHX09CSkVDVF9DTEFTUyAod2Via2l0X3NvdXBfY2FjaGVfcGFyZW50X2NsYXNzKS0+Y29uc3Ry
dWN0ZWQpCisJCUdfT0JKRUNUX0NMQVNTICh3ZWJraXRfc291cF9jYWNoZV9wYXJlbnRfY2xhc3Mp
LT5jb25zdHJ1Y3RlZCAob2JqZWN0KTsKK30KKworI2RlZmluZSBXRUJLSVRfU09VUF9DQUNIRV9U
WVBFX1RZUEUgKHdlYmtpdF9zb3VwX2NhY2hlX3R5cGVfZ2V0X3R5cGUgKCkpCitzdGF0aWMgR1R5
cGUKK3dlYmtpdF9zb3VwX2NhY2hlX3R5cGVfZ2V0X3R5cGUgKHZvaWQpCit7CisJc3RhdGljIEdU
eXBlIGNhY2hlX3R5cGUgPSAwOworCisJc3RhdGljIGNvbnN0IEdFbnVtVmFsdWUgY2FjaGVfdHlw
ZXNbXSA9IHsKKwkJeyBXRUJLSVRfU09VUF9DQUNIRV9TSU5HTEVfVVNFUiwgIlNpbmdsZSB1c2Vy
IGNhY2hlIiwgInVzZXIiIH0sCisJCXsgV0VCS0lUX1NPVVBfQ0FDSEVfU0hBUkVELCAiU2hhcmVk
IGNhY2hlIiwgInNoYXJlZCIgfSwKKwkJeyAwLCBOVUxMLCBOVUxMIH0KKwl9OworCisJaWYgKCFj
YWNoZV90eXBlKSB7CisJCWNhY2hlX3R5cGUgPSBnX2VudW1fcmVnaXN0ZXJfc3RhdGljICgiV2Vi
S2l0U291cENhY2hlVHlwZSIsIGNhY2hlX3R5cGVzKTsKKwl9CisJcmV0dXJuIGNhY2hlX3R5cGU7
Cit9CisKK3N0YXRpYyB2b2lkCit3ZWJraXRfc291cF9jYWNoZV9jbGFzc19pbml0IChXZWJLaXRT
b3VwQ2FjaGVDbGFzcyAqY2FjaGVfY2xhc3MpCit7CisJR09iamVjdENsYXNzICpnb2JqZWN0X2Ns
YXNzID0gKEdPYmplY3RDbGFzcyAqKWNhY2hlX2NsYXNzOworCisJZ29iamVjdF9jbGFzcy0+Zmlu
YWxpemUgPSB3ZWJraXRfc291cF9jYWNoZV9maW5hbGl6ZTsKKwlnb2JqZWN0X2NsYXNzLT5jb25z
dHJ1Y3RlZCA9IHdlYmtpdF9zb3VwX2NhY2hlX2NvbnN0cnVjdGVkOworCWdvYmplY3RfY2xhc3Mt
PnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9zb3VwX2NhY2hlX3NldF9wcm9wZXJ0eTsKKwlnb2JqZWN0
X2NsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfc291cF9jYWNoZV9nZXRfcHJvcGVydHk7CisK
KwljYWNoZV9jbGFzcy0+Z2V0X2NhY2hlYWJpbGl0eSA9IGdldF9jYWNoZWFiaWxpdHk7CisKKwln
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5IChnb2JqZWN0X2NsYXNzLCBQUk9QX0NBQ0hF
X0RJUiwKKwkJCQkJIGdfcGFyYW1fc3BlY19zdHJpbmcgKCJjYWNoZS1kaXIiLAorCQkJCQkJCSAg
ICAgICJDYWNoZSBkaXJlY3RvcnkiLAorCQkJCQkJCSAgICAgICJUaGUgZGlyZWN0b3J5IHRvIHN0
b3JlIHRoZSBjYWNoZSBmaWxlcyIsCisJCQkJCQkJICAgICAgTlVMTCwKKwkJCQkJCQkgICAgICBH
X1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKTsKKworCWdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkgKGdvYmplY3RfY2xhc3MsIFBST1BfQ0FDSEVfVFlQRSwK
KwkJCQkJIGdfcGFyYW1fc3BlY19lbnVtICgiY2FjaGUtdHlwZSIsCisJCQkJCQkJICAgICJDYWNo
ZSB0eXBlIiwKKwkJCQkJCQkgICAgIldoZXRoZXIgdGhlIGNhY2hlIGlzIHByaXZhdGUgb3Igc2hh
cmVkIiwKKwkJCQkJCQkgICAgV0VCS0lUX1NPVVBfQ0FDSEVfVFlQRV9UWVBFLAorCQkJCQkJCSAg
ICBXRUJLSVRfU09VUF9DQUNIRV9TSU5HTEVfVVNFUiwKKwkJCQkJCQkgICAgR19QQVJBTV9SRUFE
V1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSk7CisKKwlnX3R5cGVfY2xhc3NfYWRkX3By
aXZhdGUgKGNhY2hlX2NsYXNzLCBzaXplb2YgKFdlYktpdFNvdXBDYWNoZVByaXZhdGUpKTsKK30K
KworLyoqCisgKiB3ZWJraXRfc291cF9jYWNoZV9uZXc6CisgKiBAY2FjaGVfZGlyOiB0aGUgZGly
ZWN0b3J5IHRvIHN0b3JlIHRoZSBjYWNoZWQgZGF0YSwgb3IgJU5VTEwgdG8gdXNlIHRoZSBkZWZh
dWx0IG9uZQorICogQGNhY2hlX3R5cGU6IHRoZSAjV2ViS2l0U291cENhY2hlVHlwZSBvZiB0aGUg
Y2FjaGUKKyAqCisgKiBDcmVhdGVzIGEgbmV3ICNXZWJLaXRTb3VwQ2FjaGUuCisgKgorICogUmV0
dXJuczogYSBuZXcgI1dlYktpdFNvdXBDYWNoZQorICoKKyAqIFNpbmNlOiAyLjI4CisgKiovCitX
ZWJLaXRTb3VwQ2FjaGUgKgord2Via2l0X3NvdXBfY2FjaGVfbmV3IChjb25zdCBjaGFyICpjYWNo
ZV9kaXIsIFdlYktpdFNvdXBDYWNoZVR5cGUgY2FjaGVfdHlwZSkKK3sKKwlyZXR1cm4gZ19vYmpl
Y3RfbmV3IChXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFLAorCQkJICAgICAiY2FjaGUtZGlyIiwgY2Fj
aGVfZGlyLAorCQkJICAgICAiY2FjaGUtdHlwZSIsIGNhY2hlX3R5cGUsCisJCQkgICAgIE5VTEwp
OworfQorCisvKioKKyAqIHdlYmtpdF9zb3VwX2NhY2hlX2hhc19yZXNwb25zZToKKyAqIEBjYWNo
ZTogYSAjV2ViS2l0U291cENhY2hlCisgKiBAbXNnOiBhICNTb3VwTWVzc2FnZQorICoKKyAqIFRo
aXMgZnVuY3Rpb24gY2FsY3VsYXRlcyB3aGV0aGVyIHRoZSBAY2FjaGUgb2JqZWN0IGhhcyBhIHBy
b3BlcgorICogcmVzcG9uc2UgZm9yIHRoZSByZXF1ZXN0IEBtc2cgZ2l2ZW4gdGhlIGZsYWdzIGJv
dGggaW4gdGhlIHJlcXVlc3QKKyAqIGFuZCB0aGUgY2FjaGVkIHJlcGx5IGFuZCB0aGUgdGltZSBl
bGxhcHNlZCBzaW5jZSBpdCB3YXMgY2FjaGVkLgorICoKKyAqIFJldHVybnM6IHdoZXRoZXIgb3Ig
bm90IHRoZSBAY2FjaGUgaGFzIGEgdmFsaWQgcmVzcG9uc2UgZm9yIEBtc2cKKyAqKi8KK1dlYktp
dFNvdXBDYWNoZVJlc3BvbnNlCit3ZWJraXRfc291cF9jYWNoZV9oYXNfcmVzcG9uc2UgKFdlYktp
dFNvdXBDYWNoZSAqY2FjaGUsIFNvdXBNZXNzYWdlICptc2cpCit7CisJY2hhciAqa2V5OworCVdl
YktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeTsKKwljb25zdCBjaGFyICpjYWNoZV9jb250cm9sOwor
CUdIYXNoVGFibGUgKmhhc2g7CisJZ3BvaW50ZXIgdmFsdWU7CisJZ2Jvb2xlYW4gbXVzdF9yZXZh
bGlkYXRlOworCWludCBtYXhfYWdlLCBtYXhfc3RhbGUsIG1pbl9mcmVzaDsKKwlHTGlzdCAqbHJ1
X2l0ZW0sICppdGVtOworCisJa2V5ID0gc291cF9tZXNzYWdlX2dldF9jYWNoZV9rZXkgKG1zZyk7
CisJZW50cnkgPSBnX2hhc2hfdGFibGVfbG9va3VwIChjYWNoZS0+cHJpdi0+Y2FjaGUsIGtleSk7
CisKKwkvKiAxLiBUaGUgcHJlc2VudGVkIFJlcXVlc3QtVVJJIGFuZCB0aGF0IG9mIHN0b3JlZCBy
ZXNwb25zZQorCSAqIG1hdGNoCisJICovCisJaWYgKCFlbnRyeSkKKwkJcmV0dXJuIFdFQktJVF9T
T1VQX0NBQ0hFX1JFU1BPTlNFX1NUQUxFOworCisJLyogSW5jcmVhc2UgaGl0IGNvdW50LiBUYWtl
IHNvcnRpbmcgaW50byBhY2NvdW50ICovCisJZW50cnktPmhpdHMrKzsKKwlscnVfaXRlbSA9IGdf
bGlzdF9maW5kIChjYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0LCBlbnRyeSk7CisJaXRlbSA9IGxydV9p
dGVtOworCXdoaWxlIChpdGVtLT5uZXh0ICYmIGxydV9jb21wYXJlX2Z1bmMgKGl0ZW0tPmRhdGEs
IGl0ZW0tPm5leHQtPmRhdGEpID4gMCkKKwkJaXRlbSA9IGdfbGlzdF9uZXh0IChpdGVtKTsKKwor
CWlmIChpdGVtICE9IGxydV9pdGVtKSB7CisJCWNhY2hlLT5wcml2LT5scnVfc3RhcnQgPSBnX2xp
c3RfcmVtb3ZlX2xpbmsgKGNhY2hlLT5wcml2LT5scnVfc3RhcnQsIGxydV9pdGVtKTsKKwkJaXRl
bSA9IGdfbGlzdF9pbnNlcnRfc29ydGVkIChpdGVtLCBscnVfaXRlbS0+ZGF0YSwgbHJ1X2NvbXBh
cmVfZnVuYyk7CisJCWdfbGlzdF9mcmVlIChscnVfaXRlbSk7CisJfQorCisJaWYgKGVudHJ5LT5k
aXJ0eSB8fCBlbnRyeS0+YmVpbmdfdmFsaWRhdGVkKQorCQlyZXR1cm4gV0VCS0lUX1NPVVBfQ0FD
SEVfUkVTUE9OU0VfU1RBTEU7CisKKwkvKiAyLiBUaGUgcmVxdWVzdCBtZXRob2QgYXNzb2NpYXRl
ZCB3aXRoIHRoZSBzdG9yZWQgcmVzcG9uc2UKKwkgKiAgYWxsb3dzIGl0IHRvIGJlIHVzZWQgZm9y
IHRoZSBwcmVzZW50ZWQgcmVxdWVzdAorCSAqLworCisJLyogSW4gcHJhY3RpY2UgdGhpcyBtZWFu
cyB3ZSBvbmx5IHJldHVybiBvdXIgcmVzb3VyY2UgZm9yIEdFVCwKKwkgKiBjYWNoZWFiaWxpdHkg
Zm9yIG90aGVyIG1ldGhvZHMgaXMgYSBUT0RPIGluIHRoZSBSRkMKKwkgKiAoVE9ETzogYWx0aG91
Z2ggd2UgY291bGQgcmV0dXJuIHRoZSBoZWFkZXJzIGZvciBIRUFECisJICogcHJvYmFibHkpLgor
CSAqLworCWlmIChtc2ctPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpCisJCXJldHVybiBXRUJL
SVRfU09VUF9DQUNIRV9SRVNQT05TRV9TVEFMRTsKKworCS8qIDMuIFNlbGVjdGluZyByZXF1ZXN0
LWhlYWRlcnMgbm9taW5hdGVkIGJ5IHRoZSBzdG9yZWQKKwkgKiByZXNwb25zZSAoaWYgYW55KSBt
YXRjaCB0aG9zZSBwcmVzZW50ZWQuCisJICovCisKKwkvKiBUT0RPICovCisKKwkvKiA0LiBUaGUg
cHJlc2VudGVkIHJlcXVlc3QgYW5kIHN0b3JlZCByZXNwb25zZSBhcmUgZnJlZSBmcm9tCisJICog
ZGlyZWN0aXZlcyB0aGF0IHdvdWxkIHByZXZlbnQgaXRzIHVzZS4KKwkgKi8KKworCW11c3RfcmV2
YWxpZGF0ZSA9IEZBTFNFOworCW1heF9hZ2UgPSBtYXhfc3RhbGUgPSBtaW5fZnJlc2ggPSAtMTsK
KworCWNhY2hlX2NvbnRyb2wgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXQgKG1zZy0+cmVxdWVz
dF9oZWFkZXJzLCAiQ2FjaGUtQ29udHJvbCIpOworCWlmIChjYWNoZV9jb250cm9sKSB7CisJCWhh
c2ggPSBzb3VwX2hlYWRlcl9wYXJzZV9wYXJhbV9saXN0IChjYWNoZV9jb250cm9sKTsKKworCQlp
ZiAoZ19oYXNoX3RhYmxlX2xvb2t1cF9leHRlbmRlZCAoaGFzaCwgIm5vLXN0b3JlIiwgTlVMTCwg
TlVMTCkpIHsKKwkJCWdfaGFzaF90YWJsZV9kZXN0cm95IChoYXNoKTsKKwkJCXJldHVybiBXRUJL
SVRfU09VUF9DQUNIRV9SRVNQT05TRV9TVEFMRTsKKwkJfQorCisJCWlmIChnX2hhc2hfdGFibGVf
bG9va3VwX2V4dGVuZGVkIChoYXNoLCAibm8tY2FjaGUiLCBOVUxMLCBOVUxMKSkgeworCQkJZW50
cnktPm11c3RfcmV2YWxpZGF0ZSA9IFRSVUU7CisJCX0KKworCQlpZiAoZ19oYXNoX3RhYmxlX2xv
b2t1cF9leHRlbmRlZCAoaGFzaCwgIm1heC1hZ2UiLCBOVUxMLCAmdmFsdWUpKSB7CisJCQltYXhf
YWdlID0gKGludClNSU4gKGdfYXNjaWlfc3RydG9sbCAodmFsdWUsIE5VTEwsIDEwKSwgR19NQVhJ
TlQzMik7CisJCX0KKworCQkvKiBtYXgtc3RhbGUgY2FuIGhhdmUgbm8gdmFsdWUgc2V0LCB3ZSBu
ZWVkIHRvIHVzZSBfZXh0ZW5kZWQgKi8KKwkJaWYgKGdfaGFzaF90YWJsZV9sb29rdXBfZXh0ZW5k
ZWQgKGhhc2gsICJtYXgtc3RhbGUiLCBOVUxMLCAmdmFsdWUpKSB7CisJCQlpZiAodmFsdWUpCisJ
CQkJbWF4X3N0YWxlID0gKGludClNSU4gKGdfYXNjaWlfc3RydG9sbCAodmFsdWUsIE5VTEwsIDEw
KSwgR19NQVhJTlQzMik7CisJCQllbHNlCisJCQkJbWF4X3N0YWxlID0gR19NQVhJTlQzMjsKKwkJ
fQorCisJCXZhbHVlID0gZ19oYXNoX3RhYmxlX2xvb2t1cCAoaGFzaCwgIm1pbi1mcmVzaCIpOwor
CQlpZiAodmFsdWUpCisJCQltaW5fZnJlc2ggPSAoaW50KU1JTiAoZ19hc2NpaV9zdHJ0b2xsICh2
YWx1ZSwgTlVMTCwgMTApLCBHX01BWElOVDMyKTsKKworCQlnX2hhc2hfdGFibGVfZGVzdHJveSAo
aGFzaCk7CisKKwkJaWYgKG1heF9hZ2UgIT0gLTEpIHsKKwkJCWd1aW50IGN1cnJlbnRfYWdlID0g
d2Via2l0X3NvdXBfY2FjaGVfZW50cnlfZ2V0X2N1cnJlbnRfYWdlIChlbnRyeSk7CisKKwkJCS8q
IElmIHdlIGFyZSBvdmVyIG1heC1hZ2UgYW5kIG1heC1zdGFsZSBpcyBub3QKKwkJCSAgIHNldCwg
ZG8gbm90IHVzZSB0aGUgdmFsdWUgZnJvbSB0aGUgY2FjaGUKKwkJCSAgIHdpdGhvdXQgdmFsaWRh
dGlvbiAqLworCQkJaWYgKG1heF9hZ2UgPD0gY3VycmVudF9hZ2UgJiYgbWF4X3N0YWxlID09IC0x
KQorCQkJCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9ORUVEU19WQUxJREFUSU9O
OworCQl9CisJfQorCisJLyogNS4gVGhlIHN0b3JlZCByZXNwb25zZSBpcyBlaXRoZXI6IGZyZXNo
LCBhbGxvd2VkIHRvIGJlCisJICogc2VydmVkIHN0YWxlIG9yIHN1Y2Nlc2Z1bGx5IHZhbGlkYXRl
ZAorCSAqLworCS8qIFRPRE8gY29uc2lkZXIgYWxzbyBwcm94eS1yZXZhbGlkYXRlICYgcy1tYXhh
Z2UgKi8KKwlpZiAoZW50cnktPm11c3RfcmV2YWxpZGF0ZSkKKwkJcmV0dXJuIFdFQktJVF9TT1VQ
X0NBQ0hFX1JFU1BPTlNFX05FRURTX1ZBTElEQVRJT047CisKKwlpZiAoIXdlYmtpdF9zb3VwX2Nh
Y2hlX2VudHJ5X2lzX2ZyZXNoX2Vub3VnaCAoZW50cnksIG1pbl9mcmVzaCkpIHsKKwkJLyogTm90
IGZyZXNoLCBjYW4gaXQgYmUgc2VydmVkIHN0YWxlPyAqLworCQlpZiAobWF4X3N0YWxlICE9IC0x
KSB7CisJCQkvKiBHX01BWElOVDMyIG1lYW5zIHdlIGFjY2VwdCBhbnkgc3RhbGVuZXNzICovCisJ
CQlpZiAobWF4X3N0YWxlID09IEdfTUFYSU5UMzIpCisJCQkJcmV0dXJuIFdFQktJVF9TT1VQX0NB
Q0hFX1JFU1BPTlNFX0ZSRVNIOworCisJCQlpZiAoKHdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2dl
dF9jdXJyZW50X2FnZSAoZW50cnkpIC0gZW50cnktPmZyZXNobmVzc19saWZldGltZSkgPD0gbWF4
X3N0YWxlKQorCQkJCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9GUkVTSDsKKwkJ
fQorCisJCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9ORUVEU19WQUxJREFUSU9O
OworCX0KKworCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9GUkVTSDsKK30KKwor
LyoqCisgKiB3ZWJraXRfc291cF9jYWNoZV9nZXRfY2FjaGVhYmlsaXR5OgorICogQGNhY2hlOiBh
ICNXZWJLaXRTb3VwQ2FjaGUKKyAqIEBtc2c6IGEgI1NvdXBNZXNzYWdlCisgKgorICogQ2FsY3Vs
YXRlcyB3aGV0aGVyIHRoZSBAbXNnIGNhbiBiZSBjYWNoZWQgb3Igbm90LgorICoKKyAqIFJldHVy
bnM6IGEgI1dlYktpdFNvdXBDYWNoZWFiaWxpdHkgdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIHRo
ZSBAbXNnIGNhbiBiZSBjYWNoZWQgb3Igbm90LgorICoqLworV2ViS2l0U291cENhY2hlYWJpbGl0
eQord2Via2l0X3NvdXBfY2FjaGVfZ2V0X2NhY2hlYWJpbGl0eSAoV2ViS2l0U291cENhY2hlICpj
YWNoZSwgU291cE1lc3NhZ2UgKm1zZykKK3sKKwlnX3JldHVybl92YWxfaWZfZmFpbCAoV0VCS0lU
X0lTX1NPVVBfQ0FDSEUgKGNhY2hlKSwgV0VCS0lUX1NPVVBfQ0FDSEVfVU5DQUNIRUFCTEUpOwor
CWdfcmV0dXJuX3ZhbF9pZl9mYWlsIChTT1VQX0lTX01FU1NBR0UgKG1zZyksIFdFQktJVF9TT1VQ
X0NBQ0hFX1VOQ0FDSEVBQkxFKTsKKworCXJldHVybiBXRUJLSVRfU09VUF9DQUNIRV9HRVRfQ0xB
U1MgKGNhY2hlKS0+Z2V0X2NhY2hlYWJpbGl0eSAoY2FjaGUsIG1zZyk7Cit9CisKK3N0YXRpYyBn
Ym9vbGVhbgorZm9yY2VfZmx1c2hfdGltZW91dCAoZ3BvaW50ZXIgZGF0YSkKK3sKKwlnYm9vbGVh
biAqZm9yY2VkID0gKGdib29sZWFuICopZGF0YTsKKwkqZm9yY2VkID0gVFJVRTsKKworCXJldHVy
biBGQUxTRTsKK30KKworLyoqCisgKiB3ZWJraXRfc291cF9jYWNoZV9mbHVzaDoKKyAqIEBjYWNo
ZTogYSAjV2ViS2l0U291cENhY2hlCisgKiBAc2Vzc2lvbjogdGhlICNTb3VwU2Vzc2lvbiBhc3Nv
Y2lhdGVkIHdpdGggdGhlIEBjYWNoZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBmb3JjZSBh
bGwgcGVuZGluZyB3cml0ZXMgaW4gdGhlIEBjYWNoZSB0byBiZQorICogY29tbWl0dGVkIHRvIGRp
c2suIEZvciBkb2luZyBzbyBpdCB3aWxsIGl0ZXJhdGUgdGhlICNHTWFpbkNvbnRleHQKKyAqIGFz
c29jaWF0ZWQgd2l0aCB0aGUgQHNlc3Npb24gKHdoaWNoIGNhbiBiZSB0aGUgZGVmYXVsdCBvbmUp
IGFzIGxvbmcKKyAqIGFzIG5lZWRlZC4KKyAqKi8KK3ZvaWQKK3dlYmtpdF9zb3VwX2NhY2hlX2Zs
dXNoIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKQoreworCUdNYWluQ29udGV4dCAqYXN5bmNfY29u
dGV4dDsKKwlTb3VwU2Vzc2lvbiAqc2Vzc2lvbjsKKwlndWludCB0aW1lb3V0X2lkOworCWdib29s
ZWFuIGZvcmNlZCA9IEZBTFNFOworCisJZ19yZXR1cm5faWZfZmFpbCAoV0VCS0lUX0lTX1NPVVBf
Q0FDSEUgKGNhY2hlKSk7CisKKwlzZXNzaW9uID0gY2FjaGUtPnByaXYtPnNlc3Npb247CisJZ19y
ZXR1cm5faWZfZmFpbCAoU09VUF9JU19TRVNTSU9OIChzZXNzaW9uKSk7CisJYXN5bmNfY29udGV4
dCA9IHNvdXBfc2Vzc2lvbl9nZXRfYXN5bmNfY29udGV4dCAoc2Vzc2lvbik7CisKKwkvKiBXZSBn
aXZlIGNhY2hlIDEwIHNlY3MgdG8gZmluaXNoICovCisJdGltZW91dF9pZCA9IGdfdGltZW91dF9h
ZGQgKDEwMDAwLCBmb3JjZV9mbHVzaF90aW1lb3V0LCAmZm9yY2VkKTsKKworCXdoaWxlICghZm9y
Y2VkICYmIGNhY2hlLT5wcml2LT5uX3BlbmRpbmcgPiAwKQorCQlnX21haW5fY29udGV4dF9pdGVy
YXRpb24gKGFzeW5jX2NvbnRleHQsIEZBTFNFKTsKKworCWlmICghZm9yY2VkKQorCQlnX3NvdXJj
ZV9yZW1vdmUgKHRpbWVvdXRfaWQpOworCWVsc2UKKwkJZ193YXJuaW5nICgiQ2FjaGUgZmx1c2gg
ZmluaXNoZWQgZGVzcGl0ZSAlZCBwZW5kaW5nIHJlcXVlc3RzIiwgY2FjaGUtPnByaXYtPm5fcGVu
ZGluZyk7Cit9CisKK3N0YXRpYyB2b2lkCitjbGVhcl9jYWNoZV9pdGVtIChncG9pbnRlciBrZXks
CisJCSAgZ3BvaW50ZXIgdmFsdWUsCisJCSAgV2ViS2l0U291cENhY2hlICpjYWNoZSkKK3sKKwlX
ZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnkgPSBnX2hhc2hfdGFibGVfbG9va3VwIChjYWNoZS0+
cHJpdi0+Y2FjaGUsIChjb25zdCBnY2hhciAqKWtleSk7CisJaWYgKHdlYmtpdF9zb3VwX2NhY2hl
X2VudHJ5X3JlbW92ZSAoY2FjaGUsIGVudHJ5KSkKKwkJd2Via2l0X3NvdXBfY2FjaGVfZW50cnlf
ZnJlZSAoZW50cnksIFRSVUUpOworfQorCisvKioKKyAqIHdlYmtpdF9zb3VwX2NhY2hlX2NsZWFy
OgorICogQGNhY2hlOiBhICNXZWJLaXRTb3VwQ2FjaGUKKyAqCisgKiBXaWxsIHJlbW92ZSBhbGwg
ZW50cmllcyBpbiB0aGUgQGNhY2hlIHBsdXMgYWxsIHRoZSBjYWNoZSBmaWxlcworICogYXNzb2Np
YXRlZCB3aXRoIHRoZW0uCisgKiovCit2b2lkCit3ZWJraXRfc291cF9jYWNoZV9jbGVhciAoV2Vi
S2l0U291cENhY2hlICpjYWNoZSkKK3sKKwlHSGFzaFRhYmxlICpoYXNoOworCisJZ19yZXR1cm5f
aWZfZmFpbCAoV0VCS0lUX0lTX1NPVVBfQ0FDSEUgKGNhY2hlKSk7CisKKwloYXNoID0gY2FjaGUt
PnByaXYtPmNhY2hlOworCWdfcmV0dXJuX2lmX2ZhaWwgKGhhc2gpOworCisJZ19oYXNoX3RhYmxl
X2ZvcmVhY2ggKGhhc2gsIChHSEZ1bmMpY2xlYXJfY2FjaGVfaXRlbSwgY2FjaGUpOworfQorCitT
b3VwTWVzc2FnZSAqCit3ZWJraXRfc291cF9jYWNoZV9nZW5lcmF0ZV9jb25kaXRpb25hbF9yZXF1
ZXN0IChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLCBTb3VwTWVzc2FnZSAqb3JpZ2luYWwpCit7CisJ
U291cE1lc3NhZ2UgKm1zZzsKKwlTb3VwVVJJICp1cmk7CisJV2ViS2l0U291cENhY2hlRW50cnkg
KmVudHJ5OworCWNoYXIgKmtleTsKKwljb25zdCBjaGFyICp2YWx1ZTsKKworCWdfcmV0dXJuX3Zh
bF9pZl9mYWlsIChXRUJLSVRfSVNfU09VUF9DQUNIRSAoY2FjaGUpLCBOVUxMKTsKKwlnX3JldHVy
bl92YWxfaWZfZmFpbCAoU09VUF9JU19NRVNTQUdFIChvcmlnaW5hbCksIE5VTEwpOworCisJLyog
Rmlyc3QgY29weSB0aGUgZGF0YSB3ZSBuZWVkIGZyb20gdGhlIG9yaWdpbmFsIG1lc3NhZ2UgKi8K
Kwl1cmkgPSBzb3VwX21lc3NhZ2VfZ2V0X3VyaSAob3JpZ2luYWwpOworCW1zZyA9IHNvdXBfbWVz
c2FnZV9uZXdfZnJvbV91cmkgKG9yaWdpbmFsLT5tZXRob2QsIHVyaSk7CisKKwlzb3VwX21lc3Nh
Z2VfaGVhZGVyc19mb3JlYWNoIChvcmlnaW5hbC0+cmVxdWVzdF9oZWFkZXJzLAorCQkJCSAgICAg
IChTb3VwTWVzc2FnZUhlYWRlcnNGb3JlYWNoRnVuYyljb3B5X2hlYWRlcnMsCisJCQkJICAgICAg
bXNnLT5yZXF1ZXN0X2hlYWRlcnMpOworCisJLyogTm93IGFkZCB0aGUgdmFsaWRhdG9yIGVudHJp
ZXMgaW4gdGhlIGhlYWRlciBmcm9tIHRoZSBjYWNoZWQKKwkgICBkYXRhICovCisJa2V5ID0gc291
cF9tZXNzYWdlX2dldF9jYWNoZV9rZXkgKG9yaWdpbmFsKTsKKwllbnRyeSA9IGdfaGFzaF90YWJs
ZV9sb29rdXAgKGNhY2hlLT5wcml2LT5jYWNoZSwga2V5KTsKKwlnX2ZyZWUgKGtleSk7CisKKwln
X3JldHVybl92YWxfaWZfZmFpbCAoZW50cnksIE5VTEwpOworCisJZW50cnktPmJlaW5nX3ZhbGlk
YXRlZCA9IFRSVUU7CisKKwl2YWx1ZSA9IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldCAoZW50cnkt
PmhlYWRlcnMsICJMYXN0LU1vZGlmaWVkIik7CisJaWYgKHZhbHVlKQorCQlzb3VwX21lc3NhZ2Vf
aGVhZGVyc19hcHBlbmQgKG1zZy0+cmVxdWVzdF9oZWFkZXJzLAorCQkJCQkgICAgICJJZi1Nb2Rp
ZmllZC1TaW5jZSIsCisJCQkJCSAgICAgdmFsdWUpOworCXZhbHVlID0gc291cF9tZXNzYWdlX2hl
YWRlcnNfZ2V0IChlbnRyeS0+aGVhZGVycywgIkVUYWciKTsKKwlpZiAodmFsdWUpCisJCXNvdXBf
bWVzc2FnZV9oZWFkZXJzX2FwcGVuZCAobXNnLT5yZXF1ZXN0X2hlYWRlcnMsCisJCQkJCSAgICAg
IklmLU5vbmUtTWF0Y2giLAorCQkJCQkgICAgIHZhbHVlKTsKKwlyZXR1cm4gbXNnOworfQorCisj
ZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX0ZJTEUgInNvdXAuY2FjaGUiCisKKyNkZWZpbmUgV0VC
S0lUX1NPVVBfQ0FDSEVfSEVBREVSU19GT1JNQVQgIntzc30iCisjZGVmaW5lIFdFQktJVF9TT1VQ
X0NBQ0hFX1BIRUFERVJTX0ZPUk1BVCAiKHNzYnV1dXV1YSIgV0VCS0lUX1NPVVBfQ0FDSEVfSEVB
REVSU19GT1JNQVQgIikiCisjZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX0VOVFJJRVNfRk9STUFU
ICJhIiBXRUJLSVRfU09VUF9DQUNIRV9QSEVBREVSU19GT1JNQVQKKworLyogQmFzaWNhbGx5IHRo
ZSBzYW1lIGZvcm1hdCB0aGFuIGFib3ZlIGV4Y2VwdCB0aGF0IHNvbWUgc3RyaW5ncyBhcmUKKyAg
IHByZXBlbmRlZCB3aXRoICYuIFRoaXMgd2F5IHRoZSBHVmFyaWFudCByZXR1cm5zIGEgcG9pbnRl
ciB0byB0aGUKKyAgIGRhdGEgaW5zdGVhZCBvZiBkdXBsaWNhdGluZyB0aGUgc3RyaW5nICovCisj
ZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX0RFQ09ERV9IRUFERVJTX0ZPUk1BVCAieyZzJnN9Igor
CitzdGF0aWMgdm9pZAorcGFja19lbnRyeSAoZ3BvaW50ZXIgZGF0YSwKKwkgICAgZ3BvaW50ZXIg
dXNlcl9kYXRhKQoreworCVdlYktpdFNvdXBDYWNoZUVudHJ5ICplbnRyeSA9IChXZWJLaXRTb3Vw
Q2FjaGVFbnRyeSAqKSBkYXRhOworCVNvdXBNZXNzYWdlSGVhZGVyc0l0ZXIgaXRlcjsKKwljb25z
dCBnY2hhciAqaGVhZGVyX2tleSwgKmhlYWRlcl92YWx1ZTsKKwlHVmFyaWFudEJ1aWxkZXIgKmhl
YWRlcnNfYnVpbGRlcjsKKwlHVmFyaWFudEJ1aWxkZXIgKmVudHJpZXNfYnVpbGRlciA9IChHVmFy
aWFudEJ1aWxkZXIgKil1c2VyX2RhdGE7CisKKwkvKiBEbyBub3Qgc3RvcmUgbm9uLWNvbnNvbGlk
YXRlZCBlbnRyaWVzICovCisJaWYgKGVudHJ5LT5kaXJ0eSB8fCBlbnRyeS0+d3JpdGluZyB8fCAh
ZW50cnktPmtleSkKKwkJcmV0dXJuOworCisJLyogUGFjayBoZWFkZXJzICovCisJaGVhZGVyc19i
dWlsZGVyID0gZ192YXJpYW50X2J1aWxkZXJfbmV3IChHX1ZBUklBTlRfVFlQRV9BUlJBWSk7CisJ
c291cF9tZXNzYWdlX2hlYWRlcnNfaXRlcl9pbml0ICgmaXRlciwgZW50cnktPmhlYWRlcnMpOwor
CXdoaWxlIChzb3VwX21lc3NhZ2VfaGVhZGVyc19pdGVyX25leHQgKCZpdGVyLCAmaGVhZGVyX2tl
eSwgJmhlYWRlcl92YWx1ZSkpIHsKKwkJaWYgKGdfdXRmOF92YWxpZGF0ZSAoaGVhZGVyX3ZhbHVl
LCAtMSwgTlVMTCkpCisJCQlnX3ZhcmlhbnRfYnVpbGRlcl9hZGQgKGhlYWRlcnNfYnVpbGRlciwg
V0VCS0lUX1NPVVBfQ0FDSEVfSEVBREVSU19GT1JNQVQsCisJCQkJCSAgICAgICBoZWFkZXJfa2V5
LCBoZWFkZXJfdmFsdWUpOworCX0KKworCS8qIEVudHJ5IGRhdGEgKi8KKwlnX3ZhcmlhbnRfYnVp
bGRlcl9hZGQgKGVudHJpZXNfYnVpbGRlciwgV0VCS0lUX1NPVVBfQ0FDSEVfUEhFQURFUlNfRk9S
TUFULAorCQkJICAgICAgIGVudHJ5LT5rZXksIGVudHJ5LT5maWxlbmFtZSwgZW50cnktPm11c3Rf
cmV2YWxpZGF0ZSwKKwkJCSAgICAgICBlbnRyeS0+ZnJlc2huZXNzX2xpZmV0aW1lLCBlbnRyeS0+
Y29ycmVjdGVkX2luaXRpYWxfYWdlLAorCQkJICAgICAgIGVudHJ5LT5yZXNwb25zZV90aW1lLCBl
bnRyeS0+aGl0cywgZW50cnktPmxlbmd0aCwgaGVhZGVyc19idWlsZGVyKTsKKworCWdfdmFyaWFu
dF9idWlsZGVyX3VucmVmIChoZWFkZXJzX2J1aWxkZXIpOworfQorCit2b2lkCit3ZWJraXRfc291
cF9jYWNoZV9kdW1wIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlKQoreworCVdlYktpdFNvdXBDYWNo
ZVByaXZhdGUgKnByaXYgPSBXRUJLSVRfU09VUF9DQUNIRV9HRVRfUFJJVkFURSAoY2FjaGUpOwor
CWdjaGFyICpmaWxlbmFtZTsKKwlHVmFyaWFudEJ1aWxkZXIgKmVudHJpZXNfYnVpbGRlcjsKKwlH
VmFyaWFudCAqY2FjaGVfdmFyaWFudDsKKworCWlmICghZ19saXN0X2xlbmd0aCAoY2FjaGUtPnBy
aXYtPmxydV9zdGFydCkpCisJCXJldHVybjsKKworCS8qIENyZWF0ZSB0aGUgYnVpbGRlciBhbmQg
aXRlcmF0ZSBvdmVyIGFsbCBlbnRyaWVzICovCisJZW50cmllc19idWlsZGVyID0gZ192YXJpYW50
X2J1aWxkZXJfbmV3IChHX1ZBUklBTlRfVFlQRV9BUlJBWSk7CisJZ19saXN0X2ZvcmVhY2ggKGNh
Y2hlLT5wcml2LT5scnVfc3RhcnQsIHBhY2tfZW50cnksIGVudHJpZXNfYnVpbGRlcik7CisKKwkv
KiBTZXJpYWxpemUgYW5kIGR1bXAgKi8KKwljYWNoZV92YXJpYW50ID0gZ192YXJpYW50X25ldyAo
V0VCS0lUX1NPVVBfQ0FDSEVfRU5UUklFU19GT1JNQVQsIGVudHJpZXNfYnVpbGRlcik7CisJZ192
YXJpYW50X2J1aWxkZXJfdW5yZWYgKGVudHJpZXNfYnVpbGRlcik7CisKKwlmaWxlbmFtZSA9IGdf
YnVpbGRfZmlsZW5hbWUgKHByaXYtPmNhY2hlX2RpciwgV0VCS0lUX1NPVVBfQ0FDSEVfRklMRSwg
TlVMTCk7CisJZ19maWxlX3NldF9jb250ZW50cyAoZmlsZW5hbWUsIChjb25zdCBnY2hhciAqKWdf
dmFyaWFudF9nZXRfZGF0YSAoY2FjaGVfdmFyaWFudCksCisJCQkgICAgIGdfdmFyaWFudF9nZXRf
c2l6ZSAoY2FjaGVfdmFyaWFudCksIE5VTEwpOworCWdfZnJlZSAoZmlsZW5hbWUpOworCWdfdmFy
aWFudF91bnJlZiAoY2FjaGVfdmFyaWFudCk7Cit9CisKK3ZvaWQKK3dlYmtpdF9zb3VwX2NhY2hl
X2xvYWQgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUpCit7CisJZ2NoYXIgKmZpbGVuYW1lID0gTlVM
TCwgKmNvbnRlbnRzID0gTlVMTDsKKwlHVmFyaWFudCAqY2FjaGVfdmFyaWFudDsKKwlHVmFyaWFu
dEl0ZXIgKmVudHJpZXNfaXRlciwgKmhlYWRlcnNfaXRlcjsKKwlHVmFyaWFudFR5cGUgKnZhcmlh
bnRfZm9ybWF0OworCWdzaXplIGxlbmd0aDsKKwlXZWJLaXRTb3VwQ2FjaGVFbnRyeSAqZW50cnk7
CisJV2ViS2l0U291cENhY2hlUHJpdmF0ZSAqcHJpdiA9IGNhY2hlLT5wcml2OworCisJZmlsZW5h
bWUgPSBnX2J1aWxkX2ZpbGVuYW1lIChwcml2LT5jYWNoZV9kaXIsIFdFQktJVF9TT1VQX0NBQ0hF
X0ZJTEUsIE5VTEwpOworCWlmICghZ19maWxlX2dldF9jb250ZW50cyAoZmlsZW5hbWUsICZjb250
ZW50cywgJmxlbmd0aCwgTlVMTCkpIHsKKwkJZ19mcmVlIChmaWxlbmFtZSk7CisJCXJldHVybjsK
Kwl9CisJZ19mcmVlIChmaWxlbmFtZSk7CisKKwl2YXJpYW50X2Zvcm1hdCA9IGdfdmFyaWFudF90
eXBlX25ldyAoV0VCS0lUX1NPVVBfQ0FDSEVfRU5UUklFU19GT1JNQVQpOworCWNhY2hlX3Zhcmlh
bnQgPSBnX3ZhcmlhbnRfbmV3X2Zyb21fZGF0YSAodmFyaWFudF9mb3JtYXQsIChjb25zdCBnY2hh
ciAqKWNvbnRlbnRzLCBsZW5ndGgsIEZBTFNFLCBOVUxMLCBOVUxMKTsKKwlnX3ZhcmlhbnRfdHlw
ZV9mcmVlICh2YXJpYW50X2Zvcm1hdCk7CisKKwlnX3ZhcmlhbnRfZ2V0IChjYWNoZV92YXJpYW50
LCBXRUJLSVRfU09VUF9DQUNIRV9FTlRSSUVTX0ZPUk1BVCwgJmVudHJpZXNfaXRlcik7CisJZW50
cnkgPSBnX3NsaWNlX25ldzAgKFdlYktpdFNvdXBDYWNoZUVudHJ5KTsKKworCXdoaWxlIChnX3Zh
cmlhbnRfaXRlcl9sb29wIChlbnRyaWVzX2l0ZXIsIFdFQktJVF9TT1VQX0NBQ0hFX1BIRUFERVJT
X0ZPUk1BVCwKKwkJCQkgICAgJmVudHJ5LT5rZXksICZlbnRyeS0+ZmlsZW5hbWUsICZlbnRyeS0+
bXVzdF9yZXZhbGlkYXRlLAorCQkJCSAgICAmZW50cnktPmZyZXNobmVzc19saWZldGltZSwgJmVu
dHJ5LT5jb3JyZWN0ZWRfaW5pdGlhbF9hZ2UsCisJCQkJICAgICZlbnRyeS0+cmVzcG9uc2VfdGlt
ZSwgJmVudHJ5LT5oaXRzLCAmZW50cnktPmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZoZWFkZXJzX2l0ZXIpKSB7CisJCWNvbnN0IGdjaGFyICpoZWFkZXJfa2V5
LCAqaGVhZGVyX3ZhbHVlOworCisJCS8qIFNvdXBNZXNzYWdlIEhlYWRlcnMgKi8KKwkJZW50cnkt
PmhlYWRlcnMgPSBzb3VwX21lc3NhZ2VfaGVhZGVyc19uZXcgKFNPVVBfTUVTU0FHRV9IRUFERVJT
X1JFU1BPTlNFKTsKKwkJd2hpbGUgKGdfdmFyaWFudF9pdGVyX2xvb3AgKGhlYWRlcnNfaXRlciwg
V0VCS0lUX1NPVVBfQ0FDSEVfREVDT0RFX0hFQURFUlNfRk9STUFULCAmaGVhZGVyX2tleSwgJmhl
YWRlcl92YWx1ZSkpCisJCQlzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQgKGVudHJ5LT5oZWFk
ZXJzLCBoZWFkZXJfa2V5LCBoZWFkZXJfdmFsdWUpOworCisJCS8qIEluc2VydCBpbiBjYWNoZSAq
LworCQlpZiAoIXdlYmtpdF9zb3VwX2NhY2hlX2VudHJ5X2luc2VydF9ieV9rZXkgKGNhY2hlLCAo
Y29uc3QgZ2NoYXIgKillbnRyeS0+a2V5LCBlbnRyeSwgRkFMU0UpKQorCQkJd2Via2l0X3NvdXBf
Y2FjaGVfZW50cnlfZnJlZSAoZW50cnksIFRSVUUpOworCisJCS8qIE5ldyBlbnRyeSBmb3IgdGhl
IG5leHQgaXRlcmF0aW9uLiBUaGlzIGNyZWF0ZXMgYW4KKwkJICAgZXh0cmEgb2JqZWN0IHRoZSBs
YXN0IGl0ZXJhdGlvbiBidXQgaXQncyB3b3J0aCBpdAorCQkgICBhcyB3ZSBzYXZlIHNldmVyYWwg
aWYncyAqLworCQllbnRyeSA9IGdfc2xpY2VfbmV3MCAoV2ViS2l0U291cENhY2hlRW50cnkpOwor
CX0KKwkvKiBSZW1vdmUgbGFzdCBjcmVhdGVkIGVudHJ5ICovCisJZ19zbGljZV9mcmVlIChXZWJL
aXRTb3VwQ2FjaGVFbnRyeSwgZW50cnkpOworCisJLyogU29ydCBMUlUgKHNob3VsZG4ndCBiZSBu
ZWVkZWQpLiBGaXJzdCByZXZlcnNlIGFzIGVsZW1lbnRzCisJICogYXJlIGFsd2F5cyBwcmVwZW5k
ZWQgd2hlbiBpbnNlcnRpbmcKKwkgKi8KKwljYWNoZS0+cHJpdi0+bHJ1X3N0YXJ0ID0gZ19saXN0
X3JldmVyc2UgKGNhY2hlLT5wcml2LT5scnVfc3RhcnQpOworCWNhY2hlLT5wcml2LT5scnVfc3Rh
cnQgPSBnX2xpc3Rfc29ydCAoY2FjaGUtPnByaXYtPmxydV9zdGFydCwgbHJ1X2NvbXBhcmVfZnVu
Yyk7CisKKwkvKiBmcmVlcyAqLworCWdfdmFyaWFudF9pdGVyX2ZyZWUgKGVudHJpZXNfaXRlcik7
CisJZ192YXJpYW50X3VucmVmIChjYWNoZV92YXJpYW50KTsKK30KKwordm9pZAord2Via2l0X3Nv
dXBfY2FjaGVfc2V0X21heF9zaXplIChXZWJLaXRTb3VwQ2FjaGUgKmNhY2hlLAorCQkJCWd1aW50
IG1heF9zaXplKQoreworCWNhY2hlLT5wcml2LT5tYXhfc2l6ZSA9IG1heF9zaXplOworCWNhY2hl
LT5wcml2LT5tYXhfZW50cnlfZGF0YV9zaXplID0gY2FjaGUtPnByaXYtPm1heF9zaXplIC8gTUFY
X0VOVFJZX0RBVEFfUEVSQ0VOVEFHRTsKK30KKworZ3VpbnQKK3dlYmtpdF9zb3VwX2NhY2hlX2dl
dF9tYXhfc2l6ZSAoV2ViS2l0U291cENhY2hlICpjYWNoZSkKK3sKKwlyZXR1cm4gY2FjaGUtPnBy
aXYtPm1heF9zaXplOworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvY2FjaGUvd2Via2l0L3NvdXAtY2FjaGUuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uOWE2MmJiOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9zb3VwL2NhY2hlL3dlYmtpdC9zb3VwLWNhY2hlLmgKQEAgLTAsMCArMSw5NiBAQAorLyog
LSotIE1vZGU6IEM7IHRhYi13aWR0aDogODsgaW5kZW50LXRhYnMtbW9kZTogdDsgYy1iYXNpYy1v
ZmZzZXQ6IDggLSotICovCisvKgorICogc291cC1jYWNoZS5oOgorICoKKyAqIENvcHlyaWdodCAo
QykgMjAwOSwgMjAxMCBJZ2FsaWEsIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXRUJLSVRfU09VUF9DQUNIRV9ICisj
ZGVmaW5lIFdFQktJVF9TT1VQX0NBQ0hFX0ggMQorCisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRl
ZmluZXMuaD4KKworI2luY2x1ZGUgPGxpYnNvdXAvc291cC10eXBlcy5oPgorI2luY2x1ZGUgPGdp
by9naW8uaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX1NPVVBfQ0FD
SEUgICAgICAgICAgICAod2Via2l0X3NvdXBfY2FjaGVfZ2V0X3R5cGUgKCkpCisjZGVmaW5lIFdF
QktJVF9TT1VQX0NBQ0hFKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NB
U1QgKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFLCBXZWJLaXRTb3VwQ2FjaGUpKQorI2Rl
ZmluZSBXRUJLSVRfU09VUF9DQUNIRV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFT
U19DQVNUICgoa2xhc3MpLCBXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFLCBXZWJLaXRTb3VwQ2FjaGVD
bGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19TT1VQX0NBQ0hFKG9iaikgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFKSkKKyNk
ZWZpbmUgV0VCS0lUX0lTX1NPVVBfQ0FDSEVfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfVFlQRSAoKG9iaiksIFdFQktJVF9UWVBFX1NPVVBfQ0FDSEUpKQorI2RlZmluZSBXRUJLSVRf
U09VUF9DQUNIRV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MgKChv
YmopLCBXRUJLSVRfVFlQRV9TT1VQX0NBQ0hFLCBXZWJLaXRTb3VwQ2FjaGVDbGFzcykpCisKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRTb3VwQ2FjaGUgV2ViS2l0U291cENhY2hlOwordHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdFNvdXBDYWNoZVByaXZhdGUgV2ViS2l0U291cENhY2hlUHJpdmF0ZTsKKwor
dHlwZWRlZiBlbnVtIHsKKwlXRUJLSVRfU09VUF9DQUNIRV9DQUNIRUFCTEUgPSAoMSA8PCAwKSwK
KwlXRUJLSVRfU09VUF9DQUNIRV9VTkNBQ0hFQUJMRSA9ICgxIDw8IDEpLAorCVdFQktJVF9TT1VQ
X0NBQ0hFX0lOVkFMSURBVEVTID0gKDEgPDwgMiksCisJV0VCS0lUX1NPVVBfQ0FDSEVfVkFMSURB
VEVTID0gKDEgPDwgMykKK30gV2ViS2l0U291cENhY2hlYWJpbGl0eTsKKwordHlwZWRlZiBlbnVt
IHsKKwlXRUJLSVRfU09VUF9DQUNIRV9SRVNQT05TRV9GUkVTSCwKKwlXRUJLSVRfU09VUF9DQUNI
RV9SRVNQT05TRV9ORUVEU19WQUxJREFUSU9OLAorCVdFQktJVF9TT1VQX0NBQ0hFX1JFU1BPTlNF
X1NUQUxFCit9IFdlYktpdFNvdXBDYWNoZVJlc3BvbnNlOworCit0eXBlZGVmIGVudW0geworCVdF
QktJVF9TT1VQX0NBQ0hFX1NJTkdMRV9VU0VSLAorCVdFQktJVF9TT1VQX0NBQ0hFX1NIQVJFRAor
fSBXZWJLaXRTb3VwQ2FjaGVUeXBlOworCitzdHJ1Y3QgX1dlYktpdFNvdXBDYWNoZSB7CisJR09i
amVjdCBwYXJlbnRfaW5zdGFuY2U7CisKKwlXZWJLaXRTb3VwQ2FjaGVQcml2YXRlICpwcml2Owor
fTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCUdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7CisKKwkv
KiBtZXRob2RzICovCisJV2ViS2l0U291cENhY2hlYWJpbGl0eSAoKmdldF9jYWNoZWFiaWxpdHkp
KFdlYktpdFNvdXBDYWNoZSAqY2FjaGUsIFNvdXBNZXNzYWdlICptc2cpOworCisJLyogUGFkZGlu
ZyBmb3IgZnV0dXJlIGV4cGFuc2lvbiAqLworCXZvaWQgKCpfbGlic291cF9yZXNlcnZlZDEpKHZv
aWQpOworCXZvaWQgKCpfbGlic291cF9yZXNlcnZlZDIpKHZvaWQpOworCXZvaWQgKCpfbGlic291
cF9yZXNlcnZlZDMpKHZvaWQpOworfSBXZWJLaXRTb3VwQ2FjaGVDbGFzczsKKworV0VCS0lUX0FQ
SSBHVHlwZSAgICAgICAgICAgICB3ZWJraXRfc291cF9jYWNoZV9nZXRfdHlwZSAodm9pZCk7CitX
RUJLSVRfQVBJIFdlYktpdFNvdXBDYWNoZSAgKndlYmtpdF9zb3VwX2NhY2hlX25ldyAoY29uc3Qg
Y2hhciAgKmNhY2hlX2RpciwKKwkJCQkJCSAgICBXZWJLaXRTb3VwQ2FjaGVUeXBlIGNhY2hlX3R5
cGUpOworV0VCS0lUX0FQSSB2b2lkICAgICAgICAgICAgICB3ZWJraXRfc291cF9jYWNoZV9mbHVz
aCAoV2ViS2l0U291cENhY2hlICAgKmNhY2hlKTsKK1dFQktJVF9BUEkgdm9pZCAgICAgICAgICAg
ICAgd2Via2l0X3NvdXBfY2FjaGVfY2xlYXIgKFdlYktpdFNvdXBDYWNoZSAgICpjYWNoZSk7CisK
K1dFQktJVF9BUEkgdm9pZCAgICAgICAgICAgICAgd2Via2l0X3NvdXBfY2FjaGVfZHVtcCAoV2Vi
S2l0U291cENhY2hlICpjYWNoZSk7CitXRUJLSVRfQVBJIHZvaWQgICAgICAgICAgICAgIHdlYmtp
dF9zb3VwX2NhY2hlX2xvYWQgKFdlYktpdFNvdXBDYWNoZSAqY2FjaGUpOworCitXRUJLSVRfQVBJ
IHZvaWQgICAgICAgICAgICAgIHdlYmtpdF9zb3VwX2NhY2hlX3NldF9tYXhfc2l6ZSAoV2ViS2l0
U291cENhY2hlICpjYWNoZSwKKwkJCQkJCQkgICAgIGd1aW50IG1heF9zaXplKTsKK1dFQktJVF9B
UEkgZ3VpbnQgICAgICAgICAgICAgd2Via2l0X3NvdXBfY2FjaGVfZ2V0X21heF9zaXplIChXZWJL
aXRTb3VwQ2FjaGUgKmNhY2hlKTsKKworR19FTkRfREVDTFMKKworCisjZW5kaWYgLyogV0VCS0lU
X1NPVVBfQ0FDSEVfSCAqLworCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9DaGFuZ2VMb2cgYi9X
ZWJLaXRUb29scy9DaGFuZ2VMb2cKaW5kZXggZTliZDMxMC4uOTllZDJlYyAxMDA2NDQKLS0tIGEv
V2ViS2l0VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1dlYktpdFRvb2xzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE0IEBACisyMDEwLTA5LTA2ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2Fs
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtHVEtdIEFkZCBIVFRQIGNhY2hpbmcgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDQyNjEKKworICAgICAgICBBZGRlZCBpbmNsdWRlIHBh
dGhzIGZvciB0aGUgbmV3IHNvdXAgSFRUUCBjYWNoZSBjb2RlLgorCisgICAgICAgICogR05VbWFr
ZWZpbGUuYW06IGFkZGVkIHBhdGhzIGZvciB0aGUgbmV3IHNvdXAgSFRUUCBjYWNoZSBjb2RlCisK
IDIwMTAtMTAtMTIgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9HTlVt
YWtlZmlsZS5hbSBiL1dlYktpdFRvb2xzL0dOVW1ha2VmaWxlLmFtCmluZGV4IDE1OTllODkuLjUy
NTdlY2UgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYktp
dFRvb2xzL0dOVW1ha2VmaWxlLmFtCkBAIC02LDYgKzYsNyBAQCBub2luc3RfUFJPR1JBTVMgKz0g
XAogIyBHdGtMYXVuY2hlcgogUHJvZ3JhbXNfR3RrTGF1bmNoZXJfQ1BQRkxBR1MgPSBcCiAJLUkk
KHNyY2RpcikvV2ViS2l0L2d0ayBcCisJLUkkKHNyY2RpcikvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvY2FjaGUvIFwKIAktSSQodG9wX2J1aWxkZGlyKS9XZWJLaXQvZ3RrIFwKIAktSSQo
dG9wX2J1aWxkZGlyKS9EZXJpdmVkU291cmNlcyBcCiAJJChnbG9iYWxfY3BwZmxhZ3MpIFwKQEAg
LTM4LDYgKzM5LDcgQEAgZHVtcHJlbmRlcnRyZWVfY3BwZmxhZ3MgOj0gXAogCS1JJChzcmNkaXIp
L1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ayBcCiAJLUkkKHNyY2RpcikvV2ViS2l0L2d0
ayBcCiAJLUkkKHNyY2RpcikvV2ViQ29yZS9wbGF0Zm9ybS9ndGsgXAorCS1JJChzcmNkaXIpL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL2NhY2hlLyBcCiAJLUkkKHRvcF9idWlsZGRpcikv
V2ViS2l0L2d0ayBcCiAJLUkkKHRvcF9idWlsZGRpcikvRGVyaXZlZFNvdXJjZXMgXAogCSQoZ2xv
YmFsX2NwcGZsYWdzKSBcCmRpZmYgLS1naXQgYS9hdXRvdG9vbHMvd2Via2l0Lm00IGIvYXV0b3Rv
b2xzL3dlYmtpdC5tNAppbmRleCAzNzlmYThmLi42YjQ0ZjMwIDEwMDY0NAotLS0gYS9hdXRvdG9v
bHMvd2Via2l0Lm00CisrKyBiL2F1dG90b29scy93ZWJraXQubTQKQEAgLTEwOCw3ICsxMDgsNyBA
QCBBQ19ERUZVTl9PTkNFKFtfV0VCS0lUX0NIRUNLX0dMSUJdLAogW2RubAogZG5sIGNoZWNrIGZv
ciBnbGliCiAjIFZlcnNpb24gcmVxdWlyZW1lbnRzCi1HTElCX1JFUVVJUkVEX1ZFUlNJT049Mi4y
MS4zCitHTElCX1JFUVVJUkVEX1ZFUlNJT049Mi4yNAogR09CSkVDVF9SRVFVSVJFRF9WRVJTSU9O
PTIuMAogR1RIUkVBRF9SRVFVSVJFRF9WRVJTSU9OPTIuMAogCi0tIAoxLjcuMQoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70630</attachid>
            <date>2010-10-13 10:56:33 -0700</date>
            <delta_ts>2010-10-13 10:59:25 -0700</delta_ts>
            <desc>WebKitGtk+ to use the new API from the imported SoupURILoader code</desc>
            <filename>0002-WebKitGtk-to-use-the-new-API-from-the-imported-SoupU.patch</filename>
            <type>text/plain</type>
            <size>41762</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">RnJvbSBmM2I0YTc0ZWJjOGI3NWFmYmE2MmQwMDUyNjAwN2Y5MGFhNmI2YzNjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTZXJnaW8gVmlsbGFyIFNlbmluIDxzdmlsbGFyQGlnYWxpYS5j
b20+CkRhdGU6IFdlZCwgMjIgU2VwIDIwMTAgMTA6MTg6MDYgKzAyMDAKU3ViamVjdDogW1BBVENI
IDIvMl0gV2ViS2l0R3RrKyB0byB1c2UgdGhlIG5ldyBBUEkgZnJvbSB0aGUgaW1wb3J0ZWQgU291
cFVSSUxvYWRlciBjb2RlCgotLS0KIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgICAzNiArKwogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlSGFuZGxlSW50ZXJuYWwuaCAgfCAgIDIzICstCiAuLi4vcGxhdGZvcm0vbmV0d29yay9zb3Vw
L1Jlc291cmNlSGFuZGxlU291cC5jcHAgICB8ICA1NjMgKysrKysrKysrLS0tLS0tLS0tLS0KIFdl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdC5oICAgIHwgICAgMyAr
LQogLi4uL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcCAgfCAg
IDIzICsKIFdlYktpdC9ndGsvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICAxNSArCiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkb3dubG9hZC5jcHAgICAgICAgICAg
ICAgICB8ICAgIDggKy0KIDcgZmlsZXMgY2hhbmdlZCwgMzM5IGluc2VydGlvbnMoKyksIDMzMiBk
ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hh
bmdlTG9nCmluZGV4IDBkOTlhMjIuLjkwYjAxMmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTAtMTAtMTMg
IFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViS2l0R3RrKyB0byB1c2UgdGhl
IG5ldyBBUEkgZnJvbSB0aGUgaW1wb3J0ZWQgU291cFVSSUxvYWRlciBjb2RlCisKKyAgICAgICAg
W0dUS10gQWRkIEhUVFAgY2FjaGluZyBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDI2MQorCisgICAgICAgIFJlc291cmNlSGFuZGxlU291
cCBub3cgZG9lcyBldmVyeXRoaW5nIHZpYSBTb3VwVVJJTG9hZGVyLiBUaGlzCisgICAgICAgIG1l
YW5zIHRoYXQgYWxsIFVSTHMgYXJlIGhhbmRsZWQgdmlhIHRoZSBzYW1lIGNvZGUgcGF0aCwgd2hl
cmUKKyAgICAgICAgV2ViQ29yZSBzaW1wbHkgYXNrcyBsaWJzb3VwIGZvciBhIFdlYktpdFNvdXBS
ZXF1ZXN0IGFuZCB0aGUKKyAgICAgICAgcmVxdWVzdCByZXR1cm5zIGFuIGlucHV0IHN0cmVhbS4g
TWFueSBvZiBSZXNvdXJjZUhhbmRsZVNvdXAncyBkYXRhCisgICAgICAgIG1lbWJlcnMgYXJlIG5v
dyBQbGF0Zm9ybVJlZlB0ciBhcyB3ZWxsLCB0byBzaW1wbGlmeSByZWZlcmVuY2UKKyAgICAgICAg
Y291bnRpbmcKKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRl
cm5hbC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6UmVzb3Vy
Y2VIYW5kbGVJbnRlcm5hbCk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291
cmNlSGFuZGxlU291cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUludGVy
bmFsOjp+UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZTo6flJlc291cmNlSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OnJlc3RhcnRlZENh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmdvdENodW5rQ2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6cGFyc2VEYXRhVXJsKToKKyAgICAgICAgKFdlYkNvcmU6OmNsZWFudXBTb3VwUmVx
dWVzdE9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpzZW5kUmVxdWVzdENhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OnN0YXJ0SHR0cCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJj
ZUhhbmRsZTo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNhbmNl
bCk6CisgICAgICAgIChXZWJDb3JlOjpjbG9zZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OnJlYWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpzdGFydEdpbyk6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdC5oOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdDo6dXBkYXRlU291cE1lc3NhZ2UpOgorCiAyMDEwLTA5LTA2ICBT
ZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZUludGVybmFsLmgKaW5kZXggOTZmYmYwMC4uOWNjY2VjZCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oCkBAIC00
Niw2ICs0Niw4IEBACiAjZW5kaWYKIAogI2lmIFVTRShTT1VQKQorI2luY2x1ZGUgInNvdXAtcmVx
dWVzdGVyLmgiCisjaW5jbHVkZSA8R1JlZlB0ci5oPgogI2luY2x1ZGUgPGxpYnNvdXAvc291cC5o
PgogY2xhc3MgRnJhbWU7CiAjZW5kaWYKQEAgLTEwOCwxNSArMTEwLDExIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgICAgICwgbV9mb3JtRGF0YVN0cmVhbShsb2FkZXIpCiAjZW5kaWYK
ICNpZiBVU0UoU09VUCkKLSAgICAgICAgICAgICwgbV9tc2coMCkKICAgICAgICAgICAgICwgbV9j
YW5jZWxsZWQoZmFsc2UpCi0gICAgICAgICAgICAsIG1fZ2ZpbGUoMCkKLSAgICAgICAgICAgICwg
bV9pbnB1dFN0cmVhbSgwKQotICAgICAgICAgICAgLCBtX2NhbmNlbGxhYmxlKDApCiAgICAgICAg
ICAgICAsIG1fYnVmZmVyKDApCi0gICAgICAgICAgICAsIG1fYnVmZmVyU2l6ZSgwKQogICAgICAg
ICAgICAgLCBtX3RvdGFsKDApCiAgICAgICAgICAgICAsIG1faWRsZUhhbmRsZXIoMCkKKyAgICAg
ICAgICAgICwgbV9nb3RDaHVua0hhbmRsZXIoMCkKICNlbmRpZgogI2lmIFBMQVRGT1JNKFFUKQog
ICAgICAgICAgICAgLCBtX2pvYigwKQpAQCAtMTMzLDYgKzEzMSw5IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgICAgIG1fdXNlciA9IHVybC51c2VyKCk7CiAgICAgICAgICAgICBtX3Bh
c3MgPSB1cmwucGFzcygpOwogICAgICAgICAgICAgbV9maXJzdFJlcXVlc3QucmVtb3ZlQ3JlZGVu
dGlhbHMoKTsKKyNpZiBVU0UoU09VUCkKKyAgICAgICAgICAgIG1fcmVxdWVzdGVyID0gYWRvcHRQ
bGF0Zm9ybVJlZih3ZWJraXRfc291cF9yZXF1ZXN0ZXJfbmV3KCkpOworI2VuZGlmCiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIH5SZXNvdXJjZUhhbmRsZUludGVybmFsKCk7CkBAIC0xODUs
MTYgKzE4NiwxOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFZlY3RvcjxjaGFyPiBt
X3Bvc3RCeXRlczsKICNlbmRpZgogI2lmIFVTRShTT1VQKQotICAgICAgICBTb3VwTWVzc2FnZSog
bV9tc2c7CisgICAgICAgIFBsYXRmb3JtUmVmUHRyPFNvdXBNZXNzYWdlPiBtX3NvdXBNZXNzYWdl
OwogICAgICAgICBSZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7CiAgICAgICAgIGJvb2wgbV9j
YW5jZWxsZWQ7Ci0gICAgICAgIEdGaWxlKiBtX2dmaWxlOwotICAgICAgICBHSW5wdXRTdHJlYW0q
IG1faW5wdXRTdHJlYW07Ci0gICAgICAgIEdDYW5jZWxsYWJsZSogbV9jYW5jZWxsYWJsZTsKKyAg
ICAgICAgUGxhdGZvcm1SZWZQdHI8V2ViS2l0U291cFJlcXVlc3Q+IG1fc291cFJlcXVlc3Q7Cisg
ICAgICAgIFBsYXRmb3JtUmVmUHRyPFdlYktpdFNvdXBSZXF1ZXN0ZXI+IG1fcmVxdWVzdGVyOwor
ICAgICAgICBQbGF0Zm9ybVJlZlB0cjxHSW5wdXRTdHJlYW0+IG1faW5wdXRTdHJlYW07CisgICAg
ICAgIFBsYXRmb3JtUmVmUHRyPEdDYW5jZWxsYWJsZT4gbV9jYW5jZWxsYWJsZTsKICAgICAgICAg
Y2hhciogbV9idWZmZXI7Ci0gICAgICAgIGdzaXplIG1fYnVmZmVyU2l6ZSwgbV90b3RhbDsKKyAg
ICAgICAgZ3NpemUgbV90b3RhbDsKICAgICAgICAgZ3VpbnQgbV9pZGxlSGFuZGxlcjsKICAgICAg
ICAgUmVmUHRyPE5ldHdvcmtpbmdDb250ZXh0PiBtX2NvbnRleHQ7CisgICAgICAgIGd1bG9uZyBt
X2dvdENodW5rSGFuZGxlcjsKICNlbmRpZgogI2lmIFBMQVRGT1JNKFFUKQogICAgICAgICBRTmV0
d29ya1JlcGx5SGFuZGxlciogbV9qb2I7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAppbmRleCAwZDg0Mzg4Li5mNzY4ZDhmIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNv
dXAuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxl
U291cC5jcHAKQEAgLTQ1LDggKzQ1LDggQEAKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUludGVy
bmFsLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1
ZmZlci5oIgorI2luY2x1ZGUgInNvdXAtcmVxdWVzdC1odHRwLmgiCiAjaW5jbHVkZSAiVGV4dEVu
Y29kaW5nLmgiCi0KICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5j
bHVkZSA8Z2lvL2dpby5oPgpAQCAtNTgsNiArNTgsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKKyNkZWZpbmUgUkVBRF9CVUZGRVJfU0laRSA4MTkyCisKIGNsYXNzIFdlYkNvcmVTeW5jaHJv
bm91c0xvYWRlciA6IHB1YmxpYyBSZXNvdXJjZUhhbmRsZUNsaWVudCwgcHVibGljIE5vbmNvcHlh
YmxlIHsKIHB1YmxpYzoKICAgICBXZWJDb3JlU3luY2hyb25vdXNMb2FkZXIoUmVzb3VyY2VFcnJv
ciYsIFJlc291cmNlUmVzcG9uc2UgJiwgVmVjdG9yPGNoYXI+Jik7CkBAIC0xMjAsMTYgKzEyMiwx
NiBAQCB2b2lkIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlcjo6cnVuKCkKICAgICAgICAgZ19tYWlu
X2xvb3BfcnVuKG1fbWFpbkxvb3ApOwogfQogCi1zdGF0aWMgdm9pZCBjbGVhbnVwR2lvT3BlcmF0
aW9uKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGJvb2wgaXNEZXN0cm95aW5nKTsKLXN0YXRpYyBi
b29sIHN0YXJ0RGF0YShSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBTdHJpbmcgdXJsU3RyaW5nKTsK
LXN0YXRpYyBib29sIHN0YXJ0R2lvKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIEtVUkwgdXJsKTsK
K3N0YXRpYyB2b2lkIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihSZXNvdXJjZUhhbmRsZSos
IGJvb2wgaXNEZXN0cm95aW5nKTsKK3N0YXRpYyB2b2lkIHNlbmRSZXF1ZXN0Q2FsbGJhY2soR09i
amVjdCosIEdBc3luY1Jlc3VsdCosIGdwb2ludGVyKTsKK3N0YXRpYyB2b2lkIHJlYWRDYWxsYmFj
ayhHT2JqZWN0KiwgR0FzeW5jUmVzdWx0KiwgZ3BvaW50ZXIpOworc3RhdGljIHZvaWQgY2xvc2VD
YWxsYmFjayhHT2JqZWN0KiwgR0FzeW5jUmVzdWx0KiwgZ3BvaW50ZXIpOworc3RhdGljIGJvb2wg
c3RhcnRHaW8oUmVzb3VyY2VIYW5kbGUqLCBLVVJMKTsKIAogUmVzb3VyY2VIYW5kbGVJbnRlcm5h
bDo6flJlc291cmNlSGFuZGxlSW50ZXJuYWwoKQogewotICAgIGlmIChtX21zZykgewotICAgICAg
ICBnX29iamVjdF91bnJlZihtX21zZyk7Ci0gICAgICAgIG1fbXNnID0gMDsKLSAgICB9CisgICAg
aWYgKG1fc291cFJlcXVlc3QpCisgICAgICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKG1f
c291cFJlcXVlc3QuZ2V0KCkpLCAid2Via2l0LXJlc291cmNlIiwgMCk7CiAKICAgICBpZiAobV9p
ZGxlSGFuZGxlcikgewogICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9pZGxlSGFuZGxlcik7CkBA
IC0xMzksMTEgKzE0MSw3IEBAIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6On5SZXNvdXJjZUhhbmRs
ZUludGVybmFsKCkKIAogUmVzb3VyY2VIYW5kbGU6On5SZXNvdXJjZUhhbmRsZSgpCiB7Ci0gICAg
aWYgKGQtPm1fbXNnKQotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNo
ZWQoZC0+bV9tc2csIEdfU0lHTkFMX01BVENIX0RBVEEsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCB0aGlzKTsKLQotICAgIGNsZWFudXBH
aW9PcGVyYXRpb24odGhpcywgdHJ1ZSk7CisgICAgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9u
KHRoaXMsIHRydWUpOwogfQogCiB2b2lkIFJlc291cmNlSGFuZGxlOjpwcmVwYXJlRm9yVVJMKGNv
bnN0IEtVUkwgJnVybCkKQEAgLTE4NSw5ICsxODMsOCBAQCBzdGF0aWMgdm9pZCByZXN0YXJ0ZWRD
YWxsYmFjayhTb3VwTWVzc2FnZSogbXNnLCBncG9pbnRlciBkYXRhKQogICAgIGlmIChkLT5tX2Nh
bmNlbGxlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY2hhciogdXJpID0gc291cF91cmlfdG9f
c3RyaW5nKHNvdXBfbWVzc2FnZV9nZXRfdXJpKG1zZyksIGZhbHNlKTsKLSAgICBTdHJpbmcgbG9j
YXRpb24gPSBTdHJpbmcodXJpKTsKLSAgICBnX2ZyZWUodXJpKTsKKyAgICBHT3duUHRyPGNoYXI+
IHVyaShzb3VwX3VyaV90b19zdHJpbmcoc291cF9tZXNzYWdlX2dldF91cmkobXNnKSwgZmFsc2Up
KTsKKyAgICBTdHJpbmcgbG9jYXRpb24gPSBTdHJpbmc6OmZyb21VVEY4KHVyaS5nZXQoKSk7CiAg
ICAgS1VSTCBuZXdVUkwgPSBLVVJMKGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCksIGxvY2F0
aW9uKTsKIAogICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0ID0gaGFuZGxlLT5maXJzdFJlcXVl
c3QoKTsKQEAgLTIxMyw3ICsyMTAsNyBAQCBzdGF0aWMgdm9pZCByZXN0YXJ0ZWRDYWxsYmFjayhT
b3VwTWVzc2FnZSogbXNnLCBncG9pbnRlciBkYXRhKQogICAgIFN0cmluZyBmaXJzdFBhcnR5U3Ry
aW5nID0gcmVxdWVzdC5maXJzdFBhcnR5Rm9yQ29va2llcygpLnN0cmluZygpOwogICAgIGlmICgh
Zmlyc3RQYXJ0eVN0cmluZy5pc0VtcHR5KCkpIHsKICAgICAgICAgR093blB0cjxTb3VwVVJJPiBm
aXJzdFBhcnR5KHNvdXBfdXJpX25ldyhmaXJzdFBhcnR5U3RyaW5nLnV0ZjgoKS5kYXRhKCkpKTsK
LSAgICAgICAgc291cF9tZXNzYWdlX3NldF9maXJzdF9wYXJ0eShkLT5tX21zZywgZmlyc3RQYXJ0
eS5nZXQoKSk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfZmlyc3RfcGFydHkoZC0+bV9zb3Vw
TWVzc2FnZS5nZXQoKSwgZmlyc3RQYXJ0eS5nZXQoKSk7CiAgICAgfQogI2VuZGlmCiB9CkBAIC0y
OTMsNTMgKzI5MCw5IEBAIHN0YXRpYyB2b2lkIGdvdENodW5rQ2FsbGJhY2soU291cE1lc3NhZ2Uq
IG1zZywgU291cEJ1ZmZlciogY2h1bmssIGdwb2ludGVyIGRhdGEpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURhdGEoaGFuZGxlLmdldCgpLCBjaHVuay0+ZGF0YSwg
Y2h1bmstPmxlbmd0aCwgZmFsc2UpOwotfQotCi0vLyBDYWxsZWQgYXQgdGhlIGVuZCBvZiB0aGUg
bWVzc2FnZSwgd2l0aCBhbGwgdGhlIG5lY2Vzc2FyeSBhYm91dCB0aGUgbGFzdCBpbmZvcm1hdGlv
bnMuCi0vLyBEb2Vzbid0IGdldCBjYWxsZWQgZm9yIHJlZGlyZWN0cy4KLXN0YXRpYyB2b2lkIGZp
bmlzaGVkQ2FsbGJhY2soU291cFNlc3Npb24gKnNlc3Npb24sIFNvdXBNZXNzYWdlKiBtc2csIGdw
b2ludGVyIGRhdGEpCi17Ci0gICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUgPSBhZG9w
dFJlZihzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGRhdGEpKTsKLSAgICAvLyBUT0RPOiBt
YXliZSB3ZSBzaG91bGQgcnVuIHRoaXMgY29kZSBldmVuIGlmIHRoZXJlJ3Mgbm8gY2xpZW50Pwot
ICAgIGlmICghaGFuZGxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZXNvdXJjZUhhbmRsZUlu
dGVybmFsKiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOwotCi0gICAgUmVzb3VyY2VIYW5kbGVD
bGllbnQqIGNsaWVudCA9IGhhbmRsZS0+Y2xpZW50KCk7Ci0gICAgaWYgKCFjbGllbnQpCi0gICAg
ICAgIHJldHVybjsKIAotICAgIGlmIChkLT5tX2NhbmNlbGxlZCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKFNPVVBfU1RBVFVTX0lTX1RSQU5TUE9SVF9FUlJPUihtc2ctPnN0YXR1c19jb2Rl
KSkgewotICAgICAgICBjaGFyKiB1cmkgPSBzb3VwX3VyaV90b19zdHJpbmcoc291cF9tZXNzYWdl
X2dldF91cmkobXNnKSwgZmFsc2UpOwotICAgICAgICBSZXNvdXJjZUVycm9yIGVycm9yKGdfcXVh
cmtfdG9fc3RyaW5nKFNPVVBfSFRUUF9FUlJPUiksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbXNnLT5zdGF0dXNfY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOjpmcm9tVVRGOChtc2ctPnJlYXNvbl9w
aHJhc2UpKTsKLSAgICAgICAgZ19mcmVlKHVyaSk7Ci0gICAgICAgIGNsaWVudC0+ZGlkRmFpbCho
YW5kbGUuZ2V0KCksIGVycm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICht
c2ctPnN0YXR1c19jb2RlID09IFNPVVBfU1RBVFVTX1VOQVVUSE9SSVpFRCkgewotICAgICAgICBm
aWxsUmVzcG9uc2VGcm9tTWVzc2FnZShtc2csICZkLT5tX3Jlc3BvbnNlKTsKLSAgICAgICAgY2xp
ZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UoaGFuZGxlLmdldCgpLCBkLT5tX3Jlc3BvbnNlKTsKLQot
ICAgICAgICAvLyBXZWJDb3JlIG1pZ2h0IGhhdmUgY2FuY2VsbGVkIHRoZSBqb2IgaW4gdGhlIHdo
aWxlCi0gICAgICAgIGlmIChkLT5tX2NhbmNlbGxlZCkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBpZiAobXNnLT5yZXNwb25zZV9ib2R5LT5kYXRhKQotICAgICAgICAgICAgY2xpZW50
LT5kaWRSZWNlaXZlRGF0YShoYW5kbGUuZ2V0KCksIG1zZy0+cmVzcG9uc2VfYm9keS0+ZGF0YSwg
bXNnLT5yZXNwb25zZV9ib2R5LT5sZW5ndGgsIHRydWUpOwotICAgIH0KLQotICAgIGNsaWVudC0+
ZGlkRmluaXNoTG9hZGluZyhoYW5kbGUuZ2V0KCksIDApOwogfQogCi0vLyBwYXJzZURhdGFVcmwo
KSBpcyB0YWtlbiBmcm9tIHRoZSBDVVJMIGh0dHAgYmFja2VuZC4KIHN0YXRpYyBnYm9vbGVhbiBw
YXJzZURhdGFVcmwoZ3BvaW50ZXIgY2FsbGJhY2tEYXRhKQogewogICAgIFJlc291cmNlSGFuZGxl
KiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGNhbGxiYWNrRGF0YSk7CkBA
IC0zNjQsNyArMzE3LDYgQEAgc3RhdGljIGdib29sZWFuIHBhcnNlRGF0YVVybChncG9pbnRlciBj
YWxsYmFja0RhdGEpCiAgICAgfQogCiAgICAgU3RyaW5nIG1lZGlhVHlwZSA9IHVybC5zdWJzdHJp
bmcoNSwgaW5kZXggLSA1KTsKLSAgICBTdHJpbmcgZGF0YSA9IHVybC5zdWJzdHJpbmcoaW5kZXgg
KyAxKTsKIAogICAgIGJvb2wgaXNCYXNlNjQgPSBtZWRpYVR5cGUuZW5kc1dpdGgoIjtiYXNlNjQi
LCBmYWxzZSk7CiAgICAgaWYgKGlzQmFzZTY0KQpAQCAtMzgwLDQyICszMzIsNDEgQEAgc3RhdGlj
IGdib29sZWFuIHBhcnNlRGF0YVVybChncG9pbnRlciBjYWxsYmFja0RhdGEpCiAgICAgcmVzcG9u
c2Uuc2V0VVJMKGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkpOwogICAgIHJlc3BvbnNlLnNl
dE1pbWVUeXBlKG1pbWVUeXBlKTsKIAotICAgIGlmIChpc0Jhc2U2NCkgewotICAgICAgICBkYXRh
ID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGRhdGEpOwotICAgICAgICByZXNwb25zZS5zZXRU
ZXh0RW5jb2RpbmdOYW1lKGNoYXJzZXQpOwotICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVSZXNw
b25zZShoYW5kbGUsIHJlc3BvbnNlKTsKLQotICAgICAgICAvLyBUaGUgbG9hZCBtYXkgYmUgY2Fu
Y2VsbGVkLCBhbmQgdGhlIGNsaWVudCBtYXkgYmUgZGVzdHJveWVkCi0gICAgICAgIC8vIGJ5IGFu
eSBvZiB0aGUgY2xpZW50IHJlcG9ydGluZyBjYWxscywgc28gd2UgY2hlY2ssIGFuZCBiYWlsCi0g
ICAgICAgIC8vIG91dCBpbiBlaXRoZXIgb2YgdGhvc2UgY2FzZXMuCi0gICAgICAgIGlmIChkLT5t
X2NhbmNlbGxlZCB8fCAhaGFuZGxlLT5jbGllbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgICAgICAvLyBVc2UgdGhlIEdMaWIgQmFzZTY0LCBzaW5jZSBXZWJDb3JlJ3MgZGVj
b2RlciBpc24ndAotICAgICAgICAvLyBnZW5lcmFsLXB1cnBvc2UgYW5kIGZhaWxzIG9uIEFjaWQz
IHRlc3QgOTcgKHdoaXRlc3BhY2UpLgotICAgICAgICBzaXplX3Qgb3V0TGVuZ3RoID0gMDsKLSAg
ICAgICAgY2hhciogb3V0RGF0YSA9IDA7Ci0gICAgICAgIG91dERhdGEgPSByZWludGVycHJldF9j
YXN0PGNoYXIqPihnX2Jhc2U2NF9kZWNvZGUoZGF0YS51dGY4KCkuZGF0YSgpLCAmb3V0TGVuZ3Ro
KSk7Ci0gICAgICAgIGlmIChvdXREYXRhICYmIG91dExlbmd0aCA+IDApCi0gICAgICAgICAgICBj
bGllbnQtPmRpZFJlY2VpdmVEYXRhKGhhbmRsZSwgb3V0RGF0YSwgb3V0TGVuZ3RoLCAwKTsKLSAg
ICAgICAgZ19mcmVlKG91dERhdGEpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFdlIGhhdmUg
dG8gY29udmVydCB0byBVVEYtMTYgZWFybHkgZHVlIHRvIGxpbWl0YXRpb25zIGluIEtVUkwKLSAg
ICAgICAgZGF0YSA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhkYXRhLCBUZXh0RW5jb2Rpbmco
Y2hhcnNldCkpOwotICAgICAgICByZXNwb25zZS5zZXRUZXh0RW5jb2RpbmdOYW1lKCJVVEYtMTYi
KTsKLSAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UoaGFuZGxlLCByZXNwb25zZSk7
Ci0KLSAgICAgICAgaWYgKGQtPm1fY2FuY2VsbGVkIHx8ICFoYW5kbGUtPmNsaWVudCgpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChkYXRhLmxlbmd0aCgpID4gMCkK
LSAgICAgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURhdGEoaGFuZGxlLCByZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPihkYXRhLmNoYXJhY3RlcnMoKSksIGRhdGEubGVuZ3RoKCkgKiBzaXpl
b2YoVUNoYXIpLCAwKTsKLSAgICB9CisgICAgLy8gRm9yIG5vbiBiYXNlNjQgZW5jb2RlZCBkYXRh
IHdlIGhhdmUgdG8gY29udmVydCB0byBVVEYtMTYgZWFybHkKKyAgICAvLyBkdWUgdG8gbGltaXRh
dGlvbnMgaW4gS1VSTAorICAgIHJlc3BvbnNlLnNldFRleHRFbmNvZGluZ05hbWUoaXNCYXNlNjQg
PyBjaGFyc2V0IDogIlVURi0xNiIpOworICAgIGNsaWVudC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGhh
bmRsZSwgcmVzcG9uc2UpOwogCisgICAgLy8gVGhlIGxvYWQgbWF5IGJlIGNhbmNlbGxlZCwgYW5k
IHRoZSBjbGllbnQgbWF5IGJlIGRlc3Ryb3llZAorICAgIC8vIGJ5IGFueSBvZiB0aGUgY2xpZW50
IHJlcG9ydGluZyBjYWxscywgc28gd2UgY2hlY2ssIGFuZCBiYWlsCisgICAgLy8gb3V0IGluIGVp
dGhlciBvZiB0aG9zZSBjYXNlcy4KICAgICBpZiAoZC0+bV9jYW5jZWxsZWQgfHwgIWhhbmRsZS0+
Y2xpZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGNsaWVudC0+ZGlkRmluaXNo
TG9hZGluZyhoYW5kbGUsIDApOworICAgIFNvdXBTZXNzaW9uKiBzZXNzaW9uID0gaGFuZGxlLT5k
ZWZhdWx0U2Vzc2lvbigpOworICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBkLT5tX3Nv
dXBSZXF1ZXN0ID0gYWRvcHRQbGF0Zm9ybVJlZih3ZWJraXRfc291cF9yZXF1ZXN0ZXJfcmVxdWVz
dChkLT5tX3JlcXVlc3Rlci5nZXQoKSwgaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKS5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpLCBzZXNzaW9uLCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAgICBpZiAo
ZXJyb3IpIHsKKyAgICAgICAgZC0+bV9zb3VwUmVxdWVzdCA9IDA7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBkLT5tX2lucHV0U3RyZWFtID0gYWRvcHRQbGF0Zm9ybVJlZih3
ZWJraXRfc291cF9yZXF1ZXN0X3NlbmQoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSwgMCwgJmVycm9y
Lm91dFB0cigpKSk7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIGQtPm1faW5wdXRTdHJlYW0g
PSAwOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZC0+bV9idWZmZXIgPSBz
dGF0aWNfY2FzdDxjaGFyKj4oZ19zbGljZV9hbGxvYzAoUkVBRF9CVUZGRVJfU0laRSkpOworICAg
IGQtPm1fdG90YWwgPSAwOworCisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9p
bnB1dFN0cmVhbS5nZXQoKSksICJ3ZWJraXQtcmVzb3VyY2UiLCBoYW5kbGUpOworICAgIC8vIGJh
bGFuY2VkIGJ5IGEgZGVyZWYoKSBpbiBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24sIHdoaWNo
IHNob3VsZCBhbHdheXMgcnVuCisgICAgaGFuZGxlLT5yZWYoKTsKKworICAgIGQtPm1fY2FuY2Vs
bGFibGUgPSBhZG9wdFBsYXRmb3JtUmVmKGdfY2FuY2VsbGFibGVfbmV3KCkpOworICAgIGdfaW5w
dXRfc3RyZWFtX3JlYWRfYXN5bmMoZC0+bV9pbnB1dFN0cmVhbS5nZXQoKSwgZC0+bV9idWZmZXIs
IFJFQURfQlVGRkVSX1NJWkUsIEdfUFJJT1JJVFlfREVGQVVMVCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGQtPm1fY2FuY2VsbGFibGUuZ2V0KCksIHJlYWRDYWxsYmFjaywgR0lOVF9U
T19QT0lOVEVSKCFpc0Jhc2U2NCkpOwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtNDY5LDYg
KzQyMCwxMzIgQEAgc3RhdGljIHZvaWQgZW5zdXJlU2Vzc2lvbklzSW5pdGlhbGl6ZWQoU291cFNl
c3Npb24qIHNlc3Npb24pCiAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1Qoc2Vzc2lvbiks
ICJ3ZWJraXQtaW5pdCIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KDB4ZGVhZGJlZWYpKTsKIH0K
IAorc3RhdGljIHZvaWQgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKFJlc291cmNlSGFuZGxl
KiBoYW5kbGUsIGJvb2wgaXNEZXN0cm95aW5nID0gZmFsc2UpCit7CisgICAgUmVzb3VyY2VIYW5k
bGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKKworICAgIGlmIChkLT5tX3Nv
dXBSZXF1ZXN0KSB7CisgICAgICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1fc291
cFJlcXVlc3QuZ2V0KCkpLCAid2Via2l0LXJlc291cmNlIiwgMCk7CisgICAgICAgIGQtPm1fc291
cFJlcXVlc3QuY2xlYXIoKTsKKyAgICB9CisKKyAgICBpZiAoZC0+bV9pbnB1dFN0cmVhbSkgewor
ICAgICAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5tX2lucHV0U3RyZWFtLmdldCgp
KSwgIndlYmtpdC1yZXNvdXJjZSIsIDApOworICAgICAgICBkLT5tX2lucHV0U3RyZWFtLmNsZWFy
KCk7CisgICAgfQorCisgICAgZC0+bV9jYW5jZWxsYWJsZS5jbGVhcigpOworCisgICAgaWYgKGQt
Pm1fc291cE1lc3NhZ2UpIHsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9t
YXRjaGVkKGQtPm1fc291cE1lc3NhZ2UuZ2V0KCksIEdfU0lHTkFMX01BVENIX0RBVEEsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCBoYW5k
bGUpOworICAgICAgICBkLT5tX3NvdXBNZXNzYWdlLmNsZWFyKCk7CisgICAgfQorCisgICAgaWYg
KGQtPm1fYnVmZmVyKSB7CisgICAgICAgIGdfc2xpY2VfZnJlZTEoUkVBRF9CVUZGRVJfU0laRSwg
ZC0+bV9idWZmZXIpOworICAgICAgICBkLT5tX2J1ZmZlciA9IDA7CisgICAgfQorCisgICAgaWYg
KCFpc0Rlc3Ryb3lpbmcpCisgICAgICAgIGhhbmRsZS0+ZGVyZWYoKTsKK30KKworc3RhdGljIHZv
aWQgc2VuZFJlcXVlc3RDYWxsYmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCogcmVz
LCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRs
ZSA9IHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxlKj4oZ19vYmplY3RfZ2V0X2RhdGEoc291cmNl
LCAid2Via2l0LXJlc291cmNlIikpOworICAgIGlmICghaGFuZGxlKQorICAgICAgICByZXR1cm47
CisKKyAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgp
OworICAgIFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQgPSBoYW5kbGUtPmNsaWVudCgpOwor
CisgICAgaWYgKGQtPm1fZ290Q2h1bmtIYW5kbGVyKSB7CisgICAgICAgIC8vIE5vIG5lZWQgdG8g
Y2FsbCBnb3RDaHVua0hhbmRsZXIgYW55bW9yZS4gUmVjZWl2ZWQgZGF0YSB3aWxsCisgICAgICAg
IC8vIGJlIHJlcG9ydGVkIGJ5IHJlYWRDYWxsYmFjaworICAgICAgICBpZiAoZ19zaWduYWxfaGFu
ZGxlcl9pc19jb25uZWN0ZWQoZC0+bV9zb3VwTWVzc2FnZS5nZXQoKSwgZC0+bV9nb3RDaHVua0hh
bmRsZXIpKQorICAgICAgICAgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KGQtPm1fc291
cE1lc3NhZ2UuZ2V0KCksIGQtPm1fZ290Q2h1bmtIYW5kbGVyKTsKKyAgICB9CisKKyAgICBpZiAo
ZC0+bV9jYW5jZWxsZWQgfHwgIWNsaWVudCkgeworICAgICAgICBjbGVhbnVwU291cFJlcXVlc3RP
cGVyYXRpb24oaGFuZGxlLmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEdP
d25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBHSW5wdXRTdHJlYW0qIGluID0gd2Via2l0X3NvdXBf
cmVxdWVzdF9zZW5kX2ZpbmlzaChkLT5tX3NvdXBSZXF1ZXN0LmdldCgpLCByZXMsICZlcnJvci5v
dXRQdHIoKSk7CisKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgU291cE1lc3NhZ2UqIHNvdXBN
c2cgPSBkLT5tX3NvdXBNZXNzYWdlLmdldCgpOworICAgICAgICBnYm9vbGVhbiBpc1RyYW5zcG9y
dEVycm9yID0gZC0+bV9zb3VwTWVzc2FnZSAmJiBTT1VQX1NUQVRVU19JU19UUkFOU1BPUlRfRVJS
T1Ioc291cE1zZy0+c3RhdHVzX2NvZGUpOworCisgICAgICAgIGlmIChpc1RyYW5zcG9ydEVycm9y
IHx8IChlcnJvci0+ZG9tYWluID09IEdfSU9fRVJST1IpKSB7CisgICAgICAgICAgICBTb3VwVVJJ
KiB1cmkgPSB3ZWJraXRfc291cF9yZXF1ZXN0X2dldF91cmkoZC0+bV9zb3VwUmVxdWVzdC5nZXQo
KSk7CisgICAgICAgICAgICBHT3duUHRyPGNoYXI+IHVyaVN0cihzb3VwX3VyaV90b19zdHJpbmco
dXJpLCBmYWxzZSkpOworICAgICAgICAgICAgZ2ludCBlcnJvckNvZGUgPSBpc1RyYW5zcG9ydEVy
cm9yID8gc291cE1zZy0+c3RhdHVzX2NvZGUgOiBlcnJvci0+Y29kZTsKKyAgICAgICAgICAgIGNv
bnN0IGdjaGFyKiBlcnJvck1zZyA9IGlzVHJhbnNwb3J0RXJyb3IgPyBzb3VwTXNnLT5yZWFzb25f
cGhyYXNlIDogZXJyb3ItPm1lc3NhZ2U7CisgICAgICAgICAgICBjb25zdCBnY2hhciogcXVhcmtT
dHIgPSBpc1RyYW5zcG9ydEVycm9yID8gZ19xdWFya190b19zdHJpbmcoU09VUF9IVFRQX0VSUk9S
KSA6IGdfcXVhcmtfdG9fc3RyaW5nKEdfSU9fRVJST1IpOworICAgICAgICAgICAgUmVzb3VyY2VF
cnJvciByZXNvdXJjZUVycm9yKHF1YXJrU3RyLCBlcnJvckNvZGUsIHVyaVN0ci5nZXQoKSwgU3Ry
aW5nOjpmcm9tVVRGOChlcnJvck1zZykpOworCisgICAgICAgICAgICBjbGVhbnVwU291cFJlcXVl
c3RPcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKKyAgICAgICAgICAgIGNsaWVudC0+ZGlkRmFpbCho
YW5kbGUuZ2V0KCksIHJlc291cmNlRXJyb3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGQtPm1fc291cE1lc3NhZ2UgJiYgc291cE1lc3NhZ2UtPnN0YXR1
c19jb2RlID09IFNPVVBfU1RBVFVTX1VOQVVUSE9SSVpFRCkgeworICAgICAgICAgICAgZmlsbFJl
c3BvbnNlRnJvbU1lc3NhZ2Uoc291cE1zZywgJmQtPm1fcmVzcG9uc2UpOworICAgICAgICAgICAg
Y2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UoaGFuZGxlLmdldCgpLCBkLT5tX3Jlc3BvbnNlKTsK
KworICAgICAgICAgICAgLy8gV2ViQ29yZSBtaWdodCBoYXZlIGNhbmNlbGxlZCB0aGUgam9iIGlu
IHRoZSB3aGlsZQorICAgICAgICAgICAgaWYgKCFkLT5tX2NhbmNlbGxlZCAmJiBzb3VwTXNnLT5y
ZXNwb25zZV9ib2R5LT5kYXRhKQorICAgICAgICAgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURh
dGEoaGFuZGxlLmdldCgpLCBzb3VwTXNnLT5yZXNwb25zZV9ib2R5LT5kYXRhLCBzb3VwTXNnLT5y
ZXNwb25zZV9ib2R5LT5sZW5ndGgsIHRydWUpOworICAgICAgICB9CisKKyAgICAgICAgLy8gZGlk
UmVjZWl2ZURhdGEgYWJvdmUgbWlnaHQgaGF2ZSBjYW5jZWxsZWQgaXQKKyAgICAgICAgaWYgKGQt
Pm1fY2FuY2VsbGVkIHx8ICFjbGllbnQpIHsKKyAgICAgICAgICAgIGNsZWFudXBTb3VwUmVxdWVz
dE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKGhhbmRsZS5nZXQoKSwgMCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZC0+bV9jYW5jZWxsZWQpIHsKKyAgICAg
ICAgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBkLT5tX2lucHV0U3RyZWFtID0gYWRvcHRQbGF0Zm9ybVJlZihp
bik7CisgICAgZC0+bV9idWZmZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oZ19zbGljZV9hbGxvYzAo
UkVBRF9CVUZGRVJfU0laRSkpOworICAgIGQtPm1fdG90YWwgPSAwOworCisgICAgLy8gcmVhZENh
bGxiYWNrIG5lZWRzIGl0CisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9pbnB1
dFN0cmVhbS5nZXQoKSksICJ3ZWJraXQtcmVzb3VyY2UiLCBoYW5kbGUuZ2V0KCkpOworCisgICAg
Ly8gV2UgbmVlZCB0byBjaGVjayBpZiBpdCdzIGEgZmlsZTogVVJMIGFuZCBpZiBpdCBpcyBhIHJl
Z3VsYXIKKyAgICAvLyBmaWxlIGFzIGl0IGNvdWxkIGJlIGEgZGlyZWN0b3J5LiBJbiB0aGF0IGNh
c2UgU291cCBwcm9wZXJseQorICAgIC8vIHJldHVybnMgYSBzdHJlYW0gd2hvc2UgY29udGVudCBp
cyBhIEhUTUwgd2l0aCBhIGxpc3Qgb2YgZmlsZXMKKyAgICAvLyBpbiB0aGUgZGlyZWN0b3J5Cisg
ICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkucHJv
dG9jb2woKSwgImZpbGUiKQorICAgICAgICAmJiBHX0lTX0ZJTEVfSU5QVVRfU1RSRUFNKGluKSkg
eworICAgICAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOworCisgICAgICAgIHJlc3BvbnNl
LnNldFVSTChoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpKTsKKyAgICAgICAgcmVzcG9uc2Uu
c2V0TWltZVR5cGUod2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfY29udGVudF90eXBlKGQtPm1fc291
cFJlcXVlc3QuZ2V0KCkpKTsKKyAgICAgICAgcmVzcG9uc2Uuc2V0RXhwZWN0ZWRDb250ZW50TGVu
Z3RoKHdlYmtpdF9zb3VwX3JlcXVlc3RfZ2V0X2NvbnRlbnRfbGVuZ3RoKGQtPm1fc291cFJlcXVl
c3QuZ2V0KCkpKTsKKyAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UoaGFuZGxlLmdl
dCgpLCByZXNwb25zZSk7CisKKyAgICAgICAgaWYgKGQtPm1fY2FuY2VsbGVkKSB7CisgICAgICAg
ICAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGdfaW5wdXRfc3RyZWFtX3JlYWRf
YXN5bmMoZC0+bV9pbnB1dFN0cmVhbS5nZXQoKSwgZC0+bV9idWZmZXIsIFJFQURfQlVGRkVSX1NJ
WkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BSSU9SSVRZX0RFRkFVTFQsIGQt
Pm1fY2FuY2VsbGFibGUuZ2V0KCksIHJlYWRDYWxsYmFjaywgMCk7Cit9CisKIHN0YXRpYyBib29s
IHN0YXJ0SHR0cChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQogewogICAgIEFTU0VSVChoYW5kbGUp
OwpAQCAtNDgzLDI2ICs1NjAsMzcgQEAgc3RhdGljIGJvb2wgc3RhcnRIdHRwKFJlc291cmNlSGFu
ZGxlKiBoYW5kbGUpCiAgICAgdXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwogICAgIHJl
cXVlc3Quc2V0VVJMKHVybCk7CiAKLSAgICBkLT5tX21zZyA9IHJlcXVlc3QudG9Tb3VwTWVzc2Fn
ZSgpOwotICAgIGlmICghZC0+bV9tc2cpCisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAg
IGQtPm1fc291cFJlcXVlc3QgPSBhZG9wdFBsYXRmb3JtUmVmKHdlYmtpdF9zb3VwX3JlcXVlc3Rl
cl9yZXF1ZXN0KGQtPm1fcmVxdWVzdGVyLmdldCgpLCB1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEo
KSwgc2Vzc2lvbiwgJmVycm9yLm91dFB0cigpKSk7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAg
IGQtPm1fc291cFJlcXVlc3QgPSAwOwogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSksICJ3
ZWJraXQtcmVzb3VyY2UiLCBoYW5kbGUpOworCisgICAgZC0+bV9zb3VwTWVzc2FnZSA9IGFkb3B0
UGxhdGZvcm1SZWYod2Via2l0X3NvdXBfcmVxdWVzdF9odHRwX2dldF9tZXNzYWdlKFdFQktJVF9T
T1VQX1JFUVVFU1RfSFRUUChkLT5tX3NvdXBSZXF1ZXN0LmdldCgpKSkpOworICAgIGlmICghZC0+
bV9zb3VwTWVzc2FnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU291cE1lc3NhZ2Uq
IHNvdXBNZXNzYWdlID0gZC0+bV9zb3VwTWVzc2FnZS5nZXQoKTsKKyAgICByZXF1ZXN0LnVwZGF0
ZVNvdXBNZXNzYWdlKHNvdXBNZXNzYWdlKTsKIAogICAgIGlmICghaGFuZGxlLT5zaG91bGRDb250
ZW50U25pZmYoKSkKLSAgICAgICAgc291cF9tZXNzYWdlX2Rpc2FibGVfZmVhdHVyZShkLT5tX21z
ZywgU09VUF9UWVBFX0NPTlRFTlRfU05JRkZFUik7CisgICAgICAgIHNvdXBfbWVzc2FnZV9kaXNh
YmxlX2ZlYXR1cmUoc291cE1lc3NhZ2UsIFNPVVBfVFlQRV9DT05URU5UX1NOSUZGRVIpOwogCi0g
ICAgZ19zaWduYWxfY29ubmVjdChkLT5tX21zZywgInJlc3RhcnRlZCIsIEdfQ0FMTEJBQ0socmVz
dGFydGVkQ2FsbGJhY2spLCBoYW5kbGUpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoZC0+bV9tc2cs
ICJnb3QtaGVhZGVycyIsIEdfQ0FMTEJBQ0soZ290SGVhZGVyc0NhbGxiYWNrKSwgaGFuZGxlKTsK
LSAgICBnX3NpZ25hbF9jb25uZWN0KGQtPm1fbXNnLCAiY29udGVudC1zbmlmZmVkIiwgR19DQUxM
QkFDSyhjb250ZW50U25pZmZlZENhbGxiYWNrKSwgaGFuZGxlKTsKLSAgICBnX3NpZ25hbF9jb25u
ZWN0KGQtPm1fbXNnLCAiZ290LWNodW5rIiwgR19DQUxMQkFDSyhnb3RDaHVua0NhbGxiYWNrKSwg
aGFuZGxlKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0KHNvdXBNZXNzYWdlLCAicmVzdGFydGVkIiwg
R19DQUxMQkFDSyhyZXN0YXJ0ZWRDYWxsYmFjayksIGhhbmRsZSk7CisgICAgZ19zaWduYWxfY29u
bmVjdChzb3VwTWVzc2FnZSwgImdvdC1oZWFkZXJzIiwgR19DQUxMQkFDSyhnb3RIZWFkZXJzQ2Fs
bGJhY2spLCBoYW5kbGUpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Qoc291cE1lc3NhZ2UsICJjb250
ZW50LXNuaWZmZWQiLCBHX0NBTExCQUNLKGNvbnRlbnRTbmlmZmVkQ2FsbGJhY2spLCBoYW5kbGUp
OworICAgIGQtPm1fZ290Q2h1bmtIYW5kbGVyID0gZ19zaWduYWxfY29ubmVjdChzb3VwTWVzc2Fn
ZSwgImdvdC1jaHVuayIsIEdfQ0FMTEJBQ0soZ290Q2h1bmtDYWxsYmFjayksIGhhbmRsZSk7CiAK
ICNpZmRlZiBIQVZFX0xJQlNPVVBfMl8yOV85MAogICAgIFN0cmluZyBmaXJzdFBhcnR5U3RyaW5n
ID0gcmVxdWVzdC5maXJzdFBhcnR5Rm9yQ29va2llcygpLnN0cmluZygpOwogICAgIGlmICghZmly
c3RQYXJ0eVN0cmluZy5pc0VtcHR5KCkpIHsKICAgICAgICAgR093blB0cjxTb3VwVVJJPiBmaXJz
dFBhcnR5KHNvdXBfdXJpX25ldyhmaXJzdFBhcnR5U3RyaW5nLnV0ZjgoKS5kYXRhKCkpKTsKLSAg
ICAgICAgc291cF9tZXNzYWdlX3NldF9maXJzdF9wYXJ0eShkLT5tX21zZywgZmlyc3RQYXJ0eS5n
ZXQoKSk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfZmlyc3RfcGFydHkoc291cE1lc3NhZ2Us
IGZpcnN0UGFydHkuZ2V0KCkpOwogICAgIH0KICNlbmRpZgotICAgIGdfb2JqZWN0X3NldF9kYXRh
KEdfT0JKRUNUKGQtPm1fbXNnKSwgInJlc291cmNlSGFuZGxlIiwgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oaGFuZGxlKSk7CiAKICAgICBGb3JtRGF0YSogaHR0cEJvZHkgPSBkLT5tX2ZpcnN0UmVx
dWVzdC5odHRwQm9keSgpOwogICAgIGlmIChodHRwQm9keSAmJiAhaHR0cEJvZHktPmlzRW1wdHko
KSkgewpAQCAtNTEyLDcgKzYwMCw3IEBAIHN0YXRpYyBib29sIHN0YXJ0SHR0cChSZXNvdXJjZUhh
bmRsZSogaGFuZGxlKQogICAgICAgICBpZiAobnVtRWxlbWVudHMgPCAyKSB7CiAgICAgICAgICAg
ICBWZWN0b3I8Y2hhcj4gYm9keTsKICAgICAgICAgICAgIGh0dHBCb2R5LT5mbGF0dGVuKGJvZHkp
OwotICAgICAgICAgICAgc291cF9tZXNzYWdlX3NldF9yZXF1ZXN0KGQtPm1fbXNnLCBkLT5tX2Zp
cnN0UmVxdWVzdC5odHRwQ29udGVudFR5cGUoKS51dGY4KCkuZGF0YSgpLAorICAgICAgICAgICAg
c291cF9tZXNzYWdlX3NldF9yZXF1ZXN0KHNvdXBNZXNzYWdlLCBkLT5tX2ZpcnN0UmVxdWVzdC5o
dHRwQ29udGVudFR5cGUoKS51dGY4KCkuZGF0YSgpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNPVVBfTUVNT1JZX0NPUFksIGJvZHkuZGF0YSgpLCBib2R5LnNpemUoKSk7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvKgpAQCAtNTIxLDI3ICs2MDksMjUgQEAg
c3RhdGljIGJvb2wgc3RhcnRIdHRwKFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCiAgICAgICAgICAg
ICAgKiBjb3B5aW5nIGludG8gbWVtb3J5OyBUT0RPOiBzdXBwb3J0IHVwbG9hZCBvZiBub24tbG9j
YWwKICAgICAgICAgICAgICAqICh0aGluayBzZnRwOi8vKSBmaWxlcyBieSB1c2luZyBHSU8/CiAg
ICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X3NldF9hY2N1bXVs
YXRlKGQtPm1fbXNnLT5yZXF1ZXN0X2JvZHksIEZBTFNFKTsKKyAgICAgICAgICAgIHNvdXBfbWVz
c2FnZV9ib2R5X3NldF9hY2N1bXVsYXRlKHNvdXBNZXNzYWdlLT5yZXF1ZXN0X2JvZHksIEZBTFNF
KTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykg
ewogICAgICAgICAgICAgICAgIGNvbnN0IEZvcm1EYXRhRWxlbWVudCYgZWxlbWVudCA9IGh0dHBC
b2R5LT5lbGVtZW50cygpW2ldOwogCiAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQubV90eXBl
ID09IEZvcm1EYXRhRWxlbWVudDo6ZGF0YSkKLSAgICAgICAgICAgICAgICAgICAgc291cF9tZXNz
YWdlX2JvZHlfYXBwZW5kKGQtPm1fbXNnLT5yZXF1ZXN0X2JvZHksIFNPVVBfTUVNT1JZX1RFTVBP
UkFSWSwgZWxlbWVudC5tX2RhdGEuZGF0YSgpLCBlbGVtZW50Lm1fZGF0YS5zaXplKCkpOworICAg
ICAgICAgICAgICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQoc291cE1lc3NhZ2UtPnJl
cXVlc3RfYm9keSwgU09VUF9NRU1PUllfVEVNUE9SQVJZLCBlbGVtZW50Lm1fZGF0YS5kYXRhKCks
IGVsZW1lbnQubV9kYXRhLnNpemUoKSk7CiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICAgICAqIG1hcHBpbmcgZm9yIHVwbG9h
ZGVkIGZpbGVzIGNvZGUgaW5zcGlyZWQgYnkgdGVjaG5pcXVlIHVzZWQgaW4KICAgICAgICAgICAg
ICAgICAgICAgICogbGlic291cCdzIHNpbXBsZS1odHRwZCB0ZXN0CiAgICAgICAgICAgICAgICAg
ICAgICAqLwotICAgICAgICAgICAgICAgICAgICBHRXJyb3IqIGVycm9yID0gMDsKKyAgICAgICAg
ICAgICAgICAgICAgR093blB0cjxHRXJyb3I+IGVycm9yOwogICAgICAgICAgICAgICAgICAgICBD
U3RyaW5nIGZpbGVOYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGVsZW1lbnQubV9maWxl
bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIEdNYXBwZWRGaWxlKiBmaWxlTWFwcGluZyA9IGdf
bWFwcGVkX2ZpbGVfbmV3KGZpbGVOYW1lLmRhdGEoKSwgZmFsc2UsICZlcnJvcik7CisgICAgICAg
ICAgICAgICAgICAgIEdNYXBwZWRGaWxlKiBmaWxlTWFwcGluZyA9IGdfbWFwcGVkX2ZpbGVfbmV3
KGZpbGVOYW1lLmRhdGEoKSwgZmFsc2UsICZlcnJvci5vdXRQdHIoKSk7CiAKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnX2Vycm9yX2Zy
ZWUoZXJyb3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlz
Y29ubmVjdF9tYXRjaGVkKGQtPm1fbXNnLCBHX1NJR05BTF9NQVRDSF9EQVRBLAorICAgICAgICAg
ICAgICAgICAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKHNvdXBN
ZXNzYWdlLCBHX1NJR05BTF9NQVRDSF9EQVRBLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsIGhhbmRsZSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBnX29iamVjdF91bnJlZihkLT5tX21zZyk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkLT5tX21zZyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBk
LT5tX3NvdXBNZXNzYWdlLmNsZWFyKCk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNTQ5LDM4ICs2MzUsMzEgQEAgc3Rh
dGljIGJvb2wgc3RhcnRIdHRwKFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCiAgICAgICAgICAgICAg
ICAgICAgIFNvdXBCdWZmZXIqIHNvdXBCdWZmZXIgPSBzb3VwX2J1ZmZlcl9uZXdfd2l0aF9vd25l
cihnX21hcHBlZF9maWxlX2dldF9jb250ZW50cyhmaWxlTWFwcGluZyksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnX21hcHBlZF9maWxlX2dldF9sZW5ndGgoZmlsZU1hcHBpbmcpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmlsZU1hcHBpbmcsCi0jaWYgR0xJQl9DSEVDS19WRVJTSU9OKDIsIDIxLCAzKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oZ19tYXBwZWRfZmlsZV91bnJl
ZikpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3Rp
Znk+KGdfbWFwcGVkX2ZpbGVfZnJlZSkpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgIHNv
dXBfbWVzc2FnZV9ib2R5X2FwcGVuZF9idWZmZXIoZC0+bV9tc2ctPnJlcXVlc3RfYm9keSwgc291
cEJ1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZF9i
dWZmZXIoc291cE1lc3NhZ2UtPnJlcXVlc3RfYm9keSwgc291cEJ1ZmZlcik7CiAgICAgICAgICAg
ICAgICAgICAgIHNvdXBfYnVmZmVyX2ZyZWUoc291cEJ1ZmZlcik7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgLy8gYmFsYW5jZWQgYnkg
YSBkZXJlZigpIGluIGZpbmlzaGVkQ2FsbGJhY2ssIHdoaWNoIHNob3VsZCBhbHdheXMgcnVuCisg
ICAgLy8gYmFsYW5jZWQgYnkgYSBkZXJlZigpIGluIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlv
biwgd2hpY2ggc2hvdWxkIGFsd2F5cyBydW4KICAgICBoYW5kbGUtPnJlZigpOwogCiAgICAgLy8g
TWFrZSBzdXJlIHdlIGhhdmUgYW4gQWNjZXB0IGhlYWRlciBmb3Igc3VicmVzb3VyY2VzOyBzb21l
IHNpdGVzCiAgICAgLy8gd2FudCB0aGlzIHRvIHNlcnZlIHNvbWUgb2YgdGhlaXIgc3VicmVzb3Vy
Y2VzCi0gICAgaWYgKCFzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfb25lKGQtPm1fbXNnLT5yZXF1
ZXN0X2hlYWRlcnMsICJBY2NlcHQiKSkKLSAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBw
ZW5kKGQtPm1fbXNnLT5yZXF1ZXN0X2hlYWRlcnMsICJBY2NlcHQiLCAiKi8qIik7CisgICAgaWYg
KCFzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfb25lKHNvdXBNZXNzYWdlLT5yZXF1ZXN0X2hlYWRl
cnMsICJBY2NlcHQiKSkKKyAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKHNvdXBN
ZXNzYWdlLT5yZXF1ZXN0X2hlYWRlcnMsICJBY2NlcHQiLCAiKi8qIik7CiAKLSAgICAvLyBCYWxh
bmNlZCBpbiBSZXNvdXJjZUhhbmRsZUludGVybmFsJ3MgZGVzdHJ1Y3Rvcjsgd2UgbmVlZCB0bwot
ICAgIC8vIGtlZXAgb3VyIG93biByZWYsIGJlY2F1c2UgYWZ0ZXIgcXVldWVpbmcgdGhlIG1lc3Nh
Z2UsIHRoZQotICAgIC8vIHNlc3Npb24gb3ducyB0aGUgaW5pdGlhbCByZWZlcmVuY2UuCi0gICAg
Z19vYmplY3RfcmVmKGQtPm1fbXNnKTsKLSAgICBzb3VwX3Nlc3Npb25fcXVldWVfbWVzc2FnZShz
ZXNzaW9uLCBkLT5tX21zZywgZmluaXNoZWRDYWxsYmFjaywgaGFuZGxlKTsKKyAgICBkLT5tX2Nh
bmNlbGxhYmxlID0gYWRvcHRQbGF0Zm9ybVJlZihnX2NhbmNlbGxhYmxlX25ldygpKTsKKyAgICB3
ZWJraXRfc291cF9yZXF1ZXN0X3NlbmRfYXN5bmMoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSwgZC0+
bV9jYW5jZWxsYWJsZS5nZXQoKSwgc2VuZFJlcXVlc3RDYWxsYmFjaywgMCk7CiAKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAogYm9vbCBSZXNvdXJjZUhhbmRsZTo6c3RhcnQoTmV0d29ya2luZ0NvbnRl
eHQqIGNvbnRleHQpCiB7Ci0gICAgQVNTRVJUKCFkLT5tX21zZyk7CisgICAgQVNTRVJUKCFkLT5t
X3NvdXBNZXNzYWdlKTsKIAogICAgIC8vIFRoZSBmcmFtZSBjb3VsZCBiZSBudWxsIGlmIHRoZSBS
ZXNvdXJjZUhhbmRsZSBpcyBub3QgYXNzb2NpYXRlZCB0byBhbnkKICAgICAvLyBGcmFtZSwgZS5n
LiBpZiB3ZSBhcmUgZG93bmxvYWRpbmcgYSBmaWxlLgpAQCAtNjIwLDEwICs2OTksMTAgQEAgYm9v
bCBSZXNvdXJjZUhhbmRsZTo6c3RhcnQoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQpCiB2b2lk
IFJlc291cmNlSGFuZGxlOjpjYW5jZWwoKQogewogICAgIGQtPm1fY2FuY2VsbGVkID0gdHJ1ZTsK
LSAgICBpZiAoZC0+bV9tc2cpCi0gICAgICAgIHNvdXBfc2Vzc2lvbl9jYW5jZWxfbWVzc2FnZShk
ZWZhdWx0U2Vzc2lvbigpLCBkLT5tX21zZywgU09VUF9TVEFUVVNfQ0FOQ0VMTEVEKTsKKyAgICBp
ZiAoZC0+bV9zb3VwTWVzc2FnZSkKKyAgICAgICAgc291cF9zZXNzaW9uX2NhbmNlbF9tZXNzYWdl
KGRlZmF1bHRTZXNzaW9uKCksIGQtPm1fc291cE1lc3NhZ2UuZ2V0KCksIFNPVVBfU1RBVFVTX0NB
TkNFTExFRCk7CiAgICAgZWxzZSBpZiAoZC0+bV9jYW5jZWxsYWJsZSkKLSAgICAgICAgZ19jYW5j
ZWxsYWJsZV9jYW5jZWwoZC0+bV9jYW5jZWxsYWJsZSk7CisgICAgICAgIGdfY2FuY2VsbGFibGVf
Y2FuY2VsKGQtPm1fY2FuY2VsbGFibGUuZ2V0KCkpOwogfQogCiBQYXNzUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gUmVzb3VyY2VIYW5kbGU6OmJ1ZmZlcmVkRGF0YSgpCkBAIC02NjcsMzggKzc0Niw2IEBA
IHZvaWQgUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2lu
Z0NvbnRleHQqIGNvbnRleHQsIGNvbnN0CiAgICAgc3luY0xvYWRlci5ydW4oKTsKIH0KIAotLy8g
R0lPLWJhc2VkIGxvYWRlcgotCi1zdGF0aWMgdm9pZCBjbGVhbnVwR2lvT3BlcmF0aW9uKFJlc291
cmNlSGFuZGxlKiBoYW5kbGUsIGJvb2wgaXNEZXN0cm95aW5nID0gZmFsc2UpCi17Ci0gICAgUmVz
b3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKLQotICAgIGlm
IChkLT5tX2dmaWxlKSB7Ci0gICAgICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1f
Z2ZpbGUpLCAid2Via2l0LXJlc291cmNlIiwgMCk7Ci0gICAgICAgIGdfb2JqZWN0X3VucmVmKGQt
Pm1fZ2ZpbGUpOwotICAgICAgICBkLT5tX2dmaWxlID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoZC0+
bV9jYW5jZWxsYWJsZSkgewotICAgICAgICBnX29iamVjdF91bnJlZihkLT5tX2NhbmNlbGxhYmxl
KTsKLSAgICAgICAgZC0+bV9jYW5jZWxsYWJsZSA9IDA7Ci0gICAgfQotCi0gICAgaWYgKGQtPm1f
aW5wdXRTdHJlYW0pIHsKLSAgICAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9p
bnB1dFN0cmVhbSksICJ3ZWJraXQtcmVzb3VyY2UiLCAwKTsKLSAgICAgICAgZ19vYmplY3RfdW5y
ZWYoZC0+bV9pbnB1dFN0cmVhbSk7Ci0gICAgICAgIGQtPm1faW5wdXRTdHJlYW0gPSAwOwotICAg
IH0KLQotICAgIGlmIChkLT5tX2J1ZmZlcikgewotICAgICAgICBnX2ZyZWUoZC0+bV9idWZmZXIp
OwotICAgICAgICBkLT5tX2J1ZmZlciA9IDA7Ci0gICAgfQotCi0gICAgaWYgKCFpc0Rlc3Ryb3lp
bmcpCi0gICAgICAgIGhhbmRsZS0+ZGVyZWYoKTsKLX0KLQogc3RhdGljIHZvaWQgY2xvc2VDYWxs
YmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzLCBncG9pbnRlcikKIHsKICAg
ICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9IHN0YXRpY19jYXN0PFJlc291cmNlSGFu
ZGxlKj4oZ19vYmplY3RfZ2V0X2RhdGEoc291cmNlLCAid2Via2l0LXJlc291cmNlIikpOwpAQCAt
NzA4LDggKzc1NSw4IEBAIHN0YXRpYyB2b2lkIGNsb3NlQ2FsbGJhY2soR09iamVjdCogc291cmNl
LCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIpCiAgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5h
bCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKICAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCog
Y2xpZW50ID0gaGFuZGxlLT5jbGllbnQoKTsKIAotICAgIGdfaW5wdXRfc3RyZWFtX2Nsb3NlX2Zp
bmlzaChkLT5tX2lucHV0U3RyZWFtLCByZXMsIDApOwotICAgIGNsZWFudXBHaW9PcGVyYXRpb24o
aGFuZGxlLmdldCgpKTsKKyAgICBnX2lucHV0X3N0cmVhbV9jbG9zZV9maW5pc2goZC0+bV9pbnB1
dFN0cmVhbS5nZXQoKSwgcmVzLCAwKTsKKyAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24o
aGFuZGxlLmdldCgpKTsKIAogICAgIC8vIFRoZSBsb2FkIG1heSBoYXZlIGJlZW4gY2FuY2VsbGVk
LCB0aGUgY2xpZW50IG1heSBoYXZlIGJlZW4KICAgICAvLyBkZXN0cm95ZWQgYWxyZWFkeS4gSW4g
c3VjaCBjYXNlcyBjYWxsaW5nIGRpZEZpbmlzaExvYWRpbmcgaXMgYQpAQCAtNzIwLDIxMCArNzY3
LDkyIEBAIHN0YXRpYyB2b2lkIGNsb3NlQ2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNS
ZXN1bHQqIHJlcywgZ3BvaW50ZXIpCiAgICAgY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKGhhbmRs
ZS5nZXQoKSwgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJlYWRDYWxsYmFjayhHT2JqZWN0KiBzb3Vy
Y2UsIEdBc3luY1Jlc3VsdCogcmVzLCBncG9pbnRlcikKK3N0YXRpYyB2b2lkIHJlYWRDYWxsYmFj
ayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCogYXN5bmNSZXN1bHQsIGdwb2ludGVyIGRh
dGEpCiB7CiAgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxS
ZXNvdXJjZUhhbmRsZSo+KGdfb2JqZWN0X2dldF9kYXRhKHNvdXJjZSwgIndlYmtpdC1yZXNvdXJj
ZSIpKTsKICAgICBpZiAoIWhhbmRsZSkKICAgICAgICAgcmV0dXJuOwogCisgICAgYm9vbCBjb252
ZXJ0VG9VVEYxNiA9IHN0YXRpY19jYXN0PGJvb2w+KGRhdGEpOwogICAgIFJlc291cmNlSGFuZGxl
SW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFsKCk7CiAgICAgUmVzb3VyY2VIYW5kbGVD
bGllbnQqIGNsaWVudCA9IGhhbmRsZS0+Y2xpZW50KCk7CiAKICAgICBpZiAoZC0+bV9jYW5jZWxs
ZWQgfHwgIWNsaWVudCkgewotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQo
KSk7CisgICAgICAgIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgR0Vycm9yKiBlcnJvciA9IDA7CisgICAgR093
blB0cjxHRXJyb3I+IGVycm9yOwogCi0gICAgZ3NzaXplIGJ5dGVzUmVhZCA9IGdfaW5wdXRfc3Ry
ZWFtX3JlYWRfZmluaXNoKGQtPm1faW5wdXRTdHJlYW0sIHJlcywgJmVycm9yKTsKKyAgICBnc3Np
emUgYnl0ZXNSZWFkID0gZ19pbnB1dF9zdHJlYW1fcmVhZF9maW5pc2goZC0+bV9pbnB1dFN0cmVh
bS5nZXQoKSwgYXN5bmNSZXN1bHQsICZlcnJvci5vdXRQdHIoKSk7CiAgICAgaWYgKGVycm9yKSB7
Ci0gICAgICAgIGNoYXIqIHVyaSA9IGdfZmlsZV9nZXRfdXJpKGQtPm1fZ2ZpbGUpOwotICAgICAg
ICBSZXNvdXJjZUVycm9yIHJlc291cmNlRXJyb3IoZ19xdWFya190b19zdHJpbmcoR19JT19FUlJP
UiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvci0+Y29kZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaSwKKyAgICAgICAgU291cFVSSSog
dXJpID0gd2Via2l0X3NvdXBfcmVxdWVzdF9nZXRfdXJpKGQtPm1fc291cFJlcXVlc3QuZ2V0KCkp
OworICAgICAgICBHT3duUHRyPGNoYXI+IHVyaVN0cihzb3VwX3VyaV90b19zdHJpbmcodXJpLCBm
YWxzZSkpOworICAgICAgICBSZXNvdXJjZUVycm9yIHJlc291cmNlRXJyb3IoZ19xdWFya190b19z
dHJpbmcoR19JT19FUlJPUiksIGVycm9yLT5jb2RlLCB1cmlTdHIuZ2V0KCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA/IFN0cmluZzo6ZnJvbVVURjgoZXJyb3It
Pm1lc3NhZ2UpIDogU3RyaW5nKCkpOwotICAgICAgICBnX2ZyZWUodXJpKTsKLSAgICAgICAgZ19l
cnJvcl9mcmVlKGVycm9yKTsKLSAgICAgICAgY2xlYW51cEdpb09wZXJhdGlvbihoYW5kbGUuZ2V0
KCkpOworICAgICAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdldCgpKTsK
ICAgICAgICAgY2xpZW50LT5kaWRGYWlsKGhhbmRsZS5nZXQoKSwgcmVzb3VyY2VFcnJvcik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoIWJ5dGVzUmVhZCkgewotICAgICAgICBn
X2lucHV0X3N0cmVhbV9jbG9zZV9hc3luYyhkLT5tX2lucHV0U3RyZWFtLCBHX1BSSU9SSVRZX0RF
RkFVTFQsCisgICAgICAgIGdfaW5wdXRfc3RyZWFtX2Nsb3NlX2FzeW5jKGQtPm1faW5wdXRTdHJl
YW0uZ2V0KCksIEdfUFJJT1JJVFlfREVGQVVMVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwgY2xvc2VDYWxsYmFjaywgMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBkLT5tX3RvdGFsICs9IGJ5dGVzUmVhZDsKLSAgICBjbGllbnQtPmRpZFJlY2VpdmVEYXRh
KGhhbmRsZS5nZXQoKSwgZC0+bV9idWZmZXIsIGJ5dGVzUmVhZCwgZC0+bV90b3RhbCk7Ci0KLSAg
ICAvLyBkaWRSZWNlaXZlRGF0YSBtYXkgY2FuY2VsIHRoZSBsb2FkLCB3aGljaCBtYXkgcmVsZWFz
ZSB0aGUgbGFzdCByZWZlcmVuY2UuCi0gICAgaWYgKGQtPm1fY2FuY2VsbGVkKSB7Ci0gICAgICAg
IGNsZWFudXBHaW9PcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKLSAgICAgICAgcmV0dXJuOworICAg
IGlmIChHX0xJS0VMWSghY29udmVydFRvVVRGMTYpKQorICAgICAgICBjbGllbnQtPmRpZFJlY2Vp
dmVEYXRhKGhhbmRsZS5nZXQoKSwgZC0+bV9idWZmZXIsIGJ5dGVzUmVhZCwgZC0+bV90b3RhbCk7
CisgICAgZWxzZSB7CisgICAgICAgIC8vIFdlIGhhdmUgdG8gY29udmVydCBpdCB0byBVVEYtMTYg
ZHVlIHRvIGxpbWl0YXRpb25zIGluIEtVUkwKKyAgICAgICAgU3RyaW5nIGRhdGEgPSBTdHJpbmc6
OmZyb21VVEY4KGQtPm1fYnVmZmVyLCBieXRlc1JlYWQpOworICAgICAgICBjbGllbnQtPmRpZFJl
Y2VpdmVEYXRhKGhhbmRsZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZGF0
YS5jaGFyYWN0ZXJzKCkpLCBkYXRhLmxlbmd0aCgpICogc2l6ZW9mKFVDaGFyKSwgMCk7CiAgICAg
fQogCi0gICAgZ19pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyhkLT5tX2lucHV0U3RyZWFtLCBkLT5t
X2J1ZmZlciwgZC0+bV9idWZmZXJTaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R19QUklPUklUWV9ERUZBVUxULCBkLT5tX2NhbmNlbGxhYmxlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVhZENhbGxiYWNrLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgb3BlbkNhbGxi
YWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXMsIGdwb2ludGVyKQotewotICAg
IFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5k
bGUqPihnX29iamVjdF9nZXRfZGF0YShzb3VyY2UsICJ3ZWJraXQtcmVzb3VyY2UiKSk7Ci0gICAg
aWYgKCFoYW5kbGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlc291cmNlSGFuZGxlSW50ZXJu
YWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFsKCk7Ci0gICAgUmVzb3VyY2VIYW5kbGVDbGllbnQq
IGNsaWVudCA9IGhhbmRsZS0+Y2xpZW50KCk7Ci0KKyAgICAvLyBkaWRSZWNlaXZlRGF0YSBtYXkg
Y2FuY2VsIHRoZSBsb2FkLCB3aGljaCBtYXkgcmVsZWFzZSB0aGUgbGFzdCByZWZlcmVuY2UuCiAg
ICAgaWYgKGQtPm1fY2FuY2VsbGVkIHx8ICFjbGllbnQpIHsKLSAgICAgICAgY2xlYW51cEdpb09w
ZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgR0Vy
cm9yKiBlcnJvciA9IDA7Ci0gICAgR0ZpbGVJbnB1dFN0cmVhbSogaW4gPSBnX2ZpbGVfcmVhZF9m
aW5pc2goR19GSUxFKHNvdXJjZSksIHJlcywgJmVycm9yKTsKLSAgICBpZiAoZXJyb3IpIHsKLSAg
ICAgICAgY2hhciogdXJpID0gZ19maWxlX2dldF91cmkoZC0+bV9nZmlsZSk7Ci0gICAgICAgIFJl
c291cmNlRXJyb3IgcmVzb3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0cmluZyhHX0lPX0VSUk9SKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLT5jb2RlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXJyb3IgPyBTdHJpbmc6OmZyb21VVEY4KGVycm9yLT5tZXNzYWdlKSA6
IFN0cmluZygpKTsKLSAgICAgICAgZ19mcmVlKHVyaSk7Ci0gICAgICAgIGdfZXJyb3JfZnJlZShl
cnJvcik7Ci0gICAgICAgIGNsZWFudXBHaW9PcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKLSAgICAg
ICAgY2xpZW50LT5kaWRGYWlsKGhhbmRsZS5nZXQoKSwgcmVzb3VyY2VFcnJvcik7CisgICAgICAg
IGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgZC0+bV9pbnB1dFN0cmVhbSA9IEdfSU5QVVRfU1RSRUFNKGluKTsK
LSAgICBkLT5tX2J1ZmZlclNpemUgPSA4MTkyOwotICAgIGQtPm1fYnVmZmVyID0gc3RhdGljX2Nh
c3Q8Y2hhcio+KGdfbWFsbG9jKGQtPm1fYnVmZmVyU2l6ZSkpOwotICAgIGQtPm1fdG90YWwgPSAw
OwotCi0gICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9pbnB1dFN0cmVhbSksICJ3
ZWJraXQtcmVzb3VyY2UiLCBoYW5kbGUuZ2V0KCkpOwotICAgIGdfaW5wdXRfc3RyZWFtX3JlYWRf
YXN5bmMoZC0+bV9pbnB1dFN0cmVhbSwgZC0+bV9idWZmZXIsIGQtPm1fYnVmZmVyU2l6ZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUFJJT1JJVFlfREVGQVVMVCwgZC0+bV9jYW5j
ZWxsYWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRDYWxsYmFjaywgMCk7
CisgICAgZ19pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyhkLT5tX2lucHV0U3RyZWFtLmdldCgpLCBk
LT5tX2J1ZmZlciwgUkVBRF9CVUZGRVJfU0laRSwgR19QUklPUklUWV9ERUZBVUxULAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZC0+bV9jYW5jZWxsYWJsZS5nZXQoKSwgcmVhZENhbGxi
YWNrLCBkYXRhKTsKIH0KIAotc3RhdGljIHZvaWQgcXVlcnlJbmZvQ2FsbGJhY2soR09iamVjdCog
c291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIpCi17Ci0gICAgUmVmUHRyPFJlc291
cmNlSGFuZGxlPiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGdfb2JqZWN0
X2dldF9kYXRhKHNvdXJjZSwgIndlYmtpdC1yZXNvdXJjZSIpKTsKLSAgICBpZiAoIWhhbmRsZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRs
ZS0+Z2V0SW50ZXJuYWwoKTsKLSAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0gaGFu
ZGxlLT5jbGllbnQoKTsKLQotICAgIGlmIChkLT5tX2NhbmNlbGxlZCkgewotICAgICAgICBjbGVh
bnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOwotCi0gICAgY2hhciogdXJpID0gZ19maWxl
X2dldF91cmkoZC0+bV9nZmlsZSk7Ci0gICAgcmVzcG9uc2Uuc2V0VVJMKEtVUkwoS1VSTCgpLCB1
cmkpKTsKLSAgICBnX2ZyZWUodXJpKTsKLQotICAgIEdFcnJvciogZXJyb3IgPSAwOwotICAgIEdG
aWxlSW5mbyogaW5mbyA9IGdfZmlsZV9xdWVyeV9pbmZvX2ZpbmlzaChkLT5tX2dmaWxlLCByZXMs
ICZlcnJvcik7Ci0KLSAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgLy8gRklYTUU6IHRvIGJlIGFi
bGUgdG8gaGFuZGxlIGZ0cCBVUklzIHByb3Blcmx5LCB3ZSBtdXN0Ci0gICAgICAgIC8vIGNoZWNr
IGlmIHRoZSBlcnJvciBpcyBHX0lPX0VSUk9SX05PVF9NT1VOVEVELCBhbmQgaWYgc28sCi0gICAg
ICAgIC8vIGNhbGwgZ19maWxlX21vdW50X2VuY2xvc2luZ192b2x1bWUoKSB0byBtb3VudCB0aGUg
ZnRwCi0gICAgICAgIC8vIHNlcnZlciAoYW5kIHRoZW4ga2VlcCB0cmFjayBvZiB0aGUgZmFjdCB0
aGF0IHdlIG1vdW50ZWQgaXQsCi0gICAgICAgIC8vIGFuZCBzZXQgYSB0aW1lb3V0IHRvIHVubW91
bnQgaXQgbGF0ZXIgYWZ0ZXIgaXQncyBiZWVuIGlkbGUKLSAgICAgICAgLy8gZm9yIGEgd2hpbGUp
LgotICAgICAgICBjaGFyKiB1cmkgPSBnX2ZpbGVfZ2V0X3VyaShkLT5tX2dmaWxlKTsKLSAgICAg
ICAgUmVzb3VyY2VFcnJvciByZXNvdXJjZUVycm9yKGdfcXVhcmtfdG9fc3RyaW5nKEdfSU9fRVJS
T1IpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3ItPmNvZGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlcnJvciA/IFN0cmluZzo6ZnJvbVVURjgoZXJyb3ItPm1lc3Nh
Z2UpIDogU3RyaW5nKCkpOwotICAgICAgICBnX2ZyZWUodXJpKTsKLSAgICAgICAgZ19lcnJvcl9m
cmVlKGVycm9yKTsKLSAgICAgICAgY2xlYW51cEdpb09wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwot
ICAgICAgICBjbGllbnQtPmRpZEZhaWwoaGFuZGxlLmdldCgpLCByZXNvdXJjZUVycm9yKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChnX2ZpbGVfaW5mb19nZXRfZmlsZV90eXBl
KGluZm8pICE9IEdfRklMRV9UWVBFX1JFR1VMQVIpIHsKLSAgICAgICAgLy8gRklYTUU6IHdoYXQg
aWYgdGhlIFVSSSBwb2ludHMgdG8gYSBkaXJlY3Rvcnk/IFNob3VsZCB3ZQotICAgICAgICAvLyBn
ZW5lcmF0ZSBhIGxpc3Rpbmc/IEhvdz8gV2hhdCBkbyBvdGhlciBiYWNrZW5kcyBkbyBoZXJlPwot
ICAgICAgICBjaGFyKiB1cmkgPSBnX2ZpbGVfZ2V0X3VyaShkLT5tX2dmaWxlKTsKLSAgICAgICAg
UmVzb3VyY2VFcnJvciByZXNvdXJjZUVycm9yKGdfcXVhcmtfdG9fc3RyaW5nKEdfSU9fRVJST1Ip
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19JT19FUlJPUl9GQUlMRUQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcoKSk7Ci0gICAgICAgIGdfZnJlZSh1cmkpOwot
ICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7Ci0gICAgICAgIGNsaWVu
dC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIHJlc291cmNlRXJyb3IpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgLy8gQWNjb3JkaW5nIHRvIGh0dHA6Ly9saWJyYXJ5Lmdub21lLm9yZy9k
ZXZlbC9naW8vc3RhYmxlL2dpby1HQ29udGVudFR5cGUuaHRtbAotICAgIC8vIEdDb250ZW50VHlw
ZSBvbiBVbml4IGlzIHRoZSBtaW1lIHR5cGUsIGJ1dCBub3Qgb24gV2luMzIuCi0gICAgR093blB0
cjxnY2hhcj4gbWltZVR5cGUoZ19jb250ZW50X3R5cGVfZ2V0X21pbWVfdHlwZShnX2ZpbGVfaW5m
b19nZXRfY29udGVudF90eXBlKGluZm8pKSk7Ci0gICAgcmVzcG9uc2Uuc2V0TWltZVR5cGUobWlt
ZVR5cGUuZ2V0KCkpOwotICAgIHJlc3BvbnNlLnNldEV4cGVjdGVkQ29udGVudExlbmd0aChnX2Zp
bGVfaW5mb19nZXRfc2l6ZShpbmZvKSk7Ci0KLSAgICBHVGltZVZhbCB0djsKLSAgICBnX2ZpbGVf
aW5mb19nZXRfbW9kaWZpY2F0aW9uX3RpbWUoaW5mbywgJnR2KTsKLSAgICByZXNwb25zZS5zZXRM
YXN0TW9kaWZpZWREYXRlKHR2LnR2X3NlYyk7Ci0KLSAgICBjbGllbnQtPmRpZFJlY2VpdmVSZXNw
b25zZShoYW5kbGUuZ2V0KCksIHJlc3BvbnNlKTsKLQotICAgIGlmIChkLT5tX2NhbmNlbGxlZCkg
ewotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBnX2ZpbGVfcmVhZF9hc3luYyhkLT5tX2dmaWxlLCBHX1BSSU9S
SVRZX0RFRkFVTFQsIGQtPm1fY2FuY2VsbGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgb3Bl
bkNhbGxiYWNrLCAwKTsKLX0KIHN0YXRpYyBib29sIHN0YXJ0R2lvKFJlc291cmNlSGFuZGxlKiBo
YW5kbGUsIEtVUkwgdXJsKQogewogICAgIEFTU0VSVChoYW5kbGUpOwogCi0gICAgUmVzb3VyY2VI
YW5kbGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKLQogICAgIGlmIChoYW5k
bGUtPmZpcnN0UmVxdWVzdCgpLmh0dHBNZXRob2QoKSAhPSAiR0VUIiAmJiBoYW5kbGUtPmZpcnN0
UmVxdWVzdCgpLmh0dHBNZXRob2QoKSAhPSAiUE9TVCIpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAorICAgIFNvdXBTZXNzaW9uKiBzZXNzaW9uID0gaGFuZGxlLT5kZWZhdWx0U2Vzc2lvbigpOwor
ICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFsKCk7CisK
ICAgICAvLyBHSU8gZG9lc24ndCBrbm93IGhvdyB0byBoYW5kbGUgcmVmcyBhbmQgcXVlcmllcywg
c28gcmVtb3ZlIHRoZW0KICAgICAvLyBUT0RPOiB1c2UgS1VSTC5maWxlU3lzdGVtUGF0aCBhZnRl
ciBLVVJMR3RrIGFuZCBGaWxlU3lzdGVtR3RrIGFyZQogICAgIC8vIHVzaW5nIEdJTyBpbnRlcm5h
bGx5LCBhbmQgcHJvdmlkaW5nIFVSSXMgaW5zdGVhZCBvZiBmaWxlIHBhdGhzCiAgICAgdXJsLnJl
bW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwogICAgIHVybC5zZXRRdWVyeShTdHJpbmcoKSk7CiAg
ICAgdXJsLnJlbW92ZVBvcnQoKTsKKyAgICBDU3RyaW5nIHVybFN0ciA9IHVybC5zdHJpbmcoKS51
dGY4KCk7CiAKLSNpZiAhT1MoV0lORE9XUykKLSAgICAvLyB3ZSBhdm9pZCB0aGUgZXNjYXBpbmcg
Zm9yIGxvY2FsIGZpbGVzLCBiZWNhdXNlCi0gICAgLy8gZ19maWxlbmFtZV9mcm9tX3VyaSAodXNl
ZCBpbnRlcm5hbGx5IGJ5IEdGaWxlKSBoYXMgcHJvYmxlbXMKLSAgICAvLyBkZWNvZGluZyBzdHJp
bmdzIHdpdGggYXJiaXRyYXJ5IHBlcmNlbnQgc2lnbnMKLSAgICBpZiAodXJsLmlzTG9jYWxGaWxl
KCkpCi0gICAgICAgIGQtPm1fZ2ZpbGUgPSBnX2ZpbGVfbmV3X2Zvcl9wYXRoKHVybC5wcmV0dHlV
UkwoKS51dGY4KCkuZGF0YSgpICsgc2l6ZW9mKCJmaWxlOi8vIikgLSAxKTsKLSAgICBlbHNlCi0j
ZW5kaWYKLSAgICAgICAgZC0+bV9nZmlsZSA9IGdfZmlsZV9uZXdfZm9yX3VyaSh1cmwuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9n
ZmlsZSksICJ3ZWJraXQtcmVzb3VyY2UiLCBoYW5kbGUpOworICAgIEdPd25QdHI8R0Vycm9yPiBl
cnJvcjsKKyAgICBkLT5tX3NvdXBSZXF1ZXN0ID0gYWRvcHRQbGF0Zm9ybVJlZih3ZWJraXRfc291
cF9yZXF1ZXN0ZXJfcmVxdWVzdChkLT5tX3JlcXVlc3Rlci5nZXQoKSwgdXJsU3RyLmRhdGEoKSwg
c2Vzc2lvbiwgJmVycm9yLm91dFB0cigpKSk7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIGQt
Pm1fc291cFJlcXVlc3QgPSAwOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
Z19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSksICJ3ZWJr
aXQtcmVzb3VyY2UiLCBoYW5kbGUpOwogCi0gICAgLy8gYmFsYW5jZWQgYnkgYSBkZXJlZigpIGlu
IGNsZWFudXBHaW9PcGVyYXRpb24sIHdoaWNoIHNob3VsZCBhbHdheXMgcnVuCisgICAgLy8gYmFs
YW5jZWQgYnkgYSBkZXJlZigpIGluIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbiwgd2hpY2gg
c2hvdWxkIGFsd2F5cyBydW4KICAgICBoYW5kbGUtPnJlZigpOwogCi0gICAgZC0+bV9jYW5jZWxs
YWJsZSA9IGdfY2FuY2VsbGFibGVfbmV3KCk7Ci0gICAgZ19maWxlX3F1ZXJ5X2luZm9fYXN5bmMo
ZC0+bV9nZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX0ZJTEVfQVRUUklCVVRF
X1NUQU5EQVJEX1RZUEUgIiwiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR19GSUxFX0FU
VFJJQlVURV9TVEFOREFSRF9DT05URU5UX1RZUEUgIiwiCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9TSVpFLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdfRklMRV9RVUVSWV9JTkZPX05PTkUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR19QUklPUklUWV9ERUZBVUxULCBkLT5tX2NhbmNlbGxhYmxlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHF1ZXJ5SW5mb0NhbGxiYWNrLCAwKTsKKyAgICBkLT5tX2NhbmNlbGxh
YmxlID0gYWRvcHRQbGF0Zm9ybVJlZihnX2NhbmNlbGxhYmxlX25ldygpKTsKKyAgICB3ZWJraXRf
c291cF9yZXF1ZXN0X3NlbmRfYXN5bmMoZC0+bV9zb3VwUmVxdWVzdC5nZXQoKSwgZC0+bV9jYW5j
ZWxsYWJsZS5nZXQoKSwgc2VuZFJlcXVlc3RDYWxsYmFjaywgMCk7CisKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3Vy
Y2VSZXF1ZXN0LmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVl
c3QuaAppbmRleCBjMmM0NDE5Li44NzlhNDdmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3QuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3QuaApAQCAtNjcsOCArNjcsOSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgICAgICB1cGRhdGVGcm9tU291cE1lc3NhZ2Uoc291cE1lc3NhZ2Up
OwogICAgICAgICB9CiAKKyAgICAgICAgdm9pZCB1cGRhdGVTb3VwTWVzc2FnZShTb3VwTWVzc2Fn
ZSopIGNvbnN0OwogICAgICAgICBTb3VwTWVzc2FnZSogdG9Tb3VwTWVzc2FnZSgpIGNvbnN0Owot
ICAgICAgICB2b2lkIHVwZGF0ZUZyb21Tb3VwTWVzc2FnZShTb3VwTWVzc2FnZSogc291cE1lc3Nh
Z2UpOworICAgICAgICB2b2lkIHVwZGF0ZUZyb21Tb3VwTWVzc2FnZShTb3VwTWVzc2FnZSopOwog
CiAgICAgICAgIFNvdXBNZXNzYWdlRmxhZ3Mgc291cE1lc3NhZ2VGbGFncygpIGNvbnN0IHsgcmV0
dXJuIG1fc291cEZsYWdzOyB9CiAgICAgICAgIHZvaWQgc2V0U291cE1lc3NhZ2VGbGFncyhTb3Vw
TWVzc2FnZUZsYWdzIHNvdXBGbGFncykgeyBtX3NvdXBGbGFncyA9IHNvdXBGbGFnczsgfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291
cC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3Vw
LmNwcAppbmRleCA2MmRlYjAxLi4zODBmYzg0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcApAQCAtMzMsNiArMzMsMjkg
QEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit2b2lkIFJl
c291cmNlUmVxdWVzdDo6dXBkYXRlU291cE1lc3NhZ2UoU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdl
KSBjb25zdAoreworICAgIGdfb2JqZWN0X3NldChzb3VwTWVzc2FnZSwgU09VUF9NRVNTQUdFX01F
VEhPRCwgaHR0cE1ldGhvZCgpLnV0ZjgoKS5kYXRhKCksIE5VTEwpOworCisgICAgY29uc3QgSFRU
UEhlYWRlck1hcCYgaGVhZGVycyA9IGh0dHBIZWFkZXJGaWVsZHMoKTsKKyAgICBTb3VwTWVzc2Fn
ZUhlYWRlcnMqIHNvdXBIZWFkZXJzID0gc291cE1lc3NhZ2UtPnJlcXVlc3RfaGVhZGVyczsKKyAg
ICBpZiAoIWhlYWRlcnMuaXNFbXB0eSgpKSB7CisgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IGhlYWRlcnMuZW5kKCk7CisgICAgICAgIGZvciAoSFRUUEhlYWRlck1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
KyAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChzb3VwSGVhZGVycywgaXQt
PmZpcnN0LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGl0LT5zZWNvbmQudXRmOCgpLmRhdGEoKSk7
CisgICAgfQorCisjaWZkZWYgSEFWRV9MSUJTT1VQXzJfMjlfOTAKKyAgICBTdHJpbmcgZmlyc3RQ
YXJ0eVN0cmluZyA9IGZpcnN0UGFydHlGb3JDb29raWVzKCkuc3RyaW5nKCk7CisgICAgaWYgKCFm
aXJzdFBhcnR5U3RyaW5nLmlzRW1wdHkoKSkgeworICAgICAgICBHT3duUHRyPFNvdXBVUkk+IGZp
cnN0UGFydHkoc291cF91cmlfbmV3KGZpcnN0UGFydHlTdHJpbmcudXRmOCgpLmRhdGEoKSkpOwor
ICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X2ZpcnN0X3BhcnR5KHNvdXBNZXNzYWdlLCBmaXJzdFBh
cnR5LmdldCgpKTsKKyAgICB9CisjZW5kaWYKKworICAgIHNvdXBfbWVzc2FnZV9zZXRfZmxhZ3Mo
c291cE1lc3NhZ2UsIG1fc291cEZsYWdzKTsKK30KKwogU291cE1lc3NhZ2UqIFJlc291cmNlUmVx
dWVzdDo6dG9Tb3VwTWVzc2FnZSgpIGNvbnN0CiB7CiAgICAgU291cE1lc3NhZ2UqIHNvdXBNZXNz
YWdlID0gc291cF9tZXNzYWdlX25ldyhodHRwTWV0aG9kKCkudXRmOCgpLmRhdGEoKSwgdXJsKCku
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL0NoYW5nZUxv
ZyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IDM0ZDNlN2IuLjJhMGM1MDkgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTggQEAKKzIwMTAtMTAtMTMgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGln
YWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgV2ViS2l0R3RrKyB0byB1c2UgdGhlIG5ldyBBUEkgZnJvbSB0aGUgaW1wb3J0ZWQgU291cFVS
SUxvYWRlciBjb2RlCisKKyAgICAgICAgW0dUS10gQWRkIEhUVFAgY2FjaGluZyBzdXBwb3J0Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDI2MQorCisg
ICAgICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwgbV9tc2cgaXMgbm93IGNhbGxlZCBtX3NvdXBN
ZXNzYWdlLgorCisgICAgICAgICogd2Via2l0L3dlYmtpdGRvd25sb2FkLmNwcDoKKyAgICAgICAg
KHdlYmtpdF9kb3dubG9hZF9uZXdfd2l0aF9oYW5kbGUpOgorICAgICAgICAod2Via2l0X2Rvd25s
b2FkX3N0YXJ0KToKKwogMjAxMC0xMC0xMiAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJv
dEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjY5NTg5Lgpk
aWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuY3BwIGIvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0ZG93bmxvYWQuY3BwCmluZGV4IDE0NzJjYjUuLjE4YjY0YWIgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRvd25sb2FkLmNwcAorKysgYi9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXRkb3dubG9hZC5jcHAKQEAgLTQxOSw4ICs0MTksOCBAQCBXZWJL
aXREb3dubG9hZCogd2Via2l0X2Rvd25sb2FkX25ld193aXRoX2hhbmRsZShXZWJLaXROZXR3b3Jr
UmVxdWVzdCogcmVxdWVzdCwgVwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHJlcXVlc3QsIE5V
TEwpOwogCiAgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJu
YWwoKTsKLSAgICBpZiAoZC0+bV9tc2cpCi0gICAgICAgIHNvdXBfc2Vzc2lvbl9wYXVzZV9tZXNz
YWdlKHdlYmtpdF9nZXRfZGVmYXVsdF9zZXNzaW9uKCksIGQtPm1fbXNnKTsKKyAgICBpZiAoZC0+
bV9zb3VwTWVzc2FnZSkKKyAgICAgICAgc291cF9zZXNzaW9uX3BhdXNlX21lc3NhZ2Uod2Via2l0
X2dldF9kZWZhdWx0X3Nlc3Npb24oKSwgZC0+bV9zb3VwTWVzc2FnZS5nZXQoKSk7CiAKICAgICBX
ZWJLaXREb3dubG9hZCogZG93bmxvYWQgPSBXRUJLSVRfRE9XTkxPQUQoZ19vYmplY3RfbmV3KFdF
QktJVF9UWVBFX0RPV05MT0FELCAibmV0d29yay1yZXF1ZXN0IiwgcmVxdWVzdCwgTlVMTCkpOwog
ICAgIFdlYktpdERvd25sb2FkUHJpdmF0ZSogcHJpdiA9IGRvd25sb2FkLT5wcml2OwpAQCAtNDky
LDggKzQ5Miw4IEBAIHZvaWQgd2Via2l0X2Rvd25sb2FkX3N0YXJ0KFdlYktpdERvd25sb2FkKiBk
b3dubG9hZCkKICAgICAgICAgcHJpdi0+cmVzb3VyY2VIYW5kbGUtPnNldENsaWVudChwcml2LT5k
b3dubG9hZENsaWVudCk7CiAKICAgICAgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IHBy
aXYtPnJlc291cmNlSGFuZGxlLT5nZXRJbnRlcm5hbCgpOwotICAgICAgICBpZiAoZC0+bV9tc2cp
Ci0gICAgICAgICAgICBzb3VwX3Nlc3Npb25fdW5wYXVzZV9tZXNzYWdlKHdlYmtpdF9nZXRfZGVm
YXVsdF9zZXNzaW9uKCksIGQtPm1fbXNnKTsKKyAgICAgICAgaWYgKGQtPm1fc291cE1lc3NhZ2Up
CisgICAgICAgICAgICBzb3VwX3Nlc3Npb25fdW5wYXVzZV9tZXNzYWdlKHdlYmtpdF9nZXRfZGVm
YXVsdF9zZXNzaW9uKCksIGQtPm1fc291cE1lc3NhZ2UuZ2V0KCkpOwogICAgIH0KIAogICAgIHBy
aXYtPnRpbWVyID0gZ190aW1lcl9uZXcoKTsKLS0gCjEuNy4xCgo=
</data>
<flag name="review"
          id="60493"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>