<?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>76070</bug_id>
          
          <creation_ts>2012-01-11 09:37:13 -0800</creation_ts>
          <short_desc>[GTK] [WK2] Add Find API</short_desc>
          <delta_ts>2012-02-29 09:37:14 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>76921</dependson>
    
    <dependson>79252</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sergio Villar Senin">svillar</reporter>
          <assigned_to name="Sergio Villar Senin">svillar</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>darin</cc>
    
    <cc>gustavo</cc>
    
    <cc>mrobinson</cc>
    
    <cc>pnormand</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>533962</commentid>
    <comment_count>0</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-01-11 09:37:13 -0800</bug_when>
    <thetext>Originally proposed here: https://lists.webkit.org/pipermail/webkit-gtk/2011-December/000854.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533978</commentid>
    <comment_count>1</comment_count>
      <attachid>122044</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-01-11 10:00:35 -0800</bug_when>
    <thetext>Created attachment 122044
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533979</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-11 10:02:45 -0800</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534001</commentid>
    <comment_count>3</comment_count>
      <attachid>122044</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-11 10:22:34 -0800</bug_when>
    <thetext>Comment on attachment 122044
Patch

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

Not a full review, just a couple quick comments. I think we should seriously consider a friendlier name than WebKitFindContext.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:283
&gt; +    unsigned wkFindOptions = 0;
&gt; +
&gt; +    if (findContextFlags &amp; WEBKIT_FIND_CONTEXT_CASE_INSENSITIVE)
&gt; +        wkFindOptions |= kWKFindOptionsCaseInsensitive;
&gt; +    if (findContextFlags &amp; WEBKIT_FIND_CONTEXT_AT_WORD_STARTS)
&gt; +        wkFindOptions |= kWKFindOptionsAtWordStarts;
&gt; +    if (findContextFlags &amp; WEBKIT_FIND_CONTEXT_TREAT_MEDIAL_CAPITAL_AS_WORD_START)
&gt; +        wkFindOptions |= kWKFindOptionsTreatMedialCapitalAsWordStart;
&gt; +    if (findContextFlags &amp; WEBKIT_FIND_CONTEXT_BACKWARDS)
&gt; +        wkFindOptions |= kWKFindOptionsBackwards;
&gt; +    if (findContextFlags &amp; WEBKIT_FIND_CONTEXT_WRAP_AROUND)
&gt; +        wkFindOptions |= kWKFindOptionsWrapAround;
&gt; +    if (findContextFlags &amp; WEBKIT_FIND_CONTEXT_SHOW_OVERLAY)
&gt; +        wkFindOptions |= kWKFindOptionsShowOverlay;
&gt; +    if (findContextFlags &amp; WEBKIT_FIND_CONTEXT_SHOW_FIND_INDICATOR)
&gt; +        wkFindOptions |= kWKFindOptionsShowFindIndicator;
&gt; +

If you make the values the same as the WebKit2 API, you can simply do a cast. Just add ASSERT_MATCHING_ENUM for each value somewhere in the file.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.h:42
&gt; + * WebKitFindContextFlags:

I prefer WebKitFindFlags.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.h:51
&gt; + * @WEBKIT_FIND_CONTEXT_FLAGS_NONE: no search flags
&gt; + * @WEBKIT_FIND_CONTEXT_CASE_INSENSITIVE: case insensitive search
&gt; + * @WEBKIT_AT_WORD_STARTS: search only at the begining of the words
&gt; + * @WEBKIT_FIND_CONTEXT_TREAT_MEDIAL_CAPITAL_AS_WORD_START: treat capital letters in the middle of words as word start
&gt; + * @WEBKIT_FIND_CONTEXT_BACKWARDS: search backwards
&gt; + * @WEBKIT_FIND_CONTEXT_WRAP_AROUND: if not present search will stop at the end of the document
&gt; + * @WEBKIT_FIND_CONTEXT_SHOW_OVERLAY: show an overlay for each match
&gt; + * @WEBKIT_FIND_CONTEXT_SHOW_FIND_INDICATOR: show the find indicator
&gt; + **/

I think the descriptions should be expanded a bit. For instance, I don&apos;t understand what the difference is between the overlay and the find indicator. These should also begin with capital letters. Shouldn&apos;t these all be prefixed with WEBKIT_FIND_CONTEXT_FLAGS and not just WEBKIT_FIND_CONTEXT_FLAGS_NONE?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534008</commentid>
    <comment_count>4</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-01-11 10:28:40 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 122044 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=122044&amp;action=review
&gt; 
&gt; If you make the values the same as the WebKit2 API, you can simply do a cast. Just add ASSERT_MATCHING_ENUM for each value somewhere in the file.

Didn&apos;t know about the ASSERT_MATCHING_ENUM thing.
 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.h:42
&gt; &gt; + * WebKitFindContextFlags:
&gt; 
&gt; I prefer WebKitFindFlags.

I guess the final name would depend on keeping WebKitFindContext or choosing another one

&gt; I think the descriptions should be expanded a bit. For instance, I don&apos;t understand what the difference is between the overlay and the find indicator. These should also begin with capital letters. Shouldn&apos;t these all be prefixed with WEBKIT_FIND_CONTEXT_FLAGS and not just WEBKIT_FIND_CONTEXT_FLAGS_NONE?

Not sure, I checked some other GNOME libraries and there are examples of both approaches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534489</commentid>
    <comment_count>5</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-11 18:41:13 -0800</bug_when>
    <thetext>(In reply to comment #4)

&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.h:42
&gt; &gt; &gt; + * WebKitFindContextFlags:
&gt; &gt; I prefer WebKitFindFlags.
&gt; 
&gt; I guess the final name would depend on keeping WebKitFindContext or choosing another one

I&apos;m not sure about that. My suggestion was to remove Context if we renamed it WebKitFindTask, for instance, this would still be called WebKitFindFlags.


&gt; &gt; I think the descriptions should be expanded a bit. For instance, I don&apos;t understand what the difference is between the overlay and the find indicator. These should also begin with capital letters. Shouldn&apos;t these all be prefixed with WEBKIT_FIND_CONTEXT_FLAGS and not just WEBKIT_FIND_CONTEXT_FLAGS_NONE?
&gt; 
&gt; Not sure, I checked some other GNOME libraries and there are examples of both approaches.

I&apos;m fairly certain we do this with consistency in WebKit2. If not, we should, I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535518</commentid>
    <comment_count>6</comment_count>
      <attachid>122044</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-13 01:32:13 -0800</bug_when>
    <thetext>Comment on attachment 122044
Patch

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

You need to rebase so that the patch applies on current git master.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitDefines.h:41
&gt;  typedef struct _WebKitWebLoaderClient        WebKitWebLoaderClient;
&gt;  typedef struct _WebKitWebLoaderClientClass   WebKitWebLoaderClientClass;
&gt;  
&gt; +typedef struct _WebKitFindContext            WebKitFindContext;
&gt; +typedef struct _WebKitFindContextClass       WebKitFindContextClass;
&gt; +

This was only needed by the old loader client, and it has been removed already, so please move this to its own header like other objects.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:29
&gt; +#include &lt;webkit2/WebKitEnumTypes.h&gt;

In private headers or .cpp files: Use the quoted form for header files of WebKit2

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:56
&gt; +    WKPageRef wkPageRef;

Ref is used for the name type, for the variable name just use wkPage

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:66
&gt; +    WEBKIT_FIND_CONTEXT(clientInfo)-&gt;priv-&gt;matchCount = matchCount;
&gt; +    g_signal_emit(WEBKIT_FIND_CONTEXT(clientInfo), signals[FOUND_STRING], 0);

If you need to cast more than once, I prefer to use a variable.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:77
&gt; +    WEBKIT_FIND_CONTEXT(clientInfo)-&gt;priv-&gt;matchCount = matchCount;
&gt; +    g_signal_emit(WEBKIT_FIND_CONTEXT(clientInfo), signals[COUNTED_MATCHES], 0);

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:100
&gt; +static void webkit_find_context_get_property(GObject* object, guint propId, GValue* value, GParamSpec* paramSpec)

This should use WebKit coding style, since it&apos;s not generated.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:122
&gt; +static void webkit_find_context_set_property(GObject* object, guint propId, const GValue* value, GParamSpec* paramSpec)

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:141
&gt; +static void webkit_find_context_finalize(GObject* object)

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:164
&gt; +                                    g_param_spec_string(&quot;search-text&quot;,

I would avoid the search- prefix, the object is called FindContext so I think it&apos;s abvious that &quot;text&quot; is the text to search.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:177
&gt; +                                    g_param_spec_flags(&quot;search-flags&quot;,

I would use options or find-options instead of flags to make it clearer what the flags are for.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:187
&gt; +     * The number of matches found for the given text in the  #WebKitWebView.

the  #WebKitWebView. -&gt; Extra space there.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:191
&gt; +                                    g_param_spec_uint(&quot;match-count&quot;,

I think &quot;count&quot; is common in webkit, but in gnome we usually n-, n-matches in this case

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:204
&gt; +                                    g_param_spec_uint(&quot;max-match-count&quot;,

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:212
&gt; +     * @find: the #WebKitFindContext

find -&gt; find_context

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:220
&gt; +        g_signal_new(&quot;found-string&quot;,

We use text for the property and string for signal, I think this should be found-text or even just found.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:228
&gt; +     * WebKitFindContext::failed-to-find-string:

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:229
&gt; +     * @find: the #WebKitFindContext

find -&gt; find_context

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:247
&gt; +     * WebKitFindContext::counted-matches:

got-n-matches sounds more gnome to me too.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:248
&gt; +     * @find: the #WebKitFindContext

find -&gt; find_context

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:283
&gt;&gt; +
&gt; 
&gt; If you make the values the same as the WebKit2 API, you can simply do a cast. Just add ASSERT_MATCHING_ENUM for each value somewhere in the file.

Do we support all of those options?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:289
&gt; + * @findContext: the #WebKitFindContext

findCopntext -&gt; find_context

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:298
&gt; +    g_return_val_if_fail(WEBKIT_IS_FIND_CONTEXT(findContext), NULL);

Use 0 instead of NULL

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:304
&gt; + * webkit_find_context_get_match_count:

webkit_find_context_get_n_matches() sounds more gnome.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:305
&gt; + * @findContext: the #WebKitFindContext

findContext -&gt; find_context

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:323
&gt; + * webkit_find_context_get_flags:

I think get options, or get option_flags would be more clear

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:331
&gt; +WebKitFindContextFlags
&gt; +webkit_find_context_get_flags(WebKitFindContext* findContext)

This should be a single line

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:340
&gt; + * @findContext: the #WebKitFindContext

findContext -&gt; find_context

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:357
&gt; + * @findContext: the #WebKitFindContext

findContext -&gt; find_context

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:362
&gt; + * &quot;found-string&quot; and &quot;failed-to-find-string&quot;.

Use WebKitFindContext::found-string and WebKitFindContext::failed-to-find-string

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:368
&gt; +    WKFindOptions findOptions = findContextFlagsToWKFindOptions(findContext-&gt;priv-&gt;searchFlags);

findOptions -&gt; wkFindOptions

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:369
&gt; +    WKRetainPtr&lt;WKStringRef&gt; searchTextRef(AdoptWK, WKStringCreateWithUTF8CString(findContext-&gt;priv-&gt;searchText.data()));

searchTextRef -&gt; wkSearchText

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:375
&gt; + * @findContext: the #WebKitFindContext

findContext -&gt; find_context

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:379
&gt; + * connected to &quot;found-string&quot; and/or &quot;failed-to-find-string&quot; signals

Use WebKitFindContext::signal-name here too

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:392
&gt; + * webkit_find_context_prev:

prev-&gt; previous

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:397
&gt; + * connected to &quot;found-string&quot; and/or &quot;failed-to-find-string&quot; signals

Use WebKitFindContext::signal-name here too

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:410
&gt; + * webkit_find_context_count_matches:

get_n_matches sounds more gnome to me

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:417
&gt; + * &quot;counted-matches&quot; signal.

Use WebKitFindContext::signal-name here too

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:423
&gt; +    WKFindOptions findOptions = findContextFlagsToWKFindOptions(findContext-&gt;priv-&gt;searchFlags);

findOptions -&gt; wkFindOptions

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:424
&gt; +    WKRetainPtr&lt;WKStringRef&gt; searchTextRef(AdoptWK, WKStringCreateWithUTF8CString(findContext-&gt;priv-&gt;searchText.data()));

searchTextRef -&gt; wkSeachText

&gt;&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.h:42
&gt;&gt;&gt; + * WebKitFindContextFlags:
&gt;&gt; 
&gt;&gt; I prefer WebKitFindFlags.
&gt; 
&gt; I guess the final name would depend on keeping WebKitFindContext or choosing another one

I prefer WebKitFindFlags too, even if the object is called Context, Taks, Operation, ...

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.h:61
&gt; +  WEBKIT_FIND_CONTEXT_CASE_INSENSITIVE =                   (1 &lt;&lt; 0),
&gt; +  WEBKIT_FIND_CONTEXT_AT_WORD_STARTS =                     (1 &lt;&lt; 1),
&gt; +  WEBKIT_FIND_CONTEXT_TREAT_MEDIAL_CAPITAL_AS_WORD_START = (1 &lt;&lt; 2),
&gt; +  WEBKIT_FIND_CONTEXT_BACKWARDS =                          (1 &lt;&lt; 3),
&gt; +  WEBKIT_FIND_CONTEXT_WRAP_AROUND =                        (1 &lt;&lt; 4),
&gt; +  WEBKIT_FIND_CONTEXT_SHOW_OVERLAY =                       (1 &lt;&lt; 5),
&gt; +  WEBKIT_FIND_CONTEXT_SHOW_FIND_INDICATOR =                (1 &lt;&lt; 6)

We don&apos;t need the parentheses.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.h:63
&gt; +
&gt; +} WebKitFindContextFlags;

Extra line there.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.h:92
&gt; +WEBKIT_API const gchar*
&gt; +webkit_find_context_get_search_string                        (WebKitFindContext        *find_context);
&gt; +

Too many spaces between function name and parameters, just use one space for the longer function name and line up all others. And the same for type name and parameter.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1055
&gt; +WebKitFindContext* webkit_web_view_search(WebKitWebView *webView,
&gt; +                                          const gchar *searchText,
&gt; +                                          WebKitFindContextFlags flags,
&gt; +                                          guint maxMatchCount)

This should be a single line. API documentation is missing for this method. This still looks weird to me, what do you think about creating the find object for a given view instead of the view creating the find object?

WebKitFindContext *webkit_find_context_new(WebKitWebView *web_view);
This creates a find context to search on web view. You can connect to the signals in this moment and then.
void webkit_find_context_search(WebKitFindContext *find_context, const gchar *text, ......
...

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1058
&gt; +    g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), NULL);
&gt; +    g_return_val_if_fail(searchText, NULL);

NULL -&gt; 0

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1063
&gt; +    GRefPtr&lt;WebKitFindContext&gt; findContext = WEBKIT_FIND_CONTEXT(g_object_new(WEBKIT_TYPE_FIND_CONTEXT,

We don&apos;t need to use GRefPtr here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535687</commentid>
    <comment_count>7</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-13 08:15:10 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:191
&gt; &gt; +                                    g_param_spec_uint(&quot;match-count&quot;,
&gt; 
&gt; I think &quot;count&quot; is common in webkit, but in gnome we usually n-, n-matches in this case
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindContext.cpp:204
&gt; &gt; +                                    g_param_spec_uint(&quot;max-match-count&quot;,
&gt; 
&gt; Ditto.
&gt; 

&quot;count&quot; is pretty common in GLib and GTK+ as well (I just did a quick devhelp search). In this case I think it&apos;s friendlier and I&apos;m not sure if there is a good way to use the n- version with max-match-count.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536527</commentid>
    <comment_count>8</comment_count>
      <attachid>122626</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-01-16 06:46:07 -0800</bug_when>
    <thetext>Created attachment 122626
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536534</commentid>
    <comment_count>9</comment_count>
      <attachid>122626</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-01-16 07:13:04 -0800</bug_when>
    <thetext>Comment on attachment 122626
Patch

Attachment 122626 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11254182</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536618</commentid>
    <comment_count>10</comment_count>
      <attachid>122626</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-16 09:21:33 -0800</bug_when>
    <thetext>Comment on attachment 122626
Patch

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

In general I prefer to use &quot;text&quot; instead of &quot;string&quot;, but I&apos;m not opposed to use string anyway if you think it&apos;s better.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:26
&gt; +#include &quot;webkit2/WebKitEnumTypes.h&quot;

#include &quot;WebkitEnumTypes.h&quot; should work.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:278
&gt; + * @findController: the #WebKitFindController

This should be @find_controller, doc names should match the names used in the headers.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:281
&gt; + * #WebKitWebView when a client calls webkit_web_view_search().

webkit_web_view_search doesn&apos;t exist now with the find controller.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:283
&gt; + * Returns: (transfer none): the string to look for in the #WebKitWebView.

No need to use transfer none for methods returning const gchar. I would say the #WebKitWebView associated to @find_controller or something like that.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:284
&gt; + **/

Double * is only needed at tthe beginning of the comment, not at the end.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:299
&gt; + * webkit_web_view_search() call) this function returns G_MAXUINT.

webkit_web_view_search again.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:303
&gt; + **/

Use single * here.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:318
&gt; + **/

Single *

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:332
&gt; + * calls webkit_web_view_search().

webkit_web_view_search

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:346
&gt; + * @searchString: the string to look for

@search_string

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:347
&gt; + * @findOptions: the #WebKitFindOptions used in the search

find_options

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:348
&gt; + * @maxMatchCount: the maximum number of matches allowed in the search

max_match_count

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:351
&gt; + * Look for @searchString in the #WebKitWebView associated with this
&gt; + * #WebKitFindController. The outcome of the search will be

search_string. assciated with @find_controller maybe?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:353
&gt; + * asynchronously provided by the &quot;WebKitFindController::found-string&quot;
&gt; + * and &quot;WebKitFindController::failed-to-find-string&quot;.

No need to use &quot;&quot; here for signal references

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:365
&gt; + **/

Single *

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:383
&gt; + * webkit_web_view_search() in the #WebKitWebView. Callers must be

webkit_web_view_search

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:384
&gt; + * connected to &quot;found-string&quot; and/or &quot;failed-to-find-string&quot; signals

Use WebKitFindController:signal-name

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:386
&gt; + **/

Single *

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:401
&gt; + * webkit_web_view_search() in the #WebKitWebView. Callers must be

webkit_web_view_search

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:402
&gt; + * connected to &quot;found-string&quot; and/or &quot;failed-to-find-string&quot; signals

Use WebKitFindController::signal-name

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:404
&gt; + **/

Single *

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:417
&gt; + * @searchString: the string to look for

search_string

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:418
&gt; + * @findOptions: the #WebKitFindOptions used in the search

find_options or just options

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:419
&gt; + * @maxMatchCount: the maximum number of matches allowed in the search

max_match_count

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:425
&gt; + * &quot;WebKitFindController::counted-matches&quot; signal.

Remove &quot;&quot;

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:426
&gt; + **/

Single *

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.h:53
&gt; + **/

Single *

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:239
&gt; +    webView-&gt;priv-&gt;findController = 0;

glib already initializes the memory to 0 when allocating the instance struct, and GRefPtr initilizes the raw pointer to 0 in its constructor.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1214
&gt; + * @webView: the #WebKitWebView

web_view

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1221
&gt; + **/

Single *

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1228
&gt; +        WebKitWebViewBase* webViewBase = WEBKIT_WEB_VIEW_BASE(webView);
&gt; +        WebPageProxy* page = webkitWebViewBaseGetPage(webViewBase);

webViewBase is onlyn used here, so we can reduce this to a single line

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1230
&gt; +        webView-&gt;priv-&gt;findController = WEBKIT_FIND_CONTROLLER(g_object_new(WEBKIT_TYPE_FIND_CONTROLLER, NULL));

Use adoptGRef() here.

&gt; Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt:77
&gt; +webkit_web_view_search

webkit_web_view_get_find_controller

&gt; Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt:303
&gt; +WebKitFindController

Add WebKitFindOptions here too

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFindController.cpp:29
&gt; +class FindControllerTest: public LoadTrackingTest {

what do you need LoadTrackingTest for? I whink this could be a WebView test

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFindController.cpp:46
&gt; +        // If the SHOW_OVERLAY option is not passed the WebPage does not notify about matches.

why? is that behaviour documented? we should make clear in the documentation what every find option is for.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFindController.cpp:48
&gt; +        m_findController = webkit_web_view_get_find_controller(m_webView);

The controller is always the same for the view, so initialize it in the constructor. Call assertObjectIsDeletedWhenTestFinishes() in the constructor to make sure it&apos;s not leaked.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFindController.cpp:181
&gt; +    webkit_find_controller_next(test-&gt;m_findController.get());

I guess this should be previous

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFindController.cpp:186
&gt; +    g_assert(!(webkit_find_controller_get_options(test-&gt;m_findController.get()) &amp; WEBKIT_FIND_OPTIONS_BACKWARDS));

Doesn&apos;t this assert? shouldn&apos;t this be FORWARD instead of BACWARDS?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536974</commentid>
    <comment_count>11</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-01-17 02:17:26 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 122626 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=122626&amp;action=review
&gt; 
&gt; In general I prefer to use &quot;text&quot; instead of &quot;string&quot;, but I&apos;m not opposed to use string anyway if you think it&apos;s better.

No strong preference, just used string because it&apos;s also used in the C API.

[...]

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1230
&gt; &gt; +        webView-&gt;priv-&gt;findController = WEBKIT_FIND_CONTROLLER(g_object_new(WEBKIT_TYPE_FIND_CONTROLLER, NULL));
&gt; 
&gt; Use adoptGRef() here.

Yeah, stupid mistake

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFindController.cpp:29
&gt; &gt; +class FindControllerTest: public LoadTrackingTest {
&gt; 
&gt; what do you need LoadTrackingTest for? I whink this could be a WebView test

Because I need to know when the find operation finishes. LoadTrackingTest checks that either find-string or failed-to-find-string signals are received.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFindController.cpp:46
&gt; &gt; +        // If the SHOW_OVERLAY option is not passed the WebPage does not notify about matches.
&gt; 
&gt; why? is that behaviour documented? we should make clear in the documentation what every find option is for.

It is not documented AFAIK. I discovered it while implementing the unit tests. If you take a look at FindController::findString it&apos;s easy to see that DidFindString is only emitted when the show_overlay option is present. Anyway I still need to figure out what do each option exactly mean (a couple of them are not obvious to me).

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFindController.cpp:48
&gt; &gt; +        m_findController = webkit_web_view_get_find_controller(m_webView);
&gt; 
&gt; The controller is always the same for the view, so initialize it in the constructor. Call assertObjectIsDeletedWhenTestFinishes() in the constructor to make sure it&apos;s not leaked.

Good point.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFindController.cpp:181
&gt; &gt; +    webkit_find_controller_next(test-&gt;m_findController.get());
&gt; 
&gt; I guess this should be previous

The idea was to do a next() + previous(). How can we test previous() without a next(), that&apos;s yin and yang :P

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFindController.cpp:186
&gt; &gt; +    g_assert(!(webkit_find_controller_get_options(test-&gt;m_findController.get()) &amp; WEBKIT_FIND_OPTIONS_BACKWARDS));
&gt; 
&gt; Doesn&apos;t this assert? shouldn&apos;t this be FORWARD instead of BACWARDS?

No, note that there is a &quot;!&quot; before webkit_find_controller_get_options. There is no FORWARD flag, either you have the BACKWARDS flag or you haven&apos;t it (which means forward).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536976</commentid>
    <comment_count>12</comment_count>
      <attachid>122626</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-17 02:25:19 -0800</bug_when>
    <thetext>Comment on attachment 122626
Patch

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

&gt;&gt;&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFindController.cpp:29
&gt;&gt;&gt; +class FindControllerTest: public LoadTrackingTest {
&gt;&gt; 
&gt;&gt; what do you need LoadTrackingTest for? I whink this could be a WebView test
&gt; 
&gt; Because I need to know when the find operation finishes. LoadTrackingTest checks that either find-string or failed-to-find-string signals are received.

That&apos;s checked by your FindControllerTest, not LoadTrackingText. I think it could inherit from WebViewTest instead of LoadTRackingTest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537002</commentid>
    <comment_count>13</comment_count>
      <attachid>122626</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-17 03:07:12 -0800</bug_when>
    <thetext>Comment on attachment 122626
Patch

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

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.h:79
&gt; +    /* signals */
&gt; +    void (* found_string)             (WebKitFindController    *find_controller);
&gt; +    void (* failed_to_find_string)    (WebKitFindController    *find_controller);
&gt; +    void (* counted_matches)          (WebKitFindController    *find_controller);

You are not supposed to be able to inherit from FindController, because there&apos;s no way to set a custom find controller to the view, and find controller can only be created by a web view, so I think we don&apos;t need virtual methods for the signals.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.h:85
&gt; +  /* Padding for future expansion */
&gt; +    void (*_webkit_reserved0)         (void);
&gt; +    void (*_webkit_reserved1)         (void);
&gt; +    void (*_webkit_reserved2)         (void);
&gt; +    void (*_webkit_reserved3)         (void);

And we can remove the padding here, since we won&apos;t add virtual methods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537743</commentid>
    <comment_count>14</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-01-18 02:57:57 -0800</bug_when>
    <thetext>After talking to andersca we agreed that showOverlay must not be a requirement to get DidFindString signaling. Adding a dependency, will update this patch once the other lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537754</commentid>
    <comment_count>15</comment_count>
      <attachid>122900</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-01-18 03:39:25 -0800</bug_when>
    <thetext>Created attachment 122900
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537755</commentid>
    <comment_count>16</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-01-18 03:40:23 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; Created an attachment (id=122900) [details]
&gt; Patch

Rebased against 76522 and addressing latest Carlos&apos; comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537764</commentid>
    <comment_count>17</comment_count>
      <attachid>122900</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-01-18 03:55:14 -0800</bug_when>
    <thetext>Comment on attachment 122900
Patch

Attachment 122900 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11281152</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538554</commentid>
    <comment_count>18</comment_count>
      <attachid>122900</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-19 01:32:02 -0800</bug_when>
    <thetext>Comment on attachment 122900
Patch

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

Now that you have removed the overlay and indicator options, does this still depend on bug #76522? Code looks good to me in general, see some minor comments below. But I still have some concerns about the API:

 - I still think we should use text instead of string: in gnome API string is commonly used as type name, like in g_value_set_string, g_settings_set_string, etc. and text is used as text shown in the UI like in gtk_entry_set_text, gtk_label_get_text, gtk_cell_renderer_text_new, etc. We can probably avoid string/text in some cases like webkit_find_controller_search() since it&apos;s obvious you are searching text, the same way we have next/previous and not next_string/previous_string.

 - A find controller is associated to a web view, but once it&apos;s returned by the web view, it&apos;s not possible to know the web view the find controller is associated to. API docs talks about the WebKitWebView all the time, but from the WebKitFindController POV there&apos;s not web view. What do you think about keeping the web view instead of the WKPage (you can then get the page from the web view)? It would be a construct only property. This way we don&apos;t need webkitFindAttachFindClientToPage, we can do it in the constructed method of WebKitFindController. And of course, we would add webkit_find_controller_get_web_view().

 - string, match-count and options are read-write properties, but the API only expose getters for them, and they are only set by webkit_find_controller_search_string() and webkit_find_controller_count_matches(). I would make those properties read-only and add set those manually instead of using g_object_set. This way we also avoid setting the string and max-match-count in next/previous methods.

 - match-count is a property and can be updated by a search operation in didFindString() or webkit_find_controller_count_matches() in didCountStringMatches(), but we are not emitting GObject::notify signal when it&apos;s updated. If we connect to counted-matches we will only be notified when updated from didCountStringMatches(). What do you think about removing counted-matrches signal and emit notify everytime the property is updated?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:332
&gt; + **/

Single * here.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:347
&gt; + * Look for @searchString in the #WebKitWebView associated with

@search_string

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:353
&gt; + * with the same find options use webkit_find_controller_search_next()

Method is called webkit_find_controller_next() not webkit_find_controller_search_next() which makes me think whether it should be webkit_find_controller_search_next() indeed.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:354
&gt; + * and/or webkit_find_options_search_previous(). The

webkit_find_options_search_previous() -&gt; webkit_find_controller_previous() or webkit_find_controller_search_previous() if we renamed it.

&gt; Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt:330
&gt; +&lt;SECTION&gt;
&gt; +&lt;FILE&gt;WebKitFindOptions&lt;/FILE&gt;
&gt; +webkit_find_options_get_type
&gt; +&lt;/SECTION&gt;

We don&apos;t use a new section for enum types that are specific to a section, just add it to the FindController section.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFindController.cpp:27
&gt; +#define TEST_STRING &quot;&lt;html&gt;&lt;body&gt;first testing second testing secondHalf&lt;/body&gt;&lt;/html&gt;&quot;

Use static const char*</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538578</commentid>
    <comment_count>19</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-01-19 02:59:45 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 122900 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=122900&amp;action=review
&gt; 
&gt; Now that you have removed the overlay and indicator options, does this still depend on bug #76522?

Yes, because without it, we wouldn&apos;t receive the didFindString signal unless the overlay find option is passed to the search method.

&gt;  - I still think we should use text instead of string: in gnome API string is commonly used as type name, like in g_value_set_string, g_settings_set_string, etc. and text is used as text shown in the UI like in gtk_entry_set_text, gtk_label_get_text, gtk_cell_renderer_text_new, etc. We can probably avoid string/text in some cases like webkit_find_controller_search() since it&apos;s obvious you are searching text, the same way we have next/previous and not next_string/previous_string.

Not strong opinion here, but we better reach an agreement before I go on changing names forever.

&gt;  - A find controller is associated to a web view, but once it&apos;s returned by the web view, it&apos;s not possible to know the web view the find controller is associated to. API docs talks about the WebKitWebView all the time, but from the WebKitFindController POV there&apos;s not web view. What do you think about keeping the web view instead of the WKPage (you can then get the page from the web view)? It would be a construct only property. This way we don&apos;t need webkitFindAttachFindClientToPage, we can do it in the constructed method of WebKitFindController. And of course, we would add webkit_find_controller_get_web_view().

Looks like a very good idea. Do you think we should have a getter for it?

&gt;  - string, match-count and options are read-write properties, but the API only expose getters for them, and they are only set by webkit_find_controller_search_string() and webkit_find_controller_count_matches(). I would make those properties read-only and add set those manually instead of using g_object_set. This way we also avoid setting the string and max-match-count in next/previous methods.

Definitely.
 
&gt;  - match-count is a property and can be updated by a search operation in didFindString() or webkit_find_controller_count_matches() in didCountStringMatches(), but we are not emitting GObject::notify signal when it&apos;s updated. If we connect to counted-matches we will only be notified when updated from didCountStringMatches(). What do you think about removing counted-matrches signal and emit notify everytime the property is updated?

Looks appealing to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538751</commentid>
    <comment_count>20</comment_count>
      <attachid>122900</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-19 09:03:24 -0800</bug_when>
    <thetext>Comment on attachment 122900
Patch

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

This looks great to me. The only big change I would make is to remove the match-count property and simply return the value with the signal. It means that you only have to do one thing to get the match count instead of multiple things.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:54
&gt; +    WebKitFindOptions findOptions;

findOptions needs to be a guint, since it&apos;s a bitmask.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:87
&gt; +static void didCountStringMatches(WKPageRef page, WKStringRef string, unsigned matchCount, const void* clientInfo)
&gt; +{
&gt; +    WebKitFindController* findController = WEBKIT_FIND_CONTROLLER(clientInfo);
&gt; +    findController-&gt;priv-&gt;matchCount = matchCount;
&gt; +    g_signal_emit(findController, signals[COUNTED_MATCHES], 0);
&gt; +}

I think it makes sense to get rid of the match-count property and simply return the value with this signal. It&apos;s not really a stateful thing, but rather the return value of an asycnhronous method call.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:169
&gt; +     * The text to search in the #WebKitWebView.

Should be &quot;The text to search for&quot;

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:175
&gt; +                                                        _(&quot;Text to search in the view&quot;),

Should be Text to search for

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:224
&gt; +     * page text. It will be issued (if the text is found)

No need for parenthesis here.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:241
&gt; +     * any result for the given string. It will be issued (if the text
&gt; +     * is not found) asynchronously after a call to

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:260
&gt; +     * This signal is emitted to inform about the number of matches
&gt; +     * found in the #WebKitWebView for the given string.  It will be
&gt; +     * issued asynchronously after a call to
&gt; +     * webkit_find_controller_count_matches().

I would suggest slightly different wording here. Perhaps:

This signal is emitted when the #WebKitFindController has counted the number of matches of matches for a given string after a call to webkit_find_controller_count_matches().

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:275
&gt; + * Get the string to look for. This string is passed to either

I think the first sentence could be:

Gets the string that @find_controller is currently searching for. This is the string passed to either...

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:295
&gt; + * #WebKitWebView. If the number of matches is higher than the maximum
&gt; + * number of matches allowed (the last parameter to the
&gt; + * webkit_web_view_search() call) this function returns G_MAXUINT.

Again, I think this can be something like:

Asynchronously query the number of matches for the last search text.

Does the behavior of returning G_MAXUINT comes from the C API or WebCore?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:311
&gt; + * Get the options used to tune up the find operation.

You should probably say something like:

Gets a bitmask containing the #WebKitFindOptions associated with the current search.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:313
&gt; + * Returns: the find options.

Returns: a bitmask containing the #WebKitFindOptions associated with the current search.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:315
&gt; +WebKitFindOptions webkit_find_controller_get_options(WebKitFindController* findController)

This actually needs to return a guint, since it&apos;s a bitmask.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:345
&gt; + * @max_match_count: the maximum number of matches allowed in the search

Might want to mention how to have no limit?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:363
&gt; +void webkit_find_controller_search_string(WebKitFindController* findController, const gchar* searchString, WebKitFindOptions findOptions, guint maxMatchCount)

findOptions needs to be a guint, since it&apos; a bitmask.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:385
&gt; + * webkit_find_controller_search_string() or
&gt; + * webkit_find_controller_count_matches() in the
&gt; + * #WebKitWebView. Callers must be connected to
&gt; + * WebKitFindController::found-string and/or
&gt; + * WebKitFindController::failed-to-find-string signals to get the
&gt; + * result of the search.

You can probably  just say: Look for the next occurence of the search string.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:402
&gt; + * webkit_find_controller_search_string() or
&gt; + * webkit_find_controller_count_matches() in the

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFindController.cpp:291
&gt; +    FindControllerTest::add(&quot;WebKitFindController&quot;, &quot;getters&quot;, testFindControllerGetters);
&gt; +    FindControllerTest::add(&quot;WebKitFindController&quot;, &quot;instance&quot;, testFindControllerInstance);
&gt; +    FindControllerTest::add(&quot;WebKitFindController&quot;, &quot;text-found&quot;, testFindControllerTextFound);
&gt; +    FindControllerTest::add(&quot;WebKitFindController&quot;, &quot;text-not-found&quot;, testFindControllerTextNotFound);
&gt; +    FindControllerTest::add(&quot;WebKitFindController&quot;, &quot;match-count&quot;, testFindControllerMatchCount);
&gt; +    FindControllerTest::add(&quot;WebKitFindController&quot;, &quot;max-match-count&quot;, testFindControllerMaxMatchCount);
&gt; +    FindControllerTest::add(&quot;WebKitFindController&quot;, &quot;next&quot;, testFindControllerNext);
&gt; +    FindControllerTest::add(&quot;WebKitFindController&quot;, &quot;previous&quot;, testFindControllerPrevious);
&gt; +    FindControllerTest::add(&quot;WebKitFindController&quot;, &quot;counted-matches&quot;, testFindControllerCountedMatches);
&gt; +    FindControllerTest::add(&quot;WebKitFindController&quot;, &quot;options&quot;, testFindControllerOptions);

I really like how your seperated all assertions into different tests. This makes debugging failures a lot easier!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538758</commentid>
    <comment_count>21</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-19 09:24:26 -0800</bug_when>
    <thetext>I think it&apos;s perfectly valid to use WebKitFindOptions in public API instead do guint.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538982</commentid>
    <comment_count>22</comment_count>
      <attachid>123184</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-01-19 13:32:56 -0800</bug_when>
    <thetext>Created attachment 123184
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539247</commentid>
    <comment_count>23</comment_count>
      <attachid>123184</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-01-19 19:27:35 -0800</bug_when>
    <thetext>Comment on attachment 123184
Patch

Attachment 123184 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11307121</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540096</commentid>
    <comment_count>24</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-01-21 00:46:47 -0800</bug_when>
    <thetext>I still have doubts about this API. Matches are not highlighted, only the current match is selected but not highlighted. There is some kind of highlight if we use the show overlay FindOption that I removed from my last patch. Thing is that I am not sure that we would want/need the overlay thing (the current rendering is pretty bad anyway). Also the API does not allow callers to unmark the highlighted matches (if we&apos;d have the highlight).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540404</commentid>
    <comment_count>25</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-23 00:05:31 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; I still have doubts about this API. Matches are not highlighted, only the current match is selected but not highlighted. There is some kind of highlight if we use the show overlay FindOption that I removed from my last patch. Thing is that I am not sure that we would want/need the overlay thing (the current rendering is pretty bad anyway). Also the API does not allow callers to unmark the highlighted matches (if we&apos;d have the highlight).

We could try to use overlay option internally without exposing it in the API to get the behaviour we want. I think that the find should just work like we are used to, all matches are highlighted when you start a search operation, with the current match using a different color or opacity. When the search operation finishes, matches are not highlighted anymore. So, instead or mark/unmark we could just add _cancel() or _finish().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540614</commentid>
    <comment_count>26</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-23 09:42:21 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; (In reply to comment #24)
&gt; &gt; I still have doubts about this API. Matches are not highlighted, only the current match is selected but not highlighted. There is some kind of highlight if we use the show overlay FindOption that I removed from my last patch. Thing is that I am not sure that we would want/need the overlay thing (the current rendering is pretty bad anyway). Also the API does not allow callers to unmark the highlighted matches (if we&apos;d have the highlight).
&gt; 
&gt; We could try to use overlay option internally without exposing it in the API to get the behaviour we want. I think that the find should just work like we are used to, all matches are highlighted when you start a search operation, with the current match using a different color or opacity. When the search operation finishes, matches are not highlighted anymore. So, instead or mark/unmark we could just add _cancel() or _finish().

I think we need to figure out what was happening in WebCore in WebKit1 and make sure we can do the same thing in WebKit2. The WebKit layer shouldn&apos;t change the behavior here, since all the logic is in WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544981</commentid>
    <comment_count>27</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-01-30 03:29:28 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; (In reply to comment #25)
&gt; &gt; (In reply to comment #24)
&gt; &gt; &gt; I still have doubts about this API. Matches are not highlighted, only the current match is selected but not highlighted. There is some kind of highlight if we use the show overlay FindOption that I removed from my last patch. Thing is that I am not sure that we would want/need the overlay thing (the current rendering is pretty bad anyway). Also the API does not allow callers to unmark the highlighted matches (if we&apos;d have the highlight).
&gt; &gt; 
&gt; &gt; We could try to use overlay option internally without exposing it in the API to get the behaviour we want. I think that the find should just work like we are used to, all matches are highlighted when you start a search operation, with the current match using a different color or opacity. When the search operation finishes, matches are not highlighted anymore. So, instead or mark/unmark we could just add _cancel() or _finish().
&gt; 
&gt; I think we need to figure out what was happening in WebCore in WebKit1 and make sure we can do the same thing in WebKit2. The WebKit layer shouldn&apos;t change the behavior here, since all the logic is in WebCore.

I explained the reasons in http://webkit.org/b/76522. Basically WK2 C API was unconditionally setting the showHighlight to false because the mac port does not use it (they use an overlay + some code in the different browsers). The relevant discussion continues in the bug mentioned above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547893</commentid>
    <comment_count>28</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-02-02 08:51:38 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; &gt; I think we need to figure out what was happening in WebCore in WebKit1 and make sure we can do the same thing in WebKit2. The WebKit layer shouldn&apos;t change the behavior here, since all the logic is in WebCore.
&gt; 
&gt; I explained the reasons in http://webkit.org/b/76522. Basically WK2 C API was unconditionally setting the showHighlight to false because the mac port does not use it (they use an overlay + some code in the different browsers). The relevant discussion continues in the bug mentioned above.

Ok, so I&apos;m removing the r? flag at least until 76522 is fixed. The highlight thing was already fixed with 76921. I&apos;m removing the r? flag because this API lacks the ability to unmark (unhighlight) text matches, something that was possible with WK1. After talking to Carlos we concluded that having something like webkit_find_controller_search_finish() in the API would be nice.

The implementation is quite straightforward but needs some changes in the WK2 internals that I&apos;m currently discussing in 76522.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547894</commentid>
    <comment_count>29</comment_count>
      <attachid>123184</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-02-02 08:52:15 -0800</bug_when>
    <thetext>Comment on attachment 123184
Patch

Removing the review flag. Will provide a more complete patch soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548806</commentid>
    <comment_count>30</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-02-03 09:44:14 -0800</bug_when>
    <thetext>Added bug 77747 to dependencies. It&apos;s the one that handles the unhighlight issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548808</commentid>
    <comment_count>31</comment_count>
      <attachid>125356</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-02-03 09:52:46 -0800</bug_when>
    <thetext>Created attachment 125356
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549917</commentid>
    <comment_count>32</comment_count>
      <attachid>125622</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-02-06 05:18:23 -0800</bug_when>
    <thetext>Created attachment 125622
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549918</commentid>
    <comment_count>33</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-02-06 05:20:10 -0800</bug_when>
    <thetext>(In reply to comment #32)
&gt; Created an attachment (id=125622) [details]
&gt; Patch

As suggested by Martin I uploaded a new version of this patch that does not assume that 76522 was fixed before. This way unit tests need to artificially use a findOption that we do not even expose to work. Once this lands we could land also 76522 (that already has a r+) and then remove that hack from the unit tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550118</commentid>
    <comment_count>34</comment_count>
      <attachid>125622</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-02-06 11:13:26 -0800</bug_when>
    <thetext>Comment on attachment 125622
Patch

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

Looking pretty good! I&apos;m going to try to fix the style bot to catch more of these errors.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitDefines.h:51
&gt; +typedef struct _WebKitFindController        WebKitFindController;
&gt; +typedef struct _WebKitFindControllerClass   WebKitFindControllerClass;
&gt; +
&gt; +typedef struct _WebKitWebView WebKitWebView;
&gt; +typedef struct _WebKitWebViewClass WebKitWebViewClass;

It&apos;s a bit odd that one of these is aligned and one isn&apos;t. :)

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:55
&gt; +    OP_FIND,
&gt; +    OP_COUNT

Since these WebKit enums are private to the file, they should use WebKit naming conventions. Thus they should be FindOperation and CountOperation.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:61
&gt; +    guint findOptions;
&gt; +    unsigned maxMatchCount;

Why use guint and then unsigned? You should probably use &quot;unsigned int&quot; for both. I&apos;d keep guint for the API, but avoid it internally.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:97
&gt; +static WKPageRef inline getWKPageFromWebKitWebView(WebKitWebView *webView)

You asterisk is in the wrong place here.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:171
&gt; +     * The text to search for in the #WebKitWebView.

Maybe something like &quot;The current search string for this #WebKitFindController.&quot; would be more accurate?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:217
&gt; +                                                        _(&quot;Web View&quot;),
&gt; +                                                        _(&quot;The Web View associated with this find controller&quot;),

I think we should use WebView here. This seems really inconsistent, but we always say WebView like we always say WebKit.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:224
&gt; +     * @match_count: the number of matches of the search text

&quot;the number of matches found in the search text&quot; I think.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:353
&gt; +        // We always highlight text matches

This comment is missing the &quot;Why?&quot; Why do you we always highlight text matches? Watch out for the missing period here.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:377
&gt; + * Looks for @search_text in the #WebKitWebView associated with
&gt; + * @find_controller. The outcome of the search will be asynchronously
&gt; + * provided by the WebKitFindController::found-string and
&gt; + * WebKitFindController::failed-to-find-string.

Might want to mention that this starts from the beginning of the document.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.h:79
&gt; +WEBKIT_API void
&gt; +webkit_find_controller_search              (WebKitFindController *find_controller,
&gt; +					    const gchar          *search_text,
&gt; +					    guint                 find_options,
&gt; +					    guint                 max_match_count);
&gt; +

The indentation looks off at some places in this file.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFindController.cpp:35
&gt; +        : m_runFindUntilCompletion(false),
&gt; +          m_findController(webkit_web_view_get_find_controller(m_webView))

The comma goes at the start of the next line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550148</commentid>
    <comment_count>35</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-02-06 11:44:12 -0800</bug_when>
    <thetext>(In reply to comment #34)
&gt; (From update of attachment 125622 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=125622&amp;action=review
&gt; 
&gt; Looking pretty good! I&apos;m going to try to fix the style bot to catch more of these errors.

[...]

Fixed all those style issues. 

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.h:79
&gt; &gt; +WEBKIT_API void
&gt; &gt; +webkit_find_controller_search              (WebKitFindController *find_controller,
&gt; &gt; +					    const gchar          *search_text,
&gt; &gt; +					    guint                 find_options,
&gt; &gt; +					    guint                 max_match_count);
&gt; &gt; +
&gt; 
&gt; The indentation looks off at some places in this file.

Yeah some tabs were there by mistake.

Any other comment apart from those style fixes Martin?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550665</commentid>
    <comment_count>36</comment_count>
      <attachid>125622</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-07 00:07:03 -0800</bug_when>
    <thetext>Comment on attachment 125622
Patch

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

Looks great!

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitDefines.h:51
&gt; +typedef struct _WebKitFindController        WebKitFindController;
&gt; +typedef struct _WebKitFindControllerClass   WebKitFindControllerClass;
&gt; +
&gt; +typedef struct _WebKitWebView WebKitWebView;
&gt; +typedef struct _WebKitWebViewClass WebKitWebViewClass;

I don&apos;t think we need forward declaration for class structs

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:56
&gt; +typedef enum {
&gt; +    OP_FIND,
&gt; +    OP_COUNT
&gt; +} WebKitFindControllerFindOperation;

Maybe WebKitFindControllerOperation? the second Find sounds a bit redundant to me and makes the name longer.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:77
&gt; +    g_signal_emit(WEBKIT_FIND_CONTROLLER(clientInfo), signals[FOUND_STRING], 0, matchCount);

Can we use text instead of string everywhere? For the reasons I explained in comment #18. You said you don&apos;t have strong preference, so do you mind using text instead?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:287
&gt; +const char* webkit_find_controller_get_search_text(WebKitFindController* findController)

You are indeed using text here instead of string :-)

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.h:28
&gt; +#include &lt;webkit2/WebKitWebView.h&gt;

That header doesn&apos;t have the WebView typedef anymore, so include #include &lt;webkit2/WebKitDefines.h&gt;.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.h:49
&gt; + * @WEBKIT_FIND_OPTIONS_WRAP_AROUND: if not present search will stop at the end of the document
&gt; + */

A brief explanation is missing here, a single line saying this an enum containing the flags used when searching.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551118</commentid>
    <comment_count>37</comment_count>
      <attachid>125877</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-02-07 10:41:48 -0800</bug_when>
    <thetext>Created attachment 125877
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551140</commentid>
    <comment_count>38</comment_count>
      <attachid>125877</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-07 11:06:57 -0800</bug_when>
    <thetext>Comment on attachment 125877
Patch

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

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:29
&gt; +#include &lt;WebKit2/WKFindOptions.h&gt;
&gt; +#include &lt;WebKit2/WKRetainPtr.h&gt;
&gt; +#include &lt;WebKit2/WKString.h&gt;

Sorry, I forgot to say in previous review, but this should all be included by WebKitPrivate.h

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:169
&gt; +     * WebKitFindController::text

Trailing : missing here

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:469
&gt; + **/

Single * here

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:470
&gt; +void webkit_find_controller_search_finish(WebKitFindController *findController)

* is incorrectly placed here, it should be WebKitFindController* findController

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:1282
&gt; +WebKitFindController* webkit_web_view_get_find_controller(WebKitWebView *webView)

WebKitWebView *webView -&gt; WebKitWebView* webView</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551142</commentid>
    <comment_count>39</comment_count>
      <attachid>125877</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-07 11:08:33 -0800</bug_when>
    <thetext>Comment on attachment 125877
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:169
&gt;&gt; +     * WebKitFindController::text
&gt; 
&gt; Trailing : missing here

And it&apos;s a property, it should be 

WebKitFindController:text:</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551978</commentid>
    <comment_count>40</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-02-08 03:40:31 -0800</bug_when>
    <thetext>OK, I have fixed the remaining style issues locally. Anything else to consider? Are we all happy with the API?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551981</commentid>
    <comment_count>41</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-08 03:44:01 -0800</bug_when>
    <thetext>(In reply to comment #40)
&gt; OK, I have fixed the remaining style issues locally. Anything else to consider? Are we all happy with the API?

I am</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>552296</commentid>
    <comment_count>42</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-02-08 11:00:58 -0800</bug_when>
    <thetext>(In reply to comment #40)
&gt; OK, I have fixed the remaining style issues locally. Anything else to consider? Are we all happy with the API?

So the thing is that, while reviewing the final patch for submitting I noticed that with this implementation, search_next() and search_previous() will be internally always unmarking + marking all text matches when they should just find the next/previous occurrence of the string. That&apos;s because http://webkit.org/b/78132.

That will make search for the next/previous slower than it should theoretically be (as it&apos;s doing more operations than it should), *but* at the same time, that issue shouldn&apos;t force us to change the API, perhaps we will have to change the implementation in another future bug, but the API should remain untouched.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554127</commentid>
    <comment_count>43</comment_count>
      <attachid>126528</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-02-10 09:51:09 -0800</bug_when>
    <thetext>Created attachment 126528
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554129</commentid>
    <comment_count>44</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-02-10 09:54:38 -0800</bug_when>
    <thetext>(In reply to comment #43)
&gt; Created an attachment (id=126528) [details]
&gt; Patch

So this patch addresses the last style issues reported by Carlos&amp;Martin and on top on that I added an additional test case for the last addition to the API webkit_find_controller_search_finish().

As it can be seen in the code the unit tests have a couple of comments that clearly (I hope so) specify that some stuff can not be tested until a couple of bugs are fixed:
* http://webkit.org/b/76522: Darin already gave a r+ with the condition of providing a tests case (that would mean uncomment some code in the unit tests)
* http://webkit.org/b/77747: I&apos;ll try to get a r+ the same way I got it for the other bug.

Hope everything is clear.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>554130</commentid>
    <comment_count>45</comment_count>
      <attachid>126528</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-02-10 09:56:25 -0800</bug_when>
    <thetext>Comment on attachment 126528
Patch

Attachment 126528 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11480730</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>555688</commentid>
    <comment_count>46</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-02-13 15:45:11 -0800</bug_when>
    <thetext>Error on GTK EWS is:

TestWebKitFindController.cpp:274:102: error: &apos;gdk_pixbuf_get_pixels_with_length&apos; was not declared in this scope</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556327</commentid>
    <comment_count>47</comment_count>
      <attachid>126984</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-02-14 08:38:34 -0800</bug_when>
    <thetext>Created attachment 126984
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556328</commentid>
    <comment_count>48</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-02-14 08:39:28 -0800</bug_when>
    <thetext>(In reply to comment #46)
&gt; Error on GTK EWS is:
&gt; 
&gt; TestWebKitFindController.cpp:274:102: error: &apos;gdk_pixbuf_get_pixels_with_length&apos; was not declared in this scope

Yes sorry, I was using locally a bleeding edge version of gdk-pixbuf</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>556330</commentid>
    <comment_count>49</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-14 08:41:24 -0800</bug_when>
    <thetext>Attachment 126984 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/update-webkit&apos;]&quot; exit_code: 9

Updating OpenSource
First, rewinding head to replay your work on top of it...
Applying: [Mac][Win][WK2] Switch to RFC 6455 protocol for WebSockets
Using index info to reconstruct a base tree...
&lt;stdin&gt;:1578: trailing whitespace.
        
&lt;stdin&gt;:1647: trailing whitespace.
    
&lt;stdin&gt;:1657: trailing whitespace.
    
&lt;stdin&gt;:1672: trailing whitespace.
        return 0;        
&lt;stdin&gt;:1674: trailing whitespace.
    
warning: squelched 7 whitespace errors
warning: 12 lines add whitespace errors.
Falling back to patching base and 3-way merge...
warning: too many files (created: 168776 deleted: 3), skipping inexact rename detection
Auto-merging LayoutTests/ChangeLog
Auto-merging Source/WebCore/ChangeLog
CONFLICT (content): Merge conflict in Source/WebCore/ChangeLog
Auto-merging Source/WebKit2/ChangeLog
CONFLICT (content): Merge conflict in Source/WebKit2/ChangeLog
Auto-merging Tools/ChangeLog
CONFLICT (content): Merge conflict in Tools/ChangeLog
Failed to merge in the changes.
Patch failed at 0001 [Mac][Win][WK2] Switch to RFC 6455 protocol for WebSockets

When you have resolved this problem run &quot;git rebase --continue&quot;.
If you would prefer to skip this patch, instead run &quot;git rebase --skip&quot;.
To restore the original branch and stop rebasing run &quot;git rebase --abort&quot;.

rebase refs/remotes/origin/master: command returned error: 1

Died at Tools/Scripts/update-webkit line 164.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>558222</commentid>
    <comment_count>50</comment_count>
      <attachid>126984</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-02-16 08:35:53 -0800</bug_when>
    <thetext>Comment on attachment 126984
Patch

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

Very nice. This patch looks fine, except that 3 seconds is *way* too long for a test to run. Please try to get the test to run within 1/2 second before landing. If possible replace the timeouts with a more deterministic approach.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:128
&gt; +        g_value_set_string(value, findController-&gt;priv-&gt;searchText.data());
&gt; +        break;
&gt; +    case PROP_OPTIONS:
&gt; +        g_value_set_uint(value, findController-&gt;priv-&gt;findOptions);
&gt; +        break;
&gt; +    case PROP_MAX_MATCH_COUNT:
&gt; +        g_value_set_uint(value, findController-&gt;priv-&gt;maxMatchCount);
&gt; +        break;
&gt; +    case PROP_WEB_VIEW:
&gt; +        g_value_set_object(value, findController-&gt;priv-&gt;webView);

Not a huge deal, but these should probably call the getter methods. This is consistent with other GObjects and allows for more complex behavior such as lazy caching of WebCore values.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:357
&gt; +    } else
&gt; +        WKPageCountStringMatches(wkPage, wkSearchText.get(), wkFindOptions, findController-&gt;priv-&gt;maxMatchCount);

You should use an early return here.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:391
&gt; + * This function will also highligh up to @max_match_count

highligh -&gt; highlight

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFindController.cpp:310
&gt; +    // WebCore has highlighted the matches or no, and there is also no

Nit: or no -&gt; or not

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFindController.cpp:336
&gt; +    test-&gt;wait(1.0);
&gt; +    GdkPixbuf* originalPixbuf = gdk_pixbuf_get_from_window(webViewGdkWindow, 0, 0, allocatedHeight, allocatedWidth);
&gt; +    g_assert(originalPixbuf);
&gt; +
&gt; +    test-&gt;find(&quot;testing&quot;, WEBKIT_FIND_OPTIONS_NONE, 1);
&gt; +    test-&gt;waitUntilFindFinished();
&gt; +    g_assert(test-&gt;m_textFound);
&gt; +
&gt; +    test-&gt;wait(1.0);
&gt; +    GdkPixbuf* highlightPixbuf = gdk_pixbuf_get_from_window(webViewGdkWindow, 0, 0, allocatedHeight, allocatedWidth);
&gt; +    g_assert(highlightPixbuf);
&gt; +    g_assert(!gdkPixbufEqual(originalPixbuf, highlightPixbuf));
&gt; +
&gt; +    // Requires http://webkit.org/b/77747 to be fixed
&gt; +    // WebKitFindController* findController = webkit_web_view_get_find_controller(test-&gt;m_webView);
&gt; +    // webkit_find_controller_search_finish(findController);
&gt; +    // gtk_widget_show_now(GTK_WIDGET(test-&gt;m_webView));
&gt; +    // webkit_web_view_execute_editing_command(test-&gt;m_webView, &quot;Unselect&quot;);
&gt; +
&gt; +    // test-&gt;wait(1.0);
&gt; +    // GdkPixbuf* unhighlightPixbuf = gdk_pixbuf_get_from_window(webViewGdkWindow, 0, 0, allocatedHeight, allocatedWidth);
&gt; +    // g_assert(unhighlightPixbuf);
&gt; +    // g_assert(gdkPixbufEqual(originalPixbuf, unhighlightPixbuf));
&gt; +
&gt; +    g_object_unref(originalPixbuf);

Waiting three seconds here is far too long, in my opinion. Does a 1/10th or 1/5th of a second work for these timeouts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>562077</commentid>
    <comment_count>51</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-02-22 10:00:42 -0800</bug_when>
    <thetext>Removing two bugs that depend on this one instead of blocking it. Adding 79252 to the list of dependencies, without it unit tests hang in debug builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564388</commentid>
    <comment_count>52</comment_count>
      <attachid>128749</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-02-24 09:37:37 -0800</bug_when>
    <thetext>Created attachment 128749
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564393</commentid>
    <comment_count>53</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-02-24 09:44:23 -0800</bug_when>
    <thetext>(In reply to comment #52)
&gt; Created an attachment (id=128749) [details]
&gt; Patch

I finally managed to remove the nasty timeouts listening to webView&apos;s draw signal. Apart from that this patch fixes the minor issues detected by Martin and also replaces the guint type of find options by guint32, as find options in WKFindOptions.h are defined as uint32_t</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565521</commentid>
    <comment_count>54</comment_count>
      <attachid>128749</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-27 02:42:39 -0800</bug_when>
    <thetext>Comment on attachment 128749
Patch

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

Looks great!

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:127
&gt; +        g_value_set_object(value, findController-&gt;priv-&gt;webView);

Why don you use webkit_find_controller_get_web_view() in this case, like for the other properties?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:150
&gt; +    WEBKIT_FIND_CONTROLLER(object)-&gt;priv-&gt;~WebKitFindControllerPrivate();
&gt; +    G_OBJECT_CLASS(webkit_find_controller_parent_class)-&gt;finalize(object);

We could call finish() here is it wasn&apos;t called to make sure the matches are always unhighlighted.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:379
&gt; + * WebKitFindController::found-text and
&gt; + * WebKitFindController::failed-to-find-text.

# is missing there #WebKitFindController::found-text and #WebKitFindController::failed-to-find-text

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:394
&gt; + * This function will also highlight up to @max_match_count
&gt; + * maches. Callers should call webkit_find_controller_search_finish()
&gt; + * to unhighlight them.

Maybe, instead of adding this as an additional thing the method does, I would include it in the main explanation, Something like:

Looks for @search_text in the #WebKitWebView associated with @find_controller since the beginning of the document highlighting up to @max_match_count matches. 

Or something like that. And then: You should call webkit_find_controller_search_finish() to finish the current search operation. Isn&apos;t it obvious enough that the matches are unhighlighted when the search operation finishes? What do you think?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:400
&gt; +

This method starts a new search operation, so we could call finish() here too, to make sure any previous search operation is finished and matches are unhighlighted.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:449
&gt; + * WebKitFindController::counted-matches signal.

#WebKitFindController::counted-matches

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:466
&gt; + * Finishes a find operation started by
&gt; + * webkit_find_controller_search(). It will basically unhighlight
&gt; + * every text match found.

You could say that this is typically called when the search ui is closed/hidden in the app.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFindController.cpp:321
&gt; +    GdkPixbuf* originalPixbuf = gdk_pixbuf_get_from_window(webViewGdkWindow, 0, 0, allocatedHeight, allocatedWidth);

You could use GRefPtr for the pixbuf

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFindController.cpp:329
&gt; +    GdkPixbuf* highlightPixbuf = gdk_pixbuf_get_from_window(webViewGdkWindow, 0, 0, allocatedHeight, allocatedWidth);

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFindController.cpp:341
&gt; +    // Requires http://webkit.org/b/77747 to be fixed
&gt; +    // WebKitFindController* findController = webkit_web_view_get_find_controller(test-&gt;m_webView);
&gt; +    // webkit_find_controller_search_finish(findController);
&gt; +    // gtk_widget_show_now(GTK_WIDGET(test-&gt;m_webView));
&gt; +    // webkit_web_view_execute_editing_command(test-&gt;m_webView, &quot;Unselect&quot;);
&gt; +
&gt; +    // test-&gt;waitUntilWidgetDrawn();
&gt; +    // GdkPixbuf* unhighlightPixbuf = gdk_pixbuf_get_from_window(webViewGdkWindow, 0, 0, allocatedHeight, allocatedWidth);
&gt; +    // g_assert(unhighlightPixbuf);
&gt; +    // g_assert(gdkPixbufEqual(originalPixbuf, unhighlightPixbuf));

We use #if 0 in other tests, instead of commented code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565532</commentid>
    <comment_count>55</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-02-27 03:03:11 -0800</bug_when>
    <thetext>(In reply to comment #54)
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:150
&gt; &gt; +    WEBKIT_FIND_CONTROLLER(object)-&gt;priv-&gt;~WebKitFindControllerPrivate();
&gt; &gt; +    G_OBJECT_CLASS(webkit_find_controller_parent_class)-&gt;finalize(object);
&gt; 
&gt; We could call finish() here is it wasn&apos;t called to make sure the matches are always unhighlighted.

I don&apos;t understand this sentence. Could you rephrase it?
 
&gt; Or something like that. And then: You should call webkit_find_controller_search_finish() to finish the current search operation. Isn&apos;t it obvious enough that the matches are unhighlighted when the search operation finishes? What do you think?

I think we should mention it anyway, I wouldn&apos;t say it&apos;s obvious.
 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:400
&gt; &gt; +
&gt; 
&gt; This method starts a new search operation, so we could call finish() here too, to make sure any previous search operation is finished and matches are unhighlighted.

I guess you mean that we should mention it in the docs right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565550</commentid>
    <comment_count>56</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-27 03:40:59 -0800</bug_when>
    <thetext>(In reply to comment #55)
&gt; (In reply to comment #54)
&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:150
&gt; &gt; &gt; +    WEBKIT_FIND_CONTROLLER(object)-&gt;priv-&gt;~WebKitFindControllerPrivate();
&gt; &gt; &gt; +    G_OBJECT_CLASS(webkit_find_controller_parent_class)-&gt;finalize(object);
&gt; &gt; 
&gt; &gt; We could call finish() here is it wasn&apos;t called to make sure the matches are always unhighlighted.
&gt; 
&gt; I don&apos;t understand this sentence. Could you rephrase it?

I meant we should make sure that the current search operation is finished when the object is finalized, but I had forgotten that the find controller object is alive until the view is finalized, so it doesn&apos;t make sense, because the view will be destroyed anyway. 

&gt; &gt; Or something like that. And then: You should call webkit_find_controller_search_finish() to finish the current search operation. Isn&apos;t it obvious enough that the matches are unhighlighted when the search operation finishes? What do you think?
&gt; 
&gt; I think we should mention it anyway, I wouldn&apos;t say it&apos;s obvious.
&gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFindController.cpp:400
&gt; &gt; &gt; +
&gt; &gt; 
&gt; &gt; This method starts a new search operation, so we could call finish() here too, to make sure any previous search operation is finished and matches are unhighlighted.
&gt; 
&gt; I guess you mean that we should mention it in the docs right?

No, I mean we should call webkit_find_controller_search_finish() or WKPageHideFindUI() directly if there&apos;s an ongoing search operation when a new one starts and the user hasn&apos;t explicitly called it already. Maybe we don&apos;t need it because the new operation already resets the old highlights, so I might be wrong here too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565566</commentid>
    <comment_count>57</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-02-27 04:22:53 -0800</bug_when>
    <thetext>(In reply to comment #56)

&gt; &gt; &gt; This method starts a new search operation, so we could call finish() here too, to make sure any previous search operation is finished and matches are unhighlighted.
&gt; &gt; 
&gt; &gt; I guess you mean that we should mention it in the docs right?
&gt; 
&gt; No, I mean we should call webkit_find_controller_search_finish() or WKPageHideFindUI() directly if there&apos;s an ongoing search operation when a new one starts and the user hasn&apos;t explicitly called it already. Maybe we don&apos;t need it because the new operation already resets the old highlights, so I might be wrong here too.

Exactly, the very first thing that is done by the FindController everytime a new search operation is started is unmarkAllTextMatches(), so there is no need to explicitly invoke a _finish().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>566728</commentid>
    <comment_count>58</comment_count>
      <attachid>128749</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-02-28 08:44:16 -0800</bug_when>
    <thetext>Comment on attachment 128749
Patch

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

I second Carlos&apos;s comments. Apart from that it looks fine API-wise and the test as well.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFindController.cpp:297
&gt; +    int totalLenght = (pixbufHeight - 1) * pixbufRowstride \

typo: totalLength</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567421</commentid>
    <comment_count>59</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-28 23:27:11 -0800</bug_when>
    <thetext>If we all agree the patch is good and Martin already r+&apos;ed the previous patch (the new one doesn&apos;t change the API nor the impl, just the unit tests), could some reviewer mark this r+, please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567440</commentid>
    <comment_count>60</comment_count>
      <attachid>128749</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-02-28 23:53:17 -0800</bug_when>
    <thetext>Comment on attachment 128749
Patch

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

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitFindController.cpp:71
&gt; +    void waitUntilWidgetDrawn()

This might be more accurately called waitUntilWebViewDrawSignal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567685</commentid>
    <comment_count>61</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2012-02-29 09:37:14 -0800</bug_when>
    <thetext>Committed r109222: &lt;http://trac.webkit.org/changeset/109222&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122044</attachid>
            <date>2012-01-11 10:00:35 -0800</date>
            <delta_ts>2012-01-16 06:46:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76070-20120111190032.patch</filename>
            <type>text/plain</type>
            <size>47926</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzOTMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMGFhNmVjNDhiNWQzNWU1
OWMyMDk0NjNhMWNmZmU2Yzk4YzMzMjYzMS4uYjg2MjY1ZDUzZmJmNWVlOGEzN2QwMzE3ZjViODY4
NTEwOTU2NDVkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDEyLTAxLTExICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFtX
SzJdIEFkZCBGaW5kIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzYwNzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIHBhdGNoIGFkZHMgcHVibGljIGZpbmQgQVBJIGZvciB0aGUgR3RrKyBXSzIg
cG9ydC4gSXQgZGVmaW5lcworICAgICAgICBhIG5ldyBvYmplY3QgV2ViS2l0RmluZENvbnRleHQg
dGhhdCB3aWxsIGJlIHJldHVybmVkIGJ5IHRoZQorICAgICAgICBXZWJLaXRXZWJWaWV3IG9uIHJl
c3BvbnNlIHRvIHRoZSBjYWxsIHRvCisgICAgICAgIHdlYmtpdF93ZWJfdmlld19zZWFyY2goKS4g
VGhlIFdlYktpdEZpbmRDb250ZXh0IGlzIHRpZWQgdG8gYQorICAgICAgICBwYXJ0aWN1bGFyIHNl
YXJjaCBvcGVyYXRpb24gb24gYSBwYXJ0aWN1bGFyIFdlYktpdFdlYlZpZXcuCisKKyAgICAgICAg
Q2hhbmdlcyBpbmNsdWRlIGFsc28gZG9jdW1lbnRhdGlvbiBhbmQgdW5pdCB0ZXN0cyBmb3IgdGhl
IG5ldworICAgICAgICBwdWJsaWMgQVBJLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RGVmaW5lcy5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbmRDb250ZXh0LmNwcDogQWRkZWQuCisgICAgICAgIChk
aWRGaW5kU3RyaW5nKTogaW1wbGVtZW50YXRpb24gb2YgdGhlIFdLUGFnZSBGaW5kIGludGVyZmFj
ZS4KKyAgICAgICAgKGRpZEZhaWxUb0ZpbmRTdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKGRpZENv
dW50U3RyaW5nTWF0Y2hlcyk6IERpdHRvLgorICAgICAgICAod2Via2l0RmluZEF0dGFjaEZpbmRD
bGllbnRUb1BhZ2UpOiBhY3R1YWxseSBzZXRzIHRoZQorICAgICAgICBXZWJLaXRGaW5kQ29udGV4
dCBvYmplY3QgYXMgdGhlIFdLUGFnZSBmaW5kIGNsaWVudAorICAgICAgICAod2Via2l0X2ZpbmRf
Y29udGV4dF9pbml0KToKKyAgICAgICAgKHdlYmtpdF9maW5kX2NvbnRleHRfZ2V0X3Byb3BlcnR5
KToKKyAgICAgICAgKHdlYmtpdF9maW5kX2NvbnRleHRfc2V0X3Byb3BlcnR5KToKKyAgICAgICAg
KHdlYmtpdF9maW5kX2NvbnRleHRfZmluYWxpemUpOgorICAgICAgICAod2Via2l0X2ZpbmRfY29u
dGV4dF9jbGFzc19pbml0KToKKyAgICAgICAgKGZpbmRDb250ZXh0RmxhZ3NUb1dLRmluZE9wdGlv
bnMpOiBjb252ZXJ0cyBmcm9tCisgICAgICAgIFdlYktpdEZpbmRDb250ZXh0RmxhZ3MgdG8gQyBB
UEkncyBXS0ZpbmRPcHRpb25zLgorICAgICAgICAod2Via2l0X2ZpbmRfY29udGV4dF9nZXRfc2Vh
cmNoX3N0cmluZyk6IG5ldyBwdWJsaWMgZmluZCBBUEkuCisgICAgICAgICh3ZWJraXRfZmluZF9j
b250ZXh0X2dldF9tYXRjaF9jb3VudCk6IERpdHRvLgorICAgICAgICAod2Via2l0X2ZpbmRfY29u
dGV4dF9nZXRfZmxhZ3MpOiBEaXR0by4KKyAgICAgICAgKHdlYmtpdF9maW5kX2NvbnRleHRfZ2V0
X21heF9tYXRjaF9jb3VudCk6IERpdHRvLgorICAgICAgICAod2Via2l0X2ZpbmRfY29udGV4dF9z
dGFydCk6IERpdHRvLgorICAgICAgICAod2Via2l0X2ZpbmRfY29udGV4dF9uZXh0KTogRGl0dG8u
CisgICAgICAgICh3ZWJraXRfZmluZF9jb250ZXh0X3ByZXYpOiBEaXR0by4KKyAgICAgICAgKHdl
YmtpdF9maW5kX2NvbnRleHRfY291bnRfbWF0Y2hlcyk6IERpdHRvLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdEZpbmRDb250ZXh0Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdEZpbmRDb250ZXh0UHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdF93
ZWJfdmlld19zZWFyY2gpOiByZXR1cm5zIGEgV2ViS2l0RmluZENvbnRleHQgb2JqZWN0IHRvCisg
ICAgICAgIGZpbmQgdGV4dCBpbnNpZGUgdGhlIFdlYktpdFdlYlZpZXcuCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWw6IGRvY3MgZm9yIHRoZSBuZXcKKyAgICAgICAg
cHVibGljIEFQSS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGst
c2VjdGlvbnMudHh0OiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dl
YmtpdDJndGsudHlwZXM6IERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L0dOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RX
ZWJLaXRGaW5kQ29udGV4dC5jcHA6IEFkZGVkLgorICAgICAgICAodGVzdFdlYkNvbnRleHRUZXh0
Rm91bmQpOgorICAgICAgICAodGVzdFdlYkNvbnRleHRUZXh0Tm90Rm91bmQpOgorICAgICAgICAo
dGVzdFdlYkNvbnRleHRNYXRjaENvdW50KToKKyAgICAgICAgKHRlc3RXZWJDb250ZXh0TWF4TWF0
Y2hDb3VudCk6CisgICAgICAgICh0ZXN0V2ViQ29udGV4dE5leHQpOgorICAgICAgICAodGVzdFdl
YkNvbnRleHRQcmV2KToKKyAgICAgICAgKHRlc3RXZWJDb250ZXh0Q291bnRlZE1hdGNoZXMpOgor
ICAgICAgICAodGVzdFdlYkNvbnRleHRGbGFncyk6CisgICAgICAgICh0ZXN0V2ViQ29udGV4dElu
c3RhbmNlKToKKyAgICAgICAgKHRlc3RXZWJDb250ZXh0R2V0dGVycyk6CisgICAgICAgIChiZWZv
cmVBbGwpOgorICAgICAgICAoYWZ0ZXJBbGwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3Rr
L3dlYmtpdDIuaDoKKwogMjAxMi0wMS0wMyAgUmFmYWVsIEJyYW5kYW8gIDxyYWZhZWwubG9ib0Bv
cGVuYm9zc2Eub3JnPgogCiAgICAgICAgIFtRdF1bV0syXSB0c3RfZmF2SWNvbkxvYWQucW1sIGNy
YXNoZXMgb24gZGVidWcgbW9kZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZp
bGUuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCA2ZTk0YjQ2NmFlOTQ2
YTU1MWU0ZjA5ZjcwZjZkODk3ZGZkZDY2NmY0Li41ZDJkMDVlMDI5MzM3ZGI2ZWVjOTE2NzlhZGRi
YjI0MzM2MzBkNTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQpAQCAtODMsNiArODMsNyBAQCB3ZWJr
aXQyZ3RrX2hlYWRlcnMgPSBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRC
YWNrRm9yd2FyZExpc3RJdGVtLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0RGVmaW5lcy5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9y
LmggXAorCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmluZENvbnRleHQuaCBc
CiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmggXAogCSQo
V2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViTG9hZGVyQ2xpZW50LmggXAogCSQo
V2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2V0dGluZ3MuaCBcCkBAIC01MjYsNiAr
NTI3LDggQEAgbGlid2Via2l0Mmd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VC
S0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9TT1UKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXREZWZpbmVzLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdEVycm9yLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEVycm9yLmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0RmluZENvbnRleHQuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0RmluZENvbnRleHQuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRQcml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFNldHRpbmdzLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
U2V0dGluZ3MuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXREZWZpbmVzLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXREZWZpbmVzLmgKaW5kZXggZGMzM2RiYzUzNjIzZDgzNDA1MTc3YTc2ODA0MmQxZDliMTQ3YTc0
My4uNzVlYTQ0NmQ4NTFhYzY0YTliNjk4Zjg5OWQ1NGQ3MmRhNDE5OWU2YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RGVmaW5lcy5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERlZmluZXMuaApAQCAtMzYsNiAr
MzYsOSBAQCB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmlld0NsYXNzIFdlYktpdFdlYlZpZXdD
bGFzczsKIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJMb2FkZXJDbGllbnQgICAgICAgIFdlYktp
dFdlYkxvYWRlckNsaWVudDsKIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJMb2FkZXJDbGllbnRD
bGFzcyAgIFdlYktpdFdlYkxvYWRlckNsaWVudENsYXNzOwogCit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0RmluZENvbnRleHQgICAgICAgICAgICBXZWJLaXRGaW5kQ29udGV4dDsKK3R5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRGaW5kQ29udGV4dENsYXNzICAgICAgIFdlYktpdEZpbmRDb250ZXh0Q2xhc3M7
CisKICNpbmNsdWRlIDxnbGliLmg+CiAKICNpZmRlZiBHX09TX1dJTjMyCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaW5kQ29udGV4dC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaW5kQ29udGV4dC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNTNmMmVhM2NiZjMyNGJhYjQwNDVhYjlkYjg3ZTA5MjMzMjQxNGU2YQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbmRD
b250ZXh0LmNwcApAQCAtMCwwICsxLDQyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJ
Z2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdEZpbmRDb250
ZXh0LmgiCisKKyNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0V2Vi
Vmlldy5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgPFdlYktpdDIvV0tS
ZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLU3RyaW5nLmg+CisjaW5jbHVkZSA8Z2xp
Yi9naTE4bi1saWIuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEVudW1UeXBlcy5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
K2VudW0geworICAgIEZPVU5EX1NUUklORywKKyAgICBGQUlMRURfVE9fRklORF9TVFJJTkcsCisg
ICAgQ09VTlRFRF9NQVRDSEVTLAorCisgICAgTEFTVF9TSUdOQUwKK307CisKK2VudW0geworICAg
IFBST1BfMCwKKworICAgIFBST1BfU0VBUkNIX1RFWFQsCisgICAgUFJPUF9TRUFSQ0hfRkxBR1Ms
CisgICAgUFJPUF9NQVRDSF9DT1VOVCwKKyAgICBQUk9QX01BWF9NQVRDSF9DT1VOVAorfTsKKwor
c3RydWN0IF9XZWJLaXRGaW5kQ29udGV4dFByaXZhdGUgeworICAgIENTdHJpbmcgc2VhcmNoVGV4
dDsKKyAgICBXZWJLaXRGaW5kQ29udGV4dEZsYWdzIHNlYXJjaEZsYWdzOworICAgIHVuc2lnbmVk
IG1hdGNoQ291bnQ7CisgICAgdW5zaWduZWQgbWF4TWF0Y2hDb3VudDsKKyAgICBXS1BhZ2VSZWYg
d2tQYWdlUmVmOworfTsKKworc3RhdGljIGd1aW50IHNpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAw
LCB9OworCitHX0RFRklORV9UWVBFKFdlYktpdEZpbmRDb250ZXh0LCB3ZWJraXRfZmluZF9jb250
ZXh0LCBHX1RZUEVfT0JKRUNUKQorCitzdGF0aWMgdm9pZCBkaWRGaW5kU3RyaW5nKFdLUGFnZVJl
ZiBwYWdlLCBXS1N0cmluZ1JlZiBzdHJpbmcsIHVuc2lnbmVkIG1hdGNoQ291bnQsIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pCit7CisgICAgV0VCS0lUX0ZJTkRfQ09OVEVYVChjbGllbnRJbmZvKS0+
cHJpdi0+bWF0Y2hDb3VudCA9IG1hdGNoQ291bnQ7CisgICAgZ19zaWduYWxfZW1pdChXRUJLSVRf
RklORF9DT05URVhUKGNsaWVudEluZm8pLCBzaWduYWxzW0ZPVU5EX1NUUklOR10sIDApOworfQor
CitzdGF0aWMgdm9pZCBkaWRGYWlsVG9GaW5kU3RyaW5nKFdLUGFnZVJlZiBwYWdlLCBXS1N0cmlu
Z1JlZiBzdHJpbmcsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgZ19zaWduYWxfZW1p
dChXRUJLSVRfRklORF9DT05URVhUKGNsaWVudEluZm8pLCBzaWduYWxzW0ZBSUxFRF9UT19GSU5E
X1NUUklOR10sIDApOworfQorCitzdGF0aWMgdm9pZCBkaWRDb3VudFN0cmluZ01hdGNoZXMoV0tQ
YWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIHN0cmluZywgdW5zaWduZWQgbWF0Y2hDb3VudCwgY29u
c3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBXRUJLSVRfRklORF9DT05URVhUKGNsaWVudElu
Zm8pLT5wcml2LT5tYXRjaENvdW50ID0gbWF0Y2hDb3VudDsKKyAgICBnX3NpZ25hbF9lbWl0KFdF
QktJVF9GSU5EX0NPTlRFWFQoY2xpZW50SW5mbyksIHNpZ25hbHNbQ09VTlRFRF9NQVRDSEVTXSwg
MCk7Cit9CisKK3ZvaWQgd2Via2l0RmluZEF0dGFjaEZpbmRDbGllbnRUb1BhZ2UoV2ViS2l0Rmlu
ZENvbnRleHQqIGZpbmRDb250ZXh0LCBXS1BhZ2VSZWYgd2tQYWdlKQoreworICAgIFdLUGFnZUZp
bmRDbGllbnQgd2tGaW5kQ2xpZW50ID0geworICAgICAgICBrV0tQYWdlRmluZENsaWVudEN1cnJl
bnRWZXJzaW9uLAorICAgICAgICBmaW5kQ29udGV4dCwgLy8gY2xpZW50SW5mbworICAgICAgICBk
aWRGaW5kU3RyaW5nLAorICAgICAgICBkaWRGYWlsVG9GaW5kU3RyaW5nLAorICAgICAgICBkaWRD
b3VudFN0cmluZ01hdGNoZXMKKyAgICB9OworICAgIFdLUGFnZVNldFBhZ2VGaW5kQ2xpZW50KHdr
UGFnZSwgJndrRmluZENsaWVudCk7CisgICAgZmluZENvbnRleHQtPnByaXYtPndrUGFnZVJlZiA9
IHdrUGFnZTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2ZpbmRfY29udGV4dF9pbml0KFdlYktp
dEZpbmRDb250ZXh0KiBmaW5kQ29udGV4dCkKK3sKKyAgICBXZWJLaXRGaW5kQ29udGV4dFByaXZh
dGUqIHByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoZmluZENvbnRleHQsIFdFQktJ
VF9UWVBFX0ZJTkRfQ09OVEVYVCwgV2ViS2l0RmluZENvbnRleHRQcml2YXRlKTsKKyAgICBmaW5k
Q29udGV4dC0+cHJpdiA9IHByaXY7CisgICAgbmV3IChwcml2KSBXZWJLaXRGaW5kQ29udGV4dFBy
aXZhdGUoKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2ZpbmRfY29udGV4dF9nZXRfcHJvcGVy
dHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNw
ZWMqIHBhcmFtU3BlYykKK3sKKyAgICBXZWJLaXRGaW5kQ29udGV4dCogZmluZENvbnRleHQgPSBX
RUJLSVRfRklORF9DT05URVhUKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BJZCkgeworICAg
IGNhc2UgUFJPUF9TRUFSQ0hfVEVYVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVl
LCBmaW5kQ29udGV4dC0+cHJpdi0+c2VhcmNoVGV4dC5kYXRhKCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfU0VBUkNIX0ZMQUdTOgorICAgICAgICBnX3ZhbHVlX3NldF9mbGFncyh2
YWx1ZSwgZmluZENvbnRleHQtPnByaXYtPnNlYXJjaEZsYWdzKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX01BVENIX0NPVU5UOgorICAgICAgICBnX3ZhbHVlX3NldF91aW50KHZhbHVl
LCBmaW5kQ29udGV4dC0+cHJpdi0+bWF0Y2hDb3VudCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9NQVhfTUFUQ0hfQ09VTlQ6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQodmFsdWUs
IGZpbmRDb250ZXh0LT5wcml2LT5tYXhNYXRjaENvdW50KTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVj
dCwgcHJvcElkLCBwYXJhbVNwZWMpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0X2Zp
bmRfY29udGV4dF9zZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIGNv
bnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBhcmFtU3BlYykKK3sKKyAgICBXZWJLaXRG
aW5kQ29udGV4dCogZmluZENvbnRleHQgPSBXRUJLSVRfRklORF9DT05URVhUKG9iamVjdCk7CisK
KyAgICBzd2l0Y2ggKHByb3BJZCkgeworICAgIGNhc2UgUFJPUF9TRUFSQ0hfVEVYVDoKKyAgICAg
ICAgZmluZENvbnRleHQtPnByaXYtPnNlYXJjaFRleHQgPSBnX3ZhbHVlX2dldF9zdHJpbmcodmFs
dWUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfU0VBUkNIX0ZMQUdTOgorICAgICAg
ICBmaW5kQ29udGV4dC0+cHJpdi0+c2VhcmNoRmxhZ3MgPSBzdGF0aWNfY2FzdDxXZWJLaXRGaW5k
Q29udGV4dEZsYWdzPihnX3ZhbHVlX2dldF9mbGFncyh2YWx1ZSkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfTUFYX01BVENIX0NPVU5UOgorICAgICAgICBmaW5kQ29udGV4dC0+cHJp
di0+bWF4TWF0Y2hDb3VudCA9IGdfdmFsdWVfZ2V0X3VpbnQodmFsdWUpOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlf
SUQob2JqZWN0LCBwcm9wSWQsIHBhcmFtU3BlYyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRfZmluZF9jb250ZXh0X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXRUJL
SVRfRklORF9DT05URVhUKG9iamVjdCktPnByaXYtPn5XZWJLaXRGaW5kQ29udGV4dFByaXZhdGUo
KTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZmluZF9jb250ZXh0X3BhcmVudF9jbGFzcykt
PmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9maW5kX2NvbnRleHRf
Y2xhc3NfaW5pdChXZWJLaXRGaW5kQ29udGV4dENsYXNzKiBmaW5kQ2xhc3MpCit7CisgICAgR09i
amVjdENsYXNzKiBnT2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhmaW5kQ2xhc3MpOworCisg
ICAgZ09iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfZmluZF9jb250ZXh0X2dldF9w
cm9wZXJ0eTsKKyAgICBnT2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF9maW5kX2Nv
bnRleHRfc2V0X3Byb3BlcnR5OworICAgIGdPYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRf
ZmluZF9jb250ZXh0X2ZpbmFsaXplOworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGZp
bmRDbGFzcywgc2l6ZW9mKFdlYktpdEZpbmRDb250ZXh0UHJpdmF0ZSkpOworCisgICAgLyoqCisg
ICAgICogV2ViS2l0RmluZENvbnRleHQ6c2VhcmNoLXRleHQ6CisgICAgICoKKyAgICAgKiBUaGUg
dGV4dCB0byBzZWFyY2ggaW4gdGhlICNXZWJLaXRXZWJWaWV3LgorICAgICAqLworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ09iamVjdENsYXNzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUFJPUF9TRUFSQ0hfVEVYVCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoInNlYXJjaC10ZXh0IiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygi
U2VhcmNoIFRleHQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXygiVGV4dCB0byBzZWFyY2ggaW4gdGhlIHZpZXciKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8R1BhcmFtRmxhZ3M+KFdFQktJVF9QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNU
UlVDVF9PTkxZKSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0RmluZENvbnRleHQ6c2VhcmNo
LWZsYWdzOgorICAgICAqCisgICAgICogVGhlIG9wdGlvbnMgdG8gYmUgdXNlZCBpbiB0aGUgc2Vh
cmNoIG9wZXJhdGlvbi4KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KGdPYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBS
T1BfU0VBUkNIX0ZMQUdTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19w
YXJhbV9zcGVjX2ZsYWdzKCJzZWFyY2gtZmxhZ3MiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlNlYXJjaCBGbGFncyIpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlNlYXJj
aCBmbGFncyB0byBiZSB1c2VkIGluIHRoZSBzZWFyY2ggb3BlcmF0aW9uIiksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1RZUEVf
RklORF9DT05URVhUX0ZMQUdTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdFQktJVF9GSU5EX0NPTlRFWFRfRkxBR1NfTk9ORSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxHUGFyYW1GbGFncz4oV0VCS0lUX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RS
VUNUKSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0RmluZENvbnRleHQ6bWF0Y2gtY291bnQ6
CisgICAgICoKKyAgICAgKiBUaGUgbnVtYmVyIG9mIG1hdGNoZXMgZm91bmQgZm9yIHRoZSBnaXZl
biB0ZXh0IGluIHRoZSAgI1dlYktpdFdlYlZpZXcuCisgICAgICovCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eShnT2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQUk9QX01BVENIX0NPVU5ULAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQoIm1hdGNoLWNvdW50IiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIk1hdGNoZXMgY291
bnQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF8oIlRoZSBudW1iZXIgb2YgbWF0Y2hlcyBmb3IgdGhlIGdpdmVuIHRleHQgaW4gdGhlIHZp
ZXciKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDAsIEdfTUFYVUlOVCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihXRUJLSVRfUEFSQU1f
UkVBREFCTEUpKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRGaW5kQ29udGV4dDptYXgtbWF0
Y2gtY291bnQ6CisgICAgICoKKyAgICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgbWF0Y2hlcyB0
byByZXBvcnQgZm9yIGEgZ2l2ZW4gc2VhcmNoLgorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoZ09iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUFJPUF9NQVhfTUFUQ0hfQ09VTlQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfdWludCgibWF4LW1hdGNoLWNvdW50IiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIk1heGlt
dW0gbWF0Y2hlcyBjb3VudCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXygiVGhlIG1heGltdW0gbnVtYmVyIG9mIG1hdGNoZXMgaW4gYSBn
aXZlbiB0ZXh0IHRvIHJlcG9ydCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwgR19NQVhVSU5ULCAwLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R1BhcmFtRmxh
Z3M+KFdFQktJVF9QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSkpOwor
CisgICAgLyoqCisgICAgICogV2ViS2l0RmluZENvbnRleHQ6OmZvdW5kLXN0cmluZzoKKyAgICAg
KiBAZmluZDogdGhlICNXZWJLaXRGaW5kQ29udGV4dAorICAgICAqCisgICAgICogVGhpcyBzaWdu
YWwgaXMgZW1pdHRlZCB3aGVuIGEgZ2l2ZW4gc3RyaW5nIGlzIGZvdW5kIGluIHRoZSB3ZWIKKyAg
ICAgKiBwYWdlIHRleHQuIEl0IHdpbGwgYmUgaXNzdWVkIChpZiB0aGUgdGV4dCBpcyBmb3VuZCkK
KyAgICAgKiBhc3luY2hyb25vdXNseSBhZnRlciBhIGNhbGwgdG8gd2Via2l0X2ZpbmRfY29udGV4
dF9zdGFydCgpLAorICAgICAqIHdlYmtpdF9maW5kX2NvbnRleHRfbmV4dCgpIG9yIHdlYmtpdF9m
aW5kX2NvbnRleHRfcHJldigpLgorICAgICAqLworICAgIHNpZ25hbHNbRk9VTkRfU1RSSU5HXSA9
CisgICAgICAgIGdfc2lnbmFsX25ldygiZm91bmQtc3RyaW5nIiwKKyAgICAgICAgICAgICAgICAg
ICAgIEdfVFlQRV9GUk9NX0NMQVNTKGdPYmplY3RDbGFzcyksCisgICAgICAgICAgICAgICAgICAg
ICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgIEdfU1RSVUNUX09GRlNF
VChXZWJLaXRGaW5kQ29udGV4dENsYXNzLCBmb3VuZF9zdHJpbmcpLAorICAgICAgICAgICAgICAg
ICAgICAgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lE
X19WT0lELAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX05PTkUsIDApOworICAgIC8qKgor
ICAgICAqIFdlYktpdEZpbmRDb250ZXh0OjpmYWlsZWQtdG8tZmluZC1zdHJpbmc6CisgICAgICog
QGZpbmQ6IHRoZSAjV2ViS2l0RmluZENvbnRleHQKKyAgICAgKgorICAgICAqIFRoaXMgc2lnbmFs
IGlzIGVtaXR0ZWQgd2hlbiBhIHNlYXJjaCBvcGVyYXRpb24gZG9lcyBub3QgZmluZAorICAgICAq
IGFueSByZXN1bHQgZm9yIHRoZSBnaXZlbiBzdHJpbmcuIEl0IHdpbGwgYmUgaXNzdWVkIChpZiB0
aGUgdGV4dAorICAgICAqIGlzIG5vdCBmb3VuZCkgYXN5bmNocm9ub3VzbHkgYWZ0ZXIgYSBjYWxs
IHRvCisgICAgICogd2Via2l0X2ZpbmRfY29udGV4dF9zdGFydCgpLCB3ZWJraXRfZmluZF9jb250
ZXh0X25leHQoKSBvcgorICAgICAqIHdlYmtpdF9maW5kX2NvbnRleHRfcHJldigpLgorICAgICAq
LworICAgIHNpZ25hbHNbRkFJTEVEX1RPX0ZJTkRfU1RSSU5HXSA9CisgICAgICAgIGdfc2lnbmFs
X25ldygiZmFpbGVkLXRvLWZpbmQtc3RyaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQ
RV9GUk9NX0NMQVNTKGdPYmplY3RDbGFzcyksCisgICAgICAgICAgICAgICAgICAgICBHX1NJR05B
TF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRG
aW5kQ29udGV4dENsYXNzLCBmYWlsZWRfdG9fZmluZF9zdHJpbmcpLAorICAgICAgICAgICAgICAg
ICAgICAgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lE
X19WT0lELAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX05PTkUsIDApOworCisgICAgLyoq
CisgICAgICogV2ViS2l0RmluZENvbnRleHQ6OmNvdW50ZWQtbWF0Y2hlczoKKyAgICAgKiBAZmlu
ZDogdGhlICNXZWJLaXRGaW5kQ29udGV4dAorICAgICAqCisgICAgICogVGhpcyBzaWduYWwgaXMg
ZW1pdHRlZCB0byBpbmZvcm0gYWJvdXQgdGhlIG51bWJlciBvZiBtYXRjaGVzCisgICAgICogZm91
bmQgaW4gdGhlICNXZWJLaXRXZWJWaWV3IGZvciB0aGUgZ2l2ZW4gc3RyaW5nLiAgSXQgd2lsbCBi
ZQorICAgICAqIGlzc3VlZCBhc3luY2hyb25vdXNseSBhZnRlciBhIGNhbGwgdG8KKyAgICAgKiB3
ZWJraXRfZmluZF9jb250ZXh0X2NvdW50X21hdGNoZXMoKS4KKyAgICAgKi8KKyAgICBzaWduYWxz
W0NPVU5URURfTUFUQ0hFU10gPQorICAgICAgICBnX3NpZ25hbF9uZXcoImNvdW50ZWQtbWF0Y2hl
cyIsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhnT2JqZWN0Q2xhc3Mp
LAorICAgICAgICAgICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAg
ICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0RmluZENvbnRleHRDbGFzcywgY291bnRlZF9t
YXRjaGVzKSwKKyAgICAgICAgICAgICAgICAgICAgIDAsIDAsCisgICAgICAgICAgICAgICAgICAg
ICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fVk9JRCwKKyAgICAgICAgICAgICAgICAgICAgIEdf
VFlQRV9OT05FLCAwKTsKK30KKworc3RhdGljIGlubGluZSBXS0ZpbmRPcHRpb25zIGZpbmRDb250
ZXh0RmxhZ3NUb1dLRmluZE9wdGlvbnMoV2ViS2l0RmluZENvbnRleHRGbGFncyBmaW5kQ29udGV4
dEZsYWdzKQoreworICAgIHVuc2lnbmVkIHdrRmluZE9wdGlvbnMgPSAwOworCisgICAgaWYgKGZp
bmRDb250ZXh0RmxhZ3MgJiBXRUJLSVRfRklORF9DT05URVhUX0NBU0VfSU5TRU5TSVRJVkUpCisg
ICAgICAgIHdrRmluZE9wdGlvbnMgfD0ga1dLRmluZE9wdGlvbnNDYXNlSW5zZW5zaXRpdmU7Cisg
ICAgaWYgKGZpbmRDb250ZXh0RmxhZ3MgJiBXRUJLSVRfRklORF9DT05URVhUX0FUX1dPUkRfU1RB
UlRTKQorICAgICAgICB3a0ZpbmRPcHRpb25zIHw9IGtXS0ZpbmRPcHRpb25zQXRXb3JkU3RhcnRz
OworICAgIGlmIChmaW5kQ29udGV4dEZsYWdzICYgV0VCS0lUX0ZJTkRfQ09OVEVYVF9UUkVBVF9N
RURJQUxfQ0FQSVRBTF9BU19XT1JEX1NUQVJUKQorICAgICAgICB3a0ZpbmRPcHRpb25zIHw9IGtX
S0ZpbmRPcHRpb25zVHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQ7CisgICAgaWYgKGZpbmRD
b250ZXh0RmxhZ3MgJiBXRUJLSVRfRklORF9DT05URVhUX0JBQ0tXQVJEUykKKyAgICAgICAgd2tG
aW5kT3B0aW9ucyB8PSBrV0tGaW5kT3B0aW9uc0JhY2t3YXJkczsKKyAgICBpZiAoZmluZENvbnRl
eHRGbGFncyAmIFdFQktJVF9GSU5EX0NPTlRFWFRfV1JBUF9BUk9VTkQpCisgICAgICAgIHdrRmlu
ZE9wdGlvbnMgfD0ga1dLRmluZE9wdGlvbnNXcmFwQXJvdW5kOworICAgIGlmIChmaW5kQ29udGV4
dEZsYWdzICYgV0VCS0lUX0ZJTkRfQ09OVEVYVF9TSE9XX09WRVJMQVkpCisgICAgICAgIHdrRmlu
ZE9wdGlvbnMgfD0ga1dLRmluZE9wdGlvbnNTaG93T3ZlcmxheTsKKyAgICBpZiAoZmluZENvbnRl
eHRGbGFncyAmIFdFQktJVF9GSU5EX0NPTlRFWFRfU0hPV19GSU5EX0lORElDQVRPUikKKyAgICAg
ICAgd2tGaW5kT3B0aW9ucyB8PSBrV0tGaW5kT3B0aW9uc1Nob3dGaW5kSW5kaWNhdG9yOworCisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFdLRmluZE9wdGlvbnM+KHdrRmluZE9wdGlvbnMpOworfQor
CisvKioKKyAqIHdlYmtpdF9maW5kX2NvbnRleHRfZ2V0X3NlYXJjaF9zdHJpbmc6CisgKiBAZmlu
ZENvbnRleHQ6IHRoZSAjV2ViS2l0RmluZENvbnRleHQKKyAqCisgKiBHZXQgdGhlIHN0cmluZyB0
byBsb29rIGZvci4gVGhpcyBzdHJpbmcgaXMgc2V0IGJ5IHRoZQorICogI1dlYktpdFdlYlZpZXcg
d2hlbiBhIGNsaWVudCBjYWxscyB3ZWJraXRfd2ViX3ZpZXdfc2VhcmNoKCkuCisgKgorICogUmV0
dXJuczogKHRyYW5zZmVyIG5vbmUpOiB0aGUgc3RyaW5nIHRvIGxvb2sgZm9yIGluIHRoZSAjV2Vi
S2l0V2ViVmlldy4KKyAqKi8KK2NvbnN0IGNoYXIqIHdlYmtpdF9maW5kX2NvbnRleHRfZ2V0X3Nl
YXJjaF9zdHJpbmcoV2ViS2l0RmluZENvbnRleHQqIGZpbmRDb250ZXh0KQoreworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19GSU5EX0NPTlRFWFQoZmluZENvbnRleHQpLCBOVUxM
KTsKKworICAgIHJldHVybiBmaW5kQ29udGV4dC0+cHJpdi0+c2VhcmNoVGV4dC5kYXRhKCk7Cit9
CisKKy8qKgorICogd2Via2l0X2ZpbmRfY29udGV4dF9nZXRfbWF0Y2hfY291bnQ6CisgKiBAZmlu
ZENvbnRleHQ6IHRoZSAjV2ViS2l0RmluZENvbnRleHQKKyAqCisgKiBHZXQgdGhlIG51bWJlciBv
ZiBtYXRjaGVzIGZvdW5kIGZvciB0aGUgdGV4dCBzZWFyY2hlZCBpbiB0aGUKKyAqICNXZWJLaXRX
ZWJWaWV3LiBJZiB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgaXMgaGlnaGVyIHRoYW4gdGhlIG1heGlt
dW0KKyAqIG51bWJlciBvZiBtYXRjaGVzIGFsbG93ZWQgKHRoZSBsYXN0IHBhcmFtZXRlciB0byB0
aGUKKyAqIHdlYmtpdF93ZWJfdmlld19zZWFyY2goKSBjYWxsKSB0aGlzIGZ1bmN0aW9uIHJldHVy
bnMgR19NQVhVSU5ULgorICoKKyAqIFJldHVybnM6IHRoZSBudW1iZXIgb2YgbWF0Y2hlcyBmb3Vu
ZCBvciBHX01BWFVJTlQgaWYgdGhlIG51bWJlciBvZgorICogbWF0Y2hlcyBleGNlZWRzIHRoZSBt
YXhpbXVtIG51bWJlciBvZiBtYXRjaGVzIGFsbG93ZWQuCisgKiovCitndWludCB3ZWJraXRfZmlu
ZF9jb250ZXh0X2dldF9tYXRjaF9jb3VudChXZWJLaXRGaW5kQ29udGV4dCogZmluZENvbnRleHQp
Cit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0ZJTkRfQ09OVEVYVChmaW5k
Q29udGV4dCksIDApOworCisgICAgcmV0dXJuIGZpbmRDb250ZXh0LT5wcml2LT5tYXRjaENvdW50
OworfQorCisvKioKKyAqIHdlYmtpdF9maW5kX2NvbnRleHRfZ2V0X2ZsYWdzOgorICogQGZpbmRf
Y29udGV4dDogdGhlICNXZWJLaXRGaW5kQ29udGV4dAorICoKKyAqIEdldCB0aGUgZmxhZ3MgdXNl
ZCB0byB0dW5lIHVwIHRoZSBmaW5kIG9wZXJhdGlvbi4KKyAqCisgKiBSZXR1cm5zOiB0aGUgZmlu
ZCBmbGFncy4KKyAqKi8KK1dlYktpdEZpbmRDb250ZXh0RmxhZ3MKK3dlYmtpdF9maW5kX2NvbnRl
eHRfZ2V0X2ZsYWdzKFdlYktpdEZpbmRDb250ZXh0KiBmaW5kQ29udGV4dCkKK3sKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRklORF9DT05URVhUKGZpbmRDb250ZXh0KSwgV0VC
S0lUX0ZJTkRfQ09OVEVYVF9GTEFHU19OT05FKTsKKworICAgIHJldHVybiBmaW5kQ29udGV4dC0+
cHJpdi0+c2VhcmNoRmxhZ3M7Cit9CisKKy8qKgorICogd2Via2l0X2ZpbmRfY29udGV4dF9nZXRf
bWF4X21hdGNoX2NvdW50OgorICogQGZpbmRDb250ZXh0OiB0aGUgI1dlYktpdEZpbmRDb250ZXh0
CisgKgorICogR2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBtYXRjaGVzIHRvIHJlcG9ydCBkdXJp
bmcgYSB0ZXh0CisgKiBsb29rdXAuIFRoaXMgbnVtYmVyIGlzIHNldCBieSB0aGUgI1dlYktpdFdl
YlZpZXcgd2hlbiBhIGNsaWVudAorICogY2FsbHMgd2Via2l0X3dlYl92aWV3X3NlYXJjaCgpLgor
ICoKKyAqIFJldHVybnM6IHRoZSBtYXhpbXVtIG51bWJlciBvZiBtYXRjaGVzIHRvIHJlcG9ydC4K
KyAqKi8KK2d1aW50IHdlYmtpdF9maW5kX2NvbnRleHRfZ2V0X21heF9tYXRjaF9jb3VudChXZWJL
aXRGaW5kQ29udGV4dCogZmluZENvbnRleHQpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0lTX0ZJTkRfQ09OVEVYVChmaW5kQ29udGV4dCksIDApOworCisgICAgcmV0dXJuIGZp
bmRDb250ZXh0LT5wcml2LT5tYXhNYXRjaENvdW50OworfQorCisvKioKKyAqIHdlYmtpdF9maW5k
X2NvbnRleHRfc3RhcnQ6CisgKiBAZmluZENvbnRleHQ6IHRoZSAjV2ViS2l0RmluZENvbnRleHQK
KyAqCisgKiBTdGFydCB0byBmaW5kIHRoZSB0ZXh0IHBhc3NlZCB0byB0aGUgY2FsbCB3ZWJraXRf
d2ViX3ZpZXdfc2VhcmNoKCkKKyAqIGludG8gdGhlICNXZWJLaXRXZWJWaWV3IHRoaXMgI1dlYktp
dEZpbmRDb250ZXh0IGlzIGxpbmtlZCB0by4gVGhlCisgKiBvdXRjb21lIG9mIHRoZSBzZWFyY2gg
d2lsbCBiZSBhc3luY2hyb25vdXNseSBwcm92aWRlZCBieSB0aGUKKyAqICJmb3VuZC1zdHJpbmci
IGFuZCAiZmFpbGVkLXRvLWZpbmQtc3RyaW5nIi4KKyAqKi8KK3ZvaWQgd2Via2l0X2ZpbmRfY29u
dGV4dF9zdGFydChXZWJLaXRGaW5kQ29udGV4dCogZmluZENvbnRleHQpCit7CisgICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfSVNfRklORF9DT05URVhUKGZpbmRDb250ZXh0KSk7CisKKyAgICBX
S0ZpbmRPcHRpb25zIGZpbmRPcHRpb25zID0gZmluZENvbnRleHRGbGFnc1RvV0tGaW5kT3B0aW9u
cyhmaW5kQ29udGV4dC0+cHJpdi0+c2VhcmNoRmxhZ3MpOworICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBzZWFyY2hUZXh0UmVmKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKGZpbmRDb250ZXh0LT5wcml2LT5zZWFyY2hUZXh0LmRhdGEoKSkpOworICAgIFdLUGFnZUZp
bmRTdHJpbmcoZmluZENvbnRleHQtPnByaXYtPndrUGFnZVJlZiwgc2VhcmNoVGV4dFJlZi5nZXQo
KSwgZmluZE9wdGlvbnMsIGZpbmRDb250ZXh0LT5wcml2LT5tYXhNYXRjaENvdW50KTsKK30KKwor
LyoqCisgKiB3ZWJraXRfZmluZF9jb250ZXh0X25leHQ6CisgKiBAZmluZENvbnRleHQ6IHRoZSAj
V2ViS2l0RmluZENvbnRleHQKKyAqCisgKiBMb29rIGZvciB0aGUgbmV4dCBvY2N1cnJlbmNlIG9m
IHRoZSB0ZXh0IHBhc3NlZCB0bworICogd2Via2l0X3dlYl92aWV3X3NlYXJjaCgpIGluIHRoZSAj
V2ViS2l0V2ViVmlldy4gQ2FsbGVycyBtdXN0IGJlCisgKiBjb25uZWN0ZWQgdG8gImZvdW5kLXN0
cmluZyIgYW5kL29yICJmYWlsZWQtdG8tZmluZC1zdHJpbmciIHNpZ25hbHMKKyAqIHRvIGdldCB0
aGUgcmVzdWx0IG9mIHRoZSBzZWFyY2guCisgKiovCit2b2lkIHdlYmtpdF9maW5kX2NvbnRleHRf
bmV4dChXZWJLaXRGaW5kQ29udGV4dCogZmluZENvbnRleHQpCit7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfSVNfRklORF9DT05URVhUKGZpbmRDb250ZXh0KSk7CisKKyAgICB1bnNpZ25l
ZCBuZXdGbGFncyA9IGZpbmRDb250ZXh0LT5wcml2LT5zZWFyY2hGbGFncyAmIH5XRUJLSVRfRklO
RF9DT05URVhUX0JBQ0tXQVJEUzsKKyAgICBmaW5kQ29udGV4dC0+cHJpdi0+c2VhcmNoRmxhZ3Mg
PSBzdGF0aWNfY2FzdDxXZWJLaXRGaW5kQ29udGV4dEZsYWdzPihuZXdGbGFncyk7CisgICAgd2Vi
a2l0X2ZpbmRfY29udGV4dF9zdGFydChmaW5kQ29udGV4dCk7Cit9CisKKy8qKgorICogd2Via2l0
X2ZpbmRfY29udGV4dF9wcmV2OgorICogQGZpbmRDb250ZXh0OiB0aGUgI1dlYktpdEZpbmRDb250
ZXh0CisgKgorICogTG9vayBmb3IgdGhlIHByZXZpb3VzIG9jY3VycmVuY2Ugb2YgdGhlIHRleHQg
cGFzc2VkIHRvCisgKiB3ZWJraXRfd2ViX3ZpZXdfc2VhcmNoKCkgaW4gdGhlICNXZWJLaXRXZWJW
aWV3LiBDYWxsZXJzIG11c3QgYmUKKyAqIGNvbm5lY3RlZCB0byAiZm91bmQtc3RyaW5nIiBhbmQv
b3IgImZhaWxlZC10by1maW5kLXN0cmluZyIgc2lnbmFscworICogdG8gZ2V0IHRoZSByZXN1bHQg
b2YgdGhlIHNlYXJjaC4KKyAqKi8KK3ZvaWQgd2Via2l0X2ZpbmRfY29udGV4dF9wcmV2KFdlYktp
dEZpbmRDb250ZXh0KiBmaW5kQ29udGV4dCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9JU19GSU5EX0NPTlRFWFQoZmluZENvbnRleHQpKTsKKworICAgIHVuc2lnbmVkIG5ld0ZsYWdz
ID0gZmluZENvbnRleHQtPnByaXYtPnNlYXJjaEZsYWdzIHwgV0VCS0lUX0ZJTkRfQ09OVEVYVF9C
QUNLV0FSRFM7CisgICAgZmluZENvbnRleHQtPnByaXYtPnNlYXJjaEZsYWdzID0gc3RhdGljX2Nh
c3Q8V2ViS2l0RmluZENvbnRleHRGbGFncz4obmV3RmxhZ3MpOworICAgIHdlYmtpdF9maW5kX2Nv
bnRleHRfc3RhcnQoZmluZENvbnRleHQpOworfQorCisvKioKKyAqIHdlYmtpdF9maW5kX2NvbnRl
eHRfY291bnRfbWF0Y2hlczoKKyAqIEBmaW5kX2NvbnRleHQ6IHRoZSAjV2ViS2l0RmluZENvbnRl
eHQKKyAqCisgKiBDb3VudCB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgZm91bmQgaW4gdGhlIHRleHQg
cGFzc2VkIHRvCisgKiB3ZWJraXRfd2ViX3ZpZXdfc2VhcmNoKCkgaW4gdGhlICNXZWJLaXRXZWJW
aWV3LiBUaGUgbnVtYmVyIG9mCisgKiBtYXRjaGVzIGNvdWxkIGJlIHJldHJpZXZlZCBieSBjYWxs
aW5nCisgKiB3ZWJraXRfZmluZF9jb250ZXh0X2dldF9tYXRjaF9jb3VudCgpIGluIHRoZSBoYW5k
bGVyIG9mIHRoZQorICogImNvdW50ZWQtbWF0Y2hlcyIgc2lnbmFsLgorICoqLwordm9pZCB3ZWJr
aXRfZmluZF9jb250ZXh0X2NvdW50X21hdGNoZXMoV2ViS2l0RmluZENvbnRleHQqIGZpbmRDb250
ZXh0KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0ZJTkRfQ09OVEVYVChmaW5k
Q29udGV4dCkpOworCisgICAgV0tGaW5kT3B0aW9ucyBmaW5kT3B0aW9ucyA9IGZpbmRDb250ZXh0
RmxhZ3NUb1dLRmluZE9wdGlvbnMoZmluZENvbnRleHQtPnByaXYtPnNlYXJjaEZsYWdzKTsKKyAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2VhcmNoVGV4dFJlZihBZG9wdFdLLCBXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhmaW5kQ29udGV4dC0+cHJpdi0+c2VhcmNoVGV4dC5kYXRh
KCkpKTsKKyAgICBXS1BhZ2VDb3VudFN0cmluZ01hdGNoZXMoZmluZENvbnRleHQtPnByaXYtPndr
UGFnZVJlZiwgc2VhcmNoVGV4dFJlZi5nZXQoKSwgZmluZE9wdGlvbnMsIGZpbmRDb250ZXh0LT5w
cml2LT5tYXhNYXRjaENvdW50KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdEZpbmRDb250ZXh0LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRGaW5kQ29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZlNDFjMDM1M2M3ODk5
ZDhjMjRjMDViMmYyNzc1MDliNTJhZjZmODQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaW5kQ29udGV4dC5oCkBAIC0wLDAgKzEsMTE2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQo
X19XRUJLSVQyX0hfSU5TSURFX18pICYmICFkZWZpbmVkKFdFQktJVDJfQ09NUElMQVRJT04pCisj
ZXJyb3IgIk9ubHkgPHdlYmtpdDIvd2Via2l0Mi5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHku
IgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RmluZENvbnRleHRfaAorI2RlZmluZSBXZWJLaXRG
aW5kQ29udGV4dF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtp
dDIvV2ViS2l0RGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZ
UEVfRklORF9DT05URVhUICAgICAgICAgICAgKHdlYmtpdF9maW5kX2NvbnRleHRfZ2V0X3R5cGUo
KSkKKyNkZWZpbmUgV0VCS0lUX0ZJTkRfQ09OVEVYVChvYmopICAgICAgICAgICAgKEdfVFlQRV9D
SEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9GSU5EX0NPTlRFWFQsIFdlYktp
dEZpbmRDb250ZXh0KSkKKyNkZWZpbmUgV0VCS0lUX0ZJTkRfQ09OVEVYVF9DTEFTUyhrbGFzcykg
ICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9GSU5EX0NP
TlRFWFQsIFdlYktpdEZpbmRDb250ZXh0Q2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfRklORF9D
T05URVhUKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdF
QktJVF9UWVBFX0ZJTkRfQ09OVEVYVCkpCisjZGVmaW5lIFdFQktJVF9JU19GSU5EX0NPTlRFWFRf
Q0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZ
UEVfRklORF9DT05URVhUKSkKKyNkZWZpbmUgV0VCS0lUX0ZJTkRfQ09OVEVYVF9HRVRfQ0xBU1Mo
b2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9GSU5E
X0NPTlRFWFQsIFdlYktpdEZpbmRDb250ZXh0Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0RmluZENvbnRleHRQcml2YXRlIFdlYktpdEZpbmRDb250ZXh0UHJpdmF0ZTsKKworLyoqCisg
KiBXZWJLaXRGaW5kQ29udGV4dEZsYWdzOgorICogQFdFQktJVF9GSU5EX0NPTlRFWFRfRkxBR1Nf
Tk9ORTogbm8gc2VhcmNoIGZsYWdzCisgKiBAV0VCS0lUX0ZJTkRfQ09OVEVYVF9DQVNFX0lOU0VO
U0lUSVZFOiBjYXNlIGluc2Vuc2l0aXZlIHNlYXJjaAorICogQFdFQktJVF9BVF9XT1JEX1NUQVJU
Uzogc2VhcmNoIG9ubHkgYXQgdGhlIGJlZ2luaW5nIG9mIHRoZSB3b3JkcworICogQFdFQktJVF9G
SU5EX0NPTlRFWFRfVFJFQVRfTUVESUFMX0NBUElUQUxfQVNfV09SRF9TVEFSVDogdHJlYXQgY2Fw
aXRhbCBsZXR0ZXJzIGluIHRoZSBtaWRkbGUgb2Ygd29yZHMgYXMgd29yZCBzdGFydAorICogQFdF
QktJVF9GSU5EX0NPTlRFWFRfQkFDS1dBUkRTOiBzZWFyY2ggYmFja3dhcmRzCisgKiBAV0VCS0lU
X0ZJTkRfQ09OVEVYVF9XUkFQX0FST1VORDogaWYgbm90IHByZXNlbnQgc2VhcmNoIHdpbGwgc3Rv
cCBhdCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudAorICogQFdFQktJVF9GSU5EX0NPTlRFWFRfU0hP
V19PVkVSTEFZOiBzaG93IGFuIG92ZXJsYXkgZm9yIGVhY2ggbWF0Y2gKKyAqIEBXRUJLSVRfRklO
RF9DT05URVhUX1NIT1dfRklORF9JTkRJQ0FUT1I6IHNob3cgdGhlIGZpbmQgaW5kaWNhdG9yCisg
KiovCit0eXBlZGVmIGVudW0geworICBXRUJLSVRfRklORF9DT05URVhUX0ZMQUdTX05PTkUsCisK
KyAgV0VCS0lUX0ZJTkRfQ09OVEVYVF9DQVNFX0lOU0VOU0lUSVZFID0gICAgICAgICAgICAgICAg
ICAgKDEgPDwgMCksCisgIFdFQktJVF9GSU5EX0NPTlRFWFRfQVRfV09SRF9TVEFSVFMgPSAgICAg
ICAgICAgICAgICAgICAgICgxIDw8IDEpLAorICBXRUJLSVRfRklORF9DT05URVhUX1RSRUFUX01F
RElBTF9DQVBJVEFMX0FTX1dPUkRfU1RBUlQgPSAoMSA8PCAyKSwKKyAgV0VCS0lUX0ZJTkRfQ09O
VEVYVF9CQUNLV0FSRFMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMyksCisgIFdF
QktJVF9GSU5EX0NPTlRFWFRfV1JBUF9BUk9VTkQgPSAgICAgICAgICAgICAgICAgICAgICAgICgx
IDw8IDQpLAorICBXRUJLSVRfRklORF9DT05URVhUX1NIT1dfT1ZFUkxBWSA9ICAgICAgICAgICAg
ICAgICAgICAgICAoMSA8PCA1KSwKKyAgV0VCS0lUX0ZJTkRfQ09OVEVYVF9TSE9XX0ZJTkRfSU5E
SUNBVE9SID0gICAgICAgICAgICAgICAgKDEgPDwgNikKKworfSBXZWJLaXRGaW5kQ29udGV4dEZs
YWdzOworCitzdHJ1Y3QgX1dlYktpdEZpbmRDb250ZXh0IHsKKyAgICBHT2JqZWN0IHBhcmVudDsK
KworICAvKjwgcHJpdmF0ZSA+Ki8KKyAgV2ViS2l0RmluZENvbnRleHRQcml2YXRlICpwcml2Owor
fTsKKworc3RydWN0IF9XZWJLaXRGaW5kQ29udGV4dENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3Mg
cGFyZW50X2NsYXNzOworCisgICAgLyogc2lnbmFscyAqLworICAgIHZvaWQgKCogZm91bmRfc3Ry
aW5nKSAgICAgICAgICAgICAoV2ViS2l0RmluZENvbnRleHQgICAgKmZpbmRfY29udGV4dCk7Cisg
ICAgdm9pZCAoKiBmYWlsZWRfdG9fZmluZF9zdHJpbmcpICAgIChXZWJLaXRGaW5kQ29udGV4dCAg
ICAqZmluZF9jb250ZXh0KTsKKyAgICB2b2lkICgqIGNvdW50ZWRfbWF0Y2hlcykgICAgICAgICAg
KFdlYktpdEZpbmRDb250ZXh0ICAgICpmaW5kX2NvbnRleHQpOworCisgIC8qIFBhZGRpbmcgZm9y
IGZ1dHVyZSBleHBhbnNpb24gKi8KKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDApICAgICAg
ICAgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMSkgICAgICAgICAodm9pZCk7
CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQyKSAgICAgICAgICh2b2lkKTsKKyAgICB2b2lk
ICgqX3dlYmtpdF9yZXNlcnZlZDMpICAgICAgICAgKHZvaWQpOworfTsKKworV0VCS0lUX0FQSSBH
VHlwZQord2Via2l0X2ZpbmRfY29udGV4dF9nZXRfdHlwZSAodm9pZCk7CisKK1dFQktJVF9BUEkg
Y29uc3QgZ2NoYXIqCit3ZWJraXRfZmluZF9jb250ZXh0X2dldF9zZWFyY2hfc3RyaW5nICAgICAg
ICAgICAgICAgICAgICAgICAgKFdlYktpdEZpbmRDb250ZXh0ICAgICAgICAqZmluZF9jb250ZXh0
KTsKKworV0VCS0lUX0FQSSBndWludAord2Via2l0X2ZpbmRfY29udGV4dF9nZXRfbWF0Y2hfY291
bnQgICAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRGaW5kQ29udGV4dCAgICAgICAgKmZp
bmRfY29udGV4dCk7CisKK1dFQktJVF9BUEkgV2ViS2l0RmluZENvbnRleHRGbGFncword2Via2l0
X2ZpbmRfY29udGV4dF9nZXRfZmxhZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChX
ZWJLaXRGaW5kQ29udGV4dCAgICAgICAgKmZpbmRfY29udGV4dCk7CisKK1dFQktJVF9BUEkgZ3Vp
bnQKK3dlYmtpdF9maW5kX2NvbnRleHRfZ2V0X21heF9tYXRjaF9jb3VudCAgICAgICAgICAgICAg
ICAgICAgICAoV2ViS2l0RmluZENvbnRleHQgICAgICAgICpmaW5kX2NvbnRleHQpOworCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF9maW5kX2NvbnRleHRfc3RhcnQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoV2ViS2l0RmluZENvbnRleHQgICAgICAgICpmaW5kX2NvbnRleHQp
OworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9maW5kX2NvbnRleHRfbmV4dCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0RmluZENvbnRleHQgICAgICAgICpmaW5k
X2NvbnRleHQpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9maW5kX2NvbnRleHRfcHJldiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0RmluZENvbnRleHQgICAg
ICAgICpmaW5kX2NvbnRleHQpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9maW5kX2NvbnRl
eHRfY291bnRfbWF0Y2hlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0RmluZENv
bnRleHQgICAgICAgICpmaW5kX2NvbnRleHQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbmRDb250
ZXh0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Rmlu
ZENvbnRleHRQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTM2MDBkODIxZDk0ZDQ4ZmNjZTUzMTA0NjA2
MDVjZWNjODViODBjYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdEZpbmRDb250ZXh0UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMjggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RmluZENv
bnRleHRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RmluZENvbnRleHRQcml2YXRlX2gKKworI2lu
Y2x1ZGUgIldlYktpdEZpbmRDb250ZXh0LmgiCisjaW5jbHVkZSA8V2ViS2l0Mi9XZWJLaXQyLmg+
CisKK3ZvaWQgd2Via2l0RmluZEF0dGFjaEZpbmRDbGllbnRUb1BhZ2UoV2ViS2l0RmluZENvbnRl
eHQqLCBXS1BhZ2VSZWYpOworCisjZW5kaWYgLy8gV2ViS2l0RmluZENvbnRleHRQcml2YXRlX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZp
ZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5j
cHAKaW5kZXggNzk4OTZkMWU5ZjkyZTNiNjljNTY1ZDFlNmE0NzE4MDY0MmJkYTUxZS4uOTY5YjI4
MDEwNjhhZjcxZjRmMWEzNGQwYzk1ZDIwNTlhODY1YmQ4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKQEAgLTIyLDYgKzIyLDcg
QEAKICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3LmgiCiAKICNpbmNsdWRlICJXZWJLaXRCYWNrRm9y
d2FyZExpc3RQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RmluZENvbnRleHRQcml2YXRlLmgi
CiAjaW5jbHVkZSAiV2ViS2l0TWFyc2hhbC5oIgogI2luY2x1ZGUgIldlYktpdFNldHRpbmdzUHJp
dmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFVJQ2xpZW50LmgiCkBAIC0xMDQ3LDMgKzEwNDgsMjMg
QEAgV2ViS2l0V2luZG93UHJvcGVydGllcyogd2Via2l0X3dlYl92aWV3X2dldF93aW5kb3dfcHJv
cGVydGllcyhXZWJLaXRXZWJWaWV3KiB3ZWIKIAogICAgIHJldHVybiB3ZWJWaWV3LT5wcml2LT53
aW5kb3dQcm9wZXJ0aWVzLmdldCgpOwogfQorCitXZWJLaXRGaW5kQ29udGV4dCogd2Via2l0X3dl
Yl92aWV3X3NlYXJjaChXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgKnNlYXJjaFRleHQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRGaW5kQ29udGV4dEZsYWdz
IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQg
bWF4TWF0Y2hDb3VudCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VC
X1ZJRVcod2ViVmlldyksIE5VTEwpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHNlYXJjaFRl
eHQsIE5VTEwpOworCisgICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlID0gV0VCS0lU
X1dFQl9WSUVXX0JBU0Uod2ViVmlldyk7CisgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2Via2l0
V2ViVmlld0Jhc2VHZXRQYWdlKHdlYlZpZXdCYXNlKTsKKworICAgIEdSZWZQdHI8V2ViS2l0Rmlu
ZENvbnRleHQ+IGZpbmRDb250ZXh0ID0gV0VCS0lUX0ZJTkRfQ09OVEVYVChnX29iamVjdF9uZXco
V0VCS0lUX1RZUEVfRklORF9DT05URVhULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlYXJjaC10
ZXh0Iiwgc2VhcmNoVGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZWFyY2gtZmxhZ3MiLCBm
bGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXgtbWF0Y2gtY291bnQiLCBtYXhNYXRjaENv
dW50LCBOVUxMKSk7CisgICAgd2Via2l0RmluZEF0dGFjaEZpbmRDbGllbnRUb1BhZ2UoZmluZENv
bnRleHQuZ2V0KCksIHRvQVBJKHBhZ2UpKTsKKworICAgIHJldHVybiBmaW5kQ29udGV4dC5nZXQo
KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZp
ZXcuaAppbmRleCAwNDRiMDYwMzMyNDVjYmE2NzNkNzM3YjNlNjA2NjRjNzk0MmY2NGUzLi5hY2Ex
Y2M5Nzg0MjdiZWY5OGEyMGJhNGUwN2E0ZjZhMmUwNDhhYjg5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCkBAIC0zMCw2ICszMCw3IEBA
CiAKICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEJhY2tGb3J3YXJkTGlzdC5oPgogI2luY2x1ZGUg
PHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RmluZENv
bnRleHQuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYkNvbnRleHQuaD4KICNpbmNsdWRl
IDx3ZWJraXQyL1dlYktpdFdlYkxvYWRlckNsaWVudC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2Vi
S2l0U2V0dGluZ3MuaD4KQEAgLTE3Nyw2ICsxNzgsMTIgQEAgd2Via2l0X3dlYl92aWV3X2dldF9z
ZXR0aW5ncyAgICAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92
aWUKIFdFQktJVF9BUEkgV2ViS2l0V2luZG93UHJvcGVydGllcyAqCiB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X3dpbmRvd19wcm9wZXJ0aWVzICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAq
d2ViX3ZpZXcpOwogCitXRUJLSVRfQVBJIFdlYktpdEZpbmRDb250ZXh0ICoKK3dlYmtpdF93ZWJf
dmlld19zZWFyY2ggICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAg
ICAgICp3ZWJfdmlldywKKwkJCQkJICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgICAqc2Vh
cmNoX3RleHQsCisJCQkJCSAgICAgIFdlYktpdEZpbmRDb250ZXh0RmxhZ3MgICAgIGZsYWdzLAor
CQkJCQkgICAgICBndWludCAgICAgICAgICAgICAgICAgICAgICBtYXhfbWF0Y2hfY291bnQpOwor
CiBHX0VORF9ERUNMUwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sCmluZGV4IDVhYmNiMWQ5
MDZmZmQ3NDg3MDkwODNhNWNiZWJkNzMxOTU3ZmQ2NzcuLjk0YTgwNTFkOTFkZjZlZmEyOWIwOWYy
YzI4YTFiMjIzMGVmY2JlYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbApAQCAtMjIsNiArMjIsNyBA
QAogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRVUklSZXNwb25zZS54bWwiLz4KICAg
ICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0V2luZG93UHJvcGVydGllcy54bWwiLz4KICAg
ICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RXJyb3IueG1sIi8+CisgICAgPHhpOmluY2x1
ZGUgaHJlZj0ieG1sL1dlYktpdEZpbmRDb250ZXh0LnhtbCIvPgogICA8L2NoYXB0ZXI+CiAKICAg
PGluZGV4IGlkPSJpbmRleC1hbGwiPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKaW5kZXggNGMy
ZjYwNTc2ZWExZDUwMzdiNjcxMjY4OWJkOWUyZWY5ZDQ1MDBiOC4uM2MxMTgwZDUxZjljOTQzNDRh
M2I2YmIwMzhhZjJhNWYyYzNlN2Q3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CkBAIC03
Myw2ICs3Myw3IEBAIHdlYmtpdF93ZWJfdmlld19nZXRfdXJpCiB3ZWJraXRfd2ViX3ZpZXdfc2V0
X3NldHRpbmdzCiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzCiB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X3dpbmRvd19wcm9wZXJ0aWVzCit3ZWJraXRfd2ViX3ZpZXdfc2VhcmNoCiAKIDxTVUJTRUNU
SU9OIFN0YW5kYXJkPgogV2ViS2l0V2ViVmlld0NsYXNzCkBAIC0zMTQsMyArMzE1LDI4IEBAIHdl
YmtpdF9wbHVnaW5fZXJyb3JfcXVhcmsKIHdlYmtpdF9wb2xpY3lfZXJyb3JfcXVhcmsKIDwvU0VD
VElPTj4KIAorPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRGaW5kQ29udGV4dDwvRklMRT4KK1dlYktp
dEZpbmRDb250ZXh0Cit3ZWJraXRfZmluZF9jb250ZXh0X2NvdW50X21hdGNoZXMKK3dlYmtpdF9m
aW5kX2NvbnRleHRfZ2V0X2ZsYWdzCit3ZWJraXRfZmluZF9jb250ZXh0X2dldF9tYXRjaF9jb3Vu
dAord2Via2l0X2ZpbmRfY29udGV4dF9nZXRfbWF4X21hdGNoX2NvdW50Cit3ZWJraXRfZmluZF9j
b250ZXh0X2dldF9zZWFyY2hfc3RyaW5nCit3ZWJraXRfZmluZF9jb250ZXh0X25leHQKK3dlYmtp
dF9maW5kX2NvbnRleHRfcHJldgord2Via2l0X2ZpbmRfY29udGV4dF9zdGFydAorCis8U1VCU0VD
VElPTiBTdGFuZGFyZD4KK1dlYktpdEZpbmRDb250ZXh0Q2xhc3MKK1dFQktJVF9UWVBFX0ZJTkRf
Q09OVEVYVAorV0VCS0lUX0ZJTkRfQ09OVEVYVAorV0VCS0lUX0lTX0ZJTkRfQ09OVEVYVAorV0VC
S0lUX0ZJTkRfQ09OVEVYVF9DTEFTUworV0VCS0lUX0lTX0ZJTkRfQ09OVEVYVF9DTEFTUworV0VC
S0lUX0ZJTkRfQ09OVEVYVF9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK1dlYktp
dEZpbmRDb250ZXh0UHJpdmF0ZQord2Via2l0X2ZpbmRfY29udGV4dF9nZXRfdHlwZQorPC9TRUNU
SU9OPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93
ZWJraXQyZ3RrLnR5cGVzIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93
ZWJraXQyZ3RrLnR5cGVzCmluZGV4IDA1ZmYxOWQ2ZGMyNjNhOGY5OTUwNWRkM2M0N2JjNzU3OTdi
OGIxZDIuLjdmNDNiNDZlMTcxMmFkZWY3N2RlNzExMmY5NzE4ZjRkYmQwOTMxNGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBl
cworKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsu
dHlwZXMKQEAgLTksMyArOSw0IEBAIHdlYmtpdF9zZXR0aW5nc19nZXRfdHlwZQogd2Via2l0X3Vy
aV9yZXNwb25zZV9nZXRfdHlwZQogd2Via2l0X3VyaV9yZXF1ZXN0X2dldF90eXBlCiB3ZWJraXRf
d2luZG93X3Byb3BlcnRpZXNfZ2V0X3R5cGUKK3dlYmtpdF9maW5kX2NvbnRleHRfZ2V0X3R5cGUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1h
a2VmaWxlLmFtIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFr
ZWZpbGUuYW0KaW5kZXggZDkxMmI2NTdlMDM2NmI2ODJhOGM3OTE5NDkwNmE1MzM2ODAyYzk2ZS4u
MzE1OWRiNjEwYzNiNWIyZDJiY2FlMThhYTQwNTMwODFjYmM4N2FiOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KQEAg
LTEsOSArMSwxMCBAQAogVEVTVF9QUk9HUyArPSBcCisJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3Rz
L1Rlc3RCYWNrRm9yd2FyZExpc3QgXAorCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0V2Vi
S2l0RmluZENvbnRleHQgXAorCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0V2ViS2l0U2V0
dGluZ3MgXAogCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0V2ViS2l0V2ViQ29udGV4dCBc
CiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3IFwKLQlQcm9ncmFt
cy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFdlYkxvYWRlckNsaWVudCBcCi0JUHJvZ3JhbXMv
V2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRTZXR0aW5ncyBcCi0JUHJvZ3JhbXMvV2ViS2l0MkFQ
SVRlc3RzL1Rlc3RCYWNrRm9yd2FyZExpc3QKKwlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVz
dFdlYktpdFdlYkxvYWRlckNsaWVudAogCiBub2luc3RfUFJPR1JBTVMgKz0gJChURVNUX1BST0dT
KQogd2Via2l0Ml90ZXN0c19jcHBmbGFncyA9IFwKQEAgLTc2LDMgKzc3LDggQEAgUHJvZ3JhbXNf
V2ViS2l0MkFQSVRlc3RzX1Rlc3RCYWNrRm9yd2FyZExpc3RfQ1BQRkxBR1MgPSAkKHdlYmtpdDJf
dGVzdHNfY3BwZmxhZ3MKIFByb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0QmFja0ZvcndhcmRM
aXN0X0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQogUHJvZ3JhbXNfV2ViS2l0MkFQSVRl
c3RzX1Rlc3RCYWNrRm9yd2FyZExpc3RfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdz
KQogCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYktpdEZpbmRDb250ZXh0X1NPVVJD
RVMgPSBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktp
dEZpbmRDb250ZXh0LmNwcAorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRGaW5k
Q29udGV4dF9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKK1Byb2dyYW1zX1dl
YktpdDJBUElUZXN0c19UZXN0V2ViS2l0RmluZENvbnRleHRfTERBREQgPSAkKHdlYmtpdDJfdGVz
dHNfbGRhZGQpCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYktpdEZpbmRDb250ZXh0
X0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRGaW5kQ29udGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0RmluZENv
bnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFjMGRkNTJlMWExZDY4MzcyOTJkYzE0MzNlMzJlNWEwYWFh
YWZiNGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9UZXN0V2ViS2l0RmluZENvbnRleHQuY3BwCkBAIC0wLDAgKzEsMzA5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbmNsdWRlICJMb2FkVHJhY2tpbmdUZXN0LmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2lu
Y2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIu
aD4KKworY29uc3QgY2hhciogdGVzdFN0cmluZyA9ICI8aHRtbD48Ym9keT5maXJzdCB0ZXN0aW5n
IHNlY29uZCB0ZXN0aW5nIHNlY29uZEhhbGY8L2JvZHk+PC9odG1sPiI7CisKK2NsYXNzIEZpbmRD
b250ZXh0VGVzdDogcHVibGljIExvYWRUcmFja2luZ1Rlc3QgeworcHVibGljOgorICAgIE1BS0Vf
R0xJQl9URVNUX0ZJWFRVUkUoRmluZENvbnRleHRUZXN0KTsKKworICAgIEZpbmRDb250ZXh0VGVz
dCgpCisgICAgICAgIDogbV9ydW5GaW5kVW50aWxDb21wbGV0aW9uKGZhbHNlKQorICAgIHsKKyAg
ICB9CisKKyAgICB+RmluZENvbnRleHRUZXN0KCkKKyAgICB7CisgICAgICAgIGlmIChtX2ZpbmRD
b250ZXh0KQorICAgICAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVk
KG1fZmluZENvbnRleHQuZ2V0KCksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRo
aXMpOworICAgIH0KKworICAgIHZvaWQgZmluZChjb25zdCBjaGFyKiBzZWFyY2hTdHJpbmcsIFdl
YktpdEZpbmRDb250ZXh0RmxhZ3MgZmxhZ3MsIGd1aW50IG1heE1hdGNoQ291bnQpCisgICAgewor
ICAgICAgICAvLyBJZiB0aGUgU0hPV19PVkVSTEFZIGZsYWcgaXMgbm90IHBhc3NlZCB0aGUgV2Vi
UGFnZSBkb2VzIG5vdCBub3RpZnkgYWJvdXQgbWF0Y2hlcy4KKyAgICAgICAgZmxhZ3MgPSBzdGF0
aWNfY2FzdDxXZWJLaXRGaW5kQ29udGV4dEZsYWdzPihmbGFncyB8IFdFQktJVF9GSU5EX0NPTlRF
WFRfU0hPV19PVkVSTEFZKTsKKyAgICAgICAgbV9maW5kQ29udGV4dCA9IGFkb3B0R1JlZih3ZWJr
aXRfd2ViX3ZpZXdfc2VhcmNoKG1fd2ViVmlldywgc2VhcmNoU3RyaW5nLCBmbGFncywgbWF4TWF0
Y2hDb3VudCkpOworCisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9maW5kQ29udGV4dC5nZXQo
KSwgImZvdW5kLXN0cmluZyIsIEdfQ0FMTEJBQ0soZm91bmRTdHJpbmdDYWxsYmFjayksIHRoaXMp
OworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fZmluZENvbnRleHQuZ2V0KCksICJmYWlsZWQt
dG8tZmluZC1zdHJpbmciLCBHX0NBTExCQUNLKGZhaWxlZFRvRmluZFN0cmluZ0NhbGxiYWNrKSwg
dGhpcyk7CisKKyAgICAgICAgd2Via2l0X2ZpbmRfY29udGV4dF9zdGFydChtX2ZpbmRDb250ZXh0
LmdldCgpKTsKKyAgICB9CisKKyAgICB2b2lkIGNvdW50KGNvbnN0IGNoYXIqIHNlYXJjaFN0cmlu
ZywgV2ViS2l0RmluZENvbnRleHRGbGFncyBmbGFncywgZ3VpbnQgbWF4TWF0Y2hDb3VudCkKKyAg
ICB7CisgICAgICAgIC8vIElmIHRoZSBTSE9XX09WRVJMQVkgZmxhZyBpcyBub3QgcGFzc2VkIHRo
ZSBXZWJQYWdlIGRvZXMgbm90IG5vdGlmeSBhYm91dCBtYXRjaGVzLgorICAgICAgICBmbGFncyA9
IHN0YXRpY19jYXN0PFdlYktpdEZpbmRDb250ZXh0RmxhZ3M+KGZsYWdzIHwgV0VCS0lUX0ZJTkRf
Q09OVEVYVF9TSE9XX09WRVJMQVkpOworICAgICAgICBtX2ZpbmRDb250ZXh0ID0gYWRvcHRHUmVm
KHdlYmtpdF93ZWJfdmlld19zZWFyY2gobV93ZWJWaWV3LCBzZWFyY2hTdHJpbmcsIGZsYWdzLCBt
YXhNYXRjaENvdW50KSk7CisKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX2ZpbmRDb250ZXh0
LmdldCgpLCAiY291bnRlZC1tYXRjaGVzIiwgR19DQUxMQkFDSyhjb3VudGVkTWF0Y2hlc0NhbGxi
YWNrKSwgdGhpcyk7CisKKyAgICAgICAgd2Via2l0X2ZpbmRfY29udGV4dF9jb3VudF9tYXRjaGVz
KG1fZmluZENvbnRleHQuZ2V0KCkpOworICAgIH0KKworICAgIHZvaWQgd2FpdFVudGlsRmluZEZp
bmlzaGVkKCkKKyAgICB7CisgICAgICAgIG1fcnVuRmluZFVudGlsQ29tcGxldGlvbiA9IHRydWU7
CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBHUmVm
UHRyPFdlYktpdEZpbmRDb250ZXh0PiBtX2ZpbmRDb250ZXh0OworICAgIGJvb2wgbV90ZXh0Rm91
bmQ7CisKK3ByaXZhdGU6CisgICAgYm9vbCBtX3J1bkZpbmRVbnRpbENvbXBsZXRpb247CisKKyAg
ICBzdGF0aWMgdm9pZCBmb3VuZFN0cmluZ0NhbGxiYWNrKFdlYktpdEZpbmRDb250ZXh0KiwgRmlu
ZENvbnRleHRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+bV90ZXh0Rm91bmQgPSB0
cnVlOworICAgICAgICBpZiAodGVzdC0+bV9ydW5GaW5kVW50aWxDb21wbGV0aW9uKQorICAgICAg
ICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgdm9pZCBmYWlsZWRUb0ZpbmRTdHJpbmdDYWxsYmFjayhXZWJLaXRGaW5kQ29udGV4dCos
IEZpbmRDb250ZXh0VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPm1fdGV4dEZvdW5k
ID0gZmFsc2U7CisgICAgICAgIGlmICh0ZXN0LT5tX3J1bkZpbmRVbnRpbENvbXBsZXRpb24pCisg
ICAgICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAgIH0KKwor
ICAgIHN0YXRpYyB2b2lkIGNvdW50ZWRNYXRjaGVzQ2FsbGJhY2soV2ViS2l0RmluZENvbnRleHQq
LCBGaW5kQ29udGV4dFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBpZiAodGVzdC0+bV9ydW5G
aW5kVW50aWxDb21wbGV0aW9uKQorICAgICAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5t
X21haW5Mb29wKTsKKyAgICB9Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dFRleHRG
b3VuZChGaW5kQ29udGV4dFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+
bG9hZEh0bWwodGVzdFN0cmluZywgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7CisKKyAgICB0ZXN0LT5maW5kKCJ0ZXN0aW5nIiwgV0VCS0lUX0ZJTkRfQ09OVEVYVF9GTEFH
U19OT05FLCAxKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdf
YXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYkNvbnRl
eHRUZXh0Tm90Rm91bmQoRmluZENvbnRleHRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQorewor
ICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RTdHJpbmcsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExv
YWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+ZmluZCgibm90Rm91bmQiLCBXRUJLSVRfRklORF9D
T05URVhUX0ZMQUdTX05PTkUsIDEpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgp
OworCisgICAgZ19hc3NlcnQoIXRlc3QtPm1fdGV4dEZvdW5kKTsKK30KKworc3RhdGljIHZvaWQg
dGVzdFdlYkNvbnRleHRNYXRjaENvdW50KEZpbmRDb250ZXh0VGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3RyaW5nLCAwKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPmZpbmQoInRlc3RpbmciLCBXRUJL
SVRfRklORF9DT05URVhUX0ZMQUdTX05PTkUsIDIpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRG
aW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQod2Via2l0X2ZpbmRfY29udGV4dF9nZXRfbWF0Y2hf
Y291bnQodGVzdC0+bV9maW5kQ29udGV4dC5nZXQoKSkgPT0gMik7CisgICAgZ19hc3NlcnQodGVz
dC0+bV90ZXh0Rm91bmQpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dE1heE1hdGNo
Q291bnQoRmluZENvbnRleHRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3Qt
PmxvYWRIdG1sKHRlc3RTdHJpbmcsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hl
ZCgpOworCisgICAgdGVzdC0+ZmluZCgidGVzdGluZyIsIFdFQktJVF9GSU5EX0NPTlRFWFRfRkxB
R1NfTk9ORSwgMSk7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBn
X2Fzc2VydCh3ZWJraXRfZmluZF9jb250ZXh0X2dldF9tYXRjaF9jb3VudCh0ZXN0LT5tX2ZpbmRD
b250ZXh0LmdldCgpKSA9PSBHX01BWFVJTlQpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZv
dW5kKTsKK30KKworc3RhdGljIHZvaWQgdGVzdFdlYkNvbnRleHROZXh0KEZpbmRDb250ZXh0VGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3RyaW5n
LCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPmZp
bmQoInRlc3RpbmciLCBXRUJLSVRfRklORF9DT05URVhUX0ZMQUdTX05PTkUsIDIpOworICAgIHRl
c3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0
Rm91bmQpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9maW5kX2NvbnRleHRfZ2V0X21hdGNoX2NvdW50
KHRlc3QtPm1fZmluZENvbnRleHQuZ2V0KCkpID09IDIpOworCisgICAgd2Via2l0X2ZpbmRfY29u
dGV4dF9uZXh0KHRlc3QtPm1fZmluZENvbnRleHQuZ2V0KCkpOworICAgIHRlc3QtPndhaXRVbnRp
bEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworICAg
IGdfYXNzZXJ0KHdlYmtpdF9maW5kX2NvbnRleHRfZ2V0X21hdGNoX2NvdW50KHRlc3QtPm1fZmlu
ZENvbnRleHQuZ2V0KCkpID09IDIpOworICAgIGdfYXNzZXJ0KCEod2Via2l0X2ZpbmRfY29udGV4
dF9nZXRfZmxhZ3ModGVzdC0+bV9maW5kQ29udGV4dC5nZXQoKSkgJiBXRUJLSVRfRklORF9DT05U
RVhUX0JBQ0tXQVJEUykpOworCisgICAgd2Via2l0X2ZpbmRfY29udGV4dF9uZXh0KHRlc3QtPm1f
ZmluZENvbnRleHQuZ2V0KCkpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwor
CisgICAgZ19hc3NlcnQoIXRlc3QtPm1fdGV4dEZvdW5kKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRf
ZmluZF9jb250ZXh0X2dldF9tYXRjaF9jb3VudCh0ZXN0LT5tX2ZpbmRDb250ZXh0LmdldCgpKSA9
PSAyKTsKKyAgICBnX2Fzc2VydCghKHdlYmtpdF9maW5kX2NvbnRleHRfZ2V0X2ZsYWdzKHRlc3Qt
Pm1fZmluZENvbnRleHQuZ2V0KCkpICYgV0VCS0lUX0ZJTkRfQ09OVEVYVF9CQUNLV0FSRFMpKTsK
K30KKworc3RhdGljIHZvaWQgdGVzdFdlYkNvbnRleHRQcmV2KEZpbmRDb250ZXh0VGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3RyaW5nLCAwKTsK
KyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPmZpbmQoInRl
c3RpbmciLCBXRUJLSVRfRklORF9DT05URVhUX0ZMQUdTX05PTkUsIDIpOworICAgIHRlc3QtPndh
aXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQod2Via2l0X2ZpbmRfY29udGV4
dF9nZXRfbWF0Y2hfY291bnQodGVzdC0+bV9maW5kQ29udGV4dC5nZXQoKSkgPT0gMik7CisgICAg
Z19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworCisgICAgd2Via2l0X2ZpbmRfY29udGV4dF9u
ZXh0KHRlc3QtPm1fZmluZENvbnRleHQuZ2V0KCkpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRG
aW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworICAgIGdfYXNz
ZXJ0KHdlYmtpdF9maW5kX2NvbnRleHRfZ2V0X21hdGNoX2NvdW50KHRlc3QtPm1fZmluZENvbnRl
eHQuZ2V0KCkpID09IDIpOworICAgIGdfYXNzZXJ0KCEod2Via2l0X2ZpbmRfY29udGV4dF9nZXRf
ZmxhZ3ModGVzdC0+bV9maW5kQ29udGV4dC5nZXQoKSkgJiBXRUJLSVRfRklORF9DT05URVhUX0JB
Q0tXQVJEUykpOworCisgICAgd2Via2l0X2ZpbmRfY29udGV4dF9wcmV2KHRlc3QtPm1fZmluZENv
bnRleHQuZ2V0KCkpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAg
Z19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9maW5kX2Nv
bnRleHRfZ2V0X21hdGNoX2NvdW50KHRlc3QtPm1fZmluZENvbnRleHQuZ2V0KCkpID09IDIpOwor
ICAgIGdfYXNzZXJ0KHdlYmtpdF9maW5kX2NvbnRleHRfZ2V0X2ZsYWdzKHRlc3QtPm1fZmluZENv
bnRleHQuZ2V0KCkpICYgV0VCS0lUX0ZJTkRfQ09OVEVYVF9CQUNLV0FSRFMpOworfQorCitzdGF0
aWMgdm9pZCB0ZXN0V2ViQ29udGV4dENvdW50ZWRNYXRjaGVzKEZpbmRDb250ZXh0VGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3RyaW5nLCAwKTsK
KyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPmNvdW50KCJ0
ZXN0aW5nIiwgV0VCS0lUX0ZJTkRfQ09OVEVYVF9GTEFHU19OT05FLCAyKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHdlYmtpdF9maW5kX2NvbnRl
eHRfZ2V0X21hdGNoX2NvdW50KHRlc3QtPm1fZmluZENvbnRleHQuZ2V0KCkpID09IDIpOworCisg
ICAgdGVzdC0+Y291bnQoImZpcnN0IiwgV0VCS0lUX0ZJTkRfQ09OVEVYVF9GTEFHU19OT05FLCAy
KTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHdl
YmtpdF9maW5kX2NvbnRleHRfZ2V0X21hdGNoX2NvdW50KHRlc3QtPm1fZmluZENvbnRleHQuZ2V0
KCkpID09IDEpOworCisgICAgdGVzdC0+Y291bnQoIm5vdEZvdW5kIiwgV0VCS0lUX0ZJTkRfQ09O
VEVYVF9GTEFHU19OT05FLCAyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsK
KworICAgIGdfYXNzZXJ0KCF3ZWJraXRfZmluZF9jb250ZXh0X2dldF9tYXRjaF9jb3VudCh0ZXN0
LT5tX2ZpbmRDb250ZXh0LmdldCgpKSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJDb250ZXh0
RmxhZ3MoRmluZENvbnRleHRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3Qt
PmxvYWRIdG1sKHRlc3RTdHJpbmcsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hl
ZCgpOworCisgICAgdGVzdC0+ZmluZCgiVGVzdGluZyIsIFdFQktJVF9GSU5EX0NPTlRFWFRfRkxB
R1NfTk9ORSwgMik7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBn
X2Fzc2VydCghdGVzdC0+bV90ZXh0Rm91bmQpOworCisgICAgdGVzdC0+ZmluZCgiVGVzdGluZyIs
IFdFQktJVF9GSU5EX0NPTlRFWFRfQ0FTRV9JTlNFTlNJVElWRSwgMik7CisgICAgdGVzdC0+d2Fp
dFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7
CisKKyAgICB0ZXN0LT5maW5kKCJlc3RpbmciLCBXRUJLSVRfRklORF9DT05URVhUX0ZMQUdTX05P
TkUsIDIpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3Nl
cnQodGVzdC0+bV90ZXh0Rm91bmQpOworCisgICAgdGVzdC0+ZmluZCgiZXN0aW5nIiwgV0VCS0lU
X0ZJTkRfQ09OVEVYVF9BVF9XT1JEX1NUQVJUUywgMik7CisgICAgdGVzdC0+d2FpdFVudGlsRmlu
ZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCghdGVzdC0+bV90ZXh0Rm91bmQpOworCisgICAg
dGVzdC0+ZmluZCgiSGFsZiIsIFdFQktJVF9GSU5EX0NPTlRFWFRfQVRfV09SRF9TVEFSVFMsIDIp
OworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQoIXRl
c3QtPm1fdGV4dEZvdW5kKTsKKworICAgIHRlc3QtPmZpbmQoIkhhbGYiLCBzdGF0aWNfY2FzdDxX
ZWJLaXRGaW5kQ29udGV4dEZsYWdzPihXRUJLSVRfRklORF9DT05URVhUX0FUX1dPUkRfU1RBUlRT
IHwgV0VCS0lUX0ZJTkRfQ09OVEVYVF9UUkVBVF9NRURJQUxfQ0FQSVRBTF9BU19XT1JEX1NUQVJU
KSwgMik7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2Vy
dCh0ZXN0LT5tX3RleHRGb3VuZCk7CisKKyAgICB0ZXN0LT5maW5kKCJ0ZXN0aW5nIiwgV0VCS0lU
X0ZJTkRfQ09OVEVYVF9XUkFQX0FST1VORCwgMyk7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZp
bmlzaGVkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworCisgICAgd2Via2l0
X2ZpbmRfY29udGV4dF9uZXh0KHRlc3QtPm1fZmluZENvbnRleHQuZ2V0KCkpOworICAgIHRlc3Qt
PndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5k
KTsKKworICAgIHdlYmtpdF9maW5kX2NvbnRleHRfbmV4dCh0ZXN0LT5tX2ZpbmRDb250ZXh0Lmdl
dCgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydCh0
ZXN0LT5tX3RleHRGb3VuZCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJDb250ZXh0SW5zdGFu
Y2UoRmluZENvbnRleHRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIGNvbnN0IGNo
YXIqIHNlYXJjaFN0cmluZyA9ICJ0ZXN0aW5nIjsKKyAgICBjb25zdCBndWludCBtYXhNYXRjaENv
dW50ID0gMTsKKyAgICBjb25zdCBXZWJLaXRGaW5kQ29udGV4dEZsYWdzIGZpbmRGbGFncyA9IHN0
YXRpY19jYXN0PFdlYktpdEZpbmRDb250ZXh0RmxhZ3M+KFdFQktJVF9GSU5EX0NPTlRFWFRfV1JB
UF9BUk9VTkQgfCBXRUJLSVRfRklORF9DT05URVhUX0FUX1dPUkRfU1RBUlRTKTsKKworICAgIEdS
ZWZQdHI8V2ViS2l0RmluZENvbnRleHQ+IGZpbmRDb250ZXh0MShhZG9wdEdSZWYod2Via2l0X3dl
Yl92aWV3X3NlYXJjaCh0ZXN0LT5tX3dlYlZpZXcsIHNlYXJjaFN0cmluZywgZmluZEZsYWdzLCBt
YXhNYXRjaENvdW50KSkpOworICAgIEdSZWZQdHI8V2ViS2l0RmluZENvbnRleHQ+IGZpbmRDb250
ZXh0MihhZG9wdEdSZWYod2Via2l0X3dlYl92aWV3X3NlYXJjaCh0ZXN0LT5tX3dlYlZpZXcsIHNl
YXJjaFN0cmluZywgZmluZEZsYWdzLCBtYXhNYXRjaENvdW50KSkpOworCisgICAgLy8gQ2hlY2sg
dGhlcmUncyBhIGRpZmZlcmVudCBpbnN0YW5jZSBmb3IgZWFjaCBzZWFyY2ggb3BlcmF0aW9uLgor
ICAgIGdfYXNzZXJ0KGZpbmRDb250ZXh0MS5nZXQoKSAhPSBmaW5kQ29udGV4dDIuZ2V0KCkpOwor
fQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dEdldHRlcnMoRmluZENvbnRleHRUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIGNvbnN0IGNoYXIqIHNlYXJjaFN0cmluZyA9ICJ0
ZXN0aW5nIjsKKyAgICBjb25zdCBndWludCBtYXhNYXRjaENvdW50ID0gMTsKKyAgICBjb25zdCBX
ZWJLaXRGaW5kQ29udGV4dEZsYWdzIGZpbmRGbGFncyA9IHN0YXRpY19jYXN0PFdlYktpdEZpbmRD
b250ZXh0RmxhZ3M+KFdFQktJVF9GSU5EX0NPTlRFWFRfV1JBUF9BUk9VTkQgfCBXRUJLSVRfRklO
RF9DT05URVhUX0FUX1dPUkRfU1RBUlRTKTsKKworICAgIEdSZWZQdHI8V2ViS2l0RmluZENvbnRl
eHQ+IGZpbmRDb250ZXh0KGFkb3B0R1JlZih3ZWJraXRfd2ViX3ZpZXdfc2VhcmNoKHRlc3QtPm1f
d2ViVmlldywgc2VhcmNoU3RyaW5nLCBmaW5kRmxhZ3MsIG1heE1hdGNoQ291bnQpKSk7CisKKyAg
ICBnX2Fzc2VydCghZ19zdHJjbXAwKHdlYmtpdF9maW5kX2NvbnRleHRfZ2V0X3NlYXJjaF9zdHJp
bmcoZmluZENvbnRleHQuZ2V0KCkpLCBzZWFyY2hTdHJpbmcpKTsKKyAgICBnX2Fzc2VydCh3ZWJr
aXRfZmluZF9jb250ZXh0X2dldF9tYXhfbWF0Y2hfY291bnQoZmluZENvbnRleHQuZ2V0KCkpID09
IG1heE1hdGNoQ291bnQpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9maW5kX2NvbnRleHRfZ2V0X2Zs
YWdzKGZpbmRDb250ZXh0LmdldCgpKSA9PSBmaW5kRmxhZ3MpOworfQorCit2b2lkIGJlZm9yZUFs
bCgpCit7CisgICAgRmluZENvbnRleHRUZXN0OjphZGQoIldlYktpdEZpbmRDb250ZXh0IiwgImdl
dHRlcnMiLCB0ZXN0V2ViQ29udGV4dEdldHRlcnMpOworICAgIEZpbmRDb250ZXh0VGVzdDo6YWRk
KCJXZWJLaXRGaW5kQ29udGV4dCIsICJpbnN0YW5jZSIsIHRlc3RXZWJDb250ZXh0SW5zdGFuY2Up
OworICAgIEZpbmRDb250ZXh0VGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udGV4dCIsICJ0ZXh0LWZv
dW5kIiwgdGVzdFdlYkNvbnRleHRUZXh0Rm91bmQpOworICAgIEZpbmRDb250ZXh0VGVzdDo6YWRk
KCJXZWJLaXRGaW5kQ29udGV4dCIsICJ0ZXh0LW5vdC1mb3VuZCIsIHRlc3RXZWJDb250ZXh0VGV4
dE5vdEZvdW5kKTsKKyAgICBGaW5kQ29udGV4dFRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRleHQi
LCAibWF0Y2gtY291bnQiLCB0ZXN0V2ViQ29udGV4dE1hdGNoQ291bnQpOworICAgIEZpbmRDb250
ZXh0VGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udGV4dCIsICJtYXgtbWF0Y2gtY291bnQiLCB0ZXN0
V2ViQ29udGV4dE1heE1hdGNoQ291bnQpOworICAgIEZpbmRDb250ZXh0VGVzdDo6YWRkKCJXZWJL
aXRGaW5kQ29udGV4dCIsICJuZXh0IiwgdGVzdFdlYkNvbnRleHROZXh0KTsKKyAgICBGaW5kQ29u
dGV4dFRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRleHQiLCAicHJldiIsIHRlc3RXZWJDb250ZXh0
UHJldik7CisgICAgRmluZENvbnRleHRUZXN0OjphZGQoIldlYktpdEZpbmRDb250ZXh0IiwgImNv
dW50ZWQtbWF0Y2hlcyIsIHRlc3RXZWJDb250ZXh0Q291bnRlZE1hdGNoZXMpOworICAgIEZpbmRD
b250ZXh0VGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udGV4dCIsICJmbGFncyIsIHRlc3RXZWJDb250
ZXh0RmxhZ3MpOworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaAppbmRleCAzYTRhZjRjMDZmN2ZhYjkwZDg0NjNlOTlm
ZmM5ZDBhOWRkMDc2NWYwLi5iZGExMzhjNjRkYWNjNWFiMTQwZDdiMDBhOTdjZTg3OWUxODQ1MmNm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCkBAIC0yOCw2
ICsyOCw3IEBACiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CiAjaW5jbHVkZSA8
d2Via2l0Mi9XZWJLaXRFbnVtVHlwZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEVycm9y
Lmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRGaW5kQ29udGV4dC5oPgogI2luY2x1ZGUgPHdl
YmtpdDIvV2ViS2l0U2V0dGluZ3MuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFVSSVJlcXVl
c3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFVSSVJlc3BvbnNlLmg+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122626</attachid>
            <date>2012-01-16 06:46:07 -0800</date>
            <delta_ts>2012-01-18 03:39:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76070-20120116154605.patch</filename>
            <type>text/plain</type>
            <size>50617</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0ODAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYTIxMmI0MTU2MmEzOWU0
YmFlNjg2ZWQxY2Y0ODRlNDMxNTFkYzhmNi4uZmU3OGE3ODViMDhkYmU3OGYwZTA3NDVlZDgwZjJj
ODJhZGViMDliNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY3IEBACisyMDEyLTAxLTE2ICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFtX
SzJdIEFkZCBGaW5kIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzYwNzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIHBhdGNoIGFkZHMgYSBuZXcgcHVibGljIGZpbmQgQVBJIGZvciB0aGUgR3Rr
KyBXSzIgcG9ydC4gSXQKKyAgICAgICAgZGVmaW5lcyBhIG5ldyBvYmplY3QgY2FsbGVkIFdlYktp
dEZpbmRDb250cm9sbGVyIG93bmVkIGJ5IGVhY2gKKyAgICAgICAgV2ViS2l0V2ViVmlldy4gQ2xp
ZW50cyB3aWxsIHVzZSB0aGlzIG5ldyBvYmplY3QgdG8gc2VhcmNoIHN0cmluZ3MKKyAgICAgICAg
aW4gdGhlIFdlYktpdFdlYlZpZXcuCisKKyAgICAgICAgQ2hhbmdlcyBpbmNsdWRlIGFsc28gZG9j
dW1lbnRhdGlvbiBhbmQgdW5pdCB0ZXN0cyBmb3IgdGhlIG5ldworICAgICAgICBwdWJsaWMgQVBJ
LgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0RmluZENvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKGRpZEZpbmRTdHJp
bmcpOiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgV0tQYWdlIEZpbmQgaW50ZXJmYWNlLgorICAgICAg
ICAoZGlkRmFpbFRvRmluZFN0cmluZyk6IERpdHRvLgorICAgICAgICAoZGlkQ291bnRTdHJpbmdN
YXRjaGVzKTogRGl0dG8uCisgICAgICAgICh3ZWJraXRGaW5kQXR0YWNoRmluZENsaWVudFRvUGFn
ZSk6IHNldHMgdGhlIFdlYktpdEZpbmRDb250cm9sbGVyCisgICAgICAgIGFzIHRoZSBXS1BhZ2Ug
ZmluZCBjbGllbnQKKyAgICAgICAgKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfaW5pdCk6CisgICAg
ICAgICh3ZWJraXRGaW5kQ29udHJvbGxlckdldFByb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdEZp
bmRDb250cm9sbGVyU2V0UHJvcGVydHkpOgorICAgICAgICAod2Via2l0RmluZENvbnRyb2xsZXJG
aW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRfZmluZF9jb250cm9sbGVyX2NsYXNzX2luaXQpOgor
ICAgICAgICAod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfc2VhcmNoX3N0cmluZyk6CisgICAg
ICAgICh3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9tYXRjaF9jb3VudCk6CisgICAgICAgICh3
ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9vcHRpb25zKToKKyAgICAgICAgKHdlYmtpdF9maW5k
X2NvbnRyb2xsZXJfZ2V0X21heF9tYXRjaF9jb3VudCk6CisgICAgICAgICh3ZWJraXRfZmluZF9j
b250cm9sbGVyX3NlYXJjaF9zdHJpbmcpOiBhc3luY2hyb25vdXNseSBsb29rcyBmb3IKKyAgICAg
ICAgdGhlIHNlYXJjaCBzdHJpbmcgaW4gdGhlIFdlYktpdFdlYlZpZXcuCisgICAgICAgICh3ZWJr
aXRfZmluZF9jb250cm9sbGVyX25leHQpOgorICAgICAgICAod2Via2l0X2ZpbmRfY29udHJvbGxl
cl9wcmV2aW91cyk6CisgICAgICAgICh3ZWJraXRfZmluZF9jb250cm9sbGVyX2NvdW50X21hdGNo
ZXMpOiBhc3luY2hyb25vdXNseSBjb3VudGVzIHRoZQorICAgICAgICBudW1iZXIgb2Ygb2NjdXJy
ZW5jZXMgb2YgdGhlIHNlYXJjaCBzdHJpbmcgaW4gdGhlIFdlYktpdFdlYlZpZXcuCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmluZENvbnRyb2xsZXIuaDogQWRkZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmluZENvbnRyb2xsZXJQcml2YXRlLmg6IEFk
ZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwOgorICAg
ICAgICAod2Via2l0X3dlYl92aWV3X2luaXQpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2dl
dF9maW5kX2NvbnRyb2xsZXIpOiByZXR1cm5zIHRoZQorICAgICAgICBXZWJLaXRGaW5kQ29udHJv
bGxlciBpbnN0YW5jZSBvd25lZCBieSB0aGUgV2ViS2l0V2ViVmlldy4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Vi
a2l0Mmd0ay1kb2NzLnNnbWw6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJr
aXQyZ3RrLXNlY3Rpb25zLnR4dDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dl
YmtpdDJndGsudHlwZXM6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFr
ZWZpbGUuYW06CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEZp
bmRDb250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgICh0ZXN0RmluZENvbnRyb2xsZXJUZXh0
Rm91bmQpOgorICAgICAgICAodGVzdEZpbmRDb250cm9sbGVyVGV4dE5vdEZvdW5kKToKKyAgICAg
ICAgKHRlc3RGaW5kQ29udHJvbGxlck1hdGNoQ291bnQpOgorICAgICAgICAodGVzdEZpbmRDb250
cm9sbGVyTWF4TWF0Y2hDb3VudCk6CisgICAgICAgICh0ZXN0RmluZENvbnRyb2xsZXJOZXh0KToK
KyAgICAgICAgKHRlc3RGaW5kQ29udHJvbGxlclByZXZpb3VzKToKKyAgICAgICAgKHRlc3RGaW5k
Q29udHJvbGxlckNvdW50ZWRNYXRjaGVzKToKKyAgICAgICAgKHRlc3RGaW5kQ29udHJvbGxlck9w
dGlvbnMpOgorICAgICAgICAodGVzdEZpbmRDb250cm9sbGVySW5zdGFuY2UpOgorICAgICAgICAo
dGVzdEZpbmRDb250cm9sbGVyR2V0dGVycyk6CisgICAgICAgIChiZWZvcmVBbGwpOgorICAgICAg
ICAoYWZ0ZXJBbGwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaDoKKwog
MjAxMi0wMS0xMiAgUnl1YW4gQ2hvaSAgPHJ5dWFuLmNob2lAc2Ftc3VuZy5jb20+CiAKICAgICAg
ICAgW0VGTF1bV0syXSBOZXR3b3JrIGlzIG5vdCBhdmFpbGFibGUgd2hlbiBTT1VQIGlzIGVuYWJs
ZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9X
ZWJLaXQyL0dOVW1ha2VmaWxlLmFtCmluZGV4IDQyZjg1MWI1MDJkM2FjZTlhN2ZiYzAwOWI4OTFl
ZWQzZTkyMDA4YmYuLmYwMjQ2YTM4NGY2M2I1MTYxYjg4ZTNlZDIxYTY4YWI0NDVhN2UwMTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJL
aXQyL0dOVW1ha2VmaWxlLmFtCkBAIC04Myw2ICs4Myw3IEBAIHdlYmtpdDJndGtfaGVhZGVycyA9
IFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0
ZW0uaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREZWZpbmVzLmggXAog
CSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RXJyb3IuaCBcCisJJChXZWJLaXQy
KS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaW5kQ29udHJvbGxlci5oIFwKIAkkKFdlYktpdDIp
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuaCBcCiAJJChXZWJLaXQyKS9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRTZXR0aW5ncy5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFVSSVJlcXVlc3QuaCBcCkBAIC01MjUsNiArNTI2LDggQEAgbGlid2Via2l0
Mmd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9W
RVJTSU9OQF9sYV9TT1UKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRE
ZWZpbmVzLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9y
LmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmNwcCBc
CisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmluZENvbnRyb2xsZXIu
aCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmluZENvbnRyb2xs
ZXIuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRl
LmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNldHRpbmdzLmNw
cCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2V0dGluZ3MuaCBc
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaW5k
Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRG
aW5kQ29udHJvbGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGM2N2E4OTNjOGRhMTU0NjNjM2FiYmNjNjc5
YTM4YTEyNWRhNDI0OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdEZpbmRDb250cm9sbGVyLmNwcApAQCAtMCwwICsxLDQzNyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldlYktpdEZpbmRDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJXZWJLaXRQcml2
YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0V2ViVmlldy5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94
eS5oIgorI2luY2x1ZGUgIndlYmtpdDIvV2ViS2l0RW51bVR5cGVzLmgiCisjaW5jbHVkZSA8V2Vi
S2l0Mi9XS0ZpbmRPcHRpb25zLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS1JldGFpblB0ci5oPgor
I2luY2x1ZGUgPFdlYktpdDIvV0tTdHJpbmcuaD4KKyNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK2VudW0geworICAgIEZPVU5EX1NUUklORywKKyAgICBGQUlMRURfVE9fRklORF9TVFJJ
TkcsCisgICAgQ09VTlRFRF9NQVRDSEVTLAorCisgICAgTEFTVF9TSUdOQUwKK307CisKK2VudW0g
eworICAgIFBST1BfMCwKKworICAgIFBST1BfU1RSSU5HLAorICAgIFBST1BfT1BUSU9OUywKKyAg
ICBQUk9QX01BVENIX0NPVU5ULAorICAgIFBST1BfTUFYX01BVENIX0NPVU5UCit9OworCitzdHJ1
Y3QgX1dlYktpdEZpbmRDb250cm9sbGVyUHJpdmF0ZSB7CisgICAgQ1N0cmluZyBzdHJpbmc7Cisg
ICAgV2ViS2l0RmluZE9wdGlvbnMgZmluZE9wdGlvbnM7CisgICAgdW5zaWduZWQgbWF0Y2hDb3Vu
dDsKKyAgICB1bnNpZ25lZCBtYXhNYXRjaENvdW50OworICAgIFdLUGFnZVJlZiB3a1BhZ2U7Cit9
OworCitzdGF0aWMgZ3VpbnQgc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAsIH07CisKK0dfREVG
SU5FX1RZUEUoV2ViS2l0RmluZENvbnRyb2xsZXIsIHdlYmtpdF9maW5kX2NvbnRyb2xsZXIsIEdf
VFlQRV9PQkpFQ1QpCisKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0FQSV9FTlVNKFdFQktJVF9G
SU5EX09QVElPTlNfQ0FTRV9JTlNFTlNJVElWRSwga1dLRmluZE9wdGlvbnNDYXNlSW5zZW5zaXRp
dmUpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfQVBJX0VOVU0oV0VCS0lUX0ZJTkRfT1BUSU9O
U19BVF9XT1JEX1NUQVJUUywga1dLRmluZE9wdGlvbnNBdFdvcmRTdGFydHMpOworQ09NUElMRV9B
U1NFUlRfTUFUQ0hJTkdfQVBJX0VOVU0oV0VCS0lUX0ZJTkRfT1BUSU9OU19UUkVBVF9NRURJQUxf
Q0FQSVRBTF9BU19XT1JEX1NUQVJULCBrV0tGaW5kT3B0aW9uc1RyZWF0TWVkaWFsQ2FwaXRhbEFz
V29yZFN0YXJ0KTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0FQSV9FTlVNKFdFQktJVF9GSU5E
X09QVElPTlNfQkFDS1dBUkRTLCBrV0tGaW5kT3B0aW9uc0JhY2t3YXJkcyk7CitDT01QSUxFX0FT
U0VSVF9NQVRDSElOR19BUElfRU5VTShXRUJLSVRfRklORF9PUFRJT05TX1dSQVBfQVJPVU5ELCBr
V0tGaW5kT3B0aW9uc1dyYXBBcm91bmQpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfQVBJX0VO
VU0oV0VCS0lUX0ZJTkRfT1BUSU9OU19TSE9XX09WRVJMQVksIGtXS0ZpbmRPcHRpb25zU2hvd092
ZXJsYXkpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfQVBJX0VOVU0oV0VCS0lUX0ZJTkRfT1BU
SU9OU19TSE9XX0ZJTkRfSU5ESUNBVE9SLCBrV0tGaW5kT3B0aW9uc1Nob3dGaW5kSW5kaWNhdG9y
KTsKKworc3RhdGljIHZvaWQgZGlkRmluZFN0cmluZyhXS1BhZ2VSZWYgcGFnZSwgV0tTdHJpbmdS
ZWYgc3RyaW5nLCB1bnNpZ25lZCBtYXRjaENvdW50LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQor
eworICAgIFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxlciA9IFdFQktJVF9GSU5E
X0NPTlRST0xMRVIoY2xpZW50SW5mbyk7CisgICAgZmluZENvbnRyb2xsZXItPnByaXYtPm1hdGNo
Q291bnQgPSBtYXRjaENvdW50OworICAgIGdfc2lnbmFsX2VtaXQoZmluZENvbnRyb2xsZXIsIHNp
Z25hbHNbRk9VTkRfU1RSSU5HXSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZEZhaWxUb0ZpbmRT
dHJpbmcoV0tQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIHN0cmluZywgY29uc3Qgdm9pZCogY2xp
ZW50SW5mbykKK3sKKyAgICBnX3NpZ25hbF9lbWl0KFdFQktJVF9GSU5EX0NPTlRST0xMRVIoY2xp
ZW50SW5mbyksIHNpZ25hbHNbRkFJTEVEX1RPX0ZJTkRfU1RSSU5HXSwgMCk7Cit9CisKK3N0YXRp
YyB2b2lkIGRpZENvdW50U3RyaW5nTWF0Y2hlcyhXS1BhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYg
c3RyaW5nLCB1bnNpZ25lZCBtYXRjaENvdW50LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQorewor
ICAgIFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxlciA9IFdFQktJVF9GSU5EX0NP
TlRST0xMRVIoY2xpZW50SW5mbyk7CisgICAgZmluZENvbnRyb2xsZXItPnByaXYtPm1hdGNoQ291
bnQgPSBtYXRjaENvdW50OworICAgIGdfc2lnbmFsX2VtaXQoZmluZENvbnRyb2xsZXIsIHNpZ25h
bHNbQ09VTlRFRF9NQVRDSEVTXSwgMCk7Cit9CisKK3ZvaWQgd2Via2l0RmluZEF0dGFjaEZpbmRD
bGllbnRUb1BhZ2UoV2ViS2l0RmluZENvbnRyb2xsZXIqIGZpbmRDb250cm9sbGVyLCBXS1BhZ2VS
ZWYgd2tQYWdlKQoreworICAgIFdLUGFnZUZpbmRDbGllbnQgd2tGaW5kQ2xpZW50ID0geworICAg
ICAgICBrV0tQYWdlRmluZENsaWVudEN1cnJlbnRWZXJzaW9uLAorICAgICAgICBmaW5kQ29udHJv
bGxlciwgLy8gY2xpZW50SW5mbworICAgICAgICBkaWRGaW5kU3RyaW5nLAorICAgICAgICBkaWRG
YWlsVG9GaW5kU3RyaW5nLAorICAgICAgICBkaWRDb3VudFN0cmluZ01hdGNoZXMKKyAgICB9Owor
ICAgIFdLUGFnZVNldFBhZ2VGaW5kQ2xpZW50KHdrUGFnZSwgJndrRmluZENsaWVudCk7CisgICAg
ZmluZENvbnRyb2xsZXItPnByaXYtPndrUGFnZSA9IHdrUGFnZTsKK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2ZpbmRfY29udHJvbGxlcl9pbml0KFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29u
dHJvbGxlcikKK3sKKyAgICBXZWJLaXRGaW5kQ29udHJvbGxlclByaXZhdGUqIHByaXYgPSBHX1RZ
UEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoZmluZENvbnRyb2xsZXIsIFdFQktJVF9UWVBFX0ZJTkRf
Q09OVFJPTExFUiwgV2ViS2l0RmluZENvbnRyb2xsZXJQcml2YXRlKTsKKyAgICBmaW5kQ29udHJv
bGxlci0+cHJpdiA9IHByaXY7CisgICAgbmV3IChwcml2KSBXZWJLaXRGaW5kQ29udHJvbGxlclBy
aXZhdGUoKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0RmluZENvbnRyb2xsZXJHZXRQcm9wZXJ0
eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3Bl
YyogcGFyYW1TcGVjKQoreworICAgIFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxl
ciA9IFdFQktJVF9GSU5EX0NPTlRST0xMRVIob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcElk
KSB7CisgICAgY2FzZSBQUk9QX1NUUklORzoKKyAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZh
bHVlLCBmaW5kQ29udHJvbGxlci0+cHJpdi0+c3RyaW5nLmRhdGEoKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9PUFRJT05TOgorICAgICAgICBnX3ZhbHVlX3NldF9mbGFncyh2YWx1
ZSwgZmluZENvbnRyb2xsZXItPnByaXYtPmZpbmRPcHRpb25zKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX01BVENIX0NPVU5UOgorICAgICAgICBnX3ZhbHVlX3NldF91aW50KHZhbHVl
LCBmaW5kQ29udHJvbGxlci0+cHJpdi0+bWF0Y2hDb3VudCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9NQVhfTUFUQ0hfQ09VTlQ6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQodmFs
dWUsIGZpbmRDb250cm9sbGVyLT5wcml2LT5tYXhNYXRjaENvdW50KTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lE
KG9iamVjdCwgcHJvcElkLCBwYXJhbVNwZWMpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0RmluZENvbnRyb2xsZXJTZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJ
ZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAgIFdl
YktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxlciA9IFdFQktJVF9GSU5EX0NPTlRST0xM
RVIob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcElkKSB7CisgICAgY2FzZSBQUk9QX1NUUklO
RzoKKyAgICAgICAgZmluZENvbnRyb2xsZXItPnByaXYtPnN0cmluZyA9IGdfdmFsdWVfZ2V0X3N0
cmluZyh2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9PUFRJT05TOgorICAg
ICAgICBmaW5kQ29udHJvbGxlci0+cHJpdi0+ZmluZE9wdGlvbnMgPSBzdGF0aWNfY2FzdDxXZWJL
aXRGaW5kT3B0aW9ucz4oZ192YWx1ZV9nZXRfZmxhZ3ModmFsdWUpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX01BWF9NQVRDSF9DT1VOVDoKKyAgICAgICAgZmluZENvbnRyb2xsZXIt
PnByaXYtPm1heE1hdGNoQ291bnQgPSBnX3ZhbHVlX2dldF91aW50KHZhbHVlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BF
UlRZX0lEKG9iamVjdCwgcHJvcElkLCBwYXJhbVNwZWMpOworICAgIH0KK30KKworc3RhdGljIHZv
aWQgd2Via2l0RmluZENvbnRyb2xsZXJGaW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAg
V0VCS0lUX0ZJTkRfQ09OVFJPTExFUihvYmplY3QpLT5wcml2LT5+V2ViS2l0RmluZENvbnRyb2xs
ZXJQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2ZpbmRfY29udHJvbGxlcl9w
YXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
ZmluZF9jb250cm9sbGVyX2NsYXNzX2luaXQoV2ViS2l0RmluZENvbnRyb2xsZXJDbGFzcyogZmlu
ZENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ09iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xB
U1MoZmluZENsYXNzKTsKKworICAgIGdPYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0
RmluZENvbnRyb2xsZXJHZXRQcm9wZXJ0eTsKKyAgICBnT2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0
eSA9IHdlYmtpdEZpbmRDb250cm9sbGVyU2V0UHJvcGVydHk7CisgICAgZ09iamVjdENsYXNzLT5m
aW5hbGl6ZSA9IHdlYmtpdEZpbmRDb250cm9sbGVyRmluYWxpemU7CisKKyAgICBnX3R5cGVfY2xh
c3NfYWRkX3ByaXZhdGUoZmluZENsYXNzLCBzaXplb2YoV2ViS2l0RmluZENvbnRyb2xsZXJQcml2
YXRlKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRGaW5kQ29udHJvbGxlcjpzdHJpbmc6Cisg
ICAgICoKKyAgICAgKiBUaGUgdGV4dCB0byBzZWFyY2ggaW4gdGhlICNXZWJLaXRXZWJWaWV3Lgor
ICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ09iamVjdENsYXNz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9TVFJJTkcsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKCJzdHJp
bmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfKCJTZWFyY2ggU3RyaW5nIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRleHQgdG8gc2VhcmNoIGluIHRoZSB2aWV3Iiks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdEZp
bmRDb250cm9sbGVyOm9wdGlvbnM6CisgICAgICoKKyAgICAgKiBUaGUgb3B0aW9ucyB0byBiZSB1
c2VkIGluIHRoZSBzZWFyY2ggb3BlcmF0aW9uLgorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoZ09iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUFJPUF9PUFRJT05TLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ19wYXJhbV9zcGVjX2ZsYWdzKCJvcHRpb25zIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJTZWFyY2ggT3B0aW9ucyIpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8o
IlNlYXJjaCBvcHRpb25zIHRvIGJlIHVzZWQgaW4gdGhlIHNlYXJjaCBvcGVyYXRpb24iKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJL
SVRfVFlQRV9GSU5EX09QVElPTlMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEV1JJVEUpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdEZpbmRDb250cm9sbGVyOm1h
dGNoLWNvdW50OgorICAgICAqCisgICAgICogVGhlIG51bWJlciBvZiBtYXRjaGVzIGZvdW5kIGZv
ciB0aGUgZ2l2ZW4gdGV4dCBpbiB0aGUgI1dlYktpdFdlYlZpZXcuCisgICAgICovCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnT2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQUk9QX01BVENIX0NPVU5ULAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQoIm1hdGNoLWNvdW50IiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIk1h
dGNoZXMgY291bnQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF8oIlRoZSBudW1iZXIgb2YgbWF0Y2hlcyBmb3IgdGhlIGdpdmVuIHRleHQg
aW4gdGhlIHZpZXciKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDAsIEdfTUFYVUlOVCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihXRUJL
SVRfUEFSQU1fUkVBREFCTEUpKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRGaW5kQ29udHJv
bGxlcjptYXgtbWF0Y2gtY291bnQ6CisgICAgICoKKyAgICAgKiBUaGUgbWF4aW11bSBudW1iZXIg
b2YgbWF0Y2hlcyB0byByZXBvcnQgZm9yIGEgZ2l2ZW4gc2VhcmNoLgorICAgICAqLworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ09iamVjdENsYXNzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9NQVhfTUFUQ0hfQ09VTlQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfdWludCgibWF4LW1hdGNoLWNv
dW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF8oIk1heGltdW0gbWF0Y2hlcyBjb3VudCIpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIG1heGltdW0gbnVtYmVyIG9mIG1h
dGNoZXMgaW4gYSBnaXZlbiB0ZXh0IHRvIHJlcG9ydCIpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR19NQVhVSU5ULCAwLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURXUklURSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0RmluZENvbnRyb2xsZXI6
OmZvdW5kLXN0cmluZzoKKyAgICAgKiBAZmluZF9jb250cm9sbGVyOiB0aGUgI1dlYktpdEZpbmRD
b250cm9sbGVyCisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gYSBn
aXZlbiBzdHJpbmcgaXMgZm91bmQgaW4gdGhlIHdlYgorICAgICAqIHBhZ2UgdGV4dC4gSXQgd2ls
bCBiZSBpc3N1ZWQgKGlmIHRoZSB0ZXh0IGlzIGZvdW5kKQorICAgICAqIGFzeW5jaHJvbm91c2x5
IGFmdGVyIGEgY2FsbCB0byB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF90ZXh0KCksCisg
ICAgICogd2Via2l0X2ZpbmRfY29udHJvbGxlcl9uZXh0KCkgb3Igd2Via2l0X2ZpbmRfY29udHJv
bGxlcl9wcmV2aW91cygpLgorICAgICAqLworICAgIHNpZ25hbHNbRk9VTkRfU1RSSU5HXSA9Cisg
ICAgICAgIGdfc2lnbmFsX25ldygiZm91bmQtc3RyaW5nIiwKKyAgICAgICAgICAgICAgICAgICAg
IEdfVFlQRV9GUk9NX0NMQVNTKGdPYmplY3RDbGFzcyksCisgICAgICAgICAgICAgICAgICAgICBH
X1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChX
ZWJLaXRGaW5kQ29udHJvbGxlckNsYXNzLCBmb3VuZF9zdHJpbmcpLAorICAgICAgICAgICAgICAg
ICAgICAgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lE
X19WT0lELAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX05PTkUsIDApOworICAgIC8qKgor
ICAgICAqIFdlYktpdEZpbmRDb250cm9sbGVyOjpmYWlsZWQtdG8tZmluZC1zdHJpbmc6CisgICAg
ICogQGZpbmRfY29udHJvbGxlcjogdGhlICNXZWJLaXRGaW5kQ29udHJvbGxlcgorICAgICAqCisg
ICAgICogVGhpcyBzaWduYWwgaXMgZW1pdHRlZCB3aGVuIGEgc2VhcmNoIG9wZXJhdGlvbiBkb2Vz
IG5vdCBmaW5kCisgICAgICogYW55IHJlc3VsdCBmb3IgdGhlIGdpdmVuIHN0cmluZy4gSXQgd2ls
bCBiZSBpc3N1ZWQgKGlmIHRoZSB0ZXh0CisgICAgICogaXMgbm90IGZvdW5kKSBhc3luY2hyb25v
dXNseSBhZnRlciBhIGNhbGwgdG8KKyAgICAgKiB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJj
aF90ZXh0KCksIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfbmV4dCgpIG9yCisgICAgICogd2Via2l0
X2ZpbmRfY29udHJvbGxlcl9wcmV2aW91cygpLgorICAgICAqLworICAgIHNpZ25hbHNbRkFJTEVE
X1RPX0ZJTkRfU1RSSU5HXSA9CisgICAgICAgIGdfc2lnbmFsX25ldygiZmFpbGVkLXRvLWZpbmQt
c3RyaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGdPYmplY3RD
bGFzcyksCisgICAgICAgICAgICAgICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAg
ICAgICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRGaW5kQ29udHJvbGxlckNsYXNzLCBm
YWlsZWRfdG9fZmluZF9zdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgMCwgMCwKKyAgICAg
ICAgICAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19WT0lELAorICAgICAgICAg
ICAgICAgICAgICAgR19UWVBFX05PTkUsIDApOworCisgICAgLyoqCisgICAgICogV2ViS2l0Rmlu
ZENvbnRyb2xsZXI6OmNvdW50ZWQtbWF0Y2hlczoKKyAgICAgKiBAZmluZF9jb250cm9sbGVyOiB0
aGUgI1dlYktpdEZpbmRDb250cm9sbGVyCisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBpcyBl
bWl0dGVkIHRvIGluZm9ybSBhYm91dCB0aGUgbnVtYmVyIG9mIG1hdGNoZXMKKyAgICAgKiBmb3Vu
ZCBpbiB0aGUgI1dlYktpdFdlYlZpZXcgZm9yIHRoZSBnaXZlbiBzdHJpbmcuICBJdCB3aWxsIGJl
CisgICAgICogaXNzdWVkIGFzeW5jaHJvbm91c2x5IGFmdGVyIGEgY2FsbCB0bworICAgICAqIHdl
YmtpdF9maW5kX2NvbnRyb2xsZXJfY291bnRfbWF0Y2hlcygpLgorICAgICAqLworICAgIHNpZ25h
bHNbQ09VTlRFRF9NQVRDSEVTXSA9CisgICAgICAgIGdfc2lnbmFsX25ldygiY291bnRlZC1tYXRj
aGVzIiwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGdPYmplY3RDbGFz
cyksCisgICAgICAgICAgICAgICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAg
ICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRGaW5kQ29udHJvbGxlckNsYXNzLCBjb3Vu
dGVkX21hdGNoZXMpLAorICAgICAgICAgICAgICAgICAgICAgMCwgMCwKKyAgICAgICAgICAgICAg
ICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19WT0lELAorICAgICAgICAgICAgICAgICAg
ICAgR19UWVBFX05PTkUsIDApOworfQorCisvKioKKyAqIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJf
Z2V0X3NlYXJjaF9zdHJpbmc6CisgKiBAZmluZENvbnRyb2xsZXI6IHRoZSAjV2ViS2l0RmluZENv
bnRyb2xsZXIKKyAqCisgKiBHZXQgdGhlIHN0cmluZyB0byBsb29rIGZvci4gVGhpcyBzdHJpbmcg
aXMgc2V0IGJ5IHRoZQorICogI1dlYktpdFdlYlZpZXcgd2hlbiBhIGNsaWVudCBjYWxscyB3ZWJr
aXRfd2ViX3ZpZXdfc2VhcmNoKCkuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiB0
aGUgc3RyaW5nIHRvIGxvb2sgZm9yIGluIHRoZSAjV2ViS2l0V2ViVmlldy4KKyAqKi8KK2NvbnN0
IGNoYXIqIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X3NlYXJjaF9zdHJpbmcoV2ViS2l0Rmlu
ZENvbnRyb2xsZXIqIGZpbmRDb250cm9sbGVyKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9JU19GSU5EX0NPTlRST0xMRVIoZmluZENvbnRyb2xsZXIpLCAwKTsKKworICAgIHJl
dHVybiBmaW5kQ29udHJvbGxlci0+cHJpdi0+c3RyaW5nLmRhdGEoKTsKK30KKworLyoqCisgKiB3
ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9tYXRjaF9jb3VudDoKKyAqIEBmaW5kX2NvbnRyb2xs
ZXI6IHRoZSAjV2ViS2l0RmluZENvbnRyb2xsZXIKKyAqCisgKiBHZXQgdGhlIG51bWJlciBvZiBt
YXRjaGVzIGZvdW5kIGZvciB0aGUgdGV4dCBzZWFyY2hlZCBpbiB0aGUKKyAqICNXZWJLaXRXZWJW
aWV3LiBJZiB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgaXMgaGlnaGVyIHRoYW4gdGhlIG1heGltdW0K
KyAqIG51bWJlciBvZiBtYXRjaGVzIGFsbG93ZWQgKHRoZSBsYXN0IHBhcmFtZXRlciB0byB0aGUK
KyAqIHdlYmtpdF93ZWJfdmlld19zZWFyY2goKSBjYWxsKSB0aGlzIGZ1bmN0aW9uIHJldHVybnMg
R19NQVhVSU5ULgorICoKKyAqIFJldHVybnM6IHRoZSBudW1iZXIgb2YgbWF0Y2hlcyBmb3VuZCBv
ciBHX01BWFVJTlQgaWYgdGhlIG51bWJlciBvZgorICogbWF0Y2hlcyBleGNlZWRzIHRoZSBtYXhp
bXVtIG51bWJlciBvZiBtYXRjaGVzIGFsbG93ZWQuCisgKiovCitndWludCB3ZWJraXRfZmluZF9j
b250cm9sbGVyX2dldF9tYXRjaF9jb3VudChXZWJLaXRGaW5kQ29udHJvbGxlciogZmluZENvbnRy
b2xsZXIpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0ZJTkRfQ09OVFJP
TExFUihmaW5kQ29udHJvbGxlciksIDApOworCisgICAgcmV0dXJuIGZpbmRDb250cm9sbGVyLT5w
cml2LT5tYXRjaENvdW50OworfQorCisvKioKKyAqIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0
X29wdGlvbnM6CisgKiBAZmluZF9jb250cm9sbGVyOiB0aGUgI1dlYktpdEZpbmRDb250cm9sbGVy
CisgKgorICogR2V0IHRoZSBvcHRpb25zIHVzZWQgdG8gdHVuZSB1cCB0aGUgZmluZCBvcGVyYXRp
b24uCisgKgorICogUmV0dXJuczogdGhlIGZpbmQgb3B0aW9ucy4KKyAqKi8KK1dlYktpdEZpbmRP
cHRpb25zIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X29wdGlvbnMoV2ViS2l0RmluZENvbnRy
b2xsZXIqIGZpbmRDb250cm9sbGVyKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9JU19GSU5EX0NPTlRST0xMRVIoZmluZENvbnRyb2xsZXIpLCBXRUJLSVRfRklORF9PUFRJT05T
X05PTkUpOworCisgICAgcmV0dXJuIGZpbmRDb250cm9sbGVyLT5wcml2LT5maW5kT3B0aW9uczsK
K30KKworLyoqCisgKiB3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9tYXhfbWF0Y2hfY291bnQ6
CisgKiBAZmluZF9jb250cm9sbGVyOiB0aGUgI1dlYktpdEZpbmRDb250cm9sbGVyCisgKgorICog
R2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBtYXRjaGVzIHRvIHJlcG9ydCBkdXJpbmcgYSB0ZXh0
CisgKiBsb29rdXAuIFRoaXMgbnVtYmVyIGlzIHNldCBieSB0aGUgI1dlYktpdFdlYlZpZXcgd2hl
biBhIGNsaWVudAorICogY2FsbHMgd2Via2l0X3dlYl92aWV3X3NlYXJjaCgpLgorICoKKyAqIFJl
dHVybnM6IHRoZSBtYXhpbXVtIG51bWJlciBvZiBtYXRjaGVzIHRvIHJlcG9ydC4KKyAqKi8KK2d1
aW50IHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X21heF9tYXRjaF9jb3VudChXZWJLaXRGaW5k
Q29udHJvbGxlciogZmluZENvbnRyb2xsZXIpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0lTX0ZJTkRfQ09OVFJPTExFUihmaW5kQ29udHJvbGxlciksIDApOworCisgICAgcmV0
dXJuIGZpbmRDb250cm9sbGVyLT5wcml2LT5tYXhNYXRjaENvdW50OworfQorCisvKioKKyAqIHdl
YmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX3N0cmluZzoKKyAqIEBmaW5kX2NvbnRyb2xsZXI6
IHRoZSAjV2ViS2l0RmluZENvbnRyb2xsZXIKKyAqIEBzZWFyY2hTdHJpbmc6IHRoZSBzdHJpbmcg
dG8gbG9vayBmb3IKKyAqIEBmaW5kT3B0aW9uczogdGhlICNXZWJLaXRGaW5kT3B0aW9ucyB1c2Vk
IGluIHRoZSBzZWFyY2gKKyAqIEBtYXhNYXRjaENvdW50OiB0aGUgbWF4aW11bSBudW1iZXIgb2Yg
bWF0Y2hlcyBhbGxvd2VkIGluIHRoZSBzZWFyY2gKKyAqCisgKiBMb29rIGZvciBAc2VhcmNoU3Ry
aW5nIGluIHRoZSAjV2ViS2l0V2ViVmlldyBhc3NvY2lhdGVkIHdpdGggdGhpcworICogI1dlYktp
dEZpbmRDb250cm9sbGVyLiBUaGUgb3V0Y29tZSBvZiB0aGUgc2VhcmNoIHdpbGwgYmUKKyAqIGFz
eW5jaHJvbm91c2x5IHByb3ZpZGVkIGJ5IHRoZSAiV2ViS2l0RmluZENvbnRyb2xsZXI6OmZvdW5k
LXN0cmluZyIKKyAqIGFuZCAiV2ViS2l0RmluZENvbnRyb2xsZXI6OmZhaWxlZC10by1maW5kLXN0
cmluZyIuCisgKgorICogVG8gbG9vayBmb3IgdGhlIG5leHQgb3IgcHJldmlvdXMgb2NjdXJyZW5j
ZXMgb2YgdGhlIHNhbWUgc3RyaW5nCisgKiB3aXRoIHRoZSBzYW1lIGZpbmQgb3B0aW9ucyB1c2Ug
d2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfbmV4dCgpCisgKiBhbmQvb3Igd2Via2l0X2Zp
bmRfb3B0aW9uc19zZWFyY2hfcHJldmlvdXMoKS4gVGhlCisgKiAjV2ViS2l0RmluZENvbnRyb2xs
ZXIgd2lsbCB1c2UgdGhlIHNhbWUgc3RyaW5nIGFuZCBvcHRpb25zIGZvciB0aGUKKyAqIGZvbGxv
d2luZyBzZWFyY2hlcyB1bmxlc3MgdGhleSBhcmUgbW9kaWZpZWQgYnkgYW5vdGhlciBjYWxsIHRv
IHRoaXMKKyAqIG1ldGhvZC4KKyAqCisgKiBOb3RlIHRoYXQgaWYgdGhlIG51bWJlciBvZiBtYXRj
aGVzIGlzIGhpZ2hlciB0aGFuIEBtYXhNYXRjaENvdW50CisgKiB0aGVuIHdlYmtpdF9maW5kX3N0
cmluZ19nZXRfbWF0Y2hfY291bnQoKSB3aWxsIHJldHVybiBHX01BWFVJTlQKKyAqIGluc3RlYWQg
b2YgdGhlIGFjdHVhbCBudW1iZXIgb2YgbWF0Y2hlcy4KKyAqKi8KK3ZvaWQgd2Via2l0X2ZpbmRf
Y29udHJvbGxlcl9zZWFyY2hfc3RyaW5nKFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJv
bGxlciwgY29uc3QgZ2NoYXIqIHNlYXJjaFN0cmluZywgV2ViS2l0RmluZE9wdGlvbnMgZmluZE9w
dGlvbnMsIGd1aW50IG1heE1hdGNoQ291bnQpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfSVNfRklORF9DT05UUk9MTEVSKGZpbmRDb250cm9sbGVyKSk7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChzZWFyY2hTdHJpbmcpOworCisgICAgZ19vYmplY3Rfc2V0KGZpbmRDb250cm9sbGVyLCAi
c3RyaW5nIiwgc2VhcmNoU3RyaW5nLCAib3B0aW9ucyIsIGZpbmRPcHRpb25zLCAibWF4LW1hdGNo
LWNvdW50IiwgbWF4TWF0Y2hDb3VudCwgTlVMTCk7CisKKyAgICBXS0ZpbmRPcHRpb25zIHdrRmlu
ZE9wdGlvbnMgPSBzdGF0aWNfY2FzdDxXS0ZpbmRPcHRpb25zPihmaW5kQ29udHJvbGxlci0+cHJp
di0+ZmluZE9wdGlvbnMpOworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a1NlYXJjaFRl
eHQoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZmluZENvbnRyb2xsZXIt
PnByaXYtPnN0cmluZy5kYXRhKCkpKTsKKyAgICBXS1BhZ2VGaW5kU3RyaW5nKGZpbmRDb250cm9s
bGVyLT5wcml2LT53a1BhZ2UsIHdrU2VhcmNoVGV4dC5nZXQoKSwgd2tGaW5kT3B0aW9ucywgZmlu
ZENvbnRyb2xsZXItPnByaXYtPm1heE1hdGNoQ291bnQpOworfQorCisvKioKKyAqIHdlYmtpdF9m
aW5kX2NvbnRyb2xsZXJfbmV4dDoKKyAqIEBmaW5kX2NvbnRyb2xsZXI6IHRoZSAjV2ViS2l0Rmlu
ZENvbnRyb2xsZXIKKyAqCisgKiBMb29rIGZvciB0aGUgbmV4dCBvY2N1cnJlbmNlIG9mIHRoZSB0
ZXh0IHBhc3NlZCB0bworICogd2Via2l0X3dlYl92aWV3X3NlYXJjaCgpIGluIHRoZSAjV2ViS2l0
V2ViVmlldy4gQ2FsbGVycyBtdXN0IGJlCisgKiBjb25uZWN0ZWQgdG8gImZvdW5kLXN0cmluZyIg
YW5kL29yICJmYWlsZWQtdG8tZmluZC1zdHJpbmciIHNpZ25hbHMKKyAqIHRvIGdldCB0aGUgcmVz
dWx0IG9mIHRoZSBzZWFyY2guCisgKiovCit2b2lkIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfbmV4
dChXZWJLaXRGaW5kQ29udHJvbGxlciogZmluZENvbnRyb2xsZXIpCit7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfSVNfRklORF9DT05UUk9MTEVSKGZpbmRDb250cm9sbGVyKSk7CisKKyAg
ICB1bnNpZ25lZCBuZXdPcHRpb25zID0gZmluZENvbnRyb2xsZXItPnByaXYtPmZpbmRPcHRpb25z
ICYgfldFQktJVF9GSU5EX09QVElPTlNfQkFDS1dBUkRTOworICAgIGZpbmRDb250cm9sbGVyLT5w
cml2LT5maW5kT3B0aW9ucyA9IHN0YXRpY19jYXN0PFdlYktpdEZpbmRPcHRpb25zPihuZXdPcHRp
b25zKTsKKyAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9zdHJpbmcoZmluZENvbnRy
b2xsZXIsIGZpbmRDb250cm9sbGVyLT5wcml2LT5zdHJpbmcuZGF0YSgpLCBmaW5kQ29udHJvbGxl
ci0+cHJpdi0+ZmluZE9wdGlvbnMsIGZpbmRDb250cm9sbGVyLT5wcml2LT5tYXhNYXRjaENvdW50
KTsKK30KKworLyoqCisgKiB3ZWJraXRfZmluZF9jb250cm9sbGVyX3ByZXZpb3VzOgorICogQGZp
bmRfY29udHJvbGxlcjogdGhlICNXZWJLaXRGaW5kQ29udHJvbGxlcgorICoKKyAqIExvb2sgZm9y
IHRoZSBwcmV2aW91cyBvY2N1cnJlbmNlIG9mIHRoZSB0ZXh0IHBhc3NlZCB0bworICogd2Via2l0
X3dlYl92aWV3X3NlYXJjaCgpIGluIHRoZSAjV2ViS2l0V2ViVmlldy4gQ2FsbGVycyBtdXN0IGJl
CisgKiBjb25uZWN0ZWQgdG8gImZvdW5kLXN0cmluZyIgYW5kL29yICJmYWlsZWQtdG8tZmluZC1z
dHJpbmciIHNpZ25hbHMKKyAqIHRvIGdldCB0aGUgcmVzdWx0IG9mIHRoZSBzZWFyY2guCisgKiov
Cit2b2lkIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfcHJldmlvdXMoV2ViS2l0RmluZENvbnRyb2xs
ZXIqIGZpbmRDb250cm9sbGVyKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0ZJ
TkRfQ09OVFJPTExFUihmaW5kQ29udHJvbGxlcikpOworCisgICAgdW5zaWduZWQgbmV3T3B0aW9u
cyA9IGZpbmRDb250cm9sbGVyLT5wcml2LT5maW5kT3B0aW9ucyB8IFdFQktJVF9GSU5EX09QVElP
TlNfQkFDS1dBUkRTOworICAgIGZpbmRDb250cm9sbGVyLT5wcml2LT5maW5kT3B0aW9ucyA9IHN0
YXRpY19jYXN0PFdlYktpdEZpbmRPcHRpb25zPihuZXdPcHRpb25zKTsKKyAgICB3ZWJraXRfZmlu
ZF9jb250cm9sbGVyX3NlYXJjaF9zdHJpbmcoZmluZENvbnRyb2xsZXIsIGZpbmRDb250cm9sbGVy
LT5wcml2LT5zdHJpbmcuZGF0YSgpLCBmaW5kQ29udHJvbGxlci0+cHJpdi0+ZmluZE9wdGlvbnMs
IGZpbmRDb250cm9sbGVyLT5wcml2LT5tYXhNYXRjaENvdW50KTsKK30KKworLyoqCisgKiB3ZWJr
aXRfZmluZF9jb250cm9sbGVyX2NvdW50X21hdGNoZXM6CisgKiBAZmluZF9jb250cm9sbGVyOiB0
aGUgI1dlYktpdEZpbmRDb250cm9sbGVyCisgKiBAc2VhcmNoU3RyaW5nOiB0aGUgc3RyaW5nIHRv
IGxvb2sgZm9yCisgKiBAZmluZE9wdGlvbnM6IHRoZSAjV2ViS2l0RmluZE9wdGlvbnMgdXNlZCBp
biB0aGUgc2VhcmNoCisgKiBAbWF4TWF0Y2hDb3VudDogdGhlIG1heGltdW0gbnVtYmVyIG9mIG1h
dGNoZXMgYWxsb3dlZCBpbiB0aGUgc2VhcmNoCisgKgorICogQ291bnQgdGhlIG51bWJlciBvZiBt
YXRjaGVzIGZvciBAc2VhcmNoU3RyaW5nIGZvdW5kIGluIHRoZQorICogI1dlYktpdFdlYlZpZXcg
d2l0aCB0aGUgcHJvdmlkZWQgQGZpbmRPcHRpb25zLiBUaGUgbnVtYmVyIG9mCisgKiBtYXRjaGVz
IHdpbGwgYmUgYXZhaWxhYmxlIHZpYQorICogd2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfbWF0
Y2hfY291bnQoKSBhZnRlciByZWNlaXZpbmcgdGhlCisgKiAiV2ViS2l0RmluZENvbnRyb2xsZXI6
OmNvdW50ZWQtbWF0Y2hlcyIgc2lnbmFsLgorICoqLwordm9pZCB3ZWJraXRfZmluZF9jb250cm9s
bGVyX2NvdW50X21hdGNoZXMoV2ViS2l0RmluZENvbnRyb2xsZXIqIGZpbmRDb250cm9sbGVyLCBj
b25zdCBnY2hhciogc2VhcmNoU3RyaW5nLCBXZWJLaXRGaW5kT3B0aW9ucyBmaW5kT3B0aW9ucywg
Z3VpbnQgbWF4TWF0Y2hDb3VudCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19G
SU5EX0NPTlRST0xMRVIoZmluZENvbnRyb2xsZXIpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHNl
YXJjaFN0cmluZyk7CisKKyAgICBnX29iamVjdF9zZXQoZmluZENvbnRyb2xsZXIsICJzdHJpbmci
LCBzZWFyY2hTdHJpbmcsICJvcHRpb25zIiwgZmluZE9wdGlvbnMsICJtYXgtbWF0Y2gtY291bnQi
LCBtYXhNYXRjaENvdW50LCBOVUxMKTsKKworICAgIFdLRmluZE9wdGlvbnMgd2tGaW5kT3B0aW9u
cyA9IHN0YXRpY19jYXN0PFdLRmluZE9wdGlvbnM+KGZpbmRDb250cm9sbGVyLT5wcml2LT5maW5k
T3B0aW9ucyk7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrU2VhcmNoVGV4dChBZG9w
dFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhmaW5kQ29udHJvbGxlci0+cHJpdi0+
c3RyaW5nLmRhdGEoKSkpOworICAgIFdLUGFnZUNvdW50U3RyaW5nTWF0Y2hlcyhmaW5kQ29udHJv
bGxlci0+cHJpdi0+d2tQYWdlLCB3a1NlYXJjaFRleHQuZ2V0KCksIHdrRmluZE9wdGlvbnMsIGZp
bmRDb250cm9sbGVyLT5wcml2LT5tYXhNYXRjaENvdW50KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbmRDb250cm9sbGVyLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaW5kQ29udHJvbGxlci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjcxM2EzZGFiZDhhODE3NmVlZTc0ZjcwMzY5OTUyYTdjMjY4YWRlYTcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaW5kQ29u
dHJvbGxlci5oCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEln
YWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVQyX0hfSU5TSURFX18pICYmICFkZWZpbmVk
KFdFQktJVDJfQ09NUElMQVRJT04pCisjZXJyb3IgIk9ubHkgPHdlYmtpdDIvd2Via2l0Mi5oPiBj
YW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RmluZENv
bnRyb2xsZXJfaAorI2RlZmluZSBXZWJLaXRGaW5kQ29udHJvbGxlcl9oCisKKyNpbmNsdWRlIDxn
bGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgorCitHX0JF
R0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfRklORF9DT05UUk9MTEVSICAgICAgICAg
ICAgKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0ZJ
TkRfQ09OVFJPTExFUihvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNU
KChvYmopLCBXRUJLSVRfVFlQRV9GSU5EX0NPTlRST0xMRVIsIFdlYktpdEZpbmRDb250cm9sbGVy
KSkKKyNkZWZpbmUgV0VCS0lUX0ZJTkRfQ09OVFJPTExFUl9DTEFTUyhrbGFzcykgICAgKEdfVFlQ
RV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9GSU5EX0NPTlRST0xMRVIs
IFdlYktpdEZpbmRDb250cm9sbGVyQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfRklORF9DT05U
Uk9MTEVSKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdF
QktJVF9UWVBFX0ZJTkRfQ09OVFJPTExFUikpCisjZGVmaW5lIFdFQktJVF9JU19GSU5EX0NPTlRS
T0xMRVJfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VC
S0lUX1RZUEVfRklORF9DT05UUk9MTEVSKSkKKyNkZWZpbmUgV0VCS0lUX0ZJTkRfQ09OVFJPTExF
Ul9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJL
SVRfVFlQRV9GSU5EX0NPTlRST0xMRVIsIFdlYktpdEZpbmRDb250cm9sbGVyQ2xhc3MpKQorCit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0RmluZENvbnRyb2xsZXJQcml2YXRlIFdlYktpdEZpbmRDb250
cm9sbGVyUHJpdmF0ZTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRGaW5kQ29udHJvbGxlciAgICAg
ICAgV2ViS2l0RmluZENvbnRyb2xsZXI7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RmluZENvbnRy
b2xsZXJDbGFzcyAgIFdlYktpdEZpbmRDb250cm9sbGVyQ2xhc3M7CisKKy8qKgorICogV2ViS2l0
RmluZE9wdGlvbnM6CisgKiBAV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FOiBubyBzZWFyY2ggZmxh
Z3MKKyAqIEBXRUJLSVRfRklORF9PUFRJT05TX0NBU0VfSU5TRU5TSVRJVkU6IGNhc2UgaW5zZW5z
aXRpdmUgc2VhcmNoCisgKiBAV0VCS0lUX0FUX1dPUkRfU1RBUlRTOiBzZWFyY2ggb25seSBhdCB0
aGUgYmVnaW5pbmcgb2YgdGhlIHdvcmRzCisgKiBAV0VCS0lUX0ZJTkRfT1BUSU9OU19UUkVBVF9N
RURJQUxfQ0FQSVRBTF9BU19XT1JEX1NUQVJUOiB0cmVhdCBjYXBpdGFsIGxldHRlcnMgaW4gdGhl
IG1pZGRsZSBvZiB3b3JkcyBhcyB3b3JkIHN0YXJ0CisgKiBAV0VCS0lUX0ZJTkRfT1BUSU9OU19C
QUNLV0FSRFM6IHNlYXJjaCBiYWNrd2FyZHMKKyAqIEBXRUJLSVRfRklORF9PUFRJT05TX1dSQVBf
QVJPVU5EOiBpZiBub3QgcHJlc2VudCBzZWFyY2ggd2lsbCBzdG9wIGF0IHRoZSBlbmQgb2YgdGhl
IGRvY3VtZW50CisgKiBAV0VCS0lUX0ZJTkRfT1BUSU9OU19TSE9XX09WRVJMQVk6IHNob3cgYW4g
b3ZlcmxheSBmb3IgZWFjaCBtYXRjaAorICogQFdFQktJVF9GSU5EX09QVElPTlNfU0hPV19GSU5E
X0lORElDQVRPUjogc2hvdyB0aGUgZmluZCBpbmRpY2F0b3IKKyAqKi8KK3R5cGVkZWYgZW51bSB7
CisgIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwKKworICBXRUJLSVRfRklORF9PUFRJT05TX0NB
U0VfSU5TRU5TSVRJVkUgPSAgICAgICAgICAgICAgICAgICAxIDw8IDAsCisgIFdFQktJVF9GSU5E
X09QVElPTlNfQVRfV09SRF9TVEFSVFMgPSAgICAgICAgICAgICAgICAgICAgIDEgPDwgMSwKKyAg
V0VCS0lUX0ZJTkRfT1BUSU9OU19UUkVBVF9NRURJQUxfQ0FQSVRBTF9BU19XT1JEX1NUQVJUID0g
MSA8PCAyLAorICBXRUJLSVRfRklORF9PUFRJT05TX0JBQ0tXQVJEUyA9ICAgICAgICAgICAgICAg
ICAgICAgICAgICAxIDw8IDMsCisgIFdFQktJVF9GSU5EX09QVElPTlNfV1JBUF9BUk9VTkQgPSAg
ICAgICAgICAgICAgICAgICAgICAgIDEgPDwgNCwKKyAgV0VCS0lUX0ZJTkRfT1BUSU9OU19TSE9X
X09WRVJMQVkgPSAgICAgICAgICAgICAgICAgICAgICAgMSA8PCA1LAorICBXRUJLSVRfRklORF9P
UFRJT05TX1NIT1dfRklORF9JTkRJQ0FUT1IgPSAgICAgICAgICAgICAgICAxIDw8IDYKK30gV2Vi
S2l0RmluZE9wdGlvbnM7CisKK3N0cnVjdCBfV2ViS2l0RmluZENvbnRyb2xsZXIgeworICAgIEdP
YmplY3QgcGFyZW50OworCisgIC8qPCBwcml2YXRlID4qLworICBXZWJLaXRGaW5kQ29udHJvbGxl
clByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdEZpbmRDb250cm9sbGVyQ2xhc3Mg
eworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgICAvKiBzaWduYWxzICovCisg
ICAgdm9pZCAoKiBmb3VuZF9zdHJpbmcpICAgICAgICAgICAgIChXZWJLaXRGaW5kQ29udHJvbGxl
ciAgICAqZmluZF9jb250cm9sbGVyKTsKKyAgICB2b2lkICgqIGZhaWxlZF90b19maW5kX3N0cmlu
ZykgICAgKFdlYktpdEZpbmRDb250cm9sbGVyICAgICpmaW5kX2NvbnRyb2xsZXIpOworICAgIHZv
aWQgKCogY291bnRlZF9tYXRjaGVzKSAgICAgICAgICAoV2ViS2l0RmluZENvbnRyb2xsZXIgICAg
KmZpbmRfY29udHJvbGxlcik7CisKKyAgLyogUGFkZGluZyBmb3IgZnV0dXJlIGV4cGFuc2lvbiAq
LworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMCkgICAgICAgICAodm9pZCk7CisgICAgdm9p
ZCAoKl93ZWJraXRfcmVzZXJ2ZWQxKSAgICAgICAgICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtp
dF9yZXNlcnZlZDIpICAgICAgICAgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVk
MykgICAgICAgICAodm9pZCk7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZmluZF9j
b250cm9sbGVyX2dldF90eXBlICAgICAgICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX3N0cmluZyAgICAgICAoV2ViS2l0RmluZENv
bnRyb2xsZXIgKmZpbmRfY29udHJvbGxlciwKKwkJCQkJICAgIGNvbnN0IGdjaGFyICAgICAgICAg
ICpzZWFyY2hfc3RyaW5nLAorCQkJCQkgICAgV2ViS2l0RmluZE9wdGlvbnMgICAgIGZpbmRfb3B0
aW9ucywKKwkJCQkJICAgIGd1aW50ICAgICAgICAgICAgICAgICBtYXhfbWF0Y2hfY291bnQpOwor
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfY291bnRfbWF0Y2hlcyAg
ICAgICAoV2ViS2l0RmluZENvbnRyb2xsZXIgKmZpbmRfY29udHJvbGxlciwKKwkJCQkJICAgIGNv
bnN0IGdjaGFyICAgICAgICAgICpzZWFyY2hfc3RyaW5nLAorCQkJCQkgICAgV2ViS2l0RmluZE9w
dGlvbnMgICAgIGZpbmRfb3B0aW9ucywKKwkJCQkJICAgIGd1aW50ICAgICAgICAgICAgICAgICBt
YXhfbWF0Y2hfY291bnQpOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyKgord2Via2l0X2ZpbmRf
Y29udHJvbGxlcl9nZXRfc2VhcmNoX3N0cmluZyAgIChXZWJLaXRGaW5kQ29udHJvbGxlciAqZmlu
ZF9jb250cm9sbGVyKTsKKworV0VCS0lUX0FQSSBndWludAord2Via2l0X2ZpbmRfY29udHJvbGxl
cl9nZXRfbWF0Y2hfY291bnQgICAgIChXZWJLaXRGaW5kQ29udHJvbGxlciAqZmluZF9jb250cm9s
bGVyKTsKKworV0VCS0lUX0FQSSBXZWJLaXRGaW5kT3B0aW9ucword2Via2l0X2ZpbmRfY29udHJv
bGxlcl9nZXRfb3B0aW9ucyAgICAgICAgIChXZWJLaXRGaW5kQ29udHJvbGxlciAqZmluZF9jb250
cm9sbGVyKTsKKworV0VCS0lUX0FQSSBndWludAord2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRf
bWF4X21hdGNoX2NvdW50IChXZWJLaXRGaW5kQ29udHJvbGxlciAqZmluZF9jb250cm9sbGVyKTsK
KworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZmluZF9jb250cm9sbGVyX3N0YXJ0ICAgICAgICAg
ICAgICAgKFdlYktpdEZpbmRDb250cm9sbGVyICpmaW5kX2NvbnRyb2xsZXIpOworCitXRUJLSVRf
QVBJIHZvaWQKK3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfbmV4dCAgICAgICAgICAgICAgICAoV2Vi
S2l0RmluZENvbnRyb2xsZXIgKmZpbmRfY29udHJvbGxlcik7CisKK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2ZpbmRfY29udHJvbGxlcl9wcmV2aW91cyAgICAgICAgICAgIChXZWJLaXRGaW5kQ29u
dHJvbGxlciAqZmluZF9jb250cm9sbGVyKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaW5kQ29udHJv
bGxlclByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZp
bmRDb250cm9sbGVyUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ3YWQyYzQyZmM1ZDQxMDBiYTk3ZGQy
NTZjOGU4MDllZGZhODI0OTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRGaW5kQ29udHJvbGxlclByaXZhdGUuaApAQCAtMCwwICsxLDI4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktp
dEZpbmRDb250cm9sbGVyUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdEZpbmRDb250cm9sbGVyUHJp
dmF0ZV9oCisKKyNpbmNsdWRlICJXZWJLaXRGaW5kQ29udHJvbGxlci5oIgorI2luY2x1ZGUgPFdl
YktpdDIvV2ViS2l0Mi5oPgorCit2b2lkIHdlYmtpdEZpbmRBdHRhY2hGaW5kQ2xpZW50VG9QYWdl
KFdlYktpdEZpbmRDb250cm9sbGVyKiwgV0tQYWdlUmVmKTsKKworI2VuZGlmIC8vIFdlYktpdEZp
bmRDb250cm9sbGVyUHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRQcml2YXRlLmgKaW5kZXggNDIzYzQ2NGIwNzM5YmFmZWMyMGNiNGMyYTRlZjRm
ZDBhMjEyZDM4ZC4uYTVkZjJkNjc3NzM3Njk3MmIyZjIxMjUyZDFiMTAzNzkzZDk3NDdjNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaApA
QCAtMzgsNiArMzgsOSBAQCBHX0JFR0lOX0RFQ0xTCiAjZGVmaW5lIENPTVBJTEVfQVNTRVJUX01B
VENISU5HX0VOVU0od2Via2l0TmFtZSwgd2ViY29yZU5hbWUpIFwKICAgICAgICAgQ09NUElMRV9B
U1NFUlQoaW50KHdlYmtpdE5hbWUpID09IGludChXZWJDb3JlOjp3ZWJjb3JlTmFtZSksIG1pc21h
dGNoaW5nRW51bXMpCiAKKyNkZWZpbmUgQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfQVBJX0VOVU0o
YXBpTmFtZSwgd2Via2l0TmFtZSkgXAorICAgICAgICBDT01QSUxFX0FTU0VSVChpbnQoYXBpTmFt
ZSkgPT0gaW50KHdlYmtpdE5hbWUpLCBtaXNtYXRjaGluZ0VudW1zKQorCiBHX0VORF9ERUNMUwog
CiAjZW5kaWYgLy8gV2ViS2l0UHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCmluZGV4IGZkMmJiNTE5MDllMDU3OWZiMzc1
YzUwNWRmYzZlZDY1M2YyOTIwNzcuLjI5NjZkZjQ1MjRjNWIwODA4ZWM0YzYwOGFmOGQyZmIyZjJh
MmMwOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlZpZXcuY3BwCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiV2ViS2l0QmFja0Zvcndh
cmRMaXN0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdEVudW1UeXBlcy5oIgogI2luY2x1ZGUg
IldlYktpdEVycm9yLmgiCisjaW5jbHVkZSAiV2ViS2l0RmluZENvbnRyb2xsZXJQcml2YXRlLmgi
CiAjaW5jbHVkZSAiV2ViS2l0TWFyc2hhbC5oIgogI2luY2x1ZGUgIldlYktpdFNldHRpbmdzUHJp
dmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFVJQ2xpZW50LmgiCkBAIC04NCw2ICs4NSw3IEBAIHN0
cnVjdCBfV2ViS2l0V2ViVmlld1ByaXZhdGUgewogICAgIEdSZWZQdHI8V2ViS2l0QmFja0Zvcndh
cmRMaXN0PiBiYWNrRm9yd2FyZExpc3Q7CiAgICAgR1JlZlB0cjxXZWJLaXRTZXR0aW5ncz4gc2V0
dGluZ3M7CiAgICAgR1JlZlB0cjxXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzPiB3aW5kb3dQcm9wZXJ0
aWVzOworICAgIEdSZWZQdHI8V2ViS2l0RmluZENvbnRyb2xsZXI+IGZpbmRDb250cm9sbGVyOwog
fTsKIAogc3RhdGljIGd1aW50IHNpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OwpAQCAtMjM0
LDYgKzIzNiw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19pbml0KFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcpCiAgICAgbmV3IChwcml2KSBXZWJLaXRXZWJWaWV3UHJpdmF0ZSgpOwogCiAg
ICAgd2ViVmlldy0+cHJpdi0+d2luZG93UHJvcGVydGllcyA9IGFkb3B0R1JlZih3ZWJraXRXaW5k
b3dQcm9wZXJ0aWVzQ3JlYXRlKCkpOworICAgIHdlYlZpZXctPnByaXYtPmZpbmRDb250cm9sbGVy
ID0gMDsKIH0KIAogc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdBY2N1bXVsYXRvck9iamVj
dEhhbmRsZWQoR1NpZ25hbEludm9jYXRpb25IaW50KiwgR1ZhbHVlKiByZXR1cm5WYWx1ZSwgY29u
c3QgR1ZhbHVlKiBoYW5kbGVyUmV0dXJuLCBncG9pbnRlcikKQEAgLTEyMDUsMyArMTIwOCwyOCBA
QCBnZG91YmxlIHdlYmtpdF93ZWJfdmlld19nZXRfem9vbV9sZXZlbChXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3KQogICAgIFdLUGFnZVJlZiB3a1BhZ2UgPSB0b0FQSSh3ZWJraXRXZWJWaWV3QmFzZUdl
dFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2ViVmlldykpKTsKICAgICByZXR1cm4gV0tQYWdl
R2V0UGFnZVpvb21GYWN0b3Iod2tQYWdlKTsKIH0KKworLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X2ZpbmRfY29udHJvbGxlcjoKKyAqIEB3ZWJWaWV3OiB0aGUgI1dlYktpdFdlYlZpZXcKKyAq
CisgKiBHZXRzIHRoZSAjV2ViS2l0RmluZENvbnRyb2xsZXIgdGhhdCB3aWxsIGFsbG93IHRoZSBj
YWxsZXIgdG8gcXVlcnkKKyAqIHRoZSAjV2ViS2l0V2ViVmlldyBmb3IgdGhlIHRleHQgdG8gbG9v
ayBmb3IuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiB0aGUgI1dlYktpdEZpbmRD
b250cm9sbGVyIGFzc29jaWF0ZWQgdG8KKyAqIHRoaXMgcGFydGljdWxhciAjV2ViS2l0V2ViVmll
dy4KKyAqKi8KK1dlYktpdEZpbmRDb250cm9sbGVyKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ZpbmRf
Y29udHJvbGxlcihXZWJLaXRXZWJWaWV3ICp3ZWJWaWV3KQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwgMCk7CisKKyAgICBpZiAoIXdlYlZp
ZXctPnByaXYtPmZpbmRDb250cm9sbGVyKSB7CisgICAgICAgIFdlYktpdFdlYlZpZXdCYXNlKiB3
ZWJWaWV3QmFzZSA9IFdFQktJVF9XRUJfVklFV19CQVNFKHdlYlZpZXcpOworICAgICAgICBXZWJQ
YWdlUHJveHkqIHBhZ2UgPSB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2Uod2ViVmlld0Jhc2UpOwor
CisgICAgICAgIHdlYlZpZXctPnByaXYtPmZpbmRDb250cm9sbGVyID0gV0VCS0lUX0ZJTkRfQ09O
VFJPTExFUihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRklORF9DT05UUk9MTEVSLCBOVUxMKSk7
CisgICAgICAgIHdlYmtpdEZpbmRBdHRhY2hGaW5kQ2xpZW50VG9QYWdlKHdlYlZpZXctPnByaXYt
PmZpbmRDb250cm9sbGVyLmdldCgpLCB0b0FQSShwYWdlKSk7CisgICAgfQorCisgICAgcmV0dXJu
IHdlYlZpZXctPnByaXYtPmZpbmRDb250cm9sbGVyLmdldCgpOworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCmluZGV4IGEyNWM0MzhkZDkw
MTkzNTQwYjA1NWZmNmM2NzRmYTdhZDM2N2VmODEuLjZkMjRkZWQwMjEyYTJmZmJjMmUwZjYwODk3
MjQ0ZjlmZGMzMWYwMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3LmgKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgPHdlYmtpdDIv
V2ViS2l0QmFja0ZvcndhcmRMaXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVz
Lmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRGaW5kQ29udHJvbGxlci5oPgogI2luY2x1ZGUg
PHdlYmtpdDIvV2ViS2l0V2ViQ29udGV4dC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0U2V0
dGluZ3MuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFVSSVJlcXVlc3QuaD4KQEAgLTIwNyw2
ICsyMDgsOSBAQCB3ZWJraXRfd2ViX3ZpZXdfc2V0X3pvb21fbGV2ZWwgICAgICAgICAgICAgICAo
V2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZQogV0VCS0lUX0FQSSBnZG91YmxlCiB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X3pvb21fbGV2ZWwgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmll
dyAgICAgICAgICAgICAqd2ViX3ZpZXcpOwogCitXRUJLSVRfQVBJIFdlYktpdEZpbmRDb250cm9s
bGVyICoKK3dlYmtpdF93ZWJfdmlld19nZXRfZmluZF9jb250cm9sbGVyICAgICAgICAgIChXZWJL
aXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJr
aXQyZ3RrLWRvY3Muc2dtbCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mv
d2Via2l0Mmd0ay1kb2NzLnNnbWwKaW5kZXggYzUxMzk1OWMyNmNlMDQ0OGQ5OTJkMDZlZjU3ODg2
YWE2NjY0YmYzMC4uZGE1ZTdjZmYzNmVhZDYzYjMwYzE4MjJhNzdlYzM0YmI5MDUxNmYxNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3Rr
LWRvY3Muc2dtbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dl
YmtpdDJndGstZG9jcy5zZ21sCkBAIC0yMSw2ICsyMSw3IEBACiAgICAgPHhpOmluY2x1ZGUgaHJl
Zj0ieG1sL1dlYktpdFVSSVJlc3BvbnNlLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9Inht
bC9XZWJLaXRXaW5kb3dQcm9wZXJ0aWVzLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9Inht
bC9XZWJLaXRFcnJvci54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0Rmlu
ZENvbnRyb2xsZXIueG1sIi8+CiAgIDwvY2hhcHRlcj4KIAogICA8aW5kZXggaWQ9ImluZGV4LWFs
bCI+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dl
YmtpdDJndGstc2VjdGlvbnMudHh0IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
ZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAppbmRleCA4NDQ2ODk0NWQxMmI1ZjZjMDQ1Mjkw
OTM1NzA2ZWU5YTI4OWZiODJmLi44M2NkOWFjMDkxN2ZmM2E0NzUwMzRiZTE5MDVkODM1M2MwZGIw
ZThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dl
YmtpdDJndGstc2VjdGlvbnMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKQEAgLTc0LDYgKzc0LDcgQEAgd2Via2l0
X3dlYl92aWV3X2dldF9zZXR0aW5ncwogd2Via2l0X3dlYl92aWV3X2dldF93aW5kb3dfcHJvcGVy
dGllcwogd2Via2l0X3dlYl92aWV3X3NldF96b29tX2xldmVsCiB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X3pvb21fbGV2ZWwKK3dlYmtpdF93ZWJfdmlld19zZWFyY2gKIAogPFNVQlNFQ1RJT04gU3RhbmRh
cmQ+CiBXZWJLaXRXZWJWaWV3Q2xhc3MKQEAgLTI5NywzICsyOTgsMjggQEAgd2Via2l0X3BsdWdp
bl9lcnJvcl9xdWFyawogd2Via2l0X3BvbGljeV9lcnJvcl9xdWFyawogPC9TRUNUSU9OPgogCis8
U0VDVElPTj4KKzxGSUxFPldlYktpdEZpbmRDb250cm9sbGVyPC9GSUxFPgorV2ViS2l0RmluZENv
bnRyb2xsZXIKK3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX3N0cmluZword2Via2l0X2Zp
bmRfY29udHJvbGxlcl9jb3VudF9tYXRjaGVzCit3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9m
bGFncword2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfbWF0Y2hfY291bnQKK3dlYmtpdF9maW5k
X2NvbnRyb2xsZXJfZ2V0X21heF9tYXRjaF9jb3VudAord2Via2l0X2ZpbmRfY29udHJvbGxlcl9n
ZXRfc2VhcmNoX3N0cmluZword2Via2l0X2ZpbmRfY29udHJvbGxlcl9uZXh0Cit3ZWJraXRfZmlu
ZF9jb250cm9sbGVyX3ByZXZpdW9zCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0Rmlu
ZENvbnRyb2xsZXJDbGFzcworV0VCS0lUX1RZUEVfRklORF9DT05UUk9MTEVSCitXRUJLSVRfRklO
RF9DT05UUk9MTEVSCitXRUJLSVRfSVNfRklORF9DT05UUk9MTEVSCitXRUJLSVRfRklORF9DT05U
Uk9MTEVSX0NMQVNTCitXRUJLSVRfSVNfRklORF9DT05UUk9MTEVSX0NMQVNTCitXRUJLSVRfRklO
RF9DT05UUk9MTEVSX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgorV2ViS2l0Rmlu
ZENvbnRyb2xsZXJQcml2YXRlCit3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF90eXBlCis8L1NF
Q1RJT04+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2Nz
L3dlYmtpdDJndGsudHlwZXMgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2Nz
L3dlYmtpdDJndGsudHlwZXMKaW5kZXggNDBhODQxYzg5YzljNDdiNTI0YTI3ZTFiMTE4N2U3M2Iy
NmE0NDZmYS4uMDA4OGMxYzAxYTcxM2UyZTZkNmYwZDdkNjMwNmFlMzU5YWM1ZjQ3NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5
cGVzCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0
ay50eXBlcwpAQCAtOCwzICs4LDQgQEAgd2Via2l0X3NldHRpbmdzX2dldF90eXBlCiB3ZWJraXRf
dXJpX3Jlc3BvbnNlX2dldF90eXBlCiB3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3R5cGUKIHdlYmtp
dF93aW5kb3dfcHJvcGVydGllc19nZXRfdHlwZQord2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRf
dHlwZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
R05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9H
TlVtYWtlZmlsZS5hbQppbmRleCBkOTEyYjY1N2UwMzY2YjY4MmE4Yzc5MTk0OTA2YTUzMzY4MDJj
OTZlLi4xNDVmMjIxNTZmNGEwYTEwOGJkMTRjZWJmNDFlN2M0MDgyNWQxZTFjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbQor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5h
bQpAQCAtMSw5ICsxLDEwIEBACiBURVNUX1BST0dTICs9IFwKKwlQcm9ncmFtcy9XZWJLaXQyQVBJ
VGVzdHMvVGVzdEJhY2tGb3J3YXJkTGlzdCBcCisJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rl
c3RXZWJLaXRGaW5kQ29udHJvbGxlciBcCisJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RX
ZWJLaXRTZXR0aW5ncyBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRXZWJD
b250ZXh0IFwKIAlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFdlYlZpZXcgXAot
CVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0V2ViS2l0V2ViTG9hZGVyQ2xpZW50IFwKLQlQ
cm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFNldHRpbmdzIFwKLQlQcm9ncmFtcy9X
ZWJLaXQyQVBJVGVzdHMvVGVzdEJhY2tGb3J3YXJkTGlzdAorCVByb2dyYW1zL1dlYktpdDJBUElU
ZXN0cy9UZXN0V2ViS2l0V2ViTG9hZGVyQ2xpZW50CiAKIG5vaW5zdF9QUk9HUkFNUyArPSAkKFRF
U1RfUFJPR1MpCiB3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzID0gXApAQCAtNzYsMyArNzcsOCBAQCBQ
cm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdEJhY2tGb3J3YXJkTGlzdF9DUFBGTEFHUyA9ICQo
d2Via2l0Ml90ZXN0c19jcHBmbGFncwogUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RCYWNr
Rm9yd2FyZExpc3RfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCiBQcm9ncmFtc19XZWJL
aXQyQVBJVGVzdHNfVGVzdEJhY2tGb3J3YXJkTGlzdF9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3Rz
X2xkZmxhZ3MpCiAKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViS2l0RmluZENvbnRy
b2xsZXJfU09VUkNFUyA9IFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9UZXN0V2ViS2l0RmluZENvbnRyb2xsZXIuY3BwCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNf
VGVzdFdlYktpdEZpbmRDb250cm9sbGVyX0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZs
YWdzKQorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlcl9M
REFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19U
ZXN0V2ViS2l0RmluZENvbnRyb2xsZXJfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdz
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVz
dFdlYktpdEZpbmRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmIwYzY0
NDFhOWMyYjZjZTU2YWM5OWJlY2E4OTg1NWY2ZDFmYTg4NQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRGaW5kQ29udHJv
bGxlci5jcHAKQEAgLTAsMCArMSwzMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdh
bGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkxvYWRUcmFja2luZ1Rl
c3QuaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+
CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCisjZGVmaW5lIFRFU1RfU1RSSU5H
ICI8aHRtbD48Ym9keT5maXJzdCB0ZXN0aW5nIHNlY29uZCB0ZXN0aW5nIHNlY29uZEhhbGY8L2Jv
ZHk+PC9odG1sPiIKKworY2xhc3MgRmluZENvbnRyb2xsZXJUZXN0OiBwdWJsaWMgTG9hZFRyYWNr
aW5nVGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShGaW5kQ29udHJv
bGxlclRlc3QpOworCisgICAgRmluZENvbnRyb2xsZXJUZXN0KCkKKyAgICAgICAgOiBtX3J1bkZp
bmRVbnRpbENvbXBsZXRpb24oZmFsc2UpCisgICAgeworICAgIH0KKworICAgIH5GaW5kQ29udHJv
bGxlclRlc3QoKQorICAgIHsKKyAgICAgICAgaWYgKG1fZmluZENvbnRyb2xsZXIpCisgICAgICAg
ICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9maW5kQ29udHJvbGxl
ci5nZXQoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CisgICAgfQor
CisgICAgdm9pZCBmaW5kKGNvbnN0IGNoYXIqIHNlYXJjaFN0cmluZywgV2ViS2l0RmluZE9wdGlv
bnMgZmluZE9wdGlvbnMsIGd1aW50IG1heE1hdGNoQ291bnQpCisgICAgeworICAgICAgICAvLyBJ
ZiB0aGUgU0hPV19PVkVSTEFZIG9wdGlvbiBpcyBub3QgcGFzc2VkIHRoZSBXZWJQYWdlIGRvZXMg
bm90IG5vdGlmeSBhYm91dCBtYXRjaGVzLgorICAgICAgICBmaW5kT3B0aW9ucyA9IHN0YXRpY19j
YXN0PFdlYktpdEZpbmRPcHRpb25zPihmaW5kT3B0aW9ucyB8IFdFQktJVF9GSU5EX09QVElPTlNf
U0hPV19PVkVSTEFZKTsKKyAgICAgICAgbV9maW5kQ29udHJvbGxlciA9IHdlYmtpdF93ZWJfdmll
d19nZXRfZmluZF9jb250cm9sbGVyKG1fd2ViVmlldyk7CisKKyAgICAgICAgZ19zaWduYWxfY29u
bmVjdChtX2ZpbmRDb250cm9sbGVyLmdldCgpLCAiZm91bmQtc3RyaW5nIiwgR19DQUxMQkFDSyhm
b3VuZFN0cmluZ0NhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9m
aW5kQ29udHJvbGxlci5nZXQoKSwgImZhaWxlZC10by1maW5kLXN0cmluZyIsIEdfQ0FMTEJBQ0so
ZmFpbGVkVG9GaW5kU3RyaW5nQ2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgd2Via2l0X2ZpbmRf
Y29udHJvbGxlcl9zZWFyY2hfc3RyaW5nKG1fZmluZENvbnRyb2xsZXIuZ2V0KCksIHNlYXJjaFN0
cmluZywgZmluZE9wdGlvbnMsIG1heE1hdGNoQ291bnQpOworICAgIH0KKworICAgIHZvaWQgY291
bnQoY29uc3QgY2hhciogc2VhcmNoU3RyaW5nLCBXZWJLaXRGaW5kT3B0aW9ucyBmaW5kT3B0aW9u
cywgZ3VpbnQgbWF4TWF0Y2hDb3VudCkKKyAgICB7CisgICAgICAgIC8vIElmIHRoZSBTSE9XX09W
RVJMQVkgb3B0aW9uIGlzIG5vdCBwYXNzZWQgdGhlIFdlYlBhZ2UgZG9lcyBub3Qgbm90aWZ5IGFi
b3V0IG1hdGNoZXMuCisgICAgICAgIGZpbmRPcHRpb25zID0gc3RhdGljX2Nhc3Q8V2ViS2l0Rmlu
ZE9wdGlvbnM+KGZpbmRPcHRpb25zIHwgV0VCS0lUX0ZJTkRfT1BUSU9OU19TSE9XX09WRVJMQVkp
OworICAgICAgICBtX2ZpbmRDb250cm9sbGVyID0gd2Via2l0X3dlYl92aWV3X2dldF9maW5kX2Nv
bnRyb2xsZXIobV93ZWJWaWV3KTsKKworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fZmluZENv
bnRyb2xsZXIuZ2V0KCksICJjb3VudGVkLW1hdGNoZXMiLCBHX0NBTExCQUNLKGNvdW50ZWRNYXRj
aGVzQ2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9jb3Vu
dF9tYXRjaGVzKG1fZmluZENvbnRyb2xsZXIuZ2V0KCksIHNlYXJjaFN0cmluZywgZmluZE9wdGlv
bnMsIG1heE1hdGNoQ291bnQpOworICAgIH0KKworICAgIHZvaWQgd2FpdFVudGlsRmluZEZpbmlz
aGVkKCkKKyAgICB7CisgICAgICAgIG1fcnVuRmluZFVudGlsQ29tcGxldGlvbiA9IHRydWU7Cisg
ICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBHUmVmUHRy
PFdlYktpdEZpbmRDb250cm9sbGVyPiBtX2ZpbmRDb250cm9sbGVyOworICAgIGJvb2wgbV90ZXh0
Rm91bmQ7CisKK3ByaXZhdGU6CisgICAgYm9vbCBtX3J1bkZpbmRVbnRpbENvbXBsZXRpb247CisK
KyAgICBzdGF0aWMgdm9pZCBmb3VuZFN0cmluZ0NhbGxiYWNrKFdlYktpdEZpbmRDb250cm9sbGVy
KiwgRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+bV90ZXh0
Rm91bmQgPSB0cnVlOworICAgICAgICBpZiAodGVzdC0+bV9ydW5GaW5kVW50aWxDb21wbGV0aW9u
KQorICAgICAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgdm9pZCBmYWlsZWRUb0ZpbmRTdHJpbmdDYWxsYmFjayhXZWJLaXRGaW5k
Q29udHJvbGxlciosIEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRl
c3QtPm1fdGV4dEZvdW5kID0gZmFsc2U7CisgICAgICAgIGlmICh0ZXN0LT5tX3J1bkZpbmRVbnRp
bENvbXBsZXRpb24pCisgICAgICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxv
b3ApOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGNvdW50ZWRNYXRjaGVzQ2FsbGJhY2soV2Vi
S2l0RmluZENvbnRyb2xsZXIqLCBGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QpCisgICAgeworICAg
ICAgICBpZiAodGVzdC0+bV9ydW5GaW5kVW50aWxDb21wbGV0aW9uKQorICAgICAgICAgICAgZ19t
YWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9Cit9OworCitzdGF0aWMgdm9p
ZCB0ZXN0RmluZENvbnRyb2xsZXJUZXh0Rm91bmQoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRIdG1sKFRFU1RfU1RSSU5HLCAwKTsKKyAg
ICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPmZpbmQoInRlc3Rp
bmciLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDEpOworICAgIHRlc3QtPndhaXRVbnRpbEZp
bmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworfQorCitz
dGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJUZXh0Tm90Rm91bmQoRmluZENvbnRyb2xsZXJU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRIdG1sKFRFU1RfU1RS
SU5HLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3Qt
PmZpbmQoIm5vdEZvdW5kIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAxKTsKKyAgICB0ZXN0
LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX3RleHRG
b3VuZCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlck1hdGNoQ291bnQoRmlu
ZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRI
dG1sKFRFU1RfU1RSSU5HLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsK
KworICAgIHRlc3QtPmZpbmQoInRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDIp
OworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQod2Vi
a2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfbWF0Y2hfY291bnQodGVzdC0+bV9maW5kQ29udHJvbGxl
ci5nZXQoKSkgPT0gMik7CisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworfQorCitz
dGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJNYXhNYXRjaENvdW50KEZpbmRDb250cm9sbGVy
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbChURVNUX1NU
UklORywgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0
LT5maW5kKCJ0ZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAxKTsKKyAgICB0ZXN0
LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHdlYmtpdF9maW5kX2Nv
bnRyb2xsZXJfZ2V0X21hdGNoX2NvdW50KHRlc3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpID09
IEdfTUFYVUlOVCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworfQorCitzdGF0
aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJOZXh0KEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbChURVNUX1NUUklORywgMCk7Cisg
ICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5maW5kKCJ0ZXN0
aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxG
aW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKKyAgICBn
X2Fzc2VydCh3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9tYXRjaF9jb3VudCh0ZXN0LT5tX2Zp
bmRDb250cm9sbGVyLmdldCgpKSA9PSAyKTsKKworICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJf
bmV4dCh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxG
aW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKKyAgICBn
X2Fzc2VydCh3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9tYXRjaF9jb3VudCh0ZXN0LT5tX2Zp
bmRDb250cm9sbGVyLmdldCgpKSA9PSAyKTsKKyAgICBnX2Fzc2VydCghKHdlYmtpdF9maW5kX2Nv
bnRyb2xsZXJfZ2V0X29wdGlvbnModGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSkgJiBXRUJL
SVRfRklORF9PUFRJT05TX0JBQ0tXQVJEUykpOworCisgICAgd2Via2l0X2ZpbmRfY29udHJvbGxl
cl9uZXh0KHRlc3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpOworICAgIHRlc3QtPndhaXRVbnRp
bEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQoIXRlc3QtPm1fdGV4dEZvdW5kKTsKKyAg
ICBnX2Fzc2VydCh3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9tYXRjaF9jb3VudCh0ZXN0LT5t
X2ZpbmRDb250cm9sbGVyLmdldCgpKSA9PSAyKTsKKyAgICBnX2Fzc2VydCghKHdlYmtpdF9maW5k
X2NvbnRyb2xsZXJfZ2V0X29wdGlvbnModGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSkgJiBX
RUJLSVRfRklORF9PUFRJT05TX0JBQ0tXQVJEUykpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0Rmlu
ZENvbnRyb2xsZXJQcmV2aW91cyhGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwoVEVTVF9TVFJJTkcsIDApOworICAgIHRlc3QtPndh
aXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+ZmluZCgidGVzdGluZyIsIFdFQktJ
VF9GSU5EX09QVElPTlNfTk9ORSwgMik7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVk
KCk7CisKKyAgICBnX2Fzc2VydCh3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9tYXRjaF9jb3Vu
dCh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKSA9PSAyKTsKKyAgICBnX2Fzc2VydCh0ZXN0
LT5tX3RleHRGb3VuZCk7CisKKyAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX25leHQodGVzdC0+
bV9maW5kQ29udHJvbGxlci5nZXQoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVk
KCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7CisgICAgZ19hc3NlcnQod2Vi
a2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfbWF0Y2hfY291bnQodGVzdC0+bV9maW5kQ29udHJvbGxl
ci5nZXQoKSkgPT0gMik7CisgICAgZ19hc3NlcnQoISh3ZWJraXRfZmluZF9jb250cm9sbGVyX2dl
dF9vcHRpb25zKHRlc3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpICYgV0VCS0lUX0ZJTkRfT1BU
SU9OU19CQUNLV0FSRFMpKTsKKworICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfcHJldmlvdXMo
dGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZp
bmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7CisgICAgZ19hc3Nl
cnQod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfbWF0Y2hfY291bnQodGVzdC0+bV9maW5kQ29u
dHJvbGxlci5nZXQoKSkgPT0gMik7CisgICAgZ19hc3NlcnQod2Via2l0X2ZpbmRfY29udHJvbGxl
cl9nZXRfb3B0aW9ucyh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKSAmIFdFQktJVF9GSU5E
X09QVElPTlNfQkFDS1dBUkRTKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVy
Q291bnRlZE1hdGNoZXMoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQor
eworICAgIHRlc3QtPmxvYWRIdG1sKFRFU1RfU1RSSU5HLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50
aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPmNvdW50KCJ0ZXN0aW5nIiwgV0VCS0lUX0ZJ
TkRfT1BUSU9OU19OT05FLCAyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsK
KworICAgIGdfYXNzZXJ0KHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X21hdGNoX2NvdW50KHRl
c3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpID09IDIpOworCisgICAgdGVzdC0+Y291bnQoImZp
cnN0IiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxG
aW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0
X21hdGNoX2NvdW50KHRlc3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpID09IDEpOworCisgICAg
dGVzdC0+Y291bnQoIm5vdEZvdW5kIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAyKTsKKyAg
ICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KCF3ZWJraXRf
ZmluZF9jb250cm9sbGVyX2dldF9tYXRjaF9jb3VudCh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdl
dCgpKSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlck9wdGlvbnMoRmluZENv
bnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRIdG1s
KFRFU1RfU1RSSU5HLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKwor
ICAgIHRlc3QtPmZpbmQoIlRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDIpOwor
ICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQoIXRlc3Qt
Pm1fdGV4dEZvdW5kKTsKKworICAgIHRlc3QtPmZpbmQoIlRlc3RpbmciLCBXRUJLSVRfRklORF9P
UFRJT05TX0NBU0VfSU5TRU5TSVRJVkUsIDIpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5p
c2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworCisgICAgdGVzdC0+
ZmluZCgiZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAyKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5k
KTsKKworICAgIHRlc3QtPmZpbmQoImVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfQVRfV09S
RF9TVEFSVFMsIDIpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAg
Z19hc3NlcnQoIXRlc3QtPm1fdGV4dEZvdW5kKTsKKworICAgIHRlc3QtPmZpbmQoIkhhbGYiLCBX
RUJLSVRfRklORF9PUFRJT05TX0FUX1dPUkRfU1RBUlRTLCAyKTsKKyAgICB0ZXN0LT53YWl0VW50
aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX3RleHRGb3VuZCk7CisK
KyAgICB0ZXN0LT5maW5kKCJIYWxmIiwgc3RhdGljX2Nhc3Q8V2ViS2l0RmluZE9wdGlvbnM+KFdF
QktJVF9GSU5EX09QVElPTlNfQVRfV09SRF9TVEFSVFMgfCBXRUJLSVRfRklORF9PUFRJT05TX1RS
RUFUX01FRElBTF9DQVBJVEFMX0FTX1dPUkRfU1RBUlQpLCAyKTsKKyAgICB0ZXN0LT53YWl0VW50
aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKKwor
ICAgIHRlc3QtPmZpbmQoInRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX1dSQVBfQVJPVU5E
LCAzKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydCh0
ZXN0LT5tX3RleHRGb3VuZCk7CisKKyAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX25leHQodGVz
dC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlz
aGVkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworCisgICAgd2Via2l0X2Zp
bmRfY29udHJvbGxlcl9uZXh0KHRlc3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpOworICAgIHRl
c3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZv
dW5kKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVySW5zdGFuY2UoRmluZENv
bnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIFdlYktpdEZpbmRDb250
cm9sbGVyKiBmaW5kQ29udHJvbGxlcjEgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ZpbmRfY29udHJv
bGxlcih0ZXN0LT5tX3dlYlZpZXcpOworICAgIFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29u
dHJvbGxlcjIgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ZpbmRfY29udHJvbGxlcih0ZXN0LT5tX3dl
YlZpZXcpOworCisgICAgZ19hc3NlcnQoZmluZENvbnRyb2xsZXIxID09IGZpbmRDb250cm9sbGVy
Mik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlckdldHRlcnMoRmluZENvbnRy
b2xsZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIGNvbnN0IGNoYXIqIHNlYXJj
aFN0cmluZyA9ICJ0ZXN0aW5nIjsKKyAgICBjb25zdCBndWludCBtYXhNYXRjaENvdW50ID0gMTsK
KyAgICBjb25zdCBXZWJLaXRGaW5kT3B0aW9ucyBmaW5kT3B0aW9ucyA9IHN0YXRpY19jYXN0PFdl
YktpdEZpbmRPcHRpb25zPihXRUJLSVRfRklORF9PUFRJT05TX1dSQVBfQVJPVU5EIHwgV0VCS0lU
X0ZJTkRfT1BUSU9OU19BVF9XT1JEX1NUQVJUUyk7CisgICAgV2ViS2l0RmluZENvbnRyb2xsZXIq
IGZpbmRDb250cm9sbGVyID0gd2Via2l0X3dlYl92aWV3X2dldF9maW5kX2NvbnRyb2xsZXIodGVz
dC0+bV93ZWJWaWV3KTsKKworICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX3N0cmlu
ZyhmaW5kQ29udHJvbGxlciwgc2VhcmNoU3RyaW5nLCBmaW5kT3B0aW9ucywgbWF4TWF0Y2hDb3Vu
dCk7CisgICAgZ19hc3NlcnQoIWdfc3RyY21wMCh3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9z
ZWFyY2hfc3RyaW5nKGZpbmRDb250cm9sbGVyKSwgc2VhcmNoU3RyaW5nKSk7CisgICAgZ19hc3Nl
cnQod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfbWF4X21hdGNoX2NvdW50KGZpbmRDb250cm9s
bGVyKSA9PSBtYXhNYXRjaENvdW50KTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfZmluZF9jb250cm9s
bGVyX2dldF9vcHRpb25zKGZpbmRDb250cm9sbGVyKSA9PSBmaW5kT3B0aW9ucyk7Cit9CisKK3Zv
aWQgYmVmb3JlQWxsKCkKK3sKKyAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0Rmlu
ZENvbnRyb2xsZXIiLCAiZ2V0dGVycyIsIHRlc3RGaW5kQ29udHJvbGxlckdldHRlcnMpOworICAg
IEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJpbnN0YW5j
ZSIsIHRlc3RGaW5kQ29udHJvbGxlckluc3RhbmNlKTsKKyAgICBGaW5kQ29udHJvbGxlclRlc3Q6
OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAidGV4dC1mb3VuZCIsIHRlc3RGaW5kQ29udHJv
bGxlclRleHRGb3VuZCk7CisgICAgRmluZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRD
b250cm9sbGVyIiwgInRleHQtbm90LWZvdW5kIiwgdGVzdEZpbmRDb250cm9sbGVyVGV4dE5vdEZv
dW5kKTsKKyAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIi
LCAibWF0Y2gtY291bnQiLCB0ZXN0RmluZENvbnRyb2xsZXJNYXRjaENvdW50KTsKKyAgICBGaW5k
Q29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAibWF4LW1hdGNoLWNv
dW50IiwgdGVzdEZpbmRDb250cm9sbGVyTWF4TWF0Y2hDb3VudCk7CisgICAgRmluZENvbnRyb2xs
ZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwgIm5leHQiLCB0ZXN0RmluZENvbnRy
b2xsZXJOZXh0KTsKKyAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRy
b2xsZXIiLCAicHJldmlvdXMiLCB0ZXN0RmluZENvbnRyb2xsZXJQcmV2aW91cyk7CisgICAgRmlu
ZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwgImNvdW50ZWQtbWF0
Y2hlcyIsIHRlc3RGaW5kQ29udHJvbGxlckNvdW50ZWRNYXRjaGVzKTsKKyAgICBGaW5kQ29udHJv
bGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAib3B0aW9ucyIsIHRlc3RGaW5k
Q29udHJvbGxlck9wdGlvbnMpOworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaAppbmRleCBhYjBlMGE4ZjEwYjUzNTkz
ZDgyZTBmMzUzN2RmODNjMjQ5OTU4ZjhkLi5hMmY0ZmFlY2M1MWMwZmU4MTZiYzlmMTlmMmRiMTJj
NDZlYzQzMzBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93
ZWJraXQyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5o
CkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CiAj
aW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRFbnVtVHlwZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dl
YktpdEVycm9yLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRGaW5kQ29udHJvbGxlci5oPgog
I2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0U2V0dGluZ3MuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dl
YktpdFVSSVJlcXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFVSSVJlc3BvbnNlLmg+
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122900</attachid>
            <date>2012-01-18 03:39:25 -0800</date>
            <delta_ts>2012-01-19 13:32:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76070-20120118123923.patch</filename>
            <type>text/plain</type>
            <size>49071</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1MjUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYzhiOTZiMjNiNjJmMjAw
YjM2NzI1OTIzYmZlNDIyN2YzMGFkZTMyOS4uN2ZiYjdjZDRjZDdhNTljNGU0ZDQyZjBhNzQ2ZDEz
YmRhYjc2MDhiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY3IEBACisyMDEyLTAxLTE2ICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFtX
SzJdIEFkZCBGaW5kIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzYwNzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIHBhdGNoIGFkZHMgYSBuZXcgcHVibGljIGZpbmQgQVBJIGZvciB0aGUgR3Rr
KyBXSzIgcG9ydC4gSXQKKyAgICAgICAgZGVmaW5lcyBhIG5ldyBvYmplY3QgY2FsbGVkIFdlYktp
dEZpbmRDb250cm9sbGVyIG93bmVkIGJ5IGVhY2gKKyAgICAgICAgV2ViS2l0V2ViVmlldy4gQ2xp
ZW50cyB3aWxsIHVzZSB0aGlzIG5ldyBvYmplY3QgdG8gc2VhcmNoIHN0cmluZ3MKKyAgICAgICAg
aW4gdGhlIFdlYktpdFdlYlZpZXcuCisKKyAgICAgICAgQ2hhbmdlcyBpbmNsdWRlIGFsc28gZG9j
dW1lbnRhdGlvbiBhbmQgdW5pdCB0ZXN0cyBmb3IgdGhlIG5ldworICAgICAgICBwdWJsaWMgQVBJ
LgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0RmluZENvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKGRpZEZpbmRTdHJp
bmcpOiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgV0tQYWdlIEZpbmQgaW50ZXJmYWNlLgorICAgICAg
ICAoZGlkRmFpbFRvRmluZFN0cmluZyk6IERpdHRvLgorICAgICAgICAoZGlkQ291bnRTdHJpbmdN
YXRjaGVzKTogRGl0dG8uCisgICAgICAgICh3ZWJraXRGaW5kQXR0YWNoRmluZENsaWVudFRvUGFn
ZSk6IHNldHMgdGhlIFdlYktpdEZpbmRDb250cm9sbGVyCisgICAgICAgIGFzIHRoZSBXS1BhZ2Ug
ZmluZCBjbGllbnQKKyAgICAgICAgKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfaW5pdCk6CisgICAg
ICAgICh3ZWJraXRGaW5kQ29udHJvbGxlckdldFByb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdEZp
bmRDb250cm9sbGVyU2V0UHJvcGVydHkpOgorICAgICAgICAod2Via2l0RmluZENvbnRyb2xsZXJG
aW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRfZmluZF9jb250cm9sbGVyX2NsYXNzX2luaXQpOgor
ICAgICAgICAod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfc2VhcmNoX3N0cmluZyk6CisgICAg
ICAgICh3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9tYXRjaF9jb3VudCk6CisgICAgICAgICh3
ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9vcHRpb25zKToKKyAgICAgICAgKHdlYmtpdF9maW5k
X2NvbnRyb2xsZXJfZ2V0X21heF9tYXRjaF9jb3VudCk6CisgICAgICAgICh3ZWJraXRfZmluZF9j
b250cm9sbGVyX3NlYXJjaF9zdHJpbmcpOiBhc3luY2hyb25vdXNseSBsb29rcyBmb3IKKyAgICAg
ICAgdGhlIHNlYXJjaCBzdHJpbmcgaW4gdGhlIFdlYktpdFdlYlZpZXcuCisgICAgICAgICh3ZWJr
aXRfZmluZF9jb250cm9sbGVyX25leHQpOgorICAgICAgICAod2Via2l0X2ZpbmRfY29udHJvbGxl
cl9wcmV2aW91cyk6CisgICAgICAgICh3ZWJraXRfZmluZF9jb250cm9sbGVyX2NvdW50X21hdGNo
ZXMpOiBhc3luY2hyb25vdXNseSBjb3VudGVzIHRoZQorICAgICAgICBudW1iZXIgb2Ygb2NjdXJy
ZW5jZXMgb2YgdGhlIHNlYXJjaCBzdHJpbmcgaW4gdGhlIFdlYktpdFdlYlZpZXcuCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmluZENvbnRyb2xsZXIuaDogQWRkZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmluZENvbnRyb2xsZXJQcml2YXRlLmg6IEFk
ZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwOgorICAg
ICAgICAod2Via2l0X3dlYl92aWV3X2luaXQpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2dl
dF9maW5kX2NvbnRyb2xsZXIpOiByZXR1cm5zIHRoZQorICAgICAgICBXZWJLaXRGaW5kQ29udHJv
bGxlciBpbnN0YW5jZSBvd25lZCBieSB0aGUgV2ViS2l0V2ViVmlldy4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Vi
a2l0Mmd0ay1kb2NzLnNnbWw6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJr
aXQyZ3RrLXNlY3Rpb25zLnR4dDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dl
YmtpdDJndGsudHlwZXM6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFr
ZWZpbGUuYW06CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEZp
bmRDb250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgICh0ZXN0RmluZENvbnRyb2xsZXJUZXh0
Rm91bmQpOgorICAgICAgICAodGVzdEZpbmRDb250cm9sbGVyVGV4dE5vdEZvdW5kKToKKyAgICAg
ICAgKHRlc3RGaW5kQ29udHJvbGxlck1hdGNoQ291bnQpOgorICAgICAgICAodGVzdEZpbmRDb250
cm9sbGVyTWF4TWF0Y2hDb3VudCk6CisgICAgICAgICh0ZXN0RmluZENvbnRyb2xsZXJOZXh0KToK
KyAgICAgICAgKHRlc3RGaW5kQ29udHJvbGxlclByZXZpb3VzKToKKyAgICAgICAgKHRlc3RGaW5k
Q29udHJvbGxlckNvdW50ZWRNYXRjaGVzKToKKyAgICAgICAgKHRlc3RGaW5kQ29udHJvbGxlck9w
dGlvbnMpOgorICAgICAgICAodGVzdEZpbmRDb250cm9sbGVySW5zdGFuY2UpOgorICAgICAgICAo
dGVzdEZpbmRDb250cm9sbGVyR2V0dGVycyk6CisgICAgICAgIChiZWZvcmVBbGwpOgorICAgICAg
ICAoYWZ0ZXJBbGwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaDoKKwog
MjAxMi0wMS0xOCAgU2VyZ2lvIFZpbGxhciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBEaWRGaW5kU3RyaW5nIHNob3VsZCBtZSBlbWl0dGVkIGV2ZW4gaWYgRmluZE9wdGlv
bnNTaG93T3ZlcmxheSBpcyBub3QgZW5hYmxlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
R05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCBhNzcx
YjlkOGQ0YzM4MTVlYjc1ZDI4MGUxYTFjNzJmOGY4MGYxMThhLi5iZGVjZTBkNzMxODI5ZGEyOTAy
ZWNhNjllNmRjOWZlNzhmYmNhY2ViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtl
ZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQpAQCAtODMsNiArODMs
NyBAQCB3ZWJraXQyZ3RrX2hlYWRlcnMgPSBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRCYWNrRm9yd2FyZExpc3RJdGVtLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0RGVmaW5lcy5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdEVycm9yLmggXAorCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmluZENv
bnRyb2xsZXIuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250
ZXh0LmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2V0dGluZ3MuaCBc
CiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVUklSZXF1ZXN0LmggXApAQCAt
NTI1LDYgKzUyNiw4IEBAIGxpYndlYmtpdDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lP
TkBfQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFfU09VCiAJU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RGVmaW5lcy5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRFcnJvci5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdEZpbmRDb250cm9sbGVyLmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdEZpbmRDb250cm9sbGVyLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRTZXR0aW5ncy5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFNldHRpbmdzLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0RmluZENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmluZENvbnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI3
ODI4Mzc0MGU2Nzk2ZmNhNDIwODRlM2IxNGUyYTk0Mjk1NjlhZTAKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaW5kQ29udHJvbGxlci5j
cHAKQEAgLTAsMCArMSw0NDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMu
TC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRGaW5kQ29udHJvbGxlci5o
IgorCisjaW5jbHVkZSAiV2ViS2l0RW51bVR5cGVzLmgiCisjaW5jbHVkZSAiV2ViS2l0UHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYktpdFdlYlZpZXcuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHku
aCIKKyNpbmNsdWRlIDxXZWJLaXQyL1dLRmluZE9wdGlvbnMuaD4KKyNpbmNsdWRlIDxXZWJLaXQy
L1dLUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS1N0cmluZy5oPgorI2luY2x1ZGUg
PGdsaWIvZ2kxOG4tbGliLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworZW51bSB7CisgICAgRk9VTkRfU1RSSU5HLAorICAgIEZB
SUxFRF9UT19GSU5EX1NUUklORywKKyAgICBDT1VOVEVEX01BVENIRVMsCisKKyAgICBMQVNUX1NJ
R05BTAorfTsKKworZW51bSB7CisgICAgUFJPUF8wLAorCisgICAgUFJPUF9TVFJJTkcsCisgICAg
UFJPUF9PUFRJT05TLAorICAgIFBST1BfTUFUQ0hfQ09VTlQsCisgICAgUFJPUF9NQVhfTUFUQ0hf
Q09VTlQKK307CisKK3N0cnVjdCBfV2ViS2l0RmluZENvbnRyb2xsZXJQcml2YXRlIHsKKyAgICBD
U3RyaW5nIHN0cmluZzsKKyAgICBXZWJLaXRGaW5kT3B0aW9ucyBmaW5kT3B0aW9uczsKKyAgICB1
bnNpZ25lZCBtYXRjaENvdW50OworICAgIHVuc2lnbmVkIG1heE1hdGNoQ291bnQ7CisgICAgV0tQ
YWdlUmVmIHdrUGFnZTsKK307CisKK3N0YXRpYyBndWludCBzaWduYWxzW0xBU1RfU0lHTkFMXSA9
IHsgMCwgfTsKKworR19ERUZJTkVfVFlQRShXZWJLaXRGaW5kQ29udHJvbGxlciwgd2Via2l0X2Zp
bmRfY29udHJvbGxlciwgR19UWVBFX09CSkVDVCkKKworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdf
QVBJX0VOVU0oV0VCS0lUX0ZJTkRfT1BUSU9OU19DQVNFX0lOU0VOU0lUSVZFLCBrV0tGaW5kT3B0
aW9uc0Nhc2VJbnNlbnNpdGl2ZSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19BUElfRU5VTShX
RUJLSVRfRklORF9PUFRJT05TX0FUX1dPUkRfU1RBUlRTLCBrV0tGaW5kT3B0aW9uc0F0V29yZFN0
YXJ0cyk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19BUElfRU5VTShXRUJLSVRfRklORF9PUFRJ
T05TX1RSRUFUX01FRElBTF9DQVBJVEFMX0FTX1dPUkRfU1RBUlQsIGtXS0ZpbmRPcHRpb25zVHJl
YXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfQVBJ
X0VOVU0oV0VCS0lUX0ZJTkRfT1BUSU9OU19CQUNLV0FSRFMsIGtXS0ZpbmRPcHRpb25zQmFja3dh
cmRzKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0FQSV9FTlVNKFdFQktJVF9GSU5EX09QVElP
TlNfV1JBUF9BUk9VTkQsIGtXS0ZpbmRPcHRpb25zV3JhcEFyb3VuZCk7CisKK3N0YXRpYyB2b2lk
IGRpZEZpbmRTdHJpbmcoV0tQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIHN0cmluZywgdW5zaWdu
ZWQgbWF0Y2hDb3VudCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBXZWJLaXRGaW5k
Q29udHJvbGxlciogZmluZENvbnRyb2xsZXIgPSBXRUJLSVRfRklORF9DT05UUk9MTEVSKGNsaWVu
dEluZm8pOworICAgIGZpbmRDb250cm9sbGVyLT5wcml2LT5tYXRjaENvdW50ID0gbWF0Y2hDb3Vu
dDsKKyAgICBnX3NpZ25hbF9lbWl0KGZpbmRDb250cm9sbGVyLCBzaWduYWxzW0ZPVU5EX1NUUklO
R10sIDApOworfQorCitzdGF0aWMgdm9pZCBkaWRGYWlsVG9GaW5kU3RyaW5nKFdLUGFnZVJlZiBw
YWdlLCBXS1N0cmluZ1JlZiBzdHJpbmcsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAg
Z19zaWduYWxfZW1pdChXRUJLSVRfRklORF9DT05UUk9MTEVSKGNsaWVudEluZm8pLCBzaWduYWxz
W0ZBSUxFRF9UT19GSU5EX1NUUklOR10sIDApOworfQorCitzdGF0aWMgdm9pZCBkaWRDb3VudFN0
cmluZ01hdGNoZXMoV0tQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIHN0cmluZywgdW5zaWduZWQg
bWF0Y2hDb3VudCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBXZWJLaXRGaW5kQ29u
dHJvbGxlciogZmluZENvbnRyb2xsZXIgPSBXRUJLSVRfRklORF9DT05UUk9MTEVSKGNsaWVudElu
Zm8pOworICAgIGZpbmRDb250cm9sbGVyLT5wcml2LT5tYXRjaENvdW50ID0gbWF0Y2hDb3VudDsK
KyAgICBnX3NpZ25hbF9lbWl0KGZpbmRDb250cm9sbGVyLCBzaWduYWxzW0NPVU5URURfTUFUQ0hF
U10sIDApOworfQorCit2b2lkIHdlYmtpdEZpbmRBdHRhY2hGaW5kQ2xpZW50VG9QYWdlKFdlYktp
dEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxlciwgV0tQYWdlUmVmIHdrUGFnZSkKK3sKKyAg
ICBXS1BhZ2VGaW5kQ2xpZW50IHdrRmluZENsaWVudCA9IHsKKyAgICAgICAga1dLUGFnZUZpbmRD
bGllbnRDdXJyZW50VmVyc2lvbiwKKyAgICAgICAgZmluZENvbnRyb2xsZXIsIC8vIGNsaWVudElu
Zm8KKyAgICAgICAgZGlkRmluZFN0cmluZywKKyAgICAgICAgZGlkRmFpbFRvRmluZFN0cmluZywK
KyAgICAgICAgZGlkQ291bnRTdHJpbmdNYXRjaGVzCisgICAgfTsKKyAgICBXS1BhZ2VTZXRQYWdl
RmluZENsaWVudCh3a1BhZ2UsICZ3a0ZpbmRDbGllbnQpOworICAgIGZpbmRDb250cm9sbGVyLT5w
cml2LT53a1BhZ2UgPSB3a1BhZ2U7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9maW5kX2NvbnRy
b2xsZXJfaW5pdChXZWJLaXRGaW5kQ29udHJvbGxlciogZmluZENvbnRyb2xsZXIpCit7CisgICAg
V2ViS2l0RmluZENvbnRyb2xsZXJQcml2YXRlKiBwcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9Q
UklWQVRFKGZpbmRDb250cm9sbGVyLCBXRUJLSVRfVFlQRV9GSU5EX0NPTlRST0xMRVIsIFdlYktp
dEZpbmRDb250cm9sbGVyUHJpdmF0ZSk7CisgICAgZmluZENvbnRyb2xsZXItPnByaXYgPSBwcml2
OworICAgIG5ldyAocHJpdikgV2ViS2l0RmluZENvbnRyb2xsZXJQcml2YXRlKCk7Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdEZpbmRDb250cm9sbGVyR2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0
LCBndWludCBwcm9wSWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBhcmFtU3BlYykKK3sK
KyAgICBXZWJLaXRGaW5kQ29udHJvbGxlciogZmluZENvbnRyb2xsZXIgPSBXRUJLSVRfRklORF9D
T05UUk9MTEVSKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BJZCkgeworICAgIGNhc2UgUFJP
UF9TVFJJTkc6CisgICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyh2YWx1ZSwgZmluZENvbnRyb2xs
ZXItPnByaXYtPnN0cmluZy5kYXRhKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
T1BUSU9OUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfZmxhZ3ModmFsdWUsIGZpbmRDb250cm9sbGVy
LT5wcml2LT5maW5kT3B0aW9ucyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NQVRD
SF9DT1VOVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludCh2YWx1ZSwgZmluZENvbnRyb2xsZXIt
PnByaXYtPm1hdGNoQ291bnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTUFYX01B
VENIX0NPVU5UOgorICAgICAgICBnX3ZhbHVlX3NldF91aW50KHZhbHVlLCBmaW5kQ29udHJvbGxl
ci0+cHJpdi0+bWF4TWF0Y2hDb3VudCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJZCwg
cGFyYW1TcGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdEZpbmRDb250cm9sbGVy
U2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIGNvbnN0IEdWYWx1ZSog
dmFsdWUsIEdQYXJhbVNwZWMqIHBhcmFtU3BlYykKK3sKKyAgICBXZWJLaXRGaW5kQ29udHJvbGxl
ciogZmluZENvbnRyb2xsZXIgPSBXRUJLSVRfRklORF9DT05UUk9MTEVSKG9iamVjdCk7CisKKyAg
ICBzd2l0Y2ggKHByb3BJZCkgeworICAgIGNhc2UgUFJPUF9TVFJJTkc6CisgICAgICAgIGZpbmRD
b250cm9sbGVyLT5wcml2LT5zdHJpbmcgPSBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfT1BUSU9OUzoKKyAgICAgICAgZmluZENvbnRyb2xs
ZXItPnByaXYtPmZpbmRPcHRpb25zID0gc3RhdGljX2Nhc3Q8V2ViS2l0RmluZE9wdGlvbnM+KGdf
dmFsdWVfZ2V0X2ZsYWdzKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9N
QVhfTUFUQ0hfQ09VTlQ6CisgICAgICAgIGZpbmRDb250cm9sbGVyLT5wcml2LT5tYXhNYXRjaENv
dW50ID0gZ192YWx1ZV9nZXRfdWludCh2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHBy
b3BJZCwgcGFyYW1TcGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdEZpbmRDb250
cm9sbGVyRmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdFQktJVF9GSU5EX0NPTlRS
T0xMRVIob2JqZWN0KS0+cHJpdi0+fldlYktpdEZpbmRDb250cm9sbGVyUHJpdmF0ZSgpOworICAg
IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfcGFyZW50X2NsYXNzKS0+Zmlu
YWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9j
bGFzc19pbml0KFdlYktpdEZpbmRDb250cm9sbGVyQ2xhc3MqIGZpbmRDbGFzcykKK3sKKyAgICBH
T2JqZWN0Q2xhc3MqIGdPYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGZpbmRDbGFzcyk7CisK
KyAgICBnT2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdEZpbmRDb250cm9sbGVyR2V0
UHJvcGVydHk7CisgICAgZ09iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRGaW5kQ29u
dHJvbGxlclNldFByb3BlcnR5OworICAgIGdPYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRG
aW5kQ29udHJvbGxlckZpbmFsaXplOworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGZp
bmRDbGFzcywgc2l6ZW9mKFdlYktpdEZpbmRDb250cm9sbGVyUHJpdmF0ZSkpOworCisgICAgLyoq
CisgICAgICogV2ViS2l0RmluZENvbnRyb2xsZXI6c3RyaW5nOgorICAgICAqCisgICAgICogVGhl
IHRleHQgdG8gc2VhcmNoIGluIHRoZSAjV2ViS2l0V2ViVmlldy4KKyAgICAgKi8KKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdPYmplY3RDbGFzcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBST1BfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygic3RyaW5nIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiU2VhcmNoIFN0
cmluZyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfKCJUZXh0IHRvIHNlYXJjaCBpbiB0aGUgdmlldyIpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBRFdSSVRFKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRGaW5kQ29udHJvbGxlcjpvcHRp
b25zOgorICAgICAqCisgICAgICogVGhlIG9wdGlvbnMgdG8gYmUgdXNlZCBpbiB0aGUgc2VhcmNo
IG9wZXJhdGlvbi4KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KGdPYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1Bf
T1BUSU9OUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3Bl
Y19mbGFncygib3B0aW9ucyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXygiU2VhcmNoIE9wdGlvbnMiKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJTZWFyY2ggb3B0aW9ucyB0
byBiZSB1c2VkIGluIHRoZSBzZWFyY2ggb3BlcmF0aW9uIiksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1RZUEVfRklORF9PUFRJ
T05TLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisK
KyAgICAvKioKKyAgICAgKiBXZWJLaXRGaW5kQ29udHJvbGxlcjptYXRjaC1jb3VudDoKKyAgICAg
KgorICAgICAqIFRoZSBudW1iZXIgb2YgbWF0Y2hlcyBmb3VuZCBmb3IgdGhlIGdpdmVuIHRleHQg
aW4gdGhlICNXZWJLaXRXZWJWaWV3LgorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoZ09iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUFJPUF9NQVRDSF9DT1VOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdfcGFyYW1fc3BlY191aW50KCJtYXRjaC1jb3VudCIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJNYXRjaGVzIGNvdW50IiksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJU
aGUgbnVtYmVyIG9mIG1hdGNoZXMgZm9yIHRoZSBnaXZlbiB0ZXh0IGluIHRoZSB2aWV3IiksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBH
X01BWFVJTlQsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxHUGFyYW1GbGFncz4oV0VCS0lUX1BBUkFNX1JFQURBQkxF
KSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0RmluZENvbnRyb2xsZXI6bWF4LW1hdGNoLWNv
dW50OgorICAgICAqCisgICAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIG1hdGNoZXMgdG8gcmVw
b3J0IGZvciBhIGdpdmVuIHNlYXJjaC4KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KGdPYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBST1BfTUFYX01BVENIX0NPVU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQoIm1heC1tYXRjaC1jb3VudCIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJNYXhpbXVtIG1h
dGNoZXMgY291bnQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF8oIlRoZSBtYXhpbXVtIG51bWJlciBvZiBtYXRjaGVzIGluIGEgZ2l2ZW4g
dGV4dCB0byByZXBvcnQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDAsIEdfTUFYVUlOVCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
KworICAgIC8qKgorICAgICAqIFdlYktpdEZpbmRDb250cm9sbGVyOjpmb3VuZC1zdHJpbmc6Cisg
ICAgICogQGZpbmRfY29udHJvbGxlcjogdGhlICNXZWJLaXRGaW5kQ29udHJvbGxlcgorICAgICAq
CisgICAgICogVGhpcyBzaWduYWwgaXMgZW1pdHRlZCB3aGVuIGEgZ2l2ZW4gc3RyaW5nIGlzIGZv
dW5kIGluIHRoZSB3ZWIKKyAgICAgKiBwYWdlIHRleHQuIEl0IHdpbGwgYmUgaXNzdWVkIChpZiB0
aGUgdGV4dCBpcyBmb3VuZCkKKyAgICAgKiBhc3luY2hyb25vdXNseSBhZnRlciBhIGNhbGwgdG8g
d2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfdGV4dCgpLAorICAgICAqIHdlYmtpdF9maW5k
X2NvbnRyb2xsZXJfbmV4dCgpIG9yIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfcHJldmlvdXMoKS4K
KyAgICAgKi8KKyAgICBzaWduYWxzW0ZPVU5EX1NUUklOR10gPQorICAgICAgICBnX3NpZ25hbF9u
ZXcoImZvdW5kLXN0cmluZyIsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFT
UyhnT2JqZWN0Q2xhc3MpLAorICAgICAgICAgICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1Qs
CisgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgZ19j
Y2xvc3VyZV9tYXJzaGFsX1ZPSURfX1ZPSUQsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVf
Tk9ORSwgMCk7CisgICAgLyoqCisgICAgICogV2ViS2l0RmluZENvbnRyb2xsZXI6OmZhaWxlZC10
by1maW5kLXN0cmluZzoKKyAgICAgKiBAZmluZF9jb250cm9sbGVyOiB0aGUgI1dlYktpdEZpbmRD
b250cm9sbGVyCisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gYSBz
ZWFyY2ggb3BlcmF0aW9uIGRvZXMgbm90IGZpbmQKKyAgICAgKiBhbnkgcmVzdWx0IGZvciB0aGUg
Z2l2ZW4gc3RyaW5nLiBJdCB3aWxsIGJlIGlzc3VlZCAoaWYgdGhlIHRleHQKKyAgICAgKiBpcyBu
b3QgZm91bmQpIGFzeW5jaHJvbm91c2x5IGFmdGVyIGEgY2FsbCB0bworICAgICAqIHdlYmtpdF9m
aW5kX2NvbnRyb2xsZXJfc2VhcmNoX3RleHQoKSwgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9uZXh0
KCkgb3IKKyAgICAgKiB3ZWJraXRfZmluZF9jb250cm9sbGVyX3ByZXZpb3VzKCkuCisgICAgICov
CisgICAgc2lnbmFsc1tGQUlMRURfVE9fRklORF9TVFJJTkddID0KKyAgICAgICAgZ19zaWduYWxf
bmV3KCJmYWlsZWQtdG8tZmluZC1zdHJpbmciLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBF
X0ZST01fQ0xBU1MoZ09iamVjdENsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgIEdfU0lHTkFM
X1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICAgICAg
ICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19WT0lELAorICAgICAgICAgICAgICAgICAg
ICAgR19UWVBFX05PTkUsIDApOworCisgICAgLyoqCisgICAgICogV2ViS2l0RmluZENvbnRyb2xs
ZXI6OmNvdW50ZWQtbWF0Y2hlczoKKyAgICAgKiBAZmluZF9jb250cm9sbGVyOiB0aGUgI1dlYktp
dEZpbmRDb250cm9sbGVyCisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHRv
IGluZm9ybSBhYm91dCB0aGUgbnVtYmVyIG9mIG1hdGNoZXMKKyAgICAgKiBmb3VuZCBpbiB0aGUg
I1dlYktpdFdlYlZpZXcgZm9yIHRoZSBnaXZlbiBzdHJpbmcuICBJdCB3aWxsIGJlCisgICAgICog
aXNzdWVkIGFzeW5jaHJvbm91c2x5IGFmdGVyIGEgY2FsbCB0bworICAgICAqIHdlYmtpdF9maW5k
X2NvbnRyb2xsZXJfY291bnRfbWF0Y2hlcygpLgorICAgICAqLworICAgIHNpZ25hbHNbQ09VTlRF
RF9NQVRDSEVTXSA9CisgICAgICAgIGdfc2lnbmFsX25ldygiY291bnRlZC1tYXRjaGVzIiwKKyAg
ICAgICAgICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGdPYmplY3RDbGFzcyksCisgICAg
ICAgICAgICAgICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAg
IDAsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9f
Vk9JRCwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9OT05FLCAwKTsKK30KKworLyoqCisg
KiB3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9zZWFyY2hfc3RyaW5nOgorICogQGZpbmRfY29u
dHJvbGxlcjogdGhlICNXZWJLaXRGaW5kQ29udHJvbGxlcgorICoKKyAqIEdldCB0aGUgc3RyaW5n
IHRvIGxvb2sgZm9yLiBUaGlzIHN0cmluZyBpcyBwYXNzZWQgdG8gZWl0aGVyCisgKiB3ZWJraXRf
ZmluZF9jb250cm9sbGVyX3NlYXJjaF9zdHJpbmcoKSBvcgorICogd2Via2l0X2ZpbmRfY29udHJv
bGxlcl9jb3VudF9tYXRjaGVzKCkuCisgKgorICogUmV0dXJuczogdGhlIHN0cmluZyB0byBsb29r
IGZvciBpbiB0aGUgI1dlYktpdFdlYlZpZXcuCisgKi8KK2NvbnN0IGNoYXIqIHdlYmtpdF9maW5k
X2NvbnRyb2xsZXJfZ2V0X3NlYXJjaF9zdHJpbmcoV2ViS2l0RmluZENvbnRyb2xsZXIqIGZpbmRD
b250cm9sbGVyKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19GSU5EX0NP
TlRST0xMRVIoZmluZENvbnRyb2xsZXIpLCAwKTsKKworICAgIHJldHVybiBmaW5kQ29udHJvbGxl
ci0+cHJpdi0+c3RyaW5nLmRhdGEoKTsKK30KKworLyoqCisgKiB3ZWJraXRfZmluZF9jb250cm9s
bGVyX2dldF9tYXRjaF9jb3VudDoKKyAqIEBmaW5kX2NvbnRyb2xsZXI6IHRoZSAjV2ViS2l0Rmlu
ZENvbnRyb2xsZXIKKyAqCisgKiBHZXQgdGhlIG51bWJlciBvZiBtYXRjaGVzIGZvdW5kIGZvciB0
aGUgdGV4dCBzZWFyY2hlZCBpbiB0aGUKKyAqICNXZWJLaXRXZWJWaWV3LiBJZiB0aGUgbnVtYmVy
IG9mIG1hdGNoZXMgaXMgaGlnaGVyIHRoYW4gdGhlIG1heGltdW0KKyAqIG51bWJlciBvZiBtYXRj
aGVzIGFsbG93ZWQgKHRoZSBsYXN0IHBhcmFtZXRlciB0byB0aGUKKyAqIHdlYmtpdF93ZWJfdmll
d19zZWFyY2goKSBjYWxsKSB0aGlzIGZ1bmN0aW9uIHJldHVybnMgR19NQVhVSU5ULgorICoKKyAq
IFJldHVybnM6IHRoZSBudW1iZXIgb2YgbWF0Y2hlcyBmb3VuZCBvciBHX01BWFVJTlQgaWYgdGhl
IG51bWJlciBvZgorICogbWF0Y2hlcyBleGNlZWRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBtYXRj
aGVzIGFsbG93ZWQuCisgKi8KK2d1aW50IHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X21hdGNo
X2NvdW50KFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxlcikKK3sKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRklORF9DT05UUk9MTEVSKGZpbmRDb250cm9sbGVy
KSwgMCk7CisKKyAgICByZXR1cm4gZmluZENvbnRyb2xsZXItPnByaXYtPm1hdGNoQ291bnQ7Cit9
CisKKy8qKgorICogd2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfb3B0aW9uczoKKyAqIEBmaW5k
X2NvbnRyb2xsZXI6IHRoZSAjV2ViS2l0RmluZENvbnRyb2xsZXIKKyAqCisgKiBHZXQgdGhlIG9w
dGlvbnMgdXNlZCB0byB0dW5lIHVwIHRoZSBmaW5kIG9wZXJhdGlvbi4KKyAqCisgKiBSZXR1cm5z
OiB0aGUgZmluZCBvcHRpb25zLgorICovCitXZWJLaXRGaW5kT3B0aW9ucyB3ZWJraXRfZmluZF9j
b250cm9sbGVyX2dldF9vcHRpb25zKFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxl
cikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRklORF9DT05UUk9MTEVS
KGZpbmRDb250cm9sbGVyKSwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FKTsKKworICAgIHJldHVy
biBmaW5kQ29udHJvbGxlci0+cHJpdi0+ZmluZE9wdGlvbnM7Cit9CisKKy8qKgorICogd2Via2l0
X2ZpbmRfY29udHJvbGxlcl9nZXRfbWF4X21hdGNoX2NvdW50OgorICogQGZpbmRfY29udHJvbGxl
cjogdGhlICNXZWJLaXRGaW5kQ29udHJvbGxlcgorICoKKyAqIEdldCB0aGUgbWF4aW11bSBudW1i
ZXIgb2YgbWF0Y2hlcyB0byByZXBvcnQgZHVyaW5nIGEgdGV4dAorICogbG9va3VwLiBUaGlzIG51
bWJlciBpcyBwYXNzZWQgYXMgdGhlIGxhc3QgYXJndW1lbnQgb2YKKyAqIHdlYmtpdF9maW5kX2Nv
bnRyb2xsZXJfc2VhcmNoX3N0cmluZygpIG9yCisgKiB3ZWJraXRfZmluZF9jb250cm9sbGVyX2Nv
dW50X21hdGNoZXMoKS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgbWF4aW11bSBudW1iZXIgb2YgbWF0
Y2hlcyB0byByZXBvcnQuCisgKiovCitndWludCB3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9t
YXhfbWF0Y2hfY291bnQoV2ViS2l0RmluZENvbnRyb2xsZXIqIGZpbmRDb250cm9sbGVyKQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19GSU5EX0NPTlRST0xMRVIoZmluZENv
bnRyb2xsZXIpLCAwKTsKKworICAgIHJldHVybiBmaW5kQ29udHJvbGxlci0+cHJpdi0+bWF4TWF0
Y2hDb3VudDsKK30KKworLyoqCisgKiB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9zdHJp
bmc6CisgKiBAZmluZF9jb250cm9sbGVyOiB0aGUgI1dlYktpdEZpbmRDb250cm9sbGVyCisgKiBA
c2VhcmNoX3N0cmluZzogdGhlIHN0cmluZyB0byBsb29rIGZvcgorICogQGZpbmRfb3B0aW9uczog
dGhlICNXZWJLaXRGaW5kT3B0aW9ucyB1c2VkIGluIHRoZSBzZWFyY2gKKyAqIEBtYXhfbWF0Y2hf
Y291bnQ6IHRoZSBtYXhpbXVtIG51bWJlciBvZiBtYXRjaGVzIGFsbG93ZWQgaW4gdGhlIHNlYXJj
aAorICoKKyAqIExvb2sgZm9yIEBzZWFyY2hTdHJpbmcgaW4gdGhlICNXZWJLaXRXZWJWaWV3IGFz
c29jaWF0ZWQgd2l0aAorICogQGZpbmRfY29udHJvbGxlci4gVGhlIG91dGNvbWUgb2YgdGhlIHNl
YXJjaCB3aWxsIGJlIGFzeW5jaHJvbm91c2x5CisgKiBwcm92aWRlZCBieSB0aGUgV2ViS2l0Rmlu
ZENvbnRyb2xsZXI6OmZvdW5kLXN0cmluZyBhbmQKKyAqIFdlYktpdEZpbmRDb250cm9sbGVyOjpm
YWlsZWQtdG8tZmluZC1zdHJpbmcuCisgKgorICogVG8gbG9vayBmb3IgdGhlIG5leHQgb3IgcHJl
dmlvdXMgb2NjdXJyZW5jZXMgb2YgdGhlIHNhbWUgc3RyaW5nCisgKiB3aXRoIHRoZSBzYW1lIGZp
bmQgb3B0aW9ucyB1c2Ugd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfbmV4dCgpCisgKiBh
bmQvb3Igd2Via2l0X2ZpbmRfb3B0aW9uc19zZWFyY2hfcHJldmlvdXMoKS4gVGhlCisgKiAjV2Vi
S2l0RmluZENvbnRyb2xsZXIgd2lsbCB1c2UgdGhlIHNhbWUgc3RyaW5nIGFuZCBvcHRpb25zIGZv
ciB0aGUKKyAqIGZvbGxvd2luZyBzZWFyY2hlcyB1bmxlc3MgdGhleSBhcmUgbW9kaWZpZWQgYnkg
YW5vdGhlciBjYWxsIHRvIHRoaXMKKyAqIG1ldGhvZC4KKyAqCisgKiBOb3RlIHRoYXQgaWYgdGhl
IG51bWJlciBvZiBtYXRjaGVzIGlzIGhpZ2hlciB0aGFuIEBtYXhfbWF0Y2hfY291bnQKKyAqIHRo
ZW4gd2Via2l0X2ZpbmRfc3RyaW5nX2dldF9tYXRjaF9jb3VudCgpIHdpbGwgcmV0dXJuIEdfTUFY
VUlOVAorICogaW5zdGVhZCBvZiB0aGUgYWN0dWFsIG51bWJlciBvZiBtYXRjaGVzLgorICovCit2
b2lkIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX3N0cmluZyhXZWJLaXRGaW5kQ29udHJv
bGxlciogZmluZENvbnRyb2xsZXIsIGNvbnN0IGdjaGFyKiBzZWFyY2hTdHJpbmcsIFdlYktpdEZp
bmRPcHRpb25zIGZpbmRPcHRpb25zLCBndWludCBtYXhNYXRjaENvdW50KQoreworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0ZJTkRfQ09OVFJPTExFUihmaW5kQ29udHJvbGxlcikpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VhcmNoU3RyaW5nKTsKKworICAgIGdfb2JqZWN0X3NldChm
aW5kQ29udHJvbGxlciwgInN0cmluZyIsIHNlYXJjaFN0cmluZywgIm9wdGlvbnMiLCBmaW5kT3B0
aW9ucywgIm1heC1tYXRjaC1jb3VudCIsIG1heE1hdGNoQ291bnQsIE5VTEwpOworCisgICAgV0tG
aW5kT3B0aW9ucyB3a0ZpbmRPcHRpb25zID0gc3RhdGljX2Nhc3Q8V0tGaW5kT3B0aW9ucz4oZmlu
ZENvbnRyb2xsZXItPnByaXYtPmZpbmRPcHRpb25zKTsKKyAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gd2tTZWFyY2hUZXh0KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KGZpbmRDb250cm9sbGVyLT5wcml2LT5zdHJpbmcuZGF0YSgpKSk7CisgICAgV0tQYWdlRmluZFN0
cmluZyhmaW5kQ29udHJvbGxlci0+cHJpdi0+d2tQYWdlLCB3a1NlYXJjaFRleHQuZ2V0KCksIHdr
RmluZE9wdGlvbnMsIGZpbmRDb250cm9sbGVyLT5wcml2LT5tYXhNYXRjaENvdW50KTsKK30KKwor
LyoqCisgKiB3ZWJraXRfZmluZF9jb250cm9sbGVyX25leHQ6CisgKiBAZmluZF9jb250cm9sbGVy
OiB0aGUgI1dlYktpdEZpbmRDb250cm9sbGVyCisgKgorICogTG9vayBmb3IgdGhlIG5leHQgb2Nj
dXJyZW5jZSBvZiB0aGUgdGV4dCBwYXNzZWQKKyAqIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2Vh
cmNoX3N0cmluZygpIG9yCisgKiB3ZWJraXRfZmluZF9jb250cm9sbGVyX2NvdW50X21hdGNoZXMo
KSBpbiB0aGUKKyAqICNXZWJLaXRXZWJWaWV3LiBDYWxsZXJzIG11c3QgYmUgY29ubmVjdGVkIHRv
CisgKiBXZWJLaXRGaW5kQ29udHJvbGxlcjo6Zm91bmQtc3RyaW5nIGFuZC9vcgorICogV2ViS2l0
RmluZENvbnRyb2xsZXI6OmZhaWxlZC10by1maW5kLXN0cmluZyBzaWduYWxzIHRvIGdldCB0aGUK
KyAqIHJlc3VsdCBvZiB0aGUgc2VhcmNoLgorICovCit2b2lkIHdlYmtpdF9maW5kX2NvbnRyb2xs
ZXJfbmV4dChXZWJLaXRGaW5kQ29udHJvbGxlciogZmluZENvbnRyb2xsZXIpCit7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfRklORF9DT05UUk9MTEVSKGZpbmRDb250cm9sbGVyKSk7
CisKKyAgICB1bnNpZ25lZCBuZXdPcHRpb25zID0gZmluZENvbnRyb2xsZXItPnByaXYtPmZpbmRP
cHRpb25zICYgfldFQktJVF9GSU5EX09QVElPTlNfQkFDS1dBUkRTOworICAgIGZpbmRDb250cm9s
bGVyLT5wcml2LT5maW5kT3B0aW9ucyA9IHN0YXRpY19jYXN0PFdlYktpdEZpbmRPcHRpb25zPihu
ZXdPcHRpb25zKTsKKyAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9zdHJpbmcoZmlu
ZENvbnRyb2xsZXIsIGZpbmRDb250cm9sbGVyLT5wcml2LT5zdHJpbmcuZGF0YSgpLCBmaW5kQ29u
dHJvbGxlci0+cHJpdi0+ZmluZE9wdGlvbnMsIGZpbmRDb250cm9sbGVyLT5wcml2LT5tYXhNYXRj
aENvdW50KTsKK30KKworLyoqCisgKiB3ZWJraXRfZmluZF9jb250cm9sbGVyX3ByZXZpb3VzOgor
ICogQGZpbmRfY29udHJvbGxlcjogdGhlICNXZWJLaXRGaW5kQ29udHJvbGxlcgorICoKKyAqIExv
b2sgZm9yIHRoZSBwcmV2aW91cyBvY2N1cnJlbmNlIG9mIHRoZSB0ZXh0IHBhc3NlZCB0byBlaXRo
ZXIKKyAqIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX3N0cmluZygpIG9yCisgKiB3ZWJr
aXRfZmluZF9jb250cm9sbGVyX2NvdW50X21hdGNoZXMoKSBpbiB0aGUKKyAqICNXZWJLaXRXZWJW
aWV3LiBDYWxsZXJzIG11c3QgYmUgY29ubmVjdGVkIHRvCisgKiBXZWJLaXRGaW5kQ29udHJvbGxl
cjo6Zm91bmQtc3RyaW5nIGFuZC9vcgorICogV2ViS2l0RmluZENvbnRyb2xsZXI6OmZhaWxlZC10
by1maW5kLXN0cmluZyBzaWduYWxzIHRvIGdldCB0aGUKKyAqIHJlc3VsdCBvZiB0aGUgc2VhcmNo
LgorICovCit2b2lkIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfcHJldmlvdXMoV2ViS2l0RmluZENv
bnRyb2xsZXIqIGZpbmRDb250cm9sbGVyKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0lTX0ZJTkRfQ09OVFJPTExFUihmaW5kQ29udHJvbGxlcikpOworCisgICAgdW5zaWduZWQgbmV3
T3B0aW9ucyA9IGZpbmRDb250cm9sbGVyLT5wcml2LT5maW5kT3B0aW9ucyB8IFdFQktJVF9GSU5E
X09QVElPTlNfQkFDS1dBUkRTOworICAgIGZpbmRDb250cm9sbGVyLT5wcml2LT5maW5kT3B0aW9u
cyA9IHN0YXRpY19jYXN0PFdlYktpdEZpbmRPcHRpb25zPihuZXdPcHRpb25zKTsKKyAgICB3ZWJr
aXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9zdHJpbmcoZmluZENvbnRyb2xsZXIsIGZpbmRDb250
cm9sbGVyLT5wcml2LT5zdHJpbmcuZGF0YSgpLCBmaW5kQ29udHJvbGxlci0+cHJpdi0+ZmluZE9w
dGlvbnMsIGZpbmRDb250cm9sbGVyLT5wcml2LT5tYXhNYXRjaENvdW50KTsKK30KKworLyoqCisg
KiB3ZWJraXRfZmluZF9jb250cm9sbGVyX2NvdW50X21hdGNoZXM6CisgKiBAZmluZF9jb250cm9s
bGVyOiB0aGUgI1dlYktpdEZpbmRDb250cm9sbGVyCisgKiBAc2VhcmNoX3N0cmluZzogdGhlIHN0
cmluZyB0byBsb29rIGZvcgorICogQGZpbmRfb3B0aW9uczogdGhlICNXZWJLaXRGaW5kT3B0aW9u
cyB1c2VkIGluIHRoZSBzZWFyY2gKKyAqIEBtYXhfbWF0Y2hfY291bnQ6IHRoZSBtYXhpbXVtIG51
bWJlciBvZiBtYXRjaGVzIGFsbG93ZWQgaW4gdGhlIHNlYXJjaAorICoKKyAqIENvdW50IHRoZSBu
dW1iZXIgb2YgbWF0Y2hlcyBmb3IgQHNlYXJjaF9zdHJpbmcgZm91bmQgaW4gdGhlCisgKiAjV2Vi
S2l0V2ViVmlldyB3aXRoIHRoZSBwcm92aWRlZCBAZmluZF9vcHRpb25zLiBUaGUgbnVtYmVyIG9m
CisgKiBtYXRjaGVzIHdpbGwgYmUgYXZhaWxhYmxlIHZpYQorICogd2Via2l0X2ZpbmRfY29udHJv
bGxlcl9nZXRfbWF0Y2hfY291bnQoKSBhZnRlciByZWNlaXZpbmcgdGhlCisgKiBXZWJLaXRGaW5k
Q29udHJvbGxlcjo6Y291bnRlZC1tYXRjaGVzIHNpZ25hbC4KKyAqLwordm9pZCB3ZWJraXRfZmlu
ZF9jb250cm9sbGVyX2NvdW50X21hdGNoZXMoV2ViS2l0RmluZENvbnRyb2xsZXIqIGZpbmRDb250
cm9sbGVyLCBjb25zdCBnY2hhciogc2VhcmNoU3RyaW5nLCBXZWJLaXRGaW5kT3B0aW9ucyBmaW5k
T3B0aW9ucywgZ3VpbnQgbWF4TWF0Y2hDb3VudCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9JU19GSU5EX0NPTlRST0xMRVIoZmluZENvbnRyb2xsZXIpKTsKKyAgICBnX3JldHVybl9p
Zl9mYWlsKHNlYXJjaFN0cmluZyk7CisKKyAgICBnX29iamVjdF9zZXQoZmluZENvbnRyb2xsZXIs
ICJzdHJpbmciLCBzZWFyY2hTdHJpbmcsICJvcHRpb25zIiwgZmluZE9wdGlvbnMsICJtYXgtbWF0
Y2gtY291bnQiLCBtYXhNYXRjaENvdW50LCBOVUxMKTsKKworICAgIFdLRmluZE9wdGlvbnMgd2tG
aW5kT3B0aW9ucyA9IHN0YXRpY19jYXN0PFdLRmluZE9wdGlvbnM+KGZpbmRDb250cm9sbGVyLT5w
cml2LT5maW5kT3B0aW9ucyk7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrU2VhcmNo
VGV4dChBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhmaW5kQ29udHJvbGxl
ci0+cHJpdi0+c3RyaW5nLmRhdGEoKSkpOworICAgIFdLUGFnZUNvdW50U3RyaW5nTWF0Y2hlcyhm
aW5kQ29udHJvbGxlci0+cHJpdi0+d2tQYWdlLCB3a1NlYXJjaFRleHQuZ2V0KCksIHdrRmluZE9w
dGlvbnMsIGZpbmRDb250cm9sbGVyLT5wcml2LT5tYXhNYXRjaENvdW50KTsKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbmRDb250cm9sbGVy
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaW5kQ29udHJvbGxl
ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjMyNjY0NjVlNzdjMDFjNjdlZWQ4MzgzNTRjZThlNDFkNWUwYWMwNDQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRGaW5kQ29udHJvbGxlci5oCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVQyX0hfSU5TSURFX18pICYm
ICFkZWZpbmVkKFdFQktJVDJfQ09NUElMQVRJT04pCisjZXJyb3IgIk9ubHkgPHdlYmtpdDIvd2Vi
a2l0Mi5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2Vi
S2l0RmluZENvbnRyb2xsZXJfaAorI2RlZmluZSBXZWJLaXRGaW5kQ29udHJvbGxlcl9oCisKKyNp
bmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5o
PgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfRklORF9DT05UUk9MTEVS
ICAgICAgICAgICAgKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X3R5cGUoKSkKKyNkZWZpbmUg
V0VCS0lUX0ZJTkRfQ09OVFJPTExFUihvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNU
QU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9GSU5EX0NPTlRST0xMRVIsIFdlYktpdEZpbmRD
b250cm9sbGVyKSkKKyNkZWZpbmUgV0VCS0lUX0ZJTkRfQ09OVFJPTExFUl9DTEFTUyhrbGFzcykg
ICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9GSU5EX0NP
TlRST0xMRVIsIFdlYktpdEZpbmRDb250cm9sbGVyQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNf
RklORF9DT05UUk9MTEVSKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUo
KG9iaiksIFdFQktJVF9UWVBFX0ZJTkRfQ09OVFJPTExFUikpCisjZGVmaW5lIFdFQktJVF9JU19G
SU5EX0NPTlRST0xMRVJfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xh
c3MpLCAgV0VCS0lUX1RZUEVfRklORF9DT05UUk9MTEVSKSkKKyNkZWZpbmUgV0VCS0lUX0ZJTkRf
Q09OVFJPTExFUl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9i
aiksICBXRUJLSVRfVFlQRV9GSU5EX0NPTlRST0xMRVIsIFdlYktpdEZpbmRDb250cm9sbGVyQ2xh
c3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RmluZENvbnRyb2xsZXJQcml2YXRlIFdlYktp
dEZpbmRDb250cm9sbGVyUHJpdmF0ZTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRGaW5kQ29udHJv
bGxlciAgICAgICAgV2ViS2l0RmluZENvbnRyb2xsZXI7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
RmluZENvbnRyb2xsZXJDbGFzcyAgIFdlYktpdEZpbmRDb250cm9sbGVyQ2xhc3M7CisKKy8qKgor
ICogV2ViS2l0RmluZE9wdGlvbnM6CisgKiBAV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FOiBubyBz
ZWFyY2ggZmxhZ3MsIHRoaXMgbWVhbnMgYSBjYXNlIHNlbnNpdGl2ZSwgbm8gd3JhcCwgZm9yd2Fy
ZCBvbmx5IHNlYXJjaAorICogQFdFQktJVF9GSU5EX09QVElPTlNfQ0FTRV9JTlNFTlNJVElWRTog
Y2FzZSBpbnNlbnNpdGl2ZSBzZWFyY2gKKyAqIEBXRUJLSVRfQVRfV09SRF9TVEFSVFM6IHNlYXJj
aCBvbmx5IGF0IHRoZSBiZWdpbmluZyBvZiB0aGUgd29yZHMKKyAqIEBXRUJLSVRfRklORF9PUFRJ
T05TX1RSRUFUX01FRElBTF9DQVBJVEFMX0FTX1dPUkRfU1RBUlQ6IHRyZWF0IGNhcGl0YWwgbGV0
dGVycyBpbiB0aGUgbWlkZGxlIG9mIHdvcmRzIGFzIHdvcmQgc3RhcnQKKyAqIEBXRUJLSVRfRklO
RF9PUFRJT05TX0JBQ0tXQVJEUzogc2VhcmNoIGJhY2t3YXJkcworICogQFdFQktJVF9GSU5EX09Q
VElPTlNfV1JBUF9BUk9VTkQ6IGlmIG5vdCBwcmVzZW50IHNlYXJjaCB3aWxsIHN0b3AgYXQgdGhl
IGVuZCBvZiB0aGUgZG9jdW1lbnQKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgV0VCS0lUX0ZJTkRf
T1BUSU9OU19OT05FLAorCisgIFdFQktJVF9GSU5EX09QVElPTlNfQ0FTRV9JTlNFTlNJVElWRSA9
ICAgICAgICAgICAgICAgICAgIDEgPDwgMCwKKyAgV0VCS0lUX0ZJTkRfT1BUSU9OU19BVF9XT1JE
X1NUQVJUUyA9ICAgICAgICAgICAgICAgICAgICAgMSA8PCAxLAorICBXRUJLSVRfRklORF9PUFRJ
T05TX1RSRUFUX01FRElBTF9DQVBJVEFMX0FTX1dPUkRfU1RBUlQgPSAxIDw8IDIsCisgIFdFQktJ
VF9GSU5EX09QVElPTlNfQkFDS1dBUkRTID0gICAgICAgICAgICAgICAgICAgICAgICAgIDEgPDwg
MywKKyAgV0VCS0lUX0ZJTkRfT1BUSU9OU19XUkFQX0FST1VORCA9ICAgICAgICAgICAgICAgICAg
ICAgICAgMSA8PCA0LAorfSBXZWJLaXRGaW5kT3B0aW9uczsKKworc3RydWN0IF9XZWJLaXRGaW5k
Q29udHJvbGxlciB7CisgICAgR09iamVjdCBwYXJlbnQ7CisKKyAgLyo8IHByaXZhdGUgPiovCisg
IFdlYktpdEZpbmRDb250cm9sbGVyUHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0
RmluZENvbnRyb2xsZXJDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307
CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X3R5cGUgICAg
ICAgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2ZpbmRfY29udHJvbGxl
cl9zZWFyY2hfc3RyaW5nICAgICAgIChXZWJLaXRGaW5kQ29udHJvbGxlciAqZmluZF9jb250cm9s
bGVyLAorCQkJCQkgICAgY29uc3QgZ2NoYXIgICAgICAgICAgKnNlYXJjaF9zdHJpbmcsCisJCQkJ
CSAgICBXZWJLaXRGaW5kT3B0aW9ucyAgICAgZmluZF9vcHRpb25zLAorCQkJCQkgICAgZ3VpbnQg
ICAgICAgICAgICAgICAgIG1heF9tYXRjaF9jb3VudCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X2ZpbmRfY29udHJvbGxlcl9jb3VudF9tYXRjaGVzICAgICAgIChXZWJLaXRGaW5kQ29udHJv
bGxlciAqZmluZF9jb250cm9sbGVyLAorCQkJCQkgICAgY29uc3QgZ2NoYXIgICAgICAgICAgKnNl
YXJjaF9zdHJpbmcsCisJCQkJCSAgICBXZWJLaXRGaW5kT3B0aW9ucyAgICAgZmluZF9vcHRpb25z
LAorCQkJCQkgICAgZ3VpbnQgICAgICAgICAgICAgICAgIG1heF9tYXRjaF9jb3VudCk7CisKK1dF
QktJVF9BUEkgY29uc3QgZ2NoYXIqCit3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9zZWFyY2hf
c3RyaW5nICAgKFdlYktpdEZpbmRDb250cm9sbGVyICpmaW5kX2NvbnRyb2xsZXIpOworCitXRUJL
SVRfQVBJIGd1aW50Cit3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9tYXRjaF9jb3VudCAgICAg
KFdlYktpdEZpbmRDb250cm9sbGVyICpmaW5kX2NvbnRyb2xsZXIpOworCitXRUJLSVRfQVBJIFdl
YktpdEZpbmRPcHRpb25zCit3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9vcHRpb25zICAgICAg
ICAgKFdlYktpdEZpbmRDb250cm9sbGVyICpmaW5kX2NvbnRyb2xsZXIpOworCitXRUJLSVRfQVBJ
IGd1aW50Cit3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9tYXhfbWF0Y2hfY291bnQgKFdlYktp
dEZpbmRDb250cm9sbGVyICpmaW5kX2NvbnRyb2xsZXIpOworCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF9maW5kX2NvbnRyb2xsZXJfc3RhcnQgICAgICAgICAgICAgICAoV2ViS2l0RmluZENvbnRy
b2xsZXIgKmZpbmRfY29udHJvbGxlcik7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2ZpbmRf
Y29udHJvbGxlcl9uZXh0ICAgICAgICAgICAgICAgIChXZWJLaXRGaW5kQ29udHJvbGxlciAqZmlu
ZF9jb250cm9sbGVyKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZmluZF9jb250cm9sbGVy
X3ByZXZpb3VzICAgICAgICAgICAgKFdlYktpdEZpbmRDb250cm9sbGVyICpmaW5kX2NvbnRyb2xs
ZXIpOworCitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbmRDb250cm9sbGVyUHJpdmF0ZS5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmluZENvbnRyb2xsZXJQcml2YXRlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZDdhZDJjNDJmYzVkNDEwMGJhOTdkZDI1NmM4ZTgwOWVkZmE4MjQ5OQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZp
bmRDb250cm9sbGVyUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RmluZENvbnRyb2xsZXJQcml2YXRl
X2gKKyNkZWZpbmUgV2ViS2l0RmluZENvbnRyb2xsZXJQcml2YXRlX2gKKworI2luY2x1ZGUgIldl
YktpdEZpbmRDb250cm9sbGVyLmgiCisjaW5jbHVkZSA8V2ViS2l0Mi9XZWJLaXQyLmg+CisKK3Zv
aWQgd2Via2l0RmluZEF0dGFjaEZpbmRDbGllbnRUb1BhZ2UoV2ViS2l0RmluZENvbnRyb2xsZXIq
LCBXS1BhZ2VSZWYpOworCisjZW5kaWYgLy8gV2ViS2l0RmluZENvbnRyb2xsZXJQcml2YXRlX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZh
dGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaApp
bmRleCAzYWQ2YzE1MzZlNDc3NWFlYjFiNmRjNjVhMmUwZGQ1YjBkM2RlM2E0Li42N2FjMTk4ZDg1
MjE1YWMwMDhmMGRkOWFmMWQ0NGQ2NzU0ZjM5MDNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5oCkBAIC00MSw2ICs0MSw5IEBAIEdfQkVH
SU5fREVDTFMKICNkZWZpbmUgQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTSh3ZWJraXROYW1l
LCB3ZWJjb3JlTmFtZSkgXAogICAgICAgICBDT01QSUxFX0FTU0VSVChpbnQod2Via2l0TmFtZSkg
PT0gaW50KFdlYkNvcmU6OndlYmNvcmVOYW1lKSwgbWlzbWF0Y2hpbmdFbnVtcykKIAorI2RlZmlu
ZSBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19BUElfRU5VTShhcGlOYW1lLCB3ZWJraXROYW1lKSBc
CisgICAgICAgIENPTVBJTEVfQVNTRVJUKGludChhcGlOYW1lKSA9PSBpbnQod2Via2l0TmFtZSks
IG1pc21hdGNoaW5nRW51bXMpCisKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZiAvLyBXZWJLaXRQcml2
YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Vmlldy5jcHAKaW5kZXggY2Y5Yzc4NTFhMzNhNzI5Njk5NmE0ZmM5ZWMwMDI0MzA5ZTc4OTUyOC4u
NzI3ZTRhZjE4Y2ExZjliMTcxNDc5ZjYwZGJiNDI0OTkyNDIzN2RjZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKQEAgLTI0LDYg
KzI0LDcgQEAKICNpbmNsdWRlICJXZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlLmgiCiAjaW5j
bHVkZSAiV2ViS2l0RW51bVR5cGVzLmgiCiAjaW5jbHVkZSAiV2ViS2l0RXJyb3IuaCIKKyNpbmNs
dWRlICJXZWJLaXRGaW5kQ29udHJvbGxlclByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRNYXJz
aGFsLmgiCiAjaW5jbHVkZSAiV2ViS2l0U2V0dGluZ3NQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2Vi
S2l0VUlDbGllbnQuaCIKQEAgLTgxLDYgKzgyLDcgQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3UHJp
dmF0ZSB7CiAgICAgR1JlZlB0cjxXZWJLaXRCYWNrRm9yd2FyZExpc3Q+IGJhY2tGb3J3YXJkTGlz
dDsKICAgICBHUmVmUHRyPFdlYktpdFNldHRpbmdzPiBzZXR0aW5nczsKICAgICBHUmVmUHRyPFdl
YktpdFdpbmRvd1Byb3BlcnRpZXM+IHdpbmRvd1Byb3BlcnRpZXM7CisgICAgR1JlZlB0cjxXZWJL
aXRGaW5kQ29udHJvbGxlcj4gZmluZENvbnRyb2xsZXI7CiB9OwogCiBzdGF0aWMgZ3VpbnQgc2ln
bmFsc1tMQVNUX1NJR05BTF0gPSB7IDAsIH07CkBAIC0xMjAyLDMgKzEyMDQsMjggQEAgZ2RvdWJs
ZSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3pvb21fbGV2ZWwoV2ViS2l0V2ViVmlldyogd2ViVmlldykK
ICAgICBXS1BhZ2VSZWYgd2tQYWdlID0gdG9BUEkod2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKFdF
QktJVF9XRUJfVklFV19CQVNFKHdlYlZpZXcpKSk7CiAgICAgcmV0dXJuIFdLUGFnZUdldFBhZ2Va
b29tRmFjdG9yKHdrUGFnZSk7CiB9CisKKy8qKgorICogd2Via2l0X3dlYl92aWV3X2dldF9maW5k
X2NvbnRyb2xsZXI6CisgKiBAd2ViX3ZpZXc6IHRoZSAjV2ViS2l0V2ViVmlldworICoKKyAqIEdl
dHMgdGhlICNXZWJLaXRGaW5kQ29udHJvbGxlciB0aGF0IHdpbGwgYWxsb3cgdGhlIGNhbGxlciB0
byBxdWVyeQorICogdGhlICNXZWJLaXRXZWJWaWV3IGZvciB0aGUgdGV4dCB0byBsb29rIGZvci4K
KyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IHRoZSAjV2ViS2l0RmluZENvbnRyb2xs
ZXIgYXNzb2NpYXRlZCB0bworICogdGhpcyBwYXJ0aWN1bGFyICNXZWJLaXRXZWJWaWV3LgorICov
CitXZWJLaXRGaW5kQ29udHJvbGxlciogd2Via2l0X3dlYl92aWV3X2dldF9maW5kX2NvbnRyb2xs
ZXIoV2ViS2l0V2ViVmlldyAqd2ViVmlldykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldyksIDApOworCisgICAgaWYgKCF3ZWJWaWV3LT5wcml2
LT5maW5kQ29udHJvbGxlcikgeworICAgICAgICBXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jh
c2UgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3ZWJWaWV3KTsKKyAgICAgICAgV2ViUGFnZVByb3h5
KiBwYWdlID0gd2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKHdlYlZpZXdCYXNlKTsKKworICAgICAg
ICB3ZWJWaWV3LT5wcml2LT5maW5kQ29udHJvbGxlciA9IGFkb3B0R1JlZihXRUJLSVRfRklORF9D
T05UUk9MTEVSKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9GSU5EX0NPTlRST0xMRVIsIE5VTEwp
KSk7CisgICAgICAgIHdlYmtpdEZpbmRBdHRhY2hGaW5kQ2xpZW50VG9QYWdlKHdlYlZpZXctPnBy
aXYtPmZpbmRDb250cm9sbGVyLmdldCgpLCB0b0FQSShwYWdlKSk7CisgICAgfQorCisgICAgcmV0
dXJuIHdlYlZpZXctPnByaXYtPmZpbmRDb250cm9sbGVyLmdldCgpOworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCmluZGV4IGEyNWM0Mzhk
ZDkwMTkzNTQwYjA1NWZmNmM2NzRmYTdhZDM2N2VmODEuLjZkMjRkZWQwMjEyYTJmZmJjMmUwZjYw
ODk3MjQ0ZjlmZGMzMWYwMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3LmgKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgPHdlYmtp
dDIvV2ViS2l0QmFja0ZvcndhcmRMaXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZp
bmVzLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRGaW5kQ29udHJvbGxlci5oPgogI2luY2x1
ZGUgPHdlYmtpdDIvV2ViS2l0V2ViQ29udGV4dC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0
U2V0dGluZ3MuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFVSSVJlcXVlc3QuaD4KQEAgLTIw
Nyw2ICsyMDgsOSBAQCB3ZWJraXRfd2ViX3ZpZXdfc2V0X3pvb21fbGV2ZWwgICAgICAgICAgICAg
ICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZQogV0VCS0lUX0FQSSBnZG91Ymxl
CiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3pvb21fbGV2ZWwgICAgICAgICAgICAgICAoV2ViS2l0V2Vi
VmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcpOwogCitXRUJLSVRfQVBJIFdlYktpdEZpbmRDb250
cm9sbGVyICoKK3dlYmtpdF93ZWJfdmlld19nZXRfZmluZF9jb250cm9sbGVyICAgICAgICAgIChX
ZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7CisKIEdfRU5EX0RFQ0xTCiAKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93
ZWJraXQyZ3RrLWRvY3Muc2dtbCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2Rv
Y3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKaW5kZXggYzUxMzk1OWMyNmNlMDQ0OGQ5OTJkMDZlZjU3
ODg2YWE2NjY0YmYzMC4uZGE1ZTdjZmYzNmVhZDYzYjMwYzE4MjJhNzdlYzM0YmI5MDUxNmYxNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQy
Z3RrLWRvY3Muc2dtbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2Nz
L3dlYmtpdDJndGstZG9jcy5zZ21sCkBAIC0yMSw2ICsyMSw3IEBACiAgICAgPHhpOmluY2x1ZGUg
aHJlZj0ieG1sL1dlYktpdFVSSVJlc3BvbnNlLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9
InhtbC9XZWJLaXRXaW5kb3dQcm9wZXJ0aWVzLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9
InhtbC9XZWJLaXRFcnJvci54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0
RmluZENvbnRyb2xsZXIueG1sIi8+CiAgIDwvY2hhcHRlcj4KIAogICA8aW5kZXggaWQ9ImluZGV4
LWFsbCI+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2Nz
L3dlYmtpdDJndGstc2VjdGlvbnMudHh0IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAppbmRleCA4NDQ2ODk0NWQxMmI1ZjZjMDQ1
MjkwOTM1NzA2ZWU5YTI4OWZiODJmLi5kZmE1YjJiNDYyNjY0NmI3NTdlYWQyOGVjMWUzMzllMGYx
YWYwMmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2Nz
L3dlYmtpdDJndGstc2VjdGlvbnMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKQEAgLTc0LDYgKzc0LDcgQEAgd2Vi
a2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncwogd2Via2l0X3dlYl92aWV3X2dldF93aW5kb3dfcHJv
cGVydGllcwogd2Via2l0X3dlYl92aWV3X3NldF96b29tX2xldmVsCiB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X3pvb21fbGV2ZWwKK3dlYmtpdF93ZWJfdmlld19nZXRfZmluZF9jb250cm9sbGVyCiAKIDxT
VUJTRUNUSU9OIFN0YW5kYXJkPgogV2ViS2l0V2ViVmlld0NsYXNzCkBAIC0yOTcsMyArMjk4LDMz
IEBAIHdlYmtpdF9wbHVnaW5fZXJyb3JfcXVhcmsKIHdlYmtpdF9wb2xpY3lfZXJyb3JfcXVhcmsK
IDwvU0VDVElPTj4KIAorPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRGaW5kQ29udHJvbGxlcjwvRklM
RT4KK1dlYktpdEZpbmRDb250cm9sbGVyCit3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9z
dHJpbmcKK3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfY291bnRfbWF0Y2hlcword2Via2l0X2ZpbmRf
Y29udHJvbGxlcl9nZXRfZmxhZ3MKK3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X21hdGNoX2Nv
dW50Cit3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9tYXhfbWF0Y2hfY291bnQKK3dlYmtpdF9m
aW5kX2NvbnRyb2xsZXJfZ2V0X3NlYXJjaF9zdHJpbmcKK3dlYmtpdF9maW5kX2NvbnRyb2xsZXJf
bmV4dAord2Via2l0X2ZpbmRfY29udHJvbGxlcl9wcmV2aXVvcworCis8U1VCU0VDVElPTiBTdGFu
ZGFyZD4KK1dlYktpdEZpbmRDb250cm9sbGVyQ2xhc3MKK1dFQktJVF9UWVBFX0ZJTkRfQ09OVFJP
TExFUgorV0VCS0lUX0ZJTkRfQ09OVFJPTExFUgorV0VCS0lUX0lTX0ZJTkRfQ09OVFJPTExFUgor
V0VCS0lUX0ZJTkRfQ09OVFJPTExFUl9DTEFTUworV0VCS0lUX0lTX0ZJTkRfQ09OVFJPTExFUl9D
TEFTUworV0VCS0lUX0ZJTkRfQ09OVFJPTExFUl9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJp
dmF0ZT4KK1dlYktpdEZpbmRDb250cm9sbGVyUHJpdmF0ZQord2Via2l0X2ZpbmRfY29udHJvbGxl
cl9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdEZpbmRPcHRp
b25zPC9GSUxFPgord2Via2l0X2ZpbmRfb3B0aW9uc19nZXRfdHlwZQorPC9TRUNUSU9OPgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3Rr
LnR5cGVzIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3Rr
LnR5cGVzCmluZGV4IDQwYTg0MWM4OWM5YzQ3YjUyNGEyN2UxYjExODdlNzNiMjZhNDQ2ZmEuLjAw
ODhjMWMwMWE3MTNlMmU2ZDZmMGQ3ZDYzMDZhZTM1OWFjNWY0NzcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBlcworKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXMKQEAg
LTgsMyArOCw0IEBAIHdlYmtpdF9zZXR0aW5nc19nZXRfdHlwZQogd2Via2l0X3VyaV9yZXNwb25z
ZV9nZXRfdHlwZQogd2Via2l0X3VyaV9yZXF1ZXN0X2dldF90eXBlCiB3ZWJraXRfd2luZG93X3By
b3BlcnRpZXNfZ2V0X3R5cGUKK3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X3R5cGUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxl
LmFtIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUu
YW0KaW5kZXggZDkxMmI2NTdlMDM2NmI2ODJhOGM3OTE5NDkwNmE1MzM2ODAyYzk2ZS4uMTQ1ZjIy
MTU2ZjRhMGExMDhiZDE0Y2ViZjQxZTdjNDA4MjVkMWUxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KQEAgLTEsOSAr
MSwxMCBAQAogVEVTVF9QUk9HUyArPSBcCisJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RC
YWNrRm9yd2FyZExpc3QgXAorCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0V2ViS2l0Rmlu
ZENvbnRyb2xsZXIgXAorCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0V2ViS2l0U2V0dGlu
Z3MgXAogCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0V2ViS2l0V2ViQ29udGV4dCBcCiAJ
UHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3IFwKLQlQcm9ncmFtcy9X
ZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFdlYkxvYWRlckNsaWVudCBcCi0JUHJvZ3JhbXMvV2Vi
S2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRTZXR0aW5ncyBcCi0JUHJvZ3JhbXMvV2ViS2l0MkFQSVRl
c3RzL1Rlc3RCYWNrRm9yd2FyZExpc3QKKwlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdl
YktpdFdlYkxvYWRlckNsaWVudAogCiBub2luc3RfUFJPR1JBTVMgKz0gJChURVNUX1BST0dTKQog
d2Via2l0Ml90ZXN0c19jcHBmbGFncyA9IFwKQEAgLTc2LDMgKzc3LDggQEAgUHJvZ3JhbXNfV2Vi
S2l0MkFQSVRlc3RzX1Rlc3RCYWNrRm9yd2FyZExpc3RfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVz
dHNfY3BwZmxhZ3MKIFByb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0QmFja0ZvcndhcmRMaXN0
X0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQogUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3Rz
X1Rlc3RCYWNrRm9yd2FyZExpc3RfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQog
CitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYktpdEZpbmRDb250cm9sbGVyX1NPVVJD
RVMgPSBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktp
dEZpbmRDb250cm9sbGVyLmNwcAorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRG
aW5kQ29udHJvbGxlcl9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKK1Byb2dy
YW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViS2l0RmluZENvbnRyb2xsZXJfTERBREQgPSAkKHdl
YmtpdDJfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYktpdEZp
bmRDb250cm9sbGVyX0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRGaW5k
Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9U
ZXN0V2ViS2l0RmluZENvbnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ1Yzk3MTllNzc4NzU0MDhh
MjUyN2Y5ODI1NDZkYjc1MDkxYzM3ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0RmluZENvbnRyb2xsZXIuY3BwCkBA
IC0wLDAgKzEsMjk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJMb2FkVHJhY2tpbmdUZXN0LmgiCisjaW5j
bHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgorI2luY2x1ZGUg
PHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKworI2RlZmluZSBURVNUX1NUUklORyAiPGh0bWw+PGJv
ZHk+Zmlyc3QgdGVzdGluZyBzZWNvbmQgdGVzdGluZyBzZWNvbmRIYWxmPC9ib2R5PjwvaHRtbD4i
CisKK2NsYXNzIEZpbmRDb250cm9sbGVyVGVzdDogcHVibGljIExvYWRUcmFja2luZ1Rlc3Qgewor
cHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoRmluZENvbnRyb2xsZXJUZXN0KTsK
KworICAgIEZpbmRDb250cm9sbGVyVGVzdCgpCisgICAgICAgIDogbV9ydW5GaW5kVW50aWxDb21w
bGV0aW9uKGZhbHNlKSwKKyAgICAgICAgICBtX2ZpbmRDb250cm9sbGVyKHdlYmtpdF93ZWJfdmll
d19nZXRfZmluZF9jb250cm9sbGVyKG1fd2ViVmlldykpCisgICAgeworICAgICAgICBhc3NlcnRP
YmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKG1fZmluZENvbnRyb2xsZXIu
Z2V0KCkpKTsKKyAgICB9CisKKyAgICB+RmluZENvbnRyb2xsZXJUZXN0KCkKKyAgICB7CisgICAg
ICAgIGlmIChtX2ZpbmRDb250cm9sbGVyKQorICAgICAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNf
ZGlzY29ubmVjdF9tYXRjaGVkKG1fZmluZENvbnRyb2xsZXIuZ2V0KCksIEdfU0lHTkFMX01BVENI
X0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOworICAgIH0KKworICAgIHZvaWQgZmluZChjb25zdCBj
aGFyKiBzZWFyY2hTdHJpbmcsIFdlYktpdEZpbmRPcHRpb25zIGZpbmRPcHRpb25zLCBndWludCBt
YXhNYXRjaENvdW50KQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX2ZpbmRDb250
cm9sbGVyLmdldCgpLCAiZm91bmQtc3RyaW5nIiwgR19DQUxMQkFDSyhmb3VuZFN0cmluZ0NhbGxi
YWNrKSwgdGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9maW5kQ29udHJvbGxlci5n
ZXQoKSwgImZhaWxlZC10by1maW5kLXN0cmluZyIsIEdfQ0FMTEJBQ0soZmFpbGVkVG9GaW5kU3Ry
aW5nQ2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFy
Y2hfc3RyaW5nKG1fZmluZENvbnRyb2xsZXIuZ2V0KCksIHNlYXJjaFN0cmluZywgZmluZE9wdGlv
bnMsIG1heE1hdGNoQ291bnQpOworICAgIH0KKworICAgIHZvaWQgY291bnQoY29uc3QgY2hhciog
c2VhcmNoU3RyaW5nLCBXZWJLaXRGaW5kT3B0aW9ucyBmaW5kT3B0aW9ucywgZ3VpbnQgbWF4TWF0
Y2hDb3VudCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9maW5kQ29udHJvbGxl
ci5nZXQoKSwgImNvdW50ZWQtbWF0Y2hlcyIsIEdfQ0FMTEJBQ0soY291bnRlZE1hdGNoZXNDYWxs
YmFjayksIHRoaXMpOworICAgICAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX2NvdW50X21hdGNo
ZXMobV9maW5kQ29udHJvbGxlci5nZXQoKSwgc2VhcmNoU3RyaW5nLCBmaW5kT3B0aW9ucywgbWF4
TWF0Y2hDb3VudCk7CisgICAgfQorCisgICAgdm9pZCB3YWl0VW50aWxGaW5kRmluaXNoZWQoKQor
ICAgIHsKKyAgICAgICAgbV9ydW5GaW5kVW50aWxDb21wbGV0aW9uID0gdHJ1ZTsKKyAgICAgICAg
Z19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIEdSZWZQdHI8V2ViS2l0
RmluZENvbnRyb2xsZXI+IG1fZmluZENvbnRyb2xsZXI7CisgICAgYm9vbCBtX3RleHRGb3VuZDsK
KworcHJpdmF0ZToKKyAgICBib29sIG1fcnVuRmluZFVudGlsQ29tcGxldGlvbjsKKworICAgIHN0
YXRpYyB2b2lkIGZvdW5kU3RyaW5nQ2FsbGJhY2soV2ViS2l0RmluZENvbnRyb2xsZXIqLCBGaW5k
Q29udHJvbGxlclRlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5tX3RleHRGb3VuZCA9
IHRydWU7CisgICAgICAgIGlmICh0ZXN0LT5tX3J1bkZpbmRVbnRpbENvbXBsZXRpb24pCisgICAg
ICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAgIH0KKworICAg
IHN0YXRpYyB2b2lkIGZhaWxlZFRvRmluZFN0cmluZ0NhbGxiYWNrKFdlYktpdEZpbmRDb250cm9s
bGVyKiwgRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+bV90
ZXh0Rm91bmQgPSBmYWxzZTsKKyAgICAgICAgaWYgKHRlc3QtPm1fcnVuRmluZFVudGlsQ29tcGxl
dGlvbikKKyAgICAgICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7Cisg
ICAgfQorCisgICAgc3RhdGljIHZvaWQgY291bnRlZE1hdGNoZXNDYWxsYmFjayhXZWJLaXRGaW5k
Q29udHJvbGxlciosIEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIGlm
ICh0ZXN0LT5tX3J1bkZpbmRVbnRpbENvbXBsZXRpb24pCisgICAgICAgICAgICBnX21haW5fbG9v
cF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAgIH0KK307CisKK3N0YXRpYyB2b2lkIHRlc3RG
aW5kQ29udHJvbGxlclRleHRGb3VuZChGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwoVEVTVF9TVFJJTkcsIDApOworICAgIHRlc3Qt
PndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+ZmluZCgidGVzdGluZyIsIFdF
QktJVF9GSU5EX09QVElPTlNfTk9ORSwgMSk7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlz
aGVkKCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7Cit9CisKK3N0YXRpYyB2
b2lkIHRlc3RGaW5kQ29udHJvbGxlclRleHROb3RGb3VuZChGaW5kQ29udHJvbGxlclRlc3QqIHRl
c3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwoVEVTVF9TVFJJTkcsIDAp
OworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+ZmluZCgi
bm90Rm91bmQiLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDEpOworICAgIHRlc3QtPndhaXRV
bnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQoIXRlc3QtPm1fdGV4dEZvdW5kKTsK
K30KKworc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVyTWF0Y2hDb3VudChGaW5kQ29udHJv
bGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwoVEVT
VF9TVFJJTkcsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAg
dGVzdC0+ZmluZCgidGVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMik7CisgICAg
dGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh3ZWJraXRfZmlu
ZF9jb250cm9sbGVyX2dldF9tYXRjaF9jb3VudCh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgp
KSA9PSAyKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7Cit9CisKK3N0YXRpYyB2
b2lkIHRlc3RGaW5kQ29udHJvbGxlck1heE1hdGNoQ291bnQoRmluZENvbnRyb2xsZXJUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRIdG1sKFRFU1RfU1RSSU5HLCAw
KTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPmZpbmQo
InRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDEpOworICAgIHRlc3QtPndhaXRV
bnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQod2Via2l0X2ZpbmRfY29udHJvbGxl
cl9nZXRfbWF0Y2hfY291bnQodGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSkgPT0gR19NQVhV
SU5UKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3RGaW5kQ29udHJvbGxlck5leHQoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29uc3Rw
b2ludGVyKQoreworICAgIHRlc3QtPmxvYWRIdG1sKFRFU1RfU1RSSU5HLCAwKTsKKyAgICB0ZXN0
LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPmZpbmQoInRlc3RpbmciLCBX
RUJLSVRfRklORF9PUFRJT05TX05PTkUsIDIpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5p
c2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworICAgIGdfYXNzZXJ0
KHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X21hdGNoX2NvdW50KHRlc3QtPm1fZmluZENvbnRy
b2xsZXIuZ2V0KCkpID09IDIpOworCisgICAgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9uZXh0KHRl
c3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5p
c2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworICAgIGdfYXNzZXJ0
KHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X21hdGNoX2NvdW50KHRlc3QtPm1fZmluZENvbnRy
b2xsZXIuZ2V0KCkpID09IDIpOworICAgIGdfYXNzZXJ0KCEod2Via2l0X2ZpbmRfY29udHJvbGxl
cl9nZXRfb3B0aW9ucyh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKSAmIFdFQktJVF9GSU5E
X09QVElPTlNfQkFDS1dBUkRTKSk7CisKKyAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX25leHQo
dGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZp
bmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCghdGVzdC0+bV90ZXh0Rm91bmQpOworICAgIGdfYXNz
ZXJ0KHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X21hdGNoX2NvdW50KHRlc3QtPm1fZmluZENv
bnRyb2xsZXIuZ2V0KCkpID09IDIpOworICAgIGdfYXNzZXJ0KCEod2Via2l0X2ZpbmRfY29udHJv
bGxlcl9nZXRfb3B0aW9ucyh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKSAmIFdFQktJVF9G
SU5EX09QVElPTlNfQkFDS1dBUkRTKSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJv
bGxlclByZXZpb3VzKEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sK
KyAgICB0ZXN0LT5sb2FkSHRtbChURVNUX1NUUklORywgMCk7CisgICAgdGVzdC0+d2FpdFVudGls
TG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5maW5kKCJ0ZXN0aW5nIiwgV0VCS0lUX0ZJTkRf
T1BUSU9OU19OT05FLCAyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKwor
ICAgIGdfYXNzZXJ0KHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X21hdGNoX2NvdW50KHRlc3Qt
Pm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpID09IDIpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4
dEZvdW5kKTsKKworICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfbmV4dCh0ZXN0LT5tX2ZpbmRD
b250cm9sbGVyLmdldCgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKwor
ICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfZmlu
ZF9jb250cm9sbGVyX2dldF9tYXRjaF9jb3VudCh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgp
KSA9PSAyKTsKKyAgICBnX2Fzc2VydCghKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X29wdGlv
bnModGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSkgJiBXRUJLSVRfRklORF9PUFRJT05TX0JB
Q0tXQVJEUykpOworCisgICAgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9wcmV2aW91cyh0ZXN0LT5t
X2ZpbmRDb250cm9sbGVyLmdldCgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQo
KTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKKyAgICBnX2Fzc2VydCh3ZWJr
aXRfZmluZF9jb250cm9sbGVyX2dldF9tYXRjaF9jb3VudCh0ZXN0LT5tX2ZpbmRDb250cm9sbGVy
LmdldCgpKSA9PSAyKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9v
cHRpb25zKHRlc3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpICYgV0VCS0lUX0ZJTkRfT1BUSU9O
U19CQUNLV0FSRFMpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJDb3VudGVk
TWF0Y2hlcyhGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAg
dGVzdC0+bG9hZEh0bWwoVEVTVF9TVFJJTkcsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRG
aW5pc2hlZCgpOworCisgICAgdGVzdC0+Y291bnQoInRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJ
T05TX05PTkUsIDIpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAg
Z19hc3NlcnQod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfbWF0Y2hfY291bnQodGVzdC0+bV9m
aW5kQ29udHJvbGxlci5nZXQoKSkgPT0gMik7CisKKyAgICB0ZXN0LT5jb3VudCgiZmlyc3QiLCBX
RUJLSVRfRklORF9PUFRJT05TX05PTkUsIDIpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5p
c2hlZCgpOworCisgICAgZ19hc3NlcnQod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfbWF0Y2hf
Y291bnQodGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSkgPT0gMSk7CisKKyAgICB0ZXN0LT5j
b3VudCgibm90Rm91bmQiLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDIpOworICAgIHRlc3Qt
PndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQoIXdlYmtpdF9maW5kX2Nv
bnRyb2xsZXJfZ2V0X21hdGNoX2NvdW50KHRlc3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpKTsK
K30KKworc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVyT3B0aW9ucyhGaW5kQ29udHJvbGxl
clRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwoVEVTVF9T
VFJJTkcsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVz
dC0+ZmluZCgiVGVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMik7CisgICAgdGVz
dC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCghdGVzdC0+bV90ZXh0
Rm91bmQpOworCisgICAgdGVzdC0+ZmluZCgiVGVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNf
Q0FTRV9JTlNFTlNJVElWRSwgMik7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7
CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7CisKKyAgICB0ZXN0LT5maW5kKCJl
c3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDIpOworICAgIHRlc3QtPndhaXRVbnRp
bEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworCisg
ICAgdGVzdC0+ZmluZCgiZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19BVF9XT1JEX1NUQVJU
UywgMik7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2Vy
dCghdGVzdC0+bV90ZXh0Rm91bmQpOworCisgICAgdGVzdC0+ZmluZCgiSGFsZiIsIFdFQktJVF9G
SU5EX09QVElPTlNfQVRfV09SRF9TVEFSVFMsIDIpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRG
aW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQoIXRlc3QtPm1fdGV4dEZvdW5kKTsKKworICAgIHRl
c3QtPmZpbmQoIkhhbGYiLCBzdGF0aWNfY2FzdDxXZWJLaXRGaW5kT3B0aW9ucz4oV0VCS0lUX0ZJ
TkRfT1BUSU9OU19BVF9XT1JEX1NUQVJUUyB8IFdFQktJVF9GSU5EX09QVElPTlNfVFJFQVRfTUVE
SUFMX0NBUElUQUxfQVNfV09SRF9TVEFSVCksIDIpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRG
aW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworCisgICAgdGVz
dC0+ZmluZCgidGVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfV1JBUF9BUk9VTkQsIDMpOwor
ICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1f
dGV4dEZvdW5kKTsKKworICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfbmV4dCh0ZXN0LT5tX2Zp
bmRDb250cm9sbGVyLmdldCgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsK
KyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7CisKKyAgICB3ZWJraXRfZmluZF9jb250
cm9sbGVyX25leHQodGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSk7CisgICAgdGVzdC0+d2Fp
dFVudGlsRmluZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOwor
fQorCitzdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJJbnN0YW5jZShGaW5kQ29udHJvbGxl
clRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgV2ViS2l0RmluZENvbnRyb2xsZXIq
IGZpbmRDb250cm9sbGVyMSA9IHdlYmtpdF93ZWJfdmlld19nZXRfZmluZF9jb250cm9sbGVyKHRl
c3QtPm1fd2ViVmlldyk7CisgICAgV2ViS2l0RmluZENvbnRyb2xsZXIqIGZpbmRDb250cm9sbGVy
MiA9IHdlYmtpdF93ZWJfdmlld19nZXRfZmluZF9jb250cm9sbGVyKHRlc3QtPm1fd2ViVmlldyk7
CisKKyAgICBnX2Fzc2VydChmaW5kQ29udHJvbGxlcjEgPT0gZmluZENvbnRyb2xsZXIyKTsKK30K
Kworc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVyR2V0dGVycyhGaW5kQ29udHJvbGxlclRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgY29uc3QgY2hhciogc2VhcmNoU3RyaW5n
ID0gInRlc3RpbmciOworICAgIGNvbnN0IGd1aW50IG1heE1hdGNoQ291bnQgPSAxOworICAgIGNv
bnN0IFdlYktpdEZpbmRPcHRpb25zIGZpbmRPcHRpb25zID0gc3RhdGljX2Nhc3Q8V2ViS2l0Rmlu
ZE9wdGlvbnM+KFdFQktJVF9GSU5EX09QVElPTlNfV1JBUF9BUk9VTkQgfCBXRUJLSVRfRklORF9P
UFRJT05TX0FUX1dPUkRfU1RBUlRTKTsKKyAgICBXZWJLaXRGaW5kQ29udHJvbGxlciogZmluZENv
bnRyb2xsZXIgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ZpbmRfY29udHJvbGxlcih0ZXN0LT5tX3dl
YlZpZXcpOworCisgICAgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfc3RyaW5nKGZpbmRD
b250cm9sbGVyLCBzZWFyY2hTdHJpbmcsIGZpbmRPcHRpb25zLCBtYXhNYXRjaENvdW50KTsKKyAg
ICBnX2Fzc2VydCghZ19zdHJjbXAwKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X3NlYXJjaF9z
dHJpbmcoZmluZENvbnRyb2xsZXIpLCBzZWFyY2hTdHJpbmcpKTsKKyAgICBnX2Fzc2VydCh3ZWJr
aXRfZmluZF9jb250cm9sbGVyX2dldF9tYXhfbWF0Y2hfY291bnQoZmluZENvbnRyb2xsZXIpID09
IG1heE1hdGNoQ291bnQpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0
X29wdGlvbnMoZmluZENvbnRyb2xsZXIpID09IGZpbmRPcHRpb25zKTsKK30KKwordm9pZCBiZWZv
cmVBbGwoKQoreworICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJv
bGxlciIsICJnZXR0ZXJzIiwgdGVzdEZpbmRDb250cm9sbGVyR2V0dGVycyk7CisgICAgRmluZENv
bnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwgImluc3RhbmNlIiwgdGVz
dEZpbmRDb250cm9sbGVySW5zdGFuY2UpOworICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJX
ZWJLaXRGaW5kQ29udHJvbGxlciIsICJ0ZXh0LWZvdW5kIiwgdGVzdEZpbmRDb250cm9sbGVyVGV4
dEZvdW5kKTsKKyAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xs
ZXIiLCAidGV4dC1ub3QtZm91bmQiLCB0ZXN0RmluZENvbnRyb2xsZXJUZXh0Tm90Rm91bmQpOwor
ICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJtYXRj
aC1jb3VudCIsIHRlc3RGaW5kQ29udHJvbGxlck1hdGNoQ291bnQpOworICAgIEZpbmRDb250cm9s
bGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJtYXgtbWF0Y2gtY291bnQiLCB0
ZXN0RmluZENvbnRyb2xsZXJNYXhNYXRjaENvdW50KTsKKyAgICBGaW5kQ29udHJvbGxlclRlc3Q6
OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAibmV4dCIsIHRlc3RGaW5kQ29udHJvbGxlck5l
eHQpOworICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIs
ICJwcmV2aW91cyIsIHRlc3RGaW5kQ29udHJvbGxlclByZXZpb3VzKTsKKyAgICBGaW5kQ29udHJv
bGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAiY291bnRlZC1tYXRjaGVzIiwg
dGVzdEZpbmRDb250cm9sbGVyQ291bnRlZE1hdGNoZXMpOworICAgIEZpbmRDb250cm9sbGVyVGVz
dDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJvcHRpb25zIiwgdGVzdEZpbmRDb250cm9s
bGVyT3B0aW9ucyk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCmluZGV4IGFiMGUwYThmMTBiNTM1OTNkODJlMGYz
NTM3ZGY4M2MyNDk5NThmOGQuLmEyZjRmYWVjYzUxYzBmZTgxNmJjOWYxOWYyZGIxMmM0NmVjNDMz
MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKQEAgLTI4
LDYgKzI4LDcgQEAKICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KICNpbmNsdWRl
IDx3ZWJraXQyL1dlYktpdEVudW1UeXBlcy5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RXJy
b3IuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEZpbmRDb250cm9sbGVyLmg+CiAjaW5jbHVk
ZSA8d2Via2l0Mi9XZWJLaXRTZXR0aW5ncy5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0VVJJ
UmVxdWVzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0VVJJUmVzcG9uc2UuaD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123184</attachid>
            <date>2012-01-19 13:32:56 -0800</date>
            <delta_ts>2012-02-03 09:52:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76070-20120119223254.patch</filename>
            <type>text/plain</type>
            <size>47383</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1Mjg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMzE3NTM2NjExYmZmNGE3
YjAzODA0NjZjOTdlZDZjZWI4ZDYxZjMwZC4uODAyOGQ2MzZiMDQwYzVjOTlmMjc5MTdiMTgwZjBm
YmNjODlkM2Y2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDEyLTAxLTE5ICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFtX
SzJdIEFkZCBGaW5kIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzYwNzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIHBhdGNoIGFkZHMgYSBuZXcgcHVibGljIGZpbmQgQVBJIGZvciB0aGUgR3Rr
KyBXSzIgcG9ydC4gSXQKKyAgICAgICAgZGVmaW5lcyBhIG5ldyBvYmplY3QgY2FsbGVkIFdlYktp
dEZpbmRDb250cm9sbGVyIG93bmVkIGJ5IGVhY2gKKyAgICAgICAgV2ViS2l0V2ViVmlldy4gQ2xp
ZW50cyB3aWxsIHVzZSB0aGlzIG5ldyBvYmplY3QgdG8gc2VhcmNoIHN0cmluZ3MKKyAgICAgICAg
aW4gdGhlIFdlYktpdFdlYlZpZXcuCisKKyAgICAgICAgQ2hhbmdlcyBpbmNsdWRlIGFsc28gZG9j
dW1lbnRhdGlvbiBhbmQgdW5pdCB0ZXN0cyBmb3IgdGhlIG5ldworICAgICAgICBwdWJsaWMgQVBJ
LgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0RGVmaW5lcy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZp
bmRDb250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChkaWRGaW5kU3RyaW5nKTogaW1wbGVt
ZW50YXRpb24gb2YgdGhlIFdLUGFnZSBGaW5kIGludGVyZmFjZS4KKyAgICAgICAgKGRpZEZhaWxU
b0ZpbmRTdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKGRpZENvdW50U3RyaW5nTWF0Y2hlcyk6IERp
dHRvLgorICAgICAgICAod2Via2l0X2ZpbmRfY29udHJvbGxlcl9pbml0KToKKyAgICAgICAgKGdl
dFdLUGFnZUZyb21XZWJLaXRXZWJWaWV3KToKKyAgICAgICAgKHdlYmtpdEZpbmRDb250cm9sbGVy
Q29uc3RydWN0ZWQpOgorICAgICAgICAod2Via2l0RmluZENvbnRyb2xsZXJHZXRQcm9wZXJ0eSk6
CisgICAgICAgICh3ZWJraXRGaW5kQ29udHJvbGxlclNldFByb3BlcnR5KToKKyAgICAgICAgKHdl
YmtpdEZpbmRDb250cm9sbGVyRmluYWxpemUpOgorICAgICAgICAod2Via2l0X2ZpbmRfY29udHJv
bGxlcl9jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X3Nl
YXJjaF90ZXh0KToKKyAgICAgICAgKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X29wdGlvbnMp
OgorICAgICAgICAod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfbWF4X21hdGNoX2NvdW50KToK
KyAgICAgICAgKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X3dlYl92aWV3KToKKyAgICAgICAg
KHdlYktpdEZpbmRDb250cm9sbGVyUGVyZm9ybSk6CisgICAgICAgICh3ZWJLaXRGaW5kQ29udHJv
bGxlclNldFNlYXJjaERhdGEpOgorICAgICAgICAod2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFy
Y2gpOiBhc3luY2hyb25vdXNseSBsb29rcyBmb3IgdGhlCisgICAgICAgIHNlYXJjaCBzdHJpbmcg
aW4gdGhlIFdlYktpdFdlYlZpZXcuCisgICAgICAgICh3ZWJraXRfZmluZF9jb250cm9sbGVyX3Nl
YXJjaF9uZXh0KToKKyAgICAgICAgKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX3ByZXZp
b3VzKToKKyAgICAgICAgKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfY291bnRfbWF0Y2hlcyk6IGFz
eW5jaHJvbm91c2x5IGNvdW50cyB0aGUKKyAgICAgICAgbnVtYmVyIG9mIG1hdGNoZXMgb2YgdGhl
IHNlYXJjaCBzdHJpbmcgaW4gdGhlIFdlYktpdFdlYlZpZXcuCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0RmluZENvbnRyb2xsZXIuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXcuY3BwOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2dldF9maW5kX2Nv
bnRyb2xsZXIpOiByZXR1cm5zIHRoZQorICAgICAgICBXZWJLaXRGaW5kQ29udHJvbGxlciBpbnN0
YW5jZSBvd25lZCBieSB0aGUgV2ViS2l0V2ViVmlldy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93
ZWJraXQyZ3RrLWRvY3Muc2dtbDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dl
YmtpdDJndGstc2VjdGlvbnMudHh0OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mv
d2Via2l0Mmd0ay50eXBlczoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVt
YWtlZmlsZS5hbToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0
RmluZENvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKHRlc3RGaW5kQ29udHJvbGxlclRl
eHRGb3VuZCk6CisgICAgICAgICh0ZXN0RmluZENvbnRyb2xsZXJUZXh0Tm90Rm91bmQpOgorICAg
ICAgICAodGVzdEZpbmRDb250cm9sbGVyTWF0Y2hDb3VudCk6CisgICAgICAgICh0ZXN0RmluZENv
bnRyb2xsZXJNYXhNYXRjaENvdW50KToKKyAgICAgICAgKHRlc3RGaW5kQ29udHJvbGxlck5leHQp
OgorICAgICAgICAodGVzdEZpbmRDb250cm9sbGVyUHJldmlvdXMpOgorICAgICAgICAodGVzdEZp
bmRDb250cm9sbGVyQ291bnRlZE1hdGNoZXMpOgorICAgICAgICAodGVzdEZpbmRDb250cm9sbGVy
T3B0aW9ucyk6CisgICAgICAgICh0ZXN0RmluZENvbnRyb2xsZXJJbnN0YW5jZSk6CisgICAgICAg
ICh0ZXN0RmluZENvbnRyb2xsZXJHZXR0ZXJzKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAg
ICAgIChhZnRlckFsbCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oOgor
CiAyMDEyLTAxLTE4ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgog
CiAgICAgICAgIERpZEZpbmRTdHJpbmcgc2hvdWxkIG1lIGVtaXR0ZWQgZXZlbiBpZiBGaW5kT3B0
aW9uc1Nob3dPdmVybGF5IGlzIG5vdCBlbmFibGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCmluZGV4IGE3
NzFiOWQ4ZDRjMzgxNWViNzVkMjgwZTFhMWM3MmY4ZjgwZjExOGEuLmJkZWNlMGQ3MzE4MjlkYTI5
MDJlY2E2OWU2ZGM5ZmU3OGZiY2FjZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1h
a2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCkBAIC04Myw2ICs4
Myw3IEBAIHdlYmtpdDJndGtfaGVhZGVycyA9IFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdEJhY2tGb3J3YXJkTGlzdEl0ZW0uaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXREZWZpbmVzLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0RXJyb3IuaCBcCisJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaW5k
Q29udHJvbGxlci5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNv
bnRleHQuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTZXR0aW5ncy5o
IFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVSSVJlcXVlc3QuaCBcCkBA
IC01MjUsNiArNTI2LDggQEAgbGlid2Via2l0Mmd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJT
SU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9TT1UKIAlTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREZWZpbmVzLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdEVycm9yLmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0RmluZENvbnRyb2xsZXIuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0RmluZENvbnRyb2xsZXIuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFNldHRpbmdzLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0U2V0dGluZ3MuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREZWZpbmVzLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXREZWZpbmVzLmgKaW5kZXggNzliMzM4MzYwZGRhYWE4ZjA5ZjY1NDdm
MmRmMTQ1OGY2ZjIxOTMxZC4uODc0NTljMTRmMDdjYTA3ZWVlNGExZWFlZjk1M2ZlODRiNTA0NjRk
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RGVm
aW5lcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERlZmlu
ZXMuaApAQCAtNDQsNCArNDQsMTAgQEAKICMgICAgZGVmaW5lIFdFQktJVF9PQlNPTEVURV9BUEkg
V0VCS0lUX0FQSSBfX2F0dHJpYnV0ZV9fKChkZXByZWNhdGVkKSkKICNlbmRpZgogCit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RmluZENvbnRyb2xsZXIgICAgICAgIFdlYktpdEZpbmRDb250cm9sbGVy
OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEZpbmRDb250cm9sbGVyQ2xhc3MgICBXZWJLaXRGaW5k
Q29udHJvbGxlckNsYXNzOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmlldyBXZWJLaXRX
ZWJWaWV3OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdDbGFzcyBXZWJLaXRXZWJWaWV3
Q2xhc3M7CisKICNlbmRpZiAvLyBXZWJLaXREZWZpbmVzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbmRDb250cm9sbGVyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbmRDb250cm9sbGVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jNTU2MzE0ZDJiYzdlZmVmZTg4ZjFkMDk2NjZmMTJlYjlkN2NkYzlkCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmluZENv
bnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsNDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RmluZENv
bnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIldlYktpdEVudW1UeXBlcy5oIgorI2luY2x1ZGUgIldl
YktpdFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCIKKyNp
bmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJLaXQyL1dLRmluZE9wdGlvbnMu
aD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9X
S1N0cmluZy5oPgorI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CisjaW5jbHVkZSA8d3RmL2dv
YmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKK2VudW0geworICAgIEZPVU5EX1NUUklORywKKyAgICBGQUlM
RURfVE9fRklORF9TVFJJTkcsCisgICAgQ09VTlRFRF9NQVRDSEVTLAorCisgICAgTEFTVF9TSUdO
QUwKK307CisKK2VudW0geworICAgIFBST1BfMCwKKworICAgIFBST1BfU1RSSU5HLAorICAgIFBS
T1BfT1BUSU9OUywKKyAgICBQUk9QX01BWF9NQVRDSF9DT1VOVCwKKyAgICBQUk9QX1dFQl9WSUVX
Cit9OworCit0eXBlZGVmIGVudW0geworICAgIE9QX0ZJTkQsCisgICAgT1BfQ09VTlQKK30gV2Vi
S2l0RmluZENvbnRyb2xsZXJGaW5kT3BlcmF0aW9uOworCitzdHJ1Y3QgX1dlYktpdEZpbmRDb250
cm9sbGVyUHJpdmF0ZSB7CisgICAgQ1N0cmluZyBzdHJpbmc7CisgICAgZ3VpbnQgZmluZE9wdGlv
bnM7CisgICAgdW5zaWduZWQgbWF4TWF0Y2hDb3VudDsKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3OworfTsKKworc3RhdGljIGd1aW50IHNpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9Owor
CitHX0RFRklORV9UWVBFKFdlYktpdEZpbmRDb250cm9sbGVyLCB3ZWJraXRfZmluZF9jb250cm9s
bGVyLCBHX1RZUEVfT0JKRUNUKQorCitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19BUElfRU5VTShX
RUJLSVRfRklORF9PUFRJT05TX0NBU0VfSU5TRU5TSVRJVkUsIGtXS0ZpbmRPcHRpb25zQ2FzZUlu
c2Vuc2l0aXZlKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0FQSV9FTlVNKFdFQktJVF9GSU5E
X09QVElPTlNfQVRfV09SRF9TVEFSVFMsIGtXS0ZpbmRPcHRpb25zQXRXb3JkU3RhcnRzKTsKK0NP
TVBJTEVfQVNTRVJUX01BVENISU5HX0FQSV9FTlVNKFdFQktJVF9GSU5EX09QVElPTlNfVFJFQVRf
TUVESUFMX0NBUElUQUxfQVNfV09SRF9TVEFSVCwga1dLRmluZE9wdGlvbnNUcmVhdE1lZGlhbENh
cGl0YWxBc1dvcmRTdGFydCk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19BUElfRU5VTShXRUJL
SVRfRklORF9PUFRJT05TX0JBQ0tXQVJEUywga1dLRmluZE9wdGlvbnNCYWNrd2FyZHMpOworQ09N
UElMRV9BU1NFUlRfTUFUQ0hJTkdfQVBJX0VOVU0oV0VCS0lUX0ZJTkRfT1BUSU9OU19XUkFQX0FS
T1VORCwga1dLRmluZE9wdGlvbnNXcmFwQXJvdW5kKTsKKworc3RhdGljIHZvaWQgZGlkRmluZFN0
cmluZyhXS1BhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgc3RyaW5nLCB1bnNpZ25lZCBtYXRjaENv
dW50LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIGdfc2lnbmFsX2VtaXQoV0VCS0lU
X0ZJTkRfQ09OVFJPTExFUihjbGllbnRJbmZvKSwgc2lnbmFsc1tGT1VORF9TVFJJTkddLCAwLCBt
YXRjaENvdW50KTsKK30KKworc3RhdGljIHZvaWQgZGlkRmFpbFRvRmluZFN0cmluZyhXS1BhZ2VS
ZWYgcGFnZSwgV0tTdHJpbmdSZWYgc3RyaW5nLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQorewor
ICAgIGdfc2lnbmFsX2VtaXQoV0VCS0lUX0ZJTkRfQ09OVFJPTExFUihjbGllbnRJbmZvKSwgc2ln
bmFsc1tGQUlMRURfVE9fRklORF9TVFJJTkddLCAwKTsKK30KKworc3RhdGljIHZvaWQgZGlkQ291
bnRTdHJpbmdNYXRjaGVzKFdLUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiBzdHJpbmcsIHVuc2ln
bmVkIG1hdGNoQ291bnQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgZ19zaWduYWxf
ZW1pdChXRUJLSVRfRklORF9DT05UUk9MTEVSKGNsaWVudEluZm8pLCBzaWduYWxzW0NPVU5URURf
TUFUQ0hFU10sIDAsIG1hdGNoQ291bnQpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZmluZF9j
b250cm9sbGVyX2luaXQoV2ViS2l0RmluZENvbnRyb2xsZXIqIGZpbmRDb250cm9sbGVyKQorewor
ICAgIFdlYktpdEZpbmRDb250cm9sbGVyUHJpdmF0ZSogcHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9H
RVRfUFJJVkFURShmaW5kQ29udHJvbGxlciwgV0VCS0lUX1RZUEVfRklORF9DT05UUk9MTEVSLCBX
ZWJLaXRGaW5kQ29udHJvbGxlclByaXZhdGUpOworICAgIGZpbmRDb250cm9sbGVyLT5wcml2ID0g
cHJpdjsKKyAgICBuZXcgKHByaXYpIFdlYktpdEZpbmRDb250cm9sbGVyUHJpdmF0ZSgpOworfQor
CitzdGF0aWMgV0tQYWdlUmVmIGlubGluZSBnZXRXS1BhZ2VGcm9tV2ViS2l0V2ViVmlldyhXZWJL
aXRXZWJWaWV3ICp3ZWJWaWV3KQoreworICAgIHJldHVybiB0b0FQSSh3ZWJraXRXZWJWaWV3QmFz
ZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2ViVmlldykpKTsKK30KKworc3RhdGljIHZv
aWQgd2Via2l0RmluZENvbnRyb2xsZXJDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCit7Cisg
ICAgV2ViS2l0RmluZENvbnRyb2xsZXIqIGZpbmRDb250cm9sbGVyID0gV0VCS0lUX0ZJTkRfQ09O
VFJPTExFUihvYmplY3QpOworICAgIFdLUGFnZUZpbmRDbGllbnQgd2tGaW5kQ2xpZW50ID0gewor
ICAgICAgICBrV0tQYWdlRmluZENsaWVudEN1cnJlbnRWZXJzaW9uLAorICAgICAgICBmaW5kQ29u
dHJvbGxlciwgLy8gY2xpZW50SW5mbworICAgICAgICBkaWRGaW5kU3RyaW5nLAorICAgICAgICBk
aWRGYWlsVG9GaW5kU3RyaW5nLAorICAgICAgICBkaWRDb3VudFN0cmluZ01hdGNoZXMKKyAgICB9
OworCisgICAgV0tQYWdlU2V0UGFnZUZpbmRDbGllbnQoZ2V0V0tQYWdlRnJvbVdlYktpdFdlYlZp
ZXcoZmluZENvbnRyb2xsZXItPnByaXYtPndlYlZpZXcpLCAmd2tGaW5kQ2xpZW50KTsKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0RmluZENvbnRyb2xsZXJHZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmpl
Y3QsIGd1aW50IHByb3BJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQor
eworICAgIFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxlciA9IFdFQktJVF9GSU5E
X0NPTlRST0xMRVIob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcElkKSB7CisgICAgY2FzZSBQ
Uk9QX1NUUklORzoKKyAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCBmaW5kQ29udHJv
bGxlci0+cHJpdi0+c3RyaW5nLmRhdGEoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9PUFRJT05TOgorICAgICAgICBnX3ZhbHVlX3NldF91aW50KHZhbHVlLCBmaW5kQ29udHJvbGxl
ci0+cHJpdi0+ZmluZE9wdGlvbnMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTUFY
X01BVENIX0NPVU5UOgorICAgICAgICBnX3ZhbHVlX3NldF91aW50KHZhbHVlLCBmaW5kQ29udHJv
bGxlci0+cHJpdi0+bWF4TWF0Y2hDb3VudCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9XRUJfVklFVzoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBmaW5kQ29udHJv
bGxlci0+cHJpdi0+d2ViVmlldyk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJZCwgcGFy
YW1TcGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdEZpbmRDb250cm9sbGVyU2V0
UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIGNvbnN0IEdWYWx1ZSogdmFs
dWUsIEdQYXJhbVNwZWMqIHBhcmFtU3BlYykKK3sKKyAgICBXZWJLaXRGaW5kQ29udHJvbGxlciog
ZmluZENvbnRyb2xsZXIgPSBXRUJLSVRfRklORF9DT05UUk9MTEVSKG9iamVjdCk7CisKKyAgICBz
d2l0Y2ggKHByb3BJZCkgeworICAgIGNhc2UgUFJPUF9XRUJfVklFVzoKKyAgICAgICAgZmluZENv
bnRyb2xsZXItPnByaXYtPndlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcoZ192YWx1ZV9nZXRfb2Jq
ZWN0KHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JK
RUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJZCwgcGFyYW1TcGVjKTsK
KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdEZpbmRDb250cm9sbGVyRmluYWxpemUoR09i
amVjdCogb2JqZWN0KQoreworICAgIFdFQktJVF9GSU5EX0NPTlRST0xMRVIob2JqZWN0KS0+cHJp
di0+fldlYktpdEZpbmRDb250cm9sbGVyUHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdl
YmtpdF9maW5kX2NvbnRyb2xsZXJfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9jbGFzc19pbml0KFdlYktpdEZp
bmRDb250cm9sbGVyQ2xhc3MqIGZpbmRDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdPYmpl
Y3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGZpbmRDbGFzcyk7CisKKyAgICBnT2JqZWN0Q2xhc3Mt
PmNvbnN0cnVjdGVkID0gd2Via2l0RmluZENvbnRyb2xsZXJDb25zdHJ1Y3RlZDsKKyAgICBnT2Jq
ZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdEZpbmRDb250cm9sbGVyR2V0UHJvcGVydHk7
CisgICAgZ09iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRGaW5kQ29udHJvbGxlclNl
dFByb3BlcnR5OworICAgIGdPYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRGaW5kQ29udHJv
bGxlckZpbmFsaXplOworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGZpbmRDbGFzcywg
c2l6ZW9mKFdlYktpdEZpbmRDb250cm9sbGVyUHJpdmF0ZSkpOworCisgICAgLyoqCisgICAgICog
V2ViS2l0RmluZENvbnRyb2xsZXI6c3RyaW5nOgorICAgICAqCisgICAgICogVGhlIHRleHQgdG8g
c2VhcmNoIGZvciBpbiB0aGUgI1dlYktpdFdlYlZpZXcuCisgICAgICovCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnT2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQUk9QX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoInN0cmluZyIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlNlYXJjaCBTdHJpbmci
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXygiVGV4dCB0byBzZWFyY2ggZm9yIGluIHRoZSB2aWV3IiksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0RmluZENvbnRyb2xsZXI6b3B0aW9u
czoKKyAgICAgKgorICAgICAqIFRoZSBvcHRpb25zIHRvIGJlIHVzZWQgaW4gdGhlIHNlYXJjaCBv
cGVyYXRpb24uCisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShn
T2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX09Q
VElPTlMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNf
ZmxhZ3MoIm9wdGlvbnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF8oIlNlYXJjaCBPcHRpb25zIiksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiU2VhcmNoIG9wdGlvbnMgdG8g
YmUgdXNlZCBpbiB0aGUgc2VhcmNoIG9wZXJhdGlvbiIpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX0ZJTkRfT1BUSU9O
UywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAg
ICAvKioKKyAgICAgKiBXZWJLaXRGaW5kQ29udHJvbGxlcjptYXgtbWF0Y2gtY291bnQ6CisgICAg
ICoKKyAgICAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgbWF0Y2hlcyB0byByZXBvcnQgZm9yIGEg
Z2l2ZW4gc2VhcmNoLgorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkoZ09iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJP
UF9NQVhfTUFUQ0hfQ09VTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
X3BhcmFtX3NwZWNfdWludCgibWF4LW1hdGNoLWNvdW50IiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIk1heGltdW0gbWF0Y2hlcyBjb3Vu
dCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXygiVGhlIG1heGltdW0gbnVtYmVyIG9mIG1hdGNoZXMgaW4gYSBnaXZlbiB0ZXh0IHRvIHJl
cG9ydCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMCwgR19NQVhVSU5ULCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICAvKioK
KyAgICAgKiBXZWJLaXRGaW5kQ29udHJvbGxlcjp3ZWItdmlldzoKKyAgICAgKgorICAgICAqIFRo
ZSAjV2ViS2l0V2ViVmlldyB0aGlzIGNvbnRyb2xsZXIgaXMgYXNzb2NpYXRlZCB0by4KKyAgICAg
Ki8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdPYmplY3RDbGFzcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfV0VCX1ZJRVcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KCJ3ZWItdmll
dyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF8oIldlYiBWaWV3IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF8oIlRoZSBXZWIgVmlldyBhc3NvY2lhdGVkIHdpdGggdGhpcyBm
aW5kIGNvbnRyb2xsZXIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV0VCS0lUX1RZUEVfV0VCX1ZJRVcsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEdQYXJh
bUZsYWdzPihXRUJLSVRfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkp
KTsKKworICAgIC8qKgorICAgICAqIFdlYktpdEZpbmRDb250cm9sbGVyOjpmb3VuZC1zdHJpbmc6
CisgICAgICogQGZpbmRfY29udHJvbGxlcjogdGhlICNXZWJLaXRGaW5kQ29udHJvbGxlcgorICAg
ICAqIEBtYXRjaF9jb3VudDogdGhlIG51bWJlciBvZiBtYXRjaGVzIG9mIHRoZSBzZWFyY2ggdGV4
dAorICAgICAqCisgICAgICogVGhpcyBzaWduYWwgaXMgZW1pdHRlZCB3aGVuIGEgZ2l2ZW4gc3Ry
aW5nIGlzIGZvdW5kIGluIHRoZSB3ZWIKKyAgICAgKiBwYWdlIHRleHQuIEl0IHdpbGwgYmUgaXNz
dWVkIGlmIHRoZSB0ZXh0IGlzIGZvdW5kCisgICAgICogYXN5bmNocm9ub3VzbHkgYWZ0ZXIgYSBj
YWxsIHRvIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoKCksCisgICAgICogd2Via2l0X2Zp
bmRfY29udHJvbGxlcl9zZWFyY2hfbmV4dCgpIG9yCisgICAgICogd2Via2l0X2ZpbmRfY29udHJv
bGxlcl9zZWFyY2hfcHJldmlvdXMoKS4KKyAgICAgKi8KKyAgICBzaWduYWxzW0ZPVU5EX1NUUklO
R10gPQorICAgICAgICBnX3NpZ25hbF9uZXcoImZvdW5kLXN0cmluZyIsCisgICAgICAgICAgICAg
ICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhnT2JqZWN0Q2xhc3MpLAorICAgICAgICAgICAgICAg
ICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLAor
ICAgICAgICAgICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1VJTlQsCisgICAg
ICAgICAgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwgR19UWVBFX1VJTlQpOworCisgICAgLyoq
CisgICAgICogV2ViS2l0RmluZENvbnRyb2xsZXI6OmZhaWxlZC10by1maW5kLXN0cmluZzoKKyAg
ICAgKiBAZmluZF9jb250cm9sbGVyOiB0aGUgI1dlYktpdEZpbmRDb250cm9sbGVyCisgICAgICoK
KyAgICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gYSBzZWFyY2ggb3BlcmF0aW9uIGRv
ZXMgbm90IGZpbmQKKyAgICAgKiBhbnkgcmVzdWx0IGZvciB0aGUgZ2l2ZW4gc3RyaW5nLiBJdCB3
aWxsIGJlIGlzc3VlZCBpZiB0aGUgdGV4dAorICAgICAqIGlzIG5vdCBmb3VuZCBhc3luY2hyb25v
dXNseSBhZnRlciBhIGNhbGwgdG8KKyAgICAgKiB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJj
aCgpLCB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9uZXh0KCkKKyAgICAgKiBvciB3ZWJr
aXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9wcmV2aW91cygpLgorICAgICAqLworICAgIHNpZ25h
bHNbRkFJTEVEX1RPX0ZJTkRfU1RSSU5HXSA9CisgICAgICAgIGdfc2lnbmFsX25ldygiZmFpbGVk
LXRvLWZpbmQtc3RyaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNT
KGdPYmplY3RDbGFzcyksCisgICAgICAgICAgICAgICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwK
KyAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICBnX2Nj
bG9zdXJlX21hcnNoYWxfVk9JRF9fVk9JRCwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9O
T05FLCAwKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdEZpbmRDb250cm9sbGVyOjpjb3VudGVk
LW1hdGNoZXM6CisgICAgICogQGZpbmRfY29udHJvbGxlcjogdGhlICNXZWJLaXRGaW5kQ29udHJv
bGxlcgorICAgICAqIEBtYXRjaF9jb3VudDogdGhlIG51bWJlciBvZiBtYXRjaGVzIG9mIHRoZSBz
ZWFyY2ggdGV4dAorICAgICAqCisgICAgICogVGhpcyBzaWduYWwgaXMgZW1pdHRlZCB3aGVuIHRo
ZSAjV2ViS2l0RmluZENvbnRyb2xsZXIgaGFzCisgICAgICogY291bnRlZCB0aGUgbnVtYmVyIG9m
IG1hdGNoZXMgZm9yIGEgZ2l2ZW4gc3RyaW5nIGFmdGVyIGEgY2FsbAorICAgICAqIHRvIHdlYmtp
dF9maW5kX2NvbnRyb2xsZXJfY291bnRfbWF0Y2hlcygpLgorICAgICAqLworICAgIHNpZ25hbHNb
Q09VTlRFRF9NQVRDSEVTXSA9CisgICAgICAgIGdfc2lnbmFsX25ldygiY291bnRlZC1tYXRjaGVz
IiwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGdPYmplY3RDbGFzcyks
CisgICAgICAgICAgICAgICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAg
ICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxf
Vk9JRF9fVUlOVCwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9OT05FLCAxLCBHX1RZUEVf
VUlOVCk7Cit9CisKKy8qKgorICogd2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfc2VhcmNoX3Rl
eHQ6CisgKiBAZmluZF9jb250cm9sbGVyOiB0aGUgI1dlYktpdEZpbmRDb250cm9sbGVyCisgKgor
ICogR2V0cyB0aGUgc3RyaW5nIHRoYXQgQGZpbmRfY29udHJvbGxlciBpcyBjdXJyZW50bHkgc2Vh
cmNoaW5nCisgKiBmb3IuIFRoaXMgc3RyaW5nIGlzIHBhc3NlZCB0byBlaXRoZXIKKyAqIHdlYmtp
dF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoKCkgb3IKKyAqIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJf
Y291bnRfbWF0Y2hlcygpLgorICoKKyAqIFJldHVybnM6IHRoZSBzdHJpbmcgdG8gbG9vayBmb3Ig
aW4gdGhlICNXZWJLaXRXZWJWaWV3LgorICovCitjb25zdCBjaGFyKiB3ZWJraXRfZmluZF9jb250
cm9sbGVyX2dldF9zZWFyY2hfdGV4dChXZWJLaXRGaW5kQ29udHJvbGxlciogZmluZENvbnRyb2xs
ZXIpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0ZJTkRfQ09OVFJPTExF
UihmaW5kQ29udHJvbGxlciksIDApOworCisgICAgcmV0dXJuIGZpbmRDb250cm9sbGVyLT5wcml2
LT5zdHJpbmcuZGF0YSgpOworfQorCisvKioKKyAqIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0
X29wdGlvbnM6CisgKiBAZmluZF9jb250cm9sbGVyOiB0aGUgI1dlYktpdEZpbmRDb250cm9sbGVy
CisgKgorICogR2V0cyBhIGJpdG1hc2sgY29udGFpbmluZyB0aGUgI1dlYktpdEZpbmRPcHRpb25z
IGFzc29jaWF0ZWQgd2l0aAorICogdGhlIGN1cnJlbnQgc2VhcmNoLgorICoKKyAqIFJldHVybnM6
IGEgYml0bWFzayBjb250YWluaW5nIHRoZSAjV2ViS2l0RmluZE9wdGlvbnMgYXNzb2NpYXRlZAor
ICogd2l0aCB0aGUgY3VycmVudCBzZWFyY2guCisgKi8KK2d1aW50IHdlYmtpdF9maW5kX2NvbnRy
b2xsZXJfZ2V0X29wdGlvbnMoV2ViS2l0RmluZENvbnRyb2xsZXIqIGZpbmRDb250cm9sbGVyKQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19GSU5EX0NPTlRST0xMRVIoZmlu
ZENvbnRyb2xsZXIpLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUpOworCisgICAgcmV0dXJuIGZp
bmRDb250cm9sbGVyLT5wcml2LT5maW5kT3B0aW9uczsKK30KKworLyoqCisgKiB3ZWJraXRfZmlu
ZF9jb250cm9sbGVyX2dldF9tYXhfbWF0Y2hfY291bnQ6CisgKiBAZmluZF9jb250cm9sbGVyOiB0
aGUgI1dlYktpdEZpbmRDb250cm9sbGVyCisgKgorICogR2V0cyB0aGUgbWF4aW11bSBudW1iZXIg
b2YgbWF0Y2hlcyB0byByZXBvcnQgZHVyaW5nIGEgdGV4dAorICogbG9va3VwLiBUaGlzIG51bWJl
ciBpcyBwYXNzZWQgYXMgdGhlIGxhc3QgYXJndW1lbnQgb2YKKyAqIHdlYmtpdF9maW5kX2NvbnRy
b2xsZXJfc2VhcmNoKCkgb3IKKyAqIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfY291bnRfbWF0Y2hl
cygpLgorICoKKyAqIFJldHVybnM6IHRoZSBtYXhpbXVtIG51bWJlciBvZiBtYXRjaGVzIHRvIHJl
cG9ydC4KKyAqLworZ3VpbnQgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfbWF4X21hdGNoX2Nv
dW50KFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxlcikKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRklORF9DT05UUk9MTEVSKGZpbmRDb250cm9sbGVyKSwg
MCk7CisKKyAgICByZXR1cm4gZmluZENvbnRyb2xsZXItPnByaXYtPm1heE1hdGNoQ291bnQ7Cit9
CisKKy8qKgorICogd2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfd2ViX3ZpZXc6CisgKiBAZmlu
ZF9jb250cm9sbGVyOiB0aGUgI1dlYktpdEZpbmRDb250cm9sbGVyCisgKgorICogR2V0cyB0aGUg
I1dlYktpdFdlYlZpZXcgdGhpcyBmaW5kIGNvbnRyb2xsZXIgaXMgYXNzb2NpYXRlZCB0by4gRG8K
KyAqIG5vdCB1bnJlZiB0aGUgcmV0dXJuZWQgaW5zdGFuY2UgYXMgaXQgYmVsb25ncyB0byB0aGUK
KyAqICNXZWJLaXRGaW5kQ29udHJvbGxlci4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9u
ZSk6IHRoZSAjV2ViS2l0V2ViVmlldy4KKyAqLworV2ViS2l0V2ViVmlldyogd2Via2l0X2ZpbmRf
Y29udHJvbGxlcl9nZXRfd2ViX3ZpZXcoV2ViS2l0RmluZENvbnRyb2xsZXIqIGZpbmRDb250cm9s
bGVyKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19GSU5EX0NPTlRST0xM
RVIoZmluZENvbnRyb2xsZXIpLCAwKTsKKworICAgIHJldHVybiBmaW5kQ29udHJvbGxlci0+cHJp
di0+d2ViVmlldzsKK30KKworc3RhdGljIHZvaWQgd2ViS2l0RmluZENvbnRyb2xsZXJQZXJmb3Jt
KFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxlciwgV2ViS2l0RmluZENvbnRyb2xs
ZXJGaW5kT3BlcmF0aW9uIGZpbmRPcGVyYXRpb24pCit7CisgICAgV0tGaW5kT3B0aW9ucyB3a0Zp
bmRPcHRpb25zID0gc3RhdGljX2Nhc3Q8V0tGaW5kT3B0aW9ucz4oZmluZENvbnRyb2xsZXItPnBy
aXYtPmZpbmRPcHRpb25zKTsKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tTZWFyY2hU
ZXh0KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGZpbmRDb250cm9sbGVy
LT5wcml2LT5zdHJpbmcuZGF0YSgpKSk7CisgICAgV0tQYWdlUmVmIHdrUGFnZSA9IGdldFdLUGFn
ZUZyb21XZWJLaXRXZWJWaWV3KGZpbmRDb250cm9sbGVyLT5wcml2LT53ZWJWaWV3KTsKKworICAg
IGlmIChmaW5kT3BlcmF0aW9uID09IE9QX0ZJTkQpCisgICAgICAgIFdLUGFnZUZpbmRTdHJpbmco
d2tQYWdlLCB3a1NlYXJjaFRleHQuZ2V0KCksIHdrRmluZE9wdGlvbnMsIGZpbmRDb250cm9sbGVy
LT5wcml2LT5tYXhNYXRjaENvdW50KTsKKyAgICBlbHNlCisgICAgICAgIFdLUGFnZUNvdW50U3Ry
aW5nTWF0Y2hlcyh3a1BhZ2UsIHdrU2VhcmNoVGV4dC5nZXQoKSwgd2tGaW5kT3B0aW9ucywgZmlu
ZENvbnRyb2xsZXItPnByaXYtPm1heE1hdGNoQ291bnQpOworfQorCitzdGF0aWMgaW5saW5lIHZv
aWQgd2ViS2l0RmluZENvbnRyb2xsZXJTZXRTZWFyY2hEYXRhKFdlYktpdEZpbmRDb250cm9sbGVy
KiBmaW5kQ29udHJvbGxlciwgY29uc3QgZ2NoYXIqIHNlYXJjaFRleHQsIGd1aW50IGZpbmRPcHRp
b25zLCBndWludCBtYXhNYXRjaENvdW50KQoreworICAgIGZpbmRDb250cm9sbGVyLT5wcml2LT5z
dHJpbmcgPSBzZWFyY2hUZXh0OworICAgIGZpbmRDb250cm9sbGVyLT5wcml2LT5maW5kT3B0aW9u
cyA9IGZpbmRPcHRpb25zOworICAgIGZpbmRDb250cm9sbGVyLT5wcml2LT5tYXhNYXRjaENvdW50
ID0gbWF4TWF0Y2hDb3VudDsKK30KKworLyoqCisgKiB3ZWJraXRfZmluZF9jb250cm9sbGVyX3Nl
YXJjaDoKKyAqIEBmaW5kX2NvbnRyb2xsZXI6IHRoZSAjV2ViS2l0RmluZENvbnRyb2xsZXIKKyAq
IEBzZWFyY2hfdGV4dDogdGhlIHN0cmluZyB0byBsb29rIGZvcgorICogQGZpbmRfb3B0aW9uczog
YSBiaXRtYXNrIHdpdGggdGhlICNXZWJLaXRGaW5kT3B0aW9ucyB1c2VkIGluIHRoZSBzZWFyY2gK
KyAqIEBtYXhfbWF0Y2hfY291bnQ6IHRoZSBtYXhpbXVtIG51bWJlciBvZiBtYXRjaGVzIGFsbG93
ZWQgaW4gdGhlIHNlYXJjaAorICoKKyAqIExvb2tzIGZvciBAc2VhcmNoX3RleHQgaW4gdGhlICNX
ZWJLaXRXZWJWaWV3IGFzc29jaWF0ZWQgd2l0aAorICogQGZpbmRfY29udHJvbGxlci4gVGhlIG91
dGNvbWUgb2YgdGhlIHNlYXJjaCB3aWxsIGJlIGFzeW5jaHJvbm91c2x5CisgKiBwcm92aWRlZCBi
eSB0aGUgV2ViS2l0RmluZENvbnRyb2xsZXI6OmZvdW5kLXN0cmluZyBhbmQKKyAqIFdlYktpdEZp
bmRDb250cm9sbGVyOjpmYWlsZWQtdG8tZmluZC1zdHJpbmcuCisgKgorICogVG8gbG9vayBmb3Ig
dGhlIG5leHQgb3IgcHJldmlvdXMgb2NjdXJyZW5jZXMgb2YgdGhlIHNhbWUgc3RyaW5nCisgKiB3
aXRoIHRoZSBzYW1lIGZpbmQgb3B0aW9ucyB1c2Ugd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFy
Y2hfbmV4dCgpCisgKiBhbmQvb3Igd2Via2l0X2ZpbmRfb3B0aW9uc19wcmV2aW91cygpLiBUaGUK
KyAqICNXZWJLaXRGaW5kQ29udHJvbGxlciB3aWxsIHVzZSB0aGUgc2FtZSBzdHJpbmcgYW5kIG9w
dGlvbnMgZm9yIHRoZQorICogZm9sbG93aW5nIHNlYXJjaGVzIHVubGVzcyB0aGV5IGFyZSBtb2Rp
ZmllZCBieSBhbm90aGVyIGNhbGwgdG8gdGhpcworICogbWV0aG9kLgorICoKKyAqIE5vdGUgdGhh
dCBpZiB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgaXMgaGlnaGVyIHRoYW4gQG1heF9tYXRjaF9jb3Vu
dAorICogdGhlbiB3ZWJraXRfZmluZF9zdHJpbmdfZ2V0X21hdGNoX2NvdW50KCkgd2lsbCByZXR1
cm4gR19NQVhVSU5UCisgKiBpbnN0ZWFkIG9mIHRoZSBhY3R1YWwgbnVtYmVyIG9mIG1hdGNoZXMu
CisgKi8KK3ZvaWQgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2goV2ViS2l0RmluZENvbnRy
b2xsZXIqIGZpbmRDb250cm9sbGVyLCBjb25zdCBnY2hhciogc2VhcmNoVGV4dCwgZ3VpbnQgZmlu
ZE9wdGlvbnMsIGd1aW50IG1heE1hdGNoQ291bnQpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfSVNfRklORF9DT05UUk9MTEVSKGZpbmRDb250cm9sbGVyKSk7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChzZWFyY2hUZXh0KTsKKworICAgIHdlYktpdEZpbmRDb250cm9sbGVyU2V0U2VhcmNo
RGF0YShmaW5kQ29udHJvbGxlciwgc2VhcmNoVGV4dCwgZmluZE9wdGlvbnMsIG1heE1hdGNoQ291
bnQpOworICAgIHdlYktpdEZpbmRDb250cm9sbGVyUGVyZm9ybShmaW5kQ29udHJvbGxlciwgT1Bf
RklORCk7Cit9CisKKy8qKgorICogd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfbmV4dDoK
KyAqIEBmaW5kX2NvbnRyb2xsZXI6IHRoZSAjV2ViS2l0RmluZENvbnRyb2xsZXIKKyAqCisgKiBM
b29rcyBmb3IgdGhlIG5leHQgb2NjdXJyZW5jZSBvZiB0aGUgc2VhcmNoIHN0cmluZy4KKyAqCisg
KiBDYWxsaW5nIHRoaXMgbWV0aG9kIGJlZm9yZSB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJj
aCgpIG9yCisgKiB3ZWJraXRfZmluZF9jb250cm9sbGVyX2NvdW50X21hdGNoZXMoKSBpcyBhIHBy
b2dyYW1taW5nIGVycm9yLgorICovCit2b2lkIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNo
X25leHQoV2ViS2l0RmluZENvbnRyb2xsZXIqIGZpbmRDb250cm9sbGVyKQoreworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0ZJTkRfQ09OVFJPTExFUihmaW5kQ29udHJvbGxlcikpOwor
CisgICAgZmluZENvbnRyb2xsZXItPnByaXYtPmZpbmRPcHRpb25zID0gZmluZENvbnRyb2xsZXIt
PnByaXYtPmZpbmRPcHRpb25zICYgfldFQktJVF9GSU5EX09QVElPTlNfQkFDS1dBUkRTOworICAg
IHdlYktpdEZpbmRDb250cm9sbGVyUGVyZm9ybShmaW5kQ29udHJvbGxlciwgT1BfRklORCk7Cit9
CisKKy8qKgorICogd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfcHJldmlvdXM6CisgKiBA
ZmluZF9jb250cm9sbGVyOiB0aGUgI1dlYktpdEZpbmRDb250cm9sbGVyCisgKgorICogTG9va3Mg
Zm9yIHRoZSBwcmV2aW91cyBvY2N1cnJlbmNlIG9mIHRoZSBzZWFyY2ggdGV4dC4KKyAqCisgKiBD
YWxsaW5nIHRoaXMgbWV0aG9kIGJlZm9yZSB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaCgp
IG9yCisgKiB3ZWJraXRfZmluZF9jb250cm9sbGVyX2NvdW50X21hdGNoZXMoKSBpcyBhIHByb2dy
YW1taW5nIGVycm9yLgorICovCit2b2lkIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX3By
ZXZpb3VzKFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxlcikKK3sKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9JU19GSU5EX0NPTlRST0xMRVIoZmluZENvbnRyb2xsZXIpKTsK
KworICAgIGZpbmRDb250cm9sbGVyLT5wcml2LT5maW5kT3B0aW9ucyA9IGZpbmRDb250cm9sbGVy
LT5wcml2LT5maW5kT3B0aW9ucyB8IFdFQktJVF9GSU5EX09QVElPTlNfQkFDS1dBUkRTOworICAg
IHdlYktpdEZpbmRDb250cm9sbGVyUGVyZm9ybShmaW5kQ29udHJvbGxlciwgT1BfRklORCk7Cit9
CisKKy8qKgorICogd2Via2l0X2ZpbmRfY29udHJvbGxlcl9jb3VudF9tYXRjaGVzOgorICogQGZp
bmRfY29udHJvbGxlcjogdGhlICNXZWJLaXRGaW5kQ29udHJvbGxlcgorICogQHNlYXJjaF90ZXh0
OiB0aGUgc3RyaW5nIHRvIGxvb2sgZm9yCisgKiBAZmluZF9vcHRpb25zOiBhIGJpdG1hc2sgd2l0
aCB0aGUgI1dlYktpdEZpbmRPcHRpb25zIHVzZWQgaW4gdGhlIHNlYXJjaAorICogQG1heF9tYXRj
aF9jb3VudDogdGhlIG1heGltdW0gbnVtYmVyIG9mIG1hdGNoZXMgYWxsb3dlZCBpbiB0aGUgc2Vh
cmNoCisgKgorICogQ291bnRzIHRoZSBudW1iZXIgb2YgbWF0Y2hlcyBmb3IgQHNlYXJjaF90ZXh0
IGZvdW5kIGluIHRoZQorICogI1dlYktpdFdlYlZpZXcgd2l0aCB0aGUgcHJvdmlkZWQgQGZpbmRf
b3B0aW9ucy4gVGhlIG51bWJlciBvZgorICogbWF0Y2hlcyB3aWxsIGJlIHByb3ZpZGVkIGJ5IHRo
ZQorICogV2ViS2l0RmluZENvbnRyb2xsZXI6OmNvdW50ZWQtbWF0Y2hlcyBzaWduYWwuCisgKi8K
K3ZvaWQgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9jb3VudF9tYXRjaGVzKFdlYktpdEZpbmRDb250
cm9sbGVyKiBmaW5kQ29udHJvbGxlciwgY29uc3QgZ2NoYXIqIHNlYXJjaFRleHQsIGd1aW50IGZp
bmRPcHRpb25zLCBndWludCBtYXhNYXRjaENvdW50KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0lTX0ZJTkRfQ09OVFJPTExFUihmaW5kQ29udHJvbGxlcikpOworICAgIGdfcmV0dXJu
X2lmX2ZhaWwoc2VhcmNoVGV4dCk7CisKKyAgICB3ZWJLaXRGaW5kQ29udHJvbGxlclNldFNlYXJj
aERhdGEoZmluZENvbnRyb2xsZXIsIHNlYXJjaFRleHQsIGZpbmRPcHRpb25zLCBtYXhNYXRjaENv
dW50KTsKKyAgICB3ZWJLaXRGaW5kQ29udHJvbGxlclBlcmZvcm0oZmluZENvbnRyb2xsZXIsIE9Q
X0NPVU5UKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEZpbmRDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRGaW5kQ29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY1ZjY0YTVmNDMwMTgyNjhjN2Uy
NmZmZDBmYTdhNzA3MzE2ZDYyMmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaW5kQ29udHJvbGxlci5oCkBAIC0wLDAgKzEsMTA2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19X
RUJLSVQyX0hfSU5TSURFX18pICYmICFkZWZpbmVkKFdFQktJVDJfQ09NUElMQVRJT04pCisjZXJy
b3IgIk9ubHkgPHdlYmtpdDIvd2Via2l0Mi5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgor
I2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RmluZENvbnRyb2xsZXJfaAorI2RlZmluZSBXZWJLaXRG
aW5kQ29udHJvbGxlcl9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdl
YmtpdDIvV2ViS2l0V2ViVmlldy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lU
X1RZUEVfRklORF9DT05UUk9MTEVSICAgICAgICAgICAgKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJf
Z2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0ZJTkRfQ09OVFJPTExFUihvYmopICAgICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9GSU5EX0NP
TlRST0xMRVIsIFdlYktpdEZpbmRDb250cm9sbGVyKSkKKyNkZWZpbmUgV0VCS0lUX0ZJTkRfQ09O
VFJPTExFUl9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyks
ICBXRUJLSVRfVFlQRV9GSU5EX0NPTlRST0xMRVIsIFdlYktpdEZpbmRDb250cm9sbGVyQ2xhc3Mp
KQorI2RlZmluZSBXRUJLSVRfSVNfRklORF9DT05UUk9MTEVSKG9iaikgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX0ZJTkRfQ09OVFJPTExFUikp
CisjZGVmaW5lIFdFQktJVF9JU19GSU5EX0NPTlRST0xMRVJfQ0xBU1Moa2xhc3MpIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfRklORF9DT05UUk9MTEVSKSkK
KyNkZWZpbmUgV0VCS0lUX0ZJTkRfQ09OVFJPTExFUl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9J
TlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9GSU5EX0NPTlRST0xMRVIsIFdl
YktpdEZpbmRDb250cm9sbGVyQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RmluZENv
bnRyb2xsZXJQcml2YXRlIFdlYktpdEZpbmRDb250cm9sbGVyUHJpdmF0ZTsKKworLyoqCisgKiBX
ZWJLaXRGaW5kT3B0aW9uczoKKyAqIEBXRUJLSVRfRklORF9PUFRJT05TX05PTkU6IG5vIHNlYXJj
aCBmbGFncywgdGhpcyBtZWFucyBhIGNhc2Ugc2Vuc2l0aXZlLCBubyB3cmFwLCBmb3J3YXJkIG9u
bHkgc2VhcmNoCisgKiBAV0VCS0lUX0ZJTkRfT1BUSU9OU19DQVNFX0lOU0VOU0lUSVZFOiBjYXNl
IGluc2Vuc2l0aXZlIHNlYXJjaAorICogQFdFQktJVF9BVF9XT1JEX1NUQVJUUzogc2VhcmNoIG9u
bHkgYXQgdGhlIGJlZ2luaW5nIG9mIHRoZSB3b3JkcworICogQFdFQktJVF9GSU5EX09QVElPTlNf
VFJFQVRfTUVESUFMX0NBUElUQUxfQVNfV09SRF9TVEFSVDogdHJlYXQgY2FwaXRhbCBsZXR0ZXJz
IGluIHRoZSBtaWRkbGUgb2Ygd29yZHMgYXMgd29yZCBzdGFydAorICogQFdFQktJVF9GSU5EX09Q
VElPTlNfQkFDS1dBUkRTOiBzZWFyY2ggYmFja3dhcmRzCisgKiBAV0VCS0lUX0ZJTkRfT1BUSU9O
U19XUkFQX0FST1VORDogaWYgbm90IHByZXNlbnQgc2VhcmNoIHdpbGwgc3RvcCBhdCB0aGUgZW5k
IG9mIHRoZSBkb2N1bWVudAorICovCit0eXBlZGVmIGVudW0geworICBXRUJLSVRfRklORF9PUFRJ
T05TX05PTkUsCisKKyAgV0VCS0lUX0ZJTkRfT1BUSU9OU19DQVNFX0lOU0VOU0lUSVZFID0gICAg
ICAgICAgICAgICAgICAgMSA8PCAwLAorICBXRUJLSVRfRklORF9PUFRJT05TX0FUX1dPUkRfU1RB
UlRTID0gICAgICAgICAgICAgICAgICAgICAxIDw8IDEsCisgIFdFQktJVF9GSU5EX09QVElPTlNf
VFJFQVRfTUVESUFMX0NBUElUQUxfQVNfV09SRF9TVEFSVCA9IDEgPDwgMiwKKyAgV0VCS0lUX0ZJ
TkRfT1BUSU9OU19CQUNLV0FSRFMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgMSA8PCAzLAor
ICBXRUJLSVRfRklORF9PUFRJT05TX1dSQVBfQVJPVU5EID0gICAgICAgICAgICAgICAgICAgICAg
ICAxIDw8IDQsCit9IFdlYktpdEZpbmRPcHRpb25zOworCitzdHJ1Y3QgX1dlYktpdEZpbmRDb250
cm9sbGVyIHsKKyAgICBHT2JqZWN0IHBhcmVudDsKKworICAvKjwgcHJpdmF0ZSA+Ki8KKyAgV2Vi
S2l0RmluZENvbnRyb2xsZXJQcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRGaW5k
Q29udHJvbGxlckNsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKwor
V0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfdHlwZSAgICAgICAg
ICAgICh2b2lkKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZmluZF9jb250cm9sbGVyX3Nl
YXJjaCAgICAgICAgICAgICAgKFdlYktpdEZpbmRDb250cm9sbGVyICpmaW5kX2NvbnRyb2xsZXIs
CisJCQkJCSAgICBjb25zdCBnY2hhciAgICAgICAgICAqc2VhcmNoX3RleHQsCisJCQkJCSAgICBn
dWludCAgICAgICAgICAgICAgICAgZmluZF9vcHRpb25zLAorCQkJCQkgICAgZ3VpbnQgICAgICAg
ICAgICAgICAgIG1heF9tYXRjaF9jb3VudCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Zp
bmRfY29udHJvbGxlcl9zZWFyY2hfbmV4dCAgICAgICAgIChXZWJLaXRGaW5kQ29udHJvbGxlciAq
ZmluZF9jb250cm9sbGVyKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZmluZF9jb250cm9s
bGVyX3NlYXJjaF9wcmV2aW91cyAgICAgKFdlYktpdEZpbmRDb250cm9sbGVyICpmaW5kX2NvbnRy
b2xsZXIpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfY291bnRf
bWF0Y2hlcyAgICAgICAoV2ViS2l0RmluZENvbnRyb2xsZXIgKmZpbmRfY29udHJvbGxlciwKKwkJ
CQkJICAgIGNvbnN0IGdjaGFyICAgICAgICAgICpzZWFyY2hfdGV4dCwKKwkJCQkJICAgIGd1aW50
ICAgICAgICAgICAgICAgICBmaW5kX29wdGlvbnMsCisJCQkJCSAgICBndWludCAgICAgICAgICAg
ICAgICAgbWF4X21hdGNoX2NvdW50KTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCit3ZWJr
aXRfZmluZF9jb250cm9sbGVyX2dldF9zZWFyY2hfdGV4dCAgICAgKFdlYktpdEZpbmRDb250cm9s
bGVyICpmaW5kX2NvbnRyb2xsZXIpOworCitXRUJLSVRfQVBJIGd1aW50Cit3ZWJraXRfZmluZF9j
b250cm9sbGVyX2dldF9vcHRpb25zICAgICAgICAgKFdlYktpdEZpbmRDb250cm9sbGVyICpmaW5k
X2NvbnRyb2xsZXIpOworCitXRUJLSVRfQVBJIGd1aW50Cit3ZWJraXRfZmluZF9jb250cm9sbGVy
X2dldF9tYXhfbWF0Y2hfY291bnQgKFdlYktpdEZpbmRDb250cm9sbGVyICpmaW5kX2NvbnRyb2xs
ZXIpOworCitXRUJLSVRfQVBJIFdlYktpdFdlYlZpZXcgKgord2Via2l0X2ZpbmRfY29udHJvbGxl
cl9nZXRfd2ViX3ZpZXcgICAgICAgIChXZWJLaXRGaW5kQ29udHJvbGxlciAqZmluZF9jb250cm9s
bGVyKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmgKaW5kZXggM2FkNmMxNTM2ZTQ3NzVhZWIxYjZk
YzY1YTJlMGRkNWIwZDNkZTNhNC4uNjdhYzE5OGQ4NTIxNWFjMDA4ZjBkZDlhZjFkNDRkNjc1NGYz
OTAzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBy
aXZhdGUuaApAQCAtNDEsNiArNDEsOSBAQCBHX0JFR0lOX0RFQ0xTCiAjZGVmaW5lIENPTVBJTEVf
QVNTRVJUX01BVENISU5HX0VOVU0od2Via2l0TmFtZSwgd2ViY29yZU5hbWUpIFwKICAgICAgICAg
Q09NUElMRV9BU1NFUlQoaW50KHdlYmtpdE5hbWUpID09IGludChXZWJDb3JlOjp3ZWJjb3JlTmFt
ZSksIG1pc21hdGNoaW5nRW51bXMpCiAKKyNkZWZpbmUgQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdf
QVBJX0VOVU0oYXBpTmFtZSwgd2Via2l0TmFtZSkgXAorICAgICAgICBDT01QSUxFX0FTU0VSVChp
bnQoYXBpTmFtZSkgPT0gaW50KHdlYmtpdE5hbWUpLCBtaXNtYXRjaGluZ0VudW1zKQorCiBHX0VO
RF9ERUNMUwogCiAjZW5kaWYgLy8gV2ViS2l0UHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCmluZGV4IGNmOWM3ODUxYTMz
YTcyOTY5OTZhNGZjOWVjMDAyNDMwOWU3ODk1MjguLmY1ZWE4NjEzN2E0MWY3Nzk0NzA4ZTU5YTU2
NmM2MTM2ZjJhNWMwZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlZpZXcuY3BwCkBAIC04MSw2ICs4MSw3IEBAIHN0cnVjdCBfV2ViS2l0V2Vi
Vmlld1ByaXZhdGUgewogICAgIEdSZWZQdHI8V2ViS2l0QmFja0ZvcndhcmRMaXN0PiBiYWNrRm9y
d2FyZExpc3Q7CiAgICAgR1JlZlB0cjxXZWJLaXRTZXR0aW5ncz4gc2V0dGluZ3M7CiAgICAgR1Jl
ZlB0cjxXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzPiB3aW5kb3dQcm9wZXJ0aWVzOworICAgIEdSZWZQ
dHI8V2ViS2l0RmluZENvbnRyb2xsZXI+IGZpbmRDb250cm9sbGVyOwogfTsKIAogc3RhdGljIGd1
aW50IHNpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OwpAQCAtMTIwMiwzICsxMjAzLDIzIEBA
IGdkb3VibGUgd2Via2l0X3dlYl92aWV3X2dldF96b29tX2xldmVsKFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcpCiAgICAgV0tQYWdlUmVmIHdrUGFnZSA9IHRvQVBJKHdlYmtpdFdlYlZpZXdCYXNlR2V0
UGFnZShXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3ZWJWaWV3KSkpOwogICAgIHJldHVybiBXS1BhZ2VH
ZXRQYWdlWm9vbUZhY3Rvcih3a1BhZ2UpOwogfQorCisvKioKKyAqIHdlYmtpdF93ZWJfdmlld19n
ZXRfZmluZF9jb250cm9sbGVyOgorICogQHdlYl92aWV3OiB0aGUgI1dlYktpdFdlYlZpZXcKKyAq
CisgKiBHZXRzIHRoZSAjV2ViS2l0RmluZENvbnRyb2xsZXIgdGhhdCB3aWxsIGFsbG93IHRoZSBj
YWxsZXIgdG8gcXVlcnkKKyAqIHRoZSAjV2ViS2l0V2ViVmlldyBmb3IgdGhlIHRleHQgdG8gbG9v
ayBmb3IuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiB0aGUgI1dlYktpdEZpbmRD
b250cm9sbGVyIGFzc29jaWF0ZWQgdG8KKyAqIHRoaXMgcGFydGljdWxhciAjV2ViS2l0V2ViVmll
dy4KKyAqLworV2ViS2l0RmluZENvbnRyb2xsZXIqIHdlYmtpdF93ZWJfdmlld19nZXRfZmluZF9j
b250cm9sbGVyKFdlYktpdFdlYlZpZXcgKndlYlZpZXcpCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCAwKTsKKworICAgIGlmICghd2ViVmll
dy0+cHJpdi0+ZmluZENvbnRyb2xsZXIpCisgICAgICAgIHdlYlZpZXctPnByaXYtPmZpbmRDb250
cm9sbGVyID0gYWRvcHRHUmVmKFdFQktJVF9GSU5EX0NPTlRST0xMRVIoZ19vYmplY3RfbmV3KFdF
QktJVF9UWVBFX0ZJTkRfQ09OVFJPTExFUiwgIndlYi12aWV3Iiwgd2ViVmlldywgTlVMTCkpKTsK
KworICAgIHJldHVybiB3ZWJWaWV3LT5wcml2LT5maW5kQ29udHJvbGxlci5nZXQoKTsKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaAppbmRl
eCBhMjVjNDM4ZGQ5MDE5MzU0MGIwNTVmZjZjNjc0ZmE3YWQzNjdlZjgxLi5iOGJlMDNjYmNmNTI4
YWZiYjBlYjBlMGVkYzU5ZDE3ZGE1NDFiMDZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNs
dWRlIDx3ZWJraXQyL1dlYktpdEJhY2tGb3J3YXJkTGlzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIv
V2ViS2l0RGVmaW5lcy5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RmluZENvbnRyb2xsZXIu
aD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYkNvbnRleHQuaD4KICNpbmNsdWRlIDx3ZWJr
aXQyL1dlYktpdFNldHRpbmdzLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRVUklSZXF1ZXN0
Lmg+CkBAIC00NSw4ICs0Niw2IEBAIEdfQkVHSU5fREVDTFMKICNkZWZpbmUgV0VCS0lUX0lTX1dF
Ql9WSUVXX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdF
QktJVF9UWVBFX1dFQl9WSUVXKSkKICNkZWZpbmUgV0VCS0lUX1dFQl9WSUVXX0dFVF9DTEFTUyhv
YmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX1dFQl9W
SUVXLCBXZWJLaXRXZWJWaWV3Q2xhc3MpKQogCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmll
dyBXZWJLaXRXZWJWaWV3OwotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdDbGFzcyBXZWJL
aXRXZWJWaWV3Q2xhc3M7CiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmlld1ByaXZhdGUgV2Vi
S2l0V2ViVmlld1ByaXZhdGU7CiAKIC8qKgpAQCAtMjA3LDYgKzIwNiw5IEBAIHdlYmtpdF93ZWJf
dmlld19zZXRfem9vbV9sZXZlbCAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAg
ICAgICp3ZWJfdmllCiBXRUJLSVRfQVBJIGdkb3VibGUKIHdlYmtpdF93ZWJfdmlld19nZXRfem9v
bV9sZXZlbCAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmll
dyk7CiAKK1dFQktJVF9BUEkgV2ViS2l0RmluZENvbnRyb2xsZXIgKgord2Via2l0X3dlYl92aWV3
X2dldF9maW5kX2NvbnRyb2xsZXIgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAg
KndlYl92aWV3KTsKKwogR19FTkRfREVDTFMKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbApp
bmRleCBjNTEzOTU5YzI2Y2UwNDQ4ZDk5MmQwNmVmNTc4ODZhYTY2NjRiZjMwLi5kYTVlN2NmZjM2
ZWFkNjNiMzBjMTgyMmE3N2VjMzRiYjkwNTE2ZjE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKQEAg
LTIxLDYgKzIxLDcgQEAKICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0VVJJUmVzcG9u
c2UueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdFdpbmRvd1Byb3BlcnRp
ZXMueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdEVycm9yLnhtbCIvPgor
ICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRGaW5kQ29udHJvbGxlci54bWwiLz4KICAg
PC9jaGFwdGVyPgogCiAgIDxpbmRleCBpZD0iaW5kZXgtYWxsIj4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlv
bnMudHh0CmluZGV4IDg0NDY4OTQ1ZDEyYjVmNmMwNDUyOTA5MzU3MDZlZTlhMjg5ZmI4MmYuLjA5
OTdmZjhkNGU1Zjc3M2U1MWFlYmNiMTE2MDI2MTU5MjRhM2VlOWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNl
Y3Rpb25zLnR4dApAQCAtNzQsNiArNzQsNyBAQCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdz
CiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVzCiB3ZWJraXRfd2ViX3ZpZXdf
c2V0X3pvb21fbGV2ZWwKIHdlYmtpdF93ZWJfdmlld19nZXRfem9vbV9sZXZlbAord2Via2l0X3dl
Yl92aWV3X2dldF9maW5kX2NvbnRyb2xsZXIKIAogPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CiBXZWJL
aXRXZWJWaWV3Q2xhc3MKQEAgLTI5NywzICsyOTgsMzIgQEAgd2Via2l0X3BsdWdpbl9lcnJvcl9x
dWFyawogd2Via2l0X3BvbGljeV9lcnJvcl9xdWFyawogPC9TRUNUSU9OPgogCis8U0VDVElPTj4K
KzxGSUxFPldlYktpdEZpbmRDb250cm9sbGVyPC9GSUxFPgorV2ViS2l0RmluZENvbnRyb2xsZXIK
K3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoCit3ZWJraXRfZmluZF9jb250cm9sbGVyX2Nv
dW50X21hdGNoZXMKK3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X2ZsYWdzCit3ZWJraXRfZmlu
ZF9jb250cm9sbGVyX2dldF9tYXRjaF9jb3VudAord2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRf
bWF4X21hdGNoX2NvdW50Cit3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9zZWFyY2hfc3RyaW5n
Cit3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF93ZWJfdmlldword2Via2l0X2ZpbmRfY29udHJv
bGxlcl9uZXh0Cit3ZWJraXRfZmluZF9jb250cm9sbGVyX3ByZXZpdW9zCisKKzxTVUJTRUNUSU9O
IFN0YW5kYXJkPgorV2ViS2l0RmluZENvbnRyb2xsZXJDbGFzcworV0VCS0lUX1RZUEVfRklORF9D
T05UUk9MTEVSCitXRUJLSVRfRklORF9DT05UUk9MTEVSCitXRUJLSVRfSVNfRklORF9DT05UUk9M
TEVSCitXRUJLSVRfRklORF9DT05UUk9MTEVSX0NMQVNTCitXRUJLSVRfSVNfRklORF9DT05UUk9M
TEVSX0NMQVNTCitXRUJLSVRfRklORF9DT05UUk9MTEVSX0dFVF9DTEFTUworCis8U1VCU0VDVElP
Tj4KK3dlYmtpdF9maW5kX29wdGlvbnNfZ2V0X3R5cGUKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4K
K1dlYktpdEZpbmRDb250cm9sbGVyUHJpdmF0ZQord2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRf
dHlwZQorPC9TRUNUSU9OPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzCmluZGV4IDQwYTg0MWM4OWM5YzQ3YjUyNGEyN2Ux
YjExODdlNzNiMjZhNDQ2ZmEuLjAwODhjMWMwMWE3MTNlMmU2ZDZmMGQ3ZDYzMDZhZTM1OWFjNWY0
NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Vi
a2l0Mmd0ay50eXBlcworKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2Nz
L3dlYmtpdDJndGsudHlwZXMKQEAgLTgsMyArOCw0IEBAIHdlYmtpdF9zZXR0aW5nc19nZXRfdHlw
ZQogd2Via2l0X3VyaV9yZXNwb25zZV9nZXRfdHlwZQogd2Via2l0X3VyaV9yZXF1ZXN0X2dldF90
eXBlCiB3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3R5cGUKK3dlYmtpdF9maW5kX2NvbnRy
b2xsZXJfZ2V0X3R5cGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KaW5kZXggZDkxMmI2NTdlMDM2NmI2ODJhOGM3OTE5NDkw
NmE1MzM2ODAyYzk2ZS4uMTQ1ZjIyMTU2ZjRhMGExMDhiZDE0Y2ViZjQxZTdjNDA4MjVkMWUxYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFr
ZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05V
bWFrZWZpbGUuYW0KQEAgLTEsOSArMSwxMCBAQAogVEVTVF9QUk9HUyArPSBcCisJUHJvZ3JhbXMv
V2ViS2l0MkFQSVRlc3RzL1Rlc3RCYWNrRm9yd2FyZExpc3QgXAorCVByb2dyYW1zL1dlYktpdDJB
UElUZXN0cy9UZXN0V2ViS2l0RmluZENvbnRyb2xsZXIgXAorCVByb2dyYW1zL1dlYktpdDJBUElU
ZXN0cy9UZXN0V2ViS2l0U2V0dGluZ3MgXAogCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0
V2ViS2l0V2ViQ29udGV4dCBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRX
ZWJWaWV3IFwKLQlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFdlYkxvYWRlckNs
aWVudCBcCi0JUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRTZXR0aW5ncyBcCi0J
UHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RCYWNrRm9yd2FyZExpc3QKKwlQcm9ncmFtcy9X
ZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFdlYkxvYWRlckNsaWVudAogCiBub2luc3RfUFJPR1JB
TVMgKz0gJChURVNUX1BST0dTKQogd2Via2l0Ml90ZXN0c19jcHBmbGFncyA9IFwKQEAgLTc2LDMg
Kzc3LDggQEAgUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RCYWNrRm9yd2FyZExpc3RfQ1BQ
RkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MKIFByb2dyYW1zX1dlYktpdDJBUElUZXN0
c19UZXN0QmFja0ZvcndhcmRMaXN0X0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQogUHJv
Z3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RCYWNrRm9yd2FyZExpc3RfTERGTEFHUyA9ICQod2Vi
a2l0Ml90ZXN0c19sZGZsYWdzKQogCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYktp
dEZpbmRDb250cm9sbGVyX1NPVVJDRVMgPSBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvVGVzdFdlYktpdEZpbmRDb250cm9sbGVyLmNwcAorUHJvZ3JhbXNfV2ViS2l0
MkFQSVRlc3RzX1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlcl9DUFBGTEFHUyA9ICQod2Via2l0Ml90
ZXN0c19jcHBmbGFncykKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViS2l0RmluZENv
bnRyb2xsZXJfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19XZWJLaXQy
QVBJVGVzdHNfVGVzdFdlYktpdEZpbmRDb250cm9sbGVyX0xERkxBR1MgPSAkKHdlYmtpdDJfdGVz
dHNfbGRmbGFncykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0RmluZENvbnRyb2xsZXIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjRlYjgzYmM0MzU4YTM0MmU0Yjk4ZDE4MmY2MmVkNTM5YWE5OWYyY2QKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0
RmluZENvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsMzAwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJMb2Fk
VHJhY2tpbmdUZXN0LmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdDIv
d2Via2l0Mi5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKworc3RhdGljIGNv
bnN0IGNoYXIqIHRlc3RTdHJpbmcgPSAiPGh0bWw+PGJvZHk+Zmlyc3QgdGVzdGluZyBzZWNvbmQg
dGVzdGluZyBzZWNvbmRIYWxmPC9ib2R5PjwvaHRtbD4iOworCitjbGFzcyBGaW5kQ29udHJvbGxl
clRlc3Q6IHB1YmxpYyBMb2FkVHJhY2tpbmdUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJf
VEVTVF9GSVhUVVJFKEZpbmRDb250cm9sbGVyVGVzdCk7CisKKyAgICBGaW5kQ29udHJvbGxlclRl
c3QoKQorICAgICAgICA6IG1fcnVuRmluZFVudGlsQ29tcGxldGlvbihmYWxzZSksCisgICAgICAg
ICAgbV9maW5kQ29udHJvbGxlcih3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ZpbmRfY29udHJvbGxlciht
X3dlYlZpZXcpKQorICAgIHsKKyAgICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RG
aW5pc2hlcyhHX09CSkVDVChtX2ZpbmRDb250cm9sbGVyLmdldCgpKSk7CisgICAgfQorCisgICAg
fkZpbmRDb250cm9sbGVyVGVzdCgpCisgICAgeworICAgICAgICBpZiAobV9maW5kQ29udHJvbGxl
cikKKyAgICAgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX2Zp
bmRDb250cm9sbGVyLmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlz
KTsKKyAgICB9CisKKyAgICB2b2lkIGZpbmQoY29uc3QgY2hhciogc2VhcmNoU3RyaW5nLCBXZWJL
aXRGaW5kT3B0aW9ucyBmaW5kT3B0aW9ucywgZ3VpbnQgbWF4TWF0Y2hDb3VudCkKKyAgICB7Cisg
ICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9maW5kQ29udHJvbGxlci5nZXQoKSwgImZvdW5kLXN0
cmluZyIsIEdfQ0FMTEJBQ0soZm91bmRTdHJpbmdDYWxsYmFjayksIHRoaXMpOworICAgICAgICBn
X3NpZ25hbF9jb25uZWN0KG1fZmluZENvbnRyb2xsZXIuZ2V0KCksICJmYWlsZWQtdG8tZmluZC1z
dHJpbmciLCBHX0NBTExCQUNLKGZhaWxlZFRvRmluZFN0cmluZ0NhbGxiYWNrKSwgdGhpcyk7Cisg
ICAgICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoKG1fZmluZENvbnRyb2xsZXIuZ2V0
KCksIHNlYXJjaFN0cmluZywgZmluZE9wdGlvbnMsIG1heE1hdGNoQ291bnQpOworICAgIH0KKwor
ICAgIHZvaWQgY291bnQoY29uc3QgY2hhciogc2VhcmNoU3RyaW5nLCBXZWJLaXRGaW5kT3B0aW9u
cyBmaW5kT3B0aW9ucywgZ3VpbnQgbWF4TWF0Y2hDb3VudCkKKyAgICB7CisgICAgICAgIGdfc2ln
bmFsX2Nvbm5lY3QobV9maW5kQ29udHJvbGxlci5nZXQoKSwgImNvdW50ZWQtbWF0Y2hlcyIsIEdf
Q0FMTEJBQ0soY291bnRlZE1hdGNoZXNDYWxsYmFjayksIHRoaXMpOworICAgICAgICB3ZWJraXRf
ZmluZF9jb250cm9sbGVyX2NvdW50X21hdGNoZXMobV9maW5kQ29udHJvbGxlci5nZXQoKSwgc2Vh
cmNoU3RyaW5nLCBmaW5kT3B0aW9ucywgbWF4TWF0Y2hDb3VudCk7CisgICAgfQorCisgICAgdm9p
ZCB3YWl0VW50aWxGaW5kRmluaXNoZWQoKQorICAgIHsKKyAgICAgICAgbV9ydW5GaW5kVW50aWxD
b21wbGV0aW9uID0gdHJ1ZTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwor
ICAgIH0KKworICAgIEdSZWZQdHI8V2ViS2l0RmluZENvbnRyb2xsZXI+IG1fZmluZENvbnRyb2xs
ZXI7CisgICAgYm9vbCBtX3RleHRGb3VuZDsKKyAgICB1bnNpZ25lZCBtX21hdGNoQ291bnQ7CisK
K3ByaXZhdGU6CisgICAgYm9vbCBtX3J1bkZpbmRVbnRpbENvbXBsZXRpb247CisKKyAgICBzdGF0
aWMgdm9pZCBmb3VuZFN0cmluZ0NhbGxiYWNrKFdlYktpdEZpbmRDb250cm9sbGVyKiwgZ3VpbnQg
bWF0Y2hDb3VudCwgRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVz
dC0+bV90ZXh0Rm91bmQgPSB0cnVlOworICAgICAgICB0ZXN0LT5tX21hdGNoQ291bnQgPSBtYXRj
aENvdW50OworICAgICAgICBpZiAodGVzdC0+bV9ydW5GaW5kVW50aWxDb21wbGV0aW9uKQorICAg
ICAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgdm9pZCBmYWlsZWRUb0ZpbmRTdHJpbmdDYWxsYmFjayhXZWJLaXRGaW5kQ29udHJv
bGxlciosIEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPm1f
dGV4dEZvdW5kID0gZmFsc2U7CisgICAgICAgIGlmICh0ZXN0LT5tX3J1bkZpbmRVbnRpbENvbXBs
ZXRpb24pCisgICAgICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOwor
ICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGNvdW50ZWRNYXRjaGVzQ2FsbGJhY2soV2ViS2l0Rmlu
ZENvbnRyb2xsZXIqLCBndWludCBtYXRjaENvdW50LCBGaW5kQ29udHJvbGxlclRlc3QqIHRlc3Qp
CisgICAgeworICAgICAgICB0ZXN0LT5tX21hdGNoQ291bnQgPSBtYXRjaENvdW50OworICAgICAg
ICBpZiAodGVzdC0+bV9ydW5GaW5kVW50aWxDb21wbGV0aW9uKQorICAgICAgICAgICAgZ19tYWlu
X2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9Cit9OworCitzdGF0aWMgdm9pZCB0
ZXN0RmluZENvbnRyb2xsZXJUZXh0Rm91bmQoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RTdHJpbmcsIDApOworICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+ZmluZCgidGVzdGluZyIs
IFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMSk7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZp
bmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7Cit9CisKK3N0YXRp
YyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlclRleHROb3RGb3VuZChGaW5kQ29udHJvbGxlclRlc3Qq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0cmluZywg
MCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5maW5k
KCJub3RGb3VuZCIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMSk7CisgICAgdGVzdC0+d2Fp
dFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCghdGVzdC0+bV90ZXh0Rm91bmQp
OworfQorCitzdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJNYXRjaENvdW50KEZpbmRDb250
cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCh0
ZXN0U3RyaW5nLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAg
IHRlc3QtPmZpbmQoInRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDIpOworICAg
IHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV9t
YXRjaENvdW50ID09IDIpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKK30KKwor
c3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVyTWF4TWF0Y2hDb3VudChGaW5kQ29udHJvbGxl
clRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0
cmluZywgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0
LT5maW5kKCJ0ZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAxKTsKKyAgICB0ZXN0
LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hD
b3VudCA9PSBHX01BWFVJTlQpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKK30K
Kworc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVyTmV4dChGaW5kQ29udHJvbGxlclRlc3Qq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0cmluZywg
MCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5maW5k
KCJ0ZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAyKTsKKyAgICB0ZXN0LT53YWl0
VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsK
KyAgICBnX2Fzc2VydCh0ZXN0LT5tX21hdGNoQ291bnQgPT0gMik7CisKKyAgICB3ZWJraXRfZmlu
ZF9jb250cm9sbGVyX3NlYXJjaF9uZXh0KHRlc3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpOwor
ICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+
bV90ZXh0Rm91bmQpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3VudCA9PSAyKTsKKyAg
ICBnX2Fzc2VydCghKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X29wdGlvbnModGVzdC0+bV9m
aW5kQ29udHJvbGxlci5nZXQoKSkgJiBXRUJLSVRfRklORF9PUFRJT05TX0JBQ0tXQVJEUykpOwor
CisgICAgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfbmV4dCh0ZXN0LT5tX2ZpbmRDb250
cm9sbGVyLmdldCgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAg
IGdfYXNzZXJ0KCF0ZXN0LT5tX3RleHRGb3VuZCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9tYXRj
aENvdW50ID09IDIpOworICAgIGdfYXNzZXJ0KCEod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRf
b3B0aW9ucyh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKSAmIFdFQktJVF9GSU5EX09QVElP
TlNfQkFDS1dBUkRTKSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlclByZXZp
b3VzKEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0
LT5sb2FkSHRtbCh0ZXN0U3RyaW5nLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNo
ZWQoKTsKKworICAgIHRlc3QtPmZpbmQoInRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX05P
TkUsIDIpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3Nl
cnQodGVzdC0+bV9tYXRjaENvdW50ID09IDIpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZv
dW5kKTsKKworICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX25leHQodGVzdC0+bV9m
aW5kQ29udHJvbGxlci5nZXQoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7
CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7CisgICAgZ19hc3NlcnQodGVzdC0+
bV9tYXRjaENvdW50ID09IDIpOworICAgIGdfYXNzZXJ0KCEod2Via2l0X2ZpbmRfY29udHJvbGxl
cl9nZXRfb3B0aW9ucyh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKSAmIFdFQktJVF9GSU5E
X09QVElPTlNfQkFDS1dBUkRTKSk7CisKKyAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJj
aF9wcmV2aW91cyh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKTsKKyAgICB0ZXN0LT53YWl0
VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsK
KyAgICBnX2Fzc2VydCh0ZXN0LT5tX21hdGNoQ291bnQgPT0gMik7CisgICAgZ19hc3NlcnQod2Vi
a2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfb3B0aW9ucyh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdl
dCgpKSAmIFdFQktJVF9GSU5EX09QVElPTlNfQkFDS1dBUkRTKTsKK30KKworc3RhdGljIHZvaWQg
dGVzdEZpbmRDb250cm9sbGVyQ291bnRlZE1hdGNoZXMoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RTdHJpbmcsIDApOwor
ICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+Y291bnQoInRl
c3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDIpOworICAgIHRlc3QtPndhaXRVbnRp
bEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDIp
OworCisgICAgdGVzdC0+Y291bnQoImZpcnN0IiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAy
KTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRl
c3QtPm1fbWF0Y2hDb3VudCA9PSAxKTsKKworICAgIHRlc3QtPmNvdW50KCJub3RGb3VuZCIsIFdF
QktJVF9GSU5EX09QVElPTlNfTk9ORSwgMik7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlz
aGVkKCk7CisKKyAgICBnX2Fzc2VydCghdGVzdC0+bV9tYXRjaENvdW50KTsKK30KKworc3RhdGlj
IHZvaWQgdGVzdEZpbmRDb250cm9sbGVyT3B0aW9ucyhGaW5kQ29udHJvbGxlclRlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0cmluZywgMCk7Cisg
ICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5maW5kKCJUZXN0
aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxG
aW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX3RleHRGb3VuZCk7CisKKyAg
ICB0ZXN0LT5maW5kKCJUZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19DQVNFX0lOU0VOU0lU
SVZFLCAyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNz
ZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKKworICAgIHRlc3QtPmZpbmQoImVzdGluZyIsIFdFQktJ
VF9GSU5EX09QVElPTlNfTk9ORSwgMik7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVk
KCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7CisKKyAgICB0ZXN0LT5maW5k
KCJlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX0FUX1dPUkRfU1RBUlRTLCAyKTsKKyAgICB0
ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX3Rl
eHRGb3VuZCk7CisKKyAgICB0ZXN0LT5maW5kKCJIYWxmIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19B
VF9XT1JEX1NUQVJUUywgMik7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisK
KyAgICBnX2Fzc2VydCghdGVzdC0+bV90ZXh0Rm91bmQpOworCisgICAgdGVzdC0+ZmluZCgiSGFs
ZiIsIHN0YXRpY19jYXN0PFdlYktpdEZpbmRPcHRpb25zPihXRUJLSVRfRklORF9PUFRJT05TX0FU
X1dPUkRfU1RBUlRTIHwgV0VCS0lUX0ZJTkRfT1BUSU9OU19UUkVBVF9NRURJQUxfQ0FQSVRBTF9B
U19XT1JEX1NUQVJUKSwgMik7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisK
KyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7CisKKyAgICB0ZXN0LT5maW5kKCJ0ZXN0
aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19XUkFQX0FST1VORCwgMyk7CisgICAgdGVzdC0+d2Fp
dFVudGlsRmluZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOwor
CisgICAgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfbmV4dCh0ZXN0LT5tX2ZpbmRDb250
cm9sbGVyLmdldCgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKyAgICBn
X2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7CisKKyAgICB3ZWJraXRfZmluZF9jb250cm9sbGVy
X3NlYXJjaF9uZXh0KHRlc3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpOworICAgIHRlc3QtPndh
aXRVbnRpbEZpbmRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsK
K30KKworc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVySW5zdGFuY2UoRmluZENvbnRyb2xs
ZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIFdlYktpdEZpbmRDb250cm9sbGVy
KiBmaW5kQ29udHJvbGxlcjEgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ZpbmRfY29udHJvbGxlcih0
ZXN0LT5tX3dlYlZpZXcpOworICAgIFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxl
cjIgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ZpbmRfY29udHJvbGxlcih0ZXN0LT5tX3dlYlZpZXcp
OworCisgICAgZ19hc3NlcnQoZmluZENvbnRyb2xsZXIxID09IGZpbmRDb250cm9sbGVyMik7Cit9
CisKK3N0YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlckdldHRlcnMoRmluZENvbnRyb2xsZXJU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIGNvbnN0IGNoYXIqIHNlYXJjaFN0cmlu
ZyA9ICJ0ZXN0aW5nIjsKKyAgICBjb25zdCBndWludCBtYXhNYXRjaENvdW50ID0gMTsKKyAgICBj
b25zdCBXZWJLaXRGaW5kT3B0aW9ucyBmaW5kT3B0aW9ucyA9IHN0YXRpY19jYXN0PFdlYktpdEZp
bmRPcHRpb25zPihXRUJLSVRfRklORF9PUFRJT05TX1dSQVBfQVJPVU5EIHwgV0VCS0lUX0ZJTkRf
T1BUSU9OU19BVF9XT1JEX1NUQVJUUyk7CisgICAgV2ViS2l0RmluZENvbnRyb2xsZXIqIGZpbmRD
b250cm9sbGVyID0gd2Via2l0X3dlYl92aWV3X2dldF9maW5kX2NvbnRyb2xsZXIodGVzdC0+bV93
ZWJWaWV3KTsKKworICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoKGZpbmRDb250cm9s
bGVyLCBzZWFyY2hTdHJpbmcsIGZpbmRPcHRpb25zLCBtYXhNYXRjaENvdW50KTsKKyAgICBnX2Fz
c2VydCh3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF93ZWJfdmlldyhmaW5kQ29udHJvbGxlcikg
PT0gdGVzdC0+bV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydCghZ19zdHJjbXAwKHdlYmtpdF9maW5k
X2NvbnRyb2xsZXJfZ2V0X3NlYXJjaF90ZXh0KGZpbmRDb250cm9sbGVyKSwgc2VhcmNoU3RyaW5n
KSk7CisgICAgZ19hc3NlcnQod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfbWF4X21hdGNoX2Nv
dW50KGZpbmRDb250cm9sbGVyKSA9PSBtYXhNYXRjaENvdW50KTsKKyAgICBnX2Fzc2VydCh3ZWJr
aXRfZmluZF9jb250cm9sbGVyX2dldF9vcHRpb25zKGZpbmRDb250cm9sbGVyKSA9PSBmaW5kT3B0
aW9ucyk7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICBGaW5kQ29udHJvbGxlclRlc3Q6
OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAiZ2V0dGVycyIsIHRlc3RGaW5kQ29udHJvbGxl
ckdldHRlcnMpOworICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJv
bGxlciIsICJpbnN0YW5jZSIsIHRlc3RGaW5kQ29udHJvbGxlckluc3RhbmNlKTsKKyAgICBGaW5k
Q29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAidGV4dC1mb3VuZCIs
IHRlc3RGaW5kQ29udHJvbGxlclRleHRGb3VuZCk7CisgICAgRmluZENvbnRyb2xsZXJUZXN0Ojph
ZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwgInRleHQtbm90LWZvdW5kIiwgdGVzdEZpbmRDb250
cm9sbGVyVGV4dE5vdEZvdW5kKTsKKyAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0
RmluZENvbnRyb2xsZXIiLCAibWF0Y2gtY291bnQiLCB0ZXN0RmluZENvbnRyb2xsZXJNYXRjaENv
dW50KTsKKyAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIi
LCAibWF4LW1hdGNoLWNvdW50IiwgdGVzdEZpbmRDb250cm9sbGVyTWF4TWF0Y2hDb3VudCk7Cisg
ICAgRmluZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwgIm5leHQi
LCB0ZXN0RmluZENvbnRyb2xsZXJOZXh0KTsKKyAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgi
V2ViS2l0RmluZENvbnRyb2xsZXIiLCAicHJldmlvdXMiLCB0ZXN0RmluZENvbnRyb2xsZXJQcmV2
aW91cyk7CisgICAgRmluZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250cm9sbGVy
IiwgImNvdW50ZWQtbWF0Y2hlcyIsIHRlc3RGaW5kQ29udHJvbGxlckNvdW50ZWRNYXRjaGVzKTsK
KyAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAib3B0
aW9ucyIsIHRlc3RGaW5kQ29udHJvbGxlck9wdGlvbnMpOworfQorCit2b2lkIGFmdGVyQWxsKCkK
K3sKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtp
dDIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaAppbmRleCBh
YjBlMGE4ZjEwYjUzNTkzZDgyZTBmMzUzN2RmODNjMjQ5OTU4ZjhkLi5hMmY0ZmFlY2M1MWMwZmU4
MTZiYzlmMTlmMmRiMTJjNDZlYzQzMzBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvd2Via2l0Mi5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJL
aXREZWZpbmVzLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRFbnVtVHlwZXMuaD4KICNpbmNs
dWRlIDx3ZWJraXQyL1dlYktpdEVycm9yLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRGaW5k
Q29udHJvbGxlci5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0U2V0dGluZ3MuaD4KICNpbmNs
dWRlIDx3ZWJraXQyL1dlYktpdFVSSVJlcXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktp
dFVSSVJlc3BvbnNlLmg+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125356</attachid>
            <date>2012-02-03 09:52:46 -0800</date>
            <delta_ts>2012-02-06 05:18:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76070-20120203185244.patch</filename>
            <type>text/plain</type>
            <size>47939</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NDc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYzY5YzIwZGI5MzgxZWYy
MzNmMDVhMmQ5ZDIzZjU3NDYyM2JhNzU4MC4uNDBlOWNmY2QyOGIyNDBlOWFiNzA1ZWU1NzNiMzU2
YWM1YTJiODQ4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDEyLTAxLTE5ICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFtX
SzJdIEFkZCBGaW5kIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzYwNzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIHBhdGNoIGFkZHMgYSBuZXcgcHVibGljIGZpbmQgQVBJIGZvciB0aGUgR3Rr
KyBXSzIgcG9ydC4gSXQKKyAgICAgICAgZGVmaW5lcyBhIG5ldyBvYmplY3QgY2FsbGVkIFdlYktp
dEZpbmRDb250cm9sbGVyIG93bmVkIGJ5IGVhY2gKKyAgICAgICAgV2ViS2l0V2ViVmlldy4gQ2xp
ZW50cyB3aWxsIHVzZSB0aGlzIG5ldyBvYmplY3QgdG8gc2VhcmNoIHN0cmluZ3MKKyAgICAgICAg
aW4gdGhlIFdlYktpdFdlYlZpZXcuCisKKyAgICAgICAgQ2hhbmdlcyBpbmNsdWRlIGFsc28gZG9j
dW1lbnRhdGlvbiBhbmQgdW5pdCB0ZXN0cyBmb3IgdGhlIG5ldworICAgICAgICBwdWJsaWMgQVBJ
LgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0RGVmaW5lcy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZp
bmRDb250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChkaWRGaW5kU3RyaW5nKTogaW1wbGVt
ZW50YXRpb24gb2YgdGhlIFdLUGFnZSBGaW5kIGludGVyZmFjZS4KKyAgICAgICAgKGRpZEZhaWxU
b0ZpbmRTdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKGRpZENvdW50U3RyaW5nTWF0Y2hlcyk6IERp
dHRvLgorICAgICAgICAod2Via2l0X2ZpbmRfY29udHJvbGxlcl9pbml0KToKKyAgICAgICAgKGdl
dFdLUGFnZUZyb21XZWJLaXRXZWJWaWV3KToKKyAgICAgICAgKHdlYmtpdEZpbmRDb250cm9sbGVy
Q29uc3RydWN0ZWQpOgorICAgICAgICAod2Via2l0RmluZENvbnRyb2xsZXJHZXRQcm9wZXJ0eSk6
CisgICAgICAgICh3ZWJraXRGaW5kQ29udHJvbGxlclNldFByb3BlcnR5KToKKyAgICAgICAgKHdl
YmtpdEZpbmRDb250cm9sbGVyRmluYWxpemUpOgorICAgICAgICAod2Via2l0X2ZpbmRfY29udHJv
bGxlcl9jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X3Nl
YXJjaF90ZXh0KToKKyAgICAgICAgKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X29wdGlvbnMp
OgorICAgICAgICAod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfbWF4X21hdGNoX2NvdW50KToK
KyAgICAgICAgKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X3dlYl92aWV3KToKKyAgICAgICAg
KHdlYktpdEZpbmRDb250cm9sbGVyUGVyZm9ybSk6CisgICAgICAgICh3ZWJLaXRGaW5kQ29udHJv
bGxlclNldFNlYXJjaERhdGEpOgorICAgICAgICAod2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFy
Y2gpOiBhc3luY2hyb25vdXNseSBsb29rcyBmb3IgdGhlCisgICAgICAgIHNlYXJjaCBzdHJpbmcg
aW4gdGhlIFdlYktpdFdlYlZpZXcuCisgICAgICAgICh3ZWJraXRfZmluZF9jb250cm9sbGVyX3Nl
YXJjaF9maW5pc2gpOiB1bmhpZ2hsaWdodHMgdGV4dCBtYXRjaGVzLgorICAgICAgICAod2Via2l0
X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfbmV4dCk6CisgICAgICAgICh3ZWJraXRfZmluZF9jb250
cm9sbGVyX3NlYXJjaF9wcmV2aW91cyk6CisgICAgICAgICh3ZWJraXRfZmluZF9jb250cm9sbGVy
X2NvdW50X21hdGNoZXMpOiBhc3luY2hyb25vdXNseSBjb3VudHMgdGhlCisgICAgICAgIG51bWJl
ciBvZiBtYXRjaGVzIG9mIHRoZSBzZWFyY2ggc3RyaW5nIGluIHRoZSBXZWJLaXRXZWJWaWV3Lgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbmRDb250cm9sbGVyLmg6IEFkZGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdF93
ZWJfdmlld19nZXRfZmluZF9jb250cm9sbGVyKTogcmV0dXJucyB0aGUKKyAgICAgICAgV2ViS2l0
RmluZENvbnRyb2xsZXIgaW5zdGFuY2Ugb3duZWQgYnkgdGhlIFdlYktpdFdlYlZpZXcuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWw6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXM6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW06CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvVGVzdFdlYktpdEZpbmRDb250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgICh0
ZXN0RmluZENvbnRyb2xsZXJUZXh0Rm91bmQpOgorICAgICAgICAodGVzdEZpbmRDb250cm9sbGVy
VGV4dE5vdEZvdW5kKToKKyAgICAgICAgKHRlc3RGaW5kQ29udHJvbGxlck1hdGNoQ291bnQpOgor
ICAgICAgICAodGVzdEZpbmRDb250cm9sbGVyTWF4TWF0Y2hDb3VudCk6CisgICAgICAgICh0ZXN0
RmluZENvbnRyb2xsZXJOZXh0KToKKyAgICAgICAgKHRlc3RGaW5kQ29udHJvbGxlclByZXZpb3Vz
KToKKyAgICAgICAgKHRlc3RGaW5kQ29udHJvbGxlckNvdW50ZWRNYXRjaGVzKToKKyAgICAgICAg
KHRlc3RGaW5kQ29udHJvbGxlck9wdGlvbnMpOgorICAgICAgICAodGVzdEZpbmRDb250cm9sbGVy
SW5zdGFuY2UpOgorICAgICAgICAodGVzdEZpbmRDb250cm9sbGVyR2V0dGVycyk6CisgICAgICAg
IChiZWZvcmVBbGwpOgorICAgICAgICAoYWZ0ZXJBbGwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZ3RrL3dlYmtpdDIuaDoKKwogMjAxMi0wMS0zMSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFw
QGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OIChXZWJLaXQyKTogZXZlbnQua2V5Q29k
ZSBpcyBhbHdheXMgemVybyB3aGVuIHR5cGluZyBpbiBSdXNzaWFuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFt
CmluZGV4IGI3NmIyMWZmN2I2ZDE5OWRlYWI3MjYzMDc1NzI2ZTdkMmI0ZTI5OWUuLmM0OGQ0ZTM4
ZTdkZTAyNTU4NGE3NDBkOGU5NTc2MWJiMGQxMzExNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCkBA
IC04NSw2ICs4NSw3IEBAIGxpYndlYmtpdDJndGtpbmNsdWRlX0hFQURFUlMgPSBcCiAJJChXZWJL
aXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREZWZpbmVzLmggXAogCSQoV2ViS2l0MikvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWQuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRFcnJvci5oIFwKKwkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdEZpbmRDb250cm9sbGVyLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0UG9saWN5RGVjaXNpb24uaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRTZXR0aW5ncy5oIFwKQEAgLTUzNCw2ICs1MzUsOCBAQCBsaWJ3ZWJraXQyZ3Rr
X0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJ
T05AX2xhX1NPVQogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9y
LmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TG9hZGVyQ2xp
ZW50LmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdExvYWRlckNs
aWVudC5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbmRD
b250cm9sbGVyLmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZp
bmRDb250cm9sbGVyLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLmggXAogCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvblBy
aXZhdGUuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXREZWZpbmVzLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRE
ZWZpbmVzLmgKaW5kZXggNzliMzM4MzYwZGRhYWE4ZjA5ZjY1NDdmMmRmMTQ1OGY2ZjIxOTMxZC4u
ODc0NTljMTRmMDdjYTA3ZWVlNGExZWFlZjk1M2ZlODRiNTA0NjRkNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RGVmaW5lcy5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERlZmluZXMuaApAQCAtNDQsNCArNDQs
MTAgQEAKICMgICAgZGVmaW5lIFdFQktJVF9PQlNPTEVURV9BUEkgV0VCS0lUX0FQSSBfX2F0dHJp
YnV0ZV9fKChkZXByZWNhdGVkKSkKICNlbmRpZgogCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0Rmlu
ZENvbnRyb2xsZXIgICAgICAgIFdlYktpdEZpbmRDb250cm9sbGVyOwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdEZpbmRDb250cm9sbGVyQ2xhc3MgICBXZWJLaXRGaW5kQ29udHJvbGxlckNsYXNzOwor
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmlldyBXZWJLaXRXZWJWaWV3OwordHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdFdlYlZpZXdDbGFzcyBXZWJLaXRXZWJWaWV3Q2xhc3M7CisKICNlbmRpZiAv
LyBXZWJLaXREZWZpbmVzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdEZpbmRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdEZpbmRDb250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MTBlZDNmMTBi
MGY0MjliMWNmMGJiZjA4OTViMDIwMTNmNDM3YjNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmluZENvbnRyb2xsZXIuY3BwCkBAIC0w
LDAgKzEsNDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0RmluZENvbnRyb2xsZXIuaCIKKworI2lu
Y2x1ZGUgIldlYktpdEVudW1UeXBlcy5oIgorI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKKyNp
bmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJv
eHkuaCIKKyNpbmNsdWRlIDxXZWJLaXQyL1dLRmluZE9wdGlvbnMuaD4KKyNpbmNsdWRlIDxXZWJL
aXQyL1dLUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS1N0cmluZy5oPgorI2luY2x1
ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CisKK2VudW0geworICAgIEZPVU5EX1NUUklORywKKyAgICBGQUlMRURfVE9fRklORF9TVFJJTkcs
CisgICAgQ09VTlRFRF9NQVRDSEVTLAorCisgICAgTEFTVF9TSUdOQUwKK307CisKK2VudW0gewor
ICAgIFBST1BfMCwKKworICAgIFBST1BfU1RSSU5HLAorICAgIFBST1BfT1BUSU9OUywKKyAgICBQ
Uk9QX01BWF9NQVRDSF9DT1VOVCwKKyAgICBQUk9QX1dFQl9WSUVXCit9OworCit0eXBlZGVmIGVu
dW0geworICAgIE9QX0ZJTkQsCisgICAgT1BfQ09VTlQKK30gV2ViS2l0RmluZENvbnRyb2xsZXJG
aW5kT3BlcmF0aW9uOworCitzdHJ1Y3QgX1dlYktpdEZpbmRDb250cm9sbGVyUHJpdmF0ZSB7Cisg
ICAgQ1N0cmluZyBzdHJpbmc7CisgICAgZ3VpbnQgZmluZE9wdGlvbnM7CisgICAgdW5zaWduZWQg
bWF4TWF0Y2hDb3VudDsKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OworfTsKKworc3RhdGlj
IGd1aW50IHNpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OworCitHX0RFRklORV9UWVBFKFdl
YktpdEZpbmRDb250cm9sbGVyLCB3ZWJraXRfZmluZF9jb250cm9sbGVyLCBHX1RZUEVfT0JKRUNU
KQorCitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdFQktJVF9GSU5EX09QVElPTlNfQ0FT
RV9JTlNFTlNJVElWRSwga1dLRmluZE9wdGlvbnNDYXNlSW5zZW5zaXRpdmUpOworQ09NUElMRV9B
U1NFUlRfTUFUQ0hJTkdfRU5VTShXRUJLSVRfRklORF9PUFRJT05TX0FUX1dPUkRfU1RBUlRTLCBr
V0tGaW5kT3B0aW9uc0F0V29yZFN0YXJ0cyk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVN
KFdFQktJVF9GSU5EX09QVElPTlNfVFJFQVRfTUVESUFMX0NBUElUQUxfQVNfV09SRF9TVEFSVCwg
a1dLRmluZE9wdGlvbnNUcmVhdE1lZGlhbENhcGl0YWxBc1dvcmRTdGFydCk7CitDT01QSUxFX0FT
U0VSVF9NQVRDSElOR19FTlVNKFdFQktJVF9GSU5EX09QVElPTlNfQkFDS1dBUkRTLCBrV0tGaW5k
T3B0aW9uc0JhY2t3YXJkcyk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdFQktJVF9G
SU5EX09QVElPTlNfV1JBUF9BUk9VTkQsIGtXS0ZpbmRPcHRpb25zV3JhcEFyb3VuZCk7CisKK3N0
YXRpYyB2b2lkIGRpZEZpbmRTdHJpbmcoV0tQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIHN0cmlu
ZywgdW5zaWduZWQgbWF0Y2hDb3VudCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBn
X3NpZ25hbF9lbWl0KFdFQktJVF9GSU5EX0NPTlRST0xMRVIoY2xpZW50SW5mbyksIHNpZ25hbHNb
Rk9VTkRfU1RSSU5HXSwgMCwgbWF0Y2hDb3VudCk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZEZhaWxU
b0ZpbmRTdHJpbmcoV0tQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIHN0cmluZywgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbykKK3sKKyAgICBnX3NpZ25hbF9lbWl0KFdFQktJVF9GSU5EX0NPTlRST0xM
RVIoY2xpZW50SW5mbyksIHNpZ25hbHNbRkFJTEVEX1RPX0ZJTkRfU1RSSU5HXSwgMCk7Cit9CisK
K3N0YXRpYyB2b2lkIGRpZENvdW50U3RyaW5nTWF0Y2hlcyhXS1BhZ2VSZWYgcGFnZSwgV0tTdHJp
bmdSZWYgc3RyaW5nLCB1bnNpZ25lZCBtYXRjaENvdW50LCBjb25zdCB2b2lkKiBjbGllbnRJbmZv
KQoreworICAgIGdfc2lnbmFsX2VtaXQoV0VCS0lUX0ZJTkRfQ09OVFJPTExFUihjbGllbnRJbmZv
KSwgc2lnbmFsc1tDT1VOVEVEX01BVENIRVNdLCAwLCBtYXRjaENvdW50KTsKK30KKworc3RhdGlj
IHZvaWQgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9pbml0KFdlYktpdEZpbmRDb250cm9sbGVyKiBm
aW5kQ29udHJvbGxlcikKK3sKKyAgICBXZWJLaXRGaW5kQ29udHJvbGxlclByaXZhdGUqIHByaXYg
PSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoZmluZENvbnRyb2xsZXIsIFdFQktJVF9UWVBF
X0ZJTkRfQ09OVFJPTExFUiwgV2ViS2l0RmluZENvbnRyb2xsZXJQcml2YXRlKTsKKyAgICBmaW5k
Q29udHJvbGxlci0+cHJpdiA9IHByaXY7CisgICAgbmV3IChwcml2KSBXZWJLaXRGaW5kQ29udHJv
bGxlclByaXZhdGUoKTsKK30KKworc3RhdGljIFdLUGFnZVJlZiBpbmxpbmUgZ2V0V0tQYWdlRnJv
bVdlYktpdFdlYlZpZXcoV2ViS2l0V2ViVmlldyAqd2ViVmlldykKK3sKKyAgICByZXR1cm4gdG9B
UEkod2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKFdFQktJVF9XRUJfVklFV19CQVNFKHdlYlZpZXcp
KSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdEZpbmRDb250cm9sbGVyQ29uc3RydWN0ZWQoR09i
amVjdCogb2JqZWN0KQoreworICAgIFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxl
ciA9IFdFQktJVF9GSU5EX0NPTlRST0xMRVIob2JqZWN0KTsKKyAgICBXS1BhZ2VGaW5kQ2xpZW50
IHdrRmluZENsaWVudCA9IHsKKyAgICAgICAga1dLUGFnZUZpbmRDbGllbnRDdXJyZW50VmVyc2lv
biwKKyAgICAgICAgZmluZENvbnRyb2xsZXIsIC8vIGNsaWVudEluZm8KKyAgICAgICAgZGlkRmlu
ZFN0cmluZywKKyAgICAgICAgZGlkRmFpbFRvRmluZFN0cmluZywKKyAgICAgICAgZGlkQ291bnRT
dHJpbmdNYXRjaGVzCisgICAgfTsKKworICAgIFdLUGFnZVNldFBhZ2VGaW5kQ2xpZW50KGdldFdL
UGFnZUZyb21XZWJLaXRXZWJWaWV3KGZpbmRDb250cm9sbGVyLT5wcml2LT53ZWJWaWV3KSwgJndr
RmluZENsaWVudCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdEZpbmRDb250cm9sbGVyR2V0UHJv
cGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJh
bVNwZWMqIHBhcmFtU3BlYykKK3sKKyAgICBXZWJLaXRGaW5kQ29udHJvbGxlciogZmluZENvbnRy
b2xsZXIgPSBXRUJLSVRfRklORF9DT05UUk9MTEVSKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHBy
b3BJZCkgeworICAgIGNhc2UgUFJPUF9TVFJJTkc6CisgICAgICAgIGdfdmFsdWVfc2V0X3N0cmlu
Zyh2YWx1ZSwgZmluZENvbnRyb2xsZXItPnByaXYtPnN0cmluZy5kYXRhKCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfT1BUSU9OUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludCh2
YWx1ZSwgZmluZENvbnRyb2xsZXItPnByaXYtPmZpbmRPcHRpb25zKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX01BWF9NQVRDSF9DT1VOVDoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWlu
dCh2YWx1ZSwgZmluZENvbnRyb2xsZXItPnByaXYtPm1heE1hdGNoQ291bnQpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfV0VCX1ZJRVc6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVj
dCh2YWx1ZSwgZmluZENvbnRyb2xsZXItPnByaXYtPndlYlZpZXcpOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQo
b2JqZWN0LCBwcm9wSWQsIHBhcmFtU3BlYyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRGaW5kQ29udHJvbGxlclNldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElk
LCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwYXJhbVNwZWMpCit7CisgICAgV2Vi
S2l0RmluZENvbnRyb2xsZXIqIGZpbmRDb250cm9sbGVyID0gV0VCS0lUX0ZJTkRfQ09OVFJPTExF
UihvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wSWQpIHsKKyAgICBjYXNlIFBST1BfV0VCX1ZJ
RVc6CisgICAgICAgIGZpbmRDb250cm9sbGVyLT5wcml2LT53ZWJWaWV3ID0gV0VCS0lUX1dFQl9W
SUVXKGdfdmFsdWVfZ2V0X29iamVjdCh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBw
cm9wSWQsIHBhcmFtU3BlYyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRGaW5kQ29u
dHJvbGxlckZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXRUJLSVRfRklORF9DT05U
Uk9MTEVSKG9iamVjdCktPnByaXYtPn5XZWJLaXRGaW5kQ29udHJvbGxlclByaXZhdGUoKTsKKyAg
ICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZmluZF9jb250cm9sbGVyX3BhcmVudF9jbGFzcyktPmZp
bmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJf
Y2xhc3NfaW5pdChXZWJLaXRGaW5kQ29udHJvbGxlckNsYXNzKiBmaW5kQ2xhc3MpCit7CisgICAg
R09iamVjdENsYXNzKiBnT2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhmaW5kQ2xhc3MpOwor
CisgICAgZ09iamVjdENsYXNzLT5jb25zdHJ1Y3RlZCA9IHdlYmtpdEZpbmRDb250cm9sbGVyQ29u
c3RydWN0ZWQ7CisgICAgZ09iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRGaW5kQ29u
dHJvbGxlckdldFByb3BlcnR5OworICAgIGdPYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Vi
a2l0RmluZENvbnRyb2xsZXJTZXRQcm9wZXJ0eTsKKyAgICBnT2JqZWN0Q2xhc3MtPmZpbmFsaXpl
ID0gd2Via2l0RmluZENvbnRyb2xsZXJGaW5hbGl6ZTsKKworICAgIGdfdHlwZV9jbGFzc19hZGRf
cHJpdmF0ZShmaW5kQ2xhc3MsIHNpemVvZihXZWJLaXRGaW5kQ29udHJvbGxlclByaXZhdGUpKTsK
KworICAgIC8qKgorICAgICAqIFdlYktpdEZpbmRDb250cm9sbGVyOnN0cmluZzoKKyAgICAgKgor
ICAgICAqIFRoZSB0ZXh0IHRvIHNlYXJjaCBmb3IgaW4gdGhlICNXZWJLaXRXZWJWaWV3LgorICAg
ICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ09iamVjdENsYXNzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9TVFJJTkcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKCJzdHJpbmci
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfKCJTZWFyY2ggU3RyaW5nIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF8oIlRleHQgdG8gc2VhcmNoIGZvciBpbiB0aGUgdmlldyIp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdEZp
bmRDb250cm9sbGVyOm9wdGlvbnM6CisgICAgICoKKyAgICAgKiBUaGUgb3B0aW9ucyB0byBiZSB1
c2VkIGluIHRoZSBzZWFyY2ggb3BlcmF0aW9uLgorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoZ09iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUFJPUF9PUFRJT05TLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ19wYXJhbV9zcGVjX2ZsYWdzKCJvcHRpb25zIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJTZWFyY2ggT3B0aW9ucyIpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8o
IlNlYXJjaCBvcHRpb25zIHRvIGJlIHVzZWQgaW4gdGhlIHNlYXJjaCBvcGVyYXRpb24iKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJL
SVRfVFlQRV9GSU5EX09QVElPTlMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEQUJMRSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0RmluZENvbnRyb2xsZXI6bWF4
LW1hdGNoLWNvdW50OgorICAgICAqCisgICAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIG1hdGNo
ZXMgdG8gcmVwb3J0IGZvciBhIGdpdmVuIHNlYXJjaC4KKyAgICAgKi8KKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KGdPYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBST1BfTUFYX01BVENIX0NPVU5ULAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQoIm1heC1tYXRjaC1jb3VudCIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJN
YXhpbXVtIG1hdGNoZXMgY291bnQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBtYXhpbXVtIG51bWJlciBvZiBtYXRjaGVzIGlu
IGEgZ2l2ZW4gdGV4dCB0byByZXBvcnQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdfTUFYVUlOVCwgMCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
QUJMRSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0RmluZENvbnRyb2xsZXI6d2ViLXZpZXc6
CisgICAgICoKKyAgICAgKiBUaGUgI1dlYktpdFdlYlZpZXcgdGhpcyBjb250cm9sbGVyIGlzIGFz
c29jaWF0ZWQgdG8uCisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eShnT2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9Q
X1dFQl9WSUVXLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9z
cGVjX29iamVjdCgid2ViLXZpZXciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfKCJXZWIgVmlldyIpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgV2ViIFZpZXcgYXNz
b2NpYXRlZCB3aXRoIHRoaXMgZmluZCBjb250cm9sbGVyIiksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX1dFQl9WSUVX
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxHUGFyYW1GbGFncz4oV0VCS0lUX1BBUkFNX1JFQURXUklURSB8IEdfUEFS
QU1fQ09OU1RSVUNUX09OTFkpKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRGaW5kQ29udHJv
bGxlcjo6Zm91bmQtc3RyaW5nOgorICAgICAqIEBmaW5kX2NvbnRyb2xsZXI6IHRoZSAjV2ViS2l0
RmluZENvbnRyb2xsZXIKKyAgICAgKiBAbWF0Y2hfY291bnQ6IHRoZSBudW1iZXIgb2YgbWF0Y2hl
cyBvZiB0aGUgc2VhcmNoIHRleHQKKyAgICAgKgorICAgICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0
ZWQgd2hlbiBhIGdpdmVuIHN0cmluZyBpcyBmb3VuZCBpbiB0aGUgd2ViCisgICAgICogcGFnZSB0
ZXh0LiBJdCB3aWxsIGJlIGlzc3VlZCBpZiB0aGUgdGV4dCBpcyBmb3VuZAorICAgICAqIGFzeW5j
aHJvbm91c2x5IGFmdGVyIGEgY2FsbCB0byB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaCgp
LAorICAgICAqIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX25leHQoKSBvcgorICAgICAq
IHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX3ByZXZpb3VzKCkuCisgICAgICovCisgICAg
c2lnbmFsc1tGT1VORF9TVFJJTkddID0KKyAgICAgICAgZ19zaWduYWxfbmV3KCJmb3VuZC1zdHJp
bmciLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1MoZ09iamVjdENsYXNz
KSwKKyAgICAgICAgICAgICAgICAgICAgIEdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAg
ICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hh
bF9WT0lEX19VSU5ULAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX05PTkUsIDEsIEdfVFlQ
RV9VSU5UKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdEZpbmRDb250cm9sbGVyOjpmYWlsZWQt
dG8tZmluZC1zdHJpbmc6CisgICAgICogQGZpbmRfY29udHJvbGxlcjogdGhlICNXZWJLaXRGaW5k
Q29udHJvbGxlcgorICAgICAqCisgICAgICogVGhpcyBzaWduYWwgaXMgZW1pdHRlZCB3aGVuIGEg
c2VhcmNoIG9wZXJhdGlvbiBkb2VzIG5vdCBmaW5kCisgICAgICogYW55IHJlc3VsdCBmb3IgdGhl
IGdpdmVuIHN0cmluZy4gSXQgd2lsbCBiZSBpc3N1ZWQgaWYgdGhlIHRleHQKKyAgICAgKiBpcyBu
b3QgZm91bmQgYXN5bmNocm9ub3VzbHkgYWZ0ZXIgYSBjYWxsIHRvCisgICAgICogd2Via2l0X2Zp
bmRfY29udHJvbGxlcl9zZWFyY2goKSwgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfbmV4
dCgpCisgICAgICogb3Igd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfcHJldmlvdXMoKS4K
KyAgICAgKi8KKyAgICBzaWduYWxzW0ZBSUxFRF9UT19GSU5EX1NUUklOR10gPQorICAgICAgICBn
X3NpZ25hbF9uZXcoImZhaWxlZC10by1maW5kLXN0cmluZyIsCisgICAgICAgICAgICAgICAgICAg
ICBHX1RZUEVfRlJPTV9DTEFTUyhnT2JqZWN0Q2xhc3MpLAorICAgICAgICAgICAgICAgICAgICAg
R19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLAorICAgICAg
ICAgICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1ZPSUQsCisgICAgICAgICAg
ICAgICAgICAgICBHX1RZUEVfTk9ORSwgMCk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRGaW5k
Q29udHJvbGxlcjo6Y291bnRlZC1tYXRjaGVzOgorICAgICAqIEBmaW5kX2NvbnRyb2xsZXI6IHRo
ZSAjV2ViS2l0RmluZENvbnRyb2xsZXIKKyAgICAgKiBAbWF0Y2hfY291bnQ6IHRoZSBudW1iZXIg
b2YgbWF0Y2hlcyBvZiB0aGUgc2VhcmNoIHRleHQKKyAgICAgKgorICAgICAqIFRoaXMgc2lnbmFs
IGlzIGVtaXR0ZWQgd2hlbiB0aGUgI1dlYktpdEZpbmRDb250cm9sbGVyIGhhcworICAgICAqIGNv
dW50ZWQgdGhlIG51bWJlciBvZiBtYXRjaGVzIGZvciBhIGdpdmVuIHN0cmluZyBhZnRlciBhIGNh
bGwKKyAgICAgKiB0byB3ZWJraXRfZmluZF9jb250cm9sbGVyX2NvdW50X21hdGNoZXMoKS4KKyAg
ICAgKi8KKyAgICBzaWduYWxzW0NPVU5URURfTUFUQ0hFU10gPQorICAgICAgICBnX3NpZ25hbF9u
ZXcoImNvdW50ZWQtbWF0Y2hlcyIsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfRlJPTV9D
TEFTUyhnT2JqZWN0Q2xhc3MpLAorICAgICAgICAgICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xB
U1QsCisgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAg
Z19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1VJTlQsCisgICAgICAgICAgICAgICAgICAgICBHX1RZ
UEVfTk9ORSwgMSwgR19UWVBFX1VJTlQpOworfQorCisvKioKKyAqIHdlYmtpdF9maW5kX2NvbnRy
b2xsZXJfZ2V0X3NlYXJjaF90ZXh0OgorICogQGZpbmRfY29udHJvbGxlcjogdGhlICNXZWJLaXRG
aW5kQ29udHJvbGxlcgorICoKKyAqIEdldHMgdGhlIHN0cmluZyB0aGF0IEBmaW5kX2NvbnRyb2xs
ZXIgaXMgY3VycmVudGx5IHNlYXJjaGluZworICogZm9yLiBUaGlzIHN0cmluZyBpcyBwYXNzZWQg
dG8gZWl0aGVyCisgKiB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaCgpIG9yCisgKiB3ZWJr
aXRfZmluZF9jb250cm9sbGVyX2NvdW50X21hdGNoZXMoKS4KKyAqCisgKiBSZXR1cm5zOiB0aGUg
c3RyaW5nIHRvIGxvb2sgZm9yIGluIHRoZSAjV2ViS2l0V2ViVmlldy4KKyAqLworY29uc3QgY2hh
ciogd2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfc2VhcmNoX3RleHQoV2ViS2l0RmluZENvbnRy
b2xsZXIqIGZpbmRDb250cm9sbGVyKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9JU19GSU5EX0NPTlRST0xMRVIoZmluZENvbnRyb2xsZXIpLCAwKTsKKworICAgIHJldHVybiBm
aW5kQ29udHJvbGxlci0+cHJpdi0+c3RyaW5nLmRhdGEoKTsKK30KKworLyoqCisgKiB3ZWJraXRf
ZmluZF9jb250cm9sbGVyX2dldF9vcHRpb25zOgorICogQGZpbmRfY29udHJvbGxlcjogdGhlICNX
ZWJLaXRGaW5kQ29udHJvbGxlcgorICoKKyAqIEdldHMgYSBiaXRtYXNrIGNvbnRhaW5pbmcgdGhl
ICNXZWJLaXRGaW5kT3B0aW9ucyBhc3NvY2lhdGVkIHdpdGgKKyAqIHRoZSBjdXJyZW50IHNlYXJj
aC4KKyAqCisgKiBSZXR1cm5zOiBhIGJpdG1hc2sgY29udGFpbmluZyB0aGUgI1dlYktpdEZpbmRP
cHRpb25zIGFzc29jaWF0ZWQKKyAqIHdpdGggdGhlIGN1cnJlbnQgc2VhcmNoLgorICovCitndWlu
dCB3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9vcHRpb25zKFdlYktpdEZpbmRDb250cm9sbGVy
KiBmaW5kQ29udHJvbGxlcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNf
RklORF9DT05UUk9MTEVSKGZpbmRDb250cm9sbGVyKSwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05F
KTsKKworICAgIHJldHVybiBmaW5kQ29udHJvbGxlci0+cHJpdi0+ZmluZE9wdGlvbnM7Cit9CisK
Ky8qKgorICogd2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfbWF4X21hdGNoX2NvdW50OgorICog
QGZpbmRfY29udHJvbGxlcjogdGhlICNXZWJLaXRGaW5kQ29udHJvbGxlcgorICoKKyAqIEdldHMg
dGhlIG1heGltdW0gbnVtYmVyIG9mIG1hdGNoZXMgdG8gcmVwb3J0IGR1cmluZyBhIHRleHQKKyAq
IGxvb2t1cC4gVGhpcyBudW1iZXIgaXMgcGFzc2VkIGFzIHRoZSBsYXN0IGFyZ3VtZW50IG9mCisg
KiB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaCgpIG9yCisgKiB3ZWJraXRfZmluZF9jb250
cm9sbGVyX2NvdW50X21hdGNoZXMoKS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgbWF4aW11bSBudW1i
ZXIgb2YgbWF0Y2hlcyB0byByZXBvcnQuCisgKi8KK2d1aW50IHdlYmtpdF9maW5kX2NvbnRyb2xs
ZXJfZ2V0X21heF9tYXRjaF9jb3VudChXZWJLaXRGaW5kQ29udHJvbGxlciogZmluZENvbnRyb2xs
ZXIpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0ZJTkRfQ09OVFJPTExF
UihmaW5kQ29udHJvbGxlciksIDApOworCisgICAgcmV0dXJuIGZpbmRDb250cm9sbGVyLT5wcml2
LT5tYXhNYXRjaENvdW50OworfQorCisvKioKKyAqIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0
X3dlYl92aWV3OgorICogQGZpbmRfY29udHJvbGxlcjogdGhlICNXZWJLaXRGaW5kQ29udHJvbGxl
cgorICoKKyAqIEdldHMgdGhlICNXZWJLaXRXZWJWaWV3IHRoaXMgZmluZCBjb250cm9sbGVyIGlz
IGFzc29jaWF0ZWQgdG8uIERvCisgKiBub3QgdW5yZWYgdGhlIHJldHVybmVkIGluc3RhbmNlIGFz
IGl0IGJlbG9uZ3MgdG8gdGhlCisgKiAjV2ViS2l0RmluZENvbnRyb2xsZXIuCisgKgorICogUmV0
dXJuczogKHRyYW5zZmVyIG5vbmUpOiB0aGUgI1dlYktpdFdlYlZpZXcuCisgKi8KK1dlYktpdFdl
YlZpZXcqIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X3dlYl92aWV3KFdlYktpdEZpbmRDb250
cm9sbGVyKiBmaW5kQ29udHJvbGxlcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfSVNfRklORF9DT05UUk9MTEVSKGZpbmRDb250cm9sbGVyKSwgMCk7CisKKyAgICByZXR1cm4g
ZmluZENvbnRyb2xsZXItPnByaXYtPndlYlZpZXc7Cit9CisKK3N0YXRpYyB2b2lkIHdlYktpdEZp
bmRDb250cm9sbGVyUGVyZm9ybShXZWJLaXRGaW5kQ29udHJvbGxlciogZmluZENvbnRyb2xsZXIs
IFdlYktpdEZpbmRDb250cm9sbGVyRmluZE9wZXJhdGlvbiBmaW5kT3BlcmF0aW9uKQoreworICAg
IFdLRmluZE9wdGlvbnMgd2tGaW5kT3B0aW9ucyA9IHN0YXRpY19jYXN0PFdLRmluZE9wdGlvbnM+
KGZpbmRDb250cm9sbGVyLT5wcml2LT5maW5kT3B0aW9ucyk7CisgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHdrU2VhcmNoVGV4dChBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZyhmaW5kQ29udHJvbGxlci0+cHJpdi0+c3RyaW5nLmRhdGEoKSkpOworICAgIFdLUGFnZVJl
ZiB3a1BhZ2UgPSBnZXRXS1BhZ2VGcm9tV2ViS2l0V2ViVmlldyhmaW5kQ29udHJvbGxlci0+cHJp
di0+d2ViVmlldyk7CisKKyAgICBpZiAoZmluZE9wZXJhdGlvbiA9PSBPUF9GSU5EKSB7CisgICAg
ICAgIC8vIFdlIGFsd2F5cyBoaWdobGlnaHQgdGV4dCBtYXRjaGVzCisgICAgICAgIHdrRmluZE9w
dGlvbnMgPSBzdGF0aWNfY2FzdDxXS0ZpbmRPcHRpb25zPihmaW5kQ29udHJvbGxlci0+cHJpdi0+
ZmluZE9wdGlvbnMgfCBrV0tGaW5kT3B0aW9uc1Nob3dIaWdobGlnaHQpOworICAgICAgICBXS1Bh
Z2VGaW5kU3RyaW5nKHdrUGFnZSwgd2tTZWFyY2hUZXh0LmdldCgpLCB3a0ZpbmRPcHRpb25zLCBm
aW5kQ29udHJvbGxlci0+cHJpdi0+bWF4TWF0Y2hDb3VudCk7CisgICAgfSBlbHNlCisgICAgICAg
IFdLUGFnZUNvdW50U3RyaW5nTWF0Y2hlcyh3a1BhZ2UsIHdrU2VhcmNoVGV4dC5nZXQoKSwgd2tG
aW5kT3B0aW9ucywgZmluZENvbnRyb2xsZXItPnByaXYtPm1heE1hdGNoQ291bnQpOworfQorCitz
dGF0aWMgaW5saW5lIHZvaWQgd2ViS2l0RmluZENvbnRyb2xsZXJTZXRTZWFyY2hEYXRhKFdlYktp
dEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxlciwgY29uc3QgZ2NoYXIqIHNlYXJjaFRleHQs
IGd1aW50IGZpbmRPcHRpb25zLCBndWludCBtYXhNYXRjaENvdW50KQoreworICAgIGZpbmRDb250
cm9sbGVyLT5wcml2LT5zdHJpbmcgPSBzZWFyY2hUZXh0OworICAgIGZpbmRDb250cm9sbGVyLT5w
cml2LT5maW5kT3B0aW9ucyA9IGZpbmRPcHRpb25zOworICAgIGZpbmRDb250cm9sbGVyLT5wcml2
LT5tYXhNYXRjaENvdW50ID0gbWF4TWF0Y2hDb3VudDsKK30KKworLyoqCisgKiB3ZWJraXRfZmlu
ZF9jb250cm9sbGVyX3NlYXJjaDoKKyAqIEBmaW5kX2NvbnRyb2xsZXI6IHRoZSAjV2ViS2l0Rmlu
ZENvbnRyb2xsZXIKKyAqIEBzZWFyY2hfdGV4dDogdGhlIHN0cmluZyB0byBsb29rIGZvcgorICog
QGZpbmRfb3B0aW9uczogYSBiaXRtYXNrIHdpdGggdGhlICNXZWJLaXRGaW5kT3B0aW9ucyB1c2Vk
IGluIHRoZSBzZWFyY2gKKyAqIEBtYXhfbWF0Y2hfY291bnQ6IHRoZSBtYXhpbXVtIG51bWJlciBv
ZiBtYXRjaGVzIGFsbG93ZWQgaW4gdGhlIHNlYXJjaAorICoKKyAqIExvb2tzIGZvciBAc2VhcmNo
X3RleHQgaW4gdGhlICNXZWJLaXRXZWJWaWV3IGFzc29jaWF0ZWQgd2l0aAorICogQGZpbmRfY29u
dHJvbGxlci4gVGhlIG91dGNvbWUgb2YgdGhlIHNlYXJjaCB3aWxsIGJlIGFzeW5jaHJvbm91c2x5
CisgKiBwcm92aWRlZCBieSB0aGUgV2ViS2l0RmluZENvbnRyb2xsZXI6OmZvdW5kLXN0cmluZyBh
bmQKKyAqIFdlYktpdEZpbmRDb250cm9sbGVyOjpmYWlsZWQtdG8tZmluZC1zdHJpbmcuCisgKgor
ICogVG8gbG9vayBmb3IgdGhlIG5leHQgb3IgcHJldmlvdXMgb2NjdXJyZW5jZXMgb2YgdGhlIHNh
bWUgc3RyaW5nCisgKiB3aXRoIHRoZSBzYW1lIGZpbmQgb3B0aW9ucyB1c2Ugd2Via2l0X2ZpbmRf
Y29udHJvbGxlcl9zZWFyY2hfbmV4dCgpCisgKiBhbmQvb3Igd2Via2l0X2ZpbmRfb3B0aW9uc19w
cmV2aW91cygpLiBUaGUKKyAqICNXZWJLaXRGaW5kQ29udHJvbGxlciB3aWxsIHVzZSB0aGUgc2Ft
ZSBzdHJpbmcgYW5kIG9wdGlvbnMgZm9yIHRoZQorICogZm9sbG93aW5nIHNlYXJjaGVzIHVubGVz
cyB0aGV5IGFyZSBtb2RpZmllZCBieSBhbm90aGVyIGNhbGwgdG8gdGhpcworICogbWV0aG9kLgor
ICoKKyAqIE5vdGUgdGhhdCBpZiB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgaXMgaGlnaGVyIHRoYW4g
QG1heF9tYXRjaF9jb3VudAorICogdGhlbiB3ZWJraXRfZmluZF9zdHJpbmdfZ2V0X21hdGNoX2Nv
dW50KCkgd2lsbCByZXR1cm4gR19NQVhVSU5UCisgKiBpbnN0ZWFkIG9mIHRoZSBhY3R1YWwgbnVt
YmVyIG9mIG1hdGNoZXMuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGFsc28gaGlnaGxpZ2gg
dXAgdG8gQG1heF9tYXRjaF9jb3VudAorICogbWFjaGVzLiBDYWxsZXJzIHNob3VsZCBjYWxsIHdl
YmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX2ZpbmlzaCgpCisgKiB0byB1bmhpZ2hsaWdodCB0
aGVtLgorICovCit2b2lkIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoKFdlYktpdEZpbmRD
b250cm9sbGVyKiBmaW5kQ29udHJvbGxlciwgY29uc3QgZ2NoYXIqIHNlYXJjaFRleHQsIGd1aW50
IGZpbmRPcHRpb25zLCBndWludCBtYXhNYXRjaENvdW50KQoreworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0lTX0ZJTkRfQ09OVFJPTExFUihmaW5kQ29udHJvbGxlcikpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoc2VhcmNoVGV4dCk7CisKKyAgICB3ZWJLaXRGaW5kQ29udHJvbGxlclNldFNl
YXJjaERhdGEoZmluZENvbnRyb2xsZXIsIHNlYXJjaFRleHQsIGZpbmRPcHRpb25zLCBtYXhNYXRj
aENvdW50KTsKKyAgICB3ZWJLaXRGaW5kQ29udHJvbGxlclBlcmZvcm0oZmluZENvbnRyb2xsZXIs
IE9QX0ZJTkQpOworfQorCisvKioKKyAqIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX25l
eHQ6CisgKiBAZmluZF9jb250cm9sbGVyOiB0aGUgI1dlYktpdEZpbmRDb250cm9sbGVyCisgKgor
ICogTG9va3MgZm9yIHRoZSBuZXh0IG9jY3VycmVuY2Ugb2YgdGhlIHNlYXJjaCBzdHJpbmcuCisg
KgorICogQ2FsbGluZyB0aGlzIG1ldGhvZCBiZWZvcmUgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9z
ZWFyY2goKSBvcgorICogd2Via2l0X2ZpbmRfY29udHJvbGxlcl9jb3VudF9tYXRjaGVzKCkgaXMg
YSBwcm9ncmFtbWluZyBlcnJvci4KKyAqLwordm9pZCB3ZWJraXRfZmluZF9jb250cm9sbGVyX3Nl
YXJjaF9uZXh0KFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxlcikKK3sKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19GSU5EX0NPTlRST0xMRVIoZmluZENvbnRyb2xsZXIp
KTsKKworICAgIGZpbmRDb250cm9sbGVyLT5wcml2LT5maW5kT3B0aW9ucyA9IGZpbmRDb250cm9s
bGVyLT5wcml2LT5maW5kT3B0aW9ucyAmIH5XRUJLSVRfRklORF9PUFRJT05TX0JBQ0tXQVJEUzsK
KyAgICB3ZWJLaXRGaW5kQ29udHJvbGxlclBlcmZvcm0oZmluZENvbnRyb2xsZXIsIE9QX0ZJTkQp
OworfQorCisvKioKKyAqIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX3ByZXZpb3VzOgor
ICogQGZpbmRfY29udHJvbGxlcjogdGhlICNXZWJLaXRGaW5kQ29udHJvbGxlcgorICoKKyAqIExv
b2tzIGZvciB0aGUgcHJldmlvdXMgb2NjdXJyZW5jZSBvZiB0aGUgc2VhcmNoIHRleHQuCisgKgor
ICogQ2FsbGluZyB0aGlzIG1ldGhvZCBiZWZvcmUgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFy
Y2goKSBvcgorICogd2Via2l0X2ZpbmRfY29udHJvbGxlcl9jb3VudF9tYXRjaGVzKCkgaXMgYSBw
cm9ncmFtbWluZyBlcnJvci4KKyAqLwordm9pZCB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJj
aF9wcmV2aW91cyhXZWJLaXRGaW5kQ29udHJvbGxlciogZmluZENvbnRyb2xsZXIpCit7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfRklORF9DT05UUk9MTEVSKGZpbmRDb250cm9sbGVy
KSk7CisKKyAgICBmaW5kQ29udHJvbGxlci0+cHJpdi0+ZmluZE9wdGlvbnMgPSBmaW5kQ29udHJv
bGxlci0+cHJpdi0+ZmluZE9wdGlvbnMgfCBXRUJLSVRfRklORF9PUFRJT05TX0JBQ0tXQVJEUzsK
KyAgICB3ZWJLaXRGaW5kQ29udHJvbGxlclBlcmZvcm0oZmluZENvbnRyb2xsZXIsIE9QX0ZJTkQp
OworfQorCisvKioKKyAqIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfY291bnRfbWF0Y2hlczoKKyAq
IEBmaW5kX2NvbnRyb2xsZXI6IHRoZSAjV2ViS2l0RmluZENvbnRyb2xsZXIKKyAqIEBzZWFyY2hf
dGV4dDogdGhlIHN0cmluZyB0byBsb29rIGZvcgorICogQGZpbmRfb3B0aW9uczogYSBiaXRtYXNr
IHdpdGggdGhlICNXZWJLaXRGaW5kT3B0aW9ucyB1c2VkIGluIHRoZSBzZWFyY2gKKyAqIEBtYXhf
bWF0Y2hfY291bnQ6IHRoZSBtYXhpbXVtIG51bWJlciBvZiBtYXRjaGVzIGFsbG93ZWQgaW4gdGhl
IHNlYXJjaAorICoKKyAqIENvdW50cyB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgZm9yIEBzZWFyY2hf
dGV4dCBmb3VuZCBpbiB0aGUKKyAqICNXZWJLaXRXZWJWaWV3IHdpdGggdGhlIHByb3ZpZGVkIEBm
aW5kX29wdGlvbnMuIFRoZSBudW1iZXIgb2YKKyAqIG1hdGNoZXMgd2lsbCBiZSBwcm92aWRlZCBi
eSB0aGUKKyAqIFdlYktpdEZpbmRDb250cm9sbGVyOjpjb3VudGVkLW1hdGNoZXMgc2lnbmFsLgor
ICovCit2b2lkIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfY291bnRfbWF0Y2hlcyhXZWJLaXRGaW5k
Q29udHJvbGxlciogZmluZENvbnRyb2xsZXIsIGNvbnN0IGdjaGFyKiBzZWFyY2hUZXh0LCBndWlu
dCBmaW5kT3B0aW9ucywgZ3VpbnQgbWF4TWF0Y2hDb3VudCkKK3sKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9JU19GSU5EX0NPTlRST0xMRVIoZmluZENvbnRyb2xsZXIpKTsKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKHNlYXJjaFRleHQpOworCisgICAgd2ViS2l0RmluZENvbnRyb2xsZXJTZXRT
ZWFyY2hEYXRhKGZpbmRDb250cm9sbGVyLCBzZWFyY2hUZXh0LCBmaW5kT3B0aW9ucywgbWF4TWF0
Y2hDb3VudCk7CisgICAgd2ViS2l0RmluZENvbnRyb2xsZXJQZXJmb3JtKGZpbmRDb250cm9sbGVy
LCBPUF9DT1VOVCk7Cit9CisKKy8qKgorICogd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hf
ZmluaXNoOgorICogQGZpbmRfY29udHJvbGxlcjogYSAjV2ViS2l0RmluZENvbnRyb2xsZXIKKyAq
CisgKiBGaW5pc2hlcyBhIGZpbmQgb3BlcmF0aW9uIHN0YXJ0ZWQgYnkKKyAqIHdlYmtpdF9maW5k
X2NvbnRyb2xsZXJfc2VhcmNoKCkuIEl0IHdpbGwgYmFzaWNhbGx5IHVuaGlnaGxpZ2h0CisgKiBl
dmVyeSB0ZXh0IG1hdGNoIGZvdW5kLgorICoqLwordm9pZCB3ZWJraXRfZmluZF9jb250cm9sbGVy
X3NlYXJjaF9maW5pc2goV2ViS2l0RmluZENvbnRyb2xsZXIgKmZpbmRDb250cm9sbGVyKQorewor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0ZJTkRfQ09OVFJPTExFUihmaW5kQ29udHJv
bGxlcikpOworCisgICAgV0tQYWdlSGlkZUZpbmRVSShnZXRXS1BhZ2VGcm9tV2ViS2l0V2ViVmll
dyhmaW5kQ29udHJvbGxlci0+cHJpdi0+d2ViVmlldykpOworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmluZENvbnRyb2xsZXIuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbmRDb250cm9sbGVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMWQ0NDcxOTc4ZDY0ZDdmZDFiMTdkY2NlNWM1YTBhNWIzYzRlMDdmNgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbmRDb250
cm9sbGVyLmgKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdh
bGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVDJfSF9JTlNJREVfXykgJiYgIWRlZmluZWQo
V0VCS0lUMl9DT01QSUxBVElPTikKKyNlcnJvciAiT25seSA8d2Via2l0Mi93ZWJraXQyLmg+IGNh
biBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRGaW5kQ29u
dHJvbGxlcl9oCisjZGVmaW5lIFdlYktpdEZpbmRDb250cm9sbGVyX2gKKworI2luY2x1ZGUgPGds
aWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJWaWV3Lmg+CisKK0dfQkVH
SU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9GSU5EX0NPTlRST0xMRVIgICAgICAgICAg
ICAod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRklO
RF9DT05UUk9MTEVSKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1Qo
KG9iaiksIFdFQktJVF9UWVBFX0ZJTkRfQ09OVFJPTExFUiwgV2ViS2l0RmluZENvbnRyb2xsZXIp
KQorI2RlZmluZSBXRUJLSVRfRklORF9DT05UUk9MTEVSX0NMQVNTKGtsYXNzKSAgICAoR19UWVBF
X0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0ZJTkRfQ09OVFJPTExFUiwg
V2ViS2l0RmluZENvbnRyb2xsZXJDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19GSU5EX0NPTlRS
T0xMRVIob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VC
S0lUX1RZUEVfRklORF9DT05UUk9MTEVSKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0ZJTkRfQ09OVFJP
TExFUl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJL
SVRfVFlQRV9GSU5EX0NPTlRST0xMRVIpKQorI2RlZmluZSBXRUJLSVRfRklORF9DT05UUk9MTEVS
X0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJ
VF9UWVBFX0ZJTkRfQ09OVFJPTExFUiwgV2ViS2l0RmluZENvbnRyb2xsZXJDbGFzcykpCisKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRGaW5kQ29udHJvbGxlclByaXZhdGUgV2ViS2l0RmluZENvbnRy
b2xsZXJQcml2YXRlOworCisvKioKKyAqIFdlYktpdEZpbmRPcHRpb25zOgorICogQFdFQktJVF9G
SU5EX09QVElPTlNfTk9ORTogbm8gc2VhcmNoIGZsYWdzLCB0aGlzIG1lYW5zIGEgY2FzZSBzZW5z
aXRpdmUsIG5vIHdyYXAsIGZvcndhcmQgb25seSBzZWFyY2gKKyAqIEBXRUJLSVRfRklORF9PUFRJ
T05TX0NBU0VfSU5TRU5TSVRJVkU6IGNhc2UgaW5zZW5zaXRpdmUgc2VhcmNoCisgKiBAV0VCS0lU
X0ZJTkRfT1BUSU9OU19BVF9XT1JEX1NUQVJUUzogc2VhcmNoIG9ubHkgYXQgdGhlIGJlZ2luaW5n
IG9mIHRoZSB3b3JkcworICogQFdFQktJVF9GSU5EX09QVElPTlNfVFJFQVRfTUVESUFMX0NBUElU
QUxfQVNfV09SRF9TVEFSVDogdHJlYXQgY2FwaXRhbCBsZXR0ZXJzIGluIHRoZSBtaWRkbGUgb2Yg
d29yZHMgYXMgd29yZCBzdGFydAorICogQFdFQktJVF9GSU5EX09QVElPTlNfQkFDS1dBUkRTOiBz
ZWFyY2ggYmFja3dhcmRzCisgKiBAV0VCS0lUX0ZJTkRfT1BUSU9OU19XUkFQX0FST1VORDogaWYg
bm90IHByZXNlbnQgc2VhcmNoIHdpbGwgc3RvcCBhdCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudAor
ICovCit0eXBlZGVmIGVudW0geworICBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsCisKKyAgV0VC
S0lUX0ZJTkRfT1BUSU9OU19DQVNFX0lOU0VOU0lUSVZFID0gICAgICAgICAgICAgICAgICAgMSA8
PCAwLAorICBXRUJLSVRfRklORF9PUFRJT05TX0FUX1dPUkRfU1RBUlRTID0gICAgICAgICAgICAg
ICAgICAgICAxIDw8IDEsCisgIFdFQktJVF9GSU5EX09QVElPTlNfVFJFQVRfTUVESUFMX0NBUElU
QUxfQVNfV09SRF9TVEFSVCA9IDEgPDwgMiwKKyAgV0VCS0lUX0ZJTkRfT1BUSU9OU19CQUNLV0FS
RFMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgMSA8PCAzLAorICBXRUJLSVRfRklORF9PUFRJ
T05TX1dSQVBfQVJPVU5EID0gICAgICAgICAgICAgICAgICAgICAgICAxIDw8IDQsCit9IFdlYktp
dEZpbmRPcHRpb25zOworCitzdHJ1Y3QgX1dlYktpdEZpbmRDb250cm9sbGVyIHsKKyAgICBHT2Jq
ZWN0IHBhcmVudDsKKworICAvKjwgcHJpdmF0ZSA+Ki8KKyAgV2ViS2l0RmluZENvbnRyb2xsZXJQ
cml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRGaW5kQ29udHJvbGxlckNsYXNzIHsK
KyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQor
d2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfdHlwZSAgICAgICAgICAgICh2b2lkKTsKKworV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaCAgICAgICAgICAgICAg
KFdlYktpdEZpbmRDb250cm9sbGVyICpmaW5kX2NvbnRyb2xsZXIsCisJCQkJCSAgICBjb25zdCBn
Y2hhciAgICAgICAgICAqc2VhcmNoX3RleHQsCisJCQkJCSAgICBndWludCAgICAgICAgICAgICAg
ICAgZmluZF9vcHRpb25zLAorCQkJCQkgICAgZ3VpbnQgICAgICAgICAgICAgICAgIG1heF9tYXRj
aF9jb3VudCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFy
Y2hfZmluaXNoICAgICAgIChXZWJLaXRGaW5kQ29udHJvbGxlciAqZmluZF9jb250cm9sbGVyKTsK
KworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9uZXh0ICAg
ICAgICAgKFdlYktpdEZpbmRDb250cm9sbGVyICpmaW5kX2NvbnRyb2xsZXIpOworCitXRUJLSVRf
QVBJIHZvaWQKK3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX3ByZXZpb3VzICAgICAoV2Vi
S2l0RmluZENvbnRyb2xsZXIgKmZpbmRfY29udHJvbGxlcik7CisKK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X2ZpbmRfY29udHJvbGxlcl9jb3VudF9tYXRjaGVzICAgICAgIChXZWJLaXRGaW5kQ29u
dHJvbGxlciAqZmluZF9jb250cm9sbGVyLAorCQkJCQkgICAgY29uc3QgZ2NoYXIgICAgICAgICAg
KnNlYXJjaF90ZXh0LAorCQkJCQkgICAgZ3VpbnQgICAgICAgICAgICAgICAgIGZpbmRfb3B0aW9u
cywKKwkJCQkJICAgIGd1aW50ICAgICAgICAgICAgICAgICBtYXhfbWF0Y2hfY291bnQpOworCitX
RUJLSVRfQVBJIGNvbnN0IGdjaGFyICoKK3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X3NlYXJj
aF90ZXh0ICAgICAoV2ViS2l0RmluZENvbnRyb2xsZXIgKmZpbmRfY29udHJvbGxlcik7CisKK1dF
QktJVF9BUEkgZ3VpbnQKK3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X29wdGlvbnMgICAgICAg
ICAoV2ViS2l0RmluZENvbnRyb2xsZXIgKmZpbmRfY29udHJvbGxlcik7CisKK1dFQktJVF9BUEkg
Z3VpbnQKK3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X21heF9tYXRjaF9jb3VudCAoV2ViS2l0
RmluZENvbnRyb2xsZXIgKmZpbmRfY29udHJvbGxlcik7CisKK1dFQktJVF9BUEkgV2ViS2l0V2Vi
VmlldyAqCit3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF93ZWJfdmlldyAgICAgICAgKFdlYktp
dEZpbmRDb250cm9sbGVyICpmaW5kX2NvbnRyb2xsZXIpOworCitHX0VORF9ERUNMUworCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
dy5jcHAKaW5kZXggZThiY2FlZWRhN2VlNDVjZGI0ZDYwMjA0YmMxYzY4YTgxODJmMGI1YS4uMjdh
ZjRkMzY4YWNmNzQzYTRiNjdiZGEyOTY3OWUyYzc3ZWRiNzQ1MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKQEAgLTgyLDYgKzgy
LDcgQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3UHJpdmF0ZSB7CiAgICAgR1JlZlB0cjxXZWJLaXRC
YWNrRm9yd2FyZExpc3Q+IGJhY2tGb3J3YXJkTGlzdDsKICAgICBHUmVmUHRyPFdlYktpdFNldHRp
bmdzPiBzZXR0aW5nczsKICAgICBHUmVmUHRyPFdlYktpdFdpbmRvd1Byb3BlcnRpZXM+IHdpbmRv
d1Byb3BlcnRpZXM7CisgICAgR1JlZlB0cjxXZWJLaXRGaW5kQ29udHJvbGxlcj4gZmluZENvbnRy
b2xsZXI7CiB9OwogCiBzdGF0aWMgZ3VpbnQgc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAsIH07
CkBAIC0xMjY2LDMgKzEyNjcsMjMgQEAgZ2RvdWJsZSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3pvb21f
bGV2ZWwoV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAgICBXS1BhZ2VSZWYgd2tQYWdlID0gdG9B
UEkod2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKFdFQktJVF9XRUJfVklFV19CQVNFKHdlYlZpZXcp
KSk7CiAgICAgcmV0dXJuIFdLUGFnZUdldFBhZ2Vab29tRmFjdG9yKHdrUGFnZSk7CiB9CisKKy8q
KgorICogd2Via2l0X3dlYl92aWV3X2dldF9maW5kX2NvbnRyb2xsZXI6CisgKiBAd2ViX3ZpZXc6
IHRoZSAjV2ViS2l0V2ViVmlldworICoKKyAqIEdldHMgdGhlICNXZWJLaXRGaW5kQ29udHJvbGxl
ciB0aGF0IHdpbGwgYWxsb3cgdGhlIGNhbGxlciB0byBxdWVyeQorICogdGhlICNXZWJLaXRXZWJW
aWV3IGZvciB0aGUgdGV4dCB0byBsb29rIGZvci4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIg
bm9uZSk6IHRoZSAjV2ViS2l0RmluZENvbnRyb2xsZXIgYXNzb2NpYXRlZCB0bworICogdGhpcyBw
YXJ0aWN1bGFyICNXZWJLaXRXZWJWaWV3LgorICovCitXZWJLaXRGaW5kQ29udHJvbGxlciogd2Vi
a2l0X3dlYl92aWV3X2dldF9maW5kX2NvbnRyb2xsZXIoV2ViS2l0V2ViVmlldyAqd2ViVmlldykK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldyks
IDApOworCisgICAgaWYgKCF3ZWJWaWV3LT5wcml2LT5maW5kQ29udHJvbGxlcikKKyAgICAgICAg
d2ViVmlldy0+cHJpdi0+ZmluZENvbnRyb2xsZXIgPSBhZG9wdEdSZWYoV0VCS0lUX0ZJTkRfQ09O
VFJPTExFUihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRklORF9DT05UUk9MTEVSLCAid2ViLXZp
ZXciLCB3ZWJWaWV3LCBOVUxMKSkpOworCisgICAgcmV0dXJuIHdlYlZpZXctPnByaXYtPmZpbmRD
b250cm9sbGVyLmdldCgpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlldy5oCmluZGV4IDY5N2ZjZGM4MGU2MDkzYmRiZmQ0YjExYzNlZGE1Mjk3
YzY0NTVjYjAuLmQ4YzNjYTlhOGM1ZjVmNDFhNWIyOWFlNDFiM2YxODBjODZlOGRmZjQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKQEAg
LTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0QmFja0ZvcndhcmRMaXN0
Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CisjaW5jbHVkZSA8d2Via2l0
Mi9XZWJLaXRGaW5kQ29udHJvbGxlci5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViQ29u
dGV4dC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0U2V0dGluZ3MuaD4KICNpbmNsdWRlIDx3
ZWJraXQyL1dlYktpdFVSSVJlcXVlc3QuaD4KQEAgLTgwLDggKzgxLDYgQEAgdHlwZWRlZiBlbnVt
IHsKICNkZWZpbmUgV0VCS0lUX0lTX1dFQl9WSUVXX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNL
X0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX1dFQl9WSUVXKSkKICNkZWZpbmUgV0VC
S0lUX1dFQl9WSUVXX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygo
b2JqKSwgIFdFQktJVF9UWVBFX1dFQl9WSUVXLCBXZWJLaXRXZWJWaWV3Q2xhc3MpKQogCi10eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmlldyBXZWJLaXRXZWJWaWV3OwotdHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdFdlYlZpZXdDbGFzcyBXZWJLaXRXZWJWaWV3Q2xhc3M7CiB0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0V2ViVmlld1ByaXZhdGUgV2ViS2l0V2ViVmlld1ByaXZhdGU7CiAKIC8qKgpAQCAtMjQ1
LDYgKzI0NCw5IEBAIHdlYmtpdF93ZWJfdmlld19zZXRfem9vbV9sZXZlbCAgICAgICAgICAgICAg
IChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmllCiBXRUJLSVRfQVBJIGdkb3VibGUK
IHdlYmtpdF93ZWJfdmlld19nZXRfem9vbV9sZXZlbCAgICAgICAgICAgICAgIChXZWJLaXRXZWJW
aWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7CiAKK1dFQktJVF9BUEkgV2ViS2l0RmluZENvbnRy
b2xsZXIgKgord2Via2l0X3dlYl92aWV3X2dldF9maW5kX2NvbnRyb2xsZXIgICAgICAgICAgKFdl
YktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3KTsKKwogR19FTkRfREVDTFMKIAogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dl
YmtpdDJndGstZG9jcy5zZ21sIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9j
cy93ZWJraXQyZ3RrLWRvY3Muc2dtbAppbmRleCBjNmY5NDNhYjJhNjg4MDI5ZDk1NmViYjY4NTBm
ZWNiMWYyNGMyMGExLi5lMTYyZjFlZGJmMTdiMzc2ZmZlYTJjN2M2OGJkZDg4MjE5NjI3YTNjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJn
dGstZG9jcy5zZ21sCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mv
d2Via2l0Mmd0ay1kb2NzLnNnbWwKQEAgLTI0LDYgKzI0LDcgQEAKICAgICA8eGk6aW5jbHVkZSBo
cmVmPSJ4bWwvV2ViS2l0UG9saWN5RGVjaXNpb24ueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJl
Zj0ieG1sL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbi54bWwiLz4KICAgICA8eGk6aW5j
bHVkZSBocmVmPSJ4bWwvV2ViS2l0RXJyb3IueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0i
eG1sL1dlYktpdEZpbmRDb250cm9sbGVyLnhtbCIvPgogICA8L2NoYXB0ZXI+CiAKICAgPGluZGV4
IGlkPSJpbmRleC1hbGwiPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKaW5kZXggZWY0NGIyYmVk
NjdjNjQxYzcwZjVhNDhlZDg0YTc5MjgwMGUwYjVhZi4uM2YxZjQ1ZWQ4NDYwODk2Yjc0ZjIzZTg5
NTIwM2MyMzZhMGZiYjI2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CkBAIC03Niw2ICs3
Niw3IEBAIHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3MKIHdlYmtpdF93ZWJfdmlld19nZXRf
d2luZG93X3Byb3BlcnRpZXMKIHdlYmtpdF93ZWJfdmlld19zZXRfem9vbV9sZXZlbAogd2Via2l0
X3dlYl92aWV3X2dldF96b29tX2xldmVsCit3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ZpbmRfY29udHJv
bGxlcgogCiA8U1VCU0VDVElPTiBTdGFuZGFyZD4KIFdlYktpdFdlYlZpZXdDbGFzcwpAQCAtMzcz
LDMgKzM3NCwzMCBAQCB3ZWJraXRfcG9saWN5X2Vycm9yX3F1YXJrCiB3ZWJraXRfZG93bmxvYWRf
ZXJyb3JfcXVhcmsKIDwvU0VDVElPTj4KIAorPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRGaW5kQ29u
dHJvbGxlcjwvRklMRT4KK1dlYktpdEZpbmRDb250cm9sbGVyCitXZWJLaXRGaW5kT3B0aW9ucwor
d2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2gKK3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2Vh
cmNoX2ZpbmlzaAord2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfbmV4dAord2Via2l0X2Zp
bmRfY29udHJvbGxlcl9zZWFyY2hfcHJldmlvdXMKK3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0
X3NlYXJjaF90ZXh0Cit3ZWJraXRfZmluZF9jb250cm9sbGVyX2NvdW50X21hdGNoZXMKK3dlYmtp
dF9maW5kX2NvbnRyb2xsZXJfZ2V0X29wdGlvbnMKK3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0
X21heF9tYXRjaF9jb3VudAord2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfd2ViX3ZpZXcKKwor
PFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRGaW5kQ29udHJvbGxlckNsYXNzCitXRUJLSVRf
VFlQRV9GSU5EX0NPTlRST0xMRVIKK1dFQktJVF9GSU5EX0NPTlRST0xMRVIKK1dFQktJVF9JU19G
SU5EX0NPTlRST0xMRVIKK1dFQktJVF9GSU5EX0NPTlRST0xMRVJfQ0xBU1MKK1dFQktJVF9JU19G
SU5EX0NPTlRST0xMRVJfQ0xBU1MKK1dFQktJVF9GSU5EX0NPTlRST0xMRVJfR0VUX0NMQVNTCisK
KzxTVUJTRUNUSU9OIFByaXZhdGU+CitXZWJLaXRGaW5kQ29udHJvbGxlclByaXZhdGUKK3dlYmtp
dF9maW5kX2NvbnRyb2xsZXJfZ2V0X3R5cGUKKzwvU0VDVElPTj4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBlcyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBlcwppbmRleCBj
YmEyZGY0MmMzZDUyNDQzMDVlZWU0NjE2YjllNzgzNWFmZDFmNjJmLi4yZTBmNTAwMmNhZTczYjgy
NTk2NDY4ZGUxYWY2NzBhZDc1OTE1ZDc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXMKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzCkBAIC05LDQgKzksNCBAQCB3
ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF90eXBlCiB3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3R5cGUK
IHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfdHlwZQogd2Via2l0X2Rvd25sb2FkX2dldF90
eXBlCi0KK3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X3R5cGUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KaW5kZXggMTc1
YTE0OWU0MzQ2NDc2MDM4YTNmMTEwZmZmMjdjZDdiYTU2MGVjNC4uYzg0OGQ0OTYzYWVkYzU1YjEx
NTkwNGUwMDI0OWU4ZTlhODJlNWViYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KQEAgLTEsMTEgKzEsMTIgQEAKIFRF
U1RfUFJPR1MgKz0gXAotCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0V2ViS2l0V2ViQ29u
dGV4dCBcCi0JUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3IFwKLQlQ
cm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdExvYWRlckNsaWVudCBcCi0JUHJvZ3JhbXMvV2Vi
S2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRTZXR0aW5ncyBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRl
c3RzL1Rlc3RCYWNrRm9yd2FyZExpc3QgXAogCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0
RG93bmxvYWRzIFwKLQlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFBvbGljeUNs
aWVudAorCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0TG9hZGVyQ2xpZW50IFwKKwlQcm9n
cmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdEZpbmRDb250cm9sbGVyIFwKKwlQcm9ncmFt
cy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFBvbGljeUNsaWVudCBcCisJUHJvZ3JhbXMvV2Vi
S2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRTZXR0aW5ncyBcCisJUHJvZ3JhbXMvV2ViS2l0MkFQSVRl
c3RzL1Rlc3RXZWJLaXRXZWJDb250ZXh0IFwKKwlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVz
dFdlYktpdFdlYlZpZXcKIAogbm9pbnN0X1BST0dSQU1TICs9ICQoVEVTVF9QUk9HUykKIApAQCAt
MTExLDMgKzExMiw5IEBAIFByb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0RG93bmxvYWRzX1NP
VVJDRVMgPSBcCiBQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdERvd25sb2Fkc19DUFBGTEFH
UyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKIFByb2dyYW1zX1dlYktpdDJBUElUZXN0c19U
ZXN0RG93bmxvYWRzX0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQogUHJvZ3JhbXNfV2Vi
S2l0MkFQSVRlc3RzX1Rlc3REb3dubG9hZHNfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZs
YWdzKQorCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYktpdEZpbmRDb250cm9sbGVy
X1NPVVJDRVMgPSBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVz
dFdlYktpdEZpbmRDb250cm9sbGVyLmNwcAorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RX
ZWJLaXRGaW5kQ29udHJvbGxlcl9DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykK
K1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViS2l0RmluZENvbnRyb2xsZXJfTERBREQg
PSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdl
YktpdEZpbmRDb250cm9sbGVyX0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJL
aXRGaW5kQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9UZXN0V2ViS2l0RmluZENvbnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRlYjgzYmM0MzU4
YTM0MmU0Yjk4ZDE4MmY2MmVkNTM5YWE5OWYyY2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0RmluZENvbnRyb2xsZXIu
Y3BwCkBAIC0wLDAgKzEsMzAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBT
LkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJMb2FkVHJhY2tpbmdUZXN0Lmgi
CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgorI2lu
Y2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKworc3RhdGljIGNvbnN0IGNoYXIqIHRlc3RT
dHJpbmcgPSAiPGh0bWw+PGJvZHk+Zmlyc3QgdGVzdGluZyBzZWNvbmQgdGVzdGluZyBzZWNvbmRI
YWxmPC9ib2R5PjwvaHRtbD4iOworCitjbGFzcyBGaW5kQ29udHJvbGxlclRlc3Q6IHB1YmxpYyBM
b2FkVHJhY2tpbmdUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKEZp
bmRDb250cm9sbGVyVGVzdCk7CisKKyAgICBGaW5kQ29udHJvbGxlclRlc3QoKQorICAgICAgICA6
IG1fcnVuRmluZFVudGlsQ29tcGxldGlvbihmYWxzZSksCisgICAgICAgICAgbV9maW5kQ29udHJv
bGxlcih3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ZpbmRfY29udHJvbGxlcihtX3dlYlZpZXcpKQorICAg
IHsKKyAgICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVD
VChtX2ZpbmRDb250cm9sbGVyLmdldCgpKSk7CisgICAgfQorCisgICAgfkZpbmRDb250cm9sbGVy
VGVzdCgpCisgICAgeworICAgICAgICBpZiAobV9maW5kQ29udHJvbGxlcikKKyAgICAgICAgICAg
IGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX2ZpbmRDb250cm9sbGVyLmdl
dCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKKyAgICB9CisKKyAg
ICB2b2lkIGZpbmQoY29uc3QgY2hhciogc2VhcmNoU3RyaW5nLCBXZWJLaXRGaW5kT3B0aW9ucyBm
aW5kT3B0aW9ucywgZ3VpbnQgbWF4TWF0Y2hDb3VudCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFs
X2Nvbm5lY3QobV9maW5kQ29udHJvbGxlci5nZXQoKSwgImZvdW5kLXN0cmluZyIsIEdfQ0FMTEJB
Q0soZm91bmRTdHJpbmdDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0
KG1fZmluZENvbnRyb2xsZXIuZ2V0KCksICJmYWlsZWQtdG8tZmluZC1zdHJpbmciLCBHX0NBTExC
QUNLKGZhaWxlZFRvRmluZFN0cmluZ0NhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIHdlYmtpdF9m
aW5kX2NvbnRyb2xsZXJfc2VhcmNoKG1fZmluZENvbnRyb2xsZXIuZ2V0KCksIHNlYXJjaFN0cmlu
ZywgZmluZE9wdGlvbnMsIG1heE1hdGNoQ291bnQpOworICAgIH0KKworICAgIHZvaWQgY291bnQo
Y29uc3QgY2hhciogc2VhcmNoU3RyaW5nLCBXZWJLaXRGaW5kT3B0aW9ucyBmaW5kT3B0aW9ucywg
Z3VpbnQgbWF4TWF0Y2hDb3VudCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9m
aW5kQ29udHJvbGxlci5nZXQoKSwgImNvdW50ZWQtbWF0Y2hlcyIsIEdfQ0FMTEJBQ0soY291bnRl
ZE1hdGNoZXNDYWxsYmFjayksIHRoaXMpOworICAgICAgICB3ZWJraXRfZmluZF9jb250cm9sbGVy
X2NvdW50X21hdGNoZXMobV9maW5kQ29udHJvbGxlci5nZXQoKSwgc2VhcmNoU3RyaW5nLCBmaW5k
T3B0aW9ucywgbWF4TWF0Y2hDb3VudCk7CisgICAgfQorCisgICAgdm9pZCB3YWl0VW50aWxGaW5k
RmluaXNoZWQoKQorICAgIHsKKyAgICAgICAgbV9ydW5GaW5kVW50aWxDb21wbGV0aW9uID0gdHJ1
ZTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIEdS
ZWZQdHI8V2ViS2l0RmluZENvbnRyb2xsZXI+IG1fZmluZENvbnRyb2xsZXI7CisgICAgYm9vbCBt
X3RleHRGb3VuZDsKKyAgICB1bnNpZ25lZCBtX21hdGNoQ291bnQ7CisKK3ByaXZhdGU6CisgICAg
Ym9vbCBtX3J1bkZpbmRVbnRpbENvbXBsZXRpb247CisKKyAgICBzdGF0aWMgdm9pZCBmb3VuZFN0
cmluZ0NhbGxiYWNrKFdlYktpdEZpbmRDb250cm9sbGVyKiwgZ3VpbnQgbWF0Y2hDb3VudCwgRmlu
ZENvbnRyb2xsZXJUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+bV90ZXh0Rm91bmQg
PSB0cnVlOworICAgICAgICB0ZXN0LT5tX21hdGNoQ291bnQgPSBtYXRjaENvdW50OworICAgICAg
ICBpZiAodGVzdC0+bV9ydW5GaW5kVW50aWxDb21wbGV0aW9uKQorICAgICAgICAgICAgZ19tYWlu
X2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBm
YWlsZWRUb0ZpbmRTdHJpbmdDYWxsYmFjayhXZWJLaXRGaW5kQ29udHJvbGxlciosIEZpbmRDb250
cm9sbGVyVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPm1fdGV4dEZvdW5kID0gZmFs
c2U7CisgICAgICAgIGlmICh0ZXN0LT5tX3J1bkZpbmRVbnRpbENvbXBsZXRpb24pCisgICAgICAg
ICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHN0
YXRpYyB2b2lkIGNvdW50ZWRNYXRjaGVzQ2FsbGJhY2soV2ViS2l0RmluZENvbnRyb2xsZXIqLCBn
dWludCBtYXRjaENvdW50LCBGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QpCisgICAgeworICAgICAg
ICB0ZXN0LT5tX21hdGNoQ291bnQgPSBtYXRjaENvdW50OworICAgICAgICBpZiAodGVzdC0+bV9y
dW5GaW5kVW50aWxDb21wbGV0aW9uKQorICAgICAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0
LT5tX21haW5Mb29wKTsKKyAgICB9Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xs
ZXJUZXh0Rm91bmQoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQorewor
ICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RTdHJpbmcsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExv
YWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+ZmluZCgidGVzdGluZyIsIFdFQktJVF9GSU5EX09Q
VElPTlNfTk9ORSwgMSk7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAg
ICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RGaW5k
Q29udHJvbGxlclRleHROb3RGb3VuZChGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0cmluZywgMCk7CisgICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5maW5kKCJub3RGb3VuZCIsIFdF
QktJVF9GSU5EX09QVElPTlNfTk9ORSwgMSk7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlz
aGVkKCk7CisKKyAgICBnX2Fzc2VydCghdGVzdC0+bV90ZXh0Rm91bmQpOworfQorCitzdGF0aWMg
dm9pZCB0ZXN0RmluZENvbnRyb2xsZXJNYXRjaENvdW50KEZpbmRDb250cm9sbGVyVGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3RyaW5nLCAwKTsK
KyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPmZpbmQoInRl
c3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDIpOworICAgIHRlc3QtPndhaXRVbnRp
bEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDIp
OworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKK30KKworc3RhdGljIHZvaWQgdGVz
dEZpbmRDb250cm9sbGVyTWF4TWF0Y2hDb3VudChGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0cmluZywgMCk7CisgICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5maW5kKCJ0ZXN0aW5n
IiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAxKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5k
RmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3VudCA9PSBHX01BWFVJ
TlQpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKK30KKworc3RhdGljIHZvaWQg
dGVzdEZpbmRDb250cm9sbGVyTmV4dChGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0cmluZywgMCk7CisgICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5maW5kKCJ0ZXN0aW5nIiwgV0VC
S0lUX0ZJTkRfT1BUSU9OU19OT05FLCAyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNo
ZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKKyAgICBnX2Fzc2VydCh0
ZXN0LT5tX21hdGNoQ291bnQgPT0gMik7CisKKyAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3Nl
YXJjaF9uZXh0KHRlc3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpOworICAgIHRlc3QtPndhaXRV
bnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOwor
ICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3VudCA9PSAyKTsKKyAgICBnX2Fzc2VydCghKHdl
YmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X29wdGlvbnModGVzdC0+bV9maW5kQ29udHJvbGxlci5n
ZXQoKSkgJiBXRUJLSVRfRklORF9PUFRJT05TX0JBQ0tXQVJEUykpOworCisgICAgd2Via2l0X2Zp
bmRfY29udHJvbGxlcl9zZWFyY2hfbmV4dCh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKTsK
KyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KCF0ZXN0
LT5tX3RleHRGb3VuZCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDIpOwor
ICAgIGdfYXNzZXJ0KCEod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfb3B0aW9ucyh0ZXN0LT5t
X2ZpbmRDb250cm9sbGVyLmdldCgpKSAmIFdFQktJVF9GSU5EX09QVElPTlNfQkFDS1dBUkRTKSk7
Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlclByZXZpb3VzKEZpbmRDb250cm9s
bGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0
U3RyaW5nLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRl
c3QtPmZpbmQoInRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDIpOworICAgIHRl
c3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV9tYXRj
aENvdW50ID09IDIpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKKworICAgIHdl
YmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX25leHQodGVzdC0+bV9maW5kQ29udHJvbGxlci5n
ZXQoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2Vy
dCh0ZXN0LT5tX3RleHRGb3VuZCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09
IDIpOworICAgIGdfYXNzZXJ0KCEod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfb3B0aW9ucyh0
ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKSAmIFdFQktJVF9GSU5EX09QVElPTlNfQkFDS1dB
UkRTKSk7CisKKyAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9wcmV2aW91cyh0ZXN0
LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNo
ZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKKyAgICBnX2Fzc2VydCh0
ZXN0LT5tX21hdGNoQ291bnQgPT0gMik7CisgICAgZ19hc3NlcnQod2Via2l0X2ZpbmRfY29udHJv
bGxlcl9nZXRfb3B0aW9ucyh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKSAmIFdFQktJVF9G
SU5EX09QVElPTlNfQkFDS1dBUkRTKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9s
bGVyQ291bnRlZE1hdGNoZXMoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQoreworICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RTdHJpbmcsIDApOworICAgIHRlc3QtPndhaXRV
bnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+Y291bnQoInRlc3RpbmciLCBXRUJLSVRf
RklORF9PUFRJT05TX05PTkUsIDIpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgp
OworCisgICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDIpOworCisgICAgdGVzdC0+
Y291bnQoImZpcnN0IiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAyKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3Vu
dCA9PSAxKTsKKworICAgIHRlc3QtPmNvdW50KCJub3RGb3VuZCIsIFdFQktJVF9GSU5EX09QVElP
TlNfTk9ORSwgMik7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBn
X2Fzc2VydCghdGVzdC0+bV9tYXRjaENvdW50KTsKK30KKworc3RhdGljIHZvaWQgdGVzdEZpbmRD
b250cm9sbGVyT3B0aW9ucyhGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
Cit7CisgICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0cmluZywgMCk7CisgICAgdGVzdC0+d2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5maW5kKCJUZXN0aW5nIiwgV0VCS0lUX0ZJ
TkRfT1BUSU9OU19OT05FLCAyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsK
KworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX3RleHRGb3VuZCk7CisKKyAgICB0ZXN0LT5maW5kKCJU
ZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19DQVNFX0lOU0VOU0lUSVZFLCAyKTsKKyAgICB0
ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4
dEZvdW5kKTsKKworICAgIHRlc3QtPmZpbmQoImVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNf
Tk9ORSwgMik7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fz
c2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7CisKKyAgICB0ZXN0LT5maW5kKCJlc3RpbmciLCBXRUJL
SVRfRklORF9PUFRJT05TX0FUX1dPUkRfU1RBUlRTLCAyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxG
aW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX3RleHRGb3VuZCk7CisKKyAg
ICB0ZXN0LT5maW5kKCJIYWxmIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19BVF9XT1JEX1NUQVJUUywg
Mik7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCgh
dGVzdC0+bV90ZXh0Rm91bmQpOworCisgICAgdGVzdC0+ZmluZCgiSGFsZiIsIHN0YXRpY19jYXN0
PFdlYktpdEZpbmRPcHRpb25zPihXRUJLSVRfRklORF9PUFRJT05TX0FUX1dPUkRfU1RBUlRTIHwg
V0VCS0lUX0ZJTkRfT1BUSU9OU19UUkVBVF9NRURJQUxfQ0FQSVRBTF9BU19XT1JEX1NUQVJUKSwg
Mik7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0
ZXN0LT5tX3RleHRGb3VuZCk7CisKKyAgICB0ZXN0LT5maW5kKCJ0ZXN0aW5nIiwgV0VCS0lUX0ZJ
TkRfT1BUSU9OU19XUkFQX0FST1VORCwgMyk7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlz
aGVkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworCisgICAgd2Via2l0X2Zp
bmRfY29udHJvbGxlcl9zZWFyY2hfbmV4dCh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKTsK
KyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5t
X3RleHRGb3VuZCk7CisKKyAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9uZXh0KHRl
c3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5p
c2hlZCgpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKK30KKworc3RhdGljIHZv
aWQgdGVzdEZpbmRDb250cm9sbGVySW5zdGFuY2UoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQoreworICAgIFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxl
cjEgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ZpbmRfY29udHJvbGxlcih0ZXN0LT5tX3dlYlZpZXcp
OworICAgIFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxlcjIgPSB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2ZpbmRfY29udHJvbGxlcih0ZXN0LT5tX3dlYlZpZXcpOworCisgICAgZ19hc3Nl
cnQoZmluZENvbnRyb2xsZXIxID09IGZpbmRDb250cm9sbGVyMik7Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3RGaW5kQ29udHJvbGxlckdldHRlcnMoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQoreworICAgIGNvbnN0IGNoYXIqIHNlYXJjaFN0cmluZyA9ICJ0ZXN0aW5nIjsK
KyAgICBjb25zdCBndWludCBtYXhNYXRjaENvdW50ID0gMTsKKyAgICBjb25zdCBXZWJLaXRGaW5k
T3B0aW9ucyBmaW5kT3B0aW9ucyA9IHN0YXRpY19jYXN0PFdlYktpdEZpbmRPcHRpb25zPihXRUJL
SVRfRklORF9PUFRJT05TX1dSQVBfQVJPVU5EIHwgV0VCS0lUX0ZJTkRfT1BUSU9OU19BVF9XT1JE
X1NUQVJUUyk7CisgICAgV2ViS2l0RmluZENvbnRyb2xsZXIqIGZpbmRDb250cm9sbGVyID0gd2Vi
a2l0X3dlYl92aWV3X2dldF9maW5kX2NvbnRyb2xsZXIodGVzdC0+bV93ZWJWaWV3KTsKKworICAg
IHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoKGZpbmRDb250cm9sbGVyLCBzZWFyY2hTdHJp
bmcsIGZpbmRPcHRpb25zLCBtYXhNYXRjaENvdW50KTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfZmlu
ZF9jb250cm9sbGVyX2dldF93ZWJfdmlldyhmaW5kQ29udHJvbGxlcikgPT0gdGVzdC0+bV93ZWJW
aWV3KTsKKyAgICBnX2Fzc2VydCghZ19zdHJjbXAwKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0
X3NlYXJjaF90ZXh0KGZpbmRDb250cm9sbGVyKSwgc2VhcmNoU3RyaW5nKSk7CisgICAgZ19hc3Nl
cnQod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfbWF4X21hdGNoX2NvdW50KGZpbmRDb250cm9s
bGVyKSA9PSBtYXhNYXRjaENvdW50KTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfZmluZF9jb250cm9s
bGVyX2dldF9vcHRpb25zKGZpbmRDb250cm9sbGVyKSA9PSBmaW5kT3B0aW9ucyk7Cit9CisKK3Zv
aWQgYmVmb3JlQWxsKCkKK3sKKyAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0Rmlu
ZENvbnRyb2xsZXIiLCAiZ2V0dGVycyIsIHRlc3RGaW5kQ29udHJvbGxlckdldHRlcnMpOworICAg
IEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJpbnN0YW5j
ZSIsIHRlc3RGaW5kQ29udHJvbGxlckluc3RhbmNlKTsKKyAgICBGaW5kQ29udHJvbGxlclRlc3Q6
OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAidGV4dC1mb3VuZCIsIHRlc3RGaW5kQ29udHJv
bGxlclRleHRGb3VuZCk7CisgICAgRmluZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRD
b250cm9sbGVyIiwgInRleHQtbm90LWZvdW5kIiwgdGVzdEZpbmRDb250cm9sbGVyVGV4dE5vdEZv
dW5kKTsKKyAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIi
LCAibWF0Y2gtY291bnQiLCB0ZXN0RmluZENvbnRyb2xsZXJNYXRjaENvdW50KTsKKyAgICBGaW5k
Q29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAibWF4LW1hdGNoLWNv
dW50IiwgdGVzdEZpbmRDb250cm9sbGVyTWF4TWF0Y2hDb3VudCk7CisgICAgRmluZENvbnRyb2xs
ZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwgIm5leHQiLCB0ZXN0RmluZENvbnRy
b2xsZXJOZXh0KTsKKyAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRy
b2xsZXIiLCAicHJldmlvdXMiLCB0ZXN0RmluZENvbnRyb2xsZXJQcmV2aW91cyk7CisgICAgRmlu
ZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwgImNvdW50ZWQtbWF0
Y2hlcyIsIHRlc3RGaW5kQ29udHJvbGxlckNvdW50ZWRNYXRjaGVzKTsKKyAgICBGaW5kQ29udHJv
bGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAib3B0aW9ucyIsIHRlc3RGaW5k
Q29udHJvbGxlck9wdGlvbnMpOworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaAppbmRleCBlOWQ4OTJiNTQwNTk5ZGJk
YWM3ZDM1NWIzZTIyYjdhY2I2MTZhY2Q2Li5mNDk3ZTU3YWVlYjdkOTQ3ODk4NWJkM2U1OTE4OGY4
MjkwNTc1OGE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93
ZWJraXQyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5o
CkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREb3dubG9hZC5oPgog
I2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RW51bVR5cGVzLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9X
ZWJLaXRFcnJvci5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RmluZENvbnRyb2xsZXIuaD4K
ICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFNldHRpbmdzLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9X
ZWJLaXRVUklSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRVUklSZXNwb25zZS5o
Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125622</attachid>
            <date>2012-02-06 05:18:23 -0800</date>
            <delta_ts>2012-02-07 10:41:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76070-20120206141821.patch</filename>
            <type>text/plain</type>
            <size>48166</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2Nzg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYTAxOWNhZWZlODExZjNh
NzJhZGFiZDUzZTliOTk0YTRmNGQ0OTAyNy4uMDllMzhiNjYzMWJjNjJlYzExOWUyMDIxY2FhZDk4
ZmE5YTMwYmRmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDEyLTAxLTE5ICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFtX
SzJdIEFkZCBGaW5kIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzYwNzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIHBhdGNoIGFkZHMgYSBuZXcgcHVibGljIGZpbmQgQVBJIGZvciB0aGUgR3Rr
KyBXSzIgcG9ydC4gSXQKKyAgICAgICAgZGVmaW5lcyBhIG5ldyBvYmplY3QgY2FsbGVkIFdlYktp
dEZpbmRDb250cm9sbGVyIG93bmVkIGJ5IGVhY2gKKyAgICAgICAgV2ViS2l0V2ViVmlldy4gQ2xp
ZW50cyB3aWxsIHVzZSB0aGlzIG5ldyBvYmplY3QgdG8gc2VhcmNoIHN0cmluZ3MKKyAgICAgICAg
aW4gdGhlIFdlYktpdFdlYlZpZXcuCisKKyAgICAgICAgQ2hhbmdlcyBpbmNsdWRlIGFsc28gZG9j
dW1lbnRhdGlvbiBhbmQgdW5pdCB0ZXN0cyBmb3IgdGhlIG5ldworICAgICAgICBwdWJsaWMgQVBJ
LgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0RGVmaW5lcy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZp
bmRDb250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChkaWRGaW5kU3RyaW5nKTogaW1wbGVt
ZW50YXRpb24gb2YgdGhlIFdLUGFnZSBGaW5kIGludGVyZmFjZS4KKyAgICAgICAgKGRpZEZhaWxU
b0ZpbmRTdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKGRpZENvdW50U3RyaW5nTWF0Y2hlcyk6IERp
dHRvLgorICAgICAgICAod2Via2l0X2ZpbmRfY29udHJvbGxlcl9pbml0KToKKyAgICAgICAgKGdl
dFdLUGFnZUZyb21XZWJLaXRXZWJWaWV3KToKKyAgICAgICAgKHdlYmtpdEZpbmRDb250cm9sbGVy
Q29uc3RydWN0ZWQpOgorICAgICAgICAod2Via2l0RmluZENvbnRyb2xsZXJHZXRQcm9wZXJ0eSk6
CisgICAgICAgICh3ZWJraXRGaW5kQ29udHJvbGxlclNldFByb3BlcnR5KToKKyAgICAgICAgKHdl
YmtpdEZpbmRDb250cm9sbGVyRmluYWxpemUpOgorICAgICAgICAod2Via2l0X2ZpbmRfY29udHJv
bGxlcl9jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X3Nl
YXJjaF90ZXh0KToKKyAgICAgICAgKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X29wdGlvbnMp
OgorICAgICAgICAod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfbWF4X21hdGNoX2NvdW50KToK
KyAgICAgICAgKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X3dlYl92aWV3KToKKyAgICAgICAg
KHdlYktpdEZpbmRDb250cm9sbGVyUGVyZm9ybSk6CisgICAgICAgICh3ZWJLaXRGaW5kQ29udHJv
bGxlclNldFNlYXJjaERhdGEpOgorICAgICAgICAod2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFy
Y2gpOiBhc3luY2hyb25vdXNseSBsb29rcyBmb3IgdGhlCisgICAgICAgIHNlYXJjaCBzdHJpbmcg
aW4gdGhlIFdlYktpdFdlYlZpZXcuCisgICAgICAgICh3ZWJraXRfZmluZF9jb250cm9sbGVyX3Nl
YXJjaF9maW5pc2gpOiB1bmhpZ2hsaWdodHMgdGV4dCBtYXRjaGVzLgorICAgICAgICAod2Via2l0
X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfbmV4dCk6CisgICAgICAgICh3ZWJraXRfZmluZF9jb250
cm9sbGVyX3NlYXJjaF9wcmV2aW91cyk6CisgICAgICAgICh3ZWJraXRfZmluZF9jb250cm9sbGVy
X2NvdW50X21hdGNoZXMpOiBhc3luY2hyb25vdXNseSBjb3VudHMgdGhlCisgICAgICAgIG51bWJl
ciBvZiBtYXRjaGVzIG9mIHRoZSBzZWFyY2ggc3RyaW5nIGluIHRoZSBXZWJLaXRXZWJWaWV3Lgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbmRDb250cm9sbGVyLmg6IEFkZGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdF93
ZWJfdmlld19nZXRfZmluZF9jb250cm9sbGVyKTogcmV0dXJucyB0aGUKKyAgICAgICAgV2ViS2l0
RmluZENvbnRyb2xsZXIgaW5zdGFuY2Ugb3duZWQgYnkgdGhlIFdlYktpdFdlYlZpZXcuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWw6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXM6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW06CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvVGVzdFdlYktpdEZpbmRDb250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgICh0
ZXN0RmluZENvbnRyb2xsZXJUZXh0Rm91bmQpOgorICAgICAgICAodGVzdEZpbmRDb250cm9sbGVy
VGV4dE5vdEZvdW5kKToKKyAgICAgICAgKHRlc3RGaW5kQ29udHJvbGxlck1hdGNoQ291bnQpOgor
ICAgICAgICAodGVzdEZpbmRDb250cm9sbGVyTWF4TWF0Y2hDb3VudCk6CisgICAgICAgICh0ZXN0
RmluZENvbnRyb2xsZXJOZXh0KToKKyAgICAgICAgKHRlc3RGaW5kQ29udHJvbGxlclByZXZpb3Vz
KToKKyAgICAgICAgKHRlc3RGaW5kQ29udHJvbGxlckNvdW50ZWRNYXRjaGVzKToKKyAgICAgICAg
KHRlc3RGaW5kQ29udHJvbGxlck9wdGlvbnMpOgorICAgICAgICAodGVzdEZpbmRDb250cm9sbGVy
SW5zdGFuY2UpOgorICAgICAgICAodGVzdEZpbmRDb250cm9sbGVyR2V0dGVycyk6CisgICAgICAg
IChiZWZvcmVBbGwpOgorICAgICAgICAoYWZ0ZXJBbGwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZ3RrL3dlYmtpdDIuaDoKKwogMjAxMi0wMi0wNSAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBw
bGUuY29tPgogCiAgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMDgwOTUyNT4gV2ViS2l0MuKAmXMg
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKCkgYWx3YXlz
IHJldHVybnMgdHJ1ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0g
Yi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCAxY2YxYTJkOTBlOWI2NWRkZTQ3
NGE0ZjM2ZmVjZGU3MWZmYTYxOWZmLi4yOTE5N2VmN2I0NTdkYTU3ODlhNTFhMmIxMTVlYWU4NzMw
NzQ2ZWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQpAQCAtODUsNiArODUsNyBAQCBsaWJ3ZWJraXQy
Z3RraW5jbHVkZV9IRUFERVJTID0gXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0RGVmaW5lcy5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25s
b2FkLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RXJyb3IuaCBcCisJ
JChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaW5kQ29udHJvbGxlci5oIFwKIAkk
KFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lv
bi5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvbGljeURlY2lzaW9u
LmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2V0dGluZ3MuaCBcCkBA
IC01MzQsNiArNTM1LDggQEAgbGlid2Via2l0Mmd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJT
SU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9TT1UKIAlTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdExvYWRlckNsaWVudC5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRMb2FkZXJDbGllbnQuY3BwIFwKKwlTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaW5kQ29udHJvbGxlci5oIFwKKwlTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaW5kQ29udHJvbGxlci5jcHAgXAogCVNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lv
bi5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRp
b25Qb2xpY3lEZWNpc2lvbi5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb25Qcml2YXRlLmggXApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RGVmaW5lcy5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RGVmaW5lcy5oCmluZGV4IDc5YjMzODM2MGRk
YWFhOGYwOWY2NTQ3ZjJkZjE0NThmNmYyMTkzMWQuLjg3NDU5YzE0ZjA3Y2EwN2VlZTRhMWVhZWY5
NTNmZTg0YjUwNDY0ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdERlZmluZXMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXREZWZpbmVzLmgKQEAgLTQ0LDQgKzQ0LDEwIEBACiAjICAgIGRlZmluZSBXRUJLSVRf
T0JTT0xFVEVfQVBJIFdFQktJVF9BUEkgX19hdHRyaWJ1dGVfXygoZGVwcmVjYXRlZCkpCiAjZW5k
aWYKIAordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEZpbmRDb250cm9sbGVyICAgICAgICBXZWJLaXRG
aW5kQ29udHJvbGxlcjsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRGaW5kQ29udHJvbGxlckNsYXNz
ICAgV2ViS2l0RmluZENvbnRyb2xsZXJDbGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdl
YlZpZXcgV2ViS2l0V2ViVmlldzsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3Mg
V2ViS2l0V2ViVmlld0NsYXNzOworCiAjZW5kaWYgLy8gV2ViS2l0RGVmaW5lc19oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaW5kQ29udHJvbGxl
ci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaW5kQ29udHJv
bGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNzEwZWQzZjEwYjBmNDI5YjFjZjBiYmYwODk1YjAyMDEzZjQz
N2IzZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEZpbmRDb250cm9sbGVyLmNwcApAQCAtMCwwICsxLDQ3MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldlYktpdEZpbmRDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJXZWJLaXRFbnVtVHlwZXMuaCIK
KyNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQ
cml2YXRlLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5jbHVkZSA8V2ViS2l0Mi9X
S0ZpbmRPcHRpb25zLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS1JldGFpblB0ci5oPgorI2luY2x1
ZGUgPFdlYktpdDIvV0tTdHJpbmcuaD4KKyNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgorI2lu
Y2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitlbnVtIHsKKyAgICBGT1VORF9TVFJJ
TkcsCisgICAgRkFJTEVEX1RPX0ZJTkRfU1RSSU5HLAorICAgIENPVU5URURfTUFUQ0hFUywKKwor
ICAgIExBU1RfU0lHTkFMCit9OworCitlbnVtIHsKKyAgICBQUk9QXzAsCisKKyAgICBQUk9QX1NU
UklORywKKyAgICBQUk9QX09QVElPTlMsCisgICAgUFJPUF9NQVhfTUFUQ0hfQ09VTlQsCisgICAg
UFJPUF9XRUJfVklFVworfTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBPUF9GSU5ELAorICAgIE9Q
X0NPVU5UCit9IFdlYktpdEZpbmRDb250cm9sbGVyRmluZE9wZXJhdGlvbjsKKworc3RydWN0IF9X
ZWJLaXRGaW5kQ29udHJvbGxlclByaXZhdGUgeworICAgIENTdHJpbmcgc3RyaW5nOworICAgIGd1
aW50IGZpbmRPcHRpb25zOworICAgIHVuc2lnbmVkIG1heE1hdGNoQ291bnQ7CisgICAgV2ViS2l0
V2ViVmlldyogd2ViVmlldzsKK307CisKK3N0YXRpYyBndWludCBzaWduYWxzW0xBU1RfU0lHTkFM
XSA9IHsgMCwgfTsKKworR19ERUZJTkVfVFlQRShXZWJLaXRGaW5kQ29udHJvbGxlciwgd2Via2l0
X2ZpbmRfY29udHJvbGxlciwgR19UWVBFX09CSkVDVCkKKworQ09NUElMRV9BU1NFUlRfTUFUQ0hJ
TkdfRU5VTShXRUJLSVRfRklORF9PUFRJT05TX0NBU0VfSU5TRU5TSVRJVkUsIGtXS0ZpbmRPcHRp
b25zQ2FzZUluc2Vuc2l0aXZlKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV0VCS0lU
X0ZJTkRfT1BUSU9OU19BVF9XT1JEX1NUQVJUUywga1dLRmluZE9wdGlvbnNBdFdvcmRTdGFydHMp
OworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXRUJLSVRfRklORF9PUFRJT05TX1RSRUFU
X01FRElBTF9DQVBJVEFMX0FTX1dPUkRfU1RBUlQsIGtXS0ZpbmRPcHRpb25zVHJlYXRNZWRpYWxD
YXBpdGFsQXNXb3JkU3RhcnQpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXRUJLSVRf
RklORF9PUFRJT05TX0JBQ0tXQVJEUywga1dLRmluZE9wdGlvbnNCYWNrd2FyZHMpOworQ09NUElM
RV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXRUJLSVRfRklORF9PUFRJT05TX1dSQVBfQVJPVU5ELCBr
V0tGaW5kT3B0aW9uc1dyYXBBcm91bmQpOworCitzdGF0aWMgdm9pZCBkaWRGaW5kU3RyaW5nKFdL
UGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiBzdHJpbmcsIHVuc2lnbmVkIG1hdGNoQ291bnQsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgZ19zaWduYWxfZW1pdChXRUJLSVRfRklORF9D
T05UUk9MTEVSKGNsaWVudEluZm8pLCBzaWduYWxzW0ZPVU5EX1NUUklOR10sIDAsIG1hdGNoQ291
bnQpOworfQorCitzdGF0aWMgdm9pZCBkaWRGYWlsVG9GaW5kU3RyaW5nKFdLUGFnZVJlZiBwYWdl
LCBXS1N0cmluZ1JlZiBzdHJpbmcsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgZ19z
aWduYWxfZW1pdChXRUJLSVRfRklORF9DT05UUk9MTEVSKGNsaWVudEluZm8pLCBzaWduYWxzW0ZB
SUxFRF9UT19GSU5EX1NUUklOR10sIDApOworfQorCitzdGF0aWMgdm9pZCBkaWRDb3VudFN0cmlu
Z01hdGNoZXMoV0tQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIHN0cmluZywgdW5zaWduZWQgbWF0
Y2hDb3VudCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBnX3NpZ25hbF9lbWl0KFdF
QktJVF9GSU5EX0NPTlRST0xMRVIoY2xpZW50SW5mbyksIHNpZ25hbHNbQ09VTlRFRF9NQVRDSEVT
XSwgMCwgbWF0Y2hDb3VudCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9maW5kX2NvbnRyb2xs
ZXJfaW5pdChXZWJLaXRGaW5kQ29udHJvbGxlciogZmluZENvbnRyb2xsZXIpCit7CisgICAgV2Vi
S2l0RmluZENvbnRyb2xsZXJQcml2YXRlKiBwcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklW
QVRFKGZpbmRDb250cm9sbGVyLCBXRUJLSVRfVFlQRV9GSU5EX0NPTlRST0xMRVIsIFdlYktpdEZp
bmRDb250cm9sbGVyUHJpdmF0ZSk7CisgICAgZmluZENvbnRyb2xsZXItPnByaXYgPSBwcml2Owor
ICAgIG5ldyAocHJpdikgV2ViS2l0RmluZENvbnRyb2xsZXJQcml2YXRlKCk7Cit9CisKK3N0YXRp
YyBXS1BhZ2VSZWYgaW5saW5lIGdldFdLUGFnZUZyb21XZWJLaXRXZWJWaWV3KFdlYktpdFdlYlZp
ZXcgKndlYlZpZXcpCit7CisgICAgcmV0dXJuIHRvQVBJKHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFn
ZShXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3ZWJWaWV3KSkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRGaW5kQ29udHJvbGxlckNvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJL
aXRGaW5kQ29udHJvbGxlciogZmluZENvbnRyb2xsZXIgPSBXRUJLSVRfRklORF9DT05UUk9MTEVS
KG9iamVjdCk7CisgICAgV0tQYWdlRmluZENsaWVudCB3a0ZpbmRDbGllbnQgPSB7CisgICAgICAg
IGtXS1BhZ2VGaW5kQ2xpZW50Q3VycmVudFZlcnNpb24sCisgICAgICAgIGZpbmRDb250cm9sbGVy
LCAvLyBjbGllbnRJbmZvCisgICAgICAgIGRpZEZpbmRTdHJpbmcsCisgICAgICAgIGRpZEZhaWxU
b0ZpbmRTdHJpbmcsCisgICAgICAgIGRpZENvdW50U3RyaW5nTWF0Y2hlcworICAgIH07CisKKyAg
ICBXS1BhZ2VTZXRQYWdlRmluZENsaWVudChnZXRXS1BhZ2VGcm9tV2ViS2l0V2ViVmlldyhmaW5k
Q29udHJvbGxlci0+cHJpdi0+d2ViVmlldyksICZ3a0ZpbmRDbGllbnQpOworfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRGaW5kQ29udHJvbGxlckdldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3Vp
bnQgcHJvcElkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwYXJhbVNwZWMpCit7CisgICAg
V2ViS2l0RmluZENvbnRyb2xsZXIqIGZpbmRDb250cm9sbGVyID0gV0VCS0lUX0ZJTkRfQ09OVFJP
TExFUihvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wSWQpIHsKKyAgICBjYXNlIFBST1BfU1RS
SU5HOgorICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIGZpbmRDb250cm9sbGVyLT5w
cml2LT5zdHJpbmcuZGF0YSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX09QVElP
TlM6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQodmFsdWUsIGZpbmRDb250cm9sbGVyLT5wcml2
LT5maW5kT3B0aW9ucyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NQVhfTUFUQ0hf
Q09VTlQ6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQodmFsdWUsIGZpbmRDb250cm9sbGVyLT5w
cml2LT5tYXhNYXRjaENvdW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dFQl9W
SUVXOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIGZpbmRDb250cm9sbGVyLT5w
cml2LT53ZWJWaWV3KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19P
QkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcElkLCBwYXJhbVNwZWMp
OworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0RmluZENvbnRyb2xsZXJTZXRQcm9wZXJ0
eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1Bh
cmFtU3BlYyogcGFyYW1TcGVjKQoreworICAgIFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29u
dHJvbGxlciA9IFdFQktJVF9GSU5EX0NPTlRST0xMRVIob2JqZWN0KTsKKworICAgIHN3aXRjaCAo
cHJvcElkKSB7CisgICAgY2FzZSBQUk9QX1dFQl9WSUVXOgorICAgICAgICBmaW5kQ29udHJvbGxl
ci0+cHJpdi0+d2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyhnX3ZhbHVlX2dldF9vYmplY3QodmFs
dWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FS
Tl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcElkLCBwYXJhbVNwZWMpOworICAgIH0K
K30KKworc3RhdGljIHZvaWQgd2Via2l0RmluZENvbnRyb2xsZXJGaW5hbGl6ZShHT2JqZWN0KiBv
YmplY3QpCit7CisgICAgV0VCS0lUX0ZJTkRfQ09OVFJPTExFUihvYmplY3QpLT5wcml2LT5+V2Vi
S2l0RmluZENvbnRyb2xsZXJQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2Zp
bmRfY29udHJvbGxlcl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZmluZF9jb250cm9sbGVyX2NsYXNzX2luaXQoV2ViS2l0RmluZENvbnRy
b2xsZXJDbGFzcyogZmluZENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ09iamVjdENsYXNz
ID0gR19PQkpFQ1RfQ0xBU1MoZmluZENsYXNzKTsKKworICAgIGdPYmplY3RDbGFzcy0+Y29uc3Ry
dWN0ZWQgPSB3ZWJraXRGaW5kQ29udHJvbGxlckNvbnN0cnVjdGVkOworICAgIGdPYmplY3RDbGFz
cy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0RmluZENvbnRyb2xsZXJHZXRQcm9wZXJ0eTsKKyAgICBn
T2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdEZpbmRDb250cm9sbGVyU2V0UHJvcGVy
dHk7CisgICAgZ09iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdEZpbmRDb250cm9sbGVyRmlu
YWxpemU7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZmluZENsYXNzLCBzaXplb2Yo
V2ViS2l0RmluZENvbnRyb2xsZXJQcml2YXRlKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRG
aW5kQ29udHJvbGxlcjpzdHJpbmc6CisgICAgICoKKyAgICAgKiBUaGUgdGV4dCB0byBzZWFyY2gg
Zm9yIGluIHRoZSAjV2ViS2l0V2ViVmlldy4KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KGdPYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFBST1BfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ19wYXJhbV9zcGVjX3N0cmluZygic3RyaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiU2VhcmNoIFN0cmluZyIpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJU
ZXh0IHRvIHNlYXJjaCBmb3IgaW4gdGhlIHZpZXciKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxF
KSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRGaW5kQ29udHJvbGxlcjpvcHRpb25zOgorICAg
ICAqCisgICAgICogVGhlIG9wdGlvbnMgdG8gYmUgdXNlZCBpbiB0aGUgc2VhcmNoIG9wZXJhdGlv
bi4KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdPYmplY3RD
bGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfT1BUSU9OUywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19mbGFncygi
b3B0aW9ucyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXygiU2VhcmNoIE9wdGlvbnMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJTZWFyY2ggb3B0aW9ucyB0byBiZSB1c2Vk
IGluIHRoZSBzZWFyY2ggb3BlcmF0aW9uIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1RZUEVfRklORF9PUFRJT05TLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJ
VF9GSU5EX09QVElPTlNfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIC8qKgor
ICAgICAqIFdlYktpdEZpbmRDb250cm9sbGVyOm1heC1tYXRjaC1jb3VudDoKKyAgICAgKgorICAg
ICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBtYXRjaGVzIHRvIHJlcG9ydCBmb3IgYSBnaXZlbiBz
ZWFyY2guCisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnT2Jq
ZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX01BWF9N
QVRDSF9DT1VOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1f
c3BlY191aW50KCJtYXgtbWF0Y2gtY291bnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiTWF4aW11bSBtYXRjaGVzIGNvdW50IiksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJU
aGUgbWF4aW11bSBudW1iZXIgb2YgbWF0Y2hlcyBpbiBhIGdpdmVuIHRleHQgdG8gcmVwb3J0Iiks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
LCBHX01BWFVJTlQsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIC8qKgorICAgICAq
IFdlYktpdEZpbmRDb250cm9sbGVyOndlYi12aWV3OgorICAgICAqCisgICAgICogVGhlICNXZWJL
aXRXZWJWaWV3IHRoaXMgY29udHJvbGxlciBpcyBhc3NvY2lhdGVkIHRvLgorICAgICAqLworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ09iamVjdENsYXNzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9XRUJfVklFVywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoIndlYi12aWV3IiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygi
V2ViIFZpZXciKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXygiVGhlIFdlYiBWaWV3IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZpbmQgY29u
dHJvbGxlciIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXRUJLSVRfVFlQRV9XRUJfVklFVywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+
KFdFQktJVF9QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSkpOworCisg
ICAgLyoqCisgICAgICogV2ViS2l0RmluZENvbnRyb2xsZXI6OmZvdW5kLXN0cmluZzoKKyAgICAg
KiBAZmluZF9jb250cm9sbGVyOiB0aGUgI1dlYktpdEZpbmRDb250cm9sbGVyCisgICAgICogQG1h
dGNoX2NvdW50OiB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgb2YgdGhlIHNlYXJjaCB0ZXh0CisgICAg
ICoKKyAgICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gYSBnaXZlbiBzdHJpbmcgaXMg
Zm91bmQgaW4gdGhlIHdlYgorICAgICAqIHBhZ2UgdGV4dC4gSXQgd2lsbCBiZSBpc3N1ZWQgaWYg
dGhlIHRleHQgaXMgZm91bmQKKyAgICAgKiBhc3luY2hyb25vdXNseSBhZnRlciBhIGNhbGwgdG8g
d2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2goKSwKKyAgICAgKiB3ZWJraXRfZmluZF9jb250
cm9sbGVyX3NlYXJjaF9uZXh0KCkgb3IKKyAgICAgKiB3ZWJraXRfZmluZF9jb250cm9sbGVyX3Nl
YXJjaF9wcmV2aW91cygpLgorICAgICAqLworICAgIHNpZ25hbHNbRk9VTkRfU1RSSU5HXSA9Cisg
ICAgICAgIGdfc2lnbmFsX25ldygiZm91bmQtc3RyaW5nIiwKKyAgICAgICAgICAgICAgICAgICAg
IEdfVFlQRV9GUk9NX0NMQVNTKGdPYmplY3RDbGFzcyksCisgICAgICAgICAgICAgICAgICAgICBH
X1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsCisgICAgICAg
ICAgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fVUlOVCwKKyAgICAgICAgICAg
ICAgICAgICAgIEdfVFlQRV9OT05FLCAxLCBHX1RZUEVfVUlOVCk7CisKKyAgICAvKioKKyAgICAg
KiBXZWJLaXRGaW5kQ29udHJvbGxlcjo6ZmFpbGVkLXRvLWZpbmQtc3RyaW5nOgorICAgICAqIEBm
aW5kX2NvbnRyb2xsZXI6IHRoZSAjV2ViS2l0RmluZENvbnRyb2xsZXIKKyAgICAgKgorICAgICAq
IFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgd2hlbiBhIHNlYXJjaCBvcGVyYXRpb24gZG9lcyBub3Qg
ZmluZAorICAgICAqIGFueSByZXN1bHQgZm9yIHRoZSBnaXZlbiBzdHJpbmcuIEl0IHdpbGwgYmUg
aXNzdWVkIGlmIHRoZSB0ZXh0CisgICAgICogaXMgbm90IGZvdW5kIGFzeW5jaHJvbm91c2x5IGFm
dGVyIGEgY2FsbCB0bworICAgICAqIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoKCksIHdl
YmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX25leHQoKQorICAgICAqIG9yIHdlYmtpdF9maW5k
X2NvbnRyb2xsZXJfc2VhcmNoX3ByZXZpb3VzKCkuCisgICAgICovCisgICAgc2lnbmFsc1tGQUlM
RURfVE9fRklORF9TVFJJTkddID0KKyAgICAgICAgZ19zaWduYWxfbmV3KCJmYWlsZWQtdG8tZmlu
ZC1zdHJpbmciLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1MoZ09iamVj
dENsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgIEdfU0lHTkFMX1JVTl9MQVNULAorICAgICAg
ICAgICAgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgIGdfY2Nsb3N1cmVf
bWFyc2hhbF9WT0lEX19WT0lELAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX05PTkUsIDAp
OworCisgICAgLyoqCisgICAgICogV2ViS2l0RmluZENvbnRyb2xsZXI6OmNvdW50ZWQtbWF0Y2hl
czoKKyAgICAgKiBAZmluZF9jb250cm9sbGVyOiB0aGUgI1dlYktpdEZpbmRDb250cm9sbGVyCisg
ICAgICogQG1hdGNoX2NvdW50OiB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgb2YgdGhlIHNlYXJjaCB0
ZXh0CisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gdGhlICNXZWJL
aXRGaW5kQ29udHJvbGxlciBoYXMKKyAgICAgKiBjb3VudGVkIHRoZSBudW1iZXIgb2YgbWF0Y2hl
cyBmb3IgYSBnaXZlbiBzdHJpbmcgYWZ0ZXIgYSBjYWxsCisgICAgICogdG8gd2Via2l0X2ZpbmRf
Y29udHJvbGxlcl9jb3VudF9tYXRjaGVzKCkuCisgICAgICovCisgICAgc2lnbmFsc1tDT1VOVEVE
X01BVENIRVNdID0KKyAgICAgICAgZ19zaWduYWxfbmV3KCJjb3VudGVkLW1hdGNoZXMiLAorICAg
ICAgICAgICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1MoZ09iamVjdENsYXNzKSwKKyAgICAg
ICAgICAgICAgICAgICAgIEdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAg
MCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19V
SU5ULAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX05PTkUsIDEsIEdfVFlQRV9VSU5UKTsK
K30KKworLyoqCisgKiB3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9zZWFyY2hfdGV4dDoKKyAq
IEBmaW5kX2NvbnRyb2xsZXI6IHRoZSAjV2ViS2l0RmluZENvbnRyb2xsZXIKKyAqCisgKiBHZXRz
IHRoZSBzdHJpbmcgdGhhdCBAZmluZF9jb250cm9sbGVyIGlzIGN1cnJlbnRseSBzZWFyY2hpbmcK
KyAqIGZvci4gVGhpcyBzdHJpbmcgaXMgcGFzc2VkIHRvIGVpdGhlcgorICogd2Via2l0X2ZpbmRf
Y29udHJvbGxlcl9zZWFyY2goKSBvcgorICogd2Via2l0X2ZpbmRfY29udHJvbGxlcl9jb3VudF9t
YXRjaGVzKCkuCisgKgorICogUmV0dXJuczogdGhlIHN0cmluZyB0byBsb29rIGZvciBpbiB0aGUg
I1dlYktpdFdlYlZpZXcuCisgKi8KK2NvbnN0IGNoYXIqIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJf
Z2V0X3NlYXJjaF90ZXh0KFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxlcikKK3sK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRklORF9DT05UUk9MTEVSKGZpbmRD
b250cm9sbGVyKSwgMCk7CisKKyAgICByZXR1cm4gZmluZENvbnRyb2xsZXItPnByaXYtPnN0cmlu
Zy5kYXRhKCk7Cit9CisKKy8qKgorICogd2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfb3B0aW9u
czoKKyAqIEBmaW5kX2NvbnRyb2xsZXI6IHRoZSAjV2ViS2l0RmluZENvbnRyb2xsZXIKKyAqCisg
KiBHZXRzIGEgYml0bWFzayBjb250YWluaW5nIHRoZSAjV2ViS2l0RmluZE9wdGlvbnMgYXNzb2Np
YXRlZCB3aXRoCisgKiB0aGUgY3VycmVudCBzZWFyY2guCisgKgorICogUmV0dXJuczogYSBiaXRt
YXNrIGNvbnRhaW5pbmcgdGhlICNXZWJLaXRGaW5kT3B0aW9ucyBhc3NvY2lhdGVkCisgKiB3aXRo
IHRoZSBjdXJyZW50IHNlYXJjaC4KKyAqLworZ3VpbnQgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9n
ZXRfb3B0aW9ucyhXZWJLaXRGaW5kQ29udHJvbGxlciogZmluZENvbnRyb2xsZXIpCit7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0ZJTkRfQ09OVFJPTExFUihmaW5kQ29udHJv
bGxlciksIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSk7CisKKyAgICByZXR1cm4gZmluZENvbnRy
b2xsZXItPnByaXYtPmZpbmRPcHRpb25zOworfQorCisvKioKKyAqIHdlYmtpdF9maW5kX2NvbnRy
b2xsZXJfZ2V0X21heF9tYXRjaF9jb3VudDoKKyAqIEBmaW5kX2NvbnRyb2xsZXI6IHRoZSAjV2Vi
S2l0RmluZENvbnRyb2xsZXIKKyAqCisgKiBHZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBtYXRj
aGVzIHRvIHJlcG9ydCBkdXJpbmcgYSB0ZXh0CisgKiBsb29rdXAuIFRoaXMgbnVtYmVyIGlzIHBh
c3NlZCBhcyB0aGUgbGFzdCBhcmd1bWVudCBvZgorICogd2Via2l0X2ZpbmRfY29udHJvbGxlcl9z
ZWFyY2goKSBvcgorICogd2Via2l0X2ZpbmRfY29udHJvbGxlcl9jb3VudF9tYXRjaGVzKCkuCisg
KgorICogUmV0dXJuczogdGhlIG1heGltdW0gbnVtYmVyIG9mIG1hdGNoZXMgdG8gcmVwb3J0Lgor
ICovCitndWludCB3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9tYXhfbWF0Y2hfY291bnQoV2Vi
S2l0RmluZENvbnRyb2xsZXIqIGZpbmRDb250cm9sbGVyKQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9JU19GSU5EX0NPTlRST0xMRVIoZmluZENvbnRyb2xsZXIpLCAwKTsKKwor
ICAgIHJldHVybiBmaW5kQ29udHJvbGxlci0+cHJpdi0+bWF4TWF0Y2hDb3VudDsKK30KKworLyoq
CisgKiB3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF93ZWJfdmlldzoKKyAqIEBmaW5kX2NvbnRy
b2xsZXI6IHRoZSAjV2ViS2l0RmluZENvbnRyb2xsZXIKKyAqCisgKiBHZXRzIHRoZSAjV2ViS2l0
V2ViVmlldyB0aGlzIGZpbmQgY29udHJvbGxlciBpcyBhc3NvY2lhdGVkIHRvLiBEbworICogbm90
IHVucmVmIHRoZSByZXR1cm5lZCBpbnN0YW5jZSBhcyBpdCBiZWxvbmdzIHRvIHRoZQorICogI1dl
YktpdEZpbmRDb250cm9sbGVyLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogdGhl
ICNXZWJLaXRXZWJWaWV3LgorICovCitXZWJLaXRXZWJWaWV3KiB3ZWJraXRfZmluZF9jb250cm9s
bGVyX2dldF93ZWJfdmlldyhXZWJLaXRGaW5kQ29udHJvbGxlciogZmluZENvbnRyb2xsZXIpCit7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0ZJTkRfQ09OVFJPTExFUihmaW5k
Q29udHJvbGxlciksIDApOworCisgICAgcmV0dXJuIGZpbmRDb250cm9sbGVyLT5wcml2LT53ZWJW
aWV3OworfQorCitzdGF0aWMgdm9pZCB3ZWJLaXRGaW5kQ29udHJvbGxlclBlcmZvcm0oV2ViS2l0
RmluZENvbnRyb2xsZXIqIGZpbmRDb250cm9sbGVyLCBXZWJLaXRGaW5kQ29udHJvbGxlckZpbmRP
cGVyYXRpb24gZmluZE9wZXJhdGlvbikKK3sKKyAgICBXS0ZpbmRPcHRpb25zIHdrRmluZE9wdGlv
bnMgPSBzdGF0aWNfY2FzdDxXS0ZpbmRPcHRpb25zPihmaW5kQ29udHJvbGxlci0+cHJpdi0+Zmlu
ZE9wdGlvbnMpOworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a1NlYXJjaFRleHQoQWRv
cHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZmluZENvbnRyb2xsZXItPnByaXYt
PnN0cmluZy5kYXRhKCkpKTsKKyAgICBXS1BhZ2VSZWYgd2tQYWdlID0gZ2V0V0tQYWdlRnJvbVdl
YktpdFdlYlZpZXcoZmluZENvbnRyb2xsZXItPnByaXYtPndlYlZpZXcpOworCisgICAgaWYgKGZp
bmRPcGVyYXRpb24gPT0gT1BfRklORCkgeworICAgICAgICAvLyBXZSBhbHdheXMgaGlnaGxpZ2h0
IHRleHQgbWF0Y2hlcworICAgICAgICB3a0ZpbmRPcHRpb25zID0gc3RhdGljX2Nhc3Q8V0tGaW5k
T3B0aW9ucz4oZmluZENvbnRyb2xsZXItPnByaXYtPmZpbmRPcHRpb25zIHwga1dLRmluZE9wdGlv
bnNTaG93SGlnaGxpZ2h0KTsKKyAgICAgICAgV0tQYWdlRmluZFN0cmluZyh3a1BhZ2UsIHdrU2Vh
cmNoVGV4dC5nZXQoKSwgd2tGaW5kT3B0aW9ucywgZmluZENvbnRyb2xsZXItPnByaXYtPm1heE1h
dGNoQ291bnQpOworICAgIH0gZWxzZQorICAgICAgICBXS1BhZ2VDb3VudFN0cmluZ01hdGNoZXMo
d2tQYWdlLCB3a1NlYXJjaFRleHQuZ2V0KCksIHdrRmluZE9wdGlvbnMsIGZpbmRDb250cm9sbGVy
LT5wcml2LT5tYXhNYXRjaENvdW50KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdlYktpdEZp
bmRDb250cm9sbGVyU2V0U2VhcmNoRGF0YShXZWJLaXRGaW5kQ29udHJvbGxlciogZmluZENvbnRy
b2xsZXIsIGNvbnN0IGdjaGFyKiBzZWFyY2hUZXh0LCBndWludCBmaW5kT3B0aW9ucywgZ3VpbnQg
bWF4TWF0Y2hDb3VudCkKK3sKKyAgICBmaW5kQ29udHJvbGxlci0+cHJpdi0+c3RyaW5nID0gc2Vh
cmNoVGV4dDsKKyAgICBmaW5kQ29udHJvbGxlci0+cHJpdi0+ZmluZE9wdGlvbnMgPSBmaW5kT3B0
aW9uczsKKyAgICBmaW5kQ29udHJvbGxlci0+cHJpdi0+bWF4TWF0Y2hDb3VudCA9IG1heE1hdGNo
Q291bnQ7Cit9CisKKy8qKgorICogd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2g6CisgKiBA
ZmluZF9jb250cm9sbGVyOiB0aGUgI1dlYktpdEZpbmRDb250cm9sbGVyCisgKiBAc2VhcmNoX3Rl
eHQ6IHRoZSBzdHJpbmcgdG8gbG9vayBmb3IKKyAqIEBmaW5kX29wdGlvbnM6IGEgYml0bWFzayB3
aXRoIHRoZSAjV2ViS2l0RmluZE9wdGlvbnMgdXNlZCBpbiB0aGUgc2VhcmNoCisgKiBAbWF4X21h
dGNoX2NvdW50OiB0aGUgbWF4aW11bSBudW1iZXIgb2YgbWF0Y2hlcyBhbGxvd2VkIGluIHRoZSBz
ZWFyY2gKKyAqCisgKiBMb29rcyBmb3IgQHNlYXJjaF90ZXh0IGluIHRoZSAjV2ViS2l0V2ViVmll
dyBhc3NvY2lhdGVkIHdpdGgKKyAqIEBmaW5kX2NvbnRyb2xsZXIuIFRoZSBvdXRjb21lIG9mIHRo
ZSBzZWFyY2ggd2lsbCBiZSBhc3luY2hyb25vdXNseQorICogcHJvdmlkZWQgYnkgdGhlIFdlYktp
dEZpbmRDb250cm9sbGVyOjpmb3VuZC1zdHJpbmcgYW5kCisgKiBXZWJLaXRGaW5kQ29udHJvbGxl
cjo6ZmFpbGVkLXRvLWZpbmQtc3RyaW5nLgorICoKKyAqIFRvIGxvb2sgZm9yIHRoZSBuZXh0IG9y
IHByZXZpb3VzIG9jY3VycmVuY2VzIG9mIHRoZSBzYW1lIHN0cmluZworICogd2l0aCB0aGUgc2Ft
ZSBmaW5kIG9wdGlvbnMgdXNlIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX25leHQoKQor
ICogYW5kL29yIHdlYmtpdF9maW5kX29wdGlvbnNfcHJldmlvdXMoKS4gVGhlCisgKiAjV2ViS2l0
RmluZENvbnRyb2xsZXIgd2lsbCB1c2UgdGhlIHNhbWUgc3RyaW5nIGFuZCBvcHRpb25zIGZvciB0
aGUKKyAqIGZvbGxvd2luZyBzZWFyY2hlcyB1bmxlc3MgdGhleSBhcmUgbW9kaWZpZWQgYnkgYW5v
dGhlciBjYWxsIHRvIHRoaXMKKyAqIG1ldGhvZC4KKyAqCisgKiBOb3RlIHRoYXQgaWYgdGhlIG51
bWJlciBvZiBtYXRjaGVzIGlzIGhpZ2hlciB0aGFuIEBtYXhfbWF0Y2hfY291bnQKKyAqIHRoZW4g
d2Via2l0X2ZpbmRfc3RyaW5nX2dldF9tYXRjaF9jb3VudCgpIHdpbGwgcmV0dXJuIEdfTUFYVUlO
VAorICogaW5zdGVhZCBvZiB0aGUgYWN0dWFsIG51bWJlciBvZiBtYXRjaGVzLgorICoKKyAqIFRo
aXMgZnVuY3Rpb24gd2lsbCBhbHNvIGhpZ2hsaWdoIHVwIHRvIEBtYXhfbWF0Y2hfY291bnQKKyAq
IG1hY2hlcy4gQ2FsbGVycyBzaG91bGQgY2FsbCB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJj
aF9maW5pc2goKQorICogdG8gdW5oaWdobGlnaHQgdGhlbS4KKyAqLwordm9pZCB3ZWJraXRfZmlu
ZF9jb250cm9sbGVyX3NlYXJjaChXZWJLaXRGaW5kQ29udHJvbGxlciogZmluZENvbnRyb2xsZXIs
IGNvbnN0IGdjaGFyKiBzZWFyY2hUZXh0LCBndWludCBmaW5kT3B0aW9ucywgZ3VpbnQgbWF4TWF0
Y2hDb3VudCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19GSU5EX0NPTlRST0xM
RVIoZmluZENvbnRyb2xsZXIpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlYXJjaFRleHQpOwor
CisgICAgd2ViS2l0RmluZENvbnRyb2xsZXJTZXRTZWFyY2hEYXRhKGZpbmRDb250cm9sbGVyLCBz
ZWFyY2hUZXh0LCBmaW5kT3B0aW9ucywgbWF4TWF0Y2hDb3VudCk7CisgICAgd2ViS2l0RmluZENv
bnRyb2xsZXJQZXJmb3JtKGZpbmRDb250cm9sbGVyLCBPUF9GSU5EKTsKK30KKworLyoqCisgKiB3
ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9uZXh0OgorICogQGZpbmRfY29udHJvbGxlcjog
dGhlICNXZWJLaXRGaW5kQ29udHJvbGxlcgorICoKKyAqIExvb2tzIGZvciB0aGUgbmV4dCBvY2N1
cnJlbmNlIG9mIHRoZSBzZWFyY2ggc3RyaW5nLgorICoKKyAqIENhbGxpbmcgdGhpcyBtZXRob2Qg
YmVmb3JlIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoKCkgb3IKKyAqIHdlYmtpdF9maW5k
X2NvbnRyb2xsZXJfY291bnRfbWF0Y2hlcygpIGlzIGEgcHJvZ3JhbW1pbmcgZXJyb3IuCisgKi8K
K3ZvaWQgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfbmV4dChXZWJLaXRGaW5kQ29udHJv
bGxlciogZmluZENvbnRyb2xsZXIpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNf
RklORF9DT05UUk9MTEVSKGZpbmRDb250cm9sbGVyKSk7CisKKyAgICBmaW5kQ29udHJvbGxlci0+
cHJpdi0+ZmluZE9wdGlvbnMgPSBmaW5kQ29udHJvbGxlci0+cHJpdi0+ZmluZE9wdGlvbnMgJiB+
V0VCS0lUX0ZJTkRfT1BUSU9OU19CQUNLV0FSRFM7CisgICAgd2ViS2l0RmluZENvbnRyb2xsZXJQ
ZXJmb3JtKGZpbmRDb250cm9sbGVyLCBPUF9GSU5EKTsKK30KKworLyoqCisgKiB3ZWJraXRfZmlu
ZF9jb250cm9sbGVyX3NlYXJjaF9wcmV2aW91czoKKyAqIEBmaW5kX2NvbnRyb2xsZXI6IHRoZSAj
V2ViS2l0RmluZENvbnRyb2xsZXIKKyAqCisgKiBMb29rcyBmb3IgdGhlIHByZXZpb3VzIG9jY3Vy
cmVuY2Ugb2YgdGhlIHNlYXJjaCB0ZXh0LgorICoKKyAqIENhbGxpbmcgdGhpcyBtZXRob2QgYmVm
b3JlIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoKCkgb3IKKyAqIHdlYmtpdF9maW5kX2Nv
bnRyb2xsZXJfY291bnRfbWF0Y2hlcygpIGlzIGEgcHJvZ3JhbW1pbmcgZXJyb3IuCisgKi8KK3Zv
aWQgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfcHJldmlvdXMoV2ViS2l0RmluZENvbnRy
b2xsZXIqIGZpbmRDb250cm9sbGVyKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lT
X0ZJTkRfQ09OVFJPTExFUihmaW5kQ29udHJvbGxlcikpOworCisgICAgZmluZENvbnRyb2xsZXIt
PnByaXYtPmZpbmRPcHRpb25zID0gZmluZENvbnRyb2xsZXItPnByaXYtPmZpbmRPcHRpb25zIHwg
V0VCS0lUX0ZJTkRfT1BUSU9OU19CQUNLV0FSRFM7CisgICAgd2ViS2l0RmluZENvbnRyb2xsZXJQ
ZXJmb3JtKGZpbmRDb250cm9sbGVyLCBPUF9GSU5EKTsKK30KKworLyoqCisgKiB3ZWJraXRfZmlu
ZF9jb250cm9sbGVyX2NvdW50X21hdGNoZXM6CisgKiBAZmluZF9jb250cm9sbGVyOiB0aGUgI1dl
YktpdEZpbmRDb250cm9sbGVyCisgKiBAc2VhcmNoX3RleHQ6IHRoZSBzdHJpbmcgdG8gbG9vayBm
b3IKKyAqIEBmaW5kX29wdGlvbnM6IGEgYml0bWFzayB3aXRoIHRoZSAjV2ViS2l0RmluZE9wdGlv
bnMgdXNlZCBpbiB0aGUgc2VhcmNoCisgKiBAbWF4X21hdGNoX2NvdW50OiB0aGUgbWF4aW11bSBu
dW1iZXIgb2YgbWF0Y2hlcyBhbGxvd2VkIGluIHRoZSBzZWFyY2gKKyAqCisgKiBDb3VudHMgdGhl
IG51bWJlciBvZiBtYXRjaGVzIGZvciBAc2VhcmNoX3RleHQgZm91bmQgaW4gdGhlCisgKiAjV2Vi
S2l0V2ViVmlldyB3aXRoIHRoZSBwcm92aWRlZCBAZmluZF9vcHRpb25zLiBUaGUgbnVtYmVyIG9m
CisgKiBtYXRjaGVzIHdpbGwgYmUgcHJvdmlkZWQgYnkgdGhlCisgKiBXZWJLaXRGaW5kQ29udHJv
bGxlcjo6Y291bnRlZC1tYXRjaGVzIHNpZ25hbC4KKyAqLwordm9pZCB3ZWJraXRfZmluZF9jb250
cm9sbGVyX2NvdW50X21hdGNoZXMoV2ViS2l0RmluZENvbnRyb2xsZXIqIGZpbmRDb250cm9sbGVy
LCBjb25zdCBnY2hhciogc2VhcmNoVGV4dCwgZ3VpbnQgZmluZE9wdGlvbnMsIGd1aW50IG1heE1h
dGNoQ291bnQpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfRklORF9DT05UUk9M
TEVSKGZpbmRDb250cm9sbGVyKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChzZWFyY2hUZXh0KTsK
KworICAgIHdlYktpdEZpbmRDb250cm9sbGVyU2V0U2VhcmNoRGF0YShmaW5kQ29udHJvbGxlciwg
c2VhcmNoVGV4dCwgZmluZE9wdGlvbnMsIG1heE1hdGNoQ291bnQpOworICAgIHdlYktpdEZpbmRD
b250cm9sbGVyUGVyZm9ybShmaW5kQ29udHJvbGxlciwgT1BfQ09VTlQpOworfQorCisvKioKKyAq
IHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX2ZpbmlzaDoKKyAqIEBmaW5kX2NvbnRyb2xs
ZXI6IGEgI1dlYktpdEZpbmRDb250cm9sbGVyCisgKgorICogRmluaXNoZXMgYSBmaW5kIG9wZXJh
dGlvbiBzdGFydGVkIGJ5CisgKiB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaCgpLiBJdCB3
aWxsIGJhc2ljYWxseSB1bmhpZ2hsaWdodAorICogZXZlcnkgdGV4dCBtYXRjaCBmb3VuZC4KKyAq
Ki8KK3ZvaWQgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfZmluaXNoKFdlYktpdEZpbmRD
b250cm9sbGVyICpmaW5kQ29udHJvbGxlcikKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9JU19GSU5EX0NPTlRST0xMRVIoZmluZENvbnRyb2xsZXIpKTsKKworICAgIFdLUGFnZUhpZGVG
aW5kVUkoZ2V0V0tQYWdlRnJvbVdlYktpdFdlYlZpZXcoZmluZENvbnRyb2xsZXItPnByaXYtPndl
YlZpZXcpKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEZpbmRDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRGaW5kQ29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFkNDQ3MTk3OGQ2NGQ3ZmQxYjE3
ZGNjZTVjNWEwYTViM2M0ZTA3ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaW5kQ29udHJvbGxlci5oCkBAIC0wLDAgKzEsMTA5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19X
RUJLSVQyX0hfSU5TSURFX18pICYmICFkZWZpbmVkKFdFQktJVDJfQ09NUElMQVRJT04pCisjZXJy
b3IgIk9ubHkgPHdlYmtpdDIvd2Via2l0Mi5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgor
I2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RmluZENvbnRyb2xsZXJfaAorI2RlZmluZSBXZWJLaXRG
aW5kQ29udHJvbGxlcl9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdl
YmtpdDIvV2ViS2l0V2ViVmlldy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lU
X1RZUEVfRklORF9DT05UUk9MTEVSICAgICAgICAgICAgKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJf
Z2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0ZJTkRfQ09OVFJPTExFUihvYmopICAgICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9GSU5EX0NP
TlRST0xMRVIsIFdlYktpdEZpbmRDb250cm9sbGVyKSkKKyNkZWZpbmUgV0VCS0lUX0ZJTkRfQ09O
VFJPTExFUl9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyks
ICBXRUJLSVRfVFlQRV9GSU5EX0NPTlRST0xMRVIsIFdlYktpdEZpbmRDb250cm9sbGVyQ2xhc3Mp
KQorI2RlZmluZSBXRUJLSVRfSVNfRklORF9DT05UUk9MTEVSKG9iaikgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX0ZJTkRfQ09OVFJPTExFUikp
CisjZGVmaW5lIFdFQktJVF9JU19GSU5EX0NPTlRST0xMRVJfQ0xBU1Moa2xhc3MpIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfRklORF9DT05UUk9MTEVSKSkK
KyNkZWZpbmUgV0VCS0lUX0ZJTkRfQ09OVFJPTExFUl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9J
TlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9GSU5EX0NPTlRST0xMRVIsIFdl
YktpdEZpbmRDb250cm9sbGVyQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0RmluZENv
bnRyb2xsZXJQcml2YXRlIFdlYktpdEZpbmRDb250cm9sbGVyUHJpdmF0ZTsKKworLyoqCisgKiBX
ZWJLaXRGaW5kT3B0aW9uczoKKyAqIEBXRUJLSVRfRklORF9PUFRJT05TX05PTkU6IG5vIHNlYXJj
aCBmbGFncywgdGhpcyBtZWFucyBhIGNhc2Ugc2Vuc2l0aXZlLCBubyB3cmFwLCBmb3J3YXJkIG9u
bHkgc2VhcmNoCisgKiBAV0VCS0lUX0ZJTkRfT1BUSU9OU19DQVNFX0lOU0VOU0lUSVZFOiBjYXNl
IGluc2Vuc2l0aXZlIHNlYXJjaAorICogQFdFQktJVF9GSU5EX09QVElPTlNfQVRfV09SRF9TVEFS
VFM6IHNlYXJjaCBvbmx5IGF0IHRoZSBiZWdpbmluZyBvZiB0aGUgd29yZHMKKyAqIEBXRUJLSVRf
RklORF9PUFRJT05TX1RSRUFUX01FRElBTF9DQVBJVEFMX0FTX1dPUkRfU1RBUlQ6IHRyZWF0IGNh
cGl0YWwgbGV0dGVycyBpbiB0aGUgbWlkZGxlIG9mIHdvcmRzIGFzIHdvcmQgc3RhcnQKKyAqIEBX
RUJLSVRfRklORF9PUFRJT05TX0JBQ0tXQVJEUzogc2VhcmNoIGJhY2t3YXJkcworICogQFdFQktJ
VF9GSU5EX09QVElPTlNfV1JBUF9BUk9VTkQ6IGlmIG5vdCBwcmVzZW50IHNlYXJjaCB3aWxsIHN0
b3AgYXQgdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQKKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgV0VC
S0lUX0ZJTkRfT1BUSU9OU19OT05FLAorCisgIFdFQktJVF9GSU5EX09QVElPTlNfQ0FTRV9JTlNF
TlNJVElWRSA9ICAgICAgICAgICAgICAgICAgIDEgPDwgMCwKKyAgV0VCS0lUX0ZJTkRfT1BUSU9O
U19BVF9XT1JEX1NUQVJUUyA9ICAgICAgICAgICAgICAgICAgICAgMSA8PCAxLAorICBXRUJLSVRf
RklORF9PUFRJT05TX1RSRUFUX01FRElBTF9DQVBJVEFMX0FTX1dPUkRfU1RBUlQgPSAxIDw8IDIs
CisgIFdFQktJVF9GSU5EX09QVElPTlNfQkFDS1dBUkRTID0gICAgICAgICAgICAgICAgICAgICAg
ICAgIDEgPDwgMywKKyAgV0VCS0lUX0ZJTkRfT1BUSU9OU19XUkFQX0FST1VORCA9ICAgICAgICAg
ICAgICAgICAgICAgICAgMSA8PCA0LAorfSBXZWJLaXRGaW5kT3B0aW9uczsKKworc3RydWN0IF9X
ZWJLaXRGaW5kQ29udHJvbGxlciB7CisgICAgR09iamVjdCBwYXJlbnQ7CisKKyAgLyo8IHByaXZh
dGUgPiovCisgIFdlYktpdEZpbmRDb250cm9sbGVyUHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVj
dCBfV2ViS2l0RmluZENvbnRyb2xsZXJDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9j
bGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0
X3R5cGUgICAgICAgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2ZpbmRf
Y29udHJvbGxlcl9zZWFyY2ggICAgICAgICAgICAgIChXZWJLaXRGaW5kQ29udHJvbGxlciAqZmlu
ZF9jb250cm9sbGVyLAorCQkJCQkgICAgY29uc3QgZ2NoYXIgICAgICAgICAgKnNlYXJjaF90ZXh0
LAorCQkJCQkgICAgZ3VpbnQgICAgICAgICAgICAgICAgIGZpbmRfb3B0aW9ucywKKwkJCQkJICAg
IGd1aW50ICAgICAgICAgICAgICAgICBtYXhfbWF0Y2hfY291bnQpOworCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX2ZpbmlzaCAgICAgICAoV2ViS2l0Rmlu
ZENvbnRyb2xsZXIgKmZpbmRfY29udHJvbGxlcik7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfbmV4dCAgICAgICAgIChXZWJLaXRGaW5kQ29udHJvbGxl
ciAqZmluZF9jb250cm9sbGVyKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZmluZF9jb250
cm9sbGVyX3NlYXJjaF9wcmV2aW91cyAgICAgKFdlYktpdEZpbmRDb250cm9sbGVyICpmaW5kX2Nv
bnRyb2xsZXIpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfY291
bnRfbWF0Y2hlcyAgICAgICAoV2ViS2l0RmluZENvbnRyb2xsZXIgKmZpbmRfY29udHJvbGxlciwK
KwkJCQkJICAgIGNvbnN0IGdjaGFyICAgICAgICAgICpzZWFyY2hfdGV4dCwKKwkJCQkJICAgIGd1
aW50ICAgICAgICAgICAgICAgICBmaW5kX29wdGlvbnMsCisJCQkJCSAgICBndWludCAgICAgICAg
ICAgICAgICAgbWF4X21hdGNoX2NvdW50KTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCit3
ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9zZWFyY2hfdGV4dCAgICAgKFdlYktpdEZpbmRDb250
cm9sbGVyICpmaW5kX2NvbnRyb2xsZXIpOworCitXRUJLSVRfQVBJIGd1aW50Cit3ZWJraXRfZmlu
ZF9jb250cm9sbGVyX2dldF9vcHRpb25zICAgICAgICAgKFdlYktpdEZpbmRDb250cm9sbGVyICpm
aW5kX2NvbnRyb2xsZXIpOworCitXRUJLSVRfQVBJIGd1aW50Cit3ZWJraXRfZmluZF9jb250cm9s
bGVyX2dldF9tYXhfbWF0Y2hfY291bnQgKFdlYktpdEZpbmRDb250cm9sbGVyICpmaW5kX2NvbnRy
b2xsZXIpOworCitXRUJLSVRfQVBJIFdlYktpdFdlYlZpZXcgKgord2Via2l0X2ZpbmRfY29udHJv
bGxlcl9nZXRfd2ViX3ZpZXcgICAgICAgIChXZWJLaXRGaW5kQ29udHJvbGxlciAqZmluZF9jb250
cm9sbGVyKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCmluZGV4IGZjYWEyZGIxZDExNDY2
MjVlZWJjNmNiOWUxYmUzMDBhMTIzM2U3ZmMuLjZhN2RjODAwNzc5ZjFmMjZhNGMwNmUxYTljOGY0
NGQ0NDBiNjJhODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXcuY3BwCkBAIC04Myw2ICs4Myw3IEBAIHN0cnVjdCBfV2ViS2l0V2ViVmll
d1ByaXZhdGUgewogICAgIEdSZWZQdHI8V2ViS2l0QmFja0ZvcndhcmRMaXN0PiBiYWNrRm9yd2Fy
ZExpc3Q7CiAgICAgR1JlZlB0cjxXZWJLaXRTZXR0aW5ncz4gc2V0dGluZ3M7CiAgICAgR1JlZlB0
cjxXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzPiB3aW5kb3dQcm9wZXJ0aWVzOworICAgIEdSZWZQdHI8
V2ViS2l0RmluZENvbnRyb2xsZXI+IGZpbmRDb250cm9sbGVyOwogfTsKIAogc3RhdGljIGd1aW50
IHNpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OwpAQCAtMTI2NywzICsxMjY4LDIzIEBAIGdk
b3VibGUgd2Via2l0X3dlYl92aWV3X2dldF96b29tX2xldmVsKFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcpCiAgICAgV0tQYWdlUmVmIHdrUGFnZSA9IHRvQVBJKHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFn
ZShXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3ZWJWaWV3KSkpOwogICAgIHJldHVybiBXS1BhZ2VHZXRQ
YWdlWm9vbUZhY3Rvcih3a1BhZ2UpOwogfQorCisvKioKKyAqIHdlYmtpdF93ZWJfdmlld19nZXRf
ZmluZF9jb250cm9sbGVyOgorICogQHdlYl92aWV3OiB0aGUgI1dlYktpdFdlYlZpZXcKKyAqCisg
KiBHZXRzIHRoZSAjV2ViS2l0RmluZENvbnRyb2xsZXIgdGhhdCB3aWxsIGFsbG93IHRoZSBjYWxs
ZXIgdG8gcXVlcnkKKyAqIHRoZSAjV2ViS2l0V2ViVmlldyBmb3IgdGhlIHRleHQgdG8gbG9vayBm
b3IuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiB0aGUgI1dlYktpdEZpbmRDb250
cm9sbGVyIGFzc29jaWF0ZWQgdG8KKyAqIHRoaXMgcGFydGljdWxhciAjV2ViS2l0V2ViVmlldy4K
KyAqLworV2ViS2l0RmluZENvbnRyb2xsZXIqIHdlYmtpdF93ZWJfdmlld19nZXRfZmluZF9jb250
cm9sbGVyKFdlYktpdFdlYlZpZXcgKndlYlZpZXcpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCAwKTsKKworICAgIGlmICghd2ViVmlldy0+
cHJpdi0+ZmluZENvbnRyb2xsZXIpCisgICAgICAgIHdlYlZpZXctPnByaXYtPmZpbmRDb250cm9s
bGVyID0gYWRvcHRHUmVmKFdFQktJVF9GSU5EX0NPTlRST0xMRVIoZ19vYmplY3RfbmV3KFdFQktJ
VF9UWVBFX0ZJTkRfQ09OVFJPTExFUiwgIndlYi12aWV3Iiwgd2ViVmlldywgTlVMTCkpKTsKKwor
ICAgIHJldHVybiB3ZWJWaWV3LT5wcml2LT5maW5kQ29udHJvbGxlci5nZXQoKTsKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaAppbmRleCA2
OTdmY2RjODBlNjA5M2JkYmZkNGIxMWMzZWRhNTI5N2M2NDU1Y2IwLi5kOGMzY2E5YThjNWY1ZjQx
YTViMjlhZTQxYjNmMTgwYzg2ZThkZmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRl
IDx3ZWJraXQyL1dlYktpdEJhY2tGb3J3YXJkTGlzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2Vi
S2l0RGVmaW5lcy5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RmluZENvbnRyb2xsZXIuaD4K
ICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYkNvbnRleHQuaD4KICNpbmNsdWRlIDx3ZWJraXQy
L1dlYktpdFNldHRpbmdzLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRVUklSZXF1ZXN0Lmg+
CkBAIC04MCw4ICs4MSw2IEBAIHR5cGVkZWYgZW51bSB7CiAjZGVmaW5lIFdFQktJVF9JU19XRUJf
VklFV19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJL
SVRfVFlQRV9XRUJfVklFVykpCiAjZGVmaW5lIFdFQktJVF9XRUJfVklFV19HRVRfQ0xBU1Mob2Jq
KSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9XRUJfVklF
VywgV2ViS2l0V2ViVmlld0NsYXNzKSkKIAotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXcg
V2ViS2l0V2ViVmlldzsKLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3MgV2ViS2l0
V2ViVmlld0NsYXNzOwogdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdQcml2YXRlIFdlYktp
dFdlYlZpZXdQcml2YXRlOwogCiAvKioKQEAgLTI0NSw2ICsyNDQsOSBAQCB3ZWJraXRfd2ViX3Zp
ZXdfc2V0X3pvb21fbGV2ZWwgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAg
ICAqd2ViX3ZpZQogV0VCS0lUX0FQSSBnZG91YmxlCiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3pvb21f
bGV2ZWwgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcp
OwogCitXRUJLSVRfQVBJIFdlYktpdEZpbmRDb250cm9sbGVyICoKK3dlYmtpdF93ZWJfdmlld19n
ZXRfZmluZF9jb250cm9sbGVyICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3
ZWJfdmlldyk7CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKaW5k
ZXggYzZmOTQzYWIyYTY4ODAyOWQ5NTZlYmI2ODUwZmVjYjFmMjRjMjBhMS4uZTE2MmYxZWRiZjE3
YjM3NmZmZWEyYzdjNjhiZGQ4ODIxOTYyN2EzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sCkBAIC0y
NCw2ICsyNCw3IEBACiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdFBvbGljeURlY2lz
aW9uLnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXROYXZpZ2F0aW9uUG9s
aWN5RGVjaXNpb24ueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdEVycm9y
LnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRGaW5kQ29udHJvbGxlci54
bWwiLz4KICAgPC9jaGFwdGVyPgogCiAgIDxpbmRleCBpZD0iaW5kZXgtYWxsIj4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0
aW9ucy50eHQgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJn
dGstc2VjdGlvbnMudHh0CmluZGV4IGVmNDRiMmJlZDY3YzY0MWM3MGY1YTQ4ZWQ4NGE3OTI4MDBl
MGI1YWYuLjNmMWY0NWVkODQ2MDg5NmI3NGYyM2U4OTUyMDNjMjM2YTBmYmIyNjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0
aW9ucy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJr
aXQyZ3RrLXNlY3Rpb25zLnR4dApAQCAtNzYsNiArNzYsNyBAQCB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X3NldHRpbmdzCiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVzCiB3ZWJraXRf
d2ViX3ZpZXdfc2V0X3pvb21fbGV2ZWwKIHdlYmtpdF93ZWJfdmlld19nZXRfem9vbV9sZXZlbAor
d2Via2l0X3dlYl92aWV3X2dldF9maW5kX2NvbnRyb2xsZXIKIAogPFNVQlNFQ1RJT04gU3RhbmRh
cmQ+CiBXZWJLaXRXZWJWaWV3Q2xhc3MKQEAgLTM3MywzICszNzQsMzAgQEAgd2Via2l0X3BvbGlj
eV9lcnJvcl9xdWFyawogd2Via2l0X2Rvd25sb2FkX2Vycm9yX3F1YXJrCiA8L1NFQ1RJT04+CiAK
KzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0RmluZENvbnRyb2xsZXI8L0ZJTEU+CitXZWJLaXRGaW5k
Q29udHJvbGxlcgorV2ViS2l0RmluZE9wdGlvbnMKK3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2Vh
cmNoCit3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9maW5pc2gKK3dlYmtpdF9maW5kX2Nv
bnRyb2xsZXJfc2VhcmNoX25leHQKK3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX3ByZXZp
b3VzCit3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9zZWFyY2hfdGV4dAord2Via2l0X2ZpbmRf
Y29udHJvbGxlcl9jb3VudF9tYXRjaGVzCit3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9vcHRp
b25zCit3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9tYXhfbWF0Y2hfY291bnQKK3dlYmtpdF9m
aW5kX2NvbnRyb2xsZXJfZ2V0X3dlYl92aWV3CisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2Vi
S2l0RmluZENvbnRyb2xsZXJDbGFzcworV0VCS0lUX1RZUEVfRklORF9DT05UUk9MTEVSCitXRUJL
SVRfRklORF9DT05UUk9MTEVSCitXRUJLSVRfSVNfRklORF9DT05UUk9MTEVSCitXRUJLSVRfRklO
RF9DT05UUk9MTEVSX0NMQVNTCitXRUJLSVRfSVNfRklORF9DT05UUk9MTEVSX0NMQVNTCitXRUJL
SVRfRklORF9DT05UUk9MTEVSX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgorV2Vi
S2l0RmluZENvbnRyb2xsZXJQcml2YXRlCit3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF90eXBl
Cis8L1NFQ1RJT04+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9kb2NzL3dlYmtpdDJndGsudHlwZXMgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9kb2NzL3dlYmtpdDJndGsudHlwZXMKaW5kZXggY2JhMmRmNDJjM2Q1MjQ0MzA1ZWVlNDYxNmI5
ZTc4MzVhZmQxZjYyZi4uMmUwZjUwMDJjYWU3M2I4MjU5NjQ2OGRlMWFmNjcwYWQ3NTkxNWQ3NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQy
Z3RrLnR5cGVzCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Vi
a2l0Mmd0ay50eXBlcwpAQCAtOSw0ICs5LDQgQEAgd2Via2l0X3VyaV9yZXNwb25zZV9nZXRfdHlw
ZQogd2Via2l0X3VyaV9yZXF1ZXN0X2dldF90eXBlCiB3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNf
Z2V0X3R5cGUKIHdlYmtpdF9kb3dubG9hZF9nZXRfdHlwZQotCit3ZWJraXRfZmluZF9jb250cm9s
bGVyX2dldF90eXBlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3Rlc3RzL0dOVW1ha2VmaWxlLmFtCmluZGV4IDE3NWExNDllNDM0NjQ3NjAzOGEzZjExMGZmZjI3
Y2Q3YmE1NjBlYzQuLmM4NDhkNDk2M2FlZGM1NWIxMTU5MDRlMDAyNDllOGU5YTgyZTVlYmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2Vm
aWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1h
a2VmaWxlLmFtCkBAIC0xLDExICsxLDEyIEBACiBURVNUX1BST0dTICs9IFwKLQlQcm9ncmFtcy9X
ZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFdlYkNvbnRleHQgXAotCVByb2dyYW1zL1dlYktpdDJB
UElUZXN0cy9UZXN0V2ViS2l0V2ViVmlldyBcCi0JUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rl
c3RMb2FkZXJDbGllbnQgXAotCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0V2ViS2l0U2V0
dGluZ3MgXAogCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0QmFja0ZvcndhcmRMaXN0IFwK
IAlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdERvd25sb2FkcyBcCi0JUHJvZ3JhbXMvV2Vi
S2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRQb2xpY3lDbGllbnQKKwlQcm9ncmFtcy9XZWJLaXQyQVBJ
VGVzdHMvVGVzdExvYWRlckNsaWVudCBcCisJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RX
ZWJLaXRGaW5kQ29udHJvbGxlciBcCisJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJL
aXRQb2xpY3lDbGllbnQgXAorCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0V2ViS2l0U2V0
dGluZ3MgXAorCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0V2ViS2l0V2ViQ29udGV4dCBc
CisJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3CiAKIG5vaW5zdF9Q
Uk9HUkFNUyArPSAkKFRFU1RfUFJPR1MpCiAKQEAgLTExMSwzICsxMTIsOSBAQCBQcm9ncmFtc19X
ZWJLaXQyQVBJVGVzdHNfVGVzdERvd25sb2Fkc19TT1VSQ0VTID0gXAogUHJvZ3JhbXNfV2ViS2l0
MkFQSVRlc3RzX1Rlc3REb3dubG9hZHNfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxh
Z3MpCiBQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdERvd25sb2Fkc19MREFERCA9ICQod2Vi
a2l0Ml90ZXN0c19sZGFkZCkKIFByb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0RG93bmxvYWRz
X0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKKworUHJvZ3JhbXNfV2ViS2l0MkFQ
SVRlc3RzX1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlcl9TT1VSQ0VTID0gXAorCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlci5jcHAK
K1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViS2l0RmluZENvbnRyb2xsZXJfQ1BQRkxB
R1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNf
VGVzdFdlYktpdEZpbmRDb250cm9sbGVyX0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQor
UHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlcl9MREZMQUdT
ID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0RmluZENvbnRyb2xsZXIuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEZpbmRDb250cm9s
bGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5mMmI2YTkwZThkZjE4NWVlNTIxMTIxYmJiZmY2YzU0MzAyY2Zj
ZDZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvVGVzdFdlYktpdEZpbmRDb250cm9sbGVyLmNwcApAQCAtMCwwICsxLDMwNiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaW5jbHVkZSAiTG9hZFRyYWNraW5nVGVzdC5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNp
bmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRy
Lmg+CisKK3N0YXRpYyBjb25zdCBjaGFyKiB0ZXN0U3RyaW5nID0gIjxodG1sPjxib2R5PmZpcnN0
IHRlc3Rpbmcgc2Vjb25kIHRlc3Rpbmcgc2Vjb25kSGFsZjwvYm9keT48L2h0bWw+IjsKKworY2xh
c3MgRmluZENvbnRyb2xsZXJUZXN0OiBwdWJsaWMgTG9hZFRyYWNraW5nVGVzdCB7CitwdWJsaWM6
CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShGaW5kQ29udHJvbGxlclRlc3QpOworCisgICAg
RmluZENvbnRyb2xsZXJUZXN0KCkKKyAgICAgICAgOiBtX3J1bkZpbmRVbnRpbENvbXBsZXRpb24o
ZmFsc2UpLAorICAgICAgICAgIG1fZmluZENvbnRyb2xsZXIod2Via2l0X3dlYl92aWV3X2dldF9m
aW5kX2NvbnRyb2xsZXIobV93ZWJWaWV3KSkKKyAgICB7CisgICAgICAgIGFzc2VydE9iamVjdElz
RGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QobV9maW5kQ29udHJvbGxlci5nZXQoKSkp
OworICAgIH0KKworICAgIH5GaW5kQ29udHJvbGxlclRlc3QoKQorICAgIHsKKyAgICAgICAgaWYg
KG1fZmluZENvbnRyb2xsZXIpCisgICAgICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25u
ZWN0X21hdGNoZWQobV9maW5kQ29udHJvbGxlci5nZXQoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwg
MCwgMCwgMCwgMCwgdGhpcyk7CisgICAgfQorCisgICAgdm9pZCBmaW5kKGNvbnN0IGNoYXIqIHNl
YXJjaFN0cmluZywgZ3VpbnQgZmluZE9wdGlvbnMsIGd1aW50IG1heE1hdGNoQ291bnQpCisgICAg
eworICAgICAgICAvLyBEdWUgdG8gaHR0cDovL3dlYmtpdC5vcmcvYi83NjUyMiB3ZSBoYXZlIHRv
IGFydGlmaWNpYWxseQorICAgICAgICAvLyBhZGQgaGVyZSB0aGUgc2hvdyBvdmVybGF5IG9wdGlv
biAodGhhdCB3ZSBkbyBub3QgZXZlbgorICAgICAgICAvLyBleHBvc2UgaW4gdGhlIEFQSSkgdG8g
Z2V0IHRoZSBEaWRGaW5kU3RyaW5nIGZ1bmN0aW9uCisgICAgICAgIC8vIGNhbGxlZC4gV2lsbCBy
ZW1vdmUgdGhpcyBvbmNlIHRoYXQgYnVnIGlzIGZpeGVkLgorICAgICAgICBmaW5kT3B0aW9ucyA9
IGZpbmRPcHRpb25zIHwgMSA8PCA1OworCisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9maW5k
Q29udHJvbGxlci5nZXQoKSwgImZvdW5kLXN0cmluZyIsIEdfQ0FMTEJBQ0soZm91bmRTdHJpbmdD
YWxsYmFjayksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fZmluZENvbnRyb2xs
ZXIuZ2V0KCksICJmYWlsZWQtdG8tZmluZC1zdHJpbmciLCBHX0NBTExCQUNLKGZhaWxlZFRvRmlu
ZFN0cmluZ0NhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJf
c2VhcmNoKG1fZmluZENvbnRyb2xsZXIuZ2V0KCksIHNlYXJjaFN0cmluZywgZmluZE9wdGlvbnMs
IG1heE1hdGNoQ291bnQpOworICAgIH0KKworICAgIHZvaWQgY291bnQoY29uc3QgY2hhciogc2Vh
cmNoU3RyaW5nLCBndWludCBmaW5kT3B0aW9ucywgZ3VpbnQgbWF4TWF0Y2hDb3VudCkKKyAgICB7
CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9maW5kQ29udHJvbGxlci5nZXQoKSwgImNvdW50
ZWQtbWF0Y2hlcyIsIEdfQ0FMTEJBQ0soY291bnRlZE1hdGNoZXNDYWxsYmFjayksIHRoaXMpOwor
ICAgICAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX2NvdW50X21hdGNoZXMobV9maW5kQ29udHJv
bGxlci5nZXQoKSwgc2VhcmNoU3RyaW5nLCBmaW5kT3B0aW9ucywgbWF4TWF0Y2hDb3VudCk7Cisg
ICAgfQorCisgICAgdm9pZCB3YWl0VW50aWxGaW5kRmluaXNoZWQoKQorICAgIHsKKyAgICAgICAg
bV9ydW5GaW5kVW50aWxDb21wbGV0aW9uID0gdHJ1ZTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVu
KG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIEdSZWZQdHI8V2ViS2l0RmluZENvbnRyb2xsZXI+
IG1fZmluZENvbnRyb2xsZXI7CisgICAgYm9vbCBtX3RleHRGb3VuZDsKKyAgICB1bnNpZ25lZCBt
X21hdGNoQ291bnQ7CisKK3ByaXZhdGU6CisgICAgYm9vbCBtX3J1bkZpbmRVbnRpbENvbXBsZXRp
b247CisKKyAgICBzdGF0aWMgdm9pZCBmb3VuZFN0cmluZ0NhbGxiYWNrKFdlYktpdEZpbmRDb250
cm9sbGVyKiwgZ3VpbnQgbWF0Y2hDb3VudCwgRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0KQorICAg
IHsKKyAgICAgICAgdGVzdC0+bV90ZXh0Rm91bmQgPSB0cnVlOworICAgICAgICB0ZXN0LT5tX21h
dGNoQ291bnQgPSBtYXRjaENvdW50OworICAgICAgICBpZiAodGVzdC0+bV9ydW5GaW5kVW50aWxD
b21wbGV0aW9uKQorICAgICAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29w
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBmYWlsZWRUb0ZpbmRTdHJpbmdDYWxsYmFjayhX
ZWJLaXRGaW5kQ29udHJvbGxlciosIEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCkKKyAgICB7Cisg
ICAgICAgIHRlc3QtPm1fdGV4dEZvdW5kID0gZmFsc2U7CisgICAgICAgIGlmICh0ZXN0LT5tX3J1
bkZpbmRVbnRpbENvbXBsZXRpb24pCisgICAgICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3Qt
Pm1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGNvdW50ZWRNYXRjaGVzQ2Fs
bGJhY2soV2ViS2l0RmluZENvbnRyb2xsZXIqLCBndWludCBtYXRjaENvdW50LCBGaW5kQ29udHJv
bGxlclRlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5tX21hdGNoQ291bnQgPSBtYXRj
aENvdW50OworICAgICAgICBpZiAodGVzdC0+bV9ydW5GaW5kVW50aWxDb21wbGV0aW9uKQorICAg
ICAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9Cit9Owor
CitzdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJUZXh0Rm91bmQoRmluZENvbnRyb2xsZXJU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RTdHJp
bmcsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+
ZmluZCgidGVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMSk7CisgICAgdGVzdC0+
d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3Vu
ZCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlclRleHROb3RGb3VuZChGaW5k
Q29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0
bWwodGVzdFN0cmluZywgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisK
KyAgICB0ZXN0LT5maW5kKCJub3RGb3VuZCIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMSk7
CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCghdGVz
dC0+bV90ZXh0Rm91bmQpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJNYXRj
aENvdW50KEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0
ZXN0LT5sb2FkSHRtbCh0ZXN0U3RyaW5nLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmlu
aXNoZWQoKTsKKworICAgIHRlc3QtPmZpbmQoInRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05T
X05PTkUsIDIpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19h
c3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDIpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4
dEZvdW5kKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVyTWF4TWF0Y2hDb3Vu
dChGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+
bG9hZEh0bWwodGVzdFN0cmluZywgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVk
KCk7CisKKyAgICB0ZXN0LT5maW5kKCJ0ZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05F
LCAxKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0
KHRlc3QtPm1fbWF0Y2hDb3VudCA9PSBHX01BWFVJTlQpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1f
dGV4dEZvdW5kKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVyTmV4dChGaW5k
Q29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0
bWwodGVzdFN0cmluZywgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisK
KyAgICB0ZXN0LT5maW5kKCJ0ZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAyKTsK
KyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3Qt
Pm1fdGV4dEZvdW5kKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX21hdGNoQ291bnQgPT0gMik7CisK
KyAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9uZXh0KHRlc3QtPm1fZmluZENvbnRy
b2xsZXIuZ2V0KCkpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAg
Z19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hD
b3VudCA9PSAyKTsKKyAgICBnX2Fzc2VydCghKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X29w
dGlvbnModGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSkgJiBXRUJLSVRfRklORF9PUFRJT05T
X0JBQ0tXQVJEUykpOworCisgICAgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfbmV4dCh0
ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmlu
aXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX3RleHRGb3VuZCk7CisgICAgZ19hc3Nl
cnQodGVzdC0+bV9tYXRjaENvdW50ID09IDIpOworICAgIGdfYXNzZXJ0KCEod2Via2l0X2ZpbmRf
Y29udHJvbGxlcl9nZXRfb3B0aW9ucyh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKSAmIFdF
QktJVF9GSU5EX09QVElPTlNfQkFDS1dBUkRTKSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RGaW5k
Q29udHJvbGxlclByZXZpb3VzKEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3RyaW5nLCAwKTsKKyAgICB0ZXN0LT53YWl0
VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPmZpbmQoInRlc3RpbmciLCBXRUJLSVRf
RklORF9PUFRJT05TX05PTkUsIDIpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgp
OworCisgICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDIpOworICAgIGdfYXNzZXJ0
KHRlc3QtPm1fdGV4dEZvdW5kKTsKKworICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNo
X25leHQodGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSk7CisgICAgdGVzdC0+d2FpdFVudGls
RmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7CisgICAg
Z19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDIpOworICAgIGdfYXNzZXJ0KCEod2Via2l0
X2ZpbmRfY29udHJvbGxlcl9nZXRfb3B0aW9ucyh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgp
KSAmIFdFQktJVF9GSU5EX09QVElPTlNfQkFDS1dBUkRTKSk7CisKKyAgICB3ZWJraXRfZmluZF9j
b250cm9sbGVyX3NlYXJjaF9wcmV2aW91cyh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKTsK
KyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3Qt
Pm1fdGV4dEZvdW5kKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX21hdGNoQ291bnQgPT0gMik7Cisg
ICAgZ19hc3NlcnQod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfb3B0aW9ucyh0ZXN0LT5tX2Zp
bmRDb250cm9sbGVyLmdldCgpKSAmIFdFQktJVF9GSU5EX09QVElPTlNfQkFDS1dBUkRTKTsKK30K
Kworc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVyQ291bnRlZE1hdGNoZXMoRmluZENvbnRy
b2xsZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRIdG1sKHRl
c3RTdHJpbmcsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAg
dGVzdC0+Y291bnQoInRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDIpOworICAg
IHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV9t
YXRjaENvdW50ID09IDIpOworCisgICAgdGVzdC0+Y291bnQoImZpcnN0IiwgV0VCS0lUX0ZJTkRf
T1BUSU9OU19OT05FLCAyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKwor
ICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3VudCA9PSAxKTsKKworICAgIHRlc3QtPmNvdW50
KCJub3RGb3VuZCIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMik7CisgICAgdGVzdC0+d2Fp
dFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCghdGVzdC0+bV9tYXRjaENvdW50
KTsKK30KKworc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVyT3B0aW9ucyhGaW5kQ29udHJv
bGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwodGVz
dFN0cmluZywgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0
ZXN0LT5maW5kKCJUZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAyKTsKKyAgICB0
ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX3Rl
eHRGb3VuZCk7CisKKyAgICB0ZXN0LT5maW5kKCJUZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9O
U19DQVNFX0lOU0VOU0lUSVZFLCAyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQo
KTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKKworICAgIHRlc3QtPmZpbmQo
ImVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMik7CisgICAgdGVzdC0+d2FpdFVu
dGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7CisK
KyAgICB0ZXN0LT5maW5kKCJlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX0FUX1dPUkRfU1RB
UlRTLCAyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNz
ZXJ0KCF0ZXN0LT5tX3RleHRGb3VuZCk7CisKKyAgICB0ZXN0LT5maW5kKCJIYWxmIiwgV0VCS0lU
X0ZJTkRfT1BUSU9OU19BVF9XT1JEX1NUQVJUUywgMik7CisgICAgdGVzdC0+d2FpdFVudGlsRmlu
ZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCghdGVzdC0+bV90ZXh0Rm91bmQpOworCisgICAg
dGVzdC0+ZmluZCgiSGFsZiIsIFdFQktJVF9GSU5EX09QVElPTlNfQVRfV09SRF9TVEFSVFMgfCBX
RUJLSVRfRklORF9PUFRJT05TX1RSRUFUX01FRElBTF9DQVBJVEFMX0FTX1dPUkRfU1RBUlQsIDIp
OworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQodGVz
dC0+bV90ZXh0Rm91bmQpOworCisgICAgdGVzdC0+ZmluZCgidGVzdGluZyIsIFdFQktJVF9GSU5E
X09QVElPTlNfV1JBUF9BUk9VTkQsIDMpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hl
ZCgpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKKworICAgIHdlYmtpdF9maW5k
X2NvbnRyb2xsZXJfc2VhcmNoX25leHQodGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSk7Cisg
ICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV90
ZXh0Rm91bmQpOworCisgICAgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfbmV4dCh0ZXN0
LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNo
ZWQoKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7Cit9CisKK3N0YXRpYyB2b2lk
IHRlc3RGaW5kQ29udHJvbGxlckluc3RhbmNlKEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwgZ2Nv
bnN0cG9pbnRlcikKK3sKKyAgICBXZWJLaXRGaW5kQ29udHJvbGxlciogZmluZENvbnRyb2xsZXIx
ID0gd2Via2l0X3dlYl92aWV3X2dldF9maW5kX2NvbnRyb2xsZXIodGVzdC0+bV93ZWJWaWV3KTsK
KyAgICBXZWJLaXRGaW5kQ29udHJvbGxlciogZmluZENvbnRyb2xsZXIyID0gd2Via2l0X3dlYl92
aWV3X2dldF9maW5kX2NvbnRyb2xsZXIodGVzdC0+bV93ZWJWaWV3KTsKKworICAgIGdfYXNzZXJ0
KGZpbmRDb250cm9sbGVyMSA9PSBmaW5kQ29udHJvbGxlcjIpOworfQorCitzdGF0aWMgdm9pZCB0
ZXN0RmluZENvbnRyb2xsZXJHZXR0ZXJzKEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKK3sKKyAgICBjb25zdCBjaGFyKiBzZWFyY2hTdHJpbmcgPSAidGVzdGluZyI7Cisg
ICAgZ3VpbnQgbWF4TWF0Y2hDb3VudCA9IDE7CisgICAgZ3VpbnQgZmluZE9wdGlvbnMgPSBXRUJL
SVRfRklORF9PUFRJT05TX1dSQVBfQVJPVU5EIHwgV0VCS0lUX0ZJTkRfT1BUSU9OU19BVF9XT1JE
X1NUQVJUUzsKKyAgICBXZWJLaXRGaW5kQ29udHJvbGxlciogZmluZENvbnRyb2xsZXIgPSB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2ZpbmRfY29udHJvbGxlcih0ZXN0LT5tX3dlYlZpZXcpOworCisgICAg
d2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2goZmluZENvbnRyb2xsZXIsIHNlYXJjaFN0cmlu
ZywgZmluZE9wdGlvbnMsIG1heE1hdGNoQ291bnQpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9maW5k
X2NvbnRyb2xsZXJfZ2V0X3dlYl92aWV3KGZpbmRDb250cm9sbGVyKSA9PSB0ZXN0LT5tX3dlYlZp
ZXcpOworICAgIGdfYXNzZXJ0KCFnX3N0cmNtcDAod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRf
c2VhcmNoX3RleHQoZmluZENvbnRyb2xsZXIpLCBzZWFyY2hTdHJpbmcpKTsKKyAgICBnX2Fzc2Vy
dCh3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9tYXhfbWF0Y2hfY291bnQoZmluZENvbnRyb2xs
ZXIpID09IG1heE1hdGNoQ291bnQpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9maW5kX2NvbnRyb2xs
ZXJfZ2V0X29wdGlvbnMoZmluZENvbnRyb2xsZXIpID09IGZpbmRPcHRpb25zKTsKK30KKwordm9p
ZCBiZWZvcmVBbGwoKQoreworICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5k
Q29udHJvbGxlciIsICJnZXR0ZXJzIiwgdGVzdEZpbmRDb250cm9sbGVyR2V0dGVycyk7CisgICAg
RmluZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwgImluc3RhbmNl
IiwgdGVzdEZpbmRDb250cm9sbGVySW5zdGFuY2UpOworICAgIEZpbmRDb250cm9sbGVyVGVzdDo6
YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJ0ZXh0LWZvdW5kIiwgdGVzdEZpbmRDb250cm9s
bGVyVGV4dEZvdW5kKTsKKyAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENv
bnRyb2xsZXIiLCAidGV4dC1ub3QtZm91bmQiLCB0ZXN0RmluZENvbnRyb2xsZXJUZXh0Tm90Rm91
bmQpOworICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIs
ICJtYXRjaC1jb3VudCIsIHRlc3RGaW5kQ29udHJvbGxlck1hdGNoQ291bnQpOworICAgIEZpbmRD
b250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJtYXgtbWF0Y2gtY291
bnQiLCB0ZXN0RmluZENvbnRyb2xsZXJNYXhNYXRjaENvdW50KTsKKyAgICBGaW5kQ29udHJvbGxl
clRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAibmV4dCIsIHRlc3RGaW5kQ29udHJv
bGxlck5leHQpOworICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJv
bGxlciIsICJwcmV2aW91cyIsIHRlc3RGaW5kQ29udHJvbGxlclByZXZpb3VzKTsKKyAgICBGaW5k
Q29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAiY291bnRlZC1tYXRj
aGVzIiwgdGVzdEZpbmRDb250cm9sbGVyQ291bnRlZE1hdGNoZXMpOworICAgIEZpbmRDb250cm9s
bGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJvcHRpb25zIiwgdGVzdEZpbmRD
b250cm9sbGVyT3B0aW9ucyk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCmluZGV4IGU5ZDg5MmI1NDA1OTlkYmRh
YzdkMzU1YjNlMjJiN2FjYjYxNmFjZDYuLmY0OTdlNTdhZWViN2Q5NDc4OTg1YmQzZTU5MTg4Zjgy
OTA1NzU4YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dl
YmtpdDIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgK
QEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERvd25sb2FkLmg+CiAj
aW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRFbnVtVHlwZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dl
YktpdEVycm9yLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRGaW5kQ29udHJvbGxlci5oPgog
I2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0U2V0dGluZ3MuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dl
YktpdFVSSVJlcXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFVSSVJlc3BvbnNlLmg+
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125877</attachid>
            <date>2012-02-07 10:41:48 -0800</date>
            <delta_ts>2012-02-10 09:51:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76070-20120207194146.patch</filename>
            <type>text/plain</type>
            <size>48697</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2ODE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggY2Y4ZjZiYmFkYThhMTk0
MzYxMWY2MTM2MjRkY2I1YWNmMjRmOGM3Zi4uMWRlNjhhZmYyMDdmY2E3ZWRmMDEzMGYxZjI0NTFk
ZTA3YWFkMjg3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDEyLTAxLTE5ICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFtX
SzJdIEFkZCBGaW5kIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzYwNzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIHBhdGNoIGFkZHMgYSBuZXcgcHVibGljIGZpbmQgQVBJIGZvciB0aGUgR3Rr
KyBXSzIgcG9ydC4gSXQKKyAgICAgICAgZGVmaW5lcyBhIG5ldyBvYmplY3QgY2FsbGVkIFdlYktp
dEZpbmRDb250cm9sbGVyIG93bmVkIGJ5IGVhY2gKKyAgICAgICAgV2ViS2l0V2ViVmlldy4gQ2xp
ZW50cyB3aWxsIHVzZSB0aGlzIG5ldyBvYmplY3QgdG8gc2VhcmNoIHN0cmluZ3MKKyAgICAgICAg
aW4gdGhlIFdlYktpdFdlYlZpZXcuCisKKyAgICAgICAgQ2hhbmdlcyBpbmNsdWRlIGFsc28gZG9j
dW1lbnRhdGlvbiBhbmQgdW5pdCB0ZXN0cyBmb3IgdGhlIG5ldworICAgICAgICBwdWJsaWMgQVBJ
LgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0RGVmaW5lcy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZp
bmRDb250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChkaWRGaW5kU3RyaW5nKTogaW1wbGVt
ZW50YXRpb24gb2YgdGhlIFdLUGFnZSBGaW5kIGludGVyZmFjZS4KKyAgICAgICAgKGRpZEZhaWxU
b0ZpbmRTdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKGRpZENvdW50U3RyaW5nTWF0Y2hlcyk6IERp
dHRvLgorICAgICAgICAod2Via2l0X2ZpbmRfY29udHJvbGxlcl9pbml0KToKKyAgICAgICAgKGdl
dFdLUGFnZUZyb21XZWJLaXRXZWJWaWV3KToKKyAgICAgICAgKHdlYmtpdEZpbmRDb250cm9sbGVy
Q29uc3RydWN0ZWQpOgorICAgICAgICAod2Via2l0RmluZENvbnRyb2xsZXJHZXRQcm9wZXJ0eSk6
CisgICAgICAgICh3ZWJraXRGaW5kQ29udHJvbGxlclNldFByb3BlcnR5KToKKyAgICAgICAgKHdl
YmtpdEZpbmRDb250cm9sbGVyRmluYWxpemUpOgorICAgICAgICAod2Via2l0X2ZpbmRfY29udHJv
bGxlcl9jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X3Nl
YXJjaF90ZXh0KToKKyAgICAgICAgKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X29wdGlvbnMp
OgorICAgICAgICAod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfbWF4X21hdGNoX2NvdW50KToK
KyAgICAgICAgKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X3dlYl92aWV3KToKKyAgICAgICAg
KHdlYktpdEZpbmRDb250cm9sbGVyUGVyZm9ybSk6CisgICAgICAgICh3ZWJLaXRGaW5kQ29udHJv
bGxlclNldFNlYXJjaERhdGEpOgorICAgICAgICAod2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFy
Y2gpOiBhc3luY2hyb25vdXNseSBsb29rcyBmb3IgdGhlCisgICAgICAgIHNlYXJjaCBzdHJpbmcg
aW4gdGhlIFdlYktpdFdlYlZpZXcuCisgICAgICAgICh3ZWJraXRfZmluZF9jb250cm9sbGVyX3Nl
YXJjaF9maW5pc2gpOiB1bmhpZ2hsaWdodHMgdGV4dCBtYXRjaGVzLgorICAgICAgICAod2Via2l0
X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfbmV4dCk6CisgICAgICAgICh3ZWJraXRfZmluZF9jb250
cm9sbGVyX3NlYXJjaF9wcmV2aW91cyk6CisgICAgICAgICh3ZWJraXRfZmluZF9jb250cm9sbGVy
X2NvdW50X21hdGNoZXMpOiBhc3luY2hyb25vdXNseSBjb3VudHMgdGhlCisgICAgICAgIG51bWJl
ciBvZiBtYXRjaGVzIG9mIHRoZSBzZWFyY2ggc3RyaW5nIGluIHRoZSBXZWJLaXRXZWJWaWV3Lgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbmRDb250cm9sbGVyLmg6IEFkZGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdF93
ZWJfdmlld19nZXRfZmluZF9jb250cm9sbGVyKTogcmV0dXJucyB0aGUKKyAgICAgICAgV2ViS2l0
RmluZENvbnRyb2xsZXIgaW5zdGFuY2Ugb3duZWQgYnkgdGhlIFdlYktpdFdlYlZpZXcuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWw6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXM6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW06CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvVGVzdFdlYktpdEZpbmRDb250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgICh0
ZXN0RmluZENvbnRyb2xsZXJUZXh0Rm91bmQpOgorICAgICAgICAodGVzdEZpbmRDb250cm9sbGVy
VGV4dE5vdEZvdW5kKToKKyAgICAgICAgKHRlc3RGaW5kQ29udHJvbGxlck1hdGNoQ291bnQpOgor
ICAgICAgICAodGVzdEZpbmRDb250cm9sbGVyTWF4TWF0Y2hDb3VudCk6CisgICAgICAgICh0ZXN0
RmluZENvbnRyb2xsZXJOZXh0KToKKyAgICAgICAgKHRlc3RGaW5kQ29udHJvbGxlclByZXZpb3Vz
KToKKyAgICAgICAgKHRlc3RGaW5kQ29udHJvbGxlckNvdW50ZWRNYXRjaGVzKToKKyAgICAgICAg
KHRlc3RGaW5kQ29udHJvbGxlck9wdGlvbnMpOgorICAgICAgICAodGVzdEZpbmRDb250cm9sbGVy
SW5zdGFuY2UpOgorICAgICAgICAodGVzdEZpbmRDb250cm9sbGVyR2V0dGVycyk6CisgICAgICAg
IChiZWZvcmVBbGwpOgorICAgICAgICAoYWZ0ZXJBbGwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZ3RrL3dlYmtpdDIuaDoKKwogMjAxMi0wMi0wNiAgTWFydGluIFJvYmluc29uICA8bXJvYmlu
c29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gV2ViS2l0V2ViVmlldyBkb2VzIGEgbG90
IG9mIHdvcmsgZHVyaW5nIHNpemVfYWxsb2NhdGUgd2hlbiBub3QgbWFwcGVkCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2Vm
aWxlLmFtCmluZGV4IDFmNDYxMjc5OGIzMzJkNWRlNTY1MjIyYmQ3NzhjM2E0NmUwODdhYmIuLjc0
ZmVhYzk3OWU2MGQwMDQ1ODdkNTNlZjU2YjI3OGNkOTUyNmQ4OWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxl
LmFtCkBAIC04NSw2ICs4NSw3IEBAIGxpYndlYmtpdDJndGtpbmNsdWRlX0hFQURFUlMgPSBcCiAJ
JChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREZWZpbmVzLmggXAogCSQoV2ViS2l0
MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWQuaCBcCiAJJChXZWJLaXQyKS9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5oIFwKKwkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdEZpbmRDb250cm9sbGVyLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLmggXAogCSQoV2ViS2l0MikvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0UG9saWN5RGVjaXNpb24uaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRTZXR0aW5ncy5oIFwKQEAgLTUzNCw2ICs1MzUsOCBAQCBsaWJ3ZWJr
aXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9S
X1ZFUlNJT05AX2xhX1NPVQogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dEVycm9yLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TG9h
ZGVyQ2xpZW50LmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdExv
YWRlckNsaWVudC5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dEZpbmRDb250cm9sbGVyLmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdEZpbmRDb250cm9sbGVyLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLmNwcCBcCiAJU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uLmggXAogCVNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNp
c2lvblByaXZhdGUuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXREZWZpbmVzLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXREZWZpbmVzLmgKaW5kZXggNzliMzM4MzYwZGRhYWE4ZjA5ZjY1NDdmMmRmMTQ1OGY2ZjIx
OTMxZC4uZTJlM2IzZDEwNzY4NjRmZDQ1ZjM1ZTBlZDRkOTBiZWMyNGJkZGFmNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RGVmaW5lcy5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERlZmluZXMuaApAQCAtNDQs
NCArNDQsNyBAQAogIyAgICBkZWZpbmUgV0VCS0lUX09CU09MRVRFX0FQSSBXRUJLSVRfQVBJIF9f
YXR0cmlidXRlX18oKGRlcHJlY2F0ZWQpKQogI2VuZGlmCiAKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRGaW5kQ29udHJvbGxlciBXZWJLaXRGaW5kQ29udHJvbGxlcjsKK3R5cGVkZWYgc3RydWN0IF9X
ZWJLaXRXZWJWaWV3ICAgICAgICBXZWJLaXRXZWJWaWV3OworCiAjZW5kaWYgLy8gV2ViS2l0RGVm
aW5lc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRGaW5kQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRGaW5kQ29udHJvbGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2RkY2MyYzhjM2Q2MGM4ZGViMGRj
MTVmYjNiMjJmMGFkY2MwYmIxMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbmRDb250cm9sbGVyLmNwcApAQCAtMCwwICsxLDQ3NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYktpdEZpbmRDb250cm9sbGVyLmgiCisKKyNpbmNsdWRlICJXZWJL
aXRFbnVtVHlwZXMuaCIKKyNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2Vi
S2l0V2ViVmlld0Jhc2VQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCisjaW5j
bHVkZSA8V2ViS2l0Mi9XS0ZpbmRPcHRpb25zLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS1JldGFp
blB0ci5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tTdHJpbmcuaD4KKyNpbmNsdWRlIDxnbGliL2dp
MThuLWxpYi5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitlbnVtIHsK
KyAgICBGT1VORF9URVhULAorICAgIEZBSUxFRF9UT19GSU5EX1RFWFQsCisgICAgQ09VTlRFRF9N
QVRDSEVTLAorCisgICAgTEFTVF9TSUdOQUwKK307CisKK2VudW0geworICAgIFBST1BfMCwKKwor
ICAgIFBST1BfVEVYVCwKKyAgICBQUk9QX09QVElPTlMsCisgICAgUFJPUF9NQVhfTUFUQ0hfQ09V
TlQsCisgICAgUFJPUF9XRUJfVklFVworfTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBGaW5kT3Bl
cmF0aW9uLAorICAgIENvdW50T3BlcmF0aW9uCit9IFdlYktpdEZpbmRDb250cm9sbGVyT3BlcmF0
aW9uOworCitzdHJ1Y3QgX1dlYktpdEZpbmRDb250cm9sbGVyUHJpdmF0ZSB7CisgICAgQ1N0cmlu
ZyBzZWFyY2hUZXh0OworICAgIHVuc2lnbmVkIGludCBmaW5kT3B0aW9uczsKKyAgICB1bnNpZ25l
ZCBpbnQgbWF4TWF0Y2hDb3VudDsKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OworfTsKKwor
c3RhdGljIGd1aW50IHNpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OworCitHX0RFRklORV9U
WVBFKFdlYktpdEZpbmRDb250cm9sbGVyLCB3ZWJraXRfZmluZF9jb250cm9sbGVyLCBHX1RZUEVf
T0JKRUNUKQorCitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdFQktJVF9GSU5EX09QVElP
TlNfQ0FTRV9JTlNFTlNJVElWRSwga1dLRmluZE9wdGlvbnNDYXNlSW5zZW5zaXRpdmUpOworQ09N
UElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXRUJLSVRfRklORF9PUFRJT05TX0FUX1dPUkRfU1RB
UlRTLCBrV0tGaW5kT3B0aW9uc0F0V29yZFN0YXJ0cyk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElO
R19FTlVNKFdFQktJVF9GSU5EX09QVElPTlNfVFJFQVRfTUVESUFMX0NBUElUQUxfQVNfV09SRF9T
VEFSVCwga1dLRmluZE9wdGlvbnNUcmVhdE1lZGlhbENhcGl0YWxBc1dvcmRTdGFydCk7CitDT01Q
SUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdFQktJVF9GSU5EX09QVElPTlNfQkFDS1dBUkRTLCBr
V0tGaW5kT3B0aW9uc0JhY2t3YXJkcyk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdF
QktJVF9GSU5EX09QVElPTlNfV1JBUF9BUk9VTkQsIGtXS0ZpbmRPcHRpb25zV3JhcEFyb3VuZCk7
CisKK3N0YXRpYyB2b2lkIGRpZEZpbmRTdHJpbmcoV0tQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVm
IHN0cmluZywgdW5zaWduZWQgbWF0Y2hDb3VudCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sK
KyAgICBnX3NpZ25hbF9lbWl0KFdFQktJVF9GSU5EX0NPTlRST0xMRVIoY2xpZW50SW5mbyksIHNp
Z25hbHNbRk9VTkRfVEVYVF0sIDAsIG1hdGNoQ291bnQpOworfQorCitzdGF0aWMgdm9pZCBkaWRG
YWlsVG9GaW5kU3RyaW5nKFdLUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiBzdHJpbmcsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgZ19zaWduYWxfZW1pdChXRUJLSVRfRklORF9DT05U
Uk9MTEVSKGNsaWVudEluZm8pLCBzaWduYWxzW0ZBSUxFRF9UT19GSU5EX1RFWFRdLCAwKTsKK30K
Kworc3RhdGljIHZvaWQgZGlkQ291bnRTdHJpbmdNYXRjaGVzKFdLUGFnZVJlZiBwYWdlLCBXS1N0
cmluZ1JlZiBzdHJpbmcsIHVuc2lnbmVkIG1hdGNoQ291bnQsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pCit7CisgICAgZ19zaWduYWxfZW1pdChXRUJLSVRfRklORF9DT05UUk9MTEVSKGNsaWVudElu
Zm8pLCBzaWduYWxzW0NPVU5URURfTUFUQ0hFU10sIDAsIG1hdGNoQ291bnQpOworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZmluZF9jb250cm9sbGVyX2luaXQoV2ViS2l0RmluZENvbnRyb2xsZXIq
IGZpbmRDb250cm9sbGVyKQoreworICAgIFdlYktpdEZpbmRDb250cm9sbGVyUHJpdmF0ZSogcHJp
diA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShmaW5kQ29udHJvbGxlciwgV0VCS0lUX1RZ
UEVfRklORF9DT05UUk9MTEVSLCBXZWJLaXRGaW5kQ29udHJvbGxlclByaXZhdGUpOworICAgIGZp
bmRDb250cm9sbGVyLT5wcml2ID0gcHJpdjsKKyAgICBuZXcgKHByaXYpIFdlYktpdEZpbmRDb250
cm9sbGVyUHJpdmF0ZSgpOworfQorCitzdGF0aWMgV0tQYWdlUmVmIGlubGluZSBnZXRXS1BhZ2VG
cm9tV2ViS2l0V2ViVmlldyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIHJldHVybiB0
b0FQSSh3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2ViVmll
dykpKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0RmluZENvbnRyb2xsZXJDb25zdHJ1Y3RlZChH
T2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RmluZENvbnRyb2xsZXIqIGZpbmRDb250cm9s
bGVyID0gV0VCS0lUX0ZJTkRfQ09OVFJPTExFUihvYmplY3QpOworICAgIFdLUGFnZUZpbmRDbGll
bnQgd2tGaW5kQ2xpZW50ID0geworICAgICAgICBrV0tQYWdlRmluZENsaWVudEN1cnJlbnRWZXJz
aW9uLAorICAgICAgICBmaW5kQ29udHJvbGxlciwgLy8gY2xpZW50SW5mbworICAgICAgICBkaWRG
aW5kU3RyaW5nLAorICAgICAgICBkaWRGYWlsVG9GaW5kU3RyaW5nLAorICAgICAgICBkaWRDb3Vu
dFN0cmluZ01hdGNoZXMKKyAgICB9OworCisgICAgV0tQYWdlU2V0UGFnZUZpbmRDbGllbnQoZ2V0
V0tQYWdlRnJvbVdlYktpdFdlYlZpZXcoZmluZENvbnRyb2xsZXItPnByaXYtPndlYlZpZXcpLCAm
d2tGaW5kQ2xpZW50KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0RmluZENvbnRyb2xsZXJHZXRQ
cm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJZCwgR1ZhbHVlKiB2YWx1ZSwgR1Bh
cmFtU3BlYyogcGFyYW1TcGVjKQoreworICAgIFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29u
dHJvbGxlciA9IFdFQktJVF9GSU5EX0NPTlRST0xMRVIob2JqZWN0KTsKKworICAgIHN3aXRjaCAo
cHJvcElkKSB7CisgICAgY2FzZSBQUk9QX1RFWFQ6CisgICAgICAgIGdfdmFsdWVfc2V0X3N0cmlu
Zyh2YWx1ZSwgZmluZENvbnRyb2xsZXItPnByaXYtPnNlYXJjaFRleHQuZGF0YSgpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX09QVElPTlM6CisgICAgICAgIGdfdmFsdWVfc2V0X3Vp
bnQodmFsdWUsIGZpbmRDb250cm9sbGVyLT5wcml2LT5maW5kT3B0aW9ucyk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9NQVhfTUFUQ0hfQ09VTlQ6CisgICAgICAgIGdfdmFsdWVfc2V0
X3VpbnQodmFsdWUsIGZpbmRDb250cm9sbGVyLT5wcml2LT5tYXhNYXRjaENvdW50KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dFQl9WSUVXOgorICAgICAgICBnX3ZhbHVlX3NldF9v
YmplY3QodmFsdWUsIGZpbmRDb250cm9sbGVyLT5wcml2LT53ZWJWaWV3KTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZ
X0lEKG9iamVjdCwgcHJvcElkLCBwYXJhbVNwZWMpOworICAgIH0KK30KKworc3RhdGljIHZvaWQg
d2Via2l0RmluZENvbnRyb2xsZXJTZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHBy
b3BJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAg
IFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxlciA9IFdFQktJVF9GSU5EX0NPTlRS
T0xMRVIob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcElkKSB7CisgICAgY2FzZSBQUk9QX1dF
Ql9WSUVXOgorICAgICAgICBmaW5kQ29udHJvbGxlci0+cHJpdi0+d2ViVmlldyA9IFdFQktJVF9X
RUJfVklFVyhnX3ZhbHVlX2dldF9vYmplY3QodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVj
dCwgcHJvcElkLCBwYXJhbVNwZWMpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0Rmlu
ZENvbnRyb2xsZXJGaW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV0VCS0lUX0ZJTkRf
Q09OVFJPTExFUihvYmplY3QpLT5wcml2LT5+V2ViS2l0RmluZENvbnRyb2xsZXJQcml2YXRlKCk7
CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2ZpbmRfY29udHJvbGxlcl9wYXJlbnRfY2xhc3Mp
LT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZmluZF9jb250cm9s
bGVyX2NsYXNzX2luaXQoV2ViS2l0RmluZENvbnRyb2xsZXJDbGFzcyogZmluZENsYXNzKQorewor
ICAgIEdPYmplY3RDbGFzcyogZ09iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MoZmluZENsYXNz
KTsKKworICAgIGdPYmplY3RDbGFzcy0+Y29uc3RydWN0ZWQgPSB3ZWJraXRGaW5kQ29udHJvbGxl
ckNvbnN0cnVjdGVkOworICAgIGdPYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0Rmlu
ZENvbnRyb2xsZXJHZXRQcm9wZXJ0eTsKKyAgICBnT2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9
IHdlYmtpdEZpbmRDb250cm9sbGVyU2V0UHJvcGVydHk7CisgICAgZ09iamVjdENsYXNzLT5maW5h
bGl6ZSA9IHdlYmtpdEZpbmRDb250cm9sbGVyRmluYWxpemU7CisKKyAgICBnX3R5cGVfY2xhc3Nf
YWRkX3ByaXZhdGUoZmluZENsYXNzLCBzaXplb2YoV2ViS2l0RmluZENvbnRyb2xsZXJQcml2YXRl
KSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRGaW5kQ29udHJvbGxlcjo6dGV4dAorICAgICAq
CisgICAgICogVGhlIGN1cnJlbnQgc2VhcmNoIHRleHQgZm9yIHRoaXMgI1dlYktpdEZpbmRDb250
cm9sbGVyLgorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ09i
amVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9URVhU
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmlu
ZygidGV4dCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF8oIlNlYXJjaCB0ZXh0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRleHQgdG8gc2VhcmNoIGZvciBpbiB0aGUg
dmlldyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIC8qKgorICAgICAqIFdl
YktpdEZpbmRDb250cm9sbGVyOm9wdGlvbnM6CisgICAgICoKKyAgICAgKiBUaGUgb3B0aW9ucyB0
byBiZSB1c2VkIGluIHRoZSBzZWFyY2ggb3BlcmF0aW9uLgorICAgICAqLworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ09iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUFJPUF9PUFRJT05TLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2ZsYWdzKCJvcHRpb25zIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJTZWFyY2ggT3B0aW9u
cyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF8oIlNlYXJjaCBvcHRpb25zIHRvIGJlIHVzZWQgaW4gdGhlIHNlYXJjaCBvcGVyYXRpb24i
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXRUJLSVRfVFlQRV9GSU5EX09QVElPTlMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0RmluZENvbnRyb2xs
ZXI6bWF4LW1hdGNoLWNvdW50OgorICAgICAqCisgICAgICogVGhlIG1heGltdW0gbnVtYmVyIG9m
IG1hdGNoZXMgdG8gcmVwb3J0IGZvciBhIGdpdmVuIHNlYXJjaC4KKyAgICAgKi8KKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdPYmplY3RDbGFzcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBST1BfTUFYX01BVENIX0NPVU5ULAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQoIm1heC1tYXRjaC1jb3Vu
dCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfKCJNYXhpbXVtIG1hdGNoZXMgY291bnQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBtYXhpbXVtIG51bWJlciBvZiBtYXRj
aGVzIGluIGEgZ2l2ZW4gdGV4dCB0byByZXBvcnQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdfTUFYVUlOVCwgMCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJB
TV9SRUFEQUJMRSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0RmluZENvbnRyb2xsZXI6d2Vi
LXZpZXc6CisgICAgICoKKyAgICAgKiBUaGUgI1dlYktpdFdlYlZpZXcgdGhpcyBjb250cm9sbGVy
IGlzIGFzc29jaWF0ZWQgdG8uCisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eShnT2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQUk9QX1dFQl9WSUVXLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19w
YXJhbV9zcGVjX29iamVjdCgid2ViLXZpZXciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJXZWJWaWV3IiksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBXZWJWaWV3
IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZpbmQgY29udHJvbGxlciIpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9XRUJf
VklFVywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KFdFQktJVF9QQVJBTV9SRUFEV1JJVEUgfCBH
X1BBUkFNX0NPTlNUUlVDVF9PTkxZKSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0RmluZENv
bnRyb2xsZXI6OmZvdW5kLXRleHQ6CisgICAgICogQGZpbmRfY29udHJvbGxlcjogdGhlICNXZWJL
aXRGaW5kQ29udHJvbGxlcgorICAgICAqIEBtYXRjaF9jb3VudDogdGhlIG51bWJlciBvZiBtYXRj
aGVzIGZvdW5kIG9mIHRoZSBzZWFyY2ggdGV4dAorICAgICAqCisgICAgICogVGhpcyBzaWduYWwg
aXMgZW1pdHRlZCB3aGVuIGEgZ2l2ZW4gdGV4dCBpcyBmb3VuZCBpbiB0aGUgd2ViCisgICAgICog
cGFnZSB0ZXh0LiBJdCB3aWxsIGJlIGlzc3VlZCBpZiB0aGUgdGV4dCBpcyBmb3VuZAorICAgICAq
IGFzeW5jaHJvbm91c2x5IGFmdGVyIGEgY2FsbCB0byB3ZWJraXRfZmluZF9jb250cm9sbGVyX3Nl
YXJjaCgpLAorICAgICAqIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX25leHQoKSBvcgor
ICAgICAqIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX3ByZXZpb3VzKCkuCisgICAgICov
CisgICAgc2lnbmFsc1tGT1VORF9URVhUXSA9CisgICAgICAgIGdfc2lnbmFsX25ldygiZm91bmQt
dGV4dCIsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhnT2JqZWN0Q2xh
c3MpLAorICAgICAgICAgICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAg
ICAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJz
aGFsX1ZPSURfX1VJTlQsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwgR19U
WVBFX1VJTlQpOworCisgICAgLyoqCisgICAgICogV2ViS2l0RmluZENvbnRyb2xsZXI6OmZhaWxl
ZC10by1maW5kLXRleHQ6CisgICAgICogQGZpbmRfY29udHJvbGxlcjogdGhlICNXZWJLaXRGaW5k
Q29udHJvbGxlcgorICAgICAqCisgICAgICogVGhpcyBzaWduYWwgaXMgZW1pdHRlZCB3aGVuIGEg
c2VhcmNoIG9wZXJhdGlvbiBkb2VzIG5vdCBmaW5kCisgICAgICogYW55IHJlc3VsdCBmb3IgdGhl
IGdpdmVuIHRleHQuIEl0IHdpbGwgYmUgaXNzdWVkIGlmIHRoZSB0ZXh0CisgICAgICogaXMgbm90
IGZvdW5kIGFzeW5jaHJvbm91c2x5IGFmdGVyIGEgY2FsbCB0bworICAgICAqIHdlYmtpdF9maW5k
X2NvbnRyb2xsZXJfc2VhcmNoKCksIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX25leHQo
KQorICAgICAqIG9yIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX3ByZXZpb3VzKCkuCisg
ICAgICovCisgICAgc2lnbmFsc1tGQUlMRURfVE9fRklORF9URVhUXSA9CisgICAgICAgIGdfc2ln
bmFsX25ldygiZmFpbGVkLXRvLWZpbmQtdGV4dCIsCisgICAgICAgICAgICAgICAgICAgICBHX1RZ
UEVfRlJPTV9DTEFTUyhnT2JqZWN0Q2xhc3MpLAorICAgICAgICAgICAgICAgICAgICAgR19TSUdO
QUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgICAg
ICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1ZPSUQsCisgICAgICAgICAgICAgICAg
ICAgICBHX1RZUEVfTk9ORSwgMCk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRGaW5kQ29udHJv
bGxlcjo6Y291bnRlZC1tYXRjaGVzOgorICAgICAqIEBmaW5kX2NvbnRyb2xsZXI6IHRoZSAjV2Vi
S2l0RmluZENvbnRyb2xsZXIKKyAgICAgKiBAbWF0Y2hfY291bnQ6IHRoZSBudW1iZXIgb2YgbWF0
Y2hlcyBvZiB0aGUgc2VhcmNoIHRleHQKKyAgICAgKgorICAgICAqIFRoaXMgc2lnbmFsIGlzIGVt
aXR0ZWQgd2hlbiB0aGUgI1dlYktpdEZpbmRDb250cm9sbGVyIGhhcworICAgICAqIGNvdW50ZWQg
dGhlIG51bWJlciBvZiBtYXRjaGVzIGZvciBhIGdpdmVuIHRleHQgYWZ0ZXIgYSBjYWxsCisgICAg
ICogdG8gd2Via2l0X2ZpbmRfY29udHJvbGxlcl9jb3VudF9tYXRjaGVzKCkuCisgICAgICovCisg
ICAgc2lnbmFsc1tDT1VOVEVEX01BVENIRVNdID0KKyAgICAgICAgZ19zaWduYWxfbmV3KCJjb3Vu
dGVkLW1hdGNoZXMiLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1MoZ09i
amVjdENsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgIEdfU0lHTkFMX1JVTl9MQVNULAorICAg
ICAgICAgICAgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgIGdfY2Nsb3N1
cmVfbWFyc2hhbF9WT0lEX19VSU5ULAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX05PTkUs
IDEsIEdfVFlQRV9VSU5UKTsKK30KKworLyoqCisgKiB3ZWJraXRfZmluZF9jb250cm9sbGVyX2dl
dF9zZWFyY2hfdGV4dDoKKyAqIEBmaW5kX2NvbnRyb2xsZXI6IHRoZSAjV2ViS2l0RmluZENvbnRy
b2xsZXIKKyAqCisgKiBHZXRzIHRoZSB0ZXh0IHRoYXQgQGZpbmRfY29udHJvbGxlciBpcyBjdXJy
ZW50bHkgc2VhcmNoaW5nCisgKiBmb3IuIFRoaXMgdGV4dCBpcyBwYXNzZWQgdG8gZWl0aGVyCisg
KiB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaCgpIG9yCisgKiB3ZWJraXRfZmluZF9jb250
cm9sbGVyX2NvdW50X21hdGNoZXMoKS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgdGV4dCB0byBsb29r
IGZvciBpbiB0aGUgI1dlYktpdFdlYlZpZXcuCisgKi8KK2NvbnN0IGNoYXIqIHdlYmtpdF9maW5k
X2NvbnRyb2xsZXJfZ2V0X3NlYXJjaF90ZXh0KFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29u
dHJvbGxlcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRklORF9DT05U
Uk9MTEVSKGZpbmRDb250cm9sbGVyKSwgMCk7CisKKyAgICByZXR1cm4gZmluZENvbnRyb2xsZXIt
PnByaXYtPnNlYXJjaFRleHQuZGF0YSgpOworfQorCisvKioKKyAqIHdlYmtpdF9maW5kX2NvbnRy
b2xsZXJfZ2V0X29wdGlvbnM6CisgKiBAZmluZF9jb250cm9sbGVyOiB0aGUgI1dlYktpdEZpbmRD
b250cm9sbGVyCisgKgorICogR2V0cyBhIGJpdG1hc2sgY29udGFpbmluZyB0aGUgI1dlYktpdEZp
bmRPcHRpb25zIGFzc29jaWF0ZWQgd2l0aAorICogdGhlIGN1cnJlbnQgc2VhcmNoLgorICoKKyAq
IFJldHVybnM6IGEgYml0bWFzayBjb250YWluaW5nIHRoZSAjV2ViS2l0RmluZE9wdGlvbnMgYXNz
b2NpYXRlZAorICogd2l0aCB0aGUgY3VycmVudCBzZWFyY2guCisgKi8KK2d1aW50IHdlYmtpdF9m
aW5kX2NvbnRyb2xsZXJfZ2V0X29wdGlvbnMoV2ViS2l0RmluZENvbnRyb2xsZXIqIGZpbmRDb250
cm9sbGVyKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19GSU5EX0NPTlRS
T0xMRVIoZmluZENvbnRyb2xsZXIpLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUpOworCisgICAg
cmV0dXJuIGZpbmRDb250cm9sbGVyLT5wcml2LT5maW5kT3B0aW9uczsKK30KKworLyoqCisgKiB3
ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9tYXhfbWF0Y2hfY291bnQ6CisgKiBAZmluZF9jb250
cm9sbGVyOiB0aGUgI1dlYktpdEZpbmRDb250cm9sbGVyCisgKgorICogR2V0cyB0aGUgbWF4aW11
bSBudW1iZXIgb2YgbWF0Y2hlcyB0byByZXBvcnQgZHVyaW5nIGEgdGV4dAorICogbG9va3VwLiBU
aGlzIG51bWJlciBpcyBwYXNzZWQgYXMgdGhlIGxhc3QgYXJndW1lbnQgb2YKKyAqIHdlYmtpdF9m
aW5kX2NvbnRyb2xsZXJfc2VhcmNoKCkgb3IKKyAqIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfY291
bnRfbWF0Y2hlcygpLgorICoKKyAqIFJldHVybnM6IHRoZSBtYXhpbXVtIG51bWJlciBvZiBtYXRj
aGVzIHRvIHJlcG9ydC4KKyAqLworZ3VpbnQgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfbWF4
X21hdGNoX2NvdW50KFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxlcikKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRklORF9DT05UUk9MTEVSKGZpbmRDb250
cm9sbGVyKSwgMCk7CisKKyAgICByZXR1cm4gZmluZENvbnRyb2xsZXItPnByaXYtPm1heE1hdGNo
Q291bnQ7Cit9CisKKy8qKgorICogd2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfd2ViX3ZpZXc6
CisgKiBAZmluZF9jb250cm9sbGVyOiB0aGUgI1dlYktpdEZpbmRDb250cm9sbGVyCisgKgorICog
R2V0cyB0aGUgI1dlYktpdFdlYlZpZXcgdGhpcyBmaW5kIGNvbnRyb2xsZXIgaXMgYXNzb2NpYXRl
ZCB0by4gRG8KKyAqIG5vdCB1bnJlZiB0aGUgcmV0dXJuZWQgaW5zdGFuY2UgYXMgaXQgYmVsb25n
cyB0byB0aGUKKyAqICNXZWJLaXRGaW5kQ29udHJvbGxlci4KKyAqCisgKiBSZXR1cm5zOiAodHJh
bnNmZXIgbm9uZSk6IHRoZSAjV2ViS2l0V2ViVmlldy4KKyAqLworV2ViS2l0V2ViVmlldyogd2Vi
a2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfd2ViX3ZpZXcoV2ViS2l0RmluZENvbnRyb2xsZXIqIGZp
bmRDb250cm9sbGVyKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19GSU5E
X0NPTlRST0xMRVIoZmluZENvbnRyb2xsZXIpLCAwKTsKKworICAgIHJldHVybiBmaW5kQ29udHJv
bGxlci0+cHJpdi0+d2ViVmlldzsKK30KKworc3RhdGljIHZvaWQgd2ViS2l0RmluZENvbnRyb2xs
ZXJQZXJmb3JtKFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxlciwgV2ViS2l0Rmlu
ZENvbnRyb2xsZXJPcGVyYXRpb24gb3BlcmF0aW9uKQoreworICAgIFdLRmluZE9wdGlvbnMgd2tG
aW5kT3B0aW9ucyA9IHN0YXRpY19jYXN0PFdLRmluZE9wdGlvbnM+KGZpbmRDb250cm9sbGVyLT5w
cml2LT5maW5kT3B0aW9ucyk7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrU2VhcmNo
VGV4dChBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhmaW5kQ29udHJvbGxl
ci0+cHJpdi0+c2VhcmNoVGV4dC5kYXRhKCkpKTsKKyAgICBXS1BhZ2VSZWYgd2tQYWdlID0gZ2V0
V0tQYWdlRnJvbVdlYktpdFdlYlZpZXcoZmluZENvbnRyb2xsZXItPnByaXYtPndlYlZpZXcpOwor
CisgICAgaWYgKG9wZXJhdGlvbiA9PSBGaW5kT3BlcmF0aW9uKSB7CisgICAgICAgIC8vIFVuY29u
ZGl0aW9uYWxseSBoaWdobGlnaHQgdGV4dCBtYXRjaGVzLiBXSzEgQVBJIHdhcyBmb3JjaW5nCisg
ICAgICAgIC8vIGNsaWVudHMgdG8gZW5hYmxlL2Rpc2FibGUgaGlnaGxpZ2h0aW5nLiBTaW5jZSBt
b3N0IG9mIHRoZW0KKyAgICAgICAgLy8gKGFsbD8pIHdoZXJlIHVzaW5nIGhpZ2hsaWdodGluZyB3
ZSBkZWNpZGVkIHRvIHNpbXBsaWZ5IHRoZQorICAgICAgICAvLyBXSzIgQVBJIGFuZCB1bmNvbmRp
dGlvbmFsbHkgc2hvdyBoaWdobGlnaHRzLgorICAgICAgICB3a0ZpbmRPcHRpb25zID0gc3RhdGlj
X2Nhc3Q8V0tGaW5kT3B0aW9ucz4oZmluZENvbnRyb2xsZXItPnByaXYtPmZpbmRPcHRpb25zIHwg
a1dLRmluZE9wdGlvbnNTaG93SGlnaGxpZ2h0KTsKKyAgICAgICAgV0tQYWdlRmluZFN0cmluZyh3
a1BhZ2UsIHdrU2VhcmNoVGV4dC5nZXQoKSwgd2tGaW5kT3B0aW9ucywgZmluZENvbnRyb2xsZXIt
PnByaXYtPm1heE1hdGNoQ291bnQpOworICAgIH0gZWxzZQorICAgICAgICBXS1BhZ2VDb3VudFN0
cmluZ01hdGNoZXMod2tQYWdlLCB3a1NlYXJjaFRleHQuZ2V0KCksIHdrRmluZE9wdGlvbnMsIGZp
bmRDb250cm9sbGVyLT5wcml2LT5tYXhNYXRjaENvdW50KTsKK30KKworc3RhdGljIGlubGluZSB2
b2lkIHdlYktpdEZpbmRDb250cm9sbGVyU2V0U2VhcmNoRGF0YShXZWJLaXRGaW5kQ29udHJvbGxl
ciogZmluZENvbnRyb2xsZXIsIGNvbnN0IGdjaGFyKiBzZWFyY2hUZXh0LCBndWludCBmaW5kT3B0
aW9ucywgZ3VpbnQgbWF4TWF0Y2hDb3VudCkKK3sKKyAgICBmaW5kQ29udHJvbGxlci0+cHJpdi0+
c2VhcmNoVGV4dCA9IHNlYXJjaFRleHQ7CisgICAgZmluZENvbnRyb2xsZXItPnByaXYtPmZpbmRP
cHRpb25zID0gZmluZE9wdGlvbnM7CisgICAgZmluZENvbnRyb2xsZXItPnByaXYtPm1heE1hdGNo
Q291bnQgPSBtYXhNYXRjaENvdW50OworfQorCisvKioKKyAqIHdlYmtpdF9maW5kX2NvbnRyb2xs
ZXJfc2VhcmNoOgorICogQGZpbmRfY29udHJvbGxlcjogdGhlICNXZWJLaXRGaW5kQ29udHJvbGxl
cgorICogQHNlYXJjaF90ZXh0OiB0aGUgdGV4dCB0byBsb29rIGZvcgorICogQGZpbmRfb3B0aW9u
czogYSBiaXRtYXNrIHdpdGggdGhlICNXZWJLaXRGaW5kT3B0aW9ucyB1c2VkIGluIHRoZSBzZWFy
Y2gKKyAqIEBtYXhfbWF0Y2hfY291bnQ6IHRoZSBtYXhpbXVtIG51bWJlciBvZiBtYXRjaGVzIGFs
bG93ZWQgaW4gdGhlIHNlYXJjaAorICoKKyAqIExvb2tzIGZvciBAc2VhcmNoX3RleHQgaW4gdGhl
ICNXZWJLaXRXZWJWaWV3IGFzc29jaWF0ZWQgd2l0aAorICogQGZpbmRfY29udHJvbGxlciBzaW5j
ZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkb2N1bWVudC4gVGhlIG91dGNvbWUKKyAqIG9mIHRoZSBz
ZWFyY2ggd2lsbCBiZSBhc3luY2hyb25vdXNseSBwcm92aWRlZCBieSB0aGUKKyAqIFdlYktpdEZp
bmRDb250cm9sbGVyOjpmb3VuZC10ZXh0IGFuZAorICogV2ViS2l0RmluZENvbnRyb2xsZXI6OmZh
aWxlZC10by1maW5kLXRleHQuCisgKgorICogVG8gbG9vayBmb3IgdGhlIG5leHQgb3IgcHJldmlv
dXMgb2NjdXJyZW5jZXMgb2YgdGhlIHNhbWUgdGV4dAorICogd2l0aCB0aGUgc2FtZSBmaW5kIG9w
dGlvbnMgdXNlIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX25leHQoKQorICogYW5kL29y
IHdlYmtpdF9maW5kX29wdGlvbnNfcHJldmlvdXMoKS4gVGhlCisgKiAjV2ViS2l0RmluZENvbnRy
b2xsZXIgd2lsbCB1c2UgdGhlIHNhbWUgdGV4dCBhbmQgb3B0aW9ucyBmb3IgdGhlCisgKiBmb2xs
b3dpbmcgc2VhcmNoZXMgdW5sZXNzIHRoZXkgYXJlIG1vZGlmaWVkIGJ5IGFub3RoZXIgY2FsbCB0
byB0aGlzCisgKiBtZXRob2QuCisgKgorICogTm90ZSB0aGF0IGlmIHRoZSBudW1iZXIgb2YgbWF0
Y2hlcyBpcyBoaWdoZXIgdGhhbiBAbWF4X21hdGNoX2NvdW50CisgKiB0aGVuIFdlYktpdEZpbmRD
b250cm9sbGVyOjpmb3VuZC10ZXh0IHdpbGwgcmVwb3J0IEdfTUFYVUlOVCBtYXRjaGVzCisgKiBp
bnN0ZWFkIG9mIHRoZSBhY3R1YWwgbnVtYmVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBh
bHNvIGhpZ2hsaWdoIHVwIHRvIEBtYXhfbWF0Y2hfY291bnQKKyAqIG1hY2hlcy4gQ2FsbGVycyBz
aG91bGQgY2FsbCB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9maW5pc2goKQorICogdG8g
dW5oaWdobGlnaHQgdGhlbS4KKyAqLwordm9pZCB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJj
aChXZWJLaXRGaW5kQ29udHJvbGxlciogZmluZENvbnRyb2xsZXIsIGNvbnN0IGdjaGFyKiBzZWFy
Y2hUZXh0LCBndWludCBmaW5kT3B0aW9ucywgZ3VpbnQgbWF4TWF0Y2hDb3VudCkKK3sKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19GSU5EX0NPTlRST0xMRVIoZmluZENvbnRyb2xsZXIp
KTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlYXJjaFRleHQpOworCisgICAgd2ViS2l0RmluZENv
bnRyb2xsZXJTZXRTZWFyY2hEYXRhKGZpbmRDb250cm9sbGVyLCBzZWFyY2hUZXh0LCBmaW5kT3B0
aW9ucywgbWF4TWF0Y2hDb3VudCk7CisgICAgd2ViS2l0RmluZENvbnRyb2xsZXJQZXJmb3JtKGZp
bmRDb250cm9sbGVyLCBGaW5kT3BlcmF0aW9uKTsKK30KKworLyoqCisgKiB3ZWJraXRfZmluZF9j
b250cm9sbGVyX3NlYXJjaF9uZXh0OgorICogQGZpbmRfY29udHJvbGxlcjogdGhlICNXZWJLaXRG
aW5kQ29udHJvbGxlcgorICoKKyAqIExvb2tzIGZvciB0aGUgbmV4dCBvY2N1cnJlbmNlIG9mIHRo
ZSBzZWFyY2ggdGV4dC4KKyAqCisgKiBDYWxsaW5nIHRoaXMgbWV0aG9kIGJlZm9yZSB3ZWJraXRf
ZmluZF9jb250cm9sbGVyX3NlYXJjaCgpIG9yCisgKiB3ZWJraXRfZmluZF9jb250cm9sbGVyX2Nv
dW50X21hdGNoZXMoKSBpcyBhIHByb2dyYW1taW5nIGVycm9yLgorICovCit2b2lkIHdlYmtpdF9m
aW5kX2NvbnRyb2xsZXJfc2VhcmNoX25leHQoV2ViS2l0RmluZENvbnRyb2xsZXIqIGZpbmRDb250
cm9sbGVyKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0ZJTkRfQ09OVFJPTExF
UihmaW5kQ29udHJvbGxlcikpOworCisgICAgZmluZENvbnRyb2xsZXItPnByaXYtPmZpbmRPcHRp
b25zID0gZmluZENvbnRyb2xsZXItPnByaXYtPmZpbmRPcHRpb25zICYgfldFQktJVF9GSU5EX09Q
VElPTlNfQkFDS1dBUkRTOworICAgIHdlYktpdEZpbmRDb250cm9sbGVyUGVyZm9ybShmaW5kQ29u
dHJvbGxlciwgRmluZE9wZXJhdGlvbik7Cit9CisKKy8qKgorICogd2Via2l0X2ZpbmRfY29udHJv
bGxlcl9zZWFyY2hfcHJldmlvdXM6CisgKiBAZmluZF9jb250cm9sbGVyOiB0aGUgI1dlYktpdEZp
bmRDb250cm9sbGVyCisgKgorICogTG9va3MgZm9yIHRoZSBwcmV2aW91cyBvY2N1cnJlbmNlIG9m
IHRoZSBzZWFyY2ggdGV4dC4KKyAqCisgKiBDYWxsaW5nIHRoaXMgbWV0aG9kIGJlZm9yZSB3ZWJr
aXRfZmluZF9jb250cm9sbGVyX3NlYXJjaCgpIG9yCisgKiB3ZWJraXRfZmluZF9jb250cm9sbGVy
X2NvdW50X21hdGNoZXMoKSBpcyBhIHByb2dyYW1taW5nIGVycm9yLgorICovCit2b2lkIHdlYmtp
dF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX3ByZXZpb3VzKFdlYktpdEZpbmRDb250cm9sbGVyKiBm
aW5kQ29udHJvbGxlcikKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19GSU5EX0NP
TlRST0xMRVIoZmluZENvbnRyb2xsZXIpKTsKKworICAgIGZpbmRDb250cm9sbGVyLT5wcml2LT5m
aW5kT3B0aW9ucyA9IGZpbmRDb250cm9sbGVyLT5wcml2LT5maW5kT3B0aW9ucyB8IFdFQktJVF9G
SU5EX09QVElPTlNfQkFDS1dBUkRTOworICAgIHdlYktpdEZpbmRDb250cm9sbGVyUGVyZm9ybShm
aW5kQ29udHJvbGxlciwgRmluZE9wZXJhdGlvbik7Cit9CisKKy8qKgorICogd2Via2l0X2ZpbmRf
Y29udHJvbGxlcl9jb3VudF9tYXRjaGVzOgorICogQGZpbmRfY29udHJvbGxlcjogdGhlICNXZWJL
aXRGaW5kQ29udHJvbGxlcgorICogQHNlYXJjaF90ZXh0OiB0aGUgdGV4dCB0byBsb29rIGZvcgor
ICogQGZpbmRfb3B0aW9uczogYSBiaXRtYXNrIHdpdGggdGhlICNXZWJLaXRGaW5kT3B0aW9ucyB1
c2VkIGluIHRoZSBzZWFyY2gKKyAqIEBtYXhfbWF0Y2hfY291bnQ6IHRoZSBtYXhpbXVtIG51bWJl
ciBvZiBtYXRjaGVzIGFsbG93ZWQgaW4gdGhlIHNlYXJjaAorICoKKyAqIENvdW50cyB0aGUgbnVt
YmVyIG9mIG1hdGNoZXMgZm9yIEBzZWFyY2hfdGV4dCBmb3VuZCBpbiB0aGUKKyAqICNXZWJLaXRX
ZWJWaWV3IHdpdGggdGhlIHByb3ZpZGVkIEBmaW5kX29wdGlvbnMuIFRoZSBudW1iZXIgb2YKKyAq
IG1hdGNoZXMgd2lsbCBiZSBwcm92aWRlZCBieSB0aGUKKyAqIFdlYktpdEZpbmRDb250cm9sbGVy
Ojpjb3VudGVkLW1hdGNoZXMgc2lnbmFsLgorICovCit2b2lkIHdlYmtpdF9maW5kX2NvbnRyb2xs
ZXJfY291bnRfbWF0Y2hlcyhXZWJLaXRGaW5kQ29udHJvbGxlciogZmluZENvbnRyb2xsZXIsIGNv
bnN0IGdjaGFyKiBzZWFyY2hUZXh0LCBndWludCBmaW5kT3B0aW9ucywgZ3VpbnQgbWF4TWF0Y2hD
b3VudCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19GSU5EX0NPTlRST0xMRVIo
ZmluZENvbnRyb2xsZXIpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlYXJjaFRleHQpOworCisg
ICAgd2ViS2l0RmluZENvbnRyb2xsZXJTZXRTZWFyY2hEYXRhKGZpbmRDb250cm9sbGVyLCBzZWFy
Y2hUZXh0LCBmaW5kT3B0aW9ucywgbWF4TWF0Y2hDb3VudCk7CisgICAgd2ViS2l0RmluZENvbnRy
b2xsZXJQZXJmb3JtKGZpbmRDb250cm9sbGVyLCBDb3VudE9wZXJhdGlvbik7Cit9CisKKy8qKgor
ICogd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfZmluaXNoOgorICogQGZpbmRfY29udHJv
bGxlcjogYSAjV2ViS2l0RmluZENvbnRyb2xsZXIKKyAqCisgKiBGaW5pc2hlcyBhIGZpbmQgb3Bl
cmF0aW9uIHN0YXJ0ZWQgYnkKKyAqIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoKCkuIEl0
IHdpbGwgYmFzaWNhbGx5IHVuaGlnaGxpZ2h0CisgKiBldmVyeSB0ZXh0IG1hdGNoIGZvdW5kLgor
ICoqLwordm9pZCB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9maW5pc2goV2ViS2l0Rmlu
ZENvbnRyb2xsZXIgKmZpbmRDb250cm9sbGVyKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0lTX0ZJTkRfQ09OVFJPTExFUihmaW5kQ29udHJvbGxlcikpOworCisgICAgV0tQYWdlSGlk
ZUZpbmRVSShnZXRXS1BhZ2VGcm9tV2ViS2l0V2ViVmlldyhmaW5kQ29udHJvbGxlci0+cHJpdi0+
d2ViVmlldykpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0RmluZENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdEZpbmRDb250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjA1OTA2MDlhOGVlZTJiOGQ5
NmQwMzRmNTRhYTA1OGUwNWYxOWM2YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbmRDb250cm9sbGVyLmgKQEAgLTAsMCArMSwxMTYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChf
X1dFQktJVDJfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoV0VCS0lUMl9DT01QSUxBVElPTikKKyNl
cnJvciAiT25seSA8d2Via2l0Mi93ZWJraXQyLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4i
CisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRGaW5kQ29udHJvbGxlcl9oCisjZGVmaW5lIFdlYktp
dEZpbmRDb250cm9sbGVyX2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8
d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJL
SVRfVFlQRV9GSU5EX0NPTlRST0xMRVIgICAgICAgICAgICAod2Via2l0X2ZpbmRfY29udHJvbGxl
cl9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRklORF9DT05UUk9MTEVSKG9iaikgICAgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX0ZJTkRf
Q09OVFJPTExFUiwgV2ViS2l0RmluZENvbnRyb2xsZXIpKQorI2RlZmluZSBXRUJLSVRfRklORF9D
T05UUk9MTEVSX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNz
KSwgIFdFQktJVF9UWVBFX0ZJTkRfQ09OVFJPTExFUiwgV2ViS2l0RmluZENvbnRyb2xsZXJDbGFz
cykpCisjZGVmaW5lIFdFQktJVF9JU19GSU5EX0NPTlRST0xMRVIob2JqKSAgICAgICAgIChHX1RZ
UEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfRklORF9DT05UUk9MTEVS
KSkKKyNkZWZpbmUgV0VCS0lUX0lTX0ZJTkRfQ09OVFJPTExFUl9DTEFTUyhrbGFzcykgKEdfVFlQ
RV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9GSU5EX0NPTlRST0xMRVIp
KQorI2RlZmluZSBXRUJLSVRfRklORF9DT05UUk9MTEVSX0dFVF9DTEFTUyhvYmopICAoR19UWVBF
X0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX0ZJTkRfQ09OVFJPTExFUiwg
V2ViS2l0RmluZENvbnRyb2xsZXJDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRGaW5k
Q29udHJvbGxlclByaXZhdGUgV2ViS2l0RmluZENvbnRyb2xsZXJQcml2YXRlOwordHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdEZpbmRDb250cm9sbGVyQ2xhc3MgICBXZWJLaXRGaW5kQ29udHJvbGxlckNs
YXNzOworCisvKioKKyAqIFdlYktpdEZpbmRPcHRpb25zOgorICogQFdFQktJVF9GSU5EX09QVElP
TlNfTk9ORTogbm8gc2VhcmNoIGZsYWdzLCB0aGlzIG1lYW5zIGEgY2FzZQorICogICBzZW5zaXRp
dmUsIG5vIHdyYXAsIGZvcndhcmQgb25seSBzZWFyY2guCisgKiBAV0VCS0lUX0ZJTkRfT1BUSU9O
U19DQVNFX0lOU0VOU0lUSVZFOiBjYXNlIGluc2Vuc2l0aXZlIHNlYXJjaC4KKyAqIEBXRUJLSVRf
RklORF9PUFRJT05TX0FUX1dPUkRfU1RBUlRTOiBzZWFyY2ggdGV4dCBvbmx5IGF0IHRoZQorICog
ICBiZWdpbmluZyBvZiB0aGUgd29yZHMuCisgKiBAV0VCS0lUX0ZJTkRfT1BUSU9OU19UUkVBVF9N
RURJQUxfQ0FQSVRBTF9BU19XT1JEX1NUQVJUOiB0cmVhdAorICogICBjYXBpdGFsIGxldHRlcnMg
aW4gdGhlIG1pZGRsZSBvZiB3b3JkcyBhcyB3b3JkIHN0YXJ0LgorICogQFdFQktJVF9GSU5EX09Q
VElPTlNfQkFDS1dBUkRTOiBzZWFyY2ggYmFja3dhcmRzLgorICogQFdFQktJVF9GSU5EX09QVElP
TlNfV1JBUF9BUk9VTkQ6IGlmIG5vdCBwcmVzZW50IHNlYXJjaCB3aWxsIHN0b3AKKyAqICAgYXQg
dGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQuCisgKgorICogRW51bSB2YWx1ZXMgdXNlZCB0byBzcGVj
aWZ5IHNlYXJjaCBvcHRpb25zLgorICovCit0eXBlZGVmIGVudW0geworICBXRUJLSVRfRklORF9P
UFRJT05TX05PTkUsCisKKyAgV0VCS0lUX0ZJTkRfT1BUSU9OU19DQVNFX0lOU0VOU0lUSVZFID0g
ICAgICAgICAgICAgICAgICAgMSA8PCAwLAorICBXRUJLSVRfRklORF9PUFRJT05TX0FUX1dPUkRf
U1RBUlRTID0gICAgICAgICAgICAgICAgICAgICAxIDw8IDEsCisgIFdFQktJVF9GSU5EX09QVElP
TlNfVFJFQVRfTUVESUFMX0NBUElUQUxfQVNfV09SRF9TVEFSVCA9IDEgPDwgMiwKKyAgV0VCS0lU
X0ZJTkRfT1BUSU9OU19CQUNLV0FSRFMgPSAgICAgICAgICAgICAgICAgICAgICAgICAgMSA8PCAz
LAorICBXRUJLSVRfRklORF9PUFRJT05TX1dSQVBfQVJPVU5EID0gICAgICAgICAgICAgICAgICAg
ICAgICAxIDw8IDQsCit9IFdlYktpdEZpbmRPcHRpb25zOworCitzdHJ1Y3QgX1dlYktpdEZpbmRD
b250cm9sbGVyIHsKKyAgICBHT2JqZWN0IHBhcmVudDsKKworICAvKjwgcHJpdmF0ZSA+Ki8KKyAg
V2ViS2l0RmluZENvbnRyb2xsZXJQcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRG
aW5kQ29udHJvbGxlckNsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsK
KworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfdHlwZSAgICAg
ICAgICAgICh2b2lkKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZmluZF9jb250cm9sbGVy
X3NlYXJjaCAgICAgICAgICAgICAgKFdlYktpdEZpbmRDb250cm9sbGVyICpmaW5kX2NvbnRyb2xs
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdj
aGFyICAgICAgICAgICpzZWFyY2hfdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgICAgIGZpbmRfb3B0aW9ucywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAg
ICAgIG1heF9tYXRjaF9jb3VudCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2ZpbmRfY29u
dHJvbGxlcl9zZWFyY2hfZmluaXNoICAgICAgIChXZWJLaXRGaW5kQ29udHJvbGxlciAqZmluZF9j
b250cm9sbGVyKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZmluZF9jb250cm9sbGVyX3Nl
YXJjaF9uZXh0ICAgICAgICAgKFdlYktpdEZpbmRDb250cm9sbGVyICpmaW5kX2NvbnRyb2xsZXIp
OworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX3ByZXZp
b3VzICAgICAoV2ViS2l0RmluZENvbnRyb2xsZXIgKmZpbmRfY29udHJvbGxlcik7CisKK1dFQktJ
VF9BUEkgdm9pZAord2Via2l0X2ZpbmRfY29udHJvbGxlcl9jb3VudF9tYXRjaGVzICAgICAgIChX
ZWJLaXRGaW5kQ29udHJvbGxlciAqZmluZF9jb250cm9sbGVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAqc2VhcmNoX3Rl
eHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAg
ICAgICAgICAgICAgICBmaW5kX29wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgICAgICBtYXhfbWF0Y2hfY291bnQpOwor
CitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICoKK3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X3Nl
YXJjaF90ZXh0ICAgICAoV2ViS2l0RmluZENvbnRyb2xsZXIgKmZpbmRfY29udHJvbGxlcik7CisK
K1dFQktJVF9BUEkgZ3VpbnQKK3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X29wdGlvbnMgICAg
ICAgICAoV2ViS2l0RmluZENvbnRyb2xsZXIgKmZpbmRfY29udHJvbGxlcik7CisKK1dFQktJVF9B
UEkgZ3VpbnQKK3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X21heF9tYXRjaF9jb3VudCAoV2Vi
S2l0RmluZENvbnRyb2xsZXIgKmZpbmRfY29udHJvbGxlcik7CisKK1dFQktJVF9BUEkgV2ViS2l0
V2ViVmlldyAqCit3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF93ZWJfdmlldyAgICAgICAgKFdl
YktpdEZpbmRDb250cm9sbGVyICpmaW5kX2NvbnRyb2xsZXIpOworCitHX0VORF9ERUNMUworCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Vmlldy5jcHAKaW5kZXggZmNhYTJkYjFkMTE0NjYyNWVlYmM2Y2I5ZTFiZTMwMGExMjMzZTdmYy4u
NmE3ZGM4MDA3NzlmMWYyNmE0YzA2ZTFhOWM4ZjQ0ZDQ0MGI2MmE4MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKQEAgLTgzLDYg
KzgzLDcgQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3UHJpdmF0ZSB7CiAgICAgR1JlZlB0cjxXZWJL
aXRCYWNrRm9yd2FyZExpc3Q+IGJhY2tGb3J3YXJkTGlzdDsKICAgICBHUmVmUHRyPFdlYktpdFNl
dHRpbmdzPiBzZXR0aW5nczsKICAgICBHUmVmUHRyPFdlYktpdFdpbmRvd1Byb3BlcnRpZXM+IHdp
bmRvd1Byb3BlcnRpZXM7CisgICAgR1JlZlB0cjxXZWJLaXRGaW5kQ29udHJvbGxlcj4gZmluZENv
bnRyb2xsZXI7CiB9OwogCiBzdGF0aWMgZ3VpbnQgc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAs
IH07CkBAIC0xMjY3LDMgKzEyNjgsMjMgQEAgZ2RvdWJsZSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3pv
b21fbGV2ZWwoV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAgICBXS1BhZ2VSZWYgd2tQYWdlID0g
dG9BUEkod2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKFdFQktJVF9XRUJfVklFV19CQVNFKHdlYlZp
ZXcpKSk7CiAgICAgcmV0dXJuIFdLUGFnZUdldFBhZ2Vab29tRmFjdG9yKHdrUGFnZSk7CiB9CisK
Ky8qKgorICogd2Via2l0X3dlYl92aWV3X2dldF9maW5kX2NvbnRyb2xsZXI6CisgKiBAd2ViX3Zp
ZXc6IHRoZSAjV2ViS2l0V2ViVmlldworICoKKyAqIEdldHMgdGhlICNXZWJLaXRGaW5kQ29udHJv
bGxlciB0aGF0IHdpbGwgYWxsb3cgdGhlIGNhbGxlciB0byBxdWVyeQorICogdGhlICNXZWJLaXRX
ZWJWaWV3IGZvciB0aGUgdGV4dCB0byBsb29rIGZvci4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNm
ZXIgbm9uZSk6IHRoZSAjV2ViS2l0RmluZENvbnRyb2xsZXIgYXNzb2NpYXRlZCB0bworICogdGhp
cyBwYXJ0aWN1bGFyICNXZWJLaXRXZWJWaWV3LgorICovCitXZWJLaXRGaW5kQ29udHJvbGxlciog
d2Via2l0X3dlYl92aWV3X2dldF9maW5kX2NvbnRyb2xsZXIoV2ViS2l0V2ViVmlldyAqd2ViVmll
dykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmll
dyksIDApOworCisgICAgaWYgKCF3ZWJWaWV3LT5wcml2LT5maW5kQ29udHJvbGxlcikKKyAgICAg
ICAgd2ViVmlldy0+cHJpdi0+ZmluZENvbnRyb2xsZXIgPSBhZG9wdEdSZWYoV0VCS0lUX0ZJTkRf
Q09OVFJPTExFUihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRklORF9DT05UUk9MTEVSLCAid2Vi
LXZpZXciLCB3ZWJWaWV3LCBOVUxMKSkpOworCisgICAgcmV0dXJuIHdlYlZpZXctPnByaXYtPmZp
bmRDb250cm9sbGVyLmdldCgpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlldy5oCmluZGV4IDY5N2ZjZGM4MGU2MDkzYmRiZmQ0YjExYzNlZGE1
Mjk3YzY0NTVjYjAuLjZkNDNhYWM2YjBjNjc2MTZmYzFjMDNhYjQ3MzI3ZTZkZDFmZjk1NzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgK
QEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0QmFja0ZvcndhcmRM
aXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CisjaW5jbHVkZSA8d2Vi
a2l0Mi9XZWJLaXRGaW5kQ29udHJvbGxlci5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2Vi
Q29udGV4dC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0U2V0dGluZ3MuaD4KICNpbmNsdWRl
IDx3ZWJraXQyL1dlYktpdFVSSVJlcXVlc3QuaD4KQEAgLTgwLDkgKzgxLDggQEAgdHlwZWRlZiBl
bnVtIHsKICNkZWZpbmUgV0VCS0lUX0lTX1dFQl9WSUVXX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NI
RUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX1dFQl9WSUVXKSkKICNkZWZpbmUg
V0VCS0lUX1dFQl9WSUVXX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFT
Uygob2JqKSwgIFdFQktJVF9UWVBFX1dFQl9WSUVXLCBXZWJLaXRXZWJWaWV3Q2xhc3MpKQogCi10
eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmlldyBXZWJLaXRXZWJWaWV3OwotdHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdFdlYlZpZXdDbGFzcyBXZWJLaXRXZWJWaWV3Q2xhc3M7CiB0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0V2ViVmlld1ByaXZhdGUgV2ViS2l0V2ViVmlld1ByaXZhdGU7Cit0eXBlZGVmIHN0
cnVjdCBfV2ViS2l0V2ViVmlld0NsYXNzICAgV2ViS2l0V2ViVmlld0NsYXNzOwogCiAvKioKICAq
IFdlYktpdExvYWRFdmVudApAQCAtMjQ1LDYgKzI0NSw5IEBAIHdlYmtpdF93ZWJfdmlld19zZXRf
em9vbV9sZXZlbCAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJf
dmllCiBXRUJLSVRfQVBJIGdkb3VibGUKIHdlYmtpdF93ZWJfdmlld19nZXRfem9vbV9sZXZlbCAg
ICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7CiAKK1dF
QktJVF9BUEkgV2ViS2l0RmluZENvbnRyb2xsZXIgKgord2Via2l0X3dlYl92aWV3X2dldF9maW5k
X2NvbnRyb2xsZXIgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3
KTsKKwogR19FTkRfREVDTFMKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbAppbmRleCBjNmY5
NDNhYjJhNjg4MDI5ZDk1NmViYjY4NTBmZWNiMWYyNGMyMGExLi5lMTYyZjFlZGJmMTdiMzc2ZmZl
YTJjN2M2OGJkZDg4MjE5NjI3YTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKQEAgLTI0LDYgKzI0
LDcgQEAKICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0UG9saWN5RGVjaXNpb24ueG1s
Ii8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNp
c2lvbi54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RXJyb3IueG1sIi8+
CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdEZpbmRDb250cm9sbGVyLnhtbCIvPgog
ICA8L2NoYXB0ZXI+CiAKICAgPGluZGV4IGlkPSJpbmRleC1hbGwiPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4
dCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0
aW9ucy50eHQKaW5kZXggZWY0NGIyYmVkNjdjNjQxYzcwZjVhNDhlZDg0YTc5MjgwMGUwYjVhZi4u
M2YxZjQ1ZWQ4NDYwODk2Yjc0ZjIzZTg5NTIwM2MyMzZhMGZiYjI2NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4
dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGst
c2VjdGlvbnMudHh0CkBAIC03Niw2ICs3Niw3IEBAIHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGlu
Z3MKIHdlYmtpdF93ZWJfdmlld19nZXRfd2luZG93X3Byb3BlcnRpZXMKIHdlYmtpdF93ZWJfdmll
d19zZXRfem9vbV9sZXZlbAogd2Via2l0X3dlYl92aWV3X2dldF96b29tX2xldmVsCit3ZWJraXRf
d2ViX3ZpZXdfZ2V0X2ZpbmRfY29udHJvbGxlcgogCiA8U1VCU0VDVElPTiBTdGFuZGFyZD4KIFdl
YktpdFdlYlZpZXdDbGFzcwpAQCAtMzczLDMgKzM3NCwzMCBAQCB3ZWJraXRfcG9saWN5X2Vycm9y
X3F1YXJrCiB3ZWJraXRfZG93bmxvYWRfZXJyb3JfcXVhcmsKIDwvU0VDVElPTj4KIAorPFNFQ1RJ
T04+Cis8RklMRT5XZWJLaXRGaW5kQ29udHJvbGxlcjwvRklMRT4KK1dlYktpdEZpbmRDb250cm9s
bGVyCitXZWJLaXRGaW5kT3B0aW9ucword2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2gKK3dl
YmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX2ZpbmlzaAord2Via2l0X2ZpbmRfY29udHJvbGxl
cl9zZWFyY2hfbmV4dAord2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfcHJldmlvdXMKK3dl
YmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X3NlYXJjaF90ZXh0Cit3ZWJraXRfZmluZF9jb250cm9s
bGVyX2NvdW50X21hdGNoZXMKK3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X29wdGlvbnMKK3dl
YmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X21heF9tYXRjaF9jb3VudAord2Via2l0X2ZpbmRfY29u
dHJvbGxlcl9nZXRfd2ViX3ZpZXcKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRGaW5k
Q29udHJvbGxlckNsYXNzCitXRUJLSVRfVFlQRV9GSU5EX0NPTlRST0xMRVIKK1dFQktJVF9GSU5E
X0NPTlRST0xMRVIKK1dFQktJVF9JU19GSU5EX0NPTlRST0xMRVIKK1dFQktJVF9GSU5EX0NPTlRS
T0xMRVJfQ0xBU1MKK1dFQktJVF9JU19GSU5EX0NPTlRST0xMRVJfQ0xBU1MKK1dFQktJVF9GSU5E
X0NPTlRST0xMRVJfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFByaXZhdGU+CitXZWJLaXRGaW5k
Q29udHJvbGxlclByaXZhdGUKK3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X3R5cGUKKzwvU0VD
VElPTj4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mv
d2Via2l0Mmd0ay50eXBlcyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mv
d2Via2l0Mmd0ay50eXBlcwppbmRleCBjYmEyZGY0MmMzZDUyNDQzMDVlZWU0NjE2YjllNzgzNWFm
ZDFmNjJmLi4yZTBmNTAwMmNhZTczYjgyNTk2NDY4ZGUxYWY2NzBhZDc1OTE1ZDc2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlw
ZXMKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3Rr
LnR5cGVzCkBAIC05LDQgKzksNCBAQCB3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF90eXBlCiB3ZWJr
aXRfdXJpX3JlcXVlc3RfZ2V0X3R5cGUKIHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfdHlw
ZQogd2Via2l0X2Rvd25sb2FkX2dldF90eXBlCi0KK3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0
X3R5cGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
R05VbWFrZWZpbGUuYW0KaW5kZXggMTc1YTE0OWU0MzQ2NDc2MDM4YTNmMTEwZmZmMjdjZDdiYTU2
MGVjNC4uYzg0OGQ0OTYzYWVkYzU1YjExNTkwNGUwMDI0OWU4ZTlhODJlNWViYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0K
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUu
YW0KQEAgLTEsMTEgKzEsMTIgQEAKIFRFU1RfUFJPR1MgKz0gXAotCVByb2dyYW1zL1dlYktpdDJB
UElUZXN0cy9UZXN0V2ViS2l0V2ViQ29udGV4dCBcCi0JUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3Rz
L1Rlc3RXZWJLaXRXZWJWaWV3IFwKLQlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdExvYWRl
ckNsaWVudCBcCi0JUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRTZXR0aW5ncyBc
CiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RCYWNrRm9yd2FyZExpc3QgXAogCVByb2dy
YW1zL1dlYktpdDJBUElUZXN0cy9UZXN0RG93bmxvYWRzIFwKLQlQcm9ncmFtcy9XZWJLaXQyQVBJ
VGVzdHMvVGVzdFdlYktpdFBvbGljeUNsaWVudAorCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9U
ZXN0TG9hZGVyQ2xpZW50IFwKKwlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdEZp
bmRDb250cm9sbGVyIFwKKwlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFBvbGlj
eUNsaWVudCBcCisJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRTZXR0aW5ncyBc
CisJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRXZWJDb250ZXh0IFwKKwlQcm9n
cmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFdlYlZpZXcKIAogbm9pbnN0X1BST0dSQU1T
ICs9ICQoVEVTVF9QUk9HUykKIApAQCAtMTExLDMgKzExMiw5IEBAIFByb2dyYW1zX1dlYktpdDJB
UElUZXN0c19UZXN0RG93bmxvYWRzX1NPVVJDRVMgPSBcCiBQcm9ncmFtc19XZWJLaXQyQVBJVGVz
dHNfVGVzdERvd25sb2Fkc19DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKIFBy
b2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0RG93bmxvYWRzX0xEQUREID0gJCh3ZWJraXQyX3Rl
c3RzX2xkYWRkKQogUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3REb3dubG9hZHNfTERGTEFH
UyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNf
VGVzdFdlYktpdEZpbmRDb250cm9sbGVyX1NPVVJDRVMgPSBcCisJU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEZpbmRDb250cm9sbGVyLmNwcAorUHJvZ3Jh
bXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlcl9DUFBGTEFHUyA9ICQo
d2Via2l0Ml90ZXN0c19jcHBmbGFncykKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2Vi
S2l0RmluZENvbnRyb2xsZXJfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCitQcm9ncmFt
c19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYktpdEZpbmRDb250cm9sbGVyX0xERkxBR1MgPSAkKHdl
YmtpdDJfdGVzdHNfbGRmbGFncykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0RmluZENvbnRyb2xsZXIuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjA5MjJiZjRmMjFiYjI0ZTg4NWUxMTNiZGMyZDllZjU1MmU0ZmU0OWEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9U
ZXN0V2ViS2l0RmluZENvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsMzA2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNs
dWRlICJMb2FkVHJhY2tpbmdUZXN0LmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUg
PHdlYmtpdDIvd2Via2l0Mi5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKwor
c3RhdGljIGNvbnN0IGNoYXIqIHRlc3RTdHJpbmcgPSAiPGh0bWw+PGJvZHk+Zmlyc3QgdGVzdGlu
ZyBzZWNvbmQgdGVzdGluZyBzZWNvbmRIYWxmPC9ib2R5PjwvaHRtbD4iOworCitjbGFzcyBGaW5k
Q29udHJvbGxlclRlc3Q6IHB1YmxpYyBMb2FkVHJhY2tpbmdUZXN0IHsKK3B1YmxpYzoKKyAgICBN
QUtFX0dMSUJfVEVTVF9GSVhUVVJFKEZpbmRDb250cm9sbGVyVGVzdCk7CisKKyAgICBGaW5kQ29u
dHJvbGxlclRlc3QoKQorICAgICAgICA6IG1fcnVuRmluZFVudGlsQ29tcGxldGlvbihmYWxzZSkK
KyAgICAgICAgLCBtX2ZpbmRDb250cm9sbGVyKHdlYmtpdF93ZWJfdmlld19nZXRfZmluZF9jb250
cm9sbGVyKG1fd2ViVmlldykpCisgICAgeworICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRX
aGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKG1fZmluZENvbnRyb2xsZXIuZ2V0KCkpKTsKKyAgICB9
CisKKyAgICB+RmluZENvbnRyb2xsZXJUZXN0KCkKKyAgICB7CisgICAgICAgIGlmIChtX2ZpbmRD
b250cm9sbGVyKQorICAgICAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRj
aGVkKG1fZmluZENvbnRyb2xsZXIuZ2V0KCksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAs
IDAsIHRoaXMpOworICAgIH0KKworICAgIHZvaWQgZmluZChjb25zdCBjaGFyKiBzZWFyY2hUZXh0
LCBndWludCBmaW5kT3B0aW9ucywgZ3VpbnQgbWF4TWF0Y2hDb3VudCkKKyAgICB7CisgICAgICAg
IC8vIER1ZSB0byBodHRwOi8vd2Via2l0Lm9yZy9iLzc2NTIyIHdlIGhhdmUgdG8gYXJ0aWZpY2lh
bGx5CisgICAgICAgIC8vIGFkZCBoZXJlIHRoZSBzaG93IG92ZXJsYXkgb3B0aW9uICh0aGF0IHdl
IGRvIG5vdCBldmVuCisgICAgICAgIC8vIGV4cG9zZSBpbiB0aGUgQVBJKSB0byBnZXQgdGhlIERp
ZEZpbmRTdHJpbmcgbWVzc3NhZ2UKKyAgICAgICAgLy8gaXNzdWVkLiBSZW1vdmUgdGhpcyBvbmNl
IHRoYXQgYnVnIGlzIGZpeGVkLgorICAgICAgICBmaW5kT3B0aW9ucyA9IGZpbmRPcHRpb25zIHwg
MSA8PCA1OworCisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9maW5kQ29udHJvbGxlci5nZXQo
KSwgImZvdW5kLXRleHQiLCBHX0NBTExCQUNLKGZvdW5kVGV4dENhbGxiYWNrKSwgdGhpcyk7Cisg
ICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9maW5kQ29udHJvbGxlci5nZXQoKSwgImZhaWxlZC10
by1maW5kLXRleHQiLCBHX0NBTExCQUNLKGZhaWxlZFRvRmluZFRleHRDYWxsYmFjayksIHRoaXMp
OworICAgICAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaChtX2ZpbmRDb250cm9sbGVy
LmdldCgpLCBzZWFyY2hUZXh0LCBmaW5kT3B0aW9ucywgbWF4TWF0Y2hDb3VudCk7CisgICAgfQor
CisgICAgdm9pZCBjb3VudChjb25zdCBjaGFyKiBzZWFyY2hUZXh0LCBndWludCBmaW5kT3B0aW9u
cywgZ3VpbnQgbWF4TWF0Y2hDb3VudCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
bV9maW5kQ29udHJvbGxlci5nZXQoKSwgImNvdW50ZWQtbWF0Y2hlcyIsIEdfQ0FMTEJBQ0soY291
bnRlZE1hdGNoZXNDYWxsYmFjayksIHRoaXMpOworICAgICAgICB3ZWJraXRfZmluZF9jb250cm9s
bGVyX2NvdW50X21hdGNoZXMobV9maW5kQ29udHJvbGxlci5nZXQoKSwgc2VhcmNoVGV4dCwgZmlu
ZE9wdGlvbnMsIG1heE1hdGNoQ291bnQpOworICAgIH0KKworICAgIHZvaWQgd2FpdFVudGlsRmlu
ZEZpbmlzaGVkKCkKKyAgICB7CisgICAgICAgIG1fcnVuRmluZFVudGlsQ29tcGxldGlvbiA9IHRy
dWU7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBH
UmVmUHRyPFdlYktpdEZpbmRDb250cm9sbGVyPiBtX2ZpbmRDb250cm9sbGVyOworICAgIGJvb2wg
bV90ZXh0Rm91bmQ7CisgICAgdW5zaWduZWQgbV9tYXRjaENvdW50OworCitwcml2YXRlOgorICAg
IGJvb2wgbV9ydW5GaW5kVW50aWxDb21wbGV0aW9uOworCisgICAgc3RhdGljIHZvaWQgZm91bmRU
ZXh0Q2FsbGJhY2soV2ViS2l0RmluZENvbnRyb2xsZXIqLCBndWludCBtYXRjaENvdW50LCBGaW5k
Q29udHJvbGxlclRlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5tX3RleHRGb3VuZCA9
IHRydWU7CisgICAgICAgIHRlc3QtPm1fbWF0Y2hDb3VudCA9IG1hdGNoQ291bnQ7CisgICAgICAg
IGlmICh0ZXN0LT5tX3J1bkZpbmRVbnRpbENvbXBsZXRpb24pCisgICAgICAgICAgICBnX21haW5f
bG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGZh
aWxlZFRvRmluZFRleHRDYWxsYmFjayhXZWJLaXRGaW5kQ29udHJvbGxlciosIEZpbmRDb250cm9s
bGVyVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPm1fdGV4dEZvdW5kID0gZmFsc2U7
CisgICAgICAgIGlmICh0ZXN0LT5tX3J1bkZpbmRVbnRpbENvbXBsZXRpb24pCisgICAgICAgICAg
ICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHN0YXRp
YyB2b2lkIGNvdW50ZWRNYXRjaGVzQ2FsbGJhY2soV2ViS2l0RmluZENvbnRyb2xsZXIqLCBndWlu
dCBtYXRjaENvdW50LCBGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0
ZXN0LT5tX21hdGNoQ291bnQgPSBtYXRjaENvdW50OworICAgICAgICBpZiAodGVzdC0+bV9ydW5G
aW5kVW50aWxDb21wbGV0aW9uKQorICAgICAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5t
X21haW5Mb29wKTsKKyAgICB9Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJU
ZXh0Rm91bmQoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAg
IHRlc3QtPmxvYWRIdG1sKHRlc3RTdHJpbmcsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRG
aW5pc2hlZCgpOworCisgICAgdGVzdC0+ZmluZCgidGVzdGluZyIsIFdFQktJVF9GSU5EX09QVElP
TlNfTk9ORSwgMSk7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBn
X2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RGaW5kQ29u
dHJvbGxlclRleHROb3RGb3VuZChGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0cmluZywgMCk7CisgICAgdGVzdC0+d2Fp
dFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5maW5kKCJub3RGb3VuZCIsIFdFQktJ
VF9GSU5EX09QVElPTlNfTk9ORSwgMSk7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVk
KCk7CisKKyAgICBnX2Fzc2VydCghdGVzdC0+bV90ZXh0Rm91bmQpOworfQorCitzdGF0aWMgdm9p
ZCB0ZXN0RmluZENvbnRyb2xsZXJNYXRjaENvdW50KEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3RyaW5nLCAwKTsKKyAg
ICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPmZpbmQoInRlc3Rp
bmciLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDIpOworICAgIHRlc3QtPndhaXRVbnRpbEZp
bmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDIpOwor
ICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEZp
bmRDb250cm9sbGVyTWF4TWF0Y2hDb3VudChGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0cmluZywgMCk7CisgICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5maW5kKCJ0ZXN0aW5nIiwg
V0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAxKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmlu
aXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3VudCA9PSBHX01BWFVJTlQp
OworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKK30KKworc3RhdGljIHZvaWQgdGVz
dEZpbmRDb250cm9sbGVyTmV4dChGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0cmluZywgMCk7CisgICAgdGVzdC0+d2Fp
dFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5maW5kKCJ0ZXN0aW5nIiwgV0VCS0lU
X0ZJTkRfT1BUSU9OU19OT05FLCAyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQo
KTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKKyAgICBnX2Fzc2VydCh0ZXN0
LT5tX21hdGNoQ291bnQgPT0gMik7CisKKyAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJj
aF9uZXh0KHRlc3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpOworICAgIHRlc3QtPndhaXRVbnRp
bEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworICAg
IGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3VudCA9PSAyKTsKKyAgICBnX2Fzc2VydCghKHdlYmtp
dF9maW5kX2NvbnRyb2xsZXJfZ2V0X29wdGlvbnModGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQo
KSkgJiBXRUJLSVRfRklORF9PUFRJT05TX0JBQ0tXQVJEUykpOworCisgICAgd2Via2l0X2ZpbmRf
Y29udHJvbGxlcl9zZWFyY2hfbmV4dCh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKTsKKyAg
ICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KCF0ZXN0LT5t
X3RleHRGb3VuZCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDIpOworICAg
IGdfYXNzZXJ0KCEod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfb3B0aW9ucyh0ZXN0LT5tX2Zp
bmRDb250cm9sbGVyLmdldCgpKSAmIFdFQktJVF9GSU5EX09QVElPTlNfQkFDS1dBUkRTKSk7Cit9
CisKK3N0YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlclByZXZpb3VzKEZpbmRDb250cm9sbGVy
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3Ry
aW5nLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3Qt
PmZpbmQoInRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDIpOworICAgIHRlc3Qt
PndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENv
dW50ID09IDIpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKKworICAgIHdlYmtp
dF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX25leHQodGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQo
KSk7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0
ZXN0LT5tX3RleHRGb3VuZCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDIp
OworICAgIGdfYXNzZXJ0KCEod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfb3B0aW9ucyh0ZXN0
LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKSAmIFdFQktJVF9GSU5EX09QVElPTlNfQkFDS1dBUkRT
KSk7CisKKyAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9wcmV2aW91cyh0ZXN0LT5t
X2ZpbmRDb250cm9sbGVyLmdldCgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQo
KTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKKyAgICBnX2Fzc2VydCh0ZXN0
LT5tX21hdGNoQ291bnQgPT0gMik7CisgICAgZ19hc3NlcnQod2Via2l0X2ZpbmRfY29udHJvbGxl
cl9nZXRfb3B0aW9ucyh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKSAmIFdFQktJVF9GSU5E
X09QVElPTlNfQkFDS1dBUkRTKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVy
Q291bnRlZE1hdGNoZXMoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQor
eworICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RTdHJpbmcsIDApOworICAgIHRlc3QtPndhaXRVbnRp
bExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+Y291bnQoInRlc3RpbmciLCBXRUJLSVRfRklO
RF9PUFRJT05TX05PTkUsIDIpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwor
CisgICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDIpOworCisgICAgdGVzdC0+Y291
bnQoImZpcnN0IiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAyKTsKKyAgICB0ZXN0LT53YWl0
VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3VudCA9
PSAxKTsKKworICAgIHRlc3QtPmNvdW50KCJub3RGb3VuZCIsIFdFQktJVF9GSU5EX09QVElPTlNf
Tk9ORSwgMik7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fz
c2VydCghdGVzdC0+bV9tYXRjaENvdW50KTsKK30KKworc3RhdGljIHZvaWQgdGVzdEZpbmRDb250
cm9sbGVyT3B0aW9ucyhGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7
CisgICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0cmluZywgMCk7CisgICAgdGVzdC0+d2FpdFVudGls
TG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5maW5kKCJUZXN0aW5nIiwgV0VCS0lUX0ZJTkRf
T1BUSU9OU19OT05FLCAyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKwor
ICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX3RleHRGb3VuZCk7CisKKyAgICB0ZXN0LT5maW5kKCJUZXN0
aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19DQVNFX0lOU0VOU0lUSVZFLCAyKTsKKyAgICB0ZXN0
LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZv
dW5kKTsKKworICAgIHRlc3QtPmZpbmQoImVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9O
RSwgMik7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2Vy
dCh0ZXN0LT5tX3RleHRGb3VuZCk7CisKKyAgICB0ZXN0LT5maW5kKCJlc3RpbmciLCBXRUJLSVRf
RklORF9PUFRJT05TX0FUX1dPUkRfU1RBUlRTLCAyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5k
RmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX3RleHRGb3VuZCk7CisKKyAgICB0
ZXN0LT5maW5kKCJIYWxmIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19BVF9XT1JEX1NUQVJUUywgMik7
CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCghdGVz
dC0+bV90ZXh0Rm91bmQpOworCisgICAgdGVzdC0+ZmluZCgiSGFsZiIsIFdFQktJVF9GSU5EX09Q
VElPTlNfQVRfV09SRF9TVEFSVFMgfCBXRUJLSVRfRklORF9PUFRJT05TX1RSRUFUX01FRElBTF9D
QVBJVEFMX0FTX1dPUkRfU1RBUlQsIDIpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hl
ZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworCisgICAgdGVzdC0+Zmlu
ZCgidGVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfV1JBUF9BUk9VTkQsIDMpOworICAgIHRl
c3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZv
dW5kKTsKKworICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX25leHQodGVzdC0+bV9m
aW5kQ29udHJvbGxlci5nZXQoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7
CisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworCisgICAgd2Via2l0X2ZpbmRfY29u
dHJvbGxlcl9zZWFyY2hfbmV4dCh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKTsKKyAgICB0
ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRG
b3VuZCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlckluc3RhbmNlKEZpbmRD
b250cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBXZWJLaXRGaW5kQ29u
dHJvbGxlciogZmluZENvbnRyb2xsZXIxID0gd2Via2l0X3dlYl92aWV3X2dldF9maW5kX2NvbnRy
b2xsZXIodGVzdC0+bV93ZWJWaWV3KTsKKyAgICBXZWJLaXRGaW5kQ29udHJvbGxlciogZmluZENv
bnRyb2xsZXIyID0gd2Via2l0X3dlYl92aWV3X2dldF9maW5kX2NvbnRyb2xsZXIodGVzdC0+bV93
ZWJWaWV3KTsKKworICAgIGdfYXNzZXJ0KGZpbmRDb250cm9sbGVyMSA9PSBmaW5kQ29udHJvbGxl
cjIpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJHZXR0ZXJzKEZpbmRDb250
cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBjb25zdCBjaGFyKiBzZWFy
Y2hUZXh0ID0gInRlc3RpbmciOworICAgIGd1aW50IG1heE1hdGNoQ291bnQgPSAxOworICAgIGd1
aW50IGZpbmRPcHRpb25zID0gV0VCS0lUX0ZJTkRfT1BUSU9OU19XUkFQX0FST1VORCB8IFdFQktJ
VF9GSU5EX09QVElPTlNfQVRfV09SRF9TVEFSVFM7CisgICAgV2ViS2l0RmluZENvbnRyb2xsZXIq
IGZpbmRDb250cm9sbGVyID0gd2Via2l0X3dlYl92aWV3X2dldF9maW5kX2NvbnRyb2xsZXIodGVz
dC0+bV93ZWJWaWV3KTsKKworICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoKGZpbmRD
b250cm9sbGVyLCBzZWFyY2hUZXh0LCBmaW5kT3B0aW9ucywgbWF4TWF0Y2hDb3VudCk7CisgICAg
Z19hc3NlcnQod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfd2ViX3ZpZXcoZmluZENvbnRyb2xs
ZXIpID09IHRlc3QtPm1fd2ViVmlldyk7CisgICAgZ19hc3NlcnQoIWdfc3RyY21wMCh3ZWJraXRf
ZmluZF9jb250cm9sbGVyX2dldF9zZWFyY2hfdGV4dChmaW5kQ29udHJvbGxlciksIHNlYXJjaFRl
eHQpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9tYXhfbWF0Y2hf
Y291bnQoZmluZENvbnRyb2xsZXIpID09IG1heE1hdGNoQ291bnQpOworICAgIGdfYXNzZXJ0KHdl
YmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X29wdGlvbnMoZmluZENvbnRyb2xsZXIpID09IGZpbmRP
cHRpb25zKTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIEZpbmRDb250cm9sbGVyVGVz
dDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJnZXR0ZXJzIiwgdGVzdEZpbmRDb250cm9s
bGVyR2V0dGVycyk7CisgICAgRmluZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250
cm9sbGVyIiwgImluc3RhbmNlIiwgdGVzdEZpbmRDb250cm9sbGVySW5zdGFuY2UpOworICAgIEZp
bmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJ0ZXh0LWZvdW5k
IiwgdGVzdEZpbmRDb250cm9sbGVyVGV4dEZvdW5kKTsKKyAgICBGaW5kQ29udHJvbGxlclRlc3Q6
OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAidGV4dC1ub3QtZm91bmQiLCB0ZXN0RmluZENv
bnRyb2xsZXJUZXh0Tm90Rm91bmQpOworICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJL
aXRGaW5kQ29udHJvbGxlciIsICJtYXRjaC1jb3VudCIsIHRlc3RGaW5kQ29udHJvbGxlck1hdGNo
Q291bnQpOworICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxl
ciIsICJtYXgtbWF0Y2gtY291bnQiLCB0ZXN0RmluZENvbnRyb2xsZXJNYXhNYXRjaENvdW50KTsK
KyAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAibmV4
dCIsIHRlc3RGaW5kQ29udHJvbGxlck5leHQpOworICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRk
KCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJwcmV2aW91cyIsIHRlc3RGaW5kQ29udHJvbGxlclBy
ZXZpb3VzKTsKKyAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xs
ZXIiLCAiY291bnRlZC1tYXRjaGVzIiwgdGVzdEZpbmRDb250cm9sbGVyQ291bnRlZE1hdGNoZXMp
OworICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJv
cHRpb25zIiwgdGVzdEZpbmRDb250cm9sbGVyT3B0aW9ucyk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwo
KQoreworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Vi
a2l0Mi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCmluZGV4
IGU5ZDg5MmI1NDA1OTlkYmRhYzdkMzU1YjNlMjJiN2FjYjYxNmFjZDYuLmY0OTdlNTdhZWViN2Q5
NDc4OTg1YmQzZTU5MTg4ZjgyOTA1NzU4YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay93ZWJraXQyLmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDx3ZWJraXQyL1dl
YktpdERvd25sb2FkLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRFbnVtVHlwZXMuaD4KICNp
bmNsdWRlIDx3ZWJraXQyL1dlYktpdEVycm9yLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRG
aW5kQ29udHJvbGxlci5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0U2V0dGluZ3MuaD4KICNp
bmNsdWRlIDx3ZWJraXQyL1dlYktpdFVSSVJlcXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dl
YktpdFVSSVJlc3BvbnNlLmg+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126528</attachid>
            <date>2012-02-10 09:51:09 -0800</date>
            <delta_ts>2012-02-14 08:38:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76070-20120210185107.patch</filename>
            <type>text/plain</type>
            <size>51940</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3MjUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYWFiNzdmYmU2NzQwMjJk
OGE4NTc1ZTQ4MWZiYjkzNTY1ZTRmZGVlYi4uOGY0ZTU2ZjQ5MTM5YjY0ZDExZTRkODlhNTZlMWI2
Nzg2OTM1MTA5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisyMDEyLTAxLTE5ICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFtX
SzJdIEFkZCBGaW5kIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzYwNzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIHBhdGNoIGFkZHMgYSBuZXcgcHVibGljIGZpbmQgQVBJIGZvciB0aGUgR3Rr
KyBXSzIgcG9ydC4gSXQKKyAgICAgICAgZGVmaW5lcyBhIG5ldyBvYmplY3QgY2FsbGVkIFdlYktp
dEZpbmRDb250cm9sbGVyIG93bmVkIGJ5IGVhY2gKKyAgICAgICAgV2ViS2l0V2ViVmlldy4gQ2xp
ZW50cyB3aWxsIHVzZSB0aGlzIG5ldyBvYmplY3QgdG8gc2VhcmNoIHN0cmluZ3MKKyAgICAgICAg
aW4gdGhlIFdlYktpdFdlYlZpZXcuCisKKyAgICAgICAgQ2hhbmdlcyBpbmNsdWRlIGFsc28gZG9j
dW1lbnRhdGlvbiBhbmQgdW5pdCB0ZXN0cyBmb3IgdGhlIG5ldworICAgICAgICBwdWJsaWMgQVBJ
LgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0RGVmaW5lcy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZp
bmRDb250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChkaWRGaW5kU3RyaW5nKTogaW1wbGVt
ZW50YXRpb24gb2YgdGhlIFdLUGFnZSBGaW5kIGludGVyZmFjZS4KKyAgICAgICAgKGRpZEZhaWxU
b0ZpbmRTdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKGRpZENvdW50U3RyaW5nTWF0Y2hlcyk6IERp
dHRvLgorICAgICAgICAod2Via2l0X2ZpbmRfY29udHJvbGxlcl9pbml0KToKKyAgICAgICAgKGdl
dFdLUGFnZUZyb21XZWJLaXRXZWJWaWV3KToKKyAgICAgICAgKHdlYmtpdEZpbmRDb250cm9sbGVy
Q29uc3RydWN0ZWQpOgorICAgICAgICAod2Via2l0RmluZENvbnRyb2xsZXJHZXRQcm9wZXJ0eSk6
CisgICAgICAgICh3ZWJraXRGaW5kQ29udHJvbGxlclNldFByb3BlcnR5KToKKyAgICAgICAgKHdl
YmtpdEZpbmRDb250cm9sbGVyRmluYWxpemUpOgorICAgICAgICAod2Via2l0X2ZpbmRfY29udHJv
bGxlcl9jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X3Nl
YXJjaF90ZXh0KToKKyAgICAgICAgKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X29wdGlvbnMp
OgorICAgICAgICAod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfbWF4X21hdGNoX2NvdW50KToK
KyAgICAgICAgKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X3dlYl92aWV3KToKKyAgICAgICAg
KHdlYktpdEZpbmRDb250cm9sbGVyUGVyZm9ybSk6CisgICAgICAgICh3ZWJLaXRGaW5kQ29udHJv
bGxlclNldFNlYXJjaERhdGEpOgorICAgICAgICAod2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFy
Y2gpOiBhc3luY2hyb25vdXNseSBsb29rcyBmb3IgdGhlCisgICAgICAgIHNlYXJjaCBzdHJpbmcg
aW4gdGhlIFdlYktpdFdlYlZpZXcuCisgICAgICAgICh3ZWJraXRfZmluZF9jb250cm9sbGVyX3Nl
YXJjaF9maW5pc2gpOiB1bmhpZ2hsaWdodHMgdGV4dCBtYXRjaGVzLgorICAgICAgICAod2Via2l0
X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfbmV4dCk6CisgICAgICAgICh3ZWJraXRfZmluZF9jb250
cm9sbGVyX3NlYXJjaF9wcmV2aW91cyk6CisgICAgICAgICh3ZWJraXRfZmluZF9jb250cm9sbGVy
X2NvdW50X21hdGNoZXMpOiBhc3luY2hyb25vdXNseSBjb3VudHMgdGhlCisgICAgICAgIG51bWJl
ciBvZiBtYXRjaGVzIG9mIHRoZSBzZWFyY2ggc3RyaW5nIGluIHRoZSBXZWJLaXRXZWJWaWV3Lgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbmRDb250cm9sbGVyLmg6IEFkZGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdF93
ZWJfdmlld19nZXRfZmluZF9jb250cm9sbGVyKTogcmV0dXJucyB0aGUKKyAgICAgICAgV2ViS2l0
RmluZENvbnRyb2xsZXIgaW5zdGFuY2Ugb3duZWQgYnkgdGhlIFdlYktpdFdlYlZpZXcuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWw6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXM6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW06CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvVGVzdFdlYktpdEZpbmRDb250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgICh0
ZXN0RmluZENvbnRyb2xsZXJUZXh0Rm91bmQpOgorICAgICAgICAodGVzdEZpbmRDb250cm9sbGVy
VGV4dE5vdEZvdW5kKToKKyAgICAgICAgKHRlc3RGaW5kQ29udHJvbGxlck1hdGNoQ291bnQpOgor
ICAgICAgICAodGVzdEZpbmRDb250cm9sbGVyTWF4TWF0Y2hDb3VudCk6CisgICAgICAgICh0ZXN0
RmluZENvbnRyb2xsZXJOZXh0KToKKyAgICAgICAgKHRlc3RGaW5kQ29udHJvbGxlclByZXZpb3Vz
KToKKyAgICAgICAgKHRlc3RGaW5kQ29udHJvbGxlckNvdW50ZWRNYXRjaGVzKToKKyAgICAgICAg
KHRlc3RGaW5kQ29udHJvbGxlck9wdGlvbnMpOgorICAgICAgICAodGVzdEZpbmRDb250cm9sbGVy
SW5zdGFuY2UpOgorICAgICAgICAodGVzdEZpbmRDb250cm9sbGVyR2V0dGVycyk6CisgICAgICAg
ICh0ZXN0RmluZENvbnRyb2xsZXJIaWRlKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAg
IChhZnRlckFsbCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oOgorCiAy
MDEyLTAyLTA5ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBbR1RLXSBBZGQgV2ViS2l0V2ViVmlldzo6bW91c2UtdGFyZ2V0LWNoYW5nZWQgc2ln
bmFsIHRvIFdlYktpdDIgR1RLKyBBUEkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1h
a2VmaWxlLmFtIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KaW5kZXggM2I4ZTdiZGEy
OWI1MGQ0NGUxOGExMTAzNDNjZTE1MjgwNWVkZTE2NC4uYjlhMDZmZWNjODNlOWYwYTA2ZDM1NzI0
MmY0ZDhkZjM1OWNiOGE3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUu
YW0KKysrIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KQEAgLTg4LDYgKzg4LDcgQEAg
bGlid2Via2l0Mmd0a2luY2x1ZGVfSEVBREVSUyA9IFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdERvd25sb2FkLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0RWRpdGluZ0NvbW1hbmRzLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0RXJyb3IuaCBcCisJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaW5k
Q29udHJvbGxlci5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEhpdFRl
c3RSZXN1bHQuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0
aW9uUG9saWN5RGVjaXNpb24uaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRQb2xpY3lEZWNpc2lvbi5oIFwKQEAgLTU0NSw2ICs1NDYsOCBAQCBsaWJ3ZWJraXQyZ3RrX0BX
RUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05A
X2xhX1NPVQogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEhpdFRlc3RS
ZXN1bHRQcml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dExvYWRlckNsaWVudC5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRMb2FkZXJDbGllbnQuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRGaW5kQ29udHJvbGxlci5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRGaW5kQ29udHJvbGxlci5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbi5jcHAgXAogCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbi5oIFwK
IAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uUG9saWN5
RGVjaXNpb25Qcml2YXRlLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0RGVmaW5lcy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0RGVmaW5lcy5oCmluZGV4IDc5YjMzODM2MGRkYWFhOGYwOWY2NTQ3ZjJkZjE0NThm
NmYyMTkzMWQuLmUyZTNiM2QxMDc2ODY0ZmQ0NWYzNWUwZWQ0ZDkwYmVjMjRiZGRhZjYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERlZmluZXMuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREZWZpbmVzLmgKQEAg
LTQ0LDQgKzQ0LDcgQEAKICMgICAgZGVmaW5lIFdFQktJVF9PQlNPTEVURV9BUEkgV0VCS0lUX0FQ
SSBfX2F0dHJpYnV0ZV9fKChkZXByZWNhdGVkKSkKICNlbmRpZgogCit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RmluZENvbnRyb2xsZXIgV2ViS2l0RmluZENvbnRyb2xsZXI7Cit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0V2ViVmlldyAgICAgICAgV2ViS2l0V2ViVmlldzsKKwogI2VuZGlmIC8vIFdlYktp
dERlZmluZXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0RmluZENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0RmluZENvbnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU0ZGFkODUzZTIzYjNmYzU5
ZDVkMGU5Yjk1MWRlODA3OWVkZjk2ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaW5kQ29udHJvbGxlci5jcHAKQEAgLTAsMCArMSw0
NzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRGaW5kQ29udHJvbGxlci5oIgorCisjaW5jbHVkZSAi
V2ViS2l0RW51bVR5cGVzLmgiCisjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgorI2luY2x1ZGUg
IldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgor
I2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK2VudW0geworICAgIEZPVU5EX1RFWFQsCisgICAgRkFJTEVEX1RPX0ZJTkRfVEVY
VCwKKyAgICBDT1VOVEVEX01BVENIRVMsCisKKyAgICBMQVNUX1NJR05BTAorfTsKKworZW51bSB7
CisgICAgUFJPUF8wLAorCisgICAgUFJPUF9URVhULAorICAgIFBST1BfT1BUSU9OUywKKyAgICBQ
Uk9QX01BWF9NQVRDSF9DT1VOVCwKKyAgICBQUk9QX1dFQl9WSUVXCit9OworCit0eXBlZGVmIGVu
dW0geworICAgIEZpbmRPcGVyYXRpb24sCisgICAgQ291bnRPcGVyYXRpb24KK30gV2ViS2l0Rmlu
ZENvbnRyb2xsZXJPcGVyYXRpb247CisKK3N0cnVjdCBfV2ViS2l0RmluZENvbnRyb2xsZXJQcml2
YXRlIHsKKyAgICBDU3RyaW5nIHNlYXJjaFRleHQ7CisgICAgdW5zaWduZWQgaW50IGZpbmRPcHRp
b25zOworICAgIHVuc2lnbmVkIGludCBtYXhNYXRjaENvdW50OworICAgIFdlYktpdFdlYlZpZXcq
IHdlYlZpZXc7Cit9OworCitzdGF0aWMgZ3VpbnQgc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAs
IH07CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0RmluZENvbnRyb2xsZXIsIHdlYmtpdF9maW5kX2Nv
bnRyb2xsZXIsIEdfVFlQRV9PQkpFQ1QpCisKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0o
V0VCS0lUX0ZJTkRfT1BUSU9OU19DQVNFX0lOU0VOU0lUSVZFLCBrV0tGaW5kT3B0aW9uc0Nhc2VJ
bnNlbnNpdGl2ZSk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdFQktJVF9GSU5EX09Q
VElPTlNfQVRfV09SRF9TVEFSVFMsIGtXS0ZpbmRPcHRpb25zQXRXb3JkU3RhcnRzKTsKK0NPTVBJ
TEVfQVNTRVJUX01BVENISU5HX0VOVU0oV0VCS0lUX0ZJTkRfT1BUSU9OU19UUkVBVF9NRURJQUxf
Q0FQSVRBTF9BU19XT1JEX1NUQVJULCBrV0tGaW5kT3B0aW9uc1RyZWF0TWVkaWFsQ2FwaXRhbEFz
V29yZFN0YXJ0KTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV0VCS0lUX0ZJTkRfT1BU
SU9OU19CQUNLV0FSRFMsIGtXS0ZpbmRPcHRpb25zQmFja3dhcmRzKTsKK0NPTVBJTEVfQVNTRVJU
X01BVENISU5HX0VOVU0oV0VCS0lUX0ZJTkRfT1BUSU9OU19XUkFQX0FST1VORCwga1dLRmluZE9w
dGlvbnNXcmFwQXJvdW5kKTsKKworc3RhdGljIHZvaWQgZGlkRmluZFN0cmluZyhXS1BhZ2VSZWYg
cGFnZSwgV0tTdHJpbmdSZWYgc3RyaW5nLCB1bnNpZ25lZCBtYXRjaENvdW50LCBjb25zdCB2b2lk
KiBjbGllbnRJbmZvKQoreworICAgIGdfc2lnbmFsX2VtaXQoV0VCS0lUX0ZJTkRfQ09OVFJPTExF
UihjbGllbnRJbmZvKSwgc2lnbmFsc1tGT1VORF9URVhUXSwgMCwgbWF0Y2hDb3VudCk7Cit9CisK
K3N0YXRpYyB2b2lkIGRpZEZhaWxUb0ZpbmRTdHJpbmcoV0tQYWdlUmVmIHBhZ2UsIFdLU3RyaW5n
UmVmIHN0cmluZywgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBnX3NpZ25hbF9lbWl0
KFdFQktJVF9GSU5EX0NPTlRST0xMRVIoY2xpZW50SW5mbyksIHNpZ25hbHNbRkFJTEVEX1RPX0ZJ
TkRfVEVYVF0sIDApOworfQorCitzdGF0aWMgdm9pZCBkaWRDb3VudFN0cmluZ01hdGNoZXMoV0tQ
YWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIHN0cmluZywgdW5zaWduZWQgbWF0Y2hDb3VudCwgY29u
c3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBnX3NpZ25hbF9lbWl0KFdFQktJVF9GSU5EX0NP
TlRST0xMRVIoY2xpZW50SW5mbyksIHNpZ25hbHNbQ09VTlRFRF9NQVRDSEVTXSwgMCwgbWF0Y2hD
b3VudCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfaW5pdChXZWJL
aXRGaW5kQ29udHJvbGxlciogZmluZENvbnRyb2xsZXIpCit7CisgICAgV2ViS2l0RmluZENvbnRy
b2xsZXJQcml2YXRlKiBwcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKGZpbmRDb250
cm9sbGVyLCBXRUJLSVRfVFlQRV9GSU5EX0NPTlRST0xMRVIsIFdlYktpdEZpbmRDb250cm9sbGVy
UHJpdmF0ZSk7CisgICAgZmluZENvbnRyb2xsZXItPnByaXYgPSBwcml2OworICAgIG5ldyAocHJp
dikgV2ViS2l0RmluZENvbnRyb2xsZXJQcml2YXRlKCk7Cit9CisKK3N0YXRpYyBXS1BhZ2VSZWYg
aW5saW5lIGdldFdLUGFnZUZyb21XZWJLaXRXZWJWaWV3KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcp
Cit7CisgICAgcmV0dXJuIHRvQVBJKHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFnZShXRUJLSVRfV0VC
X1ZJRVdfQkFTRSh3ZWJWaWV3KSkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRGaW5kQ29udHJv
bGxlckNvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRGaW5kQ29udHJv
bGxlciogZmluZENvbnRyb2xsZXIgPSBXRUJLSVRfRklORF9DT05UUk9MTEVSKG9iamVjdCk7Cisg
ICAgV0tQYWdlRmluZENsaWVudCB3a0ZpbmRDbGllbnQgPSB7CisgICAgICAgIGtXS1BhZ2VGaW5k
Q2xpZW50Q3VycmVudFZlcnNpb24sCisgICAgICAgIGZpbmRDb250cm9sbGVyLCAvLyBjbGllbnRJ
bmZvCisgICAgICAgIGRpZEZpbmRTdHJpbmcsCisgICAgICAgIGRpZEZhaWxUb0ZpbmRTdHJpbmcs
CisgICAgICAgIGRpZENvdW50U3RyaW5nTWF0Y2hlcworICAgIH07CisKKyAgICBXS1BhZ2VTZXRQ
YWdlRmluZENsaWVudChnZXRXS1BhZ2VGcm9tV2ViS2l0V2ViVmlldyhmaW5kQ29udHJvbGxlci0+
cHJpdi0+d2ViVmlldyksICZ3a0ZpbmRDbGllbnQpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRG
aW5kQ29udHJvbGxlckdldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElkLCBH
VmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwYXJhbVNwZWMpCit7CisgICAgV2ViS2l0RmluZENv
bnRyb2xsZXIqIGZpbmRDb250cm9sbGVyID0gV0VCS0lUX0ZJTkRfQ09OVFJPTExFUihvYmplY3Qp
OworCisgICAgc3dpdGNoIChwcm9wSWQpIHsKKyAgICBjYXNlIFBST1BfVEVYVDoKKyAgICAgICAg
Z192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCBmaW5kQ29udHJvbGxlci0+cHJpdi0+c2VhcmNoVGV4
dC5kYXRhKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfT1BUSU9OUzoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfdWludCh2YWx1ZSwgZmluZENvbnRyb2xsZXItPnByaXYtPmZpbmRPcHRp
b25zKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01BWF9NQVRDSF9DT1VOVDoKKyAg
ICAgICAgZ192YWx1ZV9zZXRfdWludCh2YWx1ZSwgZmluZENvbnRyb2xsZXItPnByaXYtPm1heE1h
dGNoQ291bnQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV0VCX1ZJRVc6CisgICAg
ICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgZmluZENvbnRyb2xsZXItPnByaXYtPndlYlZp
ZXcpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJO
X0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSWQsIHBhcmFtU3BlYyk7CisgICAgfQor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRGaW5kQ29udHJvbGxlclNldFByb3BlcnR5KEdPYmplY3Qq
IG9iamVjdCwgZ3VpbnQgcHJvcElkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBw
YXJhbVNwZWMpCit7CisgICAgV2ViS2l0RmluZENvbnRyb2xsZXIqIGZpbmRDb250cm9sbGVyID0g
V0VCS0lUX0ZJTkRfQ09OVFJPTExFUihvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wSWQpIHsK
KyAgICBjYXNlIFBST1BfV0VCX1ZJRVc6CisgICAgICAgIGZpbmRDb250cm9sbGVyLT5wcml2LT53
ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKGdfdmFsdWVfZ2V0X29iamVjdCh2YWx1ZSkpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURf
UFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSWQsIHBhcmFtU3BlYyk7CisgICAgfQorfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRGaW5kQ29udHJvbGxlckZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sK
KyAgICBXRUJLSVRfRklORF9DT05UUk9MTEVSKG9iamVjdCktPnByaXYtPn5XZWJLaXRGaW5kQ29u
dHJvbGxlclByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfZmluZF9jb250cm9s
bGVyX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9maW5kX2NvbnRyb2xsZXJfY2xhc3NfaW5pdChXZWJLaXRGaW5kQ29udHJvbGxlckNsYXNz
KiBmaW5kQ2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnT2JqZWN0Q2xhc3MgPSBHX09CSkVD
VF9DTEFTUyhmaW5kQ2xhc3MpOworCisgICAgZ09iamVjdENsYXNzLT5jb25zdHJ1Y3RlZCA9IHdl
YmtpdEZpbmRDb250cm9sbGVyQ29uc3RydWN0ZWQ7CisgICAgZ09iamVjdENsYXNzLT5nZXRfcHJv
cGVydHkgPSB3ZWJraXRGaW5kQ29udHJvbGxlckdldFByb3BlcnR5OworICAgIGdPYmplY3RDbGFz
cy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0RmluZENvbnRyb2xsZXJTZXRQcm9wZXJ0eTsKKyAgICBn
T2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0RmluZENvbnRyb2xsZXJGaW5hbGl6ZTsKKwor
ICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShmaW5kQ2xhc3MsIHNpemVvZihXZWJLaXRGaW5k
Q29udHJvbGxlclByaXZhdGUpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdEZpbmRDb250cm9s
bGVyOnRleHQ6CisgICAgICoKKyAgICAgKiBUaGUgY3VycmVudCBzZWFyY2ggdGV4dCBmb3IgdGhp
cyAjV2ViS2l0RmluZENvbnRyb2xsZXIuCisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eShnT2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBQUk9QX1RFWFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
X3BhcmFtX3NwZWNfc3RyaW5nKCJ0ZXh0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiU2VhcmNoIHRleHQiKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGV4dCB0byBz
ZWFyY2ggZm9yIGluIHRoZSB2aWV3IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisg
ICAgLyoqCisgICAgICogV2ViS2l0RmluZENvbnRyb2xsZXI6b3B0aW9uczoKKyAgICAgKgorICAg
ICAqIFRoZSBvcHRpb25zIHRvIGJlIHVzZWQgaW4gdGhlIHNlYXJjaCBvcGVyYXRpb24uCisgICAg
ICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnT2JqZWN0Q2xhc3MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX09QVElPTlMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfZmxhZ3MoIm9wdGlvbnMi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF8oIlNlYXJjaCBPcHRpb25zIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXygiU2VhcmNoIG9wdGlvbnMgdG8gYmUgdXNlZCBpbiB0aGUg
c2VhcmNoIG9wZXJhdGlvbiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX0ZJTkRfT1BUSU9OUywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfRklORF9P
UFRJT05TX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICAvKioKKyAgICAgKiBX
ZWJLaXRGaW5kQ29udHJvbGxlcjptYXgtbWF0Y2gtY291bnQ6CisgICAgICoKKyAgICAgKiBUaGUg
bWF4aW11bSBudW1iZXIgb2YgbWF0Y2hlcyB0byByZXBvcnQgZm9yIGEgZ2l2ZW4gc2VhcmNoLgor
ICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ09iamVjdENsYXNz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9NQVhfTUFUQ0hfQ09V
TlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfdWlu
dCgibWF4LW1hdGNoLWNvdW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF8oIk1heGltdW0gbWF0Y2hlcyBjb3VudCIpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIG1heGlt
dW0gbnVtYmVyIG9mIG1hdGNoZXMgaW4gYSBnaXZlbiB0ZXh0IHRvIHJlcG9ydCIpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR19NQVhV
SU5ULCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRG
aW5kQ29udHJvbGxlcjp3ZWItdmlldzoKKyAgICAgKgorICAgICAqIFRoZSAjV2ViS2l0V2ViVmll
dyB0aGlzIGNvbnRyb2xsZXIgaXMgYXNzb2NpYXRlZCB0by4KKyAgICAgKi8KKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdPYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBST1BfV0VCX1ZJRVcsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0KCJ3ZWItdmlldyIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIldlYlZpZXci
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXygiVGhlIFdlYlZpZXcgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZmluZCBjb250cm9sbGVyIiks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdFQktJVF9UWVBFX1dFQl9WSUVXLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxHUGFyYW1GbGFncz4oV0VCS0lUX1BB
UkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKSk7CisKKyAgICAvKioKKyAg
ICAgKiBXZWJLaXRGaW5kQ29udHJvbGxlcjo6Zm91bmQtdGV4dDoKKyAgICAgKiBAZmluZF9jb250
cm9sbGVyOiB0aGUgI1dlYktpdEZpbmRDb250cm9sbGVyCisgICAgICogQG1hdGNoX2NvdW50OiB0
aGUgbnVtYmVyIG9mIG1hdGNoZXMgZm91bmQgb2YgdGhlIHNlYXJjaCB0ZXh0CisgICAgICoKKyAg
ICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gYSBnaXZlbiB0ZXh0IGlzIGZvdW5kIGlu
IHRoZSB3ZWIKKyAgICAgKiBwYWdlIHRleHQuIEl0IHdpbGwgYmUgaXNzdWVkIGlmIHRoZSB0ZXh0
IGlzIGZvdW5kCisgICAgICogYXN5bmNocm9ub3VzbHkgYWZ0ZXIgYSBjYWxsIHRvIHdlYmtpdF9m
aW5kX2NvbnRyb2xsZXJfc2VhcmNoKCksCisgICAgICogd2Via2l0X2ZpbmRfY29udHJvbGxlcl9z
ZWFyY2hfbmV4dCgpIG9yCisgICAgICogd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfcHJl
dmlvdXMoKS4KKyAgICAgKi8KKyAgICBzaWduYWxzW0ZPVU5EX1RFWFRdID0KKyAgICAgICAgZ19z
aWduYWxfbmV3KCJmb3VuZC10ZXh0IiwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9GUk9N
X0NMQVNTKGdPYmplY3RDbGFzcyksCisgICAgICAgICAgICAgICAgICAgICBHX1NJR05BTF9SVU5f
TEFTVCwKKyAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgICAgICAgICAg
ICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fVUlOVCwKKyAgICAgICAgICAgICAgICAgICAgIEdf
VFlQRV9OT05FLCAxLCBHX1RZUEVfVUlOVCk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRGaW5k
Q29udHJvbGxlcjo6ZmFpbGVkLXRvLWZpbmQtdGV4dDoKKyAgICAgKiBAZmluZF9jb250cm9sbGVy
OiB0aGUgI1dlYktpdEZpbmRDb250cm9sbGVyCisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBp
cyBlbWl0dGVkIHdoZW4gYSBzZWFyY2ggb3BlcmF0aW9uIGRvZXMgbm90IGZpbmQKKyAgICAgKiBh
bnkgcmVzdWx0IGZvciB0aGUgZ2l2ZW4gdGV4dC4gSXQgd2lsbCBiZSBpc3N1ZWQgaWYgdGhlIHRl
eHQKKyAgICAgKiBpcyBub3QgZm91bmQgYXN5bmNocm9ub3VzbHkgYWZ0ZXIgYSBjYWxsIHRvCisg
ICAgICogd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2goKSwgd2Via2l0X2ZpbmRfY29udHJv
bGxlcl9zZWFyY2hfbmV4dCgpCisgICAgICogb3Igd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFy
Y2hfcHJldmlvdXMoKS4KKyAgICAgKi8KKyAgICBzaWduYWxzW0ZBSUxFRF9UT19GSU5EX1RFWFRd
ID0KKyAgICAgICAgZ19zaWduYWxfbmV3KCJmYWlsZWQtdG8tZmluZC10ZXh0IiwKKyAgICAgICAg
ICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGdPYmplY3RDbGFzcyksCisgICAgICAgICAg
ICAgICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgIDAsIDAs
IDAsCisgICAgICAgICAgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fVk9JRCwK
KyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9OT05FLCAwKTsKKworICAgIC8qKgorICAgICAq
IFdlYktpdEZpbmRDb250cm9sbGVyOjpjb3VudGVkLW1hdGNoZXM6CisgICAgICogQGZpbmRfY29u
dHJvbGxlcjogdGhlICNXZWJLaXRGaW5kQ29udHJvbGxlcgorICAgICAqIEBtYXRjaF9jb3VudDog
dGhlIG51bWJlciBvZiBtYXRjaGVzIG9mIHRoZSBzZWFyY2ggdGV4dAorICAgICAqCisgICAgICog
VGhpcyBzaWduYWwgaXMgZW1pdHRlZCB3aGVuIHRoZSAjV2ViS2l0RmluZENvbnRyb2xsZXIgaGFz
CisgICAgICogY291bnRlZCB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgZm9yIGEgZ2l2ZW4gdGV4dCBh
ZnRlciBhIGNhbGwKKyAgICAgKiB0byB3ZWJraXRfZmluZF9jb250cm9sbGVyX2NvdW50X21hdGNo
ZXMoKS4KKyAgICAgKi8KKyAgICBzaWduYWxzW0NPVU5URURfTUFUQ0hFU10gPQorICAgICAgICBn
X3NpZ25hbF9uZXcoImNvdW50ZWQtbWF0Y2hlcyIsCisgICAgICAgICAgICAgICAgICAgICBHX1RZ
UEVfRlJPTV9DTEFTUyhnT2JqZWN0Q2xhc3MpLAorICAgICAgICAgICAgICAgICAgICAgR19TSUdO
QUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgICAg
ICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1VJTlQsCisgICAgICAgICAgICAgICAg
ICAgICBHX1RZUEVfTk9ORSwgMSwgR19UWVBFX1VJTlQpOworfQorCisvKioKKyAqIHdlYmtpdF9m
aW5kX2NvbnRyb2xsZXJfZ2V0X3NlYXJjaF90ZXh0OgorICogQGZpbmRfY29udHJvbGxlcjogdGhl
ICNXZWJLaXRGaW5kQ29udHJvbGxlcgorICoKKyAqIEdldHMgdGhlIHRleHQgdGhhdCBAZmluZF9j
b250cm9sbGVyIGlzIGN1cnJlbnRseSBzZWFyY2hpbmcKKyAqIGZvci4gVGhpcyB0ZXh0IGlzIHBh
c3NlZCB0byBlaXRoZXIKKyAqIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoKCkgb3IKKyAq
IHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfY291bnRfbWF0Y2hlcygpLgorICoKKyAqIFJldHVybnM6
IHRoZSB0ZXh0IHRvIGxvb2sgZm9yIGluIHRoZSAjV2ViS2l0V2ViVmlldy4KKyAqLworY29uc3Qg
Y2hhciogd2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfc2VhcmNoX3RleHQoV2ViS2l0RmluZENv
bnRyb2xsZXIqIGZpbmRDb250cm9sbGVyKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9JU19GSU5EX0NPTlRST0xMRVIoZmluZENvbnRyb2xsZXIpLCAwKTsKKworICAgIHJldHVy
biBmaW5kQ29udHJvbGxlci0+cHJpdi0+c2VhcmNoVGV4dC5kYXRhKCk7Cit9CisKKy8qKgorICog
d2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfb3B0aW9uczoKKyAqIEBmaW5kX2NvbnRyb2xsZXI6
IHRoZSAjV2ViS2l0RmluZENvbnRyb2xsZXIKKyAqCisgKiBHZXRzIGEgYml0bWFzayBjb250YWlu
aW5nIHRoZSAjV2ViS2l0RmluZE9wdGlvbnMgYXNzb2NpYXRlZCB3aXRoCisgKiB0aGUgY3VycmVu
dCBzZWFyY2guCisgKgorICogUmV0dXJuczogYSBiaXRtYXNrIGNvbnRhaW5pbmcgdGhlICNXZWJL
aXRGaW5kT3B0aW9ucyBhc3NvY2lhdGVkCisgKiB3aXRoIHRoZSBjdXJyZW50IHNlYXJjaC4KKyAq
LworZ3VpbnQgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfb3B0aW9ucyhXZWJLaXRGaW5kQ29u
dHJvbGxlciogZmluZENvbnRyb2xsZXIpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0lTX0ZJTkRfQ09OVFJPTExFUihmaW5kQ29udHJvbGxlciksIFdFQktJVF9GSU5EX09QVElP
TlNfTk9ORSk7CisKKyAgICByZXR1cm4gZmluZENvbnRyb2xsZXItPnByaXYtPmZpbmRPcHRpb25z
OworfQorCisvKioKKyAqIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X21heF9tYXRjaF9jb3Vu
dDoKKyAqIEBmaW5kX2NvbnRyb2xsZXI6IHRoZSAjV2ViS2l0RmluZENvbnRyb2xsZXIKKyAqCisg
KiBHZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBtYXRjaGVzIHRvIHJlcG9ydCBkdXJpbmcgYSB0
ZXh0CisgKiBsb29rdXAuIFRoaXMgbnVtYmVyIGlzIHBhc3NlZCBhcyB0aGUgbGFzdCBhcmd1bWVu
dCBvZgorICogd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2goKSBvcgorICogd2Via2l0X2Zp
bmRfY29udHJvbGxlcl9jb3VudF9tYXRjaGVzKCkuCisgKgorICogUmV0dXJuczogdGhlIG1heGlt
dW0gbnVtYmVyIG9mIG1hdGNoZXMgdG8gcmVwb3J0LgorICovCitndWludCB3ZWJraXRfZmluZF9j
b250cm9sbGVyX2dldF9tYXhfbWF0Y2hfY291bnQoV2ViS2l0RmluZENvbnRyb2xsZXIqIGZpbmRD
b250cm9sbGVyKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19GSU5EX0NP
TlRST0xMRVIoZmluZENvbnRyb2xsZXIpLCAwKTsKKworICAgIHJldHVybiBmaW5kQ29udHJvbGxl
ci0+cHJpdi0+bWF4TWF0Y2hDb3VudDsKK30KKworLyoqCisgKiB3ZWJraXRfZmluZF9jb250cm9s
bGVyX2dldF93ZWJfdmlldzoKKyAqIEBmaW5kX2NvbnRyb2xsZXI6IHRoZSAjV2ViS2l0RmluZENv
bnRyb2xsZXIKKyAqCisgKiBHZXRzIHRoZSAjV2ViS2l0V2ViVmlldyB0aGlzIGZpbmQgY29udHJv
bGxlciBpcyBhc3NvY2lhdGVkIHRvLiBEbworICogbm90IHVucmVmIHRoZSByZXR1cm5lZCBpbnN0
YW5jZSBhcyBpdCBiZWxvbmdzIHRvIHRoZQorICogI1dlYktpdEZpbmRDb250cm9sbGVyLgorICoK
KyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTogdGhlICNXZWJLaXRXZWJWaWV3LgorICovCitX
ZWJLaXRXZWJWaWV3KiB3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF93ZWJfdmlldyhXZWJLaXRG
aW5kQ29udHJvbGxlciogZmluZENvbnRyb2xsZXIpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0lTX0ZJTkRfQ09OVFJPTExFUihmaW5kQ29udHJvbGxlciksIDApOworCisgICAg
cmV0dXJuIGZpbmRDb250cm9sbGVyLT5wcml2LT53ZWJWaWV3OworfQorCitzdGF0aWMgdm9pZCB3
ZWJLaXRGaW5kQ29udHJvbGxlclBlcmZvcm0oV2ViS2l0RmluZENvbnRyb2xsZXIqIGZpbmRDb250
cm9sbGVyLCBXZWJLaXRGaW5kQ29udHJvbGxlck9wZXJhdGlvbiBvcGVyYXRpb24pCit7CisgICAg
V0tGaW5kT3B0aW9ucyB3a0ZpbmRPcHRpb25zID0gc3RhdGljX2Nhc3Q8V0tGaW5kT3B0aW9ucz4o
ZmluZENvbnRyb2xsZXItPnByaXYtPmZpbmRPcHRpb25zKTsKKyAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gd2tTZWFyY2hUZXh0KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKGZpbmRDb250cm9sbGVyLT5wcml2LT5zZWFyY2hUZXh0LmRhdGEoKSkpOworICAgIFdLUGFn
ZVJlZiB3a1BhZ2UgPSBnZXRXS1BhZ2VGcm9tV2ViS2l0V2ViVmlldyhmaW5kQ29udHJvbGxlci0+
cHJpdi0+d2ViVmlldyk7CisKKyAgICBpZiAob3BlcmF0aW9uID09IEZpbmRPcGVyYXRpb24pIHsK
KyAgICAgICAgLy8gVW5jb25kaXRpb25hbGx5IGhpZ2hsaWdodCB0ZXh0IG1hdGNoZXMuIFdLMSBB
UEkgd2FzIGZvcmNpbmcKKyAgICAgICAgLy8gY2xpZW50cyB0byBlbmFibGUvZGlzYWJsZSBoaWdo
bGlnaHRpbmcuIFNpbmNlIG1vc3Qgb2YgdGhlbQorICAgICAgICAvLyAoYWxsPykgd2hlcmUgdXNp
bmcgaGlnaGxpZ2h0aW5nIHdlIGRlY2lkZWQgdG8gc2ltcGxpZnkgdGhlCisgICAgICAgIC8vIFdL
MiBBUEkgYW5kIHVuY29uZGl0aW9uYWxseSBzaG93IGhpZ2hsaWdodHMuCisgICAgICAgIHdrRmlu
ZE9wdGlvbnMgPSBzdGF0aWNfY2FzdDxXS0ZpbmRPcHRpb25zPihmaW5kQ29udHJvbGxlci0+cHJp
di0+ZmluZE9wdGlvbnMgfCBrV0tGaW5kT3B0aW9uc1Nob3dIaWdobGlnaHQpOworICAgICAgICBX
S1BhZ2VGaW5kU3RyaW5nKHdrUGFnZSwgd2tTZWFyY2hUZXh0LmdldCgpLCB3a0ZpbmRPcHRpb25z
LCBmaW5kQ29udHJvbGxlci0+cHJpdi0+bWF4TWF0Y2hDb3VudCk7CisgICAgfSBlbHNlCisgICAg
ICAgIFdLUGFnZUNvdW50U3RyaW5nTWF0Y2hlcyh3a1BhZ2UsIHdrU2VhcmNoVGV4dC5nZXQoKSwg
d2tGaW5kT3B0aW9ucywgZmluZENvbnRyb2xsZXItPnByaXYtPm1heE1hdGNoQ291bnQpOworfQor
CitzdGF0aWMgaW5saW5lIHZvaWQgd2ViS2l0RmluZENvbnRyb2xsZXJTZXRTZWFyY2hEYXRhKFdl
YktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxlciwgY29uc3QgZ2NoYXIqIHNlYXJjaFRl
eHQsIGd1aW50IGZpbmRPcHRpb25zLCBndWludCBtYXhNYXRjaENvdW50KQoreworICAgIGZpbmRD
b250cm9sbGVyLT5wcml2LT5zZWFyY2hUZXh0ID0gc2VhcmNoVGV4dDsKKyAgICBmaW5kQ29udHJv
bGxlci0+cHJpdi0+ZmluZE9wdGlvbnMgPSBmaW5kT3B0aW9uczsKKyAgICBmaW5kQ29udHJvbGxl
ci0+cHJpdi0+bWF4TWF0Y2hDb3VudCA9IG1heE1hdGNoQ291bnQ7Cit9CisKKy8qKgorICogd2Vi
a2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2g6CisgKiBAZmluZF9jb250cm9sbGVyOiB0aGUgI1dl
YktpdEZpbmRDb250cm9sbGVyCisgKiBAc2VhcmNoX3RleHQ6IHRoZSB0ZXh0IHRvIGxvb2sgZm9y
CisgKiBAZmluZF9vcHRpb25zOiBhIGJpdG1hc2sgd2l0aCB0aGUgI1dlYktpdEZpbmRPcHRpb25z
IHVzZWQgaW4gdGhlIHNlYXJjaAorICogQG1heF9tYXRjaF9jb3VudDogdGhlIG1heGltdW0gbnVt
YmVyIG9mIG1hdGNoZXMgYWxsb3dlZCBpbiB0aGUgc2VhcmNoCisgKgorICogTG9va3MgZm9yIEBz
ZWFyY2hfdGV4dCBpbiB0aGUgI1dlYktpdFdlYlZpZXcgYXNzb2NpYXRlZCB3aXRoCisgKiBAZmlu
ZF9jb250cm9sbGVyIHNpbmNlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRvY3VtZW50LiBUaGUgb3V0
Y29tZQorICogb2YgdGhlIHNlYXJjaCB3aWxsIGJlIGFzeW5jaHJvbm91c2x5IHByb3ZpZGVkIGJ5
IHRoZQorICogV2ViS2l0RmluZENvbnRyb2xsZXI6OmZvdW5kLXRleHQgYW5kCisgKiBXZWJLaXRG
aW5kQ29udHJvbGxlcjo6ZmFpbGVkLXRvLWZpbmQtdGV4dC4KKyAqCisgKiBUbyBsb29rIGZvciB0
aGUgbmV4dCBvciBwcmV2aW91cyBvY2N1cnJlbmNlcyBvZiB0aGUgc2FtZSB0ZXh0CisgKiB3aXRo
IHRoZSBzYW1lIGZpbmQgb3B0aW9ucyB1c2Ugd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hf
bmV4dCgpCisgKiBhbmQvb3Igd2Via2l0X2ZpbmRfb3B0aW9uc19wcmV2aW91cygpLiBUaGUKKyAq
ICNXZWJLaXRGaW5kQ29udHJvbGxlciB3aWxsIHVzZSB0aGUgc2FtZSB0ZXh0IGFuZCBvcHRpb25z
IGZvciB0aGUKKyAqIGZvbGxvd2luZyBzZWFyY2hlcyB1bmxlc3MgdGhleSBhcmUgbW9kaWZpZWQg
YnkgYW5vdGhlciBjYWxsIHRvIHRoaXMKKyAqIG1ldGhvZC4KKyAqCisgKiBOb3RlIHRoYXQgaWYg
dGhlIG51bWJlciBvZiBtYXRjaGVzIGlzIGhpZ2hlciB0aGFuIEBtYXhfbWF0Y2hfY291bnQKKyAq
IHRoZW4gV2ViS2l0RmluZENvbnRyb2xsZXI6OmZvdW5kLXRleHQgd2lsbCByZXBvcnQgR19NQVhV
SU5UIG1hdGNoZXMKKyAqIGluc3RlYWQgb2YgdGhlIGFjdHVhbCBudW1iZXIuCisgKgorICogVGhp
cyBmdW5jdGlvbiB3aWxsIGFsc28gaGlnaGxpZ2ggdXAgdG8gQG1heF9tYXRjaF9jb3VudAorICog
bWFjaGVzLiBDYWxsZXJzIHNob3VsZCBjYWxsIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNo
X2ZpbmlzaCgpCisgKiB0byB1bmhpZ2hsaWdodCB0aGVtLgorICovCit2b2lkIHdlYmtpdF9maW5k
X2NvbnRyb2xsZXJfc2VhcmNoKFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxlciwg
Y29uc3QgZ2NoYXIqIHNlYXJjaFRleHQsIGd1aW50IGZpbmRPcHRpb25zLCBndWludCBtYXhNYXRj
aENvdW50KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0ZJTkRfQ09OVFJPTExF
UihmaW5kQ29udHJvbGxlcikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2VhcmNoVGV4dCk7CisK
KyAgICB3ZWJLaXRGaW5kQ29udHJvbGxlclNldFNlYXJjaERhdGEoZmluZENvbnRyb2xsZXIsIHNl
YXJjaFRleHQsIGZpbmRPcHRpb25zLCBtYXhNYXRjaENvdW50KTsKKyAgICB3ZWJLaXRGaW5kQ29u
dHJvbGxlclBlcmZvcm0oZmluZENvbnRyb2xsZXIsIEZpbmRPcGVyYXRpb24pOworfQorCisvKioK
KyAqIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX25leHQ6CisgKiBAZmluZF9jb250cm9s
bGVyOiB0aGUgI1dlYktpdEZpbmRDb250cm9sbGVyCisgKgorICogTG9va3MgZm9yIHRoZSBuZXh0
IG9jY3VycmVuY2Ugb2YgdGhlIHNlYXJjaCB0ZXh0LgorICoKKyAqIENhbGxpbmcgdGhpcyBtZXRo
b2QgYmVmb3JlIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoKCkgb3IKKyAqIHdlYmtpdF9m
aW5kX2NvbnRyb2xsZXJfY291bnRfbWF0Y2hlcygpIGlzIGEgcHJvZ3JhbW1pbmcgZXJyb3IuCisg
Ki8KK3ZvaWQgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfbmV4dChXZWJLaXRGaW5kQ29u
dHJvbGxlciogZmluZENvbnRyb2xsZXIpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
SVNfRklORF9DT05UUk9MTEVSKGZpbmRDb250cm9sbGVyKSk7CisKKyAgICBmaW5kQ29udHJvbGxl
ci0+cHJpdi0+ZmluZE9wdGlvbnMgPSBmaW5kQ29udHJvbGxlci0+cHJpdi0+ZmluZE9wdGlvbnMg
JiB+V0VCS0lUX0ZJTkRfT1BUSU9OU19CQUNLV0FSRFM7CisgICAgd2ViS2l0RmluZENvbnRyb2xs
ZXJQZXJmb3JtKGZpbmRDb250cm9sbGVyLCBGaW5kT3BlcmF0aW9uKTsKK30KKworLyoqCisgKiB3
ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9wcmV2aW91czoKKyAqIEBmaW5kX2NvbnRyb2xs
ZXI6IHRoZSAjV2ViS2l0RmluZENvbnRyb2xsZXIKKyAqCisgKiBMb29rcyBmb3IgdGhlIHByZXZp
b3VzIG9jY3VycmVuY2Ugb2YgdGhlIHNlYXJjaCB0ZXh0LgorICoKKyAqIENhbGxpbmcgdGhpcyBt
ZXRob2QgYmVmb3JlIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoKCkgb3IKKyAqIHdlYmtp
dF9maW5kX2NvbnRyb2xsZXJfY291bnRfbWF0Y2hlcygpIGlzIGEgcHJvZ3JhbW1pbmcgZXJyb3Iu
CisgKi8KK3ZvaWQgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfcHJldmlvdXMoV2ViS2l0
RmluZENvbnRyb2xsZXIqIGZpbmRDb250cm9sbGVyKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0lTX0ZJTkRfQ09OVFJPTExFUihmaW5kQ29udHJvbGxlcikpOworCisgICAgZmluZENv
bnRyb2xsZXItPnByaXYtPmZpbmRPcHRpb25zID0gZmluZENvbnRyb2xsZXItPnByaXYtPmZpbmRP
cHRpb25zIHwgV0VCS0lUX0ZJTkRfT1BUSU9OU19CQUNLV0FSRFM7CisgICAgd2ViS2l0RmluZENv
bnRyb2xsZXJQZXJmb3JtKGZpbmRDb250cm9sbGVyLCBGaW5kT3BlcmF0aW9uKTsKK30KKworLyoq
CisgKiB3ZWJraXRfZmluZF9jb250cm9sbGVyX2NvdW50X21hdGNoZXM6CisgKiBAZmluZF9jb250
cm9sbGVyOiB0aGUgI1dlYktpdEZpbmRDb250cm9sbGVyCisgKiBAc2VhcmNoX3RleHQ6IHRoZSB0
ZXh0IHRvIGxvb2sgZm9yCisgKiBAZmluZF9vcHRpb25zOiBhIGJpdG1hc2sgd2l0aCB0aGUgI1dl
YktpdEZpbmRPcHRpb25zIHVzZWQgaW4gdGhlIHNlYXJjaAorICogQG1heF9tYXRjaF9jb3VudDog
dGhlIG1heGltdW0gbnVtYmVyIG9mIG1hdGNoZXMgYWxsb3dlZCBpbiB0aGUgc2VhcmNoCisgKgor
ICogQ291bnRzIHRoZSBudW1iZXIgb2YgbWF0Y2hlcyBmb3IgQHNlYXJjaF90ZXh0IGZvdW5kIGlu
IHRoZQorICogI1dlYktpdFdlYlZpZXcgd2l0aCB0aGUgcHJvdmlkZWQgQGZpbmRfb3B0aW9ucy4g
VGhlIG51bWJlciBvZgorICogbWF0Y2hlcyB3aWxsIGJlIHByb3ZpZGVkIGJ5IHRoZQorICogV2Vi
S2l0RmluZENvbnRyb2xsZXI6OmNvdW50ZWQtbWF0Y2hlcyBzaWduYWwuCisgKi8KK3ZvaWQgd2Vi
a2l0X2ZpbmRfY29udHJvbGxlcl9jb3VudF9tYXRjaGVzKFdlYktpdEZpbmRDb250cm9sbGVyKiBm
aW5kQ29udHJvbGxlciwgY29uc3QgZ2NoYXIqIHNlYXJjaFRleHQsIGd1aW50IGZpbmRPcHRpb25z
LCBndWludCBtYXhNYXRjaENvdW50KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lT
X0ZJTkRfQ09OVFJPTExFUihmaW5kQ29udHJvbGxlcikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
c2VhcmNoVGV4dCk7CisKKyAgICB3ZWJLaXRGaW5kQ29udHJvbGxlclNldFNlYXJjaERhdGEoZmlu
ZENvbnRyb2xsZXIsIHNlYXJjaFRleHQsIGZpbmRPcHRpb25zLCBtYXhNYXRjaENvdW50KTsKKyAg
ICB3ZWJLaXRGaW5kQ29udHJvbGxlclBlcmZvcm0oZmluZENvbnRyb2xsZXIsIENvdW50T3BlcmF0
aW9uKTsKK30KKworLyoqCisgKiB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9maW5pc2g6
CisgKiBAZmluZF9jb250cm9sbGVyOiBhICNXZWJLaXRGaW5kQ29udHJvbGxlcgorICoKKyAqIEZp
bmlzaGVzIGEgZmluZCBvcGVyYXRpb24gc3RhcnRlZCBieQorICogd2Via2l0X2ZpbmRfY29udHJv
bGxlcl9zZWFyY2goKS4gSXQgd2lsbCBiYXNpY2FsbHkgdW5oaWdobGlnaHQKKyAqIGV2ZXJ5IHRl
eHQgbWF0Y2ggZm91bmQuCisgKi8KK3ZvaWQgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hf
ZmluaXNoKFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxlcikKK3sKKyAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9JU19GSU5EX0NPTlRST0xMRVIoZmluZENvbnRyb2xsZXIpKTsK
KworICAgIFdLUGFnZUhpZGVGaW5kVUkoZ2V0V0tQYWdlRnJvbVdlYktpdFdlYlZpZXcoZmluZENv
bnRyb2xsZXItPnByaXYtPndlYlZpZXcpKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbmRDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaW5kQ29udHJvbGxlci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIw
NTkwNjA5YThlZWUyYjhkOTZkMDM0ZjU0YWEwNThlMDVmMTljNmIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaW5kQ29udHJvbGxlci5o
CkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWYgIWRlZmluZWQoX19XRUJLSVQyX0hfSU5TSURFX18pICYmICFkZWZpbmVkKFdFQktJVDJf
Q09NUElMQVRJT04pCisjZXJyb3IgIk9ubHkgPHdlYmtpdDIvd2Via2l0Mi5oPiBjYW4gYmUgaW5j
bHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RmluZENvbnRyb2xsZXJf
aAorI2RlZmluZSBXZWJLaXRGaW5kQ29udHJvbGxlcl9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVj
dC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xT
CisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfRklORF9DT05UUk9MTEVSICAgICAgICAgICAgKHdlYmtp
dF9maW5kX2NvbnRyb2xsZXJfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX0ZJTkRfQ09OVFJP
TExFUihvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBX
RUJLSVRfVFlQRV9GSU5EX0NPTlRST0xMRVIsIFdlYktpdEZpbmRDb250cm9sbGVyKSkKKyNkZWZp
bmUgV0VCS0lUX0ZJTkRfQ09OVFJPTExFUl9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19D
TEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9GSU5EX0NPTlRST0xMRVIsIFdlYktpdEZp
bmRDb250cm9sbGVyQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfRklORF9DT05UUk9MTEVSKG9i
aikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBF
X0ZJTkRfQ09OVFJPTExFUikpCisjZGVmaW5lIFdFQktJVF9JU19GSU5EX0NPTlRST0xMRVJfQ0xB
U1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVf
RklORF9DT05UUk9MTEVSKSkKKyNkZWZpbmUgV0VCS0lUX0ZJTkRfQ09OVFJPTExFUl9HRVRfQ0xB
U1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9G
SU5EX0NPTlRST0xMRVIsIFdlYktpdEZpbmRDb250cm9sbGVyQ2xhc3MpKQorCit0eXBlZGVmIHN0
cnVjdCBfV2ViS2l0RmluZENvbnRyb2xsZXJQcml2YXRlIFdlYktpdEZpbmRDb250cm9sbGVyUHJp
dmF0ZTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRGaW5kQ29udHJvbGxlckNsYXNzICAgV2ViS2l0
RmluZENvbnRyb2xsZXJDbGFzczsKKworLyoqCisgKiBXZWJLaXRGaW5kT3B0aW9uczoKKyAqIEBX
RUJLSVRfRklORF9PUFRJT05TX05PTkU6IG5vIHNlYXJjaCBmbGFncywgdGhpcyBtZWFucyBhIGNh
c2UKKyAqICAgc2Vuc2l0aXZlLCBubyB3cmFwLCBmb3J3YXJkIG9ubHkgc2VhcmNoLgorICogQFdF
QktJVF9GSU5EX09QVElPTlNfQ0FTRV9JTlNFTlNJVElWRTogY2FzZSBpbnNlbnNpdGl2ZSBzZWFy
Y2guCisgKiBAV0VCS0lUX0ZJTkRfT1BUSU9OU19BVF9XT1JEX1NUQVJUUzogc2VhcmNoIHRleHQg
b25seSBhdCB0aGUKKyAqICAgYmVnaW5pbmcgb2YgdGhlIHdvcmRzLgorICogQFdFQktJVF9GSU5E
X09QVElPTlNfVFJFQVRfTUVESUFMX0NBUElUQUxfQVNfV09SRF9TVEFSVDogdHJlYXQKKyAqICAg
Y2FwaXRhbCBsZXR0ZXJzIGluIHRoZSBtaWRkbGUgb2Ygd29yZHMgYXMgd29yZCBzdGFydC4KKyAq
IEBXRUJLSVRfRklORF9PUFRJT05TX0JBQ0tXQVJEUzogc2VhcmNoIGJhY2t3YXJkcy4KKyAqIEBX
RUJLSVRfRklORF9PUFRJT05TX1dSQVBfQVJPVU5EOiBpZiBub3QgcHJlc2VudCBzZWFyY2ggd2ls
bCBzdG9wCisgKiAgIGF0IHRoZSBlbmQgb2YgdGhlIGRvY3VtZW50LgorICoKKyAqIEVudW0gdmFs
dWVzIHVzZWQgdG8gc3BlY2lmeSBzZWFyY2ggb3B0aW9ucy4KKyAqLwordHlwZWRlZiBlbnVtIHsK
KyAgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLAorCisgIFdFQktJVF9GSU5EX09QVElPTlNfQ0FT
RV9JTlNFTlNJVElWRSA9ICAgICAgICAgICAgICAgICAgIDEgPDwgMCwKKyAgV0VCS0lUX0ZJTkRf
T1BUSU9OU19BVF9XT1JEX1NUQVJUUyA9ICAgICAgICAgICAgICAgICAgICAgMSA8PCAxLAorICBX
RUJLSVRfRklORF9PUFRJT05TX1RSRUFUX01FRElBTF9DQVBJVEFMX0FTX1dPUkRfU1RBUlQgPSAx
IDw8IDIsCisgIFdFQktJVF9GSU5EX09QVElPTlNfQkFDS1dBUkRTID0gICAgICAgICAgICAgICAg
ICAgICAgICAgIDEgPDwgMywKKyAgV0VCS0lUX0ZJTkRfT1BUSU9OU19XUkFQX0FST1VORCA9ICAg
ICAgICAgICAgICAgICAgICAgICAgMSA8PCA0LAorfSBXZWJLaXRGaW5kT3B0aW9uczsKKworc3Ry
dWN0IF9XZWJLaXRGaW5kQ29udHJvbGxlciB7CisgICAgR09iamVjdCBwYXJlbnQ7CisKKyAgLyo8
IHByaXZhdGUgPiovCisgIFdlYktpdEZpbmRDb250cm9sbGVyUHJpdmF0ZSAqcHJpdjsKK307CisK
K3N0cnVjdCBfV2ViS2l0RmluZENvbnRyb2xsZXJDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBh
cmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9maW5kX2NvbnRyb2xs
ZXJfZ2V0X3R5cGUgICAgICAgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2ZpbmRfY29udHJvbGxlcl9zZWFyY2ggICAgICAgICAgICAgIChXZWJLaXRGaW5kQ29udHJvbGxl
ciAqZmluZF9jb250cm9sbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAqc2VhcmNoX3RleHQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgICAgICBmaW5k
X29wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1
aW50ICAgICAgICAgICAgICAgICBtYXhfbWF0Y2hfY291bnQpOworCitXRUJLSVRfQVBJIHZvaWQK
K3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX2ZpbmlzaCAgICAgICAoV2ViS2l0RmluZENv
bnRyb2xsZXIgKmZpbmRfY29udHJvbGxlcik7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2Zp
bmRfY29udHJvbGxlcl9zZWFyY2hfbmV4dCAgICAgICAgIChXZWJLaXRGaW5kQ29udHJvbGxlciAq
ZmluZF9jb250cm9sbGVyKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZmluZF9jb250cm9s
bGVyX3NlYXJjaF9wcmV2aW91cyAgICAgKFdlYktpdEZpbmRDb250cm9sbGVyICpmaW5kX2NvbnRy
b2xsZXIpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfY291bnRf
bWF0Y2hlcyAgICAgICAoV2ViS2l0RmluZENvbnRyb2xsZXIgKmZpbmRfY29udHJvbGxlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAg
ICAgICAgKnNlYXJjaF90ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBndWludCAgICAgICAgICAgICAgICAgZmluZF9vcHRpb25zLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgICAgbWF4
X21hdGNoX2NvdW50KTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCit3ZWJraXRfZmluZF9j
b250cm9sbGVyX2dldF9zZWFyY2hfdGV4dCAgICAgKFdlYktpdEZpbmRDb250cm9sbGVyICpmaW5k
X2NvbnRyb2xsZXIpOworCitXRUJLSVRfQVBJIGd1aW50Cit3ZWJraXRfZmluZF9jb250cm9sbGVy
X2dldF9vcHRpb25zICAgICAgICAgKFdlYktpdEZpbmRDb250cm9sbGVyICpmaW5kX2NvbnRyb2xs
ZXIpOworCitXRUJLSVRfQVBJIGd1aW50Cit3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9tYXhf
bWF0Y2hfY291bnQgKFdlYktpdEZpbmRDb250cm9sbGVyICpmaW5kX2NvbnRyb2xsZXIpOworCitX
RUJLSVRfQVBJIFdlYktpdFdlYlZpZXcgKgord2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfd2Vi
X3ZpZXcgICAgICAgIChXZWJLaXRGaW5kQ29udHJvbGxlciAqZmluZF9jb250cm9sbGVyKTsKKwor
R19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRQcml2YXRlLmgKaW5kZXggNDNkMjZjYzg1NmZjYTMyYTFjNThmOTg4ODczZjNi
MDNlYWU5NDYwOS4uZTc4NWMzNjM4MzUwZDg0YTgwOGMwZmFkNTBlZTgyYmIwNjE2NDY3NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaApA
QCAtMjgsNyArMjgsOSBAQAogCiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0FQSUNhc3QuaD4KICNpbmNs
dWRlIDxXZWJLaXQyL1dLRG93bmxvYWQuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLRmluZE9wdGlv
bnMuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8V2ViS2l0
Mi9XS1N0cmluZy5oPgogI2luY2x1ZGUgPFdlYktpdDIvV2ViS2l0Mi5oPgogI2luY2x1ZGUgPGds
aWIuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAppbmRleCBhZjc5OTM1ZjRlYzZm
YTJmMDEwN2QzMzQ4YzE0ZTllZTQ3MmQyZWU4Li41OGRjYTY2ODRlZWVmNWU5NWI1MDI1NTFkNGI4
MjRhYzJjMTRmMWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3LmNwcApAQCAtODksNiArODksOCBAQCBzdHJ1Y3QgX1dlYktpdFdlYlZp
ZXdQcml2YXRlIHsKIAogICAgIEdSZWZQdHI8V2ViS2l0SGl0VGVzdFJlc3VsdD4gbW91c2VUYXJn
ZXRIaXRUZXN0UmVzdWx0OwogICAgIHVuc2lnbmVkIG1vdXNlVGFyZ2V0TW9kaWZpZXJzOworCisg
ICAgR1JlZlB0cjxXZWJLaXRGaW5kQ29udHJvbGxlcj4gZmluZENvbnRyb2xsZXI7CiB9OwogCiBz
dGF0aWMgZ3VpbnQgc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAsIH07CkBAIC0xMzE1LDcgKzEz
MTcsNiBAQCBnZG91YmxlIHdlYmtpdF93ZWJfdmlld19nZXRfem9vbV9sZXZlbChXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3KQogICAgIHJldHVybiBXS1BhZ2VHZXRQYWdlWm9vbUZhY3Rvcih3a1BhZ2Up
OwogfQogCi0KIHN0YXRpYyB2b2lkIGRpZFZhbGlkYXRlQ29tbWFuZChXS1N0cmluZ1JlZiBjb21t
YW5kLCBib29sIGlzRW5hYmxlZCwgaW50MzJfdCBzdGF0ZSwgV0tFcnJvclJlZiwgdm9pZCogY29u
dGV4dCkKIHsKICAgICBHUmVmUHRyPEdTaW1wbGVBc3luY1Jlc3VsdD4gcmVzdWx0ID0gYWRvcHRH
UmVmKEdfU0lNUExFX0FTWU5DX1JFU1VMVChjb250ZXh0KSk7CkBAIC0xMzg4LDMgKzEzODksMjMg
QEAgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZXhlY3V0ZV9lZGl0aW5nX2NvbW1hbmQoV2ViS2l0V2Vi
Vmlldyogd2ViVmlldywgY29uc3QgY2hhcioKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
d2tDb21tYW5kKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGNvbW1hbmQp
KTsKICAgICBXS1BhZ2VFeGVjdXRlQ29tbWFuZCh0b0FQSShwYWdlKSwgd2tDb21tYW5kLmdldCgp
KTsKIH0KKworLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ZpbmRfY29udHJvbGxlcjoKKyAq
IEB3ZWJfdmlldzogdGhlICNXZWJLaXRXZWJWaWV3CisgKgorICogR2V0cyB0aGUgI1dlYktpdEZp
bmRDb250cm9sbGVyIHRoYXQgd2lsbCBhbGxvdyB0aGUgY2FsbGVyIHRvIHF1ZXJ5CisgKiB0aGUg
I1dlYktpdFdlYlZpZXcgZm9yIHRoZSB0ZXh0IHRvIGxvb2sgZm9yLgorICoKKyAqIFJldHVybnM6
ICh0cmFuc2ZlciBub25lKTogdGhlICNXZWJLaXRGaW5kQ29udHJvbGxlciBhc3NvY2lhdGVkIHRv
CisgKiB0aGlzIHBhcnRpY3VsYXIgI1dlYktpdFdlYlZpZXcuCisgKi8KK1dlYktpdEZpbmRDb250
cm9sbGVyKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ZpbmRfY29udHJvbGxlcihXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklF
Vyh3ZWJWaWV3KSwgMCk7CisKKyAgICBpZiAoIXdlYlZpZXctPnByaXYtPmZpbmRDb250cm9sbGVy
KQorICAgICAgICB3ZWJWaWV3LT5wcml2LT5maW5kQ29udHJvbGxlciA9IGFkb3B0R1JlZihXRUJL
SVRfRklORF9DT05UUk9MTEVSKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9GSU5EX0NPTlRST0xM
RVIsICJ3ZWItdmlldyIsIHdlYlZpZXcsIE5VTEwpKSk7CisKKyAgICByZXR1cm4gd2ViVmlldy0+
cHJpdi0+ZmluZENvbnRyb2xsZXIuZ2V0KCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKaW5kZXggMDA4MWJlM2M0OGRhYjQ1NTU0NDk3
ZDE2MGY3OWNkOTY4YTg1ZGZlNS4uMDQxMzlkZjE5OGU3ZWUxZjEzYjUxNzEwNTE5YTI4ZWU4ODE5
MGNjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXcuaApAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRCYWNr
Rm9yd2FyZExpc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KKyNpbmNs
dWRlIDx3ZWJraXQyL1dlYktpdEZpbmRDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9X
ZWJLaXRIaXRUZXN0UmVzdWx0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJDb250ZXh0
Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRTZXR0aW5ncy5oPgpAQCAtMjYzLDYgKzI2NCwx
MCBAQCB3ZWJraXRfd2ViX3ZpZXdfY2FuX2V4ZWN1dGVfZWRpdGluZ19jb21tYW5kX2ZpbmlzaCAo
V2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqdwogV0VCS0lUX0FQSSB2b2lkCiB3ZWJraXRfd2Vi
X3ZpZXdfZXhlY3V0ZV9lZGl0aW5nX2NvbW1hbmQgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAg
ICAgICAgICAgICAqd2ViX3ZpZXcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgICAqY29tbWFuZCk7CisK
K1dFQktJVF9BUEkgV2ViS2l0RmluZENvbnRyb2xsZXIgKgord2Via2l0X3dlYl92aWV3X2dldF9m
aW5kX2NvbnRyb2xsZXIgICAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAg
KndlYl92aWV3KTsKKwogR19FTkRfREVDTFMKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbApp
bmRleCBjY2NlMDRmN2FmYjdkZjcwNjdmNjQwYTA4MDE0YjY5MmE2YjI5MTY0Li5mNTM0NWRmZDVk
YWZkYzg5MzBjNWMyYjc3MjgxN2JjZjdjYTBmNDhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKQEAg
LTI2LDYgKzI2LDcgQEAKICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0UmVzcG9uc2VQ
b2xpY3lEZWNpc2lvbi54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0SGl0
VGVzdFJlc3VsdC54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RXJyb3Iu
eG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdEZpbmRDb250cm9sbGVyLnht
bCIvPgogICA8L2NoYXB0ZXI+CiAKICAgPGluZGV4IGlkPSJpbmRleC1hbGwiPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rp
b25zLnR4dCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0
ay1zZWN0aW9ucy50eHQKaW5kZXggNTBjNDJkYjllZDY0N2QxY2JiNWEzNjE0ZDRhZDQ0NTM3YjFm
YmVjMy4uNjVjMzQyNTgyMGEwMGU1ZWU0NjQ0MDU3ZGFiYWM0ZmI4YjE0N2UyMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rp
b25zLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtp
dDJndGstc2VjdGlvbnMudHh0CkBAIC04Niw2ICs4Niw3IEBAIHdlYmtpdF93ZWJfdmlld19nZXRf
em9vbV9sZXZlbAogd2Via2l0X3dlYl92aWV3X2Nhbl9leGVjdXRlX2VkaXRpbmdfY29tbWFuZAog
d2Via2l0X3dlYl92aWV3X2Nhbl9leGVjdXRlX2VkaXRpbmdfY29tbWFuZF9maW5pc2gKIHdlYmtp
dF93ZWJfdmlld19leGVjdXRlX2VkaXRpbmdfY29tbWFuZAord2Via2l0X3dlYl92aWV3X2dldF9m
aW5kX2NvbnRyb2xsZXIKIAogPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CiBXZWJLaXRXZWJWaWV3Q2xh
c3MKQEAgLTQzMywzICs0MzQsMzAgQEAgd2Via2l0X3BvbGljeV9lcnJvcl9xdWFyawogd2Via2l0
X2Rvd25sb2FkX2Vycm9yX3F1YXJrCiA8L1NFQ1RJT04+CiAKKzxTRUNUSU9OPgorPEZJTEU+V2Vi
S2l0RmluZENvbnRyb2xsZXI8L0ZJTEU+CitXZWJLaXRGaW5kQ29udHJvbGxlcgorV2ViS2l0Rmlu
ZE9wdGlvbnMKK3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoCit3ZWJraXRfZmluZF9jb250
cm9sbGVyX3NlYXJjaF9maW5pc2gKK3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX25leHQK
K3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX3ByZXZpb3VzCit3ZWJraXRfZmluZF9jb250
cm9sbGVyX2dldF9zZWFyY2hfdGV4dAord2Via2l0X2ZpbmRfY29udHJvbGxlcl9jb3VudF9tYXRj
aGVzCit3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9vcHRpb25zCit3ZWJraXRfZmluZF9jb250
cm9sbGVyX2dldF9tYXhfbWF0Y2hfY291bnQKK3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X3dl
Yl92aWV3CisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RmluZENvbnRyb2xsZXJDbGFz
cworV0VCS0lUX1RZUEVfRklORF9DT05UUk9MTEVSCitXRUJLSVRfRklORF9DT05UUk9MTEVSCitX
RUJLSVRfSVNfRklORF9DT05UUk9MTEVSCitXRUJLSVRfRklORF9DT05UUk9MTEVSX0NMQVNTCitX
RUJLSVRfSVNfRklORF9DT05UUk9MTEVSX0NMQVNTCitXRUJLSVRfRklORF9DT05UUk9MTEVSX0dF
VF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgorV2ViS2l0RmluZENvbnRyb2xsZXJQcml2
YXRlCit3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF90eXBlCis8L1NFQ1RJT04+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlw
ZXMgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlw
ZXMKaW5kZXggY2JhMmRmNDJjM2Q1MjQ0MzA1ZWVlNDYxNmI5ZTc4MzVhZmQxZjYyZi4uMmUwZjUw
MDJjYWU3M2I4MjU5NjQ2OGRlMWFmNjcwYWQ3NTkxNWQ3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBlcwpAQCAtOSw0
ICs5LDQgQEAgd2Via2l0X3VyaV9yZXNwb25zZV9nZXRfdHlwZQogd2Via2l0X3VyaV9yZXF1ZXN0
X2dldF90eXBlCiB3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3R5cGUKIHdlYmtpdF9kb3du
bG9hZF9nZXRfdHlwZQotCit3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF90eXBlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5h
bSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFt
CmluZGV4IDcyNDFiOTk4MDhlZmYxMGNjZTcyN2ZlZDUzYmU4Y2E2NTQxM2E0NzcuLjNhMTFkZjhi
ODhiMTdiNTgzZDYyODk4ZDFlMGM2MDQxZWYyN2U5OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCkBAIC0xLDExICsx
LDEyIEBACiBURVNUX1BST0dTICs9IFwKLQlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdl
YktpdFdlYkNvbnRleHQgXAotCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0V2ViS2l0V2Vi
VmlldyBcCi0JUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RMb2FkZXJDbGllbnQgXAotCVBy
b2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0V2ViS2l0U2V0dGluZ3MgXAogCVByb2dyYW1zL1dl
YktpdDJBUElUZXN0cy9UZXN0QmFja0ZvcndhcmRMaXN0IFwKIAlQcm9ncmFtcy9XZWJLaXQyQVBJ
VGVzdHMvVGVzdERvd25sb2FkcyBcCisJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RMb2Fk
ZXJDbGllbnQgXAorCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0V2ViS2l0RmluZENvbnRy
b2xsZXIgXAogCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0V2ViS2l0UG9saWN5Q2xpZW50
IFwKKwlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFNldHRpbmdzIFwKKwlQcm9n
cmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFdlYkNvbnRleHQgXAorCVByb2dyYW1zL1dl
YktpdDJBUElUZXN0cy9UZXN0V2ViS2l0V2ViVmlldyBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRl
c3RzL1Rlc3RXZWJWaWV3RWRpdG9yCiAKIG5vaW5zdF9QUk9HUkFNUyArPSAkKFRFU1RfUFJPR1Mp
CkBAIC0xMTgsMyArMTE5LDkgQEAgUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJWaWV3
RWRpdG9yX1NPVVJDRVMgPSBcCiBQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYlZpZXdF
ZGl0b3JfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpCiBQcm9ncmFtc19XZWJL
aXQyQVBJVGVzdHNfVGVzdFdlYlZpZXdFZGl0b3JfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRh
ZGQpCiBQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYlZpZXdFZGl0b3JfTERGTEFHUyA9
ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQorCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVz
dFdlYktpdEZpbmRDb250cm9sbGVyX1NPVVJDRVMgPSBcCisJU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEZpbmRDb250cm9sbGVyLmNwcAorUHJvZ3JhbXNf
V2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlcl9DUFBGTEFHUyA9ICQod2Vi
a2l0Ml90ZXN0c19jcHBmbGFncykKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViS2l0
RmluZENvbnRyb2xsZXJfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19X
ZWJLaXQyQVBJVGVzdHNfVGVzdFdlYktpdEZpbmRDb250cm9sbGVyX0xERkxBR1MgPSAkKHdlYmtp
dDJfdGVzdHNfbGRmbGFncykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0RmluZENvbnRyb2xsZXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjE3M2E5ZGZjNjczMWJkZTM4ZjM2NDc1M2ZhNjIzOGExZGU3MjkxZmIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0
V2ViS2l0RmluZENvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsMzcwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRl
ICJMb2FkVHJhY2tpbmdUZXN0LmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdl
YmtpdDIvd2Via2l0Mi5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKworc3Rh
dGljIGNvbnN0IGNoYXIqIHRlc3RTdHJpbmcgPSAiPGh0bWw+PGJvZHk+Zmlyc3QgdGVzdGluZyBz
ZWNvbmQgdGVzdGluZyBzZWNvbmRIYWxmPC9ib2R5PjwvaHRtbD4iOworCitjbGFzcyBGaW5kQ29u
dHJvbGxlclRlc3Q6IHB1YmxpYyBMb2FkVHJhY2tpbmdUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtF
X0dMSUJfVEVTVF9GSVhUVVJFKEZpbmRDb250cm9sbGVyVGVzdCk7CisKKyAgICBGaW5kQ29udHJv
bGxlclRlc3QoKQorICAgICAgICA6IG1fcnVuRmluZFVudGlsQ29tcGxldGlvbihmYWxzZSkKKyAg
ICAgICAgLCBtX2ZpbmRDb250cm9sbGVyKHdlYmtpdF93ZWJfdmlld19nZXRfZmluZF9jb250cm9s
bGVyKG1fd2ViVmlldykpCisgICAgeworICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVu
VGVzdEZpbmlzaGVzKEdfT0JKRUNUKG1fZmluZENvbnRyb2xsZXIuZ2V0KCkpKTsKKyAgICB9CisK
KyAgICB+RmluZENvbnRyb2xsZXJUZXN0KCkKKyAgICB7CisgICAgICAgIGlmIChtX2ZpbmRDb250
cm9sbGVyKQorICAgICAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVk
KG1fZmluZENvbnRyb2xsZXIuZ2V0KCksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAs
IHRoaXMpOworICAgIH0KKworICAgIHZvaWQgZmluZChjb25zdCBjaGFyKiBzZWFyY2hUZXh0LCBn
dWludCBmaW5kT3B0aW9ucywgZ3VpbnQgbWF4TWF0Y2hDb3VudCkKKyAgICB7CisgICAgICAgIC8v
IER1ZSB0byBodHRwOi8vd2Via2l0Lm9yZy9iLzc2NTIyIHdlIGhhdmUgdG8gYXJ0aWZpY2lhbGx5
CisgICAgICAgIC8vIGFkZCBoZXJlIHRoZSBzaG93IG92ZXJsYXkgb3B0aW9uICh0aGF0IHdlIGRv
IG5vdCBldmVuCisgICAgICAgIC8vIGV4cG9zZSBpbiB0aGUgQVBJKSB0byBnZXQgdGhlIERpZEZp
bmRTdHJpbmcgbWVzc3NhZ2UKKyAgICAgICAgLy8gaXNzdWVkLiBSZW1vdmUgdGhpcyBvbmNlIDc2
NTIyIGlzIGZpeGVkLgorICAgICAgICBmaW5kT3B0aW9ucyA9IGZpbmRPcHRpb25zIHwgMSA8PCA1
OworCisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9maW5kQ29udHJvbGxlci5nZXQoKSwgImZv
dW5kLXRleHQiLCBHX0NBTExCQUNLKGZvdW5kVGV4dENhbGxiYWNrKSwgdGhpcyk7CisgICAgICAg
IGdfc2lnbmFsX2Nvbm5lY3QobV9maW5kQ29udHJvbGxlci5nZXQoKSwgImZhaWxlZC10by1maW5k
LXRleHQiLCBHX0NBTExCQUNLKGZhaWxlZFRvRmluZFRleHRDYWxsYmFjayksIHRoaXMpOworICAg
ICAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaChtX2ZpbmRDb250cm9sbGVyLmdldCgp
LCBzZWFyY2hUZXh0LCBmaW5kT3B0aW9ucywgbWF4TWF0Y2hDb3VudCk7CisgICAgfQorCisgICAg
dm9pZCBjb3VudChjb25zdCBjaGFyKiBzZWFyY2hUZXh0LCBndWludCBmaW5kT3B0aW9ucywgZ3Vp
bnQgbWF4TWF0Y2hDb3VudCkKKyAgICB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9maW5k
Q29udHJvbGxlci5nZXQoKSwgImNvdW50ZWQtbWF0Y2hlcyIsIEdfQ0FMTEJBQ0soY291bnRlZE1h
dGNoZXNDYWxsYmFjayksIHRoaXMpOworICAgICAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX2Nv
dW50X21hdGNoZXMobV9maW5kQ29udHJvbGxlci5nZXQoKSwgc2VhcmNoVGV4dCwgZmluZE9wdGlv
bnMsIG1heE1hdGNoQ291bnQpOworICAgIH0KKworICAgIHZvaWQgd2FpdFVudGlsRmluZEZpbmlz
aGVkKCkKKyAgICB7CisgICAgICAgIG1fcnVuRmluZFVudGlsQ29tcGxldGlvbiA9IHRydWU7Cisg
ICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBHUmVmUHRy
PFdlYktpdEZpbmRDb250cm9sbGVyPiBtX2ZpbmRDb250cm9sbGVyOworICAgIGJvb2wgbV90ZXh0
Rm91bmQ7CisgICAgdW5zaWduZWQgbV9tYXRjaENvdW50OworCitwcml2YXRlOgorICAgIGJvb2wg
bV9ydW5GaW5kVW50aWxDb21wbGV0aW9uOworCisgICAgc3RhdGljIHZvaWQgZm91bmRUZXh0Q2Fs
bGJhY2soV2ViS2l0RmluZENvbnRyb2xsZXIqLCBndWludCBtYXRjaENvdW50LCBGaW5kQ29udHJv
bGxlclRlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5tX3RleHRGb3VuZCA9IHRydWU7
CisgICAgICAgIHRlc3QtPm1fbWF0Y2hDb3VudCA9IG1hdGNoQ291bnQ7CisgICAgICAgIGlmICh0
ZXN0LT5tX3J1bkZpbmRVbnRpbENvbXBsZXRpb24pCisgICAgICAgICAgICBnX21haW5fbG9vcF9x
dWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGZhaWxlZFRv
RmluZFRleHRDYWxsYmFjayhXZWJLaXRGaW5kQ29udHJvbGxlciosIEZpbmRDb250cm9sbGVyVGVz
dCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPm1fdGV4dEZvdW5kID0gZmFsc2U7CisgICAg
ICAgIGlmICh0ZXN0LT5tX3J1bkZpbmRVbnRpbENvbXBsZXRpb24pCisgICAgICAgICAgICBnX21h
aW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHN0YXRpYyB2b2lk
IGNvdW50ZWRNYXRjaGVzQ2FsbGJhY2soV2ViS2l0RmluZENvbnRyb2xsZXIqLCBndWludCBtYXRj
aENvdW50LCBGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5t
X21hdGNoQ291bnQgPSBtYXRjaENvdW50OworICAgICAgICBpZiAodGVzdC0+bV9ydW5GaW5kVW50
aWxDb21wbGV0aW9uKQorICAgICAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5M
b29wKTsKKyAgICB9Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJUZXh0Rm91
bmQoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3Qt
PmxvYWRIdG1sKHRlc3RTdHJpbmcsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hl
ZCgpOworCisgICAgdGVzdC0+ZmluZCgidGVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9O
RSwgMSk7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2Vy
dCh0ZXN0LT5tX3RleHRGb3VuZCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJvbGxl
clRleHROb3RGb3VuZChGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7
CisgICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0cmluZywgMCk7CisgICAgdGVzdC0+d2FpdFVudGls
TG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5maW5kKCJub3RGb3VuZCIsIFdFQktJVF9GSU5E
X09QVElPTlNfTk9ORSwgMSk7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisK
KyAgICBnX2Fzc2VydCghdGVzdC0+bV90ZXh0Rm91bmQpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0
RmluZENvbnRyb2xsZXJNYXRjaENvdW50KEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3RyaW5nLCAwKTsKKyAgICB0ZXN0
LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPmZpbmQoInRlc3RpbmciLCBX
RUJLSVRfRklORF9PUFRJT05TX05PTkUsIDIpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5p
c2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDIpOworICAgIGdf
YXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEZpbmRDb250
cm9sbGVyTWF4TWF0Y2hDb3VudChGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0cmluZywgMCk7CisgICAgdGVzdC0+d2Fp
dFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5maW5kKCJ0ZXN0aW5nIiwgV0VCS0lU
X0ZJTkRfT1BUSU9OU19OT05FLCAxKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQo
KTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3VudCA9PSBHX01BWFVJTlQpOworICAg
IGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEZpbmRD
b250cm9sbGVyTmV4dChGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7
CisgICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0cmluZywgMCk7CisgICAgdGVzdC0+d2FpdFVudGls
TG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5maW5kKCJ0ZXN0aW5nIiwgV0VCS0lUX0ZJTkRf
T1BUSU9OU19OT05FLCAyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKwor
ICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX21h
dGNoQ291bnQgPT0gMik7CisKKyAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9uZXh0
KHRlc3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRG
aW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworICAgIGdfYXNz
ZXJ0KHRlc3QtPm1fbWF0Y2hDb3VudCA9PSAyKTsKKyAgICBnX2Fzc2VydCghKHdlYmtpdF9maW5k
X2NvbnRyb2xsZXJfZ2V0X29wdGlvbnModGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSkgJiBX
RUJLSVRfRklORF9PUFRJT05TX0JBQ0tXQVJEUykpOworCisgICAgd2Via2l0X2ZpbmRfY29udHJv
bGxlcl9zZWFyY2hfbmV4dCh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKTsKKyAgICB0ZXN0
LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX3RleHRG
b3VuZCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDIpOworICAgIGdfYXNz
ZXJ0KCEod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfb3B0aW9ucyh0ZXN0LT5tX2ZpbmRDb250
cm9sbGVyLmdldCgpKSAmIFdFQktJVF9GSU5EX09QVElPTlNfQkFDS1dBUkRTKSk7Cit9CisKK3N0
YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlclByZXZpb3VzKEZpbmRDb250cm9sbGVyVGVzdCog
dGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3RyaW5nLCAw
KTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPmZpbmQo
InRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDIpOworICAgIHRlc3QtPndhaXRV
bnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09
IDIpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKKworICAgIHdlYmtpdF9maW5k
X2NvbnRyb2xsZXJfc2VhcmNoX25leHQodGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSk7Cisg
ICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5t
X3RleHRGb3VuZCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDIpOworICAg
IGdfYXNzZXJ0KCEod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfb3B0aW9ucyh0ZXN0LT5tX2Zp
bmRDb250cm9sbGVyLmdldCgpKSAmIFdFQktJVF9GSU5EX09QVElPTlNfQkFDS1dBUkRTKSk7CisK
KyAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9wcmV2aW91cyh0ZXN0LT5tX2ZpbmRD
b250cm9sbGVyLmdldCgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKwor
ICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX21h
dGNoQ291bnQgPT0gMik7CisgICAgZ19hc3NlcnQod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRf
b3B0aW9ucyh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKSAmIFdFQktJVF9GSU5EX09QVElP
TlNfQkFDS1dBUkRTKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVyQ291bnRl
ZE1hdGNoZXMoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAg
IHRlc3QtPmxvYWRIdG1sKHRlc3RTdHJpbmcsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRG
aW5pc2hlZCgpOworCisgICAgdGVzdC0+Y291bnQoInRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJ
T05TX05PTkUsIDIpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAg
Z19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDIpOworCisgICAgdGVzdC0+Y291bnQoImZp
cnN0IiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxG
aW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3VudCA9PSAxKTsK
KworICAgIHRlc3QtPmNvdW50KCJub3RGb3VuZCIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwg
Mik7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCgh
dGVzdC0+bV9tYXRjaENvdW50KTsKK30KKworc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVy
T3B0aW9ucyhGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAg
dGVzdC0+bG9hZEh0bWwodGVzdFN0cmluZywgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZp
bmlzaGVkKCk7CisKKyAgICB0ZXN0LT5maW5kKCJUZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9O
U19OT05FLCAyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdf
YXNzZXJ0KCF0ZXN0LT5tX3RleHRGb3VuZCk7CisKKyAgICB0ZXN0LT5maW5kKCJUZXN0aW5nIiwg
V0VCS0lUX0ZJTkRfT1BUSU9OU19DQVNFX0lOU0VOU0lUSVZFLCAyKTsKKyAgICB0ZXN0LT53YWl0
VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsK
KworICAgIHRlc3QtPmZpbmQoImVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMik7
CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0
LT5tX3RleHRGb3VuZCk7CisKKyAgICB0ZXN0LT5maW5kKCJlc3RpbmciLCBXRUJLSVRfRklORF9P
UFRJT05TX0FUX1dPUkRfU1RBUlRTLCAyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNo
ZWQoKTsKKworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX3RleHRGb3VuZCk7CisKKyAgICB0ZXN0LT5m
aW5kKCJIYWxmIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19BVF9XT1JEX1NUQVJUUywgMik7CisgICAg
dGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCghdGVzdC0+bV90
ZXh0Rm91bmQpOworCisgICAgdGVzdC0+ZmluZCgiSGFsZiIsIFdFQktJVF9GSU5EX09QVElPTlNf
QVRfV09SRF9TVEFSVFMgfCBXRUJLSVRfRklORF9PUFRJT05TX1RSRUFUX01FRElBTF9DQVBJVEFM
X0FTX1dPUkRfU1RBUlQsIDIpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOwor
CisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworCisgICAgdGVzdC0+ZmluZCgidGVz
dGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfV1JBUF9BUk9VTkQsIDMpOworICAgIHRlc3QtPndh
aXRVbnRpbEZpbmRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsK
KworICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX25leHQodGVzdC0+bV9maW5kQ29u
dHJvbGxlci5nZXQoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisgICAg
Z19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworCisgICAgd2Via2l0X2ZpbmRfY29udHJvbGxl
cl9zZWFyY2hfbmV4dCh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7
Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBnZGtQaXhidWZFcXVhbChHZGtQaXhidWYqIGZpcnN0UGl4
YnVmLCBHZGtQaXhidWYqIHNlY29uZFBpeGJ1ZikKK3sKKyAgICBndWludCBmaXJzdExlbmd0aCwg
c2Vjb25kTGVuZ3RoLCBpOworICAgIGd1Y2hhciogZmlyc3RQaXhlbHM7CisgICAgZ3VjaGFyKiBz
ZWNvbmRQaXhlbHM7CisKKyAgICBmaXJzdFBpeGVscyA9IGdka19waXhidWZfZ2V0X3BpeGVsc193
aXRoX2xlbmd0aChjb25zdF9jYXN0PEdka1BpeGJ1Zio+KGZpcnN0UGl4YnVmKSwgJmZpcnN0TGVu
Z3RoKTsKKyAgICBzZWNvbmRQaXhlbHMgPSBnZGtfcGl4YnVmX2dldF9waXhlbHNfd2l0aF9sZW5n
dGgoY29uc3RfY2FzdDxHZGtQaXhidWYqPihzZWNvbmRQaXhidWYpLCAmc2Vjb25kTGVuZ3RoKTsK
KworICAgIGlmIChmaXJzdExlbmd0aCAhPSBzZWNvbmRMZW5ndGgpCisgICAgICAgIHJldHVybiBG
QUxTRTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBmaXJzdExlbmd0aDsgaSsrKQorICAgICAgICBp
ZiAoZmlyc3RQaXhlbHNbaV0gIT0gc2Vjb25kUGl4ZWxzW2ldKQorICAgICAgICAgICAgcmV0dXJu
IEZBTFNFOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RGaW5kQ29u
dHJvbGxlckhpZGUoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQorewor
ICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RTdHJpbmcsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExv
YWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVk
KCk7CisgICAgaW50IGFsbG9jYXRlZEhlaWdodCA9IGd0a193aWRnZXRfZ2V0X2FsbG9jYXRlZF9o
ZWlnaHQoR1RLX1dJREdFVCh0ZXN0LT5tX3dlYlZpZXcpKTsKKyAgICBpbnQgYWxsb2NhdGVkV2lk
dGggPSBndGtfd2lkZ2V0X2dldF9hbGxvY2F0ZWRfd2lkdGgoR1RLX1dJREdFVCh0ZXN0LT5tX3dl
YlZpZXcpKTsKKyAgICBHZGtXaW5kb3cqIHdlYlZpZXdHZGtXaW5kb3cgPSBndGtfd2lkZ2V0X2dl
dF93aW5kb3coR1RLX1dJREdFVCh0ZXN0LT5tX3dlYlZpZXcpKTsKKyAgICBnX2Fzc2VydCh3ZWJW
aWV3R2RrV2luZG93KTsKKworICAgIC8vIFdlIG5lZWQgdG8gdXNlIHRob3NlIGRlbGF5cyB0byBs
ZXQgV2ViVmlldyBwYWludCBpdHMgY29udGVudHMKKyAgICAvLyBiZWZvcmUgdGFraW5nIGEgc25h
cHNob3QuIEFsc28gZm9yIHRoZXJlIGlzIG5vIHdheSB0byBrbm93IGlmCisgICAgLy8gV2ViQ29y
ZSBoYXMgaGlnaGxpZ2h0ZWQgdGhlIG1hdGNoZXMgb3Igbm8sIGFuZCB0aGVyZSBpcyBhbHNvIG5v
CisgICAgLy8gd2F5IHRvIGtub3cgd2hlbiBhIGVkaXRpbmcgY29tbWFuZCBoYXMgZmluaXNoZWQu
CisgICAgdGVzdC0+d2FpdCgxLjApOworICAgIEdka1BpeGJ1Ziogb3JpZ2luYWxQaXhidWYgPSBn
ZGtfcGl4YnVmX2dldF9mcm9tX3dpbmRvdyh3ZWJWaWV3R2RrV2luZG93LCAwLCAwLCBhbGxvY2F0
ZWRIZWlnaHQsIGFsbG9jYXRlZFdpZHRoKTsKKyAgICBnX2Fzc2VydChvcmlnaW5hbFBpeGJ1Zik7
CisKKyAgICB0ZXN0LT5maW5kKCJ0ZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAx
KTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydCh0ZXN0
LT5tX3RleHRGb3VuZCk7CisKKyAgICB0ZXN0LT53YWl0KDEuMCk7CisgICAgR2RrUGl4YnVmKiBo
aWdobGlnaHRQaXhidWYgPSBnZGtfcGl4YnVmX2dldF9mcm9tX3dpbmRvdyh3ZWJWaWV3R2RrV2lu
ZG93LCAwLCAwLCBhbGxvY2F0ZWRIZWlnaHQsIGFsbG9jYXRlZFdpZHRoKTsKKyAgICBnX2Fzc2Vy
dChoaWdobGlnaHRQaXhidWYpOworICAgIGdfYXNzZXJ0KCFnZGtQaXhidWZFcXVhbChvcmlnaW5h
bFBpeGJ1ZiwgaGlnaGxpZ2h0UGl4YnVmKSk7CisKKyAgICAvLyBSZXF1aXJlcyBodHRwOi8vd2Vi
a2l0Lm9yZy9iLzc3NzQ3IHRvIGJlIGZpeGVkCisgICAgLy8gV2ViS2l0RmluZENvbnRyb2xsZXIq
IGZpbmRDb250cm9sbGVyID0gd2Via2l0X3dlYl92aWV3X2dldF9maW5kX2NvbnRyb2xsZXIodGVz
dC0+bV93ZWJWaWV3KTsKKyAgICAvLyB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9maW5p
c2goZmluZENvbnRyb2xsZXIpOworICAgIC8vIGd0a193aWRnZXRfc2hvd19ub3coR1RLX1dJREdF
VCh0ZXN0LT5tX3dlYlZpZXcpKTsKKyAgICAvLyB3ZWJraXRfd2ViX3ZpZXdfZXhlY3V0ZV9lZGl0
aW5nX2NvbW1hbmQodGVzdC0+bV93ZWJWaWV3LCAiVW5zZWxlY3QiKTsKKworICAgIC8vIHRlc3Qt
PndhaXQoMS4wKTsKKyAgICAvLyBHZGtQaXhidWYqIHVuaGlnaGxpZ2h0UGl4YnVmID0gZ2RrX3Bp
eGJ1Zl9nZXRfZnJvbV93aW5kb3cod2ViVmlld0dka1dpbmRvdywgMCwgMCwgYWxsb2NhdGVkSGVp
Z2h0LCBhbGxvY2F0ZWRXaWR0aCk7CisgICAgLy8gZ19hc3NlcnQodW5oaWdobGlnaHRQaXhidWYp
OworICAgIC8vIGdfYXNzZXJ0KGdka1BpeGJ1ZkVxdWFsKG9yaWdpbmFsUGl4YnVmLCB1bmhpZ2hs
aWdodFBpeGJ1ZikpOworCisgICAgZ19vYmplY3RfdW5yZWYob3JpZ2luYWxQaXhidWYpOworICAg
IGdfb2JqZWN0X3VucmVmKGhpZ2hsaWdodFBpeGJ1Zik7CisgICAgLy8gZ19vYmplY3RfdW5yZWYo
dW5oaWdobGlnaHRQaXhidWYpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJJ
bnN0YW5jZShGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAg
V2ViS2l0RmluZENvbnRyb2xsZXIqIGZpbmRDb250cm9sbGVyMSA9IHdlYmtpdF93ZWJfdmlld19n
ZXRfZmluZF9jb250cm9sbGVyKHRlc3QtPm1fd2ViVmlldyk7CisgICAgV2ViS2l0RmluZENvbnRy
b2xsZXIqIGZpbmRDb250cm9sbGVyMiA9IHdlYmtpdF93ZWJfdmlld19nZXRfZmluZF9jb250cm9s
bGVyKHRlc3QtPm1fd2ViVmlldyk7CisKKyAgICBnX2Fzc2VydChmaW5kQ29udHJvbGxlcjEgPT0g
ZmluZENvbnRyb2xsZXIyKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVyR2V0
dGVycyhGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgY29u
c3QgY2hhciogc2VhcmNoVGV4dCA9ICJ0ZXN0aW5nIjsKKyAgICBndWludCBtYXhNYXRjaENvdW50
ID0gMTsKKyAgICBndWludCBmaW5kT3B0aW9ucyA9IFdFQktJVF9GSU5EX09QVElPTlNfV1JBUF9B
Uk9VTkQgfCBXRUJLSVRfRklORF9PUFRJT05TX0FUX1dPUkRfU1RBUlRTOworICAgIFdlYktpdEZp
bmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxlciA9IHdlYmtpdF93ZWJfdmlld19nZXRfZmluZF9j
b250cm9sbGVyKHRlc3QtPm1fd2ViVmlldyk7CisKKyAgICB3ZWJraXRfZmluZF9jb250cm9sbGVy
X3NlYXJjaChmaW5kQ29udHJvbGxlciwgc2VhcmNoVGV4dCwgZmluZE9wdGlvbnMsIG1heE1hdGNo
Q291bnQpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X3dlYl92aWV3
KGZpbmRDb250cm9sbGVyKSA9PSB0ZXN0LT5tX3dlYlZpZXcpOworICAgIGdfYXNzZXJ0KCFnX3N0
cmNtcDAod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfc2VhcmNoX3RleHQoZmluZENvbnRyb2xs
ZXIpLCBzZWFyY2hUZXh0KSk7CisgICAgZ19hc3NlcnQod2Via2l0X2ZpbmRfY29udHJvbGxlcl9n
ZXRfbWF4X21hdGNoX2NvdW50KGZpbmRDb250cm9sbGVyKSA9PSBtYXhNYXRjaENvdW50KTsKKyAg
ICBnX2Fzc2VydCh3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9vcHRpb25zKGZpbmRDb250cm9s
bGVyKSA9PSBmaW5kT3B0aW9ucyk7Cit9CisKK3ZvaWQgYmVmb3JlQWxsKCkKK3sKKyAgICBGaW5k
Q29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAiZ2V0dGVycyIsIHRl
c3RGaW5kQ29udHJvbGxlckdldHRlcnMpOworICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJX
ZWJLaXRGaW5kQ29udHJvbGxlciIsICJpbnN0YW5jZSIsIHRlc3RGaW5kQ29udHJvbGxlckluc3Rh
bmNlKTsKKyAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIi
LCAidGV4dC1mb3VuZCIsIHRlc3RGaW5kQ29udHJvbGxlclRleHRGb3VuZCk7CisgICAgRmluZENv
bnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwgInRleHQtbm90LWZvdW5k
IiwgdGVzdEZpbmRDb250cm9sbGVyVGV4dE5vdEZvdW5kKTsKKyAgICBGaW5kQ29udHJvbGxlclRl
c3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAibWF0Y2gtY291bnQiLCB0ZXN0RmluZENv
bnRyb2xsZXJNYXRjaENvdW50KTsKKyAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0
RmluZENvbnRyb2xsZXIiLCAibWF4LW1hdGNoLWNvdW50IiwgdGVzdEZpbmRDb250cm9sbGVyTWF4
TWF0Y2hDb3VudCk7CisgICAgRmluZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250
cm9sbGVyIiwgIm5leHQiLCB0ZXN0RmluZENvbnRyb2xsZXJOZXh0KTsKKyAgICBGaW5kQ29udHJv
bGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAicHJldmlvdXMiLCB0ZXN0Rmlu
ZENvbnRyb2xsZXJQcmV2aW91cyk7CisgICAgRmluZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktp
dEZpbmRDb250cm9sbGVyIiwgImNvdW50ZWQtbWF0Y2hlcyIsIHRlc3RGaW5kQ29udHJvbGxlckNv
dW50ZWRNYXRjaGVzKTsKKyAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENv
bnRyb2xsZXIiLCAib3B0aW9ucyIsIHRlc3RGaW5kQ29udHJvbGxlck9wdGlvbnMpOworICAgIEZp
bmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJoaWRlIiwgdGVz
dEZpbmRDb250cm9sbGVySGlkZSk7Cit9CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCmluZGV4IDNhZjk5MDRlNTY4OWQ1
YTdiMzVmZDQyMTYyZGQzYzZiNGMzOGQyZDUuLmIyYjliOWVkYTBhYTEzNmQ1NjliOTVlMzAxZWY1
MTNlMTVmM2U5YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3dlYmtpdDIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQy
LmgKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEVkaXRpbmdDb21t
YW5kcy5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RW51bVR5cGVzLmg+CiAjaW5jbHVkZSA8
d2Via2l0Mi9XZWJLaXRFcnJvci5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RmluZENvbnRy
b2xsZXIuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEhpdFRlc3RSZXN1bHQuaD4KICNpbmNs
dWRlIDx3ZWJraXQyL1dlYktpdFNldHRpbmdzLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRV
UklSZXF1ZXN0Lmg+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>126984</attachid>
            <date>2012-02-14 08:38:34 -0800</date>
            <delta_ts>2012-02-24 09:37:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76070-20120214173831.patch</filename>
            <type>text/plain</type>
            <size>52800</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA3NzEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYmRhNTZlYTdhYTJhZjdh
OWNiOTk2ZTlkNzUwMjdhNGMxZjk4YmE3MC4uMjFjYjY1ZDA1NTAzZjYyNGRhMjU2N2M5Yzc5NTI5
OGEzZDEzMjkxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisyMDEyLTAxLTE5ICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFtX
SzJdIEFkZCBGaW5kIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzYwNzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIHBhdGNoIGFkZHMgYSBuZXcgcHVibGljIGZpbmQgQVBJIGZvciB0aGUgR3Rr
KyBXSzIgcG9ydC4gSXQKKyAgICAgICAgZGVmaW5lcyBhIG5ldyBvYmplY3QgY2FsbGVkIFdlYktp
dEZpbmRDb250cm9sbGVyIG93bmVkIGJ5IGVhY2gKKyAgICAgICAgV2ViS2l0V2ViVmlldy4gQ2xp
ZW50cyB3aWxsIHVzZSB0aGlzIG5ldyBvYmplY3QgdG8gc2VhcmNoIHN0cmluZ3MKKyAgICAgICAg
aW4gdGhlIFdlYktpdFdlYlZpZXcuCisKKyAgICAgICAgQ2hhbmdlcyBpbmNsdWRlIGFsc28gZG9j
dW1lbnRhdGlvbiBhbmQgdW5pdCB0ZXN0cyBmb3IgdGhlIG5ldworICAgICAgICBwdWJsaWMgQVBJ
LgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0RGVmaW5lcy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZp
bmRDb250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChkaWRGaW5kU3RyaW5nKTogaW1wbGVt
ZW50YXRpb24gb2YgdGhlIFdLUGFnZSBGaW5kIGludGVyZmFjZS4KKyAgICAgICAgKGRpZEZhaWxU
b0ZpbmRTdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKGRpZENvdW50U3RyaW5nTWF0Y2hlcyk6IERp
dHRvLgorICAgICAgICAod2Via2l0X2ZpbmRfY29udHJvbGxlcl9pbml0KToKKyAgICAgICAgKGdl
dFdLUGFnZUZyb21XZWJLaXRXZWJWaWV3KToKKyAgICAgICAgKHdlYmtpdEZpbmRDb250cm9sbGVy
Q29uc3RydWN0ZWQpOgorICAgICAgICAod2Via2l0RmluZENvbnRyb2xsZXJHZXRQcm9wZXJ0eSk6
CisgICAgICAgICh3ZWJraXRGaW5kQ29udHJvbGxlclNldFByb3BlcnR5KToKKyAgICAgICAgKHdl
YmtpdEZpbmRDb250cm9sbGVyRmluYWxpemUpOgorICAgICAgICAod2Via2l0X2ZpbmRfY29udHJv
bGxlcl9jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X3Nl
YXJjaF90ZXh0KToKKyAgICAgICAgKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X29wdGlvbnMp
OgorICAgICAgICAod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfbWF4X21hdGNoX2NvdW50KToK
KyAgICAgICAgKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X3dlYl92aWV3KToKKyAgICAgICAg
KHdlYktpdEZpbmRDb250cm9sbGVyUGVyZm9ybSk6CisgICAgICAgICh3ZWJLaXRGaW5kQ29udHJv
bGxlclNldFNlYXJjaERhdGEpOgorICAgICAgICAod2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFy
Y2gpOiBhc3luY2hyb25vdXNseSBsb29rcyBmb3IgdGhlCisgICAgICAgIHNlYXJjaCBzdHJpbmcg
aW4gdGhlIFdlYktpdFdlYlZpZXcuCisgICAgICAgICh3ZWJraXRfZmluZF9jb250cm9sbGVyX3Nl
YXJjaF9maW5pc2gpOiB1bmhpZ2hsaWdodHMgdGV4dCBtYXRjaGVzLgorICAgICAgICAod2Via2l0
X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfbmV4dCk6CisgICAgICAgICh3ZWJraXRfZmluZF9jb250
cm9sbGVyX3NlYXJjaF9wcmV2aW91cyk6CisgICAgICAgICh3ZWJraXRfZmluZF9jb250cm9sbGVy
X2NvdW50X21hdGNoZXMpOiBhc3luY2hyb25vdXNseSBjb3VudHMgdGhlCisgICAgICAgIG51bWJl
ciBvZiBtYXRjaGVzIG9mIHRoZSBzZWFyY2ggc3RyaW5nIGluIHRoZSBXZWJLaXRXZWJWaWV3Lgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbmRDb250cm9sbGVyLmg6IEFkZGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdF93
ZWJfdmlld19nZXRfZmluZF9jb250cm9sbGVyKTogcmV0dXJucyB0aGUKKyAgICAgICAgV2ViS2l0
RmluZENvbnRyb2xsZXIgaW5zdGFuY2Ugb3duZWQgYnkgdGhlIFdlYktpdFdlYlZpZXcuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWw6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXM6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW06CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvVGVzdFdlYktpdEZpbmRDb250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgICh0
ZXN0RmluZENvbnRyb2xsZXJUZXh0Rm91bmQpOgorICAgICAgICAodGVzdEZpbmRDb250cm9sbGVy
VGV4dE5vdEZvdW5kKToKKyAgICAgICAgKHRlc3RGaW5kQ29udHJvbGxlck1hdGNoQ291bnQpOgor
ICAgICAgICAodGVzdEZpbmRDb250cm9sbGVyTWF4TWF0Y2hDb3VudCk6CisgICAgICAgICh0ZXN0
RmluZENvbnRyb2xsZXJOZXh0KToKKyAgICAgICAgKHRlc3RGaW5kQ29udHJvbGxlclByZXZpb3Vz
KToKKyAgICAgICAgKHRlc3RGaW5kQ29udHJvbGxlckNvdW50ZWRNYXRjaGVzKToKKyAgICAgICAg
KHRlc3RGaW5kQ29udHJvbGxlck9wdGlvbnMpOgorICAgICAgICAodGVzdEZpbmRDb250cm9sbGVy
SW5zdGFuY2UpOgorICAgICAgICAodGVzdEZpbmRDb250cm9sbGVyR2V0dGVycyk6CisgICAgICAg
ICh0ZXN0RmluZENvbnRyb2xsZXJIaWRlKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAg
IChhZnRlckFsbCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oOgorCiAy
MDEyLTAyLTE0ICBObydhbSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CiAK
ICAgICAgICAgW1F0XVtUZXhtYXBdIFJlZmFjdG9yIGJhY2tpbmctc3RvcmUgY29kZSBpbiBUZXh0
dXJlTWFwcGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSBiL1Nv
dXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCmluZGV4IDNiOGU3YmRhMjliNTBkNDRlMThhMTEw
MzQzY2UxNTI4MDVlZGUxNjQuLmI5YTA2ZmVjYzgzZTlmMGEwNmQzNTcyNDJmNGQ4ZGYzNTljYjhh
NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCkBAIC04OCw2ICs4OCw3IEBAIGxpYndlYmtpdDJndGtp
bmNsdWRlX0hFQURFUlMgPSBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRE
b3dubG9hZC5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVkaXRpbmdD
b21tYW5kcy5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmgg
XAorCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmluZENvbnRyb2xsZXIuaCBc
CiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRIaXRUZXN0UmVzdWx0LmggXAog
CSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lz
aW9uLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UG9saWN5RGVjaXNp
b24uaCBcCkBAIC01NDUsNiArNTQ2LDggQEAgbGlid2Via2l0Mmd0a19AV0VCS0lUR1RLX0FQSV9N
QUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9TT1UKIAlTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRIaXRUZXN0UmVzdWx0UHJpdmF0ZS5o
IFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRMb2FkZXJDbGllbnQu
aCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TG9hZGVyQ2xpZW50
LmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmluZENvbnRy
b2xsZXIuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmluZENv
bnRyb2xsZXIuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRO
YXZpZ2F0aW9uUG9saWN5RGVjaXNpb24uY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24uaCBcCiAJU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlvblBvbGljeURlY2lzaW9uUHJpdmF0
ZS5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dERlZmluZXMuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERlZmlu
ZXMuaAppbmRleCA3OWIzMzgzNjBkZGFhYThmMDlmNjU0N2YyZGYxNDU4ZjZmMjE5MzFkLi5lMmUz
YjNkMTA3Njg2NGZkNDVmMzVlMGVkNGQ5MGJlYzI0YmRkYWY2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREZWZpbmVzLmgKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RGVmaW5lcy5oCkBAIC00NCw0ICs0NCw3IEBA
CiAjICAgIGRlZmluZSBXRUJLSVRfT0JTT0xFVEVfQVBJIFdFQktJVF9BUEkgX19hdHRyaWJ1dGVf
XygoZGVwcmVjYXRlZCkpCiAjZW5kaWYKIAordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEZpbmRDb250
cm9sbGVyIFdlYktpdEZpbmRDb250cm9sbGVyOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZp
ZXcgICAgICAgIFdlYktpdFdlYlZpZXc7CisKICNlbmRpZiAvLyBXZWJLaXREZWZpbmVzX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbmRDb250
cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbmRD
b250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NGRhZDg1M2UyM2IzZmM1OWQ1ZDBlOWI5NTFkZTgw
NzllZGY5NmUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0RmluZENvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsNDcyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV2ViS2l0RmluZENvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIldlYktpdEVudW1UeXBl
cy5oIgorI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJWaWV3
QmFzZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlIDxnbGli
L2dpMThuLWxpYi5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitlbnVt
IHsKKyAgICBGT1VORF9URVhULAorICAgIEZBSUxFRF9UT19GSU5EX1RFWFQsCisgICAgQ09VTlRF
RF9NQVRDSEVTLAorCisgICAgTEFTVF9TSUdOQUwKK307CisKK2VudW0geworICAgIFBST1BfMCwK
KworICAgIFBST1BfVEVYVCwKKyAgICBQUk9QX09QVElPTlMsCisgICAgUFJPUF9NQVhfTUFUQ0hf
Q09VTlQsCisgICAgUFJPUF9XRUJfVklFVworfTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBGaW5k
T3BlcmF0aW9uLAorICAgIENvdW50T3BlcmF0aW9uCit9IFdlYktpdEZpbmRDb250cm9sbGVyT3Bl
cmF0aW9uOworCitzdHJ1Y3QgX1dlYktpdEZpbmRDb250cm9sbGVyUHJpdmF0ZSB7CisgICAgQ1N0
cmluZyBzZWFyY2hUZXh0OworICAgIHVuc2lnbmVkIGludCBmaW5kT3B0aW9uczsKKyAgICB1bnNp
Z25lZCBpbnQgbWF4TWF0Y2hDb3VudDsKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OworfTsK
Kworc3RhdGljIGd1aW50IHNpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OworCitHX0RFRklO
RV9UWVBFKFdlYktpdEZpbmRDb250cm9sbGVyLCB3ZWJraXRfZmluZF9jb250cm9sbGVyLCBHX1RZ
UEVfT0JKRUNUKQorCitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdFQktJVF9GSU5EX09Q
VElPTlNfQ0FTRV9JTlNFTlNJVElWRSwga1dLRmluZE9wdGlvbnNDYXNlSW5zZW5zaXRpdmUpOwor
Q09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXRUJLSVRfRklORF9PUFRJT05TX0FUX1dPUkRf
U1RBUlRTLCBrV0tGaW5kT3B0aW9uc0F0V29yZFN0YXJ0cyk7CitDT01QSUxFX0FTU0VSVF9NQVRD
SElOR19FTlVNKFdFQktJVF9GSU5EX09QVElPTlNfVFJFQVRfTUVESUFMX0NBUElUQUxfQVNfV09S
RF9TVEFSVCwga1dLRmluZE9wdGlvbnNUcmVhdE1lZGlhbENhcGl0YWxBc1dvcmRTdGFydCk7CitD
T01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdFQktJVF9GSU5EX09QVElPTlNfQkFDS1dBUkRT
LCBrV0tGaW5kT3B0aW9uc0JhY2t3YXJkcyk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVN
KFdFQktJVF9GSU5EX09QVElPTlNfV1JBUF9BUk9VTkQsIGtXS0ZpbmRPcHRpb25zV3JhcEFyb3Vu
ZCk7CisKK3N0YXRpYyB2b2lkIGRpZEZpbmRTdHJpbmcoV0tQYWdlUmVmIHBhZ2UsIFdLU3RyaW5n
UmVmIHN0cmluZywgdW5zaWduZWQgbWF0Y2hDb3VudCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykK
K3sKKyAgICBnX3NpZ25hbF9lbWl0KFdFQktJVF9GSU5EX0NPTlRST0xMRVIoY2xpZW50SW5mbyks
IHNpZ25hbHNbRk9VTkRfVEVYVF0sIDAsIG1hdGNoQ291bnQpOworfQorCitzdGF0aWMgdm9pZCBk
aWRGYWlsVG9GaW5kU3RyaW5nKFdLUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiBzdHJpbmcsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgZ19zaWduYWxfZW1pdChXRUJLSVRfRklORF9D
T05UUk9MTEVSKGNsaWVudEluZm8pLCBzaWduYWxzW0ZBSUxFRF9UT19GSU5EX1RFWFRdLCAwKTsK
K30KKworc3RhdGljIHZvaWQgZGlkQ291bnRTdHJpbmdNYXRjaGVzKFdLUGFnZVJlZiBwYWdlLCBX
S1N0cmluZ1JlZiBzdHJpbmcsIHVuc2lnbmVkIG1hdGNoQ291bnQsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pCit7CisgICAgZ19zaWduYWxfZW1pdChXRUJLSVRfRklORF9DT05UUk9MTEVSKGNsaWVu
dEluZm8pLCBzaWduYWxzW0NPVU5URURfTUFUQ0hFU10sIDAsIG1hdGNoQ291bnQpOworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfZmluZF9jb250cm9sbGVyX2luaXQoV2ViS2l0RmluZENvbnRyb2xs
ZXIqIGZpbmRDb250cm9sbGVyKQoreworICAgIFdlYktpdEZpbmRDb250cm9sbGVyUHJpdmF0ZSog
cHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShmaW5kQ29udHJvbGxlciwgV0VCS0lU
X1RZUEVfRklORF9DT05UUk9MTEVSLCBXZWJLaXRGaW5kQ29udHJvbGxlclByaXZhdGUpOworICAg
IGZpbmRDb250cm9sbGVyLT5wcml2ID0gcHJpdjsKKyAgICBuZXcgKHByaXYpIFdlYktpdEZpbmRD
b250cm9sbGVyUHJpdmF0ZSgpOworfQorCitzdGF0aWMgV0tQYWdlUmVmIGlubGluZSBnZXRXS1Bh
Z2VGcm9tV2ViS2l0V2ViVmlldyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIHJldHVy
biB0b0FQSSh3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2Vi
VmlldykpKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0RmluZENvbnRyb2xsZXJDb25zdHJ1Y3Rl
ZChHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0RmluZENvbnRyb2xsZXIqIGZpbmRDb250
cm9sbGVyID0gV0VCS0lUX0ZJTkRfQ09OVFJPTExFUihvYmplY3QpOworICAgIFdLUGFnZUZpbmRD
bGllbnQgd2tGaW5kQ2xpZW50ID0geworICAgICAgICBrV0tQYWdlRmluZENsaWVudEN1cnJlbnRW
ZXJzaW9uLAorICAgICAgICBmaW5kQ29udHJvbGxlciwgLy8gY2xpZW50SW5mbworICAgICAgICBk
aWRGaW5kU3RyaW5nLAorICAgICAgICBkaWRGYWlsVG9GaW5kU3RyaW5nLAorICAgICAgICBkaWRD
b3VudFN0cmluZ01hdGNoZXMKKyAgICB9OworCisgICAgV0tQYWdlU2V0UGFnZUZpbmRDbGllbnQo
Z2V0V0tQYWdlRnJvbVdlYktpdFdlYlZpZXcoZmluZENvbnRyb2xsZXItPnByaXYtPndlYlZpZXcp
LCAmd2tGaW5kQ2xpZW50KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0RmluZENvbnRyb2xsZXJH
ZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJZCwgR1ZhbHVlKiB2YWx1ZSwg
R1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAgIFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5k
Q29udHJvbGxlciA9IFdFQktJVF9GSU5EX0NPTlRST0xMRVIob2JqZWN0KTsKKworICAgIHN3aXRj
aCAocHJvcElkKSB7CisgICAgY2FzZSBQUk9QX1RFWFQ6CisgICAgICAgIGdfdmFsdWVfc2V0X3N0
cmluZyh2YWx1ZSwgZmluZENvbnRyb2xsZXItPnByaXYtPnNlYXJjaFRleHQuZGF0YSgpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX09QVElPTlM6CisgICAgICAgIGdfdmFsdWVfc2V0
X3VpbnQodmFsdWUsIGZpbmRDb250cm9sbGVyLT5wcml2LT5maW5kT3B0aW9ucyk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9NQVhfTUFUQ0hfQ09VTlQ6CisgICAgICAgIGdfdmFsdWVf
c2V0X3VpbnQodmFsdWUsIGZpbmRDb250cm9sbGVyLT5wcml2LT5tYXhNYXRjaENvdW50KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1dFQl9WSUVXOgorICAgICAgICBnX3ZhbHVlX3Nl
dF9vYmplY3QodmFsdWUsIGZpbmRDb250cm9sbGVyLT5wcml2LT53ZWJWaWV3KTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BF
UlRZX0lEKG9iamVjdCwgcHJvcElkLCBwYXJhbVNwZWMpOworICAgIH0KK30KKworc3RhdGljIHZv
aWQgd2Via2l0RmluZENvbnRyb2xsZXJTZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50
IHByb3BJZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQorewor
ICAgIFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxlciA9IFdFQktJVF9GSU5EX0NP
TlRST0xMRVIob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcElkKSB7CisgICAgY2FzZSBQUk9Q
X1dFQl9WSUVXOgorICAgICAgICBmaW5kQ29udHJvbGxlci0+cHJpdi0+d2ViVmlldyA9IFdFQktJ
VF9XRUJfVklFVyhnX3ZhbHVlX2dldF9vYmplY3QodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9i
amVjdCwgcHJvcElkLCBwYXJhbVNwZWMpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0
RmluZENvbnRyb2xsZXJGaW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV0VCS0lUX0ZJ
TkRfQ09OVFJPTExFUihvYmplY3QpLT5wcml2LT5+V2ViS2l0RmluZENvbnRyb2xsZXJQcml2YXRl
KCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2ZpbmRfY29udHJvbGxlcl9wYXJlbnRfY2xh
c3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZmluZF9jb250
cm9sbGVyX2NsYXNzX2luaXQoV2ViS2l0RmluZENvbnRyb2xsZXJDbGFzcyogZmluZENsYXNzKQor
eworICAgIEdPYmplY3RDbGFzcyogZ09iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MoZmluZENs
YXNzKTsKKworICAgIGdPYmplY3RDbGFzcy0+Y29uc3RydWN0ZWQgPSB3ZWJraXRGaW5kQ29udHJv
bGxlckNvbnN0cnVjdGVkOworICAgIGdPYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0
RmluZENvbnRyb2xsZXJHZXRQcm9wZXJ0eTsKKyAgICBnT2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0
eSA9IHdlYmtpdEZpbmRDb250cm9sbGVyU2V0UHJvcGVydHk7CisgICAgZ09iamVjdENsYXNzLT5m
aW5hbGl6ZSA9IHdlYmtpdEZpbmRDb250cm9sbGVyRmluYWxpemU7CisKKyAgICBnX3R5cGVfY2xh
c3NfYWRkX3ByaXZhdGUoZmluZENsYXNzLCBzaXplb2YoV2ViS2l0RmluZENvbnRyb2xsZXJQcml2
YXRlKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRGaW5kQ29udHJvbGxlcjp0ZXh0OgorICAg
ICAqCisgICAgICogVGhlIGN1cnJlbnQgc2VhcmNoIHRleHQgZm9yIHRoaXMgI1dlYktpdEZpbmRD
b250cm9sbGVyLgorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
Z09iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9U
RVhULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3N0
cmluZygidGV4dCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF8oIlNlYXJjaCB0ZXh0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRleHQgdG8gc2VhcmNoIGZvciBpbiB0
aGUgdmlldyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIC8qKgorICAgICAq
IFdlYktpdEZpbmRDb250cm9sbGVyOm9wdGlvbnM6CisgICAgICoKKyAgICAgKiBUaGUgb3B0aW9u
cyB0byBiZSB1c2VkIGluIHRoZSBzZWFyY2ggb3BlcmF0aW9uLgorICAgICAqLworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ09iamVjdENsYXNzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUFJPUF9PUFRJT05TLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2ZsYWdzKCJvcHRpb25zIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJTZWFyY2ggT3B0
aW9ucyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF8oIlNlYXJjaCBvcHRpb25zIHRvIGJlIHVzZWQgaW4gdGhlIHNlYXJjaCBvcGVyYXRp
b24iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXRUJLSVRfVFlQRV9GSU5EX09QVElPTlMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0RmluZENvbnRy
b2xsZXI6bWF4LW1hdGNoLWNvdW50OgorICAgICAqCisgICAgICogVGhlIG1heGltdW0gbnVtYmVy
IG9mIG1hdGNoZXMgdG8gcmVwb3J0IGZvciBhIGdpdmVuIHNlYXJjaC4KKyAgICAgKi8KKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdPYmplY3RDbGFzcywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfTUFYX01BVENIX0NPVU5ULAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQoIm1heC1tYXRjaC1j
b3VudCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfKCJNYXhpbXVtIG1hdGNoZXMgY291bnQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBtYXhpbXVtIG51bWJlciBvZiBt
YXRjaGVzIGluIGEgZ2l2ZW4gdGV4dCB0byByZXBvcnQiKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdfTUFYVUlOVCwgMCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0RmluZENvbnRyb2xsZXI6
d2ViLXZpZXc6CisgICAgICoKKyAgICAgKiBUaGUgI1dlYktpdFdlYlZpZXcgdGhpcyBjb250cm9s
bGVyIGlzIGFzc29jaWF0ZWQgdG8uCisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eShnT2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQUk9QX1dFQl9WSUVXLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z19wYXJhbV9zcGVjX29iamVjdCgid2ViLXZpZXciLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJXZWJWaWV3IiksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBXZWJW
aWV3IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZpbmQgY29udHJvbGxlciIpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9X
RUJfVklFVywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KFdFQktJVF9QQVJBTV9SRUFEV1JJVEUg
fCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0Rmlu
ZENvbnRyb2xsZXI6OmZvdW5kLXRleHQ6CisgICAgICogQGZpbmRfY29udHJvbGxlcjogdGhlICNX
ZWJLaXRGaW5kQ29udHJvbGxlcgorICAgICAqIEBtYXRjaF9jb3VudDogdGhlIG51bWJlciBvZiBt
YXRjaGVzIGZvdW5kIG9mIHRoZSBzZWFyY2ggdGV4dAorICAgICAqCisgICAgICogVGhpcyBzaWdu
YWwgaXMgZW1pdHRlZCB3aGVuIGEgZ2l2ZW4gdGV4dCBpcyBmb3VuZCBpbiB0aGUgd2ViCisgICAg
ICogcGFnZSB0ZXh0LiBJdCB3aWxsIGJlIGlzc3VlZCBpZiB0aGUgdGV4dCBpcyBmb3VuZAorICAg
ICAqIGFzeW5jaHJvbm91c2x5IGFmdGVyIGEgY2FsbCB0byB3ZWJraXRfZmluZF9jb250cm9sbGVy
X3NlYXJjaCgpLAorICAgICAqIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX25leHQoKSBv
cgorICAgICAqIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX3ByZXZpb3VzKCkuCisgICAg
ICovCisgICAgc2lnbmFsc1tGT1VORF9URVhUXSA9CisgICAgICAgIGdfc2lnbmFsX25ldygiZm91
bmQtdGV4dCIsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhnT2JqZWN0
Q2xhc3MpLAorICAgICAgICAgICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAg
ICAgICAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgZ19jY2xvc3VyZV9t
YXJzaGFsX1ZPSURfX1VJTlQsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwg
R19UWVBFX1VJTlQpOworCisgICAgLyoqCisgICAgICogV2ViS2l0RmluZENvbnRyb2xsZXI6OmZh
aWxlZC10by1maW5kLXRleHQ6CisgICAgICogQGZpbmRfY29udHJvbGxlcjogdGhlICNXZWJLaXRG
aW5kQ29udHJvbGxlcgorICAgICAqCisgICAgICogVGhpcyBzaWduYWwgaXMgZW1pdHRlZCB3aGVu
IGEgc2VhcmNoIG9wZXJhdGlvbiBkb2VzIG5vdCBmaW5kCisgICAgICogYW55IHJlc3VsdCBmb3Ig
dGhlIGdpdmVuIHRleHQuIEl0IHdpbGwgYmUgaXNzdWVkIGlmIHRoZSB0ZXh0CisgICAgICogaXMg
bm90IGZvdW5kIGFzeW5jaHJvbm91c2x5IGFmdGVyIGEgY2FsbCB0bworICAgICAqIHdlYmtpdF9m
aW5kX2NvbnRyb2xsZXJfc2VhcmNoKCksIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX25l
eHQoKQorICAgICAqIG9yIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX3ByZXZpb3VzKCku
CisgICAgICovCisgICAgc2lnbmFsc1tGQUlMRURfVE9fRklORF9URVhUXSA9CisgICAgICAgIGdf
c2lnbmFsX25ldygiZmFpbGVkLXRvLWZpbmQtdGV4dCIsCisgICAgICAgICAgICAgICAgICAgICBH
X1RZUEVfRlJPTV9DTEFTUyhnT2JqZWN0Q2xhc3MpLAorICAgICAgICAgICAgICAgICAgICAgR19T
SUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAg
ICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1ZPSUQsCisgICAgICAgICAgICAg
ICAgICAgICBHX1RZUEVfTk9ORSwgMCk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRGaW5kQ29u
dHJvbGxlcjo6Y291bnRlZC1tYXRjaGVzOgorICAgICAqIEBmaW5kX2NvbnRyb2xsZXI6IHRoZSAj
V2ViS2l0RmluZENvbnRyb2xsZXIKKyAgICAgKiBAbWF0Y2hfY291bnQ6IHRoZSBudW1iZXIgb2Yg
bWF0Y2hlcyBvZiB0aGUgc2VhcmNoIHRleHQKKyAgICAgKgorICAgICAqIFRoaXMgc2lnbmFsIGlz
IGVtaXR0ZWQgd2hlbiB0aGUgI1dlYktpdEZpbmRDb250cm9sbGVyIGhhcworICAgICAqIGNvdW50
ZWQgdGhlIG51bWJlciBvZiBtYXRjaGVzIGZvciBhIGdpdmVuIHRleHQgYWZ0ZXIgYSBjYWxsCisg
ICAgICogdG8gd2Via2l0X2ZpbmRfY29udHJvbGxlcl9jb3VudF9tYXRjaGVzKCkuCisgICAgICov
CisgICAgc2lnbmFsc1tDT1VOVEVEX01BVENIRVNdID0KKyAgICAgICAgZ19zaWduYWxfbmV3KCJj
b3VudGVkLW1hdGNoZXMiLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mo
Z09iamVjdENsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgIEdfU0lHTkFMX1JVTl9MQVNULAor
ICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgIGdfY2Ns
b3N1cmVfbWFyc2hhbF9WT0lEX19VSU5ULAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX05P
TkUsIDEsIEdfVFlQRV9VSU5UKTsKK30KKworLyoqCisgKiB3ZWJraXRfZmluZF9jb250cm9sbGVy
X2dldF9zZWFyY2hfdGV4dDoKKyAqIEBmaW5kX2NvbnRyb2xsZXI6IHRoZSAjV2ViS2l0RmluZENv
bnRyb2xsZXIKKyAqCisgKiBHZXRzIHRoZSB0ZXh0IHRoYXQgQGZpbmRfY29udHJvbGxlciBpcyBj
dXJyZW50bHkgc2VhcmNoaW5nCisgKiBmb3IuIFRoaXMgdGV4dCBpcyBwYXNzZWQgdG8gZWl0aGVy
CisgKiB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaCgpIG9yCisgKiB3ZWJraXRfZmluZF9j
b250cm9sbGVyX2NvdW50X21hdGNoZXMoKS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgdGV4dCB0byBs
b29rIGZvciBpbiB0aGUgI1dlYktpdFdlYlZpZXcuCisgKi8KK2NvbnN0IGNoYXIqIHdlYmtpdF9m
aW5kX2NvbnRyb2xsZXJfZ2V0X3NlYXJjaF90ZXh0KFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5k
Q29udHJvbGxlcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRklORF9D
T05UUk9MTEVSKGZpbmRDb250cm9sbGVyKSwgMCk7CisKKyAgICByZXR1cm4gZmluZENvbnRyb2xs
ZXItPnByaXYtPnNlYXJjaFRleHQuZGF0YSgpOworfQorCisvKioKKyAqIHdlYmtpdF9maW5kX2Nv
bnRyb2xsZXJfZ2V0X29wdGlvbnM6CisgKiBAZmluZF9jb250cm9sbGVyOiB0aGUgI1dlYktpdEZp
bmRDb250cm9sbGVyCisgKgorICogR2V0cyBhIGJpdG1hc2sgY29udGFpbmluZyB0aGUgI1dlYktp
dEZpbmRPcHRpb25zIGFzc29jaWF0ZWQgd2l0aAorICogdGhlIGN1cnJlbnQgc2VhcmNoLgorICoK
KyAqIFJldHVybnM6IGEgYml0bWFzayBjb250YWluaW5nIHRoZSAjV2ViS2l0RmluZE9wdGlvbnMg
YXNzb2NpYXRlZAorICogd2l0aCB0aGUgY3VycmVudCBzZWFyY2guCisgKi8KK2d1aW50IHdlYmtp
dF9maW5kX2NvbnRyb2xsZXJfZ2V0X29wdGlvbnMoV2ViS2l0RmluZENvbnRyb2xsZXIqIGZpbmRD
b250cm9sbGVyKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19GSU5EX0NP
TlRST0xMRVIoZmluZENvbnRyb2xsZXIpLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUpOworCisg
ICAgcmV0dXJuIGZpbmRDb250cm9sbGVyLT5wcml2LT5maW5kT3B0aW9uczsKK30KKworLyoqCisg
KiB3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9tYXhfbWF0Y2hfY291bnQ6CisgKiBAZmluZF9j
b250cm9sbGVyOiB0aGUgI1dlYktpdEZpbmRDb250cm9sbGVyCisgKgorICogR2V0cyB0aGUgbWF4
aW11bSBudW1iZXIgb2YgbWF0Y2hlcyB0byByZXBvcnQgZHVyaW5nIGEgdGV4dAorICogbG9va3Vw
LiBUaGlzIG51bWJlciBpcyBwYXNzZWQgYXMgdGhlIGxhc3QgYXJndW1lbnQgb2YKKyAqIHdlYmtp
dF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoKCkgb3IKKyAqIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJf
Y291bnRfbWF0Y2hlcygpLgorICoKKyAqIFJldHVybnM6IHRoZSBtYXhpbXVtIG51bWJlciBvZiBt
YXRjaGVzIHRvIHJlcG9ydC4KKyAqLworZ3VpbnQgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRf
bWF4X21hdGNoX2NvdW50KFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxlcikKK3sK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfRklORF9DT05UUk9MTEVSKGZpbmRD
b250cm9sbGVyKSwgMCk7CisKKyAgICByZXR1cm4gZmluZENvbnRyb2xsZXItPnByaXYtPm1heE1h
dGNoQ291bnQ7Cit9CisKKy8qKgorICogd2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfd2ViX3Zp
ZXc6CisgKiBAZmluZF9jb250cm9sbGVyOiB0aGUgI1dlYktpdEZpbmRDb250cm9sbGVyCisgKgor
ICogR2V0cyB0aGUgI1dlYktpdFdlYlZpZXcgdGhpcyBmaW5kIGNvbnRyb2xsZXIgaXMgYXNzb2Np
YXRlZCB0by4gRG8KKyAqIG5vdCB1bnJlZiB0aGUgcmV0dXJuZWQgaW5zdGFuY2UgYXMgaXQgYmVs
b25ncyB0byB0aGUKKyAqICNXZWJLaXRGaW5kQ29udHJvbGxlci4KKyAqCisgKiBSZXR1cm5zOiAo
dHJhbnNmZXIgbm9uZSk6IHRoZSAjV2ViS2l0V2ViVmlldy4KKyAqLworV2ViS2l0V2ViVmlldyog
d2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfd2ViX3ZpZXcoV2ViS2l0RmluZENvbnRyb2xsZXIq
IGZpbmRDb250cm9sbGVyKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19G
SU5EX0NPTlRST0xMRVIoZmluZENvbnRyb2xsZXIpLCAwKTsKKworICAgIHJldHVybiBmaW5kQ29u
dHJvbGxlci0+cHJpdi0+d2ViVmlldzsKK30KKworc3RhdGljIHZvaWQgd2ViS2l0RmluZENvbnRy
b2xsZXJQZXJmb3JtKFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxlciwgV2ViS2l0
RmluZENvbnRyb2xsZXJPcGVyYXRpb24gb3BlcmF0aW9uKQoreworICAgIFdLRmluZE9wdGlvbnMg
d2tGaW5kT3B0aW9ucyA9IHN0YXRpY19jYXN0PFdLRmluZE9wdGlvbnM+KGZpbmRDb250cm9sbGVy
LT5wcml2LT5maW5kT3B0aW9ucyk7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrU2Vh
cmNoVGV4dChBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhmaW5kQ29udHJv
bGxlci0+cHJpdi0+c2VhcmNoVGV4dC5kYXRhKCkpKTsKKyAgICBXS1BhZ2VSZWYgd2tQYWdlID0g
Z2V0V0tQYWdlRnJvbVdlYktpdFdlYlZpZXcoZmluZENvbnRyb2xsZXItPnByaXYtPndlYlZpZXcp
OworCisgICAgaWYgKG9wZXJhdGlvbiA9PSBGaW5kT3BlcmF0aW9uKSB7CisgICAgICAgIC8vIFVu
Y29uZGl0aW9uYWxseSBoaWdobGlnaHQgdGV4dCBtYXRjaGVzLiBXSzEgQVBJIHdhcyBmb3JjaW5n
CisgICAgICAgIC8vIGNsaWVudHMgdG8gZW5hYmxlL2Rpc2FibGUgaGlnaGxpZ2h0aW5nLiBTaW5j
ZSBtb3N0IG9mIHRoZW0KKyAgICAgICAgLy8gKGFsbD8pIHdoZXJlIHVzaW5nIGhpZ2hsaWdodGlu
ZyB3ZSBkZWNpZGVkIHRvIHNpbXBsaWZ5IHRoZQorICAgICAgICAvLyBXSzIgQVBJIGFuZCB1bmNv
bmRpdGlvbmFsbHkgc2hvdyBoaWdobGlnaHRzLgorICAgICAgICB3a0ZpbmRPcHRpb25zID0gc3Rh
dGljX2Nhc3Q8V0tGaW5kT3B0aW9ucz4oZmluZENvbnRyb2xsZXItPnByaXYtPmZpbmRPcHRpb25z
IHwga1dLRmluZE9wdGlvbnNTaG93SGlnaGxpZ2h0KTsKKyAgICAgICAgV0tQYWdlRmluZFN0cmlu
Zyh3a1BhZ2UsIHdrU2VhcmNoVGV4dC5nZXQoKSwgd2tGaW5kT3B0aW9ucywgZmluZENvbnRyb2xs
ZXItPnByaXYtPm1heE1hdGNoQ291bnQpOworICAgIH0gZWxzZQorICAgICAgICBXS1BhZ2VDb3Vu
dFN0cmluZ01hdGNoZXMod2tQYWdlLCB3a1NlYXJjaFRleHQuZ2V0KCksIHdrRmluZE9wdGlvbnMs
IGZpbmRDb250cm9sbGVyLT5wcml2LT5tYXhNYXRjaENvdW50KTsKK30KKworc3RhdGljIGlubGlu
ZSB2b2lkIHdlYktpdEZpbmRDb250cm9sbGVyU2V0U2VhcmNoRGF0YShXZWJLaXRGaW5kQ29udHJv
bGxlciogZmluZENvbnRyb2xsZXIsIGNvbnN0IGdjaGFyKiBzZWFyY2hUZXh0LCBndWludCBmaW5k
T3B0aW9ucywgZ3VpbnQgbWF4TWF0Y2hDb3VudCkKK3sKKyAgICBmaW5kQ29udHJvbGxlci0+cHJp
di0+c2VhcmNoVGV4dCA9IHNlYXJjaFRleHQ7CisgICAgZmluZENvbnRyb2xsZXItPnByaXYtPmZp
bmRPcHRpb25zID0gZmluZE9wdGlvbnM7CisgICAgZmluZENvbnRyb2xsZXItPnByaXYtPm1heE1h
dGNoQ291bnQgPSBtYXhNYXRjaENvdW50OworfQorCisvKioKKyAqIHdlYmtpdF9maW5kX2NvbnRy
b2xsZXJfc2VhcmNoOgorICogQGZpbmRfY29udHJvbGxlcjogdGhlICNXZWJLaXRGaW5kQ29udHJv
bGxlcgorICogQHNlYXJjaF90ZXh0OiB0aGUgdGV4dCB0byBsb29rIGZvcgorICogQGZpbmRfb3B0
aW9uczogYSBiaXRtYXNrIHdpdGggdGhlICNXZWJLaXRGaW5kT3B0aW9ucyB1c2VkIGluIHRoZSBz
ZWFyY2gKKyAqIEBtYXhfbWF0Y2hfY291bnQ6IHRoZSBtYXhpbXVtIG51bWJlciBvZiBtYXRjaGVz
IGFsbG93ZWQgaW4gdGhlIHNlYXJjaAorICoKKyAqIExvb2tzIGZvciBAc2VhcmNoX3RleHQgaW4g
dGhlICNXZWJLaXRXZWJWaWV3IGFzc29jaWF0ZWQgd2l0aAorICogQGZpbmRfY29udHJvbGxlciBz
aW5jZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkb2N1bWVudC4gVGhlIG91dGNvbWUKKyAqIG9mIHRo
ZSBzZWFyY2ggd2lsbCBiZSBhc3luY2hyb25vdXNseSBwcm92aWRlZCBieSB0aGUKKyAqIFdlYktp
dEZpbmRDb250cm9sbGVyOjpmb3VuZC10ZXh0IGFuZAorICogV2ViS2l0RmluZENvbnRyb2xsZXI6
OmZhaWxlZC10by1maW5kLXRleHQuCisgKgorICogVG8gbG9vayBmb3IgdGhlIG5leHQgb3IgcHJl
dmlvdXMgb2NjdXJyZW5jZXMgb2YgdGhlIHNhbWUgdGV4dAorICogd2l0aCB0aGUgc2FtZSBmaW5k
IG9wdGlvbnMgdXNlIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX25leHQoKQorICogYW5k
L29yIHdlYmtpdF9maW5kX29wdGlvbnNfcHJldmlvdXMoKS4gVGhlCisgKiAjV2ViS2l0RmluZENv
bnRyb2xsZXIgd2lsbCB1c2UgdGhlIHNhbWUgdGV4dCBhbmQgb3B0aW9ucyBmb3IgdGhlCisgKiBm
b2xsb3dpbmcgc2VhcmNoZXMgdW5sZXNzIHRoZXkgYXJlIG1vZGlmaWVkIGJ5IGFub3RoZXIgY2Fs
bCB0byB0aGlzCisgKiBtZXRob2QuCisgKgorICogTm90ZSB0aGF0IGlmIHRoZSBudW1iZXIgb2Yg
bWF0Y2hlcyBpcyBoaWdoZXIgdGhhbiBAbWF4X21hdGNoX2NvdW50CisgKiB0aGVuIFdlYktpdEZp
bmRDb250cm9sbGVyOjpmb3VuZC10ZXh0IHdpbGwgcmVwb3J0IEdfTUFYVUlOVCBtYXRjaGVzCisg
KiBpbnN0ZWFkIG9mIHRoZSBhY3R1YWwgbnVtYmVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2ls
bCBhbHNvIGhpZ2hsaWdoIHVwIHRvIEBtYXhfbWF0Y2hfY291bnQKKyAqIG1hY2hlcy4gQ2FsbGVy
cyBzaG91bGQgY2FsbCB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9maW5pc2goKQorICog
dG8gdW5oaWdobGlnaHQgdGhlbS4KKyAqLwordm9pZCB3ZWJraXRfZmluZF9jb250cm9sbGVyX3Nl
YXJjaChXZWJLaXRGaW5kQ29udHJvbGxlciogZmluZENvbnRyb2xsZXIsIGNvbnN0IGdjaGFyKiBz
ZWFyY2hUZXh0LCBndWludCBmaW5kT3B0aW9ucywgZ3VpbnQgbWF4TWF0Y2hDb3VudCkKK3sKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19GSU5EX0NPTlRST0xMRVIoZmluZENvbnRyb2xs
ZXIpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlYXJjaFRleHQpOworCisgICAgd2ViS2l0Rmlu
ZENvbnRyb2xsZXJTZXRTZWFyY2hEYXRhKGZpbmRDb250cm9sbGVyLCBzZWFyY2hUZXh0LCBmaW5k
T3B0aW9ucywgbWF4TWF0Y2hDb3VudCk7CisgICAgd2ViS2l0RmluZENvbnRyb2xsZXJQZXJmb3Jt
KGZpbmRDb250cm9sbGVyLCBGaW5kT3BlcmF0aW9uKTsKK30KKworLyoqCisgKiB3ZWJraXRfZmlu
ZF9jb250cm9sbGVyX3NlYXJjaF9uZXh0OgorICogQGZpbmRfY29udHJvbGxlcjogdGhlICNXZWJL
aXRGaW5kQ29udHJvbGxlcgorICoKKyAqIExvb2tzIGZvciB0aGUgbmV4dCBvY2N1cnJlbmNlIG9m
IHRoZSBzZWFyY2ggdGV4dC4KKyAqCisgKiBDYWxsaW5nIHRoaXMgbWV0aG9kIGJlZm9yZSB3ZWJr
aXRfZmluZF9jb250cm9sbGVyX3NlYXJjaCgpIG9yCisgKiB3ZWJraXRfZmluZF9jb250cm9sbGVy
X2NvdW50X21hdGNoZXMoKSBpcyBhIHByb2dyYW1taW5nIGVycm9yLgorICovCit2b2lkIHdlYmtp
dF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX25leHQoV2ViS2l0RmluZENvbnRyb2xsZXIqIGZpbmRD
b250cm9sbGVyKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0ZJTkRfQ09OVFJP
TExFUihmaW5kQ29udHJvbGxlcikpOworCisgICAgZmluZENvbnRyb2xsZXItPnByaXYtPmZpbmRP
cHRpb25zID0gZmluZENvbnRyb2xsZXItPnByaXYtPmZpbmRPcHRpb25zICYgfldFQktJVF9GSU5E
X09QVElPTlNfQkFDS1dBUkRTOworICAgIHdlYktpdEZpbmRDb250cm9sbGVyUGVyZm9ybShmaW5k
Q29udHJvbGxlciwgRmluZE9wZXJhdGlvbik7Cit9CisKKy8qKgorICogd2Via2l0X2ZpbmRfY29u
dHJvbGxlcl9zZWFyY2hfcHJldmlvdXM6CisgKiBAZmluZF9jb250cm9sbGVyOiB0aGUgI1dlYktp
dEZpbmRDb250cm9sbGVyCisgKgorICogTG9va3MgZm9yIHRoZSBwcmV2aW91cyBvY2N1cnJlbmNl
IG9mIHRoZSBzZWFyY2ggdGV4dC4KKyAqCisgKiBDYWxsaW5nIHRoaXMgbWV0aG9kIGJlZm9yZSB3
ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaCgpIG9yCisgKiB3ZWJraXRfZmluZF9jb250cm9s
bGVyX2NvdW50X21hdGNoZXMoKSBpcyBhIHByb2dyYW1taW5nIGVycm9yLgorICovCit2b2lkIHdl
YmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX3ByZXZpb3VzKFdlYktpdEZpbmRDb250cm9sbGVy
KiBmaW5kQ29udHJvbGxlcikKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19GSU5E
X0NPTlRST0xMRVIoZmluZENvbnRyb2xsZXIpKTsKKworICAgIGZpbmRDb250cm9sbGVyLT5wcml2
LT5maW5kT3B0aW9ucyA9IGZpbmRDb250cm9sbGVyLT5wcml2LT5maW5kT3B0aW9ucyB8IFdFQktJ
VF9GSU5EX09QVElPTlNfQkFDS1dBUkRTOworICAgIHdlYktpdEZpbmRDb250cm9sbGVyUGVyZm9y
bShmaW5kQ29udHJvbGxlciwgRmluZE9wZXJhdGlvbik7Cit9CisKKy8qKgorICogd2Via2l0X2Zp
bmRfY29udHJvbGxlcl9jb3VudF9tYXRjaGVzOgorICogQGZpbmRfY29udHJvbGxlcjogdGhlICNX
ZWJLaXRGaW5kQ29udHJvbGxlcgorICogQHNlYXJjaF90ZXh0OiB0aGUgdGV4dCB0byBsb29rIGZv
cgorICogQGZpbmRfb3B0aW9uczogYSBiaXRtYXNrIHdpdGggdGhlICNXZWJLaXRGaW5kT3B0aW9u
cyB1c2VkIGluIHRoZSBzZWFyY2gKKyAqIEBtYXhfbWF0Y2hfY291bnQ6IHRoZSBtYXhpbXVtIG51
bWJlciBvZiBtYXRjaGVzIGFsbG93ZWQgaW4gdGhlIHNlYXJjaAorICoKKyAqIENvdW50cyB0aGUg
bnVtYmVyIG9mIG1hdGNoZXMgZm9yIEBzZWFyY2hfdGV4dCBmb3VuZCBpbiB0aGUKKyAqICNXZWJL
aXRXZWJWaWV3IHdpdGggdGhlIHByb3ZpZGVkIEBmaW5kX29wdGlvbnMuIFRoZSBudW1iZXIgb2YK
KyAqIG1hdGNoZXMgd2lsbCBiZSBwcm92aWRlZCBieSB0aGUKKyAqIFdlYktpdEZpbmRDb250cm9s
bGVyOjpjb3VudGVkLW1hdGNoZXMgc2lnbmFsLgorICovCit2b2lkIHdlYmtpdF9maW5kX2NvbnRy
b2xsZXJfY291bnRfbWF0Y2hlcyhXZWJLaXRGaW5kQ29udHJvbGxlciogZmluZENvbnRyb2xsZXIs
IGNvbnN0IGdjaGFyKiBzZWFyY2hUZXh0LCBndWludCBmaW5kT3B0aW9ucywgZ3VpbnQgbWF4TWF0
Y2hDb3VudCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19GSU5EX0NPTlRST0xM
RVIoZmluZENvbnRyb2xsZXIpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlYXJjaFRleHQpOwor
CisgICAgd2ViS2l0RmluZENvbnRyb2xsZXJTZXRTZWFyY2hEYXRhKGZpbmRDb250cm9sbGVyLCBz
ZWFyY2hUZXh0LCBmaW5kT3B0aW9ucywgbWF4TWF0Y2hDb3VudCk7CisgICAgd2ViS2l0RmluZENv
bnRyb2xsZXJQZXJmb3JtKGZpbmRDb250cm9sbGVyLCBDb3VudE9wZXJhdGlvbik7Cit9CisKKy8q
KgorICogd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfZmluaXNoOgorICogQGZpbmRfY29u
dHJvbGxlcjogYSAjV2ViS2l0RmluZENvbnRyb2xsZXIKKyAqCisgKiBGaW5pc2hlcyBhIGZpbmQg
b3BlcmF0aW9uIHN0YXJ0ZWQgYnkKKyAqIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoKCku
IEl0IHdpbGwgYmFzaWNhbGx5IHVuaGlnaGxpZ2h0CisgKiBldmVyeSB0ZXh0IG1hdGNoIGZvdW5k
LgorICovCit2b2lkIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX2ZpbmlzaChXZWJLaXRG
aW5kQ29udHJvbGxlciogZmluZENvbnRyb2xsZXIpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfSVNfRklORF9DT05UUk9MTEVSKGZpbmRDb250cm9sbGVyKSk7CisKKyAgICBXS1BhZ2VI
aWRlRmluZFVJKGdldFdLUGFnZUZyb21XZWJLaXRXZWJWaWV3KGZpbmRDb250cm9sbGVyLT5wcml2
LT53ZWJWaWV3KSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRGaW5kQ29udHJvbGxlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0RmluZENvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMDU5MDYwOWE4ZWVlMmI4
ZDk2ZDAzNGY1NGFhMDU4ZTA1ZjE5YzZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmluZENvbnRyb2xsZXIuaApAQCAtMCwwICsxLDEx
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVk
KF9fV0VCS0lUMl9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChXRUJLSVQyX0NPTVBJTEFUSU9OKQor
I2Vycm9yICJPbmx5IDx3ZWJraXQyL3dlYmtpdDIuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5
LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdEZpbmRDb250cm9sbGVyX2gKKyNkZWZpbmUgV2Vi
S2l0RmluZENvbnRyb2xsZXJfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRl
IDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdF
QktJVF9UWVBFX0ZJTkRfQ09OVFJPTExFUiAgICAgICAgICAgICh3ZWJraXRfZmluZF9jb250cm9s
bGVyX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9GSU5EX0NPTlRST0xMRVIob2JqKSAgICAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfRklO
RF9DT05UUk9MTEVSLCBXZWJLaXRGaW5kQ29udHJvbGxlcikpCisjZGVmaW5lIFdFQktJVF9GSU5E
X0NPTlRST0xMRVJfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xh
c3MpLCAgV0VCS0lUX1RZUEVfRklORF9DT05UUk9MTEVSLCBXZWJLaXRGaW5kQ29udHJvbGxlckNs
YXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0ZJTkRfQ09OVFJPTExFUihvYmopICAgICAgICAgKEdf
VFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9GSU5EX0NPTlRST0xM
RVIpKQorI2RlZmluZSBXRUJLSVRfSVNfRklORF9DT05UUk9MTEVSX0NMQVNTKGtsYXNzKSAoR19U
WVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0ZJTkRfQ09OVFJPTExF
UikpCisjZGVmaW5lIFdFQktJVF9GSU5EX0NPTlRST0xMRVJfR0VUX0NMQVNTKG9iaikgIChHX1RZ
UEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfRklORF9DT05UUk9MTEVS
LCBXZWJLaXRGaW5kQ29udHJvbGxlckNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEZp
bmRDb250cm9sbGVyUHJpdmF0ZSBXZWJLaXRGaW5kQ29udHJvbGxlclByaXZhdGU7Cit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RmluZENvbnRyb2xsZXJDbGFzcyAgIFdlYktpdEZpbmRDb250cm9sbGVy
Q2xhc3M7CisKKy8qKgorICogV2ViS2l0RmluZE9wdGlvbnM6CisgKiBAV0VCS0lUX0ZJTkRfT1BU
SU9OU19OT05FOiBubyBzZWFyY2ggZmxhZ3MsIHRoaXMgbWVhbnMgYSBjYXNlCisgKiAgIHNlbnNp
dGl2ZSwgbm8gd3JhcCwgZm9yd2FyZCBvbmx5IHNlYXJjaC4KKyAqIEBXRUJLSVRfRklORF9PUFRJ
T05TX0NBU0VfSU5TRU5TSVRJVkU6IGNhc2UgaW5zZW5zaXRpdmUgc2VhcmNoLgorICogQFdFQktJ
VF9GSU5EX09QVElPTlNfQVRfV09SRF9TVEFSVFM6IHNlYXJjaCB0ZXh0IG9ubHkgYXQgdGhlCisg
KiAgIGJlZ2luaW5nIG9mIHRoZSB3b3Jkcy4KKyAqIEBXRUJLSVRfRklORF9PUFRJT05TX1RSRUFU
X01FRElBTF9DQVBJVEFMX0FTX1dPUkRfU1RBUlQ6IHRyZWF0CisgKiAgIGNhcGl0YWwgbGV0dGVy
cyBpbiB0aGUgbWlkZGxlIG9mIHdvcmRzIGFzIHdvcmQgc3RhcnQuCisgKiBAV0VCS0lUX0ZJTkRf
T1BUSU9OU19CQUNLV0FSRFM6IHNlYXJjaCBiYWNrd2FyZHMuCisgKiBAV0VCS0lUX0ZJTkRfT1BU
SU9OU19XUkFQX0FST1VORDogaWYgbm90IHByZXNlbnQgc2VhcmNoIHdpbGwgc3RvcAorICogICBh
dCB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC4KKyAqCisgKiBFbnVtIHZhbHVlcyB1c2VkIHRvIHNw
ZWNpZnkgc2VhcmNoIG9wdGlvbnMuCisgKi8KK3R5cGVkZWYgZW51bSB7CisgIFdFQktJVF9GSU5E
X09QVElPTlNfTk9ORSwKKworICBXRUJLSVRfRklORF9PUFRJT05TX0NBU0VfSU5TRU5TSVRJVkUg
PSAgICAgICAgICAgICAgICAgICAxIDw8IDAsCisgIFdFQktJVF9GSU5EX09QVElPTlNfQVRfV09S
RF9TVEFSVFMgPSAgICAgICAgICAgICAgICAgICAgIDEgPDwgMSwKKyAgV0VCS0lUX0ZJTkRfT1BU
SU9OU19UUkVBVF9NRURJQUxfQ0FQSVRBTF9BU19XT1JEX1NUQVJUID0gMSA8PCAyLAorICBXRUJL
SVRfRklORF9PUFRJT05TX0JBQ0tXQVJEUyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAxIDw8
IDMsCisgIFdFQktJVF9GSU5EX09QVElPTlNfV1JBUF9BUk9VTkQgPSAgICAgICAgICAgICAgICAg
ICAgICAgIDEgPDwgNCwKK30gV2ViS2l0RmluZE9wdGlvbnM7CisKK3N0cnVjdCBfV2ViS2l0Rmlu
ZENvbnRyb2xsZXIgeworICAgIEdPYmplY3QgcGFyZW50OworCisgIC8qPCBwcml2YXRlID4qLwor
ICBXZWJLaXRGaW5kQ29udHJvbGxlclByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktp
dEZpbmRDb250cm9sbGVyQ2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9
OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF90eXBlICAg
ICAgICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9maW5kX2NvbnRyb2xs
ZXJfc2VhcmNoICAgICAgICAgICAgICAoV2ViS2l0RmluZENvbnRyb2xsZXIgKmZpbmRfY29udHJv
bGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Z2NoYXIgICAgICAgICAgKnNlYXJjaF90ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgICAgZmluZF9vcHRpb25zLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAg
ICAgICAgbWF4X21hdGNoX2NvdW50KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZmluZF9j
b250cm9sbGVyX3NlYXJjaF9maW5pc2ggICAgICAgKFdlYktpdEZpbmRDb250cm9sbGVyICpmaW5k
X2NvbnRyb2xsZXIpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9maW5kX2NvbnRyb2xsZXJf
c2VhcmNoX25leHQgICAgICAgICAoV2ViS2l0RmluZENvbnRyb2xsZXIgKmZpbmRfY29udHJvbGxl
cik7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfcHJl
dmlvdXMgICAgIChXZWJLaXRGaW5kQ29udHJvbGxlciAqZmluZF9jb250cm9sbGVyKTsKKworV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfZmluZF9jb250cm9sbGVyX2NvdW50X21hdGNoZXMgICAgICAg
KFdlYktpdEZpbmRDb250cm9sbGVyICpmaW5kX2NvbnRyb2xsZXIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICpzZWFyY2hf
dGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQg
ICAgICAgICAgICAgICAgIGZpbmRfb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgICAgIG1heF9tYXRjaF9jb3VudCk7
CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRf
c2VhcmNoX3RleHQgICAgIChXZWJLaXRGaW5kQ29udHJvbGxlciAqZmluZF9jb250cm9sbGVyKTsK
KworV0VCS0lUX0FQSSBndWludAord2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfb3B0aW9ucyAg
ICAgICAgIChXZWJLaXRGaW5kQ29udHJvbGxlciAqZmluZF9jb250cm9sbGVyKTsKKworV0VCS0lU
X0FQSSBndWludAord2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfbWF4X21hdGNoX2NvdW50IChX
ZWJLaXRGaW5kQ29udHJvbGxlciAqZmluZF9jb250cm9sbGVyKTsKKworV0VCS0lUX0FQSSBXZWJL
aXRXZWJWaWV3ICoKK3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X3dlYl92aWV3ICAgICAgICAo
V2ViS2l0RmluZENvbnRyb2xsZXIgKmZpbmRfY29udHJvbGxlcik7CisKK0dfRU5EX0RFQ0xTCisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJp
dmF0ZS5oCmluZGV4IDQzZDI2Y2M4NTZmY2EzMmExYzU4Zjk4ODg3M2YzYjAzZWFlOTQ2MDkuLmU3
ODVjMzYzODM1MGQ4NGE4MDhjMGZhZDUwZWU4MmJiMDYxNjQ2NzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmgKQEAgLTI4LDcgKzI4LDkg
QEAKIAogI2luY2x1ZGUgPFdlYktpdDIvV0tBUElDYXN0Lmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9X
S0Rvd25sb2FkLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS0ZpbmRPcHRpb25zLmg+CiAjaW5jbHVk
ZSA8V2ViS2l0Mi9XS1JldGFpblB0ci5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tTdHJpbmcuaD4K
ICNpbmNsdWRlIDxXZWJLaXQyL1dlYktpdDIuaD4KICNpbmNsdWRlIDxnbGliLmg+CiAjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKaW5kZXggYWY3OTkzNWY0ZWM2ZmEyZjAxMDdkMzM0OGMx
NGU5ZWU0NzJkMmVlOC4uNThkY2E2Njg0ZWVlZjVlOTViNTAyNTUxZDRiODI0YWMyYzE0ZjFmNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
dy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
dy5jcHAKQEAgLTg5LDYgKzg5LDggQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3UHJpdmF0ZSB7CiAK
ICAgICBHUmVmUHRyPFdlYktpdEhpdFRlc3RSZXN1bHQ+IG1vdXNlVGFyZ2V0SGl0VGVzdFJlc3Vs
dDsKICAgICB1bnNpZ25lZCBtb3VzZVRhcmdldE1vZGlmaWVyczsKKworICAgIEdSZWZQdHI8V2Vi
S2l0RmluZENvbnRyb2xsZXI+IGZpbmRDb250cm9sbGVyOwogfTsKIAogc3RhdGljIGd1aW50IHNp
Z25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OwpAQCAtMTMxNSw3ICsxMzE3LDYgQEAgZ2RvdWJs
ZSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3pvb21fbGV2ZWwoV2ViS2l0V2ViVmlldyogd2ViVmlldykK
ICAgICByZXR1cm4gV0tQYWdlR2V0UGFnZVpvb21GYWN0b3Iod2tQYWdlKTsKIH0KIAotCiBzdGF0
aWMgdm9pZCBkaWRWYWxpZGF0ZUNvbW1hbmQoV0tTdHJpbmdSZWYgY29tbWFuZCwgYm9vbCBpc0Vu
YWJsZWQsIGludDMyX3Qgc3RhdGUsIFdLRXJyb3JSZWYsIHZvaWQqIGNvbnRleHQpCiB7CiAgICAg
R1JlZlB0cjxHU2ltcGxlQXN5bmNSZXN1bHQ+IHJlc3VsdCA9IGFkb3B0R1JlZihHX1NJTVBMRV9B
U1lOQ19SRVNVTFQoY29udGV4dCkpOwpAQCAtMTM4OCwzICsxMzg5LDIzIEBAIHZvaWQgd2Via2l0
X3dlYl92aWV3X2V4ZWN1dGVfZWRpdGluZ19jb21tYW5kKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcs
IGNvbnN0IGNoYXIqCiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrQ29tbWFuZChBZG9w
dFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhjb21tYW5kKSk7CiAgICAgV0tQYWdl
RXhlY3V0ZUNvbW1hbmQodG9BUEkocGFnZSksIHdrQ29tbWFuZC5nZXQoKSk7CiB9CisKKy8qKgor
ICogd2Via2l0X3dlYl92aWV3X2dldF9maW5kX2NvbnRyb2xsZXI6CisgKiBAd2ViX3ZpZXc6IHRo
ZSAjV2ViS2l0V2ViVmlldworICoKKyAqIEdldHMgdGhlICNXZWJLaXRGaW5kQ29udHJvbGxlciB0
aGF0IHdpbGwgYWxsb3cgdGhlIGNhbGxlciB0byBxdWVyeQorICogdGhlICNXZWJLaXRXZWJWaWV3
IGZvciB0aGUgdGV4dCB0byBsb29rIGZvci4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9u
ZSk6IHRoZSAjV2ViS2l0RmluZENvbnRyb2xsZXIgYXNzb2NpYXRlZCB0bworICogdGhpcyBwYXJ0
aWN1bGFyICNXZWJLaXRXZWJWaWV3LgorICovCitXZWJLaXRGaW5kQ29udHJvbGxlciogd2Via2l0
X3dlYl92aWV3X2dldF9maW5kX2NvbnRyb2xsZXIoV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldyksIDAp
OworCisgICAgaWYgKCF3ZWJWaWV3LT5wcml2LT5maW5kQ29udHJvbGxlcikKKyAgICAgICAgd2Vi
Vmlldy0+cHJpdi0+ZmluZENvbnRyb2xsZXIgPSBhZG9wdEdSZWYoV0VCS0lUX0ZJTkRfQ09OVFJP
TExFUihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRklORF9DT05UUk9MTEVSLCAid2ViLXZpZXci
LCB3ZWJWaWV3LCBOVUxMKSkpOworCisgICAgcmV0dXJuIHdlYlZpZXctPnByaXYtPmZpbmRDb250
cm9sbGVyLmdldCgpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViVmlldy5oCmluZGV4IDAwODFiZTNjNDhkYWI0NTU1NDQ5N2QxNjBmNzljZDk2OGE4
NWRmZTUuLjA0MTM5ZGYxOThlN2VlMWYxM2I1MTcxMDUxOWEyOGVlODgxOTBjY2UgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKQEAgLTMw
LDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0QmFja0ZvcndhcmRMaXN0Lmg+
CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9X
ZWJLaXRGaW5kQ29udHJvbGxlci5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0SGl0VGVzdFJl
c3VsdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViQ29udGV4dC5oPgogI2luY2x1ZGUg
PHdlYmtpdDIvV2ViS2l0U2V0dGluZ3MuaD4KQEAgLTI2Myw2ICsyNjQsMTAgQEAgd2Via2l0X3dl
Yl92aWV3X2Nhbl9leGVjdXRlX2VkaXRpbmdfY29tbWFuZF9maW5pc2ggKFdlYktpdFdlYlZpZXcg
ICAgICAgICAgICAgKncKIFdFQktJVF9BUEkgdm9pZAogd2Via2l0X3dlYl92aWV3X2V4ZWN1dGVf
ZWRpdGluZ19jb21tYW5kICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndl
Yl92aWV3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgKmNvbW1hbmQpOworCitXRUJLSVRfQVBJIFdl
YktpdEZpbmRDb250cm9sbGVyICoKK3dlYmtpdF93ZWJfdmlld19nZXRfZmluZF9jb250cm9sbGVy
ICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7CisK
IEdfRU5EX0RFQ0xTCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKaW5kZXggY2NjZTA0Zjdh
ZmI3ZGY3MDY3ZjY0MGEwODAxNGI2OTJhNmIyOTE2NC4uZjUzNDVkZmQ1ZGFmZGM4OTMwYzVjMmI3
NzI4MTdiY2Y3Y2EwZjQ4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sCkBAIC0yNiw2ICsyNiw3IEBA
CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdFJlc3BvbnNlUG9saWN5RGVjaXNpb24u
eG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdEhpdFRlc3RSZXN1bHQueG1s
Ii8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdEVycm9yLnhtbCIvPgorICAgIDx4
aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRGaW5kQ29udHJvbGxlci54bWwiLz4KICAgPC9jaGFw
dGVyPgogCiAgIDxpbmRleCBpZD0iaW5kZXgtYWxsIj4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0
CmluZGV4IDUwYzQyZGI5ZWQ2NDdkMWNiYjVhMzYxNGQ0YWQ0NDUzN2IxZmJlYzMuLjY1YzM0MjU4
MjBhMDBlNWVlNDY0NDA1N2RhYmFjNGZiOGIxNDdlMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25z
LnR4dApAQCAtODYsNiArODYsNyBAQCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3pvb21fbGV2ZWwKIHdl
YmtpdF93ZWJfdmlld19jYW5fZXhlY3V0ZV9lZGl0aW5nX2NvbW1hbmQKIHdlYmtpdF93ZWJfdmll
d19jYW5fZXhlY3V0ZV9lZGl0aW5nX2NvbW1hbmRfZmluaXNoCiB3ZWJraXRfd2ViX3ZpZXdfZXhl
Y3V0ZV9lZGl0aW5nX2NvbW1hbmQKK3dlYmtpdF93ZWJfdmlld19nZXRfZmluZF9jb250cm9sbGVy
CiAKIDxTVUJTRUNUSU9OIFN0YW5kYXJkPgogV2ViS2l0V2ViVmlld0NsYXNzCkBAIC00MzMsMyAr
NDM0LDMwIEBAIHdlYmtpdF9wb2xpY3lfZXJyb3JfcXVhcmsKIHdlYmtpdF9kb3dubG9hZF9lcnJv
cl9xdWFyawogPC9TRUNUSU9OPgogCis8U0VDVElPTj4KKzxGSUxFPldlYktpdEZpbmRDb250cm9s
bGVyPC9GSUxFPgorV2ViS2l0RmluZENvbnRyb2xsZXIKK1dlYktpdEZpbmRPcHRpb25zCit3ZWJr
aXRfZmluZF9jb250cm9sbGVyX3NlYXJjaAord2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hf
ZmluaXNoCit3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9uZXh0Cit3ZWJraXRfZmluZF9j
b250cm9sbGVyX3NlYXJjaF9wcmV2aW91cword2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfc2Vh
cmNoX3RleHQKK3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfY291bnRfbWF0Y2hlcword2Via2l0X2Zp
bmRfY29udHJvbGxlcl9nZXRfb3B0aW9ucword2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfbWF4
X21hdGNoX2NvdW50Cit3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF93ZWJfdmlldworCis8U1VC
U0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdEZpbmRDb250cm9sbGVyQ2xhc3MKK1dFQktJVF9UWVBF
X0ZJTkRfQ09OVFJPTExFUgorV0VCS0lUX0ZJTkRfQ09OVFJPTExFUgorV0VCS0lUX0lTX0ZJTkRf
Q09OVFJPTExFUgorV0VCS0lUX0ZJTkRfQ09OVFJPTExFUl9DTEFTUworV0VCS0lUX0lTX0ZJTkRf
Q09OVFJPTExFUl9DTEFTUworV0VCS0lUX0ZJTkRfQ09OVFJPTExFUl9HRVRfQ0xBU1MKKworPFNV
QlNFQ1RJT04gUHJpdmF0ZT4KK1dlYktpdEZpbmRDb250cm9sbGVyUHJpdmF0ZQord2Via2l0X2Zp
bmRfY29udHJvbGxlcl9nZXRfdHlwZQorPC9TRUNUSU9OPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzCmluZGV4IGNiYTJk
ZjQyYzNkNTI0NDMwNWVlZTQ2MTZiOWU3ODM1YWZkMWY2MmYuLjJlMGY1MDAyY2FlNzNiODI1OTY0
NjhkZTFhZjY3MGFkNzU5MTVkNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBlcworKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXMKQEAgLTksNCArOSw0IEBAIHdlYmtp
dF91cmlfcmVzcG9uc2VfZ2V0X3R5cGUKIHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdHlwZQogd2Vi
a2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF90eXBlCiB3ZWJraXRfZG93bmxvYWRfZ2V0X3R5cGUK
LQord2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfdHlwZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbQppbmRleCA3MjQxYjk5
ODA4ZWZmMTBjY2U3MjdmZWQ1M2JlOGNhNjU0MTNhNDc3Li4zYTExZGY4Yjg4YjE3YjU4M2Q2Mjg5
OGQxZTBjNjA0MWVmMjdlOTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbQpAQCAtMSwxMSArMSwxMiBAQAogVEVTVF9Q
Uk9HUyArPSBcCi0JUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRXZWJDb250ZXh0
IFwKLQlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFdlYlZpZXcgXAotCVByb2dy
YW1zL1dlYktpdDJBUElUZXN0cy9UZXN0TG9hZGVyQ2xpZW50IFwKLQlQcm9ncmFtcy9XZWJLaXQy
QVBJVGVzdHMvVGVzdFdlYktpdFNldHRpbmdzIFwKIAlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMv
VGVzdEJhY2tGb3J3YXJkTGlzdCBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3REb3du
bG9hZHMgXAorCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0TG9hZGVyQ2xpZW50IFwKKwlQ
cm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdEZpbmRDb250cm9sbGVyIFwKIAlQcm9n
cmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFBvbGljeUNsaWVudCBcCisJUHJvZ3JhbXMv
V2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRTZXR0aW5ncyBcCisJUHJvZ3JhbXMvV2ViS2l0MkFQ
SVRlc3RzL1Rlc3RXZWJLaXRXZWJDb250ZXh0IFwKKwlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMv
VGVzdFdlYktpdFdlYlZpZXcgXAogCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0V2ViVmll
d0VkaXRvcgogCiBub2luc3RfUFJPR1JBTVMgKz0gJChURVNUX1BST0dTKQpAQCAtMTE4LDMgKzEx
OSw5IEBAIFByb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViVmlld0VkaXRvcl9TT1VSQ0VT
ID0gXAogUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJWaWV3RWRpdG9yX0NQUEZMQUdT
ID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzKQogUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rl
c3RXZWJWaWV3RWRpdG9yX0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQogUHJvZ3JhbXNf
V2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJWaWV3RWRpdG9yX0xERkxBR1MgPSAkKHdlYmtpdDJfdGVz
dHNfbGRmbGFncykKKworUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRGaW5kQ29u
dHJvbGxlcl9TT1VSQ0VTID0gXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rl
c3RzL1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlci5jcHAKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0
c19UZXN0V2ViS2l0RmluZENvbnRyb2xsZXJfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3Bw
ZmxhZ3MpCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYktpdEZpbmRDb250cm9sbGVy
X0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3Rz
X1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlcl9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxh
Z3MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9U
ZXN0V2ViS2l0RmluZENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvVGVzdFdlYktpdEZpbmRDb250cm9sbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNzlj
ZjVlNDcxMGQ5NDQ4NTAzZDlhOTEzMzAzOWI5Zjc5NzYzNjZiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdEZpbmRDb250
cm9sbGVyLmNwcApAQCAtMCwwICsxLDM4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJ
Z2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiTG9hZFRyYWNraW5n
VGVzdC5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIu
aD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisKK3N0YXRpYyBjb25zdCBjaGFy
KiB0ZXN0U3RyaW5nID0gIjxodG1sPjxib2R5PmZpcnN0IHRlc3Rpbmcgc2Vjb25kIHRlc3Rpbmcg
c2Vjb25kSGFsZjwvYm9keT48L2h0bWw+IjsKKworY2xhc3MgRmluZENvbnRyb2xsZXJUZXN0OiBw
dWJsaWMgTG9hZFRyYWNraW5nVGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklY
VFVSRShGaW5kQ29udHJvbGxlclRlc3QpOworCisgICAgRmluZENvbnRyb2xsZXJUZXN0KCkKKyAg
ICAgICAgOiBtX3J1bkZpbmRVbnRpbENvbXBsZXRpb24oZmFsc2UpCisgICAgICAgICwgbV9maW5k
Q29udHJvbGxlcih3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ZpbmRfY29udHJvbGxlcihtX3dlYlZpZXcp
KQorICAgIHsKKyAgICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhH
X09CSkVDVChtX2ZpbmRDb250cm9sbGVyLmdldCgpKSk7CisgICAgfQorCisgICAgfkZpbmRDb250
cm9sbGVyVGVzdCgpCisgICAgeworICAgICAgICBpZiAobV9maW5kQ29udHJvbGxlcikKKyAgICAg
ICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX2ZpbmRDb250cm9s
bGVyLmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKKyAgICB9
CisKKyAgICB2b2lkIGZpbmQoY29uc3QgY2hhciogc2VhcmNoVGV4dCwgZ3VpbnQgZmluZE9wdGlv
bnMsIGd1aW50IG1heE1hdGNoQ291bnQpCisgICAgeworICAgICAgICAvLyBEdWUgdG8gaHR0cDov
L3dlYmtpdC5vcmcvYi83NjUyMiB3ZSBoYXZlIHRvIGFydGlmaWNpYWxseQorICAgICAgICAvLyBh
ZGQgaGVyZSB0aGUgc2hvdyBvdmVybGF5IG9wdGlvbiAodGhhdCB3ZSBkbyBub3QgZXZlbgorICAg
ICAgICAvLyBleHBvc2UgaW4gdGhlIEFQSSkgdG8gZ2V0IHRoZSBEaWRGaW5kU3RyaW5nIG1lc3Nz
YWdlCisgICAgICAgIC8vIGlzc3VlZC4gUmVtb3ZlIHRoaXMgb25jZSA3NjUyMiBpcyBmaXhlZC4K
KyAgICAgICAgZmluZE9wdGlvbnMgPSBmaW5kT3B0aW9ucyB8IDEgPDwgNTsKKworICAgICAgICBn
X3NpZ25hbF9jb25uZWN0KG1fZmluZENvbnRyb2xsZXIuZ2V0KCksICJmb3VuZC10ZXh0IiwgR19D
QUxMQkFDSyhmb3VuZFRleHRDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9jb25u
ZWN0KG1fZmluZENvbnRyb2xsZXIuZ2V0KCksICJmYWlsZWQtdG8tZmluZC10ZXh0IiwgR19DQUxM
QkFDSyhmYWlsZWRUb0ZpbmRUZXh0Q2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgd2Via2l0X2Zp
bmRfY29udHJvbGxlcl9zZWFyY2gobV9maW5kQ29udHJvbGxlci5nZXQoKSwgc2VhcmNoVGV4dCwg
ZmluZE9wdGlvbnMsIG1heE1hdGNoQ291bnQpOworICAgIH0KKworICAgIHZvaWQgY291bnQoY29u
c3QgY2hhciogc2VhcmNoVGV4dCwgZ3VpbnQgZmluZE9wdGlvbnMsIGd1aW50IG1heE1hdGNoQ291
bnQpCisgICAgeworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fZmluZENvbnRyb2xsZXIuZ2V0
KCksICJjb3VudGVkLW1hdGNoZXMiLCBHX0NBTExCQUNLKGNvdW50ZWRNYXRjaGVzQ2FsbGJhY2sp
LCB0aGlzKTsKKyAgICAgICAgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9jb3VudF9tYXRjaGVzKG1f
ZmluZENvbnRyb2xsZXIuZ2V0KCksIHNlYXJjaFRleHQsIGZpbmRPcHRpb25zLCBtYXhNYXRjaENv
dW50KTsKKyAgICB9CisKKyAgICB2b2lkIHdhaXRVbnRpbEZpbmRGaW5pc2hlZCgpCisgICAgewor
ICAgICAgICBtX3J1bkZpbmRVbnRpbENvbXBsZXRpb24gPSB0cnVlOworICAgICAgICBnX21haW5f
bG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgfQorCisgICAgR1JlZlB0cjxXZWJLaXRGaW5kQ29u
dHJvbGxlcj4gbV9maW5kQ29udHJvbGxlcjsKKyAgICBib29sIG1fdGV4dEZvdW5kOworICAgIHVu
c2lnbmVkIG1fbWF0Y2hDb3VudDsKKworcHJpdmF0ZToKKyAgICBib29sIG1fcnVuRmluZFVudGls
Q29tcGxldGlvbjsKKworICAgIHN0YXRpYyB2b2lkIGZvdW5kVGV4dENhbGxiYWNrKFdlYktpdEZp
bmRDb250cm9sbGVyKiwgZ3VpbnQgbWF0Y2hDb3VudCwgRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0
KQorICAgIHsKKyAgICAgICAgdGVzdC0+bV90ZXh0Rm91bmQgPSB0cnVlOworICAgICAgICB0ZXN0
LT5tX21hdGNoQ291bnQgPSBtYXRjaENvdW50OworICAgICAgICBpZiAodGVzdC0+bV9ydW5GaW5k
VW50aWxDb21wbGV0aW9uKQorICAgICAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21h
aW5Mb29wKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBmYWlsZWRUb0ZpbmRUZXh0Q2FsbGJh
Y2soV2ViS2l0RmluZENvbnRyb2xsZXIqLCBGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QpCisgICAg
eworICAgICAgICB0ZXN0LT5tX3RleHRGb3VuZCA9IGZhbHNlOworICAgICAgICBpZiAodGVzdC0+
bV9ydW5GaW5kVW50aWxDb21wbGV0aW9uKQorICAgICAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0
ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBjb3VudGVkTWF0Y2hl
c0NhbGxiYWNrKFdlYktpdEZpbmRDb250cm9sbGVyKiwgZ3VpbnQgbWF0Y2hDb3VudCwgRmluZENv
bnRyb2xsZXJUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+bV9tYXRjaENvdW50ID0g
bWF0Y2hDb3VudDsKKyAgICAgICAgaWYgKHRlc3QtPm1fcnVuRmluZFVudGlsQ29tcGxldGlvbikK
KyAgICAgICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVzdC0+bV9tYWluTG9vcCk7CisgICAgfQor
fTsKKworc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVyVGV4dEZvdW5kKEZpbmRDb250cm9s
bGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0
U3RyaW5nLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRl
c3QtPmZpbmQoInRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDEpOworICAgIHRl
c3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0
Rm91bmQpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJUZXh0Tm90Rm91bmQo
RmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxv
YWRIdG1sKHRlc3RTdHJpbmcsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgp
OworCisgICAgdGVzdC0+ZmluZCgibm90Rm91bmQiLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUs
IDEpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQo
IXRlc3QtPm1fdGV4dEZvdW5kKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEZpbmRDb250cm9sbGVy
TWF0Y2hDb3VudChGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7Cisg
ICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0cmluZywgMCk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5maW5kKCJ0ZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BU
SU9OU19OT05FLCAyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAg
IGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3VudCA9PSAyKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5t
X3RleHRGb3VuZCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlck1heE1hdGNo
Q291bnQoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRl
c3QtPmxvYWRIdG1sKHRlc3RTdHJpbmcsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5p
c2hlZCgpOworCisgICAgdGVzdC0+ZmluZCgidGVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNf
Tk9ORSwgMSk7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fz
c2VydCh0ZXN0LT5tX21hdGNoQ291bnQgPT0gR19NQVhVSU5UKTsKKyAgICBnX2Fzc2VydCh0ZXN0
LT5tX3RleHRGb3VuZCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlck5leHQo
RmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxv
YWRIdG1sKHRlc3RTdHJpbmcsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgp
OworCisgICAgdGVzdC0+ZmluZCgidGVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwg
Mik7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0
ZXN0LT5tX3RleHRGb3VuZCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDIp
OworCisgICAgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfbmV4dCh0ZXN0LT5tX2ZpbmRD
b250cm9sbGVyLmdldCgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKwor
ICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX21h
dGNoQ291bnQgPT0gMik7CisgICAgZ19hc3NlcnQoISh3ZWJraXRfZmluZF9jb250cm9sbGVyX2dl
dF9vcHRpb25zKHRlc3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpICYgV0VCS0lUX0ZJTkRfT1BU
SU9OU19CQUNLV0FSRFMpKTsKKworICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX25l
eHQodGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsRmlu
ZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCghdGVzdC0+bV90ZXh0Rm91bmQpOworICAgIGdf
YXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3VudCA9PSAyKTsKKyAgICBnX2Fzc2VydCghKHdlYmtpdF9m
aW5kX2NvbnRyb2xsZXJfZ2V0X29wdGlvbnModGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSkg
JiBXRUJLSVRfRklORF9PUFRJT05TX0JBQ0tXQVJEUykpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0
RmluZENvbnRyb2xsZXJQcmV2aW91cyhGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0cmluZywgMCk7CisgICAgdGVzdC0+
d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5maW5kKCJ0ZXN0aW5nIiwgV0VC
S0lUX0ZJTkRfT1BUSU9OU19OT05FLCAyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNo
ZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3VudCA9PSAyKTsKKyAgICBnX2Fz
c2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7CisKKyAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3Nl
YXJjaF9uZXh0KHRlc3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpOworICAgIHRlc3QtPndhaXRV
bnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOwor
ICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3VudCA9PSAyKTsKKyAgICBnX2Fzc2VydCghKHdl
YmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X29wdGlvbnModGVzdC0+bV9maW5kQ29udHJvbGxlci5n
ZXQoKSkgJiBXRUJLSVRfRklORF9PUFRJT05TX0JBQ0tXQVJEUykpOworCisgICAgd2Via2l0X2Zp
bmRfY29udHJvbGxlcl9zZWFyY2hfcHJldmlvdXModGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQo
KSk7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCh0
ZXN0LT5tX3RleHRGb3VuZCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDIp
OworICAgIGdfYXNzZXJ0KHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X29wdGlvbnModGVzdC0+
bV9maW5kQ29udHJvbGxlci5nZXQoKSkgJiBXRUJLSVRfRklORF9PUFRJT05TX0JBQ0tXQVJEUyk7
Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlckNvdW50ZWRNYXRjaGVzKEZpbmRD
b250cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRt
bCh0ZXN0U3RyaW5nLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKwor
ICAgIHRlc3QtPmNvdW50KCJ0ZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAyKTsK
KyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3Qt
Pm1fbWF0Y2hDb3VudCA9PSAyKTsKKworICAgIHRlc3QtPmNvdW50KCJmaXJzdCIsIFdFQktJVF9G
SU5EX09QVElPTlNfTk9ORSwgMik7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7
CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX21hdGNoQ291bnQgPT0gMSk7CisKKyAgICB0ZXN0LT5j
b3VudCgibm90Rm91bmQiLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDIpOworICAgIHRlc3Qt
PndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQoIXRlc3QtPm1fbWF0Y2hD
b3VudCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlck9wdGlvbnMoRmluZENv
bnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRIdG1s
KHRlc3RTdHJpbmcsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisg
ICAgdGVzdC0+ZmluZCgiVGVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMik7Cisg
ICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCghdGVzdC0+
bV90ZXh0Rm91bmQpOworCisgICAgdGVzdC0+ZmluZCgiVGVzdGluZyIsIFdFQktJVF9GSU5EX09Q
VElPTlNfQ0FTRV9JTlNFTlNJVElWRSwgMik7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlz
aGVkKCk7CisKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7CisKKyAgICB0ZXN0LT5m
aW5kKCJlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDIpOworICAgIHRlc3QtPndh
aXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQp
OworCisgICAgdGVzdC0+ZmluZCgiZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19BVF9XT1JE
X1NUQVJUUywgMik7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBn
X2Fzc2VydCghdGVzdC0+bV90ZXh0Rm91bmQpOworCisgICAgdGVzdC0+ZmluZCgiSGFsZiIsIFdF
QktJVF9GSU5EX09QVElPTlNfQVRfV09SRF9TVEFSVFMsIDIpOworICAgIHRlc3QtPndhaXRVbnRp
bEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQoIXRlc3QtPm1fdGV4dEZvdW5kKTsKKwor
ICAgIHRlc3QtPmZpbmQoIkhhbGYiLCBXRUJLSVRfRklORF9PUFRJT05TX0FUX1dPUkRfU1RBUlRT
IHwgV0VCS0lUX0ZJTkRfT1BUSU9OU19UUkVBVF9NRURJQUxfQ0FQSVRBTF9BU19XT1JEX1NUQVJU
LCAyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0
KHRlc3QtPm1fdGV4dEZvdW5kKTsKKworICAgIHRlc3QtPmZpbmQoInRlc3RpbmciLCBXRUJLSVRf
RklORF9PUFRJT05TX1dSQVBfQVJPVU5ELCAzKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmlu
aXNoZWQoKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7CisKKyAgICB3ZWJraXRf
ZmluZF9jb250cm9sbGVyX3NlYXJjaF9uZXh0KHRlc3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkp
OworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0KHRlc3Qt
Pm1fdGV4dEZvdW5kKTsKKworICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX25leHQo
dGVzdC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZp
bmlzaGVkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworfQorCitzdGF0aWMg
Z2Jvb2xlYW4gZ2RrUGl4YnVmRXF1YWwoR2RrUGl4YnVmKiBmaXJzdFBpeGJ1ZiwgR2RrUGl4YnVm
KiBzZWNvbmRQaXhidWYpCit7CisgICAgaWYgKGdka19waXhidWZfZ2V0X2JpdHNfcGVyX3NhbXBs
ZShmaXJzdFBpeGJ1ZikgIT0gZ2RrX3BpeGJ1Zl9nZXRfYml0c19wZXJfc2FtcGxlKHNlY29uZFBp
eGJ1ZikKKyAgICAgICAgfHwgZ2RrX3BpeGJ1Zl9nZXRfaGFzX2FscGhhKGZpcnN0UGl4YnVmKSAh
PSBnZGtfcGl4YnVmX2dldF9oYXNfYWxwaGEoc2Vjb25kUGl4YnVmKQorICAgICAgICB8fCBnZGtf
cGl4YnVmX2dldF9oZWlnaHQoZmlyc3RQaXhidWYpICE9IGdka19waXhidWZfZ2V0X2hlaWdodChz
ZWNvbmRQaXhidWYpCisgICAgICAgIHx8IGdka19waXhidWZfZ2V0X25fY2hhbm5lbHMoZmlyc3RQ
aXhidWYpICE9IGdka19waXhidWZfZ2V0X25fY2hhbm5lbHMoc2Vjb25kUGl4YnVmKQorICAgICAg
ICB8fCBnZGtfcGl4YnVmX2dldF9yb3dzdHJpZGUoZmlyc3RQaXhidWYpICE9IGdka19waXhidWZf
Z2V0X3Jvd3N0cmlkZShzZWNvbmRQaXhidWYpCisgICAgICAgIHx8IGdka19waXhidWZfZ2V0X3dp
ZHRoKGZpcnN0UGl4YnVmKSAhPSBnZGtfcGl4YnVmX2dldF93aWR0aChzZWNvbmRQaXhidWYpKQor
ICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBpbnQgcGl4YnVmUm93c3RyaWRlID0gZ2RrX3Bp
eGJ1Zl9nZXRfcm93c3RyaWRlKGZpcnN0UGl4YnVmKTsKKyAgICBpbnQgcGl4YnVmSGVpZ2h0ID0g
Z2RrX3BpeGJ1Zl9nZXRfaGVpZ2h0KGZpcnN0UGl4YnVmKTsKKyAgICBpbnQgcGl4YnVmV2lkdGgg
PSBnZGtfcGl4YnVmX2dldF93aWR0aChmaXJzdFBpeGJ1Zik7CisgICAgaW50IG51bWJlck9mQ2hh
bm5lbHMgPSBnZGtfcGl4YnVmX2dldF9uX2NoYW5uZWxzKGZpcnN0UGl4YnVmKTsKKyAgICBpbnQg
Yml0c1BlclNhbXBsZSA9IGdka19waXhidWZfZ2V0X2JpdHNfcGVyX3NhbXBsZShmaXJzdFBpeGJ1
Zik7CisKKyAgICAvLyBMYXN0IHJvdyBjYW4gYmUgb2YgZGlmZmVyZW50IGxlbmd0aC4gVGFrZW4g
ZnJvbSBnZGstcGl4YnVmIGRvY3VtZW50YXRpb24uCisgICAgaW50IHRvdGFsTGVuZ2h0ID0gKHBp
eGJ1ZkhlaWdodCAtIDEpICogcGl4YnVmUm93c3RyaWRlIFwKKyAgICAgICAgKyBwaXhidWZXaWR0
aCAqICgobnVtYmVyT2ZDaGFubmVscyAqIGJpdHNQZXJTYW1wbGUgKyA3KSAvIDgpOworCisgICAg
Z3VjaGFyKiBmaXJzdFBpeGVscyA9IGdka19waXhidWZfZ2V0X3BpeGVscyhmaXJzdFBpeGJ1Zik7
CisgICAgZ3VjaGFyKiBzZWNvbmRQaXhlbHMgPSBnZGtfcGl4YnVmX2dldF9waXhlbHMoc2Vjb25k
UGl4YnVmKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsTGVuZ2h0OyBpKyspCisgICAg
ICAgIGlmIChmaXJzdFBpeGVsc1tpXSAhPSBzZWNvbmRQaXhlbHNbaV0pCisgICAgICAgICAgICBy
ZXR1cm4gRkFMU0U7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQgdGVzdEZp
bmRDb250cm9sbGVySGlkZShGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIp
Cit7CisgICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0cmluZywgMCk7CisgICAgdGVzdC0+d2FpdFVu
dGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5zaG93SW5XaW5kb3dBbmRXYWl0VW50aWxN
YXBwZWQoKTsKKyAgICBpbnQgYWxsb2NhdGVkSGVpZ2h0ID0gZ3RrX3dpZGdldF9nZXRfYWxsb2Nh
dGVkX2hlaWdodChHVEtfV0lER0VUKHRlc3QtPm1fd2ViVmlldykpOworICAgIGludCBhbGxvY2F0
ZWRXaWR0aCA9IGd0a193aWRnZXRfZ2V0X2FsbG9jYXRlZF93aWR0aChHVEtfV0lER0VUKHRlc3Qt
Pm1fd2ViVmlldykpOworICAgIEdka1dpbmRvdyogd2ViVmlld0dka1dpbmRvdyA9IGd0a193aWRn
ZXRfZ2V0X3dpbmRvdyhHVEtfV0lER0VUKHRlc3QtPm1fd2ViVmlldykpOworICAgIGdfYXNzZXJ0
KHdlYlZpZXdHZGtXaW5kb3cpOworCisgICAgLy8gV2UgbmVlZCB0byB1c2UgdGhvc2UgZGVsYXlz
IHRvIGxldCBXZWJWaWV3IHBhaW50IGl0cyBjb250ZW50cworICAgIC8vIGJlZm9yZSB0YWtpbmcg
YSBzbmFwc2hvdC4gQWxzbyBmb3IgdGhlcmUgaXMgbm8gd2F5IHRvIGtub3cgaWYKKyAgICAvLyBX
ZWJDb3JlIGhhcyBoaWdobGlnaHRlZCB0aGUgbWF0Y2hlcyBvciBubywgYW5kIHRoZXJlIGlzIGFs
c28gbm8KKyAgICAvLyB3YXkgdG8ga25vdyB3aGVuIGEgZWRpdGluZyBjb21tYW5kIGhhcyBmaW5p
c2hlZC4KKyAgICB0ZXN0LT53YWl0KDEuMCk7CisgICAgR2RrUGl4YnVmKiBvcmlnaW5hbFBpeGJ1
ZiA9IGdka19waXhidWZfZ2V0X2Zyb21fd2luZG93KHdlYlZpZXdHZGtXaW5kb3csIDAsIDAsIGFs
bG9jYXRlZEhlaWdodCwgYWxsb2NhdGVkV2lkdGgpOworICAgIGdfYXNzZXJ0KG9yaWdpbmFsUGl4
YnVmKTsKKworICAgIHRlc3QtPmZpbmQoInRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX05P
TkUsIDEpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0
KHRlc3QtPm1fdGV4dEZvdW5kKTsKKworICAgIHRlc3QtPndhaXQoMS4wKTsKKyAgICBHZGtQaXhi
dWYqIGhpZ2hsaWdodFBpeGJ1ZiA9IGdka19waXhidWZfZ2V0X2Zyb21fd2luZG93KHdlYlZpZXdH
ZGtXaW5kb3csIDAsIDAsIGFsbG9jYXRlZEhlaWdodCwgYWxsb2NhdGVkV2lkdGgpOworICAgIGdf
YXNzZXJ0KGhpZ2hsaWdodFBpeGJ1Zik7CisgICAgZ19hc3NlcnQoIWdka1BpeGJ1ZkVxdWFsKG9y
aWdpbmFsUGl4YnVmLCBoaWdobGlnaHRQaXhidWYpKTsKKworICAgIC8vIFJlcXVpcmVzIGh0dHA6
Ly93ZWJraXQub3JnL2IvNzc3NDcgdG8gYmUgZml4ZWQKKyAgICAvLyBXZWJLaXRGaW5kQ29udHJv
bGxlciogZmluZENvbnRyb2xsZXIgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ZpbmRfY29udHJvbGxl
cih0ZXN0LT5tX3dlYlZpZXcpOworICAgIC8vIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNo
X2ZpbmlzaChmaW5kQ29udHJvbGxlcik7CisgICAgLy8gZ3RrX3dpZGdldF9zaG93X25vdyhHVEtf
V0lER0VUKHRlc3QtPm1fd2ViVmlldykpOworICAgIC8vIHdlYmtpdF93ZWJfdmlld19leGVjdXRl
X2VkaXRpbmdfY29tbWFuZCh0ZXN0LT5tX3dlYlZpZXcsICJVbnNlbGVjdCIpOworCisgICAgLy8g
dGVzdC0+d2FpdCgxLjApOworICAgIC8vIEdka1BpeGJ1ZiogdW5oaWdobGlnaHRQaXhidWYgPSBn
ZGtfcGl4YnVmX2dldF9mcm9tX3dpbmRvdyh3ZWJWaWV3R2RrV2luZG93LCAwLCAwLCBhbGxvY2F0
ZWRIZWlnaHQsIGFsbG9jYXRlZFdpZHRoKTsKKyAgICAvLyBnX2Fzc2VydCh1bmhpZ2hsaWdodFBp
eGJ1Zik7CisgICAgLy8gZ19hc3NlcnQoZ2RrUGl4YnVmRXF1YWwob3JpZ2luYWxQaXhidWYsIHVu
aGlnaGxpZ2h0UGl4YnVmKSk7CisKKyAgICBnX29iamVjdF91bnJlZihvcmlnaW5hbFBpeGJ1Zik7
CisgICAgZ19vYmplY3RfdW5yZWYoaGlnaGxpZ2h0UGl4YnVmKTsKKyAgICAvLyBnX29iamVjdF91
bnJlZih1bmhpZ2hsaWdodFBpeGJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJv
bGxlckluc3RhbmNlKEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sK
KyAgICBXZWJLaXRGaW5kQ29udHJvbGxlciogZmluZENvbnRyb2xsZXIxID0gd2Via2l0X3dlYl92
aWV3X2dldF9maW5kX2NvbnRyb2xsZXIodGVzdC0+bV93ZWJWaWV3KTsKKyAgICBXZWJLaXRGaW5k
Q29udHJvbGxlciogZmluZENvbnRyb2xsZXIyID0gd2Via2l0X3dlYl92aWV3X2dldF9maW5kX2Nv
bnRyb2xsZXIodGVzdC0+bV93ZWJWaWV3KTsKKworICAgIGdfYXNzZXJ0KGZpbmRDb250cm9sbGVy
MSA9PSBmaW5kQ29udHJvbGxlcjIpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xs
ZXJHZXR0ZXJzKEZpbmRDb250cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAg
ICBjb25zdCBjaGFyKiBzZWFyY2hUZXh0ID0gInRlc3RpbmciOworICAgIGd1aW50IG1heE1hdGNo
Q291bnQgPSAxOworICAgIGd1aW50IGZpbmRPcHRpb25zID0gV0VCS0lUX0ZJTkRfT1BUSU9OU19X
UkFQX0FST1VORCB8IFdFQktJVF9GSU5EX09QVElPTlNfQVRfV09SRF9TVEFSVFM7CisgICAgV2Vi
S2l0RmluZENvbnRyb2xsZXIqIGZpbmRDb250cm9sbGVyID0gd2Via2l0X3dlYl92aWV3X2dldF9m
aW5kX2NvbnRyb2xsZXIodGVzdC0+bV93ZWJWaWV3KTsKKworICAgIHdlYmtpdF9maW5kX2NvbnRy
b2xsZXJfc2VhcmNoKGZpbmRDb250cm9sbGVyLCBzZWFyY2hUZXh0LCBmaW5kT3B0aW9ucywgbWF4
TWF0Y2hDb3VudCk7CisgICAgZ19hc3NlcnQod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfd2Vi
X3ZpZXcoZmluZENvbnRyb2xsZXIpID09IHRlc3QtPm1fd2ViVmlldyk7CisgICAgZ19hc3NlcnQo
IWdfc3RyY21wMCh3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9zZWFyY2hfdGV4dChmaW5kQ29u
dHJvbGxlciksIHNlYXJjaFRleHQpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfZmluZF9jb250cm9s
bGVyX2dldF9tYXhfbWF0Y2hfY291bnQoZmluZENvbnRyb2xsZXIpID09IG1heE1hdGNoQ291bnQp
OworICAgIGdfYXNzZXJ0KHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X29wdGlvbnMoZmluZENv
bnRyb2xsZXIpID09IGZpbmRPcHRpb25zKTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAg
IEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJnZXR0ZXJz
IiwgdGVzdEZpbmRDb250cm9sbGVyR2V0dGVycyk7CisgICAgRmluZENvbnRyb2xsZXJUZXN0Ojph
ZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwgImluc3RhbmNlIiwgdGVzdEZpbmRDb250cm9sbGVy
SW5zdGFuY2UpOworICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJv
bGxlciIsICJ0ZXh0LWZvdW5kIiwgdGVzdEZpbmRDb250cm9sbGVyVGV4dEZvdW5kKTsKKyAgICBG
aW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAidGV4dC1ub3Qt
Zm91bmQiLCB0ZXN0RmluZENvbnRyb2xsZXJUZXh0Tm90Rm91bmQpOworICAgIEZpbmRDb250cm9s
bGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJtYXRjaC1jb3VudCIsIHRlc3RG
aW5kQ29udHJvbGxlck1hdGNoQ291bnQpOworICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJX
ZWJLaXRGaW5kQ29udHJvbGxlciIsICJtYXgtbWF0Y2gtY291bnQiLCB0ZXN0RmluZENvbnRyb2xs
ZXJNYXhNYXRjaENvdW50KTsKKyAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0Rmlu
ZENvbnRyb2xsZXIiLCAibmV4dCIsIHRlc3RGaW5kQ29udHJvbGxlck5leHQpOworICAgIEZpbmRD
b250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJwcmV2aW91cyIsIHRl
c3RGaW5kQ29udHJvbGxlclByZXZpb3VzKTsKKyAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgi
V2ViS2l0RmluZENvbnRyb2xsZXIiLCAiY291bnRlZC1tYXRjaGVzIiwgdGVzdEZpbmRDb250cm9s
bGVyQ291bnRlZE1hdGNoZXMpOworICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRG
aW5kQ29udHJvbGxlciIsICJvcHRpb25zIiwgdGVzdEZpbmRDb250cm9sbGVyT3B0aW9ucyk7Cisg
ICAgRmluZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwgImhpZGUi
LCB0ZXN0RmluZENvbnRyb2xsZXJIaWRlKTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7Cit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKaW5kZXggM2FmOTkwNGU1
Njg5ZDVhN2IzNWZkNDIxNjJkZDNjNmI0YzM4ZDJkNS4uYjJiOWI5ZWRhMGFhMTM2ZDU2OWI5NWUz
MDFlZjUxM2UxNWYzZTliOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvd2Via2l0Mi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dl
YmtpdDIuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RWRpdGlu
Z0NvbW1hbmRzLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRFbnVtVHlwZXMuaD4KICNpbmNs
dWRlIDx3ZWJraXQyL1dlYktpdEVycm9yLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRGaW5k
Q29udHJvbGxlci5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0SGl0VGVzdFJlc3VsdC5oPgog
I2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0U2V0dGluZ3MuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dl
YktpdFVSSVJlcXVlc3QuaD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128749</attachid>
            <date>2012-02-24 09:37:37 -0800</date>
            <delta_ts>2012-02-28 23:53:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76070-20120224183735.patch</filename>
            <type>text/plain</type>
            <size>53170</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4NzYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYjcxNDA5NjEwMTM1MDI5
YzZlYzRkN2MwMWJjYWQ1NjA3YjgzODVhOS4uNDlkYzVhYTUwNzEyNDljZTI2MjdiNjZjZGJiYWE5
NWMwMzAyYWVhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisyMDEyLTAxLTE5ICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFtX
SzJdIEFkZCBGaW5kIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzYwNzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIHBhdGNoIGFkZHMgYSBuZXcgcHVibGljIGZpbmQgQVBJIGZvciB0aGUgR3Rr
KyBXSzIgcG9ydC4gSXQKKyAgICAgICAgZGVmaW5lcyBhIG5ldyBvYmplY3QgY2FsbGVkIFdlYktp
dEZpbmRDb250cm9sbGVyIG93bmVkIGJ5IGVhY2gKKyAgICAgICAgV2ViS2l0V2ViVmlldy4gQ2xp
ZW50cyB3aWxsIHVzZSB0aGlzIG5ldyBvYmplY3QgdG8gc2VhcmNoIHN0cmluZ3MKKyAgICAgICAg
aW4gdGhlIFdlYktpdFdlYlZpZXcuCisKKyAgICAgICAgQ2hhbmdlcyBpbmNsdWRlIGFsc28gZG9j
dW1lbnRhdGlvbiBhbmQgdW5pdCB0ZXN0cyBmb3IgdGhlIG5ldworICAgICAgICBwdWJsaWMgQVBJ
LgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0RGVmaW5lcy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZp
bmRDb250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChkaWRGaW5kU3RyaW5nKTogaW1wbGVt
ZW50YXRpb24gb2YgdGhlIFdLUGFnZSBGaW5kIGludGVyZmFjZS4KKyAgICAgICAgKGRpZEZhaWxU
b0ZpbmRTdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKGRpZENvdW50U3RyaW5nTWF0Y2hlcyk6IERp
dHRvLgorICAgICAgICAod2Via2l0X2ZpbmRfY29udHJvbGxlcl9pbml0KToKKyAgICAgICAgKGdl
dFdLUGFnZUZyb21XZWJLaXRXZWJWaWV3KToKKyAgICAgICAgKHdlYmtpdEZpbmRDb250cm9sbGVy
Q29uc3RydWN0ZWQpOgorICAgICAgICAod2Via2l0RmluZENvbnRyb2xsZXJHZXRQcm9wZXJ0eSk6
CisgICAgICAgICh3ZWJraXRGaW5kQ29udHJvbGxlclNldFByb3BlcnR5KToKKyAgICAgICAgKHdl
YmtpdEZpbmRDb250cm9sbGVyRmluYWxpemUpOgorICAgICAgICAod2Via2l0X2ZpbmRfY29udHJv
bGxlcl9jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X3Nl
YXJjaF90ZXh0KToKKyAgICAgICAgKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X29wdGlvbnMp
OgorICAgICAgICAod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfbWF4X21hdGNoX2NvdW50KToK
KyAgICAgICAgKHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X3dlYl92aWV3KToKKyAgICAgICAg
KHdlYktpdEZpbmRDb250cm9sbGVyUGVyZm9ybSk6CisgICAgICAgICh3ZWJLaXRGaW5kQ29udHJv
bGxlclNldFNlYXJjaERhdGEpOgorICAgICAgICAod2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFy
Y2gpOiBhc3luY2hyb25vdXNseSBsb29rcyBmb3IgdGhlCisgICAgICAgIHNlYXJjaCBzdHJpbmcg
aW4gdGhlIFdlYktpdFdlYlZpZXcuCisgICAgICAgICh3ZWJraXRfZmluZF9jb250cm9sbGVyX3Nl
YXJjaF9maW5pc2gpOiB1bmhpZ2hsaWdodHMgdGV4dCBtYXRjaGVzLgorICAgICAgICAod2Via2l0
X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfbmV4dCk6CisgICAgICAgICh3ZWJraXRfZmluZF9jb250
cm9sbGVyX3NlYXJjaF9wcmV2aW91cyk6CisgICAgICAgICh3ZWJraXRfZmluZF9jb250cm9sbGVy
X2NvdW50X21hdGNoZXMpOiBhc3luY2hyb25vdXNseSBjb3VudHMgdGhlCisgICAgICAgIG51bWJl
ciBvZiBtYXRjaGVzIG9mIHRoZSBzZWFyY2ggc3RyaW5nIGluIHRoZSBXZWJLaXRXZWJWaWV3Lgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZpbmRDb250cm9sbGVyLmg6IEFkZGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdF93
ZWJfdmlld19nZXRfZmluZF9jb250cm9sbGVyKTogcmV0dXJucyB0aGUKKyAgICAgICAgV2ViS2l0
RmluZENvbnRyb2xsZXIgaW5zdGFuY2Ugb3duZWQgYnkgdGhlIFdlYktpdFdlYlZpZXcuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWw6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXM6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW06CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvVGVzdFdlYktpdEZpbmRDb250cm9sbGVyLmNwcDogQWRkZWQuCisgICAgICAgICh0
ZXN0RmluZENvbnRyb2xsZXJUZXh0Rm91bmQpOgorICAgICAgICAodGVzdEZpbmRDb250cm9sbGVy
VGV4dE5vdEZvdW5kKToKKyAgICAgICAgKHRlc3RGaW5kQ29udHJvbGxlck1hdGNoQ291bnQpOgor
ICAgICAgICAodGVzdEZpbmRDb250cm9sbGVyTWF4TWF0Y2hDb3VudCk6CisgICAgICAgICh0ZXN0
RmluZENvbnRyb2xsZXJOZXh0KToKKyAgICAgICAgKHRlc3RGaW5kQ29udHJvbGxlclByZXZpb3Vz
KToKKyAgICAgICAgKHRlc3RGaW5kQ29udHJvbGxlckNvdW50ZWRNYXRjaGVzKToKKyAgICAgICAg
KHRlc3RGaW5kQ29udHJvbGxlck9wdGlvbnMpOgorICAgICAgICAodGVzdEZpbmRDb250cm9sbGVy
SW5zdGFuY2UpOgorICAgICAgICAodGVzdEZpbmRDb250cm9sbGVyR2V0dGVycyk6CisgICAgICAg
ICh0ZXN0RmluZENvbnRyb2xsZXJIaWRlKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAg
IChhZnRlckFsbCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oOgorCiAy
MDEyLTAyLTI0ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFtXSzJdIFtHVEtdIERlc3RydWN0b3Igbm90IGludm9rZWQgaW4gRWRpdG9yQ2xpZW50
RnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVt
YWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCmluZGV4IDBlMTM3MTVh
M2M2MTg5OTM2ODQxYTAyMGRkNjI3MTc0OTY5ZjU0NzkuLmRhYWRhYjI3ZTg5ZjdiMGNiZjhiMTYw
MTUwNDFiM2FkYzYzNDQxMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxl
LmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCkBAIC04OCw2ICs4OCw3IEBA
IGxpYndlYmtpdDJndGtpbmNsdWRlX0hFQURFUlMgPSBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXREb3dubG9hZC5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEVkaXRpbmdDb21tYW5kcy5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEVycm9yLmggXAorCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Rmlu
ZENvbnRyb2xsZXIuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRIaXRU
ZXN0UmVzdWx0LmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdh
dGlvblBvbGljeURlY2lzaW9uLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0UG9saWN5RGVjaXNpb24uaCBcCkBAIC01NDYsNiArNTQ3LDggQEAgd2Via2l0Ml9zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRIaXRUZXN0UmVz
dWx0UHJpdmF0ZS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRM
b2FkZXJDbGllbnQuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
TG9hZGVyQ2xpZW50LmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0RmluZENvbnRyb2xsZXIuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0RmluZENvbnRyb2xsZXIuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24uY3BwIFwKIAlTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24uaCBcCiAJ
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmF2aWdhdGlvblBvbGljeURl
Y2lzaW9uUHJpdmF0ZS5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdERlZmluZXMuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdERlZmluZXMuaAppbmRleCA4YzNlZWMyYTQ4NjNlNWE1YzJmMzJiNjE1OWIyYTVmNzEy
NTlkZTQ1Li5hZDc3ZDZhNzliNTU4MGRmZDhiMzg2MTY4NGZjZjY3ODY0OGI5NThjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREZWZpbmVzLmgKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RGVmaW5lcy5oCkBAIC00
Niw0ICs0Niw3IEBAIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRQcmludE9wZXJhdGlvbiBXZWJLaXRQ
cmludE9wZXJhdGlvbjsKICMgICAgZGVmaW5lIFdFQktJVF9PQlNPTEVURV9BUEkgV0VCS0lUX0FQ
SSBfX2F0dHJpYnV0ZV9fKChkZXByZWNhdGVkKSkKICNlbmRpZgogCit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0RmluZENvbnRyb2xsZXIgV2ViS2l0RmluZENvbnRyb2xsZXI7Cit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0V2ViVmlldyAgICAgICAgV2ViS2l0V2ViVmlldzsKKwogI2VuZGlmIC8vIFdlYktp
dERlZmluZXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0RmluZENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0RmluZENvbnRyb2xsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjExYzAwZWRjOTdhNDAwZTIy
ZDEzZTRjMzUwMzAzOTg3MWEwZjljNjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGaW5kQ29udHJvbGxlci5jcHAKQEAgLTAsMCArMSw0
NzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRGaW5kQ29udHJvbGxlci5oIgorCisjaW5jbHVkZSAi
V2ViS2l0RW51bVR5cGVzLmgiCisjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgorI2luY2x1ZGUg
IldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIgorI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+
CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2VudW0geworICAgIEZPVU5E
X1RFWFQsCisgICAgRkFJTEVEX1RPX0ZJTkRfVEVYVCwKKyAgICBDT1VOVEVEX01BVENIRVMsCisK
KyAgICBMQVNUX1NJR05BTAorfTsKKworZW51bSB7CisgICAgUFJPUF8wLAorCisgICAgUFJPUF9U
RVhULAorICAgIFBST1BfT1BUSU9OUywKKyAgICBQUk9QX01BWF9NQVRDSF9DT1VOVCwKKyAgICBQ
Uk9QX1dFQl9WSUVXCit9OworCit0eXBlZGVmIGVudW0geworICAgIEZpbmRPcGVyYXRpb24sCisg
ICAgQ291bnRPcGVyYXRpb24KK30gV2ViS2l0RmluZENvbnRyb2xsZXJPcGVyYXRpb247CisKK3N0
cnVjdCBfV2ViS2l0RmluZENvbnRyb2xsZXJQcml2YXRlIHsKKyAgICBDU3RyaW5nIHNlYXJjaFRl
eHQ7CisgICAgdWludDMyX3QgZmluZE9wdGlvbnM7CisgICAgdW5zaWduZWQgbWF4TWF0Y2hDb3Vu
dDsKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OworfTsKKworc3RhdGljIGd1aW50IHNpZ25h
bHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OworCitHX0RFRklORV9UWVBFKFdlYktpdEZpbmRDb250
cm9sbGVyLCB3ZWJraXRfZmluZF9jb250cm9sbGVyLCBHX1RZUEVfT0JKRUNUKQorCitDT01QSUxF
X0FTU0VSVF9NQVRDSElOR19FTlVNKFdFQktJVF9GSU5EX09QVElPTlNfQ0FTRV9JTlNFTlNJVElW
RSwga1dLRmluZE9wdGlvbnNDYXNlSW5zZW5zaXRpdmUpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJ
TkdfRU5VTShXRUJLSVRfRklORF9PUFRJT05TX0FUX1dPUkRfU1RBUlRTLCBrV0tGaW5kT3B0aW9u
c0F0V29yZFN0YXJ0cyk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdFQktJVF9GSU5E
X09QVElPTlNfVFJFQVRfTUVESUFMX0NBUElUQUxfQVNfV09SRF9TVEFSVCwga1dLRmluZE9wdGlv
bnNUcmVhdE1lZGlhbENhcGl0YWxBc1dvcmRTdGFydCk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElO
R19FTlVNKFdFQktJVF9GSU5EX09QVElPTlNfQkFDS1dBUkRTLCBrV0tGaW5kT3B0aW9uc0JhY2t3
YXJkcyk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdFQktJVF9GSU5EX09QVElPTlNf
V1JBUF9BUk9VTkQsIGtXS0ZpbmRPcHRpb25zV3JhcEFyb3VuZCk7CisKK3N0YXRpYyB2b2lkIGRp
ZEZpbmRTdHJpbmcoV0tQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIHN0cmluZywgdW5zaWduZWQg
bWF0Y2hDb3VudCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBnX3NpZ25hbF9lbWl0
KFdFQktJVF9GSU5EX0NPTlRST0xMRVIoY2xpZW50SW5mbyksIHNpZ25hbHNbRk9VTkRfVEVYVF0s
IDAsIG1hdGNoQ291bnQpOworfQorCitzdGF0aWMgdm9pZCBkaWRGYWlsVG9GaW5kU3RyaW5nKFdL
UGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiBzdHJpbmcsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
Cit7CisgICAgZ19zaWduYWxfZW1pdChXRUJLSVRfRklORF9DT05UUk9MTEVSKGNsaWVudEluZm8p
LCBzaWduYWxzW0ZBSUxFRF9UT19GSU5EX1RFWFRdLCAwKTsKK30KKworc3RhdGljIHZvaWQgZGlk
Q291bnRTdHJpbmdNYXRjaGVzKFdLUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiBzdHJpbmcsIHVu
c2lnbmVkIG1hdGNoQ291bnQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgZ19zaWdu
YWxfZW1pdChXRUJLSVRfRklORF9DT05UUk9MTEVSKGNsaWVudEluZm8pLCBzaWduYWxzW0NPVU5U
RURfTUFUQ0hFU10sIDAsIG1hdGNoQ291bnQpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZmlu
ZF9jb250cm9sbGVyX2luaXQoV2ViS2l0RmluZENvbnRyb2xsZXIqIGZpbmRDb250cm9sbGVyKQor
eworICAgIFdlYktpdEZpbmRDb250cm9sbGVyUHJpdmF0ZSogcHJpdiA9IEdfVFlQRV9JTlNUQU5D
RV9HRVRfUFJJVkFURShmaW5kQ29udHJvbGxlciwgV0VCS0lUX1RZUEVfRklORF9DT05UUk9MTEVS
LCBXZWJLaXRGaW5kQ29udHJvbGxlclByaXZhdGUpOworICAgIGZpbmRDb250cm9sbGVyLT5wcml2
ID0gcHJpdjsKKyAgICBuZXcgKHByaXYpIFdlYktpdEZpbmRDb250cm9sbGVyUHJpdmF0ZSgpOwor
fQorCitzdGF0aWMgV0tQYWdlUmVmIGlubGluZSBnZXRXS1BhZ2VGcm9tV2ViS2l0V2ViVmlldyhX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIHJldHVybiB0b0FQSSh3ZWJraXRXZWJWaWV3
QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2ViVmlldykpKTsKK30KKworc3RhdGlj
IHZvaWQgd2Via2l0RmluZENvbnRyb2xsZXJDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCit7
CisgICAgV2ViS2l0RmluZENvbnRyb2xsZXIqIGZpbmRDb250cm9sbGVyID0gV0VCS0lUX0ZJTkRf
Q09OVFJPTExFUihvYmplY3QpOworICAgIFdLUGFnZUZpbmRDbGllbnQgd2tGaW5kQ2xpZW50ID0g
eworICAgICAgICBrV0tQYWdlRmluZENsaWVudEN1cnJlbnRWZXJzaW9uLAorICAgICAgICBmaW5k
Q29udHJvbGxlciwgLy8gY2xpZW50SW5mbworICAgICAgICBkaWRGaW5kU3RyaW5nLAorICAgICAg
ICBkaWRGYWlsVG9GaW5kU3RyaW5nLAorICAgICAgICBkaWRDb3VudFN0cmluZ01hdGNoZXMKKyAg
ICB9OworCisgICAgV0tQYWdlU2V0UGFnZUZpbmRDbGllbnQoZ2V0V0tQYWdlRnJvbVdlYktpdFdl
YlZpZXcoZmluZENvbnRyb2xsZXItPnByaXYtPndlYlZpZXcpLCAmd2tGaW5kQ2xpZW50KTsKK30K
Kworc3RhdGljIHZvaWQgd2Via2l0RmluZENvbnRyb2xsZXJHZXRQcm9wZXJ0eShHT2JqZWN0KiBv
YmplY3QsIGd1aW50IHByb3BJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVj
KQoreworICAgIFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxlciA9IFdFQktJVF9G
SU5EX0NPTlRST0xMRVIob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcElkKSB7CisgICAgY2Fz
ZSBQUk9QX1RFWFQ6CisgICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyh2YWx1ZSwgd2Via2l0X2Zp
bmRfY29udHJvbGxlcl9nZXRfc2VhcmNoX3RleHQoZmluZENvbnRyb2xsZXIpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX09QVElPTlM6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQo
dmFsdWUsIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X29wdGlvbnMoZmluZENvbnRyb2xsZXIp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01BWF9NQVRDSF9DT1VOVDoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfdWludCh2YWx1ZSwgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfbWF4
X21hdGNoX2NvdW50KGZpbmRDb250cm9sbGVyKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9XRUJfVklFVzoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCBmaW5kQ29u
dHJvbGxlci0+cHJpdi0+d2ViVmlldyk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJZCwg
cGFyYW1TcGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdEZpbmRDb250cm9sbGVy
U2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIGNvbnN0IEdWYWx1ZSog
dmFsdWUsIEdQYXJhbVNwZWMqIHBhcmFtU3BlYykKK3sKKyAgICBXZWJLaXRGaW5kQ29udHJvbGxl
ciogZmluZENvbnRyb2xsZXIgPSBXRUJLSVRfRklORF9DT05UUk9MTEVSKG9iamVjdCk7CisKKyAg
ICBzd2l0Y2ggKHByb3BJZCkgeworICAgIGNhc2UgUFJPUF9XRUJfVklFVzoKKyAgICAgICAgZmlu
ZENvbnRyb2xsZXItPnByaXYtPndlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcoZ192YWx1ZV9nZXRf
b2JqZWN0KHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdf
T0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJZCwgcGFyYW1TcGVj
KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdEZpbmRDb250cm9sbGVyRmluYWxpemUo
R09iamVjdCogb2JqZWN0KQoreworICAgIFdFQktJVF9GSU5EX0NPTlRST0xMRVIob2JqZWN0KS0+
cHJpdi0+fldlYktpdEZpbmRDb250cm9sbGVyUHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNT
KHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9jbGFzc19pbml0KFdlYktp
dEZpbmRDb250cm9sbGVyQ2xhc3MqIGZpbmRDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdP
YmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGZpbmRDbGFzcyk7CisKKyAgICBnT2JqZWN0Q2xh
c3MtPmNvbnN0cnVjdGVkID0gd2Via2l0RmluZENvbnRyb2xsZXJDb25zdHJ1Y3RlZDsKKyAgICBn
T2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdEZpbmRDb250cm9sbGVyR2V0UHJvcGVy
dHk7CisgICAgZ09iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRGaW5kQ29udHJvbGxl
clNldFByb3BlcnR5OworICAgIGdPYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRGaW5kQ29u
dHJvbGxlckZpbmFsaXplOworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGZpbmRDbGFz
cywgc2l6ZW9mKFdlYktpdEZpbmRDb250cm9sbGVyUHJpdmF0ZSkpOworCisgICAgLyoqCisgICAg
ICogV2ViS2l0RmluZENvbnRyb2xsZXI6dGV4dDoKKyAgICAgKgorICAgICAqIFRoZSBjdXJyZW50
IHNlYXJjaCB0ZXh0IGZvciB0aGlzICNXZWJLaXRGaW5kQ29udHJvbGxlci4KKyAgICAgKi8KKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdPYmplY3RDbGFzcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfVEVYVCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoInRleHQiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJTZWFyY2gg
dGV4dCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfKCJUZXh0IHRvIHNlYXJjaCBmb3IgaW4gdGhlIHZpZXciKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BB
UkFNX1JFQURBQkxFKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRGaW5kQ29udHJvbGxlcjpv
cHRpb25zOgorICAgICAqCisgICAgICogVGhlIG9wdGlvbnMgdG8gYmUgdXNlZCBpbiB0aGUgc2Vh
cmNoIG9wZXJhdGlvbi4KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KGdPYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBS
T1BfT1BUSU9OUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1f
c3BlY19mbGFncygib3B0aW9ucyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXygiU2VhcmNoIE9wdGlvbnMiKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJTZWFyY2ggb3B0aW9u
cyB0byBiZSB1c2VkIGluIHRoZSBzZWFyY2ggb3BlcmF0aW9uIiksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1RZUEVfRklORF9P
UFRJT05TLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
KworICAgIC8qKgorICAgICAqIFdlYktpdEZpbmRDb250cm9sbGVyOm1heC1tYXRjaC1jb3VudDoK
KyAgICAgKgorICAgICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBtYXRjaGVzIHRvIHJlcG9ydCBm
b3IgYSBnaXZlbiBzZWFyY2guCisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eShnT2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQUk9QX01BWF9NQVRDSF9DT1VOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdfcGFyYW1fc3BlY191aW50KCJtYXgtbWF0Y2gtY291bnQiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiTWF4aW11bSBtYXRjaGVz
IGNvdW50IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfKCJUaGUgbWF4aW11bSBudW1iZXIgb2YgbWF0Y2hlcyBpbiBhIGdpdmVuIHRleHQg
dG8gcmVwb3J0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAwLCBHX01BWFVJTlQsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAg
IC8qKgorICAgICAqIFdlYktpdEZpbmRDb250cm9sbGVyOndlYi12aWV3OgorICAgICAqCisgICAg
ICogVGhlICNXZWJLaXRXZWJWaWV3IHRoaXMgY29udHJvbGxlciBpcyBhc3NvY2lhdGVkIHRvLgor
ICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ09iamVjdENsYXNz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9XRUJfVklFVywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3QoIndl
Yi12aWV3IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXygiV2ViVmlldyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgV2ViVmlldyBhc3NvY2lhdGVkIHdpdGggdGhp
cyBmaW5kIGNvbnRyb2xsZXIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1RZUEVfV0VCX1ZJRVcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEdQ
YXJhbUZsYWdzPihXRUJLSVRfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05M
WSkpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdEZpbmRDb250cm9sbGVyOjpmb3VuZC10ZXh0
OgorICAgICAqIEBmaW5kX2NvbnRyb2xsZXI6IHRoZSAjV2ViS2l0RmluZENvbnRyb2xsZXIKKyAg
ICAgKiBAbWF0Y2hfY291bnQ6IHRoZSBudW1iZXIgb2YgbWF0Y2hlcyBmb3VuZCBvZiB0aGUgc2Vh
cmNoIHRleHQKKyAgICAgKgorICAgICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgd2hlbiBhIGdp
dmVuIHRleHQgaXMgZm91bmQgaW4gdGhlIHdlYgorICAgICAqIHBhZ2UgdGV4dC4gSXQgd2lsbCBi
ZSBpc3N1ZWQgaWYgdGhlIHRleHQgaXMgZm91bmQKKyAgICAgKiBhc3luY2hyb25vdXNseSBhZnRl
ciBhIGNhbGwgdG8gd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2goKSwKKyAgICAgKiB3ZWJr
aXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9uZXh0KCkgb3IKKyAgICAgKiB3ZWJraXRfZmluZF9j
b250cm9sbGVyX3NlYXJjaF9wcmV2aW91cygpLgorICAgICAqLworICAgIHNpZ25hbHNbRk9VTkRf
VEVYVF0gPQorICAgICAgICBnX3NpZ25hbF9uZXcoImZvdW5kLXRleHQiLAorICAgICAgICAgICAg
ICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1MoZ09iamVjdENsYXNzKSwKKyAgICAgICAgICAgICAg
ICAgICAgIEdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwK
KyAgICAgICAgICAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19VSU5ULAorICAg
ICAgICAgICAgICAgICAgICAgR19UWVBFX05PTkUsIDEsIEdfVFlQRV9VSU5UKTsKKworICAgIC8q
KgorICAgICAqIFdlYktpdEZpbmRDb250cm9sbGVyOjpmYWlsZWQtdG8tZmluZC10ZXh0OgorICAg
ICAqIEBmaW5kX2NvbnRyb2xsZXI6IHRoZSAjV2ViS2l0RmluZENvbnRyb2xsZXIKKyAgICAgKgor
ICAgICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgd2hlbiBhIHNlYXJjaCBvcGVyYXRpb24gZG9l
cyBub3QgZmluZAorICAgICAqIGFueSByZXN1bHQgZm9yIHRoZSBnaXZlbiB0ZXh0LiBJdCB3aWxs
IGJlIGlzc3VlZCBpZiB0aGUgdGV4dAorICAgICAqIGlzIG5vdCBmb3VuZCBhc3luY2hyb25vdXNs
eSBhZnRlciBhIGNhbGwgdG8KKyAgICAgKiB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaCgp
LCB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9uZXh0KCkKKyAgICAgKiBvciB3ZWJraXRf
ZmluZF9jb250cm9sbGVyX3NlYXJjaF9wcmV2aW91cygpLgorICAgICAqLworICAgIHNpZ25hbHNb
RkFJTEVEX1RPX0ZJTkRfVEVYVF0gPQorICAgICAgICBnX3NpZ25hbF9uZXcoImZhaWxlZC10by1m
aW5kLXRleHQiLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1MoZ09iamVj
dENsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgIEdfU0lHTkFMX1JVTl9MQVNULAorICAgICAg
ICAgICAgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgIGdfY2Nsb3N1cmVf
bWFyc2hhbF9WT0lEX19WT0lELAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX05PTkUsIDAp
OworCisgICAgLyoqCisgICAgICogV2ViS2l0RmluZENvbnRyb2xsZXI6OmNvdW50ZWQtbWF0Y2hl
czoKKyAgICAgKiBAZmluZF9jb250cm9sbGVyOiB0aGUgI1dlYktpdEZpbmRDb250cm9sbGVyCisg
ICAgICogQG1hdGNoX2NvdW50OiB0aGUgbnVtYmVyIG9mIG1hdGNoZXMgb2YgdGhlIHNlYXJjaCB0
ZXh0CisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gdGhlICNXZWJL
aXRGaW5kQ29udHJvbGxlciBoYXMKKyAgICAgKiBjb3VudGVkIHRoZSBudW1iZXIgb2YgbWF0Y2hl
cyBmb3IgYSBnaXZlbiB0ZXh0IGFmdGVyIGEgY2FsbAorICAgICAqIHRvIHdlYmtpdF9maW5kX2Nv
bnRyb2xsZXJfY291bnRfbWF0Y2hlcygpLgorICAgICAqLworICAgIHNpZ25hbHNbQ09VTlRFRF9N
QVRDSEVTXSA9CisgICAgICAgIGdfc2lnbmFsX25ldygiY291bnRlZC1tYXRjaGVzIiwKKyAgICAg
ICAgICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGdPYmplY3RDbGFzcyksCisgICAgICAg
ICAgICAgICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgIDAs
IDAsIDAsCisgICAgICAgICAgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fVUlO
VCwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9OT05FLCAxLCBHX1RZUEVfVUlOVCk7Cit9
CisKKy8qKgorICogd2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfc2VhcmNoX3RleHQ6CisgKiBA
ZmluZF9jb250cm9sbGVyOiB0aGUgI1dlYktpdEZpbmRDb250cm9sbGVyCisgKgorICogR2V0cyB0
aGUgdGV4dCB0aGF0IEBmaW5kX2NvbnRyb2xsZXIgaXMgY3VycmVudGx5IHNlYXJjaGluZworICog
Zm9yLiBUaGlzIHRleHQgaXMgcGFzc2VkIHRvIGVpdGhlcgorICogd2Via2l0X2ZpbmRfY29udHJv
bGxlcl9zZWFyY2goKSBvcgorICogd2Via2l0X2ZpbmRfY29udHJvbGxlcl9jb3VudF9tYXRjaGVz
KCkuCisgKgorICogUmV0dXJuczogdGhlIHRleHQgdG8gbG9vayBmb3IgaW4gdGhlICNXZWJLaXRX
ZWJWaWV3LgorICovCitjb25zdCBjaGFyKiB3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9zZWFy
Y2hfdGV4dChXZWJLaXRGaW5kQ29udHJvbGxlciogZmluZENvbnRyb2xsZXIpCit7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0ZJTkRfQ09OVFJPTExFUihmaW5kQ29udHJvbGxl
ciksIDApOworCisgICAgcmV0dXJuIGZpbmRDb250cm9sbGVyLT5wcml2LT5zZWFyY2hUZXh0LmRh
dGEoKTsKK30KKworLyoqCisgKiB3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9vcHRpb25zOgor
ICogQGZpbmRfY29udHJvbGxlcjogdGhlICNXZWJLaXRGaW5kQ29udHJvbGxlcgorICoKKyAqIEdl
dHMgYSBiaXRtYXNrIGNvbnRhaW5pbmcgdGhlICNXZWJLaXRGaW5kT3B0aW9ucyBhc3NvY2lhdGVk
IHdpdGgKKyAqIHRoZSBjdXJyZW50IHNlYXJjaC4KKyAqCisgKiBSZXR1cm5zOiBhIGJpdG1hc2sg
Y29udGFpbmluZyB0aGUgI1dlYktpdEZpbmRPcHRpb25zIGFzc29jaWF0ZWQKKyAqIHdpdGggdGhl
IGN1cnJlbnQgc2VhcmNoLgorICovCitndWludDMyIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0
X29wdGlvbnMoV2ViS2l0RmluZENvbnRyb2xsZXIqIGZpbmRDb250cm9sbGVyKQoreworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19GSU5EX0NPTlRST0xMRVIoZmluZENvbnRyb2xs
ZXIpLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUpOworCisgICAgcmV0dXJuIGZpbmRDb250cm9s
bGVyLT5wcml2LT5maW5kT3B0aW9uczsKK30KKworLyoqCisgKiB3ZWJraXRfZmluZF9jb250cm9s
bGVyX2dldF9tYXhfbWF0Y2hfY291bnQ6CisgKiBAZmluZF9jb250cm9sbGVyOiB0aGUgI1dlYktp
dEZpbmRDb250cm9sbGVyCisgKgorICogR2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgbWF0Y2hl
cyB0byByZXBvcnQgZHVyaW5nIGEgdGV4dAorICogbG9va3VwLiBUaGlzIG51bWJlciBpcyBwYXNz
ZWQgYXMgdGhlIGxhc3QgYXJndW1lbnQgb2YKKyAqIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2Vh
cmNoKCkgb3IKKyAqIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfY291bnRfbWF0Y2hlcygpLgorICoK
KyAqIFJldHVybnM6IHRoZSBtYXhpbXVtIG51bWJlciBvZiBtYXRjaGVzIHRvIHJlcG9ydC4KKyAq
LworZ3VpbnQgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfbWF4X21hdGNoX2NvdW50KFdlYktp
dEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxlcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfSVNfRklORF9DT05UUk9MTEVSKGZpbmRDb250cm9sbGVyKSwgMCk7CisKKyAg
ICByZXR1cm4gZmluZENvbnRyb2xsZXItPnByaXYtPm1heE1hdGNoQ291bnQ7Cit9CisKKy8qKgor
ICogd2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfd2ViX3ZpZXc6CisgKiBAZmluZF9jb250cm9s
bGVyOiB0aGUgI1dlYktpdEZpbmRDb250cm9sbGVyCisgKgorICogR2V0cyB0aGUgI1dlYktpdFdl
YlZpZXcgdGhpcyBmaW5kIGNvbnRyb2xsZXIgaXMgYXNzb2NpYXRlZCB0by4gRG8KKyAqIG5vdCB1
bnJlZiB0aGUgcmV0dXJuZWQgaW5zdGFuY2UgYXMgaXQgYmVsb25ncyB0byB0aGUKKyAqICNXZWJL
aXRGaW5kQ29udHJvbGxlci4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IHRoZSAj
V2ViS2l0V2ViVmlldy4KKyAqLworV2ViS2l0V2ViVmlldyogd2Via2l0X2ZpbmRfY29udHJvbGxl
cl9nZXRfd2ViX3ZpZXcoV2ViS2l0RmluZENvbnRyb2xsZXIqIGZpbmRDb250cm9sbGVyKQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19GSU5EX0NPTlRST0xMRVIoZmluZENv
bnRyb2xsZXIpLCAwKTsKKworICAgIHJldHVybiBmaW5kQ29udHJvbGxlci0+cHJpdi0+d2ViVmll
dzsKK30KKworc3RhdGljIHZvaWQgd2ViS2l0RmluZENvbnRyb2xsZXJQZXJmb3JtKFdlYktpdEZp
bmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxlciwgV2ViS2l0RmluZENvbnRyb2xsZXJPcGVyYXRp
b24gb3BlcmF0aW9uKQoreworICAgIFdLRmluZE9wdGlvbnMgd2tGaW5kT3B0aW9ucyA9IHN0YXRp
Y19jYXN0PFdLRmluZE9wdGlvbnM+KGZpbmRDb250cm9sbGVyLT5wcml2LT5maW5kT3B0aW9ucyk7
CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrU2VhcmNoVGV4dChBZG9wdFdLLCBXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhmaW5kQ29udHJvbGxlci0+cHJpdi0+c2VhcmNoVGV4
dC5kYXRhKCkpKTsKKyAgICBXS1BhZ2VSZWYgd2tQYWdlID0gZ2V0V0tQYWdlRnJvbVdlYktpdFdl
YlZpZXcoZmluZENvbnRyb2xsZXItPnByaXYtPndlYlZpZXcpOworCisgICAgaWYgKG9wZXJhdGlv
biA9PSBGaW5kT3BlcmF0aW9uKSB7CisgICAgICAgIC8vIFVuY29uZGl0aW9uYWxseSBoaWdobGln
aHQgdGV4dCBtYXRjaGVzLiBXSzEgQVBJIHdhcyBmb3JjaW5nCisgICAgICAgIC8vIGNsaWVudHMg
dG8gZW5hYmxlL2Rpc2FibGUgaGlnaGxpZ2h0aW5nLiBTaW5jZSBtb3N0IG9mIHRoZW0KKyAgICAg
ICAgLy8gKGFsbD8pIHdoZXJlIHVzaW5nIGhpZ2hsaWdodGluZyB3ZSBkZWNpZGVkIHRvIHNpbXBs
aWZ5IHRoZQorICAgICAgICAvLyBXSzIgQVBJIGFuZCB1bmNvbmRpdGlvbmFsbHkgc2hvdyBoaWdo
bGlnaHRzLgorICAgICAgICB3a0ZpbmRPcHRpb25zID0gc3RhdGljX2Nhc3Q8V0tGaW5kT3B0aW9u
cz4oZmluZENvbnRyb2xsZXItPnByaXYtPmZpbmRPcHRpb25zIHwga1dLRmluZE9wdGlvbnNTaG93
SGlnaGxpZ2h0KTsKKyAgICAgICAgV0tQYWdlRmluZFN0cmluZyh3a1BhZ2UsIHdrU2VhcmNoVGV4
dC5nZXQoKSwgd2tGaW5kT3B0aW9ucywgZmluZENvbnRyb2xsZXItPnByaXYtPm1heE1hdGNoQ291
bnQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgV0tQYWdlQ291bnRTdHJpbmdNYXRj
aGVzKHdrUGFnZSwgd2tTZWFyY2hUZXh0LmdldCgpLCB3a0ZpbmRPcHRpb25zLCBmaW5kQ29udHJv
bGxlci0+cHJpdi0+bWF4TWF0Y2hDb3VudCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3ZWJL
aXRGaW5kQ29udHJvbGxlclNldFNlYXJjaERhdGEoV2ViS2l0RmluZENvbnRyb2xsZXIqIGZpbmRD
b250cm9sbGVyLCBjb25zdCBnY2hhciogc2VhcmNoVGV4dCwgZ3VpbnQzMiBmaW5kT3B0aW9ucywg
Z3VpbnQgbWF4TWF0Y2hDb3VudCkKK3sKKyAgICBmaW5kQ29udHJvbGxlci0+cHJpdi0+c2VhcmNo
VGV4dCA9IHNlYXJjaFRleHQ7CisgICAgZmluZENvbnRyb2xsZXItPnByaXYtPmZpbmRPcHRpb25z
ID0gZmluZE9wdGlvbnM7CisgICAgZmluZENvbnRyb2xsZXItPnByaXYtPm1heE1hdGNoQ291bnQg
PSBtYXhNYXRjaENvdW50OworfQorCisvKioKKyAqIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2Vh
cmNoOgorICogQGZpbmRfY29udHJvbGxlcjogdGhlICNXZWJLaXRGaW5kQ29udHJvbGxlcgorICog
QHNlYXJjaF90ZXh0OiB0aGUgdGV4dCB0byBsb29rIGZvcgorICogQGZpbmRfb3B0aW9uczogYSBi
aXRtYXNrIHdpdGggdGhlICNXZWJLaXRGaW5kT3B0aW9ucyB1c2VkIGluIHRoZSBzZWFyY2gKKyAq
IEBtYXhfbWF0Y2hfY291bnQ6IHRoZSBtYXhpbXVtIG51bWJlciBvZiBtYXRjaGVzIGFsbG93ZWQg
aW4gdGhlIHNlYXJjaAorICoKKyAqIExvb2tzIGZvciBAc2VhcmNoX3RleHQgaW4gdGhlICNXZWJL
aXRXZWJWaWV3IGFzc29jaWF0ZWQgd2l0aAorICogQGZpbmRfY29udHJvbGxlciBzaW5jZSB0aGUg
YmVnaW5uaW5nIG9mIHRoZSBkb2N1bWVudC4gVGhlIG91dGNvbWUKKyAqIG9mIHRoZSBzZWFyY2gg
d2lsbCBiZSBhc3luY2hyb25vdXNseSBwcm92aWRlZCBieSB0aGUKKyAqIFdlYktpdEZpbmRDb250
cm9sbGVyOjpmb3VuZC10ZXh0IGFuZAorICogV2ViS2l0RmluZENvbnRyb2xsZXI6OmZhaWxlZC10
by1maW5kLXRleHQuCisgKgorICogVG8gbG9vayBmb3IgdGhlIG5leHQgb3IgcHJldmlvdXMgb2Nj
dXJyZW5jZXMgb2YgdGhlIHNhbWUgdGV4dAorICogd2l0aCB0aGUgc2FtZSBmaW5kIG9wdGlvbnMg
dXNlIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX25leHQoKQorICogYW5kL29yIHdlYmtp
dF9maW5kX29wdGlvbnNfcHJldmlvdXMoKS4gVGhlCisgKiAjV2ViS2l0RmluZENvbnRyb2xsZXIg
d2lsbCB1c2UgdGhlIHNhbWUgdGV4dCBhbmQgb3B0aW9ucyBmb3IgdGhlCisgKiBmb2xsb3dpbmcg
c2VhcmNoZXMgdW5sZXNzIHRoZXkgYXJlIG1vZGlmaWVkIGJ5IGFub3RoZXIgY2FsbCB0byB0aGlz
CisgKiBtZXRob2QuCisgKgorICogTm90ZSB0aGF0IGlmIHRoZSBudW1iZXIgb2YgbWF0Y2hlcyBp
cyBoaWdoZXIgdGhhbiBAbWF4X21hdGNoX2NvdW50CisgKiB0aGVuIFdlYktpdEZpbmRDb250cm9s
bGVyOjpmb3VuZC10ZXh0IHdpbGwgcmVwb3J0IEdfTUFYVUlOVCBtYXRjaGVzCisgKiBpbnN0ZWFk
IG9mIHRoZSBhY3R1YWwgbnVtYmVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBhbHNvIGhp
Z2hsaWdodCB1cCB0byBAbWF4X21hdGNoX2NvdW50CisgKiBtYWNoZXMuIENhbGxlcnMgc2hvdWxk
IGNhbGwgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfZmluaXNoKCkKKyAqIHRvIHVuaGln
aGxpZ2h0IHRoZW0uCisgKi8KK3ZvaWQgd2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2goV2Vi
S2l0RmluZENvbnRyb2xsZXIqIGZpbmRDb250cm9sbGVyLCBjb25zdCBnY2hhciogc2VhcmNoVGV4
dCwgZ3VpbnQgZmluZE9wdGlvbnMsIGd1aW50IG1heE1hdGNoQ291bnQpCit7CisgICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfSVNfRklORF9DT05UUk9MTEVSKGZpbmRDb250cm9sbGVyKSk7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChzZWFyY2hUZXh0KTsKKworICAgIHdlYktpdEZpbmRDb250cm9s
bGVyU2V0U2VhcmNoRGF0YShmaW5kQ29udHJvbGxlciwgc2VhcmNoVGV4dCwgZmluZE9wdGlvbnMs
IG1heE1hdGNoQ291bnQpOworICAgIHdlYktpdEZpbmRDb250cm9sbGVyUGVyZm9ybShmaW5kQ29u
dHJvbGxlciwgRmluZE9wZXJhdGlvbik7Cit9CisKKy8qKgorICogd2Via2l0X2ZpbmRfY29udHJv
bGxlcl9zZWFyY2hfbmV4dDoKKyAqIEBmaW5kX2NvbnRyb2xsZXI6IHRoZSAjV2ViS2l0RmluZENv
bnRyb2xsZXIKKyAqCisgKiBMb29rcyBmb3IgdGhlIG5leHQgb2NjdXJyZW5jZSBvZiB0aGUgc2Vh
cmNoIHRleHQuCisgKgorICogQ2FsbGluZyB0aGlzIG1ldGhvZCBiZWZvcmUgd2Via2l0X2ZpbmRf
Y29udHJvbGxlcl9zZWFyY2goKSBvcgorICogd2Via2l0X2ZpbmRfY29udHJvbGxlcl9jb3VudF9t
YXRjaGVzKCkgaXMgYSBwcm9ncmFtbWluZyBlcnJvci4KKyAqLwordm9pZCB3ZWJraXRfZmluZF9j
b250cm9sbGVyX3NlYXJjaF9uZXh0KFdlYktpdEZpbmRDb250cm9sbGVyKiBmaW5kQ29udHJvbGxl
cikKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19GSU5EX0NPTlRST0xMRVIoZmlu
ZENvbnRyb2xsZXIpKTsKKworICAgIGZpbmRDb250cm9sbGVyLT5wcml2LT5maW5kT3B0aW9ucyA9
IGZpbmRDb250cm9sbGVyLT5wcml2LT5maW5kT3B0aW9ucyAmIH5XRUJLSVRfRklORF9PUFRJT05T
X0JBQ0tXQVJEUzsKKyAgICB3ZWJLaXRGaW5kQ29udHJvbGxlclBlcmZvcm0oZmluZENvbnRyb2xs
ZXIsIEZpbmRPcGVyYXRpb24pOworfQorCisvKioKKyAqIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJf
c2VhcmNoX3ByZXZpb3VzOgorICogQGZpbmRfY29udHJvbGxlcjogdGhlICNXZWJLaXRGaW5kQ29u
dHJvbGxlcgorICoKKyAqIExvb2tzIGZvciB0aGUgcHJldmlvdXMgb2NjdXJyZW5jZSBvZiB0aGUg
c2VhcmNoIHRleHQuCisgKgorICogQ2FsbGluZyB0aGlzIG1ldGhvZCBiZWZvcmUgd2Via2l0X2Zp
bmRfY29udHJvbGxlcl9zZWFyY2goKSBvcgorICogd2Via2l0X2ZpbmRfY29udHJvbGxlcl9jb3Vu
dF9tYXRjaGVzKCkgaXMgYSBwcm9ncmFtbWluZyBlcnJvci4KKyAqLwordm9pZCB3ZWJraXRfZmlu
ZF9jb250cm9sbGVyX3NlYXJjaF9wcmV2aW91cyhXZWJLaXRGaW5kQ29udHJvbGxlciogZmluZENv
bnRyb2xsZXIpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfRklORF9DT05UUk9M
TEVSKGZpbmRDb250cm9sbGVyKSk7CisKKyAgICBmaW5kQ29udHJvbGxlci0+cHJpdi0+ZmluZE9w
dGlvbnMgPSBmaW5kQ29udHJvbGxlci0+cHJpdi0+ZmluZE9wdGlvbnMgfCBXRUJLSVRfRklORF9P
UFRJT05TX0JBQ0tXQVJEUzsKKyAgICB3ZWJLaXRGaW5kQ29udHJvbGxlclBlcmZvcm0oZmluZENv
bnRyb2xsZXIsIEZpbmRPcGVyYXRpb24pOworfQorCisvKioKKyAqIHdlYmtpdF9maW5kX2NvbnRy
b2xsZXJfY291bnRfbWF0Y2hlczoKKyAqIEBmaW5kX2NvbnRyb2xsZXI6IHRoZSAjV2ViS2l0Rmlu
ZENvbnRyb2xsZXIKKyAqIEBzZWFyY2hfdGV4dDogdGhlIHRleHQgdG8gbG9vayBmb3IKKyAqIEBm
aW5kX29wdGlvbnM6IGEgYml0bWFzayB3aXRoIHRoZSAjV2ViS2l0RmluZE9wdGlvbnMgdXNlZCBp
biB0aGUgc2VhcmNoCisgKiBAbWF4X21hdGNoX2NvdW50OiB0aGUgbWF4aW11bSBudW1iZXIgb2Yg
bWF0Y2hlcyBhbGxvd2VkIGluIHRoZSBzZWFyY2gKKyAqCisgKiBDb3VudHMgdGhlIG51bWJlciBv
ZiBtYXRjaGVzIGZvciBAc2VhcmNoX3RleHQgZm91bmQgaW4gdGhlCisgKiAjV2ViS2l0V2ViVmll
dyB3aXRoIHRoZSBwcm92aWRlZCBAZmluZF9vcHRpb25zLiBUaGUgbnVtYmVyIG9mCisgKiBtYXRj
aGVzIHdpbGwgYmUgcHJvdmlkZWQgYnkgdGhlCisgKiBXZWJLaXRGaW5kQ29udHJvbGxlcjo6Y291
bnRlZC1tYXRjaGVzIHNpZ25hbC4KKyAqLwordm9pZCB3ZWJraXRfZmluZF9jb250cm9sbGVyX2Nv
dW50X21hdGNoZXMoV2ViS2l0RmluZENvbnRyb2xsZXIqIGZpbmRDb250cm9sbGVyLCBjb25zdCBn
Y2hhciogc2VhcmNoVGV4dCwgZ3VpbnQzMiBmaW5kT3B0aW9ucywgZ3VpbnQgbWF4TWF0Y2hDb3Vu
dCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19GSU5EX0NPTlRST0xMRVIoZmlu
ZENvbnRyb2xsZXIpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHNlYXJjaFRleHQpOworCisgICAg
d2ViS2l0RmluZENvbnRyb2xsZXJTZXRTZWFyY2hEYXRhKGZpbmRDb250cm9sbGVyLCBzZWFyY2hU
ZXh0LCBmaW5kT3B0aW9ucywgbWF4TWF0Y2hDb3VudCk7CisgICAgd2ViS2l0RmluZENvbnRyb2xs
ZXJQZXJmb3JtKGZpbmRDb250cm9sbGVyLCBDb3VudE9wZXJhdGlvbik7Cit9CisKKy8qKgorICog
d2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfZmluaXNoOgorICogQGZpbmRfY29udHJvbGxl
cjogYSAjV2ViS2l0RmluZENvbnRyb2xsZXIKKyAqCisgKiBGaW5pc2hlcyBhIGZpbmQgb3BlcmF0
aW9uIHN0YXJ0ZWQgYnkKKyAqIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoKCkuIEl0IHdp
bGwgYmFzaWNhbGx5IHVuaGlnaGxpZ2h0CisgKiBldmVyeSB0ZXh0IG1hdGNoIGZvdW5kLgorICov
Cit2b2lkIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX2ZpbmlzaChXZWJLaXRGaW5kQ29u
dHJvbGxlciogZmluZENvbnRyb2xsZXIpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
SVNfRklORF9DT05UUk9MTEVSKGZpbmRDb250cm9sbGVyKSk7CisKKyAgICBXS1BhZ2VIaWRlRmlu
ZFVJKGdldFdLUGFnZUZyb21XZWJLaXRXZWJWaWV3KGZpbmRDb250cm9sbGVyLT5wcml2LT53ZWJW
aWV3KSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRGaW5kQ29udHJvbGxlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0RmluZENvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYTQ3Zjk5ZDRiNjZiMjkxMTlhZWU4
YWUwNDJkZWZkYTRmZWUzYzNjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0RmluZENvbnRyb2xsZXIuaApAQCAtMCwwICsxLDExNiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VC
S0lUMl9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChXRUJLSVQyX0NPTVBJTEFUSU9OKQorI2Vycm9y
ICJPbmx5IDx3ZWJraXQyL3dlYmtpdDIuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNl
bmRpZgorCisjaWZuZGVmIFdlYktpdEZpbmRDb250cm9sbGVyX2gKKyNkZWZpbmUgV2ViS2l0Rmlu
ZENvbnRyb2xsZXJfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJr
aXQyL1dlYktpdERlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9U
WVBFX0ZJTkRfQ09OVFJPTExFUiAgICAgICAgICAgICh3ZWJraXRfZmluZF9jb250cm9sbGVyX2dl
dF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9GSU5EX0NPTlRST0xMRVIob2JqKSAgICAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfRklORF9DT05U
Uk9MTEVSLCBXZWJLaXRGaW5kQ29udHJvbGxlcikpCisjZGVmaW5lIFdFQktJVF9GSU5EX0NPTlRS
T0xMRVJfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAg
V0VCS0lUX1RZUEVfRklORF9DT05UUk9MTEVSLCBXZWJLaXRGaW5kQ29udHJvbGxlckNsYXNzKSkK
KyNkZWZpbmUgV0VCS0lUX0lTX0ZJTkRfQ09OVFJPTExFUihvYmopICAgICAgICAgKEdfVFlQRV9D
SEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9GSU5EX0NPTlRST0xMRVIpKQor
I2RlZmluZSBXRUJLSVRfSVNfRklORF9DT05UUk9MTEVSX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NI
RUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0ZJTkRfQ09OVFJPTExFUikpCisj
ZGVmaW5lIFdFQktJVF9GSU5EX0NPTlRST0xMRVJfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5T
VEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfRklORF9DT05UUk9MTEVSLCBXZWJL
aXRGaW5kQ29udHJvbGxlckNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEZpbmRDb250
cm9sbGVyUHJpdmF0ZSBXZWJLaXRGaW5kQ29udHJvbGxlclByaXZhdGU7Cit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0RmluZENvbnRyb2xsZXJDbGFzcyAgIFdlYktpdEZpbmRDb250cm9sbGVyQ2xhc3M7
CisKKy8qKgorICogV2ViS2l0RmluZE9wdGlvbnM6CisgKiBAV0VCS0lUX0ZJTkRfT1BUSU9OU19O
T05FOiBubyBzZWFyY2ggZmxhZ3MsIHRoaXMgbWVhbnMgYSBjYXNlCisgKiAgIHNlbnNpdGl2ZSwg
bm8gd3JhcCwgZm9yd2FyZCBvbmx5IHNlYXJjaC4KKyAqIEBXRUJLSVRfRklORF9PUFRJT05TX0NB
U0VfSU5TRU5TSVRJVkU6IGNhc2UgaW5zZW5zaXRpdmUgc2VhcmNoLgorICogQFdFQktJVF9GSU5E
X09QVElPTlNfQVRfV09SRF9TVEFSVFM6IHNlYXJjaCB0ZXh0IG9ubHkgYXQgdGhlCisgKiAgIGJl
Z2luaW5nIG9mIHRoZSB3b3Jkcy4KKyAqIEBXRUJLSVRfRklORF9PUFRJT05TX1RSRUFUX01FRElB
TF9DQVBJVEFMX0FTX1dPUkRfU1RBUlQ6IHRyZWF0CisgKiAgIGNhcGl0YWwgbGV0dGVycyBpbiB0
aGUgbWlkZGxlIG9mIHdvcmRzIGFzIHdvcmQgc3RhcnQuCisgKiBAV0VCS0lUX0ZJTkRfT1BUSU9O
U19CQUNLV0FSRFM6IHNlYXJjaCBiYWNrd2FyZHMuCisgKiBAV0VCS0lUX0ZJTkRfT1BUSU9OU19X
UkFQX0FST1VORDogaWYgbm90IHByZXNlbnQgc2VhcmNoIHdpbGwgc3RvcAorICogICBhdCB0aGUg
ZW5kIG9mIHRoZSBkb2N1bWVudC4KKyAqCisgKiBFbnVtIHZhbHVlcyB1c2VkIHRvIHNwZWNpZnkg
c2VhcmNoIG9wdGlvbnMuCisgKi8KK3R5cGVkZWYgZW51bSB7CisgIFdFQktJVF9GSU5EX09QVElP
TlNfTk9ORSwKKworICBXRUJLSVRfRklORF9PUFRJT05TX0NBU0VfSU5TRU5TSVRJVkUgPSAgICAg
ICAgICAgICAgICAgICAxIDw8IDAsCisgIFdFQktJVF9GSU5EX09QVElPTlNfQVRfV09SRF9TVEFS
VFMgPSAgICAgICAgICAgICAgICAgICAgIDEgPDwgMSwKKyAgV0VCS0lUX0ZJTkRfT1BUSU9OU19U
UkVBVF9NRURJQUxfQ0FQSVRBTF9BU19XT1JEX1NUQVJUID0gMSA8PCAyLAorICBXRUJLSVRfRklO
RF9PUFRJT05TX0JBQ0tXQVJEUyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAxIDw8IDMsCisg
IFdFQktJVF9GSU5EX09QVElPTlNfV1JBUF9BUk9VTkQgPSAgICAgICAgICAgICAgICAgICAgICAg
IDEgPDwgNCwKK30gV2ViS2l0RmluZE9wdGlvbnM7CisKK3N0cnVjdCBfV2ViS2l0RmluZENvbnRy
b2xsZXIgeworICAgIEdPYmplY3QgcGFyZW50OworCisgIC8qPCBwcml2YXRlID4qLworICBXZWJL
aXRGaW5kQ29udHJvbGxlclByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdEZpbmRD
b250cm9sbGVyQ2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitX
RUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF90eXBlICAgICAgICAg
ICAgKHZvaWQpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2Vh
cmNoICAgICAgICAgICAgICAoV2ViS2l0RmluZENvbnRyb2xsZXIgKmZpbmRfY29udHJvbGxlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIg
ICAgICAgICAgKnNlYXJjaF90ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBndWludDMyICAgICAgICAgICAgICAgZmluZF9vcHRpb25zLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgICAg
bWF4X21hdGNoX2NvdW50KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfZmluZF9jb250cm9s
bGVyX3NlYXJjaF9maW5pc2ggICAgICAgKFdlYktpdEZpbmRDb250cm9sbGVyICpmaW5kX2NvbnRy
b2xsZXIpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNo
X25leHQgICAgICAgICAoV2ViS2l0RmluZENvbnRyb2xsZXIgKmZpbmRfY29udHJvbGxlcik7CisK
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfcHJldmlvdXMg
ICAgIChXZWJLaXRGaW5kQ29udHJvbGxlciAqZmluZF9jb250cm9sbGVyKTsKKworV0VCS0lUX0FQ
SSB2b2lkCit3ZWJraXRfZmluZF9jb250cm9sbGVyX2NvdW50X21hdGNoZXMgICAgICAgKFdlYktp
dEZpbmRDb250cm9sbGVyICpmaW5kX2NvbnRyb2xsZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICpzZWFyY2hfdGV4dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQzMiAgICAg
ICAgICAgICAgIGZpbmRfb3B0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgICAgIG1heF9tYXRjaF9jb3VudCk7CisKK1dF
QktJVF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfc2VhcmNo
X3RleHQgICAgIChXZWJLaXRGaW5kQ29udHJvbGxlciAqZmluZF9jb250cm9sbGVyKTsKKworV0VC
S0lUX0FQSSBndWludDMyCit3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9vcHRpb25zICAgICAg
ICAgKFdlYktpdEZpbmRDb250cm9sbGVyICpmaW5kX2NvbnRyb2xsZXIpOworCitXRUJLSVRfQVBJ
IGd1aW50Cit3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9tYXhfbWF0Y2hfY291bnQgKFdlYktp
dEZpbmRDb250cm9sbGVyICpmaW5kX2NvbnRyb2xsZXIpOworCitXRUJLSVRfQVBJIFdlYktpdFdl
YlZpZXcgKgord2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfd2ViX3ZpZXcgICAgICAgIChXZWJL
aXRGaW5kQ29udHJvbGxlciAqZmluZF9jb250cm9sbGVyKTsKKworR19FTkRfREVDTFMKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQ
cml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRl
LmgKaW5kZXggNDNkMjZjYzg1NmZjYTMyYTFjNThmOTg4ODczZjNiMDNlYWU5NDYwOS4uZTc4NWMz
NjM4MzUwZDg0YTgwOGMwZmFkNTBlZTgyYmIwNjE2NDY3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaApAQCAtMjgsNyArMjgsOSBAQAog
CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0FQSUNhc3QuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLRG93
bmxvYWQuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLRmluZE9wdGlvbnMuaD4KICNpbmNsdWRlIDxX
ZWJLaXQyL1dLUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS1N0cmluZy5oPgogI2lu
Y2x1ZGUgPFdlYktpdDIvV2ViS2l0Mi5oPgogI2luY2x1ZGUgPGdsaWIuaD4KICNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3LmNwcAppbmRleCBiZTU5MGZmMzMxYmM4MDU5ZDM3MWFiYzBjNWU0MzUz
YTE2YmVjODJlLi4xYTczYzIyYzg2MWNlZTBjNDUyYTg4YWQ5NmIzNTcwOTliY2M2NDczIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNw
cApAQCAtOTIsNiArOTIsOCBAQCBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdQcml2YXRlIHsKIAogICAg
IEdSZWZQdHI8V2ViS2l0SGl0VGVzdFJlc3VsdD4gbW91c2VUYXJnZXRIaXRUZXN0UmVzdWx0Owog
ICAgIHVuc2lnbmVkIG1vdXNlVGFyZ2V0TW9kaWZpZXJzOworCisgICAgR1JlZlB0cjxXZWJLaXRG
aW5kQ29udHJvbGxlcj4gZmluZENvbnRyb2xsZXI7CiB9OwogCiBzdGF0aWMgZ3VpbnQgc2lnbmFs
c1tMQVNUX1NJR05BTF0gPSB7IDAsIH07CkBAIC0xMzYzLDcgKzEzNjUsNiBAQCBnZG91YmxlIHdl
YmtpdF93ZWJfdmlld19nZXRfem9vbV9sZXZlbChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAg
IHJldHVybiBXS1BhZ2VHZXRQYWdlWm9vbUZhY3Rvcih3a1BhZ2UpOwogfQogCi0KIHN0YXRpYyB2
b2lkIGRpZFZhbGlkYXRlQ29tbWFuZChXS1N0cmluZ1JlZiBjb21tYW5kLCBib29sIGlzRW5hYmxl
ZCwgaW50MzJfdCBzdGF0ZSwgV0tFcnJvclJlZiwgdm9pZCogY29udGV4dCkKIHsKICAgICBHUmVm
UHRyPEdTaW1wbGVBc3luY1Jlc3VsdD4gcmVzdWx0ID0gYWRvcHRHUmVmKEdfU0lNUExFX0FTWU5D
X1JFU1VMVChjb250ZXh0KSk7CkBAIC0xNDM2LDMgKzE0MzcsMjMgQEAgdm9pZCB3ZWJraXRfd2Vi
X3ZpZXdfZXhlY3V0ZV9lZGl0aW5nX2NvbW1hbmQoV2ViS2l0V2ViVmlldyogd2ViVmlldywgY29u
c3QgY2hhcioKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tDb21tYW5kKEFkb3B0V0ss
IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGNvbW1hbmQpKTsKICAgICBXS1BhZ2VFeGVj
dXRlQ29tbWFuZCh0b0FQSShwYWdlKSwgd2tDb21tYW5kLmdldCgpKTsKIH0KKworLyoqCisgKiB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2ZpbmRfY29udHJvbGxlcjoKKyAqIEB3ZWJfdmlldzogdGhlICNX
ZWJLaXRXZWJWaWV3CisgKgorICogR2V0cyB0aGUgI1dlYktpdEZpbmRDb250cm9sbGVyIHRoYXQg
d2lsbCBhbGxvdyB0aGUgY2FsbGVyIHRvIHF1ZXJ5CisgKiB0aGUgI1dlYktpdFdlYlZpZXcgZm9y
IHRoZSB0ZXh0IHRvIGxvb2sgZm9yLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTog
dGhlICNXZWJLaXRGaW5kQ29udHJvbGxlciBhc3NvY2lhdGVkIHRvCisgKiB0aGlzIHBhcnRpY3Vs
YXIgI1dlYktpdFdlYlZpZXcuCisgKi8KK1dlYktpdEZpbmRDb250cm9sbGVyKiB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2ZpbmRfY29udHJvbGxlcihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAg
IGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwgMCk7CisK
KyAgICBpZiAoIXdlYlZpZXctPnByaXYtPmZpbmRDb250cm9sbGVyKQorICAgICAgICB3ZWJWaWV3
LT5wcml2LT5maW5kQ29udHJvbGxlciA9IGFkb3B0R1JlZihXRUJLSVRfRklORF9DT05UUk9MTEVS
KGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9GSU5EX0NPTlRST0xMRVIsICJ3ZWItdmlldyIsIHdl
YlZpZXcsIE5VTEwpKSk7CisKKyAgICByZXR1cm4gd2ViVmlldy0+cHJpdi0+ZmluZENvbnRyb2xs
ZXIuZ2V0KCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJWaWV3LmgKaW5kZXggYTFiMjE0MjBiYzk3M2NmNTY3MGNkOWIzOWEyODJkMWFmZjFiZTAz
NC4uYjZlOGIwY2U3MDhiNDNmNzM2NzhhZjc1ODA0OTNkODI3NWIwOWQ1MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaApAQCAtMzAsNiAr
MzAsNyBAQAogCiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRCYWNrRm9yd2FyZExpc3QuaD4KICNp
bmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktp
dEZpbmRDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRIaXRUZXN0UmVzdWx0
Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRTZXR0aW5ncy5oPgogI2luY2x1ZGUgPHdlYmtp
dDIvV2ViS2l0VVJJUmVxdWVzdC5oPgpAQCAtMjY1LDYgKzI2NiwxMCBAQCB3ZWJraXRfd2ViX3Zp
ZXdfY2FuX2V4ZWN1dGVfZWRpdGluZ19jb21tYW5kX2ZpbmlzaCAoV2ViS2l0V2ViVmlldyAgICAg
ICAgICAgICAqdwogV0VCS0lUX0FQSSB2b2lkCiB3ZWJraXRfd2ViX3ZpZXdfZXhlY3V0ZV9lZGl0
aW5nX2NvbW1hbmQgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3Zp
ZXcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgZ2NoYXIgICAgICAgICAgICAgICAqY29tbWFuZCk7CisKK1dFQktJVF9BUEkgV2ViS2l0
RmluZENvbnRyb2xsZXIgKgord2Via2l0X3dlYl92aWV3X2dldF9maW5kX2NvbnRyb2xsZXIgICAg
ICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3KTsKKwogR19F
TkRfREVDTFMKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbAppbmRleCA1Y2Q4NTlkYWRlMWVk
NTUyYmFmNWI4MjE1Yjc5YjRjY2I5YjgyNTY0Li40YTljYzc5OGMzZDEzNGExYjBmY2Q0YWFmYWUy
OTBkNWI3M2JhOGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKQEAgLTI3LDYgKzI3LDcgQEAKICAg
ICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0SGl0VGVzdFJlc3VsdC54bWwiLz4KICAgICA8
eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0UHJpbnRPcGVyYXRpb24ueG1sIi8+CiAgICAgPHhp
OmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdEVycm9yLnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhy
ZWY9InhtbC9XZWJLaXRGaW5kQ29udHJvbGxlci54bWwiLz4KICAgPC9jaGFwdGVyPgogCiAgIDxp
bmRleCBpZD0iaW5kZXgtYWxsIj4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CmluZGV4IDViZmMx
MjliMmYxMjBjODVlMzJhYzAwOTNiY2Y0ODVkYmJiYjI4ODkuLjMwMTkxYjEzMWYwNWU0NDVlNmJh
OGNkNWRhMjgwNTI1M2FmNWI4MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dApAQCAtODYs
NiArODYsNyBAQCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3pvb21fbGV2ZWwKIHdlYmtpdF93ZWJfdmll
d19jYW5fZXhlY3V0ZV9lZGl0aW5nX2NvbW1hbmQKIHdlYmtpdF93ZWJfdmlld19jYW5fZXhlY3V0
ZV9lZGl0aW5nX2NvbW1hbmRfZmluaXNoCiB3ZWJraXRfd2ViX3ZpZXdfZXhlY3V0ZV9lZGl0aW5n
X2NvbW1hbmQKK3dlYmtpdF93ZWJfdmlld19nZXRfZmluZF9jb250cm9sbGVyCiAKIDxTVUJTRUNU
SU9OIFN0YW5kYXJkPgogV2ViS2l0V2ViVmlld0NsYXNzCkBAIC00NjEsMyArNDYyLDMwIEBAIHdl
YmtpdF9wb2xpY3lfZXJyb3JfcXVhcmsKIHdlYmtpdF9kb3dubG9hZF9lcnJvcl9xdWFyawogPC9T
RUNUSU9OPgogCis8U0VDVElPTj4KKzxGSUxFPldlYktpdEZpbmRDb250cm9sbGVyPC9GSUxFPgor
V2ViS2l0RmluZENvbnRyb2xsZXIKK1dlYktpdEZpbmRPcHRpb25zCit3ZWJraXRfZmluZF9jb250
cm9sbGVyX3NlYXJjaAord2Via2l0X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfZmluaXNoCit3ZWJr
aXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9uZXh0Cit3ZWJraXRfZmluZF9jb250cm9sbGVyX3Nl
YXJjaF9wcmV2aW91cword2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfc2VhcmNoX3RleHQKK3dl
YmtpdF9maW5kX2NvbnRyb2xsZXJfY291bnRfbWF0Y2hlcword2Via2l0X2ZpbmRfY29udHJvbGxl
cl9nZXRfb3B0aW9ucword2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfbWF4X21hdGNoX2NvdW50
Cit3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF93ZWJfdmlldworCis8U1VCU0VDVElPTiBTdGFu
ZGFyZD4KK1dlYktpdEZpbmRDb250cm9sbGVyQ2xhc3MKK1dFQktJVF9UWVBFX0ZJTkRfQ09OVFJP
TExFUgorV0VCS0lUX0ZJTkRfQ09OVFJPTExFUgorV0VCS0lUX0lTX0ZJTkRfQ09OVFJPTExFUgor
V0VCS0lUX0ZJTkRfQ09OVFJPTExFUl9DTEFTUworV0VCS0lUX0lTX0ZJTkRfQ09OVFJPTExFUl9D
TEFTUworV0VCS0lUX0ZJTkRfQ09OVFJPTExFUl9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJp
dmF0ZT4KK1dlYktpdEZpbmRDb250cm9sbGVyUHJpdmF0ZQord2Via2l0X2ZpbmRfY29udHJvbGxl
cl9nZXRfdHlwZQorPC9TRUNUSU9OPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzCmluZGV4IGNiYTJkZjQyYzNkNTI0NDMw
NWVlZTQ2MTZiOWU3ODM1YWZkMWY2MmYuLjJlMGY1MDAyY2FlNzNiODI1OTY0NjhkZTFhZjY3MGFk
NzU5MTVkNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2Rv
Y3Mvd2Via2l0Mmd0ay50eXBlcworKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9kb2NzL3dlYmtpdDJndGsudHlwZXMKQEAgLTksNCArOSw0IEBAIHdlYmtpdF91cmlfcmVzcG9u
c2VfZ2V0X3R5cGUKIHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdHlwZQogd2Via2l0X3dpbmRvd19w
cm9wZXJ0aWVzX2dldF90eXBlCiB3ZWJraXRfZG93bmxvYWRfZ2V0X3R5cGUKLQord2Via2l0X2Zp
bmRfY29udHJvbGxlcl9nZXRfdHlwZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbQppbmRleCAzNWVjZTY4NDVmNDQ0MzFjYzEx
ZGIwODQ1YmExYmQ0OGY1MjNjYjBiLi42YWRiMmQ1Y2QxMTMxY2EyNWY5Yzg3NzIxMTQwYWQ4MzY0
OTQzNjdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9HTlVtYWtlZmlsZS5hbQpAQCAtMSwxNSArMSwxNiBAQAogaWYgRU5BQkxFX1dFQktJVDIK
IAogVEVTVF9QUk9HUyArPSBcCi0JUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRX
ZWJDb250ZXh0IFwKLQlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFdlYlZpZXcg
XAotCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0TG9hZGVyQ2xpZW50IFwKLQlQcm9ncmFt
cy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFNldHRpbmdzIFwKIAlQcm9ncmFtcy9XZWJLaXQy
QVBJVGVzdHMvVGVzdEJhY2tGb3J3YXJkTGlzdCBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3Rz
L1Rlc3REb3dubG9hZHMgXAorCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0TG9hZGVyQ2xp
ZW50IFwKKwlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFByaW50aW5nIFwKKwlQcm9ncmFt
cy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdEZpbmRDb250cm9sbGVyIFwKIAlQcm9ncmFtcy9X
ZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFBvbGljeUNsaWVudCBcCi0JUHJvZ3JhbXMvV2ViS2l0
MkFQSVRlc3RzL1Rlc3RXZWJWaWV3RWRpdG9yIFwKLQlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMv
VGVzdFByaW50aW5nCisJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRTZXR0aW5n
cyBcCisJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRXZWJDb250ZXh0IFwKKwlQ
cm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFdlYlZpZXcgXAorCVByb2dyYW1zL1dl
YktpdDJBUElUZXN0cy9UZXN0V2ViVmlld0VkaXRvcgogCiBub2luc3RfUFJPR1JBTVMgKz0gJChU
RVNUX1BST0dTKQogCkBAIC0xMjgsNCArMTI5LDEwIEBAIFByb2dyYW1zX1dlYktpdDJBUElUZXN0
c19UZXN0UHJpbnRpbmdfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpICQoR1RL
CiBQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFByaW50aW5nX0xEQUREID0gJCh3ZWJraXQy
X3Rlc3RzX2xkYWRkKSAkKEdUS19VTklYX1BSSU5USU5HX0xJQlMpCiBQcm9ncmFtc19XZWJLaXQy
QVBJVGVzdHNfVGVzdFByaW50aW5nX0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykK
IAorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlcl9TT1VS
Q0VTID0gXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJL
aXRGaW5kQ29udHJvbGxlci5jcHAKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViS2l0
RmluZENvbnRyb2xsZXJfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpCitQcm9n
cmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYktpdEZpbmRDb250cm9sbGVyX0xEQUREID0gJCh3
ZWJraXQyX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRG
aW5kQ29udHJvbGxlcl9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCisKIGVuZGlm
ICMgRU5BQkxFX1dFQktJVDIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0RmluZENvbnRyb2xsZXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmJhMzIwYzNjZWM1MWJlZjNkYzY2Njk0NDk5M2JkMmRkODAwNTI1Y2UKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0
V2ViS2l0RmluZENvbnRyb2xsZXIuY3BwCkBAIC0wLDAgKzEsMzg3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRl
ICJMb2FkVHJhY2tpbmdUZXN0LmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHdl
YmtpdDIvd2Via2l0Mi5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKworc3Rh
dGljIGNvbnN0IGNoYXIqIHRlc3RTdHJpbmcgPSAiPGh0bWw+PGJvZHk+Zmlyc3QgdGVzdGluZyBz
ZWNvbmQgdGVzdGluZyBzZWNvbmRIYWxmPC9ib2R5PjwvaHRtbD4iOworCitjbGFzcyBGaW5kQ29u
dHJvbGxlclRlc3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElC
X1RFU1RfRklYVFVSRShGaW5kQ29udHJvbGxlclRlc3QpOworCisgICAgRmluZENvbnRyb2xsZXJU
ZXN0KCkKKyAgICAgICAgOiBtX3J1bkZpbmRVbnRpbENvbXBsZXRpb24oZmFsc2UpCisgICAgICAg
ICwgbV9maW5kQ29udHJvbGxlcih3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ZpbmRfY29udHJvbGxlciht
X3dlYlZpZXcpKQorICAgIHsKKyAgICAgICAgYXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RG
aW5pc2hlcyhHX09CSkVDVChtX2ZpbmRDb250cm9sbGVyLmdldCgpKSk7CisgICAgfQorCisgICAg
fkZpbmRDb250cm9sbGVyVGVzdCgpCisgICAgeworICAgICAgICBpZiAobV9maW5kQ29udHJvbGxl
cikKKyAgICAgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX2Zp
bmRDb250cm9sbGVyLmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlz
KTsKKyAgICB9CisKKyAgICB2b2lkIGZpbmQoY29uc3QgY2hhciogc2VhcmNoVGV4dCwgZ3VpbnQz
MiBmaW5kT3B0aW9ucywgZ3VpbnQgbWF4TWF0Y2hDb3VudCkKKyAgICB7CisgICAgICAgIC8vIER1
ZSB0byBodHRwOi8vd2Vha2l0Lm9yZy9iLzc2NTIyIHdlIGhhdmUgdG8gYXJ0aWZpY2lhbGx5Cisg
ICAgICAgIC8vIGFkZCBoZXJlIHRoZSBzaG93IG92ZXJsYXkgb3B0aW9uICh0aGF0IHdlIGRvIG5v
dCBldmVuCisgICAgICAgIC8vIGV4cG9zZSBpbiB0aGUgQVBJKSB0byBnZXQgdGhlIERpZEZpbmRT
dHJpbmcgbWVzc3NhZ2UKKyAgICAgICAgLy8gaXNzdWVkLiBSZW1vdmUgdGhpcyBvbmNlIDc2NTIy
IGlzIGZpeGVkLgorICAgICAgICBmaW5kT3B0aW9ucyA9IGZpbmRPcHRpb25zIHwgMSA8PCA1Owor
CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9maW5kQ29udHJvbGxlci5nZXQoKSwgImZvdW5k
LXRleHQiLCBHX0NBTExCQUNLKGZvdW5kVGV4dENhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdf
c2lnbmFsX2Nvbm5lY3QobV9maW5kQ29udHJvbGxlci5nZXQoKSwgImZhaWxlZC10by1maW5kLXRl
eHQiLCBHX0NBTExCQUNLKGZhaWxlZFRvRmluZFRleHRDYWxsYmFjayksIHRoaXMpOworICAgICAg
ICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaChtX2ZpbmRDb250cm9sbGVyLmdldCgpLCBz
ZWFyY2hUZXh0LCBmaW5kT3B0aW9ucywgbWF4TWF0Y2hDb3VudCk7CisgICAgfQorCisgICAgdm9p
ZCBjb3VudChjb25zdCBjaGFyKiBzZWFyY2hUZXh0LCBndWludDMyIGZpbmRPcHRpb25zLCBndWlu
dCBtYXhNYXRjaENvdW50KQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX2ZpbmRD
b250cm9sbGVyLmdldCgpLCAiY291bnRlZC1tYXRjaGVzIiwgR19DQUxMQkFDSyhjb3VudGVkTWF0
Y2hlc0NhbGxiYWNrKSwgdGhpcyk7CisgICAgICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfY291
bnRfbWF0Y2hlcyhtX2ZpbmRDb250cm9sbGVyLmdldCgpLCBzZWFyY2hUZXh0LCBmaW5kT3B0aW9u
cywgbWF4TWF0Y2hDb3VudCk7CisgICAgfQorCisgICAgdm9pZCB3YWl0VW50aWxGaW5kRmluaXNo
ZWQoKQorICAgIHsKKyAgICAgICAgbV9ydW5GaW5kVW50aWxDb21wbGV0aW9uID0gdHJ1ZTsKKyAg
ICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHZvaWQgd2Fp
dFVudGlsV2lkZ2V0RHJhd24oKQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdF9hZnRl
cihtX3dlYlZpZXcsICJkcmF3IiwgR19DQUxMQkFDSyh3ZWJWaWV3RHJhdyksIHRoaXMpOworICAg
ICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgfQorCisgICAgR1JlZlB0cjxX
ZWJLaXRGaW5kQ29udHJvbGxlcj4gbV9maW5kQ29udHJvbGxlcjsKKyAgICBib29sIG1fdGV4dEZv
dW5kOworICAgIHVuc2lnbmVkIG1fbWF0Y2hDb3VudDsKKworcHJpdmF0ZToKKyAgICBib29sIG1f
cnVuRmluZFVudGlsQ29tcGxldGlvbjsKKworICAgIHN0YXRpYyB2b2lkIHdlYlZpZXdEcmF3KEd0
a1dpZGdldCAqd2lkZ2V0LCBjYWlyb190ICpjciwgRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0KQor
ICAgIHsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICAg
ICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKHdpZGdldCwgR19TSUdOQUxf
TUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGVzdCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQg
Zm91bmRUZXh0Q2FsbGJhY2soV2ViS2l0RmluZENvbnRyb2xsZXIqLCBndWludCBtYXRjaENvdW50
LCBGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5tX3RleHRG
b3VuZCA9IHRydWU7CisgICAgICAgIHRlc3QtPm1fbWF0Y2hDb3VudCA9IG1hdGNoQ291bnQ7Cisg
ICAgICAgIGlmICh0ZXN0LT5tX3J1bkZpbmRVbnRpbENvbXBsZXRpb24pCisgICAgICAgICAgICBn
X21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHN0YXRpYyB2
b2lkIGZhaWxlZFRvRmluZFRleHRDYWxsYmFjayhXZWJLaXRGaW5kQ29udHJvbGxlciosIEZpbmRD
b250cm9sbGVyVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPm1fdGV4dEZvdW5kID0g
ZmFsc2U7CisgICAgICAgIGlmICh0ZXN0LT5tX3J1bkZpbmRVbnRpbENvbXBsZXRpb24pCisgICAg
ICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAgIH0KKworICAg
IHN0YXRpYyB2b2lkIGNvdW50ZWRNYXRjaGVzQ2FsbGJhY2soV2ViS2l0RmluZENvbnRyb2xsZXIq
LCBndWludCBtYXRjaENvdW50LCBGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QpCisgICAgeworICAg
ICAgICB0ZXN0LT5tX21hdGNoQ291bnQgPSBtYXRjaENvdW50OworICAgICAgICBpZiAodGVzdC0+
bV9ydW5GaW5kVW50aWxDb21wbGV0aW9uKQorICAgICAgICAgICAgZ19tYWluX2xvb3BfcXVpdCh0
ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRy
b2xsZXJUZXh0Rm91bmQoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQor
eworICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RTdHJpbmcsIDApOworICAgIHRlc3QtPndhaXRVbnRp
bExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+ZmluZCgidGVzdGluZyIsIFdFQktJVF9GSU5E
X09QVElPTlNfTk9ORSwgMSk7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisK
KyAgICBnX2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RG
aW5kQ29udHJvbGxlclRleHROb3RGb3VuZChGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0cmluZywgMCk7CisgICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5maW5kKCJub3RGb3VuZCIs
IFdFQktJVF9GSU5EX09QVElPTlNfTk9ORSwgMSk7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZp
bmlzaGVkKCk7CisKKyAgICBnX2Fzc2VydCghdGVzdC0+bV90ZXh0Rm91bmQpOworfQorCitzdGF0
aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJNYXRjaENvdW50KEZpbmRDb250cm9sbGVyVGVzdCog
dGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3RyaW5nLCAw
KTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3QtPmZpbmQo
InRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDIpOworICAgIHRlc3QtPndhaXRV
bnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09
IDIpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKK30KKworc3RhdGljIHZvaWQg
dGVzdEZpbmRDb250cm9sbGVyTWF4TWF0Y2hDb3VudChGaW5kQ29udHJvbGxlclRlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0cmluZywgMCk7Cisg
ICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5maW5kKCJ0ZXN0
aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAxKTsKKyAgICB0ZXN0LT53YWl0VW50aWxG
aW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3VudCA9PSBHX01B
WFVJTlQpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKK30KKworc3RhdGljIHZv
aWQgdGVzdEZpbmRDb250cm9sbGVyTmV4dChGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0cmluZywgMCk7CisgICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5maW5kKCJ0ZXN0aW5nIiwg
V0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmlu
aXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKKyAgICBnX2Fzc2Vy
dCh0ZXN0LT5tX21hdGNoQ291bnQgPT0gMik7CisKKyAgICB3ZWJraXRfZmluZF9jb250cm9sbGVy
X3NlYXJjaF9uZXh0KHRlc3QtPm1fZmluZENvbnRyb2xsZXIuZ2V0KCkpOworICAgIHRlc3QtPndh
aXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQp
OworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hDb3VudCA9PSAyKTsKKyAgICBnX2Fzc2VydCgh
KHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfZ2V0X29wdGlvbnModGVzdC0+bV9maW5kQ29udHJvbGxl
ci5nZXQoKSkgJiBXRUJLSVRfRklORF9PUFRJT05TX0JBQ0tXQVJEUykpOworCisgICAgd2Via2l0
X2ZpbmRfY29udHJvbGxlcl9zZWFyY2hfbmV4dCh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgp
KTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KCF0
ZXN0LT5tX3RleHRGb3VuZCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDIp
OworICAgIGdfYXNzZXJ0KCEod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfb3B0aW9ucyh0ZXN0
LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKSAmIFdFQktJVF9GSU5EX09QVElPTlNfQkFDS1dBUkRT
KSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RGaW5kQ29udHJvbGxlclByZXZpb3VzKEZpbmRDb250
cm9sbGVyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCh0
ZXN0U3RyaW5nLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAg
IHRlc3QtPmZpbmQoInRlc3RpbmciLCBXRUJLSVRfRklORF9PUFRJT05TX05PTkUsIDIpOworICAg
IHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV9t
YXRjaENvdW50ID09IDIpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKKworICAg
IHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX25leHQodGVzdC0+bV9maW5kQ29udHJvbGxl
ci5nZXQoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fz
c2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50
ID09IDIpOworICAgIGdfYXNzZXJ0KCEod2Via2l0X2ZpbmRfY29udHJvbGxlcl9nZXRfb3B0aW9u
cyh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKSAmIFdFQktJVF9GSU5EX09QVElPTlNfQkFD
S1dBUkRTKSk7CisKKyAgICB3ZWJraXRfZmluZF9jb250cm9sbGVyX3NlYXJjaF9wcmV2aW91cyh0
ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmlu
aXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fdGV4dEZvdW5kKTsKKyAgICBnX2Fzc2Vy
dCh0ZXN0LT5tX21hdGNoQ291bnQgPT0gMik7CisgICAgZ19hc3NlcnQod2Via2l0X2ZpbmRfY29u
dHJvbGxlcl9nZXRfb3B0aW9ucyh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKSAmIFdFQktJ
VF9GSU5EX09QVElPTlNfQkFDS1dBUkRTKTsKK30KKworc3RhdGljIHZvaWQgdGVzdEZpbmRDb250
cm9sbGVyQ291bnRlZE1hdGNoZXMoRmluZENvbnRyb2xsZXJUZXN0KiB0ZXN0LCBnY29uc3Rwb2lu
dGVyKQoreworICAgIHRlc3QtPmxvYWRIdG1sKHRlc3RTdHJpbmcsIDApOworICAgIHRlc3QtPndh
aXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+Y291bnQoInRlc3RpbmciLCBXRUJL
SVRfRklORF9PUFRJT05TX05PTkUsIDIpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hl
ZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV9tYXRjaENvdW50ID09IDIpOworCisgICAgdGVz
dC0+Y291bnQoImZpcnN0IiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05FLCAyKTsKKyAgICB0ZXN0
LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbWF0Y2hD
b3VudCA9PSAxKTsKKworICAgIHRlc3QtPmNvdW50KCJub3RGb3VuZCIsIFdFQktJVF9GSU5EX09Q
VElPTlNfTk9ORSwgMik7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAg
ICBnX2Fzc2VydCghdGVzdC0+bV9tYXRjaENvdW50KTsKK30KKworc3RhdGljIHZvaWQgdGVzdEZp
bmRDb250cm9sbGVyT3B0aW9ucyhGaW5kQ29udHJvbGxlclRlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwodGVzdFN0cmluZywgMCk7CisgICAgdGVzdC0+d2Fp
dFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5maW5kKCJUZXN0aW5nIiwgV0VCS0lU
X0ZJTkRfT1BUSU9OU19OT05FLCAyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQo
KTsKKworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX3RleHRGb3VuZCk7CisKKyAgICB0ZXN0LT5maW5k
KCJUZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19DQVNFX0lOU0VOU0lUSVZFLCAyKTsKKyAg
ICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KHRlc3QtPm1f
dGV4dEZvdW5kKTsKKworICAgIHRlc3QtPmZpbmQoImVzdGluZyIsIFdFQktJVF9GSU5EX09QVElP
TlNfTk9ORSwgMik7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBn
X2Fzc2VydCh0ZXN0LT5tX3RleHRGb3VuZCk7CisKKyAgICB0ZXN0LT5maW5kKCJlc3RpbmciLCBX
RUJLSVRfRklORF9PUFRJT05TX0FUX1dPUkRfU1RBUlRTLCAyKTsKKyAgICB0ZXN0LT53YWl0VW50
aWxGaW5kRmluaXNoZWQoKTsKKworICAgIGdfYXNzZXJ0KCF0ZXN0LT5tX3RleHRGb3VuZCk7CisK
KyAgICB0ZXN0LT5maW5kKCJIYWxmIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19BVF9XT1JEX1NUQVJU
UywgMik7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlzaGVkKCk7CisKKyAgICBnX2Fzc2Vy
dCghdGVzdC0+bV90ZXh0Rm91bmQpOworCisgICAgdGVzdC0+ZmluZCgiSGFsZiIsIFdFQktJVF9G
SU5EX09QVElPTlNfQVRfV09SRF9TVEFSVFMgfCBXRUJLSVRfRklORF9PUFRJT05TX1RSRUFUX01F
RElBTF9DQVBJVEFMX0FTX1dPUkRfU1RBUlQsIDIpOworICAgIHRlc3QtPndhaXRVbnRpbEZpbmRG
aW5pc2hlZCgpOworCisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworCisgICAgdGVz
dC0+ZmluZCgidGVzdGluZyIsIFdFQktJVF9GSU5EX09QVElPTlNfV1JBUF9BUk9VTkQsIDMpOwor
ICAgIHRlc3QtPndhaXRVbnRpbEZpbmRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1f
dGV4dEZvdW5kKTsKKworICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoX25leHQodGVz
dC0+bV9maW5kQ29udHJvbGxlci5nZXQoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsRmluZEZpbmlz
aGVkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV90ZXh0Rm91bmQpOworCisgICAgd2Via2l0X2Zp
bmRfY29udHJvbGxlcl9zZWFyY2hfbmV4dCh0ZXN0LT5tX2ZpbmRDb250cm9sbGVyLmdldCgpKTsK
KyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5t
X3RleHRGb3VuZCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBnZGtQaXhidWZFcXVhbChHZGtQaXhi
dWYqIGZpcnN0UGl4YnVmLCBHZGtQaXhidWYqIHNlY29uZFBpeGJ1ZikKK3sKKyAgICBpZiAoZ2Rr
X3BpeGJ1Zl9nZXRfYml0c19wZXJfc2FtcGxlKGZpcnN0UGl4YnVmKSAhPSBnZGtfcGl4YnVmX2dl
dF9iaXRzX3Blcl9zYW1wbGUoc2Vjb25kUGl4YnVmKQorICAgICAgICB8fCBnZGtfcGl4YnVmX2dl
dF9oYXNfYWxwaGEoZmlyc3RQaXhidWYpICE9IGdka19waXhidWZfZ2V0X2hhc19hbHBoYShzZWNv
bmRQaXhidWYpCisgICAgICAgIHx8IGdka19waXhidWZfZ2V0X2hlaWdodChmaXJzdFBpeGJ1Zikg
IT0gZ2RrX3BpeGJ1Zl9nZXRfaGVpZ2h0KHNlY29uZFBpeGJ1ZikKKyAgICAgICAgfHwgZ2RrX3Bp
eGJ1Zl9nZXRfbl9jaGFubmVscyhmaXJzdFBpeGJ1ZikgIT0gZ2RrX3BpeGJ1Zl9nZXRfbl9jaGFu
bmVscyhzZWNvbmRQaXhidWYpCisgICAgICAgIHx8IGdka19waXhidWZfZ2V0X3Jvd3N0cmlkZShm
aXJzdFBpeGJ1ZikgIT0gZ2RrX3BpeGJ1Zl9nZXRfcm93c3RyaWRlKHNlY29uZFBpeGJ1ZikKKyAg
ICAgICAgfHwgZ2RrX3BpeGJ1Zl9nZXRfd2lkdGgoZmlyc3RQaXhidWYpICE9IGdka19waXhidWZf
Z2V0X3dpZHRoKHNlY29uZFBpeGJ1ZikpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIGlu
dCBwaXhidWZSb3dzdHJpZGUgPSBnZGtfcGl4YnVmX2dldF9yb3dzdHJpZGUoZmlyc3RQaXhidWYp
OworICAgIGludCBwaXhidWZIZWlnaHQgPSBnZGtfcGl4YnVmX2dldF9oZWlnaHQoZmlyc3RQaXhi
dWYpOworICAgIGludCBwaXhidWZXaWR0aCA9IGdka19waXhidWZfZ2V0X3dpZHRoKGZpcnN0UGl4
YnVmKTsKKyAgICBpbnQgbnVtYmVyT2ZDaGFubmVscyA9IGdka19waXhidWZfZ2V0X25fY2hhbm5l
bHMoZmlyc3RQaXhidWYpOworICAgIGludCBiaXRzUGVyU2FtcGxlID0gZ2RrX3BpeGJ1Zl9nZXRf
Yml0c19wZXJfc2FtcGxlKGZpcnN0UGl4YnVmKTsKKworICAgIC8vIExhc3Qgcm93IGNhbiBiZSBv
ZiBkaWZmZXJlbnQgbGVuZ3RoLiBUYWtlbiBmcm9tIGdkay1waXhidWYgZG9jdW1lbnRhdGlvbi4K
KyAgICBpbnQgdG90YWxMZW5naHQgPSAocGl4YnVmSGVpZ2h0IC0gMSkgKiBwaXhidWZSb3dzdHJp
ZGUgXAorICAgICAgICArIHBpeGJ1ZldpZHRoICogKChudW1iZXJPZkNoYW5uZWxzICogYml0c1Bl
clNhbXBsZSArIDcpIC8gOCk7CisKKyAgICBndWNoYXIqIGZpcnN0UGl4ZWxzID0gZ2RrX3BpeGJ1
Zl9nZXRfcGl4ZWxzKGZpcnN0UGl4YnVmKTsKKyAgICBndWNoYXIqIHNlY29uZFBpeGVscyA9IGdk
a19waXhidWZfZ2V0X3BpeGVscyhzZWNvbmRQaXhidWYpOworICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgdG90YWxMZW5naHQ7IGkrKykKKyAgICAgICAgaWYgKGZpcnN0UGl4ZWxzW2ldICE9IHNlY29u
ZFBpeGVsc1tpXSkKKyAgICAgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIHJldHVybiBUUlVF
OworfQorCitzdGF0aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJIaWRlKEZpbmRDb250cm9sbGVy
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkSHRtbCh0ZXN0U3Ry
aW5nLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKworICAgIHRlc3Qt
PnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCgpOworICAgIGludCBhbGxvY2F0ZWRIZWln
aHQgPSBndGtfd2lkZ2V0X2dldF9hbGxvY2F0ZWRfaGVpZ2h0KEdUS19XSURHRVQodGVzdC0+bV93
ZWJWaWV3KSk7CisgICAgaW50IGFsbG9jYXRlZFdpZHRoID0gZ3RrX3dpZGdldF9nZXRfYWxsb2Nh
dGVkX3dpZHRoKEdUS19XSURHRVQodGVzdC0+bV93ZWJWaWV3KSk7CisgICAgR2RrV2luZG93KiB3
ZWJWaWV3R2RrV2luZG93ID0gZ3RrX3dpZGdldF9nZXRfd2luZG93KEdUS19XSURHRVQodGVzdC0+
bV93ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQod2ViVmlld0dka1dpbmRvdyk7CisKKyAgICB0ZXN0
LT53YWl0VW50aWxXaWRnZXREcmF3bigpOworICAgIEdka1BpeGJ1Ziogb3JpZ2luYWxQaXhidWYg
PSBnZGtfcGl4YnVmX2dldF9mcm9tX3dpbmRvdyh3ZWJWaWV3R2RrV2luZG93LCAwLCAwLCBhbGxv
Y2F0ZWRIZWlnaHQsIGFsbG9jYXRlZFdpZHRoKTsKKyAgICBnX2Fzc2VydChvcmlnaW5hbFBpeGJ1
Zik7CisKKyAgICB0ZXN0LT5maW5kKCJ0ZXN0aW5nIiwgV0VCS0lUX0ZJTkRfT1BUSU9OU19OT05F
LCAxKTsKKyAgICB0ZXN0LT53YWl0VW50aWxGaW5kRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydCh0
ZXN0LT5tX3RleHRGb3VuZCk7CisKKyAgICB0ZXN0LT53YWl0VW50aWxXaWRnZXREcmF3bigpOwor
ICAgIEdka1BpeGJ1ZiogaGlnaGxpZ2h0UGl4YnVmID0gZ2RrX3BpeGJ1Zl9nZXRfZnJvbV93aW5k
b3cod2ViVmlld0dka1dpbmRvdywgMCwgMCwgYWxsb2NhdGVkSGVpZ2h0LCBhbGxvY2F0ZWRXaWR0
aCk7CisgICAgZ19hc3NlcnQoaGlnaGxpZ2h0UGl4YnVmKTsKKyAgICBnX2Fzc2VydCghZ2RrUGl4
YnVmRXF1YWwob3JpZ2luYWxQaXhidWYsIGhpZ2hsaWdodFBpeGJ1ZikpOworICAgIC8vIFJlcXVp
cmVzIGh0dHA6Ly93ZWJraXQub3JnL2IvNzc3NDcgdG8gYmUgZml4ZWQKKyAgICAvLyBXZWJLaXRG
aW5kQ29udHJvbGxlciogZmluZENvbnRyb2xsZXIgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ZpbmRf
Y29udHJvbGxlcih0ZXN0LT5tX3dlYlZpZXcpOworICAgIC8vIHdlYmtpdF9maW5kX2NvbnRyb2xs
ZXJfc2VhcmNoX2ZpbmlzaChmaW5kQ29udHJvbGxlcik7CisgICAgLy8gZ3RrX3dpZGdldF9zaG93
X25vdyhHVEtfV0lER0VUKHRlc3QtPm1fd2ViVmlldykpOworICAgIC8vIHdlYmtpdF93ZWJfdmll
d19leGVjdXRlX2VkaXRpbmdfY29tbWFuZCh0ZXN0LT5tX3dlYlZpZXcsICJVbnNlbGVjdCIpOwor
CisgICAgLy8gdGVzdC0+d2FpdFVudGlsV2lkZ2V0RHJhd24oKTsKKyAgICAvLyBHZGtQaXhidWYq
IHVuaGlnaGxpZ2h0UGl4YnVmID0gZ2RrX3BpeGJ1Zl9nZXRfZnJvbV93aW5kb3cod2ViVmlld0dk
a1dpbmRvdywgMCwgMCwgYWxsb2NhdGVkSGVpZ2h0LCBhbGxvY2F0ZWRXaWR0aCk7CisgICAgLy8g
Z19hc3NlcnQodW5oaWdobGlnaHRQaXhidWYpOworICAgIC8vIGdfYXNzZXJ0KGdka1BpeGJ1ZkVx
dWFsKG9yaWdpbmFsUGl4YnVmLCB1bmhpZ2hsaWdodFBpeGJ1ZikpOworCisgICAgZ19vYmplY3Rf
dW5yZWYob3JpZ2luYWxQaXhidWYpOworICAgIGdfb2JqZWN0X3VucmVmKGhpZ2hsaWdodFBpeGJ1
Zik7CisgICAgLy8gZ19vYmplY3RfdW5yZWYodW5oaWdobGlnaHRQaXhidWYpOworfQorCitzdGF0
aWMgdm9pZCB0ZXN0RmluZENvbnRyb2xsZXJJbnN0YW5jZShGaW5kQ29udHJvbGxlclRlc3QqIHRl
c3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgV2ViS2l0RmluZENvbnRyb2xsZXIqIGZpbmRDb250
cm9sbGVyMSA9IHdlYmtpdF93ZWJfdmlld19nZXRfZmluZF9jb250cm9sbGVyKHRlc3QtPm1fd2Vi
Vmlldyk7CisgICAgV2ViS2l0RmluZENvbnRyb2xsZXIqIGZpbmRDb250cm9sbGVyMiA9IHdlYmtp
dF93ZWJfdmlld19nZXRfZmluZF9jb250cm9sbGVyKHRlc3QtPm1fd2ViVmlldyk7CisKKyAgICBn
X2Fzc2VydChmaW5kQ29udHJvbGxlcjEgPT0gZmluZENvbnRyb2xsZXIyKTsKK30KKworc3RhdGlj
IHZvaWQgdGVzdEZpbmRDb250cm9sbGVyR2V0dGVycyhGaW5kQ29udHJvbGxlclRlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCit7CisgICAgY29uc3QgY2hhciogc2VhcmNoVGV4dCA9ICJ0ZXN0aW5n
IjsKKyAgICBndWludCBtYXhNYXRjaENvdW50ID0gMTsKKyAgICBndWludDMyIGZpbmRPcHRpb25z
ID0gV0VCS0lUX0ZJTkRfT1BUSU9OU19XUkFQX0FST1VORCB8IFdFQktJVF9GSU5EX09QVElPTlNf
QVRfV09SRF9TVEFSVFM7CisgICAgV2ViS2l0RmluZENvbnRyb2xsZXIqIGZpbmRDb250cm9sbGVy
ID0gd2Via2l0X3dlYl92aWV3X2dldF9maW5kX2NvbnRyb2xsZXIodGVzdC0+bV93ZWJWaWV3KTsK
KworICAgIHdlYmtpdF9maW5kX2NvbnRyb2xsZXJfc2VhcmNoKGZpbmRDb250cm9sbGVyLCBzZWFy
Y2hUZXh0LCBmaW5kT3B0aW9ucywgbWF4TWF0Y2hDb3VudCk7CisgICAgZ19hc3NlcnQod2Via2l0
X2ZpbmRfY29udHJvbGxlcl9nZXRfd2ViX3ZpZXcoZmluZENvbnRyb2xsZXIpID09IHRlc3QtPm1f
d2ViVmlldyk7CisgICAgZ19hc3NlcnQoIWdfc3RyY21wMCh3ZWJraXRfZmluZF9jb250cm9sbGVy
X2dldF9zZWFyY2hfdGV4dChmaW5kQ29udHJvbGxlciksIHNlYXJjaFRleHQpKTsKKyAgICBnX2Fz
c2VydCh3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF9tYXhfbWF0Y2hfY291bnQoZmluZENvbnRy
b2xsZXIpID09IG1heE1hdGNoQ291bnQpOworICAgIGdfYXNzZXJ0KHdlYmtpdF9maW5kX2NvbnRy
b2xsZXJfZ2V0X29wdGlvbnMoZmluZENvbnRyb2xsZXIpID09IGZpbmRPcHRpb25zKTsKK30KKwor
dm9pZCBiZWZvcmVBbGwoKQoreworICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRG
aW5kQ29udHJvbGxlciIsICJnZXR0ZXJzIiwgdGVzdEZpbmRDb250cm9sbGVyR2V0dGVycyk7Cisg
ICAgRmluZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktpdEZpbmRDb250cm9sbGVyIiwgImluc3Rh
bmNlIiwgdGVzdEZpbmRDb250cm9sbGVySW5zdGFuY2UpOworICAgIEZpbmRDb250cm9sbGVyVGVz
dDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJ0ZXh0LWZvdW5kIiwgdGVzdEZpbmRDb250
cm9sbGVyVGV4dEZvdW5kKTsKKyAgICBGaW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0Rmlu
ZENvbnRyb2xsZXIiLCAidGV4dC1ub3QtZm91bmQiLCB0ZXN0RmluZENvbnRyb2xsZXJUZXh0Tm90
Rm91bmQpOworICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxl
ciIsICJtYXRjaC1jb3VudCIsIHRlc3RGaW5kQ29udHJvbGxlck1hdGNoQ291bnQpOworICAgIEZp
bmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJtYXgtbWF0Y2gt
Y291bnQiLCB0ZXN0RmluZENvbnRyb2xsZXJNYXhNYXRjaENvdW50KTsKKyAgICBGaW5kQ29udHJv
bGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAibmV4dCIsIHRlc3RGaW5kQ29u
dHJvbGxlck5leHQpOworICAgIEZpbmRDb250cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29u
dHJvbGxlciIsICJwcmV2aW91cyIsIHRlc3RGaW5kQ29udHJvbGxlclByZXZpb3VzKTsKKyAgICBG
aW5kQ29udHJvbGxlclRlc3Q6OmFkZCgiV2ViS2l0RmluZENvbnRyb2xsZXIiLCAiY291bnRlZC1t
YXRjaGVzIiwgdGVzdEZpbmRDb250cm9sbGVyQ291bnRlZE1hdGNoZXMpOworICAgIEZpbmRDb250
cm9sbGVyVGVzdDo6YWRkKCJXZWJLaXRGaW5kQ29udHJvbGxlciIsICJvcHRpb25zIiwgdGVzdEZp
bmRDb250cm9sbGVyT3B0aW9ucyk7CisgICAgRmluZENvbnRyb2xsZXJUZXN0OjphZGQoIldlYktp
dEZpbmRDb250cm9sbGVyIiwgImhpZGUiLCB0ZXN0RmluZENvbnRyb2xsZXJIaWRlKTsKK30KKwor
dm9pZCBhZnRlckFsbCgpCit7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay93ZWJraXQyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93
ZWJraXQyLmgKaW5kZXggZjc4Yjg3M2EzYjNlZGQ0NzNkMWI2Njc5OTY4Nzg5YjBkMGU1NWJiMS4u
ZGQzNDVhNWM4NWI4NzFkOWY3YTVhMjFmNjg5Zjg1N2Q1NjBjZmMyMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1
ZGUgPHdlYmtpdDIvV2ViS2l0RWRpdGluZ0NvbW1hbmRzLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9X
ZWJLaXRFbnVtVHlwZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEVycm9yLmg+CisjaW5j
bHVkZSA8d2Via2l0Mi9XZWJLaXRGaW5kQ29udHJvbGxlci5oPgogI2luY2x1ZGUgPHdlYmtpdDIv
V2ViS2l0SGl0VGVzdFJlc3VsdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0UHJpbnRPcGVy
YXRpb24uaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFNldHRpbmdzLmg+Cg==
</data>
<flag name="review"
          id="131225"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>